From f39398aa4c7ab50ff0473e64bc55158ae02aece9 Mon Sep 17 00:00:00 2001 From: talha Date: Thu, 30 Jun 2022 22:41:41 +0500 Subject: [PATCH 0001/1247] Inital packages core-types and node-client --- .eslintrc.js | 13 + .gitignore | 60 + .nycrc.json | 6 + .prettierrc.json | 7 + lerna.json | 7 + package-lock.json | 6709 +++++++++++++++ package.json | 22 + packages/core-types/package.json | 40 + .../src/contracts/MultiSendContract.ts | 4 + .../core-types/src/contracts/SmartWallet.ts | 24 + .../core-types/src/ethereumLibs/EthAdapter.ts | 54 + packages/core-types/src/index.ts | 5 + packages/core-types/src/types.ts | 87 + packages/core-types/tsconfig.json | 9 + packages/node-client/hardhat.config.ts | 53 + packages/node-client/package-lock.json | 5164 ++++++++++++ packages/node-client/package.json | 75 + packages/node-client/src/SafeServiceClient.ts | 651 ++ .../node-client/src/SafeTransactionService.ts | 92 + packages/node-client/src/index.ts | 5 + .../src/types/safeTransactionServiceTypes.ts | 311 + .../node-client/src/utils/httpRequests.ts | 53 + packages/node-client/src/utils/index.ts | 3 + .../tests/e2e/addSafeDelegate.test.ts | 150 + .../node-client/tests/e2e/decodeData.test.ts | 50 + .../node-client/tests/e2e/getBalances.test.ts | 60 + .../tests/e2e/getCollectibles.test.ts | 54 + .../tests/e2e/getIncomingTransactions.test.ts | 59 + .../tests/e2e/getMultisigTransactions.test.ts | 65 + .../tests/e2e/getNextNonce.test.ts | 42 + .../tests/e2e/getPendingTransactions.test.ts | 53 + .../tests/e2e/getSafeDelegates.test.ts | 100 + .../node-client/tests/e2e/getSafeInfo.test.ts | 44 + .../tests/e2e/getSafesByOwner.test.ts | 53 + .../tests/e2e/getServiceInfo.test.ts | 18 + .../e2e/getServiceMastercopiesInfo.test.ts | 21 + .../node-client/tests/e2e/getToken.test.ts | 42 + .../tests/e2e/getTokenList.test.ts | 19 + .../tests/e2e/getTransaction.test.ts | 34 + .../e2e/getTransactionConfirmations.test.ts | 37 + .../tests/e2e/getUsdBalances.test.ts | 72 + .../tests/e2e/removeAllSafeDelegates.test.ts | 97 + .../tests/e2e/removeSafeDelegate.test.ts | 144 + .../node-client/tests/endpoint/index.test.ts | 692 ++ packages/node-client/tests/utils/config.ts | 7 + .../tests/utils/setupEthAdapter.ts | 23 + .../tests/utils/setupServiceClient.ts | 20 + packages/node-client/tsconfig.json | 9 + tsconfig.settings.json | 28 + yarn.lock | 7488 +++++++++++++++++ 50 files changed, 22935 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .nycrc.json create mode 100644 .prettierrc.json create mode 100644 lerna.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 packages/core-types/package.json create mode 100644 packages/core-types/src/contracts/MultiSendContract.ts create mode 100644 packages/core-types/src/contracts/SmartWallet.ts create mode 100644 packages/core-types/src/ethereumLibs/EthAdapter.ts create mode 100644 packages/core-types/src/index.ts create mode 100644 packages/core-types/src/types.ts create mode 100644 packages/core-types/tsconfig.json create mode 100644 packages/node-client/hardhat.config.ts create mode 100644 packages/node-client/package-lock.json create mode 100644 packages/node-client/package.json create mode 100644 packages/node-client/src/SafeServiceClient.ts create mode 100644 packages/node-client/src/SafeTransactionService.ts create mode 100644 packages/node-client/src/index.ts create mode 100644 packages/node-client/src/types/safeTransactionServiceTypes.ts create mode 100644 packages/node-client/src/utils/httpRequests.ts create mode 100644 packages/node-client/src/utils/index.ts create mode 100644 packages/node-client/tests/e2e/addSafeDelegate.test.ts create mode 100644 packages/node-client/tests/e2e/decodeData.test.ts create mode 100644 packages/node-client/tests/e2e/getBalances.test.ts create mode 100644 packages/node-client/tests/e2e/getCollectibles.test.ts create mode 100644 packages/node-client/tests/e2e/getIncomingTransactions.test.ts create mode 100644 packages/node-client/tests/e2e/getMultisigTransactions.test.ts create mode 100644 packages/node-client/tests/e2e/getNextNonce.test.ts create mode 100644 packages/node-client/tests/e2e/getPendingTransactions.test.ts create mode 100644 packages/node-client/tests/e2e/getSafeDelegates.test.ts create mode 100644 packages/node-client/tests/e2e/getSafeInfo.test.ts create mode 100644 packages/node-client/tests/e2e/getSafesByOwner.test.ts create mode 100644 packages/node-client/tests/e2e/getServiceInfo.test.ts create mode 100644 packages/node-client/tests/e2e/getServiceMastercopiesInfo.test.ts create mode 100644 packages/node-client/tests/e2e/getToken.test.ts create mode 100644 packages/node-client/tests/e2e/getTokenList.test.ts create mode 100644 packages/node-client/tests/e2e/getTransaction.test.ts create mode 100644 packages/node-client/tests/e2e/getTransactionConfirmations.test.ts create mode 100644 packages/node-client/tests/e2e/getUsdBalances.test.ts create mode 100644 packages/node-client/tests/e2e/removeAllSafeDelegates.test.ts create mode 100644 packages/node-client/tests/e2e/removeSafeDelegate.test.ts create mode 100644 packages/node-client/tests/endpoint/index.test.ts create mode 100644 packages/node-client/tests/utils/config.ts create mode 100644 packages/node-client/tests/utils/setupEthAdapter.ts create mode 100644 packages/node-client/tests/utils/setupServiceClient.ts create mode 100644 packages/node-client/tsconfig.json create mode 100644 tsconfig.settings.json create mode 100644 yarn.lock diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..616ffbbc2 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,13 @@ +module.exports = { + parser: '@typescript-eslint/parser', // Specifies the ESLint parser + extends: [ + 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin + 'prettier/@typescript-eslint', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier + 'plugin:prettier/recommended', // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. + ], + parserOptions: { + ecmaVersion: 2020, // Allows for the parsing of modern ECMAScript features + sourceType: 'module', // Allows for the use of imports + }, + } + \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..1d6f82d93 --- /dev/null +++ b/.gitignore @@ -0,0 +1,60 @@ +# Logs +logs +*.log +yarn-debug.log* +yarn-error.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Compiled binary addons +build/ +dist/ + +# Dependency directories +node_modules/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test +.env.local + +# Stores VSCode versions used for testing VSCode extensions +.vscode +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# macOS +.DS_Store + +# Hardhat files +cache +artifacts +deployments + +# Typechain +typechain + +openapi/ diff --git a/.nycrc.json b/.nycrc.json new file mode 100644 index 000000000..20e22e7b4 --- /dev/null +++ b/.nycrc.json @@ -0,0 +1,6 @@ +{ + "include": [ + "src/**/*.ts" + ] + } + \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 000000000..652b32dab --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "semi": false, + "singleQuote": true, + "trailingComma": "none" +} + \ No newline at end of file diff --git a/lerna.json b/lerna.json new file mode 100644 index 000000000..80c403702 --- /dev/null +++ b/lerna.json @@ -0,0 +1,7 @@ +{ + "packages": [ + "packages/*" + ], + "useNx": true, + "version": "0.0.1" +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..e3b0f938a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6709 @@ +{ + "name": "root", + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true + }, + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true + }, + "@lerna/add": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.1.6.tgz", + "integrity": "sha512-+dc5LUxFSxlTgDcC+nTdbFnUphmcGsypPF0eeYPc6tqUrpOpp3Ubn07dRGG0DbpZjk/roZj38DAvx7LYFalZAQ==", + "dev": true, + "requires": { + "@lerna/bootstrap": "5.1.6", + "@lerna/command": "5.1.6", + "@lerna/filter-options": "5.1.6", + "@lerna/npm-conf": "5.1.6", + "@lerna/validation-error": "5.1.6", + "dedent": "^0.7.0", + "npm-package-arg": "^8.1.0", + "p-map": "^4.0.0", + "pacote": "^13.4.1", + "semver": "^7.3.4" + } + }, + "@lerna/bootstrap": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.1.6.tgz", + "integrity": "sha512-mCPYySlkreBmhK+uKhnwmBynVN0v7a6DCy4n3WiZ6oJ2puM/F1+8vjCBsWKmnR8YiLtUQt0dwL1fm/dCZgZy8g==", + "dev": true, + "requires": { + "@lerna/command": "5.1.6", + "@lerna/filter-options": "5.1.6", + "@lerna/has-npm-version": "5.1.6", + "@lerna/npm-install": "5.1.6", + "@lerna/package-graph": "5.1.6", + "@lerna/pulse-till-done": "5.1.6", + "@lerna/rimraf-dir": "5.1.6", + "@lerna/run-lifecycle": "5.1.6", + "@lerna/run-topologically": "5.1.6", + "@lerna/symlink-binary": "5.1.6", + "@lerna/symlink-dependencies": "5.1.6", + "@lerna/validation-error": "5.1.6", + "@npmcli/arborist": "5.2.0", + "dedent": "^0.7.0", + "get-port": "^5.1.1", + "multimatch": "^5.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4" + } + }, + "@lerna/changed": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.1.6.tgz", + "integrity": "sha512-+dy+qcKZTXmETJm9VVQHuVXfk9OeqPNcJ3qeMvvYBRuMYttEbGZDOrcCjE2vomLGhLpXElHKXnCaJEDAwEla8Q==", + "dev": true, + "requires": { + "@lerna/collect-updates": "5.1.6", + "@lerna/command": "5.1.6", + "@lerna/listable": "5.1.6", + "@lerna/output": "5.1.6" + } + }, + "@lerna/check-working-tree": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.1.6.tgz", + "integrity": "sha512-WeTO1Vjyw7ZZzM/o1Q+UWFYvvbludM++MaDhEodpNZxL1bDMR3/bvtKa/SNq52aBr4nSKOLVz1BO0Lg+yNaZXQ==", + "dev": true, + "requires": { + "@lerna/collect-uncommitted": "5.1.6", + "@lerna/describe-ref": "5.1.6", + "@lerna/validation-error": "5.1.6" + } + }, + "@lerna/child-process": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.1.6.tgz", + "integrity": "sha512-f0SPxNqXaurSoUMHDVCDjU1uA7/Qa9HnGdxiE9OoDaXaErlVloUT7Wpjbp5khryaJZC4PQ9HnnI3FSA/S/SHaA==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" + } + }, + "@lerna/clean": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.1.6.tgz", + "integrity": "sha512-SHRXg6R38NfAtwS8R3hYAacmdDds2Z/51G7YE8bMvmoE4c60eFsBwsCXwwdpPBXL/SdfEGSzoxwEvWHi+f6r7g==", + "dev": true, + "requires": { + "@lerna/command": "5.1.6", + "@lerna/filter-options": "5.1.6", + "@lerna/prompt": "5.1.6", + "@lerna/pulse-till-done": "5.1.6", + "@lerna/rimraf-dir": "5.1.6", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1" + } + }, + "@lerna/cli": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.1.6.tgz", + "integrity": "sha512-+cQoaOBK2ISw0z5uuHoP2QlV3EZZMdTPuPCVsLDuUwiJCDI3hF3Ps2qQauAZTKO8Ull7z3qid8Yv8sLNEMNrCA==", + "dev": true, + "requires": { + "@lerna/global-options": "5.1.6", + "dedent": "^0.7.0", + "npmlog": "^6.0.2", + "yargs": "^16.2.0" + }, + "dependencies": { + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, + "@lerna/collect-uncommitted": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.1.6.tgz", + "integrity": "sha512-IvAmcaENJZKXjTsxsalM8+GuApooqcsKJ74q/9yUGwO3FIMevQyz/VDOFDq7e0WCQoq6ttrdNihEjU/QTjNsMw==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "chalk": "^4.1.0", + "npmlog": "^6.0.2" + } + }, + "@lerna/collect-updates": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.1.6.tgz", + "integrity": "sha512-CjKK3bteJpDzqrNOZMGYSwqF5CQsjiPv6soRdayBlJGXB3YW32M2UFcPD77Fvef/Q0xM7FEch3R3ZnBxgzGprg==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "@lerna/describe-ref": "5.1.6", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "slash": "^3.0.0" + } + }, + "@lerna/command": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.1.6.tgz", + "integrity": "sha512-zRiQels/N8LrR3ntkOn9dRE/0kzRKYTvJTdWcjfF7BC7Lz9VsNhPVy7tdv+Un5GZjVKhDQa/Tpn1h2t6/SLaSQ==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "@lerna/package-graph": "5.1.6", + "@lerna/project": "5.1.6", + "@lerna/validation-error": "5.1.6", + "@lerna/write-log-file": "5.1.6", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^5.0.0", + "is-ci": "^2.0.0", + "npmlog": "^6.0.2" + } + }, + "@lerna/conventional-commits": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.1.6.tgz", + "integrity": "sha512-kgdQNglEtsIL6wWAhJieghcvvgpZxG2t2HPy+G/wx1qUbeUqTVkw0z88BDDZ7xOfQh6ffJ5GvLZhAj+LjijYxQ==", + "dev": true, + "requires": { + "@lerna/validation-error": "5.1.6", + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-core": "^4.2.2", + "conventional-recommended-bump": "^6.1.0", + "fs-extra": "^9.1.0", + "get-stream": "^6.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + } + } + }, + "@lerna/create": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.1.6.tgz", + "integrity": "sha512-KVwxoYQsojgoUl3AxYSOM40Pa0Coo0SLKV57abVKfHmxfIEyvcGgtxNn6eA3M1lDVntqdlaBmNatkZRt3N1EHg==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "@lerna/command": "5.1.6", + "@lerna/npm-conf": "5.1.6", + "@lerna/validation-error": "5.1.6", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "init-package-json": "^2.0.2", + "npm-package-arg": "^8.1.0", + "p-reduce": "^2.1.0", + "pacote": "^13.4.1", + "pify": "^5.0.0", + "semver": "^7.3.4", + "slash": "^3.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0", + "whatwg-url": "^8.4.0", + "yargs-parser": "20.2.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + } + } + }, + "@lerna/create-symlink": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.1.6.tgz", + "integrity": "sha512-qkooK66GY2veqHEarbMraCzdgFpg8hwt3vjuBp9sMddYccXb7HHIsTXIOJPn4H5xFizblcRzf8fUJ73XkQZpUw==", + "dev": true, + "requires": { + "cmd-shim": "^4.1.0", + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "@lerna/describe-ref": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.1.6.tgz", + "integrity": "sha512-1VIy0hTkTnlcPqy5Q1hBMJALZbVhjMvRhCnzSgkP0dEuYjaRTyxr0DbhZ4CThREQuqfE3PB2f3DaHVRO8pSSeA==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "npmlog": "^6.0.2" + } + }, + "@lerna/diff": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.1.6.tgz", + "integrity": "sha512-UdZ2yHkeTczfwevY8zTIz3kX9gl57e7fkVfNM5zEXifvhbmIozjreurgD2LWf6k/fkEORaFeQ+4dcWGerE70rQ==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "@lerna/command": "5.1.6", + "@lerna/validation-error": "5.1.6", + "npmlog": "^6.0.2" + } + }, + "@lerna/exec": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.1.6.tgz", + "integrity": "sha512-1OGca09bVdMD5a2jr7kBQMyWMger6rzwgBWOdHxPaIajPJVUTqhcLBrtJA9qVZol7jztWgDLR3mFxrvmqGijaQ==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "@lerna/command": "5.1.6", + "@lerna/filter-options": "5.1.6", + "@lerna/profiler": "5.1.6", + "@lerna/run-topologically": "5.1.6", + "@lerna/validation-error": "5.1.6", + "p-map": "^4.0.0" + } + }, + "@lerna/filter-options": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.1.6.tgz", + "integrity": "sha512-lssUzYGXEJONS14NHCMp5ddL2aNLamDQufYJh9ziNswcG2lxnis+aeboPxCAQooLptGqcIs6QXkcLo27GXsmbg==", + "dev": true, + "requires": { + "@lerna/collect-updates": "5.1.6", + "@lerna/filter-packages": "5.1.6", + "dedent": "^0.7.0", + "npmlog": "^6.0.2" + } + }, + "@lerna/filter-packages": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.1.6.tgz", + "integrity": "sha512-5cpAdwQoaGsutsY0xmd0x59IixFVZdpovxXiuhIGAakBdrwbNxNpstqJjnOEakOZ/arVQ0ozTUtZK7Vk0GjR9A==", + "dev": true, + "requires": { + "@lerna/validation-error": "5.1.6", + "multimatch": "^5.0.0", + "npmlog": "^6.0.2" + } + }, + "@lerna/get-npm-exec-opts": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.1.6.tgz", + "integrity": "sha512-YQDHGrN/Ti56sAwBkV5y/Bn2H/aJ8fQzKG+blWdkcJgoBV04I5po0IbgKiGKl57+pd2bPpDEtcA6WYPyI1Spfw==", + "dev": true, + "requires": { + "npmlog": "^6.0.2" + } + }, + "@lerna/get-packed": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.1.6.tgz", + "integrity": "sha512-m2LojNTkwSiC5dqvLP2gCj5ljPE1e8I2G/U8hIqdVttMwz5JAGbIx3MfACUBG83d5FzSqnCIA1xNkrEZFB4cQg==", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "@lerna/github-client": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.1.6.tgz", + "integrity": "sha512-ZydjvlhjUKT9HrB1xdcfBB7u/9Vlod1U2V91qj2CqCaWfwG5ob9jXK4v6tLEzZMGxUKKE2OQCyF7o20tHfkcJQ==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^18.1.0", + "git-url-parse": "^11.4.4", + "npmlog": "^6.0.2" + } + }, + "@lerna/gitlab-client": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.1.6.tgz", + "integrity": "sha512-ck5XsIz7mQdBNtfKhH4dPrD6t1UZxWBrQeIUsCLO+NorXqYcG8Oqvmzrfm0iByCvaC1QCf+zImJYvMOzjozIpg==", + "dev": true, + "requires": { + "node-fetch": "^2.6.1", + "npmlog": "^6.0.2", + "whatwg-url": "^8.4.0" + } + }, + "@lerna/global-options": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.1.6.tgz", + "integrity": "sha512-NHMVGs5zhxbtqnBuwujzanYhf7q/HsXBtPn0M/eJpEvcAXaMZgttUMyS2/1JnAUelrAbSMbT+0iOUzSlyD1gtw==", + "dev": true + }, + "@lerna/has-npm-version": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.1.6.tgz", + "integrity": "sha512-hDY5/qxp98oacg9fhBfbDmjuRCVHm1brdKsY76FJ4vN+m89sVhXLqqsSHNKCTiQ8OgSzokO2iQeysvgM7ZlqAg==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "semver": "^7.3.4" + } + }, + "@lerna/import": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.1.6.tgz", + "integrity": "sha512-RhWC/3heIevWseY+jzOfGiqPmTofaYyOOqd7+SVaVdSy79TGU0crxWpUECo7COc/FMflFVa+jlk1/JSXWpqG8g==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "@lerna/command": "5.1.6", + "@lerna/prompt": "5.1.6", + "@lerna/pulse-till-done": "5.1.6", + "@lerna/validation-error": "5.1.6", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "p-map-series": "^2.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "@lerna/info": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.1.6.tgz", + "integrity": "sha512-iB4rNweghxng4U7VUsN03M2mDRgjDr8Bv+llXGhtJoSrZ9XzJYyCvGaExG30sBr5VHaArIzJ11nnF0kSDg3bXg==", + "dev": true, + "requires": { + "@lerna/command": "5.1.6", + "@lerna/output": "5.1.6", + "envinfo": "^7.7.4" + } + }, + "@lerna/init": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.1.6.tgz", + "integrity": "sha512-S8N2vjWcHrqaowYLrX2KEbhXrs31q5wU5sfsjaJ4UxQd/cBUXvp4OWI98lRTQmXOOcw9XwJNDHhZXIR30Pn0aA==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "@lerna/command": "5.1.6", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "write-json-file": "^4.3.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "@lerna/link": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.1.6.tgz", + "integrity": "sha512-H94MHjhltS8lMA3J38fzcbtQvNe1OoaMO/ZgacC9HvrntIoepqG/2boOKprW6cnTBSwmIFVCn2+LQloBJ2Nwbw==", + "dev": true, + "requires": { + "@lerna/command": "5.1.6", + "@lerna/package-graph": "5.1.6", + "@lerna/symlink-dependencies": "5.1.6", + "p-map": "^4.0.0", + "slash": "^3.0.0" + } + }, + "@lerna/list": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.1.6.tgz", + "integrity": "sha512-GofR6H1YKoVMj0Rczk9Y+Z/y7ymOKkklRLsUJQE0nWmlKkH8/tdxGHIgfR4sX2oiwtQGfFDc8ddtLX7DHAhMiA==", + "dev": true, + "requires": { + "@lerna/command": "5.1.6", + "@lerna/filter-options": "5.1.6", + "@lerna/listable": "5.1.6", + "@lerna/output": "5.1.6" + } + }, + "@lerna/listable": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.1.6.tgz", + "integrity": "sha512-Aslj1Lo/t1jnyX+uKvBY4vyAsYKqW9A6nJ8+o1egkQ/bha8Ic4dr5z7HCBKhJl73iAHRMVNn8KlxM+E7pjwsoQ==", + "dev": true, + "requires": { + "@lerna/query-graph": "5.1.6", + "chalk": "^4.1.0", + "columnify": "^1.6.0" + } + }, + "@lerna/log-packed": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.1.6.tgz", + "integrity": "sha512-yCtgNgEmicqCVb39RO9pRQQGJaugGcsKtvaS1cDLR+M7vlF8gaSvo9t4bZExFzEF5oWcPf4T1FMuhNV12h/uJg==", + "dev": true, + "requires": { + "byte-size": "^7.0.0", + "columnify": "^1.6.0", + "has-unicode": "^2.0.1", + "npmlog": "^6.0.2" + } + }, + "@lerna/npm-conf": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.1.6.tgz", + "integrity": "sha512-7x8334t9SO2bih7qJa2s8LFuSOZk5QzZ9q1xG9xNSF8BjrhjsGOVghQ1R97l/1zTkBwhqmb1sxLcvH1e21h+MQ==", + "dev": true, + "requires": { + "config-chain": "^1.1.12", + "pify": "^5.0.0" + }, + "dependencies": { + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + } + } + }, + "@lerna/npm-dist-tag": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.1.6.tgz", + "integrity": "sha512-mwjnjqN+Z8z2lAAnOE/2L8OiLChCL374ltaxNOGnhLyWKdCFoit7qhiIIV05CgoE2/iJQoOZP7ioP3H7JtJbsw==", + "dev": true, + "requires": { + "@lerna/otplease": "5.1.6", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^6.0.2" + }, + "dependencies": { + "make-fetch-happen": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + } + }, + "npm-registry-fetch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "dev": true, + "requires": { + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + } + } + } + }, + "@lerna/npm-install": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.1.6.tgz", + "integrity": "sha512-SKqXATVPVEGS2xtNNjxGhY1/C9huxYnETelpwAB/eSLcMT4FFBVxeQ83NF9log4w+iCUaS+veElfuF2uvPxaPg==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "@lerna/get-npm-exec-opts": "5.1.6", + "fs-extra": "^9.1.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "signal-exit": "^3.0.3", + "write-pkg": "^4.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "@lerna/npm-publish": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.1.6.tgz", + "integrity": "sha512-ce5UMVZZwjpwkKdekXc1xCtwb4ZKwRVsxHCQFoCisE1/3Pw6+5DBptBOgjmJGa1VA7glxGgp5a6aSERA5grA/g==", + "dev": true, + "requires": { + "@lerna/otplease": "5.1.6", + "@lerna/run-lifecycle": "5.1.6", + "fs-extra": "^9.1.0", + "libnpmpublish": "^4.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "read-package-json": "^3.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + }, + "read-package-json": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", + "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + } + } + }, + "@lerna/npm-run-script": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.1.6.tgz", + "integrity": "sha512-9M7XGnrBoitRnzAT6UGzHtBdQB+HmpsMd+ks7laK7VeqP1rR3t7XXZOm0avMBx2lSBBFSpDIkD4HV0/MeDtcZQ==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "@lerna/get-npm-exec-opts": "5.1.6", + "npmlog": "^6.0.2" + } + }, + "@lerna/otplease": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.1.6.tgz", + "integrity": "sha512-HFiiMIuP2BoiN/V8I5KS2xZjlrnBEJSKY/oIkIRFIoL/9uvHRorKjlsi0KsQLnLHx3+pZ+AL65LXjt54sJdWiQ==", + "dev": true, + "requires": { + "@lerna/prompt": "5.1.6" + } + }, + "@lerna/output": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.1.6.tgz", + "integrity": "sha512-FjZfnDwiKHeKMEZVN2eWbVd0pKINwXRjDXV0CGo1HrTvbXQI3lcrhgoPkDE42BSALaH7E9N0YCUYOYVWlJvSzQ==", + "dev": true, + "requires": { + "npmlog": "^6.0.2" + } + }, + "@lerna/pack-directory": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.1.6.tgz", + "integrity": "sha512-dKFFQ95BheshI4eWOVYT7DF6iM8VITTwOfueLnnUe8h8OgBDHnZJOEHT+zNjvXo6sA0DtN8pvpxA8VVEroq2KQ==", + "dev": true, + "requires": { + "@lerna/get-packed": "5.1.6", + "@lerna/package": "5.1.6", + "@lerna/run-lifecycle": "5.1.6", + "@lerna/temp-write": "5.1.6", + "npm-packlist": "^2.1.4", + "npmlog": "^6.0.2", + "tar": "^6.1.0" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + } + } + }, + "@lerna/package": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.1.6.tgz", + "integrity": "sha512-OwsYEVVDEFIybYSh3edn5ZH7EoMPEmfl92pri3rqtaGYj76/ENGaQZSXT5ZH2oJKg5Jh9LrtaYAc+r/fZ+1vuQ==", + "dev": true, + "requires": { + "load-json-file": "^6.2.0", + "npm-package-arg": "^8.1.0", + "write-pkg": "^4.0.0" + } + }, + "@lerna/package-graph": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.1.6.tgz", + "integrity": "sha512-kAmcZLbFcgzdwwEE34ls2hKKwLNXrp++Lb3QgLi5oZl95cGEXjhGNqECdY+hAgBxaSOAgrAd9dvxoR36zl5LJw==", + "dev": true, + "requires": { + "@lerna/prerelease-id-from-version": "5.1.6", + "@lerna/validation-error": "5.1.6", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "semver": "^7.3.4" + } + }, + "@lerna/prerelease-id-from-version": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.1.6.tgz", + "integrity": "sha512-LJYIuxw9rpKkCWtE10gOOyqpcKRzV34Ljk0L0WSaXILlcWf5bAb0ZmF8t5UJ/MzhGklYwT/Fk0yPtVtu7GnBaA==", + "dev": true, + "requires": { + "semver": "^7.3.4" + } + }, + "@lerna/profiler": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.1.6.tgz", + "integrity": "sha512-ZFU7WPIk7FxblnGx9Ux0W+NLnTGTIpjdVWEzi/8QkJssmjxerbW62lO5tvGzv6kjPQsml2kC7yPBwX9JEOFCdQ==", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "upath": "^2.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "@lerna/project": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.1.6.tgz", + "integrity": "sha512-9EXc2uTDfruvJcWnW3UrDZCAgZ/LUOQDC92xBSi1qazSE3fEsfrLBJmMqUzBRTuGoGh5BPnJgA2l0It01z51dQ==", + "dev": true, + "requires": { + "@lerna/package": "5.1.6", + "@lerna/validation-error": "5.1.6", + "cosmiconfig": "^7.0.0", + "dedent": "^0.7.0", + "dot-prop": "^6.0.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.2", + "load-json-file": "^6.2.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "resolve-from": "^5.0.0", + "write-json-file": "^4.3.0" + } + }, + "@lerna/prompt": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.1.6.tgz", + "integrity": "sha512-3Ds/N8mzb1zyTq079CMPCg2wfo5cwVBtr0N5Bh9A+NERQuLavxF1tBRKRYLF4h9zHdybNvAMkKfoQkkyJNliQg==", + "dev": true, + "requires": { + "inquirer": "^7.3.3", + "npmlog": "^6.0.2" + } + }, + "@lerna/publish": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.1.6.tgz", + "integrity": "sha512-ZGB4JJBUTBnx5N37qNdyZ+iZX4KXtjbEnB3WU7HH7IzMHc4JZbDEQhAyfELKdvB4gEdYJTsfA8v8J75U3HcluA==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "5.1.6", + "@lerna/child-process": "5.1.6", + "@lerna/collect-updates": "5.1.6", + "@lerna/command": "5.1.6", + "@lerna/describe-ref": "5.1.6", + "@lerna/log-packed": "5.1.6", + "@lerna/npm-conf": "5.1.6", + "@lerna/npm-dist-tag": "5.1.6", + "@lerna/npm-publish": "5.1.6", + "@lerna/otplease": "5.1.6", + "@lerna/output": "5.1.6", + "@lerna/pack-directory": "5.1.6", + "@lerna/prerelease-id-from-version": "5.1.6", + "@lerna/prompt": "5.1.6", + "@lerna/pulse-till-done": "5.1.6", + "@lerna/run-lifecycle": "5.1.6", + "@lerna/run-topologically": "5.1.6", + "@lerna/validation-error": "5.1.6", + "@lerna/version": "5.1.6", + "fs-extra": "^9.1.0", + "libnpmaccess": "^4.0.1", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "pacote": "^13.4.1", + "semver": "^7.3.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "make-fetch-happen": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + } + }, + "npm-registry-fetch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "dev": true, + "requires": { + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + } + } + } + }, + "@lerna/pulse-till-done": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.1.6.tgz", + "integrity": "sha512-R9YpgGAlRB9XyYBZt41i8rLsnLqUDB8LYlOFhfrBX0Y1mI0/+9iYIHF0xBemrHqimQftu3QxvEoxpsDrXUJBIg==", + "dev": true, + "requires": { + "npmlog": "^6.0.2" + } + }, + "@lerna/query-graph": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.1.6.tgz", + "integrity": "sha512-67dzRjCGjYjEUpO3PwFIcTpgJhaQO4WT687bpJh8M5XaS0xeaz2g+e1C9U/n8xIHJm3N2PlKYMSczuvPhSayCw==", + "dev": true, + "requires": { + "@lerna/package-graph": "5.1.6" + } + }, + "@lerna/resolve-symlink": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.1.6.tgz", + "integrity": "sha512-+2rCXIj8jM31WRPqUffBAb1e5TimgSDSPTM/q52cvSs+JRgqiw+aVx/8FgG/a/bMg+5+Zx/+A4c8KxnWCjLF5A==", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "read-cmd-shim": "^2.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "@lerna/rimraf-dir": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.1.6.tgz", + "integrity": "sha512-8J9LrlW/IzSvDXxk7hbobofSOXvKS2o+q6vdamrwLapk2KfI/KGh0auBo/s4Rvr5t6OZfpr4/woLJyQFdnwWWA==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.6", + "npmlog": "^6.0.2", + "path-exists": "^4.0.0", + "rimraf": "^3.0.2" + } + }, + "@lerna/run": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.1.6.tgz", + "integrity": "sha512-WMZF4tKFL/hGhUHphcYJNUDGvpHdrLD8ysACiqgIyu5ssIWiXb0wbUO0OeGWMss0b7TNOUG1y6DGOPFWFWRd3w==", + "dev": true, + "requires": { + "@lerna/command": "5.1.6", + "@lerna/filter-options": "5.1.6", + "@lerna/npm-run-script": "5.1.6", + "@lerna/output": "5.1.6", + "@lerna/profiler": "5.1.6", + "@lerna/run-topologically": "5.1.6", + "@lerna/timer": "5.1.6", + "@lerna/validation-error": "5.1.6", + "p-map": "^4.0.0" + } + }, + "@lerna/run-lifecycle": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.1.6.tgz", + "integrity": "sha512-rTLQwIwUtN6+WpyFceZoahi1emTlLwJYwTMBZZla3w6aBwERdfpEvB4MVz2F6/TTYmJ2uzWa1Y85faGH4x4blA==", + "dev": true, + "requires": { + "@lerna/npm-conf": "5.1.6", + "@npmcli/run-script": "^3.0.2", + "npmlog": "^6.0.2" + } + }, + "@lerna/run-topologically": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.1.6.tgz", + "integrity": "sha512-2THwjyU/aq7NOUmjCKQYK7l78fUoBwBtWXFGfeqK5xN5LBc2zr293cC1Z7CAZHUVh1JklLWL0PXX8Z34g3210g==", + "dev": true, + "requires": { + "@lerna/query-graph": "5.1.6", + "p-queue": "^6.6.2" + } + }, + "@lerna/symlink-binary": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.1.6.tgz", + "integrity": "sha512-nj5a77e8Vk+AZY+batyr+lCo3EcGTiGjSP0MFnkXKn1wUyUUZiKgS48J/9RTNdTpWZRC4G2PneR6BUmnF6Mnlg==", + "dev": true, + "requires": { + "@lerna/create-symlink": "5.1.6", + "@lerna/package": "5.1.6", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "@lerna/symlink-dependencies": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.1.6.tgz", + "integrity": "sha512-nMVTEm8oi3TrKXmDeS9445zngWQR31AShKH+u9f+YZVYE1Ncv4/XpgDSkTNsbm//vMi0ilWH+QQxjBC+pDXd8Q==", + "dev": true, + "requires": { + "@lerna/create-symlink": "5.1.6", + "@lerna/resolve-symlink": "5.1.6", + "@lerna/symlink-binary": "5.1.6", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "@lerna/temp-write": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.1.6.tgz", + "integrity": "sha512-Ycb0dNBi5bwgVyc/aeZ5JmgSEWfaJjh9efFqDfsj763HBLr9sBZvqQYBRXGAWxBdDWy+lXTXximsQw5gJZZxpw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@lerna/timer": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.1.6.tgz", + "integrity": "sha512-m28ufTfg7zibqPujxborrTy9WrocCmoMXvw1PuSZ0LCf5hhK3HUJJ8ybxYAGpUXdZqjzvRQNlc954GsOkCSJEA==", + "dev": true + }, + "@lerna/validation-error": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.1.6.tgz", + "integrity": "sha512-6+rc1bGTqaRMvML8Qew+RoqZFxyESSX+GBCTv0pW1SBcNo/yC76fq9y/WSA3dn6GuqHWyX3H0Yki7HutezM7/A==", + "dev": true, + "requires": { + "npmlog": "^6.0.2" + } + }, + "@lerna/version": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.1.6.tgz", + "integrity": "sha512-UE7ZHUdHtlmHQPK8ZSc62BHnWXIPqV7nzQAM/tQngIGSAH0oXHjxktP4ysPRqX8U0jfl212fSveVK7HK988zoQ==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "5.1.6", + "@lerna/child-process": "5.1.6", + "@lerna/collect-updates": "5.1.6", + "@lerna/command": "5.1.6", + "@lerna/conventional-commits": "5.1.6", + "@lerna/github-client": "5.1.6", + "@lerna/gitlab-client": "5.1.6", + "@lerna/output": "5.1.6", + "@lerna/prerelease-id-from-version": "5.1.6", + "@lerna/prompt": "5.1.6", + "@lerna/run-lifecycle": "5.1.6", + "@lerna/run-topologically": "5.1.6", + "@lerna/temp-write": "5.1.6", + "@lerna/validation-error": "5.1.6", + "chalk": "^4.1.0", + "dedent": "^0.7.0", + "load-json-file": "^6.2.0", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "p-reduce": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4", + "slash": "^3.0.0", + "write-json-file": "^4.3.0" + } + }, + "@lerna/write-log-file": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.1.6.tgz", + "integrity": "sha512-UfuERC0dN5cw6Vc11/8fDfnXfuEQXKbOweJ2D83nrNJIZS/HwWkAoYVZ493w7xJzrqKi6V352BY3m9D7pi8h5g==", + "dev": true, + "requires": { + "npmlog": "^6.0.2", + "write-file-atomic": "^3.0.3" + }, + "dependencies": { + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/arborist": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.2.0.tgz", + "integrity": "sha512-zWV7scFGL0SmpvfQyIWnMFbU/0YgtMNyvJiJwR98kyjUSntJGWFFR0O600d5W+TrDcTg0GyDbY+HdzGEg+GXLg==", + "dev": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^3.0.0", + "bin-links": "^3.0.0", + "cacache": "^16.0.6", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.0.5", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", + "walk-up-path": "^1.0.0" + }, + "dependencies": { + "@npmcli/fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "cacache": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", + "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "lru-cache": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", + "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", + "dev": true + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + } + } + }, + "@npmcli/ci-detect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz", + "integrity": "sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q==", + "dev": true + }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/git": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", + "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", + "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/map-workspaces": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz", + "integrity": "sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q==", + "dev": true, + "requires": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@npmcli/metavuln-calculator": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.0.tgz", + "integrity": "sha512-Q5fbQqGDlYqk7kWrbg6E2j/mtqQjZop0ZE6735wYA1tYNHguIDjAuWs+kFb5rJCkLIlXllfapvsyotYKiZOTBA==", + "dev": true, + "requires": { + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", + "semver": "^7.3.5" + }, + "dependencies": { + "@npmcli/fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cacache": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", + "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "lru-cache": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", + "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", + "dev": true + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + } + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/name-from-folder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", + "dev": true + }, + "@npmcli/node-gyp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", + "dev": true + }, + "@npmcli/package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", + "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.1" + } + }, + "@npmcli/promise-spawn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz", + "integrity": "sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^8.4.1", + "read-package-json-fast": "^2.0.3" + } + }, + "@nrwl/cli": { + "version": "14.3.6", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.3.6.tgz", + "integrity": "sha512-MNCBzM3ZDsujEc5crltH/kEyNBKx6DofLHdpzY1EoiY+yF57W7E1B6ERkVUGDc52sR4snEUKpQLXdVFjwP+z8A==", + "dev": true, + "requires": { + "nx": "14.3.6" + } + }, + "@nrwl/tao": { + "version": "14.3.6", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.3.6.tgz", + "integrity": "sha512-g3y6VRq4wNtbFZIclJwRR/1hcTesx6h64g7h80VWtyRw0pVq/0zAjb8abeQSTDLM15uc1pQJYPEfsR/KgI3Sow==", + "dev": true, + "requires": { + "nx": "14.3.6" + } + }, + "@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/core": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", + "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "dev": true, + "requires": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.3", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } + } + }, + "@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "dev": true, + "requires": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.5.0.tgz", + "integrity": "sha512-VatvE5wtRkJq6hAWGTBZ62WkrdlCiy0G0u27cVOYTfAWVZi7QqTurVcjpsyc5+9hXLPRP5O/DaNEs4TgAp4Mqg==", + "dev": true + }, + "@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.20.0.tgz", + "integrity": "sha512-LbemX86JEmOCFo9eRwrtdP5Isq69TefLS1J7w0DO4PMhfpvRfqYVzq9c0eH1xgcx2PSA7/VJHu9SwvNhD9FjVg==", + "dev": true, + "requires": { + "@octokit/types": "^6.38.1" + } + }, + "@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "dev": true + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.0.tgz", + "integrity": "sha512-mvdwq+LvhR2GRDY82FgSZ52xX6wkOCpjiI3amiKbzKHd9nyKeFdXLsIQ3Go12tWRtvo+HwqoypLHDjRrgMFDQA==", + "dev": true, + "requires": { + "@octokit/types": "^6.38.0", + "deprecation": "^2.3.1" + } + }, + "@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "dev": true, + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } + } + }, + "@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/rest": { + "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "dev": true, + "requires": { + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + } + }, + "@octokit/types": { + "version": "6.38.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.38.1.tgz", + "integrity": "sha512-kWMohLCIvnwApRmxRFDOqve7puiNNdtVfgwdDOm6QyJNorWOgKv2/AodCcGqx63o28kF7Dr4/nJCatrwwqhULg==", + "dev": true, + "requires": { + "@octokit/openapi-types": "^12.5.0" + } + }, + "@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "dev": true, + "requires": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", + "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "dev": true + }, + "bin-links": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", + "integrity": "sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ==", + "dev": true, + "requires": { + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0", + "read-cmd-shim": "^3.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^4.0.0" + }, + "dependencies": { + "cmd-shim": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", + "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", + "dev": true, + "requires": { + "mkdirp-infer-owner": "^2.0.0" + } + }, + "read-cmd-shim": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", + "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", + "dev": true + }, + "write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + } + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true + }, + "byte-size": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", + "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", + "dev": true + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "cmd-shim": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", + "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "dev": true, + "requires": { + "mkdirp-infer-owner": "^2.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + } + }, + "common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-changelog-core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "dev": true, + "requires": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + } + } + }, + "conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true + }, + "conventional-changelog-writer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "dev": true, + "requires": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "requires": { + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, + "requires": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + } + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "dev": true + }, + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@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" + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "dev": true, + "requires": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, + "get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "dev": true, + "requires": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", + "dev": true, + "requires": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + } + } + }, + "git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "dev": true, + "requires": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "git-up": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.5.tgz", + "integrity": "sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^6.0.0" + } + }, + "git-url-parse": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.6.0.tgz", + "integrity": "sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g==", + "dev": true, + "requires": { + "git-up": "^4.0.0" + } + }, + "gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", + "dev": true, + "requires": { + "ini": "^1.3.2" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "dependencies": { + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@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" + } + } + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "ignore-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "init-package-json": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.5.tgz", + "integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==", + "dev": true, + "requires": { + "npm-package-arg": "^8.1.5", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "^4.1.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "read-package-json": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", + "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-ssh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "dev": true, + "requires": { + "protocols": "^2.0.1" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true + }, + "just-diff": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.0.3.tgz", + "integrity": "sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg==", + "dev": true + }, + "just-diff-apply": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.3.1.tgz", + "integrity": "sha512-dgFenZnMsc1xGNqgdtgnh7DK+Oy352CE3VZLbzcbQpsBs9iI2K3M0IRrdgREZ72eItTjbl0suRyvKRdVQa9GbA==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "lerna": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.1.6.tgz", + "integrity": "sha512-eiLj3IurbEas1rGtntW4Cf2/6y90Ot2oQaU2wv4uo2rHf6GRXUBEZ0nrE4yseDlNtsS/H7bqfrvlAYb3PWUG1A==", + "dev": true, + "requires": { + "@lerna/add": "5.1.6", + "@lerna/bootstrap": "5.1.6", + "@lerna/changed": "5.1.6", + "@lerna/clean": "5.1.6", + "@lerna/cli": "5.1.6", + "@lerna/create": "5.1.6", + "@lerna/diff": "5.1.6", + "@lerna/exec": "5.1.6", + "@lerna/import": "5.1.6", + "@lerna/info": "5.1.6", + "@lerna/init": "5.1.6", + "@lerna/link": "5.1.6", + "@lerna/list": "5.1.6", + "@lerna/publish": "5.1.6", + "@lerna/run": "5.1.6", + "@lerna/version": "5.1.6", + "import-local": "^3.0.2", + "npmlog": "^6.0.2" + } + }, + "libnpmaccess": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", + "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", + "dev": true, + "requires": { + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0" + }, + "dependencies": { + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + } + } + }, + "libnpmpublish": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", + "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", + "dev": true, + "requires": { + "normalize-package-data": "^3.0.2", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0", + "semver": "^7.1.3", + "ssri": "^8.0.1" + }, + "dependencies": { + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + } + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + } + } + }, + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + } + }, + "modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "dev": true + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", + "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "dependencies": { + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "lru-cache": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", + "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", + "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.0.tgz", + "integrity": "sha512-a04sqF6FbkyOAFA19AA0e94gS7Et5T2/IMj3VOT9nOF2RaRdVPQ1Q17Fb/HaDRFs+gbC7HOmhVZ29adpWgmDZg==", + "dev": true, + "requires": { + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^1.1.2", + "npm-normalize-package-bin": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "npm-pick-manifest": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", + "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", + "dev": true, + "requires": { + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "lru-cache": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", + "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", + "dev": true + }, + "npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + } + } + }, + "npm-registry-fetch": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", + "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", + "dev": true, + "requires": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + }, + "dependencies": { + "@npmcli/fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "cacache": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", + "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "lru-cache": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", + "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", + "dev": true + }, + "make-fetch-happen": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", + "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass-fetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + } + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "nx": { + "version": "14.3.6", + "resolved": "https://registry.npmjs.org/nx/-/nx-14.3.6.tgz", + "integrity": "sha512-jBgqXEkRalo8PwXJzO4HVNN3P5pqyL5VawyNd34qPl+4t2XlDRqoK0J74i8liPGdKPBB1HjM2K1u+QNF2ROvQA==", + "dev": true, + "requires": { + "@nrwl/cli": "14.3.6", + "@nrwl/tao": "14.3.6", + "@parcel/watcher": "2.0.4", + "chalk": "4.1.0", + "chokidar": "^3.5.1", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^10.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "js-yaml": "4.1.0", + "jsonc-parser": "3.0.0", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.3.4", + "string-width": "^4.2.3", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^3.9.0", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.4.0", + "yargs-parser": "21.0.1" + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "dev": true + }, + "p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true + }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + } + }, + "p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "dev": true, + "requires": { + "p-reduce": "^2.0.0" + } + }, + "pacote": { + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", + "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", + "dev": true, + "requires": { + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" + }, + "dependencies": { + "@npmcli/fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/run-script": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.5.tgz", + "integrity": "sha512-FyrZkZ+O0bCnQqm+mRb6sKbEJgyJudInwFN84gCcMUcxrWkR15Ags1uOHwnxHYdpj3T5eqrCZNW/Ys20MGTQ6Q==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "cacache": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", + "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + } + } + }, + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "lru-cache": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", + "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", + "dev": true + }, + "make-fetch-happen": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", + "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass-fetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "node-gyp": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", + "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + } + }, + "npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + } + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-conflict-json": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", + "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.1", + "just-diff": "^5.0.1", + "just-diff-apply": "^5.2.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@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" + } + }, + "parse-path": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.4.tgz", + "integrity": "sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0", + "qs": "^6.9.4", + "query-string": "^6.13.8" + }, + "dependencies": { + "protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + } + } + }, + "parse-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-6.0.2.tgz", + "integrity": "sha512-uCSjOvD3T+6B/sPWhR+QowAZcU/o4bjPrVBQBGFxcDF6J6FraCGIaDBsdoQawiaaAVdHvtqBe3w3vKlfBKySOQ==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "normalize-url": "^6.1.0", + "parse-path": "^4.0.4", + "protocols": "^1.4.0" + }, + "dependencies": { + "protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + } + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "dev": true + }, + "promise-call-limit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", + "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", + "dev": true, + "requires": { + "read": "1" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "protocols": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", + "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", + "dev": true + }, + "read-package-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", + "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", + "dev": true, + "requires": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "dev": true + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "dev": true + }, + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "treeverse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", + "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", + "dev": true + }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "uglify-js": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.1.tgz", + "integrity": "sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ==", + "dev": true, + "optional": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "walk-up-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", + "dev": true + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "write-json-file": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", + "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", + "dev": true, + "requires": { + "detect-indent": "^6.0.0", + "graceful-fs": "^4.1.15", + "is-plain-obj": "^2.0.0", + "make-dir": "^3.0.0", + "sort-keys": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "sort-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", + "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", + "dev": true, + "requires": { + "is-plain-obj": "^2.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } + } + }, + "write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "dev": true, + "requires": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, + "dependencies": { + "type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true + }, + "write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "dev": true, + "requires": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + } + } + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..3cad5e74a --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "root", + "private": true, + "scripts": { + "clean": "lerna clean", + "unbuild": "lerna run unbuild", + "build": "lerna run build --stream --npm-client=yarn", + "test": "FORCE_COLOR=1 lerna run test --stream --npm-client=yarn", + "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", + "format": "lerna run format --npm-client=yarn" + }, + "workspaces": { + "packages": [ + "packages/*" + ] + }, + "author": "Biconomy (https://biconomy.io)", + "devDependencies": { + "lerna": "^5.1.6", + "nx": "^14.3.6" + } +} diff --git a/packages/core-types/package.json b/packages/core-types/package.json new file mode 100644 index 000000000..1834eac90 --- /dev/null +++ b/packages/core-types/package.json @@ -0,0 +1,40 @@ +{ + "name": "core-types", + "version": "1.1.0", + "description": "Biconomy Client SDK types", + "main": "dist/src/index.js", + "typings": "dist/src/index.d.ts", + "keywords": [ + "Ethereum", + "Gnosis", + "Biconomy", + "SDK" + ], + "scripts": { + "unbuild": "rimraf dist *.tsbuildinfo", + "build": "rimraf dist && tsc", + "format": "prettier --write \"{src,tests}/**/*.ts\"", + "lint": "tslint -p tsconfig.json" + }, + "author": "Biconomy (https://biconomy.io)", + "license": "MIT", + "files": [ + "dist" + ], + "devDependencies": { + "@types/node": "^17.0.23", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "prettier": "^2.6.2", + "typescript": "^4.6.3" + }, + "dependencies": { + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/contracts": "^5.6.0", + "@gnosis.pm/safe-deployments": "^1.12.0", + "web3-core": "^1.7.1" + } +} diff --git a/packages/core-types/src/contracts/MultiSendContract.ts b/packages/core-types/src/contracts/MultiSendContract.ts new file mode 100644 index 000000000..ceb41c7b2 --- /dev/null +++ b/packages/core-types/src/contracts/MultiSendContract.ts @@ -0,0 +1,4 @@ +export interface MultiSendContract { + getAddress(): string + encode(methodName: any, params: any): string +} diff --git a/packages/core-types/src/contracts/SmartWallet.ts b/packages/core-types/src/contracts/SmartWallet.ts new file mode 100644 index 000000000..c1ef31252 --- /dev/null +++ b/packages/core-types/src/contracts/SmartWallet.ts @@ -0,0 +1,24 @@ +import { + FeeRefundData, + Transaction, + SmartAccountTrxData, + SmartAccountVersion, + TransactionOptions, + TransactionResult +} from '../types' + +export interface SmartWalletContract { + getVersion(): Promise + getAddress(): string + getNonce(): Promise + getTransactionHash(smartAccountTrxData: SmartAccountTrxData): Promise + getModulesPaginated(start: string, pageSize: number): Promise + isModuleEnabled(moduleAddress: string): Promise + execTransaction( + transaction: Transaction, + batchId: number, + feeRefundData: FeeRefundData + ): Promise + encode(methodName: string, params: any): string + estimateGas(methodName: string, params: any[], options: TransactionOptions): Promise +} diff --git a/packages/core-types/src/ethereumLibs/EthAdapter.ts b/packages/core-types/src/ethereumLibs/EthAdapter.ts new file mode 100644 index 000000000..bbfaadf99 --- /dev/null +++ b/packages/core-types/src/ethereumLibs/EthAdapter.ts @@ -0,0 +1,54 @@ +import { BigNumber } from '@ethersproject/bignumber' +import { SingletonDeployment } from '@gnosis.pm/safe-deployments' +import { SmartWalletContract } from 'contracts/SmartWallet' +import { AbiItem } from 'web3-utils' +import { MultiSendContract } from '../contracts/MultiSendContract' +import { SmartAccountVersion, Eip3770Address } from '../types' + +export interface EthAdapterTransaction { + to: string + from: string + data: string + value?: string + gasPrice?: number + gasLimit?: number +} + +export interface GetContractProps { + smartAccountVersion: SmartAccountVersion + chainId: number + singletonDeployment?: SingletonDeployment + customContractAddress?: string + customContractAbi?: AbiItem | AbiItem[] +} + +export interface EthAdapter { + isAddress(address: string): boolean + getEip3770Address(fullAddress: string): Promise + getBalance(address: string): Promise + getChainId(): Promise + getSafeContract({ + smartAccountVersion, + chainId, + singletonDeployment, + customContractAddress, + customContractAbi + }: GetContractProps): SmartWalletContract + getMultiSendContract({ + smartAccountVersion, + chainId, + singletonDeployment, + customContractAddress, + customContractAbi + }: GetContractProps): MultiSendContract + getContractCode(address: string): Promise + isContractDeployed(address: string): Promise + getTransaction(transactionHash: string): Promise + getSignerAddress(): Promise + signMessage(message: string): Promise + estimateGas( + transaction: EthAdapterTransaction, + callback?: (error: Error, gas: number) => void + ): Promise + call(transaction: EthAdapterTransaction): Promise +} diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts new file mode 100644 index 000000000..cde5d2bab --- /dev/null +++ b/packages/core-types/src/index.ts @@ -0,0 +1,5 @@ +export * from './contracts/SmartWallet' +export * from './contracts/MultiSendContract' +export * from './contracts/MultiSendContract' +export * from './ethereumLibs/EthAdapter' +export * from './types' diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts new file mode 100644 index 000000000..f7fef7ddf --- /dev/null +++ b/packages/core-types/src/types.ts @@ -0,0 +1,87 @@ +import { ContractTransaction } from '@ethersproject/contracts' +import { PromiEvent, TransactionReceipt } from 'web3-core/types' + +export type SmartAccountVersion = '1.3.0' | '1.2.0' | '1.1.1' + +export enum OperationType { + Call, // 0 + DelegateCall // 1 +} + +export interface MetaTransactionData { + readonly to: string + readonly value: string + readonly data: string + readonly operation?: OperationType +} + +export interface SmartAccountTrxData extends MetaTransactionData { + readonly operation: OperationType + readonly SmartAccountTxGas: number + readonly baseGas: number + readonly gasPrice: number + readonly gasToken: string + readonly refundReceiver: string + readonly nonce: number +} + +export interface SmartAccountTrxDataPartial extends MetaTransactionData { + readonly SmartAccountTxGas?: number + readonly baseGas?: number + readonly gasPrice?: number + readonly gasToken?: string + readonly refundReceiver?: string + readonly nonce?: number +} + +export interface Signature { + readonly signer: string + readonly data: string + staticPart(): string + dynamicPart(): string +} + +export interface SmartAccountTrx { + readonly data: SmartAccountTrxData + readonly signatures: Map + addSignature(signature: Signature): void + encodedSignatures(): string +} + +export interface Transaction { + readonly to: string + readonly value: string + readonly data: string + readonly operation: OperationType + readonly SmartAccountTxGas: number +} + +export interface FeeRefundData { + readonly baseGas?: number + readonly gasPrice?: number + readonly gasToken?: string + readonly refundReceiver?: string + readonly nonce?: number +} + +export interface TransactionOptions { + from?: string + gas?: number | string + gasLimit?: number | string + gasPrice?: number | string +} + +export interface BaseTransactionResult { + hash: string +} + +export interface TransactionResult extends BaseTransactionResult { + promiEvent?: PromiEvent + transactionResponse?: ContractTransaction + options?: TransactionOptions +} + +export interface Eip3770Address { + prefix: string + address: string +} diff --git a/packages/core-types/tsconfig.json b/packages/core-types/tsconfig.json new file mode 100644 index 000000000..c7ff8535e --- /dev/null +++ b/packages/core-types/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src" + }, + "include": ["src"] +} diff --git a/packages/node-client/hardhat.config.ts b/packages/node-client/hardhat.config.ts new file mode 100644 index 000000000..6a4425ff5 --- /dev/null +++ b/packages/node-client/hardhat.config.ts @@ -0,0 +1,53 @@ +import '@nomiclabs/hardhat-ethers' +import '@nomiclabs/hardhat-waffle' +import '@nomiclabs/hardhat-web3' +import dotenv from 'dotenv' +import { HardhatUserConfig, HttpNetworkUserConfig } from 'hardhat/types' +import yargs from 'yargs' + +const argv = yargs + .option('network', { + type: 'string', + default: 'hardhat', + }) + .help(false) + .version(false).argv + +dotenv.config() +const { INFURA_KEY, MNEMONIC, PK, TESTS_PATH } = process.env +const DEFAULT_MNEMONIC = 'myth like bonus scare over problem client lizard pioneer submit female collect' + +const sharedNetworkConfig: HttpNetworkUserConfig = {} +if (PK) { + sharedNetworkConfig.accounts = [PK]; +} else { + sharedNetworkConfig.accounts = { + mnemonic: MNEMONIC || DEFAULT_MNEMONIC, + } +} + +if (['rinkeby'].includes(argv.network) && INFURA_KEY === undefined) { + throw new Error( + `Could not find Infura key in env, unable to connect to network ${argv.network}`, + ) +} + +const config: HardhatUserConfig = { + defaultNetwork: "rinkeby", + paths: { + tests: TESTS_PATH + }, + networks: { + hardhat: { + allowUnlimitedContractSize: true, + blockGasLimit: 100000000, + gas: 100000000 + }, + rinkeby: { + ...sharedNetworkConfig, + url: `https://rinkeby.infura.io/v3/${INFURA_KEY}`, + } + } +} + +export default config diff --git a/packages/node-client/package-lock.json b/packages/node-client/package-lock.json new file mode 100644 index 000000000..9fb9b7f93 --- /dev/null +++ b/packages/node-client/package-lock.json @@ -0,0 +1,5164 @@ +{ + "name": "@gnosis.pm/safe-service-client", + "version": "1.1.2", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@ethereumjs/block": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", + "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "ethereumjs-util": "^7.1.5", + "merkle-patricia-tree": "^4.2.4" + } + }, + "@ethereumjs/blockchain": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", + "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/ethash": "^1.1.0", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "level-mem": "^5.0.1", + "lru-cache": "^5.1.1", + "semaphore-async-await": "^1.5.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/ethash": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", + "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.5.0", + "@types/levelup": "^4.3.0", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.1.1", + "miller-rabin": "^4.0.0" + }, + "dependencies": { + "buffer-xor": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", + "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + } + } + }, + "@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/vm": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", + "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.3", + "@ethereumjs/blockchain": "^5.5.3", + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "async-eventemitter": "^0.2.4", + "core-js-pure": "^3.0.1", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "merkle-patricia-tree": "^4.2.4", + "rustbn.js": "~0.2.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "requires": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + }, + "@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@gnosis.pm/safe-core-sdk-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.1.0.tgz", + "integrity": "sha512-VvEqWCliA6KXwt9N4YTzN5JcqnhLxLjUTU7trpQqQ7wU9OQcF+Kdrer86wDOF5lYZVE24zudw1s4gW3dxUkm6A==", + "requires": { + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/contracts": "^5.6.0", + "@gnosis.pm/safe-deployments": "^1.12.0", + "web3-core": "^1.7.1" + } + }, + "@gnosis.pm/safe-core-sdk-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.1.0.tgz", + "integrity": "sha512-ZH1Ps3qsreczKHHfBb34dj55LDTiU7WAeKD7jgKnhiloGWRniLv+cbBfwFQNAezoyANvgyI5ky64wgwm1bm1YA==", + "dev": true, + "requires": { + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "web3-utils": "^1.7.1" + } + }, + "@gnosis.pm/safe-deployments": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", + "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", + "requires": { + "semver": "^7.3.7" + } + }, + "@gnosis.pm/safe-ethers-lib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.1.0.tgz", + "integrity": "sha512-MG01hGu/3q/sl9fXE3sU7CMVpVMJ4k9/ro1JVZaE29jmsar1cHFUOJNws7Do3orxTLQZ2egkARcmyv+l673FoA==", + "dev": true, + "requires": { + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + } + }, + "@gnosis.pm/safe-web3-lib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.1.0.tgz", + "integrity": "sha512-B4wnVDtiK2EBuXwsI0hTYlACLVr8F9qvpFC16/Smdg8fWv/r6WpK7yB86DRyW9R1BEwkjmPvpvx9rqIKW5xRkA==", + "dev": true, + "requires": { + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dev": true, + "requires": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nomiclabs/hardhat-ethers": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.6.tgz", + "integrity": "sha512-q2Cjp20IB48rEn2NPjR1qxsIQBvFVYW9rFRCFq+bC4RUrn1Ljz3g4wM8uSlgIBZYBi2JMXxmOzFqHraczxq4Ng==", + "dev": true + }, + "@nomiclabs/hardhat-waffle": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", + "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", + "dev": true, + "requires": { + "@types/sinon-chai": "^3.2.3", + "@types/web3": "1.0.19" + } + }, + "@nomiclabs/hardhat-web3": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz", + "integrity": "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==", + "dev": true, + "requires": { + "@types/bignumber.js": "^5.0.0" + } + }, + "@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "requires": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "requires": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + } + }, + "@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true + }, + "@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "requires": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@solidity-parser/parser": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.2.tgz", + "integrity": "sha512-10cr0s+MtRtqjEw0WFJrm2rwULN30xx7btd/v9cmqME2617/2M5MbHDkFIGIGTa7lwNw4bN9mVGfhlLzrYw8pA==", + "dev": true, + "requires": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "@types/abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "dev": true + }, + "@types/bignumber.js": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", + "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==", + "dev": true, + "requires": { + "bignumber.js": "*" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, + "@types/chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "dev": true + }, + "@types/chai-as-promised": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/level-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", + "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", + "dev": true + }, + "@types/levelup": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", + "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", + "dev": true, + "requires": { + "@types/abstract-leveldown": "*", + "@types/level-errors": "*", + "@types/node": "*" + } + }, + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "@types/mkdirp": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", + "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/mocha": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "dev": true + }, + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/prettier": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", + "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", + "dev": true + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "requires": { + "@types/node": "*" + } + }, + "@types/sinon": { + "version": "10.0.12", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.12.tgz", + "integrity": "sha512-uWf4QJ4oky/GckJ1MYQxU52cgVDcXwBhDkpvLbi4EKoLPqLE4MOH6T/ttM33l3hi0oZ882G6oIzWv/oupRYSxQ==", + "dev": true, + "requires": { + "@types/sinonjs__fake-timers": "*" + } + }, + "@types/sinon-chai": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, + "@types/underscore": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", + "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", + "dev": true + }, + "@types/web3": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", + "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", + "dev": true, + "requires": { + "@types/bn.js": "*", + "@types/underscore": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", + "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/type-utils": "5.30.0", + "@typescript-eslint/utils": "5.30.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", + "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", + "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", + "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.30.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", + "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", + "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", + "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "abstract-leveldown": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "dev": true, + "requires": { + "async": "^2.4.0" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "dev": true, + "requires": { + "check-error": "^1.0.2" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true + }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, + "core-js-pure": { + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", + "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==", + "dev": true + }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "dev": true, + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + } + } + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "dev": true, + "requires": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", + "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dev": true, + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@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": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "hardhat": { + "version": "2.9.9", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.9.9.tgz", + "integrity": "sha512-Qv7SXnRc0zq1kGXruNnSKpP3eFccXMR5Qv6GVX9hBIJ5efN0PflKPq92aQ5Cv3jrjJeRevLznWZVz7bttXhVfw==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/blockchain": "^5.5.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/tx": "^3.5.1", + "@ethereumjs/vm": "^5.9.0", + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@sentry/node": "^5.18.1", + "@solidity-parser/parser": "^0.14.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "abort-controller": "^3.0.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^0.1.2", + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^7.1.4", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "lodash": "^4.17.11", + "merkle-patricia-tree": "^4.2.4", + "mnemonist": "^0.38.0", + "mocha": "^9.2.0", + "p-map": "^4.0.0", + "qs": "^6.7.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "slash": "^3.0.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "true-case-path": "^2.2.1", + "tsort": "0.0.1", + "undici": "^5.4.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "requires": { + "fp-ts": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, + "requires": { + "buffer": "^5.6.0" + } + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dev": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + } + }, + "level-mem": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", + "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", + "dev": true, + "requires": { + "level-packager": "^5.0.3", + "memdown": "^5.0.0" + } + }, + "level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "dev": true, + "requires": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, + "requires": { + "xtend": "^4.0.2" + } + }, + "level-ws": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" + } + }, + "levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "dev": true, + "requires": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true + }, + "lint-staged": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz", + "integrity": "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.16", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^5.1.1", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.5.0", + "string-argv": "^0.3.1", + "supports-color": "^9.2.2", + "yaml": "^1.10.2" + }, + "dependencies": { + "commander": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "supports-color": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", + "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", + "dev": true + } + } + }, + "listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "dev": true + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "memdown": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", + "dev": true, + "requires": { + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", + "dev": true + } + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "merkle-patricia-tree": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", + "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", + "dev": true, + "requires": { + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "requires": { + "obliterator": "^2.0.0" + } + }, + "mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true + }, + "oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "requires": { + "http-https": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pidtree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", + "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", + "dev": true + }, + "rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "semaphore-async-await": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", + "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + } + } + }, + "solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "dev": true, + "requires": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, + "requires": { + "type-fest": "^0.7.1" + }, + "dependencies": { + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true + } + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "true-case-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", + "dev": true + }, + "ts-essentials": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", + "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", + "dev": true + }, + "ts-generator": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", + "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", + "dev": true, + "requires": { + "@types/mkdirp": "^0.5.2", + "@types/prettier": "^2.1.1", + "@types/resolve": "^0.0.8", + "chalk": "^2.4.1", + "glob": "^7.1.2", + "mkdirp": "^0.5.1", + "prettier": "^2.1.2", + "resolve": "^1.8.1", + "ts-essentials": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ts-node": { + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", + "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true + }, + "tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "undici": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.5.1.tgz", + "integrity": "sha512-MEvryPLf18HvlCbLSzCW0U00IMftKGI5udnjrQbC5D4P0Hodwffhv+iGfWuJwg16Y/TK11ZFK8i+BPVW2z/eAw==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "utf-8-validate": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "web3-core": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", + "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", + "requires": { + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-requestmanager": "1.7.4", + "web3-utils": "1.7.4" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + } + } + }, + "web3-core-helpers": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", + "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", + "requires": { + "web3-eth-iban": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-method": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", + "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", + "requires": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-promievent": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", + "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-core-requestmanager": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", + "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", + "requires": { + "util": "^0.12.0", + "web3-core-helpers": "1.7.4", + "web3-providers-http": "1.7.4", + "web3-providers-ipc": "1.7.4", + "web3-providers-ws": "1.7.4" + } + }, + "web3-core-subscriptions": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", + "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4" + } + }, + "web3-eth-iban": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", + "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.7.4" + } + }, + "web3-providers-http": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", + "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", + "requires": { + "web3-core-helpers": "1.7.4", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", + "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.7.4" + } + }, + "web3-providers-ws": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", + "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4", + "websocket": "^1.0.32" + } + }, + "web3-utils": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", + "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + } + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "ws": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", + "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", + "dev": true + }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", + "requires": { + "cookiejar": "^2.1.1" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/packages/node-client/package.json b/packages/node-client/package.json new file mode 100644 index 000000000..732c9b6c7 --- /dev/null +++ b/packages/node-client/package.json @@ -0,0 +1,75 @@ +{ + "name": "node-client", + "version": "1.1.2", + "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", + "main": "dist/src/index.js", + "typings": "dist/src/index.d.ts", + "keywords": [ + "Ethereum", + "Gnosis", + "Biconomy", + "Backend Node" + ], + "scripts": { + "unbuild": "rimraf dist", + "build": "yarn rimraf dist && tsc", + "test:web3": "export TESTS_PATH=tests/endpoint && export ETH_LIB=web3 && nyc hardhat test", + "test:ethers": "export TESTS_PATH=tests/endpoint && export ETH_LIB=ethers && nyc hardhat test", + "test": "yarn test:ethers", + "test:ci:web3": "export TESTS_PATH=tests/e2e && export ETH_LIB=web3 && nyc hardhat test", + "test:ci:ethers": "export TESTS_PATH=tests/e2e && export ETH_LIB=ethers && nyc hardhat test", + "test:ci": "yarn test:ci:ethers", + "format": "prettier --write \"{src,tests,e2e}/**/*.ts\"", + "lint": "tslint -p tsconfig.json" + }, + "author": "Biconomy (https://biconomy.io)", + "license": "MIT", + "files": [ + "dist" + ], + "devDependencies": { + "@gnosis.pm/safe-ethers-lib": "^1.1.0", + "@gnosis.pm/safe-web3-lib": "^1.1.0", + "@nomiclabs/hardhat-ethers": "^2.0.5", + "@nomiclabs/hardhat-waffle": "^2.0.3", + "@nomiclabs/hardhat-web3": "^2.0.0", + "@types/chai": "^4.3.0", + "@types/chai-as-promised": "^7.1.5", + "@types/mocha": "^9.1.0", + "@types/node": "^17.0.23", + "@types/node-fetch": "^2.6.2", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "chai": "^4.3.6", + "chai-as-promised": "^7.1.1", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "hardhat": "^2.9.2", + "husky": "^7.0.4", + "lint-staged": "^12.3.7", + "mocha": "^9.2.2", + "prettier": "^2.6.2", + "rimraf": "^3.0.2", + "ts-generator": "^0.1.1", + "ts-node": "^10.7.0", + "typescript": "^4.6.3", + "core-types": "*" + }, + "lint-staged": { + "src/**/!(*test).ts": [ + "yarn lint", + "prettier --write" + ] + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "dependencies": { + "@ethersproject/abstract-signer": "^5.6.0", + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "node-fetch": "^2.6.6" + } +} diff --git a/packages/node-client/src/SafeServiceClient.ts b/packages/node-client/src/SafeServiceClient.ts new file mode 100644 index 000000000..fc78801d9 --- /dev/null +++ b/packages/node-client/src/SafeServiceClient.ts @@ -0,0 +1,651 @@ +import { Signer } from '@ethersproject/abstract-signer' +import { EthAdapter } from 'core-types' +import SafeTransactionService from './SafeTransactionService' +import { + AllTransactionsListResponse, + AllTransactionsOptions, + MasterCopyResponse, + OwnerResponse, + ProposeTransactionProps, + SafeBalanceResponse, + SafeBalancesOptions, + SafeBalancesUsdOptions, + SafeBalanceUsdResponse, + SafeCollectibleResponse, + SafeCollectiblesOptions, + SmartAccountCreationInfoResponse, + SmartAccountDelegate, + SmartAccountDelegateConfig, + SmartAccountDelegateDeleteConfig, + SafeDelegateListResponse, + SafeInfoResponse, + SafeModuleTransactionListResponse, + SafeMultisigConfirmationListResponse, + SafeMultisigTransactionEstimate, + SafeMultisigTransactionEstimateResponse, + SafeMultisigTransactionListResponse, + SafeMultisigTransactionResponse, + SmartAccountInfoResponse, + SignatureResponse, + TokenInfoListResponse, + TokenInfoResponse, + TransferListResponse +} from './types/safeTransactionServiceTypes' +import { getTxServiceBaseUrl } from './utils' +import { HttpMethod, sendRequest } from './utils/httpRequests' + +export interface SafeServiceClientConfig { + /** txServiceUrl - Safe Transaction Service URL */ + txServiceUrl: string + /** ethAdapter - Ethereum adapter */ + ethAdapter: EthAdapter +} + +class SafeServiceClient implements SafeTransactionService { + #txServiceBaseUrl: string + #ethAdapter: EthAdapter + + constructor({ txServiceUrl, ethAdapter }: SafeServiceClientConfig) { + this.#txServiceBaseUrl = getTxServiceBaseUrl(txServiceUrl) + this.#ethAdapter = ethAdapter + } + + /** + * Returns the information and configuration of the service. + * + * @returns The information and configuration of the service + */ + async getServiceInfo(): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/about`, + method: HttpMethod.Get + }) + } + + /** + * Returns the list of Safe master copies. + * + * @returns The list of Safe master copies + */ + async getServiceMasterCopiesInfo(): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/about/master-copies`, + method: HttpMethod.Get + }) + } + + /** + * Decodes the specified Safe transaction data. + * + * @param data - The Safe transaction data + * @returns The transaction data decoded + * @throws "Invalid data" + * @throws "Not Found" + * @throws "Ensure this field has at least 1 hexadecimal chars (not counting 0x)." + */ + async decodeData(data: string): Promise { + if (data === '') { + throw new Error('Invalid data') + } + return sendRequest({ + url: `${this.#txServiceBaseUrl}/data-decoder/`, + method: HttpMethod.Post, + body: { data } + }) + } + + /** + * Returns the list of Safes where the address provided is an owner. + * + * @param ownerAddress - The owner address + * @returns The list of Safes where the address provided is an owner + * @throws "Invalid owner address" + * @throws "Checksum address validation failed" + */ + async getSafesByOwner(ownerAddress: string): Promise { + if (ownerAddress === '') { + throw new Error('Invalid owner address') + } + const { address } = await this.#ethAdapter.getEip3770Address(ownerAddress) + return sendRequest({ + url: `${this.#txServiceBaseUrl}/owners/${address}/safes/`, + method: HttpMethod.Get + }) + } + + /** + * Returns all the information of a Safe transaction. + * + * @param safeTxHash - Hash of the Safe transaction + * @returns The information of a Safe transaction + * @throws "Invalid safeTxHash" + * @throws "Not found." + */ + async getTransaction(safeTxHash: string): Promise { + if (safeTxHash === '') { + throw new Error('Invalid safeTxHash') + } + return sendRequest({ + url: `${this.#txServiceBaseUrl}/multisig-transactions/${safeTxHash}/`, + method: HttpMethod.Get + }) + } + + /** + * Returns the list of confirmations for a given a Safe transaction. + * + * @param safeTxHash - The hash of the Safe transaction + * @returns The list of confirmations + * @throws "Invalid safeTxHash" + */ + async getTransactionConfirmations( + safeTxHash: string + ): Promise { + if (safeTxHash === '') { + throw new Error('Invalid safeTxHash') + } + return sendRequest({ + url: `${this.#txServiceBaseUrl}/multisig-transactions/${safeTxHash}/confirmations/`, + method: HttpMethod.Get + }) + } + + /** + * Adds a confirmation for a Safe transaction. + * + * @param safeTxHash - Hash of the Safe transaction that will be confirmed + * @param signature - Signature of the transaction + * @returns + * @throws "Invalid safeTxHash" + * @throws "Invalid signature" + * @throws "Malformed data" + * @throws "Error processing data" + */ + async confirmTransaction(safeTxHash: string, signature: string): Promise { + if (safeTxHash === '') { + throw new Error('Invalid safeTxHash') + } + if (signature === '') { + throw new Error('Invalid signature') + } + return sendRequest({ + url: `${this.#txServiceBaseUrl}/multisig-transactions/${safeTxHash}/confirmations/`, + method: HttpMethod.Post, + body: { + signature + } + }) + } + + /** + * Returns the information and configuration of the provided Safe address. + * + * @param safeAddress - The Safe address + * @returns The information and configuration of the provided Safe address + * @throws "Invalid Safe address" + * @throws "Checksum address validation failed" + */ + async getSafeInfo(safeAddress: string): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + return sendRequest({ + url: `${this.#txServiceBaseUrl}/safes/${address}/`, + method: HttpMethod.Get + }) + } + + /** + * Returns the list of delegates for a given Safe address. + * + * @param safeAddress - The Safe address + * @returns The list of delegates + * @throws "Invalid Safe address" + * @throws "Checksum address validation failed" + */ + async getSafeDelegates(safeAddress: string): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + return sendRequest({ + url: `${this.#txServiceBaseUrl}/safes/${address}/delegates/`, + method: HttpMethod.Get + }) + } + + /** + * Adds a new delegate for a given Safe address. + * + * @param delegateConfig - The configuration of the new delegate + * @returns + * @throws "Invalid Safe address" + * @throws "Invalid Safe delegate address" + * @throws "Checksum address validation failed" + * @throws "Address is not checksumed" + * @throws "Safe= does not exist or it's still not indexed" + * @throws "Signing owner is not an owner of the Safe" + */ + async addSafeDelegate({ + safe, + delegate, + label, + signer + }: SmartAccountDelegateConfig): Promise { + if (safe === '') { + throw new Error('Invalid Safe address') + } + if (delegate === '') { + throw new Error('Invalid Safe delegate address') + } + const { address: safeAddress } = await this.#ethAdapter.getEip3770Address(safe) + const { address: delegateAddress } = await this.#ethAdapter.getEip3770Address(delegate) + const totp = Math.floor(Date.now() / 1000 / 3600) + const data = delegateAddress + totp + const signature = await signer.signMessage(data) + const body: SmartAccountDelegate = { + safe: safeAddress, + delegate: delegateAddress, + label, + signature + } + return sendRequest({ + url: `${this.#txServiceBaseUrl}/safes/${safeAddress}/delegates/`, + method: HttpMethod.Post, + body + }) + } + + /** + * Removes all delegates for a given Safe address. + * + * @param safeAddress - The Safe address + * @param signer - A Signer that owns the Safe + * @returns + * @throws "Invalid Safe address" + * @throws "Checksum address validation failed" + * @throws "Safe= does not exist or it's still not indexed" + * @throws "Signing owner is not an owner of the Safe" + */ + async removeAllSafeDelegates(safeAddress: string, signer: Signer): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const totp = Math.floor(Date.now() / 1000 / 3600) + const data = address + totp + const signature = await signer.signMessage(data) + return sendRequest({ + url: `${this.#txServiceBaseUrl}/safes/${address}/delegates/`, + method: HttpMethod.Delete, + body: { signature } + }) + } + + /** + * Removes a delegate for a given Safe address. + * + * @param delegateConfig - The configuration for the delegate that will be removed + * @returns + * @throws "Invalid Safe address" + * @throws "Invalid Safe delegate address" + * @throws "Checksum address validation failed" + * @throws "Signing owner is not an owner of the Safe" + * @throws "Not found" + */ + async removeSafeDelegate({ safe, delegate, signer }: SmartAccountDelegateDeleteConfig): Promise { + if (safe === '') { + throw new Error('Invalid Safe address') + } + if (delegate === '') { + throw new Error('Invalid Safe delegate address') + } + const { address: safeAddress } = await this.#ethAdapter.getEip3770Address(safe) + const { address: delegateAddress } = await this.#ethAdapter.getEip3770Address(delegate) + const totp = Math.floor(Date.now() / 1000 / 3600) + const data = delegateAddress + totp + const signature = await signer.signMessage(data) + return sendRequest({ + url: `${this.#txServiceBaseUrl}/safes/${safeAddress}/delegates/${delegateAddress}`, + method: HttpMethod.Delete, + body: { + safe: safeAddress, + delegate: delegateAddress, + signature + } + }) + } + + /** + * Returns the creation information of a Safe. + * + * @param safeAddress - The Safe address + * @returns The creation information of a Safe + * @throws "Invalid Safe address" + * @throws "Safe creation not found" + * @throws "Checksum address validation failed" + * @throws "Problem connecting to Ethereum network" + */ + async getSafeCreationInfo(safeAddress: string): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + return sendRequest({ + url: `${this.#txServiceBaseUrl}/safes/${address}/creation/`, + method: HttpMethod.Get + }) + } + + /** + * Estimates the safeTxGas for a given Safe multi-signature transaction. + * + * @param safeAddress - The Safe address + * @param safeTransaction - The Safe transaction to estimate + * @returns The safeTxGas for the given Safe transaction + * @throws "Invalid Safe address" + * @throws "Data not valid" + * @throws "Safe not found" + * @throws "Tx not valid" + */ + async estimateSafeTransaction( + safeAddress: string, + safeTransaction: SafeMultisigTransactionEstimate + ): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + return sendRequest({ + url: `${this.#txServiceBaseUrl}/safes/${address}/multisig-transactions/estimations/`, + method: HttpMethod.Post, + body: safeTransaction + }) + } + + /** + * Creates a new multi-signature transaction with its confirmations and stores it in the Safe Transaction Service. + * + * @param proposeTransactionConfig - The configuration of the proposed transaction + * @returns The hash of the Safe transaction proposed + * @throws "Invalid Safe address" + * @throws "Invalid safeTxHash" + * @throws "Invalid data" + * @throws "Invalid ethereum address/User is not an owner/Invalid signature/Nonce already executed/Sender is not an owner" + */ + async proposeTransaction({ + safeAddress, + senderAddress, + safeTransaction, + safeTxHash, + origin + }: ProposeTransactionProps): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address: safe } = await this.#ethAdapter.getEip3770Address(safeAddress) + const { address: sender } = await this.#ethAdapter.getEip3770Address(senderAddress) + if (safeTxHash === '') { + throw new Error('Invalid safeTxHash') + } + return sendRequest({ + url: `${this.#txServiceBaseUrl}/safes/${safe}/multisig-transactions/`, + method: HttpMethod.Post, + body: { + ...safeTransaction.data, + contractTransactionHash: safeTxHash, + sender, + signature: safeTransaction.signatures.get(sender.toLowerCase())?.data, + origin + } + }) + } + + /** + * Returns the history of incoming transactions of a Safe account. + * + * @param safeAddress - The Safe address + * @returns The history of incoming transactions + * @throws "Invalid Safe address" + * @throws "Checksum address validation failed" + */ + async getIncomingTransactions(safeAddress: string): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + return sendRequest({ + url: `${this.#txServiceBaseUrl}/safes/${address}/incoming-transfers/`, + method: HttpMethod.Get + }) + } + + /** + * Returns the history of module transactions of a Safe account. + * + * @param safeAddress - The Safe address + * @returns The history of module transactions + * @throws "Invalid Safe address" + * @throws "Invalid data" + * @throws "Invalid ethereum address" + */ + async getModuleTransactions(safeAddress: string): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + return sendRequest({ + url: `${this.#txServiceBaseUrl}/safes/${address}/module-transactions/`, + method: HttpMethod.Get + }) + } + + /** + * Returns the history of multi-signature transactions of a Safe account. + * + * @param safeAddress - The Safe address + * @returns The history of multi-signature transactions + * @throws "Invalid Safe address" + * @throws "Checksum address validation failed" + */ + async getMultisigTransactions(safeAddress: string): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + return sendRequest({ + url: `${this.#txServiceBaseUrl}/safes/${address}/multisig-transactions/`, + method: HttpMethod.Get + }) + } + + /** + * Returns the list of multi-signature transactions that are waiting for the confirmation of the Safe owners. + * + * @param safeAddress - The Safe address + * @param currentNonce - Current nonce of the Safe + * @returns The list of transactions waiting for the confirmation of the Safe owners + * @throws "Invalid Safe address" + * @throws "Invalid data" + * @throws "Invalid ethereum address" + */ + async getPendingTransactions( + safeAddress: string, + currentNonce?: number + ): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + let nonce = currentNonce ? currentNonce : (await this.getSafeInfo(address)).nonce + return sendRequest({ + url: `${ + this.#txServiceBaseUrl + }/safes/${address}/multisig-transactions/?executed=false&nonce__gte=${nonce}`, + method: HttpMethod.Get + }) + } + + /** + * Returns a list of transactions for a Safe. The list has different structures depending on the transaction type + * + * @param safeAddress - The Safe address + * @returns The list of transactions waiting for the confirmation of the Safe owners + * @throws "Invalid Safe address" + * @throws "Checksum address validation failed" + */ + async getAllTransactions( + safeAddress: string, + options?: AllTransactionsOptions + ): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const url = new URL(`${this.#txServiceBaseUrl}/safes/${address}/all-transactions/`) + + const trusted = options?.trusted?.toString() || 'true' + url.searchParams.set('trusted', trusted) + + const queued = options?.queued?.toString() || 'true' + url.searchParams.set('queued', queued) + + const executed = options?.executed?.toString() || 'false' + url.searchParams.set('executed', executed) + + return sendRequest({ + url: url.toString(), + method: HttpMethod.Get + }) + } + + /** + * Returns the right nonce to propose a new transaction after the last pending transaction. + * + * @param safeAddress - The Safe address + * @returns The right nonce to propose a new transaction after the last pending transaction + * @throws "Invalid Safe address" + * @throws "Invalid data" + * @throws "Invalid ethereum address" + */ + async getNextNonce(safeAddress: string): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const pendingTransactions = await this.getPendingTransactions(address) + if (pendingTransactions.results.length > 0) { + const nonces = pendingTransactions.results.map((tx) => tx.nonce) + const lastNonce = Math.max(...nonces) + return lastNonce + 1 + } + const safeInfo = await this.getSafeInfo(address) + return safeInfo.nonce + } + + /** + * Returns the balances for Ether and ERC20 tokens of a Safe. + * + * @param safeAddress - The Safe address + * @param options - API params + * @returns The balances for Ether and ERC20 tokens + * @throws "Invalid Safe address" + * @throws "Checksum address validation failed" + */ + async getBalances( + safeAddress: string, + options?: SafeBalancesOptions + ): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + let url = new URL(`${this.#txServiceBaseUrl}/safes/${address}/balances/`) + const excludeSpam = options?.excludeSpamTokens?.toString() || 'true' + url.searchParams.set('exclude_spam', excludeSpam) + + return sendRequest({ url: url.toString(), method: HttpMethod.Get }) + } + + /** + * Returns the balances for Ether and ERC20 tokens of a Safe with USD fiat conversion. + * + * @param safeAddress - The Safe address + * @param options - API params + * @returns The balances for Ether and ERC20 tokens with USD fiat conversion + * @throws "Invalid Safe address" + * @throws "Checksum address validation failed" + */ + async getUsdBalances( + safeAddress: string, + options?: SafeBalancesUsdOptions + ): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + let url = new URL(`${this.#txServiceBaseUrl}/safes/${address}/balances/usd/`) + const excludeSpam = options?.excludeSpamTokens?.toString() || 'true' + url.searchParams.set('exclude_spam', excludeSpam) + + return sendRequest({ url: url.toString(), method: HttpMethod.Get }) + } + + /** + * Returns the collectives (ERC721 tokens) owned by the given Safe and information about them. + * + * @param safeAddress - The Safe address + * @param options - API params + * @returns The collectives owned by the given Safe + * @throws "Invalid Safe address" + * @throws "Checksum address validation failed" + */ + async getCollectibles( + safeAddress: string, + options?: SafeCollectiblesOptions + ): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + let url = new URL(`${this.#txServiceBaseUrl}/safes/${address}/collectibles/`) + const excludeSpam = options?.excludeSpamTokens?.toString() || 'true' + url.searchParams.set('exclude_spam', excludeSpam) + + return sendRequest({ url: url.toString(), method: HttpMethod.Get }) + } + + /** + * Returns the list of all the ERC20 tokens handled by the Safe. + * + * @returns The list of all the ERC20 tokens + */ + async getTokenList(): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/tokens/`, + method: HttpMethod.Get + }) + } + + /** + * Returns the information of a given ERC20 token. + * + * @param tokenAddress - The token address + * @returns The information of the given ERC20 token + * @throws "Invalid token address" + * @throws "Checksum address validation failed" + */ + async getToken(tokenAddress: string): Promise { + if (tokenAddress === '') { + throw new Error('Invalid token address') + } + const { address } = await this.#ethAdapter.getEip3770Address(tokenAddress) + return sendRequest({ + url: `${this.#txServiceBaseUrl}/tokens/${address}/`, + method: HttpMethod.Get + }) + } +} + +export default SafeServiceClient diff --git a/packages/node-client/src/SafeTransactionService.ts b/packages/node-client/src/SafeTransactionService.ts new file mode 100644 index 000000000..630a52a1a --- /dev/null +++ b/packages/node-client/src/SafeTransactionService.ts @@ -0,0 +1,92 @@ +import { Signer } from '@ethersproject/abstract-signer' +import { + MasterCopyResponse, + OwnerResponse, + ProposeTransactionProps, + SafeBalanceResponse, + SafeBalancesOptions, + SafeBalancesUsdOptions, + SafeBalanceUsdResponse, + SafeCollectibleResponse, + SafeCollectiblesOptions, + SmartAccountCreationInfoResponse, + SmartAccountDelegate, + SmartAccountDelegateConfig, + SmartAccountDelegateDeleteConfig, + SafeDelegateListResponse, + SafeInfoResponse, + SafeModuleTransactionListResponse, + SafeMultisigConfirmationListResponse, + SafeMultisigTransactionEstimate, + SafeMultisigTransactionEstimateResponse, + SafeMultisigTransactionListResponse, + SafeMultisigTransactionResponse, + SmartAccountInfoResponse, + SignatureResponse, + TokenInfoListResponse, + TokenInfoResponse, + TransferListResponse +} from './types/safeTransactionServiceTypes' + +interface SafeTransactionService { + // About + getServiceInfo(): Promise + getServiceMasterCopiesInfo(): Promise + + // Data decoder + decodeData(data: string): Promise + + // Owners + getSafesByOwner(ownerAddress: string): Promise + + // Multisig transactions + getTransaction(safeTxHash: string): Promise + getTransactionConfirmations(safeTxHash: string): Promise + confirmTransaction(safeTxHash: string, signature: string): Promise + + // Safes + getSafeInfo(safeAddress: string): Promise + getSafeDelegates(safeAddress: string): Promise + addSafeDelegate(config: SmartAccountDelegateConfig): Promise + removeSafeDelegate(config: SmartAccountDelegateDeleteConfig): Promise + removeAllSafeDelegates(safeAddress: string, signer: Signer): Promise + + // Transactions + getSafeCreationInfo(safeAddress: string): Promise + estimateSafeTransaction( + safeAddress: string, + safeTransaction: SafeMultisigTransactionEstimate + ): Promise + proposeTransaction({ + safeAddress, + senderAddress, + safeTransaction, + safeTxHash, + origin + }: ProposeTransactionProps): Promise + getIncomingTransactions(safeAddress: string): Promise + getModuleTransactions(safeAddress: string): Promise + getMultisigTransactions(safeAddress: string): Promise + getPendingTransactions( + safeAddress: string, + currentNonce?: number + ): Promise + getNextNonce(safeAddress: string): Promise + + // Balances + getBalances(safeAddress: string, options?: SafeBalancesOptions): Promise + getUsdBalances( + safeAddress: string, + options?: SafeBalancesUsdOptions + ): Promise + getCollectibles( + safeAddress: string, + options?: SafeCollectiblesOptions + ): Promise + + // Tokens + getTokenList(): Promise + getToken(tokenAddress: string): Promise +} + +export default SafeTransactionService diff --git a/packages/node-client/src/index.ts b/packages/node-client/src/index.ts new file mode 100644 index 000000000..708c34ef2 --- /dev/null +++ b/packages/node-client/src/index.ts @@ -0,0 +1,5 @@ +import SafeServiceClient, { SafeServiceClientConfig } from './SafeServiceClient' + +export * from './types/safeTransactionServiceTypes' +export default SafeServiceClient +export { SafeServiceClientConfig } diff --git a/packages/node-client/src/types/safeTransactionServiceTypes.ts b/packages/node-client/src/types/safeTransactionServiceTypes.ts new file mode 100644 index 000000000..8549d83b0 --- /dev/null +++ b/packages/node-client/src/types/safeTransactionServiceTypes.ts @@ -0,0 +1,311 @@ +import { Signer } from '@ethersproject/abstract-signer' +import { SmartAccountTrx } from 'core-types' + +export type SmartAccountInfoResponse = { + readonly name: string + readonly version: string + readonly api_version: string + readonly secure: boolean + readonly settings: { + readonly AWS_CONFIGURED: boolean + readonly AWS_S3_CUSTOM_DOMAIN: string + readonly ETHEREUM_NODE_URL: string + readonly ETHEREUM_TRACING_NODE_URL: string + readonly ETH_INTERNAL_TXS_BLOCK_PROCESS_LIMIT: number + readonly ETH_INTERNAL_NO_FILTER: boolean + readonly ETH_REORG_BLOCKS: number + readonly TOKENS_LOGO_BASE_URI: string + readonly TOKENS_LOGO_EXTENSION: string + } +} + +export type MasterCopyResponse = { + address: string + version: string + deployer: string + deployedBlockNumber: number + lastIndexedBlockNumber: number +} + +export type SafeInfoResponse = { + readonly address: string + readonly nonce: number + readonly threshold: number + readonly owners: string[] + readonly masterCopy: string + readonly modules: string[] + readonly fallbackHandler: string + readonly version: string +} + +export type OwnerResponse = { + safes: string[] +} + +export type SmartAccountCreationInfoResponse = { + readonly created: string + readonly creator: string + readonly transactionHash: string + readonly factoryAddress: string + readonly masterCopy: string + readonly setupData: string + readonly dataDecoded?: string +} + +export type SmartAccountDelegateDeleteConfig = { + readonly safe: string + readonly delegate: string + readonly signer: Signer +} + +export type SmartAccountDelegateConfig = SmartAccountDelegateDeleteConfig & { + readonly label: string +} + +export type SmartAccountDelegate = { + readonly safe: string + readonly delegate: string + readonly signature: string + readonly label: string +} + +export type SafeDelegateResponse = { + readonly delegate: string + readonly delegator: string + readonly label: string +} + +export type SafeDelegateListResponse = { + readonly count: number + readonly next?: string + readonly previous?: string + readonly results: SafeDelegateResponse[] +} + +export type SafeMultisigTransactionEstimate = { + readonly to: string + readonly value: string + readonly data?: string + readonly operation: number +} + +export type SafeMultisigTransactionEstimateResponse = { + readonly safeTxGas: string +} + +export type SignatureResponse = { + readonly signature: string +} + +export type SafeMultisigConfirmationResponse = { + readonly owner: string + readonly submissionDate: string + readonly transactionHash?: string + readonly confirmationType?: string + readonly signature: string + readonly signatureType?: string +} + +export type SafeMultisigConfirmationListResponse = { + readonly count: number + readonly next?: string + readonly previous?: string + readonly results: SafeMultisigConfirmationResponse[] +} + +export type ProposeTransactionProps = { + safeAddress: string + senderAddress: string + safeTransaction: SmartAccountTrx + safeTxHash: string + origin?: string +} + +export type SafeMultisigTransactionResponse = { + readonly safe: string + readonly to: string + readonly value: string + readonly data?: string + readonly operation: number + readonly gasToken: string + readonly safeTxGas: number + readonly baseGas: number + readonly gasPrice: string + readonly refundReceiver?: string + readonly nonce: number + readonly executionDate: string + readonly submissionDate: string + readonly modified: string + readonly blockNumber?: number + readonly transactionHash: string + readonly safeTxHash: string + readonly executor?: string + readonly isExecuted: boolean + readonly isSuccessful?: boolean + readonly ethGasPrice?: string + readonly gasUsed?: number + readonly fee?: number + readonly origin: string + readonly dataDecoded?: string + readonly confirmationsRequired: number + readonly confirmations?: SafeMultisigConfirmationResponse[] + readonly signatures?: string +} + +export type SafeMultisigTransactionListResponse = { + readonly count: number + readonly next?: string + readonly previous?: string + readonly results: SafeMultisigTransactionResponse[] +} + +export type TransferResponse = { + readonly type?: string + readonly executionDate: string + readonly blockNumber: number + readonly transactionHash: string + readonly to: string + readonly value: string + readonly tokenId: string + readonly tokenAddress?: string + readonly from: string +} + +export type TransferListResponse = { + readonly count: number + readonly next?: string + readonly previous?: string + readonly results: TransferResponse[] +} + +export type SafeModuleTransaction = { + readonly created?: string + readonly executionDate: string + readonly blockNumber?: number + readonly isSuccessful?: boolean + readonly transactionHash?: string + readonly safe: string + readonly module: string + readonly to: string + readonly value: string + readonly data: string + readonly operation: number + readonly dataDecoded?: string +} + +export type SafeModuleTransactionListResponse = { + readonly count: number + readonly next?: string + readonly previous?: string + readonly results: SafeModuleTransaction[] +} + +export type Erc20Info = { + readonly name: string + readonly symbol: string + readonly decimals: number + readonly logoUri: string +} + +export type SafeBalancesOptions = { + excludeSpamTokens?: boolean +} + +export type SafeBalanceResponse = { + readonly tokenAddress: string + readonly token: Erc20Info + readonly balance: string +} + +export type SafeBalancesUsdOptions = { + excludeSpamTokens?: boolean +} + +export type SafeBalanceUsdResponse = { + readonly tokenAddress: string + readonly token: Erc20Info + readonly balance: string + readonly ethValue: string + readonly timestamp: string + readonly fiatBalance: string + readonly fiatConversion: string + readonly fiatCode: string +} + +export type SafeCollectiblesOptions = { + excludeSpamTokens?: boolean +} + +export type SafeCollectibleResponse = { + readonly address: string + readonly tokenName: string + readonly tokenSymbol: string + readonly logoUri: string + readonly id: string + readonly uri: string + readonly name: string + readonly description: string + readonly imageUri: string + readonly metadata: any +} + +export type TokenInfoResponse = { + readonly type?: string + readonly address: string + readonly name: string + readonly symbol: string + readonly decimals: number + readonly logoUri?: string +} + +export type TokenInfoListResponse = { + readonly count: number + readonly next?: string + readonly previous?: string + readonly results: TokenInfoListResponse[] +} + +export type TransferWithTokenInfoResponse = TransferResponse & { + readonly tokenInfo: TokenInfoResponse +} + +export type SafeModuleTransactionWithTransfersResponse = SafeModuleTransaction & { + readonly txType?: 'MODULE_TRANSACTION' + readonly transfers: TransferWithTokenInfoResponse[] +} + +export type SafeMultisigTransactionWithTransfersResponse = SafeMultisigTransactionResponse & { + readonly txType?: 'MULTISIG_TRANSACTION' + readonly transfers: TransferWithTokenInfoResponse[] +} + +export type EthereumTxResponse = { + readonly executionDate: string + readonly to: string + readonly data: string + readonly txHash: string + readonly blockNumber?: number + readonly from: string +} + +export type EthereumTxWithTransfersResponse = EthereumTxResponse & { + readonly txType?: 'ETHEREUM_TRANSACTION' + readonly transfers: TransferWithTokenInfoResponse[] +} + +export type AllTransactionsOptions = { + executed?: boolean + queued?: boolean + trusted?: boolean +} + +export type AllTransactionsListResponse = { + readonly count: number + readonly next?: string + readonly previous?: string + readonly results: Array< + | SafeModuleTransactionWithTransfersResponse + | SafeMultisigTransactionWithTransfersResponse + | EthereumTxWithTransfersResponse + > +} diff --git a/packages/node-client/src/utils/httpRequests.ts b/packages/node-client/src/utils/httpRequests.ts new file mode 100644 index 000000000..e6aee087a --- /dev/null +++ b/packages/node-client/src/utils/httpRequests.ts @@ -0,0 +1,53 @@ +import fetch from 'node-fetch' + +export enum HttpMethod { + Get = 'get', + Post = 'post', + Delete = 'delete' +} + +interface HttpRequest { + url: string + method: HttpMethod + body?: Object +} + +export async function sendRequest({ url, method, body }: HttpRequest): Promise { + const response = await fetch(url, { + method, + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(body) + }) + + let jsonResponse + try { + jsonResponse = await response.json() + } catch (error) { + if (!response.ok) { + throw new Error(response.statusText) + } + } + + if (response.ok) { + return jsonResponse as T + } + if (jsonResponse.data) { + throw new Error(jsonResponse.data) + } + if (jsonResponse.detail) { + throw new Error(jsonResponse.detail) + } + if (jsonResponse.message) { + throw new Error(jsonResponse.message) + } + if (jsonResponse.nonFieldErrors) { + throw new Error(jsonResponse.nonFieldErrors) + } + if (jsonResponse.delegate) { + throw new Error(jsonResponse.delegate) + } + throw new Error(response.statusText) +} diff --git a/packages/node-client/src/utils/index.ts b/packages/node-client/src/utils/index.ts new file mode 100644 index 000000000..e1110bbbb --- /dev/null +++ b/packages/node-client/src/utils/index.ts @@ -0,0 +1,3 @@ +export function getTxServiceBaseUrl(txServiceUrl: string): string { + return `${txServiceUrl}/api/v1` +} diff --git a/packages/node-client/tests/e2e/addSafeDelegate.test.ts b/packages/node-client/tests/e2e/addSafeDelegate.test.ts new file mode 100644 index 000000000..431e1e7c3 --- /dev/null +++ b/packages/node-client/tests/e2e/addSafeDelegate.test.ts @@ -0,0 +1,150 @@ +import { Signer } from '@ethersproject/abstract-signer' +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient, { SmartAccountDelegateConfig } from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient +let signer: Signer + +describe('addSafeDelegate', () => { + before(async () => { + ;({ serviceSdk, signer } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if Safe address is empty', async () => { + const safeAddress = '' + const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' + const delegateConfig: SmartAccountDelegateConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer, + label: 'Label' + } + await chai + .expect(serviceSdk.addSafeDelegate(delegateConfig)) + .to.be.rejectedWith('Invalid Safe address') + }) + + it('should fail if Safe delegate address is empty', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const delegateAddress = '' + const delegateConfig: SmartAccountDelegateConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer, + label: 'Label' + } + await chai + .expect(serviceSdk.addSafeDelegate(delegateConfig)) + .to.be.rejectedWith('Invalid Safe delegate address') + }) + + it('should fail if Safe address is not checksummed', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() + const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' + const delegateConfig: SmartAccountDelegateConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer, + label: 'Label' + } + await chai + .expect(serviceSdk.addSafeDelegate(delegateConfig)) + .to.be.rejectedWith('Checksum address validation failed') + }) + + it('should fail if Safe delegate address is not checksummed', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0'.toLowerCase() + const delegateConfig: SmartAccountDelegateConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer, + label: 'Label' + } + await chai + .expect(serviceSdk.addSafeDelegate(delegateConfig)) + .to.be.rejectedWith(`Address ${delegateAddress} is not checksumed`) + }) + + it('should fail if Safe does not exist', async () => { + const safeAddress = '0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e' + const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' + const delegateConfig: SmartAccountDelegateConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer, + label: 'Label' + } + await chai + .expect(serviceSdk.addSafeDelegate(delegateConfig)) + .to.be.rejectedWith(`Safe=${safeAddress} does not exist or it's still not indexed`) + }) + + it('should fail if the signer is not an owner of the Safe', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' + const { serviceSdk, signer } = await getServiceClient( + '0xb0057716d5917badaf911b193b12b910811c1497b5bada8d7711f758981c3773' + ) + const delegateConfig: SmartAccountDelegateConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer, + label: 'Label' + } + await chai + .expect(serviceSdk.addSafeDelegate(delegateConfig)) + .to.be.rejectedWith('Signing owner is not an owner of the Safe') + }) + + it('should add a new delegate', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' + const delegateConfig: SmartAccountDelegateConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer, + label: 'Label' + } + const { results: initialDelegates } = await serviceSdk.getSafeDelegates(safeAddress) + chai.expect(initialDelegates.length).to.be.eq(0) + const delegateResponse = await serviceSdk.addSafeDelegate(delegateConfig) + chai.expect(delegateResponse.safe).to.be.equal(delegateConfig.safe) + chai.expect(delegateResponse.delegate).to.be.equal(delegateConfig.delegate) + chai.expect(delegateResponse.signature).to.be.a('string') + chai.expect(delegateResponse.label).to.be.equal(delegateConfig.label) + const { results: finalDelegates } = await serviceSdk.getSafeDelegates(safeAddress) + chai.expect(finalDelegates.length).to.be.eq(1) + await serviceSdk.removeSafeDelegate(delegateConfig) + }) + + it('should add a new delegate EIP-3770', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` + const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' + const eip3770DelegateAddress = `${config.EIP_3770_PREFIX}:${delegateAddress}` + const delegateConfig: SmartAccountDelegateConfig = { + safe: eip3770SafeAddress, + delegate: eip3770DelegateAddress, + signer, + label: 'Label' + } + const { results: initialDelegates } = await serviceSdk.getSafeDelegates(eip3770SafeAddress) + chai.expect(initialDelegates.length).to.be.eq(0) + const delegateResponse = await serviceSdk.addSafeDelegate(delegateConfig) + chai.expect(delegateResponse.safe).to.be.equal(safeAddress) + chai.expect(delegateResponse.delegate).to.be.equal(delegateAddress) + chai.expect(delegateResponse.signature).to.be.a('string') + chai.expect(delegateResponse.label).to.be.equal(delegateConfig.label) + const { results: finalDelegates } = await serviceSdk.getSafeDelegates(eip3770SafeAddress) + chai.expect(finalDelegates.length).to.be.eq(1) + await serviceSdk.removeSafeDelegate(delegateConfig) + }) +}) diff --git a/packages/node-client/tests/e2e/decodeData.test.ts b/packages/node-client/tests/e2e/decodeData.test.ts new file mode 100644 index 000000000..495caae48 --- /dev/null +++ b/packages/node-client/tests/e2e/decodeData.test.ts @@ -0,0 +1,50 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient from '../../src' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient + +describe('decodeData', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if data is empty', async () => { + const data = '' + await chai.expect(serviceSdk.decodeData(data)).to.be.rejectedWith('Invalid data') + }) + + it('should fail if data is invalid', async () => { + const data = '0x1' + await chai + .expect(serviceSdk.decodeData(data)) + .to.be.rejectedWith('Ensure this field has at least 1 hexadecimal chars (not counting 0x).') + }) + + it('should fail if the function selector is not found', async () => { + const data = '0x123456789' + await chai.expect(serviceSdk.decodeData(data)).to.be.rejectedWith('Not Found') + }) + + it('should decode the data', async () => { + const data = '0x610b592500000000000000000000000090F8bf6A479f320ead074411a4B0e7944Ea8c9C1' + const decodedData = await serviceSdk.decodeData(data) + chai.expect(JSON.stringify(decodedData)).to.be.equal( + JSON.stringify({ + method: 'enableModule', + parameters: [ + { + name: 'module', + type: 'address', + value: '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1' + } + ] + }) + ) + }) +}) diff --git a/packages/node-client/tests/e2e/getBalances.test.ts b/packages/node-client/tests/e2e/getBalances.test.ts new file mode 100644 index 000000000..cd10ec23a --- /dev/null +++ b/packages/node-client/tests/e2e/getBalances.test.ts @@ -0,0 +1,60 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient + +describe('getBalances', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if Safe address is empty', async () => { + const safeAddress = '' + await chai + .expect(serviceSdk.getBalances(safeAddress)) + .to.be.rejectedWith('Invalid Safe address') + }) + + it('should fail if Safe address is not checksummed', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() + await chai + .expect(serviceSdk.getBalances(safeAddress)) + .to.be.rejectedWith('Checksum address validation failed') + }) + + it('should return the list of balances', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const balances = await serviceSdk.getBalances(safeAddress) + chai.expect(balances.length).to.be.equal(2) + const ethBalance = balances.filter((safeBalance) => !safeBalance.tokenAddress)[0] + chai.expect(ethBalance.token).to.be.equal(null) + chai.expect(ethBalance.balance).to.be.equal('4000000000000000000') + const wethBalance = balances.filter( + (safeBalance) => safeBalance.tokenAddress === '0xc778417E063141139Fce010982780140Aa0cD5Ab' + )[0] + chai.expect(wethBalance.token.symbol).to.be.equal('WETH') + chai.expect(wethBalance.balance).to.be.equal('10000000000000000') + }) + + it('should return the list of balances EIP-3770', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` + const balances = await serviceSdk.getBalances(eip3770SafeAddress) + chai.expect(balances.length).to.be.equal(2) + const ethBalance = balances.filter((safeBalance) => !safeBalance.tokenAddress)[0] + chai.expect(ethBalance.token).to.be.equal(null) + chai.expect(ethBalance.balance).to.be.equal('4000000000000000000') + const wethBalance = balances.filter( + (safeBalance) => safeBalance.tokenAddress === '0xc778417E063141139Fce010982780140Aa0cD5Ab' + )[0] + chai.expect(wethBalance.token.symbol).to.be.equal('WETH') + chai.expect(wethBalance.balance).to.be.equal('10000000000000000') + }) +}) diff --git a/packages/node-client/tests/e2e/getCollectibles.test.ts b/packages/node-client/tests/e2e/getCollectibles.test.ts new file mode 100644 index 000000000..0ebb62d2b --- /dev/null +++ b/packages/node-client/tests/e2e/getCollectibles.test.ts @@ -0,0 +1,54 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient + +describe('getCollectibles', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if Safe address is empty', async () => { + const safeAddress = '' + await chai + .expect(serviceSdk.getCollectibles(safeAddress)) + .to.be.rejectedWith('Invalid Safe address') + }) + + it('should fail if Safe address is not checksummed', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() + await chai + .expect(serviceSdk.getCollectibles(safeAddress)) + .to.be.rejectedWith('Checksum address validation failed') + }) + + it('should return the list of collectibles', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const safeCollectibleResponse = await serviceSdk.getCollectibles(safeAddress) + chai.expect(safeCollectibleResponse.length).to.be.equal(2) + safeCollectibleResponse.map((safeCollectible) => { + chai.expect(safeCollectible.address).to.be.equal('0x9cf1A34D70261f0594823EFCCeed53C8c639c464') + chai.expect(safeCollectible.tokenName).to.be.equal('Safe NFTs') + chai.expect(safeCollectible.metadata.type).to.be.equal('ERC721') + }) + }) + + it('should return the list of collectibles EIP-3770', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` + const safeCollectibleResponse = await serviceSdk.getCollectibles(eip3770SafeAddress) + chai.expect(safeCollectibleResponse.length).to.be.equal(2) + safeCollectibleResponse.map((safeCollectible) => { + chai.expect(safeCollectible.address).to.be.equal('0x9cf1A34D70261f0594823EFCCeed53C8c639c464') + chai.expect(safeCollectible.tokenName).to.be.equal('Safe NFTs') + chai.expect(safeCollectible.metadata.type).to.be.equal('ERC721') + }) + }) +}) diff --git a/packages/node-client/tests/e2e/getIncomingTransactions.test.ts b/packages/node-client/tests/e2e/getIncomingTransactions.test.ts new file mode 100644 index 000000000..eb4120fa3 --- /dev/null +++ b/packages/node-client/tests/e2e/getIncomingTransactions.test.ts @@ -0,0 +1,59 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient + +describe('getIncomingTransactions', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if Safe address is empty', async () => { + const safeAddress = '' + await chai + .expect(serviceSdk.getIncomingTransactions(safeAddress)) + .to.be.rejectedWith('Invalid Safe address') + }) + + it('should fail if Safe address is not checksummed', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() + await chai + .expect(serviceSdk.getIncomingTransactions(safeAddress)) + .to.be.rejectedWith('Checksum address validation failed') + }) + + it('should return an empty list if there are no incoming transactions', async () => { + const safeAddress = '0x3e04a375aC5847C690A7f2fF54b45c59f7eeD6f0' // Safe without incoming transactions + const transferListResponse = await serviceSdk.getIncomingTransactions(safeAddress) + chai.expect(transferListResponse.count).to.be.equal(0) + chai.expect(transferListResponse.results.length).to.be.equal(0) + }) + + it('should return the list of incoming transactions', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' // Safe with incoming transactions + const transferListResponse = await serviceSdk.getIncomingTransactions(safeAddress) + chai.expect(transferListResponse.count).to.be.equal(10) + chai.expect(transferListResponse.results.length).to.be.equal(10) + transferListResponse.results.map((transaction) => { + chai.expect(transaction.to).to.be.equal(safeAddress) + }) + }) + + it('should return the list of incoming transactions EIP-3770', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' // Safe with incoming transactions + const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` + const transferListResponse = await serviceSdk.getIncomingTransactions(eip3770SafeAddress) + chai.expect(transferListResponse.count).to.be.equal(10) + chai.expect(transferListResponse.results.length).to.be.equal(10) + transferListResponse.results.map((transaction) => { + chai.expect(transaction.to).to.be.equal(safeAddress) + }) + }) +}) diff --git a/packages/node-client/tests/e2e/getMultisigTransactions.test.ts b/packages/node-client/tests/e2e/getMultisigTransactions.test.ts new file mode 100644 index 000000000..99f01e547 --- /dev/null +++ b/packages/node-client/tests/e2e/getMultisigTransactions.test.ts @@ -0,0 +1,65 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient + +describe('getMultisigTransactions', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if Safe address is empty', async () => { + const safeAddress = '' + await chai + .expect(serviceSdk.getMultisigTransactions(safeAddress)) + .to.be.rejectedWith('Invalid Safe address') + }) + + it('should fail if Safe address is not checksummed', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() + await chai + .expect(serviceSdk.getMultisigTransactions(safeAddress)) + .to.be.rejectedWith('Checksum address validation failed') + }) + + it('should return an empty list if there are no multisig transactions', async () => { + const safeAddress = '0x3e04a375aC5847C690A7f2fF54b45c59f7eeD6f0' // Safe without multisig transactions + const safeMultisigTransactionListResponse = await serviceSdk.getMultisigTransactions( + safeAddress + ) + chai.expect(safeMultisigTransactionListResponse.count).to.be.equal(0) + chai.expect(safeMultisigTransactionListResponse.results.length).to.be.equal(0) + }) + + it('should return the list of multisig transactions', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' // Safe with multisig transactions + const safeMultisigTransactionListResponse = await serviceSdk.getMultisigTransactions( + safeAddress + ) + chai.expect(safeMultisigTransactionListResponse.count).to.be.equal(11) + chai.expect(safeMultisigTransactionListResponse.results.length).to.be.equal(11) + safeMultisigTransactionListResponse.results.map((transaction) => { + chai.expect(transaction.safe).to.be.equal(safeAddress) + }) + }) + + it('should return the list of multisig transactions EIP-3770', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' // Safe with multisig transactions + const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` + const safeMultisigTransactionListResponse = await serviceSdk.getMultisigTransactions( + eip3770SafeAddress + ) + chai.expect(safeMultisigTransactionListResponse.count).to.be.equal(11) + chai.expect(safeMultisigTransactionListResponse.results.length).to.be.equal(11) + safeMultisigTransactionListResponse.results.map((transaction) => { + chai.expect(transaction.safe).to.be.equal(safeAddress) + }) + }) +}) diff --git a/packages/node-client/tests/e2e/getNextNonce.test.ts b/packages/node-client/tests/e2e/getNextNonce.test.ts new file mode 100644 index 000000000..033cd8a9a --- /dev/null +++ b/packages/node-client/tests/e2e/getNextNonce.test.ts @@ -0,0 +1,42 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient + +describe('getNextNonce', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if Safe address is empty', async () => { + const safeAddress = '' + await chai + .expect(serviceSdk.getNextNonce(safeAddress)) + .to.be.rejectedWith('Invalid Safe address') + }) + + it('should return the next Safe nonce when there are pending transactions', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const nextNonce = await serviceSdk.getNextNonce(safeAddress) + chai.expect(nextNonce).to.be.equal(10) + }) + + it('should return the next Safe nonce when there are no pending transactions', async () => { + const safeAddress = '0x3e1ee196231490c8483df2D57403c7B814f91803' + const nextNonce = await serviceSdk.getNextNonce(safeAddress) + chai.expect(nextNonce).to.be.equal(0) + }) + + it('should return the next Safe nonce when there are no pending transactions EIP-3770', async () => { + const safeAddress = '0x3e1ee196231490c8483df2D57403c7B814f91803' + const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` + const nextNonce = await serviceSdk.getNextNonce(eip3770SafeAddress) + chai.expect(nextNonce).to.be.equal(0) + }) +}) diff --git a/packages/node-client/tests/e2e/getPendingTransactions.test.ts b/packages/node-client/tests/e2e/getPendingTransactions.test.ts new file mode 100644 index 000000000..ecca53704 --- /dev/null +++ b/packages/node-client/tests/e2e/getPendingTransactions.test.ts @@ -0,0 +1,53 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient + +describe('getPendingTransactions', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if safeAddress is empty', async () => { + const safeAddress = '' + await chai + .expect(serviceSdk.getPendingTransactions(safeAddress)) + .to.be.rejectedWith('Invalid Safe address') + }) + + it('should fail if safeAddress is not checksummed', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() + await chai + .expect(serviceSdk.getPendingTransactions(safeAddress)) + .to.be.rejectedWith('Checksum address validation failed') + }) + + it('should return an empty list if there are no pending transactions', async () => { + const safeAddress = '0x3e04a375aC5847C690A7f2fF54b45c59f7eeD6f0' // Safe without pending transaction + const transactionList = await serviceSdk.getPendingTransactions(safeAddress) + chai.expect(transactionList.count).to.be.equal(0) + chai.expect(transactionList.results.length).to.be.equal(0) + }) + + it('should return the the transaction list', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' // Safe with pending transaction + const transactionList = await serviceSdk.getPendingTransactions(safeAddress) + chai.expect(transactionList.count).to.be.equal(2) + chai.expect(transactionList.results.length).to.be.equal(2) + }) + + it('should return the the transaction list EIP-3770', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' // Safe with pending transaction + const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` + const transactionList = await serviceSdk.getPendingTransactions(eip3770SafeAddress) + chai.expect(transactionList.count).to.be.equal(2) + chai.expect(transactionList.results.length).to.be.equal(2) + }) +}) diff --git a/packages/node-client/tests/e2e/getSafeDelegates.test.ts b/packages/node-client/tests/e2e/getSafeDelegates.test.ts new file mode 100644 index 000000000..2dc192158 --- /dev/null +++ b/packages/node-client/tests/e2e/getSafeDelegates.test.ts @@ -0,0 +1,100 @@ +import { Signer } from '@ethersproject/abstract-signer' +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient, { SmartAccountDelegateConfig } from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient +let signer: Signer + +describe('getSafeDelegates', () => { + before(async () => { + ;({ serviceSdk, signer } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if Safe address is empty', async () => { + const safeAddress = '' + await chai + .expect(serviceSdk.getSafeDelegates(safeAddress)) + .to.be.rejectedWith('Invalid Safe address') + }) + + it('should fail if Safe address is not checksummed', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() + await chai + .expect(serviceSdk.getSafeDelegates(safeAddress)) + .to.be.rejectedWith('Checksum address validation failed') + }) + + it('should return an empty array if the Safe address is not found', async () => { + const safeAddress = '0x11dBF28A2B46bdD4E284e79e28B2E8b94Cfa39Bc' + const safeDelegateListResponse = await serviceSdk.getSafeDelegates(safeAddress) + const results = safeDelegateListResponse.results + chai.expect(results).to.be.empty + }) + + it('should return an array of delegates', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + + const delegateConfig1: SmartAccountDelegateConfig = { + safe: safeAddress, + delegate: '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0', + signer, + label: 'Label1' + } + const delegateConfig2: SmartAccountDelegateConfig = { + safe: safeAddress, + delegate: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', + signer, + label: 'Label2' + } + await serviceSdk.addSafeDelegate(delegateConfig1) + await serviceSdk.addSafeDelegate(delegateConfig2) + const safeDelegateListResponse = await serviceSdk.getSafeDelegates(safeAddress) + const { results } = safeDelegateListResponse + const sortedResults = results.sort((a, b) => (a.delegate > b.delegate ? -1 : 1)) + chai.expect(sortedResults.length).to.be.eq(2) + chai.expect(sortedResults[0].delegate).to.be.eq(delegateConfig1.delegate) + chai.expect(sortedResults[0].delegator).to.be.eq(await delegateConfig1.signer.getAddress()) + chai.expect(sortedResults[0].label).to.be.eq(delegateConfig1.label) + chai.expect(sortedResults[1].delegate).to.be.eq(delegateConfig2.delegate) + chai.expect(sortedResults[1].delegator).to.be.eq(await delegateConfig2.signer.getAddress()) + chai.expect(sortedResults[1].label).to.be.eq(delegateConfig2.label) + await serviceSdk.removeAllSafeDelegates(safeAddress, signer) + }) + + it('should return an array of delegates EIP-3770', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` + const delegateConfig1: SmartAccountDelegateConfig = { + safe: eip3770SafeAddress, + delegate: `${config.EIP_3770_PREFIX}:0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0`, + signer, + label: 'Label1' + } + const delegateConfig2: SmartAccountDelegateConfig = { + safe: eip3770SafeAddress, + delegate: `${config.EIP_3770_PREFIX}:0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b`, + signer, + label: 'Label2' + } + await serviceSdk.addSafeDelegate(delegateConfig1) + await serviceSdk.addSafeDelegate(delegateConfig2) + const safeDelegateListResponse = await serviceSdk.getSafeDelegates(eip3770SafeAddress) + const { results } = safeDelegateListResponse + const sortedResults = results.sort((a, b) => (a.delegate > b.delegate ? -1 : 1)) + chai.expect(sortedResults.length).to.be.eq(2) + chai.expect(sortedResults[0].delegate).to.be.eq('0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0') + chai.expect(sortedResults[0].delegator).to.be.eq(await delegateConfig1.signer.getAddress()) + chai.expect(sortedResults[0].label).to.be.eq(delegateConfig1.label) + chai.expect(sortedResults[1].delegate).to.be.eq('0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b') + chai.expect(sortedResults[1].delegator).to.be.eq(await delegateConfig2.signer.getAddress()) + chai.expect(sortedResults[1].label).to.be.eq(delegateConfig2.label) + await serviceSdk.removeAllSafeDelegates(eip3770SafeAddress, signer) + }) +}) diff --git a/packages/node-client/tests/e2e/getSafeInfo.test.ts b/packages/node-client/tests/e2e/getSafeInfo.test.ts new file mode 100644 index 000000000..a6eee0b6e --- /dev/null +++ b/packages/node-client/tests/e2e/getSafeInfo.test.ts @@ -0,0 +1,44 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient + +describe('getSafeInfo', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if Safe address is empty', async () => { + const safeAddress = '' + await chai + .expect(serviceSdk.getSafeInfo(safeAddress)) + .to.be.rejectedWith('Invalid Safe address') + }) + + it('should fail if Safe address is not checksummed', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() + await chai + .expect(serviceSdk.getSafeInfo(safeAddress)) + .to.be.rejectedWith('Checksum address validation failed') + }) + + it('should return an empty array if the safeTxHash is not found', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const safeInfoResponse = await serviceSdk.getSafeInfo(safeAddress) + chai.expect(safeInfoResponse.address).to.be.equal(safeAddress) + }) + + it('should return an empty array if the safeTxHash is not found EIP-3770', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` + const safeInfoResponse = await serviceSdk.getSafeInfo(eip3770SafeAddress) + chai.expect(safeInfoResponse.address).to.be.equal(safeAddress) + }) +}) diff --git a/packages/node-client/tests/e2e/getSafesByOwner.test.ts b/packages/node-client/tests/e2e/getSafesByOwner.test.ts new file mode 100644 index 000000000..0ae41d2c7 --- /dev/null +++ b/packages/node-client/tests/e2e/getSafesByOwner.test.ts @@ -0,0 +1,53 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient + +describe('getSafesByOwner', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if owner address is empty', async () => { + const ownerAddress = '' + await chai + .expect(serviceSdk.getSafesByOwner(ownerAddress)) + .to.be.rejectedWith('Invalid owner address') + }) + + it('should fail if owner address is not checksummed', async () => { + const ownerAddress = '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1'.toLowerCase() + await chai + .expect(serviceSdk.getSafesByOwner(ownerAddress)) + .to.be.rejectedWith('Checksum address validation failed') + }) + + it('should return an empty array if there are no owned Safes', async () => { + const ownerAddress = '0x0000000000000000000000000000000000000001' + const ownerResponse = await serviceSdk.getSafesByOwner(ownerAddress) + const { safes } = ownerResponse + chai.expect(safes.length).to.be.equal(0) + }) + + it('should return the array of owned Safes', async () => { + const ownerAddress = '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1' + const ownerResponse = await serviceSdk.getSafesByOwner(ownerAddress) + const { safes } = ownerResponse + chai.expect(safes.length).to.be.greaterThan(1) + }) + + it('should return the array of owned Safes EIP-3770', async () => { + const ownerAddress = '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1' + const eip3770OwnerAddress = `${config.EIP_3770_PREFIX}:${ownerAddress}` + const ownerResponse = await serviceSdk.getSafesByOwner(eip3770OwnerAddress) + const { safes } = ownerResponse + chai.expect(safes.length).to.be.greaterThan(1) + }) +}) diff --git a/packages/node-client/tests/e2e/getServiceInfo.test.ts b/packages/node-client/tests/e2e/getServiceInfo.test.ts new file mode 100644 index 000000000..eb98beb8e --- /dev/null +++ b/packages/node-client/tests/e2e/getServiceInfo.test.ts @@ -0,0 +1,18 @@ +import { expect } from 'chai' +import SafeServiceClient from '../../src' +import { getServiceClient } from '../utils/setupServiceClient' + +let serviceSdk: SafeServiceClient + +describe('getServiceInfo', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should return the Safe info', async () => { + const safeInfo = await serviceSdk.getServiceInfo() + expect(safeInfo.api_version).to.be.equal('v1') + }) +}) diff --git a/packages/node-client/tests/e2e/getServiceMastercopiesInfo.test.ts b/packages/node-client/tests/e2e/getServiceMastercopiesInfo.test.ts new file mode 100644 index 000000000..f75a86c54 --- /dev/null +++ b/packages/node-client/tests/e2e/getServiceMastercopiesInfo.test.ts @@ -0,0 +1,21 @@ +import chai from 'chai' +import SafeServiceClient from '../../src' +import { getServiceClient } from '../utils/setupServiceClient' + +let serviceSdk: SafeServiceClient + +describe('getServiceMasterCopiesInfo', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should call getServiceMasterCopiesInfo', async () => { + const masterCopiesResponse = await serviceSdk.getServiceMasterCopiesInfo() + chai.expect(masterCopiesResponse.length).to.be.greaterThan(1) + masterCopiesResponse.map((masterCopy) => { + chai.expect(masterCopy.deployer).to.be.equal('Gnosis') + }) + }) +}) diff --git a/packages/node-client/tests/e2e/getToken.test.ts b/packages/node-client/tests/e2e/getToken.test.ts new file mode 100644 index 000000000..ae185615d --- /dev/null +++ b/packages/node-client/tests/e2e/getToken.test.ts @@ -0,0 +1,42 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient + +describe('getToken', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if token address is empty', async () => { + const tokenAddress = '' + await chai.expect(serviceSdk.getToken(tokenAddress)).to.be.rejectedWith('Invalid token address') + }) + + it('should fail if token address is not checksummed', async () => { + const tokenAddress = '0xc778417E063141139Fce010982780140Aa0cD5Ab'.toLowerCase() + await chai + .expect(serviceSdk.getToken(tokenAddress)) + .to.be.rejectedWith('Invalid ethereum address') + }) + + it('should return the token info', async () => { + const tokenAddress = '0xc778417E063141139Fce010982780140Aa0cD5Ab' + const tokenInfoResponse = await serviceSdk.getToken(tokenAddress) + chai.expect(tokenInfoResponse.address).to.be.equal('0xc778417E063141139Fce010982780140Aa0cD5Ab') + }) + + it('should return the token info EIP-3770', async () => { + const tokenAddress = '0xc778417E063141139Fce010982780140Aa0cD5Ab' + const eip3770TokenAddress = `${config.EIP_3770_PREFIX}:${tokenAddress}` + const tokenInfoResponse = await serviceSdk.getToken(eip3770TokenAddress) + chai.expect(tokenInfoResponse.address).to.be.equal('0xc778417E063141139Fce010982780140Aa0cD5Ab') + }) +}) diff --git a/packages/node-client/tests/e2e/getTokenList.test.ts b/packages/node-client/tests/e2e/getTokenList.test.ts new file mode 100644 index 000000000..27a7e98a2 --- /dev/null +++ b/packages/node-client/tests/e2e/getTokenList.test.ts @@ -0,0 +1,19 @@ +import chai from 'chai' +import SafeServiceClient from '../../src' +import { getServiceClient } from '../utils/setupServiceClient' + +let serviceSdk: SafeServiceClient + +describe('getTokenList', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should return an array of tokens', async () => { + const tokenInfoListResponse = await serviceSdk.getTokenList() + chai.expect(tokenInfoListResponse.count).to.be.greaterThan(1) + chai.expect(tokenInfoListResponse.results.length).to.be.greaterThan(1) + }) +}) diff --git a/packages/node-client/tests/e2e/getTransaction.test.ts b/packages/node-client/tests/e2e/getTransaction.test.ts new file mode 100644 index 000000000..f8e4ce80c --- /dev/null +++ b/packages/node-client/tests/e2e/getTransaction.test.ts @@ -0,0 +1,34 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient from '../../src' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient + +describe('getTransaction', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if safeTxHash is empty', async () => { + const safeTxHash = '' + await chai + .expect(serviceSdk.getTransaction(safeTxHash)) + .to.be.rejectedWith('Invalid safeTxHash') + }) + + it('should fail if safeTxHash is not found', async () => { + const safeTxHash = '0x' + await chai.expect(serviceSdk.getTransaction(safeTxHash)).to.be.rejectedWith('Not found.') + }) + + it('should return the transaction with the given safeTxHash', async () => { + const safeTxHash = '0xb22be4e57718560c89de96acd1acefe55c2673b31a7019a374ebb1d8a2842f5d' + const transaction = await serviceSdk.getTransaction(safeTxHash) + chai.expect(transaction.safeTxHash).to.be.equal(safeTxHash) + }) +}) diff --git a/packages/node-client/tests/e2e/getTransactionConfirmations.test.ts b/packages/node-client/tests/e2e/getTransactionConfirmations.test.ts new file mode 100644 index 000000000..26bd60c1d --- /dev/null +++ b/packages/node-client/tests/e2e/getTransactionConfirmations.test.ts @@ -0,0 +1,37 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient from '../../src' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient + +describe('getTransactionConfirmations', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if safeTxHash is empty', async () => { + const safeTxHash = '' + await chai + .expect(serviceSdk.getTransactionConfirmations(safeTxHash)) + .to.be.rejectedWith('Invalid safeTxHash') + }) + + it.skip('should return an empty array if the safeTxHash is not found', async () => { + const safeTxHash = '0x' + const transactionConfirmations = await serviceSdk.getTransactionConfirmations(safeTxHash) + chai.expect(transactionConfirmations.count).to.be.equal(0) + chai.expect(transactionConfirmations.results.length).to.be.equal(0) + }) + + it('should return the transaction with the given safeTxHash', async () => { + const safeTxHash = '0xb22be4e57718560c89de96acd1acefe55c2673b31a7019a374ebb1d8a2842f5d' + const transactionConfirmations = await serviceSdk.getTransactionConfirmations(safeTxHash) + chai.expect(transactionConfirmations.count).to.be.equal(2) + chai.expect(transactionConfirmations.results.length).to.be.equal(2) + }) +}) diff --git a/packages/node-client/tests/e2e/getUsdBalances.test.ts b/packages/node-client/tests/e2e/getUsdBalances.test.ts new file mode 100644 index 000000000..134274cb6 --- /dev/null +++ b/packages/node-client/tests/e2e/getUsdBalances.test.ts @@ -0,0 +1,72 @@ +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient + +describe('getUsdBalances', () => { + before(async () => { + ;({ serviceSdk } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if Safe address is empty', async () => { + const safeAddress = '' + await chai + .expect(serviceSdk.getUsdBalances(safeAddress)) + .to.be.rejectedWith('Invalid Safe address') + }) + + it('should fail if Safe address is not checksummed', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() + await chai + .expect(serviceSdk.getUsdBalances(safeAddress)) + .to.be.rejectedWith('Checksum address validation failed') + }) + + it('should return the list of USD balances', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const balances = await serviceSdk.getUsdBalances(safeAddress) + chai.expect(balances.length).to.be.equal(2) + const ethBalance = balances.filter((safeBalance) => !safeBalance.tokenAddress)[0] + chai.expect(ethBalance.token).to.be.equal(null) + chai.expect(ethBalance.balance).to.be.equal('4000000000000000000') + chai.expect(ethBalance.fiatCode).to.be.equal('USD') + chai.expect(ethBalance.fiatBalance).not.to.be.equal('') + chai.expect(ethBalance.fiatConversion).not.to.be.equal('') + const wethBalance = balances.filter( + (safeBalance) => safeBalance.tokenAddress === '0xc778417E063141139Fce010982780140Aa0cD5Ab' + )[0] + chai.expect(wethBalance.token.symbol).to.be.equal('WETH') + chai.expect(wethBalance.balance).to.be.equal('10000000000000000') + chai.expect(wethBalance.fiatCode).to.be.equal('USD') + chai.expect(wethBalance.fiatBalance).not.to.be.equal('') + chai.expect(wethBalance.fiatConversion).not.to.be.equal('') + }) + + it('should return the list of USD balances EIP-3770', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` + const balances = await serviceSdk.getUsdBalances(eip3770SafeAddress) + chai.expect(balances.length).to.be.equal(2) + const ethBalance = balances.filter((safeBalance) => !safeBalance.tokenAddress)[0] + chai.expect(ethBalance.token).to.be.equal(null) + chai.expect(ethBalance.balance).to.be.equal('4000000000000000000') + chai.expect(ethBalance.fiatCode).to.be.equal('USD') + chai.expect(ethBalance.fiatBalance).not.to.be.equal('') + chai.expect(ethBalance.fiatConversion).not.to.be.equal('') + const wethBalance = balances.filter( + (safeBalance) => safeBalance.tokenAddress === '0xc778417E063141139Fce010982780140Aa0cD5Ab' + )[0] + chai.expect(wethBalance.token.symbol).to.be.equal('WETH') + chai.expect(wethBalance.balance).to.be.equal('10000000000000000') + chai.expect(wethBalance.fiatCode).to.be.equal('USD') + chai.expect(wethBalance.fiatBalance).not.to.be.equal('') + chai.expect(wethBalance.fiatConversion).not.to.be.equal('') + }) +}) diff --git a/packages/node-client/tests/e2e/removeAllSafeDelegates.test.ts b/packages/node-client/tests/e2e/removeAllSafeDelegates.test.ts new file mode 100644 index 000000000..2f8ebef62 --- /dev/null +++ b/packages/node-client/tests/e2e/removeAllSafeDelegates.test.ts @@ -0,0 +1,97 @@ +import { Signer } from '@ethersproject/abstract-signer' +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient, { SmartAccountDelegateConfig } from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient +let signer: Signer + +describe('removeAllSafeDelegates', () => { + before(async () => { + ;({ serviceSdk, signer } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if Safe address is empty', async () => { + const safeAddress = '' + await chai + .expect(serviceSdk.removeAllSafeDelegates(safeAddress, signer)) + .to.be.rejectedWith('Invalid Safe address') + }) + + it('should fail if Safe address is not checksummed', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() + await chai + .expect(serviceSdk.removeAllSafeDelegates(safeAddress, signer)) + .to.be.rejectedWith('Checksum address validation failed') + }) + + it('should fail if Safe does not exist', async () => { + const safeAddress = '0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e' + await chai + .expect(serviceSdk.removeAllSafeDelegates(safeAddress, signer)) + .to.be.rejectedWith(`Safe=${safeAddress} does not exist or it's still not indexed`) + }) + + it('should fail if the signer is not an owner of the Safe', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const { serviceSdk, signer } = await getServiceClient( + '0xb0057716d5917badaf911b193b12b910811c1497b5bada8d7711f758981c3773' + ) + await chai + .expect(serviceSdk.removeAllSafeDelegates(safeAddress, signer)) + .to.be.rejectedWith('Signing owner is not an owner of the Safe') + }) + + it('should remove all delegates', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const delegateConfig1: SmartAccountDelegateConfig = { + safe: safeAddress, + delegate: '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0', + signer, + label: 'Label1' + } + const delegateConfig2: SmartAccountDelegateConfig = { + safe: safeAddress, + delegate: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', + signer, + label: 'Label2' + } + await serviceSdk.addSafeDelegate(delegateConfig1) + await serviceSdk.addSafeDelegate(delegateConfig2) + const { results: initialDelegates } = await serviceSdk.getSafeDelegates(safeAddress) + chai.expect(initialDelegates.length).to.be.eq(2) + await serviceSdk.removeAllSafeDelegates(safeAddress, signer) + const { results: finalDelegates } = await serviceSdk.getSafeDelegates(safeAddress) + chai.expect(finalDelegates.length).to.be.eq(0) + }) + + it('should remove all delegates EIP-3770', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` + const delegateConfig1: SmartAccountDelegateConfig = { + safe: eip3770SafeAddress, + delegate: `${config.EIP_3770_PREFIX}:0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0`, + signer, + label: 'Label1' + } + const delegateConfig2: SmartAccountDelegateConfig = { + safe: eip3770SafeAddress, + delegate: `${config.EIP_3770_PREFIX}:0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b`, + signer, + label: 'Label2' + } + await serviceSdk.addSafeDelegate(delegateConfig1) + await serviceSdk.addSafeDelegate(delegateConfig2) + const { results: initialDelegates } = await serviceSdk.getSafeDelegates(eip3770SafeAddress) + chai.expect(initialDelegates.length).to.be.eq(2) + await serviceSdk.removeAllSafeDelegates(eip3770SafeAddress, signer) + const { results: finalDelegates } = await serviceSdk.getSafeDelegates(eip3770SafeAddress) + chai.expect(finalDelegates.length).to.be.eq(0) + }) +}) diff --git a/packages/node-client/tests/e2e/removeSafeDelegate.test.ts b/packages/node-client/tests/e2e/removeSafeDelegate.test.ts new file mode 100644 index 000000000..e2cbc76b8 --- /dev/null +++ b/packages/node-client/tests/e2e/removeSafeDelegate.test.ts @@ -0,0 +1,144 @@ +import { Signer } from '@ethersproject/abstract-signer' +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import SafeServiceClient, { SmartAccountDelegateDeleteConfig } from '../../src' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' + +chai.use(chaiAsPromised) + +let serviceSdk: SafeServiceClient +let signer: Signer + +describe('removeSafeDelegate', () => { + before(async () => { + ;({ serviceSdk, signer } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + it('should fail if Safe address is empty', async () => { + const safeAddress = '' + const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' + const delegateConfig: SmartAccountDelegateDeleteConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer + } + await chai + .expect(serviceSdk.removeSafeDelegate(delegateConfig)) + .to.be.rejectedWith('Invalid Safe address') + }) + + it('should fail if Safe delegate address is empty', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const delegateAddress = '' + const delegateConfig: SmartAccountDelegateDeleteConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer + } + await chai + .expect(serviceSdk.removeSafeDelegate(delegateConfig)) + .to.be.rejectedWith('Invalid Safe delegate address') + }) + + it('should fail if Safe address is not checksummed', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() + const delegateConfig: SmartAccountDelegateDeleteConfig = { + safe: safeAddress, + delegate: '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0', + signer + } + await chai + .expect(serviceSdk.removeSafeDelegate(delegateConfig)) + .to.be.rejectedWith('Checksum address validation failed') + }) + + it('should fail if Safe delegate address is not checksummed', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0'.toLowerCase() + const delegateConfig: SmartAccountDelegateDeleteConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer + } + await chai + .expect(serviceSdk.removeSafeDelegate(delegateConfig)) + .to.be.rejectedWith('Checksum address validation failed') + }) + + it('should fail if Safe does not exist', async () => { + const safeAddress = '0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e' + const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' + const delegateConfig: SmartAccountDelegateDeleteConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer + } + await chai + .expect(serviceSdk.removeSafeDelegate(delegateConfig)) + .to.be.rejectedWith(`Safe=${safeAddress} does not exist or it's still not indexed`) + }) + + it('should fail if the signer is not an owner of the Safe', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' + const { serviceSdk, signer } = await getServiceClient( + '0xb0057716d5917badaf911b193b12b910811c1497b5bada8d7711f758981c3773' + ) + const delegateConfig: SmartAccountDelegateDeleteConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer + } + await chai + .expect(serviceSdk.removeSafeDelegate(delegateConfig)) + .to.be.rejectedWith('Signing owner is not an owner of the Safe') + }) + + it('should fail if the delegate to remove is not a delegate', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const delegateAddress = '0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e' + const delegateConfig: SmartAccountDelegateDeleteConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer + } + await chai.expect(serviceSdk.removeSafeDelegate(delegateConfig)).to.be.rejectedWith('Not found') + }) + + it('should remove a delegate', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' + const delegateConfig: SmartAccountDelegateDeleteConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer + } + await serviceSdk.addSafeDelegate({ ...delegateConfig, label: 'Label' }) + const { results: initialDelegates } = await serviceSdk.getSafeDelegates(safeAddress) + chai.expect(initialDelegates.length).to.be.eq(1) + await serviceSdk.removeSafeDelegate(delegateConfig) + const { results: finalDelegates } = await serviceSdk.getSafeDelegates(safeAddress) + chai.expect(finalDelegates.length).to.be.eq(0) + }) + + it('should remove a delegate EIP-3770', async () => { + const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' + const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` + const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' + const eip3770DelegateAddress = `${config.EIP_3770_PREFIX}:${delegateAddress}` + const delegateConfig: SmartAccountDelegateDeleteConfig = { + safe: eip3770SafeAddress, + delegate: eip3770DelegateAddress, + signer + } + await serviceSdk.addSafeDelegate({ ...delegateConfig, label: 'Label' }) + const { results: initialDelegates } = await serviceSdk.getSafeDelegates(eip3770SafeAddress) + chai.expect(initialDelegates.length).to.be.eq(1) + await serviceSdk.removeSafeDelegate(delegateConfig) + const { results: finalDelegates } = await serviceSdk.getSafeDelegates(eip3770SafeAddress) + chai.expect(finalDelegates.length).to.be.eq(0) + }) +}) diff --git a/packages/node-client/tests/endpoint/index.test.ts b/packages/node-client/tests/endpoint/index.test.ts new file mode 100644 index 000000000..664d1a48e --- /dev/null +++ b/packages/node-client/tests/endpoint/index.test.ts @@ -0,0 +1,692 @@ +import { getDefaultProvider } from '@ethersproject/providers' +import { Wallet } from '@ethersproject/wallet' +import Safe from '@gnosis.pm/safe-core-sdk' +import { EthAdapter, SmartAccountTrxDataPartial } from 'core-types' +import chai from 'chai' +import chaiAsPromised from 'chai-as-promised' +import sinon from 'sinon' +import sinonChai from 'sinon-chai' +import SafeServiceClient, { + SafeBalancesOptions, + SafeBalancesUsdOptions, + SafeCollectiblesOptions, + SmartAccountDelegateConfig, + SmartAccountDelegateDeleteConfig, + SafeMultisigTransactionEstimate +} from '../../src' +import { getTxServiceBaseUrl } from '../../src/utils' +import * as httpRequests from '../../src/utils/httpRequests' +import config from '../utils/config' +import { getServiceClient } from '../utils/setupServiceClient' +chai.use(chaiAsPromised) +chai.use(sinonChai) + +const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' +const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` +const randomAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' +const eip3770RandomAddress = `${config.EIP_3770_PREFIX}:${randomAddress}` +const delegateAddress = '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b' +const eip3770DelegateAddress = `${config.EIP_3770_PREFIX}:${delegateAddress}` +const tokenAddress = '0xcb0591ba2d74edd4211d5200d5d3b19cf598c548' +const eip3770TokenAddress = `${config.EIP_3770_PREFIX}:${tokenAddress}` +const safeTxHash = '0xede78ed72e9a8afd2b7a21f35c86f56cba5fffb2fff0838e253b7a41d19ceb48' +const txServiceBaseUrl = 'https://safe-transaction.rinkeby.gnosis.io' +const provider = getDefaultProvider(config.JSON_RPC) +const signer = new Wallet( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d', + provider +) +let ethAdapter: EthAdapter +let serviceSdk: SafeServiceClient + +describe('Endpoint tests', () => { + before(async () => { + ;({ serviceSdk, ethAdapter } = await getServiceClient( + '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' + )) + }) + + const fetchData = sinon + .stub(httpRequests, 'sendRequest') + .returns(Promise.resolve({ data: { success: true } })) + + describe('', () => { + it('getServiceInfo', async () => { + await chai + .expect(serviceSdk.getServiceInfo()) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/about`, + method: 'get' + }) + }) + + it('getServiceMasterCopiesInfo', async () => { + await chai + .expect(serviceSdk.getServiceMasterCopiesInfo()) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/about/master-copies`, + method: 'get' + }) + }) + + it('decodeData', async () => { + const data = '0x610b592500000000000000000000000090F8bf6A479f320ead074411a4B0e7944Ea8c9C1' + await chai + .expect(serviceSdk.decodeData(data)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/data-decoder/`, + method: 'post', + body: { data } + }) + }) + + it('getSafesByOwner', async () => { + await chai + .expect(serviceSdk.getSafesByOwner(randomAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/owners/${randomAddress}/safes/`, + method: 'get' + }) + }) + + it('getSafesByOwner EIP-3770', async () => { + await chai + .expect(serviceSdk.getSafesByOwner(eip3770RandomAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/owners/${randomAddress}/safes/`, + method: 'get' + }) + }) + + it('getTransaction', async () => { + await chai + .expect(serviceSdk.getTransaction(safeTxHash)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/multisig-transactions/${safeTxHash}/`, + method: 'get' + }) + }) + + it('getTransactionConfirmations', async () => { + await chai + .expect(serviceSdk.getTransactionConfirmations(safeTxHash)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/multisig-transactions/${safeTxHash}/confirmations/`, + method: 'get' + }) + }) + + it('confirmTransaction', async () => { + const signature = '0x' + await chai + .expect(serviceSdk.confirmTransaction(safeTxHash, signature)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/multisig-transactions/${safeTxHash}/confirmations/`, + method: 'get' + }) + }) + + it('getSafeInfo', async () => { + await chai + .expect(serviceSdk.getSafeInfo(safeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/`, + method: 'get' + }) + }) + + it('getSafeInfo EIP-3770', async () => { + await chai + .expect(serviceSdk.getSafeInfo(eip3770SafeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/`, + method: 'get' + }) + }) + + it('getSafeDelegates', async () => { + await chai + .expect(serviceSdk.getSafeDelegates(safeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/`, + method: 'get' + }) + }) + + it('getSafeDelegates EIP-3770', async () => { + await chai + .expect(serviceSdk.getSafeDelegates(eip3770SafeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/`, + method: 'get' + }) + }) + + it('addSafeDelegate', async () => { + const delegateConfig: SmartAccountDelegateConfig = { + safe: safeAddress, + delegate: delegateAddress, + signer, + label: '' + } + await chai + .expect(serviceSdk.addSafeDelegate(delegateConfig)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/`, + method: 'get' + }) + }) + + it('addSafeDelegate EIP-3770', async () => { + const delegateConfig: SmartAccountDelegateConfig = { + safe: eip3770SafeAddress, + delegate: eip3770DelegateAddress, + signer, + label: '' + } + await chai + .expect(serviceSdk.addSafeDelegate(delegateConfig)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/`, + method: 'get' + }) + }) + + it('removeAllSafeDelegates', async () => { + const totp = Math.floor(Date.now() / 1000 / 3600) + const data = safeAddress + totp + const signature = await signer.signMessage(data) + await chai + .expect(serviceSdk.removeAllSafeDelegates(safeAddress, signer)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/`, + method: 'delete', + body: { signature } + }) + }) + + it('removeAllSafeDelegates EIP-3770', async () => { + const totp = Math.floor(Date.now() / 1000 / 3600) + const data = safeAddress + totp + const signature = await signer.signMessage(data) + await chai + .expect(serviceSdk.removeAllSafeDelegates(eip3770SafeAddress, signer)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/`, + method: 'delete', + body: { signature } + }) + }) + + it('removeSafeDelegate', async () => { + const delegate = delegateAddress + const delegateConfig: SmartAccountDelegateDeleteConfig = { + safe: safeAddress, + delegate, + signer + } + const totp = Math.floor(Date.now() / 1000 / 3600) + const data = delegate + totp + const signature = await signer.signMessage(data) + await chai + .expect(serviceSdk.removeSafeDelegate(delegateConfig)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/${ + delegateConfig.delegate + }`, + method: 'delete', + body: { + safe: delegateConfig.safe, + delegate: delegateConfig.delegate, + signature + } + }) + }) + + it('removeSafeDelegate', async () => { + const delegate = delegateAddress + const delegateConfig: SmartAccountDelegateDeleteConfig = { + safe: eip3770SafeAddress, + delegate: eip3770DelegateAddress, + signer + } + const totp = Math.floor(Date.now() / 1000 / 3600) + const data = delegate + totp + const signature = await signer.signMessage(data) + await chai + .expect(serviceSdk.removeSafeDelegate(delegateConfig)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/delegates/${delegateAddress}`, + method: 'delete', + body: { + safe: safeAddress, + delegate: delegateAddress, + signature + } + }) + }) + + it('getSafeCreationInfo', async () => { + await chai + .expect(serviceSdk.getSafeCreationInfo(safeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/creation/`, + method: 'get' + }) + }) + + it('getSafeCreationInfo EIP-3770', async () => { + await chai + .expect(serviceSdk.getSafeCreationInfo(eip3770SafeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/creation/`, + method: 'get' + }) + }) + + it('estimateSafeTransaction', async () => { + const safeTransaction: SafeMultisigTransactionEstimate = { + to: randomAddress, + value: '0', + data: '0x', + operation: 0 + } + await chai + .expect(serviceSdk.estimateSafeTransaction(safeAddress, safeTransaction)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/multisig-transactions/estimations/`, + method: 'post', + body: safeTransaction + }) + }) + + it('estimateSafeTransaction EIP-3770', async () => { + const safeTransaction: SafeMultisigTransactionEstimate = { + to: randomAddress, + value: '0', + data: '0x', + operation: 0 + } + await chai + .expect(serviceSdk.estimateSafeTransaction(eip3770SafeAddress, safeTransaction)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/multisig-transactions/estimations/`, + method: 'post', + body: safeTransaction + }) + }) + + it('proposeTransaction', async () => { + const safeTxData: SmartAccountTrxDataPartial = { + to: safeAddress, + data: '0x', + value: '123456789', + operation: 1, + safeTxGas: 0, + baseGas: 0, + gasPrice: 0, + gasToken: '0x0000000000000000000000000000000000000000', + refundReceiver: '0x0000000000000000000000000000000000000000', + nonce: 1 + } + const origin = 'Safe Core SDK: Safe Service Client' + const signerAddress = await signer.getAddress() + const safeSdk = await Safe.create({ ethAdapter, safeAddress }) + const safeTransaction = await safeSdk.createTransaction(safeTxData) + await safeSdk.signTransaction(safeTransaction) + await chai + .expect( + serviceSdk.proposeTransaction({ + safeAddress, + senderAddress: signerAddress, + safeTransaction, + safeTxHash, + origin + }) + ) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/multisig-transactions/`, + method: 'post', + body: { + ...safeTxData, + contractTransactionHash: safeTxHash, + sender: safeTransaction.signatures.get(signerAddress.toLowerCase())?.signer, + signature: safeTransaction.signatures.get(signerAddress.toLowerCase())?.data, + origin + } + }) + }) + + it('proposeTransaction EIP-3770', async () => { + const safeTxData: SmartAccountTrxDataPartial = { + to: safeAddress, + data: '0x', + value: '123456789', + operation: 1, + safeTxGas: 0, + baseGas: 0, + gasPrice: 0, + gasToken: '0x0000000000000000000000000000000000000000', + refundReceiver: '0x0000000000000000000000000000000000000000', + nonce: 1 + } + const origin = 'Safe Core SDK: Safe Service Client' + const signerAddress = await signer.getAddress() + const safeSdk = await Safe.create({ ethAdapter, safeAddress }) + const safeTransaction = await safeSdk.createTransaction(safeTxData) + await safeSdk.signTransaction(safeTransaction) + await chai + .expect( + serviceSdk.proposeTransaction({ + safeAddress: eip3770SafeAddress, + senderAddress: `${config.EIP_3770_PREFIX}:${signerAddress}`, + safeTransaction, + safeTxHash, + origin + }) + ) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/multisig-transactions/`, + method: 'post', + body: { + ...safeTxData, + contractTransactionHash: safeTxHash, + sender: safeTransaction.signatures.get(signerAddress.toLowerCase())?.signer, + signature: safeTransaction.signatures.get(signerAddress.toLowerCase())?.data, + origin + } + }) + }) + + it('getIncomingTransactions', async () => { + await chai + .expect(serviceSdk.getIncomingTransactions(safeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/incoming-transfers/`, + method: 'get' + }) + }) + + it('getIncomingTransactions EIP-3770', async () => { + await chai + .expect(serviceSdk.getIncomingTransactions(eip3770SafeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/incoming-transfers/`, + method: 'get' + }) + }) + + it('getModuleTransactions', async () => { + await chai + .expect(serviceSdk.getModuleTransactions(safeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/module-transactions/`, + method: 'get' + }) + }) + + it('getModuleTransactions EIP-3770', async () => { + await chai + .expect(serviceSdk.getModuleTransactions(eip3770SafeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/module-transactions/`, + method: 'get' + }) + }) + + it('getMultisigTransactions', async () => { + await chai + .expect(serviceSdk.getMultisigTransactions(safeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/multisig-transactions/`, + method: 'get' + }) + }) + + it('getMultisigTransactions EIP-3770', async () => { + await chai + .expect(serviceSdk.getMultisigTransactions(eip3770SafeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/multisig-transactions/`, + method: 'get' + }) + }) + + it('getPendingTransactions', async () => { + const currentNonce = 1 + await chai + .expect(serviceSdk.getPendingTransactions(safeAddress, currentNonce)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/multisig-transactions/?executed=false&nonce__gte=${currentNonce}`, + method: 'get' + }) + }) + + it('getPendingTransactions EIP-3770', async () => { + const currentNonce = 1 + await chai + .expect(serviceSdk.getPendingTransactions(eip3770SafeAddress, currentNonce)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/multisig-transactions/?executed=false&nonce__gte=${currentNonce}`, + method: 'get' + }) + }) + + it('getAllTransactions', async () => { + await chai + .expect(serviceSdk.getAllTransactions(safeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/all-transactions/?trusted=true&queued=true&executed=false`, + method: 'get' + }) + }) + + it('getAllTransactions EIP-3770', async () => { + await chai + .expect(serviceSdk.getAllTransactions(eip3770SafeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/all-transactions/?trusted=true&queued=true&executed=false`, + method: 'get' + }) + }) + + it('getBalances', async () => { + await chai + .expect(serviceSdk.getBalances(safeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/balances/?exclude_spam=true`, + method: 'get' + }) + }) + + it('getBalances EIP-3770', async () => { + await chai + .expect(serviceSdk.getBalances(eip3770SafeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/balances/?exclude_spam=true`, + method: 'get' + }) + }) + + it('getBalances (with options)', async () => { + const options: SafeBalancesOptions = { + excludeSpamTokens: false + } + await chai + .expect(serviceSdk.getBalances(safeAddress, options)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/balances/?exclude_spam=false`, + method: 'get' + }) + }) + + it('getUsdBalances', async () => { + await chai + .expect(serviceSdk.getUsdBalances(safeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/balances/usd/?exclude_spam=true`, + method: 'get' + }) + }) + + it('getUsdBalances EIP-3770', async () => { + await chai + .expect(serviceSdk.getUsdBalances(eip3770SafeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/balances/usd/?exclude_spam=true`, + method: 'get' + }) + }) + + it('getUsdBalances (with options)', async () => { + const options: SafeBalancesUsdOptions = { + excludeSpamTokens: false + } + await chai + .expect(serviceSdk.getUsdBalances(safeAddress, options)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/balances/usd/?exclude_spam=false`, + method: 'get' + }) + }) + + it('getCollectibles', async () => { + await chai + .expect(serviceSdk.getCollectibles(safeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/collectibles/?exclude_spam=true`, + method: 'get' + }) + }) + + it('getCollectibles EIP-3770', async () => { + await chai + .expect(serviceSdk.getCollectibles(eip3770SafeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/collectibles/?exclude_spam=true`, + method: 'get' + }) + }) + + it('getCollectibles (with options)', async () => { + const options: SafeCollectiblesOptions = { + excludeSpamTokens: false + } + await chai + .expect(serviceSdk.getCollectibles(safeAddress, options)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/collectibles/?exclude_spam=false`, + method: 'get' + }) + }) + + it('getTokens', async () => { + await chai + .expect(serviceSdk.getTokenList()) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/tokens/`, + method: 'get' + }) + }) + + it('getToken', async () => { + await chai + .expect(serviceSdk.getToken(tokenAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/tokens/${tokenAddress}/`, + method: 'get' + }) + }) + + it('getToken EIP-3770', async () => { + await chai + .expect(serviceSdk.getToken(eip3770TokenAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/tokens/${tokenAddress}/`, + method: 'get' + }) + }) + }) +}) diff --git a/packages/node-client/tests/utils/config.ts b/packages/node-client/tests/utils/config.ts new file mode 100644 index 000000000..4e6919114 --- /dev/null +++ b/packages/node-client/tests/utils/config.ts @@ -0,0 +1,7 @@ +const config = { + BASE_URL: 'https://safe-transaction.rinkeby.gnosis.io', + JSON_RPC: `https://rinkeby.infura.io/v3/${process.env.INFURA_KEY}`, + EIP_3770_PREFIX: 'rin' +} + +export default config diff --git a/packages/node-client/tests/utils/setupEthAdapter.ts b/packages/node-client/tests/utils/setupEthAdapter.ts new file mode 100644 index 000000000..78d82ce2e --- /dev/null +++ b/packages/node-client/tests/utils/setupEthAdapter.ts @@ -0,0 +1,23 @@ +import { Signer } from '@ethersproject/abstract-signer' +import { EthAdapter } from '@gnosis.pm/safe-core-sdk-types' +import EthersAdapter, { EthersAdapterConfig } from '@gnosis.pm/safe-ethers-lib' +import Web3Adapter, { Web3AdapterConfig } from '@gnosis.pm/safe-web3-lib' +import { ethers, web3 } from 'hardhat' + +export async function getEthAdapter(signer: Signer): Promise { + let ethAdapter: EthAdapter + switch (process.env.ETH_LIB) { + case 'web3': + const signerAddress = await signer.getAddress() + const web3AdapterConfig: Web3AdapterConfig = { web3: web3 as any, signerAddress } + ethAdapter = new Web3Adapter(web3AdapterConfig) + break + case 'ethers': + const ethersAdapterConfig: EthersAdapterConfig = { ethers, signer } + ethAdapter = new EthersAdapter(ethersAdapterConfig) + break + default: + throw new Error('Ethereum library not supported') + } + return ethAdapter +} diff --git a/packages/node-client/tests/utils/setupServiceClient.ts b/packages/node-client/tests/utils/setupServiceClient.ts new file mode 100644 index 000000000..1089b367d --- /dev/null +++ b/packages/node-client/tests/utils/setupServiceClient.ts @@ -0,0 +1,20 @@ +import { getDefaultProvider } from '@ethersproject/providers' +import { Wallet } from '@ethersproject/wallet' +import { EthAdapter } from '@gnosis.pm/safe-core-sdk-types' +import SafeServiceClient from '../../src' +import config from './config' +import { getEthAdapter } from './setupEthAdapter' + +interface ServiceClientConfig { + serviceSdk: SafeServiceClient + ethAdapter: EthAdapter + signer: Wallet +} + +export async function getServiceClient(signerPk: string): Promise { + const provider = getDefaultProvider(config.JSON_RPC) + const signer = new Wallet(signerPk, provider) + const ethAdapter = await getEthAdapter(signer) + const serviceSdk = new SafeServiceClient({ txServiceUrl: config.BASE_URL, ethAdapter }) + return { serviceSdk, ethAdapter, signer } +} diff --git a/packages/node-client/tsconfig.json b/packages/node-client/tsconfig.json new file mode 100644 index 000000000..c7ff8535e --- /dev/null +++ b/packages/node-client/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src" + }, + "include": ["src"] +} diff --git a/tsconfig.settings.json b/tsconfig.settings.json new file mode 100644 index 000000000..44f79d8dd --- /dev/null +++ b/tsconfig.settings.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "ES2019", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ + "module": "CommonJS", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + "allowJs": false, /* Allow javascript files to be compiled. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ + "sourceMap": true, /* Generates corresponding '.map' file. */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, /* Enable strict null checks. */ + "strictFunctionTypes": true, /* Enable strict checking of function types. */ + "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + "noUnusedParameters": true, /* Report errors on unused parameters. */ + "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + "skipLibCheck": true, /* Skip type checking of declaration files. */ + "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ + "resolveJsonModule": true + } + } + \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..e2d423c38 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,7488 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@eslint/eslintrc@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.3.2" + globals "^13.15.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" + +"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.2", "@ethereumjs/block@^3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.3.tgz#d96cbd7af38b92ebb3424223dbf773f5ccd27f84" + integrity sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg== + dependencies: + "@ethereumjs/common" "^2.6.5" + "@ethereumjs/tx" "^3.5.2" + ethereumjs-util "^7.1.5" + merkle-patricia-tree "^4.2.4" + +"@ethereumjs/blockchain@^5.5.2", "@ethereumjs/blockchain@^5.5.3": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz#aa49a6a04789da6b66b5bcbb0d0b98efc369f640" + integrity sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw== + dependencies: + "@ethereumjs/block" "^3.6.2" + "@ethereumjs/common" "^2.6.4" + "@ethereumjs/ethash" "^1.1.0" + debug "^4.3.3" + ethereumjs-util "^7.1.5" + level-mem "^5.0.1" + lru-cache "^5.1.1" + semaphore-async-await "^1.5.1" + +"@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + +"@ethereumjs/ethash@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" + integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== + dependencies: + "@ethereumjs/block" "^3.5.0" + "@types/levelup" "^4.3.0" + buffer-xor "^2.0.1" + ethereumjs-util "^7.1.1" + miller-rabin "^4.0.0" + +"@ethereumjs/tx@^3.5.1", "@ethereumjs/tx@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== + dependencies: + "@ethereumjs/common" "^2.6.4" + ethereumjs-util "^7.1.5" + +"@ethereumjs/vm@^5.9.0": + version "5.9.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.9.3.tgz#6d69202e4c132a4a1e1628ac246e92062e230823" + integrity sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg== + dependencies: + "@ethereumjs/block" "^3.6.3" + "@ethereumjs/blockchain" "^5.5.3" + "@ethereumjs/common" "^2.6.5" + "@ethereumjs/tx" "^3.5.2" + async-eventemitter "^0.2.4" + core-js-pure "^3.0.1" + debug "^4.3.3" + ethereumjs-util "^7.1.5" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + merkle-patricia-tree "^4.2.4" + rustbn.js "~0.2.0" + +"@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.6.3": + version "5.6.4" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.4.tgz#f6e01b6ed391a505932698ecc0d9e7a99ee60362" + integrity sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg== + dependencies: + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + +"@ethersproject/abstract-provider@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz#02ddce150785caf0c77fe036a0ebfcee61878c59" + integrity sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.3" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/web" "^5.6.1" + +"@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz#491f07fc2cbd5da258f46ec539664713950b0b33" + integrity sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ== + dependencies: + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + +"@ethersproject/address@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" + integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp" "^5.6.1" + +"@ethersproject/base64@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.1.tgz#2c40d8a0310c9d1606c2c37ae3092634b41d87cb" + integrity sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + +"@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.2.tgz#72a0717d6163fab44c47bcc82e0c550ac0315d66" + integrity sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" + integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/constants@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.1.tgz#e2e974cac160dd101cf79fdf879d7d18e8cb1370" + integrity sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + +"@ethersproject/contracts@^5.6.0": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.2.tgz#20b52e69ebc1b74274ff8e3d4e508de971c287bc" + integrity sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g== + dependencies: + "@ethersproject/abi" "^5.6.3" + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/transactions" "^5.6.2" + +"@ethersproject/hash@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.1.tgz#224572ea4de257f05b4abf8ae58b03a67e99b0f4" + integrity sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA== + dependencies: + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + +"@ethersproject/keccak256@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.1.tgz#b867167c9b50ba1b1a92bccdd4f2d6bd168a91cc" + integrity sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA== + dependencies: + "@ethersproject/bytes" "^5.6.1" + js-sha3 "0.8.0" + +"@ethersproject/logger@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" + integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== + +"@ethersproject/networks@^5.6.3": + version "5.6.4" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.4.tgz#51296d8fec59e9627554f5a8a9c7791248c8dc07" + integrity sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/properties@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" + integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/rlp@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.1.tgz#df8311e6f9f24dcb03d59a2bac457a28a4fe2bd8" + integrity sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/signing-key@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.2.tgz#8a51b111e4d62e5a62aee1da1e088d12de0614a3" + integrity sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/strings@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.1.tgz#dbc1b7f901db822b5cafd4ebf01ca93c373f8952" + integrity sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/transactions@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.2.tgz#793a774c01ced9fe7073985bb95a4b4e57a6370b" + integrity sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q== + dependencies: + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/rlp" "^5.6.1" + "@ethersproject/signing-key" "^5.6.2" + +"@ethersproject/web@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.1.tgz#6e2bd3ebadd033e6fe57d072db2b69ad2c9bdf5d" + integrity sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA== + dependencies: + "@ethersproject/base64" "^5.6.1" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + +"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@gnosis.pm/safe-core-sdk-types@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.1.0.tgz#dce372445ddbaf7eb960cfe98f5d4b2557004040" + integrity sha512-VvEqWCliA6KXwt9N4YTzN5JcqnhLxLjUTU7trpQqQ7wU9OQcF+Kdrer86wDOF5lYZVE24zudw1s4gW3dxUkm6A== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/contracts" "^5.6.0" + "@gnosis.pm/safe-deployments" "^1.12.0" + web3-core "^1.7.1" + +"@gnosis.pm/safe-core-sdk-utils@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.1.0.tgz#3fb93038cac143523fcfa8200010034cc42166a6" + integrity sha512-ZH1Ps3qsreczKHHfBb34dj55LDTiU7WAeKD7jgKnhiloGWRniLv+cbBfwFQNAezoyANvgyI5ky64wgwm1bm1YA== + dependencies: + "@gnosis.pm/safe-core-sdk-types" "^1.1.0" + web3-utils "^1.7.1" + +"@gnosis.pm/safe-deployments@^1.12.0": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz#71ed9a37437a3080443c49aa65308f2d8839d751" + integrity sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew== + dependencies: + semver "^7.3.7" + +"@gnosis.pm/safe-ethers-lib@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.1.0.tgz#06dfe132f3590fbc5406918a193812cd922c641e" + integrity sha512-MG01hGu/3q/sl9fXE3sU7CMVpVMJ4k9/ro1JVZaE29jmsar1cHFUOJNws7Do3orxTLQZ2egkARcmyv+l673FoA== + dependencies: + "@gnosis.pm/safe-core-sdk-types" "^1.1.0" + "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" + +"@gnosis.pm/safe-web3-lib@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.1.0.tgz#1d1bd986fe77a1af04afcf8443a6119e0617a89a" + integrity sha512-B4wnVDtiK2EBuXwsI0hTYlACLVr8F9qvpFC16/Smdg8fWv/r6WpK7yB86DRyW9R1BEwkjmPvpvx9rqIKW5xRkA== + dependencies: + "@gnosis.pm/safe-core-sdk-types" "^1.1.0" + "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" + +"@humanwhocodes/config-array@^0.9.2": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" + integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + +"@isaacs/string-locale-compare@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz#687cc2bbf243f4e9a868ecf2262318e2658873a1" + integrity sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@lerna/add@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.1.6.tgz#f839096084a5d34da9e4813ea230da16c99b54c2" + integrity sha512-+dc5LUxFSxlTgDcC+nTdbFnUphmcGsypPF0eeYPc6tqUrpOpp3Ubn07dRGG0DbpZjk/roZj38DAvx7LYFalZAQ== + dependencies: + "@lerna/bootstrap" "5.1.6" + "@lerna/command" "5.1.6" + "@lerna/filter-options" "5.1.6" + "@lerna/npm-conf" "5.1.6" + "@lerna/validation-error" "5.1.6" + dedent "^0.7.0" + npm-package-arg "^8.1.0" + p-map "^4.0.0" + pacote "^13.4.1" + semver "^7.3.4" + +"@lerna/bootstrap@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-5.1.6.tgz#70c643071cade4568fc9b22798a183afd787fb66" + integrity sha512-mCPYySlkreBmhK+uKhnwmBynVN0v7a6DCy4n3WiZ6oJ2puM/F1+8vjCBsWKmnR8YiLtUQt0dwL1fm/dCZgZy8g== + dependencies: + "@lerna/command" "5.1.6" + "@lerna/filter-options" "5.1.6" + "@lerna/has-npm-version" "5.1.6" + "@lerna/npm-install" "5.1.6" + "@lerna/package-graph" "5.1.6" + "@lerna/pulse-till-done" "5.1.6" + "@lerna/rimraf-dir" "5.1.6" + "@lerna/run-lifecycle" "5.1.6" + "@lerna/run-topologically" "5.1.6" + "@lerna/symlink-binary" "5.1.6" + "@lerna/symlink-dependencies" "5.1.6" + "@lerna/validation-error" "5.1.6" + "@npmcli/arborist" "5.2.0" + dedent "^0.7.0" + get-port "^5.1.1" + multimatch "^5.0.0" + npm-package-arg "^8.1.0" + npmlog "^6.0.2" + p-map "^4.0.0" + p-map-series "^2.1.0" + p-waterfall "^2.1.1" + semver "^7.3.4" + +"@lerna/changed@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-5.1.6.tgz#bf1c60cb90ac451191eb8cfd3fc807ee7a05ad19" + integrity sha512-+dy+qcKZTXmETJm9VVQHuVXfk9OeqPNcJ3qeMvvYBRuMYttEbGZDOrcCjE2vomLGhLpXElHKXnCaJEDAwEla8Q== + dependencies: + "@lerna/collect-updates" "5.1.6" + "@lerna/command" "5.1.6" + "@lerna/listable" "5.1.6" + "@lerna/output" "5.1.6" + +"@lerna/check-working-tree@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-5.1.6.tgz#c9913325ef8467990217823cfe652e40e1acf964" + integrity sha512-WeTO1Vjyw7ZZzM/o1Q+UWFYvvbludM++MaDhEodpNZxL1bDMR3/bvtKa/SNq52aBr4nSKOLVz1BO0Lg+yNaZXQ== + dependencies: + "@lerna/collect-uncommitted" "5.1.6" + "@lerna/describe-ref" "5.1.6" + "@lerna/validation-error" "5.1.6" + +"@lerna/child-process@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-5.1.6.tgz#d9e88c4fb8287d568938db395937b11c94627d7d" + integrity sha512-f0SPxNqXaurSoUMHDVCDjU1uA7/Qa9HnGdxiE9OoDaXaErlVloUT7Wpjbp5khryaJZC4PQ9HnnI3FSA/S/SHaA== + dependencies: + chalk "^4.1.0" + execa "^5.0.0" + strong-log-transformer "^2.1.0" + +"@lerna/clean@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-5.1.6.tgz#5507910ebde670bf4cb843ddb86844f441038f39" + integrity sha512-SHRXg6R38NfAtwS8R3hYAacmdDds2Z/51G7YE8bMvmoE4c60eFsBwsCXwwdpPBXL/SdfEGSzoxwEvWHi+f6r7g== + dependencies: + "@lerna/command" "5.1.6" + "@lerna/filter-options" "5.1.6" + "@lerna/prompt" "5.1.6" + "@lerna/pulse-till-done" "5.1.6" + "@lerna/rimraf-dir" "5.1.6" + p-map "^4.0.0" + p-map-series "^2.1.0" + p-waterfall "^2.1.1" + +"@lerna/cli@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-5.1.6.tgz#94a95cfdc0dd1e482f7b609a8771005e29cb3330" + integrity sha512-+cQoaOBK2ISw0z5uuHoP2QlV3EZZMdTPuPCVsLDuUwiJCDI3hF3Ps2qQauAZTKO8Ull7z3qid8Yv8sLNEMNrCA== + dependencies: + "@lerna/global-options" "5.1.6" + dedent "^0.7.0" + npmlog "^6.0.2" + yargs "^16.2.0" + +"@lerna/collect-uncommitted@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-5.1.6.tgz#56d0994e4039ec340c0c7d0e6ce5a2cd78df6079" + integrity sha512-IvAmcaENJZKXjTsxsalM8+GuApooqcsKJ74q/9yUGwO3FIMevQyz/VDOFDq7e0WCQoq6ttrdNihEjU/QTjNsMw== + dependencies: + "@lerna/child-process" "5.1.6" + chalk "^4.1.0" + npmlog "^6.0.2" + +"@lerna/collect-updates@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-5.1.6.tgz#1ff373f01e5cd8b849f5918f2ab8585da3612433" + integrity sha512-CjKK3bteJpDzqrNOZMGYSwqF5CQsjiPv6soRdayBlJGXB3YW32M2UFcPD77Fvef/Q0xM7FEch3R3ZnBxgzGprg== + dependencies: + "@lerna/child-process" "5.1.6" + "@lerna/describe-ref" "5.1.6" + minimatch "^3.0.4" + npmlog "^6.0.2" + slash "^3.0.0" + +"@lerna/command@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-5.1.6.tgz#22b4218d2ae5fc6f41ef7024d2b55995f8b4d986" + integrity sha512-zRiQels/N8LrR3ntkOn9dRE/0kzRKYTvJTdWcjfF7BC7Lz9VsNhPVy7tdv+Un5GZjVKhDQa/Tpn1h2t6/SLaSQ== + dependencies: + "@lerna/child-process" "5.1.6" + "@lerna/package-graph" "5.1.6" + "@lerna/project" "5.1.6" + "@lerna/validation-error" "5.1.6" + "@lerna/write-log-file" "5.1.6" + clone-deep "^4.0.1" + dedent "^0.7.0" + execa "^5.0.0" + is-ci "^2.0.0" + npmlog "^6.0.2" + +"@lerna/conventional-commits@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-5.1.6.tgz#a37f671a46974ed7221e2fab801d5d41de9eb069" + integrity sha512-kgdQNglEtsIL6wWAhJieghcvvgpZxG2t2HPy+G/wx1qUbeUqTVkw0z88BDDZ7xOfQh6ffJ5GvLZhAj+LjijYxQ== + dependencies: + "@lerna/validation-error" "5.1.6" + conventional-changelog-angular "^5.0.12" + conventional-changelog-core "^4.2.2" + conventional-recommended-bump "^6.1.0" + fs-extra "^9.1.0" + get-stream "^6.0.0" + npm-package-arg "^8.1.0" + npmlog "^6.0.2" + pify "^5.0.0" + semver "^7.3.4" + +"@lerna/create-symlink@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-5.1.6.tgz#1a8e003a194da246e3ba0a22d7b4e4c847c15809" + integrity sha512-qkooK66GY2veqHEarbMraCzdgFpg8hwt3vjuBp9sMddYccXb7HHIsTXIOJPn4H5xFizblcRzf8fUJ73XkQZpUw== + dependencies: + cmd-shim "^4.1.0" + fs-extra "^9.1.0" + npmlog "^6.0.2" + +"@lerna/create@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-5.1.6.tgz#0e84aabcb4777c17b080f732b9e53d69aa8ae9cb" + integrity sha512-KVwxoYQsojgoUl3AxYSOM40Pa0Coo0SLKV57abVKfHmxfIEyvcGgtxNn6eA3M1lDVntqdlaBmNatkZRt3N1EHg== + dependencies: + "@lerna/child-process" "5.1.6" + "@lerna/command" "5.1.6" + "@lerna/npm-conf" "5.1.6" + "@lerna/validation-error" "5.1.6" + dedent "^0.7.0" + fs-extra "^9.1.0" + globby "^11.0.2" + init-package-json "^2.0.2" + npm-package-arg "^8.1.0" + p-reduce "^2.1.0" + pacote "^13.4.1" + pify "^5.0.0" + semver "^7.3.4" + slash "^3.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^3.0.0" + whatwg-url "^8.4.0" + yargs-parser "20.2.4" + +"@lerna/describe-ref@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-5.1.6.tgz#417c4f55b9b3a7d76131fe2da5dd1fa891c7f769" + integrity sha512-1VIy0hTkTnlcPqy5Q1hBMJALZbVhjMvRhCnzSgkP0dEuYjaRTyxr0DbhZ4CThREQuqfE3PB2f3DaHVRO8pSSeA== + dependencies: + "@lerna/child-process" "5.1.6" + npmlog "^6.0.2" + +"@lerna/diff@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-5.1.6.tgz#07b1cc1cc6a1b38d05a4779d5915468f938d7dfc" + integrity sha512-UdZ2yHkeTczfwevY8zTIz3kX9gl57e7fkVfNM5zEXifvhbmIozjreurgD2LWf6k/fkEORaFeQ+4dcWGerE70rQ== + dependencies: + "@lerna/child-process" "5.1.6" + "@lerna/command" "5.1.6" + "@lerna/validation-error" "5.1.6" + npmlog "^6.0.2" + +"@lerna/exec@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-5.1.6.tgz#de3fb272a14f6c66d4f6bd798ccd458bd4475ef7" + integrity sha512-1OGca09bVdMD5a2jr7kBQMyWMger6rzwgBWOdHxPaIajPJVUTqhcLBrtJA9qVZol7jztWgDLR3mFxrvmqGijaQ== + dependencies: + "@lerna/child-process" "5.1.6" + "@lerna/command" "5.1.6" + "@lerna/filter-options" "5.1.6" + "@lerna/profiler" "5.1.6" + "@lerna/run-topologically" "5.1.6" + "@lerna/validation-error" "5.1.6" + p-map "^4.0.0" + +"@lerna/filter-options@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-5.1.6.tgz#cd9a9bba7ec040f5165d46cef5f0496bef140881" + integrity sha512-lssUzYGXEJONS14NHCMp5ddL2aNLamDQufYJh9ziNswcG2lxnis+aeboPxCAQooLptGqcIs6QXkcLo27GXsmbg== + dependencies: + "@lerna/collect-updates" "5.1.6" + "@lerna/filter-packages" "5.1.6" + dedent "^0.7.0" + npmlog "^6.0.2" + +"@lerna/filter-packages@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-5.1.6.tgz#438477438fec319d237d35833cd147323f3c800e" + integrity sha512-5cpAdwQoaGsutsY0xmd0x59IixFVZdpovxXiuhIGAakBdrwbNxNpstqJjnOEakOZ/arVQ0ozTUtZK7Vk0GjR9A== + dependencies: + "@lerna/validation-error" "5.1.6" + multimatch "^5.0.0" + npmlog "^6.0.2" + +"@lerna/get-npm-exec-opts@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.1.6.tgz#83f81184ac295c3423752b50382b8e0665c987f4" + integrity sha512-YQDHGrN/Ti56sAwBkV5y/Bn2H/aJ8fQzKG+blWdkcJgoBV04I5po0IbgKiGKl57+pd2bPpDEtcA6WYPyI1Spfw== + dependencies: + npmlog "^6.0.2" + +"@lerna/get-packed@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-5.1.6.tgz#af3a2992849573b5dece17322c5d9ce80fd9f832" + integrity sha512-m2LojNTkwSiC5dqvLP2gCj5ljPE1e8I2G/U8hIqdVttMwz5JAGbIx3MfACUBG83d5FzSqnCIA1xNkrEZFB4cQg== + dependencies: + fs-extra "^9.1.0" + ssri "^8.0.1" + tar "^6.1.0" + +"@lerna/github-client@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-5.1.6.tgz#6c20168ee8dc8ac55f2296ffb9ff204f3bc12664" + integrity sha512-ZydjvlhjUKT9HrB1xdcfBB7u/9Vlod1U2V91qj2CqCaWfwG5ob9jXK4v6tLEzZMGxUKKE2OQCyF7o20tHfkcJQ== + dependencies: + "@lerna/child-process" "5.1.6" + "@octokit/plugin-enterprise-rest" "^6.0.1" + "@octokit/rest" "^18.1.0" + git-url-parse "^11.4.4" + npmlog "^6.0.2" + +"@lerna/gitlab-client@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-5.1.6.tgz#1d600363ccfb798a93ce41a2a62084a148d57125" + integrity sha512-ck5XsIz7mQdBNtfKhH4dPrD6t1UZxWBrQeIUsCLO+NorXqYcG8Oqvmzrfm0iByCvaC1QCf+zImJYvMOzjozIpg== + dependencies: + node-fetch "^2.6.1" + npmlog "^6.0.2" + whatwg-url "^8.4.0" + +"@lerna/global-options@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-5.1.6.tgz#f6f6f4988c1dcb39d3877c0ef629e0256ed81b44" + integrity sha512-NHMVGs5zhxbtqnBuwujzanYhf7q/HsXBtPn0M/eJpEvcAXaMZgttUMyS2/1JnAUelrAbSMbT+0iOUzSlyD1gtw== + +"@lerna/has-npm-version@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-5.1.6.tgz#5e6f7a0b2f24382a56e654be187d0002950cf109" + integrity sha512-hDY5/qxp98oacg9fhBfbDmjuRCVHm1brdKsY76FJ4vN+m89sVhXLqqsSHNKCTiQ8OgSzokO2iQeysvgM7ZlqAg== + dependencies: + "@lerna/child-process" "5.1.6" + semver "^7.3.4" + +"@lerna/import@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-5.1.6.tgz#2cd7a8c3a5ef8df1992d0e8f8a31110a3380fb66" + integrity sha512-RhWC/3heIevWseY+jzOfGiqPmTofaYyOOqd7+SVaVdSy79TGU0crxWpUECo7COc/FMflFVa+jlk1/JSXWpqG8g== + dependencies: + "@lerna/child-process" "5.1.6" + "@lerna/command" "5.1.6" + "@lerna/prompt" "5.1.6" + "@lerna/pulse-till-done" "5.1.6" + "@lerna/validation-error" "5.1.6" + dedent "^0.7.0" + fs-extra "^9.1.0" + p-map-series "^2.1.0" + +"@lerna/info@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/info/-/info-5.1.6.tgz#d6f2b79a2c18eba14f8655b14601f1f84c60e61e" + integrity sha512-iB4rNweghxng4U7VUsN03M2mDRgjDr8Bv+llXGhtJoSrZ9XzJYyCvGaExG30sBr5VHaArIzJ11nnF0kSDg3bXg== + dependencies: + "@lerna/command" "5.1.6" + "@lerna/output" "5.1.6" + envinfo "^7.7.4" + +"@lerna/init@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-5.1.6.tgz#2a00a242f69a30f710fa55f39501c2aeb4cd9618" + integrity sha512-S8N2vjWcHrqaowYLrX2KEbhXrs31q5wU5sfsjaJ4UxQd/cBUXvp4OWI98lRTQmXOOcw9XwJNDHhZXIR30Pn0aA== + dependencies: + "@lerna/child-process" "5.1.6" + "@lerna/command" "5.1.6" + fs-extra "^9.1.0" + p-map "^4.0.0" + write-json-file "^4.3.0" + +"@lerna/link@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-5.1.6.tgz#93123d2b03307444440698c96ff889e56044623f" + integrity sha512-H94MHjhltS8lMA3J38fzcbtQvNe1OoaMO/ZgacC9HvrntIoepqG/2boOKprW6cnTBSwmIFVCn2+LQloBJ2Nwbw== + dependencies: + "@lerna/command" "5.1.6" + "@lerna/package-graph" "5.1.6" + "@lerna/symlink-dependencies" "5.1.6" + p-map "^4.0.0" + slash "^3.0.0" + +"@lerna/list@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-5.1.6.tgz#61e25437a3a642866cabd1a162d53e95b45c2066" + integrity sha512-GofR6H1YKoVMj0Rczk9Y+Z/y7ymOKkklRLsUJQE0nWmlKkH8/tdxGHIgfR4sX2oiwtQGfFDc8ddtLX7DHAhMiA== + dependencies: + "@lerna/command" "5.1.6" + "@lerna/filter-options" "5.1.6" + "@lerna/listable" "5.1.6" + "@lerna/output" "5.1.6" + +"@lerna/listable@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-5.1.6.tgz#4b77de64f699f96bae8ccfe07d917f68bd10ffae" + integrity sha512-Aslj1Lo/t1jnyX+uKvBY4vyAsYKqW9A6nJ8+o1egkQ/bha8Ic4dr5z7HCBKhJl73iAHRMVNn8KlxM+E7pjwsoQ== + dependencies: + "@lerna/query-graph" "5.1.6" + chalk "^4.1.0" + columnify "^1.6.0" + +"@lerna/log-packed@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-5.1.6.tgz#90b95915610b52b67ded3a62d5de20d73024eafd" + integrity sha512-yCtgNgEmicqCVb39RO9pRQQGJaugGcsKtvaS1cDLR+M7vlF8gaSvo9t4bZExFzEF5oWcPf4T1FMuhNV12h/uJg== + dependencies: + byte-size "^7.0.0" + columnify "^1.6.0" + has-unicode "^2.0.1" + npmlog "^6.0.2" + +"@lerna/npm-conf@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-5.1.6.tgz#534707babd7ad83d14c70ecb3f36b3c2c3dfa880" + integrity sha512-7x8334t9SO2bih7qJa2s8LFuSOZk5QzZ9q1xG9xNSF8BjrhjsGOVghQ1R97l/1zTkBwhqmb1sxLcvH1e21h+MQ== + dependencies: + config-chain "^1.1.12" + pify "^5.0.0" + +"@lerna/npm-dist-tag@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-5.1.6.tgz#5231193e2512669a1244c910489c26463e6bdc35" + integrity sha512-mwjnjqN+Z8z2lAAnOE/2L8OiLChCL374ltaxNOGnhLyWKdCFoit7qhiIIV05CgoE2/iJQoOZP7ioP3H7JtJbsw== + dependencies: + "@lerna/otplease" "5.1.6" + npm-package-arg "^8.1.0" + npm-registry-fetch "^9.0.0" + npmlog "^6.0.2" + +"@lerna/npm-install@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-5.1.6.tgz#424c6a18042329c1057d55d9a1c7fe52df58239f" + integrity sha512-SKqXATVPVEGS2xtNNjxGhY1/C9huxYnETelpwAB/eSLcMT4FFBVxeQ83NF9log4w+iCUaS+veElfuF2uvPxaPg== + dependencies: + "@lerna/child-process" "5.1.6" + "@lerna/get-npm-exec-opts" "5.1.6" + fs-extra "^9.1.0" + npm-package-arg "^8.1.0" + npmlog "^6.0.2" + signal-exit "^3.0.3" + write-pkg "^4.0.0" + +"@lerna/npm-publish@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-5.1.6.tgz#74b41aa670e6a043ed7841679e27424542ab8447" + integrity sha512-ce5UMVZZwjpwkKdekXc1xCtwb4ZKwRVsxHCQFoCisE1/3Pw6+5DBptBOgjmJGa1VA7glxGgp5a6aSERA5grA/g== + dependencies: + "@lerna/otplease" "5.1.6" + "@lerna/run-lifecycle" "5.1.6" + fs-extra "^9.1.0" + libnpmpublish "^4.0.0" + npm-package-arg "^8.1.0" + npmlog "^6.0.2" + pify "^5.0.0" + read-package-json "^3.0.0" + +"@lerna/npm-run-script@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-5.1.6.tgz#9d1c4b5fa615fb10a1cf55c09a1428e6c3a0b158" + integrity sha512-9M7XGnrBoitRnzAT6UGzHtBdQB+HmpsMd+ks7laK7VeqP1rR3t7XXZOm0avMBx2lSBBFSpDIkD4HV0/MeDtcZQ== + dependencies: + "@lerna/child-process" "5.1.6" + "@lerna/get-npm-exec-opts" "5.1.6" + npmlog "^6.0.2" + +"@lerna/otplease@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-5.1.6.tgz#31548e54d0e3d0853d9ac1dd1e72a464a6bb4f02" + integrity sha512-HFiiMIuP2BoiN/V8I5KS2xZjlrnBEJSKY/oIkIRFIoL/9uvHRorKjlsi0KsQLnLHx3+pZ+AL65LXjt54sJdWiQ== + dependencies: + "@lerna/prompt" "5.1.6" + +"@lerna/output@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-5.1.6.tgz#e69dd303bbb636971caf0c24e9259aafb92b207a" + integrity sha512-FjZfnDwiKHeKMEZVN2eWbVd0pKINwXRjDXV0CGo1HrTvbXQI3lcrhgoPkDE42BSALaH7E9N0YCUYOYVWlJvSzQ== + dependencies: + npmlog "^6.0.2" + +"@lerna/pack-directory@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-5.1.6.tgz#64fbd571ba346da6b0dbc4e7339851df1b97092c" + integrity sha512-dKFFQ95BheshI4eWOVYT7DF6iM8VITTwOfueLnnUe8h8OgBDHnZJOEHT+zNjvXo6sA0DtN8pvpxA8VVEroq2KQ== + dependencies: + "@lerna/get-packed" "5.1.6" + "@lerna/package" "5.1.6" + "@lerna/run-lifecycle" "5.1.6" + "@lerna/temp-write" "5.1.6" + npm-packlist "^2.1.4" + npmlog "^6.0.2" + tar "^6.1.0" + +"@lerna/package-graph@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-5.1.6.tgz#553edc82bc489449127386f420d0e0f78574b49b" + integrity sha512-kAmcZLbFcgzdwwEE34ls2hKKwLNXrp++Lb3QgLi5oZl95cGEXjhGNqECdY+hAgBxaSOAgrAd9dvxoR36zl5LJw== + dependencies: + "@lerna/prerelease-id-from-version" "5.1.6" + "@lerna/validation-error" "5.1.6" + npm-package-arg "^8.1.0" + npmlog "^6.0.2" + semver "^7.3.4" + +"@lerna/package@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-5.1.6.tgz#90159a4d3857178bc35c53a4e53636b4cf68ea35" + integrity sha512-OwsYEVVDEFIybYSh3edn5ZH7EoMPEmfl92pri3rqtaGYj76/ENGaQZSXT5ZH2oJKg5Jh9LrtaYAc+r/fZ+1vuQ== + dependencies: + load-json-file "^6.2.0" + npm-package-arg "^8.1.0" + write-pkg "^4.0.0" + +"@lerna/prerelease-id-from-version@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.1.6.tgz#ce03815e967433784bbfe9b989e3368008684642" + integrity sha512-LJYIuxw9rpKkCWtE10gOOyqpcKRzV34Ljk0L0WSaXILlcWf5bAb0ZmF8t5UJ/MzhGklYwT/Fk0yPtVtu7GnBaA== + dependencies: + semver "^7.3.4" + +"@lerna/profiler@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-5.1.6.tgz#9d67bde76e119187f35f5dc8d5c1ffe8cf92ee83" + integrity sha512-ZFU7WPIk7FxblnGx9Ux0W+NLnTGTIpjdVWEzi/8QkJssmjxerbW62lO5tvGzv6kjPQsml2kC7yPBwX9JEOFCdQ== + dependencies: + fs-extra "^9.1.0" + npmlog "^6.0.2" + upath "^2.0.1" + +"@lerna/project@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-5.1.6.tgz#a8a79c78f9c9b5406cba77ab75986e265e61940a" + integrity sha512-9EXc2uTDfruvJcWnW3UrDZCAgZ/LUOQDC92xBSi1qazSE3fEsfrLBJmMqUzBRTuGoGh5BPnJgA2l0It01z51dQ== + dependencies: + "@lerna/package" "5.1.6" + "@lerna/validation-error" "5.1.6" + cosmiconfig "^7.0.0" + dedent "^0.7.0" + dot-prop "^6.0.1" + glob-parent "^5.1.1" + globby "^11.0.2" + load-json-file "^6.2.0" + npmlog "^6.0.2" + p-map "^4.0.0" + resolve-from "^5.0.0" + write-json-file "^4.3.0" + +"@lerna/prompt@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-5.1.6.tgz#3f1ea0655f047ae0a001a8645152df4c0a77816a" + integrity sha512-3Ds/N8mzb1zyTq079CMPCg2wfo5cwVBtr0N5Bh9A+NERQuLavxF1tBRKRYLF4h9zHdybNvAMkKfoQkkyJNliQg== + dependencies: + inquirer "^7.3.3" + npmlog "^6.0.2" + +"@lerna/publish@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-5.1.6.tgz#9148b47e73e3fdcc0dace0f2c079951f0f63b2a5" + integrity sha512-ZGB4JJBUTBnx5N37qNdyZ+iZX4KXtjbEnB3WU7HH7IzMHc4JZbDEQhAyfELKdvB4gEdYJTsfA8v8J75U3HcluA== + dependencies: + "@lerna/check-working-tree" "5.1.6" + "@lerna/child-process" "5.1.6" + "@lerna/collect-updates" "5.1.6" + "@lerna/command" "5.1.6" + "@lerna/describe-ref" "5.1.6" + "@lerna/log-packed" "5.1.6" + "@lerna/npm-conf" "5.1.6" + "@lerna/npm-dist-tag" "5.1.6" + "@lerna/npm-publish" "5.1.6" + "@lerna/otplease" "5.1.6" + "@lerna/output" "5.1.6" + "@lerna/pack-directory" "5.1.6" + "@lerna/prerelease-id-from-version" "5.1.6" + "@lerna/prompt" "5.1.6" + "@lerna/pulse-till-done" "5.1.6" + "@lerna/run-lifecycle" "5.1.6" + "@lerna/run-topologically" "5.1.6" + "@lerna/validation-error" "5.1.6" + "@lerna/version" "5.1.6" + fs-extra "^9.1.0" + libnpmaccess "^4.0.1" + npm-package-arg "^8.1.0" + npm-registry-fetch "^9.0.0" + npmlog "^6.0.2" + p-map "^4.0.0" + p-pipe "^3.1.0" + pacote "^13.4.1" + semver "^7.3.4" + +"@lerna/pulse-till-done@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-5.1.6.tgz#0b79ea17c877ae06a6ae2d41386cd2503df96e66" + integrity sha512-R9YpgGAlRB9XyYBZt41i8rLsnLqUDB8LYlOFhfrBX0Y1mI0/+9iYIHF0xBemrHqimQftu3QxvEoxpsDrXUJBIg== + dependencies: + npmlog "^6.0.2" + +"@lerna/query-graph@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-5.1.6.tgz#8729cf6d634d7ad978a35674184a9693418bc6c2" + integrity sha512-67dzRjCGjYjEUpO3PwFIcTpgJhaQO4WT687bpJh8M5XaS0xeaz2g+e1C9U/n8xIHJm3N2PlKYMSczuvPhSayCw== + dependencies: + "@lerna/package-graph" "5.1.6" + +"@lerna/resolve-symlink@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-5.1.6.tgz#57928c17d76971749f862f89fe6de8b84bc81e34" + integrity sha512-+2rCXIj8jM31WRPqUffBAb1e5TimgSDSPTM/q52cvSs+JRgqiw+aVx/8FgG/a/bMg+5+Zx/+A4c8KxnWCjLF5A== + dependencies: + fs-extra "^9.1.0" + npmlog "^6.0.2" + read-cmd-shim "^2.0.0" + +"@lerna/rimraf-dir@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-5.1.6.tgz#dff2eb82bcbde1cd5a4d186d1df8aa5cb03b816e" + integrity sha512-8J9LrlW/IzSvDXxk7hbobofSOXvKS2o+q6vdamrwLapk2KfI/KGh0auBo/s4Rvr5t6OZfpr4/woLJyQFdnwWWA== + dependencies: + "@lerna/child-process" "5.1.6" + npmlog "^6.0.2" + path-exists "^4.0.0" + rimraf "^3.0.2" + +"@lerna/run-lifecycle@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-5.1.6.tgz#8a43e28660b8929b76f6a16088a055fb31ecba1b" + integrity sha512-rTLQwIwUtN6+WpyFceZoahi1emTlLwJYwTMBZZla3w6aBwERdfpEvB4MVz2F6/TTYmJ2uzWa1Y85faGH4x4blA== + dependencies: + "@lerna/npm-conf" "5.1.6" + "@npmcli/run-script" "^3.0.2" + npmlog "^6.0.2" + +"@lerna/run-topologically@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-5.1.6.tgz#a34e5ce84dcddaa3e94d742c44b7233e7baf1ed8" + integrity sha512-2THwjyU/aq7NOUmjCKQYK7l78fUoBwBtWXFGfeqK5xN5LBc2zr293cC1Z7CAZHUVh1JklLWL0PXX8Z34g3210g== + dependencies: + "@lerna/query-graph" "5.1.6" + p-queue "^6.6.2" + +"@lerna/run@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-5.1.6.tgz#1e47bfb792109e37740d65786e7079c666c3fd15" + integrity sha512-WMZF4tKFL/hGhUHphcYJNUDGvpHdrLD8ysACiqgIyu5ssIWiXb0wbUO0OeGWMss0b7TNOUG1y6DGOPFWFWRd3w== + dependencies: + "@lerna/command" "5.1.6" + "@lerna/filter-options" "5.1.6" + "@lerna/npm-run-script" "5.1.6" + "@lerna/output" "5.1.6" + "@lerna/profiler" "5.1.6" + "@lerna/run-topologically" "5.1.6" + "@lerna/timer" "5.1.6" + "@lerna/validation-error" "5.1.6" + p-map "^4.0.0" + +"@lerna/symlink-binary@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-5.1.6.tgz#ce4d5be8d8a4885c3f3e81007137c4ae393311d0" + integrity sha512-nj5a77e8Vk+AZY+batyr+lCo3EcGTiGjSP0MFnkXKn1wUyUUZiKgS48J/9RTNdTpWZRC4G2PneR6BUmnF6Mnlg== + dependencies: + "@lerna/create-symlink" "5.1.6" + "@lerna/package" "5.1.6" + fs-extra "^9.1.0" + p-map "^4.0.0" + +"@lerna/symlink-dependencies@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-5.1.6.tgz#38f5a94e6450b0bff0c17b3e44b4d527827cea24" + integrity sha512-nMVTEm8oi3TrKXmDeS9445zngWQR31AShKH+u9f+YZVYE1Ncv4/XpgDSkTNsbm//vMi0ilWH+QQxjBC+pDXd8Q== + dependencies: + "@lerna/create-symlink" "5.1.6" + "@lerna/resolve-symlink" "5.1.6" + "@lerna/symlink-binary" "5.1.6" + fs-extra "^9.1.0" + p-map "^4.0.0" + p-map-series "^2.1.0" + +"@lerna/temp-write@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/temp-write/-/temp-write-5.1.6.tgz#3b486297b1ccc732c3dbea34e6f42a6198ba2c82" + integrity sha512-Ycb0dNBi5bwgVyc/aeZ5JmgSEWfaJjh9efFqDfsj763HBLr9sBZvqQYBRXGAWxBdDWy+lXTXximsQw5gJZZxpw== + dependencies: + graceful-fs "^4.1.15" + is-stream "^2.0.0" + make-dir "^3.0.0" + temp-dir "^1.0.0" + uuid "^8.3.2" + +"@lerna/timer@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-5.1.6.tgz#a0fdebc3cbce93907b6855515726c31e8e5c50ac" + integrity sha512-m28ufTfg7zibqPujxborrTy9WrocCmoMXvw1PuSZ0LCf5hhK3HUJJ8ybxYAGpUXdZqjzvRQNlc954GsOkCSJEA== + +"@lerna/validation-error@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-5.1.6.tgz#12371dcc8dc610e04644b1bcf05535c6487755ca" + integrity sha512-6+rc1bGTqaRMvML8Qew+RoqZFxyESSX+GBCTv0pW1SBcNo/yC76fq9y/WSA3dn6GuqHWyX3H0Yki7HutezM7/A== + dependencies: + npmlog "^6.0.2" + +"@lerna/version@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-5.1.6.tgz#7d0906e130bd29046a3827088033b9b7d2289545" + integrity sha512-UE7ZHUdHtlmHQPK8ZSc62BHnWXIPqV7nzQAM/tQngIGSAH0oXHjxktP4ysPRqX8U0jfl212fSveVK7HK988zoQ== + dependencies: + "@lerna/check-working-tree" "5.1.6" + "@lerna/child-process" "5.1.6" + "@lerna/collect-updates" "5.1.6" + "@lerna/command" "5.1.6" + "@lerna/conventional-commits" "5.1.6" + "@lerna/github-client" "5.1.6" + "@lerna/gitlab-client" "5.1.6" + "@lerna/output" "5.1.6" + "@lerna/prerelease-id-from-version" "5.1.6" + "@lerna/prompt" "5.1.6" + "@lerna/run-lifecycle" "5.1.6" + "@lerna/run-topologically" "5.1.6" + "@lerna/temp-write" "5.1.6" + "@lerna/validation-error" "5.1.6" + chalk "^4.1.0" + dedent "^0.7.0" + load-json-file "^6.2.0" + minimatch "^3.0.4" + npmlog "^6.0.2" + p-map "^4.0.0" + p-pipe "^3.1.0" + p-reduce "^2.1.0" + p-waterfall "^2.1.1" + semver "^7.3.4" + slash "^3.0.0" + write-json-file "^4.3.0" + +"@lerna/write-log-file@5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-5.1.6.tgz#88f62ca90dd947246a0bf0a45c3012e919002ec6" + integrity sha512-UfuERC0dN5cw6Vc11/8fDfnXfuEQXKbOweJ2D83nrNJIZS/HwWkAoYVZ493w7xJzrqKi6V352BY3m9D7pi8h5g== + dependencies: + npmlog "^6.0.2" + write-file-atomic "^3.0.3" + +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nomiclabs/hardhat-ethers@^2.0.5": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.6.tgz#1c695263d5b46a375dcda48c248c4fba9dfe2fc2" + integrity sha512-q2Cjp20IB48rEn2NPjR1qxsIQBvFVYW9rFRCFq+bC4RUrn1Ljz3g4wM8uSlgIBZYBi2JMXxmOzFqHraczxq4Ng== + +"@nomiclabs/hardhat-waffle@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz#9c538a09c5ed89f68f5fd2dc3f78f16ed1d6e0b1" + integrity sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg== + dependencies: + "@types/sinon-chai" "^3.2.3" + "@types/web3" "1.0.19" + +"@nomiclabs/hardhat-web3@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz#2d9850cb285a2cebe1bd718ef26a9523542e52a9" + integrity sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q== + dependencies: + "@types/bignumber.js" "^5.0.0" + +"@npmcli/arborist@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.2.0.tgz#ee40dfe1f81ae1524819ee39c8f3e7022b0d6269" + integrity sha512-zWV7scFGL0SmpvfQyIWnMFbU/0YgtMNyvJiJwR98kyjUSntJGWFFR0O600d5W+TrDcTg0GyDbY+HdzGEg+GXLg== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/map-workspaces" "^2.0.3" + "@npmcli/metavuln-calculator" "^3.0.1" + "@npmcli/move-file" "^2.0.0" + "@npmcli/name-from-folder" "^1.0.1" + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/package-json" "^2.0.0" + "@npmcli/run-script" "^3.0.0" + bin-links "^3.0.0" + cacache "^16.0.6" + common-ancestor-path "^1.0.1" + json-parse-even-better-errors "^2.3.1" + json-stringify-nice "^1.1.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + nopt "^5.0.0" + npm-install-checks "^5.0.0" + npm-package-arg "^9.0.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.0" + npmlog "^6.0.2" + pacote "^13.0.5" + parse-conflict-json "^2.0.1" + proc-log "^2.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^1.0.1" + read-package-json-fast "^2.0.2" + readdir-scoped-modules "^1.1.0" + rimraf "^3.0.2" + semver "^7.3.7" + ssri "^9.0.0" + treeverse "^2.0.0" + walk-up-path "^1.0.0" + +"@npmcli/ci-detect@^1.0.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" + integrity sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q== + +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/fs@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.0.tgz#f2a21c28386e299d1a9fae8051d35ad180e33109" + integrity sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/git@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.1.tgz#049b99b1381a2ddf7dc56ba3e91eaf76ca803a8d" + integrity sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A== + dependencies: + "@npmcli/promise-spawn" "^3.0.0" + lru-cache "^7.4.4" + mkdirp "^1.0.4" + npm-pick-manifest "^7.0.0" + proc-log "^2.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^2.0.2" + +"@npmcli/installed-package-contents@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +"@npmcli/map-workspaces@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz#2d3c75119ee53246e9aa75bc469a55281cd5f08f" + integrity sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q== + dependencies: + "@npmcli/name-from-folder" "^1.0.1" + glob "^8.0.1" + minimatch "^5.0.1" + read-package-json-fast "^2.0.3" + +"@npmcli/metavuln-calculator@^3.0.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" + integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== + dependencies: + cacache "^16.0.0" + json-parse-even-better-errors "^2.3.1" + pacote "^13.0.3" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/move-file@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.0.tgz#417f585016081a0184cef3e38902cd917a9bbd02" + integrity sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/name-from-folder@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" + integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== + +"@npmcli/node-gyp@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" + integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== + +"@npmcli/package-json@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" + integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== + dependencies: + json-parse-even-better-errors "^2.3.1" + +"@npmcli/promise-spawn@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" + integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== + dependencies: + infer-owner "^1.0.4" + +"@npmcli/run-script@^3.0.0", "@npmcli/run-script@^3.0.2": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-3.0.3.tgz#66afa6e0c4c3484056195f295fa6c1d1a45ddf58" + integrity sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q== + dependencies: + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/promise-spawn" "^3.0.0" + node-gyp "^8.4.1" + read-package-json-fast "^2.0.3" + +"@npmcli/run-script@^4.1.0": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.1.5.tgz#d60a7d41321612a9c0e1433797c10c19d0213d55" + integrity sha512-FyrZkZ+O0bCnQqm+mRb6sKbEJgyJudInwFN84gCcMUcxrWkR15Ags1uOHwnxHYdpj3T5eqrCZNW/Ys20MGTQ6Q== + dependencies: + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/promise-spawn" "^3.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^2.0.3" + which "^2.0.2" + +"@nrwl/cli@14.3.6": + version "14.3.6" + resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-14.3.6.tgz#bf9d36822bbe9db42c250f4151df2b496ae7f13f" + integrity sha512-MNCBzM3ZDsujEc5crltH/kEyNBKx6DofLHdpzY1EoiY+yF57W7E1B6ERkVUGDc52sR4snEUKpQLXdVFjwP+z8A== + dependencies: + nx "14.3.6" + +"@nrwl/tao@14.3.6": + version "14.3.6" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-14.3.6.tgz#cb9ac487397dd1c399add2fd8564bc6debc0fec4" + integrity sha512-g3y6VRq4wNtbFZIclJwRR/1hcTesx6h64g7h80VWtyRw0pVq/0zAjb8abeQSTDLM15uc1pQJYPEfsR/KgI3Sow== + dependencies: + nx "14.3.6" + +"@octokit/auth-token@^2.4.4": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" + integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== + dependencies: + "@octokit/types" "^6.0.3" + +"@octokit/core@^3.5.1": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.6.0.tgz#3376cb9f3008d9b3d110370d90e0a1fcd5fe6085" + integrity sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q== + dependencies: + "@octokit/auth-token" "^2.4.4" + "@octokit/graphql" "^4.5.8" + "@octokit/request" "^5.6.3" + "@octokit/request-error" "^2.0.5" + "@octokit/types" "^6.0.3" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.12" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" + integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== + dependencies: + "@octokit/types" "^6.0.3" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^4.5.8": + version "4.8.0" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" + integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== + dependencies: + "@octokit/request" "^5.6.0" + "@octokit/types" "^6.0.3" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^12.5.0": + version "12.5.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.5.0.tgz#e10b256237c877fa6f0a21922151dc03d9c57510" + integrity sha512-VatvE5wtRkJq6hAWGTBZ62WkrdlCiy0G0u27cVOYTfAWVZi7QqTurVcjpsyc5+9hXLPRP5O/DaNEs4TgAp4Mqg== + +"@octokit/plugin-enterprise-rest@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + +"@octokit/plugin-paginate-rest@^2.16.8": + version "2.21.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.0.tgz#ddd425eaa09214dfdfdc9cc411fcf676b8985e65" + integrity sha512-MoGEKjvDpTOCVb5gbeiW7kZm/cRfT256UJwHEuy+y+gTUuKziyXaiOkt5rM/4nzhp8UxVgvok9Tu7dMMpUybiQ== + dependencies: + "@octokit/types" "^6.38.1" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@^5.12.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.0.tgz#e0a774d78bb17fb9b6b9ae48d5517940f7f61e90" + integrity sha512-mvdwq+LvhR2GRDY82FgSZ52xX6wkOCpjiI3amiKbzKHd9nyKeFdXLsIQ3Go12tWRtvo+HwqoypLHDjRrgMFDQA== + dependencies: + "@octokit/types" "^6.38.0" + deprecation "^2.3.1" + +"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" + integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== + dependencies: + "@octokit/types" "^6.0.3" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.6.0", "@octokit/request@^5.6.3": + version "5.6.3" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" + integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.1.0" + "@octokit/types" "^6.16.1" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + +"@octokit/rest@^18.1.0": + version "18.12.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" + integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== + dependencies: + "@octokit/core" "^3.5.1" + "@octokit/plugin-paginate-rest" "^2.16.8" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^5.12.0" + +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.38.0", "@octokit/types@^6.38.1": + version "6.38.1" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.38.1.tgz#03d70745564954dfdae32df23d5f1578f958474f" + integrity sha512-kWMohLCIvnwApRmxRFDOqve7puiNNdtVfgwdDOm6QyJNorWOgKv2/AodCcGqx63o28kF7Dr4/nJCatrwwqhULg== + dependencies: + "@octokit/openapi-types" "^12.5.0" + +"@parcel/watcher@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" + integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== + dependencies: + node-addon-api "^3.2.1" + node-gyp-build "^4.3.0" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@solidity-parser/parser@^0.14.1": + version "0.14.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.2.tgz#2d8f2bddb217621df882ceeae7d7b42ae8664db3" + integrity sha512-10cr0s+MtRtqjEw0WFJrm2rwULN30xx7btd/v9cmqME2617/2M5MbHDkFIGIGTa7lwNw4bN9mVGfhlLzrYw8pA== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/abstract-leveldown@*": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#f055979a99f7654e84d6b8e6267419e9c4cfff87" + integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== + +"@types/bignumber.js@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/bignumber.js/-/bignumber.js-5.0.0.tgz#d9f1a378509f3010a3255e9cc822ad0eeb4ab969" + integrity sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA== + dependencies: + bignumber.js "*" + +"@types/bn.js@*", "@types/bn.js@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" + integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== + dependencies: + "@types/node" "*" + +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/chai-as-promised@^7.1.5": + version "7.1.5" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz#6e016811f6c7a64f2eed823191c3a6955094e255" + integrity sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ== + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@^4.3.0": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" + integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@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/level-errors@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" + integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== + +"@types/levelup@^4.3.0": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" + integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== + dependencies: + "@types/abstract-leveldown" "*" + "@types/level-errors" "*" + "@types/node" "*" + +"@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/minimist@^1.2.0": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + +"@types/mkdirp@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f" + integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== + dependencies: + "@types/node" "*" + +"@types/mocha@^9.1.0": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" + integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== + +"@types/node@*": + version "18.0.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.0.tgz#67c7b724e1bcdd7a8821ce0d5ee184d3b4dd525a" + integrity sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA== + +"@types/node@^12.12.6": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@types/node@^17.0.23": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.1.1": + version "2.6.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a" + integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== + +"@types/resolve@^0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + +"@types/secp256k1@^4.0.1": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + dependencies: + "@types/node" "*" + +"@types/sinon-chai@^3.2.3": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.8.tgz#5871d09ab50d671d8e6dd72e9073f8e738ac61dc" + integrity sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g== + dependencies: + "@types/chai" "*" + "@types/sinon" "*" + +"@types/sinon@*": + version "10.0.12" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.12.tgz#fb7009ea71f313a9da4644ba73b94e44d6b84f7f" + integrity sha512-uWf4QJ4oky/GckJ1MYQxU52cgVDcXwBhDkpvLbi4EKoLPqLE4MOH6T/ttM33l3hi0oZ882G6oIzWv/oupRYSxQ== + dependencies: + "@types/sinonjs__fake-timers" "*" + +"@types/sinonjs__fake-timers@*": + version "8.1.2" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz#bf2e02a3dbd4aecaf95942ecd99b7402e03fad5e" + integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== + +"@types/underscore@*": + version "1.11.4" + resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.4.tgz#62e393f8bc4bd8a06154d110c7d042a93751def3" + integrity sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg== + +"@types/web3@1.0.19": + version "1.0.19" + resolved "https://registry.yarnpkg.com/@types/web3/-/web3-1.0.19.tgz#46b85d91d398ded9ab7c85a5dd57cb33ac558924" + integrity sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A== + dependencies: + "@types/bn.js" "*" + "@types/underscore" "*" + +"@typescript-eslint/eslint-plugin@^5.17.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz#524a11e15c09701733033c96943ecf33f55d9ca1" + integrity sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow== + dependencies: + "@typescript-eslint/scope-manager" "5.30.0" + "@typescript-eslint/type-utils" "5.30.0" + "@typescript-eslint/utils" "5.30.0" + debug "^4.3.4" + functional-red-black-tree "^1.0.1" + ignore "^5.2.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.17.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.0.tgz#a2184fb5f8ef2bf1db0ae61a43907e2e32aa1b8f" + integrity sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA== + dependencies: + "@typescript-eslint/scope-manager" "5.30.0" + "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/typescript-estree" "5.30.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz#bf585ee801ab4ad84db2f840174e171a6bb002c7" + integrity sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ== + dependencies: + "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/visitor-keys" "5.30.0" + +"@typescript-eslint/type-utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz#98f3af926a5099153f092d4dad87148df21fbaae" + integrity sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg== + dependencies: + "@typescript-eslint/utils" "5.30.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.0.tgz#db7d81d585a3da3801432a9c1d2fafbff125e110" + integrity sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag== + +"@typescript-eslint/typescript-estree@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz#4565ee8a6d2ac368996e20b2344ea0eab1a8f0bb" + integrity sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw== + dependencies: + "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/visitor-keys" "5.30.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.0.tgz#1dac771fead5eab40d31860716de219356f5f754" + integrity sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.30.0" + "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/typescript-estree" "5.30.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/visitor-keys@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz#07721d23daca2ec4c2da7f1e660d41cd78bacac3" + integrity sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw== + dependencies: + "@typescript-eslint/types" "5.30.0" + eslint-visitor-keys "^3.3.0" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +JSONStream@^1.0.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abstract-leveldown@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" + integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +abstract-leveldown@~6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" + integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +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.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.7.1: + version "8.7.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" + integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== + +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.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.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" + integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== + +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== + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz#ba20bd6b553e31d62fc8c31bd23d22b95734390d" + integrity sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-eventemitter@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async@^2.4.0: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +before-after-hook@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" + integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== + +bignumber.js@*, bignumber.js@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" + integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== + +bin-links@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.1.tgz#cc70ffb481988b22c527d3e6e454787876987a49" + integrity sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ== + dependencies: + cmd-shim "^5.0.0" + mkdirp-infer-owner "^2.0.0" + npm-normalize-package-bin "^1.0.0" + read-cmd-shim "^3.0.0" + rimraf "^3.0.0" + write-file-atomic "^4.0.0" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.0.0, bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer-xor@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" + integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== + dependencies: + safe-buffer "^5.1.1" + +buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bufferutil@^4.0.1: + version "4.0.6" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" + integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== + dependencies: + node-gyp-build "^4.3.0" + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +byte-size@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.1.tgz#b1daf3386de7ab9d706b941a748dbfc71130dee3" + integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^15.0.5, cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: + version "16.1.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.1.tgz#4e79fb91d3efffe0630d5ad32db55cc1b870669c" + integrity sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^1.1.1" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +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.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.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +chai-as-promised@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" + integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + dependencies: + check-error "^1.0.2" + +chai@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" + integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + 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" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.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== + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + +chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.1: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@3.1.0, cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +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-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.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== + +cmd-shim@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd" + integrity sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw== + dependencies: + mkdirp-infer-owner "^2.0.0" + +cmd-shim@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" + integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== + dependencies: + mkdirp-infer-owner "^2.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colorette@^2.0.16: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +columnify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +commander@^9.3.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.3.0.tgz#f619114a5a2d2054e0d9ff1b31d5ccf89255e26b" + integrity sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw== + +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +config-chain@^1.1.12: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +conventional-changelog-angular@^5.0.12: + version "5.0.13" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" + integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-core@^4.2.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" + integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^5.0.0" + conventional-commits-parser "^3.2.0" + dateformat "^3.0.0" + get-pkg-repo "^4.0.0" + git-raw-commits "^2.0.8" + git-remote-origin-url "^2.0.0" + git-semver-tags "^4.1.1" + lodash "^4.17.15" + normalize-package-data "^3.0.0" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^4.0.0" + +conventional-changelog-preset-loader@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" + integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== + dependencies: + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" + +conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.2.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +conventional-recommended-bump@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" + integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.3.4" + conventional-commits-filter "^2.0.7" + conventional-commits-parser "^3.2.0" + git-raw-commits "^2.0.8" + git-semver-tags "^4.1.1" + meow "^8.0.0" + q "^1.5.1" + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cookiejar@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + +core-js-pure@^3.0.1: + version "3.23.3" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.23.3.tgz#bcd02d3d8ec68ad871ef50d5ccbb248ddb54f401" + integrity sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + 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" + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== + +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.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.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +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== + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + dependencies: + clone "^1.0.2" + +deferred-leveldown@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" + integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== + dependencies: + abstract-leveldown "~6.2.1" + inherits "^2.0.3" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +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== + +dezalgo@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + dependencies: + asap "^2.0.0" + wrappy "1" + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +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" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dot-prop@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== + dependencies: + is-obj "^2.0.0" + +dotenv@~10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +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== + +elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/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== + +encoding-down@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" + integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== + dependencies: + abstract-leveldown "^6.2.1" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + +encoding@^0.1.12, encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.0, enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +envinfo@^7.7.4: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +errno@~0.1.1: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +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.19.0, es-abstract@^1.19.5, es-abstract@^1.20.0: + version "1.20.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + regexp.prototype.flags "^1.4.3" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +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.61" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.61.tgz#311de37949ef86b6b0dcea894d1ffedb909d3269" + integrity sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + 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: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-plugin-prettier@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.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@^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: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.12.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.18.0.tgz#78d565d16c993d0b73968c523c0446b13da784fd" + integrity sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA== + dependencies: + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.9.2" + ajv "^6.10.0" + 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.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.2" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + 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.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^9.3.2: + version "9.3.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" + integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== + dependencies: + acorn "^8.7.1" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + 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@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +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.yarnpkg.com/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.2, ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/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" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^5.0.0, execa@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +ext@^1.1.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" + integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== + dependencies: + type "^2.5.0" + +external-editor@^3.0.3: + 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" + +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.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + 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-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + 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.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +figures@3.2.0, figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +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" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +filter-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== + +find-up@5.0.0: + version "5.0.0" + 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" + path-exists "^4.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + 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" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" + integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== + +follow-redirects@^1.12.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.2: + 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== + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-pkg-repo@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +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" + +git-raw-commits@^2.0.8: + version "2.0.11" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" + integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" + integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== + dependencies: + meow "^8.0.0" + semver "^6.0.0" + +git-up@^4.0.0: + version "4.0.5" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.5.tgz#e7bb70981a37ea2fb8fe049669800a1f9a01d759" + integrity sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA== + dependencies: + is-ssh "^1.3.0" + parse-url "^6.0.0" + +git-url-parse@^11.4.4: + version "11.6.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.6.0.tgz#c634b8de7faa66498a2b88932df31702c67df605" + integrity sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g== + dependencies: + git-up "^4.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + dependencies: + ini "^1.3.2" + +glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + 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.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.1: + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +globals@^13.15.0: + version "13.15.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" + integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.2, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +handlebars@^4.7.7: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +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@^2.9.2: + version "2.9.9" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.9.9.tgz#05c1015eb73e0230309534b00deeb080724aace0" + integrity sha512-Qv7SXnRc0zq1kGXruNnSKpP3eFccXMR5Qv6GVX9hBIJ5efN0PflKPq92aQ5Cv3jrjJeRevLznWZVz7bttXhVfw== + dependencies: + "@ethereumjs/block" "^3.6.2" + "@ethereumjs/blockchain" "^5.5.2" + "@ethereumjs/common" "^2.6.4" + "@ethereumjs/tx" "^3.5.1" + "@ethereumjs/vm" "^5.9.0" + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@sentry/node" "^5.18.1" + "@solidity-parser/parser" "^0.14.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + abort-controller "^3.0.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^0.1.2" + ethereumjs-abi "^0.6.8" + ethereumjs-util "^7.1.4" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + lodash "^4.17.11" + merkle-patricia-tree "^4.2.4" + mnemonist "^0.38.0" + mocha "^9.2.0" + p-map "^4.0.0" + qs "^6.7.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + slash "^3.0.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + "true-case-path" "^2.2.1" + tsort "0.0.1" + undici "^5.4.0" + 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.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + 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== + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.0.0.tgz#df7a06678b4ebd722139786303db80fdf302ea56" + integrity sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q== + dependencies: + lru-cache "^7.5.1" + +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +husky@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" + integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + 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" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-walk@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" + integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== + dependencies: + minimatch "^3.0.4" + +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== + dependencies: + minimatch "^5.0.1" + +ignore@^5.0.4, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + +immediate@~3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" + integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== + +immutable@^4.0.0-rc.12: + version "4.1.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + +import-fresh@^3.0.0, 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" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +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.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.2, ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +init-package-json@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-2.0.5.tgz#78b85f3c36014db42d8f32117252504f68022646" + integrity sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA== + dependencies: + npm-package-arg "^8.1.5" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "^4.1.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^3.0.0" + +inquirer@^7.3.3: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +ip@^1.1.5: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" + integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +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.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + 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-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + +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, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +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.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +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.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-plain-obj@^1.0.0, 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.0.0, is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +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-ssh@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" + integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== + dependencies: + protocols "^2.0.1" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +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-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-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.9.tgz#246d77d2871e7d9f5aeb1d54b9f52c71329ece67" + integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/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-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +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.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + 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== + +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonc-parser@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" + integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +just-diff-apply@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.3.1.tgz#30f40809ffed55ad76dccf73fa9b85a76964c867" + integrity sha512-dgFenZnMsc1xGNqgdtgnh7DK+Oy352CE3VZLbzcbQpsBs9iI2K3M0IRrdgREZ72eItTjbl0suRyvKRdVQa9GbA== + +just-diff@^5.0.1: + version "5.0.3" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.0.3.tgz#4c9c514dec5526b25ab977590e3c39a0cf271554" + integrity sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg== + +keccak@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +kind-of@^6.0.2, 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.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + optionalDependencies: + graceful-fs "^4.1.9" + +lerna@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-5.1.6.tgz#07db65b5cc3683a237f655feb7671f2c2a27255b" + integrity sha512-eiLj3IurbEas1rGtntW4Cf2/6y90Ot2oQaU2wv4uo2rHf6GRXUBEZ0nrE4yseDlNtsS/H7bqfrvlAYb3PWUG1A== + dependencies: + "@lerna/add" "5.1.6" + "@lerna/bootstrap" "5.1.6" + "@lerna/changed" "5.1.6" + "@lerna/clean" "5.1.6" + "@lerna/cli" "5.1.6" + "@lerna/create" "5.1.6" + "@lerna/diff" "5.1.6" + "@lerna/exec" "5.1.6" + "@lerna/import" "5.1.6" + "@lerna/info" "5.1.6" + "@lerna/init" "5.1.6" + "@lerna/link" "5.1.6" + "@lerna/list" "5.1.6" + "@lerna/publish" "5.1.6" + "@lerna/run" "5.1.6" + "@lerna/version" "5.1.6" + import-local "^3.0.2" + npmlog "^6.0.2" + +level-codec@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" + integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== + dependencies: + buffer "^5.6.0" + +level-concat-iterator@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" + integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== + +level-errors@^2.0.0, level-errors@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" + integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== + dependencies: + errno "~0.1.1" + +level-iterator-stream@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" + integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== + dependencies: + inherits "^2.0.4" + readable-stream "^3.4.0" + xtend "^4.0.2" + +level-mem@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" + integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== + dependencies: + level-packager "^5.0.3" + memdown "^5.0.0" + +level-packager@^5.0.3: + version "5.1.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" + integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== + dependencies: + encoding-down "^6.3.0" + levelup "^4.3.2" + +level-supports@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" + integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== + dependencies: + xtend "^4.0.2" + +level-ws@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" + integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== + dependencies: + inherits "^2.0.3" + readable-stream "^3.1.0" + xtend "^4.0.1" + +levelup@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" + integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== + dependencies: + deferred-leveldown "~5.3.0" + level-errors "~2.0.0" + level-iterator-stream "~4.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +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" + +libnpmaccess@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.3.tgz#dfb0e5b0a53c315a2610d300e46b4ddeb66e7eec" + integrity sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ== + dependencies: + aproba "^2.0.0" + minipass "^3.1.1" + npm-package-arg "^8.1.2" + npm-registry-fetch "^11.0.0" + +libnpmpublish@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.2.tgz#be77e8bf5956131bcb45e3caa6b96a842dec0794" + integrity sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw== + dependencies: + normalize-package-data "^3.0.2" + npm-package-arg "^8.1.2" + npm-registry-fetch "^11.0.0" + semver "^7.1.3" + ssri "^8.0.1" + +lilconfig@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" + integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lint-staged@^12.3.7: + version "12.5.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.5.0.tgz#d6925747480ae0e380d13988522f9dd8ef9126e3" + integrity sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.16" + commander "^9.3.0" + debug "^4.3.4" + execa "^5.1.1" + lilconfig "2.0.5" + listr2 "^4.0.5" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-inspect "^1.12.2" + pidtree "^0.5.0" + string-argv "^0.3.1" + supports-color "^9.2.2" + yaml "^1.10.2" + +listr2@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" + integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.5" + through "^2.3.8" + wrap-ansi "^7.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-json-file@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== + dependencies: + graceful-fs "^4.1.15" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + 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.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +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@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +loupe@^2.3.1: + version "2.3.4" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" + integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== + dependencies: + get-func-name "^2.0.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.12.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.12.0.tgz#be2649a992c8a9116efda5c487538dcf715f3476" + integrity sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +ltgt@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: + version "10.1.8" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz#3b6e93dd8d8fdb76c0d7bf32e617f37c3108435a" + integrity sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +make-fetch-happen@^8.0.9: + version "8.0.14" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" + integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.0.5" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + promise-retry "^2.0.1" + socks-proxy-agent "^5.0.0" + ssri "^8.0.0" + +make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +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== + +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +memdown@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" + integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== + dependencies: + abstract-leveldown "~6.2.1" + functional-red-black-tree "~1.0.1" + immediate "~3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.2.0" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merkle-patricia-tree@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" + integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== + dependencies: + "@types/levelup" "^4.3.0" + ethereumjs-util "^7.1.4" + level-mem "^5.0.1" + level-ws "^2.0.0" + readable-stream "^3.6.0" + semaphore-async-await "^1.5.1" + +micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +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.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" + integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + 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.5, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-fetch@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.0.tgz#ca1754a5f857a3be99a9271277246ac0b44c3ff8" + integrity sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: + version "3.3.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-infer-owner@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" + integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== + dependencies: + chownr "^2.0.0" + infer-owner "^1.0.4" + mkdirp "^1.0.3" + +mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^9.2.0, mocha@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" + integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.3" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + growl "1.10.5" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "4.2.1" + ms "2.1.3" + nanoid "3.3.1" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + workerpool "6.2.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multimatch@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.8, mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nanoid@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== + +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== + +negotiator@^0.6.2, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-addon-api@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + +node-gyp@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-gyp@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.0.0.tgz#e1da2067427f3eb5bb56820cb62bc6b1e4bd2089" + integrity sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, 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-package-data@^3.0.0, normalize-package-data@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.0.tgz#1122d5359af21d4cd08718b92b058a658594177c" + integrity sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g== + dependencies: + hosted-git-info "^5.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-bundled@^1.1.1, npm-bundled@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-install-checks@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" + integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-package-arg@^8.0.0, npm-package-arg@^8.1.0, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: + version "8.1.5" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" + integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== + dependencies: + hosted-git-info "^4.0.1" + semver "^7.3.4" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.0.tgz#a60e9f1e7c03e4e3e4e994ea87fff8b90b522987" + integrity sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw== + dependencies: + hosted-git-info "^5.0.0" + proc-log "^2.0.1" + semver "^7.3.5" + validate-npm-package-name "^4.0.0" + +npm-packlist@^2.1.4: + version "2.2.2" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.2.2.tgz#076b97293fa620f632833186a7a8f65aaa6148c8" + integrity sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg== + dependencies: + glob "^7.1.6" + ignore-walk "^3.0.3" + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +npm-packlist@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" + integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== + dependencies: + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^1.1.2" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz#76dda30a7cd6b99be822217a935c2f5eacdaca4c" + integrity sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg== + dependencies: + npm-install-checks "^5.0.0" + npm-normalize-package-bin "^1.0.1" + npm-package-arg "^9.0.0" + semver "^7.3.5" + +npm-registry-fetch@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" + integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== + dependencies: + make-fetch-happen "^9.0.1" + minipass "^3.1.3" + minipass-fetch "^1.3.0" + minipass-json-stream "^1.0.1" + minizlib "^2.0.0" + npm-package-arg "^8.0.0" + +npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz#26dc4b26d0a545886e807748032ba2aefaaae96b" + integrity sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w== + dependencies: + make-fetch-happen "^10.0.6" + minipass "^3.1.6" + minipass-fetch "^2.0.3" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^9.0.1" + proc-log "^2.0.0" + +npm-registry-fetch@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz#86f3feb4ce00313bc0b8f1f8f69daae6face1661" + integrity sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA== + dependencies: + "@npmcli/ci-detect" "^1.0.0" + lru-cache "^6.0.0" + make-fetch-happen "^8.0.9" + minipass "^3.1.3" + minipass-fetch "^1.3.0" + minipass-json-stream "^1.0.1" + minizlib "^2.0.0" + npm-package-arg "^8.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^6.0.0, npmlog@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +nx@14.3.6, nx@^14.3.6: + version "14.3.6" + resolved "https://registry.yarnpkg.com/nx/-/nx-14.3.6.tgz#0b30dbe96df2cd62cb68c9d3609e2dc3219b0a20" + integrity sha512-jBgqXEkRalo8PwXJzO4HVNN3P5pqyL5VawyNd34qPl+4t2XlDRqoK0J74i8liPGdKPBB1HjM2K1u+QNF2ROvQA== + dependencies: + "@nrwl/cli" "14.3.6" + "@nrwl/tao" "14.3.6" + "@parcel/watcher" "2.0.4" + chalk "4.1.0" + chokidar "^3.5.1" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^7.0.2" + dotenv "~10.0.0" + enquirer "~2.3.6" + fast-glob "3.2.7" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^10.1.0" + glob "7.1.4" + ignore "^5.0.4" + js-yaml "4.1.0" + jsonc-parser "3.0.0" + minimatch "3.0.5" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.3.4" + string-width "^4.2.3" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^3.9.0" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.4.0" + yargs-parser "21.0.1" + +object-inspect@^1.12.0, object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +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.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +obliterator@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== + dependencies: + http-https "^1.0.0" + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + 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.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + 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.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map-series@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" + integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-pipe@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== + +p-queue@^6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-reduce@^2.0.0, p-reduce@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/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== + +p-waterfall@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" + integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== + dependencies: + p-reduce "^2.0.0" + +pacote@^13.0.3, pacote@^13.0.5, pacote@^13.4.1: + version "13.6.1" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.1.tgz#ac6cbd9032b4c16e5c1e0c60138dfe44e4cc589d" + integrity sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw== + dependencies: + "@npmcli/git" "^3.0.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/promise-spawn" "^3.0.0" + "@npmcli/run-script" "^4.1.0" + cacache "^16.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.6" + mkdirp "^1.0.4" + npm-package-arg "^9.0.0" + npm-packlist "^5.1.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.1" + proc-log "^2.0.0" + promise-retry "^2.0.1" + read-package-json "^5.0.0" + read-package-json-fast "^2.0.3" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + +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-conflict-json@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" + integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== + dependencies: + json-parse-even-better-errors "^2.3.1" + just-diff "^5.0.1" + just-diff-apply "^5.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +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" + +parse-path@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.4.tgz#4bf424e6b743fb080831f03b536af9fc43f0ffea" + integrity sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw== + dependencies: + is-ssh "^1.3.0" + protocols "^1.4.0" + qs "^6.9.4" + query-string "^6.13.8" + +parse-url@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-6.0.2.tgz#4a30b057bfc452af64512dfb1a7755c103db3ea1" + integrity sha512-uCSjOvD3T+6B/sPWhR+QowAZcU/o4bjPrVBQBGFxcDF6J6FraCGIaDBsdoQawiaaAVdHvtqBe3w3vKlfBKySOQ== + dependencies: + is-ssh "^1.3.0" + normalize-url "^6.1.0" + parse-path "^4.0.4" + protocols "^1.4.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pidtree@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.5.0.tgz#ad5fbc1de78b8a5f99d6fbdd4f6e4eee21d1aca1" + integrity sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +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== + +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +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" + +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@^2.1.2, prettier@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +proc-log@^2.0.0, proc-log@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" + integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" + integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== + dependencies: + read "1" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +protocols@^1.4.0: + version "1.4.8" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" + integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== + +protocols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" + integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qs@^6.7.0, qs@^6.9.4: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +query-string@^6.13.8: + version "6.14.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" + integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== + dependencies: + decode-uri-component "^0.2.0" + filter-obj "^1.1.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/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== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +raw-body@^2.4.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-cmd-shim@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" + integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== + +read-cmd-shim@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" + integrity sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog== + +read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" + integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== + dependencies: + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" + +read-package-json@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-3.0.1.tgz#c7108f0b9390257b08c21e3004d2404c806744b9" + integrity sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng== + dependencies: + glob "^7.1.1" + json-parse-even-better-errors "^2.3.0" + normalize-package-data "^3.0.0" + npm-normalize-package-bin "^1.0.0" + +read-package-json@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-4.1.2.tgz#b444d047de7c75d4a160cb056d00c0693c1df703" + integrity sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ== + dependencies: + glob "^7.1.1" + json-parse-even-better-errors "^2.3.0" + normalize-package-data "^3.0.0" + npm-normalize-package-bin "^1.0.0" + +read-package-json@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" + integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg== + dependencies: + glob "^8.0.1" + json-parse-even-better-errors "^2.3.1" + normalize-package-data "^4.0.0" + npm-normalize-package-bin "^1.0.1" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.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@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +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@1, read@~1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== + dependencies: + mute-stream "~0.0.4" + +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + 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" + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.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.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.0: + version "2.0.2" + 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== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +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.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.8.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, 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.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +rxjs@^6.6.0: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@^7.5.5: + version "7.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" + integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== + dependencies: + tslib "^2.1.0" + +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.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +semaphore-async-await@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" + integrity sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg== + +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + 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== + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +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" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" + integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== + dependencies: + agent-base "^6.0.2" + debug "4" + socks "^2.3.3" + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.3.3, socks@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" + integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== + dependencies: + ip "^1.1.5" + smart-buffer "^4.2.0" + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" + integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== + dependencies: + is-plain-obj "^2.0.0" + +source-map-support@^0.5.13: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + 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.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +ssri@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== + +string-argv@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.0: + 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.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + 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-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +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.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strong-log-transformer@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.2.tgz#502acaf82f2b7ee78eb7c83dcac0f89694e5a7bb" + integrity sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA== + +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== + +tar-stream@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +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== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tmp@0.0.33, tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +treeverse@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" + integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== + +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== + +"true-case-path@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" + integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== + +ts-essentials@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-1.0.4.tgz#ce3b5dade5f5d97cf69889c11bf7d2da8555b15a" + integrity sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ== + +ts-generator@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ts-generator/-/ts-generator-0.1.1.tgz#af46f2fb88a6db1f9785977e9590e7bcd79220ab" + integrity sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ== + dependencies: + "@types/mkdirp" "^0.5.2" + "@types/prettier" "^2.1.1" + "@types/resolve" "^0.0.8" + chalk "^2.4.1" + glob "^7.1.2" + mkdirp "^0.5.1" + prettier "^2.1.2" + resolve "^1.8.1" + ts-essentials "^1.0.0" + +ts-node@^10.7.0: + version "10.8.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.1.tgz#ea2bd3459011b52699d7e88daa55a45a1af4f066" + integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.9.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/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-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +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.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + +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.yarnpkg.com/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@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f" + integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript@^4.6.3: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + +uglify-js@^3.1.4: + version "3.16.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.16.1.tgz#0e7ec928b3d0b1e1d952bce634c384fd56377317" + integrity sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ== + +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@^5.4.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.5.1.tgz#baaf25844a99eaa0b22e1ef8d205bffe587c8f43" + integrity sha512-MEvryPLf18HvlCbLSzCW0U00IMftKGI5udnjrQbC5D4P0Hodwffhv+iGfWuJwg16Y/TK11ZFK8i+BPVW2z/eAw== + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +upath@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + +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.9" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" + integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== + dependencies: + node-gyp-build "^4.3.0" + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.0: + version "0.12.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" + integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-compile-cache@2.3.0, v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + 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" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" + +validate-npm-package-name@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" + integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== + dependencies: + builtins "^5.0.0" + +walk-up-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" + integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== + +wcwidth@^1.0.0: + 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.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz#f8f808928560d3e64e0c8d7bdd163aa4766bcf40" + integrity sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg== + dependencies: + web3-eth-iban "1.7.4" + web3-utils "1.7.4" + +web3-core-method@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.7.4.tgz#3873c6405e1a0a8a1efc1d7b28de8b7550b00c15" + integrity sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ== + dependencies: + "@ethersproject/transactions" "^5.6.2" + web3-core-helpers "1.7.4" + web3-core-promievent "1.7.4" + web3-core-subscriptions "1.7.4" + web3-utils "1.7.4" + +web3-core-promievent@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz#80a75633fdfe21fbaae2f1e38950edb2f134868c" + integrity sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz#2dc8a526dab8183dca3fef54658621801b1d0469" + integrity sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA== + dependencies: + util "^0.12.0" + web3-core-helpers "1.7.4" + web3-providers-http "1.7.4" + web3-providers-ipc "1.7.4" + web3-providers-ws "1.7.4" + +web3-core-subscriptions@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz#cfbd3fa71081a8c8c6f1a64577a1a80c5bd9826f" + integrity sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.7.4" + +web3-core@^1.7.1: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.7.4.tgz#943fff99134baedafa7c65b4a0bbd424748429ff" + integrity sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q== + dependencies: + "@types/bn.js" "^5.1.0" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-core-requestmanager "1.7.4" + web3-utils "1.7.4" + +web3-eth-iban@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz#711fb2547fdf0f988060027331b2b6c430505753" + integrity sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w== + dependencies: + bn.js "^5.2.1" + web3-utils "1.7.4" + +web3-providers-http@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.7.4.tgz#8209cdcb115db5ccae1f550d1c4e3005e7538d02" + integrity sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA== + dependencies: + web3-core-helpers "1.7.4" + xhr2-cookies "1.1.0" + +web3-providers-ipc@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz#02e85e99e48f432c9d34cee7d786c3685ec9fcfa" + integrity sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.7.4" + +web3-providers-ws@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz#6e60bcefb456f569a3e766e386d7807a96f90595" + integrity sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.7.4" + websocket "^1.0.32" + +web3-utils@1.7.4, web3-utils@^1.7.1: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.4.tgz#eb6fa3706b058602747228234453811bbee017f5" + integrity sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA== + dependencies: + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +websocket@^1.0.32: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whatwg-url@^8.4.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +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-typed-array@^1.1.2: + version "1.1.8" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.8.tgz#0cfd53401a6f334d90ed1125754a42ed663eb01f" + integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.9" + +which@2.0.2, which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +workerpool@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" + integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== + +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.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-file-atomic@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" + integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-json-file@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-4.3.0.tgz#908493d6fd23225344af324016e4ca8f702dd12d" + integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== + dependencies: + detect-indent "^6.0.0" + graceful-fs "^4.1.15" + is-plain-obj "^2.0.0" + make-dir "^3.0.0" + sort-keys "^4.0.0" + write-file-atomic "^3.0.0" + +write-pkg@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" + integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== + dependencies: + sort-keys "^2.0.0" + type-fest "^0.4.1" + write-json-file "^3.2.0" + +ws@^7.4.6: + version "7.5.8" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a" + integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw== + +xhr2-cookies@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" + integrity sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g== + dependencies: + cookiejar "^2.1.1" + +xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@21.0.1, yargs-parser@^21.0.0: + version "21.0.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== + +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.4.0: + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + 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.0.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 08244b9d69132cecd51283271e5f2492f378262f Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 4 Jul 2022 14:02:30 +0500 Subject: [PATCH 0002/1247] ethers lib pkg --- package-lock.json | 2179 ++- package.json | 6 +- packages/core-types/package-lock.json | 2458 ++++ .../core-types/src/contracts/SmartWallet.ts | 10 +- .../core-types/src/ethereumLibs/EthAdapter.ts | 1 - packages/ethers-lib/contracts/Deps_V1_0_0.sol | 14 + packages/ethers-lib/hardhat.config.ts | 63 + packages/ethers-lib/package-lock.json | 12285 ++++++++++++++++ packages/ethers-lib/package.json | 60 + .../scripts/generateTypechainFiles.ts | 74 + .../references/aa-4337/ECDSA.sol | 246 + .../references/aa-4337/EntryPoint.sol | 357 + .../references/aa-4337/IPaymaster.sol | 42 + .../references/aa-4337/IWallet.sol | 22 + .../references/aa-4337/SimpleWallet.sol | 133 + .../references/aa-4337/StakeManager.sol | 145 + .../references/aa-4337/UserOperation.sol | 82 + .../references/factory/SingletonFactory.sol | 34 + .../smart-contract-wallet/IWallet.sol | 22 + .../smart-contract-wallet/Proxy.sol | 40 + .../smart-contract-wallet/SmartWallet.sol | 425 + .../smart-contract-wallet/WalletFactory.sol | 71 + .../smart-contract-wallet/base/Executor.sol | 27 + .../base/FallbackManager.sol | 53 + .../smart-contract-wallet/base/Module.sol | 6 + .../base/ModuleManager.sol | 133 + .../smart-contract-wallet/common/Enum.sol | 7 + .../common/SecuredTokenTransfer.sol | 36 + .../common/SelfAuthorized.sol | 15 + .../common/SignatureDecoder.sol | 35 + .../common/Singleton.sol | 27 + .../handler/DefaultCallbackHandler.sol | 61 + .../interfaces/ERC1155TokenReceiver.sol | 49 + .../interfaces/ERC721TokenReceiver.sol | 24 + .../interfaces/ERC777TokensRecipient.sol | 13 + .../interfaces/IERC1271Wallet.sol | 38 + .../interfaces/IERC165.sol | 15 + .../interfaces/ISignatureValidator.sol | 20 + .../smart-contract-wallet/libs/ECDSA.sol | 250 + .../smart-contract-wallet/libs/LibAddress.sol | 17 + .../smart-contract-wallet/libs/MultiSend.sol | 66 + .../libs/MultiSendCallOnly.sol | 61 + .../smart-contract-wallet/libs/SafeMath.sol | 51 + .../libs/UserOperation.sol | 81 + .../modules/test/WhitelistModule.sol | 52 + .../storage/WalletStorage.sol | 47 + .../smart-contract-wallet/test/Button.sol | 14 + .../test/StorageSetter.sol | 11 + .../smart-contract-wallet/test/TestToken.sol | 14 + packages/ethers-lib/src/EthersAdapter.ts | 147 + .../MultiSend/MultiSendEthersContract.ts | 20 + .../SmartWallet/SmartWalletContractEthers.ts | 84 + .../SmartWalletProxyFactoryEthersContract.ts | 73 + .../src/contracts/contractInstancesEthers.ts | 74 + packages/ethers-lib/src/index.ts | 6 + packages/ethers-lib/src/types.ts | 13 + packages/ethers-lib/src/utils/constants.ts | 1 + packages/ethers-lib/src/utils/index.ts | 17 + packages/ethers-lib/tsconfig.json | 9 + packages/node-client/package-lock.json | 205 +- packages/node-client/package.json | 1 - yarn.lock | 4682 +++++- 62 files changed, 24918 insertions(+), 406 deletions(-) create mode 100644 packages/core-types/package-lock.json create mode 100644 packages/ethers-lib/contracts/Deps_V1_0_0.sol create mode 100644 packages/ethers-lib/hardhat.config.ts create mode 100644 packages/ethers-lib/package-lock.json create mode 100644 packages/ethers-lib/package.json create mode 100644 packages/ethers-lib/scripts/generateTypechainFiles.ts create mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/ECDSA.sol create mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/EntryPoint.sol create mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/IPaymaster.sol create mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/IWallet.sol create mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/SimpleWallet.sol create mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/StakeManager.sol create mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/UserOperation.sol create mode 100644 packages/ethers-lib/scw-contracts/references/factory/SingletonFactory.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/IWallet.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/Proxy.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/WalletFactory.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Executor.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Module.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Enum.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SecuredTokenTransfer.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SelfAuthorized.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SignatureDecoder.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Singleton.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC1155TokenReceiver.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC721TokenReceiver.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC777TokensRecipient.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC1271Wallet.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC165.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ISignatureValidator.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/ECDSA.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/LibAddress.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSend.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/SafeMath.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/UserOperation.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/test/Button.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StorageSetter.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol create mode 100644 packages/ethers-lib/src/EthersAdapter.ts create mode 100644 packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts create mode 100644 packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts create mode 100644 packages/ethers-lib/src/contracts/SmartWalletProxyFactory/SmartWalletProxyFactoryEthersContract.ts create mode 100644 packages/ethers-lib/src/contracts/contractInstancesEthers.ts create mode 100644 packages/ethers-lib/src/index.ts create mode 100644 packages/ethers-lib/src/types.ts create mode 100644 packages/ethers-lib/src/utils/constants.ts create mode 100644 packages/ethers-lib/src/utils/index.ts create mode 100644 packages/ethers-lib/tsconfig.json diff --git a/package-lock.json b/package-lock.json index e3b0f938a..23feef130 100644 --- a/package-lock.json +++ b/package-lock.json @@ -81,6 +81,308 @@ } } }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@ethereumjs/block": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", + "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", + "requires": { + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "ethereumjs-util": "^7.1.5", + "merkle-patricia-tree": "^4.2.4" + } + }, + "@ethereumjs/blockchain": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", + "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", + "requires": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/ethash": "^1.1.0", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "level-mem": "^5.0.1", + "lru-cache": "^5.1.1", + "semaphore-async-await": "^1.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/ethash": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", + "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", + "requires": { + "@ethereumjs/block": "^3.5.0", + "@types/levelup": "^4.3.0", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.1.1", + "miller-rabin": "^4.0.0" + }, + "dependencies": { + "buffer-xor": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", + "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "requires": { + "safe-buffer": "^5.1.1" + } + } + } + }, + "@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "requires": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/vm": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", + "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", + "requires": { + "@ethereumjs/block": "^3.6.3", + "@ethereumjs/blockchain": "^5.5.3", + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "async-eventemitter": "^0.2.4", + "core-js-pure": "^3.0.1", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "merkle-patricia-tree": "^4.2.4", + "rustbn.js": "~0.2.0" + } + }, + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "requires": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + }, + "@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, "@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -99,6 +401,28 @@ "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", "dev": true }, + "@jridgewell/resolve-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@lerna/add": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.1.6.tgz", @@ -1338,6 +1662,47 @@ } } }, + "@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "requires": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2037,18 +2402,199 @@ "node-gyp-build": "^4.3.0" } }, + "@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "requires": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "requires": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" + }, + "@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "requires": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@solidity-parser/parser": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.2.tgz", + "integrity": "sha512-10cr0s+MtRtqjEw0WFJrm2rwULN30xx7btd/v9cmqME2617/2M5MbHDkFIGIGTa7lwNw4bN9mVGfhlLzrYw8pA==", + "requires": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "@types/abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==" + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "@types/level-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", + "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==" + }, + "@types/levelup": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", + "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", + "requires": { + "@types/abstract-leveldown": "*", + "@types/level-errors": "*", + "@types/node": "*" + } + }, + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + }, "@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", @@ -2061,6 +2607,11 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, + "@types/node": { + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.1.tgz", + "integrity": "sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg==" + }, "@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", @@ -2073,6 +2624,27 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "requires": { + "@types/node": "*" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", @@ -2089,17 +2661,53 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "abstract-leveldown": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, "add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", "dev": true }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "requires": { "debug": "4" } @@ -2119,7 +2727,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -2128,14 +2735,12 @@ "ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "requires": { "type-fest": "^0.21.3" }, @@ -2143,31 +2748,32 @@ "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" } } }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } }, + "antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" + }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2189,11 +2795,16 @@ "readable-stream": "^3.6.0" } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "array-differ": { "version": "3.0.0", @@ -2225,6 +2836,22 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "requires": { + "lodash": "^4.17.14" + } + }, + "async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "requires": { + "async": "^2.4.0" + } + }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -2234,14 +2861,20 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "requires": { + "safe-buffer": "^5.0.1" + } }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "before-after-hook": { "version": "2.2.2", @@ -2293,8 +2926,7 @@ "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "bl": { "version": "4.1.0", @@ -2307,11 +2939,20 @@ "readable-stream": "^3.4.0" } }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2321,26 +2962,69 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "builtins": { "version": "1.0.3", @@ -2354,6 +3038,11 @@ "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", "dev": true }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, "cacache": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", @@ -2384,7 +3073,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -2417,7 +3105,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2433,7 +3120,6 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2454,14 +3140,21 @@ "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, "cli-cursor": { "version": "3.1.0", @@ -2488,7 +3181,6 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -2525,7 +3217,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -2533,8 +3224,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-support": { "version": "1.1.3", @@ -2552,6 +3242,16 @@ "wcwidth": "^1.0.0" } }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" + }, "common-ancestor-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", @@ -2582,8 +3282,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "concat-stream": { "version": "2.0.0", @@ -2730,6 +3429,16 @@ "q": "^1.5.1" } }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, + "core-js-pure": { + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", + "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==" + }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -2749,6 +3458,42 @@ "yaml": "^1.10.0" } }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2776,7 +3521,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -2832,6 +3576,29 @@ "clone": "^1.0.2" } }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + } + } + }, "define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -2872,6 +3639,11 @@ "wrappy": "1" } }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2902,11 +3674,31 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encoding": { "version": "0.1.13", @@ -2918,6 +3710,17 @@ "iconv-lite": "^0.6.2" } }, + "encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "requires": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -2931,7 +3734,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, "requires": { "ansi-colors": "^4.1.1" } @@ -2939,8 +3741,7 @@ "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, "envinfo": { "version": "7.8.1", @@ -2954,6 +3755,14 @@ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "requires": { + "prr": "~1.0.1" + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2966,14 +3775,98 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, "eventemitter3": { "version": "4.0.7", @@ -2981,6 +3874,15 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -3064,7 +3966,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -3088,8 +3989,17 @@ "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + }, + "fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" }, "fs-constants": { "version": "1.0.0", @@ -3120,21 +4030,23 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "optional": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, "gauge": { "version": "4.0.4", @@ -3155,14 +4067,12 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -3337,7 +4247,6 @@ "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3351,7 +4260,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -3388,8 +4296,12 @@ "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" }, "handlebars": { "version": "4.7.7", @@ -3410,11 +4322,203 @@ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true }, + "hardhat": { + "version": "2.9.9", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.9.9.tgz", + "integrity": "sha512-Qv7SXnRc0zq1kGXruNnSKpP3eFccXMR5Qv6GVX9hBIJ5efN0PflKPq92aQ5Cv3jrjJeRevLznWZVz7bttXhVfw==", + "requires": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/blockchain": "^5.5.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/tx": "^3.5.1", + "@ethereumjs/vm": "^5.9.0", + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@sentry/node": "^5.18.1", + "@solidity-parser/parser": "^0.14.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "abort-controller": "^3.0.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^0.1.2", + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^7.1.4", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "lodash": "^4.17.11", + "merkle-patricia-tree": "^4.2.4", + "mnemonist": "^0.38.0", + "mocha": "^9.2.0", + "p-map": "^4.0.0", + "qs": "^6.7.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "slash": "^3.0.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "true-case-path": "^2.2.1", + "tsort": "0.0.1", + "undici": "^5.4.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "requires": { + "locate-path": "^2.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + } + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -3422,14 +4526,12 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-unicode": { "version": "2.0.1", @@ -3437,6 +4539,40 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -3452,6 +4588,25 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } + } + }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -3467,7 +4622,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, "requires": { "agent-base": "6", "debug": "4" @@ -3501,8 +4655,7 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { "version": "5.2.0", @@ -3539,6 +4692,16 @@ } } }, + "immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -3576,8 +4739,7 @@ "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "infer-owner": { "version": "1.0.4", @@ -3589,7 +4751,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -3598,8 +4759,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.8", @@ -3678,6 +4838,14 @@ "through": "^2.3.6" } }, + "io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "requires": { + "fp-ts": "^1.0.0" + } + }, "ip": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", @@ -3694,7 +4862,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -3726,24 +4893,26 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + }, "is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", @@ -3753,8 +4922,7 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-obj": { "version": "2.0.0", @@ -3807,6 +4975,11 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -3825,8 +4998,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { "version": "3.0.1", @@ -3834,6 +5006,11 @@ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3844,7 +5021,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "requires": { "argparse": "^2.0.1" } @@ -3916,12 +5092,37 @@ "integrity": "sha512-dgFenZnMsc1xGNqgdtgnh7DK+Oy352CE3VZLbzcbQpsBs9iI2K3M0IRrdgREZ72eItTjbl0suRyvKRdVQa9GbA==", "dev": true }, + "keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + } + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "requires": { + "graceful-fs": "^4.1.9" + } + }, "lerna": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.1.6.tgz", @@ -3948,6 +5149,85 @@ "npmlog": "^6.0.2" } }, + "level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "requires": { + "buffer": "^5.6.0" + } + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==" + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + } + }, + "level-mem": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", + "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", + "requires": { + "level-packager": "^5.0.3", + "memdown": "^5.0.0" + } + }, + "level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "requires": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "requires": { + "xtend": "^4.0.2" + } + }, + "level-ws": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" + } + }, + "levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "requires": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, "libnpmaccess": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", @@ -4055,8 +5335,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.ismatch": { "version": "4.4.0", @@ -4064,6 +5343,15 @@ "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -4073,6 +5361,16 @@ "yallist": "^4.0.0" } }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" + }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -4091,6 +5389,12 @@ } } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "make-fetch-happen": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", @@ -4121,6 +5425,58 @@ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, + "mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "memdown": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", + "requires": { + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==" + } + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==" + }, "meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", @@ -4241,6 +5597,19 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, + "merkle-patricia-tree": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", + "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", + "requires": { + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" + } + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -4251,6 +5620,22 @@ "picomatch": "^2.3.1" } }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -4263,11 +5648,20 @@ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, "minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4386,9 +5780,171 @@ "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", "dev": true, "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + } + }, + "mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "requires": { + "obliterator": "^2.0.0" + } + }, + "mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + } } }, "modify-values": { @@ -4400,8 +5956,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multimatch": { "version": "5.0.0", @@ -4422,6 +5977,11 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -4505,8 +6065,7 @@ "node-gyp-build": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", - "dev": true + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" }, "nopt": { "version": "5.0.0", @@ -4569,8 +6128,7 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { "version": "6.1.0", @@ -5031,14 +6589,17 @@ "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "requires": { "wrappy": "1" } @@ -5066,8 +6627,7 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" }, "p-finally": { "version": "1.0.0", @@ -5097,7 +6657,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, "requires": { "aggregate-error": "^3.0.0" } @@ -5508,14 +7067,12 @@ "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { "version": "3.1.1", @@ -5526,8 +7083,7 @@ "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-type": { "version": "4.0.0", @@ -5535,11 +7091,22 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pify": { "version": "4.0.1", @@ -5617,6 +7184,11 @@ "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", "dev": true }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -5633,7 +7205,6 @@ "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, "requires": { "side-channel": "^1.0.4" } @@ -5662,6 +7233,35 @@ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -5871,7 +7471,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -5894,7 +7493,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -5912,8 +7510,12 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "resolve": { "version": "1.22.1", @@ -5972,6 +7574,23 @@ "glob": "^7.1.3" } }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "requires": { + "bn.js": "^5.2.0" + } + }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -5987,6 +7606,11 @@ "queue-microtask": "^1.2.2" } }, + "rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" + }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -6007,14 +7631,39 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "dependencies": { + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + } + } + }, + "semaphore-async-await": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", + "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==" }, "semver": { "version": "7.3.4", @@ -6025,12 +7674,39 @@ "lru-cache": "^6.0.0" } }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "requires": { + "randombytes": "^2.1.0" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -6059,7 +7735,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -6075,8 +7750,7 @@ "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "smart-buffer": { "version": "4.2.0", @@ -6105,6 +7779,65 @@ "socks": "^2.6.2" } }, + "solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "requires": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, "sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", @@ -6117,8 +7850,16 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } }, "spdx-correct": { "version": "3.1.1", @@ -6185,6 +7926,26 @@ "minipass": "^3.1.1" } }, + "stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "requires": { + "type-fest": "^0.7.1" + }, + "dependencies": { + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" + } + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, "strict-uri-encode": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", @@ -6195,7 +7956,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6206,7 +7966,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -6215,7 +7974,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -6232,6 +7990,14 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, "strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -6241,6 +8007,11 @@ "min-indent": "^1.0.0" } }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, "strong-log-transformer": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", @@ -6256,7 +8027,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -6334,11 +8104,15 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "requires": { "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, "tr46": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", @@ -6360,6 +8134,40 @@ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, + "true-case-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" + }, + "ts-node": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.2.tgz", + "integrity": "sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, "tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -6378,6 +8186,21 @@ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, + "tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" + }, "type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", @@ -6406,6 +8229,11 @@ "dev": true, "optional": true }, + "undici": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.6.0.tgz", + "integrity": "sha512-mc+8SY1fXubTrdx4CXDkeFFGV8lI3Tq4I/70U1V8Z6g4iscGII0uLO7CPnDt56bXEbvaKwo2T2+VrteWbZiXiQ==" + }, "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -6436,6 +8264,11 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, "upath": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", @@ -6445,14 +8278,12 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache": { "version": "2.3.0", @@ -6460,6 +8291,12 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -6515,7 +8352,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -6535,11 +8371,15 @@ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, + "workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6549,8 +8389,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { "version": "2.4.3", @@ -6660,17 +8499,20 @@ } } }, + "ws": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", + "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "4.0.0", @@ -6704,6 +8546,45 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + } + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/package.json b/package.json index 3cad5e74a..ef151d553 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,10 @@ "author": "Biconomy (https://biconomy.io)", "devDependencies": { "lerna": "^5.1.6", - "nx": "^14.3.6" + "nx": "^14.3.6", + "ts-node": "^10.8.2" + }, + "dependencies": { + "hardhat": "^2.9.9" } } diff --git a/packages/core-types/package-lock.json b/packages/core-types/package-lock.json new file mode 100644 index 000000000..aca026523 --- /dev/null +++ b/packages/core-types/package-lock.json @@ -0,0 +1,2458 @@ +{ + "name": "core-types", + "version": "1.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "requires": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + }, + "@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@gnosis.pm/safe-deployments": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", + "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", + "requires": { + "semver": "^7.3.7" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", + "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/type-utils": "5.30.0", + "@typescript-eslint/utils": "5.30.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", + "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", + "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", + "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.30.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", + "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", + "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", + "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", + "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@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": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node-gyp-build": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "requires": { + "http-https": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "utf-8-validate": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "web3-core": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", + "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", + "requires": { + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-requestmanager": "1.7.4", + "web3-utils": "1.7.4" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + } + } + }, + "web3-core-helpers": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", + "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", + "requires": { + "web3-eth-iban": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-method": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", + "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", + "requires": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-promievent": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", + "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-core-requestmanager": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", + "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", + "requires": { + "util": "^0.12.0", + "web3-core-helpers": "1.7.4", + "web3-providers-http": "1.7.4", + "web3-providers-ipc": "1.7.4", + "web3-providers-ws": "1.7.4" + } + }, + "web3-core-subscriptions": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", + "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4" + } + }, + "web3-eth-iban": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", + "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.7.4" + } + }, + "web3-providers-http": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", + "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", + "requires": { + "web3-core-helpers": "1.7.4", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", + "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.7.4" + } + }, + "web3-providers-ws": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", + "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4", + "websocket": "^1.0.32" + } + }, + "web3-utils": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", + "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + }, + "websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", + "requires": { + "cookiejar": "^2.1.1" + } + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/packages/core-types/src/contracts/SmartWallet.ts b/packages/core-types/src/contracts/SmartWallet.ts index c1ef31252..a8e07259d 100644 --- a/packages/core-types/src/contracts/SmartWallet.ts +++ b/packages/core-types/src/contracts/SmartWallet.ts @@ -1,6 +1,6 @@ import { FeeRefundData, - Transaction, + SmartAccountTrx, SmartAccountTrxData, SmartAccountVersion, TransactionOptions, @@ -12,13 +12,11 @@ export interface SmartWalletContract { getAddress(): string getNonce(): Promise getTransactionHash(smartAccountTrxData: SmartAccountTrxData): Promise - getModulesPaginated(start: string, pageSize: number): Promise - isModuleEnabled(moduleAddress: string): Promise execTransaction( - transaction: Transaction, + transaction: SmartAccountTrx, batchId: number, - feeRefundData: FeeRefundData + feeRefundData: FeeRefundData, + options: TransactionOptions ): Promise encode(methodName: string, params: any): string - estimateGas(methodName: string, params: any[], options: TransactionOptions): Promise } diff --git a/packages/core-types/src/ethereumLibs/EthAdapter.ts b/packages/core-types/src/ethereumLibs/EthAdapter.ts index bbfaadf99..98e418509 100644 --- a/packages/core-types/src/ethereumLibs/EthAdapter.ts +++ b/packages/core-types/src/ethereumLibs/EthAdapter.ts @@ -23,7 +23,6 @@ export interface GetContractProps { } export interface EthAdapter { - isAddress(address: string): boolean getEip3770Address(fullAddress: string): Promise getBalance(address: string): Promise getChainId(): Promise diff --git a/packages/ethers-lib/contracts/Deps_V1_0_0.sol b/packages/ethers-lib/contracts/Deps_V1_0_0.sol new file mode 100644 index 000000000..6b0995394 --- /dev/null +++ b/packages/ethers-lib/contracts/Deps_V1_0_0.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.4.0 <=0.8.15; + +import { WalletFactory } from "../scw-contracts/smart-contract-wallet/WalletFactory.sol"; +import { SmartWallet } from "../scw-contracts/smart-contract-wallet/SmartWallet.sol"; +import { MultiSend } from "../scw-contracts/smart-contract-wallet/libs/MultiSend.sol"; +import { WhitelistModule } from "../scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol"; + +// contract ProxyFactory_SV1_0_0 is WalletFactory() { +// constructor(address _defaultImpl) WalletFactory(_defaultImpl){} +// } +contract SmartWallet_SV1_0_0 is SmartWallet {} +contract MultiSend_SV1_0_0 is MultiSend {} + diff --git a/packages/ethers-lib/hardhat.config.ts b/packages/ethers-lib/hardhat.config.ts new file mode 100644 index 000000000..7d53011c7 --- /dev/null +++ b/packages/ethers-lib/hardhat.config.ts @@ -0,0 +1,63 @@ +import '@nomiclabs/hardhat-ethers' +import '@nomiclabs/hardhat-waffle' +import { HardhatUserConfig } from 'hardhat/types' + +const config: HardhatUserConfig = { + defaultNetwork: "hardhat", + solidity: { + compilers: [ + { + version: "0.8.4", + settings: { + optimizer: { enabled: true, runs: 200 }, + }, + }, + { + version: "0.8.7", + settings: { + optimizer: { enabled: true, runs: 200 }, + }, + }, + { + version: "0.4.23", + settings: { + optimizer: { enabled: true, runs: 200 }, + }, + }, + { + version: "0.6.2", + settings: { + optimizer: { enabled: true, runs: 200 }, + }, + }, + { + version: "0.7.6", + settings: { + optimizer: { enabled: true, runs: 200 }, + }, + }, + { + version: "0.5.12", + settings: { + optimizer: { enabled: true, runs: 200 }, + }, + }, + { + version: "0.6.12", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + ], + }, + paths: { + artifacts: 'artifacts', + sources: 'contracts', + tests: 'tests' + } +} + +export default config diff --git a/packages/ethers-lib/package-lock.json b/packages/ethers-lib/package-lock.json new file mode 100644 index 000000000..7f379b71a --- /dev/null +++ b/packages/ethers-lib/package-lock.json @@ -0,0 +1,12285 @@ +{ + "name": "@gnosis.pm/safe-ethers-lib", + "version": "1.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@apollo/protobufjs": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.2.tgz", + "integrity": "sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ==", + "dev": true, + "optional": true, + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true, + "optional": true + } + } + }, + "@apollo/utils.dropunuseddefinitions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz", + "integrity": "sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg==", + "dev": true, + "optional": true + }, + "@apollo/utils.keyvaluecache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.1.tgz", + "integrity": "sha512-nLgYLomqjVimEzQ4cdvVQkcryi970NDvcRVPfd0OPeXhBfda38WjBq+WhQFk+czSHrmrSp34YHBxpat0EtiowA==", + "dev": true, + "optional": true, + "requires": { + "@apollo/utils.logger": "^1.0.0", + "lru-cache": "^7.10.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", + "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "dev": true, + "optional": true + } + } + }, + "@apollo/utils.logger": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-1.0.0.tgz", + "integrity": "sha512-dx9XrjyisD2pOa+KsB5RcDbWIAdgC91gJfeyLCgy0ctJMjQe7yZK5kdWaWlaOoCeX0z6YI9iYlg7vMPyMpQF3Q==", + "dev": true, + "optional": true + }, + "@apollo/utils.printwithreducedwhitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz", + "integrity": "sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q==", + "dev": true, + "optional": true + }, + "@apollo/utils.removealiases": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz", + "integrity": "sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A==", + "dev": true, + "optional": true + }, + "@apollo/utils.sortast": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz", + "integrity": "sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA==", + "dev": true, + "optional": true, + "requires": { + "lodash.sortby": "^4.7.0" + } + }, + "@apollo/utils.stripsensitiveliterals": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz", + "integrity": "sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w==", + "dev": true, + "optional": true + }, + "@apollo/utils.usagereporting": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.0.tgz", + "integrity": "sha512-5PL7hJMkTPmdo3oxPtigRrIyPxDk/ddrUryHPDaezL1lSFExpNzsDd2f1j0XJoHOg350GRd3LyD64caLA2PU1w==", + "dev": true, + "optional": true, + "requires": { + "@apollo/utils.dropunuseddefinitions": "^1.1.0", + "@apollo/utils.printwithreducedwhitespace": "^1.1.0", + "@apollo/utils.removealiases": "1.0.0", + "@apollo/utils.sortast": "^1.1.0", + "@apollo/utils.stripsensitiveliterals": "^1.2.0", + "apollo-reporting-protobuf": "^3.3.1" + } + }, + "@apollographql/apollo-tools": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz", + "integrity": "sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==", + "dev": true, + "optional": true + }, + "@apollographql/graphql-playground-html": { + "version": "1.6.29", + "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz", + "integrity": "sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==", + "dev": true, + "optional": true, + "requires": { + "xss": "^1.0.8" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", + "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", + "dev": true + }, + "@babel/generator": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", + "dev": true, + "requires": { + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", + "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", + "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", + "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", + "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==", + "dev": true + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", + "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", + "dev": true + }, + "@babel/plugin-transform-runtime": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz", + "integrity": "sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-polyfill-corejs2": "^0.3.1", + "babel-plugin-polyfill-corejs3": "^0.5.2", + "babel-plugin-polyfill-regenerator": "^0.3.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/runtime": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", + "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/traverse": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", + "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", + "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "@ethereumjs/block": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", + "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "ethereumjs-util": "^7.1.5", + "merkle-patricia-tree": "^4.2.4" + }, + "dependencies": { + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "level-ws": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" + } + }, + "merkle-patricia-tree": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", + "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", + "dev": true, + "requires": { + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" + } + } + } + }, + "@ethereumjs/blockchain": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", + "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/ethash": "^1.1.0", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "level-mem": "^5.0.1", + "lru-cache": "^5.1.1", + "semaphore-async-await": "^1.5.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + }, + "dependencies": { + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + } + } + }, + "@ethereumjs/ethash": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", + "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.5.0", + "@types/levelup": "^4.3.0", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.1.1", + "miller-rabin": "^4.0.0" + }, + "dependencies": { + "buffer-xor": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", + "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + } + } + }, + "@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + }, + "dependencies": { + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + } + } + }, + "@ethereumjs/vm": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", + "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.3", + "@ethereumjs/blockchain": "^5.5.3", + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "async-eventemitter": "^0.2.4", + "core-js-pure": "^3.0.1", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "merkle-patricia-tree": "^4.2.4", + "rustbn.js": "~0.2.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "level-ws": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" + } + }, + "merkle-patricia-tree": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", + "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", + "dev": true, + "requires": { + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "requires": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + }, + "@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@gnosis.pm/safe-contracts-v1.2.0": { + "version": "npm:@gnosis.pm/safe-contracts@1.2.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-contracts/-/safe-contracts-1.2.0.tgz", + "integrity": "sha512-lcpZodqztDgMICB0kAc8aJdQePwCaLJnbeNjgVTfLAo3fBckVRV06VHXg5IsZ26qLA4JfZ690Cb7TsDVE9ZF3w==", + "dev": true, + "requires": { + "@truffle/hdwallet-provider": "^1.0.0", + "dotenv": "^8.0.0", + "openzeppelin-solidity": "^2.0.0", + "shelljs": "^0.8.3", + "solc": "0.5.17", + "truffle": "^5.1.21" + } + }, + "@gnosis.pm/safe-contracts-v1.3.0": { + "version": "npm:@gnosis.pm/safe-contracts@1.3.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-contracts/-/safe-contracts-1.3.0.tgz", + "integrity": "sha512-1p+1HwGvxGUVzVkFjNzglwHrLNA67U/axP0Ct85FzzH8yhGJb4t9jDjPYocVMzLorDoWAfKicGy1akPY9jXRVw==", + "dev": true + }, + "@gnosis.pm/safe-core-sdk-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.1.0.tgz", + "integrity": "sha512-VvEqWCliA6KXwt9N4YTzN5JcqnhLxLjUTU7trpQqQ7wU9OQcF+Kdrer86wDOF5lYZVE24zudw1s4gW3dxUkm6A==", + "requires": { + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/contracts": "^5.6.0", + "@gnosis.pm/safe-deployments": "^1.12.0", + "web3-core": "^1.7.1" + } + }, + "@gnosis.pm/safe-core-sdk-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.1.0.tgz", + "integrity": "sha512-ZH1Ps3qsreczKHHfBb34dj55LDTiU7WAeKD7jgKnhiloGWRniLv+cbBfwFQNAezoyANvgyI5ky64wgwm1bm1YA==", + "requires": { + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "web3-utils": "^1.7.1" + } + }, + "@gnosis.pm/safe-deployments": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", + "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", + "requires": { + "semver": "^7.3.7" + } + }, + "@graphql-tools/batch-execute": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.0.tgz", + "integrity": "sha512-S9/76X4uYIbVlJyRzXhCBbTJvVD0VvaWNqGiKgkITxlq4aBsTOHVuE84OSi3E1QKP3PTiJYrgMIn220iFOkyQw==", + "dev": true, + "optional": true, + "requires": { + "@graphql-tools/utils": "8.8.0", + "dataloader": "2.1.0", + "tslib": "^2.4.0", + "value-or-promise": "1.0.11" + } + }, + "@graphql-tools/delegate": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-8.8.0.tgz", + "integrity": "sha512-dbhfOI8rQXPcowXrbwHLOBY9oGi7qxtlrXF4RuRXmjqGTs2AgogdOE3Ep1+6wFD7qYTuFmHXZ8Cl0PmhoZUgrg==", + "dev": true, + "optional": true, + "requires": { + "@graphql-tools/batch-execute": "8.5.0", + "@graphql-tools/schema": "8.5.0", + "@graphql-tools/utils": "8.8.0", + "dataloader": "2.1.0", + "tslib": "~2.4.0", + "value-or-promise": "1.0.11" + } + }, + "@graphql-tools/merge": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.0.tgz", + "integrity": "sha512-xRa7RAQok/0DD2YnjuqikMrr7dUAxTpdGtZ7BkvUUGhYs3B3p7reCAfvOVr1DJAqVToP7hdlMk+S5+Ylk+AaqA==", + "dev": true, + "optional": true, + "requires": { + "@graphql-tools/utils": "8.8.0", + "tslib": "^2.4.0" + } + }, + "@graphql-tools/mock": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.7.0.tgz", + "integrity": "sha512-K/hqP442mXAvW36v/3TmqFpNzRw14P86xlsJZod88OXwpDfb97X09z1QsaMcvSe8E7ijcKWLlTRk15/vDQSL2Q==", + "dev": true, + "optional": true, + "requires": { + "@graphql-tools/schema": "8.5.0", + "@graphql-tools/utils": "8.8.0", + "fast-json-stable-stringify": "^2.1.0", + "tslib": "^2.4.0" + } + }, + "@graphql-tools/schema": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.0.tgz", + "integrity": "sha512-VeFtKjM3SA9/hCJJfr95aEdC3G0xIKM9z0Qdz4i+eC1g2fdZYnfWFt2ucW4IME+2TDd0enHlKzaV0qk2SLVUww==", + "dev": true, + "optional": true, + "requires": { + "@graphql-tools/merge": "8.3.0", + "@graphql-tools/utils": "8.8.0", + "tslib": "^2.4.0", + "value-or-promise": "1.0.11" + } + }, + "@graphql-tools/utils": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.8.0.tgz", + "integrity": "sha512-KJrtx05uSM/cPYFdTnGAS1doL5bftJLAiFCDMZ8Vkifztz3BFn3gpFiy/o4wDtM8s39G46mxmt2Km/RmeltfGw==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@josephg/resolvable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz", + "integrity": "sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==", + "dev": true, + "optional": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dev": true, + "requires": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nomiclabs/hardhat-ethers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.5.tgz", + "integrity": "sha512-A2gZAGB6kUvLx+kzM92HKuUF33F1FSe90L0TmkXkT2Hh0OKRpvWZURUSU2nghD2yC4DzfEZ3DftfeHGvZ2JTUw==", + "dev": true + }, + "@nomiclabs/hardhat-waffle": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", + "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", + "dev": true, + "requires": { + "@types/sinon-chai": "^3.2.3", + "@types/web3": "1.0.19" + } + }, + "@openzeppelin/contracts": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.6.0.tgz", + "integrity": "sha512-8vi4d50NNya/bQqCmaVzvHNmwHvS0OBKb7HNtuNwEE3scXWrP31fKQoGxNMT+KbzmrNZzatE3QK5p2gFONI/hg==" + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "dev": true, + "optional": true + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "dev": true, + "optional": true + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "dev": true, + "optional": true + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "dev": true, + "optional": true + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dev": true, + "optional": true, + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "dev": true, + "optional": true + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "dev": true, + "optional": true + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "dev": true, + "optional": true + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "dev": true, + "optional": true + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "dev": true, + "optional": true + }, + "@redux-saga/core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.1.3.tgz", + "integrity": "sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.6.3", + "@redux-saga/deferred": "^1.1.2", + "@redux-saga/delay-p": "^1.1.2", + "@redux-saga/is": "^1.1.2", + "@redux-saga/symbols": "^1.1.2", + "@redux-saga/types": "^1.1.0", + "redux": "^4.0.4", + "typescript-tuple": "^2.2.1" + }, + "dependencies": { + "redux": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", + "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.9.2" + } + } + } + }, + "@redux-saga/deferred": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/deferred/-/deferred-1.1.2.tgz", + "integrity": "sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ==", + "dev": true + }, + "@redux-saga/delay-p": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/delay-p/-/delay-p-1.1.2.tgz", + "integrity": "sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g==", + "dev": true, + "requires": { + "@redux-saga/symbols": "^1.1.2" + } + }, + "@redux-saga/is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/is/-/is-1.1.2.tgz", + "integrity": "sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w==", + "dev": true, + "requires": { + "@redux-saga/symbols": "^1.1.2", + "@redux-saga/types": "^1.1.0" + } + }, + "@redux-saga/symbols": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/symbols/-/symbols-1.1.2.tgz", + "integrity": "sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ==", + "dev": true + }, + "@redux-saga/types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@redux-saga/types/-/types-1.1.0.tgz", + "integrity": "sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg==", + "dev": true + }, + "@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "requires": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "requires": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "dependencies": { + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true + }, + "@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "requires": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@solidity-parser/parser": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.2.tgz", + "integrity": "sha512-10cr0s+MtRtqjEw0WFJrm2rwULN30xx7btd/v9cmqME2617/2M5MbHDkFIGIGTa7lwNw4bN9mVGfhlLzrYw8pA==", + "dev": true, + "requires": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@truffle/abi-utils": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.2.14.tgz", + "integrity": "sha512-2eHoWSFVutt+xAN8+g2x6N3+TM0AMUmGS4iW7KJNfxDsGdMBNe+qqUrDKM0NnA16yxqk95yQztO5EmWPiXw3+Q==", + "dev": true, + "requires": { + "change-case": "3.0.2", + "faker": "5.5.3", + "fast-check": "^2.12.1" + } + }, + "@truffle/code-utils": { + "version": "1.2.34", + "resolved": "https://registry.npmjs.org/@truffle/code-utils/-/code-utils-1.2.34.tgz", + "integrity": "sha512-Ie+PTdJIvK90voInSvn7WEdAsXd1VUw0TsX2225OMGVyYRWiQdX0K6Vfkib7RSZvdUEaURFAaHo5r57l2RacWg==", + "dev": true, + "requires": { + "cbor": "^5.1.0" + } + }, + "@truffle/codec": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.13.2.tgz", + "integrity": "sha512-iViBnh6WV2BKaLboFC3xd9FGgC2Iybx4CHI+A5PPPqFkjnEycigdN8wnV2eqic9ptE1Ix7wsj9urZitnsnLhCA==", + "dev": true, + "requires": { + "@truffle/abi-utils": "^0.2.14", + "@truffle/compile-common": "^0.7.32", + "big.js": "^6.0.3", + "bn.js": "^5.1.3", + "cbor": "^5.1.0", + "debug": "^4.3.1", + "lodash": "^4.17.21", + "semver": "^7.3.4", + "utf8": "^3.0.0", + "web3-utils": "1.7.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@truffle/compile-common": { + "version": "0.7.32", + "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.7.32.tgz", + "integrity": "sha512-SzIxwwQj8mJwoa7/kjkAslGenB4NejhmRHmdWdxNS5fqg2XqKhmSJcjir5qFjjvNzjcFZGecLg4EOm1Hj6letw==", + "dev": true, + "requires": { + "@truffle/error": "^0.1.0", + "colors": "1.4.0" + } + }, + "@truffle/config": { + "version": "1.3.31", + "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.31.tgz", + "integrity": "sha512-RTXtRiFrzUT1WVmP8KdBl/DJ2b9GV77gOYSZ3NILuSrEL8IzWq57F1G/9rg5jq1v8b5JLDd7db5Yitn53ipBdA==", + "dev": true, + "optional": true, + "requires": { + "@truffle/error": "^0.1.0", + "@truffle/events": "^0.1.8", + "@truffle/provider": "^0.2.56", + "conf": "^10.0.2", + "find-up": "^2.1.0", + "lodash": "^4.17.21", + "original-require": "^1.0.1" + } + }, + "@truffle/dashboard-message-bus-client": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.1.tgz", + "integrity": "sha512-tLcLxfnk8fa8m6gnnIiuIkJXMwOnm1gX60hXis091bEokJaR1/RYEdDQsFxy8/XkJmOOEfQ0NRD5ZPXn0KYvjA==", + "dev": true, + "optional": true, + "requires": { + "@truffle/dashboard-message-bus-common": "^0.1.1", + "@truffle/promise-tracker": "^0.1.0", + "axios": "^0.24.0", + "debug": "^4.3.1", + "delay": "^5.0.0", + "isomorphic-ws": "^4.0.1", + "tiny-typed-emitter": "^2.1.0", + "ws": "^7.2.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "optional": true + }, + "ws": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", + "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", + "dev": true, + "optional": true + } + } + }, + "@truffle/dashboard-message-bus-common": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-common/-/dashboard-message-bus-common-0.1.1.tgz", + "integrity": "sha512-DqrP2IQeao2u3en/csj9MwmEk7KKgLfvyHMwxrU6NyFXQ0Rs6F0AycpGTDivnoowVxqJohA+aut4IYHQuvwH8A==", + "dev": true, + "optional": true + }, + "@truffle/db": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@truffle/db/-/db-1.0.12.tgz", + "integrity": "sha512-/7T3kHsMgih/QjtcTInllyo5W9OmAPCA+faHHGLgm0G76gML738NOwz3T/JZhjMKnQabYulZeWid0sjUlzlIPg==", + "dev": true, + "optional": true, + "requires": { + "@graphql-tools/delegate": "^8.4.3", + "@graphql-tools/schema": "^8.3.1", + "@truffle/abi-utils": "^0.2.14", + "@truffle/code-utils": "^1.2.34", + "@truffle/config": "^1.3.31", + "abstract-leveldown": "^7.2.0", + "apollo-server": "^3.6.3", + "debug": "^4.3.1", + "fs-extra": "^9.1.0", + "graphql": "^15.3.0", + "graphql-tag": "^2.11.0", + "json-stable-stringify": "^1.0.1", + "pascal-case": "^2.0.1", + "pluralize": "^8.0.0", + "pouchdb": "7.3.0", + "pouchdb-adapter-memory": "^7.1.1", + "pouchdb-adapter-node-websql": "^7.0.0", + "pouchdb-debug": "^7.1.1", + "pouchdb-find": "^7.0.0", + "web3-utils": "1.7.4" + }, + "dependencies": { + "abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^6.0.3", + "catering": "^2.0.0", + "is-buffer": "^2.0.5", + "level-concat-iterator": "^3.0.0", + "level-supports": "^2.0.1", + "queue-microtask": "^1.2.3" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "optional": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.1.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "optional": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "optional": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "optional": true + } + } + }, + "@truffle/db-loader": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.1.22.tgz", + "integrity": "sha512-n1ljxscIaci6r0qbJMw34ng2IQGK3lXMoowO5ohP9Gwaqxv+atNLsV7s/6YVmGgsLV8cDNIEZoKKnRh/EDJO4g==", + "dev": true, + "requires": { + "@truffle/db": "^1.0.12" + } + }, + "@truffle/debugger": { + "version": "10.0.16", + "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-10.0.16.tgz", + "integrity": "sha512-poXnJ+fLA2oTMHBhfuML4o1bMtersDVWypATi+YXxCvebVMUQMgOv1baVYDl0pK/J3FaLQSI1W7x8B6415f7cQ==", + "dev": true, + "requires": { + "@truffle/abi-utils": "^0.2.14", + "@truffle/codec": "^0.13.2", + "@truffle/source-map-utils": "^1.3.88", + "bn.js": "^5.1.3", + "debug": "^4.3.1", + "json-pointer": "^0.6.1", + "json-stable-stringify": "^1.0.1", + "lodash": "^4.17.21", + "redux": "^3.7.2", + "redux-saga": "1.0.0", + "reselect-tree": "^1.3.7", + "semver": "^7.3.4", + "web3": "1.7.4", + "web3-eth-abi": "1.7.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@truffle/error": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.1.0.tgz", + "integrity": "sha512-RbUfp5VreNhsa2Q4YbBjz18rOQI909pG32bghl1hulO7IpvcqTS+C3Ge5cNbiWQ1WGzy1wIeKLW0tmQtHFB7qg==", + "dev": true + }, + "@truffle/events": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@truffle/events/-/events-0.1.8.tgz", + "integrity": "sha512-oK+nnV9ToCk1qKW01l+bojV61sCj1zljcS5+xBZ9Dteb52mQ9tpsy6xuQXVcsHAhZOQ4Gz2S3bTrlvjU4AyeCQ==", + "dev": true, + "optional": true, + "requires": { + "@truffle/dashboard-message-bus-client": "^0.1.1", + "@truffle/spinners": "^0.2.0", + "debug": "^4.3.1", + "emittery": "^0.4.1", + "web3-utils": "1.7.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "optional": true + } + } + }, + "@truffle/hdwallet-provider": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-1.7.0.tgz", + "integrity": "sha512-nT7BPJJ2jPCLJc5uZdVtRnRMny5he5d3kO9Hi80ZSqe5xlnK905grBptM/+CwOfbeqHKQirI1btwm6r3wIBM8A==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.4.0", + "@ethereumjs/tx": "^3.3.0", + "@trufflesuite/web3-provider-engine": "15.0.14", + "eth-sig-util": "^3.0.1", + "ethereum-cryptography": "^0.1.3", + "ethereum-protocol": "^1.0.1", + "ethereumjs-util": "^6.1.0", + "ethereumjs-wallet": "^1.0.1" + } + }, + "@truffle/interface-adapter": { + "version": "0.5.18", + "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.18.tgz", + "integrity": "sha512-OPrz7bf+TDjZGruXzm6d08SpFNGERctf4O9uC6IJjNmjvKtdEYcLY3DTXOZT6I9PmrViCJ+dC5VlZD5IaamQnQ==", + "dev": true, + "optional": true, + "requires": { + "bn.js": "^5.1.3", + "ethers": "^4.0.32", + "web3": "1.7.4" + } + }, + "@truffle/promise-tracker": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.0.tgz", + "integrity": "sha512-XH9gf7Vfgn4iPnERpJJPFSob85LXeKg8tkoUZku8JdAYUNIjVztLVJQwh54exsz7Npe6RPh/Hcj8Tiw65uooiA==", + "dev": true, + "optional": true + }, + "@truffle/provider": { + "version": "0.2.56", + "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.56.tgz", + "integrity": "sha512-9mz03psTeWkL45IrF3NUTiKO46HUi+9Lkco3rVjqzUQ+5rAhld0TwOljKbLvVKbDFtHl5LVuC+H4uQP8fpoXSg==", + "dev": true, + "optional": true, + "requires": { + "@truffle/error": "^0.1.0", + "@truffle/interface-adapter": "^0.5.18", + "debug": "^4.3.1", + "web3": "1.7.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "optional": true + } + } + }, + "@truffle/source-map-utils": { + "version": "1.3.88", + "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.88.tgz", + "integrity": "sha512-8PMvCR+l2TpyEO5CV5uA6w87w7Nqqhd5zM0ukwYhfrTAmBqNNPk+pWYAjaL7fVThDeaOkVy+aoOo0rUW5SzAfw==", + "dev": true, + "requires": { + "@truffle/code-utils": "^1.2.34", + "@truffle/codec": "^0.13.2", + "debug": "^4.3.1", + "json-pointer": "^0.6.1", + "node-interval-tree": "^1.3.3", + "web3-utils": "1.7.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@truffle/spinners": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@truffle/spinners/-/spinners-0.2.0.tgz", + "integrity": "sha512-rX0qA7GRDzN2ILClUIifMrVzF9EMR9b23CNasJkBgLBvqp1xKwdMbHG3IwUTYelGQtnGQmZ4UZQsBdDb6wf1Tw==", + "dev": true, + "optional": true, + "requires": { + "@trufflesuite/spinnies": "^0.1.0" + } + }, + "@trufflesuite/eth-json-rpc-filters": { + "version": "4.1.2-1", + "resolved": "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-filters/-/eth-json-rpc-filters-4.1.2-1.tgz", + "integrity": "sha512-/MChvC5dw2ck9NU1cZmdovCz2VKbOeIyR4tcxDvA5sT+NaL0rA2/R5U0yI7zsbo1zD+pgqav77rQHTzpUdDNJQ==", + "dev": true, + "requires": { + "@trufflesuite/eth-json-rpc-middleware": "^4.4.2-0", + "await-semaphore": "^0.1.3", + "eth-query": "^2.1.2", + "json-rpc-engine": "^5.1.3", + "lodash.flatmap": "^4.5.0", + "safe-event-emitter": "^1.0.1" + } + }, + "@trufflesuite/eth-json-rpc-infura": { + "version": "4.0.3-0", + "resolved": "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-infura/-/eth-json-rpc-infura-4.0.3-0.tgz", + "integrity": "sha512-xaUanOmo0YLqRsL0SfXpFienhdw5bpQ1WEXxMTRi57az4lwpZBv4tFUDvcerdwJrxX9wQqNmgUgd1BrR01dumw==", + "dev": true, + "requires": { + "@trufflesuite/eth-json-rpc-middleware": "^4.4.2-1", + "cross-fetch": "^2.1.1", + "eth-json-rpc-errors": "^1.0.1", + "json-rpc-engine": "^5.1.3" + }, + "dependencies": { + "eth-json-rpc-errors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz", + "integrity": "sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg==", + "dev": true, + "requires": { + "fast-safe-stringify": "^2.0.6" + } + } + } + }, + "@trufflesuite/eth-json-rpc-middleware": { + "version": "4.4.2-1", + "resolved": "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.2-1.tgz", + "integrity": "sha512-iEy9H8ja7/8aYES5HfrepGBKU9n/Y4OabBJEklVd/zIBlhCCBAWBqkIZgXt11nBXO/rYAeKwYuE3puH3ByYnLA==", + "dev": true, + "requires": { + "@trufflesuite/eth-sig-util": "^1.4.2", + "btoa": "^1.2.1", + "clone": "^2.1.1", + "eth-json-rpc-errors": "^1.0.1", + "eth-query": "^2.1.2", + "ethereumjs-block": "^1.6.0", + "ethereumjs-tx": "^1.3.7", + "ethereumjs-util": "^5.1.2", + "ethereumjs-vm": "^2.6.0", + "fetch-ponyfill": "^4.0.0", + "json-rpc-engine": "^5.1.3", + "json-stable-stringify": "^1.0.1", + "pify": "^3.0.0", + "safe-event-emitter": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "eth-json-rpc-errors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz", + "integrity": "sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg==", + "dev": true, + "requires": { + "fast-safe-stringify": "^2.0.6" + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "@trufflesuite/eth-sig-util": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@trufflesuite/eth-sig-util/-/eth-sig-util-1.4.2.tgz", + "integrity": "sha512-+GyfN6b0LNW77hbQlH3ufZ/1eCON7mMrGym6tdYf7xiNw9Vv3jBO72bmmos1EId2NgBvPMhmYYm6DSLQFTmzrA==", + "dev": true, + "requires": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^5.1.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "@trufflesuite/spinnies": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@trufflesuite/spinnies/-/spinnies-0.1.0.tgz", + "integrity": "sha512-22rVi7rECyAg9vsopa9jR84xQ9kSbjRxCYI9SPbHx4jjfRQODDzmVZtXLobUuXEQZYLgP1pXBtgY5kReb72E2g==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.2", + "cli-cursor": "^3.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@trufflesuite/web3-provider-engine": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@trufflesuite/web3-provider-engine/-/web3-provider-engine-15.0.14.tgz", + "integrity": "sha512-6/LoWvNMxYf0oaYzJldK2a9AdnkAdIeJhHW4nuUBAeO29eK9xezEaEYQ0ph1QRTaICxGxvn+1Azp4u8bQ8NEZw==", + "dev": true, + "requires": { + "@ethereumjs/tx": "^3.3.0", + "@trufflesuite/eth-json-rpc-filters": "^4.1.2-1", + "@trufflesuite/eth-json-rpc-infura": "^4.0.3-0", + "@trufflesuite/eth-json-rpc-middleware": "^4.4.2-1", + "@trufflesuite/eth-sig-util": "^1.4.2", + "async": "^2.5.0", + "backoff": "^2.5.0", + "clone": "^2.0.0", + "cross-fetch": "^2.1.0", + "eth-block-tracker": "^4.4.2", + "eth-json-rpc-errors": "^2.0.2", + "ethereumjs-block": "^1.2.2", + "ethereumjs-util": "^5.1.5", + "ethereumjs-vm": "^2.3.4", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "readable-stream": "^2.2.9", + "request": "^2.85.0", + "semaphore": "^1.0.3", + "ws": "^5.1.1", + "xhr": "^2.2.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + } + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "@typechain/ethers-v5": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz", + "integrity": "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + } + }, + "@types/abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "dev": true + }, + "@types/accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" + } + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "optional": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "dev": true + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true, + "optional": true + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "optional": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.29", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", + "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/level-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", + "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", + "dev": true + }, + "@types/levelup": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", + "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", + "dev": true, + "requires": { + "@types/abstract-leveldown": "*", + "@types/level-errors": "*", + "@types/node": "*" + } + }, + "@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "dev": true, + "optional": true + }, + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true, + "optional": true + }, + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true + }, + "@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" + } + } + }, + "@types/prettier": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", + "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true, + "optional": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true, + "optional": true + }, + "@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" + } + } + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "optional": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/sinon": { + "version": "10.0.12", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.12.tgz", + "integrity": "sha512-uWf4QJ4oky/GckJ1MYQxU52cgVDcXwBhDkpvLbi4EKoLPqLE4MOH6T/ttM33l3hi0oZ882G6oIzWv/oupRYSxQ==", + "dev": true, + "requires": { + "@types/sinonjs__fake-timers": "*" + } + }, + "@types/sinon-chai": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, + "@types/underscore": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", + "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", + "dev": true + }, + "@types/web3": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", + "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", + "dev": true, + "requires": { + "@types/bn.js": "*", + "@types/underscore": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", + "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/type-utils": "5.30.0", + "@typescript-eslint/utils": "5.30.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", + "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", + "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", + "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.30.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", + "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", + "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", + "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "optional": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "abstract-leveldown": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", + "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "dev": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true + }, + "aes-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "optional": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "optional": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "optional": true + } + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "apollo-datasource": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-3.3.2.tgz", + "integrity": "sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg==", + "dev": true, + "optional": true, + "requires": { + "@apollo/utils.keyvaluecache": "^1.0.1", + "apollo-server-env": "^4.2.1" + } + }, + "apollo-reporting-protobuf": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.3.1.tgz", + "integrity": "sha512-tyvj3Vj71TCh6c8PtdHOLgHHBSJ05DF/A/Po3q8yfHTBkOPcOJZE/GGN/PT/pwKg7HHxKcAeHDw7+xciVvGx0w==", + "dev": true, + "optional": true, + "requires": { + "@apollo/protobufjs": "1.2.2" + } + }, + "apollo-server": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.9.0.tgz", + "integrity": "sha512-g80gXDuK8fl2W0fQF/hEyeoO9AU+sO2gBzeJAYUyGLotYc+oL/Y3mTRk5GB8C7cXUXCg5uvWbUj8va0E5UZE7w==", + "dev": true, + "optional": true, + "requires": { + "@types/express": "4.17.13", + "apollo-server-core": "^3.9.0", + "apollo-server-express": "^3.9.0", + "express": "^4.17.1" + } + }, + "apollo-server-core": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.9.0.tgz", + "integrity": "sha512-WS54C33cTriDaBIcj7ijWv/fgeJICcrQKlP1Cn6pnZp/eumpMraezLeJ3gFWAXprOuR2E3fZe64lNlup0fMu8w==", + "dev": true, + "optional": true, + "requires": { + "@apollo/utils.keyvaluecache": "^1.0.1", + "@apollo/utils.logger": "^1.0.0", + "@apollo/utils.usagereporting": "^1.0.0", + "@apollographql/apollo-tools": "^0.5.3", + "@apollographql/graphql-playground-html": "1.6.29", + "@graphql-tools/mock": "^8.1.2", + "@graphql-tools/schema": "^8.0.0", + "@josephg/resolvable": "^1.0.0", + "apollo-datasource": "^3.3.2", + "apollo-reporting-protobuf": "^3.3.1", + "apollo-server-env": "^4.2.1", + "apollo-server-errors": "^3.3.1", + "apollo-server-plugin-base": "^3.6.1", + "apollo-server-types": "^3.6.1", + "async-retry": "^1.2.1", + "fast-json-stable-stringify": "^2.1.0", + "graphql-tag": "^2.11.0", + "loglevel": "^1.6.8", + "lru-cache": "^6.0.0", + "sha.js": "^2.4.11", + "uuid": "^8.0.0", + "whatwg-mimetype": "^3.0.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true + } + } + }, + "apollo-server-env": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-4.2.1.tgz", + "integrity": "sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g==", + "dev": true, + "optional": true, + "requires": { + "node-fetch": "^2.6.7" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "optional": true, + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, + "apollo-server-errors": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz", + "integrity": "sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==", + "dev": true, + "optional": true + }, + "apollo-server-express": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.9.0.tgz", + "integrity": "sha512-scSeHy9iB7W3OiF3uLQEzad9Jm9tEfDF8ACsJb2P+xX69uqg6zizsrQvj3qRhazCO7FKMcMu9zQFR0hy7zKbUA==", + "dev": true, + "optional": true, + "requires": { + "@types/accepts": "^1.3.5", + "@types/body-parser": "1.19.2", + "@types/cors": "2.8.12", + "@types/express": "4.17.13", + "@types/express-serve-static-core": "4.17.29", + "accepts": "^1.3.5", + "apollo-server-core": "^3.9.0", + "apollo-server-types": "^3.6.1", + "body-parser": "^1.19.0", + "cors": "^2.8.5", + "parseurl": "^1.3.3" + } + }, + "apollo-server-plugin-base": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.6.1.tgz", + "integrity": "sha512-bFpxzWO0LTTtSAkGVBeaAtnQXJ5ZCi8eaLN/eMSju8RByifmF3Kr6gAqcOZhOH/geQEt3Y6G8n3bR0eHTGxljQ==", + "dev": true, + "optional": true, + "requires": { + "apollo-server-types": "^3.6.1" + } + }, + "apollo-server-types": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.6.1.tgz", + "integrity": "sha512-XOPlBlRdwP00PrG03OffGGWuzyei+J9t1rAnvyHsSdP0JCgQWigHJfvL1N9Bhgi4UTjl9JadKOJh1znLNlqIFQ==", + "dev": true, + "optional": true, + "requires": { + "@apollo/utils.keyvaluecache": "^1.0.1", + "@apollo/utils.logger": "^1.0.0", + "apollo-reporting-protobuf": "^3.3.1", + "apollo-server-env": "^4.2.1" + } + }, + "app-module-path": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "optional": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "argsarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", + "integrity": "sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg==", + "dev": true, + "optional": true + }, + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "dev": true, + "requires": { + "async": "^2.4.0" + } + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, + "optional": true, + "requires": { + "retry": "0.13.1" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "optional": true + }, + "atomically": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", + "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", + "dev": true, + "optional": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "await-semaphore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/await-semaphore/-/await-semaphore-0.1.3.tgz", + "integrity": "sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "dev": true, + "optional": true, + "requires": { + "follow-redirects": "^1.14.4" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, + "backoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", + "integrity": "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==", + "dev": true, + "requires": { + "precond": "0.2" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.0.tgz", + "integrity": "sha512-paIKvJiAaOYdLt6MfnvxkDo64lTOV257XYJyX3oJnJQocIclUn+48k6ZerH/c5FxWE6DGJu1TKDYis7tqHg9kg==", + "dev": true + }, + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "browserslist": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", + "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001359", + "electron-to-chromium": "^1.4.172", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.4" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "dev": true + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001363", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001363.tgz", + "integrity": "sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "catering": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", + "dev": true, + "optional": true + }, + "cbor": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", + "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", + "dev": true, + "requires": { + "bignumber.js": "^9.0.1", + "nofilter": "^1.0.4" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "change-case": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", + "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", + "dev": true, + "requires": { + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, + "checkpoint-store": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", + "integrity": "sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==", + "dev": true, + "requires": { + "functional-red-black-tree": "^1.0.1" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cids": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "dependencies": { + "multicodec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", + "dev": true, + "requires": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + } + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-is": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "optional": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "dev": true, + "optional": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "dev": true, + "optional": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "requires": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "conf": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/conf/-/conf-10.1.2.tgz", + "integrity": "sha512-o9Fv1Mv+6A0JpoayQ8JleNp3hhkbOJP/Re/Q+QqxMPHPkABVsRjQGWZn9A5GcqLiTNC6d89p2PB5ZhHVDSMwyg==", + "dev": true, + "optional": true, + "requires": { + "ajv": "^8.6.3", + "ajv-formats": "^2.1.1", + "atomically": "^1.7.0", + "debounce-fn": "^4.0.0", + "dot-prop": "^6.0.1", + "env-paths": "^2.2.1", + "json-schema-typed": "^7.0.3", + "onetime": "^5.1.2", + "pkg-up": "^3.1.0", + "semver": "^7.3.5" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "optional": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "optional": true + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true, + "optional": true + }, + "constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", + "dev": true, + "requires": { + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-hash": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", + "dev": true, + "requires": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, + "core-js-compat": { + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.3.tgz", + "integrity": "sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw==", + "dev": true, + "requires": { + "browserslist": "^4.21.0", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-js-pure": { + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", + "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-fetch": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", + "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", + "dev": true, + "requires": { + "node-fetch": "^2.6.7", + "whatwg-fetch": "^2.0.4" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", + "dev": true, + "optional": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dataloader": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.1.0.tgz", + "integrity": "sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==", + "dev": true, + "optional": true + }, + "debounce-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", + "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", + "dev": true, + "optional": true, + "requires": { + "mimic-fn": "^3.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "dev": true + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "deferred-leveldown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", + "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", + "dev": true, + "requires": { + "abstract-leveldown": "~2.6.0" + } + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, + "optional": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "optional": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "dev": true + }, + "dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dev": true, + "optional": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "double-ended-queue": { + "version": "2.1.0-0", + "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==", + "dev": true, + "optional": true + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.177", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.177.tgz", + "integrity": "sha512-FYPir3NSBEGexSZUEeht81oVhHfLFl6mhUKSkjHN/iB/TwEIt/WHQrqVGfTLN5gQxwJCQkIJBe05eOXjI7omgg==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emittery": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.4.1.tgz", + "integrity": "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==", + "dev": true, + "optional": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "dev": true, + "requires": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, + "requires": { + "buffer": "^5.6.0" + } + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dev": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, + "requires": { + "xtend": "^4.0.2" + } + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "end-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz", + "integrity": "sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA==", + "dev": true, + "optional": true, + "requires": { + "write-stream": "~0.4.3" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", + "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "eth-block-tracker": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", + "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", + "dev": true, + "requires": { + "@babel/plugin-transform-runtime": "^7.5.5", + "@babel/runtime": "^7.5.5", + "eth-query": "^2.1.0", + "json-rpc-random-id": "^1.0.1", + "pify": "^3.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", + "dev": true, + "requires": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + }, + "dependencies": { + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", + "dev": true + } + } + }, + "eth-json-rpc-errors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.2.tgz", + "integrity": "sha512-uBCRM2w2ewusRHGxN8JhcuOb2RN3ueAOYH/0BhqdFmQkZx5lj5+fLKTz0mIVOzd4FG5/kUksCzCD7eTEim6gaA==", + "dev": true, + "requires": { + "fast-safe-stringify": "^2.0.6" + } + }, + "eth-lib": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "eth-query": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", + "integrity": "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==", + "dev": true, + "requires": { + "json-rpc-random-id": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "eth-rpc-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz", + "integrity": "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==", + "dev": true, + "requires": { + "fast-safe-stringify": "^2.0.6" + } + }, + "eth-sig-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-3.0.1.tgz", + "integrity": "sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ==", + "dev": true, + "requires": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^5.1.1", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true + } + } + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethereum-common": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", + "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==", + "dev": true + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereum-protocol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz", + "integrity": "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==", + "dev": true + }, + "ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dev": true, + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "ethereumjs-account": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", + "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", + "dev": true, + "requires": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "ethereumjs-block": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", + "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", + "dev": true, + "requires": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "ethereumjs-common": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", + "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", + "dev": true + }, + "ethereumjs-tx": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", + "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", + "dev": true, + "requires": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereum-common": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", + "integrity": "sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==", + "dev": true + }, + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "ethereumjs-vm": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", + "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", + "dev": true, + "requires": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-block": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", + "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", + "dev": true, + "requires": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "ethereumjs-tx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", + "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", + "dev": true, + "requires": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + } + } + }, + "ethereumjs-wallet": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz", + "integrity": "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==", + "dev": true, + "requires": { + "aes-js": "^3.1.2", + "bs58check": "^2.1.2", + "ethereum-cryptography": "^0.1.3", + "ethereumjs-util": "^7.1.2", + "randombytes": "^2.1.0", + "scrypt-js": "^3.0.1", + "utf8": "^3.0.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "ethers": { + "version": "4.0.49", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", + "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", + "dev": true, + "optional": true, + "requires": { + "aes-js": "3.0.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + }, + "dependencies": { + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true, + "optional": true + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true, + "optional": true + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "optional": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + } + }, + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", + "dev": true, + "optional": true + }, + "scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", + "dev": true, + "optional": true + }, + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", + "dev": true, + "optional": true + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", + "dev": true, + "optional": true + } + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, + "fake-merkle-patricia-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", + "integrity": "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==", + "dev": true, + "requires": { + "checkpoint-store": "^1.1.0" + } + }, + "faker": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", + "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==", + "dev": true + }, + "fast-check": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.25.0.tgz", + "integrity": "sha512-wRUT2KD2lAmT75WNIJIHECawoUUMHM0I5jrlLXGtGeqmPL8jl/EldUDjY1VCp6fDY8yflyfUeIOsOBrIbIiArg==", + "dev": true, + "requires": { + "pure-rand": "^5.0.1" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@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": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fetch-cookie": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.11.0.tgz", + "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==", + "dev": true, + "optional": true, + "requires": { + "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0" + } + }, + "fetch-ponyfill": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz", + "integrity": "sha512-knK9sGskIg2T7OnYLdZ2hZXn0CtDrAIBxYQLpmEf0BqfdWnwmM1weccUl5+4EdA44tzNSFAuxITPbXtPehUB3g==", + "dev": true, + "requires": { + "node-fetch": "~1.7.1" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "requires": { + "array-back": "^3.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + }, + "dependencies": { + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true + } + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "foreach": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", + "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "ganache": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.2.0.tgz", + "integrity": "sha512-KsKysVeVN6CALALOkIPSIxNZbl5s2/DE6Z0lFpj05gH1XsvYMit3djP4LxpxdjUfSSyb9gIPEOzqMw7v56ihJg==", + "dev": true, + "requires": { + "@trufflesuite/bigint-buffer": "1.1.9", + "bufferutil": "4.0.5", + "emittery": "0.10.0", + "keccak": "3.0.1", + "leveldown": "6.1.0", + "secp256k1": "4.0.2", + "utf-8-validate": "5.0.7" + }, + "dependencies": { + "@trufflesuite/bigint-buffer": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz", + "integrity": "sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==", + "dev": true, + "requires": { + "node-gyp-build": "4.3.0" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "bufferutil": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", + "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", + "dev": true, + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "catering": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz", + "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==", + "dev": true, + "requires": { + "queue-tick": "^1.0.0" + } + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "emittery": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", + "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "keccak": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", + "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", + "dev": true, + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "leveldown": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", + "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", + "dev": true, + "requires": { + "abstract-leveldown": "^7.2.0", + "napi-macros": "~2.0.0", + "node-gyp-build": "^4.3.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", + "dev": true, + "requires": { + "buffer": "^6.0.3", + "catering": "^2.0.0", + "is-buffer": "^2.0.5", + "level-concat-iterator": "^3.0.0", + "level-supports": "^2.0.1", + "queue-microtask": "^1.2.3" + } + }, + "level-concat-iterator": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", + "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", + "dev": true, + "requires": { + "catering": "^2.1.0" + } + }, + "level-supports": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", + "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", + "dev": true + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "dev": true + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true + }, + "node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "queue-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", + "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", + "dev": true + }, + "secp256k1": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.2.tgz", + "integrity": "sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==", + "dev": true, + "requires": { + "elliptic": "^6.5.2", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "utf-8-validate": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", + "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", + "dev": true, + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + } + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "dev": true, + "optional": true + }, + "graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "hardhat": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.9.2.tgz", + "integrity": "sha512-elTcUK1EdFverWinybQ+DoJzsM6sgiHUYs0ZYNNXMfESty6ESHiFSwkfJsC88/q09vmIz6YVaMh73BYnYd+feQ==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.0", + "@ethereumjs/blockchain": "^5.5.0", + "@ethereumjs/common": "^2.6.0", + "@ethereumjs/tx": "^3.4.0", + "@ethereumjs/vm": "^5.6.0", + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@sentry/node": "^5.18.1", + "@solidity-parser/parser": "^0.14.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "abort-controller": "^3.0.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^0.1.2", + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^7.1.3", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "^7.1.3", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "lodash": "^4.17.11", + "merkle-patricia-tree": "^4.2.2", + "mnemonist": "^0.38.0", + "mocha": "^9.2.0", + "p-map": "^4.0.0", + "qs": "^6.7.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "slash": "^3.0.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "true-case-path": "^2.2.1", + "tsort": "0.0.1", + "undici": "^4.14.1", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "level-ws": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" + } + }, + "merkle-patricia-tree": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", + "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", + "dev": true, + "requires": { + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "dev": true, + "requires": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "ws": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", + "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", + "dev": true + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true, + "optional": true + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.3" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "dev": true, + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", + "dev": true + } + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "requires": { + "fp-ts": "^1.0.0" + } + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "optional": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", + "integrity": "sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + }, + "is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", + "dev": true, + "requires": { + "lower-case": "^1.1.0" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "optional": true + }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", + "dev": true, + "requires": { + "upper-case": "^1.1.0" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "dev": true, + "optional": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "json-pointer": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", + "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", + "dev": true, + "requires": { + "foreach": "^2.0.4" + } + }, + "json-rpc-engine": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", + "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", + "dev": true, + "requires": { + "eth-rpc-errors": "^3.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "json-rpc-random-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", + "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-schema-typed": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", + "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==", + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==", + "dev": true + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "level": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", + "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", + "dev": true, + "optional": true, + "requires": { + "level-js": "^5.0.0", + "level-packager": "^5.1.0", + "leveldown": "^5.4.0" + } + }, + "level-codec": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", + "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==", + "dev": true + }, + "level-concat-iterator": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", + "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", + "dev": true, + "optional": true, + "requires": { + "catering": "^2.1.0" + } + }, + "level-errors": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", + "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", + "dev": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", + "integrity": "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + } + } + }, + "level-js": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", + "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", + "dev": true, + "optional": true, + "requires": { + "abstract-leveldown": "~6.2.3", + "buffer": "^5.5.0", + "inherits": "^2.0.3", + "ltgt": "^2.1.2" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true, + "optional": true + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, + "optional": true, + "requires": { + "xtend": "^4.0.2" + } + } + } + }, + "level-mem": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", + "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", + "dev": true, + "requires": { + "level-packager": "^5.0.3", + "memdown": "^5.0.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", + "dev": true + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, + "requires": { + "xtend": "^4.0.2" + } + }, + "memdown": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", + "dev": true, + "requires": { + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" + } + } + } + }, + "level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "dev": true, + "requires": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "dev": true, + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + } + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dev": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, + "requires": { + "xtend": "^4.0.2" + } + }, + "levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "dev": true, + "requires": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + } + } + }, + "level-supports": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", + "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", + "dev": true, + "optional": true + }, + "level-write-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz", + "integrity": "sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw==", + "dev": true, + "optional": true, + "requires": { + "end-stream": "~0.1.0" + } + }, + "level-ws": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", + "integrity": "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==", + "dev": true, + "requires": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + }, + "dependencies": { + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "dev": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "leveldown": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", + "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", + "dev": true, + "optional": true, + "requires": { + "abstract-leveldown": "~6.2.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "~4.1.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true, + "optional": true + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, + "optional": true, + "requires": { + "xtend": "^4.0.2" + } + }, + "node-gyp-build": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", + "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", + "dev": true, + "optional": true + } + } + }, + "levelup": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", + "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", + "dev": true, + "requires": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + }, + "dependencies": { + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + } + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "optional": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.flatmap": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", + "integrity": "sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true, + "optional": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "loglevel": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", + "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", + "dev": true, + "optional": true + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "dev": true, + "optional": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", + "dev": true, + "requires": { + "lower-case": "^1.1.2" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "dev": true + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "memdown": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", + "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", + "dev": true, + "requires": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", + "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "dev": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "merkle-patricia-tree": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", + "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", + "dev": true, + "requires": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + } + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "optional": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", + "dev": true, + "requires": { + "mkdirp": "*" + } + }, + "mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "requires": { + "obliterator": "^2.0.0" + } + }, + "mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "mock-fs": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "multibase": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", + "dev": true, + "requires": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "multicodec": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", + "dev": true, + "requires": { + "varint": "^5.0.0" + } + }, + "multihashes": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + }, + "dependencies": { + "multibase": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", + "dev": true, + "requires": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + } + } + }, + "nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "dev": true, + "optional": true + }, + "nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", + "dev": true + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true + }, + "napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "dev": true, + "optional": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "optional": true + } + } + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" + }, + "node-interval-tree": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-interval-tree/-/node-interval-tree-1.3.3.tgz", + "integrity": "sha512-K9vk96HdTK5fEipJwxSvIIqwTqr4e3HRJeJrNxBSeVMNSC/JWARRaX7etOLOuTmrRMeOI/K5TCJu3aWIwZiNTw==", + "dev": true, + "requires": { + "shallowequal": "^1.0.2" + } + }, + "node-pre-gyp": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "optional": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true + } + } + }, + "node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "dev": true + }, + "nofilter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", + "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", + "dev": true + }, + "noop-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/noop-fn/-/noop-fn-1.0.0.tgz", + "integrity": "sha512-pQ8vODlgXt2e7A3mIbFDlizkr46r75V+BJxVAyat8Jl7YmI513gG5cfyRL0FedKraoZ+VAouI1h4/IWpus5pcQ==", + "dev": true, + "optional": true + }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "dev": true, + "optional": true + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true + }, + "oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "requires": { + "http-https": "^1.0.0" + } + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "optional": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "openzeppelin-solidity": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/openzeppelin-solidity/-/openzeppelin-solidity-2.5.1.tgz", + "integrity": "sha512-oCGtQPLOou4su76IMr4XXJavy9a8OZmAXeUZ8diOdFznlL/mlkIlYr7wajqCzH4S47nlKPS7m0+a2nilCTpVPQ==", + "dev": true + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "original-require": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/original-require/-/original-require-1.0.1.tgz", + "integrity": "sha512-5vdKMbE58WaE61uVD+PKyh8xdM398UnjPBLotW2sjG5MzHARwta/+NtMBCBA0t2WQblGYBvq5vsiZpWokwno+A==", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "optional": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "optional": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "optional": true + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", + "dev": true, + "requires": { + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" + } + }, + "path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "optional": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "optional": true, + "requires": { + "locate-path": "^3.0.0" + } + } + } + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "optional": true + }, + "pouchdb": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-7.3.0.tgz", + "integrity": "sha512-OwsIQGXsfx3TrU1pLruj6PGSwFH+h5k4hGNxFkZ76Um7/ZI8F5TzUHFrpldVVIhfXYi2vP31q0q7ot1FSLFYOw==", + "dev": true, + "optional": true, + "requires": { + "abort-controller": "3.0.0", + "argsarray": "0.0.1", + "buffer-from": "1.1.2", + "clone-buffer": "1.0.0", + "double-ended-queue": "2.1.0-0", + "fetch-cookie": "0.11.0", + "immediate": "3.3.0", + "inherits": "2.0.4", + "level": "6.0.1", + "level-codec": "9.0.2", + "level-write-stream": "1.0.0", + "leveldown": "5.6.0", + "levelup": "4.4.0", + "ltgt": "2.2.1", + "node-fetch": "2.6.7", + "readable-stream": "1.1.14", + "spark-md5": "3.0.2", + "through2": "3.0.2", + "uuid": "8.3.2", + "vuvuzela": "1.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "dev": true, + "optional": true, + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + } + }, + "level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.6.0" + } + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true, + "optional": true + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dev": true, + "optional": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "dev": true, + "optional": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, + "optional": true, + "requires": { + "xtend": "^4.0.2" + } + }, + "levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "dev": true, + "optional": true, + "requires": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "optional": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + }, + "dependencies": { + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "optional": true + } + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true + } + } + }, + "pouchdb-abstract-mapreduce": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.0.tgz", + "integrity": "sha512-+2fVt3SDh7D776lIGbYZOsKX5js1aUyUw7iJaTGitxSdQ2ObWSTrr3SUrj5Qo1CkgPXwRM3Tdoq/53JYAa2qCA==", + "dev": true, + "optional": true, + "requires": { + "pouchdb-binary-utils": "7.3.0", + "pouchdb-collate": "7.3.0", + "pouchdb-collections": "7.3.0", + "pouchdb-errors": "7.3.0", + "pouchdb-fetch": "7.3.0", + "pouchdb-mapreduce-utils": "7.3.0", + "pouchdb-md5": "7.3.0", + "pouchdb-utils": "7.3.0" + } + }, + "pouchdb-adapter-leveldb-core": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-adapter-leveldb-core/-/pouchdb-adapter-leveldb-core-7.3.0.tgz", + "integrity": "sha512-OyUsEae1JlqR2jSGMohP03gj6VANh9fDR/3nPIa1vYyoQWlwQzOS7knKqDaJm7Nui3JC5q/lWos7/FGZBFuF5Q==", + "dev": true, + "optional": true, + "requires": { + "argsarray": "0.0.1", + "buffer-from": "1.1.2", + "double-ended-queue": "2.1.0-0", + "levelup": "4.4.0", + "pouchdb-adapter-utils": "7.3.0", + "pouchdb-binary-utils": "7.3.0", + "pouchdb-collections": "7.3.0", + "pouchdb-errors": "7.3.0", + "pouchdb-json": "7.3.0", + "pouchdb-md5": "7.3.0", + "pouchdb-merge": "7.3.0", + "pouchdb-utils": "7.3.0", + "sublevel-pouchdb": "7.3.0", + "through2": "3.0.2" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "dev": true, + "optional": true, + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + } + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true, + "optional": true + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dev": true, + "optional": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "dev": true, + "optional": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, + "optional": true, + "requires": { + "xtend": "^4.0.2" + } + }, + "levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "dev": true, + "optional": true, + "requires": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + } + } + }, + "pouchdb-adapter-memory": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-adapter-memory/-/pouchdb-adapter-memory-7.3.0.tgz", + "integrity": "sha512-nUdYi5KpbUa0uv0L3IJorpiUnIOBPxX9qplCX9i7JE8OtLPeLyKuX3WC+3M1//8Lmmxg3b1wXSNIod6FJy4wAQ==", + "dev": true, + "optional": true, + "requires": { + "memdown": "1.4.1", + "pouchdb-adapter-leveldb-core": "7.3.0", + "pouchdb-utils": "7.3.0" + } + }, + "pouchdb-adapter-node-websql": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-adapter-node-websql/-/pouchdb-adapter-node-websql-7.0.0.tgz", + "integrity": "sha512-fNaOMO8bvMrRTSfmH4RSLSpgnKahRcCA7Z0jg732PwRbGvvMdGbreZwvKPPD1fg2tm2ZwwiXWK2G3+oXyoqZYw==", + "dev": true, + "optional": true, + "requires": { + "pouchdb-adapter-websql-core": "7.0.0", + "pouchdb-utils": "7.0.0", + "websql": "1.0.0" + }, + "dependencies": { + "buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", + "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", + "dev": true, + "optional": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true, + "optional": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "optional": true + }, + "pouchdb-binary-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.0.0.tgz", + "integrity": "sha512-yUktdOPIPvOVouCjJN3uop+bCcpdPwePrLm9eUAZNgEYnUFu0njdx7Q0WRsZ7UJ6l75HinL5ZHk4bnvEt86FLw==", + "dev": true, + "optional": true, + "requires": { + "buffer-from": "1.1.0" + } + }, + "pouchdb-collections": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.0.0.tgz", + "integrity": "sha512-DaoUr/vU24Q3gM6ghj0va9j/oBanPwkbhkvnqSyC3Dm5dgf5pculNxueLF9PKMo3ycApoWzHMh6N2N8KJbDU2Q==", + "dev": true, + "optional": true + }, + "pouchdb-errors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.0.0.tgz", + "integrity": "sha512-dTusY8nnTw4HIztCrNl7AoGgwvS1bVf/3/97hDaGc4ytn72V9/4dK8kTqlimi3UpaurohYRnqac0SGXYP8vgXA==", + "dev": true, + "optional": true, + "requires": { + "inherits": "2.0.3" + } + }, + "pouchdb-md5": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.0.0.tgz", + "integrity": "sha512-yaSJKhLA3QlgloKUQeb2hLdT3KmUmPfoYdryfwHZuPTpXIRKTnMQTR9qCIRUszc0ruBpDe53DRslCgNUhAyTNQ==", + "dev": true, + "optional": true, + "requires": { + "pouchdb-binary-utils": "7.0.0", + "spark-md5": "3.0.0" + } + }, + "pouchdb-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.0.0.tgz", + "integrity": "sha512-1bnoX1KdZYHv9wicDIFdO0PLiVIMzNDUBUZ/yOJZ+6LW6niQCB8aCv09ZztmKfSQcU5nnN3fe656tScBgP6dOQ==", + "dev": true, + "optional": true, + "requires": { + "argsarray": "0.0.1", + "clone-buffer": "1.0.0", + "immediate": "3.0.6", + "inherits": "2.0.3", + "pouchdb-collections": "7.0.0", + "pouchdb-errors": "7.0.0", + "pouchdb-md5": "7.0.0", + "uuid": "3.2.1" + } + }, + "spark-md5": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", + "integrity": "sha512-BpPFB0Oh83mi+6DRcFwxPx96f3OL8Tkq3hdvaHuXaQUsy5F3saI3zIPNQ/UsTQgyAXIHnML1waeCe1WoCPXbpQ==", + "dev": true, + "optional": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true, + "optional": true + } + } + }, + "pouchdb-adapter-utils": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.3.0.tgz", + "integrity": "sha512-mU1+smcagWSpInVx/VQk7VVjjnJlyagKtusUS3OdCMFZY35L6RbXC8eIhoNVDbkBfEv3cIwqQ3t7fdvkaa1odQ==", + "dev": true, + "optional": true, + "requires": { + "pouchdb-binary-utils": "7.3.0", + "pouchdb-collections": "7.3.0", + "pouchdb-errors": "7.3.0", + "pouchdb-md5": "7.3.0", + "pouchdb-merge": "7.3.0", + "pouchdb-utils": "7.3.0" + } + }, + "pouchdb-adapter-websql-core": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-adapter-websql-core/-/pouchdb-adapter-websql-core-7.0.0.tgz", + "integrity": "sha512-NyMaH0bl20SdJdOCzd+fwXo8JZ15a48/MAwMcIbXzsRHE4DjFNlRcWAcjUP6uN4Ezc+Gx+r2tkBBMf71mIz1Aw==", + "dev": true, + "optional": true, + "requires": { + "pouchdb-adapter-utils": "7.0.0", + "pouchdb-binary-utils": "7.0.0", + "pouchdb-collections": "7.0.0", + "pouchdb-errors": "7.0.0", + "pouchdb-json": "7.0.0", + "pouchdb-merge": "7.0.0", + "pouchdb-utils": "7.0.0" + }, + "dependencies": { + "buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", + "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", + "dev": true, + "optional": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true, + "optional": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "optional": true + }, + "pouchdb-adapter-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.0.0.tgz", + "integrity": "sha512-UWKPC6jkz6mHUzZefrU7P5X8ZGvBC8LSNZ7BIp0hWvJE6c20cnpDwedTVDpZORcCbVJpDmFOHBYnOqEIblPtbA==", + "dev": true, + "optional": true, + "requires": { + "pouchdb-binary-utils": "7.0.0", + "pouchdb-collections": "7.0.0", + "pouchdb-errors": "7.0.0", + "pouchdb-md5": "7.0.0", + "pouchdb-merge": "7.0.0", + "pouchdb-utils": "7.0.0" + } + }, + "pouchdb-binary-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.0.0.tgz", + "integrity": "sha512-yUktdOPIPvOVouCjJN3uop+bCcpdPwePrLm9eUAZNgEYnUFu0njdx7Q0WRsZ7UJ6l75HinL5ZHk4bnvEt86FLw==", + "dev": true, + "optional": true, + "requires": { + "buffer-from": "1.1.0" + } + }, + "pouchdb-collections": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.0.0.tgz", + "integrity": "sha512-DaoUr/vU24Q3gM6ghj0va9j/oBanPwkbhkvnqSyC3Dm5dgf5pculNxueLF9PKMo3ycApoWzHMh6N2N8KJbDU2Q==", + "dev": true, + "optional": true + }, + "pouchdb-errors": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.0.0.tgz", + "integrity": "sha512-dTusY8nnTw4HIztCrNl7AoGgwvS1bVf/3/97hDaGc4ytn72V9/4dK8kTqlimi3UpaurohYRnqac0SGXYP8vgXA==", + "dev": true, + "optional": true, + "requires": { + "inherits": "2.0.3" + } + }, + "pouchdb-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.0.0.tgz", + "integrity": "sha512-w0bNRu/7VmmCrFWMYAm62n30wvJJUT2SokyzeTyj3hRohj4GFwTRg1mSZ+iAmxgRKOFE8nzZstLG/WAB4Ymjew==", + "dev": true, + "optional": true, + "requires": { + "vuvuzela": "1.0.3" + } + }, + "pouchdb-md5": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.0.0.tgz", + "integrity": "sha512-yaSJKhLA3QlgloKUQeb2hLdT3KmUmPfoYdryfwHZuPTpXIRKTnMQTR9qCIRUszc0ruBpDe53DRslCgNUhAyTNQ==", + "dev": true, + "optional": true, + "requires": { + "pouchdb-binary-utils": "7.0.0", + "spark-md5": "3.0.0" + } + }, + "pouchdb-merge": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.0.0.tgz", + "integrity": "sha512-tci5u6NpznQhGcPv4ho1h0miky9rs+ds/T9zQ9meQeDZbUojXNaX1Jxsb0uYEQQ+HMqdcQs3Akdl0/u0mgwPGg==", + "dev": true, + "optional": true + }, + "pouchdb-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.0.0.tgz", + "integrity": "sha512-1bnoX1KdZYHv9wicDIFdO0PLiVIMzNDUBUZ/yOJZ+6LW6niQCB8aCv09ZztmKfSQcU5nnN3fe656tScBgP6dOQ==", + "dev": true, + "optional": true, + "requires": { + "argsarray": "0.0.1", + "clone-buffer": "1.0.0", + "immediate": "3.0.6", + "inherits": "2.0.3", + "pouchdb-collections": "7.0.0", + "pouchdb-errors": "7.0.0", + "pouchdb-md5": "7.0.0", + "uuid": "3.2.1" + } + }, + "spark-md5": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", + "integrity": "sha512-BpPFB0Oh83mi+6DRcFwxPx96f3OL8Tkq3hdvaHuXaQUsy5F3saI3zIPNQ/UsTQgyAXIHnML1waeCe1WoCPXbpQ==", + "dev": true, + "optional": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true, + "optional": true + } + } + }, + "pouchdb-binary-utils": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.0.tgz", + "integrity": "sha512-xvBH/XGHGcou2vkEzszJxkCc7YElfRUrkLUg51Jbdmh1mogLDUO0bU3Tj6TOIIJfRkQrU/HV+dDkMAhsil0amQ==", + "dev": true, + "optional": true, + "requires": { + "buffer-from": "1.1.2" + } + }, + "pouchdb-collate": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-7.3.0.tgz", + "integrity": "sha512-ys7rXKtEr6cfghgUjknwFJiOkITebV6JmeTybJKCzMV0r2luXu0OoPQsKVpE/wbM/3F5LxfpbFKGFpPcfGMvTA==", + "dev": true, + "optional": true + }, + "pouchdb-collections": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.0.tgz", + "integrity": "sha512-Xr54m2+fErShXn+qAT4xwqJ+8NwddNPeTMJT4z4k1sZsrwfHmZsWbsKAyGPMF04eQaaU+7DDRMciu2VzaBUXyg==", + "dev": true, + "optional": true + }, + "pouchdb-debug": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/pouchdb-debug/-/pouchdb-debug-7.2.1.tgz", + "integrity": "sha512-eP3ht/AKavLF2RjTzBM6S9gaI2/apcW6xvaKRQhEdOfiANqerFuksFqHCal3aikVQuDO+cB/cw+a4RyJn/glBw==", + "dev": true, + "optional": true, + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "pouchdb-errors": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.0.tgz", + "integrity": "sha512-dTBbIC1BbCy6J9W/Csg5xROgb3wJN3HpbgAJHHSEtAkb8oA45KZmU3ZwEpNhf0AfPuQm4XgW1936PvlDlGgJiw==", + "dev": true, + "optional": true, + "requires": { + "inherits": "2.0.4" + } + }, + "pouchdb-fetch": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-fetch/-/pouchdb-fetch-7.3.0.tgz", + "integrity": "sha512-8/lcg8iMDG+GVs1dHNXA4ktJSEpH71dHU3xesMJ25tNQOqfAaaWrkfz9j71ZYDDkveLYE6UjUzl/sDacu2hSjw==", + "dev": true, + "optional": true, + "requires": { + "abort-controller": "3.0.0", + "fetch-cookie": "0.11.0", + "node-fetch": "2.6.7" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "optional": true, + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, + "pouchdb-find": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-find/-/pouchdb-find-7.3.0.tgz", + "integrity": "sha512-EwhnfyxCAkKf8PG4tfndTTygEmtuz+o1LiZkxfPrflfXA3m1jo1ithib0hwBYtEwEYWuZxH6B8pRZutbLoQCGA==", + "dev": true, + "optional": true, + "requires": { + "pouchdb-abstract-mapreduce": "7.3.0", + "pouchdb-collate": "7.3.0", + "pouchdb-errors": "7.3.0", + "pouchdb-fetch": "7.3.0", + "pouchdb-md5": "7.3.0", + "pouchdb-selector-core": "7.3.0", + "pouchdb-utils": "7.3.0" + } + }, + "pouchdb-json": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.3.0.tgz", + "integrity": "sha512-D4wyi20ltyiFpuziQeMk3CbXs/Q58VoGTYTJQY8MWBw37OidtHGQAt1Kh5yJ435wJqDzJZyxMA5RxGZxEOBDVg==", + "dev": true, + "optional": true, + "requires": { + "vuvuzela": "1.0.3" + } + }, + "pouchdb-mapreduce-utils": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.3.0.tgz", + "integrity": "sha512-KDVSd+H2r+XWTrQfKWV71SknDDYRjYXoeWs0ZQl3xITHCcTl+fIgqyagg/XN+Zy/U9LeLPGMe2JdgPx9H8lJgw==", + "dev": true, + "optional": true, + "requires": { + "argsarray": "0.0.1", + "inherits": "2.0.4", + "pouchdb-collections": "7.3.0", + "pouchdb-utils": "7.3.0" + } + }, + "pouchdb-md5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.0.tgz", + "integrity": "sha512-wL04QgoKyd/L/TV5gxgcvlEyCJiZoXCOEFJklTzkdza/kBQNJGPH7i0ZhKa7Sb+AvZYoWZHddf1Zgv7rBScHkA==", + "dev": true, + "optional": true, + "requires": { + "pouchdb-binary-utils": "7.3.0", + "spark-md5": "3.0.2" + } + }, + "pouchdb-merge": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.3.0.tgz", + "integrity": "sha512-E7LmchMzwYFm6V8OBxejzARLisanpksOju2LEfuiYnotGfNDeW7MByP0qBH0/zF8BfUyyjA1cl7ByaEpsapkeQ==", + "dev": true, + "optional": true + }, + "pouchdb-selector-core": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-selector-core/-/pouchdb-selector-core-7.3.0.tgz", + "integrity": "sha512-sK/cCrIGeL9ImcMhKGcwa54+bzX7Wv4hhVV+oUW3T1Nasaoxh+Muem1GuA+x1+SbTCE8y37rUg8i6DIOhX51ew==", + "dev": true, + "optional": true, + "requires": { + "pouchdb-collate": "7.3.0", + "pouchdb-utils": "7.3.0" + } + }, + "pouchdb-utils": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.0.tgz", + "integrity": "sha512-HH+5IXXWn/ZgVCSnrlydBMYn6MabT7RS7SNoo9w8qVH9efpZSp3eLchw6yMQNLw8LQefWmbbskiHV9VgJmSVWQ==", + "dev": true, + "optional": true, + "requires": { + "argsarray": "0.0.1", + "clone-buffer": "1.0.0", + "immediate": "3.3.0", + "inherits": "2.0.4", + "pouchdb-collections": "7.3.0", + "pouchdb-errors": "7.3.0", + "pouchdb-md5": "7.3.0", + "uuid": "8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true + } + } + }, + "precond": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", + "integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-to-callback": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", + "integrity": "sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==", + "dev": true, + "requires": { + "is-fn": "^1.0.0", + "set-immediate-shim": "^1.0.1" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "pure-rand": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.1.tgz", + "integrity": "sha512-ksWccjmXOHU2gJBnH0cK1lSYdvSZ0zLoCMSz/nTGh6hDvCSgcRxDyIcOBD6KNxFz3xhMPm/T267Tbe2JRymKEQ==", + "dev": true + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true + }, + "redux": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", + "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "dev": true, + "requires": { + "lodash": "^4.2.1", + "lodash-es": "^4.2.1", + "loose-envify": "^1.1.0", + "symbol-observable": "^1.0.3" + } + }, + "redux-saga": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.0.0.tgz", + "integrity": "sha512-GvJWs/SzMvEQgeaw6sRMXnS2FghlvEGsHiEtTLpJqc/FHF3I5EE/B+Hq5lyHZ8LSoT2r/X/46uWvkdCnK9WgHA==", + "dev": true, + "requires": { + "@redux-saga/core": "^1.0.0" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "reselect": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", + "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", + "dev": true + }, + "reselect-tree": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/reselect-tree/-/reselect-tree-1.3.7.tgz", + "integrity": "sha512-kZN+C1cVJ6fFN2smSb0l4UvYZlRzttgnu183svH4NrU22cBY++ikgr2QT75Uuk4MYpv5gXSVijw4c5U6cx6GKg==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "json-pointer": "^0.6.1", + "reselect": "^4.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "optional": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "optional": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-event-emitter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", + "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", + "dev": true, + "requires": { + "events": "^3.0.0" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "semaphore": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", + "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", + "dev": true + }, + "semaphore-async-await": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", + "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "dev": true, + "requires": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "optional": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "optional": true + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true + }, + "simple-get": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", + "dev": true, + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "solc": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.5.17.tgz", + "integrity": "sha512-qpX+PGaU0Q3c6lh2vDzMoIbhv6bIrecI4bYsx+xUs01xsGFnY6Nr0L8y/QMyutTnrHN6Lb/Yl672ZVRqxka96w==", + "dev": true, + "requires": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", + "dev": true, + "optional": true + }, + "sqlite3": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz", + "integrity": "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.11.0" + } + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, + "requires": { + "type-fest": "^0.7.1" + }, + "dependencies": { + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true + } + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true + }, + "string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "optional": true + }, + "sublevel-pouchdb": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/sublevel-pouchdb/-/sublevel-pouchdb-7.3.0.tgz", + "integrity": "sha512-zp7u4jmv2N/s+dXZkWTtL4BjREs3SZ1nGBNNJ8RWX4yqN59oHgKmti4CfVOqfsAW9RMasmTqQAEPxL9hX8+CIA==", + "dev": true, + "optional": true, + "requires": { + "inherits": "2.0.4", + "level-codec": "9.0.2", + "ltgt": "2.2.1", + "readable-stream": "1.1.14" + }, + "dependencies": { + "level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.6.0" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "optional": true + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, + "swarm-js": { + "version": "0.1.40", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", + "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "dev": true + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + } + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true + }, + "table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, + "tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "optional": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "dev": true + }, + "tiny-queue": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.1.tgz", + "integrity": "sha512-EijGsv7kzd9I9g0ByCl6h42BWNGUZrlCSejfrb3AKeHC33SGbASu1VDf5O3rRiiUOhAC9CHdZxFPbZu0HmR70A==", + "dev": true, + "optional": true + }, + "tiny-typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", + "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", + "dev": true, + "optional": true + }, + "title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.0.3" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "true-case-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", + "dev": true + }, + "truffle": { + "version": "5.5.20", + "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.5.20.tgz", + "integrity": "sha512-Ixh6tmK5s/fC4KNuu1zlYrSTkJWesKemXimf/L8UugBuU2RTSgmo/JI00Jq1EbqCSMAtbze6G5ca2UU2vZnCkQ==", + "dev": true, + "requires": { + "@truffle/db": "^1.0.12", + "@truffle/db-loader": "^0.1.22", + "@truffle/debugger": "^10.0.16", + "app-module-path": "^2.2.0", + "ganache": "7.2.0", + "mocha": "9.2.2", + "original-require": "^1.0.1" + } + }, + "ts-command-line-args": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz", + "integrity": "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true + }, + "ts-node": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", + "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.0", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true, + "optional": true + }, + "tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typechain": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz", + "integrity": "sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ==", + "dev": true, + "requires": { + "@types/prettier": "^2.1.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.0", + "glob": "^7.1.6", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.1.2", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "dev": true + }, + "typescript-compare": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz", + "integrity": "sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==", + "dev": true, + "requires": { + "typescript-logic": "^0.0.0" + } + }, + "typescript-logic": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/typescript-logic/-/typescript-logic-0.0.0.tgz", + "integrity": "sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==", + "dev": true + }, + "typescript-tuple": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/typescript-tuple/-/typescript-tuple-2.2.1.tgz", + "integrity": "sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==", + "dev": true, + "requires": { + "typescript-compare": "^0.0.2" + } + }, + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "undici": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-4.16.0.tgz", + "integrity": "sha512-tkZSECUYi+/T1i4u+4+lwZmQgLXd4BLGlrc7KZPcLIW7Jpq99+Xpc30ONv7nS6F5UNOxp/HBZSSL9MafUrvJbw==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true + }, + "upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", + "dev": true, + "requires": { + "upper-case": "^1.1.1" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", + "dev": true + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", + "dev": true + }, + "utf-8-validate": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "value-or-promise": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz", + "integrity": "sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==", + "dev": true, + "optional": true + }, + "varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + } + } + }, + "vuvuzela": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", + "integrity": "sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ==", + "dev": true, + "optional": true + }, + "web3": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.7.4.tgz", + "integrity": "sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A==", + "dev": true, + "requires": { + "web3-bzz": "1.7.4", + "web3-core": "1.7.4", + "web3-eth": "1.7.4", + "web3-eth-personal": "1.7.4", + "web3-net": "1.7.4", + "web3-shh": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-bzz": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.4.tgz", + "integrity": "sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q==", + "dev": true, + "requires": { + "@types/node": "^12.12.6", + "got": "9.6.0", + "swarm-js": "^0.1.40" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + } + } + }, + "web3-core": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", + "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", + "requires": { + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-requestmanager": "1.7.4", + "web3-utils": "1.7.4" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + } + } + }, + "web3-core-helpers": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", + "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", + "requires": { + "web3-eth-iban": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-method": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", + "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", + "requires": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-promievent": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", + "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-core-requestmanager": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", + "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", + "requires": { + "util": "^0.12.0", + "web3-core-helpers": "1.7.4", + "web3-providers-http": "1.7.4", + "web3-providers-ipc": "1.7.4", + "web3-providers-ws": "1.7.4" + } + }, + "web3-core-subscriptions": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", + "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4" + } + }, + "web3-eth": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.4.tgz", + "integrity": "sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug==", + "dev": true, + "requires": { + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-eth-abi": "1.7.4", + "web3-eth-accounts": "1.7.4", + "web3-eth-contract": "1.7.4", + "web3-eth-ens": "1.7.4", + "web3-eth-iban": "1.7.4", + "web3-eth-personal": "1.7.4", + "web3-net": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-eth-abi": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz", + "integrity": "sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg==", + "dev": true, + "requires": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.7.4" + } + }, + "web3-eth-accounts": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz", + "integrity": "sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.5.0", + "@ethereumjs/tx": "^3.3.2", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.0.10", + "scrypt-js": "^3.0.1", + "uuid": "3.3.2", + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-utils": "1.7.4" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dev": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + } + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + } + } + }, + "web3-eth-contract": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz", + "integrity": "sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-eth-abi": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-eth-ens": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz", + "integrity": "sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA==", + "dev": true, + "requires": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-eth-abi": "1.7.4", + "web3-eth-contract": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-eth-iban": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", + "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.7.4" + } + }, + "web3-eth-personal": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz", + "integrity": "sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g==", + "dev": true, + "requires": { + "@types/node": "^12.12.6", + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-net": "1.7.4", + "web3-utils": "1.7.4" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + } + } + }, + "web3-net": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.7.4.tgz", + "integrity": "sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg==", + "dev": true, + "requires": { + "web3-core": "1.7.4", + "web3-core-method": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-providers-http": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", + "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", + "requires": { + "web3-core-helpers": "1.7.4", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", + "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.7.4" + } + }, + "web3-providers-ws": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", + "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4", + "websocket": "^1.0.32" + } + }, + "web3-shh": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.4.tgz", + "integrity": "sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A==", + "dev": true, + "requires": { + "web3-core": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-net": "1.7.4" + } + }, + "web3-utils": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", + "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + } + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + } + }, + "websql": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/websql/-/websql-1.0.0.tgz", + "integrity": "sha512-7iZ+u28Ljw5hCnMiq0BCOeSYf0vCFQe/ORY0HgscTiKjQed8WqugpBUggJ2NTnB9fahn1kEnPRX2jf8Px5PhJw==", + "dev": true, + "optional": true, + "requires": { + "argsarray": "^0.0.1", + "immediate": "^3.2.2", + "noop-fn": "^1.0.0", + "sqlite3": "^4.0.0", + "tiny-queue": "^0.2.1" + } + }, + "whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", + "dev": true + }, + "whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "optional": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, + "workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "write-stream": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz", + "integrity": "sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A==", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "~0.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz", + "integrity": "sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw==", + "dev": true, + "optional": true + } + } + }, + "ws": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", + "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dev": true, + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "dev": true, + "requires": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "dev": true, + "requires": { + "xhr-request": "^1.1.0" + } + }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", + "requires": { + "cookiejar": "^2.1.1" + } + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", + "dev": true, + "optional": true + }, + "xss": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.13.tgz", + "integrity": "sha512-clu7dxTm1e8Mo5fz3n/oW3UCXBfV89xZ72jM8yzo1vR/pIS0w3sgB3XV2H8Vm6zfGnHL0FzvLJPJEBhd86/z4Q==", + "dev": true, + "optional": true, + "requires": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "optional": true + } + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json new file mode 100644 index 000000000..226860350 --- /dev/null +++ b/packages/ethers-lib/package.json @@ -0,0 +1,60 @@ +{ + "name": "@gnosis.pm/safe-ethers-lib", + "version": "1.1.0", + "description": "Ethers library adapter to be used by Safe Core SDK", + "main": "dist/src/index.js", + "typings": "dist/src/index.d.ts", + "keywords": [ + "Ethereum", + "Gnosis", + "Safe", + "SDK", + "Ethers" + ], + "scripts": { + "typechain": "ts-node scripts/generateTypechainFiles.ts", + "unbuild": "rimraf dist artifacts cache .nyc_output typechain", + "build": "hardhat compile && yarn typechain && tsc", + "format": "prettier --write \"{src,tests,hardhat,scripts}/**/*.ts\"", + "lint": "tslint -p tsconfig.json" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/gnosis/safe-core-sdk.git" + }, + "author": "Gnosis Safe (https://gnosis-safe.io)", + "license": "MIT", + "bugs": { + "url": "https://github.com/gnosis/safe-core-sdk/issues" + }, + "files": [ + "dist" + ], + "homepage": "https://github.com/gnosis/safe-core-sdk#readme", + "devDependencies": { + "@gnosis.pm/safe-contracts-v1.2.0": "npm:@gnosis.pm/safe-contracts@1.2.0", + "@gnosis.pm/safe-contracts-v1.3.0": "npm:@gnosis.pm/safe-contracts@1.3.0", + "@nomiclabs/hardhat-ethers": "^2.0.5", + "@nomiclabs/hardhat-waffle": "^2.0.3", + "@typechain/ethers-v5": "^9.0.0", + "@types/node": "^17.0.23", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "core-types": "*", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "hardhat": "^2.9.2", + "prettier": "^2.6.2", + "ts-node": "^10.7.0", + "typechain": "^7.0.0", + "typescript": "^4.6.3" + }, + "dependencies": { + "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", + "@openzeppelin/contracts": "^4.6.0" + }, + "peerDependencies": { + "ethers": "^5.5.3" + } +} diff --git a/packages/ethers-lib/scripts/generateTypechainFiles.ts b/packages/ethers-lib/scripts/generateTypechainFiles.ts new file mode 100644 index 000000000..32efb69ba --- /dev/null +++ b/packages/ethers-lib/scripts/generateTypechainFiles.ts @@ -0,0 +1,74 @@ +import { execSync } from 'child_process' +import { existsSync, mkdirSync, readdir } from 'fs' +import path from 'path' + +// Directories where the Typechain files will be generated +const outDirSrc = 'typechain/src/' +const typeChainDirectorySrcPath = path.join(__dirname, `../${outDirSrc}`) + +const outDirBuild = 'dist/typechain/src/' +const typeChainDirectoryBuildPath = path.join(__dirname, `../${outDirBuild}`) + +const outDirTests = 'typechain/tests/' + +// Contract list for which the Typechain files will be generated +// Will be included in dist/ folder +const safeContractsPath = './artifacts/contracts/Deps_V1_0_0.sol' + +const safeContracts_V1_0_0 = [ + `${safeContractsPath}/SmartWallet_SV1_0_0.json`, + `${safeContractsPath}/MultiSend_SV1_0_0.json` +].join(' ') + +// Won't be included in dist/ folder +const safeContractsTestPath = '../../node_modules/@gnosis.pm/safe-contracts-v1.2.0/build/contracts' +const openZeppelinContractsPath = '../../node_modules/openzeppelin-solidity/build/contracts' +// const testContracts = [ +// `${safeContractsTestPath}/DailyLimitModule.json`, +// `${safeContractsTestPath}/SocialRecoveryModule.json`, +// `${openZeppelinContractsPath}/ERC20Mintable.json` +// ].join(' ') + +// Remove existing Typechain files +execSync(`rimraf ${outDirSrc} ${outDirTests}`) + +// Generate Typechain files +function generateTypechainFiles( + typechainVersion: string, + outDir: string, + contractList: string +): void { + execSync(`typechain --target ${typechainVersion} --out-dir ${outDir} ${contractList}`) + console.log(`Generated typechain ${typechainVersion} at ${outDir}`) +} + +// Copy Typechain files with the right extension (.d.ts -> .ts) allows them to be included in the build folder +function moveTypechainFiles(inDir: string, outDir: string): void { + readdir(`${inDir}`, (error, files) => { + if (error) { + console.log(error) + } + if (!existsSync(`${outDir}`)) { + mkdirSync(`${outDir}`, { recursive: true }) + } + files.forEach((file) => { + const pattern = /.d.ts/ + if (!file.match(pattern)) { + return + } + execSync(`cp ${inDir}/${file} ${outDir}/${file}`) + }) + }) +} + +const ethersV5 = 'ethers-v5' + +// Src: Ethers V5 types +generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.0`, safeContracts_V1_0_0) +moveTypechainFiles( + `${typeChainDirectorySrcPath}${ethersV5}/v1.0.0`, + `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.0` +) + +// Tests: Ethers V5 types +//generateTypechainFiles(ethersV5, `${outDirTests}${ethersV5}`, testContracts) diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/ECDSA.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/ECDSA.sol new file mode 100644 index 000000000..b9ba95ab4 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/references/aa-4337/ECDSA.sol @@ -0,0 +1,246 @@ +// SPDX-License-Identifier: MIT +// a copy of import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", with tiny modification: +// ecrecover should not use the "GAS" opcode. +// (its a precompile, and uses fixed gas anyway) +// instead, ecrecover2 uses assembly. +// Had to change "pure" to "view", since the compiler can't tell this "staticcall" is pure + +pragma solidity ^0.8.0; + +/** + * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. + * + * These functions can be used to verify that a message was signed by the holder + * of the private keys of a given address. + */ +library ECDSA { + enum RecoverError { + NoError, + InvalidSignature, + InvalidSignatureLength, + InvalidSignatureS, + InvalidSignatureV + } + + function _throwError(RecoverError error) private pure { + if (error == RecoverError.NoError) { + return; + // no error: do nothing + } else if (error == RecoverError.InvalidSignature) { + revert("ECDSA: invalid signature"); + } else if (error == RecoverError.InvalidSignatureLength) { + revert("ECDSA: invalid signature length"); + } else if (error == RecoverError.InvalidSignatureS) { + revert("ECDSA: invalid signature 's' value"); + } else if (error == RecoverError.InvalidSignatureV) { + revert("ECDSA: invalid signature 'v' value"); + } + } + + /** + * @dev Returns the address that signed a hashed message (`hash`) with + * `signature` or error string. This address can then be used for verification purposes. + * + * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: + * this function rejects them by requiring the `s` value to be in the lower + * half order, and the `v` value to be either 27 or 28. + * + * IMPORTANT: `hash` _must_ be the result of a hash operation for the + * verification to be secure: it is possible to craft signatures that + * recover to arbitrary addresses for non-hashed data. A safe way to ensure + * this is by receiving a hash of the original message (which may otherwise + * be too long), and then calling {toEthSignedMessageHash} on it. + * + * Documentation for signature generation: + * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] + * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] + * + * _Available since v4.3._ + */ + function tryRecover(bytes32 hash, bytes memory signature) internal view returns (address, RecoverError) { + // Check the signature length + // - case 65: r,s,v signature (standard) + // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ + if (signature.length == 65) { + bytes32 r; + bytes32 s; + uint8 v; + // ecrecover takes the signature parameters, and the only way to get them + // currently is to use assembly. + assembly { + r := mload(add(signature, 0x20)) + s := mload(add(signature, 0x40)) + v := byte(0, mload(add(signature, 0x60))) + } + return tryRecover(hash, v, r, s); + } else if (signature.length == 64) { + bytes32 r; + bytes32 vs; + // ecrecover takes the signature parameters, and the only way to get them + // currently is to use assembly. + assembly { + r := mload(add(signature, 0x20)) + vs := mload(add(signature, 0x40)) + } + return tryRecover(hash, r, vs); + } else { + return (address(0), RecoverError.InvalidSignatureLength); + } + } + + /** + * @dev Returns the address that signed a hashed message (`hash`) with + * `signature`. This address can then be used for verification purposes. + * + * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: + * this function rejects them by requiring the `s` value to be in the lower + * half order, and the `v` value to be either 27 or 28. + * + * IMPORTANT: `hash` _must_ be the result of a hash operation for the + * verification to be secure: it is possible to craft signatures that + * recover to arbitrary addresses for non-hashed data. A safe way to ensure + * this is by receiving a hash of the original message (which may otherwise + * be too long), and then calling {toEthSignedMessageHash} on it. + */ + function recover(bytes32 hash, bytes memory signature) internal view returns (address) { + (address recovered, RecoverError error) = tryRecover(hash, signature); + _throwError(error); + return recovered; + } + + /** + * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. + * + * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] + * + * _Available since v4.3._ + */ + function tryRecover( + bytes32 hash, + bytes32 r, + bytes32 vs + ) internal view returns (address, RecoverError) { + bytes32 s; + uint8 v; + assembly { + s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) + v := add(shr(255, vs), 27) + } + return tryRecover(hash, v, r, s); + } + + /** + * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. + * + * _Available since v4.2._ + */ + function recover( + bytes32 hash, + bytes32 r, + bytes32 vs + ) internal view returns (address) { + (address recovered, RecoverError error) = tryRecover(hash, r, vs); + _throwError(error); + return recovered; + } + + /** + * @dev Overload of {ECDSA-tryRecover} that receives the `v`, + * `r` and `s` signature fields separately. + * + * _Available since v4.3._ + */ + function tryRecover( + bytes32 hash, + uint8 v, + bytes32 r, + bytes32 s + ) internal view returns (address, RecoverError) { + // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature + // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines + // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most + // signatures from current libraries generate a unique signature with an s-value in the lower half order. + // + // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value + // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or + // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept + // these malleable signatures as well. + if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { + return (address(0), RecoverError.InvalidSignatureS); + } + if (v != 27 && v != 28) { + return (address(0), RecoverError.InvalidSignatureV); + } + + // If the signature is valid (and not malleable), return the signer address + // address signer = ecrecover(hash,v,r,s); + address signer = ecrecover2(hash, v, r, s); + + if (signer == address(0)) { + return (address(0), RecoverError.InvalidSignature); + } + + return (signer, RecoverError.NoError); + } + + function ecrecover2(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal view returns (address signer) { + uint status; + assembly { + let pointer := mload(0x40) + + mstore(pointer, hash) + mstore(add(pointer, 0x20), v) + mstore(add(pointer, 0x40), r) + mstore(add(pointer, 0x60), s) + + + status := staticcall(not(0), 0x01, pointer, 0x80, pointer, 0x20) + signer := mload(pointer) + // not required by this code, but other solidity code assumes unused data is zero... + mstore(pointer, 0) + mstore(add(pointer, 0x20), 0) + } + } + + /** + * @dev Overload of {ECDSA-recover} that receives the `v`, + * `r` and `s` signature fields separately. + */ + function recover( + bytes32 hash, + uint8 v, + bytes32 r, + bytes32 s + ) internal view returns (address) { + (address recovered, RecoverError error) = tryRecover(hash, v, r, s); + _throwError(error); + return recovered; + } + + /** + * @dev Returns an Ethereum Signed Message, created from a `hash`. This + * produces hash corresponding to the one signed with the + * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] + * JSON-RPC method as part of EIP-191. + * + * See {recover}. + */ + function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { + // 32 is the length in bytes of hash, + // enforced by the type signature above + return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); + } + + /** + * @dev Returns an Ethereum Signed Typed Data, created from a + * `domainSeparator` and a `structHash`. This produces hash corresponding + * to the one signed with the + * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] + * JSON-RPC method as part of EIP-712. + * + * See {recover}. + */ + function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { + return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); + } +} diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/EntryPoint.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/EntryPoint.sol new file mode 100644 index 000000000..3cb410376 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/references/aa-4337/EntryPoint.sol @@ -0,0 +1,357 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.0; + +import "./StakeManager.sol"; +import "./UserOperation.sol"; +import "./IWallet.sol"; +import "./IPaymaster.sol"; + +interface ICreate2Deployer { + function deploy(bytes memory _initCode, bytes32 _salt) external returns (address); +} + +contract EntryPoint is StakeManager { + + using UserOperationLib for UserOperation; + + enum PaymentMode { + paymasterStake, // if paymaster is set, use paymaster's stake to pay. + walletStake // pay with wallet deposit. + } + + uint public immutable paymasterStake; + address public immutable create2factory; + + event UserOperationEvent(bytes32 indexed requestId, address indexed sender, address indexed paymaster, uint nonce, uint actualGasCost, uint actualGasPrice, bool success); + event UserOperationRevertReason(bytes32 indexed requestId, address indexed sender, uint nonce, bytes revertReason); + + //handleOps reverts with this error struct, to mark the offending op + // NOTE: if simulateOp passes successfully, there should be no reason for handleOps to fail on it. + // @param opIndex - index into the array of ops to the failed one (in simulateOp, this is always zero) + // @param paymaster - if paymaster.validatePaymasterUserOp fails, this will be the paymaster's address. if validateUserOp failed, + // this value will be zero (since it failed before accessing the paymaster) + // @param reason - revert reason + // only to aid troubleshooting of wallet/paymaster reverts + error FailedOp(uint opIndex, address paymaster, string reason); + + /** + * @param _create2factory - contract to "create2" wallets (not the EntryPoint itself, so that it can be upgraded) + * @param _paymasterStake - locked stake of paymaster (actual value should also cover TX cost) + * @param _unstakeDelaySec - minimum time (in seconds) a paymaster stake must be locked + */ + constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) StakeManager(_unstakeDelaySec) { + create2factory = _create2factory; + paymasterStake = _paymasterStake; + } + + /** + * Execute the given UserOperation. + * @param op the operation to execute + * @param beneficiary the address to receive the fees + */ + function handleOp(UserOperation calldata op, address payable beneficiary) public { + + uint preGas = gasleft(); + + unchecked { + bytes32 requestId = getRequestId(op); + (uint256 prefund, PaymentMode paymentMode, bytes memory context) = _validatePrepayment(0, op, requestId); + UserOpInfo memory opInfo = UserOpInfo( + requestId, + prefund, + paymentMode, + 0, + preGas - gasleft() + op.preVerificationGas + ); + + uint actualGasCost; + + try this.internalHandleOp(op, opInfo, context) returns (uint _actualGasCost) { + actualGasCost = _actualGasCost; + } catch { + uint actualGas = preGas - gasleft() + opInfo.preOpGas; + actualGasCost = handlePostOp(0, IPaymaster.PostOpMode.postOpReverted, op, opInfo, context, actualGas); + } + + compensate(beneficiary, actualGasCost); + } // unchecked + } + + function compensate(address payable beneficiary, uint amount) internal { + (bool success,) = beneficiary.call{value : amount}(""); + require(success); + } + + /** + * Execute a batch of UserOperation. + * @param ops the operations to execute + * @param beneficiary the address to receive the fees + */ + function handleOps(UserOperation[] calldata ops, address payable beneficiary) public { + + uint opslen = ops.length; + UserOpInfo[] memory opInfos = new UserOpInfo[](opslen); + + unchecked { + for (uint i = 0; i < opslen; i++) { + uint preGas = gasleft(); + UserOperation calldata op = ops[i]; + + bytes memory context; + uint contextOffset; + bytes32 requestId = getRequestId(op); + uint prefund; + PaymentMode paymentMode; + (prefund, paymentMode, context) = _validatePrepayment(i, op, requestId); + assembly {contextOffset := context} + opInfos[i] = UserOpInfo( + requestId, + prefund, + paymentMode, + contextOffset, + preGas - gasleft() + op.preVerificationGas + ); + } + + uint collected = 0; + + for (uint i = 0; i < ops.length; i++) { + uint preGas = gasleft(); + UserOperation calldata op = ops[i]; + UserOpInfo memory opInfo = opInfos[i]; + uint contextOffset = opInfo._context; + bytes memory context; + assembly {context := contextOffset} + + try this.internalHandleOp(op, opInfo, context) returns (uint _actualGasCost) { + collected += _actualGasCost; + } catch { + uint actualGas = preGas - gasleft() + opInfo.preOpGas; + collected += handlePostOp(i, IPaymaster.PostOpMode.postOpReverted, op, opInfo, context, actualGas); + } + } + + compensate(beneficiary, collected); + } //unchecked + } + + struct UserOpInfo { + bytes32 requestId; + uint prefund; + PaymentMode paymentMode; + uint _context; + uint preOpGas; + } + + function internalHandleOp(UserOperation calldata op, UserOpInfo calldata opInfo, bytes calldata context) external returns (uint actualGasCost) { + uint preGas = gasleft(); + require(msg.sender == address(this)); + + IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded; + if (op.callData.length > 0) { + + (bool success,bytes memory result) = address(op.getSender()).call{gas : op.callGas}(op.callData); + if (!success) { + if (result.length > 0) { + emit UserOperationRevertReason(opInfo.requestId, op.getSender(), op.nonce, result); + } + mode = IPaymaster.PostOpMode.opReverted; + } + } + + unchecked { + uint actualGas = preGas - gasleft() + opInfo.preOpGas; + return handlePostOp(0, mode, op, opInfo, context, actualGas); + } + } + + /** + * generate a request Id - unique identifier for this request. + * the request ID is a hash over the content of the userOp (except the signature). + */ + function getRequestId(UserOperation calldata userOp) public view returns (bytes32) { + return keccak256(abi.encode(userOp.hash(), address(this), block.chainid)); + } + + /** + * Simulate a call to wallet.validateUserOp and paymaster.validatePaymasterUserOp. + * Validation succeeds of the call doesn't revert. + * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the wallet's data. + * In order to split the running opcodes of the wallet (validateUserOp) from the paymaster's validatePaymasterUserOp, + * it should look for the NUMBER opcode at depth=1 (which itself is a banned opcode) + * @return preOpGas total gas used by validation (including contract creation) + * @return prefund the amount the wallet had to prefund (zero in case a paymaster pays) + */ + function simulateValidation(UserOperation calldata userOp) external returns (uint preOpGas, uint prefund) { + uint preGas = gasleft(); + + bytes32 requestId = getRequestId(userOp); + (prefund,,) = _validatePrepayment(0, userOp, requestId); + preOpGas = preGas - gasleft() + userOp.preVerificationGas; + + require(msg.sender == address(0), "must be called off-chain with from=zero-addr"); + } + + function _getPaymentInfo(UserOperation calldata userOp) internal view returns (uint requiredPrefund, PaymentMode paymentMode) { + requiredPrefund = userOp.requiredPreFund(); + if (userOp.hasPaymaster()) { + paymentMode = PaymentMode.paymasterStake; + } else { + paymentMode = PaymentMode.walletStake; + } + } + + // create the sender's contract if needed. + function _createSenderIfNeeded(UserOperation calldata op) internal { + if (op.initCode.length != 0) { + // note that we're still under the gas limit of validate, so probably + // this create2 creates a proxy account. + // @dev initCode must be unique (e.g. contains the signer address), to make sure + // it can only be executed from the entryPoint, and called with its initialization code (callData) + address sender1 = ICreate2Deployer(create2factory).deploy(op.initCode, bytes32(op.nonce)); + require(sender1 != address(0), "create2 failed"); + require(sender1 == op.getSender(), "sender doesn't match create2 address"); + } + } + + /// Get counterfactual sender address. + /// Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation. + function getSenderAddress(bytes memory initCode, uint _salt) public view returns (address) { + bytes32 hash = keccak256( + abi.encodePacked( + bytes1(0xff), + address(create2factory), + _salt, + keccak256(initCode) + ) + ); + + // NOTE: cast last 20 bytes of hash to address + return address(uint160(uint256(hash))); + } + + //call wallet.validateUserOp, and validate that it paid as needed. + // return actual value sent from wallet to "this" + function _validateWalletPrepayment(uint opIndex, UserOperation calldata op, bytes32 requestId, uint requiredPrefund, PaymentMode paymentMode) internal returns (uint gasUsedByValidateUserOp, uint prefund) { + unchecked { + uint preGas = gasleft(); + _createSenderIfNeeded(op); + uint missingWalletFunds = 0; + address sender = op.getSender(); + if (paymentMode != PaymentMode.paymasterStake) { + uint bal = balanceOf(sender); + missingWalletFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal; + } + try IWallet(sender).validateUserOp{gas : op.verificationGas}(op, requestId, missingWalletFunds) { + } catch Error(string memory revertReason) { + revert FailedOp(opIndex, address(0), revertReason); + } catch { + revert FailedOp(opIndex, address(0), ""); + } + if (paymentMode != PaymentMode.paymasterStake) { + if (requiredPrefund > balanceOf(sender)) { + revert FailedOp(opIndex, address(0), "wallet didn't pay prefund"); + } + internalDecrementDeposit(sender, requiredPrefund); + prefund = requiredPrefund; + } else { + prefund = 0; + } + gasUsedByValidateUserOp = preGas - gasleft(); + } + } + + //validate paymaster.validatePaymasterUserOp + function _validatePaymasterPrepayment(uint opIndex, UserOperation calldata op, bytes32 requestId, uint requiredPreFund, uint gasUsedByValidateUserOp) internal view returns (bytes memory context) { + unchecked { + //validate a paymaster has enough stake (including for payment for this TX) + // NOTE: when submitting a batch, caller has to make sure a paymaster has enough stake to cover + // all its transactions in the batch. + if (!isPaymasterStaked(op.paymaster, paymasterStake + requiredPreFund)) { + revert FailedOp(opIndex, op.paymaster, "not enough stake"); + } + //no pre-pay from paymaster + uint gas = op.verificationGas - gasUsedByValidateUserOp; + try IPaymaster(op.paymaster).validatePaymasterUserOp{gas : gas}(op, requestId, requiredPreFund) returns (bytes memory _context){ + context = _context; + } catch Error(string memory revertReason) { + revert FailedOp(opIndex, op.paymaster, revertReason); + } catch { + revert FailedOp(opIndex, op.paymaster, ""); + } + } + } + + function _validatePrepayment(uint opIndex, UserOperation calldata userOp, bytes32 requestId) private returns (uint prefund, PaymentMode paymentMode, bytes memory context){ + + uint preGas = gasleft(); + uint maxGasValues = userOp.preVerificationGas | userOp.verificationGas | + userOp.callGas | userOp.maxFeePerGas | userOp.maxPriorityFeePerGas; + require(maxGasValues < type(uint120).max, "gas values overflow"); + uint gasUsedByValidateUserOp; + uint requiredPreFund; + (requiredPreFund, paymentMode) = _getPaymentInfo(userOp); + + (gasUsedByValidateUserOp, prefund) = _validateWalletPrepayment(opIndex, userOp, requestId, requiredPreFund, paymentMode); + + //a "marker" where wallet opcode validation is done, by paymaster opcode validation is about to start + // (used only by off-chain simulateValidation) + uint marker = block.number; + (marker); + + if (paymentMode == PaymentMode.paymasterStake) { + (context) = _validatePaymasterPrepayment(opIndex, userOp, requestId, requiredPreFund, gasUsedByValidateUserOp); + } else { + context = ""; + } + unchecked { + uint gasUsed = preGas - gasleft(); + + if (userOp.verificationGas < gasUsed) { + revert FailedOp(opIndex, userOp.paymaster, "Used more than verificationGas"); + } + } + } + + function handlePostOp(uint opIndex, IPaymaster.PostOpMode mode, UserOperation calldata op, UserOpInfo memory opInfo, bytes memory context, uint actualGas) private returns (uint actualGasCost) { + uint preGas = gasleft(); + uint gasPrice = UserOperationLib.gasPrice(op); + unchecked { + actualGasCost = actualGas * gasPrice; + if (opInfo.paymentMode != PaymentMode.paymasterStake) { + if (opInfo.prefund < actualGasCost) { + revert ("wallet prefund below actualGasCost"); + } + uint refund = opInfo.prefund - actualGasCost; + internalIncrementDeposit(op.getSender(), refund); + } else { + if (context.length > 0) { + if (mode != IPaymaster.PostOpMode.postOpReverted) { + IPaymaster(op.paymaster).postOp{gas : op.verificationGas}(mode, context, actualGasCost); + } else { + try IPaymaster(op.paymaster).postOp{gas : op.verificationGas}(mode, context, actualGasCost) {} + catch Error(string memory reason) { + revert FailedOp(opIndex, op.paymaster, reason); + } + catch { + revert FailedOp(opIndex, op.paymaster, "postOp revert"); + } + } + } + //paymaster pays for full gas, including for postOp + actualGas += preGas - gasleft(); + actualGasCost = actualGas * gasPrice; + //paymaster balance known to be high enough, and to be locked for this block + internalDecrementDeposit(op.paymaster, actualGasCost); + } + bool success = mode == IPaymaster.PostOpMode.opSucceeded; + emit UserOperationEvent(opInfo.requestId, op.getSender(), op.paymaster, op.nonce, actualGasCost, gasPrice, success); + } // unchecked + } + + + function isPaymasterStaked(address paymaster, uint stake) public view returns (bool) { + return isStaked(paymaster, stake, unstakeDelaySec); + } +} + diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/IPaymaster.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/IPaymaster.sol new file mode 100644 index 000000000..134b828d1 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/references/aa-4337/IPaymaster.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.0; + +import "./UserOperation.sol"; + +/** + * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations. + * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction. + */ +interface IPaymaster { + + /** + * payment validation: check if paymaster agree to pay (using its stake) + * revert to reject this request. + * actual payment is done after postOp is called, by deducting actual call cost form the paymaster's stake. + * @param userOp the user operation + * @param requestId hash of the user's request data. + * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp) + * @return context value to send to a postOp + * zero length to signify postOp is not required. + */ + function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 requestId, uint maxCost) external view returns (bytes memory context); + + /** + * post-operation handler. + * Must verify sender is the entryPoint + * @param mode enum with the following options: + * opSucceeded - user operation succeeded. + * opReverted - user op reverted. still has to pay for gas. + * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert. + * Now this is the 2nd call, after user's op was deliberately reverted. + * @param context - the context value returned by validatePaymasterUserOp + * @param actualGasCost - actual gas used so far (without this postOp call). + */ + function postOp(PostOpMode mode, bytes calldata context, uint actualGasCost) external; + + enum PostOpMode { + opSucceeded, // user op succeeded + opReverted, // user op reverted. still has to pay for gas. + postOpReverted //user op succeeded, but caused postOp to revert. Now its a 2nd call, after user's op was deliberately reverted. + } +} diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/IWallet.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/IWallet.sol new file mode 100644 index 000000000..0cd659df4 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/references/aa-4337/IWallet.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.0; + +import "./UserOperation.sol"; + +interface IWallet { + + /** + * Validate user's signature and nonce + * the entryPoint will make the call to the recipient only if this validation call returns successfuly. + * + * @dev Must validate caller is the entryPoint. + * Must validate the signature and nonce + * @param userOp the operation that is about to be executed. + * @param requestId hash of the user's request data. can be used as the basis for signature. + * @param requiredPrefund the minimum amount to transfer to the sender(entryPoint) to be able to make the call. + * The excess is left as a deposit in the entrypoint, for future calls. + * can be withdrawn anytime using "entryPoint.withdrawTo()" + * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero. + */ + function validateUserOp(UserOperation calldata userOp, bytes32 requestId, uint requiredPrefund) external; +} diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/SimpleWallet.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/SimpleWallet.sol new file mode 100644 index 000000000..e0708b4b8 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/references/aa-4337/SimpleWallet.sol @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.0; + +import "./IWallet.sol"; +import "./EntryPoint.sol"; +import "./ECDSA.sol"; +import "hardhat/console.sol"; + +//minimal wallet +// this is sample minimal wallet. +// has execute, eth handling methods +// has a single signer that can send requests through the entryPoint. +contract SimpleWallet is IWallet { + using ECDSA for bytes32; + using UserOperationLib for UserOperation; + struct OwnerNonce { + uint96 nonce; + address owner; + } + + OwnerNonce ownerNonce; + EntryPoint public entryPoint; + + function nonce() public view returns (uint) { + return ownerNonce.nonce; + } + + function owner() public view returns (address) { + return ownerNonce.owner; + } + + event EntryPointChanged(EntryPoint oldEntryPoint, EntryPoint newEntryPoint); + + receive() external payable {} + + constructor(EntryPoint _entryPoint, address _owner) { + entryPoint = _entryPoint; + ownerNonce.owner = _owner; + } + + modifier onlyOwner() { + _onlyOwner(); + _; + } + + function _onlyOwner() internal view { + //directly from EOA owner, or through the entryPoint (which gets redirected through execFromEntryPoint) + require(msg.sender == ownerNonce.owner || msg.sender == address(this), "only owner"); + } + + function transfer(address payable dest, uint amount) external onlyOwner { + dest.transfer(amount); + } + + function exec(address dest, uint value, bytes calldata func) external onlyOwner { + _call(dest, value, func); + } + + function execBatch(address[] calldata dest, bytes[] calldata func) external onlyOwner { + require(dest.length == func.length, "wrong array lengths"); + for (uint i = 0; i < dest.length; i++) { + _call(dest[i], 0, func[i]); + } + } + + function updateEntryPoint(EntryPoint _entryPoint) external onlyOwner { + emit EntryPointChanged(entryPoint, _entryPoint); + entryPoint = _entryPoint; + } + + function _requireFromEntryPoint() internal view { + require(msg.sender == address(entryPoint), "wallet: not from EntryPoint"); + } + + function validateUserOp(UserOperation calldata userOp, bytes32 requestId, uint requiredPrefund) external override { + _requireFromEntryPoint(); + _validateSignature(userOp, requestId); + _validateAndIncrementNonce(userOp); + _payPrefund(requiredPrefund); + } + + function _payPrefund(uint requiredPrefund) internal { + if (requiredPrefund != 0) { + //pay required prefund. make sure NOT to use the "gas" opcode, which is banned during validateUserOp + // (and used by default by the "call") + (bool success,) = payable(msg.sender).call{value : requiredPrefund, gas : type(uint).max}(""); + (success); + //ignore failure (its EntryPoint's job to verify, not wallet.) + } + } + + //called by entryPoint, only after validateUserOp succeeded. + function execFromEntryPoint(address dest, uint value, bytes calldata func) external { + _requireFromEntryPoint(); + _call(dest, value, func); + } + + function _validateAndIncrementNonce(UserOperation calldata userOp) internal { + //during construction, the "nonce" field hold the salt. + // if we assert it is zero, then we allow only a single wallet per owner. + if (userOp.initCode.length == 0) { + require(ownerNonce.nonce++ == userOp.nonce, "wallet: invalid nonce"); + } + } + + function _validateSignature(UserOperation calldata userOp, bytes32 requestId) internal view { + bytes32 hash = requestId.toEthSignedMessageHash(); + require(owner() == hash.recover(userOp.signature), "wallet: wrong signature"); + } + + function _call(address sender, uint value, bytes memory data) internal { + (bool success, bytes memory result) = sender.call{value : value}(data); + if (!success) { + assembly { + revert(add(result,32), mload(result)) + } + } + } + + function getDeposit() public view returns (uint) { + return entryPoint.balanceOf(address(this)); + } + + function addDeposit() public payable { + + (bool req,) = address(entryPoint).call{value : msg.value}(""); + require(req); + } + + function withdrawDepositTo(address payable withdrawAddress, uint amount) public onlyOwner{ + entryPoint.withdrawTo(withdrawAddress, amount); + } +} diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/StakeManager.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/StakeManager.sol new file mode 100644 index 000000000..23bd93c8c --- /dev/null +++ b/packages/ethers-lib/scw-contracts/references/aa-4337/StakeManager.sol @@ -0,0 +1,145 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.0; + +import "hardhat/console.sol"; + +/** + * manage deposit of sender or paymaster, to pay for gas. + * paymaster must stake some of the deposit. + */ +contract StakeManager { + + /// minimum number of blocks to after 'unlock' before amount can be withdrawn. + uint32 immutable public unstakeDelaySec; + + constructor(uint32 _unstakeDelaySec) { + unstakeDelaySec = _unstakeDelaySec; + } + + event Deposited( + address indexed account, + uint256 totalDeposit, + uint256 unstakeDelaySec + ); + + + /// Emitted once a stake is scheduled for withdrawal + event DepositUnstaked( + address indexed account, + uint256 withdrawTime + ); + + event Withdrawn( + address indexed account, + address withdrawAddress, + uint256 withdrawAmount + ); + + /// @param amount of ether deposited for this account + /// @param unstakeDelaySec - time the deposit is locked, after calling unlock (or zero if deposit is not locked) + /// @param withdrawTime - first block timestamp where 'withdrawTo' will be callable, or zero if not locked + struct DepositInfo { + uint112 amount; + uint32 unstakeDelaySec; + uint64 withdrawTime; + } + + /// maps accounts to their deposits + mapping(address => DepositInfo) public deposits; + + function getDepositInfo(address account) external view returns (DepositInfo memory info) { + return deposits[account]; + } + + function balanceOf(address account) public view returns (uint) { + return deposits[account].amount; + } + + receive() external payable { + depositTo(msg.sender); + } + + function internalIncrementDeposit(address account, uint amount) internal { + deposits[account].amount += uint112(amount); + } + + function internalDecrementDeposit(address account, uint amount) internal { + deposits[account].amount -= uint112(amount); + } + + /** + * add to the deposit of the given account + */ + function depositTo(address account) public payable { + internalIncrementDeposit(account, msg.value); + DepositInfo storage info = deposits[account]; + emit Deposited(msg.sender, info.amount, info.unstakeDelaySec); + } + + /** + * stake the account's deposit. + * any pending unstakeDeposit is first cancelled. + * can also set (or increase) the deposit with call. + * @param _unstakeDelaySec the new lock time before the deposit can be withdrawn. + */ + function addStakeTo(address account, uint32 _unstakeDelaySec) public payable { + DepositInfo storage info = deposits[account]; + require(_unstakeDelaySec >= info.unstakeDelaySec, "cannot decrease unstake time"); + uint112 amount = deposits[msg.sender].amount + uint112(msg.value); + deposits[account] = DepositInfo( + amount, + _unstakeDelaySec, + 0); + emit Deposited(account, amount, _unstakeDelaySec); + } + + /** + * attempt to unstake the deposit. + * the value can be withdrawn (using withdrawTo) after the unstake delay. + */ + function unstakeDeposit() external { + DepositInfo storage info = deposits[msg.sender]; + require(info.withdrawTime == 0, "already unstaking"); + require(info.unstakeDelaySec != 0, "not staked"); + uint64 withdrawTime = uint64(block.timestamp) + info.unstakeDelaySec; + info.withdrawTime = withdrawTime; + emit DepositUnstaked(msg.sender, withdrawTime); + } + + /** + * withdraw from the deposit. + * will fail if the deposit is already staked or too low. + * after a paymaster unlocks and withdraws some of the value, it must call addStake() to stake the value again. + * @param withdrawAddress the address to send withdrawn value. + * @param withdrawAmount the amount to withdraw. + */ + function withdrawTo(address payable withdrawAddress, uint withdrawAmount) external { + DepositInfo memory info = deposits[msg.sender]; + if (info.unstakeDelaySec != 0) { + require(info.withdrawTime > 0, "must call unstakeDeposit() first"); + require(info.withdrawTime <= block.timestamp, "Withdrawal is not due"); + } + require(withdrawAmount <= info.amount, "Withdraw amount too large"); + + // store the remaining value, with stake info cleared. + deposits[msg.sender] = DepositInfo( + info.amount - uint112(withdrawAmount), + 0, + 0); + withdrawAddress.transfer(withdrawAmount); + emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount); + } + + /** + * check if the given account is staked and didn't unlock it yet. + * @param account the account (paymaster) to check + * @param requiredStake the minimum deposit + * @param requiredDelaySec the minimum required stake time. + */ + function isStaked(address account, uint requiredStake, uint requiredDelaySec) public view returns (bool) { + DepositInfo memory info = deposits[account]; + return info.amount >= requiredStake && + info.unstakeDelaySec >= requiredDelaySec && + info.withdrawTime == 0; + } +} diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/UserOperation.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/UserOperation.sol new file mode 100644 index 000000000..3955365c8 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/references/aa-4337/UserOperation.sol @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.0; + +import "hardhat/console.sol"; + + struct UserOperation { + + address sender; + uint256 nonce; + bytes initCode; + bytes callData; + uint callGas; + uint verificationGas; + uint preVerificationGas; + uint maxFeePerGas; + uint maxPriorityFeePerGas; + address paymaster; + bytes paymasterData; + bytes signature; + } + +library UserOperationLib { + + function getSender(UserOperation calldata userOp) internal pure returns (address ret) { + assembly {ret := calldataload(userOp)} + } + + //relayer/miner might submit the TX with higher priorityFee, but the user should not + // pay above what he signed for. + function gasPrice(UserOperation calldata userOp) internal view returns (uint) { + unchecked { + uint maxFeePerGas = userOp.maxFeePerGas; + uint maxPriorityFeePerGas = userOp.maxPriorityFeePerGas; + if (maxFeePerGas == maxPriorityFeePerGas) { + //legacy mode (for networks that don't support basefee opcode) + return min(tx.gasprice, maxFeePerGas); + } + return min(tx.gasprice, min(maxFeePerGas, maxPriorityFeePerGas + block.basefee)); + } + } + + function requiredGas(UserOperation calldata userOp) internal pure returns (uint) { + unchecked { + //when using a Paymaster, the verificationGas is used also to cover the postOp call. + // our security model might call postOp eventually twice + uint mul = userOp.paymaster != address(0) ? 1 : 3; + return userOp.callGas + userOp.verificationGas * mul + userOp.preVerificationGas; + } + } + + function requiredPreFund(UserOperation calldata userOp) internal view returns (uint prefund) { + unchecked { + return requiredGas(userOp) * gasPrice(userOp); + } + } + + function hasPaymaster(UserOperation calldata userOp) internal pure returns (bool) { + return userOp.paymaster != address(0); + } + + function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) { + //lighter signature scheme. must match UserOp.ts#packUserOp + bytes calldata sig = userOp.signature; + assembly { + let ofs := userOp + let len := sub(sub(sig.offset, ofs), 32) + ret := mload(0x40) + mstore(0x40, add(ret, add(len, 32))) + mstore(ret, len) + calldatacopy(add(ret, 32), ofs, len) + } + return ret; + } + + function hash(UserOperation calldata userOp) internal pure returns (bytes32) { + return keccak256(pack(userOp)); + } + + function min(uint a, uint b) internal pure returns (uint) { + return a < b ? a : b; + } +} diff --git a/packages/ethers-lib/scw-contracts/references/factory/SingletonFactory.sol b/packages/ethers-lib/scw-contracts/references/factory/SingletonFactory.sol new file mode 100644 index 000000000..fd8e89ac7 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/references/factory/SingletonFactory.sol @@ -0,0 +1,34 @@ +/** + *Submitted for verification at Etherscan.io on 2020-03-30 +*/ +/* https://eips.ethereum.org/EIPS/eip-2470 */ + +pragma solidity ^0.8.0; + + +/** + * @title Singleton Factory (EIP-2470) + * @notice Exposes CREATE2 (EIP-1014) to deploy bytecode on deterministic addresses based on initialization code and salt. + * @author Ricardo Guilherme Schmidt (Status Research & Development GmbH) + */ +contract SingletonFactory { + event Deployed(address addr, uint256 salt); + /** + * @notice Deploys `_initCode` using `_salt` for defining the deterministic address. + * @param _initCode Initialization code. + * @param _salt Arbitrary value to modify resulting address. + * @return createdContract Created contract address. + */ + function deploy(bytes memory _initCode, uint256 _salt) + public + returns (address payable createdContract) + { + // solhint-disable-next-line no-inline-assembly + assembly { + createdContract := create2(0, add(_initCode, 0x20), mload(_initCode), _salt) + } + emit Deployed(createdContract, _salt); + } +} +// IV is a value changed to generate the vanity address. +// IV: 6583047 \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/IWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/IWallet.sol new file mode 100644 index 000000000..512efdfa2 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/IWallet.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.0; + +import "./libs/UserOperation.sol"; + +interface IWallet { + + /** + * Validate user's signature and nonce + * the entryPoint will make the call to the recipient only if this validation call returns successfuly. + * + * @dev Must validate caller is the entryPoint. + * Must validate the signature and nonce + * @param userOp the operation that is about to be executed. + * @param requestId hash of the user's request data. can be used as the basis for signature. + * @param requiredPrefund the minimum amount to transfer to the sender(entryPoint) to be able to make the call. + * The excess is left as a deposit in the entrypoint, for future calls. + * can be withdrawn anytime using "entryPoint.withdrawTo()" + * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero. + */ + function validateUserOp(UserOperation calldata userOp, bytes32 requestId, uint requiredPrefund) external; +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/Proxy.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/Proxy.sol new file mode 100644 index 000000000..6d2defc36 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/Proxy.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +/** + * @title Proxy // This is the user's wallet + * @notice Basic proxy that delegates all calls to a fixed implementing contract. + */ +contract Proxy { + + /* This is the keccak-256 hash of "biconomy.scw.proxy.implementation" subtracted by 1, and is validated in the constructor */ + bytes32 internal constant _IMPLEMENTATION_SLOT = 0x37722d148fb373b961a84120b6c8d209709b45377878a466db32bbc40d95af26; + + event Received(uint indexed value, address indexed sender, bytes data); + + constructor(address _implementation) { + assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("biconomy.scw.proxy.implementation")) - 1)); + assembly { + sstore(_IMPLEMENTATION_SLOT,_implementation) + } + } + + fallback() external payable { + address target; + // solhint-disable-next-line no-inline-assembly + assembly { + target := sload(_IMPLEMENTATION_SLOT) + calldatacopy(0, 0, calldatasize()) + let result := delegatecall(gas(), target, 0, calldatasize(), 0, 0) + returndatacopy(0, 0, returndatasize()) + switch result + case 0 {revert(0, returndatasize())} + default {return (0, returndatasize())} + } + } + + receive() external payable { + emit Received(msg.value, msg.sender, ""); + } + +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol new file mode 100644 index 000000000..2b4141f4b --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol @@ -0,0 +1,425 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +//TODO +//review Base licensing +//https://spdx.org/licenses/ + +import "./libs/LibAddress.sol"; +import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "./IWallet.sol"; +import "./common/Singleton.sol"; +import "./storage/WalletStorage.sol"; +import "./base/ModuleManager.sol"; +import "./base/FallbackManager.sol"; +import "./common/SignatureDecoder.sol"; +// import "./common/Hooks.sol"; +import "./common/SecuredTokenTransfer.sol"; +import "./interfaces/ISignatureValidator.sol"; +import "./interfaces/IERC165.sol"; +import "./libs/SafeMath.sol"; +import "./libs/ECDSA.sol"; + +// Hooks not made a base yet +contract SmartWallet is + Singleton, + IWallet, + IERC165, + WalletStorage, + ModuleManager, + SignatureDecoder, + SecuredTokenTransfer, + ISignatureValidatorConstants, + FallbackManager, + Initializable + { + using ECDSA for bytes32; + using LibAddress for address; + using SafeMath for uint256; + + event ImplementationUpdated(address newImplementation); + event ExecutionFailure(bytes32 txHash, uint256 payment); + event ExecutionSuccess(bytes32 txHash, uint256 payment); + event EntryPointChanged(address oldEntryPoint, address newEntryPoint); + event EOAChanged(address indexed _scw, address indexed _oldEOA, address indexed _newEOA); + + // modifiers + // onlyOwner + /** + * @notice Throws if the sender is not an the owner. + */ + modifier onlyOwner { + require(msg.sender == owner, "Smart Account:: Sender is not authorized"); + _; + } + + // onlyOwner OR self + modifier mixedAuth { + require(msg.sender == owner || msg.sender == address(this),"Only owner or self"); + _; + } + + // @notice authorized modifier (onlySelf) is already inherited + + // Setters + + function setOwner(address _newOwner) external mixedAuth { + require(_newOwner != address(0), "Smart Account:: new Signatory address cannot be zero"); + owner = _newOwner; + emit EOAChanged(address(this),owner,_newOwner); + } + + /** + * @notice Updates the implementation of the base wallet + * @param _implementation New wallet implementation + */ + function updateImplementation(address _implementation) external mixedAuth { + require(_implementation.isContract(), "INVALID_IMPLEMENTATION"); + _setImplementation(_implementation); + emit ImplementationUpdated(_implementation); + } + + function updateEntryPoint(address _entryPoint) external mixedAuth { + require(_entryPoint != address(0), "Smart Account:: new entry point address cannot be zero"); + emit EntryPointChanged(entryPoint, _entryPoint); + entryPoint = _entryPoint; + } + + // Getters + + function domainSeparator() public view returns (bytes32) { + return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this)); + } + + /// @dev Returns the chain id used by this contract. + function getChainId() public view returns (uint256) { + uint256 id; + // solhint-disable-next-line no-inline-assembly + assembly { + id := chainid() + } + return id; + } + + /** + * @dev returns a value from the nonces 2d mapping + * @param batchId : the key of the user's batch being queried + * @return nonce : the number of transaction made within said batch + */ + function getNonce(uint256 batchId) + public view + returns (uint256) { + return nonces[batchId]; + } + + // Initialize / Setup + // Used to setup + // i. owner ii. entry point iii. handlers + function init(address _owner, address _entryPoint, address _handler) public initializer { + require(owner == address(0), "Already initialized"); + require(entryPoint == address(0), "Already initialized"); + owner = _owner; + entryPoint = _entryPoint; + if (_handler != address(0)) internalSetFallbackHandler(_handler); + setupModules(address(0), bytes("")); + } + + // @review 2D nonces and args as default batchId 0 is always used + // TODO : Update description + // TODO : Add batchId and update in test cases, utils etc + // Gnosis style transaction with optional repay in native tokens OR ERC20 + /// @dev Allows to execute a Safe transaction confirmed by required number of owners and then pays the account that submitted the transaction. + /// Note: The fees are always transferred, even if the user transaction fails. + /// @param _tx Wallet transaction + /// @param batchId batchId key for 2D nonces + /// @param refundInfo Required information for gas refunds + /// @param signatures Packed signature data ({bytes32 r}{bytes32 s}{uint8 v}) + function execTransaction( + Transaction memory _tx, + uint256 batchId, + FeeRefund memory refundInfo, + bytes memory signatures + ) public payable virtual returns (bool success) { + bytes32 txHash; + // Use scope here to limit variable lifetime and prevent `stack too deep` errors + { + bytes memory txHashData = + encodeTransactionData( + // Transaction info + _tx, + // Payment info + refundInfo, + // Signature info + nonces[batchId] + ); + // Increase nonce and execute transaction. + // Default space aka batchId is 0 + nonces[batchId]++; + txHash = keccak256(txHashData); + checkSignatures(txHash, txHashData, signatures); + } + + + // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500) + // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150 + require(gasleft() >= ((_tx.safeTxGas * 64) / 63).max(_tx.safeTxGas + 2500) + 500, "BSA010"); + // Use scope here to limit variable lifetime and prevent `stack too deep` errors + { + uint256 gasUsed = gasleft(); + // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than safeTxGas) + // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than safeTxGas + success = execute(_tx.to, _tx.value, _tx.data, _tx.operation, refundInfo.gasPrice == 0 ? (gasleft() - 2500) : _tx.safeTxGas); + gasUsed = gasUsed.sub(gasleft()); + // If no safeTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful + // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert + require(success || _tx.safeTxGas != 0 || refundInfo.gasPrice != 0, "BSA013"); + // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls + uint256 payment = 0; + if (refundInfo.gasPrice > 0) { + payment = handlePayment(gasUsed, refundInfo.baseGas, refundInfo.gasPrice, refundInfo.gasToken, refundInfo.refundReceiver); + } + if (success) emit ExecutionSuccess(txHash, payment); + else emit ExecutionFailure(txHash, payment); + } + } + + function handlePayment( + uint256 gasUsed, + uint256 baseGas, + uint256 gasPrice, + address gasToken, + address payable refundReceiver + ) private returns (uint256 payment) { + // solhint-disable-next-line avoid-tx-origin + address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver; + if (gasToken == address(0)) { + // For ETH we will only adjust the gas price to not be higher than the actual used gas price + payment = gasUsed.add(baseGas).mul(gasPrice < tx.gasprice ? gasPrice : tx.gasprice); + require(receiver.send(payment), "BSA011"); + } else { + payment = gasUsed.add(baseGas).mul(gasPrice); + require(transferToken(gasToken, receiver, payment), "BSA012"); + } + } + + // @review + /** + * @dev Checks whether the signature provided is valid for the provided data, hash. Will revert otherwise. + * @param dataHash Hash of the data (could be either a message hash or transaction hash) + * @param signatures Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash. + */ + function checkSignatures( + bytes32 dataHash, + bytes memory data, + bytes memory signatures + ) public view { + uint8 v; + bytes32 r; + bytes32 s; + uint256 i = 0; + address _signer; + (v, r, s) = signatureSplit(signatures, i); + // review if necessary v = 1 + // review sig verification from other wallets + if(v == 0) { + // If v is 0 then it is a contract signature + // When handling contract signatures the address of the contract is encoded into r + _signer = address(uint160(uint256(r))); + + // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes + // This check is not completely accurate, since it is possible that more signatures than the threshold are send. + // Here we only check that the pointer is not pointing inside the part that is being processed + require(uint256(s) >= uint256(1).mul(65), "BSA021"); + + // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes) + require(uint256(s).add(32) <= signatures.length, "BSA022"); + + // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length + uint256 contractSignatureLen; + // solhint-disable-next-line no-inline-assembly + assembly { + contractSignatureLen := mload(add(add(signatures, s), 0x20)) + } + require(uint256(s).add(32).add(contractSignatureLen) <= signatures.length, "BSA023"); + + // Check signature + bytes memory contractSignature; + // solhint-disable-next-line no-inline-assembly + assembly { + // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s + contractSignature := add(add(signatures, s), 0x20) + } + require(ISignatureValidator(_signer).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, "BSA024"); + } + else if(v > 30) { + // If v > 30 then default va (27,28) has been adjusted for eth_sign flow + // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover + _signer = ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", dataHash)), v - 4, r, s); + require(_signer == owner, "INVALID_SIGNATURE"); + } else { + _signer = ecrecover(dataHash, v, r, s); + require(_signer == owner, "INVALID_SIGNATURE"); + } + } + + + /// @dev Returns hash to be signed by owners. + /// @param to Destination address. + /// @param value Ether value. + /// @param data Data payload. + /// @param operation Operation type. + /// @param safeTxGas Fas that should be used for the safe transaction. + /// @param baseGas Gas costs for data used to trigger the safe transaction. + /// @param gasPrice Maximum gas price that should be used for this transaction. + /// @param gasToken Token address (or 0 if ETH) that is used for the payment. + /// @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin). + /// @param _nonce Transaction nonce. + /// @return Transaction hash. + function getTransactionHash( + address to, + uint256 value, + bytes calldata data, + Enum.Operation operation, + uint256 safeTxGas, + uint256 baseGas, + uint256 gasPrice, + address gasToken, + address payable refundReceiver, + uint256 _nonce + ) public view returns (bytes32) { + Transaction memory _tx = Transaction({ + to: to, + value: value, + data: data, + operation: operation, + safeTxGas: safeTxGas + }); + FeeRefund memory refundInfo = FeeRefund({ + baseGas: baseGas, + gasPrice: gasPrice, + gasToken: gasToken, + refundReceiver: refundReceiver + }); + return keccak256(encodeTransactionData(_tx, refundInfo, _nonce)); + } + + + /// @dev Returns the bytes that are hashed to be signed by owner. + /// @param _tx Wallet transaction + /// @param refundInfo Required information for gas refunds + /// @param _nonce Transaction nonce. + /// @return Transaction hash bytes. + function encodeTransactionData( + Transaction memory _tx, + FeeRefund memory refundInfo, + uint256 _nonce + ) public view returns (bytes memory) { + bytes32 safeTxHash = + keccak256( + abi.encode( + SAFE_TX_TYPEHASH, + _tx.to, + _tx.value, + keccak256(_tx.data), + _tx.operation, + _tx.safeTxGas, + refundInfo.baseGas, + refundInfo.gasPrice, + refundInfo.gasToken, + refundInfo.refundReceiver, + _nonce + ) + ); + return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash); + } + + // Extra Utils + + function transfer(address payable dest, uint amount) external onlyOwner { + dest.transfer(amount); + } + + function pullTokens(address token, address dest, uint256 amount) external onlyOwner { + IERC20 tokenContract = IERC20(token); + tokenContract.transfer(dest, amount); + } + + function exec(address dest, uint value, bytes calldata func) external onlyOwner{ + _call(dest, value, func); + } + + function execBatch(address[] calldata dest, bytes[] calldata func) external onlyOwner{ + require(dest.length == func.length, "wrong array lengths"); + for (uint i = 0; i < dest.length; i++) { + _call(dest[i], 0, func[i]); + } + } + + // AA implementation + function _call(address sender, uint value, bytes memory data) internal { + // @review linter + (bool success, bytes memory result) = sender.call{value : value}(data); + if (!success) { + // solhint-disable-next-line no-inline-assembly + assembly { + revert(add(result,32), mload(result)) + } + } + } + + function _requireFromEntryPoint() internal view { + require(msg.sender == address(entryPoint), "wallet: not from EntryPoint"); + } + + //called by entryPoint, only after validateUserOp succeeded. + function execFromEntryPoint(address dest, uint value, bytes calldata func) external { + _requireFromEntryPoint(); + _call(dest, value, func); + } + + function validateUserOp(UserOperation calldata userOp, bytes32 requestId, uint requiredPrefund) external override { + _requireFromEntryPoint(); + _validateSignature(userOp, requestId); + _validateAndIncrementNonce(userOp); + _payPrefund(requiredPrefund); + } + + // review nonce conflict with AA userOp nonce + // userOp can omit nonce or have batchId as well! + function _validateAndIncrementNonce(UserOperation calldata userOp) internal { + //during construction, the "nonce" field hold the salt. + // if we assert it is zero, then we allow only a single wallet per owner. + if (userOp.initCode.length == 0) { + require(nonces[0]++ == userOp.nonce, "wallet: invalid nonce"); + } + // default batchId aka space 0 for any wallet + } + + function _payPrefund(uint requiredPrefund) internal { + if (requiredPrefund != 0) { + //pay required prefund. make sure NOT to use the "gas" opcode, which is banned during validateUserOp + // (and used by default by the "call") + // @review linter + (bool success,) = payable(msg.sender).call{value : requiredPrefund, gas : type(uint).max}(""); + (success); + //ignore failure (its EntryPoint's job to verify, not wallet.) + } + } + + function _validateSignature(UserOperation calldata userOp, bytes32 requestId) internal view { + bytes32 hash = requestId.toEthSignedMessageHash(); + require(owner == hash.recover(userOp.signature), "wallet: wrong signature"); + } + + + /** + * @notice Query if a contract implements an interface + * @param interfaceId The interface identifier, as specified in ERC165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) { + return interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7 + } + +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/WalletFactory.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/WalletFactory.sol new file mode 100644 index 000000000..6fc500603 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/WalletFactory.sol @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +//import "@openzeppelin/contracts/proxy/Clones.sol"; +import "./Proxy.sol"; +import "./SmartWallet.sol"; +//@review +//possibly IWallet.sol + +contract WalletFactory { + address internal _defaultImpl; + + //states : registry + mapping (address => bool) public isWalletExist; + + constructor(address _baseImpl) { + _defaultImpl = _baseImpl; + } + + event WalletCreated(address indexed _proxy, address indexed _implementation, address indexed _owner); + + /** + * @notice Deploys wallet using create2 and points it to _defaultImpl + * @param _owner EOA signatory of the wallet + * @param _entryPoint AA 4337 entry point address + * @param _handler fallback handler address + * @param _index extra salt that allows to deploy more wallets if needed for same EOA (default 0) + */ + function deployCounterFactualWallet(address _owner, address _entryPoint, address _handler, uint _index) public returns(address proxy){ + bytes32 salt = keccak256(abi.encodePacked(_owner, address(uint160(_index)))); + bytes memory deploymentData = abi.encodePacked(type(Proxy).creationCode, uint(uint160(_defaultImpl))); + // solhint-disable-next-line no-inline-assembly + assembly { + proxy := create2(0x0, add(0x20, deploymentData), mload(deploymentData), salt) + } + require(address(proxy) != address(0), "Create2 call failed"); + emit WalletCreated(proxy,_defaultImpl,_owner); + SmartWallet(proxy).init(_owner, _entryPoint, _handler); + isWalletExist[proxy] = true; + } + + /** + * @notice Deploys wallet using create and points it to _defaultImpl + * @param _owner EOA signatory of the wallet + * @param _entryPoint AA 4337 entry point address + * @param _handler fallback handler address + */ + function deployWallet(address _owner, address _entryPoint, address _handler) public returns(address proxy){ + bytes memory deploymentData = abi.encodePacked(type(Proxy).creationCode, uint(uint160(_defaultImpl))); + // solhint-disable-next-line no-inline-assembly + assembly { + proxy := create(0x0, add(0x20, deploymentData), mload(deploymentData)) + } + emit WalletCreated(proxy,_defaultImpl,_owner); + SmartWallet(proxy).init(_owner, _entryPoint, _handler); + isWalletExist[proxy] = true; + } + + /** + * @notice Allows to find out wallet address prior to deployment + * @param _owner EOA signatory of the wallet + * @param _index extra salt that allows to deploy more wallets if needed for same EOA (default 0) + */ + function getAddressForCounterfactualWallet(address _owner, uint _index) external view returns (address _wallet) { + bytes memory code = abi.encodePacked(type(Proxy).creationCode, uint(uint160(_defaultImpl))); + bytes32 salt = keccak256(abi.encodePacked(_owner, address(uint160(_index)))); + bytes32 hash = keccak256(abi.encodePacked(bytes1(0xff), address(this), salt, keccak256(code))); + _wallet = address(uint160(uint(hash))); + } + +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Executor.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Executor.sol new file mode 100644 index 000000000..df53624da --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Executor.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +import "../common/Enum.sol"; + +/// @title Executor - A contract that can execute transactions +contract Executor { + function execute( + address to, + uint256 value, + bytes memory data, + Enum.Operation operation, + uint256 txGas + ) internal returns (bool success) { + if (operation == Enum.Operation.DelegateCall) { + // solhint-disable-next-line no-inline-assembly + assembly { + success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0) + } + } else { + // solhint-disable-next-line no-inline-assembly + assembly { + success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0) + } + } + } +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol new file mode 100644 index 000000000..722ee3552 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +import "../common/SelfAuthorized.sol"; + +/// @title Fallback Manager - A contract that manages fallback calls made to this contract +/// @author Richard Meissner - +contract FallbackManager is SelfAuthorized { + event ChangedFallbackHandler(address handler); + + // keccak256("fallback_manager.handler.address") + bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5; + + function internalSetFallbackHandler(address handler) internal { + bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT; + // solhint-disable-next-line no-inline-assembly + assembly { + sstore(slot, handler) + } + } + + /// @dev Allows to add a contract to handle fallback calls. + /// Only fallback calls without value and with data will be forwarded. + /// This can only be done via a Safe transaction. + /// @param handler contract to handle fallback calls. + function setFallbackHandler(address handler) public authorized { + internalSetFallbackHandler(handler); + emit ChangedFallbackHandler(handler); + } + + // solhint-disable-next-line payable-fallback,no-complex-fallback + fallback() external { + bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT; + // solhint-disable-next-line no-inline-assembly + assembly { + let handler := sload(slot) + if iszero(handler) { + return(0, 0) + } + calldatacopy(0, 0, calldatasize()) + // The msg.sender address is shifted to the left by 12 bytes to remove the padding + // Then the address without padding is stored right after the calldata + mstore(calldatasize(), shl(96, caller())) + // Add 20 bytes for the address appended add the end + let success := call(gas(), handler, 0, 0, add(calldatasize(), 20), 0, 0) + returndatacopy(0, 0, returndatasize()) + if iszero(success) { + revert(0, returndatasize()) + } + return(0, returndatasize()) + } + } +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Module.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Module.sol new file mode 100644 index 000000000..808b4d5c8 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Module.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Module { + +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol new file mode 100644 index 000000000..40b645d71 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +import "../common/Enum.sol"; +import "../common/SelfAuthorized.sol"; +import "./Executor.sol"; + +/// @title Module Manager - A contract that manages modules that can execute transactions via this contract +contract ModuleManager is SelfAuthorized, Executor { + // Events + event EnabledModule(address module); + event DisabledModule(address module); + event ExecutionFromModuleSuccess(address indexed module); + event ExecutionFromModuleFailure(address indexed module); + + address internal constant SENTINEL_MODULES = address(0x1); + + mapping(address => address) internal modules; + + function setupModules(address to, bytes memory data) internal { + require(modules[SENTINEL_MODULES] == address(0), "BSA100"); + modules[SENTINEL_MODULES] = SENTINEL_MODULES; + if (to != address(0)) + // Setup has to complete successfully or transaction fails. + require(execute(to, 0, data, Enum.Operation.DelegateCall, gasleft()), "BSA000"); + } + + /// @dev Allows to add a module to the whitelist. + /// This can only be done via a Safe transaction. + /// @notice Enables the module `module` for the Safe. + /// @param module Module to be whitelisted. + function enableModule(address module) public authorized { + // Module address cannot be null or sentinel. + require(module != address(0) && module != SENTINEL_MODULES, "BSA101"); + // Module cannot be added twice. + require(modules[module] == address(0), "BSA102"); + modules[module] = modules[SENTINEL_MODULES]; + modules[SENTINEL_MODULES] = module; + emit EnabledModule(module); + } + + /// @dev Allows to remove a module from the whitelist. + /// This can only be done via a Safe transaction. + /// @notice Disables the module `module` for the Safe. + /// @param prevModule Module that pointed to the module to be removed in the linked list + /// @param module Module to be removed. + function disableModule(address prevModule, address module) public authorized { + // Validate module address and check that it corresponds to module index. + require(module != address(0) && module != SENTINEL_MODULES, "BSA101"); + require(modules[prevModule] == module, "BSA103"); + modules[prevModule] = modules[module]; + modules[module] = address(0); + emit DisabledModule(module); + } + + /// @dev Allows a Module to execute a Safe transaction without any further confirmations. + /// @param to Destination address of module transaction. + /// @param value Ether value of module transaction. + /// @param data Data payload of module transaction. + /// @param operation Operation type of module transaction. + function execTransactionFromModule( + address to, + uint256 value, + bytes memory data, + Enum.Operation operation + ) public virtual returns (bool success) { + // Only whitelisted modules are allowed. + require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), "BSA104"); + // Execute transaction without further confirmations. + success = execute(to, value, data, operation, gasleft()); + if (success) emit ExecutionFromModuleSuccess(msg.sender); + else emit ExecutionFromModuleFailure(msg.sender); + } + + /// @dev Allows a Module to execute a Safe transaction without any further confirmations and return data + /// @param to Destination address of module transaction. + /// @param value Ether value of module transaction. + /// @param data Data payload of module transaction. + /// @param operation Operation type of module transaction. + function execTransactionFromModuleReturnData( + address to, + uint256 value, + bytes memory data, + Enum.Operation operation + ) public returns (bool success, bytes memory returnData) { + success = execTransactionFromModule(to, value, data, operation); + // solhint-disable-next-line no-inline-assembly + assembly { + // Load free memory location + let ptr := mload(0x40) + // We allocate memory for the return data by setting the free memory location to + // current free memory location + data size + 32 bytes for data size value + mstore(0x40, add(ptr, add(returndatasize(), 0x20))) + // Store the size + mstore(ptr, returndatasize()) + // Store the data + returndatacopy(add(ptr, 0x20), 0, returndatasize()) + // Point the return data to the correct memory location + returnData := ptr + } + } + + /// @dev Returns if an module is enabled + /// @return True if the module is enabled + function isModuleEnabled(address module) public view returns (bool) { + return SENTINEL_MODULES != module && modules[module] != address(0); + } + + /// @dev Returns array of modules. Useful for a widget + /// @param start Start of the page. + /// @param pageSize Maximum number of modules that should be returned. + /// @return array Array of modules. + /// @return next Start of the next page. + function getModulesPaginated(address start, uint256 pageSize) external view returns (address[] memory array, address next) { + // Init array with max page size + array = new address[](pageSize); + + // Populate return array + uint256 moduleCount = 0; + address currentModule = modules[start]; + while (currentModule != address(0x0) && currentModule != SENTINEL_MODULES && moduleCount < pageSize) { + array[moduleCount] = currentModule; + currentModule = modules[currentModule]; + moduleCount++; + } + next = currentModule; + // Set correct size of returned array + // solhint-disable-next-line no-inline-assembly + assembly { + mstore(array, moduleCount) + } + } +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Enum.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Enum.sol new file mode 100644 index 000000000..844c4f6ae --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Enum.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +/// @title Enum - Collection of enums +contract Enum { + enum Operation {Call, DelegateCall} +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SecuredTokenTransfer.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SecuredTokenTransfer.sol new file mode 100644 index 000000000..c9d802fe6 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SecuredTokenTransfer.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +/// @title SecuredTokenTransfer - Secure token transfer +contract SecuredTokenTransfer { + /// @dev Transfers a token and returns if it was a success + /// @param token Token that should be transferred + /// @param receiver Receiver to whom the token should be transferred + /// @param amount The amount of tokens that should be transferred + function transferToken( + address token, + address receiver, + uint256 amount + ) internal returns (bool transferred) { + // 0xa9059cbb - keccack("transfer(address,uint256)") + // TODO + // Review for sig collision + bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount); + // solhint-disable-next-line no-inline-assembly + assembly { + // We write the return value to scratch space. + // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory + let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20) + switch returndatasize() + case 0 { + transferred := success + } + case 0x20 { + transferred := iszero(or(iszero(success), iszero(mload(0)))) + } + default { + transferred := 0 + } + } + } +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SelfAuthorized.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SelfAuthorized.sol new file mode 100644 index 000000000..6db989c0a --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SelfAuthorized.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +/// @title SelfAuthorized - authorizes current contract to perform actions +contract SelfAuthorized { + function requireSelfCall() private view { + require(msg.sender == address(this), "BSA031"); + } + + modifier authorized() { + // This is a function call as it minimized the bytecode size + requireSelfCall(); + _; + } +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SignatureDecoder.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SignatureDecoder.sol new file mode 100644 index 000000000..ddef0a780 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SignatureDecoder.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +/// @title SignatureDecoder - Decodes signatures that a encoded as bytes +contract SignatureDecoder { + /// @dev divides bytes signature into `uint8 v, bytes32 r, bytes32 s`. + /// @notice Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures + /// @param pos which signature to read. A prior bounds check of this parameter should be performed, to avoid out of bounds access + /// @param signatures concatenated rsv signatures + function signatureSplit(bytes memory signatures, uint256 pos) + internal + pure + returns ( + uint8 v, + bytes32 r, + bytes32 s + ) + { + // The signature format is a compact form of: + // {bytes32 r}{bytes32 s}{uint8 v} + // Compact means, uint8 is not padded to 32 bytes. + // solhint-disable-next-line no-inline-assembly + assembly { + let signaturePos := mul(0x41, pos) + r := mload(add(signatures, add(signaturePos, 0x20))) + s := mload(add(signatures, add(signaturePos, 0x40))) + // Here we are loading the last 32 bytes, including 31 bytes + // of 's'. There is no 'mload8' to do this. + // + // 'byte' is not working due to the Solidity parser, so lets + // use the second best option, 'and' + v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff) + } + } +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Singleton.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Singleton.sol new file mode 100644 index 000000000..60fb16006 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Singleton.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +/// @title Singleton - Base for singleton contracts (should always be first super contract) +/// This contract is tightly coupled to the proxy contract +contract Singleton { + // singleton slot always needs to be first declared variable, to ensure that it is at the same location as in the Proxy contract. + + /* This is the keccak-256 hash of "biconomy.scw.proxy.implementation" subtracted by 1 */ + bytes32 internal constant _IMPLEMENTATION_SLOT = 0x37722d148fb373b961a84120b6c8d209709b45377878a466db32bbc40d95af26; + + function _setImplementation(address _imp) internal { + assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("biconomy.scw.proxy.implementation")) - 1)); + // solhint-disable-next-line no-inline-assembly + assembly { + sstore(_IMPLEMENTATION_SLOT, _imp) + } + } + + function _getImplementation() internal view returns (address _imp) { + // solhint-disable-next-line no-inline-assembly + assembly { + _imp := sload(_IMPLEMENTATION_SLOT) + } + } + +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol new file mode 100644 index 000000000..be93b483c --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +import "../interfaces/ERC1155TokenReceiver.sol"; +import "../interfaces/ERC721TokenReceiver.sol"; +import "../interfaces/ERC777TokensRecipient.sol"; +import "../interfaces/IERC165.sol"; + +/// @title Default Callback Handler - returns true for known token callbacks +/// @author Richard Meissner - +contract DefaultCallbackHandler is ERC1155TokenReceiver, ERC777TokensRecipient, ERC721TokenReceiver, IERC165 { + string public constant NAME = "Default Callback Handler"; + string public constant VERSION = "1.0.0"; + + function onERC1155Received( + address, + address, + uint256, + uint256, + bytes calldata + ) external pure override returns (bytes4) { + return 0xf23a6e61; + } + + function onERC1155BatchReceived( + address, + address, + uint256[] calldata, + uint256[] calldata, + bytes calldata + ) external pure override returns (bytes4) { + return 0xbc197c81; + } + + function onERC721Received( + address, + address, + uint256, + bytes calldata + ) external pure override returns (bytes4) { + return 0x150b7a02; + } + + function tokensReceived( + address, + address, + address, + uint256, + bytes calldata, + bytes calldata + ) external pure override { + // We implement this for completeness, doesn't really have any value + } + + function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) { + return + interfaceId == type(ERC1155TokenReceiver).interfaceId || + interfaceId == type(ERC721TokenReceiver).interfaceId || + interfaceId == type(IERC165).interfaceId; + } +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC1155TokenReceiver.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC1155TokenReceiver.sol new file mode 100644 index 000000000..3ef82f5c8 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC1155TokenReceiver.sol @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +/** + Note: The ERC-165 identifier for this interface is 0x4e2312e0. +*/ +interface ERC1155TokenReceiver { + /** + @notice Handle the receipt of a single ERC1155 token type. + @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated. + This function MUST return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61) if it accepts the transfer. + This function MUST revert if it rejects the transfer. + Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller. + @param _operator The address which initiated the transfer (i.e. msg.sender) + @param _from The address which previously owned the token + @param _id The ID of the token being transferred + @param _value The amount of tokens being transferred + @param _data Additional data with no specified format + @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` + */ + function onERC1155Received( + address _operator, + address _from, + uint256 _id, + uint256 _value, + bytes calldata _data + ) external returns (bytes4); + + /** + @notice Handle the receipt of multiple ERC1155 token types. + @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated. + This function MUST return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81) if it accepts the transfer(s). + This function MUST revert if it rejects the transfer(s). + Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller. + @param _operator The address which initiated the batch transfer (i.e. msg.sender) + @param _from The address which previously owned the token + @param _ids An array containing ids of each token being transferred (order and length must match _values array) + @param _values An array containing amounts of each token being transferred (order and length must match _ids array) + @param _data Additional data with no specified format + @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` + */ + function onERC1155BatchReceived( + address _operator, + address _from, + uint256[] calldata _ids, + uint256[] calldata _values, + bytes calldata _data + ) external returns (bytes4); +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC721TokenReceiver.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC721TokenReceiver.sol new file mode 100644 index 000000000..b9fc82aba --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC721TokenReceiver.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02. +interface ERC721TokenReceiver { + /// @notice Handle the receipt of an NFT + /// @dev The ERC721 smart contract calls this function on the recipient + /// after a `transfer`. This function MAY throw to revert and reject the + /// transfer. Return of other than the magic value MUST result in the + /// transaction being reverted. + /// Note: the contract address is always the message sender. + /// @param _operator The address which called `safeTransferFrom` function + /// @param _from The address which previously owned the token + /// @param _tokenId The NFT identifier which is being transferred + /// @param _data Additional data with no specified format + /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` + /// unless throwing + function onERC721Received( + address _operator, + address _from, + uint256 _tokenId, + bytes calldata _data + ) external returns (bytes4); +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC777TokensRecipient.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC777TokensRecipient.sol new file mode 100644 index 000000000..aa88c5acc --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC777TokensRecipient.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +interface ERC777TokensRecipient { + function tokensReceived( + address operator, + address from, + address to, + uint256 amount, + bytes calldata data, + bytes calldata operatorData + ) external; +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC1271Wallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC1271Wallet.sol new file mode 100644 index 000000000..b51d0e782 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC1271Wallet.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.0; + +// Might not use this interface +interface IERC1271Wallet { + + /** + * @notice Verifies whether the provided signature is valid with respect to the provided data + * @dev MUST return the correct magic value if the signature provided is valid for the provided data + * > The bytes4 magic value to return when signature is valid is 0x20c13b0b : bytes4(keccak256("isValidSignature(bytes,bytes)") + * > This function MAY modify Ethereum's state + * @param _data Arbitrary length data signed on the behalf of address(this) + * @param _signature Signature byte array associated with _data + * @return magicValue Magic value 0x20c13b0b if the signature is valid and 0x0 otherwise + */ + function isValidSignature( + bytes calldata _data, + bytes calldata _signature) + external + view + returns (bytes4 magicValue); + + /** + * @notice Verifies whether the provided signature is valid with respect to the provided hash + * @dev MUST return the correct magic value if the signature provided is valid for the provided hash + * > The bytes4 magic value to return when signature is valid is 0x20c13b0b : bytes4(keccak256("isValidSignature(bytes,bytes)") + * > This function MAY modify Ethereum's state + * @param _hash keccak256 hash that was signed + * @param _signature Signature byte array associated with _data + * @return magicValue Magic value 0x20c13b0b if the signature is valid and 0x0 otherwise + */ + function isValidSignature( + bytes32 _hash, + bytes calldata _signature) + external + view + returns (bytes4 magicValue); +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC165.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC165.sol new file mode 100644 index 000000000..f7920c798 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC165.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol +interface IERC165 { + /** + * @dev Returns true if this contract implements the interface defined by + * `interfaceId`. See the corresponding + * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] + * to learn more about how these ids are created. + * + * This function call must use less than 30 000 gas. + */ + function supportsInterface(bytes4 interfaceId) external view returns (bool); +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ISignatureValidator.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ISignatureValidator.sol new file mode 100644 index 000000000..9856891c7 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ISignatureValidator.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +contract ISignatureValidatorConstants { + // bytes4(keccak256("isValidSignature(bytes,bytes)") + bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b; +} + +abstract contract ISignatureValidator is ISignatureValidatorConstants { + /** + * @dev Should return whether the signature provided is valid for the provided data + * @param _data Arbitrary length data signed on the behalf of address(this) + * @param _signature Signature byte array associated with _data + * + * MUST return the bytes4 magic value 0x20c13b0b when function passes. + * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5) + * MUST allow external calls + */ + function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4); +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/ECDSA.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/ECDSA.sol new file mode 100644 index 000000000..a74844189 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/ECDSA.sol @@ -0,0 +1,250 @@ +// SPDX-License-Identifier: MIT +// a copy of import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", with tiny modification: +// ecrecover should not use the "GAS" opcode. +// (its a precompile, and uses fixed gas anyway) +// instead, ecrecover2 uses assembly. +// Had to change "pure" to "view", since the compiler can't tell this "staticcall" is pure + +pragma solidity ^0.8.0; + +/** + * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. + * + * These functions can be used to verify that a message was signed by the holder + * of the private keys of a given address. + */ +library ECDSA { + enum RecoverError { + NoError, + InvalidSignature, + InvalidSignatureLength, + InvalidSignatureS, + InvalidSignatureV + } + + function _throwError(RecoverError error) private pure { + if (error == RecoverError.NoError) { + return; + // no error: do nothing + } else if (error == RecoverError.InvalidSignature) { + revert("ECDSA: invalid signature"); + } else if (error == RecoverError.InvalidSignatureLength) { + revert("ECDSA: invalid signature length"); + } else if (error == RecoverError.InvalidSignatureS) { + revert("ECDSA: invalid signature 's' value"); + } else if (error == RecoverError.InvalidSignatureV) { + revert("ECDSA: invalid signature 'v' value"); + } + } + + /** + * @dev Returns the address that signed a hashed message (`hash`) with + * `signature` or error string. This address can then be used for verification purposes. + * + * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: + * this function rejects them by requiring the `s` value to be in the lower + * half order, and the `v` value to be either 27 or 28. + * + * IMPORTANT: `hash` _must_ be the result of a hash operation for the + * verification to be secure: it is possible to craft signatures that + * recover to arbitrary addresses for non-hashed data. A safe way to ensure + * this is by receiving a hash of the original message (which may otherwise + * be too long), and then calling {toEthSignedMessageHash} on it. + * + * Documentation for signature generation: + * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] + * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] + * + * _Available since v4.3._ + */ + function tryRecover(bytes32 hash, bytes memory signature) internal view returns (address, RecoverError) { + // Check the signature length + // - case 65: r,s,v signature (standard) + // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ + if (signature.length == 65) { + bytes32 r; + bytes32 s; + uint8 v; + // ecrecover takes the signature parameters, and the only way to get them + // currently is to use assembly. + // solhint-disable-next-line no-inline-assembly + assembly { + r := mload(add(signature, 0x20)) + s := mload(add(signature, 0x40)) + v := byte(0, mload(add(signature, 0x60))) + } + return tryRecover(hash, v, r, s); + } else if (signature.length == 64) { + bytes32 r; + bytes32 vs; + // ecrecover takes the signature parameters, and the only way to get them + // currently is to use assembly. + // solhint-disable-next-line no-inline-assembly + assembly { + r := mload(add(signature, 0x20)) + vs := mload(add(signature, 0x40)) + } + return tryRecover(hash, r, vs); + } else { + return (address(0), RecoverError.InvalidSignatureLength); + } + } + + /** + * @dev Returns the address that signed a hashed message (`hash`) with + * `signature`. This address can then be used for verification purposes. + * + * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: + * this function rejects them by requiring the `s` value to be in the lower + * half order, and the `v` value to be either 27 or 28. + * + * IMPORTANT: `hash` _must_ be the result of a hash operation for the + * verification to be secure: it is possible to craft signatures that + * recover to arbitrary addresses for non-hashed data. A safe way to ensure + * this is by receiving a hash of the original message (which may otherwise + * be too long), and then calling {toEthSignedMessageHash} on it. + */ + function recover(bytes32 hash, bytes memory signature) internal view returns (address) { + (address recovered, RecoverError error) = tryRecover(hash, signature); + _throwError(error); + return recovered; + } + + /** + * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. + * + * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] + * + * _Available since v4.3._ + */ + function tryRecover( + bytes32 hash, + bytes32 r, + bytes32 vs + ) internal view returns (address, RecoverError) { + bytes32 s; + uint8 v; + // solhint-disable-next-line no-inline-assembly + assembly { + s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) + v := add(shr(255, vs), 27) + } + return tryRecover(hash, v, r, s); + } + + /** + * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. + * + * _Available since v4.2._ + */ + function recover( + bytes32 hash, + bytes32 r, + bytes32 vs + ) internal view returns (address) { + (address recovered, RecoverError error) = tryRecover(hash, r, vs); + _throwError(error); + return recovered; + } + + /** + * @dev Overload of {ECDSA-tryRecover} that receives the `v`, + * `r` and `s` signature fields separately. + * + * _Available since v4.3._ + */ + function tryRecover( + bytes32 hash, + uint8 v, + bytes32 r, + bytes32 s + ) internal view returns (address, RecoverError) { + // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature + // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines + // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most + // signatures from current libraries generate a unique signature with an s-value in the lower half order. + // + // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value + // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or + // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept + // these malleable signatures as well. + if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { + return (address(0), RecoverError.InvalidSignatureS); + } + if (v != 27 && v != 28) { + return (address(0), RecoverError.InvalidSignatureV); + } + + // If the signature is valid (and not malleable), return the signer address + // address signer = ecrecover(hash,v,r,s); + address signer = ecrecover2(hash, v, r, s); + + if (signer == address(0)) { + return (address(0), RecoverError.InvalidSignature); + } + + return (signer, RecoverError.NoError); + } + + function ecrecover2(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal view returns (address signer) { + uint status; + // solhint-disable-next-line no-inline-assembly + assembly { + let pointer := mload(0x40) + + mstore(pointer, hash) + mstore(add(pointer, 0x20), v) + mstore(add(pointer, 0x40), r) + mstore(add(pointer, 0x60), s) + + + status := staticcall(not(0), 0x01, pointer, 0x80, pointer, 0x20) + signer := mload(pointer) + // not required by this code, but other solidity code assumes unused data is zero... + mstore(pointer, 0) + mstore(add(pointer, 0x20), 0) + } + } + + /** + * @dev Overload of {ECDSA-recover} that receives the `v`, + * `r` and `s` signature fields separately. + */ + function recover( + bytes32 hash, + uint8 v, + bytes32 r, + bytes32 s + ) internal view returns (address) { + (address recovered, RecoverError error) = tryRecover(hash, v, r, s); + _throwError(error); + return recovered; + } + + /** + * @dev Returns an Ethereum Signed Message, created from a `hash`. This + * produces hash corresponding to the one signed with the + * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] + * JSON-RPC method as part of EIP-191. + * + * See {recover}. + */ + function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { + // 32 is the length in bytes of hash, + // enforced by the type signature above + return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); + } + + /** + * @dev Returns an Ethereum Signed Typed Data, created from a + * `domainSeparator` and a `structHash`. This produces hash corresponding + * to the one signed with the + * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] + * JSON-RPC method as part of EIP-712. + * + * See {recover}. + */ + function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { + return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); + } +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/LibAddress.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/LibAddress.sol new file mode 100644 index 000000000..225ec792c --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/LibAddress.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +library LibAddress { + /** + * @notice Will return true if provided address is a contract + * @param account Address to verify if contract or not + * @dev This contract will return false if called within the constructor of + * a contract's deployment, as the code is not yet stored on-chain. + */ + function isContract(address account) internal view returns (bool) { + uint256 csize; + // solhint-disable-next-line no-inline-assembly + assembly { csize := extcodesize(account) } + return csize != 0; + } +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSend.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSend.sol new file mode 100644 index 000000000..7918e03e2 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSend.sol @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +/// @title Multi Send - Allows to batch multiple transactions into one. +/// @author Nick Dodson - +/// @author Gonçalo Sá - +/// @author Stefan George - +/// @author Richard Meissner - +contract MultiSend { + address private immutable multisendSingleton; + + constructor() { + multisendSingleton = address(this); + } + + /// @dev Sends multiple transactions and reverts all if one fails. + /// @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of + /// operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte), + /// to as a address (=> 20 bytes), + /// value as a uint256 (=> 32 bytes), + /// data length as a uint256 (=> 32 bytes), + /// data as bytes. + /// see abi.encodePacked for more information on packed encoding + /// @notice This method is payable as delegatecalls keep the msg.value from the previous call + /// If the calling method (e.g. execTransaction) received ETH this would revert otherwise + function multiSend(bytes memory transactions) public payable { + require(address(this) != multisendSingleton, "MultiSend should only be called via delegatecall"); + // solhint-disable-next-line no-inline-assembly + assembly { + let length := mload(transactions) + let i := 0x20 + for { + // Pre block is not used in "while mode" + } lt(i, length) { + // Post block is not used in "while mode" + } { + // First byte of the data is the operation. + // We shift by 248 bits (256 - 8 [operation byte]) it right since mload will always load 32 bytes (a word). + // This will also zero out unused data. + let operation := shr(0xf8, mload(add(transactions, i))) + // We offset the load address by 1 byte (operation byte) + // We shift it right by 96 bits (256 - 160 [20 address bytes]) to right-align the data and zero out unused data. + let to := shr(0x60, mload(add(transactions, add(i, 0x01)))) + // We offset the load address by 21 byte (operation byte + 20 address bytes) + let value := mload(add(transactions, add(i, 0x15))) + // We offset the load address by 53 byte (operation byte + 20 address bytes + 32 value bytes) + let dataLength := mload(add(transactions, add(i, 0x35))) + // We offset the load address by 85 byte (operation byte + 20 address bytes + 32 value bytes + 32 data length bytes) + let data := add(transactions, add(i, 0x55)) + let success := 0 + switch operation + case 0 { + success := call(gas(), to, value, data, dataLength, 0, 0) + } + case 1 { + success := delegatecall(gas(), to, data, dataLength, 0, 0) + } + if eq(success, 0) { + revert(0, 0) + } + // Next entry starts at 85 byte + data length + i := add(i, add(0x55, dataLength)) + } + } + } +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol new file mode 100644 index 000000000..2a84c3fcb --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +/// @title Multi Send Call Only - Allows to batch multiple transactions into one, but only calls +/// @author Stefan George - +/// @author Richard Meissner - +/// @notice The guard logic is not required here as this contract doesn't support nested delegate calls +contract MultiSendCallOnly { + /// @dev Sends multiple transactions and reverts all if one fails. + /// @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of + /// operation has to be uint8(0) in this version (=> 1 byte), + /// to as a address (=> 20 bytes), + /// value as a uint256 (=> 32 bytes), + /// data length as a uint256 (=> 32 bytes), + /// data as bytes. + /// see abi.encodePacked for more information on packed encoding + /// @notice The code is for most part the same as the normal MultiSend (to keep compatibility), + /// but reverts if a transaction tries to use a delegatecall. + /// @notice This method is payable as delegatecalls keep the msg.value from the previous call + /// If the calling method (e.g. execTransaction) received ETH this would revert otherwise + function multiSend(bytes memory transactions) public payable { + // solhint-disable-next-line no-inline-assembly + assembly { + let length := mload(transactions) + let i := 0x20 + for { + // Pre block is not used in "while mode" + } lt(i, length) { + // Post block is not used in "while mode" + } { + // First byte of the data is the operation. + // We shift by 248 bits (256 - 8 [operation byte]) it right since mload will always load 32 bytes (a word). + // This will also zero out unused data. + let operation := shr(0xf8, mload(add(transactions, i))) + // We offset the load address by 1 byte (operation byte) + // We shift it right by 96 bits (256 - 160 [20 address bytes]) to right-align the data and zero out unused data. + let to := shr(0x60, mload(add(transactions, add(i, 0x01)))) + // We offset the load address by 21 byte (operation byte + 20 address bytes) + let value := mload(add(transactions, add(i, 0x15))) + // We offset the load address by 53 byte (operation byte + 20 address bytes + 32 value bytes) + let dataLength := mload(add(transactions, add(i, 0x35))) + // We offset the load address by 85 byte (operation byte + 20 address bytes + 32 value bytes + 32 data length bytes) + let data := add(transactions, add(i, 0x55)) + let success := 0 + switch operation + case 0 { + success := call(gas(), to, value, data, dataLength, 0, 0) + } + // This version does not allow delegatecalls + case 1 { + revert(0, 0) + } + if eq(success, 0) { + revert(0, 0) + } + // Next entry starts at 85 byte + data length + i := add(i, add(0x55, dataLength)) + } + } + } +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/SafeMath.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/SafeMath.sol new file mode 100644 index 000000000..d2b05c072 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/SafeMath.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +/** + * @dev Math operations with safety checks that revert on error + */ +library SafeMath { + /** + * @dev Multiplies two numbers, reverts on overflow. + */ + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + // Gas optimization: this is cheaper than requiring 'a' not being zero, but the + // benefit is lost if 'b' is also tested. + // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 + if (a == 0) { + return 0; + } + + uint256 c = a * b; + require(c / a == b); + + return c; + } + + /** + * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend). + */ + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + require(b <= a); + uint256 c = a - b; + + return c; + } + + /** + * @dev Adds two numbers, reverts on overflow. + */ + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + require(c >= a); + + return c; + } + + /** + * @dev Returns the largest of two numbers. + */ + function max(uint256 a, uint256 b) internal pure returns (uint256) { + return a >= b ? a : b; + } +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/UserOperation.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/UserOperation.sol new file mode 100644 index 000000000..f356ff78d --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/UserOperation.sol @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.0; + + struct UserOperation { + address sender; + uint256 nonce; + bytes initCode; + bytes callData; + uint callGas; + uint verificationGas; + uint preVerificationGas; + uint maxFeePerGas; + uint maxPriorityFeePerGas; + address paymaster; + bytes paymasterData; + bytes signature; + } + +library UserOperationLib { + + function getSender(UserOperation calldata userOp) internal pure returns (address ret) { + // solhint-disable-next-line no-inline-assembly + assembly {ret := calldataload(userOp)} + } + + //relayer/miner might submit the TX with higher priorityFee, but the user should not + // pay above what he signed for. + function gasPrice(UserOperation calldata userOp) internal view returns (uint) { + unchecked { + uint maxFeePerGas = userOp.maxFeePerGas; + uint maxPriorityFeePerGas = userOp.maxPriorityFeePerGas; + if (maxFeePerGas == maxPriorityFeePerGas) { + //legacy mode (for networks that don't support basefee opcode) + return min(tx.gasprice, maxFeePerGas); + } + return min(tx.gasprice, min(maxFeePerGas, maxPriorityFeePerGas + block.basefee)); + } + } + + function requiredGas(UserOperation calldata userOp) internal pure returns (uint) { + unchecked { + //when using a Paymaster, the verificationGas is used also to cover the postOp call. + // our security model might call postOp eventually twice + uint mul = userOp.paymaster != address(0) ? 1 : 3; + return userOp.callGas + userOp.verificationGas * mul + userOp.preVerificationGas; + } + } + + function requiredPreFund(UserOperation calldata userOp) internal view returns (uint prefund) { + unchecked { + return requiredGas(userOp) * gasPrice(userOp); + } + } + + function hasPaymaster(UserOperation calldata userOp) internal pure returns (bool) { + return userOp.paymaster != address(0); + } + + function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) { + //lighter signature scheme. must match UserOp.ts#packUserOp + bytes calldata sig = userOp.signature; + // solhint-disable-next-line no-inline-assembly + assembly { + let ofs := userOp + let len := sub(sub(sig.offset, ofs), 32) + ret := mload(0x40) + mstore(0x40, add(ret, add(len, 32))) + mstore(ret, len) + calldatacopy(add(ret, 32), ofs, len) + } + return ret; + } + + function hash(UserOperation calldata userOp) internal pure returns (bytes32) { + return keccak256(pack(userOp)); + } + + function min(uint a, uint b) internal pure returns (uint) { + return a < b ? a : b; + } +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol new file mode 100644 index 000000000..bc7b86598 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.0; +import "../../SmartWallet.sol"; + +contract WhitelistModule { + + mapping(address => bool) public whitelisted; + address public moduleOwner; + + constructor(address _owner) { + moduleOwner = _owner; + } + + modifier onlyOwner { + require(msg.sender == moduleOwner, "sender not authorized"); + _; + } + + function whitelistDestination(address payable _target) external onlyOwner { + require(_target != address(0),"Destination target can not be zero address"); + whitelisted[_target] = true; + } + + function authCall(SmartWallet _safe, address payable _to, uint96 _amount, bytes memory _data) external { // Could have some access control from here like guardians! + require(_to != address(0),"Target can not be zero address"); + require(whitelisted[_to] == true,"Unauthorized :: Target must be whitelised!"); + require(_safe.execTransactionFromModule(_to, _amount, _data, Enum.Operation.Call), "Could not execute ether transfer"); + } + + // If value transfer required from wallet + /*function handlePayment( + BaseWallet safe, + uint256 gasUsed, + uint256 dataGas, + uint256 gasPrice, + address gasToken, + address refundReceiver + ) + private + { + uint256 amount = (gasUsed - gasleft() + dataGas) * gasPrice; + // solium-disable-next-line security/no-tx-origin + address receiver = refundReceiver == address(0) ? tx.origin : refundReceiver; + if (gasToken == address(0)) { + // solium-disable-next-line security/no-send + require(safe.execTransactionFromModule(receiver, amount, "", Enum.Operation.Call), "Could not pay gas costs with ether"); + } else { + bytes memory data = abi.encodeWithSignature("transfer(address,uint256)", receiver, amount); + require(safe.execTransactionFromModule(gasToken, 0, data, Enum.Operation.Call), "Could not pay gas costs with token"); + } + }*/ +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol new file mode 100644 index 000000000..874b53a42 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "../common/Enum.sol"; + +contract WalletStorage { + // Version + string public constant VERSION = "0.0.1"; + + // Domain Seperators + // keccak256( + // "EIP712Domain(uint256 chainId,address verifyingContract)" + // ); + bytes32 internal constant DOMAIN_SEPARATOR_TYPEHASH = 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218; + + // @review for any modifications + // keccak256( + // "SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" + // ); + bytes32 internal constant SAFE_TX_TYPEHASH = 0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8; + + // Owner storage + address public owner; + + struct Transaction { + address to; + uint256 value; + bytes data; + Enum.Operation operation; + uint256 safeTxGas; + // uint256 batchId; + } + + struct FeeRefund { + uint256 baseGas; + uint256 gasPrice; //gasPrice or tokenGasPrice + address gasToken; + address payable refundReceiver; + } + + // @review + // uint256 public nonce; //changed to 2D nonce + mapping(uint256 => uint256) public nonces; + + // AA storage + address public entryPoint; +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/Button.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/Button.sol new file mode 100644 index 000000000..8900c8abc --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/Button.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract Button is Ownable { + + event ButtonPushed(address pusher, uint256 pushes); + uint256 public pushes; + + function pushButton() public onlyOwner { + pushes++; + emit ButtonPushed(msg.sender, pushes); + } +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StorageSetter.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StorageSetter.sol new file mode 100644 index 000000000..e134fd58c --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StorageSetter.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.0; +contract StorageSetter { + function setStorage(bytes3 data) public { + bytes32 slot = 0x4242424242424242424242424242424242424242424242424242424242424242; + // solhint-disable-next-line no-inline-assembly + assembly { + sstore(slot, data) + } + } + } \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol new file mode 100644 index 000000000..ab602edb9 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract TestToken is ERC20 { + constructor () + ERC20("TST", "TestToken") { + } + + function mint(address sender, uint amount) external { + _mint(sender, amount); + } +} diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts new file mode 100644 index 000000000..e5b78499f --- /dev/null +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -0,0 +1,147 @@ +import { TransactionResponse } from '@ethersproject/abstract-provider' +import { Signer } from '@ethersproject/abstract-signer' +import { BigNumber } from '@ethersproject/bignumber' +import { Provider } from '@ethersproject/providers' +import { + Eip3770Address, + EthAdapter, + EthAdapterTransaction, + GetContractProps, + SmartWalletContract, + SmartAccountVersion +} from 'core-types' +import { validateEip3770Address } from '@gnosis.pm/safe-core-sdk-utils' +import { ethers } from 'ethers' +import { + getMultiSendContractInstance, + getSafeContractInstance, + getSafeProxyFactoryContractInstance +} from './contracts/contractInstancesEthers' +import GnosisSafeContractEthers from './contracts/SmartWallet/SmartWalletContractEthers' +import GnosisSafeProxyFactoryEthersContract from './contracts/SmartWalletProxyFactory/SmartWalletProxyFactoryEthersContract' +import MultiSendEthersContract from './contracts/MultiSend/MultiSendEthersContract' + +type Ethers = typeof ethers + +export interface EthersAdapterConfig { + /** ethers - Ethers v5 library */ + ethers: Ethers + /** signer - Ethers signer */ + signer: Signer +} + +class EthersAdapter implements EthAdapter { + #ethers: Ethers + #signer: Signer + #provider: Provider + + constructor({ ethers, signer }: EthersAdapterConfig) { + if (!ethers) { + throw new Error('ethers property missing from options') + } + if (!signer.provider) { + throw new Error('Signer must be connected to a provider') + } + this.#signer = signer + this.#provider = signer.provider + this.#ethers = ethers + } + + getProvider(): Provider { + return this.#provider + } + + getSigner(): Signer { + return this.#signer + } + + async getEip3770Address(fullAddress: string): Promise { + const chainId = await this.getChainId() + return validateEip3770Address(fullAddress, chainId) + } + + async getBalance(address: string): Promise { + return BigNumber.from(await this.#provider.getBalance(address)) + } + + async getChainId(): Promise { + return (await this.#provider.getNetwork()).chainId + } + + getSafeContract({ + smartAccountVersion, + chainId, + singletonDeployment, + customContractAddress + }: GetContractProps): SmartWalletContract { + const contractAddress = customContractAddress + ? customContractAddress + : singletonDeployment?.networkAddresses[chainId] + if (!contractAddress) { + throw new Error('Invalid Safe Proxy contract address') + } + return getSafeContractInstance(smartAccountVersion, contractAddress, this.#signer) + } + + getMultiSendContract({ + smartAccountVersion, + chainId, + singletonDeployment, + customContractAddress + }: GetContractProps): MultiSendEthersContract { + const contractAddress = customContractAddress + ? customContractAddress + : singletonDeployment?.networkAddresses[chainId] + if (!contractAddress) { + throw new Error('Invalid Multi Send contract address') + } + return getMultiSendContractInstance(smartAccountVersion, contractAddress, this.#signer) + } + + getSafeProxyFactoryContract({ + smartAccountVersion, + chainId, + singletonDeployment, + customContractAddress + }: GetContractProps): GnosisSafeProxyFactoryEthersContract { + const contractAddress = customContractAddress + ? customContractAddress + : singletonDeployment?.networkAddresses[chainId] + if (!contractAddress) { + throw new Error('Invalid Safe Proxy Factory contract address') + } + return getSafeProxyFactoryContractInstance(smartAccountVersion, contractAddress, this.#signer) + } + + async getContractCode(address: string): Promise { + return this.#provider.getCode(address) + } + + async isContractDeployed(address: string): Promise { + const contractCode = await this.#provider.getCode(address) + return contractCode !== '0x' + } + + async getTransaction(transactionHash: string): Promise { + return this.#provider.getTransaction(transactionHash) + } + + async getSignerAddress(): Promise { + return this.#signer.getAddress() + } + + signMessage(message: string): Promise { + const messageArray = this.#ethers.utils.arrayify(message) + return this.#signer.signMessage(messageArray) + } + + async estimateGas(transaction: EthAdapterTransaction): Promise { + return (await this.#provider.estimateGas(transaction)).toNumber() + } + + call(transaction: EthAdapterTransaction): Promise { + return this.#provider.call(transaction) + } +} + +export default EthersAdapter diff --git a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts new file mode 100644 index 000000000..ece195878 --- /dev/null +++ b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts @@ -0,0 +1,20 @@ +import { MultiSendContract } from '@gnosis.pm/safe-core-sdk-types' +import { MultiSend as MultiSend_V1_1_1 } from '../../../typechain/src/ethers-v5/v1.1.1/MultiSend' +import { + MultiSend as MultiSend_V1_3_0, + MultiSendInterface +} from '../../../typechain/src/ethers-v5/v1.3.0/MultiSend' + +abstract class MultiSendEthersContract implements MultiSendContract { + constructor(public contract: MultiSend_V1_1_1 | MultiSend_V1_3_0) {} + + getAddress(): string { + return this.contract.address + } + + encode: MultiSendInterface['encodeFunctionData'] = (methodName: any, params: any): string => { + return this.contract.interface.encodeFunctionData(methodName, params) + } +} + +export default MultiSendEthersContract diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts new file mode 100644 index 000000000..46b856820 --- /dev/null +++ b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts @@ -0,0 +1,84 @@ +import { BigNumber } from '@ethersproject/bignumber' +import { + SmartAccountVersion, + SmartWalletContract, + SmartAccountTrx, + SmartAccountTrxData, + TransactionOptions, + FeeRefundData, + TransactionResult +} from 'core-types' +import { GnosisSafe as GnosisSafe_V1_1_1 } from '../../../typechain/src/ethers-v5/v1.1.1/GnosisSafe' +import { GnosisSafe as GnosisSafe_V1_2_0 } from '../../../typechain/src/ethers-v5/v1.2.0/GnosisSafe' +import { + GnosisSafe as GnosisSafe_V1_3_0, + GnosisSafeInterface +} from '../../../typechain/src/ethers-v5/v1.3.0/GnosisSafe' +import { EthersTransactionOptions, EthersTransactionResult } from '../../types' +import { toTxResult } from '../../utils' +import { SENTINEL_ADDRESS } from '../../utils/constants' + +abstract class SmartWalletContractEthers implements SmartWalletContract { + constructor(public contract: GnosisSafe_V1_1_1 | GnosisSafe_V1_2_0 | GnosisSafe_V1_3_0) {} + + async getVersion(): Promise { + return (await this.contract.VERSION()) as SmartAccountVersion + } + + getAddress(): string { + return this.contract.address + } + + async getNonce(): Promise { + return (await this.contract.nonce()).toNumber() + } + + async getThreshold(): Promise { + return (await this.contract.getThreshold()).toNumber() + } + + async getOwners(): Promise { + return this.contract.getOwners() + } + + async isOwner(address: string): Promise { + return this.contract.isOwner(address) + } + + async getTransactionHash(smartAccountTrxData: SmartAccountTrxData): Promise { + return this.contract.getTransactionHash( + smartAccountTrxData.to, + smartAccountTrxData.value, + smartAccountTrxData.data, + smartAccountTrxData.operation, + smartAccountTrxData.SmartAccountTxGas, + smartAccountTrxData.baseGas, + smartAccountTrxData.gasPrice, + smartAccountTrxData.gasToken, + smartAccountTrxData.refundReceiver, + smartAccountTrxData.nonce + ) + } + + async execTransaction( + smartAccountTrx: SmartAccountTrx, + batchId: number, + feeRefundData: FeeRefundData, + options: TransactionOptions + ): Promise { + + // TODO: estimate GAS before making the transaction + const txResponse = await this.contract.execTransaction( + smartAccountTrx, + batchId, + feeRefundData + ) + return toTxResult(txResponse, options) + } + + encode: GnosisSafeInterface['encodeFunctionData'] = (methodName: any, params: any): string => { + return this.contract.interface.encodeFunctionData(methodName, params) + } +} + +export default SmartWalletContractEthers diff --git a/packages/ethers-lib/src/contracts/SmartWalletProxyFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletProxyFactory/SmartWalletProxyFactoryEthersContract.ts new file mode 100644 index 000000000..4db19c4e2 --- /dev/null +++ b/packages/ethers-lib/src/contracts/SmartWalletProxyFactory/SmartWalletProxyFactoryEthersContract.ts @@ -0,0 +1,73 @@ +import { Event } from '@ethersproject/contracts' +import { GnosisSafeProxyFactoryContract } from '@gnosis.pm/safe-core-sdk-types' +import { ProxyFactory as ProxyFactory_V1_1_1 } from '../../../typechain/src/ethers-v5/v1.1.1/ProxyFactory' +import { ProxyFactory as ProxyFactory_V1_3_0 } from '../../../typechain/src/ethers-v5/v1.3.0/ProxyFactory' +import { EthersTransactionOptions } from '../../types' + +export interface CreateProxyProps { + safeMasterCopyAddress: string + initializer: string + saltNonce: number + options?: EthersTransactionOptions + callback?: (txHash: string) => void +} + +class GnosisSafeProxyFactoryEthersContract implements GnosisSafeProxyFactoryContract { + constructor(public contract: ProxyFactory_V1_3_0 | ProxyFactory_V1_1_1) {} + + getAddress(): string { + return this.contract.address + } + + async createProxy({ + safeMasterCopyAddress, + initializer, + saltNonce, + options, + callback + }: CreateProxyProps): Promise { + if (saltNonce < 0) { + throw new Error('saltNonce must be greater than 0') + } + if (options && !options.gasLimit) { + options.gasLimit = await this.estimateGas( + 'createProxyWithNonce', + [safeMasterCopyAddress, initializer, saltNonce], + { + ...options + } + ) + } + const proxyAddress = this.contract + .createProxyWithNonce(safeMasterCopyAddress, initializer, saltNonce, options) + .then(async (txResponse) => { + if (callback) { + callback(txResponse.hash) + } + const txReceipt = await txResponse.wait() + const proxyCreationEvent = txReceipt?.events?.find( + ({ event }: Event) => event === 'ProxyCreation' + ) + if (!proxyCreationEvent || !proxyCreationEvent.args) { + throw new Error('Safe Proxy was not deployed correctly') + } + const proxyAddress: string = proxyCreationEvent.args[0] + return proxyAddress + }) + return proxyAddress + } + + encode(methodName: string, params: any[]): string { + return (this.contract as any).interface.encodeFunctionData(methodName, params) + } + + async estimateGas( + methodName: string, + params: any[], + options: EthersTransactionOptions + ): Promise { + return (await (this.contract.estimateGas as any)[methodName](...params, options)).toNumber() + } +} + +export default GnosisSafeProxyFactoryEthersContract diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts new file mode 100644 index 000000000..dfd417b39 --- /dev/null +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -0,0 +1,74 @@ +import { Signer } from '@ethersproject/abstract-signer' +import { SmartAccountVersion } from 'core-types' +import { GnosisSafe__factory as SafeMasterCopy_V1_1_1 } from '../../typechain/src/ethers-v5/v1.1.1/factories/GnosisSafe__factory' +import { MultiSend__factory as MultiSend_V1_1_1 } from '../../typechain/src/ethers-v5/v1.1.1/factories/MultiSend__factory' +import { ProxyFactory__factory as SafeProxyFactory_V1_1_1 } from '../../typechain/src/ethers-v5/v1.1.1/factories/ProxyFactory__factory' +import { GnosisSafe__factory as SafeMasterCopy_V1_2_0 } from '../../typechain/src/ethers-v5/v1.2.0/factories/GnosisSafe__factory' +import { GnosisSafe__factory as SafeMasterCopy_V1_3_0 } from '../../typechain/src/ethers-v5/v1.3.0/factories/GnosisSafe__factory' +import { MultiSend__factory as MultiSend_V1_3_0 } from '../../typechain/src/ethers-v5/v1.3.0/factories/MultiSend__factory' +import { ProxyFactory__factory as SafeProxyFactory_V1_3_0 } from '../../typechain/src/ethers-v5/v1.3.0/factories/ProxyFactory__factory' +import SmartWalletContractEthers from './SmartWallet/SmartWalletContractEthers' +import GnosisSafeContract_V1_3_0_Ethers from './GnosisSafe/v1.3.0/GnosisSafeContract_V1_3_0_Ethers' +import GnosisSafeProxyFactoryContract_V1_1_1_Ethers from './GnosisSafeProxyFactory/v1.1.1/GnosisSafeProxyFactoryContract_V1_1_1_Ethers' +import GnosisSafeProxyFactoryContract_V1_3_0_Ethers from './GnosisSafeProxyFactory/v1.3.0/GnosisSafeProxyFactoryContract_V1_3_0_Ethers' +import MultiSendContract_V1_1_1_Ethers from './MultiSend/v1.1.1/MultiSendContract_V1_1_1_Ethers' +import MultiSendContract_V1_3_0_Ethers from './MultiSend/v1.3.0/MultiSendContract_V1_3_0_Ethers' + +export function getSafeContractInstance( + contractAddress: string, + signer: Signer +): + | SmartWalletContractEthers{ + let safeContract + switch (safeVersion) { + case '1.3.0': + safeContract = SafeMasterCopy_V1_3_0.connect(contractAddress, signer) + return new GnosisSafeContract_V1_3_0_Ethers(safeContract) + case '1.2.0': + safeContract = SafeMasterCopy_V1_2_0.connect(contractAddress, signer) + return new GnosisSafeContract_V1_2_0_Ethers(safeContract) + case '1.1.1': + safeContract = SafeMasterCopy_V1_1_1.connect(contractAddress, signer) + return new GnosisSafeContract_V1_1_1_Ethers(safeContract) + default: + throw new Error('Invalid Safe version') + } +} + +export function getMultiSendContractInstance( + safeVersion: SafeVersion, + contractAddress: string, + signer: Signer +): MultiSendContract_V1_3_0_Ethers | MultiSendContract_V1_1_1_Ethers { + let multiSendContract + switch (safeVersion) { + case '1.3.0': + multiSendContract = MultiSend_V1_3_0.connect(contractAddress, signer) + return new MultiSendContract_V1_3_0_Ethers(multiSendContract) + case '1.2.0': + case '1.1.1': + multiSendContract = MultiSend_V1_1_1.connect(contractAddress, signer) + return new MultiSendContract_V1_1_1_Ethers(multiSendContract) + default: + throw new Error('Invalid Safe version') + } +} + +export function getSafeProxyFactoryContractInstance( + safeVersion: SafeVersion, + contractAddress: string, + signer: Signer +): GnosisSafeProxyFactoryContract_V1_3_0_Ethers | GnosisSafeProxyFactoryContract_V1_1_1_Ethers { + let gnosisSafeProxyFactoryContract + switch (safeVersion) { + case '1.3.0': + gnosisSafeProxyFactoryContract = SafeProxyFactory_V1_3_0.connect(contractAddress, signer) + return new GnosisSafeProxyFactoryContract_V1_3_0_Ethers(gnosisSafeProxyFactoryContract) + case '1.2.0': + case '1.1.1': + gnosisSafeProxyFactoryContract = SafeProxyFactory_V1_1_1.connect(contractAddress, signer) + return new GnosisSafeProxyFactoryContract_V1_1_1_Ethers(gnosisSafeProxyFactoryContract) + default: + throw new Error('Invalid Safe version') + } +} diff --git a/packages/ethers-lib/src/index.ts b/packages/ethers-lib/src/index.ts new file mode 100644 index 000000000..eb498c598 --- /dev/null +++ b/packages/ethers-lib/src/index.ts @@ -0,0 +1,6 @@ +import { CreateProxyProps } from './contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryEthersContract' +import EthersAdapter, { EthersAdapterConfig } from './EthersAdapter' +import { EthersTransactionOptions, EthersTransactionResult } from './types' + +export default EthersAdapter +export { EthersAdapterConfig, EthersTransactionOptions, EthersTransactionResult, CreateProxyProps } diff --git a/packages/ethers-lib/src/types.ts b/packages/ethers-lib/src/types.ts new file mode 100644 index 000000000..e00725828 --- /dev/null +++ b/packages/ethers-lib/src/types.ts @@ -0,0 +1,13 @@ +import { ContractTransaction } from '@ethersproject/contracts' +import { BaseTransactionResult } from '@gnosis.pm/safe-core-sdk-types' + +export interface EthersTransactionOptions { + from?: string + gasLimit?: number | string + gasPrice?: number | string +} + +export interface EthersTransactionResult extends BaseTransactionResult { + transactionResponse: ContractTransaction + options?: EthersTransactionOptions +} diff --git a/packages/ethers-lib/src/utils/constants.ts b/packages/ethers-lib/src/utils/constants.ts new file mode 100644 index 000000000..129625236 --- /dev/null +++ b/packages/ethers-lib/src/utils/constants.ts @@ -0,0 +1 @@ +export const SENTINEL_ADDRESS = '0x0000000000000000000000000000000000000001' diff --git a/packages/ethers-lib/src/utils/index.ts b/packages/ethers-lib/src/utils/index.ts new file mode 100644 index 000000000..e022237a3 --- /dev/null +++ b/packages/ethers-lib/src/utils/index.ts @@ -0,0 +1,17 @@ +import { ContractTransaction } from '@ethersproject/contracts' +import { EthersTransactionOptions, EthersTransactionResult } from '../types' + +export function sameString(str1: string, str2: string): boolean { + return str1.toLowerCase() === str2.toLowerCase() +} + +export function toTxResult( + transactionResponse: ContractTransaction, + options?: EthersTransactionOptions +): EthersTransactionResult { + return { + hash: transactionResponse.hash, + options, + transactionResponse + } +} diff --git a/packages/ethers-lib/tsconfig.json b/packages/ethers-lib/tsconfig.json new file mode 100644 index 000000000..560cb7edb --- /dev/null +++ b/packages/ethers-lib/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src" + }, + "include": ["src", "src/**/*.json", "typechain/src"] +} diff --git a/packages/node-client/package-lock.json b/packages/node-client/package-lock.json index 9fb9b7f93..ff0dd3637 100644 --- a/packages/node-client/package-lock.json +++ b/packages/node-client/package-lock.json @@ -1,5 +1,5 @@ { - "name": "@gnosis.pm/safe-service-client", + "name": "node-client", "version": "1.1.2", "lockfileVersion": 1, "requires": true, @@ -192,6 +192,7 @@ "version": "5.6.4", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "dev": true, "requires": { "@ethersproject/address": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", @@ -280,6 +281,7 @@ "version": "5.6.2", "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "dev": true, "requires": { "@ethersproject/abi": "^5.6.3", "@ethersproject/abstract-provider": "^5.6.1", @@ -297,6 +299,7 @@ "version": "5.6.1", "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "dev": true, "requires": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/address": "^5.6.1", @@ -402,6 +405,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.1.0.tgz", "integrity": "sha512-VvEqWCliA6KXwt9N4YTzN5JcqnhLxLjUTU7trpQqQ7wU9OQcF+Kdrer86wDOF5lYZVE24zudw1s4gW3dxUkm6A==", + "dev": true, "requires": { "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", @@ -423,18 +427,9 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", - "requires": { - "semver": "^7.3.7" - } - }, - "@gnosis.pm/safe-ethers-lib": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.1.0.tgz", - "integrity": "sha512-MG01hGu/3q/sl9fXE3sU7CMVpVMJ4k9/ro1JVZaE29jmsar1cHFUOJNws7Do3orxTLQZ2egkARcmyv+l673FoA==", "dev": true, "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + "semver": "^7.3.7" } }, "@gnosis.pm/safe-web3-lib": { @@ -732,6 +727,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dev": true, "requires": { "@types/node": "*" } @@ -798,7 +794,8 @@ "@types/node": { "version": "17.0.45", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true }, "@types/node-fetch": { "version": "2.6.2", @@ -814,6 +811,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "dev": true, "requires": { "@types/node": "*" } @@ -837,6 +835,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "dev": true, "requires": { "@types/node": "*" } @@ -1256,7 +1255,8 @@ "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true }, "balanced-match": { "version": "1.0.2", @@ -1268,6 +1268,7 @@ "version": "3.0.9", "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -1281,7 +1282,8 @@ "bignumber.js": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "dev": true }, "binary-extensions": { "version": "2.2.0", @@ -1292,7 +1294,8 @@ "blakejs": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true }, "bn.js": { "version": "5.2.1", @@ -1333,6 +1336,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -1346,6 +1350,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dev": true, "requires": { "base-x": "^3.0.2" } @@ -1354,6 +1359,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dev": true, "requires": { "bs58": "^4.0.0", "create-hash": "^1.1.0", @@ -1379,12 +1385,14 @@ "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true }, "bufferutil": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "dev": true, "requires": { "node-gyp-build": "^4.3.0" } @@ -1399,6 +1407,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -1482,6 +1491,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -1614,7 +1624,8 @@ "cookiejar": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", + "dev": true }, "core-js-pure": { "version": "3.23.3", @@ -1632,6 +1643,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -1644,6 +1656,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -1674,6 +1687,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, "requires": { "es5-ext": "^0.10.50", "type": "^1.0.1" @@ -1683,6 +1697,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -1737,6 +1752,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -1851,6 +1867,7 @@ "version": "1.20.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -1881,6 +1898,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -1891,6 +1909,7 @@ "version": "0.10.61", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "dev": true, "requires": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -1901,6 +1920,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, "requires": { "d": "1", "es5-ext": "^0.10.35", @@ -1911,6 +1931,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, "requires": { "d": "^1.0.1", "ext": "^1.1.2" @@ -2122,6 +2143,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dev": true, "requires": { "js-sha3": "^0.8.0" } @@ -2130,6 +2152,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -2194,6 +2217,7 @@ "version": "7.1.5", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, "requires": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -2206,6 +2230,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dev": true, "requires": { "bn.js": "4.11.6", "number-to-bn": "1.7.0" @@ -2214,7 +2239,8 @@ "bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true } } }, @@ -2237,12 +2263,14 @@ "eventemitter3": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -2269,6 +2297,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dev": true, "requires": { "type": "^2.5.0" }, @@ -2276,7 +2305,8 @@ "type": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", + "dev": true } } }, @@ -2385,6 +2415,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, "requires": { "is-callable": "^1.1.3" } @@ -2433,12 +2464,14 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "function.prototype.name": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -2455,7 +2488,8 @@ "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true }, "get-caller-file": { "version": "2.0.5", @@ -2473,6 +2507,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -2489,6 +2524,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -2705,6 +2741,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -2712,7 +2749,8 @@ "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true }, "has-flag": { "version": "4.0.0", @@ -2724,6 +2762,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, "requires": { "get-intrinsic": "^1.1.1" } @@ -2731,12 +2770,14 @@ "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -2745,6 +2786,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -2792,7 +2834,8 @@ "http-https": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==", + "dev": true }, "https-proxy-agent": { "version": "5.0.1", @@ -2907,6 +2950,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -2926,6 +2970,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -2935,6 +2980,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "requires": { "has-bigints": "^1.0.1" } @@ -2952,6 +2998,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -2960,12 +3007,14 @@ "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -2986,6 +3035,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -3002,12 +3052,14 @@ "is-hex-prefixed": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "dev": true }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true }, "is-number": { "version": "7.0.0", @@ -3019,6 +3071,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -3033,6 +3086,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -3042,6 +3096,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, "requires": { "call-bind": "^1.0.2" } @@ -3056,6 +3111,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -3064,6 +3120,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -3072,6 +3129,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -3083,7 +3141,8 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true }, "is-unicode-supported": { "version": "0.1.0", @@ -3095,6 +3154,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, "requires": { "call-bind": "^1.0.2" } @@ -3144,6 +3204,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "dev": true, "requires": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -3434,6 +3495,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -3466,6 +3528,7 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -3783,7 +3846,8 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "nanoid": { "version": "3.3.1", @@ -3800,12 +3864,14 @@ "next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true }, "node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true }, "node-fetch": { "version": "2.6.7", @@ -3818,7 +3884,8 @@ "node-gyp-build": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "dev": true }, "normalize-path": { "version": "3.0.0", @@ -3839,6 +3906,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dev": true, "requires": { "bn.js": "4.11.6", "strip-hex-prefix": "1.0.0" @@ -3847,24 +3915,28 @@ "bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true } } }, "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -3882,6 +3954,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "dev": true, "requires": { "http-https": "^1.0.0" } @@ -4006,6 +4079,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -4078,6 +4152,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -4098,6 +4173,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4117,6 +4193,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -4191,6 +4268,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -4200,6 +4278,7 @@ "version": "2.2.7", "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dev": true, "requires": { "bn.js": "^5.2.0" } @@ -4239,7 +4318,8 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -4250,12 +4330,14 @@ "scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true }, "secp256k1": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "dev": true, "requires": { "elliptic": "^6.5.4", "node-addon-api": "^2.0.0", @@ -4272,6 +4354,7 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -4288,7 +4371,8 @@ "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true }, "setprototypeof": { "version": "1.2.0", @@ -4300,6 +4384,7 @@ "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -4324,6 +4409,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -4482,6 +4568,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -4492,6 +4579,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -4502,6 +4590,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -4525,6 +4614,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dev": true, "requires": { "is-hex-prefixed": "1.0.0" } @@ -4737,7 +4827,8 @@ "type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true }, "type-check": { "version": "0.4.0", @@ -4764,6 +4855,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, "requires": { "is-typedarray": "^1.0.0" } @@ -4778,6 +4870,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "requires": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -4816,6 +4909,7 @@ "version": "5.0.9", "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "dev": true, "requires": { "node-gyp-build": "^4.3.0" } @@ -4823,12 +4917,14 @@ "utf8": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true }, "util": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dev": true, "requires": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -4841,7 +4937,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "uuid": { "version": "8.3.2", @@ -4865,6 +4962,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", + "dev": true, "requires": { "@types/bn.js": "^5.1.0", "@types/node": "^12.12.6", @@ -4878,7 +4976,8 @@ "@types/node": { "version": "12.20.55", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true } } }, @@ -4886,6 +4985,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", + "dev": true, "requires": { "web3-eth-iban": "1.7.4", "web3-utils": "1.7.4" @@ -4895,6 +4995,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", + "dev": true, "requires": { "@ethersproject/transactions": "^5.6.2", "web3-core-helpers": "1.7.4", @@ -4907,6 +5008,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", + "dev": true, "requires": { "eventemitter3": "4.0.4" } @@ -4915,6 +5017,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", + "dev": true, "requires": { "util": "^0.12.0", "web3-core-helpers": "1.7.4", @@ -4927,6 +5030,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", + "dev": true, "requires": { "eventemitter3": "4.0.4", "web3-core-helpers": "1.7.4" @@ -4936,6 +5040,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", + "dev": true, "requires": { "bn.js": "^5.2.1", "web3-utils": "1.7.4" @@ -4945,6 +5050,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", + "dev": true, "requires": { "web3-core-helpers": "1.7.4", "xhr2-cookies": "1.1.0" @@ -4954,6 +5060,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", + "dev": true, "requires": { "oboe": "2.1.5", "web3-core-helpers": "1.7.4" @@ -4963,6 +5070,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", + "dev": true, "requires": { "eventemitter3": "4.0.4", "web3-core-helpers": "1.7.4", @@ -4973,6 +5081,7 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", + "dev": true, "requires": { "bn.js": "^5.2.1", "ethereum-bloom-filters": "^1.0.6", @@ -4992,6 +5101,7 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dev": true, "requires": { "bufferutil": "^4.0.1", "debug": "^2.2.0", @@ -5023,6 +5133,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -5035,6 +5146,7 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -5083,6 +5195,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", + "dev": true, "requires": { "cookiejar": "^2.1.1" } @@ -5102,12 +5215,14 @@ "yaeti": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "dev": true }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "yaml": { "version": "1.10.2", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 732c9b6c7..d4a75ef78 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -69,7 +69,6 @@ }, "dependencies": { "@ethersproject/abstract-signer": "^5.6.0", - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", "node-fetch": "^2.6.6" } } diff --git a/yarn.lock b/yarn.lock index e2d423c38..f821c48d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,18 +2,183 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0": +"@apollo/protobufjs@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.2.2.tgz#4bd92cd7701ccaef6d517cdb75af2755f049f87c" + integrity sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.0" + "@types/node" "^10.1.0" + long "^4.0.0" + +"@apollo/utils.dropunuseddefinitions@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz#02b04006442eaf037f4c4624146b12775d70d929" + integrity sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg== + +"@apollo/utils.keyvaluecache@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.1.tgz#46f310f859067efe9fa126156c6954f8381080d2" + integrity sha512-nLgYLomqjVimEzQ4cdvVQkcryi970NDvcRVPfd0OPeXhBfda38WjBq+WhQFk+czSHrmrSp34YHBxpat0EtiowA== + dependencies: + "@apollo/utils.logger" "^1.0.0" + lru-cache "^7.10.1" + +"@apollo/utils.logger@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@apollo/utils.logger/-/utils.logger-1.0.0.tgz#6e3460a2250c2ef7c2c3b0be6b5e148a1596f12b" + integrity sha512-dx9XrjyisD2pOa+KsB5RcDbWIAdgC91gJfeyLCgy0ctJMjQe7yZK5kdWaWlaOoCeX0z6YI9iYlg7vMPyMpQF3Q== + +"@apollo/utils.printwithreducedwhitespace@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz#c466299a4766eef8577a2a64c8f27712e8bd7e30" + integrity sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q== + +"@apollo/utils.removealiases@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz#75f6d83098af1fcae2d3beb4f515ad4a8452a8c1" + integrity sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A== + +"@apollo/utils.sortast@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz#93218c7008daf3e2a0725196085a33f5aab5ad07" + integrity sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA== + dependencies: + lodash.sortby "^4.7.0" + +"@apollo/utils.stripsensitiveliterals@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz#4920651f36beee8e260e12031a0c5863ad0c7b28" + integrity sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w== + +"@apollo/utils.usagereporting@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.0.tgz#b81df180f4ca78b91a22cb49105174a7f070db1e" + integrity sha512-5PL7hJMkTPmdo3oxPtigRrIyPxDk/ddrUryHPDaezL1lSFExpNzsDd2f1j0XJoHOg350GRd3LyD64caLA2PU1w== + dependencies: + "@apollo/utils.dropunuseddefinitions" "^1.1.0" + "@apollo/utils.printwithreducedwhitespace" "^1.1.0" + "@apollo/utils.removealiases" "1.0.0" + "@apollo/utils.sortast" "^1.1.0" + "@apollo/utils.stripsensitiveliterals" "^1.2.0" + apollo-reporting-protobuf "^3.3.1" + +"@apollographql/apollo-tools@^0.5.3": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz#cb3998c6cf12e494b90c733f44dd9935e2d8196c" + integrity sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw== + +"@apollographql/graphql-playground-html@1.6.29": + version "1.6.29" + resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz#a7a646614a255f62e10dcf64a7f68ead41dec453" + integrity sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA== + dependencies: + xss "^1.0.8" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.6.tgz#8b37d24e88e8e21c499d4328db80577d8882fa53" + integrity sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ== + +"@babel/generator@^7.18.6": + version "7.18.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.7.tgz#2aa78da3c05aadfc82dbac16c99552fc802284bd" + integrity sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A== + dependencies: + "@babel/types" "^7.18.7" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.13.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz#18d35bfb9f83b1293c22c55b3d576c1315b6ed96" + integrity sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg== + dependencies: + "@babel/compat-data" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" + integrity sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q== + +"@babel/helper-function-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz#8334fecb0afba66e6d87a7e8c6bb7fed79926b83" + integrity sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz#9448974dd4fb1d80fefe72e8a0af37809cd30d6d" + integrity sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg== + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-validator-identifier@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" @@ -23,6 +188,63 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/parser@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.6.tgz#845338edecad65ebffef058d3be851f1d28a63bc" + integrity sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw== + +"@babel/plugin-transform-runtime@^7.5.5": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz#77b14416015ea93367ca06979710f5000ff34ccb" + integrity sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + babel-plugin-polyfill-corejs2 "^0.3.1" + babel-plugin-polyfill-corejs3 "^0.5.2" + babel-plugin-polyfill-regenerator "^0.3.1" + semver "^6.3.0" + +"@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.9.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580" + integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/traverse@^7.13.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.6.tgz#a228562d2f46e89258efa4ddd0416942e2fd671d" + integrity sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.18.6", "@babel/types@^7.18.7": + version "7.18.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.7.tgz#a4a2c910c15040ea52cdd1ddb1614a65c8041726" + integrity sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -69,7 +291,7 @@ lru-cache "^5.1.1" semaphore-async-await "^1.5.1" -"@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": +"@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": version "2.6.5" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== @@ -88,7 +310,7 @@ ethereumjs-util "^7.1.1" miller-rabin "^4.0.0" -"@ethereumjs/tx@^3.5.1", "@ethereumjs/tx@^3.5.2": +"@ethereumjs/tx@^3.3.0", "@ethereumjs/tx@^3.3.2", "@ethereumjs/tx@^3.5.1", "@ethereumjs/tx@^3.5.2": version "3.5.2" resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== @@ -311,6 +533,23 @@ resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== +"@gnosis.pm/safe-contracts-v1.2.0@npm:@gnosis.pm/safe-contracts@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-contracts/-/safe-contracts-1.2.0.tgz#33e8332e09c19e8822fccb06c7d3eff806d091f6" + integrity sha512-lcpZodqztDgMICB0kAc8aJdQePwCaLJnbeNjgVTfLAo3fBckVRV06VHXg5IsZ26qLA4JfZ690Cb7TsDVE9ZF3w== + dependencies: + "@truffle/hdwallet-provider" "^1.0.0" + dotenv "^8.0.0" + openzeppelin-solidity "^2.0.0" + shelljs "^0.8.3" + solc "0.5.17" + truffle "^5.1.21" + +"@gnosis.pm/safe-contracts-v1.3.0@npm:@gnosis.pm/safe-contracts@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-contracts/-/safe-contracts-1.3.0.tgz#316741a7690d8751a1f701538cfc9ec80866eedc" + integrity sha512-1p+1HwGvxGUVzVkFjNzglwHrLNA67U/axP0Ct85FzzH8yhGJb4t9jDjPYocVMzLorDoWAfKicGy1akPY9jXRVw== + "@gnosis.pm/safe-core-sdk-types@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.1.0.tgz#dce372445ddbaf7eb960cfe98f5d4b2557004040" @@ -336,14 +575,6 @@ dependencies: semver "^7.3.7" -"@gnosis.pm/safe-ethers-lib@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.1.0.tgz#06dfe132f3590fbc5406918a193812cd922c641e" - integrity sha512-MG01hGu/3q/sl9fXE3sU7CMVpVMJ4k9/ro1JVZaE29jmsar1cHFUOJNws7Do3orxTLQZ2egkARcmyv+l673FoA== - dependencies: - "@gnosis.pm/safe-core-sdk-types" "^1.1.0" - "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" - "@gnosis.pm/safe-web3-lib@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.1.0.tgz#1d1bd986fe77a1af04afcf8443a6119e0617a89a" @@ -352,6 +583,63 @@ "@gnosis.pm/safe-core-sdk-types" "^1.1.0" "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" +"@graphql-tools/batch-execute@8.5.0": + version "8.5.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.5.0.tgz#2767a9abf4e2712871a69360a27ef13ada1c019e" + integrity sha512-S9/76X4uYIbVlJyRzXhCBbTJvVD0VvaWNqGiKgkITxlq4aBsTOHVuE84OSi3E1QKP3PTiJYrgMIn220iFOkyQw== + dependencies: + "@graphql-tools/utils" "8.8.0" + dataloader "2.1.0" + tslib "^2.4.0" + value-or-promise "1.0.11" + +"@graphql-tools/delegate@^8.4.3": + version "8.8.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-8.8.0.tgz#acd3e48e4ca82aace92cc3d920b5c727c35eaf7b" + integrity sha512-dbhfOI8rQXPcowXrbwHLOBY9oGi7qxtlrXF4RuRXmjqGTs2AgogdOE3Ep1+6wFD7qYTuFmHXZ8Cl0PmhoZUgrg== + dependencies: + "@graphql-tools/batch-execute" "8.5.0" + "@graphql-tools/schema" "8.5.0" + "@graphql-tools/utils" "8.8.0" + dataloader "2.1.0" + tslib "~2.4.0" + value-or-promise "1.0.11" + +"@graphql-tools/merge@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.3.0.tgz#d3a8ba10942f8598788c3e03f97cc1d0c0b055f8" + integrity sha512-xRa7RAQok/0DD2YnjuqikMrr7dUAxTpdGtZ7BkvUUGhYs3B3p7reCAfvOVr1DJAqVToP7hdlMk+S5+Ylk+AaqA== + dependencies: + "@graphql-tools/utils" "8.8.0" + tslib "^2.4.0" + +"@graphql-tools/mock@^8.1.2": + version "8.7.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/mock/-/mock-8.7.0.tgz#da286596ef05b84165e76cf6f608eeea4109a60c" + integrity sha512-K/hqP442mXAvW36v/3TmqFpNzRw14P86xlsJZod88OXwpDfb97X09z1QsaMcvSe8E7ijcKWLlTRk15/vDQSL2Q== + dependencies: + "@graphql-tools/schema" "8.5.0" + "@graphql-tools/utils" "8.8.0" + fast-json-stable-stringify "^2.1.0" + tslib "^2.4.0" + +"@graphql-tools/schema@8.5.0", "@graphql-tools/schema@^8.0.0", "@graphql-tools/schema@^8.3.1": + version "8.5.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-8.5.0.tgz#0332b3a2e674d16e9bf8a58dfd47432449ce2368" + integrity sha512-VeFtKjM3SA9/hCJJfr95aEdC3G0xIKM9z0Qdz4i+eC1g2fdZYnfWFt2ucW4IME+2TDd0enHlKzaV0qk2SLVUww== + dependencies: + "@graphql-tools/merge" "8.3.0" + "@graphql-tools/utils" "8.8.0" + tslib "^2.4.0" + value-or-promise "1.0.11" + +"@graphql-tools/utils@8.8.0": + version "8.8.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.8.0.tgz#8332ff80a1da9204ccf514750dd6f5c5cccf17dc" + integrity sha512-KJrtx05uSM/cPYFdTnGAS1doL5bftJLAiFCDMZ8Vkifztz3BFn3gpFiy/o4wDtM8s39G46mxmt2Km/RmeltfGw== + dependencies: + tslib "^2.4.0" + "@humanwhocodes/config-array@^0.9.2": version "0.9.5" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" @@ -376,11 +664,30 @@ resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== +"@josephg/resolvable@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@josephg/resolvable/-/resolvable-1.0.1.tgz#69bc4db754d79e1a2f17a650d3466e038d94a5eb" + integrity sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg== + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/resolve-uri@^3.0.3": version "3.0.8" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz#687cc2bbf243f4e9a868ecf2262318e2658873a1" integrity sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w== +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" @@ -394,6 +701,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@lerna/add@5.1.6": version "5.1.6" resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.1.6.tgz#f839096084a5d34da9e4813ea230da16c99b54c2" @@ -1292,19 +1607,19 @@ read-package-json-fast "^2.0.3" which "^2.0.2" -"@nrwl/cli@14.3.6": - version "14.3.6" - resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-14.3.6.tgz#bf9d36822bbe9db42c250f4151df2b496ae7f13f" - integrity sha512-MNCBzM3ZDsujEc5crltH/kEyNBKx6DofLHdpzY1EoiY+yF57W7E1B6ERkVUGDc52sR4snEUKpQLXdVFjwP+z8A== +"@nrwl/cli@14.4.0": + version "14.4.0" + resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-14.4.0.tgz#beae83e13cda27226dbfd365f84b2cc807013fd2" + integrity sha512-Hmn+Yj7VTmaztOgTCe0kYtZkBsp6NGPfvbm27FTgcda5TsxCkrCLah6btuS7hcX+h4Ss308z9hFMfNk2EvVWXA== dependencies: - nx "14.3.6" + nx "14.4.0" -"@nrwl/tao@14.3.6": - version "14.3.6" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-14.3.6.tgz#cb9ac487397dd1c399add2fd8564bc6debc0fec4" - integrity sha512-g3y6VRq4wNtbFZIclJwRR/1hcTesx6h64g7h80VWtyRw0pVq/0zAjb8abeQSTDLM15uc1pQJYPEfsR/KgI3Sow== +"@nrwl/tao@14.4.0": + version "14.4.0" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-14.4.0.tgz#691c1e21d3e0578b36ea0e989dbd616a06af9ce8" + integrity sha512-8PFM72SMWyhIPPeGpIJzzST/yfMAsf0zRKNfB90ra7FlHXXXzDZmpJvV8JpnCtSBGjT8OrcpZ8siD4JXov4ueA== dependencies: - nx "14.3.6" + nx "14.4.0" "@octokit/auth-token@^2.4.4": version "2.5.0" @@ -1344,10 +1659,10 @@ "@octokit/types" "^6.0.3" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^12.5.0": - version "12.5.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.5.0.tgz#e10b256237c877fa6f0a21922151dc03d9c57510" - integrity sha512-VatvE5wtRkJq6hAWGTBZ62WkrdlCiy0G0u27cVOYTfAWVZi7QqTurVcjpsyc5+9hXLPRP5O/DaNEs4TgAp4Mqg== +"@octokit/openapi-types@^12.6.1": + version "12.6.1" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.6.1.tgz#ce33e7a75eb0e5def4e1e17547c2aeca473fed4c" + integrity sha512-zirGmxkSQuZIQYsOLtCxNoKi7ByKLwGhrGhHz6YUI7h/c8xOES9bEoHOeq4z81uNf2AGAqNfPW9i3GOrpgKoJQ== "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" @@ -1355,11 +1670,11 @@ integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== "@octokit/plugin-paginate-rest@^2.16.8": - version "2.21.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.0.tgz#ddd425eaa09214dfdfdc9cc411fcf676b8985e65" - integrity sha512-MoGEKjvDpTOCVb5gbeiW7kZm/cRfT256UJwHEuy+y+gTUuKziyXaiOkt5rM/4nzhp8UxVgvok9Tu7dMMpUybiQ== + version "2.21.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.1.tgz#9ab7a21e9f35a6d5526a3082da3f8f43908449e4" + integrity sha512-NVNTK63yoTFp07GqISWK+uDfGH1CAPhQXS7LzsJBvaK5W+UlvG549pLZC55FK0FqANVl6q/9ra3SR5c97xF/sw== dependencies: - "@octokit/types" "^6.38.1" + "@octokit/types" "^6.38.2" "@octokit/plugin-request-log@^1.0.4": version "1.0.4" @@ -1367,11 +1682,11 @@ integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== "@octokit/plugin-rest-endpoint-methods@^5.12.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.0.tgz#e0a774d78bb17fb9b6b9ae48d5517940f7f61e90" - integrity sha512-mvdwq+LvhR2GRDY82FgSZ52xX6wkOCpjiI3amiKbzKHd9nyKeFdXLsIQ3Go12tWRtvo+HwqoypLHDjRrgMFDQA== + version "5.16.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.1.tgz#24e5c33cb039bef3168db7e6266be5a6025df2a4" + integrity sha512-RMHD3aJZvOpjR2fGzD2an6eU7LG8MsknhUHvP+wRUnKdbt7eDdhTMLQsZ4xsHZcLNsxPO/K4DDIZPhI2s571Ag== dependencies: - "@octokit/types" "^6.38.0" + "@octokit/types" "^6.38.2" deprecation "^2.3.1" "@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": @@ -1405,12 +1720,17 @@ "@octokit/plugin-request-log" "^1.0.4" "@octokit/plugin-rest-endpoint-methods" "^5.12.0" -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.38.0", "@octokit/types@^6.38.1": - version "6.38.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.38.1.tgz#03d70745564954dfdae32df23d5f1578f958474f" - integrity sha512-kWMohLCIvnwApRmxRFDOqve7puiNNdtVfgwdDOm6QyJNorWOgKv2/AodCcGqx63o28kF7Dr4/nJCatrwwqhULg== +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.38.2": + version "6.38.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.38.2.tgz#b837c76a517ebd94bb91e867eb6761ec43f3adc7" + integrity sha512-McFegRKQ1qaMSnDt8ScJzv26IFR1zhXveYaqx8wF7QEgiy4GHMrnX4xbP+Yl+kAr12DCplL3WJq4xkeD1VMfmw== dependencies: - "@octokit/openapi-types" "^12.5.0" + "@octokit/openapi-types" "^12.6.1" + +"@openzeppelin/contracts@^4.6.0": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.7.0.tgz#3092d70ea60e3d1835466266b1d68ad47035a2d5" + integrity sha512-52Qb+A1DdOss8QvJrijYYPSf32GUg2pGaG/yCxtaA3cu4jduouTdg4XZSMLW9op54m1jH7J8hoajhHKOPsoJFw== "@parcel/watcher@2.0.4": version "2.0.4" @@ -1420,6 +1740,103 @@ node-addon-api "^3.2.1" node-gyp-build "^4.3.0" +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + +"@redux-saga/core@^1.0.0": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.1.3.tgz#3085097b57a4ea8db5528d58673f20ce0950f6a4" + integrity sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg== + dependencies: + "@babel/runtime" "^7.6.3" + "@redux-saga/deferred" "^1.1.2" + "@redux-saga/delay-p" "^1.1.2" + "@redux-saga/is" "^1.1.2" + "@redux-saga/symbols" "^1.1.2" + "@redux-saga/types" "^1.1.0" + redux "^4.0.4" + typescript-tuple "^2.2.1" + +"@redux-saga/deferred@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.1.2.tgz#59937a0eba71fff289f1310233bc518117a71888" + integrity sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ== + +"@redux-saga/delay-p@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.1.2.tgz#8f515f4b009b05b02a37a7c3d0ca9ddc157bb355" + integrity sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g== + dependencies: + "@redux-saga/symbols" "^1.1.2" + +"@redux-saga/is@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.1.2.tgz#ae6c8421f58fcba80faf7cadb7d65b303b97e58e" + integrity sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w== + dependencies: + "@redux-saga/symbols" "^1.1.2" + "@redux-saga/types" "^1.1.0" + +"@redux-saga/symbols@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.1.2.tgz#216a672a487fc256872b8034835afc22a2d0595d" + integrity sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ== + +"@redux-saga/types@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.1.0.tgz#0e81ce56b4883b4b2a3001ebe1ab298b84237204" + integrity sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg== + "@sentry/core@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" @@ -1488,6 +1905,11 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + "@solidity-parser/parser@^0.14.1": version "0.14.2" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.2.tgz#2d8f2bddb217621df882ceeae7d7b42ae8664db3" @@ -1495,6 +1917,13 @@ dependencies: antlr4ts "^0.5.0-alpha.4" +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -1505,6 +1934,298 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@truffle/abi-utils@^0.2.14": + version "0.2.14" + resolved "https://registry.yarnpkg.com/@truffle/abi-utils/-/abi-utils-0.2.14.tgz#01a8e21f4b540f301c94990fb12bacaf059d1ba6" + integrity sha512-2eHoWSFVutt+xAN8+g2x6N3+TM0AMUmGS4iW7KJNfxDsGdMBNe+qqUrDKM0NnA16yxqk95yQztO5EmWPiXw3+Q== + dependencies: + change-case "3.0.2" + faker "5.5.3" + fast-check "^2.12.1" + +"@truffle/code-utils@^1.2.34": + version "1.2.34" + resolved "https://registry.yarnpkg.com/@truffle/code-utils/-/code-utils-1.2.34.tgz#1e843baa7da6cd178d392cf5f1b95df4409ff7b2" + integrity sha512-Ie+PTdJIvK90voInSvn7WEdAsXd1VUw0TsX2225OMGVyYRWiQdX0K6Vfkib7RSZvdUEaURFAaHo5r57l2RacWg== + dependencies: + cbor "^5.1.0" + +"@truffle/codec@^0.13.2": + version "0.13.2" + resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.13.2.tgz#c7b1a3c6833d863843200dc2a739fd4174ae0707" + integrity sha512-iViBnh6WV2BKaLboFC3xd9FGgC2Iybx4CHI+A5PPPqFkjnEycigdN8wnV2eqic9ptE1Ix7wsj9urZitnsnLhCA== + dependencies: + "@truffle/abi-utils" "^0.2.14" + "@truffle/compile-common" "^0.7.32" + big.js "^6.0.3" + bn.js "^5.1.3" + cbor "^5.1.0" + debug "^4.3.1" + lodash "^4.17.21" + semver "^7.3.4" + utf8 "^3.0.0" + web3-utils "1.7.4" + +"@truffle/compile-common@^0.7.32": + version "0.7.32" + resolved "https://registry.yarnpkg.com/@truffle/compile-common/-/compile-common-0.7.32.tgz#3ea6ebfe99bb2bc339ca7723d491e7c52a999aed" + integrity sha512-SzIxwwQj8mJwoa7/kjkAslGenB4NejhmRHmdWdxNS5fqg2XqKhmSJcjir5qFjjvNzjcFZGecLg4EOm1Hj6letw== + dependencies: + "@truffle/error" "^0.1.0" + colors "1.4.0" + +"@truffle/config@^1.3.31": + version "1.3.31" + resolved "https://registry.yarnpkg.com/@truffle/config/-/config-1.3.31.tgz#eed77fb639544e80843d6b5419aec806b582057c" + integrity sha512-RTXtRiFrzUT1WVmP8KdBl/DJ2b9GV77gOYSZ3NILuSrEL8IzWq57F1G/9rg5jq1v8b5JLDd7db5Yitn53ipBdA== + dependencies: + "@truffle/error" "^0.1.0" + "@truffle/events" "^0.1.8" + "@truffle/provider" "^0.2.56" + conf "^10.0.2" + find-up "^2.1.0" + lodash "^4.17.21" + original-require "^1.0.1" + +"@truffle/dashboard-message-bus-client@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.1.tgz#8719ebaa7c5758853b81a33e8a6014af796727bc" + integrity sha512-tLcLxfnk8fa8m6gnnIiuIkJXMwOnm1gX60hXis091bEokJaR1/RYEdDQsFxy8/XkJmOOEfQ0NRD5ZPXn0KYvjA== + dependencies: + "@truffle/dashboard-message-bus-common" "^0.1.1" + "@truffle/promise-tracker" "^0.1.0" + axios "^0.24.0" + debug "^4.3.1" + delay "^5.0.0" + isomorphic-ws "^4.0.1" + tiny-typed-emitter "^2.1.0" + ws "^7.2.0" + +"@truffle/dashboard-message-bus-common@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@truffle/dashboard-message-bus-common/-/dashboard-message-bus-common-0.1.1.tgz#105071b90b04dd22fc7c9b267fc02f45493ebeab" + integrity sha512-DqrP2IQeao2u3en/csj9MwmEk7KKgLfvyHMwxrU6NyFXQ0Rs6F0AycpGTDivnoowVxqJohA+aut4IYHQuvwH8A== + +"@truffle/db-loader@^0.1.22": + version "0.1.22" + resolved "https://registry.yarnpkg.com/@truffle/db-loader/-/db-loader-0.1.22.tgz#605662ceae3460279b04bc6e2cfed659ed4aed26" + integrity sha512-n1ljxscIaci6r0qbJMw34ng2IQGK3lXMoowO5ohP9Gwaqxv+atNLsV7s/6YVmGgsLV8cDNIEZoKKnRh/EDJO4g== + optionalDependencies: + "@truffle/db" "^1.0.12" + +"@truffle/db@^1.0.12": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@truffle/db/-/db-1.0.12.tgz#e1702615776be1b933f253c78edf535b3937620f" + integrity sha512-/7T3kHsMgih/QjtcTInllyo5W9OmAPCA+faHHGLgm0G76gML738NOwz3T/JZhjMKnQabYulZeWid0sjUlzlIPg== + dependencies: + "@graphql-tools/delegate" "^8.4.3" + "@graphql-tools/schema" "^8.3.1" + "@truffle/abi-utils" "^0.2.14" + "@truffle/code-utils" "^1.2.34" + "@truffle/config" "^1.3.31" + abstract-leveldown "^7.2.0" + apollo-server "^3.6.3" + debug "^4.3.1" + fs-extra "^9.1.0" + graphql "^15.3.0" + graphql-tag "^2.11.0" + json-stable-stringify "^1.0.1" + pascal-case "^2.0.1" + pluralize "^8.0.0" + pouchdb "7.3.0" + pouchdb-adapter-memory "^7.1.1" + pouchdb-adapter-node-websql "^7.0.0" + pouchdb-debug "^7.1.1" + pouchdb-find "^7.0.0" + web3-utils "1.7.4" + +"@truffle/debugger@^10.0.16": + version "10.0.16" + resolved "https://registry.yarnpkg.com/@truffle/debugger/-/debugger-10.0.16.tgz#cab78205ee46d48f49fc6840f497a3f84ce044d6" + integrity sha512-poXnJ+fLA2oTMHBhfuML4o1bMtersDVWypATi+YXxCvebVMUQMgOv1baVYDl0pK/J3FaLQSI1W7x8B6415f7cQ== + dependencies: + "@truffle/abi-utils" "^0.2.14" + "@truffle/codec" "^0.13.2" + "@truffle/source-map-utils" "^1.3.88" + bn.js "^5.1.3" + debug "^4.3.1" + json-pointer "^0.6.1" + json-stable-stringify "^1.0.1" + lodash "^4.17.21" + redux "^3.7.2" + redux-saga "1.0.0" + reselect-tree "^1.3.7" + semver "^7.3.4" + web3 "1.7.4" + web3-eth-abi "1.7.4" + +"@truffle/error@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.1.0.tgz#5e9fed79e6cda624c926d314b280a576f8b22a36" + integrity sha512-RbUfp5VreNhsa2Q4YbBjz18rOQI909pG32bghl1hulO7IpvcqTS+C3Ge5cNbiWQ1WGzy1wIeKLW0tmQtHFB7qg== + +"@truffle/events@^0.1.8": + version "0.1.8" + resolved "https://registry.yarnpkg.com/@truffle/events/-/events-0.1.8.tgz#85e0a1bd56600f90cb96d96fc01c0f978be08cd7" + integrity sha512-oK+nnV9ToCk1qKW01l+bojV61sCj1zljcS5+xBZ9Dteb52mQ9tpsy6xuQXVcsHAhZOQ4Gz2S3bTrlvjU4AyeCQ== + dependencies: + "@truffle/dashboard-message-bus-client" "^0.1.1" + "@truffle/spinners" "^0.2.0" + debug "^4.3.1" + emittery "^0.4.1" + web3-utils "1.7.4" + +"@truffle/hdwallet-provider@^1.0.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@truffle/hdwallet-provider/-/hdwallet-provider-1.7.0.tgz#5cfa8bc67c2a30b3943d3dab78f74c6a191cde02" + integrity sha512-nT7BPJJ2jPCLJc5uZdVtRnRMny5he5d3kO9Hi80ZSqe5xlnK905grBptM/+CwOfbeqHKQirI1btwm6r3wIBM8A== + dependencies: + "@ethereumjs/common" "^2.4.0" + "@ethereumjs/tx" "^3.3.0" + "@trufflesuite/web3-provider-engine" "15.0.14" + eth-sig-util "^3.0.1" + ethereum-cryptography "^0.1.3" + ethereum-protocol "^1.0.1" + ethereumjs-util "^6.1.0" + ethereumjs-wallet "^1.0.1" + +"@truffle/interface-adapter@^0.5.18": + version "0.5.18" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.18.tgz#fe7cc32495e156bf78cdd41e6a86c5e0b09572d2" + integrity sha512-OPrz7bf+TDjZGruXzm6d08SpFNGERctf4O9uC6IJjNmjvKtdEYcLY3DTXOZT6I9PmrViCJ+dC5VlZD5IaamQnQ== + dependencies: + bn.js "^5.1.3" + ethers "^4.0.32" + web3 "1.7.4" + +"@truffle/promise-tracker@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@truffle/promise-tracker/-/promise-tracker-0.1.0.tgz#3fb567fbaf791a168cffa207f4770829ccb1d4b8" + integrity sha512-XH9gf7Vfgn4iPnERpJJPFSob85LXeKg8tkoUZku8JdAYUNIjVztLVJQwh54exsz7Npe6RPh/Hcj8Tiw65uooiA== + +"@truffle/provider@^0.2.56": + version "0.2.56" + resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.56.tgz#437d66f24d21eb144565d7135e570c79fb666b84" + integrity sha512-9mz03psTeWkL45IrF3NUTiKO46HUi+9Lkco3rVjqzUQ+5rAhld0TwOljKbLvVKbDFtHl5LVuC+H4uQP8fpoXSg== + dependencies: + "@truffle/error" "^0.1.0" + "@truffle/interface-adapter" "^0.5.18" + debug "^4.3.1" + web3 "1.7.4" + +"@truffle/source-map-utils@^1.3.88": + version "1.3.88" + resolved "https://registry.yarnpkg.com/@truffle/source-map-utils/-/source-map-utils-1.3.88.tgz#5c16dc15e41aec44618f8d8ae9bf03398d90cc12" + integrity sha512-8PMvCR+l2TpyEO5CV5uA6w87w7Nqqhd5zM0ukwYhfrTAmBqNNPk+pWYAjaL7fVThDeaOkVy+aoOo0rUW5SzAfw== + dependencies: + "@truffle/code-utils" "^1.2.34" + "@truffle/codec" "^0.13.2" + debug "^4.3.1" + json-pointer "^0.6.1" + node-interval-tree "^1.3.3" + web3-utils "1.7.4" + +"@truffle/spinners@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@truffle/spinners/-/spinners-0.2.0.tgz#dc595404fbb8834b4ab6a13f63a29e95ac0f6525" + integrity sha512-rX0qA7GRDzN2ILClUIifMrVzF9EMR9b23CNasJkBgLBvqp1xKwdMbHG3IwUTYelGQtnGQmZ4UZQsBdDb6wf1Tw== + dependencies: + "@trufflesuite/spinnies" "^0.1.0" + +"@trufflesuite/bigint-buffer@1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz#e2604d76e1e4747b74376d68f1312f9944d0d75d" + integrity sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw== + dependencies: + node-gyp-build "4.3.0" + +"@trufflesuite/eth-json-rpc-filters@^4.1.2-1": + version "4.1.2-1" + resolved "https://registry.yarnpkg.com/@trufflesuite/eth-json-rpc-filters/-/eth-json-rpc-filters-4.1.2-1.tgz#61ab78c52e98a883e5cf086925b34a30297b1824" + integrity sha512-/MChvC5dw2ck9NU1cZmdovCz2VKbOeIyR4tcxDvA5sT+NaL0rA2/R5U0yI7zsbo1zD+pgqav77rQHTzpUdDNJQ== + dependencies: + "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-0" + await-semaphore "^0.1.3" + eth-query "^2.1.2" + json-rpc-engine "^5.1.3" + lodash.flatmap "^4.5.0" + safe-event-emitter "^1.0.1" + +"@trufflesuite/eth-json-rpc-infura@^4.0.3-0": + version "4.0.3-0" + resolved "https://registry.yarnpkg.com/@trufflesuite/eth-json-rpc-infura/-/eth-json-rpc-infura-4.0.3-0.tgz#6d22122937cf60ec9d21a02351c101fdc608c4fe" + integrity sha512-xaUanOmo0YLqRsL0SfXpFienhdw5bpQ1WEXxMTRi57az4lwpZBv4tFUDvcerdwJrxX9wQqNmgUgd1BrR01dumw== + dependencies: + "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-1" + cross-fetch "^2.1.1" + eth-json-rpc-errors "^1.0.1" + json-rpc-engine "^5.1.3" + +"@trufflesuite/eth-json-rpc-middleware@^4.4.2-0", "@trufflesuite/eth-json-rpc-middleware@^4.4.2-1": + version "4.4.2-1" + resolved "https://registry.yarnpkg.com/@trufflesuite/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.2-1.tgz#8c3638ed8a7ed89a1e5e71407de068a65bef0df2" + integrity sha512-iEy9H8ja7/8aYES5HfrepGBKU9n/Y4OabBJEklVd/zIBlhCCBAWBqkIZgXt11nBXO/rYAeKwYuE3puH3ByYnLA== + dependencies: + "@trufflesuite/eth-sig-util" "^1.4.2" + btoa "^1.2.1" + clone "^2.1.1" + eth-json-rpc-errors "^1.0.1" + eth-query "^2.1.2" + ethereumjs-block "^1.6.0" + ethereumjs-tx "^1.3.7" + ethereumjs-util "^5.1.2" + ethereumjs-vm "^2.6.0" + fetch-ponyfill "^4.0.0" + json-rpc-engine "^5.1.3" + json-stable-stringify "^1.0.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + +"@trufflesuite/eth-sig-util@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@trufflesuite/eth-sig-util/-/eth-sig-util-1.4.2.tgz#b529e2f38ac08e652116f48981132a26242a4f08" + integrity sha512-+GyfN6b0LNW77hbQlH3ufZ/1eCON7mMrGym6tdYf7xiNw9Vv3jBO72bmmos1EId2NgBvPMhmYYm6DSLQFTmzrA== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^5.1.1" + +"@trufflesuite/spinnies@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@trufflesuite/spinnies/-/spinnies-0.1.0.tgz#da09ff7c526b563ff6e4d4d86b7884ec00a77be2" + integrity sha512-22rVi7rECyAg9vsopa9jR84xQ9kSbjRxCYI9SPbHx4jjfRQODDzmVZtXLobUuXEQZYLgP1pXBtgY5kReb72E2g== + dependencies: + chalk "^4.1.2" + cli-cursor "^3.1.0" + strip-ansi "^6.0.0" + +"@trufflesuite/web3-provider-engine@15.0.14": + version "15.0.14" + resolved "https://registry.yarnpkg.com/@trufflesuite/web3-provider-engine/-/web3-provider-engine-15.0.14.tgz#8f9696f434585cc0ab2e57c312090c1f138bc471" + integrity sha512-6/LoWvNMxYf0oaYzJldK2a9AdnkAdIeJhHW4nuUBAeO29eK9xezEaEYQ0ph1QRTaICxGxvn+1Azp4u8bQ8NEZw== + dependencies: + "@ethereumjs/tx" "^3.3.0" + "@trufflesuite/eth-json-rpc-filters" "^4.1.2-1" + "@trufflesuite/eth-json-rpc-infura" "^4.0.3-0" + "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-1" + "@trufflesuite/eth-sig-util" "^1.4.2" + async "^2.5.0" + backoff "^2.5.0" + clone "^2.0.0" + cross-fetch "^2.1.0" + eth-block-tracker "^4.4.2" + eth-json-rpc-errors "^2.0.2" + ethereumjs-block "^1.2.2" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.85.0" + semaphore "^1.0.3" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" + "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -1525,11 +2246,26 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== +"@typechain/ethers-v5@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz#6aa93bea7425c0463bd8a61eea3643540ef851bd" + integrity sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ== + dependencies: + lodash "^4.17.15" + ts-essentials "^7.0.1" + "@types/abstract-leveldown@*": version "7.2.0" resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#f055979a99f7654e84d6b8e6267419e9c4cfff87" integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== +"@types/accepts@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" + integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== + dependencies: + "@types/node" "*" + "@types/bignumber.js@^5.0.0": version "5.0.0" resolved "https://registry.yarnpkg.com/@types/bignumber.js/-/bignumber.js-5.0.0.tgz#d9f1a378509f3010a3255e9cc822ad0eeb4ab969" @@ -1551,6 +2287,14 @@ dependencies: "@types/node" "*" +"@types/body-parser@*", "@types/body-parser@1.19.2": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + "@types/chai-as-promised@^7.1.5": version "7.1.5" resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz#6e016811f6c7a64f2eed823191c3a6955094e255" @@ -1563,6 +2307,37 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/cors@2.8.12": + version "2.8.12" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" + integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== + +"@types/express-serve-static-core@4.17.29", "@types/express-serve-static-core@^4.17.18": + version "4.17.29" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" + integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@4.17.13": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" @@ -1587,11 +2362,21 @@ "@types/level-errors" "*" "@types/node" "*" +"@types/long@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== + "@types/lru-cache@^5.1.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + "@types/minimatch@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" @@ -1614,10 +2399,23 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== +"@types/node-fetch@^2.6.2": + version "2.6.2" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" + integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + "@types/node@*": - version "18.0.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.0.tgz#67c7b724e1bcdd7a8821ce0d5ee184d3b4dd525a" - integrity sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA== + version "18.0.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.1.tgz#e91bd73239b338557a84d1f67f7b9e0f25643870" + integrity sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg== + +"@types/node@^10.1.0": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== "@types/node@^12.12.6": version "12.20.55" @@ -1651,6 +2449,16 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a" integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + "@types/resolve@^0.0.8": version "0.0.8" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" @@ -1665,6 +2473,14 @@ dependencies: "@types/node" "*" +"@types/serve-static@*": + version "1.13.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" + integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + "@types/sinon-chai@^3.2.3": version "3.2.8" resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.8.tgz#5871d09ab50d671d8e6dd72e9073f8e738ac61dc" @@ -1699,13 +2515,13 @@ "@types/underscore" "*" "@typescript-eslint/eslint-plugin@^5.17.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz#524a11e15c09701733033c96943ecf33f55d9ca1" - integrity sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow== + version "5.30.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.4.tgz#a46c8c0ab755a936cb63786a6222876ce51675e4" + integrity sha512-xjujQISAIa4HAaos8fcMZXmqkuZqMx6icdxkI88jMM/eNe4J8AuTLYnLK+zdm0mBYLyctdFf//UE4/xFCcQzYQ== dependencies: - "@typescript-eslint/scope-manager" "5.30.0" - "@typescript-eslint/type-utils" "5.30.0" - "@typescript-eslint/utils" "5.30.0" + "@typescript-eslint/scope-manager" "5.30.4" + "@typescript-eslint/type-utils" "5.30.4" + "@typescript-eslint/utils" "5.30.4" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -1714,68 +2530,68 @@ tsutils "^3.21.0" "@typescript-eslint/parser@^5.17.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.0.tgz#a2184fb5f8ef2bf1db0ae61a43907e2e32aa1b8f" - integrity sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA== + version "5.30.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.4.tgz#659411e8700b22c8d5400798ef24838425bf4567" + integrity sha512-/ge1HtU63wVoED4VnlU2o+FPFmi017bPYpeSrCmd8Ycsti4VSxXrmcpXXm7JpI4GT0Aa7qviabv1PEp6L5bboQ== dependencies: - "@typescript-eslint/scope-manager" "5.30.0" - "@typescript-eslint/types" "5.30.0" - "@typescript-eslint/typescript-estree" "5.30.0" + "@typescript-eslint/scope-manager" "5.30.4" + "@typescript-eslint/types" "5.30.4" + "@typescript-eslint/typescript-estree" "5.30.4" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz#bf585ee801ab4ad84db2f840174e171a6bb002c7" - integrity sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ== +"@typescript-eslint/scope-manager@5.30.4": + version "5.30.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.4.tgz#8140efd2bc12d41d74e8af23872a89f3edbe552e" + integrity sha512-DNzlQwGSiGefz71JwaHrpcaAX3zYkEcy8uVuan3YMKOa6qeW/y+7SaD8KIsIAruASwq6P+U4BjWBWtM2O+mwBQ== dependencies: - "@typescript-eslint/types" "5.30.0" - "@typescript-eslint/visitor-keys" "5.30.0" + "@typescript-eslint/types" "5.30.4" + "@typescript-eslint/visitor-keys" "5.30.4" -"@typescript-eslint/type-utils@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz#98f3af926a5099153f092d4dad87148df21fbaae" - integrity sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg== +"@typescript-eslint/type-utils@5.30.4": + version "5.30.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.4.tgz#00ff19073cd01f7d27e9af49ce08d6a69f1e4f01" + integrity sha512-55cf1dZviwwv+unDB+mF8vZkfta5muTK6bppPvenWWCD7slZZ0DEsXUjZerqy7Rq8s3J4SXdg4rMIY8ngCtTmA== dependencies: - "@typescript-eslint/utils" "5.30.0" + "@typescript-eslint/utils" "5.30.4" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.0.tgz#db7d81d585a3da3801432a9c1d2fafbff125e110" - integrity sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag== +"@typescript-eslint/types@5.30.4": + version "5.30.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.4.tgz#3bc99eca8ba3fcfd6a21480e216b09dab81c3999" + integrity sha512-NTEvqc+Vvu8Q6JeAKryHk2eqLKqsr2St3xhIjhOjQv5wQUBhaTuix4WOSacqj0ONWfKVU12Eug3LEAB95GBkMA== -"@typescript-eslint/typescript-estree@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz#4565ee8a6d2ac368996e20b2344ea0eab1a8f0bb" - integrity sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw== +"@typescript-eslint/typescript-estree@5.30.4": + version "5.30.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.4.tgz#ac4be8a2f8fb1f1c3b346d5992a36163121ddb3f" + integrity sha512-V4VnEs6/J9/nNizaA12IeU4SAeEYaiKr7XndLNfV5+3zZSB4hIu6EhHJixTKhvIqA+EEHgBl6re8pivBMLLO1w== dependencies: - "@typescript-eslint/types" "5.30.0" - "@typescript-eslint/visitor-keys" "5.30.0" + "@typescript-eslint/types" "5.30.4" + "@typescript-eslint/visitor-keys" "5.30.4" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.0.tgz#1dac771fead5eab40d31860716de219356f5f754" - integrity sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw== +"@typescript-eslint/utils@5.30.4": + version "5.30.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.4.tgz#07a2b7ce80b2527ea506829f190591b76c70ba9f" + integrity sha512-a+GQrJzOUhn4WT1mUumXDyam+22Oo4c5K/jnZ+6r/4WTQF3q8e4CsC9PLHb4SnOClzOqo/5GLZWvkE1aa5UGKQ== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.30.0" - "@typescript-eslint/types" "5.30.0" - "@typescript-eslint/typescript-estree" "5.30.0" + "@typescript-eslint/scope-manager" "5.30.4" + "@typescript-eslint/types" "5.30.4" + "@typescript-eslint/typescript-estree" "5.30.4" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz#07721d23daca2ec4c2da7f1e660d41cd78bacac3" - integrity sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw== +"@typescript-eslint/visitor-keys@5.30.4": + version "5.30.4" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.4.tgz#b4969df1a440cc999d4bb7f7b7932dce05537089" + integrity sha512-ulKGse3mruSc8x6l8ORSc6+1ORyJzKmZeIaRTu/WpaF/jx3vHvEn5XZUKF9XaVg2710mFmTAUlLcLYLPp/Zf/Q== dependencies: - "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/types" "5.30.4" eslint-visitor-keys "^3.3.0" "@ungap/promise-all-settled@1.1.2": @@ -1796,7 +2612,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abort-controller@^3.0.0: +abort-controller@3.0.0, abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== @@ -1814,7 +2630,33 @@ abstract-leveldown@^6.2.1: level-supports "~1.0.0" xtend "~4.0.0" -abstract-leveldown@~6.2.1: +abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@~2.6.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" + integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@~2.7.1: + version "2.7.2" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" + integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3: version "6.2.3" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== @@ -1825,6 +2667,14 @@ abstract-leveldown@~6.2.1: level-supports "~1.0.0" xtend "~4.0.0" +accepts@^1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -1850,6 +2700,16 @@ adm-zip@^0.4.16: resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +aes-js@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" + integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== + agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -1874,7 +2734,14 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.12.4: +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv@^6.10.0, ajv@^6.12.3, 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== @@ -1884,6 +2751,16 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.6.3: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -1901,7 +2778,12 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" -ansi-regex@^5.0.1: +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -1943,6 +2825,115 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +apollo-datasource@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-3.3.2.tgz#5711f8b38d4b7b53fb788cb4dbd4a6a526ea74c8" + integrity sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + apollo-server-env "^4.2.1" + +apollo-reporting-protobuf@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.3.1.tgz#8c8761f9ac4375fd8490262d6144057cec6ce0b3" + integrity sha512-tyvj3Vj71TCh6c8PtdHOLgHHBSJ05DF/A/Po3q8yfHTBkOPcOJZE/GGN/PT/pwKg7HHxKcAeHDw7+xciVvGx0w== + dependencies: + "@apollo/protobufjs" "1.2.2" + +apollo-server-core@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-3.9.0.tgz#44b39e378314cfc0596be7003d3f1f1397c88eea" + integrity sha512-WS54C33cTriDaBIcj7ijWv/fgeJICcrQKlP1Cn6pnZp/eumpMraezLeJ3gFWAXprOuR2E3fZe64lNlup0fMu8w== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + "@apollo/utils.logger" "^1.0.0" + "@apollo/utils.usagereporting" "^1.0.0" + "@apollographql/apollo-tools" "^0.5.3" + "@apollographql/graphql-playground-html" "1.6.29" + "@graphql-tools/mock" "^8.1.2" + "@graphql-tools/schema" "^8.0.0" + "@josephg/resolvable" "^1.0.0" + apollo-datasource "^3.3.2" + apollo-reporting-protobuf "^3.3.1" + apollo-server-env "^4.2.1" + apollo-server-errors "^3.3.1" + apollo-server-plugin-base "^3.6.1" + apollo-server-types "^3.6.1" + async-retry "^1.2.1" + fast-json-stable-stringify "^2.1.0" + graphql-tag "^2.11.0" + loglevel "^1.6.8" + lru-cache "^6.0.0" + sha.js "^2.4.11" + uuid "^8.0.0" + whatwg-mimetype "^3.0.0" + +apollo-server-env@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-4.2.1.tgz#ea5b1944accdbdba311f179e4dfaeca482c20185" + integrity sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g== + dependencies: + node-fetch "^2.6.7" + +apollo-server-errors@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz#ba5c00cdaa33d4cbd09779f8cb6f47475d1cd655" + integrity sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA== + +apollo-server-express@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-3.9.0.tgz#1ff3b53fe76e4e8be04b8477ea8a3d9586313af1" + integrity sha512-scSeHy9iB7W3OiF3uLQEzad9Jm9tEfDF8ACsJb2P+xX69uqg6zizsrQvj3qRhazCO7FKMcMu9zQFR0hy7zKbUA== + dependencies: + "@types/accepts" "^1.3.5" + "@types/body-parser" "1.19.2" + "@types/cors" "2.8.12" + "@types/express" "4.17.13" + "@types/express-serve-static-core" "4.17.29" + accepts "^1.3.5" + apollo-server-core "^3.9.0" + apollo-server-types "^3.6.1" + body-parser "^1.19.0" + cors "^2.8.5" + parseurl "^1.3.3" + +apollo-server-plugin-base@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-3.6.1.tgz#33e9f26433d5a8b8ed5d27e9fa88de9ef0c2c704" + integrity sha512-bFpxzWO0LTTtSAkGVBeaAtnQXJ5ZCi8eaLN/eMSju8RByifmF3Kr6gAqcOZhOH/geQEt3Y6G8n3bR0eHTGxljQ== + dependencies: + apollo-server-types "^3.6.1" + +apollo-server-types@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-3.6.1.tgz#704e5309bd947306030df01f982e36d1d4753eaa" + integrity sha512-XOPlBlRdwP00PrG03OffGGWuzyei+J9t1rAnvyHsSdP0JCgQWigHJfvL1N9Bhgi4UTjl9JadKOJh1znLNlqIFQ== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + "@apollo/utils.logger" "^1.0.0" + apollo-reporting-protobuf "^3.3.1" + apollo-server-env "^4.2.1" + +apollo-server@^3.6.3: + version "3.9.0" + resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-3.9.0.tgz#391b60c4c24d37c65855cccc8aa886e684bc1776" + integrity sha512-g80gXDuK8fl2W0fQF/hEyeoO9AU+sO2gBzeJAYUyGLotYc+oL/Y3mTRk5GB8C7cXUXCg5uvWbUj8va0E5UZE7w== + dependencies: + "@types/express" "4.17.13" + apollo-server-core "^3.9.0" + apollo-server-express "^3.9.0" + express "^4.17.1" + +app-module-path@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" + integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + "aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" @@ -1956,6 +2947,14 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +are-we-there-yet@~1.1.2: + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -1966,11 +2965,31 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +argsarray@0.0.1, argsarray@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" + integrity sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg== + +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1, array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + array-differ@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" @@ -1996,6 +3015,28 @@ asap@^2.0.0: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" @@ -2006,36 +3047,116 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-eventemitter@^0.2.4: +async-eventemitter@^0.2.2, async-eventemitter@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== dependencies: async "^2.4.0" -async@^2.4.0: +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async-retry@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + +async@^1.4.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + +async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0: version "2.6.4" resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +atomically@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe" + integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w== + available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +await-semaphore@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/await-semaphore/-/await-semaphore-0.1.3.tgz#2b88018cc8c28e06167ae1cdff02504f1f9688d3" + integrity sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axios@^0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" + integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== + dependencies: + follow-redirects "^1.14.4" + +babel-plugin-polyfill-corejs2@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.3.1" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" + +babel-plugin-polyfill-regenerator@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + +backoff@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" + integrity sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA== + dependencies: + precond "0.2" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^3.0.2: +base-x@^3.0.2, base-x@^3.0.8: version "3.0.9" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== @@ -2047,12 +3168,24 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + before-after-hook@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== -bignumber.js@*, bignumber.js@^9.0.0: +big.js@^6.0.3: + version "6.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.0.tgz#39c60822aecb0f34a1d79a90fe9908a0ddf45e1d" + integrity sha512-paIKvJiAaOYdLt6MfnvxkDo64lTOV257XYJyX3oJnJQocIclUn+48k6ZerH/c5FxWE6DGJu1TKDYis7tqHg9kg== + +bignumber.js@*, bignumber.js@^9.0.0, bignumber.js@^9.0.1: version "9.0.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== @@ -2088,21 +3221,44 @@ blakejs@^1.1.0: resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== +bluebird@^3.5.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + bn.js@4.11.6: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== -bn.js@^4.0.0, bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +body-parser@1.20.0, body-parser@^1.16.0, body-parser@^1.19.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2135,7 +3291,7 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserify-aes@^1.2.0: +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -2147,6 +3303,58 @@ browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserslist@^4.20.2, browserslist@^4.21.0: + version "4.21.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.1.tgz#c9b9b0a54c7607e8dc3e01a0d311727188011a00" + integrity sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ== + dependencies: + caniuse-lite "^1.0.30001359" + electron-to-chromium "^1.4.172" + node-releases "^2.0.5" + update-browserslist-db "^1.0.4" + bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -2163,11 +3371,26 @@ bs58check@^2.1.2: create-hash "^1.1.0" safe-buffer "^5.1.2" -buffer-from@^1.0.0: +btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + +buffer-from@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" + integrity sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ== + +buffer-from@1.1.2, buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== + buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -2180,7 +3403,7 @@ buffer-xor@^2.0.1: dependencies: safe-buffer "^5.1.1" -buffer@^5.5.0, buffer@^5.6.0: +buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -2188,6 +3411,21 @@ buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bufferutil@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== + dependencies: + node-gyp-build "^4.3.0" + bufferutil@^4.0.1: version "4.0.6" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" @@ -2265,6 +3503,19 @@ cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: tar "^6.1.11" unique-filename "^1.1.1" +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -2278,6 +3529,14 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camel-case@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w== + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" @@ -2297,6 +3556,29 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +caniuse-lite@^1.0.30001359: + version "1.0.30001363" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001363.tgz#26bec2d606924ba318235944e1193304ea7c4f15" + integrity sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +catering@^2.0.0, catering@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +cbor@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" + integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== + dependencies: + bignumber.js "^9.0.1" + nofilter "^1.0.4" + chai-as-promised@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" @@ -2334,7 +3616,7 @@ chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2342,6 +3624,30 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +change-case@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.2.tgz#fd48746cce02f03f0a672577d1d3a8dc2eceb037" + integrity sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA== + dependencies: + camel-case "^3.0.0" + constant-case "^2.0.0" + dot-case "^2.1.0" + header-case "^1.0.0" + is-lower-case "^1.1.0" + is-upper-case "^1.1.0" + lower-case "^1.1.1" + lower-case-first "^1.0.0" + no-case "^2.3.2" + param-case "^2.1.0" + pascal-case "^2.0.0" + path-case "^2.1.0" + sentence-case "^2.1.0" + snake-case "^2.1.0" + swap-case "^1.1.0" + title-case "^2.1.0" + upper-case "^1.1.1" + upper-case-first "^1.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -2352,6 +3658,13 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== +checkpoint-store@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/checkpoint-store/-/checkpoint-store-1.1.0.tgz#04e4cb516b91433893581e6d4601a78e9552ea06" + integrity sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg== + dependencies: + functional-red-black-tree "^1.0.1" + chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.1: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -2367,6 +3680,11 @@ chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.1: optionalDependencies: fsevents "~2.3.2" +chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -2377,6 +3695,17 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -2385,6 +3714,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -2432,6 +3766,11 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +clone-buffer@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -2441,11 +3780,23 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== + dependencies: + mimic-response "^1.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== +clone@^2.0.0, clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + cmd-shim@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd" @@ -2460,6 +3811,11 @@ cmd-shim@^5.0.0: dependencies: mkdirp-infer-owner "^2.0.0" +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -2494,6 +3850,11 @@ colorette@^2.0.16: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== +colors@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + columnify@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" @@ -2502,16 +3863,48 @@ columnify@^1.6.0: strip-ansi "^6.0.1" wcwidth "^1.0.0" +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + command-exists@^1.2.8: version "1.2.9" resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" + commander@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== +commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@^9.3.0: version "9.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-9.3.0.tgz#f619114a5a2d2054e0d9ff1b31d5ccf89255e26b" @@ -2545,6 +3938,22 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" +conf@^10.0.2: + version "10.1.2" + resolved "https://registry.yarnpkg.com/conf/-/conf-10.1.2.tgz#50132158f388756fa9dea3048f6b47935315c14e" + integrity sha512-o9Fv1Mv+6A0JpoayQ8JleNp3hhkbOJP/Re/Q+QqxMPHPkABVsRjQGWZn9A5GcqLiTNC6d89p2PB5ZhHVDSMwyg== + dependencies: + ajv "^8.6.3" + ajv-formats "^2.1.1" + atomically "^1.7.0" + debounce-fn "^4.0.0" + dot-prop "^6.0.1" + env-paths "^2.2.1" + json-schema-typed "^7.0.3" + onetime "^5.1.2" + pkg-up "^3.1.0" + semver "^7.3.5" + config-chain@^1.1.12: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" @@ -2553,11 +3962,40 @@ config-chain@^1.1.12: ini "^1.3.4" proto-list "~1.2.1" -console-control-strings@^1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== +constant-case@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" + integrity sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ== + dependencies: + snake-case "^2.1.0" + upper-case "^1.1.1" + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + conventional-changelog-angular@^5.0.12: version "5.0.13" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" @@ -2640,6 +4078,16 @@ conventional-recommended-bump@^6.1.0: meow "^8.0.0" q "^1.5.1" +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + cookie@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" @@ -2650,16 +4098,37 @@ cookiejar@^2.1.1: resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== +core-js-compat@^3.21.0: + version "3.23.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.3.tgz#7d8503185be76bb6d8d592c291a4457a8e440aa9" + integrity sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw== + dependencies: + browserslist "^4.21.0" + semver "7.0.0" + core-js-pure@^3.0.1: version "3.23.3" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.23.3.tgz#bcd02d3d8ec68ad871ef50d5ccbb248ddb54f401" integrity sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA== +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cors@^2.8.1, cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + cosmiconfig@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" @@ -2676,6 +4145,14 @@ crc-32@^1.2.0: resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -2687,7 +4164,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.4, create-hmac@^1.1.7: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -2704,6 +4181,14 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +cross-fetch@^2.1.0, cross-fetch@^2.1.1: + version "2.2.6" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.6.tgz#2ef0bb39a24ac034787965c457368a28730e220a" + integrity sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA== + dependencies: + node-fetch "^2.6.7" + whatwg-fetch "^2.0.4" + cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -2713,6 +4198,28 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crypto-browserify@3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +cssfilter@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" + integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== + d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -2726,12 +4233,45 @@ dargs@^7.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +dataloader@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.1.0.tgz#c69c538235e85e7ac6c6c444bae8ecabf5de9df7" + integrity sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ== + dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debounce-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" + integrity sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ== + dependencies: + mimic-fn "^3.0.0" + +debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2745,12 +4285,12 @@ debug@4.3.3: dependencies: ms "2.1.2" -debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +debug@^3.1.0, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: - ms "2.0.0" + ms "^2.1.1" debuglog@^1.0.1: version "1.0.1" @@ -2780,6 +4320,13 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== +decompress-response@^3.2.0, decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -2792,6 +4339,11 @@ deep-eql@^3.0.1: dependencies: type-detect "^4.0.0" +deep-extend@^0.6.0, deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -2804,6 +4356,18 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +deferred-leveldown@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" + integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA== + dependencies: + abstract-leveldown "~2.6.0" + deferred-leveldown@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" @@ -2825,6 +4389,16 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -2845,6 +4419,19 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" @@ -2855,6 +4442,11 @@ detect-indent@^6.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + dezalgo@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" @@ -2873,6 +4465,15 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -2887,6 +4488,18 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +dot-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee" + integrity sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug== + dependencies: + no-case "^2.2.0" + dot-prop@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -2901,11 +4514,26 @@ dot-prop@^6.0.1: dependencies: is-obj "^2.0.0" +dotenv@^8.0.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== + dotenv@~10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +double-ended-queue@2.1.0-0: + version "2.1.0-0" + resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" + integrity sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ== + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA== + duplexer@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -2916,7 +4544,25 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.172: + version "1.4.177" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.177.tgz#b6a4436eb788ca732556cd69f384b8a3c82118c5" + integrity sha512-FYPir3NSBEGexSZUEeht81oVhHfLFl6mhUKSkjHN/iB/TwEIt/WHQrqVGfTLN5gQxwJCQkIJBe05eOXjI7omgg== + +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -2929,6 +4575,16 @@ elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +emittery@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" + integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== + +emittery@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.4.1.tgz#abe9d3297389ba424ac87e53d1c701962ce7433d" + integrity sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -2939,6 +4595,11 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + encoding-down@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" @@ -2949,20 +4610,27 @@ encoding-down@^6.3.0: level-codec "^9.0.0" level-errors "^2.0.0" -encoding@^0.1.12, encoding@^0.1.13: +encoding@^0.1.11, encoding@^0.1.12, encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.4.1: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" +end-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/end-stream/-/end-stream-0.1.0.tgz#32003f3f438a2b0143168137f8fa6e9866c81ed5" + integrity sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA== + dependencies: + write-stream "~0.4.3" + enquirer@^2.3.0, enquirer@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -2970,7 +4638,7 @@ enquirer@^2.3.0, enquirer@~2.3.6: dependencies: ansi-colors "^4.1.1" -env-paths@^2.2.0: +env-paths@^2.2.0, env-paths@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== @@ -3068,6 +4736,11 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -3124,9 +4797,9 @@ eslint-visitor-keys@^3.3.0: integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.12.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.18.0.tgz#78d565d16c993d0b73968c523c0446b13da784fd" - integrity sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA== + version "8.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.19.0.tgz#7342a3cbc4fbc5c106a1eefe0fd0b50b6b1a7d28" + integrity sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw== dependencies: "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.9.2" @@ -3202,6 +4875,91 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eth-block-tracker@^4.4.2: + version "4.4.3" + resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz#766a0a0eb4a52c867a28328e9ae21353812cf626" + integrity sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw== + dependencies: + "@babel/plugin-transform-runtime" "^7.5.5" + "@babel/runtime" "^7.5.5" + eth-query "^2.1.0" + json-rpc-random-id "^1.0.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + +eth-ens-namehash@2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-json-rpc-errors@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz#148377ef55155585981c21ff574a8937f9d6991f" + integrity sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-json-rpc-errors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.2.tgz#c1965de0301fe941c058e928bebaba2e1285e3c4" + integrity sha512-uBCRM2w2ewusRHGxN8JhcuOb2RN3ueAOYH/0BhqdFmQkZx5lj5+fLKTz0mIVOzd4FG5/kUksCzCD7eTEim6gaA== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +eth-query@^2.1.0, eth-query@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" + integrity sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA== + dependencies: + json-rpc-random-id "^1.0.0" + xtend "^4.0.1" + +eth-rpc-errors@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz#d7b22653c70dbf9defd4ef490fd08fe70608ca10" + integrity sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-sig-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.1.tgz#8753297c83a3f58346bd13547b59c4b2cd110c96" + integrity sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^5.1.1" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.0" + ethereum-bloom-filters@^1.0.6: version "1.0.10" resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" @@ -3209,6 +4967,16 @@ ethereum-bloom-filters@^1.0.6: dependencies: js-sha3 "^0.8.0" +ethereum-common@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca" + integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA== + +ethereum-common@^0.0.18: + version "0.0.18" + resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" + integrity sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ== + ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" @@ -3230,6 +4998,11 @@ ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: secp256k1 "^4.0.1" setimmediate "^1.0.5" +ethereum-protocol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz#b7d68142f4105e0ae7b5e178cf42f8d4dc4b93cf" + integrity sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg== + ethereumjs-abi@^0.6.8: version "0.6.8" resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" @@ -3238,7 +5011,72 @@ ethereumjs-abi@^0.6.8: bn.js "^4.11.8" ethereumjs-util "^6.0.0" -ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: +ethereumjs-account@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz#eeafc62de544cb07b0ee44b10f572c9c49e00a84" + integrity sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA== + dependencies: + ethereumjs-util "^5.0.0" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-block@^1.2.2, ethereumjs-block@^1.6.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz#78b88e6cc56de29a6b4884ee75379b6860333c3f" + integrity sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg== + dependencies: + async "^2.0.1" + ethereum-common "0.2.0" + ethereumjs-tx "^1.2.2" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-block@~2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965" + integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== + dependencies: + async "^2.0.1" + ethereumjs-common "^1.5.0" + ethereumjs-tx "^2.1.1" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-common@^1.1.0, ethereumjs-common@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" + integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== + +ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" + integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== + dependencies: + ethereum-common "^0.0.18" + ethereumjs-util "^5.0.0" + +ethereumjs-tx@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" + integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== + dependencies: + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^5.0.0, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.5: + version "5.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz#a833f0e5fca7e5b361384dc76301a721f537bf65" + integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== + dependencies: + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "^0.1.3" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== @@ -3251,7 +5089,7 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: +ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== @@ -3262,6 +5100,52 @@ ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.4, ethereum ethereum-cryptography "^0.1.3" rlp "^2.2.4" +ethereumjs-vm@^2.3.4, ethereumjs-vm@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz#76243ed8de031b408793ac33907fb3407fe400c6" + integrity sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw== + dependencies: + async "^2.1.2" + async-eventemitter "^0.2.2" + ethereumjs-account "^2.0.3" + ethereumjs-block "~2.2.0" + ethereumjs-common "^1.1.0" + ethereumjs-util "^6.0.0" + fake-merkle-patricia-tree "^1.0.1" + functional-red-black-tree "^1.0.1" + merkle-patricia-tree "^2.3.2" + rustbn.js "~0.2.0" + safe-buffer "^5.1.1" + +ethereumjs-wallet@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz#2c000504b4c71e8f3782dabe1113d192522e99b6" + integrity sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA== + dependencies: + aes-js "^3.1.2" + bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" + ethereumjs-util "^7.1.2" + randombytes "^2.1.0" + scrypt-js "^3.0.1" + utf8 "^3.0.0" + uuid "^8.3.2" + +ethers@^4.0.32: + version "4.0.49" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" + integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== + dependencies: + aes-js "3.0.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.4" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -3270,7 +5154,7 @@ ethjs-unit@0.1.6: bn.js "4.11.6" number-to-bn "1.7.0" -ethjs-util@0.1.6, ethjs-util@^0.1.6: +ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== @@ -3293,7 +5177,12 @@ eventemitter3@^4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -evp_bytestokey@^1.0.3: +events@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== @@ -3316,6 +5205,43 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +express@^4.14.0, express@^4.17.1: + version "4.18.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.0" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.10.3" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + ext@^1.1.2: version "1.6.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" @@ -3323,6 +5249,11 @@ ext@^1.1.2: dependencies: type "^2.5.0" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -3332,6 +5263,35 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fake-merkle-patricia-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3" + integrity sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA== + dependencies: + checkpoint-store "^1.1.0" + +faker@5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/faker/-/faker-5.5.3.tgz#c57974ee484431b25205c2c8dc09fda861e51e0e" + integrity sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g== + +fast-check@^2.12.1: + version "2.25.0" + resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-2.25.0.tgz#5146601851bf3be0953bd17eb2b7d547936c6561" + integrity sha512-wRUT2KD2lAmT75WNIJIHECawoUUMHM0I5jrlLXGtGeqmPL8jl/EldUDjY1VCp6fDY8yflyfUeIOsOBrIbIiArg== + dependencies: + pure-rand "^5.0.1" + 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" @@ -3364,7 +5324,7 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.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== @@ -3374,6 +5334,11 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-safe-stringify@^2.0.6: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -3381,6 +5346,20 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fetch-cookie@0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-0.11.0.tgz#e046d2abadd0ded5804ce7e2cae06d4331c15407" + integrity sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA== + dependencies: + tough-cookie "^2.3.3 || ^3.0.1 || ^4.0.0" + +fetch-ponyfill@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" + integrity sha512-knK9sGskIg2T7OnYLdZ2hZXn0CtDrAIBxYQLpmEf0BqfdWnwmM1weccUl5+4EdA44tzNSFAuxITPbXtPehUB3g== + dependencies: + node-fetch "~1.7.1" + figures@3.2.0, figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -3407,6 +5386,26 @@ filter-obj@^1.1.0: resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + find-up@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -3422,6 +5421,13 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.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" @@ -3448,7 +5454,7 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== -follow-redirects@^1.12.1: +follow-redirects@^1.12.1, follow-redirects@^1.14.4: version "1.15.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== @@ -3460,6 +5466,39 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +foreach@^2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.6.tgz#87bcc8a1a0e74000ff2bf9802110708cfb02eb6e" + integrity sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg== + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + fp-ts@1.19.3: version "1.19.3" resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" @@ -3470,6 +5509,11 @@ fp-ts@^1.0.0: resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -3495,7 +5539,16 @@ fs-extra@^10.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^7.0.1: +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -3514,6 +5567,13 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -3556,6 +5616,20 @@ functions-have-names@^1.2.2: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +ganache@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.2.0.tgz#2da7b0c609c5b0aff36d4e5216568a34fa1724f4" + integrity sha512-KsKysVeVN6CALALOkIPSIxNZbl5s2/DE6Z0lFpj05gH1XsvYMit3djP4LxpxdjUfSSyb9gIPEOzqMw7v56ihJg== + dependencies: + "@trufflesuite/bigint-buffer" "1.1.9" + emittery "0.10.0" + keccak "3.0.1" + leveldown "6.1.0" + secp256k1 "4.0.2" + optionalDependencies: + bufferutil "4.0.5" + utf-8-validate "5.0.7" + gauge@^4.0.3: version "4.0.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" @@ -3570,6 +5644,20 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -3604,6 +5692,25 @@ get-port@^5.1.1: resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -3617,6 +5724,13 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + git-raw-commits@^2.0.8: version "2.0.11" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" @@ -3704,7 +5818,7 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -3727,6 +5841,19 @@ glob@^8.0.1: minimatch "^5.0.1" once "^1.3.0" +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^13.15.0: version "13.15.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" @@ -3746,11 +5873,60 @@ globby@^11.0.2, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +got@9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +got@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graphql-tag@^2.11.0: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql@^15.3.0: + version "15.8.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" + integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== + growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" @@ -3768,12 +5944,25 @@ handlebars@^4.7.7: optionalDependencies: uglify-js "^3.1.4" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + 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@^2.9.2: +hardhat@^2.9.2, hardhat@^2.9.9: version "2.9.9" resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.9.9.tgz#05c1015eb73e0230309534b00deeb080724aace0" integrity sha512-Qv7SXnRc0zq1kGXruNnSKpP3eFccXMR5Qv6GVX9hBIJ5efN0PflKPq92aQ5Cv3jrjJeRevLznWZVz7bttXhVfw== @@ -3849,11 +6038,23 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + has-tostringtag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" @@ -3861,7 +6062,7 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-unicode@^2.0.1: +has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== @@ -3882,6 +6083,14 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" +hash.js@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -3895,6 +6104,14 @@ he@1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +header-case@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d" + integrity sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ== + dependencies: + no-case "^2.2.0" + upper-case "^1.1.3" + hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -3923,7 +6140,7 @@ hosted-git-info@^5.0.0: dependencies: lru-cache "^7.5.1" -http-cache-semantics@^4.1.0: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== @@ -3962,6 +6179,15 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -3987,7 +6213,7 @@ husky@^7.0.4: resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4001,12 +6227,19 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@^1.1.13: +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore-walk@^3.0.3: +ignore-walk@^3.0.1, ignore-walk@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== @@ -4025,7 +6258,12 @@ ignore@^5.0.4, ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== -immediate@^3.2.3: +immediate@3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + +immediate@3.3.0, immediate@^3.2.2, immediate@^3.2.3: version "3.3.0" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== @@ -4084,7 +6322,12 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.2, ini@^1.3.4: +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -4130,6 +6373,11 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + io-ts@1.10.4: version "1.10.4" resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" @@ -4142,6 +6390,11 @@ ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-arguments@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" @@ -4177,6 +6430,11 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-buffer@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" @@ -4213,6 +6471,18 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c" + integrity sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -4223,6 +6493,11 @@ is-fullwidth-code-point@^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-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" @@ -4247,6 +6522,13 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== +is-lower-case@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" + integrity sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA== + dependencies: + lower-case "^1.1.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" @@ -4269,6 +6551,11 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== +is-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + is-plain-obj@^1.0.0, 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" @@ -4299,6 +6586,11 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + 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" @@ -4313,6 +6605,11 @@ is-ssh@^1.3.0: dependencies: protocols "^2.0.1" +is-stream@^1.0.0, is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -4350,7 +6647,7 @@ is-typed-array@^1.1.3, is-typed-array@^1.1.9: for-each "^0.3.3" has-tostringtag "^1.0.0" -is-typedarray@^1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== @@ -4360,6 +6657,13 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-upper-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" + integrity sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw== + dependencies: + upper-case "^1.1.0" + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -4374,6 +6678,11 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -4389,12 +6698,35 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +js-sha3@0.5.7, js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== + js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -js-tokens@^4.0.0: +"js-tokens@^3.0.0 || ^4.0.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== @@ -4406,6 +6738,21 @@ js-yaml@4.1.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -4416,22 +6763,64 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^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-pointer@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/json-pointer/-/json-pointer-0.6.2.tgz#f97bd7550be5e9ea901f8c9264c9d436a22a93cd" + integrity sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw== + dependencies: + foreach "^2.0.4" + +json-rpc-engine@^5.1.3: + version "5.4.0" + resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz#75758609d849e1dba1e09021ae473f3ab63161e5" + integrity sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g== + dependencies: + eth-rpc-errors "^3.0.0" + safe-event-emitter "^1.0.1" + +json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" + integrity sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA== + 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-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema-typed@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" + integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + 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== +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg== + dependencies: + jsonify "~0.0.0" + json-stringify-nice@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== -json-stringify-safe@^5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== @@ -4471,11 +6860,26 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA== + jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + just-diff-apply@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.3.1.tgz#30f40809ffed55ad76dccf73fa9b85a76964c867" @@ -4486,6 +6890,14 @@ just-diff@^5.0.1: resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.0.3.tgz#4c9c514dec5526b25ab977590e3c39a0cf271554" integrity sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg== +keccak@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" + integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + keccak@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" @@ -4495,6 +6907,13 @@ keccak@^3.0.0: node-gyp-build "^4.2.0" readable-stream "^3.6.0" +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -4531,18 +6950,37 @@ lerna@^5.1.6: import-local "^3.0.2" npmlog "^6.0.2" -level-codec@^9.0.0: +level-codec@9.0.2, level-codec@^9.0.0: version "9.0.2" resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== dependencies: buffer "^5.6.0" +level-codec@~7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" + integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== + +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + level-concat-iterator@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== +level-errors@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" + integrity sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w== + dependencies: + errno "~0.1.1" + level-errors@^2.0.0, level-errors@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" @@ -4550,6 +6988,23 @@ level-errors@^2.0.0, level-errors@~2.0.0: dependencies: errno "~0.1.1" +level-errors@~1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859" + integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig== + dependencies: + errno "~0.1.1" + +level-iterator-stream@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" + integrity sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw== + dependencies: + inherits "^2.0.1" + level-errors "^1.0.3" + readable-stream "^1.0.33" + xtend "^4.0.0" + level-iterator-stream@~4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" @@ -4559,6 +7014,16 @@ level-iterator-stream@~4.0.0: readable-stream "^3.4.0" xtend "^4.0.2" +level-js@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.2.tgz#5e280b8f93abd9ef3a305b13faf0b5397c969b55" + integrity sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg== + dependencies: + abstract-leveldown "~6.2.3" + buffer "^5.5.0" + inherits "^2.0.3" + ltgt "^2.1.2" + level-mem@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" @@ -4567,7 +7032,7 @@ level-mem@^5.0.1: level-packager "^5.0.3" memdown "^5.0.0" -level-packager@^5.0.3: +level-packager@^5.0.3, level-packager@^5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== @@ -4575,6 +7040,11 @@ level-packager@^5.0.3: encoding-down "^6.3.0" levelup "^4.3.2" +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + level-supports@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" @@ -4582,6 +7052,21 @@ level-supports@~1.0.0: dependencies: xtend "^4.0.2" +level-write-stream@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/level-write-stream/-/level-write-stream-1.0.0.tgz#3f7fbb679a55137c0feb303dee766e12ee13c1dc" + integrity sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw== + dependencies: + end-stream "~0.1.0" + +level-ws@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" + integrity sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw== + dependencies: + readable-stream "~1.0.15" + xtend "~2.1.1" + level-ws@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" @@ -4591,7 +7076,34 @@ level-ws@^2.0.0: readable-stream "^3.1.0" xtend "^4.0.1" -levelup@^4.3.2: +level@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/level/-/level-6.0.1.tgz#dc34c5edb81846a6de5079eac15706334b0d7cd6" + integrity sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw== + dependencies: + level-js "^5.0.0" + level-packager "^5.1.0" + leveldown "^5.4.0" + +leveldown@5.6.0, leveldown@^5.4.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98" + integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ== + dependencies: + abstract-leveldown "~6.2.1" + napi-macros "~2.0.0" + node-gyp-build "~4.1.0" + +leveldown@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" + integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +levelup@4.4.0, levelup@^4.3.2: version "4.4.0" resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== @@ -4602,6 +7114,19 @@ levelup@^4.3.2: level-supports "~1.0.0" xtend "~4.0.0" +levelup@^1.2.1: + version "1.3.9" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab" + integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ== + dependencies: + deferred-leveldown "~1.2.1" + level-codec "~7.0.0" + level-errors "~1.0.3" + level-iterator-stream "~1.3.0" + prr "~1.0.1" + semver "~5.4.1" + xtend "~4.0.0" + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -4703,6 +7228,14 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.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" @@ -4717,6 +7250,26 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash-es@^4.2.1: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.flatmap@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz#ef8cbf408f6e48268663345305c6acc0b778702e" + integrity sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg== + lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" @@ -4727,7 +7280,12 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.7.0: +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.2.1, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4750,6 +7308,23 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" +loglevel@^1.6.8: + version "1.8.0" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114" + integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== + +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +loose-envify@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + loupe@^2.3.1: version "2.3.4" resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" @@ -4757,6 +7332,28 @@ loupe@^2.3.1: dependencies: get-func-name "^2.0.0" +lower-case-first@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" + integrity sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA== + dependencies: + lower-case "^1.1.2" + +lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -4771,7 +7368,7 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: +lru-cache@^7.10.1, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: version "7.12.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.12.0.tgz#be2649a992c8a9116efda5c487538dcf715f3476" integrity sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw== @@ -4781,7 +7378,7 @@ lru_map@^0.3.3: resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== -ltgt@~2.2.0: +ltgt@2.2.1, ltgt@^2.1.2, ltgt@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== @@ -4895,6 +7492,23 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memdown@1.4.1, memdown@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" + integrity sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w== + dependencies: + abstract-leveldown "~2.7.1" + functional-red-black-tree "^1.0.1" + immediate "^3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.1.1" + memdown@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" @@ -4929,6 +7543,11 @@ meow@^8.0.0: type-fest "^0.18.0" yargs-parser "^20.2.3" +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -4939,6 +7558,20 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" + integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== + dependencies: + async "^1.4.2" + ethereumjs-util "^5.0.0" + level-ws "0.0.0" + levelup "^1.2.1" + memdown "^1.0.0" + readable-stream "^2.0.0" + rlp "^2.0.0" + semaphore ">=1.0.1" + merkle-patricia-tree@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" @@ -4951,6 +7584,11 @@ merkle-patricia-tree@^4.2.4: readable-stream "^3.6.0" semaphore-async-await "^1.5.1" +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -4967,11 +7605,45 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" + integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -5087,6 +7759,14 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" +minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: version "3.3.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" @@ -5094,6 +7774,13 @@ minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3. dependencies: yallist "^4.0.0" +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -5111,18 +7798,25 @@ mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== dependencies: - minimist "^1.2.6" + mkdirp "*" -mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mkdirp@^0.5.1, mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + mnemonist@^0.38.0: version "0.38.5" resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" @@ -5130,7 +7824,7 @@ mnemonist@^0.38.0: dependencies: obliterator "^2.0.0" -mocha@^9.2.0, mocha@^9.2.2: +mocha@9.2.2, mocha@^9.2.0, mocha@^9.2.2: version "9.2.2" resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== @@ -5160,6 +7854,11 @@ mocha@^9.2.0, mocha@^9.2.2: yargs-parser "20.2.4" yargs-unparser "2.0.0" +mock-fs@^4.1.0: + version "4.14.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== + modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -5175,11 +7874,51 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.0.0: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + multimatch@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" @@ -5196,17 +7935,41 @@ mute-stream@0.0.8, mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +nan@^2.12.1: + version "2.16.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" + integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== + nanoid@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + 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== -negotiator@^0.6.2, negotiator@^0.6.3: +needle@^2.2.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" + integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.3, negotiator@^0.6.2, negotiator@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -5221,6 +7984,13 @@ next-tick@^1.1.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== +no-case@^2.2.0, no-case@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" @@ -5231,17 +8001,35 @@ node-addon-api@^3.2.1: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== -node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7: +node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" +node-fetch@~1.7.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-gyp-build@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" + integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== + node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" - integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + version "4.5.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" + integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + +node-gyp-build@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" + integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ== node-gyp@^8.4.1: version "8.4.1" @@ -5275,6 +8063,52 @@ node-gyp@^9.0.0: tar "^6.1.2" which "^2.0.2" +node-interval-tree@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/node-interval-tree/-/node-interval-tree-1.3.3.tgz#15ffb904cde08270214acace8dc7653e89ae32b7" + integrity sha512-K9vk96HdTK5fEipJwxSvIIqwTqr4e3HRJeJrNxBSeVMNSC/JWARRaX7etOLOuTmrRMeOI/K5TCJu3aWIwZiNTw== + dependencies: + shallowequal "^1.0.2" + +node-pre-gyp@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" + integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +node-releases@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" + integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== + +nofilter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" + integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== + +noop-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/noop-fn/-/noop-fn-1.0.0.tgz#5f33d47f13d2150df93e0cb036699e982f78ffbf" + integrity sha512-pQ8vODlgXt2e7A3mIbFDlizkr46r75V+BJxVAyat8Jl7YmI513gG5cfyRL0FedKraoZ+VAouI1h4/IWpus5pcQ== + +nopt@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" @@ -5317,12 +8151,17 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + normalize-url@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-bundled@^1.1.1, npm-bundled@^1.1.2: +npm-bundled@^1.0.1, npm-bundled@^1.1.1, npm-bundled@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== @@ -5360,6 +8199,15 @@ npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: semver "^7.3.5" validate-npm-package-name "^4.0.0" +npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + npm-packlist@^2.1.4: version "2.2.2" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.2.2.tgz#076b97293fa620f632833186a7a8f65aaa6148c8" @@ -5436,6 +8284,16 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + npmlog@^6.0.0, npmlog@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" @@ -5446,6 +8304,11 @@ npmlog@^6.0.0, npmlog@^6.0.2: gauge "^4.0.3" set-blocking "^2.0.0" +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + number-to-bn@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" @@ -5454,13 +8317,13 @@ number-to-bn@1.7.0: bn.js "4.11.6" strip-hex-prefix "1.0.0" -nx@14.3.6, nx@^14.3.6: - version "14.3.6" - resolved "https://registry.yarnpkg.com/nx/-/nx-14.3.6.tgz#0b30dbe96df2cd62cb68c9d3609e2dc3219b0a20" - integrity sha512-jBgqXEkRalo8PwXJzO4HVNN3P5pqyL5VawyNd34qPl+4t2XlDRqoK0J74i8liPGdKPBB1HjM2K1u+QNF2ROvQA== +nx@14.4.0, nx@^14.3.6: + version "14.4.0" + resolved "https://registry.yarnpkg.com/nx/-/nx-14.4.0.tgz#80bc3d810065836bd873f953c288edda057fc379" + integrity sha512-YemgZ3NHmO5Ik0lruoSCoT5ORaUrcI7gpqtmI1SL8hSPJs4kg2hYevoIb6sE0CTsxuqDHFnRR8qhdPLcSgHGxQ== dependencies: - "@nrwl/cli" "14.3.6" - "@nrwl/tao" "14.3.6" + "@nrwl/cli" "14.4.0" + "@nrwl/tao" "14.4.0" "@parcel/watcher" "2.0.4" chalk "4.1.0" chokidar "^3.5.1" @@ -5490,6 +8353,16 @@ nx@14.3.6, nx@^14.3.6: yargs "^17.4.0" yargs-parser "21.0.1" +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + object-inspect@^1.12.0, object-inspect@^1.12.2, object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" @@ -5500,6 +8373,11 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== + object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" @@ -5522,7 +8400,14 @@ oboe@2.1.5: dependencies: http-https "^1.0.0" -once@^1.3.0, once@^1.4.0: +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -5545,6 +8430,11 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" +openzeppelin-solidity@^2.0.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/openzeppelin-solidity/-/openzeppelin-solidity-2.5.1.tgz#1cdcce30c4c6a7b6625dab62ccd0440a813ab597" + integrity sha512-oCGtQPLOou4su76IMr4XXJavy9a8OZmAXeUZ8diOdFznlL/mlkIlYr7wajqCzH4S47nlKPS7m0+a2nilCTpVPQ== + optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -5557,11 +8447,39 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -os-tmpdir@~1.0.2: +original-require@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/original-require/-/original-require-1.0.1.tgz#0f130471584cd33511c5ec38c8d59213f9ac5e20" + integrity sha512-5vdKMbE58WaE61uVD+PKyh8xdM398UnjPBLotW2sjG5MzHARwta/+NtMBCBA0t2WQblGYBvq5vsiZpWokwno+A== + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -5574,7 +8492,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.2.0: +p-limit@^2.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== @@ -5595,6 +8513,13 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -5639,6 +8564,13 @@ p-reduce@^2.0.0, p-reduce@^2.1.0: resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA== + dependencies: + p-finally "^1.0.0" + p-timeout@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" @@ -5690,6 +8622,13 @@ pacote@^13.0.3, pacote@^13.0.5, pacote@^13.4.1: ssri "^9.0.0" tar "^6.1.11" +param-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w== + dependencies: + no-case "^2.2.0" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -5697,6 +8636,17 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + parse-conflict-json@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" @@ -5706,6 +8656,11 @@ parse-conflict-json@^2.0.1: just-diff "^5.0.1" just-diff-apply "^5.2.0" +parse-headers@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -5744,6 +8699,26 @@ parse-url@^6.0.0: parse-path "^4.0.4" protocols "^1.4.0" +parseurl@^1.3.3, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^2.0.0, pascal-case@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e" + integrity sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ== + dependencies: + camel-case "^3.0.0" + upper-case-first "^1.1.0" + +path-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5" + integrity sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q== + dependencies: + no-case "^2.2.0" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -5769,6 +8744,11 @@ path-parse@^1.0.6, path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -5786,7 +8766,7 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -pbkdf2@^3.0.17: +pbkdf2@^3.0.17, pbkdf2@^3.0.3: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -5797,6 +8777,16 @@ pbkdf2@^3.0.17: safe-buffer "^5.0.1" sha.js "^2.4.8" +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +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.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -5834,11 +8824,311 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +pouchdb-abstract-mapreduce@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.0.tgz#cc178cb5d07f73b7c3f0f47a7f963defd4872b1c" + integrity sha512-+2fVt3SDh7D776lIGbYZOsKX5js1aUyUw7iJaTGitxSdQ2ObWSTrr3SUrj5Qo1CkgPXwRM3Tdoq/53JYAa2qCA== + dependencies: + pouchdb-binary-utils "7.3.0" + pouchdb-collate "7.3.0" + pouchdb-collections "7.3.0" + pouchdb-errors "7.3.0" + pouchdb-fetch "7.3.0" + pouchdb-mapreduce-utils "7.3.0" + pouchdb-md5 "7.3.0" + pouchdb-utils "7.3.0" + +pouchdb-adapter-leveldb-core@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-adapter-leveldb-core/-/pouchdb-adapter-leveldb-core-7.3.0.tgz#91fa1fbc35e744252ae73f9e88911883c1841c9a" + integrity sha512-OyUsEae1JlqR2jSGMohP03gj6VANh9fDR/3nPIa1vYyoQWlwQzOS7knKqDaJm7Nui3JC5q/lWos7/FGZBFuF5Q== + dependencies: + argsarray "0.0.1" + buffer-from "1.1.2" + double-ended-queue "2.1.0-0" + levelup "4.4.0" + pouchdb-adapter-utils "7.3.0" + pouchdb-binary-utils "7.3.0" + pouchdb-collections "7.3.0" + pouchdb-errors "7.3.0" + pouchdb-json "7.3.0" + pouchdb-md5 "7.3.0" + pouchdb-merge "7.3.0" + pouchdb-utils "7.3.0" + sublevel-pouchdb "7.3.0" + through2 "3.0.2" + +pouchdb-adapter-memory@^7.1.1: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-adapter-memory/-/pouchdb-adapter-memory-7.3.0.tgz#ddd5b9ab9d30209d066374648abc761c68444db3" + integrity sha512-nUdYi5KpbUa0uv0L3IJorpiUnIOBPxX9qplCX9i7JE8OtLPeLyKuX3WC+3M1//8Lmmxg3b1wXSNIod6FJy4wAQ== + dependencies: + memdown "1.4.1" + pouchdb-adapter-leveldb-core "7.3.0" + pouchdb-utils "7.3.0" + +pouchdb-adapter-node-websql@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pouchdb-adapter-node-websql/-/pouchdb-adapter-node-websql-7.0.0.tgz#64ad88dd45b23578e454bf3032a3a79f9d1e4008" + integrity sha512-fNaOMO8bvMrRTSfmH4RSLSpgnKahRcCA7Z0jg732PwRbGvvMdGbreZwvKPPD1fg2tm2ZwwiXWK2G3+oXyoqZYw== + dependencies: + pouchdb-adapter-websql-core "7.0.0" + pouchdb-utils "7.0.0" + websql "1.0.0" + +pouchdb-adapter-utils@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.0.0.tgz#1ac8d34481911e0e9a9bf51024610a2e7351dc80" + integrity sha512-UWKPC6jkz6mHUzZefrU7P5X8ZGvBC8LSNZ7BIp0hWvJE6c20cnpDwedTVDpZORcCbVJpDmFOHBYnOqEIblPtbA== + dependencies: + pouchdb-binary-utils "7.0.0" + pouchdb-collections "7.0.0" + pouchdb-errors "7.0.0" + pouchdb-md5 "7.0.0" + pouchdb-merge "7.0.0" + pouchdb-utils "7.0.0" + +pouchdb-adapter-utils@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.3.0.tgz#1747e4ea0b519a9d817c6eda0e2f0ebc3dc18c41" + integrity sha512-mU1+smcagWSpInVx/VQk7VVjjnJlyagKtusUS3OdCMFZY35L6RbXC8eIhoNVDbkBfEv3cIwqQ3t7fdvkaa1odQ== + dependencies: + pouchdb-binary-utils "7.3.0" + pouchdb-collections "7.3.0" + pouchdb-errors "7.3.0" + pouchdb-md5 "7.3.0" + pouchdb-merge "7.3.0" + pouchdb-utils "7.3.0" + +pouchdb-adapter-websql-core@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pouchdb-adapter-websql-core/-/pouchdb-adapter-websql-core-7.0.0.tgz#27b3e404159538e515b2567baa7869f90caac16c" + integrity sha512-NyMaH0bl20SdJdOCzd+fwXo8JZ15a48/MAwMcIbXzsRHE4DjFNlRcWAcjUP6uN4Ezc+Gx+r2tkBBMf71mIz1Aw== + dependencies: + pouchdb-adapter-utils "7.0.0" + pouchdb-binary-utils "7.0.0" + pouchdb-collections "7.0.0" + pouchdb-errors "7.0.0" + pouchdb-json "7.0.0" + pouchdb-merge "7.0.0" + pouchdb-utils "7.0.0" + +pouchdb-binary-utils@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pouchdb-binary-utils/-/pouchdb-binary-utils-7.0.0.tgz#cb71a288b09572a231f6bab1b4aed201c4d219a7" + integrity sha512-yUktdOPIPvOVouCjJN3uop+bCcpdPwePrLm9eUAZNgEYnUFu0njdx7Q0WRsZ7UJ6l75HinL5ZHk4bnvEt86FLw== + dependencies: + buffer-from "1.1.0" + +pouchdb-binary-utils@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.0.tgz#ecc235d28e7f226c168affcf53959675f78d5aaf" + integrity sha512-xvBH/XGHGcou2vkEzszJxkCc7YElfRUrkLUg51Jbdmh1mogLDUO0bU3Tj6TOIIJfRkQrU/HV+dDkMAhsil0amQ== + dependencies: + buffer-from "1.1.2" + +pouchdb-collate@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-collate/-/pouchdb-collate-7.3.0.tgz#9276de7459a21a6aded71e3090d9b5d5488be19f" + integrity sha512-ys7rXKtEr6cfghgUjknwFJiOkITebV6JmeTybJKCzMV0r2luXu0OoPQsKVpE/wbM/3F5LxfpbFKGFpPcfGMvTA== + +pouchdb-collections@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-7.0.0.tgz#fd1f632337dc6301b0ff8649732ca79204e41780" + integrity sha512-DaoUr/vU24Q3gM6ghj0va9j/oBanPwkbhkvnqSyC3Dm5dgf5pculNxueLF9PKMo3ycApoWzHMh6N2N8KJbDU2Q== + +pouchdb-collections@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-7.3.0.tgz#3197dfbee8d69c3760229705fc5a73d0c8a896f1" + integrity sha512-Xr54m2+fErShXn+qAT4xwqJ+8NwddNPeTMJT4z4k1sZsrwfHmZsWbsKAyGPMF04eQaaU+7DDRMciu2VzaBUXyg== + +pouchdb-debug@^7.1.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/pouchdb-debug/-/pouchdb-debug-7.2.1.tgz#f5f869f6113c12ccb97cddf5b0a32b6e0e67e961" + integrity sha512-eP3ht/AKavLF2RjTzBM6S9gaI2/apcW6xvaKRQhEdOfiANqerFuksFqHCal3aikVQuDO+cB/cw+a4RyJn/glBw== + dependencies: + debug "3.1.0" + +pouchdb-errors@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pouchdb-errors/-/pouchdb-errors-7.0.0.tgz#4e2a5a8b82af20cbe5f9970ca90b7ec74563caa0" + integrity sha512-dTusY8nnTw4HIztCrNl7AoGgwvS1bVf/3/97hDaGc4ytn72V9/4dK8kTqlimi3UpaurohYRnqac0SGXYP8vgXA== + dependencies: + inherits "2.0.3" + +pouchdb-errors@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-errors/-/pouchdb-errors-7.3.0.tgz#23bc328108778be0bfe22d69c0df67eab94aeca5" + integrity sha512-dTBbIC1BbCy6J9W/Csg5xROgb3wJN3HpbgAJHHSEtAkb8oA45KZmU3ZwEpNhf0AfPuQm4XgW1936PvlDlGgJiw== + dependencies: + inherits "2.0.4" + +pouchdb-fetch@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-fetch/-/pouchdb-fetch-7.3.0.tgz#92b5d3b067d79ecbb9a61cbd52dce36e94dbbf28" + integrity sha512-8/lcg8iMDG+GVs1dHNXA4ktJSEpH71dHU3xesMJ25tNQOqfAaaWrkfz9j71ZYDDkveLYE6UjUzl/sDacu2hSjw== + dependencies: + abort-controller "3.0.0" + fetch-cookie "0.11.0" + node-fetch "2.6.7" + +pouchdb-find@^7.0.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-find/-/pouchdb-find-7.3.0.tgz#27291c3d069f4f1a1a4913f63b1a148dac1b345b" + integrity sha512-EwhnfyxCAkKf8PG4tfndTTygEmtuz+o1LiZkxfPrflfXA3m1jo1ithib0hwBYtEwEYWuZxH6B8pRZutbLoQCGA== + dependencies: + pouchdb-abstract-mapreduce "7.3.0" + pouchdb-collate "7.3.0" + pouchdb-errors "7.3.0" + pouchdb-fetch "7.3.0" + pouchdb-md5 "7.3.0" + pouchdb-selector-core "7.3.0" + pouchdb-utils "7.3.0" + +pouchdb-json@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pouchdb-json/-/pouchdb-json-7.0.0.tgz#d9860f66f27a359ac6e4b24da4f89b6909f37530" + integrity sha512-w0bNRu/7VmmCrFWMYAm62n30wvJJUT2SokyzeTyj3hRohj4GFwTRg1mSZ+iAmxgRKOFE8nzZstLG/WAB4Ymjew== + dependencies: + vuvuzela "1.0.3" + +pouchdb-json@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-json/-/pouchdb-json-7.3.0.tgz#94c2d876202c6879cb525db05e7633b926346e5d" + integrity sha512-D4wyi20ltyiFpuziQeMk3CbXs/Q58VoGTYTJQY8MWBw37OidtHGQAt1Kh5yJ435wJqDzJZyxMA5RxGZxEOBDVg== + dependencies: + vuvuzela "1.0.3" + +pouchdb-mapreduce-utils@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.3.0.tgz#21d42ea9a376b0fa2e61c8c1ac53f886ffdf3409" + integrity sha512-KDVSd+H2r+XWTrQfKWV71SknDDYRjYXoeWs0ZQl3xITHCcTl+fIgqyagg/XN+Zy/U9LeLPGMe2JdgPx9H8lJgw== + dependencies: + argsarray "0.0.1" + inherits "2.0.4" + pouchdb-collections "7.3.0" + pouchdb-utils "7.3.0" + +pouchdb-md5@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pouchdb-md5/-/pouchdb-md5-7.0.0.tgz#935dc6bb507a5f3978fb653ca5790331bae67c96" + integrity sha512-yaSJKhLA3QlgloKUQeb2hLdT3KmUmPfoYdryfwHZuPTpXIRKTnMQTR9qCIRUszc0ruBpDe53DRslCgNUhAyTNQ== + dependencies: + pouchdb-binary-utils "7.0.0" + spark-md5 "3.0.0" + +pouchdb-md5@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-md5/-/pouchdb-md5-7.3.0.tgz#3a094e45ccce87271530ad3f37d7e82c53562bb0" + integrity sha512-wL04QgoKyd/L/TV5gxgcvlEyCJiZoXCOEFJklTzkdza/kBQNJGPH7i0ZhKa7Sb+AvZYoWZHddf1Zgv7rBScHkA== + dependencies: + pouchdb-binary-utils "7.3.0" + spark-md5 "3.0.2" + +pouchdb-merge@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pouchdb-merge/-/pouchdb-merge-7.0.0.tgz#9f476ce7e32aae56904ad770ae8a1dfe14b57547" + integrity sha512-tci5u6NpznQhGcPv4ho1h0miky9rs+ds/T9zQ9meQeDZbUojXNaX1Jxsb0uYEQQ+HMqdcQs3Akdl0/u0mgwPGg== + +pouchdb-merge@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-merge/-/pouchdb-merge-7.3.0.tgz#dfde5b54aa6dd203ac62d768fe33e7bdbd56e38e" + integrity sha512-E7LmchMzwYFm6V8OBxejzARLisanpksOju2LEfuiYnotGfNDeW7MByP0qBH0/zF8BfUyyjA1cl7ByaEpsapkeQ== + +pouchdb-selector-core@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-selector-core/-/pouchdb-selector-core-7.3.0.tgz#1860afeec069ba4d5b79583b4b520dd2b643e3a3" + integrity sha512-sK/cCrIGeL9ImcMhKGcwa54+bzX7Wv4hhVV+oUW3T1Nasaoxh+Muem1GuA+x1+SbTCE8y37rUg8i6DIOhX51ew== + dependencies: + pouchdb-collate "7.3.0" + pouchdb-utils "7.3.0" + +pouchdb-utils@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pouchdb-utils/-/pouchdb-utils-7.0.0.tgz#48bfced6665b8f5a2b2d2317e2aa57635ed1e88e" + integrity sha512-1bnoX1KdZYHv9wicDIFdO0PLiVIMzNDUBUZ/yOJZ+6LW6niQCB8aCv09ZztmKfSQcU5nnN3fe656tScBgP6dOQ== + dependencies: + argsarray "0.0.1" + clone-buffer "1.0.0" + immediate "3.0.6" + inherits "2.0.3" + pouchdb-collections "7.0.0" + pouchdb-errors "7.0.0" + pouchdb-md5 "7.0.0" + uuid "3.2.1" + +pouchdb-utils@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb-utils/-/pouchdb-utils-7.3.0.tgz#782df5ab3309edd5dc8c0f8ae4663bf0e67962e2" + integrity sha512-HH+5IXXWn/ZgVCSnrlydBMYn6MabT7RS7SNoo9w8qVH9efpZSp3eLchw6yMQNLw8LQefWmbbskiHV9VgJmSVWQ== + dependencies: + argsarray "0.0.1" + clone-buffer "1.0.0" + immediate "3.3.0" + inherits "2.0.4" + pouchdb-collections "7.3.0" + pouchdb-errors "7.3.0" + pouchdb-md5 "7.3.0" + uuid "8.3.2" + +pouchdb@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-7.3.0.tgz#440fbef12dfd8f9002320802528665e883a3b7f8" + integrity sha512-OwsIQGXsfx3TrU1pLruj6PGSwFH+h5k4hGNxFkZ76Um7/ZI8F5TzUHFrpldVVIhfXYi2vP31q0q7ot1FSLFYOw== + dependencies: + abort-controller "3.0.0" + argsarray "0.0.1" + buffer-from "1.1.2" + clone-buffer "1.0.0" + double-ended-queue "2.1.0-0" + fetch-cookie "0.11.0" + immediate "3.3.0" + inherits "2.0.4" + level "6.0.1" + level-codec "9.0.2" + level-write-stream "1.0.0" + leveldown "5.6.0" + levelup "4.4.0" + ltgt "2.2.1" + node-fetch "2.6.7" + readable-stream "1.1.14" + spark-md5 "3.0.2" + through2 "3.0.2" + uuid "8.3.2" + vuvuzela "1.0.3" + +precond@0.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" + integrity sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ== + 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== +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + 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" @@ -5861,6 +9151,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + promise-all-reject-late@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" @@ -5884,6 +9179,14 @@ promise-retry@^2.0.1: err-code "^2.0.2" retry "^0.12.0" +promise-to-callback@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" + integrity sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA== + dependencies: + is-fn "^1.0.0" + set-immediate-shim "^1.0.1" + promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" @@ -5906,21 +9209,71 @@ protocols@^2.0.1: resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== +psl@^1.1.28, psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +pure-rand@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-5.0.1.tgz#97a287b4b4960b2a3448c0932bf28f2405cac51d" + integrity sha512-ksWccjmXOHU2gJBnH0cK1lSYdvSZ0zLoCMSz/nTGh6hDvCSgcRxDyIcOBD6KNxFz3xhMPm/T267Tbe2JRymKEQ== + q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== +qs@6.10.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" + qs@^6.7.0, qs@^6.9.4: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" @@ -5928,6 +9281,20 @@ qs@^6.7.0, qs@^6.9.4: dependencies: side-channel "^1.0.4" +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + query-string@^6.13.8: version "6.14.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" @@ -5938,7 +9305,7 @@ query-string@^6.13.8: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" -queue-microtask@^1.2.2: +queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== @@ -5948,14 +9315,27 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -randombytes@^2.1.0: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" -raw-body@^2.4.1: +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1, raw-body@^2.4.1: version "2.5.1" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== @@ -5965,6 +9345,16 @@ raw-body@^2.4.1: iconv-lite "0.4.24" unpipe "1.0.0" +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + read-cmd-shim@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" @@ -6056,7 +9446,17 @@ read@1, read@~1.0.1: dependencies: mute-stream "~0.0.4" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@1.1.14, readable-stream@^1.0.33: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -6065,7 +9465,7 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stre string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~2.3.6: +readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.2.9, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -6078,6 +9478,21 @@ readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@~0.0.2: + version "0.0.4" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-0.0.4.tgz#f32d76e3fb863344a548d79923007173665b3b8d" + integrity sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw== + +readable-stream@~1.0.15: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readdir-scoped-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" @@ -6095,6 +9510,13 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -6103,6 +9525,40 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + +redux-saga@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.0.0.tgz#acb8b3ed9180fecbe75f342011d75af3ac11045b" + integrity sha512-GvJWs/SzMvEQgeaw6sRMXnS2FghlvEGsHiEtTLpJqc/FHF3I5EE/B+Hq5lyHZ8LSoT2r/X/46uWvkdCnK9WgHA== + dependencies: + "@redux-saga/core" "^1.0.0" + +redux@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" + integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A== + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.3" + +redux@^4.0.4: + version "4.2.0" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" + integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== + dependencies: + "@babel/runtime" "^7.9.2" + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" @@ -6117,16 +9573,56 @@ regexpp@^3.2.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +request@^2.79.0, request@^2.85.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-from-string@^2.0.0: +require-from-string@^2.0.0, require-from-string@^2.0.2: version "2.0.2" 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== +reselect-tree@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/reselect-tree/-/reselect-tree-1.3.7.tgz#c3eca58765d9df96bae0017f6ff3504c304cdea0" + integrity sha512-kZN+C1cVJ6fFN2smSb0l4UvYZlRzttgnu183svH4NrU22cBY++ikgr2QT75Uuk4MYpv5gXSVijw4c5U6cx6GKg== + dependencies: + debug "^3.1.0" + json-pointer "^0.6.1" + reselect "^4.0.0" + +reselect@^4.0.0: + version "4.1.6" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.6.tgz#19ca2d3d0b35373a74dc1c98692cdaffb6602656" + integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ== + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -6151,7 +9647,7 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.10.0, resolve@^1.8.1: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.8.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -6160,6 +9656,13 @@ resolve@^1.10.0, resolve@^1.8.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -6168,6 +9671,11 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -6183,7 +9691,7 @@ rfdc@^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: +rimraf@^2.2.8, rimraf@^2.6.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -6205,7 +9713,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.2.3, rlp@^2.2.4: +rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4: version "2.2.7" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== @@ -6243,7 +9751,7 @@ rxjs@^7.5.5: dependencies: tslib "^2.1.0" -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: +safe-buffer@5.2.1, 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.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -6253,16 +9761,42 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +safe-event-emitter@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz#5b692ef22329ed8f69fdce607e50ca734f6f20af" + integrity sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg== + dependencies: + events "^3.0.0" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scrypt-js@^3.0.0: +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scrypt-js@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" + integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== + +scrypt-js@^3.0.0, scrypt-js@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== +secp256k1@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" + integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== + dependencies: + elliptic "^6.5.2" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + secp256k1@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" @@ -6277,11 +9811,21 @@ semaphore-async-await@^1.5.1: resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" integrity sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg== -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: +semaphore@>=1.0.1, semaphore@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" + integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@7.3.4: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" @@ -6289,7 +9833,7 @@ semver@7.3.4: dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -6299,7 +9843,39 @@ semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.3.4, semver@^7.3.5, semve resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: - lru-cache "^6.0.0" + lru-cache "^6.0.0" + +semver@~5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +sentence-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4" + integrity sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ== + dependencies: + no-case "^2.2.0" + upper-case-first "^1.1.2" serialize-javascript@6.0.0: version "6.0.0" @@ -6308,11 +9884,42 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -set-blocking@^2.0.0: +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + +set-blocking@^2.0.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-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ== + +setimmediate@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" + integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -6323,7 +9930,7 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -sha.js@^2.4.0, sha.js@^2.4.8: +sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -6338,6 +9945,11 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" +shallowequal@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -6350,6 +9962,15 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shelljs@^0.8.3: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -6359,11 +9980,25 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^2.7.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" + integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -6400,6 +10035,13 @@ smart-buffer@^4.2.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== +snake-case@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" + integrity sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q== + dependencies: + no-case "^2.2.0" + socks-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" @@ -6435,6 +10077,20 @@ socks@^2.3.3, socks@^2.6.2: ip "^1.1.5" smart-buffer "^4.2.0" +solc@0.5.17: + version "0.5.17" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.5.17.tgz#8a76c50e98d49ca7610cca2fdc78ff3016540c67" + integrity sha512-qpX+PGaU0Q3c6lh2vDzMoIbhv6bIrecI4bYsx+xUs01xsGFnY6Nr0L8y/QMyutTnrHN6Lb/Yl672ZVRqxka96w== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + solc@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" @@ -6477,6 +10133,16 @@ source-map@^0.6.0, source-map@^0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +spark-md5@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.0.tgz#3722227c54e2faf24b1dc6d933cc144e6f71bfef" + integrity sha512-BpPFB0Oh83mi+6DRcFwxPx96f3OL8Tkq3hdvaHuXaQUsy5F3saI3zIPNQ/UsTQgyAXIHnML1waeCe1WoCPXbpQ== + +spark-md5@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.2.tgz#7952c4a30784347abcee73268e473b9c0167e3fc" + integrity sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw== + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -6522,6 +10188,29 @@ split@^1.0.0: dependencies: through "2" +sqlite3@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.2.0.tgz#49026d665e9fc4f922e56fb9711ba5b4c85c4901" + integrity sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg== + dependencies: + nan "^2.12.1" + node-pre-gyp "^0.11.0" + +sshpk@^1.7.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" @@ -6548,6 +10237,11 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== + strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -6558,6 +10252,20 @@ string-argv@^0.3.1: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -6601,6 +10309,11 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -6608,6 +10321,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -6656,6 +10376,11 @@ strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1. resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -6665,6 +10390,16 @@ strong-log-transformer@^2.1.0: minimist "^1.2.0" through "^2.3.4" +sublevel-pouchdb@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/sublevel-pouchdb/-/sublevel-pouchdb-7.3.0.tgz#d27138c34d98c3d5c8c3ee85c1662add3ad04525" + integrity sha512-zp7u4jmv2N/s+dXZkWTtL4BjREs3SZ1nGBNNJ8RWX4yqN59oHgKmti4CfVOqfsAW9RMasmTqQAEPxL9hX8+CIA== + dependencies: + inherits "2.0.4" + level-codec "9.0.2" + ltgt "2.2.1" + readable-stream "1.1.14" + supports-color@8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" @@ -6696,6 +10431,46 @@ supports-preserve-symlinks-flag@^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== +swap-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" + integrity sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ== + dependencies: + lower-case "^1.1.1" + upper-case "^1.1.1" + +swarm-js@^0.1.40: + version "0.1.40" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" + integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^7.1.0" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + +symbol-observable@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + tar-stream@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" @@ -6707,6 +10482,19 @@ tar-stream@~2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" +tar@^4, tar@^4.0.2: + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" @@ -6734,6 +10522,14 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +through2@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" + integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== + dependencies: + inherits "^2.0.4" + readable-stream "2 || 3" + through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -6754,6 +10550,29 @@ through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +tiny-queue@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.1.tgz#25a67f2c6e253b2ca941977b5ef7442ef97a6046" + integrity sha512-EijGsv7kzd9I9g0ByCl6h42BWNGUZrlCSejfrb3AKeHC33SGbASu1VDf5O3rRiiUOhAC9CHdZxFPbZu0HmR70A== + +tiny-typed-emitter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5" + integrity sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA== + +title-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" + integrity sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q== + dependencies: + no-case "^2.2.0" + upper-case "^1.0.3" + tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -6768,6 +10587,16 @@ tmp@~0.2.1: dependencies: rimraf "^3.0.0" +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -6780,6 +10609,23 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +"tough-cookie@^2.3.3 || ^3.0.1 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + tr46@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" @@ -6807,11 +10653,40 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== +truffle@^5.1.21: + version "5.5.20" + resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.5.20.tgz#8fe626d5056df5bd60443b23e026ea8a929bb886" + integrity sha512-Ixh6tmK5s/fC4KNuu1zlYrSTkJWesKemXimf/L8UugBuU2RTSgmo/JI00Jq1EbqCSMAtbze6G5ca2UU2vZnCkQ== + dependencies: + "@truffle/db-loader" "^0.1.22" + "@truffle/debugger" "^10.0.16" + app-module-path "^2.2.0" + ganache "7.2.0" + mocha "9.2.2" + original-require "^1.0.1" + optionalDependencies: + "@truffle/db" "^1.0.12" + +ts-command-line-args@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz#b6188e42efc6cf7a8898e438a873fbb15505ddd6" + integrity sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + ts-essentials@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-1.0.4.tgz#ce3b5dade5f5d97cf69889c11bf7d2da8555b15a" integrity sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ== +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + ts-generator@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ts-generator/-/ts-generator-0.1.1.tgz#af46f2fb88a6db1f9785977e9590e7bcd79220ab" @@ -6827,10 +10702,10 @@ ts-generator@^0.1.1: resolve "^1.8.1" ts-essentials "^1.0.0" -ts-node@^10.7.0: - version "10.8.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.1.tgz#ea2bd3459011b52699d7e88daa55a45a1af4f066" - integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g== +ts-node@^10.7.0, ts-node@^10.8.2: + version "10.8.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.2.tgz#3185b75228cef116bf82ffe8762594f54b2a23f2" + integrity sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" @@ -6861,7 +10736,7 @@ tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0, tslib@^2.3.0: +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@~2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== @@ -6878,11 +10753,23 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tweetnacl-util@^0.15.1: +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl-util@^0.15.0, tweetnacl-util@^0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" @@ -6935,6 +10822,14 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + type@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" @@ -6945,6 +10840,22 @@ type@^2.5.0: resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f" integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ== +typechain@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-7.0.1.tgz#65411991327a7031895b1d57b7e0ce7fc9c66376" + integrity sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ== + dependencies: + "@types/prettier" "^2.1.1" + debug "^4.1.1" + fs-extra "^7.0.0" + glob "^7.1.6" + js-sha3 "^0.8.0" + lodash "^4.17.15" + mkdirp "^1.0.4" + prettier "^2.1.2" + ts-command-line-args "^2.2.0" + ts-essentials "^7.0.1" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -6957,15 +10868,49 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== +typescript-compare@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425" + integrity sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA== + dependencies: + typescript-logic "^0.0.0" + +typescript-logic@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/typescript-logic/-/typescript-logic-0.0.0.tgz#66ebd82a2548f2b444a43667bec120b496890196" + integrity sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q== + +typescript-tuple@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/typescript-tuple/-/typescript-tuple-2.2.1.tgz#7d9813fb4b355f69ac55032e0363e8bb0f04dad2" + integrity sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q== + dependencies: + typescript-compare "^0.0.2" + typescript@^4.6.3: version "4.7.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + uglify-js@^3.1.4: - version "3.16.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.16.1.tgz#0e7ec928b3d0b1e1d952bce634c384fd56377317" - integrity sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ== + version "3.16.2" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.16.2.tgz#0481e1dbeed343ad1c2ddf3c6d42e89b7a6d4def" + integrity sha512-AaQNokTNgExWrkEYA24BTNMSjyqEXPSfhqoS0AxmHkCJ4U+Dyy5AvbGV/sqxuxficEfGGoX3zWw9R7QpLFfEsg== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== unbox-primitive@^1.0.2: version "1.0.2" @@ -6978,9 +10923,9 @@ unbox-primitive@^1.0.2: which-boxed-primitive "^1.0.2" undici@^5.4.0: - version "5.5.1" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.5.1.tgz#baaf25844a99eaa0b22e1ef8d205bffe587c8f43" - integrity sha512-MEvryPLf18HvlCbLSzCW0U00IMftKGI5udnjrQbC5D4P0Hodwffhv+iGfWuJwg16Y/TK11ZFK8i+BPVW2z/eAw== + version "5.6.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.6.0.tgz#3fd695d4454970bae3d151326ee4ab645b8d1962" + integrity sha512-mc+8SY1fXubTrdx4CXDkeFFGV8lI3Tq4I/70U1V8Z6g4iscGII0uLO7CPnDt56bXEbvaKwo2T2+VrteWbZiXiQ== unique-filename@^1.1.1: version "1.1.1" @@ -7001,7 +10946,7 @@ universal-user-agent@^6.0.0: resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== -universalify@^0.1.0: +universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== @@ -7011,7 +10956,7 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -7021,6 +10966,26 @@ upath@^2.0.1: resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== +update-browserslist-db@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz#dbfc5a789caa26b1db8990796c2c8ebbce304824" + integrity sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +upper-case-first@^1.1.0, upper-case-first@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" + integrity sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ== + dependencies: + upper-case "^1.1.1" + +upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -7028,6 +10993,37 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA== + dependencies: + prepend-http "^1.0.1" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A== + +utf-8-validate@5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== + dependencies: + node-gyp-build "^4.3.0" + utf-8-validate@^5.0.2: version "5.0.9" resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" @@ -7035,7 +11031,7 @@ utf-8-validate@^5.0.2: dependencies: node-gyp-build "^4.3.0" -utf8@3.0.0: +utf8@3.0.0, utf8@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== @@ -7057,11 +11053,36 @@ util@^0.12.0: safe-buffer "^5.1.2" which-typed-array "^1.1.2" -uuid@^8.3.2: +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" + integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== + +uuid@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +uuid@8.3.2, uuid@^8.0.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -7094,6 +11115,35 @@ validate-npm-package-name@^4.0.0: dependencies: builtins "^5.0.0" +value-or-promise@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" + integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== + +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vuvuzela@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/vuvuzela/-/vuvuzela-1.0.3.tgz#3be145e58271c73ca55279dd851f12a682114b0b" + integrity sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ== + walk-up-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" @@ -7106,6 +11156,15 @@ wcwidth@^1.0.0: dependencies: defaults "^1.0.3" +web3-bzz@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.7.4.tgz#9419e606e38a9777443d4ce40506ebd796e06075" + integrity sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q== + dependencies: + "@types/node" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + web3-core-helpers@1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz#f8f808928560d3e64e0c8d7bdd163aa4766bcf40" @@ -7151,7 +11210,7 @@ web3-core-subscriptions@1.7.4: eventemitter3 "4.0.4" web3-core-helpers "1.7.4" -web3-core@^1.7.1: +web3-core@1.7.4, web3-core@^1.7.1: version "1.7.4" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.7.4.tgz#943fff99134baedafa7c65b4a0bbd424748429ff" integrity sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q== @@ -7164,6 +11223,59 @@ web3-core@^1.7.1: web3-core-requestmanager "1.7.4" web3-utils "1.7.4" +web3-eth-abi@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz#3fee967bafd67f06b99ceaddc47ab0970f2a614a" + integrity sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg== + dependencies: + "@ethersproject/abi" "^5.6.3" + web3-utils "1.7.4" + +web3-eth-accounts@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz#7a24a4dfe947f7e9d1bae678529e591aa146167a" + integrity sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw== + dependencies: + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/tx" "^3.3.2" + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-util "^7.0.10" + scrypt-js "^3.0.1" + uuid "3.3.2" + web3-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-utils "1.7.4" + +web3-eth-contract@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz#e5761cfb43d453f57be4777b2e5e7e1082078ff7" + integrity sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ== + dependencies: + "@types/bn.js" "^5.1.0" + web3-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-core-promievent "1.7.4" + web3-core-subscriptions "1.7.4" + web3-eth-abi "1.7.4" + web3-utils "1.7.4" + +web3-eth-ens@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz#346720305379c0a539e226141a9602f1da7bc0c8" + integrity sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-promievent "1.7.4" + web3-eth-abi "1.7.4" + web3-eth-contract "1.7.4" + web3-utils "1.7.4" + web3-eth-iban@1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz#711fb2547fdf0f988060027331b2b6c430505753" @@ -7172,6 +11284,45 @@ web3-eth-iban@1.7.4: bn.js "^5.2.1" web3-utils "1.7.4" +web3-eth-personal@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz#22c399794cb828a75703df8bb4b3c1331b471546" + integrity sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-net "1.7.4" + web3-utils "1.7.4" + +web3-eth@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.7.4.tgz#a7c1d3ccdbba4de4a82df7e3c4db716e4a944bf2" + integrity sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug== + dependencies: + web3-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-core-subscriptions "1.7.4" + web3-eth-abi "1.7.4" + web3-eth-accounts "1.7.4" + web3-eth-contract "1.7.4" + web3-eth-ens "1.7.4" + web3-eth-iban "1.7.4" + web3-eth-personal "1.7.4" + web3-net "1.7.4" + web3-utils "1.7.4" + +web3-net@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.7.4.tgz#3153dfd3423262dd6fbec7aae5467202c4cad431" + integrity sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg== + dependencies: + web3-core "1.7.4" + web3-core-method "1.7.4" + web3-utils "1.7.4" + web3-providers-http@1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.7.4.tgz#8209cdcb115db5ccae1f550d1c4e3005e7538d02" @@ -7197,6 +11348,16 @@ web3-providers-ws@1.7.4: web3-core-helpers "1.7.4" websocket "^1.0.32" +web3-shh@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.7.4.tgz#bee91cce2737c529fd347274010b548b6ea060f1" + integrity sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A== + dependencies: + web3-core "1.7.4" + web3-core-method "1.7.4" + web3-core-subscriptions "1.7.4" + web3-net "1.7.4" + web3-utils@1.7.4, web3-utils@^1.7.1: version "1.7.4" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.4.tgz#eb6fa3706b058602747228234453811bbee017f5" @@ -7210,6 +11371,19 @@ web3-utils@1.7.4, web3-utils@^1.7.1: randombytes "^2.1.0" utf8 "3.0.0" +web3@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.7.4.tgz#00c9aef8e13ade92fd773d845fff250535828e93" + integrity sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A== + dependencies: + web3-bzz "1.7.4" + web3-core "1.7.4" + web3-eth "1.7.4" + web3-eth-personal "1.7.4" + web3-net "1.7.4" + web3-shh "1.7.4" + web3-utils "1.7.4" + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -7232,6 +11406,27 @@ websocket@^1.0.32: utf-8-validate "^5.0.2" yaeti "^0.0.6" +websql@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/websql/-/websql-1.0.0.tgz#1bd00b27392893134715d5dd6941fd89e730bab5" + integrity sha512-7iZ+u28Ljw5hCnMiq0BCOeSYf0vCFQe/ORY0HgscTiKjQed8WqugpBUggJ2NTnB9fahn1kEnPRX2jf8Px5PhJw== + dependencies: + argsarray "^0.0.1" + immediate "^3.2.2" + noop-fn "^1.0.0" + sqlite3 "^4.0.0" + tiny-queue "^0.2.1" + +whatwg-fetch@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" + integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -7279,7 +11474,7 @@ which@2.0.2, which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wide-align@^1.1.5: +wide-align@^1.1.0, wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== @@ -7296,6 +11491,14 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + workerpool@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" @@ -7384,11 +11587,54 @@ write-pkg@^4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" -ws@^7.4.6: +write-stream@~0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/write-stream/-/write-stream-0.4.3.tgz#83cc8c0347d0af6057a93862b4e3ae01de5c81c1" + integrity sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A== + dependencies: + readable-stream "~0.0.2" + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^5.1.1: + version "5.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" + integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== + dependencies: + async-limiter "~1.0.0" + +ws@^7.2.0, ws@^7.4.6: version "7.5.8" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a" integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw== +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + xhr2-cookies@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" @@ -7396,11 +11642,41 @@ xhr2-cookies@1.1.0: dependencies: cookiejar "^2.1.1" -xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: +xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xmlhttprequest@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== + +xss@^1.0.8: + version "1.0.13" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.13.tgz#6e48f616128b39f366dfadc57411e1eb5b341c6c" + integrity sha512-clu7dxTm1e8Mo5fz3n/oW3UCXBfV89xZ72jM8yzo1vR/pIS0w3sgB3XV2H8Vm6zfGnHL0FzvLJPJEBhd86/z4Q== + dependencies: + commander "^2.20.3" + cssfilter "0.0.10" + +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== + dependencies: + object-keys "~0.4.0" + y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -7411,7 +11687,7 @@ yaeti@^0.0.6: resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== -yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== From 8aa52679b6dc0322607a8a282b6b81b53117a5f0 Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 4 Jul 2022 19:30:03 +0500 Subject: [PATCH 0003/1247] major fixed added --- .../src/contracts/MultiSendContract.ts | 1 - ...{SmartWallet.ts => SmartWalletContract.ts} | 3 +- .../contracts/SmartWalletFactoryContract.ts | 7 ++ .../core-types/src/ethereumLibs/EthAdapter.ts | 2 +- packages/core-types/src/index.ts | 4 +- packages/core-types/src/types.ts | 13 ++-- packages/ethers-lib/contracts/Deps_V1_0_0.sol | 6 +- .../scripts/generateTypechainFiles.ts | 3 +- packages/ethers-lib/src/EthersAdapter.ts | 2 +- .../MultiSend/MultiSendEthersContract.ts | 19 ++--- .../SmartWallet/SmartWalletContractEthers.ts | 43 +++-------- .../SmartWalletProxyFactoryEthersContract.ts | 32 ++++++++ .../SmartWalletProxyFactoryEthersContract.ts | 73 ------------------ .../src/contracts/contractInstancesEthers.ts | 75 +++++-------------- 14 files changed, 89 insertions(+), 194 deletions(-) rename packages/core-types/src/contracts/{SmartWallet.ts => SmartWalletContract.ts} (91%) create mode 100644 packages/core-types/src/contracts/SmartWalletFactoryContract.ts create mode 100644 packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts delete mode 100644 packages/ethers-lib/src/contracts/SmartWalletProxyFactory/SmartWalletProxyFactoryEthersContract.ts diff --git a/packages/core-types/src/contracts/MultiSendContract.ts b/packages/core-types/src/contracts/MultiSendContract.ts index ceb41c7b2..cd7e416c8 100644 --- a/packages/core-types/src/contracts/MultiSendContract.ts +++ b/packages/core-types/src/contracts/MultiSendContract.ts @@ -1,4 +1,3 @@ export interface MultiSendContract { - getAddress(): string encode(methodName: any, params: any): string } diff --git a/packages/core-types/src/contracts/SmartWallet.ts b/packages/core-types/src/contracts/SmartWalletContract.ts similarity index 91% rename from packages/core-types/src/contracts/SmartWallet.ts rename to packages/core-types/src/contracts/SmartWalletContract.ts index a8e07259d..3095680e4 100644 --- a/packages/core-types/src/contracts/SmartWallet.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -9,8 +9,7 @@ import { export interface SmartWalletContract { getVersion(): Promise - getAddress(): string - getNonce(): Promise + getNonce(batchId: number): Promise getTransactionHash(smartAccountTrxData: SmartAccountTrxData): Promise execTransaction( transaction: SmartAccountTrx, diff --git a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts new file mode 100644 index 000000000..e971a0d84 --- /dev/null +++ b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts @@ -0,0 +1,7 @@ + +export interface SmartWalletFacoryContract { + deployCounterFactualWallet(owner:string, entryPointL:string, handler:string, index:number): Promise + deployWallet(owner:string, entryPointL:string, handler:string): Promise + getAddressForCounterfactualWallet(owner:string, index:number): Promise + } + \ No newline at end of file diff --git a/packages/core-types/src/ethereumLibs/EthAdapter.ts b/packages/core-types/src/ethereumLibs/EthAdapter.ts index 98e418509..6a5ed70e8 100644 --- a/packages/core-types/src/ethereumLibs/EthAdapter.ts +++ b/packages/core-types/src/ethereumLibs/EthAdapter.ts @@ -1,6 +1,6 @@ import { BigNumber } from '@ethersproject/bignumber' import { SingletonDeployment } from '@gnosis.pm/safe-deployments' -import { SmartWalletContract } from 'contracts/SmartWallet' +import { SmartWalletContract } from 'contracts/SmartWalletContract' import { AbiItem } from 'web3-utils' import { MultiSendContract } from '../contracts/MultiSendContract' import { SmartAccountVersion, Eip3770Address } from '../types' diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts index cde5d2bab..eacd94427 100644 --- a/packages/core-types/src/index.ts +++ b/packages/core-types/src/index.ts @@ -1,5 +1,5 @@ -export * from './contracts/SmartWallet' -export * from './contracts/MultiSendContract' +export * from './contracts/SmartWalletContract' export * from './contracts/MultiSendContract' +export * from './contracts/SmartWalletFactoryContract' export * from './ethereumLibs/EthAdapter' export * from './types' diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index f7fef7ddf..c9c88fce3 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -42,7 +42,7 @@ export interface Signature { } export interface SmartAccountTrx { - readonly data: SmartAccountTrxData + readonly data: Transaction readonly signatures: Map addSignature(signature: Signature): void encodedSignatures(): string @@ -53,15 +53,14 @@ export interface Transaction { readonly value: string readonly data: string readonly operation: OperationType - readonly SmartAccountTxGas: number + readonly safeTxGas: number } export interface FeeRefundData { - readonly baseGas?: number - readonly gasPrice?: number - readonly gasToken?: string - readonly refundReceiver?: string - readonly nonce?: number + readonly baseGas: number + readonly gasPrice: number + readonly gasToken: string + readonly refundReceiver: string } export interface TransactionOptions { diff --git a/packages/ethers-lib/contracts/Deps_V1_0_0.sol b/packages/ethers-lib/contracts/Deps_V1_0_0.sol index 6b0995394..bd3816d43 100644 --- a/packages/ethers-lib/contracts/Deps_V1_0_0.sol +++ b/packages/ethers-lib/contracts/Deps_V1_0_0.sol @@ -6,9 +6,9 @@ import { SmartWallet } from "../scw-contracts/smart-contract-wallet/SmartWallet. import { MultiSend } from "../scw-contracts/smart-contract-wallet/libs/MultiSend.sol"; import { WhitelistModule } from "../scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol"; -// contract ProxyFactory_SV1_0_0 is WalletFactory() { -// constructor(address _defaultImpl) WalletFactory(_defaultImpl){} -// } +contract SmartWalletFacoryContract_SV1_0_0 is WalletFactory { + constructor(address _defaultImpl) WalletFactory(_defaultImpl){} +} contract SmartWallet_SV1_0_0 is SmartWallet {} contract MultiSend_SV1_0_0 is MultiSend {} diff --git a/packages/ethers-lib/scripts/generateTypechainFiles.ts b/packages/ethers-lib/scripts/generateTypechainFiles.ts index 32efb69ba..10c0ca41d 100644 --- a/packages/ethers-lib/scripts/generateTypechainFiles.ts +++ b/packages/ethers-lib/scripts/generateTypechainFiles.ts @@ -17,7 +17,8 @@ const safeContractsPath = './artifacts/contracts/Deps_V1_0_0.sol' const safeContracts_V1_0_0 = [ `${safeContractsPath}/SmartWallet_SV1_0_0.json`, - `${safeContractsPath}/MultiSend_SV1_0_0.json` + `${safeContractsPath}/MultiSend_SV1_0_0.json`, + `${safeContractsPath}/SmartWalletFacoryContract_SV1_0_0.json` ].join(' ') // Won't be included in dist/ folder diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index e5b78499f..ac20734ff 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -15,7 +15,7 @@ import { ethers } from 'ethers' import { getMultiSendContractInstance, getSafeContractInstance, - getSafeProxyFactoryContractInstance + // getSafeProxyFactoryContractInstance } from './contracts/contractInstancesEthers' import GnosisSafeContractEthers from './contracts/SmartWallet/SmartWalletContractEthers' import GnosisSafeProxyFactoryEthersContract from './contracts/SmartWalletProxyFactory/SmartWalletProxyFactoryEthersContract' diff --git a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts index ece195878..16b66e6df 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts @@ -1,18 +1,13 @@ -import { MultiSendContract } from '@gnosis.pm/safe-core-sdk-types' -import { MultiSend as MultiSend_V1_1_1 } from '../../../typechain/src/ethers-v5/v1.1.1/MultiSend' +import { MultiSendContract } from 'core-types' import { - MultiSend as MultiSend_V1_3_0, - MultiSendInterface -} from '../../../typechain/src/ethers-v5/v1.3.0/MultiSend' + MultiSendSV100 as MultiSend_V1_0_0, + MultiSendSV100Interface +} from '../../../typechain/src/ethers-v5/v1.0.0/MultiSendSV100' -abstract class MultiSendEthersContract implements MultiSendContract { - constructor(public contract: MultiSend_V1_1_1 | MultiSend_V1_3_0) {} +class MultiSendEthersContract implements MultiSendContract { + constructor(public contract: MultiSend_V1_0_0) {} - getAddress(): string { - return this.contract.address - } - - encode: MultiSendInterface['encodeFunctionData'] = (methodName: any, params: any): string => { + encode: MultiSendSV100Interface['encodeFunctionData'] = (methodName: any, params: any): string => { return this.contract.interface.encodeFunctionData(methodName, params) } } diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts index 46b856820..b4e68b71c 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts @@ -8,43 +8,19 @@ import { FeeRefundData, TransactionResult } from 'core-types' -import { GnosisSafe as GnosisSafe_V1_1_1 } from '../../../typechain/src/ethers-v5/v1.1.1/GnosisSafe' -import { GnosisSafe as GnosisSafe_V1_2_0 } from '../../../typechain/src/ethers-v5/v1.2.0/GnosisSafe' -import { - GnosisSafe as GnosisSafe_V1_3_0, - GnosisSafeInterface -} from '../../../typechain/src/ethers-v5/v1.3.0/GnosisSafe' -import { EthersTransactionOptions, EthersTransactionResult } from '../../types' import { toTxResult } from '../../utils' -import { SENTINEL_ADDRESS } from '../../utils/constants' - -abstract class SmartWalletContractEthers implements SmartWalletContract { - constructor(public contract: GnosisSafe_V1_1_1 | GnosisSafe_V1_2_0 | GnosisSafe_V1_3_0) {} +import { SmartWalletSV100 as SmartWallet_V1_0_0 } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletSV100' +import { SmartWalletSV100Interface } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletSV100' +class SmartWalletContractEthers implements SmartWalletContract { + constructor(public contract: SmartWallet_V1_0_0) {} async getVersion(): Promise { return (await this.contract.VERSION()) as SmartAccountVersion } - getAddress(): string { - return this.contract.address - } - - async getNonce(): Promise { - return (await this.contract.nonce()).toNumber() - } - - async getThreshold(): Promise { - return (await this.contract.getThreshold()).toNumber() + async getNonce(batchId: number): Promise{ + return this.contract.getNonce(batchId) } - - async getOwners(): Promise { - return this.contract.getOwners() - } - - async isOwner(address: string): Promise { - return this.contract.isOwner(address) - } - async getTransactionHash(smartAccountTrxData: SmartAccountTrxData): Promise { return this.contract.getTransactionHash( smartAccountTrxData.to, @@ -69,14 +45,15 @@ abstract class SmartWalletContractEthers implements SmartWalletContract { // TODO: estimate GAS before making the transaction const txResponse = await this.contract.execTransaction( - smartAccountTrx, + smartAccountTrx.data, batchId, - feeRefundData + feeRefundData, + smartAccountTrx.encodedSignatures() ) return toTxResult(txResponse, options) } - encode: GnosisSafeInterface['encodeFunctionData'] = (methodName: any, params: any): string => { + encode: SmartWalletSV100Interface['encodeFunctionData'] = (methodName: any, params: any): string => { return this.contract.interface.encodeFunctionData(methodName, params) } } diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts new file mode 100644 index 000000000..6bb6e175a --- /dev/null +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts @@ -0,0 +1,32 @@ +import { + SmartAccountVersion, + SmartWalletFacoryContract, + SmartAccountTrx, + SmartAccountTrxData, + TransactionOptions, + FeeRefundData, + TransactionResult +} from 'core-types' + +import { SmartWalletFacoryContractSV100 as SmartWalletFacoryContract_V1_0_0 } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFacoryContractSV100' +import { SmartWalletFacoryContractSV100Interface } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFacoryContractSV100' + + +class SmartWalletFacoryContractEthers implements SmartWalletFacoryContract { + constructor(public contract: SmartWalletFacoryContract_V1_0_0) {} + + async deployCounterFactualWallet(owner:string, entryPointL:string, handler:string, index:number): Promise{ + return "" + } + + async deployWallet(owner:string, entryPointL:string, handler:string): Promise{ + return "" + } + + async getAddressForCounterfactualWallet(owner:string, index:number): Promise{ + return "" + } + +} + +export default SmartWalletFacoryContractEthers diff --git a/packages/ethers-lib/src/contracts/SmartWalletProxyFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletProxyFactory/SmartWalletProxyFactoryEthersContract.ts deleted file mode 100644 index 4db19c4e2..000000000 --- a/packages/ethers-lib/src/contracts/SmartWalletProxyFactory/SmartWalletProxyFactoryEthersContract.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { Event } from '@ethersproject/contracts' -import { GnosisSafeProxyFactoryContract } from '@gnosis.pm/safe-core-sdk-types' -import { ProxyFactory as ProxyFactory_V1_1_1 } from '../../../typechain/src/ethers-v5/v1.1.1/ProxyFactory' -import { ProxyFactory as ProxyFactory_V1_3_0 } from '../../../typechain/src/ethers-v5/v1.3.0/ProxyFactory' -import { EthersTransactionOptions } from '../../types' - -export interface CreateProxyProps { - safeMasterCopyAddress: string - initializer: string - saltNonce: number - options?: EthersTransactionOptions - callback?: (txHash: string) => void -} - -class GnosisSafeProxyFactoryEthersContract implements GnosisSafeProxyFactoryContract { - constructor(public contract: ProxyFactory_V1_3_0 | ProxyFactory_V1_1_1) {} - - getAddress(): string { - return this.contract.address - } - - async createProxy({ - safeMasterCopyAddress, - initializer, - saltNonce, - options, - callback - }: CreateProxyProps): Promise { - if (saltNonce < 0) { - throw new Error('saltNonce must be greater than 0') - } - if (options && !options.gasLimit) { - options.gasLimit = await this.estimateGas( - 'createProxyWithNonce', - [safeMasterCopyAddress, initializer, saltNonce], - { - ...options - } - ) - } - const proxyAddress = this.contract - .createProxyWithNonce(safeMasterCopyAddress, initializer, saltNonce, options) - .then(async (txResponse) => { - if (callback) { - callback(txResponse.hash) - } - const txReceipt = await txResponse.wait() - const proxyCreationEvent = txReceipt?.events?.find( - ({ event }: Event) => event === 'ProxyCreation' - ) - if (!proxyCreationEvent || !proxyCreationEvent.args) { - throw new Error('Safe Proxy was not deployed correctly') - } - const proxyAddress: string = proxyCreationEvent.args[0] - return proxyAddress - }) - return proxyAddress - } - - encode(methodName: string, params: any[]): string { - return (this.contract as any).interface.encodeFunctionData(methodName, params) - } - - async estimateGas( - methodName: string, - params: any[], - options: EthersTransactionOptions - ): Promise { - return (await (this.contract.estimateGas as any)[methodName](...params, options)).toNumber() - } -} - -export default GnosisSafeProxyFactoryEthersContract diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index dfd417b39..b9caa4224 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -1,74 +1,33 @@ import { Signer } from '@ethersproject/abstract-signer' -import { SmartAccountVersion } from 'core-types' -import { GnosisSafe__factory as SafeMasterCopy_V1_1_1 } from '../../typechain/src/ethers-v5/v1.1.1/factories/GnosisSafe__factory' -import { MultiSend__factory as MultiSend_V1_1_1 } from '../../typechain/src/ethers-v5/v1.1.1/factories/MultiSend__factory' -import { ProxyFactory__factory as SafeProxyFactory_V1_1_1 } from '../../typechain/src/ethers-v5/v1.1.1/factories/ProxyFactory__factory' -import { GnosisSafe__factory as SafeMasterCopy_V1_2_0 } from '../../typechain/src/ethers-v5/v1.2.0/factories/GnosisSafe__factory' -import { GnosisSafe__factory as SafeMasterCopy_V1_3_0 } from '../../typechain/src/ethers-v5/v1.3.0/factories/GnosisSafe__factory' -import { MultiSend__factory as MultiSend_V1_3_0 } from '../../typechain/src/ethers-v5/v1.3.0/factories/MultiSend__factory' -import { ProxyFactory__factory as SafeProxyFactory_V1_3_0 } from '../../typechain/src/ethers-v5/v1.3.0/factories/ProxyFactory__factory' +import { SmartWalletSV100__factory as SmartWalletMasterCopy_V1_0_0 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletSV100__factory' +import { MultiSendSV100__factory as MultiSend_V1_0_0 } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendSV100__factory' +import { SmartWalletFacoryContractSV100__factory as SmartWalletFactory_V1_0_0 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFacoryContractSV100__factory' import SmartWalletContractEthers from './SmartWallet/SmartWalletContractEthers' -import GnosisSafeContract_V1_3_0_Ethers from './GnosisSafe/v1.3.0/GnosisSafeContract_V1_3_0_Ethers' -import GnosisSafeProxyFactoryContract_V1_1_1_Ethers from './GnosisSafeProxyFactory/v1.1.1/GnosisSafeProxyFactoryContract_V1_1_1_Ethers' -import GnosisSafeProxyFactoryContract_V1_3_0_Ethers from './GnosisSafeProxyFactory/v1.3.0/GnosisSafeProxyFactoryContract_V1_3_0_Ethers' -import MultiSendContract_V1_1_1_Ethers from './MultiSend/v1.1.1/MultiSendContract_V1_1_1_Ethers' -import MultiSendContract_V1_3_0_Ethers from './MultiSend/v1.3.0/MultiSendContract_V1_3_0_Ethers' +import MultiSendEthersContract from './MultiSend/MultiSendEthersContract' +import SmartWalletFacoryContractEthers from './SmartWalletFactory/SmartWalletProxyFactoryEthersContract' export function getSafeContractInstance( contractAddress: string, signer: Signer -): - | SmartWalletContractEthers{ - let safeContract - switch (safeVersion) { - case '1.3.0': - safeContract = SafeMasterCopy_V1_3_0.connect(contractAddress, signer) - return new GnosisSafeContract_V1_3_0_Ethers(safeContract) - case '1.2.0': - safeContract = SafeMasterCopy_V1_2_0.connect(contractAddress, signer) - return new GnosisSafeContract_V1_2_0_Ethers(safeContract) - case '1.1.1': - safeContract = SafeMasterCopy_V1_1_1.connect(contractAddress, signer) - return new GnosisSafeContract_V1_1_1_Ethers(safeContract) - default: - throw new Error('Invalid Safe version') - } -} +): | SmartWalletContractEthers{ + + let safeContract = SmartWalletMasterCopy_V1_0_0.connect(contractAddress, signer) + return new SmartWalletContractEthers(safeContract) + } export function getMultiSendContractInstance( - safeVersion: SafeVersion, contractAddress: string, signer: Signer -): MultiSendContract_V1_3_0_Ethers | MultiSendContract_V1_1_1_Ethers { - let multiSendContract - switch (safeVersion) { - case '1.3.0': - multiSendContract = MultiSend_V1_3_0.connect(contractAddress, signer) - return new MultiSendContract_V1_3_0_Ethers(multiSendContract) - case '1.2.0': - case '1.1.1': - multiSendContract = MultiSend_V1_1_1.connect(contractAddress, signer) - return new MultiSendContract_V1_1_1_Ethers(multiSendContract) - default: - throw new Error('Invalid Safe version') - } +): MultiSendEthersContract{ + + let multiSendContract = MultiSend_V1_0_0.connect(contractAddress, signer) + return new MultiSendEthersContract(multiSendContract) } export function getSafeProxyFactoryContractInstance( - safeVersion: SafeVersion, contractAddress: string, signer: Signer -): GnosisSafeProxyFactoryContract_V1_3_0_Ethers | GnosisSafeProxyFactoryContract_V1_1_1_Ethers { - let gnosisSafeProxyFactoryContract - switch (safeVersion) { - case '1.3.0': - gnosisSafeProxyFactoryContract = SafeProxyFactory_V1_3_0.connect(contractAddress, signer) - return new GnosisSafeProxyFactoryContract_V1_3_0_Ethers(gnosisSafeProxyFactoryContract) - case '1.2.0': - case '1.1.1': - gnosisSafeProxyFactoryContract = SafeProxyFactory_V1_1_1.connect(contractAddress, signer) - return new GnosisSafeProxyFactoryContract_V1_1_1_Ethers(gnosisSafeProxyFactoryContract) - default: - throw new Error('Invalid Safe version') - } +): SmartWalletFacoryContractEthers{ + let walletFactoryContract = SmartWalletFactory_V1_0_0.connect(contractAddress, signer) + return new SmartWalletFacoryContractEthers(walletFactoryContract) } From c1e59d1ee4841aa228ce80370b2980801f263281 Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 4 Jul 2022 19:59:39 +0500 Subject: [PATCH 0004/1247] fix all compilation issues --- .../src/contracts/SmartWalletContract.ts | 3 +- .../contracts/SmartWalletFactoryContract.ts | 7 +- .../core-types/src/ethereumLibs/EthAdapter.ts | 2 - packages/ethers-lib/package.json | 3 +- packages/ethers-lib/src/EthersAdapter.ts | 17 +- .../SmartWallet/SmartWalletContractEthers.ts | 2 +- .../SmartWalletProxyFactoryEthersContract.ts | 22 +- packages/ethers-lib/src/index.ts | 3 +- yarn.lock | 4565 ++--------------- 9 files changed, 355 insertions(+), 4269 deletions(-) diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index 3095680e4..3ef3cfa79 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -6,10 +6,11 @@ import { TransactionOptions, TransactionResult } from '../types' +import { BigNumber } from '@ethersproject/bignumber' export interface SmartWalletContract { getVersion(): Promise - getNonce(batchId: number): Promise + getNonce(batchId: number): Promise getTransactionHash(smartAccountTrxData: SmartAccountTrxData): Promise execTransaction( transaction: SmartAccountTrx, diff --git a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts index e971a0d84..87c28ec29 100644 --- a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts +++ b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts @@ -1,7 +1,10 @@ +import { + TransactionResult +} from '../types' export interface SmartWalletFacoryContract { - deployCounterFactualWallet(owner:string, entryPointL:string, handler:string, index:number): Promise - deployWallet(owner:string, entryPointL:string, handler:string): Promise + deployCounterFactualWallet(owner:string, entryPointL:string, handler:string, index:number): Promise + deployWallet(owner:string, entryPointL:string, handler:string): Promise getAddressForCounterfactualWallet(owner:string, index:number): Promise } \ No newline at end of file diff --git a/packages/core-types/src/ethereumLibs/EthAdapter.ts b/packages/core-types/src/ethereumLibs/EthAdapter.ts index 6a5ed70e8..2bb35476e 100644 --- a/packages/core-types/src/ethereumLibs/EthAdapter.ts +++ b/packages/core-types/src/ethereumLibs/EthAdapter.ts @@ -27,14 +27,12 @@ export interface EthAdapter { getBalance(address: string): Promise getChainId(): Promise getSafeContract({ - smartAccountVersion, chainId, singletonDeployment, customContractAddress, customContractAbi }: GetContractProps): SmartWalletContract getMultiSendContract({ - smartAccountVersion, chainId, singletonDeployment, customContractAddress, diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 226860350..574c5036b 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -32,14 +32,13 @@ ], "homepage": "https://github.com/gnosis/safe-core-sdk#readme", "devDependencies": { - "@gnosis.pm/safe-contracts-v1.2.0": "npm:@gnosis.pm/safe-contracts@1.2.0", - "@gnosis.pm/safe-contracts-v1.3.0": "npm:@gnosis.pm/safe-contracts@1.3.0", "@nomiclabs/hardhat-ethers": "^2.0.5", "@nomiclabs/hardhat-waffle": "^2.0.3", "@typechain/ethers-v5": "^9.0.0", "@types/node": "^17.0.23", "@typescript-eslint/eslint-plugin": "^5.17.0", "@typescript-eslint/parser": "^5.17.0", + "ethers": "^5.5.3", "core-types": "*", "eslint": "^8.12.0", "eslint-config-prettier": "^8.5.0", diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index ac20734ff..63f03e9e0 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -15,10 +15,10 @@ import { ethers } from 'ethers' import { getMultiSendContractInstance, getSafeContractInstance, - // getSafeProxyFactoryContractInstance + getSafeProxyFactoryContractInstance } from './contracts/contractInstancesEthers' -import GnosisSafeContractEthers from './contracts/SmartWallet/SmartWalletContractEthers' -import GnosisSafeProxyFactoryEthersContract from './contracts/SmartWalletProxyFactory/SmartWalletProxyFactoryEthersContract' +import SmartWalletContractEthers from './contracts/SmartWallet/SmartWalletContractEthers' +import SmartWalletProxyFactoryEthersContract from './contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract' import MultiSendEthersContract from './contracts/MultiSend/MultiSendEthersContract' type Ethers = typeof ethers @@ -69,7 +69,6 @@ class EthersAdapter implements EthAdapter { } getSafeContract({ - smartAccountVersion, chainId, singletonDeployment, customContractAddress @@ -80,11 +79,10 @@ class EthersAdapter implements EthAdapter { if (!contractAddress) { throw new Error('Invalid Safe Proxy contract address') } - return getSafeContractInstance(smartAccountVersion, contractAddress, this.#signer) + return getSafeContractInstance(contractAddress, this.#signer) } getMultiSendContract({ - smartAccountVersion, chainId, singletonDeployment, customContractAddress @@ -95,22 +93,21 @@ class EthersAdapter implements EthAdapter { if (!contractAddress) { throw new Error('Invalid Multi Send contract address') } - return getMultiSendContractInstance(smartAccountVersion, contractAddress, this.#signer) + return getMultiSendContractInstance(contractAddress, this.#signer) } getSafeProxyFactoryContract({ - smartAccountVersion, chainId, singletonDeployment, customContractAddress - }: GetContractProps): GnosisSafeProxyFactoryEthersContract { + }: GetContractProps): SmartWalletProxyFactoryEthersContract { const contractAddress = customContractAddress ? customContractAddress : singletonDeployment?.networkAddresses[chainId] if (!contractAddress) { throw new Error('Invalid Safe Proxy Factory contract address') } - return getSafeProxyFactoryContractInstance(smartAccountVersion, contractAddress, this.#signer) + return getSafeProxyFactoryContractInstance(contractAddress, this.#signer) } async getContractCode(address: string): Promise { diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts index b4e68b71c..d9e88cad1 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts @@ -18,7 +18,7 @@ class SmartWalletContractEthers implements SmartWalletContract { return (await this.contract.VERSION()) as SmartAccountVersion } - async getNonce(batchId: number): Promise{ + async getNonce(batchId: number): Promise{ return this.contract.getNonce(batchId) } async getTransactionHash(smartAccountTrxData: SmartAccountTrxData): Promise { diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts index 6bb6e175a..81e9ae946 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts @@ -1,12 +1,8 @@ import { - SmartAccountVersion, - SmartWalletFacoryContract, - SmartAccountTrx, - SmartAccountTrxData, - TransactionOptions, - FeeRefundData, - TransactionResult + SmartWalletFacoryContract, TransactionResult, } from 'core-types' +import { toTxResult } from '../../utils' +import { ContractTransaction } from '@ethersproject/contracts' import { SmartWalletFacoryContractSV100 as SmartWalletFacoryContract_V1_0_0 } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFacoryContractSV100' import { SmartWalletFacoryContractSV100Interface } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFacoryContractSV100' @@ -15,16 +11,18 @@ import { SmartWalletFacoryContractSV100Interface } from '../../../typechain/src/ class SmartWalletFacoryContractEthers implements SmartWalletFacoryContract { constructor(public contract: SmartWalletFacoryContract_V1_0_0) {} - async deployCounterFactualWallet(owner:string, entryPointL:string, handler:string, index:number): Promise{ - return "" + async deployCounterFactualWallet(owner:string, entryPointL:string, handler:string, index:number): Promise{ + const resultSet = await this.contract.deployCounterFactualWallet(owner, entryPointL, handler, index) + return toTxResult(resultSet) } - async deployWallet(owner:string, entryPointL:string, handler:string): Promise{ - return "" + async deployWallet(owner:string, entryPointL:string, handler:string): Promise{ + const resultSet = await this.contract.deployWallet(owner, entryPointL, handler) + return toTxResult(resultSet) } async getAddressForCounterfactualWallet(owner:string, index:number): Promise{ - return "" + return this.contract.getAddressForCounterfactualWallet(owner, index) } } diff --git a/packages/ethers-lib/src/index.ts b/packages/ethers-lib/src/index.ts index eb498c598..237fe0daf 100644 --- a/packages/ethers-lib/src/index.ts +++ b/packages/ethers-lib/src/index.ts @@ -1,6 +1,5 @@ -import { CreateProxyProps } from './contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryEthersContract' import EthersAdapter, { EthersAdapterConfig } from './EthersAdapter' import { EthersTransactionOptions, EthersTransactionResult } from './types' export default EthersAdapter -export { EthersAdapterConfig, EthersTransactionOptions, EthersTransactionResult, CreateProxyProps } +export { EthersAdapterConfig, EthersTransactionOptions, EthersTransactionResult } diff --git a/yarn.lock b/yarn.lock index f821c48d3..ce117ab76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,183 +2,18 @@ # yarn lockfile v1 -"@apollo/protobufjs@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.2.2.tgz#4bd92cd7701ccaef6d517cdb75af2755f049f87c" - integrity sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.0" - "@types/node" "^10.1.0" - long "^4.0.0" - -"@apollo/utils.dropunuseddefinitions@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz#02b04006442eaf037f4c4624146b12775d70d929" - integrity sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg== - -"@apollo/utils.keyvaluecache@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.1.tgz#46f310f859067efe9fa126156c6954f8381080d2" - integrity sha512-nLgYLomqjVimEzQ4cdvVQkcryi970NDvcRVPfd0OPeXhBfda38WjBq+WhQFk+czSHrmrSp34YHBxpat0EtiowA== - dependencies: - "@apollo/utils.logger" "^1.0.0" - lru-cache "^7.10.1" - -"@apollo/utils.logger@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@apollo/utils.logger/-/utils.logger-1.0.0.tgz#6e3460a2250c2ef7c2c3b0be6b5e148a1596f12b" - integrity sha512-dx9XrjyisD2pOa+KsB5RcDbWIAdgC91gJfeyLCgy0ctJMjQe7yZK5kdWaWlaOoCeX0z6YI9iYlg7vMPyMpQF3Q== - -"@apollo/utils.printwithreducedwhitespace@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz#c466299a4766eef8577a2a64c8f27712e8bd7e30" - integrity sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q== - -"@apollo/utils.removealiases@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz#75f6d83098af1fcae2d3beb4f515ad4a8452a8c1" - integrity sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A== - -"@apollo/utils.sortast@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz#93218c7008daf3e2a0725196085a33f5aab5ad07" - integrity sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA== - dependencies: - lodash.sortby "^4.7.0" - -"@apollo/utils.stripsensitiveliterals@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz#4920651f36beee8e260e12031a0c5863ad0c7b28" - integrity sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w== - -"@apollo/utils.usagereporting@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.0.tgz#b81df180f4ca78b91a22cb49105174a7f070db1e" - integrity sha512-5PL7hJMkTPmdo3oxPtigRrIyPxDk/ddrUryHPDaezL1lSFExpNzsDd2f1j0XJoHOg350GRd3LyD64caLA2PU1w== - dependencies: - "@apollo/utils.dropunuseddefinitions" "^1.1.0" - "@apollo/utils.printwithreducedwhitespace" "^1.1.0" - "@apollo/utils.removealiases" "1.0.0" - "@apollo/utils.sortast" "^1.1.0" - "@apollo/utils.stripsensitiveliterals" "^1.2.0" - apollo-reporting-protobuf "^3.3.1" - -"@apollographql/apollo-tools@^0.5.3": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz#cb3998c6cf12e494b90c733f44dd9935e2d8196c" - integrity sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw== - -"@apollographql/graphql-playground-html@1.6.29": - version "1.6.29" - resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz#a7a646614a255f62e10dcf64a7f68ead41dec453" - integrity sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA== - dependencies: - xss "^1.0.8" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": +"@babel/code-frame@^7.0.0": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.6.tgz#8b37d24e88e8e21c499d4328db80577d8882fa53" - integrity sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ== - -"@babel/generator@^7.18.6": - version "7.18.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.7.tgz#2aa78da3c05aadfc82dbac16c99552fc802284bd" - integrity sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A== - dependencies: - "@babel/types" "^7.18.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.13.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz#18d35bfb9f83b1293c22c55b3d576c1315b6ed96" - integrity sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg== - dependencies: - "@babel/compat-data" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.20.2" - semver "^6.3.0" - -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-environment-visitor@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" - integrity sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q== - -"@babel/helper-function-name@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz#8334fecb0afba66e6d87a7e8c6bb7fed79926b83" - integrity sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw== - dependencies: - "@babel/template" "^7.18.6" - "@babel/types" "^7.18.6" - -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz#9448974dd4fb1d80fefe72e8a0af37809cd30d6d" - integrity sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg== - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-validator-identifier@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== -"@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== - "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" @@ -188,63 +23,6 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.6.tgz#845338edecad65ebffef058d3be851f1d28a63bc" - integrity sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw== - -"@babel/plugin-transform-runtime@^7.5.5": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz#77b14416015ea93367ca06979710f5000ff34ccb" - integrity sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - babel-plugin-polyfill-corejs2 "^0.3.1" - babel-plugin-polyfill-corejs3 "^0.5.2" - babel-plugin-polyfill-regenerator "^0.3.1" - semver "^6.3.0" - -"@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.9.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580" - integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" - integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" - -"@babel/traverse@^7.13.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.6.tgz#a228562d2f46e89258efa4ddd0416942e2fd671d" - integrity sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-function-name" "^7.18.6" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.18.6", "@babel/types@^7.18.7": - version "7.18.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.7.tgz#a4a2c910c15040ea52cdd1ddb1614a65c8041726" - integrity sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - to-fast-properties "^2.0.0" - "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -291,7 +69,7 @@ lru-cache "^5.1.1" semaphore-async-await "^1.5.1" -"@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": +"@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": version "2.6.5" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== @@ -310,7 +88,7 @@ ethereumjs-util "^7.1.1" miller-rabin "^4.0.0" -"@ethereumjs/tx@^3.3.0", "@ethereumjs/tx@^3.3.2", "@ethereumjs/tx@^3.5.1", "@ethereumjs/tx@^3.5.2": +"@ethereumjs/tx@^3.5.1", "@ethereumjs/tx@^3.5.2": version "3.5.2" resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== @@ -336,7 +114,7 @@ merkle-patricia-tree "^4.2.4" rustbn.js "~0.2.0" -"@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.6.3": +"@ethersproject/abi@5.6.4", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.6.3": version "5.6.4" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.4.tgz#f6e01b6ed391a505932698ecc0d9e7a99ee60362" integrity sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg== @@ -351,7 +129,7 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.1" -"@ethersproject/abstract-provider@^5.6.1": +"@ethersproject/abstract-provider@5.6.1", "@ethersproject/abstract-provider@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz#02ddce150785caf0c77fe036a0ebfcee61878c59" integrity sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ== @@ -364,7 +142,7 @@ "@ethersproject/transactions" "^5.6.2" "@ethersproject/web" "^5.6.1" -"@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2": +"@ethersproject/abstract-signer@5.6.2", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz#491f07fc2cbd5da258f46ec539664713950b0b33" integrity sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ== @@ -375,7 +153,7 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/properties" "^5.6.0" -"@ethersproject/address@^5.6.1": +"@ethersproject/address@5.6.1", "@ethersproject/address@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== @@ -386,14 +164,22 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/rlp" "^5.6.1" -"@ethersproject/base64@^5.6.1": +"@ethersproject/base64@5.6.1", "@ethersproject/base64@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.1.tgz#2c40d8a0310c9d1606c2c37ae3092634b41d87cb" integrity sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw== dependencies: "@ethersproject/bytes" "^5.6.1" -"@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.6.2": +"@ethersproject/basex@5.6.1", "@ethersproject/basex@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.1.tgz#badbb2f1d4a6f52ce41c9064f01eab19cc4c5305" + integrity sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/properties" "^5.6.0" + +"@ethersproject/bignumber@5.6.2", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.2.tgz#72a0717d6163fab44c47bcc82e0c550ac0315d66" integrity sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw== @@ -402,21 +188,21 @@ "@ethersproject/logger" "^5.6.0" bn.js "^5.2.1" -"@ethersproject/bytes@^5.6.1": +"@ethersproject/bytes@5.6.1", "@ethersproject/bytes@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/constants@^5.6.1": +"@ethersproject/constants@5.6.1", "@ethersproject/constants@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.1.tgz#e2e974cac160dd101cf79fdf879d7d18e8cb1370" integrity sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg== dependencies: "@ethersproject/bignumber" "^5.6.2" -"@ethersproject/contracts@^5.6.0": +"@ethersproject/contracts@5.6.2", "@ethersproject/contracts@^5.6.0": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.2.tgz#20b52e69ebc1b74274ff8e3d4e508de971c287bc" integrity sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g== @@ -432,7 +218,7 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/transactions" "^5.6.2" -"@ethersproject/hash@^5.6.1": +"@ethersproject/hash@5.6.1", "@ethersproject/hash@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.1.tgz#224572ea4de257f05b4abf8ae58b03a67e99b0f4" integrity sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA== @@ -446,7 +232,44 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.1" -"@ethersproject/keccak256@^5.6.1": +"@ethersproject/hdnode@5.6.2", "@ethersproject/hdnode@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.2.tgz#26f3c83a3e8f1b7985c15d1db50dc2903418b2d2" + integrity sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q== + dependencies: + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/basex" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/pbkdf2" "^5.6.1" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/sha2" "^5.6.1" + "@ethersproject/signing-key" "^5.6.2" + "@ethersproject/strings" "^5.6.1" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/wordlists" "^5.6.1" + +"@ethersproject/json-wallets@5.6.1", "@ethersproject/json-wallets@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz#3f06ba555c9c0d7da46756a12ac53483fe18dd91" + integrity sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ== + dependencies: + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/hdnode" "^5.6.2" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/pbkdf2" "^5.6.1" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.1" + "@ethersproject/strings" "^5.6.1" + "@ethersproject/transactions" "^5.6.2" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.6.1", "@ethersproject/keccak256@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.1.tgz#b867167c9b50ba1b1a92bccdd4f2d6bd168a91cc" integrity sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA== @@ -454,26 +277,68 @@ "@ethersproject/bytes" "^5.6.1" js-sha3 "0.8.0" -"@ethersproject/logger@^5.6.0": +"@ethersproject/logger@5.6.0", "@ethersproject/logger@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== -"@ethersproject/networks@^5.6.3": +"@ethersproject/networks@5.6.4", "@ethersproject/networks@^5.6.3": version "5.6.4" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.4.tgz#51296d8fec59e9627554f5a8a9c7791248c8dc07" integrity sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ== dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/properties@^5.6.0": +"@ethersproject/pbkdf2@5.6.1", "@ethersproject/pbkdf2@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz#f462fe320b22c0d6b1d72a9920a3963b09eb82d1" + integrity sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/sha2" "^5.6.1" + +"@ethersproject/properties@5.6.0", "@ethersproject/properties@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/rlp@^5.6.1": +"@ethersproject/providers@5.6.8": + version "5.6.8" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.8.tgz#22e6c57be215ba5545d3a46cf759d265bb4e879d" + integrity sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w== + dependencies: + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/base64" "^5.6.1" + "@ethersproject/basex" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.3" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.1" + "@ethersproject/rlp" "^5.6.1" + "@ethersproject/sha2" "^5.6.1" + "@ethersproject/strings" "^5.6.1" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/web" "^5.6.1" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.6.1", "@ethersproject/random@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.1.tgz#66915943981bcd3e11bbd43733f5c3ba5a790255" + integrity sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/rlp@5.6.1", "@ethersproject/rlp@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.1.tgz#df8311e6f9f24dcb03d59a2bac457a28a4fe2bd8" integrity sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ== @@ -481,7 +346,16 @@ "@ethersproject/bytes" "^5.6.1" "@ethersproject/logger" "^5.6.0" -"@ethersproject/signing-key@^5.6.2": +"@ethersproject/sha2@5.6.1", "@ethersproject/sha2@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.1.tgz#211f14d3f5da5301c8972a8827770b6fd3e51656" + integrity sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.6.2", "@ethersproject/signing-key@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.2.tgz#8a51b111e4d62e5a62aee1da1e088d12de0614a3" integrity sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ== @@ -493,7 +367,19 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/strings@^5.6.1": +"@ethersproject/solidity@5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.1.tgz#5845e71182c66d32e6ec5eefd041fca091a473e2" + integrity sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/sha2" "^5.6.1" + "@ethersproject/strings" "^5.6.1" + +"@ethersproject/strings@5.6.1", "@ethersproject/strings@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.1.tgz#dbc1b7f901db822b5cafd4ebf01ca93c373f8952" integrity sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw== @@ -502,7 +388,7 @@ "@ethersproject/constants" "^5.6.1" "@ethersproject/logger" "^5.6.0" -"@ethersproject/transactions@^5.6.2": +"@ethersproject/transactions@5.6.2", "@ethersproject/transactions@^5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.2.tgz#793a774c01ced9fe7073985bb95a4b4e57a6370b" integrity sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q== @@ -517,7 +403,37 @@ "@ethersproject/rlp" "^5.6.1" "@ethersproject/signing-key" "^5.6.2" -"@ethersproject/web@^5.6.1": +"@ethersproject/units@5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.1.tgz#ecc590d16d37c8f9ef4e89e2005bda7ddc6a4e6f" + integrity sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/wallet@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.2.tgz#cd61429d1e934681e413f4bc847a5f2f87e3a03c" + integrity sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg== + dependencies: + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/hdnode" "^5.6.2" + "@ethersproject/json-wallets" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.1" + "@ethersproject/signing-key" "^5.6.2" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/wordlists" "^5.6.1" + +"@ethersproject/web@5.6.1", "@ethersproject/web@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.1.tgz#6e2bd3ebadd033e6fe57d072db2b69ad2c9bdf5d" integrity sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA== @@ -528,28 +444,22 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.1" +"@ethersproject/wordlists@5.6.1", "@ethersproject/wordlists@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.1.tgz#1e78e2740a8a21e9e99947e47979d72e130aeda1" + integrity sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@gnosis.pm/safe-contracts-v1.2.0@npm:@gnosis.pm/safe-contracts@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-contracts/-/safe-contracts-1.2.0.tgz#33e8332e09c19e8822fccb06c7d3eff806d091f6" - integrity sha512-lcpZodqztDgMICB0kAc8aJdQePwCaLJnbeNjgVTfLAo3fBckVRV06VHXg5IsZ26qLA4JfZ690Cb7TsDVE9ZF3w== - dependencies: - "@truffle/hdwallet-provider" "^1.0.0" - dotenv "^8.0.0" - openzeppelin-solidity "^2.0.0" - shelljs "^0.8.3" - solc "0.5.17" - truffle "^5.1.21" - -"@gnosis.pm/safe-contracts-v1.3.0@npm:@gnosis.pm/safe-contracts@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-contracts/-/safe-contracts-1.3.0.tgz#316741a7690d8751a1f701538cfc9ec80866eedc" - integrity sha512-1p+1HwGvxGUVzVkFjNzglwHrLNA67U/axP0Ct85FzzH8yhGJb4t9jDjPYocVMzLorDoWAfKicGy1akPY9jXRVw== - "@gnosis.pm/safe-core-sdk-types@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.1.0.tgz#dce372445ddbaf7eb960cfe98f5d4b2557004040" @@ -583,63 +493,6 @@ "@gnosis.pm/safe-core-sdk-types" "^1.1.0" "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" -"@graphql-tools/batch-execute@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.5.0.tgz#2767a9abf4e2712871a69360a27ef13ada1c019e" - integrity sha512-S9/76X4uYIbVlJyRzXhCBbTJvVD0VvaWNqGiKgkITxlq4aBsTOHVuE84OSi3E1QKP3PTiJYrgMIn220iFOkyQw== - dependencies: - "@graphql-tools/utils" "8.8.0" - dataloader "2.1.0" - tslib "^2.4.0" - value-or-promise "1.0.11" - -"@graphql-tools/delegate@^8.4.3": - version "8.8.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-8.8.0.tgz#acd3e48e4ca82aace92cc3d920b5c727c35eaf7b" - integrity sha512-dbhfOI8rQXPcowXrbwHLOBY9oGi7qxtlrXF4RuRXmjqGTs2AgogdOE3Ep1+6wFD7qYTuFmHXZ8Cl0PmhoZUgrg== - dependencies: - "@graphql-tools/batch-execute" "8.5.0" - "@graphql-tools/schema" "8.5.0" - "@graphql-tools/utils" "8.8.0" - dataloader "2.1.0" - tslib "~2.4.0" - value-or-promise "1.0.11" - -"@graphql-tools/merge@8.3.0": - version "8.3.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.3.0.tgz#d3a8ba10942f8598788c3e03f97cc1d0c0b055f8" - integrity sha512-xRa7RAQok/0DD2YnjuqikMrr7dUAxTpdGtZ7BkvUUGhYs3B3p7reCAfvOVr1DJAqVToP7hdlMk+S5+Ylk+AaqA== - dependencies: - "@graphql-tools/utils" "8.8.0" - tslib "^2.4.0" - -"@graphql-tools/mock@^8.1.2": - version "8.7.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/mock/-/mock-8.7.0.tgz#da286596ef05b84165e76cf6f608eeea4109a60c" - integrity sha512-K/hqP442mXAvW36v/3TmqFpNzRw14P86xlsJZod88OXwpDfb97X09z1QsaMcvSe8E7ijcKWLlTRk15/vDQSL2Q== - dependencies: - "@graphql-tools/schema" "8.5.0" - "@graphql-tools/utils" "8.8.0" - fast-json-stable-stringify "^2.1.0" - tslib "^2.4.0" - -"@graphql-tools/schema@8.5.0", "@graphql-tools/schema@^8.0.0", "@graphql-tools/schema@^8.3.1": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-8.5.0.tgz#0332b3a2e674d16e9bf8a58dfd47432449ce2368" - integrity sha512-VeFtKjM3SA9/hCJJfr95aEdC3G0xIKM9z0Qdz4i+eC1g2fdZYnfWFt2ucW4IME+2TDd0enHlKzaV0qk2SLVUww== - dependencies: - "@graphql-tools/merge" "8.3.0" - "@graphql-tools/utils" "8.8.0" - tslib "^2.4.0" - value-or-promise "1.0.11" - -"@graphql-tools/utils@8.8.0": - version "8.8.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.8.0.tgz#8332ff80a1da9204ccf514750dd6f5c5cccf17dc" - integrity sha512-KJrtx05uSM/cPYFdTnGAS1doL5bftJLAiFCDMZ8Vkifztz3BFn3gpFiy/o4wDtM8s39G46mxmt2Km/RmeltfGw== - dependencies: - tslib "^2.4.0" - "@humanwhocodes/config-array@^0.9.2": version "0.9.5" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" @@ -664,30 +517,11 @@ resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== -"@josephg/resolvable@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@josephg/resolvable/-/resolvable-1.0.1.tgz#69bc4db754d79e1a2f17a650d3466e038d94a5eb" - integrity sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg== - -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - "@jridgewell/resolve-uri@^3.0.3": version "3.0.8" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz#687cc2bbf243f4e9a868ecf2262318e2658873a1" integrity sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" @@ -701,14 +535,6 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.14" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" - integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@lerna/add@5.1.6": version "5.1.6" resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.1.6.tgz#f839096084a5d34da9e4813ea230da16c99b54c2" @@ -1740,103 +1566,6 @@ node-addon-api "^3.2.1" node-gyp-build "^4.3.0" -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@redux-saga/core@^1.0.0": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.1.3.tgz#3085097b57a4ea8db5528d58673f20ce0950f6a4" - integrity sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg== - dependencies: - "@babel/runtime" "^7.6.3" - "@redux-saga/deferred" "^1.1.2" - "@redux-saga/delay-p" "^1.1.2" - "@redux-saga/is" "^1.1.2" - "@redux-saga/symbols" "^1.1.2" - "@redux-saga/types" "^1.1.0" - redux "^4.0.4" - typescript-tuple "^2.2.1" - -"@redux-saga/deferred@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.1.2.tgz#59937a0eba71fff289f1310233bc518117a71888" - integrity sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ== - -"@redux-saga/delay-p@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.1.2.tgz#8f515f4b009b05b02a37a7c3d0ca9ddc157bb355" - integrity sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g== - dependencies: - "@redux-saga/symbols" "^1.1.2" - -"@redux-saga/is@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.1.2.tgz#ae6c8421f58fcba80faf7cadb7d65b303b97e58e" - integrity sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w== - dependencies: - "@redux-saga/symbols" "^1.1.2" - "@redux-saga/types" "^1.1.0" - -"@redux-saga/symbols@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.1.2.tgz#216a672a487fc256872b8034835afc22a2d0595d" - integrity sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ== - -"@redux-saga/types@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.1.0.tgz#0e81ce56b4883b4b2a3001ebe1ab298b84237204" - integrity sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg== - "@sentry/core@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" @@ -1905,11 +1634,6 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - "@solidity-parser/parser@^0.14.1": version "0.14.2" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.2.tgz#2d8f2bddb217621df882ceeae7d7b42ae8664db3" @@ -1917,13 +1641,6 @@ dependencies: antlr4ts "^0.5.0-alpha.4" -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -1934,317 +1651,25 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@truffle/abi-utils@^0.2.14": - version "0.2.14" - resolved "https://registry.yarnpkg.com/@truffle/abi-utils/-/abi-utils-0.2.14.tgz#01a8e21f4b540f301c94990fb12bacaf059d1ba6" - integrity sha512-2eHoWSFVutt+xAN8+g2x6N3+TM0AMUmGS4iW7KJNfxDsGdMBNe+qqUrDKM0NnA16yxqk95yQztO5EmWPiXw3+Q== - dependencies: - change-case "3.0.2" - faker "5.5.3" - fast-check "^2.12.1" - -"@truffle/code-utils@^1.2.34": - version "1.2.34" - resolved "https://registry.yarnpkg.com/@truffle/code-utils/-/code-utils-1.2.34.tgz#1e843baa7da6cd178d392cf5f1b95df4409ff7b2" - integrity sha512-Ie+PTdJIvK90voInSvn7WEdAsXd1VUw0TsX2225OMGVyYRWiQdX0K6Vfkib7RSZvdUEaURFAaHo5r57l2RacWg== - dependencies: - cbor "^5.1.0" - -"@truffle/codec@^0.13.2": - version "0.13.2" - resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.13.2.tgz#c7b1a3c6833d863843200dc2a739fd4174ae0707" - integrity sha512-iViBnh6WV2BKaLboFC3xd9FGgC2Iybx4CHI+A5PPPqFkjnEycigdN8wnV2eqic9ptE1Ix7wsj9urZitnsnLhCA== - dependencies: - "@truffle/abi-utils" "^0.2.14" - "@truffle/compile-common" "^0.7.32" - big.js "^6.0.3" - bn.js "^5.1.3" - cbor "^5.1.0" - debug "^4.3.1" - lodash "^4.17.21" - semver "^7.3.4" - utf8 "^3.0.0" - web3-utils "1.7.4" - -"@truffle/compile-common@^0.7.32": - version "0.7.32" - resolved "https://registry.yarnpkg.com/@truffle/compile-common/-/compile-common-0.7.32.tgz#3ea6ebfe99bb2bc339ca7723d491e7c52a999aed" - integrity sha512-SzIxwwQj8mJwoa7/kjkAslGenB4NejhmRHmdWdxNS5fqg2XqKhmSJcjir5qFjjvNzjcFZGecLg4EOm1Hj6letw== - dependencies: - "@truffle/error" "^0.1.0" - colors "1.4.0" +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== -"@truffle/config@^1.3.31": - version "1.3.31" - resolved "https://registry.yarnpkg.com/@truffle/config/-/config-1.3.31.tgz#eed77fb639544e80843d6b5419aec806b582057c" - integrity sha512-RTXtRiFrzUT1WVmP8KdBl/DJ2b9GV77gOYSZ3NILuSrEL8IzWq57F1G/9rg5jq1v8b5JLDd7db5Yitn53ipBdA== - dependencies: - "@truffle/error" "^0.1.0" - "@truffle/events" "^0.1.8" - "@truffle/provider" "^0.2.56" - conf "^10.0.2" - find-up "^2.1.0" - lodash "^4.17.21" - original-require "^1.0.1" +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== -"@truffle/dashboard-message-bus-client@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.1.tgz#8719ebaa7c5758853b81a33e8a6014af796727bc" - integrity sha512-tLcLxfnk8fa8m6gnnIiuIkJXMwOnm1gX60hXis091bEokJaR1/RYEdDQsFxy8/XkJmOOEfQ0NRD5ZPXn0KYvjA== - dependencies: - "@truffle/dashboard-message-bus-common" "^0.1.1" - "@truffle/promise-tracker" "^0.1.0" - axios "^0.24.0" - debug "^4.3.1" - delay "^5.0.0" - isomorphic-ws "^4.0.1" - tiny-typed-emitter "^2.1.0" - ws "^7.2.0" - -"@truffle/dashboard-message-bus-common@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@truffle/dashboard-message-bus-common/-/dashboard-message-bus-common-0.1.1.tgz#105071b90b04dd22fc7c9b267fc02f45493ebeab" - integrity sha512-DqrP2IQeao2u3en/csj9MwmEk7KKgLfvyHMwxrU6NyFXQ0Rs6F0AycpGTDivnoowVxqJohA+aut4IYHQuvwH8A== +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== -"@truffle/db-loader@^0.1.22": - version "0.1.22" - resolved "https://registry.yarnpkg.com/@truffle/db-loader/-/db-loader-0.1.22.tgz#605662ceae3460279b04bc6e2cfed659ed4aed26" - integrity sha512-n1ljxscIaci6r0qbJMw34ng2IQGK3lXMoowO5ohP9Gwaqxv+atNLsV7s/6YVmGgsLV8cDNIEZoKKnRh/EDJO4g== - optionalDependencies: - "@truffle/db" "^1.0.12" - -"@truffle/db@^1.0.12": - version "1.0.12" - resolved "https://registry.yarnpkg.com/@truffle/db/-/db-1.0.12.tgz#e1702615776be1b933f253c78edf535b3937620f" - integrity sha512-/7T3kHsMgih/QjtcTInllyo5W9OmAPCA+faHHGLgm0G76gML738NOwz3T/JZhjMKnQabYulZeWid0sjUlzlIPg== - dependencies: - "@graphql-tools/delegate" "^8.4.3" - "@graphql-tools/schema" "^8.3.1" - "@truffle/abi-utils" "^0.2.14" - "@truffle/code-utils" "^1.2.34" - "@truffle/config" "^1.3.31" - abstract-leveldown "^7.2.0" - apollo-server "^3.6.3" - debug "^4.3.1" - fs-extra "^9.1.0" - graphql "^15.3.0" - graphql-tag "^2.11.0" - json-stable-stringify "^1.0.1" - pascal-case "^2.0.1" - pluralize "^8.0.0" - pouchdb "7.3.0" - pouchdb-adapter-memory "^7.1.1" - pouchdb-adapter-node-websql "^7.0.0" - pouchdb-debug "^7.1.1" - pouchdb-find "^7.0.0" - web3-utils "1.7.4" - -"@truffle/debugger@^10.0.16": - version "10.0.16" - resolved "https://registry.yarnpkg.com/@truffle/debugger/-/debugger-10.0.16.tgz#cab78205ee46d48f49fc6840f497a3f84ce044d6" - integrity sha512-poXnJ+fLA2oTMHBhfuML4o1bMtersDVWypATi+YXxCvebVMUQMgOv1baVYDl0pK/J3FaLQSI1W7x8B6415f7cQ== - dependencies: - "@truffle/abi-utils" "^0.2.14" - "@truffle/codec" "^0.13.2" - "@truffle/source-map-utils" "^1.3.88" - bn.js "^5.1.3" - debug "^4.3.1" - json-pointer "^0.6.1" - json-stable-stringify "^1.0.1" - lodash "^4.17.21" - redux "^3.7.2" - redux-saga "1.0.0" - reselect-tree "^1.3.7" - semver "^7.3.4" - web3 "1.7.4" - web3-eth-abi "1.7.4" - -"@truffle/error@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.1.0.tgz#5e9fed79e6cda624c926d314b280a576f8b22a36" - integrity sha512-RbUfp5VreNhsa2Q4YbBjz18rOQI909pG32bghl1hulO7IpvcqTS+C3Ge5cNbiWQ1WGzy1wIeKLW0tmQtHFB7qg== - -"@truffle/events@^0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@truffle/events/-/events-0.1.8.tgz#85e0a1bd56600f90cb96d96fc01c0f978be08cd7" - integrity sha512-oK+nnV9ToCk1qKW01l+bojV61sCj1zljcS5+xBZ9Dteb52mQ9tpsy6xuQXVcsHAhZOQ4Gz2S3bTrlvjU4AyeCQ== - dependencies: - "@truffle/dashboard-message-bus-client" "^0.1.1" - "@truffle/spinners" "^0.2.0" - debug "^4.3.1" - emittery "^0.4.1" - web3-utils "1.7.4" - -"@truffle/hdwallet-provider@^1.0.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@truffle/hdwallet-provider/-/hdwallet-provider-1.7.0.tgz#5cfa8bc67c2a30b3943d3dab78f74c6a191cde02" - integrity sha512-nT7BPJJ2jPCLJc5uZdVtRnRMny5he5d3kO9Hi80ZSqe5xlnK905grBptM/+CwOfbeqHKQirI1btwm6r3wIBM8A== - dependencies: - "@ethereumjs/common" "^2.4.0" - "@ethereumjs/tx" "^3.3.0" - "@trufflesuite/web3-provider-engine" "15.0.14" - eth-sig-util "^3.0.1" - ethereum-cryptography "^0.1.3" - ethereum-protocol "^1.0.1" - ethereumjs-util "^6.1.0" - ethereumjs-wallet "^1.0.1" - -"@truffle/interface-adapter@^0.5.18": - version "0.5.18" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.18.tgz#fe7cc32495e156bf78cdd41e6a86c5e0b09572d2" - integrity sha512-OPrz7bf+TDjZGruXzm6d08SpFNGERctf4O9uC6IJjNmjvKtdEYcLY3DTXOZT6I9PmrViCJ+dC5VlZD5IaamQnQ== - dependencies: - bn.js "^5.1.3" - ethers "^4.0.32" - web3 "1.7.4" - -"@truffle/promise-tracker@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@truffle/promise-tracker/-/promise-tracker-0.1.0.tgz#3fb567fbaf791a168cffa207f4770829ccb1d4b8" - integrity sha512-XH9gf7Vfgn4iPnERpJJPFSob85LXeKg8tkoUZku8JdAYUNIjVztLVJQwh54exsz7Npe6RPh/Hcj8Tiw65uooiA== - -"@truffle/provider@^0.2.56": - version "0.2.56" - resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.56.tgz#437d66f24d21eb144565d7135e570c79fb666b84" - integrity sha512-9mz03psTeWkL45IrF3NUTiKO46HUi+9Lkco3rVjqzUQ+5rAhld0TwOljKbLvVKbDFtHl5LVuC+H4uQP8fpoXSg== - dependencies: - "@truffle/error" "^0.1.0" - "@truffle/interface-adapter" "^0.5.18" - debug "^4.3.1" - web3 "1.7.4" - -"@truffle/source-map-utils@^1.3.88": - version "1.3.88" - resolved "https://registry.yarnpkg.com/@truffle/source-map-utils/-/source-map-utils-1.3.88.tgz#5c16dc15e41aec44618f8d8ae9bf03398d90cc12" - integrity sha512-8PMvCR+l2TpyEO5CV5uA6w87w7Nqqhd5zM0ukwYhfrTAmBqNNPk+pWYAjaL7fVThDeaOkVy+aoOo0rUW5SzAfw== - dependencies: - "@truffle/code-utils" "^1.2.34" - "@truffle/codec" "^0.13.2" - debug "^4.3.1" - json-pointer "^0.6.1" - node-interval-tree "^1.3.3" - web3-utils "1.7.4" - -"@truffle/spinners@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@truffle/spinners/-/spinners-0.2.0.tgz#dc595404fbb8834b4ab6a13f63a29e95ac0f6525" - integrity sha512-rX0qA7GRDzN2ILClUIifMrVzF9EMR9b23CNasJkBgLBvqp1xKwdMbHG3IwUTYelGQtnGQmZ4UZQsBdDb6wf1Tw== - dependencies: - "@trufflesuite/spinnies" "^0.1.0" - -"@trufflesuite/bigint-buffer@1.1.9": - version "1.1.9" - resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz#e2604d76e1e4747b74376d68f1312f9944d0d75d" - integrity sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw== - dependencies: - node-gyp-build "4.3.0" - -"@trufflesuite/eth-json-rpc-filters@^4.1.2-1": - version "4.1.2-1" - resolved "https://registry.yarnpkg.com/@trufflesuite/eth-json-rpc-filters/-/eth-json-rpc-filters-4.1.2-1.tgz#61ab78c52e98a883e5cf086925b34a30297b1824" - integrity sha512-/MChvC5dw2ck9NU1cZmdovCz2VKbOeIyR4tcxDvA5sT+NaL0rA2/R5U0yI7zsbo1zD+pgqav77rQHTzpUdDNJQ== - dependencies: - "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-0" - await-semaphore "^0.1.3" - eth-query "^2.1.2" - json-rpc-engine "^5.1.3" - lodash.flatmap "^4.5.0" - safe-event-emitter "^1.0.1" - -"@trufflesuite/eth-json-rpc-infura@^4.0.3-0": - version "4.0.3-0" - resolved "https://registry.yarnpkg.com/@trufflesuite/eth-json-rpc-infura/-/eth-json-rpc-infura-4.0.3-0.tgz#6d22122937cf60ec9d21a02351c101fdc608c4fe" - integrity sha512-xaUanOmo0YLqRsL0SfXpFienhdw5bpQ1WEXxMTRi57az4lwpZBv4tFUDvcerdwJrxX9wQqNmgUgd1BrR01dumw== - dependencies: - "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-1" - cross-fetch "^2.1.1" - eth-json-rpc-errors "^1.0.1" - json-rpc-engine "^5.1.3" - -"@trufflesuite/eth-json-rpc-middleware@^4.4.2-0", "@trufflesuite/eth-json-rpc-middleware@^4.4.2-1": - version "4.4.2-1" - resolved "https://registry.yarnpkg.com/@trufflesuite/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.2-1.tgz#8c3638ed8a7ed89a1e5e71407de068a65bef0df2" - integrity sha512-iEy9H8ja7/8aYES5HfrepGBKU9n/Y4OabBJEklVd/zIBlhCCBAWBqkIZgXt11nBXO/rYAeKwYuE3puH3ByYnLA== - dependencies: - "@trufflesuite/eth-sig-util" "^1.4.2" - btoa "^1.2.1" - clone "^2.1.1" - eth-json-rpc-errors "^1.0.1" - eth-query "^2.1.2" - ethereumjs-block "^1.6.0" - ethereumjs-tx "^1.3.7" - ethereumjs-util "^5.1.2" - ethereumjs-vm "^2.6.0" - fetch-ponyfill "^4.0.0" - json-rpc-engine "^5.1.3" - json-stable-stringify "^1.0.1" - pify "^3.0.0" - safe-event-emitter "^1.0.1" - -"@trufflesuite/eth-sig-util@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@trufflesuite/eth-sig-util/-/eth-sig-util-1.4.2.tgz#b529e2f38ac08e652116f48981132a26242a4f08" - integrity sha512-+GyfN6b0LNW77hbQlH3ufZ/1eCON7mMrGym6tdYf7xiNw9Vv3jBO72bmmos1EId2NgBvPMhmYYm6DSLQFTmzrA== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^5.1.1" - -"@trufflesuite/spinnies@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@trufflesuite/spinnies/-/spinnies-0.1.0.tgz#da09ff7c526b563ff6e4d4d86b7884ec00a77be2" - integrity sha512-22rVi7rECyAg9vsopa9jR84xQ9kSbjRxCYI9SPbHx4jjfRQODDzmVZtXLobUuXEQZYLgP1pXBtgY5kReb72E2g== - dependencies: - chalk "^4.1.2" - cli-cursor "^3.1.0" - strip-ansi "^6.0.0" - -"@trufflesuite/web3-provider-engine@15.0.14": - version "15.0.14" - resolved "https://registry.yarnpkg.com/@trufflesuite/web3-provider-engine/-/web3-provider-engine-15.0.14.tgz#8f9696f434585cc0ab2e57c312090c1f138bc471" - integrity sha512-6/LoWvNMxYf0oaYzJldK2a9AdnkAdIeJhHW4nuUBAeO29eK9xezEaEYQ0ph1QRTaICxGxvn+1Azp4u8bQ8NEZw== - dependencies: - "@ethereumjs/tx" "^3.3.0" - "@trufflesuite/eth-json-rpc-filters" "^4.1.2-1" - "@trufflesuite/eth-json-rpc-infura" "^4.0.3-0" - "@trufflesuite/eth-json-rpc-middleware" "^4.4.2-1" - "@trufflesuite/eth-sig-util" "^1.4.2" - async "^2.5.0" - backoff "^2.5.0" - clone "^2.0.0" - cross-fetch "^2.1.0" - eth-block-tracker "^4.4.2" - eth-json-rpc-errors "^2.0.2" - ethereumjs-block "^1.2.2" - ethereumjs-util "^5.1.5" - ethereumjs-vm "^2.3.4" - json-stable-stringify "^1.0.1" - promise-to-callback "^1.0.0" - readable-stream "^2.2.9" - request "^2.85.0" - semaphore "^1.0.3" - ws "^5.1.1" - xhr "^2.2.0" - xtend "^4.0.1" - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" - integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== "@typechain/ethers-v5@^9.0.0": version "9.0.0" @@ -2259,13 +1684,6 @@ resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#f055979a99f7654e84d6b8e6267419e9c4cfff87" integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== -"@types/accepts@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" - integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== - dependencies: - "@types/node" "*" - "@types/bignumber.js@^5.0.0": version "5.0.0" resolved "https://registry.yarnpkg.com/@types/bignumber.js/-/bignumber.js-5.0.0.tgz#d9f1a378509f3010a3255e9cc822ad0eeb4ab969" @@ -2287,14 +1705,6 @@ dependencies: "@types/node" "*" -"@types/body-parser@*", "@types/body-parser@1.19.2": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - "@types/chai-as-promised@^7.1.5": version "7.1.5" resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz#6e016811f6c7a64f2eed823191c3a6955094e255" @@ -2307,37 +1717,6 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== -"@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - -"@types/cors@2.8.12": - version "2.8.12" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" - integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== - -"@types/express-serve-static-core@4.17.29", "@types/express-serve-static-core@^4.17.18": - version "4.17.29" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" - integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - -"@types/express@4.17.13": - version "4.17.13" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" - integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" - "@types/qs" "*" - "@types/serve-static" "*" - "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" @@ -2362,21 +1741,11 @@ "@types/level-errors" "*" "@types/node" "*" -"@types/long@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" - integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== - "@types/lru-cache@^5.1.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== - "@types/minimatch@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" @@ -2412,11 +1781,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.1.tgz#e91bd73239b338557a84d1f67f7b9e0f25643870" integrity sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg== -"@types/node@^10.1.0": - version "10.17.60" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" - integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== - "@types/node@^12.12.6": version "12.20.55" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" @@ -2449,16 +1813,6 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a" integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== -"@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - "@types/resolve@^0.0.8": version "0.0.8" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" @@ -2473,14 +1827,6 @@ dependencies: "@types/node" "*" -"@types/serve-static@*": - version "1.13.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" - integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - "@types/sinon-chai@^3.2.3": version "3.2.8" resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.8.tgz#5871d09ab50d671d8e6dd72e9073f8e738ac61dc" @@ -2612,7 +1958,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abort-controller@3.0.0, abort-controller@^3.0.0: +abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== @@ -2630,33 +1976,7 @@ abstract-leveldown@^6.2.1: level-supports "~1.0.0" xtend "~4.0.0" -abstract-leveldown@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" - integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== - dependencies: - buffer "^6.0.3" - catering "^2.0.0" - is-buffer "^2.0.5" - level-concat-iterator "^3.0.0" - level-supports "^2.0.1" - queue-microtask "^1.2.3" - -abstract-leveldown@~2.6.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" - integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA== - dependencies: - xtend "~4.0.0" - -abstract-leveldown@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" - integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== - dependencies: - xtend "~4.0.0" - -abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3: +abstract-leveldown@~6.2.1: version "6.2.3" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== @@ -2667,14 +1987,6 @@ abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3: level-supports "~1.0.0" xtend "~4.0.0" -accepts@^1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -2705,11 +2017,6 @@ aes-js@3.0.0: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== -aes-js@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" - integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== - agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -2734,14 +2041,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.10.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== @@ -2751,16 +2051,6 @@ ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.6.3: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -2778,11 +2068,6 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -2825,115 +2110,6 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -apollo-datasource@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-3.3.2.tgz#5711f8b38d4b7b53fb788cb4dbd4a6a526ea74c8" - integrity sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg== - dependencies: - "@apollo/utils.keyvaluecache" "^1.0.1" - apollo-server-env "^4.2.1" - -apollo-reporting-protobuf@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.3.1.tgz#8c8761f9ac4375fd8490262d6144057cec6ce0b3" - integrity sha512-tyvj3Vj71TCh6c8PtdHOLgHHBSJ05DF/A/Po3q8yfHTBkOPcOJZE/GGN/PT/pwKg7HHxKcAeHDw7+xciVvGx0w== - dependencies: - "@apollo/protobufjs" "1.2.2" - -apollo-server-core@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-3.9.0.tgz#44b39e378314cfc0596be7003d3f1f1397c88eea" - integrity sha512-WS54C33cTriDaBIcj7ijWv/fgeJICcrQKlP1Cn6pnZp/eumpMraezLeJ3gFWAXprOuR2E3fZe64lNlup0fMu8w== - dependencies: - "@apollo/utils.keyvaluecache" "^1.0.1" - "@apollo/utils.logger" "^1.0.0" - "@apollo/utils.usagereporting" "^1.0.0" - "@apollographql/apollo-tools" "^0.5.3" - "@apollographql/graphql-playground-html" "1.6.29" - "@graphql-tools/mock" "^8.1.2" - "@graphql-tools/schema" "^8.0.0" - "@josephg/resolvable" "^1.0.0" - apollo-datasource "^3.3.2" - apollo-reporting-protobuf "^3.3.1" - apollo-server-env "^4.2.1" - apollo-server-errors "^3.3.1" - apollo-server-plugin-base "^3.6.1" - apollo-server-types "^3.6.1" - async-retry "^1.2.1" - fast-json-stable-stringify "^2.1.0" - graphql-tag "^2.11.0" - loglevel "^1.6.8" - lru-cache "^6.0.0" - sha.js "^2.4.11" - uuid "^8.0.0" - whatwg-mimetype "^3.0.0" - -apollo-server-env@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-4.2.1.tgz#ea5b1944accdbdba311f179e4dfaeca482c20185" - integrity sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g== - dependencies: - node-fetch "^2.6.7" - -apollo-server-errors@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz#ba5c00cdaa33d4cbd09779f8cb6f47475d1cd655" - integrity sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA== - -apollo-server-express@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-3.9.0.tgz#1ff3b53fe76e4e8be04b8477ea8a3d9586313af1" - integrity sha512-scSeHy9iB7W3OiF3uLQEzad9Jm9tEfDF8ACsJb2P+xX69uqg6zizsrQvj3qRhazCO7FKMcMu9zQFR0hy7zKbUA== - dependencies: - "@types/accepts" "^1.3.5" - "@types/body-parser" "1.19.2" - "@types/cors" "2.8.12" - "@types/express" "4.17.13" - "@types/express-serve-static-core" "4.17.29" - accepts "^1.3.5" - apollo-server-core "^3.9.0" - apollo-server-types "^3.6.1" - body-parser "^1.19.0" - cors "^2.8.5" - parseurl "^1.3.3" - -apollo-server-plugin-base@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-3.6.1.tgz#33e9f26433d5a8b8ed5d27e9fa88de9ef0c2c704" - integrity sha512-bFpxzWO0LTTtSAkGVBeaAtnQXJ5ZCi8eaLN/eMSju8RByifmF3Kr6gAqcOZhOH/geQEt3Y6G8n3bR0eHTGxljQ== - dependencies: - apollo-server-types "^3.6.1" - -apollo-server-types@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-3.6.1.tgz#704e5309bd947306030df01f982e36d1d4753eaa" - integrity sha512-XOPlBlRdwP00PrG03OffGGWuzyei+J9t1rAnvyHsSdP0JCgQWigHJfvL1N9Bhgi4UTjl9JadKOJh1znLNlqIFQ== - dependencies: - "@apollo/utils.keyvaluecache" "^1.0.1" - "@apollo/utils.logger" "^1.0.0" - apollo-reporting-protobuf "^3.3.1" - apollo-server-env "^4.2.1" - -apollo-server@^3.6.3: - version "3.9.0" - resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-3.9.0.tgz#391b60c4c24d37c65855cccc8aa886e684bc1776" - integrity sha512-g80gXDuK8fl2W0fQF/hEyeoO9AU+sO2gBzeJAYUyGLotYc+oL/Y3mTRk5GB8C7cXUXCg5uvWbUj8va0E5UZE7w== - dependencies: - "@types/express" "4.17.13" - apollo-server-core "^3.9.0" - apollo-server-express "^3.9.0" - express "^4.17.1" - -app-module-path@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" - integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - "aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" @@ -2947,14 +2123,6 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" -are-we-there-yet@~1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" - integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -2965,11 +2133,6 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -argsarray@0.0.1, argsarray@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" - integrity sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg== - array-back@^3.0.1, array-back@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" @@ -2985,11 +2148,6 @@ array-differ@^3.0.0: resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" @@ -3015,28 +2173,6 @@ asap@^2.0.0: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" @@ -3047,31 +2183,14 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-eventemitter@^0.2.2, async-eventemitter@^0.2.4: +async-eventemitter@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== dependencies: async "^2.4.0" -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async-retry@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" - integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== - dependencies: - retry "0.13.1" - -async@^1.4.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== - -async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0: +async@^2.4.0: version "2.6.4" resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== @@ -3088,75 +2207,17 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atomically@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe" - integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w== - available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -await-semaphore@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/await-semaphore/-/await-semaphore-0.1.3.tgz#2b88018cc8c28e06167ae1cdff02504f1f9688d3" - integrity sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -axios@^0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" - integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== - dependencies: - follow-redirects "^1.14.4" - -babel-plugin-polyfill-corejs2@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.21.0" - -babel-plugin-polyfill-regenerator@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - -backoff@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" - integrity sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA== - dependencies: - precond "0.2" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^3.0.2, base-x@^3.0.8: +base-x@^3.0.2: version "3.0.9" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== @@ -3168,24 +2229,17 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== before-after-hook@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== -big.js@^6.0.3: - version "6.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.0.tgz#39c60822aecb0f34a1d79a90fe9908a0ddf45e1d" - integrity sha512-paIKvJiAaOYdLt6MfnvxkDo64lTOV257XYJyX3oJnJQocIclUn+48k6ZerH/c5FxWE6DGJu1TKDYis7tqHg9kg== - -bignumber.js@*, bignumber.js@^9.0.0, bignumber.js@^9.0.1: +bignumber.js@*, bignumber.js@^9.0.0: version "9.0.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== @@ -3221,44 +2275,21 @@ blakejs@^1.1.0: resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== -bluebird@^3.5.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - bn.js@4.11.6: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: +bn.js@^4.0.0, bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0, bn.js@^5.2.1: +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.20.0, body-parser@^1.16.0, body-parser@^1.19.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.10.3" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3291,7 +2322,7 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: +browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -3303,58 +2334,6 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserslist@^4.20.2, browserslist@^4.21.0: - version "4.21.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.1.tgz#c9b9b0a54c7607e8dc3e01a0d311727188011a00" - integrity sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ== - dependencies: - caniuse-lite "^1.0.30001359" - electron-to-chromium "^1.4.172" - node-releases "^2.0.5" - update-browserslist-db "^1.0.4" - bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -3371,26 +2350,11 @@ bs58check@^2.1.2: create-hash "^1.1.0" safe-buffer "^5.1.2" -btoa@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" - integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== - -buffer-from@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" - integrity sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ== - -buffer-from@1.1.2, buffer-from@^1.0.0: +buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-to-arraybuffer@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" - integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== - buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -3403,7 +2367,7 @@ buffer-xor@^2.0.1: dependencies: safe-buffer "^5.1.1" -buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: +buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -3411,21 +2375,6 @@ buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bufferutil@4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" - integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== - dependencies: - node-gyp-build "^4.3.0" - bufferutil@^4.0.1: version "4.0.6" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" @@ -3503,19 +2452,6 @@ cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: tar "^6.1.11" unique-filename "^1.1.1" -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -3529,14 +2465,6 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w== - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" @@ -3556,29 +2484,6 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001359: - version "1.0.30001363" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001363.tgz#26bec2d606924ba318235944e1193304ea7c4f15" - integrity sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -catering@^2.0.0, catering@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - -cbor@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== - dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" - chai-as-promised@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" @@ -3616,7 +2521,7 @@ chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3624,30 +2529,6 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -change-case@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.2.tgz#fd48746cce02f03f0a672577d1d3a8dc2eceb037" - integrity sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA== - dependencies: - camel-case "^3.0.0" - constant-case "^2.0.0" - dot-case "^2.1.0" - header-case "^1.0.0" - is-lower-case "^1.1.0" - is-upper-case "^1.1.0" - lower-case "^1.1.1" - lower-case-first "^1.0.0" - no-case "^2.3.2" - param-case "^2.1.0" - pascal-case "^2.0.0" - path-case "^2.1.0" - sentence-case "^2.1.0" - snake-case "^2.1.0" - swap-case "^1.1.0" - title-case "^2.1.0" - upper-case "^1.1.1" - upper-case-first "^1.1.0" - chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3658,13 +2539,6 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== -checkpoint-store@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/checkpoint-store/-/checkpoint-store-1.1.0.tgz#04e4cb516b91433893581e6d4601a78e9552ea06" - integrity sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg== - dependencies: - functional-red-black-tree "^1.0.1" - chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.1: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -3680,11 +2554,6 @@ chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.1: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -3695,17 +2564,6 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -cids@^0.7.1: - version "0.7.5" - resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" - integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== - dependencies: - buffer "^5.5.0" - class-is "^1.1.0" - multibase "~0.6.0" - multicodec "^1.0.0" - multihashes "~0.4.15" - cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -3714,11 +2572,6 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -class-is@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" - integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -3766,11 +2619,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -clone-buffer@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== - clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -3780,23 +2628,11 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== - dependencies: - mimic-response "^1.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== -clone@^2.0.0, clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== - cmd-shim@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd" @@ -3811,11 +2647,6 @@ cmd-shim@^5.0.0: dependencies: mkdirp-infer-owner "^2.0.0" -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -3850,11 +2681,6 @@ colorette@^2.0.16: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== -colors@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - columnify@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" @@ -3863,7 +2689,7 @@ columnify@^1.6.0: strip-ansi "^6.0.1" wcwidth "^1.0.0" -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -3900,11 +2726,6 @@ commander@3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - commander@^9.3.0: version "9.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-9.3.0.tgz#f619114a5a2d2054e0d9ff1b31d5ccf89255e26b" @@ -3938,22 +2759,6 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -conf@^10.0.2: - version "10.1.2" - resolved "https://registry.yarnpkg.com/conf/-/conf-10.1.2.tgz#50132158f388756fa9dea3048f6b47935315c14e" - integrity sha512-o9Fv1Mv+6A0JpoayQ8JleNp3hhkbOJP/Re/Q+QqxMPHPkABVsRjQGWZn9A5GcqLiTNC6d89p2PB5ZhHVDSMwyg== - dependencies: - ajv "^8.6.3" - ajv-formats "^2.1.1" - atomically "^1.7.0" - debounce-fn "^4.0.0" - dot-prop "^6.0.1" - env-paths "^2.2.1" - json-schema-typed "^7.0.3" - onetime "^5.1.2" - pkg-up "^3.1.0" - semver "^7.3.5" - config-chain@^1.1.12: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" @@ -3962,40 +2767,11 @@ config-chain@^1.1.12: ini "^1.3.4" proto-list "~1.2.1" -console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: +console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -constant-case@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" - integrity sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ== - dependencies: - snake-case "^2.1.0" - upper-case "^1.1.1" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-hash@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" - integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== - dependencies: - cids "^0.7.1" - multicodec "^0.5.5" - multihashes "^0.4.15" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - conventional-changelog-angular@^5.0.12: version "5.0.13" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" @@ -4078,16 +2854,6 @@ conventional-recommended-bump@^6.1.0: meow "^8.0.0" q "^1.5.1" -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - cookie@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" @@ -4098,37 +2864,16 @@ cookiejar@^2.1.1: resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== -core-js-compat@^3.21.0: - version "3.23.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.3.tgz#7d8503185be76bb6d8d592c291a4457a8e440aa9" - integrity sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw== - dependencies: - browserslist "^4.21.0" - semver "7.0.0" - core-js-pure@^3.0.1: version "3.23.3" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.23.3.tgz#bcd02d3d8ec68ad871ef50d5ccbb248ddb54f401" integrity sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA== -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cors@^2.8.1, cors@^2.8.5: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - cosmiconfig@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" @@ -4145,14 +2890,6 @@ crc-32@^1.2.0: resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -4164,7 +2901,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: +create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -4181,14 +2918,6 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-fetch@^2.1.0, cross-fetch@^2.1.1: - version "2.2.6" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.6.tgz#2ef0bb39a24ac034787965c457368a28730e220a" - integrity sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA== - dependencies: - node-fetch "^2.6.7" - whatwg-fetch "^2.0.4" - cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -4198,28 +2927,6 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crypto-browserify@3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -cssfilter@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" - integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== - d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -4233,45 +2940,12 @@ dargs@^7.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -dataloader@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.1.0.tgz#c69c538235e85e7ac6c6c444bae8ecabf5de9df7" - integrity sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ== - dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debounce-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" - integrity sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ== - dependencies: - mimic-fn "^3.0.0" - -debug@2.6.9, debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4285,12 +2959,12 @@ debug@4.3.3: dependencies: ms "2.1.2" -debug@^3.1.0, debug@^3.2.6: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== +debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: - ms "^2.1.1" + ms "2.0.0" debuglog@^1.0.1: version "1.0.1" @@ -4320,13 +2994,6 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== -decompress-response@^3.2.0, decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -4339,7 +3006,7 @@ deep-eql@^3.0.1: dependencies: type-detect "^4.0.0" -deep-extend@^0.6.0, deep-extend@~0.6.0: +deep-extend@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== @@ -4356,18 +3023,6 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -deferred-leveldown@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" - integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA== - dependencies: - abstract-leveldown "~2.6.0" - deferred-leveldown@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" @@ -4389,11 +3044,6 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -delay@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" - integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -4419,19 +3069,6 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" @@ -4442,11 +3079,6 @@ detect-indent@^6.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== - dezalgo@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" @@ -4465,15 +3097,6 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4488,18 +3111,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - -dot-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee" - integrity sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug== - dependencies: - no-case "^2.2.0" - dot-prop@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -4514,26 +3125,11 @@ dot-prop@^6.0.1: dependencies: is-obj "^2.0.0" -dotenv@^8.0.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== - dotenv@~10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== -double-ended-queue@2.1.0-0: - version "2.1.0-0" - resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" - integrity sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ== - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA== - duplexer@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -4544,25 +3140,7 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.172: - version "1.4.177" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.177.tgz#b6a4436eb788ca732556cd69f384b8a3c82118c5" - integrity sha512-FYPir3NSBEGexSZUEeht81oVhHfLFl6mhUKSkjHN/iB/TwEIt/WHQrqVGfTLN5gQxwJCQkIJBe05eOXjI7omgg== - -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: +elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -4575,16 +3153,6 @@ elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5 minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emittery@0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" - integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== - -emittery@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.4.1.tgz#abe9d3297389ba424ac87e53d1c701962ce7433d" - integrity sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -4595,11 +3163,6 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - encoding-down@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" @@ -4610,27 +3173,20 @@ encoding-down@^6.3.0: level-codec "^9.0.0" level-errors "^2.0.0" -encoding@^0.1.11, encoding@^0.1.12, encoding@^0.1.13: +encoding@^0.1.12, encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -end-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/end-stream/-/end-stream-0.1.0.tgz#32003f3f438a2b0143168137f8fa6e9866c81ed5" - integrity sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA== - dependencies: - write-stream "~0.4.3" - enquirer@^2.3.0, enquirer@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -4638,7 +3194,7 @@ enquirer@^2.3.0, enquirer@~2.3.6: dependencies: ansi-colors "^4.1.1" -env-paths@^2.2.0, env-paths@^2.2.1: +env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== @@ -4736,11 +3292,6 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -4875,91 +3426,6 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eth-block-tracker@^4.4.2: - version "4.4.3" - resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz#766a0a0eb4a52c867a28328e9ae21353812cf626" - integrity sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw== - dependencies: - "@babel/plugin-transform-runtime" "^7.5.5" - "@babel/runtime" "^7.5.5" - eth-query "^2.1.0" - json-rpc-random-id "^1.0.1" - pify "^3.0.0" - safe-event-emitter "^1.0.1" - -eth-ens-namehash@2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" - integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== - dependencies: - idna-uts46-hx "^2.3.1" - js-sha3 "^0.5.7" - -eth-json-rpc-errors@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz#148377ef55155585981c21ff574a8937f9d6991f" - integrity sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg== - dependencies: - fast-safe-stringify "^2.0.6" - -eth-json-rpc-errors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.2.tgz#c1965de0301fe941c058e928bebaba2e1285e3c4" - integrity sha512-uBCRM2w2ewusRHGxN8JhcuOb2RN3ueAOYH/0BhqdFmQkZx5lj5+fLKTz0mIVOzd4FG5/kUksCzCD7eTEim6gaA== - dependencies: - fast-safe-stringify "^2.0.6" - -eth-lib@0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" - integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - -eth-lib@^0.1.26: - version "0.1.29" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" - integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - nano-json-stream-parser "^0.1.2" - servify "^0.1.12" - ws "^3.0.0" - xhr-request-promise "^0.1.2" - -eth-query@^2.1.0, eth-query@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" - integrity sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA== - dependencies: - json-rpc-random-id "^1.0.0" - xtend "^4.0.1" - -eth-rpc-errors@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz#d7b22653c70dbf9defd4ef490fd08fe70608ca10" - integrity sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg== - dependencies: - fast-safe-stringify "^2.0.6" - -eth-sig-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.1.tgz#8753297c83a3f58346bd13547b59c4b2cd110c96" - integrity sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^5.1.1" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.0" - ethereum-bloom-filters@^1.0.6: version "1.0.10" resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" @@ -4967,16 +3433,6 @@ ethereum-bloom-filters@^1.0.6: dependencies: js-sha3 "^0.8.0" -ethereum-common@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca" - integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA== - -ethereum-common@^0.0.18: - version "0.0.18" - resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" - integrity sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ== - ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" @@ -4998,11 +3454,6 @@ ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: secp256k1 "^4.0.1" setimmediate "^1.0.5" -ethereum-protocol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz#b7d68142f4105e0ae7b5e178cf42f8d4dc4b93cf" - integrity sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg== - ethereumjs-abi@^0.6.8: version "0.6.8" resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" @@ -5011,72 +3462,7 @@ ethereumjs-abi@^0.6.8: bn.js "^4.11.8" ethereumjs-util "^6.0.0" -ethereumjs-account@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz#eeafc62de544cb07b0ee44b10f572c9c49e00a84" - integrity sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA== - dependencies: - ethereumjs-util "^5.0.0" - rlp "^2.0.0" - safe-buffer "^5.1.1" - -ethereumjs-block@^1.2.2, ethereumjs-block@^1.6.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz#78b88e6cc56de29a6b4884ee75379b6860333c3f" - integrity sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg== - dependencies: - async "^2.0.1" - ethereum-common "0.2.0" - ethereumjs-tx "^1.2.2" - ethereumjs-util "^5.0.0" - merkle-patricia-tree "^2.1.2" - -ethereumjs-block@~2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965" - integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== - dependencies: - async "^2.0.1" - ethereumjs-common "^1.5.0" - ethereumjs-tx "^2.1.1" - ethereumjs-util "^5.0.0" - merkle-patricia-tree "^2.1.2" - -ethereumjs-common@^1.1.0, ethereumjs-common@^1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" - integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== - -ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" - integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== - dependencies: - ethereum-common "^0.0.18" - ethereumjs-util "^5.0.0" - -ethereumjs-tx@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" - integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== - dependencies: - ethereumjs-common "^1.5.0" - ethereumjs-util "^6.0.0" - -ethereumjs-util@^5.0.0, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.5: - version "5.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz#a833f0e5fca7e5b361384dc76301a721f537bf65" - integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== - dependencies: - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "^0.1.3" - rlp "^2.0.0" - safe-buffer "^5.1.1" - -ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.1: +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== @@ -5089,7 +3475,7 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: +ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== @@ -5097,54 +3483,44 @@ ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereu "@types/bn.js" "^5.1.0" bn.js "^5.1.2" create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethereumjs-vm@^2.3.4, ethereumjs-vm@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz#76243ed8de031b408793ac33907fb3407fe400c6" - integrity sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw== - dependencies: - async "^2.1.2" - async-eventemitter "^0.2.2" - ethereumjs-account "^2.0.3" - ethereumjs-block "~2.2.0" - ethereumjs-common "^1.1.0" - ethereumjs-util "^6.0.0" - fake-merkle-patricia-tree "^1.0.1" - functional-red-black-tree "^1.0.1" - merkle-patricia-tree "^2.3.2" - rustbn.js "~0.2.0" - safe-buffer "^5.1.1" - -ethereumjs-wallet@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz#2c000504b4c71e8f3782dabe1113d192522e99b6" - integrity sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA== - dependencies: - aes-js "^3.1.2" - bs58check "^2.1.2" - ethereum-cryptography "^0.1.3" - ethereumjs-util "^7.1.2" - randombytes "^2.1.0" - scrypt-js "^3.0.1" - utf8 "^3.0.0" - uuid "^8.3.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" -ethers@^4.0.32: - version "4.0.49" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" - integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== - dependencies: - aes-js "3.0.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.4" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" +ethers@^5.5.3: + version "5.6.9" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.9.tgz#4e12f8dfcb67b88ae7a78a9519b384c23c576a4d" + integrity sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA== + dependencies: + "@ethersproject/abi" "5.6.4" + "@ethersproject/abstract-provider" "5.6.1" + "@ethersproject/abstract-signer" "5.6.2" + "@ethersproject/address" "5.6.1" + "@ethersproject/base64" "5.6.1" + "@ethersproject/basex" "5.6.1" + "@ethersproject/bignumber" "5.6.2" + "@ethersproject/bytes" "5.6.1" + "@ethersproject/constants" "5.6.1" + "@ethersproject/contracts" "5.6.2" + "@ethersproject/hash" "5.6.1" + "@ethersproject/hdnode" "5.6.2" + "@ethersproject/json-wallets" "5.6.1" + "@ethersproject/keccak256" "5.6.1" + "@ethersproject/logger" "5.6.0" + "@ethersproject/networks" "5.6.4" + "@ethersproject/pbkdf2" "5.6.1" + "@ethersproject/properties" "5.6.0" + "@ethersproject/providers" "5.6.8" + "@ethersproject/random" "5.6.1" + "@ethersproject/rlp" "5.6.1" + "@ethersproject/sha2" "5.6.1" + "@ethersproject/signing-key" "5.6.2" + "@ethersproject/solidity" "5.6.1" + "@ethersproject/strings" "5.6.1" + "@ethersproject/transactions" "5.6.2" + "@ethersproject/units" "5.6.1" + "@ethersproject/wallet" "5.6.2" + "@ethersproject/web" "5.6.1" + "@ethersproject/wordlists" "5.6.1" ethjs-unit@0.1.6: version "0.1.6" @@ -5154,7 +3530,7 @@ ethjs-unit@0.1.6: bn.js "4.11.6" number-to-bn "1.7.0" -ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: +ethjs-util@0.1.6, ethjs-util@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== @@ -5177,12 +3553,7 @@ eventemitter3@^4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: +evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== @@ -5205,43 +3576,6 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -express@^4.14.0, express@^4.17.1: - version "4.18.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.0" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.10.3" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - ext@^1.1.2: version "1.6.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" @@ -5249,11 +3583,6 @@ ext@^1.1.2: dependencies: type "^2.5.0" -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -5263,35 +3592,6 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fake-merkle-patricia-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3" - integrity sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA== - dependencies: - checkpoint-store "^1.1.0" - -faker@5.5.3: - version "5.5.3" - resolved "https://registry.yarnpkg.com/faker/-/faker-5.5.3.tgz#c57974ee484431b25205c2c8dc09fda861e51e0e" - integrity sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g== - -fast-check@^2.12.1: - version "2.25.0" - resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-2.25.0.tgz#5146601851bf3be0953bd17eb2b7d547936c6561" - integrity sha512-wRUT2KD2lAmT75WNIJIHECawoUUMHM0I5jrlLXGtGeqmPL8jl/EldUDjY1VCp6fDY8yflyfUeIOsOBrIbIiArg== - dependencies: - pure-rand "^5.0.1" - 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" @@ -5324,7 +3624,7 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +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== @@ -5334,11 +3634,6 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-safe-stringify@^2.0.6: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -5346,20 +3641,6 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fetch-cookie@0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-0.11.0.tgz#e046d2abadd0ded5804ce7e2cae06d4331c15407" - integrity sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA== - dependencies: - tough-cookie "^2.3.3 || ^3.0.1 || ^4.0.0" - -fetch-ponyfill@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" - integrity sha512-knK9sGskIg2T7OnYLdZ2hZXn0CtDrAIBxYQLpmEf0BqfdWnwmM1weccUl5+4EdA44tzNSFAuxITPbXtPehUB3g== - dependencies: - node-fetch "~1.7.1" - figures@3.2.0, figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -5386,19 +3667,6 @@ filter-obj@^1.1.0: resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - find-replace@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" @@ -5421,13 +3689,6 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.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" @@ -5454,7 +3715,7 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== -follow-redirects@^1.12.1, follow-redirects@^1.14.4: +follow-redirects@^1.12.1: version "1.15.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== @@ -5466,16 +3727,6 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -foreach@^2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.6.tgz#87bcc8a1a0e74000ff2bf9802110708cfb02eb6e" - integrity sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg== - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -5485,20 +3736,6 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - fp-ts@1.19.3: version "1.19.3" resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" @@ -5509,11 +3746,6 @@ fp-ts@^1.0.0: resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -5539,15 +3771,6 @@ fs-extra@^10.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -5567,13 +3790,6 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -5616,20 +3832,6 @@ functions-have-names@^1.2.2: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -ganache@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.2.0.tgz#2da7b0c609c5b0aff36d4e5216568a34fa1724f4" - integrity sha512-KsKysVeVN6CALALOkIPSIxNZbl5s2/DE6Z0lFpj05gH1XsvYMit3djP4LxpxdjUfSSyb9gIPEOzqMw7v56ihJg== - dependencies: - "@trufflesuite/bigint-buffer" "1.1.9" - emittery "0.10.0" - keccak "3.0.1" - leveldown "6.1.0" - secp256k1 "4.0.2" - optionalDependencies: - bufferutil "4.0.5" - utf-8-validate "5.0.7" - gauge@^4.0.3: version "4.0.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" @@ -5644,20 +3846,6 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -5692,25 +3880,6 @@ get-port@^5.1.1: resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== - -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -5724,13 +3893,6 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - git-raw-commits@^2.0.8: version "2.0.11" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" @@ -5818,7 +3980,7 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5841,19 +4003,6 @@ glob@^8.0.1: minimatch "^5.0.1" once "^1.3.0" -global@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^13.15.0: version "13.15.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" @@ -5873,60 +4022,11 @@ globby@^11.0.2, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -got@9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -got@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" - integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== - dependencies: - decompress-response "^3.2.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-plain-obj "^1.1.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - p-cancelable "^0.3.0" - p-timeout "^1.1.1" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - url-parse-lax "^1.0.0" - url-to-options "^1.0.1" - graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -graphql-tag@^2.11.0: - version "2.12.6" - resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" - integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== - dependencies: - tslib "^2.1.0" - -graphql@^15.3.0: - version "15.8.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" - integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== - growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" @@ -5944,19 +4044,6 @@ handlebars@^4.7.7: optionalDependencies: uglify-js "^3.1.4" -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - hard-rejection@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" @@ -6038,23 +4125,11 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" -has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== - has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== - dependencies: - has-symbol-support-x "^1.4.1" - has-tostringtag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" @@ -6062,7 +4137,7 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-unicode@^2.0.0, has-unicode@^2.0.1: +has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== @@ -6083,14 +4158,6 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -hash.js@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -6104,14 +4171,6 @@ he@1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -header-case@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d" - integrity sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ== - dependencies: - no-case "^2.2.0" - upper-case "^1.1.3" - hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -6140,7 +4199,7 @@ hosted-git-info@^5.0.0: dependencies: lru-cache "^7.5.1" -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: +http-cache-semantics@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== @@ -6179,15 +4238,6 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -6213,7 +4263,7 @@ husky@^7.0.4: resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -6227,19 +4277,12 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -idna-uts46-hx@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" - integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== - dependencies: - punycode "2.1.0" - -ieee754@^1.1.13, ieee754@^1.2.1: +ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore-walk@^3.0.1, ignore-walk@^3.0.3: +ignore-walk@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== @@ -6258,12 +4301,7 @@ ignore@^5.0.4, ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== -immediate@3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== - -immediate@3.3.0, immediate@^3.2.2, immediate@^3.2.3: +immediate@^3.2.3: version "3.3.0" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== @@ -6322,12 +4360,7 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: +ini@^1.3.2, ini@^1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -6373,11 +4406,6 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - io-ts@1.10.4: version "1.10.4" resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" @@ -6390,11 +4418,6 @@ ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - is-arguments@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" @@ -6430,11 +4453,6 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" @@ -6471,18 +4489,6 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c" - integrity sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -6493,11 +4499,6 @@ is-fullwidth-code-point@^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-function@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" - integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== - is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" @@ -6522,13 +4523,6 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-lower-case@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" - integrity sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA== - dependencies: - lower-case "^1.1.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" @@ -6551,11 +4545,6 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" - integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== - is-plain-obj@^1.0.0, 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" @@ -6586,11 +4575,6 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - 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" @@ -6605,11 +4589,6 @@ is-ssh@^1.3.0: dependencies: protocols "^2.0.1" -is-stream@^1.0.0, is-stream@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -6647,7 +4626,7 @@ is-typed-array@^1.1.3, is-typed-array@^1.1.9: for-each "^0.3.3" has-tostringtag "^1.0.0" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== @@ -6657,13 +4636,6 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-upper-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" - integrity sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw== - dependencies: - upper-case "^1.1.0" - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -6678,11 +4650,6 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -6698,35 +4665,12 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" - -js-sha3@0.5.7, js-sha3@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== - js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.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== @@ -6738,21 +4682,6 @@ js-yaml@4.1.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -6763,64 +4692,22 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^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-pointer@^0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/json-pointer/-/json-pointer-0.6.2.tgz#f97bd7550be5e9ea901f8c9264c9d436a22a93cd" - integrity sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw== - dependencies: - foreach "^2.0.4" - -json-rpc-engine@^5.1.3: - version "5.4.0" - resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz#75758609d849e1dba1e09021ae473f3ab63161e5" - integrity sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g== - dependencies: - eth-rpc-errors "^3.0.0" - safe-event-emitter "^1.0.1" - -json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" - integrity sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA== - 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-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema-typed@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" - integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - 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== -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg== - dependencies: - jsonify "~0.0.0" - json-stringify-nice@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== @@ -6860,26 +4747,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA== - jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - just-diff-apply@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.3.1.tgz#30f40809ffed55ad76dccf73fa9b85a76964c867" @@ -6890,14 +4762,6 @@ just-diff@^5.0.1: resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.0.3.tgz#4c9c514dec5526b25ab977590e3c39a0cf271554" integrity sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg== -keccak@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" - integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - keccak@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" @@ -6907,13 +4771,6 @@ keccak@^3.0.0: node-gyp-build "^4.2.0" readable-stream "^3.6.0" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -6950,37 +4807,18 @@ lerna@^5.1.6: import-local "^3.0.2" npmlog "^6.0.2" -level-codec@9.0.2, level-codec@^9.0.0: +level-codec@^9.0.0: version "9.0.2" resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== dependencies: buffer "^5.6.0" -level-codec@~7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" - integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== - -level-concat-iterator@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" - integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== - dependencies: - catering "^2.1.0" - level-concat-iterator@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== -level-errors@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" - integrity sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w== - dependencies: - errno "~0.1.1" - level-errors@^2.0.0, level-errors@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" @@ -6988,23 +4826,6 @@ level-errors@^2.0.0, level-errors@~2.0.0: dependencies: errno "~0.1.1" -level-errors@~1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859" - integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" - integrity sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw== - dependencies: - inherits "^2.0.1" - level-errors "^1.0.3" - readable-stream "^1.0.33" - xtend "^4.0.0" - level-iterator-stream@~4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" @@ -7014,16 +4835,6 @@ level-iterator-stream@~4.0.0: readable-stream "^3.4.0" xtend "^4.0.2" -level-js@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.2.tgz#5e280b8f93abd9ef3a305b13faf0b5397c969b55" - integrity sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg== - dependencies: - abstract-leveldown "~6.2.3" - buffer "^5.5.0" - inherits "^2.0.3" - ltgt "^2.1.2" - level-mem@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" @@ -7032,7 +4843,7 @@ level-mem@^5.0.1: level-packager "^5.0.3" memdown "^5.0.0" -level-packager@^5.0.3, level-packager@^5.1.0: +level-packager@^5.0.3: version "5.1.1" resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== @@ -7040,11 +4851,6 @@ level-packager@^5.0.3, level-packager@^5.1.0: encoding-down "^6.3.0" levelup "^4.3.2" -level-supports@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" - integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== - level-supports@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" @@ -7052,21 +4858,6 @@ level-supports@~1.0.0: dependencies: xtend "^4.0.2" -level-write-stream@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/level-write-stream/-/level-write-stream-1.0.0.tgz#3f7fbb679a55137c0feb303dee766e12ee13c1dc" - integrity sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw== - dependencies: - end-stream "~0.1.0" - -level-ws@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" - integrity sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw== - dependencies: - readable-stream "~1.0.15" - xtend "~2.1.1" - level-ws@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" @@ -7076,34 +4867,7 @@ level-ws@^2.0.0: readable-stream "^3.1.0" xtend "^4.0.1" -level@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/level/-/level-6.0.1.tgz#dc34c5edb81846a6de5079eac15706334b0d7cd6" - integrity sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw== - dependencies: - level-js "^5.0.0" - level-packager "^5.1.0" - leveldown "^5.4.0" - -leveldown@5.6.0, leveldown@^5.4.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98" - integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ== - dependencies: - abstract-leveldown "~6.2.1" - napi-macros "~2.0.0" - node-gyp-build "~4.1.0" - -leveldown@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" - integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== - dependencies: - abstract-leveldown "^7.2.0" - napi-macros "~2.0.0" - node-gyp-build "^4.3.0" - -levelup@4.4.0, levelup@^4.3.2: +levelup@^4.3.2: version "4.4.0" resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== @@ -7114,19 +4878,6 @@ levelup@4.4.0, levelup@^4.3.2: level-supports "~1.0.0" xtend "~4.0.0" -levelup@^1.2.1: - version "1.3.9" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab" - integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ== - dependencies: - deferred-leveldown "~1.2.1" - level-codec "~7.0.0" - level-errors "~1.0.3" - level-iterator-stream "~1.3.0" - prr "~1.0.1" - semver "~5.4.1" - xtend "~4.0.0" - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -7228,14 +4979,6 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.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" @@ -7250,26 +4993,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash-es@^4.2.1: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.flatmap@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz#ef8cbf408f6e48268663345305c6acc0b778702e" - integrity sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg== - lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" @@ -7280,12 +5008,7 @@ lodash.merge@^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.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== - -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.2.1, lodash@^4.7.0: +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7308,23 +5031,6 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -loglevel@^1.6.8: - version "1.8.0" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114" - integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - -loose-envify@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - loupe@^2.3.1: version "2.3.4" resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" @@ -7332,28 +5038,6 @@ loupe@^2.3.1: dependencies: get-func-name "^2.0.0" -lower-case-first@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" - integrity sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA== - dependencies: - lower-case "^1.1.2" - -lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== - -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -7368,7 +5052,7 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.10.1, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: +lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: version "7.12.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.12.0.tgz#be2649a992c8a9116efda5c487538dcf715f3476" integrity sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw== @@ -7378,7 +5062,7 @@ lru_map@^0.3.3: resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== -ltgt@2.2.1, ltgt@^2.1.2, ltgt@~2.2.0: +ltgt@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== @@ -7492,23 +5176,6 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memdown@1.4.1, memdown@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" - integrity sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w== - dependencies: - abstract-leveldown "~2.7.1" - functional-red-black-tree "^1.0.1" - immediate "^3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.1.1" - memdown@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" @@ -7543,11 +5210,6 @@ meow@^8.0.0: type-fest "^0.18.0" yargs-parser "^20.2.3" -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -7558,20 +5220,6 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" - integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== - dependencies: - async "^1.4.2" - ethereumjs-util "^5.0.0" - level-ws "0.0.0" - levelup "^1.2.1" - memdown "^1.0.0" - readable-stream "^2.0.0" - rlp "^2.0.0" - semaphore ">=1.0.1" - merkle-patricia-tree@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" @@ -7584,11 +5232,6 @@ merkle-patricia-tree@^4.2.4: readable-stream "^3.6.0" semaphore-async-await "^1.5.1" -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -7610,40 +5253,18 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-fn@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" - integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -7759,14 +5380,6 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: version "3.3.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" @@ -7774,13 +5387,6 @@ minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3. dependencies: yallist "^4.0.0" -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -7798,25 +5404,18 @@ mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== - dependencies: - mkdirp "*" - -mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkdirp@^0.5.1, mkdirp@^0.5.5: +mkdirp@^0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mnemonist@^0.38.0: version "0.38.5" resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" @@ -7824,7 +5423,7 @@ mnemonist@^0.38.0: dependencies: obliterator "^2.0.0" -mocha@9.2.2, mocha@^9.2.0, mocha@^9.2.2: +mocha@^9.2.0, mocha@^9.2.2: version "9.2.2" resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== @@ -7854,11 +5453,6 @@ mocha@9.2.2, mocha@^9.2.0, mocha@^9.2.2: yargs-parser "20.2.4" yargs-unparser "2.0.0" -mock-fs@^4.1.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" - integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== - modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -7874,51 +5468,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multibase@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" - integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multibase@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" - integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multicodec@^0.5.5: - version "0.5.7" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" - integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== - dependencies: - varint "^5.0.0" - -multicodec@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" - integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== - dependencies: - buffer "^5.6.0" - varint "^5.0.0" - -multihashes@^0.4.15, multihashes@~0.4.15: - version "0.4.21" - resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" - integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== - dependencies: - buffer "^5.5.0" - multibase "^0.7.0" - varint "^5.0.0" - multimatch@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" @@ -7935,41 +5489,17 @@ mute-stream@0.0.8, mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.12.1: - version "2.16.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" - integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== - -nano-json-stream-parser@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" - integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== - nanoid@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - 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== -needle@^2.2.1: - version "2.9.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" - integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.3, negotiator@^0.6.2, negotiator@^0.6.3: +negotiator@^0.6.2, negotiator@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -7984,13 +5514,6 @@ next-tick@^1.1.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== -no-case@^2.2.0, no-case@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" @@ -8001,36 +5524,18 @@ node-addon-api@^3.2.1: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== -node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7: +node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" -node-fetch@~1.7.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -node-gyp-build@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" - integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== - node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== -node-gyp-build@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" - integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ== - node-gyp@^8.4.1: version "8.4.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" @@ -8063,52 +5568,6 @@ node-gyp@^9.0.0: tar "^6.1.2" which "^2.0.2" -node-interval-tree@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/node-interval-tree/-/node-interval-tree-1.3.3.tgz#15ffb904cde08270214acace8dc7653e89ae32b7" - integrity sha512-K9vk96HdTK5fEipJwxSvIIqwTqr4e3HRJeJrNxBSeVMNSC/JWARRaX7etOLOuTmrRMeOI/K5TCJu3aWIwZiNTw== - dependencies: - shallowequal "^1.0.2" - -node-pre-gyp@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" - integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-releases@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" - integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== - -nofilter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" - integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== - -noop-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/noop-fn/-/noop-fn-1.0.0.tgz#5f33d47f13d2150df93e0cb036699e982f78ffbf" - integrity sha512-pQ8vODlgXt2e7A3mIbFDlizkr46r75V+BJxVAyat8Jl7YmI513gG5cfyRL0FedKraoZ+VAouI1h4/IWpus5pcQ== - -nopt@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" - nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" @@ -8151,17 +5610,12 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - normalize-url@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-bundled@^1.0.1, npm-bundled@^1.1.1, npm-bundled@^1.1.2: +npm-bundled@^1.1.1, npm-bundled@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== @@ -8199,15 +5653,6 @@ npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: semver "^7.3.5" validate-npm-package-name "^4.0.0" -npm-packlist@^1.1.6: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - npm-packlist@^2.1.4: version "2.2.2" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.2.2.tgz#076b97293fa620f632833186a7a8f65aaa6148c8" @@ -8284,16 +5729,6 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - npmlog@^6.0.0, npmlog@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" @@ -8304,11 +5739,6 @@ npmlog@^6.0.0, npmlog@^6.0.2: gauge "^4.0.3" set-blocking "^2.0.0" -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - number-to-bn@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" @@ -8353,16 +5783,6 @@ nx@14.4.0, nx@^14.3.6: yargs "^17.4.0" yargs-parser "21.0.1" -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - object-inspect@^1.12.0, object-inspect@^1.12.2, object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" @@ -8373,11 +5793,6 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== - object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" @@ -8400,14 +5815,7 @@ oboe@2.1.5: dependencies: http-https "^1.0.0" -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -8430,11 +5838,6 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -openzeppelin-solidity@^2.0.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/openzeppelin-solidity/-/openzeppelin-solidity-2.5.1.tgz#1cdcce30c4c6a7b6625dab62ccd0440a813ab597" - integrity sha512-oCGtQPLOou4su76IMr4XXJavy9a8OZmAXeUZ8diOdFznlL/mlkIlYr7wajqCzH4S47nlKPS7m0+a2nilCTpVPQ== - optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -8447,39 +5850,11 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -original-require@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/original-require/-/original-require-1.0.1.tgz#0f130471584cd33511c5ec38c8d59213f9ac5e20" - integrity sha512-5vdKMbE58WaE61uVD+PKyh8xdM398UnjPBLotW2sjG5MzHARwta/+NtMBCBA0t2WQblGYBvq5vsiZpWokwno+A== - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-cancelable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" - integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -8492,7 +5867,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.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== @@ -8513,13 +5888,6 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -8564,13 +5932,6 @@ p-reduce@^2.0.0, p-reduce@^2.1.0: resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== -p-timeout@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" - integrity sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA== - dependencies: - p-finally "^1.0.0" - p-timeout@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" @@ -8622,13 +5983,6 @@ pacote@^13.0.3, pacote@^13.0.5, pacote@^13.4.1: ssri "^9.0.0" tar "^6.1.11" -param-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w== - dependencies: - no-case "^2.2.0" - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -8636,17 +5990,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - parse-conflict-json@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" @@ -8656,11 +5999,6 @@ parse-conflict-json@^2.0.1: just-diff "^5.0.1" just-diff-apply "^5.2.0" -parse-headers@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" - integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -8699,26 +6037,6 @@ parse-url@^6.0.0: parse-path "^4.0.4" protocols "^1.4.0" -parseurl@^1.3.3, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^2.0.0, pascal-case@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e" - integrity sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ== - dependencies: - camel-case "^3.0.0" - upper-case-first "^1.1.0" - -path-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5" - integrity sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q== - dependencies: - no-case "^2.2.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -8744,11 +6062,6 @@ path-parse@^1.0.6, path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -8766,7 +6079,7 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -pbkdf2@^3.0.17, pbkdf2@^3.0.3: +pbkdf2@^3.0.17: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -8777,16 +6090,6 @@ pbkdf2@^3.0.17, pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -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.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -8824,311 +6127,11 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -pluralize@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" - integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== - -pouchdb-abstract-mapreduce@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.0.tgz#cc178cb5d07f73b7c3f0f47a7f963defd4872b1c" - integrity sha512-+2fVt3SDh7D776lIGbYZOsKX5js1aUyUw7iJaTGitxSdQ2ObWSTrr3SUrj5Qo1CkgPXwRM3Tdoq/53JYAa2qCA== - dependencies: - pouchdb-binary-utils "7.3.0" - pouchdb-collate "7.3.0" - pouchdb-collections "7.3.0" - pouchdb-errors "7.3.0" - pouchdb-fetch "7.3.0" - pouchdb-mapreduce-utils "7.3.0" - pouchdb-md5 "7.3.0" - pouchdb-utils "7.3.0" - -pouchdb-adapter-leveldb-core@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-adapter-leveldb-core/-/pouchdb-adapter-leveldb-core-7.3.0.tgz#91fa1fbc35e744252ae73f9e88911883c1841c9a" - integrity sha512-OyUsEae1JlqR2jSGMohP03gj6VANh9fDR/3nPIa1vYyoQWlwQzOS7knKqDaJm7Nui3JC5q/lWos7/FGZBFuF5Q== - dependencies: - argsarray "0.0.1" - buffer-from "1.1.2" - double-ended-queue "2.1.0-0" - levelup "4.4.0" - pouchdb-adapter-utils "7.3.0" - pouchdb-binary-utils "7.3.0" - pouchdb-collections "7.3.0" - pouchdb-errors "7.3.0" - pouchdb-json "7.3.0" - pouchdb-md5 "7.3.0" - pouchdb-merge "7.3.0" - pouchdb-utils "7.3.0" - sublevel-pouchdb "7.3.0" - through2 "3.0.2" - -pouchdb-adapter-memory@^7.1.1: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-adapter-memory/-/pouchdb-adapter-memory-7.3.0.tgz#ddd5b9ab9d30209d066374648abc761c68444db3" - integrity sha512-nUdYi5KpbUa0uv0L3IJorpiUnIOBPxX9qplCX9i7JE8OtLPeLyKuX3WC+3M1//8Lmmxg3b1wXSNIod6FJy4wAQ== - dependencies: - memdown "1.4.1" - pouchdb-adapter-leveldb-core "7.3.0" - pouchdb-utils "7.3.0" - -pouchdb-adapter-node-websql@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pouchdb-adapter-node-websql/-/pouchdb-adapter-node-websql-7.0.0.tgz#64ad88dd45b23578e454bf3032a3a79f9d1e4008" - integrity sha512-fNaOMO8bvMrRTSfmH4RSLSpgnKahRcCA7Z0jg732PwRbGvvMdGbreZwvKPPD1fg2tm2ZwwiXWK2G3+oXyoqZYw== - dependencies: - pouchdb-adapter-websql-core "7.0.0" - pouchdb-utils "7.0.0" - websql "1.0.0" - -pouchdb-adapter-utils@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.0.0.tgz#1ac8d34481911e0e9a9bf51024610a2e7351dc80" - integrity sha512-UWKPC6jkz6mHUzZefrU7P5X8ZGvBC8LSNZ7BIp0hWvJE6c20cnpDwedTVDpZORcCbVJpDmFOHBYnOqEIblPtbA== - dependencies: - pouchdb-binary-utils "7.0.0" - pouchdb-collections "7.0.0" - pouchdb-errors "7.0.0" - pouchdb-md5 "7.0.0" - pouchdb-merge "7.0.0" - pouchdb-utils "7.0.0" - -pouchdb-adapter-utils@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.3.0.tgz#1747e4ea0b519a9d817c6eda0e2f0ebc3dc18c41" - integrity sha512-mU1+smcagWSpInVx/VQk7VVjjnJlyagKtusUS3OdCMFZY35L6RbXC8eIhoNVDbkBfEv3cIwqQ3t7fdvkaa1odQ== - dependencies: - pouchdb-binary-utils "7.3.0" - pouchdb-collections "7.3.0" - pouchdb-errors "7.3.0" - pouchdb-md5 "7.3.0" - pouchdb-merge "7.3.0" - pouchdb-utils "7.3.0" - -pouchdb-adapter-websql-core@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pouchdb-adapter-websql-core/-/pouchdb-adapter-websql-core-7.0.0.tgz#27b3e404159538e515b2567baa7869f90caac16c" - integrity sha512-NyMaH0bl20SdJdOCzd+fwXo8JZ15a48/MAwMcIbXzsRHE4DjFNlRcWAcjUP6uN4Ezc+Gx+r2tkBBMf71mIz1Aw== - dependencies: - pouchdb-adapter-utils "7.0.0" - pouchdb-binary-utils "7.0.0" - pouchdb-collections "7.0.0" - pouchdb-errors "7.0.0" - pouchdb-json "7.0.0" - pouchdb-merge "7.0.0" - pouchdb-utils "7.0.0" - -pouchdb-binary-utils@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pouchdb-binary-utils/-/pouchdb-binary-utils-7.0.0.tgz#cb71a288b09572a231f6bab1b4aed201c4d219a7" - integrity sha512-yUktdOPIPvOVouCjJN3uop+bCcpdPwePrLm9eUAZNgEYnUFu0njdx7Q0WRsZ7UJ6l75HinL5ZHk4bnvEt86FLw== - dependencies: - buffer-from "1.1.0" - -pouchdb-binary-utils@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.0.tgz#ecc235d28e7f226c168affcf53959675f78d5aaf" - integrity sha512-xvBH/XGHGcou2vkEzszJxkCc7YElfRUrkLUg51Jbdmh1mogLDUO0bU3Tj6TOIIJfRkQrU/HV+dDkMAhsil0amQ== - dependencies: - buffer-from "1.1.2" - -pouchdb-collate@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-collate/-/pouchdb-collate-7.3.0.tgz#9276de7459a21a6aded71e3090d9b5d5488be19f" - integrity sha512-ys7rXKtEr6cfghgUjknwFJiOkITebV6JmeTybJKCzMV0r2luXu0OoPQsKVpE/wbM/3F5LxfpbFKGFpPcfGMvTA== - -pouchdb-collections@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-7.0.0.tgz#fd1f632337dc6301b0ff8649732ca79204e41780" - integrity sha512-DaoUr/vU24Q3gM6ghj0va9j/oBanPwkbhkvnqSyC3Dm5dgf5pculNxueLF9PKMo3ycApoWzHMh6N2N8KJbDU2Q== - -pouchdb-collections@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-7.3.0.tgz#3197dfbee8d69c3760229705fc5a73d0c8a896f1" - integrity sha512-Xr54m2+fErShXn+qAT4xwqJ+8NwddNPeTMJT4z4k1sZsrwfHmZsWbsKAyGPMF04eQaaU+7DDRMciu2VzaBUXyg== - -pouchdb-debug@^7.1.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/pouchdb-debug/-/pouchdb-debug-7.2.1.tgz#f5f869f6113c12ccb97cddf5b0a32b6e0e67e961" - integrity sha512-eP3ht/AKavLF2RjTzBM6S9gaI2/apcW6xvaKRQhEdOfiANqerFuksFqHCal3aikVQuDO+cB/cw+a4RyJn/glBw== - dependencies: - debug "3.1.0" - -pouchdb-errors@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pouchdb-errors/-/pouchdb-errors-7.0.0.tgz#4e2a5a8b82af20cbe5f9970ca90b7ec74563caa0" - integrity sha512-dTusY8nnTw4HIztCrNl7AoGgwvS1bVf/3/97hDaGc4ytn72V9/4dK8kTqlimi3UpaurohYRnqac0SGXYP8vgXA== - dependencies: - inherits "2.0.3" - -pouchdb-errors@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-errors/-/pouchdb-errors-7.3.0.tgz#23bc328108778be0bfe22d69c0df67eab94aeca5" - integrity sha512-dTBbIC1BbCy6J9W/Csg5xROgb3wJN3HpbgAJHHSEtAkb8oA45KZmU3ZwEpNhf0AfPuQm4XgW1936PvlDlGgJiw== - dependencies: - inherits "2.0.4" - -pouchdb-fetch@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-fetch/-/pouchdb-fetch-7.3.0.tgz#92b5d3b067d79ecbb9a61cbd52dce36e94dbbf28" - integrity sha512-8/lcg8iMDG+GVs1dHNXA4ktJSEpH71dHU3xesMJ25tNQOqfAaaWrkfz9j71ZYDDkveLYE6UjUzl/sDacu2hSjw== - dependencies: - abort-controller "3.0.0" - fetch-cookie "0.11.0" - node-fetch "2.6.7" - -pouchdb-find@^7.0.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-find/-/pouchdb-find-7.3.0.tgz#27291c3d069f4f1a1a4913f63b1a148dac1b345b" - integrity sha512-EwhnfyxCAkKf8PG4tfndTTygEmtuz+o1LiZkxfPrflfXA3m1jo1ithib0hwBYtEwEYWuZxH6B8pRZutbLoQCGA== - dependencies: - pouchdb-abstract-mapreduce "7.3.0" - pouchdb-collate "7.3.0" - pouchdb-errors "7.3.0" - pouchdb-fetch "7.3.0" - pouchdb-md5 "7.3.0" - pouchdb-selector-core "7.3.0" - pouchdb-utils "7.3.0" - -pouchdb-json@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pouchdb-json/-/pouchdb-json-7.0.0.tgz#d9860f66f27a359ac6e4b24da4f89b6909f37530" - integrity sha512-w0bNRu/7VmmCrFWMYAm62n30wvJJUT2SokyzeTyj3hRohj4GFwTRg1mSZ+iAmxgRKOFE8nzZstLG/WAB4Ymjew== - dependencies: - vuvuzela "1.0.3" - -pouchdb-json@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-json/-/pouchdb-json-7.3.0.tgz#94c2d876202c6879cb525db05e7633b926346e5d" - integrity sha512-D4wyi20ltyiFpuziQeMk3CbXs/Q58VoGTYTJQY8MWBw37OidtHGQAt1Kh5yJ435wJqDzJZyxMA5RxGZxEOBDVg== - dependencies: - vuvuzela "1.0.3" - -pouchdb-mapreduce-utils@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.3.0.tgz#21d42ea9a376b0fa2e61c8c1ac53f886ffdf3409" - integrity sha512-KDVSd+H2r+XWTrQfKWV71SknDDYRjYXoeWs0ZQl3xITHCcTl+fIgqyagg/XN+Zy/U9LeLPGMe2JdgPx9H8lJgw== - dependencies: - argsarray "0.0.1" - inherits "2.0.4" - pouchdb-collections "7.3.0" - pouchdb-utils "7.3.0" - -pouchdb-md5@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pouchdb-md5/-/pouchdb-md5-7.0.0.tgz#935dc6bb507a5f3978fb653ca5790331bae67c96" - integrity sha512-yaSJKhLA3QlgloKUQeb2hLdT3KmUmPfoYdryfwHZuPTpXIRKTnMQTR9qCIRUszc0ruBpDe53DRslCgNUhAyTNQ== - dependencies: - pouchdb-binary-utils "7.0.0" - spark-md5 "3.0.0" - -pouchdb-md5@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-md5/-/pouchdb-md5-7.3.0.tgz#3a094e45ccce87271530ad3f37d7e82c53562bb0" - integrity sha512-wL04QgoKyd/L/TV5gxgcvlEyCJiZoXCOEFJklTzkdza/kBQNJGPH7i0ZhKa7Sb+AvZYoWZHddf1Zgv7rBScHkA== - dependencies: - pouchdb-binary-utils "7.3.0" - spark-md5 "3.0.2" - -pouchdb-merge@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pouchdb-merge/-/pouchdb-merge-7.0.0.tgz#9f476ce7e32aae56904ad770ae8a1dfe14b57547" - integrity sha512-tci5u6NpznQhGcPv4ho1h0miky9rs+ds/T9zQ9meQeDZbUojXNaX1Jxsb0uYEQQ+HMqdcQs3Akdl0/u0mgwPGg== - -pouchdb-merge@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-merge/-/pouchdb-merge-7.3.0.tgz#dfde5b54aa6dd203ac62d768fe33e7bdbd56e38e" - integrity sha512-E7LmchMzwYFm6V8OBxejzARLisanpksOju2LEfuiYnotGfNDeW7MByP0qBH0/zF8BfUyyjA1cl7ByaEpsapkeQ== - -pouchdb-selector-core@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-selector-core/-/pouchdb-selector-core-7.3.0.tgz#1860afeec069ba4d5b79583b4b520dd2b643e3a3" - integrity sha512-sK/cCrIGeL9ImcMhKGcwa54+bzX7Wv4hhVV+oUW3T1Nasaoxh+Muem1GuA+x1+SbTCE8y37rUg8i6DIOhX51ew== - dependencies: - pouchdb-collate "7.3.0" - pouchdb-utils "7.3.0" - -pouchdb-utils@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pouchdb-utils/-/pouchdb-utils-7.0.0.tgz#48bfced6665b8f5a2b2d2317e2aa57635ed1e88e" - integrity sha512-1bnoX1KdZYHv9wicDIFdO0PLiVIMzNDUBUZ/yOJZ+6LW6niQCB8aCv09ZztmKfSQcU5nnN3fe656tScBgP6dOQ== - dependencies: - argsarray "0.0.1" - clone-buffer "1.0.0" - immediate "3.0.6" - inherits "2.0.3" - pouchdb-collections "7.0.0" - pouchdb-errors "7.0.0" - pouchdb-md5 "7.0.0" - uuid "3.2.1" - -pouchdb-utils@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb-utils/-/pouchdb-utils-7.3.0.tgz#782df5ab3309edd5dc8c0f8ae4663bf0e67962e2" - integrity sha512-HH+5IXXWn/ZgVCSnrlydBMYn6MabT7RS7SNoo9w8qVH9efpZSp3eLchw6yMQNLw8LQefWmbbskiHV9VgJmSVWQ== - dependencies: - argsarray "0.0.1" - clone-buffer "1.0.0" - immediate "3.3.0" - inherits "2.0.4" - pouchdb-collections "7.3.0" - pouchdb-errors "7.3.0" - pouchdb-md5 "7.3.0" - uuid "8.3.2" - -pouchdb@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-7.3.0.tgz#440fbef12dfd8f9002320802528665e883a3b7f8" - integrity sha512-OwsIQGXsfx3TrU1pLruj6PGSwFH+h5k4hGNxFkZ76Um7/ZI8F5TzUHFrpldVVIhfXYi2vP31q0q7ot1FSLFYOw== - dependencies: - abort-controller "3.0.0" - argsarray "0.0.1" - buffer-from "1.1.2" - clone-buffer "1.0.0" - double-ended-queue "2.1.0-0" - fetch-cookie "0.11.0" - immediate "3.3.0" - inherits "2.0.4" - level "6.0.1" - level-codec "9.0.2" - level-write-stream "1.0.0" - leveldown "5.6.0" - levelup "4.4.0" - ltgt "2.2.1" - node-fetch "2.6.7" - readable-stream "1.1.14" - spark-md5 "3.0.2" - through2 "3.0.2" - uuid "8.3.2" - vuvuzela "1.0.3" - -precond@0.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" - integrity sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ== - 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== -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - 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" @@ -9151,11 +6154,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - promise-all-reject-late@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" @@ -9179,14 +6177,6 @@ promise-retry@^2.0.1: err-code "^2.0.2" retry "^0.12.0" -promise-to-callback@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" - integrity sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA== - dependencies: - is-fn "^1.0.0" - set-immediate-shim "^1.0.1" - promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" @@ -9209,71 +6199,21 @@ protocols@^2.0.1: resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== -psl@^1.1.28, psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pure-rand@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-5.0.1.tgz#97a287b4b4960b2a3448c0932bf28f2405cac51d" - integrity sha512-ksWccjmXOHU2gJBnH0cK1lSYdvSZ0zLoCMSz/nTGh6hDvCSgcRxDyIcOBD6KNxFz3xhMPm/T267Tbe2JRymKEQ== - q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== -qs@6.10.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" - qs@^6.7.0, qs@^6.9.4: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" @@ -9281,20 +6221,6 @@ qs@^6.7.0, qs@^6.9.4: dependencies: side-channel "^1.0.4" -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - query-string@^6.13.8: version "6.14.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" @@ -9305,7 +6231,7 @@ query-string@^6.13.8: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" -queue-microtask@^1.2.2, queue-microtask@^1.2.3: +queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== @@ -9315,27 +6241,14 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: +randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1, raw-body@^2.4.1: +raw-body@^2.4.1: version "2.5.1" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== @@ -9345,16 +6258,6 @@ raw-body@2.5.1, raw-body@^2.4.1: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - read-cmd-shim@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" @@ -9446,17 +6349,7 @@ read@1, read@~1.0.1: dependencies: mute-stream "~0.0.4" -readable-stream@1.1.14, readable-stream@^1.0.33: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -9465,7 +6358,7 @@ readable-stream@1.1.14, readable-stream@^1.0.33: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.2.9, readable-stream@~2.3.6: +readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -9478,21 +6371,6 @@ readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.2.9, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@~0.0.2: - version "0.0.4" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-0.0.4.tgz#f32d76e3fb863344a548d79923007173665b3b8d" - integrity sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw== - -readable-stream@~1.0.15: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readdir-scoped-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" @@ -9510,13 +6388,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -9530,35 +6401,6 @@ reduce-flatten@^2.0.0: resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== -redux-saga@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.0.0.tgz#acb8b3ed9180fecbe75f342011d75af3ac11045b" - integrity sha512-GvJWs/SzMvEQgeaw6sRMXnS2FghlvEGsHiEtTLpJqc/FHF3I5EE/B+Hq5lyHZ8LSoT2r/X/46uWvkdCnK9WgHA== - dependencies: - "@redux-saga/core" "^1.0.0" - -redux@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" - integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A== - dependencies: - lodash "^4.2.1" - lodash-es "^4.2.1" - loose-envify "^1.1.0" - symbol-observable "^1.0.3" - -redux@^4.0.4: - version "4.2.0" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" - integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== - dependencies: - "@babel/runtime" "^7.9.2" - -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" @@ -9573,55 +6415,15 @@ regexpp@^3.2.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -request@^2.79.0, request@^2.85.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-from-string@^2.0.0, require-from-string@^2.0.2: +require-from-string@^2.0.0: version "2.0.2" - 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== - -reselect-tree@^1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/reselect-tree/-/reselect-tree-1.3.7.tgz#c3eca58765d9df96bae0017f6ff3504c304cdea0" - integrity sha512-kZN+C1cVJ6fFN2smSb0l4UvYZlRzttgnu183svH4NrU22cBY++ikgr2QT75Uuk4MYpv5gXSVijw4c5U6cx6GKg== - dependencies: - debug "^3.1.0" - json-pointer "^0.6.1" - reselect "^4.0.0" - -reselect@^4.0.0: - version "4.1.6" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.6.tgz#19ca2d3d0b35373a74dc1c98692cdaffb6602656" - integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ== + 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== resolve-cwd@^3.0.0: version "3.0.0" @@ -9647,7 +6449,7 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.8.1: +resolve@^1.10.0, resolve@^1.8.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -9656,13 +6458,6 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.8.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== - dependencies: - lowercase-keys "^1.0.0" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -9671,11 +6466,6 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -retry@0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -9691,7 +6481,7 @@ rfdc@^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, rimraf@^2.6.1: +rimraf@^2.2.8: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -9713,7 +6503,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4: +rlp@^2.2.3, rlp@^2.2.4: version "2.2.7" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== @@ -9751,7 +6541,7 @@ rxjs@^7.5.5: dependencies: tslib "^2.1.0" -safe-buffer@5.2.1, 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.1, safe-buffer@~5.2.0: +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.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -9761,42 +6551,16 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-event-emitter@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz#5b692ef22329ed8f69fdce607e50ca734f6f20af" - integrity sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg== - dependencies: - events "^3.0.0" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -scrypt-js@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" - integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== - -scrypt-js@^3.0.0, scrypt-js@^3.0.1: +scrypt-js@3.0.1, scrypt-js@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -secp256k1@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" - integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== - dependencies: - elliptic "^6.5.2" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - secp256k1@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" @@ -9811,21 +6575,11 @@ semaphore-async-await@^1.5.1: resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" integrity sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg== -semaphore@>=1.0.1, semaphore@^1.0.3: - version "1.1.0" - resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" - integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - semver@7.3.4: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" @@ -9833,7 +6587,7 @@ semver@7.3.4: dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -9845,38 +6599,6 @@ semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.3.4, semver@^7.3.5, semve dependencies: lru-cache "^6.0.0" -semver@~5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -sentence-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4" - integrity sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ== - dependencies: - no-case "^2.2.0" - upper-case-first "^1.1.2" - serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -9884,42 +6606,11 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -servify@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" - integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== - dependencies: - body-parser "^1.16.0" - cors "^2.8.1" - express "^4.14.0" - request "^2.79.0" - xhr "^2.3.3" - -set-blocking@^2.0.0, set-blocking@~2.0.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-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ== - -setimmediate@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" - integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== - setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -9930,7 +6621,7 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: +sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -9945,11 +6636,6 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shallowequal@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -9962,15 +6648,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@^0.8.3: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -9980,25 +6657,11 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^2.7.0: - version "2.8.2" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" - integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -10035,13 +6698,6 @@ smart-buffer@^4.2.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -snake-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" - integrity sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q== - dependencies: - no-case "^2.2.0" - socks-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" @@ -10077,20 +6733,6 @@ socks@^2.3.3, socks@^2.6.2: ip "^1.1.5" smart-buffer "^4.2.0" -solc@0.5.17: - version "0.5.17" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.5.17.tgz#8a76c50e98d49ca7610cca2fdc78ff3016540c67" - integrity sha512-qpX+PGaU0Q3c6lh2vDzMoIbhv6bIrecI4bYsx+xUs01xsGFnY6Nr0L8y/QMyutTnrHN6Lb/Yl672ZVRqxka96w== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - fs-extra "^0.30.0" - js-sha3 "0.8.0" - memorystream "^0.3.1" - require-from-string "^2.0.0" - semver "^5.5.0" - tmp "0.0.33" - solc@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" @@ -10133,16 +6775,6 @@ source-map@^0.6.0, source-map@^0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -spark-md5@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.0.tgz#3722227c54e2faf24b1dc6d933cc144e6f71bfef" - integrity sha512-BpPFB0Oh83mi+6DRcFwxPx96f3OL8Tkq3hdvaHuXaQUsy5F3saI3zIPNQ/UsTQgyAXIHnML1waeCe1WoCPXbpQ== - -spark-md5@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.2.tgz#7952c4a30784347abcee73268e473b9c0167e3fc" - integrity sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw== - spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -10188,29 +6820,6 @@ split@^1.0.0: dependencies: through "2" -sqlite3@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.2.0.tgz#49026d665e9fc4f922e56fb9711ba5b4c85c4901" - integrity sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg== - dependencies: - nan "^2.12.1" - node-pre-gyp "^0.11.0" - -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" @@ -10237,11 +6846,6 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== - strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -10257,15 +6861,6 @@ string-format@^2.0.0: resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -10309,11 +6904,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -10321,13 +6911,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -10376,11 +6959,6 @@ strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1. resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -10390,16 +6968,6 @@ strong-log-transformer@^2.1.0: minimist "^1.2.0" through "^2.3.4" -sublevel-pouchdb@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/sublevel-pouchdb/-/sublevel-pouchdb-7.3.0.tgz#d27138c34d98c3d5c8c3ee85c1662add3ad04525" - integrity sha512-zp7u4jmv2N/s+dXZkWTtL4BjREs3SZ1nGBNNJ8RWX4yqN59oHgKmti4CfVOqfsAW9RMasmTqQAEPxL9hX8+CIA== - dependencies: - inherits "2.0.4" - level-codec "9.0.2" - ltgt "2.2.1" - readable-stream "1.1.14" - supports-color@8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" @@ -10431,36 +6999,6 @@ supports-preserve-symlinks-flag@^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== -swap-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" - integrity sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ== - dependencies: - lower-case "^1.1.1" - upper-case "^1.1.1" - -swarm-js@^0.1.40: - version "0.1.40" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" - integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== - dependencies: - bluebird "^3.5.0" - buffer "^5.0.5" - eth-lib "^0.1.26" - fs-extra "^4.0.2" - got "^7.1.0" - mime-types "^2.1.16" - mkdirp-promise "^5.0.1" - mock-fs "^4.1.0" - setimmediate "^1.0.5" - tar "^4.0.2" - xhr-request "^1.0.1" - -symbol-observable@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - table-layout@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" @@ -10482,19 +7020,6 @@ tar-stream@~2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^4, tar@^4.0.2: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" @@ -10522,14 +7047,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -through2@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" - integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== - dependencies: - inherits "^2.0.4" - readable-stream "2 || 3" - through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -10550,29 +7067,6 @@ through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -timed-out@^4.0.0, timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== - -tiny-queue@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.1.tgz#25a67f2c6e253b2ca941977b5ef7442ef97a6046" - integrity sha512-EijGsv7kzd9I9g0ByCl6h42BWNGUZrlCSejfrb3AKeHC33SGbASu1VDf5O3rRiiUOhAC9CHdZxFPbZu0HmR70A== - -tiny-typed-emitter@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5" - integrity sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA== - -title-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" - integrity sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q== - dependencies: - no-case "^2.2.0" - upper-case "^1.0.3" - tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -10587,16 +7081,6 @@ tmp@~0.2.1: dependencies: rimraf "^3.0.0" -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -10609,23 +7093,6 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -"tough-cookie@^2.3.3 || ^3.0.1 || ^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.1.2" - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - tr46@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" @@ -10653,20 +7120,6 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== -truffle@^5.1.21: - version "5.5.20" - resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.5.20.tgz#8fe626d5056df5bd60443b23e026ea8a929bb886" - integrity sha512-Ixh6tmK5s/fC4KNuu1zlYrSTkJWesKemXimf/L8UugBuU2RTSgmo/JI00Jq1EbqCSMAtbze6G5ca2UU2vZnCkQ== - dependencies: - "@truffle/db-loader" "^0.1.22" - "@truffle/debugger" "^10.0.16" - app-module-path "^2.2.0" - ganache "7.2.0" - mocha "9.2.2" - original-require "^1.0.1" - optionalDependencies: - "@truffle/db" "^1.0.12" - ts-command-line-args@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz#b6188e42efc6cf7a8898e438a873fbb15505ddd6" @@ -10736,7 +7189,7 @@ tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@~2.4.0: +tslib@^2.1.0, tslib@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== @@ -10753,23 +7206,11 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl-util@^0.15.0, tweetnacl-util@^0.15.1: +tweetnacl-util@^0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" @@ -10822,14 +7263,6 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - type@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" @@ -10868,25 +7301,6 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript-compare@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425" - integrity sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA== - dependencies: - typescript-logic "^0.0.0" - -typescript-logic@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/typescript-logic/-/typescript-logic-0.0.0.tgz#66ebd82a2548f2b444a43667bec120b496890196" - integrity sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q== - -typescript-tuple@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/typescript-tuple/-/typescript-tuple-2.2.1.tgz#7d9813fb4b355f69ac55032e0363e8bb0f04dad2" - integrity sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q== - dependencies: - typescript-compare "^0.0.2" - typescript@^4.6.3: version "4.7.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" @@ -10907,11 +7321,6 @@ uglify-js@^3.1.4: resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.16.2.tgz#0481e1dbeed343ad1c2ddf3c6d42e89b7a6d4def" integrity sha512-AaQNokTNgExWrkEYA24BTNMSjyqEXPSfhqoS0AxmHkCJ4U+Dyy5AvbGV/sqxuxficEfGGoX3zWw9R7QpLFfEsg== -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -10946,7 +7355,7 @@ universal-user-agent@^6.0.0: resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== -universalify@^0.1.0, universalify@^0.1.2: +universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== @@ -10956,7 +7365,7 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -10966,26 +7375,6 @@ upath@^2.0.1: resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-browserslist-db@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz#dbfc5a789caa26b1db8990796c2c8ebbce304824" - integrity sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -upper-case-first@^1.1.0, upper-case-first@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" - integrity sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ== - dependencies: - upper-case "^1.1.1" - -upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -10993,37 +7382,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA== - dependencies: - prepend-http "^1.0.1" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - -url-set-query@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" - integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== - -url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A== - -utf-8-validate@5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" - integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== - dependencies: - node-gyp-build "^4.3.0" - utf-8-validate@^5.0.2: version "5.0.9" resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" @@ -11031,7 +7389,7 @@ utf-8-validate@^5.0.2: dependencies: node-gyp-build "^4.3.0" -utf8@3.0.0, utf8@^3.0.0: +utf8@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== @@ -11053,36 +7411,11 @@ util@^0.12.0: safe-buffer "^5.1.2" which-typed-array "^1.1.2" -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" - integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== - -uuid@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" - integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== - -uuid@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -uuid@8.3.2, uuid@^8.0.0, uuid@^8.3.2: +uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -11115,35 +7448,6 @@ validate-npm-package-name@^4.0.0: dependencies: builtins "^5.0.0" -value-or-promise@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" - integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== - -varint@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" - integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== - -vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vuvuzela@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/vuvuzela/-/vuvuzela-1.0.3.tgz#3be145e58271c73ca55279dd851f12a682114b0b" - integrity sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ== - walk-up-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" @@ -11156,15 +7460,6 @@ wcwidth@^1.0.0: dependencies: defaults "^1.0.3" -web3-bzz@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.7.4.tgz#9419e606e38a9777443d4ce40506ebd796e06075" - integrity sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q== - dependencies: - "@types/node" "^12.12.6" - got "9.6.0" - swarm-js "^0.1.40" - web3-core-helpers@1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz#f8f808928560d3e64e0c8d7bdd163aa4766bcf40" @@ -11210,7 +7505,7 @@ web3-core-subscriptions@1.7.4: eventemitter3 "4.0.4" web3-core-helpers "1.7.4" -web3-core@1.7.4, web3-core@^1.7.1: +web3-core@^1.7.1: version "1.7.4" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.7.4.tgz#943fff99134baedafa7c65b4a0bbd424748429ff" integrity sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q== @@ -11223,59 +7518,6 @@ web3-core@1.7.4, web3-core@^1.7.1: web3-core-requestmanager "1.7.4" web3-utils "1.7.4" -web3-eth-abi@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz#3fee967bafd67f06b99ceaddc47ab0970f2a614a" - integrity sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg== - dependencies: - "@ethersproject/abi" "^5.6.3" - web3-utils "1.7.4" - -web3-eth-accounts@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz#7a24a4dfe947f7e9d1bae678529e591aa146167a" - integrity sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw== - dependencies: - "@ethereumjs/common" "^2.5.0" - "@ethereumjs/tx" "^3.3.2" - crypto-browserify "3.12.0" - eth-lib "0.2.8" - ethereumjs-util "^7.0.10" - scrypt-js "^3.0.1" - uuid "3.3.2" - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-utils "1.7.4" - -web3-eth-contract@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz#e5761cfb43d453f57be4777b2e5e7e1082078ff7" - integrity sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ== - dependencies: - "@types/bn.js" "^5.1.0" - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-core-promievent "1.7.4" - web3-core-subscriptions "1.7.4" - web3-eth-abi "1.7.4" - web3-utils "1.7.4" - -web3-eth-ens@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz#346720305379c0a539e226141a9602f1da7bc0c8" - integrity sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-promievent "1.7.4" - web3-eth-abi "1.7.4" - web3-eth-contract "1.7.4" - web3-utils "1.7.4" - web3-eth-iban@1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz#711fb2547fdf0f988060027331b2b6c430505753" @@ -11284,45 +7526,6 @@ web3-eth-iban@1.7.4: bn.js "^5.2.1" web3-utils "1.7.4" -web3-eth-personal@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz#22c399794cb828a75703df8bb4b3c1331b471546" - integrity sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g== - dependencies: - "@types/node" "^12.12.6" - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-net "1.7.4" - web3-utils "1.7.4" - -web3-eth@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.7.4.tgz#a7c1d3ccdbba4de4a82df7e3c4db716e4a944bf2" - integrity sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug== - dependencies: - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-core-subscriptions "1.7.4" - web3-eth-abi "1.7.4" - web3-eth-accounts "1.7.4" - web3-eth-contract "1.7.4" - web3-eth-ens "1.7.4" - web3-eth-iban "1.7.4" - web3-eth-personal "1.7.4" - web3-net "1.7.4" - web3-utils "1.7.4" - -web3-net@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.7.4.tgz#3153dfd3423262dd6fbec7aae5467202c4cad431" - integrity sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg== - dependencies: - web3-core "1.7.4" - web3-core-method "1.7.4" - web3-utils "1.7.4" - web3-providers-http@1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.7.4.tgz#8209cdcb115db5ccae1f550d1c4e3005e7538d02" @@ -11348,16 +7551,6 @@ web3-providers-ws@1.7.4: web3-core-helpers "1.7.4" websocket "^1.0.32" -web3-shh@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.7.4.tgz#bee91cce2737c529fd347274010b548b6ea060f1" - integrity sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A== - dependencies: - web3-core "1.7.4" - web3-core-method "1.7.4" - web3-core-subscriptions "1.7.4" - web3-net "1.7.4" - web3-utils@1.7.4, web3-utils@^1.7.1: version "1.7.4" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.4.tgz#eb6fa3706b058602747228234453811bbee017f5" @@ -11371,19 +7564,6 @@ web3-utils@1.7.4, web3-utils@^1.7.1: randombytes "^2.1.0" utf8 "3.0.0" -web3@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.7.4.tgz#00c9aef8e13ade92fd773d845fff250535828e93" - integrity sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A== - dependencies: - web3-bzz "1.7.4" - web3-core "1.7.4" - web3-eth "1.7.4" - web3-eth-personal "1.7.4" - web3-net "1.7.4" - web3-shh "1.7.4" - web3-utils "1.7.4" - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -11406,27 +7586,6 @@ websocket@^1.0.32: utf-8-validate "^5.0.2" yaeti "^0.0.6" -websql@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/websql/-/websql-1.0.0.tgz#1bd00b27392893134715d5dd6941fd89e730bab5" - integrity sha512-7iZ+u28Ljw5hCnMiq0BCOeSYf0vCFQe/ORY0HgscTiKjQed8WqugpBUggJ2NTnB9fahn1kEnPRX2jf8Px5PhJw== - dependencies: - argsarray "^0.0.1" - immediate "^3.2.2" - noop-fn "^1.0.0" - sqlite3 "^4.0.0" - tiny-queue "^0.2.1" - -whatwg-fetch@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" - integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== - -whatwg-mimetype@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" - integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -11474,7 +7633,7 @@ which@2.0.2, which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wide-align@^1.1.0, wide-align@^1.1.5: +wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== @@ -11587,54 +7746,16 @@ write-pkg@^4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" -write-stream@~0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/write-stream/-/write-stream-0.4.3.tgz#83cc8c0347d0af6057a93862b4e3ae01de5c81c1" - integrity sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A== - dependencies: - readable-stream "~0.0.2" - -ws@^3.0.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -ws@^5.1.1: - version "5.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" - integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== - dependencies: - async-limiter "~1.0.0" +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@^7.2.0, ws@^7.4.6: +ws@^7.4.6: version "7.5.8" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a" integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw== -xhr-request-promise@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" - integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== - dependencies: - xhr-request "^1.1.0" - -xhr-request@^1.0.1, xhr-request@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" - integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== - dependencies: - buffer-to-arraybuffer "^0.0.5" - object-assign "^4.1.1" - query-string "^5.0.1" - simple-get "^2.7.0" - timed-out "^4.0.1" - url-set-query "^1.0.0" - xhr "^2.0.4" - xhr2-cookies@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" @@ -11642,41 +7763,11 @@ xhr2-cookies@1.1.0: dependencies: cookiejar "^2.1.1" -xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: - version "2.6.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" - integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== - dependencies: - global "~4.4.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - -xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== - -xss@^1.0.8: - version "1.0.13" - resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.13.tgz#6e48f616128b39f366dfadc57411e1eb5b341c6c" - integrity sha512-clu7dxTm1e8Mo5fz3n/oW3UCXBfV89xZ72jM8yzo1vR/pIS0w3sgB3XV2H8Vm6zfGnHL0FzvLJPJEBhd86/z4Q== - dependencies: - commander "^2.20.3" - cssfilter "0.0.10" - -xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xtend@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== - dependencies: - object-keys "~0.4.0" - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -11687,7 +7778,7 @@ yaeti@^0.0.6: resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== From f0f18b465686926879be20f6dd0fff674f8aa8d7 Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 4 Jul 2022 20:24:14 +0500 Subject: [PATCH 0005/1247] typo fix --- .../src/contracts/SmartWalletFactoryContract.ts | 4 ++-- .../SmartWalletProxyFactoryEthersContract.ts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts index 87c28ec29..e17d8be46 100644 --- a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts +++ b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts @@ -3,8 +3,8 @@ import { TransactionResult } from '../types' export interface SmartWalletFacoryContract { - deployCounterFactualWallet(owner:string, entryPointL:string, handler:string, index:number): Promise - deployWallet(owner:string, entryPointL:string, handler:string): Promise + deployCounterFactualWallet(owner:string, entryPoint:string, handler:string, index:number): Promise + deployWallet(owner:string, entryPoint:string, handler:string): Promise getAddressForCounterfactualWallet(owner:string, index:number): Promise } \ No newline at end of file diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts index 81e9ae946..e85e4927c 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts @@ -11,13 +11,13 @@ import { SmartWalletFacoryContractSV100Interface } from '../../../typechain/src/ class SmartWalletFacoryContractEthers implements SmartWalletFacoryContract { constructor(public contract: SmartWalletFacoryContract_V1_0_0) {} - async deployCounterFactualWallet(owner:string, entryPointL:string, handler:string, index:number): Promise{ - const resultSet = await this.contract.deployCounterFactualWallet(owner, entryPointL, handler, index) + async deployCounterFactualWallet(owner:string, entryPoint:string, handler:string, index:number): Promise{ + const resultSet = await this.contract.deployCounterFactualWallet(owner, entryPoint, handler, index) return toTxResult(resultSet) } - async deployWallet(owner:string, entryPointL:string, handler:string): Promise{ - const resultSet = await this.contract.deployWallet(owner, entryPointL, handler) + async deployWallet(owner:string, entryPoint:string, handler:string): Promise{ + const resultSet = await this.contract.deployWallet(owner, entryPoint, handler) return toTxResult(resultSet) } From 9fc4f499d4bb5db6b2533864647a9131539e6807 Mon Sep 17 00:00:00 2001 From: talha Date: Tue, 5 Jul 2022 04:41:03 +0500 Subject: [PATCH 0006/1247] refactor conventions --- .../contracts/{Deps_V1_0_0.sol => Index.sol} | 6 ++--- packages/ethers-lib/package-lock.json | 2 +- packages/ethers-lib/package.json | 12 ++-------- .../scripts/generateTypechainFiles.ts | 22 +++++-------------- packages/ethers-lib/src/EthersAdapter.ts | 4 +--- .../MultiSend/MultiSendEthersContract.ts | 10 ++++----- .../SmartWallet/SmartWalletContractEthers.ts | 8 +++---- .../SmartWalletProxyFactoryEthersContract.ts | 7 ++---- .../src/contracts/contractInstancesEthers.ts | 12 +++++----- 9 files changed, 29 insertions(+), 54 deletions(-) rename packages/ethers-lib/contracts/{Deps_V1_0_0.sol => Index.sol} (77%) diff --git a/packages/ethers-lib/contracts/Deps_V1_0_0.sol b/packages/ethers-lib/contracts/Index.sol similarity index 77% rename from packages/ethers-lib/contracts/Deps_V1_0_0.sol rename to packages/ethers-lib/contracts/Index.sol index bd3816d43..bbbd85661 100644 --- a/packages/ethers-lib/contracts/Deps_V1_0_0.sol +++ b/packages/ethers-lib/contracts/Index.sol @@ -6,9 +6,9 @@ import { SmartWallet } from "../scw-contracts/smart-contract-wallet/SmartWallet. import { MultiSend } from "../scw-contracts/smart-contract-wallet/libs/MultiSend.sol"; import { WhitelistModule } from "../scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol"; -contract SmartWalletFacoryContract_SV1_0_0 is WalletFactory { +contract SmartWalletFactoryContract is WalletFactory { constructor(address _defaultImpl) WalletFactory(_defaultImpl){} } -contract SmartWallet_SV1_0_0 is SmartWallet {} -contract MultiSend_SV1_0_0 is MultiSend {} +contract SmartWalletContract is SmartWallet {} +contract MultiSendContract is MultiSend {} diff --git a/packages/ethers-lib/package-lock.json b/packages/ethers-lib/package-lock.json index 7f379b71a..62f2db647 100644 --- a/packages/ethers-lib/package-lock.json +++ b/packages/ethers-lib/package-lock.json @@ -1,5 +1,5 @@ { - "name": "@gnosis.pm/safe-ethers-lib", + "name": "ethers-lib", "version": "1.1.0", "lockfileVersion": 1, "requires": true, diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 574c5036b..d5c35a6e0 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,5 +1,5 @@ { - "name": "@gnosis.pm/safe-ethers-lib", + "name": "ethers-lib", "version": "1.1.0", "description": "Ethers library adapter to be used by Safe Core SDK", "main": "dist/src/index.js", @@ -18,19 +18,11 @@ "format": "prettier --write \"{src,tests,hardhat,scripts}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, - "repository": { - "type": "git", - "url": "git+https://github.com/gnosis/safe-core-sdk.git" - }, - "author": "Gnosis Safe (https://gnosis-safe.io)", + "author": "Biconomy (https://biconomy.io)", "license": "MIT", - "bugs": { - "url": "https://github.com/gnosis/safe-core-sdk/issues" - }, "files": [ "dist" ], - "homepage": "https://github.com/gnosis/safe-core-sdk#readme", "devDependencies": { "@nomiclabs/hardhat-ethers": "^2.0.5", "@nomiclabs/hardhat-waffle": "^2.0.3", diff --git a/packages/ethers-lib/scripts/generateTypechainFiles.ts b/packages/ethers-lib/scripts/generateTypechainFiles.ts index 10c0ca41d..ecd5e5ffa 100644 --- a/packages/ethers-lib/scripts/generateTypechainFiles.ts +++ b/packages/ethers-lib/scripts/generateTypechainFiles.ts @@ -13,23 +13,14 @@ const outDirTests = 'typechain/tests/' // Contract list for which the Typechain files will be generated // Will be included in dist/ folder -const safeContractsPath = './artifacts/contracts/Deps_V1_0_0.sol' +const safeContractsPath = './artifacts/contracts/index.sol' const safeContracts_V1_0_0 = [ - `${safeContractsPath}/SmartWallet_SV1_0_0.json`, - `${safeContractsPath}/MultiSend_SV1_0_0.json`, - `${safeContractsPath}/SmartWalletFacoryContract_SV1_0_0.json` + `${safeContractsPath}/SmartWalletContract.json`, + `${safeContractsPath}/MultiSendContract.json`, + `${safeContractsPath}/SmartWalletFactoryContract.json` ].join(' ') -// Won't be included in dist/ folder -const safeContractsTestPath = '../../node_modules/@gnosis.pm/safe-contracts-v1.2.0/build/contracts' -const openZeppelinContractsPath = '../../node_modules/openzeppelin-solidity/build/contracts' -// const testContracts = [ -// `${safeContractsTestPath}/DailyLimitModule.json`, -// `${safeContractsTestPath}/SocialRecoveryModule.json`, -// `${openZeppelinContractsPath}/ERC20Mintable.json` -// ].join(' ') - // Remove existing Typechain files execSync(`rimraf ${outDirSrc} ${outDirTests}`) @@ -69,7 +60,4 @@ generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.0`, safeContracts moveTypechainFiles( `${typeChainDirectorySrcPath}${ethersV5}/v1.0.0`, `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.0` -) - -// Tests: Ethers V5 types -//generateTypechainFiles(ethersV5, `${outDirTests}${ethersV5}`, testContracts) +) \ No newline at end of file diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index 63f03e9e0..6e06cd178 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -7,8 +7,7 @@ import { EthAdapter, EthAdapterTransaction, GetContractProps, - SmartWalletContract, - SmartAccountVersion + SmartWalletContract } from 'core-types' import { validateEip3770Address } from '@gnosis.pm/safe-core-sdk-utils' import { ethers } from 'ethers' @@ -17,7 +16,6 @@ import { getSafeContractInstance, getSafeProxyFactoryContractInstance } from './contracts/contractInstancesEthers' -import SmartWalletContractEthers from './contracts/SmartWallet/SmartWalletContractEthers' import SmartWalletProxyFactoryEthersContract from './contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract' import MultiSendEthersContract from './contracts/MultiSend/MultiSendEthersContract' diff --git a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts index 16b66e6df..25953ba6a 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts @@ -1,13 +1,13 @@ import { MultiSendContract } from 'core-types' import { - MultiSendSV100 as MultiSend_V1_0_0, - MultiSendSV100Interface -} from '../../../typechain/src/ethers-v5/v1.0.0/MultiSendSV100' + MultiSendContract as MultiSend_TypeChain, + MultiSendContractInterface +} from '../../../typechain/src/ethers-v5/v1.0.0/MultiSendContract' class MultiSendEthersContract implements MultiSendContract { - constructor(public contract: MultiSend_V1_0_0) {} + constructor(public contract: MultiSend_TypeChain) {} - encode: MultiSendSV100Interface['encodeFunctionData'] = (methodName: any, params: any): string => { + encode: MultiSendContractInterface['encodeFunctionData'] = (methodName: any, params: any): string => { return this.contract.interface.encodeFunctionData(methodName, params) } } diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts index d9e88cad1..e5a2c6885 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts @@ -9,10 +9,10 @@ import { TransactionResult } from 'core-types' import { toTxResult } from '../../utils' -import { SmartWalletSV100 as SmartWallet_V1_0_0 } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletSV100' -import { SmartWalletSV100Interface } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletSV100' +import { SmartWalletContract as SmartWalletContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' +import { SmartWalletContractInterface } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' class SmartWalletContractEthers implements SmartWalletContract { - constructor(public contract: SmartWallet_V1_0_0) {} + constructor(public contract: SmartWalletContract_TypeChain) {} async getVersion(): Promise { return (await this.contract.VERSION()) as SmartAccountVersion @@ -53,7 +53,7 @@ class SmartWalletContractEthers implements SmartWalletContract { return toTxResult(txResponse, options) } - encode: SmartWalletSV100Interface['encodeFunctionData'] = (methodName: any, params: any): string => { + encode: SmartWalletContractInterface['encodeFunctionData'] = (methodName: any, params: any): string => { return this.contract.interface.encodeFunctionData(methodName, params) } } diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts index e85e4927c..e8dc2d9a5 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts @@ -2,14 +2,11 @@ import { SmartWalletFacoryContract, TransactionResult, } from 'core-types' import { toTxResult } from '../../utils' -import { ContractTransaction } from '@ethersproject/contracts' - -import { SmartWalletFacoryContractSV100 as SmartWalletFacoryContract_V1_0_0 } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFacoryContractSV100' -import { SmartWalletFacoryContractSV100Interface } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFacoryContractSV100' +import { SmartWalletFactoryContract as SmartWalletFacoryContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' class SmartWalletFacoryContractEthers implements SmartWalletFacoryContract { - constructor(public contract: SmartWalletFacoryContract_V1_0_0) {} + constructor(public contract: SmartWalletFacoryContract_TypeChain) {} async deployCounterFactualWallet(owner:string, entryPoint:string, handler:string, index:number): Promise{ const resultSet = await this.contract.deployCounterFactualWallet(owner, entryPoint, handler, index) diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index b9caa4224..d4d89fb31 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -1,7 +1,7 @@ import { Signer } from '@ethersproject/abstract-signer' -import { SmartWalletSV100__factory as SmartWalletMasterCopy_V1_0_0 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletSV100__factory' -import { MultiSendSV100__factory as MultiSend_V1_0_0 } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendSV100__factory' -import { SmartWalletFacoryContractSV100__factory as SmartWalletFactory_V1_0_0 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFacoryContractSV100__factory' +import { SmartWalletContract__factory as SmartWalletContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContract__factory' +import { MultiSendContract__factory as MultiSendContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendContract__factory' +import { SmartWalletFactoryContract__factory as SmartWalletFactoryContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFactoryContract__factory' import SmartWalletContractEthers from './SmartWallet/SmartWalletContractEthers' import MultiSendEthersContract from './MultiSend/MultiSendEthersContract' import SmartWalletFacoryContractEthers from './SmartWalletFactory/SmartWalletProxyFactoryEthersContract' @@ -11,7 +11,7 @@ export function getSafeContractInstance( signer: Signer ): | SmartWalletContractEthers{ - let safeContract = SmartWalletMasterCopy_V1_0_0.connect(contractAddress, signer) + let safeContract = SmartWalletContract.connect(contractAddress, signer) return new SmartWalletContractEthers(safeContract) } @@ -20,7 +20,7 @@ export function getMultiSendContractInstance( signer: Signer ): MultiSendEthersContract{ - let multiSendContract = MultiSend_V1_0_0.connect(contractAddress, signer) + let multiSendContract = MultiSendContract.connect(contractAddress, signer) return new MultiSendEthersContract(multiSendContract) } @@ -28,6 +28,6 @@ export function getSafeProxyFactoryContractInstance( contractAddress: string, signer: Signer ): SmartWalletFacoryContractEthers{ - let walletFactoryContract = SmartWalletFactory_V1_0_0.connect(contractAddress, signer) + let walletFactoryContract = SmartWalletFactoryContract.connect(contractAddress, signer) return new SmartWalletFacoryContractEthers(walletFactoryContract) } From 4a31d84490d0d4fdd75d63ad56b5b6dbd2ba2103 Mon Sep 17 00:00:00 2001 From: talha Date: Tue, 5 Jul 2022 12:35:44 +0500 Subject: [PATCH 0007/1247] Entry Point Contract Integration --- .../src/contracts/EntryPointContract.ts | 10 +++++ .../contracts/SmartWalletFactoryContract.ts | 19 +++++---- packages/core-types/src/index.ts | 1 + packages/core-types/src/types.ts | 15 +++++++ packages/ethers-lib/contracts/Index.sol | 4 ++ .../scripts/generateTypechainFiles.ts | 5 ++- .../EntryPointEthersContract.ts | 42 +++++++++++++++++++ .../MultiSend/MultiSendEthersContract.ts | 5 ++- .../SmartWallet/SmartWalletContractEthers.ts | 8 ++-- .../SmartWalletProxyFactoryEthersContract.ts | 28 +++++++++---- .../src/contracts/contractInstancesEthers.ts | 10 ++--- packages/node-client/src/SafeServiceClient.ts | 6 ++- 12 files changed, 122 insertions(+), 31 deletions(-) create mode 100644 packages/core-types/src/contracts/EntryPointContract.ts create mode 100644 packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts diff --git a/packages/core-types/src/contracts/EntryPointContract.ts b/packages/core-types/src/contracts/EntryPointContract.ts new file mode 100644 index 000000000..01b60ebcc --- /dev/null +++ b/packages/core-types/src/contracts/EntryPointContract.ts @@ -0,0 +1,10 @@ +import { UserOperation, TransactionResult } from '../types' + +export interface EntryPointContract { + handleOp(userOperation: UserOperation, beneficiary: string): Promise + handleOps(userOperations: UserOperation[], beneficiary: string): Promise + simulateValidation(userOperation: UserOperation): Promise + getRequestId(userOperation: UserOperation): Promise + getSenderAddress(initCode: string, salt: number): Promise + isPaymasterStaked(address: string, stake: number): Promise +} diff --git a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts index e17d8be46..615c97cbe 100644 --- a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts +++ b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts @@ -1,10 +1,11 @@ - -import { - TransactionResult -} from '../types' +import { TransactionResult } from '../types' export interface SmartWalletFacoryContract { - deployCounterFactualWallet(owner:string, entryPoint:string, handler:string, index:number): Promise - deployWallet(owner:string, entryPoint:string, handler:string): Promise - getAddressForCounterfactualWallet(owner:string, index:number): Promise - } - \ No newline at end of file + deployCounterFactualWallet( + owner: string, + entryPoint: string, + handler: string, + index: number + ): Promise + deployWallet(owner: string, entryPoint: string, handler: string): Promise + getAddressForCounterfactualWallet(owner: string, index: number): Promise +} diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts index eacd94427..0c3bc7dfb 100644 --- a/packages/core-types/src/index.ts +++ b/packages/core-types/src/index.ts @@ -1,5 +1,6 @@ export * from './contracts/SmartWalletContract' export * from './contracts/MultiSendContract' export * from './contracts/SmartWalletFactoryContract' +export * from './contracts/EntryPointContract' export * from './ethereumLibs/EthAdapter' export * from './types' diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index c9c88fce3..9e8a33083 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -84,3 +84,18 @@ export interface Eip3770Address { prefix: string address: string } + +export interface UserOperation { + sender: string + nonce: number + initCode: string + callData: string + callGas: number + verificationGas: number + preVerificationGas: number + maxFeePerGas: number + maxPriorityFeePerGas: number + paymaster: string + paymasterData: string + signature: string +} diff --git a/packages/ethers-lib/contracts/Index.sol b/packages/ethers-lib/contracts/Index.sol index bbbd85661..7e8ad21e8 100644 --- a/packages/ethers-lib/contracts/Index.sol +++ b/packages/ethers-lib/contracts/Index.sol @@ -5,10 +5,14 @@ import { WalletFactory } from "../scw-contracts/smart-contract-wallet/WalletFact import { SmartWallet } from "../scw-contracts/smart-contract-wallet/SmartWallet.sol"; import { MultiSend } from "../scw-contracts/smart-contract-wallet/libs/MultiSend.sol"; import { WhitelistModule } from "../scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol"; +import { EntryPoint } from "../scw-contracts/references/aa-4337/EntryPoint.sol"; contract SmartWalletFactoryContract is WalletFactory { constructor(address _defaultImpl) WalletFactory(_defaultImpl){} } contract SmartWalletContract is SmartWallet {} contract MultiSendContract is MultiSend {} +contract EntryPointContract is EntryPoint { + constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} +} diff --git a/packages/ethers-lib/scripts/generateTypechainFiles.ts b/packages/ethers-lib/scripts/generateTypechainFiles.ts index ecd5e5ffa..295dd9e09 100644 --- a/packages/ethers-lib/scripts/generateTypechainFiles.ts +++ b/packages/ethers-lib/scripts/generateTypechainFiles.ts @@ -18,7 +18,8 @@ const safeContractsPath = './artifacts/contracts/index.sol' const safeContracts_V1_0_0 = [ `${safeContractsPath}/SmartWalletContract.json`, `${safeContractsPath}/MultiSendContract.json`, - `${safeContractsPath}/SmartWalletFactoryContract.json` + `${safeContractsPath}/SmartWalletFactoryContract.json`, + `${safeContractsPath}/EntryPointContract.json` ].join(' ') // Remove existing Typechain files @@ -60,4 +61,4 @@ generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.0`, safeContracts moveTypechainFiles( `${typeChainDirectorySrcPath}${ethersV5}/v1.0.0`, `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.0` -) \ No newline at end of file +) diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts new file mode 100644 index 000000000..381327969 --- /dev/null +++ b/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts @@ -0,0 +1,42 @@ +import { EntryPointContract, UserOperation, TransactionResult } from 'core-types' +import { + EntryPointContract as EntryPointContract_TypeChain, + EntryPointContractInterface +} from '../../../typechain/src/ethers-v5/v1.0.0/EntryPointContract' +import { toTxResult } from '../../utils' + +class EntryPointEthersContract implements EntryPointContract { + constructor(public contract: EntryPointContract_TypeChain) {} + + async simulateValidation(userOperation: UserOperation): Promise { + const resultSet = await this.contract.simulateValidation(userOperation) + return toTxResult(resultSet) + } + + async getRequestId(userOperation: UserOperation): Promise { + return this.contract.getRequestId(userOperation) + } + + async handleOp(userOperation: UserOperation, beneficiary: string): Promise { + const resultSet = await this.contract.handleOp(userOperation, beneficiary) + return toTxResult(resultSet) + } + + async handleOps( + userOperations: UserOperation[], + beneficiary: string + ): Promise { + const resultSet = await this.contract.handleOps(userOperations, beneficiary) + return toTxResult(resultSet) + } + + async getSenderAddress(initCode: string, salt: number): Promise { + return this.contract.getSenderAddress(initCode, salt) + } + + async isPaymasterStaked(address: string, stake: number): Promise { + return this.contract.isPaymasterStaked(address, stake) + } +} + +export default EntryPointEthersContract diff --git a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts index 25953ba6a..bcf2fdc06 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts @@ -7,7 +7,10 @@ import { class MultiSendEthersContract implements MultiSendContract { constructor(public contract: MultiSend_TypeChain) {} - encode: MultiSendContractInterface['encodeFunctionData'] = (methodName: any, params: any): string => { + encode: MultiSendContractInterface['encodeFunctionData'] = ( + methodName: any, + params: any + ): string => { return this.contract.interface.encodeFunctionData(methodName, params) } } diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts index e5a2c6885..8bad59fea 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts @@ -18,7 +18,7 @@ class SmartWalletContractEthers implements SmartWalletContract { return (await this.contract.VERSION()) as SmartAccountVersion } - async getNonce(batchId: number): Promise{ + async getNonce(batchId: number): Promise { return this.contract.getNonce(batchId) } async getTransactionHash(smartAccountTrxData: SmartAccountTrxData): Promise { @@ -42,7 +42,6 @@ class SmartWalletContractEthers implements SmartWalletContract { feeRefundData: FeeRefundData, options: TransactionOptions ): Promise { - // TODO: estimate GAS before making the transaction const txResponse = await this.contract.execTransaction( smartAccountTrx.data, @@ -53,7 +52,10 @@ class SmartWalletContractEthers implements SmartWalletContract { return toTxResult(txResponse, options) } - encode: SmartWalletContractInterface['encodeFunctionData'] = (methodName: any, params: any): string => { + encode: SmartWalletContractInterface['encodeFunctionData'] = ( + methodName: any, + params: any + ): string => { return this.contract.interface.encodeFunctionData(methodName, params) } } diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts index e8dc2d9a5..439d53b03 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts @@ -1,27 +1,37 @@ -import { - SmartWalletFacoryContract, TransactionResult, -} from 'core-types' +import { SmartWalletFacoryContract, TransactionResult } from 'core-types' import { toTxResult } from '../../utils' import { SmartWalletFactoryContract as SmartWalletFacoryContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' - class SmartWalletFacoryContractEthers implements SmartWalletFacoryContract { constructor(public contract: SmartWalletFacoryContract_TypeChain) {} - async deployCounterFactualWallet(owner:string, entryPoint:string, handler:string, index:number): Promise{ - const resultSet = await this.contract.deployCounterFactualWallet(owner, entryPoint, handler, index) + async deployCounterFactualWallet( + owner: string, + entryPoint: string, + handler: string, + index: number + ): Promise { + const resultSet = await this.contract.deployCounterFactualWallet( + owner, + entryPoint, + handler, + index + ) return toTxResult(resultSet) } - async deployWallet(owner:string, entryPoint:string, handler:string): Promise{ + async deployWallet( + owner: string, + entryPoint: string, + handler: string + ): Promise { const resultSet = await this.contract.deployWallet(owner, entryPoint, handler) return toTxResult(resultSet) } - async getAddressForCounterfactualWallet(owner:string, index:number): Promise{ + async getAddressForCounterfactualWallet(owner: string, index: number): Promise { return this.contract.getAddressForCounterfactualWallet(owner, index) } - } export default SmartWalletFacoryContractEthers diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index d4d89fb31..ab4bb24a2 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -9,17 +9,15 @@ import SmartWalletFacoryContractEthers from './SmartWalletFactory/SmartWalletPro export function getSafeContractInstance( contractAddress: string, signer: Signer -): | SmartWalletContractEthers{ - +): SmartWalletContractEthers { let safeContract = SmartWalletContract.connect(contractAddress, signer) return new SmartWalletContractEthers(safeContract) - } +} export function getMultiSendContractInstance( contractAddress: string, signer: Signer -): MultiSendEthersContract{ - +): MultiSendEthersContract { let multiSendContract = MultiSendContract.connect(contractAddress, signer) return new MultiSendEthersContract(multiSendContract) } @@ -27,7 +25,7 @@ export function getMultiSendContractInstance( export function getSafeProxyFactoryContractInstance( contractAddress: string, signer: Signer -): SmartWalletFacoryContractEthers{ +): SmartWalletFacoryContractEthers { let walletFactoryContract = SmartWalletFactoryContract.connect(contractAddress, signer) return new SmartWalletFacoryContractEthers(walletFactoryContract) } diff --git a/packages/node-client/src/SafeServiceClient.ts b/packages/node-client/src/SafeServiceClient.ts index fc78801d9..94ec11c06 100644 --- a/packages/node-client/src/SafeServiceClient.ts +++ b/packages/node-client/src/SafeServiceClient.ts @@ -294,7 +294,11 @@ class SafeServiceClient implements SafeTransactionService { * @throws "Signing owner is not an owner of the Safe" * @throws "Not found" */ - async removeSafeDelegate({ safe, delegate, signer }: SmartAccountDelegateDeleteConfig): Promise { + async removeSafeDelegate({ + safe, + delegate, + signer + }: SmartAccountDelegateDeleteConfig): Promise { if (safe === '') { throw new Error('Invalid Safe address') } From 941719ccf5f194f6bdbb4d979ceb51c1b015fd6f Mon Sep 17 00:00:00 2001 From: talha Date: Fri, 8 Jul 2022 02:04:39 +0500 Subject: [PATCH 0008/1247] wallet pkg --- package-lock.json | 6 + package.json | 4 +- .../src/contracts/MultiSendContract.ts | 1 + .../src/contracts/SmartWalletContract.ts | 1 + .../contracts/SmartWalletFactoryContract.ts | 3 +- .../core-types/src/ethereumLibs/EthAdapter.ts | 20 +- packages/ethers-lib/package-lock.json | 12037 ++++------------ packages/ethers-lib/src/EthersAdapter.ts | 34 +- .../EntryPointEthersContract.ts | 4 + .../MultiSend/MultiSendEthersContract.ts | 4 + .../SmartWallet/SmartWalletContractEthers.ts | 4 + .../SmartWalletProxyFactoryEthersContract.ts | 12 +- .../src/contracts/contractInstancesEthers.ts | 4 +- packages/node-client/package-lock.json | 10 + packages/wallet/package-lock.json | 2458 ++++ packages/wallet/package.json | 42 + packages/wallet/src/assets/MultiSend.json | 37 + packages/wallet/src/assets/SmartWallet.json | 980 ++ packages/wallet/src/assets/WalletFactory.json | 161 + packages/wallet/src/constants.ts | 19 + packages/wallet/src/safe.ts | 3 + packages/wallet/src/types.ts | 20 + .../wallet/src/utils/FetchContractsInfo.ts | 28 + packages/wallet/src/wallet.ts | 115 + packages/wallet/tsconfig.json | 9 + 25 files changed, 6489 insertions(+), 9527 deletions(-) create mode 100644 packages/wallet/package-lock.json create mode 100644 packages/wallet/package.json create mode 100644 packages/wallet/src/assets/MultiSend.json create mode 100644 packages/wallet/src/assets/SmartWallet.json create mode 100644 packages/wallet/src/assets/WalletFactory.json create mode 100644 packages/wallet/src/constants.ts create mode 100644 packages/wallet/src/safe.ts create mode 100644 packages/wallet/src/types.ts create mode 100644 packages/wallet/src/utils/FetchContractsInfo.ts create mode 100644 packages/wallet/src/wallet.ts create mode 100644 packages/wallet/tsconfig.json diff --git a/package-lock.json b/package-lock.json index 23feef130..808bae497 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7123,6 +7123,12 @@ "find-up": "^4.0.0" } }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, "proc-log": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", diff --git a/package.json b/package.json index ef151d553..c952a38b1 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "build": "lerna run build --stream --npm-client=yarn", "test": "FORCE_COLOR=1 lerna run test --stream --npm-client=yarn", "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", - "format": "lerna run format --npm-client=yarn" + "format": "lerna run format --npm-client=yarn", + "prettier": "lerna run prettier --npm-client=npm" }, "workspaces": { "packages": [ @@ -18,6 +19,7 @@ "devDependencies": { "lerna": "^5.1.6", "nx": "^14.3.6", + "prettier": "2.7.1", "ts-node": "^10.8.2" }, "dependencies": { diff --git a/packages/core-types/src/contracts/MultiSendContract.ts b/packages/core-types/src/contracts/MultiSendContract.ts index cd7e416c8..ceb41c7b2 100644 --- a/packages/core-types/src/contracts/MultiSendContract.ts +++ b/packages/core-types/src/contracts/MultiSendContract.ts @@ -1,3 +1,4 @@ export interface MultiSendContract { + getAddress(): string encode(methodName: any, params: any): string } diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index 3ef3cfa79..203a591e6 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -9,6 +9,7 @@ import { import { BigNumber } from '@ethersproject/bignumber' export interface SmartWalletContract { + getAddress(): string getVersion(): Promise getNonce(batchId: number): Promise getTransactionHash(smartAccountTrxData: SmartAccountTrxData): Promise diff --git a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts index 615c97cbe..a3fe0354a 100644 --- a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts +++ b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts @@ -1,5 +1,6 @@ import { TransactionResult } from '../types' -export interface SmartWalletFacoryContract { +export interface SmartWalletFactoryContract { + getAddress(): string deployCounterFactualWallet( owner: string, entryPoint: string, diff --git a/packages/core-types/src/ethereumLibs/EthAdapter.ts b/packages/core-types/src/ethereumLibs/EthAdapter.ts index 2bb35476e..d5d04bf67 100644 --- a/packages/core-types/src/ethereumLibs/EthAdapter.ts +++ b/packages/core-types/src/ethereumLibs/EthAdapter.ts @@ -3,6 +3,7 @@ import { SingletonDeployment } from '@gnosis.pm/safe-deployments' import { SmartWalletContract } from 'contracts/SmartWalletContract' import { AbiItem } from 'web3-utils' import { MultiSendContract } from '../contracts/MultiSendContract' +import { SmartWalletFactoryContract } from '../contracts/SmartWalletFactoryContract' import { SmartAccountVersion, Eip3770Address } from '../types' export interface EthAdapterTransaction { @@ -15,29 +16,20 @@ export interface EthAdapterTransaction { } export interface GetContractProps { - smartAccountVersion: SmartAccountVersion chainId: number singletonDeployment?: SingletonDeployment - customContractAddress?: string - customContractAbi?: AbiItem | AbiItem[] } export interface EthAdapter { getEip3770Address(fullAddress: string): Promise getBalance(address: string): Promise getChainId(): Promise - getSafeContract({ + getSmartWalletContract({ chainId, singletonDeployment }: GetContractProps): SmartWalletContract + getMultiSendContract({ chainId, singletonDeployment }: GetContractProps): MultiSendContract + getSmartWalletFactoryContract({ chainId, - singletonDeployment, - customContractAddress, - customContractAbi - }: GetContractProps): SmartWalletContract - getMultiSendContract({ - chainId, - singletonDeployment, - customContractAddress, - customContractAbi - }: GetContractProps): MultiSendContract + singletonDeployment + }: GetContractProps): SmartWalletFactoryContract getContractCode(address: string): Promise isContractDeployed(address: string): Promise getTransaction(transactionHash: string): Promise diff --git a/packages/ethers-lib/package-lock.json b/packages/ethers-lib/package-lock.json index 62f2db647..92c850e94 100644 --- a/packages/ethers-lib/package-lock.json +++ b/packages/ethers-lib/package-lock.json @@ -4,384 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@apollo/protobufjs": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.2.tgz", - "integrity": "sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ==", - "dev": true, - "optional": true, - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - }, - "dependencies": { - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true, - "optional": true - } - } - }, - "@apollo/utils.dropunuseddefinitions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz", - "integrity": "sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg==", - "dev": true, - "optional": true - }, - "@apollo/utils.keyvaluecache": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.1.tgz", - "integrity": "sha512-nLgYLomqjVimEzQ4cdvVQkcryi970NDvcRVPfd0OPeXhBfda38WjBq+WhQFk+czSHrmrSp34YHBxpat0EtiowA==", - "dev": true, - "optional": true, - "requires": { - "@apollo/utils.logger": "^1.0.0", - "lru-cache": "^7.10.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", - "dev": true, - "optional": true - } - } - }, - "@apollo/utils.logger": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-1.0.0.tgz", - "integrity": "sha512-dx9XrjyisD2pOa+KsB5RcDbWIAdgC91gJfeyLCgy0ctJMjQe7yZK5kdWaWlaOoCeX0z6YI9iYlg7vMPyMpQF3Q==", - "dev": true, - "optional": true - }, - "@apollo/utils.printwithreducedwhitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz", - "integrity": "sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q==", - "dev": true, - "optional": true - }, - "@apollo/utils.removealiases": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz", - "integrity": "sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A==", - "dev": true, - "optional": true - }, - "@apollo/utils.sortast": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz", - "integrity": "sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA==", - "dev": true, - "optional": true, - "requires": { - "lodash.sortby": "^4.7.0" - } - }, - "@apollo/utils.stripsensitiveliterals": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz", - "integrity": "sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w==", - "dev": true, - "optional": true - }, - "@apollo/utils.usagereporting": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.0.tgz", - "integrity": "sha512-5PL7hJMkTPmdo3oxPtigRrIyPxDk/ddrUryHPDaezL1lSFExpNzsDd2f1j0XJoHOg350GRd3LyD64caLA2PU1w==", - "dev": true, - "optional": true, - "requires": { - "@apollo/utils.dropunuseddefinitions": "^1.1.0", - "@apollo/utils.printwithreducedwhitespace": "^1.1.0", - "@apollo/utils.removealiases": "1.0.0", - "@apollo/utils.sortast": "^1.1.0", - "@apollo/utils.stripsensitiveliterals": "^1.2.0", - "apollo-reporting-protobuf": "^3.3.1" - } - }, - "@apollographql/apollo-tools": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz", - "integrity": "sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==", - "dev": true, - "optional": true - }, - "@apollographql/graphql-playground-html": { - "version": "1.6.29", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz", - "integrity": "sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==", - "dev": true, - "optional": true, - "requires": { - "xss": "^1.0.8" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", - "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", - "dev": true - }, - "@babel/generator": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", - "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", - "dev": true, - "requires": { - "@babel/types": "^7.18.7", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", - "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", - "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", - "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", - "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==", - "dev": true - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", - "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", - "dev": true - }, - "@babel/plugin-transform-runtime": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz", - "integrity": "sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/runtime": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", - "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/traverse": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", - "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", - "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - } - }, "@cspotcode/source-map-consumer": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", @@ -783,6 +405,16 @@ "@ethersproject/bytes": "^5.6.1" } }, + "@ethersproject/basex": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", + "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/properties": "^5.6.0" + } + }, "@ethersproject/bignumber": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", @@ -841,6 +473,55 @@ "@ethersproject/strings": "^5.6.1" } }, + "@ethersproject/hdnode": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", + "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/json-wallets": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", + "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + }, + "dependencies": { + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true + } + } + }, "@ethersproject/keccak256": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", @@ -863,6 +544,16 @@ "@ethersproject/logger": "^5.6.0" } }, + "@ethersproject/pbkdf2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", + "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/sha2": "^5.6.1" + } + }, "@ethersproject/properties": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", @@ -871,6 +562,52 @@ "@ethersproject/logger": "^5.6.0" } }, + "@ethersproject/providers": { + "version": "5.6.8", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", + "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", + "dev": true, + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" + }, + "dependencies": { + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "dev": true + } + } + }, + "@ethersproject/random": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", + "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, "@ethersproject/rlp": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", @@ -880,7 +617,18 @@ "@ethersproject/logger": "^5.6.0" } }, - "@ethersproject/signing-key": { + "@ethersproject/sha2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" + } + }, + "@ethersproject/signing-key": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", @@ -893,6 +641,20 @@ "hash.js": "1.1.7" } }, + "@ethersproject/solidity": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" + } + }, "@ethersproject/strings": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", @@ -919,6 +681,40 @@ "@ethersproject/signing-key": "^5.6.2" } }, + "@ethersproject/units": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", + "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/wallet": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", + "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", + "dev": true, + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, "@ethersproject/web": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", @@ -931,26 +727,19 @@ "@ethersproject/strings": "^5.6.1" } }, - "@gnosis.pm/safe-contracts-v1.2.0": { - "version": "npm:@gnosis.pm/safe-contracts@1.2.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-contracts/-/safe-contracts-1.2.0.tgz", - "integrity": "sha512-lcpZodqztDgMICB0kAc8aJdQePwCaLJnbeNjgVTfLAo3fBckVRV06VHXg5IsZ26qLA4JfZ690Cb7TsDVE9ZF3w==", + "@ethersproject/wordlists": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", + "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", "dev": true, "requires": { - "@truffle/hdwallet-provider": "^1.0.0", - "dotenv": "^8.0.0", - "openzeppelin-solidity": "^2.0.0", - "shelljs": "^0.8.3", - "solc": "0.5.17", - "truffle": "^5.1.21" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "@gnosis.pm/safe-contracts-v1.3.0": { - "version": "npm:@gnosis.pm/safe-contracts@1.3.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-contracts/-/safe-contracts-1.3.0.tgz", - "integrity": "sha512-1p+1HwGvxGUVzVkFjNzglwHrLNA67U/axP0Ct85FzzH8yhGJb4t9jDjPYocVMzLorDoWAfKicGy1akPY9jXRVw==", - "dev": true - }, "@gnosis.pm/safe-core-sdk-types": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.1.0.tgz", @@ -979,81 +768,6 @@ "semver": "^7.3.7" } }, - "@graphql-tools/batch-execute": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.0.tgz", - "integrity": "sha512-S9/76X4uYIbVlJyRzXhCBbTJvVD0VvaWNqGiKgkITxlq4aBsTOHVuE84OSi3E1QKP3PTiJYrgMIn220iFOkyQw==", - "dev": true, - "optional": true, - "requires": { - "@graphql-tools/utils": "8.8.0", - "dataloader": "2.1.0", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - } - }, - "@graphql-tools/delegate": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-8.8.0.tgz", - "integrity": "sha512-dbhfOI8rQXPcowXrbwHLOBY9oGi7qxtlrXF4RuRXmjqGTs2AgogdOE3Ep1+6wFD7qYTuFmHXZ8Cl0PmhoZUgrg==", - "dev": true, - "optional": true, - "requires": { - "@graphql-tools/batch-execute": "8.5.0", - "@graphql-tools/schema": "8.5.0", - "@graphql-tools/utils": "8.8.0", - "dataloader": "2.1.0", - "tslib": "~2.4.0", - "value-or-promise": "1.0.11" - } - }, - "@graphql-tools/merge": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.0.tgz", - "integrity": "sha512-xRa7RAQok/0DD2YnjuqikMrr7dUAxTpdGtZ7BkvUUGhYs3B3p7reCAfvOVr1DJAqVToP7hdlMk+S5+Ylk+AaqA==", - "dev": true, - "optional": true, - "requires": { - "@graphql-tools/utils": "8.8.0", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/mock": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.7.0.tgz", - "integrity": "sha512-K/hqP442mXAvW36v/3TmqFpNzRw14P86xlsJZod88OXwpDfb97X09z1QsaMcvSe8E7ijcKWLlTRk15/vDQSL2Q==", - "dev": true, - "optional": true, - "requires": { - "@graphql-tools/schema": "8.5.0", - "@graphql-tools/utils": "8.8.0", - "fast-json-stable-stringify": "^2.1.0", - "tslib": "^2.4.0" - } - }, - "@graphql-tools/schema": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.0.tgz", - "integrity": "sha512-VeFtKjM3SA9/hCJJfr95aEdC3G0xIKM9z0Qdz4i+eC1g2fdZYnfWFt2ucW4IME+2TDd0enHlKzaV0qk2SLVUww==", - "dev": true, - "optional": true, - "requires": { - "@graphql-tools/merge": "8.3.0", - "@graphql-tools/utils": "8.8.0", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - } - }, - "@graphql-tools/utils": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.8.0.tgz", - "integrity": "sha512-KJrtx05uSM/cPYFdTnGAS1doL5bftJLAiFCDMZ8Vkifztz3BFn3gpFiy/o4wDtM8s39G46mxmt2Km/RmeltfGw==", - "dev": true, - "optional": true, - "requires": { - "tslib": "^2.4.0" - } - }, "@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -1088,52 +802,6 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "@josephg/resolvable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz", - "integrity": "sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==", - "dev": true, - "optional": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", - "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "@metamask/eth-sig-util": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", @@ -1232,144 +900,6 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.6.0.tgz", "integrity": "sha512-8vi4d50NNya/bQqCmaVzvHNmwHvS0OBKb7HNtuNwEE3scXWrP31fKQoGxNMT+KbzmrNZzatE3QK5p2gFONI/hg==" }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "dev": true, - "optional": true - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "dev": true, - "optional": true - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "dev": true, - "optional": true - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "dev": true, - "optional": true - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dev": true, - "optional": true, - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "dev": true, - "optional": true - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "dev": true, - "optional": true - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "dev": true, - "optional": true - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "dev": true, - "optional": true - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "dev": true, - "optional": true - }, - "@redux-saga/core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.1.3.tgz", - "integrity": "sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.6.3", - "@redux-saga/deferred": "^1.1.2", - "@redux-saga/delay-p": "^1.1.2", - "@redux-saga/is": "^1.1.2", - "@redux-saga/symbols": "^1.1.2", - "@redux-saga/types": "^1.1.0", - "redux": "^4.0.4", - "typescript-tuple": "^2.2.1" - }, - "dependencies": { - "redux": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", - "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.9.2" - } - } - } - }, - "@redux-saga/deferred": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@redux-saga/deferred/-/deferred-1.1.2.tgz", - "integrity": "sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ==", - "dev": true - }, - "@redux-saga/delay-p": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@redux-saga/delay-p/-/delay-p-1.1.2.tgz", - "integrity": "sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g==", - "dev": true, - "requires": { - "@redux-saga/symbols": "^1.1.2" - } - }, - "@redux-saga/is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@redux-saga/is/-/is-1.1.2.tgz", - "integrity": "sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w==", - "dev": true, - "requires": { - "@redux-saga/symbols": "^1.1.2", - "@redux-saga/types": "^1.1.0" - } - }, - "@redux-saga/symbols": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@redux-saga/symbols/-/symbols-1.1.2.tgz", - "integrity": "sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ==", - "dev": true - }, - "@redux-saga/types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@redux-saga/types/-/types-1.1.0.tgz", - "integrity": "sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg==", - "dev": true - }, "@sentry/core": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", @@ -1505,12 +1035,6 @@ } } }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, "@solidity-parser/parser": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.2.tgz", @@ -1520,111 +1044,194 @@ "antlr4ts": "^0.5.0-alpha.4" } }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true }, - "@truffle/abi-utils": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.2.14.tgz", - "integrity": "sha512-2eHoWSFVutt+xAN8+g2x6N3+TM0AMUmGS4iW7KJNfxDsGdMBNe+qqUrDKM0NnA16yxqk95yQztO5EmWPiXw3+Q==", - "dev": true, - "requires": { - "change-case": "3.0.2", - "faker": "5.5.3", - "fast-check": "^2.12.1" - } + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true }, - "@truffle/code-utils": { - "version": "1.2.34", - "resolved": "https://registry.npmjs.org/@truffle/code-utils/-/code-utils-1.2.34.tgz", - "integrity": "sha512-Ie+PTdJIvK90voInSvn7WEdAsXd1VUw0TsX2225OMGVyYRWiQdX0K6Vfkib7RSZvdUEaURFAaHo5r57l2RacWg==", + "@typechain/ethers-v5": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz", + "integrity": "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==", "dev": true, "requires": { - "cbor": "^5.1.0" + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" } }, - "@truffle/codec": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.13.2.tgz", - "integrity": "sha512-iViBnh6WV2BKaLboFC3xd9FGgC2Iybx4CHI+A5PPPqFkjnEycigdN8wnV2eqic9ptE1Ix7wsj9urZitnsnLhCA==", - "dev": true, + "@types/abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "dev": true + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", "requires": { - "@truffle/abi-utils": "^0.2.14", - "@truffle/compile-common": "^0.7.32", - "big.js": "^6.0.3", - "bn.js": "^5.1.3", - "cbor": "^5.1.0", - "debug": "^4.3.1", - "lodash": "^4.17.21", - "semver": "^7.3.4", - "utf8": "^3.0.0", - "web3-utils": "1.7.4" + "@types/node": "*" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" } } }, - "@truffle/compile-common": { - "version": "0.7.32", - "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.7.32.tgz", - "integrity": "sha512-SzIxwwQj8mJwoa7/kjkAslGenB4NejhmRHmdWdxNS5fqg2XqKhmSJcjir5qFjjvNzjcFZGecLg4EOm1Hj6letw==", - "dev": true, - "requires": { - "@truffle/error": "^0.1.0", - "colors": "1.4.0" - } + "@types/chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "dev": true }, - "@truffle/config": { - "version": "1.3.31", - "resolved": "https://registry.npmjs.org/@truffle/config/-/config-1.3.31.tgz", - "integrity": "sha512-RTXtRiFrzUT1WVmP8KdBl/DJ2b9GV77gOYSZ3NILuSrEL8IzWq57F1G/9rg5jq1v8b5JLDd7db5Yitn53ipBdA==", + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/level-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", + "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", + "dev": true + }, + "@types/levelup": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", + "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", "dev": true, - "optional": true, "requires": { - "@truffle/error": "^0.1.0", - "@truffle/events": "^0.1.8", - "@truffle/provider": "^0.2.56", - "conf": "^10.0.2", - "find-up": "^2.1.0", - "lodash": "^4.17.21", - "original-require": "^1.0.1" + "@types/abstract-leveldown": "*", + "@types/level-errors": "*", + "@types/node": "*" + } + }, + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true + }, + "@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" + } + } + }, + "@types/prettier": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", + "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", + "dev": true + }, + "@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" + } + } + }, + "@types/sinon": { + "version": "10.0.12", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.12.tgz", + "integrity": "sha512-uWf4QJ4oky/GckJ1MYQxU52cgVDcXwBhDkpvLbi4EKoLPqLE4MOH6T/ttM33l3hi0oZ882G6oIzWv/oupRYSxQ==", + "dev": true, + "requires": { + "@types/sinonjs__fake-timers": "*" + } + }, + "@types/sinon-chai": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, + "@types/underscore": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", + "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", + "dev": true + }, + "@types/web3": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", + "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", + "dev": true, + "requires": { + "@types/bn.js": "*", + "@types/underscore": "*" } }, - "@truffle/dashboard-message-bus-client": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.1.tgz", - "integrity": "sha512-tLcLxfnk8fa8m6gnnIiuIkJXMwOnm1gX60hXis091bEokJaR1/RYEdDQsFxy8/XkJmOOEfQ0NRD5ZPXn0KYvjA==", + "@typescript-eslint/eslint-plugin": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", + "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", "dev": true, - "optional": true, "requires": { - "@truffle/dashboard-message-bus-common": "^0.1.1", - "@truffle/promise-tracker": "^0.1.0", - "axios": "^0.24.0", - "debug": "^4.3.1", - "delay": "^5.0.0", - "isomorphic-ws": "^4.0.1", - "tiny-typed-emitter": "^2.1.0", - "ws": "^7.2.0" + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/type-utils": "5.30.0", + "@typescript-eslint/utils": "5.30.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "dependencies": { "debug": { @@ -1632,7 +1239,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "optional": true, "requires": { "ms": "2.1.2" } @@ -1641,159 +1247,58 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "optional": true - }, - "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true, - "optional": true + "dev": true } } }, - "@truffle/dashboard-message-bus-common": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@truffle/dashboard-message-bus-common/-/dashboard-message-bus-common-0.1.1.tgz", - "integrity": "sha512-DqrP2IQeao2u3en/csj9MwmEk7KKgLfvyHMwxrU6NyFXQ0Rs6F0AycpGTDivnoowVxqJohA+aut4IYHQuvwH8A==", + "@typescript-eslint/parser": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", + "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", "dev": true, - "optional": true - }, - "@truffle/db": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@truffle/db/-/db-1.0.12.tgz", - "integrity": "sha512-/7T3kHsMgih/QjtcTInllyo5W9OmAPCA+faHHGLgm0G76gML738NOwz3T/JZhjMKnQabYulZeWid0sjUlzlIPg==", - "dev": true, - "optional": true, - "requires": { - "@graphql-tools/delegate": "^8.4.3", - "@graphql-tools/schema": "^8.3.1", - "@truffle/abi-utils": "^0.2.14", - "@truffle/code-utils": "^1.2.34", - "@truffle/config": "^1.3.31", - "abstract-leveldown": "^7.2.0", - "apollo-server": "^3.6.3", - "debug": "^4.3.1", - "fs-extra": "^9.1.0", - "graphql": "^15.3.0", - "graphql-tag": "^2.11.0", - "json-stable-stringify": "^1.0.1", - "pascal-case": "^2.0.1", - "pluralize": "^8.0.0", - "pouchdb": "7.3.0", - "pouchdb-adapter-memory": "^7.1.1", - "pouchdb-adapter-node-websql": "^7.0.0", - "pouchdb-debug": "^7.1.1", - "pouchdb-find": "^7.0.0", - "web3-utils": "1.7.4" + "requires": { + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", + "debug": "^4.3.4" }, "dependencies": { - "abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "dev": true, - "optional": true, - "requires": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "optional": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "optional": true, "requires": { "ms": "2.1.2" } }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "optional": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "optional": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "optional": true + "dev": true } } }, - "@truffle/db-loader": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.1.22.tgz", - "integrity": "sha512-n1ljxscIaci6r0qbJMw34ng2IQGK3lXMoowO5ohP9Gwaqxv+atNLsV7s/6YVmGgsLV8cDNIEZoKKnRh/EDJO4g==", + "@typescript-eslint/scope-manager": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", + "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", "dev": true, "requires": { - "@truffle/db": "^1.0.12" + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0" } }, - "@truffle/debugger": { - "version": "10.0.16", - "resolved": "https://registry.npmjs.org/@truffle/debugger/-/debugger-10.0.16.tgz", - "integrity": "sha512-poXnJ+fLA2oTMHBhfuML4o1bMtersDVWypATi+YXxCvebVMUQMgOv1baVYDl0pK/J3FaLQSI1W7x8B6415f7cQ==", + "@typescript-eslint/type-utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", + "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", "dev": true, "requires": { - "@truffle/abi-utils": "^0.2.14", - "@truffle/codec": "^0.13.2", - "@truffle/source-map-utils": "^1.3.88", - "bn.js": "^5.1.3", - "debug": "^4.3.1", - "json-pointer": "^0.6.1", - "json-stable-stringify": "^1.0.1", - "lodash": "^4.17.21", - "redux": "^3.7.2", - "redux-saga": "1.0.0", - "reselect-tree": "^1.3.7", - "semver": "^7.3.4", - "web3": "1.7.4", - "web3-eth-abi": "1.7.4" + "@typescript-eslint/utils": "5.30.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" }, "dependencies": { "debug": { @@ -1813,24 +1318,25 @@ } } }, - "@truffle/error": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.1.0.tgz", - "integrity": "sha512-RbUfp5VreNhsa2Q4YbBjz18rOQI909pG32bghl1hulO7IpvcqTS+C3Ge5cNbiWQ1WGzy1wIeKLW0tmQtHFB7qg==", + "@typescript-eslint/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", + "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", "dev": true }, - "@truffle/events": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@truffle/events/-/events-0.1.8.tgz", - "integrity": "sha512-oK+nnV9ToCk1qKW01l+bojV61sCj1zljcS5+xBZ9Dteb52mQ9tpsy6xuQXVcsHAhZOQ4Gz2S3bTrlvjU4AyeCQ==", + "@typescript-eslint/typescript-estree": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", + "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", "dev": true, - "optional": true, "requires": { - "@truffle/dashboard-message-bus-client": "^0.1.1", - "@truffle/spinners": "^0.2.0", - "debug": "^4.3.1", - "emittery": "^0.4.1", - "web3-utils": "1.7.4" + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "dependencies": { "debug": { @@ -1838,7 +1344,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "optional": true, "requires": { "ms": "2.1.2" } @@ -1847,57 +1352,80 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "optional": true + "dev": true } } }, - "@truffle/hdwallet-provider": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-1.7.0.tgz", - "integrity": "sha512-nT7BPJJ2jPCLJc5uZdVtRnRMny5he5d3kO9Hi80ZSqe5xlnK905grBptM/+CwOfbeqHKQirI1btwm6r3wIBM8A==", + "@typescript-eslint/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", "dev": true, "requires": { - "@ethereumjs/common": "^2.4.0", - "@ethereumjs/tx": "^3.3.0", - "@trufflesuite/web3-provider-engine": "15.0.14", - "eth-sig-util": "^3.0.1", - "ethereum-cryptography": "^0.1.3", - "ethereum-protocol": "^1.0.1", - "ethereumjs-util": "^6.1.0", - "ethereumjs-wallet": "^1.0.1" + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" } }, - "@truffle/interface-adapter": { - "version": "0.5.18", - "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.18.tgz", - "integrity": "sha512-OPrz7bf+TDjZGruXzm6d08SpFNGERctf4O9uC6IJjNmjvKtdEYcLY3DTXOZT6I9PmrViCJ+dC5VlZD5IaamQnQ==", + "@typescript-eslint/visitor-keys": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", + "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", "dev": true, - "optional": true, "requires": { - "bn.js": "^5.1.3", - "ethers": "^4.0.32", - "web3": "1.7.4" + "@typescript-eslint/types": "5.30.0", + "eslint-visitor-keys": "^3.3.0" } }, - "@truffle/promise-tracker": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.0.tgz", - "integrity": "sha512-XH9gf7Vfgn4iPnERpJJPFSob85LXeKg8tkoUZku8JdAYUNIjVztLVJQwh54exsz7Npe6RPh/Hcj8Tiw65uooiA==", + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, - "optional": true + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true }, - "@truffle/provider": { - "version": "0.2.56", - "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.56.tgz", - "integrity": "sha512-9mz03psTeWkL45IrF3NUTiKO46HUi+9Lkco3rVjqzUQ+5rAhld0TwOljKbLvVKbDFtHl5LVuC+H4uQP8fpoXSg==", + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, - "optional": true, "requires": { - "@truffle/error": "^0.1.0", - "@truffle/interface-adapter": "^0.5.18", - "debug": "^4.3.1", - "web3": "1.7.4" + "debug": "4" }, "dependencies": { "debug": { @@ -1905,7 +1433,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "optional": true, "requires": { "ms": "2.1.2" } @@ -1914,7238 +1441,2119 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "optional": true + "dev": true } } }, - "@truffle/source-map-utils": { - "version": "1.3.88", - "resolved": "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.88.tgz", - "integrity": "sha512-8PMvCR+l2TpyEO5CV5uA6w87w7Nqqhd5zM0ukwYhfrTAmBqNNPk+pWYAjaL7fVThDeaOkVy+aoOo0rUW5SzAfw==", + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { - "@truffle/code-utils": "^1.2.34", - "@truffle/codec": "^0.13.2", - "debug": "^4.3.1", - "json-pointer": "^0.6.1", - "node-interval-tree": "^1.3.3", - "web3-utils": "1.7.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, - "@truffle/spinners": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@truffle/spinners/-/spinners-0.2.0.tgz", - "integrity": "sha512-rX0qA7GRDzN2ILClUIifMrVzF9EMR9b23CNasJkBgLBvqp1xKwdMbHG3IwUTYelGQtnGQmZ4UZQsBdDb6wf1Tw==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "optional": true, "requires": { - "@trufflesuite/spinnies": "^0.1.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "@trufflesuite/eth-json-rpc-filters": { - "version": "4.1.2-1", - "resolved": "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-filters/-/eth-json-rpc-filters-4.1.2-1.tgz", - "integrity": "sha512-/MChvC5dw2ck9NU1cZmdovCz2VKbOeIyR4tcxDvA5sT+NaL0rA2/R5U0yI7zsbo1zD+pgqav77rQHTzpUdDNJQ==", - "dev": true, - "requires": { - "@trufflesuite/eth-json-rpc-middleware": "^4.4.2-0", - "await-semaphore": "^0.1.3", - "eth-query": "^2.1.2", - "json-rpc-engine": "^5.1.3", - "lodash.flatmap": "^4.5.0", - "safe-event-emitter": "^1.0.1" - } + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true }, - "@trufflesuite/eth-json-rpc-infura": { - "version": "4.0.3-0", - "resolved": "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-infura/-/eth-json-rpc-infura-4.0.3-0.tgz", - "integrity": "sha512-xaUanOmo0YLqRsL0SfXpFienhdw5bpQ1WEXxMTRi57az4lwpZBv4tFUDvcerdwJrxX9wQqNmgUgd1BrR01dumw==", + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { - "@trufflesuite/eth-json-rpc-middleware": "^4.4.2-1", - "cross-fetch": "^2.1.1", - "eth-json-rpc-errors": "^1.0.1", - "json-rpc-engine": "^5.1.3" - }, - "dependencies": { - "eth-json-rpc-errors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz", - "integrity": "sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg==", - "dev": true, - "requires": { - "fast-safe-stringify": "^2.0.6" - } - } - } - }, - "@trufflesuite/eth-json-rpc-middleware": { - "version": "4.4.2-1", - "resolved": "https://registry.npmjs.org/@trufflesuite/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.2-1.tgz", - "integrity": "sha512-iEy9H8ja7/8aYES5HfrepGBKU9n/Y4OabBJEklVd/zIBlhCCBAWBqkIZgXt11nBXO/rYAeKwYuE3puH3ByYnLA==", - "dev": true, - "requires": { - "@trufflesuite/eth-sig-util": "^1.4.2", - "btoa": "^1.2.1", - "clone": "^2.1.1", - "eth-json-rpc-errors": "^1.0.1", - "eth-query": "^2.1.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.7", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.6.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^5.1.3", - "json-stable-stringify": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" + "type-fest": "^0.21.3" }, "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true - }, - "eth-json-rpc-errors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz", - "integrity": "sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg==", - "dev": true, - "requires": { - "fast-safe-stringify": "^2.0.6" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } } } }, - "@trufflesuite/eth-sig-util": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@trufflesuite/eth-sig-util/-/eth-sig-util-1.4.2.tgz", - "integrity": "sha512-+GyfN6b0LNW77hbQlH3ufZ/1eCON7mMrGym6tdYf7xiNw9Vv3jBO72bmmos1EId2NgBvPMhmYYm6DSLQFTmzrA==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^5.1.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } + "color-convert": "^1.9.0" } }, - "@trufflesuite/spinnies": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@trufflesuite/spinnies/-/spinnies-0.1.0.tgz", - "integrity": "sha512-22rVi7rECyAg9vsopa9jR84xQ9kSbjRxCYI9SPbHx4jjfRQODDzmVZtXLobUuXEQZYLgP1pXBtgY5kReb72E2g==", + "antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, - "optional": true, "requires": { - "chalk": "^4.1.2", - "cli-cursor": "^3.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "optional": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "optional": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@trufflesuite/web3-provider-engine": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@trufflesuite/web3-provider-engine/-/web3-provider-engine-15.0.14.tgz", - "integrity": "sha512-6/LoWvNMxYf0oaYzJldK2a9AdnkAdIeJhHW4nuUBAeO29eK9xezEaEYQ0ph1QRTaICxGxvn+1Azp4u8bQ8NEZw==", - "dev": true, - "requires": { - "@ethereumjs/tx": "^3.3.0", - "@trufflesuite/eth-json-rpc-filters": "^4.1.2-1", - "@trufflesuite/eth-json-rpc-infura": "^4.0.3-0", - "@trufflesuite/eth-json-rpc-middleware": "^4.4.2-1", - "@trufflesuite/eth-sig-util": "^1.4.2", - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^4.4.2", - "eth-json-rpc-errors": "^2.0.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "@typechain/ethers-v5": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz", - "integrity": "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==", + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "requires": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" + "lodash": "^4.17.14" } }, - "@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", - "dev": true - }, - "@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", + "async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", "dev": true, - "optional": true, "requires": { - "@types/node": "*" + "async": "^2.4.0" } }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" - } - } + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "optional": true, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", "requires": { - "@types/connect": "*", - "@types/node": "*" + "safe-buffer": "^5.0.1" } }, - "@types/chai": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", - "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "dev": true }, - "@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true, - "optional": true + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "optional": true, "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "@types/express-serve-static-core": { - "version": "4.17.29", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", - "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "optional": true, "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" + "fill-range": "^7.0.1" } }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dev": true, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", - "dev": true, - "optional": true + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "requires": { + "base-x": "^3.0.2" + } }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, - "optional": true - }, - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" - } + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true, - "optional": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true, - "optional": true + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" - } + "node-gyp-build": "^4.3.0" } }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dev": true, - "optional": true, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "requires": { - "@types/mime": "^1", - "@types/node": "*" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "@types/sinon": { - "version": "10.0.12", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.12.tgz", - "integrity": "sha512-uWf4QJ4oky/GckJ1MYQxU52cgVDcXwBhDkpvLbi4EKoLPqLE4MOH6T/ttM33l3hi0oZ882G6oIzWv/oupRYSxQ==", + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "@types/sinonjs__fake-timers": "*" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "@types/sinon-chai": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", - "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "@types/chai": "*", - "@types/sinon": "*" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" } }, - "@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", - "dev": true - }, - "@types/underscore": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", - "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, - "@types/web3": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", - "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", - "dev": true, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "requires": { - "@types/bn.js": "*", - "@types/underscore": "*" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "@typescript-eslint/eslint-plugin": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", - "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/type-utils": "5.30.0", - "@typescript-eslint/utils": "5.30.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "ms": "2.1.2" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, - "@typescript-eslint/parser": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", - "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", - "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "color-name": "1.1.3" } }, - "@typescript-eslint/scope-manager": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", - "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" } }, - "@typescript-eslint/type-utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", - "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", + "command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.30.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true } } }, - "@typescript-eslint/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", - "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", "dev": true }, - "@typescript-eslint/typescript-estree": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", - "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, - "@typescript-eslint/visitor-keys": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", - "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "eslint-visitor-keys": "^3.3.0" - } + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "core-js-pure": { + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", + "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==", "dev": true }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "optional": true + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { - "event-target-shim": "^5.0.0" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", - "dev": true, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { - "xtend": "~4.0.0" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, - "aes-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", - "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==", + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "path-type": "^4.0.0" } }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "esutils": "^2.0.2" } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } } }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", "dev": true, - "optional": true, "requires": { - "ajv": "^8.0.0" + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" }, "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "abstract-leveldown": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", "dev": true, - "optional": true, "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" } }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, + "requires": { + "buffer": "^5.6.0" + } + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dev": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", "dev": true, - "optional": true + "requires": { + "xtend": "^4.0.2" + } } } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } + "ansi-colors": "^4.1.1" } }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "prr": "~1.0.1" } }, - "apollo-datasource": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-3.3.2.tgz", - "integrity": "sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg==", - "dev": true, - "optional": true, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", "requires": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "apollo-server-env": "^4.2.1" - } - }, - "apollo-reporting-protobuf": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.3.1.tgz", - "integrity": "sha512-tyvj3Vj71TCh6c8PtdHOLgHHBSJ05DF/A/Po3q8yfHTBkOPcOJZE/GGN/PT/pwKg7HHxKcAeHDw7+xciVvGx0w==", - "dev": true, - "optional": true, - "requires": { - "@apollo/protobufjs": "1.2.2" - } - }, - "apollo-server": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.9.0.tgz", - "integrity": "sha512-g80gXDuK8fl2W0fQF/hEyeoO9AU+sO2gBzeJAYUyGLotYc+oL/Y3mTRk5GB8C7cXUXCg5uvWbUj8va0E5UZE7w==", - "dev": true, - "optional": true, - "requires": { - "@types/express": "4.17.13", - "apollo-server-core": "^3.9.0", - "apollo-server-express": "^3.9.0", - "express": "^4.17.1" - } - }, - "apollo-server-core": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.9.0.tgz", - "integrity": "sha512-WS54C33cTriDaBIcj7ijWv/fgeJICcrQKlP1Cn6pnZp/eumpMraezLeJ3gFWAXprOuR2E3fZe64lNlup0fMu8w==", - "dev": true, - "optional": true, - "requires": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "@apollo/utils.logger": "^1.0.0", - "@apollo/utils.usagereporting": "^1.0.0", - "@apollographql/apollo-tools": "^0.5.3", - "@apollographql/graphql-playground-html": "1.6.29", - "@graphql-tools/mock": "^8.1.2", - "@graphql-tools/schema": "^8.0.0", - "@josephg/resolvable": "^1.0.0", - "apollo-datasource": "^3.3.2", - "apollo-reporting-protobuf": "^3.3.1", - "apollo-server-env": "^4.2.1", - "apollo-server-errors": "^3.3.1", - "apollo-server-plugin-base": "^3.6.1", - "apollo-server-types": "^3.6.1", - "async-retry": "^1.2.1", - "fast-json-stable-stringify": "^2.1.0", - "graphql-tag": "^2.11.0", - "loglevel": "^1.6.8", - "lru-cache": "^6.0.0", - "sha.js": "^2.4.11", - "uuid": "^8.0.0", - "whatwg-mimetype": "^3.0.0" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true - } + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" } }, - "apollo-server-env": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-4.2.1.tgz", - "integrity": "sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g==", - "dev": true, - "optional": true, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { - "node-fetch": "^2.6.7" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "optional": true, - "requires": { - "whatwg-url": "^5.0.0" - } - } + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "apollo-server-errors": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz", - "integrity": "sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==", - "dev": true, - "optional": true - }, - "apollo-server-express": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.9.0.tgz", - "integrity": "sha512-scSeHy9iB7W3OiF3uLQEzad9Jm9tEfDF8ACsJb2P+xX69uqg6zizsrQvj3qRhazCO7FKMcMu9zQFR0hy7zKbUA==", - "dev": true, - "optional": true, + "es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", "requires": { - "@types/accepts": "^1.3.5", - "@types/body-parser": "1.19.2", - "@types/cors": "2.8.12", - "@types/express": "4.17.13", - "@types/express-serve-static-core": "4.17.29", - "accepts": "^1.3.5", - "apollo-server-core": "^3.9.0", - "apollo-server-types": "^3.6.1", - "body-parser": "^1.19.0", - "cors": "^2.8.5", - "parseurl": "^1.3.3" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" } }, - "apollo-server-plugin-base": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.6.1.tgz", - "integrity": "sha512-bFpxzWO0LTTtSAkGVBeaAtnQXJ5ZCi8eaLN/eMSju8RByifmF3Kr6gAqcOZhOH/geQEt3Y6G8n3bR0eHTGxljQ==", - "dev": true, - "optional": true, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "requires": { - "apollo-server-types": "^3.6.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "apollo-server-types": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.6.1.tgz", - "integrity": "sha512-XOPlBlRdwP00PrG03OffGGWuzyei+J9t1rAnvyHsSdP0JCgQWigHJfvL1N9Bhgi4UTjl9JadKOJh1znLNlqIFQ==", - "dev": true, - "optional": true, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "requires": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "@apollo/utils.logger": "^1.0.0", - "apollo-reporting-protobuf": "^3.3.1", - "apollo-server-env": "^4.2.1" + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "app-module-path": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", - "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "optional": true + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "eslint": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", + "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", "dev": true, - "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "optional": true + "requires": { + "color-convert": "^2.0.1" + } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "optional": true + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "ms": "2.1.2" } - } - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "argsarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", - "integrity": "sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg==", - "dev": true, - "optional": true - }, - "array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "requires": { - "async": "^2.4.0" + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true }, - "async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, - "optional": true, "requires": { - "retry": "0.13.1" + "prettier-linter-helpers": "^1.0.0" } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "optional": true - }, - "atomically": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", - "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", - "dev": true, - "optional": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "await-semaphore": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/await-semaphore/-/await-semaphore-0.1.3.tgz", - "integrity": "sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "optional": true, "requires": { - "follow-redirects": "^1.14.4" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" } }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" + "eslint-visitor-keys": "^2.0.0" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } }, - "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" } }, - "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, - "backoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "precond": "0.2" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", "requires": { - "tweetnacl": "^0.14.3" + "js-sha3": "^0.8.0" } }, - "big.js": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.0.tgz", - "integrity": "sha512-paIKvJiAaOYdLt6MfnvxkDo64lTOV257XYJyX3oJnJQocIclUn+48k6ZerH/c5FxWE6DGJu1TKDYis7tqHg9kg==", - "dev": true - }, - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", "dev": true, "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" }, "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "@types/node": "*" } }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "dev": true, "requires": { - "side-channel": "^1.0.4" + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } } } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "ethers": { + "version": "5.6.9", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", + "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", + "dev": true, + "requires": { + "@ethersproject/abi": "5.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + } } }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true }, - "browserslist": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", - "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001359", - "electron-to-chromium": "^1.4.172", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.4" + "@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" } }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, "requires": { - "base-x": "^3.0.2" + "reusify": "^1.0.4" } }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" + "flat-cache": "^3.0.4" } }, - "btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", - "dev": true - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "to-regex-range": "^5.0.1" } }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, "requires": { - "node-gyp-build": "^4.3.0" + "array-back": "^3.0.1" } }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "locate-path": "^2.0.0" }, "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "pump": "^3.0.0" + "p-try": "^1.0.0" } }, - "lowercase-keys": { + "p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true + } } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001363", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001363.tgz", - "integrity": "sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg==", + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", "dev": true }, - "catering": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", - "dev": true, - "optional": true - }, - "cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", - "dev": true, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "requires": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" + "is-callable": "^1.1.3" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } + "fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true }, - "change-case": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", - "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", - "dev": true, - "requires": { - "camel-case": "^3.0.0", - "constant-case": "^2.0.0", - "dot-case": "^2.1.0", - "header-case": "^1.0.0", - "is-lower-case": "^1.1.0", - "is-upper-case": "^1.1.0", - "lower-case": "^1.1.1", - "lower-case-first": "^1.0.0", - "no-case": "^2.3.2", - "param-case": "^2.1.0", - "pascal-case": "^2.0.0", - "path-case": "^2.1.0", - "sentence-case": "^2.1.0", - "snake-case": "^2.1.0", - "swap-case": "^1.1.0", - "title-case": "^2.1.0", - "upper-case": "^1.1.1", - "upper-case-first": "^1.1.0" - } - }, - "checkpoint-store": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", - "integrity": "sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==", - "dev": true, - "requires": { - "functional-red-black-tree": "^1.0.1" - } + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "dev": true, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "requires": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "dependencies": { - "multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "dev": true, - "requires": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - } + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" } }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" } }, - "class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "optional": true, "requires": { - "restore-cursor": "^3.1.0" + "is-glob": "^4.0.1" } }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" } }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "dev": true, - "optional": true + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "hardhat": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.9.2.tgz", + "integrity": "sha512-elTcUK1EdFverWinybQ+DoJzsM6sgiHUYs0ZYNNXMfESty6ESHiFSwkfJsC88/q09vmIz6YVaMh73BYnYd+feQ==", "dev": true, "requires": { - "mimic-response": "^1.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true, - "optional": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "requires": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - } - }, - "command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "requires": { - "array-back": "^4.0.2", + "@ethereumjs/block": "^3.6.0", + "@ethereumjs/blockchain": "^5.5.0", + "@ethereumjs/common": "^2.6.0", + "@ethereumjs/tx": "^3.4.0", + "@ethereumjs/vm": "^5.6.0", + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@sentry/node": "^5.18.1", + "@solidity-parser/parser": "^0.14.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "abort-controller": "^3.0.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "conf": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/conf/-/conf-10.1.2.tgz", - "integrity": "sha512-o9Fv1Mv+6A0JpoayQ8JleNp3hhkbOJP/Re/Q+QqxMPHPkABVsRjQGWZn9A5GcqLiTNC6d89p2PB5ZhHVDSMwyg==", - "dev": true, - "optional": true, - "requires": { - "ajv": "^8.6.3", - "ajv-formats": "^2.1.1", - "atomically": "^1.7.0", - "debounce-fn": "^4.0.0", - "dot-prop": "^6.0.1", - "env-paths": "^2.2.1", - "json-schema-typed": "^7.0.3", - "onetime": "^5.1.2", - "pkg-up": "^3.1.0", - "semver": "^7.3.5" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "optional": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "optional": true - } - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true, - "optional": true - }, - "constant-case": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", - "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", - "dev": true, - "requires": { - "snake-case": "^2.1.0", - "upper-case": "^1.1.1" - } - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", - "dev": true, - "requires": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" - }, - "core-js-compat": { - "version": "3.23.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.3.tgz", - "integrity": "sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw==", - "dev": true, - "requires": { - "browserslist": "^4.21.0", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-js-pure": { - "version": "3.23.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", - "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-fetch": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", - "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", - "dev": true, - "requires": { - "node-fetch": "^2.6.7", - "whatwg-fetch": "^2.0.4" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "cssfilter": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", - "dev": true, - "optional": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "dataloader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.1.0.tgz", - "integrity": "sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==", - "dev": true, - "optional": true - }, - "debounce-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", - "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", - "dev": true, - "optional": true, - "requires": { - "mimic-fn": "^3.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "dev": true - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", - "dev": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delay": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", - "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true, - "optional": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "optional": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "dot-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", - "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "optional": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true - }, - "double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==", - "dev": true, - "optional": true - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.177", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.177.tgz", - "integrity": "sha512-FYPir3NSBEGexSZUEeht81oVhHfLFl6mhUKSkjHN/iB/TwEIt/WHQrqVGfTLN5gQxwJCQkIJBe05eOXjI7omgg==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emittery": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.4.1.tgz", - "integrity": "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==", - "dev": true, - "optional": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "requires": { - "buffer": "^5.6.0" - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "end-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz", - "integrity": "sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA==", - "dev": true, - "optional": true, - "requires": { - "write-stream": "~0.4.3" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "eslint": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", - "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "eth-block-tracker": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", - "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", - "dev": true, - "requires": { - "@babel/plugin-transform-runtime": "^7.5.5", - "@babel/runtime": "^7.5.5", - "eth-query": "^2.1.0", - "json-rpc-random-id": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", - "dev": true, - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true - } - } - }, - "eth-json-rpc-errors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.2.tgz", - "integrity": "sha512-uBCRM2w2ewusRHGxN8JhcuOb2RN3ueAOYH/0BhqdFmQkZx5lj5+fLKTz0mIVOzd4FG5/kUksCzCD7eTEim6gaA==", - "dev": true, - "requires": { - "fast-safe-stringify": "^2.0.6" - } - }, - "eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } - } - }, - "eth-query": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", - "integrity": "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==", - "dev": true, - "requires": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "eth-rpc-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz", - "integrity": "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==", - "dev": true, - "requires": { - "fast-safe-stringify": "^2.0.6" - } - }, - "eth-sig-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-3.0.1.tgz", - "integrity": "sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ==", - "dev": true, - "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - } - } - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==", - "dev": true - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereum-protocol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz", - "integrity": "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==", - "dev": true - }, - "ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", - "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", - "dev": true, - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", - "dev": true, - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-common": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", - "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", - "dev": true - }, - "ethereumjs-tx": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", - "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", - "dev": true, - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==", - "dev": true - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", - "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", - "dev": true, - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-block": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", - "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", - "dev": true, - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", - "dev": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - } - } - }, - "ethereumjs-wallet": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz", - "integrity": "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==", - "dev": true, - "requires": { - "aes-js": "^3.1.2", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^7.1.2", - "randombytes": "^2.1.0", - "scrypt-js": "^3.0.1", - "utf8": "^3.0.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } - }, - "ethers": { - "version": "4.0.49", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", - "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", - "dev": true, - "optional": true, - "requires": { - "aes-js": "3.0.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true, - "optional": true - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "optional": true - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "optional": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true, - "optional": true - }, - "scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", - "dev": true, - "optional": true - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", - "dev": true, - "optional": true - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "dev": true, - "optional": true - } - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true - }, - "fake-merkle-patricia-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", - "integrity": "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==", - "dev": true, - "requires": { - "checkpoint-store": "^1.1.0" - } - }, - "faker": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", - "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==", - "dev": true - }, - "fast-check": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.25.0.tgz", - "integrity": "sha512-wRUT2KD2lAmT75WNIJIHECawoUUMHM0I5jrlLXGtGeqmPL8jl/EldUDjY1VCp6fDY8yflyfUeIOsOBrIbIiArg==", - "dev": true, - "requires": { - "pure-rand": "^5.0.1" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fetch-cookie": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.11.0.tgz", - "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==", - "dev": true, - "optional": true, - "requires": { - "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0" - } - }, - "fetch-ponyfill": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz", - "integrity": "sha512-knK9sGskIg2T7OnYLdZ2hZXn0CtDrAIBxYQLpmEf0BqfdWnwmM1weccUl5+4EdA44tzNSFAuxITPbXtPehUB3g==", - "dev": true, - "requires": { - "node-fetch": "~1.7.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "requires": { - "array-back": "^3.0.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - }, - "dependencies": { - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - } - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "foreach": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "ganache": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.2.0.tgz", - "integrity": "sha512-KsKysVeVN6CALALOkIPSIxNZbl5s2/DE6Z0lFpj05gH1XsvYMit3djP4LxpxdjUfSSyb9gIPEOzqMw7v56ihJg==", - "dev": true, - "requires": { - "@trufflesuite/bigint-buffer": "1.1.9", - "bufferutil": "4.0.5", - "emittery": "0.10.0", - "keccak": "3.0.1", - "leveldown": "6.1.0", - "secp256k1": "4.0.2", - "utf-8-validate": "5.0.7" - }, - "dependencies": { - "@trufflesuite/bigint-buffer": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz", - "integrity": "sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==", - "dev": true, - "requires": { - "node-gyp-build": "4.3.0" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "catering": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz", - "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==", - "dev": true, - "requires": { - "queue-tick": "^1.0.0" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "dev": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "keccak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", - "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "leveldown": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", - "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", - "dev": true, - "requires": { - "abstract-leveldown": "^7.2.0", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "dev": true, - "requires": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - } - }, - "level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "dev": true, - "requires": { - "catering": "^2.1.0" - } - }, - "level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "dev": true - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - }, - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "queue-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", - "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", - "dev": true - }, - "secp256k1": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.2.tgz", - "integrity": "sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==", - "dev": true, - "requires": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - } - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "graphql": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", - "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", - "dev": true, - "optional": true - }, - "graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", - "dev": true, - "optional": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "hardhat": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.9.2.tgz", - "integrity": "sha512-elTcUK1EdFverWinybQ+DoJzsM6sgiHUYs0ZYNNXMfESty6ESHiFSwkfJsC88/q09vmIz6YVaMh73BYnYd+feQ==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.0", - "@ethereumjs/blockchain": "^5.5.0", - "@ethereumjs/common": "^2.6.0", - "@ethereumjs/tx": "^3.4.0", - "@ethereumjs/vm": "^5.6.0", - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@sentry/node": "^5.18.1", - "@solidity-parser/parser": "^0.14.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^0.1.2", - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^7.1.3", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "^7.1.3", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "lodash": "^4.17.11", - "merkle-patricia-tree": "^4.2.2", - "mnemonist": "^0.38.0", - "mocha": "^9.2.0", - "p-map": "^4.0.0", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "slash": "^3.0.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "true-case-path": "^2.2.1", - "tsort": "0.0.1", - "undici": "^4.14.1", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - } - }, - "merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "requires": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true, - "optional": true - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "header-case": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", - "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.3" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "dev": true, - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", - "dev": true - } - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "optional": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "requires": { - "fp-ts": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "optional": true - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", - "integrity": "sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" - }, - "is-lower-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", - "dev": true, - "requires": { - "lower-case": "^1.1.0" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "optional": true - }, - "is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-upper-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", - "dev": true, - "requires": { - "upper-case": "^1.1.0" - } - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "dev": true, - "optional": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "dev": true - }, - "json-pointer": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", - "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", - "dev": true, - "requires": { - "foreach": "^2.0.4" - } - }, - "json-rpc-engine": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", - "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", - "dev": true, - "requires": { - "eth-rpc-errors": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "json-rpc-random-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==", - "dev": true - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-schema-typed": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", - "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==", - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==", - "dev": true - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "level": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", - "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", - "dev": true, - "optional": true, - "requires": { - "level-js": "^5.0.0", - "level-packager": "^5.1.0", - "leveldown": "^5.4.0" - } - }, - "level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==", - "dev": true - }, - "level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "dev": true, - "optional": true, - "requires": { - "catering": "^2.1.0" - } - }, - "level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - } - } - }, - "level-js": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", - "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", - "dev": true, - "optional": true, - "requires": { - "abstract-leveldown": "~6.2.3", - "buffer": "^5.5.0", - "inherits": "^2.0.3", - "ltgt": "^2.1.2" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "optional": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true, - "optional": true - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "optional": true, - "requires": { - "xtend": "^4.0.2" - } - } - } - }, - "level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dev": true, - "requires": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", - "dev": true - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - }, - "memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - } - } - } - }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dev": true, - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - } - } - }, - "level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "dev": true, - "optional": true - }, - "level-write-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz", - "integrity": "sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw==", - "dev": true, - "optional": true, - "requires": { - "end-stream": "~0.1.0" - } - }, - "level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==", - "dev": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", - "dev": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "leveldown": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", - "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", - "dev": true, - "optional": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "~4.1.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "optional": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true, - "optional": true - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "optional": true, - "requires": { - "xtend": "^4.0.2" - } - }, - "node-gyp-build": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", - "dev": true, - "optional": true - } - } - }, - "levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", - "dev": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - }, - "dependencies": { - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - } - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "optional": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.flatmap": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", - "integrity": "sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true, - "optional": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "loglevel": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", - "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", - "dev": true, - "optional": true - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "dev": true, - "optional": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", - "dev": true - }, - "lower-case-first": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", - "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", - "dev": true, - "requires": { - "lower-case": "^1.1.2" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true - }, - "memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", - "dev": true, - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", - "dev": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - } - } - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "optional": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", - "dev": true, - "requires": { - "mkdirp": "*" - } - }, - "mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "requires": { - "obliterator": "^2.0.0" - } - }, - "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^0.1.2", + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^7.1.3", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "^7.1.3", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "lodash": "^4.17.11", + "merkle-patricia-tree": "^4.2.2", + "mnemonist": "^0.38.0", + "mocha": "^9.2.0", + "p-map": "^4.0.0", + "qs": "^6.7.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "slash": "^3.0.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "true-case-path": "^2.2.1", + "tsort": "0.0.1", + "undici": "^4.14.1", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "p-locate": "^5.0.0" + "ms": "2.1.2" } }, - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "requires": { - "p-limit": "^3.0.2" + "graceful-fs": "^4.1.6" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "level-ws": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" } - } - } - }, - "mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "dev": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "dev": true, - "requires": { - "varint": "^5.0.0" - } - }, - "multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - }, - "dependencies": { - "multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", + }, + "merkle-patricia-tree": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", + "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", "dev": true, "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" } - } - } - }, - "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", - "dev": true, - "optional": true - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", - "dev": true - }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true - }, - "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true, - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "needle": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", - "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, - "optional": true, "requires": { - "ms": "^2.1.1" + "side-channel": "^1.0.4" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, - "optional": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "path-parse": "^1.0.6" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "optional": true - } - } - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" - }, - "node-interval-tree": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/node-interval-tree/-/node-interval-tree-1.3.3.tgz", - "integrity": "sha512-K9vk96HdTK5fEipJwxSvIIqwTqr4e3HRJeJrNxBSeVMNSC/JWARRaX7etOLOuTmrRMeOI/K5TCJu3aWIwZiNTw==", - "dev": true, - "requires": { - "shallowequal": "^1.0.2" - } - }, - "node-pre-gyp": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", - "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", "dev": true, - "optional": true, "requires": { - "minimist": "^1.2.6" + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "ws": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", + "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", + "dev": true } } }, - "node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", - "dev": true + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } }, - "nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, - "noop-fn": { + "has-property-descriptors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/noop-fn/-/noop-fn-1.0.0.tgz", - "integrity": "sha512-pQ8vODlgXt2e7A3mIbFDlizkr46r75V+BJxVAyat8Jl7YmI513gG5cfyRL0FedKraoZ+VAouI1h4/IWpus5pcQ==", - "dev": true, - "optional": true - }, - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "optional": true, + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "get-intrinsic": "^1.1.1" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "optional": true, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "requires": { - "npm-normalize-package-bin": "^1.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" } }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true, - "optional": true + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } }, - "npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "dev": true, - "optional": true, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, - "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "optional": true + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" + "agent-base": "6", + "debug": "4" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", "dev": true }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "requires": { - "http-https": "^1.0.0" - } - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { - "wrappy": "1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "optional": true, - "requires": { - "mimic-fn": "^2.1.0" - } + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true }, - "openzeppelin-solidity": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/openzeppelin-solidity/-/openzeppelin-solidity-2.5.1.tgz", - "integrity": "sha512-oCGtQPLOou4su76IMr4XXJavy9a8OZmAXeUZ8diOdFznlL/mlkIlYr7wajqCzH4S47nlKPS7m0+a2nilCTpVPQ==", + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "once": "^1.3.0", + "wrappy": "1" } }, - "original-require": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/original-require/-/original-require-1.0.1.tgz", - "integrity": "sha512-5vdKMbE58WaE61uVD+PKyh8xdM398UnjPBLotW2sjG5MzHARwta/+NtMBCBA0t2WQblGYBvq5vsiZpWokwno+A==", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "dev": true, - "optional": true + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", "dev": true, - "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "fp-ts": "^1.0.0" } }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "optional": true, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "requires": { - "p-try": "^2.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "optional": true, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "requires": { - "p-limit": "^2.0.0" + "has-bigints": "^1.0.1" } }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "aggregate-error": "^3.0.0" + "binary-extensions": "^2.0.0" } }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", - "dev": true, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "requires": { - "p-finally": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "optional": true + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", - "dev": true, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "requires": { - "no-case": "^2.2.0" + "has-tostringtag": "^1.0.0" } }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "requires": { - "callsites": "^3.0.0" + "has-tostringtag": "^1.0.0" } }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "is-extglob": "^2.1.1" } }, - "parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", - "dev": true + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "pascal-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", - "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", - "dev": true, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "requires": { - "camel-case": "^3.0.0", - "upper-case-first": "^1.1.0" + "has-tostringtag": "^1.0.0" } }, - "path-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", - "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", - "dev": true, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "requires": { - "no-case": "^2.2.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + } }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "call-bind": "^1.0.2" } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "optional": true, + "keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "optional": true, - "requires": { - "locate-path": "^3.0.0" - } - } + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" } }, - "pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", "dev": true, - "optional": true + "requires": { + "graceful-fs": "^4.1.9" + } }, - "pouchdb": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-7.3.0.tgz", - "integrity": "sha512-OwsIQGXsfx3TrU1pLruj6PGSwFH+h5k4hGNxFkZ76Um7/ZI8F5TzUHFrpldVVIhfXYi2vP31q0q7ot1FSLFYOw==", + "level-mem": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", + "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", "dev": true, - "optional": true, "requires": { - "abort-controller": "3.0.0", - "argsarray": "0.0.1", - "buffer-from": "1.1.2", - "clone-buffer": "1.0.0", - "double-ended-queue": "2.1.0-0", - "fetch-cookie": "0.11.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "level": "6.0.1", - "level-codec": "9.0.2", - "level-write-stream": "1.0.0", - "leveldown": "5.6.0", - "levelup": "4.4.0", - "ltgt": "2.2.1", - "node-fetch": "2.6.7", - "readable-stream": "1.1.14", - "spark-md5": "3.0.2", - "through2": "3.0.2", - "uuid": "8.3.2", - "vuvuzela": "1.0.3" + "level-packager": "^5.0.3", + "memdown": "^5.0.0" }, "dependencies": { "abstract-leveldown": { @@ -9153,7 +3561,6 @@ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", "dev": true, - "optional": true, "requires": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -9162,173 +3569,51 @@ "xtend": "~4.0.0" } }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "optional": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - } - }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "optional": true, - "requires": { - "buffer": "^5.6.0" - } + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", + "dev": true }, "level-concat-iterator": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true, - "optional": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "optional": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "optional": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "optional": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } + "dev": true }, "level-supports": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", "dev": true, - "optional": true, "requires": { "xtend": "^4.0.2" } }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "optional": true, - "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "optional": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "memdown": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", "dev": true, - "optional": true, "requires": { - "core-util-is": "~1.0.0", + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - }, - "dependencies": { - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true, - "optional": true - } + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true } } }, - "pouchdb-abstract-mapreduce": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.0.tgz", - "integrity": "sha512-+2fVt3SDh7D776lIGbYZOsKX5js1aUyUw7iJaTGitxSdQ2ObWSTrr3SUrj5Qo1CkgPXwRM3Tdoq/53JYAa2qCA==", - "dev": true, - "optional": true, - "requires": { - "pouchdb-binary-utils": "7.3.0", - "pouchdb-collate": "7.3.0", - "pouchdb-collections": "7.3.0", - "pouchdb-errors": "7.3.0", - "pouchdb-fetch": "7.3.0", - "pouchdb-mapreduce-utils": "7.3.0", - "pouchdb-md5": "7.3.0", - "pouchdb-utils": "7.3.0" - } - }, - "pouchdb-adapter-leveldb-core": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-leveldb-core/-/pouchdb-adapter-leveldb-core-7.3.0.tgz", - "integrity": "sha512-OyUsEae1JlqR2jSGMohP03gj6VANh9fDR/3nPIa1vYyoQWlwQzOS7knKqDaJm7Nui3JC5q/lWos7/FGZBFuF5Q==", - "dev": true, - "optional": true, - "requires": { - "argsarray": "0.0.1", - "buffer-from": "1.1.2", - "double-ended-queue": "2.1.0-0", - "levelup": "4.4.0", - "pouchdb-adapter-utils": "7.3.0", - "pouchdb-binary-utils": "7.3.0", - "pouchdb-collections": "7.3.0", - "pouchdb-errors": "7.3.0", - "pouchdb-json": "7.3.0", - "pouchdb-md5": "7.3.0", - "pouchdb-merge": "7.3.0", - "pouchdb-utils": "7.3.0", - "sublevel-pouchdb": "7.3.0", - "through2": "3.0.2" + "level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "dev": true, + "requires": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" }, "dependencies": { "abstract-leveldown": { @@ -9336,7 +3621,6 @@ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", "dev": true, - "optional": true, "requires": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -9350,7 +3634,6 @@ "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", "dev": true, - "optional": true, "requires": { "abstract-leveldown": "~6.2.1", "inherits": "^2.0.3" @@ -9360,15 +3643,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true, - "optional": true + "dev": true }, "level-errors": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", "dev": true, - "optional": true, "requires": { "errno": "~0.1.1" } @@ -9378,7 +3659,6 @@ "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", "dev": true, - "optional": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.4.0", @@ -9390,7 +3670,6 @@ "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", "dev": true, - "optional": true, "requires": { "xtend": "^4.0.2" } @@ -9400,7 +3679,6 @@ "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", "dev": true, - "optional": true, "requires": { "deferred-leveldown": "~5.3.0", "level-errors": "~2.0.0", @@ -9411,455 +3689,554 @@ } } }, - "pouchdb-adapter-memory": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-memory/-/pouchdb-adapter-memory-7.3.0.tgz", - "integrity": "sha512-nUdYi5KpbUa0uv0L3IJorpiUnIOBPxX9qplCX9i7JE8OtLPeLyKuX3WC+3M1//8Lmmxg3b1wXSNIod6FJy4wAQ==", + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "dev": true + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "optional": true, "requires": { - "memdown": "1.4.1", - "pouchdb-adapter-leveldb-core": "7.3.0", - "pouchdb-utils": "7.3.0" + "brace-expansion": "^1.1.7" } }, - "pouchdb-adapter-node-websql": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-node-websql/-/pouchdb-adapter-node-websql-7.0.0.tgz", - "integrity": "sha512-fNaOMO8bvMrRTSfmH4RSLSpgnKahRcCA7Z0jg732PwRbGvvMdGbreZwvKPPD1fg2tm2ZwwiXWK2G3+oXyoqZYw==", + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "requires": { + "obliterator": "^2.0.0" + } + }, + "mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, - "optional": true, "requires": { - "pouchdb-adapter-websql-core": "7.0.0", - "pouchdb-utils": "7.0.0", - "websql": "1.0.0" + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { - "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", - "dev": true, - "optional": true - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true, - "optional": true - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true, - "optional": true - }, - "pouchdb-binary-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.0.0.tgz", - "integrity": "sha512-yUktdOPIPvOVouCjJN3uop+bCcpdPwePrLm9eUAZNgEYnUFu0njdx7Q0WRsZ7UJ6l75HinL5ZHk4bnvEt86FLw==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, - "optional": true, "requires": { - "buffer-from": "1.1.0" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, - "pouchdb-collections": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.0.0.tgz", - "integrity": "sha512-DaoUr/vU24Q3gM6ghj0va9j/oBanPwkbhkvnqSyC3Dm5dgf5pculNxueLF9PKMo3ycApoWzHMh6N2N8KJbDU2Q==", - "dev": true, - "optional": true - }, - "pouchdb-errors": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.0.0.tgz", - "integrity": "sha512-dTusY8nnTw4HIztCrNl7AoGgwvS1bVf/3/97hDaGc4ytn72V9/4dK8kTqlimi3UpaurohYRnqac0SGXYP8vgXA==", - "dev": true, - "optional": true, - "requires": { - "inherits": "2.0.3" - } + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, - "pouchdb-md5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.0.0.tgz", - "integrity": "sha512-yaSJKhLA3QlgloKUQeb2hLdT3KmUmPfoYdryfwHZuPTpXIRKTnMQTR9qCIRUszc0ruBpDe53DRslCgNUhAyTNQ==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "optional": true, "requires": { - "pouchdb-binary-utils": "7.0.0", - "spark-md5": "3.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "pouchdb-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.0.0.tgz", - "integrity": "sha512-1bnoX1KdZYHv9wicDIFdO0PLiVIMzNDUBUZ/yOJZ+6LW6niQCB8aCv09ZztmKfSQcU5nnN3fe656tScBgP6dOQ==", + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, - "optional": true, "requires": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.0.6", - "inherits": "2.0.3", - "pouchdb-collections": "7.0.0", - "pouchdb-errors": "7.0.0", - "pouchdb-md5": "7.0.0", - "uuid": "3.2.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, - "spark-md5": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", - "integrity": "sha512-BpPFB0Oh83mi+6DRcFwxPx96f3OL8Tkq3hdvaHuXaQUsy5F3saI3zIPNQ/UsTQgyAXIHnML1waeCe1WoCPXbpQ==", - "dev": true, - "optional": true - }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true, - "optional": true - } - } - }, - "pouchdb-adapter-utils": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.3.0.tgz", - "integrity": "sha512-mU1+smcagWSpInVx/VQk7VVjjnJlyagKtusUS3OdCMFZY35L6RbXC8eIhoNVDbkBfEv3cIwqQ3t7fdvkaa1odQ==", - "dev": true, - "optional": true, - "requires": { - "pouchdb-binary-utils": "7.3.0", - "pouchdb-collections": "7.3.0", - "pouchdb-errors": "7.3.0", - "pouchdb-md5": "7.3.0", - "pouchdb-merge": "7.3.0", - "pouchdb-utils": "7.3.0" - } - }, - "pouchdb-adapter-websql-core": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-websql-core/-/pouchdb-adapter-websql-core-7.0.0.tgz", - "integrity": "sha512-NyMaH0bl20SdJdOCzd+fwXo8JZ15a48/MAwMcIbXzsRHE4DjFNlRcWAcjUP6uN4Ezc+Gx+r2tkBBMf71mIz1Aw==", - "dev": true, - "optional": true, - "requires": { - "pouchdb-adapter-utils": "7.0.0", - "pouchdb-binary-utils": "7.0.0", - "pouchdb-collections": "7.0.0", - "pouchdb-errors": "7.0.0", - "pouchdb-json": "7.0.0", - "pouchdb-merge": "7.0.0", - "pouchdb-utils": "7.0.0" - }, - "dependencies": { - "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", - "dev": true, - "optional": true - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true, - "optional": true - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true, - "optional": true + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, - "pouchdb-adapter-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.0.0.tgz", - "integrity": "sha512-UWKPC6jkz6mHUzZefrU7P5X8ZGvBC8LSNZ7BIp0hWvJE6c20cnpDwedTVDpZORcCbVJpDmFOHBYnOqEIblPtbA==", + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "optional": true, "requires": { - "pouchdb-binary-utils": "7.0.0", - "pouchdb-collections": "7.0.0", - "pouchdb-errors": "7.0.0", - "pouchdb-md5": "7.0.0", - "pouchdb-merge": "7.0.0", - "pouchdb-utils": "7.0.0" + "p-locate": "^5.0.0" } }, - "pouchdb-binary-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.0.0.tgz", - "integrity": "sha512-yUktdOPIPvOVouCjJN3uop+bCcpdPwePrLm9eUAZNgEYnUFu0njdx7Q0WRsZ7UJ6l75HinL5ZHk4bnvEt86FLw==", + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", "dev": true, - "optional": true, "requires": { - "buffer-from": "1.1.0" + "brace-expansion": "^1.1.7" } }, - "pouchdb-collections": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.0.0.tgz", - "integrity": "sha512-DaoUr/vU24Q3gM6ghj0va9j/oBanPwkbhkvnqSyC3Dm5dgf5pculNxueLF9PKMo3ycApoWzHMh6N2N8KJbDU2Q==", - "dev": true, - "optional": true + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "pouchdb-errors": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.0.0.tgz", - "integrity": "sha512-dTusY8nnTw4HIztCrNl7AoGgwvS1bVf/3/97hDaGc4ytn72V9/4dK8kTqlimi3UpaurohYRnqac0SGXYP8vgXA==", + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "optional": true, "requires": { - "inherits": "2.0.3" + "yocto-queue": "^0.1.0" } }, - "pouchdb-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.0.0.tgz", - "integrity": "sha512-w0bNRu/7VmmCrFWMYAm62n30wvJJUT2SokyzeTyj3hRohj4GFwTRg1mSZ+iAmxgRKOFE8nzZstLG/WAB4Ymjew==", + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "optional": true, "requires": { - "vuvuzela": "1.0.3" + "p-limit": "^3.0.2" } }, - "pouchdb-md5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.0.0.tgz", - "integrity": "sha512-yaSJKhLA3QlgloKUQeb2hLdT3KmUmPfoYdryfwHZuPTpXIRKTnMQTR9qCIRUszc0ruBpDe53DRslCgNUhAyTNQ==", - "dev": true, - "optional": true, - "requires": { - "pouchdb-binary-utils": "7.0.0", - "spark-md5": "3.0.0" - } + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, - "pouchdb-merge": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.0.0.tgz", - "integrity": "sha512-tci5u6NpznQhGcPv4ho1h0miky9rs+ds/T9zQ9meQeDZbUojXNaX1Jxsb0uYEQQ+HMqdcQs3Akdl0/u0mgwPGg==", - "dev": true, - "optional": true + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true }, - "pouchdb-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.0.0.tgz", - "integrity": "sha512-1bnoX1KdZYHv9wicDIFdO0PLiVIMzNDUBUZ/yOJZ+6LW6niQCB8aCv09ZztmKfSQcU5nnN3fe656tScBgP6dOQ==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "optional": true, "requires": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.0.6", - "inherits": "2.0.3", - "pouchdb-collections": "7.0.0", - "pouchdb-errors": "7.0.0", - "pouchdb-md5": "7.0.0", - "uuid": "3.2.1" + "has-flag": "^4.0.0" } - }, - "spark-md5": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", - "integrity": "sha512-BpPFB0Oh83mi+6DRcFwxPx96f3OL8Tkq3hdvaHuXaQUsy5F3saI3zIPNQ/UsTQgyAXIHnML1waeCe1WoCPXbpQ==", - "dev": true, - "optional": true - }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true, - "optional": true } } }, - "pouchdb-binary-utils": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.0.tgz", - "integrity": "sha512-xvBH/XGHGcou2vkEzszJxkCc7YElfRUrkLUg51Jbdmh1mogLDUO0bU3Tj6TOIIJfRkQrU/HV+dDkMAhsil0amQ==", - "dev": true, - "optional": true, - "requires": { - "buffer-from": "1.1.2" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "pouchdb-collate": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-7.3.0.tgz", - "integrity": "sha512-ys7rXKtEr6cfghgUjknwFJiOkITebV6JmeTybJKCzMV0r2luXu0OoPQsKVpE/wbM/3F5LxfpbFKGFpPcfGMvTA==", - "dev": true, - "optional": true + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true }, - "pouchdb-collections": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.3.0.tgz", - "integrity": "sha512-Xr54m2+fErShXn+qAT4xwqJ+8NwddNPeTMJT4z4k1sZsrwfHmZsWbsKAyGPMF04eQaaU+7DDRMciu2VzaBUXyg==", - "dev": true, - "optional": true + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, - "pouchdb-debug": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/pouchdb-debug/-/pouchdb-debug-7.2.1.tgz", - "integrity": "sha512-eP3ht/AKavLF2RjTzBM6S9gaI2/apcW6xvaKRQhEdOfiANqerFuksFqHCal3aikVQuDO+cB/cw+a4RyJn/glBw==", - "dev": true, - "optional": true, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", "requires": { - "debug": "3.1.0" + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" } } }, - "pouchdb-errors": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.3.0.tgz", - "integrity": "sha512-dTBbIC1BbCy6J9W/Csg5xROgb3wJN3HpbgAJHHSEtAkb8oA45KZmU3ZwEpNhf0AfPuQm4XgW1936PvlDlGgJiw==", - "dev": true, - "optional": true, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "requires": { - "inherits": "2.0.4" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, - "pouchdb-fetch": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-fetch/-/pouchdb-fetch-7.3.0.tgz", - "integrity": "sha512-8/lcg8iMDG+GVs1dHNXA4ktJSEpH71dHU3xesMJ25tNQOqfAaaWrkfz9j71ZYDDkveLYE6UjUzl/sDacu2hSjw==", - "dev": true, - "optional": true, + "obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true + }, + "oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", "requires": { - "abort-controller": "3.0.0", - "fetch-cookie": "0.11.0", - "node-fetch": "2.6.7" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "optional": true, - "requires": { - "whatwg-url": "^5.0.0" - } - } + "http-https": "^1.0.0" } }, - "pouchdb-find": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-find/-/pouchdb-find-7.3.0.tgz", - "integrity": "sha512-EwhnfyxCAkKf8PG4tfndTTygEmtuz+o1LiZkxfPrflfXA3m1jo1ithib0hwBYtEwEYWuZxH6B8pRZutbLoQCGA==", + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "optional": true, "requires": { - "pouchdb-abstract-mapreduce": "7.3.0", - "pouchdb-collate": "7.3.0", - "pouchdb-errors": "7.3.0", - "pouchdb-fetch": "7.3.0", - "pouchdb-md5": "7.3.0", - "pouchdb-selector-core": "7.3.0", - "pouchdb-utils": "7.3.0" + "wrappy": "1" } }, - "pouchdb-json": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.3.0.tgz", - "integrity": "sha512-D4wyi20ltyiFpuziQeMk3CbXs/Q58VoGTYTJQY8MWBw37OidtHGQAt1Kh5yJ435wJqDzJZyxMA5RxGZxEOBDVg==", + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, - "optional": true, "requires": { - "vuvuzela": "1.0.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", + "word-wrap": "^1.2.3" } }, - "pouchdb-mapreduce-utils": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.3.0.tgz", - "integrity": "sha512-KDVSd+H2r+XWTrQfKWV71SknDDYRjYXoeWs0ZQl3xITHCcTl+fIgqyagg/XN+Zy/U9LeLPGMe2JdgPx9H8lJgw==", + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, - "optional": true, "requires": { - "argsarray": "0.0.1", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.0", - "pouchdb-utils": "7.3.0" + "aggregate-error": "^3.0.0" } }, - "pouchdb-md5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.3.0.tgz", - "integrity": "sha512-wL04QgoKyd/L/TV5gxgcvlEyCJiZoXCOEFJklTzkdza/kBQNJGPH7i0ZhKa7Sb+AvZYoWZHddf1Zgv7rBScHkA==", + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "optional": true, "requires": { - "pouchdb-binary-utils": "7.3.0", - "spark-md5": "3.0.2" + "callsites": "^3.0.0" } }, - "pouchdb-merge": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.3.0.tgz", - "integrity": "sha512-E7LmchMzwYFm6V8OBxejzARLisanpksOju2LEfuiYnotGfNDeW7MByP0qBH0/zF8BfUyyjA1cl7ByaEpsapkeQ==", - "dev": true, - "optional": true + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true }, - "pouchdb-selector-core": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-selector-core/-/pouchdb-selector-core-7.3.0.tgz", - "integrity": "sha512-sK/cCrIGeL9ImcMhKGcwa54+bzX7Wv4hhVV+oUW3T1Nasaoxh+Muem1GuA+x1+SbTCE8y37rUg8i6DIOhX51ew==", - "dev": true, - "optional": true, - "requires": { - "pouchdb-collate": "7.3.0", - "pouchdb-utils": "7.3.0" - } + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true }, - "pouchdb-utils": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.3.0.tgz", - "integrity": "sha512-HH+5IXXWn/ZgVCSnrlydBMYn6MabT7RS7SNoo9w8qVH9efpZSp3eLchw6yMQNLw8LQefWmbbskiHV9VgJmSVWQ==", - "dev": true, - "optional": true, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "requires": { - "argsarray": "0.0.1", - "clone-buffer": "1.0.0", - "immediate": "3.3.0", - "inherits": "2.0.4", - "pouchdb-collections": "7.3.0", - "pouchdb-errors": "7.3.0", - "pouchdb-md5": "7.3.0", - "uuid": "8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true - } + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "precond": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==", + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "prelude-ls": { @@ -9868,12 +4245,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true - }, "prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", @@ -9889,111 +4260,18 @@ "fast-diff": "^1.1.2" } }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise-to-callback": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", - "integrity": "sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==", - "dev": true, - "requires": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "pure-rand": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.1.tgz", - "integrity": "sha512-ksWccjmXOHU2gJBnH0cK1lSYdvSZ0zLoCMSz/nTGh6hDvCSgcRxDyIcOBD6KNxFz3xhMPm/T267Tbe2JRymKEQ==", - "dev": true - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -10008,22 +4286,6 @@ "safe-buffer": "^5.1.0" } }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, "raw-body": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", @@ -10047,19 +4309,6 @@ } } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -10079,48 +4328,12 @@ "picomatch": "^2.2.1" } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, "reduce-flatten": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true }, - "redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", - "dev": true, - "requires": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" - } - }, - "redux-saga": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.0.0.tgz", - "integrity": "sha512-GvJWs/SzMvEQgeaw6sRMXnS2FghlvEGsHiEtTLpJqc/FHF3I5EE/B+Hq5lyHZ8LSoT2r/X/46uWvkdCnK9WgHA==", - "dev": true, - "requires": { - "@redux-saga/core": "^1.0.0" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, "regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", @@ -10137,34 +4350,6 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -10177,83 +4362,11 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, - "reselect": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", - "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", - "dev": true - }, - "reselect-tree": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/reselect-tree/-/reselect-tree-1.3.7.tgz", - "integrity": "sha512-kZN+C1cVJ6fFN2smSb0l4UvYZlRzttgnu183svH4NrU22cBY++ikgr2QT75Uuk4MYpv5gXSVijw4c5U6cx6GKg==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "json-pointer": "^0.6.1", - "reselect": "^4.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "optional": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "optional": true + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true }, "reusify": { "version": "1.0.4", @@ -10307,28 +4420,12 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, - "safe-event-emitter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", - "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", - "dev": true, - "requires": { - "events": "^3.0.0" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true, - "optional": true - }, "scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", @@ -10344,12 +4441,6 @@ "node-gyp-build": "^4.2.0" } }, - "semaphore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", - "dev": true - }, "semaphore-async-await": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", @@ -10364,45 +4455,6 @@ "lru-cache": "^6.0.0" } }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "sentence-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", - "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case-first": "^1.1.2" - } - }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -10412,44 +4464,6 @@ "randombytes": "^2.1.0" } }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dev": true, - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true, - "optional": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==", - "dev": true - }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -10470,12 +4484,6 @@ "safe-buffer": "^5.0.1" } }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "dev": true - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -10491,17 +4499,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -10512,69 +4509,12 @@ "object-inspect": "^1.9.0" } }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "optional": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true - }, - "simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dev": true, - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "snake-case": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", - "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "solc": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.5.17.tgz", - "integrity": "sha512-qpX+PGaU0Q3c6lh2vDzMoIbhv6bIrecI4bYsx+xUs01xsGFnY6Nr0L8y/QMyutTnrHN6Lb/Yl672ZVRqxka96w==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10591,41 +4531,6 @@ "source-map": "^0.6.0" } }, - "spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "optional": true - }, - "sqlite3": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz", - "integrity": "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.11.0" - } - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, "stacktrace-parser": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", @@ -10649,49 +4554,12 @@ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "dev": true - }, "string-format": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, "string.prototype.trimend": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", @@ -10737,58 +4605,6 @@ "is-hex-prefixed": "1.0.0" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "optional": true - }, - "sublevel-pouchdb": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/sublevel-pouchdb/-/sublevel-pouchdb-7.3.0.tgz", - "integrity": "sha512-zp7u4jmv2N/s+dXZkWTtL4BjREs3SZ1nGBNNJ8RWX4yqN59oHgKmti4CfVOqfsAW9RMasmTqQAEPxL9hX8+CIA==", - "dev": true, - "optional": true, - "requires": { - "inherits": "2.0.4", - "level-codec": "9.0.2", - "ltgt": "2.2.1", - "readable-stream": "1.1.14" - }, - "dependencies": { - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "optional": true, - "requires": { - "buffer": "^5.6.0" - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true, - "optional": true - } - } - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -10798,118 +4614,6 @@ "has-flag": "^3.0.0" } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "swap-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", - "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", - "dev": true, - "requires": { - "lower-case": "^1.1.1", - "upper-case": "^1.1.1" - } - }, - "swarm-js": { - "version": "0.1.40", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", - "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", - "dev": true, - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true - }, "table-layout": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", @@ -10936,85 +4640,12 @@ } } }, - "tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "dev": true, - "requires": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dev": true, - "optional": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "dev": true - }, - "tiny-queue": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.1.tgz", - "integrity": "sha512-EijGsv7kzd9I9g0ByCl6h42BWNGUZrlCSejfrb3AKeHC33SGbASu1VDf5O3rRiiUOhAC9CHdZxFPbZu0HmR70A==", - "dev": true, - "optional": true - }, - "tiny-typed-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", - "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", - "dev": true, - "optional": true - }, - "title-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", - "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" - } - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -11024,18 +4655,6 @@ "os-tmpdir": "~1.0.2" } }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -11051,43 +4670,12 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, "true-case-path": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", "dev": true }, - "truffle": { - "version": "5.5.20", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.5.20.tgz", - "integrity": "sha512-Ixh6tmK5s/fC4KNuu1zlYrSTkJWesKemXimf/L8UugBuU2RTSgmo/JI00Jq1EbqCSMAtbze6G5ca2UU2vZnCkQ==", - "dev": true, - "requires": { - "@truffle/db": "^1.0.12", - "@truffle/db-loader": "^0.1.22", - "@truffle/debugger": "^10.0.16", - "app-module-path": "^2.2.0", - "ganache": "7.2.0", - "mocha": "9.2.2", - "original-require": "^1.0.1" - } - }, "ts-command-line-args": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz", @@ -11186,13 +4774,6 @@ } } }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true, - "optional": true - }, "tsort": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", @@ -11214,22 +4795,7 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true + } }, "tweetnacl-util": { "version": "0.15.1", @@ -11257,16 +4823,6 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, "typechain": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz", @@ -11336,42 +4892,12 @@ "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, - "typescript-compare": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz", - "integrity": "sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==", - "dev": true, - "requires": { - "typescript-logic": "^0.0.0" - } - }, - "typescript-logic": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/typescript-logic/-/typescript-logic-0.0.0.tgz", - "integrity": "sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==", - "dev": true - }, - "typescript-tuple": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/typescript-tuple/-/typescript-tuple-2.2.1.tgz", - "integrity": "sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==", - "dev": true, - "requires": { - "typescript-compare": "^0.0.2" - } - }, "typical": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -11401,31 +4927,6 @@ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true }, - "update-browserslist-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", - "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", - "dev": true - }, - "upper-case-first": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", - "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", - "dev": true, - "requires": { - "upper-case": "^1.1.1" - } - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -11435,27 +4936,6 @@ "punycode": "^2.1.0" } }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", - "dev": true - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", - "dev": true - }, "utf-8-validate": { "version": "5.0.9", "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", @@ -11487,18 +4967,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -11511,85 +4979,6 @@ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, - "value-or-promise": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz", - "integrity": "sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==", - "dev": true, - "optional": true - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - } - } - }, - "vuvuzela": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", - "integrity": "sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ==", - "dev": true, - "optional": true - }, - "web3": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.7.4.tgz", - "integrity": "sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A==", - "dev": true, - "requires": { - "web3-bzz": "1.7.4", - "web3-core": "1.7.4", - "web3-eth": "1.7.4", - "web3-eth-personal": "1.7.4", - "web3-net": "1.7.4", - "web3-shh": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-bzz": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.4.tgz", - "integrity": "sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q==", - "dev": true, - "requires": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - } - } - }, "web3-core": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", @@ -11661,133 +5050,6 @@ "web3-core-helpers": "1.7.4" } }, - "web3-eth": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.4.tgz", - "integrity": "sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug==", - "dev": true, - "requires": { - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-eth-accounts": "1.7.4", - "web3-eth-contract": "1.7.4", - "web3-eth-ens": "1.7.4", - "web3-eth-iban": "1.7.4", - "web3-eth-personal": "1.7.4", - "web3-net": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-eth-abi": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz", - "integrity": "sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.7.4" - } - }, - "web3-eth-accounts": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz", - "integrity": "sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.5.0", - "@ethereumjs/tx": "^3.3.2", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.0.10", - "scrypt-js": "^3.0.1", - "uuid": "3.3.2", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "dependencies": { - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - } - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - }, - "web3-eth-contract": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz", - "integrity": "sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-eth-ens": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz", - "integrity": "sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA==", - "dev": true, - "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-eth-contract": "1.7.4", - "web3-utils": "1.7.4" - } - }, "web3-eth-iban": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", @@ -11797,39 +5059,6 @@ "web3-utils": "1.7.4" } }, - "web3-eth-personal": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz", - "integrity": "sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g==", - "dev": true, - "requires": { - "@types/node": "^12.12.6", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-net": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - } - } - }, - "web3-net": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.7.4.tgz", - "integrity": "sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg==", - "dev": true, - "requires": { - "web3-core": "1.7.4", - "web3-core-method": "1.7.4", - "web3-utils": "1.7.4" - } - }, "web3-providers-http": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", @@ -11858,18 +5087,6 @@ "websocket": "^1.0.32" } }, - "web3-shh": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.4.tgz", - "integrity": "sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A==", - "dev": true, - "requires": { - "web3-core": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-net": "1.7.4" - } - }, "web3-utils": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", @@ -11898,12 +5115,6 @@ } } }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, "websocket": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", @@ -11917,43 +5128,6 @@ "yaeti": "^0.0.6" } }, - "websql": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/websql/-/websql-1.0.0.tgz", - "integrity": "sha512-7iZ+u28Ljw5hCnMiq0BCOeSYf0vCFQe/ORY0HgscTiKjQed8WqugpBUggJ2NTnB9fahn1kEnPRX2jf8Px5PhJw==", - "dev": true, - "optional": true, - "requires": { - "argsarray": "^0.0.1", - "immediate": "^3.2.2", - "noop-fn": "^1.0.0", - "sqlite3": "^4.0.0", - "tiny-queue": "^0.2.1" - } - }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", - "dev": true - }, - "whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true, - "optional": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -11988,16 +5162,6 @@ "is-typed-array": "^1.1.9" } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -12088,70 +5252,6 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "write-stream": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz", - "integrity": "sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A==", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "~0.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz", - "integrity": "sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw==", - "dev": true, - "optional": true - } - } - }, - "ws": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", - "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dev": true, - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dev": true, - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "dev": true, - "requires": { - "xhr-request": "^1.1.0" - } - }, "xhr2-cookies": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", @@ -12160,33 +5260,6 @@ "cookiejar": "^2.1.1" } }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", - "dev": true, - "optional": true - }, - "xss": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.13.tgz", - "integrity": "sha512-clu7dxTm1e8Mo5fz3n/oW3UCXBfV89xZ72jM8yzo1vR/pIS0w3sgB3XV2H8Vm6zfGnHL0FzvLJPJEBhd86/z4Q==", - "dev": true, - "optional": true, - "requires": { - "commander": "^2.20.3", - "cssfilter": "0.0.10" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true - } - } - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index 6e06cd178..179e46ee7 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -13,8 +13,8 @@ import { validateEip3770Address } from '@gnosis.pm/safe-core-sdk-utils' import { ethers } from 'ethers' import { getMultiSendContractInstance, - getSafeContractInstance, - getSafeProxyFactoryContractInstance + getSmartWalletContractInstance, + getSmartWalletFactoryContractInstance } from './contracts/contractInstancesEthers' import SmartWalletProxyFactoryEthersContract from './contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract' import MultiSendEthersContract from './contracts/MultiSend/MultiSendEthersContract' @@ -66,46 +66,34 @@ class EthersAdapter implements EthAdapter { return (await this.#provider.getNetwork()).chainId } - getSafeContract({ - chainId, - singletonDeployment, - customContractAddress - }: GetContractProps): SmartWalletContract { - const contractAddress = customContractAddress - ? customContractAddress - : singletonDeployment?.networkAddresses[chainId] + getSmartWalletContract({ chainId, singletonDeployment }: GetContractProps): SmartWalletContract { + const contractAddress = singletonDeployment?.networkAddresses[chainId] if (!contractAddress) { throw new Error('Invalid Safe Proxy contract address') } - return getSafeContractInstance(contractAddress, this.#signer) + return getSmartWalletContractInstance(contractAddress, this.#signer) } getMultiSendContract({ chainId, - singletonDeployment, - customContractAddress + singletonDeployment }: GetContractProps): MultiSendEthersContract { - const contractAddress = customContractAddress - ? customContractAddress - : singletonDeployment?.networkAddresses[chainId] + const contractAddress = singletonDeployment?.networkAddresses[chainId] if (!contractAddress) { throw new Error('Invalid Multi Send contract address') } return getMultiSendContractInstance(contractAddress, this.#signer) } - getSafeProxyFactoryContract({ + getSmartWalletFactoryContract({ chainId, - singletonDeployment, - customContractAddress + singletonDeployment }: GetContractProps): SmartWalletProxyFactoryEthersContract { - const contractAddress = customContractAddress - ? customContractAddress - : singletonDeployment?.networkAddresses[chainId] + const contractAddress = singletonDeployment?.networkAddresses[chainId] if (!contractAddress) { throw new Error('Invalid Safe Proxy Factory contract address') } - return getSafeProxyFactoryContractInstance(contractAddress, this.#signer) + return getSmartWalletFactoryContractInstance(contractAddress, this.#signer) } async getContractCode(address: string): Promise { diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts index 381327969..0782ebc96 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts @@ -8,6 +8,10 @@ import { toTxResult } from '../../utils' class EntryPointEthersContract implements EntryPointContract { constructor(public contract: EntryPointContract_TypeChain) {} + getAddress(): string { + return this.contract.address + } + async simulateValidation(userOperation: UserOperation): Promise { const resultSet = await this.contract.simulateValidation(userOperation) return toTxResult(resultSet) diff --git a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts index bcf2fdc06..62c0f5db0 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts @@ -7,6 +7,10 @@ import { class MultiSendEthersContract implements MultiSendContract { constructor(public contract: MultiSend_TypeChain) {} + getAddress(): string { + return this.contract.address + } + encode: MultiSendContractInterface['encodeFunctionData'] = ( methodName: any, params: any diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts index 8bad59fea..3b4f9f4b7 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts @@ -14,6 +14,10 @@ import { SmartWalletContractInterface } from '../../../typechain/src/ethers-v5/v class SmartWalletContractEthers implements SmartWalletContract { constructor(public contract: SmartWalletContract_TypeChain) {} + getAddress(): string { + return this.contract.address + } + async getVersion(): Promise { return (await this.contract.VERSION()) as SmartAccountVersion } diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts index 439d53b03..15559759f 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts @@ -1,9 +1,13 @@ -import { SmartWalletFacoryContract, TransactionResult } from 'core-types' +import { SmartWalletFactoryContract, TransactionResult } from 'core-types' import { toTxResult } from '../../utils' -import { SmartWalletFactoryContract as SmartWalletFacoryContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' +import { SmartWalletFactoryContract as SmartWalletFactoryContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' -class SmartWalletFacoryContractEthers implements SmartWalletFacoryContract { - constructor(public contract: SmartWalletFacoryContract_TypeChain) {} +class SmartWalletFacoryContractEthers implements SmartWalletFactoryContract { + constructor(public contract: SmartWalletFactoryContract_TypeChain) {} + + getAddress(): string { + return this.contract.address + } async deployCounterFactualWallet( owner: string, diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index ab4bb24a2..93ce459e6 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -6,7 +6,7 @@ import SmartWalletContractEthers from './SmartWallet/SmartWalletContractEthers' import MultiSendEthersContract from './MultiSend/MultiSendEthersContract' import SmartWalletFacoryContractEthers from './SmartWalletFactory/SmartWalletProxyFactoryEthersContract' -export function getSafeContractInstance( +export function getSmartWalletContractInstance( contractAddress: string, signer: Signer ): SmartWalletContractEthers { @@ -22,7 +22,7 @@ export function getMultiSendContractInstance( return new MultiSendEthersContract(multiSendContract) } -export function getSafeProxyFactoryContractInstance( +export function getSmartWalletFactoryContractInstance( contractAddress: string, signer: Signer ): SmartWalletFacoryContractEthers { diff --git a/packages/node-client/package-lock.json b/packages/node-client/package-lock.json index ff0dd3637..e32803533 100644 --- a/packages/node-client/package-lock.json +++ b/packages/node-client/package-lock.json @@ -432,6 +432,16 @@ "semver": "^7.3.7" } }, + "@gnosis.pm/safe-ethers-lib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.1.0.tgz", + "integrity": "sha512-MG01hGu/3q/sl9fXE3sU7CMVpVMJ4k9/ro1JVZaE29jmsar1cHFUOJNws7Do3orxTLQZ2egkARcmyv+l673FoA==", + "dev": true, + "requires": { + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + } + }, "@gnosis.pm/safe-web3-lib": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.1.0.tgz", diff --git a/packages/wallet/package-lock.json b/packages/wallet/package-lock.json new file mode 100644 index 000000000..c8835c8d3 --- /dev/null +++ b/packages/wallet/package-lock.json @@ -0,0 +1,2458 @@ +{ + "name": "wallet", + "version": "1.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "requires": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + }, + "@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@gnosis.pm/safe-deployments": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", + "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", + "requires": { + "semver": "^7.3.7" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", + "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/type-utils": "5.30.0", + "@typescript-eslint/utils": "5.30.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", + "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", + "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", + "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.30.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", + "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", + "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", + "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", + "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@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": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node-gyp-build": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "requires": { + "http-https": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "utf-8-validate": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "web3-core": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", + "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", + "requires": { + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-requestmanager": "1.7.4", + "web3-utils": "1.7.4" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + } + } + }, + "web3-core-helpers": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", + "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", + "requires": { + "web3-eth-iban": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-method": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", + "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", + "requires": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-promievent": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", + "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-core-requestmanager": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", + "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", + "requires": { + "util": "^0.12.0", + "web3-core-helpers": "1.7.4", + "web3-providers-http": "1.7.4", + "web3-providers-ipc": "1.7.4", + "web3-providers-ws": "1.7.4" + } + }, + "web3-core-subscriptions": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", + "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4" + } + }, + "web3-eth-iban": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", + "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.7.4" + } + }, + "web3-providers-http": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", + "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", + "requires": { + "web3-core-helpers": "1.7.4", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", + "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.7.4" + } + }, + "web3-providers-ws": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", + "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4", + "websocket": "^1.0.32" + } + }, + "web3-utils": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", + "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + }, + "websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", + "requires": { + "cookiejar": "^2.1.1" + } + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/packages/wallet/package.json b/packages/wallet/package.json new file mode 100644 index 000000000..cb2993e35 --- /dev/null +++ b/packages/wallet/package.json @@ -0,0 +1,42 @@ +{ + "name": "@biconomy-sdk/wallet", + "version": "1.1.0", + "description": "Biconomy Client SDK types", + "main": "dist/src/index.js", + "typings": "dist/src/index.d.ts", + "keywords": [ + "Ethereum", + "Gnosis", + "Biconomy", + "SDK" + ], + "scripts": { + "unbuild": "rimraf dist *.tsbuildinfo", + "build": "rimraf dist && tsc", + "format": "prettier --write \"{src,tests}/**/*.ts\"", + "lint": "tslint -p tsconfig.json" + }, + "author": "Biconomy (https://biconomy.io)", + "license": "MIT", + "files": [ + "dist" + ], + "devDependencies": { + "@types/node": "^17.0.23", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "prettier": "^2.6.2", + "typescript": "^4.6.3", + "ethers-lib": "*", + "core-types": "*" + }, + "dependencies": { + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/contracts": "^5.6.0", + "@gnosis.pm/safe-deployments": "^1.12.0", + "web3-core": "^1.7.1" + } +} diff --git a/packages/wallet/src/assets/MultiSend.json b/packages/wallet/src/assets/MultiSend.json new file mode 100644 index 000000000..649829fae --- /dev/null +++ b/packages/wallet/src/assets/MultiSend.json @@ -0,0 +1,37 @@ +{ + "defaultAddress": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "released": true, + "contractName": "MultiSend", + "version": "1.0.0", + "networkAddresses": { + "1": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "4": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "5": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "42": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "88": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "100": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "246": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "73799": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD" + }, + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + } + ], + "name": "multiSend", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ] + } + \ No newline at end of file diff --git a/packages/wallet/src/assets/SmartWallet.json b/packages/wallet/src/assets/SmartWallet.json new file mode 100644 index 000000000..aebbe572f --- /dev/null +++ b/packages/wallet/src/assets/SmartWallet.json @@ -0,0 +1,980 @@ +{ + "defaultAddress": "0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A", + "released": true, + "contractName": "SmartWallet", + "version": "1.0.0", + "networkAddresses": { + "1": "0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A", + "4": "0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A", + "5": "0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A", + "42": "0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A", + "100": "0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A" + }, + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "handler", + "type": "address" + } + ], + "name": "ChangedFallbackHandler", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "DisabledModule", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_scw", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_oldEOA", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_newEOA", + "type": "address" + } + ], + "name": "EOAChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "EnabledModule", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldEntryPoint", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newEntryPoint", + "type": "address" + } + ], + "name": "EntryPointChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "txHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "payment", + "type": "uint256" + } + ], + "name": "ExecutionFailure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ExecutionFromModuleFailure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ExecutionFromModuleSuccess", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "txHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "payment", + "type": "uint256" + } + ], + "name": "ExecutionSuccess", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "dataHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signatures", + "type": "bytes" + } + ], + "name": "checkSignatures", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "prevModule", + "type": "address" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "disableModule", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "domainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "enableModule", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "safeTxGas", + "type": "uint256" + } + ], + "internalType": "struct WalletStorage.Transaction", + "name": "_tx", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "baseGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "gasToken", + "type": "address" + }, + { + "internalType": "address payable", + "name": "refundReceiver", + "type": "address" + } + ], + "internalType": "struct WalletStorage.FeeRefund", + "name": "refundInfo", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + } + ], + "name": "encodeTransactionData", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "entryPoint", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dest", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "func", + "type": "bytes" + } + ], + "name": "exec", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "dest", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "func", + "type": "bytes[]" + } + ], + "name": "execBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dest", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "func", + "type": "bytes" + } + ], + "name": "execFromEntryPoint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "safeTxGas", + "type": "uint256" + } + ], + "internalType": "struct WalletStorage.Transaction", + "name": "_tx", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "batchId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "baseGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "gasToken", + "type": "address" + }, + { + "internalType": "address payable", + "name": "refundReceiver", + "type": "address" + } + ], + "internalType": "struct WalletStorage.FeeRefund", + "name": "refundInfo", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatures", + "type": "bytes" + } + ], + "name": "execTransaction", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + } + ], + "name": "execTransactionFromModule", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + } + ], + "name": "execTransactionFromModuleReturnData", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getChainId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "start", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + } + ], + "name": "getModulesPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { + "internalType": "address", + "name": "next", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "batchId", + "type": "uint256" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "safeTxGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "baseGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "gasToken", + "type": "address" + }, + { + "internalType": "address payable", + "name": "refundReceiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + } + ], + "name": "getTransactionHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_entryPoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_handler", + "type": "address" + } + ], + "name": "init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "isModuleEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "dest", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "pullTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "handler", + "type": "address" + } + ], + "name": "setFallbackHandler", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "dest", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_entryPoint", + "type": "address" + } + ], + "name": "updateEntryPoint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "updateImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "callGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "verificationGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFeePerGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPriorityFeePerGas", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymaster", + "type": "address" + }, + { + "internalType": "bytes", + "name": "paymasterData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct UserOperation", + "name": "userOp", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "requestId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "requiredPrefund", + "type": "uint256" + } + ], + "name": "validateUserOp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + \ No newline at end of file diff --git a/packages/wallet/src/assets/WalletFactory.json b/packages/wallet/src/assets/WalletFactory.json new file mode 100644 index 000000000..cec7f3180 --- /dev/null +++ b/packages/wallet/src/assets/WalletFactory.json @@ -0,0 +1,161 @@ +{ + "defaultAddress": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", + "released": true, + "contractName": "WalletFactory", + "version": "1.0.0", + "networkAddresses": { + "1": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", + "4": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", + "5": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", + "42": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", + "88": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", + "100": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", + "246": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", + "73799": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B" + }, + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_baseImpl", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_proxy", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_implementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "WalletCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_entryPoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_handler", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "deployCounterFactualWallet", + "outputs": [ + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_entryPoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_handler", + "type": "address" + } + ], + "name": "deployWallet", + "outputs": [ + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "getAddressForCounterfactualWallet", + "outputs": [ + { + "internalType": "address", + "name": "_wallet", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isWalletExist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + \ No newline at end of file diff --git a/packages/wallet/src/constants.ts b/packages/wallet/src/constants.ts new file mode 100644 index 000000000..19bc92ce8 --- /dev/null +++ b/packages/wallet/src/constants.ts @@ -0,0 +1,19 @@ +// { CHAIN_CONFIG } hold constants for each of supported blockchain network +export const CHAIN_CONFIG = { + eth_mainnet: { + entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', + fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', + providerUrl: 'https://mainnet.infura.net/936b8efb8f6e3109a', + relayerUrl: 'https://relayer.biconomy.io', + nodeUrl: 'https://node.biconomy.io', + chainid: '0x01' + }, + polygon_mainnet: { + entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', + fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', + providerUrl: 'https://polygon.infura.net/936b8efb8f6e3109a', + relayerUrl: 'https://relayer.biconomy.io', + nodeUrl: 'https://node.biconomy.io', + chainid: '137' + } +} diff --git a/packages/wallet/src/safe.ts b/packages/wallet/src/safe.ts new file mode 100644 index 000000000..c8f275e3f --- /dev/null +++ b/packages/wallet/src/safe.ts @@ -0,0 +1,3 @@ +export class SmartWallet { + +} \ No newline at end of file diff --git a/packages/wallet/src/types.ts b/packages/wallet/src/types.ts new file mode 100644 index 000000000..3c418910b --- /dev/null +++ b/packages/wallet/src/types.ts @@ -0,0 +1,20 @@ +// { SmartAccountConfig } represent properties that dapps can pass for wallet instantiation +export interface SmartAccountConfig { + owner: string // EOA address + entryPoint?: string // + fallbackHandler?: string + index: number + chain_name: string + providerUrl?: string + relayerUrl?: string + nodeUrl?: string +} +// { ContractInfo } hold details related to contract +export interface ContractInfo { + defaultAddress: string; + version: string; + abi: any[]; + networkAddresses: Record; + contractName: string; + released: boolean; +} diff --git a/packages/wallet/src/utils/FetchContractsInfo.ts b/packages/wallet/src/utils/FetchContractsInfo.ts new file mode 100644 index 000000000..d8d3acc07 --- /dev/null +++ b/packages/wallet/src/utils/FetchContractsInfo.ts @@ -0,0 +1,28 @@ +import { SmartWalletContract, SmartWalletFactoryContract, MultiSendContract } from 'core-types' +import SmartWalletFactory from '../assets/WalletFactory.json' +import SmartWallet from '../assets/SmartWallet.json' +import MultiSend from '../assets/MultiSend.json' + +import EthersAdapter from 'ethers-lib' + +export function getSmartWalletFactoryContract( + chainId: number, + ethAdapter: EthersAdapter +): SmartWalletFactoryContract { + return ethAdapter.getSmartWalletFactoryContract({ + chainId, + singletonDeployment: SmartWalletFactory + }) +} +export function getMultiSendContract( + chainId: number, + ethAdapter: EthersAdapter +): MultiSendContract { + return ethAdapter.getMultiSendContract({ chainId, singletonDeployment: MultiSend }) +} +export function getSmartWalletContract( + chainId: number, + ethAdapter: EthersAdapter +): SmartWalletContract { + return ethAdapter.getSmartWalletContract({ chainId, singletonDeployment: SmartWallet }) +} diff --git a/packages/wallet/src/wallet.ts b/packages/wallet/src/wallet.ts new file mode 100644 index 000000000..6c1f8bc27 --- /dev/null +++ b/packages/wallet/src/wallet.ts @@ -0,0 +1,115 @@ +import { CHAIN_CONFIG } from './constants' +import EthersAdapter from 'ethers-lib' +import { SmartAccountConfig } from './types' +import { ethers } from 'ethers' +import { + getSmartWalletFactoryContract, + getMultiSendContract, + getSmartWalletContract +} from './utils/FetchContractsInfo' +import { + SmartWalletFactoryContract, + SmartWalletContract, + MultiSendContract, + TransactionResult +} from 'core-types' + +type ObjectKey = keyof typeof CHAIN_CONFIG + +export class SmartAccount { + // { ethAdapter } is a window that gave access to all the Implemented function of it + private ethAdapter: EthersAdapter + + // hold instantiated chain info + private chainInfo: any + + // contract instances + private smartWallet!: SmartWalletContract + private multiSendContract!: MultiSendContract + private smartWalletFacoryContract!: SmartWalletFactoryContract + + constructor(config: SmartAccountConfig) { + const chainName = config.chain_name as ObjectKey + + // retrive chain info from {ChainConfigs} to have default values for properties + this.chainInfo = CHAIN_CONFIG[chainName] + + // assign default chain constants {this.chainInfo} incase optional are not supplied + config = Object.assign(config, this.chainInfo) + + // setting up provider + const provider = new ethers.providers.JsonRpcProvider(config.providerUrl) + const signer = provider.getSigner(config.owner) + + // instantiating EthersAdapter instance and maintain it as class level variable + this.ethAdapter = new EthersAdapter({ + ethers, + signer + }) + // contracts initialization + this.initializeContracts(this.chainInfo.chainId) + } + + // intialize contract to be used throughout this class + private async initializeContracts(chainId: number): Promise { + this.smartWallet = await getSmartWalletContract(chainId, this.ethAdapter) + this.multiSendContract = await getMultiSendContract(chainId, this.ethAdapter) + this.smartWalletFacoryContract = await getSmartWalletFactoryContract(chainId, this.ethAdapter) + } + + // return adapter instance to used for blockchain interactions + getEthAdapter(): EthersAdapter { + return this.ethAdapter + } + + // return configuration used for intialization of the { wallet }instance + getSmartAccountConfig(): SmartAccountConfig { + return this.chainInfo + } + + // return smartaccount singelton address + getSmartWalletContractAddress(): string { + return this.smartWallet.getAddress() + } + + // return multisend singelton address + getMultiSendContractAddress(): string { + return this.multiSendContract.getAddress() + } + + // return proxy wallet singelton address + getSmartWalletFacoryContractAddress(): string { + return this.smartWalletFacoryContract.getAddress() + } + + /** + * @param address Owner aka {EOA} address + * @param index number of smart account deploy i.e {0, 1 ,2 ...} + * @description return address for Smart account + * @returns + */ + getAddressForCounterfactualWallet(address: string, index: number = 0): Promise { + return this.smartWalletFacoryContract.getAddressForCounterfactualWallet(address, index) + } + + /** + * @param address Owner aka {EOA} address + * @param index number of smart account deploy i.e {0, 1 ,2 ...} + * @description deploy Smart Account for EOA against specific index + * @returns + */ + async deployCounterFactualWallet(address: string, index: number = 0): Promise { + const walletAddress = await this.getAddressForCounterfactualWallet(address, index) + const isContractDeployed = await this.ethAdapter.isContractDeployed(walletAddress) + if (!isContractDeployed) { + throw new Error('Smart Wallet is not deployed on the current network') + } + // TODO: relayer stuff + return this.smartWalletFacoryContract.deployCounterFactualWallet( + address, + this.chainInfo.entryPoint, + this.chainInfo.handler, + index + ) + } +} diff --git a/packages/wallet/tsconfig.json b/packages/wallet/tsconfig.json new file mode 100644 index 000000000..f8356d4ec --- /dev/null +++ b/packages/wallet/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src" + }, + "include": ["src", "src/**/*.json"] +} From 4552605963230644374d2193b8e872ebaca66fe7 Mon Sep 17 00:00:00 2001 From: talha Date: Fri, 8 Jul 2022 02:04:45 +0500 Subject: [PATCH 0009/1247] wallet pkg --- packages/wallet/src/safe.ts | 4 +--- packages/wallet/src/types.ts | 14 +++++++------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/wallet/src/safe.ts b/packages/wallet/src/safe.ts index c8f275e3f..0dc0e3275 100644 --- a/packages/wallet/src/safe.ts +++ b/packages/wallet/src/safe.ts @@ -1,3 +1 @@ -export class SmartWallet { - -} \ No newline at end of file +export class SmartWallet {} diff --git a/packages/wallet/src/types.ts b/packages/wallet/src/types.ts index 3c418910b..b6a2f9743 100644 --- a/packages/wallet/src/types.ts +++ b/packages/wallet/src/types.ts @@ -9,12 +9,12 @@ export interface SmartAccountConfig { relayerUrl?: string nodeUrl?: string } -// { ContractInfo } hold details related to contract +// { ContractInfo } hold details related to contract export interface ContractInfo { - defaultAddress: string; - version: string; - abi: any[]; - networkAddresses: Record; - contractName: string; - released: boolean; + defaultAddress: string + version: string + abi: any[] + networkAddresses: Record + contractName: string + released: boolean } From 90b99101ad1ce875c9fdde9d8e8f6a66a3857005 Mon Sep 17 00:00:00 2001 From: talha Date: Fri, 8 Jul 2022 17:53:46 +0500 Subject: [PATCH 0010/1247] smart wallet pkg implementation --- package-lock.json | 2 +- package.json | 4 +- packages/wallet/package-lock.json | 223 +++++++++++++++++++++++++++- packages/wallet/package.json | 10 +- packages/wallet/src/SmartAccount.ts | 136 +++++++++++++++++ packages/wallet/src/constants.ts | 19 --- packages/wallet/src/index.ts | 3 + packages/wallet/src/safe.ts | 1 - packages/wallet/src/types.ts | 121 +++++++++++++-- packages/wallet/src/wallet.ts | 115 -------------- yarn.lock | 12 +- 11 files changed, 492 insertions(+), 154 deletions(-) create mode 100644 packages/wallet/src/SmartAccount.ts delete mode 100644 packages/wallet/src/constants.ts create mode 100644 packages/wallet/src/index.ts delete mode 100644 packages/wallet/src/safe.ts delete mode 100644 packages/wallet/src/wallet.ts diff --git a/package-lock.json b/package-lock.json index 808bae497..804050d05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "root", + "name": "biconomy-sdk", "requires": true, "lockfileVersion": 1, "dependencies": { diff --git a/package.json b/package.json index c952a38b1..7880c8030 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "root", - "private": true, + "name": "biconomy-sdk", + "private": false, "scripts": { "clean": "lerna clean", "unbuild": "lerna run unbuild", diff --git a/packages/wallet/package-lock.json b/packages/wallet/package-lock.json index c8835c8d3..bf96d1f13 100644 --- a/packages/wallet/package-lock.json +++ b/packages/wallet/package-lock.json @@ -1,5 +1,5 @@ { - "name": "wallet", + "name": "@biconomy-sdk/wallet", "version": "1.1.0", "lockfileVersion": 1, "requires": true, @@ -100,6 +100,15 @@ "@ethersproject/bytes": "^5.6.1" } }, + "@ethersproject/basex": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", + "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/properties": "^5.6.0" + } + }, "@ethersproject/bignumber": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", @@ -158,6 +167,47 @@ "@ethersproject/strings": "^5.6.1" } }, + "@ethersproject/hdnode": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", + "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/json-wallets": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", + "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, "@ethersproject/keccak256": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", @@ -180,6 +230,16 @@ "@ethersproject/logger": "^5.6.0" } }, + "@ethersproject/pbkdf2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", + "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/sha2": "^5.6.1" + } + }, "@ethersproject/properties": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", @@ -188,6 +248,42 @@ "@ethersproject/logger": "^5.6.0" } }, + "@ethersproject/providers": { + "version": "5.6.8", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", + "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "@ethersproject/random": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", + "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, "@ethersproject/rlp": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", @@ -197,6 +293,16 @@ "@ethersproject/logger": "^5.6.0" } }, + "@ethersproject/sha2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" + } + }, "@ethersproject/signing-key": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", @@ -210,6 +316,20 @@ "hash.js": "1.1.7" } }, + "@ethersproject/solidity": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" + } + }, "@ethersproject/strings": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", @@ -236,6 +356,40 @@ "@ethersproject/signing-key": "^5.6.2" } }, + "@ethersproject/units": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", + "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/wallet": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", + "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", + "dev": true, + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, "@ethersproject/web": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", @@ -248,6 +402,19 @@ "@ethersproject/strings": "^5.6.1" } }, + "@ethersproject/wordlists": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", + "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, "@gnosis.pm/safe-deployments": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", @@ -526,6 +693,12 @@ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -584,6 +757,11 @@ "safe-buffer": "^5.0.1" } }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, "bignumber.js": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", @@ -1141,6 +1319,44 @@ "rlp": "^2.2.4" } }, + "ethers": { + "version": "5.6.9", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", + "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", + "dev": true, + "requires": { + "@ethersproject/abi": "5.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" + } + }, "ethjs-unit": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", @@ -2436,6 +2652,11 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + }, "xhr2-cookies": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", diff --git a/packages/wallet/package.json b/packages/wallet/package.json index cb2993e35..28bf989cc 100644 --- a/packages/wallet/package.json +++ b/packages/wallet/package.json @@ -1,5 +1,5 @@ { - "name": "@biconomy-sdk/wallet", + "name": "@biconomy/smart-account", "version": "1.1.0", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", @@ -25,17 +25,19 @@ "@types/node": "^17.0.23", "@typescript-eslint/eslint-plugin": "^5.17.0", "@typescript-eslint/parser": "^5.17.0", + "core-types": "*", "eslint": "^8.12.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", - "prettier": "^2.6.2", - "typescript": "^4.6.3", "ethers-lib": "*", - "core-types": "*" + "ethers": "^5.5.3", + "prettier": "^2.6.2", + "typescript": "^4.6.3" }, "dependencies": { "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", + "@ethersproject/providers": "^5.6.8", "@gnosis.pm/safe-deployments": "^1.12.0", "web3-core": "^1.7.1" } diff --git a/packages/wallet/src/SmartAccount.ts b/packages/wallet/src/SmartAccount.ts new file mode 100644 index 000000000..5abe376e7 --- /dev/null +++ b/packages/wallet/src/SmartAccount.ts @@ -0,0 +1,136 @@ +import { SmartAccountConfig, networks, NetworkConfig, ChainId } from './types' +import EthersAdapter from 'ethers-lib' +import { ethers } from 'ethers' +import { + getSmartWalletFactoryContract, + getMultiSendContract, + getSmartWalletContract +} from './utils/FetchContractsInfo' +import { + SmartWalletFactoryContract, + SmartWalletContract, + MultiSendContract, + TransactionResult +} from 'core-types' + +class SmartAccount { + // { ethAdapter } is a window that gave access to all the Implemented function of it + ethAdapter!: { [chainId: number]: EthersAdapter } + + // hold instantiated chain info + #smartAccountConfig!: SmartAccountConfig + + // hold supported network info + supportedNetworkIds!: ChainId[] + + // contract instances + smartWalletContract!: { [chainId: number]: SmartWalletContract } + multiSendContract!: { [chainId: number]: MultiSendContract } + smartWalletFacoryContract!: { [chainId: number]: SmartWalletFactoryContract } + + constructor(config: SmartAccountConfig) { + + this.#smartAccountConfig = config + this.ethAdapter = {} + this.smartWalletContract = {} + this.multiSendContract = {} + this.smartWalletFacoryContract = {} + this.supportedNetworkIds = config.supportedNetworksIds + + // providers and contracts initialization + for (let index = 0; index < this.supportedNetworkIds.length; index++) { + const provider = new ethers.providers.JsonRpcProvider( + networks[this.supportedNetworkIds[index]].providerUrl + ) + const signer = provider.getSigner(config.owner) + + // instantiating EthersAdapter instance and maintain it as class level variable + this.ethAdapter[this.supportedNetworkIds[index]] = new EthersAdapter({ + ethers, + signer + }) + // contracts initialization + // comments as contracts are not yet deployed + this.initializeContracts(this.supportedNetworkIds[index]).then() + } + } + + // intialize contract to be used throughout this class + private async initializeContracts(chainId: ChainId): Promise { + this.smartWalletContract[networks[chainId].chainId] = await getSmartWalletContract( + chainId, + this.ethAdapter[chainId] + ) + this.multiSendContract[networks[chainId].chainId] = await getMultiSendContract( + chainId, + this.ethAdapter[chainId] + ) + this.smartWalletFacoryContract[networks[chainId].chainId] = await getSmartWalletFactoryContract( + chainId, + this.ethAdapter[chainId] + ) + } + + // return adapter instance to used for blockchain interactions + ethersAdapter(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): EthersAdapter { + return this.ethAdapter[chainId] + } + + // return configuration used for intialization of the { wallet }instance + getSmartAccountConfig(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): NetworkConfig { + return networks[chainId] + } + + // return smartaccount instance + smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { + return this.smartWalletContract[networks[chainId].chainId] + } + + // return multisend contract instance + multiSend(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendContract { + return this.multiSendContract[networks[chainId].chainId] + } + + // return proxy wallet instance + factory(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletFactoryContract { + return this.smartWalletFacoryContract[networks[chainId].chainId] + } + + /** + * @param address Owner aka {EOA} address + * @param index number of smart account deploy i.e {0, 1 ,2 ...} + * @description return address for Smart account + * @returns + */ + getAddressForCounterfactualWallet(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + return this.smartWalletFacoryContract[ + networks[chainId].chainId + ].getAddressForCounterfactualWallet(this.#smartAccountConfig.owner, index) + } + + /** + * @param address Owner aka {EOA} address + * @param index number of smart account deploy i.e {0, 1 ,2 ...} + * @description deploy Smart Account for EOA against specific index + * @returns + */ + async deployCounterFactualWallet( + index: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + const networkInfo = networks[chainId] + const walletAddress = await this.getAddressForCounterfactualWallet(index, chainId) + const isContractDeployed = await this.ethAdapter[chainId].isContractDeployed(walletAddress) + if (!isContractDeployed) { + throw new Error('Smart Wallet is not deployed on the current network') + } + // TODO: relayer stuff + return this.smartWalletFacoryContract[chainId].deployCounterFactualWallet( + this.#smartAccountConfig.owner, + networkInfo.entryPoint, + networkInfo.fallbackHandler, + index + ) + } +} +export default SmartAccount diff --git a/packages/wallet/src/constants.ts b/packages/wallet/src/constants.ts deleted file mode 100644 index 19bc92ce8..000000000 --- a/packages/wallet/src/constants.ts +++ /dev/null @@ -1,19 +0,0 @@ -// { CHAIN_CONFIG } hold constants for each of supported blockchain network -export const CHAIN_CONFIG = { - eth_mainnet: { - entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', - fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', - providerUrl: 'https://mainnet.infura.net/936b8efb8f6e3109a', - relayerUrl: 'https://relayer.biconomy.io', - nodeUrl: 'https://node.biconomy.io', - chainid: '0x01' - }, - polygon_mainnet: { - entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', - fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', - providerUrl: 'https://polygon.infura.net/936b8efb8f6e3109a', - relayerUrl: 'https://relayer.biconomy.io', - nodeUrl: 'https://node.biconomy.io', - chainid: '137' - } -} diff --git a/packages/wallet/src/index.ts b/packages/wallet/src/index.ts new file mode 100644 index 000000000..23c737f57 --- /dev/null +++ b/packages/wallet/src/index.ts @@ -0,0 +1,3 @@ +import SmartAccount from './SmartAccount' + +export default SmartAccount diff --git a/packages/wallet/src/safe.ts b/packages/wallet/src/safe.ts deleted file mode 100644 index 0dc0e3275..000000000 --- a/packages/wallet/src/safe.ts +++ /dev/null @@ -1 +0,0 @@ -export class SmartWallet {} diff --git a/packages/wallet/src/types.ts b/packages/wallet/src/types.ts index b6a2f9743..d29ee7ef2 100644 --- a/packages/wallet/src/types.ts +++ b/packages/wallet/src/types.ts @@ -1,15 +1,8 @@ -// { SmartAccountConfig } represent properties that dapps can pass for wallet instantiation export interface SmartAccountConfig { owner: string // EOA address - entryPoint?: string // - fallbackHandler?: string - index: number - chain_name: string - providerUrl?: string - relayerUrl?: string - nodeUrl?: string + activeNetworkId: ChainId + supportedNetworksIds: ChainId[] } -// { ContractInfo } hold details related to contract export interface ContractInfo { defaultAddress: string version: string @@ -18,3 +11,113 @@ export interface ContractInfo { contractName: string released: boolean } + +export enum ChainNames { + // Ethereum + MAINNET, + ROPSTEN, + RINKEBY, + GOERLI, + KOVAN +} + +export enum ChainId { + // Ethereum + MAINNET = 1, + ROPSTEN = 3, + RINKEBY = 4, + GOERLI = 5, + KOVAN = 42 +} +export interface NetworkConfig { + entryPoint: string // abstract account contract + fallbackHandler: string + title?: string + name: string + chainId: number + ensAddress?: string + testnet?: boolean + + blockExplorer?: BlockExplorerConfig + + providerUrl?: string + indexerUrl?: string + relayerUrl?: string + // isDefaultChain identifies the default network. For example, a dapp may run on the Polygon + // network and may configure the wallet to use it as its main/default chain. + isDefaultChain?: boolean +} + +export type BlockExplorerConfig = { + name?: string + rootUrl: string + addressUrl?: string + txnHashUrl?: string +} + +export const networks: Record = { + [ChainId.MAINNET]: { + chainId: ChainId.MAINNET, + entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', + fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', + name: 'mainnet', + title: 'Ethereum', + blockExplorer: { + name: 'Etherscan', + rootUrl: 'https://etherscan.io/' + }, + providerUrl: 'https://mainnet.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' + }, + [ChainId.ROPSTEN]: { + chainId: ChainId.ROPSTEN, + entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', + fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', + name: 'ropsten', + title: 'Ropsten', + testnet: true, + blockExplorer: { + name: 'Etherscan (Ropsten)', + rootUrl: 'https://ropsten.etherscan.io/' + }, + providerUrl: 'https://ropsten.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' + }, + [ChainId.RINKEBY]: { + chainId: ChainId.RINKEBY, + entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', + fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', + name: 'rinkeby', + title: 'Rinkeby', + testnet: true, + blockExplorer: { + name: 'Etherscan (Rinkeby)', + rootUrl: 'https://rinkeby.etherscan.io/' + }, + providerUrl: 'https://rinkeby.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' + }, + [ChainId.GOERLI]: { + chainId: ChainId.GOERLI, + entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', + fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', + name: 'goerli', + title: 'Goerli', + testnet: true, + blockExplorer: { + name: 'Etherscan (Goerli)', + rootUrl: 'https://goerli.etherscan.io/' + }, + providerUrl: 'https://goerli.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' + }, + [ChainId.KOVAN]: { + chainId: ChainId.KOVAN, + entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', + fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', + name: 'kovan', + title: 'Kovan', + testnet: true, + blockExplorer: { + name: 'Etherscan (Kovan)', + rootUrl: 'https://kovan.etherscan.io/' + }, + providerUrl: 'https://kovan.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' + } +} diff --git a/packages/wallet/src/wallet.ts b/packages/wallet/src/wallet.ts deleted file mode 100644 index 6c1f8bc27..000000000 --- a/packages/wallet/src/wallet.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { CHAIN_CONFIG } from './constants' -import EthersAdapter from 'ethers-lib' -import { SmartAccountConfig } from './types' -import { ethers } from 'ethers' -import { - getSmartWalletFactoryContract, - getMultiSendContract, - getSmartWalletContract -} from './utils/FetchContractsInfo' -import { - SmartWalletFactoryContract, - SmartWalletContract, - MultiSendContract, - TransactionResult -} from 'core-types' - -type ObjectKey = keyof typeof CHAIN_CONFIG - -export class SmartAccount { - // { ethAdapter } is a window that gave access to all the Implemented function of it - private ethAdapter: EthersAdapter - - // hold instantiated chain info - private chainInfo: any - - // contract instances - private smartWallet!: SmartWalletContract - private multiSendContract!: MultiSendContract - private smartWalletFacoryContract!: SmartWalletFactoryContract - - constructor(config: SmartAccountConfig) { - const chainName = config.chain_name as ObjectKey - - // retrive chain info from {ChainConfigs} to have default values for properties - this.chainInfo = CHAIN_CONFIG[chainName] - - // assign default chain constants {this.chainInfo} incase optional are not supplied - config = Object.assign(config, this.chainInfo) - - // setting up provider - const provider = new ethers.providers.JsonRpcProvider(config.providerUrl) - const signer = provider.getSigner(config.owner) - - // instantiating EthersAdapter instance and maintain it as class level variable - this.ethAdapter = new EthersAdapter({ - ethers, - signer - }) - // contracts initialization - this.initializeContracts(this.chainInfo.chainId) - } - - // intialize contract to be used throughout this class - private async initializeContracts(chainId: number): Promise { - this.smartWallet = await getSmartWalletContract(chainId, this.ethAdapter) - this.multiSendContract = await getMultiSendContract(chainId, this.ethAdapter) - this.smartWalletFacoryContract = await getSmartWalletFactoryContract(chainId, this.ethAdapter) - } - - // return adapter instance to used for blockchain interactions - getEthAdapter(): EthersAdapter { - return this.ethAdapter - } - - // return configuration used for intialization of the { wallet }instance - getSmartAccountConfig(): SmartAccountConfig { - return this.chainInfo - } - - // return smartaccount singelton address - getSmartWalletContractAddress(): string { - return this.smartWallet.getAddress() - } - - // return multisend singelton address - getMultiSendContractAddress(): string { - return this.multiSendContract.getAddress() - } - - // return proxy wallet singelton address - getSmartWalletFacoryContractAddress(): string { - return this.smartWalletFacoryContract.getAddress() - } - - /** - * @param address Owner aka {EOA} address - * @param index number of smart account deploy i.e {0, 1 ,2 ...} - * @description return address for Smart account - * @returns - */ - getAddressForCounterfactualWallet(address: string, index: number = 0): Promise { - return this.smartWalletFacoryContract.getAddressForCounterfactualWallet(address, index) - } - - /** - * @param address Owner aka {EOA} address - * @param index number of smart account deploy i.e {0, 1 ,2 ...} - * @description deploy Smart Account for EOA against specific index - * @returns - */ - async deployCounterFactualWallet(address: string, index: number = 0): Promise { - const walletAddress = await this.getAddressForCounterfactualWallet(address, index) - const isContractDeployed = await this.ethAdapter.isContractDeployed(walletAddress) - if (!isContractDeployed) { - throw new Error('Smart Wallet is not deployed on the current network') - } - // TODO: relayer stuff - return this.smartWalletFacoryContract.deployCounterFactualWallet( - address, - this.chainInfo.entryPoint, - this.chainInfo.handler, - index - ) - } -} diff --git a/yarn.lock b/yarn.lock index ce117ab76..9cef48875 100644 --- a/yarn.lock +++ b/yarn.lock @@ -304,7 +304,7 @@ dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/providers@5.6.8": +"@ethersproject/providers@5.6.8", "@ethersproject/providers@^5.6.8": version "5.6.8" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.8.tgz#22e6c57be215ba5545d3a46cf759d265bb4e879d" integrity sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w== @@ -485,6 +485,14 @@ dependencies: semver "^7.3.7" +"@gnosis.pm/safe-ethers-lib@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.1.0.tgz#06dfe132f3590fbc5406918a193812cd922c641e" + integrity sha512-MG01hGu/3q/sl9fXE3sU7CMVpVMJ4k9/ro1JVZaE29jmsar1cHFUOJNws7Do3orxTLQZ2egkARcmyv+l673FoA== + dependencies: + "@gnosis.pm/safe-core-sdk-types" "^1.1.0" + "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" + "@gnosis.pm/safe-web3-lib@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.1.0.tgz#1d1bd986fe77a1af04afcf8443a6119e0617a89a" @@ -6139,7 +6147,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.1.2, prettier@^2.6.2: +prettier@2.7.1, prettier@^2.1.2, prettier@^2.6.2: version "2.7.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== From 8a9ce842a7484f43686062d652f82a82c0f8b77e Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sat, 9 Jul 2022 18:32:31 +0530 Subject: [PATCH 0011/1247] added scripts --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 7880c8030..864a126a5 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,9 @@ "test": "FORCE_COLOR=1 lerna run test --stream --npm-client=yarn", "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", "format": "lerna run format --npm-client=yarn", - "prettier": "lerna run prettier --npm-client=npm" + "prettier": "lerna run prettier --npm-client=npm", + "diff": "lerna diff", + "new-version": "lerna version --conventional-commits --yes" }, "workspaces": { "packages": [ From 8edf9af2ba8c12007676184abbb5ef7c714c12e2 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 12 Jul 2022 14:18:59 +0530 Subject: [PATCH 0012/1247] cleanup and rename --- package-lock.json | 49209 ++++++++++++++-- package.json | 2 +- packages/core-types/package-lock.json | 2458 - packages/core-types/package.json | 4 +- packages/ethers-lib/package-lock.json | 5358 -- packages/ethers-lib/package.json | 9 +- packages/ethers-lib/src/EthersAdapter.ts | 2 +- .../EntryPointEthersContract.ts | 2 +- .../MultiSend/MultiSendEthersContract.ts | 2 +- .../SmartWallet/SmartWalletContractEthers.ts | 2 +- .../SmartWalletProxyFactoryEthersContract.ts | 2 +- packages/node-client/package-lock.json | 5289 -- packages/node-client/package.json | 9 +- packages/node-client/src/SafeServiceClient.ts | 2 +- .../src/types/safeTransactionServiceTypes.ts | 2 +- .../node-client/tests/endpoint/index.test.ts | 2 +- packages/relayer/README.md | 11 + packages/relayer/package.json | 30 + packages/relayer/src/index.ts | 0 packages/relayer/tsconfig.json | 10 + .../{wallet => smart-account}/package.json | 10 +- .../src/SmartAccount.ts | 4 +- .../src/assets/MultiSend.json | 0 .../src/assets/SmartWallet.json | 0 .../src/assets/WalletFactory.json | 0 .../{wallet => smart-account}/src/index.ts | 0 .../{wallet => smart-account}/src/types.ts | 0 .../src/utils/FetchContractsInfo.ts | 4 +- .../{wallet => smart-account}/tsconfig.json | 0 packages/wallet/package-lock.json | 2679 - yarn.lock | 7863 --- 31 files changed, 43144 insertions(+), 29821 deletions(-) delete mode 100644 packages/core-types/package-lock.json delete mode 100644 packages/ethers-lib/package-lock.json delete mode 100644 packages/node-client/package-lock.json create mode 100644 packages/relayer/README.md create mode 100644 packages/relayer/package.json create mode 100644 packages/relayer/src/index.ts create mode 100644 packages/relayer/tsconfig.json rename packages/{wallet => smart-account}/package.json (83%) rename packages/{wallet => smart-account}/src/SmartAccount.ts (98%) rename packages/{wallet => smart-account}/src/assets/MultiSend.json (100%) rename packages/{wallet => smart-account}/src/assets/SmartWallet.json (100%) rename packages/{wallet => smart-account}/src/assets/WalletFactory.json (100%) rename packages/{wallet => smart-account}/src/index.ts (100%) rename packages/{wallet => smart-account}/src/types.ts (100%) rename packages/{wallet => smart-account}/src/utils/FetchContractsInfo.ts (89%) rename packages/{wallet => smart-account}/tsconfig.json (100%) delete mode 100644 packages/wallet/package-lock.json delete mode 100644 yarn.lock diff --git a/package-lock.json b/package-lock.json index 804050d05..8ce79d211 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,4053 +1,39578 @@ { "name": "biconomy-sdk", + "lockfileVersion": 2, "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@babel/code-frame": { + "packages": { + "": { + "name": "biconomy-sdk", + "dependencies": { + "hardhat": "^2.9.9" + }, + "devDependencies": { + "lerna": "^5.1.6", + "nx": "^14.4.2", + "prettier": "2.7.1", + "ts-node": "^10.8.2" + }, + "workspaces": { + "packages": [ + "packages/*" + ] + } + }, + "node_modules/@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, - "requires": { + "dependencies": { "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-validator-identifier": { + "node_modules/@babel/helper-validator-identifier": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/highlight": { + "node_modules/@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "engines": { + "node": ">=6.9.0" } }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "requires": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } + "color-name": "1.1.3" } }, - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" } }, - "@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "requires": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@biconomy-sdk/core-types": { + "resolved": "packages/core-types", + "link": true + }, + "node_modules/@biconomy-sdk/ethers-lib": { + "resolved": "packages/ethers-lib", + "link": true + }, + "node_modules/@biconomy-sdk/node-client": { + "resolved": "packages/node-client", + "link": true + }, + "node_modules/@biconomy-sdk/relayer": { + "resolved": "packages/relayer", + "link": true + }, + "node_modules/@biconomy-sdk/smart-account": { + "resolved": "packages/smart-account", + "link": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "devOptional": true, + "license": "MIT", "dependencies": { - "buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "requires": { - "safe-buffer": "^5.1.1" - } - } + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" } }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" + "node_modules/@ensdomains/ens": { + "version": "0.4.5", + "dev": true, + "license": "CC0-1.0", + "peer": true, + "dependencies": { + "bluebird": "^3.5.2", + "eth-ens-namehash": "^2.0.8", + "solc": "^0.4.20", + "testrpc": "0.0.1", + "web3-utils": "^1.0.0-beta.31" } }, - "@ethereumjs/vm": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", - "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", - "requires": { - "@ethereumjs/block": "^3.6.3", - "@ethereumjs/blockchain": "^5.5.3", - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.4", - "rustbn.js": "~0.2.0" + "node_modules/@ensdomains/ens/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" + "node_modules/@ensdomains/ens/node_modules/camelcase": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" + "node_modules/@ensdomains/ens/node_modules/cliui": { + "version": "3.2.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" + "node_modules/@ensdomains/ens/node_modules/find-up": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" + "node_modules/@ensdomains/ens/node_modules/fs-extra": { + "version": "0.30.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" } }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" + "node_modules/@ensdomains/ens/node_modules/get-caller-file": { + "version": "1.0.3", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/@ensdomains/ens/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/@ensdomains/ens/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" + "node_modules/@ensdomains/ens/node_modules/jsonfile": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" + "node_modules/@ensdomains/ens/node_modules/load-json-file": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" + "node_modules/@ensdomains/ens/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" + "node_modules/@ensdomains/ens/node_modules/parse-json": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" + "node_modules/@ensdomains/ens/node_modules/path-exists": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + "node_modules/@ensdomains/ens/node_modules/path-type": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" + "node_modules/@ensdomains/ens/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" + "node_modules/@ensdomains/ens/node_modules/read-pkg": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" + "node_modules/@ensdomains/ens/node_modules/read-pkg-up": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" + "node_modules/@ensdomains/ens/node_modules/require-from-string": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" + "node_modules/@ensdomains/ens/node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" + "node_modules/@ensdomains/ens/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" } }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" + "node_modules/@ensdomains/ens/node_modules/solc": { + "version": "0.4.26", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fs-extra": "^0.30.0", + "memorystream": "^0.3.1", + "require-from-string": "^1.1.0", + "semver": "^5.3.0", + "yargs": "^4.7.1" + }, + "bin": { + "solcjs": "solcjs" } }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true + "node_modules/@ensdomains/ens/node_modules/string-width": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true + "node_modules/@ensdomains/ens/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true + "node_modules/@ensdomains/ens/node_modules/strip-bom": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "@jridgewell/resolve-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", - "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", - "dev": true + "node_modules/@ensdomains/ens/node_modules/wrap-ansi": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "node_modules/@ensdomains/ens/node_modules/y18n": { + "version": "3.2.2", + "dev": true, + "license": "ISC", + "peer": true }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/@ensdomains/ens/node_modules/yargs": { + "version": "4.8.1", "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "license": "MIT", + "peer": true, + "dependencies": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" } }, - "@lerna/add": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.1.6.tgz", - "integrity": "sha512-+dc5LUxFSxlTgDcC+nTdbFnUphmcGsypPF0eeYPc6tqUrpOpp3Ubn07dRGG0DbpZjk/roZj38DAvx7LYFalZAQ==", + "node_modules/@ensdomains/ens/node_modules/yargs-parser": { + "version": "2.4.1", "dev": true, - "requires": { - "@lerna/bootstrap": "5.1.6", - "@lerna/command": "5.1.6", - "@lerna/filter-options": "5.1.6", - "@lerna/npm-conf": "5.1.6", - "@lerna/validation-error": "5.1.6", - "dedent": "^0.7.0", - "npm-package-arg": "^8.1.0", - "p-map": "^4.0.0", - "pacote": "^13.4.1", - "semver": "^7.3.4" + "license": "ISC", + "peer": true, + "dependencies": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" } }, - "@lerna/bootstrap": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.1.6.tgz", - "integrity": "sha512-mCPYySlkreBmhK+uKhnwmBynVN0v7a6DCy4n3WiZ6oJ2puM/F1+8vjCBsWKmnR8YiLtUQt0dwL1fm/dCZgZy8g==", - "dev": true, - "requires": { - "@lerna/command": "5.1.6", - "@lerna/filter-options": "5.1.6", - "@lerna/has-npm-version": "5.1.6", - "@lerna/npm-install": "5.1.6", - "@lerna/package-graph": "5.1.6", - "@lerna/pulse-till-done": "5.1.6", - "@lerna/rimraf-dir": "5.1.6", - "@lerna/run-lifecycle": "5.1.6", - "@lerna/run-topologically": "5.1.6", - "@lerna/symlink-binary": "5.1.6", - "@lerna/symlink-dependencies": "5.1.6", - "@lerna/validation-error": "5.1.6", - "@npmcli/arborist": "5.2.0", - "dedent": "^0.7.0", - "get-port": "^5.1.1", - "multimatch": "^5.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4" - } + "node_modules/@ensdomains/resolver": { + "version": "0.2.4", + "dev": true, + "peer": true }, - "@lerna/changed": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.1.6.tgz", - "integrity": "sha512-+dy+qcKZTXmETJm9VVQHuVXfk9OeqPNcJ3qeMvvYBRuMYttEbGZDOrcCjE2vomLGhLpXElHKXnCaJEDAwEla8Q==", + "node_modules/@eslint/eslintrc": { + "version": "1.3.0", "dev": true, - "requires": { - "@lerna/collect-updates": "5.1.6", - "@lerna/command": "5.1.6", - "@lerna/listable": "5.1.6", - "@lerna/output": "5.1.6" + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "@lerna/check-working-tree": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.1.6.tgz", - "integrity": "sha512-WeTO1Vjyw7ZZzM/o1Q+UWFYvvbludM++MaDhEodpNZxL1bDMR3/bvtKa/SNq52aBr4nSKOLVz1BO0Lg+yNaZXQ==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "requires": { - "@lerna/collect-uncommitted": "5.1.6", - "@lerna/describe-ref": "5.1.6", - "@lerna/validation-error": "5.1.6" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "@lerna/child-process": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.1.6.tgz", - "integrity": "sha512-f0SPxNqXaurSoUMHDVCDjU1uA7/Qa9HnGdxiE9OoDaXaErlVloUT7Wpjbp5khryaJZC4PQ9HnnI3FSA/S/SHaA==", + "node_modules/@ethereum-waffle/chai": { + "version": "3.4.4", "dev": true, - "requires": { - "chalk": "^4.1.0", - "execa": "^5.0.0", - "strong-log-transformer": "^2.1.0" + "license": "MIT", + "peer": true, + "dependencies": { + "@ethereum-waffle/provider": "^3.4.4", + "ethers": "^5.5.2" + }, + "engines": { + "node": ">=10.0" } }, - "@lerna/clean": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.1.6.tgz", - "integrity": "sha512-SHRXg6R38NfAtwS8R3hYAacmdDds2Z/51G7YE8bMvmoE4c60eFsBwsCXwwdpPBXL/SdfEGSzoxwEvWHi+f6r7g==", + "node_modules/@ethereum-waffle/compiler": { + "version": "3.4.4", "dev": true, - "requires": { - "@lerna/command": "5.1.6", - "@lerna/filter-options": "5.1.6", - "@lerna/prompt": "5.1.6", - "@lerna/pulse-till-done": "5.1.6", - "@lerna/rimraf-dir": "5.1.6", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1" + "license": "MIT", + "peer": true, + "dependencies": { + "@resolver-engine/imports": "^0.3.3", + "@resolver-engine/imports-fs": "^0.3.3", + "@typechain/ethers-v5": "^2.0.0", + "@types/mkdirp": "^0.5.2", + "@types/node-fetch": "^2.5.5", + "ethers": "^5.0.1", + "mkdirp": "^0.5.1", + "node-fetch": "^2.6.1", + "solc": "^0.6.3", + "ts-generator": "^0.1.1", + "typechain": "^3.0.0" + }, + "engines": { + "node": ">=10.0" } }, - "@lerna/cli": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.1.6.tgz", - "integrity": "sha512-+cQoaOBK2ISw0z5uuHoP2QlV3EZZMdTPuPCVsLDuUwiJCDI3hF3Ps2qQauAZTKO8Ull7z3qid8Yv8sLNEMNrCA==", + "node_modules/@ethereum-waffle/compiler/node_modules/@typechain/ethers-v5": { + "version": "2.0.0", "dev": true, - "requires": { - "@lerna/global-options": "5.1.6", - "dedent": "^0.7.0", - "npmlog": "^6.0.2", - "yargs": "^16.2.0" + "license": "MIT", + "peer": true, + "dependencies": { + "ethers": "^5.0.2" }, + "peerDependencies": { + "ethers": "^5.0.0", + "typechain": "^3.0.0" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/array-back": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4" } }, - "@lerna/collect-uncommitted": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.1.6.tgz", - "integrity": "sha512-IvAmcaENJZKXjTsxsalM8+GuApooqcsKJ74q/9yUGwO3FIMevQyz/VDOFDq7e0WCQoq6ttrdNihEjU/QTjNsMw==", + "node_modules/@ethereum-waffle/compiler/node_modules/command-line-args": { + "version": "4.0.7", "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "chalk": "^4.1.0", - "npmlog": "^6.0.2" + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^2.0.0", + "find-replace": "^1.0.3", + "typical": "^2.6.1" + }, + "bin": { + "command-line-args": "bin/cli.js" } }, - "@lerna/collect-updates": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.1.6.tgz", - "integrity": "sha512-CjKK3bteJpDzqrNOZMGYSwqF5CQsjiPv6soRdayBlJGXB3YW32M2UFcPD77Fvef/Q0xM7FEch3R3ZnBxgzGprg==", + "node_modules/@ethereum-waffle/compiler/node_modules/find-replace": { + "version": "1.0.3", "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "@lerna/describe-ref": "5.1.6", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "slash": "^3.0.0" + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^1.0.4", + "test-value": "^2.1.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "@lerna/command": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.1.6.tgz", - "integrity": "sha512-zRiQels/N8LrR3ntkOn9dRE/0kzRKYTvJTdWcjfF7BC7Lz9VsNhPVy7tdv+Un5GZjVKhDQa/Tpn1h2t6/SLaSQ==", + "node_modules/@ethereum-waffle/compiler/node_modules/find-replace/node_modules/array-back": { + "version": "1.0.4", "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "@lerna/package-graph": "5.1.6", - "@lerna/project": "5.1.6", - "@lerna/validation-error": "5.1.6", - "@lerna/write-log-file": "5.1.6", - "clone-deep": "^4.0.1", - "dedent": "^0.7.0", - "execa": "^5.0.0", - "is-ci": "^2.0.0", - "npmlog": "^6.0.2" + "license": "MIT", + "peer": true, + "dependencies": { + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.12.0" } }, - "@lerna/conventional-commits": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.1.6.tgz", - "integrity": "sha512-kgdQNglEtsIL6wWAhJieghcvvgpZxG2t2HPy+G/wx1qUbeUqTVkw0z88BDDZ7xOfQh6ffJ5GvLZhAj+LjijYxQ==", + "node_modules/@ethereum-waffle/compiler/node_modules/fs-extra": { + "version": "0.30.0", "dev": true, - "requires": { - "@lerna/validation-error": "5.1.6", - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.2", - "conventional-recommended-bump": "^6.1.0", - "fs-extra": "^9.1.0", - "get-stream": "^6.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "semver": "^7.3.4" - }, + "license": "MIT", + "peer": true, "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - } + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" } }, - "@lerna/create": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.1.6.tgz", - "integrity": "sha512-KVwxoYQsojgoUl3AxYSOM40Pa0Coo0SLKV57abVKfHmxfIEyvcGgtxNn6eA3M1lDVntqdlaBmNatkZRt3N1EHg==", + "node_modules/@ethereum-waffle/compiler/node_modules/jsonfile": { + "version": "2.4.0", "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "@lerna/command": "5.1.6", - "@lerna/npm-conf": "5.1.6", - "@lerna/validation-error": "5.1.6", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "init-package-json": "^2.0.2", - "npm-package-arg": "^8.1.0", - "p-reduce": "^2.1.0", - "pacote": "^13.4.1", - "pify": "^5.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0", - "whatwg-url": "^8.4.0", - "yargs-parser": "20.2.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - } + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "@lerna/create-symlink": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.1.6.tgz", - "integrity": "sha512-qkooK66GY2veqHEarbMraCzdgFpg8hwt3vjuBp9sMddYccXb7HHIsTXIOJPn4H5xFizblcRzf8fUJ73XkQZpUw==", + "node_modules/@ethereum-waffle/compiler/node_modules/mkdirp": { + "version": "0.5.6", "dev": true, - "requires": { - "cmd-shim": "^4.1.0", - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2" - }, + "license": "MIT", + "peer": true, "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "@lerna/describe-ref": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.1.6.tgz", - "integrity": "sha512-1VIy0hTkTnlcPqy5Q1hBMJALZbVhjMvRhCnzSgkP0dEuYjaRTyxr0DbhZ4CThREQuqfE3PB2f3DaHVRO8pSSeA==", + "node_modules/@ethereum-waffle/compiler/node_modules/rimraf": { + "version": "2.7.1", "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "npmlog": "^6.0.2" + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "@lerna/diff": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.1.6.tgz", - "integrity": "sha512-UdZ2yHkeTczfwevY8zTIz3kX9gl57e7fkVfNM5zEXifvhbmIozjreurgD2LWf6k/fkEORaFeQ+4dcWGerE70rQ==", + "node_modules/@ethereum-waffle/compiler/node_modules/semver": { + "version": "5.7.1", "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "@lerna/command": "5.1.6", - "@lerna/validation-error": "5.1.6", - "npmlog": "^6.0.2" + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" } }, - "@lerna/exec": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.1.6.tgz", - "integrity": "sha512-1OGca09bVdMD5a2jr7kBQMyWMger6rzwgBWOdHxPaIajPJVUTqhcLBrtJA9qVZol7jztWgDLR3mFxrvmqGijaQ==", + "node_modules/@ethereum-waffle/compiler/node_modules/solc": { + "version": "0.6.12", "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "@lerna/command": "5.1.6", - "@lerna/filter-options": "5.1.6", - "@lerna/profiler": "5.1.6", - "@lerna/run-topologically": "5.1.6", - "@lerna/validation-error": "5.1.6", - "p-map": "^4.0.0" + "license": "MIT", + "peer": true, + "dependencies": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solcjs" + }, + "engines": { + "node": ">=8.0.0" } }, - "@lerna/filter-options": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.1.6.tgz", - "integrity": "sha512-lssUzYGXEJONS14NHCMp5ddL2aNLamDQufYJh9ziNswcG2lxnis+aeboPxCAQooLptGqcIs6QXkcLo27GXsmbg==", + "node_modules/@ethereum-waffle/compiler/node_modules/tmp": { + "version": "0.0.33", "dev": true, - "requires": { - "@lerna/collect-updates": "5.1.6", - "@lerna/filter-packages": "5.1.6", - "dedent": "^0.7.0", - "npmlog": "^6.0.2" + "license": "MIT", + "peer": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" } }, - "@lerna/filter-packages": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.1.6.tgz", - "integrity": "sha512-5cpAdwQoaGsutsY0xmd0x59IixFVZdpovxXiuhIGAakBdrwbNxNpstqJjnOEakOZ/arVQ0ozTUtZK7Vk0GjR9A==", + "node_modules/@ethereum-waffle/compiler/node_modules/ts-essentials": { + "version": "6.0.7", "dev": true, - "requires": { - "@lerna/validation-error": "5.1.6", - "multimatch": "^5.0.0", - "npmlog": "^6.0.2" + "license": "MIT", + "peer": true, + "peerDependencies": { + "typescript": ">=3.7.0" } }, - "@lerna/get-npm-exec-opts": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.1.6.tgz", - "integrity": "sha512-YQDHGrN/Ti56sAwBkV5y/Bn2H/aJ8fQzKG+blWdkcJgoBV04I5po0IbgKiGKl57+pd2bPpDEtcA6WYPyI1Spfw==", + "node_modules/@ethereum-waffle/compiler/node_modules/typechain": { + "version": "3.0.0", "dev": true, - "requires": { - "npmlog": "^6.0.2" + "license": "MIT", + "peer": true, + "dependencies": { + "command-line-args": "^4.0.7", + "debug": "^4.1.1", + "fs-extra": "^7.0.0", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "ts-essentials": "^6.0.3", + "ts-generator": "^0.1.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" } }, - "@lerna/get-packed": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.1.6.tgz", - "integrity": "sha512-m2LojNTkwSiC5dqvLP2gCj5ljPE1e8I2G/U8hIqdVttMwz5JAGbIx3MfACUBG83d5FzSqnCIA1xNkrEZFB4cQg==", + "node_modules/@ethereum-waffle/compiler/node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "ssri": "^8.0.1", - "tar": "^6.1.0" - }, + "license": "MIT", + "peer": true, "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" } }, - "@lerna/github-client": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.1.6.tgz", - "integrity": "sha512-ZydjvlhjUKT9HrB1xdcfBB7u/9Vlod1U2V91qj2CqCaWfwG5ob9jXK4v6tLEzZMGxUKKE2OQCyF7o20tHfkcJQ==", + "node_modules/@ethereum-waffle/compiler/node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^18.1.0", - "git-url-parse": "^11.4.4", - "npmlog": "^6.0.2" + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "@lerna/gitlab-client": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.1.6.tgz", - "integrity": "sha512-ck5XsIz7mQdBNtfKhH4dPrD6t1UZxWBrQeIUsCLO+NorXqYcG8Oqvmzrfm0iByCvaC1QCf+zImJYvMOzjozIpg==", + "node_modules/@ethereum-waffle/compiler/node_modules/typical": { + "version": "2.6.1", "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "npmlog": "^6.0.2", - "whatwg-url": "^8.4.0" - } - }, - "@lerna/global-options": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.1.6.tgz", - "integrity": "sha512-NHMVGs5zhxbtqnBuwujzanYhf7q/HsXBtPn0M/eJpEvcAXaMZgttUMyS2/1JnAUelrAbSMbT+0iOUzSlyD1gtw==", - "dev": true + "license": "MIT", + "peer": true }, - "@lerna/has-npm-version": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.1.6.tgz", - "integrity": "sha512-hDY5/qxp98oacg9fhBfbDmjuRCVHm1brdKsY76FJ4vN+m89sVhXLqqsSHNKCTiQ8OgSzokO2iQeysvgM7ZlqAg==", + "node_modules/@ethereum-waffle/compiler/node_modules/universalify": { + "version": "0.1.2", "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "semver": "^7.3.4" + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" } }, - "@lerna/import": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.1.6.tgz", - "integrity": "sha512-RhWC/3heIevWseY+jzOfGiqPmTofaYyOOqd7+SVaVdSy79TGU0crxWpUECo7COc/FMflFVa+jlk1/JSXWpqG8g==", + "node_modules/@ethereum-waffle/ens": { + "version": "3.4.4", "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "@lerna/command": "5.1.6", - "@lerna/prompt": "5.1.6", - "@lerna/pulse-till-done": "5.1.6", - "@lerna/validation-error": "5.1.6", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "p-map-series": "^2.1.0" - }, + "license": "MIT", + "peer": true, "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } + "@ensdomains/ens": "^0.4.4", + "@ensdomains/resolver": "^0.2.4", + "ethers": "^5.5.2" + }, + "engines": { + "node": ">=10.0" } }, - "@lerna/info": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.1.6.tgz", - "integrity": "sha512-iB4rNweghxng4U7VUsN03M2mDRgjDr8Bv+llXGhtJoSrZ9XzJYyCvGaExG30sBr5VHaArIzJ11nnF0kSDg3bXg==", + "node_modules/@ethereum-waffle/mock-contract": { + "version": "3.4.4", "dev": true, - "requires": { - "@lerna/command": "5.1.6", - "@lerna/output": "5.1.6", - "envinfo": "^7.7.4" + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.5.0", + "ethers": "^5.5.2" + }, + "engines": { + "node": ">=10.0" } }, - "@lerna/init": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.1.6.tgz", - "integrity": "sha512-S8N2vjWcHrqaowYLrX2KEbhXrs31q5wU5sfsjaJ4UxQd/cBUXvp4OWI98lRTQmXOOcw9XwJNDHhZXIR30Pn0aA==", + "node_modules/@ethereum-waffle/provider": { + "version": "3.4.4", "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "@lerna/command": "5.1.6", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "write-json-file": "^4.3.0" - }, + "license": "MIT", + "peer": true, "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } + "@ethereum-waffle/ens": "^3.4.4", + "ethers": "^5.5.2", + "ganache-core": "^2.13.2", + "patch-package": "^6.2.2", + "postinstall-postinstall": "^2.1.0" + }, + "engines": { + "node": ">=10.0" } }, - "@lerna/link": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.1.6.tgz", - "integrity": "sha512-H94MHjhltS8lMA3J38fzcbtQvNe1OoaMO/ZgacC9HvrntIoepqG/2boOKprW6cnTBSwmIFVCn2+LQloBJ2Nwbw==", - "dev": true, - "requires": { - "@lerna/command": "5.1.6", - "@lerna/package-graph": "5.1.6", - "@lerna/symlink-dependencies": "5.1.6", - "p-map": "^4.0.0", - "slash": "^3.0.0" + "node_modules/@ethereumjs/block": { + "version": "3.6.3", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "ethereumjs-util": "^7.1.5", + "merkle-patricia-tree": "^4.2.4" } }, - "@lerna/list": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.1.6.tgz", - "integrity": "sha512-GofR6H1YKoVMj0Rczk9Y+Z/y7ymOKkklRLsUJQE0nWmlKkH8/tdxGHIgfR4sX2oiwtQGfFDc8ddtLX7DHAhMiA==", - "dev": true, - "requires": { - "@lerna/command": "5.1.6", - "@lerna/filter-options": "5.1.6", - "@lerna/listable": "5.1.6", - "@lerna/output": "5.1.6" + "node_modules/@ethereumjs/blockchain": { + "version": "5.5.3", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/ethash": "^1.1.0", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "level-mem": "^5.0.1", + "lru-cache": "^5.1.1", + "semaphore-async-await": "^1.5.1" } }, - "@lerna/listable": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.1.6.tgz", - "integrity": "sha512-Aslj1Lo/t1jnyX+uKvBY4vyAsYKqW9A6nJ8+o1egkQ/bha8Ic4dr5z7HCBKhJl73iAHRMVNn8KlxM+E7pjwsoQ==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.1.6", - "chalk": "^4.1.0", - "columnify": "^1.6.0" + "node_modules/@ethereumjs/blockchain/node_modules/lru-cache": { + "version": "5.1.1", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" } }, - "@lerna/log-packed": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.1.6.tgz", - "integrity": "sha512-yCtgNgEmicqCVb39RO9pRQQGJaugGcsKtvaS1cDLR+M7vlF8gaSvo9t4bZExFzEF5oWcPf4T1FMuhNV12h/uJg==", - "dev": true, - "requires": { - "byte-size": "^7.0.0", - "columnify": "^1.6.0", - "has-unicode": "^2.0.1", - "npmlog": "^6.0.2" + "node_modules/@ethereumjs/blockchain/node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" + }, + "node_modules/@ethereumjs/common": { + "version": "2.6.5", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" } }, - "@lerna/npm-conf": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.1.6.tgz", - "integrity": "sha512-7x8334t9SO2bih7qJa2s8LFuSOZk5QzZ9q1xG9xNSF8BjrhjsGOVghQ1R97l/1zTkBwhqmb1sxLcvH1e21h+MQ==", - "dev": true, - "requires": { - "config-chain": "^1.1.12", - "pify": "^5.0.0" - }, + "node_modules/@ethereumjs/ethash": { + "version": "1.1.0", + "license": "MPL-2.0", "dependencies": { - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - } + "@ethereumjs/block": "^3.5.0", + "@types/levelup": "^4.3.0", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.1.1", + "miller-rabin": "^4.0.0" } }, - "@lerna/npm-dist-tag": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.1.6.tgz", - "integrity": "sha512-mwjnjqN+Z8z2lAAnOE/2L8OiLChCL374ltaxNOGnhLyWKdCFoit7qhiIIV05CgoE2/iJQoOZP7ioP3H7JtJbsw==", - "dev": true, - "requires": { - "@lerna/otplease": "5.1.6", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", - "npmlog": "^6.0.2" - }, + "node_modules/@ethereumjs/ethash/node_modules/buffer-xor": { + "version": "2.0.2", + "license": "MIT", "dependencies": { - "make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - } - }, - "npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", - "dev": true, - "requires": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } + "safe-buffer": "^5.1.1" + } + }, + "node_modules/@ethereumjs/tx": { + "version": "3.5.2", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/@ethereumjs/vm": { + "version": "5.9.3", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/block": "^3.6.3", + "@ethereumjs/blockchain": "^5.5.3", + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "async-eventemitter": "^0.2.4", + "core-js-pure": "^3.0.1", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "merkle-patricia-tree": "^4.2.4", + "rustbn.js": "~0.2.0" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.6.4", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, - "socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - } + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "@lerna/npm-install": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.1.6.tgz", - "integrity": "sha512-SKqXATVPVEGS2xtNNjxGhY1/C9huxYnETelpwAB/eSLcMT4FFBVxeQ83NF9log4w+iCUaS+veElfuF2uvPxaPg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "@lerna/get-npm-exec-opts": "5.1.6", - "fs-extra": "^9.1.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^6.0.2", - "signal-exit": "^3.0.3", - "write-pkg": "^4.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "node_modules/@ethersproject/abstract-provider": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" } }, - "@lerna/npm-publish": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.1.6.tgz", - "integrity": "sha512-ce5UMVZZwjpwkKdekXc1xCtwb4ZKwRVsxHCQFoCisE1/3Pw6+5DBptBOgjmJGa1VA7glxGgp5a6aSERA5grA/g==", - "dev": true, - "requires": { - "@lerna/otplease": "5.1.6", - "@lerna/run-lifecycle": "5.1.6", - "fs-extra": "^9.1.0", - "libnpmpublish": "^4.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "read-package-json": "^3.0.0" - }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.6.2", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, - "read-package-json": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", - "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", - "dev": true, - "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" - } + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/properties": "^5.6.0" } }, - "@lerna/npm-run-script": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.1.6.tgz", - "integrity": "sha512-9M7XGnrBoitRnzAT6UGzHtBdQB+HmpsMd+ks7laK7VeqP1rR3t7XXZOm0avMBx2lSBBFSpDIkD4HV0/MeDtcZQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "@lerna/get-npm-exec-opts": "5.1.6", - "npmlog": "^6.0.2" + "node_modules/@ethersproject/bignumber": { + "version": "5.6.2", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" } }, - "@lerna/otplease": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.1.6.tgz", - "integrity": "sha512-HFiiMIuP2BoiN/V8I5KS2xZjlrnBEJSKY/oIkIRFIoL/9uvHRorKjlsi0KsQLnLHx3+pZ+AL65LXjt54sJdWiQ==", - "dev": true, - "requires": { - "@lerna/prompt": "5.1.6" + "node_modules/@ethersproject/bytes": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.6.0" } }, - "@lerna/output": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.1.6.tgz", - "integrity": "sha512-FjZfnDwiKHeKMEZVN2eWbVd0pKINwXRjDXV0CGo1HrTvbXQI3lcrhgoPkDE42BSALaH7E9N0YCUYOYVWlJvSzQ==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" + "node_modules/@ethersproject/constants": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.6.2" } }, - "@lerna/pack-directory": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.1.6.tgz", - "integrity": "sha512-dKFFQ95BheshI4eWOVYT7DF6iM8VITTwOfueLnnUe8h8OgBDHnZJOEHT+zNjvXo6sA0DtN8pvpxA8VVEroq2KQ==", - "dev": true, - "requires": { - "@lerna/get-packed": "5.1.6", - "@lerna/package": "5.1.6", - "@lerna/run-lifecycle": "5.1.6", - "@lerna/temp-write": "5.1.6", - "npm-packlist": "^2.1.4", - "npmlog": "^6.0.2", - "tar": "^6.1.0" - }, + "node_modules/@ethersproject/contracts": { + "version": "5.6.2", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, - "npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", - "dev": true, - "requires": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "@lerna/package": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.1.6.tgz", - "integrity": "sha512-OwsYEVVDEFIybYSh3edn5ZH7EoMPEmfl92pri3rqtaGYj76/ENGaQZSXT5ZH2oJKg5Jh9LrtaYAc+r/fZ+1vuQ==", + "node_modules/@ethersproject/hdnode": { + "version": "5.6.2", "dev": true, - "requires": { - "load-json-file": "^6.2.0", - "npm-package-arg": "^8.1.0", - "write-pkg": "^4.0.0" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" } }, - "@lerna/package-graph": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.1.6.tgz", - "integrity": "sha512-kAmcZLbFcgzdwwEE34ls2hKKwLNXrp++Lb3QgLi5oZl95cGEXjhGNqECdY+hAgBxaSOAgrAd9dvxoR36zl5LJw==", + "node_modules/@ethersproject/json-wallets": { + "version": "5.6.1", "dev": true, - "requires": { - "@lerna/prerelease-id-from-version": "5.1.6", - "@lerna/validation-error": "5.1.6", - "npm-package-arg": "^8.1.0", - "npmlog": "^6.0.2", - "semver": "^7.3.4" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" } }, - "@lerna/prerelease-id-from-version": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.1.6.tgz", - "integrity": "sha512-LJYIuxw9rpKkCWtE10gOOyqpcKRzV34Ljk0L0WSaXILlcWf5bAb0ZmF8t5UJ/MzhGklYwT/Fk0yPtVtu7GnBaA==", - "dev": true, - "requires": { - "semver": "^7.3.4" + "node_modules/@ethersproject/keccak256": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" } }, - "@lerna/profiler": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.1.6.tgz", - "integrity": "sha512-ZFU7WPIk7FxblnGx9Ux0W+NLnTGTIpjdVWEzi/8QkJssmjxerbW62lO5tvGzv6kjPQsml2kC7yPBwX9JEOFCdQ==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "upath": "^2.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "node_modules/@ethersproject/logger": { + "version": "5.6.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } - } + ], + "license": "MIT" }, - "@lerna/project": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.1.6.tgz", - "integrity": "sha512-9EXc2uTDfruvJcWnW3UrDZCAgZ/LUOQDC92xBSi1qazSE3fEsfrLBJmMqUzBRTuGoGh5BPnJgA2l0It01z51dQ==", - "dev": true, - "requires": { - "@lerna/package": "5.1.6", - "@lerna/validation-error": "5.1.6", - "cosmiconfig": "^7.0.0", - "dedent": "^0.7.0", - "dot-prop": "^6.0.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.2", - "load-json-file": "^6.2.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "resolve-from": "^5.0.0", - "write-json-file": "^4.3.0" + "node_modules/@ethersproject/networks": { + "version": "5.6.4", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.6.0" } }, - "@lerna/prompt": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.1.6.tgz", - "integrity": "sha512-3Ds/N8mzb1zyTq079CMPCg2wfo5cwVBtr0N5Bh9A+NERQuLavxF1tBRKRYLF4h9zHdybNvAMkKfoQkkyJNliQg==", + "node_modules/@ethersproject/pbkdf2": { + "version": "5.6.1", "dev": true, - "requires": { - "inquirer": "^7.3.3", - "npmlog": "^6.0.2" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/sha2": "^5.6.1" } }, - "@lerna/publish": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.1.6.tgz", - "integrity": "sha512-ZGB4JJBUTBnx5N37qNdyZ+iZX4KXtjbEnB3WU7HH7IzMHc4JZbDEQhAyfELKdvB4gEdYJTsfA8v8J75U3HcluA==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.1.6", - "@lerna/child-process": "5.1.6", - "@lerna/collect-updates": "5.1.6", - "@lerna/command": "5.1.6", - "@lerna/describe-ref": "5.1.6", - "@lerna/log-packed": "5.1.6", - "@lerna/npm-conf": "5.1.6", - "@lerna/npm-dist-tag": "5.1.6", - "@lerna/npm-publish": "5.1.6", - "@lerna/otplease": "5.1.6", - "@lerna/output": "5.1.6", - "@lerna/pack-directory": "5.1.6", - "@lerna/prerelease-id-from-version": "5.1.6", - "@lerna/prompt": "5.1.6", - "@lerna/pulse-till-done": "5.1.6", - "@lerna/run-lifecycle": "5.1.6", - "@lerna/run-topologically": "5.1.6", - "@lerna/validation-error": "5.1.6", - "@lerna/version": "5.1.6", - "fs-extra": "^9.1.0", - "libnpmaccess": "^4.0.1", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "pacote": "^13.4.1", - "semver": "^7.3.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - } - }, - "npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", - "dev": true, - "requires": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } + "node_modules/@ethersproject/properties": { + "version": "5.6.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, - "socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - } + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.6.0" } }, - "@lerna/pulse-till-done": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.1.6.tgz", - "integrity": "sha512-R9YpgGAlRB9XyYBZt41i8rLsnLqUDB8LYlOFhfrBX0Y1mI0/+9iYIHF0xBemrHqimQftu3QxvEoxpsDrXUJBIg==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" + "node_modules/@ethersproject/providers": { + "version": "5.6.8", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" } }, - "@lerna/query-graph": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.1.6.tgz", - "integrity": "sha512-67dzRjCGjYjEUpO3PwFIcTpgJhaQO4WT687bpJh8M5XaS0xeaz2g+e1C9U/n8xIHJm3N2PlKYMSczuvPhSayCw==", - "dev": true, - "requires": { - "@lerna/package-graph": "5.1.6" + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "7.4.6", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "@lerna/resolve-symlink": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.1.6.tgz", - "integrity": "sha512-+2rCXIj8jM31WRPqUffBAb1e5TimgSDSPTM/q52cvSs+JRgqiw+aVx/8FgG/a/bMg+5+Zx/+A4c8KxnWCjLF5A==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "read-cmd-shim": "^2.0.0" - }, + "node_modules/@ethersproject/random": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, - "@lerna/rimraf-dir": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.1.6.tgz", - "integrity": "sha512-8J9LrlW/IzSvDXxk7hbobofSOXvKS2o+q6vdamrwLapk2KfI/KGh0auBo/s4Rvr5t6OZfpr4/woLJyQFdnwWWA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.6", - "npmlog": "^6.0.2", - "path-exists": "^4.0.0", - "rimraf": "^3.0.2" + "node_modules/@ethersproject/sha2": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" } }, - "@lerna/run": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.1.6.tgz", - "integrity": "sha512-WMZF4tKFL/hGhUHphcYJNUDGvpHdrLD8ysACiqgIyu5ssIWiXb0wbUO0OeGWMss0b7TNOUG1y6DGOPFWFWRd3w==", - "dev": true, - "requires": { - "@lerna/command": "5.1.6", - "@lerna/filter-options": "5.1.6", - "@lerna/npm-run-script": "5.1.6", - "@lerna/output": "5.1.6", - "@lerna/profiler": "5.1.6", - "@lerna/run-topologically": "5.1.6", - "@lerna/timer": "5.1.6", - "@lerna/validation-error": "5.1.6", - "p-map": "^4.0.0" + "node_modules/@ethersproject/signing-key": { + "version": "5.6.2", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" } }, - "@lerna/run-lifecycle": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.1.6.tgz", - "integrity": "sha512-rTLQwIwUtN6+WpyFceZoahi1emTlLwJYwTMBZZla3w6aBwERdfpEvB4MVz2F6/TTYmJ2uzWa1Y85faGH4x4blA==", + "node_modules/@ethersproject/solidity": { + "version": "5.6.1", "dev": true, - "requires": { - "@lerna/npm-conf": "5.1.6", - "@npmcli/run-script": "^3.0.2", - "npmlog": "^6.0.2" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" } }, - "@lerna/run-topologically": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.1.6.tgz", - "integrity": "sha512-2THwjyU/aq7NOUmjCKQYK7l78fUoBwBtWXFGfeqK5xN5LBc2zr293cC1Z7CAZHUVh1JklLWL0PXX8Z34g3210g==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.1.6", - "p-queue": "^6.6.2" + "node_modules/@ethersproject/strings": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, - "@lerna/symlink-binary": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.1.6.tgz", - "integrity": "sha512-nj5a77e8Vk+AZY+batyr+lCo3EcGTiGjSP0MFnkXKn1wUyUUZiKgS48J/9RTNdTpWZRC4G2PneR6BUmnF6Mnlg==", - "dev": true, - "requires": { - "@lerna/create-symlink": "5.1.6", - "@lerna/package": "5.1.6", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0" - }, + "node_modules/@ethersproject/transactions": { + "version": "5.6.2", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.6.1", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, - "@lerna/symlink-dependencies": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.1.6.tgz", - "integrity": "sha512-nMVTEm8oi3TrKXmDeS9445zngWQR31AShKH+u9f+YZVYE1Ncv4/XpgDSkTNsbm//vMi0ilWH+QQxjBC+pDXd8Q==", + "node_modules/@ethersproject/wallet": { + "version": "5.6.2", "dev": true, - "requires": { - "@lerna/create-symlink": "5.1.6", - "@lerna/resolve-symlink": "5.1.6", - "@lerna/symlink-binary": "5.1.6", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0" - }, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.6.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "@lerna/temp-write": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.1.6.tgz", - "integrity": "sha512-Ycb0dNBi5bwgVyc/aeZ5JmgSEWfaJjh9efFqDfsj763HBLr9sBZvqQYBRXGAWxBdDWy+lXTXximsQw5gJZZxpw==", + "node_modules/@ethersproject/wordlists": { + "version": "5.6.1", "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "is-stream": "^2.0.0", - "make-dir": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "@lerna/timer": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.1.6.tgz", - "integrity": "sha512-m28ufTfg7zibqPujxborrTy9WrocCmoMXvw1PuSZ0LCf5hhK3HUJJ8ybxYAGpUXdZqjzvRQNlc954GsOkCSJEA==", + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, - "@lerna/validation-error": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.1.6.tgz", - "integrity": "sha512-6+rc1bGTqaRMvML8Qew+RoqZFxyESSX+GBCTv0pW1SBcNo/yC76fq9y/WSA3dn6GuqHWyX3H0Yki7HutezM7/A==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" + "node_modules/@gnosis.pm/safe-core-sdk-types": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/contracts": "^5.6.0", + "@gnosis.pm/safe-deployments": "^1.12.0", + "web3-core": "^1.7.1" } }, - "@lerna/version": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.1.6.tgz", - "integrity": "sha512-UE7ZHUdHtlmHQPK8ZSc62BHnWXIPqV7nzQAM/tQngIGSAH0oXHjxktP4ysPRqX8U0jfl212fSveVK7HK988zoQ==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.1.6", - "@lerna/child-process": "5.1.6", - "@lerna/collect-updates": "5.1.6", - "@lerna/command": "5.1.6", - "@lerna/conventional-commits": "5.1.6", - "@lerna/github-client": "5.1.6", - "@lerna/gitlab-client": "5.1.6", - "@lerna/output": "5.1.6", - "@lerna/prerelease-id-from-version": "5.1.6", - "@lerna/prompt": "5.1.6", - "@lerna/run-lifecycle": "5.1.6", - "@lerna/run-topologically": "5.1.6", - "@lerna/temp-write": "5.1.6", - "@lerna/validation-error": "5.1.6", - "chalk": "^4.1.0", - "dedent": "^0.7.0", - "load-json-file": "^6.2.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "p-reduce": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4", - "slash": "^3.0.0", - "write-json-file": "^4.3.0" + "node_modules/@gnosis.pm/safe-core-sdk-utils": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "web3-utils": "^1.7.1" } }, - "@lerna/write-log-file": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.1.6.tgz", - "integrity": "sha512-UfuERC0dN5cw6Vc11/8fDfnXfuEQXKbOweJ2D83nrNJIZS/HwWkAoYVZ493w7xJzrqKi6V352BY3m9D7pi8h5g==", - "dev": true, - "requires": { - "npmlog": "^6.0.2", - "write-file-atomic": "^3.0.3" - }, + "node_modules/@gnosis.pm/safe-deployments": { + "version": "1.15.0", + "license": "MIT", "dependencies": { - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - } + "semver": "^7.3.7" } }, - "@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, + "node_modules/@gnosis.pm/safe-ethers-lib": { + "version": "1.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + }, + "peerDependencies": { + "ethers": "^5.5.3" } }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@gnosis.pm/safe-web3-lib": { + "version": "1.1.0", "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "license": "MIT", + "dependencies": { + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + }, + "peerDependencies": { + "web3": "^1.7.0" } }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" } }, - "@npmcli/arborist": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.2.0.tgz", - "integrity": "sha512-zWV7scFGL0SmpvfQyIWnMFbU/0YgtMNyvJiJwR98kyjUSntJGWFFR0O600d5W+TrDcTg0GyDbY+HdzGEg+GXLg==", + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.0", - "bin-links": "^3.0.0", - "cacache": "^16.0.6", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.0.5", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - }, - "dependencies": { - "@npmcli/fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", - "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", - "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", - "dev": true - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } + "license": "BSD-3-Clause" + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" } }, - "@npmcli/ci-detect": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz", - "integrity": "sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q==", + "node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", "dev": true }, - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.8", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "devOptional": true, + "license": "MIT", "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "@npmcli/git": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", - "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", + "node_modules/@lerna/add": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.1.8.tgz", + "integrity": "sha512-ABplk8a5MmiT8lG1b9KHijRUwj/nOePMuezBHjJEpNeQ8Bw5w3IV/6hpdmApx/w1StBwWWf0UG42klrxXlfl/g==", "dev": true, - "requires": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, "dependencies": { - "lru-cache": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", - "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - } + "@lerna/bootstrap": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/filter-options": "5.1.8", + "@lerna/npm-conf": "5.1.8", + "@lerna/validation-error": "5.1.8", + "dedent": "^0.7.0", + "npm-package-arg": "^8.1.0", + "p-map": "^4.0.0", + "pacote": "^13.4.1", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "node_modules/@lerna/bootstrap": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.1.8.tgz", + "integrity": "sha512-/QZJc6aRxi6csSR59jdqRXPFh33fbn60F1k/SWtCCELGkZub23fAPLKaO7SlMcyghN3oKlfTfVymu/NWEcptJQ==", "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" + "dependencies": { + "@lerna/command": "5.1.8", + "@lerna/filter-options": "5.1.8", + "@lerna/has-npm-version": "5.1.8", + "@lerna/npm-install": "5.1.8", + "@lerna/package-graph": "5.1.8", + "@lerna/pulse-till-done": "5.1.8", + "@lerna/rimraf-dir": "5.1.8", + "@lerna/run-lifecycle": "5.1.8", + "@lerna/run-topologically": "5.1.8", + "@lerna/symlink-binary": "5.1.8", + "@lerna/symlink-dependencies": "5.1.8", + "@lerna/validation-error": "5.1.8", + "@npmcli/arborist": "5.2.0", + "dedent": "^0.7.0", + "get-port": "^5.1.1", + "multimatch": "^5.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@npmcli/map-workspaces": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz", - "integrity": "sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q==", + "node_modules/@lerna/changed": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.1.8.tgz", + "integrity": "sha512-JA9jX9VTHrwSMRJTgLEzdyyx4zi35X0yP6fUUFuli9a0zrB4HV4IowSn1XM03H8iebbDLB0eWBbosqhYwSP8Sw==", "dev": true, - "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - }, "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } + "@lerna/collect-updates": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/listable": "5.1.8", + "@lerna/output": "5.1.8" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@npmcli/metavuln-calculator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.0.tgz", - "integrity": "sha512-Q5fbQqGDlYqk7kWrbg6E2j/mtqQjZop0ZE6735wYA1tYNHguIDjAuWs+kFb5rJCkLIlXllfapvsyotYKiZOTBA==", + "node_modules/@lerna/check-working-tree": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.1.8.tgz", + "integrity": "sha512-3QyiV75cYt9dtg9JhUt+Aiyk44mFjlyqIIJ/XZ2Cp/Xcwws/QrNKOTs5iYFX5XWzlpTgotOHcu1MH/mY55Czlw==", "dev": true, - "requires": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - }, "dependencies": { - "@npmcli/fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", - "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "lru-cache": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", - "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", - "dev": true - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - } + "@lerna/collect-uncommitted": "5.1.8", + "@lerna/describe-ref": "5.1.8", + "@lerna/validation-error": "5.1.8" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "node_modules/@lerna/child-process": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.1.8.tgz", + "integrity": "sha512-P0o4Y/sdiUJ53spZpaVv53NdAcl15UAi5//W3uT2T250xQPlVROwKy11S3Wzqglh94FYdi6XUy293x1uwBlFPw==", "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "dependencies": { + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@npmcli/name-from-folder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", - "dev": true - }, - "@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", - "dev": true - }, - "@npmcli/package-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", - "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", + "node_modules/@lerna/clean": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.1.8.tgz", + "integrity": "sha512-xMExZgjan5/8ZTjJkZoLoTKY1MQOMk7W1YXslbg9BpLevBycPk041MlLauzCyO8XdOpqpVnFCg/9W66fltqmQg==", "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1" + "dependencies": { + "@lerna/command": "5.1.8", + "@lerna/filter-options": "5.1.8", + "@lerna/prompt": "5.1.8", + "@lerna/pulse-till-done": "5.1.8", + "@lerna/rimraf-dir": "5.1.8", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "node_modules/@lerna/cli": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.1.8.tgz", + "integrity": "sha512-0Ghhd9M9QvY6qZtnjTq5RHOIac2ttsW2VNFLFso8ov3YV+rJF4chLhyVaVBvLSA+5ZhwFH+xQ3/yeUx1tDO8GA==", "dev": true, - "requires": { - "infer-owner": "^1.0.4" + "dependencies": { + "@lerna/global-options": "5.1.8", + "dedent": "^0.7.0", + "npmlog": "^6.0.2", + "yargs": "^16.2.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@npmcli/run-script": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz", - "integrity": "sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==", + "node_modules/@lerna/collect-uncommitted": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.1.8.tgz", + "integrity": "sha512-pRsIYu82A3DxLahQI/3azoi/kjj6QSSHHAOx4y1YVefeDCaVtAm8aesNbpnyNVfJrie/1Gt5GMEpjfm/KScjlw==", "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^8.4.1", - "read-package-json-fast": "^2.0.3" + "dependencies": { + "@lerna/child-process": "5.1.8", + "chalk": "^4.1.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@nrwl/cli": { - "version": "14.3.6", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.3.6.tgz", - "integrity": "sha512-MNCBzM3ZDsujEc5crltH/kEyNBKx6DofLHdpzY1EoiY+yF57W7E1B6ERkVUGDc52sR4snEUKpQLXdVFjwP+z8A==", + "node_modules/@lerna/collect-updates": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.1.8.tgz", + "integrity": "sha512-ZPQmYKzwDJ4T+t2fRUI/JjaCzC8Lv02kWIeSXrcIG+cf2xrbM0vK4iQMAKhagTsiWt9hrFwvtMgLp4a6+Ht8Qg==", "dev": true, - "requires": { - "nx": "14.3.6" + "dependencies": { + "@lerna/child-process": "5.1.8", + "@lerna/describe-ref": "5.1.8", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@nrwl/tao": { - "version": "14.3.6", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.3.6.tgz", - "integrity": "sha512-g3y6VRq4wNtbFZIclJwRR/1hcTesx6h64g7h80VWtyRw0pVq/0zAjb8abeQSTDLM15uc1pQJYPEfsR/KgI3Sow==", + "node_modules/@lerna/command": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.1.8.tgz", + "integrity": "sha512-j/Q++APvkyN2t8GqOpK+4OxH1bB7OZGVWIKh0JQlwbtqH1Y06wlSyNdwpPmv8h1yO9fS1pY/xHwFbs1IicxwzA==", "dev": true, - "requires": { - "nx": "14.3.6" + "dependencies": { + "@lerna/child-process": "5.1.8", + "@lerna/package-graph": "5.1.8", + "@lerna/project": "5.1.8", + "@lerna/validation-error": "5.1.8", + "@lerna/write-log-file": "5.1.8", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^5.0.0", + "is-ci": "^2.0.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "node_modules/@lerna/conventional-commits": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.1.8.tgz", + "integrity": "sha512-UduSVDp/+2WlEV6ZO5s7yTzkfhYyPdEsqR6aaUtIJZe9wejcCK4Lc3BJ2BAYIOdtDArNY2CJPsz1LYvFDtPRkw==", "dev": true, - "requires": { - "@octokit/types": "^6.0.3" + "dependencies": { + "@lerna/validation-error": "5.1.8", + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-core": "^4.2.2", + "conventional-recommended-bump": "^6.1.0", + "fs-extra": "^9.1.0", + "get-stream": "^6.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "node_modules/@lerna/create": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.1.8.tgz", + "integrity": "sha512-n9qLLeg1e0bQeuk8pA8ELEP05Ktl50e1EirdXGRqqvaXdCn41nYHo4PilUgb77/o/t3Z5N4/ic+0w8OvGVakNg==", "dev": true, - "requires": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "dependencies": { + "@lerna/child-process": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/npm-conf": "5.1.8", + "@lerna/validation-error": "5.1.8", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "init-package-json": "^2.0.2", + "npm-package-arg": "^8.1.0", + "p-reduce": "^2.1.0", + "pacote": "^13.4.1", + "pify": "^5.0.0", + "semver": "^7.3.4", + "slash": "^3.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0", + "whatwg-url": "^8.4.0", + "yargs-parser": "20.2.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "node_modules/@lerna/create-symlink": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.1.8.tgz", + "integrity": "sha512-5acQITDsJ7dqywPRrF1mpTUPm/EXFfiv/xF6zX+ySUjp4h0Zhhnsm8g2jFdRPDSjIxFD0rV/5iU4X6qmflXlAg==", "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } + "cmd-shim": "^4.1.0", + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "node_modules/@lerna/describe-ref": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.1.8.tgz", + "integrity": "sha512-/u5b2ho09icPcvPb1mlh/tPC07nSFc1cvvFjM9Yg5kfVs23vzVWeA8y0Bk5djlaaSzyHECyqviriX0aoaY47Wg==", "dev": true, - "requires": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" + "dependencies": { + "@lerna/child-process": "5.1.8", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@octokit/openapi-types": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.5.0.tgz", - "integrity": "sha512-VatvE5wtRkJq6hAWGTBZ62WkrdlCiy0G0u27cVOYTfAWVZi7QqTurVcjpsyc5+9hXLPRP5O/DaNEs4TgAp4Mqg==", - "dev": true - }, - "@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.20.0.tgz", - "integrity": "sha512-LbemX86JEmOCFo9eRwrtdP5Isq69TefLS1J7w0DO4PMhfpvRfqYVzq9c0eH1xgcx2PSA7/VJHu9SwvNhD9FjVg==", + "node_modules/@lerna/diff": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.1.8.tgz", + "integrity": "sha512-BLoi6l/v8p43IkAHTkpjZ4Kq27kYK7iti6y6gYoZuljSwNj38TjgqRb2ohHezQ5c0KFAj8xHEOuZM3Ou6tGyTQ==", "dev": true, - "requires": { - "@octokit/types": "^6.38.1" + "dependencies": { + "@lerna/child-process": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/validation-error": "5.1.8", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true + "node_modules/@lerna/exec": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.1.8.tgz", + "integrity": "sha512-U+owlBKoAUfULqRz0oBtHx/I6tYQy9I7xfPP0GoaXa8lpF7esnpCxsJG8GpdzFqIS30o6a2PtyHvp4jkrQF8Zw==", + "dev": true, + "dependencies": { + "@lerna/child-process": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/filter-options": "5.1.8", + "@lerna/profiler": "5.1.8", + "@lerna/run-topologically": "5.1.8", + "@lerna/validation-error": "5.1.8", + "p-map": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.0.tgz", - "integrity": "sha512-mvdwq+LvhR2GRDY82FgSZ52xX6wkOCpjiI3amiKbzKHd9nyKeFdXLsIQ3Go12tWRtvo+HwqoypLHDjRrgMFDQA==", + "node_modules/@lerna/filter-options": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.1.8.tgz", + "integrity": "sha512-ene6xj1BRSFgIgcVg9xABp1cCiRnqm3Uetk9InxOtECbofpSDa7cQy5lsPv6GGAgXFbT91SURQiipH9FAOP+yQ==", "dev": true, - "requires": { - "@octokit/types": "^6.38.0", - "deprecation": "^2.3.1" + "dependencies": { + "@lerna/collect-updates": "5.1.8", + "@lerna/filter-packages": "5.1.8", + "dedent": "^0.7.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "node_modules/@lerna/filter-packages": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.1.8.tgz", + "integrity": "sha512-2pdtZ+I2Sb+XKfUa/q8flVUyaY0hhwqFYMXll7Nut7Phb1w1TtkEXc2/N0Ac1yia6qSJB/5WrsbAcLF/ITp1vA==", "dev": true, - "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" + "dependencies": { + "@lerna/validation-error": "5.1.8", + "multimatch": "^5.0.0", + "npmlog": "^6.0.2" }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/get-npm-exec-opts": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.1.8.tgz", + "integrity": "sha512-oujoIkEDDVK2+5ooPMEPI+xGs/iwPmGJ63AZu1h7P42YU9tHKQmF5yPybF3Jn99W8+HggM6APUGiX+5oHRvKXA==", + "dev": true, "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "node_modules/@lerna/get-packed": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.1.8.tgz", + "integrity": "sha512-3vabIFlfUFQPbFnlOaDCNY4p7mufrhIFPoXxWu15JnjJsSDf9UB2a98xX43xNlxjgZLvnLai3bhCNfrKonI4Kw==", "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" + "dependencies": { + "fs-extra": "^9.1.0", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "node_modules/@lerna/github-client": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.1.8.tgz", + "integrity": "sha512-y1oweMZ9xc/htIHy42hy2FuMUR/LS3CQlslXG9PAHzl5rE1VDDjvSv61kS50ZberGfB9xmkCxqH+2LgROG9B1A==", "dev": true, - "requires": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + "dependencies": { + "@lerna/child-process": "5.1.8", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^18.1.0", + "git-url-parse": "^12.0.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@octokit/types": { - "version": "6.38.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.38.1.tgz", - "integrity": "sha512-kWMohLCIvnwApRmxRFDOqve7puiNNdtVfgwdDOm6QyJNorWOgKv2/AodCcGqx63o28kF7Dr4/nJCatrwwqhULg==", + "node_modules/@lerna/gitlab-client": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.1.8.tgz", + "integrity": "sha512-/EMKdkGnBU4ldyAQ4pXp2TKi1znvY3MiCULt8Hy42p4HhfFl/AxZYDovQYfop1NHVk29BQrGHfvlpyBNqZ2a8g==", "dev": true, - "requires": { - "@octokit/openapi-types": "^12.5.0" + "dependencies": { + "node-fetch": "^2.6.1", + "npmlog": "^6.0.2", + "whatwg-url": "^8.4.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "node_modules/@lerna/global-options": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.1.8.tgz", + "integrity": "sha512-VCfTilGh0O4T6Lk4DKYA5cUl1kPjwFfRUS/GSpdJx0Lf/dyDbFihrmTHefgUe9N2/nTQySDIdPk9HBr45tozWQ==", "dev": true, - "requires": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, + "node_modules/@lerna/has-npm-version": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.1.8.tgz", + "integrity": "sha512-yN5j9gje2ND8zQf4tN52QDQ/yFb24o9Kasm4PZm99FzBURRIwFWCnvo3edOMaiJg0DpA660L+Kq9G0L+ZRKRZQ==", + "dev": true, "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "@lerna/child-process": "5.1.8", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, + "node_modules/@lerna/import": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.1.8.tgz", + "integrity": "sha512-m1+TEhlgS9i14T7o0/8o6FMZJ1O2PkQdpCjqUa5xdLITqvPozoMNujNgiX3ZVLg/XcFOjMtbCsYtspqtKyEsMQ==", + "dev": true, "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "@lerna/child-process": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/prompt": "5.1.8", + "@lerna/pulse-till-done": "5.1.8", + "@lerna/validation-error": "5.1.8", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "p-map-series": "^2.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, + "node_modules/@lerna/info": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.1.8.tgz", + "integrity": "sha512-VNCBNOrd5Q1iv1MOF++PzMrdAnTn6KTDbb5hcXHdWBRZUuOs3QOwVYGzAlTFMvwVmmlcER4z8BYyUsbxk3sIdQ==", + "dev": true, "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "@lerna/command": "5.1.8", + "@lerna/output": "5.1.8", + "envinfo": "^7.7.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "requires": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, + "node_modules/@lerna/init": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.1.8.tgz", + "integrity": "sha512-vEMnq/70u/c031/vURA4pZSxlBRAwjg7vOP7mt9M4dmKz/vkVnQ/5Ig9K0TKqC31hQg957/4m20obYEiFgC3Pw==", + "dev": true, "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "@lerna/child-process": "5.1.8", + "@lerna/command": "5.1.8", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, + "node_modules/@lerna/link": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.1.8.tgz", + "integrity": "sha512-qOtZiMzB9JYyNPUlvpqTxh0Z1EmNVde8pFUIYybv+s3btrKEBPgsvvrOrob/mha3QJxnwcPDPjHt/wCHFxLruA==", + "dev": true, "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "@lerna/command": "5.1.8", + "@lerna/package-graph": "5.1.8", + "@lerna/symlink-dependencies": "5.1.8", + "p-map": "^4.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" - }, - "@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, + "node_modules/@lerna/list": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.1.8.tgz", + "integrity": "sha512-fVN9o/wKtgcOyuYwvYTg2HI6ORX2kOoBkCJ+PI/uZ/ImwLMTJ2Bf8i/Vsysl3bLFHhQFglzPZ7V1SQP/ku0Sdw==", + "dev": true, "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "@lerna/command": "5.1.8", + "@lerna/filter-options": "5.1.8", + "@lerna/listable": "5.1.8", + "@lerna/output": "5.1.8" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@solidity-parser/parser": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.2.tgz", - "integrity": "sha512-10cr0s+MtRtqjEw0WFJrm2rwULN30xx7btd/v9cmqME2617/2M5MbHDkFIGIGTa7lwNw4bN9mVGfhlLzrYw8pA==", - "requires": { - "antlr4ts": "^0.5.0-alpha.4" + "node_modules/@lerna/listable": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.1.8.tgz", + "integrity": "sha512-nQ/40cbVZLFBv8o9Dz6ivHFZhosfDTYOPm4oHNu0xdexaTXWz5bQUlM4HtOm7K0dJ1fvLEVqiQNAuFSEhARt9g==", + "dev": true, + "dependencies": { + "@lerna/query-graph": "5.1.8", + "chalk": "^4.1.0", + "columnify": "^1.6.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "node_modules/@lerna/log-packed": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.1.8.tgz", + "integrity": "sha512-alaCIzCtKV5oKyu632emda0hUQMw/BcL2U3v4ObLu90sU8P7mu6TipKRvR9OZxOLDnZGnPE7CMHSU8gsQoIasw==", + "dev": true, + "dependencies": { + "byte-size": "^7.0.0", + "columnify": "^1.6.0", + "has-unicode": "^2.0.1", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "node_modules/@lerna/npm-conf": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.1.8.tgz", + "integrity": "sha512-d/pIcO4RwO3fXNlUbhQ6+qwULxGSiW/xcOtiETVf4ZfjaDqjkCaIxZaeZfm5gWDtII5klpQn3f2d71FCnZG5lw==", + "dev": true, + "dependencies": { + "config-chain": "^1.1.12", + "pify": "^5.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "node_modules/@lerna/npm-dist-tag": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.1.8.tgz", + "integrity": "sha512-vZXO0/EClOzRRHHfqB4APhZkxiJpQbsQAAFwaXQCNJE+3S+I/MD0S3iiUWrNs4QnN/8Lj1KyzUfznVDXX7AIUQ==", + "dev": true, + "dependencies": { + "@lerna/otplease": "5.1.8", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true + "node_modules/@lerna/npm-install": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.1.8.tgz", + "integrity": "sha512-AiYQyz4W1+NDeBw3qmdiiatfCtwtaGOi7zHtN1eAqheVTxEMuuYjNHt+8hu6nSpDFYtonz0NsKFvaqRJ5LbVmw==", + "dev": true, + "dependencies": { + "@lerna/child-process": "5.1.8", + "@lerna/get-npm-exec-opts": "5.1.8", + "fs-extra": "^9.1.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "signal-exit": "^3.0.3", + "write-pkg": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==" + "node_modules/@lerna/npm-publish": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.1.8.tgz", + "integrity": "sha512-Gup/1d8ovc21x3spKPhFK0tIYYn8HOjnpCAg5ytINIW1QM/QcLAigY58If8uiyt+aojz6lubWrSR8/OHf9CXBw==", + "dev": true, + "dependencies": { + "@lerna/otplease": "5.1.8", + "@lerna/run-lifecycle": "5.1.8", + "fs-extra": "^9.1.0", + "libnpmpublish": "^4.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "read-package-json": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" + "node_modules/@lerna/npm-run-script": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.1.8.tgz", + "integrity": "sha512-HzvukNC+hDIR25EpYWOvIGJItd0onXqzS9Ivdtw98ZQG3Jexi2Mn18A9tDqHOKCEGO3pVYrI9ep8VWkah2Bj1w==", + "dev": true, + "dependencies": { + "@lerna/child-process": "5.1.8", + "@lerna/get-npm-exec-opts": "5.1.8", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true + "node_modules/@lerna/otplease": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.1.8.tgz", + "integrity": "sha512-/OVZ7Rbs8/ft14f4i/9HEFDsxJkBSg74rMUqyqFH3fID/RL3ja9hW5bI1bENxvYgs0bp/THy4lV5V75ZcI81zQ==", + "dev": true, + "dependencies": { + "@lerna/prompt": "5.1.8" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==" + "node_modules/@lerna/output": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.1.8.tgz", + "integrity": "sha512-dXsKY8X2eAdPKRKHDZTASlWn95Eav1oQX9doUXkvV3o4UwIgqOCIsU7RqSED3EAEQz6VUH0rXNb/+d3uVeAoJQ==", + "dev": true, + "dependencies": { + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" + "node_modules/@lerna/pack-directory": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.1.8.tgz", + "integrity": "sha512-aaH28ttS+JVimLFrVeZRWZ9Cii4GG2vkJXmQNikWBNQiFL/7S1x83NjMk4SQRdmtpYJkcQpQMZ2hDUdNxLnDCg==", + "dev": true, + "dependencies": { + "@lerna/get-packed": "5.1.8", + "@lerna/package": "5.1.8", + "@lerna/run-lifecycle": "5.1.8", + "@lerna/temp-write": "5.1.8", + "npm-packlist": "^2.1.4", + "npmlog": "^6.0.2", + "tar": "^6.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + "node_modules/@lerna/package": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.1.8.tgz", + "integrity": "sha512-Ot+wu6XZ93tw8p9oSTJJA15TzGhVpo8VbgNhKPcI3JJjkxVq2D5L5jVeBkjQvFEQBonLibTr339uLLXyZ0RMzg==", + "dev": true, + "dependencies": { + "load-json-file": "^6.2.0", + "npm-package-arg": "^8.1.0", + "write-pkg": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true + "node_modules/@lerna/package-graph": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.1.8.tgz", + "integrity": "sha512-aGwXTwCpPfhUPiSRhdppogZjOqJPm39EBxHFDa1E0+/Qaig5avJs4hI6OrPLyjsTywAswtCMOArvD1QZqxwvrQ==", + "dev": true, + "dependencies": { + "@lerna/prerelease-id-from-version": "5.1.8", + "@lerna/validation-error": "5.1.8", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true + "node_modules/@lerna/prerelease-id-from-version": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.1.8.tgz", + "integrity": "sha512-wfWv/8lHSk2/pl4FjopbDelFSLCz9s6J9AY5o7Sju9HtD9QUXcQHaXnEP1Rum9/rJZ8vWdFURcp9kzz8nxQ1Ow==", + "dev": true, + "dependencies": { + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@types/node": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.1.tgz", - "integrity": "sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg==" + "node_modules/@lerna/profiler": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.1.8.tgz", + "integrity": "sha512-vpAFN85BvMHfIGA53IcwaUnS9FHAismEnNyFCjMkzKV55mmXFZlWpZyO36ESdSQRWCo5/25f3Ln0Y6YubY3Dvw==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "upath": "^2.0.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true + "node_modules/@lerna/project": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.1.8.tgz", + "integrity": "sha512-zTFp91kmyJ0VHBmNXEArVrMSZVxnBJ7pHTt8C7RY91WSZhw8XDNumqMHDM+kEM1z/AtDBAAAGqBE3sjk5ONDXQ==", + "dev": true, + "dependencies": { + "@lerna/package": "5.1.8", + "@lerna/validation-error": "5.1.8", + "cosmiconfig": "^7.0.0", + "dedent": "^0.7.0", + "dot-prop": "^6.0.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.2", + "load-json-file": "^6.2.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "resolve-from": "^5.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "node_modules/@lerna/prompt": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.1.8.tgz", + "integrity": "sha512-Cmq0FV/vyCHu00kySxXMfuPvutsi8qoME2/nFcICIktvDqxXr5aSFY8QqB123awNCbpb4xcHykjFnEj/RNdb2Q==", + "dev": true, + "dependencies": { + "inquirer": "^7.3.3", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "requires": { - "@types/node": "*" + "node_modules/@lerna/publish": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.1.8.tgz", + "integrity": "sha512-Q88WxXVNAh/ZWj7vYG83RZUfQyQlJMg7tDhsVTvZzy3VpkkCPtmJXZfX+g4RmE0PNyjsXx9QLYAOZnOB613WyA==", + "dev": true, + "dependencies": { + "@lerna/check-working-tree": "5.1.8", + "@lerna/child-process": "5.1.8", + "@lerna/collect-updates": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/describe-ref": "5.1.8", + "@lerna/log-packed": "5.1.8", + "@lerna/npm-conf": "5.1.8", + "@lerna/npm-dist-tag": "5.1.8", + "@lerna/npm-publish": "5.1.8", + "@lerna/otplease": "5.1.8", + "@lerna/output": "5.1.8", + "@lerna/pack-directory": "5.1.8", + "@lerna/prerelease-id-from-version": "5.1.8", + "@lerna/prompt": "5.1.8", + "@lerna/pulse-till-done": "5.1.8", + "@lerna/run-lifecycle": "5.1.8", + "@lerna/run-topologically": "5.1.8", + "@lerna/validation-error": "5.1.8", + "@lerna/version": "5.1.8", + "fs-extra": "^9.1.0", + "libnpmaccess": "^4.0.1", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "pacote": "^13.4.1", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "requires": { - "@types/node": "*" + "node_modules/@lerna/pulse-till-done": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.1.8.tgz", + "integrity": "sha512-KsyOazHG6wnjfdJhIdhTaTNwhj8Np/aPPei/ac9WzcuzgLS/uCs1IVFFIYBv5JdTmyVBKmguSZxdYjk7JzKBew==", + "dev": true, + "dependencies": { + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + "node_modules/@lerna/query-graph": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.1.8.tgz", + "integrity": "sha512-+p+bjPI403Hwv1djTS5aJe7DtPWIDw0a427BE68h1mmrPc9oTe3GG+0lingbfGR8woA2rOmjytgK2jeErOryPg==", + "dev": true, + "dependencies": { + "@lerna/package-graph": "5.1.8" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "node_modules/@lerna/resolve-symlink": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.1.8.tgz", + "integrity": "sha512-OJa8ct4Oo2BcD95FmJqkc5qZMepaQK5RZAWoTqEXG/13Gs0mPc0fZGIhnnpTqtm3mgNhlT7ypCHG42I7hKiSeg==", "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "dependencies": { + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "read-cmd-shim": "^2.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "node_modules/@lerna/rimraf-dir": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.1.8.tgz", + "integrity": "sha512-3pT1X8kzW8xHUuAmRgzSKAF+/H1h1eSWq5+ACzeTWnvgqE7++0URee7TXwVCP/5FZPTZIzIclQCh4G0WD9Jfjg==", + "dev": true, + "dependencies": { + "@lerna/child-process": "5.1.8", + "npmlog": "^6.0.2", + "path-exists": "^4.0.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" + "node_modules/@lerna/run": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.1.8.tgz", + "integrity": "sha512-E5mI3FswVN9zQ3bCYUQxxPlLL400vnKpwLSzzRNFy//TR8Geu0LeR6NY+Jf0jklsKxwWGMJgqL6VqPqxDaNtdw==", + "dev": true, + "dependencies": { + "@lerna/command": "5.1.8", + "@lerna/filter-options": "5.1.8", + "@lerna/npm-run-script": "5.1.8", + "@lerna/output": "5.1.8", + "@lerna/profiler": "5.1.8", + "@lerna/run-topologically": "5.1.8", + "@lerna/timer": "5.1.8", + "@lerna/validation-error": "5.1.8", + "p-map": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" + "node_modules/@lerna/run-lifecycle": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.1.8.tgz", + "integrity": "sha512-5rRpovujhLJufKRzMp5sl2BIIqrPeoXxjniQbzkpSxZ2vnD+bE9xOoaciHQxOsmXfXhza0C+k3xYMM5+B/bVzg==", + "dev": true, + "dependencies": { + "@lerna/npm-conf": "5.1.8", + "@npmcli/run-script": "^3.0.2", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true + "node_modules/@lerna/run-topologically": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.1.8.tgz", + "integrity": "sha512-isuulfBdNsrgV2QF/HwCKCecfR9mPEU9N4Nf8n9nQQgakwOscoDlwGp2xv27pvcQKI52q/o/ISEjz3JeoEQiOA==", + "dev": true, + "dependencies": { + "@lerna/query-graph": "5.1.8", + "p-queue": "^6.6.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true + "node_modules/@lerna/symlink-binary": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.1.8.tgz", + "integrity": "sha512-s7VfKNJZnWvTKZ7KR8Yxh1rYhE/ARMioD5axyu3FleS3Xsdla2M5sQsLouCrdfM3doTO8lMxPVvVSFmL7q0KOA==", + "dev": true, + "dependencies": { + "@lerna/create-symlink": "5.1.8", + "@lerna/package": "5.1.8", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true - }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" + "node_modules/@lerna/symlink-dependencies": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.1.8.tgz", + "integrity": "sha512-U5diiaKdWUlvoFMh3sYIEESBLa8Z3Q/EpkLl5o4YkcbPBjFHJFpmoqCGomwL9sf9HQUV2S9Lt9szJT8qgQm86Q==", + "dev": true, + "dependencies": { + "@lerna/create-symlink": "5.1.8", + "@lerna/resolve-symlink": "5.1.8", + "@lerna/symlink-binary": "5.1.8", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "node_modules/@lerna/temp-write": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.1.8.tgz", + "integrity": "sha512-4/guYB5XotugyM8P/F1z6b+hNlSCe/QuZsmiZwgXOw2lmYnkSzLWDVjqsdZtNYqojK0lioxcPjZiL5qnEkk1PQ==", "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" + "dependencies": { + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^8.3.2" } }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "node_modules/@lerna/timer": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.1.8.tgz", + "integrity": "sha512-Ua4bw2YOO3U+sFujE+MsUG+lllU0X7u6PCTj1QKe0QlR0zr2gCa0pcwjUQPdNfxnpJpPY+hdbfTUv2viDloaiA==", + "dev": true, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + "node_modules/@lerna/validation-error": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.1.8.tgz", + "integrity": "sha512-n+IiaxN2b08ZMYnezsmwL6rXB15/VvweusC04GMh1XtWunnMzSg9JDM7y6bw2vfpBBQx6cBFhLKSpD2Fcq5D5Q==", + "dev": true, + "dependencies": { + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { - "type-fest": "^0.21.3" + "node_modules/@lerna/version": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.1.8.tgz", + "integrity": "sha512-3f4P7KjIs6Gn2iaGkA5EASE9izZeDKtEzE8i2DE7YfVdw/P+EwFfKv2mKBXGbckYw42YO1tL6aD2QH0C8XbwlA==", + "dev": true, + "dependencies": { + "@lerna/check-working-tree": "5.1.8", + "@lerna/child-process": "5.1.8", + "@lerna/collect-updates": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/conventional-commits": "5.1.8", + "@lerna/github-client": "5.1.8", + "@lerna/gitlab-client": "5.1.8", + "@lerna/output": "5.1.8", + "@lerna/prerelease-id-from-version": "5.1.8", + "@lerna/prompt": "5.1.8", + "@lerna/run-lifecycle": "5.1.8", + "@lerna/run-topologically": "5.1.8", + "@lerna/temp-write": "5.1.8", + "@lerna/validation-error": "5.1.8", + "chalk": "^4.1.0", + "dedent": "^0.7.0", + "load-json-file": "^6.2.0", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "p-reduce": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4", + "slash": "^3.0.0", + "write-json-file": "^4.3.0" }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/write-log-file": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.1.8.tgz", + "integrity": "sha512-B+shMH3TpzA7Q5GGbuNkOmdPQdD1LXRFj7R17LINkn82PhP9CUgubwYuiVzrLa16ADi0V5Ad76pqtHi/6kD0nA==", + "dev": true, "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - } + "npmlog": "^6.0.2", + "write-file-atomic": "^3.0.3" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "node_modules/@metamask/eth-sig-util": { + "version": "4.0.1", + "license": "ISC", + "dependencies": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "engines": { + "node": ">=12.0.0" + } }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" + "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { + "version": "4.11.6", + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" + "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { + "version": "6.2.1", + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", - "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } }, - "array-union": { + "node_modules/@nomiclabs/hardhat-ethers": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true + "dev": true, + "license": "MIT", + "peerDependencies": { + "ethers": "^5.0.0", + "hardhat": "^2.0.0" + } }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true + "node_modules/@nomiclabs/hardhat-waffle": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sinon-chai": "^3.2.3", + "@types/web3": "1.0.19" + }, + "peerDependencies": { + "@nomiclabs/hardhat-ethers": "^2.0.0", + "ethereum-waffle": "^3.2.0", + "ethers": "^5.0.0", + "hardhat": "^2.0.0" + } }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" + "node_modules/@nomiclabs/hardhat-web3": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bignumber.js": "^5.0.0" + }, + "peerDependencies": { + "hardhat": "^2.0.0", + "web3": "^1.0.0-beta.36" } }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "requires": { - "async": "^2.4.0" + "node_modules/@npmcli/arborist": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.2.0.tgz", + "integrity": "sha512-zWV7scFGL0SmpvfQyIWnMFbU/0YgtMNyvJiJwR98kyjUSntJGWFFR0O600d5W+TrDcTg0GyDbY+HdzGEg+GXLg==", + "dev": true, + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^3.0.0", + "bin-links": "^3.0.0", + "cacache": "^16.0.6", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.0.5", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", + "walk-up-path": "^1.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true + "node_modules/@npmcli/arborist/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "node_modules/@npmcli/arborist/node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" + "node_modules/@npmcli/arborist/node_modules/hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "node_modules/@npmcli/arborist/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } }, - "before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true + "node_modules/@npmcli/arborist/node_modules/lru-cache": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", + "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "dev": true, + "engines": { + "node": ">=12" + } }, - "bin-links": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", - "integrity": "sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ==", + "node_modules/@npmcli/arborist/node_modules/make-fetch-happen": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", + "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - }, "dependencies": { - "cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", - "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", - "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "read-cmd-shim": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", - "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - } + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/@npmcli/arborist/node_modules/minipass-fetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" + "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "node_modules/@npmcli/arborist/node_modules/npm-registry-fetch": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", + "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "requires": { - "base-x": "^3.0.2" + "node_modules/@npmcli/arborist/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" } }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" + "node_modules/@npmcli/arborist/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "node_modules/@npmcli/arborist/node_modules/validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, - "byte-size": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", - "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", + "node_modules/@npmcli/ci-detect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz", + "integrity": "sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q==", "dev": true }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "node_modules/@npmcli/fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "node_modules/@npmcli/git": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", + "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", "dev": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", + "dependencies": { + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", + "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "dev": true, + "engines": { + "node": ">=12" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "node_modules/@npmcli/map-workspaces": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz", + "integrity": "sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q==", "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "dependencies": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true + "node_modules/@npmcli/metavuln-calculator": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", + "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", + "dev": true, + "dependencies": { + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "ci-info": { + "node_modules/@npmcli/move-file": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "node_modules/@npmcli/name-from-folder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", + "dev": true }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/@npmcli/node-gyp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", "dev": true, - "requires": { - "restore-cursor": "^3.1.0" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true + "node_modules/@npmcli/package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", + "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "cli-width": { + "node_modules/@npmcli/promise-spawn": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "dev": true, + "dependencies": { + "infer-owner": "^1.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/@npmcli/run-script": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz", + "integrity": "sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==", "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "dependencies": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^8.4.1", + "read-package-json-fast": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "cmd-shim": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", - "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "node_modules/@nrwl/cli": { + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.4.2.tgz", + "integrity": "sha512-JNV4kP9goZD4BlTQGKdKhCRc1bhiWYp1TaDJHdk4ZfhiLt1NzXNxxgc/eX2obFZ3Hw+KdM/gM5F7KfWBbtSGSw==", "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" + "dependencies": { + "nx": "14.4.2" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" + "node_modules/@nrwl/tao": { + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.4.2.tgz", + "integrity": "sha512-Ygw3skKZfFhi4MBHZKQ8A67pDQxeyDdY78tFWViMN0SEn9ExL41Q8V9aSMfir8VZYGca6ZOXX5MRhbeHdcgMLQ==", + "dev": true, + "dependencies": { + "nx": "14.4.2" + }, + "bin": { + "tao": "index.js" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/@octokit/auth-token": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", + "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", + "dev": true, + "peer": true, + "dependencies": { + "@octokit/types": "^6.0.3" + }, + "engines": { + "node": ">= 14" + } }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true + "node_modules/@octokit/core": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", + "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } }, - "columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "node_modules/@octokit/endpoint": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", + "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", "dev": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" + "peer": true, + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" } }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + "node_modules/@octokit/graphql": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", + "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", + "dev": true, + "peer": true, + "dependencies": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" + "node_modules/@octokit/openapi-types": { + "version": "12.8.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.8.0.tgz", + "integrity": "sha512-ydcKLs2KKcxlhpdWLzJxEBDEk/U5MUeqtqkXlrtAUXXFPs6vLl1PEGghFC/BbpleosB7iXs0Z4P2DGe7ZT5ZNg==", + "dev": true }, - "common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", "dev": true }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "node_modules/@octokit/plugin-paginate-rest": { + "version": "2.21.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.2.tgz", + "integrity": "sha512-S24H0a6bBVreJtoTaRHT/gnVASbOHVTRMOVIqd9zrJBP3JozsxJB56TDuTUmd1xLI4/rAE2HNmThvVKtIdLLEw==", "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - }, "dependencies": { - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - } + "@octokit/types": "^6.39.0" + }, + "peerDependencies": { + "@octokit/core": ">=4" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" + "peerDependencies": { + "@octokit/core": ">=3" } }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", + "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "dependencies": { + "@octokit/types": "^6.39.0", + "deprecation": "^2.3.1" + }, + "peerDependencies": { + "@octokit/core": ">=3" } }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "node_modules/@octokit/request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.1.0.tgz", + "integrity": "sha512-36V+sP4bJli31TRq8sea3d/Q1XGgZ9cnqpsegkLCnvpu+hoYephSkxGlWg4KB6dyUM1IWPXVrLFOKYzObQ+MZg==", "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" + "peer": true, + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" } }, - "conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "node_modules/@octokit/request-error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", + "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", "dev": true, - "requires": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" - }, + "peer": true, "dependencies": { - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - } + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" } }, - "conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true - }, - "conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "node_modules/@octokit/rest": { + "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", "dev": true, - "requires": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" } }, - "conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "node_modules/@octokit/rest/node_modules/@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" + "dependencies": { + "@octokit/types": "^6.0.3" } }, - "conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "node_modules/@octokit/rest/node_modules/@octokit/core": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", + "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", "dev": true, - "requires": { - "JSONStream": "^1.0.4", - "is-text-path": "^1.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" + "dependencies": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.3", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" } }, - "conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "node_modules/@octokit/rest/node_modules/@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", "dev": true, - "requires": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" } }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" - }, - "core-js-pure": { - "version": "3.23.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", - "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "node_modules/@octokit/rest/node_modules/@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "dependencies": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" } }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + "node_modules/@octokit/rest/node_modules/@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "dev": true, + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "node_modules/@octokit/rest/node_modules/@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" } }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "node_modules/@octokit/types": { + "version": "6.39.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.39.0.tgz", + "integrity": "sha512-Mq4N9sOAYCitTsBtDdRVrBE80lIrMBhL9Jbrw0d+j96BAzlq4V+GLHFJbHokEsVvO/9tQupQdoFdgVYhD2C8UQ==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^12.7.0" } }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "node_modules/@openzeppelin/contracts": { + "version": "4.7.0", + "license": "MIT" }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true + "node_modules/@resolver-engine/core": { + "version": "0.3.3", + "dev": true, + "license": "LGPL-3.0-or-later", + "peer": true, + "dependencies": { + "debug": "^3.1.0", + "is-url": "^1.2.4", + "request": "^2.85.0" + } }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true + "node_modules/@resolver-engine/core/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" + "node_modules/@resolver-engine/fs": { + "version": "0.3.3", + "dev": true, + "license": "LGPL-3.0-or-later", + "peer": true, + "dependencies": { + "@resolver-engine/core": "^0.3.3", + "debug": "^3.1.0" } }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "dev": true + "node_modules/@resolver-engine/fs/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true + "node_modules/@resolver-engine/imports": { + "version": "0.3.3", + "dev": true, + "license": "LGPL-3.0-or-later", + "peer": true, + "dependencies": { + "@resolver-engine/core": "^0.3.3", + "debug": "^3.1.0", + "hosted-git-info": "^2.6.0", + "path-browserify": "^1.0.0", + "url": "^0.11.0" + } }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "node_modules/@resolver-engine/imports-fs": { + "version": "0.3.3", "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, + "license": "LGPL-3.0-or-later", + "peer": true, "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - } + "@resolver-engine/fs": "^0.3.3", + "@resolver-engine/imports": "^0.3.3", + "debug": "^3.1.0" } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "dev": true + "node_modules/@resolver-engine/imports-fs/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "node_modules/@resolver-engine/imports/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "node_modules/@resolver-engine/imports/node_modules/hosted-git-info": { + "version": "2.8.9", "dev": true, - "requires": { - "clone": "^1.0.2" + "license": "ISC", + "peer": true + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "license": "BSD-3-Clause", "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - } + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true + "node_modules/@sentry/node": { + "version": "5.30.0", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "license": "MIT", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" }, - "dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "node_modules/@sentry/types": { + "version": "5.30.0", + "license": "BSD-3-Clause", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" } }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + "node_modules/@solidity-parser/parser": { + "version": "0.14.2", + "license": "MIT", + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", "dev": true, - "requires": { - "path-type": "^4.0.0" + "license": "MIT", + "peer": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" } }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, - "requires": { - "is-obj": "^2.0.0" + "engines": { + "node": ">= 6" } }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "devOptional": true, + "license": "MIT" }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "devOptional": true, + "license": "MIT" }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@typechain/ethers-v5": { + "version": "9.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/bytes": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^7.0.0", + "typescript": ">=4.0.0" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "node_modules/@types/abstract-leveldown": { + "version": "7.2.0", + "license": "MIT" }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/@types/bignumber.js": { + "version": "5.0.0", "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" + "license": "MIT", + "dependencies": { + "bignumber.js": "*" } }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" + "node_modules/@types/bn.js": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/@types/chai": { + "version": "4.3.1", "dev": true, - "requires": { - "once": "^1.4.0" + "license": "MIT" + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "requires": { - "ansi-colors": "^4.1.1" + "node_modules/@types/json-schema": { + "version": "7.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/level-errors": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/@types/levelup": { + "version": "4.3.3", + "license": "MIT", + "dependencies": { + "@types/abstract-leveldown": "*", + "@types/level-errors": "*", + "@types/node": "*" } }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "license": "MIT" }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "requires": { - "prr": "~1.0.1" + "node_modules/@types/mkdirp": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/@types/mocha": { + "version": "9.1.1", "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } + "license": "MIT" }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "node_modules/@types/node": { + "version": "18.0.1", + "license": "MIT" }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "node_modules/@types/node-fetch": { + "version": "2.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" + "node_modules/@types/prettier": { + "version": "2.6.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "0.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/secp256k1": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/sinon": { + "version": "10.0.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "node_modules/@types/sinon-chai": { + "version": "3.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/underscore": { + "version": "1.11.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web3": { + "version": "1.0.19", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bn.js": "*", + "@types/underscore": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.30.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "5.30.6", + "@typescript-eslint/type-utils": "5.30.6", + "@typescript-eslint/utils": "5.30.6", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.30.6", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "@typescript-eslint/scope-manager": "5.30.6", + "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/typescript-estree": "5.30.6", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.30.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/visitor-keys": "5.30.6" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.30.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "5.30.6", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.30.6", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.30.6", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/visitor-keys": "5.30.6", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.30.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.30.6", + "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/typescript-estree": "5.30.6", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.30.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.30.6", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "license": "ISC" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abstract-leveldown": { + "version": "6.3.0", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.7.1", + "devOptional": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "license": "MIT", + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "license": "BSD-3-Clause" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", + "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "devOptional": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/array-back": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.4", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-eventemitter": { + "version": "0.2.4", + "license": "MIT", + "dependencies": { + "async": "^2.4.0" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.9", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense", + "peer": true + }, + "node_modules/bech32": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "dev": true + }, + "node_modules/bignumber.js": { + "version": "9.0.2", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/bin-links": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", + "integrity": "sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ==", + "dev": true, + "dependencies": { + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0", + "read-cmd-shim": "^3.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/bin-links/node_modules/cmd-shim": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", + "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", + "dev": true, + "dependencies": { + "mkdirp-infer-owner": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/bin-links/node_modules/read-cmd-shim": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", + "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/bin-links/node_modules/write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "license": "MIT" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/bn.js": { + "version": "5.2.1", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.10.3", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "license": "ISC" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "license": "MIT", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/bufferutil": { + "version": "4.0.6", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true + }, + "node_modules/byte-size": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", + "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", + "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", + "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/normalize-url": { + "version": "4.5.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, + "node_modules/chai": { + "version": "4.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.1", + "dev": true, + "license": "WTFPL", + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 5" + } + }, + "node_modules/chalk": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/check-error": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/cids": { + "version": "0.7.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "engines": { + "node": ">=4.0.0", + "npm": ">=3.0.0" + } + }, + "node_modules/cids/node_modules/multicodec": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-is": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/cmd-shim": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", + "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "dev": true, + "dependencies": { + "mkdirp-infer-owner": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.19", + "dev": true, + "license": "MIT" + }, + "node_modules/columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "license": "MIT" + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/compare-func/node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-hash": { + "version": "2.5.2", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "dev": true, + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "dev": true, + "dependencies": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, + "dependencies": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/cookiejar": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/core-js-pure": { + "version": "3.23.3", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "devOptional": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/d": { + "version": "1.0.1", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/deferred-leveldown": { + "version": "5.3.0", + "license": "MIT", + "dependencies": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deferred-leveldown/node_modules/abstract-leveldown": { + "version": "6.2.3", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, + "node_modules/des.js": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "dev": true, + "peer": true + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding-down": { + "version": "6.3.0", + "license": "MIT", + "dependencies": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "license": "MIT", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.20.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.61", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.19.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "9.3.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eth-ens-namehash": { + "version": "2.0.8", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + } + }, + "node_modules/eth-ens-namehash/node_modules/js-sha3": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/eth-lib": { + "version": "0.1.29", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/eth-lib/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/eth-lib/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/eth-lib/node_modules/ws": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "license": "MIT", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereum-waffle": { + "version": "3.4.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@ethereum-waffle/chai": "^3.4.4", + "@ethereum-waffle/compiler": "^3.4.4", + "@ethereum-waffle/mock-contract": "^3.4.4", + "@ethereum-waffle/provider": "^3.4.4", + "ethers": "^5.0.1" + }, + "bin": { + "waffle": "bin/waffle" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { + "version": "4.11.6", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethers": { + "version": "5.6.9", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "5.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "license": "MIT" + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.18.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/express/node_modules/qs": { + "version": "6.10.3", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ext": { + "version": "1.6.0", + "license": "ISC", + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.6.0", + "license": "ISC" + }, + "node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "peer": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.13.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/find-replace": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.6", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fp-ts": { + "version": "1.19.3", + "license": "MIT" + }, + "node_modules/fresh": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core": { + "version": "2.13.2", + "bundleDependencies": [ + "keccak" + ], + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "3.0.0", + "async": "2.6.2", + "bip39": "2.5.0", + "cachedown": "1.0.0", + "clone": "2.1.2", + "debug": "3.2.6", + "encoding-down": "5.0.4", + "eth-sig-util": "3.0.0", + "ethereumjs-abi": "0.6.8", + "ethereumjs-account": "3.0.0", + "ethereumjs-block": "2.2.2", + "ethereumjs-common": "1.5.0", + "ethereumjs-tx": "2.1.2", + "ethereumjs-util": "6.2.1", + "ethereumjs-vm": "4.2.0", + "heap": "0.2.6", + "keccak": "3.0.1", + "level-sublevel": "6.6.4", + "levelup": "3.1.1", + "lodash": "4.17.20", + "lru-cache": "5.1.1", + "merkle-patricia-tree": "3.0.0", + "patch-package": "6.2.2", + "seedrandom": "3.0.1", + "source-map-support": "0.5.12", + "tmp": "0.1.0", + "web3-provider-engine": "14.2.1", + "websocket": "1.0.32" + }, + "engines": { + "node": ">=8.9.0" + }, + "optionalDependencies": { + "ethereumjs-wallet": "0.6.5", + "web3": "1.2.11" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/abi": { + "version": "5.0.0-beta.153", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/address": ">=5.0.0-beta.128", + "@ethersproject/bignumber": ">=5.0.0-beta.130", + "@ethersproject/bytes": ">=5.0.0-beta.129", + "@ethersproject/constants": ">=5.0.0-beta.128", + "@ethersproject/hash": ">=5.0.0-beta.128", + "@ethersproject/keccak256": ">=5.0.0-beta.127", + "@ethersproject/logger": ">=5.0.0-beta.129", + "@ethersproject/properties": ">=5.0.0-beta.131", + "@ethersproject/strings": ">=5.0.0-beta.130" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/abstract-provider": { + "version": "5.0.8", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/networks": "^5.0.7", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/transactions": "^5.0.9", + "@ethersproject/web": "^5.0.12" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/abstract-signer": { + "version": "5.0.10", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/abstract-provider": "^5.0.8", + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/address": { + "version": "5.0.9", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/keccak256": "^5.0.7", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/rlp": "^5.0.7" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/base64": { + "version": "5.0.7", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.0.9" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/bignumber": { + "version": "5.0.13", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "bn.js": "^4.4.0" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/bytes": { + "version": "5.0.9", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/logger": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/constants": { + "version": "5.0.8", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.0.13" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/hash": { + "version": "5.0.10", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/abstract-signer": "^5.0.10", + "@ethersproject/address": "^5.0.9", + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/keccak256": "^5.0.7", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/strings": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/keccak256": { + "version": "5.0.7", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.0.9", + "js-sha3": "0.5.7" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/logger": { + "version": "5.0.8", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/@ethersproject/networks": { + "version": "5.0.7", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/logger": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/properties": { + "version": "5.0.7", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/logger": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/rlp": { + "version": "5.0.7", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/signing-key": { + "version": "5.0.8", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "elliptic": "6.5.3" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/strings": { + "version": "5.0.8", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/constants": "^5.0.8", + "@ethersproject/logger": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/transactions": { + "version": "5.0.9", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/address": "^5.0.9", + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/constants": "^5.0.8", + "@ethersproject/keccak256": "^5.0.7", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/rlp": "^5.0.7", + "@ethersproject/signing-key": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/web": { + "version": "5.0.12", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/base64": "^5.0.7", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/strings": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@sindresorhus/is": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/@types/bn.js": { + "version": "4.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ganache-core/node_modules/@types/node": { + "version": "14.14.20", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/@types/pbkdf2": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ganache-core/node_modules/@types/secp256k1": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ganache-core/node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/ganache-core/node_modules/abstract-leveldown": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/accepts": { + "version": "1.3.7", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/aes-js": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "peer": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ganache-core/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/arr-diff": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/arr-flatten": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/arr-union": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/array-flatten": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/array-unique": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/asn1": { + "version": "0.2.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/ganache-core/node_modules/asn1.js": { + "version": "5.4.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ganache-core/node_modules/assert-plus": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ganache-core/node_modules/assign-symbols": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/async": { + "version": "2.6.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "lodash": "^4.17.11" + } + }, + "node_modules/ganache-core/node_modules/async-eventemitter": { + "version": "0.2.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "async": "^2.4.0" + } + }, + "node_modules/ganache-core/node_modules/async-limiter": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/atob": { + "version": "2.1.2", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "peer": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/ganache-core/node_modules/aws-sign2": { + "version": "0.7.0", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/aws4": { + "version": "1.11.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-code-frame": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ganache-core/node_modules/babel-core": { + "version": "6.26.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "node_modules/ganache-core/node_modules/babel-core/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/babel-core/node_modules/json5": { + "version": "0.5.1", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/ganache-core/node_modules/babel-core/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-core/node_modules/slash": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-generator": { + "version": "6.26.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/babel-generator/node_modules/jsesc": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-call-delegate": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-define-map": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-function-name": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-get-function-arity": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-hoist-variables": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-optimise-call-expression": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-regex": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-replace-supers": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helpers": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-messages": { + "version": "6.23.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-regenerator": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "regenerator-transform": "^0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-preset-env": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + } + }, + "node_modules/ganache-core/node_modules/babel-preset-env/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/babel-register": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "node_modules/ganache-core/node_modules/babel-register/node_modules/source-map-support": { + "version": "0.4.18", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/ganache-core/node_modules/babel-runtime": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/ganache-core/node_modules/babel-template": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "node_modules/ganache-core/node_modules/babel-traverse": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "node_modules/ganache-core/node_modules/babel-traverse/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/babel-traverse/node_modules/globals": { + "version": "9.18.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-traverse/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-types": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/ganache-core/node_modules/babel-types/node_modules/to-fast-properties": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babelify": { + "version": "7.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-core": "^6.0.14", + "object-assign": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/babylon": { + "version": "6.18.0", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "babylon": "bin/babylon.js" + } + }, + "node_modules/ganache-core/node_modules/backoff": { + "version": "2.5.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "precond": "0.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/balanced-match": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/base": { + "version": "0.11.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/base-x": { + "version": "3.0.8", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache-core/node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/base64-js": { + "version": "1.5.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/ganache-core/node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense", + "peer": true + }, + "node_modules/ganache-core/node_modules/bignumber.js": { + "version": "9.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/bip39": { + "version": "2.5.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1", + "safe-buffer": "^5.0.1", + "unorm": "^1.3.3" + } + }, + "node_modules/ganache-core/node_modules/blakejs": { + "version": "1.1.0", + "dev": true, + "license": "CC0-1.0", + "peer": true + }, + "node_modules/ganache-core/node_modules/bluebird": { + "version": "3.7.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/bn.js": { + "version": "4.11.9", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/body-parser": { + "version": "1.19.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/body-parser/node_modules/qs": { + "version": "6.7.0", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ganache-core/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/ganache-core/node_modules/brorand": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/browserify-aes": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache-core/node_modules/browserify-cipher": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/browserify-des": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache-core/node_modules/browserify-rsa": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/ganache-core/node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.1.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/browserify-sign": { + "version": "4.2.1", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/ganache-core/node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.1.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ganache-core/node_modules/browserslist": { + "version": "3.2.8", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + }, + "bin": { + "browserslist": "cli.js" + } + }, + "node_modules/ganache-core/node_modules/bs58": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/ganache-core/node_modules/bs58check": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache-core/node_modules/buffer": { + "version": "5.7.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/ganache-core/node_modules/buffer-from": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/buffer-xor": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/bufferutil": { + "version": "4.0.3", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "node-gyp-build": "^4.2.0" + } + }, + "node_modules/ganache-core/node_modules/bytes": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/bytewise": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bytewise-core": "^1.2.2", + "typewise": "^1.0.3" + } + }, + "node_modules/ganache-core/node_modules/bytewise-core": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "typewise-core": "^1.2" + } + }, + "node_modules/ganache-core/node_modules/cache-base": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/cacheable-request": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ganache-core/node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ganache-core/node_modules/cachedown": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "^2.4.1", + "lru-cache": "^3.2.0" + } + }, + "node_modules/ganache-core/node_modules/cachedown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/cachedown/node_modules/lru-cache": { + "version": "3.2.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "pseudomap": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/caniuse-lite": { + "version": "1.0.30001174", + "dev": true, + "license": "CC-BY-4.0", + "peer": true + }, + "node_modules/ganache-core/node_modules/caseless": { + "version": "0.12.0", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, + "node_modules/ganache-core/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/checkpoint-store": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "functional-red-black-tree": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/chownr": { + "version": "1.1.4", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/cids": { + "version": "0.7.5", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "engines": { + "node": ">=4.0.0", + "npm": ">=3.0.0" + } + }, + "node_modules/ganache-core/node_modules/cids/node_modules/multicodec": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/cipher-base": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache-core/node_modules/class-is": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/class-utils": { + "version": "0.3.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/clone": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ganache-core/node_modules/clone-response": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/collection-visit": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ganache-core/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/component-emitter": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/concat-stream": { + "version": "1.6.2", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/ganache-core/node_modules/content-disposition": { + "version": "0.5.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/content-hash": { + "version": "2.5.2", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "node_modules/ganache-core/node_modules/content-type": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/convert-source-map": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/ganache-core/node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/cookie": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/cookie-signature": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/cookiejar": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/copy-descriptor": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/core-js": { + "version": "2.6.12", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/core-js-pure": { + "version": "3.8.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/ganache-core/node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/cors": { + "version": "2.8.5", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ganache-core/node_modules/create-ecdh": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/ganache-core/node_modules/create-hash": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/ganache-core/node_modules/create-hmac": { + "version": "1.1.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/ganache-core/node_modules/cross-fetch": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "node-fetch": "2.1.2", + "whatwg-fetch": "2.0.4" + } + }, + "node_modules/ganache-core/node_modules/crypto-browserify": { + "version": "3.12.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/d": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/dashdash": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/ganache-core/node_modules/debug": { + "version": "3.2.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/ganache-core/node_modules/decode-uri-component": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/ganache-core/node_modules/decompress-response": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/deep-equal": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/defer-to-connect": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/deferred-leveldown": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~5.0.0", + "inherits": "^2.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/deferred-leveldown/node_modules/abstract-leveldown": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/define-properties": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ganache-core/node_modules/define-property": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/defined": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ganache-core/node_modules/des.js": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/destroy": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/detect-indent": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/diffie-hellman": { + "version": "5.0.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/ganache-core/node_modules/dom-walk": { + "version": "0.1.2", + "dev": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/dotignore": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimatch": "^3.0.4" + }, + "bin": { + "ignored": "bin/ignored" + } + }, + "node_modules/ganache-core/node_modules/duplexer3": { + "version": "0.1.4", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ganache-core/node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/electron-to-chromium": { + "version": "1.3.636", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/elliptic": { + "version": "6.5.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/encodeurl": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/encoding": { + "version": "0.1.13", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/ganache-core/node_modules/encoding-down": { + "version": "5.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "^5.0.0", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/encoding-down/node_modules/abstract-leveldown": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/end-of-stream": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/ganache-core/node_modules/errno": { + "version": "0.1.8", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/ganache-core/node_modules/es-abstract": { + "version": "1.18.0-next.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/es5-ext": { + "version": "0.10.53", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/ganache-core/node_modules/es6-iterator": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/ganache-core/node_modules/es6-symbol": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/ganache-core/node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ganache-core/node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/etag": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/eth-block-tracker": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "eth-query": "^2.1.0", + "ethereumjs-tx": "^1.3.3", + "ethereumjs-util": "^5.1.3", + "ethjs-util": "^0.1.3", + "json-rpc-engine": "^3.6.0", + "pify": "^2.3.0", + "tape": "^4.6.3" + } + }, + "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/eth-ens-namehash": { + "version": "2.0.8", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-infura": { + "version": "3.2.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "cross-fetch": "^2.1.1", + "eth-json-rpc-middleware": "^1.5.0", + "json-rpc-engine": "^3.4.0", + "json-rpc-error": "^2.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware": { + "version": "1.6.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "async": "^2.5.0", + "eth-query": "^2.1.2", + "eth-tx-summary": "^3.1.2", + "ethereumjs-block": "^1.6.0", + "ethereumjs-tx": "^1.3.3", + "ethereumjs-util": "^5.1.2", + "ethereumjs-vm": "^2.1.0", + "fetch-ponyfill": "^4.0.0", + "json-rpc-engine": "^3.6.0", + "json-rpc-error": "^2.0.0", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "tape": "^4.6.3" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-account": { + "version": "2.0.5", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block": { + "version": "1.7.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block/node_modules/ethereum-common": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm": { + "version": "2.6.0", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-codec": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-errors": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws": { + "version": "0.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/levelup": { + "version": "1.3.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ltgt": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/memdown": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/object-keys": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/semver": { + "version": "5.4.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/string_decoder": { + "version": "0.10.31", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-lib": { + "version": "0.1.29", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/ganache-core/node_modules/eth-query": { + "version": "2.1.2", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "json-rpc-random-id": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "node_modules/ganache-core/node_modules/eth-sig-util": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "buffer": "^5.2.1", + "elliptic": "^6.4.0", + "ethereumjs-abi": "0.6.5", + "ethereumjs-util": "^5.1.1", + "tweetnacl": "^1.0.0", + "tweetnacl-util": "^0.15.0" + } + }, + "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-abi": { + "version": "0.6.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.10.0", + "ethereumjs-util": "^4.3.0" + } + }, + "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "4.5.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.8.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary": { + "version": "3.2.4", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "async": "^2.1.2", + "clone": "^2.0.0", + "concat-stream": "^1.5.1", + "end-of-stream": "^1.1.0", + "eth-query": "^2.0.2", + "ethereumjs-block": "^1.4.1", + "ethereumjs-tx": "^1.1.1", + "ethereumjs-util": "^5.0.1", + "ethereumjs-vm": "^2.6.0", + "through2": "^2.0.3" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-account": { + "version": "2.0.5", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-block": { + "version": "1.7.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-block/node_modules/ethereum-common": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm": { + "version": "2.6.0", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-codec": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-errors": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws": { + "version": "0.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/levelup": { + "version": "1.3.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ltgt": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/memdown": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/object-keys": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/semver": { + "version": "5.4.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/string_decoder": { + "version": "0.10.31", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethashjs": { + "version": "0.0.8", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.1.2", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.0.2", + "miller-rabin": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethashjs/node_modules/bn.js": { + "version": "5.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethashjs/node_modules/buffer-xor": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethashjs/node_modules/ethereumjs-util": { + "version": "7.0.7", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereum-bloom-filters": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ganache-core/node_modules/ethereum-bloom-filters/node_modules/js-sha3": { + "version": "0.8.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereum-common": { + "version": "0.0.18", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-abi": { + "version": "0.6.8", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-account": { + "version": "3.0.0", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-util": "^6.0.0", + "rlp": "^2.2.1", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-codec": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-errors": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws": { + "version": "0.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/levelup": { + "version": "1.3.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/ltgt": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/memdown": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/object-keys": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/semver": { + "version": "5.4.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/string_decoder": { + "version": "0.10.31", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-blockchain": { + "version": "4.0.4", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.6.1", + "ethashjs": "~0.0.7", + "ethereumjs-block": "~2.2.2", + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.1.0", + "flow-stoplight": "^1.0.0", + "level-mem": "^3.0.1", + "lru-cache": "^5.1.1", + "rlp": "^2.2.2", + "semaphore": "^1.1.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-common": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm": { + "version": "4.2.0", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "core-js-pure": "^3.0.1", + "ethereumjs-account": "^3.0.0", + "ethereumjs-block": "^2.2.2", + "ethereumjs-blockchain": "^4.0.3", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.2", + "ethereumjs-util": "^6.2.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1", + "util.promisify": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-codec": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-errors": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws": { + "version": "0.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/levelup": { + "version": "1.3.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/ltgt": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/memdown": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/object-keys": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/semver": { + "version": "5.4.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/string_decoder": { + "version": "0.10.31", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-wallet": { + "version": "0.6.5", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "aes-js": "^3.1.1", + "bs58check": "^2.1.2", + "ethereum-cryptography": "^0.1.3", + "ethereumjs-util": "^6.0.0", + "randombytes": "^2.0.6", + "safe-buffer": "^5.1.2", + "scryptsy": "^1.2.1", + "utf8": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "node_modules/ganache-core/node_modules/ethjs-unit": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-core/node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ethjs-util": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-core/node_modules/eventemitter3": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/events": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/ganache-core/node_modules/evp_bytestokey": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/express": { + "version": "4.17.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/ganache-core/node_modules/express/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/express/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/express/node_modules/qs": { + "version": "6.7.0", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ganache-core/node_modules/express/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ext": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "type": "^2.0.0" + } + }, + "node_modules/ganache-core/node_modules/ext/node_modules/type": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/extend-shallow": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/extglob": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/extsprintf": { + "version": "1.3.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/fake-merkle-patricia-tree": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "checkpoint-store": "^1.1.0" + } + }, + "node_modules/ganache-core/node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/fetch-ponyfill": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "node-fetch": "~1.7.1" + } + }, + "node_modules/ganache-core/node_modules/fetch-ponyfill/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/fetch-ponyfill/node_modules/node-fetch": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/finalhandler": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root": { + "version": "1.2.1", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "fs-extra": "^4.0.3", + "micromatch": "^3.1.4" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/braces": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fill-range": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fs-extra": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-number": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/micromatch": { + "version": "3.1.10", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/to-regex-range": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/flow-stoplight": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/for-each": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/ganache-core/node_modules/for-in": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/forever-agent": { + "version": "0.6.1", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/form-data": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/ganache-core/node_modules/forwarded": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/fragment-cache": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/fresh": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/fs-extra": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/ganache-core/node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/get-intrinsic": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ganache-core/node_modules/get-value": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/getpass": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/glob": { + "version": "7.1.3", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/global": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/ganache-core/node_modules/got": { + "version": "9.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ganache-core/node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/graceful-fs": { + "version": "4.2.4", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/har-schema": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/har-validator": { + "version": "5.1.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/ganache-core/node_modules/has-ansi": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/has-symbol-support-x": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/has-symbols": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/has-value": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/has-values": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/has-values/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/hash-base": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ganache-core/node_modules/hash.js": { + "version": "1.1.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/heap": { + "version": "0.2.6", + "dev": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/hmac-drbg": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/home-or-tmp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/http-cache-semantics": { + "version": "4.1.0", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/http-errors": { + "version": "1.7.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/http-https": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/http-signature": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/ganache-core/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/idna-uts46-hx": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/ganache-core/node_modules/idna-uts46-hx/node_modules/punycode": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/ieee754": { + "version": "1.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/ganache-core/node_modules/immediate": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/ganache-core/node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/invariant": { + "version": "2.2.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/ipaddr.js": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ganache-core/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-arguments": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-callable": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-ci": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/ganache-core/node_modules/is-data-descriptor": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-date-object": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-descriptor": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-extendable": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-finite": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ganache-core/node_modules/is-fn": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-function": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/is-hex-prefixed": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-core/node_modules/is-negative-zero": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-object": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-regex": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-retry-allowed": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-symbol": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/is-windows": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/isstream": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/isurl": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ganache-core/node_modules/js-sha3": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/jsbn": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/json-buffer": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/json-rpc-engine": { + "version": "3.8.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "babel-preset-env": "^1.7.0", + "babelify": "^7.3.0", + "json-rpc-error": "^2.0.0", + "promise-to-callback": "^1.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/json-rpc-error": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/ganache-core/node_modules/json-rpc-random-id": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/json-schema": { + "version": "0.2.3", + "dev": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/json-stable-stringify": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/ganache-core/node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/ganache-core/node_modules/jsonify": { + "version": "0.0.0", + "dev": true, + "license": "Public Domain", + "peer": true + }, + "node_modules/ganache-core/node_modules/jsprim": { + "version": "1.4.1", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/ganache-core/node_modules/keccak": { + "version": "3.0.1", + "dev": true, + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ganache-core/node_modules/keyv": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/ganache-core/node_modules/klaw-sync": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/ganache-core/node_modules/level-codec": { + "version": "9.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/level-errors": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "errno": "~0.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/level-iterator-stream": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.5", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/level-mem": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "level-packager": "~4.0.0", + "memdown": "~3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/level-mem/node_modules/abstract-leveldown": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/level-mem/node_modules/ltgt": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/level-mem/node_modules/memdown": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~5.0.0", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/level-mem/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/level-packager": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "encoding-down": "~5.0.0", + "levelup": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/level-post": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ltgt": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/level-sublevel": { + "version": "6.6.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bytewise": "~1.1.0", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0", + "level-iterator-stream": "^2.0.3", + "ltgt": "~2.1.1", + "pull-defer": "^0.2.2", + "pull-level": "^2.0.3", + "pull-stream": "^3.6.8", + "typewiselite": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/level-ws": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.8", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/levelup": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deferred-leveldown": "~4.0.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~3.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/levelup/node_modules/level-iterator-stream": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/lodash": { + "version": "4.17.20", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/looper": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/loose-envify": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/ganache-core/node_modules/lowercase-keys": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ganache-core/node_modules/ltgt": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/map-cache": { + "version": "0.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/map-visit": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/md5.js": { + "version": "1.3.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache-core/node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/merge-descriptors": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/merkle-patricia-tree": { + "version": "3.0.0", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.6.1", + "ethereumjs-util": "^5.2.0", + "level-mem": "^3.0.1", + "level-ws": "^1.0.0", + "readable-stream": "^3.0.6", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ganache-core/node_modules/methods": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/miller-rabin": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/ganache-core/node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/mime-db": { + "version": "1.45.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/mime-types": { + "version": "2.1.28", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mime-db": "1.45.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/mimic-response": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/min-document": { + "version": "2.19.0", + "dev": true, + "peer": true, + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/ganache-core/node_modules/minimalistic-assert": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/minimatch": { + "version": "3.0.4", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/minimist": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/minizlib": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/ganache-core/node_modules/minizlib/node_modules/minipass": { + "version": "2.9.0", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/ganache-core/node_modules/mixin-deep": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/mkdirp": { + "version": "0.5.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ganache-core/node_modules/mkdirp-promise": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "mkdirp": "*" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/mock-fs": { + "version": "4.13.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/multibase": { + "version": "0.6.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/ganache-core/node_modules/multicodec": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "varint": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/multihashes": { + "version": "0.4.21", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/multihashes/node_modules/multibase": { + "version": "0.7.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/ganache-core/node_modules/nano-json-stream-parser": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/nanomatch": { + "version": "1.2.13", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/negotiator": { + "version": "0.6.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/next-tick": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/node-addon-api": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/node-fetch": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/ganache-core/node_modules/node-gyp-build": { + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "peer": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/ganache-core/node_modules/normalize-url": { + "version": "4.5.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ganache-core/node_modules/number-to-bn": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-core/node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/oauth-sign": { + "version": "0.9.0", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-inspect": { + "version": "1.9.0", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/object-is": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ganache-core/node_modules/object-visit": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object.assign": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/object.getownpropertydescriptors": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/object.pick": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/oboe": { + "version": "2.1.4", + "dev": true, + "license": "BSD", + "optional": true, + "peer": true, + "dependencies": { + "http-https": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/on-finished": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/ganache-core/node_modules/os-homedir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/p-cancelable": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/p-timeout": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/parse-asn1": { + "version": "5.1.6", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/parse-headers": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/pascalcase": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/patch-package": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^1.2.1", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "npm": ">5" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/ganache-core/node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/path-parse": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/path-to-regexp": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/pbkdf2": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/ganache-core/node_modules/performance-now": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/posix-character-classes": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/precond": { + "version": "0.2.3", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/prepend-http": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/private": { + "version": "0.1.8", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/process": { + "version": "0.11.10", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/ganache-core/node_modules/promise-to-callback": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-fn": "^1.0.0", + "set-immediate-shim": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/proxy-addr": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ganache-core/node_modules/prr": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/pseudomap": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/psl": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/public-encrypt": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache-core/node_modules/pull-cat": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/pull-defer": { + "version": "0.2.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/pull-level": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "level-post": "^1.0.7", + "pull-cat": "^1.1.9", + "pull-live": "^1.0.1", + "pull-pushable": "^2.0.0", + "pull-stream": "^3.4.0", + "pull-window": "^2.1.4", + "stream-to-pull-stream": "^1.7.1" + } + }, + "node_modules/ganache-core/node_modules/pull-live": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "pull-cat": "^1.1.9", + "pull-stream": "^3.4.0" + } + }, + "node_modules/ganache-core/node_modules/pull-pushable": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/pull-stream": { + "version": "3.6.14", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/pull-window": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "looper": "^2.0.0" + } + }, + "node_modules/ganache-core/node_modules/pump": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/ganache-core/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/qs": { + "version": "6.5.2", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ganache-core/node_modules/query-string": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/ganache-core/node_modules/randomfill": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/ganache-core/node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/raw-body": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/readable-stream": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/ganache-core/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/regenerate": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/regenerator-runtime": { + "version": "0.11.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/regenerator-transform": { + "version": "0.10.1", + "dev": true, + "license": "BSD", + "peer": true, + "dependencies": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "node_modules/ganache-core/node_modules/regex-not": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/regexp.prototype.flags": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/regexp.prototype.flags/node_modules/es-abstract": { + "version": "1.17.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/regexpu-core": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "node_modules/ganache-core/node_modules/regjsgen": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/regjsparser": { + "version": "0.1.5", + "dev": true, + "license": "BSD", + "peer": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/ganache-core/node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "dev": true, + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/ganache-core/node_modules/repeat-element": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/repeat-string": { + "version": "1.6.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/ganache-core/node_modules/repeating": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/request": { + "version": "2.88.2", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ganache-core/node_modules/resolve-url": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/responselike": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/resumer": { + "version": "0.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "through": "~2.3.4" + } + }, + "node_modules/ganache-core/node_modules/ret": { + "version": "0.1.15", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/ganache-core/node_modules/rimraf": { + "version": "2.6.3", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ganache-core/node_modules/ripemd160": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/ganache-core/node_modules/rlp": { + "version": "2.2.6", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.1" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/ganache-core/node_modules/rustbn.js": { + "version": "0.2.0", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "peer": true + }, + "node_modules/ganache-core/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/safe-event-emitter": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "events": "^3.0.0" + } + }, + "node_modules/ganache-core/node_modules/safe-regex": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/ganache-core/node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/scrypt-js": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/scryptsy": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "pbkdf2": "^3.0.3" + } + }, + "node_modules/ganache-core/node_modules/secp256k1": { + "version": "4.0.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "elliptic": "^6.5.2", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ganache-core/node_modules/seedrandom": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/semaphore": { + "version": "1.1.0", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ganache-core/node_modules/send": { + "version": "0.17.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ganache-core/node_modules/send/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/send/node_modules/ms": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/serve-static": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ganache-core/node_modules/servify": { + "version": "0.1.12", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/set-immediate-shim": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/set-value": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/setimmediate": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/setprototypeof": { + "version": "1.1.1", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/sha.js": { + "version": "2.4.11", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/ganache-core/node_modules/simple-concat": { + "version": "1.0.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/simple-get": { + "version": "2.8.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon": { + "version": "0.8.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon-node": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon-util": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon-util/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/source-map-resolve": { + "version": "0.5.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/ganache-core/node_modules/source-map-support": { + "version": "0.5.12", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/ganache-core/node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/source-map-url": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/split-string": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/sshpk": { + "version": "1.16.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense", + "peer": true + }, + "node_modules/ganache-core/node_modules/static-extend": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/stream-to-pull-stream": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "looper": "^3.0.0", + "pull-stream": "^3.2.3" + } + }, + "node_modules/ganache-core/node_modules/stream-to-pull-stream/node_modules/looper": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/strict-uri-encode": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/ganache-core/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/string.prototype.trim": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/string.prototype.trimend": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/string.prototype.trimstart": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/strip-hex-prefix": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-core/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/swarm-js": { + "version": "0.1.40", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/fs-extra": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/get-stream": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/got": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/p-cancelable": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/prepend-http": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/url-parse-lax": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/tape": { + "version": "4.13.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deep-equal": "~1.1.1", + "defined": "~1.0.0", + "dotignore": "~0.1.2", + "for-each": "~0.3.3", + "function-bind": "~1.1.1", + "glob": "~7.1.6", + "has": "~1.0.3", + "inherits": "~2.0.4", + "is-regex": "~1.0.5", + "minimist": "~1.2.5", + "object-inspect": "~1.7.0", + "resolve": "~1.17.0", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.2.1", + "through": "~2.3.8" + }, + "bin": { + "tape": "bin/tape" + } + }, + "node_modules/ganache-core/node_modules/tape/node_modules/glob": { + "version": "7.1.6", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ganache-core/node_modules/tape/node_modules/is-regex": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/tape/node_modules/object-inspect": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/tape/node_modules/resolve": { + "version": "1.17.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/tar": { + "version": "4.4.13", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/ganache-core/node_modules/tar/node_modules/fs-minipass": { + "version": "1.2.7", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/ganache-core/node_modules/tar/node_modules/minipass": { + "version": "2.9.0", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/ganache-core/node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/ganache-core/node_modules/timed-out": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/tmp": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/to-object-path": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/to-object-path/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/to-readable-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/to-regex": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/toidentifier": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ganache-core/node_modules/tough-cookie": { + "version": "2.5.0", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ganache-core/node_modules/trim-right": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/tunnel-agent": { + "version": "0.6.0", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/tweetnacl": { + "version": "1.0.3", + "dev": true, + "license": "Unlicense", + "peer": true + }, + "node_modules/ganache-core/node_modules/tweetnacl-util": { + "version": "0.15.1", + "dev": true, + "license": "Unlicense", + "peer": true + }, + "node_modules/ganache-core/node_modules/type": { + "version": "1.2.0", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/typewise": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "typewise-core": "^1.2.0" + } + }, + "node_modules/ganache-core/node_modules/typewise-core": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/typewiselite": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ultron": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/underscore": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/union-value": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/ganache-core/node_modules/unorm": { + "version": "1.6.0", + "dev": true, + "license": "MIT or GPL-2.0", + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/ganache-core/node_modules/unpipe": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/unset-value": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/ganache-core/node_modules/urix": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/url-parse-lax": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/url-set-query": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/url-to-options": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ganache-core/node_modules/use": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/utf-8-validate": { + "version": "5.0.4", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "node-gyp-build": "^4.2.0" + } + }, + "node_modules/ganache-core/node_modules/utf8": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/util.promisify": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "for-each": "^0.3.3", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/utils-merge": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/ganache-core/node_modules/uuid": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/ganache-core/node_modules/varint": { + "version": "5.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/verror": { + "version": "1.10.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/ganache-core/node_modules/web3": { + "version": "1.2.11", + "dev": true, + "hasInstallScript": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "web3-bzz": "1.2.11", + "web3-core": "1.2.11", + "web3-eth": "1.2.11", + "web3-eth-personal": "1.2.11", + "web3-net": "1.2.11", + "web3-shh": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-bzz": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "^12.12.6", + "got": "9.6.0", + "swarm-js": "^0.1.40", + "underscore": "1.9.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.19.12", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-core": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.5", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-requestmanager": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-core-helpers": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "underscore": "1.9.1", + "web3-eth-iban": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-core-method": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/transactions": "^5.0.0-beta.135", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-core-promievent": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-core-requestmanager": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "web3-providers-http": "1.2.11", + "web3-providers-ipc": "1.2.11", + "web3-providers-ws": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-core-subscriptions": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "eventemitter3": "4.0.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-core/node_modules/@types/node": { + "version": "12.19.12", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-eth": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-eth-accounts": "1.2.11", + "web3-eth-contract": "1.2.11", + "web3-eth-ens": "1.2.11", + "web3-eth-iban": "1.2.11", + "web3-eth-personal": "1.2.11", + "web3-net": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-abi": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.0.0-beta.153", + "underscore": "1.9.1", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-accounts": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "ethereumjs-common": "^1.3.2", + "ethereumjs-tx": "^2.1.1", + "scrypt-js": "^3.0.1", + "underscore": "1.9.1", + "uuid": "3.3.2", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.8", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-contract": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.5", + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-ens": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-eth-contract": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-iban": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.11.9", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-personal": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-net": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.19.12", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-net": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "web3-core": "1.2.11", + "web3-core-method": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine": { + "version": "14.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "async": "^2.5.0", + "backoff": "^2.5.0", + "clone": "^2.0.0", + "cross-fetch": "^2.1.0", + "eth-block-tracker": "^3.0.0", + "eth-json-rpc-infura": "^3.1.0", + "eth-sig-util": "^1.4.2", + "ethereumjs-block": "^1.2.2", + "ethereumjs-tx": "^1.2.0", + "ethereumjs-util": "^5.1.5", + "ethereumjs-vm": "^2.3.4", + "json-rpc-error": "^2.0.0", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "readable-stream": "^2.2.9", + "request": "^2.85.0", + "semaphore": "^1.0.3", + "ws": "^5.1.1", + "xhr": "^2.2.0", + "xtend": "^4.0.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/eth-sig-util": { + "version": "1.4.2", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", + "ethereumjs-util": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-account": { + "version": "2.0.5", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-block": { + "version": "1.7.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-block/node_modules/ethereum-common": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm": { + "version": "2.6.0", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-codec": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-errors": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws": { + "version": "0.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/levelup": { + "version": "1.3.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ltgt": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/memdown": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/object-keys": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/semver": { + "version": "5.4.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/string_decoder": { + "version": "0.10.31", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ws": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-providers-http": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "web3-core-helpers": "1.2.11", + "xhr2-cookies": "1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-providers-ipc": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "oboe": "2.1.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-providers-ws": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "eventemitter3": "4.0.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "websocket": "^1.0.31" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-shh": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "web3-core": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-net": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-utils": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.9.1", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-utils/node_modules/eth-lib": { + "version": "0.2.8", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/ganache-core/node_modules/websocket": { + "version": "1.0.32", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/ganache-core/node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/whatwg-fetch": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/ws": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "node_modules/ganache-core/node_modules/ws/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/xhr": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/xhr-request": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/ganache-core/node_modules/xhr-request-promise": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/ganache-core/node_modules/xhr2-cookies": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "cookiejar": "^2.1.1" + } + }, + "node_modules/ganache-core/node_modules/xtend": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/yaeti": { + "version": "0.0.6", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/ganache-core/node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "dev": true, + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-pkg-repo/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/get-pkg-repo/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/get-pkg-repo/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", + "dev": true, + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "dev": true, + "dependencies": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/git-up": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-6.0.0.tgz", + "integrity": "sha512-6RUFSNd1c/D0xtGnyWN2sxza2bZtZ/EmI9448n6rCZruFwV/ezeEn2fJP7XnUQGwf0RAtd/mmUCbtH6JPYA2SA==", + "dev": true, + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^7.0.2" + } + }, + "node_modules/git-url-parse": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-12.0.0.tgz", + "integrity": "sha512-I6LMWsxV87vysX1WfsoglXsXg6GjQRKq7+Dgiseo+h0skmp5Hp2rzmcEIRQot9CPA+uzU7x1x7jZdqvTFGnB+Q==", + "dev": true, + "dependencies": { + "git-up": "^6.0.0" + } + }, + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.2" + } + }, + "node_modules/glob": { + "version": "7.1.4", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/globals": { + "version": "13.16.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/fast-glob": { + "version": "3.2.11", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/got": { + "version": "9.6.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "license": "ISC" + }, + "node_modules/growl": { + "version": "1.10.5", + "license": "MIT", + "engines": { + "node": ">=4.x" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/hardhat": { + "version": "2.9.9", + "license": "MIT", + "dependencies": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/blockchain": "^5.5.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/tx": "^3.5.1", + "@ethereumjs/vm": "^5.9.0", + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@sentry/node": "^5.18.1", + "@solidity-parser/parser": "^0.14.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "abort-controller": "^3.0.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^0.1.2", + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^7.1.4", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "lodash": "^4.17.11", + "merkle-patricia-tree": "^4.2.4", + "mnemonist": "^0.38.0", + "mocha": "^9.2.0", + "p-map": "^4.0.0", + "qs": "^6.7.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "slash": "^3.0.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "true-case-path": "^2.2.1", + "tsort": "0.0.1", + "undici": "^5.4.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/cli.js" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || ^16.0.0" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/hardhat/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/hardhat/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/hardhat/node_modules/find-up": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/hardhat/node_modules/glob": { + "version": "7.2.0", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/hardhat/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/hardhat/node_modules/locate-path": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/p-limit": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/p-locate": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/p-try": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/path-exists": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/resolve": { + "version": "1.17.0", + "license": "MIT", + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hardhat/node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/hardhat/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/has": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hash-base": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-https": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/husky": { + "version": "7.0.4", + "dev": true, + "license": "MIT", + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idna-uts46-hx": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/idna-uts46-hx/node_modules/punycode": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/immediate": { + "version": "3.3.0", + "license": "MIT" + }, + "node_modules/immutable": { + "version": "4.1.0", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/init-package-json": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.5.tgz", + "integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==", + "dev": true, + "dependencies": { + "npm-package-arg": "^8.1.5", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "^4.1.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/init-package-json/node_modules/read-package-json": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", + "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "license": "MIT", + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-object": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ssh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "dev": true, + "dependencies": { + "protocols": "^2.0.1" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.9", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/isurl": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)", + "peer": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/just-diff": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.0.3.tgz", + "integrity": "sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg==", + "dev": true + }, + "node_modules/just-diff-apply": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.3.1.tgz", + "integrity": "sha512-dgFenZnMsc1xGNqgdtgnh7DK+Oy352CE3VZLbzcbQpsBs9iI2K3M0IRrdgREZ72eItTjbl0suRyvKRdVQa9GbA==", + "dev": true + }, + "node_modules/keccak": { + "version": "3.0.2", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/keccak/node_modules/node-addon-api": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/keyv": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lerna": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.1.8.tgz", + "integrity": "sha512-KrpFx2l1x1X7wb9unqRU7OZTaNs5+67VQ1vxf8fIMgdtCAjEqkLxF/F3xLs+KBMws5PV19Q9YtPHn7SiwDl7iQ==", + "dev": true, + "dependencies": { + "@lerna/add": "5.1.8", + "@lerna/bootstrap": "5.1.8", + "@lerna/changed": "5.1.8", + "@lerna/clean": "5.1.8", + "@lerna/cli": "5.1.8", + "@lerna/create": "5.1.8", + "@lerna/diff": "5.1.8", + "@lerna/exec": "5.1.8", + "@lerna/import": "5.1.8", + "@lerna/info": "5.1.8", + "@lerna/init": "5.1.8", + "@lerna/link": "5.1.8", + "@lerna/list": "5.1.8", + "@lerna/publish": "5.1.8", + "@lerna/run": "5.1.8", + "@lerna/version": "5.1.8", + "import-local": "^3.0.2", + "npmlog": "^6.0.2" + }, + "bin": { + "lerna": "cli.js" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/level-codec": { + "version": "9.0.2", + "license": "MIT", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-concat-iterator": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/level-errors": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "errno": "~0.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-iterator-stream": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-mem": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "level-packager": "^5.0.3", + "memdown": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-packager": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-supports": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-ws": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/levelup": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libnpmaccess": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", + "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", + "dev": true, + "dependencies": { + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmaccess/node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", + "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", + "dev": true, + "dependencies": { + "normalize-package-data": "^3.0.2", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0", + "semver": "^7.1.3", + "ssri": "^8.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish/node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lilconfig": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lint-staged": { + "version": "12.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.16", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^5.1.1", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.5.0", + "string-argv": "^0.3.1", + "supports-color": "^9.2.2", + "yaml": "^1.10.2" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "9.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/lint-staged/node_modules/supports-color": { + "version": "9.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/listr2": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/rxjs": { + "version": "7.5.6", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loupe": { + "version": "2.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ltgt": { + "version": "2.2.1", + "license": "MIT" + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "devOptional": true, + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/make-fetch-happen/node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mcl-wasm": { + "version": "0.7.9", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memdown": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/memdown/node_modules/abstract-leveldown": { + "version": "6.2.3", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/memdown/node_modules/immediate": { + "version": "3.2.3", + "license": "MIT" + }, + "node_modules/memorystream": { + "version": "0.3.1", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/merkle-patricia-tree": { + "version": "4.2.4", + "license": "MPL-2.0", + "dependencies": { + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "dev": true, + "peer": true, + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.0.5", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "dev": true, + "license": "MIT" + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-promise": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "mkdirp": "*" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "license": "MIT", + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "9.2.2", + "license": "MIT", + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.3", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "4.2.1", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mock-fs": { + "version": "4.14.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/multibase": { + "version": "0.6.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/multicodec": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "varint": "^5.0.0" + } + }, + "node_modules/multihashes": { + "version": "0.4.21", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + } + }, + "node_modules/multihashes/node_modules/multibase": { + "version": "0.7.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/multimatch/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nano-json-stream-parser": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/nanoid": { + "version": "3.3.1", + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "license": "ISC" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.4.0", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", + "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-packlist/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-packlist/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm-pick-manifest": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", + "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", + "dev": true, + "dependencies": { + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/npm-pick-manifest/node_modules/lru-cache": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", + "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "dev": true, + "dependencies": { + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-registry-fetch/node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/npm-registry-fetch/node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-registry-fetch/node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm-registry-fetch/node_modules/socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "license": "MIT" + }, + "node_modules/nx": { + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-14.4.2.tgz", + "integrity": "sha512-bYO//HuwQL4X8y+2BjUPtkPLDiYI1zMejQo6+uJl3+VdYPcsjwW/ca581tBPHiPH95XnHiBartnMrMJtn11grw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@nrwl/cli": "14.4.2", + "@nrwl/tao": "14.4.2", + "@parcel/watcher": "2.0.4", + "chalk": "4.1.0", + "chokidar": "^3.5.1", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^10.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "js-yaml": "4.1.0", + "jsonc-parser": "3.0.0", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.3.4", + "string-width": "^4.2.3", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^3.9.0", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.4.0", + "yargs-parser": "21.0.1" + }, + "bin": { + "nx": "bin/nx.js" + }, + "peerDependencies": { + "@swc-node/register": "^1.4.2", + "@swc/core": "^1.2.173" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/nx/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/nx/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nx/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/nx/node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "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.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/nx/node_modules/yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obliterator": { + "version": "2.0.4", + "license": "MIT" + }, + "node_modules/oboe": { + "version": "2.1.5", + "license": "BSD", + "dependencies": { + "http-https": "^1.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "dev": true, + "dependencies": { + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pacote": { + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", + "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", + "dev": true, + "dependencies": { + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/pacote/node_modules/@npmcli/run-script": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.5.tgz", + "integrity": "sha512-FyrZkZ+O0bCnQqm+mRb6sKbEJgyJudInwFN84gCcMUcxrWkR15Ags1uOHwnxHYdpj3T5eqrCZNW/Ys20MGTQ6Q==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/pacote/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pacote/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/pacote/node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/pacote/node_modules/hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/pacote/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pacote/node_modules/ignore-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/pacote/node_modules/lru-cache": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", + "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/pacote/node_modules/make-fetch-happen": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", + "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/pacote/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/minipass-fetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/pacote/node_modules/node-gyp": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", + "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/pacote/node_modules/normalize-package-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", + "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", + "dev": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/pacote/node_modules/npm-packlist": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", + "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", + "dev": true, + "dependencies": { + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^1.1.2", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/pacote/node_modules/npm-packlist/node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/npm-registry-fetch": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", + "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/pacote/node_modules/read-package-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", + "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", + "dev": true, + "dependencies": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/pacote/node_modules/read-package-json/node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pacote/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/pacote/node_modules/validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-conflict-json": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", + "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.1", + "just-diff": "^5.0.1", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-5.0.0.tgz", + "integrity": "sha512-qOpH55/+ZJ4jUu/oLO+ifUKjFPNZGfnPJtzvGzKN/4oLMil5m9OH4VpOj6++9/ytJcfks4kzH2hhi87GL/OU9A==", + "dev": true, + "dependencies": { + "protocols": "^2.0.0" + } + }, + "node_modules/parse-url": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-7.0.2.tgz", + "integrity": "sha512-PqO4Z0eCiQ08Wj6QQmrmp5YTTxpYfONdOEamrtvK63AmzXpcavIVQubGHxOEwiIoDZFb8uDOoQFS0NCcjqIYQg==", + "dev": true, + "dependencies": { + "is-ssh": "^1.4.0", + "normalize-url": "^6.1.0", + "parse-path": "^5.0.0", + "protocols": "^2.0.1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/patch-package": { + "version": "6.4.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/patch-package/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/patch-package/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/patch-package/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/patch-package/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/patch-package/node_modules/fs-extra": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/patch-package/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/patch-package/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/patch-package/node_modules/open": { + "version": "7.4.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/patch-package/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/patch-package/node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/patch-package/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/patch-package/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/patch-package/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/patch-package/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/patch-package/node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/patch-package/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/patch-package/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postinstall-postinstall": { + "version": "2.1.0", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-call-limit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", + "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", + "dev": true, + "dependencies": { + "read": "1" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/protocols": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.9.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/pump": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/read-cmd-shim": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", + "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", + "dev": true + }, + "node_modules/read-package-json": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", + "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/request": { + "version": "2.88.2", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/resolve": { + "version": "1.22.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rustbn.js": { + "version": "0.2.0", + "license": "(MIT OR Apache-2.0)" + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/secp256k1": { + "version": "4.0.3", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/semaphore-async-await": { + "version": "1.5.1", + "license": "MIT", + "engines": { + "node": ">=4.1" + } + }, + "node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/send/node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/servify": { + "version": "0.1.12", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/simple-get": { + "version": "2.8.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "dev": true, + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/solc": { + "version": "0.7.3", + "license": "MIT", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solcjs" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/solc/node_modules/jsonfile": { + "version": "2.4.0", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solc/node_modules/rimraf": { + "version": "2.7.1", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/solc/node_modules/semver": { + "version": "5.7.1", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/solc/node_modules/tmp": { + "version": "0.0.33", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/sort-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", + "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sshpk": { + "version": "1.17.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense", + "peer": true + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "license": "MIT", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-format": { + "version": "2.0.0", + "dev": true, + "license": "WTFPL OR MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swarm-js": { + "version": "0.1.40", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + } + }, + "node_modules/swarm-js/node_modules/chownr": { + "version": "1.1.4", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/swarm-js/node_modules/fs-extra": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/swarm-js/node_modules/fs-minipass": { + "version": "1.2.7", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/swarm-js/node_modules/get-stream": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/got": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swarm-js/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/swarm-js/node_modules/minipass": { + "version": "2.9.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/swarm-js/node_modules/minizlib": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/swarm-js/node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/swarm-js/node_modules/p-cancelable": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/p-timeout": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/prepend-http": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swarm-js/node_modules/tar": { + "version": "4.4.19", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/swarm-js/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/swarm-js/node_modules/url-parse-lax": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swarm-js/node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/table-layout": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/test-value": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^1.0.3", + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/test-value/node_modules/array-back": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/test-value/node_modules/typical": { + "version": "2.6.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/testrpc": { + "version": "0.0.1", + "dev": true, + "peer": true + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/treeverse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", + "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/true-case-path": { + "version": "2.2.1", + "license": "Apache-2.0" + }, + "node_modules/ts-command-line-args": { + "version": "2.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-essentials": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/ts-generator": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mkdirp": "^0.5.2", + "@types/prettier": "^2.1.1", + "@types/resolve": "^0.0.8", + "chalk": "^2.4.1", + "glob": "^7.1.2", + "mkdirp": "^0.5.1", + "prettier": "^2.1.2", + "resolve": "^1.8.1", + "ts-essentials": "^1.0.0" + }, + "bin": { + "ts-generator": "dist/cli/run.js" + } + }, + "node_modules/ts-generator/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-generator/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-generator/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ts-generator/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/ts-generator/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-generator/node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ts-generator/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-generator/node_modules/ts-essentials": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/ts-node": { + "version": "10.8.2", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsort": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "license": "Unlicense" + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "license": "Unlicense" + }, + "node_modules/type": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typechain": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.0", + "glob": "^7.1.6", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.1.2", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.1.0" + } + }, + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/typechain/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.7.4", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/uglify-js": { + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.2.tgz", + "integrity": "sha512-AaQNokTNgExWrkEYA24BTNMSjyqEXPSfhqoS0AxmHkCJ4U+Dyy5AvbGV/sqxuxficEfGGoX3zWw9R7QpLFfEsg==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ultron": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici": { + "version": "5.6.0", + "license": "MIT", + "engines": { + "node": ">=12.18" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/url-to-options": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/utf-8-validate": { + "version": "5.0.9", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/util": { + "version": "0.12.4", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "devOptional": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/varint": { + "version": "5.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/walk-up-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", + "dev": true + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web3": { + "version": "1.7.4", + "dev": true, + "hasInstallScript": true, + "license": "LGPL-3.0", + "peer": true, + "dependencies": { + "web3-bzz": "1.7.4", + "web3-core": "1.7.4", + "web3-eth": "1.7.4", + "web3-eth-personal": "1.7.4", + "web3-net": "1.7.4", + "web3-shh": "1.7.4", + "web3-utils": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz": { + "version": "1.7.4", + "dev": true, + "hasInstallScript": true, + "license": "LGPL-3.0", + "peer": true, + "dependencies": { + "@types/node": "^12.12.6", + "got": "9.6.0", + "swarm-js": "^0.1.40" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.20.55", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/web3-core": { + "version": "1.7.4", + "license": "LGPL-3.0", + "dependencies": { + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-requestmanager": "1.7.4", + "web3-utils": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-helpers": { + "version": "1.7.4", + "license": "LGPL-3.0", + "dependencies": { + "web3-eth-iban": "1.7.4", + "web3-utils": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method": { + "version": "1.7.4", + "license": "LGPL-3.0", + "dependencies": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-utils": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-promievent": { + "version": "1.7.4", + "license": "LGPL-3.0", + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-promievent/node_modules/eventemitter3": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/web3-core-requestmanager": { + "version": "1.7.4", + "license": "LGPL-3.0", + "dependencies": { + "util": "^0.12.0", + "web3-core-helpers": "1.7.4", + "web3-providers-http": "1.7.4", + "web3-providers-ipc": "1.7.4", + "web3-providers-ws": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions": { + "version": "1.7.4", + "license": "LGPL-3.0", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/web3-core/node_modules/@types/node": { + "version": "12.20.55", + "license": "MIT" + }, + "node_modules/web3-eth": { + "version": "1.7.4", + "dev": true, + "license": "LGPL-3.0", + "peer": true, + "dependencies": { + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-eth-abi": "1.7.4", + "web3-eth-accounts": "1.7.4", + "web3-eth-contract": "1.7.4", + "web3-eth-ens": "1.7.4", + "web3-eth-iban": "1.7.4", + "web3-eth-personal": "1.7.4", + "web3-net": "1.7.4", + "web3-utils": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "1.7.4", + "dev": true, + "license": "LGPL-3.0", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts": { + "version": "1.7.4", + "dev": true, + "license": "LGPL-3.0", + "peer": true, + "dependencies": { + "@ethereumjs/common": "^2.5.0", + "@ethereumjs/tx": "^3.3.2", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.0.10", + "scrypt-js": "^3.0.1", + "uuid": "3.3.2", + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-utils": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.8", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/web3-eth-contract": { + "version": "1.7.4", + "dev": true, + "license": "LGPL-3.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^5.1.0", + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-eth-abi": "1.7.4", + "web3-utils": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens": { + "version": "1.7.4", + "dev": true, + "license": "LGPL-3.0", + "peer": true, + "dependencies": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-eth-abi": "1.7.4", + "web3-eth-contract": "1.7.4", + "web3-utils": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "1.7.4", + "license": "LGPL-3.0", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal": { + "version": "1.7.4", + "dev": true, + "license": "LGPL-3.0", + "peer": true, + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-net": "1.7.4", + "web3-utils": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.20.55", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/web3-net": { + "version": "1.7.4", + "dev": true, + "license": "LGPL-3.0", + "peer": true, + "dependencies": { + "web3-core": "1.7.4", + "web3-core-method": "1.7.4", + "web3-utils": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http": { + "version": "1.7.4", + "license": "LGPL-3.0", + "dependencies": { + "web3-core-helpers": "1.7.4", + "xhr2-cookies": "1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc": { + "version": "1.7.4", + "license": "LGPL-3.0", + "dependencies": { + "oboe": "2.1.5", + "web3-core-helpers": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws": { + "version": "1.7.4", + "license": "LGPL-3.0", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4", + "websocket": "^1.0.32" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws/node_modules/eventemitter3": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/web3-shh": { + "version": "1.7.4", + "dev": true, + "hasInstallScript": true, + "license": "LGPL-3.0", + "peer": true, + "dependencies": { + "web3-core": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-net": "1.7.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils": { + "version": "1.7.4", + "license": "LGPL-3.0", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/websocket": { + "version": "1.0.34", + "license": "Apache-2.0", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "license": "MIT", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/which-typed-array": { + "version": "1.1.8", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/window-size": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "window-size": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/workerpool": { + "version": "6.2.0", + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/write-json-file": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", + "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", + "dev": true, + "dependencies": { + "detect-indent": "^6.0.0", + "graceful-fs": "^4.1.15", + "is-plain-obj": "^2.0.0", + "make-dir": "^3.0.0", + "sort-keys": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/write-json-file/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "dev": true, + "dependencies": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-pkg/node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-pkg/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/write-pkg/node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/write-pkg/node_modules/write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "dev": true, + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ws": { + "version": "7.5.8", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xhr": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr-request": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/xhr-request/node_modules/query-string": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xhr-request/node_modules/strict-uri-encode": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xhr2-cookies": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "cookiejar": "^2.1.1" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "license": "MIT", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/core-types": { + "name": "@biconomy-sdk/core-types", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/contracts": "^5.6.0", + "@gnosis.pm/safe-deployments": "^1.12.0", + "web3-core": "^1.7.1" + }, + "devDependencies": { + "@types/node": "^17.0.23", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "prettier": "^2.6.2", + "typescript": "^4.6.3" + } + }, + "packages/core-types/node_modules/@types/node": { + "version": "17.0.45", + "dev": true, + "license": "MIT" + }, + "packages/ethers-lib": { + "name": "@biconomy-sdk/ethers-lib", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@biconomy-sdk/core-types": "*", + "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", + "@openzeppelin/contracts": "^4.6.0" + }, + "devDependencies": { + "@biconomy-sdk/core-types": "*", + "@nomiclabs/hardhat-ethers": "^2.0.5", + "@nomiclabs/hardhat-waffle": "^2.0.3", + "@typechain/ethers-v5": "^9.0.0", + "@types/node": "^17.0.23", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "ethers": "^5.5.3", + "hardhat": "^2.9.2", + "prettier": "^2.6.2", + "ts-node": "^10.7.0", + "typechain": "^7.0.0", + "typescript": "^4.6.3" + }, + "peerDependencies": { + "ethers": "^5.5.3" + } + }, + "packages/ethers-lib/node_modules/@types/node": { + "version": "17.0.45", + "dev": true, + "license": "MIT" + }, + "packages/node-client": { + "name": "@biconomy-sdk/node-client", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@biconomy-sdk/core-types": "*", + "@ethersproject/abstract-signer": "^5.6.0", + "node-fetch": "^2.6.6" + }, + "devDependencies": { + "@biconomy-sdk/core-types": "*", + "@gnosis.pm/safe-ethers-lib": "^1.1.0", + "@gnosis.pm/safe-web3-lib": "^1.1.0", + "@nomiclabs/hardhat-ethers": "^2.0.5", + "@nomiclabs/hardhat-waffle": "^2.0.3", + "@nomiclabs/hardhat-web3": "^2.0.0", + "@types/chai": "^4.3.0", + "@types/chai-as-promised": "^7.1.5", + "@types/mocha": "^9.1.0", + "@types/node": "^17.0.23", + "@types/node-fetch": "^2.6.2", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "chai": "^4.3.6", + "chai-as-promised": "^7.1.1", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "hardhat": "^2.9.2", + "husky": "^7.0.4", + "lint-staged": "^12.3.7", + "mocha": "^9.2.2", + "prettier": "^2.6.2", + "rimraf": "^3.0.2", + "ts-generator": "^0.1.1", + "ts-node": "^10.7.0", + "typescript": "^4.6.3" + } + }, + "packages/node-client/node_modules/@types/node": { + "version": "17.0.45", + "dev": true, + "license": "MIT" + }, + "packages/relayer": { + "name": "@biconomy-sdk/relayer", + "version": "1.0.0", + "license": "MIT" + }, + "packages/smart-account": { + "name": "@biconomy-sdk/smart-account", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/ethers-lib": "*", + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/contracts": "^5.6.0", + "@ethersproject/providers": "^5.6.8", + "@gnosis.pm/safe-deployments": "^1.12.0", + "web3-core": "^1.7.1" + }, + "devDependencies": { + "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/ethers-lib": "*", + "@types/node": "^17.0.23", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "ethers": "^5.5.3", + "prettier": "^2.6.2", + "typescript": "^4.6.3" + } + }, + "packages/smart-account/node_modules/@types/node": { + "version": "17.0.45", + "dev": true, + "license": "MIT" + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@biconomy-sdk/core-types": { + "version": "file:packages/core-types", + "requires": { + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/contracts": "^5.6.0", + "@gnosis.pm/safe-deployments": "^1.12.0", + "@types/node": "^17.0.23", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "prettier": "^2.6.2", + "typescript": "^4.6.3", + "web3-core": "^1.7.1" + }, + "dependencies": { + "@types/node": { + "version": "17.0.45", + "dev": true + } + } + }, + "@biconomy-sdk/ethers-lib": { + "version": "file:packages/ethers-lib", + "requires": { + "@biconomy-sdk/core-types": "*", + "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", + "@nomiclabs/hardhat-ethers": "^2.0.5", + "@nomiclabs/hardhat-waffle": "^2.0.3", + "@openzeppelin/contracts": "^4.6.0", + "@typechain/ethers-v5": "^9.0.0", + "@types/node": "^17.0.23", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "ethers": "^5.5.3", + "hardhat": "^2.9.2", + "prettier": "^2.6.2", + "ts-node": "^10.7.0", + "typechain": "^7.0.0", + "typescript": "^4.6.3" + }, + "dependencies": { + "@types/node": { + "version": "17.0.45", + "dev": true + } + } + }, + "@biconomy-sdk/node-client": { + "version": "file:packages/node-client", + "requires": { + "@biconomy-sdk/core-types": "*", + "@ethersproject/abstract-signer": "^5.6.0", + "@gnosis.pm/safe-ethers-lib": "^1.1.0", + "@gnosis.pm/safe-web3-lib": "^1.1.0", + "@nomiclabs/hardhat-ethers": "^2.0.5", + "@nomiclabs/hardhat-waffle": "^2.0.3", + "@nomiclabs/hardhat-web3": "^2.0.0", + "@types/chai": "^4.3.0", + "@types/chai-as-promised": "^7.1.5", + "@types/mocha": "^9.1.0", + "@types/node": "^17.0.23", + "@types/node-fetch": "^2.6.2", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "chai": "^4.3.6", + "chai-as-promised": "^7.1.1", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "hardhat": "^2.9.2", + "husky": "^7.0.4", + "lint-staged": "^12.3.7", + "mocha": "^9.2.2", + "node-fetch": "^2.6.6", + "prettier": "^2.6.2", + "rimraf": "^3.0.2", + "ts-generator": "^0.1.1", + "ts-node": "^10.7.0", + "typescript": "^4.6.3" + }, + "dependencies": { + "@types/node": { + "version": "17.0.45", + "dev": true + } + } + }, + "@biconomy-sdk/relayer": { + "version": "file:packages/relayer" + }, + "@biconomy-sdk/smart-account": { + "version": "file:packages/smart-account", + "requires": { + "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/ethers-lib": "*", + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/contracts": "^5.6.0", + "@ethersproject/providers": "^5.6.8", + "@gnosis.pm/safe-deployments": "^1.12.0", + "@types/node": "^17.0.23", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "ethers": "^5.5.3", + "prettier": "^2.6.2", + "typescript": "^4.6.3", + "web3-core": "^1.7.1" + }, + "dependencies": { + "@types/node": { + "version": "17.0.45", + "dev": true + } + } + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "devOptional": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@ensdomains/ens": { + "version": "0.4.5", + "dev": true, + "peer": true, + "requires": { + "bluebird": "^3.5.2", + "eth-ens-namehash": "^2.0.8", + "solc": "^0.4.20", + "testrpc": "0.0.1", + "web3-utils": "^1.0.0-beta.31" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true, + "peer": true + }, + "camelcase": { + "version": "3.0.0", + "dev": true, + "peer": true + }, + "cliui": { + "version": "3.2.0", + "dev": true, + "peer": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "dev": true, + "peer": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "fs-extra": { + "version": "0.30.0", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "get-caller-file": { + "version": "1.0.3", + "dev": true, + "peer": true + }, + "hosted-git-info": { + "version": "2.8.9", + "dev": true, + "peer": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "load-json-file": { + "version": "1.1.0", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "dev": true, + "peer": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "dev": true, + "peer": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "dev": true, + "peer": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "dev": true, + "peer": true + }, + "read-pkg": { + "version": "1.1.0", + "dev": true, + "peer": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "require-from-string": { + "version": "1.2.1", + "dev": true, + "peer": true + }, + "rimraf": { + "version": "2.7.1", + "dev": true, + "peer": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "dev": true, + "peer": true + }, + "solc": { + "version": "0.4.26", + "dev": true, + "peer": true, + "requires": { + "fs-extra": "^0.30.0", + "memorystream": "^0.3.1", + "require-from-string": "^1.1.0", + "semver": "^5.3.0", + "yargs": "^4.7.1" + } + }, + "string-width": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "peer": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "dev": true, + "peer": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.2", + "dev": true, + "peer": true + }, + "yargs": { + "version": "4.8.1", + "dev": true, + "peer": true, + "requires": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" + } + }, + "yargs-parser": { + "version": "2.4.1", + "dev": true, + "peer": true, + "requires": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + } + } + } + }, + "@ensdomains/resolver": { + "version": "0.2.4", + "dev": true, + "peer": true + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "@ethereum-waffle/chai": { + "version": "3.4.4", + "dev": true, + "peer": true, + "requires": { + "@ethereum-waffle/provider": "^3.4.4", + "ethers": "^5.5.2" + } + }, + "@ethereum-waffle/compiler": { + "version": "3.4.4", + "dev": true, + "peer": true, + "requires": { + "@resolver-engine/imports": "^0.3.3", + "@resolver-engine/imports-fs": "^0.3.3", + "@typechain/ethers-v5": "^2.0.0", + "@types/mkdirp": "^0.5.2", + "@types/node-fetch": "^2.5.5", + "ethers": "^5.0.1", + "mkdirp": "^0.5.1", + "node-fetch": "^2.6.1", + "solc": "^0.6.3", + "ts-generator": "^0.1.1", + "typechain": "^3.0.0" + }, + "dependencies": { + "@typechain/ethers-v5": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "ethers": "^5.0.2" + } + }, + "array-back": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "typical": "^2.6.1" + } + }, + "command-line-args": { + "version": "4.0.7", + "dev": true, + "peer": true, + "requires": { + "array-back": "^2.0.0", + "find-replace": "^1.0.3", + "typical": "^2.6.1" + } + }, + "find-replace": { + "version": "1.0.3", + "dev": true, + "peer": true, + "requires": { + "array-back": "^1.0.4", + "test-value": "^2.1.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "dev": true, + "peer": true, + "requires": { + "typical": "^2.6.0" + } + } + } + }, + "fs-extra": { + "version": "0.30.0", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "mkdirp": { + "version": "0.5.6", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "rimraf": { + "version": "2.7.1", + "dev": true, + "peer": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "dev": true, + "peer": true + }, + "solc": { + "version": "0.6.12", + "dev": true, + "peer": true, + "requires": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + } + }, + "tmp": { + "version": "0.0.33", + "dev": true, + "peer": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "ts-essentials": { + "version": "6.0.7", + "dev": true, + "peer": true, + "requires": {} + }, + "typechain": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "command-line-args": "^4.0.7", + "debug": "^4.1.1", + "fs-extra": "^7.0.0", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "ts-essentials": "^6.0.3", + "ts-generator": "^0.1.1" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.6" + } + } + } + }, + "typical": { + "version": "2.6.1", + "dev": true, + "peer": true + }, + "universalify": { + "version": "0.1.2", + "dev": true, + "peer": true + } + } + }, + "@ethereum-waffle/ens": { + "version": "3.4.4", + "dev": true, + "peer": true, + "requires": { + "@ensdomains/ens": "^0.4.4", + "@ensdomains/resolver": "^0.2.4", + "ethers": "^5.5.2" + } + }, + "@ethereum-waffle/mock-contract": { + "version": "3.4.4", + "dev": true, + "peer": true, + "requires": { + "@ethersproject/abi": "^5.5.0", + "ethers": "^5.5.2" + } + }, + "@ethereum-waffle/provider": { + "version": "3.4.4", + "dev": true, + "peer": true, + "requires": { + "@ethereum-waffle/ens": "^3.4.4", + "ethers": "^5.5.2", + "ganache-core": "^2.13.2", + "patch-package": "^6.2.2", + "postinstall-postinstall": "^2.1.0" + } + }, + "@ethereumjs/block": { + "version": "3.6.3", + "requires": { + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "ethereumjs-util": "^7.1.5", + "merkle-patricia-tree": "^4.2.4" + } + }, + "@ethereumjs/blockchain": { + "version": "5.5.3", + "requires": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/ethash": "^1.1.0", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "level-mem": "^5.0.1", + "lru-cache": "^5.1.1", + "semaphore-async-await": "^1.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1" + } + } + }, + "@ethereumjs/common": { + "version": "2.6.5", + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/ethash": { + "version": "1.1.0", + "requires": { + "@ethereumjs/block": "^3.5.0", + "@types/levelup": "^4.3.0", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.1.1", + "miller-rabin": "^4.0.0" + }, + "dependencies": { + "buffer-xor": { + "version": "2.0.2", + "requires": { + "safe-buffer": "^5.1.1" + } + } + } + }, + "@ethereumjs/tx": { + "version": "3.5.2", + "requires": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/vm": { + "version": "5.9.3", + "requires": { + "@ethereumjs/block": "^3.6.3", + "@ethereumjs/blockchain": "^5.5.3", + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "async-eventemitter": "^0.2.4", + "core-js-pure": "^3.0.1", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "merkle-patricia-tree": "^4.2.4", + "rustbn.js": "~0.2.0" + } + }, + "@ethersproject/abi": { + "version": "5.6.4", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/address": { + "version": "5.6.1", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "@ethersproject/base64": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/basex": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.6.2", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.6.1", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/constants": { + "version": "5.6.1", + "requires": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/contracts": { + "version": "5.6.2", + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "@ethersproject/hash": { + "version": "5.6.1", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/hdnode": { + "version": "5.6.2", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/json-wallets": { + "version": "5.6.1", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0" + }, + "@ethersproject/networks": { + "version": "5.6.4", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.6.1", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/sha2": "^5.6.1" + } + }, + "@ethersproject/properties": { + "version": "5.6.0", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/providers": { + "version": "5.6.8", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" + }, + "dependencies": { + "ws": { + "version": "7.4.6", + "requires": {} + } + } + }, + "@ethersproject/random": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/sha2": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" + } + }, + "@ethersproject/signing-key": { + "version": "5.6.2", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/solidity": { + "version": "5.6.1", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/strings": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/transactions": { + "version": "5.6.2", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/units": { + "version": "5.6.1", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/wallet": { + "version": "5.6.2", + "dev": true, + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/web": { + "version": "5.6.1", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/wordlists": { + "version": "5.6.1", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "@gnosis.pm/safe-core-sdk-types": { + "version": "1.1.0", + "requires": { + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/contracts": "^5.6.0", + "@gnosis.pm/safe-deployments": "^1.12.0", + "web3-core": "^1.7.1" + } + }, + "@gnosis.pm/safe-core-sdk-utils": { + "version": "1.1.0", + "requires": { + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "web3-utils": "^1.7.1" + } + }, + "@gnosis.pm/safe-deployments": { + "version": "1.15.0", + "requires": { + "semver": "^7.3.7" + } + }, + "@gnosis.pm/safe-ethers-lib": { + "version": "1.1.0", + "dev": true, + "requires": { + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + } + }, + "@gnosis.pm/safe-web3-lib": { + "version": "1.1.0", + "dev": true, + "requires": { + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true + }, + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.0.8", + "devOptional": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "devOptional": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "devOptional": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@lerna/add": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.1.8.tgz", + "integrity": "sha512-ABplk8a5MmiT8lG1b9KHijRUwj/nOePMuezBHjJEpNeQ8Bw5w3IV/6hpdmApx/w1StBwWWf0UG42klrxXlfl/g==", + "dev": true, + "requires": { + "@lerna/bootstrap": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/filter-options": "5.1.8", + "@lerna/npm-conf": "5.1.8", + "@lerna/validation-error": "5.1.8", + "dedent": "^0.7.0", + "npm-package-arg": "^8.1.0", + "p-map": "^4.0.0", + "pacote": "^13.4.1", + "semver": "^7.3.4" + } + }, + "@lerna/bootstrap": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.1.8.tgz", + "integrity": "sha512-/QZJc6aRxi6csSR59jdqRXPFh33fbn60F1k/SWtCCELGkZub23fAPLKaO7SlMcyghN3oKlfTfVymu/NWEcptJQ==", + "dev": true, + "requires": { + "@lerna/command": "5.1.8", + "@lerna/filter-options": "5.1.8", + "@lerna/has-npm-version": "5.1.8", + "@lerna/npm-install": "5.1.8", + "@lerna/package-graph": "5.1.8", + "@lerna/pulse-till-done": "5.1.8", + "@lerna/rimraf-dir": "5.1.8", + "@lerna/run-lifecycle": "5.1.8", + "@lerna/run-topologically": "5.1.8", + "@lerna/symlink-binary": "5.1.8", + "@lerna/symlink-dependencies": "5.1.8", + "@lerna/validation-error": "5.1.8", + "@npmcli/arborist": "5.2.0", + "dedent": "^0.7.0", + "get-port": "^5.1.1", + "multimatch": "^5.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4" + } + }, + "@lerna/changed": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.1.8.tgz", + "integrity": "sha512-JA9jX9VTHrwSMRJTgLEzdyyx4zi35X0yP6fUUFuli9a0zrB4HV4IowSn1XM03H8iebbDLB0eWBbosqhYwSP8Sw==", + "dev": true, + "requires": { + "@lerna/collect-updates": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/listable": "5.1.8", + "@lerna/output": "5.1.8" + } + }, + "@lerna/check-working-tree": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.1.8.tgz", + "integrity": "sha512-3QyiV75cYt9dtg9JhUt+Aiyk44mFjlyqIIJ/XZ2Cp/Xcwws/QrNKOTs5iYFX5XWzlpTgotOHcu1MH/mY55Czlw==", + "dev": true, + "requires": { + "@lerna/collect-uncommitted": "5.1.8", + "@lerna/describe-ref": "5.1.8", + "@lerna/validation-error": "5.1.8" + } + }, + "@lerna/child-process": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.1.8.tgz", + "integrity": "sha512-P0o4Y/sdiUJ53spZpaVv53NdAcl15UAi5//W3uT2T250xQPlVROwKy11S3Wzqglh94FYdi6XUy293x1uwBlFPw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" + } + }, + "@lerna/clean": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.1.8.tgz", + "integrity": "sha512-xMExZgjan5/8ZTjJkZoLoTKY1MQOMk7W1YXslbg9BpLevBycPk041MlLauzCyO8XdOpqpVnFCg/9W66fltqmQg==", + "dev": true, + "requires": { + "@lerna/command": "5.1.8", + "@lerna/filter-options": "5.1.8", + "@lerna/prompt": "5.1.8", + "@lerna/pulse-till-done": "5.1.8", + "@lerna/rimraf-dir": "5.1.8", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1" + } + }, + "@lerna/cli": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.1.8.tgz", + "integrity": "sha512-0Ghhd9M9QvY6qZtnjTq5RHOIac2ttsW2VNFLFso8ov3YV+rJF4chLhyVaVBvLSA+5ZhwFH+xQ3/yeUx1tDO8GA==", + "dev": true, + "requires": { + "@lerna/global-options": "5.1.8", + "dedent": "^0.7.0", + "npmlog": "^6.0.2", + "yargs": "^16.2.0" + } + }, + "@lerna/collect-uncommitted": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.1.8.tgz", + "integrity": "sha512-pRsIYu82A3DxLahQI/3azoi/kjj6QSSHHAOx4y1YVefeDCaVtAm8aesNbpnyNVfJrie/1Gt5GMEpjfm/KScjlw==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "chalk": "^4.1.0", + "npmlog": "^6.0.2" + } + }, + "@lerna/collect-updates": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.1.8.tgz", + "integrity": "sha512-ZPQmYKzwDJ4T+t2fRUI/JjaCzC8Lv02kWIeSXrcIG+cf2xrbM0vK4iQMAKhagTsiWt9hrFwvtMgLp4a6+Ht8Qg==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "@lerna/describe-ref": "5.1.8", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "slash": "^3.0.0" + } + }, + "@lerna/command": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.1.8.tgz", + "integrity": "sha512-j/Q++APvkyN2t8GqOpK+4OxH1bB7OZGVWIKh0JQlwbtqH1Y06wlSyNdwpPmv8h1yO9fS1pY/xHwFbs1IicxwzA==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "@lerna/package-graph": "5.1.8", + "@lerna/project": "5.1.8", + "@lerna/validation-error": "5.1.8", + "@lerna/write-log-file": "5.1.8", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^5.0.0", + "is-ci": "^2.0.0", + "npmlog": "^6.0.2" + } + }, + "@lerna/conventional-commits": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.1.8.tgz", + "integrity": "sha512-UduSVDp/+2WlEV6ZO5s7yTzkfhYyPdEsqR6aaUtIJZe9wejcCK4Lc3BJ2BAYIOdtDArNY2CJPsz1LYvFDtPRkw==", + "dev": true, + "requires": { + "@lerna/validation-error": "5.1.8", + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-core": "^4.2.2", + "conventional-recommended-bump": "^6.1.0", + "fs-extra": "^9.1.0", + "get-stream": "^6.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "semver": "^7.3.4" + } + }, + "@lerna/create": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.1.8.tgz", + "integrity": "sha512-n9qLLeg1e0bQeuk8pA8ELEP05Ktl50e1EirdXGRqqvaXdCn41nYHo4PilUgb77/o/t3Z5N4/ic+0w8OvGVakNg==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/npm-conf": "5.1.8", + "@lerna/validation-error": "5.1.8", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "init-package-json": "^2.0.2", + "npm-package-arg": "^8.1.0", + "p-reduce": "^2.1.0", + "pacote": "^13.4.1", + "pify": "^5.0.0", + "semver": "^7.3.4", + "slash": "^3.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0", + "whatwg-url": "^8.4.0", + "yargs-parser": "20.2.4" + } + }, + "@lerna/create-symlink": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.1.8.tgz", + "integrity": "sha512-5acQITDsJ7dqywPRrF1mpTUPm/EXFfiv/xF6zX+ySUjp4h0Zhhnsm8g2jFdRPDSjIxFD0rV/5iU4X6qmflXlAg==", + "dev": true, + "requires": { + "cmd-shim": "^4.1.0", + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2" + } + }, + "@lerna/describe-ref": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.1.8.tgz", + "integrity": "sha512-/u5b2ho09icPcvPb1mlh/tPC07nSFc1cvvFjM9Yg5kfVs23vzVWeA8y0Bk5djlaaSzyHECyqviriX0aoaY47Wg==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "npmlog": "^6.0.2" + } + }, + "@lerna/diff": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.1.8.tgz", + "integrity": "sha512-BLoi6l/v8p43IkAHTkpjZ4Kq27kYK7iti6y6gYoZuljSwNj38TjgqRb2ohHezQ5c0KFAj8xHEOuZM3Ou6tGyTQ==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/validation-error": "5.1.8", + "npmlog": "^6.0.2" + } + }, + "@lerna/exec": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.1.8.tgz", + "integrity": "sha512-U+owlBKoAUfULqRz0oBtHx/I6tYQy9I7xfPP0GoaXa8lpF7esnpCxsJG8GpdzFqIS30o6a2PtyHvp4jkrQF8Zw==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/filter-options": "5.1.8", + "@lerna/profiler": "5.1.8", + "@lerna/run-topologically": "5.1.8", + "@lerna/validation-error": "5.1.8", + "p-map": "^4.0.0" + } + }, + "@lerna/filter-options": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.1.8.tgz", + "integrity": "sha512-ene6xj1BRSFgIgcVg9xABp1cCiRnqm3Uetk9InxOtECbofpSDa7cQy5lsPv6GGAgXFbT91SURQiipH9FAOP+yQ==", + "dev": true, + "requires": { + "@lerna/collect-updates": "5.1.8", + "@lerna/filter-packages": "5.1.8", + "dedent": "^0.7.0", + "npmlog": "^6.0.2" + } + }, + "@lerna/filter-packages": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.1.8.tgz", + "integrity": "sha512-2pdtZ+I2Sb+XKfUa/q8flVUyaY0hhwqFYMXll7Nut7Phb1w1TtkEXc2/N0Ac1yia6qSJB/5WrsbAcLF/ITp1vA==", + "dev": true, + "requires": { + "@lerna/validation-error": "5.1.8", + "multimatch": "^5.0.0", + "npmlog": "^6.0.2" + } + }, + "@lerna/get-npm-exec-opts": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.1.8.tgz", + "integrity": "sha512-oujoIkEDDVK2+5ooPMEPI+xGs/iwPmGJ63AZu1h7P42YU9tHKQmF5yPybF3Jn99W8+HggM6APUGiX+5oHRvKXA==", + "dev": true, + "requires": { + "npmlog": "^6.0.2" + } + }, + "@lerna/get-packed": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.1.8.tgz", + "integrity": "sha512-3vabIFlfUFQPbFnlOaDCNY4p7mufrhIFPoXxWu15JnjJsSDf9UB2a98xX43xNlxjgZLvnLai3bhCNfrKonI4Kw==", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "ssri": "^8.0.1", + "tar": "^6.1.0" + } + }, + "@lerna/github-client": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.1.8.tgz", + "integrity": "sha512-y1oweMZ9xc/htIHy42hy2FuMUR/LS3CQlslXG9PAHzl5rE1VDDjvSv61kS50ZberGfB9xmkCxqH+2LgROG9B1A==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^18.1.0", + "git-url-parse": "^12.0.0", + "npmlog": "^6.0.2" + } + }, + "@lerna/gitlab-client": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.1.8.tgz", + "integrity": "sha512-/EMKdkGnBU4ldyAQ4pXp2TKi1znvY3MiCULt8Hy42p4HhfFl/AxZYDovQYfop1NHVk29BQrGHfvlpyBNqZ2a8g==", + "dev": true, + "requires": { + "node-fetch": "^2.6.1", + "npmlog": "^6.0.2", + "whatwg-url": "^8.4.0" + } + }, + "@lerna/global-options": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.1.8.tgz", + "integrity": "sha512-VCfTilGh0O4T6Lk4DKYA5cUl1kPjwFfRUS/GSpdJx0Lf/dyDbFihrmTHefgUe9N2/nTQySDIdPk9HBr45tozWQ==", + "dev": true + }, + "@lerna/has-npm-version": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.1.8.tgz", + "integrity": "sha512-yN5j9gje2ND8zQf4tN52QDQ/yFb24o9Kasm4PZm99FzBURRIwFWCnvo3edOMaiJg0DpA660L+Kq9G0L+ZRKRZQ==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "semver": "^7.3.4" + } + }, + "@lerna/import": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.1.8.tgz", + "integrity": "sha512-m1+TEhlgS9i14T7o0/8o6FMZJ1O2PkQdpCjqUa5xdLITqvPozoMNujNgiX3ZVLg/XcFOjMtbCsYtspqtKyEsMQ==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/prompt": "5.1.8", + "@lerna/pulse-till-done": "5.1.8", + "@lerna/validation-error": "5.1.8", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "p-map-series": "^2.1.0" + } + }, + "@lerna/info": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.1.8.tgz", + "integrity": "sha512-VNCBNOrd5Q1iv1MOF++PzMrdAnTn6KTDbb5hcXHdWBRZUuOs3QOwVYGzAlTFMvwVmmlcER4z8BYyUsbxk3sIdQ==", + "dev": true, + "requires": { + "@lerna/command": "5.1.8", + "@lerna/output": "5.1.8", + "envinfo": "^7.7.4" + } + }, + "@lerna/init": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.1.8.tgz", + "integrity": "sha512-vEMnq/70u/c031/vURA4pZSxlBRAwjg7vOP7mt9M4dmKz/vkVnQ/5Ig9K0TKqC31hQg957/4m20obYEiFgC3Pw==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "@lerna/command": "5.1.8", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "write-json-file": "^4.3.0" + } + }, + "@lerna/link": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.1.8.tgz", + "integrity": "sha512-qOtZiMzB9JYyNPUlvpqTxh0Z1EmNVde8pFUIYybv+s3btrKEBPgsvvrOrob/mha3QJxnwcPDPjHt/wCHFxLruA==", + "dev": true, + "requires": { + "@lerna/command": "5.1.8", + "@lerna/package-graph": "5.1.8", + "@lerna/symlink-dependencies": "5.1.8", + "p-map": "^4.0.0", + "slash": "^3.0.0" + } + }, + "@lerna/list": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.1.8.tgz", + "integrity": "sha512-fVN9o/wKtgcOyuYwvYTg2HI6ORX2kOoBkCJ+PI/uZ/ImwLMTJ2Bf8i/Vsysl3bLFHhQFglzPZ7V1SQP/ku0Sdw==", + "dev": true, + "requires": { + "@lerna/command": "5.1.8", + "@lerna/filter-options": "5.1.8", + "@lerna/listable": "5.1.8", + "@lerna/output": "5.1.8" + } + }, + "@lerna/listable": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.1.8.tgz", + "integrity": "sha512-nQ/40cbVZLFBv8o9Dz6ivHFZhosfDTYOPm4oHNu0xdexaTXWz5bQUlM4HtOm7K0dJ1fvLEVqiQNAuFSEhARt9g==", + "dev": true, + "requires": { + "@lerna/query-graph": "5.1.8", + "chalk": "^4.1.0", + "columnify": "^1.6.0" + } + }, + "@lerna/log-packed": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.1.8.tgz", + "integrity": "sha512-alaCIzCtKV5oKyu632emda0hUQMw/BcL2U3v4ObLu90sU8P7mu6TipKRvR9OZxOLDnZGnPE7CMHSU8gsQoIasw==", + "dev": true, + "requires": { + "byte-size": "^7.0.0", + "columnify": "^1.6.0", + "has-unicode": "^2.0.1", + "npmlog": "^6.0.2" + } + }, + "@lerna/npm-conf": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.1.8.tgz", + "integrity": "sha512-d/pIcO4RwO3fXNlUbhQ6+qwULxGSiW/xcOtiETVf4ZfjaDqjkCaIxZaeZfm5gWDtII5klpQn3f2d71FCnZG5lw==", + "dev": true, + "requires": { + "config-chain": "^1.1.12", + "pify": "^5.0.0" + } + }, + "@lerna/npm-dist-tag": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.1.8.tgz", + "integrity": "sha512-vZXO0/EClOzRRHHfqB4APhZkxiJpQbsQAAFwaXQCNJE+3S+I/MD0S3iiUWrNs4QnN/8Lj1KyzUfznVDXX7AIUQ==", + "dev": true, + "requires": { + "@lerna/otplease": "5.1.8", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^6.0.2" + } + }, + "@lerna/npm-install": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.1.8.tgz", + "integrity": "sha512-AiYQyz4W1+NDeBw3qmdiiatfCtwtaGOi7zHtN1eAqheVTxEMuuYjNHt+8hu6nSpDFYtonz0NsKFvaqRJ5LbVmw==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "@lerna/get-npm-exec-opts": "5.1.8", + "fs-extra": "^9.1.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "signal-exit": "^3.0.3", + "write-pkg": "^4.0.0" + } + }, + "@lerna/npm-publish": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.1.8.tgz", + "integrity": "sha512-Gup/1d8ovc21x3spKPhFK0tIYYn8HOjnpCAg5ytINIW1QM/QcLAigY58If8uiyt+aojz6lubWrSR8/OHf9CXBw==", + "dev": true, + "requires": { + "@lerna/otplease": "5.1.8", + "@lerna/run-lifecycle": "5.1.8", + "fs-extra": "^9.1.0", + "libnpmpublish": "^4.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "read-package-json": "^3.0.0" + } + }, + "@lerna/npm-run-script": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.1.8.tgz", + "integrity": "sha512-HzvukNC+hDIR25EpYWOvIGJItd0onXqzS9Ivdtw98ZQG3Jexi2Mn18A9tDqHOKCEGO3pVYrI9ep8VWkah2Bj1w==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "@lerna/get-npm-exec-opts": "5.1.8", + "npmlog": "^6.0.2" + } + }, + "@lerna/otplease": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.1.8.tgz", + "integrity": "sha512-/OVZ7Rbs8/ft14f4i/9HEFDsxJkBSg74rMUqyqFH3fID/RL3ja9hW5bI1bENxvYgs0bp/THy4lV5V75ZcI81zQ==", + "dev": true, + "requires": { + "@lerna/prompt": "5.1.8" + } + }, + "@lerna/output": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.1.8.tgz", + "integrity": "sha512-dXsKY8X2eAdPKRKHDZTASlWn95Eav1oQX9doUXkvV3o4UwIgqOCIsU7RqSED3EAEQz6VUH0rXNb/+d3uVeAoJQ==", + "dev": true, + "requires": { + "npmlog": "^6.0.2" + } + }, + "@lerna/pack-directory": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.1.8.tgz", + "integrity": "sha512-aaH28ttS+JVimLFrVeZRWZ9Cii4GG2vkJXmQNikWBNQiFL/7S1x83NjMk4SQRdmtpYJkcQpQMZ2hDUdNxLnDCg==", + "dev": true, + "requires": { + "@lerna/get-packed": "5.1.8", + "@lerna/package": "5.1.8", + "@lerna/run-lifecycle": "5.1.8", + "@lerna/temp-write": "5.1.8", + "npm-packlist": "^2.1.4", + "npmlog": "^6.0.2", + "tar": "^6.1.0" + } + }, + "@lerna/package": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.1.8.tgz", + "integrity": "sha512-Ot+wu6XZ93tw8p9oSTJJA15TzGhVpo8VbgNhKPcI3JJjkxVq2D5L5jVeBkjQvFEQBonLibTr339uLLXyZ0RMzg==", + "dev": true, + "requires": { + "load-json-file": "^6.2.0", + "npm-package-arg": "^8.1.0", + "write-pkg": "^4.0.0" + } + }, + "@lerna/package-graph": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.1.8.tgz", + "integrity": "sha512-aGwXTwCpPfhUPiSRhdppogZjOqJPm39EBxHFDa1E0+/Qaig5avJs4hI6OrPLyjsTywAswtCMOArvD1QZqxwvrQ==", + "dev": true, + "requires": { + "@lerna/prerelease-id-from-version": "5.1.8", + "@lerna/validation-error": "5.1.8", + "npm-package-arg": "^8.1.0", + "npmlog": "^6.0.2", + "semver": "^7.3.4" + } + }, + "@lerna/prerelease-id-from-version": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.1.8.tgz", + "integrity": "sha512-wfWv/8lHSk2/pl4FjopbDelFSLCz9s6J9AY5o7Sju9HtD9QUXcQHaXnEP1Rum9/rJZ8vWdFURcp9kzz8nxQ1Ow==", + "dev": true, + "requires": { + "semver": "^7.3.4" + } + }, + "@lerna/profiler": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.1.8.tgz", + "integrity": "sha512-vpAFN85BvMHfIGA53IcwaUnS9FHAismEnNyFCjMkzKV55mmXFZlWpZyO36ESdSQRWCo5/25f3Ln0Y6YubY3Dvw==", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "upath": "^2.0.1" + } + }, + "@lerna/project": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.1.8.tgz", + "integrity": "sha512-zTFp91kmyJ0VHBmNXEArVrMSZVxnBJ7pHTt8C7RY91WSZhw8XDNumqMHDM+kEM1z/AtDBAAAGqBE3sjk5ONDXQ==", + "dev": true, + "requires": { + "@lerna/package": "5.1.8", + "@lerna/validation-error": "5.1.8", + "cosmiconfig": "^7.0.0", + "dedent": "^0.7.0", + "dot-prop": "^6.0.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.2", + "load-json-file": "^6.2.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "resolve-from": "^5.0.0", + "write-json-file": "^4.3.0" + } + }, + "@lerna/prompt": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.1.8.tgz", + "integrity": "sha512-Cmq0FV/vyCHu00kySxXMfuPvutsi8qoME2/nFcICIktvDqxXr5aSFY8QqB123awNCbpb4xcHykjFnEj/RNdb2Q==", + "dev": true, + "requires": { + "inquirer": "^7.3.3", + "npmlog": "^6.0.2" + } + }, + "@lerna/publish": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.1.8.tgz", + "integrity": "sha512-Q88WxXVNAh/ZWj7vYG83RZUfQyQlJMg7tDhsVTvZzy3VpkkCPtmJXZfX+g4RmE0PNyjsXx9QLYAOZnOB613WyA==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "5.1.8", + "@lerna/child-process": "5.1.8", + "@lerna/collect-updates": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/describe-ref": "5.1.8", + "@lerna/log-packed": "5.1.8", + "@lerna/npm-conf": "5.1.8", + "@lerna/npm-dist-tag": "5.1.8", + "@lerna/npm-publish": "5.1.8", + "@lerna/otplease": "5.1.8", + "@lerna/output": "5.1.8", + "@lerna/pack-directory": "5.1.8", + "@lerna/prerelease-id-from-version": "5.1.8", + "@lerna/prompt": "5.1.8", + "@lerna/pulse-till-done": "5.1.8", + "@lerna/run-lifecycle": "5.1.8", + "@lerna/run-topologically": "5.1.8", + "@lerna/validation-error": "5.1.8", + "@lerna/version": "5.1.8", + "fs-extra": "^9.1.0", + "libnpmaccess": "^4.0.1", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "pacote": "^13.4.1", + "semver": "^7.3.4" + } + }, + "@lerna/pulse-till-done": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.1.8.tgz", + "integrity": "sha512-KsyOazHG6wnjfdJhIdhTaTNwhj8Np/aPPei/ac9WzcuzgLS/uCs1IVFFIYBv5JdTmyVBKmguSZxdYjk7JzKBew==", + "dev": true, + "requires": { + "npmlog": "^6.0.2" + } + }, + "@lerna/query-graph": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.1.8.tgz", + "integrity": "sha512-+p+bjPI403Hwv1djTS5aJe7DtPWIDw0a427BE68h1mmrPc9oTe3GG+0lingbfGR8woA2rOmjytgK2jeErOryPg==", + "dev": true, + "requires": { + "@lerna/package-graph": "5.1.8" + } + }, + "@lerna/resolve-symlink": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.1.8.tgz", + "integrity": "sha512-OJa8ct4Oo2BcD95FmJqkc5qZMepaQK5RZAWoTqEXG/13Gs0mPc0fZGIhnnpTqtm3mgNhlT7ypCHG42I7hKiSeg==", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "read-cmd-shim": "^2.0.0" + } + }, + "@lerna/rimraf-dir": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.1.8.tgz", + "integrity": "sha512-3pT1X8kzW8xHUuAmRgzSKAF+/H1h1eSWq5+ACzeTWnvgqE7++0URee7TXwVCP/5FZPTZIzIclQCh4G0WD9Jfjg==", + "dev": true, + "requires": { + "@lerna/child-process": "5.1.8", + "npmlog": "^6.0.2", + "path-exists": "^4.0.0", + "rimraf": "^3.0.2" + } + }, + "@lerna/run": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.1.8.tgz", + "integrity": "sha512-E5mI3FswVN9zQ3bCYUQxxPlLL400vnKpwLSzzRNFy//TR8Geu0LeR6NY+Jf0jklsKxwWGMJgqL6VqPqxDaNtdw==", + "dev": true, + "requires": { + "@lerna/command": "5.1.8", + "@lerna/filter-options": "5.1.8", + "@lerna/npm-run-script": "5.1.8", + "@lerna/output": "5.1.8", + "@lerna/profiler": "5.1.8", + "@lerna/run-topologically": "5.1.8", + "@lerna/timer": "5.1.8", + "@lerna/validation-error": "5.1.8", + "p-map": "^4.0.0" + } + }, + "@lerna/run-lifecycle": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.1.8.tgz", + "integrity": "sha512-5rRpovujhLJufKRzMp5sl2BIIqrPeoXxjniQbzkpSxZ2vnD+bE9xOoaciHQxOsmXfXhza0C+k3xYMM5+B/bVzg==", + "dev": true, + "requires": { + "@lerna/npm-conf": "5.1.8", + "@npmcli/run-script": "^3.0.2", + "npmlog": "^6.0.2" + } + }, + "@lerna/run-topologically": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.1.8.tgz", + "integrity": "sha512-isuulfBdNsrgV2QF/HwCKCecfR9mPEU9N4Nf8n9nQQgakwOscoDlwGp2xv27pvcQKI52q/o/ISEjz3JeoEQiOA==", + "dev": true, + "requires": { + "@lerna/query-graph": "5.1.8", + "p-queue": "^6.6.2" + } + }, + "@lerna/symlink-binary": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.1.8.tgz", + "integrity": "sha512-s7VfKNJZnWvTKZ7KR8Yxh1rYhE/ARMioD5axyu3FleS3Xsdla2M5sQsLouCrdfM3doTO8lMxPVvVSFmL7q0KOA==", + "dev": true, + "requires": { + "@lerna/create-symlink": "5.1.8", + "@lerna/package": "5.1.8", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" + } + }, + "@lerna/symlink-dependencies": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.1.8.tgz", + "integrity": "sha512-U5diiaKdWUlvoFMh3sYIEESBLa8Z3Q/EpkLl5o4YkcbPBjFHJFpmoqCGomwL9sf9HQUV2S9Lt9szJT8qgQm86Q==", + "dev": true, + "requires": { + "@lerna/create-symlink": "5.1.8", + "@lerna/resolve-symlink": "5.1.8", + "@lerna/symlink-binary": "5.1.8", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0" + } + }, + "@lerna/temp-write": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.1.8.tgz", + "integrity": "sha512-4/guYB5XotugyM8P/F1z6b+hNlSCe/QuZsmiZwgXOw2lmYnkSzLWDVjqsdZtNYqojK0lioxcPjZiL5qnEkk1PQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^8.3.2" + } + }, + "@lerna/timer": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.1.8.tgz", + "integrity": "sha512-Ua4bw2YOO3U+sFujE+MsUG+lllU0X7u6PCTj1QKe0QlR0zr2gCa0pcwjUQPdNfxnpJpPY+hdbfTUv2viDloaiA==", + "dev": true + }, + "@lerna/validation-error": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.1.8.tgz", + "integrity": "sha512-n+IiaxN2b08ZMYnezsmwL6rXB15/VvweusC04GMh1XtWunnMzSg9JDM7y6bw2vfpBBQx6cBFhLKSpD2Fcq5D5Q==", + "dev": true, + "requires": { + "npmlog": "^6.0.2" + } + }, + "@lerna/version": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.1.8.tgz", + "integrity": "sha512-3f4P7KjIs6Gn2iaGkA5EASE9izZeDKtEzE8i2DE7YfVdw/P+EwFfKv2mKBXGbckYw42YO1tL6aD2QH0C8XbwlA==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "5.1.8", + "@lerna/child-process": "5.1.8", + "@lerna/collect-updates": "5.1.8", + "@lerna/command": "5.1.8", + "@lerna/conventional-commits": "5.1.8", + "@lerna/github-client": "5.1.8", + "@lerna/gitlab-client": "5.1.8", + "@lerna/output": "5.1.8", + "@lerna/prerelease-id-from-version": "5.1.8", + "@lerna/prompt": "5.1.8", + "@lerna/run-lifecycle": "5.1.8", + "@lerna/run-topologically": "5.1.8", + "@lerna/temp-write": "5.1.8", + "@lerna/validation-error": "5.1.8", + "chalk": "^4.1.0", + "dedent": "^0.7.0", + "load-json-file": "^6.2.0", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "p-reduce": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4", + "slash": "^3.0.0", + "write-json-file": "^4.3.0" + } + }, + "@lerna/write-log-file": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.1.8.tgz", + "integrity": "sha512-B+shMH3TpzA7Q5GGbuNkOmdPQdD1LXRFj7R17LINkn82PhP9CUgubwYuiVzrLa16ADi0V5Ad76pqtHi/6kD0nA==", + "dev": true, + "requires": { + "npmlog": "^6.0.2", + "write-file-atomic": "^3.0.3" + } + }, + "@metamask/eth-sig-util": { + "version": "4.0.1", + "requires": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0" + }, + "ethereumjs-util": { + "version": "6.2.1", + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nomiclabs/hardhat-ethers": { + "version": "2.1.0", + "dev": true, + "requires": {} + }, + "@nomiclabs/hardhat-waffle": { + "version": "2.0.3", + "dev": true, + "requires": { + "@types/sinon-chai": "^3.2.3", + "@types/web3": "1.0.19" + } + }, + "@nomiclabs/hardhat-web3": { + "version": "2.0.0", + "dev": true, + "requires": { + "@types/bignumber.js": "^5.0.0" + } + }, + "@npmcli/arborist": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.2.0.tgz", + "integrity": "sha512-zWV7scFGL0SmpvfQyIWnMFbU/0YgtMNyvJiJwR98kyjUSntJGWFFR0O600d5W+TrDcTg0GyDbY+HdzGEg+GXLg==", + "dev": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^3.0.0", + "bin-links": "^3.0.0", + "cacache": "^16.0.6", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.0.5", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", + "walk-up-path": "^1.0.0" + }, + "dependencies": { + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "lru-cache": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", + "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "dev": true + }, + "make-fetch-happen": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", + "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + } + }, + "minipass-fetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + } + }, + "npm-registry-fetch": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", + "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", + "dev": true, + "requires": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + } + } + }, + "@npmcli/ci-detect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz", + "integrity": "sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q==", + "dev": true + }, + "@npmcli/fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", + "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", + "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "dev": true + } + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/map-workspaces": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz", + "integrity": "sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q==", + "dev": true, + "requires": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@npmcli/metavuln-calculator": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", + "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", + "dev": true, + "requires": { + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/name-from-folder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", + "dev": true + }, + "@npmcli/node-gyp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", + "dev": true + }, + "@npmcli/package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", + "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.1" + } + }, + "@npmcli/promise-spawn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz", + "integrity": "sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^8.4.1", + "read-package-json-fast": "^2.0.3" + } + }, + "@nrwl/cli": { + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.4.2.tgz", + "integrity": "sha512-JNV4kP9goZD4BlTQGKdKhCRc1bhiWYp1TaDJHdk4ZfhiLt1NzXNxxgc/eX2obFZ3Hw+KdM/gM5F7KfWBbtSGSw==", + "dev": true, + "requires": { + "nx": "14.4.2" + } + }, + "@nrwl/tao": { + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.4.2.tgz", + "integrity": "sha512-Ygw3skKZfFhi4MBHZKQ8A67pDQxeyDdY78tFWViMN0SEn9ExL41Q8V9aSMfir8VZYGca6ZOXX5MRhbeHdcgMLQ==", + "dev": true, + "requires": { + "nx": "14.4.2" + } + }, + "@octokit/auth-token": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", + "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", + "dev": true, + "peer": true, + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/core": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", + "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", + "dev": true, + "peer": true, + "requires": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", + "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", + "dev": true, + "peer": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/graphql": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", + "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", + "dev": true, + "peer": true, + "requires": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "12.8.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.8.0.tgz", + "integrity": "sha512-ydcKLs2KKcxlhpdWLzJxEBDEk/U5MUeqtqkXlrtAUXXFPs6vLl1PEGghFC/BbpleosB7iXs0Z4P2DGe7ZT5ZNg==", + "dev": true + }, + "@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "2.21.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.2.tgz", + "integrity": "sha512-S24H0a6bBVreJtoTaRHT/gnVASbOHVTRMOVIqd9zrJBP3JozsxJB56TDuTUmd1xLI4/rAE2HNmThvVKtIdLLEw==", + "dev": true, + "requires": { + "@octokit/types": "^6.39.0" + } + }, + "@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "dev": true, + "requires": {} + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", + "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", + "dev": true, + "requires": { + "@octokit/types": "^6.39.0", + "deprecation": "^2.3.1" + } + }, + "@octokit/request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.1.0.tgz", + "integrity": "sha512-36V+sP4bJli31TRq8sea3d/Q1XGgZ9cnqpsegkLCnvpu+hoYephSkxGlWg4KB6dyUM1IWPXVrLFOKYzObQ+MZg==", + "dev": true, + "peer": true, + "requires": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", + "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", + "dev": true, + "peer": true, + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/rest": { + "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "dev": true, + "requires": { + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + }, + "dependencies": { + "@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/core": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", + "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "dev": true, + "requires": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.3", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "dev": true, + "requires": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "dev": true, + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + } + } + }, + "@octokit/types": { + "version": "6.39.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.39.0.tgz", + "integrity": "sha512-Mq4N9sOAYCitTsBtDdRVrBE80lIrMBhL9Jbrw0d+j96BAzlq4V+GLHFJbHokEsVvO/9tQupQdoFdgVYhD2C8UQ==", + "dev": true, + "requires": { + "@octokit/openapi-types": "^12.7.0" + } + }, + "@openzeppelin/contracts": { + "version": "4.7.0" + }, + "@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "dev": true, + "requires": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + } + }, + "@resolver-engine/core": { + "version": "0.3.3", + "dev": true, + "peer": true, + "requires": { + "debug": "^3.1.0", + "is-url": "^1.2.4", + "request": "^2.85.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@resolver-engine/fs": { + "version": "0.3.3", + "dev": true, + "peer": true, + "requires": { + "@resolver-engine/core": "^0.3.3", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@resolver-engine/imports": { + "version": "0.3.3", + "dev": true, + "peer": true, + "requires": { + "@resolver-engine/core": "^0.3.3", + "debug": "^3.1.0", + "hosted-git-info": "^2.6.0", + "path-browserify": "^1.0.0", + "url": "^0.11.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "dev": true, + "peer": true + } + } + }, + "@resolver-engine/imports-fs": { + "version": "0.3.3", + "dev": true, + "peer": true, + "requires": { + "@resolver-engine/fs": "^0.3.3", + "@resolver-engine/imports": "^0.3.3", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@sentry/core": { + "version": "5.30.0", + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1" + } + } + }, + "@sentry/hub": { + "version": "5.30.0", + "requires": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1" + } + } + }, + "@sentry/minimal": { + "version": "5.30.0", + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1" + } + } + }, + "@sentry/node": { + "version": "5.30.0", + "requires": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1" + } + } + }, + "@sentry/tracing": { + "version": "5.30.0", + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1" + } + } + }, + "@sentry/types": { + "version": "5.30.0" + }, + "@sentry/utils": { + "version": "5.30.0", + "requires": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1" + } + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "dev": true, + "peer": true + }, + "@solidity-parser/parser": { + "version": "0.14.2", + "requires": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "dev": true, + "peer": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@tsconfig/node10": { + "version": "1.0.9", + "devOptional": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "devOptional": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "devOptional": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "devOptional": true + }, + "@typechain/ethers-v5": { + "version": "9.0.0", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + } + }, + "@types/abstract-leveldown": { + "version": "7.2.0" + }, + "@types/bignumber.js": { + "version": "5.0.0", + "dev": true, + "requires": { + "bignumber.js": "*" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "requires": { + "@types/node": "*" + } + }, + "@types/chai": { + "version": "4.3.1", + "dev": true + }, + "@types/chai-as-promised": { + "version": "7.1.5", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/level-errors": { + "version": "3.0.0" + }, + "@types/levelup": { + "version": "4.3.3", + "requires": { + "@types/abstract-leveldown": "*", + "@types/level-errors": "*", + "@types/node": "*" + } + }, + "@types/lru-cache": { + "version": "5.1.1" + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/mkdirp": { + "version": "0.5.2", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/mocha": { + "version": "9.1.1", + "dev": true + }, + "@types/node": { + "version": "18.0.1" + }, + "@types/node-fetch": { + "version": "2.6.2", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/pbkdf2": { + "version": "3.1.0", + "requires": { + "@types/node": "*" + } + }, + "@types/prettier": { + "version": "2.6.3", + "dev": true + }, + "@types/resolve": { + "version": "0.0.8", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/secp256k1": { + "version": "4.0.3", + "requires": { + "@types/node": "*" + } + }, + "@types/sinon": { + "version": "10.0.12", + "dev": true, + "requires": { + "@types/sinonjs__fake-timers": "*" + } + }, + "@types/sinon-chai": { + "version": "3.2.8", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.2", + "dev": true + }, + "@types/underscore": { + "version": "1.11.4", + "dev": true + }, + "@types/web3": { + "version": "1.0.19", + "dev": true, + "requires": { + "@types/bn.js": "*", + "@types/underscore": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.30.6", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.6", + "@typescript-eslint/type-utils": "5.30.6", + "@typescript-eslint/utils": "5.30.6", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.30.6", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.6", + "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/typescript-estree": "5.30.6", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.30.6", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/visitor-keys": "5.30.6" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.30.6", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.30.6", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.30.6", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.30.6", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/visitor-keys": "5.30.6", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.30.6", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.30.6", + "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/typescript-estree": "5.30.6", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.30.6", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.6", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2" + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "abstract-leveldown": { + "version": "6.3.0", + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "accepts": { + "version": "1.3.8", + "dev": true, + "peer": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.7.1", + "devOptional": true + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "devOptional": true + }, + "add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true + }, + "adm-zip": { + "version": "0.4.16" + }, + "aes-js": { + "version": "3.0.0", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.3" + }, + "ansi-escapes": { + "version": "4.3.2", + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3" + } + } + }, + "ansi-regex": { + "version": "5.0.1" + }, + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "antlr4ts": { + "version": "0.5.0-alpha.4" + }, + "anymatch": { + "version": "3.1.2", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", + "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "arg": { + "version": "4.1.3", + "devOptional": true + }, + "argparse": { + "version": "2.0.1" + }, + "array-back": { + "version": "3.1.0", + "dev": true + }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "dev": true, + "peer": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "dev": true, + "peer": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true, + "peer": true + } + } + }, + "assert-plus": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "assertion-error": { + "version": "1.1.0", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "dev": true + }, + "async": { + "version": "2.6.4", + "requires": { + "lodash": "^4.17.14" + } + }, + "async-eventemitter": { + "version": "0.2.4", + "requires": { + "async": "^2.4.0" + } + }, + "async-limiter": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "asynckit": { + "version": "0.4.0", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5" + }, + "aws-sign2": { + "version": "0.7.0", + "dev": true, + "peer": true + }, + "aws4": { + "version": "1.11.0", + "dev": true, + "peer": true + }, + "balanced-match": { + "version": "1.0.2" + }, + "base-x": { + "version": "3.0.9", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "tweetnacl": "^0.14.3" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "dev": true, + "peer": true + } + } + }, + "bech32": { + "version": "1.1.4" + }, + "before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "dev": true + }, + "bignumber.js": { + "version": "9.0.2" + }, + "bin-links": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", + "integrity": "sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ==", + "dev": true, + "requires": { + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0", + "read-cmd-shim": "^3.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^4.0.0" + }, + "dependencies": { + "cmd-shim": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", + "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", + "dev": true, + "requires": { + "mkdirp-infer-owner": "^2.0.0" + } + }, + "read-cmd-shim": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", + "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", + "dev": true + }, + "write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + } + } + }, + "binary-extensions": { + "version": "2.2.0" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "blakejs": { + "version": "1.2.1" + }, + "bluebird": { + "version": "3.7.2", + "dev": true, + "peer": true + }, + "bn.js": { + "version": "5.2.1" + }, + "body-parser": { + "version": "1.20.0", + "dev": true, + "peer": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "qs": { + "version": "6.10.3", + "dev": true, + "peer": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0" + }, + "browser-stdout": { + "version": "1.3.1" + }, + "browserify-aes": { + "version": "1.2.0", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "bs58": { + "version": "4.0.1", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "5.7.1", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2" + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "dev": true, + "peer": true + }, + "buffer-xor": { + "version": "1.0.3" + }, + "bufferutil": { + "version": "4.0.6", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true + }, + "byte-size": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", + "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", + "dev": true + }, + "bytes": { + "version": "3.1.2" + }, + "cacache": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", + "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "lru-cache": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", + "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "dev": true + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + } + } + }, + "cacheable-request": { + "version": "6.1.0", + "dev": true, + "peer": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "dev": true, + "peer": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "normalize-url": { + "version": "4.5.1", + "dev": true, + "peer": true + } + } + }, + "call-bind": { + "version": "1.0.2", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caseless": { + "version": "0.12.0", + "dev": true, + "peer": true + }, + "chai": { + "version": "4.3.6", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chai-as-promised": { + "version": "7.1.1", + "dev": true, + "requires": { + "check-error": "^1.0.2" + } + }, + "chalk": { + "version": "4.1.0", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "ci-info": { + "version": "2.0.0" + }, + "cids": { + "version": "0.7.5", + "dev": true, + "peer": true, + "requires": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "dependencies": { + "multicodec": { + "version": "1.0.4", + "dev": true, + "peer": true, + "requires": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + } + } + }, + "cipher-base": { + "version": "1.0.4", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-is": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "clean-stack": { + "version": "2.2.0" + }, + "cli-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true + }, + "cli-truncate": { + "version": "3.1.0", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "clone-response": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "cmd-shim": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", + "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "dev": true, + "requires": { + "mkdirp-infer-owner": "^2.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colorette": { + "version": "2.0.19", + "dev": true + }, + "columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-exists": { + "version": "1.2.9" + }, + "command-line-args": { + "version": "5.2.1", + "dev": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-usage": { + "version": "6.1.3", + "dev": true, + "requires": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-back": { + "version": "4.0.2", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "typical": { + "version": "5.2.0", + "dev": true + } + } + }, + "commander": { + "version": "3.0.2" + }, + "common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + } + } + }, + "concat-map": { + "version": "0.0.1" + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-hash": { + "version": "2.5.2", + "dev": true, + "peer": true, + "requires": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "content-type": { + "version": "1.0.4", + "dev": true, + "peer": true + }, + "conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-changelog-core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "dev": true, + "requires": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + } + }, + "conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true + }, + "conventional-changelog-writer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "dev": true, + "requires": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, + "requires": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + } + }, + "cookie": { + "version": "0.4.2" + }, + "cookie-signature": { + "version": "1.0.6", + "dev": true, + "peer": true + }, + "cookiejar": { + "version": "2.1.3" + }, + "core-js-pure": { + "version": "3.23.3" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cors": { + "version": "2.8.5", + "dev": true, + "peer": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "crc-32": { + "version": "1.2.2" + }, + "create-ecdh": { + "version": "4.0.4", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true, + "peer": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-require": { + "version": "1.1.1", + "devOptional": true + }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "dev": true, + "peer": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "d": { + "version": "1.0.1", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "requires": { + "ms": "2.1.2" + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + } + } + }, + "decode-uri-component": { + "version": "0.2.0", + "dev": true, + "peer": true + }, + "decompress-response": { + "version": "3.3.0", + "dev": true, + "peer": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "dev": true, + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + } + } + }, + "defer-to-connect": { + "version": "1.1.3", + "dev": true, + "peer": true + }, + "deferred-leveldown": { + "version": "5.3.0", + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + } + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.2.0", + "dev": true, + "peer": true + }, + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "diff": { + "version": "5.0.0" + }, + "diffie-hellman": { + "version": "5.0.3", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true, + "peer": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-walk": { + "version": "0.1.2", + "dev": true, + "peer": true + }, + "dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexer3": { + "version": "0.1.5", + "dev": true, + "peer": true + }, + "eastasianwidth": { + "version": "0.2.0", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "peer": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "dev": true, + "peer": true + }, + "elliptic": { + "version": "6.5.4", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0" + } + } + }, + "emoji-regex": { + "version": "8.0.0" + }, + "encodeurl": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "encoding": { + "version": "0.1.13", + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "encoding-down": { + "version": "6.3.0", + "requires": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + } + }, + "end-of-stream": { + "version": "1.4.4", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "env-paths": { + "version": "2.2.1" + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.61", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3", + "dev": true, + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "eslint": { + "version": "8.19.0", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "dev": true + }, + "eslint-scope": { + "version": "7.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "dev": true, + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "dev": true + }, + "espree": { + "version": "9.3.2", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "etag": { + "version": "1.8.1", + "dev": true, + "peer": true + }, + "eth-ens-namehash": { + "version": "2.0.8", + "dev": true, + "peer": true, + "requires": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + }, + "dependencies": { + "js-sha3": { + "version": "0.5.7", + "dev": true, + "peer": true + } + } + }, + "eth-lib": { + "version": "0.1.29", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true, + "peer": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + }, + "ws": { + "version": "3.3.3", + "dev": true, + "peer": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereum-waffle": { + "version": "3.4.4", + "dev": true, + "peer": true, + "requires": { + "@ethereum-waffle/chai": "^3.4.4", + "@ethereum-waffle/compiler": "^3.4.4", + "@ethereum-waffle/mock-contract": "^3.4.4", + "@ethereum-waffle/provider": "^3.4.4", + "ethers": "^5.0.1" + } + }, + "ethereumjs-abi": { + "version": "0.6.8", + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0" + }, + "ethereumjs-util": { + "version": "6.2.1", + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "ethers": { + "version": "5.6.9", + "dev": true, + "requires": { + "@ethersproject/abi": "5.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6" + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "event-target-shim": { + "version": "5.0.1" + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "express": { + "version": "4.18.1", + "dev": true, + "peer": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "cookie": { + "version": "0.5.0", + "dev": true, + "peer": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "ms": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "qs": { + "version": "6.10.3", + "dev": true, + "peer": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "ext": { + "version": "1.6.0", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0" + } + } + }, + "extend": { + "version": "3.0.2", + "dev": true, + "peer": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "dev": true, + "peer": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@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": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "dev": true, + "peer": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true, + "peer": true + } + } + }, + "find-replace": { + "version": "3.0.0", + "dev": true, + "requires": { + "array-back": "^3.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "find-yarn-workspace-root": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "micromatch": "^4.0.2" + } + }, + "flat": { + "version": "5.0.2" + }, + "flat-cache": { + "version": "3.0.4", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "dev": true + }, + "follow-redirects": { + "version": "1.15.1" + }, + "for-each": { + "version": "0.3.3", + "requires": { + "is-callable": "^1.1.3" + } + }, + "forever-agent": { + "version": "0.6.1", + "dev": true, + "peer": true + }, + "form-data": { + "version": "3.0.1", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "dev": true, + "peer": true + }, + "fp-ts": { + "version": "1.19.3" + }, + "fresh": { + "version": "0.5.2", + "dev": true, + "peer": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0" + }, + "fsevents": { + "version": "2.3.2", + "optional": true + }, + "function-bind": { + "version": "1.1.1" + }, + "function.prototype.name": { + "version": "1.1.5", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1" + }, + "functions-have-names": { + "version": "1.2.3" + }, + "ganache-core": { + "version": "2.13.2", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "3.0.0", + "async": "2.6.2", + "bip39": "2.5.0", + "cachedown": "1.0.0", + "clone": "2.1.2", + "debug": "3.2.6", + "encoding-down": "5.0.4", + "eth-sig-util": "3.0.0", + "ethereumjs-abi": "0.6.8", + "ethereumjs-account": "3.0.0", + "ethereumjs-block": "2.2.2", + "ethereumjs-common": "1.5.0", + "ethereumjs-tx": "2.1.2", + "ethereumjs-util": "6.2.1", + "ethereumjs-vm": "4.2.0", + "ethereumjs-wallet": "0.6.5", + "heap": "0.2.6", + "keccak": "3.0.1", + "level-sublevel": "6.6.4", + "levelup": "3.1.1", + "lodash": "4.17.20", + "lru-cache": "5.1.1", + "merkle-patricia-tree": "3.0.0", + "patch-package": "6.2.2", + "seedrandom": "3.0.1", + "source-map-support": "0.5.12", + "tmp": "0.1.0", + "web3": "1.2.11", + "web3-provider-engine": "14.2.1", + "websocket": "1.0.32" + }, + "dependencies": { + "@ethersproject/abi": { + "version": "5.0.0-beta.153", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/address": ">=5.0.0-beta.128", + "@ethersproject/bignumber": ">=5.0.0-beta.130", + "@ethersproject/bytes": ">=5.0.0-beta.129", + "@ethersproject/constants": ">=5.0.0-beta.128", + "@ethersproject/hash": ">=5.0.0-beta.128", + "@ethersproject/keccak256": ">=5.0.0-beta.127", + "@ethersproject/logger": ">=5.0.0-beta.129", + "@ethersproject/properties": ">=5.0.0-beta.131", + "@ethersproject/strings": ">=5.0.0-beta.130" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.0.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/networks": "^5.0.7", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/transactions": "^5.0.9", + "@ethersproject/web": "^5.0.12" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.0.10", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/abstract-provider": "^5.0.8", + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7" + } + }, + "@ethersproject/address": { + "version": "5.0.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/keccak256": "^5.0.7", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/rlp": "^5.0.7" + } + }, + "@ethersproject/base64": { + "version": "5.0.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bytes": "^5.0.9" + } + }, + "@ethersproject/bignumber": { + "version": "5.0.13", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "bn.js": "^4.4.0" + } + }, + "@ethersproject/bytes": { + "version": "5.0.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/logger": "^5.0.8" + } + }, + "@ethersproject/constants": { + "version": "5.0.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bignumber": "^5.0.13" + } + }, + "@ethersproject/hash": { + "version": "5.0.10", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/abstract-signer": "^5.0.10", + "@ethersproject/address": "^5.0.9", + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/keccak256": "^5.0.7", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/strings": "^5.0.8" + } + }, + "@ethersproject/keccak256": { + "version": "5.0.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bytes": "^5.0.9", + "js-sha3": "0.5.7" + } + }, + "@ethersproject/logger": { + "version": "5.0.8", + "dev": true, + "optional": true, + "peer": true + }, + "@ethersproject/networks": { + "version": "5.0.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/logger": "^5.0.8" + } + }, + "@ethersproject/properties": { + "version": "5.0.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/logger": "^5.0.8" + } + }, + "@ethersproject/rlp": { + "version": "5.0.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8" + } + }, + "@ethersproject/signing-key": { + "version": "5.0.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "elliptic": "6.5.3" + } + }, + "@ethersproject/strings": { + "version": "5.0.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/constants": "^5.0.8", + "@ethersproject/logger": "^5.0.8" + } + }, + "@ethersproject/transactions": { + "version": "5.0.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/address": "^5.0.9", + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/constants": "^5.0.8", + "@ethersproject/keccak256": "^5.0.7", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/rlp": "^5.0.7", + "@ethersproject/signing-key": "^5.0.8" + } + }, + "@ethersproject/web": { + "version": "5.0.12", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/base64": "^5.0.7", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/strings": "^5.0.8" + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "dev": true, + "optional": true, + "peer": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/bn.js": { + "version": "4.11.6", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "14.14.20", + "dev": true, + "peer": true + }, + "@types/pbkdf2": { + "version": "3.1.0", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@types/secp256k1": { + "version": "4.0.1", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "abstract-leveldown": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "accepts": { + "version": "1.3.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "aes-js": { + "version": "3.1.2", + "dev": true, + "optional": true, + "peer": true + }, + "ajv": { + "version": "6.12.6", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "arr-diff": { + "version": "4.0.0", + "dev": true, + "peer": true + }, + "arr-flatten": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "arr-union": { + "version": "3.1.0", + "dev": true, + "peer": true + }, + "array-flatten": { + "version": "1.1.1", + "dev": true, + "optional": true, + "peer": true + }, + "array-unique": { + "version": "0.3.2", + "dev": true, + "peer": true + }, + "asn1": { + "version": "0.2.4", + "dev": true, + "peer": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "assign-symbols": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "async": { + "version": "2.6.2", + "dev": true, + "peer": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "async-eventemitter": { + "version": "0.2.4", + "dev": true, + "peer": true, + "requires": { + "async": "^2.4.0" + } + }, + "async-limiter": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "asynckit": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "atob": { + "version": "2.1.2", + "dev": true, + "peer": true + }, + "aws-sign2": { + "version": "0.7.0", + "dev": true, + "peer": true + }, + "aws4": { + "version": "1.11.0", + "dev": true, + "peer": true + }, + "babel-code-frame": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true, + "peer": true + }, + "ansi-styles": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "chalk": { + "version": "1.1.3", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "dev": true, + "peer": true + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "peer": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "dev": true, + "peer": true + } + } + }, + "babel-core": { + "version": "6.26.3", + "dev": true, + "peer": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "json5": { + "version": "0.5.1", + "dev": true, + "peer": true + }, + "ms": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "slash": { + "version": "1.0.0", + "dev": true, + "peer": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "dev": true, + "peer": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "dev": true, + "peer": true + } + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helpers": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "dev": true, + "peer": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "dev": true, + "peer": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "dev": true, + "peer": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "dev": true, + "peer": true, + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "regenerator-transform": "^0.10.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-preset-env": { + "version": "1.7.0", + "dev": true, + "peer": true, + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "dev": true, + "peer": true + } + } + }, + "babel-register": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + }, + "dependencies": { + "source-map-support": { + "version": "0.4.18", + "dev": true, + "peer": true, + "requires": { + "source-map": "^0.5.6" + } + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "9.18.0", + "dev": true, + "peer": true + }, + "ms": { + "version": "2.0.0", + "dev": true, + "peer": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "dev": true, + "peer": true + } + } + }, + "babelify": { + "version": "7.3.0", + "dev": true, + "peer": true, + "requires": { + "babel-core": "^6.0.14", + "object-assign": "^4.0.0" + } + }, + "babylon": { + "version": "6.18.0", + "dev": true, + "peer": true + }, + "backoff": { + "version": "2.5.0", + "dev": true, + "peer": true, + "requires": { + "precond": "0.2" + } + }, + "balanced-match": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "base": { + "version": "0.11.2", + "dev": true, + "peer": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "base-x": { + "version": "3.0.8", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "dev": true, + "peer": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "tweetnacl": "^0.14.3" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "dev": true, + "peer": true + } + } + }, + "bignumber.js": { + "version": "9.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "bip39": { + "version": "2.5.0", + "dev": true, + "peer": true, + "requires": { + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1", + "safe-buffer": "^5.0.1", + "unorm": "^1.3.3" + } + }, + "blakejs": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "bluebird": { + "version": "3.7.2", + "dev": true, + "optional": true, + "peer": true + }, + "bn.js": { + "version": "4.11.9", + "dev": true, + "peer": true + }, + "body-parser": { + "version": "1.19.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "qs": { + "version": "6.7.0", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "browserify-aes": { + "version": "1.2.0", + "dev": true, + "peer": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "5.1.3", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "browserify-sign": { + "version": "4.2.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "bn.js": { + "version": "5.1.3", + "dev": true, + "optional": true, + "peer": true + }, + "readable-stream": { + "version": "3.6.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "browserslist": { + "version": "3.2.8", + "dev": true, + "peer": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, + "bs58": { + "version": "4.0.1", + "dev": true, + "peer": true, + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "5.7.1", + "dev": true, + "peer": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.1", + "dev": true, + "peer": true + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "dev": true, + "optional": true, + "peer": true + }, + "buffer-xor": { + "version": "1.0.3", + "dev": true, + "peer": true + }, + "bufferutil": { + "version": "4.0.3", + "dev": true, + "peer": true, + "requires": { + "node-gyp-build": "^4.2.0" + } + }, + "bytes": { + "version": "3.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "bytewise": { + "version": "1.1.0", + "dev": true, + "peer": true, + "requires": { + "bytewise-core": "^1.2.2", + "typewise": "^1.0.3" + } + }, + "bytewise-core": { + "version": "1.2.3", + "dev": true, + "peer": true, + "requires": { + "typewise-core": "^1.2" + } + }, + "cache-base": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cacheable-request": { + "version": "6.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "2.0.0", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "cachedown": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "^2.4.1", + "lru-cache": "^3.2.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "lru-cache": { + "version": "3.2.0", + "dev": true, + "peer": true, + "requires": { + "pseudomap": "^1.0.1" + } + } + } + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caniuse-lite": { + "version": "1.0.30001174", + "dev": true, + "peer": true + }, + "caseless": { + "version": "0.12.0", + "dev": true, + "peer": true + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "checkpoint-store": { + "version": "1.1.0", + "dev": true, + "peer": true, + "requires": { + "functional-red-black-tree": "^1.0.1" + } + }, + "chownr": { + "version": "1.1.4", + "dev": true, + "optional": true, + "peer": true + }, + "ci-info": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "cids": { + "version": "0.7.5", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "dependencies": { + "multicodec": { + "version": "1.0.4", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + } + } + }, + "cipher-base": { + "version": "1.0.4", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-is": { + "version": "1.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "class-utils": { + "version": "0.3.6", + "dev": true, + "peer": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "dev": true, + "peer": true + } + } + }, + "clone": { + "version": "2.1.2", + "dev": true, + "peer": true + }, + "clone-response": { + "version": "1.0.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true, + "peer": true + }, + "combined-stream": { + "version": "1.0.8", + "dev": true, + "peer": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "dev": true, + "peer": true + }, + "concat-map": { + "version": "0.0.1", + "dev": true, + "peer": true + }, + "concat-stream": { + "version": "1.6.2", + "dev": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "content-disposition": { + "version": "0.5.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "content-hash": { + "version": "2.5.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "content-type": { + "version": "1.0.4", + "dev": true, + "optional": true, + "peer": true + }, + "convert-source-map": { + "version": "1.7.0", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + } + } + }, + "cookie": { + "version": "0.4.0", + "dev": true, + "optional": true, + "peer": true + }, + "cookie-signature": { + "version": "1.0.6", + "dev": true, + "optional": true, + "peer": true + }, + "cookiejar": { + "version": "2.1.2", + "dev": true, + "optional": true, + "peer": true + }, + "copy-descriptor": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "core-js": { + "version": "2.6.12", + "dev": true, + "peer": true + }, + "core-js-pure": { + "version": "3.8.2", + "dev": true, + "peer": true + }, + "core-util-is": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "cors": { + "version": "2.8.5", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "create-ecdh": { + "version": "4.0.4", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "create-hash": { + "version": "1.2.0", + "dev": true, + "peer": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "dev": true, + "peer": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-fetch": { + "version": "2.2.3", + "dev": true, + "peer": true, + "requires": { + "node-fetch": "2.1.2", + "whatwg-fetch": "2.0.4" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "d": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.2.6", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "dev": true, + "peer": true + }, + "decompress-response": { + "version": "3.3.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-equal": { + "version": "1.1.1", + "dev": true, + "peer": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "dev": true, + "optional": true, + "peer": true + }, + "deferred-leveldown": { + "version": "4.0.2", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~5.0.0", + "inherits": "^2.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "5.0.0", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "define-properties": { + "version": "1.1.3", + "dev": true, + "peer": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "defined": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "delayed-stream": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "des.js": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "dev": true, + "optional": true, + "peer": true + }, + "detect-indent": { + "version": "4.0.0", + "dev": true, + "peer": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dom-walk": { + "version": "0.1.2", + "dev": true, + "peer": true + }, + "dotignore": { + "version": "0.1.2", + "dev": true, + "peer": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "duplexer3": { + "version": "0.1.4", + "dev": true, + "optional": true, + "peer": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "peer": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "dev": true, + "optional": true, + "peer": true + }, + "electron-to-chromium": { + "version": "1.3.636", + "dev": true, + "peer": true + }, + "elliptic": { + "version": "6.5.3", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "encodeurl": { + "version": "1.0.2", + "dev": true, + "optional": true, + "peer": true + }, + "encoding": { + "version": "0.1.13", + "dev": true, + "peer": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "dev": true, + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "encoding-down": { + "version": "5.0.4", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "^5.0.0", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "5.0.0", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "dev": true, + "peer": true, + "requires": { + "once": "^1.4.0" + } + }, + "errno": { + "version": "0.1.8", + "dev": true, + "peer": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.1", + "dev": true, + "peer": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "peer": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "dev": true, + "peer": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "dev": true, + "peer": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "dev": true, + "peer": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escape-html": { + "version": "1.0.3", + "dev": true, + "optional": true, + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "peer": true + }, + "esutils": { + "version": "2.0.3", + "dev": true, + "peer": true + }, + "etag": { + "version": "1.8.1", + "dev": true, + "optional": true, + "peer": true + }, + "eth-block-tracker": { + "version": "3.0.1", + "dev": true, + "peer": true, + "requires": { + "eth-query": "^2.1.0", + "ethereumjs-tx": "^1.3.3", + "ethereumjs-util": "^5.1.3", + "ethjs-util": "^0.1.3", + "json-rpc-engine": "^3.6.0", + "pify": "^2.3.0", + "tape": "^4.6.3" + }, + "dependencies": { + "ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "peer": true, + "requires": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "pify": { + "version": "2.3.0", + "dev": true, + "peer": true + } + } + }, + "eth-ens-namehash": { + "version": "2.0.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + } + }, + "eth-json-rpc-infura": { + "version": "3.2.1", + "dev": true, + "peer": true, + "requires": { + "cross-fetch": "^2.1.1", + "eth-json-rpc-middleware": "^1.5.0", + "json-rpc-engine": "^3.4.0", + "json-rpc-error": "^2.0.0" + } + }, + "eth-json-rpc-middleware": { + "version": "1.6.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.5.0", + "eth-query": "^2.1.2", + "eth-tx-summary": "^3.1.2", + "ethereumjs-block": "^1.6.0", + "ethereumjs-tx": "^1.3.3", + "ethereumjs-util": "^5.1.2", + "ethereumjs-vm": "^2.1.0", + "fetch-ponyfill": "^4.0.0", + "json-rpc-engine": "^3.6.0", + "json-rpc-error": "^2.0.0", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "tape": "^4.6.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.6.0" + } + }, + "ethereumjs-account": { + "version": "2.0.5", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-block": { + "version": "1.7.1", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereum-common": { + "version": "0.2.0", + "dev": true, + "peer": true + } + } + }, + "ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "peer": true, + "requires": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-vm": { + "version": "2.6.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "isarray": { + "version": "0.0.1", + "dev": true, + "peer": true + }, + "level-codec": { + "version": "7.0.1", + "dev": true, + "peer": true + }, + "level-errors": { + "version": "1.0.5", + "dev": true, + "peer": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + } + } + }, + "level-ws": { + "version": "0.0.0", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "dev": true, + "peer": true, + "requires": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "memdown": { + "version": "1.4.1", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "peer": true, + "requires": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "dev": true, + "peer": true + } + } + }, + "object-keys": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + }, + "semver": { + "version": "5.4.1", + "dev": true, + "peer": true + }, + "string_decoder": { + "version": "0.10.31", + "dev": true, + "peer": true + } + } + }, + "eth-lib": { + "version": "0.1.29", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + } + }, + "eth-query": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "json-rpc-random-id": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "eth-sig-util": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "buffer": "^5.2.1", + "elliptic": "^6.4.0", + "ethereumjs-abi": "0.6.5", + "ethereumjs-util": "^5.1.1", + "tweetnacl": "^1.0.0", + "tweetnacl-util": "^0.15.0" + }, + "dependencies": { + "ethereumjs-abi": { + "version": "0.6.5", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.10.0", + "ethereumjs-util": "^4.3.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "4.5.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.8.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.0.0" + } + } + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "eth-tx-summary": { + "version": "3.2.4", + "dev": true, + "peer": true, + "requires": { + "async": "^2.1.2", + "clone": "^2.0.0", + "concat-stream": "^1.5.1", + "end-of-stream": "^1.1.0", + "eth-query": "^2.0.2", + "ethereumjs-block": "^1.4.1", + "ethereumjs-tx": "^1.1.1", + "ethereumjs-util": "^5.0.1", + "ethereumjs-vm": "^2.6.0", + "through2": "^2.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.6.0" + } + }, + "ethereumjs-account": { + "version": "2.0.5", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-block": { + "version": "1.7.1", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereum-common": { + "version": "0.2.0", + "dev": true, + "peer": true + } + } + }, + "ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "peer": true, + "requires": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-vm": { + "version": "2.6.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "isarray": { + "version": "0.0.1", + "dev": true, + "peer": true + }, + "level-codec": { + "version": "7.0.1", + "dev": true, + "peer": true + }, + "level-errors": { + "version": "1.0.5", + "dev": true, + "peer": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + } + } + }, + "level-ws": { + "version": "0.0.0", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "dev": true, + "peer": true, + "requires": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "memdown": { + "version": "1.4.1", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "peer": true, + "requires": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "dev": true, + "peer": true + } + } + }, + "object-keys": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + }, + "semver": { + "version": "5.4.1", + "dev": true, + "peer": true + }, + "string_decoder": { + "version": "0.10.31", + "dev": true, + "peer": true + } + } + }, + "ethashjs": { + "version": "0.0.8", + "dev": true, + "peer": true, + "requires": { + "async": "^2.1.2", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.0.2", + "miller-rabin": "^4.0.0" + }, + "dependencies": { + "bn.js": { + "version": "5.1.3", + "dev": true, + "peer": true + }, + "buffer-xor": { + "version": "2.0.2", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-util": { + "version": "7.0.7", + "dev": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.4" + } + } + } + }, + "ethereum-bloom-filters": { + "version": "1.0.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "js-sha3": "^0.8.0" + }, + "dependencies": { + "js-sha3": { + "version": "0.8.0", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "ethereum-common": { + "version": "0.0.18", + "dev": true, + "peer": true + }, + "ethereum-cryptography": { + "version": "0.1.3", + "dev": true, + "peer": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-abi": { + "version": "0.6.8", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "ethereumjs-account": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-util": "^6.0.0", + "rlp": "^2.2.1", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.6.0" + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "isarray": { + "version": "0.0.1", + "dev": true, + "peer": true + }, + "level-codec": { + "version": "7.0.1", + "dev": true, + "peer": true + }, + "level-errors": { + "version": "1.0.5", + "dev": true, + "peer": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + } + } + }, + "level-ws": { + "version": "0.0.0", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "dev": true, + "peer": true, + "requires": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "memdown": { + "version": "1.4.1", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "peer": true, + "requires": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "dev": true, + "peer": true + } + } + }, + "object-keys": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + }, + "semver": { + "version": "5.4.1", + "dev": true, + "peer": true + }, + "string_decoder": { + "version": "0.10.31", + "dev": true, + "peer": true + } + } + }, + "ethereumjs-blockchain": { + "version": "4.0.4", + "dev": true, + "peer": true, + "requires": { + "async": "^2.6.1", + "ethashjs": "~0.0.7", + "ethereumjs-block": "~2.2.2", + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.1.0", + "flow-stoplight": "^1.0.0", + "level-mem": "^3.0.1", + "lru-cache": "^5.1.1", + "rlp": "^2.2.2", + "semaphore": "^1.1.0" + } + }, + "ethereumjs-common": { + "version": "1.5.0", + "dev": true, + "peer": true + }, + "ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "ethereumjs-vm": { + "version": "4.2.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "core-js-pure": "^3.0.1", + "ethereumjs-account": "^3.0.0", + "ethereumjs-block": "^2.2.2", + "ethereumjs-blockchain": "^4.0.3", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.2", + "ethereumjs-util": "^6.2.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1", + "util.promisify": "^1.0.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.6.0" + } + }, + "isarray": { + "version": "0.0.1", + "dev": true, + "peer": true + }, + "level-codec": { + "version": "7.0.1", + "dev": true, + "peer": true + }, + "level-errors": { + "version": "1.0.5", + "dev": true, + "peer": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + } + } + }, + "level-ws": { + "version": "0.0.0", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "dev": true, + "peer": true, + "requires": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "memdown": { + "version": "1.4.1", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "peer": true, + "requires": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "dev": true, + "peer": true + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "object-keys": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + }, + "semver": { + "version": "5.4.1", + "dev": true, + "peer": true + }, + "string_decoder": { + "version": "0.10.31", + "dev": true, + "peer": true + } + } + }, + "ethereumjs-wallet": { + "version": "0.6.5", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "aes-js": "^3.1.1", + "bs58check": "^2.1.2", + "ethereum-cryptography": "^0.1.3", + "ethereumjs-util": "^6.0.0", + "randombytes": "^2.0.6", + "safe-buffer": "^5.1.2", + "scryptsy": "^1.2.1", + "utf8": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "eventemitter3": { + "version": "4.0.4", + "dev": true, + "optional": true, + "peer": true + }, + "events": { + "version": "3.2.0", + "dev": true, + "peer": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "dev": true, + "peer": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "expand-brackets": { + "version": "2.1.4", + "dev": true, + "peer": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "kind-of": { + "version": "5.1.0", + "dev": true, + "peer": true + }, + "ms": { + "version": "2.0.0", + "dev": true, + "peer": true + } + } + }, + "express": { + "version": "4.17.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "qs": { + "version": "6.7.0", + "dev": true, + "optional": true, + "peer": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "ext": { + "version": "1.4.0", + "dev": true, + "peer": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.1.0", + "dev": true, + "peer": true + } + } + }, + "extend": { + "version": "3.0.2", + "dev": true, + "peer": true + }, + "extend-shallow": { + "version": "3.0.2", + "dev": true, + "peer": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "extglob": { + "version": "2.0.4", + "dev": true, + "peer": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true, + "peer": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "dev": true, + "peer": true + }, + "fake-merkle-patricia-tree": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "checkpoint-store": "^1.1.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "peer": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "peer": true + }, + "fetch-ponyfill": { + "version": "4.1.0", + "dev": true, + "peer": true, + "requires": { + "node-fetch": "~1.7.1" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "node-fetch": { + "version": "1.7.3", + "dev": true, + "peer": true, + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "find-yarn-workspace-root": { + "version": "1.2.1", + "dev": true, + "peer": true, + "requires": { + "fs-extra": "^4.0.3", + "micromatch": "^3.1.4" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "dev": true, + "peer": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "dev": true, + "peer": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fs-extra": { + "version": "4.0.3", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-extendable": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "is-number": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "dev": true, + "peer": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "dev": true, + "peer": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "flow-stoplight": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "for-each": { + "version": "0.3.3", + "dev": true, + "peer": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "for-in": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "forever-agent": { + "version": "0.6.1", + "dev": true, + "peer": true + }, + "form-data": { + "version": "2.3.3", + "dev": true, + "peer": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "dev": true, + "optional": true, + "peer": true + }, + "fragment-cache": { + "version": "0.2.1", + "dev": true, + "peer": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "dev": true, + "optional": true, + "peer": true + }, + "fs-extra": { + "version": "7.0.1", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "function-bind": { + "version": "1.1.1", + "dev": true, + "peer": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "get-intrinsic": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "5.2.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "dev": true, + "peer": true + }, + "getpass": { + "version": "0.1.7", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.3", + "dev": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global": { + "version": "4.4.0", + "dev": true, + "peer": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "got": { + "version": "9.6.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "graceful-fs": { + "version": "4.2.4", + "dev": true, + "peer": true + }, + "har-schema": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "har-validator": { + "version": "5.1.5", + "dev": true, + "peer": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "dev": true, + "peer": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true, + "peer": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "dev": true, + "peer": true + }, + "has-symbol-support-x": { + "version": "1.4.2", + "dev": true, + "optional": true, + "peer": true + }, + "has-symbols": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "has-value": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-number": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash.js": { + "version": "1.1.7", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "heap": { + "version": "0.2.6", + "dev": true, + "peer": true + }, + "hmac-drbg": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "home-or-tmp": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "http-errors": { + "version": "1.7.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "http-https": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "http-signature": { + "version": "1.2.0", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "idna-uts46-hx": { + "version": "2.3.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "ieee754": { + "version": "1.2.1", + "dev": true, + "peer": true + }, + "immediate": { + "version": "3.2.3", + "dev": true, + "peer": true + }, + "inflight": { + "version": "1.0.6", + "dev": true, + "peer": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "dev": true, + "peer": true + }, + "invariant": { + "version": "2.2.4", + "dev": true, + "peer": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ipaddr.js": { + "version": "1.9.1", + "dev": true, + "optional": true, + "peer": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-arguments": { + "version": "1.1.0", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.2", + "dev": true, + "peer": true + }, + "is-ci": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-date-object": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "is-descriptor": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-finite": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "is-fn": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "is-function": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "is-hex-prefixed": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "is-negative-zero": { + "version": "2.0.1", + "dev": true, + "peer": true + }, + "is-object": { + "version": "1.0.2", + "dev": true, + "optional": true, + "peer": true + }, + "is-plain-obj": { + "version": "1.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "is-plain-object": { + "version": "2.0.4", + "dev": true, + "peer": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.1", + "dev": true, + "peer": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.2.0", + "dev": true, + "optional": true, + "peer": true + }, + "is-symbol": { + "version": "1.0.3", + "dev": true, + "peer": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "is-windows": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "isexe": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "isstream": { + "version": "0.1.2", + "dev": true, + "peer": true + }, + "isurl": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "js-sha3": { + "version": "0.5.7", + "dev": true, + "optional": true, + "peer": true + }, + "jsbn": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "json-buffer": { + "version": "3.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "json-rpc-engine": { + "version": "3.8.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "babel-preset-env": "^1.7.0", + "babelify": "^7.3.0", + "json-rpc-error": "^2.0.0", + "promise-to-callback": "^1.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "json-rpc-error": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1" + } + }, + "json-rpc-random-id": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "json-schema": { + "version": "0.2.3", + "dev": true, + "peer": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "peer": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "peer": true + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "dev": true, + "peer": true + }, + "jsprim": { + "version": "1.4.1", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "keccak": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "peer": true, + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "keyv": { + "version": "3.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "klaw-sync": { + "version": "6.0.0", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.11" + } + }, + "level-codec": { + "version": "9.0.2", + "dev": true, + "peer": true, + "requires": { + "buffer": "^5.6.0" + } + }, + "level-errors": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "2.0.3", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.5", + "xtend": "^4.0.0" + } + }, + "level-mem": { + "version": "3.0.1", + "dev": true, + "peer": true, + "requires": { + "level-packager": "~4.0.0", + "memdown": "~3.0.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "5.0.0", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "memdown": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~5.0.0", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + } + } + }, + "level-packager": { + "version": "4.0.1", + "dev": true, + "peer": true, + "requires": { + "encoding-down": "~5.0.0", + "levelup": "^3.0.0" + } + }, + "level-post": { + "version": "1.0.7", + "dev": true, + "peer": true, + "requires": { + "ltgt": "^2.1.2" + } + }, + "level-sublevel": { + "version": "6.6.4", + "dev": true, + "peer": true, + "requires": { + "bytewise": "~1.1.0", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0", + "level-iterator-stream": "^2.0.3", + "ltgt": "~2.1.1", + "pull-defer": "^0.2.2", + "pull-level": "^2.0.3", + "pull-stream": "^3.6.8", + "typewiselite": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "level-ws": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.8", + "xtend": "^4.0.1" + } + }, + "levelup": { + "version": "3.1.1", + "dev": true, + "peer": true, + "requires": { + "deferred-leveldown": "~4.0.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~3.0.0", + "xtend": "~4.0.0" + }, + "dependencies": { + "level-iterator-stream": { + "version": "3.0.1", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "xtend": "^4.0.0" + } + } + } + }, + "lodash": { + "version": "4.17.20", + "dev": true, + "peer": true + }, + "looper": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "loose-envify": { + "version": "1.4.0", + "dev": true, + "peer": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "lru-cache": { + "version": "5.1.1", + "dev": true, + "peer": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "ltgt": { + "version": "2.1.3", + "dev": true, + "peer": true + }, + "map-cache": { + "version": "0.2.2", + "dev": true, + "peer": true + }, + "map-visit": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "dev": true, + "peer": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "dev": true, + "optional": true, + "peer": true + }, + "merge-descriptors": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "merkle-patricia-tree": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.6.1", + "ethereumjs-util": "^5.2.0", + "level-mem": "^3.0.1", + "level-ws": "^1.0.0", + "readable-stream": "^3.0.6", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "methods": { + "version": "1.1.2", + "dev": true, + "optional": true, + "peer": true + }, + "miller-rabin": { + "version": "4.0.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "dev": true, + "optional": true, + "peer": true + }, + "mime-db": { + "version": "1.45.0", + "dev": true, + "peer": true + }, + "mime-types": { + "version": "2.1.28", + "dev": true, + "peer": true, + "requires": { + "mime-db": "1.45.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "min-document": { + "version": "2.19.0", + "dev": true, + "peer": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "minimatch": { + "version": "3.0.4", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "dev": true, + "peer": true + }, + "minizlib": { + "version": "1.3.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "minipass": "^2.9.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "mixin-deep": { + "version": "1.3.2", + "dev": true, + "peer": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "mkdirp": { + "version": "0.5.5", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mkdirp-promise": { + "version": "5.0.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "mkdirp": "*" + } + }, + "mock-fs": { + "version": "4.13.0", + "dev": true, + "optional": true, + "peer": true + }, + "ms": { + "version": "2.1.3", + "dev": true, + "peer": true + }, + "multibase": { + "version": "0.6.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "multicodec": { + "version": "0.5.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "varint": "^5.0.0" + } + }, + "multihashes": { + "version": "0.4.21", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + }, + "dependencies": { + "multibase": { + "version": "0.7.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + } + } + }, + "nano-json-stream-parser": { + "version": "0.1.2", + "dev": true, + "optional": true, + "peer": true + }, + "nanomatch": { + "version": "1.2.13", + "dev": true, + "peer": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "dev": true, + "optional": true, + "peer": true + }, + "next-tick": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "nice-try": { + "version": "1.0.5", + "dev": true, + "peer": true + }, + "node-addon-api": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "peer": true + }, + "node-fetch": { + "version": "2.1.2", + "dev": true, + "peer": true + }, + "node-gyp-build": { + "version": "4.2.3", + "bundled": true, + "dev": true, + "peer": true + }, + "normalize-url": { + "version": "4.5.0", + "dev": true, + "optional": true, + "peer": true + }, + "number-to-bn": { + "version": "1.7.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "oauth-sign": { + "version": "0.9.0", + "dev": true, + "peer": true + }, + "object-assign": { + "version": "4.1.1", + "dev": true, + "peer": true + }, + "object-copy": { + "version": "0.1.0", + "dev": true, + "peer": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "dev": true, + "peer": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.9.0", + "dev": true, + "peer": true + }, + "object-is": { + "version": "1.1.4", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "dev": true, + "peer": true + }, + "object-visit": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.1", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "object.pick": { + "version": "1.3.0", + "dev": true, + "peer": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "oboe": { + "version": "2.1.4", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "http-https": "^1.0.0" + } + }, + "on-finished": { + "version": "2.3.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "dev": true, + "peer": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "os-tmpdir": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "p-cancelable": { + "version": "1.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "p-timeout": { + "version": "1.2.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "parse-asn1": { + "version": "5.1.6", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-headers": { + "version": "2.0.3", + "dev": true, + "peer": true + }, + "parseurl": { + "version": "1.3.3", + "dev": true, + "optional": true, + "peer": true + }, + "pascalcase": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "patch-package": { + "version": "6.2.2", + "dev": true, + "peer": true, + "requires": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^1.2.1", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "peer": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "dev": true, + "peer": true + }, + "semver": { + "version": "5.7.1", + "dev": true, + "peer": true + }, + "shebang-command": { + "version": "1.2.0", + "dev": true, + "peer": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "slash": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "tmp": { + "version": "0.0.33", + "dev": true, + "peer": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "which": { + "version": "1.3.1", + "dev": true, + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "path-is-absolute": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "path-parse": { + "version": "1.0.6", + "dev": true, + "peer": true + }, + "path-to-regexp": { + "version": "0.1.7", + "dev": true, + "optional": true, + "peer": true + }, + "pbkdf2": { + "version": "3.1.1", + "dev": true, + "peer": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "dev": true, + "peer": true + }, + "posix-character-classes": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "precond": { + "version": "0.2.3", + "dev": true, + "peer": true + }, + "prepend-http": { + "version": "2.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "private": { + "version": "0.1.8", + "dev": true, + "peer": true + }, + "process": { + "version": "0.11.10", + "dev": true, + "peer": true + }, + "promise-to-callback": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "is-fn": "^1.0.0", + "set-immediate-shim": "^1.0.1" + } + }, + "proxy-addr": { + "version": "2.0.6", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "pseudomap": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "psl": { + "version": "1.8.0", + "dev": true, + "peer": true + }, + "public-encrypt": { + "version": "4.0.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pull-cat": { + "version": "1.1.11", + "dev": true, + "peer": true + }, + "pull-defer": { + "version": "0.2.3", + "dev": true, + "peer": true + }, + "pull-level": { + "version": "2.0.4", + "dev": true, + "peer": true, + "requires": { + "level-post": "^1.0.7", + "pull-cat": "^1.1.9", + "pull-live": "^1.0.1", + "pull-pushable": "^2.0.0", + "pull-stream": "^3.4.0", + "pull-window": "^2.1.4", + "stream-to-pull-stream": "^1.7.1" + } + }, + "pull-live": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "pull-cat": "^1.1.9", + "pull-stream": "^3.4.0" + } + }, + "pull-pushable": { + "version": "2.2.0", + "dev": true, + "peer": true + }, + "pull-stream": { + "version": "3.6.14", + "dev": true, + "peer": true + }, + "pull-window": { + "version": "2.1.4", + "dev": true, + "peer": true, + "requires": { + "looper": "^2.0.0" + } + }, + "pump": { + "version": "3.0.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "dev": true, + "peer": true + }, + "qs": { + "version": "6.5.2", + "dev": true, + "peer": true + }, + "query-string": { + "version": "5.1.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "dev": true, + "optional": true, + "peer": true + }, + "raw-body": { + "version": "2.4.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + } + } + }, + "regenerate": { + "version": "1.4.2", + "dev": true, + "peer": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "dev": true, + "peer": true + }, + "regenerator-transform": { + "version": "0.10.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "dev": true, + "peer": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "dev": true, + "peer": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "regexpu-core": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "dev": true, + "peer": true + }, + "regjsparser": { + "version": "0.1.5", + "dev": true, + "peer": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "dev": true, + "peer": true + } + } + }, + "repeat-element": { + "version": "1.1.3", + "dev": true, + "peer": true + }, + "repeat-string": { + "version": "1.6.1", + "dev": true, + "peer": true + }, + "repeating": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.2", + "dev": true, + "peer": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "resolve-url": { + "version": "0.2.1", + "dev": true, + "peer": true + }, + "responselike": { + "version": "1.0.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "resumer": { + "version": "0.0.0", + "dev": true, + "peer": true, + "requires": { + "through": "~2.3.4" + } + }, + "ret": { + "version": "0.1.15", + "dev": true, + "peer": true + }, + "rimraf": { + "version": "2.6.3", + "dev": true, + "peer": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "dev": true, + "peer": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.6", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.1" + } + }, + "rustbn.js": { + "version": "0.2.0", + "dev": true, + "peer": true + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true, + "peer": true + }, + "safe-event-emitter": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "events": "^3.0.0" + } + }, + "safe-regex": { + "version": "1.1.0", + "dev": true, + "peer": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "dev": true, + "peer": true + }, + "scrypt-js": { + "version": "3.0.1", + "dev": true, + "peer": true + }, + "scryptsy": { + "version": "1.2.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "pbkdf2": "^3.0.3" + } + }, + "secp256k1": { + "version": "4.0.2", + "dev": true, + "peer": true, + "requires": { + "elliptic": "^6.5.2", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "seedrandom": { + "version": "3.0.1", + "dev": true, + "peer": true + }, + "semaphore": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "send": { + "version": "0.17.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "ms": { + "version": "2.1.1", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "servify": { + "version": "0.1.12", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + } + }, + "set-immediate-shim": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "set-value": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true, + "peer": true + } + } + }, + "setimmediate": { + "version": "1.0.5", + "dev": true, + "peer": true + }, + "setprototypeof": { + "version": "1.1.1", + "dev": true, + "optional": true, + "peer": true + }, + "sha.js": { + "version": "2.4.11", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "simple-concat": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "simple-get": { + "version": "2.8.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "dev": true, + "peer": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "kind-of": { + "version": "5.1.0", + "dev": true, + "peer": true + }, + "ms": { + "version": "2.0.0", + "dev": true, + "peer": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "dev": true, + "peer": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "dev": true, + "peer": true + }, + "source-map-resolve": { + "version": "0.5.3", + "dev": true, + "peer": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.12", + "dev": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true, + "peer": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "split-string": { + "version": "3.1.0", + "dev": true, + "peer": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sshpk": { + "version": "1.16.1", + "dev": true, + "peer": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "dev": true, + "peer": true + } + } + }, + "static-extend": { + "version": "0.1.2", + "dev": true, + "peer": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "dev": true, + "peer": true + } + } + }, + "statuses": { + "version": "1.5.0", + "dev": true, + "optional": true, + "peer": true + }, + "stream-to-pull-stream": { + "version": "1.7.3", + "dev": true, + "peer": true, + "requires": { + "looper": "^3.0.0", + "pull-stream": "^3.2.3" + }, + "dependencies": { + "looper": { + "version": "3.0.0", + "dev": true, + "peer": true + } + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + } + } + }, + "string.prototype.trim": { + "version": "1.2.3", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.3", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.3", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "swarm-js": { + "version": "0.1.40", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-stream": { + "version": "3.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "got": { + "version": "7.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "p-cancelable": { + "version": "0.3.0", + "dev": true, + "optional": true, + "peer": true + }, + "prepend-http": { + "version": "1.0.4", + "dev": true, + "optional": true, + "peer": true + }, + "url-parse-lax": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "prepend-http": "^1.0.1" + } + } + } + }, + "tape": { + "version": "4.13.3", + "dev": true, + "peer": true, + "requires": { + "deep-equal": "~1.1.1", + "defined": "~1.0.0", + "dotignore": "~0.1.2", + "for-each": "~0.3.3", + "function-bind": "~1.1.1", + "glob": "~7.1.6", + "has": "~1.0.3", + "inherits": "~2.0.4", + "is-regex": "~1.0.5", + "minimist": "~1.2.5", + "object-inspect": "~1.7.0", + "resolve": "~1.17.0", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.2.1", + "through": "~2.3.8" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "dev": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "is-regex": { + "version": "1.0.5", + "dev": true, + "peer": true, + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "dev": true, + "peer": true + }, + "resolve": { + "version": "1.17.0", + "dev": true, + "peer": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "tar": { + "version": "4.4.13", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "fs-minipass": { + "version": "1.2.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "minipass": { + "version": "2.9.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "through": { + "version": "2.3.8", + "dev": true, + "peer": true + }, + "through2": { + "version": "2.0.5", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "tmp": { + "version": "0.1.0", + "dev": true, + "peer": true, + "requires": { + "rimraf": "^2.6.3" + } + }, + "to-object-path": { + "version": "0.3.0", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-readable-stream": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "to-regex": { + "version": "3.0.2", + "dev": true, + "peer": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "tough-cookie": { + "version": "2.5.0", + "dev": true, + "peer": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-right": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "tunnel-agent": { + "version": "0.6.0", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "1.0.3", + "dev": true, + "peer": true + }, + "tweetnacl-util": { + "version": "0.15.1", + "dev": true, + "peer": true + }, + "type": { + "version": "1.2.0", + "dev": true, + "peer": true + }, + "type-is": { + "version": "1.6.18", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "peer": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typewise": { + "version": "1.0.3", + "dev": true, + "peer": true, + "requires": { + "typewise-core": "^1.2.0" + } + }, + "typewise-core": { + "version": "1.2.0", + "dev": true, + "peer": true + }, + "typewiselite": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "ultron": { + "version": "1.1.1", + "dev": true, + "optional": true, + "peer": true + }, + "underscore": { + "version": "1.9.1", + "dev": true, + "optional": true, + "peer": true + }, + "union-value": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "dev": true, + "peer": true + } + } + }, + "universalify": { + "version": "0.1.2", + "dev": true, + "peer": true + }, + "unorm": { + "version": "1.6.0", + "dev": true, + "peer": true + }, + "unpipe": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "unset-value": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "dev": true, + "peer": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "dev": true, + "peer": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "dev": true, + "peer": true + } + } + }, + "uri-js": { + "version": "4.4.1", + "dev": true, + "peer": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "dev": true, + "peer": true + }, + "url-parse-lax": { + "version": "3.0.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "url-set-query": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "url-to-options": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "use": { + "version": "3.1.1", + "dev": true, + "peer": true + }, + "utf-8-validate": { + "version": "5.0.4", + "dev": true, + "peer": true, + "requires": { + "node-gyp-build": "^4.2.0" + } + }, + "utf8": { + "version": "3.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "util-deprecate": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "util.promisify": { + "version": "1.1.1", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "for-each": "^0.3.3", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.1" + } + }, + "utils-merge": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "uuid": { + "version": "3.4.0", + "dev": true, + "peer": true + }, + "varint": { + "version": "5.0.2", + "dev": true, + "optional": true, + "peer": true + }, + "vary": { + "version": "1.1.2", + "dev": true, + "optional": true, + "peer": true + }, + "verror": { + "version": "1.10.0", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "web3": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "web3-bzz": "1.2.11", + "web3-core": "1.2.11", + "web3-eth": "1.2.11", + "web3-eth-personal": "1.2.11", + "web3-net": "1.2.11", + "web3-shh": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-bzz": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/node": "^12.12.6", + "got": "9.6.0", + "swarm-js": "^0.1.40", + "underscore": "1.9.1" + }, + "dependencies": { + "@types/node": { + "version": "12.19.12", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "web3-core": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.5", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-requestmanager": "1.2.11", + "web3-utils": "1.2.11" + }, + "dependencies": { + "@types/node": { + "version": "12.19.12", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "web3-core-helpers": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "underscore": "1.9.1", + "web3-eth-iban": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-core-method": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/transactions": "^5.0.0-beta.135", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-core-promievent": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-core-requestmanager": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "web3-providers-http": "1.2.11", + "web3-providers-ipc": "1.2.11", + "web3-providers-ws": "1.2.11" + } + }, + "web3-core-subscriptions": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "eventemitter3": "4.0.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11" + } + }, + "web3-eth": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-eth-accounts": "1.2.11", + "web3-eth-contract": "1.2.11", + "web3-eth-ens": "1.2.11", + "web3-eth-iban": "1.2.11", + "web3-eth-personal": "1.2.11", + "web3-net": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-eth-abi": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/abi": "5.0.0-beta.153", + "underscore": "1.9.1", + "web3-utils": "1.2.11" + } + }, + "web3-eth-accounts": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "ethereumjs-common": "^1.3.2", + "ethereumjs-tx": "^2.1.1", + "scrypt-js": "^3.0.1", + "underscore": "1.9.1", + "uuid": "3.3.2", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-utils": "1.2.11" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "uuid": { + "version": "3.3.2", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "web3-eth-contract": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.5", + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-eth-ens": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-eth-contract": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-eth-iban": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.11.9", + "web3-utils": "1.2.11" + } + }, + "web3-eth-personal": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/node": "^12.12.6", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-net": "1.2.11", + "web3-utils": "1.2.11" + }, + "dependencies": { + "@types/node": { + "version": "12.19.12", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "web3-net": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "web3-core": "1.2.11", + "web3-core-method": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-provider-engine": { + "version": "14.2.1", + "dev": true, + "peer": true, + "requires": { + "async": "^2.5.0", + "backoff": "^2.5.0", + "clone": "^2.0.0", + "cross-fetch": "^2.1.0", + "eth-block-tracker": "^3.0.0", + "eth-json-rpc-infura": "^3.1.0", + "eth-sig-util": "^1.4.2", + "ethereumjs-block": "^1.2.2", + "ethereumjs-tx": "^1.2.0", + "ethereumjs-util": "^5.1.5", + "ethereumjs-vm": "^2.3.4", + "json-rpc-error": "^2.0.0", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "readable-stream": "^2.2.9", + "request": "^2.85.0", + "semaphore": "^1.0.3", + "ws": "^5.1.1", + "xhr": "^2.2.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.6.0" + } + }, + "eth-sig-util": { + "version": "1.4.2", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", + "ethereumjs-util": "^5.1.1" + } + }, + "ethereumjs-account": { + "version": "2.0.5", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-block": { + "version": "1.7.1", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereum-common": { + "version": "0.2.0", + "dev": true, + "peer": true + } + } + }, + "ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "peer": true, + "requires": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-vm": { + "version": "2.6.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "isarray": { + "version": "0.0.1", + "dev": true, + "peer": true + }, + "level-codec": { + "version": "7.0.1", + "dev": true, + "peer": true + }, + "level-errors": { + "version": "1.0.5", + "dev": true, + "peer": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + } + } + }, + "level-ws": { + "version": "0.0.0", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "dev": true, + "peer": true, + "requires": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "memdown": { + "version": "1.4.1", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "peer": true, + "requires": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "dev": true, + "peer": true + } + } + }, + "object-keys": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + }, + "semver": { + "version": "5.4.1", + "dev": true, + "peer": true + }, + "string_decoder": { + "version": "0.10.31", + "dev": true, + "peer": true + }, + "ws": { + "version": "5.2.2", + "dev": true, + "peer": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "web3-providers-http": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "web3-core-helpers": "1.2.11", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "oboe": "2.1.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11" + } + }, + "web3-providers-ws": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "eventemitter3": "4.0.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "websocket": "^1.0.31" + } + }, + "web3-shh": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "web3-core": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-net": "1.2.11" + } + }, + "web3-utils": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.9.1", + "utf8": "3.0.0" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + } + } + }, + "websocket": { + "version": "1.0.32", + "dev": true, + "peer": true, "requires": { - "@types/node": "*" + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true, + "peer": true + } } }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "whatwg-fetch": { + "version": "2.0.4", + "dev": true, + "peer": true }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "wrappy": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "ws": { + "version": "3.3.3", + "dev": true, + "optional": true, + "peer": true, "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "optional": true, + "peer": true + } } - } - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + }, + "xhr": { + "version": "2.6.0", "dev": true, + "peer": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" } }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "xhr-request": { + "version": "1.1.0", "dev": true, + "optional": true, + "peer": true, "requires": { - "os-tmpdir": "~1.0.2" + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "xhr-request-promise": { + "version": "0.1.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "xhr-request": "^1.1.0" + } + }, + "xhr2-cookies": { + "version": "1.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "cookiejar": "^2.1.1" } + }, + "xtend": { + "version": "4.0.2", + "dev": true, + "peer": true + }, + "yaeti": { + "version": "0.0.6", + "dev": true, + "peer": true + }, + "yallist": { + "version": "3.1.1", + "dev": true, + "peer": true } } }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@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" - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, "gauge": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", @@ -4065,14 +39590,14 @@ } }, "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "version": "2.0.5" + }, + "get-func-name": { + "version": "2.0.0", + "dev": true }, "get-intrinsic": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -4130,27 +39655,6 @@ "readable-stream": "~2.3.6", "xtend": "~4.0.1" } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true } } }, @@ -4162,10 +39666,23 @@ }, "get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, + "get-symbol-description": { + "version": "1.0.0", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "getpass": { + "version": "0.1.7", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, "git-raw-commits": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", @@ -4216,22 +39733,22 @@ } }, "git-up": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.5.tgz", - "integrity": "sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-6.0.0.tgz", + "integrity": "sha512-6RUFSNd1c/D0xtGnyWN2sxza2bZtZ/EmI9448n6rCZruFwV/ezeEn2fJP7XnUQGwf0RAtd/mmUCbtH6JPYA2SA==", "dev": true, "requires": { - "is-ssh": "^1.3.0", - "parse-url": "^6.0.0" + "is-ssh": "^1.4.0", + "parse-url": "^7.0.2" } }, "git-url-parse": { - "version": "11.6.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.6.0.tgz", - "integrity": "sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-12.0.0.tgz", + "integrity": "sha512-I6LMWsxV87vysX1WfsoglXsXg6GjQRKq7+Dgiseo+h0skmp5Hp2rzmcEIRQot9CPA+uzU7x1x7jZdqvTFGnB+Q==", "dev": true, "requires": { - "git-up": "^4.0.0" + "git-up": "^6.0.0" } }, "gitconfiglocal": { @@ -4245,8 +39762,6 @@ }, "glob": { "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4258,16 +39773,34 @@ }, "glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "requires": { "is-glob": "^4.0.1" } }, + "global": { + "version": "4.4.0", + "dev": true, + "peer": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globals": { + "version": "13.16.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, "globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", @@ -4280,8 +39813,6 @@ "dependencies": { "fast-glob": { "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -4293,15 +39824,39 @@ } } }, + "got": { + "version": "9.6.0", + "dev": true, + "peer": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "dev": true, + "peer": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.10" }, "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + "version": "1.10.5" }, "handlebars": { "version": "4.7.7", @@ -4316,6 +39871,20 @@ "wordwrap": "^1.0.0" } }, + "har-schema": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "har-validator": { + "version": "5.1.5", + "dev": true, + "peer": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, "hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -4324,8 +39893,6 @@ }, "hardhat": { "version": "2.9.9", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.9.9.tgz", - "integrity": "sha512-Qv7SXnRc0zq1kGXruNnSKpP3eFccXMR5Qv6GVX9hBIJ5efN0PflKPq92aQ5Cv3jrjJeRevLznWZVz7bttXhVfw==", "requires": { "@ethereumjs/block": "^3.6.2", "@ethereumjs/blockchain": "^5.5.2", @@ -4379,16 +39946,12 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -4397,29 +39960,21 @@ }, "color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "version": "1.1.3" }, "find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "requires": { "locate-path": "^2.0.0" } }, "fs-extra": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -4428,8 +39983,6 @@ }, "glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4440,22 +39993,16 @@ } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "version": "3.0.0" }, "jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "requires": { "graceful-fs": "^4.1.6" } }, "locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -4463,75 +40010,81 @@ }, "p-limit": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "requires": { "p-try": "^1.0.0" } }, "p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "requires": { "p-limit": "^1.1.0" } }, "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" + "version": "1.0.0" }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + "version": "3.0.0" }, "resolve": { "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "requires": { "path-parse": "^1.0.6" } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.0" }, "supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "0.1.2" } } }, "has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { "function-bind": "^1.1.1" } }, + "has-bigints": { + "version": "1.0.2" + }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "version": "4.0.0" + }, + "has-property-descriptors": { + "version": "1.0.0", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbol-support-x": { + "version": "1.4.2", + "dev": true, + "peer": true }, "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "version": "1.0.3" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "dev": true, + "peer": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "has-tostringtag": { + "version": "1.0.0", + "requires": { + "has-symbols": "^1.0.2" + } }, "has-unicode": { "version": "2.0.1", @@ -4541,8 +40094,6 @@ }, "hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -4551,22 +40102,16 @@ }, "hash.js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "version": "1.2.0" }, "hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -4584,14 +40129,10 @@ }, "http-cache-semantics": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, "http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { "depd": "2.0.0", "inherits": "2.0.4", @@ -4601,12 +40142,13 @@ }, "dependencies": { "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + "version": "2.0.0" } } }, + "http-https": { + "version": "1.0.0" + }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -4618,10 +40160,18 @@ "debug": "4" } }, + "http-signature": { + "version": "1.2.0", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, "https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "requires": { "agent-base": "6", "debug": "4" @@ -4629,8 +40179,6 @@ }, "human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "humanize-ms": { @@ -4642,70 +40190,56 @@ "ms": "^2.0.0" } }, + "husky": { + "version": "7.0.4", + "dev": true + }, "iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, + "idna-uts46-hx": { + "version": "2.3.1", + "dev": true, + "peer": true, + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "dev": true, + "peer": true + } + } + }, "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "version": "1.2.1" }, "ignore": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "dev": true, "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } + "minimatch": "^3.0.4" } }, "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" + "version": "3.3.0" }, "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + "version": "4.1.0" }, "import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -4714,8 +40248,6 @@ "dependencies": { "resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true } } @@ -4732,14 +40264,10 @@ }, "imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "version": "4.0.0" }, "infer-owner": { "version": "1.0.4", @@ -4749,17 +40277,13 @@ }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "version": "2.0.4" }, "ini": { "version": "1.3.8", @@ -4782,18 +40306,6 @@ "validate-npm-package-name": "^3.0.0" }, "dependencies": { - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, "read-package-json": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", @@ -4805,15 +40317,6 @@ "normalize-package-data": "^3.0.0", "npm-normalize-package-bin": "^1.0.0" } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -4838,10 +40341,21 @@ "through": "^2.3.6" } }, + "internal-slot": { + "version": "1.0.3", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "invert-kv": { + "version": "1.0.0", + "dev": true, + "peer": true + }, "io-ts": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", "requires": { "fp-ts": "^1.0.0" } @@ -4852,24 +40366,46 @@ "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", "dev": true }, + "ipaddr.js": { + "version": "1.9.1", + "dev": true, + "peer": true + }, + "is-arguments": { + "version": "1.1.1", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "is-bigint": { + "version": "1.0.4", + "requires": { + "has-bigints": "^1.0.1" + } + }, "is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "requires": { "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.2", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4" + }, "is-ci": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { "ci-info": "^2.0.0" @@ -4877,41 +40413,46 @@ }, "is-core-module": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "requires": { "has": "^1.0.3" } }, + "is-date-object": { + "version": "1.0.5", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "version": "2.1.1" }, "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "version": "3.0.0" + }, + "is-function": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "is-generator-function": { + "version": "1.0.10", + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } }, "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + "version": "1.0.0" }, "is-lambda": { "version": "1.0.1", @@ -4919,10 +40460,17 @@ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, + "is-negative-zero": { + "version": "2.0.2" + }, "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "version": "7.0.0" + }, + "is-number-object": { + "version": "1.0.7", + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-obj": { "version": "2.0.0", @@ -4930,19 +40478,37 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, + "is-object": { + "version": "1.0.2", + "dev": true, + "peer": true + }, "is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true }, "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-retry-allowed": { + "version": "1.2.0", "dev": true, + "peer": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", "requires": { - "isobject": "^3.0.1" + "call-bind": "^1.0.2" } }, "is-ssh": { @@ -4956,10 +40522,20 @@ }, "is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, + "is-string": { + "version": "1.0.7", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "requires": { + "has-symbols": "^1.0.2" + } + }, "is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", @@ -4969,21 +40545,40 @@ "text-extensions": "^1.0.0" } }, + "is-typed-array": { + "version": "1.1.9", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + } + }, "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "version": "1.0.0" }, "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "version": "0.1.0" + }, + "is-url": { + "version": "1.2.4", + "dev": true, + "peer": true + }, + "is-utf8": { + "version": "0.2.1", + "dev": true, + "peer": true + }, + "is-weakref": { + "version": "1.0.2", + "requires": { + "call-bind": "^1.0.2" + } }, "is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { "is-docker": "^2.0.0" @@ -4996,9 +40591,7 @@ "dev": true }, "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "version": "2.0.0" }, "isobject": { "version": "3.0.1", @@ -5006,10 +40599,22 @@ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, + "isstream": { + "version": "0.1.2", + "dev": true, + "peer": true + }, + "isurl": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + "version": "0.8.0" }, "js-tokens": { "version": "4.0.0", @@ -5019,12 +40624,20 @@ }, "js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { "argparse": "^2.0.1" } }, + "jsbn": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "json-buffer": { + "version": "3.0.0", + "dev": true, + "peer": true + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -5037,6 +40650,19 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "json-schema": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, "json-stringify-nice": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", @@ -5045,8 +40671,6 @@ }, "json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, "json5": { @@ -5074,12 +40698,33 @@ "universalify": "^2.0.0" } }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true - }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "jsprim": { + "version": "1.4.2", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, "just-diff": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.0.3.tgz", @@ -5094,8 +40739,6 @@ }, "keccak": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", "requires": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -5103,12 +40746,18 @@ }, "dependencies": { "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "version": "2.0.2" } } }, + "keyv": { + "version": "3.1.0", + "dev": true, + "peer": true, + "requires": { + "json-buffer": "3.0.0" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -5117,63 +40766,69 @@ }, "klaw": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", "requires": { "graceful-fs": "^4.1.9" } }, + "klaw-sync": { + "version": "6.0.0", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.11" + } + }, + "lcid": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, "lerna": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.1.6.tgz", - "integrity": "sha512-eiLj3IurbEas1rGtntW4Cf2/6y90Ot2oQaU2wv4uo2rHf6GRXUBEZ0nrE4yseDlNtsS/H7bqfrvlAYb3PWUG1A==", - "dev": true, - "requires": { - "@lerna/add": "5.1.6", - "@lerna/bootstrap": "5.1.6", - "@lerna/changed": "5.1.6", - "@lerna/clean": "5.1.6", - "@lerna/cli": "5.1.6", - "@lerna/create": "5.1.6", - "@lerna/diff": "5.1.6", - "@lerna/exec": "5.1.6", - "@lerna/import": "5.1.6", - "@lerna/info": "5.1.6", - "@lerna/init": "5.1.6", - "@lerna/link": "5.1.6", - "@lerna/list": "5.1.6", - "@lerna/publish": "5.1.6", - "@lerna/run": "5.1.6", - "@lerna/version": "5.1.6", + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.1.8.tgz", + "integrity": "sha512-KrpFx2l1x1X7wb9unqRU7OZTaNs5+67VQ1vxf8fIMgdtCAjEqkLxF/F3xLs+KBMws5PV19Q9YtPHn7SiwDl7iQ==", + "dev": true, + "requires": { + "@lerna/add": "5.1.8", + "@lerna/bootstrap": "5.1.8", + "@lerna/changed": "5.1.8", + "@lerna/clean": "5.1.8", + "@lerna/cli": "5.1.8", + "@lerna/create": "5.1.8", + "@lerna/diff": "5.1.8", + "@lerna/exec": "5.1.8", + "@lerna/import": "5.1.8", + "@lerna/info": "5.1.8", + "@lerna/init": "5.1.8", + "@lerna/link": "5.1.8", + "@lerna/list": "5.1.8", + "@lerna/publish": "5.1.8", + "@lerna/run": "5.1.8", + "@lerna/version": "5.1.8", "import-local": "^3.0.2", "npmlog": "^6.0.2" } }, "level-codec": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", "requires": { "buffer": "^5.6.0" } }, "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==" + "version": "2.0.1" }, "level-errors": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", "requires": { "errno": "~0.1.1" } }, "level-iterator-stream": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", "requires": { "inherits": "^2.0.4", "readable-stream": "^3.4.0", @@ -5182,1007 +40837,1617 @@ }, "level-mem": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", "requires": { "level-packager": "^5.0.3", "memdown": "^5.0.0" } }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - } + "level-packager": { + "version": "5.1.1", + "requires": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + } + }, + "level-supports": { + "version": "1.0.1", + "requires": { + "xtend": "^4.0.2" + } + }, + "level-ws": { + "version": "2.0.0", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" + } + }, + "levelup": { + "version": "4.4.0", + "requires": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "libnpmaccess": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", + "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", + "dev": true, + "requires": { + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0" + }, + "dependencies": { + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + } + } + }, + "libnpmpublish": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", + "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", + "dev": true, + "requires": { + "normalize-package-data": "^3.0.2", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0", + "semver": "^7.1.3", + "ssri": "^8.0.1" + }, + "dependencies": { + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + } + } + }, + "lilconfig": { + "version": "2.0.5", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "lint-staged": { + "version": "12.5.0", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.16", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^5.1.1", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.5.0", + "string-argv": "^0.3.1", + "supports-color": "^9.2.2", + "yaml": "^1.10.2" + }, + "dependencies": { + "commander": { + "version": "9.3.0", + "dev": true + }, + "supports-color": { + "version": "9.2.2", + "dev": true + } + } + }, + "listr2": { + "version": "4.0.5", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "cli-truncate": { + "version": "2.1.0", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "rxjs": { + "version": "7.5.6", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "slice-ansi": { + "version": "3.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21" + }, + "lodash.assign": { + "version": "4.2.0", + "dev": true, + "peer": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "dev": true + }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "log-update": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "loupe": { + "version": "2.3.4", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "lru_map": { + "version": "0.3.3" + }, + "lru-cache": { + "version": "6.0.0", + "requires": { + "yallist": "^4.0.0" + } + }, + "ltgt": { + "version": "2.2.1" + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "devOptional": true }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, "requires": { - "xtend": "^4.0.2" + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "dependencies": { + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + } } }, - "level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - } + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "mcl-wasm": { + "version": "0.7.9" + }, + "md5.js": { + "version": "1.3.5", "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "libnpmaccess": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", - "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", + "media-typer": { + "version": "0.3.0", "dev": true, + "peer": true + }, + "memdown": { + "version": "5.1.0", "requires": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0" + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" }, "dependencies": { - "npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, + "abstract-leveldown": { + "version": "6.2.3", "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" } + }, + "immediate": { + "version": "3.2.3" } } }, - "libnpmpublish": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", - "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", + "memorystream": { + "version": "0.3.1" + }, + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "requires": { - "normalize-package-data": "^3.0.2", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0", - "semver": "^7.1.3", - "ssri": "^8.0.1" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "dependencies": { - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } } }, - "npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "merkle-patricia-tree": { + "version": "4.2.4", + "requires": { + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" + } + }, + "methods": { + "version": "1.1.2", + "dev": true, + "peer": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0" } } }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "mime": { + "version": "1.6.0", + "dev": true, + "peer": true + }, + "mime-db": { + "version": "1.52.0", "dev": true }, - "load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "mime-types": { + "version": "2.1.35", "dev": true, "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - } + "mime-db": "1.52.0" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "mimic-fn": { + "version": "2.1.0", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "min-document": { + "version": "2.19.0", "dev": true, + "peer": true, "requires": { - "p-locate": "^4.1.0" + "dom-walk": "^0.1.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "minimalistic-assert": { + "version": "1.0.1" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1" + }, + "minimatch": { + "version": "3.0.5", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", "dev": true }, - "log-symbols": { + "minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "dev": true, "requires": { "yallist": "^4.0.0" } }, - "lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "minipass": "^3.0.0" } }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } }, - "make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "minipass": "^3.0.0" } }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", "dev": true }, - "mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==" + "mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + } }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "mkdirp-promise": { + "version": "5.0.1", + "dev": true, + "peer": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "mkdirp": "*" } }, - "memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", + "mnemonist": { + "version": "0.38.5", "requires": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" + "obliterator": "^2.0.0" + } + }, + "mocha": { + "version": "9.2.2", + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "ansi-colors": { + "version": "4.1.1" + }, + "debug": { + "version": "4.3.3", "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2" + } } }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==" - } - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==" - }, - "meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, + "escape-string-regexp": { + "version": "4.0.0" + }, + "find-up": { + "version": "5.0.0", "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, + "glob": { + "version": "7.2.0", "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, + "minimatch": { + "version": "3.1.2", "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "brace-expansion": "^1.1.7" } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true } } }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, + "locate-path": { + "version": "6.0.0", "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } + "p-locate": "^5.0.0" } }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true + "minimatch": { + "version": "4.2.1", + "requires": { + "brace-expansion": "^1.1.7" + } }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true + "ms": { + "version": "2.1.3" + }, + "p-limit": { + "version": "3.1.0", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "requires": { + "p-limit": "^3.0.2" + } + }, + "supports-color": { + "version": "8.1.1", + "requires": { + "has-flag": "^4.0.0" + } } } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "mock-fs": { + "version": "4.14.0", + "dev": true, + "peer": true }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true }, - "merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", + "ms": { + "version": "2.1.2" + }, + "multibase": { + "version": "0.6.1", + "dev": true, + "peer": true, "requires": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" + "base-x": "^3.0.8", + "buffer": "^5.5.0" } }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "multicodec": { + "version": "0.5.7", "dev": true, + "peer": true, "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "varint": "^5.0.0" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "multihashes": { + "version": "0.4.21", + "dev": true, + "peer": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" }, "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "multibase": { + "version": "0.7.0", + "dev": true, + "peer": true, + "requires": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } } } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + } + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "nano-json-stream-parser": { + "version": "0.1.2", + "dev": true, + "peer": true + }, + "nanoid": { + "version": "3.3.1" + }, + "natural-compare": { + "version": "1.4.0", "dev": true }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "negotiator": { + "version": "0.6.3", + "dev": true }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "next-tick": { + "version": "1.1.0" + }, + "nice-try": { + "version": "1.0.5", + "dev": true, + "peer": true + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node-fetch": { + "version": "2.6.7", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3" + }, + "webidl-conversions": { + "version": "3.0.1" + }, + "whatwg-url": { + "version": "5.0.0", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" } }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "node-gyp-build": { + "version": "4.4.0" }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "dependencies": { - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - } + "abbrev": "1" } }, - "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "requires": { - "yallist": "^4.0.0" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" } }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "normalize-path": { + "version": "3.0.0" + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dev": true, "requires": { - "minipass": "^3.0.0" + "npm-normalize-package-bin": "^1.0.1" } }, - "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "npm-install-checks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", + "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", "dev": true, "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "semver": "^7.1.1" } }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "dev": true, "requires": { - "minipass": "^3.0.0" + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" } }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", "dev": true, "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "npm-pick-manifest": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", + "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", "dev": true, "requires": { - "minipass": "^3.0.0" + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "lru-cache": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", + "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "dev": true + }, + "npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + } } }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "npm-registry-fetch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", "dev": true, "requires": { - "minipass": "^3.0.0" + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "dependencies": { + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "make-fetch-happen": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + } + }, + "socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + } + } } }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "npm-run-path": { + "version": "4.0.1", "dev": true, "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "path-key": "^3.0.0" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mkdirp-infer-owner": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" } }, - "mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "number-is-nan": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "number-to-bn": { + "version": "1.7.0", "requires": { - "obliterator": "^2.0.0" + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6" + } } }, - "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "nx": { + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-14.4.2.tgz", + "integrity": "sha512-bYO//HuwQL4X8y+2BjUPtkPLDiYI1zMejQo6+uJl3+VdYPcsjwW/ca581tBPHiPH95XnHiBartnMrMJtn11grw==", + "dev": true, "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", + "@nrwl/cli": "14.4.2", + "@nrwl/tao": "14.4.2", + "@parcel/watcher": "2.0.4", + "chalk": "4.1.0", + "chokidar": "^3.5.1", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^10.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "jsonc-parser": "3.0.0", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.3.4", + "string-width": "^4.2.3", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^3.9.0", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.4.0", + "yargs-parser": "21.0.1" }, "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, "requires": { - "p-limit": "^3.0.2" + "lru-cache": "^6.0.0" } }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, "requires": { - "has-flag": "^4.0.0" + "rimraf": "^3.0.0" } }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.0.0" } }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true } } }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "oauth-sign": { + "version": "0.9.0", + "dev": true, + "peer": true }, - "multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "object-assign": { + "version": "4.1.1", "dev": true, + "peer": true + }, + "object-inspect": { + "version": "1.12.2" + }, + "object-keys": { + "version": "1.1.1" + }, + "object.assign": { + "version": "4.1.2", "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "obliterator": { + "version": "2.0.4" }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" + "oboe": { + "version": "2.1.5", + "requires": { + "http-https": "^1.0.0" + } }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true + "on-finished": { + "version": "2.4.1", + "dev": true, + "peer": true, + "requires": { + "ee-first": "1.1.1" + } }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "once": { + "version": "1.4.0", + "requires": { + "wrappy": "1" + } }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.1", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-locale": { + "version": "1.4.0", "dev": true, + "peer": true, "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } + "lcid": "^1.0.0" } }, - "node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "os-tmpdir": { + "version": "1.0.2" + }, + "p-cancelable": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "p-finally": { + "version": "1.0.0", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } + "p-try": "^2.0.0" } }, - "node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "abbrev": "1" + "p-limit": "^2.2.0" } }, - "normalize-package-data": { + "p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", - "dev": true, "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", - "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - } + "aggregate-error": "^3.0.0" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "dev": true }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", "dev": true }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "dev": true, "requires": { - "npm-normalize-package-bin": "^1.0.1" + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" } }, - "npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", + "p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, "requires": { - "semver": "^7.1.1" + "p-finally": "^1.0.0" } }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", "dev": true, "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" + "p-reduce": "^2.0.0" } }, - "npm-packlist": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.0.tgz", - "integrity": "sha512-a04sqF6FbkyOAFA19AA0e94gS7Et5T2/IMj3VOT9nOF2RaRdVPQ1Q17Fb/HaDRFs+gbC7HOmhVZ29adpWgmDZg==", + "pacote": { + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", + "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", "dev": true, "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" }, "dependencies": { + "@npmcli/run-script": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.5.tgz", + "integrity": "sha512-FyrZkZ+O0bCnQqm+mRb6sKbEJgyJudInwFN84gCcMUcxrWkR15Ags1uOHwnxHYdpj3T5eqrCZNW/Ys20MGTQ6Q==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -6192,17 +42457,72 @@ "balanced-match": "^1.0.0" } }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "ignore-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + } + }, + "lru-cache": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", + "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "dev": true + }, + "make-fetch-happen": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", + "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" } }, "minimatch": { @@ -6213,44 +42533,48 @@ "requires": { "brace-expansion": "^2.0.1" } - } - } - }, - "npm-pick-manifest": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", - "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", - "dev": true, - "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + }, + "minipass-fetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dev": true, "requires": { - "semver": "^7.0.0" + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" } }, - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "node-gyp": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", + "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", "dev": true, "requires": { - "lru-cache": "^7.5.1" + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" } }, - "lru-cache": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", - "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", - "dev": true + "normalize-package-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", + "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } }, "npm-package-arg": { "version": "9.1.0", @@ -6264,2077 +42588,2563 @@ "validate-npm-package-name": "^4.0.0" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "npm-packlist": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", + "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^1.1.2", + "npm-normalize-package-bin": "^1.0.1" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "dev": true, "requires": { - "yallist": "^4.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" } } } }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "npm-registry-fetch": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", + "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", "dev": true, "requires": { - "builtins": "^5.0.0" + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" } - } - } - }, - "npm-registry-fetch": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", - "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", - "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "dependencies": { - "@npmcli/fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", - "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", + }, + "read-package-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", + "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", "dev": true, "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "dependencies": { + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + } } }, - "@npmcli/move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" } }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, "requires": { - "balanced-match": "^1.0.0" + "minipass": "^3.1.1" } }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + } + } + }, + "parent-module": { + "version": "1.0.1", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.6", + "dev": true, + "peer": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-conflict-json": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", + "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.1", + "just-diff": "^5.0.1", + "just-diff-apply": "^5.2.0" + } + }, + "parse-headers": { + "version": "2.0.5", + "dev": true, + "peer": true + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@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" + } + }, + "parse-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-5.0.0.tgz", + "integrity": "sha512-qOpH55/+ZJ4jUu/oLO+ifUKjFPNZGfnPJtzvGzKN/4oLMil5m9OH4VpOj6++9/ytJcfks4kzH2hhi87GL/OU9A==", + "dev": true, + "requires": { + "protocols": "^2.0.0" + } + }, + "parse-url": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-7.0.2.tgz", + "integrity": "sha512-PqO4Z0eCiQ08Wj6QQmrmp5YTTxpYfONdOEamrtvK63AmzXpcavIVQubGHxOEwiIoDZFb8uDOoQFS0NCcjqIYQg==", + "dev": true, + "requires": { + "is-ssh": "^1.4.0", + "normalize-url": "^6.1.0", + "parse-path": "^5.0.0", + "protocols": "^2.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "dev": true, + "peer": true + }, + "patch-package": { + "version": "6.4.7", + "dev": true, + "peer": true, + "requires": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", "dev": true, + "peer": true, "requires": { - "semver": "^7.0.0" + "color-convert": "^1.9.0" } }, - "cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "chalk": { + "version": "2.4.2", "dev": true, + "peer": true, "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "color-convert": { + "version": "1.9.3", "dev": true, + "peer": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "color-name": "1.1.3" } }, - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "color-name": { + "version": "1.1.3", "dev": true, + "peer": true + }, + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "peer": true, "requires": { - "lru-cache": "^7.5.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "fs-extra": { + "version": "7.0.1", "dev": true, + "peer": true, "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "lru-cache": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", - "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", - "dev": true + "has-flag": { + "version": "3.0.0", + "dev": true, + "peer": true }, - "make-fetch-happen": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", - "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", + "jsonfile": { + "version": "4.0.0", "dev": true, + "peer": true, "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "graceful-fs": "^4.1.6" } }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "open": { + "version": "7.4.2", "dev": true, + "peer": true, "requires": { - "brace-expansion": "^2.0.1" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" } }, - "minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "path-key": { + "version": "2.0.1", "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } + "peer": true }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "rimraf": { + "version": "2.7.1", "dev": true, + "peer": true, "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" + "glob": "^7.1.3" } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "5.7.1", + "dev": true, + "peer": true + }, + "shebang-command": { + "version": "1.2.0", "dev": true, + "peer": true, "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } + "shebang-regex": "^1.0.0" } }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "shebang-regex": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "slash": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "5.5.0", "dev": true, + "peer": true, "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "has-flag": "^3.0.0" } }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "tmp": { + "version": "0.0.33", "dev": true, + "peer": true, "requires": { - "minipass": "^3.1.1" + "os-tmpdir": "~1.0.2" } }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "universalify": { + "version": "0.1.2", + "dev": true, + "peer": true + }, + "which": { + "version": "1.3.1", "dev": true, + "peer": true, "requires": { - "builtins": "^5.0.0" + "isexe": "^2.0.0" } } } }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } + "path-browserify": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "path-exists": { + "version": "4.0.0" + }, + "path-is-absolute": { + "version": "1.0.1" + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "path-parse": { + "version": "1.0.7" + }, + "path-to-regexp": { + "version": "0.1.7", + "dev": true, + "peer": true + }, + "path-type": { + "version": "4.0.0", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "dev": true, + "peer": true + }, + "picomatch": { + "version": "2.3.1" + }, + "pidtree": { + "version": "0.5.0", + "dev": true + }, + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "dev": true, + "peer": true + }, + "pinkie-promise": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "postinstall-postinstall": { + "version": "2.1.0", + "dev": true, + "peer": true + }, + "prelude-ls": { + "version": "1.2.1", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "prettier": { + "version": "2.7.1", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "dev": true + }, + "process": { + "version": "0.11.10", + "dev": true, + "peer": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "dev": true + }, + "promise-call-limit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", + "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" + "err-code": "^2.0.2", + "retry": "^0.12.0" } }, - "nx": { - "version": "14.3.6", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.3.6.tgz", - "integrity": "sha512-jBgqXEkRalo8PwXJzO4HVNN3P5pqyL5VawyNd34qPl+4t2XlDRqoK0J74i8liPGdKPBB1HjM2K1u+QNF2ROvQA==", + "promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", "dev": true, "requires": { - "@nrwl/cli": "14.3.6", - "@nrwl/tao": "14.3.6", - "@parcel/watcher": "2.0.4", - "chalk": "4.1.0", - "chokidar": "^3.5.1", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", - "enquirer": "~2.3.6", - "fast-glob": "3.2.7", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^10.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "js-yaml": "4.1.0", - "jsonc-parser": "3.0.0", - "minimatch": "3.0.5", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.3.4", - "string-width": "^4.2.3", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^3.9.0", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.4.0", - "yargs-parser": "21.0.1" + "read": "1" } }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true }, - "obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" + "protocols": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", + "dev": true }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "proxy-addr": { + "version": "2.0.7", + "dev": true, + "peer": true, "requires": { - "wrappy": "1" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "prr": { + "version": "1.0.1" + }, + "psl": { + "version": "1.9.0", + "dev": true, + "peer": true + }, + "public-encrypt": { + "version": "4.0.3", "dev": true, + "peer": true, "requires": { - "mimic-fn": "^2.1.0" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true, + "peer": true + } } }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "pump": { + "version": "3.0.0", "dev": true, + "peer": true, "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "punycode": { + "version": "2.1.1", + "dev": true }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "dev": true }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, + "qs": { + "version": "6.11.0", "requires": { - "p-try": "^2.0.0" + "side-channel": "^1.0.4" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "querystring": { + "version": "0.2.0", "dev": true, + "peer": true + }, + "queue-microtask": { + "version": "1.2.3", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", "requires": { - "p-limit": "^2.2.0" + "safe-buffer": "^5.1.0" } }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "randomfill": { + "version": "1.0.4", + "dev": true, + "peer": true, "requires": { - "aggregate-error": "^3.0.0" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, - "p-map-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", - "dev": true + "range-parser": { + "version": "1.2.1", + "dev": true, + "peer": true }, - "p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true + "raw-body": { + "version": "2.5.1", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } }, - "p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" + "mute-stream": "~0.0.4" } }, - "p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "read-cmd-shim": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", + "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", "dev": true }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "read-package-json": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", + "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", "dev": true, "requires": { - "p-finally": "^1.0.0" + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dev": true, "requires": { - "p-reduce": "^2.0.0" + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" } }, - "pacote": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", - "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" }, "dependencies": { - "@npmcli/fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", - "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, - "@npmcli/move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, - "@npmcli/run-script": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.5.tgz", - "integrity": "sha512-FyrZkZ+O0bCnQqm+mRb6sKbEJgyJudInwFN84gCcMUcxrWkR15Ags1uOHwnxHYdpj3T5eqrCZNW/Ys20MGTQ6Q==", + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "requires": { - "balanced-match": "^1.0.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "semver": "^7.0.0" + "pify": "^3.0.0" } }, - "cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - } - } + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true }, - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "locate-path": "^2.0.0" } }, - "lru-cache": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.10.2.tgz", - "integrity": "sha512-9zDbhgmXAUvUMPV81A705K3tVzcPiZL3Bf5/5JC/FjYJlLZ5AJCeqIRFHJqyBppiLosqF+uKB7p8/RDXylqBIw==", - "dev": true - }, - "make-fetch-happen": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", - "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "brace-expansion": "^2.0.1" + "p-try": "^1.0.0" } }, - "minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "p-limit": "^1.1.0" } }, - "node-gyp": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", - "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "reduce-flatten": { + "version": "2.0.0", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "dev": true + }, + "request": { + "version": "2.88.2", + "dev": true, + "peer": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", "dev": true, + "peer": true, "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "qs": { + "version": "6.5.3", "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } + "peer": true }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "uuid": { + "version": "3.4.0", + "dev": true, + "peer": true + } + } + }, + "require-directory": { + "version": "2.1.1" + }, + "require-from-string": { + "version": "2.0.2" + }, + "require-main-filename": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "resolve": { + "version": "1.22.1", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.7", + "requires": { + "bn.js": "^5.2.0" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rustbn.js": { + "version": "0.2.0" + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1" + }, + "safer-buffer": { + "version": "2.1.2" + }, + "scrypt-js": { + "version": "3.0.1" + }, + "secp256k1": { + "version": "4.0.3", + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "dependencies": { + "node-addon-api": { + "version": "2.0.2" + } + } + }, + "semaphore-async-await": { + "version": "1.5.1" + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.18.0", + "dev": true, + "peer": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", "dev": true, + "peer": true, "requires": { - "lru-cache": "^6.0.0" + "ms": "2.0.0" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "ms": { + "version": "2.0.0", "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "peer": true } } }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "depd": { + "version": "2.0.0", "dev": true, - "requires": { - "minipass": "^3.1.1" - } + "peer": true }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "ms": { + "version": "2.1.3", "dev": true, - "requires": { - "builtins": "^5.0.0" - } + "peer": true } } }, - "parent-module": { + "serialize-javascript": { + "version": "6.0.0", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-static": { + "version": "1.15.0", + "dev": true, + "peer": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "servify": { + "version": "0.1.12", + "dev": true, + "peer": true, + "requires": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "dev": true + }, + "setimmediate": { + "version": "1.0.5" + }, + "setprototypeof": { + "version": "1.2.0" + }, + "sha.js": { + "version": "2.4.11", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "dev": true + }, + "simple-concat": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "peer": true + }, + "simple-get": { + "version": "2.8.2", + "dev": true, + "peer": true, "requires": { - "callsites": "^3.0.0" + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "parse-conflict-json": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", - "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", + "slash": { + "version": "3.0.0" + }, + "slice-ansi": { + "version": "5.0.0", "dev": true, "requires": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.1.0", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "dev": true + } } }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", "dev": true, "requires": { - "@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" + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" } }, - "parse-path": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.4.tgz", - "integrity": "sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw==", + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", "dev": true, "requires": { - "is-ssh": "^1.3.0", - "protocols": "^1.4.0", - "qs": "^6.9.4", - "query-string": "^6.13.8" + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "solc": { + "version": "0.7.3", + "requires": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" }, "dependencies": { - "protocols": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", - "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", - "dev": true + "fs-extra": { + "version": "0.30.0", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "rimraf": { + "version": "2.7.1", + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1" + }, + "tmp": { + "version": "0.0.33", + "requires": { + "os-tmpdir": "~1.0.2" + } } } }, - "parse-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-6.0.2.tgz", - "integrity": "sha512-uCSjOvD3T+6B/sPWhR+QowAZcU/o4bjPrVBQBGFxcDF6J6FraCGIaDBsdoQawiaaAVdHvtqBe3w3vKlfBKySOQ==", + "sort-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", + "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", "dev": true, "requires": { - "is-ssh": "^1.3.0", - "normalize-url": "^6.1.0", - "parse-path": "^4.0.4", - "protocols": "^1.4.0" + "is-plain-obj": "^2.0.0" }, "dependencies": { - "protocols": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", - "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true } } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "source-map": { + "version": "0.6.1" }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "source-map-support": { + "version": "0.5.21", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } }, - "path-key": { + "spdx-correct": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "spdx-exceptions": { + "version": "2.3.0", "dev": true }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "spdx-expression-parse": { + "version": "3.0.1", "dev": true, "requires": { - "find-up": "^4.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "dev": true - }, - "promise-call-limit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", - "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", + "spdx-license-ids": { + "version": "3.0.11", "dev": true }, - "promise-inflight": { + "split": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "readable-stream": "^3.0.0" } }, - "promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", + "sshpk": { + "version": "1.17.0", + "dev": true, + "peer": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "dev": true, + "peer": true + } + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { - "read": "1" + "minipass": "^3.1.1" } }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true + "stacktrace-parser": { + "version": "0.1.10", + "requires": { + "type-fest": "^0.7.1" + }, + "dependencies": { + "type-fest": { + "version": "0.7.1" + } + } }, - "protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true + "statuses": { + "version": "2.0.1" }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "string-argv": { + "version": "0.3.1", "dev": true }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "string-format": { + "version": "2.0.0", "dev": true }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "string-width": { + "version": "4.2.3", "requires": { - "side-channel": "^1.0.4" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "query-string": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", - "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", - "dev": true, + "string.prototype.trimend": { + "version": "1.0.5", "requires": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "string.prototype.trimstart": { + "version": "1.0.5", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "strip-ansi": { + "version": "6.0.1", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "strip-final-newline": { + "version": "2.0.0", "dev": true }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "strip-hex-prefix": { + "version": "1.0.0", "requires": { - "safe-buffer": "^5.1.0" + "is-hex-prefixed": "1.0.0" } }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } + "min-indent": "^1.0.0" } }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "strip-json-comments": { + "version": "3.1.1" + }, + "strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", "dev": true, "requires": { - "mute-stream": "~0.0.4" + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" } }, - "read-cmd-shim": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", - "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", "dev": true }, - "read-package-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", - "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", + "swarm-js": { + "version": "0.1.40", "dev": true, - "requires": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" + "peer": true, + "requires": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" }, "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "chownr": { + "version": "1.1.4", + "dev": true, + "peer": true + }, + "fs-extra": { + "version": "4.0.3", "dev": true, + "peer": true, "requires": { - "balanced-match": "^1.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "fs-minipass": { + "version": "1.2.7", "dev": true, + "peer": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "minipass": "^2.6.0" } }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "get-stream": { + "version": "3.0.0", + "dev": true, + "peer": true + }, + "got": { + "version": "7.1.0", "dev": true, + "peer": true, "requires": { - "brace-expansion": "^2.0.1" + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" } - } - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true }, - "load-json-file": { + "is-stream": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, + "peer": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "graceful-fs": "^4.1.6" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "minipass": { + "version": "2.9.0", "dev": true, + "peer": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "minizlib": { + "version": "1.3.3", "dev": true, + "peer": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "minipass": "^2.9.0" } }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "mkdirp": { + "version": "0.5.6", "dev": true, + "peer": true, "requires": { - "pify": "^3.0.0" + "minimist": "^1.2.6" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true + "p-cancelable": { + "version": "0.3.0", + "dev": true, + "peer": true }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "p-timeout": { + "version": "1.2.1", "dev": true, + "peer": true, "requires": { - "locate-path": "^2.0.0" + "p-finally": "^1.0.0" } }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "prepend-http": { + "version": "1.0.4", "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } + "peer": true }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "tar": { + "version": "4.4.19", "dev": true, + "peer": true, "requires": { - "p-try": "^1.0.0" + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" } }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "universalify": { + "version": "0.1.2", "dev": true, + "peer": true + }, + "url-parse-lax": { + "version": "1.0.0", + "dev": true, + "peer": true, "requires": { - "p-limit": "^1.1.0" + "prepend-http": "^1.0.1" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "yallist": { + "version": "3.1.1", + "dev": true, + "peer": true + } + } + }, + "table-layout": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", "dev": true }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "typical": { + "version": "5.2.0", "dev": true } } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" } }, - "readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" } }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "dev": true }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "test-value": { + "version": "2.1.0", "dev": true, + "peer": true, "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "array-back": "^1.0.3", + "typical": "^2.6.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "dev": true, + "peer": true, + "requires": { + "typical": "^2.6.0" + } + }, + "typical": { + "version": "2.6.1", + "dev": true, + "peer": true + } } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "testrpc": { + "version": "0.0.1", + "dev": true, + "peer": true }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "text-table": { + "version": "0.2.0", + "dev": true + }, + "through": { + "version": "2.3.8", + "dev": true + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "readable-stream": "3" } }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "timed-out": { + "version": "4.0.1", "dev": true, + "peer": true + }, + "to-readable-stream": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "to-regex-range": { + "version": "5.0.1", "requires": { - "resolve-from": "^5.0.0" + "is-number": "^7.0.0" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "toidentifier": { + "version": "1.0.1" }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "tough-cookie": { + "version": "2.5.0", "dev": true, + "peer": true, "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "treeverse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", + "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", "dev": true }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "true-case-path": { + "version": "2.2.1" + }, + "ts-command-line-args": { + "version": "2.3.1", "dev": true, "requires": { - "glob": "^7.1.3" + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } + "ts-essentials": { + "version": "7.0.3", + "dev": true, + "requires": {} }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "ts-generator": { + "version": "0.1.1", + "dev": true, "requires": { - "bn.js": "^5.2.0" + "@types/mkdirp": "^0.5.2", + "@types/prettier": "^2.1.1", + "@types/resolve": "^0.0.8", + "chalk": "^2.4.1", + "glob": "^7.1.2", + "mkdirp": "^0.5.1", + "prettier": "^2.1.2", + "resolve": "^1.8.1", + "ts-essentials": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "ts-essentials": { + "version": "1.0.4", + "dev": true + } } }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, + "ts-node": { + "version": "10.8.2", + "devOptional": true, "requires": { - "queue-microtask": "^1.2.2" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "devOptional": true + } } }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, "requires": { - "tslib": "^1.9.0" + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" }, "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true } } }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "tslib": { + "version": "2.4.0", + "dev": true }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + "tsort": { + "version": "0.0.1" }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "tsutils": { + "version": "3.21.0", + "dev": true, "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "tslib": "^1.8.1" }, "dependencies": { - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "tslib": { + "version": "1.14.1", + "dev": true } } }, - "semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==" - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "tunnel-agent": { + "version": "0.6.0", "dev": true, + "peer": true, "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } + "tweetnacl": { + "version": "1.0.3" }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } + "tweetnacl-util": { + "version": "0.15.1" }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "type": { + "version": "1.2.0" }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "type-check": { + "version": "0.4.0", + "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "prelude-ls": "^1.2.1" } }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "type-detect": { + "version": "4.0.8", "dev": true }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true }, - "socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "type-is": { + "version": "1.6.18", "dev": true, + "peer": true, "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.2.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" } }, - "socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "typechain": { + "version": "7.0.1", "dev": true, "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" + "@types/prettier": "^2.1.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.0", + "glob": "^7.1.6", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.1.2", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" }, "dependencies": { "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "version": "7.0.1", + "dev": true, "requires": { "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "glob": { + "version": "7.2.3", + "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "jsonfile": { + "version": "4.0.0", + "dev": true, "requires": { - "glob": "^7.1.3" + "graceful-fs": "^4.1.6" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "minimatch": { + "version": "3.1.2", + "dev": true, "requires": { - "os-tmpdir": "~1.0.2" + "brace-expansion": "^1.1.7" } + }, + "universalify": { + "version": "0.1.2", + "dev": true } } }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", "requires": { - "is-plain-obj": "^1.0.0" + "is-typedarray": "^1.0.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "typescript": { + "version": "4.7.4", + "devOptional": true }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } + "typical": { + "version": "4.0.0", + "dev": true }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "uglify-js": { + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.2.tgz", + "integrity": "sha512-AaQNokTNgExWrkEYA24BTNMSjyqEXPSfhqoS0AxmHkCJ4U+Dyy5AvbGV/sqxuxficEfGGoX3zWw9R7QpLFfEsg==", + "dev": true, + "optional": true + }, + "ultron": { + "version": "1.1.1", "dev": true, + "peer": true + }, + "unbox-primitive": { + "version": "1.0.2", "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" } }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "undici": { + "version": "5.6.0" }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "unique-slug": "^2.0.0" } }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "requires": { - "through": "2" + "imurmurhash": "^0.1.4" } }, - "split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0" + }, + "upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "uri-js": { + "version": "4.4.1", "dev": true, "requires": { - "readable-stream": "^3.0.0" + "punycode": "^2.1.0" } }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "url": { + "version": "0.11.0", "dev": true, + "peer": true, "requires": { - "minipass": "^3.1.1" - } - }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "requires": { - "type-fest": "^0.7.1" + "punycode": "1.3.2", + "querystring": "0.2.0" }, "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" + "punycode": { + "version": "1.3.2", + "dev": true, + "peer": true } } }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "url-parse-lax": { + "version": "3.0.0", + "dev": true, + "peer": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "prepend-http": "^2.0.0" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "url-set-query": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "url-to-options": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "utf-8-validate": { + "version": "5.0.9", "requires": { - "safe-buffer": "~5.2.0" + "node-gyp-build": "^4.3.0" } }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "utf8": { + "version": "3.0.0" + }, + "util": { + "version": "0.12.4", "requires": { - "ansi-regex": "^5.0.1" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true + "util-deprecate": { + "version": "1.0.2" }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "utils-merge": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "uuid": { + "version": "8.3.2" + }, + "v8-compile-cache": { + "version": "2.3.0", "dev": true }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "v8-compile-cache-lib": { + "version": "3.0.1", + "devOptional": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "dev": true, "requires": { - "is-hex-prefixed": "1.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "strip-indent": { + "validate-npm-package-name": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "dev": true, "requires": { - "min-indent": "^1.0.0" + "builtins": "^1.0.3" } }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "varint": { + "version": "5.0.2", + "dev": true, + "peer": true }, - "strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "vary": { + "version": "1.1.2", "dev": true, - "requires": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - } + "peer": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "verror": { + "version": "1.10.0", + "dev": true, + "peer": true, "requires": { - "has-flag": "^4.0.0" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "dev": true, + "peer": true + } } }, - "supports-preserve-symlinks-flag": { + "walk-up-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", "dev": true }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "defaults": "^1.0.3" } }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "web3": { + "version": "1.7.4", "dev": true, + "peer": true, "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "web3-bzz": "1.7.4", + "web3-core": "1.7.4", + "web3-eth": "1.7.4", + "web3-eth-personal": "1.7.4", + "web3-net": "1.7.4", + "web3-shh": "1.7.4", + "web3-utils": "1.7.4" } }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true - }, - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "web3-bzz": { + "version": "1.7.4", "dev": true, + "peer": true, "requires": { - "readable-stream": "3" + "@types/node": "^12.12.6", + "got": "9.6.0", + "swarm-js": "^0.1.40" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "dev": true, + "peer": true + } } }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, + "web3-core": { + "version": "1.7.4", "requires": { - "rimraf": "^3.0.0" + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-requestmanager": "1.7.4", + "web3-utils": "1.7.4" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55" + } } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "web3-core-helpers": { + "version": "1.7.4", "requires": { - "is-number": "^7.0.0" + "web3-eth-iban": "1.7.4", + "web3-utils": "1.7.4" } }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, + "web3-core-method": { + "version": "1.7.4", "requires": { - "punycode": "^2.1.1" + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-utils": "1.7.4" } }, - "treeverse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", - "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", - "dev": true - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true + "web3-core-promievent": { + "version": "1.7.4", + "requires": { + "eventemitter3": "4.0.4" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.4" + } + } }, - "true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" + "web3-core-requestmanager": { + "version": "1.7.4", + "requires": { + "util": "^0.12.0", + "web3-core-helpers": "1.7.4", + "web3-providers-http": "1.7.4", + "web3-providers-ipc": "1.7.4", + "web3-providers-ws": "1.7.4" + } }, - "ts-node": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.2.tgz", - "integrity": "sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==", - "dev": true, + "web3-core-subscriptions": { + "version": "1.7.4", "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4" }, "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true + "eventemitter3": { + "version": "4.0.4" } } }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "web3-eth": { + "version": "1.7.4", "dev": true, + "peer": true, + "requires": { + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-eth-abi": "1.7.4", + "web3-eth-accounts": "1.7.4", + "web3-eth-contract": "1.7.4", + "web3-eth-ens": "1.7.4", + "web3-eth-iban": "1.7.4", + "web3-eth-personal": "1.7.4", + "web3-net": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-eth-abi": { + "version": "1.7.4", + "dev": true, + "peer": true, "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.7.4" } }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true + "web3-eth-accounts": { + "version": "1.7.4", + "dev": true, + "peer": true, + "requires": { + "@ethereumjs/common": "^2.5.0", + "@ethereumjs/tx": "^3.3.2", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.0.10", + "scrypt-js": "^3.0.1", + "uuid": "3.3.2", + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-utils": "1.7.4" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true, + "peer": true + }, + "eth-lib": { + "version": "0.2.8", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "uuid": { + "version": "3.3.2", + "dev": true, + "peer": true + } + } }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "web3-eth-contract": { + "version": "1.7.4", "dev": true, + "peer": true, "requires": { - "is-typedarray": "^1.0.0" + "@types/bn.js": "^5.1.0", + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-eth-abi": "1.7.4", + "web3-utils": "1.7.4" } }, - "uglify-js": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.1.tgz", - "integrity": "sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ==", + "web3-eth-ens": { + "version": "1.7.4", "dev": true, - "optional": true + "peer": true, + "requires": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-eth-abi": "1.7.4", + "web3-eth-contract": "1.7.4", + "web3-utils": "1.7.4" + } }, - "undici": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.6.0.tgz", - "integrity": "sha512-mc+8SY1fXubTrdx4CXDkeFFGV8lI3Tq4I/70U1V8Z6g4iscGII0uLO7CPnDt56bXEbvaKwo2T2+VrteWbZiXiQ==" + "web3-eth-iban": { + "version": "1.7.4", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.7.4" + } }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "web3-eth-personal": { + "version": "1.7.4", "dev": true, - "requires": { - "unique-slug": "^2.0.0" + "peer": true, + "requires": { + "@types/node": "^12.12.6", + "web3-core": "1.7.4", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-net": "1.7.4", + "web3-utils": "1.7.4" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "dev": true, + "peer": true + } } }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "web3-net": { + "version": "1.7.4", "dev": true, + "peer": true, "requires": { - "imurmurhash": "^0.1.4" + "web3-core": "1.7.4", + "web3-core-method": "1.7.4", + "web3-utils": "1.7.4" } }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "web3-providers-http": { + "version": "1.7.4", + "requires": { + "web3-core-helpers": "1.7.4", + "xhr2-cookies": "1.1.0" + } }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "web3-providers-ipc": { + "version": "1.7.4", + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.7.4" + } }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, + "web3-providers-ws": { + "version": "1.7.4", "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4", + "websocket": "^1.0.32" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.4" + } } }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "web3-shh": { + "version": "1.7.4", "dev": true, + "peer": true, "requires": { - "builtins": "^1.0.3" + "web3-core": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-net": "1.7.4" } }, - "walk-up-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", - "dev": true - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, + "web3-utils": { + "version": "1.7.4", "requires": { - "defaults": "^1.0.3" + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" } }, "webidl-conversions": { @@ -8343,6 +45153,28 @@ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true }, + "websocket": { + "version": "1.0.34", + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0" + } + } + }, "whatwg-url": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", @@ -8356,12 +45188,36 @@ }, "which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "requires": { "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "which-typed-array": { + "version": "1.1.8", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + } + }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -8371,21 +45227,40 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, + "window-size": { + "version": "0.2.0", + "dev": true, + "peer": true + }, + "word-wrap": { + "version": "1.2.3", + "dev": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, + "wordwrapjs": { + "version": "4.0.1", + "dev": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "dev": true + } + } + }, "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + "version": "6.2.0" }, "wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -8393,19 +45268,18 @@ } }, "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "version": "1.0.2" }, "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, "write-json-file": { @@ -8422,53 +45296,11 @@ "write-file-atomic": "^3.0.0" }, "dependencies": { - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", - "dev": true, - "requires": { - "is-plain-obj": "^2.0.0" - } - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } } } }, @@ -8483,12 +45315,60 @@ "write-json-file": "^3.2.0" }, "dependencies": { + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "dev": true + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, "type-fest": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", "dev": true }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "write-json-file": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", @@ -8507,56 +45387,101 @@ }, "ws": { "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==" + "requires": {} + }, + "xhr": { + "version": "2.6.0", + "dev": true, + "peer": true, + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xhr-request": { + "version": "1.1.0", + "dev": true, + "peer": true, + "requires": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + }, + "dependencies": { + "query-string": { + "version": "5.1.1", + "dev": true, + "peer": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "dev": true, + "peer": true + } + } + }, + "xhr-request-promise": { + "version": "0.1.3", + "dev": true, + "peer": true, + "requires": { + "xhr-request": "^1.1.0" + } + }, + "xhr2-cookies": { + "version": "1.1.0", + "requires": { + "cookiejar": "^2.1.1" + } }, "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "version": "4.0.2" }, "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "version": "5.0.8" + }, + "yaeti": { + "version": "0.0.6" }, "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "version": "4.0.0" }, "yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^4.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" }, "yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "requires": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -8565,32 +45490,22 @@ }, "dependencies": { "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "version": "6.3.0" }, "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + "version": "4.0.0" }, "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "version": "2.1.0" } } }, "yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true + "devOptional": true }, "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "version": "0.1.0" } } } diff --git a/package.json b/package.json index 864a126a5..42ab017b7 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "author": "Biconomy (https://biconomy.io)", "devDependencies": { "lerna": "^5.1.6", - "nx": "^14.3.6", + "nx": "^14.4.2", "prettier": "2.7.1", "ts-node": "^10.8.2" }, diff --git a/packages/core-types/package-lock.json b/packages/core-types/package-lock.json deleted file mode 100644 index aca026523..000000000 --- a/packages/core-types/package-lock.json +++ /dev/null @@ -1,2458 +0,0 @@ -{ - "name": "core-types", - "version": "1.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@gnosis.pm/safe-deployments": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", - "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", - "requires": { - "semver": "^7.3.7" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", - "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/type-utils": "5.30.0", - "@typescript-eslint/utils": "5.30.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", - "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", - "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", - "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", - "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.30.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", - "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", - "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", - "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", - "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "requires": { - "http-https": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "web3-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", - "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", - "requires": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - } - } - }, - "web3-core-helpers": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", - "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", - "requires": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-method": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", - "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", - "requires": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-promievent": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", - "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-core-requestmanager": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", - "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", - "requires": { - "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" - } - }, - "web3-core-subscriptions": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", - "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" - } - }, - "web3-eth-iban": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", - "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.7.4" - } - }, - "web3-providers-http": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", - "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", - "requires": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", - "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" - } - }, - "web3-providers-ws": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", - "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", - "websocket": "^1.0.32" - } - }, - "web3-utils": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", - "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "requires": { - "cookiejar": "^2.1.1" - } - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 1834eac90..fefc13392 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { - "name": "core-types", - "version": "1.1.0", + "name": "@biconomy-sdk/core-types", + "version": "1.0.0", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/package-lock.json b/packages/ethers-lib/package-lock.json deleted file mode 100644 index 92c850e94..000000000 --- a/packages/ethers-lib/package-lock.json +++ /dev/null @@ -1,5358 +0,0 @@ -{ - "name": "ethers-lib", - "version": "1.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true - }, - "@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, - "requires": { - "@cspotcode/source-map-consumer": "0.8.0" - } - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - } - } - }, - "@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - }, - "dependencies": { - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - } - }, - "merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "requires": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - } - } - }, - "@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - }, - "dependencies": { - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - }, - "dependencies": { - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/vm": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", - "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.3", - "@ethereumjs/blockchain": "^5.5.3", - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.4", - "rustbn.js": "~0.2.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - } - }, - "merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "requires": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/basex": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", - "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/hdnode": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", - "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/json-wallets": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", - "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - }, - "dependencies": { - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true - } - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", - "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/sha2": "^5.6.1" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/providers": { - "version": "5.6.8", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", - "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/base64": "^5.6.1", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1", - "bech32": "1.1.4", - "ws": "7.4.6" - }, - "dependencies": { - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true - } - } - }, - "@ethersproject/random": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", - "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/sha2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", - "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", - "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/units": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", - "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/wallet": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", - "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/json-wallets": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/wordlists": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", - "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@gnosis.pm/safe-core-sdk-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.1.0.tgz", - "integrity": "sha512-VvEqWCliA6KXwt9N4YTzN5JcqnhLxLjUTU7trpQqQ7wU9OQcF+Kdrer86wDOF5lYZVE24zudw1s4gW3dxUkm6A==", - "requires": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "^1.12.0", - "web3-core": "^1.7.1" - } - }, - "@gnosis.pm/safe-core-sdk-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.1.0.tgz", - "integrity": "sha512-ZH1Ps3qsreczKHHfBb34dj55LDTiU7WAeKD7jgKnhiloGWRniLv+cbBfwFQNAezoyANvgyI5ky64wgwm1bm1YA==", - "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "web3-utils": "^1.7.1" - } - }, - "@gnosis.pm/safe-deployments": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", - "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", - "requires": { - "semver": "^7.3.7" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@nomiclabs/hardhat-ethers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.5.tgz", - "integrity": "sha512-A2gZAGB6kUvLx+kzM92HKuUF33F1FSe90L0TmkXkT2Hh0OKRpvWZURUSU2nghD2yC4DzfEZ3DftfeHGvZ2JTUw==", - "dev": true - }, - "@nomiclabs/hardhat-waffle": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", - "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", - "dev": true, - "requires": { - "@types/sinon-chai": "^3.2.3", - "@types/web3": "1.0.19" - } - }, - "@openzeppelin/contracts": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.6.0.tgz", - "integrity": "sha512-8vi4d50NNya/bQqCmaVzvHNmwHvS0OBKb7HNtuNwEE3scXWrP31fKQoGxNMT+KbzmrNZzatE3QK5p2gFONI/hg==" - }, - "@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "requires": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "dependencies": { - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true - }, - "@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@solidity-parser/parser": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.2.tgz", - "integrity": "sha512-10cr0s+MtRtqjEw0WFJrm2rwULN30xx7btd/v9cmqME2617/2M5MbHDkFIGIGTa7lwNw4bN9mVGfhlLzrYw8pA==", - "dev": true, - "requires": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@typechain/ethers-v5": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz", - "integrity": "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - } - }, - "@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", - "dev": true - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" - } - } - }, - "@types/chai": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", - "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", - "dev": true - }, - "@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dev": true, - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" - } - } - }, - "@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", - "dev": true - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" - } - } - }, - "@types/sinon": { - "version": "10.0.12", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.12.tgz", - "integrity": "sha512-uWf4QJ4oky/GckJ1MYQxU52cgVDcXwBhDkpvLbi4EKoLPqLE4MOH6T/ttM33l3hi0oZ882G6oIzWv/oupRYSxQ==", - "dev": true, - "requires": { - "@types/sinonjs__fake-timers": "*" - } - }, - "@types/sinon-chai": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", - "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", - "dev": true - }, - "@types/underscore": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", - "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", - "dev": true - }, - "@types/web3": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", - "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", - "dev": true, - "requires": { - "@types/bn.js": "*", - "@types/underscore": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", - "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/type-utils": "5.30.0", - "@typescript-eslint/utils": "5.30.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", - "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", - "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", - "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", - "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.30.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", - "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", - "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", - "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "requires": { - "async": "^2.4.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true - }, - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "requires": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - } - }, - "command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "requires": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" - }, - "core-js-pure": { - "version": "3.23.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", - "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==", - "dev": true - }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "requires": { - "buffer": "^5.6.0" - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - } - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "eslint": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", - "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "ethers": { - "version": "5.6.9", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", - "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", - "dev": true, - "requires": { - "@ethersproject/abi": "5.6.4", - "@ethersproject/abstract-provider": "5.6.1", - "@ethersproject/abstract-signer": "5.6.2", - "@ethersproject/address": "5.6.1", - "@ethersproject/base64": "5.6.1", - "@ethersproject/basex": "5.6.1", - "@ethersproject/bignumber": "5.6.2", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.1", - "@ethersproject/contracts": "5.6.2", - "@ethersproject/hash": "5.6.1", - "@ethersproject/hdnode": "5.6.2", - "@ethersproject/json-wallets": "5.6.1", - "@ethersproject/keccak256": "5.6.1", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.4", - "@ethersproject/pbkdf2": "5.6.1", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.8", - "@ethersproject/random": "5.6.1", - "@ethersproject/rlp": "5.6.1", - "@ethersproject/sha2": "5.6.1", - "@ethersproject/signing-key": "5.6.2", - "@ethersproject/solidity": "5.6.1", - "@ethersproject/strings": "5.6.1", - "@ethersproject/transactions": "5.6.2", - "@ethersproject/units": "5.6.1", - "@ethersproject/wallet": "5.6.2", - "@ethersproject/web": "5.6.1", - "@ethersproject/wordlists": "5.6.1" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "requires": { - "array-back": "^3.0.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - }, - "dependencies": { - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - } - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "hardhat": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.9.2.tgz", - "integrity": "sha512-elTcUK1EdFverWinybQ+DoJzsM6sgiHUYs0ZYNNXMfESty6ESHiFSwkfJsC88/q09vmIz6YVaMh73BYnYd+feQ==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.0", - "@ethereumjs/blockchain": "^5.5.0", - "@ethereumjs/common": "^2.6.0", - "@ethereumjs/tx": "^3.4.0", - "@ethereumjs/vm": "^5.6.0", - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@sentry/node": "^5.18.1", - "@solidity-parser/parser": "^0.14.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^0.1.2", - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^7.1.3", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "^7.1.3", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "lodash": "^4.17.11", - "merkle-patricia-tree": "^4.2.2", - "mnemonist": "^0.38.0", - "mocha": "^9.2.0", - "p-map": "^4.0.0", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "slash": "^3.0.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "true-case-path": "^2.2.1", - "tsort": "0.0.1", - "undici": "^4.14.1", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - } - }, - "merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "requires": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "requires": { - "fp-ts": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dev": true, - "requires": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", - "dev": true - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - }, - "memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - } - } - } - }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dev": true, - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - } - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "requires": { - "obliterator": "^2.0.0" - } - }, - "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "requires": { - "http-https": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", - "dev": true - }, - "ts-command-line-args": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz", - "integrity": "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true - }, - "ts-node": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", - "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.0", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typechain": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz", - "integrity": "sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ==", - "dev": true, - "requires": { - "@types/prettier": "^2.1.1", - "debug": "^4.1.1", - "fs-extra": "^7.0.0", - "glob": "^7.1.6", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.1.2", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", - "dev": true - }, - "typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "undici": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-4.16.0.tgz", - "integrity": "sha512-tkZSECUYi+/T1i4u+4+lwZmQgLXd4BLGlrc7KZPcLIW7Jpq99+Xpc30ONv7nS6F5UNOxp/HBZSSL9MafUrvJbw==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "web3-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", - "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", - "requires": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - } - } - }, - "web3-core-helpers": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", - "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", - "requires": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-method": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", - "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", - "requires": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-promievent": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", - "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-core-requestmanager": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", - "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", - "requires": { - "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" - } - }, - "web3-core-subscriptions": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", - "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" - } - }, - "web3-eth-iban": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", - "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.7.4" - } - }, - "web3-providers-http": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", - "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", - "requires": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", - "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" - } - }, - "web3-providers-ws": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", - "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", - "websocket": "^1.0.32" - } - }, - "web3-utils": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", - "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "dependencies": { - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "dependencies": { - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "requires": { - "cookiejar": "^2.1.1" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - } - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index d5c35a6e0..3f9e2ba96 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { - "name": "ethers-lib", - "version": "1.1.0", + "name": "@biconomy-sdk/ethers-lib", + "version": "1.0.0", "description": "Ethers library adapter to be used by Safe Core SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -24,17 +24,17 @@ "dist" ], "devDependencies": { + "@biconomy-sdk/core-types": "*", "@nomiclabs/hardhat-ethers": "^2.0.5", "@nomiclabs/hardhat-waffle": "^2.0.3", "@typechain/ethers-v5": "^9.0.0", "@types/node": "^17.0.23", "@typescript-eslint/eslint-plugin": "^5.17.0", "@typescript-eslint/parser": "^5.17.0", - "ethers": "^5.5.3", - "core-types": "*", "eslint": "^8.12.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", + "ethers": "^5.5.3", "hardhat": "^2.9.2", "prettier": "^2.6.2", "ts-node": "^10.7.0", @@ -42,6 +42,7 @@ "typescript": "^4.6.3" }, "dependencies": { + "@biconomy-sdk/core-types": "*", "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0" }, diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index 179e46ee7..dc4e17b6d 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -8,7 +8,7 @@ import { EthAdapterTransaction, GetContractProps, SmartWalletContract -} from 'core-types' +} from '@biconomy-sdk/core-types' import { validateEip3770Address } from '@gnosis.pm/safe-core-sdk-utils' import { ethers } from 'ethers' import { diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts index 0782ebc96..4fd896bf4 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts @@ -1,4 +1,4 @@ -import { EntryPointContract, UserOperation, TransactionResult } from 'core-types' +import { EntryPointContract, UserOperation, TransactionResult } from '@biconomy-sdk/core-types' import { EntryPointContract as EntryPointContract_TypeChain, EntryPointContractInterface diff --git a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts index 62c0f5db0..d29b77326 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts @@ -1,4 +1,4 @@ -import { MultiSendContract } from 'core-types' +import { MultiSendContract } from '@biconomy-sdk/core-types' import { MultiSendContract as MultiSend_TypeChain, MultiSendContractInterface diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts index 3b4f9f4b7..b85d3fbd2 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts @@ -7,7 +7,7 @@ import { TransactionOptions, FeeRefundData, TransactionResult -} from 'core-types' +} from '@biconomy-sdk/core-types' import { toTxResult } from '../../utils' import { SmartWalletContract as SmartWalletContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' import { SmartWalletContractInterface } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts index 15559759f..f870f7d2e 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts @@ -1,4 +1,4 @@ -import { SmartWalletFactoryContract, TransactionResult } from 'core-types' +import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../utils' import { SmartWalletFactoryContract as SmartWalletFactoryContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' diff --git a/packages/node-client/package-lock.json b/packages/node-client/package-lock.json deleted file mode 100644 index e32803533..000000000 --- a/packages/node-client/package-lock.json +++ /dev/null @@ -1,5289 +0,0 @@ -{ - "name": "node-client", - "version": "1.1.2", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - } - }, - "@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - } - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/vm": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", - "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.3", - "@ethereumjs/blockchain": "^5.5.3", - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.4", - "rustbn.js": "~0.2.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@gnosis.pm/safe-core-sdk-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.1.0.tgz", - "integrity": "sha512-VvEqWCliA6KXwt9N4YTzN5JcqnhLxLjUTU7trpQqQ7wU9OQcF+Kdrer86wDOF5lYZVE24zudw1s4gW3dxUkm6A==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "^1.12.0", - "web3-core": "^1.7.1" - } - }, - "@gnosis.pm/safe-core-sdk-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.1.0.tgz", - "integrity": "sha512-ZH1Ps3qsreczKHHfBb34dj55LDTiU7WAeKD7jgKnhiloGWRniLv+cbBfwFQNAezoyANvgyI5ky64wgwm1bm1YA==", - "dev": true, - "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "web3-utils": "^1.7.1" - } - }, - "@gnosis.pm/safe-deployments": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", - "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", - "dev": true, - "requires": { - "semver": "^7.3.7" - } - }, - "@gnosis.pm/safe-ethers-lib": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.1.0.tgz", - "integrity": "sha512-MG01hGu/3q/sl9fXE3sU7CMVpVMJ4k9/ro1JVZaE29jmsar1cHFUOJNws7Do3orxTLQZ2egkARcmyv+l673FoA==", - "dev": true, - "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" - } - }, - "@gnosis.pm/safe-web3-lib": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.1.0.tgz", - "integrity": "sha512-B4wnVDtiK2EBuXwsI0hTYlACLVr8F9qvpFC16/Smdg8fWv/r6WpK7yB86DRyW9R1BEwkjmPvpvx9rqIKW5xRkA==", - "dev": true, - "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@jridgewell/resolve-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", - "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@nomiclabs/hardhat-ethers": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.6.tgz", - "integrity": "sha512-q2Cjp20IB48rEn2NPjR1qxsIQBvFVYW9rFRCFq+bC4RUrn1Ljz3g4wM8uSlgIBZYBi2JMXxmOzFqHraczxq4Ng==", - "dev": true - }, - "@nomiclabs/hardhat-waffle": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", - "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", - "dev": true, - "requires": { - "@types/sinon-chai": "^3.2.3", - "@types/web3": "1.0.19" - } - }, - "@nomiclabs/hardhat-web3": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz", - "integrity": "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==", - "dev": true, - "requires": { - "@types/bignumber.js": "^5.0.0" - } - }, - "@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "requires": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - } - }, - "@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true - }, - "@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@solidity-parser/parser": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.2.tgz", - "integrity": "sha512-10cr0s+MtRtqjEw0WFJrm2rwULN30xx7btd/v9cmqME2617/2M5MbHDkFIGIGTa7lwNw4bN9mVGfhlLzrYw8pA==", - "dev": true, - "requires": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", - "dev": true - }, - "@types/bignumber.js": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", - "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==", - "dev": true, - "requires": { - "bignumber.js": "*" - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/chai": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", - "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", - "dev": true - }, - "@types/chai-as-promised": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", - "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", - "dev": true, - "requires": { - "@types/chai": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", - "dev": true - }, - "@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dev": true, - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "@types/mkdirp": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", - "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true - }, - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "@types/node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", - "dev": true - }, - "@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/sinon": { - "version": "10.0.12", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.12.tgz", - "integrity": "sha512-uWf4QJ4oky/GckJ1MYQxU52cgVDcXwBhDkpvLbi4EKoLPqLE4MOH6T/ttM33l3hi0oZ882G6oIzWv/oupRYSxQ==", - "dev": true, - "requires": { - "@types/sinonjs__fake-timers": "*" - } - }, - "@types/sinon-chai": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", - "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", - "dev": true - }, - "@types/underscore": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", - "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", - "dev": true - }, - "@types/web3": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", - "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", - "dev": true, - "requires": { - "@types/bn.js": "*", - "@types/underscore": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", - "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/type-utils": "5.30.0", - "@typescript-eslint/utils": "5.30.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", - "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", - "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", - "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", - "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.30.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", - "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", - "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", - "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "requires": { - "async": "^2.4.0" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "dev": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, - "requires": { - "check-error": "^1.0.2" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", - "dev": true - }, - "core-js-pure": { - "version": "3.23.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", - "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==", - "dev": true - }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - } - } - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", - "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "dev": true, - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dev": true, - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dev": true, - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", - "dev": true - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "hardhat": { - "version": "2.9.9", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.9.9.tgz", - "integrity": "sha512-Qv7SXnRc0zq1kGXruNnSKpP3eFccXMR5Qv6GVX9hBIJ5efN0PflKPq92aQ5Cv3jrjJeRevLznWZVz7bttXhVfw==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/blockchain": "^5.5.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/tx": "^3.5.1", - "@ethereumjs/vm": "^5.9.0", - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@sentry/node": "^5.18.1", - "@solidity-parser/parser": "^0.14.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^0.1.2", - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^7.1.4", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "lodash": "^4.17.11", - "merkle-patricia-tree": "^4.2.4", - "mnemonist": "^0.38.0", - "mocha": "^9.2.0", - "p-map": "^4.0.0", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "slash": "^3.0.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "true-case-path": "^2.2.1", - "tsort": "0.0.1", - "undici": "^5.4.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==", - "dev": true - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "requires": { - "fp-ts": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "requires": { - "buffer": "^5.6.0" - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - } - }, - "level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dev": true, - "requires": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - } - }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dev": true, - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - }, - "level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true - }, - "lint-staged": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz", - "integrity": "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==", - "dev": true, - "requires": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.16", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^5.1.1", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.5.0", - "string-argv": "^0.3.1", - "supports-color": "^9.2.2", - "yaml": "^1.10.2" - }, - "dependencies": { - "commander": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", - "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "supports-color": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", - "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", - "dev": true - } - } - }, - "listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", - "dev": true, - "requires": { - "get-func-name": "^2.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", - "dev": true - } - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "requires": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "requires": { - "obliterator": "^2.0.0" - } - }, - "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dev": true, - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "dev": true, - "requires": { - "http-https": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pidtree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", - "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dev": true, - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true - }, - "rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "dev": true, - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true - } - } - }, - "solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", - "dev": true - }, - "ts-essentials": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", - "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", - "dev": true - }, - "ts-generator": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", - "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", - "dev": true, - "requires": { - "@types/mkdirp": "^0.5.2", - "@types/prettier": "^2.1.1", - "@types/resolve": "^0.0.8", - "chalk": "^2.4.1", - "glob": "^7.1.2", - "mkdirp": "^0.5.1", - "prettier": "^2.1.2", - "resolve": "^1.8.1", - "ts-essentials": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "undici": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.5.1.tgz", - "integrity": "sha512-MEvryPLf18HvlCbLSzCW0U00IMftKGI5udnjrQbC5D4P0Hodwffhv+iGfWuJwg16Y/TK11ZFK8i+BPVW2z/eAw==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "dev": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "web3-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", - "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - } - } - }, - "web3-core-helpers": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", - "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", - "dev": true, - "requires": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-method": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", - "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", - "dev": true, - "requires": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-promievent": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", - "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", - "dev": true, - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-core-requestmanager": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", - "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", - "dev": true, - "requires": { - "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" - } - }, - "web3-core-subscriptions": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", - "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", - "dev": true, - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" - } - }, - "web3-eth-iban": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", - "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", - "dev": true, - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.7.4" - } - }, - "web3-providers-http": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", - "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", - "dev": true, - "requires": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", - "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", - "dev": true, - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" - } - }, - "web3-providers-ws": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", - "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", - "dev": true, - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", - "websocket": "^1.0.32" - } - }, - "web3-utils": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", - "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", - "dev": true, - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dev": true, - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "dev": true, - "requires": { - "cookiejar": "^2.1.1" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/packages/node-client/package.json b/packages/node-client/package.json index d4a75ef78..b88f57322 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { - "name": "node-client", - "version": "1.1.2", + "name": "@biconomy-sdk/node-client", + "version": "1.0.0", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -28,6 +28,7 @@ "dist" ], "devDependencies": { + "@biconomy-sdk/core-types": "*", "@gnosis.pm/safe-ethers-lib": "^1.1.0", "@gnosis.pm/safe-web3-lib": "^1.1.0", "@nomiclabs/hardhat-ethers": "^2.0.5", @@ -53,8 +54,7 @@ "rimraf": "^3.0.2", "ts-generator": "^0.1.1", "ts-node": "^10.7.0", - "typescript": "^4.6.3", - "core-types": "*" + "typescript": "^4.6.3" }, "lint-staged": { "src/**/!(*test).ts": [ @@ -68,6 +68,7 @@ } }, "dependencies": { + "@biconomy-sdk/core-types": "*", "@ethersproject/abstract-signer": "^5.6.0", "node-fetch": "^2.6.6" } diff --git a/packages/node-client/src/SafeServiceClient.ts b/packages/node-client/src/SafeServiceClient.ts index 94ec11c06..b4c4b6768 100644 --- a/packages/node-client/src/SafeServiceClient.ts +++ b/packages/node-client/src/SafeServiceClient.ts @@ -1,5 +1,5 @@ import { Signer } from '@ethersproject/abstract-signer' -import { EthAdapter } from 'core-types' +import { EthAdapter } from '@biconomy-sdk/core-types' import SafeTransactionService from './SafeTransactionService' import { AllTransactionsListResponse, diff --git a/packages/node-client/src/types/safeTransactionServiceTypes.ts b/packages/node-client/src/types/safeTransactionServiceTypes.ts index 8549d83b0..82a2fb3f4 100644 --- a/packages/node-client/src/types/safeTransactionServiceTypes.ts +++ b/packages/node-client/src/types/safeTransactionServiceTypes.ts @@ -1,5 +1,5 @@ import { Signer } from '@ethersproject/abstract-signer' -import { SmartAccountTrx } from 'core-types' +import { SmartAccountTrx } from '@biconomy-sdk/core-types' export type SmartAccountInfoResponse = { readonly name: string diff --git a/packages/node-client/tests/endpoint/index.test.ts b/packages/node-client/tests/endpoint/index.test.ts index 664d1a48e..88ca24f45 100644 --- a/packages/node-client/tests/endpoint/index.test.ts +++ b/packages/node-client/tests/endpoint/index.test.ts @@ -1,7 +1,7 @@ import { getDefaultProvider } from '@ethersproject/providers' import { Wallet } from '@ethersproject/wallet' import Safe from '@gnosis.pm/safe-core-sdk' -import { EthAdapter, SmartAccountTrxDataPartial } from 'core-types' +import { EthAdapter, SmartAccountTrxDataPartial } from '@biconomy-sdk/core-types' import chai from 'chai' import chaiAsPromised from 'chai-as-promised' import sinon from 'sinon' diff --git a/packages/relayer/README.md b/packages/relayer/README.md new file mode 100644 index 000000000..adeadfc52 --- /dev/null +++ b/packages/relayer/README.md @@ -0,0 +1,11 @@ +# `relayer` + +> TODO: description + +## Usage + +``` +const relayer = require('relayer'); + +// TODO: DEMONSTRATE API +``` diff --git a/packages/relayer/package.json b/packages/relayer/package.json new file mode 100644 index 000000000..16d2fa849 --- /dev/null +++ b/packages/relayer/package.json @@ -0,0 +1,30 @@ +{ + "name": "@biconomy-sdk/relayer", + "version": "1.0.0", + "description": "relayer client to dispatach transactions on blockchain", + "keywords": [ + "relayer" + ], + "author": "livingrockrises ", + "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", + "license": "MIT", + "main": "dist/src/index.js", + "typings": "dist/src/index.d.ts", + "directories": { + "lib": "lib", + "test": "__tests__" + }, + "files": [ + "lib" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" + }, + "scripts": { + "test": "echo \"Error: run tests from root\" && exit 1" + }, + "bugs": { + "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" + } +} diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/relayer/tsconfig.json b/packages/relayer/tsconfig.json new file mode 100644 index 000000000..c4202fe28 --- /dev/null +++ b/packages/relayer/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src" + }, + "include": ["src"] + } + \ No newline at end of file diff --git a/packages/wallet/package.json b/packages/smart-account/package.json similarity index 83% rename from packages/wallet/package.json rename to packages/smart-account/package.json index 28bf989cc..1eb87d2ac 100644 --- a/packages/wallet/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { - "name": "@biconomy/smart-account", - "version": "1.1.0", + "name": "@biconomy-sdk/smart-account", + "version": "1.0.0", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -22,19 +22,21 @@ "dist" ], "devDependencies": { + "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/ethers-lib": "*", "@types/node": "^17.0.23", "@typescript-eslint/eslint-plugin": "^5.17.0", "@typescript-eslint/parser": "^5.17.0", - "core-types": "*", "eslint": "^8.12.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", - "ethers-lib": "*", "ethers": "^5.5.3", "prettier": "^2.6.2", "typescript": "^4.6.3" }, "dependencies": { + "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/ethers-lib": "*", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", diff --git a/packages/wallet/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts similarity index 98% rename from packages/wallet/src/SmartAccount.ts rename to packages/smart-account/src/SmartAccount.ts index 5abe376e7..da1251c34 100644 --- a/packages/wallet/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -1,5 +1,5 @@ import { SmartAccountConfig, networks, NetworkConfig, ChainId } from './types' -import EthersAdapter from 'ethers-lib' +import EthersAdapter from '@biconomy-sdk/ethers-lib' import { ethers } from 'ethers' import { getSmartWalletFactoryContract, @@ -11,7 +11,7 @@ import { SmartWalletContract, MultiSendContract, TransactionResult -} from 'core-types' +} from '@biconomy-sdk/core-types' class SmartAccount { // { ethAdapter } is a window that gave access to all the Implemented function of it diff --git a/packages/wallet/src/assets/MultiSend.json b/packages/smart-account/src/assets/MultiSend.json similarity index 100% rename from packages/wallet/src/assets/MultiSend.json rename to packages/smart-account/src/assets/MultiSend.json diff --git a/packages/wallet/src/assets/SmartWallet.json b/packages/smart-account/src/assets/SmartWallet.json similarity index 100% rename from packages/wallet/src/assets/SmartWallet.json rename to packages/smart-account/src/assets/SmartWallet.json diff --git a/packages/wallet/src/assets/WalletFactory.json b/packages/smart-account/src/assets/WalletFactory.json similarity index 100% rename from packages/wallet/src/assets/WalletFactory.json rename to packages/smart-account/src/assets/WalletFactory.json diff --git a/packages/wallet/src/index.ts b/packages/smart-account/src/index.ts similarity index 100% rename from packages/wallet/src/index.ts rename to packages/smart-account/src/index.ts diff --git a/packages/wallet/src/types.ts b/packages/smart-account/src/types.ts similarity index 100% rename from packages/wallet/src/types.ts rename to packages/smart-account/src/types.ts diff --git a/packages/wallet/src/utils/FetchContractsInfo.ts b/packages/smart-account/src/utils/FetchContractsInfo.ts similarity index 89% rename from packages/wallet/src/utils/FetchContractsInfo.ts rename to packages/smart-account/src/utils/FetchContractsInfo.ts index d8d3acc07..9366be8be 100644 --- a/packages/wallet/src/utils/FetchContractsInfo.ts +++ b/packages/smart-account/src/utils/FetchContractsInfo.ts @@ -1,9 +1,9 @@ -import { SmartWalletContract, SmartWalletFactoryContract, MultiSendContract } from 'core-types' +import { SmartWalletContract, SmartWalletFactoryContract, MultiSendContract } from '@biconomy-sdk/core-types' import SmartWalletFactory from '../assets/WalletFactory.json' import SmartWallet from '../assets/SmartWallet.json' import MultiSend from '../assets/MultiSend.json' -import EthersAdapter from 'ethers-lib' +import EthersAdapter from '@biconomy-sdk/ethers-lib' export function getSmartWalletFactoryContract( chainId: number, diff --git a/packages/wallet/tsconfig.json b/packages/smart-account/tsconfig.json similarity index 100% rename from packages/wallet/tsconfig.json rename to packages/smart-account/tsconfig.json diff --git a/packages/wallet/package-lock.json b/packages/wallet/package-lock.json deleted file mode 100644 index bf96d1f13..000000000 --- a/packages/wallet/package-lock.json +++ /dev/null @@ -1,2679 +0,0 @@ -{ - "name": "@biconomy-sdk/wallet", - "version": "1.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/basex": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", - "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/hdnode": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", - "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/json-wallets": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", - "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", - "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/sha2": "^5.6.1" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/providers": { - "version": "5.6.8", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", - "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/base64": "^5.6.1", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "@ethersproject/random": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", - "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/sha2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", - "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", - "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/units": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", - "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/wallet": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", - "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/json-wallets": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/wordlists": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", - "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@gnosis.pm/safe-deployments": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", - "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", - "requires": { - "semver": "^7.3.7" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", - "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/type-utils": "5.30.0", - "@typescript-eslint/utils": "5.30.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", - "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", - "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", - "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", - "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.30.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", - "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", - "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", - "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", - "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethers": { - "version": "5.6.9", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", - "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", - "dev": true, - "requires": { - "@ethersproject/abi": "5.6.4", - "@ethersproject/abstract-provider": "5.6.1", - "@ethersproject/abstract-signer": "5.6.2", - "@ethersproject/address": "5.6.1", - "@ethersproject/base64": "5.6.1", - "@ethersproject/basex": "5.6.1", - "@ethersproject/bignumber": "5.6.2", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.1", - "@ethersproject/contracts": "5.6.2", - "@ethersproject/hash": "5.6.1", - "@ethersproject/hdnode": "5.6.2", - "@ethersproject/json-wallets": "5.6.1", - "@ethersproject/keccak256": "5.6.1", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.4", - "@ethersproject/pbkdf2": "5.6.1", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.8", - "@ethersproject/random": "5.6.1", - "@ethersproject/rlp": "5.6.1", - "@ethersproject/sha2": "5.6.1", - "@ethersproject/signing-key": "5.6.2", - "@ethersproject/solidity": "5.6.1", - "@ethersproject/strings": "5.6.1", - "@ethersproject/transactions": "5.6.2", - "@ethersproject/units": "5.6.1", - "@ethersproject/wallet": "5.6.2", - "@ethersproject/web": "5.6.1", - "@ethersproject/wordlists": "5.6.1" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "requires": { - "http-https": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "web3-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", - "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", - "requires": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - } - } - }, - "web3-core-helpers": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", - "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", - "requires": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-method": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", - "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", - "requires": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-promievent": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", - "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-core-requestmanager": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", - "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", - "requires": { - "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" - } - }, - "web3-core-subscriptions": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", - "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" - } - }, - "web3-eth-iban": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", - "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.7.4" - } - }, - "web3-providers-http": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", - "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", - "requires": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", - "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" - } - }, - "web3-providers-ws": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", - "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", - "websocket": "^1.0.32" - } - }, - "web3-utils": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", - "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "requires": { - "cookiejar": "^2.1.1" - } - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 9cef48875..000000000 --- a/yarn.lock +++ /dev/null @@ -1,7863 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/helper-validator-identifier@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" - integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@eslint/eslintrc@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" - integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.3.2" - globals "^13.15.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" - -"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.2", "@ethereumjs/block@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.3.tgz#d96cbd7af38b92ebb3424223dbf773f5ccd27f84" - integrity sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg== - dependencies: - "@ethereumjs/common" "^2.6.5" - "@ethereumjs/tx" "^3.5.2" - ethereumjs-util "^7.1.5" - merkle-patricia-tree "^4.2.4" - -"@ethereumjs/blockchain@^5.5.2", "@ethereumjs/blockchain@^5.5.3": - version "5.5.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz#aa49a6a04789da6b66b5bcbb0d0b98efc369f640" - integrity sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/common" "^2.6.4" - "@ethereumjs/ethash" "^1.1.0" - debug "^4.3.3" - ethereumjs-util "^7.1.5" - level-mem "^5.0.1" - lru-cache "^5.1.1" - semaphore-async-await "^1.5.1" - -"@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": - version "2.6.5" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" - integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.5" - -"@ethereumjs/ethash@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" - integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== - dependencies: - "@ethereumjs/block" "^3.5.0" - "@types/levelup" "^4.3.0" - buffer-xor "^2.0.1" - ethereumjs-util "^7.1.1" - miller-rabin "^4.0.0" - -"@ethereumjs/tx@^3.5.1", "@ethereumjs/tx@^3.5.2": - version "3.5.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" - integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== - dependencies: - "@ethereumjs/common" "^2.6.4" - ethereumjs-util "^7.1.5" - -"@ethereumjs/vm@^5.9.0": - version "5.9.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.9.3.tgz#6d69202e4c132a4a1e1628ac246e92062e230823" - integrity sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg== - dependencies: - "@ethereumjs/block" "^3.6.3" - "@ethereumjs/blockchain" "^5.5.3" - "@ethereumjs/common" "^2.6.5" - "@ethereumjs/tx" "^3.5.2" - async-eventemitter "^0.2.4" - core-js-pure "^3.0.1" - debug "^4.3.3" - ethereumjs-util "^7.1.5" - functional-red-black-tree "^1.0.1" - mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.2.4" - rustbn.js "~0.2.0" - -"@ethersproject/abi@5.6.4", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.6.3": - version "5.6.4" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.4.tgz#f6e01b6ed391a505932698ecc0d9e7a99ee60362" - integrity sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg== - dependencies: - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - -"@ethersproject/abstract-provider@5.6.1", "@ethersproject/abstract-provider@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz#02ddce150785caf0c77fe036a0ebfcee61878c59" - integrity sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/networks" "^5.6.3" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/web" "^5.6.1" - -"@ethersproject/abstract-signer@5.6.2", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz#491f07fc2cbd5da258f46ec539664713950b0b33" - integrity sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ== - dependencies: - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - -"@ethersproject/address@5.6.1", "@ethersproject/address@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" - integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/rlp" "^5.6.1" - -"@ethersproject/base64@5.6.1", "@ethersproject/base64@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.1.tgz#2c40d8a0310c9d1606c2c37ae3092634b41d87cb" - integrity sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw== - dependencies: - "@ethersproject/bytes" "^5.6.1" - -"@ethersproject/basex@5.6.1", "@ethersproject/basex@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.1.tgz#badbb2f1d4a6f52ce41c9064f01eab19cc4c5305" - integrity sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - -"@ethersproject/bignumber@5.6.2", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.2.tgz#72a0717d6163fab44c47bcc82e0c550ac0315d66" - integrity sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@5.6.1", "@ethersproject/bytes@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" - integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== - dependencies: - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/constants@5.6.1", "@ethersproject/constants@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.1.tgz#e2e974cac160dd101cf79fdf879d7d18e8cb1370" - integrity sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - -"@ethersproject/contracts@5.6.2", "@ethersproject/contracts@^5.6.0": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.2.tgz#20b52e69ebc1b74274ff8e3d4e508de971c287bc" - integrity sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g== - dependencies: - "@ethersproject/abi" "^5.6.3" - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/transactions" "^5.6.2" - -"@ethersproject/hash@5.6.1", "@ethersproject/hash@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.1.tgz#224572ea4de257f05b4abf8ae58b03a67e99b0f4" - integrity sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - -"@ethersproject/hdnode@5.6.2", "@ethersproject/hdnode@^5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.2.tgz#26f3c83a3e8f1b7985c15d1db50dc2903418b2d2" - integrity sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/basex" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/pbkdf2" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/signing-key" "^5.6.2" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/wordlists" "^5.6.1" - -"@ethersproject/json-wallets@5.6.1", "@ethersproject/json-wallets@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz#3f06ba555c9c0d7da46756a12ac53483fe18dd91" - integrity sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hdnode" "^5.6.2" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/pbkdf2" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.6.1", "@ethersproject/keccak256@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.1.tgz#b867167c9b50ba1b1a92bccdd4f2d6bd168a91cc" - integrity sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA== - dependencies: - "@ethersproject/bytes" "^5.6.1" - js-sha3 "0.8.0" - -"@ethersproject/logger@5.6.0", "@ethersproject/logger@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" - integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== - -"@ethersproject/networks@5.6.4", "@ethersproject/networks@^5.6.3": - version "5.6.4" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.4.tgz#51296d8fec59e9627554f5a8a9c7791248c8dc07" - integrity sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ== - dependencies: - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/pbkdf2@5.6.1", "@ethersproject/pbkdf2@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz#f462fe320b22c0d6b1d72a9920a3963b09eb82d1" - integrity sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/sha2" "^5.6.1" - -"@ethersproject/properties@5.6.0", "@ethersproject/properties@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" - integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== - dependencies: - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/providers@5.6.8", "@ethersproject/providers@^5.6.8": - version "5.6.8" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.8.tgz#22e6c57be215ba5545d3a46cf759d265bb4e879d" - integrity sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w== - dependencies: - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/base64" "^5.6.1" - "@ethersproject/basex" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/networks" "^5.6.3" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/rlp" "^5.6.1" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/web" "^5.6.1" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.6.1", "@ethersproject/random@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.1.tgz#66915943981bcd3e11bbd43733f5c3ba5a790255" - integrity sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/rlp@5.6.1", "@ethersproject/rlp@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.1.tgz#df8311e6f9f24dcb03d59a2bac457a28a4fe2bd8" - integrity sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/sha2@5.6.1", "@ethersproject/sha2@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.1.tgz#211f14d3f5da5301c8972a8827770b6fd3e51656" - integrity sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.6.2", "@ethersproject/signing-key@^5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.2.tgz#8a51b111e4d62e5a62aee1da1e088d12de0614a3" - integrity sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.1.tgz#5845e71182c66d32e6ec5eefd041fca091a473e2" - integrity sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - -"@ethersproject/strings@5.6.1", "@ethersproject/strings@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.1.tgz#dbc1b7f901db822b5cafd4ebf01ca93c373f8952" - integrity sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/transactions@5.6.2", "@ethersproject/transactions@^5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.2.tgz#793a774c01ced9fe7073985bb95a4b4e57a6370b" - integrity sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q== - dependencies: - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/rlp" "^5.6.1" - "@ethersproject/signing-key" "^5.6.2" - -"@ethersproject/units@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.1.tgz#ecc590d16d37c8f9ef4e89e2005bda7ddc6a4e6f" - integrity sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/wallet@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.2.tgz#cd61429d1e934681e413f4bc847a5f2f87e3a03c" - integrity sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg== - dependencies: - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/hdnode" "^5.6.2" - "@ethersproject/json-wallets" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/signing-key" "^5.6.2" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/wordlists" "^5.6.1" - -"@ethersproject/web@5.6.1", "@ethersproject/web@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.1.tgz#6e2bd3ebadd033e6fe57d072db2b69ad2c9bdf5d" - integrity sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA== - dependencies: - "@ethersproject/base64" "^5.6.1" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - -"@ethersproject/wordlists@5.6.1", "@ethersproject/wordlists@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.1.tgz#1e78e2740a8a21e9e99947e47979d72e130aeda1" - integrity sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - -"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@gnosis.pm/safe-core-sdk-types@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.1.0.tgz#dce372445ddbaf7eb960cfe98f5d4b2557004040" - integrity sha512-VvEqWCliA6KXwt9N4YTzN5JcqnhLxLjUTU7trpQqQ7wU9OQcF+Kdrer86wDOF5lYZVE24zudw1s4gW3dxUkm6A== - dependencies: - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/contracts" "^5.6.0" - "@gnosis.pm/safe-deployments" "^1.12.0" - web3-core "^1.7.1" - -"@gnosis.pm/safe-core-sdk-utils@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.1.0.tgz#3fb93038cac143523fcfa8200010034cc42166a6" - integrity sha512-ZH1Ps3qsreczKHHfBb34dj55LDTiU7WAeKD7jgKnhiloGWRniLv+cbBfwFQNAezoyANvgyI5ky64wgwm1bm1YA== - dependencies: - "@gnosis.pm/safe-core-sdk-types" "^1.1.0" - web3-utils "^1.7.1" - -"@gnosis.pm/safe-deployments@^1.12.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz#71ed9a37437a3080443c49aa65308f2d8839d751" - integrity sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew== - dependencies: - semver "^7.3.7" - -"@gnosis.pm/safe-ethers-lib@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.1.0.tgz#06dfe132f3590fbc5406918a193812cd922c641e" - integrity sha512-MG01hGu/3q/sl9fXE3sU7CMVpVMJ4k9/ro1JVZaE29jmsar1cHFUOJNws7Do3orxTLQZ2egkARcmyv+l673FoA== - dependencies: - "@gnosis.pm/safe-core-sdk-types" "^1.1.0" - "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" - -"@gnosis.pm/safe-web3-lib@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.1.0.tgz#1d1bd986fe77a1af04afcf8443a6119e0617a89a" - integrity sha512-B4wnVDtiK2EBuXwsI0hTYlACLVr8F9qvpFC16/Smdg8fWv/r6WpK7yB86DRyW9R1BEwkjmPvpvx9rqIKW5xRkA== - dependencies: - "@gnosis.pm/safe-core-sdk-types" "^1.1.0" - "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" - -"@humanwhocodes/config-array@^0.9.2": - version "0.9.5" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" - integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@hutson/parse-repository-url@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" - integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== - -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz#687cc2bbf243f4e9a868ecf2262318e2658873a1" - integrity sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@lerna/add@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.1.6.tgz#f839096084a5d34da9e4813ea230da16c99b54c2" - integrity sha512-+dc5LUxFSxlTgDcC+nTdbFnUphmcGsypPF0eeYPc6tqUrpOpp3Ubn07dRGG0DbpZjk/roZj38DAvx7LYFalZAQ== - dependencies: - "@lerna/bootstrap" "5.1.6" - "@lerna/command" "5.1.6" - "@lerna/filter-options" "5.1.6" - "@lerna/npm-conf" "5.1.6" - "@lerna/validation-error" "5.1.6" - dedent "^0.7.0" - npm-package-arg "^8.1.0" - p-map "^4.0.0" - pacote "^13.4.1" - semver "^7.3.4" - -"@lerna/bootstrap@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-5.1.6.tgz#70c643071cade4568fc9b22798a183afd787fb66" - integrity sha512-mCPYySlkreBmhK+uKhnwmBynVN0v7a6DCy4n3WiZ6oJ2puM/F1+8vjCBsWKmnR8YiLtUQt0dwL1fm/dCZgZy8g== - dependencies: - "@lerna/command" "5.1.6" - "@lerna/filter-options" "5.1.6" - "@lerna/has-npm-version" "5.1.6" - "@lerna/npm-install" "5.1.6" - "@lerna/package-graph" "5.1.6" - "@lerna/pulse-till-done" "5.1.6" - "@lerna/rimraf-dir" "5.1.6" - "@lerna/run-lifecycle" "5.1.6" - "@lerna/run-topologically" "5.1.6" - "@lerna/symlink-binary" "5.1.6" - "@lerna/symlink-dependencies" "5.1.6" - "@lerna/validation-error" "5.1.6" - "@npmcli/arborist" "5.2.0" - dedent "^0.7.0" - get-port "^5.1.1" - multimatch "^5.0.0" - npm-package-arg "^8.1.0" - npmlog "^6.0.2" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" - semver "^7.3.4" - -"@lerna/changed@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-5.1.6.tgz#bf1c60cb90ac451191eb8cfd3fc807ee7a05ad19" - integrity sha512-+dy+qcKZTXmETJm9VVQHuVXfk9OeqPNcJ3qeMvvYBRuMYttEbGZDOrcCjE2vomLGhLpXElHKXnCaJEDAwEla8Q== - dependencies: - "@lerna/collect-updates" "5.1.6" - "@lerna/command" "5.1.6" - "@lerna/listable" "5.1.6" - "@lerna/output" "5.1.6" - -"@lerna/check-working-tree@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-5.1.6.tgz#c9913325ef8467990217823cfe652e40e1acf964" - integrity sha512-WeTO1Vjyw7ZZzM/o1Q+UWFYvvbludM++MaDhEodpNZxL1bDMR3/bvtKa/SNq52aBr4nSKOLVz1BO0Lg+yNaZXQ== - dependencies: - "@lerna/collect-uncommitted" "5.1.6" - "@lerna/describe-ref" "5.1.6" - "@lerna/validation-error" "5.1.6" - -"@lerna/child-process@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-5.1.6.tgz#d9e88c4fb8287d568938db395937b11c94627d7d" - integrity sha512-f0SPxNqXaurSoUMHDVCDjU1uA7/Qa9HnGdxiE9OoDaXaErlVloUT7Wpjbp5khryaJZC4PQ9HnnI3FSA/S/SHaA== - dependencies: - chalk "^4.1.0" - execa "^5.0.0" - strong-log-transformer "^2.1.0" - -"@lerna/clean@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-5.1.6.tgz#5507910ebde670bf4cb843ddb86844f441038f39" - integrity sha512-SHRXg6R38NfAtwS8R3hYAacmdDds2Z/51G7YE8bMvmoE4c60eFsBwsCXwwdpPBXL/SdfEGSzoxwEvWHi+f6r7g== - dependencies: - "@lerna/command" "5.1.6" - "@lerna/filter-options" "5.1.6" - "@lerna/prompt" "5.1.6" - "@lerna/pulse-till-done" "5.1.6" - "@lerna/rimraf-dir" "5.1.6" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" - -"@lerna/cli@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-5.1.6.tgz#94a95cfdc0dd1e482f7b609a8771005e29cb3330" - integrity sha512-+cQoaOBK2ISw0z5uuHoP2QlV3EZZMdTPuPCVsLDuUwiJCDI3hF3Ps2qQauAZTKO8Ull7z3qid8Yv8sLNEMNrCA== - dependencies: - "@lerna/global-options" "5.1.6" - dedent "^0.7.0" - npmlog "^6.0.2" - yargs "^16.2.0" - -"@lerna/collect-uncommitted@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-5.1.6.tgz#56d0994e4039ec340c0c7d0e6ce5a2cd78df6079" - integrity sha512-IvAmcaENJZKXjTsxsalM8+GuApooqcsKJ74q/9yUGwO3FIMevQyz/VDOFDq7e0WCQoq6ttrdNihEjU/QTjNsMw== - dependencies: - "@lerna/child-process" "5.1.6" - chalk "^4.1.0" - npmlog "^6.0.2" - -"@lerna/collect-updates@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-5.1.6.tgz#1ff373f01e5cd8b849f5918f2ab8585da3612433" - integrity sha512-CjKK3bteJpDzqrNOZMGYSwqF5CQsjiPv6soRdayBlJGXB3YW32M2UFcPD77Fvef/Q0xM7FEch3R3ZnBxgzGprg== - dependencies: - "@lerna/child-process" "5.1.6" - "@lerna/describe-ref" "5.1.6" - minimatch "^3.0.4" - npmlog "^6.0.2" - slash "^3.0.0" - -"@lerna/command@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-5.1.6.tgz#22b4218d2ae5fc6f41ef7024d2b55995f8b4d986" - integrity sha512-zRiQels/N8LrR3ntkOn9dRE/0kzRKYTvJTdWcjfF7BC7Lz9VsNhPVy7tdv+Un5GZjVKhDQa/Tpn1h2t6/SLaSQ== - dependencies: - "@lerna/child-process" "5.1.6" - "@lerna/package-graph" "5.1.6" - "@lerna/project" "5.1.6" - "@lerna/validation-error" "5.1.6" - "@lerna/write-log-file" "5.1.6" - clone-deep "^4.0.1" - dedent "^0.7.0" - execa "^5.0.0" - is-ci "^2.0.0" - npmlog "^6.0.2" - -"@lerna/conventional-commits@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-5.1.6.tgz#a37f671a46974ed7221e2fab801d5d41de9eb069" - integrity sha512-kgdQNglEtsIL6wWAhJieghcvvgpZxG2t2HPy+G/wx1qUbeUqTVkw0z88BDDZ7xOfQh6ffJ5GvLZhAj+LjijYxQ== - dependencies: - "@lerna/validation-error" "5.1.6" - conventional-changelog-angular "^5.0.12" - conventional-changelog-core "^4.2.2" - conventional-recommended-bump "^6.1.0" - fs-extra "^9.1.0" - get-stream "^6.0.0" - npm-package-arg "^8.1.0" - npmlog "^6.0.2" - pify "^5.0.0" - semver "^7.3.4" - -"@lerna/create-symlink@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-5.1.6.tgz#1a8e003a194da246e3ba0a22d7b4e4c847c15809" - integrity sha512-qkooK66GY2veqHEarbMraCzdgFpg8hwt3vjuBp9sMddYccXb7HHIsTXIOJPn4H5xFizblcRzf8fUJ73XkQZpUw== - dependencies: - cmd-shim "^4.1.0" - fs-extra "^9.1.0" - npmlog "^6.0.2" - -"@lerna/create@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-5.1.6.tgz#0e84aabcb4777c17b080f732b9e53d69aa8ae9cb" - integrity sha512-KVwxoYQsojgoUl3AxYSOM40Pa0Coo0SLKV57abVKfHmxfIEyvcGgtxNn6eA3M1lDVntqdlaBmNatkZRt3N1EHg== - dependencies: - "@lerna/child-process" "5.1.6" - "@lerna/command" "5.1.6" - "@lerna/npm-conf" "5.1.6" - "@lerna/validation-error" "5.1.6" - dedent "^0.7.0" - fs-extra "^9.1.0" - globby "^11.0.2" - init-package-json "^2.0.2" - npm-package-arg "^8.1.0" - p-reduce "^2.1.0" - pacote "^13.4.1" - pify "^5.0.0" - semver "^7.3.4" - slash "^3.0.0" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^3.0.0" - whatwg-url "^8.4.0" - yargs-parser "20.2.4" - -"@lerna/describe-ref@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-5.1.6.tgz#417c4f55b9b3a7d76131fe2da5dd1fa891c7f769" - integrity sha512-1VIy0hTkTnlcPqy5Q1hBMJALZbVhjMvRhCnzSgkP0dEuYjaRTyxr0DbhZ4CThREQuqfE3PB2f3DaHVRO8pSSeA== - dependencies: - "@lerna/child-process" "5.1.6" - npmlog "^6.0.2" - -"@lerna/diff@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-5.1.6.tgz#07b1cc1cc6a1b38d05a4779d5915468f938d7dfc" - integrity sha512-UdZ2yHkeTczfwevY8zTIz3kX9gl57e7fkVfNM5zEXifvhbmIozjreurgD2LWf6k/fkEORaFeQ+4dcWGerE70rQ== - dependencies: - "@lerna/child-process" "5.1.6" - "@lerna/command" "5.1.6" - "@lerna/validation-error" "5.1.6" - npmlog "^6.0.2" - -"@lerna/exec@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-5.1.6.tgz#de3fb272a14f6c66d4f6bd798ccd458bd4475ef7" - integrity sha512-1OGca09bVdMD5a2jr7kBQMyWMger6rzwgBWOdHxPaIajPJVUTqhcLBrtJA9qVZol7jztWgDLR3mFxrvmqGijaQ== - dependencies: - "@lerna/child-process" "5.1.6" - "@lerna/command" "5.1.6" - "@lerna/filter-options" "5.1.6" - "@lerna/profiler" "5.1.6" - "@lerna/run-topologically" "5.1.6" - "@lerna/validation-error" "5.1.6" - p-map "^4.0.0" - -"@lerna/filter-options@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-5.1.6.tgz#cd9a9bba7ec040f5165d46cef5f0496bef140881" - integrity sha512-lssUzYGXEJONS14NHCMp5ddL2aNLamDQufYJh9ziNswcG2lxnis+aeboPxCAQooLptGqcIs6QXkcLo27GXsmbg== - dependencies: - "@lerna/collect-updates" "5.1.6" - "@lerna/filter-packages" "5.1.6" - dedent "^0.7.0" - npmlog "^6.0.2" - -"@lerna/filter-packages@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-5.1.6.tgz#438477438fec319d237d35833cd147323f3c800e" - integrity sha512-5cpAdwQoaGsutsY0xmd0x59IixFVZdpovxXiuhIGAakBdrwbNxNpstqJjnOEakOZ/arVQ0ozTUtZK7Vk0GjR9A== - dependencies: - "@lerna/validation-error" "5.1.6" - multimatch "^5.0.0" - npmlog "^6.0.2" - -"@lerna/get-npm-exec-opts@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.1.6.tgz#83f81184ac295c3423752b50382b8e0665c987f4" - integrity sha512-YQDHGrN/Ti56sAwBkV5y/Bn2H/aJ8fQzKG+blWdkcJgoBV04I5po0IbgKiGKl57+pd2bPpDEtcA6WYPyI1Spfw== - dependencies: - npmlog "^6.0.2" - -"@lerna/get-packed@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-5.1.6.tgz#af3a2992849573b5dece17322c5d9ce80fd9f832" - integrity sha512-m2LojNTkwSiC5dqvLP2gCj5ljPE1e8I2G/U8hIqdVttMwz5JAGbIx3MfACUBG83d5FzSqnCIA1xNkrEZFB4cQg== - dependencies: - fs-extra "^9.1.0" - ssri "^8.0.1" - tar "^6.1.0" - -"@lerna/github-client@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-5.1.6.tgz#6c20168ee8dc8ac55f2296ffb9ff204f3bc12664" - integrity sha512-ZydjvlhjUKT9HrB1xdcfBB7u/9Vlod1U2V91qj2CqCaWfwG5ob9jXK4v6tLEzZMGxUKKE2OQCyF7o20tHfkcJQ== - dependencies: - "@lerna/child-process" "5.1.6" - "@octokit/plugin-enterprise-rest" "^6.0.1" - "@octokit/rest" "^18.1.0" - git-url-parse "^11.4.4" - npmlog "^6.0.2" - -"@lerna/gitlab-client@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-5.1.6.tgz#1d600363ccfb798a93ce41a2a62084a148d57125" - integrity sha512-ck5XsIz7mQdBNtfKhH4dPrD6t1UZxWBrQeIUsCLO+NorXqYcG8Oqvmzrfm0iByCvaC1QCf+zImJYvMOzjozIpg== - dependencies: - node-fetch "^2.6.1" - npmlog "^6.0.2" - whatwg-url "^8.4.0" - -"@lerna/global-options@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-5.1.6.tgz#f6f6f4988c1dcb39d3877c0ef629e0256ed81b44" - integrity sha512-NHMVGs5zhxbtqnBuwujzanYhf7q/HsXBtPn0M/eJpEvcAXaMZgttUMyS2/1JnAUelrAbSMbT+0iOUzSlyD1gtw== - -"@lerna/has-npm-version@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-5.1.6.tgz#5e6f7a0b2f24382a56e654be187d0002950cf109" - integrity sha512-hDY5/qxp98oacg9fhBfbDmjuRCVHm1brdKsY76FJ4vN+m89sVhXLqqsSHNKCTiQ8OgSzokO2iQeysvgM7ZlqAg== - dependencies: - "@lerna/child-process" "5.1.6" - semver "^7.3.4" - -"@lerna/import@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-5.1.6.tgz#2cd7a8c3a5ef8df1992d0e8f8a31110a3380fb66" - integrity sha512-RhWC/3heIevWseY+jzOfGiqPmTofaYyOOqd7+SVaVdSy79TGU0crxWpUECo7COc/FMflFVa+jlk1/JSXWpqG8g== - dependencies: - "@lerna/child-process" "5.1.6" - "@lerna/command" "5.1.6" - "@lerna/prompt" "5.1.6" - "@lerna/pulse-till-done" "5.1.6" - "@lerna/validation-error" "5.1.6" - dedent "^0.7.0" - fs-extra "^9.1.0" - p-map-series "^2.1.0" - -"@lerna/info@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-5.1.6.tgz#d6f2b79a2c18eba14f8655b14601f1f84c60e61e" - integrity sha512-iB4rNweghxng4U7VUsN03M2mDRgjDr8Bv+llXGhtJoSrZ9XzJYyCvGaExG30sBr5VHaArIzJ11nnF0kSDg3bXg== - dependencies: - "@lerna/command" "5.1.6" - "@lerna/output" "5.1.6" - envinfo "^7.7.4" - -"@lerna/init@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-5.1.6.tgz#2a00a242f69a30f710fa55f39501c2aeb4cd9618" - integrity sha512-S8N2vjWcHrqaowYLrX2KEbhXrs31q5wU5sfsjaJ4UxQd/cBUXvp4OWI98lRTQmXOOcw9XwJNDHhZXIR30Pn0aA== - dependencies: - "@lerna/child-process" "5.1.6" - "@lerna/command" "5.1.6" - fs-extra "^9.1.0" - p-map "^4.0.0" - write-json-file "^4.3.0" - -"@lerna/link@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-5.1.6.tgz#93123d2b03307444440698c96ff889e56044623f" - integrity sha512-H94MHjhltS8lMA3J38fzcbtQvNe1OoaMO/ZgacC9HvrntIoepqG/2boOKprW6cnTBSwmIFVCn2+LQloBJ2Nwbw== - dependencies: - "@lerna/command" "5.1.6" - "@lerna/package-graph" "5.1.6" - "@lerna/symlink-dependencies" "5.1.6" - p-map "^4.0.0" - slash "^3.0.0" - -"@lerna/list@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-5.1.6.tgz#61e25437a3a642866cabd1a162d53e95b45c2066" - integrity sha512-GofR6H1YKoVMj0Rczk9Y+Z/y7ymOKkklRLsUJQE0nWmlKkH8/tdxGHIgfR4sX2oiwtQGfFDc8ddtLX7DHAhMiA== - dependencies: - "@lerna/command" "5.1.6" - "@lerna/filter-options" "5.1.6" - "@lerna/listable" "5.1.6" - "@lerna/output" "5.1.6" - -"@lerna/listable@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-5.1.6.tgz#4b77de64f699f96bae8ccfe07d917f68bd10ffae" - integrity sha512-Aslj1Lo/t1jnyX+uKvBY4vyAsYKqW9A6nJ8+o1egkQ/bha8Ic4dr5z7HCBKhJl73iAHRMVNn8KlxM+E7pjwsoQ== - dependencies: - "@lerna/query-graph" "5.1.6" - chalk "^4.1.0" - columnify "^1.6.0" - -"@lerna/log-packed@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-5.1.6.tgz#90b95915610b52b67ded3a62d5de20d73024eafd" - integrity sha512-yCtgNgEmicqCVb39RO9pRQQGJaugGcsKtvaS1cDLR+M7vlF8gaSvo9t4bZExFzEF5oWcPf4T1FMuhNV12h/uJg== - dependencies: - byte-size "^7.0.0" - columnify "^1.6.0" - has-unicode "^2.0.1" - npmlog "^6.0.2" - -"@lerna/npm-conf@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-5.1.6.tgz#534707babd7ad83d14c70ecb3f36b3c2c3dfa880" - integrity sha512-7x8334t9SO2bih7qJa2s8LFuSOZk5QzZ9q1xG9xNSF8BjrhjsGOVghQ1R97l/1zTkBwhqmb1sxLcvH1e21h+MQ== - dependencies: - config-chain "^1.1.12" - pify "^5.0.0" - -"@lerna/npm-dist-tag@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-5.1.6.tgz#5231193e2512669a1244c910489c26463e6bdc35" - integrity sha512-mwjnjqN+Z8z2lAAnOE/2L8OiLChCL374ltaxNOGnhLyWKdCFoit7qhiIIV05CgoE2/iJQoOZP7ioP3H7JtJbsw== - dependencies: - "@lerna/otplease" "5.1.6" - npm-package-arg "^8.1.0" - npm-registry-fetch "^9.0.0" - npmlog "^6.0.2" - -"@lerna/npm-install@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-5.1.6.tgz#424c6a18042329c1057d55d9a1c7fe52df58239f" - integrity sha512-SKqXATVPVEGS2xtNNjxGhY1/C9huxYnETelpwAB/eSLcMT4FFBVxeQ83NF9log4w+iCUaS+veElfuF2uvPxaPg== - dependencies: - "@lerna/child-process" "5.1.6" - "@lerna/get-npm-exec-opts" "5.1.6" - fs-extra "^9.1.0" - npm-package-arg "^8.1.0" - npmlog "^6.0.2" - signal-exit "^3.0.3" - write-pkg "^4.0.0" - -"@lerna/npm-publish@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-5.1.6.tgz#74b41aa670e6a043ed7841679e27424542ab8447" - integrity sha512-ce5UMVZZwjpwkKdekXc1xCtwb4ZKwRVsxHCQFoCisE1/3Pw6+5DBptBOgjmJGa1VA7glxGgp5a6aSERA5grA/g== - dependencies: - "@lerna/otplease" "5.1.6" - "@lerna/run-lifecycle" "5.1.6" - fs-extra "^9.1.0" - libnpmpublish "^4.0.0" - npm-package-arg "^8.1.0" - npmlog "^6.0.2" - pify "^5.0.0" - read-package-json "^3.0.0" - -"@lerna/npm-run-script@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-5.1.6.tgz#9d1c4b5fa615fb10a1cf55c09a1428e6c3a0b158" - integrity sha512-9M7XGnrBoitRnzAT6UGzHtBdQB+HmpsMd+ks7laK7VeqP1rR3t7XXZOm0avMBx2lSBBFSpDIkD4HV0/MeDtcZQ== - dependencies: - "@lerna/child-process" "5.1.6" - "@lerna/get-npm-exec-opts" "5.1.6" - npmlog "^6.0.2" - -"@lerna/otplease@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-5.1.6.tgz#31548e54d0e3d0853d9ac1dd1e72a464a6bb4f02" - integrity sha512-HFiiMIuP2BoiN/V8I5KS2xZjlrnBEJSKY/oIkIRFIoL/9uvHRorKjlsi0KsQLnLHx3+pZ+AL65LXjt54sJdWiQ== - dependencies: - "@lerna/prompt" "5.1.6" - -"@lerna/output@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-5.1.6.tgz#e69dd303bbb636971caf0c24e9259aafb92b207a" - integrity sha512-FjZfnDwiKHeKMEZVN2eWbVd0pKINwXRjDXV0CGo1HrTvbXQI3lcrhgoPkDE42BSALaH7E9N0YCUYOYVWlJvSzQ== - dependencies: - npmlog "^6.0.2" - -"@lerna/pack-directory@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-5.1.6.tgz#64fbd571ba346da6b0dbc4e7339851df1b97092c" - integrity sha512-dKFFQ95BheshI4eWOVYT7DF6iM8VITTwOfueLnnUe8h8OgBDHnZJOEHT+zNjvXo6sA0DtN8pvpxA8VVEroq2KQ== - dependencies: - "@lerna/get-packed" "5.1.6" - "@lerna/package" "5.1.6" - "@lerna/run-lifecycle" "5.1.6" - "@lerna/temp-write" "5.1.6" - npm-packlist "^2.1.4" - npmlog "^6.0.2" - tar "^6.1.0" - -"@lerna/package-graph@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-5.1.6.tgz#553edc82bc489449127386f420d0e0f78574b49b" - integrity sha512-kAmcZLbFcgzdwwEE34ls2hKKwLNXrp++Lb3QgLi5oZl95cGEXjhGNqECdY+hAgBxaSOAgrAd9dvxoR36zl5LJw== - dependencies: - "@lerna/prerelease-id-from-version" "5.1.6" - "@lerna/validation-error" "5.1.6" - npm-package-arg "^8.1.0" - npmlog "^6.0.2" - semver "^7.3.4" - -"@lerna/package@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-5.1.6.tgz#90159a4d3857178bc35c53a4e53636b4cf68ea35" - integrity sha512-OwsYEVVDEFIybYSh3edn5ZH7EoMPEmfl92pri3rqtaGYj76/ENGaQZSXT5ZH2oJKg5Jh9LrtaYAc+r/fZ+1vuQ== - dependencies: - load-json-file "^6.2.0" - npm-package-arg "^8.1.0" - write-pkg "^4.0.0" - -"@lerna/prerelease-id-from-version@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.1.6.tgz#ce03815e967433784bbfe9b989e3368008684642" - integrity sha512-LJYIuxw9rpKkCWtE10gOOyqpcKRzV34Ljk0L0WSaXILlcWf5bAb0ZmF8t5UJ/MzhGklYwT/Fk0yPtVtu7GnBaA== - dependencies: - semver "^7.3.4" - -"@lerna/profiler@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-5.1.6.tgz#9d67bde76e119187f35f5dc8d5c1ffe8cf92ee83" - integrity sha512-ZFU7WPIk7FxblnGx9Ux0W+NLnTGTIpjdVWEzi/8QkJssmjxerbW62lO5tvGzv6kjPQsml2kC7yPBwX9JEOFCdQ== - dependencies: - fs-extra "^9.1.0" - npmlog "^6.0.2" - upath "^2.0.1" - -"@lerna/project@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-5.1.6.tgz#a8a79c78f9c9b5406cba77ab75986e265e61940a" - integrity sha512-9EXc2uTDfruvJcWnW3UrDZCAgZ/LUOQDC92xBSi1qazSE3fEsfrLBJmMqUzBRTuGoGh5BPnJgA2l0It01z51dQ== - dependencies: - "@lerna/package" "5.1.6" - "@lerna/validation-error" "5.1.6" - cosmiconfig "^7.0.0" - dedent "^0.7.0" - dot-prop "^6.0.1" - glob-parent "^5.1.1" - globby "^11.0.2" - load-json-file "^6.2.0" - npmlog "^6.0.2" - p-map "^4.0.0" - resolve-from "^5.0.0" - write-json-file "^4.3.0" - -"@lerna/prompt@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-5.1.6.tgz#3f1ea0655f047ae0a001a8645152df4c0a77816a" - integrity sha512-3Ds/N8mzb1zyTq079CMPCg2wfo5cwVBtr0N5Bh9A+NERQuLavxF1tBRKRYLF4h9zHdybNvAMkKfoQkkyJNliQg== - dependencies: - inquirer "^7.3.3" - npmlog "^6.0.2" - -"@lerna/publish@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-5.1.6.tgz#9148b47e73e3fdcc0dace0f2c079951f0f63b2a5" - integrity sha512-ZGB4JJBUTBnx5N37qNdyZ+iZX4KXtjbEnB3WU7HH7IzMHc4JZbDEQhAyfELKdvB4gEdYJTsfA8v8J75U3HcluA== - dependencies: - "@lerna/check-working-tree" "5.1.6" - "@lerna/child-process" "5.1.6" - "@lerna/collect-updates" "5.1.6" - "@lerna/command" "5.1.6" - "@lerna/describe-ref" "5.1.6" - "@lerna/log-packed" "5.1.6" - "@lerna/npm-conf" "5.1.6" - "@lerna/npm-dist-tag" "5.1.6" - "@lerna/npm-publish" "5.1.6" - "@lerna/otplease" "5.1.6" - "@lerna/output" "5.1.6" - "@lerna/pack-directory" "5.1.6" - "@lerna/prerelease-id-from-version" "5.1.6" - "@lerna/prompt" "5.1.6" - "@lerna/pulse-till-done" "5.1.6" - "@lerna/run-lifecycle" "5.1.6" - "@lerna/run-topologically" "5.1.6" - "@lerna/validation-error" "5.1.6" - "@lerna/version" "5.1.6" - fs-extra "^9.1.0" - libnpmaccess "^4.0.1" - npm-package-arg "^8.1.0" - npm-registry-fetch "^9.0.0" - npmlog "^6.0.2" - p-map "^4.0.0" - p-pipe "^3.1.0" - pacote "^13.4.1" - semver "^7.3.4" - -"@lerna/pulse-till-done@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-5.1.6.tgz#0b79ea17c877ae06a6ae2d41386cd2503df96e66" - integrity sha512-R9YpgGAlRB9XyYBZt41i8rLsnLqUDB8LYlOFhfrBX0Y1mI0/+9iYIHF0xBemrHqimQftu3QxvEoxpsDrXUJBIg== - dependencies: - npmlog "^6.0.2" - -"@lerna/query-graph@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-5.1.6.tgz#8729cf6d634d7ad978a35674184a9693418bc6c2" - integrity sha512-67dzRjCGjYjEUpO3PwFIcTpgJhaQO4WT687bpJh8M5XaS0xeaz2g+e1C9U/n8xIHJm3N2PlKYMSczuvPhSayCw== - dependencies: - "@lerna/package-graph" "5.1.6" - -"@lerna/resolve-symlink@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-5.1.6.tgz#57928c17d76971749f862f89fe6de8b84bc81e34" - integrity sha512-+2rCXIj8jM31WRPqUffBAb1e5TimgSDSPTM/q52cvSs+JRgqiw+aVx/8FgG/a/bMg+5+Zx/+A4c8KxnWCjLF5A== - dependencies: - fs-extra "^9.1.0" - npmlog "^6.0.2" - read-cmd-shim "^2.0.0" - -"@lerna/rimraf-dir@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-5.1.6.tgz#dff2eb82bcbde1cd5a4d186d1df8aa5cb03b816e" - integrity sha512-8J9LrlW/IzSvDXxk7hbobofSOXvKS2o+q6vdamrwLapk2KfI/KGh0auBo/s4Rvr5t6OZfpr4/woLJyQFdnwWWA== - dependencies: - "@lerna/child-process" "5.1.6" - npmlog "^6.0.2" - path-exists "^4.0.0" - rimraf "^3.0.2" - -"@lerna/run-lifecycle@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-5.1.6.tgz#8a43e28660b8929b76f6a16088a055fb31ecba1b" - integrity sha512-rTLQwIwUtN6+WpyFceZoahi1emTlLwJYwTMBZZla3w6aBwERdfpEvB4MVz2F6/TTYmJ2uzWa1Y85faGH4x4blA== - dependencies: - "@lerna/npm-conf" "5.1.6" - "@npmcli/run-script" "^3.0.2" - npmlog "^6.0.2" - -"@lerna/run-topologically@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-5.1.6.tgz#a34e5ce84dcddaa3e94d742c44b7233e7baf1ed8" - integrity sha512-2THwjyU/aq7NOUmjCKQYK7l78fUoBwBtWXFGfeqK5xN5LBc2zr293cC1Z7CAZHUVh1JklLWL0PXX8Z34g3210g== - dependencies: - "@lerna/query-graph" "5.1.6" - p-queue "^6.6.2" - -"@lerna/run@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-5.1.6.tgz#1e47bfb792109e37740d65786e7079c666c3fd15" - integrity sha512-WMZF4tKFL/hGhUHphcYJNUDGvpHdrLD8ysACiqgIyu5ssIWiXb0wbUO0OeGWMss0b7TNOUG1y6DGOPFWFWRd3w== - dependencies: - "@lerna/command" "5.1.6" - "@lerna/filter-options" "5.1.6" - "@lerna/npm-run-script" "5.1.6" - "@lerna/output" "5.1.6" - "@lerna/profiler" "5.1.6" - "@lerna/run-topologically" "5.1.6" - "@lerna/timer" "5.1.6" - "@lerna/validation-error" "5.1.6" - p-map "^4.0.0" - -"@lerna/symlink-binary@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-5.1.6.tgz#ce4d5be8d8a4885c3f3e81007137c4ae393311d0" - integrity sha512-nj5a77e8Vk+AZY+batyr+lCo3EcGTiGjSP0MFnkXKn1wUyUUZiKgS48J/9RTNdTpWZRC4G2PneR6BUmnF6Mnlg== - dependencies: - "@lerna/create-symlink" "5.1.6" - "@lerna/package" "5.1.6" - fs-extra "^9.1.0" - p-map "^4.0.0" - -"@lerna/symlink-dependencies@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-5.1.6.tgz#38f5a94e6450b0bff0c17b3e44b4d527827cea24" - integrity sha512-nMVTEm8oi3TrKXmDeS9445zngWQR31AShKH+u9f+YZVYE1Ncv4/XpgDSkTNsbm//vMi0ilWH+QQxjBC+pDXd8Q== - dependencies: - "@lerna/create-symlink" "5.1.6" - "@lerna/resolve-symlink" "5.1.6" - "@lerna/symlink-binary" "5.1.6" - fs-extra "^9.1.0" - p-map "^4.0.0" - p-map-series "^2.1.0" - -"@lerna/temp-write@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/temp-write/-/temp-write-5.1.6.tgz#3b486297b1ccc732c3dbea34e6f42a6198ba2c82" - integrity sha512-Ycb0dNBi5bwgVyc/aeZ5JmgSEWfaJjh9efFqDfsj763HBLr9sBZvqQYBRXGAWxBdDWy+lXTXximsQw5gJZZxpw== - dependencies: - graceful-fs "^4.1.15" - is-stream "^2.0.0" - make-dir "^3.0.0" - temp-dir "^1.0.0" - uuid "^8.3.2" - -"@lerna/timer@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-5.1.6.tgz#a0fdebc3cbce93907b6855515726c31e8e5c50ac" - integrity sha512-m28ufTfg7zibqPujxborrTy9WrocCmoMXvw1PuSZ0LCf5hhK3HUJJ8ybxYAGpUXdZqjzvRQNlc954GsOkCSJEA== - -"@lerna/validation-error@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-5.1.6.tgz#12371dcc8dc610e04644b1bcf05535c6487755ca" - integrity sha512-6+rc1bGTqaRMvML8Qew+RoqZFxyESSX+GBCTv0pW1SBcNo/yC76fq9y/WSA3dn6GuqHWyX3H0Yki7HutezM7/A== - dependencies: - npmlog "^6.0.2" - -"@lerna/version@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-5.1.6.tgz#7d0906e130bd29046a3827088033b9b7d2289545" - integrity sha512-UE7ZHUdHtlmHQPK8ZSc62BHnWXIPqV7nzQAM/tQngIGSAH0oXHjxktP4ysPRqX8U0jfl212fSveVK7HK988zoQ== - dependencies: - "@lerna/check-working-tree" "5.1.6" - "@lerna/child-process" "5.1.6" - "@lerna/collect-updates" "5.1.6" - "@lerna/command" "5.1.6" - "@lerna/conventional-commits" "5.1.6" - "@lerna/github-client" "5.1.6" - "@lerna/gitlab-client" "5.1.6" - "@lerna/output" "5.1.6" - "@lerna/prerelease-id-from-version" "5.1.6" - "@lerna/prompt" "5.1.6" - "@lerna/run-lifecycle" "5.1.6" - "@lerna/run-topologically" "5.1.6" - "@lerna/temp-write" "5.1.6" - "@lerna/validation-error" "5.1.6" - chalk "^4.1.0" - dedent "^0.7.0" - load-json-file "^6.2.0" - minimatch "^3.0.4" - npmlog "^6.0.2" - p-map "^4.0.0" - p-pipe "^3.1.0" - p-reduce "^2.1.0" - p-waterfall "^2.1.1" - semver "^7.3.4" - slash "^3.0.0" - write-json-file "^4.3.0" - -"@lerna/write-log-file@5.1.6": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-5.1.6.tgz#88f62ca90dd947246a0bf0a45c3012e919002ec6" - integrity sha512-UfuERC0dN5cw6Vc11/8fDfnXfuEQXKbOweJ2D83nrNJIZS/HwWkAoYVZ493w7xJzrqKi6V352BY3m9D7pi8h5g== - dependencies: - npmlog "^6.0.2" - write-file-atomic "^3.0.3" - -"@metamask/eth-sig-util@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" - integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^6.2.1" - ethjs-util "^0.1.6" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.1" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@nomiclabs/hardhat-ethers@^2.0.5": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.6.tgz#1c695263d5b46a375dcda48c248c4fba9dfe2fc2" - integrity sha512-q2Cjp20IB48rEn2NPjR1qxsIQBvFVYW9rFRCFq+bC4RUrn1Ljz3g4wM8uSlgIBZYBi2JMXxmOzFqHraczxq4Ng== - -"@nomiclabs/hardhat-waffle@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz#9c538a09c5ed89f68f5fd2dc3f78f16ed1d6e0b1" - integrity sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg== - dependencies: - "@types/sinon-chai" "^3.2.3" - "@types/web3" "1.0.19" - -"@nomiclabs/hardhat-web3@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz#2d9850cb285a2cebe1bd718ef26a9523542e52a9" - integrity sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q== - dependencies: - "@types/bignumber.js" "^5.0.0" - -"@npmcli/arborist@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.2.0.tgz#ee40dfe1f81ae1524819ee39c8f3e7022b0d6269" - integrity sha512-zWV7scFGL0SmpvfQyIWnMFbU/0YgtMNyvJiJwR98kyjUSntJGWFFR0O600d5W+TrDcTg0GyDbY+HdzGEg+GXLg== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.3" - "@npmcli/metavuln-calculator" "^3.0.1" - "@npmcli/move-file" "^2.0.0" - "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/package-json" "^2.0.0" - "@npmcli/run-script" "^3.0.0" - bin-links "^3.0.0" - cacache "^16.0.6" - common-ancestor-path "^1.0.1" - json-parse-even-better-errors "^2.3.1" - json-stringify-nice "^1.1.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - nopt "^5.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.0.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.0" - npmlog "^6.0.2" - pacote "^13.0.5" - parse-conflict-json "^2.0.1" - proc-log "^2.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^2.0.2" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.7" - ssri "^9.0.0" - treeverse "^2.0.0" - walk-up-path "^1.0.0" - -"@npmcli/ci-detect@^1.0.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" - integrity sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q== - -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/fs@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.0.tgz#f2a21c28386e299d1a9fae8051d35ad180e33109" - integrity sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ== - dependencies: - "@gar/promisify" "^1.1.3" - semver "^7.3.5" - -"@npmcli/git@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.1.tgz#049b99b1381a2ddf7dc56ba3e91eaf76ca803a8d" - integrity sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A== - dependencies: - "@npmcli/promise-spawn" "^3.0.0" - lru-cache "^7.4.4" - mkdirp "^1.0.4" - npm-pick-manifest "^7.0.0" - proc-log "^2.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^2.0.2" - -"@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== - dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -"@npmcli/map-workspaces@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz#2d3c75119ee53246e9aa75bc469a55281cd5f08f" - integrity sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q== - dependencies: - "@npmcli/name-from-folder" "^1.0.1" - glob "^8.0.1" - minimatch "^5.0.1" - read-package-json-fast "^2.0.3" - -"@npmcli/metavuln-calculator@^3.0.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" - integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== - dependencies: - cacache "^16.0.0" - json-parse-even-better-errors "^2.3.1" - pacote "^13.0.3" - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/move-file@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.0.tgz#417f585016081a0184cef3e38902cd917a9bbd02" - integrity sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/name-from-folder@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" - integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== - -"@npmcli/node-gyp@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" - integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== - -"@npmcli/package-json@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" - integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== - dependencies: - json-parse-even-better-errors "^2.3.1" - -"@npmcli/promise-spawn@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" - integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== - dependencies: - infer-owner "^1.0.4" - -"@npmcli/run-script@^3.0.0", "@npmcli/run-script@^3.0.2": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-3.0.3.tgz#66afa6e0c4c3484056195f295fa6c1d1a45ddf58" - integrity sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q== - dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^8.4.1" - read-package-json-fast "^2.0.3" - -"@npmcli/run-script@^4.1.0": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.1.5.tgz#d60a7d41321612a9c0e1433797c10c19d0213d55" - integrity sha512-FyrZkZ+O0bCnQqm+mRb6sKbEJgyJudInwFN84gCcMUcxrWkR15Ags1uOHwnxHYdpj3T5eqrCZNW/Ys20MGTQ6Q== - dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^2.0.3" - which "^2.0.2" - -"@nrwl/cli@14.4.0": - version "14.4.0" - resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-14.4.0.tgz#beae83e13cda27226dbfd365f84b2cc807013fd2" - integrity sha512-Hmn+Yj7VTmaztOgTCe0kYtZkBsp6NGPfvbm27FTgcda5TsxCkrCLah6btuS7hcX+h4Ss308z9hFMfNk2EvVWXA== - dependencies: - nx "14.4.0" - -"@nrwl/tao@14.4.0": - version "14.4.0" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-14.4.0.tgz#691c1e21d3e0578b36ea0e989dbd616a06af9ce8" - integrity sha512-8PFM72SMWyhIPPeGpIJzzST/yfMAsf0zRKNfB90ra7FlHXXXzDZmpJvV8JpnCtSBGjT8OrcpZ8siD4JXov4ueA== - dependencies: - nx "14.4.0" - -"@octokit/auth-token@^2.4.4": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" - integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== - dependencies: - "@octokit/types" "^6.0.3" - -"@octokit/core@^3.5.1": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.6.0.tgz#3376cb9f3008d9b3d110370d90e0a1fcd5fe6085" - integrity sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q== - dependencies: - "@octokit/auth-token" "^2.4.4" - "@octokit/graphql" "^4.5.8" - "@octokit/request" "^5.6.3" - "@octokit/request-error" "^2.0.5" - "@octokit/types" "^6.0.3" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^6.0.1": - version "6.0.12" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" - integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== - dependencies: - "@octokit/types" "^6.0.3" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^4.5.8": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" - integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== - dependencies: - "@octokit/request" "^5.6.0" - "@octokit/types" "^6.0.3" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^12.6.1": - version "12.6.1" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.6.1.tgz#ce33e7a75eb0e5def4e1e17547c2aeca473fed4c" - integrity sha512-zirGmxkSQuZIQYsOLtCxNoKi7ByKLwGhrGhHz6YUI7h/c8xOES9bEoHOeq4z81uNf2AGAqNfPW9i3GOrpgKoJQ== - -"@octokit/plugin-enterprise-rest@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" - integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== - -"@octokit/plugin-paginate-rest@^2.16.8": - version "2.21.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.1.tgz#9ab7a21e9f35a6d5526a3082da3f8f43908449e4" - integrity sha512-NVNTK63yoTFp07GqISWK+uDfGH1CAPhQXS7LzsJBvaK5W+UlvG549pLZC55FK0FqANVl6q/9ra3SR5c97xF/sw== - dependencies: - "@octokit/types" "^6.38.2" - -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== - -"@octokit/plugin-rest-endpoint-methods@^5.12.0": - version "5.16.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.1.tgz#24e5c33cb039bef3168db7e6266be5a6025df2a4" - integrity sha512-RMHD3aJZvOpjR2fGzD2an6eU7LG8MsknhUHvP+wRUnKdbt7eDdhTMLQsZ4xsHZcLNsxPO/K4DDIZPhI2s571Ag== - dependencies: - "@octokit/types" "^6.38.2" - deprecation "^2.3.1" - -"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" - integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== - dependencies: - "@octokit/types" "^6.0.3" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^5.6.0", "@octokit/request@^5.6.3": - version "5.6.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" - integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== - dependencies: - "@octokit/endpoint" "^6.0.1" - "@octokit/request-error" "^2.1.0" - "@octokit/types" "^6.16.1" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@^18.1.0": - version "18.12.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" - integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== - dependencies: - "@octokit/core" "^3.5.1" - "@octokit/plugin-paginate-rest" "^2.16.8" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^5.12.0" - -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.38.2": - version "6.38.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.38.2.tgz#b837c76a517ebd94bb91e867eb6761ec43f3adc7" - integrity sha512-McFegRKQ1qaMSnDt8ScJzv26IFR1zhXveYaqx8wF7QEgiy4GHMrnX4xbP+Yl+kAr12DCplL3WJq4xkeD1VMfmw== - dependencies: - "@octokit/openapi-types" "^12.6.1" - -"@openzeppelin/contracts@^4.6.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.7.0.tgz#3092d70ea60e3d1835466266b1d68ad47035a2d5" - integrity sha512-52Qb+A1DdOss8QvJrijYYPSf32GUg2pGaG/yCxtaA3cu4jduouTdg4XZSMLW9op54m1jH7J8hoajhHKOPsoJFw== - -"@parcel/watcher@2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" - integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== - dependencies: - node-addon-api "^3.2.1" - node-gyp-build "^4.3.0" - -"@sentry/core@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" - integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/hub@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" - integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== - dependencies: - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/minimal@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" - integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@sentry/node@^5.18.1": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" - integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== - dependencies: - "@sentry/core" "5.30.0" - "@sentry/hub" "5.30.0" - "@sentry/tracing" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/tracing@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" - integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/types@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" - integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== - -"@sentry/utils@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" - integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== - dependencies: - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@solidity-parser/parser@^0.14.1": - version "0.14.2" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.2.tgz#2d8f2bddb217621df882ceeae7d7b42ae8664db3" - integrity sha512-10cr0s+MtRtqjEw0WFJrm2rwULN30xx7btd/v9cmqME2617/2M5MbHDkFIGIGTa7lwNw4bN9mVGfhlLzrYw8pA== - dependencies: - antlr4ts "^0.5.0-alpha.4" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" - integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== - -"@typechain/ethers-v5@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz#6aa93bea7425c0463bd8a61eea3643540ef851bd" - integrity sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ== - dependencies: - lodash "^4.17.15" - ts-essentials "^7.0.1" - -"@types/abstract-leveldown@*": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#f055979a99f7654e84d6b8e6267419e9c4cfff87" - integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== - -"@types/bignumber.js@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/bignumber.js/-/bignumber.js-5.0.0.tgz#d9f1a378509f3010a3255e9cc822ad0eeb4ab969" - integrity sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA== - dependencies: - bignumber.js "*" - -"@types/bn.js@*", "@types/bn.js@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" - integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== - dependencies: - "@types/node" "*" - -"@types/bn.js@^4.11.3": - version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== - dependencies: - "@types/node" "*" - -"@types/chai-as-promised@^7.1.5": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz#6e016811f6c7a64f2eed823191c3a6955094e255" - integrity sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ== - dependencies: - "@types/chai" "*" - -"@types/chai@*", "@types/chai@^4.3.0": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" - integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== - -"@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@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/level-errors@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" - integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== - -"@types/levelup@^4.3.0": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" - integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== - dependencies: - "@types/abstract-leveldown" "*" - "@types/level-errors" "*" - "@types/node" "*" - -"@types/lru-cache@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== - -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - -"@types/mkdirp@^0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f" - integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== - dependencies: - "@types/node" "*" - -"@types/mocha@^9.1.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" - integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== - -"@types/node-fetch@^2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" - integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== - dependencies: - "@types/node" "*" - form-data "^3.0.0" - -"@types/node@*": - version "18.0.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.1.tgz#e91bd73239b338557a84d1f67f7b9e0f25643870" - integrity sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg== - -"@types/node@^12.12.6": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== - -"@types/node@^17.0.23": - version "17.0.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== - dependencies: - "@types/node" "*" - -"@types/prettier@^2.1.1": - version "2.6.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a" - integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== - -"@types/resolve@^0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== - dependencies: - "@types/node" "*" - -"@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== - dependencies: - "@types/node" "*" - -"@types/sinon-chai@^3.2.3": - version "3.2.8" - resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.8.tgz#5871d09ab50d671d8e6dd72e9073f8e738ac61dc" - integrity sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g== - dependencies: - "@types/chai" "*" - "@types/sinon" "*" - -"@types/sinon@*": - version "10.0.12" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.12.tgz#fb7009ea71f313a9da4644ba73b94e44d6b84f7f" - integrity sha512-uWf4QJ4oky/GckJ1MYQxU52cgVDcXwBhDkpvLbi4EKoLPqLE4MOH6T/ttM33l3hi0oZ882G6oIzWv/oupRYSxQ== - dependencies: - "@types/sinonjs__fake-timers" "*" - -"@types/sinonjs__fake-timers@*": - version "8.1.2" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz#bf2e02a3dbd4aecaf95942ecd99b7402e03fad5e" - integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== - -"@types/underscore@*": - version "1.11.4" - resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.4.tgz#62e393f8bc4bd8a06154d110c7d042a93751def3" - integrity sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg== - -"@types/web3@1.0.19": - version "1.0.19" - resolved "https://registry.yarnpkg.com/@types/web3/-/web3-1.0.19.tgz#46b85d91d398ded9ab7c85a5dd57cb33ac558924" - integrity sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A== - dependencies: - "@types/bn.js" "*" - "@types/underscore" "*" - -"@typescript-eslint/eslint-plugin@^5.17.0": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.4.tgz#a46c8c0ab755a936cb63786a6222876ce51675e4" - integrity sha512-xjujQISAIa4HAaos8fcMZXmqkuZqMx6icdxkI88jMM/eNe4J8AuTLYnLK+zdm0mBYLyctdFf//UE4/xFCcQzYQ== - dependencies: - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/type-utils" "5.30.4" - "@typescript-eslint/utils" "5.30.4" - debug "^4.3.4" - functional-red-black-tree "^1.0.1" - ignore "^5.2.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.17.0": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.4.tgz#659411e8700b22c8d5400798ef24838425bf4567" - integrity sha512-/ge1HtU63wVoED4VnlU2o+FPFmi017bPYpeSrCmd8Ycsti4VSxXrmcpXXm7JpI4GT0Aa7qviabv1PEp6L5bboQ== - dependencies: - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/typescript-estree" "5.30.4" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.4.tgz#8140efd2bc12d41d74e8af23872a89f3edbe552e" - integrity sha512-DNzlQwGSiGefz71JwaHrpcaAX3zYkEcy8uVuan3YMKOa6qeW/y+7SaD8KIsIAruASwq6P+U4BjWBWtM2O+mwBQ== - dependencies: - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/visitor-keys" "5.30.4" - -"@typescript-eslint/type-utils@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.4.tgz#00ff19073cd01f7d27e9af49ce08d6a69f1e4f01" - integrity sha512-55cf1dZviwwv+unDB+mF8vZkfta5muTK6bppPvenWWCD7slZZ0DEsXUjZerqy7Rq8s3J4SXdg4rMIY8ngCtTmA== - dependencies: - "@typescript-eslint/utils" "5.30.4" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.4.tgz#3bc99eca8ba3fcfd6a21480e216b09dab81c3999" - integrity sha512-NTEvqc+Vvu8Q6JeAKryHk2eqLKqsr2St3xhIjhOjQv5wQUBhaTuix4WOSacqj0ONWfKVU12Eug3LEAB95GBkMA== - -"@typescript-eslint/typescript-estree@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.4.tgz#ac4be8a2f8fb1f1c3b346d5992a36163121ddb3f" - integrity sha512-V4VnEs6/J9/nNizaA12IeU4SAeEYaiKr7XndLNfV5+3zZSB4hIu6EhHJixTKhvIqA+EEHgBl6re8pivBMLLO1w== - dependencies: - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/visitor-keys" "5.30.4" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.4.tgz#07a2b7ce80b2527ea506829f190591b76c70ba9f" - integrity sha512-a+GQrJzOUhn4WT1mUumXDyam+22Oo4c5K/jnZ+6r/4WTQF3q8e4CsC9PLHb4SnOClzOqo/5GLZWvkE1aa5UGKQ== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/typescript-estree" "5.30.4" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/visitor-keys@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.4.tgz#b4969df1a440cc999d4bb7f7b7932dce05537089" - integrity sha512-ulKGse3mruSc8x6l8ORSc6+1ORyJzKmZeIaRTu/WpaF/jx3vHvEn5XZUKF9XaVg2710mFmTAUlLcLYLPp/Zf/Q== - dependencies: - "@typescript-eslint/types" "5.30.4" - eslint-visitor-keys "^3.3.0" - -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - -JSONStream@^1.0.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -abstract-leveldown@~6.2.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -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.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.4.1, acorn@^8.7.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== - -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== - -adm-zip@^0.4.16: - version "0.4.16" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" - integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== - -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.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.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" - integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== - -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== - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz#ba20bd6b553e31d62fc8c31bd23d22b95734390d" - integrity sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-back@^3.0.1, array-back@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" - integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== - -array-back@^4.0.1, array-back@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" - integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== - -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" - integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-eventemitter@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" - -async@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -before-after-hook@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" - integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== - -bignumber.js@*, bignumber.js@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" - integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== - -bin-links@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.1.tgz#cc70ffb481988b22c527d3e6e454787876987a49" - integrity sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ== - dependencies: - cmd-shim "^5.0.0" - mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^1.0.0" - read-cmd-shim "^3.0.0" - rimraf "^3.0.0" - write-file-atomic "^4.0.0" - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -blakejs@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -bn.js@^4.0.0, bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -bs58@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58check@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer-xor@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" - integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== - dependencies: - safe-buffer "^5.1.1" - -buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -bufferutil@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" - integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== - dependencies: - node-gyp-build "^4.3.0" - -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -byte-size@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.1.tgz#b1daf3386de7ab9d706b941a748dbfc71130dee3" - integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacache@^15.0.5, cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: - version "16.1.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.1.tgz#4e79fb91d3efffe0630d5ad32db55cc1b870669c" - integrity sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg== - dependencies: - "@npmcli/fs" "^2.1.0" - "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - unique-filename "^1.1.1" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -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.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.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -chai-as-promised@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" - integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== - dependencies: - check-error "^1.0.2" - -chai@^4.3.6: - version "4.3.6" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" - loupe "^2.3.1" - pathval "^1.1.1" - type-detect "^4.0.5" - -chalk@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - 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" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.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== - -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== - -chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@3.1.0, cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -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-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.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== - -cmd-shim@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd" - integrity sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw== - dependencies: - mkdirp-infer-owner "^2.0.0" - -cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -colorette@^2.0.16: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - -columnify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - -command-line-args@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" - integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== - dependencies: - array-back "^3.1.0" - find-replace "^3.0.0" - lodash.camelcase "^4.3.0" - typical "^4.0.0" - -command-line-usage@^6.1.0: - version "6.1.3" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" - integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== - dependencies: - array-back "^4.0.2" - chalk "^2.4.2" - table-layout "^1.0.2" - typical "^5.2.0" - -commander@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - -commander@^9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.3.0.tgz#f619114a5a2d2054e0d9ff1b31d5ccf89255e26b" - integrity sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw== - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -config-chain@^1.1.12: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -conventional-changelog-angular@^5.0.12: - version "5.0.13" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-core@^4.2.2: - version "4.2.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" - integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== - dependencies: - add-stream "^1.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-parser "^3.2.0" - dateformat "^3.0.0" - get-pkg-repo "^4.0.0" - git-raw-commits "^2.0.8" - git-remote-origin-url "^2.0.0" - git-semver-tags "^4.1.1" - lodash "^4.17.15" - normalize-package-data "^3.0.0" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^4.0.0" - -conventional-changelog-preset-loader@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== - -conventional-changelog-writer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" - integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== - dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" - -conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.2.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" - integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -conventional-recommended-bump@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" - integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.3.4" - conventional-commits-filter "^2.0.7" - conventional-commits-parser "^3.2.0" - git-raw-commits "^2.0.8" - git-semver-tags "^4.1.1" - meow "^8.0.0" - q "^1.5.1" - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -cookiejar@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" - integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== - -core-js-pure@^3.0.1: - version "3.23.3" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.23.3.tgz#bcd02d3d8ec68ad871ef50d5ccbb248ddb54f401" - integrity sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - 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" - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== - -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg== - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.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.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== - dependencies: - type-detect "^4.0.0" - -deep-extend@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -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== - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== - dependencies: - clone "^1.0.2" - -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== - -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== - -dezalgo@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== - dependencies: - asap "^2.0.0" - wrappy "1" - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -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" - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dotenv@~10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -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== - -elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/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== - -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - -encoding@^0.1.12, encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.0, enquirer@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@^7.7.4: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -errno@~0.1.1: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -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.19.0, es-abstract@^1.19.5, es-abstract@^1.20.0: - version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" - integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -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.61" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.61.tgz#311de37949ef86b6b0dcea894d1ffedb909d3269" - integrity sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: - version "4.0.0" - 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: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== - -eslint-plugin-prettier@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" - integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.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@^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: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@^8.12.0: - version "8.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.19.0.tgz#7342a3cbc4fbc5c106a1eefe0fd0b50b6b1a7d28" - integrity sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw== - dependencies: - "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.9.2" - ajv "^6.10.0" - 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.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.3.2" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.15.0" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - 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.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^9.3.2: - version "9.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" - integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== - dependencies: - acorn "^8.7.1" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - 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@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -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.yarnpkg.com/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.2, ethereum-cryptography@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/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" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - -ethereumjs-abi@^0.6.8: - version "0.6.8" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" - integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== - dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" - -ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - -ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: - version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethers@^5.5.3: - version "5.6.9" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.9.tgz#4e12f8dfcb67b88ae7a78a9519b384c23c576a4d" - integrity sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA== - dependencies: - "@ethersproject/abi" "5.6.4" - "@ethersproject/abstract-provider" "5.6.1" - "@ethersproject/abstract-signer" "5.6.2" - "@ethersproject/address" "5.6.1" - "@ethersproject/base64" "5.6.1" - "@ethersproject/basex" "5.6.1" - "@ethersproject/bignumber" "5.6.2" - "@ethersproject/bytes" "5.6.1" - "@ethersproject/constants" "5.6.1" - "@ethersproject/contracts" "5.6.2" - "@ethersproject/hash" "5.6.1" - "@ethersproject/hdnode" "5.6.2" - "@ethersproject/json-wallets" "5.6.1" - "@ethersproject/keccak256" "5.6.1" - "@ethersproject/logger" "5.6.0" - "@ethersproject/networks" "5.6.4" - "@ethersproject/pbkdf2" "5.6.1" - "@ethersproject/properties" "5.6.0" - "@ethersproject/providers" "5.6.8" - "@ethersproject/random" "5.6.1" - "@ethersproject/rlp" "5.6.1" - "@ethersproject/sha2" "5.6.1" - "@ethersproject/signing-key" "5.6.2" - "@ethersproject/solidity" "5.6.1" - "@ethersproject/strings" "5.6.1" - "@ethersproject/transactions" "5.6.2" - "@ethersproject/units" "5.6.1" - "@ethersproject/wallet" "5.6.2" - "@ethersproject/web" "5.6.1" - "@ethersproject/wordlists" "5.6.1" - -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - -ethjs-util@0.1.6, ethjs-util@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" - integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== - dependencies: - is-hex-prefixed "1.0.0" - strip-hex-prefix "1.0.0" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - -eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^5.0.0, execa@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -ext@^1.1.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" - integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== - dependencies: - type "^2.5.0" - -external-editor@^3.0.3: - 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" - -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.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== - 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-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - 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.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -figures@3.2.0, figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -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" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -filter-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== - -find-replace@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" - integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== - dependencies: - array-back "^3.0.1" - -find-up@5.0.0: - version "5.0.0" - 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" - path-exists "^4.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - 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" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" - integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== - -follow-redirects@^1.12.1: - version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -fp-ts@1.19.3: - version "1.19.3" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" - integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== - -fp-ts@^1.0.0: - version "1.19.5" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" - integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^7.0.0, fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0, fs-minipass@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -functions-have-names@^1.2.2: - 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== - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" - integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-pkg-repo@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" - integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== - dependencies: - "@hutson/parse-repository-url" "^3.0.0" - hosted-git-info "^4.0.0" - through2 "^2.0.0" - yargs "^16.2.0" - -get-port@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -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" - -git-raw-commits@^2.0.8: - version "2.0.11" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" - integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== - dependencies: - dargs "^7.0.0" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" - integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== - dependencies: - meow "^8.0.0" - semver "^6.0.0" - -git-up@^4.0.0: - version "4.0.5" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.5.tgz#e7bb70981a37ea2fb8fe049669800a1f9a01d759" - integrity sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA== - dependencies: - is-ssh "^1.3.0" - parse-url "^6.0.0" - -git-url-parse@^11.4.4: - version "11.6.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.6.0.tgz#c634b8de7faa66498a2b88932df31702c67df605" - integrity sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g== - dependencies: - git-up "^4.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== - dependencies: - ini "^1.3.2" - -glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: - 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.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.1: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -globals@^13.15.0: - version "13.15.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" - integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.2, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -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@^2.9.2, hardhat@^2.9.9: - version "2.9.9" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.9.9.tgz#05c1015eb73e0230309534b00deeb080724aace0" - integrity sha512-Qv7SXnRc0zq1kGXruNnSKpP3eFccXMR5Qv6GVX9hBIJ5efN0PflKPq92aQ5Cv3jrjJeRevLznWZVz7bttXhVfw== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/blockchain" "^5.5.2" - "@ethereumjs/common" "^2.6.4" - "@ethereumjs/tx" "^3.5.1" - "@ethereumjs/vm" "^5.9.0" - "@ethersproject/abi" "^5.1.2" - "@metamask/eth-sig-util" "^4.0.0" - "@sentry/node" "^5.18.1" - "@solidity-parser/parser" "^0.14.1" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" - adm-zip "^0.4.16" - aggregate-error "^3.0.0" - ansi-escapes "^4.3.0" - chalk "^2.4.2" - chokidar "^3.4.0" - ci-info "^2.0.0" - debug "^4.1.1" - enquirer "^2.3.0" - env-paths "^2.2.0" - ethereum-cryptography "^0.1.2" - ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.1.4" - find-up "^2.1.0" - fp-ts "1.19.3" - fs-extra "^7.0.1" - glob "7.2.0" - immutable "^4.0.0-rc.12" - io-ts "1.10.4" - lodash "^4.17.11" - merkle-patricia-tree "^4.2.4" - mnemonist "^0.38.0" - mocha "^9.2.0" - p-map "^4.0.0" - qs "^6.7.0" - raw-body "^2.4.1" - resolve "1.17.0" - semver "^6.3.0" - slash "^3.0.0" - solc "0.7.3" - source-map-support "^0.5.13" - stacktrace-parser "^0.1.10" - "true-case-path" "^2.2.1" - tsort "0.0.1" - undici "^5.4.0" - 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.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - 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== - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.0.0.tgz#df7a06678b4ebd722139786303db80fdf302ea56" - integrity sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q== - dependencies: - lru-cache "^7.5.1" - -http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-https@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" - integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -husky@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" - integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - 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" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-walk@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" - integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== - dependencies: - minimatch "^3.0.4" - -ignore-walk@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" - integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== - dependencies: - minimatch "^5.0.1" - -ignore@^5.0.4, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -immediate@~3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== - -immutable@^4.0.0-rc.12: - version "4.1.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" - integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== - -import-fresh@^3.0.0, 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" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -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.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.2, ini@^1.3.4: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -init-package-json@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-2.0.5.tgz#78b85f3c36014db42d8f32117252504f68022646" - integrity sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA== - dependencies: - npm-package-arg "^8.1.5" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "^4.1.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^3.0.0" - -inquirer@^7.3.3: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -io-ts@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" - integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== - dependencies: - fp-ts "^1.0.0" - -ip@^1.1.5: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" - integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -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.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - 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-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== - dependencies: - has "^1.0.3" - -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, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -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.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -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.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-plain-obj@^1.0.0, 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.0.0, is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -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-ssh@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== - dependencies: - protocols "^2.0.1" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -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-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-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== - dependencies: - text-extensions "^1.0.0" - -is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.9.tgz#246d77d2871e7d9f5aeb1d54b9f52c71329ece67" - integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.20.0" - for-each "^0.3.3" - has-tostringtag "^1.0.0" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/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-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -js-sha3@0.8.0, js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -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.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - 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== - -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -jsonc-parser@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" - integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -just-diff-apply@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.3.1.tgz#30f40809ffed55ad76dccf73fa9b85a76964c867" - integrity sha512-dgFenZnMsc1xGNqgdtgnh7DK+Oy352CE3VZLbzcbQpsBs9iI2K3M0IRrdgREZ72eItTjbl0suRyvKRdVQa9GbA== - -just-diff@^5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.0.3.tgz#4c9c514dec5526b25ab977590e3c39a0cf271554" - integrity sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg== - -keccak@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - -kind-of@^6.0.2, 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.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== - optionalDependencies: - graceful-fs "^4.1.9" - -lerna@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-5.1.6.tgz#07db65b5cc3683a237f655feb7671f2c2a27255b" - integrity sha512-eiLj3IurbEas1rGtntW4Cf2/6y90Ot2oQaU2wv4uo2rHf6GRXUBEZ0nrE4yseDlNtsS/H7bqfrvlAYb3PWUG1A== - dependencies: - "@lerna/add" "5.1.6" - "@lerna/bootstrap" "5.1.6" - "@lerna/changed" "5.1.6" - "@lerna/clean" "5.1.6" - "@lerna/cli" "5.1.6" - "@lerna/create" "5.1.6" - "@lerna/diff" "5.1.6" - "@lerna/exec" "5.1.6" - "@lerna/import" "5.1.6" - "@lerna/info" "5.1.6" - "@lerna/init" "5.1.6" - "@lerna/link" "5.1.6" - "@lerna/list" "5.1.6" - "@lerna/publish" "5.1.6" - "@lerna/run" "5.1.6" - "@lerna/version" "5.1.6" - import-local "^3.0.2" - npmlog "^6.0.2" - -level-codec@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" - integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== - dependencies: - buffer "^5.6.0" - -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - -level-errors@^2.0.0, level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - -level-mem@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" - integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== - dependencies: - level-packager "^5.0.3" - memdown "^5.0.0" - -level-packager@^5.0.3: - version "5.1.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - -level-supports@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - -level-ws@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" - integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== - dependencies: - inherits "^2.0.3" - readable-stream "^3.1.0" - xtend "^4.0.1" - -levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -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" - -libnpmaccess@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.3.tgz#dfb0e5b0a53c315a2610d300e46b4ddeb66e7eec" - integrity sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ== - dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^8.1.2" - npm-registry-fetch "^11.0.0" - -libnpmpublish@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.2.tgz#be77e8bf5956131bcb45e3caa6b96a842dec0794" - integrity sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw== - dependencies: - normalize-package-data "^3.0.2" - npm-package-arg "^8.1.2" - npm-registry-fetch "^11.0.0" - semver "^7.1.3" - ssri "^8.0.1" - -lilconfig@2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" - integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lint-staged@^12.3.7: - version "12.5.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.5.0.tgz#d6925747480ae0e380d13988522f9dd8ef9126e3" - integrity sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g== - dependencies: - cli-truncate "^3.1.0" - colorette "^2.0.16" - commander "^9.3.0" - debug "^4.3.4" - execa "^5.1.1" - lilconfig "2.0.5" - listr2 "^4.0.5" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-inspect "^1.12.2" - pidtree "^0.5.0" - string-argv "^0.3.1" - supports-color "^9.2.2" - yaml "^1.10.2" - -listr2@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" - integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.16" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.5" - through "^2.3.8" - wrap-ansi "^7.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-json-file@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" - integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== - dependencies: - graceful-fs "^4.1.15" - parse-json "^5.0.0" - strip-bom "^4.0.0" - type-fest "^0.6.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - 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.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== - -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@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.7.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -loupe@^2.3.1: - version "2.3.4" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" - integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== - dependencies: - get-func-name "^2.0.0" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.12.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.12.0.tgz#be2649a992c8a9116efda5c487538dcf715f3476" - integrity sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw== - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - -ltgt@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: - version "10.1.8" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz#3b6e93dd8d8fdb76c0d7bf32e617f37c3108435a" - integrity sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g== - dependencies: - agentkeepalive "^4.2.1" - cacache "^16.1.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-fetch "^2.0.3" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^9.0.0" - -make-fetch-happen@^8.0.9: - version "8.0.14" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" - integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.0.5" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - promise-retry "^2.0.1" - socks-proxy-agent "^5.0.0" - ssri "^8.0.0" - -make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - -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== - -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -memdown@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" - integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== - dependencies: - abstract-leveldown "~6.2.1" - functional-red-black-tree "~1.0.1" - immediate "~3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.2.0" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -meow@^8.0.0: - version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -merkle-patricia-tree@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" - integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== - dependencies: - "@types/levelup" "^4.3.0" - ethereumjs-util "^7.1.4" - level-mem "^5.0.1" - level-ws "^2.0.0" - readable-stream "^3.6.0" - semaphore-async-await "^1.5.1" - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -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.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" - integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== - dependencies: - brace-expansion "^2.0.1" - -minimist-options@4.1.0: - 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.5, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-fetch@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.0.tgz#ca1754a5f857a3be99a9271277246ac0b44c3ff8" - integrity sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg== - dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: - version "3.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== - dependencies: - yallist "^4.0.0" - -minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== - dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mnemonist@^0.38.0: - version "0.38.5" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" - integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== - dependencies: - obliterator "^2.0.0" - -mocha@^9.2.0, mocha@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" - integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== - dependencies: - "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.3" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - growl "1.10.5" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "4.2.1" - ms "2.1.3" - nanoid "3.3.1" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multimatch@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" - integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== - dependencies: - "@types/minimatch" "^3.0.3" - array-differ "^3.0.0" - array-union "^2.1.0" - arrify "^2.0.1" - minimatch "^3.0.4" - -mute-stream@0.0.8, mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nanoid@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== - -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== - -negotiator@^0.6.2, negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - -node-addon-api@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== - -node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== - -node-gyp@^8.4.1: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-gyp@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.0.0.tgz#e1da2067427f3eb5bb56820cb62bc6b1e4bd2089" - integrity sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, 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-package-data@^3.0.0, normalize-package-data@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.0.tgz#1122d5359af21d4cd08718b92b058a658594177c" - integrity sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g== - dependencies: - hosted-git-info "^5.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-bundled@^1.1.1, npm-bundled@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-install-checks@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" - integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-package-arg@^8.0.0, npm-package-arg@^8.1.0, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: - version "8.1.5" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" - integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== - dependencies: - hosted-git-info "^4.0.1" - semver "^7.3.4" - validate-npm-package-name "^3.0.0" - -npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.0.tgz#a60e9f1e7c03e4e3e4e994ea87fff8b90b522987" - integrity sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw== - dependencies: - hosted-git-info "^5.0.0" - proc-log "^2.0.1" - semver "^7.3.5" - validate-npm-package-name "^4.0.0" - -npm-packlist@^2.1.4: - version "2.2.2" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.2.2.tgz#076b97293fa620f632833186a7a8f65aaa6148c8" - integrity sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg== - dependencies: - glob "^7.1.6" - ignore-walk "^3.0.3" - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -npm-packlist@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" - integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== - dependencies: - glob "^8.0.1" - ignore-walk "^5.0.1" - npm-bundled "^1.1.2" - npm-normalize-package-bin "^1.0.1" - -npm-pick-manifest@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz#76dda30a7cd6b99be822217a935c2f5eacdaca4c" - integrity sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg== - dependencies: - npm-install-checks "^5.0.0" - npm-normalize-package-bin "^1.0.1" - npm-package-arg "^9.0.0" - semver "^7.3.5" - -npm-registry-fetch@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" - integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== - dependencies: - make-fetch-happen "^9.0.1" - minipass "^3.1.3" - minipass-fetch "^1.3.0" - minipass-json-stream "^1.0.1" - minizlib "^2.0.0" - npm-package-arg "^8.0.0" - -npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz#26dc4b26d0a545886e807748032ba2aefaaae96b" - integrity sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w== - dependencies: - make-fetch-happen "^10.0.6" - minipass "^3.1.6" - minipass-fetch "^2.0.3" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^9.0.1" - proc-log "^2.0.0" - -npm-registry-fetch@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz#86f3feb4ce00313bc0b8f1f8f69daae6face1661" - integrity sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA== - dependencies: - "@npmcli/ci-detect" "^1.0.0" - lru-cache "^6.0.0" - make-fetch-happen "^8.0.9" - minipass "^3.1.3" - minipass-fetch "^1.3.0" - minipass-json-stream "^1.0.1" - minizlib "^2.0.0" - npm-package-arg "^8.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^6.0.0, npmlog@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -number-to-bn@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - -nx@14.4.0, nx@^14.3.6: - version "14.4.0" - resolved "https://registry.yarnpkg.com/nx/-/nx-14.4.0.tgz#80bc3d810065836bd873f953c288edda057fc379" - integrity sha512-YemgZ3NHmO5Ik0lruoSCoT5ORaUrcI7gpqtmI1SL8hSPJs4kg2hYevoIb6sE0CTsxuqDHFnRR8qhdPLcSgHGxQ== - dependencies: - "@nrwl/cli" "14.4.0" - "@nrwl/tao" "14.4.0" - "@parcel/watcher" "2.0.4" - chalk "4.1.0" - chokidar "^3.5.1" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - cliui "^7.0.2" - dotenv "~10.0.0" - enquirer "~2.3.6" - fast-glob "3.2.7" - figures "3.2.0" - flat "^5.0.2" - fs-extra "^10.1.0" - glob "7.1.4" - ignore "^5.0.4" - js-yaml "4.1.0" - jsonc-parser "3.0.0" - minimatch "3.0.5" - npm-run-path "^4.0.1" - open "^8.4.0" - semver "7.3.4" - string-width "^4.2.3" - tar-stream "~2.2.0" - tmp "~0.2.1" - tsconfig-paths "^3.9.0" - tslib "^2.3.0" - v8-compile-cache "2.3.0" - yargs "^17.4.0" - yargs-parser "21.0.1" - -object-inspect@^1.12.0, object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -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.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -obliterator@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" - integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== - -oboe@2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" - integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== - dependencies: - http-https "^1.0.0" - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - 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.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - 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.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map-series@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" - integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-pipe@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" - integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== - -p-queue@^6.6.2: - version "6.6.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" - integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== - dependencies: - eventemitter3 "^4.0.4" - p-timeout "^3.2.0" - -p-reduce@^2.0.0, p-reduce@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== - -p-timeout@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/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== - -p-waterfall@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" - integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== - dependencies: - p-reduce "^2.0.0" - -pacote@^13.0.3, pacote@^13.0.5, pacote@^13.4.1: - version "13.6.1" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.1.tgz#ac6cbd9032b4c16e5c1e0c60138dfe44e4cc589d" - integrity sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw== - dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/promise-spawn" "^3.0.0" - "@npmcli/run-script" "^4.1.0" - cacache "^16.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.6" - mkdirp "^1.0.4" - npm-package-arg "^9.0.0" - npm-packlist "^5.1.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" - promise-retry "^2.0.1" - read-package-json "^5.0.0" - read-package-json-fast "^2.0.3" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - -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-conflict-json@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" - integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== - dependencies: - json-parse-even-better-errors "^2.3.1" - just-diff "^5.0.1" - just-diff-apply "^5.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -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" - -parse-path@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.4.tgz#4bf424e6b743fb080831f03b536af9fc43f0ffea" - integrity sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw== - dependencies: - is-ssh "^1.3.0" - protocols "^1.4.0" - qs "^6.9.4" - query-string "^6.13.8" - -parse-url@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-6.0.2.tgz#4a30b057bfc452af64512dfb1a7755c103db3ea1" - integrity sha512-uCSjOvD3T+6B/sPWhR+QowAZcU/o4bjPrVBQBGFxcDF6J6FraCGIaDBsdoQawiaaAVdHvtqBe3w3vKlfBKySOQ== - dependencies: - is-ssh "^1.3.0" - normalize-url "^6.1.0" - parse-path "^4.0.4" - protocols "^1.4.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6, path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -pbkdf2@^3.0.17: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.5.0.tgz#ad5fbc1de78b8a5f99d6fbdd4f6e4eee21d1aca1" - integrity sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -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== - -pify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - -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" - -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@2.7.1, prettier@^2.1.2, prettier@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== - -proc-log@^2.0.0, proc-log@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" - integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" - integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== - dependencies: - read "1" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -protocols@^1.4.0: - version "1.4.8" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" - integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== - -protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - -qs@^6.7.0, qs@^6.9.4: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -query-string@^6.13.8: - version "6.14.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" - integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== - dependencies: - decode-uri-component "^0.2.0" - filter-obj "^1.1.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/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== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -raw-body@^2.4.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -read-cmd-shim@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" - integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== - -read-cmd-shim@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" - integrity sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog== - -read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-3.0.1.tgz#c7108f0b9390257b08c21e3004d2404c806744b9" - integrity sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng== - dependencies: - glob "^7.1.1" - json-parse-even-better-errors "^2.3.0" - normalize-package-data "^3.0.0" - npm-normalize-package-bin "^1.0.0" - -read-package-json@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-4.1.2.tgz#b444d047de7c75d4a160cb056d00c0693c1df703" - integrity sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ== - dependencies: - glob "^7.1.1" - json-parse-even-better-errors "^2.3.0" - normalize-package-data "^3.0.0" - npm-normalize-package-bin "^1.0.0" - -read-package-json@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" - integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg== - dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^2.3.1" - normalize-package-data "^4.0.0" - npm-normalize-package-bin "^1.0.1" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== - dependencies: - find-up "^2.0.0" - read-pkg "^3.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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -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@1, read@~1.0.1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== - dependencies: - mute-stream "~0.0.4" - -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - 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" - -reduce-flatten@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" - integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== - -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.2.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.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.0: - version "2.0.2" - 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== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -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.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.10.0, resolve@^1.8.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0, 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.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rlp@^2.2.3, rlp@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - -rxjs@^6.6.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^7.5.5: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== - dependencies: - tslib "^2.1.0" - -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.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scrypt-js@3.0.1, scrypt-js@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -semaphore-async-await@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" - integrity sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg== - -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.3.4: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - 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== - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -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" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" - integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== - dependencies: - agent-base "^6.0.2" - debug "4" - socks "^2.3.3" - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.3.3, socks@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" - integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== - dependencies: - ip "^1.1.5" - smart-buffer "^4.2.0" - -solc@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - follow-redirects "^1.12.1" - fs-extra "^0.30.0" - js-sha3 "0.8.0" - memorystream "^0.3.1" - require-from-string "^2.0.0" - semver "^5.5.0" - tmp "0.0.33" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== - dependencies: - is-plain-obj "^1.0.0" - -sort-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" - integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== - dependencies: - is-plain-obj "^2.0.0" - -source-map-support@^0.5.13: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - 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.11" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" - integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== - -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - -split2@^3.0.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -ssri@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - -stacktrace-parser@^0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" - integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== - dependencies: - type-fest "^0.7.1" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== - -string-argv@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== - -string-format@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" - integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.0: - 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.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - 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-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-hex-prefix@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - -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.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strong-log-transformer@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" - -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.2.tgz#502acaf82f2b7ee78eb7c83dcac0f89694e5a7bb" - integrity sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA== - -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== - -table-layout@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" - integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== - dependencies: - array-back "^4.0.1" - deep-extend "~0.6.0" - typical "^5.2.0" - wordwrapjs "^4.0.0" - -tar-stream@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.11" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== - -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -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== - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tmp@0.0.33, tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -treeverse@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" - integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== - -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== - -"true-case-path@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" - integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== - -ts-command-line-args@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz#b6188e42efc6cf7a8898e438a873fbb15505ddd6" - integrity sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g== - dependencies: - chalk "^4.1.0" - command-line-args "^5.1.1" - command-line-usage "^6.1.0" - string-format "^2.0.0" - -ts-essentials@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-1.0.4.tgz#ce3b5dade5f5d97cf69889c11bf7d2da8555b15a" - integrity sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ== - -ts-essentials@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" - integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== - -ts-generator@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ts-generator/-/ts-generator-0.1.1.tgz#af46f2fb88a6db1f9785977e9590e7bcd79220ab" - integrity sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ== - dependencies: - "@types/mkdirp" "^0.5.2" - "@types/prettier" "^2.1.1" - "@types/resolve" "^0.0.8" - chalk "^2.4.1" - glob "^7.1.2" - mkdirp "^0.5.1" - prettier "^2.1.2" - resolve "^1.8.1" - ts-essentials "^1.0.0" - -ts-node@^10.7.0, ts-node@^10.8.2: - version "10.8.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.2.tgz#3185b75228cef116bf82ffe8762594f54b2a23f2" - integrity sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tsconfig-paths@^3.9.0: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0, tslib@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tsort@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" - integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tweetnacl-util@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" - integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== - -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/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-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -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.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" - integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== - -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.yarnpkg.com/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@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f" - integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ== - -typechain@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-7.0.1.tgz#65411991327a7031895b1d57b7e0ce7fc9c66376" - integrity sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ== - dependencies: - "@types/prettier" "^2.1.1" - debug "^4.1.1" - fs-extra "^7.0.0" - glob "^7.1.6" - js-sha3 "^0.8.0" - lodash "^4.17.15" - mkdirp "^1.0.4" - prettier "^2.1.2" - ts-command-line-args "^2.2.0" - ts-essentials "^7.0.1" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typescript@^4.6.3: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== - -typical@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" - integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== - -typical@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" - integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== - -uglify-js@^3.1.4: - version "3.16.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.16.2.tgz#0481e1dbeed343ad1c2ddf3c6d42e89b7a6d4def" - integrity sha512-AaQNokTNgExWrkEYA24BTNMSjyqEXPSfhqoS0AxmHkCJ4U+Dyy5AvbGV/sqxuxficEfGGoX3zWw9R7QpLFfEsg== - -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@^5.4.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.6.0.tgz#3fd695d4454970bae3d151326ee4ab645b8d1962" - integrity sha512-mc+8SY1fXubTrdx4CXDkeFFGV8lI3Tq4I/70U1V8Z6g4iscGII0uLO7CPnDt56bXEbvaKwo2T2+VrteWbZiXiQ== - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -upath@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" - integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== - -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.9" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" - integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== - dependencies: - node-gyp-build "^4.3.0" - -utf8@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@^0.12.0: - version "0.12.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" - integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - safe-buffer "^5.1.2" - which-typed-array "^1.1.2" - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -v8-compile-cache@2.3.0, v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - 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" - -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== - dependencies: - builtins "^1.0.3" - -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== - dependencies: - builtins "^5.0.0" - -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== - -wcwidth@^1.0.0: - 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.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz#f8f808928560d3e64e0c8d7bdd163aa4766bcf40" - integrity sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg== - dependencies: - web3-eth-iban "1.7.4" - web3-utils "1.7.4" - -web3-core-method@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.7.4.tgz#3873c6405e1a0a8a1efc1d7b28de8b7550b00c15" - integrity sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ== - dependencies: - "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.7.4" - web3-core-promievent "1.7.4" - web3-core-subscriptions "1.7.4" - web3-utils "1.7.4" - -web3-core-promievent@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz#80a75633fdfe21fbaae2f1e38950edb2f134868c" - integrity sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA== - dependencies: - eventemitter3 "4.0.4" - -web3-core-requestmanager@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz#2dc8a526dab8183dca3fef54658621801b1d0469" - integrity sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA== - dependencies: - util "^0.12.0" - web3-core-helpers "1.7.4" - web3-providers-http "1.7.4" - web3-providers-ipc "1.7.4" - web3-providers-ws "1.7.4" - -web3-core-subscriptions@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz#cfbd3fa71081a8c8c6f1a64577a1a80c5bd9826f" - integrity sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.7.4" - -web3-core@^1.7.1: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.7.4.tgz#943fff99134baedafa7c65b4a0bbd424748429ff" - integrity sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q== - dependencies: - "@types/bn.js" "^5.1.0" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-core-requestmanager "1.7.4" - web3-utils "1.7.4" - -web3-eth-iban@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz#711fb2547fdf0f988060027331b2b6c430505753" - integrity sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w== - dependencies: - bn.js "^5.2.1" - web3-utils "1.7.4" - -web3-providers-http@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.7.4.tgz#8209cdcb115db5ccae1f550d1c4e3005e7538d02" - integrity sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA== - dependencies: - web3-core-helpers "1.7.4" - xhr2-cookies "1.1.0" - -web3-providers-ipc@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz#02e85e99e48f432c9d34cee7d786c3685ec9fcfa" - integrity sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw== - dependencies: - oboe "2.1.5" - web3-core-helpers "1.7.4" - -web3-providers-ws@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz#6e60bcefb456f569a3e766e386d7807a96f90595" - integrity sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.7.4" - websocket "^1.0.32" - -web3-utils@1.7.4, web3-utils@^1.7.1: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.4.tgz#eb6fa3706b058602747228234453811bbee017f5" - integrity sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA== - dependencies: - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -websocket@^1.0.32: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -whatwg-url@^8.4.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - -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-typed-array@^1.1.2: - version "1.1.8" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.8.tgz#0cfd53401a6f334d90ed1125754a42ed663eb01f" - integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.20.0" - for-each "^0.3.3" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.9" - -which@2.0.2, which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -wordwrapjs@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" - integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== - dependencies: - reduce-flatten "^2.0.0" - typical "^5.2.0" - -workerpool@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" - integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== - -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.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -write-json-file@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" - integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.15" - make-dir "^2.1.0" - pify "^4.0.1" - sort-keys "^2.0.0" - write-file-atomic "^2.4.2" - -write-json-file@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-4.3.0.tgz#908493d6fd23225344af324016e4ca8f702dd12d" - integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== - dependencies: - detect-indent "^6.0.0" - graceful-fs "^4.1.15" - is-plain-obj "^2.0.0" - make-dir "^3.0.0" - sort-keys "^4.0.0" - write-file-atomic "^3.0.0" - -write-pkg@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" - integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== - dependencies: - sort-keys "^2.0.0" - type-fest "^0.4.1" - write-json-file "^3.2.0" - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@^7.4.6: - version "7.5.8" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a" - integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw== - -xhr2-cookies@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" - integrity sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g== - dependencies: - cookiejar "^2.1.1" - -xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0, yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@21.0.1, yargs-parser@^21.0.0: - version "21.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== - -yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0, yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.4.0: - version "17.5.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" - integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== - dependencies: - cliui "^7.0.2" - 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.0.0" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From c7f2fe6de9de1f26b8141d2ce0a40ce7d697e388 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 13 Jul 2022 17:03:04 +0530 Subject: [PATCH 0013/1247] latest build v1.0 --- package.json | 10 ++++++++++ packages/node-client/package.json | 2 ++ packages/relayer/package.json | 5 ++++- packages/smart-account/package.json | 2 ++ packages/smart-account/src/SmartAccount.ts | 12 ++++++++++++ packages/smart-account/src/types.ts | 4 ++++ 6 files changed, 34 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 42ab017b7..078c91eed 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,9 @@ { "name": "biconomy-sdk", + "repository": { + "type": "git", + "url": "https://github.com/bcnmy/biconomy-client-sdk" + }, "private": false, "scripts": { "clean": "lerna clean", @@ -12,6 +16,12 @@ "diff": "lerna diff", "new-version": "lerna version --conventional-commits --yes" }, + "changelog": { + "labels": { + "feature": "New Feature", + "bug": "Bug Fix" + } + }, "workspaces": { "packages": [ "packages/*" diff --git a/packages/node-client/package.json b/packages/node-client/package.json index b88f57322..e86c3a0a5 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -29,6 +29,7 @@ ], "devDependencies": { "@biconomy-sdk/core-types": "*", + "@gnosis.pm/safe-core-sdk": "^2.1.0", "@gnosis.pm/safe-ethers-lib": "^1.1.0", "@gnosis.pm/safe-web3-lib": "^1.1.0", "@nomiclabs/hardhat-ethers": "^2.0.5", @@ -69,6 +70,7 @@ }, "dependencies": { "@biconomy-sdk/core-types": "*", + "@gnosis.pm/safe-core-sdk": "^2.1.0", "@ethersproject/abstract-signer": "^5.6.0", "node-fetch": "^2.6.6" } diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 16d2fa849..72b2454ba 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -22,7 +22,10 @@ "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" }, "scripts": { - "test": "echo \"Error: run tests from root\" && exit 1" + "unbuild": "rimraf dist *.tsbuildinfo", + "build": "rimraf dist && tsc", + "format": "prettier --write \"{src,tests}/**/*.ts\"", + "lint": "tslint -p tsconfig.json" }, "bugs": { "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 1eb87d2ac..82201de98 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -22,6 +22,7 @@ "dist" ], "devDependencies": { + "@biconomy-sdk/node-client": "*", "@biconomy-sdk/core-types": "*", "@biconomy-sdk/ethers-lib": "*", "@types/node": "^17.0.23", @@ -35,6 +36,7 @@ "typescript": "^4.6.3" }, "dependencies": { + "@biconomy-sdk/node-client": "*", "@biconomy-sdk/core-types": "*", "@biconomy-sdk/ethers-lib": "*", "@ethersproject/bignumber": "^5.6.0", diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index da1251c34..522291f56 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -12,6 +12,7 @@ import { MultiSendContract, TransactionResult } from '@biconomy-sdk/core-types' +import SafeServiceClient from '@biconomy-sdk/node-client'; class SmartAccount { // { ethAdapter } is a window that gave access to all the Implemented function of it @@ -23,6 +24,8 @@ class SmartAccount { // hold supported network info supportedNetworkIds!: ChainId[] + nodeClient!: SafeServiceClient + // contract instances smartWalletContract!: { [chainId: number]: SmartWalletContract } multiSendContract!: { [chainId: number]: MultiSendContract } @@ -36,8 +39,13 @@ class SmartAccount { this.multiSendContract = {} this.smartWalletFacoryContract = {} this.supportedNetworkIds = config.supportedNetworksIds + + //this.nodeClient = new SafeServiceClient() ? // providers and contracts initialization + + // this.getSupportedChainsInfo + for (let index = 0; index < this.supportedNetworkIds.length; index++) { const provider = new ethers.providers.JsonRpcProvider( networks[this.supportedNetworkIds[index]].providerUrl @@ -52,9 +60,13 @@ class SmartAccount { // contracts initialization // comments as contracts are not yet deployed this.initializeContracts(this.supportedNetworkIds[index]).then() + } } + // getSupportedNetworks / chains endpoint + + // intialize contract to be used throughout this class private async initializeContracts(chainId: ChainId): Promise { this.smartWalletContract[networks[chainId].chainId] = await getSmartWalletContract( diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index d29ee7ef2..0dad90ebe 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -3,6 +3,10 @@ export interface SmartAccountConfig { activeNetworkId: ChainId supportedNetworksIds: ChainId[] } +// backend_url +// relayer_url +// provider? + export interface ContractInfo { defaultAddress: string version: string From cf61c26df7f38b3389b4c2ee82e517e1bac886ed Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 14 Jul 2022 13:46:41 +0530 Subject: [PATCH 0014/1247] node client work started + remove eth adapter + get chain config --- packages/node-client/src/SafeServiceClient.ts | 69 +++++++++------- .../src/types/safeTransactionServiceTypes.ts | 45 +++++++++++ packages/node-client/tests/utils/config.ts | 3 +- .../tests/utils/setupServiceClient.ts | 2 +- packages/smart-account/src/SmartAccount.ts | 11 ++- packages/smart-account/src/types.ts | 78 ++++++++++++++++--- packages/smart-account/tests/utils/index.ts | 0 packages/smart-account/tests/wallet.spec.ts | 0 8 files changed, 165 insertions(+), 43 deletions(-) create mode 100644 packages/smart-account/tests/utils/index.ts create mode 100644 packages/smart-account/tests/wallet.spec.ts diff --git a/packages/node-client/src/SafeServiceClient.ts b/packages/node-client/src/SafeServiceClient.ts index b4c4b6768..70e866de4 100644 --- a/packages/node-client/src/SafeServiceClient.ts +++ b/packages/node-client/src/SafeServiceClient.ts @@ -29,7 +29,8 @@ import { SignatureResponse, TokenInfoListResponse, TokenInfoResponse, - TransferListResponse + TransferListResponse, + ChainConfig } from './types/safeTransactionServiceTypes' import { getTxServiceBaseUrl } from './utils' import { HttpMethod, sendRequest } from './utils/httpRequests' @@ -38,16 +39,18 @@ export interface SafeServiceClientConfig { /** txServiceUrl - Safe Transaction Service URL */ txServiceUrl: string /** ethAdapter - Ethereum adapter */ - ethAdapter: EthAdapter + // ethAdapter: EthAdapter } class SafeServiceClient implements SafeTransactionService { #txServiceBaseUrl: string - #ethAdapter: EthAdapter + // #ethAdapter: EthAdapter - constructor({ txServiceUrl, ethAdapter }: SafeServiceClientConfig) { + // Review + // Removed ethAdapter + constructor({ txServiceUrl }: SafeServiceClientConfig) { this.#txServiceBaseUrl = getTxServiceBaseUrl(txServiceUrl) - this.#ethAdapter = ethAdapter + // this.#ethAdapter = ethAdapter } /** @@ -106,13 +109,25 @@ class SafeServiceClient implements SafeTransactionService { if (ownerAddress === '') { throw new Error('Invalid owner address') } - const { address } = await this.#ethAdapter.getEip3770Address(ownerAddress) + const address = ownerAddress return sendRequest({ url: `${this.#txServiceBaseUrl}/owners/${address}/safes/`, method: HttpMethod.Get }) } + /** + * Returns the list of supported chains and their configurations + * + * @returns The list of Network info + */ + async getChainInfo(): Promise> { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/chains/`, + method: HttpMethod.Get + }) + } + /** * Returns all the information of a Safe transaction. * @@ -189,7 +204,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress return sendRequest({ url: `${this.#txServiceBaseUrl}/safes/${address}/`, method: HttpMethod.Get @@ -208,7 +223,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress return sendRequest({ url: `${this.#txServiceBaseUrl}/safes/${address}/delegates/`, method: HttpMethod.Get @@ -239,8 +254,8 @@ class SafeServiceClient implements SafeTransactionService { if (delegate === '') { throw new Error('Invalid Safe delegate address') } - const { address: safeAddress } = await this.#ethAdapter.getEip3770Address(safe) - const { address: delegateAddress } = await this.#ethAdapter.getEip3770Address(delegate) + const safeAddress = safe + const delegateAddress = delegate const totp = Math.floor(Date.now() / 1000 / 3600) const data = delegateAddress + totp const signature = await signer.signMessage(data) @@ -272,7 +287,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress const totp = Math.floor(Date.now() / 1000 / 3600) const data = address + totp const signature = await signer.signMessage(data) @@ -305,8 +320,8 @@ class SafeServiceClient implements SafeTransactionService { if (delegate === '') { throw new Error('Invalid Safe delegate address') } - const { address: safeAddress } = await this.#ethAdapter.getEip3770Address(safe) - const { address: delegateAddress } = await this.#ethAdapter.getEip3770Address(delegate) + const safeAddress = safe + const delegateAddress = delegate const totp = Math.floor(Date.now() / 1000 / 3600) const data = delegateAddress + totp const signature = await signer.signMessage(data) @@ -335,7 +350,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress return sendRequest({ url: `${this.#txServiceBaseUrl}/safes/${address}/creation/`, method: HttpMethod.Get @@ -360,7 +375,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress return sendRequest({ url: `${this.#txServiceBaseUrl}/safes/${address}/multisig-transactions/estimations/`, method: HttpMethod.Post, @@ -388,8 +403,8 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address: safe } = await this.#ethAdapter.getEip3770Address(safeAddress) - const { address: sender } = await this.#ethAdapter.getEip3770Address(senderAddress) + const safe= safeAddress; + const sender = senderAddress; if (safeTxHash === '') { throw new Error('Invalid safeTxHash') } @@ -418,7 +433,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress return sendRequest({ url: `${this.#txServiceBaseUrl}/safes/${address}/incoming-transfers/`, method: HttpMethod.Get @@ -438,7 +453,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress return sendRequest({ url: `${this.#txServiceBaseUrl}/safes/${address}/module-transactions/`, method: HttpMethod.Get @@ -457,7 +472,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress return sendRequest({ url: `${this.#txServiceBaseUrl}/safes/${address}/multisig-transactions/`, method: HttpMethod.Get @@ -481,7 +496,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress let nonce = currentNonce ? currentNonce : (await this.getSafeInfo(address)).nonce return sendRequest({ url: `${ @@ -506,7 +521,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress const url = new URL(`${this.#txServiceBaseUrl}/safes/${address}/all-transactions/`) const trusted = options?.trusted?.toString() || 'true' @@ -537,7 +552,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress const pendingTransactions = await this.getPendingTransactions(address) if (pendingTransactions.results.length > 0) { const nonces = pendingTransactions.results.map((tx) => tx.nonce) @@ -564,7 +579,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress let url = new URL(`${this.#txServiceBaseUrl}/safes/${address}/balances/`) const excludeSpam = options?.excludeSpamTokens?.toString() || 'true' url.searchParams.set('exclude_spam', excludeSpam) @@ -588,7 +603,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress let url = new URL(`${this.#txServiceBaseUrl}/safes/${address}/balances/usd/`) const excludeSpam = options?.excludeSpamTokens?.toString() || 'true' url.searchParams.set('exclude_spam', excludeSpam) @@ -612,7 +627,7 @@ class SafeServiceClient implements SafeTransactionService { if (safeAddress === '') { throw new Error('Invalid Safe address') } - const { address } = await this.#ethAdapter.getEip3770Address(safeAddress) + const address = safeAddress let url = new URL(`${this.#txServiceBaseUrl}/safes/${address}/collectibles/`) const excludeSpam = options?.excludeSpamTokens?.toString() || 'true' url.searchParams.set('exclude_spam', excludeSpam) @@ -644,7 +659,7 @@ class SafeServiceClient implements SafeTransactionService { if (tokenAddress === '') { throw new Error('Invalid token address') } - const { address } = await this.#ethAdapter.getEip3770Address(tokenAddress) + const address = tokenAddress return sendRequest({ url: `${this.#txServiceBaseUrl}/tokens/${address}/`, method: HttpMethod.Get diff --git a/packages/node-client/src/types/safeTransactionServiceTypes.ts b/packages/node-client/src/types/safeTransactionServiceTypes.ts index 82a2fb3f4..b313eb5f4 100644 --- a/packages/node-client/src/types/safeTransactionServiceTypes.ts +++ b/packages/node-client/src/types/safeTransactionServiceTypes.ts @@ -19,6 +19,51 @@ export type SmartAccountInfoResponse = { } } +export type BlockExplorerConfig = { + address: string + txHash: string + api: string +} + +export type TokenInfo = { + id: number + name: string + symbol: string + blockChain: number + ercType?: string + decimals: number + logoUri: string + address: string + isNativeToken: boolean + isEnabled: boolean + cmcId: number //Verify + price: number //Verify + createdAt: Date + updatedAt: Date +} + +export type ChainConfig = { + chain_id: number + name: string + symbol: string + isL2: boolean + isMainnet: boolean + description: string + blockExplorerUriTemplate: BlockExplorerConfig + ensRegistryAddress: string + walletFactoryAddress: string + walletAddress: string // base wallet + entryPoint: string //should make this address var + fallBackHandler: string //should make this address var + relayerURL: string + providerUrl: string + indexerUrl: string + backendNodeUrl: string + createdAt: Date + updatedAt: Date + token: TokenInfo +} + export type MasterCopyResponse = { address: string version: string diff --git a/packages/node-client/tests/utils/config.ts b/packages/node-client/tests/utils/config.ts index 4e6919114..1a718e490 100644 --- a/packages/node-client/tests/utils/config.ts +++ b/packages/node-client/tests/utils/config.ts @@ -1,5 +1,6 @@ const config = { - BASE_URL: 'https://safe-transaction.rinkeby.gnosis.io', + // Temp + BASE_URL: 'http://localhost:3000/v1', JSON_RPC: `https://rinkeby.infura.io/v3/${process.env.INFURA_KEY}`, EIP_3770_PREFIX: 'rin' } diff --git a/packages/node-client/tests/utils/setupServiceClient.ts b/packages/node-client/tests/utils/setupServiceClient.ts index 1089b367d..60e66fbff 100644 --- a/packages/node-client/tests/utils/setupServiceClient.ts +++ b/packages/node-client/tests/utils/setupServiceClient.ts @@ -15,6 +15,6 @@ export async function getServiceClient(signerPk: string): Promise) ? + this.nodeClient = new SafeServiceClient({txServiceUrl: config.backend_url}); // providers and contracts initialization - // this.getSupportedChainsInfo + const chainConfig = this.getSupportedChainsInfo(); + console.log("chain config: ", chainConfig); for (let index = 0; index < this.supportedNetworkIds.length; index++) { const provider = new ethers.providers.JsonRpcProvider( @@ -83,6 +84,10 @@ class SmartAccount { ) } + private async getSupportedChainsInfo(): Promise { + return this.nodeClient.getChainInfo(); + } + // return adapter instance to used for blockchain interactions ethersAdapter(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): EthersAdapter { return this.ethAdapter[chainId] diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 0dad90ebe..46a09e074 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -2,6 +2,7 @@ export interface SmartAccountConfig { owner: string // EOA address activeNetworkId: ChainId supportedNetworksIds: ChainId[] + backend_url: string } // backend_url // relayer_url @@ -52,11 +53,56 @@ export interface NetworkConfig { isDefaultChain?: boolean } -export type BlockExplorerConfig = { +/*export type BlockExplorerConfig = { name?: string rootUrl: string addressUrl?: string txnHashUrl?: string +}*/ + +export type BlockExplorerConfig = { + address: string + txHash: string + api: string +} + +export type TokenInfo = { + id: number + name: string + symbol: string + blockChain: number + ercType?: string + decimals: number + logoUri: string + address: string + isNativeToken: boolean + isEnabled: boolean + cmcId: number //Verify + price: number //Verify + createdAt: Date + updatedAt: Date +} + +export type ChainConfig = { + chain_id: number + name: string + symbol: string + isL2: boolean + isMainnet: boolean + description: string + blockExplorerUriTemplate: BlockExplorerConfig + ensRegistryAddress: string + walletFactoryAddress: string + walletAddress: string // base wallet + entryPoint: string //should make this address var + fallBackHandler: string //should make this address var + relayerURL: string + providerUrl: string + indexerUrl: string + backendNodeUrl: string + createdAt: Date + updatedAt: Date + token: TokenInfo } export const networks: Record = { @@ -67,8 +113,10 @@ export const networks: Record = { name: 'mainnet', title: 'Ethereum', blockExplorer: { - name: 'Etherscan', - rootUrl: 'https://etherscan.io/' + // name: 'Etherscan', + address: 'https://etherscan.io/address', + txHash: 'https://etherscan.io/tx', + api: 'https://api.etherscan.io/' }, providerUrl: 'https://mainnet.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' }, @@ -80,8 +128,10 @@ export const networks: Record = { title: 'Ropsten', testnet: true, blockExplorer: { - name: 'Etherscan (Ropsten)', - rootUrl: 'https://ropsten.etherscan.io/' + //name: 'Etherscan (Ropsten)', + address: 'https://ropsten.etherscan.io/address', + txHash: 'https://ropsten.etherscan.io/tx', + api: 'https://api.ropsten.etherscan.io/' }, providerUrl: 'https://ropsten.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' }, @@ -93,8 +143,10 @@ export const networks: Record = { title: 'Rinkeby', testnet: true, blockExplorer: { - name: 'Etherscan (Rinkeby)', - rootUrl: 'https://rinkeby.etherscan.io/' + //name: 'Etherscan (Rinkeby)', + address: 'https://rinkeby.etherscan.io/address', + txHash: 'https://rinkeby.etherscan.io/tx', + api: 'https://api.rinkeby.etherscan.io/' }, providerUrl: 'https://rinkeby.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' }, @@ -106,8 +158,10 @@ export const networks: Record = { title: 'Goerli', testnet: true, blockExplorer: { - name: 'Etherscan (Goerli)', - rootUrl: 'https://goerli.etherscan.io/' + //name: 'Etherscan (Goerli)', + address: 'https://goerli.etherscan.io/address', + txHash: 'https://goerli.etherscan.io/tx', + api: 'https://api.goerli.etherscan.io/' }, providerUrl: 'https://goerli.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' }, @@ -119,8 +173,10 @@ export const networks: Record = { title: 'Kovan', testnet: true, blockExplorer: { - name: 'Etherscan (Kovan)', - rootUrl: 'https://kovan.etherscan.io/' + //name: 'Etherscan (Kovan)', + address: 'https://kovan.etherscan.io/address', + txHash: 'https://kovan.etherscan.io/tx', + api: 'https://api.kovan.etherscan.io/', }, providerUrl: 'https://kovan.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' } diff --git a/packages/smart-account/tests/utils/index.ts b/packages/smart-account/tests/utils/index.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/smart-account/tests/wallet.spec.ts b/packages/smart-account/tests/wallet.spec.ts new file mode 100644 index 000000000..e69de29bb From 3ea0f5c8198da1900d4c4c73e0eb7037a05b5685 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sat, 16 Jul 2022 03:50:17 +0530 Subject: [PATCH 0015/1247] modification in smart account package based on tests --- .../src/contracts/SmartWalletContract.ts | 1 + .../smart-contract-wallet/SmartWallet.sol | 4 ++ .../SmartWallet/SmartWalletContractEthers.ts | 7 +++- packages/node-client/src/utils/index.ts | 2 +- packages/smart-account/package.json | 2 + packages/smart-account/src/SmartAccount.ts | 10 ++++- .../smart-account/tests/smartaccount.spec.ts | 38 +++++++++++++++++++ packages/smart-account/tests/wallet.spec.ts | 0 packages/smart-account/tsconfig.json | 3 +- 9 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 packages/smart-account/tests/smartaccount.spec.ts delete mode 100644 packages/smart-account/tests/wallet.spec.ts diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index 203a591e6..5a86db2ca 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -10,6 +10,7 @@ import { BigNumber } from '@ethersproject/bignumber' export interface SmartWalletContract { getAddress(): string + getOwner(): Promise getVersion(): Promise getNonce(batchId: number): Promise getTransactionHash(smartAccountTrxData: SmartAccountTrxData): Promise diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol index 2b4141f4b..fb9a9b2de 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol @@ -70,6 +70,10 @@ contract SmartWallet is emit EOAChanged(address(this),owner,_newOwner); } + function getOwner() public view returns(address){ + return owner; + } + /** * @notice Updates the implementation of the base wallet * @param _implementation New wallet implementation diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts index b85d3fbd2..baa1560ca 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts @@ -11,6 +11,7 @@ import { import { toTxResult } from '../../utils' import { SmartWalletContract as SmartWalletContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' import { SmartWalletContractInterface } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' +import { getJsonWalletAddress } from 'ethers/lib/utils' class SmartWalletContractEthers implements SmartWalletContract { constructor(public contract: SmartWalletContract_TypeChain) {} @@ -18,12 +19,16 @@ class SmartWalletContractEthers implements SmartWalletContract { return this.contract.address } + async getOwner(): Promise { + return await this.contract.getOwner() + } + async getVersion(): Promise { return (await this.contract.VERSION()) as SmartAccountVersion } async getNonce(batchId: number): Promise { - return this.contract.getNonce(batchId) + return await this.contract.getNonce(batchId) } async getTransactionHash(smartAccountTrxData: SmartAccountTrxData): Promise { return this.contract.getTransactionHash( diff --git a/packages/node-client/src/utils/index.ts b/packages/node-client/src/utils/index.ts index e1110bbbb..d1017f5a3 100644 --- a/packages/node-client/src/utils/index.ts +++ b/packages/node-client/src/utils/index.ts @@ -1,3 +1,3 @@ export function getTxServiceBaseUrl(txServiceUrl: string): string { - return `${txServiceUrl}/api/v1` + return `${txServiceUrl}` } diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 82201de98..2730ecf2d 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -13,6 +13,8 @@ "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", "build": "rimraf dist && tsc", + "test": "yarn test:concurrently 'yarn test:run'", + "test:run": "yarn test:file tests/**/*.spec.ts", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index a0b03ddaf..9b5fa076b 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -44,7 +44,7 @@ class SmartAccount { // providers and contracts initialization - const chainConfig = this.getSupportedChainsInfo(); + const chainConfig = this.getSupportedChainsInfo().then(); console.log("chain config: ", chainConfig); for (let index = 0; index < this.supportedNetworkIds.length; index++) { @@ -60,11 +60,19 @@ class SmartAccount { }) // contracts initialization // comments as contracts are not yet deployed + + // move under chain info helper this.initializeContracts(this.supportedNetworkIds[index]).then() } } + // only for testing + public async init() { + const chainConfig = await this.getSupportedChainsInfo(); + console.log("chain config: ", chainConfig); + } + // getSupportedNetworks / chains endpoint diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts new file mode 100644 index 000000000..347a6b936 --- /dev/null +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -0,0 +1,38 @@ +import SmartAccount from '@biconomy-sdk/smart-account'; // + + +export function main() { + enum ChainId { + // Ethereum + MAINNET = 1, + ROPSTEN = 3, + RINKEBY = 4, + GOERLI = 5, + KOVAN = 42 + } + +const wallet = new SmartAccount({ + owner: '0x4281d6888D7a3A6736B0F596823810ffBd7D4808', + activeNetworkId: ChainId.MAINNET, + supportedNetworksIds: [ChainId.MAINNET, ChainId.RINKEBY], + backend_url: "http://localhost:3000/v1" + }) + + wallet.ethersAdapter(ChainId.RINKEBY).getTransaction('0x3dbc9da5b081a93658d4bf2f85bce2e74332b1806b287248b318c6da13c27994') + .then(res=>{ + console.log('Tx Details are ', res); + }) + + wallet.ethersAdapter(ChainId.MAINNET).getBalance('0x4281d6888D7a3A6736B0F596823810ffBd7D4808') + .then(res=>{ + console.log('Balance is ', res); + }) +} + +main(); + + + /*wallet.ethersAdapter(ChainId.RINKEBY).getOwner() + .then(res=>{ + console.log('Chain id is ', res); + })*/ \ No newline at end of file diff --git a/packages/smart-account/tests/wallet.spec.ts b/packages/smart-account/tests/wallet.spec.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/smart-account/tsconfig.json b/packages/smart-account/tsconfig.json index f8356d4ec..c4259935a 100644 --- a/packages/smart-account/tsconfig.json +++ b/packages/smart-account/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "composite": true, "outDir": "dist", - "baseUrl": "src" + "baseUrl": "src", + "resolveJsonModule": true }, "include": ["src", "src/**/*.json"] } From 630cfa89215fab17db0e37fd8e85f70c9557b168 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sun, 17 Jul 2022 18:22:22 +0530 Subject: [PATCH 0016/1247] chaanges based on smart account test + init wallet + dev notes + updated addresses and abi --- package.json | 4 +- .../SmartWalletProxyFactoryEthersContract.ts | 4 +- packages/smart-account/src/SmartAccount.ts | 67 +- .../smart-account/src/assets/SmartWallet.json | 2026 +++++++++-------- .../src/assets/WalletFactory.json | 302 +-- 5 files changed, 1245 insertions(+), 1158 deletions(-) diff --git a/package.json b/package.json index 078c91eed..589200e71 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "scripts": { "clean": "lerna clean", "unbuild": "lerna run unbuild", - "build": "lerna run build --stream --npm-client=yarn", + "build": "npm install -D nx@latest && lerna run build --stream --npm-client=yarn", "test": "FORCE_COLOR=1 lerna run test --stream --npm-client=yarn", "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", "format": "lerna run format --npm-client=yarn", @@ -30,7 +30,7 @@ "author": "Biconomy (https://biconomy.io)", "devDependencies": { "lerna": "^5.1.6", - "nx": "^14.4.2", + "nx": "^14.4.3", "prettier": "2.7.1", "ts-node": "^10.8.2" }, diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts index f870f7d2e..db252595f 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts @@ -2,7 +2,7 @@ import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/cor import { toTxResult } from '../../utils' import { SmartWalletFactoryContract as SmartWalletFactoryContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' -class SmartWalletFacoryContractEthers implements SmartWalletFactoryContract { +class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { constructor(public contract: SmartWalletFactoryContract_TypeChain) {} getAddress(): string { @@ -38,4 +38,4 @@ class SmartWalletFacoryContractEthers implements SmartWalletFactoryContract { } } -export default SmartWalletFacoryContractEthers +export default SmartWalletFactoryContractEthers diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 9b5fa076b..89df84562 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -29,7 +29,7 @@ class SmartAccount { // contract instances smartWalletContract!: { [chainId: number]: SmartWalletContract } multiSendContract!: { [chainId: number]: MultiSendContract } - smartWalletFacoryContract!: { [chainId: number]: SmartWalletFactoryContract } + smartWalletFactoryContract!: { [chainId: number]: SmartWalletFactoryContract } constructor(config: SmartAccountConfig) { @@ -37,59 +37,54 @@ class SmartAccount { this.ethAdapter = {} this.smartWalletContract = {} this.multiSendContract = {} - this.smartWalletFacoryContract = {} + this.smartWalletFactoryContract = {} this.supportedNetworkIds = config.supportedNetworksIds this.nodeClient = new SafeServiceClient({txServiceUrl: config.backend_url}); + } - // providers and contracts initialization - - const chainConfig = this.getSupportedChainsInfo().then(); + // for testing + // providers and contracts initialization + public async init(): Promise { + const chainConfig = await this.getSupportedChainsInfo(); console.log("chain config: ", chainConfig); - for (let index = 0; index < this.supportedNetworkIds.length; index++) { + this.supportedNetworkIds.forEach(async (network) => { const provider = new ethers.providers.JsonRpcProvider( - networks[this.supportedNetworkIds[index]].providerUrl + networks[network].providerUrl ) - const signer = provider.getSigner(config.owner) + const signer = provider.getSigner(this.#smartAccountConfig.owner) // instantiating EthersAdapter instance and maintain it as class level variable - this.ethAdapter[this.supportedNetworkIds[index]] = new EthersAdapter({ + this.ethAdapter[network] = new EthersAdapter({ ethers, signer }) - // contracts initialization - // comments as contracts are not yet deployed - - // move under chain info helper - this.initializeContracts(this.supportedNetworkIds[index]).then() - - } - } - // only for testing - public async init() { - const chainConfig = await this.getSupportedChainsInfo(); - console.log("chain config: ", chainConfig); + this.initializeContracts(network); + }) + return this; } // getSupportedNetworks / chains endpoint // intialize contract to be used throughout this class - private async initializeContracts(chainId: ChainId): Promise { - this.smartWalletContract[networks[chainId].chainId] = await getSmartWalletContract( + private initializeContracts(chainId: ChainId) { + this.smartWalletFactoryContract[networks[chainId].chainId] = getSmartWalletFactoryContract( chainId, this.ethAdapter[chainId] - ) - this.multiSendContract[networks[chainId].chainId] = await getMultiSendContract( + ); + + this.smartWalletContract[networks[chainId].chainId] = getSmartWalletContract( chainId, this.ethAdapter[chainId] - ) - this.smartWalletFacoryContract[networks[chainId].chainId] = await getSmartWalletFactoryContract( + ); + + this.multiSendContract[networks[chainId].chainId] = getMultiSendContract( chainId, this.ethAdapter[chainId] - ) + ); } private async getSupportedChainsInfo(): Promise { @@ -116,9 +111,13 @@ class SmartAccount { return this.multiSendContract[networks[chainId].chainId] } - // return proxy wallet instance factory(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletFactoryContract { - return this.smartWalletFacoryContract[networks[chainId].chainId] + return this.smartWalletFactoryContract[networks[chainId].chainId] + } + + // Review + async getAddress(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId) : Promise { + return await this.getAddressForCounterfactualWallet(index,chainId); } /** @@ -127,8 +126,8 @@ class SmartAccount { * @description return address for Smart account * @returns */ - getAddressForCounterfactualWallet(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - return this.smartWalletFacoryContract[ + async getAddressForCounterfactualWallet(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + return await this.smartWalletFactoryContract[ networks[chainId].chainId ].getAddressForCounterfactualWallet(this.#smartAccountConfig.owner, index) } @@ -139,6 +138,8 @@ class SmartAccount { * @description deploy Smart Account for EOA against specific index * @returns */ + // Marked for deletion + // Call the relayer for deployment! async deployCounterFactualWallet( index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId @@ -150,7 +151,7 @@ class SmartAccount { throw new Error('Smart Wallet is not deployed on the current network') } // TODO: relayer stuff - return this.smartWalletFacoryContract[chainId].deployCounterFactualWallet( + return this.smartWalletFactoryContract[chainId].deployCounterFactualWallet( this.#smartAccountConfig.owner, networkInfo.entryPoint, networkInfo.fallbackHandler, diff --git a/packages/smart-account/src/assets/SmartWallet.json b/packages/smart-account/src/assets/SmartWallet.json index aebbe572f..d8489fbdb 100644 --- a/packages/smart-account/src/assets/SmartWallet.json +++ b/packages/smart-account/src/assets/SmartWallet.json @@ -1,980 +1,1066 @@ { - "defaultAddress": "0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A", + "defaultAddress": "0xEAD2502dAe0b5731edE898Fd48Ea59C7f0dA0a05", "released": true, "contractName": "SmartWallet", "version": "1.0.0", "networkAddresses": { - "1": "0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A", - "4": "0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A", - "5": "0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A", - "42": "0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A", - "100": "0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A" + "1": "0xEAD2502dAe0b5731edE898Fd48Ea59C7f0dA0a05", + "4": "0xEAD2502dAe0b5731edE898Fd48Ea59C7f0dA0a05", + "5": "0xEAD2502dAe0b5731edE898Fd48Ea59C7f0dA0a05", + "42": "0xEAD2502dAe0b5731edE898Fd48Ea59C7f0dA0a05", + "100": "0xEAD2502dAe0b5731edE898Fd48Ea59C7f0dA0a05" }, "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "ChangedFallbackHandler", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "DisabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_scw", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_oldEOA", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_newEOA", - "type": "address" - } - ], - "name": "EOAChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "EnabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldEntryPoint", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newEntryPoint", - "type": "address" - } - ], - "name": "EntryPointChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "payment", - "type": "uint256" - } - ], - "name": "ExecutionFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "payment", - "type": "uint256" - } - ], - "name": "ExecutionSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "checkSignatures", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevModule", - "type": "address" - }, - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "disableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domainSeparator", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "enableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "safeTxGas", - "type": "uint256" - } - ], - "internalType": "struct WalletStorage.Transaction", - "name": "_tx", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "internalType": "struct WalletStorage.FeeRefund", - "name": "refundInfo", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "encodeTransactionData", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "entryPoint", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "exec", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "execBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "execFromEntryPoint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "safeTxGas", - "type": "uint256" - } - ], - "internalType": "struct WalletStorage.Transaction", - "name": "_tx", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "batchId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "internalType": "struct WalletStorage.FeeRefund", - "name": "refundInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "execTransaction", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModuleReturnData", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getChainId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "start", - "type": "address" - }, - { - "internalType": "uint256", - "name": "pageSize", - "type": "uint256" - } - ], - "name": "getModulesPaginated", - "outputs": [ - { - "internalType": "address[]", - "name": "array", - "type": "address[]" - }, - { - "internalType": "address", - "name": "next", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "batchId", - "type": "uint256" - } - ], - "name": "getNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "safeTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "getTransactionHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_entryPoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "isModuleEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "pullTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "setFallbackHandler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "setOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_entryPoint", - "type": "address" - } - ], - "name": "updateEntryPoint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "updateImplementation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "internalType": "bytes", - "name": "paymasterData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "requestId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "requiredPrefund", - "type": "uint256" - } - ], - "name": "validateUserOp", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "handler", + "type": "address" + } + ], + "name": "ChangedFallbackHandler", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "DisabledModule", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_scw", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_oldEOA", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_newEOA", + "type": "address" + } + ], + "name": "EOAChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "EnabledModule", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldEntryPoint", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newEntryPoint", + "type": "address" + } + ], + "name": "EntryPointChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "txHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "payment", + "type": "uint256" + } + ], + "name": "ExecutionFailure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ExecutionFromModuleFailure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ExecutionFromModuleSuccess", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "txHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "payment", + "type": "uint256" + } + ], + "name": "ExecutionSuccess", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "dataHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signatures", + "type": "bytes" + } + ], + "name": "checkSignatures", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "prevModule", + "type": "address" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "disableModule", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "domainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "enableModule", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "targetTxGas", + "type": "uint256" + } + ], + "internalType": "struct WalletStorage.Transaction", + "name": "_tx", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "baseGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "gasToken", + "type": "address" + }, + { + "internalType": "address payable", + "name": "refundReceiver", + "type": "address" + } + ], + "internalType": "struct WalletStorage.FeeRefund", + "name": "refundInfo", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + } + ], + "name": "encodeTransactionData", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "entryPoint", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dest", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "func", + "type": "bytes" + } + ], + "name": "exec", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "dest", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "func", + "type": "bytes[]" + } + ], + "name": "execBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dest", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "func", + "type": "bytes" + } + ], + "name": "execFromEntryPoint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "targetTxGas", + "type": "uint256" + } + ], + "internalType": "struct WalletStorage.Transaction", + "name": "_tx", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "batchId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "baseGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "gasToken", + "type": "address" + }, + { + "internalType": "address payable", + "name": "refundReceiver", + "type": "address" + } + ], + "internalType": "struct WalletStorage.FeeRefund", + "name": "refundInfo", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatures", + "type": "bytes" + } + ], + "name": "execTransaction", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + } + ], + "name": "execTransactionFromModule", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + } + ], + "name": "execTransactionFromModuleReturnData", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getChainId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "start", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + } + ], + "name": "getModulesPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { + "internalType": "address", + "name": "next", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "batchId", + "type": "uint256" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "targetTxGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "baseGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "gasToken", + "type": "address" + }, + { + "internalType": "address payable", + "name": "refundReceiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + } + ], + "name": "getTransactionHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "gasUsed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "baseGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "gasToken", + "type": "address" + }, + { + "internalType": "address payable", + "name": "refundReceiver", + "type": "address" + } + ], + "name": "handlePaymentAndRevert", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_entryPoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_handler", + "type": "address" + } + ], + "name": "init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "isModuleEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "dest", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "pullTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + } + ], + "name": "requiredTxGas", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "handler", + "type": "address" + } + ], + "name": "setFallbackHandler", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "dest", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_entryPoint", + "type": "address" + } + ], + "name": "updateEntryPoint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "updateImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "callGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "verificationGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFeePerGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPriorityFeePerGas", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymaster", + "type": "address" + }, + { + "internalType": "bytes", + "name": "paymasterData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct UserOperation", + "name": "userOp", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "requestId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "requiredPrefund", + "type": "uint256" + } + ], + "name": "validateUserOp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } ] } \ No newline at end of file diff --git a/packages/smart-account/src/assets/WalletFactory.json b/packages/smart-account/src/assets/WalletFactory.json index cec7f3180..81aa5bdb3 100644 --- a/packages/smart-account/src/assets/WalletFactory.json +++ b/packages/smart-account/src/assets/WalletFactory.json @@ -1,161 +1,161 @@ { - "defaultAddress": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", + "defaultAddress": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", "released": true, "contractName": "WalletFactory", "version": "1.0.0", "networkAddresses": { - "1": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", - "4": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", - "5": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", - "42": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", - "88": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", - "100": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", - "246": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B", - "73799": "0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B" + "1": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", + "4": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", + "5": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", + "42": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", + "88": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", + "100": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", + "246": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", + "73799": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8" }, "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_baseImpl", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_proxy", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "WalletCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_entryPoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_handler", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "deployCounterFactualWallet", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_entryPoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "name": "deployWallet", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAddressForCounterfactualWallet", - "outputs": [ - { - "internalType": "address", - "name": "_wallet", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isWalletExist", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } + { + "inputs": [ + { + "internalType": "address", + "name": "_baseImpl", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_proxy", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_implementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "WalletCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_entryPoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_handler", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "deployCounterFactualWallet", + "outputs": [ + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_entryPoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_handler", + "type": "address" + } + ], + "name": "deployWallet", + "outputs": [ + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "getAddressForCounterfactualWallet", + "outputs": [ + { + "internalType": "address", + "name": "_wallet", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isWalletExist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } ] } \ No newline at end of file From 469ce4183bcbbcb01f7748c76f12478136043af5 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 20 Jul 2022 02:35:50 +0530 Subject: [PATCH 0017/1247] setup for tests + dev notes + fixes init --- packages/relayer/src/index.ts | 31 ++++++++++ packages/relayer/src/local-relayer.ts | 37 ++++++++++++ packages/smart-account/package.json | 6 +- packages/smart-account/src/SmartAccount.ts | 3 + packages/smart-account/src/types.ts | 2 + .../smart-account/tests/smartaccount.spec.ts | 57 +++++++++---------- 6 files changed, 103 insertions(+), 33 deletions(-) create mode 100644 packages/relayer/src/local-relayer.ts diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index e69de29bb..0a9ccf0ad 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -0,0 +1,31 @@ +import { ethers, providers } from 'ethers' + +export interface Relayer { + // simulate + // simulate() + + // estimateGasLimits will estimate the gas utilization from the transaction + // before submission. + /*estimateGasLimits( + // transaction + )*/ // returns? + + // getFeeOptions returns the fee options that the relayer will accept as payment. + // If a quote is returned, it may be passed back to the relayer for dispatch. + /*getFeeOptions( + // transaction + ): Promise<{ options: FeeOption[], quote?: FeeQuote }>*/ + + // getRefundOptions? + + // getNonce? + + // relayer will submit the transaction(s) to the network and return the transaction response. + // The quote should be the one returned from getFeeOptions, if any. + // relay(signedTxs: SignedTransactions, quote?: FeeQuote): Promise + + // wait for transaction confirmation + // wait(metaTxnId: string | SignedTransactions, timeout: number): Promise + } + + export * from './local-relayer' \ No newline at end of file diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts new file mode 100644 index 000000000..cb7bf315d --- /dev/null +++ b/packages/relayer/src/local-relayer.ts @@ -0,0 +1,37 @@ +import { TransactionRequest } from '@ethersproject/providers' +import { Signer as AbstractSigner, ethers } from 'ethers' + +export class LocalRelayer /*extends ProviderRelayer*/ /*implements Relayer*/ { + //private signer: AbstractSigner + //private txnOptions: TransactionRequest + + constructor(/*options: LocalRelayerOptions | AbstractSigner*/) { + // super(AbstractSigner.isSigner(options) ? { provider: options.provider! } : { ...options, provider: options.signer.provider! }) + //this.signer = AbstractSigner.isSigner(options) ? options : options.signer + // if (!this.signer.provider) throw new Error("Signer must have a provider") + } + + async deployWallet() { + // prepareWalletDeploy() + // this.signer.sendTransaction + } + + /*async getFeeOptions( + + ): Promise<{ options: FeeOption[] }> { + return { options: [] } + }*/ + + /*async gasRefundOptions( + + ): Promise { + const { options } = //await this.getFeeOptions() + return options + }*/ + + /*async relay(signedTxs: SignedTransactions, quote?: FeeQuote) : Promise { + // preprendWalletDeploy + // get txn helpers + // this.signer.sendTransaction() + }*/ + } \ No newline at end of file diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 2730ecf2d..0a3f0c20d 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -24,9 +24,11 @@ "dist" ], "devDependencies": { - "@biconomy-sdk/node-client": "*", "@biconomy-sdk/core-types": "*", "@biconomy-sdk/ethers-lib": "*", + "@biconomy-sdk/node-client": "*", + "@biconomy-sdk/relayer": "*", + "@types/mocha": "^9.1.1", "@types/node": "^17.0.23", "@typescript-eslint/eslint-plugin": "^5.17.0", "@typescript-eslint/parser": "^5.17.0", @@ -38,9 +40,9 @@ "typescript": "^4.6.3" }, "dependencies": { - "@biconomy-sdk/node-client": "*", "@biconomy-sdk/core-types": "*", "@biconomy-sdk/ethers-lib": "*", + "@biconomy-sdk/node-client": "*", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 89df84562..68444f16c 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -31,6 +31,9 @@ class SmartAccount { multiSendContract!: { [chainId: number]: MultiSendContract } smartWalletFactoryContract!: { [chainId: number]: SmartWalletFactoryContract } + + // Review :: ToDo + // To be able to passs provider : WalletProviderLike constructor(config: SmartAccountConfig) { this.#smartAccountConfig = config diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 46a09e074..08e976144 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -1,3 +1,5 @@ + +// walletProvider: WalletProviderLike export interface SmartAccountConfig { owner: string // EOA address activeNetworkId: ChainId diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 347a6b936..d5bc7c181 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -1,38 +1,33 @@ -import SmartAccount from '@biconomy-sdk/smart-account'; // - - -export function main() { - enum ChainId { - // Ethereum - MAINNET = 1, - ROPSTEN = 3, - RINKEBY = 4, - GOERLI = 5, - KOVAN = 42 - } - -const wallet = new SmartAccount({ - owner: '0x4281d6888D7a3A6736B0F596823810ffBd7D4808', - activeNetworkId: ChainId.MAINNET, - supportedNetworksIds: [ChainId.MAINNET, ChainId.RINKEBY], - backend_url: "http://localhost:3000/v1" - }) +import SmartAccount from '../src/SmartAccount'; +import { LocalRelayer } from '@biconomy-sdk/relayer' +// import { Contract, ethers, Signer as AbstractSigner } from 'ethers' + + +import chaiAsPromised from 'chai-as-promised' +import * as chai from 'chai' + +// import hardhat from 'hardhat' +// import { BytesLike, Interface } from 'ethers/lib/utils' - wallet.ethersAdapter(ChainId.RINKEBY).getTransaction('0x3dbc9da5b081a93658d4bf2f85bce2e74332b1806b287248b318c6da13c27994') - .then(res=>{ - console.log('Tx Details are ', res); +describe('Wallet integration', function () { + let relayer: LocalRelayer + + before(async () => { }) - wallet.ethersAdapter(ChainId.MAINNET).getBalance('0x4281d6888D7a3A6736B0F596823810ffBd7D4808') - .then(res=>{ - console.log('Balance is ', res); + beforeEach(async () => { + }) + + after(async () => { }) -} -main(); + describe('Smart account usage and basic actions', () => { + beforeEach(async () => { + }) + + it('Should init and return details of smart account', async () => { + }) + }) +}) - /*wallet.ethersAdapter(ChainId.RINKEBY).getOwner() - .then(res=>{ - console.log('Chain id is ', res); - })*/ \ No newline at end of file From bd9a83d622f3a5438a6c9f3fe819ef30c005498e Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 21 Jul 2022 03:59:01 +0530 Subject: [PATCH 0018/1247] local relayer deploy wallet + types and methods in smart account + txns package + wallet spec test init --- .../contracts/SmartWalletFactoryContract.ts | 2 + packages/core-types/src/types.ts | 8 ++ .../SmartWalletProxyFactoryEthersContract.ts | 6 + packages/relayer/package.json | 14 +- packages/relayer/src/local-relayer.ts | 51 ++++++-- packages/smart-account/hardhat.config.js | 16 +++ packages/smart-account/package.json | 7 +- packages/smart-account/src/SmartAccount.ts | 120 +++++++++++------- packages/smart-account/src/types.ts | 61 ++++++++- .../smart-account/tests/smartaccount.spec.ts | 43 ++++++- packages/smart-account/tsconfig.json | 3 +- packages/transactions/package.json | 32 +++++ packages/transactions/src/index.ts | 0 packages/transactions/src/types.ts | 68 ++++++++++ packages/transactions/src/utils.ts | 0 packages/transactions/tsconfig.json | 12 ++ tsconfig.test.json | 18 +++ 17 files changed, 396 insertions(+), 65 deletions(-) create mode 100644 packages/smart-account/hardhat.config.js create mode 100644 packages/transactions/package.json create mode 100644 packages/transactions/src/index.ts create mode 100644 packages/transactions/src/types.ts create mode 100644 packages/transactions/src/utils.ts create mode 100644 packages/transactions/tsconfig.json create mode 100644 tsconfig.test.json diff --git a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts index a3fe0354a..9bace910e 100644 --- a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts +++ b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts @@ -1,5 +1,7 @@ import { TransactionResult } from '../types' +import { Interface } from "@ethersproject/abi"; export interface SmartWalletFactoryContract { + getInterface(): Interface getAddress(): string deployCounterFactualWallet( owner: string, diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 9e8a33083..98d854bb9 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -8,6 +8,14 @@ export enum OperationType { DelegateCall // 1 } +// Temp +export interface SmartAccountContext { + entryPointAddress: string, + fallbackHandlerAddress: string, + // multiSendAddress: string, + // multiSendObnlyCallAddress: string, +} + export interface MetaTransactionData { readonly to: string readonly value: string diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts index db252595f..d7c9c7828 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts @@ -1,10 +1,16 @@ import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' +import { Interface } from "@ethersproject/abi"; import { toTxResult } from '../../utils' import { SmartWalletFactoryContract as SmartWalletFactoryContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' +import { ethers } from 'ethers' class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { constructor(public contract: SmartWalletFactoryContract_TypeChain) {} + getInterface(): Interface { + return this.contract.interface; + } + getAddress(): string { return this.contract.address } diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 72b2454ba..df0b79958 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -10,12 +10,8 @@ "license": "MIT", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", - "directories": { - "lib": "lib", - "test": "__tests__" - }, "files": [ - "lib" + "dist" ], "repository": { "type": "git", @@ -27,6 +23,14 @@ "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, + "dependencies": { + "@biconomy-sdk/smart-account": "*", + "@biconomy-sdk/core-types": "*" + }, + "devDependencies": { + "@biconomy-sdk/smart-account": "*", + "@biconomy-sdk/core-types": "*" + }, "bugs": { "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" } diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index cb7bf315d..490d62913 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -1,21 +1,50 @@ -import { TransactionRequest } from '@ethersproject/providers' +import { TransactionRequest, TransactionResponse } from '@ethersproject/providers' import { Signer as AbstractSigner, ethers } from 'ethers' +import { Relayer } from '.'; -export class LocalRelayer /*extends ProviderRelayer*/ /*implements Relayer*/ { - //private signer: AbstractSigner - //private txnOptions: TransactionRequest +import { + SmartWalletFactoryContract, + SmartWalletContract, + MultiSendContract, + TransactionResult, + SmartAccountContext +} from '@biconomy-sdk/core-types' + +export class LocalRelayer implements Relayer { + private signer: AbstractSigner + // private txnOptions: TransactionRequest - constructor(/*options: LocalRelayerOptions | AbstractSigner*/) { - // super(AbstractSigner.isSigner(options) ? { provider: options.provider! } : { ...options, provider: options.signer.provider! }) - //this.signer = AbstractSigner.isSigner(options) ? options : options.signer - // if (!this.signer.provider) throw new Error("Signer must have a provider") + constructor(signer: AbstractSigner) { + if(!AbstractSigner.isSigner(signer)) throw new Error("Signer must have a provider"); + this.signer = signer; + if (!this.signer.provider) throw new Error("Signer must have a provider") } - async deployWallet() { - // prepareWalletDeploy() - // this.signer.sendTransaction + async deployWallet(factory:SmartWalletFactoryContract, context: SmartAccountContext, eoa:string, index:number = 0): Promise { + // TODO + // Should check if already deployed + const walletDeployTxn = this.prepareWalletDeploy(factory, context, eoa,index); + const tx = this.signer.sendTransaction({ ...walletDeployTxn, gasLimit: ethers.constants.Two.pow(24) }); + return tx; } + + prepareWalletDeploy( // owner, entryPoint, handler, index + factory:SmartWalletFactoryContract, + context: SmartAccountContext, + eoa: string, + index: number = 0, + // context: WalletContext + ): { to: string, data: string} { + const factoryInterface = factory.getInterface(); + return { + to: factory.getAddress(), // from context + data: factoryInterface.encodeFunctionData(factoryInterface.getFunction('deployCounterFactualWallet'), + [eoa, context.entryPointAddress, context.fallbackHandlerAddress, index] + ) + } + } + /*async getFeeOptions( ): Promise<{ options: FeeOption[] }> { diff --git a/packages/smart-account/hardhat.config.js b/packages/smart-account/hardhat.config.js new file mode 100644 index 000000000..3bcd9a4b8 --- /dev/null +++ b/packages/smart-account/hardhat.config.js @@ -0,0 +1,16 @@ +/** + * @type import('hardhat/config').HardhatUserConfig + */ + module.exports = { + solidity: '0.7.6', + + networks: { + hardhat: { + chainId: 31338, + accounts: { + mnemonic: 'ripple axis someone ridge uniform wrist prosper there frog rate olympic knee' + } + } + } + } + \ No newline at end of file diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 0a3f0c20d..0511b9968 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -14,7 +14,10 @@ "unbuild": "rimraf dist *.tsbuildinfo", "build": "rimraf dist && tsc", "test": "yarn test:concurrently 'yarn test:run'", + "test:file": "TS_NODE_PROJECT=../../tsconfig.test.json mocha -r ts-node/register --timeout 30000", + "test:concurrently": "concurrently -k --success first 'yarn start:hardhat > /dev/null'", "test:run": "yarn test:file tests/**/*.spec.ts", + "start:hardhat": "yarn run hardhat node --port 7047 --config ./hardhat.config.js", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, @@ -36,6 +39,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", "ethers": "^5.5.3", + "jest-cli": "^28.1.3", "prettier": "^2.6.2", "typescript": "^4.6.3" }, @@ -47,6 +51,7 @@ "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", "@gnosis.pm/safe-deployments": "^1.12.0", - "web3-core": "^1.7.1" + "web3-core": "^1.7.1", + "@types/mocha": "^9.1.1" } } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 68444f16c..f772881a7 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -1,6 +1,6 @@ -import { SmartAccountConfig, networks, NetworkConfig, ChainId, ChainConfig } from './types' +import { SmartAccountConfig, networks, NetworkConfig, ChainId, ChainConfig, SmartAccountState, SmartAccountContext } from './types' import EthersAdapter from '@biconomy-sdk/ethers-lib' -import { ethers } from 'ethers' +import { ethers, providers } from 'ethers' import { getSmartWalletFactoryContract, getMultiSendContract, @@ -13,19 +13,31 @@ import { TransactionResult } from '@biconomy-sdk/core-types' import SafeServiceClient from '@biconomy-sdk/node-client'; +import { Web3Provider } from '@ethersproject/providers' +import { Relayer } from '@biconomy-sdk/relayer'; class SmartAccount { // { ethAdapter } is a window that gave access to all the Implemented function of it ethAdapter!: { [chainId: number]: EthersAdapter } + context!: { [chainId: number]: SmartAccountContext } + // hold instantiated chain info #smartAccountConfig!: SmartAccountConfig // hold supported network info supportedNetworkIds!: ChainId[] + providers!: Web3Provider[] + nodeClient!: SafeServiceClient + relayer!: Relayer + + owner!: string + + address!: string + // contract instances smartWalletContract!: { [chainId: number]: SmartWalletContract } multiSendContract!: { [chainId: number]: MultiSendContract } @@ -42,6 +54,7 @@ class SmartAccount { this.multiSendContract = {} this.smartWalletFactoryContract = {} this.supportedNetworkIds = config.supportedNetworksIds + this.providers = config.providers this.nodeClient = new SafeServiceClient({txServiceUrl: config.backend_url}); } @@ -51,12 +64,13 @@ class SmartAccount { public async init(): Promise { const chainConfig = await this.getSupportedChainsInfo(); console.log("chain config: ", chainConfig); + // instead of getting from networks, get details from chainConfig - this.supportedNetworkIds.forEach(async (network) => { - const provider = new ethers.providers.JsonRpcProvider( - networks[network].providerUrl - ) - const signer = provider.getSigner(this.#smartAccountConfig.owner) + for(let i=0; i < this.supportedNetworkIds.length; i++) { + const network = this.supportedNetworkIds[i]; + const provider = this.providers[i]; + // check if corresponds to same chainId correctly + const signer = provider.getSigner(); // instantiating EthersAdapter instance and maintain it as class level variable this.ethAdapter[network] = new EthersAdapter({ @@ -64,8 +78,15 @@ class SmartAccount { signer }) + // TODO + //this.context[network].entryPointAddress = networks[network].entryPoint; // come from chainConfig + //this.context[network].fallbackHandlerAddress = networks[network].fallbackHandler; // come from chainConfig + this.initializeContracts(network); - }) + } + // Review + this.owner = await this.ethersAdapter().getSignerAddress(); + this.address = await this.getAddress(); return this; } @@ -94,35 +115,73 @@ class SmartAccount { return this.nodeClient.getChainInfo(); } - // return adapter instance to used for blockchain interactions + // return adapter instance to be used for blockchain interactions ethersAdapter(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): EthersAdapter { return this.ethAdapter[chainId] } - // return configuration used for intialization of the { wallet }instance + // return configuration used for intialization of the { wallet } instance getSmartAccountConfig(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): NetworkConfig { + // networks should come from chainConfig instead return networks[chainId] } + // Assigns transaction relayer to this smart wallet instance + setRelayer(relayer: Relayer): SmartAccount { + if (relayer === undefined) return this + this.relayer = relayer + return this + } + // return smartaccount instance smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { return this.smartWalletContract[networks[chainId].chainId] } - // return multisend contract instance - multiSend(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendContract { - return this.multiSendContract[networks[chainId].chainId] - } - factory(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletFactoryContract { return this.smartWalletFactoryContract[networks[chainId].chainId] } - // Review + // Optional index allowed async getAddress(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId) : Promise { return await this.getAddressForCounterfactualWallet(index,chainId); } + // Review + // might be coming wrong.. + async isDeployed(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + const readProvider = new ethers.providers.JsonRpcProvider(networks[chainId].providerUrl); + const walletCode = await readProvider.getCode(await this.getAddress(chainId)); + return !!walletCode && walletCode !== '0x' + } + + async getSmartAccountState(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + const state: SmartAccountState = { + address: this.address, + owner: this.owner, + isDeployed: await this.isDeployed(chainId) + } + return state; + } + + async getSmartAccountContext(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + const context: SmartAccountContext = { + entryPointAddress: networks[chainId].entryPoint, + fallbackHandlerAddress: networks[chainId].fallbackHandler + } + return context; + } + + // more methods + // accountConfiguration? + // sendSignedTransaction + // signMessage + // signTransaction + // Discuss about multichain aspect of relayer node url and clients + // TODO: get details from backend config + + // more methods to fetch balance via backend -> indexer node + /** * @param address Owner aka {EOA} address * @param index number of smart account deploy i.e {0, 1 ,2 ...} @@ -132,34 +191,7 @@ class SmartAccount { async getAddressForCounterfactualWallet(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { return await this.smartWalletFactoryContract[ networks[chainId].chainId - ].getAddressForCounterfactualWallet(this.#smartAccountConfig.owner, index) - } - - /** - * @param address Owner aka {EOA} address - * @param index number of smart account deploy i.e {0, 1 ,2 ...} - * @description deploy Smart Account for EOA against specific index - * @returns - */ - // Marked for deletion - // Call the relayer for deployment! - async deployCounterFactualWallet( - index: number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): Promise { - const networkInfo = networks[chainId] - const walletAddress = await this.getAddressForCounterfactualWallet(index, chainId) - const isContractDeployed = await this.ethAdapter[chainId].isContractDeployed(walletAddress) - if (!isContractDeployed) { - throw new Error('Smart Wallet is not deployed on the current network') - } - // TODO: relayer stuff - return this.smartWalletFactoryContract[chainId].deployCounterFactualWallet( - this.#smartAccountConfig.owner, - networkInfo.entryPoint, - networkInfo.fallbackHandler, - index - ) + ].getAddressForCounterfactualWallet(this.owner, index) } } export default SmartAccount diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 08e976144..d2ccb18ac 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -1,15 +1,72 @@ +import { BytesLike, Wallet } from 'ethers'; +import { ExternalProvider, Web3Provider } from '@ethersproject/providers'; // walletProvider: WalletProviderLike export interface SmartAccountConfig { - owner: string // EOA address + // owner: string // EOA address activeNetworkId: ChainId supportedNetworksIds: ChainId[] + providers: Web3Provider[] backend_url: string } -// backend_url // relayer_url // provider? +export interface SmartAccountState { + address: string, + owner: string, + isDeployed: boolean +} + +export interface SmartAccountContext { + entryPointAddress: string, + fallbackHandlerAddress: string, + // multiSendAddress: string, + // multiSendObnlyCallAddress: string, +} + +// reference i could work on +export interface WalletProvider { + readonly type?: string; + readonly wallet?: Wallet; + readonly address: string; + readonly networkName?: NetworkNames; + signMessage(message: BytesLike): Promise; +} + +export interface WalletLike { + privateKey: string; +} + +export type WalletProviderLike = string | WalletLike | WalletProvider; + +export enum NetworkNames { + Mainnet = 'mainnet', + Ropsten = 'ropsten', + Rinkeby = 'rinkeby', + Goerli = 'goerli', + Kovan = 'kovan', + Xdai = 'xdai', + Bsc = 'bsc', + BscTest = 'bscTest', + Fantom = 'fantom', + FantomTest = 'fantomTest', + Matic = 'matic', + Mumbai = 'mumbai', + Aurora = 'aurora', + AuroraTest = 'auroraTest', + Avalanche = 'avalanche', + Fuji = 'fuji', + Optimism = 'optimism', + OptimismKovan = 'optimismKovan', + Arbitrum = 'arbitrum', + ArbitrumTest = 'arbitrumTest', + Moonbeam = 'moonbeam', + Moonbase = 'moonbase', + Celo = 'celo', + CeloTest = 'celoTest', +} + export interface ContractInfo { defaultAddress: string version: string diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index d5bc7c181..6582c2621 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -1,18 +1,38 @@ import SmartAccount from '../src/SmartAccount'; import { LocalRelayer } from '@biconomy-sdk/relayer' // import { Contract, ethers, Signer as AbstractSigner } from 'ethers' - +import { Contract, ethers, Signer as AbstractSigner } from 'ethers' +import { JsonRpcProvider, Web3Provider } from '@ethersproject/providers'; import chaiAsPromised from 'chai-as-promised' import * as chai from 'chai' +const Web3 = require('web3') +const { expect } = chai.use(chaiAsPromised) + +import hardhat from 'hardhat' +import { BytesLike, Interface } from 'ethers/lib/utils' + +type EthereumInstance = { + chainId?: number, + provider?: Web3Provider, + signer?: AbstractSigner +}; + // import hardhat from 'hardhat' // import { BytesLike, Interface } from 'ethers/lib/utils' describe('Wallet integration', function () { + const ethnode: EthereumInstance = {} let relayer: LocalRelayer + let smartAccount: SmartAccount before(async () => { + // Provider from hardhat without a server instance + ethnode.provider = new ethers.providers.Web3Provider(hardhat.network.provider.send); + + ethnode.signer = ethnode.provider.getSigner() + ethnode.chainId = 31337 }) beforeEach(async () => { @@ -27,6 +47,27 @@ describe('Wallet integration', function () { }) it('Should init and return details of smart account', async () => { + + enum ChainId { + // Ethereum + MAINNET = 1, + ROPSTEN = 3, + RINKEBY = 4, + GOERLI = 5, + KOVAN = 42 + } + + const userAddress = await ethnode.signer?.getAddress() || ''; + + const wallet = new SmartAccount({ + // owner: userAddress, + activeNetworkId: ChainId.RINKEBY, + supportedNetworksIds: [ChainId.RINKEBY], // has to be consisttent providers and network names + providers: [ethnode.provider], + backend_url: "http://localhost:3000/v1" + }); + + }) }) }) diff --git a/packages/smart-account/tsconfig.json b/packages/smart-account/tsconfig.json index c4259935a..a31c33fe3 100644 --- a/packages/smart-account/tsconfig.json +++ b/packages/smart-account/tsconfig.json @@ -4,7 +4,8 @@ "composite": true, "outDir": "dist", "baseUrl": "src", - "resolveJsonModule": true + "resolveJsonModule": true, + "esModuleInterop": true, }, "include": ["src", "src/**/*.json"] } diff --git a/packages/transactions/package.json b/packages/transactions/package.json new file mode 100644 index 000000000..926c37f97 --- /dev/null +++ b/packages/transactions/package.json @@ -0,0 +1,32 @@ +{ + "name": "@biconomy-sdk/transactions", + "version": "1.0.0", + "description": "utils for sending all transaction legos", + "main": "dist/src/index.js", + "typings": "dist/src/index.d.ts", + "keywords": [ + "legos", + "batching", + "one-click", + "cross-chain" + ], + "author": "livingrockrises ", + "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", + "license": "MIT", + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" + }, + "scripts": { + "unbuild": "rimraf dist *.tsbuildinfo", + "build": "rimraf dist && tsc", + "format": "prettier --write \"{src,tests}/**/*.ts\"", + "lint": "tslint -p tsconfig.json" + }, + "bugs": { + "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" + } +} \ No newline at end of file diff --git a/packages/transactions/src/index.ts b/packages/transactions/src/index.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/transactions/src/types.ts b/packages/transactions/src/types.ts new file mode 100644 index 000000000..fe5e49fa0 --- /dev/null +++ b/packages/transactions/src/types.ts @@ -0,0 +1,68 @@ +import { + Contract, + Wallet, + utils, + BigNumber, + BigNumberish, + Signer, + PopulatedTransaction, + } from "ethers"; + import { TypedDataSigner } from "@ethersproject/abstract-signer"; + import { AddressZero } from "@ethersproject/constants"; + + +export const EIP712_WALLET_TX_TYPE = { + // "WalletTx(address to,uint256 value,bytes data,uint8 operation,uint256 targetTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" + WalletTx: [ + { type: "address", name: "to" }, + { type: "uint256", name: "value" }, + { type: "bytes", name: "data" }, + { type: "uint8", name: "operation" }, + { type: "uint256", name: "targetTxGas" }, + { type: "uint256", name: "baseGas" }, + { type: "uint256", name: "gasPrice" }, + { type: "address", name: "gasToken" }, + { type: "address", name: "refundReceiver" }, + { type: "uint256", name: "nonce" }, + ], +}; + +export interface MetaTransaction { + to: string; + value: string | number | BigNumber; + data: string; + operation: number; +}; + +/*export interface SafeTransaction extends MetaTransaction { + targetTxGas: string | number; + baseGas: string | number; + gasPrice: string | number; + gasToken: string; + refundReceiver: string; + nonce: string | number; +};*/ + +export interface Transaction { + to: string; + value: string | number | BigNumber; + data: string; + operation: number; + targetTxGas: string | number; +}; + +export interface FeeRefund { + baseGas: string | number; + gasPrice: string | number; + gasToken: string; + refundReceiver: string; +}; + +export interface WalletTransaction { + _tx: Transaction; + refundInfo: FeeRefund; + batchId: number; + nonce: string | number; +}; + + diff --git a/packages/transactions/src/utils.ts b/packages/transactions/src/utils.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/transactions/tsconfig.json b/packages/transactions/tsconfig.json new file mode 100644 index 000000000..42e85137e --- /dev/null +++ b/packages/transactions/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src", + "resolveJsonModule": true, + "esModuleInterop": true, + }, + "include": ["src", "src/**/*.json"] + } + \ No newline at end of file diff --git a/tsconfig.test.json b/tsconfig.test.json new file mode 100644 index 000000000..e3897ebda --- /dev/null +++ b/tsconfig.test.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "declaration": true, + "sourceMap": true, + "allowSyntheticDefaultImports": true, + "strictNullChecks": false, + "esModuleInterop": true, + "lib": ["dom.iterable", "dom", "es2020"], + "types": ["node", "mocha", "puppeteer"] + }, + "include": [ + "./src/**/*", + "./tests/**/*" + ] + } + \ No newline at end of file From 955db6fafc503d9238c7730fc1bba646d5ee4014 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 22 Jul 2022 02:49:03 +0530 Subject: [PATCH 0019/1247] transaction package + relay impl + deploywallet + create and send txn dev + dev notes --- .../src/contracts/SmartWalletContract.ts | 10 +- .../contracts/SmartWalletFactoryContract.ts | 1 + packages/core-types/src/types.ts | 36 +++++- .../SmartWallet/SmartWalletContractEthers.ts | 16 ++- .../SmartWalletProxyFactoryEthersContract.ts | 12 +- packages/relayer/package.json | 2 - packages/relayer/src/index.ts | 24 +--- packages/relayer/src/local-relayer.ts | 26 ++-- packages/smart-account/package.json | 2 + packages/smart-account/src/SmartAccount.ts | 115 +++++++++++++++++- packages/smart-account/src/types.ts | 17 ++- packages/transactions/src/index.ts | 2 + packages/transactions/src/types.ts | 22 +++- packages/transactions/src/utils.ts | 95 +++++++++++++++ 14 files changed, 328 insertions(+), 52 deletions(-) diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index 5a86db2ca..d124f362a 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -1,19 +1,25 @@ import { FeeRefundData, SmartAccountTrx, - SmartAccountTrxData, + WalletTransaction, SmartAccountVersion, TransactionOptions, TransactionResult } from '../types' import { BigNumber } from '@ethersproject/bignumber' +import { Interface } from "@ethersproject/abi"; + +// TODO +// Rename export interface SmartWalletContract { getAddress(): string + getInterface(): Interface + setAddress(address:string): any getOwner(): Promise getVersion(): Promise getNonce(batchId: number): Promise - getTransactionHash(smartAccountTrxData: SmartAccountTrxData): Promise + getTransactionHash(smartAccountTrxData: WalletTransaction): Promise execTransaction( transaction: SmartAccountTrx, batchId: number, diff --git a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts index 9bace910e..d9b978df8 100644 --- a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts +++ b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts @@ -3,6 +3,7 @@ import { Interface } from "@ethersproject/abi"; export interface SmartWalletFactoryContract { getInterface(): Interface getAddress(): string + isWalletExist(wallet:string): Promise deployCounterFactualWallet( owner: string, entryPoint: string, diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 98d854bb9..450efbc38 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -1,5 +1,6 @@ import { ContractTransaction } from '@ethersproject/contracts' import { PromiEvent, TransactionReceipt } from 'web3-core/types' +import { BigNumber } from '@ethersproject/bignumber'; export type SmartAccountVersion = '1.3.0' | '1.2.0' | '1.1.1' @@ -16,6 +17,24 @@ export interface SmartAccountContext { // multiSendObnlyCallAddress: string, } +// TODO +// Review location , names and usage of all types + +export interface RawTransactionType { + from?: string; + gasPrice?: string | BigNumber; + maxFeePerGas?: string | BigNumber; + maxPriorityFeePerGas?: string | BigNumber; + gasLimit?: string; + to: string; + value: string | number; + data?: string; + chainId: number; + nonce?: number | string; + // accessList?: AccessListItem[]; + type?: number; +}; + export interface MetaTransactionData { readonly to: string readonly value: string @@ -25,7 +44,7 @@ export interface MetaTransactionData { export interface SmartAccountTrxData extends MetaTransactionData { readonly operation: OperationType - readonly SmartAccountTxGas: number + readonly targetTxGas: number readonly baseGas: number readonly gasPrice: number readonly gasToken: string @@ -34,7 +53,7 @@ export interface SmartAccountTrxData extends MetaTransactionData { } export interface SmartAccountTrxDataPartial extends MetaTransactionData { - readonly SmartAccountTxGas?: number + readonly targetTxGas?: number readonly baseGas?: number readonly gasPrice?: number readonly gasToken?: string @@ -42,6 +61,19 @@ export interface SmartAccountTrxDataPartial extends MetaTransactionData { readonly nonce?: number } +export interface WalletTransaction { + to: string; + value: string; + data: string; + operation: number; + targetTxGas: string | number; + baseGas: string | number; + gasPrice: string | number; + gasToken: string; + refundReceiver: string; + nonce: number +} + export interface Signature { readonly signer: string readonly data: string diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts index baa1560ca..9fb043bf3 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts @@ -3,7 +3,7 @@ import { SmartAccountVersion, SmartWalletContract, SmartAccountTrx, - SmartAccountTrxData, + WalletTransaction, TransactionOptions, FeeRefundData, TransactionResult @@ -11,14 +11,22 @@ import { import { toTxResult } from '../../utils' import { SmartWalletContract as SmartWalletContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' import { SmartWalletContractInterface } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' -import { getJsonWalletAddress } from 'ethers/lib/utils' +import { getJsonWalletAddress, Interface } from 'ethers/lib/utils' class SmartWalletContractEthers implements SmartWalletContract { constructor(public contract: SmartWalletContract_TypeChain) {} + getInterface(): Interface { + return this.contract.interface; + } + getAddress(): string { return this.contract.address } + setAddress(address: string) { + this.contract.attach(address); + } + async getOwner(): Promise { return await this.contract.getOwner() } @@ -30,13 +38,13 @@ class SmartWalletContractEthers implements SmartWalletContract { async getNonce(batchId: number): Promise { return await this.contract.getNonce(batchId) } - async getTransactionHash(smartAccountTrxData: SmartAccountTrxData): Promise { + async getTransactionHash(smartAccountTrxData: WalletTransaction): Promise { return this.contract.getTransactionHash( smartAccountTrxData.to, smartAccountTrxData.value, smartAccountTrxData.data, smartAccountTrxData.operation, - smartAccountTrxData.SmartAccountTxGas, + smartAccountTrxData.targetTxGas, smartAccountTrxData.baseGas, smartAccountTrxData.gasPrice, smartAccountTrxData.gasToken, diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts index d7c9c7828..bd93a1f8b 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts @@ -1,8 +1,7 @@ import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' -import { Interface } from "@ethersproject/abi"; import { toTxResult } from '../../utils' import { SmartWalletFactoryContract as SmartWalletFactoryContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' -import { ethers } from 'ethers' +import { Interface } from "@ethersproject/abi"; class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { constructor(public contract: SmartWalletFactoryContract_TypeChain) {} @@ -11,10 +10,19 @@ class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { return this.contract.interface; } + async isWalletExist(wallet: string): Promise { + const doesExist = await this.contract.isWalletExist(wallet); + return doesExist; + } + getAddress(): string { return this.contract.address } + setAddress(address:string) { + this.contract.attach(address); + } + async deployCounterFactualWallet( owner: string, entryPoint: string, diff --git a/packages/relayer/package.json b/packages/relayer/package.json index df0b79958..9ae360686 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -24,11 +24,9 @@ "lint": "tslint -p tsconfig.json" }, "dependencies": { - "@biconomy-sdk/smart-account": "*", "@biconomy-sdk/core-types": "*" }, "devDependencies": { - "@biconomy-sdk/smart-account": "*", "@biconomy-sdk/core-types": "*" }, "bugs": { diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index 0a9ccf0ad..a6c143d41 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -1,29 +1,11 @@ import { ethers, providers } from 'ethers' +import { TransactionRequest, TransactionResponse } from '@ethersproject/providers'; +import { RawTransactionType } from '@biconomy-sdk/core-types'; export interface Relayer { - // simulate - // simulate() - - // estimateGasLimits will estimate the gas utilization from the transaction - // before submission. - /*estimateGasLimits( - // transaction - )*/ // returns? - - // getFeeOptions returns the fee options that the relayer will accept as payment. - // If a quote is returned, it may be passed back to the relayer for dispatch. - /*getFeeOptions( - // transaction - ): Promise<{ options: FeeOption[], quote?: FeeQuote }>*/ - - // getRefundOptions? - - // getNonce? - // relayer will submit the transaction(s) to the network and return the transaction response. // The quote should be the one returned from getFeeOptions, if any. - // relay(signedTxs: SignedTransactions, quote?: FeeQuote): Promise - + relay(rawTx: RawTransactionType /*quote?: FeeQuote*/): Promise // wait for transaction confirmation // wait(metaTxnId: string | SignedTransactions, timeout: number): Promise } diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index 490d62913..a5bf5bc98 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -1,4 +1,5 @@ import { TransactionRequest, TransactionResponse } from '@ethersproject/providers' +import { RawTransactionType } from '@biconomy-sdk/core-types'; import { Signer as AbstractSigner, ethers } from 'ethers' import { Relayer } from '.'; @@ -23,6 +24,7 @@ export class LocalRelayer implements Relayer { async deployWallet(factory:SmartWalletFactoryContract, context: SmartAccountContext, eoa:string, index:number = 0): Promise { // TODO // Should check if already deployed + // if(!(await factory.isWalletExist())) throw new Error("Smart Account is Already Deployed") const walletDeployTxn = this.prepareWalletDeploy(factory, context, eoa,index); const tx = this.signer.sendTransaction({ ...walletDeployTxn, gasLimit: ethers.constants.Two.pow(24) }); return tx; @@ -45,22 +47,30 @@ export class LocalRelayer implements Relayer { } } + /*async isWalletDeployed(walletAddress: string): Promise { + // Check if wallet is deployed + return true; + }*/ + /*async getFeeOptions( - ): Promise<{ options: FeeOption[] }> { return { options: [] } }*/ - /*async gasRefundOptions( - + /*async gasRefundOptions( ): Promise { const { options } = //await this.getFeeOptions() return options }*/ - /*async relay(signedTxs: SignedTransactions, quote?: FeeQuote) : Promise { - // preprendWalletDeploy - // get txn helpers - // this.signer.sendTransaction() - }*/ + async relay(rawTx: RawTransactionType /*quote?: FeeQuote*/) : Promise { + // check if wallet if deployed + // If not =>> preprendWalletDeploy + + // @notice + // We'd need multiSend instance then + // rawTx to becomes multiSend address and data gets prepared again + const tx = this.signer.sendTransaction({ ...rawTx, gasLimit: ethers.constants.Two.pow(24) }); + return tx; + } } \ No newline at end of file diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 0511b9968..bbc47f306 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -31,6 +31,7 @@ "@biconomy-sdk/ethers-lib": "*", "@biconomy-sdk/node-client": "*", "@biconomy-sdk/relayer": "*", + "@biconomy-sdk/transactions": "*", "@types/mocha": "^9.1.1", "@types/node": "^17.0.23", "@typescript-eslint/eslint-plugin": "^5.17.0", @@ -47,6 +48,7 @@ "@biconomy-sdk/core-types": "*", "@biconomy-sdk/ethers-lib": "*", "@biconomy-sdk/node-client": "*", + "@biconomy-sdk/transactions": "*", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index f772881a7..9e825512b 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -1,6 +1,8 @@ -import { SmartAccountConfig, networks, NetworkConfig, ChainId, ChainConfig, SmartAccountState, SmartAccountContext } from './types' +import { SmartAccountConfig, networks, NetworkConfig, ChainId, ChainConfig, + SmartAccountState, SmartAccountContext, Transaction, ZERO_ADDRESS } from './types' + import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer' import EthersAdapter from '@biconomy-sdk/ethers-lib' -import { ethers, providers } from 'ethers' +import { ethers, providers, Wallet } from 'ethers' import { getSmartWalletFactoryContract, getMultiSendContract, @@ -12,9 +14,12 @@ import { MultiSendContract, TransactionResult } from '@biconomy-sdk/core-types' +import { TransactionRequest, TransactionResponse } from '@ethersproject/providers'; import SafeServiceClient from '@biconomy-sdk/node-client'; import { Web3Provider } from '@ethersproject/providers' import { Relayer } from '@biconomy-sdk/relayer'; +import { WalletTransaction, ExecTransaction, FeeRefund, SmartAccountTransaction, getSignatureParameters } from '@biconomy-sdk/transactions'; +import { RawTransactionType } from '@biconomy-sdk/core-types' class SmartAccount { // { ethAdapter } is a window that gave access to all the Implemented function of it @@ -68,6 +73,7 @@ class SmartAccount { for(let i=0; i < this.supportedNetworkIds.length; i++) { const network = this.supportedNetworkIds[i]; + // @notice : I think we should be providing providers in multi chain context const provider = this.providers[i]; // check if corresponds to same chainId correctly const signer = provider.getSigner(); @@ -100,6 +106,7 @@ class SmartAccount { this.ethAdapter[chainId] ); + // Should attach the address here this.smartWalletContract[networks[chainId].chainId] = getSmartWalletContract( chainId, this.ethAdapter[chainId] @@ -133,9 +140,104 @@ class SmartAccount { return this } + // async sendSignedTransaction : must expect signature! + + // async sign + + + // will get signer's signature + // TODO: + // Signer should be able to use _typedSignData + async sendTransaction(tx:WalletTransaction, batchId:number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + let rawTx: RawTransactionType = { + to: tx.to, + data: tx.data, + value: 0, + chainId: chainId + }; + + const transaction: ExecTransaction = { + to: tx.to, + value: tx.value, + data: tx.data, + operation: tx.operation, + targetTxGas: tx.targetTxGas, + }; + + const refundInfo: FeeRefund = { + baseGas: tx.baseGas, + gasPrice: tx.gasPrice, + gasToken: tx.gasToken, + refundReceiver: tx.refundReceiver, + }; + + debugger; + + // going to go with personal sign + const transactionHash:string = await this.smartAccount(chainId).getTransactionHash(tx); + + let signature:string = await this.ethersAdapter(chainId).getSigner().signMessage(ethers.utils.arrayify(transactionHash)); + let { r, s, v } = getSignatureParameters(signature); + v += 4; + let vNew = ethers.BigNumber.from(v).toHexString(); + signature = r + s.slice(2) + vNew.slice(2); + + const walletInterface = this.smartAccount(chainId).getInterface(); + + console.log("built txn"); + + console.log(transaction); + console.log(refundInfo); + console.log(batchId); + console.log(signature); + + debugger; + + let executionData = walletInterface.encodeFunctionData(walletInterface.getFunction('execTransaction'), + [ transaction, + batchId, + refundInfo, + signature + ] + ); + + console.log("exec data"); + console.log(executionData); + + rawTx.to = this.smartAccount(chainId).getAddress(); + rawTx.data = executionData; + + const txn = this.relayer.relay(rawTx); + return txn; + } + + // Todo : rename + // This transaction is without fee refund + // We need to have identifiers for these txns + async createSmartAccountTransaction(transaction: Transaction, batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + const nonce = (await this.smartAccount(chainId).getNonce(batchId)).toNumber(); + return { + to: transaction.to, + value: "0x", + data: transaction.data || '', + operation: 0, + targetTxGas: 0, + baseGas: 0, + gasPrice: 0, + gasToken: ZERO_ADDRESS, + refundReceiver: ZERO_ADDRESS, + nonce + } + }; + + // + // return smartaccount instance smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { - return this.smartWalletContract[networks[chainId].chainId] + const smartWallet = this.smartWalletContract[networks[chainId].chainId] + const address = this.address; + smartWallet.setAddress(address); + return smartWallet; } factory(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletFactoryContract { @@ -150,9 +252,10 @@ class SmartAccount { // Review // might be coming wrong.. async isDeployed(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - const readProvider = new ethers.providers.JsonRpcProvider(networks[chainId].providerUrl); - const walletCode = await readProvider.getCode(await this.getAddress(chainId)); - return !!walletCode && walletCode !== '0x' + // const readProvider = new ethers.providers.JsonRpcProvider(networks[chainId].providerUrl); + //const walletCode = await readProvider.getCode(await this.getAddress(chainId)); + // return !!walletCode && walletCode !== '0x' + return await this.factory(chainId).isWalletExist(this.address); } async getSmartAccountState(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index d2ccb18ac..b04522716 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -1,4 +1,4 @@ -import { BytesLike, Wallet } from 'ethers'; +import { BytesLike, Wallet, BigNumberish } from 'ethers'; import { ExternalProvider, Web3Provider } from '@ethersproject/providers'; // walletProvider: WalletProviderLike @@ -12,6 +12,21 @@ export interface SmartAccountConfig { // relayer_url // provider? +// TODO +// Review location, usage and name of types + +export interface Transaction { + to: string + value?: BigNumberish + data?: string + nonce?: BigNumberish + gasLimit?: BigNumberish + // delegateCall?: boolean + // revertOnError?: boolean +} + +export const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; + export interface SmartAccountState { address: string, owner: string, diff --git a/packages/transactions/src/index.ts b/packages/transactions/src/index.ts index e69de29bb..207c20fb1 100644 --- a/packages/transactions/src/index.ts +++ b/packages/transactions/src/index.ts @@ -0,0 +1,2 @@ +export * from './types' +export * from './utils' \ No newline at end of file diff --git a/packages/transactions/src/types.ts b/packages/transactions/src/types.ts index fe5e49fa0..6c7180ab9 100644 --- a/packages/transactions/src/types.ts +++ b/packages/transactions/src/types.ts @@ -6,6 +6,7 @@ import { BigNumberish, Signer, PopulatedTransaction, + BytesLike } from "ethers"; import { TypedDataSigner } from "@ethersproject/abstract-signer"; import { AddressZero } from "@ethersproject/constants"; @@ -33,6 +34,19 @@ export interface MetaTransaction { data: string; operation: number; }; + +export interface WalletTransaction { + to: string; + value: string; + data: string; + operation: number; + targetTxGas: string | number; + baseGas: string | number; + gasPrice: string | number; + gasToken: string; + refundReceiver: string; + nonce: number +} /*export interface SafeTransaction extends MetaTransaction { targetTxGas: string | number; @@ -43,9 +57,9 @@ export interface MetaTransaction { nonce: string | number; };*/ -export interface Transaction { +export interface ExecTransaction { to: string; - value: string | number | BigNumber; + value: string; data: string; operation: number; targetTxGas: string | number; @@ -58,8 +72,8 @@ export interface FeeRefund { refundReceiver: string; }; -export interface WalletTransaction { - _tx: Transaction; +export interface SmartAccountTransaction { + _tx: ExecTransaction; refundInfo: FeeRefund; batchId: number; nonce: string | number; diff --git a/packages/transactions/src/utils.ts b/packages/transactions/src/utils.ts index e69de29bb..e4478edf4 100644 --- a/packages/transactions/src/utils.ts +++ b/packages/transactions/src/utils.ts @@ -0,0 +1,95 @@ +import { + arrayify, + // defaultAbiCoder, + // hexConcat, + parseEther, + // solidityKeccak256, +} from "ethers/lib/utils"; +import { + ethers, + BigNumber, + // BigNumberish, + // Contract, + // ContractReceipt, + Wallet, +} from "ethers"; +/* import { + IERC20, + EntryPoint, + EntryPoint__factory, + SimpleWallet__factory, +} from "../typechain"; */ +// import { BytesLike } from "@ethersproject/bytes"; +// import { expect } from "chai"; +// import { debugTransaction } from "./debugTx"; +import { keccak256 } from "ethereumjs-util"; + +export const AddressZero = ethers.constants.AddressZero; +export const HashZero = ethers.constants.HashZero; +export const ONE_ETH = parseEther("1"); +export const TWO_ETH = parseEther("2"); +export const FIVE_ETH = parseEther("5"); + +export const tostr = (x: any) => (x != null ? x.toString() : "null"); + +let counter = 0; +// create non-random account, so gas calculations are deterministic +export function createWalletOwner(): Wallet { + const privateKey = keccak256( + Buffer.from(arrayify(BigNumber.from(++counter))) + ); + return new ethers.Wallet(privateKey, ethers.providers.getDefaultProvider()); + // return new ethers.Wallet('0x'.padEnd(66, privkeyBase), ethers.provider); +} + +export async function getBalance(address: string): Promise { + const balance = await ethers.providers.getDefaultProvider().getBalance(address); + return parseInt(balance.toString()); +} + +export function getSignatureParameters(signature:string) { + if (!ethers.utils.isHexString(signature)) { + throw new Error( + 'Given value "'.concat(signature, '" is not a valid hex string.') + ); + } + var r = signature.slice(0, 66); + var s = "0x".concat(signature.slice(66, 130)); + var v = ethers.BigNumber.from("0x".concat(signature.slice(130, 132))).toNumber(); + if (![27, 28].includes(v)) v += 27; + return { + r: r, + s: s, + v: v + }; +} + +export const Erc20 = [ + "function transfer(address _receiver, uint256 _value) public returns (bool success)", + "function transferFrom(address, address, uint) public returns (bool)", + "function approve(address _spender, uint256 _value) public returns (bool success)", + "function allowance(address _owner, address _spender) public view returns (uint256 remaining)", + "function balanceOf(address _owner) public view returns (uint256 balance)", + "event Approval(address indexed _owner, address indexed _spender, uint256 _value)", +]; + +export const Erc20Interface = new ethers.utils.Interface(Erc20); + +export const encodeTransfer = ( + target: string, + amount: string | number +): string => { + return Erc20Interface.encodeFunctionData("transfer", [target, amount]); +}; + +export const encodeTransferFrom = ( + from: string, + target: string, + amount: string | number +): string => { + return Erc20Interface.encodeFunctionData("transferFrom", [ + from, + target, + amount, + ]); +}; From 389efebf6f0f53398c89ba3a75a158b0008fd56c Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 22 Jul 2022 18:17:18 +0530 Subject: [PATCH 0020/1247] update types --- .../src/contracts/SmartWalletContract.ts | 14 +++--- packages/core-types/src/types.ts | 21 +++++++-- .../smart-contract-wallet/SmartWallet.sol | 22 +++++----- .../storage/WalletStorage.sol | 6 +-- .../SmartWallet/SmartWalletContractEthers.ts | 24 ++++++----- .../node-client/tests/endpoint/index.test.ts | 4 +- packages/smart-account/src/SmartAccount.ts | 43 +++++++++++-------- packages/transactions/src/types.ts | 4 +- 8 files changed, 84 insertions(+), 54 deletions(-) diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index d124f362a..112dde5cf 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -4,16 +4,20 @@ import { WalletTransaction, SmartAccountVersion, TransactionOptions, - TransactionResult + TransactionResult, + ExecTransaction, + FeeRefund } from '../types' import { BigNumber } from '@ethersproject/bignumber' import { Interface } from "@ethersproject/abi"; +import { Contract } from '@ethersproject/contracts'; // TODO // Rename export interface SmartWalletContract { getAddress(): string + getContract(): Contract getInterface(): Interface setAddress(address:string): any getOwner(): Promise @@ -21,10 +25,10 @@ export interface SmartWalletContract { getNonce(batchId: number): Promise getTransactionHash(smartAccountTrxData: WalletTransaction): Promise execTransaction( - transaction: SmartAccountTrx, + transaction: ExecTransaction, batchId: number, - feeRefundData: FeeRefundData, - options: TransactionOptions - ): Promise + feeRefundData: FeeRefund, + signatures: string + ): any encode(methodName: string, params: any): string } diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 450efbc38..0b2675dbe 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -1,6 +1,6 @@ import { ContractTransaction } from '@ethersproject/contracts' import { PromiEvent, TransactionReceipt } from 'web3-core/types' -import { BigNumber } from '@ethersproject/bignumber'; +import { BigNumber, BigNumberish } from '@ethersproject/bignumber'; export type SmartAccountVersion = '1.3.0' | '1.2.0' | '1.1.1' @@ -27,7 +27,7 @@ export interface RawTransactionType { maxPriorityFeePerGas?: string | BigNumber; gasLimit?: string; to: string; - value: string | number; + value: BigNumberish; data?: string; chainId: number; nonce?: number | string; @@ -35,6 +35,21 @@ export interface RawTransactionType { type?: number; }; +export interface ExecTransaction { + to: string; + value: BigNumberish; + data: string; + operation: number; + targetTxGas: string | number; +}; + +export interface FeeRefund { + baseGas: string | number; + gasPrice: string | number; + gasToken: string; + refundReceiver: string; +}; + export interface MetaTransactionData { readonly to: string readonly value: string @@ -63,7 +78,7 @@ export interface SmartAccountTrxDataPartial extends MetaTransactionData { export interface WalletTransaction { to: string; - value: string; + value: BigNumberish; data: string; operation: number; targetTxGas: string | number; diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol index fb9a9b2de..a787e73a1 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol @@ -167,17 +167,17 @@ contract SmartWallet is // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500) // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150 - require(gasleft() >= ((_tx.safeTxGas * 64) / 63).max(_tx.safeTxGas + 2500) + 500, "BSA010"); + require(gasleft() >= ((_tx.targetTxGas * 64) / 63).max(_tx.targetTxGas + 2500) + 500, "BSA010"); // Use scope here to limit variable lifetime and prevent `stack too deep` errors { uint256 gasUsed = gasleft(); - // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than safeTxGas) - // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than safeTxGas - success = execute(_tx.to, _tx.value, _tx.data, _tx.operation, refundInfo.gasPrice == 0 ? (gasleft() - 2500) : _tx.safeTxGas); + // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than targetTxGas) + // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than targetTxGas + success = execute(_tx.to, _tx.value, _tx.data, _tx.operation, refundInfo.gasPrice == 0 ? (gasleft() - 2500) : _tx.targetTxGas); gasUsed = gasUsed.sub(gasleft()); - // If no safeTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful + // If no targetTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert - require(success || _tx.safeTxGas != 0 || refundInfo.gasPrice != 0, "BSA013"); + require(success || _tx.targetTxGas != 0 || refundInfo.gasPrice != 0, "BSA013"); // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls uint256 payment = 0; if (refundInfo.gasPrice > 0) { @@ -273,7 +273,7 @@ contract SmartWallet is /// @param value Ether value. /// @param data Data payload. /// @param operation Operation type. - /// @param safeTxGas Fas that should be used for the safe transaction. + /// @param targetTxGas Fas that should be used for the safe transaction. /// @param baseGas Gas costs for data used to trigger the safe transaction. /// @param gasPrice Maximum gas price that should be used for this transaction. /// @param gasToken Token address (or 0 if ETH) that is used for the payment. @@ -285,7 +285,7 @@ contract SmartWallet is uint256 value, bytes calldata data, Enum.Operation operation, - uint256 safeTxGas, + uint256 targetTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, @@ -297,7 +297,7 @@ contract SmartWallet is value: value, data: data, operation: operation, - safeTxGas: safeTxGas + targetTxGas: targetTxGas }); FeeRefund memory refundInfo = FeeRefund({ baseGas: baseGas, @@ -322,12 +322,12 @@ contract SmartWallet is bytes32 safeTxHash = keccak256( abi.encode( - SAFE_TX_TYPEHASH, + WALLET_TX_TYPEHASH, _tx.to, _tx.value, keccak256(_tx.data), _tx.operation, - _tx.safeTxGas, + _tx.targetTxGas, refundInfo.baseGas, refundInfo.gasPrice, refundInfo.gasToken, diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol index 874b53a42..9710efb45 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol @@ -15,9 +15,9 @@ contract WalletStorage { // @review for any modifications // keccak256( - // "SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" + // "WalletTx(address to,uint256 value,bytes data,uint8 operation,uint256 targetTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" // ); - bytes32 internal constant SAFE_TX_TYPEHASH = 0xbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8; + bytes32 internal constant WALLET_TX_TYPEHASH = 0xeedfef42e81fe8cd0e4185e4320e9f8d52fd97eb890b85fa9bd7ad97c9a18de2; // Owner storage address public owner; @@ -27,7 +27,7 @@ contract WalletStorage { uint256 value; bytes data; Enum.Operation operation; - uint256 safeTxGas; + uint256 targetTxGas; // uint256 batchId; } diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts index 9fb043bf3..67ccea129 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts @@ -2,16 +2,16 @@ import { BigNumber } from '@ethersproject/bignumber' import { SmartAccountVersion, SmartWalletContract, - SmartAccountTrx, WalletTransaction, - TransactionOptions, - FeeRefundData, + ExecTransaction, + FeeRefund, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../utils' import { SmartWalletContract as SmartWalletContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' import { SmartWalletContractInterface } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' import { getJsonWalletAddress, Interface } from 'ethers/lib/utils' +import { Contract } from '@ethersproject/contracts'; class SmartWalletContractEthers implements SmartWalletContract { constructor(public contract: SmartWalletContract_TypeChain) {} @@ -19,6 +19,10 @@ class SmartWalletContractEthers implements SmartWalletContract { return this.contract.interface; } + getContract(): Contract { + return this.contract; + } + getAddress(): string { return this.contract.address } @@ -54,19 +58,19 @@ class SmartWalletContractEthers implements SmartWalletContract { } async execTransaction( - smartAccountTrx: SmartAccountTrx, + _tx: ExecTransaction, batchId: number, - feeRefundData: FeeRefundData, - options: TransactionOptions + refundInfo: FeeRefund, + signatures: string ): Promise { // TODO: estimate GAS before making the transaction const txResponse = await this.contract.execTransaction( - smartAccountTrx.data, + _tx, batchId, - feeRefundData, - smartAccountTrx.encodedSignatures() + refundInfo, + signatures ) - return toTxResult(txResponse, options) + return toTxResult(txResponse) } encode: SmartWalletContractInterface['encodeFunctionData'] = ( diff --git a/packages/node-client/tests/endpoint/index.test.ts b/packages/node-client/tests/endpoint/index.test.ts index 88ca24f45..d6b8566b9 100644 --- a/packages/node-client/tests/endpoint/index.test.ts +++ b/packages/node-client/tests/endpoint/index.test.ts @@ -354,7 +354,7 @@ describe('Endpoint tests', () => { data: '0x', value: '123456789', operation: 1, - safeTxGas: 0, + targetTxGas: 0, baseGas: 0, gasPrice: 0, gasToken: '0x0000000000000000000000000000000000000000', @@ -396,7 +396,7 @@ describe('Endpoint tests', () => { data: '0x', value: '123456789', operation: 1, - safeTxGas: 0, + targetTxGas: 0, baseGas: 0, gasPrice: 0, gasToken: '0x0000000000000000000000000000000000000000', diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 9e825512b..dece2ec11 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -12,14 +12,14 @@ import { SmartWalletFactoryContract, SmartWalletContract, MultiSendContract, - TransactionResult + TransactionResult, + RawTransactionType } from '@biconomy-sdk/core-types' import { TransactionRequest, TransactionResponse } from '@ethersproject/providers'; import SafeServiceClient from '@biconomy-sdk/node-client'; import { Web3Provider } from '@ethersproject/providers' -import { Relayer } from '@biconomy-sdk/relayer'; +import { Relayer, LocalRelayer } from '@biconomy-sdk/relayer'; import { WalletTransaction, ExecTransaction, FeeRefund, SmartAccountTransaction, getSignatureParameters } from '@biconomy-sdk/transactions'; -import { RawTransactionType } from '@biconomy-sdk/core-types' class SmartAccount { // { ethAdapter } is a window that gave access to all the Implemented function of it @@ -77,6 +77,7 @@ class SmartAccount { const provider = this.providers[i]; // check if corresponds to same chainId correctly const signer = provider.getSigner(); + // this.relayer = new LocalRelayer(signer); // should relayer client be chosen per chain? // instantiating EthersAdapter instance and maintain it as class level variable this.ethAdapter[network] = new EthersAdapter({ @@ -152,7 +153,7 @@ class SmartAccount { let rawTx: RawTransactionType = { to: tx.to, data: tx.data, - value: 0, + value: tx.value, chainId: chainId }; @@ -171,8 +172,6 @@ class SmartAccount { refundReceiver: tx.refundReceiver, }; - debugger; - // going to go with personal sign const transactionHash:string = await this.smartAccount(chainId).getTransactionHash(tx); @@ -182,7 +181,9 @@ class SmartAccount { let vNew = ethers.BigNumber.from(v).toHexString(); signature = r + s.slice(2) + vNew.slice(2); - const walletInterface = this.smartAccount(chainId).getInterface(); + // const walletInterface = this.smartAccount(chainId).getInterface(); + let walletContract = this.smartAccount(chainId).getContract(); + walletContract = walletContract.attach(this.address); console.log("built txn"); @@ -190,24 +191,23 @@ class SmartAccount { console.log(refundInfo); console.log(batchId); console.log(signature); - - debugger; - let executionData = walletInterface.encodeFunctionData(walletInterface.getFunction('execTransaction'), - [ transaction, + let { data } = await walletContract.populateTransaction.execTransaction( + transaction, batchId, refundInfo, signature - ] ); console.log("exec data"); - console.log(executionData); + console.log(data); - rawTx.to = this.smartAccount(chainId).getAddress(); - rawTx.data = executionData; + console.log('raw tx'); + console.log(rawTx); + rawTx.to = this.address; + rawTx.data = data; - const txn = this.relayer.relay(rawTx); + const txn = await this.relayer.relay(rawTx); return txn; } @@ -216,9 +216,10 @@ class SmartAccount { // We need to have identifiers for these txns async createSmartAccountTransaction(transaction: Transaction, batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { const nonce = (await this.smartAccount(chainId).getNonce(batchId)).toNumber(); + console.log('nonce: ', nonce); return { to: transaction.to, - value: "0x", + value: 0, data: transaction.data || '', operation: 0, targetTxGas: 0, @@ -236,7 +237,7 @@ class SmartAccount { smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { const smartWallet = this.smartWalletContract[networks[chainId].chainId] const address = this.address; - smartWallet.setAddress(address); + smartWallet.getContract().attach(address); return smartWallet; } @@ -244,6 +245,10 @@ class SmartAccount { return this.smartWalletFactoryContract[networks[chainId].chainId] } + multiSend(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendContract { + return this.multiSendContract[networks[chainId].chainId] + } + // Optional index allowed async getAddress(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId) : Promise { return await this.getAddressForCounterfactualWallet(index,chainId); @@ -267,6 +272,7 @@ class SmartAccount { return state; } + // apend owner? async getSmartAccountContext(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { const context: SmartAccountContext = { entryPointAddress: networks[chainId].entryPoint, @@ -280,6 +286,7 @@ class SmartAccount { // sendSignedTransaction // signMessage // signTransaction + // getTokenBalances() // Discuss about multichain aspect of relayer node url and clients // TODO: get details from backend config diff --git a/packages/transactions/src/types.ts b/packages/transactions/src/types.ts index 6c7180ab9..c194ba62d 100644 --- a/packages/transactions/src/types.ts +++ b/packages/transactions/src/types.ts @@ -37,7 +37,7 @@ export interface MetaTransaction { export interface WalletTransaction { to: string; - value: string; + value: BigNumberish; data: string; operation: number; targetTxGas: string | number; @@ -59,7 +59,7 @@ export interface WalletTransaction { export interface ExecTransaction { to: string; - value: string; + value: BigNumberish; data: string; operation: number; targetTxGas: string | number; From 1a93232e499fa865d9735e7eb4e4d1671635ba73 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sat, 23 Jul 2022 01:56:33 +0530 Subject: [PATCH 0021/1247] remove test scripts --- package.json | 1 - packages/node-client/package.json | 6 ------ 2 files changed, 7 deletions(-) diff --git a/package.json b/package.json index 589200e71..dfa7d535b 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,6 @@ "clean": "lerna clean", "unbuild": "lerna run unbuild", "build": "npm install -D nx@latest && lerna run build --stream --npm-client=yarn", - "test": "FORCE_COLOR=1 lerna run test --stream --npm-client=yarn", "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", "format": "lerna run format --npm-client=yarn", "prettier": "lerna run prettier --npm-client=npm", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index e86c3a0a5..35de5ea8d 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -13,12 +13,6 @@ "scripts": { "unbuild": "rimraf dist", "build": "yarn rimraf dist && tsc", - "test:web3": "export TESTS_PATH=tests/endpoint && export ETH_LIB=web3 && nyc hardhat test", - "test:ethers": "export TESTS_PATH=tests/endpoint && export ETH_LIB=ethers && nyc hardhat test", - "test": "yarn test:ethers", - "test:ci:web3": "export TESTS_PATH=tests/e2e && export ETH_LIB=web3 && nyc hardhat test", - "test:ci:ethers": "export TESTS_PATH=tests/e2e && export ETH_LIB=ethers && nyc hardhat test", - "test:ci": "yarn test:ci:ethers", "format": "prettier --write \"{src,tests,e2e}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, From 277bfa1d918a6e3d401a2103a75cee3b42a29044 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sat, 23 Jul 2022 03:37:33 +0530 Subject: [PATCH 0022/1247] fixes with updated contracts + test gasless txn on wallet --- .../src/contracts/EntryPointContract.ts | 2 - .../references/aa-4337/EntryPoint.sol | 331 ++++++++++-------- .../references/aa-4337/StakeManager.sol | 178 ++++++---- .../smart-contract-wallet/SmartWallet.sol | 92 +++-- .../smart-contract-wallet/WalletFactory.sol | 1 + .../common/SecuredTokenTransfer.sol | 3 +- .../smart-contract-wallet/libs/SafeMath.sol | 51 --- .../test/StakedTestToken.sol | 24 ++ .../utils/GasEstimator.sol | 16 + .../EntryPointEthersContract.ts | 9 - .../SmartWallet/SmartWalletContractEthers.ts | 2 +- .../smart-account/src/assets/SmartWallet.json | 64 +--- .../src/assets/WalletFactory.json | 18 +- packages/smart-account/src/types.ts | 4 +- 14 files changed, 423 insertions(+), 372 deletions(-) delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/SafeMath.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StakedTestToken.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/utils/GasEstimator.sol diff --git a/packages/core-types/src/contracts/EntryPointContract.ts b/packages/core-types/src/contracts/EntryPointContract.ts index 01b60ebcc..479c618a5 100644 --- a/packages/core-types/src/contracts/EntryPointContract.ts +++ b/packages/core-types/src/contracts/EntryPointContract.ts @@ -1,10 +1,8 @@ import { UserOperation, TransactionResult } from '../types' export interface EntryPointContract { - handleOp(userOperation: UserOperation, beneficiary: string): Promise handleOps(userOperations: UserOperation[], beneficiary: string): Promise simulateValidation(userOperation: UserOperation): Promise getRequestId(userOperation: UserOperation): Promise getSenderAddress(initCode: string, salt: number): Promise - isPaymasterStaked(address: string, stake: number): Promise } diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/EntryPoint.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/EntryPoint.sol index 3cb410376..0ba64afab 100644 --- a/packages/ethers-lib/scw-contracts/references/aa-4337/EntryPoint.sol +++ b/packages/ethers-lib/scw-contracts/references/aa-4337/EntryPoint.sol @@ -1,6 +1,10 @@ // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; +/* solhint-disable avoid-low-level-calls */ +/* solhint-disable no-inline-assembly */ +/* solhint-disable reason-string */ + import "./StakeManager.sol"; import "./UserOperation.sol"; import "./IWallet.sol"; @@ -15,69 +19,64 @@ contract EntryPoint is StakeManager { using UserOperationLib for UserOperation; enum PaymentMode { - paymasterStake, // if paymaster is set, use paymaster's stake to pay. - walletStake // pay with wallet deposit. + paymasterDeposit, // if paymaster is set, use paymaster's deposit to pay. + walletDeposit // pay with wallet deposit. } - uint public immutable paymasterStake; address public immutable create2factory; - event UserOperationEvent(bytes32 indexed requestId, address indexed sender, address indexed paymaster, uint nonce, uint actualGasCost, uint actualGasPrice, bool success); - event UserOperationRevertReason(bytes32 indexed requestId, address indexed sender, uint nonce, bytes revertReason); + /*** + * An event emitted after each successful request + * @param requestId - unique identifier for the request (hash its entire content, except signature). + * @param sender - the account that generates this request. + * @param paymaster - if non-null, the paymaster that pays for this request. + * @param nonce - the nonce value from the request + * @param actualGasCost - the total cost (in gas) of this request. + * @param actualGasPrice - the actual gas price the sender agreed to pay. + * @param success - true if the sender transaction succeeded, false if reverted. + */ + event UserOperationEvent(bytes32 indexed requestId, address indexed sender, address indexed paymaster, uint256 nonce, uint256 actualGasCost, uint256 actualGasPrice, bool success); - //handleOps reverts with this error struct, to mark the offending op - // NOTE: if simulateOp passes successfully, there should be no reason for handleOps to fail on it. - // @param opIndex - index into the array of ops to the failed one (in simulateOp, this is always zero) - // @param paymaster - if paymaster.validatePaymasterUserOp fails, this will be the paymaster's address. if validateUserOp failed, - // this value will be zero (since it failed before accessing the paymaster) - // @param reason - revert reason - // only to aid troubleshooting of wallet/paymaster reverts - error FailedOp(uint opIndex, address paymaster, string reason); + /** + * An event emitted if the UserOperation "callData" reverted with non-zero length + * @param requestId the request unique identifier. + * @param sender the sender of this request + * @param nonce the nonce used in the request + * @param revertReason - the return bytes from the (reverted) call to "callData". + */ + event UserOperationRevertReason(bytes32 indexed requestId, address indexed sender, uint256 nonce, bytes revertReason); /** - * @param _create2factory - contract to "create2" wallets (not the EntryPoint itself, so that it can be upgraded) - * @param _paymasterStake - locked stake of paymaster (actual value should also cover TX cost) + * a custom revert error of handleOps, to identify the offending op. + * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it. + * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero) + * @param paymaster - if paymaster.validatePaymasterUserOp fails, this will be the paymaster's address. if validateUserOp failed, + * this value will be zero (since it failed before accessing the paymaster) + * @param reason - revert reason + * Should be caught in off-chain handleOps simulation and not happen on-chain. + * Useful for mitigating DoS attempts against batchers or for troubleshooting of wallet/paymaster reverts. + */ + error FailedOp(uint256 opIndex, address paymaster, string reason); + + /** + * @param _create2factory - contract to "create2" wallets (not the EntryPoint itself, so that the EntryPoint can be upgraded) + * @param _paymasterStake - minimum required locked stake for a paymaster * @param _unstakeDelaySec - minimum time (in seconds) a paymaster stake must be locked */ - constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) StakeManager(_unstakeDelaySec) { + constructor(address _create2factory, uint256 _paymasterStake, uint32 _unstakeDelaySec) StakeManager(_paymasterStake, _unstakeDelaySec) { + require(_create2factory != address(0), "invalid create2factory"); + require(_unstakeDelaySec > 0, "invalid unstakeDelay"); + require(_paymasterStake > 0, "invalid paymasterStake"); create2factory = _create2factory; - paymasterStake = _paymasterStake; } /** - * Execute the given UserOperation. - * @param op the operation to execute + * compensate the caller's beneficiary address with the collected fees of all UserOperations. * @param beneficiary the address to receive the fees + * @param amount amount to transfer. */ - function handleOp(UserOperation calldata op, address payable beneficiary) public { - - uint preGas = gasleft(); - - unchecked { - bytes32 requestId = getRequestId(op); - (uint256 prefund, PaymentMode paymentMode, bytes memory context) = _validatePrepayment(0, op, requestId); - UserOpInfo memory opInfo = UserOpInfo( - requestId, - prefund, - paymentMode, - 0, - preGas - gasleft() + op.preVerificationGas - ); - - uint actualGasCost; - - try this.internalHandleOp(op, opInfo, context) returns (uint _actualGasCost) { - actualGasCost = _actualGasCost; - } catch { - uint actualGas = preGas - gasleft() + opInfo.preOpGas; - actualGasCost = handlePostOp(0, IPaymaster.PostOpMode.postOpReverted, op, opInfo, context, actualGas); - } - - compensate(beneficiary, actualGasCost); - } // unchecked - } - - function compensate(address payable beneficiary, uint amount) internal { + function _compensate(address payable beneficiary, uint256 amount) internal { + require(beneficiary != address(0), "invalid beneficiary"); (bool success,) = beneficiary.call{value : amount}(""); require(success); } @@ -89,18 +88,18 @@ contract EntryPoint is StakeManager { */ function handleOps(UserOperation[] calldata ops, address payable beneficiary) public { - uint opslen = ops.length; + uint256 opslen = ops.length; UserOpInfo[] memory opInfos = new UserOpInfo[](opslen); unchecked { - for (uint i = 0; i < opslen; i++) { - uint preGas = gasleft(); + for (uint256 i = 0; i < opslen; i++) { + uint256 preGas = gasleft(); UserOperation calldata op = ops[i]; bytes memory context; - uint contextOffset; + uint256 contextOffset; bytes32 requestId = getRequestId(op); - uint prefund; + uint256 prefund; PaymentMode paymentMode; (prefund, paymentMode, context) = _validatePrepayment(i, op, requestId); assembly {contextOffset := context} @@ -113,38 +112,42 @@ contract EntryPoint is StakeManager { ); } - uint collected = 0; + uint256 collected = 0; - for (uint i = 0; i < ops.length; i++) { - uint preGas = gasleft(); + for (uint256 i = 0; i < ops.length; i++) { + uint256 preGas = gasleft(); UserOperation calldata op = ops[i]; UserOpInfo memory opInfo = opInfos[i]; - uint contextOffset = opInfo._context; + uint256 contextOffset = opInfo.contextOffset; bytes memory context; assembly {context := contextOffset} - try this.internalHandleOp(op, opInfo, context) returns (uint _actualGasCost) { + try this.innerHandleOp(op, opInfo, context) returns (uint256 _actualGasCost) { collected += _actualGasCost; } catch { - uint actualGas = preGas - gasleft() + opInfo.preOpGas; - collected += handlePostOp(i, IPaymaster.PostOpMode.postOpReverted, op, opInfo, context, actualGas); + uint256 actualGas = preGas - gasleft() + opInfo.preOpGas; + collected += _handlePostOp(i, IPaymaster.PostOpMode.postOpReverted, op, opInfo, context, actualGas); } } - compensate(beneficiary, collected); + _compensate(beneficiary, collected); } //unchecked } struct UserOpInfo { bytes32 requestId; - uint prefund; + uint256 prefund; PaymentMode paymentMode; - uint _context; - uint preOpGas; + uint256 contextOffset; + uint256 preOpGas; } - function internalHandleOp(UserOperation calldata op, UserOpInfo calldata opInfo, bytes calldata context) external returns (uint actualGasCost) { - uint preGas = gasleft(); + /** + * inner function to handle a UserOperation. + * Must be declared "external" to open a call context, but it can only be called by handleOps. + */ + function innerHandleOp(UserOperation calldata op, UserOpInfo calldata opInfo, bytes calldata context) external returns (uint256 actualGasCost) { + uint256 preGas = gasleft(); require(msg.sender == address(this)); IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded; @@ -160,14 +163,15 @@ contract EntryPoint is StakeManager { } unchecked { - uint actualGas = preGas - gasleft() + opInfo.preOpGas; - return handlePostOp(0, mode, op, opInfo, context, actualGas); + uint256 actualGas = preGas - gasleft() + opInfo.preOpGas; + //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp) + return _handlePostOp(0, mode, op, opInfo, context, actualGas); } } /** * generate a request Id - unique identifier for this request. - * the request ID is a hash over the content of the userOp (except the signature). + * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid. */ function getRequestId(UserOperation calldata userOp) public view returns (bytes32) { return keccak256(abi.encode(userOp.hash(), address(this), block.chainid)); @@ -175,15 +179,15 @@ contract EntryPoint is StakeManager { /** * Simulate a call to wallet.validateUserOp and paymaster.validatePaymasterUserOp. - * Validation succeeds of the call doesn't revert. + * Validation succeeds if the call doesn't revert. * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the wallet's data. * In order to split the running opcodes of the wallet (validateUserOp) from the paymaster's validatePaymasterUserOp, * it should look for the NUMBER opcode at depth=1 (which itself is a banned opcode) * @return preOpGas total gas used by validation (including contract creation) * @return prefund the amount the wallet had to prefund (zero in case a paymaster pays) */ - function simulateValidation(UserOperation calldata userOp) external returns (uint preOpGas, uint prefund) { - uint preGas = gasleft(); + function simulateValidation(UserOperation calldata userOp) external returns (uint256 preOpGas, uint256 prefund) { + uint256 preGas = gasleft(); bytes32 requestId = getRequestId(userOp); (prefund,,) = _validatePrepayment(0, userOp, requestId); @@ -192,12 +196,12 @@ contract EntryPoint is StakeManager { require(msg.sender == address(0), "must be called off-chain with from=zero-addr"); } - function _getPaymentInfo(UserOperation calldata userOp) internal view returns (uint requiredPrefund, PaymentMode paymentMode) { + function _getPaymentInfo(UserOperation calldata userOp) internal view returns (uint256 requiredPrefund, PaymentMode paymentMode) { requiredPrefund = userOp.requiredPreFund(); if (userOp.hasPaymaster()) { - paymentMode = PaymentMode.paymasterStake; + paymentMode = PaymentMode.paymasterDeposit; } else { - paymentMode = PaymentMode.walletStake; + paymentMode = PaymentMode.walletDeposit; } } @@ -214,14 +218,18 @@ contract EntryPoint is StakeManager { } } - /// Get counterfactual sender address. - /// Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation. - function getSenderAddress(bytes memory initCode, uint _salt) public view returns (address) { + /** + * Get counterfactual sender address. + * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation. + * @param initCode the constructor code to be passed into the UserOperation. + * @param salt the salt parameter, to be passed as "nonce" in the UserOperation. + */ + function getSenderAddress(bytes memory initCode, uint256 salt) public view returns (address) { bytes32 hash = keccak256( abi.encodePacked( bytes1(0xff), address(create2factory), - _salt, + salt, keccak256(initCode) ) ); @@ -230,82 +238,99 @@ contract EntryPoint is StakeManager { return address(uint160(uint256(hash))); } - //call wallet.validateUserOp, and validate that it paid as needed. - // return actual value sent from wallet to "this" - function _validateWalletPrepayment(uint opIndex, UserOperation calldata op, bytes32 requestId, uint requiredPrefund, PaymentMode paymentMode) internal returns (uint gasUsedByValidateUserOp, uint prefund) { + /** + * call wallet.validateUserOp. + * revert (with FailedOp) in case validateUserOp reverts, or wallet didn't send required prefund. + * decrement wallet's deposit if needed + */ + function _validateWalletPrepayment(uint256 opIndex, UserOperation calldata op, bytes32 requestId, uint256 requiredPrefund, PaymentMode paymentMode) internal returns (uint256 gasUsedByValidateWalletPrepayment) { unchecked { - uint preGas = gasleft(); + uint256 preGas = gasleft(); _createSenderIfNeeded(op); - uint missingWalletFunds = 0; + uint256 missingWalletFunds = 0; address sender = op.getSender(); - if (paymentMode != PaymentMode.paymasterStake) { - uint bal = balanceOf(sender); + if (paymentMode != PaymentMode.paymasterDeposit) { + uint256 bal = balanceOf(sender); missingWalletFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal; } + // solhint-disable-next-line no-empty-blocks try IWallet(sender).validateUserOp{gas : op.verificationGas}(op, requestId, missingWalletFunds) { } catch Error(string memory revertReason) { revert FailedOp(opIndex, address(0), revertReason); } catch { revert FailedOp(opIndex, address(0), ""); } - if (paymentMode != PaymentMode.paymasterStake) { - if (requiredPrefund > balanceOf(sender)) { + if (paymentMode != PaymentMode.paymasterDeposit) { + DepositInfo storage senderInfo = deposits[sender]; + uint deposit = senderInfo.deposit; + if (requiredPrefund > deposit) { revert FailedOp(opIndex, address(0), "wallet didn't pay prefund"); } - internalDecrementDeposit(sender, requiredPrefund); - prefund = requiredPrefund; - } else { - prefund = 0; + senderInfo.deposit = uint112(deposit - requiredPrefund); } - gasUsedByValidateUserOp = preGas - gasleft(); + gasUsedByValidateWalletPrepayment = preGas - gasleft(); } } - //validate paymaster.validatePaymasterUserOp - function _validatePaymasterPrepayment(uint opIndex, UserOperation calldata op, bytes32 requestId, uint requiredPreFund, uint gasUsedByValidateUserOp) internal view returns (bytes memory context) { + /** + * in case the request has a paymaster: + * validate paymaster is staked and has enough deposit. + * call paymaster.validatePaymasterUserOp. + * revert with proper FailedOp in case paymaster reverts. + * decrement paymaster's deposit + */ + function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, bytes32 requestId, uint256 requiredPreFund, uint256 gasUsedByValidateWalletPrepayment) internal returns (bytes memory context) { unchecked { - //validate a paymaster has enough stake (including for payment for this TX) - // NOTE: when submitting a batch, caller has to make sure a paymaster has enough stake to cover - // all its transactions in the batch. - if (!isPaymasterStaked(op.paymaster, paymasterStake + requiredPreFund)) { - revert FailedOp(opIndex, op.paymaster, "not enough stake"); + address paymaster = op.paymaster; + DepositInfo storage paymasterInfo = deposits[paymaster]; + uint deposit = paymasterInfo.deposit; + bool staked = paymasterInfo.staked; + if (!staked) { + revert FailedOp(opIndex, paymaster, "not staked"); } - //no pre-pay from paymaster - uint gas = op.verificationGas - gasUsedByValidateUserOp; - try IPaymaster(op.paymaster).validatePaymasterUserOp{gas : gas}(op, requestId, requiredPreFund) returns (bytes memory _context){ + if (deposit < requiredPreFund) { + revert FailedOp(opIndex, paymaster, "paymaster deposit too low"); + } + paymasterInfo.deposit = uint112(deposit - requiredPreFund); + uint256 gas = op.verificationGas - gasUsedByValidateWalletPrepayment; + try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, requestId, requiredPreFund) returns (bytes memory _context){ context = _context; } catch Error(string memory revertReason) { - revert FailedOp(opIndex, op.paymaster, revertReason); + revert FailedOp(opIndex, paymaster, revertReason); } catch { - revert FailedOp(opIndex, op.paymaster, ""); + revert FailedOp(opIndex, paymaster, ""); } } } - function _validatePrepayment(uint opIndex, UserOperation calldata userOp, bytes32 requestId) private returns (uint prefund, PaymentMode paymentMode, bytes memory context){ + /** + * validate wallet and paymaster (if defined). + * also make sure total validation doesn't exceed verificationGas + * this method is called off-chain (simulateValidation()) and on-chain (from handleOps) + */ + function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, bytes32 requestId) private returns (uint256 requiredPreFund, PaymentMode paymentMode, bytes memory context){ - uint preGas = gasleft(); - uint maxGasValues = userOp.preVerificationGas | userOp.verificationGas | + uint256 preGas = gasleft(); + uint256 maxGasValues = userOp.preVerificationGas | userOp.verificationGas | userOp.callGas | userOp.maxFeePerGas | userOp.maxPriorityFeePerGas; - require(maxGasValues < type(uint120).max, "gas values overflow"); - uint gasUsedByValidateUserOp; - uint requiredPreFund; + require(maxGasValues <= type(uint120).max, "gas values overflow"); + uint256 gasUsedByValidateWalletPrepayment; (requiredPreFund, paymentMode) = _getPaymentInfo(userOp); - (gasUsedByValidateUserOp, prefund) = _validateWalletPrepayment(opIndex, userOp, requestId, requiredPreFund, paymentMode); + (gasUsedByValidateWalletPrepayment) = _validateWalletPrepayment(opIndex, userOp, requestId, requiredPreFund, paymentMode); - //a "marker" where wallet opcode validation is done, by paymaster opcode validation is about to start + //a "marker" where wallet opcode validation is done and paymaster opcode validation is about to start // (used only by off-chain simulateValidation) - uint marker = block.number; + uint256 marker = block.number; (marker); - if (paymentMode == PaymentMode.paymasterStake) { - (context) = _validatePaymasterPrepayment(opIndex, userOp, requestId, requiredPreFund, gasUsedByValidateUserOp); + if (paymentMode == PaymentMode.paymasterDeposit) { + (context) = _validatePaymasterPrepayment(opIndex, userOp, requestId, requiredPreFund, gasUsedByValidateWalletPrepayment); } else { context = ""; } unchecked { - uint gasUsed = preGas - gasleft(); + uint256 gasUsed = preGas - gasleft(); if (userOp.verificationGas < gasUsed) { revert FailedOp(opIndex, userOp.paymaster, "Used more than verificationGas"); @@ -313,45 +338,71 @@ contract EntryPoint is StakeManager { } } - function handlePostOp(uint opIndex, IPaymaster.PostOpMode mode, UserOperation calldata op, UserOpInfo memory opInfo, bytes memory context, uint actualGas) private returns (uint actualGasCost) { - uint preGas = gasleft(); - uint gasPrice = UserOperationLib.gasPrice(op); + /** + * process post-operation. + * called just after the callData is executed. + * if a paymaster is defined and its validation returned a non-empty context, its postOp is called. + * the excess amount is refunded to the wallet (or paymaster - if it is was used in the request) + * @param opIndex index in the batch + * @param mode - whether is called from innerHandleOp, or outside (postOpReverted) + * @param op the user operation + * @param opInfo info collected during validation + * @param context the context returned in validatePaymasterUserOp + * @param actualGas the gas used so far by this user operation + */ + function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOperation calldata op, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) { + uint256 preGas = gasleft(); + uint256 gasPrice = UserOperationLib.gasPrice(op); unchecked { - actualGasCost = actualGas * gasPrice; - if (opInfo.paymentMode != PaymentMode.paymasterStake) { - if (opInfo.prefund < actualGasCost) { - revert ("wallet prefund below actualGasCost"); - } - uint refund = opInfo.prefund - actualGasCost; - internalIncrementDeposit(op.getSender(), refund); + address refundAddress; + + address paymaster = op.paymaster; + if (paymaster == address(0)) { + refundAddress = op.getSender(); } else { + refundAddress = paymaster; if (context.length > 0) { + actualGasCost = actualGas * gasPrice; if (mode != IPaymaster.PostOpMode.postOpReverted) { - IPaymaster(op.paymaster).postOp{gas : op.verificationGas}(mode, context, actualGasCost); + IPaymaster(paymaster).postOp{gas : op.verificationGas}(mode, context, actualGasCost); } else { - try IPaymaster(op.paymaster).postOp{gas : op.verificationGas}(mode, context, actualGasCost) {} + // solhint-disable-next-line no-empty-blocks + try IPaymaster(paymaster).postOp{gas : op.verificationGas}(mode, context, actualGasCost) {} catch Error(string memory reason) { - revert FailedOp(opIndex, op.paymaster, reason); + revert FailedOp(opIndex, paymaster, reason); } catch { - revert FailedOp(opIndex, op.paymaster, "postOp revert"); + revert FailedOp(opIndex, paymaster, "postOp revert"); } } } - //paymaster pays for full gas, including for postOp - actualGas += preGas - gasleft(); - actualGasCost = actualGas * gasPrice; - //paymaster balance known to be high enough, and to be locked for this block - internalDecrementDeposit(op.paymaster, actualGasCost); } + actualGas += preGas - gasleft(); + actualGasCost = actualGas * gasPrice; + if (opInfo.prefund < actualGasCost) { + revert FailedOp(opIndex, paymaster, "prefund below actualGasCost"); + } + uint refund = opInfo.prefund - actualGasCost; + internalIncrementDeposit(refundAddress, refund); bool success = mode == IPaymaster.PostOpMode.opSucceeded; emit UserOperationEvent(opInfo.requestId, op.getSender(), op.paymaster, op.nonce, actualGasCost, gasPrice, success); } // unchecked } + /** + * return the storage cells used internally by the EntryPoint for this sender address. + * During `simulateValidation`, allow these storage cells to be accessed + * (that is, a wallet/paymaster are allowed to access their own deposit balance on the + * EntryPoint's storage, but no other account) + */ + function getSenderStorage(address sender) external view returns (uint256[] memory senderStorageCells) { + uint256 cell; + DepositInfo storage info = deposits[sender]; - function isPaymasterStaked(address paymaster, uint stake) public view returns (bool) { - return isStaked(paymaster, stake, unstakeDelaySec); + assembly { + cell := info.slot + } + senderStorageCells = new uint256[](1); + senderStorageCells[0] = cell; } -} - +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/StakeManager.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/StakeManager.sol index 23bd93c8c..48a4155bf 100644 --- a/packages/ethers-lib/scw-contracts/references/aa-4337/StakeManager.sol +++ b/packages/ethers-lib/scw-contracts/references/aa-4337/StakeManager.sol @@ -1,70 +1,101 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.0; -import "hardhat/console.sol"; - +/* solhint-disable avoid-low-level-calls */ +/* solhint-disable not-rely-on-time */ /** - * manage deposit of sender or paymaster, to pay for gas. - * paymaster must stake some of the deposit. + * manage deposits and stakes. + * deposit is just a balance used to pay for UserOperations (either by a paymaster or a wallet) + * stake is value locked for at least "unstakeDelay" by a paymaster. */ -contract StakeManager { +abstract contract StakeManager { - /// minimum number of blocks to after 'unlock' before amount can be withdrawn. + /** + * minimum time (in seconds) required to lock a paymaster stake before it can be withdraw. + */ uint32 immutable public unstakeDelaySec; - constructor(uint32 _unstakeDelaySec) { + /** + * minimum value required to stake for a paymaster + */ + uint256 immutable public paymasterStake; + + constructor(uint256 _paymasterStake, uint32 _unstakeDelaySec) { unstakeDelaySec = _unstakeDelaySec; + paymasterStake = _paymasterStake; } event Deposited( address indexed account, - uint256 totalDeposit, - uint256 unstakeDelaySec + uint256 totalDeposit ); + event Withdrawn( + address indexed account, + address withdrawAddress, + uint256 amount + ); /// Emitted once a stake is scheduled for withdrawal - event DepositUnstaked( + event StakeLocked( address indexed account, + uint256 totalStaked, uint256 withdrawTime ); - event Withdrawn( + /// Emitted once a stake is scheduled for withdrawal + event StakeUnlocked( + address indexed account, + uint256 withdrawTime + ); + + event StakeWithdrawn( address indexed account, address withdrawAddress, - uint256 withdrawAmount + uint256 amount ); - /// @param amount of ether deposited for this account - /// @param unstakeDelaySec - time the deposit is locked, after calling unlock (or zero if deposit is not locked) - /// @param withdrawTime - first block timestamp where 'withdrawTo' will be callable, or zero if not locked + /** + * @param deposit the account's deposit + * @param staked true if this account is staked as a paymaster + * @param stake actual amount of ether staked for this paymaster. must be above paymasterStake + * @param unstakeDelaySec minimum delay to withdraw the stake. must be above the global unstakeDelaySec + * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked + * @dev sizes were chosen so that (deposit,staked) fit into one cell (used during handleOps) + * and the rest fit into a 2nd cell. + * 112 bit allows for 2^15 eth + * 64 bit for full timestamp + * 32 bit allow 150 years for unstake delay + */ struct DepositInfo { - uint112 amount; + uint112 deposit; + bool staked; + uint112 stake; uint32 unstakeDelaySec; uint64 withdrawTime; } - /// maps accounts to their deposits + /// maps paymaster to their deposits and stakes mapping(address => DepositInfo) public deposits; - function getDepositInfo(address account) external view returns (DepositInfo memory info) { + function getDepositInfo(address account) public view returns (DepositInfo memory info) { return deposits[account]; } - function balanceOf(address account) public view returns (uint) { - return deposits[account].amount; + /// return the deposit (for gas payment) of the account + function balanceOf(address account) public view returns (uint256) { + return deposits[account].deposit; } receive() external payable { depositTo(msg.sender); } - function internalIncrementDeposit(address account, uint amount) internal { - deposits[account].amount += uint112(amount); - } - - function internalDecrementDeposit(address account, uint amount) internal { - deposits[account].amount -= uint112(amount); + function internalIncrementDeposit(address account, uint256 amount) internal { + DepositInfo storage info = deposits[account]; + uint256 newAmount = info.deposit + amount; + require(newAmount <= type(uint112).max, "deposit overflow"); + info.deposit = uint112(newAmount); } /** @@ -73,73 +104,78 @@ contract StakeManager { function depositTo(address account) public payable { internalIncrementDeposit(account, msg.value); DepositInfo storage info = deposits[account]; - emit Deposited(msg.sender, info.amount, info.unstakeDelaySec); + emit Deposited(account, info.deposit); } /** - * stake the account's deposit. - * any pending unstakeDeposit is first cancelled. - * can also set (or increase) the deposit with call. - * @param _unstakeDelaySec the new lock time before the deposit can be withdrawn. + * add to the account's stake - amount and delay + * any pending unstake is first cancelled. + * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn. */ - function addStakeTo(address account, uint32 _unstakeDelaySec) public payable { - DepositInfo storage info = deposits[account]; + function addStake(uint32 _unstakeDelaySec) public payable { + DepositInfo storage info = deposits[msg.sender]; + require(_unstakeDelaySec >= unstakeDelaySec, "unstake delay too low"); require(_unstakeDelaySec >= info.unstakeDelaySec, "cannot decrease unstake time"); - uint112 amount = deposits[msg.sender].amount + uint112(msg.value); - deposits[account] = DepositInfo( - amount, + uint256 stake = info.stake + msg.value; + require(stake >= paymasterStake, "stake value too low"); + require(stake < type(uint112).max, "stake overflow"); + deposits[msg.sender] = DepositInfo( + info.deposit, + true, + uint112(stake), _unstakeDelaySec, - 0); - emit Deposited(account, amount, _unstakeDelaySec); + 0 + ); + emit StakeLocked(msg.sender, stake, _unstakeDelaySec); } /** - * attempt to unstake the deposit. - * the value can be withdrawn (using withdrawTo) after the unstake delay. + * attempt to unlock the stake. + * the value can be withdrawn (using withdrawStake) after the unstake delay. */ - function unstakeDeposit() external { + function unlockStake() external { DepositInfo storage info = deposits[msg.sender]; - require(info.withdrawTime == 0, "already unstaking"); require(info.unstakeDelaySec != 0, "not staked"); + require(info.staked, "already unstaking"); uint64 withdrawTime = uint64(block.timestamp) + info.unstakeDelaySec; info.withdrawTime = withdrawTime; - emit DepositUnstaked(msg.sender, withdrawTime); + info.staked = false; + emit StakeUnlocked(msg.sender, withdrawTime); } + /** - * withdraw from the deposit. - * will fail if the deposit is already staked or too low. - * after a paymaster unlocks and withdraws some of the value, it must call addStake() to stake the value again. + * withdraw from the (unlocked) stake. + * must first call unlockStake and wait for the unstakeDelay to pass * @param withdrawAddress the address to send withdrawn value. - * @param withdrawAmount the amount to withdraw. */ - function withdrawTo(address payable withdrawAddress, uint withdrawAmount) external { - DepositInfo memory info = deposits[msg.sender]; - if (info.unstakeDelaySec != 0) { - require(info.withdrawTime > 0, "must call unstakeDeposit() first"); - require(info.withdrawTime <= block.timestamp, "Withdrawal is not due"); - } - require(withdrawAmount <= info.amount, "Withdraw amount too large"); - - // store the remaining value, with stake info cleared. - deposits[msg.sender] = DepositInfo( - info.amount - uint112(withdrawAmount), - 0, - 0); - withdrawAddress.transfer(withdrawAmount); - emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount); + function withdrawStake(address payable withdrawAddress) external { + require(withdrawAddress != address(0), "Invalid withdraw address"); + DepositInfo storage info = deposits[msg.sender]; + uint256 stake = info.stake; + require(stake > 0, "No stake to withdraw"); + require(info.withdrawTime > 0, "must call unlockStake() first"); + require(info.withdrawTime <= block.timestamp, "Stake withdrawal is not due"); + info.unstakeDelaySec = 0; + info.withdrawTime = 0; + info.stake = 0; + emit StakeWithdrawn(msg.sender, withdrawAddress, stake); + (bool success,) = withdrawAddress.call{value : stake}(""); + require(success, "failed to withdraw stake"); } /** - * check if the given account is staked and didn't unlock it yet. - * @param account the account (paymaster) to check - * @param requiredStake the minimum deposit - * @param requiredDelaySec the minimum required stake time. + * withdraw from the deposit. + * @param withdrawAddress the address to send withdrawn value. + * @param withdrawAmount the amount to withdraw. */ - function isStaked(address account, uint requiredStake, uint requiredDelaySec) public view returns (bool) { - DepositInfo memory info = deposits[account]; - return info.amount >= requiredStake && - info.unstakeDelaySec >= requiredDelaySec && - info.withdrawTime == 0; + function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external { + require(withdrawAddress != address(0), "Invalid withdraw address"); + DepositInfo memory info = deposits[msg.sender]; + require(withdrawAmount <= info.deposit, "Withdraw amount too large"); + info.deposit = uint112(info.deposit - withdrawAmount); + emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount); + (bool success,) = withdrawAddress.call{value : withdrawAmount}(""); + require(success, "failed to withdraw"); } } diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol index a787e73a1..6cf0a8c61 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol @@ -8,6 +8,7 @@ pragma solidity ^0.8.0; import "./libs/LibAddress.sol"; import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "./IWallet.sol"; import "./common/Singleton.sol"; import "./storage/WalletStorage.sol"; @@ -18,7 +19,6 @@ import "./common/SignatureDecoder.sol"; import "./common/SecuredTokenTransfer.sol"; import "./interfaces/ISignatureValidator.sol"; import "./interfaces/IERC165.sol"; -import "./libs/SafeMath.sol"; import "./libs/ECDSA.sol"; // Hooks not made a base yet @@ -36,7 +36,6 @@ contract SmartWallet is { using ECDSA for bytes32; using LibAddress for address; - using SafeMath for uint256; event ImplementationUpdated(address newImplementation); event ExecutionFailure(bytes32 txHash, uint256 payment); @@ -70,10 +69,6 @@ contract SmartWallet is emit EOAChanged(address(this),owner,_newOwner); } - function getOwner() public view returns(address){ - return owner; - } - /** * @notice Updates the implementation of the base wallet * @param _implementation New wallet implementation @@ -123,12 +118,21 @@ contract SmartWallet is function init(address _owner, address _entryPoint, address _handler) public initializer { require(owner == address(0), "Already initialized"); require(entryPoint == address(0), "Already initialized"); + require(_owner != address(0),"Invalid owner"); + require(_entryPoint != address(0), "Invalid Entrypoint"); owner = _owner; entryPoint = _entryPoint; if (_handler != address(0)) internalSetFallbackHandler(_handler); setupModules(address(0), bytes("")); } + /** + * @dev Returns the largest of two numbers. + */ + function max(uint256 a, uint256 b) internal pure returns (uint256) { + return a >= b ? a : b; + } + // @review 2D nonces and args as default batchId 0 is always used // TODO : Update description // TODO : Add batchId and update in test cases, utils etc @@ -167,14 +171,14 @@ contract SmartWallet is // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500) // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150 - require(gasleft() >= ((_tx.targetTxGas * 64) / 63).max(_tx.targetTxGas + 2500) + 500, "BSA010"); + require(gasleft() >= max((_tx.targetTxGas * 64) / 63,_tx.targetTxGas + 2500) + 500, "BSA010"); // Use scope here to limit variable lifetime and prevent `stack too deep` errors { uint256 gasUsed = gasleft(); // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than targetTxGas) // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than targetTxGas success = execute(_tx.to, _tx.value, _tx.data, _tx.operation, refundInfo.gasPrice == 0 ? (gasleft() - 2500) : _tx.targetTxGas); - gasUsed = gasUsed.sub(gasleft()); + gasUsed = gasUsed - gasleft(); // If no targetTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert require(success || _tx.targetTxGas != 0 || refundInfo.gasPrice != 0, "BSA013"); @@ -199,10 +203,12 @@ contract SmartWallet is address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver; if (gasToken == address(0)) { // For ETH we will only adjust the gas price to not be higher than the actual used gas price - payment = gasUsed.add(baseGas).mul(gasPrice < tx.gasprice ? gasPrice : tx.gasprice); - require(receiver.send(payment), "BSA011"); + payment = (gasUsed + baseGas) * (gasPrice < tx.gasprice ? gasPrice : tx.gasprice); + // Review: low level call value vs transfer + (bool success,) = receiver.call{value: payment}(""); + require(success, "BSA011"); } else { - payment = gasUsed.add(baseGas).mul(gasPrice); + payment = (gasUsed + baseGas) * (gasPrice); require(transferToken(gasToken, receiver, payment), "BSA012"); } } @@ -234,10 +240,10 @@ contract SmartWallet is // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes // This check is not completely accurate, since it is possible that more signatures than the threshold are send. // Here we only check that the pointer is not pointing inside the part that is being processed - require(uint256(s) >= uint256(1).mul(65), "BSA021"); + require(uint256(s) >= uint256(1) * 65, "BSA021"); // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes) - require(uint256(s).add(32) <= signatures.length, "BSA022"); + require(uint256(s) + 32 <= signatures.length, "BSA022"); // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length uint256 contractSignatureLen; @@ -245,7 +251,7 @@ contract SmartWallet is assembly { contractSignatureLen := mload(add(add(signatures, s), 0x20)) } - require(uint256(s).add(32).add(contractSignatureLen) <= signatures.length, "BSA023"); + require(uint256(s) + 32 + contractSignatureLen <= signatures.length, "BSA023"); // Check signature bytes memory contractSignature; @@ -267,8 +273,31 @@ contract SmartWallet is } } + /// review necessity for this method for estimating execute call + /// @dev Allows to estimate a transaction. + /// This method is only meant for estimation purpose, therefore the call will always revert and encode the result in the revert data. + /// Since the `estimateGas` function includes refunds, call this method to get an estimated of the costs that are deducted from the safe with `execTransaction` + /// @param to Destination address of Safe transaction. + /// @param value Ether value of transaction. + /// @param data Data payload of transaction. + /// @param operation Operation type of transaction. + /// @return Estimate without refunds and overhead fees (base transaction and payload data gas costs). + function requiredTxGas( + address to, + uint256 value, + bytes calldata data, + Enum.Operation operation + ) external returns (uint256) { + uint256 startGas = gasleft(); + // We don't provide an error message here, as we use it to return the estimate + require(execute(to, value, data, operation, gasleft())); + uint256 requiredGas = startGas - gasleft(); + // Convert response to string and return via error message + revert(string(abi.encodePacked(requiredGas))); + } + - /// @dev Returns hash to be signed by owners. + /// @dev Returns hash to be signed by owner. /// @param to Destination address. /// @param value Ether value. /// @param data Data payload. @@ -340,13 +369,16 @@ contract SmartWallet is // Extra Utils + // Review: low level call value vs transfer // dest.transfer(amount); function transfer(address payable dest, uint amount) external onlyOwner { - dest.transfer(amount); + require(dest != address(0), "this action will burn your funds"); + (bool success,) = dest.call{value:amount}(""); + require(success,"transfer failed"); } function pullTokens(address token, address dest, uint256 amount) external onlyOwner { IERC20 tokenContract = IERC20(token); - tokenContract.transfer(dest, amount); + SafeERC20.safeTransfer(tokenContract, dest, amount); } function exec(address dest, uint value, bytes calldata func) external onlyOwner{ @@ -355,8 +387,11 @@ contract SmartWallet is function execBatch(address[] calldata dest, bytes[] calldata func) external onlyOwner{ require(dest.length == func.length, "wrong array lengths"); - for (uint i = 0; i < dest.length; i++) { + for (uint i = 0; i < dest.length;) { _call(dest[i], 0, func[i]); + unchecked { + ++i; + } } } @@ -385,19 +420,18 @@ contract SmartWallet is function validateUserOp(UserOperation calldata userOp, bytes32 requestId, uint requiredPrefund) external override { _requireFromEntryPoint(); _validateSignature(userOp, requestId); - _validateAndIncrementNonce(userOp); + //during construction, the "nonce" field hold the salt. + // if we assert it is zero, then we allow only a single wallet per owner. + if (userOp.initCode.length == 0) { + _validateAndUpdateNonce(userOp); + } _payPrefund(requiredPrefund); } // review nonce conflict with AA userOp nonce // userOp can omit nonce or have batchId as well! - function _validateAndIncrementNonce(UserOperation calldata userOp) internal { - //during construction, the "nonce" field hold the salt. - // if we assert it is zero, then we allow only a single wallet per owner. - if (userOp.initCode.length == 0) { - require(nonces[0]++ == userOp.nonce, "wallet: invalid nonce"); - } - // default batchId aka space 0 for any wallet + function _validateAndUpdateNonce(UserOperation calldata userOp) internal { + require(nonces[0]++ == userOp.nonce, "wallet: invalid nonce"); } function _payPrefund(uint requiredPrefund) internal { @@ -425,5 +459,9 @@ contract SmartWallet is function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7 } - + + // Review + // withdrawDepositTo + // addDeposit + // getDeposit } \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/WalletFactory.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/WalletFactory.sol index 6fc500603..988495ab8 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/WalletFactory.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/WalletFactory.sol @@ -14,6 +14,7 @@ contract WalletFactory { mapping (address => bool) public isWalletExist; constructor(address _baseImpl) { + require(_baseImpl != address(0), "base wallet address can not be zero"); _defaultImpl = _baseImpl; } diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SecuredTokenTransfer.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SecuredTokenTransfer.sol index c9d802fe6..d63853ef2 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SecuredTokenTransfer.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SecuredTokenTransfer.sol @@ -13,8 +13,7 @@ contract SecuredTokenTransfer { uint256 amount ) internal returns (bool transferred) { // 0xa9059cbb - keccack("transfer(address,uint256)") - // TODO - // Review for sig collision + // Review for sig collision and HAL-04 bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount); // solhint-disable-next-line no-inline-assembly assembly { diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/SafeMath.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/SafeMath.sol deleted file mode 100644 index d2b05c072..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/SafeMath.sol +++ /dev/null @@ -1,51 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -/** - * @dev Math operations with safety checks that revert on error - */ -library SafeMath { - /** - * @dev Multiplies two numbers, reverts on overflow. - */ - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - // Gas optimization: this is cheaper than requiring 'a' not being zero, but the - // benefit is lost if 'b' is also tested. - // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 - if (a == 0) { - return 0; - } - - uint256 c = a * b; - require(c / a == b); - - return c; - } - - /** - * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend). - */ - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - require(b <= a); - uint256 c = a - b; - - return c; - } - - /** - * @dev Adds two numbers, reverts on overflow. - */ - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - require(c >= a); - - return c; - } - - /** - * @dev Returns the largest of two numbers. - */ - function max(uint256 a, uint256 b) internal pure returns (uint256) { - return a >= b ? a : b; - } -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StakedTestToken.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StakedTestToken.sol new file mode 100644 index 000000000..bd9889f83 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StakedTestToken.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +contract StakedTestToken is ERC20 { + + address public STAKED_TOKEN; + + constructor (address _token) + ERC20("stTST", "StakedTestToken") { + STAKED_TOKEN = _token; + } + + function mint(address sender, uint amount) external { + _mint(sender, amount); + } + + function stake(address _for, uint amount) external { + IERC20(STAKED_TOKEN).transferFrom(msg.sender, address(this), amount); + _mint(_for, amount); + } +} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/utils/GasEstimator.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/utils/GasEstimator.sol new file mode 100644 index 000000000..6ac208a04 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/utils/GasEstimator.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + + +contract GasEstimator { + function estimate( + address _to, + bytes calldata _data + ) external returns (bool success, bytes memory result, uint256 gas) { + // solhint-disable + uint256 initialGas = gasleft(); + (success, result) = _to.call(_data); + gas = initialGas - gasleft(); + // solhint-enable + } +} \ No newline at end of file diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts index 4fd896bf4..0292f56ec 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts @@ -21,11 +21,6 @@ class EntryPointEthersContract implements EntryPointContract { return this.contract.getRequestId(userOperation) } - async handleOp(userOperation: UserOperation, beneficiary: string): Promise { - const resultSet = await this.contract.handleOp(userOperation, beneficiary) - return toTxResult(resultSet) - } - async handleOps( userOperations: UserOperation[], beneficiary: string @@ -37,10 +32,6 @@ class EntryPointEthersContract implements EntryPointContract { async getSenderAddress(initCode: string, salt: number): Promise { return this.contract.getSenderAddress(initCode, salt) } - - async isPaymasterStaked(address: string, stake: number): Promise { - return this.contract.isPaymasterStaked(address, stake) - } } export default EntryPointEthersContract diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts index 67ccea129..51a1291d5 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts @@ -32,7 +32,7 @@ class SmartWalletContractEthers implements SmartWalletContract { } async getOwner(): Promise { - return await this.contract.getOwner() + return await this.contract.owner() } async getVersion(): Promise { diff --git a/packages/smart-account/src/assets/SmartWallet.json b/packages/smart-account/src/assets/SmartWallet.json index d8489fbdb..b6665ac0d 100644 --- a/packages/smart-account/src/assets/SmartWallet.json +++ b/packages/smart-account/src/assets/SmartWallet.json @@ -1,14 +1,14 @@ { - "defaultAddress": "0xEAD2502dAe0b5731edE898Fd48Ea59C7f0dA0a05", + "defaultAddress": "0xcc5fBe9f7727Ee62688672C814819Cd9818B9c68", "released": true, "contractName": "SmartWallet", "version": "1.0.0", "networkAddresses": { - "1": "0xEAD2502dAe0b5731edE898Fd48Ea59C7f0dA0a05", - "4": "0xEAD2502dAe0b5731edE898Fd48Ea59C7f0dA0a05", - "5": "0xEAD2502dAe0b5731edE898Fd48Ea59C7f0dA0a05", - "42": "0xEAD2502dAe0b5731edE898Fd48Ea59C7f0dA0a05", - "100": "0xEAD2502dAe0b5731edE898Fd48Ea59C7f0dA0a05" + "1": "0xcc5fBe9f7727Ee62688672C814819Cd9818B9c68", + "4": "0xcc5fBe9f7727Ee62688672C814819Cd9818B9c68", + "5": "0xcc5fBe9f7727Ee62688672C814819Cd9818B9c68", + "42": "0xcc5fBe9f7727Ee62688672C814819Cd9818B9c68", + "100": "0xcc5fBe9f7727Ee62688672C814819Cd9818B9c68" }, "abi": [ { @@ -640,19 +640,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "getOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -717,45 +704,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "gasUsed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "name": "handlePaymentAndRevert", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { diff --git a/packages/smart-account/src/assets/WalletFactory.json b/packages/smart-account/src/assets/WalletFactory.json index 81aa5bdb3..ebaa8131f 100644 --- a/packages/smart-account/src/assets/WalletFactory.json +++ b/packages/smart-account/src/assets/WalletFactory.json @@ -1,17 +1,17 @@ { - "defaultAddress": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", + "defaultAddress": "0x2F712395a702e415a1f0E2a1C863301008D3441A", "released": true, "contractName": "WalletFactory", "version": "1.0.0", "networkAddresses": { - "1": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", - "4": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", - "5": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", - "42": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", - "88": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", - "100": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", - "246": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8", - "73799": "0x8Ee9613c83584306e36C0cd7bb4bA6B1a781edc8" + "1": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "4": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "5": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "42": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "88": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "100": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "246": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "73799": "0x2F712395a702e415a1f0E2a1C863301008D3441A" }, "abi": [ { diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index b04522716..51421cb7b 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -211,8 +211,8 @@ export const networks: Record = { }, [ChainId.RINKEBY]: { chainId: ChainId.RINKEBY, - entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', - fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', + entryPoint: '0x1D67cb5Db425bD6Bdf7472c44E6415c6B450Ae0B', + fallbackHandler: '0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4', name: 'rinkeby', title: 'Rinkeby', testnet: true, From fcb29e29b013db7d3dd65b5cafc4406075a40e94 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sun, 24 Jul 2022 03:42:37 +0530 Subject: [PATCH 0023/1247] fix for broken test + dev note --- packages/relayer/src/local-relayer.ts | 17 +- .../smart-account/src/assets/MultiSend.json | 37 ---- .../src/assets/WalletFactory.json | 161 -------------- .../src/assets/{SmartWallet.json => index.ts} | 205 +++++++++++++++++- packages/smart-account/src/types.ts | 20 +- .../src/utils/FetchContractsInfo.ts | 6 +- .../smart-account/tests/smartaccount.spec.ts | 14 +- 7 files changed, 249 insertions(+), 211 deletions(-) delete mode 100644 packages/smart-account/src/assets/MultiSend.json delete mode 100644 packages/smart-account/src/assets/WalletFactory.json rename packages/smart-account/src/assets/{SmartWallet.json => index.ts} (82%) diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index a5bf5bc98..1592cf574 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -21,10 +21,18 @@ export class LocalRelayer implements Relayer { if (!this.signer.provider) throw new Error("Signer must have a provider") } + // TODO + + // Review function arguments and return values + // Could get smartAccount instance + // Defines a type that takes config, context for SCW in play along with other details async deployWallet(factory:SmartWalletFactoryContract, context: SmartAccountContext, eoa:string, index:number = 0): Promise { - // TODO // Should check if already deployed - // if(!(await factory.isWalletExist())) throw new Error("Smart Account is Already Deployed") + const address = await factory.getAddressForCounterfactualWallet(eoa,index); + const isExist = await factory.isWalletExist(address); + if(isExist) { + throw new Error("Smart Account is Already Deployed") + } const walletDeployTxn = this.prepareWalletDeploy(factory, context, eoa,index); const tx = this.signer.sendTransaction({ ...walletDeployTxn, gasLimit: ethers.constants.Two.pow(24) }); return tx; @@ -63,9 +71,12 @@ export class LocalRelayer implements Relayer { return options }*/ + // Should make an object that takes config and context async relay(rawTx: RawTransactionType /*quote?: FeeQuote*/) : Promise { - // check if wallet if deployed + // check if wallet if deployed (needs wallet config) + // If not =>> preprendWalletDeploy + // Needs MultiSendCallOnly address from Context // @notice // We'd need multiSend instance then diff --git a/packages/smart-account/src/assets/MultiSend.json b/packages/smart-account/src/assets/MultiSend.json deleted file mode 100644 index 649829fae..000000000 --- a/packages/smart-account/src/assets/MultiSend.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "defaultAddress": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "released": true, - "contractName": "MultiSend", - "version": "1.0.0", - "networkAddresses": { - "1": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "4": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "5": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "42": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "88": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "100": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "246": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "73799": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD" - }, - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - } - ], - "name": "multiSend", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ] - } - \ No newline at end of file diff --git a/packages/smart-account/src/assets/WalletFactory.json b/packages/smart-account/src/assets/WalletFactory.json deleted file mode 100644 index ebaa8131f..000000000 --- a/packages/smart-account/src/assets/WalletFactory.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "defaultAddress": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "released": true, - "contractName": "WalletFactory", - "version": "1.0.0", - "networkAddresses": { - "1": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "4": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "5": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "42": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "88": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "100": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "246": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "73799": "0x2F712395a702e415a1f0E2a1C863301008D3441A" - }, - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_baseImpl", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_proxy", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "WalletCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_entryPoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_handler", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "deployCounterFactualWallet", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_entryPoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "name": "deployWallet", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAddressForCounterfactualWallet", - "outputs": [ - { - "internalType": "address", - "name": "_wallet", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isWalletExist", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ] - } - \ No newline at end of file diff --git a/packages/smart-account/src/assets/SmartWallet.json b/packages/smart-account/src/assets/index.ts similarity index 82% rename from packages/smart-account/src/assets/SmartWallet.json rename to packages/smart-account/src/assets/index.ts index b6665ac0d..b0d6e1c3c 100644 --- a/packages/smart-account/src/assets/SmartWallet.json +++ b/packages/smart-account/src/assets/index.ts @@ -1,4 +1,41 @@ -{ +export const MultiSend = { + "defaultAddress": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "released": true, + "contractName": "MultiSend", + "version": "1.0.0", + "networkAddresses": { + "1": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "4": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "5": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "42": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "88": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "100": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "246": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "73799": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD" + }, + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + } + ], + "name": "multiSend", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ] + } + + export const SmartWallet = { "defaultAddress": "0xcc5fBe9f7727Ee62688672C814819Cd9818B9c68", "released": true, "contractName": "SmartWallet", @@ -1011,4 +1048,168 @@ } ] } - \ No newline at end of file + + + export const WalletFactory = { + "defaultAddress": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "released": true, + "contractName": "WalletFactory", + "version": "1.0.0", + "networkAddresses": { + "1": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "4": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "5": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "42": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "88": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "100": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "246": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "73799": "0x2F712395a702e415a1f0E2a1C863301008D3441A" + }, + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_baseImpl", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_proxy", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_implementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "WalletCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_entryPoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_handler", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "deployCounterFactualWallet", + "outputs": [ + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_entryPoint", + "type": "address" + }, + { + "internalType": "address", + "name": "_handler", + "type": "address" + } + ], + "name": "deployWallet", + "outputs": [ + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "getAddressForCounterfactualWallet", + "outputs": [ + { + "internalType": "address", + "name": "_wallet", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isWalletExist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + + + diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 51421cb7b..4d8e45d60 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -106,7 +106,8 @@ export enum ChainId { ROPSTEN = 3, RINKEBY = 4, GOERLI = 5, - KOVAN = 42 + KOVAN = 42, + HARDHAT = 31337 //Temp } export interface NetworkConfig { entryPoint: string // abstract account contract @@ -253,5 +254,20 @@ export const networks: Record = { api: 'https://api.kovan.etherscan.io/', }, providerUrl: 'https://kovan.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' - } + }, + [ChainId.HARDHAT]: { + chainId: ChainId.ROPSTEN, + entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', + fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', + name: 'ropsten', + title: 'Ropsten', + testnet: true, + blockExplorer: { + //name: 'Etherscan (Ropsten)', + address: 'https://ropsten.etherscan.io/address', + txHash: 'https://ropsten.etherscan.io/tx', + api: 'https://api.ropsten.etherscan.io/' + }, + providerUrl: 'https://ropsten.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' + }, } diff --git a/packages/smart-account/src/utils/FetchContractsInfo.ts b/packages/smart-account/src/utils/FetchContractsInfo.ts index 9366be8be..0a96ebf9d 100644 --- a/packages/smart-account/src/utils/FetchContractsInfo.ts +++ b/packages/smart-account/src/utils/FetchContractsInfo.ts @@ -1,7 +1,5 @@ import { SmartWalletContract, SmartWalletFactoryContract, MultiSendContract } from '@biconomy-sdk/core-types' -import SmartWalletFactory from '../assets/WalletFactory.json' -import SmartWallet from '../assets/SmartWallet.json' -import MultiSend from '../assets/MultiSend.json' +import { WalletFactory, SmartWallet, MultiSend } from '../assets/index' import EthersAdapter from '@biconomy-sdk/ethers-lib' @@ -11,7 +9,7 @@ export function getSmartWalletFactoryContract( ): SmartWalletFactoryContract { return ethAdapter.getSmartWalletFactoryContract({ chainId, - singletonDeployment: SmartWalletFactory + singletonDeployment: SmartWallet }) } export function getMultiSendContract( diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 6582c2621..88d0a674e 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -54,11 +54,20 @@ describe('Wallet integration', function () { ROPSTEN = 3, RINKEBY = 4, GOERLI = 5, - KOVAN = 42 + KOVAN = 42, + HARDHAT = 31337 } const userAddress = await ethnode.signer?.getAddress() || ''; + console.log(ethnode.provider); + const eoaSigner = ethnode.provider?.getSigner() + + if(eoaSigner) { + const eoa = await eoaSigner.getAddress(); + console.log('eoa ', eoa); + } + const wallet = new SmartAccount({ // owner: userAddress, activeNetworkId: ChainId.RINKEBY, @@ -67,7 +76,8 @@ describe('Wallet integration', function () { backend_url: "http://localhost:3000/v1" }); - + // I'd have to deploy the contracts and set specs + // const smartAccount = await wallet.init(); }) }) }) From 6af1ce9e4fa06dcc08e9054e8d36a018a84d0705 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 25 Jul 2022 13:43:41 +0530 Subject: [PATCH 0024/1247] fix bug with factory address --- packages/smart-account/src/utils/FetchContractsInfo.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/smart-account/src/utils/FetchContractsInfo.ts b/packages/smart-account/src/utils/FetchContractsInfo.ts index 0a96ebf9d..fcb321451 100644 --- a/packages/smart-account/src/utils/FetchContractsInfo.ts +++ b/packages/smart-account/src/utils/FetchContractsInfo.ts @@ -9,7 +9,7 @@ export function getSmartWalletFactoryContract( ): SmartWalletFactoryContract { return ethAdapter.getSmartWalletFactoryContract({ chainId, - singletonDeployment: SmartWallet + singletonDeployment: WalletFactory }) } export function getMultiSendContract( From 2ea6ebe4ea6ceb79a20f5a6e4a80937375aa5e99 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 25 Jul 2022 19:45:07 +0530 Subject: [PATCH 0025/1247] personal sign fix --- packages/smart-account/src/SmartAccount.ts | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index dece2ec11..c40a81985 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -19,7 +19,7 @@ import { TransactionRequest, TransactionResponse } from '@ethersproject/provider import SafeServiceClient from '@biconomy-sdk/node-client'; import { Web3Provider } from '@ethersproject/providers' import { Relayer, LocalRelayer } from '@biconomy-sdk/relayer'; -import { WalletTransaction, ExecTransaction, FeeRefund, SmartAccountTransaction, getSignatureParameters } from '@biconomy-sdk/transactions'; +import { WalletTransaction, ExecTransaction, FeeRefund, SmartAccountTransaction, getSignatureParameters, EIP712_WALLET_TX_TYPE } from '@biconomy-sdk/transactions'; class SmartAccount { // { ethAdapter } is a window that gave access to all the Implemented function of it @@ -172,10 +172,15 @@ class SmartAccount { refundReceiver: tx.refundReceiver, }; + const hash:string = ethers.utils._TypedDataEncoder.hash( + { verifyingContract: this.address, chainId }, + EIP712_WALLET_TX_TYPE, + tx + ); + // going to go with personal sign - const transactionHash:string = await this.smartAccount(chainId).getTransactionHash(tx); - let signature:string = await this.ethersAdapter(chainId).getSigner().signMessage(ethers.utils.arrayify(transactionHash)); + let signature:string = await this.ethersAdapter(chainId).getSigner().signMessage(ethers.utils.arrayify(hash)); let { r, s, v } = getSignatureParameters(signature); v += 4; let vNew = ethers.BigNumber.from(v).toHexString(); @@ -199,11 +204,6 @@ class SmartAccount { signature ); - console.log("exec data"); - console.log(data); - - console.log('raw tx'); - console.log(rawTx); rawTx.to = this.address; rawTx.data = data; @@ -215,7 +215,9 @@ class SmartAccount { // This transaction is without fee refund // We need to have identifiers for these txns async createSmartAccountTransaction(transaction: Transaction, batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - const nonce = (await this.smartAccount(chainId).getNonce(batchId)).toNumber(); + let walletContract = this.smartAccount(chainId).getContract(); + walletContract = walletContract.attach(this.address); + const nonce = (await walletContract.getNonce(batchId)).toNumber(); console.log('nonce: ', nonce); return { to: transaction.to, From 9d8815c2d1dc7c71af108ca872db13f19d325e21 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 27 Jul 2022 00:52:05 +0530 Subject: [PATCH 0026/1247] dev notes + init config updates + types --- packages/ethers-lib/src/EthersAdapter.ts | 21 +- .../src/contracts/contractInstancesEthers.ts | 16 +- packages/node-client/src/SafeServiceClient.ts | 4 +- .../src/types/safeTransactionServiceTypes.ts | 54 +-- packages/relayer/src/local-relayer.ts | 1 - packages/smart-account/package.json | 1 + packages/smart-account/src/SmartAccount.ts | 106 +++--- packages/smart-account/src/assets/index.ts | 35 +- packages/smart-account/src/types.ts | 32 +- .../smart-account/tests/smartaccount.spec.ts | 25 +- packages/smart-account/tests/utils/deploy.ts | 27 ++ packages/smart-account/tests/utils/index.ts | 5 + packages/transactions/src/execution.ts | 345 ++++++++++++++++++ packages/transactions/src/index.ts | 4 +- packages/transactions/src/multisend.ts | 35 ++ packages/transactions/src/types.ts | 59 --- 16 files changed, 591 insertions(+), 179 deletions(-) create mode 100644 packages/smart-account/tests/utils/deploy.ts create mode 100644 packages/transactions/src/execution.ts create mode 100644 packages/transactions/src/multisend.ts diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index dc4e17b6d..25e7bea45 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -1,7 +1,7 @@ import { TransactionResponse } from '@ethersproject/abstract-provider' import { Signer } from '@ethersproject/abstract-signer' import { BigNumber } from '@ethersproject/bignumber' -import { Provider } from '@ethersproject/providers' +import { Provider, JsonRpcProvider } from '@ethersproject/providers' import { Eip3770Address, EthAdapter, @@ -26,14 +26,16 @@ export interface EthersAdapterConfig { ethers: Ethers /** signer - Ethers signer */ signer: Signer + + provider: JsonRpcProvider } class EthersAdapter implements EthAdapter { #ethers: Ethers #signer: Signer - #provider: Provider + #provider: JsonRpcProvider - constructor({ ethers, signer }: EthersAdapterConfig) { + constructor({ ethers, signer, provider }: EthersAdapterConfig) { if (!ethers) { throw new Error('ethers property missing from options') } @@ -41,11 +43,13 @@ class EthersAdapter implements EthAdapter { throw new Error('Signer must be connected to a provider') } this.#signer = signer - this.#provider = signer.provider + this.#provider = provider + //this.#provider = signer.provider this.#ethers = ethers } - getProvider(): Provider { + // Review + getProvider(): JsonRpcProvider { return this.#provider } @@ -71,7 +75,7 @@ class EthersAdapter implements EthAdapter { if (!contractAddress) { throw new Error('Invalid Safe Proxy contract address') } - return getSmartWalletContractInstance(contractAddress, this.#signer) + return getSmartWalletContractInstance(contractAddress, this.#provider) } getMultiSendContract({ @@ -82,7 +86,7 @@ class EthersAdapter implements EthAdapter { if (!contractAddress) { throw new Error('Invalid Multi Send contract address') } - return getMultiSendContractInstance(contractAddress, this.#signer) + return getMultiSendContractInstance(contractAddress, this.#provider) } getSmartWalletFactoryContract({ @@ -93,7 +97,7 @@ class EthersAdapter implements EthAdapter { if (!contractAddress) { throw new Error('Invalid Safe Proxy Factory contract address') } - return getSmartWalletFactoryContractInstance(contractAddress, this.#signer) + return getSmartWalletFactoryContractInstance(contractAddress, this.#provider) } async getContractCode(address: string): Promise { @@ -118,6 +122,7 @@ class EthersAdapter implements EthAdapter { return this.#signer.signMessage(messageArray) } + // Review async estimateGas(transaction: EthAdapterTransaction): Promise { return (await this.#provider.estimateGas(transaction)).toNumber() } diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index 93ce459e6..97b1d196e 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -5,27 +5,31 @@ import { SmartWalletFactoryContract__factory as SmartWalletFactoryContract } fro import SmartWalletContractEthers from './SmartWallet/SmartWalletContractEthers' import MultiSendEthersContract from './MultiSend/MultiSendEthersContract' import SmartWalletFacoryContractEthers from './SmartWalletFactory/SmartWalletProxyFactoryEthersContract' +import { JsonRpcProvider } from '@ethersproject/providers' export function getSmartWalletContractInstance( contractAddress: string, - signer: Signer + // signer: Signer + provider: JsonRpcProvider ): SmartWalletContractEthers { - let safeContract = SmartWalletContract.connect(contractAddress, signer) + let safeContract = SmartWalletContract.connect(contractAddress, provider) return new SmartWalletContractEthers(safeContract) } +// Review export function getMultiSendContractInstance( contractAddress: string, - signer: Signer + // signer: Signer + provider: JsonRpcProvider ): MultiSendEthersContract { - let multiSendContract = MultiSendContract.connect(contractAddress, signer) + let multiSendContract = MultiSendContract.connect(contractAddress, provider) return new MultiSendEthersContract(multiSendContract) } export function getSmartWalletFactoryContractInstance( contractAddress: string, - signer: Signer + provider: JsonRpcProvider ): SmartWalletFacoryContractEthers { - let walletFactoryContract = SmartWalletFactoryContract.connect(contractAddress, signer) + let walletFactoryContract = SmartWalletFactoryContract.connect(contractAddress, provider) return new SmartWalletFacoryContractEthers(walletFactoryContract) } diff --git a/packages/node-client/src/SafeServiceClient.ts b/packages/node-client/src/SafeServiceClient.ts index 70e866de4..1b9c27755 100644 --- a/packages/node-client/src/SafeServiceClient.ts +++ b/packages/node-client/src/SafeServiceClient.ts @@ -30,7 +30,7 @@ import { TokenInfoListResponse, TokenInfoResponse, TransferListResponse, - ChainConfig + ChainConfigResponse } from './types/safeTransactionServiceTypes' import { getTxServiceBaseUrl } from './utils' import { HttpMethod, sendRequest } from './utils/httpRequests' @@ -121,7 +121,7 @@ class SafeServiceClient implements SafeTransactionService { * * @returns The list of Network info */ - async getChainInfo(): Promise> { + async getChainInfo(): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/chains/`, method: HttpMethod.Get diff --git a/packages/node-client/src/types/safeTransactionServiceTypes.ts b/packages/node-client/src/types/safeTransactionServiceTypes.ts index b313eb5f4..aa0b23b8c 100644 --- a/packages/node-client/src/types/safeTransactionServiceTypes.ts +++ b/packages/node-client/src/types/safeTransactionServiceTypes.ts @@ -19,31 +19,8 @@ export type SmartAccountInfoResponse = { } } -export type BlockExplorerConfig = { - address: string - txHash: string - api: string -} - -export type TokenInfo = { - id: number - name: string - symbol: string - blockChain: number - ercType?: string - decimals: number - logoUri: string - address: string - isNativeToken: boolean - isEnabled: boolean - cmcId: number //Verify - price: number //Verify - createdAt: Date - updatedAt: Date -} - export type ChainConfig = { - chain_id: number + chainId: number name: string symbol: string isL2: boolean @@ -87,6 +64,35 @@ export type OwnerResponse = { safes: string[] } +export type BlockExplorerConfig = { + address: string + txHash: string + api: string +} + +export type TokenInfo = { + id: number + name: string + symbol: string + blockChain: number + ercType?: string + decimals: number + logoUri: string + address: string + isNativeToken: boolean + isEnabled: boolean + cmcId: number //Verify + price: number //Verify + createdAt: Date + updatedAt: Date +} + +export type ChainConfigResponse = { + message: string + code: number + data: ChainConfig[] +} + export type SmartAccountCreationInfoResponse = { readonly created: string readonly creator: string diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index 1592cf574..813a87d56 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -22,7 +22,6 @@ export class LocalRelayer implements Relayer { } // TODO - // Review function arguments and return values // Could get smartAccount instance // Defines a type that takes config, context for SCW in play along with other details diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index bbc47f306..b12a52725 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -49,6 +49,7 @@ "@biconomy-sdk/ethers-lib": "*", "@biconomy-sdk/node-client": "*", "@biconomy-sdk/transactions": "*", + "@biconomy-sdk/relayer": "*", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index c40a81985..8c540c637 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -1,5 +1,5 @@ -import { SmartAccountConfig, networks, NetworkConfig, ChainId, ChainConfig, - SmartAccountState, SmartAccountContext, Transaction, ZERO_ADDRESS } from './types' +import { SmartAccountConfig, networks, ChainId, ChainConfig, + SmartAccountState, SmartAccountContext, Transaction, ZERO_ADDRESS, ChainConfigResponse } from './types' import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer' import EthersAdapter from '@biconomy-sdk/ethers-lib' import { ethers, providers, Wallet } from 'ethers' @@ -15,7 +15,7 @@ import { TransactionResult, RawTransactionType } from '@biconomy-sdk/core-types' -import { TransactionRequest, TransactionResponse } from '@ethersproject/providers'; +import { JsonRpcSigner, TransactionRequest, TransactionResponse } from '@ethersproject/providers'; import SafeServiceClient from '@biconomy-sdk/node-client'; import { Web3Provider } from '@ethersproject/providers' import { Relayer, LocalRelayer } from '@biconomy-sdk/relayer'; @@ -33,7 +33,12 @@ class SmartAccount { // hold supported network info supportedNetworkIds!: ChainId[] - providers!: Web3Provider[] + chainConfig!: ChainConfig[] + + // providers!: Web3Provider[] + provider!: Web3Provider + + signer!: JsonRpcSigner nodeClient!: SafeServiceClient @@ -51,44 +56,50 @@ class SmartAccount { // Review :: ToDo // To be able to passs provider : WalletProviderLike - constructor(config: SmartAccountConfig) { + // in mexa sdk we have ExternalProvider + constructor(walletProvider:Web3Provider ,config?: Partial) { + + this.#smartAccountConfig = { ...DefaultSmartAccountConfig } + if (config) { + this.#smartAccountConfig = { ...this.#smartAccountConfig, ...config } + } - this.#smartAccountConfig = config this.ethAdapter = {} this.smartWalletContract = {} this.multiSendContract = {} this.smartWalletFactoryContract = {} - this.supportedNetworkIds = config.supportedNetworksIds - this.providers = config.providers + this.supportedNetworkIds = this.#smartAccountConfig.supportedNetworksIds; + this.provider = walletProvider + this.signer = walletProvider.getSigner(); - this.nodeClient = new SafeServiceClient({txServiceUrl: config.backend_url}); + this.nodeClient = new SafeServiceClient({txServiceUrl: this.#smartAccountConfig.backend_url}); } // for testing // providers and contracts initialization public async init(): Promise { - const chainConfig = await this.getSupportedChainsInfo(); + const chainConfig = (await this.getSupportedChainsInfo()).data; + this.chainConfig = chainConfig; console.log("chain config: ", chainConfig); // instead of getting from networks, get details from chainConfig + const signer = this.signer; + // Review + // check usage of getsignerByAddress from mexa/sdk and playground + for(let i=0; i < this.supportedNetworkIds.length; i++) { const network = this.supportedNetworkIds[i]; - // @notice : I think we should be providing providers in multi chain context - const provider = this.providers[i]; - // check if corresponds to same chainId correctly - const signer = provider.getSigner(); - // this.relayer = new LocalRelayer(signer); // should relayer client be chosen per chain? - + const providerUrl = chainConfig.find(n => n.chainId === network)?.providerUrl; + const readProvider = new ethers.providers.JsonRpcProvider(providerUrl); // instantiating EthersAdapter instance and maintain it as class level variable this.ethAdapter[network] = new EthersAdapter({ ethers, - signer + signer, + provider:readProvider }) - // TODO - //this.context[network].entryPointAddress = networks[network].entryPoint; // come from chainConfig - //this.context[network].fallbackHandlerAddress = networks[network].fallbackHandler; // come from chainConfig - + // EntryPoint and FallbackHandler etc Has to be same for all networks + this.initializeContracts(network); } // Review @@ -102,24 +113,24 @@ class SmartAccount { // intialize contract to be used throughout this class private initializeContracts(chainId: ChainId) { - this.smartWalletFactoryContract[networks[chainId].chainId] = getSmartWalletFactoryContract( + this.smartWalletFactoryContract[chainId] = getSmartWalletFactoryContract( chainId, this.ethAdapter[chainId] ); // Should attach the address here - this.smartWalletContract[networks[chainId].chainId] = getSmartWalletContract( + this.smartWalletContract[chainId] = getSmartWalletContract( chainId, this.ethAdapter[chainId] ); - this.multiSendContract[networks[chainId].chainId] = getMultiSendContract( + this.multiSendContract[chainId] = getMultiSendContract( chainId, this.ethAdapter[chainId] ); } - private async getSupportedChainsInfo(): Promise { + private async getSupportedChainsInfo(): Promise { return this.nodeClient.getChainInfo(); } @@ -129,9 +140,9 @@ class SmartAccount { } // return configuration used for intialization of the { wallet } instance - getSmartAccountConfig(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): NetworkConfig { + getSmartAccountConfig(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): ChainConfig { // networks should come from chainConfig instead - return networks[chainId] + return this.chainConfig[chainId] } // Assigns transaction relayer to this smart wallet instance @@ -179,7 +190,6 @@ class SmartAccount { ); // going to go with personal sign - let signature:string = await this.ethersAdapter(chainId).getSigner().signMessage(ethers.utils.arrayify(hash)); let { r, s, v } = getSignatureParameters(signature); v += 4; @@ -189,13 +199,6 @@ class SmartAccount { // const walletInterface = this.smartAccount(chainId).getInterface(); let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); - - console.log("built txn"); - - console.log(transaction); - console.log(refundInfo); - console.log(batchId); - console.log(signature); let { data } = await walletContract.populateTransaction.execTransaction( transaction, @@ -212,7 +215,7 @@ class SmartAccount { } // Todo : rename - // This transaction is without fee refund + // This transaction is without fee refund (gasless) // We need to have identifiers for these txns async createSmartAccountTransaction(transaction: Transaction, batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let walletContract = this.smartAccount(chainId).getContract(); @@ -233,22 +236,20 @@ class SmartAccount { } }; - // - // return smartaccount instance smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { - const smartWallet = this.smartWalletContract[networks[chainId].chainId] + const smartWallet = this.smartWalletContract[chainId] const address = this.address; smartWallet.getContract().attach(address); return smartWallet; } factory(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletFactoryContract { - return this.smartWalletFactoryContract[networks[chainId].chainId] + return this.smartWalletFactoryContract[chainId] } multiSend(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendContract { - return this.multiSendContract[networks[chainId].chainId] + return this.multiSendContract[chainId] } // Optional index allowed @@ -257,11 +258,13 @@ class SmartAccount { } // Review - // might be coming wrong.. async isDeployed(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + // might be coming wrong.. // const readProvider = new ethers.providers.JsonRpcProvider(networks[chainId].providerUrl); - //const walletCode = await readProvider.getCode(await this.getAddress(chainId)); + // const walletCode = await readProvider.getCode(await this.getAddress(chainId)); // return !!walletCode && walletCode !== '0x' + + // but below works return await this.factory(chainId).isWalletExist(this.address); } @@ -274,11 +277,13 @@ class SmartAccount { return state; } - // apend owner? + // append owner? async getSmartAccountContext(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + const entryPoint = this.chainConfig.find(n => n.chainId === chainId)?.entryPoint; + const fallbackHandlerAddress = this.chainConfig.find(n => n.chainId === chainId)?.fallBackHandler; const context: SmartAccountContext = { - entryPointAddress: networks[chainId].entryPoint, - fallbackHandlerAddress: networks[chainId].fallbackHandler + entryPointAddress: entryPoint || '', + fallbackHandlerAddress: fallbackHandlerAddress || '' } return context; } @@ -302,8 +307,15 @@ class SmartAccount { */ async getAddressForCounterfactualWallet(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { return await this.smartWalletFactoryContract[ - networks[chainId].chainId + chainId ].getAddressForCounterfactualWallet(this.owner, index) } } + +export const DefaultSmartAccountConfig: SmartAccountConfig = { + activeNetworkId: ChainId.RINKEBY, //Update later + supportedNetworksIds: [ChainId.GOERLI, ChainId.RINKEBY, ChainId.MUMBAI], + backend_url: "http://localhost:3000/v1" +} + export default SmartAccount diff --git a/packages/smart-account/src/assets/index.ts b/packages/smart-account/src/assets/index.ts index b0d6e1c3c..b83173a60 100644 --- a/packages/smart-account/src/assets/index.ts +++ b/packages/smart-account/src/assets/index.ts @@ -11,7 +11,8 @@ export const MultiSend = { "88": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", "100": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", "246": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "73799": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD" + "73799": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "31337": "0x1A3F36c656Da24c18C703B8c2d1829F5D32E8E49", }, "abi": [ { @@ -36,16 +37,17 @@ export const MultiSend = { } export const SmartWallet = { - "defaultAddress": "0xcc5fBe9f7727Ee62688672C814819Cd9818B9c68", + "defaultAddress": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", "released": true, "contractName": "SmartWallet", "version": "1.0.0", "networkAddresses": { - "1": "0xcc5fBe9f7727Ee62688672C814819Cd9818B9c68", - "4": "0xcc5fBe9f7727Ee62688672C814819Cd9818B9c68", - "5": "0xcc5fBe9f7727Ee62688672C814819Cd9818B9c68", - "42": "0xcc5fBe9f7727Ee62688672C814819Cd9818B9c68", - "100": "0xcc5fBe9f7727Ee62688672C814819Cd9818B9c68" + "1": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", + "4": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", + "5": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", + "42": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", + "100": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", + "31337": "0x0ba464506a3D66C962121e3C25ed56678A2585B6", }, "abi": [ { @@ -1051,19 +1053,20 @@ export const MultiSend = { export const WalletFactory = { - "defaultAddress": "0x2F712395a702e415a1f0E2a1C863301008D3441A", + "defaultAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", "released": true, "contractName": "WalletFactory", "version": "1.0.0", "networkAddresses": { - "1": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "4": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "5": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "42": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "88": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "100": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "246": "0x2F712395a702e415a1f0E2a1C863301008D3441A", - "73799": "0x2F712395a702e415a1f0E2a1C863301008D3441A" + "1": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "4": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "5": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "42": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "88": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "100": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "246": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "73799": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "31337": "0x85c0995669f8a0173a5B5F6003DA060E8D17f0c3", }, "abi": [ { diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 4d8e45d60..29dd5e417 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -3,18 +3,14 @@ import { ExternalProvider, Web3Provider } from '@ethersproject/providers'; // walletProvider: WalletProviderLike export interface SmartAccountConfig { - // owner: string // EOA address activeNetworkId: ChainId supportedNetworksIds: ChainId[] - providers: Web3Provider[] + // walletProvider: Web3Provider // getting provider that can sign messages backend_url: string } -// relayer_url -// provider? // TODO // Review location, usage and name of types - export interface Transaction { to: string value?: BigNumberish @@ -107,6 +103,7 @@ export enum ChainId { RINKEBY = 4, GOERLI = 5, KOVAN = 42, + MUMBAI = 80001, HARDHAT = 31337 //Temp } export interface NetworkConfig { @@ -158,8 +155,14 @@ export type TokenInfo = { updatedAt: Date } +export type ChainConfigResponse = { + message: string + code: number + data: ChainConfig[] +} + export type ChainConfig = { - chain_id: number + chainId: number name: string symbol: string isL2: boolean @@ -255,8 +258,23 @@ export const networks: Record = { }, providerUrl: 'https://kovan.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' }, + [ChainId.MUMBAI]: { + chainId: ChainId.MUMBAI, + entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', + fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', + name: 'ropsten', + title: 'Ropsten', + testnet: true, + blockExplorer: { + //name: 'Etherscan (Ropsten)', + address: 'https://ropsten.etherscan.io/address', + txHash: 'https://ropsten.etherscan.io/tx', + api: 'https://api.ropsten.etherscan.io/' + }, + providerUrl: 'https://ropsten.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' + }, [ChainId.HARDHAT]: { - chainId: ChainId.ROPSTEN, + chainId: ChainId.HARDHAT, entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', name: 'ropsten', diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 88d0a674e..01f60baed 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -11,6 +11,7 @@ const Web3 = require('web3') const { expect } = chai.use(chaiAsPromised) import hardhat from 'hardhat' +import { deployWalletContracts } from './utils/deploy'; import { BytesLike, Interface } from 'ethers/lib/utils' type EthereumInstance = { @@ -55,12 +56,12 @@ describe('Wallet integration', function () { RINKEBY = 4, GOERLI = 5, KOVAN = 42, + MUMBAI = 80001, HARDHAT = 31337 } const userAddress = await ethnode.signer?.getAddress() || ''; - console.log(ethnode.provider); const eoaSigner = ethnode.provider?.getSigner() if(eoaSigner) { @@ -68,13 +69,21 @@ describe('Wallet integration', function () { console.log('eoa ', eoa); } - const wallet = new SmartAccount({ - // owner: userAddress, - activeNetworkId: ChainId.RINKEBY, - supportedNetworksIds: [ChainId.RINKEBY], // has to be consisttent providers and network names - providers: [ethnode.provider], - backend_url: "http://localhost:3000/v1" - }); + const wallet = new SmartAccount(ethnode.provider,{ + activeNetworkId: ChainId.HARDHAT, + supportedNetworksIds: [ChainId.HARDHAT], // has to be consisttent providers and network names + // walletProvider: ethnode.provider, + //backend_url: "http://localhost:3000/v1" + }); + + // const smartAccount = await wallet.init(); + + const [ smartWallet, walletFactory, multiSend ] = await deployWalletContracts(ethnode.signer); + + console.log('base wallet deployed at : ', smartWallet.address); + console.log('wallet factory deployed at : ', walletFactory.address); + console.log('multi send deployed at : ', multiSend.address); + // I'd have to deploy the contracts and set specs // const smartAccount = await wallet.init(); diff --git a/packages/smart-account/tests/utils/deploy.ts b/packages/smart-account/tests/utils/deploy.ts new file mode 100644 index 000000000..b96e01d3f --- /dev/null +++ b/packages/smart-account/tests/utils/deploy.ts @@ -0,0 +1,27 @@ +import { Contract, ethers } from 'ethers' + +// import { SmartWalletContract } from '@biconomy-sdk/core-types' +const SmartWalletArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/Smartwallet.sol/SmartWallet.json') +const WalletFactoryArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/WalletFactory.sol/WalletFactory.json') +const MultiSendArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/libs/MultiSend.sol/MultiSend.json') +// const MultiSendCallOnlyArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol/MultiSendCallOnly.json') + +export async function deployWalletContracts( + signer: ethers.Signer +): Promise<[Contract, Contract, Contract]> { + + const smartWallet = (await new ethers.ContractFactory(SmartWalletArtifact.abi, SmartWalletArtifact.bytecode, signer).deploy( + )) as unknown as Contract + + const walletFactory = (await new ethers.ContractFactory(WalletFactoryArtifact.abi, WalletFactoryArtifact.bytecode, signer).deploy(smartWallet.address + )) as unknown as Contract + + const multiSend = (await new ethers.ContractFactory(MultiSendArtifact.abi, MultiSendArtifact.bytecode, signer).deploy( + )) as unknown as Contract + + /*const multiSendCallOnly = (await new ethers.ContractFactory(MultiSendCallOnlyArtifact.abi, MultiSendCallOnlyArtifact.bytecode, signer).deploy( + )) as unknown as Contract*/ + + return [smartWallet, walletFactory, multiSend] + +} \ No newline at end of file diff --git a/packages/smart-account/tests/utils/index.ts b/packages/smart-account/tests/utils/index.ts index e69de29bb..312156155 100644 --- a/packages/smart-account/tests/utils/index.ts +++ b/packages/smart-account/tests/utils/index.ts @@ -0,0 +1,5 @@ +import { ethers } from 'ethers' + +export async function encodeData(contract: ethers.Contract, method: string, ...args: any): Promise { + return (await contract.populateTransaction[method](...args)).data || '' +} \ No newline at end of file diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts new file mode 100644 index 000000000..b60a756e8 --- /dev/null +++ b/packages/transactions/src/execution.ts @@ -0,0 +1,345 @@ +import { + Contract, + Wallet, + utils, + BigNumber, + BigNumberish, + Signer, + PopulatedTransaction, +} from "ethers"; + +import { TypedDataSigner } from "@ethersproject/abstract-signer"; +import { AddressZero } from "@ethersproject/constants"; + +export const EIP_DOMAIN = { + EIP712Domain: [ + { type: "uint256", name: "chainId" }, + { type: "address", name: "verifyingContract" }, + ], +}; + +export const EIP712_WALLET_TX_TYPE = { + // "WalletTx(address to,uint256 value,bytes data,uint8 operation,uint256 targetTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" + WalletTx: [ + { type: "address", name: "to" }, + { type: "uint256", name: "value" }, + { type: "bytes", name: "data" }, + { type: "uint8", name: "operation" }, + { type: "uint256", name: "targetTxGas" }, + { type: "uint256", name: "baseGas" }, + { type: "uint256", name: "gasPrice" }, + { type: "address", name: "gasToken" }, + { type: "address", name: "refundReceiver" }, + { type: "uint256", name: "nonce" }, + ], +}; + +export const EIP712_SAFE_MESSAGE_TYPE = { + // "SafeMessage(bytes message)" + SafeMessage: [{ type: "bytes", name: "message" }], +}; + +export interface MetaTransaction { + to: string; + value: string | number | BigNumber; + data: string; + operation: number; +} + +export interface SafeTransaction extends MetaTransaction { + targetTxGas: string | number; + baseGas: string | number; + gasPrice: string | number; + gasToken: string; + refundReceiver: string; + nonce: string | number; +} + +export interface Transaction { + to: string; + value: string | number | BigNumber; + data: string; + operation: number; + targetTxGas: string | number; +} + +export interface FeeRefund { + baseGas: string | number; + gasPrice: string | number; + gasToken: string; + refundReceiver: string; +} + +export interface WalletTransaction { + to: string; + value: BigNumberish; + data: string; + operation: number; + targetTxGas: string | number; + baseGas: string | number; + gasPrice: string | number; + gasToken: string; + refundReceiver: string; + nonce: number +} + +export interface ExecTransaction { + to: string; + value: BigNumberish; + data: string; + operation: number; + targetTxGas: string | number; +}; + +export interface SmartAccountTransaction { + _tx: ExecTransaction; + refundInfo: FeeRefund; + batchId: number; + nonce: string | number; +}; + +export interface SafeSignature { + signer: string; + data: string; + } + +export const calculateSafeDomainSeparator = ( + safe: Contract, + chainId: BigNumberish +): string => { + return utils._TypedDataEncoder.hashDomain({ + verifyingContract: safe.address, + chainId, + }); +}; + +export const preimageSafeTransactionHash = ( + safe: Contract, + safeTx: SafeTransaction, + chainId: BigNumberish +): string => { + return utils._TypedDataEncoder.encode( + { verifyingContract: safe.address, chainId }, + EIP712_WALLET_TX_TYPE, + safeTx + ); +}; + +export const calculateSafeTransactionHash = ( + safe: Contract, + safeTx: SafeTransaction, + chainId: BigNumberish +): string => { + return utils._TypedDataEncoder.hash( + { verifyingContract: safe.address, chainId }, + EIP712_WALLET_TX_TYPE, + safeTx + ); +}; + +export const calculateSafeMessageHash = ( + safe: Contract, + message: string, + chainId: BigNumberish +): string => { + return utils._TypedDataEncoder.hash( + { verifyingContract: safe.address, chainId }, + EIP712_SAFE_MESSAGE_TYPE, + { message } + ); +}; + +export const safeSignTypedData = async ( + signer: Signer & TypedDataSigner, + safe: Contract, + safeTx: SafeTransaction, + chainId?: BigNumberish +): Promise => { + if (!chainId && !signer.provider) + throw Error("Provider required to retrieve chainId"); + const cid = chainId || (await signer.provider!!.getNetwork()).chainId; + const signerAddress = await signer.getAddress(); + return { + signer: signerAddress, + data: await signer._signTypedData( + { verifyingContract: safe.address, chainId: cid }, + EIP712_WALLET_TX_TYPE, + safeTx + ), + }; +}; + +export const signHash = async ( + signer: Signer, + hash: string +): Promise => { + const typedDataHash = utils.arrayify(hash); + const signerAddress = await signer.getAddress(); + return { + signer: signerAddress, + data: (await signer.signMessage(typedDataHash)) + .replace(/1b$/, "1f") + .replace(/1c$/, "20"), + }; +}; + +export const safeSignMessage = async ( + signer: Signer, + safe: Contract, + safeTx: SafeTransaction, + chainId?: BigNumberish +): Promise => { + const cid = chainId || (await signer.provider!!.getNetwork()).chainId; + return signHash(signer, calculateSafeTransactionHash(safe, safeTx, cid)); +}; + +export const buildSignatureBytes = (signatures: SafeSignature[]): string => { + signatures.sort((left, right) => + left.signer.toLowerCase().localeCompare(right.signer.toLowerCase()) + ); + let signatureBytes = "0x"; + for (const sig of signatures) { + signatureBytes += sig.data.slice(2); + } + return signatureBytes; +}; + +export const executeTx = async ( + safe: Contract, + safeTx: SafeTransaction, + signatures: SafeSignature[], + overrides?: any +): Promise => { + const signatureBytes = buildSignatureBytes(signatures); + const transaction: Transaction = { + to: safeTx.to, + value: safeTx.value, + data: safeTx.data, + operation: safeTx.operation, + targetTxGas: safeTx.targetTxGas, + }; + const refundInfo: FeeRefund = { + baseGas: safeTx.baseGas, + gasPrice: safeTx.gasPrice, + gasToken: safeTx.gasToken, + refundReceiver: safeTx.refundReceiver, + }; + return safe.execTransaction( + transaction, + 0, // batchId + refundInfo, + signatureBytes, + overrides || {} + ); +}; + +export const populateExecuteTx = async ( + safe: Contract, + safeTx: SafeTransaction, + signatures: SafeSignature[], + overrides?: any +): Promise => { + const signatureBytes = buildSignatureBytes(signatures); + const transaction: Transaction = { + to: safeTx.to, + value: safeTx.value, + data: safeTx.data, + operation: safeTx.operation, + targetTxGas: safeTx.targetTxGas, + }; + const refundInfo: FeeRefund = { + baseGas: safeTx.baseGas, + gasPrice: safeTx.gasPrice, + gasToken: safeTx.gasToken, + refundReceiver: safeTx.refundReceiver, + }; + return safe.populateTransaction.execTransaction( + transaction, + 0, // batchId + refundInfo, + signatureBytes, + overrides || {} + ); +}; + +export const buildContractCall = ( + contract: Contract, + method: string, + params: any[], + nonce: number, + delegateCall?: boolean, + overrides?: Partial +): SafeTransaction => { + const data = contract.interface.encodeFunctionData(method, params); + return buildSafeTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce, + }, + overrides + ) + ); +}; + +export const executeTxWithSigners = async ( + safe: Contract, + tx: SafeTransaction, + signers: Wallet[], + overrides?: any +) => { + const sigs = await Promise.all( + signers.map((signer) => safeSignTypedData(signer, safe, tx)) + ); + return executeTx(safe, tx, sigs, overrides); +}; + +export const executeContractCallWithSigners = async ( + safe: Contract, + contract: Contract, + method: string, + params: any[], + signers: Wallet[], + delegateCall?: boolean, + overrides?: Partial +) => { + const tx = buildContractCall( + contract, + method, + params, + await safe.getNonce(0), + delegateCall, + overrides + ); + return executeTxWithSigners(safe, tx, signers); +}; + +export const buildSafeTransaction = (template: { + to: string; + value?: BigNumber | number | string; + data?: string; + operation?: number; + targetTxGas?: number | string; + baseGas?: number | string; + gasPrice?: number | string; + gasToken?: string; + refundReceiver?: string; + nonce: number; +}): SafeTransaction => { + return { + to: template.to, + value: template.value || 0, + data: template.data || "0x", + operation: template.operation || 0, + targetTxGas: template.targetTxGas || 0, + baseGas: template.baseGas || 0, + gasPrice: template.gasPrice || 0, + gasToken: template.gasToken || AddressZero, + refundReceiver: template.refundReceiver || AddressZero, + nonce: template.nonce, + }; +}; + + diff --git a/packages/transactions/src/index.ts b/packages/transactions/src/index.ts index 207c20fb1..ea8b9d492 100644 --- a/packages/transactions/src/index.ts +++ b/packages/transactions/src/index.ts @@ -1,2 +1,4 @@ export * from './types' -export * from './utils' \ No newline at end of file +export * from './utils' +export * from './execution' +export * from './multisend' \ No newline at end of file diff --git a/packages/transactions/src/multisend.ts b/packages/transactions/src/multisend.ts new file mode 100644 index 000000000..8052c362c --- /dev/null +++ b/packages/transactions/src/multisend.ts @@ -0,0 +1,35 @@ +import { Contract, utils } from "ethers"; +import { + buildContractCall, + MetaTransaction, + SafeTransaction, +} from "./execution"; + +const encodeMetaTransaction = (tx: MetaTransaction): string => { + const data = utils.arrayify(tx.data); + const encoded = utils.solidityPack( + ["uint8", "address", "uint256", "uint256", "bytes"], + [tx.operation, tx.to, tx.value, data.length, data] + ); + return encoded.slice(2); +}; + +export const encodeMultiSend = (txs: MetaTransaction[]): string => { + return "0x" + txs.map((tx) => encodeMetaTransaction(tx)).join(""); +}; + +export const buildMultiSendSafeTx = ( + multiSend: Contract, + txs: MetaTransaction[], + nonce: number, + overrides?: Partial +): SafeTransaction => { + return buildContractCall( + multiSend, + "multiSend", + [encodeMultiSend(txs)], + nonce, + true, + overrides + ); +}; \ No newline at end of file diff --git a/packages/transactions/src/types.ts b/packages/transactions/src/types.ts index c194ba62d..854a784ea 100644 --- a/packages/transactions/src/types.ts +++ b/packages/transactions/src/types.ts @@ -10,43 +10,6 @@ import { } from "ethers"; import { TypedDataSigner } from "@ethersproject/abstract-signer"; import { AddressZero } from "@ethersproject/constants"; - - -export const EIP712_WALLET_TX_TYPE = { - // "WalletTx(address to,uint256 value,bytes data,uint8 operation,uint256 targetTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" - WalletTx: [ - { type: "address", name: "to" }, - { type: "uint256", name: "value" }, - { type: "bytes", name: "data" }, - { type: "uint8", name: "operation" }, - { type: "uint256", name: "targetTxGas" }, - { type: "uint256", name: "baseGas" }, - { type: "uint256", name: "gasPrice" }, - { type: "address", name: "gasToken" }, - { type: "address", name: "refundReceiver" }, - { type: "uint256", name: "nonce" }, - ], -}; - -export interface MetaTransaction { - to: string; - value: string | number | BigNumber; - data: string; - operation: number; -}; - -export interface WalletTransaction { - to: string; - value: BigNumberish; - data: string; - operation: number; - targetTxGas: string | number; - baseGas: string | number; - gasPrice: string | number; - gasToken: string; - refundReceiver: string; - nonce: number -} /*export interface SafeTransaction extends MetaTransaction { targetTxGas: string | number; @@ -56,27 +19,5 @@ export interface WalletTransaction { refundReceiver: string; nonce: string | number; };*/ - -export interface ExecTransaction { - to: string; - value: BigNumberish; - data: string; - operation: number; - targetTxGas: string | number; -}; - -export interface FeeRefund { - baseGas: string | number; - gasPrice: string | number; - gasToken: string; - refundReceiver: string; -}; - -export interface SmartAccountTransaction { - _tx: ExecTransaction; - refundInfo: FeeRefund; - batchId: number; - nonce: string | number; -}; From 2bcc05abb90e0bfb64ee92809a62bd33f42f1da2 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 27 Jul 2022 01:53:47 +0530 Subject: [PATCH 0027/1247] transaction utils added + dev notes --- packages/smart-account/src/SmartAccount.ts | 62 ++++++++++--------- packages/smart-account/src/assets/index.ts | 6 +- packages/smart-account/src/types.ts | 2 +- .../smart-account/tests/smartaccount.spec.ts | 13 +++- packages/transactions/src/execution.ts | 40 ++++++------ packages/transactions/src/multisend.ts | 8 ++- 6 files changed, 73 insertions(+), 58 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 8c540c637..5ed420826 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -19,7 +19,16 @@ import { JsonRpcSigner, TransactionRequest, TransactionResponse } from '@ethersp import SafeServiceClient from '@biconomy-sdk/node-client'; import { Web3Provider } from '@ethersproject/providers' import { Relayer, LocalRelayer } from '@biconomy-sdk/relayer'; -import { WalletTransaction, ExecTransaction, FeeRefund, SmartAccountTransaction, getSignatureParameters, EIP712_WALLET_TX_TYPE } from '@biconomy-sdk/transactions'; +import { + WalletTransaction, + ExecTransaction, + FeeRefund, + SmartAccountTransaction, + getSignatureParameters, + EIP712_WALLET_TX_TYPE, + buildWalletTransaction, + safeSignMessage +} from '@biconomy-sdk/transactions'; class SmartAccount { // { ethAdapter } is a window that gave access to all the Implemented function of it @@ -104,6 +113,7 @@ class SmartAccount { } // Review this.owner = await this.ethersAdapter().getSignerAddress(); + // Commeting below only for debugging test case!! this.address = await this.getAddress(); return this; } @@ -153,7 +163,6 @@ class SmartAccount { } // async sendSignedTransaction : must expect signature! - // async sign @@ -183,24 +192,21 @@ class SmartAccount { refundReceiver: tx.refundReceiver, }; - const hash:string = ethers.utils._TypedDataEncoder.hash( - { verifyingContract: this.address, chainId }, - EIP712_WALLET_TX_TYPE, - tx - ); - - // going to go with personal sign - let signature:string = await this.ethersAdapter(chainId).getSigner().signMessage(ethers.utils.arrayify(hash)); - let { r, s, v } = getSignatureParameters(signature); - v += 4; - let vNew = ethers.BigNumber.from(v).toHexString(); - signature = r + s.slice(2) + vNew.slice(2); - - // const walletInterface = this.smartAccount(chainId).getInterface(); + // Should call this.signTransaction let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); - - let { data } = await walletContract.populateTransaction.execTransaction( + + const { signer, data } = await safeSignMessage( + this.signer, + walletContract, + tx, + chainId + ); + + let signature = "0x"; + signature += data.slice(2); + + let execTransaction = await walletContract.populateTransaction.execTransaction( transaction, batchId, refundInfo, @@ -208,7 +214,7 @@ class SmartAccount { ); rawTx.to = this.address; - rawTx.data = data; + rawTx.data = execTransaction.data; const txn = await this.relayer.relay(rawTx); return txn; @@ -222,18 +228,16 @@ class SmartAccount { walletContract = walletContract.attach(this.address); const nonce = (await walletContract.getNonce(batchId)).toNumber(); console.log('nonce: ', nonce); - return { + + + const walletTx: WalletTransaction = buildWalletTransaction({ to: transaction.to, - value: 0, - data: transaction.data || '', - operation: 0, - targetTxGas: 0, - baseGas: 0, - gasPrice: 0, - gasToken: ZERO_ADDRESS, - refundReceiver: ZERO_ADDRESS, + // value: ethers.utils.parseEther("1"), + data: transaction.data, // for token transfers use encodeTransfer nonce - } + }); + + return walletTx; }; // return smartaccount instance diff --git a/packages/smart-account/src/assets/index.ts b/packages/smart-account/src/assets/index.ts index b83173a60..cb2e9a206 100644 --- a/packages/smart-account/src/assets/index.ts +++ b/packages/smart-account/src/assets/index.ts @@ -12,7 +12,7 @@ export const MultiSend = { "100": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", "246": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", "73799": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "31337": "0x1A3F36c656Da24c18C703B8c2d1829F5D32E8E49", + "31338": "0x1A3F36c656Da24c18C703B8c2d1829F5D32E8E49", }, "abi": [ { @@ -47,7 +47,7 @@ export const MultiSend = { "5": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", "42": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", "100": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", - "31337": "0x0ba464506a3D66C962121e3C25ed56678A2585B6", + "31338": "0x0ba464506a3D66C962121e3C25ed56678A2585B6", }, "abi": [ { @@ -1066,7 +1066,7 @@ export const MultiSend = { "100": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", "246": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", "73799": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "31337": "0x85c0995669f8a0173a5B5F6003DA060E8D17f0c3", + "31338": "0x85c0995669f8a0173a5B5F6003DA060E8D17f0c3", }, "abi": [ { diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 29dd5e417..8e476342b 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -104,7 +104,7 @@ export enum ChainId { GOERLI = 5, KOVAN = 42, MUMBAI = 80001, - HARDHAT = 31337 //Temp + HARDHAT = 31338 //Temp } export interface NetworkConfig { entryPoint: string // abstract account contract diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 01f60baed..49cc97b00 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -33,7 +33,7 @@ describe('Wallet integration', function () { ethnode.provider = new ethers.providers.Web3Provider(hardhat.network.provider.send); ethnode.signer = ethnode.provider.getSigner() - ethnode.chainId = 31337 + ethnode.chainId = 31338 }) beforeEach(async () => { @@ -57,7 +57,7 @@ describe('Wallet integration', function () { GOERLI = 5, KOVAN = 42, MUMBAI = 80001, - HARDHAT = 31337 + HARDHAT = 31338 } const userAddress = await ethnode.signer?.getAddress() || ''; @@ -76,10 +76,17 @@ describe('Wallet integration', function () { //backend_url: "http://localhost:3000/v1" }); - // const smartAccount = await wallet.init(); + //const smartAccount = await wallet.init(); + + //console.log(smartAccount.owner); const [ smartWallet, walletFactory, multiSend ] = await deployWalletContracts(ethnode.signer); + let isContract = false; + const code = await ethnode.provider?.getCode("0x0ba464506a3D66C962121e3C25ed56678A2585B6") || ''; + if(code.slice(2).length > 0) isContract = true; + console.log(isContract); + console.log('base wallet deployed at : ', smartWallet.address); console.log('wallet factory deployed at : ', walletFactory.address); console.log('multi send deployed at : ', multiSend.address); diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index b60a756e8..8e5893799 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -11,6 +11,8 @@ import { import { TypedDataSigner } from "@ethersproject/abstract-signer"; import { AddressZero } from "@ethersproject/constants"; +// TODO +// Review all types and their placement and dependency export const EIP_DOMAIN = { EIP712Domain: [ { type: "uint256", name: "chainId" }, @@ -113,9 +115,9 @@ export const calculateSafeDomainSeparator = ( }); }; -export const preimageSafeTransactionHash = ( +export const preimageWalletTransactionHash = ( safe: Contract, - safeTx: SafeTransaction, + safeTx: WalletTransaction, chainId: BigNumberish ): string => { return utils._TypedDataEncoder.encode( @@ -125,9 +127,9 @@ export const preimageSafeTransactionHash = ( ); }; -export const calculateSafeTransactionHash = ( +export const calculateWalletTransactionHash = ( safe: Contract, - safeTx: SafeTransaction, + safeTx: WalletTransaction, chainId: BigNumberish ): string => { return utils._TypedDataEncoder.hash( @@ -152,7 +154,7 @@ export const calculateSafeMessageHash = ( export const safeSignTypedData = async ( signer: Signer & TypedDataSigner, safe: Contract, - safeTx: SafeTransaction, + safeTx: WalletTransaction, chainId?: BigNumberish ): Promise => { if (!chainId && !signer.provider) @@ -186,11 +188,11 @@ export const signHash = async ( export const safeSignMessage = async ( signer: Signer, safe: Contract, - safeTx: SafeTransaction, + safeTx: WalletTransaction, chainId?: BigNumberish ): Promise => { const cid = chainId || (await signer.provider!!.getNetwork()).chainId; - return signHash(signer, calculateSafeTransactionHash(safe, safeTx, cid)); + return signHash(signer, calculateWalletTransactionHash(safe, safeTx, cid)); }; export const buildSignatureBytes = (signatures: SafeSignature[]): string => { @@ -206,12 +208,12 @@ export const buildSignatureBytes = (signatures: SafeSignature[]): string => { export const executeTx = async ( safe: Contract, - safeTx: SafeTransaction, + safeTx: WalletTransaction, signatures: SafeSignature[], overrides?: any ): Promise => { const signatureBytes = buildSignatureBytes(signatures); - const transaction: Transaction = { + const transaction: ExecTransaction = { to: safeTx.to, value: safeTx.value, data: safeTx.data, @@ -235,12 +237,12 @@ export const executeTx = async ( export const populateExecuteTx = async ( safe: Contract, - safeTx: SafeTransaction, + safeTx: WalletTransaction, signatures: SafeSignature[], overrides?: any ): Promise => { const signatureBytes = buildSignatureBytes(signatures); - const transaction: Transaction = { + const transaction: ExecTransaction = { to: safeTx.to, value: safeTx.value, data: safeTx.data, @@ -268,10 +270,10 @@ export const buildContractCall = ( params: any[], nonce: number, delegateCall?: boolean, - overrides?: Partial -): SafeTransaction => { + overrides?: Partial +): WalletTransaction => { const data = contract.interface.encodeFunctionData(method, params); - return buildSafeTransaction( + return buildWalletTransaction( Object.assign( { to: contract.address, @@ -286,7 +288,7 @@ export const buildContractCall = ( export const executeTxWithSigners = async ( safe: Contract, - tx: SafeTransaction, + tx: WalletTransaction, signers: Wallet[], overrides?: any ) => { @@ -303,7 +305,7 @@ export const executeContractCallWithSigners = async ( params: any[], signers: Wallet[], delegateCall?: boolean, - overrides?: Partial + overrides?: Partial ) => { const tx = buildContractCall( contract, @@ -316,9 +318,9 @@ export const executeContractCallWithSigners = async ( return executeTxWithSigners(safe, tx, signers); }; -export const buildSafeTransaction = (template: { +export const buildWalletTransaction = (template: { to: string; - value?: BigNumber | number | string; + value?: BigNumberish; data?: string; operation?: number; targetTxGas?: number | string; @@ -327,7 +329,7 @@ export const buildSafeTransaction = (template: { gasToken?: string; refundReceiver?: string; nonce: number; -}): SafeTransaction => { +}): WalletTransaction => { return { to: template.to, value: template.value || 0, diff --git a/packages/transactions/src/multisend.ts b/packages/transactions/src/multisend.ts index 8052c362c..f87d14e06 100644 --- a/packages/transactions/src/multisend.ts +++ b/packages/transactions/src/multisend.ts @@ -2,9 +2,11 @@ import { Contract, utils } from "ethers"; import { buildContractCall, MetaTransaction, - SafeTransaction, + WalletTransaction, } from "./execution"; +// TODO +// Review all types const encodeMetaTransaction = (tx: MetaTransaction): string => { const data = utils.arrayify(tx.data); const encoded = utils.solidityPack( @@ -22,8 +24,8 @@ export const buildMultiSendSafeTx = ( multiSend: Contract, txs: MetaTransaction[], nonce: number, - overrides?: Partial -): SafeTransaction => { + overrides?: Partial +): WalletTransaction => { return buildContractCall( multiSend, "multiSend", From 5ab2da7b589646e5250285a9106008253b87442f Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 27 Jul 2022 06:02:52 +0530 Subject: [PATCH 0028/1247] more methods added + testing based change in prepend + more methods + types + dev notes --- .../src/contracts/EntryPointContract.ts | 2 + .../src/contracts/MultiSendContract.ts | 4 + .../contracts/SmartWalletFactoryContract.ts | 2 + packages/core-types/src/types.ts | 19 +++- .../EntryPointEthersContract.ts | 5 + .../MultiSend/MultiSendEthersContract.ts | 10 ++ .../SmartWalletProxyFactoryEthersContract.ts | 5 + packages/relayer/src/index.ts | 5 +- packages/relayer/src/local-relayer.ts | 74 ++++++++++--- packages/relayer/src/utils/multisend.ts | 103 ++++++++++++++++++ packages/smart-account/src/SmartAccount.ts | 86 ++++++++++----- packages/smart-account/src/types.ts | 12 +- .../smart-account/tests/smartaccount.spec.ts | 1 + packages/smart-account/tests/utils/deploy.ts | 1 + 14 files changed, 276 insertions(+), 53 deletions(-) create mode 100644 packages/relayer/src/utils/multisend.ts diff --git a/packages/core-types/src/contracts/EntryPointContract.ts b/packages/core-types/src/contracts/EntryPointContract.ts index 479c618a5..ba6532c8e 100644 --- a/packages/core-types/src/contracts/EntryPointContract.ts +++ b/packages/core-types/src/contracts/EntryPointContract.ts @@ -1,6 +1,8 @@ import { UserOperation, TransactionResult } from '../types' +import { Contract } from '@ethersproject/contracts'; export interface EntryPointContract { + getContract(): Contract handleOps(userOperations: UserOperation[], beneficiary: string): Promise simulateValidation(userOperation: UserOperation): Promise getRequestId(userOperation: UserOperation): Promise diff --git a/packages/core-types/src/contracts/MultiSendContract.ts b/packages/core-types/src/contracts/MultiSendContract.ts index ceb41c7b2..eeee6bb43 100644 --- a/packages/core-types/src/contracts/MultiSendContract.ts +++ b/packages/core-types/src/contracts/MultiSendContract.ts @@ -1,4 +1,8 @@ +import { Contract } from '@ethersproject/contracts'; +import { Interface } from "@ethersproject/abi"; export interface MultiSendContract { getAddress(): string + getContract(): Contract + getInterface(): Interface encode(methodName: any, params: any): string } diff --git a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts index d9b978df8..513ba0549 100644 --- a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts +++ b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts @@ -1,8 +1,10 @@ import { TransactionResult } from '../types' import { Interface } from "@ethersproject/abi"; +import { Contract } from '@ethersproject/contracts'; export interface SmartWalletFactoryContract { getInterface(): Interface getAddress(): string + getContract(): Contract isWalletExist(wallet:string): Promise deployCounterFactualWallet( owner: string, diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 0b2675dbe..e5dd96cba 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -1,6 +1,9 @@ import { ContractTransaction } from '@ethersproject/contracts' import { PromiEvent, TransactionReceipt } from 'web3-core/types' import { BigNumber, BigNumberish } from '@ethersproject/bignumber'; +import { SmartWalletFactoryContract } from './contracts/SmartWalletFactoryContract'; +import { MultiSendContract } from './contracts/MultiSendContract'; +import { SmartWalletContract } from './contracts/SmartWalletContract'; export type SmartAccountVersion = '1.3.0' | '1.2.0' | '1.1.1' @@ -11,10 +14,17 @@ export enum OperationType { // Temp export interface SmartAccountContext { + baseWallet: SmartWalletContract, + walletFactory: SmartWalletFactoryContract, + multiSend: MultiSendContract +} + +export interface SmartAccountState { + address: string, + owner: string, + isDeployed: boolean, entryPointAddress: string, fallbackHandlerAddress: string, - // multiSendAddress: string, - // multiSendObnlyCallAddress: string, } // TODO @@ -35,6 +45,11 @@ export interface RawTransactionType { type?: number; }; +export interface SignedTransaction { + rawTx: RawTransactionType, + tx: WalletTransaction +} + export interface ExecTransaction { to: string; value: BigNumberish; diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts index 0292f56ec..d387daf7e 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts @@ -4,6 +4,7 @@ import { EntryPointContractInterface } from '../../../typechain/src/ethers-v5/v1.0.0/EntryPointContract' import { toTxResult } from '../../utils' +import { Contract } from '@ethersproject/contracts'; class EntryPointEthersContract implements EntryPointContract { constructor(public contract: EntryPointContract_TypeChain) {} @@ -12,6 +13,10 @@ class EntryPointEthersContract implements EntryPointContract { return this.contract.address } + getContract(): Contract { + return this.contract; + } + async simulateValidation(userOperation: UserOperation): Promise { const resultSet = await this.contract.simulateValidation(userOperation) return toTxResult(resultSet) diff --git a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts index d29b77326..2ca34c012 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts @@ -3,6 +3,8 @@ import { MultiSendContract as MultiSend_TypeChain, MultiSendContractInterface } from '../../../typechain/src/ethers-v5/v1.0.0/MultiSendContract' +import { Contract } from '@ethersproject/contracts'; +import { Interface } from "@ethersproject/abi"; class MultiSendEthersContract implements MultiSendContract { constructor(public contract: MultiSend_TypeChain) {} @@ -11,6 +13,14 @@ class MultiSendEthersContract implements MultiSendContract { return this.contract.address } + getContract(): Contract { + return this.contract; + } + + getInterface(): Interface { + return this.contract.interface; + } + encode: MultiSendContractInterface['encodeFunctionData'] = ( methodName: any, params: any diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts index bd93a1f8b..0c9fab562 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts @@ -2,6 +2,7 @@ import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/cor import { toTxResult } from '../../utils' import { SmartWalletFactoryContract as SmartWalletFactoryContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' import { Interface } from "@ethersproject/abi"; +import { Contract } from '@ethersproject/contracts'; class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { constructor(public contract: SmartWalletFactoryContract_TypeChain) {} @@ -10,6 +11,10 @@ class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { return this.contract.interface; } + getContract(): Contract { + return this.contract; + } + async isWalletExist(wallet: string): Promise { const doesExist = await this.contract.isWalletExist(wallet); return doesExist; diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index a6c143d41..2a28b31c8 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -1,11 +1,12 @@ import { ethers, providers } from 'ethers' import { TransactionRequest, TransactionResponse } from '@ethersproject/providers'; -import { RawTransactionType } from '@biconomy-sdk/core-types'; +import { SignedTransaction, RawTransactionType, SmartAccountState, SmartAccountContext } from '@biconomy-sdk/core-types'; export interface Relayer { // relayer will submit the transaction(s) to the network and return the transaction response. // The quote should be the one returned from getFeeOptions, if any. - relay(rawTx: RawTransactionType /*quote?: FeeQuote*/): Promise + /*quote?: FeeQuote*/ + relay(rawTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext): Promise // wait for transaction confirmation // wait(metaTxnId: string | SignedTransactions, timeout: number): Promise } diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index 813a87d56..fa19b730b 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -8,8 +8,12 @@ import { SmartWalletContract, MultiSendContract, TransactionResult, - SmartAccountContext + SmartAccountContext, + SmartAccountState, + SignedTransaction, + WalletTransaction } from '@biconomy-sdk/core-types' +import { MetaTransaction, encodeMultiSend } from './utils/multisend'; export class LocalRelayer implements Relayer { private signer: AbstractSigner @@ -25,31 +29,34 @@ export class LocalRelayer implements Relayer { // Review function arguments and return values // Could get smartAccount instance // Defines a type that takes config, context for SCW in play along with other details - async deployWallet(factory:SmartWalletFactoryContract, context: SmartAccountContext, eoa:string, index:number = 0): Promise { + async deployWallet(config: SmartAccountState, context: SmartAccountContext, index:number = 0): Promise { // Should check if already deployed - const address = await factory.getAddressForCounterfactualWallet(eoa,index); - const isExist = await factory.isWalletExist(address); + //Review for index and ownership transfer case + const {address} = config; + const {walletFactory} = context; + const isExist = await walletFactory.isWalletExist(address); if(isExist) { throw new Error("Smart Account is Already Deployed") } - const walletDeployTxn = this.prepareWalletDeploy(factory, context, eoa,index); + const walletDeployTxn = this.prepareWalletDeploy(config, context, index); const tx = this.signer.sendTransaction({ ...walletDeployTxn, gasLimit: ethers.constants.Two.pow(24) }); return tx; } prepareWalletDeploy( // owner, entryPoint, handler, index - factory:SmartWalletFactoryContract, + config:SmartAccountState, context: SmartAccountContext, - eoa: string, index: number = 0, // context: WalletContext ): { to: string, data: string} { - const factoryInterface = factory.getInterface(); + const {walletFactory} = context; + const {owner, entryPointAddress, fallbackHandlerAddress} = config; + const factoryInterface = walletFactory.getInterface(); return { - to: factory.getAddress(), // from context + to: walletFactory.getAddress(), // from context data: factoryInterface.encodeFunctionData(factoryInterface.getFunction('deployCounterFactualWallet'), - [eoa, context.entryPointAddress, context.fallbackHandlerAddress, index] + [owner, entryPointAddress, fallbackHandlerAddress, index] ) } } @@ -71,16 +78,47 @@ export class LocalRelayer implements Relayer { }*/ // Should make an object that takes config and context - async relay(rawTx: RawTransactionType /*quote?: FeeQuote*/) : Promise { - // check if wallet if deployed (needs wallet config) + // Add feeQuote later + // Appending tx and rawTx may not be necessary + async relay(signedTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext) : Promise { + + const { isDeployed, address } = config; + const { multiSend } = context; + if(!isDeployed) { + // If not =>> preprendWalletDeploy + const {to, data} = this.prepareWalletDeploy(config,context); + const originalTx:WalletTransaction = signedTx.tx; - // If not =>> preprendWalletDeploy - // Needs MultiSendCallOnly address from Context + const txs: MetaTransaction[] = [ + { + to, + value: 0, + data, + operation: 0 + }, + { + to: address, + value: 0, + data: signedTx.rawTx.data || '', + operation: 0 + } + ] - // @notice - // We'd need multiSend instance then - // rawTx to becomes multiSend address and data gets prepared again - const tx = this.signer.sendTransaction({ ...rawTx, gasLimit: ethers.constants.Two.pow(24) }); + const txnData = multiSend.getInterface().encodeFunctionData("multiSend", [ + encodeMultiSend(txs), + ]); + + const finalRawRx = { + to: multiSend.getAddress(), + data: txnData + } + + const tx = this.signer.sendTransaction({ ...signedTx.rawTx, gasLimit: ethers.constants.Two.pow(24) }); + return tx; + // rawTx to becomes multiSend address and data gets prepared again + } + + const tx = this.signer.sendTransaction({ ...signedTx.rawTx, gasLimit: ethers.constants.Two.pow(24) }); return tx; } } \ No newline at end of file diff --git a/packages/relayer/src/utils/multisend.ts b/packages/relayer/src/utils/multisend.ts new file mode 100644 index 000000000..ca303e216 --- /dev/null +++ b/packages/relayer/src/utils/multisend.ts @@ -0,0 +1,103 @@ +import { Contract, BigNumber, BigNumberish, utils } from "ethers"; +import { TypedDataSigner } from "@ethersproject/abstract-signer"; +import { AddressZero } from "@ethersproject/constants"; + +export interface MetaTransaction { + to: string; + value: string | number | BigNumber; + data: string; + operation: number; +} + +export interface WalletTransaction { + to: string; + value: BigNumberish; + data: string; + operation: number; + targetTxGas: string | number; + baseGas: string | number; + gasPrice: string | number; + gasToken: string; + refundReceiver: string; + nonce: number +} + +export const buildContractCall = ( + contract: Contract, + method: string, + params: any[], + nonce: number, + delegateCall?: boolean, + overrides?: Partial +): WalletTransaction => { + const data = contract.interface.encodeFunctionData(method, params); + return buildWalletTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce, + }, + overrides + ) + ); +}; + +export const buildWalletTransaction = (template: { + to: string; + value?: BigNumberish; + data?: string; + operation?: number; + targetTxGas?: number | string; + baseGas?: number | string; + gasPrice?: number | string; + gasToken?: string; + refundReceiver?: string; + nonce: number; +}): WalletTransaction => { + return { + to: template.to, + value: template.value || 0, + data: template.data || "0x", + operation: template.operation || 0, + targetTxGas: template.targetTxGas || 0, + baseGas: template.baseGas || 0, + gasPrice: template.gasPrice || 0, + gasToken: template.gasToken || AddressZero, + refundReceiver: template.refundReceiver || AddressZero, + nonce: template.nonce, + }; +}; + +const encodeMetaTransaction = (tx: MetaTransaction): string => { + const data = utils.arrayify(tx.data); + const encoded = utils.solidityPack( + ["uint8", "address", "uint256", "uint256", "bytes"], + [tx.operation, tx.to, tx.value, data.length, data] + ); + return encoded.slice(2); +}; + +export const encodeMultiSend = (txs: MetaTransaction[]): string => { + return "0x" + txs.map((tx) => encodeMetaTransaction(tx)).join(""); +}; + +export const buildMultiSendSafeTx = ( + multiSend: Contract, + txs: MetaTransaction[], + nonce: number, + overrides?: Partial +): WalletTransaction => { + return buildContractCall( + multiSend, + "multiSend", + [encodeMultiSend(txs)], + nonce, + true, + overrides + ); +}; + + + diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 5ed420826..bb392d5ec 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -1,5 +1,5 @@ import { SmartAccountConfig, networks, ChainId, ChainConfig, - SmartAccountState, SmartAccountContext, Transaction, ZERO_ADDRESS, ChainConfigResponse } from './types' + SmartAccountContext, Transaction, ZERO_ADDRESS, ChainConfigResponse } from './types' import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer' import EthersAdapter from '@biconomy-sdk/ethers-lib' import { ethers, providers, Wallet } from 'ethers' @@ -13,7 +13,8 @@ import { SmartWalletContract, MultiSendContract, TransactionResult, - RawTransactionType + RawTransactionType, + SmartAccountState, } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionRequest, TransactionResponse } from '@ethersproject/providers'; import SafeServiceClient from '@biconomy-sdk/node-client'; @@ -57,6 +58,8 @@ class SmartAccount { address!: string + // Can make isDeployed a state variable + // contract instances smartWalletContract!: { [chainId: number]: SmartWalletContract } multiSendContract!: { [chainId: number]: MultiSendContract } @@ -150,10 +153,11 @@ class SmartAccount { } // return configuration used for intialization of the { wallet } instance - getSmartAccountConfig(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): ChainConfig { + // Review wording and need + /*getSmartAccountConfig(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): ChainConfig { // networks should come from chainConfig instead return this.chainConfig[chainId] - } + }*/ // Assigns transaction relayer to this smart wallet instance setRelayer(relayer: Relayer): SmartAccount { @@ -162,8 +166,29 @@ class SmartAccount { return this } + setActiveChain(chainId: ChainId): SmartAccount { + this.#smartAccountConfig.activeNetworkId = chainId; + return this; + } + // async sendSignedTransaction : must expect signature! // async sign + async signTransaction(tx: WalletTransaction, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + + let walletContract = this.smartAccount(chainId).getContract(); + walletContract = walletContract.attach(this.address); + + const { signer, data } = await safeSignMessage( + this.signer, + walletContract, + tx, + chainId + ); + + let signature = "0x"; + signature += data.slice(2); + return signature; + } // will get signer's signature @@ -196,15 +221,7 @@ class SmartAccount { let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); - const { signer, data } = await safeSignMessage( - this.signer, - walletContract, - tx, - chainId - ); - - let signature = "0x"; - signature += data.slice(2); + let signature = await this.signTransaction(tx); let execTransaction = await walletContract.populateTransaction.execTransaction( transaction, @@ -216,7 +233,14 @@ class SmartAccount { rawTx.to = this.address; rawTx.data = execTransaction.data; - const txn = await this.relayer.relay(rawTx); + const state = await this.getSmartAccountState(chainId); + + const signedTx = { + rawTx, + tx + } + + const txn = await this.relayer.relay(signedTx, state, this.getSmartAccountContext(chainId)); return txn; } @@ -226,10 +250,15 @@ class SmartAccount { async createSmartAccountTransaction(transaction: Transaction, batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); - const nonce = (await walletContract.getNonce(batchId)).toNumber(); + + // If the wallet is not deployed yet then nonce would be zero + // Review + let nonce = 0; + if(await this.isDeployed(chainId)) { + nonce = (await walletContract.getNonce(batchId)).toNumber(); + } console.log('nonce: ', nonce); - const walletTx: WalletTransaction = buildWalletTransaction({ to: transaction.to, // value: ethers.utils.parseEther("1"), @@ -241,6 +270,7 @@ class SmartAccount { }; // return smartaccount instance + // maybe call this basewallet or wallet smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { const smartWallet = this.smartWalletContract[chainId] const address = this.address; @@ -272,23 +302,27 @@ class SmartAccount { return await this.factory(chainId).isWalletExist(this.address); } + // sort of config async getSmartAccountState(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + const entryPoint = this.chainConfig.find(n => n.chainId === chainId)?.entryPoint; + const fallbackHandlerAddress = this.chainConfig.find(n => n.chainId === chainId)?.fallBackHandler; const state: SmartAccountState = { address: this.address, owner: this.owner, - isDeployed: await this.isDeployed(chainId) + isDeployed: await this.isDeployed(chainId), // could be set as state in init + entryPointAddress: entryPoint || '', + fallbackHandlerAddress: fallbackHandlerAddress || '' } return state; } - // append owner? - async getSmartAccountContext(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - const entryPoint = this.chainConfig.find(n => n.chainId === chainId)?.entryPoint; - const fallbackHandlerAddress = this.chainConfig.find(n => n.chainId === chainId)?.fallBackHandler; + // Instead of addresses should return contract instances + getSmartAccountContext(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartAccountContext { const context: SmartAccountContext = { - entryPointAddress: entryPoint || '', - fallbackHandlerAddress: fallbackHandlerAddress || '' - } + baseWallet: this.smartAccount(chainId), //might as well do getContract and attach and return contract + walletFactory: this.factory(chainId), + multiSend: this.multiSend(chainId) + } return context; } @@ -296,12 +330,12 @@ class SmartAccount { // accountConfiguration? // sendSignedTransaction // signMessage - // signTransaction - // getTokenBalances() + // Discuss about multichain aspect of relayer node url and clients // TODO: get details from backend config // more methods to fetch balance via backend -> indexer node + // getTokenBalances() /** * @param address Owner aka {EOA} address diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 8e476342b..ffcfd4651 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -1,5 +1,6 @@ import { BytesLike, Wallet, BigNumberish } from 'ethers'; import { ExternalProvider, Web3Provider } from '@ethersproject/providers'; +import { MultiSendContract, SmartWalletFactoryContract, SmartWalletContract } from '@biconomy-sdk/core-types'; // walletProvider: WalletProviderLike export interface SmartAccountConfig { @@ -26,14 +27,15 @@ export const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; export interface SmartAccountState { address: string, owner: string, - isDeployed: boolean + isDeployed: boolean, + entryPointAddress: string, + fallbackHandlerAddress: string, } export interface SmartAccountContext { - entryPointAddress: string, - fallbackHandlerAddress: string, - // multiSendAddress: string, - // multiSendObnlyCallAddress: string, + baseWallet: SmartWalletContract, + walletFactory: SmartWalletFactoryContract, + multiSend: MultiSendContract } // reference i could work on diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 49cc97b00..b98b836db 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -91,6 +91,7 @@ describe('Wallet integration', function () { console.log('wallet factory deployed at : ', walletFactory.address); console.log('multi send deployed at : ', multiSend.address); + // There must be a way to set wallet context before we go with init and deploy + txn tests // I'd have to deploy the contracts and set specs // const smartAccount = await wallet.init(); diff --git a/packages/smart-account/tests/utils/deploy.ts b/packages/smart-account/tests/utils/deploy.ts index b96e01d3f..9924bf02b 100644 --- a/packages/smart-account/tests/utils/deploy.ts +++ b/packages/smart-account/tests/utils/deploy.ts @@ -9,6 +9,7 @@ const MultiSendArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contra export async function deployWalletContracts( signer: ethers.Signer ): Promise<[Contract, Contract, Contract]> { + // could get these from type chain const smartWallet = (await new ethers.ContractFactory(SmartWalletArtifact.abi, SmartWalletArtifact.bytecode, signer).deploy( )) as unknown as Contract From 79730f838b10d0de3d9c1345c9029f859fbbad75 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 27 Jul 2022 07:56:57 +0530 Subject: [PATCH 0029/1247] added multisend-callonly --- .../contracts/MultiSendCallOnlyContract.ts | 8 +++ .../core-types/src/ethereumLibs/EthAdapter.ts | 2 + packages/core-types/src/index.ts | 1 + packages/core-types/src/types.ts | 4 +- packages/ethers-lib/contracts/Index.sol | 2 + .../scripts/generateTypechainFiles.ts | 1 + packages/ethers-lib/src/EthersAdapter.ts | 13 +++++ .../MultiSendCallOnlyEthersContract.ts | 32 ++++++++++ .../src/contracts/contractInstancesEthers.ts | 11 ++++ packages/relayer/src/local-relayer.ts | 14 +++-- packages/smart-account/src/SmartAccount.ts | 16 ++++- packages/smart-account/src/assets/index.ts | 58 +++++++++---------- packages/smart-account/src/types.ts | 5 +- .../src/utils/FetchContractsInfo.ts | 10 +++- 14 files changed, 138 insertions(+), 39 deletions(-) create mode 100644 packages/core-types/src/contracts/MultiSendCallOnlyContract.ts create mode 100644 packages/ethers-lib/src/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.ts diff --git a/packages/core-types/src/contracts/MultiSendCallOnlyContract.ts b/packages/core-types/src/contracts/MultiSendCallOnlyContract.ts new file mode 100644 index 000000000..af96287dc --- /dev/null +++ b/packages/core-types/src/contracts/MultiSendCallOnlyContract.ts @@ -0,0 +1,8 @@ +import { Contract } from '@ethersproject/contracts'; +import { Interface } from "@ethersproject/abi"; +export interface MultiSendCallOnlyContract { + getAddress(): string + getContract(): Contract + getInterface(): Interface + encode(methodName: any, params: any): string +} diff --git a/packages/core-types/src/ethereumLibs/EthAdapter.ts b/packages/core-types/src/ethereumLibs/EthAdapter.ts index d5d04bf67..6b64ba864 100644 --- a/packages/core-types/src/ethereumLibs/EthAdapter.ts +++ b/packages/core-types/src/ethereumLibs/EthAdapter.ts @@ -3,6 +3,7 @@ import { SingletonDeployment } from '@gnosis.pm/safe-deployments' import { SmartWalletContract } from 'contracts/SmartWalletContract' import { AbiItem } from 'web3-utils' import { MultiSendContract } from '../contracts/MultiSendContract' +import { MultiSendCallOnlyContract } from '../contracts/MultiSendCallOnlyContract' import { SmartWalletFactoryContract } from '../contracts/SmartWalletFactoryContract' import { SmartAccountVersion, Eip3770Address } from '../types' @@ -26,6 +27,7 @@ export interface EthAdapter { getChainId(): Promise getSmartWalletContract({ chainId, singletonDeployment }: GetContractProps): SmartWalletContract getMultiSendContract({ chainId, singletonDeployment }: GetContractProps): MultiSendContract + getMultiSendCallOnlyContract({ chainId, singletonDeployment }: GetContractProps): MultiSendCallOnlyContract getSmartWalletFactoryContract({ chainId, singletonDeployment diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts index 0c3bc7dfb..cafddfbf6 100644 --- a/packages/core-types/src/index.ts +++ b/packages/core-types/src/index.ts @@ -1,5 +1,6 @@ export * from './contracts/SmartWalletContract' export * from './contracts/MultiSendContract' +export * from './contracts/MultiSendCallOnlyContract' export * from './contracts/SmartWalletFactoryContract' export * from './contracts/EntryPointContract' export * from './ethereumLibs/EthAdapter' diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index e5dd96cba..963d8aa82 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -3,6 +3,7 @@ import { PromiEvent, TransactionReceipt } from 'web3-core/types' import { BigNumber, BigNumberish } from '@ethersproject/bignumber'; import { SmartWalletFactoryContract } from './contracts/SmartWalletFactoryContract'; import { MultiSendContract } from './contracts/MultiSendContract'; +import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract'; import { SmartWalletContract } from './contracts/SmartWalletContract'; export type SmartAccountVersion = '1.3.0' | '1.2.0' | '1.1.1' @@ -16,7 +17,8 @@ export enum OperationType { export interface SmartAccountContext { baseWallet: SmartWalletContract, walletFactory: SmartWalletFactoryContract, - multiSend: MultiSendContract + multiSend: MultiSendContract, + multiSendCall: MultiSendCallOnlyContract, } export interface SmartAccountState { diff --git a/packages/ethers-lib/contracts/Index.sol b/packages/ethers-lib/contracts/Index.sol index 7e8ad21e8..06dcbb5f4 100644 --- a/packages/ethers-lib/contracts/Index.sol +++ b/packages/ethers-lib/contracts/Index.sol @@ -4,6 +4,7 @@ pragma solidity >=0.4.0 <=0.8.15; import { WalletFactory } from "../scw-contracts/smart-contract-wallet/WalletFactory.sol"; import { SmartWallet } from "../scw-contracts/smart-contract-wallet/SmartWallet.sol"; import { MultiSend } from "../scw-contracts/smart-contract-wallet/libs/MultiSend.sol"; +import { MultiSendCallOnly } from "../scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; import { WhitelistModule } from "../scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol"; import { EntryPoint } from "../scw-contracts/references/aa-4337/EntryPoint.sol"; @@ -12,6 +13,7 @@ contract SmartWalletFactoryContract is WalletFactory { } contract SmartWalletContract is SmartWallet {} contract MultiSendContract is MultiSend {} +contract MultiSendCallOnlyContract is MultiSendCallOnly {} contract EntryPointContract is EntryPoint { constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} } diff --git a/packages/ethers-lib/scripts/generateTypechainFiles.ts b/packages/ethers-lib/scripts/generateTypechainFiles.ts index 295dd9e09..69cfc4e58 100644 --- a/packages/ethers-lib/scripts/generateTypechainFiles.ts +++ b/packages/ethers-lib/scripts/generateTypechainFiles.ts @@ -18,6 +18,7 @@ const safeContractsPath = './artifacts/contracts/index.sol' const safeContracts_V1_0_0 = [ `${safeContractsPath}/SmartWalletContract.json`, `${safeContractsPath}/MultiSendContract.json`, + `${safeContractsPath}/MultiSendCallOnlyContract.json`, `${safeContractsPath}/SmartWalletFactoryContract.json`, `${safeContractsPath}/EntryPointContract.json` ].join(' ') diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index 25e7bea45..089c68b14 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -13,11 +13,13 @@ import { validateEip3770Address } from '@gnosis.pm/safe-core-sdk-utils' import { ethers } from 'ethers' import { getMultiSendContractInstance, + getMultiSendCallOnlyContractInstance, getSmartWalletContractInstance, getSmartWalletFactoryContractInstance } from './contracts/contractInstancesEthers' import SmartWalletProxyFactoryEthersContract from './contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract' import MultiSendEthersContract from './contracts/MultiSend/MultiSendEthersContract' +import MultiSendCallOnlyEthersContract from './contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract' type Ethers = typeof ethers @@ -89,6 +91,17 @@ class EthersAdapter implements EthAdapter { return getMultiSendContractInstance(contractAddress, this.#provider) } + getMultiSendCallOnlyContract({ + chainId, + singletonDeployment + }: GetContractProps): MultiSendCallOnlyEthersContract { + const contractAddress = singletonDeployment?.networkAddresses[chainId] + if (!contractAddress) { + throw new Error('Invalid Multi Send contract address') + } + return getMultiSendCallOnlyContractInstance(contractAddress, this.#provider) + } + getSmartWalletFactoryContract({ chainId, singletonDeployment diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.ts new file mode 100644 index 000000000..9c1229d29 --- /dev/null +++ b/packages/ethers-lib/src/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.ts @@ -0,0 +1,32 @@ +import { MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' +import { + MultiSendCallOnlyContract as MultiSendCallOnly_TypeChain, + MultiSendCallOnlyContractInterface +} from '../../../typechain/src/ethers-v5/v1.0.0/MultiSendCallOnlyContract' +import { Contract } from '@ethersproject/contracts'; +import { Interface } from "@ethersproject/abi"; + +class MultiSendCallOnlyEthersContract implements MultiSendCallOnlyContract { + constructor(public contract: MultiSendCallOnly_TypeChain) {} + + getAddress(): string { + return this.contract.address + } + + getContract(): Contract { + return this.contract; + } + + getInterface(): Interface { + return this.contract.interface; + } + + encode: MultiSendCallOnlyContractInterface['encodeFunctionData'] = ( + methodName: any, + params: any + ): string => { + return this.contract.interface.encodeFunctionData(methodName, params) + } +} + +export default MultiSendCallOnlyEthersContract diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index 97b1d196e..14ab612c5 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -1,9 +1,11 @@ import { Signer } from '@ethersproject/abstract-signer' import { SmartWalletContract__factory as SmartWalletContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContract__factory' import { MultiSendContract__factory as MultiSendContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendContract__factory' +import { MultiSendCallOnlyContract__factory as MultiSendCallOnlyContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendCallOnlyContract__factory' import { SmartWalletFactoryContract__factory as SmartWalletFactoryContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFactoryContract__factory' import SmartWalletContractEthers from './SmartWallet/SmartWalletContractEthers' import MultiSendEthersContract from './MultiSend/MultiSendEthersContract' +import MultiSendCallOnlyEthersContract from './MultiSendCallOnly/MultiSendCallOnlyEthersContract' import SmartWalletFacoryContractEthers from './SmartWalletFactory/SmartWalletProxyFactoryEthersContract' import { JsonRpcProvider } from '@ethersproject/providers' @@ -26,6 +28,15 @@ export function getMultiSendContractInstance( return new MultiSendEthersContract(multiSendContract) } +export function getMultiSendCallOnlyContractInstance( + contractAddress: string, + // signer: Signer + provider: JsonRpcProvider +): MultiSendCallOnlyEthersContract { + let multiSendCallContract = MultiSendCallOnlyContract.connect(contractAddress, provider) + return new MultiSendCallOnlyEthersContract(multiSendCallContract) +} + export function getSmartWalletFactoryContractInstance( contractAddress: string, provider: JsonRpcProvider diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index fa19b730b..08e22082e 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -7,6 +7,7 @@ import { SmartWalletFactoryContract, SmartWalletContract, MultiSendContract, + MultiSendCallOnlyContract, TransactionResult, SmartAccountContext, SmartAccountState, @@ -80,12 +81,14 @@ export class LocalRelayer implements Relayer { // Should make an object that takes config and context // Add feeQuote later // Appending tx and rawTx may not be necessary + async relay(signedTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext) : Promise { const { isDeployed, address } = config; - const { multiSend } = context; + const { multiSendCall } = context; // multisend has to be multiSendCallOnly here! if(!isDeployed) { // If not =>> preprendWalletDeploy + console.log('here'); const {to, data} = this.prepareWalletDeploy(config,context); const originalTx:WalletTransaction = signedTx.tx; @@ -104,16 +107,19 @@ export class LocalRelayer implements Relayer { } ] - const txnData = multiSend.getInterface().encodeFunctionData("multiSend", [ + const txnData = multiSendCall.getInterface().encodeFunctionData("multiSend", [ encodeMultiSend(txs), ]); + console const finalRawRx = { - to: multiSend.getAddress(), + to: multiSendCall.getAddress(), data: txnData } + console.log('finaRawTx'); + console.log(finalRawRx); - const tx = this.signer.sendTransaction({ ...signedTx.rawTx, gasLimit: ethers.constants.Two.pow(24) }); + const tx = this.signer.sendTransaction({ ...finalRawRx, gasLimit: ethers.constants.Two.pow(24) }); return tx; // rawTx to becomes multiSend address and data gets prepared again } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index bb392d5ec..dbf3181db 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -6,12 +6,14 @@ import { ethers, providers, Wallet } from 'ethers' import { getSmartWalletFactoryContract, getMultiSendContract, + getMultiSendCallOnlyContract, getSmartWalletContract } from './utils/FetchContractsInfo' import { SmartWalletFactoryContract, SmartWalletContract, MultiSendContract, + MultiSendCallOnlyContract, TransactionResult, RawTransactionType, SmartAccountState, @@ -63,6 +65,7 @@ class SmartAccount { // contract instances smartWalletContract!: { [chainId: number]: SmartWalletContract } multiSendContract!: { [chainId: number]: MultiSendContract } + multiSendCallOnlyContract!: { [chainId: number]: MultiSendCallOnlyContract } smartWalletFactoryContract!: { [chainId: number]: SmartWalletFactoryContract } @@ -79,6 +82,7 @@ class SmartAccount { this.ethAdapter = {} this.smartWalletContract = {} this.multiSendContract = {} + this.multiSendCallOnlyContract = {} this.smartWalletFactoryContract = {} this.supportedNetworkIds = this.#smartAccountConfig.supportedNetworksIds; this.provider = walletProvider @@ -141,6 +145,11 @@ class SmartAccount { chainId, this.ethAdapter[chainId] ); + + this.multiSendCallOnlyContract[chainId] = getMultiSendCallOnlyContract( + chainId, + this.ethAdapter[chainId] + ); } private async getSupportedChainsInfo(): Promise { @@ -286,6 +295,10 @@ class SmartAccount { return this.multiSendContract[chainId] } + multiSendCall(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendCallOnlyContract { + return this.multiSendCallOnlyContract[chainId] + } + // Optional index allowed async getAddress(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId) : Promise { return await this.getAddressForCounterfactualWallet(index,chainId); @@ -321,7 +334,8 @@ class SmartAccount { const context: SmartAccountContext = { baseWallet: this.smartAccount(chainId), //might as well do getContract and attach and return contract walletFactory: this.factory(chainId), - multiSend: this.multiSend(chainId) + multiSend: this.multiSend(chainId), + multiSendCall: this.multiSendCall(chainId) } return context; } diff --git a/packages/smart-account/src/assets/index.ts b/packages/smart-account/src/assets/index.ts index cb2e9a206..b2c0d678e 100644 --- a/packages/smart-account/src/assets/index.ts +++ b/packages/smart-account/src/assets/index.ts @@ -1,39 +1,39 @@ export const MultiSend = { - "defaultAddress": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "defaultAddress": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", "released": true, "contractName": "MultiSend", "version": "1.0.0", "networkAddresses": { - "1": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "4": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "5": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "42": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "88": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "100": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "246": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", - "73799": "0x8D29bE29923b68abfDD21e541b9374737B49cdAD", + "1": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", + "4": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", + "5": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", + "42": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", + "88": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", + "100": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", + "246": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", + "73799": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", "31338": "0x1A3F36c656Da24c18C703B8c2d1829F5D32E8E49", }, - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - } - ], - "name": "multiSend", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ] + "abi": [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes","name":"transactions","type":"bytes"}],"name":"multiSend","outputs":[],"stateMutability":"payable","type":"function"}] + } + + export const MultiSendCallOnly = { + "defaultAddress": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "released": true, + "contractName": "MultiSendCallOnly", + "version": "1.0.0", + "networkAddresses": { + "1": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "4": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "5": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "42": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "88": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "100": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "246": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "73799": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "31338": "0x1A3F36c656Da24c18C703B8c2d1829F5D32E8E49", + }, + "abi": [{"inputs":[{"internalType":"bytes","name":"transactions","type":"bytes"}],"name":"multiSend","outputs":[],"stateMutability":"payable","type":"function"}] } export const SmartWallet = { diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index ffcfd4651..092cdee7a 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -1,6 +1,6 @@ import { BytesLike, Wallet, BigNumberish } from 'ethers'; import { ExternalProvider, Web3Provider } from '@ethersproject/providers'; -import { MultiSendContract, SmartWalletFactoryContract, SmartWalletContract } from '@biconomy-sdk/core-types'; +import { MultiSendContract, SmartWalletFactoryContract, SmartWalletContract, MultiSendCallOnlyContract } from '@biconomy-sdk/core-types'; // walletProvider: WalletProviderLike export interface SmartAccountConfig { @@ -35,7 +35,8 @@ export interface SmartAccountState { export interface SmartAccountContext { baseWallet: SmartWalletContract, walletFactory: SmartWalletFactoryContract, - multiSend: MultiSendContract + multiSend: MultiSendContract, + multiSendCall: MultiSendCallOnlyContract } // reference i could work on diff --git a/packages/smart-account/src/utils/FetchContractsInfo.ts b/packages/smart-account/src/utils/FetchContractsInfo.ts index fcb321451..cd628d42a 100644 --- a/packages/smart-account/src/utils/FetchContractsInfo.ts +++ b/packages/smart-account/src/utils/FetchContractsInfo.ts @@ -1,5 +1,5 @@ -import { SmartWalletContract, SmartWalletFactoryContract, MultiSendContract } from '@biconomy-sdk/core-types' -import { WalletFactory, SmartWallet, MultiSend } from '../assets/index' +import { SmartWalletContract, SmartWalletFactoryContract, MultiSendContract, MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' +import { WalletFactory, SmartWallet, MultiSend, MultiSendCallOnly } from '../assets/index' import EthersAdapter from '@biconomy-sdk/ethers-lib' @@ -18,6 +18,12 @@ export function getMultiSendContract( ): MultiSendContract { return ethAdapter.getMultiSendContract({ chainId, singletonDeployment: MultiSend }) } +export function getMultiSendCallOnlyContract( + chainId: number, + ethAdapter: EthersAdapter +): MultiSendCallOnlyContract { + return ethAdapter.getMultiSendCallOnlyContract({ chainId, singletonDeployment: MultiSendCallOnly }) +} export function getSmartWalletContract( chainId: number, ethAdapter: EthersAdapter From 6ce28be7198da6108ff61daeb754d0d665357bb6 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 27 Jul 2022 15:38:41 +0530 Subject: [PATCH 0030/1247] testcase update --- .../smart-account/tests/smartaccount.spec.ts | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index b98b836db..101515fdc 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -38,7 +38,7 @@ describe('Wallet integration', function () { beforeEach(async () => { }) - + after(async () => { }) @@ -64,37 +64,45 @@ describe('Wallet integration', function () { const eoaSigner = ethnode.provider?.getSigner() - if(eoaSigner) { + if (eoaSigner) { const eoa = await eoaSigner.getAddress(); console.log('eoa ', eoa); } - const wallet = new SmartAccount(ethnode.provider,{ - activeNetworkId: ChainId.HARDHAT, - supportedNetworksIds: [ChainId.HARDHAT], // has to be consisttent providers and network names + const wallet = new SmartAccount(ethnode.provider, { + activeNetworkId: ChainId.RINKEBY, + supportedNetworksIds: [ChainId.RINKEBY], // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backend_url: "http://localhost:3000/v1" }); - //const smartAccount = await wallet.init(); + // adds entry point, multiSendCall and fallbackHandler + // const [ smartWallet, walletFactory, multiSend ] = await deployWalletContracts(ethnode.signer); - //console.log(smartAccount.owner); + /*console.log('base wallet deployed at : ', smartWallet.address); + console.log('wallet factory deployed at : ', walletFactory.address); + console.log('multi send deployed at : ', multiSend.address);*/ - const [ smartWallet, walletFactory, multiSend ] = await deployWalletContracts(ethnode.signer); + // There must be a way to set wallet context before we go with init and deploy + txn tests - let isContract = false; - const code = await ethnode.provider?.getCode("0x0ba464506a3D66C962121e3C25ed56678A2585B6") || ''; - if(code.slice(2).length > 0) isContract = true; - console.log(isContract); + // I'd have to deploy the contracts and set specs + const smartAccount = await wallet.init(); + console.log(wallet.owner); - console.log('base wallet deployed at : ', smartWallet.address); - console.log('wallet factory deployed at : ', walletFactory.address); - console.log('multi send deployed at : ', multiSend.address); - - // There must be a way to set wallet context before we go with init and deploy + txn tests + console.log(smartAccount.smartAccount(ChainId.RINKEBY).getAddress()); + console.log(smartAccount.factory(ChainId.RINKEBY).getAddress()); - // I'd have to deploy the contracts and set specs - // const smartAccount = await wallet.init(); + const signer = await smartAccount.ethersAdapter().getSignerAddress(); + + const address = await smartAccount.getAddress(); + console.log('counter factual wallet address: ', address); + + const isDeployed = await smartAccount.isDeployed(); /// can pass chainId here + // Check if the smart wallet is deployed or not + const state = await smartAccount.getSmartAccountState(); + console.log('wallet state'); + console.log(state); + expect(isDeployed).to.be.equal(false) }) }) }) From 8665d987aa209be7dab7f8999ba45c821e3081db Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 28 Jul 2022 11:46:56 +0530 Subject: [PATCH 0031/1247] dev notes --- packages/smart-account/src/SmartAccount.ts | 41 +++++++++++++++++++++- packages/smart-account/src/types.ts | 1 + 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index dbf3181db..7a182efb5 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -72,6 +72,8 @@ class SmartAccount { // Review :: ToDo // To be able to passs provider : WalletProviderLike // in mexa sdk we have ExternalProvider + + //TODO : Discuss regarding provider urls constructor(walletProvider:Web3Provider ,config?: Partial) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } @@ -89,12 +91,14 @@ class SmartAccount { this.signer = walletProvider.getSigner(); this.nodeClient = new SafeServiceClient({txServiceUrl: this.#smartAccountConfig.backend_url}); + // Use this.relayer with relayer service URL } // for testing // providers and contracts initialization + // TODO: Error handling with proper message and docs hint if some function is called without init public async init(): Promise { - const chainConfig = (await this.getSupportedChainsInfo()).data; + const chainConfig = (await this.getSupportedChainsInfo()).data; this.chainConfig = chainConfig; console.log("chain config: ", chainConfig); // instead of getting from networks, get details from chainConfig @@ -180,6 +184,8 @@ class SmartAccount { return this; } + // Transaction methods might move into different module/package + // async sendSignedTransaction : must expect signature! // async sign async signTransaction(tx: WalletTransaction, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { @@ -203,6 +209,13 @@ class SmartAccount { // will get signer's signature // TODO: // Signer should be able to use _typedSignData + /** + * + * @param tx + * @param batchId + * @param chainId + * @returns + */ async sendTransaction(tx:WalletTransaction, batchId:number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let rawTx: RawTransactionType = { to: tx.to, @@ -256,6 +269,13 @@ class SmartAccount { // Todo : rename // This transaction is without fee refund (gasless) // We need to have identifiers for these txns + /** + * + * @param transaction + * @param batchId + * @param chainId + * @returns + */ async createSmartAccountTransaction(transaction: Transaction, batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); @@ -295,11 +315,23 @@ class SmartAccount { return this.multiSendContract[chainId] } + /** + * + * @param chainId + * @returns + */ multiSendCall(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendCallOnlyContract { return this.multiSendCallOnlyContract[chainId] } // Optional index allowed + /** + * @description + * @notice + * @param index + * @param chainId + * @returns + */ async getAddress(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId) : Promise { return await this.getAddressForCounterfactualWallet(index,chainId); } @@ -330,6 +362,11 @@ class SmartAccount { } // Instead of addresses should return contract instances + /** + * + * @param chainId + * @returns + */ getSmartAccountContext(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartAccountContext { const context: SmartAccountContext = { baseWallet: this.smartAccount(chainId), //might as well do getContract and attach and return contract @@ -351,6 +388,8 @@ class SmartAccount { // more methods to fetch balance via backend -> indexer node // getTokenBalances() + // @notice : instead of just reading from contract this should come from backend (given owner and index) + // this API would be able to check history of owner, contract updates and read from chain /** * @param address Owner aka {EOA} address * @param index number of smart account deploy i.e {0, 1 ,2 ...} diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 092cdee7a..009d73f85 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -9,6 +9,7 @@ export interface SmartAccountConfig { // walletProvider: Web3Provider // getting provider that can sign messages backend_url: string } +// array of provider urls for supperted networks? // TODO // Review location, usage and name of types From 16c9446ae84e371eb5a651d3c0338a07d3c94105 Mon Sep 17 00:00:00 2001 From: talha Date: Fri, 29 Jul 2022 02:55:55 +0500 Subject: [PATCH 0032/1247] apis integration and safe name modification and formatting --- packages/core-types/package-lock.json | 2480 ++++++++ .../src/contracts/EntryPointContract.ts | 2 +- .../contracts/MultiSendCallOnlyContract.ts | 4 +- .../src/contracts/MultiSendContract.ts | 4 +- .../src/contracts/SmartWalletContract.ts | 7 +- .../contracts/SmartWalletFactoryContract.ts | 6 +- .../core-types/src/ethereumLibs/EthAdapter.ts | 5 +- packages/core-types/src/types.ts | 94 +- packages/ethers-lib/package-lock.json | 5028 ++++++++++++++++ .../EntryPointEthersContract.ts | 4 +- .../MultiSend/MultiSendEthersContract.ts | 8 +- .../MultiSendCallOnlyEthersContract.ts | 8 +- .../SmartWallet/SmartWalletContractEthers.ts | 15 +- .../SmartWalletProxyFactoryEthersContract.ts | 16 +- packages/node-client/package-lock.json | 5214 +++++++++++++++++ packages/node-client/src/INodeClient.ts | 40 + packages/node-client/src/NodeClient.ts | 119 + packages/node-client/src/SafeServiceClient.ts | 670 --- .../node-client/src/SafeTransactionService.ts | 92 - packages/node-client/src/index.ts | 8 +- .../node-client/src/types/NodeClientTypes.ts | 158 + .../src/types/safeTransactionServiceTypes.ts | 362 -- .../tests/utils/setupServiceClient.ts | 6 +- packages/relayer/package-lock.json | 2852 +++++++++ packages/relayer/package.json | 4 +- packages/relayer/src/index.ts | 31 +- packages/relayer/src/local-relayer.ts | 204 +- packages/relayer/src/utils/multisend.ts | 158 +- packages/smart-account/package-lock.json | 5027 ++++++++++++++++ packages/smart-account/src/SmartAccount.ts | 269 +- packages/smart-account/src/assets/index.ts | 2437 ++++---- packages/smart-account/src/types.ts | 49 +- .../src/utils/FetchContractsInfo.ts | 12 +- .../smart-account/tests/smartaccount.spec.ts | 58 +- packages/smart-account/tests/utils/deploy.ts | 40 +- packages/smart-account/tests/utils/index.ts | 10 +- packages/transactions/package-lock.json | 505 ++ packages/transactions/package.json | 7 +- packages/transactions/src/execution.ts | 545 +- packages/transactions/src/index.ts | 2 +- packages/transactions/src/multisend.ts | 45 +- packages/transactions/src/types.ts | 26 +- packages/transactions/src/utils.ts | 95 +- 43 files changed, 23525 insertions(+), 3201 deletions(-) create mode 100644 packages/core-types/package-lock.json create mode 100644 packages/ethers-lib/package-lock.json create mode 100644 packages/node-client/package-lock.json create mode 100644 packages/node-client/src/INodeClient.ts create mode 100644 packages/node-client/src/NodeClient.ts delete mode 100644 packages/node-client/src/SafeServiceClient.ts delete mode 100644 packages/node-client/src/SafeTransactionService.ts create mode 100644 packages/node-client/src/types/NodeClientTypes.ts delete mode 100644 packages/node-client/src/types/safeTransactionServiceTypes.ts create mode 100644 packages/relayer/package-lock.json create mode 100644 packages/smart-account/package-lock.json create mode 100644 packages/transactions/package-lock.json diff --git a/packages/core-types/package-lock.json b/packages/core-types/package-lock.json new file mode 100644 index 000000000..44d2b0500 --- /dev/null +++ b/packages/core-types/package-lock.json @@ -0,0 +1,2480 @@ +{ + "name": "@biconomy-sdk/core-types", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "requires": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + }, + "@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@gnosis.pm/safe-deployments": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", + "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", + "requires": { + "semver": "^7.3.7" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", + "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" + } + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true + }, + "@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", + "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" + } + } + }, + "@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", + "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" + } + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.31.0.tgz", + "integrity": "sha512-VKW4JPHzG5yhYQrQ1AzXgVgX8ZAJEvCz0QI6mLRX4tf7rnFfh5D8SKm0Pq6w5PyNfAWJk6sv313+nEt3ohWMBQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.31.0", + "@typescript-eslint/type-utils": "5.31.0", + "@typescript-eslint/utils": "5.31.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.31.0.tgz", + "integrity": "sha512-UStjQiZ9OFTFReTrN+iGrC6O/ko9LVDhreEK5S3edmXgR396JGq7CoX2TWIptqt/ESzU2iRKXAHfSF2WJFcWHw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.31.0", + "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/typescript-estree": "5.31.0", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz", + "integrity": "sha512-8jfEzBYDBG88rcXFxajdVavGxb5/XKXyvWgvD8Qix3EEJLCFIdVloJw+r9ww0wbyNLOTYyBsR+4ALNGdlalLLg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/visitor-keys": "5.31.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz", + "integrity": "sha512-7ZYqFbvEvYXFn9ax02GsPcEOmuWNg+14HIf4q+oUuLnMbpJ6eHAivCg7tZMVwzrIuzX3QCeAOqKoyMZCv5xe+w==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.31.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/types": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.31.0.tgz", + "integrity": "sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz", + "integrity": "sha512-3S625TMcARX71wBc2qubHaoUwMEn+l9TCsaIzYI/ET31Xm2c9YQ+zhGgpydjorwQO9pLfR/6peTzS/0G3J/hDw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/visitor-keys": "5.31.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.31.0.tgz", + "integrity": "sha512-kcVPdQS6VIpVTQ7QnGNKMFtdJdvnStkqS5LeALr4rcwx11G6OWb2HB17NMPnlRHvaZP38hL9iK8DdE9Fne7NYg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.31.0", + "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/typescript-estree": "5.31.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz", + "integrity": "sha512-ZK0jVxSjS4gnPirpVjXHz7mgdOsZUHzNYSfTw2yPa3agfbt9YfqaBiBZFSSxeBWnpWkzCxTfUpnzA3Vily/CSg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.31.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", + "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@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": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node-gyp-build": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "requires": { + "http-https": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "utf-8-validate": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "web3-core": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", + "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", + "requires": { + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-requestmanager": "1.7.4", + "web3-utils": "1.7.4" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + } + } + }, + "web3-core-helpers": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", + "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", + "requires": { + "web3-eth-iban": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-method": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", + "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", + "requires": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-promievent": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", + "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-core-requestmanager": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", + "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", + "requires": { + "util": "^0.12.0", + "web3-core-helpers": "1.7.4", + "web3-providers-http": "1.7.4", + "web3-providers-ipc": "1.7.4", + "web3-providers-ws": "1.7.4" + } + }, + "web3-core-subscriptions": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", + "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4" + } + }, + "web3-eth-iban": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", + "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.7.4" + } + }, + "web3-providers-http": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", + "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", + "requires": { + "web3-core-helpers": "1.7.4", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", + "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.7.4" + } + }, + "web3-providers-ws": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", + "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4", + "websocket": "^1.0.32" + } + }, + "web3-utils": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", + "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + }, + "websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", + "requires": { + "cookiejar": "^2.1.1" + } + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/packages/core-types/src/contracts/EntryPointContract.ts b/packages/core-types/src/contracts/EntryPointContract.ts index ba6532c8e..052dc3d31 100644 --- a/packages/core-types/src/contracts/EntryPointContract.ts +++ b/packages/core-types/src/contracts/EntryPointContract.ts @@ -1,5 +1,5 @@ import { UserOperation, TransactionResult } from '../types' -import { Contract } from '@ethersproject/contracts'; +import { Contract } from '@ethersproject/contracts' export interface EntryPointContract { getContract(): Contract diff --git a/packages/core-types/src/contracts/MultiSendCallOnlyContract.ts b/packages/core-types/src/contracts/MultiSendCallOnlyContract.ts index af96287dc..93805ba69 100644 --- a/packages/core-types/src/contracts/MultiSendCallOnlyContract.ts +++ b/packages/core-types/src/contracts/MultiSendCallOnlyContract.ts @@ -1,5 +1,5 @@ -import { Contract } from '@ethersproject/contracts'; -import { Interface } from "@ethersproject/abi"; +import { Contract } from '@ethersproject/contracts' +import { Interface } from '@ethersproject/abi' export interface MultiSendCallOnlyContract { getAddress(): string getContract(): Contract diff --git a/packages/core-types/src/contracts/MultiSendContract.ts b/packages/core-types/src/contracts/MultiSendContract.ts index eeee6bb43..e59724549 100644 --- a/packages/core-types/src/contracts/MultiSendContract.ts +++ b/packages/core-types/src/contracts/MultiSendContract.ts @@ -1,5 +1,5 @@ -import { Contract } from '@ethersproject/contracts'; -import { Interface } from "@ethersproject/abi"; +import { Contract } from '@ethersproject/contracts' +import { Interface } from '@ethersproject/abi' export interface MultiSendContract { getAddress(): string getContract(): Contract diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index 112dde5cf..98c871da4 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -9,9 +9,8 @@ import { FeeRefund } from '../types' import { BigNumber } from '@ethersproject/bignumber' -import { Interface } from "@ethersproject/abi"; -import { Contract } from '@ethersproject/contracts'; - +import { Interface } from '@ethersproject/abi' +import { Contract } from '@ethersproject/contracts' // TODO // Rename @@ -19,7 +18,7 @@ export interface SmartWalletContract { getAddress(): string getContract(): Contract getInterface(): Interface - setAddress(address:string): any + setAddress(address: string): any getOwner(): Promise getVersion(): Promise getNonce(batchId: number): Promise diff --git a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts index 513ba0549..4353dd143 100644 --- a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts +++ b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts @@ -1,11 +1,11 @@ import { TransactionResult } from '../types' -import { Interface } from "@ethersproject/abi"; -import { Contract } from '@ethersproject/contracts'; +import { Interface } from '@ethersproject/abi' +import { Contract } from '@ethersproject/contracts' export interface SmartWalletFactoryContract { getInterface(): Interface getAddress(): string getContract(): Contract - isWalletExist(wallet:string): Promise + isWalletExist(wallet: string): Promise deployCounterFactualWallet( owner: string, entryPoint: string, diff --git a/packages/core-types/src/ethereumLibs/EthAdapter.ts b/packages/core-types/src/ethereumLibs/EthAdapter.ts index 6b64ba864..4b0bcfeda 100644 --- a/packages/core-types/src/ethereumLibs/EthAdapter.ts +++ b/packages/core-types/src/ethereumLibs/EthAdapter.ts @@ -27,7 +27,10 @@ export interface EthAdapter { getChainId(): Promise getSmartWalletContract({ chainId, singletonDeployment }: GetContractProps): SmartWalletContract getMultiSendContract({ chainId, singletonDeployment }: GetContractProps): MultiSendContract - getMultiSendCallOnlyContract({ chainId, singletonDeployment }: GetContractProps): MultiSendCallOnlyContract + getMultiSendCallOnlyContract({ + chainId, + singletonDeployment + }: GetContractProps): MultiSendCallOnlyContract getSmartWalletFactoryContract({ chainId, singletonDeployment diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 963d8aa82..d1fe410e2 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -1,10 +1,10 @@ import { ContractTransaction } from '@ethersproject/contracts' import { PromiEvent, TransactionReceipt } from 'web3-core/types' -import { BigNumber, BigNumberish } from '@ethersproject/bignumber'; -import { SmartWalletFactoryContract } from './contracts/SmartWalletFactoryContract'; -import { MultiSendContract } from './contracts/MultiSendContract'; -import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract'; -import { SmartWalletContract } from './contracts/SmartWalletContract'; +import { BigNumber, BigNumberish } from '@ethersproject/bignumber' +import { SmartWalletFactoryContract } from './contracts/SmartWalletFactoryContract' +import { MultiSendContract } from './contracts/MultiSendContract' +import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' +import { SmartWalletContract } from './contracts/SmartWalletContract' export type SmartAccountVersion = '1.3.0' | '1.2.0' | '1.1.1' @@ -15,57 +15,57 @@ export enum OperationType { // Temp export interface SmartAccountContext { - baseWallet: SmartWalletContract, - walletFactory: SmartWalletFactoryContract, - multiSend: MultiSendContract, - multiSendCall: MultiSendCallOnlyContract, + baseWallet: SmartWalletContract + walletFactory: SmartWalletFactoryContract + multiSend: MultiSendContract + multiSendCall: MultiSendCallOnlyContract } export interface SmartAccountState { - address: string, - owner: string, - isDeployed: boolean, - entryPointAddress: string, - fallbackHandlerAddress: string, + address: string + owner: string + isDeployed: boolean + entryPointAddress: string + fallbackHandlerAddress: string } // TODO // Review location , names and usage of all types export interface RawTransactionType { - from?: string; - gasPrice?: string | BigNumber; - maxFeePerGas?: string | BigNumber; - maxPriorityFeePerGas?: string | BigNumber; - gasLimit?: string; - to: string; - value: BigNumberish; - data?: string; - chainId: number; - nonce?: number | string; + from?: string + gasPrice?: string | BigNumber + maxFeePerGas?: string | BigNumber + maxPriorityFeePerGas?: string | BigNumber + gasLimit?: string + to: string + value: BigNumberish + data?: string + chainId: number + nonce?: number | string // accessList?: AccessListItem[]; - type?: number; -}; + type?: number +} export interface SignedTransaction { - rawTx: RawTransactionType, + rawTx: RawTransactionType tx: WalletTransaction } export interface ExecTransaction { - to: string; - value: BigNumberish; - data: string; - operation: number; - targetTxGas: string | number; -}; + to: string + value: BigNumberish + data: string + operation: number + targetTxGas: string | number +} export interface FeeRefund { - baseGas: string | number; - gasPrice: string | number; - gasToken: string; - refundReceiver: string; -}; + baseGas: string | number + gasPrice: string | number + gasToken: string + refundReceiver: string +} export interface MetaTransactionData { readonly to: string @@ -94,15 +94,15 @@ export interface SmartAccountTrxDataPartial extends MetaTransactionData { } export interface WalletTransaction { - to: string; - value: BigNumberish; - data: string; - operation: number; - targetTxGas: string | number; - baseGas: string | number; - gasPrice: string | number; - gasToken: string; - refundReceiver: string; + to: string + value: BigNumberish + data: string + operation: number + targetTxGas: string | number + baseGas: string | number + gasPrice: string | number + gasToken: string + refundReceiver: string nonce: number } diff --git a/packages/ethers-lib/package-lock.json b/packages/ethers-lib/package-lock.json new file mode 100644 index 000000000..a2e8ce487 --- /dev/null +++ b/packages/ethers-lib/package-lock.json @@ -0,0 +1,5028 @@ +{ + "name": "@biconomy-sdk/ethers-lib", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@ethereumjs/block": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", + "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "ethereumjs-util": "^7.1.5", + "merkle-patricia-tree": "^4.2.4" + } + }, + "@ethereumjs/blockchain": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", + "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/ethash": "^1.1.0", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "level-mem": "^5.0.1", + "lru-cache": "^5.1.1", + "semaphore-async-await": "^1.5.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/ethash": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", + "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.5.0", + "@types/levelup": "^4.3.0", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.1.1", + "miller-rabin": "^4.0.0" + }, + "dependencies": { + "buffer-xor": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", + "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + } + } + }, + "@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/vm": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", + "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.3", + "@ethereumjs/blockchain": "^5.5.3", + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "async-eventemitter": "^0.2.4", + "core-js-pure": "^3.0.1", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "merkle-patricia-tree": "^4.2.4", + "rustbn.js": "~0.2.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/basex": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", + "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "requires": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/hdnode": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", + "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/json-wallets": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", + "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + }, + "@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", + "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/sha2": "^5.6.1" + } + }, + "@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/providers": { + "version": "5.6.8", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", + "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", + "dev": true, + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "@ethersproject/random": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", + "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/sha2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" + } + }, + "@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/solidity": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/units": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", + "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/wallet": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", + "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", + "dev": true, + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/wordlists": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", + "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@gnosis.pm/safe-core-sdk-types": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.2.1.tgz", + "integrity": "sha512-K2kTGk1FNKlCJtuDqbFrRPNxot/4dQPiI2pnquGJchpJXIMflKb7xPcjDY5CPTYlBG3lCoQ9ZRk7Ytlu66TcSQ==", + "requires": { + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/contracts": "^5.6.0", + "@gnosis.pm/safe-deployments": "1.15.0", + "web3-core": "^1.7.1" + } + }, + "@gnosis.pm/safe-core-sdk-utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.2.1.tgz", + "integrity": "sha512-VPnSLayGR4omwcNHPwzx8/aDyGXrWULKSF+ENeiWbmwgIhwQnB7T2gzhArNeUgt4BxmYft/HFm1MRSqiQnIQJw==", + "requires": { + "@gnosis.pm/safe-core-sdk-types": "^1.2.1", + "semver": "^7.3.7", + "web3-utils": "^1.7.1" + } + }, + "@gnosis.pm/safe-deployments": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", + "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", + "requires": { + "semver": "^7.3.7" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dev": true, + "requires": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", + "dev": true + }, + "@noble/secp256k1": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", + "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nomiclabs/hardhat-ethers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.0.tgz", + "integrity": "sha512-vlW90etB3675QWG7tMrHaDoTa7ymMB7irM4DAQ98g8zJoe9YqEggeDnbO6v5b+BLth/ty4vN6Ko/kaqRN1krHw==", + "dev": true + }, + "@nomiclabs/hardhat-waffle": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", + "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", + "dev": true, + "requires": { + "@types/sinon-chai": "^3.2.3", + "@types/web3": "1.0.19" + } + }, + "@openzeppelin/contracts": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.2.tgz", + "integrity": "sha512-4n/JL9izql8303mPqPdubuna/DWEMbmOzWYUWyCPhjhiEr2w3nQrjE7vZz1fBF+wzzP6dZbIcsgqACk53c9FGA==" + }, + "@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "dev": true + }, + "@scure/bip32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", + "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", + "dev": true, + "requires": { + "@noble/hashes": "~1.1.1", + "@noble/secp256k1": "~1.6.0", + "@scure/base": "~1.1.0" + } + }, + "@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", + "dev": true, + "requires": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" + } + }, + "@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "requires": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "requires": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + } + }, + "@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true + }, + "@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "requires": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@solidity-parser/parser": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", + "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", + "dev": true, + "requires": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "@typechain/ethers-v5": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz", + "integrity": "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + } + }, + "@types/abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "dev": true + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", + "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" + } + } + }, + "@types/chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/level-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", + "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", + "dev": true + }, + "@types/levelup": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", + "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", + "dev": true, + "requires": { + "@types/abstract-leveldown": "*", + "@types/level-errors": "*", + "@types/node": "*" + } + }, + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true + }, + "@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", + "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" + } + } + }, + "@types/prettier": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz", + "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==", + "dev": true + }, + "@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", + "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" + } + } + }, + "@types/sinon": { + "version": "10.0.13", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", + "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", + "dev": true, + "requires": { + "@types/sinonjs__fake-timers": "*" + } + }, + "@types/sinon-chai": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, + "@types/underscore": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", + "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", + "dev": true + }, + "@types/web3": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", + "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", + "dev": true, + "requires": { + "@types/bn.js": "*", + "@types/underscore": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.31.0.tgz", + "integrity": "sha512-VKW4JPHzG5yhYQrQ1AzXgVgX8ZAJEvCz0QI6mLRX4tf7rnFfh5D8SKm0Pq6w5PyNfAWJk6sv313+nEt3ohWMBQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.31.0", + "@typescript-eslint/type-utils": "5.31.0", + "@typescript-eslint/utils": "5.31.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.31.0.tgz", + "integrity": "sha512-UStjQiZ9OFTFReTrN+iGrC6O/ko9LVDhreEK5S3edmXgR396JGq7CoX2TWIptqt/ESzU2iRKXAHfSF2WJFcWHw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.31.0", + "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/typescript-estree": "5.31.0", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz", + "integrity": "sha512-8jfEzBYDBG88rcXFxajdVavGxb5/XKXyvWgvD8Qix3EEJLCFIdVloJw+r9ww0wbyNLOTYyBsR+4ALNGdlalLLg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/visitor-keys": "5.31.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz", + "integrity": "sha512-7ZYqFbvEvYXFn9ax02GsPcEOmuWNg+14HIf4q+oUuLnMbpJ6eHAivCg7tZMVwzrIuzX3QCeAOqKoyMZCv5xe+w==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.31.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/types": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.31.0.tgz", + "integrity": "sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz", + "integrity": "sha512-3S625TMcARX71wBc2qubHaoUwMEn+l9TCsaIzYI/ET31Xm2c9YQ+zhGgpydjorwQO9pLfR/6peTzS/0G3J/hDw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/visitor-keys": "5.31.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.31.0.tgz", + "integrity": "sha512-kcVPdQS6VIpVTQ7QnGNKMFtdJdvnStkqS5LeALr4rcwx11G6OWb2HB17NMPnlRHvaZP38hL9iK8DdE9Fne7NYg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.31.0", + "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/typescript-estree": "5.31.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz", + "integrity": "sha512-ZK0jVxSjS4gnPirpVjXHz7mgdOsZUHzNYSfTw2yPa3agfbt9YfqaBiBZFSSxeBWnpWkzCxTfUpnzA3Vily/CSg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.31.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "abstract-leveldown": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true + }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "dev": true, + "requires": { + "async": "^2.4.0" + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "dev": true + }, + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "requires": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true + }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, + "core-js-pure": { + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.0.tgz", + "integrity": "sha512-uzMmW8cRh7uYw4JQtzqvGWRyC2T5+4zipQLQdi2FmiRqP83k3d6F3stv2iAlNhOs6cXN401FCD5TL0vvleuHgA==", + "dev": true + }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "dev": true, + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + } + } + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "dev": true, + "requires": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", + "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dev": true, + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "ethers": { + "version": "5.6.9", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", + "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", + "dev": true, + "requires": { + "@ethersproject/abi": "5.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@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": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "requires": { + "array-back": "^3.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "hardhat": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.10.1.tgz", + "integrity": "sha512-0FN9TyCtn7Lt25SB2ei2G7nA2rZjP+RN6MvFOm+zYwherxLZNo6RbD8nDz88eCbhRapevmXqOiL2nM8INKsjmA==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/blockchain": "^5.5.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/tx": "^3.5.1", + "@ethereumjs/vm": "^5.9.0", + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@sentry/node": "^5.18.1", + "@solidity-parser/parser": "^0.14.2", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "abort-controller": "^3.0.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^7.1.4", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "lodash": "^4.17.11", + "merkle-patricia-tree": "^4.2.4", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "qs": "^6.7.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "slash": "^3.0.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "true-case-path": "^2.2.1", + "tsort": "0.0.1", + "undici": "^5.4.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dev": true, + "requires": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "requires": { + "fp-ts": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, + "requires": { + "buffer": "^5.6.0" + } + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dev": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + } + }, + "level-mem": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", + "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", + "dev": true, + "requires": { + "level-packager": "^5.0.3", + "memdown": "^5.0.0" + } + }, + "level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "dev": true, + "requires": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, + "requires": { + "xtend": "^4.0.2" + } + }, + "level-ws": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" + } + }, + "levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "dev": true, + "requires": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "dev": true + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "memdown": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", + "dev": true, + "requires": { + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", + "dev": true + } + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "merkle-patricia-tree": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", + "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", + "dev": true, + "requires": { + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "requires": { + "obliterator": "^2.0.0" + } + }, + "mocha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node-gyp-build": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true + }, + "oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "requires": { + "http-https": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "semaphore-async-await": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", + "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "dev": true, + "requires": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, + "requires": { + "type-fest": "^0.7.1" + }, + "dependencies": { + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true + } + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "true-case-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", + "dev": true + }, + "ts-command-line-args": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz", + "integrity": "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + } + }, + "ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true + }, + "tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typechain": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz", + "integrity": "sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ==", + "dev": true, + "requires": { + "@types/prettier": "^2.1.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.0", + "glob": "^7.1.6", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.1.2", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + }, + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "undici": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.8.0.tgz", + "integrity": "sha512-1F7Vtcez5w/LwH2G2tGnFIihuWUlc58YidwLiCv+jR2Z50x0tNXpRRw7eOIJ+GvqCqIkg9SB7NWAJ/T9TLfv8Q==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "utf-8-validate": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "web3-core": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", + "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", + "requires": { + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-requestmanager": "1.7.4", + "web3-utils": "1.7.4" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + } + } + }, + "web3-core-helpers": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", + "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", + "requires": { + "web3-eth-iban": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-method": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", + "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", + "requires": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-promievent": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", + "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-core-requestmanager": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", + "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", + "requires": { + "util": "^0.12.0", + "web3-core-helpers": "1.7.4", + "web3-providers-http": "1.7.4", + "web3-providers-ipc": "1.7.4", + "web3-providers-ws": "1.7.4" + } + }, + "web3-core-subscriptions": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", + "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4" + } + }, + "web3-eth-iban": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", + "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.7.4" + } + }, + "web3-providers-http": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", + "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", + "requires": { + "web3-core-helpers": "1.7.4", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", + "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.7.4" + } + }, + "web3-providers-ws": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", + "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4", + "websocket": "^1.0.32" + } + }, + "web3-utils": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", + "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + }, + "websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, + "workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "dev": true + }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", + "requires": { + "cookiejar": "^2.1.1" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts index d387daf7e..fe2a86c27 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts @@ -4,7 +4,7 @@ import { EntryPointContractInterface } from '../../../typechain/src/ethers-v5/v1.0.0/EntryPointContract' import { toTxResult } from '../../utils' -import { Contract } from '@ethersproject/contracts'; +import { Contract } from '@ethersproject/contracts' class EntryPointEthersContract implements EntryPointContract { constructor(public contract: EntryPointContract_TypeChain) {} @@ -14,7 +14,7 @@ class EntryPointEthersContract implements EntryPointContract { } getContract(): Contract { - return this.contract; + return this.contract } async simulateValidation(userOperation: UserOperation): Promise { diff --git a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts index 2ca34c012..9cb385161 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts @@ -3,8 +3,8 @@ import { MultiSendContract as MultiSend_TypeChain, MultiSendContractInterface } from '../../../typechain/src/ethers-v5/v1.0.0/MultiSendContract' -import { Contract } from '@ethersproject/contracts'; -import { Interface } from "@ethersproject/abi"; +import { Contract } from '@ethersproject/contracts' +import { Interface } from '@ethersproject/abi' class MultiSendEthersContract implements MultiSendContract { constructor(public contract: MultiSend_TypeChain) {} @@ -14,11 +14,11 @@ class MultiSendEthersContract implements MultiSendContract { } getContract(): Contract { - return this.contract; + return this.contract } getInterface(): Interface { - return this.contract.interface; + return this.contract.interface } encode: MultiSendContractInterface['encodeFunctionData'] = ( diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.ts index 9c1229d29..728de8a72 100644 --- a/packages/ethers-lib/src/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.ts @@ -3,8 +3,8 @@ import { MultiSendCallOnlyContract as MultiSendCallOnly_TypeChain, MultiSendCallOnlyContractInterface } from '../../../typechain/src/ethers-v5/v1.0.0/MultiSendCallOnlyContract' -import { Contract } from '@ethersproject/contracts'; -import { Interface } from "@ethersproject/abi"; +import { Contract } from '@ethersproject/contracts' +import { Interface } from '@ethersproject/abi' class MultiSendCallOnlyEthersContract implements MultiSendCallOnlyContract { constructor(public contract: MultiSendCallOnly_TypeChain) {} @@ -14,11 +14,11 @@ class MultiSendCallOnlyEthersContract implements MultiSendCallOnlyContract { } getContract(): Contract { - return this.contract; + return this.contract } getInterface(): Interface { - return this.contract.interface; + return this.contract.interface } encode: MultiSendCallOnlyContractInterface['encodeFunctionData'] = ( diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts index 51a1291d5..a5d8f9c07 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts @@ -11,16 +11,16 @@ import { toTxResult } from '../../utils' import { SmartWalletContract as SmartWalletContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' import { SmartWalletContractInterface } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' import { getJsonWalletAddress, Interface } from 'ethers/lib/utils' -import { Contract } from '@ethersproject/contracts'; +import { Contract } from '@ethersproject/contracts' class SmartWalletContractEthers implements SmartWalletContract { constructor(public contract: SmartWalletContract_TypeChain) {} getInterface(): Interface { - return this.contract.interface; + return this.contract.interface } getContract(): Contract { - return this.contract; + return this.contract } getAddress(): string { @@ -28,7 +28,7 @@ class SmartWalletContractEthers implements SmartWalletContract { } setAddress(address: string) { - this.contract.attach(address); + this.contract.attach(address) } async getOwner(): Promise { @@ -64,12 +64,7 @@ class SmartWalletContractEthers implements SmartWalletContract { signatures: string ): Promise { // TODO: estimate GAS before making the transaction - const txResponse = await this.contract.execTransaction( - _tx, - batchId, - refundInfo, - signatures - ) + const txResponse = await this.contract.execTransaction(_tx, batchId, refundInfo, signatures) return toTxResult(txResponse) } diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts index 0c9fab562..95512bcfb 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts @@ -1,31 +1,31 @@ import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../utils' import { SmartWalletFactoryContract as SmartWalletFactoryContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' -import { Interface } from "@ethersproject/abi"; -import { Contract } from '@ethersproject/contracts'; +import { Interface } from '@ethersproject/abi' +import { Contract } from '@ethersproject/contracts' class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { constructor(public contract: SmartWalletFactoryContract_TypeChain) {} getInterface(): Interface { - return this.contract.interface; + return this.contract.interface } getContract(): Contract { - return this.contract; + return this.contract } async isWalletExist(wallet: string): Promise { - const doesExist = await this.contract.isWalletExist(wallet); - return doesExist; + const doesExist = await this.contract.isWalletExist(wallet) + return doesExist } getAddress(): string { return this.contract.address } - setAddress(address:string) { - this.contract.attach(address); + setAddress(address: string) { + this.contract.attach(address) } async deployCounterFactualWallet( diff --git a/packages/node-client/package-lock.json b/packages/node-client/package-lock.json new file mode 100644 index 000000000..f5a5eb965 --- /dev/null +++ b/packages/node-client/package-lock.json @@ -0,0 +1,5214 @@ +{ + "name": "@biconomy-sdk/node-client", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@ethereumjs/block": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", + "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "ethereumjs-util": "^7.1.5", + "merkle-patricia-tree": "^4.2.4" + } + }, + "@ethereumjs/blockchain": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", + "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/ethash": "^1.1.0", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "level-mem": "^5.0.1", + "lru-cache": "^5.1.1", + "semaphore-async-await": "^1.5.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/ethash": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", + "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.5.0", + "@types/levelup": "^4.3.0", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.1.1", + "miller-rabin": "^4.0.0" + }, + "dependencies": { + "buffer-xor": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", + "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + } + } + }, + "@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "dev": true, + "requires": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "@ethereumjs/vm": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", + "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.3", + "@ethereumjs/blockchain": "^5.5.3", + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "async-eventemitter": "^0.2.4", + "core-js-pure": "^3.0.1", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "merkle-patricia-tree": "^4.2.4", + "rustbn.js": "~0.2.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "requires": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + }, + "@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/sha2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" + } + }, + "@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/solidity": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@gnosis.pm/safe-core-sdk": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.2.1.tgz", + "integrity": "sha512-QeoEBqey5crrM0lBVOeEAW0OoQWfBrTUr2fqapDlmDGFVXf4fWM5R68zGzym+5HMvc3/CkVvanwQa4mZWllsjg==", + "requires": { + "@ethersproject/solidity": "^5.6.0", + "@gnosis.pm/safe-core-sdk-types": "^1.2.1", + "@gnosis.pm/safe-deployments": "1.15.0", + "ethereumjs-util": "^7.1.4", + "semver": "^7.3.5", + "web3-utils": "^1.7.1" + }, + "dependencies": { + "@gnosis.pm/safe-core-sdk-types": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.2.1.tgz", + "integrity": "sha512-K2kTGk1FNKlCJtuDqbFrRPNxot/4dQPiI2pnquGJchpJXIMflKb7xPcjDY5CPTYlBG3lCoQ9ZRk7Ytlu66TcSQ==", + "requires": { + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/contracts": "^5.6.0", + "@gnosis.pm/safe-deployments": "1.15.0", + "web3-core": "^1.7.1" + } + } + } + }, + "@gnosis.pm/safe-core-sdk-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.1.0.tgz", + "integrity": "sha512-VvEqWCliA6KXwt9N4YTzN5JcqnhLxLjUTU7trpQqQ7wU9OQcF+Kdrer86wDOF5lYZVE24zudw1s4gW3dxUkm6A==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/contracts": "^5.6.0", + "@gnosis.pm/safe-deployments": "^1.12.0", + "web3-core": "^1.7.1" + } + }, + "@gnosis.pm/safe-core-sdk-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.1.0.tgz", + "integrity": "sha512-ZH1Ps3qsreczKHHfBb34dj55LDTiU7WAeKD7jgKnhiloGWRniLv+cbBfwFQNAezoyANvgyI5ky64wgwm1bm1YA==", + "dev": true, + "requires": { + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "web3-utils": "^1.7.1" + } + }, + "@gnosis.pm/safe-deployments": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", + "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", + "requires": { + "semver": "^7.3.7" + } + }, + "@gnosis.pm/safe-ethers-lib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.1.0.tgz", + "integrity": "sha512-MG01hGu/3q/sl9fXE3sU7CMVpVMJ4k9/ro1JVZaE29jmsar1cHFUOJNws7Do3orxTLQZ2egkARcmyv+l673FoA==", + "dev": true, + "requires": { + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + } + }, + "@gnosis.pm/safe-web3-lib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.1.0.tgz", + "integrity": "sha512-B4wnVDtiK2EBuXwsI0hTYlACLVr8F9qvpFC16/Smdg8fWv/r6WpK7yB86DRyW9R1BEwkjmPvpvx9rqIKW5xRkA==", + "dev": true, + "requires": { + "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dev": true, + "requires": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nomiclabs/hardhat-ethers": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.6.tgz", + "integrity": "sha512-q2Cjp20IB48rEn2NPjR1qxsIQBvFVYW9rFRCFq+bC4RUrn1Ljz3g4wM8uSlgIBZYBi2JMXxmOzFqHraczxq4Ng==", + "dev": true + }, + "@nomiclabs/hardhat-waffle": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", + "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", + "dev": true, + "requires": { + "@types/sinon-chai": "^3.2.3", + "@types/web3": "1.0.19" + } + }, + "@nomiclabs/hardhat-web3": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz", + "integrity": "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==", + "dev": true, + "requires": { + "@types/bignumber.js": "^5.0.0" + } + }, + "@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "requires": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "requires": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + } + }, + "@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true + }, + "@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "requires": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + } + }, + "@solidity-parser/parser": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.2.tgz", + "integrity": "sha512-10cr0s+MtRtqjEw0WFJrm2rwULN30xx7btd/v9cmqME2617/2M5MbHDkFIGIGTa7lwNw4bN9mVGfhlLzrYw8pA==", + "dev": true, + "requires": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "@types/abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "dev": true + }, + "@types/bignumber.js": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", + "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==", + "dev": true, + "requires": { + "bignumber.js": "*" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, + "@types/chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "dev": true + }, + "@types/chai-as-promised": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/level-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", + "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", + "dev": true + }, + "@types/levelup": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", + "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", + "dev": true, + "requires": { + "@types/abstract-leveldown": "*", + "@types/level-errors": "*", + "@types/node": "*" + } + }, + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "@types/mkdirp": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", + "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/mocha": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "dev": true + }, + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/prettier": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", + "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", + "dev": true + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "requires": { + "@types/node": "*" + } + }, + "@types/sinon": { + "version": "10.0.12", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.12.tgz", + "integrity": "sha512-uWf4QJ4oky/GckJ1MYQxU52cgVDcXwBhDkpvLbi4EKoLPqLE4MOH6T/ttM33l3hi0oZ882G6oIzWv/oupRYSxQ==", + "dev": true, + "requires": { + "@types/sinonjs__fake-timers": "*" + } + }, + "@types/sinon-chai": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, + "@types/underscore": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", + "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", + "dev": true + }, + "@types/web3": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", + "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", + "dev": true, + "requires": { + "@types/bn.js": "*", + "@types/underscore": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", + "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/type-utils": "5.30.0", + "@typescript-eslint/utils": "5.30.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", + "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", + "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", + "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.30.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", + "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", + "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/visitor-keys": "5.30.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.30.0", + "@typescript-eslint/types": "5.30.0", + "@typescript-eslint/typescript-estree": "5.30.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", + "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "abstract-leveldown": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "dev": true, + "requires": { + "async": "^2.4.0" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "dev": true, + "requires": { + "check-error": "^1.0.2" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true + }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, + "core-js-pure": { + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", + "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==", + "dev": true + }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "dev": true, + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + } + } + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "dev": true, + "requires": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", + "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dev": true, + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@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": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "hardhat": { + "version": "2.9.9", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.9.9.tgz", + "integrity": "sha512-Qv7SXnRc0zq1kGXruNnSKpP3eFccXMR5Qv6GVX9hBIJ5efN0PflKPq92aQ5Cv3jrjJeRevLznWZVz7bttXhVfw==", + "dev": true, + "requires": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/blockchain": "^5.5.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/tx": "^3.5.1", + "@ethereumjs/vm": "^5.9.0", + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@sentry/node": "^5.18.1", + "@solidity-parser/parser": "^0.14.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "abort-controller": "^3.0.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^0.1.2", + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^7.1.4", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "lodash": "^4.17.11", + "merkle-patricia-tree": "^4.2.4", + "mnemonist": "^0.38.0", + "mocha": "^9.2.0", + "p-map": "^4.0.0", + "qs": "^6.7.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "slash": "^3.0.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "true-case-path": "^2.2.1", + "tsort": "0.0.1", + "undici": "^5.4.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "requires": { + "fp-ts": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, + "requires": { + "buffer": "^5.6.0" + } + }, + "level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dev": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + } + }, + "level-mem": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", + "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", + "dev": true, + "requires": { + "level-packager": "^5.0.3", + "memdown": "^5.0.0" + } + }, + "level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "dev": true, + "requires": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + } + }, + "level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, + "requires": { + "xtend": "^4.0.2" + } + }, + "level-ws": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^3.1.0", + "xtend": "^4.0.1" + } + }, + "levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "dev": true, + "requires": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true + }, + "lint-staged": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz", + "integrity": "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.16", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^5.1.1", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.5.0", + "string-argv": "^0.3.1", + "supports-color": "^9.2.2", + "yaml": "^1.10.2" + }, + "dependencies": { + "commander": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "supports-color": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", + "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", + "dev": true + } + } + }, + "listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "dev": true + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "memdown": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", + "dev": true, + "requires": { + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", + "dev": true + } + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "merkle-patricia-tree": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", + "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", + "dev": true, + "requires": { + "@types/levelup": "^4.3.0", + "ethereumjs-util": "^7.1.4", + "level-mem": "^5.0.1", + "level-ws": "^2.0.0", + "readable-stream": "^3.6.0", + "semaphore-async-await": "^1.5.1" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "requires": { + "obliterator": "^2.0.0" + } + }, + "mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true + }, + "oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "requires": { + "http-https": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pidtree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", + "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", + "dev": true + }, + "rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "semaphore-async-await": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", + "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + } + } + }, + "solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "dev": true, + "requires": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, + "requires": { + "type-fest": "^0.7.1" + }, + "dependencies": { + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true + } + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "true-case-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", + "dev": true + }, + "ts-essentials": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", + "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", + "dev": true + }, + "ts-generator": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", + "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", + "dev": true, + "requires": { + "@types/mkdirp": "^0.5.2", + "@types/prettier": "^2.1.1", + "@types/resolve": "^0.0.8", + "chalk": "^2.4.1", + "glob": "^7.1.2", + "mkdirp": "^0.5.1", + "prettier": "^2.1.2", + "resolve": "^1.8.1", + "ts-essentials": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ts-node": { + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", + "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true + }, + "tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "undici": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.5.1.tgz", + "integrity": "sha512-MEvryPLf18HvlCbLSzCW0U00IMftKGI5udnjrQbC5D4P0Hodwffhv+iGfWuJwg16Y/TK11ZFK8i+BPVW2z/eAw==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "utf-8-validate": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "web3-core": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", + "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", + "requires": { + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-requestmanager": "1.7.4", + "web3-utils": "1.7.4" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + } + } + }, + "web3-core-helpers": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", + "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", + "requires": { + "web3-eth-iban": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-method": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", + "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", + "requires": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-promievent": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", + "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-core-requestmanager": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", + "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", + "requires": { + "util": "^0.12.0", + "web3-core-helpers": "1.7.4", + "web3-providers-http": "1.7.4", + "web3-providers-ipc": "1.7.4", + "web3-providers-ws": "1.7.4" + } + }, + "web3-core-subscriptions": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", + "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4" + } + }, + "web3-eth-iban": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", + "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.7.4" + } + }, + "web3-providers-http": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", + "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", + "requires": { + "web3-core-helpers": "1.7.4", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", + "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.7.4" + } + }, + "web3-providers-ws": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", + "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4", + "websocket": "^1.0.32" + } + }, + "web3-utils": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", + "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + } + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "ws": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", + "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", + "dev": true + }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", + "requires": { + "cookiejar": "^2.1.1" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts new file mode 100644 index 000000000..5e6dd6f7e --- /dev/null +++ b/packages/node-client/src/INodeClient.ts @@ -0,0 +1,40 @@ +import { Signer } from '@ethersproject/abstract-signer' +import { + TokenPriceResponse, + SupportedChainsResponse, + individualChainResponse, + SupportedTokensResponse, + IndividualTokenResponse, + SmartAccountsResponse, + BalancesRespose, + BalancesDto, + UsdBalanceResponse +} from './types/NodeClientTypes' + +interface INodeClient { + // Chain Apis + getAllSupportedChains(): Promise + + getChainById(chainId: number): Promise + + getTokenPricesByChainId(chainId: number): Promise + + // Tokens Endpoint + + getAllTokens(): Promise + getTokensByChainId(chainId: number): Promise + getTokenByChainIdAndAddress( + chainId: number, + tokenAddress: string + ): Promise + + // Smart Account Endpoints + + getSmartAccountsByOwner(chainId: number, owner: string): Promise + + getAlltokenBalances(balancesDto: BalancesDto): Promise + + getTotalBalanceInUsd(balancesDto: BalancesDto): Promise +} + +export default INodeClient diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts new file mode 100644 index 000000000..8782ca77d --- /dev/null +++ b/packages/node-client/src/NodeClient.ts @@ -0,0 +1,119 @@ +import INodeClient from './INodeClient' +import { + TokenPriceResponse, + SupportedChainsResponse, + individualChainResponse, + SupportedTokensResponse, + IndividualTokenResponse, + SmartAccountsResponse, + BalancesDto, + BalancesRespose, + UsdBalanceResponse +} from './types/NodeClientTypes' +import { getTxServiceBaseUrl } from './utils' +import { HttpMethod, sendRequest } from './utils/httpRequests' + +export interface NodeClientConfig { + /** txServiceUrl - Safe Transaction Service URL */ + txServiceUrl: string + /** ethAdapter - Ethereum adapter */ + // ethAdapter: EthAdapter +} + +class NodeClient implements INodeClient { + #txServiceBaseUrl: string + // #ethAdapter: EthAdapter + + // Review + // Removed ethAdapter + constructor({ txServiceUrl }: NodeClientConfig) { + this.#txServiceBaseUrl = getTxServiceBaseUrl(txServiceUrl) + // this.#ethAdapter = ethAdapter + } + + /** + * Returns the list of supported chains and their configurations + * + * @returns The list of Network info + */ + async getAllSupportedChains(): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/chains/`, + method: HttpMethod.Get + }) + } + /** + * + * @param chainId + * @description thie function will return the chain detail base on supplied { chainId } + * @returns + */ + async getChainById(chainId: number): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/chains/${chainId}`, + method: HttpMethod.Get + }) + } + + /** + * + * @param chainId + * @description this function will return token price base on supplied {chainId} + * @returns + */ + async getTokenPricesByChainId(chainId: number): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/chains/chainId/${chainId}/price`, + method: HttpMethod.Get + }) + } + + async getAllTokens(): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/tokens/`, + method: HttpMethod.Get + }) + } + + async getTokensByChainId(chainId: number): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/tokens/chainId/${chainId}`, + method: HttpMethod.Get + }) + } + + async getTokenByChainIdAndAddress( + chainId: number, + tokenAddress: string + ): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/tokens/chainId/${chainId}/address/${tokenAddress}`, + method: HttpMethod.Get + }) + } + + async getSmartAccountsByOwner(chainId: number, owner: string): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/smart-accounts/chainId/${chainId}/owner/${owner}`, + method: HttpMethod.Get + }) + } + + async getAlltokenBalances(balancesDto: BalancesDto): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/smart-accounts/balances`, + method: HttpMethod.Post, + body: balancesDto + }) + } + + async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/smart-accounts/balance`, + method: HttpMethod.Post, + body: balancesDto + }) + } +} + +export default NodeClient diff --git a/packages/node-client/src/SafeServiceClient.ts b/packages/node-client/src/SafeServiceClient.ts deleted file mode 100644 index 1b9c27755..000000000 --- a/packages/node-client/src/SafeServiceClient.ts +++ /dev/null @@ -1,670 +0,0 @@ -import { Signer } from '@ethersproject/abstract-signer' -import { EthAdapter } from '@biconomy-sdk/core-types' -import SafeTransactionService from './SafeTransactionService' -import { - AllTransactionsListResponse, - AllTransactionsOptions, - MasterCopyResponse, - OwnerResponse, - ProposeTransactionProps, - SafeBalanceResponse, - SafeBalancesOptions, - SafeBalancesUsdOptions, - SafeBalanceUsdResponse, - SafeCollectibleResponse, - SafeCollectiblesOptions, - SmartAccountCreationInfoResponse, - SmartAccountDelegate, - SmartAccountDelegateConfig, - SmartAccountDelegateDeleteConfig, - SafeDelegateListResponse, - SafeInfoResponse, - SafeModuleTransactionListResponse, - SafeMultisigConfirmationListResponse, - SafeMultisigTransactionEstimate, - SafeMultisigTransactionEstimateResponse, - SafeMultisigTransactionListResponse, - SafeMultisigTransactionResponse, - SmartAccountInfoResponse, - SignatureResponse, - TokenInfoListResponse, - TokenInfoResponse, - TransferListResponse, - ChainConfigResponse -} from './types/safeTransactionServiceTypes' -import { getTxServiceBaseUrl } from './utils' -import { HttpMethod, sendRequest } from './utils/httpRequests' - -export interface SafeServiceClientConfig { - /** txServiceUrl - Safe Transaction Service URL */ - txServiceUrl: string - /** ethAdapter - Ethereum adapter */ - // ethAdapter: EthAdapter -} - -class SafeServiceClient implements SafeTransactionService { - #txServiceBaseUrl: string - // #ethAdapter: EthAdapter - - // Review - // Removed ethAdapter - constructor({ txServiceUrl }: SafeServiceClientConfig) { - this.#txServiceBaseUrl = getTxServiceBaseUrl(txServiceUrl) - // this.#ethAdapter = ethAdapter - } - - /** - * Returns the information and configuration of the service. - * - * @returns The information and configuration of the service - */ - async getServiceInfo(): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/about`, - method: HttpMethod.Get - }) - } - - /** - * Returns the list of Safe master copies. - * - * @returns The list of Safe master copies - */ - async getServiceMasterCopiesInfo(): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/about/master-copies`, - method: HttpMethod.Get - }) - } - - /** - * Decodes the specified Safe transaction data. - * - * @param data - The Safe transaction data - * @returns The transaction data decoded - * @throws "Invalid data" - * @throws "Not Found" - * @throws "Ensure this field has at least 1 hexadecimal chars (not counting 0x)." - */ - async decodeData(data: string): Promise { - if (data === '') { - throw new Error('Invalid data') - } - return sendRequest({ - url: `${this.#txServiceBaseUrl}/data-decoder/`, - method: HttpMethod.Post, - body: { data } - }) - } - - /** - * Returns the list of Safes where the address provided is an owner. - * - * @param ownerAddress - The owner address - * @returns The list of Safes where the address provided is an owner - * @throws "Invalid owner address" - * @throws "Checksum address validation failed" - */ - async getSafesByOwner(ownerAddress: string): Promise { - if (ownerAddress === '') { - throw new Error('Invalid owner address') - } - const address = ownerAddress - return sendRequest({ - url: `${this.#txServiceBaseUrl}/owners/${address}/safes/`, - method: HttpMethod.Get - }) - } - - /** - * Returns the list of supported chains and their configurations - * - * @returns The list of Network info - */ - async getChainInfo(): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/chains/`, - method: HttpMethod.Get - }) - } - - /** - * Returns all the information of a Safe transaction. - * - * @param safeTxHash - Hash of the Safe transaction - * @returns The information of a Safe transaction - * @throws "Invalid safeTxHash" - * @throws "Not found." - */ - async getTransaction(safeTxHash: string): Promise { - if (safeTxHash === '') { - throw new Error('Invalid safeTxHash') - } - return sendRequest({ - url: `${this.#txServiceBaseUrl}/multisig-transactions/${safeTxHash}/`, - method: HttpMethod.Get - }) - } - - /** - * Returns the list of confirmations for a given a Safe transaction. - * - * @param safeTxHash - The hash of the Safe transaction - * @returns The list of confirmations - * @throws "Invalid safeTxHash" - */ - async getTransactionConfirmations( - safeTxHash: string - ): Promise { - if (safeTxHash === '') { - throw new Error('Invalid safeTxHash') - } - return sendRequest({ - url: `${this.#txServiceBaseUrl}/multisig-transactions/${safeTxHash}/confirmations/`, - method: HttpMethod.Get - }) - } - - /** - * Adds a confirmation for a Safe transaction. - * - * @param safeTxHash - Hash of the Safe transaction that will be confirmed - * @param signature - Signature of the transaction - * @returns - * @throws "Invalid safeTxHash" - * @throws "Invalid signature" - * @throws "Malformed data" - * @throws "Error processing data" - */ - async confirmTransaction(safeTxHash: string, signature: string): Promise { - if (safeTxHash === '') { - throw new Error('Invalid safeTxHash') - } - if (signature === '') { - throw new Error('Invalid signature') - } - return sendRequest({ - url: `${this.#txServiceBaseUrl}/multisig-transactions/${safeTxHash}/confirmations/`, - method: HttpMethod.Post, - body: { - signature - } - }) - } - - /** - * Returns the information and configuration of the provided Safe address. - * - * @param safeAddress - The Safe address - * @returns The information and configuration of the provided Safe address - * @throws "Invalid Safe address" - * @throws "Checksum address validation failed" - */ - async getSafeInfo(safeAddress: string): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - return sendRequest({ - url: `${this.#txServiceBaseUrl}/safes/${address}/`, - method: HttpMethod.Get - }) - } - - /** - * Returns the list of delegates for a given Safe address. - * - * @param safeAddress - The Safe address - * @returns The list of delegates - * @throws "Invalid Safe address" - * @throws "Checksum address validation failed" - */ - async getSafeDelegates(safeAddress: string): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - return sendRequest({ - url: `${this.#txServiceBaseUrl}/safes/${address}/delegates/`, - method: HttpMethod.Get - }) - } - - /** - * Adds a new delegate for a given Safe address. - * - * @param delegateConfig - The configuration of the new delegate - * @returns - * @throws "Invalid Safe address" - * @throws "Invalid Safe delegate address" - * @throws "Checksum address validation failed" - * @throws "Address is not checksumed" - * @throws "Safe= does not exist or it's still not indexed" - * @throws "Signing owner is not an owner of the Safe" - */ - async addSafeDelegate({ - safe, - delegate, - label, - signer - }: SmartAccountDelegateConfig): Promise { - if (safe === '') { - throw new Error('Invalid Safe address') - } - if (delegate === '') { - throw new Error('Invalid Safe delegate address') - } - const safeAddress = safe - const delegateAddress = delegate - const totp = Math.floor(Date.now() / 1000 / 3600) - const data = delegateAddress + totp - const signature = await signer.signMessage(data) - const body: SmartAccountDelegate = { - safe: safeAddress, - delegate: delegateAddress, - label, - signature - } - return sendRequest({ - url: `${this.#txServiceBaseUrl}/safes/${safeAddress}/delegates/`, - method: HttpMethod.Post, - body - }) - } - - /** - * Removes all delegates for a given Safe address. - * - * @param safeAddress - The Safe address - * @param signer - A Signer that owns the Safe - * @returns - * @throws "Invalid Safe address" - * @throws "Checksum address validation failed" - * @throws "Safe= does not exist or it's still not indexed" - * @throws "Signing owner is not an owner of the Safe" - */ - async removeAllSafeDelegates(safeAddress: string, signer: Signer): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - const totp = Math.floor(Date.now() / 1000 / 3600) - const data = address + totp - const signature = await signer.signMessage(data) - return sendRequest({ - url: `${this.#txServiceBaseUrl}/safes/${address}/delegates/`, - method: HttpMethod.Delete, - body: { signature } - }) - } - - /** - * Removes a delegate for a given Safe address. - * - * @param delegateConfig - The configuration for the delegate that will be removed - * @returns - * @throws "Invalid Safe address" - * @throws "Invalid Safe delegate address" - * @throws "Checksum address validation failed" - * @throws "Signing owner is not an owner of the Safe" - * @throws "Not found" - */ - async removeSafeDelegate({ - safe, - delegate, - signer - }: SmartAccountDelegateDeleteConfig): Promise { - if (safe === '') { - throw new Error('Invalid Safe address') - } - if (delegate === '') { - throw new Error('Invalid Safe delegate address') - } - const safeAddress = safe - const delegateAddress = delegate - const totp = Math.floor(Date.now() / 1000 / 3600) - const data = delegateAddress + totp - const signature = await signer.signMessage(data) - return sendRequest({ - url: `${this.#txServiceBaseUrl}/safes/${safeAddress}/delegates/${delegateAddress}`, - method: HttpMethod.Delete, - body: { - safe: safeAddress, - delegate: delegateAddress, - signature - } - }) - } - - /** - * Returns the creation information of a Safe. - * - * @param safeAddress - The Safe address - * @returns The creation information of a Safe - * @throws "Invalid Safe address" - * @throws "Safe creation not found" - * @throws "Checksum address validation failed" - * @throws "Problem connecting to Ethereum network" - */ - async getSafeCreationInfo(safeAddress: string): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - return sendRequest({ - url: `${this.#txServiceBaseUrl}/safes/${address}/creation/`, - method: HttpMethod.Get - }) - } - - /** - * Estimates the safeTxGas for a given Safe multi-signature transaction. - * - * @param safeAddress - The Safe address - * @param safeTransaction - The Safe transaction to estimate - * @returns The safeTxGas for the given Safe transaction - * @throws "Invalid Safe address" - * @throws "Data not valid" - * @throws "Safe not found" - * @throws "Tx not valid" - */ - async estimateSafeTransaction( - safeAddress: string, - safeTransaction: SafeMultisigTransactionEstimate - ): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - return sendRequest({ - url: `${this.#txServiceBaseUrl}/safes/${address}/multisig-transactions/estimations/`, - method: HttpMethod.Post, - body: safeTransaction - }) - } - - /** - * Creates a new multi-signature transaction with its confirmations and stores it in the Safe Transaction Service. - * - * @param proposeTransactionConfig - The configuration of the proposed transaction - * @returns The hash of the Safe transaction proposed - * @throws "Invalid Safe address" - * @throws "Invalid safeTxHash" - * @throws "Invalid data" - * @throws "Invalid ethereum address/User is not an owner/Invalid signature/Nonce already executed/Sender is not an owner" - */ - async proposeTransaction({ - safeAddress, - senderAddress, - safeTransaction, - safeTxHash, - origin - }: ProposeTransactionProps): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const safe= safeAddress; - const sender = senderAddress; - if (safeTxHash === '') { - throw new Error('Invalid safeTxHash') - } - return sendRequest({ - url: `${this.#txServiceBaseUrl}/safes/${safe}/multisig-transactions/`, - method: HttpMethod.Post, - body: { - ...safeTransaction.data, - contractTransactionHash: safeTxHash, - sender, - signature: safeTransaction.signatures.get(sender.toLowerCase())?.data, - origin - } - }) - } - - /** - * Returns the history of incoming transactions of a Safe account. - * - * @param safeAddress - The Safe address - * @returns The history of incoming transactions - * @throws "Invalid Safe address" - * @throws "Checksum address validation failed" - */ - async getIncomingTransactions(safeAddress: string): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - return sendRequest({ - url: `${this.#txServiceBaseUrl}/safes/${address}/incoming-transfers/`, - method: HttpMethod.Get - }) - } - - /** - * Returns the history of module transactions of a Safe account. - * - * @param safeAddress - The Safe address - * @returns The history of module transactions - * @throws "Invalid Safe address" - * @throws "Invalid data" - * @throws "Invalid ethereum address" - */ - async getModuleTransactions(safeAddress: string): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - return sendRequest({ - url: `${this.#txServiceBaseUrl}/safes/${address}/module-transactions/`, - method: HttpMethod.Get - }) - } - - /** - * Returns the history of multi-signature transactions of a Safe account. - * - * @param safeAddress - The Safe address - * @returns The history of multi-signature transactions - * @throws "Invalid Safe address" - * @throws "Checksum address validation failed" - */ - async getMultisigTransactions(safeAddress: string): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - return sendRequest({ - url: `${this.#txServiceBaseUrl}/safes/${address}/multisig-transactions/`, - method: HttpMethod.Get - }) - } - - /** - * Returns the list of multi-signature transactions that are waiting for the confirmation of the Safe owners. - * - * @param safeAddress - The Safe address - * @param currentNonce - Current nonce of the Safe - * @returns The list of transactions waiting for the confirmation of the Safe owners - * @throws "Invalid Safe address" - * @throws "Invalid data" - * @throws "Invalid ethereum address" - */ - async getPendingTransactions( - safeAddress: string, - currentNonce?: number - ): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - let nonce = currentNonce ? currentNonce : (await this.getSafeInfo(address)).nonce - return sendRequest({ - url: `${ - this.#txServiceBaseUrl - }/safes/${address}/multisig-transactions/?executed=false&nonce__gte=${nonce}`, - method: HttpMethod.Get - }) - } - - /** - * Returns a list of transactions for a Safe. The list has different structures depending on the transaction type - * - * @param safeAddress - The Safe address - * @returns The list of transactions waiting for the confirmation of the Safe owners - * @throws "Invalid Safe address" - * @throws "Checksum address validation failed" - */ - async getAllTransactions( - safeAddress: string, - options?: AllTransactionsOptions - ): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - const url = new URL(`${this.#txServiceBaseUrl}/safes/${address}/all-transactions/`) - - const trusted = options?.trusted?.toString() || 'true' - url.searchParams.set('trusted', trusted) - - const queued = options?.queued?.toString() || 'true' - url.searchParams.set('queued', queued) - - const executed = options?.executed?.toString() || 'false' - url.searchParams.set('executed', executed) - - return sendRequest({ - url: url.toString(), - method: HttpMethod.Get - }) - } - - /** - * Returns the right nonce to propose a new transaction after the last pending transaction. - * - * @param safeAddress - The Safe address - * @returns The right nonce to propose a new transaction after the last pending transaction - * @throws "Invalid Safe address" - * @throws "Invalid data" - * @throws "Invalid ethereum address" - */ - async getNextNonce(safeAddress: string): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - const pendingTransactions = await this.getPendingTransactions(address) - if (pendingTransactions.results.length > 0) { - const nonces = pendingTransactions.results.map((tx) => tx.nonce) - const lastNonce = Math.max(...nonces) - return lastNonce + 1 - } - const safeInfo = await this.getSafeInfo(address) - return safeInfo.nonce - } - - /** - * Returns the balances for Ether and ERC20 tokens of a Safe. - * - * @param safeAddress - The Safe address - * @param options - API params - * @returns The balances for Ether and ERC20 tokens - * @throws "Invalid Safe address" - * @throws "Checksum address validation failed" - */ - async getBalances( - safeAddress: string, - options?: SafeBalancesOptions - ): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - let url = new URL(`${this.#txServiceBaseUrl}/safes/${address}/balances/`) - const excludeSpam = options?.excludeSpamTokens?.toString() || 'true' - url.searchParams.set('exclude_spam', excludeSpam) - - return sendRequest({ url: url.toString(), method: HttpMethod.Get }) - } - - /** - * Returns the balances for Ether and ERC20 tokens of a Safe with USD fiat conversion. - * - * @param safeAddress - The Safe address - * @param options - API params - * @returns The balances for Ether and ERC20 tokens with USD fiat conversion - * @throws "Invalid Safe address" - * @throws "Checksum address validation failed" - */ - async getUsdBalances( - safeAddress: string, - options?: SafeBalancesUsdOptions - ): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - let url = new URL(`${this.#txServiceBaseUrl}/safes/${address}/balances/usd/`) - const excludeSpam = options?.excludeSpamTokens?.toString() || 'true' - url.searchParams.set('exclude_spam', excludeSpam) - - return sendRequest({ url: url.toString(), method: HttpMethod.Get }) - } - - /** - * Returns the collectives (ERC721 tokens) owned by the given Safe and information about them. - * - * @param safeAddress - The Safe address - * @param options - API params - * @returns The collectives owned by the given Safe - * @throws "Invalid Safe address" - * @throws "Checksum address validation failed" - */ - async getCollectibles( - safeAddress: string, - options?: SafeCollectiblesOptions - ): Promise { - if (safeAddress === '') { - throw new Error('Invalid Safe address') - } - const address = safeAddress - let url = new URL(`${this.#txServiceBaseUrl}/safes/${address}/collectibles/`) - const excludeSpam = options?.excludeSpamTokens?.toString() || 'true' - url.searchParams.set('exclude_spam', excludeSpam) - - return sendRequest({ url: url.toString(), method: HttpMethod.Get }) - } - - /** - * Returns the list of all the ERC20 tokens handled by the Safe. - * - * @returns The list of all the ERC20 tokens - */ - async getTokenList(): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/tokens/`, - method: HttpMethod.Get - }) - } - - /** - * Returns the information of a given ERC20 token. - * - * @param tokenAddress - The token address - * @returns The information of the given ERC20 token - * @throws "Invalid token address" - * @throws "Checksum address validation failed" - */ - async getToken(tokenAddress: string): Promise { - if (tokenAddress === '') { - throw new Error('Invalid token address') - } - const address = tokenAddress - return sendRequest({ - url: `${this.#txServiceBaseUrl}/tokens/${address}/`, - method: HttpMethod.Get - }) - } -} - -export default SafeServiceClient diff --git a/packages/node-client/src/SafeTransactionService.ts b/packages/node-client/src/SafeTransactionService.ts deleted file mode 100644 index 630a52a1a..000000000 --- a/packages/node-client/src/SafeTransactionService.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { Signer } from '@ethersproject/abstract-signer' -import { - MasterCopyResponse, - OwnerResponse, - ProposeTransactionProps, - SafeBalanceResponse, - SafeBalancesOptions, - SafeBalancesUsdOptions, - SafeBalanceUsdResponse, - SafeCollectibleResponse, - SafeCollectiblesOptions, - SmartAccountCreationInfoResponse, - SmartAccountDelegate, - SmartAccountDelegateConfig, - SmartAccountDelegateDeleteConfig, - SafeDelegateListResponse, - SafeInfoResponse, - SafeModuleTransactionListResponse, - SafeMultisigConfirmationListResponse, - SafeMultisigTransactionEstimate, - SafeMultisigTransactionEstimateResponse, - SafeMultisigTransactionListResponse, - SafeMultisigTransactionResponse, - SmartAccountInfoResponse, - SignatureResponse, - TokenInfoListResponse, - TokenInfoResponse, - TransferListResponse -} from './types/safeTransactionServiceTypes' - -interface SafeTransactionService { - // About - getServiceInfo(): Promise - getServiceMasterCopiesInfo(): Promise - - // Data decoder - decodeData(data: string): Promise - - // Owners - getSafesByOwner(ownerAddress: string): Promise - - // Multisig transactions - getTransaction(safeTxHash: string): Promise - getTransactionConfirmations(safeTxHash: string): Promise - confirmTransaction(safeTxHash: string, signature: string): Promise - - // Safes - getSafeInfo(safeAddress: string): Promise - getSafeDelegates(safeAddress: string): Promise - addSafeDelegate(config: SmartAccountDelegateConfig): Promise - removeSafeDelegate(config: SmartAccountDelegateDeleteConfig): Promise - removeAllSafeDelegates(safeAddress: string, signer: Signer): Promise - - // Transactions - getSafeCreationInfo(safeAddress: string): Promise - estimateSafeTransaction( - safeAddress: string, - safeTransaction: SafeMultisigTransactionEstimate - ): Promise - proposeTransaction({ - safeAddress, - senderAddress, - safeTransaction, - safeTxHash, - origin - }: ProposeTransactionProps): Promise - getIncomingTransactions(safeAddress: string): Promise - getModuleTransactions(safeAddress: string): Promise - getMultisigTransactions(safeAddress: string): Promise - getPendingTransactions( - safeAddress: string, - currentNonce?: number - ): Promise - getNextNonce(safeAddress: string): Promise - - // Balances - getBalances(safeAddress: string, options?: SafeBalancesOptions): Promise - getUsdBalances( - safeAddress: string, - options?: SafeBalancesUsdOptions - ): Promise - getCollectibles( - safeAddress: string, - options?: SafeCollectiblesOptions - ): Promise - - // Tokens - getTokenList(): Promise - getToken(tokenAddress: string): Promise -} - -export default SafeTransactionService diff --git a/packages/node-client/src/index.ts b/packages/node-client/src/index.ts index 708c34ef2..a332b2f1c 100644 --- a/packages/node-client/src/index.ts +++ b/packages/node-client/src/index.ts @@ -1,5 +1,5 @@ -import SafeServiceClient, { SafeServiceClientConfig } from './SafeServiceClient' +import NodeClient, { NodeClientConfig } from './NodeClient' -export * from './types/safeTransactionServiceTypes' -export default SafeServiceClient -export { SafeServiceClientConfig } +export * from './types/NodeClientTypes' +export default NodeClient +export { NodeClientConfig } diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts new file mode 100644 index 000000000..1f7faeaca --- /dev/null +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -0,0 +1,158 @@ +export type SmartAccountInfoResponse = { + readonly name: string + readonly version: string + readonly api_version: string + readonly secure: boolean + readonly settings: { + readonly AWS_CONFIGURED: boolean + readonly AWS_S3_CUSTOM_DOMAIN: string + readonly ETHEREUM_NODE_URL: string + readonly ETHEREUM_TRACING_NODE_URL: string + readonly ETH_INTERNAL_TXS_BLOCK_PROCESS_LIMIT: number + readonly ETH_INTERNAL_NO_FILTER: boolean + readonly ETH_REORG_BLOCKS: number + readonly TOKENS_LOGO_BASE_URI: string + readonly TOKENS_LOGO_EXTENSION: string + } +} + +export type BalancesDto = { + chainId: number + eoaAddress: string + tokenAddresses: string[] +} + +export type ChainConfig = { + chainId: number + name: string + symbol: string + isL2: boolean + isMainnet: boolean + description: string + blockExplorerUriTemplate: BlockExplorerConfig + ensRegistryAddress: string + walletFactoryAddress: string + walletAddress: string // base wallet + entryPoint: string //should make this address var + fallBackHandler: string //should make this address var + relayerURL: string + providerUrl: string + indexerUrl: string + backendNodeUrl: string + createdAt: Date + updatedAt: Date + token: TokenInfo +} + +export type MasterCopyResponse = { + address: string + version: string + deployer: string + deployedBlockNumber: number + lastIndexedBlockNumber: number +} + +export type SafeInfoResponse = { + readonly address: string + readonly nonce: number + readonly threshold: number + readonly owners: string[] + readonly masterCopy: string + readonly modules: string[] + readonly fallbackHandler: string + readonly version: string +} + +export type OwnerResponse = { + safes: string[] +} + +export type BlockExplorerConfig = { + address: string + txHash: string + api: string +} + +export type TokenInfo = { + id: number + name: string + symbol: string + blockChain: number + ercType?: string + decimals: number + logoUri: string + address: string + isNativeToken: boolean + isEnabled: boolean + cmcId: number //Verify + price: number //Verify + createdAt: Date + updatedAt: Date +} + +export type ISmartAccount = { + smartAccountAddress: string + isDeployed: boolean +} + +export type IBalances = { + contract_decimals: number + contract_name: string + contract_ticker_symbol: string + contract_address: string + supports_erc: string | null + logo_url: string | null + last_transferred_at: string | null + type: string + balance: number + balance_24h: number + quote_rate: number + quote_rate_24h: number + nft_data: string | null +} + +export type SupportedChainsResponse = { + message: string + code: number + data: ChainConfig[] +} + +export type individualChainResponse = { + message: string + code: number + data: ChainConfig +} + +export type TokenPriceResponse = { + price: number +} + +export type SupportedTokensResponse = { + message: string + code: number + data: TokenInfo[] +} + +export type IndividualTokenResponse = { + message: string + code: number + data: TokenInfo +} +export type SmartAccountsResponse = { + message: string + code: number + data: ISmartAccount +} +export type BalancesRespose = { + message: string + code: number + data: IBalances[] +} + +export type UsdBalanceResponse = { + message: string + code: number + data: { + totalBalance: number + } +} diff --git a/packages/node-client/src/types/safeTransactionServiceTypes.ts b/packages/node-client/src/types/safeTransactionServiceTypes.ts deleted file mode 100644 index aa0b23b8c..000000000 --- a/packages/node-client/src/types/safeTransactionServiceTypes.ts +++ /dev/null @@ -1,362 +0,0 @@ -import { Signer } from '@ethersproject/abstract-signer' -import { SmartAccountTrx } from '@biconomy-sdk/core-types' - -export type SmartAccountInfoResponse = { - readonly name: string - readonly version: string - readonly api_version: string - readonly secure: boolean - readonly settings: { - readonly AWS_CONFIGURED: boolean - readonly AWS_S3_CUSTOM_DOMAIN: string - readonly ETHEREUM_NODE_URL: string - readonly ETHEREUM_TRACING_NODE_URL: string - readonly ETH_INTERNAL_TXS_BLOCK_PROCESS_LIMIT: number - readonly ETH_INTERNAL_NO_FILTER: boolean - readonly ETH_REORG_BLOCKS: number - readonly TOKENS_LOGO_BASE_URI: string - readonly TOKENS_LOGO_EXTENSION: string - } -} - -export type ChainConfig = { - chainId: number - name: string - symbol: string - isL2: boolean - isMainnet: boolean - description: string - blockExplorerUriTemplate: BlockExplorerConfig - ensRegistryAddress: string - walletFactoryAddress: string - walletAddress: string // base wallet - entryPoint: string //should make this address var - fallBackHandler: string //should make this address var - relayerURL: string - providerUrl: string - indexerUrl: string - backendNodeUrl: string - createdAt: Date - updatedAt: Date - token: TokenInfo -} - -export type MasterCopyResponse = { - address: string - version: string - deployer: string - deployedBlockNumber: number - lastIndexedBlockNumber: number -} - -export type SafeInfoResponse = { - readonly address: string - readonly nonce: number - readonly threshold: number - readonly owners: string[] - readonly masterCopy: string - readonly modules: string[] - readonly fallbackHandler: string - readonly version: string -} - -export type OwnerResponse = { - safes: string[] -} - -export type BlockExplorerConfig = { - address: string - txHash: string - api: string -} - -export type TokenInfo = { - id: number - name: string - symbol: string - blockChain: number - ercType?: string - decimals: number - logoUri: string - address: string - isNativeToken: boolean - isEnabled: boolean - cmcId: number //Verify - price: number //Verify - createdAt: Date - updatedAt: Date -} - -export type ChainConfigResponse = { - message: string - code: number - data: ChainConfig[] -} - -export type SmartAccountCreationInfoResponse = { - readonly created: string - readonly creator: string - readonly transactionHash: string - readonly factoryAddress: string - readonly masterCopy: string - readonly setupData: string - readonly dataDecoded?: string -} - -export type SmartAccountDelegateDeleteConfig = { - readonly safe: string - readonly delegate: string - readonly signer: Signer -} - -export type SmartAccountDelegateConfig = SmartAccountDelegateDeleteConfig & { - readonly label: string -} - -export type SmartAccountDelegate = { - readonly safe: string - readonly delegate: string - readonly signature: string - readonly label: string -} - -export type SafeDelegateResponse = { - readonly delegate: string - readonly delegator: string - readonly label: string -} - -export type SafeDelegateListResponse = { - readonly count: number - readonly next?: string - readonly previous?: string - readonly results: SafeDelegateResponse[] -} - -export type SafeMultisigTransactionEstimate = { - readonly to: string - readonly value: string - readonly data?: string - readonly operation: number -} - -export type SafeMultisigTransactionEstimateResponse = { - readonly safeTxGas: string -} - -export type SignatureResponse = { - readonly signature: string -} - -export type SafeMultisigConfirmationResponse = { - readonly owner: string - readonly submissionDate: string - readonly transactionHash?: string - readonly confirmationType?: string - readonly signature: string - readonly signatureType?: string -} - -export type SafeMultisigConfirmationListResponse = { - readonly count: number - readonly next?: string - readonly previous?: string - readonly results: SafeMultisigConfirmationResponse[] -} - -export type ProposeTransactionProps = { - safeAddress: string - senderAddress: string - safeTransaction: SmartAccountTrx - safeTxHash: string - origin?: string -} - -export type SafeMultisigTransactionResponse = { - readonly safe: string - readonly to: string - readonly value: string - readonly data?: string - readonly operation: number - readonly gasToken: string - readonly safeTxGas: number - readonly baseGas: number - readonly gasPrice: string - readonly refundReceiver?: string - readonly nonce: number - readonly executionDate: string - readonly submissionDate: string - readonly modified: string - readonly blockNumber?: number - readonly transactionHash: string - readonly safeTxHash: string - readonly executor?: string - readonly isExecuted: boolean - readonly isSuccessful?: boolean - readonly ethGasPrice?: string - readonly gasUsed?: number - readonly fee?: number - readonly origin: string - readonly dataDecoded?: string - readonly confirmationsRequired: number - readonly confirmations?: SafeMultisigConfirmationResponse[] - readonly signatures?: string -} - -export type SafeMultisigTransactionListResponse = { - readonly count: number - readonly next?: string - readonly previous?: string - readonly results: SafeMultisigTransactionResponse[] -} - -export type TransferResponse = { - readonly type?: string - readonly executionDate: string - readonly blockNumber: number - readonly transactionHash: string - readonly to: string - readonly value: string - readonly tokenId: string - readonly tokenAddress?: string - readonly from: string -} - -export type TransferListResponse = { - readonly count: number - readonly next?: string - readonly previous?: string - readonly results: TransferResponse[] -} - -export type SafeModuleTransaction = { - readonly created?: string - readonly executionDate: string - readonly blockNumber?: number - readonly isSuccessful?: boolean - readonly transactionHash?: string - readonly safe: string - readonly module: string - readonly to: string - readonly value: string - readonly data: string - readonly operation: number - readonly dataDecoded?: string -} - -export type SafeModuleTransactionListResponse = { - readonly count: number - readonly next?: string - readonly previous?: string - readonly results: SafeModuleTransaction[] -} - -export type Erc20Info = { - readonly name: string - readonly symbol: string - readonly decimals: number - readonly logoUri: string -} - -export type SafeBalancesOptions = { - excludeSpamTokens?: boolean -} - -export type SafeBalanceResponse = { - readonly tokenAddress: string - readonly token: Erc20Info - readonly balance: string -} - -export type SafeBalancesUsdOptions = { - excludeSpamTokens?: boolean -} - -export type SafeBalanceUsdResponse = { - readonly tokenAddress: string - readonly token: Erc20Info - readonly balance: string - readonly ethValue: string - readonly timestamp: string - readonly fiatBalance: string - readonly fiatConversion: string - readonly fiatCode: string -} - -export type SafeCollectiblesOptions = { - excludeSpamTokens?: boolean -} - -export type SafeCollectibleResponse = { - readonly address: string - readonly tokenName: string - readonly tokenSymbol: string - readonly logoUri: string - readonly id: string - readonly uri: string - readonly name: string - readonly description: string - readonly imageUri: string - readonly metadata: any -} - -export type TokenInfoResponse = { - readonly type?: string - readonly address: string - readonly name: string - readonly symbol: string - readonly decimals: number - readonly logoUri?: string -} - -export type TokenInfoListResponse = { - readonly count: number - readonly next?: string - readonly previous?: string - readonly results: TokenInfoListResponse[] -} - -export type TransferWithTokenInfoResponse = TransferResponse & { - readonly tokenInfo: TokenInfoResponse -} - -export type SafeModuleTransactionWithTransfersResponse = SafeModuleTransaction & { - readonly txType?: 'MODULE_TRANSACTION' - readonly transfers: TransferWithTokenInfoResponse[] -} - -export type SafeMultisigTransactionWithTransfersResponse = SafeMultisigTransactionResponse & { - readonly txType?: 'MULTISIG_TRANSACTION' - readonly transfers: TransferWithTokenInfoResponse[] -} - -export type EthereumTxResponse = { - readonly executionDate: string - readonly to: string - readonly data: string - readonly txHash: string - readonly blockNumber?: number - readonly from: string -} - -export type EthereumTxWithTransfersResponse = EthereumTxResponse & { - readonly txType?: 'ETHEREUM_TRANSACTION' - readonly transfers: TransferWithTokenInfoResponse[] -} - -export type AllTransactionsOptions = { - executed?: boolean - queued?: boolean - trusted?: boolean -} - -export type AllTransactionsListResponse = { - readonly count: number - readonly next?: string - readonly previous?: string - readonly results: Array< - | SafeModuleTransactionWithTransfersResponse - | SafeMultisigTransactionWithTransfersResponse - | EthereumTxWithTransfersResponse - > -} diff --git a/packages/node-client/tests/utils/setupServiceClient.ts b/packages/node-client/tests/utils/setupServiceClient.ts index 60e66fbff..3e667315b 100644 --- a/packages/node-client/tests/utils/setupServiceClient.ts +++ b/packages/node-client/tests/utils/setupServiceClient.ts @@ -1,12 +1,12 @@ import { getDefaultProvider } from '@ethersproject/providers' import { Wallet } from '@ethersproject/wallet' import { EthAdapter } from '@gnosis.pm/safe-core-sdk-types' -import SafeServiceClient from '../../src' +import NodeClient from '../../src' import config from './config' import { getEthAdapter } from './setupEthAdapter' interface ServiceClientConfig { - serviceSdk: SafeServiceClient + serviceSdk: NodeClient ethAdapter: EthAdapter signer: Wallet } @@ -15,6 +15,6 @@ export async function getServiceClient(signerPk: string): Promise - // wait for transaction confirmation - // wait(metaTxnId: string | SignedTransactions, timeout: number): Promise - } - - export * from './local-relayer' \ No newline at end of file + // relayer will submit the transaction(s) to the network and return the transaction response. + // The quote should be the one returned from getFeeOptions, if any. + /*quote?: FeeQuote*/ + relay( + rawTx: SignedTransaction, + config: SmartAccountState, + context: SmartAccountContext + ): Promise + // wait for transaction confirmation + // wait(metaTxnId: string | SignedTransactions, timeout: number): Promise +} + +export * from './local-relayer' diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index 08e22082e..e20505e17 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -1,7 +1,7 @@ import { TransactionRequest, TransactionResponse } from '@ethersproject/providers' -import { RawTransactionType } from '@biconomy-sdk/core-types'; +import { RawTransactionType } from '@biconomy-sdk/core-types' import { Signer as AbstractSigner, ethers } from 'ethers' -import { Relayer } from '.'; +import { Relayer } from '.' import { SmartWalletFactoryContract, @@ -10,121 +10,139 @@ import { MultiSendCallOnlyContract, TransactionResult, SmartAccountContext, - SmartAccountState, + SmartAccountState, SignedTransaction, WalletTransaction } from '@biconomy-sdk/core-types' -import { MetaTransaction, encodeMultiSend } from './utils/multisend'; +import { MetaTransaction, encodeMultiSend } from './utils/multisend' export class LocalRelayer implements Relayer { - private signer: AbstractSigner - // private txnOptions: TransactionRequest - - constructor(signer: AbstractSigner) { - if(!AbstractSigner.isSigner(signer)) throw new Error("Signer must have a provider"); - this.signer = signer; - if (!this.signer.provider) throw new Error("Signer must have a provider") - } + private signer: AbstractSigner + // private txnOptions: TransactionRequest - // TODO - // Review function arguments and return values - // Could get smartAccount instance - // Defines a type that takes config, context for SCW in play along with other details - async deployWallet(config: SmartAccountState, context: SmartAccountContext, index:number = 0): Promise { - // Should check if already deployed - //Review for index and ownership transfer case - const {address} = config; - const {walletFactory} = context; - const isExist = await walletFactory.isWalletExist(address); - if(isExist) { - throw new Error("Smart Account is Already Deployed") - } - const walletDeployTxn = this.prepareWalletDeploy(config, context, index); - const tx = this.signer.sendTransaction({ ...walletDeployTxn, gasLimit: ethers.constants.Two.pow(24) }); - return tx; + constructor(signer: AbstractSigner) { + if (!AbstractSigner.isSigner(signer)) throw new Error('Signer must have a provider') + this.signer = signer + if (!this.signer.provider) throw new Error('Signer must have a provider') + } + + // TODO + // Review function arguments and return values + // Could get smartAccount instance + // Defines a type that takes config, context for SCW in play along with other details + async deployWallet( + config: SmartAccountState, + context: SmartAccountContext, + index: number = 0 + ): Promise { + // Should check if already deployed + //Review for index and ownership transfer case + const { address } = config + const { walletFactory } = context + const isExist = await walletFactory.isWalletExist(address) + if (isExist) { + throw new Error('Smart Account is Already Deployed') } + const walletDeployTxn = this.prepareWalletDeploy(config, context, index) + const tx = this.signer.sendTransaction({ + ...walletDeployTxn, + gasLimit: ethers.constants.Two.pow(24) + }) + return tx + } - prepareWalletDeploy( // owner, entryPoint, handler, index - config:SmartAccountState, - context: SmartAccountContext, - index: number = 0, - // context: WalletContext - ): { to: string, data: string} { - const {walletFactory} = context; - const {owner, entryPointAddress, fallbackHandlerAddress} = config; - const factoryInterface = walletFactory.getInterface(); - - return { - to: walletFactory.getAddress(), // from context - data: factoryInterface.encodeFunctionData(factoryInterface.getFunction('deployCounterFactualWallet'), - [owner, entryPointAddress, fallbackHandlerAddress, index] - ) - } + prepareWalletDeploy( + // owner, entryPoint, handler, index + config: SmartAccountState, + context: SmartAccountContext, + index: number = 0 + // context: WalletContext + ): { to: string; data: string } { + const { walletFactory } = context + const { owner, entryPointAddress, fallbackHandlerAddress } = config + const factoryInterface = walletFactory.getInterface() + + return { + to: walletFactory.getAddress(), // from context + data: factoryInterface.encodeFunctionData( + factoryInterface.getFunction('deployCounterFactualWallet'), + [owner, entryPointAddress, fallbackHandlerAddress, index] + ) } + } - /*async isWalletDeployed(walletAddress: string): Promise { + /*async isWalletDeployed(walletAddress: string): Promise { // Check if wallet is deployed return true; }*/ - /*async getFeeOptions( + /*async getFeeOptions( ): Promise<{ options: FeeOption[] }> { return { options: [] } }*/ - - /*async gasRefundOptions( + + /*async gasRefundOptions( ): Promise { const { options } = //await this.getFeeOptions() return options }*/ - // Should make an object that takes config and context - // Add feeQuote later - // Appending tx and rawTx may not be necessary - - async relay(signedTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext) : Promise { - - const { isDeployed, address } = config; - const { multiSendCall } = context; // multisend has to be multiSendCallOnly here! - if(!isDeployed) { - // If not =>> preprendWalletDeploy - console.log('here'); - const {to, data} = this.prepareWalletDeploy(config,context); - const originalTx:WalletTransaction = signedTx.tx; - - const txs: MetaTransaction[] = [ - { - to, - value: 0, - data, - operation: 0 - }, - { - to: address, - value: 0, - data: signedTx.rawTx.data || '', - operation: 0 - } - ] - - const txnData = multiSendCall.getInterface().encodeFunctionData("multiSend", [ - encodeMultiSend(txs), - ]); - console - - const finalRawRx = { - to: multiSendCall.getAddress(), - data: txnData + // Should make an object that takes config and context + // Add feeQuote later + // Appending tx and rawTx may not be necessary + + async relay( + signedTx: SignedTransaction, + config: SmartAccountState, + context: SmartAccountContext + ): Promise { + const { isDeployed, address } = config + const { multiSendCall } = context // multisend has to be multiSendCallOnly here! + if (!isDeployed) { + // If not =>> preprendWalletDeploy + console.log('here') + const { to, data } = this.prepareWalletDeploy(config, context) + const originalTx: WalletTransaction = signedTx.tx + + const txs: MetaTransaction[] = [ + { + to, + value: 0, + data, + operation: 0 + }, + { + to: address, + value: 0, + data: signedTx.rawTx.data || '', + operation: 0 } - console.log('finaRawTx'); - console.log(finalRawRx); + ] - const tx = this.signer.sendTransaction({ ...finalRawRx, gasLimit: ethers.constants.Two.pow(24) }); - return tx; - // rawTx to becomes multiSend address and data gets prepared again + const txnData = multiSendCall + .getInterface() + .encodeFunctionData('multiSend', [encodeMultiSend(txs)]) + console + + const finalRawRx = { + to: multiSendCall.getAddress(), + data: txnData } + console.log('finaRawTx') + console.log(finalRawRx) - const tx = this.signer.sendTransaction({ ...signedTx.rawTx, gasLimit: ethers.constants.Two.pow(24) }); - return tx; + const tx = this.signer.sendTransaction({ + ...finalRawRx, + gasLimit: ethers.constants.Two.pow(24) + }) + return tx + // rawTx to becomes multiSend address and data gets prepared again } - } \ No newline at end of file + + const tx = this.signer.sendTransaction({ + ...signedTx.rawTx, + gasLimit: ethers.constants.Two.pow(24) + }) + return tx + } +} diff --git a/packages/relayer/src/utils/multisend.ts b/packages/relayer/src/utils/multisend.ts index ca303e216..5bbe6c70c 100644 --- a/packages/relayer/src/utils/multisend.ts +++ b/packages/relayer/src/utils/multisend.ts @@ -1,103 +1,93 @@ -import { Contract, BigNumber, BigNumberish, utils } from "ethers"; -import { TypedDataSigner } from "@ethersproject/abstract-signer"; -import { AddressZero } from "@ethersproject/constants"; +import { Contract, BigNumber, BigNumberish, utils } from 'ethers' +import { TypedDataSigner } from '@ethersproject/abstract-signer' +import { AddressZero } from '@ethersproject/constants' export interface MetaTransaction { - to: string; - value: string | number | BigNumber; - data: string; - operation: number; + to: string + value: string | number | BigNumber + data: string + operation: number } export interface WalletTransaction { - to: string; - value: BigNumberish; - data: string; - operation: number; - targetTxGas: string | number; - baseGas: string | number; - gasPrice: string | number; - gasToken: string; - refundReceiver: string; - nonce: number + to: string + value: BigNumberish + data: string + operation: number + targetTxGas: string | number + baseGas: string | number + gasPrice: string | number + gasToken: string + refundReceiver: string + nonce: number } export const buildContractCall = ( - contract: Contract, - method: string, - params: any[], - nonce: number, - delegateCall?: boolean, - overrides?: Partial + contract: Contract, + method: string, + params: any[], + nonce: number, + delegateCall?: boolean, + overrides?: Partial ): WalletTransaction => { - const data = contract.interface.encodeFunctionData(method, params); - return buildWalletTransaction( - Object.assign( - { - to: contract.address, - data, - operation: delegateCall ? 1 : 0, - nonce, - }, - overrides - ) - ); -}; + const data = contract.interface.encodeFunctionData(method, params) + return buildWalletTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }, + overrides + ) + ) +} export const buildWalletTransaction = (template: { - to: string; - value?: BigNumberish; - data?: string; - operation?: number; - targetTxGas?: number | string; - baseGas?: number | string; - gasPrice?: number | string; - gasToken?: string; - refundReceiver?: string; - nonce: number; + to: string + value?: BigNumberish + data?: string + operation?: number + targetTxGas?: number | string + baseGas?: number | string + gasPrice?: number | string + gasToken?: string + refundReceiver?: string + nonce: number }): WalletTransaction => { - return { - to: template.to, - value: template.value || 0, - data: template.data || "0x", - operation: template.operation || 0, - targetTxGas: template.targetTxGas || 0, - baseGas: template.baseGas || 0, - gasPrice: template.gasPrice || 0, - gasToken: template.gasToken || AddressZero, - refundReceiver: template.refundReceiver || AddressZero, - nonce: template.nonce, - }; -}; + return { + to: template.to, + value: template.value || 0, + data: template.data || '0x', + operation: template.operation || 0, + targetTxGas: template.targetTxGas || 0, + baseGas: template.baseGas || 0, + gasPrice: template.gasPrice || 0, + gasToken: template.gasToken || AddressZero, + refundReceiver: template.refundReceiver || AddressZero, + nonce: template.nonce + } +} const encodeMetaTransaction = (tx: MetaTransaction): string => { - const data = utils.arrayify(tx.data); - const encoded = utils.solidityPack( - ["uint8", "address", "uint256", "uint256", "bytes"], - [tx.operation, tx.to, tx.value, data.length, data] - ); - return encoded.slice(2); -}; + const data = utils.arrayify(tx.data) + const encoded = utils.solidityPack( + ['uint8', 'address', 'uint256', 'uint256', 'bytes'], + [tx.operation, tx.to, tx.value, data.length, data] + ) + return encoded.slice(2) +} export const encodeMultiSend = (txs: MetaTransaction[]): string => { - return "0x" + txs.map((tx) => encodeMetaTransaction(tx)).join(""); -}; + return '0x' + txs.map((tx) => encodeMetaTransaction(tx)).join('') +} export const buildMultiSendSafeTx = ( - multiSend: Contract, - txs: MetaTransaction[], - nonce: number, - overrides?: Partial + multiSend: Contract, + txs: MetaTransaction[], + nonce: number, + overrides?: Partial ): WalletTransaction => { - return buildContractCall( - multiSend, - "multiSend", - [encodeMultiSend(txs)], - nonce, - true, - overrides - ); -}; - - - + return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) +} diff --git a/packages/smart-account/package-lock.json b/packages/smart-account/package-lock.json new file mode 100644 index 000000000..ed2461fae --- /dev/null +++ b/packages/smart-account/package-lock.json @@ -0,0 +1,5027 @@ +{ + "name": "@biconomy-sdk/smart-account", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true + }, + "@babel/core": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", + "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.9", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.9", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", + "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==", + "dev": true, + "requires": { + "@babel/types": "^7.18.9", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", + "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/traverse": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz", + "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.9", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.9", + "@babel/types": "^7.18.9", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", + "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/basex": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", + "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "requires": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/hdnode": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", + "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/json-wallets": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", + "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + }, + "@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", + "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/sha2": "^5.6.1" + } + }, + "@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/providers": { + "version": "5.6.8", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", + "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "@ethersproject/random": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", + "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/sha2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" + } + }, + "@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/solidity": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/units": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", + "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/wallet": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", + "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", + "dev": true, + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/wordlists": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", + "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@gnosis.pm/safe-deployments": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", + "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", + "requires": { + "semver": "^7.3.7" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", + "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/reporters": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.1.3", + "jest-config": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-resolve-dependencies": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "jest-watcher": "^28.1.3", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", + "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3" + } + }, + "@jest/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "dev": true, + "requires": { + "expect": "^28.1.3", + "jest-snapshot": "^28.1.3" + } + }, + "@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2" + } + }, + "@jest/fake-timers": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", + "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "@jest/globals": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", + "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/types": "^28.1.3" + } + }, + "@jest/reporters": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", + "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, + "@jest/source-map": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.13", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", + "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "dev": true, + "requires": { + "@jest/test-result": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + } + }, + "@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@sinclair/typebox": { + "version": "0.24.21", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.21.tgz", + "integrity": "sha512-II2SIjvxBVJmrGkkZYza/BqNjwx3PWROIA8CZ0/Hn7LV0Mv0CVpZxoyHGBVsQqfFLMv9DmArIeRHTwo76bE6oA==", + "dev": true + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@types/babel__core": { + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", + "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" + } + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/mocha": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" + }, + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true + }, + "@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", + "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" + } + } + }, + "@types/prettier": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz", + "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==", + "dev": true + }, + "@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "18.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", + "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" + } + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.31.0.tgz", + "integrity": "sha512-VKW4JPHzG5yhYQrQ1AzXgVgX8ZAJEvCz0QI6mLRX4tf7rnFfh5D8SKm0Pq6w5PyNfAWJk6sv313+nEt3ohWMBQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.31.0", + "@typescript-eslint/type-utils": "5.31.0", + "@typescript-eslint/utils": "5.31.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.31.0.tgz", + "integrity": "sha512-UStjQiZ9OFTFReTrN+iGrC6O/ko9LVDhreEK5S3edmXgR396JGq7CoX2TWIptqt/ESzU2iRKXAHfSF2WJFcWHw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.31.0", + "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/typescript-estree": "5.31.0", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz", + "integrity": "sha512-8jfEzBYDBG88rcXFxajdVavGxb5/XKXyvWgvD8Qix3EEJLCFIdVloJw+r9ww0wbyNLOTYyBsR+4ALNGdlalLLg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/visitor-keys": "5.31.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz", + "integrity": "sha512-7ZYqFbvEvYXFn9ax02GsPcEOmuWNg+14HIf4q+oUuLnMbpJ6eHAivCg7tZMVwzrIuzX3QCeAOqKoyMZCv5xe+w==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.31.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/types": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.31.0.tgz", + "integrity": "sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz", + "integrity": "sha512-3S625TMcARX71wBc2qubHaoUwMEn+l9TCsaIzYI/ET31Xm2c9YQ+zhGgpydjorwQO9pLfR/6peTzS/0G3J/hDw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/visitor-keys": "5.31.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.31.0.tgz", + "integrity": "sha512-kcVPdQS6VIpVTQ7QnGNKMFtdJdvnStkqS5LeALr4rcwx11G6OWb2HB17NMPnlRHvaZP38hL9iK8DdE9Fne7NYg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.31.0", + "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/typescript-estree": "5.31.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz", + "integrity": "sha512-ZK0jVxSjS4gnPirpVjXHz7mgdOsZUHzNYSfTw2yPa3agfbt9YfqaBiBZFSSxeBWnpWkzCxTfUpnzA3Vily/CSg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.31.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "babel-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", + "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "dev": true, + "requires": { + "@jest/transform": "^28.1.3", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.1.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", + "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", + "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^28.1.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001373", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", + "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "electron-to-chromium": { + "version": "1.4.204", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.204.tgz", + "integrity": "sha512-5Ojjtw9/c9HCXtMVE6SXVSHSNjmbFOXpKprl6mY/5moLSxLeWatuYA7KTD+RzJMxLRH6yNNQrqGz9p6IoNBMgw==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", + "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "ethers": { + "version": "5.6.9", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", + "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", + "dev": true, + "requires": { + "@ethersproject/abi": "5.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dev": true, + "requires": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@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": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest-changed-files": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", + "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } + } + }, + "jest-circus": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", + "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "p-limit": "^3.1.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } + } + }, + "jest-cli": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", + "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "dev": true, + "requires": { + "@jest/core": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + } + }, + "jest-config": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", + "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.3", + "@jest/types": "^28.1.3", + "babel-jest": "^28.1.3", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.3", + "jest-environment-node": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-docblock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", + "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.3", + "pretty-format": "^28.1.3" + } + }, + "jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", + "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", + "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true + }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + }, + "jest-resolve": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", + "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", + "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "dev": true, + "requires": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.3" + } + }, + "jest-runner": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", + "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/environment": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-leak-detector": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-resolve": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-util": "^28.1.3", + "jest-watcher": "^28.1.3", + "jest-worker": "^28.1.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } + } + }, + "jest-runtime": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", + "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/globals": "^28.1.3", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", + "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "natural-compare": "^1.4.0", + "pretty-format": "^28.1.3", + "semver": "^7.3.5" + } + }, + "jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", + "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.3" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dev": true, + "requires": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node-gyp-build": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + } + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "requires": { + "http-https": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@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" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "requires": { + "bn.js": "^5.2.0" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "utf-8-validate": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "web3-core": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", + "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", + "requires": { + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.7.4", + "web3-core-method": "1.7.4", + "web3-core-requestmanager": "1.7.4", + "web3-utils": "1.7.4" + }, + "dependencies": { + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + } + } + }, + "web3-core-helpers": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", + "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", + "requires": { + "web3-eth-iban": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-method": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", + "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", + "requires": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.7.4", + "web3-core-promievent": "1.7.4", + "web3-core-subscriptions": "1.7.4", + "web3-utils": "1.7.4" + } + }, + "web3-core-promievent": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", + "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-core-requestmanager": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", + "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", + "requires": { + "util": "^0.12.0", + "web3-core-helpers": "1.7.4", + "web3-providers-http": "1.7.4", + "web3-providers-ipc": "1.7.4", + "web3-providers-ws": "1.7.4" + } + }, + "web3-core-subscriptions": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", + "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4" + } + }, + "web3-eth-iban": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", + "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", + "requires": { + "bn.js": "^5.2.1", + "web3-utils": "1.7.4" + } + }, + "web3-providers-http": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", + "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", + "requires": { + "web3-core-helpers": "1.7.4", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", + "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", + "requires": { + "oboe": "2.1.5", + "web3-core-helpers": "1.7.4" + } + }, + "web3-providers-ws": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", + "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", + "requires": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.4", + "websocket": "^1.0.32" + } + }, + "web3-utils": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", + "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", + "requires": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + } + }, + "websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.20.0", + "for-each": "^0.3.3", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.9" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", + "requires": { + "cookiejar": "^2.1.1" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index dbf3181db..be3b42109 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -1,6 +1,11 @@ -import { SmartAccountConfig, networks, ChainId, ChainConfig, - SmartAccountContext, Transaction, ZERO_ADDRESS, ChainConfigResponse } from './types' - import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer' +import { + SmartAccountConfig, + ChainId, + ChainConfig, + SmartAccountContext, + Transaction, + ChainConfigResponse +} from './types' import EthersAdapter from '@biconomy-sdk/ethers-lib' import { ethers, providers, Wallet } from 'ethers' import { @@ -14,24 +19,20 @@ import { SmartWalletContract, MultiSendContract, MultiSendCallOnlyContract, - TransactionResult, RawTransactionType, - SmartAccountState, + SmartAccountState } from '@biconomy-sdk/core-types' -import { JsonRpcSigner, TransactionRequest, TransactionResponse } from '@ethersproject/providers'; -import SafeServiceClient from '@biconomy-sdk/node-client'; +import { JsonRpcSigner, TransactionRequest, TransactionResponse } from '@ethersproject/providers' +import NodeClient from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' -import { Relayer, LocalRelayer } from '@biconomy-sdk/relayer'; -import { - WalletTransaction, - ExecTransaction, - FeeRefund, - SmartAccountTransaction, - getSignatureParameters, - EIP712_WALLET_TX_TYPE, - buildWalletTransaction, - safeSignMessage -} from '@biconomy-sdk/transactions'; +import { Relayer, LocalRelayer } from '@biconomy-sdk/relayer' +import { + WalletTransaction, + ExecTransaction, + FeeRefund, + buildWalletTransaction, + safeSignMessage +} from '@biconomy-sdk/transactions' class SmartAccount { // { ethAdapter } is a window that gave access to all the Implemented function of it @@ -48,11 +49,11 @@ class SmartAccount { chainConfig!: ChainConfig[] // providers!: Web3Provider[] - provider!: Web3Provider + provider!: Web3Provider - signer!: JsonRpcSigner + signer!: JsonRpcSigner - nodeClient!: SafeServiceClient + nodeClient!: NodeClient relayer!: Relayer @@ -68,12 +69,10 @@ class SmartAccount { multiSendCallOnlyContract!: { [chainId: number]: MultiSendCallOnlyContract } smartWalletFactoryContract!: { [chainId: number]: SmartWalletFactoryContract } - // Review :: ToDo - // To be able to passs provider : WalletProviderLike + // To be able to passs provider : WalletProviderLike // in mexa sdk we have ExternalProvider - constructor(walletProvider:Web3Provider ,config?: Partial) { - + constructor(walletProvider: Web3Provider, config?: Partial) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } if (config) { this.#smartAccountConfig = { ...this.#smartAccountConfig, ...config } @@ -84,76 +83,67 @@ class SmartAccount { this.multiSendContract = {} this.multiSendCallOnlyContract = {} this.smartWalletFactoryContract = {} - this.supportedNetworkIds = this.#smartAccountConfig.supportedNetworksIds; + this.supportedNetworkIds = this.#smartAccountConfig.supportedNetworksIds this.provider = walletProvider - this.signer = walletProvider.getSigner(); - - this.nodeClient = new SafeServiceClient({txServiceUrl: this.#smartAccountConfig.backend_url}); + this.signer = walletProvider.getSigner() + + this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) } // for testing // providers and contracts initialization public async init(): Promise { - const chainConfig = (await this.getSupportedChainsInfo()).data; - this.chainConfig = chainConfig; - console.log("chain config: ", chainConfig); + const chainConfig = (await this.getSupportedChainsInfo()).data + this.chainConfig = chainConfig + console.log('chain config: ', chainConfig) // instead of getting from networks, get details from chainConfig - const signer = this.signer; + const signer = this.signer // Review // check usage of getsignerByAddress from mexa/sdk and playground - for(let i=0; i < this.supportedNetworkIds.length; i++) { - const network = this.supportedNetworkIds[i]; - const providerUrl = chainConfig.find(n => n.chainId === network)?.providerUrl; - const readProvider = new ethers.providers.JsonRpcProvider(providerUrl); + for (let i = 0; i < this.supportedNetworkIds.length; i++) { + const network = this.supportedNetworkIds[i] + const providerUrl = chainConfig.find((n) => n.chainId === network)?.providerUrl + const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) // instantiating EthersAdapter instance and maintain it as class level variable this.ethAdapter[network] = new EthersAdapter({ ethers, signer, - provider:readProvider + provider: readProvider }) // EntryPoint and FallbackHandler etc Has to be same for all networks - - this.initializeContracts(network); - } + + this.initializeContracts(network) + } // Review - this.owner = await this.ethersAdapter().getSignerAddress(); + this.owner = await this.ethersAdapter().getSignerAddress() // Commeting below only for debugging test case!! - this.address = await this.getAddress(); - return this; + this.address = await this.getAddress() + return this } // getSupportedNetworks / chains endpoint - // intialize contract to be used throughout this class private initializeContracts(chainId: ChainId) { this.smartWalletFactoryContract[chainId] = getSmartWalletFactoryContract( chainId, this.ethAdapter[chainId] - ); + ) // Should attach the address here - this.smartWalletContract[chainId] = getSmartWalletContract( - chainId, - this.ethAdapter[chainId] - ); - - this.multiSendContract[chainId] = getMultiSendContract( - chainId, - this.ethAdapter[chainId] - ); + this.smartWalletContract[chainId] = getSmartWalletContract(chainId, this.ethAdapter[chainId]) + this.multiSendContract[chainId] = getMultiSendContract(chainId, this.ethAdapter[chainId]) this.multiSendCallOnlyContract[chainId] = getMultiSendCallOnlyContract( chainId, this.ethAdapter[chainId] - ); + ) } - private async getSupportedChainsInfo(): Promise { - return this.nodeClient.getChainInfo(); + return this.nodeClient.getAllSupportedChains() } // return adapter instance to be used for blockchain interactions @@ -176,115 +166,119 @@ class SmartAccount { } setActiveChain(chainId: ChainId): SmartAccount { - this.#smartAccountConfig.activeNetworkId = chainId; - return this; + this.#smartAccountConfig.activeNetworkId = chainId + return this } // async sendSignedTransaction : must expect signature! - // async sign - async signTransaction(tx: WalletTransaction, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - - let walletContract = this.smartAccount(chainId).getContract(); - walletContract = walletContract.attach(this.address); - - const { signer, data } = await safeSignMessage( - this.signer, - walletContract, - tx, - chainId - ); - - let signature = "0x"; - signature += data.slice(2); - return signature; + // async sign + async signTransaction( + tx: WalletTransaction, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + let walletContract = this.smartAccount(chainId).getContract() + walletContract = walletContract.attach(this.address) + + const { signer, data } = await safeSignMessage(this.signer, walletContract, tx, chainId) + + let signature = '0x' + signature += data.slice(2) + return signature } - // will get signer's signature // TODO: // Signer should be able to use _typedSignData - async sendTransaction(tx:WalletTransaction, batchId:number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + async sendTransaction( + tx: WalletTransaction, + batchId: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { let rawTx: RawTransactionType = { to: tx.to, data: tx.data, value: tx.value, chainId: chainId - }; + } const transaction: ExecTransaction = { to: tx.to, value: tx.value, data: tx.data, operation: tx.operation, - targetTxGas: tx.targetTxGas, - }; + targetTxGas: tx.targetTxGas + } const refundInfo: FeeRefund = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, gasToken: tx.gasToken, - refundReceiver: tx.refundReceiver, - }; + refundReceiver: tx.refundReceiver + } // Should call this.signTransaction - let walletContract = this.smartAccount(chainId).getContract(); - walletContract = walletContract.attach(this.address); + let walletContract = this.smartAccount(chainId).getContract() + walletContract = walletContract.attach(this.address) + + let signature = await this.signTransaction(tx) - let signature = await this.signTransaction(tx); - let execTransaction = await walletContract.populateTransaction.execTransaction( transaction, batchId, refundInfo, signature - ); + ) - rawTx.to = this.address; - rawTx.data = execTransaction.data; + rawTx.to = this.address + rawTx.data = execTransaction.data - const state = await this.getSmartAccountState(chainId); + const state = await this.getSmartAccountState(chainId) const signedTx = { rawTx, tx } - const txn = await this.relayer.relay(signedTx, state, this.getSmartAccountContext(chainId)); - return txn; + const txn = await this.relayer.relay(signedTx, state, this.getSmartAccountContext(chainId)) + return txn } - // Todo : rename + // Todo : rename // This transaction is without fee refund (gasless) // We need to have identifiers for these txns - async createSmartAccountTransaction(transaction: Transaction, batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - let walletContract = this.smartAccount(chainId).getContract(); - walletContract = walletContract.attach(this.address); - + async createSmartAccountTransaction( + transaction: Transaction, + batchId: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + let walletContract = this.smartAccount(chainId).getContract() + walletContract = walletContract.attach(this.address) + // If the wallet is not deployed yet then nonce would be zero // Review - let nonce = 0; - if(await this.isDeployed(chainId)) { - nonce = (await walletContract.getNonce(batchId)).toNumber(); - } - console.log('nonce: ', nonce); + let nonce = 0 + if (await this.isDeployed(chainId)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } + console.log('nonce: ', nonce) const walletTx: WalletTransaction = buildWalletTransaction({ to: transaction.to, // value: ethers.utils.parseEther("1"), data: transaction.data, // for token transfers use encodeTransfer nonce - }); + }) - return walletTx; - }; + return walletTx + } // return smartaccount instance // maybe call this basewallet or wallet smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { const smartWallet = this.smartWalletContract[chainId] - const address = this.address; - smartWallet.getContract().attach(address); - return smartWallet; + const address = this.address + smartWallet.getContract().attach(address) + return smartWallet } factory(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletFactoryContract { @@ -295,13 +289,18 @@ class SmartAccount { return this.multiSendContract[chainId] } - multiSendCall(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendCallOnlyContract { + multiSendCall( + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): MultiSendCallOnlyContract { return this.multiSendCallOnlyContract[chainId] } // Optional index allowed - async getAddress(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId) : Promise { - return await this.getAddressForCounterfactualWallet(index,chainId); + async getAddress( + index: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + return await this.getAddressForCounterfactualWallet(index, chainId) } // Review @@ -312,39 +311,45 @@ class SmartAccount { // return !!walletCode && walletCode !== '0x' // but below works - return await this.factory(chainId).isWalletExist(this.address); + return await this.factory(chainId).isWalletExist(this.address) } // sort of config - async getSmartAccountState(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - const entryPoint = this.chainConfig.find(n => n.chainId === chainId)?.entryPoint; - const fallbackHandlerAddress = this.chainConfig.find(n => n.chainId === chainId)?.fallBackHandler; + async getSmartAccountState( + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + const entryPoint = this.chainConfig.find((n) => n.chainId === chainId)?.entryPoint + const fallbackHandlerAddress = this.chainConfig.find( + (n) => n.chainId === chainId + )?.fallBackHandler const state: SmartAccountState = { - address: this.address, - owner: this.owner, - isDeployed: await this.isDeployed(chainId), // could be set as state in init - entryPointAddress: entryPoint || '', - fallbackHandlerAddress: fallbackHandlerAddress || '' + address: this.address, + owner: this.owner, + isDeployed: await this.isDeployed(chainId), // could be set as state in init + entryPointAddress: entryPoint || '', + fallbackHandlerAddress: fallbackHandlerAddress || '' } - return state; + return state } // Instead of addresses should return contract instances - getSmartAccountContext(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartAccountContext { + getSmartAccountContext( + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): SmartAccountContext { const context: SmartAccountContext = { baseWallet: this.smartAccount(chainId), //might as well do getContract and attach and return contract walletFactory: this.factory(chainId), multiSend: this.multiSend(chainId), multiSendCall: this.multiSendCall(chainId) } - return context; + return context } // more methods // accountConfiguration? // sendSignedTransaction // signMessage - + // Discuss about multichain aspect of relayer node url and clients // TODO: get details from backend config @@ -357,17 +362,21 @@ class SmartAccount { * @description return address for Smart account * @returns */ - async getAddressForCounterfactualWallet(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - return await this.smartWalletFactoryContract[ - chainId - ].getAddressForCounterfactualWallet(this.owner, index) + async getAddressForCounterfactualWallet( + index: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + return await this.smartWalletFactoryContract[chainId].getAddressForCounterfactualWallet( + this.owner, + index + ) } } export const DefaultSmartAccountConfig: SmartAccountConfig = { activeNetworkId: ChainId.RINKEBY, //Update later supportedNetworksIds: [ChainId.GOERLI, ChainId.RINKEBY, ChainId.MUMBAI], - backend_url: "http://localhost:3000/v1" + backend_url: 'http://localhost:3000/v1' } export default SmartAccount diff --git a/packages/smart-account/src/assets/index.ts b/packages/smart-account/src/assets/index.ts index b2c0d678e..0c5669d9a 100644 --- a/packages/smart-account/src/assets/index.ts +++ b/packages/smart-account/src/assets/index.ts @@ -1,1218 +1,1231 @@ export const MultiSend = { - "defaultAddress": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "released": true, - "contractName": "MultiSend", - "version": "1.0.0", - "networkAddresses": { - "1": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "4": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "5": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "42": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "88": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "100": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "246": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "73799": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "31338": "0x1A3F36c656Da24c18C703B8c2d1829F5D32E8E49", - }, - "abi": [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes","name":"transactions","type":"bytes"}],"name":"multiSend","outputs":[],"stateMutability":"payable","type":"function"}] - } + defaultAddress: '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + released: true, + contractName: 'MultiSend', + version: '1.0.0', + networkAddresses: { + '1': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + '4': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + '5': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + '42': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + '88': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + '100': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + '246': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + '73799': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + '31338': '0x1A3F36c656Da24c18C703B8c2d1829F5D32E8E49' + }, + abi: [ + { inputs: [], stateMutability: 'nonpayable', type: 'constructor' }, + { + inputs: [{ internalType: 'bytes', name: 'transactions', type: 'bytes' }], + name: 'multiSend', + outputs: [], + stateMutability: 'payable', + type: 'function' + } + ] +} - export const MultiSendCallOnly = { - "defaultAddress": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "released": true, - "contractName": "MultiSendCallOnly", - "version": "1.0.0", - "networkAddresses": { - "1": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "4": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "5": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "42": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "88": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "100": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "246": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "73799": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "31338": "0x1A3F36c656Da24c18C703B8c2d1829F5D32E8E49", - }, - "abi": [{"inputs":[{"internalType":"bytes","name":"transactions","type":"bytes"}],"name":"multiSend","outputs":[],"stateMutability":"payable","type":"function"}] - } +export const MultiSendCallOnly = { + defaultAddress: '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + released: true, + contractName: 'MultiSendCallOnly', + version: '1.0.0', + networkAddresses: { + '1': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + '4': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + '5': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + '42': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + '88': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + '100': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + '246': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + '73799': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + '31338': '0x1A3F36c656Da24c18C703B8c2d1829F5D32E8E49' + }, + abi: [ + { + inputs: [{ internalType: 'bytes', name: 'transactions', type: 'bytes' }], + name: 'multiSend', + outputs: [], + stateMutability: 'payable', + type: 'function' + } + ] +} - export const SmartWallet = { - "defaultAddress": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", - "released": true, - "contractName": "SmartWallet", - "version": "1.0.0", - "networkAddresses": { - "1": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", - "4": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", - "5": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", - "42": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", - "100": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", - "31338": "0x0ba464506a3D66C962121e3C25ed56678A2585B6", +export const SmartWallet = { + defaultAddress: '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', + released: true, + contractName: 'SmartWallet', + version: '1.0.0', + networkAddresses: { + '1': '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', + '4': '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', + '5': '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', + '42': '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', + '100': '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', + '31338': '0x0ba464506a3D66C962121e3C25ed56678A2585B6' + }, + abi: [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'handler', + type: 'address' + } + ], + name: 'ChangedFallbackHandler', + type: 'event' }, - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "ChangedFallbackHandler", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "DisabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_scw", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_oldEOA", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_newEOA", - "type": "address" - } - ], - "name": "EOAChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "EnabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldEntryPoint", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newEntryPoint", - "type": "address" - } - ], - "name": "EntryPointChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "payment", - "type": "uint256" - } - ], - "name": "ExecutionFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "payment", - "type": "uint256" - } - ], - "name": "ExecutionSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "checkSignatures", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevModule", - "type": "address" - }, - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "disableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domainSeparator", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "enableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - } - ], - "internalType": "struct WalletStorage.Transaction", - "name": "_tx", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "internalType": "struct WalletStorage.FeeRefund", - "name": "refundInfo", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "encodeTransactionData", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "entryPoint", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "exec", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "execBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "execFromEntryPoint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - } - ], - "internalType": "struct WalletStorage.Transaction", - "name": "_tx", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "batchId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "internalType": "struct WalletStorage.FeeRefund", - "name": "refundInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "execTransaction", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModuleReturnData", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getChainId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "start", - "type": "address" - }, - { - "internalType": "uint256", - "name": "pageSize", - "type": "uint256" - } - ], - "name": "getModulesPaginated", - "outputs": [ - { - "internalType": "address[]", - "name": "array", - "type": "address[]" - }, - { - "internalType": "address", - "name": "next", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "batchId", - "type": "uint256" - } - ], - "name": "getNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "getTransactionHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_entryPoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "isModuleEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "pullTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "requiredTxGas", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "setFallbackHandler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "setOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_entryPoint", - "type": "address" - } - ], - "name": "updateEntryPoint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "updateImplementation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "internalType": "bytes", - "name": "paymasterData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "requestId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "requiredPrefund", - "type": "uint256" - } - ], - "name": "validateUserOp", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ] - } - - - export const WalletFactory = { - "defaultAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "released": true, - "contractName": "WalletFactory", - "version": "1.0.0", - "networkAddresses": { - "1": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "4": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "5": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "42": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "88": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "100": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "246": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "73799": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "31338": "0x85c0995669f8a0173a5B5F6003DA060E8D17f0c3", + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'DisabledModule', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: '_scw', + type: 'address' + }, + { + indexed: true, + internalType: 'address', + name: '_oldEOA', + type: 'address' + }, + { + indexed: true, + internalType: 'address', + name: '_newEOA', + type: 'address' + } + ], + name: 'EOAChanged', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'EnabledModule', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'oldEntryPoint', + type: 'address' + }, + { + indexed: false, + internalType: 'address', + name: 'newEntryPoint', + type: 'address' + } + ], + name: 'EntryPointChanged', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'ExecutionFromModuleFailure', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'ExecutionFromModuleSuccess', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'newImplementation', + type: 'address' + } + ], + name: 'ImplementationUpdated', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint8', + name: 'version', + type: 'uint8' + } + ], + name: 'Initialized', + type: 'event' + }, + { + stateMutability: 'nonpayable', + type: 'fallback' + }, + { + inputs: [], + name: 'VERSION', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'dataHash', + type: 'bytes32' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'bytes', + name: 'signatures', + type: 'bytes' + } + ], + name: 'checkSignatures', + outputs: [], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'prevModule', + type: 'address' + }, + { + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'disableModule', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [], + name: 'domainSeparator', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'enableModule', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + components: [ + { + internalType: 'address', + name: 'to', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + internalType: 'uint256', + name: 'targetTxGas', + type: 'uint256' + } + ], + internalType: 'struct WalletStorage.Transaction', + name: '_tx', + type: 'tuple' + }, + { + components: [ + { + internalType: 'uint256', + name: 'baseGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'gasPrice', + type: 'uint256' + }, + { + internalType: 'address', + name: 'gasToken', + type: 'address' + }, + { + internalType: 'address payable', + name: 'refundReceiver', + type: 'address' + } + ], + internalType: 'struct WalletStorage.FeeRefund', + name: 'refundInfo', + type: 'tuple' + }, + { + internalType: 'uint256', + name: '_nonce', + type: 'uint256' + } + ], + name: 'encodeTransactionData', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [], + name: 'entryPoint', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'dest', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'func', + type: 'bytes' + } + ], + name: 'exec', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address[]', + name: 'dest', + type: 'address[]' + }, + { + internalType: 'bytes[]', + name: 'func', + type: 'bytes[]' + } + ], + name: 'execBatch', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'dest', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'func', + type: 'bytes' + } + ], + name: 'execFromEntryPoint', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + components: [ + { + internalType: 'address', + name: 'to', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + internalType: 'uint256', + name: 'targetTxGas', + type: 'uint256' + } + ], + internalType: 'struct WalletStorage.Transaction', + name: '_tx', + type: 'tuple' + }, + { + internalType: 'uint256', + name: 'batchId', + type: 'uint256' + }, + { + components: [ + { + internalType: 'uint256', + name: 'baseGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'gasPrice', + type: 'uint256' + }, + { + internalType: 'address', + name: 'gasToken', + type: 'address' + }, + { + internalType: 'address payable', + name: 'refundReceiver', + type: 'address' + } + ], + internalType: 'struct WalletStorage.FeeRefund', + name: 'refundInfo', + type: 'tuple' + }, + { + internalType: 'bytes', + name: 'signatures', + type: 'bytes' + } + ], + name: 'execTransaction', + outputs: [ + { + internalType: 'bool', + name: 'success', + type: 'bool' + } + ], + stateMutability: 'payable', + type: 'function' }, - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_baseImpl", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_proxy", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_implementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "WalletCreated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_entryPoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_handler", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "deployCounterFactualWallet", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_entryPoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "name": "deployWallet", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAddressForCounterfactualWallet", - "outputs": [ - { - "internalType": "address", - "name": "_wallet", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isWalletExist", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ] - } - - + { + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + } + ], + name: 'execTransactionFromModule', + outputs: [ + { + internalType: 'bool', + name: 'success', + type: 'bool' + } + ], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + } + ], + name: 'execTransactionFromModuleReturnData', + outputs: [ + { + internalType: 'bool', + name: 'success', + type: 'bool' + }, + { + internalType: 'bytes', + name: 'returnData', + type: 'bytes' + } + ], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [], + name: 'getChainId', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'start', + type: 'address' + }, + { + internalType: 'uint256', + name: 'pageSize', + type: 'uint256' + } + ], + name: 'getModulesPaginated', + outputs: [ + { + internalType: 'address[]', + name: 'array', + type: 'address[]' + }, + { + internalType: 'address', + name: 'next', + type: 'address' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'batchId', + type: 'uint256' + } + ], + name: 'getNonce', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + internalType: 'uint256', + name: 'targetTxGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'baseGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'gasPrice', + type: 'uint256' + }, + { + internalType: 'address', + name: 'gasToken', + type: 'address' + }, + { + internalType: 'address payable', + name: 'refundReceiver', + type: 'address' + }, + { + internalType: 'uint256', + name: '_nonce', + type: 'uint256' + } + ], + name: 'getTransactionHash', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '_owner', + type: 'address' + }, + { + internalType: 'address', + name: '_entryPoint', + type: 'address' + }, + { + internalType: 'address', + name: '_handler', + type: 'address' + } + ], + name: 'init', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'isModuleEnabled', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256' + } + ], + name: 'nonces', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [], + name: 'owner', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address' + }, + { + internalType: 'address', + name: 'dest', + type: 'address' + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256' + } + ], + name: 'pullTokens', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + } + ], + name: 'requiredTxGas', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256' + } + ], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'handler', + type: 'address' + } + ], + name: 'setFallbackHandler', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '_newOwner', + type: 'address' + } + ], + name: 'setOwner', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'bytes4', + name: 'interfaceId', + type: 'bytes4' + } + ], + name: 'supportsInterface', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address payable', + name: 'dest', + type: 'address' + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256' + } + ], + name: 'transfer', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '_entryPoint', + type: 'address' + } + ], + name: 'updateEntryPoint', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '_implementation', + type: 'address' + } + ], + name: 'updateImplementation', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + components: [ + { + internalType: 'address', + name: 'sender', + type: 'address' + }, + { + internalType: 'uint256', + name: 'nonce', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'initCode', + type: 'bytes' + }, + { + internalType: 'bytes', + name: 'callData', + type: 'bytes' + }, + { + internalType: 'uint256', + name: 'callGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'verificationGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'preVerificationGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'maxFeePerGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'maxPriorityFeePerGas', + type: 'uint256' + }, + { + internalType: 'address', + name: 'paymaster', + type: 'address' + }, + { + internalType: 'bytes', + name: 'paymasterData', + type: 'bytes' + }, + { + internalType: 'bytes', + name: 'signature', + type: 'bytes' + } + ], + internalType: 'struct UserOperation', + name: 'userOp', + type: 'tuple' + }, + { + internalType: 'bytes32', + name: 'requestId', + type: 'bytes32' + }, + { + internalType: 'uint256', + name: 'requiredPrefund', + type: 'uint256' + } + ], + name: 'validateUserOp', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + } + ] +} +export const WalletFactory = { + defaultAddress: '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + released: true, + contractName: 'WalletFactory', + version: '1.0.0', + networkAddresses: { + '1': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + '4': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + '5': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + '42': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + '88': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + '100': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + '246': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + '73799': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + '31338': '0x85c0995669f8a0173a5B5F6003DA060E8D17f0c3' + }, + abi: [ + { + inputs: [ + { + internalType: 'address', + name: '_baseImpl', + type: 'address' + } + ], + stateMutability: 'nonpayable', + type: 'constructor' + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: '_proxy', + type: 'address' + }, + { + indexed: true, + internalType: 'address', + name: '_implementation', + type: 'address' + }, + { + indexed: true, + internalType: 'address', + name: '_owner', + type: 'address' + } + ], + name: 'WalletCreated', + type: 'event' + }, + { + inputs: [ + { + internalType: 'address', + name: '_owner', + type: 'address' + }, + { + internalType: 'address', + name: '_entryPoint', + type: 'address' + }, + { + internalType: 'address', + name: '_handler', + type: 'address' + }, + { + internalType: 'uint256', + name: '_index', + type: 'uint256' + } + ], + name: 'deployCounterFactualWallet', + outputs: [ + { + internalType: 'address', + name: 'proxy', + type: 'address' + } + ], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '_owner', + type: 'address' + }, + { + internalType: 'address', + name: '_entryPoint', + type: 'address' + }, + { + internalType: 'address', + name: '_handler', + type: 'address' + } + ], + name: 'deployWallet', + outputs: [ + { + internalType: 'address', + name: 'proxy', + type: 'address' + } + ], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '_owner', + type: 'address' + }, + { + internalType: 'uint256', + name: '_index', + type: 'uint256' + } + ], + name: 'getAddressForCounterfactualWallet', + outputs: [ + { + internalType: 'address', + name: '_wallet', + type: 'address' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address' + } + ], + name: 'isWalletExist', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool' + } + ], + stateMutability: 'view', + type: 'function' + } + ] +} diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 092cdee7a..9d97f4d18 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -1,6 +1,11 @@ -import { BytesLike, Wallet, BigNumberish } from 'ethers'; -import { ExternalProvider, Web3Provider } from '@ethersproject/providers'; -import { MultiSendContract, SmartWalletFactoryContract, SmartWalletContract, MultiSendCallOnlyContract } from '@biconomy-sdk/core-types'; +import { BytesLike, Wallet, BigNumberish } from 'ethers' +import { ExternalProvider, Web3Provider } from '@ethersproject/providers' +import { + MultiSendContract, + SmartWalletFactoryContract, + SmartWalletContract, + MultiSendCallOnlyContract +} from '@biconomy-sdk/core-types' // walletProvider: WalletProviderLike export interface SmartAccountConfig { @@ -22,37 +27,37 @@ export interface Transaction { // revertOnError?: boolean } -export const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; +export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' export interface SmartAccountState { - address: string, - owner: string, - isDeployed: boolean, - entryPointAddress: string, - fallbackHandlerAddress: string, + address: string + owner: string + isDeployed: boolean + entryPointAddress: string + fallbackHandlerAddress: string } export interface SmartAccountContext { - baseWallet: SmartWalletContract, - walletFactory: SmartWalletFactoryContract, - multiSend: MultiSendContract, + baseWallet: SmartWalletContract + walletFactory: SmartWalletFactoryContract + multiSend: MultiSendContract multiSendCall: MultiSendCallOnlyContract } // reference i could work on export interface WalletProvider { - readonly type?: string; - readonly wallet?: Wallet; - readonly address: string; - readonly networkName?: NetworkNames; - signMessage(message: BytesLike): Promise; + readonly type?: string + readonly wallet?: Wallet + readonly address: string + readonly networkName?: NetworkNames + signMessage(message: BytesLike): Promise } export interface WalletLike { - privateKey: string; + privateKey: string } -export type WalletProviderLike = string | WalletLike | WalletProvider; +export type WalletProviderLike = string | WalletLike | WalletProvider export enum NetworkNames { Mainnet = 'mainnet', @@ -78,7 +83,7 @@ export enum NetworkNames { Moonbeam = 'moonbeam', Moonbase = 'moonbase', Celo = 'celo', - CeloTest = 'celoTest', + CeloTest = 'celoTest' } export interface ContractInfo { @@ -257,7 +262,7 @@ export const networks: Record = { //name: 'Etherscan (Kovan)', address: 'https://kovan.etherscan.io/address', txHash: 'https://kovan.etherscan.io/tx', - api: 'https://api.kovan.etherscan.io/', + api: 'https://api.kovan.etherscan.io/' }, providerUrl: 'https://kovan.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' }, @@ -290,5 +295,5 @@ export const networks: Record = { api: 'https://api.ropsten.etherscan.io/' }, providerUrl: 'https://ropsten.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' - }, + } } diff --git a/packages/smart-account/src/utils/FetchContractsInfo.ts b/packages/smart-account/src/utils/FetchContractsInfo.ts index cd628d42a..9f59b163d 100644 --- a/packages/smart-account/src/utils/FetchContractsInfo.ts +++ b/packages/smart-account/src/utils/FetchContractsInfo.ts @@ -1,4 +1,9 @@ -import { SmartWalletContract, SmartWalletFactoryContract, MultiSendContract, MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' +import { + SmartWalletContract, + SmartWalletFactoryContract, + MultiSendContract, + MultiSendCallOnlyContract +} from '@biconomy-sdk/core-types' import { WalletFactory, SmartWallet, MultiSend, MultiSendCallOnly } from '../assets/index' import EthersAdapter from '@biconomy-sdk/ethers-lib' @@ -22,7 +27,10 @@ export function getMultiSendCallOnlyContract( chainId: number, ethAdapter: EthersAdapter ): MultiSendCallOnlyContract { - return ethAdapter.getMultiSendCallOnlyContract({ chainId, singletonDeployment: MultiSendCallOnly }) + return ethAdapter.getMultiSendCallOnlyContract({ + chainId, + singletonDeployment: MultiSendCallOnly + }) } export function getSmartWalletContract( chainId: number, diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 101515fdc..18e2b6081 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -1,8 +1,8 @@ -import SmartAccount from '../src/SmartAccount'; +import SmartAccount from '../src/SmartAccount' import { LocalRelayer } from '@biconomy-sdk/relayer' // import { Contract, ethers, Signer as AbstractSigner } from 'ethers' import { Contract, ethers, Signer as AbstractSigner } from 'ethers' -import { JsonRpcProvider, Web3Provider } from '@ethersproject/providers'; +import { JsonRpcProvider, Web3Provider } from '@ethersproject/providers' import chaiAsPromised from 'chai-as-promised' import * as chai from 'chai' @@ -11,14 +11,14 @@ const Web3 = require('web3') const { expect } = chai.use(chaiAsPromised) import hardhat from 'hardhat' -import { deployWalletContracts } from './utils/deploy'; +import { deployWalletContracts } from './utils/deploy' import { BytesLike, Interface } from 'ethers/lib/utils' type EthereumInstance = { - chainId?: number, - provider?: Web3Provider, + chainId?: number + provider?: Web3Provider signer?: AbstractSigner -}; +} // import hardhat from 'hardhat' // import { BytesLike, Interface } from 'ethers/lib/utils' @@ -30,25 +30,20 @@ describe('Wallet integration', function () { before(async () => { // Provider from hardhat without a server instance - ethnode.provider = new ethers.providers.Web3Provider(hardhat.network.provider.send); + ethnode.provider = new ethers.providers.Web3Provider(hardhat.network.provider.send) ethnode.signer = ethnode.provider.getSigner() ethnode.chainId = 31338 }) - beforeEach(async () => { - }) + beforeEach(async () => {}) - after(async () => { - }) + after(async () => {}) describe('Smart account usage and basic actions', () => { - - beforeEach(async () => { - }) + beforeEach(async () => {}) it('Should init and return details of smart account', async () => { - enum ChainId { // Ethereum MAINNET = 1, @@ -60,21 +55,21 @@ describe('Wallet integration', function () { HARDHAT = 31338 } - const userAddress = await ethnode.signer?.getAddress() || ''; + const userAddress = (await ethnode.signer?.getAddress()) || '' const eoaSigner = ethnode.provider?.getSigner() if (eoaSigner) { - const eoa = await eoaSigner.getAddress(); - console.log('eoa ', eoa); + const eoa = await eoaSigner.getAddress() + console.log('eoa ', eoa) } const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.RINKEBY, - supportedNetworksIds: [ChainId.RINKEBY], // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.RINKEBY] // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backend_url: "http://localhost:3000/v1" - }); + }) // adds entry point, multiSendCall and fallbackHandler // const [ smartWallet, walletFactory, multiSend ] = await deployWalletContracts(ethnode.signer); @@ -86,24 +81,23 @@ describe('Wallet integration', function () { // There must be a way to set wallet context before we go with init and deploy + txn tests // I'd have to deploy the contracts and set specs - const smartAccount = await wallet.init(); - console.log(wallet.owner); + const smartAccount = await wallet.init() + console.log(wallet.owner) - console.log(smartAccount.smartAccount(ChainId.RINKEBY).getAddress()); - console.log(smartAccount.factory(ChainId.RINKEBY).getAddress()); + console.log(smartAccount.smartAccount(ChainId.RINKEBY).getAddress()) + console.log(smartAccount.factory(ChainId.RINKEBY).getAddress()) - const signer = await smartAccount.ethersAdapter().getSignerAddress(); + const signer = await smartAccount.ethersAdapter().getSignerAddress() - const address = await smartAccount.getAddress(); - console.log('counter factual wallet address: ', address); + const address = await smartAccount.getAddress() + console.log('counter factual wallet address: ', address) - const isDeployed = await smartAccount.isDeployed(); /// can pass chainId here + const isDeployed = await smartAccount.isDeployed() /// can pass chainId here // Check if the smart wallet is deployed or not - const state = await smartAccount.getSmartAccountState(); - console.log('wallet state'); - console.log(state); + const state = await smartAccount.getSmartAccountState() + console.log('wallet state') + console.log(state) expect(isDeployed).to.be.equal(false) }) }) }) - diff --git a/packages/smart-account/tests/utils/deploy.ts b/packages/smart-account/tests/utils/deploy.ts index 9924bf02b..473625752 100644 --- a/packages/smart-account/tests/utils/deploy.ts +++ b/packages/smart-account/tests/utils/deploy.ts @@ -7,22 +7,30 @@ const MultiSendArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contra // const MultiSendCallOnlyArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol/MultiSendCallOnly.json') export async function deployWalletContracts( - signer: ethers.Signer + signer: ethers.Signer ): Promise<[Contract, Contract, Contract]> { - // could get these from type chain - - const smartWallet = (await new ethers.ContractFactory(SmartWalletArtifact.abi, SmartWalletArtifact.bytecode, signer).deploy( - )) as unknown as Contract - - const walletFactory = (await new ethers.ContractFactory(WalletFactoryArtifact.abi, WalletFactoryArtifact.bytecode, signer).deploy(smartWallet.address - )) as unknown as Contract - - const multiSend = (await new ethers.ContractFactory(MultiSendArtifact.abi, MultiSendArtifact.bytecode, signer).deploy( - )) as unknown as Contract - - /*const multiSendCallOnly = (await new ethers.ContractFactory(MultiSendCallOnlyArtifact.abi, MultiSendCallOnlyArtifact.bytecode, signer).deploy( + // could get these from type chain + + const smartWallet = (await new ethers.ContractFactory( + SmartWalletArtifact.abi, + SmartWalletArtifact.bytecode, + signer + ).deploy()) as unknown as Contract + + const walletFactory = (await new ethers.ContractFactory( + WalletFactoryArtifact.abi, + WalletFactoryArtifact.bytecode, + signer + ).deploy(smartWallet.address)) as unknown as Contract + + const multiSend = (await new ethers.ContractFactory( + MultiSendArtifact.abi, + MultiSendArtifact.bytecode, + signer + ).deploy()) as unknown as Contract + + /*const multiSendCallOnly = (await new ethers.ContractFactory(MultiSendCallOnlyArtifact.abi, MultiSendCallOnlyArtifact.bytecode, signer).deploy( )) as unknown as Contract*/ - return [smartWallet, walletFactory, multiSend] - -} \ No newline at end of file + return [smartWallet, walletFactory, multiSend] +} diff --git a/packages/smart-account/tests/utils/index.ts b/packages/smart-account/tests/utils/index.ts index 312156155..cd98452cd 100644 --- a/packages/smart-account/tests/utils/index.ts +++ b/packages/smart-account/tests/utils/index.ts @@ -1,5 +1,9 @@ import { ethers } from 'ethers' -export async function encodeData(contract: ethers.Contract, method: string, ...args: any): Promise { - return (await contract.populateTransaction[method](...args)).data || '' -} \ No newline at end of file +export async function encodeData( + contract: ethers.Contract, + method: string, + ...args: any +): Promise { + return (await contract.populateTransaction[method](...args)).data || '' +} diff --git a/packages/transactions/package-lock.json b/packages/transactions/package-lock.json new file mode 100644 index 000000000..c20372d65 --- /dev/null +++ b/packages/transactions/package-lock.json @@ -0,0 +1,505 @@ +{ + "name": "@biconomy-sdk/transactions", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/basex": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", + "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "requires": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/hdnode": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", + "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/json-wallets": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", + "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + }, + "@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", + "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/sha2": "^5.6.1" + } + }, + "@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/providers": { + "version": "5.6.8", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", + "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "@ethersproject/random": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", + "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/sha2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" + } + }, + "@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/solidity": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/units": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", + "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/wallet": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", + "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/wordlists": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", + "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "ethers": { + "version": "5.6.9", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", + "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", + "requires": { + "@ethersproject/abi": "5.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + } + } +} diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 926c37f97..b81078d9b 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -28,5 +28,10 @@ }, "bugs": { "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" + }, + "dependencies": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "ethers": "^5.6.9" } -} \ No newline at end of file +} diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index 8e5893799..e888a9eaf 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -1,347 +1,334 @@ import { - Contract, - Wallet, - utils, - BigNumber, - BigNumberish, - Signer, - PopulatedTransaction, -} from "ethers"; + Contract, + Wallet, + utils, + BigNumber, + BigNumberish, + Signer, + PopulatedTransaction +} from 'ethers' -import { TypedDataSigner } from "@ethersproject/abstract-signer"; -import { AddressZero } from "@ethersproject/constants"; +import { TypedDataSigner } from '@ethersproject/abstract-signer' +import { AddressZero } from '@ethersproject/constants' // TODO // Review all types and their placement and dependency export const EIP_DOMAIN = { - EIP712Domain: [ - { type: "uint256", name: "chainId" }, - { type: "address", name: "verifyingContract" }, - ], -}; + EIP712Domain: [ + { type: 'uint256', name: 'chainId' }, + { type: 'address', name: 'verifyingContract' } + ] +} export const EIP712_WALLET_TX_TYPE = { - // "WalletTx(address to,uint256 value,bytes data,uint8 operation,uint256 targetTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" - WalletTx: [ - { type: "address", name: "to" }, - { type: "uint256", name: "value" }, - { type: "bytes", name: "data" }, - { type: "uint8", name: "operation" }, - { type: "uint256", name: "targetTxGas" }, - { type: "uint256", name: "baseGas" }, - { type: "uint256", name: "gasPrice" }, - { type: "address", name: "gasToken" }, - { type: "address", name: "refundReceiver" }, - { type: "uint256", name: "nonce" }, - ], -}; + // "WalletTx(address to,uint256 value,bytes data,uint8 operation,uint256 targetTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" + WalletTx: [ + { type: 'address', name: 'to' }, + { type: 'uint256', name: 'value' }, + { type: 'bytes', name: 'data' }, + { type: 'uint8', name: 'operation' }, + { type: 'uint256', name: 'targetTxGas' }, + { type: 'uint256', name: 'baseGas' }, + { type: 'uint256', name: 'gasPrice' }, + { type: 'address', name: 'gasToken' }, + { type: 'address', name: 'refundReceiver' }, + { type: 'uint256', name: 'nonce' } + ] +} export const EIP712_SAFE_MESSAGE_TYPE = { - // "SafeMessage(bytes message)" - SafeMessage: [{ type: "bytes", name: "message" }], -}; + // "SafeMessage(bytes message)" + SafeMessage: [{ type: 'bytes', name: 'message' }] +} export interface MetaTransaction { - to: string; - value: string | number | BigNumber; - data: string; - operation: number; + to: string + value: string | number | BigNumber + data: string + operation: number } export interface SafeTransaction extends MetaTransaction { - targetTxGas: string | number; - baseGas: string | number; - gasPrice: string | number; - gasToken: string; - refundReceiver: string; - nonce: string | number; + targetTxGas: string | number + baseGas: string | number + gasPrice: string | number + gasToken: string + refundReceiver: string + nonce: string | number } export interface Transaction { - to: string; - value: string | number | BigNumber; - data: string; - operation: number; - targetTxGas: string | number; + to: string + value: string | number | BigNumber + data: string + operation: number + targetTxGas: string | number } export interface FeeRefund { - baseGas: string | number; - gasPrice: string | number; - gasToken: string; - refundReceiver: string; + baseGas: string | number + gasPrice: string | number + gasToken: string + refundReceiver: string } export interface WalletTransaction { - to: string; - value: BigNumberish; - data: string; - operation: number; - targetTxGas: string | number; - baseGas: string | number; - gasPrice: string | number; - gasToken: string; - refundReceiver: string; - nonce: number + to: string + value: BigNumberish + data: string + operation: number + targetTxGas: string | number + baseGas: string | number + gasPrice: string | number + gasToken: string + refundReceiver: string + nonce: number } export interface ExecTransaction { - to: string; - value: BigNumberish; - data: string; - operation: number; - targetTxGas: string | number; -}; + to: string + value: BigNumberish + data: string + operation: number + targetTxGas: string | number +} export interface SmartAccountTransaction { - _tx: ExecTransaction; - refundInfo: FeeRefund; - batchId: number; - nonce: string | number; -}; + _tx: ExecTransaction + refundInfo: FeeRefund + batchId: number + nonce: string | number +} export interface SafeSignature { - signer: string; - data: string; - } + signer: string + data: string +} -export const calculateSafeDomainSeparator = ( - safe: Contract, - chainId: BigNumberish -): string => { - return utils._TypedDataEncoder.hashDomain({ - verifyingContract: safe.address, - chainId, - }); -}; +export const calculateSafeDomainSeparator = (safe: Contract, chainId: BigNumberish): string => { + return utils._TypedDataEncoder.hashDomain({ + verifyingContract: safe.address, + chainId + }) +} export const preimageWalletTransactionHash = ( - safe: Contract, - safeTx: WalletTransaction, - chainId: BigNumberish + safe: Contract, + safeTx: WalletTransaction, + chainId: BigNumberish ): string => { - return utils._TypedDataEncoder.encode( - { verifyingContract: safe.address, chainId }, - EIP712_WALLET_TX_TYPE, - safeTx - ); -}; + return utils._TypedDataEncoder.encode( + { verifyingContract: safe.address, chainId }, + EIP712_WALLET_TX_TYPE, + safeTx + ) +} export const calculateWalletTransactionHash = ( - safe: Contract, - safeTx: WalletTransaction, - chainId: BigNumberish + safe: Contract, + safeTx: WalletTransaction, + chainId: BigNumberish ): string => { - return utils._TypedDataEncoder.hash( - { verifyingContract: safe.address, chainId }, - EIP712_WALLET_TX_TYPE, - safeTx - ); -}; + return utils._TypedDataEncoder.hash( + { verifyingContract: safe.address, chainId }, + EIP712_WALLET_TX_TYPE, + safeTx + ) +} export const calculateSafeMessageHash = ( - safe: Contract, - message: string, - chainId: BigNumberish + safe: Contract, + message: string, + chainId: BigNumberish ): string => { - return utils._TypedDataEncoder.hash( - { verifyingContract: safe.address, chainId }, - EIP712_SAFE_MESSAGE_TYPE, - { message } - ); -}; + return utils._TypedDataEncoder.hash( + { verifyingContract: safe.address, chainId }, + EIP712_SAFE_MESSAGE_TYPE, + { message } + ) +} export const safeSignTypedData = async ( - signer: Signer & TypedDataSigner, - safe: Contract, - safeTx: WalletTransaction, - chainId?: BigNumberish + signer: Signer & TypedDataSigner, + safe: Contract, + safeTx: WalletTransaction, + chainId?: BigNumberish ): Promise => { - if (!chainId && !signer.provider) - throw Error("Provider required to retrieve chainId"); - const cid = chainId || (await signer.provider!!.getNetwork()).chainId; - const signerAddress = await signer.getAddress(); - return { - signer: signerAddress, - data: await signer._signTypedData( - { verifyingContract: safe.address, chainId: cid }, - EIP712_WALLET_TX_TYPE, - safeTx - ), - }; -}; + if (!chainId && !signer.provider) throw Error('Provider required to retrieve chainId') + const cid = chainId || (await signer.provider!!.getNetwork()).chainId + const signerAddress = await signer.getAddress() + return { + signer: signerAddress, + data: await signer._signTypedData( + { verifyingContract: safe.address, chainId: cid }, + EIP712_WALLET_TX_TYPE, + safeTx + ) + } +} -export const signHash = async ( - signer: Signer, - hash: string -): Promise => { - const typedDataHash = utils.arrayify(hash); - const signerAddress = await signer.getAddress(); - return { - signer: signerAddress, - data: (await signer.signMessage(typedDataHash)) - .replace(/1b$/, "1f") - .replace(/1c$/, "20"), - }; -}; +export const signHash = async (signer: Signer, hash: string): Promise => { + const typedDataHash = utils.arrayify(hash) + const signerAddress = await signer.getAddress() + return { + signer: signerAddress, + data: (await signer.signMessage(typedDataHash)).replace(/1b$/, '1f').replace(/1c$/, '20') + } +} export const safeSignMessage = async ( - signer: Signer, - safe: Contract, - safeTx: WalletTransaction, - chainId?: BigNumberish + signer: Signer, + safe: Contract, + safeTx: WalletTransaction, + chainId?: BigNumberish ): Promise => { - const cid = chainId || (await signer.provider!!.getNetwork()).chainId; - return signHash(signer, calculateWalletTransactionHash(safe, safeTx, cid)); -}; + const cid = chainId || (await signer.provider!!.getNetwork()).chainId + return signHash(signer, calculateWalletTransactionHash(safe, safeTx, cid)) +} export const buildSignatureBytes = (signatures: SafeSignature[]): string => { - signatures.sort((left, right) => - left.signer.toLowerCase().localeCompare(right.signer.toLowerCase()) - ); - let signatureBytes = "0x"; - for (const sig of signatures) { - signatureBytes += sig.data.slice(2); - } - return signatureBytes; -}; + signatures.sort((left, right) => + left.signer.toLowerCase().localeCompare(right.signer.toLowerCase()) + ) + let signatureBytes = '0x' + for (const sig of signatures) { + signatureBytes += sig.data.slice(2) + } + return signatureBytes +} export const executeTx = async ( - safe: Contract, - safeTx: WalletTransaction, - signatures: SafeSignature[], - overrides?: any + safe: Contract, + safeTx: WalletTransaction, + signatures: SafeSignature[], + overrides?: any ): Promise => { - const signatureBytes = buildSignatureBytes(signatures); - const transaction: ExecTransaction = { - to: safeTx.to, - value: safeTx.value, - data: safeTx.data, - operation: safeTx.operation, - targetTxGas: safeTx.targetTxGas, - }; - const refundInfo: FeeRefund = { - baseGas: safeTx.baseGas, - gasPrice: safeTx.gasPrice, - gasToken: safeTx.gasToken, - refundReceiver: safeTx.refundReceiver, - }; - return safe.execTransaction( - transaction, - 0, // batchId - refundInfo, - signatureBytes, - overrides || {} - ); -}; + const signatureBytes = buildSignatureBytes(signatures) + const transaction: ExecTransaction = { + to: safeTx.to, + value: safeTx.value, + data: safeTx.data, + operation: safeTx.operation, + targetTxGas: safeTx.targetTxGas + } + const refundInfo: FeeRefund = { + baseGas: safeTx.baseGas, + gasPrice: safeTx.gasPrice, + gasToken: safeTx.gasToken, + refundReceiver: safeTx.refundReceiver + } + return safe.execTransaction( + transaction, + 0, // batchId + refundInfo, + signatureBytes, + overrides || {} + ) +} export const populateExecuteTx = async ( - safe: Contract, - safeTx: WalletTransaction, - signatures: SafeSignature[], - overrides?: any + safe: Contract, + safeTx: WalletTransaction, + signatures: SafeSignature[], + overrides?: any ): Promise => { - const signatureBytes = buildSignatureBytes(signatures); - const transaction: ExecTransaction = { - to: safeTx.to, - value: safeTx.value, - data: safeTx.data, - operation: safeTx.operation, - targetTxGas: safeTx.targetTxGas, - }; - const refundInfo: FeeRefund = { - baseGas: safeTx.baseGas, - gasPrice: safeTx.gasPrice, - gasToken: safeTx.gasToken, - refundReceiver: safeTx.refundReceiver, - }; - return safe.populateTransaction.execTransaction( - transaction, - 0, // batchId - refundInfo, - signatureBytes, - overrides || {} - ); -}; + const signatureBytes = buildSignatureBytes(signatures) + const transaction: ExecTransaction = { + to: safeTx.to, + value: safeTx.value, + data: safeTx.data, + operation: safeTx.operation, + targetTxGas: safeTx.targetTxGas + } + const refundInfo: FeeRefund = { + baseGas: safeTx.baseGas, + gasPrice: safeTx.gasPrice, + gasToken: safeTx.gasToken, + refundReceiver: safeTx.refundReceiver + } + return safe.populateTransaction.execTransaction( + transaction, + 0, // batchId + refundInfo, + signatureBytes, + overrides || {} + ) +} export const buildContractCall = ( - contract: Contract, - method: string, - params: any[], - nonce: number, - delegateCall?: boolean, - overrides?: Partial + contract: Contract, + method: string, + params: any[], + nonce: number, + delegateCall?: boolean, + overrides?: Partial ): WalletTransaction => { - const data = contract.interface.encodeFunctionData(method, params); - return buildWalletTransaction( - Object.assign( - { - to: contract.address, - data, - operation: delegateCall ? 1 : 0, - nonce, - }, - overrides - ) - ); -}; + const data = contract.interface.encodeFunctionData(method, params) + return buildWalletTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }, + overrides + ) + ) +} export const executeTxWithSigners = async ( - safe: Contract, - tx: WalletTransaction, - signers: Wallet[], - overrides?: any + safe: Contract, + tx: WalletTransaction, + signers: Wallet[], + overrides?: any ) => { - const sigs = await Promise.all( - signers.map((signer) => safeSignTypedData(signer, safe, tx)) - ); - return executeTx(safe, tx, sigs, overrides); -}; + const sigs = await Promise.all(signers.map((signer) => safeSignTypedData(signer, safe, tx))) + return executeTx(safe, tx, sigs, overrides) +} export const executeContractCallWithSigners = async ( - safe: Contract, - contract: Contract, - method: string, - params: any[], - signers: Wallet[], - delegateCall?: boolean, - overrides?: Partial + safe: Contract, + contract: Contract, + method: string, + params: any[], + signers: Wallet[], + delegateCall?: boolean, + overrides?: Partial ) => { - const tx = buildContractCall( - contract, - method, - params, - await safe.getNonce(0), - delegateCall, - overrides - ); - return executeTxWithSigners(safe, tx, signers); -}; + const tx = buildContractCall( + contract, + method, + params, + await safe.getNonce(0), + delegateCall, + overrides + ) + return executeTxWithSigners(safe, tx, signers) +} export const buildWalletTransaction = (template: { - to: string; - value?: BigNumberish; - data?: string; - operation?: number; - targetTxGas?: number | string; - baseGas?: number | string; - gasPrice?: number | string; - gasToken?: string; - refundReceiver?: string; - nonce: number; + to: string + value?: BigNumberish + data?: string + operation?: number + targetTxGas?: number | string + baseGas?: number | string + gasPrice?: number | string + gasToken?: string + refundReceiver?: string + nonce: number }): WalletTransaction => { - return { - to: template.to, - value: template.value || 0, - data: template.data || "0x", - operation: template.operation || 0, - targetTxGas: template.targetTxGas || 0, - baseGas: template.baseGas || 0, - gasPrice: template.gasPrice || 0, - gasToken: template.gasToken || AddressZero, - refundReceiver: template.refundReceiver || AddressZero, - nonce: template.nonce, - }; -}; - - + return { + to: template.to, + value: template.value || 0, + data: template.data || '0x', + operation: template.operation || 0, + targetTxGas: template.targetTxGas || 0, + baseGas: template.baseGas || 0, + gasPrice: template.gasPrice || 0, + gasToken: template.gasToken || AddressZero, + refundReceiver: template.refundReceiver || AddressZero, + nonce: template.nonce + } +} diff --git a/packages/transactions/src/index.ts b/packages/transactions/src/index.ts index ea8b9d492..fb7071a1c 100644 --- a/packages/transactions/src/index.ts +++ b/packages/transactions/src/index.ts @@ -1,4 +1,4 @@ export * from './types' export * from './utils' export * from './execution' -export * from './multisend' \ No newline at end of file +export * from './multisend' diff --git a/packages/transactions/src/multisend.ts b/packages/transactions/src/multisend.ts index f87d14e06..b33a2b8e1 100644 --- a/packages/transactions/src/multisend.ts +++ b/packages/transactions/src/multisend.ts @@ -1,37 +1,26 @@ -import { Contract, utils } from "ethers"; -import { - buildContractCall, - MetaTransaction, - WalletTransaction, -} from "./execution"; +import { Contract, utils } from 'ethers' +import { buildContractCall, MetaTransaction, WalletTransaction } from './execution' // TODO // Review all types const encodeMetaTransaction = (tx: MetaTransaction): string => { - const data = utils.arrayify(tx.data); - const encoded = utils.solidityPack( - ["uint8", "address", "uint256", "uint256", "bytes"], - [tx.operation, tx.to, tx.value, data.length, data] - ); - return encoded.slice(2); -}; + const data = utils.arrayify(tx.data) + const encoded = utils.solidityPack( + ['uint8', 'address', 'uint256', 'uint256', 'bytes'], + [tx.operation, tx.to, tx.value, data.length, data] + ) + return encoded.slice(2) +} export const encodeMultiSend = (txs: MetaTransaction[]): string => { - return "0x" + txs.map((tx) => encodeMetaTransaction(tx)).join(""); -}; + return '0x' + txs.map((tx) => encodeMetaTransaction(tx)).join('') +} export const buildMultiSendSafeTx = ( - multiSend: Contract, - txs: MetaTransaction[], - nonce: number, - overrides?: Partial + multiSend: Contract, + txs: MetaTransaction[], + nonce: number, + overrides?: Partial ): WalletTransaction => { - return buildContractCall( - multiSend, - "multiSend", - [encodeMultiSend(txs)], - nonce, - true, - overrides - ); -}; \ No newline at end of file + return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) +} diff --git a/packages/transactions/src/types.ts b/packages/transactions/src/types.ts index 854a784ea..66374bbce 100644 --- a/packages/transactions/src/types.ts +++ b/packages/transactions/src/types.ts @@ -1,16 +1,16 @@ import { - Contract, - Wallet, - utils, - BigNumber, - BigNumberish, - Signer, - PopulatedTransaction, - BytesLike - } from "ethers"; - import { TypedDataSigner } from "@ethersproject/abstract-signer"; - import { AddressZero } from "@ethersproject/constants"; - + Contract, + Wallet, + utils, + BigNumber, + BigNumberish, + Signer, + PopulatedTransaction, + BytesLike +} from 'ethers' +import { TypedDataSigner } from '@ethersproject/abstract-signer' +import { AddressZero } from '@ethersproject/constants' + /*export interface SafeTransaction extends MetaTransaction { targetTxGas: string | number; baseGas: string | number; @@ -19,5 +19,3 @@ import { refundReceiver: string; nonce: string | number; };*/ - - diff --git a/packages/transactions/src/utils.ts b/packages/transactions/src/utils.ts index e4478edf4..55396fc4b 100644 --- a/packages/transactions/src/utils.ts +++ b/packages/transactions/src/utils.ts @@ -2,17 +2,17 @@ import { arrayify, // defaultAbiCoder, // hexConcat, - parseEther, + parseEther // solidityKeccak256, -} from "ethers/lib/utils"; +} from 'ethers/lib/utils' import { ethers, BigNumber, // BigNumberish, // Contract, // ContractReceipt, - Wallet, -} from "ethers"; + Wallet +} from 'ethers' /* import { IERC20, EntryPoint, @@ -22,74 +22,63 @@ import { // import { BytesLike } from "@ethersproject/bytes"; // import { expect } from "chai"; // import { debugTransaction } from "./debugTx"; -import { keccak256 } from "ethereumjs-util"; +import { keccak256 } from 'ethereumjs-util' -export const AddressZero = ethers.constants.AddressZero; -export const HashZero = ethers.constants.HashZero; -export const ONE_ETH = parseEther("1"); -export const TWO_ETH = parseEther("2"); -export const FIVE_ETH = parseEther("5"); +export const AddressZero = ethers.constants.AddressZero +export const HashZero = ethers.constants.HashZero +export const ONE_ETH = parseEther('1') +export const TWO_ETH = parseEther('2') +export const FIVE_ETH = parseEther('5') -export const tostr = (x: any) => (x != null ? x.toString() : "null"); +export const tostr = (x: any) => (x != null ? x.toString() : 'null') -let counter = 0; +let counter = 0 // create non-random account, so gas calculations are deterministic export function createWalletOwner(): Wallet { - const privateKey = keccak256( - Buffer.from(arrayify(BigNumber.from(++counter))) - ); - return new ethers.Wallet(privateKey, ethers.providers.getDefaultProvider()); + const privateKey = keccak256(Buffer.from(arrayify(BigNumber.from(++counter)))) + return new ethers.Wallet(privateKey, ethers.providers.getDefaultProvider()) // return new ethers.Wallet('0x'.padEnd(66, privkeyBase), ethers.provider); } export async function getBalance(address: string): Promise { - const balance = await ethers.providers.getDefaultProvider().getBalance(address); - return parseInt(balance.toString()); + const balance = await ethers.providers.getDefaultProvider().getBalance(address) + return parseInt(balance.toString()) } -export function getSignatureParameters(signature:string) { - if (!ethers.utils.isHexString(signature)) { - throw new Error( - 'Given value "'.concat(signature, '" is not a valid hex string.') - ); - } - var r = signature.slice(0, 66); - var s = "0x".concat(signature.slice(66, 130)); - var v = ethers.BigNumber.from("0x".concat(signature.slice(130, 132))).toNumber(); - if (![27, 28].includes(v)) v += 27; - return { - r: r, - s: s, - v: v - }; +export function getSignatureParameters(signature: string) { + if (!ethers.utils.isHexString(signature)) { + throw new Error('Given value "'.concat(signature, '" is not a valid hex string.')) + } + var r = signature.slice(0, 66) + var s = '0x'.concat(signature.slice(66, 130)) + var v = ethers.BigNumber.from('0x'.concat(signature.slice(130, 132))).toNumber() + if (![27, 28].includes(v)) v += 27 + return { + r: r, + s: s, + v: v + } } export const Erc20 = [ - "function transfer(address _receiver, uint256 _value) public returns (bool success)", - "function transferFrom(address, address, uint) public returns (bool)", - "function approve(address _spender, uint256 _value) public returns (bool success)", - "function allowance(address _owner, address _spender) public view returns (uint256 remaining)", - "function balanceOf(address _owner) public view returns (uint256 balance)", - "event Approval(address indexed _owner, address indexed _spender, uint256 _value)", -]; + 'function transfer(address _receiver, uint256 _value) public returns (bool success)', + 'function transferFrom(address, address, uint) public returns (bool)', + 'function approve(address _spender, uint256 _value) public returns (bool success)', + 'function allowance(address _owner, address _spender) public view returns (uint256 remaining)', + 'function balanceOf(address _owner) public view returns (uint256 balance)', + 'event Approval(address indexed _owner, address indexed _spender, uint256 _value)' +] -export const Erc20Interface = new ethers.utils.Interface(Erc20); +export const Erc20Interface = new ethers.utils.Interface(Erc20) -export const encodeTransfer = ( - target: string, - amount: string | number -): string => { - return Erc20Interface.encodeFunctionData("transfer", [target, amount]); -}; +export const encodeTransfer = (target: string, amount: string | number): string => { + return Erc20Interface.encodeFunctionData('transfer', [target, amount]) +} export const encodeTransferFrom = ( from: string, target: string, amount: string | number ): string => { - return Erc20Interface.encodeFunctionData("transferFrom", [ - from, - target, - amount, - ]); -}; + return Erc20Interface.encodeFunctionData('transferFrom', [from, target, amount]) +} From 2055c4b94149c94e3d278f0a806c4dd9d0a32d84 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sat, 30 Jul 2022 18:13:54 +0530 Subject: [PATCH 0033/1247] remove dependency on local config file + test case with ganache network --- package.json | 2 +- .../core-types/src/ethereumLibs/EthAdapter.ts | 11 +- packages/ethers-lib/src/EthersAdapter.ts | 37 ++-- packages/smart-account/hardhat.config.js | 15 +- packages/smart-account/package.json | 13 +- packages/smart-account/src/SmartAccount.ts | 22 ++- packages/smart-account/src/types.ts | 7 +- .../src/utils/FetchContractsInfo.ts | 27 ++- .../smart-account/tests/smartaccount.spec.ts | 158 ++++++++++++++++-- 9 files changed, 210 insertions(+), 82 deletions(-) diff --git a/package.json b/package.json index dfa7d535b..e0bdc6eac 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "author": "Biconomy (https://biconomy.io)", "devDependencies": { "lerna": "^5.1.6", - "nx": "^14.4.3", + "nx": "^14.5.1", "prettier": "2.7.1", "ts-node": "^10.8.2" }, diff --git a/packages/core-types/src/ethereumLibs/EthAdapter.ts b/packages/core-types/src/ethereumLibs/EthAdapter.ts index 6b64ba864..fbb10d5e3 100644 --- a/packages/core-types/src/ethereumLibs/EthAdapter.ts +++ b/packages/core-types/src/ethereumLibs/EthAdapter.ts @@ -25,13 +25,10 @@ export interface EthAdapter { getEip3770Address(fullAddress: string): Promise getBalance(address: string): Promise getChainId(): Promise - getSmartWalletContract({ chainId, singletonDeployment }: GetContractProps): SmartWalletContract - getMultiSendContract({ chainId, singletonDeployment }: GetContractProps): MultiSendContract - getMultiSendCallOnlyContract({ chainId, singletonDeployment }: GetContractProps): MultiSendCallOnlyContract - getSmartWalletFactoryContract({ - chainId, - singletonDeployment - }: GetContractProps): SmartWalletFactoryContract + getSmartWalletContract(address: string): SmartWalletContract + getMultiSendContract(address: string): MultiSendContract + getMultiSendCallOnlyContract(address: string): MultiSendCallOnlyContract + getSmartWalletFactoryContract(address: string): SmartWalletFactoryContract getContractCode(address: string): Promise isContractDeployed(address: string): Promise getTransaction(transactionHash: string): Promise diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index 089c68b14..2c68c592e 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -72,45 +72,32 @@ class EthersAdapter implements EthAdapter { return (await this.#provider.getNetwork()).chainId } - getSmartWalletContract({ chainId, singletonDeployment }: GetContractProps): SmartWalletContract { - const contractAddress = singletonDeployment?.networkAddresses[chainId] - if (!contractAddress) { + getSmartWalletContract(address: string): SmartWalletContract { + if (!address) { throw new Error('Invalid Safe Proxy contract address') } - return getSmartWalletContractInstance(contractAddress, this.#provider) + return getSmartWalletContractInstance(address, this.#provider) } - getMultiSendContract({ - chainId, - singletonDeployment - }: GetContractProps): MultiSendEthersContract { - const contractAddress = singletonDeployment?.networkAddresses[chainId] - if (!contractAddress) { + getMultiSendContract(address:string): MultiSendEthersContract { + if (!address) { throw new Error('Invalid Multi Send contract address') } - return getMultiSendContractInstance(contractAddress, this.#provider) + return getMultiSendContractInstance(address, this.#provider) } - getMultiSendCallOnlyContract({ - chainId, - singletonDeployment - }: GetContractProps): MultiSendCallOnlyEthersContract { - const contractAddress = singletonDeployment?.networkAddresses[chainId] - if (!contractAddress) { + getMultiSendCallOnlyContract(address:string): MultiSendCallOnlyEthersContract { + if (!address) { throw new Error('Invalid Multi Send contract address') } - return getMultiSendCallOnlyContractInstance(contractAddress, this.#provider) + return getMultiSendCallOnlyContractInstance(address, this.#provider) } - getSmartWalletFactoryContract({ - chainId, - singletonDeployment - }: GetContractProps): SmartWalletProxyFactoryEthersContract { - const contractAddress = singletonDeployment?.networkAddresses[chainId] - if (!contractAddress) { + getSmartWalletFactoryContract(address:string): SmartWalletProxyFactoryEthersContract { + if (!address) { throw new Error('Invalid Safe Proxy Factory contract address') } - return getSmartWalletFactoryContractInstance(contractAddress, this.#provider) + return getSmartWalletFactoryContractInstance(address, this.#provider) } async getContractCode(address: string): Promise { diff --git a/packages/smart-account/hardhat.config.js b/packages/smart-account/hardhat.config.js index 3bcd9a4b8..ea58dddaa 100644 --- a/packages/smart-account/hardhat.config.js +++ b/packages/smart-account/hardhat.config.js @@ -1,15 +1,28 @@ /** * @type import('hardhat/config').HardhatUserConfig */ + // require("@nomiclabs/hardhat-ethers"); + + module.exports = { solidity: '0.7.6', - + defaultNetwork: "ganache", networks: { hardhat: { chainId: 31338, accounts: { mnemonic: 'ripple axis someone ridge uniform wrist prosper there frog rate olympic knee' } + }, + ganache: { + chainId: 1337, + url: 'http://localhost:8545', + accounts: { + mnemonic: "direct buyer cliff train rice spirit census refuse glare expire innocent quote", + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, } } } diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index b12a52725..1a71b8e3a 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -15,9 +15,9 @@ "build": "rimraf dist && tsc", "test": "yarn test:concurrently 'yarn test:run'", "test:file": "TS_NODE_PROJECT=../../tsconfig.test.json mocha -r ts-node/register --timeout 30000", - "test:concurrently": "concurrently -k --success first 'yarn start:hardhat > /dev/null'", + "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:run": "yarn test:file tests/**/*.spec.ts", - "start:hardhat": "yarn run hardhat node --port 7047 --config ./hardhat.config.js", + "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, @@ -32,6 +32,7 @@ "@biconomy-sdk/node-client": "*", "@biconomy-sdk/relayer": "*", "@biconomy-sdk/transactions": "*", + "@nomiclabs/hardhat-ethers": "^2.1.0", "@types/mocha": "^9.1.1", "@types/node": "^17.0.23", "@typescript-eslint/eslint-plugin": "^5.17.0", @@ -41,6 +42,7 @@ "eslint-plugin-prettier": "^4.0.0", "ethers": "^5.5.3", "jest-cli": "^28.1.3", + "nock": "^13.2.9", "prettier": "^2.6.2", "typescript": "^4.6.3" }, @@ -48,13 +50,14 @@ "@biconomy-sdk/core-types": "*", "@biconomy-sdk/ethers-lib": "*", "@biconomy-sdk/node-client": "*", - "@biconomy-sdk/transactions": "*", "@biconomy-sdk/relayer": "*", + "@biconomy-sdk/transactions": "*", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", "@gnosis.pm/safe-deployments": "^1.12.0", - "web3-core": "^1.7.1", - "@types/mocha": "^9.1.1" + "@nomiclabs/hardhat-ethers": "^2.1.0", + "@types/mocha": "^9.1.1", + "web3-core": "^1.7.1" } } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index dbf3181db..d02f45b23 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -89,6 +89,7 @@ class SmartAccount { this.signer = walletProvider.getSigner(); this.nodeClient = new SafeServiceClient({txServiceUrl: this.#smartAccountConfig.backend_url}); + // this.relayer = } // for testing @@ -130,25 +131,30 @@ class SmartAccount { // intialize contract to be used throughout this class private initializeContracts(chainId: ChainId) { + const smartWalletAddress = this.chainConfig.find(n => n.chainId === chainId)?.walletAddress || ''; + const smartWalletFactoryAddress = this.chainConfig.find(n => n.chainId === chainId)?.walletFactoryAddress || ''; + // TODO + // multiSend addresses from chainConfig + this.smartWalletFactoryContract[chainId] = getSmartWalletFactoryContract( - chainId, - this.ethAdapter[chainId] + this.ethAdapter[chainId], + smartWalletFactoryAddress ); // Should attach the address here this.smartWalletContract[chainId] = getSmartWalletContract( - chainId, - this.ethAdapter[chainId] + this.ethAdapter[chainId], + smartWalletAddress ); this.multiSendContract[chainId] = getMultiSendContract( - chainId, - this.ethAdapter[chainId] + this.ethAdapter[chainId], + smartWalletAddress // multiSend addresses should be in chain config ); this.multiSendCallOnlyContract[chainId] = getMultiSendCallOnlyContract( - chainId, - this.ethAdapter[chainId] + this.ethAdapter[chainId], + smartWalletAddress ); } diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 092cdee7a..c35ef69d8 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -9,6 +9,7 @@ export interface SmartAccountConfig { // walletProvider: Web3Provider // getting provider that can sign messages backend_url: string } +// relayer_url // TODO // Review location, usage and name of types @@ -107,7 +108,7 @@ export enum ChainId { GOERLI = 5, KOVAN = 42, MUMBAI = 80001, - HARDHAT = 31338 //Temp + GANACHE = 1337 //Temp } export interface NetworkConfig { entryPoint: string // abstract account contract @@ -276,8 +277,8 @@ export const networks: Record = { }, providerUrl: 'https://ropsten.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' }, - [ChainId.HARDHAT]: { - chainId: ChainId.HARDHAT, + [ChainId.GANACHE]: { + chainId: ChainId.GANACHE, entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', name: 'ropsten', diff --git a/packages/smart-account/src/utils/FetchContractsInfo.ts b/packages/smart-account/src/utils/FetchContractsInfo.ts index cd628d42a..9b302f567 100644 --- a/packages/smart-account/src/utils/FetchContractsInfo.ts +++ b/packages/smart-account/src/utils/FetchContractsInfo.ts @@ -4,29 +4,26 @@ import { WalletFactory, SmartWallet, MultiSend, MultiSendCallOnly } from '../ass import EthersAdapter from '@biconomy-sdk/ethers-lib' export function getSmartWalletFactoryContract( - chainId: number, - ethAdapter: EthersAdapter + ethAdapter: EthersAdapter, + address:string ): SmartWalletFactoryContract { - return ethAdapter.getSmartWalletFactoryContract({ - chainId, - singletonDeployment: WalletFactory - }) + return ethAdapter.getSmartWalletFactoryContract(address) } export function getMultiSendContract( - chainId: number, - ethAdapter: EthersAdapter + ethAdapter: EthersAdapter, + address:string ): MultiSendContract { - return ethAdapter.getMultiSendContract({ chainId, singletonDeployment: MultiSend }) + return ethAdapter.getMultiSendContract(address) } export function getMultiSendCallOnlyContract( - chainId: number, - ethAdapter: EthersAdapter + ethAdapter: EthersAdapter, + address: string ): MultiSendCallOnlyContract { - return ethAdapter.getMultiSendCallOnlyContract({ chainId, singletonDeployment: MultiSendCallOnly }) + return ethAdapter.getMultiSendCallOnlyContract(address) } export function getSmartWalletContract( - chainId: number, - ethAdapter: EthersAdapter + ethAdapter: EthersAdapter, + address: string ): SmartWalletContract { - return ethAdapter.getSmartWalletContract({ chainId, singletonDeployment: SmartWallet }) + return ethAdapter.getSmartWalletContract(address) } diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 101515fdc..21d2d337a 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -1,16 +1,15 @@ import SmartAccount from '../src/SmartAccount'; import { LocalRelayer } from '@biconomy-sdk/relayer' -// import { Contract, ethers, Signer as AbstractSigner } from 'ethers' import { Contract, ethers, Signer as AbstractSigner } from 'ethers' import { JsonRpcProvider, Web3Provider } from '@ethersproject/providers'; import chaiAsPromised from 'chai-as-promised' import * as chai from 'chai' +const nock = require('nock') -const Web3 = require('web3') const { expect } = chai.use(chaiAsPromised) -import hardhat from 'hardhat' +import hardhat from "hardhat"; import { deployWalletContracts } from './utils/deploy'; import { BytesLike, Interface } from 'ethers/lib/utils' @@ -31,9 +30,9 @@ describe('Wallet integration', function () { before(async () => { // Provider from hardhat without a server instance ethnode.provider = new ethers.providers.Web3Provider(hardhat.network.provider.send); - ethnode.signer = ethnode.provider.getSigner() - ethnode.chainId = 31338 + ethnode.chainId = 1337 + }) beforeEach(async () => { @@ -57,7 +56,7 @@ describe('Wallet integration', function () { GOERLI = 5, KOVAN = 42, MUMBAI = 80001, - HARDHAT = 31338 + GANACHE = 1337 } const userAddress = await ethnode.signer?.getAddress() || ''; @@ -69,28 +68,153 @@ describe('Wallet integration', function () { console.log('eoa ', eoa); } + // adds entry point, multiSendCall and fallbackHandler + const [ smartWallet, walletFactory, multiSend ] = await deployWalletContracts(ethnode.signer); + + console.log('base wallet deployed at : ', smartWallet.address); + console.log('wallet factory deployed at : ', walletFactory.address); + console.log('multi send deployed at : ', multiSend.address); + + + const scope = nock('http://localhost:3000') + .persist() + .get('/v1/chains/') + .reply(200, { + "message": "Success", + "code": 200, + "data": [ + { + "chainId": 4, + "name": "Rinkeby", + "symbol": "ETH", + "isL2": false, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://rinkeby.etherscan.io/address/", + "txHash": "https://rinkeby.etherscan.io/address/", + "api": "https://rinkeby.etherscan.io/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": false, + "walletAddress": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", + "entryPoint": "0xB63F450BbCeaf7D9DdBD35BF52DE1F674DD83e45", + "fallBackHandler": "0x57F2aF40aDF62CA1972224625f105852D2cdB4D1", + "relayerUrl": "", + "providerUrl": "https://rinkeby.infura.io/v3/d126f392798444609246423b06116c77", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "name": "Ethereum", + "symbol": "ETH", + "chainId": 4, + "ercType": "NATIVE", + "decimals": 18, + "logoUri": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", + "address": "null", + "isNativeToken": true, + "isEnabled": true + } + }, + { + "chainId": 5, + "name": "Goerli", + "symbol": "ETH", + "isL2": false, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://goerli.etherscan.io/address/", + "txHash": "https://goerli.etherscan.io/address/", + "api": "https://goerli.etherscan.io/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": false, + "walletAddress": "0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e", + "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", + "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", + "relayerUrl": "", + "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", + "indexerUrl": "", + "backendNodeUrl": "" + }, + { + "chainId": 80001, + "name": "Polygon Mumbai", + "symbol": "MATIC", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": false, + "walletAddress": "0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e", + "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", + "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", + "relayerUrl": "", + "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", + "indexerUrl": "", + "backendNodeUrl": "" + }, + { + "chainId": 1337, + "name": "Hardhat2", + "symbol": "ETH", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": walletFactory.address, + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": false, + "walletAddress": smartWallet.address, + "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", + "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", + "relayerUrl": "", + "providerUrl": "http://localhost:8545", + "indexerUrl": "", + "backendNodeUrl": "" + } + ] + }) + const wallet = new SmartAccount(ethnode.provider, { - activeNetworkId: ChainId.RINKEBY, - supportedNetworksIds: [ChainId.RINKEBY], // has to be consisttent providers and network names + activeNetworkId: ChainId.GANACHE, + supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE], // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backend_url: "http://localhost:3000/v1" }); - // adds entry point, multiSendCall and fallbackHandler - // const [ smartWallet, walletFactory, multiSend ] = await deployWalletContracts(ethnode.signer); - - /*console.log('base wallet deployed at : ', smartWallet.address); - console.log('wallet factory deployed at : ', walletFactory.address); - console.log('multi send deployed at : ', multiSend.address);*/ - // There must be a way to set wallet context before we go with init and deploy + txn tests // I'd have to deploy the contracts and set specs const smartAccount = await wallet.init(); console.log(wallet.owner); - console.log(smartAccount.smartAccount(ChainId.RINKEBY).getAddress()); - console.log(smartAccount.factory(ChainId.RINKEBY).getAddress()); + console.log(smartAccount.factory().getAddress()); const signer = await smartAccount.ethersAdapter().getSignerAddress(); From 47db80de82e5efe88708499c0f243e0bb9419ebd Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sat, 30 Jul 2022 21:06:28 +0530 Subject: [PATCH 0034/1247] fix bug in value transfer + added functional tests --- packages/smart-account/src/SmartAccount.ts | 6 +- .../smart-account/tests/smartaccount.spec.ts | 465 ++++++++++++------ packages/smart-account/tests/utils/deploy.ts | 10 +- 3 files changed, 329 insertions(+), 152 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index d02f45b23..a63891ee0 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -213,7 +213,7 @@ class SmartAccount { let rawTx: RawTransactionType = { to: tx.to, data: tx.data, - value: tx.value, + value: 0, chainId: chainId }; @@ -276,7 +276,7 @@ class SmartAccount { const walletTx: WalletTransaction = buildWalletTransaction({ to: transaction.to, - // value: ethers.utils.parseEther("1"), + value: transaction.value, data: transaction.data, // for token transfers use encodeTransfer nonce }); @@ -363,7 +363,7 @@ class SmartAccount { * @description return address for Smart account * @returns */ - async getAddressForCounterfactualWallet(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + private async getAddressForCounterfactualWallet(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { return await this.smartWalletFactoryContract[ chainId ].getAddressForCounterfactualWallet(this.owner, index) diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 21d2d337a..8c5e03d6c 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -1,7 +1,7 @@ import SmartAccount from '../src/SmartAccount'; import { LocalRelayer } from '@biconomy-sdk/relayer' import { Contract, ethers, Signer as AbstractSigner } from 'ethers' -import { JsonRpcProvider, Web3Provider } from '@ethersproject/providers'; +import { JsonRpcProvider, TransactionReceipt, TransactionResponse, Web3Provider } from '@ethersproject/providers'; import chaiAsPromised from 'chai-as-promised' import * as chai from 'chai' @@ -12,6 +12,8 @@ const { expect } = chai.use(chaiAsPromised) import hardhat from "hardhat"; import { deployWalletContracts } from './utils/deploy'; import { BytesLike, Interface } from 'ethers/lib/utils' +import { Transaction } from '../src/types'; +import { WalletTransaction } from '@biconomy-sdk/core-types'; type EthereumInstance = { chainId?: number, @@ -19,6 +21,17 @@ type EthereumInstance = { signer?: AbstractSigner }; +enum ChainId { + // Ethereum + MAINNET = 1, + ROPSTEN = 3, + RINKEBY = 4, + GOERLI = 5, + KOVAN = 42, + MUMBAI = 80001, + GANACHE = 1337 +} + // import hardhat from 'hardhat' // import { BytesLike, Interface } from 'ethers/lib/utils' @@ -30,9 +43,8 @@ describe('Wallet integration', function () { before(async () => { // Provider from hardhat without a server instance ethnode.provider = new ethers.providers.Web3Provider(hardhat.network.provider.send); - ethnode.signer = ethnode.provider.getSigner() + ethnode.signer = ethnode.provider?.getSigner() ethnode.chainId = 1337 - }) beforeEach(async () => { @@ -44,163 +56,148 @@ describe('Wallet integration', function () { describe('Smart account usage and basic actions', () => { beforeEach(async () => { - }) - - it('Should init and return details of smart account', async () => { - - enum ChainId { - // Ethereum - MAINNET = 1, - ROPSTEN = 3, - RINKEBY = 4, - GOERLI = 5, - KOVAN = 42, - MUMBAI = 80001, - GANACHE = 1337 - } - - const userAddress = await ethnode.signer?.getAddress() || ''; - - const eoaSigner = ethnode.provider?.getSigner() - - if (eoaSigner) { - const eoa = await eoaSigner.getAddress(); - console.log('eoa ', eoa); - } - // adds entry point, multiSendCall and fallbackHandler - const [ smartWallet, walletFactory, multiSend ] = await deployWalletContracts(ethnode.signer); + const [smartWallet, walletFactory, multiSend, multiSendCallOnly] = await deployWalletContracts(ethnode.signer); console.log('base wallet deployed at : ', smartWallet.address); console.log('wallet factory deployed at : ', walletFactory.address); console.log('multi send deployed at : ', multiSend.address); + console.log('multi send deployed at : ', multiSendCallOnly.address); const scope = nock('http://localhost:3000') - .persist() - .get('/v1/chains/') - .reply(200, { - "message": "Success", - "code": 200, - "data": [ + .persist() + .get('/v1/chains/') + .reply(200, { + "message": "Success", + "code": 200, + "data": [ { - "chainId": 4, - "name": "Rinkeby", + "chainId": 4, + "name": "Rinkeby", + "symbol": "ETH", + "isL2": false, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://rinkeby.etherscan.io/address/", + "txHash": "https://rinkeby.etherscan.io/address/", + "api": "https://rinkeby.etherscan.io/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": false, + "walletAddress": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", + "entryPoint": "0xB63F450BbCeaf7D9DdBD35BF52DE1F674DD83e45", + "fallBackHandler": "0x57F2aF40aDF62CA1972224625f105852D2cdB4D1", + "relayerUrl": "", + "providerUrl": "https://rinkeby.infura.io/v3/d126f392798444609246423b06116c77", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "name": "Ethereum", "symbol": "ETH", - "isL2": false, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://rinkeby.etherscan.io/address/", - "txHash": "https://rinkeby.etherscan.io/address/", - "api": "https://rinkeby.etherscan.io/" - }, - "ensRegistryAddress": "", - "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": false, - "walletAddress": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", - "entryPoint": "0xB63F450BbCeaf7D9DdBD35BF52DE1F674DD83e45", - "fallBackHandler": "0x57F2aF40aDF62CA1972224625f105852D2cdB4D1", - "relayerUrl": "", - "providerUrl": "https://rinkeby.infura.io/v3/d126f392798444609246423b06116c77", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "name": "Ethereum", - "symbol": "ETH", - "chainId": 4, - "ercType": "NATIVE", - "decimals": 18, - "logoUri": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", - "address": "null", - "isNativeToken": true, - "isEnabled": true - } + "chainId": 4, + "ercType": "NATIVE", + "decimals": 18, + "logoUri": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", + "address": "null", + "isNativeToken": true, + "isEnabled": true + } }, { - "chainId": 5, - "name": "Goerli", - "symbol": "ETH", - "isL2": false, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://goerli.etherscan.io/address/", - "txHash": "https://goerli.etherscan.io/address/", - "api": "https://goerli.etherscan.io/" - }, - "ensRegistryAddress": "", - "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": false, - "walletAddress": "0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e", - "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", - "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", - "relayerUrl": "", - "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", - "indexerUrl": "", - "backendNodeUrl": "" + "chainId": 5, + "name": "Goerli", + "symbol": "ETH", + "isL2": false, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://goerli.etherscan.io/address/", + "txHash": "https://goerli.etherscan.io/address/", + "api": "https://goerli.etherscan.io/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": false, + "walletAddress": "0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e", + "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", + "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", + "relayerUrl": "", + "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", + "indexerUrl": "", + "backendNodeUrl": "" }, { - "chainId": 80001, - "name": "Polygon Mumbai", - "symbol": "MATIC", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" - }, - "ensRegistryAddress": "", - "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": false, - "walletAddress": "0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e", - "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", - "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", - "relayerUrl": "", - "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", - "indexerUrl": "", - "backendNodeUrl": "" + "chainId": 80001, + "name": "Polygon Mumbai", + "symbol": "MATIC", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": false, + "walletAddress": "0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e", + "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", + "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", + "relayerUrl": "", + "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", + "indexerUrl": "", + "backendNodeUrl": "" }, { - "chainId": 1337, - "name": "Hardhat2", - "symbol": "ETH", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" - }, - "ensRegistryAddress": "", - "walletFactoryAddress": walletFactory.address, - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": false, - "walletAddress": smartWallet.address, - "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", - "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", - "relayerUrl": "", - "providerUrl": "http://localhost:8545", - "indexerUrl": "", - "backendNodeUrl": "" + "chainId": 1337, + "name": "Ganache", + "symbol": "ETH", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": walletFactory.address, + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": false, + "walletAddress": smartWallet.address, + "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", + "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", + "relayerUrl": "", + "providerUrl": "http://localhost:8545", + "indexerUrl": "", + "backendNodeUrl": "" } - ] + ] + }) }) + it('Should init and return details of smart account', async () => { + + const userAddress = await ethnode.signer?.getAddress() || ''; + + const eoaSigner = ethnode.provider?.getSigner() + + const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE], // has to be consisttent providers and network names @@ -208,11 +205,13 @@ describe('Wallet integration', function () { //backend_url: "http://localhost:3000/v1" }); - // There must be a way to set wallet context before we go with init and deploy + txn tests - // I'd have to deploy the contracts and set specs const smartAccount = await wallet.init(); - console.log(wallet.owner); + + if (eoaSigner) { + const eoa = await eoaSigner.getAddress(); + expect(smartAccount.owner).to.be.equal(eoa); + } console.log(smartAccount.factory().getAddress()); @@ -221,12 +220,190 @@ describe('Wallet integration', function () { const address = await smartAccount.getAddress(); console.log('counter factual wallet address: ', address); + expect(address).to.be.equal(smartAccount.address) + const isDeployed = await smartAccount.isDeployed(); /// can pass chainId here // Check if the smart wallet is deployed or not const state = await smartAccount.getSmartAccountState(); console.log('wallet state'); + expect(isDeployed).to.be.equal(false) + }) + + it('Should deploy smart and return correct state and context', async () => { + + const userAddress = await ethnode.signer?.getAddress() || ''; + const eoaSigner = ethnode.provider?.getSigner() + + const wallet = new SmartAccount(ethnode.provider, { + activeNetworkId: ChainId.GANACHE, + supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE], // has to be consisttent providers and network names + // walletProvider: ethnode.provider, + //backend_url: "http://localhost:3000/v1" + }); + + const smartAccount = await wallet.init(); + + if (eoaSigner) { + const eoa = await eoaSigner.getAddress(); + expect(smartAccount.owner).to.be.equal(eoa); + } + + const signer = await smartAccount.ethersAdapter().getSignerAddress(); + if(eoaSigner) { + const relayer = new LocalRelayer(eoaSigner); + const state = await smartAccount.getSmartAccountState(); + const context = smartAccount.getSmartAccountContext(); + const deployment = await relayer.deployWallet(state,context); // index 0 + const receipt: TransactionReceipt = await deployment.wait(1); + expect(receipt.status).to.be.equal(1); + } + const isDeployed = await smartAccount.isDeployed(); /// can pass chainId here + expect(isDeployed).to.be.equal(true) + + const context = smartAccount.getSmartAccountContext(); + expect(context.baseWallet).to.be.equal(smartAccount.smartAccount()); + expect(context.walletFactory).to.be.equal(smartAccount.factory()); + expect(context.multiSend).to.be.equal(smartAccount.multiSend()); + expect(context.multiSendCall).to.be.equal(smartAccount.multiSendCall()); + }) + + it('Should be able to sign transaction', async () => { + + const userAddress = await ethnode.signer?.getAddress() || ''; + const eoaSigner = ethnode.provider?.getSigner() + + const wallet = new SmartAccount(ethnode.provider, { + activeNetworkId: ChainId.GANACHE, + supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE], // has to be consisttent providers and network names + // walletProvider: ethnode.provider, + //backend_url: "http://localhost:3000/v1" + }); + + const smartAccount = await wallet.init(); + + const signerAddress = await smartAccount.ethersAdapter().getSignerAddress(); + + const smartAccountAddress = smartAccount.address; + + // Wallet would have been deployed already + const isDeployed = await smartAccount.isDeployed(); /// can pass chainId here + expect(isDeployed).to.be.equal(true) + + /*await ethnode.signer?.sendTransaction({ + from: signerAddress, + to: smartAccountAddress, + value: ethers.utils.parseEther("1"), + });*/ + + const tx:Transaction = { + to: signerAddress, + data: "0x", + value: ethers.utils.parseEther("1") + }; + + const smartAccountTransaction:WalletTransaction = await smartAccount.createSmartAccountTransaction(tx); + + const signature = await smartAccount.signTransaction(smartAccountTransaction); + console.log("signature is: ", signature); + }) + + it('Should be able to switch active chain and return state', async () => { + + const userAddress = await ethnode.signer?.getAddress() || ''; + + const eoaSigner = ethnode.provider?.getSigner() + + + const wallet = new SmartAccount(ethnode.provider, { + activeNetworkId: ChainId.GANACHE, + supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE], // has to be consisttent providers and network names + // walletProvider: ethnode.provider, + //backend_url: "http://localhost:3000/v1" + }); + + + const smartAccount = await wallet.init(); + + if (eoaSigner) { + const eoa = await eoaSigner.getAddress(); + expect(smartAccount.owner).to.be.equal(eoa); + } + + console.log(smartAccount.factory().getAddress()); + + const signer = await smartAccount.ethersAdapter().getSignerAddress(); + + const address = await smartAccount.getAddress(); + console.log('counter factual wallet address: ', address); + + expect(address).to.be.equal(smartAccount.address) + + smartAccount.setActiveChain(ChainId.RINKEBY); + + // Now on Rinkeby + const isDeployed = await smartAccount.isDeployed(); /// can pass chainId here + // Check if the smart wallet is deployed or not + const state = await smartAccount.getSmartAccountState(); console.log(state); expect(isDeployed).to.be.equal(false) + + expect(state.entryPointAddress).to.be.equal("0xB63F450BbCeaf7D9DdBD35BF52DE1F674DD83e45"); + }) + + it('Should be able to send transaction', async () => { + + const userAddress = await ethnode.signer?.getAddress() || ''; + const eoaSigner = ethnode.provider?.getSigner() + + const wallet = new SmartAccount(ethnode.provider, { + activeNetworkId: ChainId.GANACHE, + supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE], // has to be consisttent providers and network names + // walletProvider: ethnode.provider, + //backend_url: "http://localhost:3000/v1" + }); + + const smartAccount = await wallet.init(); + + const signerAddress = await smartAccount.ethersAdapter().getSignerAddress(); + + const smartAccountAddress = smartAccount.address; + + // Wallet would have been deployed already + const isDeployed = await smartAccount.isDeployed(); /// can pass chainId here + expect(isDeployed).to.be.equal(true) + + console.log('balance before ', await ethnode.provider?.getBalance(smartAccountAddress)) + + await ethnode.signer?.sendTransaction({ + from: signerAddress, + to: smartAccountAddress, + value: ethers.utils.parseEther("1"), + }); + + console.log('balance after ', await ethnode.provider?.getBalance(smartAccountAddress)) + + const tx:Transaction = { + to: signerAddress, + data: "0x", + value: ethers.utils.parseEther("0.5") + }; + + const smartAccountTransaction:WalletTransaction = await smartAccount.createSmartAccountTransaction(tx); + + // Attach relayer before sending a transaction + + const signer = await smartAccount.ethersAdapter().getSignerAddress(); + if(eoaSigner) { + const relayer = new LocalRelayer(eoaSigner); + smartAccount.setRelayer(relayer); + expect(smartAccount.relayer).to.be.equal(relayer); + const response:TransactionResponse = await smartAccount.sendTransaction(smartAccountTransaction); + + const receipt: TransactionReceipt = await response.wait(1); + expect(receipt.status).to.be.equal(1); + console.log('balance after ', await ethnode.provider?.getBalance(smartAccountAddress)) + expect((await ethnode.provider?.getBalance(smartAccountAddress))?.toString()).to.be.equal(ethers.utils.parseEther("0.5").toString()) + } }) }) }) diff --git a/packages/smart-account/tests/utils/deploy.ts b/packages/smart-account/tests/utils/deploy.ts index 9924bf02b..a3b86a948 100644 --- a/packages/smart-account/tests/utils/deploy.ts +++ b/packages/smart-account/tests/utils/deploy.ts @@ -4,11 +4,11 @@ import { Contract, ethers } from 'ethers' const SmartWalletArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/Smartwallet.sol/SmartWallet.json') const WalletFactoryArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/WalletFactory.sol/WalletFactory.json') const MultiSendArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/libs/MultiSend.sol/MultiSend.json') -// const MultiSendCallOnlyArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol/MultiSendCallOnly.json') +const MultiSendCallOnlyArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol/MultiSendCallOnly.json') export async function deployWalletContracts( signer: ethers.Signer -): Promise<[Contract, Contract, Contract]> { +): Promise<[Contract, Contract, Contract, Contract]> { // could get these from type chain const smartWallet = (await new ethers.ContractFactory(SmartWalletArtifact.abi, SmartWalletArtifact.bytecode, signer).deploy( @@ -20,9 +20,9 @@ export async function deployWalletContracts( const multiSend = (await new ethers.ContractFactory(MultiSendArtifact.abi, MultiSendArtifact.bytecode, signer).deploy( )) as unknown as Contract - /*const multiSendCallOnly = (await new ethers.ContractFactory(MultiSendCallOnlyArtifact.abi, MultiSendCallOnlyArtifact.bytecode, signer).deploy( - )) as unknown as Contract*/ + const multiSendCallOnly = (await new ethers.ContractFactory(MultiSendCallOnlyArtifact.abi, MultiSendCallOnlyArtifact.bytecode, signer).deploy( + )) as unknown as Contract - return [smartWallet, walletFactory, multiSend] + return [smartWallet, walletFactory, multiSend, multiSendCallOnly] } \ No newline at end of file From d0ff70770f357e619a0b586304339d5a7ba629a5 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sun, 31 Jul 2022 00:40:56 +0530 Subject: [PATCH 0035/1247] documentation notes smart account --- packages/smart-account/src/SmartAccount.ts | 225 +++++++++++++++------ packages/smart-account/src/types.ts | 5 +- 2 files changed, 166 insertions(+), 64 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index a63891ee0..d949603a1 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -33,35 +33,51 @@ import { safeSignMessage } from '@biconomy-sdk/transactions'; +// Create an instance of Smart Account with multi-chain support. class SmartAccount { - // { ethAdapter } is a window that gave access to all the Implemented function of it + // { ethAdapter } is a window that gives access to all the implemented functions of it + // requires signer and read-only provider ethAdapter!: { [chainId: number]: EthersAdapter } + // Smart Account Context provies relevant contract instances for chainId asked (default is current active chain) context!: { [chainId: number]: SmartAccountContext } - // hold instantiated chain info + // Optional config to initialise instance of Smart Account. One can provide main active chain and only limited chains they need to be on. #smartAccountConfig!: SmartAccountConfig - // hold supported network info + // Array of chain ids that current multi-chain instance supports supportedNetworkIds!: ChainId[] + // Chain configurations fetched from backend chainConfig!: ChainConfig[] - // providers!: Web3Provider[] + // A wallet provider shared between all chains and just acts as signer! + // Must pass a provider with signers with accounts + // could be just signer provider!: Web3Provider + // Signer extracted from above provider instance + // Review type signer!: JsonRpcSigner + // Instance of backend client responsible for retriving any infromation from the backend node + // Indexer related methods (fetchBalances, transactionHistory) are exposed using backend node nodeClient!: SafeServiceClient + // Instance of relayer (Relayer Service Client) connected with this Smart Account and always ready to dispatch transactions + // relayer.relay => dispatch to blockchain + // other methods are useful for the widget relayer!: Relayer + // Owner of the Smart Account common between all chains + // Could be part of Smart Account state / config + // @review with Sachin owner!: string + // Address of the smart contract wallet common between all chains + // @review address!: string - // Can make isDeployed a state variable - // contract instances smartWalletContract!: { [chainId: number]: SmartWalletContract } multiSendContract!: { [chainId: number]: MultiSendContract } @@ -69,9 +85,13 @@ class SmartAccount { smartWalletFactoryContract!: { [chainId: number]: SmartWalletFactoryContract } - // Review :: ToDo - // To be able to passs provider : WalletProviderLike - // in mexa sdk we have ExternalProvider + // TODO + // Review provider type WalletProviderLike / ExternalProvider + // Can expose recommended provider classes through the SDK + + /**Constrcutor for the Smart Account. If config is not provided it makes Smart Contract available using default configuration + * If you wish to use your own backend server and relayer service, pass the URLs here + */ constructor(walletProvider:Web3Provider ,config?: Partial) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } @@ -87,61 +107,65 @@ class SmartAccount { this.supportedNetworkIds = this.#smartAccountConfig.supportedNetworksIds; this.provider = walletProvider this.signer = walletProvider.getSigner(); - this.nodeClient = new SafeServiceClient({txServiceUrl: this.#smartAccountConfig.backend_url}); - // this.relayer = + // Upcoming + //this.relayer = } - // for testing - // providers and contracts initialization + // TODO + // add a flag initialised which gets checked before calling other functions + + /** + * + * @returns this/self - instance of SmartAccount + */ public async init(): Promise { const chainConfig = (await this.getSupportedChainsInfo()).data; this.chainConfig = chainConfig; - console.log("chain config: ", chainConfig); - // instead of getting from networks, get details from chainConfig + // console.log("chain config: ", chainConfig); + const signer = this.signer; - // Review - // check usage of getsignerByAddress from mexa/sdk and playground + // (check usage of getsignerByAddress from mexa/sdk and playground) for(let i=0; i < this.supportedNetworkIds.length; i++) { const network = this.supportedNetworkIds[i]; const providerUrl = chainConfig.find(n => n.chainId === network)?.providerUrl; + // To keep it network agnostic + // Note: think about events when signer needs to pay gas const readProvider = new ethers.providers.JsonRpcProvider(providerUrl); - // instantiating EthersAdapter instance and maintain it as class level variable + // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable this.ethAdapter[network] = new EthersAdapter({ ethers, signer, provider:readProvider }) - // EntryPoint and FallbackHandler etc Has to be same for all networks - this.initializeContracts(network); } - // Review + + // We set the common owner by quering default active chainId ethAdapter this.owner = await this.ethersAdapter().getSignerAddress(); - // Commeting below only for debugging test case!! + // @review + // Smart Account addresses gets set by querying active chain's wallet factory (along with owner and index = 0) this.address = await this.getAddress(); return this; } - // getSupportedNetworks / chains endpoint - - - // intialize contract to be used throughout this class + // Intialize contracts to be used throughout this class private initializeContracts(chainId: ChainId) { + // We get the addresses using chainConfig fetched from backend node const smartWalletAddress = this.chainConfig.find(n => n.chainId === chainId)?.walletAddress || ''; const smartWalletFactoryAddress = this.chainConfig.find(n => n.chainId === chainId)?.walletFactoryAddress || ''; + // TODO // multiSend addresses from chainConfig - this.smartWalletFactoryContract[chainId] = getSmartWalletFactoryContract( this.ethAdapter[chainId], smartWalletFactoryAddress ); - // Should attach the address here + // NOTE/TODO : attached address is not wallet address yet this.smartWalletContract[chainId] = getSmartWalletContract( this.ethAdapter[chainId], smartWalletAddress @@ -158,41 +182,63 @@ class SmartAccount { ); } + /** + * Fetch supported chainInfo from backend node : used in init + * @returns ChainConfig response received from backend node + */ private async getSupportedChainsInfo(): Promise { return this.nodeClient.getChainInfo(); } // return adapter instance to be used for blockchain interactions + /** + * adapter instance to be used for some blockchain interactions + * @param chainId requested chainId : default is current active chain + * @returns EthersAdapter + */ ethersAdapter(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): EthersAdapter { return this.ethAdapter[chainId] } - // return configuration used for intialization of the { wallet } instance - // Review wording and need - /*getSmartAccountConfig(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): ChainConfig { - // networks should come from chainConfig instead - return this.chainConfig[chainId] - }*/ - // Assigns transaction relayer to this smart wallet instance + /** + * Assigns transaction relayer to this smart wallet instance + * @notice Assumption is that relayer will accept calls for all supported chains + * @param relayer Relayer client to be associated with this smart account + * @returns this/self + */ setRelayer(relayer: Relayer): SmartAccount { if (relayer === undefined) return this this.relayer = relayer return this } - + + /** + * Allows to change default active chain of the Smart Account + * @todo make a check if chain is supported in config + * @param chainId + * @returns self/this + */ setActiveChain(chainId: ChainId): SmartAccount { this.#smartAccountConfig.activeNetworkId = chainId; return this; } - // async sendSignedTransaction : must expect signature! - // async sign + // Can also add := sendSignedTransaction + + /** + * + * @notice personal sign is used currently (// @todo Signer should be able to use _typedSignData) + * @param tx WalletTransaction Smart Account Transaction object prepared + * @param chainId optional chainId + * @returns:string Signature + */ async signTransaction(tx: WalletTransaction, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); + // TODO - rename and organize utils const { signer, data } = await safeSignMessage( this.signer, walletContract, @@ -205,10 +251,13 @@ class SmartAccount { return signature; } - - // will get signer's signature - // TODO: - // Signer should be able to use _typedSignData + /** + * Prepares encoded wallet transaction, gets signature from the signer and dispatches to the blockchain using relayer + * @param tx WalletTransaction Smart Account Transaction object prepared + * @param batchId optional nonce space for parallel processing + * @param chainId optional chainId + * @returns + */ async sendTransaction(tx:WalletTransaction, batchId:number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let rawTx: RawTransactionType = { to: tx.to, @@ -232,7 +281,6 @@ class SmartAccount { refundReceiver: tx.refundReceiver, }; - // Should call this.signTransaction let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); @@ -259,15 +307,20 @@ class SmartAccount { return txn; } - // Todo : rename - // This transaction is without fee refund (gasless) - // We need to have identifiers for these txns + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Rename based on other variations to prepare transaction + * @notice This transaction is without fee refund (gasless) + * @param transaction + * @param batchId + * @param chainId + * @returns + */ async createSmartAccountTransaction(transaction: Transaction, batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); - // If the wallet is not deployed yet then nonce would be zero - // Review + // NOTE : If the wallet is not deployed yet then nonce would be zero let nonce = 0; if(await this.isDeployed(chainId)) { nonce = (await walletContract.getNonce(batchId)).toNumber(); @@ -284,35 +337,73 @@ class SmartAccount { return walletTx; }; - // return smartaccount instance - // maybe call this basewallet or wallet + /** + * + * @param chainId optional chainId + * @returns Smart Wallet Contract instance attached with current smart account address (proxy) + */ smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { const smartWallet = this.smartWalletContract[chainId] + // Review @talha const address = this.address; smartWallet.getContract().attach(address); return smartWallet; } + /** + * + * @param chainId optional chainId + * @returns Smart Wallet Factory instance for requested chainId + */ factory(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletFactoryContract { return this.smartWalletFactoryContract[chainId] } + /** + * + * @param chainId optional chainId + * @returns MultiSend contract instance for requested chainId + */ multiSend(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendContract { return this.multiSendContract[chainId] } + /** + * @notice the difference between multiSend and multiSendCall + * Multisend is only used for delegateCalls (i.e. sending off a batch of transaction from Smart account) + * MultiSendCall is only used for calls (i.e batching Smart Account transaction with another transaction not on Smart Account) + * @param chainId optional chainId + * @returns MultiSend Call Only contract instance for requested chainId + */ multiSendCall(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendCallOnlyContract { return this.multiSendCallOnlyContract[chainId] } - // Optional index allowed + /** + * @review + * returns address of Smart account by actually calling appropriate Wallet Factory contract + * This method is used in init + * @param index optional index : Indexes are relevant if the owner/signatory EOA deployed/wants to deploy multiple Smart Accounts + * @param chainId optional chainId + * @returns Address of the Smart Account + */ async getAddress(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId) : Promise { - return await this.getAddressForCounterfactualWallet(index,chainId); + const address = await this.getAddressForCounterfactualWallet(index,chainId); + this.address = address; + return address; + // return await this.getAddressForCounterfactualWallet(index,chainId); } - // Review + /** + * Allows one to check if the smart account is already deployed on requested chainOd + * @review + * @notice the check is made on Wallet Factory state with current address in Smart Account state + * @param chainId optional chainId : Default is current active + * @returns + */ async isDeployed(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - // might be coming wrong.. + + // Other approach : needs review and might be coming wrong // const readProvider = new ethers.providers.JsonRpcProvider(networks[chainId].providerUrl); // const walletCode = await readProvider.getCode(await this.getAddress(chainId)); // return !!walletCode && walletCode !== '0x' @@ -321,7 +412,11 @@ class SmartAccount { return await this.factory(chainId).isWalletExist(this.address); } - // sort of config + /** + * @review for owner + * @param chainId requested chain : default is active chain + * @returns object containing infromation (owner, relevant contract addresses, isDeployed) about Smart Account for requested chain + */ async getSmartAccountState(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { const entryPoint = this.chainConfig.find(n => n.chainId === chainId)?.entryPoint; const fallbackHandlerAddress = this.chainConfig.find(n => n.chainId === chainId)?.fallBackHandler; @@ -335,27 +430,31 @@ class SmartAccount { return state; } - // Instead of addresses should return contract instances + // + /** + * Serves smart contract instances associated with Smart Account for requested ChainId + * Context is useful when relayer is deploying a wallet + * @param chainId requested chain : default is active chain + * @returns object containing relevant contract instances + */ getSmartAccountContext(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartAccountContext { const context: SmartAccountContext = { baseWallet: this.smartAccount(chainId), //might as well do getContract and attach and return contract walletFactory: this.factory(chainId), multiSend: this.multiSend(chainId), multiSendCall: this.multiSendCall(chainId) + // Could be added dex router for chain in the future } return context; } - // more methods - // accountConfiguration? + // Review : more / other potential methods // sendSignedTransaction // signMessage - - // Discuss about multichain aspect of relayer node url and clients - // TODO: get details from backend config + // NOTE: Discuss about multichain aspect of relayer node url and clients // more methods to fetch balance via backend -> indexer node - // getTokenBalances() + // getTokenBalances() @Talha /** * @param address Owner aka {EOA} address @@ -370,6 +469,8 @@ class SmartAccount { } } +// Temporary default config +// TODO/NOTE : make Goerli and Mumbai as test networks and remove others export const DefaultSmartAccountConfig: SmartAccountConfig = { activeNetworkId: ChainId.RINKEBY, //Update later supportedNetworksIds: [ChainId.GOERLI, ChainId.RINKEBY, ChainId.MUMBAI], diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index c35ef69d8..19e8d160b 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -3,16 +3,17 @@ import { ExternalProvider, Web3Provider } from '@ethersproject/providers'; import { MultiSendContract, SmartWalletFactoryContract, SmartWalletContract, MultiSendCallOnlyContract } from '@biconomy-sdk/core-types'; // walletProvider: WalletProviderLike +// TODO : Ability to provide custom URLs for all supported networks export interface SmartAccountConfig { activeNetworkId: ChainId supportedNetworksIds: ChainId[] - // walletProvider: Web3Provider // getting provider that can sign messages backend_url: string } // relayer_url // TODO -// Review location, usage and name of types +// Review location, usage and name of types @chirag +// Should be kept in native types and the moment it needs to be shared by other package, move to core types and use from there export interface Transaction { to: string value?: BigNumberish From 3769273141b35380a4c62e2fa9fe416d70c28092 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sun, 31 Jul 2022 15:34:03 +0530 Subject: [PATCH 0036/1247] update multisend from chainconfig in smart account and test cases --- .../src/types/safeTransactionServiceTypes.ts | 2 + packages/smart-account/src/SmartAccount.ts | 11 +- packages/smart-account/src/types.ts | 2 + .../smart-account/tests/smartaccount.spec.ts | 234 +++++++++--------- 4 files changed, 131 insertions(+), 118 deletions(-) diff --git a/packages/node-client/src/types/safeTransactionServiceTypes.ts b/packages/node-client/src/types/safeTransactionServiceTypes.ts index aa0b23b8c..e070d44df 100644 --- a/packages/node-client/src/types/safeTransactionServiceTypes.ts +++ b/packages/node-client/src/types/safeTransactionServiceTypes.ts @@ -29,6 +29,8 @@ export type ChainConfig = { blockExplorerUriTemplate: BlockExplorerConfig ensRegistryAddress: string walletFactoryAddress: string + multiSendAddress: string + multiSendCallAddress: string walletAddress: string // base wallet entryPoint: string //should make this address var fallBackHandler: string //should make this address var diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index d949603a1..35d523563 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -156,10 +156,11 @@ class SmartAccount { private initializeContracts(chainId: ChainId) { // We get the addresses using chainConfig fetched from backend node const smartWalletAddress = this.chainConfig.find(n => n.chainId === chainId)?.walletAddress || ''; - const smartWalletFactoryAddress = this.chainConfig.find(n => n.chainId === chainId)?.walletFactoryAddress || ''; + const smartWalletFactoryAddress = this.chainConfig.find(n => n.chainId === chainId)?.walletFactoryAddress || ''; + const multiSendAddress = this.chainConfig.find(n => n.chainId === chainId)?.multiSendAddress || ''; + const multiSendCallAddress = this.chainConfig.find(n => n.chainId === chainId)?.multiSendCallAddress || ''; - // TODO - // multiSend addresses from chainConfig + this.smartWalletFactoryContract[chainId] = getSmartWalletFactoryContract( this.ethAdapter[chainId], smartWalletFactoryAddress @@ -173,12 +174,12 @@ class SmartAccount { this.multiSendContract[chainId] = getMultiSendContract( this.ethAdapter[chainId], - smartWalletAddress // multiSend addresses should be in chain config + multiSendAddress ); this.multiSendCallOnlyContract[chainId] = getMultiSendCallOnlyContract( this.ethAdapter[chainId], - smartWalletAddress + multiSendCallAddress ); } diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 19e8d160b..ed2d83083 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -176,6 +176,8 @@ export type ChainConfig = { blockExplorerUriTemplate: BlockExplorerConfig ensRegistryAddress: string walletFactoryAddress: string + multiSendAddress: string + multiSendCallAddress: string walletAddress: string // base wallet entryPoint: string //should make this address var fallBackHandler: string //should make this address var diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 8c5e03d6c..20b815414 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -72,123 +72,131 @@ describe('Wallet integration', function () { "message": "Success", "code": 200, "data": [ - { - "chainId": 4, - "name": "Rinkeby", - "symbol": "ETH", - "isL2": false, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://rinkeby.etherscan.io/address/", - "txHash": "https://rinkeby.etherscan.io/address/", - "api": "https://rinkeby.etherscan.io/" + { + "chainId": 4, + "name": "Rinkeby", + "symbol": "ETH", + "isL2": false, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://rinkeby.etherscan.io/address/", + "txHash": "https://rinkeby.etherscan.io/address/", + "api": "https://rinkeby.etherscan.io/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "multiSendAddress": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", + "multiSendCallAddress": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": false, + "walletAddress": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", + "entryPoint": "0xB63F450BbCeaf7D9DdBD35BF52DE1F674DD83e45", + "fallBackHandler": "0x57F2aF40aDF62CA1972224625f105852D2cdB4D1", + "relayerUrl": "", + "providerUrl": "https://rinkeby.infura.io/v3/d126f392798444609246423b06116c77", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "name": "Ethereum", + "symbol": "ETH", + "chainId": 4, + "ercType": "NATIVE", + "decimals": 18, + "logoUri": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", + "address": "null", + "isNativeToken": true, + "isEnabled": true + } }, - "ensRegistryAddress": "", - "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": false, - "walletAddress": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", - "entryPoint": "0xB63F450BbCeaf7D9DdBD35BF52DE1F674DD83e45", - "fallBackHandler": "0x57F2aF40aDF62CA1972224625f105852D2cdB4D1", - "relayerUrl": "", - "providerUrl": "https://rinkeby.infura.io/v3/d126f392798444609246423b06116c77", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "name": "Ethereum", - "symbol": "ETH", - "chainId": 4, - "ercType": "NATIVE", - "decimals": 18, - "logoUri": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", - "address": "null", - "isNativeToken": true, - "isEnabled": true - } - }, - { - "chainId": 5, - "name": "Goerli", - "symbol": "ETH", - "isL2": false, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://goerli.etherscan.io/address/", - "txHash": "https://goerli.etherscan.io/address/", - "api": "https://goerli.etherscan.io/" - }, - "ensRegistryAddress": "", - "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": false, - "walletAddress": "0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e", - "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", - "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", - "relayerUrl": "", - "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", - "indexerUrl": "", - "backendNodeUrl": "" - }, - { - "chainId": 80001, - "name": "Polygon Mumbai", - "symbol": "MATIC", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" + { + "chainId": 5, + "name": "Goerli", + "symbol": "ETH", + "isL2": false, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://goerli.etherscan.io/address/", + "txHash": "https://goerli.etherscan.io/address/", + "api": "https://goerli.etherscan.io/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "multiSendAddress": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", + "multiSendCallAddress": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": false, + "walletAddress": "0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e", + "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", + "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", + "relayerUrl": "", + "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", + "indexerUrl": "", + "backendNodeUrl": "" }, - "ensRegistryAddress": "", - "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": false, - "walletAddress": "0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e", - "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", - "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", - "relayerUrl": "", - "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", - "indexerUrl": "", - "backendNodeUrl": "" - }, - { - "chainId": 1337, - "name": "Ganache", - "symbol": "ETH", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" + { + "chainId": 80001, + "name": "Polygon Mumbai", + "symbol": "MATIC", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", + "multiSendAddress": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", + "multiSendCallAddress": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": false, + "walletAddress": "0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e", + "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", + "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", + "relayerUrl": "", + "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", + "indexerUrl": "", + "backendNodeUrl": "" }, - "ensRegistryAddress": "", - "walletFactoryAddress": walletFactory.address, - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": false, - "walletAddress": smartWallet.address, - "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", - "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", - "relayerUrl": "", - "providerUrl": "http://localhost:8545", - "indexerUrl": "", - "backendNodeUrl": "" - } + { + "chainId": 1337, + "name": "Hardhat2", + "symbol": "ETH", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": walletFactory.address, + "multiSendAddress": multiSend.address, + "multiSendCallAddress": multiSendCallOnly.address, + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": false, + "walletAddress": smartWallet.address, + "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", + "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", + "relayerUrl": "", + "providerUrl": "http://localhost:8545", + "indexerUrl": "", + "backendNodeUrl": "" + } ] - }) + }) }) it('Should init and return details of smart account', async () => { From c1a356720aa30d27790a1e890e709807c421bee3 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 1 Aug 2022 01:47:26 +0530 Subject: [PATCH 0037/1247] refactor to smart account and wallet --- packages/core-types/src/types.ts | 2 +- packages/ethers-lib/package.json | 4 +- .../scripts/generateTypechainFiles.ts | 16 +- .../smart-contract-wallet/SmartWallet.sol | 14 +- .../base/FallbackManager.sol | 2 +- .../base/ModuleManager.sol | 12 +- .../modules/test/WhitelistModule.sol | 10 +- packages/ethers-lib/src/EthersAdapter.ts | 4 +- .../src/contracts/contractInstancesEthers.ts | 4 +- ...feServiceClient.ts => SDKBackendClient.ts} | 13 +- ...e.ts => SmartAccountTransactionService.ts} | 6 +- packages/node-client/src/index.ts | 8 +- ...=> smartAccountTransactionServiceTypes.ts} | 0 .../tests/e2e/addSafeDelegate.test.ts | 4 +- .../node-client/tests/e2e/decodeData.test.ts | 4 +- .../node-client/tests/e2e/getBalances.test.ts | 4 +- .../tests/e2e/getCollectibles.test.ts | 4 +- .../tests/e2e/getIncomingTransactions.test.ts | 4 +- .../tests/e2e/getMultisigTransactions.test.ts | 4 +- .../tests/e2e/getNextNonce.test.ts | 4 +- .../tests/e2e/getPendingTransactions.test.ts | 4 +- .../tests/e2e/getSafeDelegates.test.ts | 4 +- .../node-client/tests/e2e/getSafeInfo.test.ts | 4 +- .../tests/e2e/getSafesByOwner.test.ts | 4 +- .../tests/e2e/getServiceInfo.test.ts | 4 +- .../e2e/getServiceMastercopiesInfo.test.ts | 4 +- .../node-client/tests/e2e/getToken.test.ts | 4 +- .../tests/e2e/getTokenList.test.ts | 4 +- .../tests/e2e/getTransaction.test.ts | 4 +- .../e2e/getTransactionConfirmations.test.ts | 4 +- .../tests/e2e/getUsdBalances.test.ts | 4 +- .../tests/e2e/removeAllSafeDelegates.test.ts | 4 +- .../tests/e2e/removeSafeDelegate.test.ts | 4 +- .../node-client/tests/endpoint/index.test.ts | 4 +- .../tests/utils/setupServiceClient.ts | 6 +- packages/relayer/src/utils/multisend.ts | 6 +- packages/smart-account/src/SmartAccount.ts | 14 +- packages/transactions/src/execution.ts | 137 +++++++++--------- packages/transactions/src/multisend.ts | 2 +- packages/transactions/src/types.ts | 2 +- 40 files changed, 172 insertions(+), 174 deletions(-) rename packages/node-client/src/{SafeServiceClient.ts => SDKBackendClient.ts} (98%) rename packages/node-client/src/{SafeTransactionService.ts => SmartAccountTransactionService.ts} (95%) rename packages/node-client/src/types/{safeTransactionServiceTypes.ts => smartAccountTransactionServiceTypes.ts} (100%) diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 963d8aa82..246cd3863 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -125,7 +125,7 @@ export interface Transaction { readonly value: string readonly data: string readonly operation: OperationType - readonly safeTxGas: number + readonly targetTxGas: number } export interface FeeRefundData { diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 3f9e2ba96..c554dd211 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,13 +1,11 @@ { "name": "@biconomy-sdk/ethers-lib", "version": "1.0.0", - "description": "Ethers library adapter to be used by Safe Core SDK", + "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", "keywords": [ "Ethereum", - "Gnosis", - "Safe", "SDK", "Ethers" ], diff --git a/packages/ethers-lib/scripts/generateTypechainFiles.ts b/packages/ethers-lib/scripts/generateTypechainFiles.ts index 69cfc4e58..35cb0bf22 100644 --- a/packages/ethers-lib/scripts/generateTypechainFiles.ts +++ b/packages/ethers-lib/scripts/generateTypechainFiles.ts @@ -13,14 +13,14 @@ const outDirTests = 'typechain/tests/' // Contract list for which the Typechain files will be generated // Will be included in dist/ folder -const safeContractsPath = './artifacts/contracts/index.sol' +const smartAccountContractsPath = './artifacts/contracts/index.sol' -const safeContracts_V1_0_0 = [ - `${safeContractsPath}/SmartWalletContract.json`, - `${safeContractsPath}/MultiSendContract.json`, - `${safeContractsPath}/MultiSendCallOnlyContract.json`, - `${safeContractsPath}/SmartWalletFactoryContract.json`, - `${safeContractsPath}/EntryPointContract.json` +const smartAccountContracts_V1_0_0 = [ + `${smartAccountContractsPath}/SmartWalletContract.json`, + `${smartAccountContractsPath}/MultiSendContract.json`, + `${smartAccountContractsPath}/MultiSendCallOnlyContract.json`, + `${smartAccountContractsPath}/SmartWalletFactoryContract.json`, + `${smartAccountContractsPath}/EntryPointContract.json` ].join(' ') // Remove existing Typechain files @@ -58,7 +58,7 @@ function moveTypechainFiles(inDir: string, outDir: string): void { const ethersV5 = 'ethers-v5' // Src: Ethers V5 types -generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.0`, safeContracts_V1_0_0) +generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.0`, smartAccountContracts_V1_0_0) moveTypechainFiles( `${typeChainDirectorySrcPath}${ethersV5}/v1.0.0`, `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.0` diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol index 6cf0a8c61..d326f74a9 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol @@ -137,7 +137,7 @@ contract SmartWallet is // TODO : Update description // TODO : Add batchId and update in test cases, utils etc // Gnosis style transaction with optional repay in native tokens OR ERC20 - /// @dev Allows to execute a Safe transaction confirmed by required number of owners and then pays the account that submitted the transaction. + /// @dev Allows to execute a wallet transaction confirmed by required number of owners and then pays the account that submitted the transaction. /// Note: The fees are always transferred, even if the user transaction fails. /// @param _tx Wallet transaction /// @param batchId batchId key for 2D nonces @@ -276,8 +276,8 @@ contract SmartWallet is /// review necessity for this method for estimating execute call /// @dev Allows to estimate a transaction. /// This method is only meant for estimation purpose, therefore the call will always revert and encode the result in the revert data. - /// Since the `estimateGas` function includes refunds, call this method to get an estimated of the costs that are deducted from the safe with `execTransaction` - /// @param to Destination address of Safe transaction. + /// Since the `estimateGas` function includes refunds, call this method to get an estimated of the costs that are deducted from the wallet with `execTransaction` + /// @param to Destination address of wallet transaction. /// @param value Ether value of transaction. /// @param data Data payload of transaction. /// @param operation Operation type of transaction. @@ -302,8 +302,8 @@ contract SmartWallet is /// @param value Ether value. /// @param data Data payload. /// @param operation Operation type. - /// @param targetTxGas Fas that should be used for the safe transaction. - /// @param baseGas Gas costs for data used to trigger the safe transaction. + /// @param targetTxGas Fas that should be used for the wallet transaction. + /// @param baseGas Gas costs for data used to trigger the wallet transaction. /// @param gasPrice Maximum gas price that should be used for this transaction. /// @param gasToken Token address (or 0 if ETH) that is used for the payment. /// @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin). @@ -348,7 +348,7 @@ contract SmartWallet is FeeRefund memory refundInfo, uint256 _nonce ) public view returns (bytes memory) { - bytes32 safeTxHash = + bytes32 walletTxHash = keccak256( abi.encode( WALLET_TX_TYPEHASH, @@ -364,7 +364,7 @@ contract SmartWallet is _nonce ) ); - return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash); + return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), walletTxHash); } // Extra Utils diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol index 722ee3552..8d0c5105a 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol @@ -21,7 +21,7 @@ contract FallbackManager is SelfAuthorized { /// @dev Allows to add a contract to handle fallback calls. /// Only fallback calls without value and with data will be forwarded. - /// This can only be done via a Safe transaction. + /// This can only be done via a wallet transaction. /// @param handler contract to handle fallback calls. function setFallbackHandler(address handler) public authorized { internalSetFallbackHandler(handler); diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol index 40b645d71..3300cba9d 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol @@ -26,8 +26,8 @@ contract ModuleManager is SelfAuthorized, Executor { } /// @dev Allows to add a module to the whitelist. - /// This can only be done via a Safe transaction. - /// @notice Enables the module `module` for the Safe. + /// This can only be done via a wallet transaction. + /// @notice Enables the module `module` for the wallet. /// @param module Module to be whitelisted. function enableModule(address module) public authorized { // Module address cannot be null or sentinel. @@ -40,8 +40,8 @@ contract ModuleManager is SelfAuthorized, Executor { } /// @dev Allows to remove a module from the whitelist. - /// This can only be done via a Safe transaction. - /// @notice Disables the module `module` for the Safe. + /// This can only be done via a wallet transaction. + /// @notice Disables the module `module` for the wallet. /// @param prevModule Module that pointed to the module to be removed in the linked list /// @param module Module to be removed. function disableModule(address prevModule, address module) public authorized { @@ -53,7 +53,7 @@ contract ModuleManager is SelfAuthorized, Executor { emit DisabledModule(module); } - /// @dev Allows a Module to execute a Safe transaction without any further confirmations. + /// @dev Allows a Module to execute a wallet transaction without any further confirmations. /// @param to Destination address of module transaction. /// @param value Ether value of module transaction. /// @param data Data payload of module transaction. @@ -72,7 +72,7 @@ contract ModuleManager is SelfAuthorized, Executor { else emit ExecutionFromModuleFailure(msg.sender); } - /// @dev Allows a Module to execute a Safe transaction without any further confirmations and return data + /// @dev Allows a Module to execute a wallet transaction without any further confirmations and return data /// @param to Destination address of module transaction. /// @param value Ether value of module transaction. /// @param data Data payload of module transaction. diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol index bc7b86598..e39490ada 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol @@ -21,15 +21,15 @@ contract WhitelistModule { whitelisted[_target] = true; } - function authCall(SmartWallet _safe, address payable _to, uint96 _amount, bytes memory _data) external { // Could have some access control from here like guardians! + function authCall(SmartWallet _wallet, address payable _to, uint96 _amount, bytes memory _data) external { // Could have some access control from here like guardians! require(_to != address(0),"Target can not be zero address"); require(whitelisted[_to] == true,"Unauthorized :: Target must be whitelised!"); - require(_safe.execTransactionFromModule(_to, _amount, _data, Enum.Operation.Call), "Could not execute ether transfer"); + require(_wallet.execTransactionFromModule(_to, _amount, _data, Enum.Operation.Call), "Could not execute ether transfer"); } // If value transfer required from wallet /*function handlePayment( - BaseWallet safe, + BaseWallet wallet, uint256 gasUsed, uint256 dataGas, uint256 gasPrice, @@ -43,10 +43,10 @@ contract WhitelistModule { address receiver = refundReceiver == address(0) ? tx.origin : refundReceiver; if (gasToken == address(0)) { // solium-disable-next-line security/no-send - require(safe.execTransactionFromModule(receiver, amount, "", Enum.Operation.Call), "Could not pay gas costs with ether"); + require(wallet.execTransactionFromModule(receiver, amount, "", Enum.Operation.Call), "Could not pay gas costs with ether"); } else { bytes memory data = abi.encodeWithSignature("transfer(address,uint256)", receiver, amount); - require(safe.execTransactionFromModule(gasToken, 0, data, Enum.Operation.Call), "Could not pay gas costs with token"); + require(wallet.execTransactionFromModule(gasToken, 0, data, Enum.Operation.Call), "Could not pay gas costs with token"); } }*/ } \ No newline at end of file diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index 2c68c592e..42a7bf72c 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -74,7 +74,7 @@ class EthersAdapter implements EthAdapter { getSmartWalletContract(address: string): SmartWalletContract { if (!address) { - throw new Error('Invalid Safe Proxy contract address') + throw new Error('Invalid Smart Wallet contract address') } return getSmartWalletContractInstance(address, this.#provider) } @@ -95,7 +95,7 @@ class EthersAdapter implements EthAdapter { getSmartWalletFactoryContract(address:string): SmartWalletProxyFactoryEthersContract { if (!address) { - throw new Error('Invalid Safe Proxy Factory contract address') + throw new Error('Invalid Wallet Factory contract address') } return getSmartWalletFactoryContractInstance(address, this.#provider) } diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index 14ab612c5..b26a2d9b6 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -14,8 +14,8 @@ export function getSmartWalletContractInstance( // signer: Signer provider: JsonRpcProvider ): SmartWalletContractEthers { - let safeContract = SmartWalletContract.connect(contractAddress, provider) - return new SmartWalletContractEthers(safeContract) + let walletContract = SmartWalletContract.connect(contractAddress, provider) + return new SmartWalletContractEthers(walletContract) } // Review diff --git a/packages/node-client/src/SafeServiceClient.ts b/packages/node-client/src/SDKBackendClient.ts similarity index 98% rename from packages/node-client/src/SafeServiceClient.ts rename to packages/node-client/src/SDKBackendClient.ts index 1b9c27755..53d619ace 100644 --- a/packages/node-client/src/SafeServiceClient.ts +++ b/packages/node-client/src/SDKBackendClient.ts @@ -1,6 +1,5 @@ import { Signer } from '@ethersproject/abstract-signer' -import { EthAdapter } from '@biconomy-sdk/core-types' -import SafeTransactionService from './SafeTransactionService' +import SmartAccountTransactionService from './SmartAccountTransactionService' import { AllTransactionsListResponse, AllTransactionsOptions, @@ -31,24 +30,24 @@ import { TokenInfoResponse, TransferListResponse, ChainConfigResponse -} from './types/safeTransactionServiceTypes' +} from './types/smartAccountTransactionServiceTypes' import { getTxServiceBaseUrl } from './utils' import { HttpMethod, sendRequest } from './utils/httpRequests' -export interface SafeServiceClientConfig { +export interface SDKBackendClientConfig { /** txServiceUrl - Safe Transaction Service URL */ txServiceUrl: string /** ethAdapter - Ethereum adapter */ // ethAdapter: EthAdapter } -class SafeServiceClient implements SafeTransactionService { +class SDKBackendClient implements SmartAccountTransactionService { #txServiceBaseUrl: string // #ethAdapter: EthAdapter // Review // Removed ethAdapter - constructor({ txServiceUrl }: SafeServiceClientConfig) { + constructor({ txServiceUrl }: SDKBackendClientConfig) { this.#txServiceBaseUrl = getTxServiceBaseUrl(txServiceUrl) // this.#ethAdapter = ethAdapter } @@ -667,4 +666,4 @@ class SafeServiceClient implements SafeTransactionService { } } -export default SafeServiceClient +export default SDKBackendClient diff --git a/packages/node-client/src/SafeTransactionService.ts b/packages/node-client/src/SmartAccountTransactionService.ts similarity index 95% rename from packages/node-client/src/SafeTransactionService.ts rename to packages/node-client/src/SmartAccountTransactionService.ts index 630a52a1a..b25f81519 100644 --- a/packages/node-client/src/SafeTransactionService.ts +++ b/packages/node-client/src/SmartAccountTransactionService.ts @@ -26,9 +26,9 @@ import { TokenInfoListResponse, TokenInfoResponse, TransferListResponse -} from './types/safeTransactionServiceTypes' +} from './types/smartAccountTransactionServiceTypes' -interface SafeTransactionService { +interface SmartAccountTransactionService { // About getServiceInfo(): Promise getServiceMasterCopiesInfo(): Promise @@ -89,4 +89,4 @@ interface SafeTransactionService { getToken(tokenAddress: string): Promise } -export default SafeTransactionService +export default SmartAccountTransactionService diff --git a/packages/node-client/src/index.ts b/packages/node-client/src/index.ts index 708c34ef2..cfa64a05b 100644 --- a/packages/node-client/src/index.ts +++ b/packages/node-client/src/index.ts @@ -1,5 +1,5 @@ -import SafeServiceClient, { SafeServiceClientConfig } from './SafeServiceClient' +import SDKBackendClient, { SDKBackendClientConfig } from './SDKBackendClient' -export * from './types/safeTransactionServiceTypes' -export default SafeServiceClient -export { SafeServiceClientConfig } +export * from './types/smartAccountTransactionServiceTypes' +export default SDKBackendClient +export { SDKBackendClientConfig } diff --git a/packages/node-client/src/types/safeTransactionServiceTypes.ts b/packages/node-client/src/types/smartAccountTransactionServiceTypes.ts similarity index 100% rename from packages/node-client/src/types/safeTransactionServiceTypes.ts rename to packages/node-client/src/types/smartAccountTransactionServiceTypes.ts diff --git a/packages/node-client/tests/e2e/addSafeDelegate.test.ts b/packages/node-client/tests/e2e/addSafeDelegate.test.ts index 431e1e7c3..1b619f1aa 100644 --- a/packages/node-client/tests/e2e/addSafeDelegate.test.ts +++ b/packages/node-client/tests/e2e/addSafeDelegate.test.ts @@ -1,13 +1,13 @@ import { Signer } from '@ethersproject/abstract-signer' import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient, { SmartAccountDelegateConfig } from '../../src' +import SDKBackendClient, { SmartAccountDelegateConfig } from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient let signer: Signer describe('addSafeDelegate', () => { diff --git a/packages/node-client/tests/e2e/decodeData.test.ts b/packages/node-client/tests/e2e/decodeData.test.ts index 495caae48..8d7a0fdd7 100644 --- a/packages/node-client/tests/e2e/decodeData.test.ts +++ b/packages/node-client/tests/e2e/decodeData.test.ts @@ -1,11 +1,11 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('decodeData', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getBalances.test.ts b/packages/node-client/tests/e2e/getBalances.test.ts index cd10ec23a..0de2dafc4 100644 --- a/packages/node-client/tests/e2e/getBalances.test.ts +++ b/packages/node-client/tests/e2e/getBalances.test.ts @@ -1,12 +1,12 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getBalances', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getCollectibles.test.ts b/packages/node-client/tests/e2e/getCollectibles.test.ts index 0ebb62d2b..465b4ed7b 100644 --- a/packages/node-client/tests/e2e/getCollectibles.test.ts +++ b/packages/node-client/tests/e2e/getCollectibles.test.ts @@ -1,12 +1,12 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getCollectibles', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getIncomingTransactions.test.ts b/packages/node-client/tests/e2e/getIncomingTransactions.test.ts index eb4120fa3..ec5239777 100644 --- a/packages/node-client/tests/e2e/getIncomingTransactions.test.ts +++ b/packages/node-client/tests/e2e/getIncomingTransactions.test.ts @@ -1,12 +1,12 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getIncomingTransactions', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getMultisigTransactions.test.ts b/packages/node-client/tests/e2e/getMultisigTransactions.test.ts index 99f01e547..8d1d7accc 100644 --- a/packages/node-client/tests/e2e/getMultisigTransactions.test.ts +++ b/packages/node-client/tests/e2e/getMultisigTransactions.test.ts @@ -1,12 +1,12 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getMultisigTransactions', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getNextNonce.test.ts b/packages/node-client/tests/e2e/getNextNonce.test.ts index 033cd8a9a..e0d66145e 100644 --- a/packages/node-client/tests/e2e/getNextNonce.test.ts +++ b/packages/node-client/tests/e2e/getNextNonce.test.ts @@ -1,11 +1,11 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getNextNonce', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getPendingTransactions.test.ts b/packages/node-client/tests/e2e/getPendingTransactions.test.ts index ecca53704..367c4c10c 100644 --- a/packages/node-client/tests/e2e/getPendingTransactions.test.ts +++ b/packages/node-client/tests/e2e/getPendingTransactions.test.ts @@ -1,12 +1,12 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getPendingTransactions', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getSafeDelegates.test.ts b/packages/node-client/tests/e2e/getSafeDelegates.test.ts index 2dc192158..9adf19d43 100644 --- a/packages/node-client/tests/e2e/getSafeDelegates.test.ts +++ b/packages/node-client/tests/e2e/getSafeDelegates.test.ts @@ -1,13 +1,13 @@ import { Signer } from '@ethersproject/abstract-signer' import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient, { SmartAccountDelegateConfig } from '../../src' +import SDKBackendClient, { SmartAccountDelegateConfig } from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient let signer: Signer describe('getSafeDelegates', () => { diff --git a/packages/node-client/tests/e2e/getSafeInfo.test.ts b/packages/node-client/tests/e2e/getSafeInfo.test.ts index a6eee0b6e..d832df0c2 100644 --- a/packages/node-client/tests/e2e/getSafeInfo.test.ts +++ b/packages/node-client/tests/e2e/getSafeInfo.test.ts @@ -1,12 +1,12 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getSafeInfo', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getSafesByOwner.test.ts b/packages/node-client/tests/e2e/getSafesByOwner.test.ts index 0ae41d2c7..42e1e198a 100644 --- a/packages/node-client/tests/e2e/getSafesByOwner.test.ts +++ b/packages/node-client/tests/e2e/getSafesByOwner.test.ts @@ -1,12 +1,12 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getSafesByOwner', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getServiceInfo.test.ts b/packages/node-client/tests/e2e/getServiceInfo.test.ts index eb98beb8e..731cdf683 100644 --- a/packages/node-client/tests/e2e/getServiceInfo.test.ts +++ b/packages/node-client/tests/e2e/getServiceInfo.test.ts @@ -1,8 +1,8 @@ import { expect } from 'chai' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import { getServiceClient } from '../utils/setupServiceClient' -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getServiceInfo', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getServiceMastercopiesInfo.test.ts b/packages/node-client/tests/e2e/getServiceMastercopiesInfo.test.ts index f75a86c54..5b2d522ae 100644 --- a/packages/node-client/tests/e2e/getServiceMastercopiesInfo.test.ts +++ b/packages/node-client/tests/e2e/getServiceMastercopiesInfo.test.ts @@ -1,8 +1,8 @@ import chai from 'chai' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import { getServiceClient } from '../utils/setupServiceClient' -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getServiceMasterCopiesInfo', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getToken.test.ts b/packages/node-client/tests/e2e/getToken.test.ts index ae185615d..c4102b357 100644 --- a/packages/node-client/tests/e2e/getToken.test.ts +++ b/packages/node-client/tests/e2e/getToken.test.ts @@ -1,12 +1,12 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getToken', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getTokenList.test.ts b/packages/node-client/tests/e2e/getTokenList.test.ts index 27a7e98a2..beac5ff82 100644 --- a/packages/node-client/tests/e2e/getTokenList.test.ts +++ b/packages/node-client/tests/e2e/getTokenList.test.ts @@ -1,8 +1,8 @@ import chai from 'chai' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import { getServiceClient } from '../utils/setupServiceClient' -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getTokenList', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getTransaction.test.ts b/packages/node-client/tests/e2e/getTransaction.test.ts index f8e4ce80c..90a90cf02 100644 --- a/packages/node-client/tests/e2e/getTransaction.test.ts +++ b/packages/node-client/tests/e2e/getTransaction.test.ts @@ -1,11 +1,11 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getTransaction', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getTransactionConfirmations.test.ts b/packages/node-client/tests/e2e/getTransactionConfirmations.test.ts index 26bd60c1d..45243d135 100644 --- a/packages/node-client/tests/e2e/getTransactionConfirmations.test.ts +++ b/packages/node-client/tests/e2e/getTransactionConfirmations.test.ts @@ -1,11 +1,11 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getTransactionConfirmations', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/getUsdBalances.test.ts b/packages/node-client/tests/e2e/getUsdBalances.test.ts index 134274cb6..d9c25104c 100644 --- a/packages/node-client/tests/e2e/getUsdBalances.test.ts +++ b/packages/node-client/tests/e2e/getUsdBalances.test.ts @@ -1,12 +1,12 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('getUsdBalances', () => { before(async () => { diff --git a/packages/node-client/tests/e2e/removeAllSafeDelegates.test.ts b/packages/node-client/tests/e2e/removeAllSafeDelegates.test.ts index 2f8ebef62..74e98e20f 100644 --- a/packages/node-client/tests/e2e/removeAllSafeDelegates.test.ts +++ b/packages/node-client/tests/e2e/removeAllSafeDelegates.test.ts @@ -1,13 +1,13 @@ import { Signer } from '@ethersproject/abstract-signer' import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient, { SmartAccountDelegateConfig } from '../../src' +import SDKBackendClient, { SmartAccountDelegateConfig } from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient let signer: Signer describe('removeAllSafeDelegates', () => { diff --git a/packages/node-client/tests/e2e/removeSafeDelegate.test.ts b/packages/node-client/tests/e2e/removeSafeDelegate.test.ts index e2cbc76b8..5f02f82f6 100644 --- a/packages/node-client/tests/e2e/removeSafeDelegate.test.ts +++ b/packages/node-client/tests/e2e/removeSafeDelegate.test.ts @@ -1,13 +1,13 @@ import { Signer } from '@ethersproject/abstract-signer' import chai from 'chai' import chaiAsPromised from 'chai-as-promised' -import SafeServiceClient, { SmartAccountDelegateDeleteConfig } from '../../src' +import SDKBackendClient, { SmartAccountDelegateDeleteConfig } from '../../src' import config from '../utils/config' import { getServiceClient } from '../utils/setupServiceClient' chai.use(chaiAsPromised) -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient let signer: Signer describe('removeSafeDelegate', () => { diff --git a/packages/node-client/tests/endpoint/index.test.ts b/packages/node-client/tests/endpoint/index.test.ts index d6b8566b9..2052f3098 100644 --- a/packages/node-client/tests/endpoint/index.test.ts +++ b/packages/node-client/tests/endpoint/index.test.ts @@ -6,7 +6,7 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' import sinon from 'sinon' import sinonChai from 'sinon-chai' -import SafeServiceClient, { +import SDKBackendClient, { SafeBalancesOptions, SafeBalancesUsdOptions, SafeCollectiblesOptions, @@ -37,7 +37,7 @@ const signer = new Wallet( provider ) let ethAdapter: EthAdapter -let serviceSdk: SafeServiceClient +let serviceSdk: SDKBackendClient describe('Endpoint tests', () => { before(async () => { diff --git a/packages/node-client/tests/utils/setupServiceClient.ts b/packages/node-client/tests/utils/setupServiceClient.ts index 60e66fbff..902d0dc87 100644 --- a/packages/node-client/tests/utils/setupServiceClient.ts +++ b/packages/node-client/tests/utils/setupServiceClient.ts @@ -1,12 +1,12 @@ import { getDefaultProvider } from '@ethersproject/providers' import { Wallet } from '@ethersproject/wallet' import { EthAdapter } from '@gnosis.pm/safe-core-sdk-types' -import SafeServiceClient from '../../src' +import SDKBackendClient from '../../src' import config from './config' import { getEthAdapter } from './setupEthAdapter' interface ServiceClientConfig { - serviceSdk: SafeServiceClient + serviceSdk: SDKBackendClient ethAdapter: EthAdapter signer: Wallet } @@ -15,6 +15,6 @@ export async function getServiceClient(signerPk: string): Promise ): WalletTransaction => { const data = contract.interface.encodeFunctionData(method, params); - return buildWalletTransaction( + return buildSmartAccountTransaction( Object.assign( { to: contract.address, @@ -44,7 +44,7 @@ export const buildContractCall = ( ); }; -export const buildWalletTransaction = (template: { +export const buildSmartAccountTransaction = (template: { to: string; value?: BigNumberish; data?: string; @@ -83,7 +83,7 @@ export const encodeMultiSend = (txs: MetaTransaction[]): string => { return "0x" + txs.map((tx) => encodeMetaTransaction(tx)).join(""); }; -export const buildMultiSendSafeTx = ( +export const buildMultiSendSmartAccountTx = ( multiSend: Contract, txs: MetaTransaction[], nonce: number, diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 35d523563..4d7562c83 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -19,7 +19,7 @@ import { SmartAccountState, } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionRequest, TransactionResponse } from '@ethersproject/providers'; -import SafeServiceClient from '@biconomy-sdk/node-client'; +import SDKBackendClient from '@biconomy-sdk/node-client'; import { Web3Provider } from '@ethersproject/providers' import { Relayer, LocalRelayer } from '@biconomy-sdk/relayer'; import { @@ -29,8 +29,8 @@ import { SmartAccountTransaction, getSignatureParameters, EIP712_WALLET_TX_TYPE, - buildWalletTransaction, - safeSignMessage + buildSmartAccountTransaction, + smartAccountSignMessage } from '@biconomy-sdk/transactions'; // Create an instance of Smart Account with multi-chain support. @@ -62,7 +62,7 @@ class SmartAccount { // Instance of backend client responsible for retriving any infromation from the backend node // Indexer related methods (fetchBalances, transactionHistory) are exposed using backend node - nodeClient!: SafeServiceClient + nodeClient!: SDKBackendClient // Instance of relayer (Relayer Service Client) connected with this Smart Account and always ready to dispatch transactions // relayer.relay => dispatch to blockchain @@ -107,7 +107,7 @@ class SmartAccount { this.supportedNetworkIds = this.#smartAccountConfig.supportedNetworksIds; this.provider = walletProvider this.signer = walletProvider.getSigner(); - this.nodeClient = new SafeServiceClient({txServiceUrl: this.#smartAccountConfig.backend_url}); + this.nodeClient = new SDKBackendClient({txServiceUrl: this.#smartAccountConfig.backend_url}); // Upcoming //this.relayer = } @@ -240,7 +240,7 @@ class SmartAccount { walletContract = walletContract.attach(this.address); // TODO - rename and organize utils - const { signer, data } = await safeSignMessage( + const { signer, data } = await smartAccountSignMessage( this.signer, walletContract, tx, @@ -328,7 +328,7 @@ class SmartAccount { } console.log('nonce: ', nonce); - const walletTx: WalletTransaction = buildWalletTransaction({ + const walletTx: WalletTransaction = buildSmartAccountTransaction({ to: transaction.to, value: transaction.value, data: transaction.data, // for token transfers use encodeTransfer diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index 8e5893799..d48df2431 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -36,9 +36,9 @@ export const EIP712_WALLET_TX_TYPE = { ], }; -export const EIP712_SAFE_MESSAGE_TYPE = { - // "SafeMessage(bytes message)" - SafeMessage: [{ type: "bytes", name: "message" }], +export const EIP712_SMART_ACCOUNT_MESSAGE_TYPE = { + // "SmartAccountMessage(bytes message)" + SmartAccountMessage: [{ type: "bytes", name: "message" }], }; export interface MetaTransaction { @@ -48,7 +48,8 @@ export interface MetaTransaction { operation: number; } -export interface SafeTransaction extends MetaTransaction { +// Marked for deletion +export interface SmartaccountTransaction extends MetaTransaction { targetTxGas: string | number; baseGas: string | number; gasPrice: string | number; @@ -100,63 +101,63 @@ export interface SmartAccountTransaction { nonce: string | number; }; -export interface SafeSignature { +export interface SmartAccountSignature { signer: string; data: string; } -export const calculateSafeDomainSeparator = ( - safe: Contract, +export const calculateSmartAccountDomainSeparator = ( + wallet: Contract, chainId: BigNumberish ): string => { return utils._TypedDataEncoder.hashDomain({ - verifyingContract: safe.address, + verifyingContract: wallet.address, chainId, }); }; export const preimageWalletTransactionHash = ( - safe: Contract, - safeTx: WalletTransaction, + wallet: Contract, + SmartAccountTx: WalletTransaction, chainId: BigNumberish ): string => { return utils._TypedDataEncoder.encode( - { verifyingContract: safe.address, chainId }, + { verifyingContract: wallet.address, chainId }, EIP712_WALLET_TX_TYPE, - safeTx + SmartAccountTx ); }; -export const calculateWalletTransactionHash = ( - safe: Contract, - safeTx: WalletTransaction, +export const calculateSmartAccountTransactionHash = ( + wallet: Contract, + SmartAccountTx: WalletTransaction, chainId: BigNumberish ): string => { return utils._TypedDataEncoder.hash( - { verifyingContract: safe.address, chainId }, + { verifyingContract: wallet.address, chainId }, EIP712_WALLET_TX_TYPE, - safeTx + SmartAccountTx ); }; -export const calculateSafeMessageHash = ( - safe: Contract, +export const calculateSmartAccountMessageHash = ( + wallet: Contract, message: string, chainId: BigNumberish ): string => { return utils._TypedDataEncoder.hash( - { verifyingContract: safe.address, chainId }, - EIP712_SAFE_MESSAGE_TYPE, + { verifyingContract: wallet.address, chainId }, + EIP712_SMART_ACCOUNT_MESSAGE_TYPE, { message } ); }; -export const safeSignTypedData = async ( +export const smartAccountSignTypedData = async ( signer: Signer & TypedDataSigner, - safe: Contract, - safeTx: WalletTransaction, + wallet: Contract, + SmartAccountTx: WalletTransaction, chainId?: BigNumberish -): Promise => { +): Promise => { if (!chainId && !signer.provider) throw Error("Provider required to retrieve chainId"); const cid = chainId || (await signer.provider!!.getNetwork()).chainId; @@ -164,9 +165,9 @@ export const safeSignTypedData = async ( return { signer: signerAddress, data: await signer._signTypedData( - { verifyingContract: safe.address, chainId: cid }, + { verifyingContract: wallet.address, chainId: cid }, EIP712_WALLET_TX_TYPE, - safeTx + SmartAccountTx ), }; }; @@ -174,7 +175,7 @@ export const safeSignTypedData = async ( export const signHash = async ( signer: Signer, hash: string -): Promise => { +): Promise => { const typedDataHash = utils.arrayify(hash); const signerAddress = await signer.getAddress(); return { @@ -185,17 +186,17 @@ export const signHash = async ( }; }; -export const safeSignMessage = async ( +export const smartAccountSignMessage = async ( signer: Signer, - safe: Contract, - safeTx: WalletTransaction, + wallet: Contract, + SmartAccountTx: WalletTransaction, chainId?: BigNumberish -): Promise => { +): Promise => { const cid = chainId || (await signer.provider!!.getNetwork()).chainId; - return signHash(signer, calculateWalletTransactionHash(safe, safeTx, cid)); + return signHash(signer, calculateSmartAccountTransactionHash(wallet, SmartAccountTx, cid)); }; -export const buildSignatureBytes = (signatures: SafeSignature[]): string => { +export const buildSignatureBytes = (signatures: SmartAccountSignature[]): string => { signatures.sort((left, right) => left.signer.toLowerCase().localeCompare(right.signer.toLowerCase()) ); @@ -207,26 +208,26 @@ export const buildSignatureBytes = (signatures: SafeSignature[]): string => { }; export const executeTx = async ( - safe: Contract, - safeTx: WalletTransaction, - signatures: SafeSignature[], + wallet: Contract, + SmartAccountTx: WalletTransaction, + signatures: SmartAccountSignature[], overrides?: any ): Promise => { const signatureBytes = buildSignatureBytes(signatures); const transaction: ExecTransaction = { - to: safeTx.to, - value: safeTx.value, - data: safeTx.data, - operation: safeTx.operation, - targetTxGas: safeTx.targetTxGas, + to: SmartAccountTx.to, + value: SmartAccountTx.value, + data: SmartAccountTx.data, + operation: SmartAccountTx.operation, + targetTxGas: SmartAccountTx.targetTxGas, }; const refundInfo: FeeRefund = { - baseGas: safeTx.baseGas, - gasPrice: safeTx.gasPrice, - gasToken: safeTx.gasToken, - refundReceiver: safeTx.refundReceiver, + baseGas: SmartAccountTx.baseGas, + gasPrice: SmartAccountTx.gasPrice, + gasToken: SmartAccountTx.gasToken, + refundReceiver: SmartAccountTx.refundReceiver, }; - return safe.execTransaction( + return wallet.execTransaction( transaction, 0, // batchId refundInfo, @@ -236,26 +237,26 @@ export const executeTx = async ( }; export const populateExecuteTx = async ( - safe: Contract, - safeTx: WalletTransaction, - signatures: SafeSignature[], + wallet: Contract, + SmartAccountTx: WalletTransaction, + signatures: SmartAccountSignature[], overrides?: any ): Promise => { const signatureBytes = buildSignatureBytes(signatures); const transaction: ExecTransaction = { - to: safeTx.to, - value: safeTx.value, - data: safeTx.data, - operation: safeTx.operation, - targetTxGas: safeTx.targetTxGas, + to: SmartAccountTx.to, + value: SmartAccountTx.value, + data: SmartAccountTx.data, + operation: SmartAccountTx.operation, + targetTxGas: SmartAccountTx.targetTxGas, }; const refundInfo: FeeRefund = { - baseGas: safeTx.baseGas, - gasPrice: safeTx.gasPrice, - gasToken: safeTx.gasToken, - refundReceiver: safeTx.refundReceiver, + baseGas: SmartAccountTx.baseGas, + gasPrice: SmartAccountTx.gasPrice, + gasToken: SmartAccountTx.gasToken, + refundReceiver: SmartAccountTx.refundReceiver, }; - return safe.populateTransaction.execTransaction( + return wallet.populateTransaction.execTransaction( transaction, 0, // batchId refundInfo, @@ -273,7 +274,7 @@ export const buildContractCall = ( overrides?: Partial ): WalletTransaction => { const data = contract.interface.encodeFunctionData(method, params); - return buildWalletTransaction( + return buildSmartAccountTransaction( Object.assign( { to: contract.address, @@ -287,19 +288,19 @@ export const buildContractCall = ( }; export const executeTxWithSigners = async ( - safe: Contract, + wallet: Contract, tx: WalletTransaction, signers: Wallet[], overrides?: any ) => { const sigs = await Promise.all( - signers.map((signer) => safeSignTypedData(signer, safe, tx)) + signers.map((signer) => smartAccountSignTypedData(signer, wallet, tx)) ); - return executeTx(safe, tx, sigs, overrides); + return executeTx(wallet, tx, sigs, overrides); }; export const executeContractCallWithSigners = async ( - safe: Contract, + wallet: Contract, contract: Contract, method: string, params: any[], @@ -311,14 +312,14 @@ export const executeContractCallWithSigners = async ( contract, method, params, - await safe.getNonce(0), + await wallet.getNonce(0), //default batchId @review delegateCall, overrides ); - return executeTxWithSigners(safe, tx, signers); + return executeTxWithSigners(wallet, tx, signers); }; -export const buildWalletTransaction = (template: { +export const buildSmartAccountTransaction = (template: { to: string; value?: BigNumberish; data?: string; diff --git a/packages/transactions/src/multisend.ts b/packages/transactions/src/multisend.ts index f87d14e06..3620375e5 100644 --- a/packages/transactions/src/multisend.ts +++ b/packages/transactions/src/multisend.ts @@ -20,7 +20,7 @@ export const encodeMultiSend = (txs: MetaTransaction[]): string => { return "0x" + txs.map((tx) => encodeMetaTransaction(tx)).join(""); }; -export const buildMultiSendSafeTx = ( +export const buildMultiSendSmartAccountTx = ( multiSend: Contract, txs: MetaTransaction[], nonce: number, diff --git a/packages/transactions/src/types.ts b/packages/transactions/src/types.ts index 854a784ea..7a00d5ad4 100644 --- a/packages/transactions/src/types.ts +++ b/packages/transactions/src/types.ts @@ -11,7 +11,7 @@ import { import { TypedDataSigner } from "@ethersproject/abstract-signer"; import { AddressZero } from "@ethersproject/constants"; -/*export interface SafeTransaction extends MetaTransaction { +/*export interface SmartAccountTransaction extends MetaTransaction { targetTxGas: string | number; baseGas: string | number; gasPrice: string | number; From 9c8cb63b8643ab56f6f6edbed75438519563b062 Mon Sep 17 00:00:00 2001 From: talha Date: Tue, 2 Aug 2022 01:00:26 +0500 Subject: [PATCH 0038/1247] v0.0.1 --- packages/core-types/package-lock.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package-lock.json | 2 +- packages/ethers-lib/package.json | 4 ++-- packages/node-client/package-lock.json | 2 +- packages/node-client/package.json | 6 +++--- packages/relayer/package-lock.json | 2 +- packages/relayer/package.json | 4 ++-- packages/smart-account/package-lock.json | 2 +- packages/smart-account/package.json | 16 ++++++++-------- packages/transactions/package-lock.json | 2 +- packages/transactions/package.json | 2 +- 12 files changed, 23 insertions(+), 23 deletions(-) diff --git a/packages/core-types/package-lock.json b/packages/core-types/package-lock.json index 44d2b0500..6840f6488 100644 --- a/packages/core-types/package-lock.json +++ b/packages/core-types/package-lock.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.0", + "version": "0.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/core-types/package.json b/packages/core-types/package.json index fefc13392..5d1c69a20 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.0", + "version": "0.0.1", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/package-lock.json b/packages/ethers-lib/package-lock.json index a2e8ce487..fbae2b63b 100644 --- a/packages/ethers-lib/package-lock.json +++ b/packages/ethers-lib/package-lock.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.0", + "version": "0.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 3f9e2ba96..7309e48cd 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.0", + "version": "0.0.1", "description": "Ethers library adapter to be used by Safe Core SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -42,7 +42,7 @@ "typescript": "^4.6.3" }, "dependencies": { - "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/core-types": "^0.0.1", "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0" }, diff --git a/packages/node-client/package-lock.json b/packages/node-client/package-lock.json index f5a5eb965..fe2b2ad29 100644 --- a/packages/node-client/package-lock.json +++ b/packages/node-client/package-lock.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.0", + "version": "0.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 35de5ea8d..30af47eb0 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.0", + "version": "0.0.1", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -63,9 +63,9 @@ } }, "dependencies": { - "@biconomy-sdk/core-types": "*", - "@gnosis.pm/safe-core-sdk": "^2.1.0", + "@biconomy-sdk/core-types": "^0.0.1", "@ethersproject/abstract-signer": "^5.6.0", + "@gnosis.pm/safe-core-sdk": "^2.1.0", "node-fetch": "^2.6.6" } } diff --git a/packages/relayer/package-lock.json b/packages/relayer/package-lock.json index a2fdd4945..151612d38 100644 --- a/packages/relayer/package-lock.json +++ b/packages/relayer/package-lock.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.0", + "version": "0.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 4f7088a92..a7aec68e4 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.0", + "version": "0.0.1", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" @@ -24,7 +24,7 @@ "lint": "tslint -p tsconfig.json" }, "dependencies": { - "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/core-types": "^0.0.1", "@ethersproject/providers": "^5.6.8", "ethers": "^5.6.9" }, diff --git a/packages/smart-account/package-lock.json b/packages/smart-account/package-lock.json index ed2461fae..ad95a94c0 100644 --- a/packages/smart-account/package-lock.json +++ b/packages/smart-account/package-lock.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.0", + "version": "0.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index b12a52725..c73c61f34 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.0", + "version": "0.0.1", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -45,16 +45,16 @@ "typescript": "^4.6.3" }, "dependencies": { - "@biconomy-sdk/core-types": "*", - "@biconomy-sdk/ethers-lib": "*", - "@biconomy-sdk/node-client": "*", - "@biconomy-sdk/transactions": "*", - "@biconomy-sdk/relayer": "*", + "@biconomy-sdk/core-types": "^0.0.1", + "@biconomy-sdk/ethers-lib": "^0.0.1", + "@biconomy-sdk/node-client": "^0.0.1", + "@biconomy-sdk/relayer": "^0.0.1", + "@biconomy-sdk/transactions": "^0.0.1", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", "@gnosis.pm/safe-deployments": "^1.12.0", - "web3-core": "^1.7.1", - "@types/mocha": "^9.1.1" + "@types/mocha": "^9.1.1", + "web3-core": "^1.7.1" } } diff --git a/packages/transactions/package-lock.json b/packages/transactions/package-lock.json index c20372d65..97e4058cb 100644 --- a/packages/transactions/package-lock.json +++ b/packages/transactions/package-lock.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.0", + "version": "0.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/transactions/package.json b/packages/transactions/package.json index b81078d9b..39b70172c 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.0", + "version": "0.0.1", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From 50eb9f23dbe1b52aa22cbb5fdd4729cea35b2493 Mon Sep 17 00:00:00 2001 From: talha Date: Tue, 2 Aug 2022 01:32:34 +0500 Subject: [PATCH 0039/1247] v0.0.1 --- packages/ethers-lib/package.json | 2 +- packages/smart-account/package.json | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 8559a3658..b9d181c0a 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.0", + "version": "0.0.1", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index e25478ec5..0d71a0a4a 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -47,11 +47,11 @@ "typescript": "^4.6.3" }, "dependencies": { - "@biconomy-sdk/core-types": "*", - "@biconomy-sdk/ethers-lib": "*", - "@biconomy-sdk/node-client": "*", - "@biconomy-sdk/relayer": "*", - "@biconomy-sdk/transactions": "*", + "@biconomy-sdk/core-types": "^0.0.1", + "@biconomy-sdk/ethers-lib": "^0.0.1", + "@biconomy-sdk/node-client": "^0.0.1", + "@biconomy-sdk/relayer": "^0.0.1", + "@biconomy-sdk/transactions": "^0.0.1", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", From 36a2b94327e41f460924b5fe64bb5f6bf9e8d6e7 Mon Sep 17 00:00:00 2001 From: talha Date: Tue, 2 Aug 2022 01:33:10 +0500 Subject: [PATCH 0040/1247] v0.0.2 --- lerna.json | 2 +- packages/core-types/package-lock.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package-lock.json | 2 +- packages/ethers-lib/package.json | 4 ++-- packages/node-client/package-lock.json | 2 +- packages/node-client/package.json | 4 ++-- packages/relayer/package-lock.json | 2 +- packages/relayer/package.json | 4 ++-- packages/smart-account/package-lock.json | 2 +- packages/smart-account/package.json | 12 ++++++------ packages/transactions/package-lock.json | 2 +- packages/transactions/package.json | 2 +- 13 files changed, 21 insertions(+), 21 deletions(-) diff --git a/lerna.json b/lerna.json index 80c403702..e6f868533 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages/*" ], "useNx": true, - "version": "0.0.1" + "version": "0.0.2" } diff --git a/packages/core-types/package-lock.json b/packages/core-types/package-lock.json index 6840f6488..253b365b4 100644 --- a/packages/core-types/package-lock.json +++ b/packages/core-types/package-lock.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "0.0.1", + "version": "0.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 5d1c69a20..f465d20df 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "0.0.1", + "version": "0.0.2", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/package-lock.json b/packages/ethers-lib/package-lock.json index fbae2b63b..256912533 100644 --- a/packages/ethers-lib/package-lock.json +++ b/packages/ethers-lib/package-lock.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "0.0.1", + "version": "0.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index b9d181c0a..c4693c7e3 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "0.0.1", + "version": "0.0.2", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -40,7 +40,7 @@ "typescript": "^4.6.3" }, "dependencies": { - "@biconomy-sdk/core-types": "^0.0.1", + "@biconomy-sdk/core-types": "^0.0.2", "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0" }, diff --git a/packages/node-client/package-lock.json b/packages/node-client/package-lock.json index fe2b2ad29..52226ab02 100644 --- a/packages/node-client/package-lock.json +++ b/packages/node-client/package-lock.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "0.0.1", + "version": "0.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 30af47eb0..56bbbceff 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "0.0.1", + "version": "0.0.2", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -63,7 +63,7 @@ } }, "dependencies": { - "@biconomy-sdk/core-types": "^0.0.1", + "@biconomy-sdk/core-types": "^0.0.2", "@ethersproject/abstract-signer": "^5.6.0", "@gnosis.pm/safe-core-sdk": "^2.1.0", "node-fetch": "^2.6.6" diff --git a/packages/relayer/package-lock.json b/packages/relayer/package-lock.json index 151612d38..b9437bc11 100644 --- a/packages/relayer/package-lock.json +++ b/packages/relayer/package-lock.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "0.0.1", + "version": "0.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/relayer/package.json b/packages/relayer/package.json index a7aec68e4..abc0c5a4b 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "0.0.1", + "version": "0.0.2", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" @@ -24,7 +24,7 @@ "lint": "tslint -p tsconfig.json" }, "dependencies": { - "@biconomy-sdk/core-types": "^0.0.1", + "@biconomy-sdk/core-types": "^0.0.2", "@ethersproject/providers": "^5.6.8", "ethers": "^5.6.9" }, diff --git a/packages/smart-account/package-lock.json b/packages/smart-account/package-lock.json index ad95a94c0..4fe4855b5 100644 --- a/packages/smart-account/package-lock.json +++ b/packages/smart-account/package-lock.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "0.0.1", + "version": "0.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 0d71a0a4a..50fac2dc7 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "0.0.1", + "version": "0.0.2", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -47,11 +47,11 @@ "typescript": "^4.6.3" }, "dependencies": { - "@biconomy-sdk/core-types": "^0.0.1", - "@biconomy-sdk/ethers-lib": "^0.0.1", - "@biconomy-sdk/node-client": "^0.0.1", - "@biconomy-sdk/relayer": "^0.0.1", - "@biconomy-sdk/transactions": "^0.0.1", + "@biconomy-sdk/core-types": "^0.0.2", + "@biconomy-sdk/ethers-lib": "^0.0.2", + "@biconomy-sdk/node-client": "^0.0.2", + "@biconomy-sdk/relayer": "^0.0.2", + "@biconomy-sdk/transactions": "^0.0.2", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", diff --git a/packages/transactions/package-lock.json b/packages/transactions/package-lock.json index 97e4058cb..516fd9708 100644 --- a/packages/transactions/package-lock.json +++ b/packages/transactions/package-lock.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "0.0.1", + "version": "0.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 39b70172c..2532c4cd6 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "0.0.1", + "version": "0.0.2", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From b5c1de7cb0c3c95b1815def7087b1bb98e328fdf Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 2 Aug 2022 13:06:24 +0530 Subject: [PATCH 0041/1247] fix merge conflict --- packages/smart-account/src/SmartAccount.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 26ff7fe14..91291bb71 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -175,8 +175,7 @@ class SmartAccount { this.ethAdapter[chainId], multiSendAddress ); - - this.multiSendContract[chainId] = getMultiSendContract(chainId, this.ethAdapter[chainId]) + this.multiSendCallOnlyContract[chainId] = getMultiSendCallOnlyContract( this.ethAdapter[chainId], multiSendCallAddress From 29e91067b02d346dcd0cb2775011eee2c3cc0079 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 2 Aug 2022 13:14:25 +0530 Subject: [PATCH 0042/1247] fix types --- packages/node-client/src/types/NodeClientTypes.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index 1f7faeaca..1c9ac9fe2 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -32,6 +32,8 @@ export type ChainConfig = { blockExplorerUriTemplate: BlockExplorerConfig ensRegistryAddress: string walletFactoryAddress: string + multiSendAddress: string + multiSendCallAddress: string walletAddress: string // base wallet entryPoint: string //should make this address var fallBackHandler: string //should make this address var From 97c760654b0952be2acbbec3f392061e4df9d451 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 4 Aug 2022 15:52:12 +0530 Subject: [PATCH 0043/1247] version ugrade --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e0bdc6eac..a79bd6ec8 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "author": "Biconomy (https://biconomy.io)", "devDependencies": { "lerna": "^5.1.6", - "nx": "^14.5.1", + "nx": "^14.5.2", "prettier": "2.7.1", "ts-node": "^10.8.2" }, From 1aa669b66ac58203849728f69b308ee7fc2b7677 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 4 Aug 2022 17:58:34 +0530 Subject: [PATCH 0044/1247] consistent versioning --- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core-types/package.json b/packages/core-types/package.json index f465d20df..fefc13392 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "0.0.2", + "version": "1.0.0", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index c4693c7e3..8c221415d 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "0.0.2", + "version": "1.0.0", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 56bbbceff..f7ecf5410 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "0.0.2", + "version": "1.0.0", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index abc0c5a4b..b2f070bc3 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "0.0.2", + "version": "1.0.0", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 50fac2dc7..793fcc748 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "0.0.2", + "version": "1.0.0", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 2532c4cd6..b81078d9b 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "0.0.2", + "version": "1.0.0", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From c3ac23b97b0ebee212268e58dec817ad84f5cee8 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 4 Aug 2022 20:08:47 +0530 Subject: [PATCH 0045/1247] update version --- packages/ethers-lib/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 10 +++++----- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 8c221415d..c554dd211 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -40,7 +40,7 @@ "typescript": "^4.6.3" }, "dependencies": { - "@biconomy-sdk/core-types": "^0.0.2", + "@biconomy-sdk/core-types": "*", "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0" }, diff --git a/packages/node-client/package.json b/packages/node-client/package.json index f7ecf5410..989769b50 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -63,7 +63,7 @@ } }, "dependencies": { - "@biconomy-sdk/core-types": "^0.0.2", + "@biconomy-sdk/core-types": "*", "@ethersproject/abstract-signer": "^5.6.0", "@gnosis.pm/safe-core-sdk": "^2.1.0", "node-fetch": "^2.6.6" diff --git a/packages/relayer/package.json b/packages/relayer/package.json index b2f070bc3..4f7088a92 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -24,7 +24,7 @@ "lint": "tslint -p tsconfig.json" }, "dependencies": { - "@biconomy-sdk/core-types": "^0.0.2", + "@biconomy-sdk/core-types": "*", "@ethersproject/providers": "^5.6.8", "ethers": "^5.6.9" }, diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 793fcc748..1a71b8e3a 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -47,11 +47,11 @@ "typescript": "^4.6.3" }, "dependencies": { - "@biconomy-sdk/core-types": "^0.0.2", - "@biconomy-sdk/ethers-lib": "^0.0.2", - "@biconomy-sdk/node-client": "^0.0.2", - "@biconomy-sdk/relayer": "^0.0.2", - "@biconomy-sdk/transactions": "^0.0.2", + "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/ethers-lib": "*", + "@biconomy-sdk/node-client": "*", + "@biconomy-sdk/relayer": "*", + "@biconomy-sdk/transactions": "*", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", From 2b6054568e6bf69d43bdb27687a6e243b86b2ea2 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 4 Aug 2022 20:19:59 +0530 Subject: [PATCH 0046/1247] fix lockfiles conflicts --- .gitignore | 8 + package-lock.json | 19595 +++++++++++++++------ package.json | 4 +- packages/core-types/package-lock.json | 2480 --- packages/ethers-lib/package-lock.json | 5028 ------ packages/node-client/package-lock.json | 5214 ------ packages/relayer/package-lock.json | 2852 --- packages/smart-account/package-lock.json | 5027 ------ packages/transactions/package-lock.json | 505 - 9 files changed, 14041 insertions(+), 26672 deletions(-) delete mode 100644 packages/core-types/package-lock.json delete mode 100644 packages/ethers-lib/package-lock.json delete mode 100644 packages/node-client/package-lock.json delete mode 100644 packages/relayer/package-lock.json delete mode 100644 packages/smart-account/package-lock.json delete mode 100644 packages/transactions/package-lock.json diff --git a/.gitignore b/.gitignore index 1d6f82d93..4abbe2e49 100644 --- a/.gitignore +++ b/.gitignore @@ -54,6 +54,14 @@ cache artifacts deployments +# lockfiles +packages/core-types/package-lock.json +packages/ethers-lib/package-lock.json +packages/node-client/package-lock.json +packages/relayer/package-lock.json +packages/smart-account/package-lock.json +packages/transactions/package-lock.json + # Typechain typechain diff --git a/package-lock.json b/package-lock.json index 8ce79d211..437f796c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,12 +5,10 @@ "packages": { "": { "name": "biconomy-sdk", - "dependencies": { - "hardhat": "^2.9.9" - }, "devDependencies": { + "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.4.2", + "nx": "^14.5.2", "prettier": "2.7.1", "ts-node": "^10.8.2" }, @@ -20,6 +18,19 @@ ] } }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", @@ -32,6 +43,216 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz", + "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", @@ -41,6 +262,29 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", @@ -96,6 +340,15 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -117,6 +370,244 @@ "node": ">=4" } }, + "node_modules/@babel/parser": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", + "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", + "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, "node_modules/@biconomy-sdk/core-types": { "resolved": "packages/core-types", "link": true @@ -137,10 +628,15 @@ "resolved": "packages/smart-account", "link": true }, + "node_modules/@biconomy-sdk/transactions": { + "resolved": "packages/transactions", + "link": true + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "devOptional": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -148,10 +644,22 @@ "node": ">=12" } }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@ensdomains/ens": { "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", + "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", + "deprecated": "Please use @ensdomains/ens-contracts", "dev": true, - "license": "CC0-1.0", "peer": true, "dependencies": { "bluebird": "^3.5.2", @@ -163,8 +671,9 @@ }, "node_modules/@ensdomains/ens/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -172,8 +681,9 @@ }, "node_modules/@ensdomains/ens/node_modules/camelcase": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -181,8 +691,9 @@ }, "node_modules/@ensdomains/ens/node_modules/cliui": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "string-width": "^1.0.1", @@ -192,8 +703,9 @@ }, "node_modules/@ensdomains/ens/node_modules/find-up": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "path-exists": "^2.0.0", @@ -205,8 +717,9 @@ }, "node_modules/@ensdomains/ens/node_modules/fs-extra": { "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -218,20 +731,16 @@ }, "node_modules/@ensdomains/ens/node_modules/get-caller-file": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/@ensdomains/ens/node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC", "peer": true }, "node_modules/@ensdomains/ens/node_modules/is-fullwidth-code-point": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "number-is-nan": "^1.0.0" @@ -242,8 +751,9 @@ }, "node_modules/@ensdomains/ens/node_modules/jsonfile": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", "dev": true, - "license": "MIT", "peer": true, "optionalDependencies": { "graceful-fs": "^4.1.6" @@ -251,8 +761,9 @@ }, "node_modules/@ensdomains/ens/node_modules/load-json-file": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -267,8 +778,9 @@ }, "node_modules/@ensdomains/ens/node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "hosted-git-info": "^2.1.4", @@ -279,8 +791,9 @@ }, "node_modules/@ensdomains/ens/node_modules/parse-json": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "error-ex": "^1.2.0" @@ -291,8 +804,9 @@ }, "node_modules/@ensdomains/ens/node_modules/path-exists": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "pinkie-promise": "^2.0.0" @@ -303,8 +817,9 @@ }, "node_modules/@ensdomains/ens/node_modules/path-type": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -317,8 +832,9 @@ }, "node_modules/@ensdomains/ens/node_modules/pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -326,8 +842,9 @@ }, "node_modules/@ensdomains/ens/node_modules/read-pkg": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "load-json-file": "^1.0.0", @@ -340,8 +857,9 @@ }, "node_modules/@ensdomains/ens/node_modules/read-pkg-up": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "find-up": "^1.0.0", @@ -353,8 +871,9 @@ }, "node_modules/@ensdomains/ens/node_modules/require-from-string": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -362,8 +881,9 @@ }, "node_modules/@ensdomains/ens/node_modules/rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "glob": "^7.1.3" @@ -374,8 +894,9 @@ }, "node_modules/@ensdomains/ens/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "ISC", "peer": true, "bin": { "semver": "bin/semver" @@ -383,8 +904,9 @@ }, "node_modules/@ensdomains/ens/node_modules/solc": { "version": "0.4.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", + "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "fs-extra": "^0.30.0", @@ -399,8 +921,9 @@ }, "node_modules/@ensdomains/ens/node_modules/string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "code-point-at": "^1.0.0", @@ -413,8 +936,9 @@ }, "node_modules/@ensdomains/ens/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -425,8 +949,9 @@ }, "node_modules/@ensdomains/ens/node_modules/strip-bom": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "is-utf8": "^0.2.0" @@ -437,8 +962,9 @@ }, "node_modules/@ensdomains/ens/node_modules/wrap-ansi": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "string-width": "^1.0.1", @@ -450,14 +976,16 @@ }, "node_modules/@ensdomains/ens/node_modules/y18n": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/@ensdomains/ens/node_modules/yargs": { "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "cliui": "^3.2.0", @@ -478,8 +1006,9 @@ }, "node_modules/@ensdomains/ens/node_modules/yargs-parser": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "camelcase": "^3.0.0", @@ -488,13 +1017,17 @@ }, "node_modules/@ensdomains/resolver": { "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", + "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", + "deprecated": "Please use @ensdomains/ens-contracts", "dev": true, "peer": true }, "node_modules/@eslint/eslintrc": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -510,21 +1043,11 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@ethereum-waffle/chai": { "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.4.4.tgz", + "integrity": "sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@ethereum-waffle/provider": "^3.4.4", @@ -536,8 +1059,9 @@ }, "node_modules/@ethereum-waffle/compiler": { "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz", + "integrity": "sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@resolver-engine/imports": "^0.3.3", @@ -558,8 +1082,9 @@ }, "node_modules/@ethereum-waffle/compiler/node_modules/@typechain/ethers-v5": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", + "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ethers": "^5.0.2" @@ -571,8 +1096,9 @@ }, "node_modules/@ethereum-waffle/compiler/node_modules/array-back": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "typical": "^2.6.1" @@ -583,8 +1109,9 @@ }, "node_modules/@ethereum-waffle/compiler/node_modules/command-line-args": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", + "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "array-back": "^2.0.0", @@ -597,8 +1124,9 @@ }, "node_modules/@ethereum-waffle/compiler/node_modules/find-replace": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", + "integrity": "sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "array-back": "^1.0.4", @@ -610,8 +1138,9 @@ }, "node_modules/@ethereum-waffle/compiler/node_modules/find-replace/node_modules/array-back": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "typical": "^2.6.0" @@ -620,99 +1149,11 @@ "node": ">=0.12.0" } }, - "node_modules/@ethereum-waffle/compiler/node_modules/fs-extra": { - "version": "0.30.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/jsonfile": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/rimraf": { - "version": "2.7.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/solc": { - "version": "0.6.12", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solcjs" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/@ethereum-waffle/compiler/node_modules/ts-essentials": { "version": "6.0.7", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", + "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", "dev": true, - "license": "MIT", "peer": true, "peerDependencies": { "typescript": ">=3.7.0" @@ -720,8 +1161,9 @@ }, "node_modules/@ethereum-waffle/compiler/node_modules/typechain": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", + "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "command-line-args": "^4.0.7", @@ -736,48 +1178,18 @@ "typechain": "dist/cli/cli.js" } }, - "node_modules/@ethereum-waffle/compiler/node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/@ethereum-waffle/compiler/node_modules/typical": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", "dev": true, - "license": "MIT", "peer": true }, - "node_modules/@ethereum-waffle/compiler/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/@ethereum-waffle/ens": { "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.4.4.tgz", + "integrity": "sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@ensdomains/ens": "^0.4.4", @@ -790,8 +1202,9 @@ }, "node_modules/@ethereum-waffle/mock-contract": { "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz", + "integrity": "sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@ethersproject/abi": "^5.5.0", @@ -803,8 +1216,9 @@ }, "node_modules/@ethereum-waffle/provider": { "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.4.4.tgz", + "integrity": "sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@ethereum-waffle/ens": "^3.4.4", @@ -819,7 +1233,9 @@ }, "node_modules/@ethereumjs/block": { "version": "3.6.3", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", + "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", + "dev": true, "dependencies": { "@ethereumjs/common": "^2.6.5", "@ethereumjs/tx": "^3.5.2", @@ -829,7 +1245,9 @@ }, "node_modules/@ethereumjs/blockchain": { "version": "5.5.3", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", + "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", + "dev": true, "dependencies": { "@ethereumjs/block": "^3.6.2", "@ethereumjs/common": "^2.6.4", @@ -841,20 +1259,11 @@ "semaphore-async-await": "^1.5.1" } }, - "node_modules/@ethereumjs/blockchain/node_modules/lru-cache": { - "version": "5.1.1", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@ethereumjs/blockchain/node_modules/yallist": { - "version": "3.1.1", - "license": "ISC" - }, "node_modules/@ethereumjs/common": { "version": "2.6.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dev": true, "dependencies": { "crc-32": "^1.2.0", "ethereumjs-util": "^7.1.5" @@ -862,7 +1271,9 @@ }, "node_modules/@ethereumjs/ethash": { "version": "1.1.0", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", + "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", + "dev": true, "dependencies": { "@ethereumjs/block": "^3.5.0", "@types/levelup": "^4.3.0", @@ -873,14 +1284,18 @@ }, "node_modules/@ethereumjs/ethash/node_modules/buffer-xor": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", + "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "dev": true, "dependencies": { "safe-buffer": "^5.1.1" } }, "node_modules/@ethereumjs/tx": { "version": "3.5.2", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "dev": true, "dependencies": { "@ethereumjs/common": "^2.6.4", "ethereumjs-util": "^7.1.5" @@ -888,7 +1303,9 @@ }, "node_modules/@ethereumjs/vm": { "version": "5.9.3", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", + "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", + "dev": true, "dependencies": { "@ethereumjs/block": "^3.6.3", "@ethereumjs/blockchain": "^5.5.3", @@ -906,6 +1323,8 @@ }, "node_modules/@ethersproject/abi": { "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", "funding": [ { "type": "individual", @@ -916,7 +1335,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/address": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", @@ -931,6 +1349,8 @@ }, "node_modules/@ethersproject/abstract-provider": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", "funding": [ { "type": "individual", @@ -941,7 +1361,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", @@ -954,6 +1373,8 @@ }, "node_modules/@ethersproject/abstract-signer": { "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", "funding": [ { "type": "individual", @@ -964,7 +1385,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", @@ -975,6 +1395,8 @@ }, "node_modules/@ethersproject/address": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", "funding": [ { "type": "individual", @@ -985,7 +1407,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", @@ -996,6 +1417,8 @@ }, "node_modules/@ethersproject/base64": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", "funding": [ { "type": "individual", @@ -1006,13 +1429,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1" } }, "node_modules/@ethersproject/basex": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", + "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", "funding": [ { "type": "individual", @@ -1023,7 +1447,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/properties": "^5.6.0" @@ -1031,6 +1454,8 @@ }, "node_modules/@ethersproject/bignumber": { "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", "funding": [ { "type": "individual", @@ -1041,7 +1466,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", @@ -1050,6 +1474,8 @@ }, "node_modules/@ethersproject/bytes": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", "funding": [ { "type": "individual", @@ -1060,13 +1486,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.6.0" } }, "node_modules/@ethersproject/constants": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", "funding": [ { "type": "individual", @@ -1077,13 +1504,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.6.2" } }, "node_modules/@ethersproject/contracts": { "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", "funding": [ { "type": "individual", @@ -1094,7 +1522,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abi": "^5.6.3", "@ethersproject/abstract-provider": "^5.6.1", @@ -1110,6 +1537,8 @@ }, "node_modules/@ethersproject/hash": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", "funding": [ { "type": "individual", @@ -1120,7 +1549,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/address": "^5.6.1", @@ -1134,7 +1562,8 @@ }, "node_modules/@ethersproject/hdnode": { "version": "5.6.2", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", + "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", "funding": [ { "type": "individual", @@ -1145,7 +1574,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/basex": "^5.6.1", @@ -1163,7 +1591,8 @@ }, "node_modules/@ethersproject/json-wallets": { "version": "5.6.1", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", + "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", "funding": [ { "type": "individual", @@ -1174,7 +1603,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/address": "^5.6.1", @@ -1193,6 +1621,8 @@ }, "node_modules/@ethersproject/keccak256": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", "funding": [ { "type": "individual", @@ -1203,7 +1633,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "js-sha3": "0.8.0" @@ -1211,6 +1640,8 @@ }, "node_modules/@ethersproject/logger": { "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", "funding": [ { "type": "individual", @@ -1220,11 +1651,12 @@ "type": "individual", "url": "https://www.buymeacoffee.com/ricmoo" } - ], - "license": "MIT" + ] }, "node_modules/@ethersproject/networks": { "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", "funding": [ { "type": "individual", @@ -1235,14 +1667,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.6.0" } }, "node_modules/@ethersproject/pbkdf2": { "version": "5.6.1", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", + "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", "funding": [ { "type": "individual", @@ -1253,7 +1685,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/sha2": "^5.6.1" @@ -1261,6 +1692,8 @@ }, "node_modules/@ethersproject/properties": { "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", "funding": [ { "type": "individual", @@ -1271,13 +1704,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.6.0" } }, "node_modules/@ethersproject/providers": { "version": "5.6.8", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", + "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", "funding": [ { "type": "individual", @@ -1288,7 +1722,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/abstract-signer": "^5.6.2", @@ -1312,27 +1745,10 @@ "ws": "7.4.6" } }, - "node_modules/@ethersproject/providers/node_modules/ws": { - "version": "7.4.6", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/@ethersproject/random": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", + "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", "funding": [ { "type": "individual", @@ -1343,7 +1759,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0" @@ -1351,6 +1766,8 @@ }, "node_modules/@ethersproject/rlp": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", "funding": [ { "type": "individual", @@ -1361,7 +1778,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0" @@ -1369,6 +1785,8 @@ }, "node_modules/@ethersproject/sha2": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", "funding": [ { "type": "individual", @@ -1379,7 +1797,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", @@ -1388,6 +1805,8 @@ }, "node_modules/@ethersproject/signing-key": { "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", "funding": [ { "type": "individual", @@ -1398,7 +1817,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", @@ -1410,7 +1828,8 @@ }, "node_modules/@ethersproject/solidity": { "version": "5.6.1", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", "funding": [ { "type": "individual", @@ -1421,7 +1840,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", @@ -1433,6 +1851,8 @@ }, "node_modules/@ethersproject/strings": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", "funding": [ { "type": "individual", @@ -1443,7 +1863,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/constants": "^5.6.1", @@ -1452,6 +1871,8 @@ }, "node_modules/@ethersproject/transactions": { "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", "funding": [ { "type": "individual", @@ -1462,7 +1883,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/address": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", @@ -1477,7 +1897,8 @@ }, "node_modules/@ethersproject/units": { "version": "5.6.1", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", + "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", "funding": [ { "type": "individual", @@ -1488,7 +1909,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/constants": "^5.6.1", @@ -1497,7 +1917,8 @@ }, "node_modules/@ethersproject/wallet": { "version": "5.6.2", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", + "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", "funding": [ { "type": "individual", @@ -1508,7 +1929,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/abstract-signer": "^5.6.2", @@ -1529,6 +1949,8 @@ }, "node_modules/@ethersproject/web": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", "funding": [ { "type": "individual", @@ -1539,7 +1961,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/base64": "^5.6.1", "@ethersproject/bytes": "^5.6.1", @@ -1550,7 +1971,8 @@ }, "node_modules/@ethersproject/wordlists": { "version": "5.6.1", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", + "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", "funding": [ { "type": "individual", @@ -1561,7 +1983,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/hash": "^5.6.1", @@ -1576,59 +1997,81 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "node_modules/@gnosis.pm/safe-core-sdk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.3.2.tgz", + "integrity": "sha512-XD50+AU7ahHwX0+YG8jeyqxrqNsEdLfCzAS5+9WkGuXMNm+K4jkJ9yBHN5yKAu5JXeCDYEQkjTSdVilm8ZLpXQ==", + "dev": true, + "dependencies": { + "@ethersproject/solidity": "^5.6.0", + "@gnosis.pm/safe-core-sdk-types": "^1.3.0", + "@gnosis.pm/safe-deployments": "1.15.0", + "ethereumjs-util": "^7.1.4", + "semver": "^7.3.5", + "web3-utils": "^1.7.1" + } + }, "node_modules/@gnosis.pm/safe-core-sdk-types": { - "version": "1.1.0", - "license": "MIT", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.4.0.tgz", + "integrity": "sha512-v+V6wqfFVgBl2sZ8FqCMwL/qFnr6wBCcJ/gllo4OvItYw/dmXlMCkxUrERoILSeHDezLkrWnnzA4tHfkEwYuwg==", "dependencies": { "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "^1.12.0", + "@gnosis.pm/safe-deployments": "1.15.0", "web3-core": "^1.7.1" } }, "node_modules/@gnosis.pm/safe-core-sdk-utils": { - "version": "1.1.0", - "license": "MIT", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.2.1.tgz", + "integrity": "sha512-VPnSLayGR4omwcNHPwzx8/aDyGXrWULKSF+ENeiWbmwgIhwQnB7T2gzhArNeUgt4BxmYft/HFm1MRSqiQnIQJw==", "dependencies": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "@gnosis.pm/safe-core-sdk-types": "^1.2.1", + "semver": "^7.3.7", "web3-utils": "^1.7.1" } }, "node_modules/@gnosis.pm/safe-deployments": { "version": "1.15.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", + "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", "dependencies": { "semver": "^7.3.7" } }, "node_modules/@gnosis.pm/safe-ethers-lib": { - "version": "1.1.0", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.4.0.tgz", + "integrity": "sha512-ImKNocwoJB19g9nEcorLG1FuYQZyK+llcCIShSw0R7f3OHi30gjcQJek/rJv+wKetM66s7Dz26xtb2X9ARN3Gg==", "dev": true, - "license": "MIT", "dependencies": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + "@gnosis.pm/safe-core-sdk-types": "^1.4.0", + "@gnosis.pm/safe-core-sdk-utils": "^1.2.1" }, "peerDependencies": { - "ethers": "^5.5.3" + "ethers": "^5.6.2" } }, "node_modules/@gnosis.pm/safe-web3-lib": { - "version": "1.1.0", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.4.0.tgz", + "integrity": "sha512-EnJ4I9+VCSiktdWqUDfND3KGLINGlV22NlIZIRl8uIOxlIe5pGqpxb8RNgZHLBxoQ6klkQizcNlS4sv846y9ew==", "dev": true, - "license": "MIT", "dependencies": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + "@ethersproject/bignumber": "^5.6.0", + "@gnosis.pm/safe-core-sdk-types": "^1.4.0", + "@gnosis.pm/safe-core-sdk-utils": "^1.2.1" }, "peerDependencies": { "web3": "^1.7.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -1638,10 +2081,21 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", @@ -1658,43 +2112,461 @@ "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", "dev": true }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", + "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/reporters": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.1.3", + "jest-config": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-resolve-dependencies": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "jest-watcher": "^28.1.3", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "node_modules/@jest/environment": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", + "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "dev": true, + "dependencies": { + "expect": "^28.1.3", + "jest-snapshot": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "dependencies": { + "jest-get-type": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", + "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", + "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/types": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", + "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.13", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", + "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.8", - "devOptional": true, - "license": "MIT", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "devOptional": true, - "license": "MIT", + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@lerna/add": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.1.8.tgz", - "integrity": "sha512-ABplk8a5MmiT8lG1b9KHijRUwj/nOePMuezBHjJEpNeQ8Bw5w3IV/6hpdmApx/w1StBwWWf0UG42klrxXlfl/g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.3.0.tgz", + "integrity": "sha512-MxwTO2UBxZwwuquKbBqdYa56YTqg6Lfz1MZsRQxO7F2cb2NN8NEYTcGOli/71Ee/2AoX4R4xIFTh3TnaflQ25A==", "dev": true, "dependencies": { - "@lerna/bootstrap": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/npm-conf": "5.1.8", - "@lerna/validation-error": "5.1.8", + "@lerna/bootstrap": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/npm-conf": "5.3.0", + "@lerna/validation-error": "5.3.0", "dedent": "^0.7.0", - "npm-package-arg": "^8.1.0", + "npm-package-arg": "8.1.1", "p-map": "^4.0.0", - "pacote": "^13.4.1", + "pacote": "^13.6.1", "semver": "^7.3.4" }, "engines": { @@ -1702,28 +2574,28 @@ } }, "node_modules/@lerna/bootstrap": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.1.8.tgz", - "integrity": "sha512-/QZJc6aRxi6csSR59jdqRXPFh33fbn60F1k/SWtCCELGkZub23fAPLKaO7SlMcyghN3oKlfTfVymu/NWEcptJQ==", - "dev": true, - "dependencies": { - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/has-npm-version": "5.1.8", - "@lerna/npm-install": "5.1.8", - "@lerna/package-graph": "5.1.8", - "@lerna/pulse-till-done": "5.1.8", - "@lerna/rimraf-dir": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/symlink-binary": "5.1.8", - "@lerna/symlink-dependencies": "5.1.8", - "@lerna/validation-error": "5.1.8", - "@npmcli/arborist": "5.2.0", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.3.0.tgz", + "integrity": "sha512-iHVjt6YOQKLY0j+ex13a6ZxjIQ1TSSXqbl6z1hVjBFaDyCh7pra/tgj0LohZDVCaouLwRKucceQfTGrb+cfo7A==", + "dev": true, + "dependencies": { + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/has-npm-version": "5.3.0", + "@lerna/npm-install": "5.3.0", + "@lerna/package-graph": "5.3.0", + "@lerna/pulse-till-done": "5.3.0", + "@lerna/rimraf-dir": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/symlink-binary": "5.3.0", + "@lerna/symlink-dependencies": "5.3.0", + "@lerna/validation-error": "5.3.0", + "@npmcli/arborist": "5.3.0", "dedent": "^0.7.0", "get-port": "^5.1.1", "multimatch": "^5.0.0", - "npm-package-arg": "^8.1.0", + "npm-package-arg": "8.1.1", "npmlog": "^6.0.2", "p-map": "^4.0.0", "p-map-series": "^2.1.0", @@ -1735,38 +2607,38 @@ } }, "node_modules/@lerna/changed": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.1.8.tgz", - "integrity": "sha512-JA9jX9VTHrwSMRJTgLEzdyyx4zi35X0yP6fUUFuli9a0zrB4HV4IowSn1XM03H8iebbDLB0eWBbosqhYwSP8Sw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.3.0.tgz", + "integrity": "sha512-i6ZfBDBZCpnPaSWTuNGTrnExkHNMC+/cSUuS9njaqe+tXgqE95Ja3cMxWZth9Q1uasjcEBHPU2jG0VKrU37rpA==", "dev": true, "dependencies": { - "@lerna/collect-updates": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/listable": "5.1.8", - "@lerna/output": "5.1.8" + "@lerna/collect-updates": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/listable": "5.3.0", + "@lerna/output": "5.3.0" }, "engines": { "node": "^14.15.0 || >=16.0.0" } }, "node_modules/@lerna/check-working-tree": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.1.8.tgz", - "integrity": "sha512-3QyiV75cYt9dtg9JhUt+Aiyk44mFjlyqIIJ/XZ2Cp/Xcwws/QrNKOTs5iYFX5XWzlpTgotOHcu1MH/mY55Czlw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.3.0.tgz", + "integrity": "sha512-qo6jUGWXKLVL1nU8aEECqwrGRjs9o1l1hXdD2juA4Fvzsam1cFVHJwsmw3hAXGhEPD0oalg/XR62H9rZSCLOvQ==", "dev": true, "dependencies": { - "@lerna/collect-uncommitted": "5.1.8", - "@lerna/describe-ref": "5.1.8", - "@lerna/validation-error": "5.1.8" + "@lerna/collect-uncommitted": "5.3.0", + "@lerna/describe-ref": "5.3.0", + "@lerna/validation-error": "5.3.0" }, "engines": { "node": "^14.15.0 || >=16.0.0" } }, "node_modules/@lerna/child-process": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.1.8.tgz", - "integrity": "sha512-P0o4Y/sdiUJ53spZpaVv53NdAcl15UAi5//W3uT2T250xQPlVROwKy11S3Wzqglh94FYdi6XUy293x1uwBlFPw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.3.0.tgz", + "integrity": "sha512-4uXPNIptrgQQQVHVVAXBD8F7IqSvZL3Og0G0DHiWKH+dsSyMIUtaIGJt7sifVoL7nzex4AqEiPq/AubpmG5g4Q==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -1778,16 +2650,16 @@ } }, "node_modules/@lerna/clean": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.1.8.tgz", - "integrity": "sha512-xMExZgjan5/8ZTjJkZoLoTKY1MQOMk7W1YXslbg9BpLevBycPk041MlLauzCyO8XdOpqpVnFCg/9W66fltqmQg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.3.0.tgz", + "integrity": "sha512-Jn+Dr7A69dch8m1dLe7l/SDVQVQT2j7zdy2gaZVEmJIgEEaXmEbfJ2t2n06vRXtckI9B85M5mubT1U3Y7KuNuA==", "dev": true, "dependencies": { - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/prompt": "5.1.8", - "@lerna/pulse-till-done": "5.1.8", - "@lerna/rimraf-dir": "5.1.8", + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/prompt": "5.3.0", + "@lerna/pulse-till-done": "5.3.0", + "@lerna/rimraf-dir": "5.3.0", "p-map": "^4.0.0", "p-map-series": "^2.1.0", "p-waterfall": "^2.1.1" @@ -1797,12 +2669,12 @@ } }, "node_modules/@lerna/cli": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.1.8.tgz", - "integrity": "sha512-0Ghhd9M9QvY6qZtnjTq5RHOIac2ttsW2VNFLFso8ov3YV+rJF4chLhyVaVBvLSA+5ZhwFH+xQ3/yeUx1tDO8GA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.3.0.tgz", + "integrity": "sha512-P7F3Xs98pXMEGZX+mnFfsd6gU03x8UrwQ3mElvQBICl4Ew9z6rS8NGUd3JOPFzm4/vSTjYTnPyPdWBjj6/f6sw==", "dev": true, "dependencies": { - "@lerna/global-options": "5.1.8", + "@lerna/global-options": "5.3.0", "dedent": "^0.7.0", "npmlog": "^6.0.2", "yargs": "^16.2.0" @@ -1811,13 +2683,31 @@ "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/@lerna/cli/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@lerna/collect-uncommitted": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.1.8.tgz", - "integrity": "sha512-pRsIYu82A3DxLahQI/3azoi/kjj6QSSHHAOx4y1YVefeDCaVtAm8aesNbpnyNVfJrie/1Gt5GMEpjfm/KScjlw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.3.0.tgz", + "integrity": "sha512-Ll/mU9Nes0NQoa0pSv2TR2PTCkIomBGuDWH48OF2sKKu69NuLjrD2L0udS5nJYig9HxFewtm4QTiUdYPxfJXkQ==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", + "@lerna/child-process": "5.3.0", "chalk": "^4.1.0", "npmlog": "^6.0.2" }, @@ -1826,13 +2716,13 @@ } }, "node_modules/@lerna/collect-updates": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.1.8.tgz", - "integrity": "sha512-ZPQmYKzwDJ4T+t2fRUI/JjaCzC8Lv02kWIeSXrcIG+cf2xrbM0vK4iQMAKhagTsiWt9hrFwvtMgLp4a6+Ht8Qg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.3.0.tgz", + "integrity": "sha512-fzJo/rmdXKWKYt+9IXjtenIZtSr3blMH8GEqoVKpSZ7TJGpxcFNmMe6foa60BgaTnDmmg1y7Qu6JbQJ3Ra5c5w==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", - "@lerna/describe-ref": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/describe-ref": "5.3.0", "minimatch": "^3.0.4", "npmlog": "^6.0.2", "slash": "^3.0.0" @@ -1842,16 +2732,16 @@ } }, "node_modules/@lerna/command": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.1.8.tgz", - "integrity": "sha512-j/Q++APvkyN2t8GqOpK+4OxH1bB7OZGVWIKh0JQlwbtqH1Y06wlSyNdwpPmv8h1yO9fS1pY/xHwFbs1IicxwzA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.3.0.tgz", + "integrity": "sha512-UNQQ4EGTumqLhOuDPcRA4LpdS9pcTYKSdh/8MdKPeyIRN70vCTwdeTrxqaaKsn3Jo7ycvyUQT5yfrUFmCClfoA==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", - "@lerna/package-graph": "5.1.8", - "@lerna/project": "5.1.8", - "@lerna/validation-error": "5.1.8", - "@lerna/write-log-file": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/package-graph": "5.3.0", + "@lerna/project": "5.3.0", + "@lerna/validation-error": "5.3.0", + "@lerna/write-log-file": "5.3.0", "clone-deep": "^4.0.1", "dedent": "^0.7.0", "execa": "^5.0.0", @@ -1863,18 +2753,18 @@ } }, "node_modules/@lerna/conventional-commits": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.1.8.tgz", - "integrity": "sha512-UduSVDp/+2WlEV6ZO5s7yTzkfhYyPdEsqR6aaUtIJZe9wejcCK4Lc3BJ2BAYIOdtDArNY2CJPsz1LYvFDtPRkw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.3.0.tgz", + "integrity": "sha512-9uoQ2E1J7pL0fml5PNO7FydnBNeqrNOQa53Ca1Klf5t/x4vIn51ocOZNm/YbRAc/affnrxxp+gR2/SWlN0yKqQ==", "dev": true, "dependencies": { - "@lerna/validation-error": "5.1.8", + "@lerna/validation-error": "5.3.0", "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.2", + "conventional-changelog-core": "^4.2.4", "conventional-recommended-bump": "^6.1.0", "fs-extra": "^9.1.0", "get-stream": "^6.0.0", - "npm-package-arg": "^8.1.0", + "npm-package-arg": "8.1.1", "npmlog": "^6.0.2", "pify": "^5.0.0", "semver": "^7.3.4" @@ -1883,28 +2773,64 @@ "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/@lerna/conventional-commits/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/conventional-commits/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/conventional-commits/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@lerna/create": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.1.8.tgz", - "integrity": "sha512-n9qLLeg1e0bQeuk8pA8ELEP05Ktl50e1EirdXGRqqvaXdCn41nYHo4PilUgb77/o/t3Z5N4/ic+0w8OvGVakNg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.3.0.tgz", + "integrity": "sha512-DotTReCc3+Q9rpMA8RKAGemUK7JXT7skbxHvpqpPj7ryNkIv/dNAFC2EHglcpt9Rmyo6YbSP2zk0gfDbdiIcVA==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/npm-conf": "5.1.8", - "@lerna/validation-error": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/npm-conf": "5.3.0", + "@lerna/validation-error": "5.3.0", "dedent": "^0.7.0", "fs-extra": "^9.1.0", "globby": "^11.0.2", - "init-package-json": "^2.0.2", - "npm-package-arg": "^8.1.0", + "init-package-json": "^3.0.2", + "npm-package-arg": "8.1.1", "p-reduce": "^2.1.0", - "pacote": "^13.4.1", + "pacote": "^13.6.1", "pify": "^5.0.0", "semver": "^7.3.4", "slash": "^3.0.0", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0", + "validate-npm-package-name": "^4.0.0", "whatwg-url": "^8.4.0", "yargs-parser": "20.2.4" }, @@ -1913,12 +2839,12 @@ } }, "node_modules/@lerna/create-symlink": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.1.8.tgz", - "integrity": "sha512-5acQITDsJ7dqywPRrF1mpTUPm/EXFfiv/xF6zX+ySUjp4h0Zhhnsm8g2jFdRPDSjIxFD0rV/5iU4X6qmflXlAg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.3.0.tgz", + "integrity": "sha512-xIoC9m4J/u4NV/8ms4P2fiimaYgialqJvNamvMDRmgE1c3BLDSGk2nE4nVI2W5LxjgJdMTiIH9v1QpTUC9Fv+Q==", "dev": true, "dependencies": { - "cmd-shim": "^4.1.0", + "cmd-shim": "^5.0.0", "fs-extra": "^9.1.0", "npmlog": "^6.0.2" }, @@ -1926,13 +2852,85 @@ "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/@lerna/create-symlink/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/create-symlink/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/create-symlink/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/create/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/create/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/create/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@lerna/describe-ref": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.1.8.tgz", - "integrity": "sha512-/u5b2ho09icPcvPb1mlh/tPC07nSFc1cvvFjM9Yg5kfVs23vzVWeA8y0Bk5djlaaSzyHECyqviriX0aoaY47Wg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.3.0.tgz", + "integrity": "sha512-R+CtJcOuAF3kJ6GNQnGC3STEi+5OtpNVz2n17sAs/xqJnq79tPdzEhT+pMxB2eSEkQYlSr+cCKMpF0m/mtIPQA==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", + "@lerna/child-process": "5.3.0", "npmlog": "^6.0.2" }, "engines": { @@ -1940,14 +2938,14 @@ } }, "node_modules/@lerna/diff": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.1.8.tgz", - "integrity": "sha512-BLoi6l/v8p43IkAHTkpjZ4Kq27kYK7iti6y6gYoZuljSwNj38TjgqRb2ohHezQ5c0KFAj8xHEOuZM3Ou6tGyTQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.3.0.tgz", + "integrity": "sha512-i6f99dtO90u1QIJEfVtKE831m4gnMHBwY+4D84GY2SJMno8uI7ZyxMRZQh1nAFtvlNozO2MgzLr1OHtNMZOIgQ==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/validation-error": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/validation-error": "5.3.0", "npmlog": "^6.0.2" }, "engines": { @@ -1955,17 +2953,17 @@ } }, "node_modules/@lerna/exec": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.1.8.tgz", - "integrity": "sha512-U+owlBKoAUfULqRz0oBtHx/I6tYQy9I7xfPP0GoaXa8lpF7esnpCxsJG8GpdzFqIS30o6a2PtyHvp4jkrQF8Zw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.3.0.tgz", + "integrity": "sha512-kI/IuF1hbT+pEMZc3v4+w8BLckUIi45ipzOP0bWvXNgSKKuADAU3HLv+ifRXEjob5906C+Zc7K2IVoVS6r1TDg==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/profiler": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/validation-error": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/profiler": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/validation-error": "5.3.0", "p-map": "^4.0.0" }, "engines": { @@ -1973,13 +2971,13 @@ } }, "node_modules/@lerna/filter-options": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.1.8.tgz", - "integrity": "sha512-ene6xj1BRSFgIgcVg9xABp1cCiRnqm3Uetk9InxOtECbofpSDa7cQy5lsPv6GGAgXFbT91SURQiipH9FAOP+yQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.3.0.tgz", + "integrity": "sha512-ddgy0oDisTKIhCJ4WY5CeEhTsyrbW+zeBvZ7rVaG0oQXjSSYBried4TXRvgy67fampfHoPX+eQq5l1SYTRFPlw==", "dev": true, "dependencies": { - "@lerna/collect-updates": "5.1.8", - "@lerna/filter-packages": "5.1.8", + "@lerna/collect-updates": "5.3.0", + "@lerna/filter-packages": "5.3.0", "dedent": "^0.7.0", "npmlog": "^6.0.2" }, @@ -1988,12 +2986,12 @@ } }, "node_modules/@lerna/filter-packages": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.1.8.tgz", - "integrity": "sha512-2pdtZ+I2Sb+XKfUa/q8flVUyaY0hhwqFYMXll7Nut7Phb1w1TtkEXc2/N0Ac1yia6qSJB/5WrsbAcLF/ITp1vA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.3.0.tgz", + "integrity": "sha512-5/2V50sQB2+JNwuCHP/UPm3y8PN2JWVY9CbNLtF3K5bymNsCkQh2KHEL9wlWZ4yfr/2ufpy4XFPaFUHNoUOGnQ==", "dev": true, "dependencies": { - "@lerna/validation-error": "5.1.8", + "@lerna/validation-error": "5.3.0", "multimatch": "^5.0.0", "npmlog": "^6.0.2" }, @@ -2002,9 +3000,9 @@ } }, "node_modules/@lerna/get-npm-exec-opts": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.1.8.tgz", - "integrity": "sha512-oujoIkEDDVK2+5ooPMEPI+xGs/iwPmGJ63AZu1h7P42YU9tHKQmF5yPybF3Jn99W8+HggM6APUGiX+5oHRvKXA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.3.0.tgz", + "integrity": "sha512-cYBypDo8C7f4MvVvap2nYgtk8MXAADrYU1VdECSJ3Stbe4p2vBGt8bM9xkS2uPfQFMK3YSy3YPkSZcSjVXyoGw==", "dev": true, "dependencies": { "npmlog": "^6.0.2" @@ -2014,28 +3012,64 @@ } }, "node_modules/@lerna/get-packed": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.1.8.tgz", - "integrity": "sha512-3vabIFlfUFQPbFnlOaDCNY4p7mufrhIFPoXxWu15JnjJsSDf9UB2a98xX43xNlxjgZLvnLai3bhCNfrKonI4Kw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.3.0.tgz", + "integrity": "sha512-kD12w7Ko5TThuOuPF2HBLyuPsHK3oyyWyzleGBqR4DqxMtbMRgimyTQnr5o58XBOwUPCFsv1EZiqeGk+3HTGEA==", "dev": true, "dependencies": { "fs-extra": "^9.1.0", - "ssri": "^8.0.1", + "ssri": "^9.0.1", "tar": "^6.1.0" }, "engines": { "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/@lerna/get-packed/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/get-packed/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/get-packed/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@lerna/github-client": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.1.8.tgz", - "integrity": "sha512-y1oweMZ9xc/htIHy42hy2FuMUR/LS3CQlslXG9PAHzl5rE1VDDjvSv61kS50ZberGfB9xmkCxqH+2LgROG9B1A==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.3.0.tgz", + "integrity": "sha512-UqAclsWDMthmbv3Z8QE1K7D/4e93ytg31mc+nEj+UdU+xJQ0L1ypl8zWAmGNs1sFkQntIiTIB4W5zgHet5mmZw==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", + "@lerna/child-process": "5.3.0", "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^18.1.0", + "@octokit/rest": "^19.0.3", "git-url-parse": "^12.0.0", "npmlog": "^6.0.2" }, @@ -2044,9 +3078,9 @@ } }, "node_modules/@lerna/gitlab-client": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.1.8.tgz", - "integrity": "sha512-/EMKdkGnBU4ldyAQ4pXp2TKi1znvY3MiCULt8Hy42p4HhfFl/AxZYDovQYfop1NHVk29BQrGHfvlpyBNqZ2a8g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.3.0.tgz", + "integrity": "sha512-otwbiaGDgvn5MGF1ypsCO48inMpdcxuiDlbxrKD6glPUwNHiGV+PU8LLCCDKimwjjQhl88ySLpL1oTm4jnZ1Aw==", "dev": true, "dependencies": { "node-fetch": "^2.6.1", @@ -2058,21 +3092,21 @@ } }, "node_modules/@lerna/global-options": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.1.8.tgz", - "integrity": "sha512-VCfTilGh0O4T6Lk4DKYA5cUl1kPjwFfRUS/GSpdJx0Lf/dyDbFihrmTHefgUe9N2/nTQySDIdPk9HBr45tozWQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.3.0.tgz", + "integrity": "sha512-iEoFrDSU+KtfcB+lHW5grjg3VkEqzZNTUnWnE1FCBBwj9tSLOHjgKGtWWjIQtBUJ+qcLBbusap9Stqzr7UPYpQ==", "dev": true, "engines": { "node": "^14.15.0 || >=16.0.0" } }, "node_modules/@lerna/has-npm-version": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.1.8.tgz", - "integrity": "sha512-yN5j9gje2ND8zQf4tN52QDQ/yFb24o9Kasm4PZm99FzBURRIwFWCnvo3edOMaiJg0DpA660L+Kq9G0L+ZRKRZQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.3.0.tgz", + "integrity": "sha512-A/bK8e+QP/VMqZkq1wZbyOzMz/AY92tAVsBOQ5Yw2zqshdMVj99st3YHLOqJf/HTEzQo27GGI/ajmcltHS2l6A==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", + "@lerna/child-process": "5.3.0", "semver": "^7.3.4" }, "engines": { @@ -2080,16 +3114,16 @@ } }, "node_modules/@lerna/import": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.1.8.tgz", - "integrity": "sha512-m1+TEhlgS9i14T7o0/8o6FMZJ1O2PkQdpCjqUa5xdLITqvPozoMNujNgiX3ZVLg/XcFOjMtbCsYtspqtKyEsMQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.3.0.tgz", + "integrity": "sha512-KjVT9oFNSp1JLdrS1LSXjDcLiu2TMSfy6tpmhF9Zxo7oKB21SgWmXVV9rcWDueW2RIxNXDeVUG0NVNj2BRGeEQ==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/prompt": "5.1.8", - "@lerna/pulse-till-done": "5.1.8", - "@lerna/validation-error": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/prompt": "5.3.0", + "@lerna/pulse-till-done": "5.3.0", + "@lerna/validation-error": "5.3.0", "dedent": "^0.7.0", "fs-extra": "^9.1.0", "p-map-series": "^2.1.0" @@ -2098,46 +3132,119 @@ "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/@lerna/info": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.1.8.tgz", - "integrity": "sha512-VNCBNOrd5Q1iv1MOF++PzMrdAnTn6KTDbb5hcXHdWBRZUuOs3QOwVYGzAlTFMvwVmmlcER4z8BYyUsbxk3sIdQ==", + "node_modules/@lerna/import/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { - "@lerna/command": "5.1.8", - "@lerna/output": "5.1.8", - "envinfo": "^7.7.4" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=10" } }, - "node_modules/@lerna/init": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.1.8.tgz", - "integrity": "sha512-vEMnq/70u/c031/vURA4pZSxlBRAwjg7vOP7mt9M4dmKz/vkVnQ/5Ig9K0TKqC31hQg957/4m20obYEiFgC3Pw==", + "node_modules/@lerna/import/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "write-json-file": "^4.3.0" + "universalify": "^2.0.0" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@lerna/link": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.1.8.tgz", - "integrity": "sha512-qOtZiMzB9JYyNPUlvpqTxh0Z1EmNVde8pFUIYybv+s3btrKEBPgsvvrOrob/mha3QJxnwcPDPjHt/wCHFxLruA==", + "node_modules/@lerna/import/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "dependencies": { - "@lerna/command": "5.1.8", - "@lerna/package-graph": "5.1.8", - "@lerna/symlink-dependencies": "5.1.8", - "p-map": "^4.0.0", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/info": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.3.0.tgz", + "integrity": "sha512-pyeZSM/PIpBHCXdHPrbh6sPZlngXUxhTVFb0VaIjQ5Ms585xi15s1UQDO3FvzqdyMyalx0QGzCJbNx5XeoCejg==", + "dev": true, + "dependencies": { + "@lerna/command": "5.3.0", + "@lerna/output": "5.3.0", + "envinfo": "^7.7.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/init": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.3.0.tgz", + "integrity": "sha512-y46lzEtgMdEseTJGQQqYZOjqqd7iN+e14vFh/9q5h62V4Y8nlUJRzovVo8JSeaGwKLB0B3dq3BuUn0PNywMhpA==", + "dev": true, + "dependencies": { + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/project": "5.3.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/init/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/init/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/init/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/link": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.3.0.tgz", + "integrity": "sha512-+QBwnGg3S8Zk8M8G5CA4kmGq92rkEMbmWJXaxie3jQayp+GXgSlLs6R4jwSOZlztY6xR3WawMI9sHJ0Vdu+g7w==", + "dev": true, + "dependencies": { + "@lerna/command": "5.3.0", + "@lerna/package-graph": "5.3.0", + "@lerna/symlink-dependencies": "5.3.0", + "p-map": "^4.0.0", "slash": "^3.0.0" }, "engines": { @@ -2145,27 +3252,27 @@ } }, "node_modules/@lerna/list": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.1.8.tgz", - "integrity": "sha512-fVN9o/wKtgcOyuYwvYTg2HI6ORX2kOoBkCJ+PI/uZ/ImwLMTJ2Bf8i/Vsysl3bLFHhQFglzPZ7V1SQP/ku0Sdw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.3.0.tgz", + "integrity": "sha512-5RJvle3m4l2H0UmKNlwS8h2OIlNGsNTKPC4DYrJYt0+fhgzf5SEV1QKw+fuUqe3F8MziIkSGQB52HsjwPE6AWQ==", "dev": true, "dependencies": { - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/listable": "5.1.8", - "@lerna/output": "5.1.8" + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/listable": "5.3.0", + "@lerna/output": "5.3.0" }, "engines": { "node": "^14.15.0 || >=16.0.0" } }, "node_modules/@lerna/listable": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.1.8.tgz", - "integrity": "sha512-nQ/40cbVZLFBv8o9Dz6ivHFZhosfDTYOPm4oHNu0xdexaTXWz5bQUlM4HtOm7K0dJ1fvLEVqiQNAuFSEhARt9g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.3.0.tgz", + "integrity": "sha512-RdmeV9mDeuBOgVOlF/KNH/qttyiYwHbeqHiMAw9s9AfMo/Fz3iDZaTGZuruMm84TZSkKxI7m5mjTlC0djsyKog==", "dev": true, "dependencies": { - "@lerna/query-graph": "5.1.8", + "@lerna/query-graph": "5.3.0", "chalk": "^4.1.0", "columnify": "^1.6.0" }, @@ -2174,9 +3281,9 @@ } }, "node_modules/@lerna/log-packed": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.1.8.tgz", - "integrity": "sha512-alaCIzCtKV5oKyu632emda0hUQMw/BcL2U3v4ObLu90sU8P7mu6TipKRvR9OZxOLDnZGnPE7CMHSU8gsQoIasw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.3.0.tgz", + "integrity": "sha512-tDuOot3vSOUSP7fNNej8UM0fah5oy8mKXe026grt4J0OP4L3rhSWxhfrDBQ3Ylh2dAjgHzscUf/vpnNC9HnhOQ==", "dev": true, "dependencies": { "byte-size": "^7.0.0", @@ -2189,9 +3296,9 @@ } }, "node_modules/@lerna/npm-conf": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.1.8.tgz", - "integrity": "sha512-d/pIcO4RwO3fXNlUbhQ6+qwULxGSiW/xcOtiETVf4ZfjaDqjkCaIxZaeZfm5gWDtII5klpQn3f2d71FCnZG5lw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.3.0.tgz", + "integrity": "sha512-ejlypb90tvIsKUCb0fcOKt7wcPEjLdVK2zfbNs0M+UlRDLyRVOHUVdelJ15cRDNjQHzhBo2HBUKn5Fmm/2pcmg==", "dev": true, "dependencies": { "config-chain": "^1.1.12", @@ -2202,14 +3309,14 @@ } }, "node_modules/@lerna/npm-dist-tag": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.1.8.tgz", - "integrity": "sha512-vZXO0/EClOzRRHHfqB4APhZkxiJpQbsQAAFwaXQCNJE+3S+I/MD0S3iiUWrNs4QnN/8Lj1KyzUfznVDXX7AIUQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.3.0.tgz", + "integrity": "sha512-OPahPk9QLXQXFgtrWm22NNxajVYKavCyTh8ijMwXTGXXbMJAw+PVjokfrUuEtg7FQi+kfJSrYAcJAxxfQq2eiA==", "dev": true, "dependencies": { - "@lerna/otplease": "5.1.8", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", + "@lerna/otplease": "5.3.0", + "npm-package-arg": "8.1.1", + "npm-registry-fetch": "^13.3.0", "npmlog": "^6.0.2" }, "engines": { @@ -2217,15 +3324,15 @@ } }, "node_modules/@lerna/npm-install": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.1.8.tgz", - "integrity": "sha512-AiYQyz4W1+NDeBw3qmdiiatfCtwtaGOi7zHtN1eAqheVTxEMuuYjNHt+8hu6nSpDFYtonz0NsKFvaqRJ5LbVmw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.3.0.tgz", + "integrity": "sha512-scbWo8nW+P9KfitWG3y7Ep97dOs64ECfz9xfqtjagEXKYBPxG3skvwwljkfNnuxrCNs71JVD+imvcewHzih28g==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", - "@lerna/get-npm-exec-opts": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/get-npm-exec-opts": "5.3.0", "fs-extra": "^9.1.0", - "npm-package-arg": "^8.1.0", + "npm-package-arg": "8.1.1", "npmlog": "^6.0.2", "signal-exit": "^3.0.3", "write-pkg": "^4.0.0" @@ -2234,33 +3341,105 @@ "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/@lerna/npm-install/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-install/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/npm-install/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@lerna/npm-publish": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.1.8.tgz", - "integrity": "sha512-Gup/1d8ovc21x3spKPhFK0tIYYn8HOjnpCAg5ytINIW1QM/QcLAigY58If8uiyt+aojz6lubWrSR8/OHf9CXBw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.3.0.tgz", + "integrity": "sha512-n+ocN1Dxrs6AmrSNqZl57cwhP4/VjQXdEI+QYauNnErNjMQW8Wt+tNaTlVAhZ1DnorwAo86o2uzFF/BgdUqh9A==", "dev": true, "dependencies": { - "@lerna/otplease": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", + "@lerna/otplease": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", "fs-extra": "^9.1.0", - "libnpmpublish": "^4.0.0", - "npm-package-arg": "^8.1.0", + "libnpmpublish": "^6.0.4", + "npm-package-arg": "8.1.1", "npmlog": "^6.0.2", "pify": "^5.0.0", - "read-package-json": "^3.0.0" + "read-package-json": "^5.0.1" }, "engines": { "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/@lerna/npm-publish/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-publish/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/npm-publish/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@lerna/npm-run-script": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.1.8.tgz", - "integrity": "sha512-HzvukNC+hDIR25EpYWOvIGJItd0onXqzS9Ivdtw98ZQG3Jexi2Mn18A9tDqHOKCEGO3pVYrI9ep8VWkah2Bj1w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.3.0.tgz", + "integrity": "sha512-2cLR1YdzeMjaMKgDuwHE+iZgVPt+Ttzb3/wFtp7Mw9TlKmNIdbHdrnfl12ABz5knPC+62CCNjB/gznfLndPp2w==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", - "@lerna/get-npm-exec-opts": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/get-npm-exec-opts": "5.3.0", "npmlog": "^6.0.2" }, "engines": { @@ -2268,21 +3447,21 @@ } }, "node_modules/@lerna/otplease": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.1.8.tgz", - "integrity": "sha512-/OVZ7Rbs8/ft14f4i/9HEFDsxJkBSg74rMUqyqFH3fID/RL3ja9hW5bI1bENxvYgs0bp/THy4lV5V75ZcI81zQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.3.0.tgz", + "integrity": "sha512-Xpju2VC5TiycmBP/mdp9hRstkH2MLm8/7o2NotVTCJwASWdKphRMqezhh5BX0E9i6VyrjzmTqSYEh9FNZZ9MwQ==", "dev": true, "dependencies": { - "@lerna/prompt": "5.1.8" + "@lerna/prompt": "5.3.0" }, "engines": { "node": "^14.15.0 || >=16.0.0" } }, "node_modules/@lerna/output": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.1.8.tgz", - "integrity": "sha512-dXsKY8X2eAdPKRKHDZTASlWn95Eav1oQX9doUXkvV3o4UwIgqOCIsU7RqSED3EAEQz6VUH0rXNb/+d3uVeAoJQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.3.0.tgz", + "integrity": "sha512-fISmHDu/9PKInFmT5NXsbh8cR6aE6SUXWrteXJ6PBYK30s0f/pVcfswb9VccX0Yea8HmqMQgCHWUWifkZeXiRA==", "dev": true, "dependencies": { "npmlog": "^6.0.2" @@ -2292,16 +3471,16 @@ } }, "node_modules/@lerna/pack-directory": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.1.8.tgz", - "integrity": "sha512-aaH28ttS+JVimLFrVeZRWZ9Cii4GG2vkJXmQNikWBNQiFL/7S1x83NjMk4SQRdmtpYJkcQpQMZ2hDUdNxLnDCg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.3.0.tgz", + "integrity": "sha512-dTGMUB6/GjExhmLZ8yeFaRKJuSm6M/IsfxSJdL4gFPLigUIAS4XhzXS3KnL0+Ef1ue1yaTlAE9c/czfkE0pc/w==", "dev": true, "dependencies": { - "@lerna/get-packed": "5.1.8", - "@lerna/package": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", - "@lerna/temp-write": "5.1.8", - "npm-packlist": "^2.1.4", + "@lerna/get-packed": "5.3.0", + "@lerna/package": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", + "@lerna/temp-write": "5.3.0", + "npm-packlist": "^5.1.1", "npmlog": "^6.0.2", "tar": "^6.1.0" }, @@ -2310,13 +3489,13 @@ } }, "node_modules/@lerna/package": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.1.8.tgz", - "integrity": "sha512-Ot+wu6XZ93tw8p9oSTJJA15TzGhVpo8VbgNhKPcI3JJjkxVq2D5L5jVeBkjQvFEQBonLibTr339uLLXyZ0RMzg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.3.0.tgz", + "integrity": "sha512-hsB03miiaNdvZ/UGzl0sVqxVat5x33EG9JiYgIoFqzroQPrG+WShmX3ctuO06TY1pxb4iNuHLPIbQomHEzzj8w==", "dev": true, "dependencies": { "load-json-file": "^6.2.0", - "npm-package-arg": "^8.1.0", + "npm-package-arg": "8.1.1", "write-pkg": "^4.0.0" }, "engines": { @@ -2324,14 +3503,14 @@ } }, "node_modules/@lerna/package-graph": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.1.8.tgz", - "integrity": "sha512-aGwXTwCpPfhUPiSRhdppogZjOqJPm39EBxHFDa1E0+/Qaig5avJs4hI6OrPLyjsTywAswtCMOArvD1QZqxwvrQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.3.0.tgz", + "integrity": "sha512-UEHY7l/yknwFvQgo0RifyY+B5QdzuFutLZYSN1BMmyWttOZD9rkM263qnLNGTZ2BUE4dXDwwwOHuhLvi+xDRsA==", "dev": true, "dependencies": { - "@lerna/prerelease-id-from-version": "5.1.8", - "@lerna/validation-error": "5.1.8", - "npm-package-arg": "^8.1.0", + "@lerna/prerelease-id-from-version": "5.3.0", + "@lerna/validation-error": "5.3.0", + "npm-package-arg": "8.1.1", "npmlog": "^6.0.2", "semver": "^7.3.4" }, @@ -2340,9 +3519,9 @@ } }, "node_modules/@lerna/prerelease-id-from-version": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.1.8.tgz", - "integrity": "sha512-wfWv/8lHSk2/pl4FjopbDelFSLCz9s6J9AY5o7Sju9HtD9QUXcQHaXnEP1Rum9/rJZ8vWdFURcp9kzz8nxQ1Ow==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.3.0.tgz", + "integrity": "sha512-o1wsLns6hFTsmk4iqTRJNWLnFzlBBwgu17hp8T2iU4U7LUlDT2ZSKV3smGAU6GfrwX3MAp4LZ5syxgjFjrUOnw==", "dev": true, "dependencies": { "semver": "^7.3.4" @@ -2352,9 +3531,9 @@ } }, "node_modules/@lerna/profiler": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.1.8.tgz", - "integrity": "sha512-vpAFN85BvMHfIGA53IcwaUnS9FHAismEnNyFCjMkzKV55mmXFZlWpZyO36ESdSQRWCo5/25f3Ln0Y6YubY3Dvw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.3.0.tgz", + "integrity": "sha512-LEZYca29EPgZR0q5E+7CJkn25Cw3OxNMQJU/CVn/HGeoWYWOpoDxujrZBl8is2bw06LHXvRbVXEUATLc+ACbqQ==", "dev": true, "dependencies": { "fs-extra": "^9.1.0", @@ -2365,14 +3544,50 @@ "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/@lerna/profiler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/profiler/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/profiler/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@lerna/project": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.1.8.tgz", - "integrity": "sha512-zTFp91kmyJ0VHBmNXEArVrMSZVxnBJ7pHTt8C7RY91WSZhw8XDNumqMHDM+kEM1z/AtDBAAAGqBE3sjk5ONDXQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.3.0.tgz", + "integrity": "sha512-InhIo9uwT1yod72ai5SKseJSUk8KkqG6COmwp1/45vibbawb7ZLbokpns7n46A0NdGNlmwJolamybYOuyumejw==", "dev": true, "dependencies": { - "@lerna/package": "5.1.8", - "@lerna/validation-error": "5.1.8", + "@lerna/package": "5.3.0", + "@lerna/validation-error": "5.3.0", "cosmiconfig": "^7.0.0", "dedent": "^0.7.0", "dot-prop": "^6.0.1", @@ -2388,13 +3603,34 @@ "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/@lerna/project/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@lerna/project/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@lerna/prompt": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.1.8.tgz", - "integrity": "sha512-Cmq0FV/vyCHu00kySxXMfuPvutsi8qoME2/nFcICIktvDqxXr5aSFY8QqB123awNCbpb4xcHykjFnEj/RNdb2Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.3.0.tgz", + "integrity": "sha512-4bIusBdjpw665CJtFsVsaB55hLHnmKnrcOaRjna6N/MdJDl8Th6X4EM4rrfXTX/uUNR3XcV91lYqcLuLmrpm5w==", "dev": true, "dependencies": { - "inquirer": "^7.3.3", + "inquirer": "^8.2.4", "npmlog": "^6.0.2" }, "engines": { @@ -2402,48 +3638,84 @@ } }, "node_modules/@lerna/publish": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.1.8.tgz", - "integrity": "sha512-Q88WxXVNAh/ZWj7vYG83RZUfQyQlJMg7tDhsVTvZzy3VpkkCPtmJXZfX+g4RmE0PNyjsXx9QLYAOZnOB613WyA==", - "dev": true, - "dependencies": { - "@lerna/check-working-tree": "5.1.8", - "@lerna/child-process": "5.1.8", - "@lerna/collect-updates": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/describe-ref": "5.1.8", - "@lerna/log-packed": "5.1.8", - "@lerna/npm-conf": "5.1.8", - "@lerna/npm-dist-tag": "5.1.8", - "@lerna/npm-publish": "5.1.8", - "@lerna/otplease": "5.1.8", - "@lerna/output": "5.1.8", - "@lerna/pack-directory": "5.1.8", - "@lerna/prerelease-id-from-version": "5.1.8", - "@lerna/prompt": "5.1.8", - "@lerna/pulse-till-done": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/validation-error": "5.1.8", - "@lerna/version": "5.1.8", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.3.0.tgz", + "integrity": "sha512-T8T1BQdI+NnlVARKwIXzILknEuiQlZToBsDpuX06M7+45t/pp9Z+u6pVt3rrqwiUPZ/dpoZzYKI31YdNJtGMcQ==", + "dev": true, + "dependencies": { + "@lerna/check-working-tree": "5.3.0", + "@lerna/child-process": "5.3.0", + "@lerna/collect-updates": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/describe-ref": "5.3.0", + "@lerna/log-packed": "5.3.0", + "@lerna/npm-conf": "5.3.0", + "@lerna/npm-dist-tag": "5.3.0", + "@lerna/npm-publish": "5.3.0", + "@lerna/otplease": "5.3.0", + "@lerna/output": "5.3.0", + "@lerna/pack-directory": "5.3.0", + "@lerna/prerelease-id-from-version": "5.3.0", + "@lerna/prompt": "5.3.0", + "@lerna/pulse-till-done": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/validation-error": "5.3.0", + "@lerna/version": "5.3.0", "fs-extra": "^9.1.0", - "libnpmaccess": "^4.0.1", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", + "libnpmaccess": "^6.0.3", + "npm-package-arg": "8.1.1", + "npm-registry-fetch": "^13.3.0", "npmlog": "^6.0.2", "p-map": "^4.0.0", "p-pipe": "^3.1.0", - "pacote": "^13.4.1", + "pacote": "^13.6.1", "semver": "^7.3.4" }, "engines": { "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/@lerna/publish/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/publish/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/publish/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@lerna/pulse-till-done": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.1.8.tgz", - "integrity": "sha512-KsyOazHG6wnjfdJhIdhTaTNwhj8Np/aPPei/ac9WzcuzgLS/uCs1IVFFIYBv5JdTmyVBKmguSZxdYjk7JzKBew==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.3.0.tgz", + "integrity": "sha512-yNvSuPLT1ZTtD2LMVOmiDhw4+9qkyf6xCpfxiUp4cGEN+qIuazWB5JicKLE49o27DBdaG8Ao4lAlb16x/gNrwQ==", "dev": true, "dependencies": { "npmlog": "^6.0.2" @@ -2453,38 +3725,74 @@ } }, "node_modules/@lerna/query-graph": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.1.8.tgz", - "integrity": "sha512-+p+bjPI403Hwv1djTS5aJe7DtPWIDw0a427BE68h1mmrPc9oTe3GG+0lingbfGR8woA2rOmjytgK2jeErOryPg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.3.0.tgz", + "integrity": "sha512-t99lNj97/Vilp5Js1Be7MoyaZ5U0fbOFh0E7lnTfSLvZhTkPMK6xLvAx2M3NQqhwYCQjTFDuf9ozQ3HQtYZAmA==", "dev": true, "dependencies": { - "@lerna/package-graph": "5.1.8" + "@lerna/package-graph": "5.3.0" }, "engines": { "node": "^14.15.0 || >=16.0.0" } }, "node_modules/@lerna/resolve-symlink": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.1.8.tgz", - "integrity": "sha512-OJa8ct4Oo2BcD95FmJqkc5qZMepaQK5RZAWoTqEXG/13Gs0mPc0fZGIhnnpTqtm3mgNhlT7ypCHG42I7hKiSeg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.3.0.tgz", + "integrity": "sha512-zKI7rV5FzzlMBfi6kjDS0ulzcdDTORvdOJ/+CHU5C2h+v+P64Nk2VhZZNCCBDoO/l4GRhgehZOB70GIamO1TSw==", "dev": true, "dependencies": { "fs-extra": "^9.1.0", "npmlog": "^6.0.2", - "read-cmd-shim": "^2.0.0" + "read-cmd-shim": "^3.0.0" }, "engines": { "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/@lerna/resolve-symlink/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/resolve-symlink/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/resolve-symlink/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@lerna/rimraf-dir": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.1.8.tgz", - "integrity": "sha512-3pT1X8kzW8xHUuAmRgzSKAF+/H1h1eSWq5+ACzeTWnvgqE7++0URee7TXwVCP/5FZPTZIzIclQCh4G0WD9Jfjg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.3.0.tgz", + "integrity": "sha512-/QJebh0tSY3LjgEyOo+6NH/b7ZNw9IpjqiDtvnLixjtdfkgli1OKOoZTa4KrO0mJoqMRq4yAa98cjpIzyKqCqw==", "dev": true, "dependencies": { - "@lerna/child-process": "5.1.8", + "@lerna/child-process": "5.3.0", "npmlog": "^6.0.2", "path-exists": "^4.0.0", "rimraf": "^3.0.2" @@ -2494,19 +3802,19 @@ } }, "node_modules/@lerna/run": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.1.8.tgz", - "integrity": "sha512-E5mI3FswVN9zQ3bCYUQxxPlLL400vnKpwLSzzRNFy//TR8Geu0LeR6NY+Jf0jklsKxwWGMJgqL6VqPqxDaNtdw==", - "dev": true, - "dependencies": { - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/npm-run-script": "5.1.8", - "@lerna/output": "5.1.8", - "@lerna/profiler": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/timer": "5.1.8", - "@lerna/validation-error": "5.1.8", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.3.0.tgz", + "integrity": "sha512-KwoKTj1w71OmUHONNYhZME+tr5lk9Q4f+3LUr2WtWZRuOAGO5ZCRrcZc+N4Ib7zno89Ub6Ovz51fcjwltLh72w==", + "dev": true, + "dependencies": { + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/npm-run-script": "5.3.0", + "@lerna/output": "5.3.0", + "@lerna/profiler": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/timer": "5.3.0", + "@lerna/validation-error": "5.3.0", "p-map": "^4.0.0" }, "engines": { @@ -2514,26 +3822,27 @@ } }, "node_modules/@lerna/run-lifecycle": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.1.8.tgz", - "integrity": "sha512-5rRpovujhLJufKRzMp5sl2BIIqrPeoXxjniQbzkpSxZ2vnD+bE9xOoaciHQxOsmXfXhza0C+k3xYMM5+B/bVzg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.3.0.tgz", + "integrity": "sha512-EuBCGwm2PLgkebfyqo3yNkwfSb1EzHeo3lA8t4yld6LXWkgUPBFhc7RwRc6TsQOpjpfFvDSGoI282R01o0jPVQ==", "dev": true, "dependencies": { - "@lerna/npm-conf": "5.1.8", - "@npmcli/run-script": "^3.0.2", - "npmlog": "^6.0.2" + "@lerna/npm-conf": "5.3.0", + "@npmcli/run-script": "^4.1.7", + "npmlog": "^6.0.2", + "p-queue": "^6.6.2" }, "engines": { "node": "^14.15.0 || >=16.0.0" } }, "node_modules/@lerna/run-topologically": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.1.8.tgz", - "integrity": "sha512-isuulfBdNsrgV2QF/HwCKCecfR9mPEU9N4Nf8n9nQQgakwOscoDlwGp2xv27pvcQKI52q/o/ISEjz3JeoEQiOA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.3.0.tgz", + "integrity": "sha512-WiFF2EiwLjAguKs0lEmcukTL7WhuWFwxNprrGWFxEkBhlGdMFk18n8BaZN8FO26xqzztzuPzSx1re/f/dEEAPg==", "dev": true, "dependencies": { - "@lerna/query-graph": "5.1.8", + "@lerna/query-graph": "5.3.0", "p-queue": "^6.6.2" }, "engines": { @@ -2541,13 +3850,13 @@ } }, "node_modules/@lerna/symlink-binary": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.1.8.tgz", - "integrity": "sha512-s7VfKNJZnWvTKZ7KR8Yxh1rYhE/ARMioD5axyu3FleS3Xsdla2M5sQsLouCrdfM3doTO8lMxPVvVSFmL7q0KOA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.3.0.tgz", + "integrity": "sha512-dIATASuGS6y512AGjacOoTpkFDPsKlhggjzL3KLdSNmxV3288nUqaFBuA7rTnnMNnBQ7jVuE1JKJupZnzPN0cA==", "dev": true, "dependencies": { - "@lerna/create-symlink": "5.1.8", - "@lerna/package": "5.1.8", + "@lerna/create-symlink": "5.3.0", + "@lerna/package": "5.3.0", "fs-extra": "^9.1.0", "p-map": "^4.0.0" }, @@ -2555,15 +3864,51 @@ "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/@lerna/symlink-binary/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/symlink-binary/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/symlink-binary/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@lerna/symlink-dependencies": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.1.8.tgz", - "integrity": "sha512-U5diiaKdWUlvoFMh3sYIEESBLa8Z3Q/EpkLl5o4YkcbPBjFHJFpmoqCGomwL9sf9HQUV2S9Lt9szJT8qgQm86Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.3.0.tgz", + "integrity": "sha512-qkq4YT/Bdrb3W22ve+d2Gy3hRTrtT/zBhjKTCukEpYsFJLwSjZ4z5vbv6J15/j6PN1Km9oTRp6vBYmdjAuARQQ==", "dev": true, "dependencies": { - "@lerna/create-symlink": "5.1.8", - "@lerna/resolve-symlink": "5.1.8", - "@lerna/symlink-binary": "5.1.8", + "@lerna/create-symlink": "5.3.0", + "@lerna/resolve-symlink": "5.3.0", + "@lerna/symlink-binary": "5.3.0", "fs-extra": "^9.1.0", "p-map": "^4.0.0", "p-map-series": "^2.1.0" @@ -2572,10 +3917,46 @@ "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/@lerna/symlink-dependencies/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/symlink-dependencies/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/symlink-dependencies/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@lerna/temp-write": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.1.8.tgz", - "integrity": "sha512-4/guYB5XotugyM8P/F1z6b+hNlSCe/QuZsmiZwgXOw2lmYnkSzLWDVjqsdZtNYqojK0lioxcPjZiL5qnEkk1PQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.3.0.tgz", + "integrity": "sha512-AhC5Q+tV0yebEc1P2jsB4apQzztW8dgdLLc1G1Pkt46l5vezRGhZmsj+iUyCsVjpdUSO/UcAq1DbI2Xzhf5arg==", "dev": true, "dependencies": { "graceful-fs": "^4.1.15", @@ -2586,18 +3967,18 @@ } }, "node_modules/@lerna/timer": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.1.8.tgz", - "integrity": "sha512-Ua4bw2YOO3U+sFujE+MsUG+lllU0X7u6PCTj1QKe0QlR0zr2gCa0pcwjUQPdNfxnpJpPY+hdbfTUv2viDloaiA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.3.0.tgz", + "integrity": "sha512-IeDjj1gJtbUPKl2ebpiml9u4k2kRqYF1Dbs6JuWpeC7lGxAx3JcUmkNH2RQ1BYTxk5xc9FKlgNMrZQwhq2K1Ow==", "dev": true, "engines": { "node": "^14.15.0 || >=16.0.0" } }, "node_modules/@lerna/validation-error": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.1.8.tgz", - "integrity": "sha512-n+IiaxN2b08ZMYnezsmwL6rXB15/VvweusC04GMh1XtWunnMzSg9JDM7y6bw2vfpBBQx6cBFhLKSpD2Fcq5D5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.3.0.tgz", + "integrity": "sha512-GVvnTxx+CNFjXCiJahAu2c/pP2R3DhGuQp4CJUyKegnzGaWK0h5PhlwRL7/LbDMPLh2zLobPOVr9kTOjwv76Nw==", "dev": true, "dependencies": { "npmlog": "^6.0.2" @@ -2607,25 +3988,25 @@ } }, "node_modules/@lerna/version": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.1.8.tgz", - "integrity": "sha512-3f4P7KjIs6Gn2iaGkA5EASE9izZeDKtEzE8i2DE7YfVdw/P+EwFfKv2mKBXGbckYw42YO1tL6aD2QH0C8XbwlA==", - "dev": true, - "dependencies": { - "@lerna/check-working-tree": "5.1.8", - "@lerna/child-process": "5.1.8", - "@lerna/collect-updates": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/conventional-commits": "5.1.8", - "@lerna/github-client": "5.1.8", - "@lerna/gitlab-client": "5.1.8", - "@lerna/output": "5.1.8", - "@lerna/prerelease-id-from-version": "5.1.8", - "@lerna/prompt": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/temp-write": "5.1.8", - "@lerna/validation-error": "5.1.8", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.3.0.tgz", + "integrity": "sha512-QOQSAdpeP66oQQ20nNZ4NhJS5NtZZDGyz36kP/4BeqjGK6QgtrEmto4+vmWj49w3VJUIXnrqAKHiPkhFUmJm5Q==", + "dev": true, + "dependencies": { + "@lerna/check-working-tree": "5.3.0", + "@lerna/child-process": "5.3.0", + "@lerna/collect-updates": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/conventional-commits": "5.3.0", + "@lerna/github-client": "5.3.0", + "@lerna/gitlab-client": "5.3.0", + "@lerna/output": "5.3.0", + "@lerna/prerelease-id-from-version": "5.3.0", + "@lerna/prompt": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/temp-write": "5.3.0", + "@lerna/validation-error": "5.3.0", "chalk": "^4.1.0", "dedent": "^0.7.0", "load-json-file": "^6.2.0", @@ -2644,13 +4025,13 @@ } }, "node_modules/@lerna/write-log-file": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.1.8.tgz", - "integrity": "sha512-B+shMH3TpzA7Q5GGbuNkOmdPQdD1LXRFj7R17LINkn82PhP9CUgubwYuiVzrLa16ADi0V5Ad76pqtHi/6kD0nA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.3.0.tgz", + "integrity": "sha512-cmrNAI5+9auUJSuTVrUzt2nb/KX6htgjdw7gGPMI1Tm6cdBIbs67R6LedZ8yvYOLGsXB2Se93vxv5fTgEHWfCw==", "dev": true, "dependencies": { "npmlog": "^6.0.2", - "write-file-atomic": "^3.0.3" + "write-file-atomic": "^4.0.1" }, "engines": { "node": "^14.15.0 || >=16.0.0" @@ -2658,7 +4039,9 @@ }, "node_modules/@metamask/eth-sig-util": { "version": "4.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dev": true, "dependencies": { "ethereumjs-abi": "^0.6.8", "ethereumjs-util": "^6.2.1", @@ -2672,18 +4055,24 @@ }, "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { "version": "4.11.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { "version": "4.12.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { "version": "6.2.1", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, "dependencies": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -2694,10 +4083,35 @@ "rlp": "^2.2.3" } }, + "node_modules/@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@noble/secp256k1": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", + "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2708,16 +4122,18 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2728,8 +4144,9 @@ }, "node_modules/@nomiclabs/hardhat-ethers": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.0.tgz", + "integrity": "sha512-vlW90etB3675QWG7tMrHaDoTa7ymMB7irM4DAQ98g8zJoe9YqEggeDnbO6v5b+BLth/ty4vN6Ko/kaqRN1krHw==", "dev": true, - "license": "MIT", "peerDependencies": { "ethers": "^5.0.0", "hardhat": "^2.0.0" @@ -2737,8 +4154,9 @@ }, "node_modules/@nomiclabs/hardhat-waffle": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", + "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", "dev": true, - "license": "MIT", "dependencies": { "@types/sinon-chai": "^3.2.3", "@types/web3": "1.0.19" @@ -2752,8 +4170,9 @@ }, "node_modules/@nomiclabs/hardhat-web3": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz", + "integrity": "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/bignumber.js": "^5.0.0" }, @@ -2763,9 +4182,9 @@ } }, "node_modules/@npmcli/arborist": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.2.0.tgz", - "integrity": "sha512-zWV7scFGL0SmpvfQyIWnMFbU/0YgtMNyvJiJwR98kyjUSntJGWFFR0O600d5W+TrDcTg0GyDbY+HdzGEg+GXLg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz", + "integrity": "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==", "dev": true, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", @@ -2776,7 +4195,7 @@ "@npmcli/name-from-folder": "^1.0.1", "@npmcli/node-gyp": "^2.0.0", "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.0", + "@npmcli/run-script": "^4.1.3", "bin-links": "^3.0.0", "cacache": "^16.0.6", "common-ancestor-path": "^1.0.1", @@ -2790,7 +4209,7 @@ "npm-pick-manifest": "^7.0.0", "npm-registry-fetch": "^13.0.0", "npmlog": "^6.0.2", - "pacote": "^13.0.5", + "pacote": "^13.6.1", "parse-conflict-json": "^2.0.1", "proc-log": "^2.0.0", "promise-all-reject-late": "^1.0.0", @@ -2810,24 +4229,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@npmcli/arborist/node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, "node_modules/@npmcli/arborist/node_modules/hosted-git-info": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", @@ -2840,71 +4241,25 @@ "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "node_modules/@npmcli/arborist/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@npmcli/arborist/node_modules/lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", "dev": true, "engines": { "node": ">=12" } }, - "node_modules/@npmcli/arborist/node_modules/make-fetch-happen": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", - "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "node_modules/@npmcli/arborist/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" + "node": ">=10" } }, "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { @@ -2922,72 +4277,10 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/npm-registry-fetch": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", - "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@npmcli/arborist/node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/ci-detect": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz", - "integrity": "sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q==", - "dev": true - }, "node_modules/@npmcli/fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", - "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.1.tgz", + "integrity": "sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg==", "dev": true, "dependencies": { "@gar/promisify": "^1.1.3", @@ -3018,14 +4311,26 @@ } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", "dev": true, "engines": { "node": ">=12" } }, + "node_modules/@npmcli/git/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@npmcli/installed-package-contents": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", @@ -3043,9 +4348,9 @@ } }, "node_modules/@npmcli/map-workspaces": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz", - "integrity": "sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", + "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", "dev": true, "dependencies": { "@npmcli/name-from-folder": "^1.0.1", @@ -3125,6 +4430,18 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@npmcli/name-from-folder": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", @@ -3165,36 +4482,37 @@ } }, "node_modules/@npmcli/run-script": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz", - "integrity": "sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.0.tgz", + "integrity": "sha512-e/QgLg7j2wSJp1/7JRl0GC8c7PMX+uYlA/1Tb+IDOLdSM4T7K1VQ9mm9IGU3WRtY5vEIObpqCLb3aCNCug18DA==", "dev": true, "dependencies": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^8.4.1", - "read-package-json-fast": "^2.0.3" + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@nrwl/cli": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.4.2.tgz", - "integrity": "sha512-JNV4kP9goZD4BlTQGKdKhCRc1bhiWYp1TaDJHdk4ZfhiLt1NzXNxxgc/eX2obFZ3Hw+KdM/gM5F7KfWBbtSGSw==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.2.tgz", + "integrity": "sha512-uriSxM33IpiBpW9kHEW3gw5OjPaQe3jHdWUMOT88TrqTlf449qe01Sys8+H2YgJMIcLTFYX0fP4V1K9jqKKZCg==", "dev": true, "dependencies": { - "nx": "14.4.2" + "nx": "14.5.2" } }, "node_modules/@nrwl/tao": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.4.2.tgz", - "integrity": "sha512-Ygw3skKZfFhi4MBHZKQ8A67pDQxeyDdY78tFWViMN0SEn9ExL41Q8V9aSMfir8VZYGca6ZOXX5MRhbeHdcgMLQ==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.2.tgz", + "integrity": "sha512-SEx3SM7xQiB8mOQ/gCt7lFJKRrkq3rBX6FiV3bl+dQtuKK2zKQbyikY9r+MCZCQNqZAud3HJ2xCyKZBhK8htQg==", "dev": true, "dependencies": { - "nx": "14.4.2" + "nx": "14.5.2" }, "bin": { "tao": "index.js" @@ -3205,7 +4523,6 @@ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", "dev": true, - "peer": true, "dependencies": { "@octokit/types": "^6.0.3" }, @@ -3218,7 +4535,6 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", "dev": true, - "peer": true, "dependencies": { "@octokit/auth-token": "^3.0.0", "@octokit/graphql": "^5.0.0", @@ -3237,7 +4553,6 @@ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", "dev": true, - "peer": true, "dependencies": { "@octokit/types": "^6.0.3", "is-plain-object": "^5.0.0", @@ -3252,7 +4567,6 @@ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", "dev": true, - "peer": true, "dependencies": { "@octokit/request": "^6.0.0", "@octokit/types": "^6.0.3", @@ -3263,9 +4577,9 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "12.8.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.8.0.tgz", - "integrity": "sha512-ydcKLs2KKcxlhpdWLzJxEBDEk/U5MUeqtqkXlrtAUXXFPs6vLl1PEGghFC/BbpleosB7iXs0Z4P2DGe7ZT5ZNg==", + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", "dev": true }, "node_modules/@octokit/plugin-enterprise-rest": { @@ -3275,12 +4589,15 @@ "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.21.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.2.tgz", - "integrity": "sha512-S24H0a6bBVreJtoTaRHT/gnVASbOHVTRMOVIqd9zrJBP3JozsxJB56TDuTUmd1xLI4/rAE2HNmThvVKtIdLLEw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz", + "integrity": "sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==", "dev": true, "dependencies": { - "@octokit/types": "^6.39.0" + "@octokit/types": "^6.41.0" + }, + "engines": { + "node": ">= 14" }, "peerDependencies": { "@octokit/core": ">=4" @@ -3296,24 +4613,26 @@ } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.2.0.tgz", + "integrity": "sha512-PZ+yfkbZAuRUtqu6Y191/V3eM0KBPx+Yq7nh+ONPdpm3EX4pd5UnK2y2XgO/0AtNum5a4aJCDjqsDuUZ2hWRXw==", "dev": true, "dependencies": { - "@octokit/types": "^6.39.0", + "@octokit/types": "^6.41.0", "deprecation": "^2.3.1" }, + "engines": { + "node": ">= 14" + }, "peerDependencies": { "@octokit/core": ">=3" } }, "node_modules/@octokit/request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.1.0.tgz", - "integrity": "sha512-36V+sP4bJli31TRq8sea3d/Q1XGgZ9cnqpsegkLCnvpu+hoYephSkxGlWg4KB6dyUM1IWPXVrLFOKYzObQ+MZg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.0.tgz", + "integrity": "sha512-7IAmHnaezZrgUqtRShMlByJK33MT9ZDnMRgZjnRrRV9a/jzzFwKGz0vxhFU6i7VMLraYcQ1qmcAOin37Kryq+Q==", "dev": true, - "peer": true, "dependencies": { "@octokit/endpoint": "^7.0.0", "@octokit/request-error": "^3.0.0", @@ -3331,7 +4650,6 @@ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", "dev": true, - "peer": true, "dependencies": { "@octokit/types": "^6.0.3", "deprecation": "^2.0.0", @@ -3342,100 +4660,33 @@ } }, "node_modules/@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", + "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", "dev": true, "dependencies": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/core": "^4.0.0", + "@octokit/plugin-paginate-rest": "^3.0.0", "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" - } - }, - "node_modules/@octokit/rest/node_modules/@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/rest/node_modules/@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "dev": true, - "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/rest/node_modules/@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/rest/node_modules/@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", - "dev": true, - "dependencies": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/rest/node_modules/@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", - "dev": true, - "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/rest/node_modules/@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" + "@octokit/plugin-rest-endpoint-methods": "^6.0.0" + }, + "engines": { + "node": ">= 14" } }, "node_modules/@octokit/types": { - "version": "6.39.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.39.0.tgz", - "integrity": "sha512-Mq4N9sOAYCitTsBtDdRVrBE80lIrMBhL9Jbrw0d+j96BAzlq4V+GLHFJbHokEsVvO/9tQupQdoFdgVYhD2C8UQ==", + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^12.7.0" + "@octokit/openapi-types": "^12.11.0" } }, "node_modules/@openzeppelin/contracts": { - "version": "4.7.0", - "license": "MIT" + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.2.tgz", + "integrity": "sha512-4n/JL9izql8303mPqPdubuna/DWEMbmOzWYUWyCPhjhiEr2w3nQrjE7vZz1fBF+wzzP6dZbIcsgqACk53c9FGA==" }, "node_modules/@parcel/watcher": { "version": "2.0.4", @@ -3455,10 +4706,17 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, "node_modules/@resolver-engine/core": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz", + "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==", "dev": true, - "license": "LGPL-3.0-or-later", "peer": true, "dependencies": { "debug": "^3.1.0", @@ -3468,8 +4726,9 @@ }, "node_modules/@resolver-engine/core/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ms": "^2.1.1" @@ -3477,8 +4736,9 @@ }, "node_modules/@resolver-engine/fs": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz", + "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==", "dev": true, - "license": "LGPL-3.0-or-later", "peer": true, "dependencies": { "@resolver-engine/core": "^0.3.3", @@ -3487,8 +4747,9 @@ }, "node_modules/@resolver-engine/fs/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ms": "^2.1.1" @@ -3496,8 +4757,9 @@ }, "node_modules/@resolver-engine/imports": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz", + "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==", "dev": true, - "license": "LGPL-3.0-or-later", "peer": true, "dependencies": { "@resolver-engine/core": "^0.3.3", @@ -3509,8 +4771,9 @@ }, "node_modules/@resolver-engine/imports-fs": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz", + "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==", "dev": true, - "license": "LGPL-3.0-or-later", "peer": true, "dependencies": { "@resolver-engine/fs": "^0.3.3", @@ -3520,8 +4783,9 @@ }, "node_modules/@resolver-engine/imports-fs/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ms": "^2.1.1" @@ -3529,22 +4793,64 @@ }, "node_modules/@resolver-engine/imports/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ms": "^2.1.1" } }, - "node_modules/@resolver-engine/imports/node_modules/hosted-git-info": { - "version": "2.8.9", + "node_modules/@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", "dev": true, - "license": "ISC", - "peer": true + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@scure/bip32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", + "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.1.1", + "@noble/secp256k1": "~1.6.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" + } }, "node_modules/@sentry/core": { "version": "5.30.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -3556,13 +4862,11 @@ "node": ">=6" } }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, "node_modules/@sentry/hub": { "version": "5.30.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, "dependencies": { "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", @@ -3572,13 +4876,11 @@ "node": ">=6" } }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, "node_modules/@sentry/minimal": { "version": "5.30.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, "dependencies": { "@sentry/hub": "5.30.0", "@sentry/types": "5.30.0", @@ -3588,13 +4890,11 @@ "node": ">=6" } }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, "node_modules/@sentry/node": { "version": "5.30.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, "dependencies": { "@sentry/core": "5.30.0", "@sentry/hub": "5.30.0", @@ -3610,13 +4910,11 @@ "node": ">=6" } }, - "node_modules/@sentry/node/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, "node_modules/@sentry/tracing": { "version": "5.30.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -3628,20 +4926,20 @@ "node": ">=6" } }, - "node_modules/@sentry/tracing/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, "node_modules/@sentry/types": { "version": "5.30.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, "engines": { "node": ">=6" } }, "node_modules/@sentry/utils": { "version": "5.30.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, "dependencies": { "@sentry/types": "5.30.0", "tslib": "^1.9.3" @@ -3650,71 +4948,103 @@ "node": ">=6" } }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" + "node_modules/@sinclair/typebox": { + "version": "0.24.27", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.27.tgz", + "integrity": "sha512-K7C7IlQ3zLePEZleUN21ceBA2aLcMnLHTLph8QWk1JK37L90obdpY+QGY8bXMKxf1ht1Z0MNewvXxWv0oGDYFg==", + "dev": true }, "node_modules/@sindresorhus/is": { - "version": "0.14.0", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, - "license": "MIT", "peer": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" } }, "node_modules/@solidity-parser/parser": { - "version": "0.14.2", - "license": "MIT", + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", + "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", + "dev": true, "dependencies": { "antlr4ts": "^0.5.0-alpha.4" } }, "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "defer-to-connect": "^1.0.1" + "defer-to-connect": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=14.16" } }, "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/@tsconfig/node10": { "version": "1.0.9", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true }, "node_modules/@tsconfig/node16": { "version": "1.0.3", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true }, "node_modules/@typechain/ethers-v5": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz", + "integrity": "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==", "dev": true, - "license": "MIT", "dependencies": { "lodash": "^4.17.15", "ts-essentials": "^7.0.1" @@ -3730,40 +5060,149 @@ }, "node_modules/@types/abstract-leveldown": { "version": "7.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } }, "node_modules/@types/bignumber.js": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", + "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==", + "deprecated": "This is a stub types definition for bignumber.js (https://github.com/MikeMcl/bignumber.js/). bignumber.js provides its own type definitions, so you don't need @types/bignumber.js installed!", "dev": true, - "license": "MIT", "dependencies": { "bignumber.js": "*" } }, "node_modules/@types/bn.js": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", "dependencies": { "@types/node": "*" } }, + "node_modules/@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, "node_modules/@types/chai": { "version": "4.3.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "dev": true }, "node_modules/@types/chai-as-promised": { "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/chai": "*" } }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true, + "peer": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", + "dev": true, + "peer": true + }, "node_modules/@types/json-schema": { "version": "7.0.11", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", @@ -3771,13 +5210,27 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/level-errors": { "version": "3.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", + "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", + "dev": true }, "node_modules/@types/levelup": { "version": "4.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", + "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", + "dev": true, "dependencies": { "@types/abstract-leveldown": "*", "@types/level-errors": "*", @@ -3786,7 +5239,9 @@ }, "node_modules/@types/lru-cache": { "version": "5.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true }, "node_modules/@types/minimatch": { "version": "3.0.5", @@ -3802,25 +5257,29 @@ }, "node_modules/@types/mkdirp": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", + "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/mocha": { "version": "9.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "dev": true }, "node_modules/@types/node": { - "version": "18.0.1", - "license": "MIT" + "version": "18.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", + "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==" }, "node_modules/@types/node-fetch": { "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "form-data": "^3.0.0" @@ -3840,43 +5299,59 @@ }, "node_modules/@types/pbkdf2": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/prettier": { - "version": "2.6.3", - "dev": true, - "license": "MIT" + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz", + "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==", + "dev": true }, "node_modules/@types/resolve": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", "dev": true, - "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "peer": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/secp256k1": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/sinon": { - "version": "10.0.12", + "version": "10.0.13", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", + "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/sinonjs__fake-timers": "*" } }, "node_modules/@types/sinon-chai": { "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", "dev": true, - "license": "MIT", "dependencies": { "@types/chai": "*", "@types/sinon": "*" @@ -3884,31 +5359,56 @@ }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true }, "node_modules/@types/underscore": { "version": "1.11.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", + "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", + "dev": true }, "node_modules/@types/web3": { "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", + "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", "dev": true, - "license": "MIT", "dependencies": { "@types/bn.js": "*", "@types/underscore": "*" } }, + "node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz", + "integrity": "sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.30.6", - "@typescript-eslint/type-utils": "5.30.6", - "@typescript-eslint/utils": "5.30.6", + "@typescript-eslint/scope-manager": "5.32.0", + "@typescript-eslint/type-utils": "5.32.0", + "@typescript-eslint/utils": "5.32.0", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -3934,13 +5434,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.32.0.tgz", + "integrity": "sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "5.30.6", - "@typescript-eslint/types": "5.30.6", - "@typescript-eslint/typescript-estree": "5.30.6", + "@typescript-eslint/scope-manager": "5.32.0", + "@typescript-eslint/types": "5.32.0", + "@typescript-eslint/typescript-estree": "5.32.0", "debug": "^4.3.4" }, "engines": { @@ -3960,12 +5461,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz", + "integrity": "sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.30.6", - "@typescript-eslint/visitor-keys": "5.30.6" + "@typescript-eslint/types": "5.32.0", + "@typescript-eslint/visitor-keys": "5.32.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3976,11 +5478,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz", + "integrity": "sha512-0gSsIhFDduBz3QcHJIp3qRCvVYbqzHg8D6bHFsDMrm0rURYDj+skBK2zmYebdCp+4nrd9VWd13egvhYFJj/wZg==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "5.30.6", + "@typescript-eslint/utils": "5.32.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -4001,9 +5504,10 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz", + "integrity": "sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4013,12 +5517,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz", + "integrity": "sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "5.30.6", - "@typescript-eslint/visitor-keys": "5.30.6", + "@typescript-eslint/types": "5.32.0", + "@typescript-eslint/visitor-keys": "5.32.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4039,14 +5544,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.32.0.tgz", + "integrity": "sha512-W7lYIAI5Zlc5K082dGR27Fczjb3Q57ECcXefKU/f0ajM5ToM0P+N9NmJWip8GmGu/g6QISNT+K6KYB+iSHjXCQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.6", - "@typescript-eslint/types": "5.30.6", - "@typescript-eslint/typescript-estree": "5.30.6", + "@typescript-eslint/scope-manager": "5.32.0", + "@typescript-eslint/types": "5.32.0", + "@typescript-eslint/typescript-estree": "5.32.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -4062,11 +5568,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz", + "integrity": "sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/types": "5.32.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4079,12 +5586,15 @@ }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true, - "license": "BSD-2-Clause", "peer": true }, "node_modules/abbrev": { @@ -4095,7 +5605,9 @@ }, "node_modules/abort-controller": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, "dependencies": { "event-target-shim": "^5.0.0" }, @@ -4103,9 +5615,16 @@ "node": ">=6.5" } }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", + "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==" + }, "node_modules/abstract-leveldown": { "version": "6.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", + "dev": true, "dependencies": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -4119,8 +5638,9 @@ }, "node_modules/accepts": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "mime-types": "~2.1.34", @@ -4131,9 +5651,10 @@ } }, "node_modules/acorn": { - "version": "8.7.1", - "devOptional": true, - "license": "MIT", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -4143,16 +5664,18 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { "version": "8.2.0", - "devOptional": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, "engines": { "node": ">=0.4.0" } @@ -4165,19 +5688,23 @@ }, "node_modules/adm-zip": { "version": "0.4.16", - "license": "MIT", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, "engines": { "node": ">=0.3.0" } }, "node_modules/aes-js": { "version": "3.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" }, "node_modules/agent-base": { "version": "6.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "dependencies": { "debug": "4" }, @@ -4201,7 +5728,9 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4212,8 +5741,9 @@ }, "node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4227,14 +5757,18 @@ }, "node_modules/ansi-colors": { "version": "4.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -4247,7 +5781,9 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", - "license": "(MIT OR CC0-1.0)", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, "engines": { "node": ">=10" }, @@ -4257,14 +5793,18 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4277,11 +5817,15 @@ }, "node_modules/antlr4ts": { "version": "0.5.0-alpha.4", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true }, "node_modules/anymatch": { "version": "3.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4297,31 +5841,35 @@ "dev": true }, "node_modules/are-we-there-yet": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", - "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "dev": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/arg": { "version": "4.1.3", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, "node_modules/argparse": { "version": "2.0.1", - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/array-back": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -4337,8 +5885,9 @@ }, "node_modules/array-flatten": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/array-ify": { @@ -4349,8 +5898,9 @@ }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -4372,8 +5922,9 @@ }, "node_modules/asn1": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "safer-buffer": "~2.1.0" @@ -4381,8 +5932,9 @@ }, "node_modules/asn1.js": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "bn.js": "^4.0.0", @@ -4393,14 +5945,16 @@ }, "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/assert-plus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.8" @@ -4408,44 +5962,52 @@ }, "node_modules/assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/astral-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/async": { "version": "2.6.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, "dependencies": { "lodash": "^4.17.14" } }, "node_modules/async-eventemitter": { "version": "0.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "dev": true, "dependencies": { "async": "^2.4.0" } }, "node_modules/async-limiter": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/asynckit": { "version": "0.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "node_modules/at-least-node": { "version": "1.0.0", @@ -4458,7 +6020,8 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "engines": { "node": ">= 0.4" }, @@ -4468,8 +6031,9 @@ }, "node_modules/aws-sign2": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, - "license": "Apache-2.0", "peer": true, "engines": { "node": "*" @@ -4477,23 +6041,121 @@ }, "node_modules/aws4": { "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true, - "license": "MIT", "peer": true }, + "node_modules/babel-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", + "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "dev": true, + "dependencies": { + "@jest/transform": "^28.1.3", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.1.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", + "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", + "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^28.1.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base-x": { "version": "3.0.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", "dependencies": { "safe-buffer": "^5.0.1" } }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -4507,13 +6169,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, - "license": "BSD-3-Clause", "peer": true, "dependencies": { "tweetnacl": "^0.14.3" @@ -4521,13 +6183,15 @@ }, "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true, - "license": "Unlicense", "peer": true }, "node_modules/bech32": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, "node_modules/before-after-hook": { "version": "2.2.2", @@ -4537,7 +6201,8 @@ }, "node_modules/bignumber.js": { "version": "9.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", "engines": { "node": "*" } @@ -4559,43 +6224,11 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/bin-links/node_modules/cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", - "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", - "dev": true, - "dependencies": { - "mkdirp-infer-owner": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/bin-links/node_modules/read-cmd-shim": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", - "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/bin-links/node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, "engines": { "node": ">=8" } @@ -4613,22 +6246,26 @@ }, "node_modules/blakejs": { "version": "1.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" }, "node_modules/bluebird": { "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/bn.js": { "version": "5.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "node_modules/body-parser": { "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "bytes": "3.1.2", @@ -4651,8 +6288,9 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ms": "2.0.0" @@ -4660,35 +6298,26 @@ }, "node_modules/body-parser/node_modules/depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.8" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/body-parser/node_modules/qs": { "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, - "license": "BSD-3-Clause", "peer": true, "dependencies": { "side-channel": "^1.0.4" @@ -4702,7 +6331,9 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4710,7 +6341,9 @@ }, "node_modules/braces": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -4720,15 +6353,19 @@ }, "node_modules/brorand": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "node_modules/browser-stdout": { "version": "1.3.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "node_modules/browserify-aes": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -4740,8 +6377,9 @@ }, "node_modules/browserify-cipher": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "browserify-aes": "^1.0.4", @@ -4751,8 +6389,9 @@ }, "node_modules/browserify-des": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "cipher-base": "^1.0.1", @@ -4763,8 +6402,9 @@ }, "node_modules/browserify-rsa": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "bn.js": "^5.0.0", @@ -4773,8 +6413,9 @@ }, "node_modules/browserify-sign": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "bn.js": "^5.1.1", @@ -4788,24 +6429,66 @@ "safe-buffer": "^5.2.0" } }, + "node_modules/browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/bs58": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dependencies": { "base-x": "^3.0.2" } }, "node_modules/bs58check": { "version": "2.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "dependencies": { "bs58": "^4.0.0", "create-hash": "^1.1.0", "safe-buffer": "^5.1.2" } }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, "node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -4820,7 +6503,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -4828,22 +6510,27 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "node_modules/buffer-to-arraybuffer": { "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/buffer-xor": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "node_modules/bufferutil": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -4852,10 +6539,13 @@ } }, "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } }, "node_modules/byte-size": { "version": "7.0.1", @@ -4868,7 +6558,9 @@ }, "node_modules/bytes": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, "engines": { "node": ">= 0.8" } @@ -4931,9 +6623,9 @@ } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", "dev": true, "engines": { "node": ">=12" @@ -4951,31 +6643,42 @@ "node": ">=10" } }, - "node_modules/cacache/node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "minipass": "^3.1.1" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" + } + }, + "node_modules/cacheable-lookup": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz", + "integrity": "sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.6.0" } }, "node_modules/cacheable-request": { - "version": "6.1.0", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", + "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, "engines": { "node": ">=8" @@ -4983,8 +6686,9 @@ }, "node_modules/cacheable-request/node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "pump": "^3.0.0" @@ -4998,17 +6702,9 @@ }, "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "4.5.1", - "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -5016,7 +6712,8 @@ }, "node_modules/call-bind": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -5027,8 +6724,9 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -5059,16 +6757,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001374", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz", + "integrity": "sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, "node_modules/caseless": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true, - "license": "Apache-2.0", "peer": true }, "node_modules/chai": { "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", @@ -5084,8 +6800,9 @@ }, "node_modules/chai-as-promised": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, - "license": "WTFPL", "dependencies": { "check-error": "^1.0.2" }, @@ -5094,8 +6811,10 @@ } }, "node_modules/chalk": { - "version": "4.1.0", - "license": "MIT", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5107,6 +6826,15 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -5115,21 +6843,24 @@ }, "node_modules/check-error": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/chokidar": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5146,6 +6877,18 @@ "fsevents": "~2.3.2" } }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -5157,12 +6900,16 @@ }, "node_modules/ci-info": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, "node_modules/cids": { "version": "0.7.5", + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", + "deprecated": "This module has been superseded by the multiformats module", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "buffer": "^5.5.0", @@ -5178,8 +6925,10 @@ }, "node_modules/cids/node_modules/multicodec": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", + "deprecated": "This module has been superseded by the multiformats module", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "buffer": "^5.6.0", @@ -5188,29 +6937,40 @@ }, "node_modules/cipher-base": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, "node_modules/class-is": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/clean-stack": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, "engines": { "node": ">=6" } }, "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -5232,8 +6992,9 @@ }, "node_modules/cli-truncate": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, - "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^5.0.0" @@ -5247,8 +7008,9 @@ }, "node_modules/cli-truncate/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -5258,13 +7020,15 @@ }, "node_modules/cli-truncate/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/cli-truncate/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -5279,8 +7043,9 @@ }, "node_modules/cli-truncate/node_modules/strip-ansi": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -5302,13 +7067,24 @@ }, "node_modules/cliui": { "version": "7.0.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -5336,38 +7112,61 @@ } }, "node_modules/clone-response": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cmd-shim": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", - "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", + "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", "dev": true, "dependencies": { "mkdirp-infer-owner": "^2.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, "node_modules/code-point-at": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, "node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -5377,7 +7176,9 @@ }, "node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/color-support": { "version": "1.1.3", @@ -5390,8 +7191,9 @@ }, "node_modules/colorette": { "version": "2.0.19", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true }, "node_modules/columnify": { "version": "1.6.0", @@ -5408,8 +7210,9 @@ }, "node_modules/combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -5419,12 +7222,15 @@ }, "node_modules/command-exists": { "version": "1.2.9", - "license": "MIT" + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true }, "node_modules/command-line-args": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -5437,8 +7243,9 @@ }, "node_modules/command-line-usage": { "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^4.0.2", "chalk": "^2.4.2", @@ -5451,8 +7258,9 @@ }, "node_modules/command-line-usage/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -5462,16 +7270,18 @@ }, "node_modules/command-line-usage/node_modules/array-back": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/command-line-usage/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -5483,29 +7293,42 @@ }, "node_modules/command-line-usage/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/command-line-usage/node_modules/color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=0.8.0" + } }, "node_modules/command-line-usage/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/command-line-usage/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -5515,15 +7338,21 @@ }, "node_modules/command-line-usage/node_modules/typical": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/commander": { - "version": "3.0.2", - "license": "MIT" + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", + "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } }, "node_modules/common-ancestor-path": { "version": "1.0.1", @@ -5553,9 +7382,25 @@ "node": ">=8" } }, + "node_modules/compress-brotli": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", + "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-buffer": "~3.0.0", + "json-buffer": "~3.0.1" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/concat-map": { "version": "0.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/concat-stream": { "version": "2.0.0", @@ -5590,8 +7435,9 @@ }, "node_modules/content-disposition": { "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "safe-buffer": "5.2.1" @@ -5602,8 +7448,9 @@ }, "node_modules/content-hash": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "cids": "^0.7.1", @@ -5613,8 +7460,9 @@ }, "node_modules/content-type": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.6" @@ -5754,42 +7602,59 @@ "node": ">=10" } }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/cookie": { "version": "0.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true, - "license": "MIT", "peer": true }, - "node_modules/cookiejar": { - "version": "2.1.3", - "license": "MIT" - }, "node_modules/core-js-pure": { - "version": "3.23.3", + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.1.tgz", + "integrity": "sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg==", + "dev": true, "hasInstallScript": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, "node_modules/cors": { "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "object-assign": "^4", @@ -5817,7 +7682,9 @@ }, "node_modules/crc-32": { "version": "1.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, "bin": { "crc32": "bin/crc32.njs" }, @@ -5827,8 +7694,9 @@ }, "node_modules/create-ecdh": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "bn.js": "^4.1.0", @@ -5837,13 +7705,15 @@ }, "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/create-hash": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -5854,7 +7724,8 @@ }, "node_modules/create-hmac": { "version": "1.1.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -5866,13 +7737,23 @@ }, "node_modules/create-require": { "version": "1.1.1", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } }, "node_modules/cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5884,8 +7765,9 @@ }, "node_modules/crypto-browserify": { "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "browserify-cipher": "^1.0.0", @@ -5906,7 +7788,8 @@ }, "node_modules/d": { "version": "1.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dependencies": { "es5-ext": "^0.10.50", "type": "^1.0.1" @@ -5923,8 +7806,9 @@ }, "node_modules/dashdash": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "assert-plus": "^1.0.0" @@ -5944,7 +7828,9 @@ }, "node_modules/debug": { "version": "4.3.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -5968,8 +7854,9 @@ }, "node_modules/decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5998,23 +7885,41 @@ }, "node_modules/decode-uri-component": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10" } }, "node_modules/decompress-response": { - "version": "3.3.0", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "mimic-response": "^1.0.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/dedent": { @@ -6025,8 +7930,9 @@ }, "node_modules/deep-eql": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, - "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -6036,16 +7942,27 @@ }, "node_modules/deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/deep-is": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=0.10.0" + } }, "node_modules/defaults": { "version": "1.0.3", @@ -6056,24 +7973,21 @@ "clone": "^1.0.2" } }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, + "peer": true, "engines": { - "node": ">=0.8" + "node": ">=10" } }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/deferred-leveldown": { "version": "5.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "dev": true, "dependencies": { "abstract-leveldown": "~6.2.1", "inherits": "^2.0.3" @@ -6084,7 +7998,9 @@ }, "node_modules/deferred-leveldown/node_modules/abstract-leveldown": { "version": "6.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, "dependencies": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -6107,7 +8023,8 @@ }, "node_modules/define-properties": { "version": "1.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -6121,8 +8038,9 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -6150,8 +8068,9 @@ }, "node_modules/des.js": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "inherits": "^2.0.1", @@ -6160,8 +8079,9 @@ }, "node_modules/destroy": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.8", @@ -6177,6 +8097,15 @@ "node": ">=8" } }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/dezalgo": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", @@ -6189,15 +8118,27 @@ }, "node_modules/diff": { "version": "5.0.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, "engines": { "node": ">=0.3.1" } }, + "node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/diffie-hellman": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "bn.js": "^4.1.0", @@ -6207,14 +8148,16 @@ }, "node_modules/diffie-hellman/node_modules/bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -6224,8 +8167,9 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -6235,6 +8179,8 @@ }, "node_modules/dom-walk": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", "dev": true, "peer": true }, @@ -6270,19 +8216,22 @@ }, "node_modules/duplexer3": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", "dev": true, - "license": "BSD-3-Clause", "peer": true }, "node_modules/eastasianwidth": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/ecc-jsbn": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "jsbn": "~0.1.0", @@ -6291,13 +8240,21 @@ }, "node_modules/ee-first": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true, - "license": "MIT", "peer": true }, + "node_modules/electron-to-chromium": { + "version": "1.4.211", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.211.tgz", + "integrity": "sha512-BZSbMpyFQU0KBJ1JG26XGeFI3i4op+qOYGxftmZXFZoHkhLgsSv4DHDJfl8ogII3hIuzGt51PaZ195OVu0yJ9A==", + "dev": true + }, "node_modules/elliptic": { "version": "6.5.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -6310,16 +8267,32 @@ }, "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } }, "node_modules/emoji-regex": { "version": "8.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/encodeurl": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.8" @@ -6327,7 +8300,8 @@ }, "node_modules/encoding": { "version": "0.1.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -6335,7 +8309,9 @@ }, "node_modules/encoding-down": { "version": "6.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "dev": true, "dependencies": { "abstract-leveldown": "^6.2.1", "inherits": "^2.0.3", @@ -6346,17 +8322,32 @@ "node": ">=6" } }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enquirer": { "version": "2.3.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, "dependencies": { "ansi-colors": "^4.1.1" }, @@ -6366,7 +8357,9 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, "engines": { "node": ">=6" } @@ -6391,7 +8384,9 @@ }, "node_modules/errno": { "version": "0.1.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, "dependencies": { "prr": "~1.0.1" }, @@ -6401,15 +8396,17 @@ }, "node_modules/error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { "version": "1.20.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -6444,7 +8441,8 @@ }, "node_modules/es-to-primitive": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -6458,9 +8456,10 @@ } }, "node_modules/es5-ext": { - "version": "0.10.61", + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "hasInstallScript": true, - "license": "ISC", "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -6472,16 +8471,23 @@ }, "node_modules/es6-iterator": { "version": "2.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dependencies": { "d": "1", "es5-ext": "^0.10.35", "es6-symbol": "^3.1.1" } }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, "node_modules/es6-symbol": { "version": "3.1.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dependencies": { "d": "^1.0.1", "ext": "^1.1.2" @@ -6489,31 +8495,41 @@ }, "node_modules/escalade": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { - "version": "8.19.0", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", + "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", "dev": true, - "license": "MIT", "dependencies": { "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -6523,14 +8539,17 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.3.3", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -6560,8 +8579,9 @@ }, "node_modules/eslint-config-prettier": { "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true, - "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -6571,8 +8591,9 @@ }, "node_modules/eslint-plugin-prettier": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, - "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0" }, @@ -6591,8 +8612,9 @@ }, "node_modules/eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -6603,8 +8625,9 @@ }, "node_modules/eslint-utils": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -6620,35 +8643,27 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -6659,51 +8674,48 @@ }, "node_modules/eslint/node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", + "node_modules/espree": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", "dev": true, - "license": "ISC", "dependencies": { - "is-glob": "^4.0.3" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "engines": { - "node": "*" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/espree": { - "version": "9.3.2", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=4" } }, "node_modules/esquery": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -6713,16 +8725,18 @@ }, "node_modules/esquery/node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -6732,32 +8746,36 @@ }, "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.6" @@ -6765,8 +8783,9 @@ }, "node_modules/eth-ens-namehash": { "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "idna-uts46-hx": "^2.3.1", @@ -6775,14 +8794,16 @@ }, "node_modules/eth-ens-namehash/node_modules/js-sha3": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/eth-lib": { "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "bn.js": "^4.11.6", @@ -6795,20 +8816,23 @@ }, "node_modules/eth-lib/node_modules/bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/eth-lib/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/eth-lib/node_modules/ws": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "async-limiter": "~1.0.0", @@ -6818,14 +8842,16 @@ }, "node_modules/ethereum-bloom-filters": { "version": "1.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", "dependencies": { "js-sha3": "^0.8.0" } }, "node_modules/ethereum-cryptography": { "version": "0.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -6846,8 +8872,9 @@ }, "node_modules/ethereum-waffle": { "version": "3.4.4", + "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz", + "integrity": "sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@ethereum-waffle/chai": "^3.4.4", @@ -6865,7 +8892,9 @@ }, "node_modules/ethereumjs-abi": { "version": "0.6.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dev": true, "dependencies": { "bn.js": "^4.11.8", "ethereumjs-util": "^6.0.0" @@ -6873,18 +8902,24 @@ }, "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { "version": "4.11.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/ethereumjs-abi/node_modules/bn.js": { "version": "4.12.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { "version": "6.2.1", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, "dependencies": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -6897,7 +8932,8 @@ }, "node_modules/ethereumjs-util": { "version": "7.1.5", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -6911,7 +8947,8 @@ }, "node_modules/ethers": { "version": "5.6.9", - "dev": true, + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", + "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", "funding": [ { "type": "individual", @@ -6922,7 +8959,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abi": "5.6.4", "@ethersproject/abstract-provider": "5.6.1", @@ -6958,7 +8994,8 @@ }, "node_modules/ethjs-unit": { "version": "0.1.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", "dependencies": { "bn.js": "4.11.6", "number-to-bn": "1.7.0" @@ -6970,11 +9007,14 @@ }, "node_modules/ethjs-unit/node_modules/bn.js": { "version": "4.11.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" }, "node_modules/ethjs-util": { "version": "0.1.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, "dependencies": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" @@ -6986,7 +9026,9 @@ }, "node_modules/event-target-shim": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, "engines": { "node": ">=6" } @@ -6999,7 +9041,8 @@ }, "node_modules/evp_bytestokey": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -7007,8 +9050,9 @@ }, "node_modules/execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -7027,10 +9071,36 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/express": { "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "accepts": "~1.3.8", @@ -7071,8 +9141,9 @@ }, "node_modules/express/node_modules/cookie": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.6" @@ -7080,8 +9151,9 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ms": "2.0.0" @@ -7089,8 +9161,9 @@ }, "node_modules/express/node_modules/depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.8" @@ -7098,14 +9171,16 @@ }, "node_modules/express/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/express/node_modules/qs": { "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, - "license": "BSD-3-Clause", "peer": true, "dependencies": { "side-channel": "^1.0.4" @@ -7119,19 +9194,22 @@ }, "node_modules/ext": { "version": "1.6.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", "dependencies": { "type": "^2.5.0" } }, "node_modules/ext/node_modules/type": { - "version": "2.6.0", - "license": "ISC" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.0.tgz", + "integrity": "sha512-NybX0NBIssNEj1efLf1mqKAtO4Q/Np5mqpa57be81ud7/tNHIXn48FDVXiyGMBF90FfXc5o7RPsuRQrPzgMOMA==" }, "node_modules/extend": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/external-editor": { @@ -7148,53 +9226,32 @@ "node": ">=4" } }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/extsprintf": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true, "engines": [ "node >=0.6.0" ], - "license": "MIT", "peer": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-diff": { "version": "1.2.0", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true }, "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -7204,27 +9261,51 @@ "micromatch": "^4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fastq": { "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -7240,10 +9321,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -7253,7 +9344,9 @@ }, "node_modules/fill-range": { "version": "7.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -7263,8 +9356,9 @@ }, "node_modules/finalhandler": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "debug": "2.6.9", @@ -7281,8 +9375,9 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ms": "2.0.0" @@ -7290,14 +9385,16 @@ }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/find-replace": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^3.0.1" }, @@ -7306,22 +9403,26 @@ } }, "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/find-yarn-workspace-root": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "micromatch": "^4.0.2" @@ -7329,15 +9430,18 @@ }, "node_modules/flat": { "version": "5.0.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -7348,18 +9452,21 @@ }, "node_modules/flatted": { "version": "3.2.6", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true }, "node_modules/follow-redirects": { "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "dev": true, "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "engines": { "node": ">=4.0" }, @@ -7371,15 +9478,17 @@ }, "node_modules/for-each": { "version": "0.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/forever-agent": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true, - "license": "Apache-2.0", "peer": true, "engines": { "node": "*" @@ -7387,8 +9496,9 @@ }, "node_modules/form-data": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -7398,10 +9508,18 @@ "node": ">= 6" } }, + "node_modules/form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", + "dev": true, + "peer": true + }, "node_modules/forwarded": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.6" @@ -7409,12 +9527,15 @@ }, "node_modules/fp-ts": { "version": "1.19.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true }, "node_modules/fresh": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.6" @@ -7427,18 +9548,17 @@ "dev": true }, "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=6 <7 || >=8" } }, "node_modules/fs-minipass": { @@ -7455,11 +9575,16 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -7470,11 +9595,13 @@ }, "node_modules/function-bind": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { "version": "1.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -7490,22 +9617,28 @@ }, "node_modules/functional-red-black-tree": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true }, "node_modules/functions-have-names": { "version": "1.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ganache-core": { "version": "2.13.2", + "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", + "integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==", "bundleDependencies": [ "keccak" ], + "deprecated": "ganache-core is now ganache; visit https://trfl.io/g7 for details", "dev": true, - "license": "MIT", + "hasShrinkwrap": true, "peer": true, "dependencies": { "abstract-leveldown": "3.0.0", @@ -10111,6 +12244,16 @@ "node": ">=0.4.0" } }, + "node_modules/ganache-core/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/ganache-core/node_modules/des.js": { "version": "1.0.1", "dev": true, @@ -13315,12 +15458,27 @@ "node": ">=0.10.0" } }, + "node_modules/ganache-core/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/ganache-core/node_modules/isexe": { "version": "2.0.0", "dev": true, "license": "ISC", "peer": true }, + "node_modules/ganache-core/node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ganache-core/node_modules/isstream": { "version": "0.1.2", "dev": true, @@ -13348,6 +15506,12 @@ "optional": true, "peer": true }, + "node_modules/ganache-core/node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/ganache-core/node_modules/jsbn": { "version": "0.1.1", "dev": true, @@ -13471,6 +15635,15 @@ "json-buffer": "3.0.0" } }, + "node_modules/ganache-core/node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ganache-core/node_modules/klaw-sync": { "version": "6.0.0", "dev": true, @@ -14404,6 +16577,16 @@ "node": ">=4" } }, + "node_modules/ganache-core/node_modules/p-timeout/node_modules/p-finally": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/ganache-core/node_modules/parse-asn1": { "version": "5.1.6", "dev": true, @@ -14646,6 +16829,12 @@ "node": ">= 0.6.0" } }, + "node_modules/ganache-core/node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/ganache-core/node_modules/promise-to-callback": { "version": "1.0.0", "dev": true, @@ -15674,11 +17863,6 @@ "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, "engines": { "node": ">=0.10.0" } @@ -16312,6 +18496,12 @@ "node": ">= 0.6" } }, + "node_modules/ganache-core/node_modules/typedarray": { + "version": "0.0.6", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/ganache-core/node_modules/typedarray-to-buffer": { "version": "3.1.5", "dev": true, @@ -16939,7 +19129,7 @@ "cross-fetch": "^2.1.0", "eth-block-tracker": "^3.0.0", "eth-json-rpc-infura": "^3.1.0", - "eth-sig-util": "^1.4.2", + "eth-sig-util": "3.0.0", "ethereumjs-block": "^1.2.2", "ethereumjs-tx": "^1.2.0", "ethereumjs-util": "^5.1.5", @@ -17537,24 +19727,37 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-func-name": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/get-intrinsic": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -17564,6 +19767,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/get-pkg-repo": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", @@ -17582,6 +19794,30 @@ "node": ">=6.9.0" } }, + "node_modules/get-pkg-repo/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/get-pkg-repo/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -17622,6 +19858,30 @@ "xtend": "~4.0.1" } }, + "node_modules/get-pkg-repo/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/get-port": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", @@ -17636,8 +19896,9 @@ }, "node_modules/get-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -17647,7 +19908,8 @@ }, "node_modules/get-symbol-description": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -17661,8 +19923,9 @@ }, "node_modules/getpass": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "assert-plus": "^1.0.0" @@ -17763,8 +20026,10 @@ } }, "node_modules/glob": { - "version": "7.1.4", - "license": "ISC", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -17775,22 +20040,28 @@ }, "engines": { "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { - "version": "5.1.2", - "license": "ISC", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/global": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "min-document": "^2.19.0", @@ -17798,9 +20069,10 @@ } }, "node_modules/globals": { - "version": "13.16.0", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -17811,21 +20083,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -17841,62 +20103,51 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby/node_modules/fast-glob": { - "version": "3.2.11", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=8.6.0" - } - }, "node_modules/got": { - "version": "9.6.0", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", + "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "@sindresorhus/is": "^4.6.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^2.0.0" }, "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "pump": "^3.0.0" + "node": ">=14.16" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, "node_modules/graceful-fs": { "version": "4.2.10", - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true }, "node_modules/growl": { "version": "1.10.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, "engines": { "node": ">=4.x" } @@ -17924,8 +20175,9 @@ }, "node_modules/har-schema": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true, - "license": "ISC", "peer": true, "engines": { "node": ">=4" @@ -17933,8 +20185,10 @@ }, "node_modules/har-validator": { "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ajv": "^6.12.3", @@ -17954,8 +20208,10 @@ } }, "node_modules/hardhat": { - "version": "2.9.9", - "license": "MIT", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.10.1.tgz", + "integrity": "sha512-0FN9TyCtn7Lt25SB2ei2G7nA2rZjP+RN6MvFOm+zYwherxLZNo6RbD8nDz88eCbhRapevmXqOiL2nM8INKsjmA==", + "dev": true, "dependencies": { "@ethereumjs/block": "^3.6.2", "@ethereumjs/blockchain": "^5.5.2", @@ -17965,7 +20221,7 @@ "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", "@sentry/node": "^5.18.1", - "@solidity-parser/parser": "^0.14.1", + "@solidity-parser/parser": "^0.14.2", "@types/bn.js": "^5.1.0", "@types/lru-cache": "^5.1.0", "abort-controller": "^3.0.0", @@ -17978,7 +20234,7 @@ "debug": "^4.1.1", "enquirer": "^2.3.0", "env-paths": "^2.2.0", - "ethereum-cryptography": "^0.1.2", + "ethereum-cryptography": "^1.0.3", "ethereumjs-abi": "^0.6.8", "ethereumjs-util": "^7.1.4", "find-up": "^2.1.0", @@ -17990,7 +20246,7 @@ "lodash": "^4.17.11", "merkle-patricia-tree": "^4.2.4", "mnemonist": "^0.38.0", - "mocha": "^9.2.0", + "mocha": "^10.0.0", "p-map": "^4.0.0", "qs": "^6.7.0", "raw-body": "^2.4.1", @@ -18010,7 +20266,7 @@ "hardhat": "internal/cli/cli.js" }, "engines": { - "node": "^12.0.0 || ^14.0.0 || ^16.0.0" + "node": "^14.0.0 || ^16.0.0 || ^18.0.0" }, "peerDependencies": { "ts-node": "*", @@ -18025,9 +20281,20 @@ } } }, + "node_modules/hardhat/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/hardhat/node_modules/ansi-styles": { "version": "3.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -18035,9 +20302,20 @@ "node": ">=4" } }, + "node_modules/hardhat/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/hardhat/node_modules/chalk": { "version": "2.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -18047,20 +20325,53 @@ "node": ">=4" } }, + "node_modules/hardhat/node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/hardhat/node_modules/color-convert": { "version": "1.9.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/hardhat/node_modules/color-name": { "version": "1.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/hardhat/node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true + }, + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } }, "node_modules/hardhat/node_modules/find-up": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, "dependencies": { "locate-path": "^2.0.0" }, @@ -18068,64 +20379,189 @@ "node": ">=4" } }, - "node_modules/hardhat/node_modules/fs-extra": { - "version": "7.0.1", - "license": "MIT", + "node_modules/hardhat/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/hardhat/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=4" } }, - "node_modules/hardhat/node_modules/glob": { - "version": "7.2.0", - "license": "ISC", + "node_modules/hardhat/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=10" + } + }, + "node_modules/hardhat/node_modules/mocha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, - "node_modules/hardhat/node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", + "node_modules/hardhat/node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hardhat/node_modules/jsonfile": { + "node_modules/hardhat/node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hardhat/node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hardhat/node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hardhat/node_modules/mocha/node_modules/path-exists": { "version": "4.0.0", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/hardhat/node_modules/locate-path": { - "version": "2.0.0", - "license": "MIT", + "node_modules/hardhat/node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/hardhat/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/hardhat/node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "node_modules/hardhat/node_modules/p-limit": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, "dependencies": { "p-try": "^1.0.0" }, @@ -18135,7 +20571,9 @@ }, "node_modules/hardhat/node_modules/p-locate": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, "dependencies": { "p-limit": "^1.1.0" }, @@ -18145,38 +20583,93 @@ }, "node_modules/hardhat/node_modules/p-try": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, "engines": { "node": ">=4" } }, "node_modules/hardhat/node_modules/path-exists": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, "engines": { "node": ">=4" } }, - "node_modules/hardhat/node_modules/resolve": { - "version": "1.17.0", - "license": "MIT", + "node_modules/hardhat/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "dependencies": { - "path-parse": "^1.0.6" + "glob": "^7.1.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "rimraf": "bin.js" } }, "node_modules/hardhat/node_modules/semver": { "version": "6.3.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } }, + "node_modules/hardhat/node_modules/solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "dev": true, + "dependencies": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solcjs" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/hardhat/node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/hardhat/node_modules/solc/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/hardhat/node_modules/supports-color": { "version": "5.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -18184,16 +20677,43 @@ "node": ">=4" } }, - "node_modules/hardhat/node_modules/universalify": { - "version": "0.1.2", - "license": "MIT", + "node_modules/hardhat/node_modules/supports-color/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "node_modules/hardhat/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, "node_modules/has": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dependencies": { "function-bind": "^1.1.1" }, @@ -18203,21 +20723,25 @@ }, "node_modules/has-bigints": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } }, "node_modules/has-property-descriptors": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -18227,8 +20751,9 @@ }, "node_modules/has-symbol-support-x": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": "*" @@ -18236,7 +20761,8 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, @@ -18246,8 +20772,9 @@ }, "node_modules/has-to-string-tag-x": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "has-symbol-support-x": "^1.4.1" @@ -18258,7 +20785,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dependencies": { "has-symbols": "^1.0.2" }, @@ -18277,7 +20805,8 @@ }, "node_modules/hash-base": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -18289,7 +20818,8 @@ }, "node_modules/hash.js": { "version": "1.1.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -18297,14 +20827,17 @@ }, "node_modules/he": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, "bin": { "he": "bin/he" } }, "node_modules/hmac-drbg": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -18312,25 +20845,28 @@ } }, "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "node_modules/http-cache-semantics": { "version": "4.1.0", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true }, "node_modules/http-errors": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -18344,22 +20880,25 @@ }, "node_modules/http-errors/node_modules/depd": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/http-https": { "version": "1.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" }, "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "dependencies": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" }, @@ -18369,8 +20908,9 @@ }, "node_modules/http-signature": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "assert-plus": "^1.0.0", @@ -18382,9 +20922,38 @@ "npm": ">=1.3.7" } }, + "node_modules/http2-wrapper": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz", + "integrity": "sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ==", + "dev": true, + "peer": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -18395,8 +20964,9 @@ }, "node_modules/human-signals": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -18412,8 +20982,9 @@ }, "node_modules/husky": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", "dev": true, - "license": "MIT", "bin": { "husky": "lib/bin.js" }, @@ -18425,11 +20996,12 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "license": "MIT", - "optional": true, + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" @@ -18437,8 +21009,9 @@ }, "node_modules/idna-uts46-hx": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "punycode": "2.1.0" @@ -18447,17 +21020,11 @@ "node": ">=4.0.0" } }, - "node_modules/idna-uts46-hx/node_modules/punycode": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -18471,38 +21038,67 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", "dev": true, "dependencies": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, "node_modules/immediate": { "version": "3.3.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true }, "node_modules/immutable": { "version": "4.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true }, "node_modules/import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -18514,14 +21110,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -18543,15 +21131,18 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, "engines": { "node": ">=8" } @@ -18564,7 +21155,9 @@ }, "node_modules/inflight": { "version": "1.0.6", - "license": "ISC", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -18572,7 +21165,8 @@ }, "node_modules/inherits": { "version": "2.0.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", @@ -18581,65 +21175,89 @@ "dev": true }, "node_modules/init-package-json": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.5.tgz", - "integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz", + "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", "dev": true, "dependencies": { - "npm-package-arg": "^8.1.5", + "npm-package-arg": "^9.0.1", "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^4.1.1", + "read": "^1.0.7", + "read-package-json": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/init-package-json/node_modules/read-package-json": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", - "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", + "node_modules/init-package-json/node_modules/hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", "dev": true, "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" + "lru-cache": "^7.5.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/init-package-json/node_modules/lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/init-package-json/node_modules/npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", + "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", - "lodash": "^4.17.19", + "lodash": "^4.17.21", "mute-stream": "0.0.8", + "ora": "^5.4.1", "run-async": "^2.4.0", - "rxjs": "^6.6.0", + "rxjs": "^7.5.5", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=12.0.0" } }, "node_modules/internal-slot": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -18651,8 +21269,9 @@ }, "node_modules/invert-kv": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -18660,21 +21279,24 @@ }, "node_modules/io-ts": { "version": "1.10.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, "dependencies": { "fp-ts": "^1.0.0" } }, "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, "node_modules/ipaddr.js": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.10" @@ -18682,7 +21304,8 @@ }, "node_modules/is-arguments": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -18696,12 +21319,14 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "node_modules/is-bigint": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dependencies": { "has-bigints": "^1.0.1" }, @@ -18711,7 +21336,9 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -18721,7 +21348,8 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -18735,7 +21363,8 @@ }, "node_modules/is-callable": { "version": "1.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "engines": { "node": ">= 0.4" }, @@ -18745,8 +21374,9 @@ }, "node_modules/is-ci": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, - "license": "MIT", "dependencies": { "ci-info": "^2.0.0" }, @@ -18755,9 +21385,10 @@ } }, "node_modules/is-core-module": { - "version": "2.9.0", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, - "license": "MIT", "dependencies": { "has": "^1.0.3" }, @@ -18767,7 +21398,8 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -18780,8 +21412,9 @@ }, "node_modules/is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -18794,27 +21427,45 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-function": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", "dev": true, - "license": "MIT", "peer": true }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/is-generator-function": { "version": "1.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -18827,7 +21478,9 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -18837,12 +21490,22 @@ }, "node_modules/is-hex-prefixed": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", "engines": { "node": ">=6.5.0", "npm": ">=3" } }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", @@ -18851,7 +21514,8 @@ }, "node_modules/is-negative-zero": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "engines": { "node": ">= 0.4" }, @@ -18861,14 +21525,17 @@ }, "node_modules/is-number": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -18890,8 +21557,9 @@ }, "node_modules/is-object": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "dev": true, - "license": "MIT", "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -18899,8 +21567,9 @@ }, "node_modules/is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -18916,7 +21585,8 @@ }, "node_modules/is-regex": { "version": "1.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -18930,8 +21600,9 @@ }, "node_modules/is-retry-allowed": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -18939,7 +21610,8 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dependencies": { "call-bind": "^1.0.2" }, @@ -18958,8 +21630,9 @@ }, "node_modules/is-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -18969,7 +21642,8 @@ }, "node_modules/is-string": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -18982,7 +21656,8 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dependencies": { "has-symbols": "^1.0.2" }, @@ -19007,7 +21682,8 @@ }, "node_modules/is-typed-array": { "version": "1.1.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -19024,11 +21700,14 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "engines": { "node": ">=10" }, @@ -19038,19 +21717,22 @@ }, "node_modules/is-url": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/is-utf8": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/is-weakref": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dependencies": { "call-bind": "^1.0.2" }, @@ -19060,8 +21742,9 @@ }, "node_modules/is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, - "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -19077,7 +21760,9 @@ }, "node_modules/isexe": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/isobject": { "version": "3.0.1", @@ -19090,14 +21775,91 @@ }, "node_modules/isstream": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true, - "license": "MIT", "peer": true }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isurl": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "has-to-string-tag-x": "^1.2.0", @@ -19107,9 +21869,578 @@ "node": ">= 4" } }, + "node_modules/jest-changed-files": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", + "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", + "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "p-limit": "^3.1.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-cli": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", + "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "dev": true, + "dependencies": { + "@jest/core": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", + "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.3", + "@jest/types": "^28.1.3", + "babel-jest": "^28.1.3", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.3", + "jest-environment-node": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "node_modules/jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", + "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.3", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", + "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", + "dev": true, + "dependencies": { + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-mock": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", + "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", + "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", + "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve/node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jest-runner": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", + "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/environment": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-leak-detector": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-resolve": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-util": "^28.1.3", + "jest-watcher": "^28.1.3", + "jest-worker": "^28.1.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runtime": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", + "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/globals": "^28.1.3", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", + "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "natural-compare": "^1.4.0", + "pretty-format": "^28.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-util/node_modules/ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "node_modules/jest-validate": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", + "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/js-sha3": { "version": "0.8.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, "node_modules/js-tokens": { "version": "4.0.0", @@ -19119,7 +22450,9 @@ }, "node_modules/js-yaml": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -19129,14 +22462,28 @@ }, "node_modules/jsbn": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true, - "license": "MIT", "peer": true }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { - "version": "3.0.0", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/json-parse-better-errors": { @@ -19153,19 +22500,22 @@ }, "node_modules/json-schema": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true, - "license": "(AFL-2.1 OR BSD-3-Clause)", "peer": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json-stringify-nice": { "version": "1.1.4", @@ -19178,19 +22528,20 @@ }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true }, "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, "bin": { "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/jsonc-parser": { @@ -19200,13 +22551,10 @@ "dev": true }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -19238,8 +22586,9 @@ }, "node_modules/jsprim": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "assert-plus": "1.0.0", @@ -19265,8 +22614,9 @@ }, "node_modules/keccak": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -19276,17 +22626,15 @@ "node": ">=10.0.0" } }, - "node_modules/keccak/node_modules/node-addon-api": { - "version": "2.0.2", - "license": "MIT" - }, "node_modules/keyv": { - "version": "3.1.0", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.3.tgz", + "integrity": "sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "json-buffer": "3.0.0" + "compress-brotli": "^1.3.8", + "json-buffer": "3.0.1" } }, "node_modules/kind-of": { @@ -19300,24 +22648,37 @@ }, "node_modules/klaw": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.9" } }, "node_modules/klaw-sync": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.1.11" } }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/lcid": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "invert-kv": "^1.0.0" @@ -19327,29 +22688,30 @@ } }, "node_modules/lerna": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.1.8.tgz", - "integrity": "sha512-KrpFx2l1x1X7wb9unqRU7OZTaNs5+67VQ1vxf8fIMgdtCAjEqkLxF/F3xLs+KBMws5PV19Q9YtPHn7SiwDl7iQ==", - "dev": true, - "dependencies": { - "@lerna/add": "5.1.8", - "@lerna/bootstrap": "5.1.8", - "@lerna/changed": "5.1.8", - "@lerna/clean": "5.1.8", - "@lerna/cli": "5.1.8", - "@lerna/create": "5.1.8", - "@lerna/diff": "5.1.8", - "@lerna/exec": "5.1.8", - "@lerna/import": "5.1.8", - "@lerna/info": "5.1.8", - "@lerna/init": "5.1.8", - "@lerna/link": "5.1.8", - "@lerna/list": "5.1.8", - "@lerna/publish": "5.1.8", - "@lerna/run": "5.1.8", - "@lerna/version": "5.1.8", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.3.0.tgz", + "integrity": "sha512-0Y9xJqleVu0ExGmsw2WM/GkVmxOwtA7OLQFS5ERPKJfnsxH9roTX3a7NPaGQRI2E+tSJLJJGgNSf3WYEqinOqA==", + "dev": true, + "dependencies": { + "@lerna/add": "5.3.0", + "@lerna/bootstrap": "5.3.0", + "@lerna/changed": "5.3.0", + "@lerna/clean": "5.3.0", + "@lerna/cli": "5.3.0", + "@lerna/create": "5.3.0", + "@lerna/diff": "5.3.0", + "@lerna/exec": "5.3.0", + "@lerna/import": "5.3.0", + "@lerna/info": "5.3.0", + "@lerna/init": "5.3.0", + "@lerna/link": "5.3.0", + "@lerna/list": "5.3.0", + "@lerna/publish": "5.3.0", + "@lerna/run": "5.3.0", + "@lerna/version": "5.3.0", "import-local": "^3.0.2", - "npmlog": "^6.0.2" + "npmlog": "^6.0.2", + "nx": ">=14.4.3 < 16" }, "bin": { "lerna": "cli.js" @@ -19360,7 +22722,9 @@ }, "node_modules/level-codec": { "version": "9.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, "dependencies": { "buffer": "^5.6.0" }, @@ -19370,14 +22734,18 @@ }, "node_modules/level-concat-iterator": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true, "engines": { "node": ">=6" } }, "node_modules/level-errors": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dev": true, "dependencies": { "errno": "~0.1.1" }, @@ -19387,7 +22755,9 @@ }, "node_modules/level-iterator-stream": { "version": "4.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "dev": true, "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.4.0", @@ -19399,7 +22769,9 @@ }, "node_modules/level-mem": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", + "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", + "dev": true, "dependencies": { "level-packager": "^5.0.3", "memdown": "^5.0.0" @@ -19410,7 +22782,9 @@ }, "node_modules/level-packager": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "dev": true, "dependencies": { "encoding-down": "^6.3.0", "levelup": "^4.3.2" @@ -19421,7 +22795,9 @@ }, "node_modules/level-supports": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, "dependencies": { "xtend": "^4.0.2" }, @@ -19431,7 +22807,9 @@ }, "node_modules/level-ws": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "readable-stream": "^3.1.0", @@ -19443,7 +22821,9 @@ }, "node_modules/levelup": { "version": "4.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "dev": true, "dependencies": { "deferred-leveldown": "~5.3.0", "level-errors": "~2.0.0", @@ -19455,10 +22835,20 @@ "node": ">=6" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -19468,74 +22858,128 @@ } }, "node_modules/libnpmaccess": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", - "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.3.tgz", + "integrity": "sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg==", "dev": true, "dependencies": { "aproba": "^2.0.0", "minipass": "^3.1.1", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0" + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/libnpmaccess/node_modules/npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "node_modules/libnpmaccess/node_modules/hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", "dev": true, "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "lru-cache": "^7.5.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/libnpmaccess/node_modules/lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/libnpmaccess/node_modules/npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/libnpmpublish": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", - "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.4.tgz", + "integrity": "sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg==", "dev": true, "dependencies": { - "normalize-package-data": "^3.0.2", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0", - "semver": "^7.1.3", - "ssri": "^8.0.1" + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", + "semver": "^7.3.7", + "ssri": "^9.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/libnpmpublish/node_modules/npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "node_modules/libnpmpublish/node_modules/hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", "dev": true, "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "lru-cache": "^7.5.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/libnpmpublish/node_modules/lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/libnpmpublish/node_modules/normalize-package-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", + "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", + "dev": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/libnpmpublish/node_modules/npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/lilconfig": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } @@ -19548,8 +22992,9 @@ }, "node_modules/lint-staged": { "version": "12.5.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz", + "integrity": "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==", "dev": true, - "license": "MIT", "dependencies": { "cli-truncate": "^3.1.0", "colorette": "^2.0.16", @@ -19576,18 +23021,11 @@ "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/commander": { - "version": "9.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, "node_modules/lint-staged/node_modules/supports-color": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", + "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -19597,8 +23035,9 @@ }, "node_modules/listr2": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", "dev": true, - "license": "MIT", "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -19623,8 +23062,9 @@ }, "node_modules/listr2/node_modules/cli-truncate": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, - "license": "MIT", "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -19636,18 +23076,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr2/node_modules/rxjs": { - "version": "7.5.6", + "node_modules/listr2/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" + "engines": { + "node": ">=8" } }, "node_modules/listr2/node_modules/slice-ansi": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -19672,32 +23114,48 @@ "node": ">=8" } }, + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { "version": "4.17.21", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.assign": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true }, "node_modules/lodash.ismatch": { "version": "4.4.0", @@ -19707,12 +23165,15 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -19726,8 +23187,9 @@ }, "node_modules/log-update": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -19741,10 +23203,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -19759,8 +23231,9 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -19772,38 +23245,46 @@ }, "node_modules/loupe": { "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.0" } }, "node_modules/lowercase-keys": { - "version": "1.0.1", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lru_map": { "version": "0.3.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true }, "node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "yallist": "^3.0.2" } }, "node_modules/ltgt": { "version": "2.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "dev": true }, "node_modules/make-dir": { "version": "3.1.0", @@ -19831,86 +23312,53 @@ }, "node_modules/make-error": { "version": "1.3.6", - "devOptional": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz", + "integrity": "sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg==", "dev": true, "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/make-fetch-happen/node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" + "tmpl": "1.0.5" } }, "node_modules/map-obj": { @@ -19927,14 +23375,17 @@ }, "node_modules/mcl-wasm": { "version": "0.7.9", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "dev": true, "engines": { "node": ">=8.9.0" } }, "node_modules/md5.js": { "version": "1.3.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -19943,8 +23394,9 @@ }, "node_modules/media-typer": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.6" @@ -19952,7 +23404,9 @@ }, "node_modules/memdown": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", + "dev": true, "dependencies": { "abstract-leveldown": "~6.2.1", "functional-red-black-tree": "~1.0.1", @@ -19967,7 +23421,9 @@ }, "node_modules/memdown/node_modules/abstract-leveldown": { "version": "6.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, "dependencies": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -19981,10 +23437,15 @@ }, "node_modules/memdown/node_modules/immediate": { "version": "3.2.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", + "dev": true }, "node_modules/memorystream": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, "engines": { "node": ">= 0.10.0" } @@ -20014,11 +23475,57 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "node_modules/meow/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/meow/node_modules/read-pkg": { "version": "5.2.0", @@ -20105,26 +23612,31 @@ }, "node_modules/merge-descriptors": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/merge-stream": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/merkle-patricia-tree": { "version": "4.2.4", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", + "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", + "dev": true, "dependencies": { "@types/levelup": "^4.3.0", "ethereumjs-util": "^7.1.4", @@ -20136,8 +23648,9 @@ }, "node_modules/methods": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.6" @@ -20145,8 +23658,9 @@ }, "node_modules/micromatch": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -20157,7 +23671,9 @@ }, "node_modules/miller-rabin": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -20168,12 +23684,15 @@ }, "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "license": "MIT", "peer": true, "bin": { "mime": "cli.js" @@ -20184,16 +23703,18 @@ }, "node_modules/mime-db": { "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, - "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -20203,16 +23724,18 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mimic-response": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=4" @@ -20220,6 +23743,8 @@ }, "node_modules/min-document": { "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", "dev": true, "peer": true, "dependencies": { @@ -20237,15 +23762,19 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "node_modules/minimatch": { - "version": "3.0.5", - "license": "ISC", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -20255,8 +23784,9 @@ }, "node_modules/minimist": { "version": "1.2.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "node_modules/minimist-options": { "version": "4.1.0", @@ -20297,20 +23827,20 @@ } }, "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dev": true, "dependencies": { - "minipass": "^3.1.0", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "optionalDependencies": { - "encoding": "^0.1.12" + "encoding": "^0.1.13" } }, "node_modules/minipass-flush": { @@ -20359,6 +23889,12 @@ "node": ">=8" } }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -20372,15 +23908,22 @@ "node": ">= 8" } }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/mkdirp": { - "version": "1.0.4", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, "bin": { "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/mkdirp-infer-owner": { @@ -20397,10 +23940,24 @@ "node": ">=10" } }, + "node_modules/mkdirp-infer-owner/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/mkdirp-promise": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", + "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "mkdirp": "*" @@ -20411,14 +23968,18 @@ }, "node_modules/mnemonist": { "version": "0.38.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, "dependencies": { "obliterator": "^2.0.0" } }, "node_modules/mocha": { "version": "9.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", @@ -20459,14 +24020,18 @@ }, "node_modules/mocha/node_modules/ansi-colors": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, "engines": { "node": ">=6" } }, "node_modules/mocha/node_modules/debug": { "version": "4.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -20481,76 +24046,15 @@ }, "node_modules/mocha/node_modules/debug/node_modules/ms": { "version": "2.1.2", - "license": "MIT" - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/mocha/node_modules/minimatch": { "version": "4.2.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -20560,51 +24064,48 @@ }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "license": "MIT", + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "license": "MIT", + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/mock-fs": { "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/modify-values": { @@ -20618,12 +24119,16 @@ }, "node_modules/ms": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/multibase": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", + "deprecated": "This module has been superseded by the multiformats module", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "base-x": "^3.0.8", @@ -20632,8 +24137,10 @@ }, "node_modules/multicodec": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", + "deprecated": "This module has been superseded by the multiformats module", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "varint": "^5.0.0" @@ -20641,8 +24148,9 @@ }, "node_modules/multihashes": { "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "buffer": "^5.5.0", @@ -20652,8 +24160,10 @@ }, "node_modules/multihashes/node_modules/multibase": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", + "deprecated": "This module has been superseded by the multiformats module", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "base-x": "^3.0.8", @@ -20696,13 +24206,16 @@ }, "node_modules/nano-json-stream-parser": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/nanoid": { "version": "3.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -20712,13 +24225,15 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -20731,23 +24246,40 @@ }, "node_modules/next-tick": { "version": "1.1.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, "node_modules/nice-try": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true, - "license": "MIT", "peer": true }, + "node_modules/nock": { + "version": "13.2.9", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.9.tgz", + "integrity": "sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.21", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" }, "node_modules/node-fetch": { "version": "2.6.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -20765,30 +24297,33 @@ }, "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz", + "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==", "dev": true, "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", + "make-fetch-happen": "^10.0.3", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", @@ -20800,18 +24335,31 @@ "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 10.12.0" + "node": "^12.22 || ^14.13 || >=16" } }, "node_modules/node-gyp-build": { - "version": "4.4.0", - "license": "MIT", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -20842,9 +24390,41 @@ "node": ">=10" } }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/normalize-path": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -20889,67 +24469,120 @@ "dev": true }, "node_modules/npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", + "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", "dev": true, "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", + "hosted-git-info": "^3.0.6", + "semver": "^7.0.0", "validate-npm-package-name": "^3.0.0" }, "engines": { "node": ">=10" } }, + "node_modules/npm-package-arg/node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true + }, + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/npm-package-arg/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", + "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", "dev": true, "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^1.1.2", "npm-normalize-package-bin": "^1.0.1" }, "bin": { "npm-packlist": "bin/index.js" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/npm-packlist/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm-packlist/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=10" } }, "node_modules/npm-pick-manifest": { @@ -20967,15 +24600,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm-pick-manifest/node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", @@ -20989,9 +24613,9 @@ } }, "node_modules/npm-pick-manifest/node_modules/lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", "dev": true, "engines": { "node": ">=12" @@ -21012,133 +24636,65 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm-pick-manifest/node_modules/validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.0.tgz", + "integrity": "sha512-10LJQ/1+VhKrZjIuY9I/+gQTvumqqlgnsCufoXETHAPFTS3+M+Z5CFhZRDHGavmJ6rOye3UvNga88vl8n1r6gg==", "dev": true, "dependencies": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-registry-fetch/node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/npm-registry-fetch/node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm-registry-fetch/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", "dev": true, "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "lru-cache": "^7.5.1" }, "engines": { - "node": ">= 10" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - }, "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/npm-registry-fetch/node_modules/socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", "dev": true, "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm-run-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -21163,8 +24719,9 @@ }, "node_modules/number-is-nan": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -21172,7 +24729,8 @@ }, "node_modules/number-to-bn": { "version": "1.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", "dependencies": { "bn.js": "4.11.6", "strip-hex-prefix": "1.0.0" @@ -21184,17 +24742,18 @@ }, "node_modules/number-to-bn/node_modules/bn.js": { "version": "4.11.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" }, "node_modules/nx": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.4.2.tgz", - "integrity": "sha512-bYO//HuwQL4X8y+2BjUPtkPLDiYI1zMejQo6+uJl3+VdYPcsjwW/ca581tBPHiPH95XnHiBartnMrMJtn11grw==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-14.5.2.tgz", + "integrity": "sha512-I6KWVMR5Ksj/HgderkcmJmyaqHdWblQeFUeVq9to263Wr3QCIRigbvdDI3rq3ZQCBMyhUSOVP9MFXROoRVtJXQ==", "dev": true, "hasInstallScript": true, "dependencies": { - "@nrwl/cli": "14.4.2", - "@nrwl/tao": "14.4.2", + "@nrwl/cli": "14.5.2", + "@nrwl/tao": "14.5.2", "@parcel/watcher": "2.0.4", "chalk": "4.1.0", "chokidar": "^3.5.1", @@ -21240,6 +24799,38 @@ } } }, + "node_modules/nx/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/nx/node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nx/node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -21254,6 +24845,71 @@ "node": ">=12" } }, + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/nx/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/nx/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/nx/node_modules/semver": { "version": "7.3.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", @@ -21281,24 +24937,27 @@ "node": ">=8.17.0" } }, - "node_modules/nx/node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "node_modules/nx/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "node_modules/nx/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "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.0.0" - }, "engines": { - "node": ">=12" + "node": ">= 10.0.0" } }, + "node_modules/nx/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/nx/node_modules/yargs-parser": { "version": "21.0.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", @@ -21310,8 +24969,9 @@ }, "node_modules/oauth-sign": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, - "license": "Apache-2.0", "peer": true, "engines": { "node": "*" @@ -21319,8 +24979,9 @@ }, "node_modules/object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -21328,21 +24989,24 @@ }, "node_modules/object-inspect": { "version": "1.12.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -21358,19 +25022,23 @@ }, "node_modules/obliterator": { "version": "2.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true }, "node_modules/oboe": { "version": "2.1.5", - "license": "BSD", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", "dependencies": { "http-https": "^1.0.0" } }, "node_modules/on-finished": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ee-first": "1.1.1" @@ -21381,15 +25049,18 @@ }, "node_modules/once": { "version": "1.4.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -21419,8 +25090,9 @@ }, "node_modules/optionator": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, - "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -21433,10 +25105,34 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/os-locale": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "lcid": "^1.0.0" @@ -21447,58 +25143,67 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/p-cancelable": { - "version": "1.1.0", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true, - "license": "MIT", "peer": true, "engines": { - "node": ">=6" + "node": ">=12.20" } }, "node_modules/p-finally": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-map": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -21626,49 +25331,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/pacote/node_modules/@npmcli/run-script": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.5.tgz", - "integrity": "sha512-FyrZkZ+O0bCnQqm+mRb6sKbEJgyJudInwFN84gCcMUcxrWkR15Ags1uOHwnxHYdpj3T5eqrCZNW/Ys20MGTQ6Q==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pacote/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/pacote/node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, "node_modules/pacote/node_modules/hosted-git-info": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", @@ -21681,134 +25343,25 @@ "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "node_modules/pacote/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pacote/node_modules/ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/pacote/node_modules/lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", "dev": true, "engines": { "node": ">=12" } }, - "node_modules/pacote/node_modules/make-fetch-happen": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", - "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pacote/node_modules/minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", - "dev": true, - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/pacote/node_modules/node-gyp": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", - "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", + "node_modules/pacote/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.22 || ^14.13 || >=16" - } - }, - "node_modules/pacote/node_modules/normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "mkdirp": "bin/cmd.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": ">=10" } }, "node_modules/pacote/node_modules/npm-package-arg": { @@ -21826,137 +25379,11 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/pacote/node_modules/npm-packlist": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", - "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", - "dev": true, - "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/npm-packlist/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/pacote/node_modules/npm-registry-fetch": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", - "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/read-package-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", - "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", - "dev": true, - "dependencies": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/read-package-json/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/pacote/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pacote/node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -21966,8 +25393,9 @@ }, "node_modules/parse-asn1": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "asn1.js": "^5.2.0", @@ -21993,8 +25421,9 @@ }, "node_modules/parse-headers": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/parse-json": { @@ -22038,8 +25467,9 @@ }, "node_modules/parseurl": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.8" @@ -22047,8 +25477,9 @@ }, "node_modules/patch-package": { "version": "6.4.7", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", + "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@yarnpkg/lockfile": "^1.1.0", @@ -22074,8 +25505,9 @@ }, "node_modules/patch-package/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "color-convert": "^1.9.0" @@ -22086,8 +25518,9 @@ }, "node_modules/patch-package/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ansi-styles": "^3.2.1", @@ -22100,8 +25533,9 @@ }, "node_modules/patch-package/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "color-name": "1.1.3" @@ -22109,14 +25543,16 @@ }, "node_modules/patch-package/node_modules/color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/patch-package/node_modules/cross-spawn": { "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "nice-try": "^1.0.4", @@ -22129,42 +25565,31 @@ "node": ">=4.8" } }, - "node_modules/patch-package/node_modules/fs-extra": { - "version": "7.0.1", + "node_modules/patch-package/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=0.8.0" } }, "node_modules/patch-package/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=4" } }, - "node_modules/patch-package/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/patch-package/node_modules/open": { "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "is-docker": "^2.0.0", @@ -22179,8 +25604,9 @@ }, "node_modules/patch-package/node_modules/path-key": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=4" @@ -22188,8 +25614,9 @@ }, "node_modules/patch-package/node_modules/rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "glob": "^7.1.3" @@ -22200,8 +25627,9 @@ }, "node_modules/patch-package/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "ISC", "peer": true, "bin": { "semver": "bin/semver" @@ -22209,8 +25637,9 @@ }, "node_modules/patch-package/node_modules/shebang-command": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "shebang-regex": "^1.0.0" @@ -22221,8 +25650,9 @@ }, "node_modules/patch-package/node_modules/shebang-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -22230,8 +25660,9 @@ }, "node_modules/patch-package/node_modules/slash": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -22239,8 +25670,9 @@ }, "node_modules/patch-package/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "has-flag": "^3.0.0" @@ -22249,31 +25681,11 @@ "node": ">=4" } }, - "node_modules/patch-package/node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/patch-package/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/patch-package/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "isexe": "^2.0.0" @@ -22284,61 +25696,73 @@ }, "node_modules/path-browserify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/path-exists": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-to-regexp": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/pbkdf2": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -22352,13 +25776,22 @@ }, "node_modules/performance-now": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true, - "license": "MIT", "peer": true }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/picomatch": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -22368,8 +25801,9 @@ }, "node_modules/pidtree": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", + "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", "dev": true, - "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -22391,8 +25825,9 @@ }, "node_modules/pinkie": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -22400,8 +25835,9 @@ }, "node_modules/pinkie-promise": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "pinkie": "^2.0.0" @@ -22410,6 +25846,15 @@ "node": ">=0.10.0" } }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -22422,34 +25867,90 @@ "node": ">=8" } }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/postinstall-postinstall": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", + "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", "dev": true, "hasInstallScript": true, - "license": "MIT", "peer": true }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prepend-http": { - "version": "2.0.0", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", "dev": true, - "license": "MIT", "peer": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, "node_modules/prettier": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -22462,8 +25963,9 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, - "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -22471,6 +25973,33 @@ "node": ">=6.0.0" } }, + "node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/proc-log": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", @@ -22482,8 +26011,9 @@ }, "node_modules/process": { "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.6.0" @@ -22532,6 +26062,19 @@ "node": ">=10" } }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/promzard": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", @@ -22541,6 +26084,15 @@ "read": "1" } }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -22555,8 +26107,9 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "forwarded": "0.2.0", @@ -22568,18 +26121,22 @@ }, "node_modules/prr": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true }, "node_modules/psl": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/public-encrypt": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "bn.js": "^4.1.0", @@ -22592,14 +26149,16 @@ }, "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "end-of-stream": "^1.1.0", @@ -22607,9 +26166,10 @@ } }, "node_modules/punycode": { - "version": "2.1.1", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -22626,7 +26186,9 @@ }, "node_modules/qs": { "version": "6.11.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, "dependencies": { "side-channel": "^1.0.4" }, @@ -22637,8 +26199,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "peer": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/querystring": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "dev": true, "peer": true, "engines": { @@ -22647,6 +26227,8 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -22661,8 +26243,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/quick-lru": { "version": "4.0.1", @@ -22675,15 +26256,17 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/randomfill": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "randombytes": "^2.0.5", @@ -22692,8 +26275,9 @@ }, "node_modules/range-parser": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.6" @@ -22701,7 +26285,9 @@ }, "node_modules/raw-body": { "version": "2.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -22712,15 +26298,11 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, "node_modules/read": { "version": "1.0.7", @@ -22735,24 +26317,27 @@ } }, "node_modules/read-cmd-shim": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", - "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", + "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, "node_modules/read-package-json": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", - "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", + "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", "dev": true, "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/read-package-json-fast": { @@ -22768,6 +26353,82 @@ "node": ">=10" } }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/read-package-json/node_modules/lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json/node_modules/normalize-package-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", + "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", + "dev": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -22862,12 +26523,6 @@ "node": ">=4" } }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "node_modules/read-pkg/node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -22949,7 +26604,8 @@ }, "node_modules/readable-stream": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -22973,7 +26629,9 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -22996,15 +26654,17 @@ }, "node_modules/reduce-flatten": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/regexp.prototype.flags": { "version": "1.4.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -23019,8 +26679,9 @@ }, "node_modules/regexpp": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -23030,8 +26691,10 @@ }, "node_modules/request": { "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "aws-sign2": "~0.7.0", @@ -23061,8 +26724,9 @@ }, "node_modules/request/node_modules/form-data": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "asynckit": "^0.4.0", @@ -23075,8 +26739,9 @@ }, "node_modules/request/node_modules/qs": { "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true, - "license": "BSD-3-Clause", "peer": true, "engines": { "node": ">=0.6" @@ -23084,8 +26749,10 @@ }, "node_modules/request/node_modules/uuid": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, - "license": "MIT", "peer": true, "bin": { "uuid": "bin/uuid" @@ -23093,40 +26760,48 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/resolve": { - "version": "1.22.1", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, - "license": "MIT", "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "path-parse": "^1.0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "peer": true + }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -23139,7 +26814,7 @@ "node": ">=8" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", @@ -23148,19 +26823,52 @@ "node": ">=8" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/responselike": { - "version": "1.0.2", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "lowercase-keys": "^1.0.0" + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/responselike/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" } }, "node_modules/restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -23180,8 +26888,9 @@ }, "node_modules/reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -23189,13 +26898,15 @@ }, "node_modules/rfdc": { "version": "1.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true }, "node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -23208,7 +26919,8 @@ }, "node_modules/ripemd160": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -23216,7 +26928,8 @@ }, "node_modules/rlp": { "version": "2.2.7", - "license": "MPL-2.0", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", "dependencies": { "bn.js": "^5.2.0" }, @@ -23235,6 +26948,8 @@ }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -23250,35 +26965,35 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rustbn.js": { "version": "0.2.0", - "license": "(MIT OR Apache-2.0)" + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", + "dev": true }, "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", + "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", "dev": true, "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "tslib": "^2.1.0" } }, "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, "node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -23292,21 +27007,24 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safer-buffer": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true }, "node_modules/scrypt-js": { "version": "3.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, "node_modules/secp256k1": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "elliptic": "^6.5.4", "node-addon-api": "^2.0.0", @@ -23316,13 +27034,11 @@ "node": ">=10.0.0" } }, - "node_modules/secp256k1/node_modules/node-addon-api": { - "version": "2.0.2", - "license": "MIT" - }, "node_modules/semaphore-async-await": { "version": "1.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", + "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", + "dev": true, "engines": { "node": ">=4.1" } @@ -23341,10 +27057,27 @@ "node": ">=10" } }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/send": { "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "debug": "2.6.9", @@ -23367,8 +27100,9 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ms": "2.0.0" @@ -23376,14 +27110,16 @@ }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/send/node_modules/depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.8" @@ -23391,21 +27127,25 @@ }, "node_modules/send/node_modules/ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/serialize-javascript": { "version": "6.0.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-static": { "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "encodeurl": "~1.0.2", @@ -23419,8 +27159,9 @@ }, "node_modules/servify": { "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "body-parser": "^1.16.0", @@ -23435,20 +27176,25 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true }, "node_modules/setimmediate": { "version": "1.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "node_modules/setprototypeof": { "version": "1.2.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true }, "node_modules/sha.js": { "version": "2.4.11", - "license": "(MIT AND BSD-3-Clause)", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -23471,8 +27217,9 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -23482,15 +27229,17 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/side-channel": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -23502,11 +27251,14 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/simple-concat": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, "funding": [ { @@ -23522,13 +27274,13 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "peer": true }, "node_modules/simple-get": { "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "decompress-response": "^3.3.0", @@ -23536,17 +27288,39 @@ "simple-concat": "^1.0.0" } }, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "peer": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "node_modules/slash": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -23560,8 +27334,9 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -23569,17 +27344,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -23591,12 +27355,12 @@ } }, "node_modules/socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", "dev": true, "dependencies": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" }, "engines": { @@ -23605,9 +27369,9 @@ } }, "node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "dependencies": { "agent-base": "^6.0.2", @@ -23619,12 +27383,14 @@ } }, "node_modules/solc": { - "version": "0.7.3", - "license": "MIT", + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz", + "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==", + "dev": true, + "peer": true, "dependencies": { "command-exists": "^1.2.8", "commander": "3.0.2", - "follow-redirects": "^1.12.1", "fs-extra": "^0.30.0", "js-sha3": "0.8.0", "memorystream": "^0.3.1", @@ -23639,9 +27405,19 @@ "node": ">=8.0.0" } }, + "node_modules/solc/node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true, + "peer": true + }, "node_modules/solc/node_modules/fs-extra": { "version": "0.30.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "peer": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^2.1.0", @@ -23652,14 +27428,20 @@ }, "node_modules/solc/node_modules/jsonfile": { "version": "2.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "peer": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/solc/node_modules/rimraf": { "version": "2.7.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -23669,21 +27451,14 @@ }, "node_modules/solc/node_modules/semver": { "version": "5.7.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "peer": true, "bin": { "semver": "bin/semver" } }, - "node_modules/solc/node_modules/tmp": { - "version": "0.0.33", - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/sort-keys": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", @@ -23710,14 +27485,18 @@ }, "node_modules/source-map": { "version": "0.6.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.21", - "license": "MIT", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -23725,8 +27504,9 @@ }, "node_modules/spdx-correct": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -23734,13 +27514,15 @@ }, "node_modules/spdx-exceptions": { "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -23748,8 +27530,9 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.11", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true }, "node_modules/split": { "version": "1.0.1", @@ -23772,10 +27555,17 @@ "readable-stream": "^3.0.0" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, "node_modules/sshpk": { "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "asn1": "~0.2.3", @@ -23799,25 +27589,49 @@ }, "node_modules/sshpk/node_modules/tweetnacl": { "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true, - "license": "Unlicense", "peer": true }, "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, "dependencies": { "minipass": "^3.1.1" }, "engines": { - "node": ">= 8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" } }, "node_modules/stacktrace-parser": { "version": "0.1.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, "dependencies": { "type-fest": "^0.7.1" }, @@ -23827,41 +27641,73 @@ }, "node_modules/stacktrace-parser/node_modules/type-fest": { "version": "0.7.1", - "license": "(MIT OR CC0-1.0)", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, "engines": { "node": ">=8" } }, "node_modules/statuses": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, "engines": { "node": ">= 0.8" } }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-argv": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6.19" } }, "node_modules/string-format": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, - "license": "WTFPL OR MIT" + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } }, "node_modules/string-width": { "version": "4.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -23871,9 +27717,19 @@ "node": ">=8" } }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.trimend": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -23885,7 +27741,8 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -23897,7 +27754,9 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -23916,15 +27775,17 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/strip-hex-prefix": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", "dependencies": { "is-hex-prefixed": "1.0.0" }, @@ -23947,7 +27808,9 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -23974,7 +27837,9 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -23982,10 +27847,24 @@ "node": ">=8" } }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -23995,8 +27874,9 @@ }, "node_modules/swarm-js": { "version": "0.1.40", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", + "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "bluebird": "^3.5.0", @@ -24014,14 +27894,29 @@ }, "node_modules/swarm-js/node_modules/chownr": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true, - "license": "ISC", "peer": true }, + "node_modules/swarm-js/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "peer": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/swarm-js/node_modules/fs-extra": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -24031,8 +27926,9 @@ }, "node_modules/swarm-js/node_modules/fs-minipass": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "minipass": "^2.6.0" @@ -24040,8 +27936,9 @@ }, "node_modules/swarm-js/node_modules/get-stream": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=4" @@ -24049,8 +27946,9 @@ }, "node_modules/swarm-js/node_modules/got": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "decompress-response": "^3.2.0", @@ -24074,26 +27972,29 @@ }, "node_modules/swarm-js/node_modules/is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/swarm-js/node_modules/jsonfile": { - "version": "4.0.0", + "node_modules/swarm-js/node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true, - "license": "MIT", "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=0.10.0" } }, "node_modules/swarm-js/node_modules/minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "safe-buffer": "^5.1.2", @@ -24102,29 +28003,19 @@ }, "node_modules/swarm-js/node_modules/minizlib": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "minipass": "^2.9.0" } }, - "node_modules/swarm-js/node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/swarm-js/node_modules/p-cancelable": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=4" @@ -24132,8 +28023,9 @@ }, "node_modules/swarm-js/node_modules/p-timeout": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "p-finally": "^1.0.0" @@ -24142,19 +28034,11 @@ "node": ">=4" } }, - "node_modules/swarm-js/node_modules/prepend-http": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/swarm-js/node_modules/tar": { "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "chownr": "^1.1.4", @@ -24169,37 +28053,11 @@ "node": ">=4.5" } }, - "node_modules/swarm-js/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/swarm-js/node_modules/url-parse-lax": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/swarm-js/node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "peer": true - }, "node_modules/table-layout": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^4.0.1", "deep-extend": "~0.6.0", @@ -24212,16 +28070,18 @@ }, "node_modules/table-layout/node_modules/array-back": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/table-layout/node_modules/typical": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -24259,6 +28119,24 @@ "node": ">=6" } }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", @@ -24268,10 +28146,41 @@ "node": ">=4" } }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/test-value": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", + "integrity": "sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "array-back": "^1.0.3", @@ -24283,8 +28192,9 @@ }, "node_modules/test-value/node_modules/array-back": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "typical": "^2.6.0" @@ -24295,12 +28205,16 @@ }, "node_modules/test-value/node_modules/typical": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/testrpc": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", + "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", + "deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on.", "dev": true, "peer": true }, @@ -24315,13 +28229,15 @@ }, "node_modules/text-table": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/through": { "version": "2.3.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "node_modules/through2": { "version": "4.0.2", @@ -24334,25 +28250,46 @@ }, "node_modules/timed-out": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/to-readable-stream": { - "version": "1.0.0", + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, - "license": "MIT", - "peer": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, "engines": { - "node": ">=6" + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -24362,15 +28299,18 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, "engines": { "node": ">=0.6" } }, "node_modules/tough-cookie": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, - "license": "BSD-3-Clause", "peer": true, "dependencies": { "psl": "^1.1.28", @@ -24380,6 +28320,16 @@ "node": ">=0.8" } }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/tr46": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", @@ -24392,6 +28342,15 @@ "node": ">=8" } }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/treeverse": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", @@ -24412,12 +28371,15 @@ }, "node_modules/true-case-path": { "version": "2.2.1", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", + "dev": true }, "node_modules/ts-command-line-args": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz", + "integrity": "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==", "dev": true, - "license": "ISC", "dependencies": { "chalk": "^4.1.0", "command-line-args": "^5.1.1", @@ -24430,16 +28392,18 @@ }, "node_modules/ts-essentials": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", "dev": true, - "license": "MIT", "peerDependencies": { "typescript": ">=3.7.0" } }, "node_modules/ts-generator": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", + "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/mkdirp": "^0.5.2", "@types/prettier": "^2.1.1", @@ -24457,8 +28421,9 @@ }, "node_modules/ts-generator/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -24468,8 +28433,9 @@ }, "node_modules/ts-generator/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -24481,40 +28447,42 @@ }, "node_modules/ts-generator/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/ts-generator/node_modules/color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/ts-generator/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=0.8.0" + } }, "node_modules/ts-generator/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/ts-generator/node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/ts-generator/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -24524,13 +28492,15 @@ }, "node_modules/ts-generator/node_modules/ts-essentials": { "version": "1.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", + "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", + "dev": true }, "node_modules/ts-node": { - "version": "10.8.2", - "devOptional": true, - "license": "MIT", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -24571,8 +28541,9 @@ }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", - "devOptional": true, - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, "engines": { "node": ">=0.3.1" } @@ -24589,6 +28560,18 @@ "strip-bom": "^3.0.0" } }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -24599,18 +28582,22 @@ } }, "node_modules/tslib": { - "version": "2.4.0", - "dev": true, - "license": "0BSD" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/tsort": { "version": "0.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true }, "node_modules/tsutils": { "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -24621,15 +28608,11 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, "node_modules/tunnel-agent": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "safe-buffer": "^5.0.1" @@ -24640,20 +28623,26 @@ }, "node_modules/tweetnacl": { "version": "1.0.3", - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true }, "node_modules/tweetnacl-util": { "version": "0.15.1", - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true }, "node_modules/type": { "version": "1.2.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -24663,25 +28652,30 @@ }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/type-is": { "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "media-typer": "0.3.0", @@ -24693,8 +28687,9 @@ }, "node_modules/typechain": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz", + "integrity": "sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/prettier": "^2.1.1", "debug": "^4.1.1", @@ -24714,63 +28709,16 @@ "typescript": ">=4.1.0" } }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/typechain/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/typechain/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": "*" - } - }, - "node_modules/typechain/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" + "node": ">=10" } }, "node_modules/typedarray": { @@ -24781,15 +28729,17 @@ }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dependencies": { "is-typedarray": "^1.0.0" } }, "node_modules/typescript": { "version": "4.7.4", - "devOptional": true, - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -24800,16 +28750,17 @@ }, "node_modules/typical": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/uglify-js": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.2.tgz", - "integrity": "sha512-AaQNokTNgExWrkEYA24BTNMSjyqEXPSfhqoS0AxmHkCJ4U+Dyy5AvbGV/sqxuxficEfGGoX3zWw9R7QpLFfEsg==", + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", + "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", "dev": true, "optional": true, "bin": { @@ -24821,13 +28772,15 @@ }, "node_modules/ultron": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/unbox-primitive": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -24839,8 +28792,10 @@ } }, "node_modules/undici": { - "version": "5.6.0", - "license": "MIT", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.8.1.tgz", + "integrity": "sha512-iDRmWX4Zar/4A/t+1LrKQRm102zw2l9Wgat3LtTlTn8ykvMZmAmpq9tjyHEigx18FsY7IfATvyN3xSw9BDz0eA==", + "dev": true, "engines": { "node": ">=12.18" } @@ -24870,17 +28825,19 @@ "dev": true }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "engines": { - "node": ">= 10.0.0" + "node": ">= 4.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, "engines": { "node": ">= 0.8" } @@ -24895,18 +28852,46 @@ "yarn": "*" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/url": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "punycode": "1.3.2", @@ -24914,27 +28899,30 @@ } }, "node_modules/url-parse-lax": { - "version": "3.0.0", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "prepend-http": "^2.0.0" + "prepend-http": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, "node_modules/url-set-query": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/url-to-options": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 4" @@ -24942,14 +28930,16 @@ }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/utf-8-validate": { "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -24959,11 +28949,13 @@ }, "node_modules/utf8": { "version": "3.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, "node_modules/util": { "version": "0.12.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -24975,12 +28967,14 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.4.0" @@ -24988,49 +28982,73 @@ }, "node_modules/uuid": { "version": "8.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache": { "version": "2.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, "dependencies": { - "builtins": "^1.0.3" + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/varint": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/vary": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.8" @@ -25038,11 +29056,12 @@ }, "node_modules/verror": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "engines": [ "node >=0.6.0" ], - "license": "MIT", "peer": true, "dependencies": { "assert-plus": "^1.0.0", @@ -25050,18 +29069,21 @@ "extsprintf": "^1.2.0" } }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/walk-up-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", "dev": true }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -25072,33 +29094,35 @@ } }, "node_modules/web3": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.7.5.tgz", + "integrity": "sha512-3jHZTWyXt975AOXgnZKayiSWDLpoSKk9fZtLk1hURQtt7AdSbXPT8AK9ooBCm0Dt3GYaOeNcHGaiHC3gtyqhLg==", "dev": true, "hasInstallScript": true, - "license": "LGPL-3.0", "peer": true, "dependencies": { - "web3-bzz": "1.7.4", - "web3-core": "1.7.4", - "web3-eth": "1.7.4", - "web3-eth-personal": "1.7.4", - "web3-net": "1.7.4", - "web3-shh": "1.7.4", - "web3-utils": "1.7.4" + "web3-bzz": "1.7.5", + "web3-core": "1.7.5", + "web3-eth": "1.7.5", + "web3-eth-personal": "1.7.5", + "web3-net": "1.7.5", + "web3-shh": "1.7.5", + "web3-utils": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-bzz": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.5.tgz", + "integrity": "sha512-Z53sY0YK/losqjJncmL4vP0zZI9r6tiXg6o7R6e1JD2Iy7FH3serQvU+qXmPjqEBzsnhf8wTG+YcBPB3RHpr0Q==", "dev": true, "hasInstallScript": true, - "license": "LGPL-3.0", "peer": true, "dependencies": { "@types/node": "^12.12.6", - "got": "9.6.0", + "got": "12.1.0", "swarm-js": "^0.1.40" }, "engines": { @@ -25107,54 +29131,59 @@ }, "node_modules/web3-bzz/node_modules/@types/node": { "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/web3-core": { - "version": "1.7.4", - "license": "LGPL-3.0", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.5.tgz", + "integrity": "sha512-UgOWXZr1fR/3cUQJKWbfMwRxj1/N7o6RSd/dHqdXBlOD+62EjNZItFmLRg5veq5kp9YfXzrNw9bnDkXfsL+nKQ==", "dependencies": { "@types/bn.js": "^5.1.0", "@types/node": "^12.12.6", "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" + "web3-core-helpers": "1.7.5", + "web3-core-method": "1.7.5", + "web3-core-requestmanager": "1.7.5", + "web3-utils": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-helpers": { - "version": "1.7.4", - "license": "LGPL-3.0", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.5.tgz", + "integrity": "sha512-lDDjTks6Q6aNUO87RYrY2xub3UWTKr/RIWxpHJODEqkLxZS1dWdyliJ6aIx3031VQwsNT5HE7NvABe/t0p3iDQ==", "dependencies": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" + "web3-eth-iban": "1.7.5", + "web3-utils": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-method": { - "version": "1.7.4", - "license": "LGPL-3.0", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.5.tgz", + "integrity": "sha512-ApTvq1Llzlbxmy0n4L7QaE6NodIsR80VJqk8qN4kLg30SGznt/pNJFebryLI2kpyDmxSgj1TjEWzmHJBp6FhYg==", "dependencies": { "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" + "web3-core-helpers": "1.7.5", + "web3-core-promievent": "1.7.5", + "web3-core-subscriptions": "1.7.5", + "web3-utils": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-promievent": { - "version": "1.7.4", - "license": "LGPL-3.0", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.5.tgz", + "integrity": "sha512-uZ1VRErVuhiLtHlyt3oEH/JSvAf6bWPndChHR9PG7i1Zfqm6ZVCeM91ICTPmiL8ddsGQOxASpnJk4vhApcTIww==", "dependencies": { "eventemitter3": "4.0.4" }, @@ -25164,28 +29193,31 @@ }, "node_modules/web3-core-promievent/node_modules/eventemitter3": { "version": "4.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" }, "node_modules/web3-core-requestmanager": { - "version": "1.7.4", - "license": "LGPL-3.0", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.5.tgz", + "integrity": "sha512-3KpfxW/wVH4mgwWEsSJGHKrtRVoijWlDxtUrm17xgtqRNZ2mFolifKnHAUKa0fY48C9CrxmcCiMIi3W4G6WYRw==", "dependencies": { "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" + "web3-core-helpers": "1.7.5", + "web3-providers-http": "1.7.5", + "web3-providers-ipc": "1.7.5", + "web3-providers-ws": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-subscriptions": { - "version": "1.7.4", - "license": "LGPL-3.0", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.5.tgz", + "integrity": "sha512-YK6utQ7Wwjbe4XZOIA8quWGBPi1lFDS1A+jQYwxKKrCvm6BloBNc3FhvrcSYlDhLe/kOy8+2Je8i9amndgT4ww==", "dependencies": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" + "web3-core-helpers": "1.7.5" }, "engines": { "node": ">=8.0.0" @@ -25193,52 +29225,57 @@ }, "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { "version": "4.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" }, "node_modules/web3-core/node_modules/@types/node": { "version": "12.20.55", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" }, "node_modules/web3-eth": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.5.tgz", + "integrity": "sha512-BucjvqZyDWYkGlsFX+OnOBub0YutlC1KZiNGibdmvtNX0NQK+8iw1uzAoL9yTTwCSszL7lnkFe8N+HCOl9B4Dw==", "dev": true, - "license": "LGPL-3.0", "peer": true, "dependencies": { - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-eth-accounts": "1.7.4", - "web3-eth-contract": "1.7.4", - "web3-eth-ens": "1.7.4", - "web3-eth-iban": "1.7.4", - "web3-eth-personal": "1.7.4", - "web3-net": "1.7.4", - "web3-utils": "1.7.4" + "web3-core": "1.7.5", + "web3-core-helpers": "1.7.5", + "web3-core-method": "1.7.5", + "web3-core-subscriptions": "1.7.5", + "web3-eth-abi": "1.7.5", + "web3-eth-accounts": "1.7.5", + "web3-eth-contract": "1.7.5", + "web3-eth-ens": "1.7.5", + "web3-eth-iban": "1.7.5", + "web3-eth-personal": "1.7.5", + "web3-net": "1.7.5", + "web3-utils": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-abi": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.5.tgz", + "integrity": "sha512-qWHvF7sayxql9BD1yqK9sZRLBQ66eJzGeaU53Y1PRq2iFPrhY6NUWxQ3c3ps0rg+dyObvRbloviWpKXcS4RE/A==", "dev": true, - "license": "LGPL-3.0", "peer": true, "dependencies": { "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.7.4" + "web3-utils": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-accounts": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.5.tgz", + "integrity": "sha512-AzMLoTj3RGwKpyp3x3TtHrEeU4VpR99iMOD6NKrWSDumS6QEi0lCo+y7QZhdTlINw3iIA3SFIdvbAOO4NCHSDg==", "dev": true, - "license": "LGPL-3.0", "peer": true, "dependencies": { "@ethereumjs/common": "^2.5.0", @@ -25248,10 +29285,10 @@ "ethereumjs-util": "^7.0.10", "scrypt-js": "^3.0.1", "uuid": "3.3.2", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-utils": "1.7.4" + "web3-core": "1.7.5", + "web3-core-helpers": "1.7.5", + "web3-core-method": "1.7.5", + "web3-utils": "1.7.5" }, "engines": { "node": ">=8.0.0" @@ -25259,14 +29296,16 @@ }, "node_modules/web3-eth-accounts/node_modules/bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/web3-eth-accounts/node_modules/eth-lib": { "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "bn.js": "^4.11.6", @@ -25276,74 +29315,80 @@ }, "node_modules/web3-eth-accounts/node_modules/uuid": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, - "license": "MIT", "peer": true, "bin": { "uuid": "bin/uuid" } }, "node_modules/web3-eth-contract": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.5.tgz", + "integrity": "sha512-qab7NPJRKRlTs58ozsqK8YIEwWpxIm3vD/okSIKBGkFx5gIHWW+vGmMh5PDSfefLJM9rCd+T+Lc0LYvtME7uqg==", "dev": true, - "license": "LGPL-3.0", "peer": true, "dependencies": { "@types/bn.js": "^5.1.0", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-utils": "1.7.4" + "web3-core": "1.7.5", + "web3-core-helpers": "1.7.5", + "web3-core-method": "1.7.5", + "web3-core-promievent": "1.7.5", + "web3-core-subscriptions": "1.7.5", + "web3-eth-abi": "1.7.5", + "web3-utils": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-ens": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.5.tgz", + "integrity": "sha512-k1Q0msdRv/wac2egpZBIwG3n/sa/KdrVmVJvFm471gLTL4xfUizV5qJjkDVf+ikf9JyDvWJTs5eWNUUbOFIw/A==", "dev": true, - "license": "LGPL-3.0", "peer": true, "dependencies": { "content-hash": "^2.5.2", "eth-ens-namehash": "2.0.8", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-eth-contract": "1.7.4", - "web3-utils": "1.7.4" + "web3-core": "1.7.5", + "web3-core-helpers": "1.7.5", + "web3-core-promievent": "1.7.5", + "web3-eth-abi": "1.7.5", + "web3-eth-contract": "1.7.5", + "web3-utils": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-iban": { - "version": "1.7.4", - "license": "LGPL-3.0", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.5.tgz", + "integrity": "sha512-mn2W5t/1IpL8OZvzAabLKT4kvwRnZSJ9K0tctndl9sDNWkfITYQibEEhUaNNA50Q5fJKgVudHI/m0gwIVTyG8Q==", "dependencies": { "bn.js": "^5.2.1", - "web3-utils": "1.7.4" + "web3-utils": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-personal": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.5.tgz", + "integrity": "sha512-txh2P/eN8I4AOUKFi9++KKddoD0tWfCuu9Y1Kc41jSRbk6smO88Fum0KWNmYFYhSCX2qiknS1DfqsONl3igoKQ==", "dev": true, - "license": "LGPL-3.0", "peer": true, "dependencies": { "@types/node": "^12.12.6", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-net": "1.7.4", - "web3-utils": "1.7.4" + "web3-core": "1.7.5", + "web3-core-helpers": "1.7.5", + "web3-core-method": "1.7.5", + "web3-net": "1.7.5", + "web3-utils": "1.7.5" }, "engines": { "node": ">=8.0.0" @@ -25351,52 +29396,59 @@ }, "node_modules/web3-eth-personal/node_modules/@types/node": { "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/web3-net": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.7.5.tgz", + "integrity": "sha512-xwuCb2YWw49PmW81AJQ/G+Xi2ikRsYyZXSgyPt4LmZuKjiqg/6kSdK8lZvUi3Pi3wM+QDBXbpr73M/WEkW0KvA==", "dev": true, - "license": "LGPL-3.0", "peer": true, "dependencies": { - "web3-core": "1.7.4", - "web3-core-method": "1.7.4", - "web3-utils": "1.7.4" + "web3-core": "1.7.5", + "web3-core-method": "1.7.5", + "web3-utils": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-http": { - "version": "1.7.4", - "license": "LGPL-3.0", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.5.tgz", + "integrity": "sha512-vPgr4Kzy0M3CHtoP/Bh7qwK/D9h2fhjpoqctdMWVJseOfeTgfOphCKN0uwV8w2VpZgDPXA8aeTdBx5OjmDdStA==", "dependencies": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-ipc": { - "version": "1.7.4", - "license": "LGPL-3.0", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.5.tgz", + "integrity": "sha512-aNHx+RAROzO+apDEzy8Zncj78iqWBadIXtpmFDg7uiTn8i+oO+IcP1Yni7jyzkltsysVJHgHWG4kPx50ANCK3Q==", "dependencies": { "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" + "web3-core-helpers": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-ws": { - "version": "1.7.4", - "license": "LGPL-3.0", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.5.tgz", + "integrity": "sha512-9uJNVVkIGC8PmM9kNbgPth56HDMSSsxZh3ZEENdwO3LNWemaADiQYUDCsD/dMVkn0xsGLHP5dgAy4Q5msqySLg==", "dependencies": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", + "web3-core-helpers": "1.7.5", "websocket": "^1.0.32" }, "engines": { @@ -25405,27 +29457,30 @@ }, "node_modules/web3-providers-ws/node_modules/eventemitter3": { "version": "4.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" }, "node_modules/web3-shh": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.5.tgz", + "integrity": "sha512-aCIWJyLMH5H76OybU4ZpUCJ93yNOPATGhJ+KboRPU8QZDzS2CcVhtEzyl27bbvw+rSnVroMLqBgTXBB4mmKI7A==", "dev": true, "hasInstallScript": true, - "license": "LGPL-3.0", "peer": true, "dependencies": { - "web3-core": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-net": "1.7.4" + "web3-core": "1.7.5", + "web3-core-method": "1.7.5", + "web3-core-subscriptions": "1.7.5", + "web3-net": "1.7.5" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-utils": { - "version": "1.7.4", - "license": "LGPL-3.0", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", + "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", "dependencies": { "bn.js": "^5.2.1", "ethereum-bloom-filters": "^1.0.6", @@ -25450,7 +29505,8 @@ }, "node_modules/websocket": { "version": "1.0.34", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", "dependencies": { "bufferutil": "^4.0.1", "debug": "^2.2.0", @@ -25465,14 +29521,16 @@ }, "node_modules/websocket/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/websocket/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/whatwg-url": { "version": "8.7.0", @@ -25490,7 +29548,9 @@ }, "node_modules/which": { "version": "2.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -25503,7 +29563,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -25517,13 +29578,15 @@ }, "node_modules/which-module": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/which-typed-array": { "version": "1.1.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -25550,8 +29613,9 @@ }, "node_modules/window-size": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", "dev": true, - "license": "MIT", "peer": true, "bin": { "window-size": "cli.js" @@ -25562,8 +29626,9 @@ }, "node_modules/word-wrap": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -25576,8 +29641,9 @@ }, "node_modules/wordwrapjs": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "dev": true, - "license": "MIT", "dependencies": { "reduce-flatten": "^2.0.0", "typical": "^5.2.0" @@ -25588,19 +29654,24 @@ }, "node_modules/wordwrapjs/node_modules/typical": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/workerpool": { "version": "6.2.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -25615,18 +29686,21 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/write-json-file": { @@ -25658,6 +29732,18 @@ "node": ">=8" } }, + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/write-pkg": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", @@ -25762,8 +29848,9 @@ } }, "node_modules/ws": { - "version": "7.5.8", - "license": "MIT", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "engines": { "node": ">=8.3.0" }, @@ -25782,8 +29869,9 @@ }, "node_modules/xhr": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "global": "~4.4.0", @@ -25794,8 +29882,9 @@ }, "node_modules/xhr-request": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "buffer-to-arraybuffer": "^0.0.5", @@ -25809,104 +29898,87 @@ }, "node_modules/xhr-request-promise": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "xhr-request": "^1.1.0" } }, - "node_modules/xhr-request/node_modules/query-string": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/xhr-request/node_modules/strict-uri-encode": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/xhr2-cookies": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "cookiejar": "^2.1.1" - } - }, "node_modules/xtend": { "version": "4.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", - "license": "ISC", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "engines": { "node": ">=10" } }, "node_modules/yaeti": { "version": "0.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", "engines": { "node": ">=0.10.32" } }, "node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, - "license": "ISC", "engines": { "node": ">= 6" } }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, "engines": { "node": ">=10" } }, "node_modules/yargs-unparser": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -25919,7 +29991,9 @@ }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "engines": { "node": ">=10" }, @@ -25929,7 +30003,9 @@ }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -25939,22 +30015,36 @@ }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, "engines": { "node": ">=8" } }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.0.tgz", + "integrity": "sha512-xzm2t63xTV/f7+bGMSRzLhUNk1ajv/tDoaD5OeGyC3cFo2fl7My9Z4hS3q2VdQ7JaLvTxErO8Jp5pRIFGMD/zg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/yn": { "version": "3.1.1", - "devOptional": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { "node": ">=10" }, @@ -25985,8 +30075,9 @@ }, "packages/core-types/node_modules/@types/node": { "version": "17.0.45", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true }, "packages/ethers-lib": { "name": "@biconomy-sdk/ethers-lib", @@ -26021,8 +30112,9 @@ }, "packages/ethers-lib/node_modules/@types/node": { "version": "17.0.45", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true }, "packages/node-client": { "name": "@biconomy-sdk/node-client", @@ -26031,10 +30123,12 @@ "dependencies": { "@biconomy-sdk/core-types": "*", "@ethersproject/abstract-signer": "^5.6.0", + "@gnosis.pm/safe-core-sdk": "^2.1.0", "node-fetch": "^2.6.6" }, "devDependencies": { "@biconomy-sdk/core-types": "*", + "@gnosis.pm/safe-core-sdk": "^2.1.0", "@gnosis.pm/safe-ethers-lib": "^1.1.0", "@gnosis.pm/safe-web3-lib": "^1.1.0", "@nomiclabs/hardhat-ethers": "^2.0.5", @@ -26065,13 +30159,22 @@ }, "packages/node-client/node_modules/@types/node": { "version": "17.0.45", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true }, "packages/relayer": { "name": "@biconomy-sdk/relayer", "version": "1.0.0", - "license": "MIT" + "license": "MIT", + "dependencies": { + "@biconomy-sdk/core-types": "*", + "@ethersproject/providers": "^5.6.8", + "ethers": "^5.6.9" + }, + "devDependencies": { + "@biconomy-sdk/core-types": "*" + } }, "packages/smart-account": { "name": "@biconomy-sdk/smart-account", @@ -26080,15 +30183,25 @@ "dependencies": { "@biconomy-sdk/core-types": "*", "@biconomy-sdk/ethers-lib": "*", + "@biconomy-sdk/node-client": "*", + "@biconomy-sdk/relayer": "*", + "@biconomy-sdk/transactions": "*", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", "@gnosis.pm/safe-deployments": "^1.12.0", + "@nomiclabs/hardhat-ethers": "^2.1.0", + "@types/mocha": "^9.1.1", "web3-core": "^1.7.1" }, "devDependencies": { "@biconomy-sdk/core-types": "*", "@biconomy-sdk/ethers-lib": "*", + "@biconomy-sdk/node-client": "*", + "@biconomy-sdk/relayer": "*", + "@biconomy-sdk/transactions": "*", + "@nomiclabs/hardhat-ethers": "^2.1.0", + "@types/mocha": "^9.1.1", "@types/node": "^17.0.23", "@typescript-eslint/eslint-plugin": "^5.17.0", "@typescript-eslint/parser": "^5.17.0", @@ -26096,17 +30209,40 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", "ethers": "^5.5.3", + "jest-cli": "^28.1.3", + "nock": "^13.2.9", "prettier": "^2.6.2", "typescript": "^4.6.3" } }, "packages/smart-account/node_modules/@types/node": { "version": "17.0.45", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true + }, + "packages/transactions": { + "name": "@biconomy-sdk/transactions", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "ethers": "^5.6.9" + } } }, "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", @@ -26116,12 +30252,190 @@ "@babel/highlight": "^7.18.6" } }, + "@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true + }, + "@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz", + "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true + }, "@babel/helper-validator-identifier": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", "dev": true }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, "@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", @@ -26168,6 +30482,12 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -26185,6 +30505,183 @@ } } }, + "@babel/parser": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", + "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", + "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, "@biconomy-sdk/core-types": { "version": "file:packages/core-types", "requires": { @@ -26204,6 +30701,8 @@ "dependencies": { "@types/node": { "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", "dev": true } } @@ -26233,6 +30732,8 @@ "dependencies": { "@types/node": { "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", "dev": true } } @@ -26242,6 +30743,7 @@ "requires": { "@biconomy-sdk/core-types": "*", "@ethersproject/abstract-signer": "^5.6.0", + "@gnosis.pm/safe-core-sdk": "^2.1.0", "@gnosis.pm/safe-ethers-lib": "^1.1.0", "@gnosis.pm/safe-web3-lib": "^1.1.0", "@nomiclabs/hardhat-ethers": "^2.0.5", @@ -26273,22 +30775,34 @@ "dependencies": { "@types/node": { "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", "dev": true } } }, "@biconomy-sdk/relayer": { - "version": "file:packages/relayer" + "version": "file:packages/relayer", + "requires": { + "@biconomy-sdk/core-types": "*", + "@ethersproject/providers": "^5.6.8", + "ethers": "^5.6.9" + } }, "@biconomy-sdk/smart-account": { "version": "file:packages/smart-account", "requires": { "@biconomy-sdk/core-types": "*", "@biconomy-sdk/ethers-lib": "*", + "@biconomy-sdk/node-client": "*", + "@biconomy-sdk/relayer": "*", + "@biconomy-sdk/transactions": "*", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", "@gnosis.pm/safe-deployments": "^1.12.0", + "@nomiclabs/hardhat-ethers": "^2.1.0", + "@types/mocha": "^9.1.1", "@types/node": "^17.0.23", "@typescript-eslint/eslint-plugin": "^5.17.0", "@typescript-eslint/parser": "^5.17.0", @@ -26296,6 +30810,8 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", "ethers": "^5.5.3", + "jest-cli": "^28.1.3", + "nock": "^13.2.9", "prettier": "^2.6.2", "typescript": "^4.6.3", "web3-core": "^1.7.1" @@ -26303,19 +30819,45 @@ "dependencies": { "@types/node": { "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", "dev": true } } }, + "@biconomy-sdk/transactions": { + "version": "file:packages/transactions", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "ethers": "^5.6.9" + } + }, "@cspotcode/source-map-support": { "version": "0.8.1", - "devOptional": true, + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, "requires": { "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } } }, "@ensdomains/ens": { "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", + "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", "dev": true, "peer": true, "requires": { @@ -26328,16 +30870,22 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "peer": true }, "camelcase": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", "dev": true, "peer": true }, "cliui": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", "dev": true, "peer": true, "requires": { @@ -26348,6 +30896,8 @@ }, "find-up": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dev": true, "peer": true, "requires": { @@ -26357,6 +30907,8 @@ }, "fs-extra": { "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", "dev": true, "peer": true, "requires": { @@ -26369,16 +30921,15 @@ }, "get-caller-file": { "version": "1.0.3", - "dev": true, - "peer": true - }, - "hosted-git-info": { - "version": "2.8.9", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true, "peer": true }, "is-fullwidth-code-point": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, "peer": true, "requires": { @@ -26387,6 +30938,8 @@ }, "jsonfile": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", "dev": true, "peer": true, "requires": { @@ -26395,6 +30948,8 @@ }, "load-json-file": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dev": true, "peer": true, "requires": { @@ -26407,6 +30962,8 @@ }, "normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "peer": true, "requires": { @@ -26418,6 +30975,8 @@ }, "parse-json": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, "peer": true, "requires": { @@ -26426,6 +30985,8 @@ }, "path-exists": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dev": true, "peer": true, "requires": { @@ -26434,6 +30995,8 @@ }, "path-type": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dev": true, "peer": true, "requires": { @@ -26444,11 +31007,15 @@ }, "pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "peer": true }, "read-pkg": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, "peer": true, "requires": { @@ -26459,6 +31026,8 @@ }, "read-pkg-up": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dev": true, "peer": true, "requires": { @@ -26468,11 +31037,15 @@ }, "require-from-string": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", "dev": true, "peer": true }, "rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "peer": true, "requires": { @@ -26481,11 +31054,15 @@ }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "peer": true }, "solc": { "version": "0.4.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", + "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", "dev": true, "peer": true, "requires": { @@ -26498,6 +31075,8 @@ }, "string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, "peer": true, "requires": { @@ -26508,6 +31087,8 @@ }, "strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "peer": true, "requires": { @@ -26516,6 +31097,8 @@ }, "strip-bom": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, "peer": true, "requires": { @@ -26524,6 +31107,8 @@ }, "wrap-ansi": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", "dev": true, "peer": true, "requires": { @@ -26533,11 +31118,15 @@ }, "y18n": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", "dev": true, "peer": true }, "yargs": { "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", "dev": true, "peer": true, "requires": { @@ -26559,6 +31148,8 @@ }, "yargs-parser": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", "dev": true, "peer": true, "requires": { @@ -26570,11 +31161,15 @@ }, "@ensdomains/resolver": { "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", + "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", "dev": true, "peer": true }, "@eslint/eslintrc": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -26586,19 +31181,12 @@ "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } } }, "@ethereum-waffle/chai": { "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.4.4.tgz", + "integrity": "sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g==", "dev": true, "peer": true, "requires": { @@ -26608,6 +31196,8 @@ }, "@ethereum-waffle/compiler": { "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz", + "integrity": "sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==", "dev": true, "peer": true, "requires": { @@ -26626,6 +31216,8 @@ "dependencies": { "@typechain/ethers-v5": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", + "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", "dev": true, "peer": true, "requires": { @@ -26634,6 +31226,8 @@ }, "array-back": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", "dev": true, "peer": true, "requires": { @@ -26642,6 +31236,8 @@ }, "command-line-args": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", + "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", "dev": true, "peer": true, "requires": { @@ -26652,6 +31248,8 @@ }, "find-replace": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", + "integrity": "sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==", "dev": true, "peer": true, "requires": { @@ -26661,6 +31259,8 @@ "dependencies": { "array-back": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", "dev": true, "peer": true, "requires": { @@ -26669,78 +31269,18 @@ } } }, - "fs-extra": { - "version": "0.30.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "mkdirp": { - "version": "0.5.6", - "dev": true, - "peer": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.7.1", - "dev": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "dev": true, - "peer": true - }, - "solc": { - "version": "0.6.12", - "dev": true, - "peer": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - } - }, - "tmp": { - "version": "0.0.33", - "dev": true, - "peer": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "ts-essentials": { "version": "6.0.7", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", + "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", "dev": true, "peer": true, "requires": {} }, "typechain": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", + "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", "dev": true, "peer": true, "requires": { @@ -26751,35 +31291,12 @@ "lodash": "^4.17.15", "ts-essentials": "^6.0.3", "ts-generator": "^0.1.1" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - } } }, "typical": { "version": "2.6.1", - "dev": true, - "peer": true - }, - "universalify": { - "version": "0.1.2", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", "dev": true, "peer": true } @@ -26787,6 +31304,8 @@ }, "@ethereum-waffle/ens": { "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.4.4.tgz", + "integrity": "sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg==", "dev": true, "peer": true, "requires": { @@ -26797,6 +31316,8 @@ }, "@ethereum-waffle/mock-contract": { "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz", + "integrity": "sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA==", "dev": true, "peer": true, "requires": { @@ -26806,6 +31327,8 @@ }, "@ethereum-waffle/provider": { "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.4.4.tgz", + "integrity": "sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g==", "dev": true, "peer": true, "requires": { @@ -26818,6 +31341,9 @@ }, "@ethereumjs/block": { "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", + "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", + "dev": true, "requires": { "@ethereumjs/common": "^2.6.5", "@ethereumjs/tx": "^3.5.2", @@ -26827,6 +31353,9 @@ }, "@ethereumjs/blockchain": { "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", + "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", + "dev": true, "requires": { "@ethereumjs/block": "^3.6.2", "@ethereumjs/common": "^2.6.4", @@ -26836,21 +31365,13 @@ "level-mem": "^5.0.1", "lru-cache": "^5.1.1", "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1" - } } }, "@ethereumjs/common": { "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "dev": true, "requires": { "crc-32": "^1.2.0", "ethereumjs-util": "^7.1.5" @@ -26858,6 +31379,9 @@ }, "@ethereumjs/ethash": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", + "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", + "dev": true, "requires": { "@ethereumjs/block": "^3.5.0", "@types/levelup": "^4.3.0", @@ -26868,6 +31392,9 @@ "dependencies": { "buffer-xor": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", + "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "dev": true, "requires": { "safe-buffer": "^5.1.1" } @@ -26876,6 +31403,9 @@ }, "@ethereumjs/tx": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "dev": true, "requires": { "@ethereumjs/common": "^2.6.4", "ethereumjs-util": "^7.1.5" @@ -26883,6 +31413,9 @@ }, "@ethereumjs/vm": { "version": "5.9.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", + "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", + "dev": true, "requires": { "@ethereumjs/block": "^3.6.3", "@ethereumjs/blockchain": "^5.5.3", @@ -26900,6 +31433,8 @@ }, "@ethersproject/abi": { "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", "requires": { "@ethersproject/address": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", @@ -26914,6 +31449,8 @@ }, "@ethersproject/abstract-provider": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", "requires": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", @@ -26926,6 +31463,8 @@ }, "@ethersproject/abstract-signer": { "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", "requires": { "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", @@ -26936,6 +31475,8 @@ }, "@ethersproject/address": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", "requires": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", @@ -26946,12 +31487,16 @@ }, "@ethersproject/base64": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", "requires": { "@ethersproject/bytes": "^5.6.1" } }, "@ethersproject/basex": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", + "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", "requires": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/properties": "^5.6.0" @@ -26959,6 +31504,8 @@ }, "@ethersproject/bignumber": { "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", "requires": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", @@ -26967,18 +31514,24 @@ }, "@ethersproject/bytes": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", "requires": { "@ethersproject/logger": "^5.6.0" } }, "@ethersproject/constants": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", "requires": { "@ethersproject/bignumber": "^5.6.2" } }, "@ethersproject/contracts": { "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", "requires": { "@ethersproject/abi": "^5.6.3", "@ethersproject/abstract-provider": "^5.6.1", @@ -26994,6 +31547,8 @@ }, "@ethersproject/hash": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", "requires": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/address": "^5.6.1", @@ -27007,7 +31562,8 @@ }, "@ethersproject/hdnode": { "version": "5.6.2", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", + "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", "requires": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/basex": "^5.6.1", @@ -27025,7 +31581,8 @@ }, "@ethersproject/json-wallets": { "version": "5.6.1", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", + "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", "requires": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/address": "^5.6.1", @@ -27044,23 +31601,30 @@ }, "@ethersproject/keccak256": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", "requires": { "@ethersproject/bytes": "^5.6.1", "js-sha3": "0.8.0" } }, "@ethersproject/logger": { - "version": "5.6.0" + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" }, "@ethersproject/networks": { "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", "requires": { "@ethersproject/logger": "^5.6.0" } }, "@ethersproject/pbkdf2": { "version": "5.6.1", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", + "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", "requires": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/sha2": "^5.6.1" @@ -27068,12 +31632,16 @@ }, "@ethersproject/properties": { "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", "requires": { "@ethersproject/logger": "^5.6.0" } }, "@ethersproject/providers": { "version": "5.6.8", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", + "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", "requires": { "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/abstract-signer": "^5.6.2", @@ -27095,16 +31663,12 @@ "@ethersproject/web": "^5.6.1", "bech32": "1.1.4", "ws": "7.4.6" - }, - "dependencies": { - "ws": { - "version": "7.4.6", - "requires": {} - } } }, "@ethersproject/random": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", + "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", "requires": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0" @@ -27112,6 +31676,8 @@ }, "@ethersproject/rlp": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", "requires": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0" @@ -27119,6 +31685,8 @@ }, "@ethersproject/sha2": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", "requires": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", @@ -27127,6 +31695,8 @@ }, "@ethersproject/signing-key": { "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", "requires": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", @@ -27138,7 +31708,8 @@ }, "@ethersproject/solidity": { "version": "5.6.1", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", "requires": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", @@ -27150,6 +31721,8 @@ }, "@ethersproject/strings": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", "requires": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/constants": "^5.6.1", @@ -27158,6 +31731,8 @@ }, "@ethersproject/transactions": { "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", "requires": { "@ethersproject/address": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", @@ -27172,7 +31747,8 @@ }, "@ethersproject/units": { "version": "5.6.1", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", + "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", "requires": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/constants": "^5.6.1", @@ -27181,7 +31757,8 @@ }, "@ethersproject/wallet": { "version": "5.6.2", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", + "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", "requires": { "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/abstract-signer": "^5.6.2", @@ -27202,6 +31779,8 @@ }, "@ethersproject/web": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", "requires": { "@ethersproject/base64": "^5.6.1", "@ethersproject/bytes": "^5.6.1", @@ -27212,7 +31791,8 @@ }, "@ethersproject/wordlists": { "version": "5.6.1", - "dev": true, + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", + "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", "requires": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/hash": "^5.6.1", @@ -27227,46 +31807,74 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "@gnosis.pm/safe-core-sdk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.3.2.tgz", + "integrity": "sha512-XD50+AU7ahHwX0+YG8jeyqxrqNsEdLfCzAS5+9WkGuXMNm+K4jkJ9yBHN5yKAu5JXeCDYEQkjTSdVilm8ZLpXQ==", + "dev": true, + "requires": { + "@ethersproject/solidity": "^5.6.0", + "@gnosis.pm/safe-core-sdk-types": "^1.3.0", + "@gnosis.pm/safe-deployments": "1.15.0", + "ethereumjs-util": "^7.1.4", + "semver": "^7.3.5", + "web3-utils": "^1.7.1" + } + }, "@gnosis.pm/safe-core-sdk-types": { - "version": "1.1.0", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.4.0.tgz", + "integrity": "sha512-v+V6wqfFVgBl2sZ8FqCMwL/qFnr6wBCcJ/gllo4OvItYw/dmXlMCkxUrERoILSeHDezLkrWnnzA4tHfkEwYuwg==", "requires": { "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "^1.12.0", + "@gnosis.pm/safe-deployments": "1.15.0", "web3-core": "^1.7.1" } }, "@gnosis.pm/safe-core-sdk-utils": { - "version": "1.1.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.2.1.tgz", + "integrity": "sha512-VPnSLayGR4omwcNHPwzx8/aDyGXrWULKSF+ENeiWbmwgIhwQnB7T2gzhArNeUgt4BxmYft/HFm1MRSqiQnIQJw==", "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", + "@gnosis.pm/safe-core-sdk-types": "^1.2.1", + "semver": "^7.3.7", "web3-utils": "^1.7.1" } }, "@gnosis.pm/safe-deployments": { "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", + "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", "requires": { "semver": "^7.3.7" } }, "@gnosis.pm/safe-ethers-lib": { - "version": "1.1.0", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.4.0.tgz", + "integrity": "sha512-ImKNocwoJB19g9nEcorLG1FuYQZyK+llcCIShSw0R7f3OHi30gjcQJek/rJv+wKetM66s7Dz26xtb2X9ARN3Gg==", "dev": true, "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + "@gnosis.pm/safe-core-sdk-types": "^1.4.0", + "@gnosis.pm/safe-core-sdk-utils": "^1.2.1" } }, "@gnosis.pm/safe-web3-lib": { - "version": "1.1.0", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.4.0.tgz", + "integrity": "sha512-EnJ4I9+VCSiktdWqUDfND3KGLINGlV22NlIZIRl8uIOxlIe5pGqpxb8RNgZHLBxoQ6klkQizcNlS4sv846y9ew==", "dev": true, "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" + "@ethersproject/bignumber": "^5.6.0", + "@gnosis.pm/safe-core-sdk-types": "^1.4.0", + "@gnosis.pm/safe-core-sdk-utils": "^1.2.1" } }, "@humanwhocodes/config-array": { - "version": "0.9.5", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -27274,8 +31882,16 @@ "minimatch": "^3.0.4" } }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "@hutson/parse-repository-url": { @@ -27284,69 +31900,403 @@ "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", + "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/reporters": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.1.3", + "jest-config": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-resolve-dependencies": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "jest-watcher": "^28.1.3", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + } + } + }, + "@jest/environment": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", + "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3" + } + }, + "@jest/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "dev": true, + "requires": { + "expect": "^28.1.3", + "jest-snapshot": "^28.1.3" + } + }, + "@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2" + } + }, + "@jest/fake-timers": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", + "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "@jest/globals": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", + "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/types": "^28.1.3" + } + }, + "@jest/reporters": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", + "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, + "@jest/source-map": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.13", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", + "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "dev": true, + "requires": { + "@jest/test-result": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + } + }, + "@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true }, - "@jridgewell/resolve-uri": { - "version": "3.0.8", - "devOptional": true - }, "@jridgewell/sourcemap-codec": { "version": "1.4.14", - "devOptional": true + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.9", - "devOptional": true, + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@lerna/add": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.1.8.tgz", - "integrity": "sha512-ABplk8a5MmiT8lG1b9KHijRUwj/nOePMuezBHjJEpNeQ8Bw5w3IV/6hpdmApx/w1StBwWWf0UG42klrxXlfl/g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.3.0.tgz", + "integrity": "sha512-MxwTO2UBxZwwuquKbBqdYa56YTqg6Lfz1MZsRQxO7F2cb2NN8NEYTcGOli/71Ee/2AoX4R4xIFTh3TnaflQ25A==", "dev": true, "requires": { - "@lerna/bootstrap": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/npm-conf": "5.1.8", - "@lerna/validation-error": "5.1.8", + "@lerna/bootstrap": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/npm-conf": "5.3.0", + "@lerna/validation-error": "5.3.0", "dedent": "^0.7.0", - "npm-package-arg": "^8.1.0", + "npm-package-arg": "8.1.1", "p-map": "^4.0.0", - "pacote": "^13.4.1", + "pacote": "^13.6.1", "semver": "^7.3.4" } }, "@lerna/bootstrap": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.1.8.tgz", - "integrity": "sha512-/QZJc6aRxi6csSR59jdqRXPFh33fbn60F1k/SWtCCELGkZub23fAPLKaO7SlMcyghN3oKlfTfVymu/NWEcptJQ==", - "dev": true, - "requires": { - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/has-npm-version": "5.1.8", - "@lerna/npm-install": "5.1.8", - "@lerna/package-graph": "5.1.8", - "@lerna/pulse-till-done": "5.1.8", - "@lerna/rimraf-dir": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/symlink-binary": "5.1.8", - "@lerna/symlink-dependencies": "5.1.8", - "@lerna/validation-error": "5.1.8", - "@npmcli/arborist": "5.2.0", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.3.0.tgz", + "integrity": "sha512-iHVjt6YOQKLY0j+ex13a6ZxjIQ1TSSXqbl6z1hVjBFaDyCh7pra/tgj0LohZDVCaouLwRKucceQfTGrb+cfo7A==", + "dev": true, + "requires": { + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/has-npm-version": "5.3.0", + "@lerna/npm-install": "5.3.0", + "@lerna/package-graph": "5.3.0", + "@lerna/pulse-till-done": "5.3.0", + "@lerna/rimraf-dir": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/symlink-binary": "5.3.0", + "@lerna/symlink-dependencies": "5.3.0", + "@lerna/validation-error": "5.3.0", + "@npmcli/arborist": "5.3.0", "dedent": "^0.7.0", "get-port": "^5.1.1", "multimatch": "^5.0.0", - "npm-package-arg": "^8.1.0", + "npm-package-arg": "8.1.1", "npmlog": "^6.0.2", "p-map": "^4.0.0", "p-map-series": "^2.1.0", @@ -27355,32 +32305,32 @@ } }, "@lerna/changed": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.1.8.tgz", - "integrity": "sha512-JA9jX9VTHrwSMRJTgLEzdyyx4zi35X0yP6fUUFuli9a0zrB4HV4IowSn1XM03H8iebbDLB0eWBbosqhYwSP8Sw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.3.0.tgz", + "integrity": "sha512-i6ZfBDBZCpnPaSWTuNGTrnExkHNMC+/cSUuS9njaqe+tXgqE95Ja3cMxWZth9Q1uasjcEBHPU2jG0VKrU37rpA==", "dev": true, "requires": { - "@lerna/collect-updates": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/listable": "5.1.8", - "@lerna/output": "5.1.8" + "@lerna/collect-updates": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/listable": "5.3.0", + "@lerna/output": "5.3.0" } }, "@lerna/check-working-tree": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.1.8.tgz", - "integrity": "sha512-3QyiV75cYt9dtg9JhUt+Aiyk44mFjlyqIIJ/XZ2Cp/Xcwws/QrNKOTs5iYFX5XWzlpTgotOHcu1MH/mY55Czlw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.3.0.tgz", + "integrity": "sha512-qo6jUGWXKLVL1nU8aEECqwrGRjs9o1l1hXdD2juA4Fvzsam1cFVHJwsmw3hAXGhEPD0oalg/XR62H9rZSCLOvQ==", "dev": true, "requires": { - "@lerna/collect-uncommitted": "5.1.8", - "@lerna/describe-ref": "5.1.8", - "@lerna/validation-error": "5.1.8" + "@lerna/collect-uncommitted": "5.3.0", + "@lerna/describe-ref": "5.3.0", + "@lerna/validation-error": "5.3.0" } }, "@lerna/child-process": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.1.8.tgz", - "integrity": "sha512-P0o4Y/sdiUJ53spZpaVv53NdAcl15UAi5//W3uT2T250xQPlVROwKy11S3Wzqglh94FYdi6XUy293x1uwBlFPw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.3.0.tgz", + "integrity": "sha512-4uXPNIptrgQQQVHVVAXBD8F7IqSvZL3Og0G0DHiWKH+dsSyMIUtaIGJt7sifVoL7nzex4AqEiPq/AubpmG5g4Q==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -27389,68 +32339,85 @@ } }, "@lerna/clean": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.1.8.tgz", - "integrity": "sha512-xMExZgjan5/8ZTjJkZoLoTKY1MQOMk7W1YXslbg9BpLevBycPk041MlLauzCyO8XdOpqpVnFCg/9W66fltqmQg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.3.0.tgz", + "integrity": "sha512-Jn+Dr7A69dch8m1dLe7l/SDVQVQT2j7zdy2gaZVEmJIgEEaXmEbfJ2t2n06vRXtckI9B85M5mubT1U3Y7KuNuA==", "dev": true, "requires": { - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/prompt": "5.1.8", - "@lerna/pulse-till-done": "5.1.8", - "@lerna/rimraf-dir": "5.1.8", + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/prompt": "5.3.0", + "@lerna/pulse-till-done": "5.3.0", + "@lerna/rimraf-dir": "5.3.0", "p-map": "^4.0.0", "p-map-series": "^2.1.0", "p-waterfall": "^2.1.1" } }, "@lerna/cli": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.1.8.tgz", - "integrity": "sha512-0Ghhd9M9QvY6qZtnjTq5RHOIac2ttsW2VNFLFso8ov3YV+rJF4chLhyVaVBvLSA+5ZhwFH+xQ3/yeUx1tDO8GA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.3.0.tgz", + "integrity": "sha512-P7F3Xs98pXMEGZX+mnFfsd6gU03x8UrwQ3mElvQBICl4Ew9z6rS8NGUd3JOPFzm4/vSTjYTnPyPdWBjj6/f6sw==", "dev": true, "requires": { - "@lerna/global-options": "5.1.8", + "@lerna/global-options": "5.3.0", "dedent": "^0.7.0", "npmlog": "^6.0.2", "yargs": "^16.2.0" + }, + "dependencies": { + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } } }, "@lerna/collect-uncommitted": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.1.8.tgz", - "integrity": "sha512-pRsIYu82A3DxLahQI/3azoi/kjj6QSSHHAOx4y1YVefeDCaVtAm8aesNbpnyNVfJrie/1Gt5GMEpjfm/KScjlw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.3.0.tgz", + "integrity": "sha512-Ll/mU9Nes0NQoa0pSv2TR2PTCkIomBGuDWH48OF2sKKu69NuLjrD2L0udS5nJYig9HxFewtm4QTiUdYPxfJXkQ==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", + "@lerna/child-process": "5.3.0", "chalk": "^4.1.0", "npmlog": "^6.0.2" } }, "@lerna/collect-updates": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.1.8.tgz", - "integrity": "sha512-ZPQmYKzwDJ4T+t2fRUI/JjaCzC8Lv02kWIeSXrcIG+cf2xrbM0vK4iQMAKhagTsiWt9hrFwvtMgLp4a6+Ht8Qg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.3.0.tgz", + "integrity": "sha512-fzJo/rmdXKWKYt+9IXjtenIZtSr3blMH8GEqoVKpSZ7TJGpxcFNmMe6foa60BgaTnDmmg1y7Qu6JbQJ3Ra5c5w==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/describe-ref": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/describe-ref": "5.3.0", "minimatch": "^3.0.4", "npmlog": "^6.0.2", "slash": "^3.0.0" } }, "@lerna/command": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.1.8.tgz", - "integrity": "sha512-j/Q++APvkyN2t8GqOpK+4OxH1bB7OZGVWIKh0JQlwbtqH1Y06wlSyNdwpPmv8h1yO9fS1pY/xHwFbs1IicxwzA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.3.0.tgz", + "integrity": "sha512-UNQQ4EGTumqLhOuDPcRA4LpdS9pcTYKSdh/8MdKPeyIRN70vCTwdeTrxqaaKsn3Jo7ycvyUQT5yfrUFmCClfoA==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/package-graph": "5.1.8", - "@lerna/project": "5.1.8", - "@lerna/validation-error": "5.1.8", - "@lerna/write-log-file": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/package-graph": "5.3.0", + "@lerna/project": "5.3.0", + "@lerna/validation-error": "5.3.0", + "@lerna/write-log-file": "5.3.0", "clone-deep": "^4.0.1", "dedent": "^0.7.0", "execa": "^5.0.0", @@ -27459,157 +32426,277 @@ } }, "@lerna/conventional-commits": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.1.8.tgz", - "integrity": "sha512-UduSVDp/+2WlEV6ZO5s7yTzkfhYyPdEsqR6aaUtIJZe9wejcCK4Lc3BJ2BAYIOdtDArNY2CJPsz1LYvFDtPRkw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.3.0.tgz", + "integrity": "sha512-9uoQ2E1J7pL0fml5PNO7FydnBNeqrNOQa53Ca1Klf5t/x4vIn51ocOZNm/YbRAc/affnrxxp+gR2/SWlN0yKqQ==", "dev": true, "requires": { - "@lerna/validation-error": "5.1.8", + "@lerna/validation-error": "5.3.0", "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.2", + "conventional-changelog-core": "^4.2.4", "conventional-recommended-bump": "^6.1.0", "fs-extra": "^9.1.0", "get-stream": "^6.0.0", - "npm-package-arg": "^8.1.0", + "npm-package-arg": "8.1.1", "npmlog": "^6.0.2", "pify": "^5.0.0", "semver": "^7.3.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "@lerna/create": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.1.8.tgz", - "integrity": "sha512-n9qLLeg1e0bQeuk8pA8ELEP05Ktl50e1EirdXGRqqvaXdCn41nYHo4PilUgb77/o/t3Z5N4/ic+0w8OvGVakNg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.3.0.tgz", + "integrity": "sha512-DotTReCc3+Q9rpMA8RKAGemUK7JXT7skbxHvpqpPj7ryNkIv/dNAFC2EHglcpt9Rmyo6YbSP2zk0gfDbdiIcVA==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/npm-conf": "5.1.8", - "@lerna/validation-error": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/npm-conf": "5.3.0", + "@lerna/validation-error": "5.3.0", "dedent": "^0.7.0", "fs-extra": "^9.1.0", "globby": "^11.0.2", - "init-package-json": "^2.0.2", - "npm-package-arg": "^8.1.0", + "init-package-json": "^3.0.2", + "npm-package-arg": "8.1.1", "p-reduce": "^2.1.0", - "pacote": "^13.4.1", + "pacote": "^13.6.1", "pify": "^5.0.0", "semver": "^7.3.4", "slash": "^3.0.0", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0", + "validate-npm-package-name": "^4.0.0", "whatwg-url": "^8.4.0", "yargs-parser": "20.2.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "@lerna/create-symlink": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.1.8.tgz", - "integrity": "sha512-5acQITDsJ7dqywPRrF1mpTUPm/EXFfiv/xF6zX+ySUjp4h0Zhhnsm8g2jFdRPDSjIxFD0rV/5iU4X6qmflXlAg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.3.0.tgz", + "integrity": "sha512-xIoC9m4J/u4NV/8ms4P2fiimaYgialqJvNamvMDRmgE1c3BLDSGk2nE4nVI2W5LxjgJdMTiIH9v1QpTUC9Fv+Q==", "dev": true, "requires": { - "cmd-shim": "^4.1.0", + "cmd-shim": "^5.0.0", "fs-extra": "^9.1.0", "npmlog": "^6.0.2" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "@lerna/describe-ref": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.1.8.tgz", - "integrity": "sha512-/u5b2ho09icPcvPb1mlh/tPC07nSFc1cvvFjM9Yg5kfVs23vzVWeA8y0Bk5djlaaSzyHECyqviriX0aoaY47Wg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.3.0.tgz", + "integrity": "sha512-R+CtJcOuAF3kJ6GNQnGC3STEi+5OtpNVz2n17sAs/xqJnq79tPdzEhT+pMxB2eSEkQYlSr+cCKMpF0m/mtIPQA==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", + "@lerna/child-process": "5.3.0", "npmlog": "^6.0.2" } }, "@lerna/diff": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.1.8.tgz", - "integrity": "sha512-BLoi6l/v8p43IkAHTkpjZ4Kq27kYK7iti6y6gYoZuljSwNj38TjgqRb2ohHezQ5c0KFAj8xHEOuZM3Ou6tGyTQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.3.0.tgz", + "integrity": "sha512-i6f99dtO90u1QIJEfVtKE831m4gnMHBwY+4D84GY2SJMno8uI7ZyxMRZQh1nAFtvlNozO2MgzLr1OHtNMZOIgQ==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/validation-error": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/validation-error": "5.3.0", "npmlog": "^6.0.2" } }, "@lerna/exec": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.1.8.tgz", - "integrity": "sha512-U+owlBKoAUfULqRz0oBtHx/I6tYQy9I7xfPP0GoaXa8lpF7esnpCxsJG8GpdzFqIS30o6a2PtyHvp4jkrQF8Zw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.3.0.tgz", + "integrity": "sha512-kI/IuF1hbT+pEMZc3v4+w8BLckUIi45ipzOP0bWvXNgSKKuADAU3HLv+ifRXEjob5906C+Zc7K2IVoVS6r1TDg==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/profiler": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/validation-error": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/profiler": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/validation-error": "5.3.0", "p-map": "^4.0.0" } }, "@lerna/filter-options": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.1.8.tgz", - "integrity": "sha512-ene6xj1BRSFgIgcVg9xABp1cCiRnqm3Uetk9InxOtECbofpSDa7cQy5lsPv6GGAgXFbT91SURQiipH9FAOP+yQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.3.0.tgz", + "integrity": "sha512-ddgy0oDisTKIhCJ4WY5CeEhTsyrbW+zeBvZ7rVaG0oQXjSSYBried4TXRvgy67fampfHoPX+eQq5l1SYTRFPlw==", "dev": true, "requires": { - "@lerna/collect-updates": "5.1.8", - "@lerna/filter-packages": "5.1.8", + "@lerna/collect-updates": "5.3.0", + "@lerna/filter-packages": "5.3.0", "dedent": "^0.7.0", "npmlog": "^6.0.2" } }, "@lerna/filter-packages": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.1.8.tgz", - "integrity": "sha512-2pdtZ+I2Sb+XKfUa/q8flVUyaY0hhwqFYMXll7Nut7Phb1w1TtkEXc2/N0Ac1yia6qSJB/5WrsbAcLF/ITp1vA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.3.0.tgz", + "integrity": "sha512-5/2V50sQB2+JNwuCHP/UPm3y8PN2JWVY9CbNLtF3K5bymNsCkQh2KHEL9wlWZ4yfr/2ufpy4XFPaFUHNoUOGnQ==", "dev": true, "requires": { - "@lerna/validation-error": "5.1.8", + "@lerna/validation-error": "5.3.0", "multimatch": "^5.0.0", "npmlog": "^6.0.2" } }, "@lerna/get-npm-exec-opts": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.1.8.tgz", - "integrity": "sha512-oujoIkEDDVK2+5ooPMEPI+xGs/iwPmGJ63AZu1h7P42YU9tHKQmF5yPybF3Jn99W8+HggM6APUGiX+5oHRvKXA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.3.0.tgz", + "integrity": "sha512-cYBypDo8C7f4MvVvap2nYgtk8MXAADrYU1VdECSJ3Stbe4p2vBGt8bM9xkS2uPfQFMK3YSy3YPkSZcSjVXyoGw==", "dev": true, "requires": { "npmlog": "^6.0.2" } }, "@lerna/get-packed": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.1.8.tgz", - "integrity": "sha512-3vabIFlfUFQPbFnlOaDCNY4p7mufrhIFPoXxWu15JnjJsSDf9UB2a98xX43xNlxjgZLvnLai3bhCNfrKonI4Kw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.3.0.tgz", + "integrity": "sha512-kD12w7Ko5TThuOuPF2HBLyuPsHK3oyyWyzleGBqR4DqxMtbMRgimyTQnr5o58XBOwUPCFsv1EZiqeGk+3HTGEA==", "dev": true, "requires": { "fs-extra": "^9.1.0", - "ssri": "^8.0.1", + "ssri": "^9.0.1", "tar": "^6.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "@lerna/github-client": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.1.8.tgz", - "integrity": "sha512-y1oweMZ9xc/htIHy42hy2FuMUR/LS3CQlslXG9PAHzl5rE1VDDjvSv61kS50ZberGfB9xmkCxqH+2LgROG9B1A==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.3.0.tgz", + "integrity": "sha512-UqAclsWDMthmbv3Z8QE1K7D/4e93ytg31mc+nEj+UdU+xJQ0L1ypl8zWAmGNs1sFkQntIiTIB4W5zgHet5mmZw==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", + "@lerna/child-process": "5.3.0", "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^18.1.0", + "@octokit/rest": "^19.0.3", "git-url-parse": "^12.0.0", "npmlog": "^6.0.2" } }, "@lerna/gitlab-client": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.1.8.tgz", - "integrity": "sha512-/EMKdkGnBU4ldyAQ4pXp2TKi1znvY3MiCULt8Hy42p4HhfFl/AxZYDovQYfop1NHVk29BQrGHfvlpyBNqZ2a8g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.3.0.tgz", + "integrity": "sha512-otwbiaGDgvn5MGF1ypsCO48inMpdcxuiDlbxrKD6glPUwNHiGV+PU8LLCCDKimwjjQhl88ySLpL1oTm4jnZ1Aw==", "dev": true, "requires": { "node-fetch": "^2.6.1", @@ -27618,101 +32705,162 @@ } }, "@lerna/global-options": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.1.8.tgz", - "integrity": "sha512-VCfTilGh0O4T6Lk4DKYA5cUl1kPjwFfRUS/GSpdJx0Lf/dyDbFihrmTHefgUe9N2/nTQySDIdPk9HBr45tozWQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.3.0.tgz", + "integrity": "sha512-iEoFrDSU+KtfcB+lHW5grjg3VkEqzZNTUnWnE1FCBBwj9tSLOHjgKGtWWjIQtBUJ+qcLBbusap9Stqzr7UPYpQ==", "dev": true }, "@lerna/has-npm-version": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.1.8.tgz", - "integrity": "sha512-yN5j9gje2ND8zQf4tN52QDQ/yFb24o9Kasm4PZm99FzBURRIwFWCnvo3edOMaiJg0DpA660L+Kq9G0L+ZRKRZQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.3.0.tgz", + "integrity": "sha512-A/bK8e+QP/VMqZkq1wZbyOzMz/AY92tAVsBOQ5Yw2zqshdMVj99st3YHLOqJf/HTEzQo27GGI/ajmcltHS2l6A==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", + "@lerna/child-process": "5.3.0", "semver": "^7.3.4" } }, "@lerna/import": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.1.8.tgz", - "integrity": "sha512-m1+TEhlgS9i14T7o0/8o6FMZJ1O2PkQdpCjqUa5xdLITqvPozoMNujNgiX3ZVLg/XcFOjMtbCsYtspqtKyEsMQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.3.0.tgz", + "integrity": "sha512-KjVT9oFNSp1JLdrS1LSXjDcLiu2TMSfy6tpmhF9Zxo7oKB21SgWmXVV9rcWDueW2RIxNXDeVUG0NVNj2BRGeEQ==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/prompt": "5.1.8", - "@lerna/pulse-till-done": "5.1.8", - "@lerna/validation-error": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/prompt": "5.3.0", + "@lerna/pulse-till-done": "5.3.0", + "@lerna/validation-error": "5.3.0", "dedent": "^0.7.0", "fs-extra": "^9.1.0", "p-map-series": "^2.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "@lerna/info": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.1.8.tgz", - "integrity": "sha512-VNCBNOrd5Q1iv1MOF++PzMrdAnTn6KTDbb5hcXHdWBRZUuOs3QOwVYGzAlTFMvwVmmlcER4z8BYyUsbxk3sIdQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.3.0.tgz", + "integrity": "sha512-pyeZSM/PIpBHCXdHPrbh6sPZlngXUxhTVFb0VaIjQ5Ms585xi15s1UQDO3FvzqdyMyalx0QGzCJbNx5XeoCejg==", "dev": true, "requires": { - "@lerna/command": "5.1.8", - "@lerna/output": "5.1.8", + "@lerna/command": "5.3.0", + "@lerna/output": "5.3.0", "envinfo": "^7.7.4" } }, "@lerna/init": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.1.8.tgz", - "integrity": "sha512-vEMnq/70u/c031/vURA4pZSxlBRAwjg7vOP7mt9M4dmKz/vkVnQ/5Ig9K0TKqC31hQg957/4m20obYEiFgC3Pw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.3.0.tgz", + "integrity": "sha512-y46lzEtgMdEseTJGQQqYZOjqqd7iN+e14vFh/9q5h62V4Y8nlUJRzovVo8JSeaGwKLB0B3dq3BuUn0PNywMhpA==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/project": "5.3.0", "fs-extra": "^9.1.0", "p-map": "^4.0.0", "write-json-file": "^4.3.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "@lerna/link": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.1.8.tgz", - "integrity": "sha512-qOtZiMzB9JYyNPUlvpqTxh0Z1EmNVde8pFUIYybv+s3btrKEBPgsvvrOrob/mha3QJxnwcPDPjHt/wCHFxLruA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.3.0.tgz", + "integrity": "sha512-+QBwnGg3S8Zk8M8G5CA4kmGq92rkEMbmWJXaxie3jQayp+GXgSlLs6R4jwSOZlztY6xR3WawMI9sHJ0Vdu+g7w==", "dev": true, "requires": { - "@lerna/command": "5.1.8", - "@lerna/package-graph": "5.1.8", - "@lerna/symlink-dependencies": "5.1.8", + "@lerna/command": "5.3.0", + "@lerna/package-graph": "5.3.0", + "@lerna/symlink-dependencies": "5.3.0", "p-map": "^4.0.0", "slash": "^3.0.0" } }, "@lerna/list": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.1.8.tgz", - "integrity": "sha512-fVN9o/wKtgcOyuYwvYTg2HI6ORX2kOoBkCJ+PI/uZ/ImwLMTJ2Bf8i/Vsysl3bLFHhQFglzPZ7V1SQP/ku0Sdw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.3.0.tgz", + "integrity": "sha512-5RJvle3m4l2H0UmKNlwS8h2OIlNGsNTKPC4DYrJYt0+fhgzf5SEV1QKw+fuUqe3F8MziIkSGQB52HsjwPE6AWQ==", "dev": true, "requires": { - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/listable": "5.1.8", - "@lerna/output": "5.1.8" + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/listable": "5.3.0", + "@lerna/output": "5.3.0" } }, "@lerna/listable": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.1.8.tgz", - "integrity": "sha512-nQ/40cbVZLFBv8o9Dz6ivHFZhosfDTYOPm4oHNu0xdexaTXWz5bQUlM4HtOm7K0dJ1fvLEVqiQNAuFSEhARt9g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.3.0.tgz", + "integrity": "sha512-RdmeV9mDeuBOgVOlF/KNH/qttyiYwHbeqHiMAw9s9AfMo/Fz3iDZaTGZuruMm84TZSkKxI7m5mjTlC0djsyKog==", "dev": true, "requires": { - "@lerna/query-graph": "5.1.8", + "@lerna/query-graph": "5.3.0", "chalk": "^4.1.0", "columnify": "^1.6.0" } }, "@lerna/log-packed": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.1.8.tgz", - "integrity": "sha512-alaCIzCtKV5oKyu632emda0hUQMw/BcL2U3v4ObLu90sU8P7mu6TipKRvR9OZxOLDnZGnPE7CMHSU8gsQoIasw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.3.0.tgz", + "integrity": "sha512-tDuOot3vSOUSP7fNNej8UM0fah5oy8mKXe026grt4J0OP4L3rhSWxhfrDBQ3Ylh2dAjgHzscUf/vpnNC9HnhOQ==", "dev": true, "requires": { "byte-size": "^7.0.0", @@ -27722,9 +32870,9 @@ } }, "@lerna/npm-conf": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.1.8.tgz", - "integrity": "sha512-d/pIcO4RwO3fXNlUbhQ6+qwULxGSiW/xcOtiETVf4ZfjaDqjkCaIxZaeZfm5gWDtII5klpQn3f2d71FCnZG5lw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.3.0.tgz", + "integrity": "sha512-ejlypb90tvIsKUCb0fcOKt7wcPEjLdVK2zfbNs0M+UlRDLyRVOHUVdelJ15cRDNjQHzhBo2HBUKn5Fmm/2pcmg==", "dev": true, "requires": { "config-chain": "^1.1.12", @@ -27732,144 +32880,234 @@ } }, "@lerna/npm-dist-tag": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.1.8.tgz", - "integrity": "sha512-vZXO0/EClOzRRHHfqB4APhZkxiJpQbsQAAFwaXQCNJE+3S+I/MD0S3iiUWrNs4QnN/8Lj1KyzUfznVDXX7AIUQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.3.0.tgz", + "integrity": "sha512-OPahPk9QLXQXFgtrWm22NNxajVYKavCyTh8ijMwXTGXXbMJAw+PVjokfrUuEtg7FQi+kfJSrYAcJAxxfQq2eiA==", "dev": true, "requires": { - "@lerna/otplease": "5.1.8", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", + "@lerna/otplease": "5.3.0", + "npm-package-arg": "8.1.1", + "npm-registry-fetch": "^13.3.0", "npmlog": "^6.0.2" } }, "@lerna/npm-install": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.1.8.tgz", - "integrity": "sha512-AiYQyz4W1+NDeBw3qmdiiatfCtwtaGOi7zHtN1eAqheVTxEMuuYjNHt+8hu6nSpDFYtonz0NsKFvaqRJ5LbVmw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.3.0.tgz", + "integrity": "sha512-scbWo8nW+P9KfitWG3y7Ep97dOs64ECfz9xfqtjagEXKYBPxG3skvwwljkfNnuxrCNs71JVD+imvcewHzih28g==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/get-npm-exec-opts": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/get-npm-exec-opts": "5.3.0", "fs-extra": "^9.1.0", - "npm-package-arg": "^8.1.0", + "npm-package-arg": "8.1.1", "npmlog": "^6.0.2", "signal-exit": "^3.0.3", "write-pkg": "^4.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "@lerna/npm-publish": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.1.8.tgz", - "integrity": "sha512-Gup/1d8ovc21x3spKPhFK0tIYYn8HOjnpCAg5ytINIW1QM/QcLAigY58If8uiyt+aojz6lubWrSR8/OHf9CXBw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.3.0.tgz", + "integrity": "sha512-n+ocN1Dxrs6AmrSNqZl57cwhP4/VjQXdEI+QYauNnErNjMQW8Wt+tNaTlVAhZ1DnorwAo86o2uzFF/BgdUqh9A==", "dev": true, "requires": { - "@lerna/otplease": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", + "@lerna/otplease": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", "fs-extra": "^9.1.0", - "libnpmpublish": "^4.0.0", - "npm-package-arg": "^8.1.0", + "libnpmpublish": "^6.0.4", + "npm-package-arg": "8.1.1", "npmlog": "^6.0.2", "pify": "^5.0.0", - "read-package-json": "^3.0.0" + "read-package-json": "^5.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "@lerna/npm-run-script": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.1.8.tgz", - "integrity": "sha512-HzvukNC+hDIR25EpYWOvIGJItd0onXqzS9Ivdtw98ZQG3Jexi2Mn18A9tDqHOKCEGO3pVYrI9ep8VWkah2Bj1w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.3.0.tgz", + "integrity": "sha512-2cLR1YdzeMjaMKgDuwHE+iZgVPt+Ttzb3/wFtp7Mw9TlKmNIdbHdrnfl12ABz5knPC+62CCNjB/gznfLndPp2w==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/get-npm-exec-opts": "5.1.8", + "@lerna/child-process": "5.3.0", + "@lerna/get-npm-exec-opts": "5.3.0", "npmlog": "^6.0.2" } }, "@lerna/otplease": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.1.8.tgz", - "integrity": "sha512-/OVZ7Rbs8/ft14f4i/9HEFDsxJkBSg74rMUqyqFH3fID/RL3ja9hW5bI1bENxvYgs0bp/THy4lV5V75ZcI81zQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.3.0.tgz", + "integrity": "sha512-Xpju2VC5TiycmBP/mdp9hRstkH2MLm8/7o2NotVTCJwASWdKphRMqezhh5BX0E9i6VyrjzmTqSYEh9FNZZ9MwQ==", "dev": true, "requires": { - "@lerna/prompt": "5.1.8" + "@lerna/prompt": "5.3.0" } }, "@lerna/output": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.1.8.tgz", - "integrity": "sha512-dXsKY8X2eAdPKRKHDZTASlWn95Eav1oQX9doUXkvV3o4UwIgqOCIsU7RqSED3EAEQz6VUH0rXNb/+d3uVeAoJQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.3.0.tgz", + "integrity": "sha512-fISmHDu/9PKInFmT5NXsbh8cR6aE6SUXWrteXJ6PBYK30s0f/pVcfswb9VccX0Yea8HmqMQgCHWUWifkZeXiRA==", "dev": true, "requires": { "npmlog": "^6.0.2" } }, "@lerna/pack-directory": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.1.8.tgz", - "integrity": "sha512-aaH28ttS+JVimLFrVeZRWZ9Cii4GG2vkJXmQNikWBNQiFL/7S1x83NjMk4SQRdmtpYJkcQpQMZ2hDUdNxLnDCg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.3.0.tgz", + "integrity": "sha512-dTGMUB6/GjExhmLZ8yeFaRKJuSm6M/IsfxSJdL4gFPLigUIAS4XhzXS3KnL0+Ef1ue1yaTlAE9c/czfkE0pc/w==", "dev": true, "requires": { - "@lerna/get-packed": "5.1.8", - "@lerna/package": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", - "@lerna/temp-write": "5.1.8", - "npm-packlist": "^2.1.4", + "@lerna/get-packed": "5.3.0", + "@lerna/package": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", + "@lerna/temp-write": "5.3.0", + "npm-packlist": "^5.1.1", "npmlog": "^6.0.2", "tar": "^6.1.0" } }, "@lerna/package": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.1.8.tgz", - "integrity": "sha512-Ot+wu6XZ93tw8p9oSTJJA15TzGhVpo8VbgNhKPcI3JJjkxVq2D5L5jVeBkjQvFEQBonLibTr339uLLXyZ0RMzg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.3.0.tgz", + "integrity": "sha512-hsB03miiaNdvZ/UGzl0sVqxVat5x33EG9JiYgIoFqzroQPrG+WShmX3ctuO06TY1pxb4iNuHLPIbQomHEzzj8w==", "dev": true, "requires": { "load-json-file": "^6.2.0", - "npm-package-arg": "^8.1.0", + "npm-package-arg": "8.1.1", "write-pkg": "^4.0.0" } }, "@lerna/package-graph": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.1.8.tgz", - "integrity": "sha512-aGwXTwCpPfhUPiSRhdppogZjOqJPm39EBxHFDa1E0+/Qaig5avJs4hI6OrPLyjsTywAswtCMOArvD1QZqxwvrQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.3.0.tgz", + "integrity": "sha512-UEHY7l/yknwFvQgo0RifyY+B5QdzuFutLZYSN1BMmyWttOZD9rkM263qnLNGTZ2BUE4dXDwwwOHuhLvi+xDRsA==", "dev": true, "requires": { - "@lerna/prerelease-id-from-version": "5.1.8", - "@lerna/validation-error": "5.1.8", - "npm-package-arg": "^8.1.0", + "@lerna/prerelease-id-from-version": "5.3.0", + "@lerna/validation-error": "5.3.0", + "npm-package-arg": "8.1.1", "npmlog": "^6.0.2", "semver": "^7.3.4" } }, "@lerna/prerelease-id-from-version": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.1.8.tgz", - "integrity": "sha512-wfWv/8lHSk2/pl4FjopbDelFSLCz9s6J9AY5o7Sju9HtD9QUXcQHaXnEP1Rum9/rJZ8vWdFURcp9kzz8nxQ1Ow==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.3.0.tgz", + "integrity": "sha512-o1wsLns6hFTsmk4iqTRJNWLnFzlBBwgu17hp8T2iU4U7LUlDT2ZSKV3smGAU6GfrwX3MAp4LZ5syxgjFjrUOnw==", "dev": true, "requires": { "semver": "^7.3.4" } }, "@lerna/profiler": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.1.8.tgz", - "integrity": "sha512-vpAFN85BvMHfIGA53IcwaUnS9FHAismEnNyFCjMkzKV55mmXFZlWpZyO36ESdSQRWCo5/25f3Ln0Y6YubY3Dvw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.3.0.tgz", + "integrity": "sha512-LEZYca29EPgZR0q5E+7CJkn25Cw3OxNMQJU/CVn/HGeoWYWOpoDxujrZBl8is2bw06LHXvRbVXEUATLc+ACbqQ==", "dev": true, "requires": { "fs-extra": "^9.1.0", "npmlog": "^6.0.2", "upath": "^2.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "@lerna/project": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.1.8.tgz", - "integrity": "sha512-zTFp91kmyJ0VHBmNXEArVrMSZVxnBJ7pHTt8C7RY91WSZhw8XDNumqMHDM+kEM1z/AtDBAAAGqBE3sjk5ONDXQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.3.0.tgz", + "integrity": "sha512-InhIo9uwT1yod72ai5SKseJSUk8KkqG6COmwp1/45vibbawb7ZLbokpns7n46A0NdGNlmwJolamybYOuyumejw==", "dev": true, "requires": { - "@lerna/package": "5.1.8", - "@lerna/validation-error": "5.1.8", + "@lerna/package": "5.3.0", + "@lerna/validation-error": "5.3.0", "cosmiconfig": "^7.0.0", "dedent": "^0.7.0", "dot-prop": "^6.0.1", @@ -27880,163 +33118,301 @@ "p-map": "^4.0.0", "resolve-from": "^5.0.0", "write-json-file": "^4.3.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, "@lerna/prompt": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.1.8.tgz", - "integrity": "sha512-Cmq0FV/vyCHu00kySxXMfuPvutsi8qoME2/nFcICIktvDqxXr5aSFY8QqB123awNCbpb4xcHykjFnEj/RNdb2Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.3.0.tgz", + "integrity": "sha512-4bIusBdjpw665CJtFsVsaB55hLHnmKnrcOaRjna6N/MdJDl8Th6X4EM4rrfXTX/uUNR3XcV91lYqcLuLmrpm5w==", "dev": true, "requires": { - "inquirer": "^7.3.3", + "inquirer": "^8.2.4", "npmlog": "^6.0.2" } }, "@lerna/publish": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.1.8.tgz", - "integrity": "sha512-Q88WxXVNAh/ZWj7vYG83RZUfQyQlJMg7tDhsVTvZzy3VpkkCPtmJXZfX+g4RmE0PNyjsXx9QLYAOZnOB613WyA==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.1.8", - "@lerna/child-process": "5.1.8", - "@lerna/collect-updates": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/describe-ref": "5.1.8", - "@lerna/log-packed": "5.1.8", - "@lerna/npm-conf": "5.1.8", - "@lerna/npm-dist-tag": "5.1.8", - "@lerna/npm-publish": "5.1.8", - "@lerna/otplease": "5.1.8", - "@lerna/output": "5.1.8", - "@lerna/pack-directory": "5.1.8", - "@lerna/prerelease-id-from-version": "5.1.8", - "@lerna/prompt": "5.1.8", - "@lerna/pulse-till-done": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/validation-error": "5.1.8", - "@lerna/version": "5.1.8", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.3.0.tgz", + "integrity": "sha512-T8T1BQdI+NnlVARKwIXzILknEuiQlZToBsDpuX06M7+45t/pp9Z+u6pVt3rrqwiUPZ/dpoZzYKI31YdNJtGMcQ==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "5.3.0", + "@lerna/child-process": "5.3.0", + "@lerna/collect-updates": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/describe-ref": "5.3.0", + "@lerna/log-packed": "5.3.0", + "@lerna/npm-conf": "5.3.0", + "@lerna/npm-dist-tag": "5.3.0", + "@lerna/npm-publish": "5.3.0", + "@lerna/otplease": "5.3.0", + "@lerna/output": "5.3.0", + "@lerna/pack-directory": "5.3.0", + "@lerna/prerelease-id-from-version": "5.3.0", + "@lerna/prompt": "5.3.0", + "@lerna/pulse-till-done": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/validation-error": "5.3.0", + "@lerna/version": "5.3.0", "fs-extra": "^9.1.0", - "libnpmaccess": "^4.0.1", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", + "libnpmaccess": "^6.0.3", + "npm-package-arg": "8.1.1", + "npm-registry-fetch": "^13.3.0", "npmlog": "^6.0.2", "p-map": "^4.0.0", "p-pipe": "^3.1.0", - "pacote": "^13.4.1", + "pacote": "^13.6.1", "semver": "^7.3.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "@lerna/pulse-till-done": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.1.8.tgz", - "integrity": "sha512-KsyOazHG6wnjfdJhIdhTaTNwhj8Np/aPPei/ac9WzcuzgLS/uCs1IVFFIYBv5JdTmyVBKmguSZxdYjk7JzKBew==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.3.0.tgz", + "integrity": "sha512-yNvSuPLT1ZTtD2LMVOmiDhw4+9qkyf6xCpfxiUp4cGEN+qIuazWB5JicKLE49o27DBdaG8Ao4lAlb16x/gNrwQ==", "dev": true, "requires": { "npmlog": "^6.0.2" } }, "@lerna/query-graph": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.1.8.tgz", - "integrity": "sha512-+p+bjPI403Hwv1djTS5aJe7DtPWIDw0a427BE68h1mmrPc9oTe3GG+0lingbfGR8woA2rOmjytgK2jeErOryPg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.3.0.tgz", + "integrity": "sha512-t99lNj97/Vilp5Js1Be7MoyaZ5U0fbOFh0E7lnTfSLvZhTkPMK6xLvAx2M3NQqhwYCQjTFDuf9ozQ3HQtYZAmA==", "dev": true, "requires": { - "@lerna/package-graph": "5.1.8" + "@lerna/package-graph": "5.3.0" } }, "@lerna/resolve-symlink": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.1.8.tgz", - "integrity": "sha512-OJa8ct4Oo2BcD95FmJqkc5qZMepaQK5RZAWoTqEXG/13Gs0mPc0fZGIhnnpTqtm3mgNhlT7ypCHG42I7hKiSeg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.3.0.tgz", + "integrity": "sha512-zKI7rV5FzzlMBfi6kjDS0ulzcdDTORvdOJ/+CHU5C2h+v+P64Nk2VhZZNCCBDoO/l4GRhgehZOB70GIamO1TSw==", "dev": true, "requires": { "fs-extra": "^9.1.0", "npmlog": "^6.0.2", - "read-cmd-shim": "^2.0.0" + "read-cmd-shim": "^3.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "@lerna/rimraf-dir": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.1.8.tgz", - "integrity": "sha512-3pT1X8kzW8xHUuAmRgzSKAF+/H1h1eSWq5+ACzeTWnvgqE7++0URee7TXwVCP/5FZPTZIzIclQCh4G0WD9Jfjg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.3.0.tgz", + "integrity": "sha512-/QJebh0tSY3LjgEyOo+6NH/b7ZNw9IpjqiDtvnLixjtdfkgli1OKOoZTa4KrO0mJoqMRq4yAa98cjpIzyKqCqw==", "dev": true, "requires": { - "@lerna/child-process": "5.1.8", + "@lerna/child-process": "5.3.0", "npmlog": "^6.0.2", "path-exists": "^4.0.0", "rimraf": "^3.0.2" } }, "@lerna/run": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.1.8.tgz", - "integrity": "sha512-E5mI3FswVN9zQ3bCYUQxxPlLL400vnKpwLSzzRNFy//TR8Geu0LeR6NY+Jf0jklsKxwWGMJgqL6VqPqxDaNtdw==", - "dev": true, - "requires": { - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/npm-run-script": "5.1.8", - "@lerna/output": "5.1.8", - "@lerna/profiler": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/timer": "5.1.8", - "@lerna/validation-error": "5.1.8", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.3.0.tgz", + "integrity": "sha512-KwoKTj1w71OmUHONNYhZME+tr5lk9Q4f+3LUr2WtWZRuOAGO5ZCRrcZc+N4Ib7zno89Ub6Ovz51fcjwltLh72w==", + "dev": true, + "requires": { + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/npm-run-script": "5.3.0", + "@lerna/output": "5.3.0", + "@lerna/profiler": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/timer": "5.3.0", + "@lerna/validation-error": "5.3.0", "p-map": "^4.0.0" } }, "@lerna/run-lifecycle": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.1.8.tgz", - "integrity": "sha512-5rRpovujhLJufKRzMp5sl2BIIqrPeoXxjniQbzkpSxZ2vnD+bE9xOoaciHQxOsmXfXhza0C+k3xYMM5+B/bVzg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.3.0.tgz", + "integrity": "sha512-EuBCGwm2PLgkebfyqo3yNkwfSb1EzHeo3lA8t4yld6LXWkgUPBFhc7RwRc6TsQOpjpfFvDSGoI282R01o0jPVQ==", "dev": true, "requires": { - "@lerna/npm-conf": "5.1.8", - "@npmcli/run-script": "^3.0.2", - "npmlog": "^6.0.2" + "@lerna/npm-conf": "5.3.0", + "@npmcli/run-script": "^4.1.7", + "npmlog": "^6.0.2", + "p-queue": "^6.6.2" } }, "@lerna/run-topologically": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.1.8.tgz", - "integrity": "sha512-isuulfBdNsrgV2QF/HwCKCecfR9mPEU9N4Nf8n9nQQgakwOscoDlwGp2xv27pvcQKI52q/o/ISEjz3JeoEQiOA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.3.0.tgz", + "integrity": "sha512-WiFF2EiwLjAguKs0lEmcukTL7WhuWFwxNprrGWFxEkBhlGdMFk18n8BaZN8FO26xqzztzuPzSx1re/f/dEEAPg==", "dev": true, "requires": { - "@lerna/query-graph": "5.1.8", + "@lerna/query-graph": "5.3.0", "p-queue": "^6.6.2" } }, "@lerna/symlink-binary": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.1.8.tgz", - "integrity": "sha512-s7VfKNJZnWvTKZ7KR8Yxh1rYhE/ARMioD5axyu3FleS3Xsdla2M5sQsLouCrdfM3doTO8lMxPVvVSFmL7q0KOA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.3.0.tgz", + "integrity": "sha512-dIATASuGS6y512AGjacOoTpkFDPsKlhggjzL3KLdSNmxV3288nUqaFBuA7rTnnMNnBQ7jVuE1JKJupZnzPN0cA==", "dev": true, "requires": { - "@lerna/create-symlink": "5.1.8", - "@lerna/package": "5.1.8", + "@lerna/create-symlink": "5.3.0", + "@lerna/package": "5.3.0", "fs-extra": "^9.1.0", "p-map": "^4.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "@lerna/symlink-dependencies": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.1.8.tgz", - "integrity": "sha512-U5diiaKdWUlvoFMh3sYIEESBLa8Z3Q/EpkLl5o4YkcbPBjFHJFpmoqCGomwL9sf9HQUV2S9Lt9szJT8qgQm86Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.3.0.tgz", + "integrity": "sha512-qkq4YT/Bdrb3W22ve+d2Gy3hRTrtT/zBhjKTCukEpYsFJLwSjZ4z5vbv6J15/j6PN1Km9oTRp6vBYmdjAuARQQ==", "dev": true, "requires": { - "@lerna/create-symlink": "5.1.8", - "@lerna/resolve-symlink": "5.1.8", - "@lerna/symlink-binary": "5.1.8", + "@lerna/create-symlink": "5.3.0", + "@lerna/resolve-symlink": "5.3.0", + "@lerna/symlink-binary": "5.3.0", "fs-extra": "^9.1.0", "p-map": "^4.0.0", "p-map-series": "^2.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, "@lerna/temp-write": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.1.8.tgz", - "integrity": "sha512-4/guYB5XotugyM8P/F1z6b+hNlSCe/QuZsmiZwgXOw2lmYnkSzLWDVjqsdZtNYqojK0lioxcPjZiL5qnEkk1PQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.3.0.tgz", + "integrity": "sha512-AhC5Q+tV0yebEc1P2jsB4apQzztW8dgdLLc1G1Pkt46l5vezRGhZmsj+iUyCsVjpdUSO/UcAq1DbI2Xzhf5arg==", "dev": true, "requires": { "graceful-fs": "^4.1.15", @@ -28047,40 +33423,40 @@ } }, "@lerna/timer": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.1.8.tgz", - "integrity": "sha512-Ua4bw2YOO3U+sFujE+MsUG+lllU0X7u6PCTj1QKe0QlR0zr2gCa0pcwjUQPdNfxnpJpPY+hdbfTUv2viDloaiA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.3.0.tgz", + "integrity": "sha512-IeDjj1gJtbUPKl2ebpiml9u4k2kRqYF1Dbs6JuWpeC7lGxAx3JcUmkNH2RQ1BYTxk5xc9FKlgNMrZQwhq2K1Ow==", "dev": true }, "@lerna/validation-error": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.1.8.tgz", - "integrity": "sha512-n+IiaxN2b08ZMYnezsmwL6rXB15/VvweusC04GMh1XtWunnMzSg9JDM7y6bw2vfpBBQx6cBFhLKSpD2Fcq5D5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.3.0.tgz", + "integrity": "sha512-GVvnTxx+CNFjXCiJahAu2c/pP2R3DhGuQp4CJUyKegnzGaWK0h5PhlwRL7/LbDMPLh2zLobPOVr9kTOjwv76Nw==", "dev": true, "requires": { "npmlog": "^6.0.2" } }, "@lerna/version": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.1.8.tgz", - "integrity": "sha512-3f4P7KjIs6Gn2iaGkA5EASE9izZeDKtEzE8i2DE7YfVdw/P+EwFfKv2mKBXGbckYw42YO1tL6aD2QH0C8XbwlA==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.1.8", - "@lerna/child-process": "5.1.8", - "@lerna/collect-updates": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/conventional-commits": "5.1.8", - "@lerna/github-client": "5.1.8", - "@lerna/gitlab-client": "5.1.8", - "@lerna/output": "5.1.8", - "@lerna/prerelease-id-from-version": "5.1.8", - "@lerna/prompt": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/temp-write": "5.1.8", - "@lerna/validation-error": "5.1.8", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.3.0.tgz", + "integrity": "sha512-QOQSAdpeP66oQQ20nNZ4NhJS5NtZZDGyz36kP/4BeqjGK6QgtrEmto4+vmWj49w3VJUIXnrqAKHiPkhFUmJm5Q==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "5.3.0", + "@lerna/child-process": "5.3.0", + "@lerna/collect-updates": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/conventional-commits": "5.3.0", + "@lerna/github-client": "5.3.0", + "@lerna/gitlab-client": "5.3.0", + "@lerna/output": "5.3.0", + "@lerna/prerelease-id-from-version": "5.3.0", + "@lerna/prompt": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/temp-write": "5.3.0", + "@lerna/validation-error": "5.3.0", "chalk": "^4.1.0", "dedent": "^0.7.0", "load-json-file": "^6.2.0", @@ -28096,17 +33472,20 @@ } }, "@lerna/write-log-file": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.1.8.tgz", - "integrity": "sha512-B+shMH3TpzA7Q5GGbuNkOmdPQdD1LXRFj7R17LINkn82PhP9CUgubwYuiVzrLa16ADi0V5Ad76pqtHi/6kD0nA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.3.0.tgz", + "integrity": "sha512-cmrNAI5+9auUJSuTVrUzt2nb/KX6htgjdw7gGPMI1Tm6cdBIbs67R6LedZ8yvYOLGsXB2Se93vxv5fTgEHWfCw==", "dev": true, "requires": { "npmlog": "^6.0.2", - "write-file-atomic": "^3.0.3" + "write-file-atomic": "^4.0.1" } }, "@metamask/eth-sig-util": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dev": true, "requires": { "ethereumjs-abi": "^0.6.8", "ethereumjs-util": "^6.2.1", @@ -28117,15 +33496,24 @@ "dependencies": { "@types/bn.js": { "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, "requires": { "@types/node": "*" } }, "bn.js": { - "version": "4.12.0" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "ethereumjs-util": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, "requires": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -28138,8 +33526,22 @@ } } }, + "@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", + "dev": true + }, + "@noble/secp256k1": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", + "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", + "dev": true + }, "@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { "@nodelib/fs.stat": "2.0.5", @@ -28148,10 +33550,14 @@ }, "@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", @@ -28160,11 +33566,15 @@ }, "@nomiclabs/hardhat-ethers": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.0.tgz", + "integrity": "sha512-vlW90etB3675QWG7tMrHaDoTa7ymMB7irM4DAQ98g8zJoe9YqEggeDnbO6v5b+BLth/ty4vN6Ko/kaqRN1krHw==", "dev": true, "requires": {} }, "@nomiclabs/hardhat-waffle": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", + "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", "dev": true, "requires": { "@types/sinon-chai": "^3.2.3", @@ -28173,15 +33583,17 @@ }, "@nomiclabs/hardhat-web3": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz", + "integrity": "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==", "dev": true, "requires": { "@types/bignumber.js": "^5.0.0" } }, "@npmcli/arborist": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.2.0.tgz", - "integrity": "sha512-zWV7scFGL0SmpvfQyIWnMFbU/0YgtMNyvJiJwR98kyjUSntJGWFFR0O600d5W+TrDcTg0GyDbY+HdzGEg+GXLg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz", + "integrity": "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==", "dev": true, "requires": { "@isaacs/string-locale-compare": "^1.1.0", @@ -28192,7 +33604,7 @@ "@npmcli/name-from-folder": "^1.0.1", "@npmcli/node-gyp": "^2.0.0", "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.0", + "@npmcli/run-script": "^4.1.3", "bin-links": "^3.0.0", "cacache": "^16.0.6", "common-ancestor-path": "^1.0.1", @@ -28206,7 +33618,7 @@ "npm-pick-manifest": "^7.0.0", "npm-registry-fetch": "^13.0.0", "npmlog": "^6.0.2", - "pacote": "^13.0.5", + "pacote": "^13.6.1", "parse-conflict-json": "^2.0.1", "proc-log": "^2.0.0", "promise-all-reject-late": "^1.0.0", @@ -28220,21 +33632,6 @@ "walk-up-path": "^1.0.0" }, "dependencies": { - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, "hosted-git-info": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", @@ -28244,58 +33641,17 @@ "lru-cache": "^7.5.1" } }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, "lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", "dev": true }, - "make-fetch-happen": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", - "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - } - }, - "minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "npm-package-arg": { "version": "9.1.0", @@ -28308,63 +33664,13 @@ "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } - }, - "npm-registry-fetch": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", - "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", - "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } } } }, - "@npmcli/ci-detect": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz", - "integrity": "sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q==", - "dev": true - }, "@npmcli/fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", - "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.1.tgz", + "integrity": "sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg==", "dev": true, "requires": { "@gar/promisify": "^1.1.3", @@ -28389,9 +33695,15 @@ }, "dependencies": { "lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true } } @@ -28407,9 +33719,9 @@ } }, "@npmcli/map-workspaces": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz", - "integrity": "sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", + "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", "dev": true, "requires": { "@npmcli/name-from-folder": "^1.0.1", @@ -28471,6 +33783,14 @@ "requires": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } } }, "@npmcli/name-from-folder": { @@ -28504,33 +33824,34 @@ } }, "@npmcli/run-script": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz", - "integrity": "sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.0.tgz", + "integrity": "sha512-e/QgLg7j2wSJp1/7JRl0GC8c7PMX+uYlA/1Tb+IDOLdSM4T7K1VQ9mm9IGU3WRtY5vEIObpqCLb3aCNCug18DA==", "dev": true, "requires": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^8.4.1", - "read-package-json-fast": "^2.0.3" + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" } }, "@nrwl/cli": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.4.2.tgz", - "integrity": "sha512-JNV4kP9goZD4BlTQGKdKhCRc1bhiWYp1TaDJHdk4ZfhiLt1NzXNxxgc/eX2obFZ3Hw+KdM/gM5F7KfWBbtSGSw==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.2.tgz", + "integrity": "sha512-uriSxM33IpiBpW9kHEW3gw5OjPaQe3jHdWUMOT88TrqTlf449qe01Sys8+H2YgJMIcLTFYX0fP4V1K9jqKKZCg==", "dev": true, "requires": { - "nx": "14.4.2" + "nx": "14.5.2" } }, "@nrwl/tao": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.4.2.tgz", - "integrity": "sha512-Ygw3skKZfFhi4MBHZKQ8A67pDQxeyDdY78tFWViMN0SEn9ExL41Q8V9aSMfir8VZYGca6ZOXX5MRhbeHdcgMLQ==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.2.tgz", + "integrity": "sha512-SEx3SM7xQiB8mOQ/gCt7lFJKRrkq3rBX6FiV3bl+dQtuKK2zKQbyikY9r+MCZCQNqZAud3HJ2xCyKZBhK8htQg==", "dev": true, "requires": { - "nx": "14.4.2" + "nx": "14.5.2" } }, "@octokit/auth-token": { @@ -28538,7 +33859,6 @@ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", "dev": true, - "peer": true, "requires": { "@octokit/types": "^6.0.3" } @@ -28548,7 +33868,6 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", "dev": true, - "peer": true, "requires": { "@octokit/auth-token": "^3.0.0", "@octokit/graphql": "^5.0.0", @@ -28564,7 +33883,6 @@ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", "dev": true, - "peer": true, "requires": { "@octokit/types": "^6.0.3", "is-plain-object": "^5.0.0", @@ -28576,7 +33894,6 @@ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", "dev": true, - "peer": true, "requires": { "@octokit/request": "^6.0.0", "@octokit/types": "^6.0.3", @@ -28584,9 +33901,9 @@ } }, "@octokit/openapi-types": { - "version": "12.8.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.8.0.tgz", - "integrity": "sha512-ydcKLs2KKcxlhpdWLzJxEBDEk/U5MUeqtqkXlrtAUXXFPs6vLl1PEGghFC/BbpleosB7iXs0Z4P2DGe7ZT5ZNg==", + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", "dev": true }, "@octokit/plugin-enterprise-rest": { @@ -28596,12 +33913,12 @@ "dev": true }, "@octokit/plugin-paginate-rest": { - "version": "2.21.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.2.tgz", - "integrity": "sha512-S24H0a6bBVreJtoTaRHT/gnVASbOHVTRMOVIqd9zrJBP3JozsxJB56TDuTUmd1xLI4/rAE2HNmThvVKtIdLLEw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz", + "integrity": "sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==", "dev": true, "requires": { - "@octokit/types": "^6.39.0" + "@octokit/types": "^6.41.0" } }, "@octokit/plugin-request-log": { @@ -28612,21 +33929,20 @@ "requires": {} }, "@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.2.0.tgz", + "integrity": "sha512-PZ+yfkbZAuRUtqu6Y191/V3eM0KBPx+Yq7nh+ONPdpm3EX4pd5UnK2y2XgO/0AtNum5a4aJCDjqsDuUZ2hWRXw==", "dev": true, "requires": { - "@octokit/types": "^6.39.0", + "@octokit/types": "^6.41.0", "deprecation": "^2.3.1" } }, "@octokit/request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.1.0.tgz", - "integrity": "sha512-36V+sP4bJli31TRq8sea3d/Q1XGgZ9cnqpsegkLCnvpu+hoYephSkxGlWg4KB6dyUM1IWPXVrLFOKYzObQ+MZg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.0.tgz", + "integrity": "sha512-7IAmHnaezZrgUqtRShMlByJK33MT9ZDnMRgZjnRrRV9a/jzzFwKGz0vxhFU6i7VMLraYcQ1qmcAOin37Kryq+Q==", "dev": true, - "peer": true, "requires": { "@octokit/endpoint": "^7.0.0", "@octokit/request-error": "^3.0.0", @@ -28641,7 +33957,6 @@ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", "dev": true, - "peer": true, "requires": { "@octokit/types": "^6.0.3", "deprecation": "^2.0.0", @@ -28649,101 +33964,30 @@ } }, "@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", + "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", "dev": true, "requires": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/core": "^4.0.0", + "@octokit/plugin-paginate-rest": "^3.0.0", "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" - }, - "dependencies": { - "@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3" - } - }, - "@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "dev": true, - "requires": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", - "dev": true, - "requires": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", - "dev": true, - "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - } + "@octokit/plugin-rest-endpoint-methods": "^6.0.0" } }, "@octokit/types": { - "version": "6.39.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.39.0.tgz", - "integrity": "sha512-Mq4N9sOAYCitTsBtDdRVrBE80lIrMBhL9Jbrw0d+j96BAzlq4V+GLHFJbHokEsVvO/9tQupQdoFdgVYhD2C8UQ==", + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", "dev": true, "requires": { - "@octokit/openapi-types": "^12.7.0" + "@octokit/openapi-types": "^12.11.0" } }, "@openzeppelin/contracts": { - "version": "4.7.0" + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.2.tgz", + "integrity": "sha512-4n/JL9izql8303mPqPdubuna/DWEMbmOzWYUWyCPhjhiEr2w3nQrjE7vZz1fBF+wzzP6dZbIcsgqACk53c9FGA==" }, "@parcel/watcher": { "version": "2.0.4", @@ -28753,10 +33997,20 @@ "requires": { "node-addon-api": "^3.2.1", "node-gyp-build": "^4.3.0" + }, + "dependencies": { + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + } } }, "@resolver-engine/core": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz", + "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==", "dev": true, "peer": true, "requires": { @@ -28767,6 +34021,8 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "peer": true, "requires": { @@ -28777,6 +34033,8 @@ }, "@resolver-engine/fs": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz", + "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==", "dev": true, "peer": true, "requires": { @@ -28786,6 +34044,8 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "peer": true, "requires": { @@ -28796,6 +34056,8 @@ }, "@resolver-engine/imports": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz", + "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==", "dev": true, "peer": true, "requires": { @@ -28808,21 +34070,20 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "peer": true, "requires": { "ms": "^2.1.1" } - }, - "hosted-git-info": { - "version": "2.8.9", - "dev": true, - "peer": true } } }, "@resolver-engine/imports-fs": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz", + "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==", "dev": true, "peer": true, "requires": { @@ -28833,6 +34094,8 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "peer": true, "requires": { @@ -28841,49 +34104,73 @@ } } }, + "@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "dev": true + }, + "@scure/bip32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", + "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", + "dev": true, + "requires": { + "@noble/hashes": "~1.1.1", + "@noble/secp256k1": "~1.6.0", + "@scure/base": "~1.1.0" + } + }, + "@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", + "dev": true, + "requires": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" + } + }, "@sentry/core": { "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, "requires": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } } }, "@sentry/hub": { "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, "requires": { "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } } }, "@sentry/minimal": { "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, "requires": { "@sentry/hub": "5.30.0", "@sentry/types": "5.30.0", "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } } }, "@sentry/node": { "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, "requires": { "@sentry/core": "5.30.0", "@sentry/hub": "5.30.0", @@ -28894,86 +34181,121 @@ "https-proxy-agent": "^5.0.0", "lru_map": "^0.3.3", "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } } }, "@sentry/tracing": { "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, "requires": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } } }, "@sentry/types": { - "version": "5.30.0" + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true }, "@sentry/utils": { "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, "requires": { "@sentry/types": "5.30.0", "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } } }, + "@sinclair/typebox": { + "version": "0.24.27", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.27.tgz", + "integrity": "sha512-K7C7IlQ3zLePEZleUN21ceBA2aLcMnLHTLph8QWk1JK37L90obdpY+QGY8bXMKxf1ht1Z0MNewvXxWv0oGDYFg==", + "dev": true + }, "@sindresorhus/is": { - "version": "0.14.0", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, "peer": true }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, "@solidity-parser/parser": { - "version": "0.14.2", + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", + "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", + "dev": true, "requires": { "antlr4ts": "^0.5.0-alpha.4" } }, "@szmarczak/http-timer": { - "version": "1.1.2", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, "peer": true, "requires": { - "defer-to-connect": "^1.0.1" + "defer-to-connect": "^2.0.1" } }, "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true }, "@tsconfig/node10": { "version": "1.0.9", - "devOptional": true + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true }, "@tsconfig/node12": { "version": "1.0.11", - "devOptional": true + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true }, "@tsconfig/node14": { "version": "1.0.3", - "devOptional": true + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true }, "@tsconfig/node16": { "version": "1.0.3", - "devOptional": true + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true }, "@typechain/ethers-v5": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz", + "integrity": "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==", "dev": true, "requires": { "lodash": "^4.17.15", @@ -28981,10 +34303,56 @@ } }, "@types/abstract-leveldown": { - "version": "7.2.0" + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } }, "@types/bignumber.js": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", + "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==", "dev": true, "requires": { "bignumber.js": "*" @@ -28992,23 +34360,91 @@ }, "@types/bn.js": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", "requires": { "@types/node": "*" } }, + "@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "peer": true, + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, "@types/chai": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", "dev": true }, "@types/chai-as-promised": { "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", "dev": true, "requires": { "@types/chai": "*" } }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true, + "peer": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", + "dev": true, + "peer": true + }, "@types/json-schema": { "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "@types/json5": { @@ -29017,11 +34453,27 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, "@types/level-errors": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", + "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", + "dev": true }, "@types/levelup": { "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", + "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", + "dev": true, "requires": { "@types/abstract-leveldown": "*", "@types/level-errors": "*", @@ -29029,7 +34481,10 @@ } }, "@types/lru-cache": { - "version": "5.1.1" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true }, "@types/minimatch": { "version": "3.0.5", @@ -29045,6 +34500,8 @@ }, "@types/mkdirp": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", + "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", "dev": true, "requires": { "@types/node": "*" @@ -29052,13 +34509,19 @@ }, "@types/mocha": { "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", "dev": true }, "@types/node": { - "version": "18.0.1" + "version": "18.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", + "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==" }, "@types/node-fetch": { "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", "dev": true, "requires": { "@types/node": "*", @@ -29079,29 +34542,49 @@ }, "@types/pbkdf2": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", "requires": { "@types/node": "*" } }, "@types/prettier": { - "version": "2.6.3", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz", + "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==", "dev": true }, "@types/resolve": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", "dev": true, "requires": { "@types/node": "*" } }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, "@types/secp256k1": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", "requires": { "@types/node": "*" } }, "@types/sinon": { - "version": "10.0.12", + "version": "10.0.13", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", + "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", "dev": true, "requires": { "@types/sinonjs__fake-timers": "*" @@ -29109,6 +34592,8 @@ }, "@types/sinon-chai": { "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", "dev": true, "requires": { "@types/chai": "*", @@ -29117,27 +34602,56 @@ }, "@types/sinonjs__fake-timers": { "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "@types/underscore": { "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", + "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", "dev": true }, "@types/web3": { "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", + "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", "dev": true, "requires": { "@types/bn.js": "*", "@types/underscore": "*" } }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, "@typescript-eslint/eslint-plugin": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz", + "integrity": "sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.30.6", - "@typescript-eslint/type-utils": "5.30.6", - "@typescript-eslint/utils": "5.30.6", + "@typescript-eslint/scope-manager": "5.32.0", + "@typescript-eslint/type-utils": "5.32.0", + "@typescript-eslint/utils": "5.32.0", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -29147,42 +34661,52 @@ } }, "@typescript-eslint/parser": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.32.0.tgz", + "integrity": "sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.30.6", - "@typescript-eslint/types": "5.30.6", - "@typescript-eslint/typescript-estree": "5.30.6", + "@typescript-eslint/scope-manager": "5.32.0", + "@typescript-eslint/types": "5.32.0", + "@typescript-eslint/typescript-estree": "5.32.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz", + "integrity": "sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.6", - "@typescript-eslint/visitor-keys": "5.30.6" + "@typescript-eslint/types": "5.32.0", + "@typescript-eslint/visitor-keys": "5.32.0" } }, "@typescript-eslint/type-utils": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz", + "integrity": "sha512-0gSsIhFDduBz3QcHJIp3qRCvVYbqzHg8D6bHFsDMrm0rURYDj+skBK2zmYebdCp+4nrd9VWd13egvhYFJj/wZg==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.30.6", + "@typescript-eslint/utils": "5.32.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz", + "integrity": "sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz", + "integrity": "sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.6", - "@typescript-eslint/visitor-keys": "5.30.6", + "@typescript-eslint/types": "5.32.0", + "@typescript-eslint/visitor-keys": "5.32.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -29191,30 +34715,39 @@ } }, "@typescript-eslint/utils": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.32.0.tgz", + "integrity": "sha512-W7lYIAI5Zlc5K082dGR27Fczjb3Q57ECcXefKU/f0ajM5ToM0P+N9NmJWip8GmGu/g6QISNT+K6KYB+iSHjXCQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.6", - "@typescript-eslint/types": "5.30.6", - "@typescript-eslint/typescript-estree": "5.30.6", + "@typescript-eslint/scope-manager": "5.32.0", + "@typescript-eslint/types": "5.32.0", + "@typescript-eslint/typescript-estree": "5.32.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.30.6", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz", + "integrity": "sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g==", "dev": true, "requires": { - "@typescript-eslint/types": "5.30.6", + "@typescript-eslint/types": "5.32.0", "eslint-visitor-keys": "^3.3.0" } }, "@ungap/promise-all-settled": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true }, "@yarnpkg/lockfile": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true, "peer": true }, @@ -29226,12 +34759,23 @@ }, "abort-controller": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, "requires": { "event-target-shim": "^5.0.0" } }, + "abortcontroller-polyfill": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", + "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==" + }, "abstract-leveldown": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", + "dev": true, "requires": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -29242,6 +34786,8 @@ }, "accepts": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "peer": true, "requires": { @@ -29250,17 +34796,23 @@ } }, "acorn": { - "version": "8.7.1", - "devOptional": true + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true }, "acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, "acorn-walk": { "version": "8.2.0", - "devOptional": true + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true }, "add-stream": { "version": "1.0.0", @@ -29269,14 +34821,21 @@ "dev": true }, "adm-zip": { - "version": "0.4.16" + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true }, "aes-js": { "version": "3.0.0", - "dev": true + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" }, "agent-base": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "requires": { "debug": "4" } @@ -29294,6 +34853,9 @@ }, "aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -29301,6 +34863,8 @@ }, "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -29310,33 +34874,54 @@ } }, "ansi-colors": { - "version": "4.1.3" + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true }, "ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "requires": { "type-fest": "^0.21.3" }, "dependencies": { "type-fest": { - "version": "0.21.3" + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true } } }, "ansi-regex": { - "version": "5.0.1" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } }, "antlr4ts": { - "version": "0.5.0-alpha.4" + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true }, "anymatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -29349,9 +34934,9 @@ "dev": true }, "are-we-there-yet": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", - "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "dev": true, "requires": { "delegates": "^1.0.0", @@ -29360,13 +34945,20 @@ }, "arg": { "version": "4.1.3", - "devOptional": true + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, "argparse": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "array-back": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true }, "array-differ": { @@ -29377,6 +34969,8 @@ }, "array-flatten": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true, "peer": true }, @@ -29388,6 +34982,8 @@ }, "array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, "arrify": { @@ -29404,6 +35000,8 @@ }, "asn1": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "peer": true, "requires": { @@ -29412,6 +35010,8 @@ }, "asn1.js": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "peer": true, "requires": { @@ -29423,6 +35023,8 @@ "dependencies": { "bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, "peer": true } @@ -29430,36 +35032,52 @@ }, "assert-plus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, "peer": true }, "assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, "astral-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, "requires": { "lodash": "^4.17.14" } }, "async-eventemitter": { "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "dev": true, "requires": { "async": "^2.4.0" } }, "async-limiter": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true, "peer": true }, "asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, "at-least-node": { @@ -29469,32 +35087,118 @@ "dev": true }, "available-typed-arrays": { - "version": "1.0.5" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" }, "aws-sign2": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, "peer": true }, "aws4": { "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true, "peer": true }, + "babel-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", + "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "dev": true, + "requires": { + "@jest/transform": "^28.1.3", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.1.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", + "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", + "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^28.1.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, "balanced-match": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "base-x": { "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", "requires": { "safe-buffer": "^5.0.1" } }, "base64-js": { - "version": "1.5.1" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, "peer": true, "requires": { @@ -29503,13 +35207,17 @@ "dependencies": { "tweetnacl": { "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true, "peer": true } } }, "bech32": { - "version": "1.1.4" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, "before-after-hook": { "version": "2.2.2", @@ -29518,7 +35226,9 @@ "dev": true }, "bignumber.js": { - "version": "9.0.2" + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" }, "bin-links": { "version": "3.0.1", @@ -29532,37 +35242,13 @@ "read-cmd-shim": "^3.0.0", "rimraf": "^3.0.0", "write-file-atomic": "^4.0.0" - }, - "dependencies": { - "cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", - "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", - "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "read-cmd-shim": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", - "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - } } }, "binary-extensions": { - "version": "2.2.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true }, "bl": { "version": "4.1.0", @@ -29576,18 +35262,26 @@ } }, "blakejs": { - "version": "1.2.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" }, "bluebird": { "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true, "peer": true }, "bn.js": { - "version": "5.2.1" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "body-parser": { "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "peer": true, "requires": { @@ -29607,6 +35301,8 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "peer": true, "requires": { @@ -29615,24 +35311,22 @@ }, "depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "peer": true }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "peer": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "peer": true }, "qs": { "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "peer": true, "requires": { @@ -29643,6 +35337,9 @@ }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -29650,18 +35347,28 @@ }, "braces": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { "fill-range": "^7.0.1" } }, "brorand": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "browser-stdout": { - "version": "1.3.1" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "browserify-aes": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -29673,6 +35380,8 @@ }, "browserify-cipher": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "peer": true, "requires": { @@ -29683,6 +35392,8 @@ }, "browserify-des": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "peer": true, "requires": { @@ -29694,6 +35405,8 @@ }, "browserify-rsa": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "peer": true, "requires": { @@ -29703,6 +35416,8 @@ }, "browserify-sign": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "peer": true, "requires": { @@ -29717,49 +35432,89 @@ "safe-buffer": "^5.2.0" } }, + "browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, "bs58": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "requires": { "base-x": "^3.0.2" } }, "bs58check": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "requires": { "bs58": "^4.0.0", "create-hash": "^1.1.0", "safe-buffer": "^5.1.2" } }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, "buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "buffer-from": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "buffer-to-arraybuffer": { "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", "dev": true, "peer": true }, "buffer-xor": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "bufferutil": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", "requires": { "node-gyp-build": "^4.3.0" } }, "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } }, "byte-size": { "version": "7.0.1", @@ -29768,7 +35523,10 @@ "dev": true }, "bytes": { - "version": "3.1.2" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true }, "cacache": { "version": "16.1.1", @@ -29819,9 +35577,9 @@ } }, "lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", "dev": true }, "minimatch": { @@ -29833,33 +35591,41 @@ "brace-expansion": "^2.0.1" } }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true } } }, + "cacheable-lookup": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz", + "integrity": "sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A==", + "dev": true, + "peer": true + }, "cacheable-request": { - "version": "6.1.0", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, "peer": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", + "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, "dependencies": { "get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "peer": true, "requires": { @@ -29868,11 +35634,8 @@ }, "lowercase-keys": { "version": "2.0.0", - "dev": true, - "peer": true - }, - "normalize-url": { - "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, "peer": true } @@ -29880,6 +35643,8 @@ }, "call-bind": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -29887,6 +35652,8 @@ }, "callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camelcase": { @@ -29906,13 +35673,23 @@ "quick-lru": "^4.0.1" } }, + "caniuse-lite": { + "version": "1.0.30001374", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz", + "integrity": "sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw==", + "dev": true + }, "caseless": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true, "peer": true }, "chai": { "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", "dev": true, "requires": { "assertion-error": "^1.1.0", @@ -29926,18 +35703,29 @@ }, "chai-as-promised": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, "requires": { "check-error": "^1.0.2" } }, "chalk": { - "version": "4.1.0", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -29946,10 +35734,15 @@ }, "check-error": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true }, "chokidar": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -29959,6 +35752,17 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "chownr": { @@ -29968,10 +35772,15 @@ "dev": true }, "ci-info": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, "cids": { "version": "0.7.5", + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", "dev": true, "peer": true, "requires": { @@ -29984,6 +35793,8 @@ "dependencies": { "multicodec": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", "dev": true, "peer": true, "requires": { @@ -29995,21 +35806,36 @@ }, "cipher-base": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, "class-is": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", "dev": true, "peer": true }, "clean-stack": { - "version": "2.2.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true }, "cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { "restore-cursor": "^3.1.0" @@ -30023,6 +35849,8 @@ }, "cli-truncate": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "requires": { "slice-ansi": "^5.0.0", @@ -30031,14 +35859,20 @@ "dependencies": { "ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true }, "emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "requires": { "eastasianwidth": "^0.2.0", @@ -30048,6 +35882,8 @@ }, "strip-ansi": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, "requires": { "ansi-regex": "^6.0.1" @@ -30063,12 +35899,21 @@ }, "cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -30092,7 +35937,9 @@ } }, "clone-response": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "peer": true, "requires": { @@ -30100,27 +35947,47 @@ } }, "cmd-shim": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", - "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", + "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", "dev": true, "requires": { "mkdirp-infer-owner": "^2.0.0" } }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, "code-point-at": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, "peer": true }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "color-support": { "version": "1.1.3", @@ -30130,6 +35997,8 @@ }, "colorette": { "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, "columnify": { @@ -30144,16 +36013,23 @@ }, "combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "command-exists": { - "version": "1.2.9" + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true }, "command-line-args": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, "requires": { "array-back": "^3.1.0", @@ -30164,6 +36040,8 @@ }, "command-line-usage": { "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", "dev": true, "requires": { "array-back": "^4.0.2", @@ -30174,6 +36052,8 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -30181,10 +36061,14 @@ }, "array-back": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true }, "chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -30194,6 +36078,8 @@ }, "color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" @@ -30201,14 +36087,26 @@ }, "color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -30216,12 +36114,17 @@ }, "typical": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true } } }, "commander": { - "version": "3.0.2" + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", + "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "dev": true }, "common-ancestor-path": { "version": "1.0.1", @@ -30250,8 +36153,22 @@ } } }, + "compress-brotli": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", + "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", + "dev": true, + "peer": true, + "requires": { + "@types/json-buffer": "~3.0.0", + "json-buffer": "~3.0.1" + } + }, "concat-map": { - "version": "0.0.1" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "concat-stream": { "version": "2.0.0", @@ -30283,6 +36200,8 @@ }, "content-disposition": { "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "peer": true, "requires": { @@ -30291,6 +36210,8 @@ }, "content-hash": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", "dev": true, "peer": true, "requires": { @@ -30301,6 +36222,8 @@ }, "content-type": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true, "peer": true }, @@ -30407,28 +36330,52 @@ "q": "^1.5.1" } }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, "cookie": { - "version": "0.4.2" + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true }, "cookie-signature": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true, "peer": true }, - "cookiejar": { - "version": "2.1.3" - }, "core-js-pure": { - "version": "3.23.3" + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.1.tgz", + "integrity": "sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg==", + "dev": true }, "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, "cors": { "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, "peer": true, "requires": { @@ -30450,10 +36397,15 @@ } }, "crc-32": { - "version": "1.2.2" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true }, "create-ecdh": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "peer": true, "requires": { @@ -30463,6 +36415,8 @@ "dependencies": { "bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, "peer": true } @@ -30470,6 +36424,8 @@ }, "create-hash": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -30480,6 +36436,8 @@ }, "create-hmac": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -30491,10 +36449,22 @@ }, "create-require": { "version": "1.1.1", - "devOptional": true + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "requires": { + "node-fetch": "2.6.7" + } }, "cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -30504,6 +36474,8 @@ }, "crypto-browserify": { "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "peer": true, "requires": { @@ -30522,6 +36494,8 @@ }, "d": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "requires": { "es5-ext": "^0.10.50", "type": "^1.0.1" @@ -30535,6 +36509,8 @@ }, "dashdash": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, "peer": true, "requires": { @@ -30549,6 +36525,9 @@ }, "debug": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "requires": { "ms": "2.1.2" } @@ -30561,6 +36540,8 @@ }, "decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true }, "decamelize-keys": { @@ -30583,15 +36564,28 @@ }, "decode-uri-component": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", "dev": true, "peer": true }, "decompress-response": { - "version": "3.3.0", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "peer": true, "requires": { - "mimic-response": "^1.0.0" + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "peer": true + } } }, "dedent": { @@ -30602,6 +36596,8 @@ }, "deep-eql": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { "type-detect": "^4.0.0" @@ -30609,10 +36605,20 @@ }, "deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, "deep-is": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, "defaults": { @@ -30622,23 +36628,20 @@ "dev": true, "requires": { "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - } } }, "defer-to-connect": { - "version": "1.1.3", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, "peer": true }, "deferred-leveldown": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "dev": true, "requires": { "abstract-leveldown": "~6.2.1", "inherits": "^2.0.3" @@ -30646,6 +36649,9 @@ "dependencies": { "abstract-leveldown": { "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, "requires": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -30664,6 +36670,8 @@ }, "define-properties": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -30671,6 +36679,8 @@ }, "delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, "delegates": { @@ -30693,6 +36703,8 @@ }, "des.js": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "peer": true, "requires": { @@ -30702,6 +36714,8 @@ }, "destroy": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, "peer": true }, @@ -30711,6 +36725,12 @@ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, "dezalgo": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", @@ -30722,10 +36742,21 @@ } }, "diff": { - "version": "5.0.0" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true }, "diffie-hellman": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "peer": true, "requires": { @@ -30736,6 +36767,8 @@ "dependencies": { "bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, "peer": true } @@ -30743,6 +36776,8 @@ }, "dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { "path-type": "^4.0.0" @@ -30750,6 +36785,8 @@ }, "doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -30757,6 +36794,8 @@ }, "dom-walk": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", "dev": true, "peer": true }, @@ -30783,15 +36822,21 @@ }, "duplexer3": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", "dev": true, "peer": true }, "eastasianwidth": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, "ecc-jsbn": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, "peer": true, "requires": { @@ -30801,11 +36846,21 @@ }, "ee-first": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true, "peer": true }, + "electron-to-chromium": { + "version": "1.4.211", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.211.tgz", + "integrity": "sha512-BZSbMpyFQU0KBJ1JG26XGeFI3i4op+qOYGxftmZXFZoHkhLgsSv4DHDJfl8ogII3hIuzGt51PaZ195OVu0yJ9A==", + "dev": true + }, "elliptic": { "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -30817,27 +36872,56 @@ }, "dependencies": { "bn.js": { - "version": "4.12.0" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, + "emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true + }, "emoji-regex": { - "version": "8.0.0" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "encodeurl": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, "peer": true }, "encoding": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "optional": true, "requires": { "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } } }, "encoding-down": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "dev": true, "requires": { "abstract-leveldown": "^6.2.1", "inherits": "^2.0.3", @@ -30847,6 +36931,8 @@ }, "end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" @@ -30854,12 +36940,18 @@ }, "enquirer": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, "requires": { "ansi-colors": "^4.1.1" } }, "env-paths": { - "version": "2.2.1" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true }, "envinfo": { "version": "7.8.1", @@ -30875,12 +36967,17 @@ }, "errno": { "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, "requires": { "prr": "~1.0.1" } }, "error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" @@ -30888,6 +36985,8 @@ }, "es-abstract": { "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -30916,6 +37015,8 @@ }, "es-to-primitive": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -30923,7 +37024,9 @@ } }, "es5-ext": { - "version": "0.10.61", + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "requires": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -30932,36 +37035,56 @@ }, "es6-iterator": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "requires": { "d": "1", "es5-ext": "^0.10.35", "es6-symbol": "^3.1.1" } }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, "es6-symbol": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "requires": { "d": "^1.0.1", "ext": "^1.1.2" } }, "escalade": { - "version": "3.1.1" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "escape-html": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true, "peer": true }, "escape-string-regexp": { - "version": "1.0.5" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, "eslint": { - "version": "8.19.0", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", + "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", "dev": true, "requires": { "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -30971,14 +37094,17 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.3.3", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -30997,12 +37123,10 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "dev": true - }, "eslint-scope": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -31011,31 +37135,23 @@ }, "estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } } } }, "eslint-config-prettier": { "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true, "requires": {} }, "eslint-plugin-prettier": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -31043,6 +37159,8 @@ }, "eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -31051,6 +37169,8 @@ }, "eslint-utils": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" @@ -31058,25 +37178,39 @@ "dependencies": { "eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } }, "eslint-visitor-keys": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { - "version": "9.3.2", + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", "dev": true, "requires": { - "acorn": "^8.7.1", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" } }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, "esquery": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -31084,12 +37218,16 @@ "dependencies": { "estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" @@ -31097,25 +37235,35 @@ "dependencies": { "estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "etag": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, "peer": true }, "eth-ens-namehash": { "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", "dev": true, "peer": true, "requires": { @@ -31125,6 +37273,8 @@ "dependencies": { "js-sha3": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", "dev": true, "peer": true } @@ -31132,6 +37282,8 @@ }, "eth-lib": { "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", "dev": true, "peer": true, "requires": { @@ -31145,16 +37297,22 @@ "dependencies": { "bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, "peer": true }, "safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "peer": true }, "ws": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "peer": true, "requires": { @@ -31167,12 +37325,16 @@ }, "ethereum-bloom-filters": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", "requires": { "js-sha3": "^0.8.0" } }, "ethereum-cryptography": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -31193,6 +37355,8 @@ }, "ethereum-waffle": { "version": "3.4.4", + "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz", + "integrity": "sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==", "dev": true, "peer": true, "requires": { @@ -31205,6 +37369,9 @@ }, "ethereumjs-abi": { "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dev": true, "requires": { "bn.js": "^4.11.8", "ethereumjs-util": "^6.0.0" @@ -31212,15 +37379,24 @@ "dependencies": { "@types/bn.js": { "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, "requires": { "@types/node": "*" } }, "bn.js": { - "version": "4.12.0" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "ethereumjs-util": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, "requires": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -31235,6 +37411,8 @@ }, "ethereumjs-util": { "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "requires": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -31245,7 +37423,8 @@ }, "ethers": { "version": "5.6.9", - "dev": true, + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", + "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", "requires": { "@ethersproject/abi": "5.6.4", "@ethersproject/abstract-provider": "5.6.1", @@ -31281,25 +37460,35 @@ }, "ethjs-unit": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", "requires": { "bn.js": "4.11.6", "number-to-bn": "1.7.0" }, "dependencies": { "bn.js": { - "version": "4.11.6" + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" } } }, "ethjs-util": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, "requires": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" } }, "event-target-shim": { - "version": "5.0.1" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true }, "eventemitter3": { "version": "4.0.7", @@ -31309,6 +37498,8 @@ }, "evp_bytestokey": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -31316,6 +37507,8 @@ }, "execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", @@ -31329,8 +37522,29 @@ "strip-final-newline": "^2.0.0" } }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dev": true, + "requires": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + } + }, "express": { "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "dev": true, "peer": true, "requires": { @@ -31369,11 +37583,15 @@ "dependencies": { "cookie": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, "peer": true }, "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "peer": true, "requires": { @@ -31382,16 +37600,22 @@ }, "depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "peer": true }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "peer": true }, "qs": { "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "peer": true, "requires": { @@ -31402,17 +37626,23 @@ }, "ext": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", "requires": { "type": "^2.5.0" }, "dependencies": { "type": { - "version": "2.6.0" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.0.tgz", + "integrity": "sha512-NybX0NBIssNEj1efLf1mqKAtO4Q/Np5mqpa57be81ud7/tNHIXn48FDVXiyGMBF90FfXc5o7RPsuRQrPzgMOMA==" } } }, "extend": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true, "peer": true }, @@ -31425,45 +37655,31 @@ "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - } } }, "extsprintf": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true, "peer": true }, "fast-deep-equal": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-diff": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -31471,23 +37687,49 @@ "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fast-json-stable-stringify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "fastq": { "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" } }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -31495,10 +37737,20 @@ "dev": true, "requires": { "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + } } }, "file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" @@ -31506,12 +37758,17 @@ }, "fill-range": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "finalhandler": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "peer": true, "requires": { @@ -31526,6 +37783,8 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "peer": true, "requires": { @@ -31534,6 +37793,8 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "peer": true } @@ -31541,23 +37802,27 @@ }, "find-replace": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, "requires": { "array-back": "^3.0.1" } }, "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "find-yarn-workspace-root": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "dev": true, "peer": true, "requires": { @@ -31565,10 +37830,15 @@ } }, "flat": { - "version": "5.0.2" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true }, "flat-cache": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { "flatted": "^3.1.0", @@ -31577,24 +37847,35 @@ }, "flatted": { "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, "follow-redirects": { - "version": "1.15.1" + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "dev": true }, "for-each": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "requires": { "is-callable": "^1.1.3" } }, "forever-agent": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true, "peer": true }, "form-data": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -31602,16 +37883,30 @@ "mime-types": "^2.1.12" } }, + "form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", + "dev": true, + "peer": true + }, "forwarded": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "peer": true }, "fp-ts": { - "version": "1.19.3" + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true }, "fresh": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "peer": true }, @@ -31622,15 +37917,14 @@ "dev": true }, "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs-minipass": { @@ -31643,17 +37937,27 @@ } }, "fs.realpath": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "fsevents": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "optional": true }, "function-bind": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -31662,13 +37966,20 @@ } }, "functional-red-black-tree": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true }, "functions-have-names": { - "version": "1.2.3" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" }, "ganache-core": { "version": "2.13.2", + "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", + "integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==", "dev": true, "peer": true, "requires": { @@ -33676,6 +39987,12 @@ "dev": true, "peer": true }, + "depd": { + "version": "1.1.2", + "dev": true, + "optional": true, + "peer": true + }, "des.js": { "version": "1.0.1", "dev": true, @@ -36323,11 +42640,21 @@ "dev": true, "peer": true }, + "isarray": { + "version": "1.0.0", + "dev": true, + "peer": true + }, "isexe": { "version": "2.0.0", "dev": true, "peer": true }, + "isobject": { + "version": "3.0.1", + "dev": true, + "peer": true + }, "isstream": { "version": "0.1.2", "dev": true, @@ -36349,6 +42676,11 @@ "optional": true, "peer": true }, + "js-tokens": { + "version": "4.0.0", + "dev": true, + "peer": true + }, "jsbn": { "version": "0.1.1", "dev": true, @@ -36452,6 +42784,11 @@ "json-buffer": "3.0.0" } }, + "kind-of": { + "version": "6.0.3", + "dev": true, + "peer": true + }, "klaw-sync": { "version": "6.0.0", "dev": true, @@ -37140,6 +43477,14 @@ "peer": true, "requires": { "p-finally": "^1.0.0" + }, + "dependencies": { + "p-finally": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true + } } }, "parse-asn1": { @@ -37307,6 +43652,11 @@ "dev": true, "peer": true }, + "process-nextick-args": { + "version": "2.0.1", + "dev": true, + "peer": true + }, "promise-to-callback": { "version": "1.0.0", "dev": true, @@ -38566,6 +44916,11 @@ "mime-types": "~2.1.24" } }, + "typedarray": { + "version": "0.0.6", + "dev": true, + "peer": true + }, "typedarray-to-buffer": { "version": "3.1.5", "dev": true, @@ -39051,7 +45406,7 @@ "cross-fetch": "^2.1.0", "eth-block-tracker": "^3.0.0", "eth-json-rpc-infura": "^3.1.0", - "eth-sig-util": "^1.4.2", + "eth-sig-util": "3.0.0", "ethereumjs-block": "^1.2.2", "ethereumjs-tx": "^1.2.0", "ethereumjs-util": "^5.1.5", @@ -39589,21 +45944,40 @@ "wide-align": "^1.1.5" } }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, "get-caller-file": { - "version": "2.0.5" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-func-name": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", "dev": true }, "get-intrinsic": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.3" } }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, "get-pkg-repo": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", @@ -39616,6 +45990,24 @@ "yargs": "^16.2.0" }, "dependencies": { + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -39655,6 +46047,27 @@ "readable-stream": "~2.3.6", "xtend": "~4.0.1" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } } } }, @@ -39666,10 +46079,14 @@ }, "get-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, "get-symbol-description": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -39677,6 +46094,8 @@ }, "getpass": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, "peer": true, "requires": { @@ -39761,7 +46180,10 @@ } }, "glob": { - "version": "7.1.4", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -39772,13 +46194,18 @@ } }, "glob-parent": { - "version": "5.1.2", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "global": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "dev": true, "peer": true, "requires": { @@ -39787,20 +46214,18 @@ } }, "globals": { - "version": "13.16.0", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { "type-fest": "^0.20.2" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "dev": true - } } }, "globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", @@ -39809,54 +46234,47 @@ "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" - }, - "dependencies": { - "fast-glob": { - "version": "3.2.11", - "dev": true, - "requires": { - "@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" - } - } } }, "got": { - "version": "9.6.0", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", + "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", "dev": true, "peer": true, "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "dev": true, - "peer": true, - "requires": { - "pump": "^3.0.0" - } - } + "@sindresorhus/is": "^4.6.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^2.0.0" } }, "graceful-fs": { - "version": "4.2.10" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true }, "growl": { - "version": "1.10.5" + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true }, "handlebars": { "version": "4.7.7", @@ -39873,11 +46291,15 @@ }, "har-schema": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true, "peer": true }, "har-validator": { "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "peer": true, "requires": { @@ -39892,7 +46314,10 @@ "dev": true }, "hardhat": { - "version": "2.9.9", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.10.1.tgz", + "integrity": "sha512-0FN9TyCtn7Lt25SB2ei2G7nA2rZjP+RN6MvFOm+zYwherxLZNo6RbD8nDz88eCbhRapevmXqOiL2nM8INKsjmA==", + "dev": true, "requires": { "@ethereumjs/block": "^3.6.2", "@ethereumjs/blockchain": "^5.5.2", @@ -39902,7 +46327,7 @@ "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", "@sentry/node": "^5.18.1", - "@solidity-parser/parser": "^0.14.1", + "@solidity-parser/parser": "^0.14.2", "@types/bn.js": "^5.1.0", "@types/lru-cache": "^5.1.0", "abort-controller": "^3.0.0", @@ -39915,7 +46340,7 @@ "debug": "^4.1.1", "enquirer": "^2.3.0", "env-paths": "^2.2.0", - "ethereum-cryptography": "^0.1.2", + "ethereum-cryptography": "^1.0.3", "ethereumjs-abi": "^0.6.8", "ethereumjs-util": "^7.1.4", "find-up": "^2.1.0", @@ -39927,7 +46352,7 @@ "lodash": "^4.17.11", "merkle-patricia-tree": "^4.2.4", "mnemonist": "^0.38.0", - "mocha": "^9.2.0", + "mocha": "^10.0.0", "p-map": "^4.0.0", "qs": "^6.7.0", "raw-body": "^2.4.1", @@ -39944,136 +46369,381 @@ "ws": "^7.4.6" }, "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, "ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + } } }, "color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.3" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, - "find-up": { - "version": "2.1.0", - "requires": { - "locate-path": "^2.0.0" - } + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true }, - "fs-extra": { - "version": "7.0.1", + "ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" } }, - "glob": { - "version": "7.2.0", + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "locate-path": "^2.0.0" } }, - "has-flag": { - "version": "3.0.0" - }, "jsonfile": { - "version": "4.0.0", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, "requires": { "graceful-fs": "^4.1.6" } }, "locate-path": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "mocha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true + }, "p-limit": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, "requires": { "p-try": "^1.0.0" } }, "p-locate": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, "requires": { "p-limit": "^1.1.0" } }, "p-try": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true }, "path-exists": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true }, - "resolve": { - "version": "1.17.0", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "requires": { - "path-parse": "^1.0.6" + "glob": "^7.1.3" } }, "semver": { - "version": "6.3.0" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "dev": true, + "requires": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } }, "supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + } } }, - "universalify": { - "version": "0.1.2" + "workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } } } }, "has": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { "function-bind": "^1.1.1" } }, "has-bigints": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" }, "has-flag": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "has-property-descriptors": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "requires": { "get-intrinsic": "^1.1.1" } }, "has-symbol-support-x": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", "dev": true, "peer": true }, "has-symbols": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-to-string-tag-x": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "dev": true, "peer": true, "requires": { @@ -40082,6 +46752,8 @@ }, "has-tostringtag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "requires": { "has-symbols": "^1.0.2" } @@ -40094,6 +46766,8 @@ }, "hash-base": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -40102,16 +46776,23 @@ }, "hash.js": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "he": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true }, "hmac-drbg": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -40119,20 +46800,28 @@ } }, "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "http-cache-semantics": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, "http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, "requires": { "depd": "2.0.0", "inherits": "2.0.4", @@ -40142,26 +46831,33 @@ }, "dependencies": { "depd": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true } } }, "http-https": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" }, "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "requires": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" } }, "http-signature": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, "peer": true, "requires": { @@ -40170,8 +46866,31 @@ "sshpk": "^1.7.0" } }, + "http2-wrapper": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz", + "integrity": "sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ==", + "dev": true, + "peer": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "dependencies": { + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "peer": true + } + } + }, "https-proxy-agent": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, "requires": { "agent-base": "6", "debug": "4" @@ -40179,6 +46898,8 @@ }, "human-signals": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "humanize-ms": { @@ -40192,64 +46913,90 @@ }, "husky": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", "dev": true }, "iconv-lite": { - "version": "0.6.3", - "optional": true, + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" } }, "idna-uts46-hx": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", "dev": true, "peer": true, "requires": { "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "dev": true, - "peer": true - } } }, "ieee754": { - "version": "1.2.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true }, "ignore": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", "dev": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "immediate": { - "version": "3.3.0" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true }, "immutable": { - "version": "4.1.0" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true }, "import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "dev": true - } } }, "import-local": { @@ -40264,10 +47011,15 @@ }, "imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "indent-string": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true }, "infer-owner": { "version": "1.0.4", @@ -40277,13 +47029,18 @@ }, "inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { - "version": "2.0.4" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.8", @@ -40292,57 +47049,76 @@ "dev": true }, "init-package-json": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.5.tgz", - "integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz", + "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", "dev": true, "requires": { - "npm-package-arg": "^8.1.5", + "npm-package-arg": "^9.0.1", "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^4.1.1", + "read": "^1.0.7", + "read-package-json": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" }, "dependencies": { - "read-package-json": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", - "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true + }, + "npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", "dev": true, "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" } } } }, "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", + "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", - "lodash": "^4.17.19", + "lodash": "^4.17.21", "mute-stream": "0.0.8", + "ora": "^5.4.1", "run-async": "^2.4.0", - "rxjs": "^6.6.0", + "rxjs": "^7.5.5", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" } }, "internal-slot": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -40351,28 +47127,37 @@ }, "invert-kv": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", "dev": true, "peer": true }, "io-ts": { "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, "requires": { "fp-ts": "^1.0.0" } }, "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, "ipaddr.js": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, "peer": true }, "is-arguments": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -40380,39 +47165,54 @@ }, "is-arrayish": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "is-bigint": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "requires": { "has-bigints": "^1.0.1" } }, "is-binary-path": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "requires": { "binary-extensions": "^2.0.0" } }, "is-boolean-object": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "is-callable": { - "version": "1.2.4" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, "is-ci": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { "ci-info": "^2.0.0" } }, "is-core-module": { - "version": "2.9.0", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "requires": { "has": "^1.0.3" @@ -40420,39 +47220,70 @@ }, "is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "requires": { "has-tostringtag": "^1.0.0" } }, "is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, "is-extglob": { - "version": "2.1.1" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true }, "is-fullwidth-code-point": { - "version": "3.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true }, "is-function": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", "dev": true, "peer": true }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, "is-generator-function": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "requires": { "has-tostringtag": "^1.0.0" } }, "is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } }, "is-hex-prefixed": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true }, "is-lambda": { "version": "1.0.1", @@ -40461,13 +47292,20 @@ "dev": true }, "is-negative-zero": { - "version": "2.0.2" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" }, "is-number": { - "version": "7.0.0" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-number-object": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "requires": { "has-tostringtag": "^1.0.0" } @@ -40480,11 +47318,15 @@ }, "is-object": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "dev": true, "peer": true }, "is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true }, "is-plain-object": { @@ -40495,6 +47337,8 @@ }, "is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -40502,11 +47346,15 @@ }, "is-retry-allowed": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "dev": true, "peer": true }, "is-shared-array-buffer": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "requires": { "call-bind": "^1.0.2" } @@ -40522,16 +47370,22 @@ }, "is-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-string": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "requires": { "has-tostringtag": "^1.0.0" } }, "is-symbol": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "requires": { "has-symbols": "^1.0.2" } @@ -40547,6 +47401,8 @@ }, "is-typed-array": { "version": "1.1.9", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", + "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -40556,29 +47412,42 @@ } }, "is-typedarray": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "is-unicode-supported": { - "version": "0.1.0" + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true }, "is-url": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true, "peer": true }, "is-utf8": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true, "peer": true }, "is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "requires": { "call-bind": "^1.0.2" } }, "is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { "is-docker": "^2.0.0" @@ -40591,7 +47460,10 @@ "dev": true }, "isexe": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "isobject": { "version": "3.0.1", @@ -40601,11 +47473,74 @@ }, "isstream": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true, "peer": true }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, "isurl": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dev": true, "peer": true, "requires": { @@ -40613,8 +47548,465 @@ "is-object": "^1.0.1" } }, + "jest-changed-files": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", + "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", + "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "p-limit": "^3.1.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-cli": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", + "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "dev": true, + "requires": { + "@jest/core": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + } + }, + "jest-config": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", + "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.3", + "@jest/types": "^28.1.3", + "babel-jest": "^28.1.3", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.3", + "jest-environment-node": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + } + } + }, + "jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-docblock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", + "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.3", + "pretty-format": "^28.1.3" + } + }, + "jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", + "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", + "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + }, + "jest-resolve": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", + "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", + "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "dev": true, + "requires": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.3" + } + }, + "jest-runner": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", + "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/environment": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-leak-detector": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-resolve": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-util": "^28.1.3", + "jest-watcher": "^28.1.3", + "jest-worker": "^28.1.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "dependencies": { + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "jest-runtime": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", + "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/globals": "^28.1.3", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", + "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "natural-compare": "^1.4.0", + "pretty-format": "^28.1.3", + "semver": "^7.3.5" + } + }, + "jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + } + } + }, + "jest-validate": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", + "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.3" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dev": true, + "requires": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "js-sha3": { - "version": "0.8.0" + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, "js-tokens": { "version": "4.0.0", @@ -40624,17 +48016,30 @@ }, "js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "requires": { "argparse": "^2.0.1" } }, "jsbn": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true, "peer": true }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, "json-buffer": { - "version": "3.0.0", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "peer": true }, @@ -40652,15 +48057,21 @@ }, "json-schema": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true, "peer": true }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json-stringify-nice": { @@ -40671,16 +48082,15 @@ }, "json-stringify-safe": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true }, "jsonc-parser": { "version": "3.0.0", @@ -40689,13 +48099,12 @@ "dev": true }, "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "graceful-fs": "^4.1.6" } }, "jsonparse": { @@ -40716,6 +48125,8 @@ }, "jsprim": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, "peer": true, "requires": { @@ -40739,23 +48150,23 @@ }, "keccak": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", "requires": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", "readable-stream": "^3.6.0" - }, - "dependencies": { - "node-addon-api": { - "version": "2.0.2" - } } }, "keyv": { - "version": "3.1.0", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.3.tgz", + "integrity": "sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ==", "dev": true, "peer": true, "requires": { - "json-buffer": "3.0.0" + "compress-brotli": "^1.3.8", + "json-buffer": "3.0.1" } }, "kind-of": { @@ -40766,20 +48177,33 @@ }, "klaw": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "dev": true, "requires": { "graceful-fs": "^4.1.9" } }, "klaw-sync": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", "dev": true, "peer": true, "requires": { "graceful-fs": "^4.1.11" } }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, "lcid": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", "dev": true, "peer": true, "requires": { @@ -40787,48 +48211,61 @@ } }, "lerna": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.1.8.tgz", - "integrity": "sha512-KrpFx2l1x1X7wb9unqRU7OZTaNs5+67VQ1vxf8fIMgdtCAjEqkLxF/F3xLs+KBMws5PV19Q9YtPHn7SiwDl7iQ==", - "dev": true, - "requires": { - "@lerna/add": "5.1.8", - "@lerna/bootstrap": "5.1.8", - "@lerna/changed": "5.1.8", - "@lerna/clean": "5.1.8", - "@lerna/cli": "5.1.8", - "@lerna/create": "5.1.8", - "@lerna/diff": "5.1.8", - "@lerna/exec": "5.1.8", - "@lerna/import": "5.1.8", - "@lerna/info": "5.1.8", - "@lerna/init": "5.1.8", - "@lerna/link": "5.1.8", - "@lerna/list": "5.1.8", - "@lerna/publish": "5.1.8", - "@lerna/run": "5.1.8", - "@lerna/version": "5.1.8", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.3.0.tgz", + "integrity": "sha512-0Y9xJqleVu0ExGmsw2WM/GkVmxOwtA7OLQFS5ERPKJfnsxH9roTX3a7NPaGQRI2E+tSJLJJGgNSf3WYEqinOqA==", + "dev": true, + "requires": { + "@lerna/add": "5.3.0", + "@lerna/bootstrap": "5.3.0", + "@lerna/changed": "5.3.0", + "@lerna/clean": "5.3.0", + "@lerna/cli": "5.3.0", + "@lerna/create": "5.3.0", + "@lerna/diff": "5.3.0", + "@lerna/exec": "5.3.0", + "@lerna/import": "5.3.0", + "@lerna/info": "5.3.0", + "@lerna/init": "5.3.0", + "@lerna/link": "5.3.0", + "@lerna/list": "5.3.0", + "@lerna/publish": "5.3.0", + "@lerna/run": "5.3.0", + "@lerna/version": "5.3.0", "import-local": "^3.0.2", - "npmlog": "^6.0.2" + "npmlog": "^6.0.2", + "nx": ">=14.4.3 < 16" } }, "level-codec": { "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, "requires": { "buffer": "^5.6.0" } }, "level-concat-iterator": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "dev": true }, "level-errors": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dev": true, "requires": { "errno": "~0.1.1" } }, "level-iterator-stream": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "dev": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.4.0", @@ -40837,6 +48274,9 @@ }, "level-mem": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", + "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", + "dev": true, "requires": { "level-packager": "^5.0.3", "memdown": "^5.0.0" @@ -40844,6 +48284,9 @@ }, "level-packager": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "dev": true, "requires": { "encoding-down": "^6.3.0", "levelup": "^4.3.2" @@ -40851,12 +48294,18 @@ }, "level-supports": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "dev": true, "requires": { "xtend": "^4.0.2" } }, "level-ws": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", + "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", + "dev": true, "requires": { "inherits": "^2.0.3", "readable-stream": "^3.1.0", @@ -40865,6 +48314,9 @@ }, "levelup": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "dev": true, "requires": { "deferred-leveldown": "~5.3.0", "level-errors": "~2.0.0", @@ -40873,8 +48325,16 @@ "xtend": "~4.0.0" } }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, "levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { "prelude-ls": "^1.2.1", @@ -40882,64 +48342,104 @@ } }, "libnpmaccess": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", - "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.3.tgz", + "integrity": "sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg==", "dev": true, "requires": { "aproba": "^2.0.0", "minipass": "^3.1.1", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0" + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" }, "dependencies": { - "npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true + }, + "npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", "dev": true, "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" } } } }, "libnpmpublish": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", - "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.4.tgz", + "integrity": "sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg==", "dev": true, "requires": { - "normalize-package-data": "^3.0.2", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0", - "semver": "^7.1.3", - "ssri": "^8.0.1" + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", + "semver": "^7.3.7", + "ssri": "^9.0.0" }, "dependencies": { - "npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", "dev": true, "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "lru-cache": "^7.5.1" + } + }, + "lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true + }, + "normalize-package-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", + "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" } } } }, "lilconfig": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", "dev": true }, "lines-and-columns": { @@ -40950,6 +48450,8 @@ }, "lint-staged": { "version": "12.5.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz", + "integrity": "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==", "dev": true, "requires": { "cli-truncate": "^3.1.0", @@ -40968,18 +48470,18 @@ "yaml": "^1.10.2" }, "dependencies": { - "commander": { - "version": "9.3.0", - "dev": true - }, "supports-color": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", + "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", "dev": true } } }, "listr2": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", "dev": true, "requires": { "cli-truncate": "^2.1.0", @@ -40994,21 +48496,24 @@ "dependencies": { "cli-truncate": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "requires": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" } }, - "rxjs": { - "version": "7.5.6", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "slice-ansi": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -41028,27 +48533,42 @@ "parse-json": "^5.0.0", "strip-bom": "^4.0.0", "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } } }, "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" } }, "lodash": { - "version": "4.17.21" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "lodash.assign": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", "dev": true, "peer": true }, "lodash.camelcase": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true }, "lodash.ismatch": { @@ -41059,10 +48579,15 @@ }, "lodash.merge": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -41070,6 +48595,8 @@ }, "log-update": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "requires": { "ansi-escapes": "^4.3.0", @@ -41078,8 +48605,16 @@ "wrap-ansi": "^6.2.0" }, "dependencies": { + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -41089,6 +48624,8 @@ }, "wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -41100,27 +48637,40 @@ }, "loupe": { "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", "dev": true, "requires": { "get-func-name": "^2.0.0" } }, "lowercase-keys": { - "version": "1.0.1", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, "peer": true }, "lru_map": { - "version": "0.3.3" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true }, "lru-cache": { - "version": "6.0.0", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "requires": { - "yallist": "^4.0.0" + "yallist": "^3.0.2" } }, "ltgt": { - "version": "2.2.1" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "dev": true }, "make-dir": { "version": "3.1.0", @@ -41141,80 +48691,51 @@ }, "make-error": { "version": "1.3.6", - "devOptional": true + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz", + "integrity": "sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg==", "dev": true, "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" }, "dependencies": { - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } + "lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true } } }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, "map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -41222,10 +48743,15 @@ "dev": true }, "mcl-wasm": { - "version": "0.7.9" + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "dev": true }, "md5.js": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -41234,11 +48760,16 @@ }, "media-typer": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, "peer": true }, "memdown": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", + "dev": true, "requires": { "abstract-leveldown": "~6.2.1", "functional-red-black-tree": "~1.0.1", @@ -41250,6 +48781,9 @@ "dependencies": { "abstract-leveldown": { "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, "requires": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -41259,12 +48793,18 @@ } }, "immediate": { - "version": "3.2.3" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", + "dev": true } } }, "memorystream": { - "version": "0.3.1" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true }, "meow": { "version": "8.1.2", @@ -41285,11 +48825,42 @@ "yargs-parser": "^20.2.3" }, "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } }, "read-pkg": { "version": "5.2.0", @@ -41358,19 +48929,28 @@ }, "merge-descriptors": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", "dev": true, "peer": true }, "merge-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "merkle-patricia-tree": { "version": "4.2.4", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", + "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", + "dev": true, "requires": { "@types/levelup": "^4.3.0", "ethereumjs-util": "^7.1.4", @@ -41382,11 +48962,15 @@ }, "methods": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, "peer": true }, "micromatch": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { "braces": "^3.0.2", @@ -41395,27 +48979,39 @@ }, "miller-rabin": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" }, "dependencies": { "bn.js": { - "version": "4.12.0" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true } } }, "mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, "peer": true }, "mime-db": { "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true }, "mime-types": { "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "requires": { "mime-db": "1.52.0" @@ -41423,15 +49019,21 @@ }, "mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "mimic-response": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, "peer": true }, "min-document": { "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", "dev": true, "peer": true, "requires": { @@ -41445,19 +49047,28 @@ "dev": true }, "minimalistic-assert": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimalistic-crypto-utils": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "minimatch": { - "version": "3.0.5", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "minimist-options": { @@ -41478,6 +49089,14 @@ "dev": true, "requires": { "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "minipass-collect": { @@ -41490,15 +49109,15 @@ } }, "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dev": true, "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", + "encoding": "^0.1.13", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" } }, "minipass-flush": { @@ -41546,11 +49165,24 @@ "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "mkdirp": { - "version": "1.0.4", - "dev": true + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } }, "mkdirp-infer-owner": { "version": "2.0.0", @@ -41561,10 +49193,20 @@ "chownr": "^2.0.0", "infer-owner": "^1.0.4", "mkdirp": "^1.0.3" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } } }, "mkdirp-promise": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", "dev": true, "peer": true, "requires": { @@ -41573,12 +49215,18 @@ }, "mnemonist": { "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, "requires": { "obliterator": "^2.0.0" } }, "mocha": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", @@ -41607,85 +49255,73 @@ }, "dependencies": { "ansi-colors": { - "version": "4.1.1" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true }, "debug": { "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, "requires": { "ms": "2.1.2" }, "dependencies": { "ms": { - "version": "2.1.2" - } - } - }, - "escape-string-regexp": { - "version": "4.0.0" - }, - "find-up": { - "version": "5.0.0", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.2.0", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "requires": { - "brace-expansion": "^1.1.7" - } + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, - "locate-path": { - "version": "6.0.0", - "requires": { - "p-locate": "^5.0.0" - } - }, "minimatch": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "ms": { - "version": "2.1.3" - }, - "p-limit": { - "version": "3.1.0", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "requires": { - "p-limit": "^3.0.2" - } + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { "has-flag": "^4.0.0" } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } } } }, "mock-fs": { "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", "dev": true, "peer": true }, @@ -41696,10 +49332,15 @@ "dev": true }, "ms": { - "version": "2.1.2" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "multibase": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", "dev": true, "peer": true, "requires": { @@ -41709,6 +49350,8 @@ }, "multicodec": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", "dev": true, "peer": true, "requires": { @@ -41717,6 +49360,8 @@ }, "multihashes": { "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", "dev": true, "peer": true, "requires": { @@ -41727,6 +49372,8 @@ "dependencies": { "multibase": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", "dev": true, "peer": true, "requires": { @@ -41765,18 +49412,27 @@ }, "nano-json-stream-parser": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", "dev": true, "peer": true }, "nanoid": { - "version": "3.3.1" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true }, "natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "negotiator": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, "neo-async": { @@ -41786,33 +49442,56 @@ "dev": true }, "next-tick": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, "nice-try": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true, "peer": true }, + "nock": { + "version": "13.2.9", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.9.tgz", + "integrity": "sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.21", + "propagate": "^2.0.0" + } + }, "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" }, "node-fetch": { "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "requires": { "whatwg-url": "^5.0.0" }, "dependencies": { "tr46": { - "version": "0.0.3" + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "webidl-conversions": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -41821,15 +49500,15 @@ } }, "node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz", + "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==", "dev": true, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", + "make-fetch-happen": "^10.0.3", "nopt": "^5.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", @@ -41839,7 +49518,21 @@ } }, "node-gyp-build": { - "version": "4.4.0" + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true }, "nopt": { "version": "5.0.0", @@ -41860,10 +49553,39 @@ "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "normalize-path": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-url": { "version": "6.1.0", @@ -41896,49 +49618,98 @@ "dev": true }, "npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", + "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", "dev": true, "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", + "hosted-git-info": "^3.0.6", + "semver": "^7.0.0", "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true + }, + "hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", + "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", "dev": true, "requires": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^1.1.2", "npm-normalize-package-bin": "^1.0.1" }, "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" } }, "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" } } } @@ -41955,15 +49726,6 @@ "semver": "^7.3.5" }, "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, "hosted-git-info": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", @@ -41974,9 +49736,9 @@ } }, "lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", "dev": true }, "npm-package-arg": { @@ -41990,118 +49752,57 @@ "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } } } }, "npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.0.tgz", + "integrity": "sha512-10LJQ/1+VhKrZjIuY9I/+gQTvumqqlgnsCufoXETHAPFTS3+M+Z5CFhZRDHGavmJ6rOye3UvNga88vl8n1r6gg==", "dev": true, "requires": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" }, "dependencies": { - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", "dev": true, "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" + "lru-cache": "^7.5.1" } }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - } - }, - "socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true + }, + "npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", "dev": true, "requires": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" } } } }, "npm-run-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { "path-key": "^3.0.0" @@ -42121,29 +49822,35 @@ }, "number-is-nan": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, "peer": true }, "number-to-bn": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", "requires": { "bn.js": "4.11.6", "strip-hex-prefix": "1.0.0" }, "dependencies": { "bn.js": { - "version": "4.11.6" + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" } } }, "nx": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.4.2.tgz", - "integrity": "sha512-bYO//HuwQL4X8y+2BjUPtkPLDiYI1zMejQo6+uJl3+VdYPcsjwW/ca581tBPHiPH95XnHiBartnMrMJtn11grw==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-14.5.2.tgz", + "integrity": "sha512-I6KWVMR5Ksj/HgderkcmJmyaqHdWblQeFUeVq9to263Wr3QCIRigbvdDI3rq3ZQCBMyhUSOVP9MFXROoRVtJXQ==", "dev": true, "requires": { - "@nrwl/cli": "14.4.2", - "@nrwl/tao": "14.4.2", + "@nrwl/cli": "14.5.2", + "@nrwl/tao": "14.5.2", "@parcel/watcher": "2.0.4", "chalk": "4.1.0", "chokidar": "^3.5.1", @@ -42174,6 +49881,29 @@ "yargs-parser": "21.0.1" }, "dependencies": { + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@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" + } + }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -42185,6 +49915,57 @@ "universalify": "^2.0.0" } }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "semver": { "version": "7.3.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", @@ -42203,20 +49984,23 @@ "rimraf": "^3.0.0" } }, - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "yargs-parser": { "version": "21.0.1", @@ -42228,22 +50012,32 @@ }, "oauth-sign": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, "peer": true }, "object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "peer": true }, "object-inspect": { - "version": "1.12.2" + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" }, "object-keys": { - "version": "1.1.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -42252,16 +50046,23 @@ } }, "obliterator": { - "version": "2.0.4" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true }, "oboe": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", "requires": { "http-https": "^1.0.0" } }, "on-finished": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "peer": true, "requires": { @@ -42270,12 +50071,17 @@ }, "once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "requires": { "wrappy": "1" } }, "onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" @@ -42294,6 +50100,8 @@ }, "optionator": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { "deep-is": "^0.1.3", @@ -42304,8 +50112,27 @@ "word-wrap": "^1.2.3" } }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, "os-locale": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", "dev": true, "peer": true, "requires": { @@ -42313,37 +50140,47 @@ } }, "os-tmpdir": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true }, "p-cancelable": { - "version": "1.1.0", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true, "peer": true }, "p-finally": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" } }, "p-map": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "requires": { "aggregate-error": "^3.0.0" } @@ -42429,43 +50266,6 @@ "tar": "^6.1.11" }, "dependencies": { - "@npmcli/run-script": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.5.tgz", - "integrity": "sha512-FyrZkZ+O0bCnQqm+mRb6sKbEJgyJudInwFN84gCcMUcxrWkR15Ags1uOHwnxHYdpj3T5eqrCZNW/Ys20MGTQ6Q==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, "hosted-git-info": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", @@ -42475,106 +50275,17 @@ "lru-cache": "^7.5.1" } }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - } - }, "lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", "dev": true }, - "make-fetch-happen": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", - "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "node-gyp": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", - "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - } - }, - "normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "npm-package-arg": { "version": "9.1.0", @@ -42587,109 +50298,13 @@ "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } - }, - "npm-packlist": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", - "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" - }, - "dependencies": { - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - } - } - }, - "npm-registry-fetch": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", - "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", - "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - } - }, - "read-package-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", - "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "dependencies": { - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - } - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } } } }, "parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" @@ -42697,6 +50312,8 @@ }, "parse-asn1": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "peer": true, "requires": { @@ -42720,6 +50337,8 @@ }, "parse-headers": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", "dev": true, "peer": true }, @@ -42758,11 +50377,15 @@ }, "parseurl": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "peer": true }, "patch-package": { "version": "6.4.7", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", + "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", "dev": true, "peer": true, "requires": { @@ -42783,6 +50406,8 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "peer": true, "requires": { @@ -42791,6 +50416,8 @@ }, "chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "peer": true, "requires": { @@ -42801,6 +50428,8 @@ }, "color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "peer": true, "requires": { @@ -42809,11 +50438,15 @@ }, "color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, "peer": true }, "cross-spawn": { "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "peer": true, "requires": { @@ -42824,31 +50457,24 @@ "which": "^1.2.9" } }, - "fs-extra": { - "version": "7.0.1", + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } + "peer": true }, "has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "peer": true }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, "open": { "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "peer": true, "requires": { @@ -42858,11 +50484,15 @@ }, "path-key": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "peer": true }, "rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "peer": true, "requires": { @@ -42871,11 +50501,15 @@ }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "peer": true }, "shebang-command": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "peer": true, "requires": { @@ -42884,37 +50518,32 @@ }, "shebang-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "peer": true }, "slash": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true, "peer": true }, "supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "peer": true, "requires": { "has-flag": "^3.0.0" } }, - "tmp": { - "version": "0.0.33", - "dev": true, - "peer": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "universalify": { - "version": "0.1.2", - "dev": true, - "peer": true - }, "which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "peer": true, "requires": { @@ -42925,37 +50554,58 @@ }, "path-browserify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true, "peer": true }, "path-exists": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true }, "path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { - "version": "1.0.7" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "path-to-regexp": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "dev": true, "peer": true }, "path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, "pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, "pbkdf2": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -42966,14 +50616,27 @@ }, "performance-now": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true, "peer": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { - "version": "2.3.1" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true }, "pidtree": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", + "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", "dev": true }, "pify": { @@ -42984,17 +50647,27 @@ }, "pinkie": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, "peer": true }, "pinkie-promise": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "peer": true, "requires": { "pinkie": "^2.0.0" } }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -43002,33 +50675,102 @@ "dev": true, "requires": { "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } } }, "postinstall-postinstall": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", + "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", "dev": true, "peer": true }, "prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prepend-http": { - "version": "2.0.0", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", "dev": true, "peer": true }, "prettier": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "prettier-linter-helpers": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "requires": { "fast-diff": "^1.1.2" } }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, "proc-log": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", @@ -43037,6 +50779,8 @@ }, "process": { "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, "peer": true }, @@ -43074,6 +50818,16 @@ "retry": "^0.12.0" } }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, "promzard": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", @@ -43083,6 +50837,12 @@ "read": "1" } }, + "propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true + }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -43097,6 +50857,8 @@ }, "proxy-addr": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "peer": true, "requires": { @@ -43105,15 +50867,22 @@ } }, "prr": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true }, "psl": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true, "peer": true }, "public-encrypt": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "peer": true, "requires": { @@ -43127,6 +50896,8 @@ "dependencies": { "bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, "peer": true } @@ -43134,6 +50905,8 @@ }, "pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "peer": true, "requires": { @@ -43142,7 +50915,9 @@ } }, "punycode": { - "version": "2.1.1", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", "dev": true }, "q": { @@ -43153,17 +50928,36 @@ }, "qs": { "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, "requires": { "side-channel": "^1.0.4" } }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "peer": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, "querystring": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", "dev": true, "peer": true }, "queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, "quick-lru": { @@ -43174,12 +50968,16 @@ }, "randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { "safe-buffer": "^5.1.0" } }, "randomfill": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "peer": true, "requires": { @@ -43189,26 +50987,29 @@ }, "range-parser": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, "peer": true }, "raw-body": { "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -43219,21 +51020,81 @@ } }, "read-cmd-shim": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", - "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", + "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", "dev": true }, "read-package-json": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", - "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", + "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", "dev": true, "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "normalize-package-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", + "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + } } }, "read-package-json-fast": { @@ -43257,12 +51118,6 @@ "path-type": "^3.0.0" }, "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -43389,6 +51244,8 @@ }, "readable-stream": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -43409,6 +51266,9 @@ }, "readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -43425,10 +51285,14 @@ }, "reduce-flatten": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true }, "regexp.prototype.flags": { "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -43437,10 +51301,14 @@ }, "regexpp": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "request": { "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "peer": true, "requires": { @@ -43468,6 +51336,8 @@ "dependencies": { "form-data": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "peer": true, "requires": { @@ -43478,36 +51348,55 @@ }, "qs": { "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true, "peer": true }, "uuid": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true, "peer": true } } }, "require-directory": { - "version": "2.1.1" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true }, "require-from-string": { - "version": "2.0.2" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true }, "require-main-filename": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", "dev": true, "peer": true }, "resolve": { - "version": "1.22.1", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "path-parse": "^1.0.6" } }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "peer": true + }, "resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -43515,24 +51404,51 @@ "dev": true, "requires": { "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", "dev": true }, "responselike": { - "version": "1.0.2", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, "peer": true, "requires": { - "lowercase-keys": "^1.0.0" + "lowercase-keys": "^2.0.0" + }, + "dependencies": { + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "peer": true + } } }, "restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { "onetime": "^5.1.0", @@ -43547,14 +51463,20 @@ }, "reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, "rfdc": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, "rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -43562,6 +51484,8 @@ }, "ripemd160": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -43569,6 +51493,8 @@ }, "rlp": { "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", "requires": { "bn.js": "^5.2.0" } @@ -43581,55 +51507,67 @@ }, "run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { "queue-microtask": "^1.2.2" } }, "rustbn.js": { - "version": "0.2.0" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", + "dev": true }, "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", + "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", "dev": true, "requires": { - "tslib": "^1.9.0" + "tslib": "^2.1.0" }, "dependencies": { "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true } } }, "safe-buffer": { - "version": "5.2.1" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { - "version": "2.1.2" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true }, "scrypt-js": { - "version": "3.0.1" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, "secp256k1": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", "requires": { "elliptic": "^6.5.4", "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0" - }, - "dependencies": { - "node-addon-api": { - "version": "2.0.2" - } } }, "semaphore-async-await": { - "version": "1.5.1" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", + "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", + "dev": true }, "semver": { "version": "7.3.7", @@ -43637,10 +51575,27 @@ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "requires": { "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "send": { "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "peer": true, "requires": { @@ -43661,6 +51616,8 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "peer": true, "requires": { @@ -43669,6 +51626,8 @@ "dependencies": { "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "peer": true } @@ -43676,11 +51635,15 @@ }, "depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "peer": true }, "ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "peer": true } @@ -43688,12 +51651,17 @@ }, "serialize-javascript": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, "requires": { "randombytes": "^2.1.0" } }, "serve-static": { "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "peer": true, "requires": { @@ -43705,6 +51673,8 @@ }, "servify": { "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", "dev": true, "peer": true, "requires": { @@ -43717,16 +51687,25 @@ }, "set-blocking": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "setimmediate": { - "version": "1.0.5" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "setprototypeof": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true }, "sha.js": { "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -43743,6 +51722,8 @@ }, "shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { "shebang-regex": "^3.0.0" @@ -43750,10 +51731,14 @@ }, "shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, "side-channel": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -43762,28 +51747,57 @@ }, "signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "simple-concat": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, "peer": true }, "simple-get": { "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", "dev": true, "peer": true, "requires": { "decompress-response": "^3.3.0", "once": "^1.3.1", "simple-concat": "^1.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "peer": true, + "requires": { + "mimic-response": "^1.0.0" + } + } } }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "slash": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true }, "slice-ansi": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "requires": { "ansi-styles": "^6.0.0", @@ -43792,10 +51806,8 @@ "dependencies": { "ansi-styles": { "version": "6.1.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", "dev": true } } @@ -43807,19 +51819,19 @@ "dev": true }, "socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", "dev": true, "requires": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" } }, "socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "requires": { "agent-base": "^6.0.2", @@ -43828,11 +51840,14 @@ } }, "solc": { - "version": "0.7.3", + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz", + "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==", + "dev": true, + "peer": true, "requires": { "command-exists": "^1.2.8", "commander": "3.0.2", - "follow-redirects": "^1.12.1", "fs-extra": "^0.30.0", "js-sha3": "0.8.0", "memorystream": "^0.3.1", @@ -43841,8 +51856,19 @@ "tmp": "0.0.33" }, "dependencies": { + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true, + "peer": true + }, "fs-extra": { "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "peer": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^2.1.0", @@ -43853,24 +51879,30 @@ }, "jsonfile": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "peer": true, "requires": { "graceful-fs": "^4.1.6" } }, "rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "peer": true, "requires": { "glob": "^7.1.3" } }, "semver": { - "version": "5.7.1" - }, - "tmp": { - "version": "0.0.33", - "requires": { - "os-tmpdir": "~1.0.2" - } + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "peer": true } } }, @@ -43892,10 +51924,16 @@ } }, "source-map": { - "version": "0.6.1" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -43903,6 +51941,8 @@ }, "spdx-correct": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -43911,10 +51951,14 @@ }, "spdx-exceptions": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -43923,6 +51967,8 @@ }, "spdx-license-ids": { "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, "split": { @@ -43943,8 +51989,16 @@ "readable-stream": "^3.0.0" } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, "sshpk": { "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "dev": true, "peer": true, "requires": { @@ -43961,58 +52015,122 @@ "dependencies": { "tweetnacl": { "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true, "peer": true } } }, "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, "requires": { "minipass": "^3.1.1" } }, + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "stacktrace-parser": { "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, "requires": { "type-fest": "^0.7.1" }, "dependencies": { "type-fest": { - "version": "0.7.1" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true } } }, "statuses": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "peer": true }, "string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { "safe-buffer": "~5.2.0" } }, "string-argv": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true }, "string-format": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", "dev": true }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, "string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + } } }, "string.prototype.trimend": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -44021,6 +52139,8 @@ }, "string.prototype.trimstart": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -44029,6 +52149,9 @@ }, "strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -44041,10 +52164,14 @@ }, "strip-final-newline": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, "strip-hex-prefix": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", "requires": { "is-hex-prefixed": "1.0.0" } @@ -44059,7 +52186,10 @@ } }, "strip-json-comments": { - "version": "3.1.1" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true }, "strong-log-transformer": { "version": "2.1.0", @@ -44074,16 +52204,33 @@ }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, "swarm-js": { "version": "0.1.40", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", + "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", "dev": true, "peer": true, "requires": { @@ -44102,11 +52249,25 @@ "dependencies": { "chownr": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true, "peer": true }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "peer": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "fs-extra": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "dev": true, "peer": true, "requires": { @@ -44117,6 +52278,8 @@ }, "fs-minipass": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "peer": true, "requires": { @@ -44125,11 +52288,15 @@ }, "get-stream": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, "peer": true }, "got": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", "dev": true, "peer": true, "requires": { @@ -44151,19 +52318,22 @@ }, "is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, "peer": true }, - "jsonfile": { - "version": "4.0.0", + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } + "peer": true }, "minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "peer": true, "requires": { @@ -44173,40 +52343,35 @@ }, "minizlib": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, "peer": true, "requires": { "minipass": "^2.9.0" } }, - "mkdirp": { - "version": "0.5.6", - "dev": true, - "peer": true, - "requires": { - "minimist": "^1.2.6" - } - }, "p-cancelable": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", "dev": true, "peer": true }, "p-timeout": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", "dev": true, "peer": true, "requires": { "p-finally": "^1.0.0" } }, - "prepend-http": { - "version": "1.0.4", - "dev": true, - "peer": true - }, "tar": { "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "dev": true, "peer": true, "requires": { @@ -44218,29 +52383,13 @@ "safe-buffer": "^5.2.1", "yallist": "^3.1.1" } - }, - "universalify": { - "version": "0.1.2", - "dev": true, - "peer": true - }, - "url-parse-lax": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "yallist": { - "version": "3.1.1", - "dev": true, - "peer": true } } }, "table-layout": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", "dev": true, "requires": { "array-back": "^4.0.1", @@ -44251,10 +52400,14 @@ "dependencies": { "array-back": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true }, "typical": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true } } @@ -44271,6 +52424,20 @@ "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "tar-stream": { @@ -44292,8 +52459,31 @@ "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, "test-value": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", + "integrity": "sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==", "dev": true, "peer": true, "requires": { @@ -44303,6 +52493,8 @@ "dependencies": { "array-back": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", "dev": true, "peer": true, "requires": { @@ -44311,6 +52503,8 @@ }, "typical": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", "dev": true, "peer": true } @@ -44318,6 +52512,8 @@ }, "testrpc": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", + "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", "dev": true, "peer": true }, @@ -44329,10 +52525,14 @@ }, "text-table": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "through2": { @@ -44346,30 +52546,65 @@ }, "timed-out": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "dev": true, "peer": true }, - "to-readable-stream": { - "version": "1.0.0", + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, - "peer": true + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true }, "to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "requires": { "is-number": "^7.0.0" } }, "toidentifier": { - "version": "1.0.1" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true }, "tough-cookie": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "peer": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "peer": true + } } }, "tr46": { @@ -44379,6 +52614,14 @@ "dev": true, "requires": { "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } } }, "treeverse": { @@ -44394,10 +52637,15 @@ "dev": true }, "true-case-path": { - "version": "2.2.1" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", + "dev": true }, "ts-command-line-args": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz", + "integrity": "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -44408,11 +52656,15 @@ }, "ts-essentials": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", "dev": true, "requires": {} }, "ts-generator": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", + "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", "dev": true, "requires": { "@types/mkdirp": "^0.5.2", @@ -44428,6 +52680,8 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -44435,6 +52689,8 @@ }, "chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -44444,6 +52700,8 @@ }, "color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" @@ -44451,21 +52709,26 @@ }, "color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, - "mkdirp": { - "version": "0.5.6", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, "supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -44473,13 +52736,17 @@ }, "ts-essentials": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", + "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", "dev": true } } }, "ts-node": { - "version": "10.8.2", - "devOptional": true, + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -44498,7 +52765,9 @@ "dependencies": { "diff": { "version": "4.0.2", - "devOptional": true + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true } } }, @@ -44514,6 +52783,15 @@ "strip-bom": "^3.0.0" }, "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -44523,27 +52801,30 @@ } }, "tslib": { - "version": "2.4.0", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "tsort": { - "version": "0.0.1" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true }, "tsutils": { "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "dev": true - } } }, "tunnel-agent": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "peer": true, "requires": { @@ -44551,16 +52832,26 @@ } }, "tweetnacl": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true }, "tweetnacl-util": { - "version": "0.15.1" + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true }, "type": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, "type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { "prelude-ls": "^1.2.1" @@ -44568,16 +52859,20 @@ }, "type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "type-is": { "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "peer": true, "requires": { @@ -44587,6 +52882,8 @@ }, "typechain": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz", + "integrity": "sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ==", "dev": true, "requires": { "@types/prettier": "^2.1.1", @@ -44601,43 +52898,10 @@ "ts-essentials": "^7.0.1" }, "dependencies": { - "fs-extra": { - "version": "7.0.1", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "glob": { - "version": "7.2.3", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "universalify": { - "version": "0.1.2", + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true } } @@ -44650,32 +52914,42 @@ }, "typedarray-to-buffer": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "requires": { "is-typedarray": "^1.0.0" } }, "typescript": { "version": "4.7.4", - "devOptional": true + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true }, "typical": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true }, "uglify-js": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.2.tgz", - "integrity": "sha512-AaQNokTNgExWrkEYA24BTNMSjyqEXPSfhqoS0AxmHkCJ4U+Dyy5AvbGV/sqxuxficEfGGoX3zWw9R7QpLFfEsg==", + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", + "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", "dev": true, "optional": true }, "ultron": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true, "peer": true }, "unbox-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "requires": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -44684,7 +52958,10 @@ } }, "undici": { - "version": "5.6.0" + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.8.1.tgz", + "integrity": "sha512-iDRmWX4Zar/4A/t+1LrKQRm102zw2l9Wgat3LtTlTn8ykvMZmAmpq9tjyHEigx18FsY7IfATvyN3xSw9BDz0eA==", + "dev": true }, "unique-filename": { "version": "1.1.1", @@ -44711,13 +52988,16 @@ "dev": true }, "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "unpipe": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true }, "upath": { "version": "2.0.1", @@ -44725,8 +53005,20 @@ "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true }, + "update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -44734,6 +53026,8 @@ }, "url": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", "dev": true, "peer": true, "requires": { @@ -44743,40 +53037,54 @@ "dependencies": { "punycode": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", "dev": true, "peer": true } } }, "url-parse-lax": { - "version": "3.0.0", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", "dev": true, "peer": true, "requires": { - "prepend-http": "^2.0.0" + "prepend-http": "^1.0.1" } }, "url-set-query": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", "dev": true, "peer": true }, "url-to-options": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", "dev": true, "peer": true }, "utf-8-validate": { "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", "requires": { "node-gyp-build": "^4.3.0" } }, "utf8": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, "util": { "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", "requires": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -44787,26 +53095,50 @@ } }, "util-deprecate": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "utils-merge": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, "peer": true }, "uuid": { - "version": "8.3.2" + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true }, "v8-compile-cache": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "v8-compile-cache-lib": { "version": "3.0.1", - "devOptional": true + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } }, "validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -44814,39 +53146,38 @@ } }, "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, "requires": { - "builtins": "^1.0.3" + "builtins": "^5.0.0" } }, "varint": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", "dev": true, "peer": true }, "vary": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, "peer": true }, "verror": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "peer": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "dev": true, - "peer": true - } } }, "walk-up-path": { @@ -44855,6 +53186,15 @@ "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", "dev": true }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -44865,133 +53205,163 @@ } }, "web3": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.7.5.tgz", + "integrity": "sha512-3jHZTWyXt975AOXgnZKayiSWDLpoSKk9fZtLk1hURQtt7AdSbXPT8AK9ooBCm0Dt3GYaOeNcHGaiHC3gtyqhLg==", "dev": true, "peer": true, "requires": { - "web3-bzz": "1.7.4", - "web3-core": "1.7.4", - "web3-eth": "1.7.4", - "web3-eth-personal": "1.7.4", - "web3-net": "1.7.4", - "web3-shh": "1.7.4", - "web3-utils": "1.7.4" + "web3-bzz": "1.7.5", + "web3-core": "1.7.5", + "web3-eth": "1.7.5", + "web3-eth-personal": "1.7.5", + "web3-net": "1.7.5", + "web3-shh": "1.7.5", + "web3-utils": "1.7.5" } }, "web3-bzz": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.5.tgz", + "integrity": "sha512-Z53sY0YK/losqjJncmL4vP0zZI9r6tiXg6o7R6e1JD2Iy7FH3serQvU+qXmPjqEBzsnhf8wTG+YcBPB3RHpr0Q==", "dev": true, "peer": true, "requires": { "@types/node": "^12.12.6", - "got": "9.6.0", + "got": "12.1.0", "swarm-js": "^0.1.40" }, "dependencies": { "@types/node": { "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true, "peer": true } } }, "web3-core": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.5.tgz", + "integrity": "sha512-UgOWXZr1fR/3cUQJKWbfMwRxj1/N7o6RSd/dHqdXBlOD+62EjNZItFmLRg5veq5kp9YfXzrNw9bnDkXfsL+nKQ==", "requires": { "@types/bn.js": "^5.1.0", "@types/node": "^12.12.6", "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" + "web3-core-helpers": "1.7.5", + "web3-core-method": "1.7.5", + "web3-core-requestmanager": "1.7.5", + "web3-utils": "1.7.5" }, "dependencies": { "@types/node": { - "version": "12.20.55" + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" } } }, "web3-core-helpers": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.5.tgz", + "integrity": "sha512-lDDjTks6Q6aNUO87RYrY2xub3UWTKr/RIWxpHJODEqkLxZS1dWdyliJ6aIx3031VQwsNT5HE7NvABe/t0p3iDQ==", "requires": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" + "web3-eth-iban": "1.7.5", + "web3-utils": "1.7.5" } }, "web3-core-method": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.5.tgz", + "integrity": "sha512-ApTvq1Llzlbxmy0n4L7QaE6NodIsR80VJqk8qN4kLg30SGznt/pNJFebryLI2kpyDmxSgj1TjEWzmHJBp6FhYg==", "requires": { "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" + "web3-core-helpers": "1.7.5", + "web3-core-promievent": "1.7.5", + "web3-core-subscriptions": "1.7.5", + "web3-utils": "1.7.5" } }, "web3-core-promievent": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.5.tgz", + "integrity": "sha512-uZ1VRErVuhiLtHlyt3oEH/JSvAf6bWPndChHR9PG7i1Zfqm6ZVCeM91ICTPmiL8ddsGQOxASpnJk4vhApcTIww==", "requires": { "eventemitter3": "4.0.4" }, "dependencies": { "eventemitter3": { - "version": "4.0.4" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" } } }, "web3-core-requestmanager": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.5.tgz", + "integrity": "sha512-3KpfxW/wVH4mgwWEsSJGHKrtRVoijWlDxtUrm17xgtqRNZ2mFolifKnHAUKa0fY48C9CrxmcCiMIi3W4G6WYRw==", "requires": { "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" + "web3-core-helpers": "1.7.5", + "web3-providers-http": "1.7.5", + "web3-providers-ipc": "1.7.5", + "web3-providers-ws": "1.7.5" } }, "web3-core-subscriptions": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.5.tgz", + "integrity": "sha512-YK6utQ7Wwjbe4XZOIA8quWGBPi1lFDS1A+jQYwxKKrCvm6BloBNc3FhvrcSYlDhLe/kOy8+2Je8i9amndgT4ww==", "requires": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" + "web3-core-helpers": "1.7.5" }, "dependencies": { "eventemitter3": { - "version": "4.0.4" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" } } }, "web3-eth": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.5.tgz", + "integrity": "sha512-BucjvqZyDWYkGlsFX+OnOBub0YutlC1KZiNGibdmvtNX0NQK+8iw1uzAoL9yTTwCSszL7lnkFe8N+HCOl9B4Dw==", "dev": true, "peer": true, "requires": { - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-eth-accounts": "1.7.4", - "web3-eth-contract": "1.7.4", - "web3-eth-ens": "1.7.4", - "web3-eth-iban": "1.7.4", - "web3-eth-personal": "1.7.4", - "web3-net": "1.7.4", - "web3-utils": "1.7.4" + "web3-core": "1.7.5", + "web3-core-helpers": "1.7.5", + "web3-core-method": "1.7.5", + "web3-core-subscriptions": "1.7.5", + "web3-eth-abi": "1.7.5", + "web3-eth-accounts": "1.7.5", + "web3-eth-contract": "1.7.5", + "web3-eth-ens": "1.7.5", + "web3-eth-iban": "1.7.5", + "web3-eth-personal": "1.7.5", + "web3-net": "1.7.5", + "web3-utils": "1.7.5" } }, "web3-eth-abi": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.5.tgz", + "integrity": "sha512-qWHvF7sayxql9BD1yqK9sZRLBQ66eJzGeaU53Y1PRq2iFPrhY6NUWxQ3c3ps0rg+dyObvRbloviWpKXcS4RE/A==", "dev": true, "peer": true, "requires": { "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.7.4" + "web3-utils": "1.7.5" } }, "web3-eth-accounts": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.5.tgz", + "integrity": "sha512-AzMLoTj3RGwKpyp3x3TtHrEeU4VpR99iMOD6NKrWSDumS6QEi0lCo+y7QZhdTlINw3iIA3SFIdvbAOO4NCHSDg==", "dev": true, "peer": true, "requires": { @@ -45002,19 +53372,23 @@ "ethereumjs-util": "^7.0.10", "scrypt-js": "^3.0.1", "uuid": "3.3.2", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-utils": "1.7.4" + "web3-core": "1.7.5", + "web3-core-helpers": "1.7.5", + "web3-core-method": "1.7.5", + "web3-utils": "1.7.5" }, "dependencies": { "bn.js": { "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true, "peer": true }, "eth-lib": { "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", "dev": true, "peer": true, "requires": { @@ -45025,118 +53399,146 @@ }, "uuid": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true, "peer": true } } }, "web3-eth-contract": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.5.tgz", + "integrity": "sha512-qab7NPJRKRlTs58ozsqK8YIEwWpxIm3vD/okSIKBGkFx5gIHWW+vGmMh5PDSfefLJM9rCd+T+Lc0LYvtME7uqg==", "dev": true, "peer": true, "requires": { "@types/bn.js": "^5.1.0", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-utils": "1.7.4" + "web3-core": "1.7.5", + "web3-core-helpers": "1.7.5", + "web3-core-method": "1.7.5", + "web3-core-promievent": "1.7.5", + "web3-core-subscriptions": "1.7.5", + "web3-eth-abi": "1.7.5", + "web3-utils": "1.7.5" } }, "web3-eth-ens": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.5.tgz", + "integrity": "sha512-k1Q0msdRv/wac2egpZBIwG3n/sa/KdrVmVJvFm471gLTL4xfUizV5qJjkDVf+ikf9JyDvWJTs5eWNUUbOFIw/A==", "dev": true, "peer": true, "requires": { "content-hash": "^2.5.2", "eth-ens-namehash": "2.0.8", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-eth-contract": "1.7.4", - "web3-utils": "1.7.4" + "web3-core": "1.7.5", + "web3-core-helpers": "1.7.5", + "web3-core-promievent": "1.7.5", + "web3-eth-abi": "1.7.5", + "web3-eth-contract": "1.7.5", + "web3-utils": "1.7.5" } }, "web3-eth-iban": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.5.tgz", + "integrity": "sha512-mn2W5t/1IpL8OZvzAabLKT4kvwRnZSJ9K0tctndl9sDNWkfITYQibEEhUaNNA50Q5fJKgVudHI/m0gwIVTyG8Q==", "requires": { "bn.js": "^5.2.1", - "web3-utils": "1.7.4" + "web3-utils": "1.7.5" } }, "web3-eth-personal": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.5.tgz", + "integrity": "sha512-txh2P/eN8I4AOUKFi9++KKddoD0tWfCuu9Y1Kc41jSRbk6smO88Fum0KWNmYFYhSCX2qiknS1DfqsONl3igoKQ==", "dev": true, "peer": true, "requires": { "@types/node": "^12.12.6", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-net": "1.7.4", - "web3-utils": "1.7.4" + "web3-core": "1.7.5", + "web3-core-helpers": "1.7.5", + "web3-core-method": "1.7.5", + "web3-net": "1.7.5", + "web3-utils": "1.7.5" }, "dependencies": { "@types/node": { "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true, "peer": true } } }, "web3-net": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.7.5.tgz", + "integrity": "sha512-xwuCb2YWw49PmW81AJQ/G+Xi2ikRsYyZXSgyPt4LmZuKjiqg/6kSdK8lZvUi3Pi3wM+QDBXbpr73M/WEkW0KvA==", "dev": true, "peer": true, "requires": { - "web3-core": "1.7.4", - "web3-core-method": "1.7.4", - "web3-utils": "1.7.4" + "web3-core": "1.7.5", + "web3-core-method": "1.7.5", + "web3-utils": "1.7.5" } }, "web3-providers-http": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.5.tgz", + "integrity": "sha512-vPgr4Kzy0M3CHtoP/Bh7qwK/D9h2fhjpoqctdMWVJseOfeTgfOphCKN0uwV8w2VpZgDPXA8aeTdBx5OjmDdStA==", "requires": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.7.5" } }, "web3-providers-ipc": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.5.tgz", + "integrity": "sha512-aNHx+RAROzO+apDEzy8Zncj78iqWBadIXtpmFDg7uiTn8i+oO+IcP1Yni7jyzkltsysVJHgHWG4kPx50ANCK3Q==", "requires": { "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" + "web3-core-helpers": "1.7.5" } }, "web3-providers-ws": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.5.tgz", + "integrity": "sha512-9uJNVVkIGC8PmM9kNbgPth56HDMSSsxZh3ZEENdwO3LNWemaADiQYUDCsD/dMVkn0xsGLHP5dgAy4Q5msqySLg==", "requires": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", + "web3-core-helpers": "1.7.5", "websocket": "^1.0.32" }, "dependencies": { "eventemitter3": { - "version": "4.0.4" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" } } }, "web3-shh": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.5.tgz", + "integrity": "sha512-aCIWJyLMH5H76OybU4ZpUCJ93yNOPATGhJ+KboRPU8QZDzS2CcVhtEzyl27bbvw+rSnVroMLqBgTXBB4mmKI7A==", "dev": true, "peer": true, "requires": { - "web3-core": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-net": "1.7.4" + "web3-core": "1.7.5", + "web3-core-method": "1.7.5", + "web3-core-subscriptions": "1.7.5", + "web3-net": "1.7.5" } }, "web3-utils": { - "version": "1.7.4", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", + "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", "requires": { "bn.js": "^5.2.1", "ethereum-bloom-filters": "^1.0.6", @@ -45155,6 +53557,8 @@ }, "websocket": { "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", "requires": { "bufferutil": "^4.0.1", "debug": "^2.2.0", @@ -45166,12 +53570,16 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "ms": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -45188,12 +53596,17 @@ }, "which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -45204,11 +53617,15 @@ }, "which-module": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", "dev": true, "peer": true }, "which-typed-array": { "version": "1.1.8", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", + "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -45229,11 +53646,15 @@ }, "window-size": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", "dev": true, "peer": true }, "word-wrap": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wordwrap": { @@ -45244,6 +53665,8 @@ }, "wordwrapjs": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "dev": true, "requires": { "reduce-flatten": "^2.0.0", @@ -45252,15 +53675,23 @@ "dependencies": { "typical": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true } } }, "workerpool": { - "version": "6.2.0" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true }, "wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -45268,18 +53699,19 @@ } }, "wrappy": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", "dev": true, "requires": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.7" } }, "write-json-file": { @@ -45301,6 +53733,18 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } } } }, @@ -45386,11 +53830,15 @@ } }, "ws": { - "version": "7.5.8", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "requires": {} }, "xhr": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", "dev": true, "peer": true, "requires": { @@ -45402,6 +53850,8 @@ }, "xhr-request": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", "dev": true, "peer": true, "requires": { @@ -45412,76 +53862,81 @@ "timed-out": "^4.0.1", "url-set-query": "^1.0.0", "xhr": "^2.0.4" - }, - "dependencies": { - "query-string": { - "version": "5.1.1", - "dev": true, - "peer": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "dev": true, - "peer": true - } } }, "xhr-request-promise": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", "dev": true, "peer": true, "requires": { "xhr-request": "^1.1.0" } }, - "xhr2-cookies": { - "version": "1.1.0", - "requires": { - "cookiejar": "^2.1.1" - } - }, "xtend": { - "version": "4.0.2" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true }, "y18n": { - "version": "5.0.8" + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true }, "yaeti": { - "version": "0.0.6" + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" }, "yallist": { - "version": "4.0.0" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "yaml": { "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "yargs-parser": { + "version": "21.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.0.tgz", + "integrity": "sha512-xzm2t63xTV/f7+bGMSRzLhUNk1ajv/tDoaD5OeGyC3cFo2fl7My9Z4hS3q2VdQ7JaLvTxErO8Jp5pRIFGMD/zg==", + "dev": true + } } }, "yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true }, "yargs-unparser": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, "requires": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -45490,22 +53945,36 @@ }, "dependencies": { "camelcase": { - "version": "6.3.0" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true }, "decamelize": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true }, "is-plain-obj": { - "version": "2.1.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true } } }, "yn": { "version": "3.1.1", - "devOptional": true + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true }, "yocto-queue": { - "version": "0.1.0" + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index a79bd6ec8..0f6363c7f 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,10 @@ }, "author": "Biconomy (https://biconomy.io)", "devDependencies": { + "hardhat": "^2.9.9", "lerna": "^5.1.6", "nx": "^14.5.2", "prettier": "2.7.1", "ts-node": "^10.8.2" - }, - "dependencies": { - "hardhat": "^2.9.9" } } diff --git a/packages/core-types/package-lock.json b/packages/core-types/package-lock.json deleted file mode 100644 index 253b365b4..000000000 --- a/packages/core-types/package-lock.json +++ /dev/null @@ -1,2480 +0,0 @@ -{ - "name": "@biconomy-sdk/core-types", - "version": "0.0.2", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@gnosis.pm/safe-deployments": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", - "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", - "requires": { - "semver": "^7.3.7" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", - "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" - } - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", - "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" - } - } - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", - "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" - } - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.31.0.tgz", - "integrity": "sha512-VKW4JPHzG5yhYQrQ1AzXgVgX8ZAJEvCz0QI6mLRX4tf7rnFfh5D8SKm0Pq6w5PyNfAWJk6sv313+nEt3ohWMBQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/type-utils": "5.31.0", - "@typescript-eslint/utils": "5.31.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.31.0.tgz", - "integrity": "sha512-UStjQiZ9OFTFReTrN+iGrC6O/ko9LVDhreEK5S3edmXgR396JGq7CoX2TWIptqt/ESzU2iRKXAHfSF2WJFcWHw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz", - "integrity": "sha512-8jfEzBYDBG88rcXFxajdVavGxb5/XKXyvWgvD8Qix3EEJLCFIdVloJw+r9ww0wbyNLOTYyBsR+4ALNGdlalLLg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz", - "integrity": "sha512-7ZYqFbvEvYXFn9ax02GsPcEOmuWNg+14HIf4q+oUuLnMbpJ6eHAivCg7tZMVwzrIuzX3QCeAOqKoyMZCv5xe+w==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.31.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/types": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.31.0.tgz", - "integrity": "sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz", - "integrity": "sha512-3S625TMcARX71wBc2qubHaoUwMEn+l9TCsaIzYI/ET31Xm2c9YQ+zhGgpydjorwQO9pLfR/6peTzS/0G3J/hDw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.31.0.tgz", - "integrity": "sha512-kcVPdQS6VIpVTQ7QnGNKMFtdJdvnStkqS5LeALr4rcwx11G6OWb2HB17NMPnlRHvaZP38hL9iK8DdE9Fne7NYg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz", - "integrity": "sha512-ZK0jVxSjS4gnPirpVjXHz7mgdOsZUHzNYSfTw2yPa3agfbt9YfqaBiBZFSSxeBWnpWkzCxTfUpnzA3Vily/CSg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.31.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", - "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "requires": { - "http-https": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "web3-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", - "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", - "requires": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - } - } - }, - "web3-core-helpers": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", - "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", - "requires": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-method": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", - "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", - "requires": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-promievent": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", - "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-core-requestmanager": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", - "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", - "requires": { - "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" - } - }, - "web3-core-subscriptions": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", - "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" - } - }, - "web3-eth-iban": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", - "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.7.4" - } - }, - "web3-providers-http": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", - "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", - "requires": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", - "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" - } - }, - "web3-providers-ws": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", - "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", - "websocket": "^1.0.32" - } - }, - "web3-utils": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", - "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "requires": { - "cookiejar": "^2.1.1" - } - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/packages/ethers-lib/package-lock.json b/packages/ethers-lib/package-lock.json deleted file mode 100644 index 256912533..000000000 --- a/packages/ethers-lib/package-lock.json +++ /dev/null @@ -1,5028 +0,0 @@ -{ - "name": "@biconomy-sdk/ethers-lib", - "version": "0.0.2", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - } - }, - "@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - } - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/vm": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", - "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.3", - "@ethereumjs/blockchain": "^5.5.3", - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.4", - "rustbn.js": "~0.2.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/basex": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", - "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/hdnode": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", - "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/json-wallets": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", - "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", - "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/sha2": "^5.6.1" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/providers": { - "version": "5.6.8", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", - "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/base64": "^5.6.1", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "@ethersproject/random": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", - "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/sha2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", - "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", - "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/units": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", - "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/wallet": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", - "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/json-wallets": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/wordlists": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", - "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@gnosis.pm/safe-core-sdk-types": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.2.1.tgz", - "integrity": "sha512-K2kTGk1FNKlCJtuDqbFrRPNxot/4dQPiI2pnquGJchpJXIMflKb7xPcjDY5CPTYlBG3lCoQ9ZRk7Ytlu66TcSQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "1.15.0", - "web3-core": "^1.7.1" - } - }, - "@gnosis.pm/safe-core-sdk-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.2.1.tgz", - "integrity": "sha512-VPnSLayGR4omwcNHPwzx8/aDyGXrWULKSF+ENeiWbmwgIhwQnB7T2gzhArNeUgt4BxmYft/HFm1MRSqiQnIQJw==", - "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.2.1", - "semver": "^7.3.7", - "web3-utils": "^1.7.1" - } - }, - "@gnosis.pm/safe-deployments": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", - "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", - "requires": { - "semver": "^7.3.7" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", - "dev": true - }, - "@noble/secp256k1": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@nomiclabs/hardhat-ethers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.0.tgz", - "integrity": "sha512-vlW90etB3675QWG7tMrHaDoTa7ymMB7irM4DAQ98g8zJoe9YqEggeDnbO6v5b+BLth/ty4vN6Ko/kaqRN1krHw==", - "dev": true - }, - "@nomiclabs/hardhat-waffle": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", - "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", - "dev": true, - "requires": { - "@types/sinon-chai": "^3.2.3", - "@types/web3": "1.0.19" - } - }, - "@openzeppelin/contracts": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.2.tgz", - "integrity": "sha512-4n/JL9izql8303mPqPdubuna/DWEMbmOzWYUWyCPhjhiEr2w3nQrjE7vZz1fBF+wzzP6dZbIcsgqACk53c9FGA==" - }, - "@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "dev": true - }, - "@scure/bip32": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", - "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", - "dev": true, - "requires": { - "@noble/hashes": "~1.1.1", - "@noble/secp256k1": "~1.6.0", - "@scure/base": "~1.1.0" - } - }, - "@scure/bip39": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", - "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", - "dev": true, - "requires": { - "@noble/hashes": "~1.1.1", - "@scure/base": "~1.1.0" - } - }, - "@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "requires": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - } - }, - "@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true - }, - "@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@solidity-parser/parser": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", - "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", - "dev": true, - "requires": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@typechain/ethers-v5": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz", - "integrity": "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - } - }, - "@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", - "dev": true - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", - "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" - } - } - }, - "@types/chai": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", - "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", - "dev": true - }, - "@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dev": true, - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", - "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" - } - } - }, - "@types/prettier": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz", - "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==", - "dev": true - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", - "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" - } - } - }, - "@types/sinon": { - "version": "10.0.13", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", - "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", - "dev": true, - "requires": { - "@types/sinonjs__fake-timers": "*" - } - }, - "@types/sinon-chai": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", - "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", - "dev": true - }, - "@types/underscore": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", - "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", - "dev": true - }, - "@types/web3": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", - "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", - "dev": true, - "requires": { - "@types/bn.js": "*", - "@types/underscore": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.31.0.tgz", - "integrity": "sha512-VKW4JPHzG5yhYQrQ1AzXgVgX8ZAJEvCz0QI6mLRX4tf7rnFfh5D8SKm0Pq6w5PyNfAWJk6sv313+nEt3ohWMBQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/type-utils": "5.31.0", - "@typescript-eslint/utils": "5.31.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.31.0.tgz", - "integrity": "sha512-UStjQiZ9OFTFReTrN+iGrC6O/ko9LVDhreEK5S3edmXgR396JGq7CoX2TWIptqt/ESzU2iRKXAHfSF2WJFcWHw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz", - "integrity": "sha512-8jfEzBYDBG88rcXFxajdVavGxb5/XKXyvWgvD8Qix3EEJLCFIdVloJw+r9ww0wbyNLOTYyBsR+4ALNGdlalLLg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz", - "integrity": "sha512-7ZYqFbvEvYXFn9ax02GsPcEOmuWNg+14HIf4q+oUuLnMbpJ6eHAivCg7tZMVwzrIuzX3QCeAOqKoyMZCv5xe+w==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.31.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/types": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.31.0.tgz", - "integrity": "sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz", - "integrity": "sha512-3S625TMcARX71wBc2qubHaoUwMEn+l9TCsaIzYI/ET31Xm2c9YQ+zhGgpydjorwQO9pLfR/6peTzS/0G3J/hDw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.31.0.tgz", - "integrity": "sha512-kcVPdQS6VIpVTQ7QnGNKMFtdJdvnStkqS5LeALr4rcwx11G6OWb2HB17NMPnlRHvaZP38hL9iK8DdE9Fne7NYg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz", - "integrity": "sha512-ZK0jVxSjS4gnPirpVjXHz7mgdOsZUHzNYSfTw2yPa3agfbt9YfqaBiBZFSSxeBWnpWkzCxTfUpnzA3Vily/CSg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.31.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "requires": { - "async": "^2.4.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true - }, - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "requires": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - } - }, - "command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "requires": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" - }, - "core-js-pure": { - "version": "3.24.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.0.tgz", - "integrity": "sha512-uzMmW8cRh7uYw4JQtzqvGWRyC2T5+4zipQLQdi2FmiRqP83k3d6F3stv2iAlNhOs6cXN401FCD5TL0vvleuHgA==", - "dev": true - }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - } - } - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", - "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethers": { - "version": "5.6.9", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", - "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", - "dev": true, - "requires": { - "@ethersproject/abi": "5.6.4", - "@ethersproject/abstract-provider": "5.6.1", - "@ethersproject/abstract-signer": "5.6.2", - "@ethersproject/address": "5.6.1", - "@ethersproject/base64": "5.6.1", - "@ethersproject/basex": "5.6.1", - "@ethersproject/bignumber": "5.6.2", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.1", - "@ethersproject/contracts": "5.6.2", - "@ethersproject/hash": "5.6.1", - "@ethersproject/hdnode": "5.6.2", - "@ethersproject/json-wallets": "5.6.1", - "@ethersproject/keccak256": "5.6.1", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.4", - "@ethersproject/pbkdf2": "5.6.1", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.8", - "@ethersproject/random": "5.6.1", - "@ethersproject/rlp": "5.6.1", - "@ethersproject/sha2": "5.6.1", - "@ethersproject/signing-key": "5.6.2", - "@ethersproject/solidity": "5.6.1", - "@ethersproject/strings": "5.6.1", - "@ethersproject/transactions": "5.6.2", - "@ethersproject/units": "5.6.1", - "@ethersproject/wallet": "5.6.2", - "@ethersproject/web": "5.6.1", - "@ethersproject/wordlists": "5.6.1" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "requires": { - "array-back": "^3.0.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "hardhat": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.10.1.tgz", - "integrity": "sha512-0FN9TyCtn7Lt25SB2ei2G7nA2rZjP+RN6MvFOm+zYwherxLZNo6RbD8nDz88eCbhRapevmXqOiL2nM8INKsjmA==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/blockchain": "^5.5.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/tx": "^3.5.1", - "@ethereumjs/vm": "^5.9.0", - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@sentry/node": "^5.18.1", - "@solidity-parser/parser": "^0.14.2", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^7.1.4", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "lodash": "^4.17.11", - "merkle-patricia-tree": "^4.2.4", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "slash": "^3.0.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "true-case-path": "^2.2.1", - "tsort": "0.0.1", - "undici": "^5.4.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "ethereum-cryptography": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", - "dev": true, - "requires": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "requires": { - "fp-ts": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "requires": { - "buffer": "^5.6.0" - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - } - }, - "level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dev": true, - "requires": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - } - }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dev": true, - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - }, - "level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", - "dev": true - } - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "requires": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "requires": { - "obliterator": "^2.0.0" - } - }, - "mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "requires": { - "http-https": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", - "dev": true - }, - "ts-command-line-args": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz", - "integrity": "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - } - }, - "ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typechain": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz", - "integrity": "sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ==", - "dev": true, - "requires": { - "@types/prettier": "^2.1.1", - "debug": "^4.1.1", - "fs-extra": "^7.0.0", - "glob": "^7.1.6", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.1.2", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "undici": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.8.0.tgz", - "integrity": "sha512-1F7Vtcez5w/LwH2G2tGnFIihuWUlc58YidwLiCv+jR2Z50x0tNXpRRw7eOIJ+GvqCqIkg9SB7NWAJ/T9TLfv8Q==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "web3-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", - "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", - "requires": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - } - } - }, - "web3-core-helpers": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", - "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", - "requires": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-method": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", - "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", - "requires": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-promievent": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", - "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-core-requestmanager": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", - "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", - "requires": { - "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" - } - }, - "web3-core-subscriptions": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", - "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" - } - }, - "web3-eth-iban": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", - "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.7.4" - } - }, - "web3-providers-http": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", - "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", - "requires": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", - "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" - } - }, - "web3-providers-ws": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", - "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", - "websocket": "^1.0.32" - } - }, - "web3-utils": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", - "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "dependencies": { - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "requires": { - "cookiejar": "^2.1.1" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/packages/node-client/package-lock.json b/packages/node-client/package-lock.json deleted file mode 100644 index 52226ab02..000000000 --- a/packages/node-client/package-lock.json +++ /dev/null @@ -1,5214 +0,0 @@ -{ - "name": "@biconomy-sdk/node-client", - "version": "0.0.2", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - } - }, - "@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - } - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/vm": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", - "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.3", - "@ethereumjs/blockchain": "^5.5.3", - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.4", - "rustbn.js": "~0.2.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/sha2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", - "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", - "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@gnosis.pm/safe-core-sdk": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.2.1.tgz", - "integrity": "sha512-QeoEBqey5crrM0lBVOeEAW0OoQWfBrTUr2fqapDlmDGFVXf4fWM5R68zGzym+5HMvc3/CkVvanwQa4mZWllsjg==", - "requires": { - "@ethersproject/solidity": "^5.6.0", - "@gnosis.pm/safe-core-sdk-types": "^1.2.1", - "@gnosis.pm/safe-deployments": "1.15.0", - "ethereumjs-util": "^7.1.4", - "semver": "^7.3.5", - "web3-utils": "^1.7.1" - }, - "dependencies": { - "@gnosis.pm/safe-core-sdk-types": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.2.1.tgz", - "integrity": "sha512-K2kTGk1FNKlCJtuDqbFrRPNxot/4dQPiI2pnquGJchpJXIMflKb7xPcjDY5CPTYlBG3lCoQ9ZRk7Ytlu66TcSQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "1.15.0", - "web3-core": "^1.7.1" - } - } - } - }, - "@gnosis.pm/safe-core-sdk-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.1.0.tgz", - "integrity": "sha512-VvEqWCliA6KXwt9N4YTzN5JcqnhLxLjUTU7trpQqQ7wU9OQcF+Kdrer86wDOF5lYZVE24zudw1s4gW3dxUkm6A==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "^1.12.0", - "web3-core": "^1.7.1" - } - }, - "@gnosis.pm/safe-core-sdk-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.1.0.tgz", - "integrity": "sha512-ZH1Ps3qsreczKHHfBb34dj55LDTiU7WAeKD7jgKnhiloGWRniLv+cbBfwFQNAezoyANvgyI5ky64wgwm1bm1YA==", - "dev": true, - "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "web3-utils": "^1.7.1" - } - }, - "@gnosis.pm/safe-deployments": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", - "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", - "requires": { - "semver": "^7.3.7" - } - }, - "@gnosis.pm/safe-ethers-lib": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.1.0.tgz", - "integrity": "sha512-MG01hGu/3q/sl9fXE3sU7CMVpVMJ4k9/ro1JVZaE29jmsar1cHFUOJNws7Do3orxTLQZ2egkARcmyv+l673FoA==", - "dev": true, - "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" - } - }, - "@gnosis.pm/safe-web3-lib": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.1.0.tgz", - "integrity": "sha512-B4wnVDtiK2EBuXwsI0hTYlACLVr8F9qvpFC16/Smdg8fWv/r6WpK7yB86DRyW9R1BEwkjmPvpvx9rqIKW5xRkA==", - "dev": true, - "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@jridgewell/resolve-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", - "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@nomiclabs/hardhat-ethers": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.6.tgz", - "integrity": "sha512-q2Cjp20IB48rEn2NPjR1qxsIQBvFVYW9rFRCFq+bC4RUrn1Ljz3g4wM8uSlgIBZYBi2JMXxmOzFqHraczxq4Ng==", - "dev": true - }, - "@nomiclabs/hardhat-waffle": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", - "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", - "dev": true, - "requires": { - "@types/sinon-chai": "^3.2.3", - "@types/web3": "1.0.19" - } - }, - "@nomiclabs/hardhat-web3": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz", - "integrity": "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==", - "dev": true, - "requires": { - "@types/bignumber.js": "^5.0.0" - } - }, - "@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "requires": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - } - }, - "@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true - }, - "@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@solidity-parser/parser": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.2.tgz", - "integrity": "sha512-10cr0s+MtRtqjEw0WFJrm2rwULN30xx7btd/v9cmqME2617/2M5MbHDkFIGIGTa7lwNw4bN9mVGfhlLzrYw8pA==", - "dev": true, - "requires": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", - "dev": true - }, - "@types/bignumber.js": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", - "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==", - "dev": true, - "requires": { - "bignumber.js": "*" - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "@types/chai": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", - "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", - "dev": true - }, - "@types/chai-as-promised": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", - "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", - "dev": true, - "requires": { - "@types/chai": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", - "dev": true - }, - "@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dev": true, - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "@types/mkdirp": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", - "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true - }, - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - }, - "@types/node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", - "dev": true - }, - "@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "requires": { - "@types/node": "*" - } - }, - "@types/sinon": { - "version": "10.0.12", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.12.tgz", - "integrity": "sha512-uWf4QJ4oky/GckJ1MYQxU52cgVDcXwBhDkpvLbi4EKoLPqLE4MOH6T/ttM33l3hi0oZ882G6oIzWv/oupRYSxQ==", - "dev": true, - "requires": { - "@types/sinonjs__fake-timers": "*" - } - }, - "@types/sinon-chai": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", - "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", - "dev": true - }, - "@types/underscore": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", - "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", - "dev": true - }, - "@types/web3": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", - "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", - "dev": true, - "requires": { - "@types/bn.js": "*", - "@types/underscore": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz", - "integrity": "sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/type-utils": "5.30.0", - "@typescript-eslint/utils": "5.30.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz", - "integrity": "sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", - "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz", - "integrity": "sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz", - "integrity": "sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.30.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz", - "integrity": "sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz", - "integrity": "sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/visitor-keys": "5.30.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.0", - "@typescript-eslint/types": "5.30.0", - "@typescript-eslint/typescript-estree": "5.30.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz", - "integrity": "sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "requires": { - "async": "^2.4.0" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, - "requires": { - "check-error": "^1.0.2" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" - }, - "core-js-pure": { - "version": "3.23.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", - "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==", - "dev": true - }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - } - } - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", - "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "hardhat": { - "version": "2.9.9", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.9.9.tgz", - "integrity": "sha512-Qv7SXnRc0zq1kGXruNnSKpP3eFccXMR5Qv6GVX9hBIJ5efN0PflKPq92aQ5Cv3jrjJeRevLznWZVz7bttXhVfw==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/blockchain": "^5.5.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/tx": "^3.5.1", - "@ethereumjs/vm": "^5.9.0", - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@sentry/node": "^5.18.1", - "@solidity-parser/parser": "^0.14.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^0.1.2", - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^7.1.4", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "lodash": "^4.17.11", - "merkle-patricia-tree": "^4.2.4", - "mnemonist": "^0.38.0", - "mocha": "^9.2.0", - "p-map": "^4.0.0", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "slash": "^3.0.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "true-case-path": "^2.2.1", - "tsort": "0.0.1", - "undici": "^5.4.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "requires": { - "fp-ts": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "requires": { - "buffer": "^5.6.0" - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - } - }, - "level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dev": true, - "requires": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - } - }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dev": true, - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - }, - "level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true - }, - "lint-staged": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz", - "integrity": "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==", - "dev": true, - "requires": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.16", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^5.1.1", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.5.0", - "string-argv": "^0.3.1", - "supports-color": "^9.2.2", - "yaml": "^1.10.2" - }, - "dependencies": { - "commander": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", - "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "supports-color": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", - "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", - "dev": true - } - } - }, - "listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", - "dev": true, - "requires": { - "get-func-name": "^2.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", - "dev": true - } - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "requires": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "requires": { - "obliterator": "^2.0.0" - } - }, - "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "requires": { - "http-https": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pidtree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", - "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true - }, - "rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true - } - } - }, - "solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", - "dev": true - }, - "ts-essentials": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", - "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", - "dev": true - }, - "ts-generator": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", - "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", - "dev": true, - "requires": { - "@types/mkdirp": "^0.5.2", - "@types/prettier": "^2.1.1", - "@types/resolve": "^0.0.8", - "chalk": "^2.4.1", - "glob": "^7.1.2", - "mkdirp": "^0.5.1", - "prettier": "^2.1.2", - "resolve": "^1.8.1", - "ts-essentials": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "undici": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.5.1.tgz", - "integrity": "sha512-MEvryPLf18HvlCbLSzCW0U00IMftKGI5udnjrQbC5D4P0Hodwffhv+iGfWuJwg16Y/TK11ZFK8i+BPVW2z/eAw==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "web3-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", - "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", - "requires": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - } - } - }, - "web3-core-helpers": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", - "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", - "requires": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-method": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", - "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", - "requires": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-promievent": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", - "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-core-requestmanager": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", - "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", - "requires": { - "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" - } - }, - "web3-core-subscriptions": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", - "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" - } - }, - "web3-eth-iban": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", - "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.7.4" - } - }, - "web3-providers-http": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", - "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", - "requires": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", - "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" - } - }, - "web3-providers-ws": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", - "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", - "websocket": "^1.0.32" - } - }, - "web3-utils": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", - "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "requires": { - "cookiejar": "^2.1.1" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/packages/relayer/package-lock.json b/packages/relayer/package-lock.json deleted file mode 100644 index b9437bc11..000000000 --- a/packages/relayer/package-lock.json +++ /dev/null @@ -1,2852 +0,0 @@ -{ - "name": "@biconomy-sdk/relayer", - "version": "0.0.2", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@biconomy-sdk/core-types": { - "version": "1.0.0", - "requires": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "^1.12.0", - "web3-core": "^1.7.1" - }, - "dependencies": { - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@gnosis.pm/safe-deployments": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", - "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", - "requires": { - "semver": "^7.3.7" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", - "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" - } - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", - "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" - } - } - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", - "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" - } - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.31.0.tgz", - "integrity": "sha512-VKW4JPHzG5yhYQrQ1AzXgVgX8ZAJEvCz0QI6mLRX4tf7rnFfh5D8SKm0Pq6w5PyNfAWJk6sv313+nEt3ohWMBQ==", - "requires": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/type-utils": "5.31.0", - "@typescript-eslint/utils": "5.31.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@typescript-eslint/parser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.31.0.tgz", - "integrity": "sha512-UStjQiZ9OFTFReTrN+iGrC6O/ko9LVDhreEK5S3edmXgR396JGq7CoX2TWIptqt/ESzU2iRKXAHfSF2WJFcWHw==", - "requires": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz", - "integrity": "sha512-8jfEzBYDBG88rcXFxajdVavGxb5/XKXyvWgvD8Qix3EEJLCFIdVloJw+r9ww0wbyNLOTYyBsR+4ALNGdlalLLg==", - "requires": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz", - "integrity": "sha512-7ZYqFbvEvYXFn9ax02GsPcEOmuWNg+14HIf4q+oUuLnMbpJ6eHAivCg7tZMVwzrIuzX3QCeAOqKoyMZCv5xe+w==", - "requires": { - "@typescript-eslint/utils": "5.31.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@typescript-eslint/types": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.31.0.tgz", - "integrity": "sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g==" - }, - "@typescript-eslint/typescript-estree": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz", - "integrity": "sha512-3S625TMcARX71wBc2qubHaoUwMEn+l9TCsaIzYI/ET31Xm2c9YQ+zhGgpydjorwQO9pLfR/6peTzS/0G3J/hDw==", - "requires": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@typescript-eslint/utils": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.31.0.tgz", - "integrity": "sha512-kcVPdQS6VIpVTQ7QnGNKMFtdJdvnStkqS5LeALr4rcwx11G6OWb2HB17NMPnlRHvaZP38hL9iK8DdE9Fne7NYg==", - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz", - "integrity": "sha512-ZK0jVxSjS4gnPirpVjXHz7mgdOsZUHzNYSfTw2yPa3agfbt9YfqaBiBZFSSxeBWnpWkzCxTfUpnzA3Vily/CSg==", - "requires": { - "@typescript-eslint/types": "5.31.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "eslint": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", - "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==" - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" - }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "requires": { - "@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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "requires": { - "http-https": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "requires": { - "fast-diff": "^1.1.2" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "requires": { - "tslib": "^1.8.1" - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - }, - "web3-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", - "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", - "requires": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - } - } - }, - "web3-core-helpers": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", - "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", - "requires": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-method": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", - "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", - "requires": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-promievent": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", - "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-core-requestmanager": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", - "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", - "requires": { - "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" - } - }, - "web3-core-subscriptions": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", - "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" - } - }, - "web3-eth-iban": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", - "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.7.4" - } - }, - "web3-providers-http": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", - "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", - "requires": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", - "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" - } - }, - "web3-providers-ws": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", - "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", - "websocket": "^1.0.32" - } - }, - "web3-utils": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", - "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "requires": { - "cookiejar": "^2.1.1" - } - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/basex": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", - "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/hdnode": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", - "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/json-wallets": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", - "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", - "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/sha2": "^5.6.1" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/providers": { - "version": "5.6.8", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", - "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/base64": "^5.6.1", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "@ethersproject/random": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", - "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/sha2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", - "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", - "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/units": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", - "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/wallet": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", - "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/json-wallets": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/wordlists": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", - "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "ethers": { - "version": "5.6.9", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", - "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", - "requires": { - "@ethersproject/abi": "5.6.4", - "@ethersproject/abstract-provider": "5.6.1", - "@ethersproject/abstract-signer": "5.6.2", - "@ethersproject/address": "5.6.1", - "@ethersproject/base64": "5.6.1", - "@ethersproject/basex": "5.6.1", - "@ethersproject/bignumber": "5.6.2", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.1", - "@ethersproject/contracts": "5.6.2", - "@ethersproject/hash": "5.6.1", - "@ethersproject/hdnode": "5.6.2", - "@ethersproject/json-wallets": "5.6.1", - "@ethersproject/keccak256": "5.6.1", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.4", - "@ethersproject/pbkdf2": "5.6.1", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.8", - "@ethersproject/random": "5.6.1", - "@ethersproject/rlp": "5.6.1", - "@ethersproject/sha2": "5.6.1", - "@ethersproject/signing-key": "5.6.2", - "@ethersproject/solidity": "5.6.1", - "@ethersproject/strings": "5.6.1", - "@ethersproject/transactions": "5.6.2", - "@ethersproject/units": "5.6.1", - "@ethersproject/wallet": "5.6.2", - "@ethersproject/web": "5.6.1", - "@ethersproject/wordlists": "5.6.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" - } - } -} diff --git a/packages/smart-account/package-lock.json b/packages/smart-account/package-lock.json deleted file mode 100644 index 4fe4855b5..000000000 --- a/packages/smart-account/package-lock.json +++ /dev/null @@ -1,5027 +0,0 @@ -{ - "name": "@biconomy-sdk/smart-account", - "version": "0.0.2", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", - "dev": true - }, - "@babel/core": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", - "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", - "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==", - "dev": true, - "requires": { - "@babel/types": "^7.18.9", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", - "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/traverse": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz", - "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.9", - "@babel/types": "^7.18.9", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", - "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/basex": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", - "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/hdnode": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", - "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/json-wallets": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", - "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", - "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/sha2": "^5.6.1" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/providers": { - "version": "5.6.8", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", - "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/base64": "^5.6.1", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "@ethersproject/random": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", - "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/sha2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", - "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", - "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/units": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", - "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/wallet": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", - "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/json-wallets": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/wordlists": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", - "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@gnosis.pm/safe-deployments": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", - "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", - "requires": { - "semver": "^7.3.7" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", - "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", - "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3" - } - }, - "@jest/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", - "dev": true, - "requires": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" - } - }, - "@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2" - } - }, - "@jest/fake-timers": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", - "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", - "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "@jest/globals": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", - "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" - } - }, - "@jest/reporters": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", - "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.1" - } - }, - "@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/source-map": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", - "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.13", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", - "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - } - }, - "@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@sinclair/typebox": { - "version": "0.24.21", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.21.tgz", - "integrity": "sha512-II2SIjvxBVJmrGkkZYza/BqNjwx3PWROIA8CZ0/Hn7LV0Mv0CVpZxoyHGBVsQqfFLMv9DmArIeRHTwo76bE6oA==", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", - "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" - } - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" - }, - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", - "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" - } - } - }, - "@types/prettier": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz", - "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==", - "dev": true - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "18.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.2.tgz", - "integrity": "sha512-KcfkBq9H4PI6Vpu5B/KoPeuVDAbmi+2mDBqGPGUgoL7yXQtcWGu2vJWmmRkneWK3Rh0nIAX192Aa87AqKHYChQ==" - } - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.31.0.tgz", - "integrity": "sha512-VKW4JPHzG5yhYQrQ1AzXgVgX8ZAJEvCz0QI6mLRX4tf7rnFfh5D8SKm0Pq6w5PyNfAWJk6sv313+nEt3ohWMBQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/type-utils": "5.31.0", - "@typescript-eslint/utils": "5.31.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.31.0.tgz", - "integrity": "sha512-UStjQiZ9OFTFReTrN+iGrC6O/ko9LVDhreEK5S3edmXgR396JGq7CoX2TWIptqt/ESzU2iRKXAHfSF2WJFcWHw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz", - "integrity": "sha512-8jfEzBYDBG88rcXFxajdVavGxb5/XKXyvWgvD8Qix3EEJLCFIdVloJw+r9ww0wbyNLOTYyBsR+4ALNGdlalLLg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz", - "integrity": "sha512-7ZYqFbvEvYXFn9ax02GsPcEOmuWNg+14HIf4q+oUuLnMbpJ6eHAivCg7tZMVwzrIuzX3QCeAOqKoyMZCv5xe+w==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.31.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/types": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.31.0.tgz", - "integrity": "sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz", - "integrity": "sha512-3S625TMcARX71wBc2qubHaoUwMEn+l9TCsaIzYI/ET31Xm2c9YQ+zhGgpydjorwQO9pLfR/6peTzS/0G3J/hDw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.31.0.tgz", - "integrity": "sha512-kcVPdQS6VIpVTQ7QnGNKMFtdJdvnStkqS5LeALr4rcwx11G6OWb2HB17NMPnlRHvaZP38hL9iK8DdE9Fne7NYg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz", - "integrity": "sha512-ZK0jVxSjS4gnPirpVjXHz7mgdOsZUHzNYSfTw2yPa3agfbt9YfqaBiBZFSSxeBWnpWkzCxTfUpnzA3Vily/CSg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.31.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "babel-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", - "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", - "dev": true, - "requires": { - "@jest/transform": "^28.1.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", - "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", - "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^28.1.3", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001373", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", - "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "electron-to-chromium": { - "version": "1.4.204", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.204.tgz", - "integrity": "sha512-5Ojjtw9/c9HCXtMVE6SXVSHSNjmbFOXpKprl6mY/5moLSxLeWatuYA7KTD+RzJMxLRH6yNNQrqGz9p6IoNBMgw==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", - "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethers": { - "version": "5.6.9", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", - "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", - "dev": true, - "requires": { - "@ethersproject/abi": "5.6.4", - "@ethersproject/abstract-provider": "5.6.1", - "@ethersproject/abstract-signer": "5.6.2", - "@ethersproject/address": "5.6.1", - "@ethersproject/base64": "5.6.1", - "@ethersproject/basex": "5.6.1", - "@ethersproject/bignumber": "5.6.2", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.1", - "@ethersproject/contracts": "5.6.2", - "@ethersproject/hash": "5.6.1", - "@ethersproject/hdnode": "5.6.2", - "@ethersproject/json-wallets": "5.6.1", - "@ethersproject/keccak256": "5.6.1", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.4", - "@ethersproject/pbkdf2": "5.6.1", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.8", - "@ethersproject/random": "5.6.1", - "@ethersproject/rlp": "5.6.1", - "@ethersproject/sha2": "5.6.1", - "@ethersproject/signing-key": "5.6.2", - "@ethersproject/solidity": "5.6.1", - "@ethersproject/strings": "5.6.1", - "@ethersproject/transactions": "5.6.2", - "@ethersproject/units": "5.6.1", - "@ethersproject/wallet": "5.6.2", - "@ethersproject/web": "5.6.1", - "@ethersproject/wordlists": "5.6.1" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", - "dev": true, - "requires": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest-changed-files": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", - "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } - } - }, - "jest-circus": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", - "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } - } - }, - "jest-cli": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", - "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", - "dev": true, - "requires": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - } - }, - "jest-config": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", - "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - } - }, - "jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-docblock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", - "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", - "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" - } - }, - "jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true - }, - "jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", - "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", - "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true - }, - "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true - }, - "jest-resolve": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", - "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", - "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", - "dev": true, - "requires": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" - } - }, - "jest-runner": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", - "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } - } - }, - "jest-runtime": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", - "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-snapshot": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", - "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" - } - }, - "jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", - "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "leven": "^3.1.0", - "pretty-format": "^28.1.3" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "requires": { - "http-https": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@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" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "web3-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", - "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", - "requires": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - } - } - }, - "web3-core-helpers": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", - "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", - "requires": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-method": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", - "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", - "requires": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-core-promievent": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", - "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-core-requestmanager": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", - "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", - "requires": { - "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" - } - }, - "web3-core-subscriptions": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", - "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" - } - }, - "web3-eth-iban": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", - "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.7.4" - } - }, - "web3-providers-http": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", - "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", - "requires": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", - "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" - } - }, - "web3-providers-ws": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", - "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", - "websocket": "^1.0.32" - } - }, - "web3-utils": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", - "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "requires": { - "cookiejar": "^2.1.1" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/packages/transactions/package-lock.json b/packages/transactions/package-lock.json deleted file mode 100644 index 516fd9708..000000000 --- a/packages/transactions/package-lock.json +++ /dev/null @@ -1,505 +0,0 @@ -{ - "name": "@biconomy-sdk/transactions", - "version": "0.0.2", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/basex": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", - "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/hdnode": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", - "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/json-wallets": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", - "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", - "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/sha2": "^5.6.1" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/providers": { - "version": "5.6.8", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", - "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/base64": "^5.6.1", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "@ethersproject/random": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", - "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/sha2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", - "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", - "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/units": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", - "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/wallet": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", - "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/json-wallets": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/wordlists": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", - "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "ethers": { - "version": "5.6.9", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", - "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", - "requires": { - "@ethersproject/abi": "5.6.4", - "@ethersproject/abstract-provider": "5.6.1", - "@ethersproject/abstract-signer": "5.6.2", - "@ethersproject/address": "5.6.1", - "@ethersproject/base64": "5.6.1", - "@ethersproject/basex": "5.6.1", - "@ethersproject/bignumber": "5.6.2", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.1", - "@ethersproject/contracts": "5.6.2", - "@ethersproject/hash": "5.6.1", - "@ethersproject/hdnode": "5.6.2", - "@ethersproject/json-wallets": "5.6.1", - "@ethersproject/keccak256": "5.6.1", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.4", - "@ethersproject/pbkdf2": "5.6.1", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.8", - "@ethersproject/random": "5.6.1", - "@ethersproject/rlp": "5.6.1", - "@ethersproject/sha2": "5.6.1", - "@ethersproject/signing-key": "5.6.2", - "@ethersproject/solidity": "5.6.1", - "@ethersproject/strings": "5.6.1", - "@ethersproject/transactions": "5.6.2", - "@ethersproject/units": "5.6.1", - "@ethersproject/wallet": "5.6.2", - "@ethersproject/web": "5.6.1", - "@ethersproject/wordlists": "5.6.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" - } - } -} From d42ac75606df698ba4f6304f640c05459ae8dc64 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 4 Aug 2022 20:27:14 +0530 Subject: [PATCH 0047/1247] refactor --- .gitignore | 1 + packages/node-client/src/INodeClient.ts | 4 ++-- packages/node-client/src/NodeClient.ts | 4 ++-- packages/node-client/src/types/NodeClientTypes.ts | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 4abbe2e49..a7e8216eb 100644 --- a/.gitignore +++ b/.gitignore @@ -61,6 +61,7 @@ packages/node-client/package-lock.json packages/relayer/package-lock.json packages/smart-account/package-lock.json packages/transactions/package-lock.json +package-lock.json # Typechain typechain diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index 5e6dd6f7e..472901a10 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -6,7 +6,7 @@ import { SupportedTokensResponse, IndividualTokenResponse, SmartAccountsResponse, - BalancesRespose, + BalancesResponse, BalancesDto, UsdBalanceResponse } from './types/NodeClientTypes' @@ -32,7 +32,7 @@ interface INodeClient { getSmartAccountsByOwner(chainId: number, owner: string): Promise - getAlltokenBalances(balancesDto: BalancesDto): Promise + getAlltokenBalances(balancesDto: BalancesDto): Promise getTotalBalanceInUsd(balancesDto: BalancesDto): Promise } diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index 8782ca77d..ca41496fb 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -7,7 +7,7 @@ import { IndividualTokenResponse, SmartAccountsResponse, BalancesDto, - BalancesRespose, + BalancesResponse, UsdBalanceResponse } from './types/NodeClientTypes' import { getTxServiceBaseUrl } from './utils' @@ -99,7 +99,7 @@ class NodeClient implements INodeClient { }) } - async getAlltokenBalances(balancesDto: BalancesDto): Promise { + async getAlltokenBalances(balancesDto: BalancesDto): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/smart-accounts/balances`, method: HttpMethod.Post, diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index 1c9ac9fe2..fc48c1a75 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -145,7 +145,7 @@ export type SmartAccountsResponse = { code: number data: ISmartAccount } -export type BalancesRespose = { +export type BalancesResponse = { message: string code: number data: IBalances[] From 02c91064636df3986b4721f880032008eaf52453 Mon Sep 17 00:00:00 2001 From: talha Date: Fri, 5 Aug 2022 02:45:28 +0500 Subject: [PATCH 0048/1247] balances functions addition, types improvements and formatting --- .eslintrc.js | 35 +- package-lock.json | 52496 +--------------- packages/core-types/src/chains.types.ts | 37 + .../src/contracts/EntryPointContract.ts | 3 +- .../src/contracts/SmartWalletContract.ts | 12 +- .../contracts/SmartWalletFactoryContract.ts | 2 +- .../core-types/src/ethereumLibs/EthAdapter.ts | 3 +- packages/core-types/src/index.ts | 2 + packages/core-types/src/transaction.types.ts | 117 + packages/core-types/src/types.ts | 126 - packages/ethers-lib/src/EthersAdapter.ts | 6 +- .../tests/e2e/addSafeDelegate.test.ts | 150 - .../node-client/tests/e2e/decodeData.test.ts | 50 - .../node-client/tests/e2e/getBalances.test.ts | 60 - .../tests/e2e/getCollectibles.test.ts | 54 - .../tests/e2e/getIncomingTransactions.test.ts | 59 - .../tests/e2e/getMultisigTransactions.test.ts | 65 - .../tests/e2e/getNextNonce.test.ts | 42 - .../tests/e2e/getPendingTransactions.test.ts | 53 - .../tests/e2e/getSafeDelegates.test.ts | 100 - .../node-client/tests/e2e/getSafeInfo.test.ts | 44 - .../tests/e2e/getSafesByOwner.test.ts | 53 - .../tests/e2e/getServiceInfo.test.ts | 18 - .../e2e/getServiceMastercopiesInfo.test.ts | 21 - .../node-client/tests/e2e/getToken.test.ts | 42 - .../tests/e2e/getTokenList.test.ts | 19 - .../tests/e2e/getTransaction.test.ts | 34 - .../e2e/getTransactionConfirmations.test.ts | 37 - .../tests/e2e/getUsdBalances.test.ts | 72 - .../tests/e2e/removeAllSafeDelegates.test.ts | 97 - .../tests/e2e/removeSafeDelegate.test.ts | 144 - .../node-client/tests/endpoint/index.test.ts | 692 - packages/node-client/tests/utils/config.ts | 8 - .../tests/utils/setupEthAdapter.ts | 23 - .../tests/utils/setupServiceClient.ts | 20 - packages/relayer/src/index.ts | 10 +- packages/relayer/src/local-relayer.ts | 8 +- packages/relayer/src/utils/multisend.ts | 54 +- packages/smart-account/src/SmartAccount.ts | 241 +- packages/smart-account/src/types.ts | 266 +- .../src/utils/FetchContractsInfo.ts | 4 +- .../smart-account/tests/smartaccount.spec.ts | 468 +- packages/smart-account/tests/utils/deploy.ts | 45 +- packages/transactions/src/execution.ts | 380 +- packages/transactions/src/multisend.ts | 8 +- packages/transactions/src/types.ts | 24 +- 46 files changed, 4254 insertions(+), 52050 deletions(-) create mode 100644 packages/core-types/src/chains.types.ts create mode 100644 packages/core-types/src/transaction.types.ts delete mode 100644 packages/node-client/tests/e2e/addSafeDelegate.test.ts delete mode 100644 packages/node-client/tests/e2e/decodeData.test.ts delete mode 100644 packages/node-client/tests/e2e/getBalances.test.ts delete mode 100644 packages/node-client/tests/e2e/getCollectibles.test.ts delete mode 100644 packages/node-client/tests/e2e/getIncomingTransactions.test.ts delete mode 100644 packages/node-client/tests/e2e/getMultisigTransactions.test.ts delete mode 100644 packages/node-client/tests/e2e/getNextNonce.test.ts delete mode 100644 packages/node-client/tests/e2e/getPendingTransactions.test.ts delete mode 100644 packages/node-client/tests/e2e/getSafeDelegates.test.ts delete mode 100644 packages/node-client/tests/e2e/getSafeInfo.test.ts delete mode 100644 packages/node-client/tests/e2e/getSafesByOwner.test.ts delete mode 100644 packages/node-client/tests/e2e/getServiceInfo.test.ts delete mode 100644 packages/node-client/tests/e2e/getServiceMastercopiesInfo.test.ts delete mode 100644 packages/node-client/tests/e2e/getToken.test.ts delete mode 100644 packages/node-client/tests/e2e/getTokenList.test.ts delete mode 100644 packages/node-client/tests/e2e/getTransaction.test.ts delete mode 100644 packages/node-client/tests/e2e/getTransactionConfirmations.test.ts delete mode 100644 packages/node-client/tests/e2e/getUsdBalances.test.ts delete mode 100644 packages/node-client/tests/e2e/removeAllSafeDelegates.test.ts delete mode 100644 packages/node-client/tests/e2e/removeSafeDelegate.test.ts delete mode 100644 packages/node-client/tests/endpoint/index.test.ts delete mode 100644 packages/node-client/tests/utils/config.ts delete mode 100644 packages/node-client/tests/utils/setupEthAdapter.ts delete mode 100644 packages/node-client/tests/utils/setupServiceClient.ts diff --git a/.eslintrc.js b/.eslintrc.js index 616ffbbc2..8eeaa770a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,13 +1,24 @@ module.exports = { - parser: '@typescript-eslint/parser', // Specifies the ESLint parser - extends: [ - 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin - 'prettier/@typescript-eslint', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier - 'plugin:prettier/recommended', // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. - ], - parserOptions: { - ecmaVersion: 2020, // Allows for the parsing of modern ECMAScript features - sourceType: 'module', // Allows for the use of imports - }, - } - \ No newline at end of file + parser: '@typescript-eslint/parser', + parserOptions: { + project: 'tsconfig.json', + sourceType: 'module', + }, + plugins: ['@typescript-eslint/eslint-plugin'], + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + ], + root: true, + env: { + node: true, + jest: true, + }, + ignorePatterns: ['.eslintrc.js'], + rules: { + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/explicit-function-return-type': 'error', + '@typescript-eslint/explicit-module-boundary-types': 'error', + '@typescript-eslint/no-explicit-any': 'error', + }, +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 437f796c5..242762ed1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,45933 +1,3904 @@ { "name": "biconomy-sdk", - "lockfileVersion": 2, "requires": true, - "packages": { - "": { - "name": "biconomy-sdk", - "devDependencies": { - "hardhat": "^2.9.9", - "lerna": "^5.1.6", - "nx": "^14.5.2", - "prettier": "2.7.1", - "ts-node": "^10.8.2" - }, - "workspaces": { - "packages": [ - "packages/*" - ] - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { + "lockfileVersion": 1, + "dependencies": { + "@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, - "dependencies": { + "requires": { "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true }, - "node_modules/@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz", - "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==", - "dev": true, "dependencies": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "requires": { + "@jridgewell/trace-mapping": "0.3.9" }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", - "dev": true, "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "@ethereumjs/block": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", + "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "requires": { + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "ethereumjs-util": "^7.1.5", + "merkle-patricia-tree": "^4.2.4" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "@ethereumjs/blockchain": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", + "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", "dev": true, - "engines": { - "node": ">=6.9.0" + "requires": { + "@ethereumjs/block": "^3.6.2", + "@ethereumjs/common": "^2.6.4", + "@ethereumjs/ethash": "^1.1.0", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "level-mem": "^5.0.1", + "lru-cache": "^5.1.1", + "semaphore-async-await": "^1.5.1" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "@ethereumjs/common": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", + "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", "dev": true, - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "@ethereumjs/ethash": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", + "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" + "requires": { + "@ethereumjs/block": "^3.5.0", + "@types/levelup": "^4.3.0", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.1.1", + "miller-rabin": "^4.0.0" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "buffer-xor": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", + "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + } } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "@ethereumjs/tx": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", + "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "@ethereumjs/vm": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", + "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@ethereumjs/block": "^3.6.3", + "@ethereumjs/blockchain": "^5.5.3", + "@ethereumjs/common": "^2.6.5", + "@ethereumjs/tx": "^3.5.2", + "async-eventemitter": "^0.2.4", + "core-js-pure": "^3.0.1", + "debug": "^4.3.3", + "ethereumjs-util": "^7.1.5", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "merkle-patricia-tree": "^4.2.4", + "rustbn.js": "~0.2.0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", "dev": true, - "engines": { - "node": ">=6.9.0" + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", "dev": true, - "engines": { - "node": ">=6.9.0" + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", "dev": true, - "engines": { - "node": ">=6.9.0" + "requires": { + "@ethersproject/bytes": "^5.6.1" } }, - "node_modules/@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", "dev": true, - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@ethersproject/logger": "^5.6.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@ethersproject/bignumber": "^5.6.2" } }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" } }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", "dev": true }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", "dev": true, - "engines": { - "node": ">=0.8.0" + "requires": { + "@ethersproject/logger": "^5.6.0" } }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@ethersproject/logger": "^5.6.0" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, - "node_modules/@babel/parser": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", - "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", + "@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "@lerna/add": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.3.0.tgz", + "integrity": "sha512-MxwTO2UBxZwwuquKbBqdYa56YTqg6Lfz1MZsRQxO7F2cb2NN8NEYTcGOli/71Ee/2AoX4R4xIFTh3TnaflQ25A==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "requires": { + "@lerna/bootstrap": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/npm-conf": "5.3.0", + "@lerna/validation-error": "5.3.0", + "dedent": "^0.7.0", + "npm-package-arg": "8.1.1", + "p-map": "^4.0.0", + "pacote": "^13.6.1", + "semver": "^7.3.4" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "@lerna/bootstrap": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.3.0.tgz", + "integrity": "sha512-iHVjt6YOQKLY0j+ex13a6ZxjIQ1TSSXqbl6z1hVjBFaDyCh7pra/tgj0LohZDVCaouLwRKucceQfTGrb+cfo7A==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "requires": { + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/has-npm-version": "5.3.0", + "@lerna/npm-install": "5.3.0", + "@lerna/package-graph": "5.3.0", + "@lerna/pulse-till-done": "5.3.0", + "@lerna/rimraf-dir": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/symlink-binary": "5.3.0", + "@lerna/symlink-dependencies": "5.3.0", + "@lerna/validation-error": "5.3.0", + "@npmcli/arborist": "5.3.0", + "dedent": "^0.7.0", + "get-port": "^5.1.1", + "multimatch": "^5.0.0", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "@lerna/changed": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.3.0.tgz", + "integrity": "sha512-i6ZfBDBZCpnPaSWTuNGTrnExkHNMC+/cSUuS9njaqe+tXgqE95Ja3cMxWZth9Q1uasjcEBHPU2jG0VKrU37rpA==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "requires": { + "@lerna/collect-updates": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/listable": "5.3.0", + "@lerna/output": "5.3.0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "@lerna/check-working-tree": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.3.0.tgz", + "integrity": "sha512-qo6jUGWXKLVL1nU8aEECqwrGRjs9o1l1hXdD2juA4Fvzsam1cFVHJwsmw3hAXGhEPD0oalg/XR62H9rZSCLOvQ==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "requires": { + "@lerna/collect-uncommitted": "5.3.0", + "@lerna/describe-ref": "5.3.0", + "@lerna/validation-error": "5.3.0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@lerna/child-process": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.3.0.tgz", + "integrity": "sha512-4uXPNIptrgQQQVHVVAXBD8F7IqSvZL3Og0G0DHiWKH+dsSyMIUtaIGJt7sifVoL7nzex4AqEiPq/AubpmG5g4Q==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "@lerna/clean": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.3.0.tgz", + "integrity": "sha512-Jn+Dr7A69dch8m1dLe7l/SDVQVQT2j7zdy2gaZVEmJIgEEaXmEbfJ2t2n06vRXtckI9B85M5mubT1U3Y7KuNuA==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "requires": { + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/prompt": "5.3.0", + "@lerna/pulse-till-done": "5.3.0", + "@lerna/rimraf-dir": "5.3.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1" } }, - "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "@lerna/cli": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.3.0.tgz", + "integrity": "sha512-P7F3Xs98pXMEGZX+mnFfsd6gU03x8UrwQ3mElvQBICl4Ew9z6rS8NGUd3JOPFzm4/vSTjYTnPyPdWBjj6/f6sw==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "requires": { + "@lerna/global-options": "5.3.0", + "dedent": "^0.7.0", + "npmlog": "^6.0.2", + "yargs": "^16.2.0" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } } }, - "node_modules/@babel/traverse": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", - "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "@lerna/collect-uncommitted": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.3.0.tgz", + "integrity": "sha512-Ll/mU9Nes0NQoa0pSv2TR2PTCkIomBGuDWH48OF2sKKu69NuLjrD2L0udS5nJYig9HxFewtm4QTiUdYPxfJXkQ==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.11", - "@babel/types": "^7.18.10", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@lerna/child-process": "5.3.0", + "chalk": "^4.1.0", + "npmlog": "^6.0.2" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "@lerna/collect-updates": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.3.0.tgz", + "integrity": "sha512-fzJo/rmdXKWKYt+9IXjtenIZtSr3blMH8GEqoVKpSZ7TJGpxcFNmMe6foa60BgaTnDmmg1y7Qu6JbQJ3Ra5c5w==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@lerna/child-process": "5.3.0", + "@lerna/describe-ref": "5.3.0", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "slash": "^3.0.0" } }, - "node_modules/@babel/types": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "@lerna/command": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.3.0.tgz", + "integrity": "sha512-UNQQ4EGTumqLhOuDPcRA4LpdS9pcTYKSdh/8MdKPeyIRN70vCTwdeTrxqaaKsn3Jo7ycvyUQT5yfrUFmCClfoA==", "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@lerna/child-process": "5.3.0", + "@lerna/package-graph": "5.3.0", + "@lerna/project": "5.3.0", + "@lerna/validation-error": "5.3.0", + "@lerna/write-log-file": "5.3.0", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^5.0.0", + "is-ci": "^2.0.0", + "npmlog": "^6.0.2" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@biconomy-sdk/core-types": { - "resolved": "packages/core-types", - "link": true - }, - "node_modules/@biconomy-sdk/ethers-lib": { - "resolved": "packages/ethers-lib", - "link": true - }, - "node_modules/@biconomy-sdk/node-client": { - "resolved": "packages/node-client", - "link": true - }, - "node_modules/@biconomy-sdk/relayer": { - "resolved": "packages/relayer", - "link": true - }, - "node_modules/@biconomy-sdk/smart-account": { - "resolved": "packages/smart-account", - "link": true - }, - "node_modules/@biconomy-sdk/transactions": { - "resolved": "packages/transactions", - "link": true - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "@lerna/conventional-commits": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.3.0.tgz", + "integrity": "sha512-9uoQ2E1J7pL0fml5PNO7FydnBNeqrNOQa53Ca1Klf5t/x4vIn51ocOZNm/YbRAc/affnrxxp+gR2/SWlN0yKqQ==", "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "requires": { + "@lerna/validation-error": "5.3.0", + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-core": "^4.2.4", + "conventional-recommended-bump": "^6.1.0", + "fs-extra": "^9.1.0", + "get-stream": "^6.0.0", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "semver": "^7.3.4" }, - "engines": { - "node": ">=12" + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "@lerna/create": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.3.0.tgz", + "integrity": "sha512-DotTReCc3+Q9rpMA8RKAGemUK7JXT7skbxHvpqpPj7ryNkIv/dNAFC2EHglcpt9Rmyo6YbSP2zk0gfDbdiIcVA==", "dev": true, + "requires": { + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/npm-conf": "5.3.0", + "@lerna/validation-error": "5.3.0", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "init-package-json": "^3.0.2", + "npm-package-arg": "8.1.1", + "p-reduce": "^2.1.0", + "pacote": "^13.6.1", + "pify": "^5.0.0", + "semver": "^7.3.4", + "slash": "^3.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^4.0.0", + "whatwg-url": "^8.4.0", + "yargs-parser": "20.2.4" + }, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "node_modules/@ensdomains/ens": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", - "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", - "deprecated": "Please use @ensdomains/ens-contracts", + "@lerna/create-symlink": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.3.0.tgz", + "integrity": "sha512-xIoC9m4J/u4NV/8ms4P2fiimaYgialqJvNamvMDRmgE1c3BLDSGk2nE4nVI2W5LxjgJdMTiIH9v1QpTUC9Fv+Q==", "dev": true, - "peer": true, + "requires": { + "cmd-shim": "^5.0.0", + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2" + }, "dependencies": { - "bluebird": "^3.5.2", - "eth-ens-namehash": "^2.0.8", - "solc": "^0.4.20", - "testrpc": "0.0.1", - "web3-utils": "^1.0.0-beta.31" + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "node_modules/@ensdomains/ens/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "@lerna/describe-ref": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.3.0.tgz", + "integrity": "sha512-R+CtJcOuAF3kJ6GNQnGC3STEi+5OtpNVz2n17sAs/xqJnq79tPdzEhT+pMxB2eSEkQYlSr+cCKMpF0m/mtIPQA==", "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@lerna/child-process": "5.3.0", + "npmlog": "^6.0.2" } }, - "node_modules/@ensdomains/ens/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "@lerna/diff": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.3.0.tgz", + "integrity": "sha512-i6f99dtO90u1QIJEfVtKE831m4gnMHBwY+4D84GY2SJMno8uI7ZyxMRZQh1nAFtvlNozO2MgzLr1OHtNMZOIgQ==", "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/validation-error": "5.3.0", + "npmlog": "^6.0.2" } }, - "node_modules/@ensdomains/ens/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "@lerna/exec": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.3.0.tgz", + "integrity": "sha512-kI/IuF1hbT+pEMZc3v4+w8BLckUIi45ipzOP0bWvXNgSKKuADAU3HLv+ifRXEjob5906C+Zc7K2IVoVS6r1TDg==", "dev": true, - "peer": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "requires": { + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/profiler": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/validation-error": "5.3.0", + "p-map": "^4.0.0" } }, - "node_modules/@ensdomains/ens/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "@lerna/filter-options": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.3.0.tgz", + "integrity": "sha512-ddgy0oDisTKIhCJ4WY5CeEhTsyrbW+zeBvZ7rVaG0oQXjSSYBried4TXRvgy67fampfHoPX+eQq5l1SYTRFPlw==", "dev": true, - "peer": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@lerna/collect-updates": "5.3.0", + "@lerna/filter-packages": "5.3.0", + "dedent": "^0.7.0", + "npmlog": "^6.0.2" } }, - "node_modules/@ensdomains/ens/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "@lerna/filter-packages": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.3.0.tgz", + "integrity": "sha512-5/2V50sQB2+JNwuCHP/UPm3y8PN2JWVY9CbNLtF3K5bymNsCkQh2KHEL9wlWZ4yfr/2ufpy4XFPaFUHNoUOGnQ==", "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "requires": { + "@lerna/validation-error": "5.3.0", + "multimatch": "^5.0.0", + "npmlog": "^6.0.2" } }, - "node_modules/@ensdomains/ens/node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "@lerna/get-npm-exec-opts": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.3.0.tgz", + "integrity": "sha512-cYBypDo8C7f4MvVvap2nYgtk8MXAADrYU1VdECSJ3Stbe4p2vBGt8bM9xkS2uPfQFMK3YSy3YPkSZcSjVXyoGw==", "dev": true, - "peer": true + "requires": { + "npmlog": "^6.0.2" + } }, - "node_modules/@ensdomains/ens/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "@lerna/get-packed": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.3.0.tgz", + "integrity": "sha512-kD12w7Ko5TThuOuPF2HBLyuPsHK3oyyWyzleGBqR4DqxMtbMRgimyTQnr5o58XBOwUPCFsv1EZiqeGk+3HTGEA==", "dev": true, - "peer": true, - "dependencies": { - "number-is-nan": "^1.0.0" + "requires": { + "fs-extra": "^9.1.0", + "ssri": "^9.0.1", + "tar": "^6.1.0" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "node_modules/@ensdomains/ens/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "@lerna/github-client": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.3.0.tgz", + "integrity": "sha512-UqAclsWDMthmbv3Z8QE1K7D/4e93ytg31mc+nEj+UdU+xJQ0L1ypl8zWAmGNs1sFkQntIiTIB4W5zgHet5mmZw==", "dev": true, - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "requires": { + "@lerna/child-process": "5.3.0", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^19.0.3", + "git-url-parse": "^12.0.0", + "npmlog": "^6.0.2" } }, - "node_modules/@ensdomains/ens/node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "@lerna/gitlab-client": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.3.0.tgz", + "integrity": "sha512-otwbiaGDgvn5MGF1ypsCO48inMpdcxuiDlbxrKD6glPUwNHiGV+PU8LLCCDKimwjjQhl88ySLpL1oTm4jnZ1Aw==", "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "node-fetch": "^2.6.1", + "npmlog": "^6.0.2", + "whatwg-url": "^8.4.0" } }, - "node_modules/@ensdomains/ens/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "peer": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } + "@lerna/global-options": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.3.0.tgz", + "integrity": "sha512-iEoFrDSU+KtfcB+lHW5grjg3VkEqzZNTUnWnE1FCBBwj9tSLOHjgKGtWWjIQtBUJ+qcLBbusap9Stqzr7UPYpQ==", + "dev": true }, - "node_modules/@ensdomains/ens/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "@lerna/has-npm-version": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.3.0.tgz", + "integrity": "sha512-A/bK8e+QP/VMqZkq1wZbyOzMz/AY92tAVsBOQ5Yw2zqshdMVj99st3YHLOqJf/HTEzQo27GGI/ajmcltHS2l6A==", "dev": true, - "peer": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@lerna/child-process": "5.3.0", + "semver": "^7.3.4" } }, - "node_modules/@ensdomains/ens/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "@lerna/import": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.3.0.tgz", + "integrity": "sha512-KjVT9oFNSp1JLdrS1LSXjDcLiu2TMSfy6tpmhF9Zxo7oKB21SgWmXVV9rcWDueW2RIxNXDeVUG0NVNj2BRGeEQ==", "dev": true, - "peer": true, - "dependencies": { - "pinkie-promise": "^2.0.0" + "requires": { + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/prompt": "5.3.0", + "@lerna/pulse-till-done": "5.3.0", + "@lerna/validation-error": "5.3.0", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "p-map-series": "^2.1.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "peer": true, "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "node_modules/@ensdomains/ens/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "@lerna/info": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.3.0.tgz", + "integrity": "sha512-pyeZSM/PIpBHCXdHPrbh6sPZlngXUxhTVFb0VaIjQ5Ms585xi15s1UQDO3FvzqdyMyalx0QGzCJbNx5XeoCejg==", "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@lerna/command": "5.3.0", + "@lerna/output": "5.3.0", + "envinfo": "^7.7.4" } }, - "node_modules/@ensdomains/ens/node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "@lerna/init": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.3.0.tgz", + "integrity": "sha512-y46lzEtgMdEseTJGQQqYZOjqqd7iN+e14vFh/9q5h62V4Y8nlUJRzovVo8JSeaGwKLB0B3dq3BuUn0PNywMhpA==", "dev": true, - "peer": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "requires": { + "@lerna/child-process": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/project": "5.3.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "write-json-file": "^4.3.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "peer": true, "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "node_modules/@ensdomains/ens/node_modules/require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", + "@lerna/link": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.3.0.tgz", + "integrity": "sha512-+QBwnGg3S8Zk8M8G5CA4kmGq92rkEMbmWJXaxie3jQayp+GXgSlLs6R4jwSOZlztY6xR3WawMI9sHJ0Vdu+g7w==", "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@lerna/command": "5.3.0", + "@lerna/package-graph": "5.3.0", + "@lerna/symlink-dependencies": "5.3.0", + "p-map": "^4.0.0", + "slash": "^3.0.0" } }, - "node_modules/@ensdomains/ens/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "@lerna/list": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.3.0.tgz", + "integrity": "sha512-5RJvle3m4l2H0UmKNlwS8h2OIlNGsNTKPC4DYrJYt0+fhgzf5SEV1QKw+fuUqe3F8MziIkSGQB52HsjwPE6AWQ==", "dev": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "requires": { + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/listable": "5.3.0", + "@lerna/output": "5.3.0" } }, - "node_modules/@ensdomains/ens/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@ensdomains/ens/node_modules/solc": { - "version": "0.4.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", - "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", - "dev": true, - "peer": true, - "dependencies": { - "fs-extra": "^0.30.0", - "memorystream": "^0.3.1", - "require-from-string": "^1.1.0", - "semver": "^5.3.0", - "yargs": "^4.7.1" - }, - "bin": { - "solcjs": "solcjs" - } - }, - "node_modules/@ensdomains/ens/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "peer": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "@lerna/listable": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.3.0.tgz", + "integrity": "sha512-RdmeV9mDeuBOgVOlF/KNH/qttyiYwHbeqHiMAw9s9AfMo/Fz3iDZaTGZuruMm84TZSkKxI7m5mjTlC0djsyKog==", "dev": true, - "peer": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@lerna/query-graph": "5.3.0", + "chalk": "^4.1.0", + "columnify": "^1.6.0" } }, - "node_modules/@ensdomains/ens/node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "@lerna/log-packed": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.3.0.tgz", + "integrity": "sha512-tDuOot3vSOUSP7fNNej8UM0fah5oy8mKXe026grt4J0OP4L3rhSWxhfrDBQ3Ylh2dAjgHzscUf/vpnNC9HnhOQ==", "dev": true, - "peer": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "byte-size": "^7.0.0", + "columnify": "^1.6.0", + "has-unicode": "^2.0.1", + "npmlog": "^6.0.2" } }, - "node_modules/@ensdomains/ens/node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true, - "peer": true - }, - "node_modules/@ensdomains/ens/node_modules/yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", + "@lerna/npm-conf": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.3.0.tgz", + "integrity": "sha512-ejlypb90tvIsKUCb0fcOKt7wcPEjLdVK2zfbNs0M+UlRDLyRVOHUVdelJ15cRDNjQHzhBo2HBUKn5Fmm/2pcmg==", "dev": true, - "peer": true, - "dependencies": { - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.1", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" + "requires": { + "config-chain": "^1.1.12", + "pify": "^5.0.0" } }, - "node_modules/@ensdomains/ens/node_modules/yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", + "@lerna/npm-dist-tag": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.3.0.tgz", + "integrity": "sha512-OPahPk9QLXQXFgtrWm22NNxajVYKavCyTh8ijMwXTGXXbMJAw+PVjokfrUuEtg7FQi+kfJSrYAcJAxxfQq2eiA==", "dev": true, - "peer": true, - "dependencies": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" + "requires": { + "@lerna/otplease": "5.3.0", + "npm-package-arg": "8.1.1", + "npm-registry-fetch": "^13.3.0", + "npmlog": "^6.0.2" } }, - "node_modules/@ensdomains/resolver": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", - "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", - "deprecated": "Please use @ensdomains/ens-contracts", - "dev": true, - "peer": true - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "@lerna/npm-install": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.3.0.tgz", + "integrity": "sha512-scbWo8nW+P9KfitWG3y7Ep97dOs64ECfz9xfqtjagEXKYBPxG3skvwwljkfNnuxrCNs71JVD+imvcewHzih28g==", "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" + "requires": { + "@lerna/child-process": "5.3.0", + "@lerna/get-npm-exec-opts": "5.3.0", + "fs-extra": "^9.1.0", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "signal-exit": "^3.0.3", + "write-pkg": "^4.0.0" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@ethereum-waffle/chai": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.4.4.tgz", - "integrity": "sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g==", - "dev": true, - "peer": true, "dependencies": { - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.5.2" - }, - "engines": { - "node": ">=10.0" + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "node_modules/@ethereum-waffle/compiler": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz", - "integrity": "sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==", + "@lerna/npm-publish": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.3.0.tgz", + "integrity": "sha512-n+ocN1Dxrs6AmrSNqZl57cwhP4/VjQXdEI+QYauNnErNjMQW8Wt+tNaTlVAhZ1DnorwAo86o2uzFF/BgdUqh9A==", "dev": true, - "peer": true, - "dependencies": { - "@resolver-engine/imports": "^0.3.3", - "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^2.0.0", - "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.5.5", - "ethers": "^5.0.1", - "mkdirp": "^0.5.1", - "node-fetch": "^2.6.1", - "solc": "^0.6.3", - "ts-generator": "^0.1.1", - "typechain": "^3.0.0" + "requires": { + "@lerna/otplease": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", + "fs-extra": "^9.1.0", + "libnpmpublish": "^6.0.4", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "read-package-json": "^5.0.1" }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/@typechain/ethers-v5": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", - "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", - "dev": true, - "peer": true, "dependencies": { - "ethers": "^5.0.2" - }, - "peerDependencies": { - "ethers": "^5.0.0", - "typechain": "^3.0.0" + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "node_modules/@ethereum-waffle/compiler/node_modules/array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "@lerna/npm-run-script": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.3.0.tgz", + "integrity": "sha512-2cLR1YdzeMjaMKgDuwHE+iZgVPt+Ttzb3/wFtp7Mw9TlKmNIdbHdrnfl12ABz5knPC+62CCNjB/gznfLndPp2w==", "dev": true, - "peer": true, - "dependencies": { - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4" + "requires": { + "@lerna/child-process": "5.3.0", + "@lerna/get-npm-exec-opts": "5.3.0", + "npmlog": "^6.0.2" } }, - "node_modules/@ethereum-waffle/compiler/node_modules/command-line-args": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", - "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", + "@lerna/otplease": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.3.0.tgz", + "integrity": "sha512-Xpju2VC5TiycmBP/mdp9hRstkH2MLm8/7o2NotVTCJwASWdKphRMqezhh5BX0E9i6VyrjzmTqSYEh9FNZZ9MwQ==", "dev": true, - "peer": true, - "dependencies": { - "array-back": "^2.0.0", - "find-replace": "^1.0.3", - "typical": "^2.6.1" - }, - "bin": { - "command-line-args": "bin/cli.js" + "requires": { + "@lerna/prompt": "5.3.0" } }, - "node_modules/@ethereum-waffle/compiler/node_modules/find-replace": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", - "integrity": "sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==", + "@lerna/output": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.3.0.tgz", + "integrity": "sha512-fISmHDu/9PKInFmT5NXsbh8cR6aE6SUXWrteXJ6PBYK30s0f/pVcfswb9VccX0Yea8HmqMQgCHWUWifkZeXiRA==", "dev": true, - "peer": true, - "dependencies": { - "array-back": "^1.0.4", - "test-value": "^2.1.0" - }, - "engines": { - "node": ">=4.0.0" + "requires": { + "npmlog": "^6.0.2" } }, - "node_modules/@ethereum-waffle/compiler/node_modules/find-replace/node_modules/array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", + "@lerna/pack-directory": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.3.0.tgz", + "integrity": "sha512-dTGMUB6/GjExhmLZ8yeFaRKJuSm6M/IsfxSJdL4gFPLigUIAS4XhzXS3KnL0+Ef1ue1yaTlAE9c/czfkE0pc/w==", "dev": true, - "peer": true, - "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" + "requires": { + "@lerna/get-packed": "5.3.0", + "@lerna/package": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", + "@lerna/temp-write": "5.3.0", + "npm-packlist": "^5.1.1", + "npmlog": "^6.0.2", + "tar": "^6.1.0" } }, - "node_modules/@ethereum-waffle/compiler/node_modules/ts-essentials": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", - "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", + "@lerna/package": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.3.0.tgz", + "integrity": "sha512-hsB03miiaNdvZ/UGzl0sVqxVat5x33EG9JiYgIoFqzroQPrG+WShmX3ctuO06TY1pxb4iNuHLPIbQomHEzzj8w==", "dev": true, - "peer": true, - "peerDependencies": { - "typescript": ">=3.7.0" + "requires": { + "load-json-file": "^6.2.0", + "npm-package-arg": "8.1.1", + "write-pkg": "^4.0.0" } }, - "node_modules/@ethereum-waffle/compiler/node_modules/typechain": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", - "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", + "@lerna/package-graph": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.3.0.tgz", + "integrity": "sha512-UEHY7l/yknwFvQgo0RifyY+B5QdzuFutLZYSN1BMmyWttOZD9rkM263qnLNGTZ2BUE4dXDwwwOHuhLvi+xDRsA==", "dev": true, - "peer": true, - "dependencies": { - "command-line-args": "^4.0.7", - "debug": "^4.1.1", - "fs-extra": "^7.0.0", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "ts-essentials": "^6.0.3", - "ts-generator": "^0.1.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" + "requires": { + "@lerna/prerelease-id-from-version": "5.3.0", + "@lerna/validation-error": "5.3.0", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "semver": "^7.3.4" } }, - "node_modules/@ethereum-waffle/compiler/node_modules/typical": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", - "dev": true, - "peer": true - }, - "node_modules/@ethereum-waffle/ens": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.4.4.tgz", - "integrity": "sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg==", + "@lerna/prerelease-id-from-version": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.3.0.tgz", + "integrity": "sha512-o1wsLns6hFTsmk4iqTRJNWLnFzlBBwgu17hp8T2iU4U7LUlDT2ZSKV3smGAU6GfrwX3MAp4LZ5syxgjFjrUOnw==", "dev": true, - "peer": true, - "dependencies": { - "@ensdomains/ens": "^0.4.4", - "@ensdomains/resolver": "^0.2.4", - "ethers": "^5.5.2" - }, - "engines": { - "node": ">=10.0" + "requires": { + "semver": "^7.3.4" } }, - "node_modules/@ethereum-waffle/mock-contract": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz", - "integrity": "sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA==", + "@lerna/profiler": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.3.0.tgz", + "integrity": "sha512-LEZYca29EPgZR0q5E+7CJkn25Cw3OxNMQJU/CVn/HGeoWYWOpoDxujrZBl8is2bw06LHXvRbVXEUATLc+ACbqQ==", "dev": true, - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.5.0", - "ethers": "^5.5.2" + "requires": { + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "upath": "^2.0.1" }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/@ethereum-waffle/provider": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.4.4.tgz", - "integrity": "sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g==", - "dev": true, - "peer": true, "dependencies": { - "@ethereum-waffle/ens": "^3.4.4", - "ethers": "^5.5.2", - "ganache-core": "^2.13.2", - "patch-package": "^6.2.2", - "postinstall-postinstall": "^2.1.0" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "dev": true, - "dependencies": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "node_modules/@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", + "@lerna/project": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.3.0.tgz", + "integrity": "sha512-InhIo9uwT1yod72ai5SKseJSUk8KkqG6COmwp1/45vibbawb7ZLbokpns7n46A0NdGNlmwJolamybYOuyumejw==", "dev": true, + "requires": { + "@lerna/package": "5.3.0", + "@lerna/validation-error": "5.3.0", + "cosmiconfig": "^7.0.0", + "dedent": "^0.7.0", + "dot-prop": "^6.0.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.2", + "load-json-file": "^6.2.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "resolve-from": "^5.0.0", + "write-json-file": "^4.3.0" + }, "dependencies": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, - "node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "@lerna/prompt": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.3.0.tgz", + "integrity": "sha512-4bIusBdjpw665CJtFsVsaB55hLHnmKnrcOaRjna6N/MdJDl8Th6X4EM4rrfXTX/uUNR3XcV91lYqcLuLmrpm5w==", "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" + "requires": { + "inquirer": "^8.2.4", + "npmlog": "^6.0.2" } }, - "node_modules/@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", + "@lerna/publish": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.3.0.tgz", + "integrity": "sha512-T8T1BQdI+NnlVARKwIXzILknEuiQlZToBsDpuX06M7+45t/pp9Z+u6pVt3rrqwiUPZ/dpoZzYKI31YdNJtGMcQ==", "dev": true, + "requires": { + "@lerna/check-working-tree": "5.3.0", + "@lerna/child-process": "5.3.0", + "@lerna/collect-updates": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/describe-ref": "5.3.0", + "@lerna/log-packed": "5.3.0", + "@lerna/npm-conf": "5.3.0", + "@lerna/npm-dist-tag": "5.3.0", + "@lerna/npm-publish": "5.3.0", + "@lerna/otplease": "5.3.0", + "@lerna/output": "5.3.0", + "@lerna/pack-directory": "5.3.0", + "@lerna/prerelease-id-from-version": "5.3.0", + "@lerna/prompt": "5.3.0", + "@lerna/pulse-till-done": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/validation-error": "5.3.0", + "@lerna/version": "5.3.0", + "fs-extra": "^9.1.0", + "libnpmaccess": "^6.0.3", + "npm-package-arg": "8.1.1", + "npm-registry-fetch": "^13.3.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "pacote": "^13.6.1", + "semver": "^7.3.4" + }, "dependencies": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "node_modules/@ethereumjs/ethash/node_modules/buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "@lerna/pulse-till-done": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.3.0.tgz", + "integrity": "sha512-yNvSuPLT1ZTtD2LMVOmiDhw4+9qkyf6xCpfxiUp4cGEN+qIuazWB5JicKLE49o27DBdaG8Ao4lAlb16x/gNrwQ==", "dev": true, - "dependencies": { - "safe-buffer": "^5.1.1" + "requires": { + "npmlog": "^6.0.2" } }, - "node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "@lerna/query-graph": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.3.0.tgz", + "integrity": "sha512-t99lNj97/Vilp5Js1Be7MoyaZ5U0fbOFh0E7lnTfSLvZhTkPMK6xLvAx2M3NQqhwYCQjTFDuf9ozQ3HQtYZAmA==", "dev": true, - "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" + "requires": { + "@lerna/package-graph": "5.3.0" } }, - "node_modules/@ethereumjs/vm": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", - "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", + "@lerna/resolve-symlink": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.3.0.tgz", + "integrity": "sha512-zKI7rV5FzzlMBfi6kjDS0ulzcdDTORvdOJ/+CHU5C2h+v+P64Nk2VhZZNCCBDoO/l4GRhgehZOB70GIamO1TSw==", "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "read-cmd-shim": "^3.0.0" + }, "dependencies": { - "@ethereumjs/block": "^3.6.3", - "@ethereumjs/blockchain": "^5.5.3", - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.4", - "rustbn.js": "~0.2.0" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true } - ], - "dependencies": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" } }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" + "@lerna/rimraf-dir": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.3.0.tgz", + "integrity": "sha512-/QJebh0tSY3LjgEyOo+6NH/b7ZNw9IpjqiDtvnLixjtdfkgli1OKOoZTa4KrO0mJoqMRq4yAa98cjpIzyKqCqw==", + "dev": true, + "requires": { + "@lerna/child-process": "5.3.0", + "npmlog": "^6.0.2", + "path-exists": "^4.0.0", + "rimraf": "^3.0.2" } }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" + "@lerna/run": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.3.0.tgz", + "integrity": "sha512-KwoKTj1w71OmUHONNYhZME+tr5lk9Q4f+3LUr2WtWZRuOAGO5ZCRrcZc+N4Ib7zno89Ub6Ovz51fcjwltLh72w==", + "dev": true, + "requires": { + "@lerna/command": "5.3.0", + "@lerna/filter-options": "5.3.0", + "@lerna/npm-run-script": "5.3.0", + "@lerna/output": "5.3.0", + "@lerna/profiler": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/timer": "5.3.0", + "@lerna/validation-error": "5.3.0", + "p-map": "^4.0.0" } }, - "node_modules/@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" + "@lerna/run-lifecycle": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.3.0.tgz", + "integrity": "sha512-EuBCGwm2PLgkebfyqo3yNkwfSb1EzHeo3lA8t4yld6LXWkgUPBFhc7RwRc6TsQOpjpfFvDSGoI282R01o0jPVQ==", + "dev": true, + "requires": { + "@lerna/npm-conf": "5.3.0", + "@npmcli/run-script": "^4.1.7", + "npmlog": "^6.0.2", + "p-queue": "^6.6.2" } }, - "node_modules/@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1" + "@lerna/run-topologically": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.3.0.tgz", + "integrity": "sha512-WiFF2EiwLjAguKs0lEmcukTL7WhuWFwxNprrGWFxEkBhlGdMFk18n8BaZN8FO26xqzztzuPzSx1re/f/dEEAPg==", + "dev": true, + "requires": { + "@lerna/query-graph": "5.3.0", + "p-queue": "^6.6.2" } }, - "node_modules/@ethersproject/basex": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", - "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "@lerna/symlink-binary": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.3.0.tgz", + "integrity": "sha512-dIATASuGS6y512AGjacOoTpkFDPsKlhggjzL3KLdSNmxV3288nUqaFBuA7rTnnMNnBQ7jVuE1JKJupZnzPN0cA==", + "dev": true, + "requires": { + "@lerna/create-symlink": "5.3.0", + "@lerna/package": "5.3.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" + }, "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/properties": "^5.6.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true } - ], - "dependencies": { - "@ethersproject/logger": "^5.6.0" } }, - "node_modules/@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "@lerna/symlink-dependencies": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.3.0.tgz", + "integrity": "sha512-qkq4YT/Bdrb3W22ve+d2Gy3hRTrtT/zBhjKTCukEpYsFJLwSjZ4z5vbv6J15/j6PN1Km9oTRp6vBYmdjAuARQQ==", + "dev": true, + "requires": { + "@lerna/create-symlink": "5.3.0", + "@lerna/resolve-symlink": "5.3.0", + "@lerna/symlink-binary": "5.3.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0" + }, "dependencies": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "node_modules/@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" } }, - "node_modules/@ethersproject/hdnode": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", - "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" + "@lerna/temp-write": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.3.0.tgz", + "integrity": "sha512-AhC5Q+tV0yebEc1P2jsB4apQzztW8dgdLLc1G1Pkt46l5vezRGhZmsj+iUyCsVjpdUSO/UcAq1DbI2Xzhf5arg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^8.3.2" } }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", - "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" + "@lerna/timer": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.3.0.tgz", + "integrity": "sha512-IeDjj1gJtbUPKl2ebpiml9u4k2kRqYF1Dbs6JuWpeC7lGxAx3JcUmkNH2RQ1BYTxk5xc9FKlgNMrZQwhq2K1Ow==", + "dev": true + }, + "@lerna/validation-error": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.3.0.tgz", + "integrity": "sha512-GVvnTxx+CNFjXCiJahAu2c/pP2R3DhGuQp4CJUyKegnzGaWK0h5PhlwRL7/LbDMPLh2zLobPOVr9kTOjwv76Nw==", + "dev": true, + "requires": { + "npmlog": "^6.0.2" } }, - "node_modules/@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" + "@lerna/version": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.3.0.tgz", + "integrity": "sha512-QOQSAdpeP66oQQ20nNZ4NhJS5NtZZDGyz36kP/4BeqjGK6QgtrEmto4+vmWj49w3VJUIXnrqAKHiPkhFUmJm5Q==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "5.3.0", + "@lerna/child-process": "5.3.0", + "@lerna/collect-updates": "5.3.0", + "@lerna/command": "5.3.0", + "@lerna/conventional-commits": "5.3.0", + "@lerna/github-client": "5.3.0", + "@lerna/gitlab-client": "5.3.0", + "@lerna/output": "5.3.0", + "@lerna/prerelease-id-from-version": "5.3.0", + "@lerna/prompt": "5.3.0", + "@lerna/run-lifecycle": "5.3.0", + "@lerna/run-topologically": "5.3.0", + "@lerna/temp-write": "5.3.0", + "@lerna/validation-error": "5.3.0", + "chalk": "^4.1.0", + "dedent": "^0.7.0", + "load-json-file": "^6.2.0", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "p-reduce": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4", + "slash": "^3.0.0", + "write-json-file": "^4.3.0" } }, - "node_modules/@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] - }, - "node_modules/@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.6.0" + "@lerna/write-log-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.3.0.tgz", + "integrity": "sha512-cmrNAI5+9auUJSuTVrUzt2nb/KX6htgjdw7gGPMI1Tm6cdBIbs67R6LedZ8yvYOLGsXB2Se93vxv5fTgEHWfCw==", + "dev": true, + "requires": { + "npmlog": "^6.0.2", + "write-file-atomic": "^4.0.1" } }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", - "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dev": true, + "requires": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/sha2": "^5.6.1" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.6.0" - } - }, - "node_modules/@ethersproject/providers": { - "version": "5.6.8", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", - "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/base64": "^5.6.1", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1", - "bech32": "1.1.4", - "ws": "7.4.6" } }, - "node_modules/@ethersproject/random": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", - "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } + "@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", + "dev": true }, - "node_modules/@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } + "@noble/secp256k1": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", + "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", + "dev": true }, - "node_modules/@ethersproject/sha2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", - "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "hash.js": "1.1.7" + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "node_modules/@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true }, - "node_modules/@ethersproject/solidity": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", - "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1" + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "node_modules/@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "@npmcli/arborist": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz", + "integrity": "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==", + "dev": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^4.1.3", + "bin-links": "^3.0.0", + "cacache": "^16.0.6", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", + "walk-up-path": "^1.0.0" + }, "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "node_modules/@ethersproject/units": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", - "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", - "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/json-wallets": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + } } - ], - "dependencies": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" } }, - "node_modules/@ethersproject/wordlists": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", - "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" + "@npmcli/fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.1.tgz", + "integrity": "sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "node_modules/@gnosis.pm/safe-core-sdk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.3.2.tgz", - "integrity": "sha512-XD50+AU7ahHwX0+YG8jeyqxrqNsEdLfCzAS5+9WkGuXMNm+K4jkJ9yBHN5yKAu5JXeCDYEQkjTSdVilm8ZLpXQ==", + "@npmcli/git": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", + "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", "dev": true, - "dependencies": { - "@ethersproject/solidity": "^5.6.0", - "@gnosis.pm/safe-core-sdk-types": "^1.3.0", - "@gnosis.pm/safe-deployments": "1.15.0", - "ethereumjs-util": "^7.1.4", + "requires": { + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", "semver": "^7.3.5", - "web3-utils": "^1.7.1" - } - }, - "node_modules/@gnosis.pm/safe-core-sdk-types": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.4.0.tgz", - "integrity": "sha512-v+V6wqfFVgBl2sZ8FqCMwL/qFnr6wBCcJ/gllo4OvItYw/dmXlMCkxUrERoILSeHDezLkrWnnzA4tHfkEwYuwg==", - "dependencies": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "1.15.0", - "web3-core": "^1.7.1" - } - }, - "node_modules/@gnosis.pm/safe-core-sdk-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.2.1.tgz", - "integrity": "sha512-VPnSLayGR4omwcNHPwzx8/aDyGXrWULKSF+ENeiWbmwgIhwQnB7T2gzhArNeUgt4BxmYft/HFm1MRSqiQnIQJw==", - "dependencies": { - "@gnosis.pm/safe-core-sdk-types": "^1.2.1", - "semver": "^7.3.7", - "web3-utils": "^1.7.1" - } - }, - "node_modules/@gnosis.pm/safe-deployments": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", - "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", + "which": "^2.0.2" + }, "dependencies": { - "semver": "^7.3.7" + "lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } } }, - "node_modules/@gnosis.pm/safe-ethers-lib": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.4.0.tgz", - "integrity": "sha512-ImKNocwoJB19g9nEcorLG1FuYQZyK+llcCIShSw0R7f3OHi30gjcQJek/rJv+wKetM66s7Dz26xtb2X9ARN3Gg==", + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", "dev": true, - "dependencies": { - "@gnosis.pm/safe-core-sdk-types": "^1.4.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.2.1" - }, - "peerDependencies": { - "ethers": "^5.6.2" + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" } }, - "node_modules/@gnosis.pm/safe-web3-lib": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.4.0.tgz", - "integrity": "sha512-EnJ4I9+VCSiktdWqUDfND3KGLINGlV22NlIZIRl8uIOxlIe5pGqpxb8RNgZHLBxoQ6klkQizcNlS4sv846y9ew==", + "@npmcli/map-workspaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", + "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", "dev": true, - "dependencies": { - "@ethersproject/bignumber": "^5.6.0", - "@gnosis.pm/safe-core-sdk-types": "^1.4.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.2.1" + "requires": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" }, - "peerDependencies": { - "web3": "^1.7.0" + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "@npmcli/metavuln-calculator": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", + "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" + "requires": { + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", + "semver": "^7.3.5" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "@npmcli/move-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "@npmcli/name-from-folder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", "dev": true }, - "node_modules/@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "@npmcli/node-gyp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", "dev": true }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "@npmcli/package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", + "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" + "requires": { + "json-parse-even-better-errors": "^2.3.1" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "@npmcli/promise-spawn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" + "requires": { + "infer-owner": "^1.0.4" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "@npmcli/run-script": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.0.tgz", + "integrity": "sha512-e/QgLg7j2wSJp1/7JRl0GC8c7PMX+uYlA/1Tb+IDOLdSM4T7K1VQ9mm9IGU3WRtY5vEIObpqCLb3aCNCug18DA==", "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "requires": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "@nrwl/cli": { + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.2.tgz", + "integrity": "sha512-uriSxM33IpiBpW9kHEW3gw5OjPaQe3jHdWUMOT88TrqTlf449qe01Sys8+H2YgJMIcLTFYX0fP4V1K9jqKKZCg==", "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "requires": { + "nx": "14.5.2" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "@nrwl/tao": { + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.2.tgz", + "integrity": "sha512-SEx3SM7xQiB8mOQ/gCt7lFJKRrkq3rBX6FiV3bl+dQtuKK2zKQbyikY9r+MCZCQNqZAud3HJ2xCyKZBhK8htQg==", "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "requires": { + "nx": "14.5.2" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "@octokit/auth-token": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", + "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "@octokit/types": "^6.0.3" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "@octokit/core": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", + "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "requires": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "@octokit/endpoint": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", + "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "@octokit/graphql": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", + "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" } }, - "node_modules/@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } + "@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", + "dev": true + }, + "@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true }, - "node_modules/@jest/core": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", - "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "@octokit/plugin-paginate-rest": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz", + "integrity": "sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==", "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "requires": { + "@octokit/types": "^6.41.0" } }, - "node_modules/@jest/core/node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true }, - "node_modules/@jest/environment": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", - "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "@octokit/plugin-rest-endpoint-methods": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.2.0.tgz", + "integrity": "sha512-PZ+yfkbZAuRUtqu6Y191/V3eM0KBPx+Yq7nh+ONPdpm3EX4pd5UnK2y2XgO/0AtNum5a4aJCDjqsDuUZ2hWRXw==", "dev": true, - "dependencies": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "requires": { + "@octokit/types": "^6.41.0", + "deprecation": "^2.3.1" } }, - "node_modules/@jest/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "@octokit/request": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.0.tgz", + "integrity": "sha512-7IAmHnaezZrgUqtRShMlByJK33MT9ZDnMRgZjnRrRV9a/jzzFwKGz0vxhFU6i7VMLraYcQ1qmcAOin37Kryq+Q==", "dev": true, - "dependencies": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "requires": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" } }, - "node_modules/@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "@octokit/request-error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", + "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", "dev": true, - "dependencies": { - "jest-get-type": "^28.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" } }, - "node_modules/@jest/fake-timers": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", - "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "@octokit/rest": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", + "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", - "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "requires": { + "@octokit/core": "^4.0.0", + "@octokit/plugin-paginate-rest": "^3.0.0", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^6.0.0" } }, - "node_modules/@jest/globals": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", - "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "requires": { + "@octokit/openapi-types": "^12.11.0" } }, - "node_modules/@jest/reporters": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", - "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "requires": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true + "dependencies": { + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true } } }, - "node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } + "@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "dev": true }, - "node_modules/@jest/source-map": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", - "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "@scure/bip32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", + "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.13", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "requires": { + "@noble/hashes": "~1.1.1", + "@noble/secp256k1": "~1.6.0", + "@scure/base": "~1.1.0" } }, - "node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "requires": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" } }, - "node_modules/@jest/test-sequencer": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", - "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", "dev": true, - "dependencies": { - "@jest/test-result": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" } }, - "node_modules/@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "requires": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" } }, - "node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" + "requires": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", "dev": true, - "engines": { - "node": ">=6.0.0" + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", "dev": true }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "requires": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" } }, - "node_modules/@lerna/add": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.3.0.tgz", - "integrity": "sha512-MxwTO2UBxZwwuquKbBqdYa56YTqg6Lfz1MZsRQxO7F2cb2NN8NEYTcGOli/71Ee/2AoX4R4xIFTh3TnaflQ25A==", + "@solidity-parser/parser": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", + "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", "dev": true, - "dependencies": { - "@lerna/bootstrap": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "npm-package-arg": "8.1.1", - "p-map": "^4.0.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "antlr4ts": "^0.5.0-alpha.4" } }, - "node_modules/@lerna/bootstrap": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.3.0.tgz", - "integrity": "sha512-iHVjt6YOQKLY0j+ex13a6ZxjIQ1TSSXqbl6z1hVjBFaDyCh7pra/tgj0LohZDVCaouLwRKucceQfTGrb+cfo7A==", - "dev": true, - "dependencies": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/has-npm-version": "5.3.0", - "@lerna/npm-install": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/rimraf-dir": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/symlink-binary": "5.3.0", - "@lerna/symlink-dependencies": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@npmcli/arborist": "5.3.0", - "dedent": "^0.7.0", - "get-port": "^5.1.1", - "multimatch": "^5.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true }, - "node_modules/@lerna/changed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.3.0.tgz", - "integrity": "sha512-i6ZfBDBZCpnPaSWTuNGTrnExkHNMC+/cSUuS9njaqe+tXgqE95Ja3cMxWZth9Q1uasjcEBHPU2jG0VKrU37rpA==", - "dev": true, - "dependencies": { - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/listable": "5.3.0", - "@lerna/output": "5.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true }, - "node_modules/@lerna/check-working-tree": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.3.0.tgz", - "integrity": "sha512-qo6jUGWXKLVL1nU8aEECqwrGRjs9o1l1hXdD2juA4Fvzsam1cFVHJwsmw3hAXGhEPD0oalg/XR62H9rZSCLOvQ==", - "dev": true, - "dependencies": { - "@lerna/collect-uncommitted": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "@lerna/validation-error": "5.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true }, - "node_modules/@lerna/child-process": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.3.0.tgz", - "integrity": "sha512-4uXPNIptrgQQQVHVVAXBD8F7IqSvZL3Og0G0DHiWKH+dsSyMIUtaIGJt7sifVoL7nzex4AqEiPq/AubpmG5g4Q==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "execa": "^5.0.0", - "strong-log-transformer": "^2.1.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true }, - "node_modules/@lerna/clean": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.3.0.tgz", - "integrity": "sha512-Jn+Dr7A69dch8m1dLe7l/SDVQVQT2j7zdy2gaZVEmJIgEEaXmEbfJ2t2n06vRXtckI9B85M5mubT1U3Y7KuNuA==", + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "@types/abstract-leveldown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", + "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", + "dev": true + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", "dev": true, - "dependencies": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/rimraf-dir": "5.3.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "@types/node": "*" } }, - "node_modules/@lerna/cli": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.3.0.tgz", - "integrity": "sha512-P7F3Xs98pXMEGZX+mnFfsd6gU03x8UrwQ3mElvQBICl4Ew9z6rS8NGUd3JOPFzm4/vSTjYTnPyPdWBjj6/f6sw==", + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/level-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", + "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", + "dev": true + }, + "@types/levelup": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", + "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", "dev": true, - "dependencies": { - "@lerna/global-options": "5.3.0", - "dedent": "^0.7.0", - "npmlog": "^6.0.2", - "yargs": "^16.2.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "@types/abstract-leveldown": "*", + "@types/level-errors": "*", + "@types/node": "*" } }, - "node_modules/@lerna/cli/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/node": { + "version": "18.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", + "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" + "requires": { + "@types/node": "*" } }, - "node_modules/@lerna/collect-uncommitted": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.3.0.tgz", - "integrity": "sha512-Ll/mU9Nes0NQoa0pSv2TR2PTCkIomBGuDWH48OF2sKKu69NuLjrD2L0udS5nJYig9HxFewtm4QTiUdYPxfJXkQ==", + "@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "chalk": "^4.1.0", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "@types/node": "*" } }, - "node_modules/@lerna/collect-updates": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.3.0.tgz", - "integrity": "sha512-fzJo/rmdXKWKYt+9IXjtenIZtSr3blMH8GEqoVKpSZ7TJGpxcFNmMe6foa60BgaTnDmmg1y7Qu6JbQJ3Ra5c5w==", - "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true }, - "node_modules/@lerna/command": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.3.0.tgz", - "integrity": "sha512-UNQQ4EGTumqLhOuDPcRA4LpdS9pcTYKSdh/8MdKPeyIRN70vCTwdeTrxqaaKsn3Jo7ycvyUQT5yfrUFmCClfoA==", + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/project": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@lerna/write-log-file": "5.3.0", - "clone-deep": "^4.0.1", - "dedent": "^0.7.0", - "execa": "^5.0.0", - "is-ci": "^2.0.0", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" } }, - "node_modules/@lerna/conventional-commits": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.3.0.tgz", - "integrity": "sha512-9uoQ2E1J7pL0fml5PNO7FydnBNeqrNOQa53Ca1Klf5t/x4vIn51ocOZNm/YbRAc/affnrxxp+gR2/SWlN0yKqQ==", - "dev": true, - "dependencies": { - "@lerna/validation-error": "5.3.0", - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.4", - "conventional-recommended-bump": "^6.1.0", - "fs-extra": "^9.1.0", - "get-stream": "^6.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, - "node_modules/@lerna/conventional-commits/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "requires": { + "event-target-shim": "^5.0.0" } }, - "node_modules/@lerna/conventional-commits/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "abstract-leveldown": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" } }, - "node_modules/@lerna/conventional-commits/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true }, - "node_modules/@lerna/create": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.3.0.tgz", - "integrity": "sha512-DotTReCc3+Q9rpMA8RKAGemUK7JXT7skbxHvpqpPj7ryNkIv/dNAFC2EHglcpt9Rmyo6YbSP2zk0gfDbdiIcVA==", - "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "init-package-json": "^3.0.2", - "npm-package-arg": "8.1.1", - "p-reduce": "^2.1.0", - "pacote": "^13.6.1", - "pify": "^5.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0", - "whatwg-url": "^8.4.0", - "yargs-parser": "20.2.4" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true }, - "node_modules/@lerna/create-symlink": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.3.0.tgz", - "integrity": "sha512-xIoC9m4J/u4NV/8ms4P2fiimaYgialqJvNamvMDRmgE1c3BLDSGk2nE4nVI2W5LxjgJdMTiIH9v1QpTUC9Fv+Q==", - "dev": true, - "dependencies": { - "cmd-shim": "^5.0.0", - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true }, - "node_modules/@lerna/create-symlink/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true }, - "node_modules/@lerna/create-symlink/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "requires": { + "debug": "4" } }, - "node_modules/@lerna/create-symlink/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "dev": true, - "engines": { - "node": ">= 10.0.0" + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" } }, - "node_modules/@lerna/create/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, - "node_modules/@lerna/create/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" + "requires": { + "type-fest": "^0.21.3" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } } }, - "node_modules/@lerna/create/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "engines": { - "node": ">= 10.0.0" + "requires": { + "color-convert": "^2.0.1" } }, - "node_modules/@lerna/describe-ref": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.3.0.tgz", - "integrity": "sha512-R+CtJcOuAF3kJ6GNQnGC3STEi+5OtpNVz2n17sAs/xqJnq79tPdzEhT+pMxB2eSEkQYlSr+cCKMpF0m/mtIPQA==", + "antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "node_modules/@lerna/diff": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.3.0.tgz", - "integrity": "sha512-i6f99dtO90u1QIJEfVtKE831m4gnMHBwY+4D84GY2SJMno8uI7ZyxMRZQh1nAFtvlNozO2MgzLr1OHtNMZOIgQ==", + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/validation-error": "5.3.0", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" } }, - "node_modules/@lerna/exec": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.3.0.tgz", - "integrity": "sha512-kI/IuF1hbT+pEMZc3v4+w8BLckUIi45ipzOP0bWvXNgSKKuADAU3HLv+ifRXEjob5906C+Zc7K2IVoVS6r1TDg==", - "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/profiler": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/validation-error": "5.3.0", - "p-map": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, - "node_modules/@lerna/filter-options": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.3.0.tgz", - "integrity": "sha512-ddgy0oDisTKIhCJ4WY5CeEhTsyrbW+zeBvZ7rVaG0oQXjSSYBried4TXRvgy67fampfHoPX+eQq5l1SYTRFPlw==", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, - "dependencies": { - "@lerna/collect-updates": "5.3.0", - "@lerna/filter-packages": "5.3.0", - "dedent": "^0.7.0", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "lodash": "^4.17.14" } }, - "node_modules/@lerna/filter-packages": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.3.0.tgz", - "integrity": "sha512-5/2V50sQB2+JNwuCHP/UPm3y8PN2JWVY9CbNLtF3K5bymNsCkQh2KHEL9wlWZ4yfr/2ufpy4XFPaFUHNoUOGnQ==", + "async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", "dev": true, - "dependencies": { - "@lerna/validation-error": "5.3.0", - "multimatch": "^5.0.0", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "async": "^2.4.0" } }, - "node_modules/@lerna/get-npm-exec-opts": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.3.0.tgz", - "integrity": "sha512-cYBypDo8C7f4MvVvap2nYgtk8MXAADrYU1VdECSJ3Stbe4p2vBGt8bM9xkS2uPfQFMK3YSy3YPkSZcSjVXyoGw==", + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", "dev": true, - "dependencies": { - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "safe-buffer": "^5.0.1" } }, - "node_modules/@lerna/get-packed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.3.0.tgz", - "integrity": "sha512-kD12w7Ko5TThuOuPF2HBLyuPsHK3oyyWyzleGBqR4DqxMtbMRgimyTQnr5o58XBOwUPCFsv1EZiqeGk+3HTGEA==", + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "dev": true + }, + "bin-links": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", + "integrity": "sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ==", "dev": true, - "dependencies": { - "fs-extra": "^9.1.0", - "ssri": "^9.0.1", - "tar": "^6.1.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0", + "read-cmd-shim": "^3.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^4.0.0" } }, - "node_modules/@lerna/get-packed/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/@lerna/get-packed/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@lerna/get-packed/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "engines": { - "node": ">= 10.0.0" + "requires": { + "fill-range": "^7.0.1" } }, - "node_modules/@lerna/github-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.3.0.tgz", - "integrity": "sha512-UqAclsWDMthmbv3Z8QE1K7D/4e93ytg31mc+nEj+UdU+xJQ0L1ypl8zWAmGNs1sFkQntIiTIB4W5zgHet5mmZw==", + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^19.0.3", - "git-url-parse": "^12.0.0", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/@lerna/gitlab-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.3.0.tgz", - "integrity": "sha512-otwbiaGDgvn5MGF1ypsCO48inMpdcxuiDlbxrKD6glPUwNHiGV+PU8LLCCDKimwjjQhl88ySLpL1oTm4jnZ1Aw==", + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dev": true, - "dependencies": { - "node-fetch": "^2.6.1", - "npmlog": "^6.0.2", - "whatwg-url": "^8.4.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "base-x": "^3.0.2" } }, - "node_modules/@lerna/global-options": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.3.0.tgz", - "integrity": "sha512-iEoFrDSU+KtfcB+lHW5grjg3VkEqzZNTUnWnE1FCBBwj9tSLOHjgKGtWWjIQtBUJ+qcLBbusap9Stqzr7UPYpQ==", + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "dev": true, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" } }, - "node_modules/@lerna/has-npm-version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.3.0.tgz", - "integrity": "sha512-A/bK8e+QP/VMqZkq1wZbyOzMz/AY92tAVsBOQ5Yw2zqshdMVj99st3YHLOqJf/HTEzQo27GGI/ajmcltHS2l6A==", + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "semver": "^7.3.4" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/@lerna/import": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.3.0.tgz", - "integrity": "sha512-KjVT9oFNSp1JLdrS1LSXjDcLiu2TMSfy6tpmhF9Zxo7oKB21SgWmXVV9rcWDueW2RIxNXDeVUG0NVNj2BRGeEQ==", - "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "p-map-series": "^2.1.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, - "node_modules/@lerna/import/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "requires": { + "semver": "^7.0.0" } }, - "node_modules/@lerna/import/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "byte-size": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", + "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", + "dev": true + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "cacache": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", + "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "dev": true + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } } }, - "node_modules/@lerna/import/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, - "engines": { - "node": ">= 10.0.0" + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "node_modules/@lerna/info": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.3.0.tgz", - "integrity": "sha512-pyeZSM/PIpBHCXdHPrbh6sPZlngXUxhTVFb0VaIjQ5Ms585xi15s1UQDO3FvzqdyMyalx0QGzCJbNx5XeoCejg==", - "dev": true, - "dependencies": { - "@lerna/command": "5.3.0", - "@lerna/output": "5.3.0", - "envinfo": "^7.7.4" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true }, - "node_modules/@lerna/init": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.3.0.tgz", - "integrity": "sha512-y46lzEtgMdEseTJGQQqYZOjqqd7iN+e14vFh/9q5h62V4Y8nlUJRzovVo8JSeaGwKLB0B3dq3BuUn0PNywMhpA==", + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/project": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "write-json-file": "^4.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" } }, - "node_modules/@lerna/init/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "node_modules/@lerna/init/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, - "node_modules/@lerna/init/node_modules/universalify": { + "chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true }, - "node_modules/@lerna/link": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.3.0.tgz", - "integrity": "sha512-+QBwnGg3S8Zk8M8G5CA4kmGq92rkEMbmWJXaxie3jQayp+GXgSlLs6R4jwSOZlztY6xR3WawMI9sHJ0Vdu+g7w==", + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, - "dependencies": { - "@lerna/command": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/symlink-dependencies": "5.3.0", - "p-map": "^4.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/@lerna/list": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.3.0.tgz", - "integrity": "sha512-5RJvle3m4l2H0UmKNlwS8h2OIlNGsNTKPC4DYrJYt0+fhgzf5SEV1QKw+fuUqe3F8MziIkSGQB52HsjwPE6AWQ==", + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "dependencies": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/listable": "5.3.0", - "@lerna/output": "5.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "restore-cursor": "^3.1.0" } }, - "node_modules/@lerna/listable": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.3.0.tgz", - "integrity": "sha512-RdmeV9mDeuBOgVOlF/KNH/qttyiYwHbeqHiMAw9s9AfMo/Fz3iDZaTGZuruMm84TZSkKxI7m5mjTlC0djsyKog==", - "dev": true, - "dependencies": { - "@lerna/query-graph": "5.3.0", - "chalk": "^4.1.0", - "columnify": "^1.6.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true }, - "node_modules/@lerna/log-packed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.3.0.tgz", - "integrity": "sha512-tDuOot3vSOUSP7fNNej8UM0fah5oy8mKXe026grt4J0OP4L3rhSWxhfrDBQ3Ylh2dAjgHzscUf/vpnNC9HnhOQ==", - "dev": true, - "dependencies": { - "byte-size": "^7.0.0", - "columnify": "^1.6.0", - "has-unicode": "^2.0.1", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true }, - "node_modules/@lerna/npm-conf": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.3.0.tgz", - "integrity": "sha512-ejlypb90tvIsKUCb0fcOKt7wcPEjLdVK2zfbNs0M+UlRDLyRVOHUVdelJ15cRDNjQHzhBo2HBUKn5Fmm/2pcmg==", + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "dependencies": { - "config-chain": "^1.1.12", - "pify": "^5.0.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/@lerna/npm-dist-tag": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.3.0.tgz", - "integrity": "sha512-OPahPk9QLXQXFgtrWm22NNxajVYKavCyTh8ijMwXTGXXbMJAw+PVjokfrUuEtg7FQi+kfJSrYAcJAxxfQq2eiA==", - "dev": true, - "dependencies": { - "@lerna/otplease": "5.3.0", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true }, - "node_modules/@lerna/npm-install": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.3.0.tgz", - "integrity": "sha512-scbWo8nW+P9KfitWG3y7Ep97dOs64ECfz9xfqtjagEXKYBPxG3skvwwljkfNnuxrCNs71JVD+imvcewHzih28g==", + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/get-npm-exec-opts": "5.3.0", - "fs-extra": "^9.1.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "signal-exit": "^3.0.3", - "write-pkg": "^4.0.0" + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } - }, - "node_modules/@lerna/npm-install/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } } }, - "node_modules/@lerna/npm-install/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "cmd-shim": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", + "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "requires": { + "mkdirp-infer-owner": "^2.0.0" } }, - "node_modules/@lerna/npm-install/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "engines": { - "node": ">= 10.0.0" + "requires": { + "color-name": "~1.1.4" } }, - "node_modules/@lerna/npm-publish": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.3.0.tgz", - "integrity": "sha512-n+ocN1Dxrs6AmrSNqZl57cwhP4/VjQXdEI+QYauNnErNjMQW8Wt+tNaTlVAhZ1DnorwAo86o2uzFF/BgdUqh9A==", - "dev": true, - "dependencies": { - "@lerna/otplease": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "fs-extra": "^9.1.0", - "libnpmpublish": "^6.0.4", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "read-package-json": "^5.0.1" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/@lerna/npm-publish/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" } }, - "node_modules/@lerna/npm-publish/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "dependencies": { + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + } } }, - "node_modules/@lerna/npm-publish/node_modules/universalify": { + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "concat-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, - "engines": { - "node": ">= 10.0.0" + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" } }, - "node_modules/@lerna/npm-run-script": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.3.0.tgz", - "integrity": "sha512-2cLR1YdzeMjaMKgDuwHE+iZgVPt+Ttzb3/wFtp7Mw9TlKmNIdbHdrnfl12ABz5knPC+62CCNjB/gznfLndPp2w==", + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/get-npm-exec-opts": "5.3.0", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "node_modules/@lerna/otplease": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.3.0.tgz", - "integrity": "sha512-Xpju2VC5TiycmBP/mdp9hRstkH2MLm8/7o2NotVTCJwASWdKphRMqezhh5BX0E9i6VyrjzmTqSYEh9FNZZ9MwQ==", + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, - "dependencies": { - "@lerna/prompt": "5.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" } }, - "node_modules/@lerna/output": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.3.0.tgz", - "integrity": "sha512-fISmHDu/9PKInFmT5NXsbh8cR6aE6SUXWrteXJ6PBYK30s0f/pVcfswb9VccX0Yea8HmqMQgCHWUWifkZeXiRA==", + "conventional-changelog-core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, - "dependencies": { - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" } }, - "node_modules/@lerna/pack-directory": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.3.0.tgz", - "integrity": "sha512-dTGMUB6/GjExhmLZ8yeFaRKJuSm6M/IsfxSJdL4gFPLigUIAS4XhzXS3KnL0+Ef1ue1yaTlAE9c/czfkE0pc/w==", - "dev": true, - "dependencies": { - "@lerna/get-packed": "5.3.0", - "@lerna/package": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/temp-write": "5.3.0", - "npm-packlist": "^5.1.1", - "npmlog": "^6.0.2", - "tar": "^6.1.0" + "conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true + }, + "conventional-changelog-writer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "dev": true, + "requires": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/@lerna/package": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.3.0.tgz", - "integrity": "sha512-hsB03miiaNdvZ/UGzl0sVqxVat5x33EG9JiYgIoFqzroQPrG+WShmX3ctuO06TY1pxb4iNuHLPIbQomHEzzj8w==", + "conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, - "dependencies": { - "load-json-file": "^6.2.0", - "npm-package-arg": "8.1.1", - "write-pkg": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" } }, - "node_modules/@lerna/package-graph": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.3.0.tgz", - "integrity": "sha512-UEHY7l/yknwFvQgo0RifyY+B5QdzuFutLZYSN1BMmyWttOZD9rkM263qnLNGTZ2BUE4dXDwwwOHuhLvi+xDRsA==", + "conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, - "dependencies": { - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/validation-error": "5.3.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "semver": "^7.3.4" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" } }, - "node_modules/@lerna/prerelease-id-from-version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.3.0.tgz", - "integrity": "sha512-o1wsLns6hFTsmk4iqTRJNWLnFzlBBwgu17hp8T2iU4U7LUlDT2ZSKV3smGAU6GfrwX3MAp4LZ5syxgjFjrUOnw==", + "conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", "dev": true, - "dependencies": { - "semver": "^7.3.4" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" } }, - "node_modules/@lerna/profiler": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.3.0.tgz", - "integrity": "sha512-LEZYca29EPgZR0q5E+7CJkn25Cw3OxNMQJU/CVn/HGeoWYWOpoDxujrZBl8is2bw06LHXvRbVXEUATLc+ACbqQ==", + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true + }, + "core-js-pure": { + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.1.tgz", + "integrity": "sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, - "dependencies": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "upath": "^2.0.1" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" } }, - "node_modules/@lerna/profiler/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/@lerna/profiler/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/@lerna/profiler/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "engines": { - "node": ">= 10.0.0" + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "node_modules/@lerna/project": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.3.0.tgz", - "integrity": "sha512-InhIo9uwT1yod72ai5SKseJSUk8KkqG6COmwp1/45vibbawb7ZLbokpns7n46A0NdGNlmwJolamybYOuyumejw==", + "dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "dependencies": { - "@lerna/package": "5.3.0", - "@lerna/validation-error": "5.3.0", - "cosmiconfig": "^7.0.0", - "dedent": "^0.7.0", - "dot-prop": "^6.0.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.2", - "load-json-file": "^6.2.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "resolve-from": "^5.0.0", - "write-json-file": "^4.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "ms": "2.1.2" } }, - "node_modules/@lerna/project/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", "dev": true, - "dependencies": { - "is-glob": "^4.0.1" + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, - "engines": { - "node": ">= 6" + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + } } }, - "node_modules/@lerna/project/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "clone": "^1.0.2" } }, - "node_modules/@lerna/prompt": { + "deferred-leveldown": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.3.0.tgz", - "integrity": "sha512-4bIusBdjpw665CJtFsVsaB55hLHnmKnrcOaRjna6N/MdJDl8Th6X4EM4rrfXTX/uUNR3XcV91lYqcLuLmrpm5w==", - "dev": true, - "dependencies": { - "inquirer": "^8.2.4", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } - }, - "node_modules/@lerna/publish": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.3.0.tgz", - "integrity": "sha512-T8T1BQdI+NnlVARKwIXzILknEuiQlZToBsDpuX06M7+45t/pp9Z+u6pVt3rrqwiUPZ/dpoZzYKI31YdNJtGMcQ==", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", "dev": true, - "dependencies": { - "@lerna/check-working-tree": "5.3.0", - "@lerna/child-process": "5.3.0", - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "@lerna/log-packed": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/npm-dist-tag": "5.3.0", - "@lerna/npm-publish": "5.3.0", - "@lerna/otplease": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/pack-directory": "5.3.0", - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@lerna/version": "5.3.0", - "fs-extra": "^9.1.0", - "libnpmaccess": "^6.0.3", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" + "requires": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } - }, - "node_modules/@lerna/publish/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + } + } } }, - "node_modules/@lerna/publish/node_modules/jsonfile": { + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, + "detect-indent": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "requires": { + "asap": "^2.0.0", + "wrappy": "1" } }, - "node_modules/@lerna/publish/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "engines": { - "node": ">= 10.0.0" + "requires": { + "path-type": "^4.0.0" } }, - "node_modules/@lerna/pulse-till-done": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.3.0.tgz", - "integrity": "sha512-yNvSuPLT1ZTtD2LMVOmiDhw4+9qkyf6xCpfxiUp4cGEN+qIuazWB5JicKLE49o27DBdaG8Ao4lAlb16x/gNrwQ==", + "dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dev": true, - "dependencies": { - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "is-obj": "^2.0.0" } }, - "node_modules/@lerna/query-graph": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.3.0.tgz", - "integrity": "sha512-t99lNj97/Vilp5Js1Be7MoyaZ5U0fbOFh0E7lnTfSLvZhTkPMK6xLvAx2M3NQqhwYCQjTFDuf9ozQ3HQtYZAmA==", + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, - "dependencies": { - "@lerna/package-graph": "5.3.0" + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "node_modules/@lerna/resolve-symlink": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.3.0.tgz", - "integrity": "sha512-zKI7rV5FzzlMBfi6kjDS0ulzcdDTORvdOJ/+CHU5C2h+v+P64Nk2VhZZNCCBDoO/l4GRhgehZOB70GIamO1TSw==", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, - "dependencies": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "read-cmd-shim": "^3.0.0" + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } } }, - "node_modules/@lerna/resolve-symlink/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "requires": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" } }, - "node_modules/@lerna/resolve-symlink/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "requires": { + "once": "^1.4.0" } }, - "node_modules/@lerna/resolve-symlink/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, - "engines": { - "node": ">= 10.0.0" + "requires": { + "ansi-colors": "^4.1.1" } }, - "node_modules/@lerna/rimraf-dir": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.3.0.tgz", - "integrity": "sha512-/QJebh0tSY3LjgEyOo+6NH/b7ZNw9IpjqiDtvnLixjtdfkgli1OKOoZTa4KrO0mJoqMRq4yAa98cjpIzyKqCqw==", + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "npmlog": "^6.0.2", - "path-exists": "^4.0.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "prr": "~1.0.1" } }, - "node_modules/@lerna/run": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.3.0.tgz", - "integrity": "sha512-KwoKTj1w71OmUHONNYhZME+tr5lk9Q4f+3LUr2WtWZRuOAGO5ZCRrcZc+N4Ib7zno89Ub6Ovz51fcjwltLh72w==", - "dev": true, - "dependencies": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/npm-run-script": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/profiler": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/timer": "5.3.0", - "@lerna/validation-error": "5.3.0", - "p-map": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } - }, - "node_modules/@lerna/run-lifecycle": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.3.0.tgz", - "integrity": "sha512-EuBCGwm2PLgkebfyqo3yNkwfSb1EzHeo3lA8t4yld6LXWkgUPBFhc7RwRc6TsQOpjpfFvDSGoI282R01o0jPVQ==", - "dev": true, - "dependencies": { - "@lerna/npm-conf": "5.3.0", - "@npmcli/run-script": "^4.1.7", - "npmlog": "^6.0.2", - "p-queue": "^6.6.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } - }, - "node_modules/@lerna/run-topologically": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.3.0.tgz", - "integrity": "sha512-WiFF2EiwLjAguKs0lEmcukTL7WhuWFwxNprrGWFxEkBhlGdMFk18n8BaZN8FO26xqzztzuPzSx1re/f/dEEAPg==", - "dev": true, - "dependencies": { - "@lerna/query-graph": "5.3.0", - "p-queue": "^6.6.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } - }, - "node_modules/@lerna/symlink-binary": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.3.0.tgz", - "integrity": "sha512-dIATASuGS6y512AGjacOoTpkFDPsKlhggjzL3KLdSNmxV3288nUqaFBuA7rTnnMNnBQ7jVuE1JKJupZnzPN0cA==", - "dev": true, - "dependencies": { - "@lerna/create-symlink": "5.3.0", - "@lerna/package": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } - }, - "node_modules/@lerna/symlink-binary/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "requires": { + "is-arrayish": "^0.2.1" } }, - "node_modules/@lerna/symlink-binary/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, - "node_modules/@lerna/symlink-binary/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, - "node_modules/@lerna/symlink-dependencies": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.3.0.tgz", - "integrity": "sha512-qkq4YT/Bdrb3W22ve+d2Gy3hRTrtT/zBhjKTCukEpYsFJLwSjZ4z5vbv6J15/j6PN1Km9oTRp6vBYmdjAuARQQ==", + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, - "dependencies": { - "@lerna/create-symlink": "5.3.0", - "@lerna/resolve-symlink": "5.3.0", - "@lerna/symlink-binary": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/@lerna/symlink-dependencies/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/symlink-dependencies/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@lerna/symlink-dependencies/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } } }, - "node_modules/@lerna/temp-write": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.3.0.tgz", - "integrity": "sha512-AhC5Q+tV0yebEc1P2jsB4apQzztW8dgdLLc1G1Pkt46l5vezRGhZmsj+iUyCsVjpdUSO/UcAq1DbI2Xzhf5arg==", + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "is-stream": "^2.0.0", - "make-dir": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^8.3.2" + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" } }, - "node_modules/@lerna/timer": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.3.0.tgz", - "integrity": "sha512-IeDjj1gJtbUPKl2ebpiml9u4k2kRqYF1Dbs6JuWpeC7lGxAx3JcUmkNH2RQ1BYTxk5xc9FKlgNMrZQwhq2K1Ow==", + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", "dev": true, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" } }, - "node_modules/@lerna/validation-error": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.3.0.tgz", - "integrity": "sha512-GVvnTxx+CNFjXCiJahAu2c/pP2R3DhGuQp4CJUyKegnzGaWK0h5PhlwRL7/LbDMPLh2zLobPOVr9kTOjwv76Nw==", - "dev": true, - "dependencies": { - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true }, - "node_modules/@lerna/version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.3.0.tgz", - "integrity": "sha512-QOQSAdpeP66oQQ20nNZ4NhJS5NtZZDGyz36kP/4BeqjGK6QgtrEmto4+vmWj49w3VJUIXnrqAKHiPkhFUmJm5Q==", - "dev": true, - "dependencies": { - "@lerna/check-working-tree": "5.3.0", - "@lerna/child-process": "5.3.0", - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/conventional-commits": "5.3.0", - "@lerna/github-client": "5.3.0", - "@lerna/gitlab-client": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/temp-write": "5.3.0", - "@lerna/validation-error": "5.3.0", - "chalk": "^4.1.0", - "dedent": "^0.7.0", - "load-json-file": "^6.2.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "p-reduce": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4", - "slash": "^3.0.0", - "write-json-file": "^4.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true }, - "node_modules/@lerna/write-log-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.3.0.tgz", - "integrity": "sha512-cmrNAI5+9auUJSuTVrUzt2nb/KX6htgjdw7gGPMI1Tm6cdBIbs67R6LedZ8yvYOLGsXB2Se93vxv5fTgEHWfCw==", + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, - "dependencies": { - "npmlog": "^6.0.2", - "write-file-atomic": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } - }, - "node_modules/@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "dependencies": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@noble/secp256k1": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nomiclabs/hardhat-ethers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.0.tgz", - "integrity": "sha512-vlW90etB3675QWG7tMrHaDoTa7ymMB7irM4DAQ98g8zJoe9YqEggeDnbO6v5b+BLth/ty4vN6Ko/kaqRN1krHw==", - "dev": true, - "peerDependencies": { - "ethers": "^5.0.0", - "hardhat": "^2.0.0" - } - }, - "node_modules/@nomiclabs/hardhat-waffle": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", - "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", - "dev": true, - "dependencies": { - "@types/sinon-chai": "^3.2.3", - "@types/web3": "1.0.19" - }, - "peerDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.0", - "ethereum-waffle": "^3.2.0", - "ethers": "^5.0.0", - "hardhat": "^2.0.0" - } - }, - "node_modules/@nomiclabs/hardhat-web3": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz", - "integrity": "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==", - "dev": true, - "dependencies": { - "@types/bignumber.js": "^5.0.0" - }, - "peerDependencies": { - "hardhat": "^2.0.0", - "web3": "^1.0.0-beta.36" - } - }, - "node_modules/@npmcli/arborist": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz", - "integrity": "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==", - "dev": true, - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.0", - "cacache": "^16.0.6", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/@npmcli/arborist/node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@npmcli/arborist/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.1.tgz", - "integrity": "sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", - "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@npmcli/git/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@npmcli/map-workspaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", - "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", - "dev": true, - "dependencies": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/metavuln-calculator": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", - "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", - "dev": true, - "dependencies": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/name-from-folder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", - "dev": true - }, - "node_modules/@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/package-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", - "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", - "dev": true, - "dependencies": { - "infer-owner": "^1.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.0.tgz", - "integrity": "sha512-e/QgLg7j2wSJp1/7JRl0GC8c7PMX+uYlA/1Tb+IDOLdSM4T7K1VQ9mm9IGU3WRtY5vEIObpqCLb3aCNCug18DA==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@nrwl/cli": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.2.tgz", - "integrity": "sha512-uriSxM33IpiBpW9kHEW3gw5OjPaQe3jHdWUMOT88TrqTlf449qe01Sys8+H2YgJMIcLTFYX0fP4V1K9jqKKZCg==", - "dev": true, - "dependencies": { - "nx": "14.5.2" - } - }, - "node_modules/@nrwl/tao": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.2.tgz", - "integrity": "sha512-SEx3SM7xQiB8mOQ/gCt7lFJKRrkq3rBX6FiV3bl+dQtuKK2zKQbyikY9r+MCZCQNqZAud3HJ2xCyKZBhK8htQg==", - "dev": true, - "dependencies": { - "nx": "14.5.2" - }, - "bin": { - "tao": "index.js" - } - }, - "node_modules/@octokit/auth-token": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", - "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", - "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", - "dev": true, - "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/endpoint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", - "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/graphql": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", - "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", - "dev": true, - "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", - "dev": true - }, - "node_modules/@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz", - "integrity": "sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.41.0" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=4" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.2.0.tgz", - "integrity": "sha512-PZ+yfkbZAuRUtqu6Y191/V3eM0KBPx+Yq7nh+ONPdpm3EX4pd5UnK2y2XgO/0AtNum5a4aJCDjqsDuUZ2hWRXw==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.41.0", - "deprecation": "^2.3.1" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/request": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.0.tgz", - "integrity": "sha512-7IAmHnaezZrgUqtRShMlByJK33MT9ZDnMRgZjnRrRV9a/jzzFwKGz0vxhFU6i7VMLraYcQ1qmcAOin37Kryq+Q==", - "dev": true, - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/request-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", - "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/rest": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", - "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", - "dev": true, - "dependencies": { - "@octokit/core": "^4.0.0", - "@octokit/plugin-paginate-rest": "^3.0.0", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dev": true, - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/@openzeppelin/contracts": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.2.tgz", - "integrity": "sha512-4n/JL9izql8303mPqPdubuna/DWEMbmOzWYUWyCPhjhiEr2w3nQrjE7vZz1fBF+wzzP6dZbIcsgqACk53c9FGA==" - }, - "node_modules/@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node_modules/@resolver-engine/core": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz", - "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "^3.1.0", - "is-url": "^1.2.4", - "request": "^2.85.0" - } - }, - "node_modules/@resolver-engine/core/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz", - "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==", - "dev": true, - "peer": true, - "dependencies": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0" - } - }, - "node_modules/@resolver-engine/fs/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/imports": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz", - "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==", - "dev": true, - "peer": true, - "dependencies": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0", - "hosted-git-info": "^2.6.0", - "path-browserify": "^1.0.0", - "url": "^0.11.0" - } - }, - "node_modules/@resolver-engine/imports-fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz", - "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==", - "dev": true, - "peer": true, - "dependencies": { - "@resolver-engine/fs": "^0.3.3", - "@resolver-engine/imports": "^0.3.3", - "debug": "^3.1.0" - } - }, - "node_modules/@resolver-engine/imports-fs/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/imports/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@scure/bip32": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", - "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.1.1", - "@noble/secp256k1": "~1.6.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/@scure/bip39": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", - "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.1.1", - "@scure/base": "~1.1.0" - } - }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.24.27", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.27.tgz", - "integrity": "sha512-K7C7IlQ3zLePEZleUN21ceBA2aLcMnLHTLph8QWk1JK37L90obdpY+QGY8bXMKxf1ht1Z0MNewvXxWv0oGDYFg==", - "dev": true - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", - "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", - "dev": true, - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, - "peer": true, - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "node_modules/@typechain/ethers-v5": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz", - "integrity": "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/bytes": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^7.0.0", - "typescript": ">=4.0.0" - } - }, - "node_modules/@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/bignumber.js": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", - "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==", - "deprecated": "This is a stub types definition for bignumber.js (https://github.com/MikeMcl/bignumber.js/). bignumber.js provides its own type definitions, so you don't need @types/bignumber.js installed!", - "dev": true, - "dependencies": { - "bignumber.js": "*" - } - }, - "node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "node_modules/@types/chai": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", - "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", - "dev": true - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", - "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", - "dev": true, - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true, - "peer": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", - "dev": true, - "peer": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", - "dev": true - }, - "node_modules/@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dev": true, - "dependencies": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "node_modules/@types/mkdirp": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", - "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.6.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", - "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==" - }, - "node_modules/@types/node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", - "dev": true, - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/prettier": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz", - "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/sinon": { - "version": "10.0.13", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", - "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", - "dev": true, - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "node_modules/@types/sinon-chai": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", - "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", - "dev": true, - "dependencies": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/underscore": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", - "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", - "dev": true - }, - "node_modules/@types/web3": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", - "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", - "dev": true, - "dependencies": { - "@types/bn.js": "*", - "@types/underscore": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz", - "integrity": "sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.32.0", - "@typescript-eslint/type-utils": "5.32.0", - "@typescript-eslint/utils": "5.32.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.32.0.tgz", - "integrity": "sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.32.0", - "@typescript-eslint/types": "5.32.0", - "@typescript-eslint/typescript-estree": "5.32.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz", - "integrity": "sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.32.0", - "@typescript-eslint/visitor-keys": "5.32.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz", - "integrity": "sha512-0gSsIhFDduBz3QcHJIp3qRCvVYbqzHg8D6bHFsDMrm0rURYDj+skBK2zmYebdCp+4nrd9VWd13egvhYFJj/wZg==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.32.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz", - "integrity": "sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz", - "integrity": "sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.32.0", - "@typescript-eslint/visitor-keys": "5.32.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.32.0.tgz", - "integrity": "sha512-W7lYIAI5Zlc5K082dGR27Fczjb3Q57ECcXefKU/f0ajM5ToM0P+N9NmJWip8GmGu/g6QISNT+K6KYB+iSHjXCQ==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.32.0", - "@typescript-eslint/types": "5.32.0", - "@typescript-eslint/typescript-estree": "5.32.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz", - "integrity": "sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.32.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true, - "peer": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/abortcontroller-polyfill": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", - "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==" - }, - "node_modules/abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "peer": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true - }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true, - "engines": { - "node": ">=0.3.0" - } - }, - "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, - "peer": true - }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "peer": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "dependencies": { - "async": "^2.4.0" - } - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true, - "peer": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true, - "peer": true - }, - "node_modules/babel-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", - "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", - "dev": true, - "dependencies": { - "@jest/transform": "^28.1.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", - "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", - "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^28.1.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "peer": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true, - "peer": true - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true - }, - "node_modules/bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", - "engines": { - "node": "*" - } - }, - "node_modules/bin-links": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", - "integrity": "sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ==", - "dev": true, - "dependencies": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true, - "peer": true - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dev": true, - "peer": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "peer": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "peer": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "peer": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", - "dev": true, - "peer": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "node_modules/bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/byte-size": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", - "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacheable-lookup": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz", - "integrity": "sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "peer": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001374", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz", - "integrity": "sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true, - "peer": true - }, - "node_modules/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 5" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" - } - }, - "node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "peer": true, - "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "node_modules/class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", - "dev": true, - "peer": true - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "peer": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", - "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", - "dev": true, - "dependencies": { - "mkdirp-infer-owner": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "node_modules/columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dev": true, - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/command-line-usage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/command-line-usage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/commander": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", - "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", - "dev": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true - }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/compare-func/node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/compress-brotli": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", - "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json-buffer": "~3.0.0", - "json-buffer": "~3.0.1" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "engines": [ - "node >= 6.0" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", - "dev": true, - "peer": true, - "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", - "dev": true, - "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", - "dev": true, - "dependencies": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", - "dev": true, - "dependencies": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - }, - "bin": { - "conventional-recommended-bump": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true, - "peer": true - }, - "node_modules/core-js-pure": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.1.tgz", - "integrity": "sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "peer": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "peer": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "peer": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deferred-leveldown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true, - "peer": true - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "dev": true, - "peer": true - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "peer": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "peer": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.211", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.211.tgz", - "integrity": "sha512-BZSbMpyFQU0KBJ1JG26XGeFI3i4op+qOYGxftmZXFZoHkhLgsSv4DHDJfl8ogII3hIuzGt51PaZ195OVu0yJ9A==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "dependencies": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "peer": true - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", - "dev": true, - "peer": true, - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "node_modules/eth-ens-namehash/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true, - "peer": true - }, - "node_modules/eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/eth-lib/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - }, - "node_modules/eth-lib/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - }, - "node_modules/eth-lib/node_modules/ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "node_modules/ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "dependencies": { - "js-sha3": "^0.8.0" - } - }, - "node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "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", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/ethereum-waffle": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz", - "integrity": "sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==", - "dev": true, - "peer": true, - "dependencies": { - "@ethereum-waffle/chai": "^3.4.4", - "@ethereum-waffle/compiler": "^3.4.4", - "@ethereum-waffle/mock-contract": "^3.4.4", - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.0.1" - }, - "bin": { - "waffle": "bin/waffle" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ethereumjs-abi/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ethers": { - "version": "5.6.9", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", - "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.6.4", - "@ethersproject/abstract-provider": "5.6.1", - "@ethersproject/abstract-signer": "5.6.2", - "@ethersproject/address": "5.6.1", - "@ethersproject/base64": "5.6.1", - "@ethersproject/basex": "5.6.1", - "@ethersproject/bignumber": "5.6.2", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.1", - "@ethersproject/contracts": "5.6.2", - "@ethersproject/hash": "5.6.1", - "@ethersproject/hdnode": "5.6.2", - "@ethersproject/json-wallets": "5.6.1", - "@ethersproject/keccak256": "5.6.1", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.4", - "@ethersproject/pbkdf2": "5.6.1", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.8", - "@ethersproject/random": "5.6.1", - "@ethersproject/rlp": "5.6.1", - "@ethersproject/sha2": "5.6.1", - "@ethersproject/signing-key": "5.6.2", - "@ethersproject/solidity": "5.6.1", - "@ethersproject/strings": "5.6.1", - "@ethersproject/transactions": "5.6.2", - "@ethersproject/units": "5.6.1", - "@ethersproject/wallet": "5.6.2", - "@ethersproject/web": "5.6.1", - "@ethersproject/wordlists": "5.6.1" - } - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dev": true, - "peer": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "node_modules/express/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "peer": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dependencies": { - "type": "^2.5.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.0.tgz", - "integrity": "sha512-NybX0NBIssNEj1efLf1mqKAtO4Q/Np5mqpa57be81ud7/tNHIXn48FDVXiyGMBF90FfXc5o7RPsuRQrPzgMOMA==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "peer": true - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "peer": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "peer": true, - "dependencies": { - "micromatch": "^4.0.2" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", - "dev": true, - "peer": true - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", - "integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==", - "bundleDependencies": [ - "keccak" - ], - "deprecated": "ganache-core is now ganache; visit https://trfl.io/g7 for details", - "dev": true, - "hasShrinkwrap": true, - "peer": true, - "dependencies": { - "abstract-leveldown": "3.0.0", - "async": "2.6.2", - "bip39": "2.5.0", - "cachedown": "1.0.0", - "clone": "2.1.2", - "debug": "3.2.6", - "encoding-down": "5.0.4", - "eth-sig-util": "3.0.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-account": "3.0.0", - "ethereumjs-block": "2.2.2", - "ethereumjs-common": "1.5.0", - "ethereumjs-tx": "2.1.2", - "ethereumjs-util": "6.2.1", - "ethereumjs-vm": "4.2.0", - "heap": "0.2.6", - "keccak": "3.0.1", - "level-sublevel": "6.6.4", - "levelup": "3.1.1", - "lodash": "4.17.20", - "lru-cache": "5.1.1", - "merkle-patricia-tree": "3.0.0", - "patch-package": "6.2.2", - "seedrandom": "3.0.1", - "source-map-support": "0.5.12", - "tmp": "0.1.0", - "web3-provider-engine": "14.2.1", - "websocket": "1.0.32" - }, - "engines": { - "node": ">=8.9.0" - }, - "optionalDependencies": { - "ethereumjs-wallet": "0.6.5", - "web3": "1.2.11" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/abi": { - "version": "5.0.0-beta.153", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/address": ">=5.0.0-beta.128", - "@ethersproject/bignumber": ">=5.0.0-beta.130", - "@ethersproject/bytes": ">=5.0.0-beta.129", - "@ethersproject/constants": ">=5.0.0-beta.128", - "@ethersproject/hash": ">=5.0.0-beta.128", - "@ethersproject/keccak256": ">=5.0.0-beta.127", - "@ethersproject/logger": ">=5.0.0-beta.129", - "@ethersproject/properties": ">=5.0.0-beta.131", - "@ethersproject/strings": ">=5.0.0-beta.130" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/abstract-provider": { - "version": "5.0.8", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/networks": "^5.0.7", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/transactions": "^5.0.9", - "@ethersproject/web": "^5.0.12" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/abstract-signer": { - "version": "5.0.10", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/abstract-provider": "^5.0.8", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/address": { - "version": "5.0.9", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/rlp": "^5.0.7" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/base64": { - "version": "5.0.7", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/bignumber": { - "version": "5.0.13", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "bn.js": "^4.4.0" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/bytes": { - "version": "5.0.9", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/logger": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/constants": { - "version": "5.0.8", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.0.13" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/hash": { - "version": "5.0.10", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/abstract-signer": "^5.0.10", - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/keccak256": { - "version": "5.0.7", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "js-sha3": "0.5.7" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/logger": { - "version": "5.0.8", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/@ethersproject/networks": { - "version": "5.0.7", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/logger": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/properties": { - "version": "5.0.7", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/logger": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/rlp": { - "version": "5.0.7", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/signing-key": { - "version": "5.0.8", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "elliptic": "6.5.3" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/strings": { - "version": "5.0.8", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/logger": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/transactions": { - "version": "5.0.9", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/rlp": "^5.0.7", - "@ethersproject/signing-key": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/web": { - "version": "5.0.12", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/base64": "^5.0.7", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@sindresorhus/is": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/@types/bn.js": { - "version": "4.11.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ganache-core/node_modules/@types/node": { - "version": "14.14.20", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/@types/pbkdf2": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ganache-core/node_modules/@types/secp256k1": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ganache-core/node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "license": "BSD-2-Clause", - "peer": true - }, - "node_modules/ganache-core/node_modules/abstract-leveldown": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/accepts": { - "version": "1.3.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/aes-js": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "peer": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ganache-core/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/arr-diff": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/arr-flatten": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/arr-union": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/array-flatten": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/array-unique": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/asn1": { - "version": "0.2.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/ganache-core/node_modules/asn1.js": { - "version": "5.4.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ganache-core/node_modules/assert-plus": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ganache-core/node_modules/assign-symbols": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/async": { - "version": "2.6.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "lodash": "^4.17.11" - } - }, - "node_modules/ganache-core/node_modules/async-eventemitter": { - "version": "0.2.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "async": "^2.4.0" - } - }, - "node_modules/ganache-core/node_modules/async-limiter": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/atob": { - "version": "2.1.2", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "peer": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/ganache-core/node_modules/aws-sign2": { - "version": "0.7.0", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/aws4": { - "version": "1.11.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-code-frame": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/strip-ansi": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ganache-core/node_modules/babel-core": { - "version": "6.26.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/json5": { - "version": "0.5.1", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/slash": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-generator": { - "version": "6.26.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/babel-generator/node_modules/jsesc": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-call-delegate": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-define-map": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-function-name": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-get-function-arity": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-hoist-variables": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-optimise-call-expression": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-regex": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-replace-supers": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helpers": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-messages": { - "version": "6.23.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-regenerator": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "regenerator-transform": "^0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-preset-env": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - } - }, - "node_modules/ganache-core/node_modules/babel-preset-env/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/babel-register": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - } - }, - "node_modules/ganache-core/node_modules/babel-register/node_modules/source-map-support": { - "version": "0.4.18", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/ganache-core/node_modules/babel-runtime": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/ganache-core/node_modules/babel-template": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "node_modules/ganache-core/node_modules/babel-traverse": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "node_modules/ganache-core/node_modules/babel-traverse/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/babel-traverse/node_modules/globals": { - "version": "9.18.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-traverse/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-types": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "node_modules/ganache-core/node_modules/babel-types/node_modules/to-fast-properties": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babelify": { - "version": "7.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-core": "^6.0.14", - "object-assign": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/babylon": { - "version": "6.18.0", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "babylon": "bin/babylon.js" - } - }, - "node_modules/ganache-core/node_modules/backoff": { - "version": "2.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "precond": "0.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/balanced-match": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/base": { - "version": "0.11.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/base-x": { - "version": "3.0.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ganache-core/node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/base64-js": { - "version": "1.5.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/ganache-core/node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "dev": true, - "license": "Unlicense", - "peer": true - }, - "node_modules/ganache-core/node_modules/bignumber.js": { - "version": "9.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/bip39": { - "version": "2.5.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" - } - }, - "node_modules/ganache-core/node_modules/blakejs": { - "version": "1.1.0", - "dev": true, - "license": "CC0-1.0", - "peer": true - }, - "node_modules/ganache-core/node_modules/bluebird": { - "version": "3.7.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/bn.js": { - "version": "4.11.9", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/body-parser": { - "version": "1.19.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ganache-core/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/ganache-core/node_modules/brorand": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/browserify-aes": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ganache-core/node_modules/browserify-cipher": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/browserify-des": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/ganache-core/node_modules/browserify-rsa": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/ganache-core/node_modules/browserify-rsa/node_modules/bn.js": { - "version": "5.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/browserify-sign": { - "version": "4.2.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/ganache-core/node_modules/browserify-sign/node_modules/bn.js": { - "version": "5.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ganache-core/node_modules/browserslist": { - "version": "3.2.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - }, - "bin": { - "browserslist": "cli.js" - } - }, - "node_modules/ganache-core/node_modules/bs58": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/ganache-core/node_modules/bs58check": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/ganache-core/node_modules/buffer": { - "version": "5.7.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/ganache-core/node_modules/buffer-from": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/buffer-xor": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/bufferutil": { - "version": "4.0.3", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "dependencies": { - "node-gyp-build": "^4.2.0" - } - }, - "node_modules/ganache-core/node_modules/bytes": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/bytewise": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" - } - }, - "node_modules/ganache-core/node_modules/bytewise-core": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "typewise-core": "^1.2" - } - }, - "node_modules/ganache-core/node_modules/cache-base": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/cacheable-request": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache-core/node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache-core/node_modules/cachedown": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "^2.4.1", - "lru-cache": "^3.2.0" - } - }, - "node_modules/ganache-core/node_modules/cachedown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/cachedown/node_modules/lru-cache": { - "version": "3.2.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "pseudomap": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/caniuse-lite": { - "version": "1.0.30001174", - "dev": true, - "license": "CC-BY-4.0", - "peer": true - }, - "node_modules/ganache-core/node_modules/caseless": { - "version": "0.12.0", - "dev": true, - "license": "Apache-2.0", - "peer": true - }, - "node_modules/ganache-core/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/checkpoint-store": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "functional-red-black-tree": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/chownr": { - "version": "1.1.4", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ci-info": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/cids": { - "version": "0.7.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" - } - }, - "node_modules/ganache-core/node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/cipher-base": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ganache-core/node_modules/class-is": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/class-utils": { - "version": "0.3.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/clone": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ganache-core/node_modules/clone-response": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/collection-visit": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ganache-core/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/combined-stream": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/component-emitter": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/concat-stream": { - "version": "1.6.2", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/ganache-core/node_modules/content-disposition": { - "version": "0.5.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/content-hash": { - "version": "2.5.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "node_modules/ganache-core/node_modules/content-type": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/convert-source-map": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/ganache-core/node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/cookie": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/cookie-signature": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/cookiejar": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/copy-descriptor": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/core-js": { - "version": "2.6.12", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/core-js-pure": { - "version": "3.8.2", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/ganache-core/node_modules/core-util-is": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/cors": { - "version": "2.8.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ganache-core/node_modules/create-ecdh": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/ganache-core/node_modules/create-hash": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/ganache-core/node_modules/create-hmac": { - "version": "1.1.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/ganache-core/node_modules/cross-fetch": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - } - }, - "node_modules/ganache-core/node_modules/crypto-browserify": { - "version": "3.12.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/d": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/dashdash": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/ganache-core/node_modules/debug": { - "version": "3.2.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/ganache-core/node_modules/decode-uri-component": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/ganache-core/node_modules/decompress-response": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/deep-equal": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/defer-to-connect": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/deferred-leveldown": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~5.0.0", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/deferred-leveldown/node_modules/abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/define-properties": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache-core/node_modules/define-property": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/defined": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/delayed-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ganache-core/node_modules/depd": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/des.js": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/destroy": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/detect-indent": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/diffie-hellman": { - "version": "5.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/ganache-core/node_modules/dom-walk": { - "version": "0.1.2", - "dev": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/dotignore": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minimatch": "^3.0.4" - }, - "bin": { - "ignored": "bin/ignored" - } - }, - "node_modules/ganache-core/node_modules/duplexer3": { - "version": "0.1.4", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ecc-jsbn": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ganache-core/node_modules/ee-first": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/electron-to-chromium": { - "version": "1.3.636", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/elliptic": { - "version": "6.5.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/encodeurl": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/encoding": { - "version": "0.1.13", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/ganache-core/node_modules/encoding-down": { - "version": "5.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "^5.0.0", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/encoding-down/node_modules/abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/end-of-stream": { - "version": "1.4.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/ganache-core/node_modules/errno": { - "version": "0.1.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/ganache-core/node_modules/es-abstract": { - "version": "1.18.0-next.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/es5-ext": { - "version": "0.10.53", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/ganache-core/node_modules/es6-iterator": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/ganache-core/node_modules/es6-symbol": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/ganache-core/node_modules/escape-html": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ganache-core/node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/etag": { - "version": "1.8.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/eth-block-tracker": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "eth-query": "^2.1.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.3", - "ethjs-util": "^0.1.3", - "json-rpc-engine": "^3.6.0", - "pify": "^2.3.0", - "tape": "^4.6.3" - } - }, - "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/pify": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/eth-ens-namehash": { - "version": "2.0.8", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-infura": { - "version": "3.2.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "cross-fetch": "^2.1.1", - "eth-json-rpc-middleware": "^1.5.0", - "json-rpc-engine": "^3.4.0", - "json-rpc-error": "^2.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware": { - "version": "1.6.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "async": "^2.5.0", - "eth-query": "^2.1.2", - "eth-tx-summary": "^3.1.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.1.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^3.6.0", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "tape": "^4.6.3" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block/node_modules/ethereum-common": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-errors": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/levelup": { - "version": "1.3.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/memdown": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-lib": { - "version": "0.1.29", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/ganache-core/node_modules/eth-query": { - "version": "2.1.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "node_modules/ganache-core/node_modules/eth-sig-util": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "buffer": "^5.2.1", - "elliptic": "^6.4.0", - "ethereumjs-abi": "0.6.5", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.0", - "tweetnacl-util": "^0.15.0" - } - }, - "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-abi": { - "version": "0.6.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^4.3.0" - } - }, - "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "4.5.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.8.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary": { - "version": "3.2.4", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "async": "^2.1.2", - "clone": "^2.0.0", - "concat-stream": "^1.5.1", - "end-of-stream": "^1.1.0", - "eth-query": "^2.0.2", - "ethereumjs-block": "^1.4.1", - "ethereumjs-tx": "^1.1.1", - "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "^2.6.0", - "through2": "^2.0.3" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-block/node_modules/ethereum-common": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-errors": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/levelup": { - "version": "1.3.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/memdown": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethashjs": { - "version": "0.0.8", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.1.2", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.0.2", - "miller-rabin": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethashjs/node_modules/bn.js": { - "version": "5.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethashjs/node_modules/buffer-xor": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethashjs/node_modules/ethereumjs-util": { - "version": "7.0.7", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereum-bloom-filters": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "js-sha3": "^0.8.0" - } - }, - "node_modules/ganache-core/node_modules/ethereum-bloom-filters/node_modules/js-sha3": { - "version": "0.8.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereum-common": { - "version": "0.0.18", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-abi": { - "version": "0.6.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-account": { - "version": "3.0.0", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-util": "^6.0.0", - "rlp": "^2.2.1", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-errors": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/levelup": { - "version": "1.3.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/memdown": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-blockchain": { - "version": "4.0.4", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.6.1", - "ethashjs": "~0.0.7", - "ethereumjs-block": "~2.2.2", - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.1.0", - "flow-stoplight": "^1.0.0", - "level-mem": "^3.0.1", - "lru-cache": "^5.1.1", - "rlp": "^2.2.2", - "semaphore": "^1.1.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-common": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm": { - "version": "4.2.0", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "core-js-pure": "^3.0.1", - "ethereumjs-account": "^3.0.0", - "ethereumjs-block": "^2.2.2", - "ethereumjs-blockchain": "^4.0.3", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.2", - "ethereumjs-util": "^6.2.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1", - "util.promisify": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-errors": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/levelup": { - "version": "1.3.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/memdown": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-wallet": { - "version": "0.6.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "aes-js": "^3.1.1", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^6.0.0", - "randombytes": "^2.0.6", - "safe-buffer": "^5.1.2", - "scryptsy": "^1.2.1", - "utf8": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "node_modules/ganache-core/node_modules/ethjs-unit": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ganache-core/node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ethjs-util": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ganache-core/node_modules/eventemitter3": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/events": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/ganache-core/node_modules/evp_bytestokey": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/express": { - "version": "4.17.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/ganache-core/node_modules/express/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/express/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/express/node_modules/qs": { - "version": "6.7.0", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ganache-core/node_modules/express/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ext": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "type": "^2.0.0" - } - }, - "node_modules/ganache-core/node_modules/ext/node_modules/type": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/extend": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/extend-shallow": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/extglob": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/extsprintf": { - "version": "1.3.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/fake-merkle-patricia-tree": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "checkpoint-store": "^1.1.0" - } - }, - "node_modules/ganache-core/node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/fetch-ponyfill": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "node-fetch": "~1.7.1" - } - }, - "node_modules/ganache-core/node_modules/fetch-ponyfill/node_modules/is-stream": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/fetch-ponyfill/node_modules/node-fetch": { - "version": "1.7.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/finalhandler": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root": { - "version": "1.2.1", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "fs-extra": "^4.0.3", - "micromatch": "^3.1.4" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/braces": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fill-range": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fs-extra": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-number": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/micromatch": { - "version": "3.1.10", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/to-regex-range": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/flow-stoplight": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/for-each": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/ganache-core/node_modules/for-in": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/forever-agent": { - "version": "0.6.1", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/form-data": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/ganache-core/node_modules/forwarded": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/fragment-cache": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/fresh": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/fs-extra": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/ganache-core/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/get-intrinsic": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ganache-core/node_modules/get-value": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/getpass": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/glob": { - "version": "7.1.3", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/global": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/ganache-core/node_modules/got": { - "version": "9.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/ganache-core/node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/graceful-fs": { - "version": "4.2.4", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/har-schema": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/har-validator": { - "version": "5.1.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/ganache-core/node_modules/has-ansi": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/has-symbol-support-x": { - "version": "1.4.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/has-symbols": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/has-value": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/has-values": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/has-values/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/hash-base": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ganache-core/node_modules/hash.js": { - "version": "1.1.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/heap": { - "version": "0.2.6", - "dev": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/hmac-drbg": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/home-or-tmp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/http-cache-semantics": { - "version": "4.1.0", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/http-errors": { - "version": "1.7.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/http-https": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/http-signature": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/ganache-core/node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/idna-uts46-hx": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "punycode": "2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ganache-core/node_modules/idna-uts46-hx/node_modules/punycode": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/ganache-core/node_modules/immediate": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/ganache-core/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/invariant": { - "version": "2.2.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/ipaddr.js": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ganache-core/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-arguments": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-callable": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-ci": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/ganache-core/node_modules/is-data-descriptor": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-date-object": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-descriptor": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-extendable": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-finite": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ganache-core/node_modules/is-fn": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-function": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/is-hex-prefixed": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ganache-core/node_modules/is-negative-zero": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-object": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-plain-obj": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-plain-object": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-regex": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-retry-allowed": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-symbol": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/is-windows": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/isobject": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/isstream": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/isurl": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ganache-core/node_modules/js-sha3": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/jsbn": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/json-buffer": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/json-rpc-engine": { - "version": "3.8.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "babel-preset-env": "^1.7.0", - "babelify": "^7.3.0", - "json-rpc-error": "^2.0.0", - "promise-to-callback": "^1.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/json-rpc-error": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1" - } - }, - "node_modules/ganache-core/node_modules/json-rpc-random-id": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/json-schema": { - "version": "0.2.3", - "dev": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/json-stable-stringify": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/ganache-core/node_modules/json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/ganache-core/node_modules/jsonify": { - "version": "0.0.0", - "dev": true, - "license": "Public Domain", - "peer": true - }, - "node_modules/ganache-core/node_modules/jsprim": { - "version": "1.4.1", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/ganache-core/node_modules/keccak": { - "version": "3.0.1", - "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "peer": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache-core/node_modules/keyv": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/ganache-core/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/klaw-sync": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, - "node_modules/ganache-core/node_modules/level-codec": { - "version": "9.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/level-errors": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/level-iterator-stream": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.5", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/level-mem": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "level-packager": "~4.0.0", - "memdown": "~3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/memdown": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~5.0.0", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/level-packager": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "encoding-down": "~5.0.0", - "levelup": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/level-post": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ltgt": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/level-sublevel": { - "version": "6.6.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bytewise": "~1.1.0", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "level-iterator-stream": "^2.0.3", - "ltgt": "~2.1.1", - "pull-defer": "^0.2.2", - "pull-level": "^2.0.3", - "pull-stream": "^3.6.8", - "typewiselite": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/level-ws": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.8", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/levelup": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deferred-leveldown": "~4.0.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~3.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/levelup/node_modules/level-iterator-stream": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/lodash": { - "version": "4.17.20", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/looper": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/loose-envify": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/ganache-core/node_modules/lowercase-keys": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/ganache-core/node_modules/ltgt": { - "version": "2.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/map-cache": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/map-visit": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/md5.js": { - "version": "1.3.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/ganache-core/node_modules/media-typer": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/merge-descriptors": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree": { - "version": "3.0.0", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.6.1", - "ethereumjs-util": "^5.2.0", - "level-mem": "^3.0.1", - "level-ws": "^1.0.0", - "readable-stream": "^3.0.6", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ganache-core/node_modules/methods": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/miller-rabin": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/ganache-core/node_modules/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/mime-db": { - "version": "1.45.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/mime-types": { - "version": "2.1.28", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "mime-db": "1.45.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/mimic-response": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/min-document": { - "version": "2.19.0", - "dev": true, - "peer": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/ganache-core/node_modules/minimalistic-assert": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/minimatch": { - "version": "3.0.4", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/minimist": { - "version": "1.2.5", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/minizlib": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/ganache-core/node_modules/minizlib/node_modules/minipass": { - "version": "2.9.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/ganache-core/node_modules/mixin-deep": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/mkdirp": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ganache-core/node_modules/mkdirp-promise": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "mkdirp": "*" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/mock-fs": { - "version": "4.13.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/multibase": { - "version": "0.6.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/ganache-core/node_modules/multicodec": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "varint": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/multihashes": { - "version": "0.4.21", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/multihashes/node_modules/multibase": { - "version": "0.7.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/ganache-core/node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/nanomatch": { - "version": "1.2.13", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/negotiator": { - "version": "0.6.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/next-tick": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/nice-try": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/node-addon-api": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/node-fetch": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/ganache-core/node_modules/node-gyp-build": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "peer": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/ganache-core/node_modules/normalize-url": { - "version": "4.5.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache-core/node_modules/number-to-bn": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ganache-core/node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/oauth-sign": { - "version": "0.9.0", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-inspect": { - "version": "1.9.0", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/object-is": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache-core/node_modules/object-visit": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object.assign": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/object.getownpropertydescriptors": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/object.pick": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/oboe": { - "version": "2.1.4", - "dev": true, - "license": "BSD", - "optional": true, - "peer": true, - "dependencies": { - "http-https": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/on-finished": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/ganache-core/node_modules/os-homedir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/p-cancelable": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/p-timeout": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/p-timeout/node_modules/p-finally": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/parse-asn1": { - "version": "5.1.6", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/parse-headers": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/parseurl": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/pascalcase": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/patch-package": { - "version": "6.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^1.2.1", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "npm": ">5" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/cross-spawn": { - "version": "6.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/path-key": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/shebang-command": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/shebang-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/ganache-core/node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/path-parse": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/path-to-regexp": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/pbkdf2": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/ganache-core/node_modules/performance-now": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/posix-character-classes": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/precond": { - "version": "0.2.3", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/prepend-http": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/private": { - "version": "0.1.8", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/process": { - "version": "0.11.10", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/ganache-core/node_modules/process-nextick-args": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/promise-to-callback": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/proxy-addr": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ganache-core/node_modules/prr": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/pseudomap": { - "version": "1.0.2", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/psl": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/public-encrypt": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/ganache-core/node_modules/pull-cat": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/pull-defer": { - "version": "0.2.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/pull-level": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "level-post": "^1.0.7", - "pull-cat": "^1.1.9", - "pull-live": "^1.0.1", - "pull-pushable": "^2.0.0", - "pull-stream": "^3.4.0", - "pull-window": "^2.1.4", - "stream-to-pull-stream": "^1.7.1" - } - }, - "node_modules/ganache-core/node_modules/pull-live": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "pull-cat": "^1.1.9", - "pull-stream": "^3.4.0" - } - }, - "node_modules/ganache-core/node_modules/pull-pushable": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/pull-stream": { - "version": "3.6.14", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/pull-window": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "looper": "^2.0.0" - } - }, - "node_modules/ganache-core/node_modules/pump": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/ganache-core/node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/qs": { - "version": "6.5.2", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ganache-core/node_modules/query-string": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/ganache-core/node_modules/randomfill": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/ganache-core/node_modules/range-parser": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/raw-body": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/ganache-core/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/regenerate": { - "version": "1.4.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/regenerator-runtime": { - "version": "0.11.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/regenerator-transform": { - "version": "0.10.1", - "dev": true, - "license": "BSD", - "peer": true, - "dependencies": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "node_modules/ganache-core/node_modules/regex-not": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/regexp.prototype.flags": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/regexp.prototype.flags/node_modules/es-abstract": { - "version": "1.17.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/regexpu-core": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "node_modules/ganache-core/node_modules/regjsgen": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/regjsparser": { - "version": "0.1.5", - "dev": true, - "license": "BSD", - "peer": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/ganache-core/node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "dev": true, - "peer": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/ganache-core/node_modules/repeat-element": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/repeat-string": { - "version": "1.6.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/ganache-core/node_modules/repeating": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/request": { - "version": "2.88.2", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ganache-core/node_modules/resolve-url": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/responselike": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/resumer": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "through": "~2.3.4" - } - }, - "node_modules/ganache-core/node_modules/ret": { - "version": "0.1.15", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/ganache-core/node_modules/rimraf": { - "version": "2.6.3", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ganache-core/node_modules/ripemd160": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/ganache-core/node_modules/rlp": { - "version": "2.2.6", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.1" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/ganache-core/node_modules/rustbn.js": { - "version": "0.2.0", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "peer": true - }, - "node_modules/ganache-core/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/safe-event-emitter": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "events": "^3.0.0" - } - }, - "node_modules/ganache-core/node_modules/safe-regex": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/ganache-core/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/scrypt-js": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/scryptsy": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "pbkdf2": "^3.0.3" - } - }, - "node_modules/ganache-core/node_modules/secp256k1": { - "version": "4.0.2", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "dependencies": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache-core/node_modules/seedrandom": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/semaphore": { - "version": "1.1.0", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ganache-core/node_modules/send": { - "version": "0.17.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ganache-core/node_modules/send/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/send/node_modules/ms": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/serve-static": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ganache-core/node_modules/servify": { - "version": "0.1.12", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/set-immediate-shim": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/set-value": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/setimmediate": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/setprototypeof": { - "version": "1.1.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/sha.js": { - "version": "2.4.11", - "dev": true, - "license": "(MIT AND BSD-3-Clause)", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/ganache-core/node_modules/simple-concat": { - "version": "1.0.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/simple-get": { - "version": "2.8.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon": { - "version": "0.8.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon-node": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon-util": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon-util/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/source-map-resolve": { - "version": "0.5.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/ganache-core/node_modules/source-map-support": { - "version": "0.5.12", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/ganache-core/node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/source-map-url": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/split-string": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/sshpk": { - "version": "1.16.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "dev": true, - "license": "Unlicense", - "peer": true - }, - "node_modules/ganache-core/node_modules/static-extend": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/statuses": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/stream-to-pull-stream": { - "version": "1.7.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "looper": "^3.0.0", - "pull-stream": "^3.2.3" - } - }, - "node_modules/ganache-core/node_modules/stream-to-pull-stream/node_modules/looper": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/strict-uri-encode": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/ganache-core/node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/string.prototype.trim": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/string.prototype.trimend": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/string.prototype.trimstart": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/strip-hex-prefix": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ganache-core/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/swarm-js": { - "version": "0.1.40", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/get-stream": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/got": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/is-stream": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/p-cancelable": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/prepend-http": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/url-parse-lax": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/tape": { - "version": "4.13.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.5", - "object-inspect": "~1.7.0", - "resolve": "~1.17.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" - }, - "bin": { - "tape": "bin/tape" - } - }, - "node_modules/ganache-core/node_modules/tape/node_modules/glob": { - "version": "7.1.6", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ganache-core/node_modules/tape/node_modules/is-regex": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/tape/node_modules/object-inspect": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/tape/node_modules/resolve": { - "version": "1.17.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/tar": { - "version": "4.4.13", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/ganache-core/node_modules/tar/node_modules/fs-minipass": { - "version": "1.2.7", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/ganache-core/node_modules/tar/node_modules/minipass": { - "version": "2.9.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/ganache-core/node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/through2": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/ganache-core/node_modules/timed-out": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/tmp": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/to-object-path": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/to-object-path/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/to-readable-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/to-regex": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/toidentifier": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ganache-core/node_modules/tough-cookie": { - "version": "2.5.0", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ganache-core/node_modules/trim-right": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/tunnel-agent": { - "version": "0.6.0", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/tweetnacl": { - "version": "1.0.3", - "dev": true, - "license": "Unlicense", - "peer": true - }, - "node_modules/ganache-core/node_modules/tweetnacl-util": { - "version": "0.15.1", - "dev": true, - "license": "Unlicense", - "peer": true - }, - "node_modules/ganache-core/node_modules/type": { - "version": "1.2.0", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/type-is": { - "version": "1.6.18", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/typedarray": { - "version": "0.0.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/typewise": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "typewise-core": "^1.2.0" - } - }, - "node_modules/ganache-core/node_modules/typewise-core": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/typewiselite": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ultron": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/underscore": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/union-value": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/ganache-core/node_modules/unorm": { - "version": "1.6.0", - "dev": true, - "license": "MIT or GPL-2.0", - "peer": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/ganache-core/node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/unset-value": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/ganache-core/node_modules/urix": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/url-parse-lax": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/url-set-query": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/url-to-options": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ganache-core/node_modules/use": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/utf-8-validate": { - "version": "5.0.4", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "dependencies": { - "node-gyp-build": "^4.2.0" - } - }, - "node_modules/ganache-core/node_modules/utf8": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/util.promisify": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/utils-merge": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/ganache-core/node_modules/uuid": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/ganache-core/node_modules/varint": { - "version": "5.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/vary": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/verror": { - "version": "1.10.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/ganache-core/node_modules/web3": { - "version": "1.2.11", - "dev": true, - "hasInstallScript": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "web3-bzz": "1.2.11", - "web3-core": "1.2.11", - "web3-eth": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-shh": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-bzz": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.19.12", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-core": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.5", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-requestmanager": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core-helpers": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core-method": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core-promievent": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core-requestmanager": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-providers-http": "1.2.11", - "web3-providers-ipc": "1.2.11", - "web3-providers-ws": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core-subscriptions": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core/node_modules/@types/node": { - "version": "12.19.12", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-eth": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-accounts": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-eth-ens": "1.2.11", - "web3-eth-iban": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-abi": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/abi": "5.0.0-beta.153", - "underscore": "1.9.1", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-accounts": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-contract": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.5", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-ens": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-iban": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-personal": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.19.12", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-net": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine": { - "version": "14.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^3.0.0", - "eth-json-rpc-infura": "^3.1.0", - "eth-sig-util": "3.0.0", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.2.0", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/eth-sig-util": { - "version": "1.4.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-block/node_modules/ethereum-common": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-errors": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/levelup": { - "version": "1.3.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/memdown": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ws": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-providers-http": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "web3-core-helpers": "1.2.11", - "xhr2-cookies": "1.1.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-providers-ipc": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-providers-ws": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "websocket": "^1.0.31" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-shh": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-net": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-utils": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-utils/node_modules/eth-lib": { - "version": "0.2.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/ganache-core/node_modules/websocket": { - "version": "1.0.32", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ganache-core/node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/whatwg-fetch": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/ws": { - "version": "3.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "node_modules/ganache-core/node_modules/ws/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/xhr": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/xhr-request": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/ganache-core/node_modules/xhr-request-promise": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/ganache-core/node_modules/xhr2-cookies": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "cookiejar": "^2.1.1" - } - }, - "node_modules/ganache-core/node_modules/xtend": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/yaeti": { - "version": "0.0.6", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/ganache-core/node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", - "dev": true, - "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "get-pkg-repo": "src/cli.js" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-pkg-repo/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-pkg-repo/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-pkg-repo/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/get-pkg-repo/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/get-pkg-repo/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/get-pkg-repo/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/get-pkg-repo/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/get-pkg-repo/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", - "dev": true, - "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", - "dev": true, - "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", - "dev": true, - "dependencies": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, - "bin": { - "git-semver-tags": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-semver-tags/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/git-up": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-6.0.0.tgz", - "integrity": "sha512-6RUFSNd1c/D0xtGnyWN2sxza2bZtZ/EmI9448n6rCZruFwV/ezeEn2fJP7XnUQGwf0RAtd/mmUCbtH6JPYA2SA==", - "dev": true, - "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^7.0.2" - } - }, - "node_modules/git-url-parse": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-12.0.0.tgz", - "integrity": "sha512-I6LMWsxV87vysX1WfsoglXsXg6GjQRKq7+Dgiseo+h0skmp5Hp2rzmcEIRQot9CPA+uzU7x1x7jZdqvTFGnB+Q==", - "dev": true, - "dependencies": { - "git-up": "^6.0.0" - } - }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", - "dev": true, - "dependencies": { - "ini": "^1.3.2" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "peer": true, - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", - "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", - "dev": true, - "peer": true, - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "peer": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/hardhat": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.10.1.tgz", - "integrity": "sha512-0FN9TyCtn7Lt25SB2ei2G7nA2rZjP+RN6MvFOm+zYwherxLZNo6RbD8nDz88eCbhRapevmXqOiL2nM8INKsjmA==", - "dev": true, - "dependencies": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/blockchain": "^5.5.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/tx": "^3.5.1", - "@ethereumjs/vm": "^5.9.0", - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@sentry/node": "^5.18.1", - "@solidity-parser/parser": "^0.14.2", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^7.1.4", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "lodash": "^4.17.11", - "merkle-patricia-tree": "^4.2.4", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "slash": "^3.0.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "true-case-path": "^2.2.1", - "tsort": "0.0.1", - "undici": "^5.4.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "bin": { - "hardhat": "internal/cli/cli.js" - }, - "engines": { - "node": "^14.0.0 || ^16.0.0 || ^18.0.0" - }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/hardhat/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/hardhat/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/hardhat/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/hardhat/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/hardhat/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/hardhat/node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "node_modules/hardhat/node_modules/ethereum-cryptography": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" - } - }, - "node_modules/hardhat/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/hardhat/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hardhat/node_modules/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/hardhat/node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hardhat/node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hardhat/node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hardhat/node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hardhat/node_modules/mocha/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat/node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/hardhat/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/hardhat/node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/hardhat/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/hardhat/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/hardhat/node_modules/solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, - "dependencies": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solcjs" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/hardhat/node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/hardhat/node_modules/solc/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/hardhat/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/supports-color/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "node_modules/hardhat/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "peer": true, - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/http2-wrapper": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz", - "integrity": "sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ==", - "dev": true, - "peer": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/http2-wrapper/node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "dev": true, - "peer": true, - "dependencies": { - "punycode": "2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, - "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/init-package-json": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz", - "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", - "dev": true, - "dependencies": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/init-package-json/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/init-package-json/node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/init-package-json/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "dependencies": { - "fp-ts": "^1.0.0" - } - }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true, - "peer": true - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, - "dependencies": { - "protocols": "^2.0.1" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true, - "peer": true - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true, - "peer": true - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true, - "peer": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "peer": true, - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/jest-changed-files": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", - "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-circus": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", - "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-cli": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", - "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", - "dev": true, - "dependencies": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", - "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "node_modules/jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", - "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-each": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", - "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", - "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", - "dev": true, - "dependencies": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-mock": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", - "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", - "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", - "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-resolve/node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jest-runner": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", - "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", - "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", - "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", - "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-util/node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "node_modules/jest-validate": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", - "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "leven": "^3.1.0", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true, - "peer": true - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "peer": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true, - "peer": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json-stringify-nice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "peer": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/just-diff": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.0.3.tgz", - "integrity": "sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg==", - "dev": true - }, - "node_modules/just-diff-apply": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.3.1.tgz", - "integrity": "sha512-dgFenZnMsc1xGNqgdtgnh7DK+Oy352CE3VZLbzcbQpsBs9iI2K3M0IRrdgREZ72eItTjbl0suRyvKRdVQa9GbA==", - "dev": true - }, - "node_modules/keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/keyv": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.3.tgz", - "integrity": "sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ==", - "dev": true, - "peer": true, - "dependencies": { - "compress-brotli": "^1.3.8", - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "peer": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lerna": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.3.0.tgz", - "integrity": "sha512-0Y9xJqleVu0ExGmsw2WM/GkVmxOwtA7OLQFS5ERPKJfnsxH9roTX3a7NPaGQRI2E+tSJLJJGgNSf3WYEqinOqA==", - "dev": true, - "dependencies": { - "@lerna/add": "5.3.0", - "@lerna/bootstrap": "5.3.0", - "@lerna/changed": "5.3.0", - "@lerna/clean": "5.3.0", - "@lerna/cli": "5.3.0", - "@lerna/create": "5.3.0", - "@lerna/diff": "5.3.0", - "@lerna/exec": "5.3.0", - "@lerna/import": "5.3.0", - "@lerna/info": "5.3.0", - "@lerna/init": "5.3.0", - "@lerna/link": "5.3.0", - "@lerna/list": "5.3.0", - "@lerna/publish": "5.3.0", - "@lerna/run": "5.3.0", - "@lerna/version": "5.3.0", - "import-local": "^3.0.2", - "npmlog": "^6.0.2", - "nx": ">=14.4.3 < 16" - }, - "bin": { - "lerna": "cli.js" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } - }, - "node_modules/level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dev": true, - "dependencies": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dev": true, - "dependencies": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "dependencies": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libnpmaccess": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.3.tgz", - "integrity": "sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg==", - "dev": true, - "dependencies": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/libnpmaccess/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/libnpmaccess/node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/libnpmaccess/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/libnpmpublish": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.4.tgz", - "integrity": "sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg==", - "dev": true, - "dependencies": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/libnpmpublish/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/libnpmpublish/node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/libnpmpublish/node_modules/normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/libnpmpublish/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/lint-staged": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz", - "integrity": "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==", - "dev": true, - "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.16", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^5.1.1", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.5.0", - "string-argv": "^0.3.1", - "supports-color": "^9.2.2", - "yaml": "^1.10.2" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/supports-color": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", - "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", - "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/load-json-file/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", - "dev": true, - "peer": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "dev": true, - "peer": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/make-fetch-happen": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz", - "integrity": "sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", - "dev": true - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true, - "peer": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "dependencies": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dev": true, - "peer": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", - "dev": true, - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-infer-owner": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-infer-owner/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", - "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", - "dev": true, - "peer": true, - "dependencies": { - "mkdirp": "*" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "dependencies": { - "obliterator": "^2.0.0" - } - }, - "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", - "dev": true, - "peer": true - }, - "node_modules/modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "peer": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "peer": true, - "dependencies": { - "varint": "^5.0.0" - } - }, - "node_modules/multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "dev": true, - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } - }, - "node_modules/multihashes/node_modules/multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "peer": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/multimatch/node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", - "dev": true, - "peer": true - }, - "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "peer": true - }, - "node_modules/nock": { - "version": "13.2.9", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.9.tgz", - "integrity": "sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.21", - "propagate": "^2.0.0" - }, - "engines": { - "node": ">= 10.13" - } - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-gyp": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz", - "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.22 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "node_modules/npm-package-arg": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", - "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^3.0.6", - "semver": "^7.0.0", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-package-arg/node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, - "node_modules/npm-package-arg/node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-package-arg/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/npm-package-arg/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/npm-packlist": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", - "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", - "dev": true, - "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-packlist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/npm-packlist/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm-packlist/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-pick-manifest": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", - "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", - "dev": true, - "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm-pick-manifest/node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.0.tgz", - "integrity": "sha512-10LJQ/1+VhKrZjIuY9I/+gQTvumqqlgnsCufoXETHAPFTS3+M+Z5CFhZRDHGavmJ6rOye3UvNga88vl8n1r6gg==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm-registry-fetch/node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - }, - "node_modules/nx": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.5.2.tgz", - "integrity": "sha512-I6KWVMR5Ksj/HgderkcmJmyaqHdWblQeFUeVq9to263Wr3QCIRigbvdDI3rq3ZQCBMyhUSOVP9MFXROoRVtJXQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@nrwl/cli": "14.5.2", - "@nrwl/tao": "14.5.2", - "@parcel/watcher": "2.0.4", - "chalk": "4.1.0", - "chokidar": "^3.5.1", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", - "enquirer": "~2.3.6", - "fast-glob": "3.2.7", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^10.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "js-yaml": "4.1.0", - "jsonc-parser": "3.0.0", - "minimatch": "3.0.5", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.3.4", - "string-width": "^4.2.3", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^3.9.0", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.4.0", - "yargs-parser": "21.0.1" - }, - "bin": { - "nx": "bin/nx.js" - }, - "peerDependencies": { - "@swc-node/register": "^1.4.2", - "@swc/core": "^1.2.173" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/nx/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/nx/node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nx/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/nx/node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nx/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/nx/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/nx/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/nx/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nx/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/nx/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/nx/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "node_modules/nx/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/nx/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/nx/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "node_modules/oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "dependencies": { - "http-https": "^1.0.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "peer": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", - "dev": true, - "dependencies": { - "p-reduce": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pacote": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", - "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", - "dev": true, - "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/pacote/node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/pacote/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pacote/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "peer": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-conflict-json": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", - "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", - "dev": true, - "peer": true - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-5.0.0.tgz", - "integrity": "sha512-qOpH55/+ZJ4jUu/oLO+ifUKjFPNZGfnPJtzvGzKN/4oLMil5m9OH4VpOj6++9/ytJcfks4kzH2hhi87GL/OU9A==", - "dev": true, - "dependencies": { - "protocols": "^2.0.0" - } - }, - "node_modules/parse-url": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-7.0.2.tgz", - "integrity": "sha512-PqO4Z0eCiQ08Wj6QQmrmp5YTTxpYfONdOEamrtvK63AmzXpcavIVQubGHxOEwiIoDZFb8uDOoQFS0NCcjqIYQg==", - "dev": true, - "dependencies": { - "is-ssh": "^1.4.0", - "normalize-url": "^6.1.0", - "parse-path": "^5.0.0", - "protocols": "^2.0.1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/patch-package": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", - "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", - "dev": true, - "peer": true, - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "npm": ">5" - } - }, - "node_modules/patch-package/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/patch-package/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "node_modules/patch-package/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "peer": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/patch-package/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/patch-package/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "peer": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/patch-package/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/patch-package/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/patch-package/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "peer": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/patch-package/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/patch-package/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "peer": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true, - "peer": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true, - "peer": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", - "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "peer": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postinstall-postinstall": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", - "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", - "dev": true, - "hasInstallScript": true, - "peer": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/promise-call-limit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", - "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", - "dev": true, - "dependencies": { - "read": "1" - } - }, - "node_modules/propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true - }, - "node_modules/protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "peer": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true, - "peer": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "peer": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "peer": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "peer": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/read-cmd-shim": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", - "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/read-package-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", - "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", - "dev": true, - "dependencies": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/read-package-json/node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-json/node_modules/normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, - "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "peer": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "peer": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true, - "peer": true - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true, - "peer": true - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "peer": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/responselike/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true - }, - "node_modules/rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", - "dev": true, - "engines": { - "node": ">=4.1" - } - }, - "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "node_modules/send/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "peer": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "peer": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dev": true, - "peer": true, - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true - }, - "node_modules/simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dev": true, - "peer": true, - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "peer": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", - "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", - "dev": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/solc": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz", - "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==", - "dev": true, - "peer": true, - "dependencies": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solcjs" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/solc/node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true, - "peer": true - }, - "node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/solc/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/solc/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", - "dev": true, - "dependencies": { - "is-plain-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sort-keys/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "peer": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true, - "peer": true - }, - "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - }, - "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/swarm-js": { - "version": "0.1.40", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", - "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", - "dev": true, - "peer": true, - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - } - }, - "node_modules/swarm-js/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "peer": true - }, - "node_modules/swarm-js/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "peer": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/swarm-js/node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "peer": true, - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/swarm-js/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "peer": true, - "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/swarm-js/node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/swarm-js/node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/swarm-js/node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "peer": true, - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/swarm-js/node_modules/p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", - "dev": true, - "peer": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "dev": true, - "peer": true, - "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-value": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", - "integrity": "sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^1.0.3", - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/test-value/node_modules/array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", - "dev": true, - "peer": true, - "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/test-value/node_modules/typical": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", - "dev": true, - "peer": true - }, - "node_modules/testrpc": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", - "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", - "deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on.", - "dev": true, - "peer": true - }, - "node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "peer": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tr46/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/treeverse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", - "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", - "dev": true - }, - "node_modules/ts-command-line-args": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz", - "integrity": "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" - } - }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/ts-generator": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", - "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", - "dev": true, - "dependencies": { - "@types/mkdirp": "^0.5.2", - "@types/prettier": "^2.1.1", - "@types/resolve": "^0.0.8", - "chalk": "^2.4.1", - "glob": "^7.1.2", - "mkdirp": "^0.5.1", - "prettier": "^2.1.2", - "resolve": "^1.8.1", - "ts-essentials": "^1.0.0" - }, - "bin": { - "ts-generator": "dist/cli/run.js" - } - }, - "node_modules/ts-generator/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-generator/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-generator/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ts-generator/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/ts-generator/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ts-generator/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-generator/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-generator/node_modules/ts-essentials": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", - "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", - "dev": true - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "peer": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typechain": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz", - "integrity": "sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ==", - "dev": true, - "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.1.1", - "fs-extra": "^7.0.0", - "glob": "^7.1.6", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.1.2", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.1.0" - } - }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/uglify-js": { - "version": "3.16.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", - "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true, - "peer": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.8.1.tgz", - "integrity": "sha512-iDRmWX4Zar/4A/t+1LrKQRm102zw2l9Wgat3LtTlTn8ykvMZmAmpq9tjyHEigx18FsY7IfATvyN3xSw9BDz0eA==", - "dev": true, - "engines": { - "node": ">=12.18" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "peer": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "dev": true, - "peer": true, - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", - "dev": true, - "peer": true - }, - "node_modules/url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true, - "peer": true - }, - "node_modules/utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "node_modules/util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true, - "peer": true - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/walk-up-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", - "dev": true - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web3": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.7.5.tgz", - "integrity": "sha512-3jHZTWyXt975AOXgnZKayiSWDLpoSKk9fZtLk1hURQtt7AdSbXPT8AK9ooBCm0Dt3GYaOeNcHGaiHC3gtyqhLg==", - "dev": true, - "hasInstallScript": true, - "peer": true, - "dependencies": { - "web3-bzz": "1.7.5", - "web3-core": "1.7.5", - "web3-eth": "1.7.5", - "web3-eth-personal": "1.7.5", - "web3-net": "1.7.5", - "web3-shh": "1.7.5", - "web3-utils": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.5.tgz", - "integrity": "sha512-Z53sY0YK/losqjJncmL4vP0zZI9r6tiXg6o7R6e1JD2Iy7FH3serQvU+qXmPjqEBzsnhf8wTG+YcBPB3RHpr0Q==", - "dev": true, - "hasInstallScript": true, - "peer": true, - "dependencies": { - "@types/node": "^12.12.6", - "got": "12.1.0", - "swarm-js": "^0.1.40" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true, - "peer": true - }, - "node_modules/web3-core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.5.tgz", - "integrity": "sha512-UgOWXZr1fR/3cUQJKWbfMwRxj1/N7o6RSd/dHqdXBlOD+62EjNZItFmLRg5veq5kp9YfXzrNw9bnDkXfsL+nKQ==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-requestmanager": "1.7.5", - "web3-utils": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-helpers": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.5.tgz", - "integrity": "sha512-lDDjTks6Q6aNUO87RYrY2xub3UWTKr/RIWxpHJODEqkLxZS1dWdyliJ6aIx3031VQwsNT5HE7NvABe/t0p3iDQ==", - "dependencies": { - "web3-eth-iban": "1.7.5", - "web3-utils": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.5.tgz", - "integrity": "sha512-ApTvq1Llzlbxmy0n4L7QaE6NodIsR80VJqk8qN4kLg30SGznt/pNJFebryLI2kpyDmxSgj1TjEWzmHJBp6FhYg==", - "dependencies": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.5", - "web3-core-promievent": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-utils": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.5.tgz", - "integrity": "sha512-uZ1VRErVuhiLtHlyt3oEH/JSvAf6bWPndChHR9PG7i1Zfqm6ZVCeM91ICTPmiL8ddsGQOxASpnJk4vhApcTIww==", - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-core-requestmanager": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.5.tgz", - "integrity": "sha512-3KpfxW/wVH4mgwWEsSJGHKrtRVoijWlDxtUrm17xgtqRNZ2mFolifKnHAUKa0fY48C9CrxmcCiMIi3W4G6WYRw==", - "dependencies": { - "util": "^0.12.0", - "web3-core-helpers": "1.7.5", - "web3-providers-http": "1.7.5", - "web3-providers-ipc": "1.7.5", - "web3-providers-ws": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.5.tgz", - "integrity": "sha512-YK6utQ7Wwjbe4XZOIA8quWGBPi1lFDS1A+jQYwxKKrCvm6BloBNc3FhvrcSYlDhLe/kOy8+2Je8i9amndgT4ww==", - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "node_modules/web3-eth": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.5.tgz", - "integrity": "sha512-BucjvqZyDWYkGlsFX+OnOBub0YutlC1KZiNGibdmvtNX0NQK+8iw1uzAoL9yTTwCSszL7lnkFe8N+HCOl9B4Dw==", - "dev": true, - "peer": true, - "dependencies": { - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-eth-abi": "1.7.5", - "web3-eth-accounts": "1.7.5", - "web3-eth-contract": "1.7.5", - "web3-eth-ens": "1.7.5", - "web3-eth-iban": "1.7.5", - "web3-eth-personal": "1.7.5", - "web3-net": "1.7.5", - "web3-utils": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-abi": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.5.tgz", - "integrity": "sha512-qWHvF7sayxql9BD1yqK9sZRLBQ66eJzGeaU53Y1PRq2iFPrhY6NUWxQ3c3ps0rg+dyObvRbloviWpKXcS4RE/A==", - "dev": true, - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.5.tgz", - "integrity": "sha512-AzMLoTj3RGwKpyp3x3TtHrEeU4VpR99iMOD6NKrWSDumS6QEi0lCo+y7QZhdTlINw3iIA3SFIdvbAOO4NCHSDg==", - "dev": true, - "peer": true, - "dependencies": { - "@ethereumjs/common": "^2.5.0", - "@ethereumjs/tx": "^3.3.2", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.0.10", - "scrypt-js": "^3.0.1", - "uuid": "3.3.2", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-utils": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - }, - "node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "peer": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/web3-eth-contract": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.5.tgz", - "integrity": "sha512-qab7NPJRKRlTs58ozsqK8YIEwWpxIm3vD/okSIKBGkFx5gIHWW+vGmMh5PDSfefLJM9rCd+T+Lc0LYvtME7uqg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-promievent": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-eth-abi": "1.7.5", - "web3-utils": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.5.tgz", - "integrity": "sha512-k1Q0msdRv/wac2egpZBIwG3n/sa/KdrVmVJvFm471gLTL4xfUizV5qJjkDVf+ikf9JyDvWJTs5eWNUUbOFIw/A==", - "dev": true, - "peer": true, - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-promievent": "1.7.5", - "web3-eth-abi": "1.7.5", - "web3-eth-contract": "1.7.5", - "web3-utils": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-iban": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.5.tgz", - "integrity": "sha512-mn2W5t/1IpL8OZvzAabLKT4kvwRnZSJ9K0tctndl9sDNWkfITYQibEEhUaNNA50Q5fJKgVudHI/m0gwIVTyG8Q==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.5.tgz", - "integrity": "sha512-txh2P/eN8I4AOUKFi9++KKddoD0tWfCuu9Y1Kc41jSRbk6smO88Fum0KWNmYFYhSCX2qiknS1DfqsONl3igoKQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-net": "1.7.5", - "web3-utils": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true, - "peer": true - }, - "node_modules/web3-net": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.7.5.tgz", - "integrity": "sha512-xwuCb2YWw49PmW81AJQ/G+Xi2ikRsYyZXSgyPt4LmZuKjiqg/6kSdK8lZvUi3Pi3wM+QDBXbpr73M/WEkW0KvA==", - "dev": true, - "peer": true, - "dependencies": { - "web3-core": "1.7.5", - "web3-core-method": "1.7.5", - "web3-utils": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-http": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.5.tgz", - "integrity": "sha512-vPgr4Kzy0M3CHtoP/Bh7qwK/D9h2fhjpoqctdMWVJseOfeTgfOphCKN0uwV8w2VpZgDPXA8aeTdBx5OjmDdStA==", - "dependencies": { - "abortcontroller-polyfill": "^1.7.3", - "cross-fetch": "^3.1.4", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ipc": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.5.tgz", - "integrity": "sha512-aNHx+RAROzO+apDEzy8Zncj78iqWBadIXtpmFDg7uiTn8i+oO+IcP1Yni7jyzkltsysVJHgHWG4kPx50ANCK3Q==", - "dependencies": { - "oboe": "2.1.5", - "web3-core-helpers": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.5.tgz", - "integrity": "sha512-9uJNVVkIGC8PmM9kNbgPth56HDMSSsxZh3ZEENdwO3LNWemaADiQYUDCsD/dMVkn0xsGLHP5dgAy4Q5msqySLg==", - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.5", - "websocket": "^1.0.32" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-shh": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.5.tgz", - "integrity": "sha512-aCIWJyLMH5H76OybU4ZpUCJ93yNOPATGhJ+KboRPU8QZDzS2CcVhtEzyl27bbvw+rSnVroMLqBgTXBB4mmKI7A==", - "dev": true, - "hasInstallScript": true, - "peer": true, - "dependencies": { - "web3-core": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-net": "1.7.5" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true, - "peer": true - }, - "node_modules/which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", - "dev": true, - "peer": true, - "bin": { - "window-size": "cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/write-json-file": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", - "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", - "dev": true, - "dependencies": { - "detect-indent": "^6.0.0", - "graceful-fs": "^4.1.15", - "is-plain-obj": "^2.0.0", - "make-dir": "^3.0.0", - "sort-keys": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8.3" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/write-json-file/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-json-file/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", - "dev": true, - "dependencies": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-pkg/node_modules/detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/write-pkg/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-pkg/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/write-pkg/node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/write-pkg/node_modules/type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-pkg/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/write-pkg/node_modules/write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "dependencies": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dev": true, - "peer": true, - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dev": true, - "peer": true, - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "dev": true, - "peer": true, - "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "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.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.0.tgz", - "integrity": "sha512-xzm2t63xTV/f7+bGMSRzLhUNk1ajv/tDoaD5OeGyC3cFo2fl7My9Z4hS3q2VdQ7JaLvTxErO8Jp5pRIFGMD/zg==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/core-types": { - "name": "@biconomy-sdk/core-types", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "^1.12.0", - "web3-core": "^1.7.1" - }, - "devDependencies": { - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "prettier": "^2.6.2", - "typescript": "^4.6.3" - } - }, - "packages/core-types/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "packages/ethers-lib": { - "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@biconomy-sdk/core-types": "*", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", - "@openzeppelin/contracts": "^4.6.0" - }, - "devDependencies": { - "@biconomy-sdk/core-types": "*", - "@nomiclabs/hardhat-ethers": "^2.0.5", - "@nomiclabs/hardhat-waffle": "^2.0.3", - "@typechain/ethers-v5": "^9.0.0", - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "ethers": "^5.5.3", - "hardhat": "^2.9.2", - "prettier": "^2.6.2", - "ts-node": "^10.7.0", - "typechain": "^7.0.0", - "typescript": "^4.6.3" - }, - "peerDependencies": { - "ethers": "^5.5.3" - } - }, - "packages/ethers-lib/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "packages/node-client": { - "name": "@biconomy-sdk/node-client", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@biconomy-sdk/core-types": "*", - "@ethersproject/abstract-signer": "^5.6.0", - "@gnosis.pm/safe-core-sdk": "^2.1.0", - "node-fetch": "^2.6.6" - }, - "devDependencies": { - "@biconomy-sdk/core-types": "*", - "@gnosis.pm/safe-core-sdk": "^2.1.0", - "@gnosis.pm/safe-ethers-lib": "^1.1.0", - "@gnosis.pm/safe-web3-lib": "^1.1.0", - "@nomiclabs/hardhat-ethers": "^2.0.5", - "@nomiclabs/hardhat-waffle": "^2.0.3", - "@nomiclabs/hardhat-web3": "^2.0.0", - "@types/chai": "^4.3.0", - "@types/chai-as-promised": "^7.1.5", - "@types/mocha": "^9.1.0", - "@types/node": "^17.0.23", - "@types/node-fetch": "^2.6.2", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "chai": "^4.3.6", - "chai-as-promised": "^7.1.1", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "hardhat": "^2.9.2", - "husky": "^7.0.4", - "lint-staged": "^12.3.7", - "mocha": "^9.2.2", - "prettier": "^2.6.2", - "rimraf": "^3.0.2", - "ts-generator": "^0.1.1", - "ts-node": "^10.7.0", - "typescript": "^4.6.3" - } - }, - "packages/node-client/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "packages/relayer": { - "name": "@biconomy-sdk/relayer", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@biconomy-sdk/core-types": "*", - "@ethersproject/providers": "^5.6.8", - "ethers": "^5.6.9" - }, - "devDependencies": { - "@biconomy-sdk/core-types": "*" - } - }, - "packages/smart-account": { - "name": "@biconomy-sdk/smart-account", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@biconomy-sdk/core-types": "*", - "@biconomy-sdk/ethers-lib": "*", - "@biconomy-sdk/node-client": "*", - "@biconomy-sdk/relayer": "*", - "@biconomy-sdk/transactions": "*", - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@ethersproject/providers": "^5.6.8", - "@gnosis.pm/safe-deployments": "^1.12.0", - "@nomiclabs/hardhat-ethers": "^2.1.0", - "@types/mocha": "^9.1.1", - "web3-core": "^1.7.1" - }, - "devDependencies": { - "@biconomy-sdk/core-types": "*", - "@biconomy-sdk/ethers-lib": "*", - "@biconomy-sdk/node-client": "*", - "@biconomy-sdk/relayer": "*", - "@biconomy-sdk/transactions": "*", - "@nomiclabs/hardhat-ethers": "^2.1.0", - "@types/mocha": "^9.1.1", - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "ethers": "^5.5.3", - "jest-cli": "^28.1.3", - "nock": "^13.2.9", - "prettier": "^2.6.2", - "typescript": "^4.6.3" - } - }, - "packages/smart-account/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "packages/transactions": { - "name": "@biconomy-sdk/transactions", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/constants": "^5.6.1", - "ethers": "^5.6.9" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", - "dev": true - }, - "@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz", - "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", - "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", - "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.11", - "@babel/types": "^7.18.10", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@biconomy-sdk/core-types": { - "version": "file:packages/core-types", - "requires": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "^1.12.0", - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "prettier": "^2.6.2", - "typescript": "^4.6.3", - "web3-core": "^1.7.1" - }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - } - } - }, - "@biconomy-sdk/ethers-lib": { - "version": "file:packages/ethers-lib", - "requires": { - "@biconomy-sdk/core-types": "*", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", - "@nomiclabs/hardhat-ethers": "^2.0.5", - "@nomiclabs/hardhat-waffle": "^2.0.3", - "@openzeppelin/contracts": "^4.6.0", - "@typechain/ethers-v5": "^9.0.0", - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "ethers": "^5.5.3", - "hardhat": "^2.9.2", - "prettier": "^2.6.2", - "ts-node": "^10.7.0", - "typechain": "^7.0.0", - "typescript": "^4.6.3" - }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - } - } - }, - "@biconomy-sdk/node-client": { - "version": "file:packages/node-client", - "requires": { - "@biconomy-sdk/core-types": "*", - "@ethersproject/abstract-signer": "^5.6.0", - "@gnosis.pm/safe-core-sdk": "^2.1.0", - "@gnosis.pm/safe-ethers-lib": "^1.1.0", - "@gnosis.pm/safe-web3-lib": "^1.1.0", - "@nomiclabs/hardhat-ethers": "^2.0.5", - "@nomiclabs/hardhat-waffle": "^2.0.3", - "@nomiclabs/hardhat-web3": "^2.0.0", - "@types/chai": "^4.3.0", - "@types/chai-as-promised": "^7.1.5", - "@types/mocha": "^9.1.0", - "@types/node": "^17.0.23", - "@types/node-fetch": "^2.6.2", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "chai": "^4.3.6", - "chai-as-promised": "^7.1.1", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "hardhat": "^2.9.2", - "husky": "^7.0.4", - "lint-staged": "^12.3.7", - "mocha": "^9.2.2", - "node-fetch": "^2.6.6", - "prettier": "^2.6.2", - "rimraf": "^3.0.2", - "ts-generator": "^0.1.1", - "ts-node": "^10.7.0", - "typescript": "^4.6.3" - }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - } - } - }, - "@biconomy-sdk/relayer": { - "version": "file:packages/relayer", - "requires": { - "@biconomy-sdk/core-types": "*", - "@ethersproject/providers": "^5.6.8", - "ethers": "^5.6.9" - } - }, - "@biconomy-sdk/smart-account": { - "version": "file:packages/smart-account", - "requires": { - "@biconomy-sdk/core-types": "*", - "@biconomy-sdk/ethers-lib": "*", - "@biconomy-sdk/node-client": "*", - "@biconomy-sdk/relayer": "*", - "@biconomy-sdk/transactions": "*", - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@ethersproject/providers": "^5.6.8", - "@gnosis.pm/safe-deployments": "^1.12.0", - "@nomiclabs/hardhat-ethers": "^2.1.0", - "@types/mocha": "^9.1.1", - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "ethers": "^5.5.3", - "jest-cli": "^28.1.3", - "nock": "^13.2.9", - "prettier": "^2.6.2", - "typescript": "^4.6.3", - "web3-core": "^1.7.1" - }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - } - } - }, - "@biconomy-sdk/transactions": { - "version": "file:packages/transactions", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/constants": "^5.6.1", - "ethers": "^5.6.9" - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@ensdomains/ens": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", - "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", - "dev": true, - "peer": true, - "requires": { - "bluebird": "^3.5.2", - "eth-ens-namehash": "^2.0.8", - "solc": "^0.4.20", - "testrpc": "0.0.1", - "web3-utils": "^1.0.0-beta.31" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "peer": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true, - "peer": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "dev": true, - "peer": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "peer": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true, - "peer": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "peer": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "peer": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "peer": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "peer": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "peer": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "peer": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "peer": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", - "dev": true, - "peer": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true - }, - "solc": { - "version": "0.4.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", - "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", - "dev": true, - "peer": true, - "requires": { - "fs-extra": "^0.30.0", - "memorystream": "^0.3.1", - "require-from-string": "^1.1.0", - "semver": "^5.3.0", - "yargs": "^4.7.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "peer": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "peer": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, - "peer": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true, - "peer": true - }, - "yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", - "dev": true, - "peer": true, - "requires": { - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.1", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" - } - }, - "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", - "dev": true, - "peer": true, - "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } - } - } - }, - "@ensdomains/resolver": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", - "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", - "dev": true, - "peer": true - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - } - }, - "@ethereum-waffle/chai": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.4.4.tgz", - "integrity": "sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g==", - "dev": true, - "peer": true, - "requires": { - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.5.2" - } - }, - "@ethereum-waffle/compiler": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz", - "integrity": "sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==", - "dev": true, - "peer": true, - "requires": { - "@resolver-engine/imports": "^0.3.3", - "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^2.0.0", - "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.5.5", - "ethers": "^5.0.1", - "mkdirp": "^0.5.1", - "node-fetch": "^2.6.1", - "solc": "^0.6.3", - "ts-generator": "^0.1.1", - "typechain": "^3.0.0" - }, - "dependencies": { - "@typechain/ethers-v5": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", - "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", - "dev": true, - "peer": true, - "requires": { - "ethers": "^5.0.2" - } - }, - "array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, - "peer": true, - "requires": { - "typical": "^2.6.1" - } - }, - "command-line-args": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", - "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", - "dev": true, - "peer": true, - "requires": { - "array-back": "^2.0.0", - "find-replace": "^1.0.3", - "typical": "^2.6.1" - } - }, - "find-replace": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", - "integrity": "sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==", - "dev": true, - "peer": true, - "requires": { - "array-back": "^1.0.4", - "test-value": "^2.1.0" - }, - "dependencies": { - "array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", - "dev": true, - "peer": true, - "requires": { - "typical": "^2.6.0" - } - } - } - }, - "ts-essentials": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", - "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", - "dev": true, - "peer": true, - "requires": {} - }, - "typechain": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", - "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", - "dev": true, - "peer": true, - "requires": { - "command-line-args": "^4.0.7", - "debug": "^4.1.1", - "fs-extra": "^7.0.0", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "ts-essentials": "^6.0.3", - "ts-generator": "^0.1.1" - } - }, - "typical": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", - "dev": true, - "peer": true - } - } - }, - "@ethereum-waffle/ens": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.4.4.tgz", - "integrity": "sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg==", - "dev": true, - "peer": true, - "requires": { - "@ensdomains/ens": "^0.4.4", - "@ensdomains/resolver": "^0.2.4", - "ethers": "^5.5.2" - } - }, - "@ethereum-waffle/mock-contract": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz", - "integrity": "sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA==", - "dev": true, - "peer": true, - "requires": { - "@ethersproject/abi": "^5.5.0", - "ethers": "^5.5.2" - } - }, - "@ethereum-waffle/provider": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.4.4.tgz", - "integrity": "sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g==", - "dev": true, - "peer": true, - "requires": { - "@ethereum-waffle/ens": "^3.4.4", - "ethers": "^5.5.2", - "ganache-core": "^2.13.2", - "patch-package": "^6.2.2", - "postinstall-postinstall": "^2.1.0" - } - }, - "@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - } - }, - "@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - } - }, - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - } - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/vm": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", - "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.3", - "@ethereumjs/blockchain": "^5.5.3", - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.4", - "rustbn.js": "~0.2.0" - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/basex": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", - "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/hdnode": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", - "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/json-wallets": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", - "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", - "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/sha2": "^5.6.1" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/providers": { - "version": "5.6.8", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", - "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/base64": "^5.6.1", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "@ethersproject/random": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", - "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/sha2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", - "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", - "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/units": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", - "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/wallet": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", - "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/json-wallets": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/wordlists": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", - "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "@gnosis.pm/safe-core-sdk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.3.2.tgz", - "integrity": "sha512-XD50+AU7ahHwX0+YG8jeyqxrqNsEdLfCzAS5+9WkGuXMNm+K4jkJ9yBHN5yKAu5JXeCDYEQkjTSdVilm8ZLpXQ==", - "dev": true, - "requires": { - "@ethersproject/solidity": "^5.6.0", - "@gnosis.pm/safe-core-sdk-types": "^1.3.0", - "@gnosis.pm/safe-deployments": "1.15.0", - "ethereumjs-util": "^7.1.4", - "semver": "^7.3.5", - "web3-utils": "^1.7.1" - } - }, - "@gnosis.pm/safe-core-sdk-types": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.4.0.tgz", - "integrity": "sha512-v+V6wqfFVgBl2sZ8FqCMwL/qFnr6wBCcJ/gllo4OvItYw/dmXlMCkxUrERoILSeHDezLkrWnnzA4tHfkEwYuwg==", - "requires": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "1.15.0", - "web3-core": "^1.7.1" - } - }, - "@gnosis.pm/safe-core-sdk-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.2.1.tgz", - "integrity": "sha512-VPnSLayGR4omwcNHPwzx8/aDyGXrWULKSF+ENeiWbmwgIhwQnB7T2gzhArNeUgt4BxmYft/HFm1MRSqiQnIQJw==", - "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.2.1", - "semver": "^7.3.7", - "web3-utils": "^1.7.1" - } - }, - "@gnosis.pm/safe-deployments": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz", - "integrity": "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==", - "requires": { - "semver": "^7.3.7" - } - }, - "@gnosis.pm/safe-ethers-lib": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.4.0.tgz", - "integrity": "sha512-ImKNocwoJB19g9nEcorLG1FuYQZyK+llcCIShSw0R7f3OHi30gjcQJek/rJv+wKetM66s7Dz26xtb2X9ARN3Gg==", - "dev": true, - "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.4.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.2.1" - } - }, - "@gnosis.pm/safe-web3-lib": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.4.0.tgz", - "integrity": "sha512-EnJ4I9+VCSiktdWqUDfND3KGLINGlV22NlIZIRl8uIOxlIe5pGqpxb8RNgZHLBxoQ6klkQizcNlS4sv846y9ew==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.0", - "@gnosis.pm/safe-core-sdk-types": "^1.4.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.2.1" - } - }, - "@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", - "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - } - } - }, - "@jest/environment": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", - "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3" - } - }, - "@jest/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", - "dev": true, - "requires": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" - } - }, - "@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2" - } - }, - "@jest/fake-timers": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", - "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", - "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "@jest/globals": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", - "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" - } - }, - "@jest/reporters": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", - "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.1" - } - }, - "@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/source-map": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", - "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.13", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", - "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - } - }, - "@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@lerna/add": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.3.0.tgz", - "integrity": "sha512-MxwTO2UBxZwwuquKbBqdYa56YTqg6Lfz1MZsRQxO7F2cb2NN8NEYTcGOli/71Ee/2AoX4R4xIFTh3TnaflQ25A==", - "dev": true, - "requires": { - "@lerna/bootstrap": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "npm-package-arg": "8.1.1", - "p-map": "^4.0.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" - } - }, - "@lerna/bootstrap": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.3.0.tgz", - "integrity": "sha512-iHVjt6YOQKLY0j+ex13a6ZxjIQ1TSSXqbl6z1hVjBFaDyCh7pra/tgj0LohZDVCaouLwRKucceQfTGrb+cfo7A==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/has-npm-version": "5.3.0", - "@lerna/npm-install": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/rimraf-dir": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/symlink-binary": "5.3.0", - "@lerna/symlink-dependencies": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@npmcli/arborist": "5.3.0", - "dedent": "^0.7.0", - "get-port": "^5.1.1", - "multimatch": "^5.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4" - } - }, - "@lerna/changed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.3.0.tgz", - "integrity": "sha512-i6ZfBDBZCpnPaSWTuNGTrnExkHNMC+/cSUuS9njaqe+tXgqE95Ja3cMxWZth9Q1uasjcEBHPU2jG0VKrU37rpA==", - "dev": true, - "requires": { - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/listable": "5.3.0", - "@lerna/output": "5.3.0" - } - }, - "@lerna/check-working-tree": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.3.0.tgz", - "integrity": "sha512-qo6jUGWXKLVL1nU8aEECqwrGRjs9o1l1hXdD2juA4Fvzsam1cFVHJwsmw3hAXGhEPD0oalg/XR62H9rZSCLOvQ==", - "dev": true, - "requires": { - "@lerna/collect-uncommitted": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "@lerna/validation-error": "5.3.0" - } - }, - "@lerna/child-process": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.3.0.tgz", - "integrity": "sha512-4uXPNIptrgQQQVHVVAXBD8F7IqSvZL3Og0G0DHiWKH+dsSyMIUtaIGJt7sifVoL7nzex4AqEiPq/AubpmG5g4Q==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "execa": "^5.0.0", - "strong-log-transformer": "^2.1.0" - } - }, - "@lerna/clean": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.3.0.tgz", - "integrity": "sha512-Jn+Dr7A69dch8m1dLe7l/SDVQVQT2j7zdy2gaZVEmJIgEEaXmEbfJ2t2n06vRXtckI9B85M5mubT1U3Y7KuNuA==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/rimraf-dir": "5.3.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1" - } - }, - "@lerna/cli": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.3.0.tgz", - "integrity": "sha512-P7F3Xs98pXMEGZX+mnFfsd6gU03x8UrwQ3mElvQBICl4Ew9z6rS8NGUd3JOPFzm4/vSTjYTnPyPdWBjj6/f6sw==", - "dev": true, - "requires": { - "@lerna/global-options": "5.3.0", - "dedent": "^0.7.0", - "npmlog": "^6.0.2", - "yargs": "^16.2.0" - }, - "dependencies": { - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "@lerna/collect-uncommitted": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.3.0.tgz", - "integrity": "sha512-Ll/mU9Nes0NQoa0pSv2TR2PTCkIomBGuDWH48OF2sKKu69NuLjrD2L0udS5nJYig9HxFewtm4QTiUdYPxfJXkQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "chalk": "^4.1.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/collect-updates": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.3.0.tgz", - "integrity": "sha512-fzJo/rmdXKWKYt+9IXjtenIZtSr3blMH8GEqoVKpSZ7TJGpxcFNmMe6foa60BgaTnDmmg1y7Qu6JbQJ3Ra5c5w==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "slash": "^3.0.0" - } - }, - "@lerna/command": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.3.0.tgz", - "integrity": "sha512-UNQQ4EGTumqLhOuDPcRA4LpdS9pcTYKSdh/8MdKPeyIRN70vCTwdeTrxqaaKsn3Jo7ycvyUQT5yfrUFmCClfoA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/project": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@lerna/write-log-file": "5.3.0", - "clone-deep": "^4.0.1", - "dedent": "^0.7.0", - "execa": "^5.0.0", - "is-ci": "^2.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/conventional-commits": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.3.0.tgz", - "integrity": "sha512-9uoQ2E1J7pL0fml5PNO7FydnBNeqrNOQa53Ca1Klf5t/x4vIn51ocOZNm/YbRAc/affnrxxp+gR2/SWlN0yKqQ==", - "dev": true, - "requires": { - "@lerna/validation-error": "5.3.0", - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.4", - "conventional-recommended-bump": "^6.1.0", - "fs-extra": "^9.1.0", - "get-stream": "^6.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "semver": "^7.3.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/create": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.3.0.tgz", - "integrity": "sha512-DotTReCc3+Q9rpMA8RKAGemUK7JXT7skbxHvpqpPj7ryNkIv/dNAFC2EHglcpt9Rmyo6YbSP2zk0gfDbdiIcVA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "init-package-json": "^3.0.2", - "npm-package-arg": "8.1.1", - "p-reduce": "^2.1.0", - "pacote": "^13.6.1", - "pify": "^5.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0", - "whatwg-url": "^8.4.0", - "yargs-parser": "20.2.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/create-symlink": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.3.0.tgz", - "integrity": "sha512-xIoC9m4J/u4NV/8ms4P2fiimaYgialqJvNamvMDRmgE1c3BLDSGk2nE4nVI2W5LxjgJdMTiIH9v1QpTUC9Fv+Q==", - "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/describe-ref": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.3.0.tgz", - "integrity": "sha512-R+CtJcOuAF3kJ6GNQnGC3STEi+5OtpNVz2n17sAs/xqJnq79tPdzEhT+pMxB2eSEkQYlSr+cCKMpF0m/mtIPQA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/diff": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.3.0.tgz", - "integrity": "sha512-i6f99dtO90u1QIJEfVtKE831m4gnMHBwY+4D84GY2SJMno8uI7ZyxMRZQh1nAFtvlNozO2MgzLr1OHtNMZOIgQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/validation-error": "5.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/exec": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.3.0.tgz", - "integrity": "sha512-kI/IuF1hbT+pEMZc3v4+w8BLckUIi45ipzOP0bWvXNgSKKuADAU3HLv+ifRXEjob5906C+Zc7K2IVoVS6r1TDg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/profiler": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/validation-error": "5.3.0", - "p-map": "^4.0.0" - } - }, - "@lerna/filter-options": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.3.0.tgz", - "integrity": "sha512-ddgy0oDisTKIhCJ4WY5CeEhTsyrbW+zeBvZ7rVaG0oQXjSSYBried4TXRvgy67fampfHoPX+eQq5l1SYTRFPlw==", - "dev": true, - "requires": { - "@lerna/collect-updates": "5.3.0", - "@lerna/filter-packages": "5.3.0", - "dedent": "^0.7.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/filter-packages": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.3.0.tgz", - "integrity": "sha512-5/2V50sQB2+JNwuCHP/UPm3y8PN2JWVY9CbNLtF3K5bymNsCkQh2KHEL9wlWZ4yfr/2ufpy4XFPaFUHNoUOGnQ==", - "dev": true, - "requires": { - "@lerna/validation-error": "5.3.0", - "multimatch": "^5.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/get-npm-exec-opts": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.3.0.tgz", - "integrity": "sha512-cYBypDo8C7f4MvVvap2nYgtk8MXAADrYU1VdECSJ3Stbe4p2vBGt8bM9xkS2uPfQFMK3YSy3YPkSZcSjVXyoGw==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/get-packed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.3.0.tgz", - "integrity": "sha512-kD12w7Ko5TThuOuPF2HBLyuPsHK3oyyWyzleGBqR4DqxMtbMRgimyTQnr5o58XBOwUPCFsv1EZiqeGk+3HTGEA==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "ssri": "^9.0.1", - "tar": "^6.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/github-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.3.0.tgz", - "integrity": "sha512-UqAclsWDMthmbv3Z8QE1K7D/4e93ytg31mc+nEj+UdU+xJQ0L1ypl8zWAmGNs1sFkQntIiTIB4W5zgHet5mmZw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^19.0.3", - "git-url-parse": "^12.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/gitlab-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.3.0.tgz", - "integrity": "sha512-otwbiaGDgvn5MGF1ypsCO48inMpdcxuiDlbxrKD6glPUwNHiGV+PU8LLCCDKimwjjQhl88ySLpL1oTm4jnZ1Aw==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "npmlog": "^6.0.2", - "whatwg-url": "^8.4.0" - } - }, - "@lerna/global-options": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.3.0.tgz", - "integrity": "sha512-iEoFrDSU+KtfcB+lHW5grjg3VkEqzZNTUnWnE1FCBBwj9tSLOHjgKGtWWjIQtBUJ+qcLBbusap9Stqzr7UPYpQ==", - "dev": true - }, - "@lerna/has-npm-version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.3.0.tgz", - "integrity": "sha512-A/bK8e+QP/VMqZkq1wZbyOzMz/AY92tAVsBOQ5Yw2zqshdMVj99st3YHLOqJf/HTEzQo27GGI/ajmcltHS2l6A==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "semver": "^7.3.4" - } - }, - "@lerna/import": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.3.0.tgz", - "integrity": "sha512-KjVT9oFNSp1JLdrS1LSXjDcLiu2TMSfy6tpmhF9Zxo7oKB21SgWmXVV9rcWDueW2RIxNXDeVUG0NVNj2BRGeEQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "p-map-series": "^2.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/info": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.3.0.tgz", - "integrity": "sha512-pyeZSM/PIpBHCXdHPrbh6sPZlngXUxhTVFb0VaIjQ5Ms585xi15s1UQDO3FvzqdyMyalx0QGzCJbNx5XeoCejg==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/output": "5.3.0", - "envinfo": "^7.7.4" - } - }, - "@lerna/init": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.3.0.tgz", - "integrity": "sha512-y46lzEtgMdEseTJGQQqYZOjqqd7iN+e14vFh/9q5h62V4Y8nlUJRzovVo8JSeaGwKLB0B3dq3BuUn0PNywMhpA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/project": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "write-json-file": "^4.3.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/link": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.3.0.tgz", - "integrity": "sha512-+QBwnGg3S8Zk8M8G5CA4kmGq92rkEMbmWJXaxie3jQayp+GXgSlLs6R4jwSOZlztY6xR3WawMI9sHJ0Vdu+g7w==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/symlink-dependencies": "5.3.0", - "p-map": "^4.0.0", - "slash": "^3.0.0" - } - }, - "@lerna/list": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.3.0.tgz", - "integrity": "sha512-5RJvle3m4l2H0UmKNlwS8h2OIlNGsNTKPC4DYrJYt0+fhgzf5SEV1QKw+fuUqe3F8MziIkSGQB52HsjwPE6AWQ==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/listable": "5.3.0", - "@lerna/output": "5.3.0" - } - }, - "@lerna/listable": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.3.0.tgz", - "integrity": "sha512-RdmeV9mDeuBOgVOlF/KNH/qttyiYwHbeqHiMAw9s9AfMo/Fz3iDZaTGZuruMm84TZSkKxI7m5mjTlC0djsyKog==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.3.0", - "chalk": "^4.1.0", - "columnify": "^1.6.0" - } - }, - "@lerna/log-packed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.3.0.tgz", - "integrity": "sha512-tDuOot3vSOUSP7fNNej8UM0fah5oy8mKXe026grt4J0OP4L3rhSWxhfrDBQ3Ylh2dAjgHzscUf/vpnNC9HnhOQ==", - "dev": true, - "requires": { - "byte-size": "^7.0.0", - "columnify": "^1.6.0", - "has-unicode": "^2.0.1", - "npmlog": "^6.0.2" - } - }, - "@lerna/npm-conf": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.3.0.tgz", - "integrity": "sha512-ejlypb90tvIsKUCb0fcOKt7wcPEjLdVK2zfbNs0M+UlRDLyRVOHUVdelJ15cRDNjQHzhBo2HBUKn5Fmm/2pcmg==", - "dev": true, - "requires": { - "config-chain": "^1.1.12", - "pify": "^5.0.0" - } - }, - "@lerna/npm-dist-tag": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.3.0.tgz", - "integrity": "sha512-OPahPk9QLXQXFgtrWm22NNxajVYKavCyTh8ijMwXTGXXbMJAw+PVjokfrUuEtg7FQi+kfJSrYAcJAxxfQq2eiA==", - "dev": true, - "requires": { - "@lerna/otplease": "5.3.0", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/npm-install": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.3.0.tgz", - "integrity": "sha512-scbWo8nW+P9KfitWG3y7Ep97dOs64ECfz9xfqtjagEXKYBPxG3skvwwljkfNnuxrCNs71JVD+imvcewHzih28g==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/get-npm-exec-opts": "5.3.0", - "fs-extra": "^9.1.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "signal-exit": "^3.0.3", - "write-pkg": "^4.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/npm-publish": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.3.0.tgz", - "integrity": "sha512-n+ocN1Dxrs6AmrSNqZl57cwhP4/VjQXdEI+QYauNnErNjMQW8Wt+tNaTlVAhZ1DnorwAo86o2uzFF/BgdUqh9A==", - "dev": true, - "requires": { - "@lerna/otplease": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "fs-extra": "^9.1.0", - "libnpmpublish": "^6.0.4", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "read-package-json": "^5.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/npm-run-script": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.3.0.tgz", - "integrity": "sha512-2cLR1YdzeMjaMKgDuwHE+iZgVPt+Ttzb3/wFtp7Mw9TlKmNIdbHdrnfl12ABz5knPC+62CCNjB/gznfLndPp2w==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/get-npm-exec-opts": "5.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/otplease": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.3.0.tgz", - "integrity": "sha512-Xpju2VC5TiycmBP/mdp9hRstkH2MLm8/7o2NotVTCJwASWdKphRMqezhh5BX0E9i6VyrjzmTqSYEh9FNZZ9MwQ==", - "dev": true, - "requires": { - "@lerna/prompt": "5.3.0" - } - }, - "@lerna/output": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.3.0.tgz", - "integrity": "sha512-fISmHDu/9PKInFmT5NXsbh8cR6aE6SUXWrteXJ6PBYK30s0f/pVcfswb9VccX0Yea8HmqMQgCHWUWifkZeXiRA==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/pack-directory": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.3.0.tgz", - "integrity": "sha512-dTGMUB6/GjExhmLZ8yeFaRKJuSm6M/IsfxSJdL4gFPLigUIAS4XhzXS3KnL0+Ef1ue1yaTlAE9c/czfkE0pc/w==", - "dev": true, - "requires": { - "@lerna/get-packed": "5.3.0", - "@lerna/package": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/temp-write": "5.3.0", - "npm-packlist": "^5.1.1", - "npmlog": "^6.0.2", - "tar": "^6.1.0" - } - }, - "@lerna/package": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.3.0.tgz", - "integrity": "sha512-hsB03miiaNdvZ/UGzl0sVqxVat5x33EG9JiYgIoFqzroQPrG+WShmX3ctuO06TY1pxb4iNuHLPIbQomHEzzj8w==", - "dev": true, - "requires": { - "load-json-file": "^6.2.0", - "npm-package-arg": "8.1.1", - "write-pkg": "^4.0.0" - } - }, - "@lerna/package-graph": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.3.0.tgz", - "integrity": "sha512-UEHY7l/yknwFvQgo0RifyY+B5QdzuFutLZYSN1BMmyWttOZD9rkM263qnLNGTZ2BUE4dXDwwwOHuhLvi+xDRsA==", - "dev": true, - "requires": { - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/validation-error": "5.3.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "semver": "^7.3.4" - } - }, - "@lerna/prerelease-id-from-version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.3.0.tgz", - "integrity": "sha512-o1wsLns6hFTsmk4iqTRJNWLnFzlBBwgu17hp8T2iU4U7LUlDT2ZSKV3smGAU6GfrwX3MAp4LZ5syxgjFjrUOnw==", - "dev": true, - "requires": { - "semver": "^7.3.4" - } - }, - "@lerna/profiler": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.3.0.tgz", - "integrity": "sha512-LEZYca29EPgZR0q5E+7CJkn25Cw3OxNMQJU/CVn/HGeoWYWOpoDxujrZBl8is2bw06LHXvRbVXEUATLc+ACbqQ==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "upath": "^2.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/project": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.3.0.tgz", - "integrity": "sha512-InhIo9uwT1yod72ai5SKseJSUk8KkqG6COmwp1/45vibbawb7ZLbokpns7n46A0NdGNlmwJolamybYOuyumejw==", - "dev": true, - "requires": { - "@lerna/package": "5.3.0", - "@lerna/validation-error": "5.3.0", - "cosmiconfig": "^7.0.0", - "dedent": "^0.7.0", - "dot-prop": "^6.0.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.2", - "load-json-file": "^6.2.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "resolve-from": "^5.0.0", - "write-json-file": "^4.3.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@lerna/prompt": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.3.0.tgz", - "integrity": "sha512-4bIusBdjpw665CJtFsVsaB55hLHnmKnrcOaRjna6N/MdJDl8Th6X4EM4rrfXTX/uUNR3XcV91lYqcLuLmrpm5w==", - "dev": true, - "requires": { - "inquirer": "^8.2.4", - "npmlog": "^6.0.2" - } - }, - "@lerna/publish": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.3.0.tgz", - "integrity": "sha512-T8T1BQdI+NnlVARKwIXzILknEuiQlZToBsDpuX06M7+45t/pp9Z+u6pVt3rrqwiUPZ/dpoZzYKI31YdNJtGMcQ==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.3.0", - "@lerna/child-process": "5.3.0", - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "@lerna/log-packed": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/npm-dist-tag": "5.3.0", - "@lerna/npm-publish": "5.3.0", - "@lerna/otplease": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/pack-directory": "5.3.0", - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@lerna/version": "5.3.0", - "fs-extra": "^9.1.0", - "libnpmaccess": "^6.0.3", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/pulse-till-done": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.3.0.tgz", - "integrity": "sha512-yNvSuPLT1ZTtD2LMVOmiDhw4+9qkyf6xCpfxiUp4cGEN+qIuazWB5JicKLE49o27DBdaG8Ao4lAlb16x/gNrwQ==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/query-graph": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.3.0.tgz", - "integrity": "sha512-t99lNj97/Vilp5Js1Be7MoyaZ5U0fbOFh0E7lnTfSLvZhTkPMK6xLvAx2M3NQqhwYCQjTFDuf9ozQ3HQtYZAmA==", - "dev": true, - "requires": { - "@lerna/package-graph": "5.3.0" - } - }, - "@lerna/resolve-symlink": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.3.0.tgz", - "integrity": "sha512-zKI7rV5FzzlMBfi6kjDS0ulzcdDTORvdOJ/+CHU5C2h+v+P64Nk2VhZZNCCBDoO/l4GRhgehZOB70GIamO1TSw==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "read-cmd-shim": "^3.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/rimraf-dir": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.3.0.tgz", - "integrity": "sha512-/QJebh0tSY3LjgEyOo+6NH/b7ZNw9IpjqiDtvnLixjtdfkgli1OKOoZTa4KrO0mJoqMRq4yAa98cjpIzyKqCqw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "npmlog": "^6.0.2", - "path-exists": "^4.0.0", - "rimraf": "^3.0.2" - } - }, - "@lerna/run": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.3.0.tgz", - "integrity": "sha512-KwoKTj1w71OmUHONNYhZME+tr5lk9Q4f+3LUr2WtWZRuOAGO5ZCRrcZc+N4Ib7zno89Ub6Ovz51fcjwltLh72w==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/npm-run-script": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/profiler": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/timer": "5.3.0", - "@lerna/validation-error": "5.3.0", - "p-map": "^4.0.0" - } - }, - "@lerna/run-lifecycle": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.3.0.tgz", - "integrity": "sha512-EuBCGwm2PLgkebfyqo3yNkwfSb1EzHeo3lA8t4yld6LXWkgUPBFhc7RwRc6TsQOpjpfFvDSGoI282R01o0jPVQ==", - "dev": true, - "requires": { - "@lerna/npm-conf": "5.3.0", - "@npmcli/run-script": "^4.1.7", - "npmlog": "^6.0.2", - "p-queue": "^6.6.2" - } - }, - "@lerna/run-topologically": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.3.0.tgz", - "integrity": "sha512-WiFF2EiwLjAguKs0lEmcukTL7WhuWFwxNprrGWFxEkBhlGdMFk18n8BaZN8FO26xqzztzuPzSx1re/f/dEEAPg==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.3.0", - "p-queue": "^6.6.2" - } - }, - "@lerna/symlink-binary": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.3.0.tgz", - "integrity": "sha512-dIATASuGS6y512AGjacOoTpkFDPsKlhggjzL3KLdSNmxV3288nUqaFBuA7rTnnMNnBQ7jVuE1JKJupZnzPN0cA==", - "dev": true, - "requires": { - "@lerna/create-symlink": "5.3.0", - "@lerna/package": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/symlink-dependencies": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.3.0.tgz", - "integrity": "sha512-qkq4YT/Bdrb3W22ve+d2Gy3hRTrtT/zBhjKTCukEpYsFJLwSjZ4z5vbv6J15/j6PN1Km9oTRp6vBYmdjAuARQQ==", - "dev": true, - "requires": { - "@lerna/create-symlink": "5.3.0", - "@lerna/resolve-symlink": "5.3.0", - "@lerna/symlink-binary": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/temp-write": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.3.0.tgz", - "integrity": "sha512-AhC5Q+tV0yebEc1P2jsB4apQzztW8dgdLLc1G1Pkt46l5vezRGhZmsj+iUyCsVjpdUSO/UcAq1DbI2Xzhf5arg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "is-stream": "^2.0.0", - "make-dir": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^8.3.2" - } - }, - "@lerna/timer": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.3.0.tgz", - "integrity": "sha512-IeDjj1gJtbUPKl2ebpiml9u4k2kRqYF1Dbs6JuWpeC7lGxAx3JcUmkNH2RQ1BYTxk5xc9FKlgNMrZQwhq2K1Ow==", - "dev": true - }, - "@lerna/validation-error": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.3.0.tgz", - "integrity": "sha512-GVvnTxx+CNFjXCiJahAu2c/pP2R3DhGuQp4CJUyKegnzGaWK0h5PhlwRL7/LbDMPLh2zLobPOVr9kTOjwv76Nw==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.3.0.tgz", - "integrity": "sha512-QOQSAdpeP66oQQ20nNZ4NhJS5NtZZDGyz36kP/4BeqjGK6QgtrEmto4+vmWj49w3VJUIXnrqAKHiPkhFUmJm5Q==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.3.0", - "@lerna/child-process": "5.3.0", - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/conventional-commits": "5.3.0", - "@lerna/github-client": "5.3.0", - "@lerna/gitlab-client": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/temp-write": "5.3.0", - "@lerna/validation-error": "5.3.0", - "chalk": "^4.1.0", - "dedent": "^0.7.0", - "load-json-file": "^6.2.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "p-reduce": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4", - "slash": "^3.0.0", - "write-json-file": "^4.3.0" - } - }, - "@lerna/write-log-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.3.0.tgz", - "integrity": "sha512-cmrNAI5+9auUJSuTVrUzt2nb/KX6htgjdw7gGPMI1Tm6cdBIbs67R6LedZ8yvYOLGsXB2Se93vxv5fTgEHWfCw==", - "dev": true, - "requires": { - "npmlog": "^6.0.2", - "write-file-atomic": "^4.0.1" - } - }, - "@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", - "dev": true - }, - "@noble/secp256k1": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@nomiclabs/hardhat-ethers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.0.tgz", - "integrity": "sha512-vlW90etB3675QWG7tMrHaDoTa7ymMB7irM4DAQ98g8zJoe9YqEggeDnbO6v5b+BLth/ty4vN6Ko/kaqRN1krHw==", - "dev": true, - "requires": {} - }, - "@nomiclabs/hardhat-waffle": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", - "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", - "dev": true, - "requires": { - "@types/sinon-chai": "^3.2.3", - "@types/web3": "1.0.19" - } - }, - "@nomiclabs/hardhat-web3": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz", - "integrity": "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==", - "dev": true, - "requires": { - "@types/bignumber.js": "^5.0.0" - } - }, - "@npmcli/arborist": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz", - "integrity": "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==", - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.0", - "cacache": "^16.0.6", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } - } - }, - "@npmcli/fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.1.tgz", - "integrity": "sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg==", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", - "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/map-workspaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", - "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", - "dev": true, - "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@npmcli/metavuln-calculator": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", - "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", - "dev": true, - "requires": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "@npmcli/name-from-folder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", - "dev": true - }, - "@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", - "dev": true - }, - "@npmcli/package-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", - "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1" - } - }, - "@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.0.tgz", - "integrity": "sha512-e/QgLg7j2wSJp1/7JRl0GC8c7PMX+uYlA/1Tb+IDOLdSM4T7K1VQ9mm9IGU3WRtY5vEIObpqCLb3aCNCug18DA==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - } - }, - "@nrwl/cli": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.2.tgz", - "integrity": "sha512-uriSxM33IpiBpW9kHEW3gw5OjPaQe3jHdWUMOT88TrqTlf449qe01Sys8+H2YgJMIcLTFYX0fP4V1K9jqKKZCg==", - "dev": true, - "requires": { - "nx": "14.5.2" - } - }, - "@nrwl/tao": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.2.tgz", - "integrity": "sha512-SEx3SM7xQiB8mOQ/gCt7lFJKRrkq3rBX6FiV3bl+dQtuKK2zKQbyikY9r+MCZCQNqZAud3HJ2xCyKZBhK8htQg==", - "dev": true, - "requires": { - "nx": "14.5.2" - } - }, - "@octokit/auth-token": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", - "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3" - } - }, - "@octokit/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", - "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", - "dev": true, - "requires": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", - "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", - "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", - "dev": true, - "requires": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", - "dev": true - }, - "@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz", - "integrity": "sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==", - "dev": true, - "requires": { - "@octokit/types": "^6.41.0" - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true, - "requires": {} - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.2.0.tgz", - "integrity": "sha512-PZ+yfkbZAuRUtqu6Y191/V3eM0KBPx+Yq7nh+ONPdpm3EX4pd5UnK2y2XgO/0AtNum5a4aJCDjqsDuUZ2hWRXw==", - "dev": true, - "requires": { - "@octokit/types": "^6.41.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/request": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.0.tgz", - "integrity": "sha512-7IAmHnaezZrgUqtRShMlByJK33MT9ZDnMRgZjnRrRV9a/jzzFwKGz0vxhFU6i7VMLraYcQ1qmcAOin37Kryq+Q==", - "dev": true, - "requires": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", - "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", - "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", - "dev": true, - "requires": { - "@octokit/core": "^4.0.0", - "@octokit/plugin-paginate-rest": "^3.0.0", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0" - } - }, - "@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dev": true, - "requires": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "@openzeppelin/contracts": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.2.tgz", - "integrity": "sha512-4n/JL9izql8303mPqPdubuna/DWEMbmOzWYUWyCPhjhiEr2w3nQrjE7vZz1fBF+wzzP6dZbIcsgqACk53c9FGA==" - }, - "@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", - "dev": true, - "requires": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - }, - "dependencies": { - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - } - } - }, - "@resolver-engine/core": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz", - "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==", - "dev": true, - "peer": true, - "requires": { - "debug": "^3.1.0", - "is-url": "^1.2.4", - "request": "^2.85.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz", - "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==", - "dev": true, - "peer": true, - "requires": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/imports": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz", - "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==", - "dev": true, - "peer": true, - "requires": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0", - "hosted-git-info": "^2.6.0", - "path-browserify": "^1.0.0", - "url": "^0.11.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/imports-fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz", - "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==", - "dev": true, - "peer": true, - "requires": { - "@resolver-engine/fs": "^0.3.3", - "@resolver-engine/imports": "^0.3.3", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "dev": true - }, - "@scure/bip32": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", - "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", - "dev": true, - "requires": { - "@noble/hashes": "~1.1.1", - "@noble/secp256k1": "~1.6.0", - "@scure/base": "~1.1.0" - } - }, - "@scure/bip39": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", - "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", - "dev": true, - "requires": { - "@noble/hashes": "~1.1.1", - "@scure/base": "~1.1.0" - } - }, - "@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "requires": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - } - }, - "@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true - }, - "@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sinclair/typebox": { - "version": "0.24.27", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.27.tgz", - "integrity": "sha512-K7C7IlQ3zLePEZleUN21ceBA2aLcMnLHTLph8QWk1JK37L90obdpY+QGY8bXMKxf1ht1Z0MNewvXxWv0oGDYFg==", - "dev": true - }, - "@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "peer": true - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@solidity-parser/parser": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", - "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", - "dev": true, - "requires": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, - "peer": true, - "requires": { - "defer-to-connect": "^2.0.1" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@typechain/ethers-v5": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz", - "integrity": "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - } - }, - "@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/bignumber.js": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", - "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==", - "dev": true, - "requires": { - "bignumber.js": "*" - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "peer": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "@types/chai": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", - "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", - "dev": true - }, - "@types/chai-as-promised": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", - "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", - "dev": true, - "requires": { - "@types/chai": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true, - "peer": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", - "dev": true, - "peer": true - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", - "dev": true - }, - "@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dev": true, - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/mkdirp": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", - "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true - }, - "@types/node": { - "version": "18.6.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", - "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==" - }, - "@types/node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/prettier": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz", - "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==", - "dev": true - }, - "@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "requires": { - "@types/node": "*" - } - }, - "@types/sinon": { - "version": "10.0.13", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", - "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", - "dev": true, - "requires": { - "@types/sinonjs__fake-timers": "*" - } - }, - "@types/sinon-chai": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", - "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/underscore": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", - "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", - "dev": true - }, - "@types/web3": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", - "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", - "dev": true, - "requires": { - "@types/bn.js": "*", - "@types/underscore": "*" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz", - "integrity": "sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.32.0", - "@typescript-eslint/type-utils": "5.32.0", - "@typescript-eslint/utils": "5.32.0", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.32.0.tgz", - "integrity": "sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.32.0", - "@typescript-eslint/types": "5.32.0", - "@typescript-eslint/typescript-estree": "5.32.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz", - "integrity": "sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.32.0", - "@typescript-eslint/visitor-keys": "5.32.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz", - "integrity": "sha512-0gSsIhFDduBz3QcHJIp3qRCvVYbqzHg8D6bHFsDMrm0rURYDj+skBK2zmYebdCp+4nrd9VWd13egvhYFJj/wZg==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.32.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz", - "integrity": "sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz", - "integrity": "sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.32.0", - "@typescript-eslint/visitor-keys": "5.32.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.32.0.tgz", - "integrity": "sha512-W7lYIAI5Zlc5K082dGR27Fczjb3Q57ECcXefKU/f0ajM5ToM0P+N9NmJWip8GmGu/g6QISNT+K6KYB+iSHjXCQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.32.0", - "@typescript-eslint/types": "5.32.0", - "@typescript-eslint/typescript-estree": "5.32.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz", - "integrity": "sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.32.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true, - "peer": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abortcontroller-polyfill": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", - "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==" - }, - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "peer": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true - }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, - "peer": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "peer": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "peer": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "requires": { - "async": "^2.4.0" - } - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true, - "peer": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "peer": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true, - "peer": true - }, - "babel-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", - "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", - "dev": true, - "requires": { - "@jest/transform": "^28.1.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", - "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", - "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^28.1.3", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "peer": true, - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true, - "peer": true - } - } - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true - }, - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" - }, - "bin-links": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", - "integrity": "sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ==", - "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true, - "peer": true - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dev": true, - "peer": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "peer": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "peer": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "peer": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", - "dev": true, - "peer": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "byte-size": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", - "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", - "dev": true - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "cacheable-lookup": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.0.4.tgz", - "integrity": "sha512-mbcDEZCkv2CZF4G01kr8eBd/5agkt9oCqz75tJMSIsquvRZ2sL6Hi5zGVKi/0OSC9oO1GHfJ2AV0ZIOY9vye0A==", - "dev": true, - "peer": true - }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "peer": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "peer": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "peer": true - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caniuse-lite": { - "version": "1.0.30001374", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz", - "integrity": "sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true, - "peer": true - }, - "chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, - "requires": { - "check-error": "^1.0.2" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "dependencies": { - "multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", - "dev": true, - "peer": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true - }, - "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "peer": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", - "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", - "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true, - "peer": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dev": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "requires": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - } - }, - "command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "requires": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "commander": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", - "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", - "dev": true - }, - "common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - }, - "dependencies": { - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - } - } - }, - "compress-brotli": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", - "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", - "dev": true, - "peer": true, - "requires": { - "@types/json-buffer": "~3.0.0", - "json-buffer": "~3.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", - "dev": true, - "peer": true, - "requires": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "peer": true - }, - "conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", - "dev": true, - "requires": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" - } - }, - "conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true - }, - "conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", - "dev": true, - "requires": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "requires": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", - "dev": true, - "requires": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - } - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true, - "peer": true - }, - "core-js-pure": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.1.tgz", - "integrity": "sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "peer": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "peer": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - } - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "dev": true, - "peer": true - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "peer": true, - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "peer": true - } - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "peer": true - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - } - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "peer": true - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true, - "peer": true - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "dev": true, - "peer": true - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "peer": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "peer": true - }, - "electron-to-chromium": { - "version": "1.4.211", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.211.tgz", - "integrity": "sha512-BZSbMpyFQU0KBJ1JG26XGeFI3i4op+qOYGxftmZXFZoHkhLgsSv4DHDJfl8ogII3hIuzGt51PaZ195OVu0yJ9A==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "peer": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "peer": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "requires": {} - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "peer": true - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", - "dev": true, - "peer": true, - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true, - "peer": true - } - } - }, - "eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "peer": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } - } - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereum-waffle": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz", - "integrity": "sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==", - "dev": true, - "peer": true, - "requires": { - "@ethereum-waffle/chai": "^3.4.4", - "@ethereum-waffle/compiler": "^3.4.4", - "@ethereum-waffle/mock-contract": "^3.4.4", - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.0.1" - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethers": { - "version": "5.6.9", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", - "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", - "requires": { - "@ethersproject/abi": "5.6.4", - "@ethersproject/abstract-provider": "5.6.1", - "@ethersproject/abstract-signer": "5.6.2", - "@ethersproject/address": "5.6.1", - "@ethersproject/base64": "5.6.1", - "@ethersproject/basex": "5.6.1", - "@ethersproject/bignumber": "5.6.2", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.1", - "@ethersproject/contracts": "5.6.2", - "@ethersproject/hash": "5.6.1", - "@ethersproject/hdnode": "5.6.2", - "@ethersproject/json-wallets": "5.6.1", - "@ethersproject/keccak256": "5.6.1", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.4", - "@ethersproject/pbkdf2": "5.6.1", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.8", - "@ethersproject/random": "5.6.1", - "@ethersproject/rlp": "5.6.1", - "@ethersproject/sha2": "5.6.1", - "@ethersproject/signing-key": "5.6.2", - "@ethersproject/solidity": "5.6.1", - "@ethersproject/strings": "5.6.1", - "@ethersproject/transactions": "5.6.2", - "@ethersproject/units": "5.6.1", - "@ethersproject/wallet": "5.6.2", - "@ethersproject/web": "5.6.1", - "@ethersproject/wordlists": "5.6.1" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", - "dev": true, - "requires": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dev": true, - "peer": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "peer": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "peer": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.0.tgz", - "integrity": "sha512-NybX0NBIssNEj1efLf1mqKAtO4Q/Np5mqpa57be81ud7/tNHIXn48FDVXiyGMBF90FfXc5o7RPsuRQrPzgMOMA==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "peer": true - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "peer": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - } - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - } - } - }, - "find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "requires": { - "array-back": "^3.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "peer": true, - "requires": { - "micromatch": "^4.0.2" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "peer": true - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "form-data-encoder": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", - "dev": true, - "peer": true - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "peer": true - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "peer": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "ganache-core": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", - "integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "3.0.0", - "async": "2.6.2", - "bip39": "2.5.0", - "cachedown": "1.0.0", - "clone": "2.1.2", - "debug": "3.2.6", - "encoding-down": "5.0.4", - "eth-sig-util": "3.0.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-account": "3.0.0", - "ethereumjs-block": "2.2.2", - "ethereumjs-common": "1.5.0", - "ethereumjs-tx": "2.1.2", - "ethereumjs-util": "6.2.1", - "ethereumjs-vm": "4.2.0", - "ethereumjs-wallet": "0.6.5", - "heap": "0.2.6", - "keccak": "3.0.1", - "level-sublevel": "6.6.4", - "levelup": "3.1.1", - "lodash": "4.17.20", - "lru-cache": "5.1.1", - "merkle-patricia-tree": "3.0.0", - "patch-package": "6.2.2", - "seedrandom": "3.0.1", - "source-map-support": "0.5.12", - "tmp": "0.1.0", - "web3": "1.2.11", - "web3-provider-engine": "14.2.1", - "websocket": "1.0.32" - }, - "dependencies": { - "@ethersproject/abi": { - "version": "5.0.0-beta.153", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/address": ">=5.0.0-beta.128", - "@ethersproject/bignumber": ">=5.0.0-beta.130", - "@ethersproject/bytes": ">=5.0.0-beta.129", - "@ethersproject/constants": ">=5.0.0-beta.128", - "@ethersproject/hash": ">=5.0.0-beta.128", - "@ethersproject/keccak256": ">=5.0.0-beta.127", - "@ethersproject/logger": ">=5.0.0-beta.129", - "@ethersproject/properties": ">=5.0.0-beta.131", - "@ethersproject/strings": ">=5.0.0-beta.130" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.0.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/networks": "^5.0.7", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/transactions": "^5.0.9", - "@ethersproject/web": "^5.0.12" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.0.10", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/abstract-provider": "^5.0.8", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7" - } - }, - "@ethersproject/address": { - "version": "5.0.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/rlp": "^5.0.7" - } - }, - "@ethersproject/base64": { - "version": "5.0.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bytes": "^5.0.9" - } - }, - "@ethersproject/bignumber": { - "version": "5.0.13", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/constants": { - "version": "5.0.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bignumber": "^5.0.13" - } - }, - "@ethersproject/hash": { - "version": "5.0.10", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/abstract-signer": "^5.0.10", - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.8", - "dev": true, - "optional": true, - "peer": true - }, - "@ethersproject/networks": { - "version": "5.0.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/properties": { - "version": "5.0.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/rlp": { - "version": "5.0.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/signing-key": { - "version": "5.0.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "elliptic": "6.5.3" - } - }, - "@ethersproject/strings": { - "version": "5.0.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/transactions": { - "version": "5.0.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/rlp": "^5.0.7", - "@ethersproject/signing-key": "^5.0.8" - } - }, - "@ethersproject/web": { - "version": "5.0.12", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/base64": "^5.0.7", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "dev": true, - "optional": true, - "peer": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@types/bn.js": { - "version": "4.11.6", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "14.14.20", - "dev": true, - "peer": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.1", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "abstract-leveldown": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "accepts": { - "version": "1.3.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "aes-js": { - "version": "3.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "ajv": { - "version": "6.12.6", - "dev": true, - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "arr-diff": { - "version": "4.0.0", - "dev": true, - "peer": true - }, - "arr-flatten": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "arr-union": { - "version": "3.1.0", - "dev": true, - "peer": true - }, - "array-flatten": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "array-unique": { - "version": "0.3.2", - "dev": true, - "peer": true - }, - "asn1": { - "version": "0.2.4", - "dev": true, - "peer": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "assign-symbols": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "async": { - "version": "2.6.2", - "dev": true, - "peer": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "dev": true, - "peer": true, - "requires": { - "async": "^2.4.0" - } - }, - "async-limiter": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "asynckit": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "atob": { - "version": "2.1.2", - "dev": true, - "peer": true - }, - "aws-sign2": { - "version": "0.7.0", - "dev": true, - "peer": true - }, - "aws4": { - "version": "1.11.0", - "dev": true, - "peer": true - }, - "babel-code-frame": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "dev": true, - "peer": true - }, - "ansi-styles": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "chalk": { - "version": "1.1.3", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "dev": true, - "peer": true - }, - "strip-ansi": { - "version": "3.0.1", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "dev": true, - "peer": true - } - } - }, - "babel-core": { - "version": "6.26.3", - "dev": true, - "peer": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "json5": { - "version": "0.5.1", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "slash": { - "version": "1.0.0", - "dev": true, - "peer": true - } - } - }, - "babel-generator": { - "version": "6.26.1", - "dev": true, - "peer": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "dev": true, - "peer": true - } - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "dev": true, - "peer": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "dev": true, - "peer": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "dev": true, - "peer": true - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "dev": true, - "peer": true, - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "regenerator-transform": "^0.10.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-preset-env": { - "version": "1.7.0", - "dev": true, - "peer": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "dev": true, - "peer": true - } - } - }, - "babel-register": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - }, - "dependencies": { - "source-map-support": { - "version": "0.4.18", - "dev": true, - "peer": true, - "requires": { - "source-map": "^0.5.6" - } - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.0.0", - "dev": true, - "peer": true - } - } - }, - "babel-types": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "dev": true, - "peer": true - } - } - }, - "babelify": { - "version": "7.3.0", - "dev": true, - "peer": true, - "requires": { - "babel-core": "^6.0.14", - "object-assign": "^4.0.0" - } - }, - "babylon": { - "version": "6.18.0", - "dev": true, - "peer": true - }, - "backoff": { - "version": "2.5.0", - "dev": true, - "peer": true, - "requires": { - "precond": "0.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "base": { - "version": "0.11.2", - "dev": true, - "peer": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "base-x": { - "version": "3.0.8", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "dev": true, - "peer": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "dev": true, - "peer": true - } - } - }, - "bignumber.js": { - "version": "9.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "bip39": { - "version": "2.5.0", - "dev": true, - "peer": true, - "requires": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" - } - }, - "blakejs": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "bluebird": { - "version": "3.7.2", - "dev": true, - "optional": true, - "peer": true - }, - "bn.js": { - "version": "4.11.9", - "dev": true, - "peer": true - }, - "body-parser": { - "version": "1.19.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "qs": { - "version": "6.7.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "peer": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "browserify-aes": { - "version": "1.2.0", - "dev": true, - "peer": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3", - "dev": true, - "optional": true, - "peer": true - }, - "readable-stream": { - "version": "3.6.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "browserslist": { - "version": "3.2.8", - "dev": true, - "peer": true, - "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - } - }, - "bs58": { - "version": "4.0.1", - "dev": true, - "peer": true, - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "5.7.1", - "dev": true, - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.1", - "dev": true, - "peer": true - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "dev": true, - "optional": true, - "peer": true - }, - "buffer-xor": { - "version": "1.0.3", - "dev": true, - "peer": true - }, - "bufferutil": { - "version": "4.0.3", - "dev": true, - "peer": true, - "requires": { - "node-gyp-build": "^4.2.0" - } - }, - "bytes": { - "version": "3.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "bytewise": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" - } - }, - "bytewise-core": { - "version": "1.2.3", - "dev": true, - "peer": true, - "requires": { - "typewise-core": "^1.2" - } - }, - "cache-base": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cacheable-request": { - "version": "6.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "cachedown": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "^2.4.1", - "lru-cache": "^3.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "lru-cache": { - "version": "3.2.0", - "dev": true, - "peer": true, - "requires": { - "pseudomap": "^1.0.1" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caniuse-lite": { - "version": "1.0.30001174", - "dev": true, - "peer": true - }, - "caseless": { - "version": "0.12.0", - "dev": true, - "peer": true - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "checkpoint-store": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "functional-red-black-tree": "^1.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "dev": true, - "optional": true, - "peer": true - }, - "ci-info": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "cids": { - "version": "0.7.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "dependencies": { - "multicodec": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-is": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "class-utils": { - "version": "0.3.6", - "dev": true, - "peer": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "dev": true, - "peer": true - } - } - }, - "clone": { - "version": "2.1.2", - "dev": true, - "peer": true - }, - "clone-response": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true, - "peer": true - }, - "combined-stream": { - "version": "1.0.8", - "dev": true, - "peer": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "dev": true, - "peer": true - }, - "concat-map": { - "version": "0.0.1", - "dev": true, - "peer": true - }, - "concat-stream": { - "version": "1.6.2", - "dev": true, - "peer": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "content-disposition": { - "version": "0.5.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "content-hash": { - "version": "2.5.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "content-type": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "convert-source-map": { - "version": "1.7.0", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - } - } - }, - "cookie": { - "version": "0.4.0", - "dev": true, - "optional": true, - "peer": true - }, - "cookie-signature": { - "version": "1.0.6", - "dev": true, - "optional": true, - "peer": true - }, - "cookiejar": { - "version": "2.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "copy-descriptor": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "core-js": { - "version": "2.6.12", - "dev": true, - "peer": true - }, - "core-js-pure": { - "version": "3.8.2", - "dev": true, - "peer": true - }, - "core-util-is": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "cors": { - "version": "2.8.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-ecdh": { - "version": "4.0.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "create-hash": { - "version": "1.2.0", - "dev": true, - "peer": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "dev": true, - "peer": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-fetch": { - "version": "2.2.3", - "dev": true, - "peer": true, - "requires": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "d": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "3.2.6", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "dev": true, - "peer": true - }, - "decompress-response": { - "version": "3.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-equal": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "dev": true, - "optional": true, - "peer": true - }, - "deferred-leveldown": { - "version": "4.0.2", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~5.0.0", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "define-properties": { - "version": "1.1.3", - "dev": true, - "peer": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "defined": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "delayed-stream": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "depd": { - "version": "1.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "des.js": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "detect-indent": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dom-walk": { - "version": "0.1.2", - "dev": true, - "peer": true - }, - "dotignore": { - "version": "0.1.2", - "dev": true, - "peer": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "duplexer3": { - "version": "0.1.4", - "dev": true, - "optional": true, - "peer": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "dev": true, - "peer": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "electron-to-chromium": { - "version": "1.3.636", - "dev": true, - "peer": true - }, - "elliptic": { - "version": "6.5.3", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "encodeurl": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "encoding": { - "version": "0.1.13", - "dev": true, - "peer": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "dev": true, - "peer": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "encoding-down": { - "version": "5.0.4", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "^5.0.0", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "dev": true, - "peer": true, - "requires": { - "once": "^1.4.0" - } - }, - "errno": { - "version": "0.1.8", - "dev": true, - "peer": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.18.0-next.1", - "dev": true, - "peer": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "dev": true, - "peer": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "dev": true, - "peer": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "dev": true, - "peer": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "dev": true, - "peer": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-html": { - "version": "1.0.3", - "dev": true, - "optional": true, - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "peer": true - }, - "esutils": { - "version": "2.0.3", - "dev": true, - "peer": true - }, - "etag": { - "version": "1.8.1", - "dev": true, - "optional": true, - "peer": true - }, - "eth-block-tracker": { - "version": "3.0.1", - "dev": true, - "peer": true, - "requires": { - "eth-query": "^2.1.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.3", - "ethjs-util": "^0.1.3", - "json-rpc-engine": "^3.6.0", - "pify": "^2.3.0", - "tape": "^4.6.3" - }, - "dependencies": { - "ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "peer": true, - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "pify": { - "version": "2.3.0", - "dev": true, - "peer": true - } - } - }, - "eth-ens-namehash": { - "version": "2.0.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "eth-json-rpc-infura": { - "version": "3.2.1", - "dev": true, - "peer": true, - "requires": { - "cross-fetch": "^2.1.1", - "eth-json-rpc-middleware": "^1.5.0", - "json-rpc-engine": "^3.4.0", - "json-rpc-error": "^2.0.0" - } - }, - "eth-json-rpc-middleware": { - "version": "1.6.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.5.0", - "eth-query": "^2.1.2", - "eth-tx-summary": "^3.1.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.1.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^3.6.0", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "tape": "^4.6.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereum-common": { - "version": "0.2.0", - "dev": true, - "peer": true - } - } - }, - "ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "peer": true, - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "isarray": { - "version": "0.0.1", - "dev": true, - "peer": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true, - "peer": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "peer": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "peer": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "peer": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true, - "peer": true - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.4.1", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true, - "peer": true - } - } - }, - "eth-lib": { - "version": "0.1.29", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "eth-query": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "eth-sig-util": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.2.1", - "elliptic": "^6.4.0", - "ethereumjs-abi": "0.6.5", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.0", - "tweetnacl-util": "^0.15.0" - }, - "dependencies": { - "ethereumjs-abi": { - "version": "0.6.5", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^4.3.0" - }, - "dependencies": { - "ethereumjs-util": { - "version": "4.5.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.8.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.0.0" - } - } - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "eth-tx-summary": { - "version": "3.2.4", - "dev": true, - "peer": true, - "requires": { - "async": "^2.1.2", - "clone": "^2.0.0", - "concat-stream": "^1.5.1", - "end-of-stream": "^1.1.0", - "eth-query": "^2.0.2", - "ethereumjs-block": "^1.4.1", - "ethereumjs-tx": "^1.1.1", - "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "^2.6.0", - "through2": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereum-common": { - "version": "0.2.0", - "dev": true, - "peer": true - } - } - }, - "ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "peer": true, - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "isarray": { - "version": "0.0.1", - "dev": true, - "peer": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true, - "peer": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "peer": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "peer": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "peer": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true, - "peer": true - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.4.1", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true, - "peer": true - } - } - }, - "ethashjs": { - "version": "0.0.8", - "dev": true, - "peer": true, - "requires": { - "async": "^2.1.2", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.0.2", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3", - "dev": true, - "peer": true - }, - "buffer-xor": { - "version": "2.0.2", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-util": { - "version": "7.0.7", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.4" - } - } - } - }, - "ethereum-bloom-filters": { - "version": "1.0.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "js-sha3": "^0.8.0" - }, - "dependencies": { - "js-sha3": { - "version": "0.8.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "ethereum-common": { - "version": "0.0.18", - "dev": true, - "peer": true - }, - "ethereum-cryptography": { - "version": "0.1.3", - "dev": true, - "peer": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-account": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-util": "^6.0.0", - "rlp": "^2.2.1", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "isarray": { - "version": "0.0.1", - "dev": true, - "peer": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true, - "peer": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "peer": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "peer": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "peer": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true, - "peer": true - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.4.1", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true, - "peer": true - } - } - }, - "ethereumjs-blockchain": { - "version": "4.0.4", - "dev": true, - "peer": true, - "requires": { - "async": "^2.6.1", - "ethashjs": "~0.0.7", - "ethereumjs-block": "~2.2.2", - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.1.0", - "flow-stoplight": "^1.0.0", - "level-mem": "^3.0.1", - "lru-cache": "^5.1.1", - "rlp": "^2.2.2", - "semaphore": "^1.1.0" - } - }, - "ethereumjs-common": { - "version": "1.5.0", - "dev": true, - "peer": true - }, - "ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "ethereumjs-vm": { - "version": "4.2.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "core-js-pure": "^3.0.1", - "ethereumjs-account": "^3.0.0", - "ethereumjs-block": "^2.2.2", - "ethereumjs-blockchain": "^4.0.3", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.2", - "ethereumjs-util": "^6.2.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1", - "util.promisify": "^1.0.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "isarray": { - "version": "0.0.1", - "dev": true, - "peer": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true, - "peer": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "peer": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "peer": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "peer": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true, - "peer": true - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.4.1", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true, - "peer": true - } - } - }, - "ethereumjs-wallet": { - "version": "0.6.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "aes-js": "^3.1.1", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^6.0.0", - "randombytes": "^2.0.6", - "safe-buffer": "^5.1.2", - "scryptsy": "^1.2.1", - "utf8": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "eventemitter3": { - "version": "4.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "events": { - "version": "3.2.0", - "dev": true, - "peer": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "dev": true, - "peer": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "kind-of": { - "version": "5.1.0", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.0.0", - "dev": true, - "peer": true - } - } - }, - "express": { - "version": "4.17.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "qs": { - "version": "6.7.0", - "dev": true, - "optional": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "ext": { - "version": "1.4.0", - "dev": true, - "peer": true, - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.1.0", - "dev": true, - "peer": true - } - } - }, - "extend": { - "version": "3.0.2", - "dev": true, - "peer": true - }, - "extend-shallow": { - "version": "3.0.2", - "dev": true, - "peer": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "extglob": { - "version": "2.0.4", - "dev": true, - "peer": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "dev": true, - "peer": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "dev": true, - "peer": true - }, - "fake-merkle-patricia-tree": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "checkpoint-store": "^1.1.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "peer": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "peer": true - }, - "fetch-ponyfill": { - "version": "4.1.0", - "dev": true, - "peer": true, - "requires": { - "node-fetch": "~1.7.1" - }, - "dependencies": { - "is-stream": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "node-fetch": { - "version": "1.7.3", - "dev": true, - "peer": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "find-yarn-workspace-root": { - "version": "1.2.1", - "dev": true, - "peer": true, - "requires": { - "fs-extra": "^4.0.3", - "micromatch": "^3.1.4" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "dev": true, - "peer": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fs-extra": { - "version": "4.0.3", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-extendable": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "is-number": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "dev": true, - "peer": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "dev": true, - "peer": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "flow-stoplight": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "for-each": { - "version": "0.3.3", - "dev": true, - "peer": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "forever-agent": { - "version": "0.6.1", - "dev": true, - "peer": true - }, - "form-data": { - "version": "2.3.3", - "dev": true, - "peer": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "fragment-cache": { - "version": "0.2.1", - "dev": true, - "peer": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "dev": true, - "optional": true, - "peer": true - }, - "fs-extra": { - "version": "7.0.1", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true, - "peer": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "get-intrinsic": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "5.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "dev": true, - "peer": true - }, - "getpass": { - "version": "0.1.7", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "dev": true, - "peer": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global": { - "version": "4.4.0", - "dev": true, - "peer": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "got": { - "version": "9.6.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "graceful-fs": { - "version": "4.2.4", - "dev": true, - "peer": true - }, - "har-schema": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "har-validator": { - "version": "5.1.5", - "dev": true, - "peer": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "dev": true, - "peer": true - } - } - }, - "has-flag": { - "version": "3.0.0", - "dev": true, - "peer": true - }, - "has-symbol-support-x": { - "version": "1.4.2", - "dev": true, - "optional": true, - "peer": true - }, - "has-symbols": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "has-value": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-number": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "hash.js": { - "version": "1.1.7", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "heap": { - "version": "0.2.6", - "dev": true, - "peer": true - }, - "hmac-drbg": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "home-or-tmp": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "http-errors": { - "version": "1.7.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "http-https": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "http-signature": { - "version": "1.2.0", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "ieee754": { - "version": "1.2.1", - "dev": true, - "peer": true - }, - "immediate": { - "version": "3.2.3", - "dev": true, - "peer": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "peer": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true, - "peer": true - }, - "invariant": { - "version": "2.2.4", - "dev": true, - "peer": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "1.9.1", - "dev": true, - "optional": true, - "peer": true - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-arguments": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.2", - "dev": true, - "peer": true - }, - "is-ci": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-date-object": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "is-descriptor": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-finite": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "is-fn": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "is-function": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "is-hex-prefixed": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "is-negative-zero": { - "version": "2.0.1", - "dev": true, - "peer": true - }, - "is-object": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "is-plain-obj": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "is-plain-object": { - "version": "2.0.4", - "dev": true, - "peer": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "is-symbol": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "is-windows": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "isarray": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "isexe": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "isobject": { - "version": "3.0.1", - "dev": true, - "peer": true - }, - "isstream": { - "version": "0.1.2", - "dev": true, - "peer": true - }, - "isurl": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "js-sha3": { - "version": "0.5.7", - "dev": true, - "optional": true, - "peer": true - }, - "js-tokens": { - "version": "4.0.0", - "dev": true, - "peer": true - }, - "jsbn": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "json-buffer": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "json-rpc-engine": { - "version": "3.8.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "babel-preset-env": "^1.7.0", - "babelify": "^7.3.0", - "json-rpc-error": "^2.0.0", - "promise-to-callback": "^1.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "json-rpc-error": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1" - } - }, - "json-rpc-random-id": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "json-schema": { - "version": "0.2.3", - "dev": true, - "peer": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "peer": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "peer": true - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "dev": true, - "peer": true - }, - "jsprim": { - "version": "1.4.1", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "keccak": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "keyv": { - "version": "3.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "dev": true, - "peer": true - }, - "klaw-sync": { - "version": "6.0.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.11" - } - }, - "level-codec": { - "version": "9.0.2", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.6.0" - } - }, - "level-errors": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "2.0.3", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.5", - "xtend": "^4.0.0" - } - }, - "level-mem": { - "version": "3.0.1", - "dev": true, - "peer": true, - "requires": { - "level-packager": "~4.0.0", - "memdown": "~3.0.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "memdown": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~5.0.0", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - } - } - }, - "level-packager": { - "version": "4.0.1", - "dev": true, - "peer": true, - "requires": { - "encoding-down": "~5.0.0", - "levelup": "^3.0.0" - } - }, - "level-post": { - "version": "1.0.7", - "dev": true, - "peer": true, - "requires": { - "ltgt": "^2.1.2" - } - }, - "level-sublevel": { - "version": "6.6.4", - "dev": true, - "peer": true, - "requires": { - "bytewise": "~1.1.0", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "level-iterator-stream": "^2.0.3", - "ltgt": "~2.1.1", - "pull-defer": "^0.2.2", - "pull-level": "^2.0.3", - "pull-stream": "^3.6.8", - "typewiselite": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "level-ws": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.8", - "xtend": "^4.0.1" - } - }, - "levelup": { - "version": "3.1.1", - "dev": true, - "peer": true, - "requires": { - "deferred-leveldown": "~4.0.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~3.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "level-iterator-stream": { - "version": "3.0.1", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "xtend": "^4.0.0" - } - } - } - }, - "lodash": { - "version": "4.17.20", - "dev": true, - "peer": true - }, - "looper": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "loose-envify": { - "version": "1.4.0", - "dev": true, - "peer": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "lru-cache": { - "version": "5.1.1", - "dev": true, - "peer": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "ltgt": { - "version": "2.1.3", - "dev": true, - "peer": true - }, - "map-cache": { - "version": "0.2.2", - "dev": true, - "peer": true - }, - "map-visit": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "dev": true, - "peer": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "dev": true, - "optional": true, - "peer": true - }, - "merge-descriptors": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "merkle-patricia-tree": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.6.1", - "ethereumjs-util": "^5.2.0", - "level-mem": "^3.0.1", - "level-ws": "^1.0.0", - "readable-stream": "^3.0.6", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "methods": { - "version": "1.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "miller-rabin": { - "version": "4.0.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "dev": true, - "optional": true, - "peer": true - }, - "mime-db": { - "version": "1.45.0", - "dev": true, - "peer": true - }, - "mime-types": { - "version": "2.1.28", - "dev": true, - "peer": true, - "requires": { - "mime-db": "1.45.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "min-document": { - "version": "2.19.0", - "dev": true, - "peer": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "minimatch": { - "version": "3.0.4", - "dev": true, - "peer": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "dev": true, - "peer": true - }, - "minizlib": { - "version": "1.3.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^2.9.0" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "mixin-deep": { - "version": "1.3.2", - "dev": true, - "peer": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "mkdirp": { - "version": "0.5.5", - "dev": true, - "peer": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mkdirp-promise": { - "version": "5.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mkdirp": "*" - } - }, - "mock-fs": { - "version": "4.13.0", - "dev": true, - "optional": true, - "peer": true - }, - "ms": { - "version": "2.1.3", - "dev": true, - "peer": true - }, - "multibase": { - "version": "0.6.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "multicodec": { - "version": "0.5.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "varint": "^5.0.0" - } - }, - "multihashes": { - "version": "0.4.21", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - }, - "dependencies": { - "multibase": { - "version": "0.7.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - } - } - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "nanomatch": { - "version": "1.2.13", - "dev": true, - "peer": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "negotiator": { - "version": "0.6.2", - "dev": true, - "optional": true, - "peer": true - }, - "next-tick": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "nice-try": { - "version": "1.0.5", - "dev": true, - "peer": true - }, - "node-addon-api": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "peer": true - }, - "node-fetch": { - "version": "2.1.2", - "dev": true, - "peer": true - }, - "node-gyp-build": { - "version": "4.2.3", - "bundled": true, - "dev": true, - "peer": true - }, - "normalize-url": { - "version": "4.5.0", - "dev": true, - "optional": true, - "peer": true - }, - "number-to-bn": { - "version": "1.7.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "dev": true, - "peer": true - }, - "object-assign": { - "version": "4.1.1", - "dev": true, - "peer": true - }, - "object-copy": { - "version": "0.1.0", - "dev": true, - "peer": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "dev": true, - "peer": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.9.0", - "dev": true, - "peer": true - }, - "object-is": { - "version": "1.1.4", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "dev": true, - "peer": true - }, - "object-visit": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.1", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "dev": true, - "peer": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "oboe": { - "version": "2.1.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "http-https": "^1.0.0" - } - }, - "on-finished": { - "version": "2.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "dev": true, - "peer": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "os-tmpdir": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "p-cancelable": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "p-timeout": { - "version": "1.2.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-finally": "^1.0.0" - }, - "dependencies": { - "p-finally": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "parse-asn1": { - "version": "5.1.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-headers": { - "version": "2.0.3", - "dev": true, - "peer": true - }, - "parseurl": { - "version": "1.3.3", - "dev": true, - "optional": true, - "peer": true - }, - "pascalcase": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "patch-package": { - "version": "6.2.2", - "dev": true, - "peer": true, - "requires": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^1.2.1", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "dev": true, - "peer": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.7.1", - "dev": true, - "peer": true - }, - "shebang-command": { - "version": "1.2.0", - "dev": true, - "peer": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "slash": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "tmp": { - "version": "0.0.33", - "dev": true, - "peer": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "which": { - "version": "1.3.1", - "dev": true, - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "path-parse": { - "version": "1.0.6", - "dev": true, - "peer": true - }, - "path-to-regexp": { - "version": "0.1.7", - "dev": true, - "optional": true, - "peer": true - }, - "pbkdf2": { - "version": "3.1.1", - "dev": true, - "peer": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "dev": true, - "peer": true - }, - "posix-character-classes": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "precond": { - "version": "0.2.3", - "dev": true, - "peer": true - }, - "prepend-http": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "private": { - "version": "0.1.8", - "dev": true, - "peer": true - }, - "process": { - "version": "0.11.10", - "dev": true, - "peer": true - }, - "process-nextick-args": { - "version": "2.0.1", - "dev": true, - "peer": true - }, - "promise-to-callback": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - } - }, - "proxy-addr": { - "version": "2.0.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "pseudomap": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "psl": { - "version": "1.8.0", - "dev": true, - "peer": true - }, - "public-encrypt": { - "version": "4.0.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pull-cat": { - "version": "1.1.11", - "dev": true, - "peer": true - }, - "pull-defer": { - "version": "0.2.3", - "dev": true, - "peer": true - }, - "pull-level": { - "version": "2.0.4", - "dev": true, - "peer": true, - "requires": { - "level-post": "^1.0.7", - "pull-cat": "^1.1.9", - "pull-live": "^1.0.1", - "pull-pushable": "^2.0.0", - "pull-stream": "^3.4.0", - "pull-window": "^2.1.4", - "stream-to-pull-stream": "^1.7.1" - } - }, - "pull-live": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "pull-cat": "^1.1.9", - "pull-stream": "^3.4.0" - } - }, - "pull-pushable": { - "version": "2.2.0", - "dev": true, - "peer": true - }, - "pull-stream": { - "version": "3.6.14", - "dev": true, - "peer": true - }, - "pull-window": { - "version": "2.1.4", - "dev": true, - "peer": true, - "requires": { - "looper": "^2.0.0" - } - }, - "pump": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "dev": true, - "peer": true - }, - "qs": { - "version": "6.5.2", - "dev": true, - "peer": true - }, - "query-string": { - "version": "5.1.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "dev": true, - "optional": true, - "peer": true - }, - "raw-body": { - "version": "2.4.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - } - } - }, - "regenerate": { - "version": "1.4.2", - "dev": true, - "peer": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "dev": true, - "peer": true - }, - "regenerator-transform": { - "version": "0.10.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "dev": true, - "peer": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "dev": true, - "peer": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "regexpu-core": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "regjsgen": { - "version": "0.2.0", - "dev": true, - "peer": true - }, - "regjsparser": { - "version": "0.1.5", - "dev": true, - "peer": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "dev": true, - "peer": true - } - } - }, - "repeat-element": { - "version": "1.1.3", - "dev": true, - "peer": true - }, - "repeat-string": { - "version": "1.6.1", - "dev": true, - "peer": true - }, - "repeating": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.2", - "dev": true, - "peer": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "resolve-url": { - "version": "0.2.1", - "dev": true, - "peer": true - }, - "responselike": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "resumer": { - "version": "0.0.0", - "dev": true, - "peer": true, - "requires": { - "through": "~2.3.4" - } - }, - "ret": { - "version": "0.1.15", - "dev": true, - "peer": true - }, - "rimraf": { - "version": "2.6.3", - "dev": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "dev": true, - "peer": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.6", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.1" - } - }, - "rustbn.js": { - "version": "0.2.0", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.2.1", - "dev": true, - "peer": true - }, - "safe-event-emitter": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "events": "^3.0.0" - } - }, - "safe-regex": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "dev": true, - "peer": true - }, - "scrypt-js": { - "version": "3.0.1", - "dev": true, - "peer": true - }, - "scryptsy": { - "version": "1.2.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "pbkdf2": "^3.0.3" - } - }, - "secp256k1": { - "version": "4.0.2", - "dev": true, - "peer": true, - "requires": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "seedrandom": { - "version": "3.0.1", - "dev": true, - "peer": true - }, - "semaphore": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "send": { - "version": "0.17.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "ms": { - "version": "2.1.1", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "servify": { - "version": "0.1.12", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, - "set-immediate-shim": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "set-value": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "dev": true, - "peer": true - } - } - }, - "setimmediate": { - "version": "1.0.5", - "dev": true, - "peer": true - }, - "setprototypeof": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "sha.js": { - "version": "2.4.11", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "simple-concat": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "simple-get": { - "version": "2.8.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "dev": true, - "peer": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "kind-of": { - "version": "5.1.0", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.0.0", - "dev": true, - "peer": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "dev": true, - "peer": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "dev": true, - "peer": true - }, - "source-map-resolve": { - "version": "0.5.3", - "dev": true, - "peer": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.12", - "dev": true, - "peer": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true, - "peer": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "split-string": { - "version": "3.1.0", - "dev": true, - "peer": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sshpk": { - "version": "1.16.1", - "dev": true, - "peer": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "dev": true, - "peer": true - } - } - }, - "static-extend": { - "version": "0.1.2", - "dev": true, - "peer": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "dev": true, - "peer": true - } - } - }, - "statuses": { - "version": "1.5.0", - "dev": true, - "optional": true, - "peer": true - }, - "stream-to-pull-stream": { - "version": "1.7.3", - "dev": true, - "peer": true, - "requires": { - "looper": "^3.0.0", - "pull-stream": "^3.2.3" - }, - "dependencies": { - "looper": { - "version": "3.0.0", - "dev": true, - "peer": true - } - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "string_decoder": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - } - } - }, - "string.prototype.trim": { - "version": "1.2.3", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "swarm-js": { - "version": "0.1.40", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "4.0.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "get-stream": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "got": { - "version": "7.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "p-cancelable": { - "version": "0.3.0", - "dev": true, - "optional": true, - "peer": true - }, - "prepend-http": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "url-parse-lax": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "tape": { - "version": "4.13.3", - "dev": true, - "peer": true, - "requires": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.5", - "object-inspect": "~1.7.0", - "resolve": "~1.17.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "dev": true, - "peer": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "is-regex": { - "version": "1.0.5", - "dev": true, - "peer": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-inspect": { - "version": "1.7.0", - "dev": true, - "peer": true - }, - "resolve": { - "version": "1.17.0", - "dev": true, - "peer": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "tar": { - "version": "4.4.13", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "dependencies": { - "fs-minipass": { - "version": "1.2.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "minipass": { - "version": "2.9.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "through": { - "version": "2.3.8", - "dev": true, - "peer": true - }, - "through2": { - "version": "2.0.5", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timed-out": { - "version": "4.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "tmp": { - "version": "0.1.0", - "dev": true, - "peer": true, - "requires": { - "rimraf": "^2.6.3" - } - }, - "to-object-path": { - "version": "0.3.0", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-readable-stream": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "to-regex": { - "version": "3.0.2", - "dev": true, - "peer": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "tough-cookie": { - "version": "2.5.0", - "dev": true, - "peer": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "trim-right": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "tunnel-agent": { - "version": "0.6.0", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "1.0.3", - "dev": true, - "peer": true - }, - "tweetnacl-util": { - "version": "0.15.1", - "dev": true, - "peer": true - }, - "type": { - "version": "1.2.0", - "dev": true, - "peer": true - }, - "type-is": { - "version": "1.6.18", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "dev": true, - "peer": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "peer": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typewise": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "typewise-core": "^1.2.0" - } - }, - "typewise-core": { - "version": "1.2.0", - "dev": true, - "peer": true - }, - "typewiselite": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "ultron": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "underscore": { - "version": "1.9.1", - "dev": true, - "optional": true, - "peer": true - }, - "union-value": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "dev": true, - "peer": true - } - } - }, - "universalify": { - "version": "0.1.2", - "dev": true, - "peer": true - }, - "unorm": { - "version": "1.6.0", - "dev": true, - "peer": true - }, - "unpipe": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "unset-value": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "dev": true, - "peer": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "dev": true, - "peer": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "dev": true, - "peer": true - } - } - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "peer": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "dev": true, - "peer": true - }, - "url-parse-lax": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-set-query": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "url-to-options": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "use": { - "version": "3.1.1", - "dev": true, - "peer": true - }, - "utf-8-validate": { - "version": "5.0.4", - "dev": true, - "peer": true, - "requires": { - "node-gyp-build": "^4.2.0" - } - }, - "utf8": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "util-deprecate": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "util.promisify": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" - } - }, - "utils-merge": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "uuid": { - "version": "3.4.0", - "dev": true, - "peer": true - }, - "varint": { - "version": "5.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "vary": { - "version": "1.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "verror": { - "version": "1.10.0", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "web3": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "web3-bzz": "1.2.11", - "web3-core": "1.2.11", - "web3-eth": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-shh": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-bzz": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - }, - "dependencies": { - "@types/node": { - "version": "12.19.12", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "web3-core": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.5", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-requestmanager": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "@types/node": { - "version": "12.19.12", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "web3-core-helpers": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-core-method": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-core-promievent": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-core-requestmanager": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-providers-http": "1.2.11", - "web3-providers-ipc": "1.2.11", - "web3-providers-ws": "1.2.11" - } - }, - "web3-core-subscriptions": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - } - }, - "web3-eth": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-accounts": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-eth-ens": "1.2.11", - "web3-eth-iban": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-eth-abi": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/abi": "5.0.0-beta.153", - "underscore": "1.9.1", - "web3-utils": "1.2.11" - } - }, - "web3-eth-accounts": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "uuid": { - "version": "3.3.2", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "web3-eth-contract": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.5", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-eth-ens": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-eth-iban": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.2.11" - } - }, - "web3-eth-personal": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/node": "^12.12.6", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "@types/node": { - "version": "12.19.12", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "web3-net": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-provider-engine": { - "version": "14.2.1", - "dev": true, - "peer": true, - "requires": { - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^3.0.0", - "eth-json-rpc-infura": "^3.1.0", - "eth-sig-util": "3.0.0", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.2.0", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "eth-sig-util": { - "version": "1.4.2", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereum-common": { - "version": "0.2.0", - "dev": true, - "peer": true - } - } - }, - "ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "peer": true, - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "isarray": { - "version": "0.0.1", - "dev": true, - "peer": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true, - "peer": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "peer": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "peer": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "peer": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true, - "peer": true - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.4.1", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true, - "peer": true - }, - "ws": { - "version": "5.2.2", - "dev": true, - "peer": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "web3-providers-http": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "web3-core-helpers": "1.2.11", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - } - }, - "web3-providers-ws": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "websocket": "^1.0.31" - } - }, - "web3-shh": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-net": "1.2.11" - } - }, - "web3-utils": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - } - } - }, - "websocket": { - "version": "1.0.32", - "dev": true, - "peer": true, - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "peer": true - } - } - }, - "whatwg-fetch": { - "version": "2.0.4", - "dev": true, - "peer": true - }, - "wrappy": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "ws": { - "version": "3.3.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "xhr": { - "version": "2.6.0", - "dev": true, - "peer": true, - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "xhr-request-promise": { - "version": "0.1.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "xhr-request": "^1.1.0" - } - }, - "xhr2-cookies": { - "version": "1.1.0", + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "optional": true, - "peer": true, "requires": { - "cookiejar": "^2.1.1" + "is-glob": "^4.0.1" } - }, - "xtend": { - "version": "4.0.2", - "dev": true, - "peer": true - }, - "yaeti": { - "version": "0.0.6", - "dev": true, - "peer": true - }, - "yallist": { - "version": "3.1.1", - "dev": true, - "peer": true } } }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + } + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "dev": true + }, + "fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, "gauge": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", @@ -45944,40 +3915,23 @@ "wide-align": "^1.1.5" } }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true - }, "get-intrinsic": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.3" } }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, "get-pkg-repo": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", @@ -46083,25 +4037,6 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "git-raw-commits": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", @@ -46194,32 +4129,12 @@ } }, "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "peer": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "type-fest": "^0.20.2" + "is-glob": "^4.0.1" } }, "globby": { @@ -46236,46 +4151,12 @@ "slash": "^3.0.0" } }, - "got": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", - "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", - "dev": true, - "peer": true, - "requires": { - "@sindresorhus/is": "^4.6.0", - "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" - } - }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -46289,24 +4170,6 @@ "wordwrap": "^1.0.0" } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "peer": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "peer": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, "hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -46705,58 +4568,22 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true, - "peer": true - }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "peer": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true }, "has-unicode": { "version": "2.0.1", @@ -46768,6 +4595,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -46778,6 +4606,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -46793,6 +4622,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -46805,12 +4635,6 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -46838,11 +4662,6 @@ } } }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, "http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -46854,38 +4673,6 @@ "debug": "4" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "http2-wrapper": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz", - "integrity": "sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ==", - "dev": true, - "peer": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "dependencies": { - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "peer": true - } - } - }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -46911,29 +4698,13 @@ "ms": "^2.0.0" } }, - "husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", - "dev": true - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "dev": true, - "peer": true, - "requires": { - "punycode": "2.1.0" + "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { @@ -47040,7 +4811,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.8", @@ -47115,23 +4887,6 @@ "wrap-ansi": "^7.0.0" } }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true, - "peer": true - }, "io-ts": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", @@ -47147,36 +4902,12 @@ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "peer": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -47186,20 +4917,6 @@ "binary-extensions": "^2.0.0" } }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -47218,14 +4935,6 @@ "has": "^1.0.3" } }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -47238,33 +4947,6 @@ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true, - "peer": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -47277,736 +4959,113 @@ "is-hex-prefixed": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true, - "peer": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true, - "peer": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, - "requires": { - "protocols": "^2.0.1" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true, - "peer": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true, - "peer": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true, - "peer": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", "dev": true }, - "istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "peer": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "jest-changed-files": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", - "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", - "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-cli": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", - "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", - "dev": true, - "requires": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - } - }, - "jest-config": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", - "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - } - } - }, - "jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-docblock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", - "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", - "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" - } - }, - "jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - } + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true }, - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, - "jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, - "jest-leak-detector": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", - "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true }, - "jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true }, - "jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true }, - "jest-mock": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", - "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "is-ssh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", "dev": true, "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*" + "protocols": "^2.0.1" } }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, - "jest-resolve": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", - "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } + "text-extensions": "^1.0.0" } }, - "jest-resolve-dependencies": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", - "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", - "dev": true, - "requires": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" - } - }, - "jest-runner": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", - "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "dependencies": { - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } - } + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true }, - "jest-runtime": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", - "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-snapshot": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", - "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" - } + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true }, - "jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - } + "is-docker": "^2.0.0" } }, - "jest-validate": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", - "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "leven": "^3.1.0", - "pretty-format": "^28.1.3" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true }, - "jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - } + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true }, "js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true }, "js-tokens": { "version": "4.0.0", @@ -48023,26 +5082,6 @@ "argparse": "^2.0.1" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true, - "peer": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "peer": true - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -48055,25 +5094,6 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true, - "peer": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, "json-stringify-nice": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", @@ -48087,10 +5107,13 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } }, "jsonc-parser": { "version": "3.0.0", @@ -48113,29 +5136,6 @@ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, "just-diff": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.0.3.tgz", @@ -48152,23 +5152,13 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "dev": true, "requires": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", "readable-stream": "^3.6.0" } }, - "keyv": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.3.tgz", - "integrity": "sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ==", - "dev": true, - "peer": true, - "requires": { - "compress-brotli": "^1.3.8", - "json-buffer": "3.0.1" - } - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -48184,32 +5174,6 @@ "graceful-fs": "^4.1.9" } }, - "klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.11" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "peer": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, "lerna": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.3.0.tgz", @@ -48325,22 +5289,6 @@ "xtend": "~4.0.0" } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, "libnpmaccess": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.3.tgz", @@ -48416,113 +5364,32 @@ "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", "dev": true, "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } - } - }, - "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "lint-staged": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz", - "integrity": "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==", - "dev": true, - "requires": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.16", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^5.1.1", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.5.0", - "string-argv": "^0.3.1", - "supports-color": "^9.2.2", - "yaml": "^1.10.2" - }, - "dependencies": { - "supports-color": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", - "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", - "dev": true - } - } - }, - "listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" } } } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "load-json-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", @@ -48543,46 +5410,18 @@ } } }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", - "dev": true, - "peer": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, "lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -48593,79 +5432,21 @@ "is-unicode-supported": "^0.1.0" } }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "get-func-name": "^2.0.0" + "yallist": "^3.0.2" } }, - "lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "dev": true, - "peer": true - }, "lru_map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", "dev": true }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, "ltgt": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", @@ -48727,15 +5508,6 @@ } } }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, "map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -48752,19 +5524,13 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "peer": true - }, "memdown": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", @@ -48927,13 +5693,6 @@ } } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true, - "peer": true - }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -48960,13 +5719,6 @@ "semaphore-async-await": "^1.5.1" } }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "peer": true - }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -48995,51 +5747,12 @@ } } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "peer": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "peer": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dev": true, - "peer": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, "min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -49049,12 +5762,14 @@ "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true }, "minimatch": { "version": "3.1.2", @@ -49175,15 +5890,6 @@ } } }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, "mkdirp-infer-owner": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", @@ -49203,16 +5909,6 @@ } } }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", - "dev": true, - "peer": true, - "requires": { - "mkdirp": "*" - } - }, "mnemonist": { "version": "0.38.5", "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", @@ -49222,109 +5918,6 @@ "obliterator": "^2.0.0" } }, - "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", - "dev": true, - "peer": true - }, "modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -49337,52 +5930,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "dev": true, - "peer": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "dev": true, - "peer": true, - "requires": { - "varint": "^5.0.0" - } - }, - "multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - }, - "dependencies": { - "multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "dev": true, - "peer": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - } - } - }, "multimatch": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", @@ -49410,25 +5957,6 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", - "dev": true, - "peer": true - }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -49441,39 +5969,17 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "peer": true - }, - "nock": { - "version": "13.2.9", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.9.tgz", - "integrity": "sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.21", - "propagate": "^2.0.0" - } - }, "node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true }, "node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, "requires": { "whatwg-url": "^5.0.0" }, @@ -49481,17 +5987,20 @@ "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -49520,18 +6029,7 @@ "node-gyp-build": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", "dev": true }, "nopt": { @@ -49820,29 +6318,6 @@ "set-blocking": "^2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "peer": true - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, "nx": { "version": "14.5.2", "resolved": "https://registry.npmjs.org/nx/-/nx-14.5.2.tgz", @@ -49929,15 +6404,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -50006,44 +6472,15 @@ "version": "21.0.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "peer": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "peer": true + "dev": true + } + } }, "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true }, "obliterator": { "version": "2.0.4", @@ -50051,24 +6488,6 @@ "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", "dev": true }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "requires": { - "http-https": "^1.0.0" - } - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "peer": true, - "requires": { - "ee-first": "1.1.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -50098,20 +6517,6 @@ "is-wsl": "^2.2.0" } }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, "ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", @@ -50129,53 +6534,18 @@ "wcwidth": "^1.0.1" } }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "peer": true, - "requires": { - "lcid": "^1.0.0" - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true }, - "p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, - "peer": true - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, "p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -50310,20 +6680,6 @@ "callsites": "^3.0.0" } }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "peer": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "parse-conflict-json": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", @@ -50335,13 +6691,6 @@ "just-diff-apply": "^5.2.0" } }, - "parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", - "dev": true, - "peer": true - }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -50375,190 +6724,6 @@ "protocols": "^2.0.1" } }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "peer": true - }, - "patch-package": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", - "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", - "dev": true, - "peer": true, - "requires": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "peer": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "peer": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "peer": true - }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "peer": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "peer": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "peer": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "peer": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "peer": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "peer": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -50583,29 +6748,17 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true, - "peer": true - }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, "pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -50614,60 +6767,18 @@ "sha.js": "^2.4.8" } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true, - "peer": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "pidtree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", - "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", - "dev": true - }, "pify": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, - "peer": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "peer": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -50716,74 +6827,18 @@ } } }, - "postinstall-postinstall": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", - "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", - "dev": true, - "peer": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "dev": true, - "peer": true - }, "prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, "proc-log": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "peer": true - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -50818,16 +6873,6 @@ "retry": "^0.12.0" } }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, "promzard": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", @@ -50837,12 +6882,6 @@ "read": "1" } }, - "propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", - "dev": true - }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -50855,69 +6894,10 @@ "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", "dev": true }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "peer": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true, - "peer": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "peer": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true }, "q": { @@ -50935,25 +6915,6 @@ "side-channel": "^1.0.4" } }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "peer": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true, - "peer": true - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -50970,28 +6931,11 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, - "peer": true, "requires": { - "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "peer": true - }, "raw-body": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", @@ -51004,12 +6948,6 @@ "unpipe": "1.0.0" } }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -51246,6 +7184,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -51283,85 +7222,6 @@ "strip-indent": "^3.0.0" } }, - "reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "peer": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "peer": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "peer": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true, - "peer": true - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -51374,13 +7234,6 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true, - "peer": true - }, "resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", @@ -51390,13 +7243,6 @@ "path-parse": "^1.0.6" } }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true, - "peer": true - }, "resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -51420,31 +7266,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true - }, - "responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "peer": true, - "requires": { - "lowercase-keys": "^2.0.0" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "peer": true - } - } - }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -51467,12 +7288,6 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -51486,6 +7301,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -51495,6 +7311,7 @@ "version": "2.2.7", "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dev": true, "requires": { "bn.js": "^5.2.0" } @@ -51540,23 +7357,26 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true + "dev": true }, "scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true }, "secp256k1": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "dev": true, "requires": { "elliptic": "^6.5.4", "node-addon-api": "^2.0.0", @@ -51573,6 +7393,7 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, "requires": { "lru-cache": "^6.0.0" }, @@ -51581,6 +7402,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -51588,64 +7410,8 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - } - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "peer": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, @@ -51658,33 +7424,6 @@ "randombytes": "^2.1.0" } }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "peer": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dev": true, - "peer": true, - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -51694,7 +7433,8 @@ "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true }, "setprototypeof": { "version": "1.2.0", @@ -51706,6 +7446,7 @@ "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -51739,6 +7480,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -51751,67 +7493,12 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "peer": true - }, - "simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dev": true, - "peer": true, - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "peer": true, - "requires": { - "mimic-response": "^1.0.0" - } - } - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", - "dev": true - } - } - }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -51839,73 +7526,6 @@ "socks": "^2.6.2" } }, - "solc": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz", - "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==", - "dev": true, - "peer": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true, - "peer": true - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true - } - } - }, "sort-keys": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", @@ -51989,39 +7609,6 @@ "readable-stream": "^3.0.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "peer": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true, - "peer": true - } - } - }, "ssri": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", @@ -52031,23 +7618,6 @@ "minipass": "^3.1.1" } }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, "stacktrace-parser": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", @@ -52071,43 +7641,6 @@ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -52127,24 +7660,13 @@ } } }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "safe-buffer": "~5.2.0" } }, "strip-ansi": { @@ -52172,6 +7694,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dev": true, "requires": { "is-hex-prefixed": "1.0.0" } @@ -52197,219 +7720,18 @@ "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", "dev": true, "requires": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "swarm-js": { - "version": "0.1.40", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", - "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", - "dev": true, - "peer": true, - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "peer": true - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "peer": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "peer": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "peer": true - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "peer": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "peer": true - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "peer": true - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "peer": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true, - "peer": true - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", - "dev": true, - "peer": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "dev": true, - "peer": true, - "requires": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - } - } + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" } }, - "table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } + "has-flag": "^4.0.0" } }, "tar": { @@ -52459,76 +7781,12 @@ "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "test-value": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", - "integrity": "sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==", - "dev": true, - "peer": true, - "requires": { - "array-back": "^1.0.3", - "typical": "^2.6.0" - }, - "dependencies": { - "array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", - "dev": true, - "peer": true, - "requires": { - "typical": "^2.6.0" - } - }, - "typical": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", - "dev": true, - "peer": true - } - } - }, - "testrpc": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", - "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", - "dev": true, - "peer": true - }, "text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -52544,13 +7802,6 @@ "readable-stream": "3" } }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "dev": true, - "peer": true - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -52560,18 +7811,6 @@ "os-tmpdir": "~1.0.2" } }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -52587,26 +7826,6 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "peer": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "peer": true - } - } - }, "tr46": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", @@ -52642,106 +7861,6 @@ "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", "dev": true }, - "ts-command-line-args": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz", - "integrity": "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - } - }, - "ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "requires": {} - }, - "ts-generator": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", - "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", - "dev": true, - "requires": { - "@types/mkdirp": "^0.5.2", - "@types/prettier": "^2.1.1", - "@types/resolve": "^0.0.8", - "chalk": "^2.4.1", - "glob": "^7.1.2", - "mkdirp": "^0.5.1", - "prettier": "^2.1.2", - "resolve": "^1.8.1", - "ts-essentials": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "ts-essentials": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", - "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", - "dev": true - } - } - }, "ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", @@ -52783,15 +7902,6 @@ "strip-bom": "^3.0.0" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -52804,107 +7914,25 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "peer": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typechain": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz", - "integrity": "sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ==", - "dev": true, - "requires": { - "@types/prettier": "^2.1.1", - "debug": "^4.1.1", - "fs-extra": "^7.0.0", - "glob": "^7.1.6", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.1.2", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } + "dev": true + }, + "tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true + }, + "tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true }, "typedarray": { "version": "0.0.6", @@ -52916,22 +7944,11 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, "requires": { "is-typedarray": "^1.0.0" } }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true - }, "uglify-js": { "version": "3.16.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", @@ -52939,24 +7956,6 @@ "dev": true, "optional": true }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true, - "peer": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, "undici": { "version": "5.8.1", "resolved": "https://registry.npmjs.org/undici/-/undici-5.8.1.tgz", @@ -53005,106 +8004,11 @@ "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true }, - "update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "peer": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true, - "peer": true - } - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "dev": true, - "peer": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", - "dev": true, - "peer": true - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", - "dev": true, - "peer": true - }, - "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "peer": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "uuid": { "version": "8.3.2", @@ -53124,17 +8028,6 @@ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, - "v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - } - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -53154,47 +8047,12 @@ "builtins": "^5.0.0" } }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true, - "peer": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "peer": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "walk-up-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", "dev": true }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -53204,385 +8062,12 @@ "defaults": "^1.0.3" } }, - "web3": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.7.5.tgz", - "integrity": "sha512-3jHZTWyXt975AOXgnZKayiSWDLpoSKk9fZtLk1hURQtt7AdSbXPT8AK9ooBCm0Dt3GYaOeNcHGaiHC3gtyqhLg==", - "dev": true, - "peer": true, - "requires": { - "web3-bzz": "1.7.5", - "web3-core": "1.7.5", - "web3-eth": "1.7.5", - "web3-eth-personal": "1.7.5", - "web3-net": "1.7.5", - "web3-shh": "1.7.5", - "web3-utils": "1.7.5" - } - }, - "web3-bzz": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.5.tgz", - "integrity": "sha512-Z53sY0YK/losqjJncmL4vP0zZI9r6tiXg6o7R6e1JD2Iy7FH3serQvU+qXmPjqEBzsnhf8wTG+YcBPB3RHpr0Q==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "^12.12.6", - "got": "12.1.0", - "swarm-js": "^0.1.40" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true, - "peer": true - } - } - }, - "web3-core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.5.tgz", - "integrity": "sha512-UgOWXZr1fR/3cUQJKWbfMwRxj1/N7o6RSd/dHqdXBlOD+62EjNZItFmLRg5veq5kp9YfXzrNw9bnDkXfsL+nKQ==", - "requires": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-requestmanager": "1.7.5", - "web3-utils": "1.7.5" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - } - } - }, - "web3-core-helpers": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.5.tgz", - "integrity": "sha512-lDDjTks6Q6aNUO87RYrY2xub3UWTKr/RIWxpHJODEqkLxZS1dWdyliJ6aIx3031VQwsNT5HE7NvABe/t0p3iDQ==", - "requires": { - "web3-eth-iban": "1.7.5", - "web3-utils": "1.7.5" - } - }, - "web3-core-method": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.5.tgz", - "integrity": "sha512-ApTvq1Llzlbxmy0n4L7QaE6NodIsR80VJqk8qN4kLg30SGznt/pNJFebryLI2kpyDmxSgj1TjEWzmHJBp6FhYg==", - "requires": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.5", - "web3-core-promievent": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-utils": "1.7.5" - } - }, - "web3-core-promievent": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.5.tgz", - "integrity": "sha512-uZ1VRErVuhiLtHlyt3oEH/JSvAf6bWPndChHR9PG7i1Zfqm6ZVCeM91ICTPmiL8ddsGQOxASpnJk4vhApcTIww==", - "requires": { - "eventemitter3": "4.0.4" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - } - } - }, - "web3-core-requestmanager": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.5.tgz", - "integrity": "sha512-3KpfxW/wVH4mgwWEsSJGHKrtRVoijWlDxtUrm17xgtqRNZ2mFolifKnHAUKa0fY48C9CrxmcCiMIi3W4G6WYRw==", - "requires": { - "util": "^0.12.0", - "web3-core-helpers": "1.7.5", - "web3-providers-http": "1.7.5", - "web3-providers-ipc": "1.7.5", - "web3-providers-ws": "1.7.5" - } - }, - "web3-core-subscriptions": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.5.tgz", - "integrity": "sha512-YK6utQ7Wwjbe4XZOIA8quWGBPi1lFDS1A+jQYwxKKrCvm6BloBNc3FhvrcSYlDhLe/kOy8+2Je8i9amndgT4ww==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.5" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - } - } - }, - "web3-eth": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.5.tgz", - "integrity": "sha512-BucjvqZyDWYkGlsFX+OnOBub0YutlC1KZiNGibdmvtNX0NQK+8iw1uzAoL9yTTwCSszL7lnkFe8N+HCOl9B4Dw==", - "dev": true, - "peer": true, - "requires": { - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-eth-abi": "1.7.5", - "web3-eth-accounts": "1.7.5", - "web3-eth-contract": "1.7.5", - "web3-eth-ens": "1.7.5", - "web3-eth-iban": "1.7.5", - "web3-eth-personal": "1.7.5", - "web3-net": "1.7.5", - "web3-utils": "1.7.5" - } - }, - "web3-eth-abi": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.5.tgz", - "integrity": "sha512-qWHvF7sayxql9BD1yqK9sZRLBQ66eJzGeaU53Y1PRq2iFPrhY6NUWxQ3c3ps0rg+dyObvRbloviWpKXcS4RE/A==", - "dev": true, - "peer": true, - "requires": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.7.5" - } - }, - "web3-eth-accounts": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.5.tgz", - "integrity": "sha512-AzMLoTj3RGwKpyp3x3TtHrEeU4VpR99iMOD6NKrWSDumS6QEi0lCo+y7QZhdTlINw3iIA3SFIdvbAOO4NCHSDg==", - "dev": true, - "peer": true, - "requires": { - "@ethereumjs/common": "^2.5.0", - "@ethereumjs/tx": "^3.3.2", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.0.10", - "scrypt-js": "^3.0.1", - "uuid": "3.3.2", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-utils": "1.7.5" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - }, - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true, - "peer": true - } - } - }, - "web3-eth-contract": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.5.tgz", - "integrity": "sha512-qab7NPJRKRlTs58ozsqK8YIEwWpxIm3vD/okSIKBGkFx5gIHWW+vGmMh5PDSfefLJM9rCd+T+Lc0LYvtME7uqg==", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^5.1.0", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-promievent": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-eth-abi": "1.7.5", - "web3-utils": "1.7.5" - } - }, - "web3-eth-ens": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.5.tgz", - "integrity": "sha512-k1Q0msdRv/wac2egpZBIwG3n/sa/KdrVmVJvFm471gLTL4xfUizV5qJjkDVf+ikf9JyDvWJTs5eWNUUbOFIw/A==", - "dev": true, - "peer": true, - "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-promievent": "1.7.5", - "web3-eth-abi": "1.7.5", - "web3-eth-contract": "1.7.5", - "web3-utils": "1.7.5" - } - }, - "web3-eth-iban": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.5.tgz", - "integrity": "sha512-mn2W5t/1IpL8OZvzAabLKT4kvwRnZSJ9K0tctndl9sDNWkfITYQibEEhUaNNA50Q5fJKgVudHI/m0gwIVTyG8Q==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.7.5" - } - }, - "web3-eth-personal": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.5.tgz", - "integrity": "sha512-txh2P/eN8I4AOUKFi9++KKddoD0tWfCuu9Y1Kc41jSRbk6smO88Fum0KWNmYFYhSCX2qiknS1DfqsONl3igoKQ==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "^12.12.6", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-net": "1.7.5", - "web3-utils": "1.7.5" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true, - "peer": true - } - } - }, - "web3-net": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.7.5.tgz", - "integrity": "sha512-xwuCb2YWw49PmW81AJQ/G+Xi2ikRsYyZXSgyPt4LmZuKjiqg/6kSdK8lZvUi3Pi3wM+QDBXbpr73M/WEkW0KvA==", - "dev": true, - "peer": true, - "requires": { - "web3-core": "1.7.5", - "web3-core-method": "1.7.5", - "web3-utils": "1.7.5" - } - }, - "web3-providers-http": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.5.tgz", - "integrity": "sha512-vPgr4Kzy0M3CHtoP/Bh7qwK/D9h2fhjpoqctdMWVJseOfeTgfOphCKN0uwV8w2VpZgDPXA8aeTdBx5OjmDdStA==", - "requires": { - "abortcontroller-polyfill": "^1.7.3", - "cross-fetch": "^3.1.4", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.7.5" - } - }, - "web3-providers-ipc": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.5.tgz", - "integrity": "sha512-aNHx+RAROzO+apDEzy8Zncj78iqWBadIXtpmFDg7uiTn8i+oO+IcP1Yni7jyzkltsysVJHgHWG4kPx50ANCK3Q==", - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.7.5" - } - }, - "web3-providers-ws": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.5.tgz", - "integrity": "sha512-9uJNVVkIGC8PmM9kNbgPth56HDMSSsxZh3ZEENdwO3LNWemaADiQYUDCsD/dMVkn0xsGLHP5dgAy4Q5msqySLg==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.5", - "websocket": "^1.0.32" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - } - } - }, - "web3-shh": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.5.tgz", - "integrity": "sha512-aCIWJyLMH5H76OybU4ZpUCJ93yNOPATGhJ+KboRPU8QZDzS2CcVhtEzyl27bbvw+rSnVroMLqBgTXBB4mmKI7A==", - "dev": true, - "peer": true, - "requires": { - "web3-core": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-net": "1.7.5" - } - }, - "web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, "whatwg-url": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", @@ -53603,38 +8088,6 @@ "isexe": "^2.0.0" } }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true, - "peer": true - }, - "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - } - }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -53644,49 +8097,12 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", - "dev": true, - "peer": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, - "wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "dependencies": { - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -53833,46 +8249,7 @@ "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "requires": {} - }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dev": true, - "peer": true, - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dev": true, - "peer": true, - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "dev": true, - "peer": true, - "requires": { - "xhr-request": "^1.1.0" - } + "dev": true }, "xtend": { "version": "4.0.2", @@ -53886,11 +8263,6 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -53919,9 +8291,9 @@ }, "dependencies": { "yargs-parser": { - "version": "21.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.0.tgz", - "integrity": "sha512-xzm2t63xTV/f7+bGMSRzLhUNk1ajv/tDoaD5OeGyC3cFo2fl7My9Z4hS3q2VdQ7JaLvTxErO8Jp5pRIFGMD/zg==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true } } diff --git a/packages/core-types/src/chains.types.ts b/packages/core-types/src/chains.types.ts new file mode 100644 index 000000000..80905effd --- /dev/null +++ b/packages/core-types/src/chains.types.ts @@ -0,0 +1,37 @@ +export enum ChainNames { + Mainnet = 'mainnet', + Ropsten = 'ropsten', + Rinkeby = 'rinkeby', + Goerli = 'goerli', + Kovan = 'kovan', + Xdai = 'xdai', + Bsc = 'bsc', + BscTest = 'bscTest', + Fantom = 'fantom', + FantomTest = 'fantomTest', + Matic = 'matic', + Mumbai = 'mumbai', + Aurora = 'aurora', + AuroraTest = 'auroraTest', + Avalanche = 'avalanche', + Fuji = 'fuji', + Optimism = 'optimism', + OptimismKovan = 'optimismKovan', + Arbitrum = 'arbitrum', + ArbitrumTest = 'arbitrumTest', + Moonbeam = 'moonbeam', + Moonbase = 'moonbase', + Celo = 'celo', + CeloTest = 'celoTest' +} + +export enum ChainId { + // Ethereum + MAINNET = 1, + ROPSTEN = 3, + RINKEBY = 4, + GOERLI = 5, + KOVAN = 42, + MUMBAI = 80001, + GANACHE = 1337 //Temp +} diff --git a/packages/core-types/src/contracts/EntryPointContract.ts b/packages/core-types/src/contracts/EntryPointContract.ts index 052dc3d31..a9818fa85 100644 --- a/packages/core-types/src/contracts/EntryPointContract.ts +++ b/packages/core-types/src/contracts/EntryPointContract.ts @@ -1,4 +1,5 @@ -import { UserOperation, TransactionResult } from '../types' +import { UserOperation } from '../types' +import { TransactionResult } from '../transaction.types' import { Contract } from '@ethersproject/contracts' export interface EntryPointContract { diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index 98c871da4..18c4c3a2a 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -1,13 +1,5 @@ -import { - FeeRefundData, - SmartAccountTrx, - WalletTransaction, - SmartAccountVersion, - TransactionOptions, - TransactionResult, - ExecTransaction, - FeeRefund -} from '../types' +import { WalletTransaction, ExecTransaction, FeeRefund } from '../transaction.types' +import { SmartAccountVersion } from '../types' import { BigNumber } from '@ethersproject/bignumber' import { Interface } from '@ethersproject/abi' import { Contract } from '@ethersproject/contracts' diff --git a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts index 4353dd143..8f26205f9 100644 --- a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts +++ b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts @@ -1,4 +1,4 @@ -import { TransactionResult } from '../types' +import { TransactionResult } from '../transaction.types' import { Interface } from '@ethersproject/abi' import { Contract } from '@ethersproject/contracts' export interface SmartWalletFactoryContract { diff --git a/packages/core-types/src/ethereumLibs/EthAdapter.ts b/packages/core-types/src/ethereumLibs/EthAdapter.ts index fbb10d5e3..0bf8327ed 100644 --- a/packages/core-types/src/ethereumLibs/EthAdapter.ts +++ b/packages/core-types/src/ethereumLibs/EthAdapter.ts @@ -1,11 +1,10 @@ import { BigNumber } from '@ethersproject/bignumber' import { SingletonDeployment } from '@gnosis.pm/safe-deployments' import { SmartWalletContract } from 'contracts/SmartWalletContract' -import { AbiItem } from 'web3-utils' import { MultiSendContract } from '../contracts/MultiSendContract' import { MultiSendCallOnlyContract } from '../contracts/MultiSendCallOnlyContract' import { SmartWalletFactoryContract } from '../contracts/SmartWalletFactoryContract' -import { SmartAccountVersion, Eip3770Address } from '../types' +import { Eip3770Address } from '../types' export interface EthAdapterTransaction { to: string diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts index cafddfbf6..845714e5b 100644 --- a/packages/core-types/src/index.ts +++ b/packages/core-types/src/index.ts @@ -5,3 +5,5 @@ export * from './contracts/SmartWalletFactoryContract' export * from './contracts/EntryPointContract' export * from './ethereumLibs/EthAdapter' export * from './types' +export * from './chains.types' +export * from './transaction.types' diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts new file mode 100644 index 000000000..ebc087595 --- /dev/null +++ b/packages/core-types/src/transaction.types.ts @@ -0,0 +1,117 @@ +import { BigNumber, BigNumberish } from '@ethersproject/bignumber' +import { OperationType } from './types' +import { PromiEvent, TransactionReceipt } from 'web3-core/types' +import { ContractTransaction } from '@ethersproject/contracts' + +export interface RawTransactionType { + from?: string + gasPrice?: string | BigNumber + maxFeePerGas?: string | BigNumber + maxPriorityFeePerGas?: string | BigNumber + gasLimit?: string + to: string + value: BigNumberish + data?: string + chainId: number + nonce?: number | string + // accessList?: AccessListItem[]; + type?: number +} + +export interface SignedTransaction { + rawTx: RawTransactionType + tx: WalletTransaction +} + +export interface ExecTransaction { + to: string + value: BigNumberish + data: string + operation: number + targetTxGas: string | number +} + +export interface FeeRefund { + baseGas: string | number + gasPrice: string | number + gasToken: string + refundReceiver: string +} + +export interface MetaTransactionData { + readonly to: string + readonly value: string + readonly data: string + readonly operation?: OperationType +} + +export interface SmartAccountTrxData extends MetaTransactionData { + readonly operation: OperationType + readonly targetTxGas: number + readonly baseGas: number + readonly gasPrice: number + readonly gasToken: string + readonly refundReceiver: string + readonly nonce: number +} + +export interface SmartAccountTrxDataPartial extends MetaTransactionData { + readonly targetTxGas?: number + readonly baseGas?: number + readonly gasPrice?: number + readonly gasToken?: string + readonly refundReceiver?: string + readonly nonce?: number +} + +export interface WalletTransaction { + to: string + value: BigNumberish + data: string + operation: number + targetTxGas: string | number + baseGas: string | number + gasPrice: string | number + gasToken: string + refundReceiver: string + nonce: number +} + +export interface Signature { + readonly signer: string + readonly data: string + staticPart(): string + dynamicPart(): string +} + +export interface SmartAccountTrx { + readonly data: Transaction + readonly signatures: Map + addSignature(signature: Signature): void + encodedSignatures(): string +} + +export interface Transaction { + readonly to: string + readonly value: string + readonly data: string + readonly operation: OperationType + readonly targetTxGas: number +} + +export interface TransactionOptions { + from?: string + gas?: number | string + gasLimit?: number | string + gasPrice?: number | string +} + +export interface BaseTransactionResult { + hash: string +} + +export interface TransactionResult extends BaseTransactionResult { + promiEvent?: PromiEvent + transactionResponse?: ContractTransaction + options?: TransactionOptions +} diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index b0a71dfa5..26d6bec09 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -1,6 +1,3 @@ -import { ContractTransaction } from '@ethersproject/contracts' -import { PromiEvent, TransactionReceipt } from 'web3-core/types' -import { BigNumber, BigNumberish } from '@ethersproject/bignumber' import { SmartWalletFactoryContract } from './contracts/SmartWalletFactoryContract' import { MultiSendContract } from './contracts/MultiSendContract' import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' @@ -29,129 +26,6 @@ export interface SmartAccountState { fallbackHandlerAddress: string } -// TODO -// Review location , names and usage of all types - -export interface RawTransactionType { - from?: string - gasPrice?: string | BigNumber - maxFeePerGas?: string | BigNumber - maxPriorityFeePerGas?: string | BigNumber - gasLimit?: string - to: string - value: BigNumberish - data?: string - chainId: number - nonce?: number | string - // accessList?: AccessListItem[]; - type?: number -} - -export interface SignedTransaction { - rawTx: RawTransactionType - tx: WalletTransaction -} - -export interface ExecTransaction { - to: string - value: BigNumberish - data: string - operation: number - targetTxGas: string | number -} - -export interface FeeRefund { - baseGas: string | number - gasPrice: string | number - gasToken: string - refundReceiver: string -} - -export interface MetaTransactionData { - readonly to: string - readonly value: string - readonly data: string - readonly operation?: OperationType -} - -export interface SmartAccountTrxData extends MetaTransactionData { - readonly operation: OperationType - readonly targetTxGas: number - readonly baseGas: number - readonly gasPrice: number - readonly gasToken: string - readonly refundReceiver: string - readonly nonce: number -} - -export interface SmartAccountTrxDataPartial extends MetaTransactionData { - readonly targetTxGas?: number - readonly baseGas?: number - readonly gasPrice?: number - readonly gasToken?: string - readonly refundReceiver?: string - readonly nonce?: number -} - -export interface WalletTransaction { - to: string - value: BigNumberish - data: string - operation: number - targetTxGas: string | number - baseGas: string | number - gasPrice: string | number - gasToken: string - refundReceiver: string - nonce: number -} - -export interface Signature { - readonly signer: string - readonly data: string - staticPart(): string - dynamicPart(): string -} - -export interface SmartAccountTrx { - readonly data: Transaction - readonly signatures: Map - addSignature(signature: Signature): void - encodedSignatures(): string -} - -export interface Transaction { - readonly to: string - readonly value: string - readonly data: string - readonly operation: OperationType - readonly targetTxGas: number -} - -export interface FeeRefundData { - readonly baseGas: number - readonly gasPrice: number - readonly gasToken: string - readonly refundReceiver: string -} - -export interface TransactionOptions { - from?: string - gas?: number | string - gasLimit?: number | string - gasPrice?: number | string -} - -export interface BaseTransactionResult { - hash: string -} - -export interface TransactionResult extends BaseTransactionResult { - promiEvent?: PromiEvent - transactionResponse?: ContractTransaction - options?: TransactionOptions -} - export interface Eip3770Address { prefix: string address: string diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index 42a7bf72c..97b70d0ad 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -79,21 +79,21 @@ class EthersAdapter implements EthAdapter { return getSmartWalletContractInstance(address, this.#provider) } - getMultiSendContract(address:string): MultiSendEthersContract { + getMultiSendContract(address: string): MultiSendEthersContract { if (!address) { throw new Error('Invalid Multi Send contract address') } return getMultiSendContractInstance(address, this.#provider) } - getMultiSendCallOnlyContract(address:string): MultiSendCallOnlyEthersContract { + getMultiSendCallOnlyContract(address: string): MultiSendCallOnlyEthersContract { if (!address) { throw new Error('Invalid Multi Send contract address') } return getMultiSendCallOnlyContractInstance(address, this.#provider) } - getSmartWalletFactoryContract(address:string): SmartWalletProxyFactoryEthersContract { + getSmartWalletFactoryContract(address: string): SmartWalletProxyFactoryEthersContract { if (!address) { throw new Error('Invalid Wallet Factory contract address') } diff --git a/packages/node-client/tests/e2e/addSafeDelegate.test.ts b/packages/node-client/tests/e2e/addSafeDelegate.test.ts deleted file mode 100644 index 1b619f1aa..000000000 --- a/packages/node-client/tests/e2e/addSafeDelegate.test.ts +++ /dev/null @@ -1,150 +0,0 @@ -import { Signer } from '@ethersproject/abstract-signer' -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient, { SmartAccountDelegateConfig } from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient -let signer: Signer - -describe('addSafeDelegate', () => { - before(async () => { - ;({ serviceSdk, signer } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if Safe address is empty', async () => { - const safeAddress = '' - const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' - const delegateConfig: SmartAccountDelegateConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer, - label: 'Label' - } - await chai - .expect(serviceSdk.addSafeDelegate(delegateConfig)) - .to.be.rejectedWith('Invalid Safe address') - }) - - it('should fail if Safe delegate address is empty', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const delegateAddress = '' - const delegateConfig: SmartAccountDelegateConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer, - label: 'Label' - } - await chai - .expect(serviceSdk.addSafeDelegate(delegateConfig)) - .to.be.rejectedWith('Invalid Safe delegate address') - }) - - it('should fail if Safe address is not checksummed', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() - const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' - const delegateConfig: SmartAccountDelegateConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer, - label: 'Label' - } - await chai - .expect(serviceSdk.addSafeDelegate(delegateConfig)) - .to.be.rejectedWith('Checksum address validation failed') - }) - - it('should fail if Safe delegate address is not checksummed', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0'.toLowerCase() - const delegateConfig: SmartAccountDelegateConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer, - label: 'Label' - } - await chai - .expect(serviceSdk.addSafeDelegate(delegateConfig)) - .to.be.rejectedWith(`Address ${delegateAddress} is not checksumed`) - }) - - it('should fail if Safe does not exist', async () => { - const safeAddress = '0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e' - const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' - const delegateConfig: SmartAccountDelegateConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer, - label: 'Label' - } - await chai - .expect(serviceSdk.addSafeDelegate(delegateConfig)) - .to.be.rejectedWith(`Safe=${safeAddress} does not exist or it's still not indexed`) - }) - - it('should fail if the signer is not an owner of the Safe', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' - const { serviceSdk, signer } = await getServiceClient( - '0xb0057716d5917badaf911b193b12b910811c1497b5bada8d7711f758981c3773' - ) - const delegateConfig: SmartAccountDelegateConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer, - label: 'Label' - } - await chai - .expect(serviceSdk.addSafeDelegate(delegateConfig)) - .to.be.rejectedWith('Signing owner is not an owner of the Safe') - }) - - it('should add a new delegate', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' - const delegateConfig: SmartAccountDelegateConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer, - label: 'Label' - } - const { results: initialDelegates } = await serviceSdk.getSafeDelegates(safeAddress) - chai.expect(initialDelegates.length).to.be.eq(0) - const delegateResponse = await serviceSdk.addSafeDelegate(delegateConfig) - chai.expect(delegateResponse.safe).to.be.equal(delegateConfig.safe) - chai.expect(delegateResponse.delegate).to.be.equal(delegateConfig.delegate) - chai.expect(delegateResponse.signature).to.be.a('string') - chai.expect(delegateResponse.label).to.be.equal(delegateConfig.label) - const { results: finalDelegates } = await serviceSdk.getSafeDelegates(safeAddress) - chai.expect(finalDelegates.length).to.be.eq(1) - await serviceSdk.removeSafeDelegate(delegateConfig) - }) - - it('should add a new delegate EIP-3770', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` - const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' - const eip3770DelegateAddress = `${config.EIP_3770_PREFIX}:${delegateAddress}` - const delegateConfig: SmartAccountDelegateConfig = { - safe: eip3770SafeAddress, - delegate: eip3770DelegateAddress, - signer, - label: 'Label' - } - const { results: initialDelegates } = await serviceSdk.getSafeDelegates(eip3770SafeAddress) - chai.expect(initialDelegates.length).to.be.eq(0) - const delegateResponse = await serviceSdk.addSafeDelegate(delegateConfig) - chai.expect(delegateResponse.safe).to.be.equal(safeAddress) - chai.expect(delegateResponse.delegate).to.be.equal(delegateAddress) - chai.expect(delegateResponse.signature).to.be.a('string') - chai.expect(delegateResponse.label).to.be.equal(delegateConfig.label) - const { results: finalDelegates } = await serviceSdk.getSafeDelegates(eip3770SafeAddress) - chai.expect(finalDelegates.length).to.be.eq(1) - await serviceSdk.removeSafeDelegate(delegateConfig) - }) -}) diff --git a/packages/node-client/tests/e2e/decodeData.test.ts b/packages/node-client/tests/e2e/decodeData.test.ts deleted file mode 100644 index 8d7a0fdd7..000000000 --- a/packages/node-client/tests/e2e/decodeData.test.ts +++ /dev/null @@ -1,50 +0,0 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient from '../../src' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient - -describe('decodeData', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if data is empty', async () => { - const data = '' - await chai.expect(serviceSdk.decodeData(data)).to.be.rejectedWith('Invalid data') - }) - - it('should fail if data is invalid', async () => { - const data = '0x1' - await chai - .expect(serviceSdk.decodeData(data)) - .to.be.rejectedWith('Ensure this field has at least 1 hexadecimal chars (not counting 0x).') - }) - - it('should fail if the function selector is not found', async () => { - const data = '0x123456789' - await chai.expect(serviceSdk.decodeData(data)).to.be.rejectedWith('Not Found') - }) - - it('should decode the data', async () => { - const data = '0x610b592500000000000000000000000090F8bf6A479f320ead074411a4B0e7944Ea8c9C1' - const decodedData = await serviceSdk.decodeData(data) - chai.expect(JSON.stringify(decodedData)).to.be.equal( - JSON.stringify({ - method: 'enableModule', - parameters: [ - { - name: 'module', - type: 'address', - value: '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1' - } - ] - }) - ) - }) -}) diff --git a/packages/node-client/tests/e2e/getBalances.test.ts b/packages/node-client/tests/e2e/getBalances.test.ts deleted file mode 100644 index 0de2dafc4..000000000 --- a/packages/node-client/tests/e2e/getBalances.test.ts +++ /dev/null @@ -1,60 +0,0 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient - -describe('getBalances', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if Safe address is empty', async () => { - const safeAddress = '' - await chai - .expect(serviceSdk.getBalances(safeAddress)) - .to.be.rejectedWith('Invalid Safe address') - }) - - it('should fail if Safe address is not checksummed', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() - await chai - .expect(serviceSdk.getBalances(safeAddress)) - .to.be.rejectedWith('Checksum address validation failed') - }) - - it('should return the list of balances', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const balances = await serviceSdk.getBalances(safeAddress) - chai.expect(balances.length).to.be.equal(2) - const ethBalance = balances.filter((safeBalance) => !safeBalance.tokenAddress)[0] - chai.expect(ethBalance.token).to.be.equal(null) - chai.expect(ethBalance.balance).to.be.equal('4000000000000000000') - const wethBalance = balances.filter( - (safeBalance) => safeBalance.tokenAddress === '0xc778417E063141139Fce010982780140Aa0cD5Ab' - )[0] - chai.expect(wethBalance.token.symbol).to.be.equal('WETH') - chai.expect(wethBalance.balance).to.be.equal('10000000000000000') - }) - - it('should return the list of balances EIP-3770', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` - const balances = await serviceSdk.getBalances(eip3770SafeAddress) - chai.expect(balances.length).to.be.equal(2) - const ethBalance = balances.filter((safeBalance) => !safeBalance.tokenAddress)[0] - chai.expect(ethBalance.token).to.be.equal(null) - chai.expect(ethBalance.balance).to.be.equal('4000000000000000000') - const wethBalance = balances.filter( - (safeBalance) => safeBalance.tokenAddress === '0xc778417E063141139Fce010982780140Aa0cD5Ab' - )[0] - chai.expect(wethBalance.token.symbol).to.be.equal('WETH') - chai.expect(wethBalance.balance).to.be.equal('10000000000000000') - }) -}) diff --git a/packages/node-client/tests/e2e/getCollectibles.test.ts b/packages/node-client/tests/e2e/getCollectibles.test.ts deleted file mode 100644 index 465b4ed7b..000000000 --- a/packages/node-client/tests/e2e/getCollectibles.test.ts +++ /dev/null @@ -1,54 +0,0 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient - -describe('getCollectibles', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if Safe address is empty', async () => { - const safeAddress = '' - await chai - .expect(serviceSdk.getCollectibles(safeAddress)) - .to.be.rejectedWith('Invalid Safe address') - }) - - it('should fail if Safe address is not checksummed', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() - await chai - .expect(serviceSdk.getCollectibles(safeAddress)) - .to.be.rejectedWith('Checksum address validation failed') - }) - - it('should return the list of collectibles', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const safeCollectibleResponse = await serviceSdk.getCollectibles(safeAddress) - chai.expect(safeCollectibleResponse.length).to.be.equal(2) - safeCollectibleResponse.map((safeCollectible) => { - chai.expect(safeCollectible.address).to.be.equal('0x9cf1A34D70261f0594823EFCCeed53C8c639c464') - chai.expect(safeCollectible.tokenName).to.be.equal('Safe NFTs') - chai.expect(safeCollectible.metadata.type).to.be.equal('ERC721') - }) - }) - - it('should return the list of collectibles EIP-3770', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` - const safeCollectibleResponse = await serviceSdk.getCollectibles(eip3770SafeAddress) - chai.expect(safeCollectibleResponse.length).to.be.equal(2) - safeCollectibleResponse.map((safeCollectible) => { - chai.expect(safeCollectible.address).to.be.equal('0x9cf1A34D70261f0594823EFCCeed53C8c639c464') - chai.expect(safeCollectible.tokenName).to.be.equal('Safe NFTs') - chai.expect(safeCollectible.metadata.type).to.be.equal('ERC721') - }) - }) -}) diff --git a/packages/node-client/tests/e2e/getIncomingTransactions.test.ts b/packages/node-client/tests/e2e/getIncomingTransactions.test.ts deleted file mode 100644 index ec5239777..000000000 --- a/packages/node-client/tests/e2e/getIncomingTransactions.test.ts +++ /dev/null @@ -1,59 +0,0 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient - -describe('getIncomingTransactions', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if Safe address is empty', async () => { - const safeAddress = '' - await chai - .expect(serviceSdk.getIncomingTransactions(safeAddress)) - .to.be.rejectedWith('Invalid Safe address') - }) - - it('should fail if Safe address is not checksummed', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() - await chai - .expect(serviceSdk.getIncomingTransactions(safeAddress)) - .to.be.rejectedWith('Checksum address validation failed') - }) - - it('should return an empty list if there are no incoming transactions', async () => { - const safeAddress = '0x3e04a375aC5847C690A7f2fF54b45c59f7eeD6f0' // Safe without incoming transactions - const transferListResponse = await serviceSdk.getIncomingTransactions(safeAddress) - chai.expect(transferListResponse.count).to.be.equal(0) - chai.expect(transferListResponse.results.length).to.be.equal(0) - }) - - it('should return the list of incoming transactions', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' // Safe with incoming transactions - const transferListResponse = await serviceSdk.getIncomingTransactions(safeAddress) - chai.expect(transferListResponse.count).to.be.equal(10) - chai.expect(transferListResponse.results.length).to.be.equal(10) - transferListResponse.results.map((transaction) => { - chai.expect(transaction.to).to.be.equal(safeAddress) - }) - }) - - it('should return the list of incoming transactions EIP-3770', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' // Safe with incoming transactions - const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` - const transferListResponse = await serviceSdk.getIncomingTransactions(eip3770SafeAddress) - chai.expect(transferListResponse.count).to.be.equal(10) - chai.expect(transferListResponse.results.length).to.be.equal(10) - transferListResponse.results.map((transaction) => { - chai.expect(transaction.to).to.be.equal(safeAddress) - }) - }) -}) diff --git a/packages/node-client/tests/e2e/getMultisigTransactions.test.ts b/packages/node-client/tests/e2e/getMultisigTransactions.test.ts deleted file mode 100644 index 8d1d7accc..000000000 --- a/packages/node-client/tests/e2e/getMultisigTransactions.test.ts +++ /dev/null @@ -1,65 +0,0 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient - -describe('getMultisigTransactions', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if Safe address is empty', async () => { - const safeAddress = '' - await chai - .expect(serviceSdk.getMultisigTransactions(safeAddress)) - .to.be.rejectedWith('Invalid Safe address') - }) - - it('should fail if Safe address is not checksummed', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() - await chai - .expect(serviceSdk.getMultisigTransactions(safeAddress)) - .to.be.rejectedWith('Checksum address validation failed') - }) - - it('should return an empty list if there are no multisig transactions', async () => { - const safeAddress = '0x3e04a375aC5847C690A7f2fF54b45c59f7eeD6f0' // Safe without multisig transactions - const safeMultisigTransactionListResponse = await serviceSdk.getMultisigTransactions( - safeAddress - ) - chai.expect(safeMultisigTransactionListResponse.count).to.be.equal(0) - chai.expect(safeMultisigTransactionListResponse.results.length).to.be.equal(0) - }) - - it('should return the list of multisig transactions', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' // Safe with multisig transactions - const safeMultisigTransactionListResponse = await serviceSdk.getMultisigTransactions( - safeAddress - ) - chai.expect(safeMultisigTransactionListResponse.count).to.be.equal(11) - chai.expect(safeMultisigTransactionListResponse.results.length).to.be.equal(11) - safeMultisigTransactionListResponse.results.map((transaction) => { - chai.expect(transaction.safe).to.be.equal(safeAddress) - }) - }) - - it('should return the list of multisig transactions EIP-3770', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' // Safe with multisig transactions - const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` - const safeMultisigTransactionListResponse = await serviceSdk.getMultisigTransactions( - eip3770SafeAddress - ) - chai.expect(safeMultisigTransactionListResponse.count).to.be.equal(11) - chai.expect(safeMultisigTransactionListResponse.results.length).to.be.equal(11) - safeMultisigTransactionListResponse.results.map((transaction) => { - chai.expect(transaction.safe).to.be.equal(safeAddress) - }) - }) -}) diff --git a/packages/node-client/tests/e2e/getNextNonce.test.ts b/packages/node-client/tests/e2e/getNextNonce.test.ts deleted file mode 100644 index e0d66145e..000000000 --- a/packages/node-client/tests/e2e/getNextNonce.test.ts +++ /dev/null @@ -1,42 +0,0 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient - -describe('getNextNonce', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if Safe address is empty', async () => { - const safeAddress = '' - await chai - .expect(serviceSdk.getNextNonce(safeAddress)) - .to.be.rejectedWith('Invalid Safe address') - }) - - it('should return the next Safe nonce when there are pending transactions', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const nextNonce = await serviceSdk.getNextNonce(safeAddress) - chai.expect(nextNonce).to.be.equal(10) - }) - - it('should return the next Safe nonce when there are no pending transactions', async () => { - const safeAddress = '0x3e1ee196231490c8483df2D57403c7B814f91803' - const nextNonce = await serviceSdk.getNextNonce(safeAddress) - chai.expect(nextNonce).to.be.equal(0) - }) - - it('should return the next Safe nonce when there are no pending transactions EIP-3770', async () => { - const safeAddress = '0x3e1ee196231490c8483df2D57403c7B814f91803' - const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` - const nextNonce = await serviceSdk.getNextNonce(eip3770SafeAddress) - chai.expect(nextNonce).to.be.equal(0) - }) -}) diff --git a/packages/node-client/tests/e2e/getPendingTransactions.test.ts b/packages/node-client/tests/e2e/getPendingTransactions.test.ts deleted file mode 100644 index 367c4c10c..000000000 --- a/packages/node-client/tests/e2e/getPendingTransactions.test.ts +++ /dev/null @@ -1,53 +0,0 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient - -describe('getPendingTransactions', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if safeAddress is empty', async () => { - const safeAddress = '' - await chai - .expect(serviceSdk.getPendingTransactions(safeAddress)) - .to.be.rejectedWith('Invalid Safe address') - }) - - it('should fail if safeAddress is not checksummed', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() - await chai - .expect(serviceSdk.getPendingTransactions(safeAddress)) - .to.be.rejectedWith('Checksum address validation failed') - }) - - it('should return an empty list if there are no pending transactions', async () => { - const safeAddress = '0x3e04a375aC5847C690A7f2fF54b45c59f7eeD6f0' // Safe without pending transaction - const transactionList = await serviceSdk.getPendingTransactions(safeAddress) - chai.expect(transactionList.count).to.be.equal(0) - chai.expect(transactionList.results.length).to.be.equal(0) - }) - - it('should return the the transaction list', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' // Safe with pending transaction - const transactionList = await serviceSdk.getPendingTransactions(safeAddress) - chai.expect(transactionList.count).to.be.equal(2) - chai.expect(transactionList.results.length).to.be.equal(2) - }) - - it('should return the the transaction list EIP-3770', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' // Safe with pending transaction - const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` - const transactionList = await serviceSdk.getPendingTransactions(eip3770SafeAddress) - chai.expect(transactionList.count).to.be.equal(2) - chai.expect(transactionList.results.length).to.be.equal(2) - }) -}) diff --git a/packages/node-client/tests/e2e/getSafeDelegates.test.ts b/packages/node-client/tests/e2e/getSafeDelegates.test.ts deleted file mode 100644 index 9adf19d43..000000000 --- a/packages/node-client/tests/e2e/getSafeDelegates.test.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { Signer } from '@ethersproject/abstract-signer' -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient, { SmartAccountDelegateConfig } from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient -let signer: Signer - -describe('getSafeDelegates', () => { - before(async () => { - ;({ serviceSdk, signer } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if Safe address is empty', async () => { - const safeAddress = '' - await chai - .expect(serviceSdk.getSafeDelegates(safeAddress)) - .to.be.rejectedWith('Invalid Safe address') - }) - - it('should fail if Safe address is not checksummed', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() - await chai - .expect(serviceSdk.getSafeDelegates(safeAddress)) - .to.be.rejectedWith('Checksum address validation failed') - }) - - it('should return an empty array if the Safe address is not found', async () => { - const safeAddress = '0x11dBF28A2B46bdD4E284e79e28B2E8b94Cfa39Bc' - const safeDelegateListResponse = await serviceSdk.getSafeDelegates(safeAddress) - const results = safeDelegateListResponse.results - chai.expect(results).to.be.empty - }) - - it('should return an array of delegates', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - - const delegateConfig1: SmartAccountDelegateConfig = { - safe: safeAddress, - delegate: '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0', - signer, - label: 'Label1' - } - const delegateConfig2: SmartAccountDelegateConfig = { - safe: safeAddress, - delegate: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', - signer, - label: 'Label2' - } - await serviceSdk.addSafeDelegate(delegateConfig1) - await serviceSdk.addSafeDelegate(delegateConfig2) - const safeDelegateListResponse = await serviceSdk.getSafeDelegates(safeAddress) - const { results } = safeDelegateListResponse - const sortedResults = results.sort((a, b) => (a.delegate > b.delegate ? -1 : 1)) - chai.expect(sortedResults.length).to.be.eq(2) - chai.expect(sortedResults[0].delegate).to.be.eq(delegateConfig1.delegate) - chai.expect(sortedResults[0].delegator).to.be.eq(await delegateConfig1.signer.getAddress()) - chai.expect(sortedResults[0].label).to.be.eq(delegateConfig1.label) - chai.expect(sortedResults[1].delegate).to.be.eq(delegateConfig2.delegate) - chai.expect(sortedResults[1].delegator).to.be.eq(await delegateConfig2.signer.getAddress()) - chai.expect(sortedResults[1].label).to.be.eq(delegateConfig2.label) - await serviceSdk.removeAllSafeDelegates(safeAddress, signer) - }) - - it('should return an array of delegates EIP-3770', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` - const delegateConfig1: SmartAccountDelegateConfig = { - safe: eip3770SafeAddress, - delegate: `${config.EIP_3770_PREFIX}:0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0`, - signer, - label: 'Label1' - } - const delegateConfig2: SmartAccountDelegateConfig = { - safe: eip3770SafeAddress, - delegate: `${config.EIP_3770_PREFIX}:0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b`, - signer, - label: 'Label2' - } - await serviceSdk.addSafeDelegate(delegateConfig1) - await serviceSdk.addSafeDelegate(delegateConfig2) - const safeDelegateListResponse = await serviceSdk.getSafeDelegates(eip3770SafeAddress) - const { results } = safeDelegateListResponse - const sortedResults = results.sort((a, b) => (a.delegate > b.delegate ? -1 : 1)) - chai.expect(sortedResults.length).to.be.eq(2) - chai.expect(sortedResults[0].delegate).to.be.eq('0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0') - chai.expect(sortedResults[0].delegator).to.be.eq(await delegateConfig1.signer.getAddress()) - chai.expect(sortedResults[0].label).to.be.eq(delegateConfig1.label) - chai.expect(sortedResults[1].delegate).to.be.eq('0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b') - chai.expect(sortedResults[1].delegator).to.be.eq(await delegateConfig2.signer.getAddress()) - chai.expect(sortedResults[1].label).to.be.eq(delegateConfig2.label) - await serviceSdk.removeAllSafeDelegates(eip3770SafeAddress, signer) - }) -}) diff --git a/packages/node-client/tests/e2e/getSafeInfo.test.ts b/packages/node-client/tests/e2e/getSafeInfo.test.ts deleted file mode 100644 index d832df0c2..000000000 --- a/packages/node-client/tests/e2e/getSafeInfo.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient - -describe('getSafeInfo', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if Safe address is empty', async () => { - const safeAddress = '' - await chai - .expect(serviceSdk.getSafeInfo(safeAddress)) - .to.be.rejectedWith('Invalid Safe address') - }) - - it('should fail if Safe address is not checksummed', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() - await chai - .expect(serviceSdk.getSafeInfo(safeAddress)) - .to.be.rejectedWith('Checksum address validation failed') - }) - - it('should return an empty array if the safeTxHash is not found', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const safeInfoResponse = await serviceSdk.getSafeInfo(safeAddress) - chai.expect(safeInfoResponse.address).to.be.equal(safeAddress) - }) - - it('should return an empty array if the safeTxHash is not found EIP-3770', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` - const safeInfoResponse = await serviceSdk.getSafeInfo(eip3770SafeAddress) - chai.expect(safeInfoResponse.address).to.be.equal(safeAddress) - }) -}) diff --git a/packages/node-client/tests/e2e/getSafesByOwner.test.ts b/packages/node-client/tests/e2e/getSafesByOwner.test.ts deleted file mode 100644 index 42e1e198a..000000000 --- a/packages/node-client/tests/e2e/getSafesByOwner.test.ts +++ /dev/null @@ -1,53 +0,0 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient - -describe('getSafesByOwner', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if owner address is empty', async () => { - const ownerAddress = '' - await chai - .expect(serviceSdk.getSafesByOwner(ownerAddress)) - .to.be.rejectedWith('Invalid owner address') - }) - - it('should fail if owner address is not checksummed', async () => { - const ownerAddress = '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1'.toLowerCase() - await chai - .expect(serviceSdk.getSafesByOwner(ownerAddress)) - .to.be.rejectedWith('Checksum address validation failed') - }) - - it('should return an empty array if there are no owned Safes', async () => { - const ownerAddress = '0x0000000000000000000000000000000000000001' - const ownerResponse = await serviceSdk.getSafesByOwner(ownerAddress) - const { safes } = ownerResponse - chai.expect(safes.length).to.be.equal(0) - }) - - it('should return the array of owned Safes', async () => { - const ownerAddress = '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1' - const ownerResponse = await serviceSdk.getSafesByOwner(ownerAddress) - const { safes } = ownerResponse - chai.expect(safes.length).to.be.greaterThan(1) - }) - - it('should return the array of owned Safes EIP-3770', async () => { - const ownerAddress = '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1' - const eip3770OwnerAddress = `${config.EIP_3770_PREFIX}:${ownerAddress}` - const ownerResponse = await serviceSdk.getSafesByOwner(eip3770OwnerAddress) - const { safes } = ownerResponse - chai.expect(safes.length).to.be.greaterThan(1) - }) -}) diff --git a/packages/node-client/tests/e2e/getServiceInfo.test.ts b/packages/node-client/tests/e2e/getServiceInfo.test.ts deleted file mode 100644 index 731cdf683..000000000 --- a/packages/node-client/tests/e2e/getServiceInfo.test.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { expect } from 'chai' -import SDKBackendClient from '../../src' -import { getServiceClient } from '../utils/setupServiceClient' - -let serviceSdk: SDKBackendClient - -describe('getServiceInfo', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should return the Safe info', async () => { - const safeInfo = await serviceSdk.getServiceInfo() - expect(safeInfo.api_version).to.be.equal('v1') - }) -}) diff --git a/packages/node-client/tests/e2e/getServiceMastercopiesInfo.test.ts b/packages/node-client/tests/e2e/getServiceMastercopiesInfo.test.ts deleted file mode 100644 index 5b2d522ae..000000000 --- a/packages/node-client/tests/e2e/getServiceMastercopiesInfo.test.ts +++ /dev/null @@ -1,21 +0,0 @@ -import chai from 'chai' -import SDKBackendClient from '../../src' -import { getServiceClient } from '../utils/setupServiceClient' - -let serviceSdk: SDKBackendClient - -describe('getServiceMasterCopiesInfo', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should call getServiceMasterCopiesInfo', async () => { - const masterCopiesResponse = await serviceSdk.getServiceMasterCopiesInfo() - chai.expect(masterCopiesResponse.length).to.be.greaterThan(1) - masterCopiesResponse.map((masterCopy) => { - chai.expect(masterCopy.deployer).to.be.equal('Gnosis') - }) - }) -}) diff --git a/packages/node-client/tests/e2e/getToken.test.ts b/packages/node-client/tests/e2e/getToken.test.ts deleted file mode 100644 index c4102b357..000000000 --- a/packages/node-client/tests/e2e/getToken.test.ts +++ /dev/null @@ -1,42 +0,0 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient - -describe('getToken', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if token address is empty', async () => { - const tokenAddress = '' - await chai.expect(serviceSdk.getToken(tokenAddress)).to.be.rejectedWith('Invalid token address') - }) - - it('should fail if token address is not checksummed', async () => { - const tokenAddress = '0xc778417E063141139Fce010982780140Aa0cD5Ab'.toLowerCase() - await chai - .expect(serviceSdk.getToken(tokenAddress)) - .to.be.rejectedWith('Invalid ethereum address') - }) - - it('should return the token info', async () => { - const tokenAddress = '0xc778417E063141139Fce010982780140Aa0cD5Ab' - const tokenInfoResponse = await serviceSdk.getToken(tokenAddress) - chai.expect(tokenInfoResponse.address).to.be.equal('0xc778417E063141139Fce010982780140Aa0cD5Ab') - }) - - it('should return the token info EIP-3770', async () => { - const tokenAddress = '0xc778417E063141139Fce010982780140Aa0cD5Ab' - const eip3770TokenAddress = `${config.EIP_3770_PREFIX}:${tokenAddress}` - const tokenInfoResponse = await serviceSdk.getToken(eip3770TokenAddress) - chai.expect(tokenInfoResponse.address).to.be.equal('0xc778417E063141139Fce010982780140Aa0cD5Ab') - }) -}) diff --git a/packages/node-client/tests/e2e/getTokenList.test.ts b/packages/node-client/tests/e2e/getTokenList.test.ts deleted file mode 100644 index beac5ff82..000000000 --- a/packages/node-client/tests/e2e/getTokenList.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import chai from 'chai' -import SDKBackendClient from '../../src' -import { getServiceClient } from '../utils/setupServiceClient' - -let serviceSdk: SDKBackendClient - -describe('getTokenList', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should return an array of tokens', async () => { - const tokenInfoListResponse = await serviceSdk.getTokenList() - chai.expect(tokenInfoListResponse.count).to.be.greaterThan(1) - chai.expect(tokenInfoListResponse.results.length).to.be.greaterThan(1) - }) -}) diff --git a/packages/node-client/tests/e2e/getTransaction.test.ts b/packages/node-client/tests/e2e/getTransaction.test.ts deleted file mode 100644 index 90a90cf02..000000000 --- a/packages/node-client/tests/e2e/getTransaction.test.ts +++ /dev/null @@ -1,34 +0,0 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient from '../../src' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient - -describe('getTransaction', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if safeTxHash is empty', async () => { - const safeTxHash = '' - await chai - .expect(serviceSdk.getTransaction(safeTxHash)) - .to.be.rejectedWith('Invalid safeTxHash') - }) - - it('should fail if safeTxHash is not found', async () => { - const safeTxHash = '0x' - await chai.expect(serviceSdk.getTransaction(safeTxHash)).to.be.rejectedWith('Not found.') - }) - - it('should return the transaction with the given safeTxHash', async () => { - const safeTxHash = '0xb22be4e57718560c89de96acd1acefe55c2673b31a7019a374ebb1d8a2842f5d' - const transaction = await serviceSdk.getTransaction(safeTxHash) - chai.expect(transaction.safeTxHash).to.be.equal(safeTxHash) - }) -}) diff --git a/packages/node-client/tests/e2e/getTransactionConfirmations.test.ts b/packages/node-client/tests/e2e/getTransactionConfirmations.test.ts deleted file mode 100644 index 45243d135..000000000 --- a/packages/node-client/tests/e2e/getTransactionConfirmations.test.ts +++ /dev/null @@ -1,37 +0,0 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient from '../../src' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient - -describe('getTransactionConfirmations', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if safeTxHash is empty', async () => { - const safeTxHash = '' - await chai - .expect(serviceSdk.getTransactionConfirmations(safeTxHash)) - .to.be.rejectedWith('Invalid safeTxHash') - }) - - it.skip('should return an empty array if the safeTxHash is not found', async () => { - const safeTxHash = '0x' - const transactionConfirmations = await serviceSdk.getTransactionConfirmations(safeTxHash) - chai.expect(transactionConfirmations.count).to.be.equal(0) - chai.expect(transactionConfirmations.results.length).to.be.equal(0) - }) - - it('should return the transaction with the given safeTxHash', async () => { - const safeTxHash = '0xb22be4e57718560c89de96acd1acefe55c2673b31a7019a374ebb1d8a2842f5d' - const transactionConfirmations = await serviceSdk.getTransactionConfirmations(safeTxHash) - chai.expect(transactionConfirmations.count).to.be.equal(2) - chai.expect(transactionConfirmations.results.length).to.be.equal(2) - }) -}) diff --git a/packages/node-client/tests/e2e/getUsdBalances.test.ts b/packages/node-client/tests/e2e/getUsdBalances.test.ts deleted file mode 100644 index d9c25104c..000000000 --- a/packages/node-client/tests/e2e/getUsdBalances.test.ts +++ /dev/null @@ -1,72 +0,0 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient - -describe('getUsdBalances', () => { - before(async () => { - ;({ serviceSdk } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if Safe address is empty', async () => { - const safeAddress = '' - await chai - .expect(serviceSdk.getUsdBalances(safeAddress)) - .to.be.rejectedWith('Invalid Safe address') - }) - - it('should fail if Safe address is not checksummed', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() - await chai - .expect(serviceSdk.getUsdBalances(safeAddress)) - .to.be.rejectedWith('Checksum address validation failed') - }) - - it('should return the list of USD balances', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const balances = await serviceSdk.getUsdBalances(safeAddress) - chai.expect(balances.length).to.be.equal(2) - const ethBalance = balances.filter((safeBalance) => !safeBalance.tokenAddress)[0] - chai.expect(ethBalance.token).to.be.equal(null) - chai.expect(ethBalance.balance).to.be.equal('4000000000000000000') - chai.expect(ethBalance.fiatCode).to.be.equal('USD') - chai.expect(ethBalance.fiatBalance).not.to.be.equal('') - chai.expect(ethBalance.fiatConversion).not.to.be.equal('') - const wethBalance = balances.filter( - (safeBalance) => safeBalance.tokenAddress === '0xc778417E063141139Fce010982780140Aa0cD5Ab' - )[0] - chai.expect(wethBalance.token.symbol).to.be.equal('WETH') - chai.expect(wethBalance.balance).to.be.equal('10000000000000000') - chai.expect(wethBalance.fiatCode).to.be.equal('USD') - chai.expect(wethBalance.fiatBalance).not.to.be.equal('') - chai.expect(wethBalance.fiatConversion).not.to.be.equal('') - }) - - it('should return the list of USD balances EIP-3770', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` - const balances = await serviceSdk.getUsdBalances(eip3770SafeAddress) - chai.expect(balances.length).to.be.equal(2) - const ethBalance = balances.filter((safeBalance) => !safeBalance.tokenAddress)[0] - chai.expect(ethBalance.token).to.be.equal(null) - chai.expect(ethBalance.balance).to.be.equal('4000000000000000000') - chai.expect(ethBalance.fiatCode).to.be.equal('USD') - chai.expect(ethBalance.fiatBalance).not.to.be.equal('') - chai.expect(ethBalance.fiatConversion).not.to.be.equal('') - const wethBalance = balances.filter( - (safeBalance) => safeBalance.tokenAddress === '0xc778417E063141139Fce010982780140Aa0cD5Ab' - )[0] - chai.expect(wethBalance.token.symbol).to.be.equal('WETH') - chai.expect(wethBalance.balance).to.be.equal('10000000000000000') - chai.expect(wethBalance.fiatCode).to.be.equal('USD') - chai.expect(wethBalance.fiatBalance).not.to.be.equal('') - chai.expect(wethBalance.fiatConversion).not.to.be.equal('') - }) -}) diff --git a/packages/node-client/tests/e2e/removeAllSafeDelegates.test.ts b/packages/node-client/tests/e2e/removeAllSafeDelegates.test.ts deleted file mode 100644 index 74e98e20f..000000000 --- a/packages/node-client/tests/e2e/removeAllSafeDelegates.test.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { Signer } from '@ethersproject/abstract-signer' -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient, { SmartAccountDelegateConfig } from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient -let signer: Signer - -describe('removeAllSafeDelegates', () => { - before(async () => { - ;({ serviceSdk, signer } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if Safe address is empty', async () => { - const safeAddress = '' - await chai - .expect(serviceSdk.removeAllSafeDelegates(safeAddress, signer)) - .to.be.rejectedWith('Invalid Safe address') - }) - - it('should fail if Safe address is not checksummed', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() - await chai - .expect(serviceSdk.removeAllSafeDelegates(safeAddress, signer)) - .to.be.rejectedWith('Checksum address validation failed') - }) - - it('should fail if Safe does not exist', async () => { - const safeAddress = '0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e' - await chai - .expect(serviceSdk.removeAllSafeDelegates(safeAddress, signer)) - .to.be.rejectedWith(`Safe=${safeAddress} does not exist or it's still not indexed`) - }) - - it('should fail if the signer is not an owner of the Safe', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const { serviceSdk, signer } = await getServiceClient( - '0xb0057716d5917badaf911b193b12b910811c1497b5bada8d7711f758981c3773' - ) - await chai - .expect(serviceSdk.removeAllSafeDelegates(safeAddress, signer)) - .to.be.rejectedWith('Signing owner is not an owner of the Safe') - }) - - it('should remove all delegates', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const delegateConfig1: SmartAccountDelegateConfig = { - safe: safeAddress, - delegate: '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0', - signer, - label: 'Label1' - } - const delegateConfig2: SmartAccountDelegateConfig = { - safe: safeAddress, - delegate: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', - signer, - label: 'Label2' - } - await serviceSdk.addSafeDelegate(delegateConfig1) - await serviceSdk.addSafeDelegate(delegateConfig2) - const { results: initialDelegates } = await serviceSdk.getSafeDelegates(safeAddress) - chai.expect(initialDelegates.length).to.be.eq(2) - await serviceSdk.removeAllSafeDelegates(safeAddress, signer) - const { results: finalDelegates } = await serviceSdk.getSafeDelegates(safeAddress) - chai.expect(finalDelegates.length).to.be.eq(0) - }) - - it('should remove all delegates EIP-3770', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` - const delegateConfig1: SmartAccountDelegateConfig = { - safe: eip3770SafeAddress, - delegate: `${config.EIP_3770_PREFIX}:0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0`, - signer, - label: 'Label1' - } - const delegateConfig2: SmartAccountDelegateConfig = { - safe: eip3770SafeAddress, - delegate: `${config.EIP_3770_PREFIX}:0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b`, - signer, - label: 'Label2' - } - await serviceSdk.addSafeDelegate(delegateConfig1) - await serviceSdk.addSafeDelegate(delegateConfig2) - const { results: initialDelegates } = await serviceSdk.getSafeDelegates(eip3770SafeAddress) - chai.expect(initialDelegates.length).to.be.eq(2) - await serviceSdk.removeAllSafeDelegates(eip3770SafeAddress, signer) - const { results: finalDelegates } = await serviceSdk.getSafeDelegates(eip3770SafeAddress) - chai.expect(finalDelegates.length).to.be.eq(0) - }) -}) diff --git a/packages/node-client/tests/e2e/removeSafeDelegate.test.ts b/packages/node-client/tests/e2e/removeSafeDelegate.test.ts deleted file mode 100644 index 5f02f82f6..000000000 --- a/packages/node-client/tests/e2e/removeSafeDelegate.test.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { Signer } from '@ethersproject/abstract-signer' -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import SDKBackendClient, { SmartAccountDelegateDeleteConfig } from '../../src' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' - -chai.use(chaiAsPromised) - -let serviceSdk: SDKBackendClient -let signer: Signer - -describe('removeSafeDelegate', () => { - before(async () => { - ;({ serviceSdk, signer } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - it('should fail if Safe address is empty', async () => { - const safeAddress = '' - const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' - const delegateConfig: SmartAccountDelegateDeleteConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer - } - await chai - .expect(serviceSdk.removeSafeDelegate(delegateConfig)) - .to.be.rejectedWith('Invalid Safe address') - }) - - it('should fail if Safe delegate address is empty', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const delegateAddress = '' - const delegateConfig: SmartAccountDelegateDeleteConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer - } - await chai - .expect(serviceSdk.removeSafeDelegate(delegateConfig)) - .to.be.rejectedWith('Invalid Safe delegate address') - }) - - it('should fail if Safe address is not checksummed', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD'.toLowerCase() - const delegateConfig: SmartAccountDelegateDeleteConfig = { - safe: safeAddress, - delegate: '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0', - signer - } - await chai - .expect(serviceSdk.removeSafeDelegate(delegateConfig)) - .to.be.rejectedWith('Checksum address validation failed') - }) - - it('should fail if Safe delegate address is not checksummed', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0'.toLowerCase() - const delegateConfig: SmartAccountDelegateDeleteConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer - } - await chai - .expect(serviceSdk.removeSafeDelegate(delegateConfig)) - .to.be.rejectedWith('Checksum address validation failed') - }) - - it('should fail if Safe does not exist', async () => { - const safeAddress = '0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e' - const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' - const delegateConfig: SmartAccountDelegateDeleteConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer - } - await chai - .expect(serviceSdk.removeSafeDelegate(delegateConfig)) - .to.be.rejectedWith(`Safe=${safeAddress} does not exist or it's still not indexed`) - }) - - it('should fail if the signer is not an owner of the Safe', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' - const { serviceSdk, signer } = await getServiceClient( - '0xb0057716d5917badaf911b193b12b910811c1497b5bada8d7711f758981c3773' - ) - const delegateConfig: SmartAccountDelegateDeleteConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer - } - await chai - .expect(serviceSdk.removeSafeDelegate(delegateConfig)) - .to.be.rejectedWith('Signing owner is not an owner of the Safe') - }) - - it('should fail if the delegate to remove is not a delegate', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const delegateAddress = '0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e' - const delegateConfig: SmartAccountDelegateDeleteConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer - } - await chai.expect(serviceSdk.removeSafeDelegate(delegateConfig)).to.be.rejectedWith('Not found') - }) - - it('should remove a delegate', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' - const delegateConfig: SmartAccountDelegateDeleteConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer - } - await serviceSdk.addSafeDelegate({ ...delegateConfig, label: 'Label' }) - const { results: initialDelegates } = await serviceSdk.getSafeDelegates(safeAddress) - chai.expect(initialDelegates.length).to.be.eq(1) - await serviceSdk.removeSafeDelegate(delegateConfig) - const { results: finalDelegates } = await serviceSdk.getSafeDelegates(safeAddress) - chai.expect(finalDelegates.length).to.be.eq(0) - }) - - it('should remove a delegate EIP-3770', async () => { - const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' - const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` - const delegateAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' - const eip3770DelegateAddress = `${config.EIP_3770_PREFIX}:${delegateAddress}` - const delegateConfig: SmartAccountDelegateDeleteConfig = { - safe: eip3770SafeAddress, - delegate: eip3770DelegateAddress, - signer - } - await serviceSdk.addSafeDelegate({ ...delegateConfig, label: 'Label' }) - const { results: initialDelegates } = await serviceSdk.getSafeDelegates(eip3770SafeAddress) - chai.expect(initialDelegates.length).to.be.eq(1) - await serviceSdk.removeSafeDelegate(delegateConfig) - const { results: finalDelegates } = await serviceSdk.getSafeDelegates(eip3770SafeAddress) - chai.expect(finalDelegates.length).to.be.eq(0) - }) -}) diff --git a/packages/node-client/tests/endpoint/index.test.ts b/packages/node-client/tests/endpoint/index.test.ts deleted file mode 100644 index 2052f3098..000000000 --- a/packages/node-client/tests/endpoint/index.test.ts +++ /dev/null @@ -1,692 +0,0 @@ -import { getDefaultProvider } from '@ethersproject/providers' -import { Wallet } from '@ethersproject/wallet' -import Safe from '@gnosis.pm/safe-core-sdk' -import { EthAdapter, SmartAccountTrxDataPartial } from '@biconomy-sdk/core-types' -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import sinon from 'sinon' -import sinonChai from 'sinon-chai' -import SDKBackendClient, { - SafeBalancesOptions, - SafeBalancesUsdOptions, - SafeCollectiblesOptions, - SmartAccountDelegateConfig, - SmartAccountDelegateDeleteConfig, - SafeMultisigTransactionEstimate -} from '../../src' -import { getTxServiceBaseUrl } from '../../src/utils' -import * as httpRequests from '../../src/utils/httpRequests' -import config from '../utils/config' -import { getServiceClient } from '../utils/setupServiceClient' -chai.use(chaiAsPromised) -chai.use(sinonChai) - -const safeAddress = '0xf9A2FAa4E3b140ad42AAE8Cac4958cFf38Ab08fD' -const eip3770SafeAddress = `${config.EIP_3770_PREFIX}:${safeAddress}` -const randomAddress = '0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0' -const eip3770RandomAddress = `${config.EIP_3770_PREFIX}:${randomAddress}` -const delegateAddress = '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b' -const eip3770DelegateAddress = `${config.EIP_3770_PREFIX}:${delegateAddress}` -const tokenAddress = '0xcb0591ba2d74edd4211d5200d5d3b19cf598c548' -const eip3770TokenAddress = `${config.EIP_3770_PREFIX}:${tokenAddress}` -const safeTxHash = '0xede78ed72e9a8afd2b7a21f35c86f56cba5fffb2fff0838e253b7a41d19ceb48' -const txServiceBaseUrl = 'https://safe-transaction.rinkeby.gnosis.io' -const provider = getDefaultProvider(config.JSON_RPC) -const signer = new Wallet( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d', - provider -) -let ethAdapter: EthAdapter -let serviceSdk: SDKBackendClient - -describe('Endpoint tests', () => { - before(async () => { - ;({ serviceSdk, ethAdapter } = await getServiceClient( - '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d' - )) - }) - - const fetchData = sinon - .stub(httpRequests, 'sendRequest') - .returns(Promise.resolve({ data: { success: true } })) - - describe('', () => { - it('getServiceInfo', async () => { - await chai - .expect(serviceSdk.getServiceInfo()) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/about`, - method: 'get' - }) - }) - - it('getServiceMasterCopiesInfo', async () => { - await chai - .expect(serviceSdk.getServiceMasterCopiesInfo()) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/about/master-copies`, - method: 'get' - }) - }) - - it('decodeData', async () => { - const data = '0x610b592500000000000000000000000090F8bf6A479f320ead074411a4B0e7944Ea8c9C1' - await chai - .expect(serviceSdk.decodeData(data)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/data-decoder/`, - method: 'post', - body: { data } - }) - }) - - it('getSafesByOwner', async () => { - await chai - .expect(serviceSdk.getSafesByOwner(randomAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/owners/${randomAddress}/safes/`, - method: 'get' - }) - }) - - it('getSafesByOwner EIP-3770', async () => { - await chai - .expect(serviceSdk.getSafesByOwner(eip3770RandomAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/owners/${randomAddress}/safes/`, - method: 'get' - }) - }) - - it('getTransaction', async () => { - await chai - .expect(serviceSdk.getTransaction(safeTxHash)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/multisig-transactions/${safeTxHash}/`, - method: 'get' - }) - }) - - it('getTransactionConfirmations', async () => { - await chai - .expect(serviceSdk.getTransactionConfirmations(safeTxHash)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/multisig-transactions/${safeTxHash}/confirmations/`, - method: 'get' - }) - }) - - it('confirmTransaction', async () => { - const signature = '0x' - await chai - .expect(serviceSdk.confirmTransaction(safeTxHash, signature)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/multisig-transactions/${safeTxHash}/confirmations/`, - method: 'get' - }) - }) - - it('getSafeInfo', async () => { - await chai - .expect(serviceSdk.getSafeInfo(safeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/`, - method: 'get' - }) - }) - - it('getSafeInfo EIP-3770', async () => { - await chai - .expect(serviceSdk.getSafeInfo(eip3770SafeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/`, - method: 'get' - }) - }) - - it('getSafeDelegates', async () => { - await chai - .expect(serviceSdk.getSafeDelegates(safeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/`, - method: 'get' - }) - }) - - it('getSafeDelegates EIP-3770', async () => { - await chai - .expect(serviceSdk.getSafeDelegates(eip3770SafeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/`, - method: 'get' - }) - }) - - it('addSafeDelegate', async () => { - const delegateConfig: SmartAccountDelegateConfig = { - safe: safeAddress, - delegate: delegateAddress, - signer, - label: '' - } - await chai - .expect(serviceSdk.addSafeDelegate(delegateConfig)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/`, - method: 'get' - }) - }) - - it('addSafeDelegate EIP-3770', async () => { - const delegateConfig: SmartAccountDelegateConfig = { - safe: eip3770SafeAddress, - delegate: eip3770DelegateAddress, - signer, - label: '' - } - await chai - .expect(serviceSdk.addSafeDelegate(delegateConfig)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/`, - method: 'get' - }) - }) - - it('removeAllSafeDelegates', async () => { - const totp = Math.floor(Date.now() / 1000 / 3600) - const data = safeAddress + totp - const signature = await signer.signMessage(data) - await chai - .expect(serviceSdk.removeAllSafeDelegates(safeAddress, signer)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/`, - method: 'delete', - body: { signature } - }) - }) - - it('removeAllSafeDelegates EIP-3770', async () => { - const totp = Math.floor(Date.now() / 1000 / 3600) - const data = safeAddress + totp - const signature = await signer.signMessage(data) - await chai - .expect(serviceSdk.removeAllSafeDelegates(eip3770SafeAddress, signer)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/`, - method: 'delete', - body: { signature } - }) - }) - - it('removeSafeDelegate', async () => { - const delegate = delegateAddress - const delegateConfig: SmartAccountDelegateDeleteConfig = { - safe: safeAddress, - delegate, - signer - } - const totp = Math.floor(Date.now() / 1000 / 3600) - const data = delegate + totp - const signature = await signer.signMessage(data) - await chai - .expect(serviceSdk.removeSafeDelegate(delegateConfig)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/delegates/${ - delegateConfig.delegate - }`, - method: 'delete', - body: { - safe: delegateConfig.safe, - delegate: delegateConfig.delegate, - signature - } - }) - }) - - it('removeSafeDelegate', async () => { - const delegate = delegateAddress - const delegateConfig: SmartAccountDelegateDeleteConfig = { - safe: eip3770SafeAddress, - delegate: eip3770DelegateAddress, - signer - } - const totp = Math.floor(Date.now() / 1000 / 3600) - const data = delegate + totp - const signature = await signer.signMessage(data) - await chai - .expect(serviceSdk.removeSafeDelegate(delegateConfig)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/delegates/${delegateAddress}`, - method: 'delete', - body: { - safe: safeAddress, - delegate: delegateAddress, - signature - } - }) - }) - - it('getSafeCreationInfo', async () => { - await chai - .expect(serviceSdk.getSafeCreationInfo(safeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/creation/`, - method: 'get' - }) - }) - - it('getSafeCreationInfo EIP-3770', async () => { - await chai - .expect(serviceSdk.getSafeCreationInfo(eip3770SafeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/creation/`, - method: 'get' - }) - }) - - it('estimateSafeTransaction', async () => { - const safeTransaction: SafeMultisigTransactionEstimate = { - to: randomAddress, - value: '0', - data: '0x', - operation: 0 - } - await chai - .expect(serviceSdk.estimateSafeTransaction(safeAddress, safeTransaction)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/multisig-transactions/estimations/`, - method: 'post', - body: safeTransaction - }) - }) - - it('estimateSafeTransaction EIP-3770', async () => { - const safeTransaction: SafeMultisigTransactionEstimate = { - to: randomAddress, - value: '0', - data: '0x', - operation: 0 - } - await chai - .expect(serviceSdk.estimateSafeTransaction(eip3770SafeAddress, safeTransaction)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/multisig-transactions/estimations/`, - method: 'post', - body: safeTransaction - }) - }) - - it('proposeTransaction', async () => { - const safeTxData: SmartAccountTrxDataPartial = { - to: safeAddress, - data: '0x', - value: '123456789', - operation: 1, - targetTxGas: 0, - baseGas: 0, - gasPrice: 0, - gasToken: '0x0000000000000000000000000000000000000000', - refundReceiver: '0x0000000000000000000000000000000000000000', - nonce: 1 - } - const origin = 'Safe Core SDK: Safe Service Client' - const signerAddress = await signer.getAddress() - const safeSdk = await Safe.create({ ethAdapter, safeAddress }) - const safeTransaction = await safeSdk.createTransaction(safeTxData) - await safeSdk.signTransaction(safeTransaction) - await chai - .expect( - serviceSdk.proposeTransaction({ - safeAddress, - senderAddress: signerAddress, - safeTransaction, - safeTxHash, - origin - }) - ) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/multisig-transactions/`, - method: 'post', - body: { - ...safeTxData, - contractTransactionHash: safeTxHash, - sender: safeTransaction.signatures.get(signerAddress.toLowerCase())?.signer, - signature: safeTransaction.signatures.get(signerAddress.toLowerCase())?.data, - origin - } - }) - }) - - it('proposeTransaction EIP-3770', async () => { - const safeTxData: SmartAccountTrxDataPartial = { - to: safeAddress, - data: '0x', - value: '123456789', - operation: 1, - targetTxGas: 0, - baseGas: 0, - gasPrice: 0, - gasToken: '0x0000000000000000000000000000000000000000', - refundReceiver: '0x0000000000000000000000000000000000000000', - nonce: 1 - } - const origin = 'Safe Core SDK: Safe Service Client' - const signerAddress = await signer.getAddress() - const safeSdk = await Safe.create({ ethAdapter, safeAddress }) - const safeTransaction = await safeSdk.createTransaction(safeTxData) - await safeSdk.signTransaction(safeTransaction) - await chai - .expect( - serviceSdk.proposeTransaction({ - safeAddress: eip3770SafeAddress, - senderAddress: `${config.EIP_3770_PREFIX}:${signerAddress}`, - safeTransaction, - safeTxHash, - origin - }) - ) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/multisig-transactions/`, - method: 'post', - body: { - ...safeTxData, - contractTransactionHash: safeTxHash, - sender: safeTransaction.signatures.get(signerAddress.toLowerCase())?.signer, - signature: safeTransaction.signatures.get(signerAddress.toLowerCase())?.data, - origin - } - }) - }) - - it('getIncomingTransactions', async () => { - await chai - .expect(serviceSdk.getIncomingTransactions(safeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/incoming-transfers/`, - method: 'get' - }) - }) - - it('getIncomingTransactions EIP-3770', async () => { - await chai - .expect(serviceSdk.getIncomingTransactions(eip3770SafeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/incoming-transfers/`, - method: 'get' - }) - }) - - it('getModuleTransactions', async () => { - await chai - .expect(serviceSdk.getModuleTransactions(safeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/module-transactions/`, - method: 'get' - }) - }) - - it('getModuleTransactions EIP-3770', async () => { - await chai - .expect(serviceSdk.getModuleTransactions(eip3770SafeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/module-transactions/`, - method: 'get' - }) - }) - - it('getMultisigTransactions', async () => { - await chai - .expect(serviceSdk.getMultisigTransactions(safeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/multisig-transactions/`, - method: 'get' - }) - }) - - it('getMultisigTransactions EIP-3770', async () => { - await chai - .expect(serviceSdk.getMultisigTransactions(eip3770SafeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/safes/${safeAddress}/multisig-transactions/`, - method: 'get' - }) - }) - - it('getPendingTransactions', async () => { - const currentNonce = 1 - await chai - .expect(serviceSdk.getPendingTransactions(safeAddress, currentNonce)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/multisig-transactions/?executed=false&nonce__gte=${currentNonce}`, - method: 'get' - }) - }) - - it('getPendingTransactions EIP-3770', async () => { - const currentNonce = 1 - await chai - .expect(serviceSdk.getPendingTransactions(eip3770SafeAddress, currentNonce)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/multisig-transactions/?executed=false&nonce__gte=${currentNonce}`, - method: 'get' - }) - }) - - it('getAllTransactions', async () => { - await chai - .expect(serviceSdk.getAllTransactions(safeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/all-transactions/?trusted=true&queued=true&executed=false`, - method: 'get' - }) - }) - - it('getAllTransactions EIP-3770', async () => { - await chai - .expect(serviceSdk.getAllTransactions(eip3770SafeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/all-transactions/?trusted=true&queued=true&executed=false`, - method: 'get' - }) - }) - - it('getBalances', async () => { - await chai - .expect(serviceSdk.getBalances(safeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/balances/?exclude_spam=true`, - method: 'get' - }) - }) - - it('getBalances EIP-3770', async () => { - await chai - .expect(serviceSdk.getBalances(eip3770SafeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/balances/?exclude_spam=true`, - method: 'get' - }) - }) - - it('getBalances (with options)', async () => { - const options: SafeBalancesOptions = { - excludeSpamTokens: false - } - await chai - .expect(serviceSdk.getBalances(safeAddress, options)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/balances/?exclude_spam=false`, - method: 'get' - }) - }) - - it('getUsdBalances', async () => { - await chai - .expect(serviceSdk.getUsdBalances(safeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/balances/usd/?exclude_spam=true`, - method: 'get' - }) - }) - - it('getUsdBalances EIP-3770', async () => { - await chai - .expect(serviceSdk.getUsdBalances(eip3770SafeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/balances/usd/?exclude_spam=true`, - method: 'get' - }) - }) - - it('getUsdBalances (with options)', async () => { - const options: SafeBalancesUsdOptions = { - excludeSpamTokens: false - } - await chai - .expect(serviceSdk.getUsdBalances(safeAddress, options)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/balances/usd/?exclude_spam=false`, - method: 'get' - }) - }) - - it('getCollectibles', async () => { - await chai - .expect(serviceSdk.getCollectibles(safeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/collectibles/?exclude_spam=true`, - method: 'get' - }) - }) - - it('getCollectibles EIP-3770', async () => { - await chai - .expect(serviceSdk.getCollectibles(eip3770SafeAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/collectibles/?exclude_spam=true`, - method: 'get' - }) - }) - - it('getCollectibles (with options)', async () => { - const options: SafeCollectiblesOptions = { - excludeSpamTokens: false - } - await chai - .expect(serviceSdk.getCollectibles(safeAddress, options)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl( - txServiceBaseUrl - )}/safes/${safeAddress}/collectibles/?exclude_spam=false`, - method: 'get' - }) - }) - - it('getTokens', async () => { - await chai - .expect(serviceSdk.getTokenList()) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/tokens/`, - method: 'get' - }) - }) - - it('getToken', async () => { - await chai - .expect(serviceSdk.getToken(tokenAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/tokens/${tokenAddress}/`, - method: 'get' - }) - }) - - it('getToken EIP-3770', async () => { - await chai - .expect(serviceSdk.getToken(eip3770TokenAddress)) - .to.be.eventually.deep.equals({ data: { success: true } }) - chai.expect(fetchData).to.have.been.calledWith({ - url: `${getTxServiceBaseUrl(txServiceBaseUrl)}/tokens/${tokenAddress}/`, - method: 'get' - }) - }) - }) -}) diff --git a/packages/node-client/tests/utils/config.ts b/packages/node-client/tests/utils/config.ts deleted file mode 100644 index 1a718e490..000000000 --- a/packages/node-client/tests/utils/config.ts +++ /dev/null @@ -1,8 +0,0 @@ -const config = { - // Temp - BASE_URL: 'http://localhost:3000/v1', - JSON_RPC: `https://rinkeby.infura.io/v3/${process.env.INFURA_KEY}`, - EIP_3770_PREFIX: 'rin' -} - -export default config diff --git a/packages/node-client/tests/utils/setupEthAdapter.ts b/packages/node-client/tests/utils/setupEthAdapter.ts deleted file mode 100644 index 78d82ce2e..000000000 --- a/packages/node-client/tests/utils/setupEthAdapter.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Signer } from '@ethersproject/abstract-signer' -import { EthAdapter } from '@gnosis.pm/safe-core-sdk-types' -import EthersAdapter, { EthersAdapterConfig } from '@gnosis.pm/safe-ethers-lib' -import Web3Adapter, { Web3AdapterConfig } from '@gnosis.pm/safe-web3-lib' -import { ethers, web3 } from 'hardhat' - -export async function getEthAdapter(signer: Signer): Promise { - let ethAdapter: EthAdapter - switch (process.env.ETH_LIB) { - case 'web3': - const signerAddress = await signer.getAddress() - const web3AdapterConfig: Web3AdapterConfig = { web3: web3 as any, signerAddress } - ethAdapter = new Web3Adapter(web3AdapterConfig) - break - case 'ethers': - const ethersAdapterConfig: EthersAdapterConfig = { ethers, signer } - ethAdapter = new EthersAdapter(ethersAdapterConfig) - break - default: - throw new Error('Ethereum library not supported') - } - return ethAdapter -} diff --git a/packages/node-client/tests/utils/setupServiceClient.ts b/packages/node-client/tests/utils/setupServiceClient.ts deleted file mode 100644 index 3e667315b..000000000 --- a/packages/node-client/tests/utils/setupServiceClient.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { getDefaultProvider } from '@ethersproject/providers' -import { Wallet } from '@ethersproject/wallet' -import { EthAdapter } from '@gnosis.pm/safe-core-sdk-types' -import NodeClient from '../../src' -import config from './config' -import { getEthAdapter } from './setupEthAdapter' - -interface ServiceClientConfig { - serviceSdk: NodeClient - ethAdapter: EthAdapter - signer: Wallet -} - -export async function getServiceClient(signerPk: string): Promise { - const provider = getDefaultProvider(config.JSON_RPC) - const signer = new Wallet(signerPk, provider) - const ethAdapter = await getEthAdapter(signer) - const serviceSdk = new NodeClient({ txServiceUrl: config.BASE_URL /*,ethAdapter*/ }) - return { serviceSdk, ethAdapter, signer } -} diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index b9a6d42b4..a2c028c64 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -1,11 +1,5 @@ -import { ethers, providers } from 'ethers' -import { TransactionRequest, TransactionResponse } from '@ethersproject/providers' -import { - SignedTransaction, - RawTransactionType, - SmartAccountState, - SmartAccountContext -} from '@biconomy-sdk/core-types' +import { TransactionResponse } from '@ethersproject/providers' +import { SignedTransaction, SmartAccountState, SmartAccountContext } from '@biconomy-sdk/core-types' export interface Relayer { // relayer will submit the transaction(s) to the network and return the transaction response. diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index e20505e17..161acbc00 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -1,14 +1,8 @@ -import { TransactionRequest, TransactionResponse } from '@ethersproject/providers' -import { RawTransactionType } from '@biconomy-sdk/core-types' +import { TransactionResponse } from '@ethersproject/providers' import { Signer as AbstractSigner, ethers } from 'ethers' import { Relayer } from '.' import { - SmartWalletFactoryContract, - SmartWalletContract, - MultiSendContract, - MultiSendCallOnlyContract, - TransactionResult, SmartAccountContext, SmartAccountState, SignedTransaction, diff --git a/packages/relayer/src/utils/multisend.ts b/packages/relayer/src/utils/multisend.ts index d65c6eef4..562817a38 100644 --- a/packages/relayer/src/utils/multisend.ts +++ b/packages/relayer/src/utils/multisend.ts @@ -30,31 +30,31 @@ export const buildContractCall = ( delegateCall?: boolean, overrides?: Partial ): WalletTransaction => { - const data = contract.interface.encodeFunctionData(method, params); - return buildSmartAccountTransaction( - Object.assign( - { - to: contract.address, - data, - operation: delegateCall ? 1 : 0, - nonce, - }, - overrides - ) - ); -}; + const data = contract.interface.encodeFunctionData(method, params) + return buildSmartAccountTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }, + overrides + ) + ) +} export const buildSmartAccountTransaction = (template: { - to: string; - value?: BigNumberish; - data?: string; - operation?: number; - targetTxGas?: number | string; - baseGas?: number | string; - gasPrice?: number | string; - gasToken?: string; - refundReceiver?: string; - nonce: number; + to: string + value?: BigNumberish + data?: string + operation?: number + targetTxGas?: number | string + baseGas?: number | string + gasPrice?: number | string + gasToken?: string + refundReceiver?: string + nonce: number }): WalletTransaction => { return { to: template.to, @@ -84,10 +84,10 @@ export const encodeMultiSend = (txs: MetaTransaction[]): string => { } export const buildMultiSendSmartAccountTx = ( - multiSend: Contract, - txs: MetaTransaction[], - nonce: number, - overrides?: Partial + multiSend: Contract, + txs: MetaTransaction[], + nonce: number, + overrides?: Partial ): WalletTransaction => { return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 91291bb71..b6e209013 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -1,13 +1,6 @@ -import { - SmartAccountConfig, - ChainId, - ChainConfig, - SmartAccountContext, - Transaction, - ChainConfigResponse -} from './types' +import { SmartAccountConfig, Transaction } from './types' import EthersAdapter from '@biconomy-sdk/ethers-lib' -import { ethers, providers, Wallet } from 'ethers' +import { ethers } from 'ethers' import { getSmartWalletFactoryContract, getMultiSendContract, @@ -15,6 +8,8 @@ import { getSmartWalletContract } from './utils/FetchContractsInfo' import { + ChainId, + SmartAccountContext, SmartWalletFactoryContract, SmartWalletContract, MultiSendContract, @@ -22,20 +17,19 @@ import { RawTransactionType, SmartAccountState } from '@biconomy-sdk/core-types' -import { JsonRpcSigner, TransactionRequest, TransactionResponse } from '@ethersproject/providers' -import NodeClient from '@biconomy-sdk/node-client' +import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' +import NodeClient, { ChainConfig, SupportedChainsResponse } from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' -import { Relayer, LocalRelayer } from '@biconomy-sdk/relayer' +import { Relayer } from '@biconomy-sdk/relayer' import { WalletTransaction, ExecTransaction, FeeRefund, - SmartAccountTransaction, - getSignatureParameters, - EIP712_WALLET_TX_TYPE, - buildSmartAccountTransaction, - smartAccountSignMessage + buildSmartAccountTransaction, + smartAccountSignMessage } from '@biconomy-sdk/transactions' +import { BalancesDto } from '@biconomy-sdk/node-client' +import { BalancesRespose, UsdBalanceResponse } from '@biconomy-sdk/node-client' // Create an instance of Smart Account with multi-chain support. class SmartAccount { @@ -46,7 +40,7 @@ class SmartAccount { // Smart Account Context provies relevant contract instances for chainId asked (default is current active chain) context!: { [chainId: number]: SmartAccountContext } - // Optional config to initialise instance of Smart Account. One can provide main active chain and only limited chains they need to be on. + // Optional config to initialise instance of Smart Account. One can provide main active chain and only limited chains they need to be on. #smartAccountConfig!: SmartAccountConfig // Array of chain ids that current multi-chain instance supports @@ -67,9 +61,9 @@ class SmartAccount { // other methods are useful for the widget relayer!: Relayer - // Owner of the Smart Account common between all chains + // Owner of the Smart Account common between all chains // Could be part of Smart Account state / config - // @review with Sachin + // @review with Sachin owner!: string // Address of the smart contract wallet common between all chains @@ -82,7 +76,6 @@ class SmartAccount { multiSendCallOnlyContract!: { [chainId: number]: MultiSendCallOnlyContract } smartWalletFactoryContract!: { [chainId: number]: SmartWalletFactoryContract } - // TODO // Review provider type WalletProviderLike / ExternalProvider // Can expose recommended provider classes through the SDK @@ -90,8 +83,7 @@ class SmartAccount { /**Constrcutor for the Smart Account. If config is not provided it makes Smart Contract available using default configuration * If you wish to use your own backend server and relayer service, pass the URLs here */ - constructor(walletProvider:Web3Provider ,config?: Partial) { - + constructor(walletProvider: Web3Provider, config?: Partial) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } if (config) { this.#smartAccountConfig = { ...this.#smartAccountConfig, ...config } @@ -115,24 +107,23 @@ class SmartAccount { // add a flag initialised which gets checked before calling other functions /** - * + * * @returns this/self - instance of SmartAccount */ public async init(): Promise { - const chainConfig = (await this.getSupportedChainsInfo()).data; - this.chainConfig = chainConfig; + const chainConfig = (await this.getSupportedChainsInfo()).data + this.chainConfig = chainConfig // console.log("chain config: ", chainConfig); - - const signer = this.signer; + const signer = this.signer // (check usage of getsignerByAddress from mexa/sdk and playground) - for(let i=0; i < this.supportedNetworkIds.length; i++) { - const network = this.supportedNetworkIds[i]; - const providerUrl = chainConfig.find(n => n.chainId === network)?.providerUrl; + for (let i = 0; i < this.supportedNetworkIds.length; i++) { + const network = this.supportedNetworkIds[i] + const providerUrl = chainConfig.find((n) => n.chainId === network)?.providerUrl // To keep it network agnostic // Note: think about events when signer needs to pay gas - const readProvider = new ethers.providers.JsonRpcProvider(providerUrl); + const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable this.ethAdapter[network] = new EthersAdapter({ ethers, @@ -140,61 +131,72 @@ class SmartAccount { provider: readProvider }) - this.initializeContracts(network); - } - + this.initializeContracts(network) + } + // We set the common owner by quering default active chainId ethAdapter - this.owner = await this.ethersAdapter().getSignerAddress(); + this.owner = await this.ethersAdapter().getSignerAddress() // @review // Smart Account addresses gets set by querying active chain's wallet factory (along with owner and index = 0) - this.address = await this.getAddress(); - return this; + this.address = await this.getAddress() + return this } // Intialize contracts to be used throughout this class private initializeContracts(chainId: ChainId) { // We get the addresses using chainConfig fetched from backend node - const smartWalletAddress = this.chainConfig.find(n => n.chainId === chainId)?.walletAddress || ''; - const smartWalletFactoryAddress = this.chainConfig.find(n => n.chainId === chainId)?.walletFactoryAddress || ''; - const multiSendAddress = this.chainConfig.find(n => n.chainId === chainId)?.multiSendAddress || ''; - const multiSendCallAddress = this.chainConfig.find(n => n.chainId === chainId)?.multiSendCallAddress || ''; - + const smartWalletAddress = + this.chainConfig.find((n) => n.chainId === chainId)?.walletAddress || '' + const smartWalletFactoryAddress = + this.chainConfig.find((n) => n.chainId === chainId)?.walletFactoryAddress || '' + const multiSendAddress = + this.chainConfig.find((n) => n.chainId === chainId)?.multiSendAddress || '' + const multiSendCallAddress = + this.chainConfig.find((n) => n.chainId === chainId)?.multiSendCallAddress || '' this.smartWalletFactoryContract[chainId] = getSmartWalletFactoryContract( this.ethAdapter[chainId], smartWalletFactoryAddress - ); + ) // NOTE/TODO : attached address is not wallet address yet this.smartWalletContract[chainId] = getSmartWalletContract( this.ethAdapter[chainId], smartWalletAddress - ); + ) this.multiSendContract[chainId] = getMultiSendContract( this.ethAdapter[chainId], multiSendAddress - ); - + ) + this.multiSendCallOnlyContract[chainId] = getMultiSendCallOnlyContract( this.ethAdapter[chainId], multiSendCallAddress - ); + ) } /** * Fetch supported chainInfo from backend node : used in init * @returns ChainConfig response received from backend node */ - private async getSupportedChainsInfo(): Promise { + private async getSupportedChainsInfo(): Promise { return this.nodeClient.getAllSupportedChains() } + private async getAlltokenBalances(balancesDto: BalancesDto): Promise { + return this.nodeClient.getAlltokenBalances(balancesDto) + } + + private async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { + return this.nodeClient.getTotalBalanceInUsd(balancesDto) + } + // return adapter instance to be used for blockchain interactions /** * adapter instance to be used for some blockchain interactions * @param chainId requested chainId : default is current active chain - * @returns EthersAdapter + * @returns EthersAdapter */ ethersAdapter(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): EthersAdapter { return this.ethAdapter[chainId] @@ -205,18 +207,18 @@ class SmartAccount { * Assigns transaction relayer to this smart wallet instance * @notice Assumption is that relayer will accept calls for all supported chains * @param relayer Relayer client to be associated with this smart account - * @returns this/self + * @returns this/self */ setRelayer(relayer: Relayer): SmartAccount { if (relayer === undefined) return this this.relayer = relayer return this } - + /** * Allows to change default active chain of the Smart Account * @todo make a check if chain is supported in config - * @param chainId + * @param chainId * @returns self/this */ setActiveChain(chainId: ChainId): SmartAccount { @@ -227,38 +229,39 @@ class SmartAccount { // Can also add := sendSignedTransaction /** - * + * * @notice personal sign is used currently (// @todo Signer should be able to use _typedSignData) * @param tx WalletTransaction Smart Account Transaction object prepared * @param chainId optional chainId - * @returns:string Signature + * @returns:string Signature */ - async signTransaction(tx: WalletTransaction, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - - let walletContract = this.smartAccount(chainId).getContract(); - walletContract = walletContract.attach(this.address); + async signTransaction( + tx: WalletTransaction, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + let walletContract = this.smartAccount(chainId).getContract() + walletContract = walletContract.attach(this.address) // TODO - rename and organize utils - const { signer, data } = await smartAccountSignMessage( - this.signer, - walletContract, - tx, - chainId - ); - - let signature = "0x"; - signature += data.slice(2); - return signature; + const { signer, data } = await smartAccountSignMessage(this.signer, walletContract, tx, chainId) + + let signature = '0x' + signature += data.slice(2) + return signature } /** * Prepares encoded wallet transaction, gets signature from the signer and dispatches to the blockchain using relayer * @param tx WalletTransaction Smart Account Transaction object prepared - * @param batchId optional nonce space for parallel processing + * @param batchId optional nonce space for parallel processing * @param chainId optional chainId - * @returns + * @returns */ - async sendTransaction(tx:WalletTransaction, batchId:number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + async sendTransaction( + tx: WalletTransaction, + batchId: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { let rawTx: RawTransactionType = { to: tx.to, data: tx.data, @@ -280,7 +283,7 @@ class SmartAccount { gasToken: tx.gasToken, refundReceiver: tx.refundReceiver } - + let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) @@ -311,21 +314,25 @@ class SmartAccount { * Prepares compatible WalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction * @notice This transaction is without fee refund (gasless) - * @param transaction - * @param batchId - * @param chainId - * @returns + * @param transaction + * @param batchId + * @param chainId + * @returns */ - async createSmartAccountTransaction(transaction: Transaction, batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - let walletContract = this.smartAccount(chainId).getContract(); - walletContract = walletContract.attach(this.address); - + async createSmartAccountTransaction( + transaction: Transaction, + batchId: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + let walletContract = this.smartAccount(chainId).getContract() + walletContract = walletContract.attach(this.address) + // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0; - if(await this.isDeployed(chainId)) { - nonce = (await walletContract.getNonce(batchId)).toNumber(); - } - console.log('nonce: ', nonce); + let nonce = 0 + if (await this.isDeployed(chainId)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } + console.log('nonce: ', nonce) const walletTx: WalletTransaction = buildSmartAccountTransaction({ to: transaction.to, @@ -338,20 +345,20 @@ class SmartAccount { } /** - * + * * @param chainId optional chainId * @returns Smart Wallet Contract instance attached with current smart account address (proxy) */ smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { const smartWallet = this.smartWalletContract[chainId] // Review @talha - const address = this.address; - smartWallet.getContract().attach(address); - return smartWallet; + const address = this.address + smartWallet.getContract().attach(address) + return smartWallet } /** - * + * * @param chainId optional chainId * @returns Smart Wallet Factory instance for requested chainId */ @@ -360,7 +367,7 @@ class SmartAccount { } /** - * + * * @param chainId optional chainId * @returns MultiSend contract instance for requested chainId */ @@ -375,22 +382,27 @@ class SmartAccount { * @param chainId optional chainId * @returns MultiSend Call Only contract instance for requested chainId */ - multiSendCall(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendCallOnlyContract { + multiSendCall( + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): MultiSendCallOnlyContract { return this.multiSendCallOnlyContract[chainId] } /** - * @review + * @review * returns address of Smart account by actually calling appropriate Wallet Factory contract * This method is used in init * @param index optional index : Indexes are relevant if the owner/signatory EOA deployed/wants to deploy multiple Smart Accounts * @param chainId optional chainId * @returns Address of the Smart Account */ - async getAddress(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId) : Promise { - const address = await this.getAddressForCounterfactualWallet(index,chainId); - this.address = address; - return address; + async getAddress( + index: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + const address = await this.getAddressForCounterfactualWallet(index, chainId) + this.address = address + return address // return await this.getAddressForCounterfactualWallet(index,chainId); } @@ -399,10 +411,9 @@ class SmartAccount { * @review * @notice the check is made on Wallet Factory state with current address in Smart Account state * @param chainId optional chainId : Default is current active - * @returns + * @returns */ async isDeployed(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - // Other approach : needs review and might be coming wrong // const readProvider = new ethers.providers.JsonRpcProvider(networks[chainId].providerUrl); // const walletCode = await readProvider.getCode(await this.getAddress(chainId)); @@ -417,9 +428,13 @@ class SmartAccount { * @param chainId requested chain : default is active chain * @returns object containing infromation (owner, relevant contract addresses, isDeployed) about Smart Account for requested chain */ - async getSmartAccountState(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - const entryPoint = this.chainConfig.find(n => n.chainId === chainId)?.entryPoint; - const fallbackHandlerAddress = this.chainConfig.find(n => n.chainId === chainId)?.fallBackHandler; + async getSmartAccountState( + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + const entryPoint = this.chainConfig.find((n) => n.chainId === chainId)?.entryPoint + const fallbackHandlerAddress = this.chainConfig.find( + (n) => n.chainId === chainId + )?.fallBackHandler const state: SmartAccountState = { address: this.address, owner: this.owner, @@ -430,14 +445,16 @@ class SmartAccount { return state } - // + // /** * Serves smart contract instances associated with Smart Account for requested ChainId - * Context is useful when relayer is deploying a wallet + * Context is useful when relayer is deploying a wallet * @param chainId requested chain : default is active chain * @returns object containing relevant contract instances */ - getSmartAccountContext(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartAccountContext { + getSmartAccountContext( + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): SmartAccountContext { const context: SmartAccountContext = { baseWallet: this.smartAccount(chainId), //might as well do getContract and attach and return contract walletFactory: this.factory(chainId), @@ -465,10 +482,14 @@ class SmartAccount { * @description return address for Smart account * @returns */ - private async getAddressForCounterfactualWallet(index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - return await this.smartWalletFactoryContract[ - chainId - ].getAddressForCounterfactualWallet(this.owner, index) + private async getAddressForCounterfactualWallet( + index: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + return await this.smartWalletFactoryContract[chainId].getAddressForCounterfactualWallet( + this.owner, + index + ) } } diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index e51731f63..34f3c40fb 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -1,12 +1,8 @@ import { BytesLike, Wallet, BigNumberish } from 'ethers' -import { ExternalProvider, Web3Provider } from '@ethersproject/providers' import { - MultiSendContract, - SmartWalletFactoryContract, - SmartWalletContract, - MultiSendCallOnlyContract + ChainNames, + ChainId, } from '@biconomy-sdk/core-types' - // walletProvider: WalletProviderLike // TODO : Ability to provide custom URLs for all supported networks export interface SmartAccountConfig { @@ -31,27 +27,12 @@ export interface Transaction { export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' -export interface SmartAccountState { - address: string - owner: string - isDeployed: boolean - entryPointAddress: string - fallbackHandlerAddress: string -} - -export interface SmartAccountContext { - baseWallet: SmartWalletContract - walletFactory: SmartWalletFactoryContract - multiSend: MultiSendContract - multiSendCall: MultiSendCallOnlyContract -} - // reference i could work on export interface WalletProvider { readonly type?: string readonly wallet?: Wallet readonly address: string - readonly networkName?: NetworkNames + readonly chainName?: ChainNames signMessage(message: BytesLike): Promise } @@ -60,244 +41,3 @@ export interface WalletLike { } export type WalletProviderLike = string | WalletLike | WalletProvider - -export enum NetworkNames { - Mainnet = 'mainnet', - Ropsten = 'ropsten', - Rinkeby = 'rinkeby', - Goerli = 'goerli', - Kovan = 'kovan', - Xdai = 'xdai', - Bsc = 'bsc', - BscTest = 'bscTest', - Fantom = 'fantom', - FantomTest = 'fantomTest', - Matic = 'matic', - Mumbai = 'mumbai', - Aurora = 'aurora', - AuroraTest = 'auroraTest', - Avalanche = 'avalanche', - Fuji = 'fuji', - Optimism = 'optimism', - OptimismKovan = 'optimismKovan', - Arbitrum = 'arbitrum', - ArbitrumTest = 'arbitrumTest', - Moonbeam = 'moonbeam', - Moonbase = 'moonbase', - Celo = 'celo', - CeloTest = 'celoTest' -} - -export interface ContractInfo { - defaultAddress: string - version: string - abi: any[] - networkAddresses: Record - contractName: string - released: boolean -} - -export enum ChainNames { - // Ethereum - MAINNET, - ROPSTEN, - RINKEBY, - GOERLI, - KOVAN -} - -export enum ChainId { - // Ethereum - MAINNET = 1, - ROPSTEN = 3, - RINKEBY = 4, - GOERLI = 5, - KOVAN = 42, - MUMBAI = 80001, - GANACHE = 1337 //Temp -} -export interface NetworkConfig { - entryPoint: string // abstract account contract - fallbackHandler: string - title?: string - name: string - chainId: number - ensAddress?: string - testnet?: boolean - - blockExplorer?: BlockExplorerConfig - - providerUrl?: string - indexerUrl?: string - relayerUrl?: string - // isDefaultChain identifies the default network. For example, a dapp may run on the Polygon - // network and may configure the wallet to use it as its main/default chain. - isDefaultChain?: boolean -} - -/*export type BlockExplorerConfig = { - name?: string - rootUrl: string - addressUrl?: string - txnHashUrl?: string -}*/ - -export type BlockExplorerConfig = { - address: string - txHash: string - api: string -} - -export type TokenInfo = { - id: number - name: string - symbol: string - blockChain: number - ercType?: string - decimals: number - logoUri: string - address: string - isNativeToken: boolean - isEnabled: boolean - cmcId: number //Verify - price: number //Verify - createdAt: Date - updatedAt: Date -} - -export type ChainConfigResponse = { - message: string - code: number - data: ChainConfig[] -} - -export type ChainConfig = { - chainId: number - name: string - symbol: string - isL2: boolean - isMainnet: boolean - description: string - blockExplorerUriTemplate: BlockExplorerConfig - ensRegistryAddress: string - walletFactoryAddress: string - multiSendAddress: string - multiSendCallAddress: string - walletAddress: string // base wallet - entryPoint: string //should make this address var - fallBackHandler: string //should make this address var - relayerURL: string - providerUrl: string - indexerUrl: string - backendNodeUrl: string - createdAt: Date - updatedAt: Date - token: TokenInfo -} - -export const networks: Record = { - [ChainId.MAINNET]: { - chainId: ChainId.MAINNET, - entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', - fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', - name: 'mainnet', - title: 'Ethereum', - blockExplorer: { - // name: 'Etherscan', - address: 'https://etherscan.io/address', - txHash: 'https://etherscan.io/tx', - api: 'https://api.etherscan.io/' - }, - providerUrl: 'https://mainnet.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' - }, - [ChainId.ROPSTEN]: { - chainId: ChainId.ROPSTEN, - entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', - fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', - name: 'ropsten', - title: 'Ropsten', - testnet: true, - blockExplorer: { - //name: 'Etherscan (Ropsten)', - address: 'https://ropsten.etherscan.io/address', - txHash: 'https://ropsten.etherscan.io/tx', - api: 'https://api.ropsten.etherscan.io/' - }, - providerUrl: 'https://ropsten.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' - }, - [ChainId.RINKEBY]: { - chainId: ChainId.RINKEBY, - entryPoint: '0x1D67cb5Db425bD6Bdf7472c44E6415c6B450Ae0B', - fallbackHandler: '0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4', - name: 'rinkeby', - title: 'Rinkeby', - testnet: true, - blockExplorer: { - //name: 'Etherscan (Rinkeby)', - address: 'https://rinkeby.etherscan.io/address', - txHash: 'https://rinkeby.etherscan.io/tx', - api: 'https://api.rinkeby.etherscan.io/' - }, - providerUrl: 'https://rinkeby.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' - }, - [ChainId.GOERLI]: { - chainId: ChainId.GOERLI, - entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', - fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', - name: 'goerli', - title: 'Goerli', - testnet: true, - blockExplorer: { - //name: 'Etherscan (Goerli)', - address: 'https://goerli.etherscan.io/address', - txHash: 'https://goerli.etherscan.io/tx', - api: 'https://api.goerli.etherscan.io/' - }, - providerUrl: 'https://goerli.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' - }, - [ChainId.KOVAN]: { - chainId: ChainId.KOVAN, - entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', - fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', - name: 'kovan', - title: 'Kovan', - testnet: true, - blockExplorer: { - //name: 'Etherscan (Kovan)', - address: 'https://kovan.etherscan.io/address', - txHash: 'https://kovan.etherscan.io/tx', - api: 'https://api.kovan.etherscan.io/' - }, - providerUrl: 'https://kovan.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' - }, - [ChainId.MUMBAI]: { - chainId: ChainId.MUMBAI, - entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', - fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', - name: 'ropsten', - title: 'Ropsten', - testnet: true, - blockExplorer: { - //name: 'Etherscan (Ropsten)', - address: 'https://ropsten.etherscan.io/address', - txHash: 'https://ropsten.etherscan.io/tx', - api: 'https://api.ropsten.etherscan.io/' - }, - providerUrl: 'https://ropsten.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' - }, - [ChainId.GANACHE]: { - chainId: ChainId.GANACHE, - entryPoint: '0xfb8131c260749c7835a08ccbdb64728de432858e', - fallbackHandler: '0x006b640910f739fec38b936b8efb8f6e3109aaca', - name: 'ropsten', - title: 'Ropsten', - testnet: true, - blockExplorer: { - //name: 'Etherscan (Ropsten)', - address: 'https://ropsten.etherscan.io/address', - txHash: 'https://ropsten.etherscan.io/tx', - api: 'https://api.ropsten.etherscan.io/' - }, - providerUrl: 'https://ropsten.infura.io/v3/c6ed0fff2278441896180f00a2f9ad55' - } -} diff --git a/packages/smart-account/src/utils/FetchContractsInfo.ts b/packages/smart-account/src/utils/FetchContractsInfo.ts index f91c00338..70b55f390 100644 --- a/packages/smart-account/src/utils/FetchContractsInfo.ts +++ b/packages/smart-account/src/utils/FetchContractsInfo.ts @@ -10,13 +10,13 @@ import EthersAdapter from '@biconomy-sdk/ethers-lib' export function getSmartWalletFactoryContract( ethAdapter: EthersAdapter, - address:string + address: string ): SmartWalletFactoryContract { return ethAdapter.getSmartWalletFactoryContract(address) } export function getMultiSendContract( ethAdapter: EthersAdapter, - address:string + address: string ): MultiSendContract { return ethAdapter.getMultiSendContract(address) } diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 0eb7913d5..fefc12076 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -1,7 +1,12 @@ import SmartAccount from '../src/SmartAccount' import { LocalRelayer } from '@biconomy-sdk/relayer' import { Contract, ethers, Signer as AbstractSigner } from 'ethers' -import { JsonRpcProvider, TransactionReceipt, TransactionResponse, Web3Provider } from '@ethersproject/providers'; +import { + JsonRpcProvider, + TransactionReceipt, + TransactionResponse, + Web3Provider +} from '@ethersproject/providers' import chaiAsPromised from 'chai-as-promised' import * as chai from 'chai' @@ -9,11 +14,11 @@ const nock = require('nock') const { expect } = chai.use(chaiAsPromised) -import hardhat from "hardhat"; -import { deployWalletContracts } from './utils/deploy'; +import hardhat from 'hardhat' +import { deployWalletContracts } from './utils/deploy' import { BytesLike, Interface } from 'ethers/lib/utils' -import { Transaction } from '../src/types'; -import { WalletTransaction } from '@biconomy-sdk/core-types'; +import { Transaction } from '../src/types' +import { WalletTransaction } from '@biconomy-sdk/core-types' type EthereumInstance = { chainId?: number @@ -42,7 +47,7 @@ describe('Wallet integration', function () { before(async () => { // Provider from hardhat without a server instance - ethnode.provider = new ethers.providers.Web3Provider(hardhat.network.provider.send); + ethnode.provider = new ethers.providers.Web3Provider(hardhat.network.provider.send) ethnode.signer = ethnode.provider?.getSigner() ethnode.chainId = 1337 }) @@ -52,247 +57,242 @@ describe('Wallet integration', function () { after(async () => {}) describe('Smart account usage and basic actions', () => { - beforeEach(async () => { // adds entry point, multiSendCall and fallbackHandler - const [smartWallet, walletFactory, multiSend, multiSendCallOnly] = await deployWalletContracts(ethnode.signer); - - console.log('base wallet deployed at : ', smartWallet.address); - console.log('wallet factory deployed at : ', walletFactory.address); - console.log('multi send deployed at : ', multiSend.address); - console.log('multi send deployed at : ', multiSendCallOnly.address); + const [smartWallet, walletFactory, multiSend, multiSendCallOnly] = + await deployWalletContracts(ethnode.signer) + console.log('base wallet deployed at : ', smartWallet.address) + console.log('wallet factory deployed at : ', walletFactory.address) + console.log('multi send deployed at : ', multiSend.address) + console.log('multi send deployed at : ', multiSendCallOnly.address) const scope = nock('http://localhost:3000') .persist() .get('/v1/chains/') .reply(200, { - "message": "Success", - "code": 200, - "data": [ - { - "chainId": 4, - "name": "Rinkeby", - "symbol": "ETH", - "isL2": false, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://rinkeby.etherscan.io/address/", - "txHash": "https://rinkeby.etherscan.io/address/", - "api": "https://rinkeby.etherscan.io/" - }, - "ensRegistryAddress": "", - "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "multiSendAddress": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "multiSendCallAddress": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": false, - "walletAddress": "0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284", - "entryPoint": "0xB63F450BbCeaf7D9DdBD35BF52DE1F674DD83e45", - "fallBackHandler": "0x57F2aF40aDF62CA1972224625f105852D2cdB4D1", - "relayerUrl": "", - "providerUrl": "https://rinkeby.infura.io/v3/d126f392798444609246423b06116c77", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "name": "Ethereum", - "symbol": "ETH", - "chainId": 4, - "ercType": "NATIVE", - "decimals": 18, - "logoUri": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", - "address": "null", - "isNativeToken": true, - "isEnabled": true - } + message: 'Success', + code: 200, + data: [ + { + chainId: 4, + name: 'Rinkeby', + symbol: 'ETH', + isL2: false, + isMainnet: false, + description: '', + blockExplorerUriTemplate: { + address: 'https://rinkeby.etherscan.io/address/', + txHash: 'https://rinkeby.etherscan.io/address/', + api: 'https://rinkeby.etherscan.io/' }, - { - "chainId": 5, - "name": "Goerli", - "symbol": "ETH", - "isL2": false, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://goerli.etherscan.io/address/", - "txHash": "https://goerli.etherscan.io/address/", - "api": "https://goerli.etherscan.io/" - }, - "ensRegistryAddress": "", - "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "multiSendAddress": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "multiSendCallAddress": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": false, - "walletAddress": "0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e", - "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", - "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", - "relayerUrl": "", - "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", - "indexerUrl": "", - "backendNodeUrl": "" + ensRegistryAddress: '', + walletFactoryAddress: '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + multiSendAddress: '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + multiSendCallAddress: '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + walletCreatedCallBackEndpoint: 'https://localhost:3000/smart-wallet/', + walletCreatedEventHit: false, + EoaChangedCallBackEndpoint: 'https://localhost:3000/smart-wallet/owner', + EoaChangedEventHit: false, + walletAddress: '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', + entryPoint: '0xB63F450BbCeaf7D9DdBD35BF52DE1F674DD83e45', + fallBackHandler: '0x57F2aF40aDF62CA1972224625f105852D2cdB4D1', + relayerUrl: '', + providerUrl: 'https://rinkeby.infura.io/v3/d126f392798444609246423b06116c77', + indexerUrl: '', + backendNodeUrl: '', + token: { + name: 'Ethereum', + symbol: 'ETH', + chainId: 4, + ercType: 'NATIVE', + decimals: 18, + logoUri: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png', + address: 'null', + isNativeToken: true, + isEnabled: true + } + }, + { + chainId: 5, + name: 'Goerli', + symbol: 'ETH', + isL2: false, + isMainnet: false, + description: '', + blockExplorerUriTemplate: { + address: 'https://goerli.etherscan.io/address/', + txHash: 'https://goerli.etherscan.io/address/', + api: 'https://goerli.etherscan.io/' }, - { - "chainId": 80001, - "name": "Polygon Mumbai", - "symbol": "MATIC", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" - }, - "ensRegistryAddress": "", - "walletFactoryAddress": "0x7146D756D1a95D9916f358b391f029eE0925F9bb", - "multiSendAddress": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "multiSendCallAddress": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": false, - "walletAddress": "0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e", - "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", - "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", - "relayerUrl": "", - "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", - "indexerUrl": "", - "backendNodeUrl": "" + ensRegistryAddress: '', + walletFactoryAddress: '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + multiSendAddress: '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + multiSendCallAddress: '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + walletCreatedCallBackEndpoint: 'https://localhost:3000/smart-wallet/', + walletCreatedEventHit: false, + EoaChangedCallBackEndpoint: 'https://localhost:3000/smart-wallet/owner', + EoaChangedEventHit: false, + walletAddress: '0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e', + entryPoint: '0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d', + fallBackHandler: '0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4', + relayerUrl: '', + providerUrl: 'https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg', + indexerUrl: '', + backendNodeUrl: '' + }, + { + chainId: 80001, + name: 'Polygon Mumbai', + symbol: 'MATIC', + isL2: true, + isMainnet: false, + description: '', + blockExplorerUriTemplate: { + address: 'https://mumbai.polygonscan.com/address/', + txHash: 'https://mumbai.polygonscan.com/address/', + api: 'https://api.mumbai.polygonscan.com/' }, - { - "chainId": 1337, - "name": "Hardhat2", - "symbol": "ETH", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" - }, - "ensRegistryAddress": "", - "walletFactoryAddress": walletFactory.address, - "multiSendAddress": multiSend.address, - "multiSendCallAddress": multiSendCallOnly.address, - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": false, - "walletAddress": smartWallet.address, - "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", - "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", - "relayerUrl": "", - "providerUrl": "http://localhost:8545", - "indexerUrl": "", - "backendNodeUrl": "" - } + ensRegistryAddress: '', + walletFactoryAddress: '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + multiSendAddress: '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + multiSendCallAddress: '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + walletCreatedCallBackEndpoint: 'https://localhost:3000/smart-wallet/', + walletCreatedEventHit: false, + EoaChangedCallBackEndpoint: 'https://localhost:3000/smart-wallet/owner', + EoaChangedEventHit: false, + walletAddress: '0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e', + entryPoint: '0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d', + fallBackHandler: '0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4', + relayerUrl: '', + providerUrl: + 'https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b', + indexerUrl: '', + backendNodeUrl: '' + }, + { + chainId: 1337, + name: 'Hardhat2', + symbol: 'ETH', + isL2: true, + isMainnet: false, + description: '', + blockExplorerUriTemplate: { + address: 'https://mumbai.polygonscan.com/address/', + txHash: 'https://mumbai.polygonscan.com/address/', + api: 'https://api.mumbai.polygonscan.com/' + }, + ensRegistryAddress: '', + walletFactoryAddress: walletFactory.address, + multiSendAddress: multiSend.address, + multiSendCallAddress: multiSendCallOnly.address, + walletCreatedCallBackEndpoint: 'https://localhost:3000/smart-wallet/', + walletCreatedEventHit: false, + EoaChangedCallBackEndpoint: 'https://localhost:3000/smart-wallet/owner', + EoaChangedEventHit: false, + walletAddress: smartWallet.address, + entryPoint: '0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d', + fallBackHandler: '0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4', + relayerUrl: '', + providerUrl: 'http://localhost:8545', + indexerUrl: '', + backendNodeUrl: '' + } ] - }) + }) }) it('Should init and return details of smart account', async () => { - - const userAddress = await ethnode.signer?.getAddress() || ''; + const userAddress = (await ethnode.signer?.getAddress()) || '' const eoaSigner = ethnode.provider?.getSigner() - const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE], // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backend_url: "http://localhost:3000/v1" - }); - + }) - const smartAccount = await wallet.init(); + const smartAccount = await wallet.init() if (eoaSigner) { - const eoa = await eoaSigner.getAddress(); - expect(smartAccount.owner).to.be.equal(eoa); + const eoa = await eoaSigner.getAddress() + expect(smartAccount.owner).to.be.equal(eoa) } - console.log(smartAccount.factory().getAddress()); + console.log(smartAccount.factory().getAddress()) - const signer = await smartAccount.ethersAdapter().getSignerAddress(); + const signer = await smartAccount.ethersAdapter().getSignerAddress() - const address = await smartAccount.getAddress(); - console.log('counter factual wallet address: ', address); + const address = await smartAccount.getAddress() + console.log('counter factual wallet address: ', address) expect(address).to.be.equal(smartAccount.address) - const isDeployed = await smartAccount.isDeployed(); /// can pass chainId here + const isDeployed = await smartAccount.isDeployed() /// can pass chainId here // Check if the smart wallet is deployed or not - const state = await smartAccount.getSmartAccountState(); - console.log('wallet state'); + const state = await smartAccount.getSmartAccountState() + console.log('wallet state') expect(isDeployed).to.be.equal(false) }) it('Should deploy smart and return correct state and context', async () => { - - const userAddress = await ethnode.signer?.getAddress() || ''; + const userAddress = (await ethnode.signer?.getAddress()) || '' const eoaSigner = ethnode.provider?.getSigner() const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE], // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backend_url: "http://localhost:3000/v1" - }); + }) - const smartAccount = await wallet.init(); + const smartAccount = await wallet.init() if (eoaSigner) { - const eoa = await eoaSigner.getAddress(); - expect(smartAccount.owner).to.be.equal(eoa); + const eoa = await eoaSigner.getAddress() + expect(smartAccount.owner).to.be.equal(eoa) } - const signer = await smartAccount.ethersAdapter().getSignerAddress(); - if(eoaSigner) { - const relayer = new LocalRelayer(eoaSigner); - const state = await smartAccount.getSmartAccountState(); - const context = smartAccount.getSmartAccountContext(); - const deployment = await relayer.deployWallet(state,context); // index 0 - const receipt: TransactionReceipt = await deployment.wait(1); - expect(receipt.status).to.be.equal(1); + const signer = await smartAccount.ethersAdapter().getSignerAddress() + if (eoaSigner) { + const relayer = new LocalRelayer(eoaSigner) + const state = await smartAccount.getSmartAccountState() + const context = smartAccount.getSmartAccountContext() + const deployment = await relayer.deployWallet(state, context) // index 0 + const receipt: TransactionReceipt = await deployment.wait(1) + expect(receipt.status).to.be.equal(1) } - const isDeployed = await smartAccount.isDeployed(); /// can pass chainId here + const isDeployed = await smartAccount.isDeployed() /// can pass chainId here expect(isDeployed).to.be.equal(true) - const context = smartAccount.getSmartAccountContext(); - expect(context.baseWallet).to.be.equal(smartAccount.smartAccount()); - expect(context.walletFactory).to.be.equal(smartAccount.factory()); - expect(context.multiSend).to.be.equal(smartAccount.multiSend()); - expect(context.multiSendCall).to.be.equal(smartAccount.multiSendCall()); + const context = smartAccount.getSmartAccountContext() + expect(context.baseWallet).to.be.equal(smartAccount.smartAccount()) + expect(context.walletFactory).to.be.equal(smartAccount.factory()) + expect(context.multiSend).to.be.equal(smartAccount.multiSend()) + expect(context.multiSendCall).to.be.equal(smartAccount.multiSendCall()) }) it('Should be able to sign transaction', async () => { - - const userAddress = await ethnode.signer?.getAddress() || ''; + const userAddress = (await ethnode.signer?.getAddress()) || '' const eoaSigner = ethnode.provider?.getSigner() const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE], // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backend_url: "http://localhost:3000/v1" }) - const smartAccount = await wallet.init(); - - const signerAddress = await smartAccount.ethersAdapter().getSignerAddress(); + const smartAccount = await wallet.init() + + const signerAddress = await smartAccount.ethersAdapter().getSignerAddress() + + const smartAccountAddress = smartAccount.address - const smartAccountAddress = smartAccount.address; - // Wallet would have been deployed already - const isDeployed = await smartAccount.isDeployed(); /// can pass chainId here + const isDeployed = await smartAccount.isDeployed() /// can pass chainId here expect(isDeployed).to.be.equal(true) /*await ethnode.signer?.sendTransaction({ @@ -301,41 +301,39 @@ describe('Wallet integration', function () { value: ethers.utils.parseEther("1"), });*/ - const tx:Transaction = { + const tx: Transaction = { to: signerAddress, - data: "0x", - value: ethers.utils.parseEther("1") - }; + data: '0x', + value: ethers.utils.parseEther('1') + } - const smartAccountTransaction:WalletTransaction = await smartAccount.createSmartAccountTransaction(tx); + const smartAccountTransaction: WalletTransaction = + await smartAccount.createSmartAccountTransaction(tx) - const signature = await smartAccount.signTransaction(smartAccountTransaction); - console.log("signature is: ", signature); + const signature = await smartAccount.signTransaction(smartAccountTransaction) + console.log('signature is: ', signature) }) it('Should be able to switch active chain and return state', async () => { - - const userAddress = await ethnode.signer?.getAddress() || ''; + const userAddress = (await ethnode.signer?.getAddress()) || '' const eoaSigner = ethnode.provider?.getSigner() - const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE], // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backend_url: "http://localhost:3000/v1" - }); - + }) - const smartAccount = await wallet.init(); + const smartAccount = await wallet.init() if (eoaSigner) { - const eoa = await eoaSigner.getAddress(); - expect(smartAccount.owner).to.be.equal(eoa); + const eoa = await eoaSigner.getAddress() + expect(smartAccount.owner).to.be.equal(eoa) } - console.log(smartAccount.factory().getAddress()); + console.log(smartAccount.factory().getAddress()) const signer = await smartAccount.ethersAdapter().getSignerAddress() @@ -344,38 +342,37 @@ describe('Wallet integration', function () { expect(address).to.be.equal(smartAccount.address) - smartAccount.setActiveChain(ChainId.RINKEBY); + smartAccount.setActiveChain(ChainId.RINKEBY) // Now on Rinkeby - const isDeployed = await smartAccount.isDeployed(); /// can pass chainId here + const isDeployed = await smartAccount.isDeployed() /// can pass chainId here // Check if the smart wallet is deployed or not - const state = await smartAccount.getSmartAccountState(); - console.log(state); + const state = await smartAccount.getSmartAccountState() + console.log(state) expect(isDeployed).to.be.equal(false) - expect(state.entryPointAddress).to.be.equal("0xB63F450BbCeaf7D9DdBD35BF52DE1F674DD83e45"); + expect(state.entryPointAddress).to.be.equal('0xB63F450BbCeaf7D9DdBD35BF52DE1F674DD83e45') }) it('Should be able to send transaction', async () => { - - const userAddress = await ethnode.signer?.getAddress() || ''; + const userAddress = (await ethnode.signer?.getAddress()) || '' const eoaSigner = ethnode.provider?.getSigner() const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE], // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backend_url: "http://localhost:3000/v1" - }); + }) - const smartAccount = await wallet.init(); - - const signerAddress = await smartAccount.ethersAdapter().getSignerAddress(); + const smartAccount = await wallet.init() + + const signerAddress = await smartAccount.ethersAdapter().getSignerAddress() + + const smartAccountAddress = smartAccount.address - const smartAccountAddress = smartAccount.address; - // Wallet would have been deployed already - const isDeployed = await smartAccount.isDeployed(); /// can pass chainId here + const isDeployed = await smartAccount.isDeployed() /// can pass chainId here expect(isDeployed).to.be.equal(true) console.log('balance before ', await ethnode.provider?.getBalance(smartAccountAddress)) @@ -383,32 +380,37 @@ describe('Wallet integration', function () { await ethnode.signer?.sendTransaction({ from: signerAddress, to: smartAccountAddress, - value: ethers.utils.parseEther("1"), - }); + value: ethers.utils.parseEther('1') + }) console.log('balance after ', await ethnode.provider?.getBalance(smartAccountAddress)) - const tx:Transaction = { + const tx: Transaction = { to: signerAddress, - data: "0x", - value: ethers.utils.parseEther("0.5") - }; + data: '0x', + value: ethers.utils.parseEther('0.5') + } - const smartAccountTransaction:WalletTransaction = await smartAccount.createSmartAccountTransaction(tx); + const smartAccountTransaction: WalletTransaction = + await smartAccount.createSmartAccountTransaction(tx) // Attach relayer before sending a transaction - const signer = await smartAccount.ethersAdapter().getSignerAddress(); - if(eoaSigner) { - const relayer = new LocalRelayer(eoaSigner); - smartAccount.setRelayer(relayer); - expect(smartAccount.relayer).to.be.equal(relayer); - const response:TransactionResponse = await smartAccount.sendTransaction(smartAccountTransaction); - - const receipt: TransactionReceipt = await response.wait(1); - expect(receipt.status).to.be.equal(1); - console.log('balance after ', await ethnode.provider?.getBalance(smartAccountAddress)) - expect((await ethnode.provider?.getBalance(smartAccountAddress))?.toString()).to.be.equal(ethers.utils.parseEther("0.5").toString()) + const signer = await smartAccount.ethersAdapter().getSignerAddress() + if (eoaSigner) { + const relayer = new LocalRelayer(eoaSigner) + smartAccount.setRelayer(relayer) + expect(smartAccount.relayer).to.be.equal(relayer) + const response: TransactionResponse = await smartAccount.sendTransaction( + smartAccountTransaction + ) + + const receipt: TransactionReceipt = await response.wait(1) + expect(receipt.status).to.be.equal(1) + console.log('balance after ', await ethnode.provider?.getBalance(smartAccountAddress)) + expect((await ethnode.provider?.getBalance(smartAccountAddress))?.toString()).to.be.equal( + ethers.utils.parseEther('0.5').toString() + ) } }) }) diff --git a/packages/smart-account/tests/utils/deploy.ts b/packages/smart-account/tests/utils/deploy.ts index 112ab2504..62ef87029 100644 --- a/packages/smart-account/tests/utils/deploy.ts +++ b/packages/smart-account/tests/utils/deploy.ts @@ -7,22 +7,33 @@ const MultiSendArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contra const MultiSendCallOnlyArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol/MultiSendCallOnly.json') export async function deployWalletContracts( - signer: ethers.Signer + signer: ethers.Signer ): Promise<[Contract, Contract, Contract, Contract]> { - // could get these from type chain - - const smartWallet = (await new ethers.ContractFactory(SmartWalletArtifact.abi, SmartWalletArtifact.bytecode, signer).deploy( - )) as unknown as Contract - - const walletFactory = (await new ethers.ContractFactory(WalletFactoryArtifact.abi, WalletFactoryArtifact.bytecode, signer).deploy(smartWallet.address - )) as unknown as Contract - - const multiSend = (await new ethers.ContractFactory(MultiSendArtifact.abi, MultiSendArtifact.bytecode, signer).deploy( - )) as unknown as Contract - - const multiSendCallOnly = (await new ethers.ContractFactory(MultiSendCallOnlyArtifact.abi, MultiSendCallOnlyArtifact.bytecode, signer).deploy( - )) as unknown as Contract - - return [smartWallet, walletFactory, multiSend, multiSendCallOnly] - + // could get these from type chain + + const smartWallet = (await new ethers.ContractFactory( + SmartWalletArtifact.abi, + SmartWalletArtifact.bytecode, + signer + ).deploy()) as unknown as Contract + + const walletFactory = (await new ethers.ContractFactory( + WalletFactoryArtifact.abi, + WalletFactoryArtifact.bytecode, + signer + ).deploy(smartWallet.address)) as unknown as Contract + + const multiSend = (await new ethers.ContractFactory( + MultiSendArtifact.abi, + MultiSendArtifact.bytecode, + signer + ).deploy()) as unknown as Contract + + const multiSendCallOnly = (await new ethers.ContractFactory( + MultiSendCallOnlyArtifact.abi, + MultiSendCallOnlyArtifact.bytecode, + signer + ).deploy()) as unknown as Contract + + return [smartWallet, walletFactory, multiSend, multiSendCallOnly] } diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index 949d9ab45..428a8c994 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -37,9 +37,9 @@ export const EIP712_WALLET_TX_TYPE = { } export const EIP712_SMART_ACCOUNT_MESSAGE_TYPE = { - // "SmartAccountMessage(bytes message)" - SmartAccountMessage: [{ type: "bytes", name: "message" }], -}; + // "SmartAccountMessage(bytes message)" + SmartAccountMessage: [{ type: 'bytes', name: 'message' }] +} export interface MetaTransaction { to: string @@ -50,12 +50,12 @@ export interface MetaTransaction { // Marked for deletion export interface SmartaccountTransaction extends MetaTransaction { - targetTxGas: string | number; - baseGas: string | number; - gasPrice: string | number; - gasToken: string; - refundReceiver: string; - nonce: string | number; + targetTxGas: string | number + baseGas: string | number + gasPrice: string | number + gasToken: string + refundReceiver: string + nonce: string | number } export interface Transaction { @@ -102,168 +102,162 @@ export interface SmartAccountTransaction { } export interface SmartAccountSignature { - signer: string; - data: string; - } + signer: string + data: string +} export const calculateSmartAccountDomainSeparator = ( - wallet: Contract, - chainId: BigNumberish + wallet: Contract, + chainId: BigNumberish ): string => { - return utils._TypedDataEncoder.hashDomain({ - verifyingContract: wallet.address, - chainId, - }); -}; + return utils._TypedDataEncoder.hashDomain({ + verifyingContract: wallet.address, + chainId + }) +} export const preimageWalletTransactionHash = ( - wallet: Contract, - SmartAccountTx: WalletTransaction, - chainId: BigNumberish + wallet: Contract, + SmartAccountTx: WalletTransaction, + chainId: BigNumberish ): string => { - return utils._TypedDataEncoder.encode( - { verifyingContract: wallet.address, chainId }, - EIP712_WALLET_TX_TYPE, - SmartAccountTx - ); -}; + return utils._TypedDataEncoder.encode( + { verifyingContract: wallet.address, chainId }, + EIP712_WALLET_TX_TYPE, + SmartAccountTx + ) +} export const calculateSmartAccountTransactionHash = ( - wallet: Contract, - SmartAccountTx: WalletTransaction, - chainId: BigNumberish + wallet: Contract, + SmartAccountTx: WalletTransaction, + chainId: BigNumberish ): string => { - return utils._TypedDataEncoder.hash( - { verifyingContract: wallet.address, chainId }, - EIP712_WALLET_TX_TYPE, - SmartAccountTx - ); -}; + return utils._TypedDataEncoder.hash( + { verifyingContract: wallet.address, chainId }, + EIP712_WALLET_TX_TYPE, + SmartAccountTx + ) +} export const calculateSmartAccountMessageHash = ( - wallet: Contract, - message: string, - chainId: BigNumberish + wallet: Contract, + message: string, + chainId: BigNumberish ): string => { - return utils._TypedDataEncoder.hash( - { verifyingContract: wallet.address, chainId }, - EIP712_SMART_ACCOUNT_MESSAGE_TYPE, - { message } - ); -}; + return utils._TypedDataEncoder.hash( + { verifyingContract: wallet.address, chainId }, + EIP712_SMART_ACCOUNT_MESSAGE_TYPE, + { message } + ) +} export const smartAccountSignTypedData = async ( - signer: Signer & TypedDataSigner, - wallet: Contract, - SmartAccountTx: WalletTransaction, - chainId?: BigNumberish + signer: Signer & TypedDataSigner, + wallet: Contract, + SmartAccountTx: WalletTransaction, + chainId?: BigNumberish ): Promise => { - if (!chainId && !signer.provider) - throw Error("Provider required to retrieve chainId"); - const cid = chainId || (await signer.provider!!.getNetwork()).chainId; - const signerAddress = await signer.getAddress(); - return { - signer: signerAddress, - data: await signer._signTypedData( - { verifyingContract: wallet.address, chainId: cid }, - EIP712_WALLET_TX_TYPE, - SmartAccountTx - ), - }; -}; + if (!chainId && !signer.provider) throw Error('Provider required to retrieve chainId') + const cid = chainId || (await signer.provider!!.getNetwork()).chainId + const signerAddress = await signer.getAddress() + return { + signer: signerAddress, + data: await signer._signTypedData( + { verifyingContract: wallet.address, chainId: cid }, + EIP712_WALLET_TX_TYPE, + SmartAccountTx + ) + } +} -export const signHash = async ( - signer: Signer, - hash: string -): Promise => { - const typedDataHash = utils.arrayify(hash); - const signerAddress = await signer.getAddress(); - return { - signer: signerAddress, - data: (await signer.signMessage(typedDataHash)) - .replace(/1b$/, "1f") - .replace(/1c$/, "20"), - }; -}; +export const signHash = async (signer: Signer, hash: string): Promise => { + const typedDataHash = utils.arrayify(hash) + const signerAddress = await signer.getAddress() + return { + signer: signerAddress, + data: (await signer.signMessage(typedDataHash)).replace(/1b$/, '1f').replace(/1c$/, '20') + } +} export const smartAccountSignMessage = async ( - signer: Signer, - wallet: Contract, - SmartAccountTx: WalletTransaction, - chainId?: BigNumberish + signer: Signer, + wallet: Contract, + SmartAccountTx: WalletTransaction, + chainId?: BigNumberish ): Promise => { - const cid = chainId || (await signer.provider!!.getNetwork()).chainId; - return signHash(signer, calculateSmartAccountTransactionHash(wallet, SmartAccountTx, cid)); -}; + const cid = chainId || (await signer.provider!!.getNetwork()).chainId + return signHash(signer, calculateSmartAccountTransactionHash(wallet, SmartAccountTx, cid)) +} export const buildSignatureBytes = (signatures: SmartAccountSignature[]): string => { - signatures.sort((left, right) => - left.signer.toLowerCase().localeCompare(right.signer.toLowerCase()) - ); - let signatureBytes = "0x"; - for (const sig of signatures) { - signatureBytes += sig.data.slice(2); - } - return signatureBytes; -}; + signatures.sort((left, right) => + left.signer.toLowerCase().localeCompare(right.signer.toLowerCase()) + ) + let signatureBytes = '0x' + for (const sig of signatures) { + signatureBytes += sig.data.slice(2) + } + return signatureBytes +} export const executeTx = async ( - wallet: Contract, - SmartAccountTx: WalletTransaction, - signatures: SmartAccountSignature[], - overrides?: any + wallet: Contract, + SmartAccountTx: WalletTransaction, + signatures: SmartAccountSignature[], + overrides?: any ): Promise => { - const signatureBytes = buildSignatureBytes(signatures); - const transaction: ExecTransaction = { - to: SmartAccountTx.to, - value: SmartAccountTx.value, - data: SmartAccountTx.data, - operation: SmartAccountTx.operation, - targetTxGas: SmartAccountTx.targetTxGas, - }; - const refundInfo: FeeRefund = { - baseGas: SmartAccountTx.baseGas, - gasPrice: SmartAccountTx.gasPrice, - gasToken: SmartAccountTx.gasToken, - refundReceiver: SmartAccountTx.refundReceiver, - }; - return wallet.execTransaction( - transaction, - 0, // batchId - refundInfo, - signatureBytes, - overrides || {} - ); -}; + const signatureBytes = buildSignatureBytes(signatures) + const transaction: ExecTransaction = { + to: SmartAccountTx.to, + value: SmartAccountTx.value, + data: SmartAccountTx.data, + operation: SmartAccountTx.operation, + targetTxGas: SmartAccountTx.targetTxGas + } + const refundInfo: FeeRefund = { + baseGas: SmartAccountTx.baseGas, + gasPrice: SmartAccountTx.gasPrice, + gasToken: SmartAccountTx.gasToken, + refundReceiver: SmartAccountTx.refundReceiver + } + return wallet.execTransaction( + transaction, + 0, // batchId + refundInfo, + signatureBytes, + overrides || {} + ) +} export const populateExecuteTx = async ( - wallet: Contract, - SmartAccountTx: WalletTransaction, - signatures: SmartAccountSignature[], - overrides?: any + wallet: Contract, + SmartAccountTx: WalletTransaction, + signatures: SmartAccountSignature[], + overrides?: any ): Promise => { - const signatureBytes = buildSignatureBytes(signatures); - const transaction: ExecTransaction = { - to: SmartAccountTx.to, - value: SmartAccountTx.value, - data: SmartAccountTx.data, - operation: SmartAccountTx.operation, - targetTxGas: SmartAccountTx.targetTxGas, - }; - const refundInfo: FeeRefund = { - baseGas: SmartAccountTx.baseGas, - gasPrice: SmartAccountTx.gasPrice, - gasToken: SmartAccountTx.gasToken, - refundReceiver: SmartAccountTx.refundReceiver, - }; - return wallet.populateTransaction.execTransaction( - transaction, - 0, // batchId - refundInfo, - signatureBytes, - overrides || {} - ); -}; + const signatureBytes = buildSignatureBytes(signatures) + const transaction: ExecTransaction = { + to: SmartAccountTx.to, + value: SmartAccountTx.value, + data: SmartAccountTx.data, + operation: SmartAccountTx.operation, + targetTxGas: SmartAccountTx.targetTxGas + } + const refundInfo: FeeRefund = { + baseGas: SmartAccountTx.baseGas, + gasPrice: SmartAccountTx.gasPrice, + gasToken: SmartAccountTx.gasToken, + refundReceiver: SmartAccountTx.refundReceiver + } + return wallet.populateTransaction.execTransaction( + transaction, + 0, // batchId + refundInfo, + signatureBytes, + overrides || {} + ) +} export const buildContractCall = ( contract: Contract, @@ -273,63 +267,63 @@ export const buildContractCall = ( delegateCall?: boolean, overrides?: Partial ): WalletTransaction => { - const data = contract.interface.encodeFunctionData(method, params); - return buildSmartAccountTransaction( - Object.assign( - { - to: contract.address, - data, - operation: delegateCall ? 1 : 0, - nonce, - }, - overrides - ) - ); -}; + const data = contract.interface.encodeFunctionData(method, params) + return buildSmartAccountTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }, + overrides + ) + ) +} export const executeTxWithSigners = async ( - wallet: Contract, - tx: WalletTransaction, - signers: Wallet[], - overrides?: any + wallet: Contract, + tx: WalletTransaction, + signers: Wallet[], + overrides?: any ) => { - const sigs = await Promise.all( - signers.map((signer) => smartAccountSignTypedData(signer, wallet, tx)) - ); - return executeTx(wallet, tx, sigs, overrides); -}; + const sigs = await Promise.all( + signers.map((signer) => smartAccountSignTypedData(signer, wallet, tx)) + ) + return executeTx(wallet, tx, sigs, overrides) +} export const executeContractCallWithSigners = async ( - wallet: Contract, - contract: Contract, - method: string, - params: any[], - signers: Wallet[], - delegateCall?: boolean, - overrides?: Partial + wallet: Contract, + contract: Contract, + method: string, + params: any[], + signers: Wallet[], + delegateCall?: boolean, + overrides?: Partial ) => { - const tx = buildContractCall( - contract, - method, - params, - await wallet.getNonce(0), //default batchId @review - delegateCall, - overrides - ); - return executeTxWithSigners(wallet, tx, signers); -}; + const tx = buildContractCall( + contract, + method, + params, + await wallet.getNonce(0), //default batchId @review + delegateCall, + overrides + ) + return executeTxWithSigners(wallet, tx, signers) +} export const buildSmartAccountTransaction = (template: { - to: string; - value?: BigNumberish; - data?: string; - operation?: number; - targetTxGas?: number | string; - baseGas?: number | string; - gasPrice?: number | string; - gasToken?: string; - refundReceiver?: string; - nonce: number; + to: string + value?: BigNumberish + data?: string + operation?: number + targetTxGas?: number | string + baseGas?: number | string + gasPrice?: number | string + gasToken?: string + refundReceiver?: string + nonce: number }): WalletTransaction => { return { to: template.to, diff --git a/packages/transactions/src/multisend.ts b/packages/transactions/src/multisend.ts index c96f7dc23..0a54eb493 100644 --- a/packages/transactions/src/multisend.ts +++ b/packages/transactions/src/multisend.ts @@ -17,10 +17,10 @@ export const encodeMultiSend = (txs: MetaTransaction[]): string => { } export const buildMultiSendSmartAccountTx = ( - multiSend: Contract, - txs: MetaTransaction[], - nonce: number, - overrides?: Partial + multiSend: Contract, + txs: MetaTransaction[], + nonce: number, + overrides?: Partial ): WalletTransaction => { return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) } diff --git a/packages/transactions/src/types.ts b/packages/transactions/src/types.ts index cbd75567a..b9c2cb770 100644 --- a/packages/transactions/src/types.ts +++ b/packages/transactions/src/types.ts @@ -1,16 +1,16 @@ import { - Contract, - Wallet, - utils, - BigNumber, - BigNumberish, - Signer, - PopulatedTransaction, - BytesLike - } from "ethers"; - import { TypedDataSigner } from "@ethersproject/abstract-signer"; - import { AddressZero } from "@ethersproject/constants"; - + Contract, + Wallet, + utils, + BigNumber, + BigNumberish, + Signer, + PopulatedTransaction, + BytesLike +} from 'ethers' +import { TypedDataSigner } from '@ethersproject/abstract-signer' +import { AddressZero } from '@ethersproject/constants' + /*export interface SmartAccountTransaction extends MetaTransaction { targetTxGas: string | number; baseGas: string | number; From fa0912b9c5c377b0ed5735e11352768d2542aa6b Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 5 Aug 2022 04:25:10 +0530 Subject: [PATCH 0049/1247] create txn batch --- packages/core-types/src/types.ts | 5 ++- packages/relayer/src/utils/multisend.ts | 8 +--- packages/smart-account/src/SmartAccount.ts | 48 +++++++++++++++++++++- packages/transactions/src/execution.ts | 8 +--- 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index b0a71dfa5..cde9fc5eb 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -93,11 +93,14 @@ export interface SmartAccountTrxDataPartial extends MetaTransactionData { readonly nonce?: number } -export interface WalletTransaction { +export interface MetaTransaction { to: string value: BigNumberish data: string operation: number +} + +export interface WalletTransaction extends MetaTransaction{ targetTxGas: string | number baseGas: string | number gasPrice: string | number diff --git a/packages/relayer/src/utils/multisend.ts b/packages/relayer/src/utils/multisend.ts index d65c6eef4..48397a7ee 100644 --- a/packages/relayer/src/utils/multisend.ts +++ b/packages/relayer/src/utils/multisend.ts @@ -4,16 +4,12 @@ import { AddressZero } from '@ethersproject/constants' export interface MetaTransaction { to: string - value: string | number | BigNumber + value: BigNumberish data: string operation: number } -export interface WalletTransaction { - to: string - value: BigNumberish - data: string - operation: number +export interface WalletTransaction extends MetaTransaction{ targetTxGas: string | number baseGas: string | number gasPrice: string | number diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 91291bb71..ba77ecd54 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -34,7 +34,9 @@ import { getSignatureParameters, EIP712_WALLET_TX_TYPE, buildSmartAccountTransaction, - smartAccountSignMessage + smartAccountSignMessage, + MetaTransaction, + buildMultiSendSmartAccountTx } from '@biconomy-sdk/transactions' // Create an instance of Smart Account with multi-chain support. @@ -337,6 +339,50 @@ class SmartAccount { return walletTx } + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Write test case and limit batch size based on test results in scw-contracts + * @notice This transaction is without fee refund (gasless) + * @param transaction + * @param batchId + * @param chainId + * @returns + */ + async createSmartAccountTransactionBatch(transactions: Transaction[], batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + let walletContract = this.smartAccount(chainId).getContract(); + walletContract = walletContract.attach(this.address); + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0; + if(await this.isDeployed(chainId)) { + nonce = (await walletContract.getNonce(batchId)).toNumber(); + } + console.log('nonce: ', nonce); + + + const txs: MetaTransaction[] = []; + + for(let i=0; i < transactions.length; i++) { + + const innerTx: WalletTransaction = buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) + + txs.push(innerTx); + } + + const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( + this.multiSend(chainId).getContract(), + txs, + nonce + ); + + return walletTx + } + /** * * @param chainId optional chainId diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index 949d9ab45..e34e7276d 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -43,7 +43,7 @@ export const EIP712_SMART_ACCOUNT_MESSAGE_TYPE = { export interface MetaTransaction { to: string - value: string | number | BigNumber + value: BigNumberish data: string operation: number } @@ -73,11 +73,7 @@ export interface FeeRefund { refundReceiver: string } -export interface WalletTransaction { - to: string - value: BigNumberish - data: string - operation: number +export interface WalletTransaction extends MetaTransaction{ targetTxGas: string | number baseGas: string | number gasPrice: string | number From 1166ba66b890c93a87453e5256c9da29c0c9381a Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 5 Aug 2022 16:16:47 +0530 Subject: [PATCH 0050/1247] balance fetch --- packages/smart-account/src/SmartAccount.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 1832b6dbf..996bb05d7 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -189,11 +189,13 @@ class SmartAccount { return this.nodeClient.getAllSupportedChains() } - private async getAlltokenBalances(balancesDto: BalancesDto): Promise { + public async getAlltokenBalances(balancesDto: BalancesDto, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + if(!balancesDto.chainId) balancesDto.chainId = chainId; return this.nodeClient.getAlltokenBalances(balancesDto) } - private async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { + public async getTotalBalanceInUsd(balancesDto: BalancesDto, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + if(!balancesDto.chainId) balancesDto.chainId = chainId; return this.nodeClient.getTotalBalanceInUsd(balancesDto) } From 3be5d7d282697da199ef1b330dad8e9625a98717 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 5 Aug 2022 18:40:31 +0530 Subject: [PATCH 0051/1247] contract updates and chains added --- packages/core-types/src/chains.types.ts | 8 +- .../smart-contract-wallet/SmartWallet.sol | 14 +- .../base/FallbackManager.sol | 2 +- .../base/ModuleManager.sol | 12 +- .../interfaces/ICreate2Deployer.sol | 10 + .../modules/test/WhitelistModule.sol | 10 +- packages/node-client/hardhat.config.ts | 2 +- packages/smart-account/src/SmartAccount.ts | 4 +- packages/smart-account/src/assets/index.ts | 1474 +++++++++-------- .../smart-account/tests/smartaccount.spec.ts | 22 +- 10 files changed, 792 insertions(+), 766 deletions(-) create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ICreate2Deployer.sol diff --git a/packages/core-types/src/chains.types.ts b/packages/core-types/src/chains.types.ts index 80905effd..09cb1b065 100644 --- a/packages/core-types/src/chains.types.ts +++ b/packages/core-types/src/chains.types.ts @@ -28,10 +28,10 @@ export enum ChainNames { export enum ChainId { // Ethereum MAINNET = 1, - ROPSTEN = 3, - RINKEBY = 4, GOERLI = 5, - KOVAN = 42, - MUMBAI = 80001, + POLYGON_MUMBAI = 80001, + POLYGON_MAINNET = 137, + BSC_TESTNET = 97, + BSC_MAINNET = 56, GANACHE = 1337 //Temp } diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol index d326f74a9..6cf0a8c61 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol @@ -137,7 +137,7 @@ contract SmartWallet is // TODO : Update description // TODO : Add batchId and update in test cases, utils etc // Gnosis style transaction with optional repay in native tokens OR ERC20 - /// @dev Allows to execute a wallet transaction confirmed by required number of owners and then pays the account that submitted the transaction. + /// @dev Allows to execute a Safe transaction confirmed by required number of owners and then pays the account that submitted the transaction. /// Note: The fees are always transferred, even if the user transaction fails. /// @param _tx Wallet transaction /// @param batchId batchId key for 2D nonces @@ -276,8 +276,8 @@ contract SmartWallet is /// review necessity for this method for estimating execute call /// @dev Allows to estimate a transaction. /// This method is only meant for estimation purpose, therefore the call will always revert and encode the result in the revert data. - /// Since the `estimateGas` function includes refunds, call this method to get an estimated of the costs that are deducted from the wallet with `execTransaction` - /// @param to Destination address of wallet transaction. + /// Since the `estimateGas` function includes refunds, call this method to get an estimated of the costs that are deducted from the safe with `execTransaction` + /// @param to Destination address of Safe transaction. /// @param value Ether value of transaction. /// @param data Data payload of transaction. /// @param operation Operation type of transaction. @@ -302,8 +302,8 @@ contract SmartWallet is /// @param value Ether value. /// @param data Data payload. /// @param operation Operation type. - /// @param targetTxGas Fas that should be used for the wallet transaction. - /// @param baseGas Gas costs for data used to trigger the wallet transaction. + /// @param targetTxGas Fas that should be used for the safe transaction. + /// @param baseGas Gas costs for data used to trigger the safe transaction. /// @param gasPrice Maximum gas price that should be used for this transaction. /// @param gasToken Token address (or 0 if ETH) that is used for the payment. /// @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin). @@ -348,7 +348,7 @@ contract SmartWallet is FeeRefund memory refundInfo, uint256 _nonce ) public view returns (bytes memory) { - bytes32 walletTxHash = + bytes32 safeTxHash = keccak256( abi.encode( WALLET_TX_TYPEHASH, @@ -364,7 +364,7 @@ contract SmartWallet is _nonce ) ); - return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), walletTxHash); + return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash); } // Extra Utils diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol index 8d0c5105a..722ee3552 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol @@ -21,7 +21,7 @@ contract FallbackManager is SelfAuthorized { /// @dev Allows to add a contract to handle fallback calls. /// Only fallback calls without value and with data will be forwarded. - /// This can only be done via a wallet transaction. + /// This can only be done via a Safe transaction. /// @param handler contract to handle fallback calls. function setFallbackHandler(address handler) public authorized { internalSetFallbackHandler(handler); diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol index 3300cba9d..40b645d71 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol @@ -26,8 +26,8 @@ contract ModuleManager is SelfAuthorized, Executor { } /// @dev Allows to add a module to the whitelist. - /// This can only be done via a wallet transaction. - /// @notice Enables the module `module` for the wallet. + /// This can only be done via a Safe transaction. + /// @notice Enables the module `module` for the Safe. /// @param module Module to be whitelisted. function enableModule(address module) public authorized { // Module address cannot be null or sentinel. @@ -40,8 +40,8 @@ contract ModuleManager is SelfAuthorized, Executor { } /// @dev Allows to remove a module from the whitelist. - /// This can only be done via a wallet transaction. - /// @notice Disables the module `module` for the wallet. + /// This can only be done via a Safe transaction. + /// @notice Disables the module `module` for the Safe. /// @param prevModule Module that pointed to the module to be removed in the linked list /// @param module Module to be removed. function disableModule(address prevModule, address module) public authorized { @@ -53,7 +53,7 @@ contract ModuleManager is SelfAuthorized, Executor { emit DisabledModule(module); } - /// @dev Allows a Module to execute a wallet transaction without any further confirmations. + /// @dev Allows a Module to execute a Safe transaction without any further confirmations. /// @param to Destination address of module transaction. /// @param value Ether value of module transaction. /// @param data Data payload of module transaction. @@ -72,7 +72,7 @@ contract ModuleManager is SelfAuthorized, Executor { else emit ExecutionFromModuleFailure(msg.sender); } - /// @dev Allows a Module to execute a wallet transaction without any further confirmations and return data + /// @dev Allows a Module to execute a Safe transaction without any further confirmations and return data /// @param to Destination address of module transaction. /// @param value Ether value of module transaction. /// @param data Data payload of module transaction. diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ICreate2Deployer.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ICreate2Deployer.sol new file mode 100644 index 000000000..cc7b436b9 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ICreate2Deployer.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.12; + +/** + * create2-based deployer (eip-2470) + */ +interface ICreate2Deployer { + function deploy(bytes memory initCode, bytes32 salt) external returns (address); +} + diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol index e39490ada..bc7b86598 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol @@ -21,15 +21,15 @@ contract WhitelistModule { whitelisted[_target] = true; } - function authCall(SmartWallet _wallet, address payable _to, uint96 _amount, bytes memory _data) external { // Could have some access control from here like guardians! + function authCall(SmartWallet _safe, address payable _to, uint96 _amount, bytes memory _data) external { // Could have some access control from here like guardians! require(_to != address(0),"Target can not be zero address"); require(whitelisted[_to] == true,"Unauthorized :: Target must be whitelised!"); - require(_wallet.execTransactionFromModule(_to, _amount, _data, Enum.Operation.Call), "Could not execute ether transfer"); + require(_safe.execTransactionFromModule(_to, _amount, _data, Enum.Operation.Call), "Could not execute ether transfer"); } // If value transfer required from wallet /*function handlePayment( - BaseWallet wallet, + BaseWallet safe, uint256 gasUsed, uint256 dataGas, uint256 gasPrice, @@ -43,10 +43,10 @@ contract WhitelistModule { address receiver = refundReceiver == address(0) ? tx.origin : refundReceiver; if (gasToken == address(0)) { // solium-disable-next-line security/no-send - require(wallet.execTransactionFromModule(receiver, amount, "", Enum.Operation.Call), "Could not pay gas costs with ether"); + require(safe.execTransactionFromModule(receiver, amount, "", Enum.Operation.Call), "Could not pay gas costs with ether"); } else { bytes memory data = abi.encodeWithSignature("transfer(address,uint256)", receiver, amount); - require(wallet.execTransactionFromModule(gasToken, 0, data, Enum.Operation.Call), "Could not pay gas costs with token"); + require(safe.execTransactionFromModule(gasToken, 0, data, Enum.Operation.Call), "Could not pay gas costs with token"); } }*/ } \ No newline at end of file diff --git a/packages/node-client/hardhat.config.ts b/packages/node-client/hardhat.config.ts index 6a4425ff5..293c51e5e 100644 --- a/packages/node-client/hardhat.config.ts +++ b/packages/node-client/hardhat.config.ts @@ -33,7 +33,7 @@ if (['rinkeby'].includes(argv.network) && INFURA_KEY === undefined) { } const config: HardhatUserConfig = { - defaultNetwork: "rinkeby", + // defaultNetwork: "rinkeby", paths: { tests: TESTS_PATH }, diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 996bb05d7..858831dd3 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -547,8 +547,8 @@ class SmartAccount { // Temporary default config // TODO/NOTE : make Goerli and Mumbai as test networks and remove others export const DefaultSmartAccountConfig: SmartAccountConfig = { - activeNetworkId: ChainId.RINKEBY, //Update later - supportedNetworksIds: [ChainId.GOERLI, ChainId.RINKEBY, ChainId.MUMBAI], + activeNetworkId: ChainId.GOERLI, //Update later + supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], backend_url: 'http://localhost:3000/v1' } diff --git a/packages/smart-account/src/assets/index.ts b/packages/smart-account/src/assets/index.ts index 0c5669d9a..e085aee64 100644 --- a/packages/smart-account/src/assets/index.ts +++ b/packages/smart-account/src/assets/index.ts @@ -1,1231 +1,1247 @@ export const MultiSend = { - defaultAddress: '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + defaultAddress: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', released: true, contractName: 'MultiSend', version: '1.0.0', networkAddresses: { - '1': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', - '4': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', - '5': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', - '42': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', - '88': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', - '100': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', - '246': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', - '73799': '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + '1': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '4': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '5': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '42': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '88': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '100': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '246': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '73799': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', '31338': '0x1A3F36c656Da24c18C703B8c2d1829F5D32E8E49' }, abi: [ - { inputs: [], stateMutability: 'nonpayable', type: 'constructor' }, { - inputs: [{ internalType: 'bytes', name: 'transactions', type: 'bytes' }], - name: 'multiSend', - outputs: [], - stateMutability: 'payable', - type: 'function' + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + } + ], + "name": "multiSend", + "outputs": [], + "stateMutability": "payable", + "type": "function" } ] } export const MultiSendCallOnly = { - defaultAddress: '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + defaultAddress: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', released: true, contractName: 'MultiSendCallOnly', version: '1.0.0', networkAddresses: { - '1': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', - '4': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', - '5': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', - '42': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', - '88': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', - '100': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', - '246': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', - '73799': '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + '1': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '4': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '5': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '42': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '88': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '100': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '246': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '73799': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', '31338': '0x1A3F36c656Da24c18C703B8c2d1829F5D32E8E49' }, abi: [ { - inputs: [{ internalType: 'bytes', name: 'transactions', type: 'bytes' }], - name: 'multiSend', - outputs: [], - stateMutability: 'payable', - type: 'function' + "inputs": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + } + ], + "name": "multiSend", + "outputs": [], + "stateMutability": "payable", + "type": "function" } ] } export const SmartWallet = { - defaultAddress: '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', + defaultAddress: '0x056DcE811A2b695171274855E7246039Df298158', released: true, contractName: 'SmartWallet', version: '1.0.0', networkAddresses: { - '1': '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', - '4': '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', - '5': '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', - '42': '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', - '100': '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', + '1': '0x056DcE811A2b695171274855E7246039Df298158', + '4': '0x056DcE811A2b695171274855E7246039Df298158', + '5': '0x056DcE811A2b695171274855E7246039Df298158', + '42': '0x056DcE811A2b695171274855E7246039Df298158', + '100': '0x056DcE811A2b695171274855E7246039Df298158', '31338': '0x0ba464506a3D66C962121e3C25ed56678A2585B6' }, abi: [ { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: false, - internalType: 'address', - name: 'handler', - type: 'address' + "indexed": false, + "internalType": "address", + "name": "handler", + "type": "address" } ], - name: 'ChangedFallbackHandler', - type: 'event' + "name": "ChangedFallbackHandler", + "type": "event" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: false, - internalType: 'address', - name: 'module', - type: 'address' + "indexed": false, + "internalType": "address", + "name": "module", + "type": "address" } ], - name: 'DisabledModule', - type: 'event' + "name": "DisabledModule", + "type": "event" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: true, - internalType: 'address', - name: '_scw', - type: 'address' + "indexed": true, + "internalType": "address", + "name": "_scw", + "type": "address" }, { - indexed: true, - internalType: 'address', - name: '_oldEOA', - type: 'address' + "indexed": true, + "internalType": "address", + "name": "_oldEOA", + "type": "address" }, { - indexed: true, - internalType: 'address', - name: '_newEOA', - type: 'address' + "indexed": true, + "internalType": "address", + "name": "_newEOA", + "type": "address" } ], - name: 'EOAChanged', - type: 'event' + "name": "EOAChanged", + "type": "event" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: false, - internalType: 'address', - name: 'module', - type: 'address' + "indexed": false, + "internalType": "address", + "name": "module", + "type": "address" } ], - name: 'EnabledModule', - type: 'event' + "name": "EnabledModule", + "type": "event" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: false, - internalType: 'address', - name: 'oldEntryPoint', - type: 'address' + "indexed": false, + "internalType": "address", + "name": "oldEntryPoint", + "type": "address" }, { - indexed: false, - internalType: 'address', - name: 'newEntryPoint', - type: 'address' + "indexed": false, + "internalType": "address", + "name": "newEntryPoint", + "type": "address" } ], - name: 'EntryPointChanged', - type: 'event' + "name": "EntryPointChanged", + "type": "event" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: false, - internalType: 'bytes32', - name: 'txHash', - type: 'bytes32' + "indexed": false, + "internalType": "bytes32", + "name": "txHash", + "type": "bytes32" }, { - indexed: false, - internalType: 'uint256', - name: 'payment', - type: 'uint256' + "indexed": false, + "internalType": "uint256", + "name": "payment", + "type": "uint256" } ], - name: 'ExecutionFailure', - type: 'event' + "name": "ExecutionFailure", + "type": "event" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: true, - internalType: 'address', - name: 'module', - type: 'address' + "indexed": true, + "internalType": "address", + "name": "module", + "type": "address" } ], - name: 'ExecutionFromModuleFailure', - type: 'event' + "name": "ExecutionFromModuleFailure", + "type": "event" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: true, - internalType: 'address', - name: 'module', - type: 'address' + "indexed": true, + "internalType": "address", + "name": "module", + "type": "address" } ], - name: 'ExecutionFromModuleSuccess', - type: 'event' + "name": "ExecutionFromModuleSuccess", + "type": "event" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: false, - internalType: 'bytes32', - name: 'txHash', - type: 'bytes32' + "indexed": false, + "internalType": "bytes32", + "name": "txHash", + "type": "bytes32" }, { - indexed: false, - internalType: 'uint256', - name: 'payment', - type: 'uint256' + "indexed": false, + "internalType": "uint256", + "name": "payment", + "type": "uint256" } ], - name: 'ExecutionSuccess', - type: 'event' + "name": "ExecutionSuccess", + "type": "event" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: false, - internalType: 'address', - name: 'newImplementation', - type: 'address' + "indexed": false, + "internalType": "address", + "name": "newImplementation", + "type": "address" } ], - name: 'ImplementationUpdated', - type: 'event' + "name": "ImplementationUpdated", + "type": "event" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: false, - internalType: 'uint8', - name: 'version', - type: 'uint8' + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" } ], - name: 'Initialized', - type: 'event' + "name": "Initialized", + "type": "event" }, { - stateMutability: 'nonpayable', - type: 'fallback' + "stateMutability": "nonpayable", + "type": "fallback" }, { - inputs: [], - name: 'VERSION', - outputs: [ + "inputs": [], + "name": "VERSION", + "outputs": [ { - internalType: 'string', - name: '', - type: 'string' + "internalType": "string", + "name": "", + "type": "string" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'bytes32', - name: 'dataHash', - type: 'bytes32' + "internalType": "bytes32", + "name": "dataHash", + "type": "bytes32" }, { - internalType: 'bytes', - name: 'data', - type: 'bytes' + "internalType": "bytes", + "name": "data", + "type": "bytes" }, { - internalType: 'bytes', - name: 'signatures', - type: 'bytes' + "internalType": "bytes", + "name": "signatures", + "type": "bytes" } ], - name: 'checkSignatures', - outputs: [], - stateMutability: 'view', - type: 'function' + "name": "checkSignatures", + "outputs": [], + "stateMutability": "view", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: 'prevModule', - type: 'address' + "internalType": "address", + "name": "prevModule", + "type": "address" }, { - internalType: 'address', - name: 'module', - type: 'address' + "internalType": "address", + "name": "module", + "type": "address" } ], - name: 'disableModule', - outputs: [], - stateMutability: 'nonpayable', - type: 'function' + "name": "disableModule", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [], - name: 'domainSeparator', - outputs: [ + "inputs": [], + "name": "domainSeparator", + "outputs": [ { - internalType: 'bytes32', - name: '', - type: 'bytes32' + "internalType": "bytes32", + "name": "", + "type": "bytes32" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: 'module', - type: 'address' + "internalType": "address", + "name": "module", + "type": "address" } ], - name: 'enableModule', - outputs: [], - stateMutability: 'nonpayable', - type: 'function' + "name": "enableModule", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - components: [ + "components": [ { - internalType: 'address', - name: 'to', - type: 'address' + "internalType": "address", + "name": "to", + "type": "address" }, { - internalType: 'uint256', - name: 'value', - type: 'uint256' + "internalType": "uint256", + "name": "value", + "type": "uint256" }, { - internalType: 'bytes', - name: 'data', - type: 'bytes' + "internalType": "bytes", + "name": "data", + "type": "bytes" }, { - internalType: 'enum Enum.Operation', - name: 'operation', - type: 'uint8' + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" }, { - internalType: 'uint256', - name: 'targetTxGas', - type: 'uint256' + "internalType": "uint256", + "name": "targetTxGas", + "type": "uint256" } ], - internalType: 'struct WalletStorage.Transaction', - name: '_tx', - type: 'tuple' + "internalType": "struct WalletStorage.Transaction", + "name": "_tx", + "type": "tuple" }, { - components: [ + "components": [ { - internalType: 'uint256', - name: 'baseGas', - type: 'uint256' + "internalType": "uint256", + "name": "baseGas", + "type": "uint256" }, { - internalType: 'uint256', - name: 'gasPrice', - type: 'uint256' + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" }, { - internalType: 'address', - name: 'gasToken', - type: 'address' + "internalType": "address", + "name": "gasToken", + "type": "address" }, { - internalType: 'address payable', - name: 'refundReceiver', - type: 'address' + "internalType": "address payable", + "name": "refundReceiver", + "type": "address" } ], - internalType: 'struct WalletStorage.FeeRefund', - name: 'refundInfo', - type: 'tuple' + "internalType": "struct WalletStorage.FeeRefund", + "name": "refundInfo", + "type": "tuple" }, { - internalType: 'uint256', - name: '_nonce', - type: 'uint256' + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" } ], - name: 'encodeTransactionData', - outputs: [ + "name": "encodeTransactionData", + "outputs": [ { - internalType: 'bytes', - name: '', - type: 'bytes' + "internalType": "bytes", + "name": "", + "type": "bytes" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" }, { - inputs: [], - name: 'entryPoint', - outputs: [ + "inputs": [], + "name": "entryPoint", + "outputs": [ { - internalType: 'address', - name: '', - type: 'address' + "internalType": "address", + "name": "", + "type": "address" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: 'dest', - type: 'address' + "internalType": "address", + "name": "dest", + "type": "address" }, { - internalType: 'uint256', - name: 'value', - type: 'uint256' + "internalType": "uint256", + "name": "value", + "type": "uint256" }, { - internalType: 'bytes', - name: 'func', - type: 'bytes' + "internalType": "bytes", + "name": "func", + "type": "bytes" } ], - name: 'exec', - outputs: [], - stateMutability: 'nonpayable', - type: 'function' + "name": "exec", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address[]', - name: 'dest', - type: 'address[]' + "internalType": "address[]", + "name": "dest", + "type": "address[]" }, { - internalType: 'bytes[]', - name: 'func', - type: 'bytes[]' + "internalType": "bytes[]", + "name": "func", + "type": "bytes[]" } ], - name: 'execBatch', - outputs: [], - stateMutability: 'nonpayable', - type: 'function' + "name": "execBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: 'dest', - type: 'address' + "internalType": "address", + "name": "dest", + "type": "address" }, { - internalType: 'uint256', - name: 'value', - type: 'uint256' + "internalType": "uint256", + "name": "value", + "type": "uint256" }, { - internalType: 'bytes', - name: 'func', - type: 'bytes' + "internalType": "bytes", + "name": "func", + "type": "bytes" } ], - name: 'execFromEntryPoint', - outputs: [], - stateMutability: 'nonpayable', - type: 'function' + "name": "execFromEntryPoint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - components: [ + "components": [ { - internalType: 'address', - name: 'to', - type: 'address' + "internalType": "address", + "name": "to", + "type": "address" }, { - internalType: 'uint256', - name: 'value', - type: 'uint256' + "internalType": "uint256", + "name": "value", + "type": "uint256" }, { - internalType: 'bytes', - name: 'data', - type: 'bytes' + "internalType": "bytes", + "name": "data", + "type": "bytes" }, { - internalType: 'enum Enum.Operation', - name: 'operation', - type: 'uint8' + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" }, { - internalType: 'uint256', - name: 'targetTxGas', - type: 'uint256' + "internalType": "uint256", + "name": "targetTxGas", + "type": "uint256" } ], - internalType: 'struct WalletStorage.Transaction', - name: '_tx', - type: 'tuple' + "internalType": "struct WalletStorage.Transaction", + "name": "_tx", + "type": "tuple" }, { - internalType: 'uint256', - name: 'batchId', - type: 'uint256' + "internalType": "uint256", + "name": "batchId", + "type": "uint256" }, { - components: [ + "components": [ { - internalType: 'uint256', - name: 'baseGas', - type: 'uint256' + "internalType": "uint256", + "name": "baseGas", + "type": "uint256" }, { - internalType: 'uint256', - name: 'gasPrice', - type: 'uint256' + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" }, { - internalType: 'address', - name: 'gasToken', - type: 'address' + "internalType": "address", + "name": "gasToken", + "type": "address" }, { - internalType: 'address payable', - name: 'refundReceiver', - type: 'address' + "internalType": "address payable", + "name": "refundReceiver", + "type": "address" } ], - internalType: 'struct WalletStorage.FeeRefund', - name: 'refundInfo', - type: 'tuple' + "internalType": "struct WalletStorage.FeeRefund", + "name": "refundInfo", + "type": "tuple" }, { - internalType: 'bytes', - name: 'signatures', - type: 'bytes' + "internalType": "bytes", + "name": "signatures", + "type": "bytes" } ], - name: 'execTransaction', - outputs: [ + "name": "execTransaction", + "outputs": [ { - internalType: 'bool', - name: 'success', - type: 'bool' + "internalType": "bool", + "name": "success", + "type": "bool" } ], - stateMutability: 'payable', - type: 'function' + "stateMutability": "payable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: 'to', - type: 'address' + "internalType": "address", + "name": "to", + "type": "address" }, { - internalType: 'uint256', - name: 'value', - type: 'uint256' + "internalType": "uint256", + "name": "value", + "type": "uint256" }, { - internalType: 'bytes', - name: 'data', - type: 'bytes' + "internalType": "bytes", + "name": "data", + "type": "bytes" }, { - internalType: 'enum Enum.Operation', - name: 'operation', - type: 'uint8' + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" } ], - name: 'execTransactionFromModule', - outputs: [ + "name": "execTransactionFromModule", + "outputs": [ { - internalType: 'bool', - name: 'success', - type: 'bool' + "internalType": "bool", + "name": "success", + "type": "bool" } ], - stateMutability: 'nonpayable', - type: 'function' + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: 'to', - type: 'address' + "internalType": "address", + "name": "to", + "type": "address" }, { - internalType: 'uint256', - name: 'value', - type: 'uint256' + "internalType": "uint256", + "name": "value", + "type": "uint256" }, { - internalType: 'bytes', - name: 'data', - type: 'bytes' + "internalType": "bytes", + "name": "data", + "type": "bytes" }, { - internalType: 'enum Enum.Operation', - name: 'operation', - type: 'uint8' + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" } ], - name: 'execTransactionFromModuleReturnData', - outputs: [ + "name": "execTransactionFromModuleReturnData", + "outputs": [ { - internalType: 'bool', - name: 'success', - type: 'bool' + "internalType": "bool", + "name": "success", + "type": "bool" }, { - internalType: 'bytes', - name: 'returnData', - type: 'bytes' + "internalType": "bytes", + "name": "returnData", + "type": "bytes" } ], - stateMutability: 'nonpayable', - type: 'function' + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [], - name: 'getChainId', - outputs: [ + "inputs": [], + "name": "getChainId", + "outputs": [ { - internalType: 'uint256', - name: '', - type: 'uint256' + "internalType": "uint256", + "name": "", + "type": "uint256" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: 'start', - type: 'address' + "internalType": "address", + "name": "start", + "type": "address" }, { - internalType: 'uint256', - name: 'pageSize', - type: 'uint256' + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" } ], - name: 'getModulesPaginated', - outputs: [ + "name": "getModulesPaginated", + "outputs": [ { - internalType: 'address[]', - name: 'array', - type: 'address[]' + "internalType": "address[]", + "name": "array", + "type": "address[]" }, { - internalType: 'address', - name: 'next', - type: 'address' + "internalType": "address", + "name": "next", + "type": "address" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'uint256', - name: 'batchId', - type: 'uint256' + "internalType": "uint256", + "name": "batchId", + "type": "uint256" } ], - name: 'getNonce', - outputs: [ + "name": "getNonce", + "outputs": [ { - internalType: 'uint256', - name: '', - type: 'uint256' + "internalType": "uint256", + "name": "", + "type": "uint256" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: 'to', - type: 'address' + "internalType": "address", + "name": "to", + "type": "address" }, { - internalType: 'uint256', - name: 'value', - type: 'uint256' + "internalType": "uint256", + "name": "value", + "type": "uint256" }, { - internalType: 'bytes', - name: 'data', - type: 'bytes' + "internalType": "bytes", + "name": "data", + "type": "bytes" }, { - internalType: 'enum Enum.Operation', - name: 'operation', - type: 'uint8' + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" }, { - internalType: 'uint256', - name: 'targetTxGas', - type: 'uint256' + "internalType": "uint256", + "name": "targetTxGas", + "type": "uint256" }, { - internalType: 'uint256', - name: 'baseGas', - type: 'uint256' + "internalType": "uint256", + "name": "baseGas", + "type": "uint256" }, { - internalType: 'uint256', - name: 'gasPrice', - type: 'uint256' + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" }, { - internalType: 'address', - name: 'gasToken', - type: 'address' + "internalType": "address", + "name": "gasToken", + "type": "address" }, { - internalType: 'address payable', - name: 'refundReceiver', - type: 'address' + "internalType": "address payable", + "name": "refundReceiver", + "type": "address" }, { - internalType: 'uint256', - name: '_nonce', - type: 'uint256' + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" } ], - name: 'getTransactionHash', - outputs: [ + "name": "getTransactionHash", + "outputs": [ { - internalType: 'bytes32', - name: '', - type: 'bytes32' + "internalType": "bytes32", + "name": "", + "type": "bytes32" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: '_owner', - type: 'address' + "internalType": "address", + "name": "_owner", + "type": "address" }, { - internalType: 'address', - name: '_entryPoint', - type: 'address' + "internalType": "address", + "name": "_entryPoint", + "type": "address" }, { - internalType: 'address', - name: '_handler', - type: 'address' + "internalType": "address", + "name": "_handler", + "type": "address" } ], - name: 'init', - outputs: [], - stateMutability: 'nonpayable', - type: 'function' + "name": "init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: 'module', - type: 'address' + "internalType": "address", + "name": "module", + "type": "address" } ], - name: 'isModuleEnabled', - outputs: [ + "name": "isModuleEnabled", + "outputs": [ { - internalType: 'bool', - name: '', - type: 'bool' + "internalType": "bool", + "name": "", + "type": "bool" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'uint256', - name: '', - type: 'uint256' + "internalType": "uint256", + "name": "", + "type": "uint256" } ], - name: 'nonces', - outputs: [ + "name": "nonces", + "outputs": [ { - internalType: 'uint256', - name: '', - type: 'uint256' + "internalType": "uint256", + "name": "", + "type": "uint256" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" }, { - inputs: [], - name: 'owner', - outputs: [ + "inputs": [], + "name": "owner", + "outputs": [ { - internalType: 'address', - name: '', - type: 'address' + "internalType": "address", + "name": "", + "type": "address" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: 'token', - type: 'address' + "internalType": "address", + "name": "token", + "type": "address" }, { - internalType: 'address', - name: 'dest', - type: 'address' + "internalType": "address", + "name": "dest", + "type": "address" }, { - internalType: 'uint256', - name: 'amount', - type: 'uint256' + "internalType": "uint256", + "name": "amount", + "type": "uint256" } ], - name: 'pullTokens', - outputs: [], - stateMutability: 'nonpayable', - type: 'function' + "name": "pullTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: 'to', - type: 'address' + "internalType": "address", + "name": "to", + "type": "address" }, { - internalType: 'uint256', - name: 'value', - type: 'uint256' + "internalType": "uint256", + "name": "value", + "type": "uint256" }, { - internalType: 'bytes', - name: 'data', - type: 'bytes' + "internalType": "bytes", + "name": "data", + "type": "bytes" }, { - internalType: 'enum Enum.Operation', - name: 'operation', - type: 'uint8' + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" } ], - name: 'requiredTxGas', - outputs: [ + "name": "requiredTxGas", + "outputs": [ { - internalType: 'uint256', - name: '', - type: 'uint256' + "internalType": "uint256", + "name": "", + "type": "uint256" } ], - stateMutability: 'nonpayable', - type: 'function' + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: 'handler', - type: 'address' + "internalType": "address", + "name": "handler", + "type": "address" } ], - name: 'setFallbackHandler', - outputs: [], - stateMutability: 'nonpayable', - type: 'function' + "name": "setFallbackHandler", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: '_newOwner', - type: 'address' + "internalType": "address", + "name": "_newOwner", + "type": "address" } ], - name: 'setOwner', - outputs: [], - stateMutability: 'nonpayable', - type: 'function' + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'bytes4', - name: 'interfaceId', - type: 'bytes4' + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" } ], - name: 'supportsInterface', - outputs: [ + "name": "supportsInterface", + "outputs": [ { - internalType: 'bool', - name: '', - type: 'bool' + "internalType": "bool", + "name": "", + "type": "bool" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address payable', - name: 'dest', - type: 'address' + "internalType": "address payable", + "name": "dest", + "type": "address" }, { - internalType: 'uint256', - name: 'amount', - type: 'uint256' + "internalType": "uint256", + "name": "amount", + "type": "uint256" } ], - name: 'transfer', - outputs: [], - stateMutability: 'nonpayable', - type: 'function' + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: '_entryPoint', - type: 'address' + "internalType": "address", + "name": "_entryPoint", + "type": "address" } ], - name: 'updateEntryPoint', - outputs: [], - stateMutability: 'nonpayable', - type: 'function' + "name": "updateEntryPoint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: '_implementation', - type: 'address' + "internalType": "address", + "name": "_implementation", + "type": "address" } ], - name: 'updateImplementation', - outputs: [], - stateMutability: 'nonpayable', - type: 'function' + "name": "updateImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - components: [ + "components": [ { - internalType: 'address', - name: 'sender', - type: 'address' + "internalType": "address", + "name": "sender", + "type": "address" }, { - internalType: 'uint256', - name: 'nonce', - type: 'uint256' + "internalType": "uint256", + "name": "nonce", + "type": "uint256" }, { - internalType: 'bytes', - name: 'initCode', - type: 'bytes' + "internalType": "bytes", + "name": "initCode", + "type": "bytes" }, { - internalType: 'bytes', - name: 'callData', - type: 'bytes' + "internalType": "bytes", + "name": "callData", + "type": "bytes" }, { - internalType: 'uint256', - name: 'callGas', - type: 'uint256' + "internalType": "uint256", + "name": "callGas", + "type": "uint256" }, { - internalType: 'uint256', - name: 'verificationGas', - type: 'uint256' + "internalType": "uint256", + "name": "verificationGas", + "type": "uint256" }, { - internalType: 'uint256', - name: 'preVerificationGas', - type: 'uint256' + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" }, { - internalType: 'uint256', - name: 'maxFeePerGas', - type: 'uint256' + "internalType": "uint256", + "name": "maxFeePerGas", + "type": "uint256" }, { - internalType: 'uint256', - name: 'maxPriorityFeePerGas', - type: 'uint256' + "internalType": "uint256", + "name": "maxPriorityFeePerGas", + "type": "uint256" }, { - internalType: 'address', - name: 'paymaster', - type: 'address' + "internalType": "address", + "name": "paymaster", + "type": "address" }, { - internalType: 'bytes', - name: 'paymasterData', - type: 'bytes' + "internalType": "bytes", + "name": "paymasterData", + "type": "bytes" }, { - internalType: 'bytes', - name: 'signature', - type: 'bytes' + "internalType": "bytes", + "name": "signature", + "type": "bytes" } ], - internalType: 'struct UserOperation', - name: 'userOp', - type: 'tuple' + "internalType": "struct UserOperation", + "name": "userOp", + "type": "tuple" }, { - internalType: 'bytes32', - name: 'requestId', - type: 'bytes32' + "internalType": "bytes32", + "name": "requestId", + "type": "bytes32" }, { - internalType: 'uint256', - name: 'requiredPrefund', - type: 'uint256' + "internalType": "uint256", + "name": "requiredPrefund", + "type": "uint256" } ], - name: 'validateUserOp', - outputs: [], - stateMutability: 'nonpayable', - type: 'function' + "name": "validateUserOp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } ] } export const WalletFactory = { - defaultAddress: '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + defaultAddress: '0x050bca32264195976Fe00BcA566B548413A9E658', released: true, contractName: 'WalletFactory', version: '1.0.0', networkAddresses: { - '1': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', - '4': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', - '5': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', - '42': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', - '88': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', - '100': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', - '246': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', - '73799': '0x7146D756D1a95D9916f358b391f029eE0925F9bb', + '1': '0x050bca32264195976Fe00BcA566B548413A9E658', + '4': '0x050bca32264195976Fe00BcA566B548413A9E658', + '5': '0x050bca32264195976Fe00BcA566B548413A9E658', + '42': '0x050bca32264195976Fe00BcA566B548413A9E658', + '88': '0x050bca32264195976Fe00BcA566B548413A9E658', + '100': '0x050bca32264195976Fe00BcA566B548413A9E658', + '246': '0x050bca32264195976Fe00BcA566B548413A9E658', + '73799': '0x050bca32264195976Fe00BcA566B548413A9E658', '31338': '0x85c0995669f8a0173a5B5F6003DA060E8D17f0c3' }, abi: [ { - inputs: [ + "inputs": [ { - internalType: 'address', - name: '_baseImpl', - type: 'address' + "internalType": "address", + "name": "_baseImpl", + "type": "address" } ], - stateMutability: 'nonpayable', - type: 'constructor' + "stateMutability": "nonpayable", + "type": "constructor" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: true, - internalType: 'address', - name: '_proxy', - type: 'address' + "indexed": true, + "internalType": "address", + "name": "_proxy", + "type": "address" }, { - indexed: true, - internalType: 'address', - name: '_implementation', - type: 'address' + "indexed": true, + "internalType": "address", + "name": "_implementation", + "type": "address" }, { - indexed: true, - internalType: 'address', - name: '_owner', - type: 'address' + "indexed": true, + "internalType": "address", + "name": "_owner", + "type": "address" } ], - name: 'WalletCreated', - type: 'event' + "name": "WalletCreated", + "type": "event" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: '_owner', - type: 'address' + "internalType": "address", + "name": "_owner", + "type": "address" }, { - internalType: 'address', - name: '_entryPoint', - type: 'address' + "internalType": "address", + "name": "_entryPoint", + "type": "address" }, { - internalType: 'address', - name: '_handler', - type: 'address' + "internalType": "address", + "name": "_handler", + "type": "address" }, { - internalType: 'uint256', - name: '_index', - type: 'uint256' + "internalType": "uint256", + "name": "_index", + "type": "uint256" } ], - name: 'deployCounterFactualWallet', - outputs: [ + "name": "deployCounterFactualWallet", + "outputs": [ { - internalType: 'address', - name: 'proxy', - type: 'address' + "internalType": "address", + "name": "proxy", + "type": "address" } ], - stateMutability: 'nonpayable', - type: 'function' + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: '_owner', - type: 'address' + "internalType": "address", + "name": "_owner", + "type": "address" }, { - internalType: 'address', - name: '_entryPoint', - type: 'address' + "internalType": "address", + "name": "_entryPoint", + "type": "address" }, { - internalType: 'address', - name: '_handler', - type: 'address' + "internalType": "address", + "name": "_handler", + "type": "address" } ], - name: 'deployWallet', - outputs: [ + "name": "deployWallet", + "outputs": [ { - internalType: 'address', - name: 'proxy', - type: 'address' + "internalType": "address", + "name": "proxy", + "type": "address" } ], - stateMutability: 'nonpayable', - type: 'function' + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: '_owner', - type: 'address' + "internalType": "address", + "name": "_owner", + "type": "address" }, { - internalType: 'uint256', - name: '_index', - type: 'uint256' + "internalType": "uint256", + "name": "_index", + "type": "uint256" } ], - name: 'getAddressForCounterfactualWallet', - outputs: [ + "name": "getAddressForCounterfactualWallet", + "outputs": [ { - internalType: 'address', - name: '_wallet', - type: 'address' + "internalType": "address", + "name": "_wallet", + "type": "address" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: 'address', - name: '', - type: 'address' + "internalType": "address", + "name": "", + "type": "address" } ], - name: 'isWalletExist', - outputs: [ + "name": "isWalletExist", + "outputs": [ { - internalType: 'bool', - name: '', - type: 'bool' + "internalType": "bool", + "name": "", + "type": "bool" } ], - stateMutability: 'view', - type: 'function' + "stateMutability": "view", + "type": "function" } ] } diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index fefc12076..ff60dfb24 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -29,12 +29,12 @@ type EthereumInstance = { enum ChainId { // Ethereum MAINNET = 1, - ROPSTEN = 3, - RINKEBY = 4, GOERLI = 5, - KOVAN = 42, - MUMBAI = 80001, - GANACHE = 1337 + POLYGON_MUMBAI = 80001, + POLYGON_MAINNET = 137, + BSC_TESTNET = 97, + BSC_MAINNET = 56, + GANACHE = 1337 //Temp } // import hardhat from 'hardhat' @@ -209,7 +209,7 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE] // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backend_url: "http://localhost:3000/v1" }) @@ -243,7 +243,7 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE] // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backend_url: "http://localhost:3000/v1" }) @@ -280,7 +280,7 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE] // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backend_url: "http://localhost:3000/v1" }) @@ -321,7 +321,7 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE] // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backend_url: "http://localhost:3000/v1" }) @@ -342,7 +342,7 @@ describe('Wallet integration', function () { expect(address).to.be.equal(smartAccount.address) - smartAccount.setActiveChain(ChainId.RINKEBY) + smartAccount.setActiveChain(ChainId.GOERLI) // Now on Rinkeby const isDeployed = await smartAccount.isDeployed() /// can pass chainId here @@ -360,7 +360,7 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.RINKEBY, ChainId.GANACHE] // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.GOERLI ,ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backend_url: "http://localhost:3000/v1" }) From 2ad219bb9b8837d4e62024b58aa5cba340801186 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 5 Aug 2022 18:46:02 +0530 Subject: [PATCH 0052/1247] mock response updated --- .../smart-account/tests/smartaccount.spec.ts | 367 ++++++++++++------ 1 file changed, 242 insertions(+), 125 deletions(-) diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index ff60dfb24..410dd5086 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -71,135 +71,252 @@ describe('Wallet integration', function () { .persist() .get('/v1/chains/') .reply(200, { - message: 'Success', - code: 200, - data: [ - { - chainId: 4, - name: 'Rinkeby', - symbol: 'ETH', - isL2: false, - isMainnet: false, - description: '', - blockExplorerUriTemplate: { - address: 'https://rinkeby.etherscan.io/address/', - txHash: 'https://rinkeby.etherscan.io/address/', - api: 'https://rinkeby.etherscan.io/' + "message": "Success", + "code": 200, + "data": [ + { + "chainId": 5, + "name": "Goerli", + "symbol": "ETH", + "isL2": false, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://goerli.etherscan.io/address/", + "txHash": "https://goerli.etherscan.io/address/", + "api": "https://goerli.etherscan.io/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x050bca32264195976Fe00BcA566B548413A9E658", + "multiSendAddress": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "multiSendCallAddress": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": true, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": true, + "walletAddress": "0x056DcE811A2b695171274855E7246039Df298158", + "entryPoint": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "fallBackHandler": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "relayerUrl": "", + "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 5, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "name": "Ether", + "symbol": "ETH", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", + "isNative": true + } }, - ensRegistryAddress: '', - walletFactoryAddress: '0x7146D756D1a95D9916f358b391f029eE0925F9bb', - multiSendAddress: '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', - multiSendCallAddress: '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', - walletCreatedCallBackEndpoint: 'https://localhost:3000/smart-wallet/', - walletCreatedEventHit: false, - EoaChangedCallBackEndpoint: 'https://localhost:3000/smart-wallet/owner', - EoaChangedEventHit: false, - walletAddress: '0x24A156B6eBcAc4fa02Aa7dEFF10B3b9f8FE43284', - entryPoint: '0xB63F450BbCeaf7D9DdBD35BF52DE1F674DD83e45', - fallBackHandler: '0x57F2aF40aDF62CA1972224625f105852D2cdB4D1', - relayerUrl: '', - providerUrl: 'https://rinkeby.infura.io/v3/d126f392798444609246423b06116c77', - indexerUrl: '', - backendNodeUrl: '', - token: { - name: 'Ethereum', - symbol: 'ETH', - chainId: 4, - ercType: 'NATIVE', - decimals: 18, - logoUri: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png', - address: 'null', - isNativeToken: true, - isEnabled: true - } - }, - { - chainId: 5, - name: 'Goerli', - symbol: 'ETH', - isL2: false, - isMainnet: false, - description: '', - blockExplorerUriTemplate: { - address: 'https://goerli.etherscan.io/address/', - txHash: 'https://goerli.etherscan.io/address/', - api: 'https://goerli.etherscan.io/' + { + "chainId": 80001, + "name": "Polygon Mumbai", + "symbol": "MATIC", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x050bca32264195976Fe00BcA566B548413A9E658", + "multiSendAddress": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "multiSendCallAddress": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": true, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": true, + "walletAddress": "0x056DcE811A2b695171274855E7246039Df298158", + "entryPoint": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "fallBackHandler": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "relayerUrl": "", + "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 80001, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "name": "Polygon Matic", + "symbol": "Matic", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png", + "isNative": true + } + }, + { + "chainId": 97, + "name": "BSC Testnet", + "symbol": "BNB", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://bscscan.com//address/", + "txHash": "https://bscscan.com/address/", + "api": "https://bscscan.com/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x050bca32264195976Fe00BcA566B548413A9E658", + "multiSendAddress": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "multiSendCallAddress": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": true, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": true, + "walletAddress": "0x056DcE811A2b695171274855E7246039Df298158", + "entryPoint": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "fallBackHandler": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "relayerUrl": "", + "providerUrl": "https://data-seed-prebsc-1-s1.binance.org:8545/", + "indexerUrl": "", + "backendNodeUrl": "" + }, + { + "chainId": 1337, + "name": "Ganache", + "symbol": "ETH", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": walletFactory.address, + "multiSendAddress": multiSend.address, + "multiSendCallAddress": multiSendCallOnly.address, + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": true, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": true, + "walletAddress": smartWallet.address, + "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", + "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", + "relayerUrl": "", + "providerUrl": "http://localhost:8545", + "indexerUrl": "", + "backendNodeUrl": "" }, - ensRegistryAddress: '', - walletFactoryAddress: '0x7146D756D1a95D9916f358b391f029eE0925F9bb', - multiSendAddress: '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', - multiSendCallAddress: '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', - walletCreatedCallBackEndpoint: 'https://localhost:3000/smart-wallet/', - walletCreatedEventHit: false, - EoaChangedCallBackEndpoint: 'https://localhost:3000/smart-wallet/owner', - EoaChangedEventHit: false, - walletAddress: '0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e', - entryPoint: '0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d', - fallBackHandler: '0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4', - relayerUrl: '', - providerUrl: 'https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg', - indexerUrl: '', - backendNodeUrl: '' - }, - { - chainId: 80001, - name: 'Polygon Mumbai', - symbol: 'MATIC', - isL2: true, - isMainnet: false, - description: '', - blockExplorerUriTemplate: { - address: 'https://mumbai.polygonscan.com/address/', - txHash: 'https://mumbai.polygonscan.com/address/', - api: 'https://api.mumbai.polygonscan.com/' + { + "chainId": 1, + "name": "Ethereum", + "symbol": "ETH", + "isL2": false, + "isMainnet": true, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://etherscan.io/address/", + "txHash": "https://etherscan.io/address/", + "api": "https://api.etherscan.io/" + }, + "ensRegistryAddress": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", + "walletFactoryAddress": "0x050bca32264195976Fe00BcA566B548413A9E658", + "multiSendAddress": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "multiSendCallAddress": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": true, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": true, + "walletAddress": "0x056DcE811A2b695171274855E7246039Df298158", + "entryPoint": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "fallBackHandler": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "relayerUrl": "", + "providerUrl": "https://kovan.infura.io/v3/d126f392798444609246423b06116c77", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 1, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "name": "Ether", + "symbol": "ETH", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", + "isNative": true + } }, - ensRegistryAddress: '', - walletFactoryAddress: '0x7146D756D1a95D9916f358b391f029eE0925F9bb', - multiSendAddress: '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', - multiSendCallAddress: '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', - walletCreatedCallBackEndpoint: 'https://localhost:3000/smart-wallet/', - walletCreatedEventHit: false, - EoaChangedCallBackEndpoint: 'https://localhost:3000/smart-wallet/owner', - EoaChangedEventHit: false, - walletAddress: '0x4A3334BA2b9Ff7c2b8bc270bC2b8a4B8e366839e', - entryPoint: '0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d', - fallBackHandler: '0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4', - relayerUrl: '', - providerUrl: - 'https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b', - indexerUrl: '', - backendNodeUrl: '' - }, - { - chainId: 1337, - name: 'Hardhat2', - symbol: 'ETH', - isL2: true, - isMainnet: false, - description: '', - blockExplorerUriTemplate: { - address: 'https://mumbai.polygonscan.com/address/', - txHash: 'https://mumbai.polygonscan.com/address/', - api: 'https://api.mumbai.polygonscan.com/' + { + "chainId": 137, + "name": "Polygon", + "symbol": "MATIC", + "isL2": true, + "isMainnet": true, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://polygonscan.com/address/", + "txHash": "https://polygonscan.com/address/", + "api": "https://api.polygonscan.com/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x050bca32264195976Fe00BcA566B548413A9E658", + "multiSendAddress": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "multiSendCallAddress": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": true, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": true, + "walletAddress": "0x056DcE811A2b695171274855E7246039Df298158", + "entryPoint": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "fallBackHandler": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "relayerUrl": "", + "providerUrl": "https://polygon-mainnet.g.alchemy.com/v2/s6bOKN9QDGXpVbsqzJMl_AHeZHNOCTcM", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 137, + "address": "0x0000000000000000000000000000000000001010", + "name": "Polygon Matic", + "symbol": "Matic", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png", + "isNative": true + } }, - ensRegistryAddress: '', - walletFactoryAddress: walletFactory.address, - multiSendAddress: multiSend.address, - multiSendCallAddress: multiSendCallOnly.address, - walletCreatedCallBackEndpoint: 'https://localhost:3000/smart-wallet/', - walletCreatedEventHit: false, - EoaChangedCallBackEndpoint: 'https://localhost:3000/smart-wallet/owner', - EoaChangedEventHit: false, - walletAddress: smartWallet.address, - entryPoint: '0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d', - fallBackHandler: '0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4', - relayerUrl: '', - providerUrl: 'http://localhost:8545', - indexerUrl: '', - backendNodeUrl: '' - } + { + "chainId": 56, + "name": "BSC Mainnet", + "symbol": "BNB", + "isL2": true, + "isMainnet": true, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://bscscan.com/address/", + "txHash": "https://bscscan.com/address/", + "api": "https://bscscan.com/" + }, + "ensRegistryAddress": "", + "walletFactoryAddress": "0x050bca32264195976Fe00BcA566B548413A9E658", + "multiSendAddress": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "multiSendCallAddress": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", + "walletCreatedEventHit": true, + "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", + "EoaChangedEventHit": true, + "walletAddress": "0x056DcE811A2b695171274855E7246039Df298158", + "entryPoint": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "fallBackHandler": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "relayerUrl": "", + "providerUrl": "https://bsc-dataseed2.binance.org/", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 56, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "name": "BNB Coin", + "symbol": "BNB", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png", + "isNative": true + } + } ] - }) + }) }) it('Should init and return details of smart account', async () => { @@ -351,7 +468,7 @@ describe('Wallet integration', function () { console.log(state) expect(isDeployed).to.be.equal(false) - expect(state.entryPointAddress).to.be.equal('0xB63F450BbCeaf7D9DdBD35BF52DE1F674DD83e45') + expect(state.entryPointAddress).to.be.equal('0xF05217199F1C25604c67993F11a81461Bc97F3Ab') }) it('Should be able to send transaction', async () => { From b62b3fae21b846d89f964ee34b80c9f17b029b18 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 5 Aug 2022 18:47:42 +0530 Subject: [PATCH 0053/1247] refactor --- packages/core-types/src/types.ts | 122 ------------------------------- 1 file changed, 122 deletions(-) diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index eda95c58e..21bddc756 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -11,7 +11,6 @@ export enum OperationType { DelegateCall // 1 } -// Temp export interface SmartAccountContext { baseWallet: SmartWalletContract walletFactory: SmartWalletFactoryContract @@ -26,133 +25,12 @@ export interface SmartAccountState { entryPointAddress: string fallbackHandlerAddress: string } - -// TODO -// Review location , names and usage of all types - -/*export interface RawTransactionType { - from?: string - gasPrice?: string | BigNumber - maxFeePerGas?: string | BigNumber - maxPriorityFeePerGas?: string | BigNumber - gasLimit?: string - to: string - value: BigNumberish - data?: string - chainId: number - nonce?: number | string - // accessList?: AccessListItem[]; - type?: number -}*/ - -/*export interface SignedTransaction { - rawTx: RawTransactionType - tx: WalletTransaction -}*/ - -/*export interface ExecTransaction { - to: string - value: BigNumberish - data: string - operation: number - targetTxGas: string | number -}*/ - -/*export interface FeeRefund { - baseGas: string | number - gasPrice: string | number - gasToken: string - refundReceiver: string -}*/ - -/*export interface MetaTransactionData { - readonly to: string - readonly value: string - readonly data: string - readonly operation?: OperationType -}*/ - -/*export interface SmartAccountTrxData extends MetaTransactionData { - readonly operation: OperationType - readonly targetTxGas: number - readonly baseGas: number - readonly gasPrice: number - readonly gasToken: string - readonly refundReceiver: string - readonly nonce: number -}*/ - -/*export interface SmartAccountTrxDataPartial extends MetaTransactionData { - readonly targetTxGas?: number - readonly baseGas?: number - readonly gasPrice?: number - readonly gasToken?: string - readonly refundReceiver?: string - readonly nonce?: number -}*/ - -/*export interface MetaTransaction { - to: string - value: BigNumberish - data: string - operation: number -}*/ - -/*export interface WalletTransaction extends MetaTransaction{ - targetTxGas: string | number - baseGas: string | number - gasPrice: string | number - gasToken: string - refundReceiver: string - nonce: number -}*/ - -/*export interface Signature { - readonly signer: string - readonly data: string - staticPart(): string - dynamicPart(): string -}*/ - -/*export interface SmartAccountTrx { - readonly data: Transaction - readonly signatures: Map - addSignature(signature: Signature): void - encodedSignatures(): string -}*/ - -/*export interface Transaction { - readonly to: string - readonly value: string - readonly data: string - readonly operation: OperationType - readonly targetTxGas: number -}*/ - export interface FeeRefundData { readonly baseGas: number readonly gasPrice: number readonly gasToken: string readonly refundReceiver: string } - -/*export interface TransactionOptions { - from?: string - gas?: number | string - gasLimit?: number | string - gasPrice?: number | string -}*/ - -/*export interface BaseTransactionResult { - hash: string -}*/ - -/*export interface TransactionResult extends BaseTransactionResult { - promiEvent?: PromiEvent - transactionResponse?: ContractTransaction - options?: TransactionOptions -}*/ - export interface Eip3770Address { prefix: string address: string From 3e54eabc86a81e223dd9d365ecd42fa3f01548c5 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 5 Aug 2022 19:17:19 +0530 Subject: [PATCH 0054/1247] update backend node url --- packages/smart-account/src/SmartAccount.ts | 2 +- packages/smart-account/src/types.ts | 4 ++-- packages/smart-account/tests/smartaccount.spec.ts | 8 +------- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 858831dd3..1f9f1fd16 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -549,7 +549,7 @@ class SmartAccount { export const DefaultSmartAccountConfig: SmartAccountConfig = { activeNetworkId: ChainId.GOERLI, //Update later supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], - backend_url: 'http://localhost:3000/v1' + backend_url: 'https://sdk-backend.staging.biconomy.io/v1' } export default SmartAccount diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 34f3c40fb..0e3d5dca6 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -6,8 +6,8 @@ import { // walletProvider: WalletProviderLike // TODO : Ability to provide custom URLs for all supported networks export interface SmartAccountConfig { - activeNetworkId: ChainId - supportedNetworksIds: ChainId[] + activeNetworkId: ChainId // same + supportedNetworksIds: ChainId[] // Network[] chainId: CbainId, rpcUrl?: string backend_url: string } // relayer_url diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 410dd5086..b79d2f566 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -67,7 +67,7 @@ describe('Wallet integration', function () { console.log('multi send deployed at : ', multiSend.address) console.log('multi send deployed at : ', multiSendCallOnly.address) - const scope = nock('http://localhost:3000') + const scope = nock('https://sdk-backend.staging.biconomy.io') .persist() .get('/v1/chains/') .reply(200, { @@ -398,8 +398,6 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names - // walletProvider: ethnode.provider, - //backend_url: "http://localhost:3000/v1" }) const smartAccount = await wallet.init() @@ -439,8 +437,6 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names - // walletProvider: ethnode.provider, - //backend_url: "http://localhost:3000/v1" }) const smartAccount = await wallet.init() @@ -478,8 +474,6 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, supportedNetworksIds: [ChainId.GOERLI ,ChainId.GANACHE] // has to be consisttent providers and network names - // walletProvider: ethnode.provider, - //backend_url: "http://localhost:3000/v1" }) const smartAccount = await wallet.init() From e1975fa1384b5b9504099193cec7202b500eb0e4 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 8 Aug 2022 00:06:47 +0530 Subject: [PATCH 0055/1247] version update --- lerna.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerna.json b/lerna.json index e6f868533..28fff685d 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages/*" ], "useNx": true, - "version": "0.0.2" + "version": "1.0.0" } From c25f08b6813fe6f801baeeecc26dca2971203848 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 8 Aug 2022 14:29:27 +0530 Subject: [PATCH 0056/1247] remove unnecessary import --- packages/core-types/src/types.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 21bddc756..df01f5624 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -2,7 +2,6 @@ import { SmartWalletFactoryContract } from './contracts/SmartWalletFactoryContra import { MultiSendContract } from './contracts/MultiSendContract' import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' import { SmartWalletContract } from './contracts/SmartWalletContract' -import { BigNumber, BigNumberish } from 'ethers' export type SmartAccountVersion = '1.3.0' | '1.2.0' | '1.1.1' From 42c527095232885d8dff6c17ace45a107babecc5 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 8 Aug 2022 14:31:49 +0530 Subject: [PATCH 0057/1247] v1.0.0 --- packages/ethers-lib/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 10 +++++----- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index c554dd211..00519b919 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -40,7 +40,7 @@ "typescript": "^4.6.3" }, "dependencies": { - "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/core-types": "^1.0.0", "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0" }, diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 989769b50..2e675cb19 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -63,7 +63,7 @@ } }, "dependencies": { - "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/core-types": "^1.0.0", "@ethersproject/abstract-signer": "^5.6.0", "@gnosis.pm/safe-core-sdk": "^2.1.0", "node-fetch": "^2.6.6" diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 4f7088a92..8c5c5c6b5 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -24,7 +24,7 @@ "lint": "tslint -p tsconfig.json" }, "dependencies": { - "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/core-types": "^1.0.0", "@ethersproject/providers": "^5.6.8", "ethers": "^5.6.9" }, diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 1a71b8e3a..b125eb70d 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -47,11 +47,11 @@ "typescript": "^4.6.3" }, "dependencies": { - "@biconomy-sdk/core-types": "*", - "@biconomy-sdk/ethers-lib": "*", - "@biconomy-sdk/node-client": "*", - "@biconomy-sdk/relayer": "*", - "@biconomy-sdk/transactions": "*", + "@biconomy-sdk/core-types": "^1.0.0", + "@biconomy-sdk/ethers-lib": "^1.0.0", + "@biconomy-sdk/node-client": "^1.0.0", + "@biconomy-sdk/relayer": "^1.0.0", + "@biconomy-sdk/transactions": "^1.0.0", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", From 812c9698f03c0e1171e3f77747952a2684cc6c43 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 8 Aug 2022 19:32:29 +0530 Subject: [PATCH 0058/1247] publish config public --- package.json | 3 +++ packages/core-types/package.json | 3 +++ packages/ethers-lib/package.json | 3 +++ packages/node-client/package.json | 3 +++ packages/relayer/package.json | 3 +++ packages/smart-account/package.json | 3 +++ packages/transactions/package.json | 3 +++ 7 files changed, 21 insertions(+) diff --git a/package.json b/package.json index 6185146a1..01b92704e 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,9 @@ "packages/*" ] }, + "publishConfig": { + "access": "public" + }, "author": "Biconomy (https://biconomy.io)", "devDependencies": { "hardhat": "^2.9.9", diff --git a/packages/core-types/package.json b/packages/core-types/package.json index fefc13392..2da83105a 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -31,6 +31,9 @@ "prettier": "^2.6.2", "typescript": "^4.6.3" }, + "publishConfig": { + "access": "public" + }, "dependencies": { "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 00519b919..130ca82ea 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -39,6 +39,9 @@ "typechain": "^7.0.0", "typescript": "^4.6.3" }, + "publishConfig": { + "access": "public" + }, "dependencies": { "@biconomy-sdk/core-types": "^1.0.0", "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 2e675cb19..cf3f840bd 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -62,6 +62,9 @@ "pre-commit": "lint-staged" } }, + "publishConfig": { + "access": "public" + }, "dependencies": { "@biconomy-sdk/core-types": "^1.0.0", "@ethersproject/abstract-signer": "^5.6.0", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 8c5c5c6b5..c64f636a1 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -31,6 +31,9 @@ "devDependencies": { "@biconomy-sdk/core-types": "*" }, + "publishConfig": { + "access": "public" + }, "bugs": { "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" } diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index b125eb70d..961c265ad 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -26,6 +26,9 @@ "files": [ "dist" ], + "publishConfig": { + "access": "public" + }, "devDependencies": { "@biconomy-sdk/core-types": "*", "@biconomy-sdk/ethers-lib": "*", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index b81078d9b..9a3e40233 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -29,6 +29,9 @@ "bugs": { "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" }, + "publishConfig": { + "access": "public" + }, "dependencies": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/constants": "^5.6.1", From a90def0027c878b96100bb214d7a889b4cba0396 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 8 Aug 2022 19:41:26 +0530 Subject: [PATCH 0059/1247] remove from non-leaf package --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index 01b92704e..6185146a1 100644 --- a/package.json +++ b/package.json @@ -26,9 +26,6 @@ "packages/*" ] }, - "publishConfig": { - "access": "public" - }, "author": "Biconomy (https://biconomy.io)", "devDependencies": { "hardhat": "^2.9.9", From 8be2d486df139717da4eab8a5f469e6b1a363844 Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 8 Aug 2022 20:42:33 +0500 Subject: [PATCH 0060/1247] versioning implementation --- link.sh | 4 + package-lock.json | 26 +- .../core-types/src/ethereumLibs/EthAdapter.ts | 10 +- packages/core-types/src/types.ts | 3 +- packages/ethers-lib/contracts/Index.sol | 20 - packages/ethers-lib/contracts/V1.0.0.sol | 19 + packages/ethers-lib/contracts/V1.0.1.sol | 19 + packages/ethers-lib/hardhat.config.ts | 6 + packages/ethers-lib/package.json | 4 +- .../scripts/generateTypechainFiles.ts | 25 +- .../references/aa-4337/ECDSA.sol | 246 --------- .../references/aa-4337/EntryPoint.sol | 408 --------------- .../references/aa-4337/IPaymaster.sol | 42 -- .../references/aa-4337/IWallet.sol | 22 - .../references/aa-4337/SimpleWallet.sol | 133 ----- .../references/aa-4337/StakeManager.sol | 181 ------- .../references/aa-4337/UserOperation.sol | 82 --- .../references/factory/SingletonFactory.sol | 34 -- .../smart-contract-wallet/IWallet.sol | 22 - .../smart-contract-wallet/Proxy.sol | 40 -- .../smart-contract-wallet/SmartWallet.sol | 467 ------------------ .../smart-contract-wallet/WalletFactory.sol | 72 --- .../smart-contract-wallet/base/Executor.sol | 27 - .../base/FallbackManager.sol | 53 -- .../smart-contract-wallet/base/Module.sol | 6 - .../base/ModuleManager.sol | 133 ----- .../smart-contract-wallet/common/Enum.sol | 7 - .../common/SecuredTokenTransfer.sol | 35 -- .../common/SelfAuthorized.sol | 15 - .../common/SignatureDecoder.sol | 35 -- .../common/Singleton.sol | 27 - .../handler/DefaultCallbackHandler.sol | 61 --- .../interfaces/ERC1155TokenReceiver.sol | 49 -- .../interfaces/ERC721TokenReceiver.sol | 24 - .../interfaces/ERC777TokensRecipient.sol | 13 - .../interfaces/ICreate2Deployer.sol | 10 - .../interfaces/IERC1271Wallet.sol | 38 -- .../interfaces/IERC165.sol | 15 - .../interfaces/ISignatureValidator.sol | 20 - .../smart-contract-wallet/libs/ECDSA.sol | 250 ---------- .../smart-contract-wallet/libs/LibAddress.sol | 17 - .../smart-contract-wallet/libs/MultiSend.sol | 66 --- .../libs/MultiSendCallOnly.sol | 61 --- .../libs/UserOperation.sol | 81 --- .../modules/test/WhitelistModule.sol | 52 -- .../storage/WalletStorage.sol | 47 -- .../smart-contract-wallet/test/Button.sol | 14 - .../test/StakedTestToken.sol | 24 - .../test/StorageSetter.sol | 11 - .../smart-contract-wallet/test/TestToken.sol | 14 - .../utils/GasEstimator.sol | 16 - packages/ethers-lib/src/EthersAdapter.ts | 22 +- .../{ => v1.0.0}/EntryPointEthersContract.ts | 4 +- .../v1.0.1/EntryPointEthersContract.ts | 42 ++ .../{ => v1.0.0}/MultiSendEthersContract.ts | 2 +- .../v1.0.1/MultiSendEthersContract.ts | 32 ++ .../MultiSendCallOnlyEthersContract.ts | 2 +- .../v1.0.1/MultiSendCallOnlyEthersContract.ts | 32 ++ .../{ => v1.0.0}/SmartWalletContractEthers.ts | 6 +- .../v1.0.1/SmartWalletContractEthers.ts | 79 +++ .../SmartWalletProxyFactoryEthersContract.ts | 4 +- .../SmartWalletProxyFactoryEthersContract.ts | 60 +++ .../src/contracts/contractInstancesEthers.ts | 78 ++- .../node-client/src/types/NodeClientTypes.ts | 23 +- packages/smart-account/src/SmartAccount.ts | 283 ++++++----- .../src/utils/FetchContractsInfo.ts | 66 ++- 66 files changed, 657 insertions(+), 3184 deletions(-) create mode 100755 link.sh delete mode 100644 packages/ethers-lib/contracts/Index.sol create mode 100644 packages/ethers-lib/contracts/V1.0.0.sol create mode 100644 packages/ethers-lib/contracts/V1.0.1.sol delete mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/ECDSA.sol delete mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/EntryPoint.sol delete mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/IPaymaster.sol delete mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/IWallet.sol delete mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/SimpleWallet.sol delete mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/StakeManager.sol delete mode 100644 packages/ethers-lib/scw-contracts/references/aa-4337/UserOperation.sol delete mode 100644 packages/ethers-lib/scw-contracts/references/factory/SingletonFactory.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/IWallet.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/Proxy.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/WalletFactory.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Executor.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Module.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Enum.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SecuredTokenTransfer.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SelfAuthorized.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SignatureDecoder.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Singleton.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC1155TokenReceiver.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC721TokenReceiver.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC777TokensRecipient.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ICreate2Deployer.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC1271Wallet.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC165.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ISignatureValidator.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/ECDSA.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/LibAddress.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSend.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/UserOperation.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/test/Button.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StakedTestToken.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StorageSetter.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/utils/GasEstimator.sol rename packages/ethers-lib/src/contracts/EntryPointContract/{ => v1.0.0}/EntryPointEthersContract.ts (91%) create mode 100644 packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts rename packages/ethers-lib/src/contracts/MultiSend/{ => v1.0.0}/MultiSendEthersContract.ts (91%) create mode 100644 packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts rename packages/ethers-lib/src/contracts/MultiSendCallOnly/{ => v1.0.0}/MultiSendCallOnlyEthersContract.ts (91%) create mode 100644 packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts rename packages/ethers-lib/src/contracts/SmartWallet/{ => v1.0.0}/SmartWalletContractEthers.ts (90%) create mode 100644 packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts rename packages/ethers-lib/src/contracts/SmartWalletFactory/{ => v1.0.0}/SmartWalletProxyFactoryEthersContract.ts (92%) create mode 100644 packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts diff --git a/link.sh b/link.sh new file mode 100755 index 000000000..779cb6bcf --- /dev/null +++ b/link.sh @@ -0,0 +1,4 @@ +#!/bin/sh +npm run unbuild +npm run build +npm link \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 242762ed1..3d6dc46de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1996,21 +1996,21 @@ } }, "@nrwl/cli": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.2.tgz", - "integrity": "sha512-uriSxM33IpiBpW9kHEW3gw5OjPaQe3jHdWUMOT88TrqTlf449qe01Sys8+H2YgJMIcLTFYX0fP4V1K9jqKKZCg==", + "version": "14.5.4", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.4.tgz", + "integrity": "sha512-UYr14hxeYV8p/zt6D6z33hljZJQROJAVxSC+mm72fyVvy88Gt0sQNLfMmOARXur0p/73PSLM0jJ2Sr7Ftsuu+A==", "dev": true, "requires": { - "nx": "14.5.2" + "nx": "14.5.4" } }, "@nrwl/tao": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.2.tgz", - "integrity": "sha512-SEx3SM7xQiB8mOQ/gCt7lFJKRrkq3rBX6FiV3bl+dQtuKK2zKQbyikY9r+MCZCQNqZAud3HJ2xCyKZBhK8htQg==", + "version": "14.5.4", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.4.tgz", + "integrity": "sha512-a2GCuSE8WghjehuU3GVO63KZEnZXXQiqEg137yN/Na+PxwSu68XeaX53SLyzRskTV120YwBBy1YCTNzAZxxsjg==", "dev": true, "requires": { - "nx": "14.5.2" + "nx": "14.5.4" } }, "@octokit/auth-token": { @@ -6319,13 +6319,13 @@ } }, "nx": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.5.2.tgz", - "integrity": "sha512-I6KWVMR5Ksj/HgderkcmJmyaqHdWblQeFUeVq9to263Wr3QCIRigbvdDI3rq3ZQCBMyhUSOVP9MFXROoRVtJXQ==", + "version": "14.5.4", + "resolved": "https://registry.npmjs.org/nx/-/nx-14.5.4.tgz", + "integrity": "sha512-xv1nTaQP6kqVDE4PXcB1tLlgzNAPUHE/2vlqSLgxjNb6colKf0vrEZhVTjhnbqBeJiTb33gUx50bBXkurCkN5w==", "dev": true, "requires": { - "@nrwl/cli": "14.5.2", - "@nrwl/tao": "14.5.2", + "@nrwl/cli": "14.5.4", + "@nrwl/tao": "14.5.4", "@parcel/watcher": "2.0.4", "chalk": "4.1.0", "chokidar": "^3.5.1", diff --git a/packages/core-types/src/ethereumLibs/EthAdapter.ts b/packages/core-types/src/ethereumLibs/EthAdapter.ts index 0bf8327ed..1406b4bd7 100644 --- a/packages/core-types/src/ethereumLibs/EthAdapter.ts +++ b/packages/core-types/src/ethereumLibs/EthAdapter.ts @@ -4,7 +4,7 @@ import { SmartWalletContract } from 'contracts/SmartWalletContract' import { MultiSendContract } from '../contracts/MultiSendContract' import { MultiSendCallOnlyContract } from '../contracts/MultiSendCallOnlyContract' import { SmartWalletFactoryContract } from '../contracts/SmartWalletFactoryContract' -import { Eip3770Address } from '../types' +import { Eip3770Address, SmartAccountVersion } from '../types' export interface EthAdapterTransaction { to: string @@ -24,10 +24,10 @@ export interface EthAdapter { getEip3770Address(fullAddress: string): Promise getBalance(address: string): Promise getChainId(): Promise - getSmartWalletContract(address: string): SmartWalletContract - getMultiSendContract(address: string): MultiSendContract - getMultiSendCallOnlyContract(address: string): MultiSendCallOnlyContract - getSmartWalletFactoryContract(address: string): SmartWalletFactoryContract + getSmartWalletContract(smartAccountVersion: SmartAccountVersion, address: string): SmartWalletContract + getMultiSendContract(smartAccountVersion: SmartAccountVersion, address: string): MultiSendContract + getMultiSendCallOnlyContract(smartAccountVersion: SmartAccountVersion, address: string): MultiSendCallOnlyContract + getSmartWalletFactoryContract(smartAccountVersion: SmartAccountVersion, address: string): SmartWalletFactoryContract getContractCode(address: string): Promise isContractDeployed(address: string): Promise getTransaction(transactionHash: string): Promise diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 21bddc756..fdf91446d 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -2,9 +2,8 @@ import { SmartWalletFactoryContract } from './contracts/SmartWalletFactoryContra import { MultiSendContract } from './contracts/MultiSendContract' import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' import { SmartWalletContract } from './contracts/SmartWalletContract' -import { BigNumber, BigNumberish } from 'ethers' -export type SmartAccountVersion = '1.3.0' | '1.2.0' | '1.1.1' +export type SmartAccountVersion = '1.0.1' | '1.0.0' export enum OperationType { Call, // 0 diff --git a/packages/ethers-lib/contracts/Index.sol b/packages/ethers-lib/contracts/Index.sol deleted file mode 100644 index 06dcbb5f4..000000000 --- a/packages/ethers-lib/contracts/Index.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity >=0.4.0 <=0.8.15; - -import { WalletFactory } from "../scw-contracts/smart-contract-wallet/WalletFactory.sol"; -import { SmartWallet } from "../scw-contracts/smart-contract-wallet/SmartWallet.sol"; -import { MultiSend } from "../scw-contracts/smart-contract-wallet/libs/MultiSend.sol"; -import { MultiSendCallOnly } from "../scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; -import { WhitelistModule } from "../scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol"; -import { EntryPoint } from "../scw-contracts/references/aa-4337/EntryPoint.sol"; - -contract SmartWalletFactoryContract is WalletFactory { - constructor(address _defaultImpl) WalletFactory(_defaultImpl){} -} -contract SmartWalletContract is SmartWallet {} -contract MultiSendContract is MultiSend {} -contract MultiSendCallOnlyContract is MultiSendCallOnly {} -contract EntryPointContract is EntryPoint { - constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} -} - diff --git a/packages/ethers-lib/contracts/V1.0.0.sol b/packages/ethers-lib/contracts/V1.0.0.sol new file mode 100644 index 000000000..b27b031f4 --- /dev/null +++ b/packages/ethers-lib/contracts/V1.0.0.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.4.0 <=0.8.15; + +import { WalletFactory } from "scw-contracts-v1.0.0/contracts/smart-contract-wallet/WalletFactory.sol"; +import { SmartWallet } from "scw-contracts-v1.0.0/contracts/smart-contract-wallet/SmartWallet.sol"; +import { MultiSend } from "scw-contracts-v1.0.0/contracts/smart-contract-wallet/libs/MultiSend.sol"; +import { MultiSendCallOnly } from "scw-contracts-v1.0.0/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; +import { EntryPoint } from "scw-contracts-v1.0.0/contracts/references/aa-4337/EntryPoint.sol"; + +contract SmartWalletFactoryContract is WalletFactory { + constructor(address _defaultImpl) WalletFactory(_defaultImpl){} +} +contract SmartWalletContract is SmartWallet {} +contract MultiSendContract is MultiSend {} +contract MultiSendCallOnlyContract is MultiSendCallOnly {} +contract EntryPointContract is EntryPoint { + constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} +} + diff --git a/packages/ethers-lib/contracts/V1.0.1.sol b/packages/ethers-lib/contracts/V1.0.1.sol new file mode 100644 index 000000000..33ff934c0 --- /dev/null +++ b/packages/ethers-lib/contracts/V1.0.1.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.4.0 <=0.8.15; + +import { WalletFactory } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/WalletFactory.sol"; +import { SmartWallet } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/SmartWallet.sol"; +import { MultiSend } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/libs/MultiSend.sol"; +import { MultiSendCallOnly } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; +import { EntryPoint } from "scw-contracts-v1.0.1/contracts/references/aa-4337/EntryPoint.sol"; + +contract SmartWalletFactoryContract is WalletFactory { + constructor(address _defaultImpl) WalletFactory(_defaultImpl){} +} +contract SmartWalletContract is SmartWallet {} +contract MultiSendContract is MultiSend {} +contract MultiSendCallOnlyContract is MultiSendCallOnly {} +contract EntryPointContract is EntryPoint { + constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} +} + diff --git a/packages/ethers-lib/hardhat.config.ts b/packages/ethers-lib/hardhat.config.ts index 7d53011c7..3ff5c61f5 100644 --- a/packages/ethers-lib/hardhat.config.ts +++ b/packages/ethers-lib/hardhat.config.ts @@ -18,6 +18,12 @@ const config: HardhatUserConfig = { optimizer: { enabled: true, runs: 200 }, }, }, + { + version: "0.8.12", + settings: { + optimizer: { enabled: true, runs: 200 }, + }, + }, { version: "0.4.23", settings: { diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index c554dd211..e6310fb12 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -42,7 +42,9 @@ "dependencies": { "@biconomy-sdk/core-types": "*", "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", - "@openzeppelin/contracts": "^4.6.0" + "@openzeppelin/contracts": "^4.6.0", + "scw-contracts-v1.0.0": "npm:scw-contracts@^1.0.0", + "scw-contracts-v1.0.1": "npm:scw-contracts@^1.0.1" }, "peerDependencies": { "ethers": "^5.5.3" diff --git a/packages/ethers-lib/scripts/generateTypechainFiles.ts b/packages/ethers-lib/scripts/generateTypechainFiles.ts index 35cb0bf22..a93fa80d9 100644 --- a/packages/ethers-lib/scripts/generateTypechainFiles.ts +++ b/packages/ethers-lib/scripts/generateTypechainFiles.ts @@ -13,14 +13,21 @@ const outDirTests = 'typechain/tests/' // Contract list for which the Typechain files will be generated // Will be included in dist/ folder -const smartAccountContractsPath = './artifacts/contracts/index.sol' +const smartAccountContractsPath = './artifacts/contracts' const smartAccountContracts_V1_0_0 = [ - `${smartAccountContractsPath}/SmartWalletContract.json`, - `${smartAccountContractsPath}/MultiSendContract.json`, - `${smartAccountContractsPath}/MultiSendCallOnlyContract.json`, - `${smartAccountContractsPath}/SmartWalletFactoryContract.json`, - `${smartAccountContractsPath}/EntryPointContract.json` + `${smartAccountContractsPath}/V1.0.0.sol/SmartWalletContract.json`, + `${smartAccountContractsPath}/V1.0.0.sol//MultiSendContract.json`, + `${smartAccountContractsPath}/V1.0.0.sol//MultiSendCallOnlyContract.json`, + `${smartAccountContractsPath}/V1.0.0.sol//SmartWalletFactoryContract.json`, + `${smartAccountContractsPath}/V1.0.0.sol//EntryPointContract.json` +].join(' ') +const smartAccountContracts_V1_0_1 = [ + `${smartAccountContractsPath}/V1.0.1.sol/SmartWalletContract.json`, + `${smartAccountContractsPath}/V1.0.1.sol/MultiSendContract.json`, + `${smartAccountContractsPath}/V1.0.1.sol/MultiSendCallOnlyContract.json`, + `${smartAccountContractsPath}/V1.0.1.sol/SmartWalletFactoryContract.json`, + `${smartAccountContractsPath}/V1.0.1.sol/EntryPointContract.json` ].join(' ') // Remove existing Typechain files @@ -59,7 +66,13 @@ const ethersV5 = 'ethers-v5' // Src: Ethers V5 types generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.0`, smartAccountContracts_V1_0_0) +generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.1`, smartAccountContracts_V1_0_1) + moveTypechainFiles( `${typeChainDirectorySrcPath}${ethersV5}/v1.0.0`, `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.0` ) +moveTypechainFiles( + `${typeChainDirectorySrcPath}${ethersV5}/v1.0.1`, + `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.1` +) diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/ECDSA.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/ECDSA.sol deleted file mode 100644 index b9ba95ab4..000000000 --- a/packages/ethers-lib/scw-contracts/references/aa-4337/ECDSA.sol +++ /dev/null @@ -1,246 +0,0 @@ -// SPDX-License-Identifier: MIT -// a copy of import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", with tiny modification: -// ecrecover should not use the "GAS" opcode. -// (its a precompile, and uses fixed gas anyway) -// instead, ecrecover2 uses assembly. -// Had to change "pure" to "view", since the compiler can't tell this "staticcall" is pure - -pragma solidity ^0.8.0; - -/** - * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. - * - * These functions can be used to verify that a message was signed by the holder - * of the private keys of a given address. - */ -library ECDSA { - enum RecoverError { - NoError, - InvalidSignature, - InvalidSignatureLength, - InvalidSignatureS, - InvalidSignatureV - } - - function _throwError(RecoverError error) private pure { - if (error == RecoverError.NoError) { - return; - // no error: do nothing - } else if (error == RecoverError.InvalidSignature) { - revert("ECDSA: invalid signature"); - } else if (error == RecoverError.InvalidSignatureLength) { - revert("ECDSA: invalid signature length"); - } else if (error == RecoverError.InvalidSignatureS) { - revert("ECDSA: invalid signature 's' value"); - } else if (error == RecoverError.InvalidSignatureV) { - revert("ECDSA: invalid signature 'v' value"); - } - } - - /** - * @dev Returns the address that signed a hashed message (`hash`) with - * `signature` or error string. This address can then be used for verification purposes. - * - * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: - * this function rejects them by requiring the `s` value to be in the lower - * half order, and the `v` value to be either 27 or 28. - * - * IMPORTANT: `hash` _must_ be the result of a hash operation for the - * verification to be secure: it is possible to craft signatures that - * recover to arbitrary addresses for non-hashed data. A safe way to ensure - * this is by receiving a hash of the original message (which may otherwise - * be too long), and then calling {toEthSignedMessageHash} on it. - * - * Documentation for signature generation: - * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] - * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] - * - * _Available since v4.3._ - */ - function tryRecover(bytes32 hash, bytes memory signature) internal view returns (address, RecoverError) { - // Check the signature length - // - case 65: r,s,v signature (standard) - // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ - if (signature.length == 65) { - bytes32 r; - bytes32 s; - uint8 v; - // ecrecover takes the signature parameters, and the only way to get them - // currently is to use assembly. - assembly { - r := mload(add(signature, 0x20)) - s := mload(add(signature, 0x40)) - v := byte(0, mload(add(signature, 0x60))) - } - return tryRecover(hash, v, r, s); - } else if (signature.length == 64) { - bytes32 r; - bytes32 vs; - // ecrecover takes the signature parameters, and the only way to get them - // currently is to use assembly. - assembly { - r := mload(add(signature, 0x20)) - vs := mload(add(signature, 0x40)) - } - return tryRecover(hash, r, vs); - } else { - return (address(0), RecoverError.InvalidSignatureLength); - } - } - - /** - * @dev Returns the address that signed a hashed message (`hash`) with - * `signature`. This address can then be used for verification purposes. - * - * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: - * this function rejects them by requiring the `s` value to be in the lower - * half order, and the `v` value to be either 27 or 28. - * - * IMPORTANT: `hash` _must_ be the result of a hash operation for the - * verification to be secure: it is possible to craft signatures that - * recover to arbitrary addresses for non-hashed data. A safe way to ensure - * this is by receiving a hash of the original message (which may otherwise - * be too long), and then calling {toEthSignedMessageHash} on it. - */ - function recover(bytes32 hash, bytes memory signature) internal view returns (address) { - (address recovered, RecoverError error) = tryRecover(hash, signature); - _throwError(error); - return recovered; - } - - /** - * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. - * - * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] - * - * _Available since v4.3._ - */ - function tryRecover( - bytes32 hash, - bytes32 r, - bytes32 vs - ) internal view returns (address, RecoverError) { - bytes32 s; - uint8 v; - assembly { - s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) - v := add(shr(255, vs), 27) - } - return tryRecover(hash, v, r, s); - } - - /** - * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. - * - * _Available since v4.2._ - */ - function recover( - bytes32 hash, - bytes32 r, - bytes32 vs - ) internal view returns (address) { - (address recovered, RecoverError error) = tryRecover(hash, r, vs); - _throwError(error); - return recovered; - } - - /** - * @dev Overload of {ECDSA-tryRecover} that receives the `v`, - * `r` and `s` signature fields separately. - * - * _Available since v4.3._ - */ - function tryRecover( - bytes32 hash, - uint8 v, - bytes32 r, - bytes32 s - ) internal view returns (address, RecoverError) { - // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature - // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines - // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most - // signatures from current libraries generate a unique signature with an s-value in the lower half order. - // - // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value - // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or - // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept - // these malleable signatures as well. - if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { - return (address(0), RecoverError.InvalidSignatureS); - } - if (v != 27 && v != 28) { - return (address(0), RecoverError.InvalidSignatureV); - } - - // If the signature is valid (and not malleable), return the signer address - // address signer = ecrecover(hash,v,r,s); - address signer = ecrecover2(hash, v, r, s); - - if (signer == address(0)) { - return (address(0), RecoverError.InvalidSignature); - } - - return (signer, RecoverError.NoError); - } - - function ecrecover2(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal view returns (address signer) { - uint status; - assembly { - let pointer := mload(0x40) - - mstore(pointer, hash) - mstore(add(pointer, 0x20), v) - mstore(add(pointer, 0x40), r) - mstore(add(pointer, 0x60), s) - - - status := staticcall(not(0), 0x01, pointer, 0x80, pointer, 0x20) - signer := mload(pointer) - // not required by this code, but other solidity code assumes unused data is zero... - mstore(pointer, 0) - mstore(add(pointer, 0x20), 0) - } - } - - /** - * @dev Overload of {ECDSA-recover} that receives the `v`, - * `r` and `s` signature fields separately. - */ - function recover( - bytes32 hash, - uint8 v, - bytes32 r, - bytes32 s - ) internal view returns (address) { - (address recovered, RecoverError error) = tryRecover(hash, v, r, s); - _throwError(error); - return recovered; - } - - /** - * @dev Returns an Ethereum Signed Message, created from a `hash`. This - * produces hash corresponding to the one signed with the - * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] - * JSON-RPC method as part of EIP-191. - * - * See {recover}. - */ - function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { - // 32 is the length in bytes of hash, - // enforced by the type signature above - return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); - } - - /** - * @dev Returns an Ethereum Signed Typed Data, created from a - * `domainSeparator` and a `structHash`. This produces hash corresponding - * to the one signed with the - * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] - * JSON-RPC method as part of EIP-712. - * - * See {recover}. - */ - function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { - return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); - } -} diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/EntryPoint.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/EntryPoint.sol deleted file mode 100644 index 0ba64afab..000000000 --- a/packages/ethers-lib/scw-contracts/references/aa-4337/EntryPoint.sol +++ /dev/null @@ -1,408 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.0; - -/* solhint-disable avoid-low-level-calls */ -/* solhint-disable no-inline-assembly */ -/* solhint-disable reason-string */ - -import "./StakeManager.sol"; -import "./UserOperation.sol"; -import "./IWallet.sol"; -import "./IPaymaster.sol"; - -interface ICreate2Deployer { - function deploy(bytes memory _initCode, bytes32 _salt) external returns (address); -} - -contract EntryPoint is StakeManager { - - using UserOperationLib for UserOperation; - - enum PaymentMode { - paymasterDeposit, // if paymaster is set, use paymaster's deposit to pay. - walletDeposit // pay with wallet deposit. - } - - address public immutable create2factory; - - /*** - * An event emitted after each successful request - * @param requestId - unique identifier for the request (hash its entire content, except signature). - * @param sender - the account that generates this request. - * @param paymaster - if non-null, the paymaster that pays for this request. - * @param nonce - the nonce value from the request - * @param actualGasCost - the total cost (in gas) of this request. - * @param actualGasPrice - the actual gas price the sender agreed to pay. - * @param success - true if the sender transaction succeeded, false if reverted. - */ - event UserOperationEvent(bytes32 indexed requestId, address indexed sender, address indexed paymaster, uint256 nonce, uint256 actualGasCost, uint256 actualGasPrice, bool success); - - /** - * An event emitted if the UserOperation "callData" reverted with non-zero length - * @param requestId the request unique identifier. - * @param sender the sender of this request - * @param nonce the nonce used in the request - * @param revertReason - the return bytes from the (reverted) call to "callData". - */ - event UserOperationRevertReason(bytes32 indexed requestId, address indexed sender, uint256 nonce, bytes revertReason); - - /** - * a custom revert error of handleOps, to identify the offending op. - * NOTE: if simulateValidation passes successfully, there should be no reason for handleOps to fail on it. - * @param opIndex - index into the array of ops to the failed one (in simulateValidation, this is always zero) - * @param paymaster - if paymaster.validatePaymasterUserOp fails, this will be the paymaster's address. if validateUserOp failed, - * this value will be zero (since it failed before accessing the paymaster) - * @param reason - revert reason - * Should be caught in off-chain handleOps simulation and not happen on-chain. - * Useful for mitigating DoS attempts against batchers or for troubleshooting of wallet/paymaster reverts. - */ - error FailedOp(uint256 opIndex, address paymaster, string reason); - - /** - * @param _create2factory - contract to "create2" wallets (not the EntryPoint itself, so that the EntryPoint can be upgraded) - * @param _paymasterStake - minimum required locked stake for a paymaster - * @param _unstakeDelaySec - minimum time (in seconds) a paymaster stake must be locked - */ - constructor(address _create2factory, uint256 _paymasterStake, uint32 _unstakeDelaySec) StakeManager(_paymasterStake, _unstakeDelaySec) { - require(_create2factory != address(0), "invalid create2factory"); - require(_unstakeDelaySec > 0, "invalid unstakeDelay"); - require(_paymasterStake > 0, "invalid paymasterStake"); - create2factory = _create2factory; - } - - /** - * compensate the caller's beneficiary address with the collected fees of all UserOperations. - * @param beneficiary the address to receive the fees - * @param amount amount to transfer. - */ - function _compensate(address payable beneficiary, uint256 amount) internal { - require(beneficiary != address(0), "invalid beneficiary"); - (bool success,) = beneficiary.call{value : amount}(""); - require(success); - } - - /** - * Execute a batch of UserOperation. - * @param ops the operations to execute - * @param beneficiary the address to receive the fees - */ - function handleOps(UserOperation[] calldata ops, address payable beneficiary) public { - - uint256 opslen = ops.length; - UserOpInfo[] memory opInfos = new UserOpInfo[](opslen); - - unchecked { - for (uint256 i = 0; i < opslen; i++) { - uint256 preGas = gasleft(); - UserOperation calldata op = ops[i]; - - bytes memory context; - uint256 contextOffset; - bytes32 requestId = getRequestId(op); - uint256 prefund; - PaymentMode paymentMode; - (prefund, paymentMode, context) = _validatePrepayment(i, op, requestId); - assembly {contextOffset := context} - opInfos[i] = UserOpInfo( - requestId, - prefund, - paymentMode, - contextOffset, - preGas - gasleft() + op.preVerificationGas - ); - } - - uint256 collected = 0; - - for (uint256 i = 0; i < ops.length; i++) { - uint256 preGas = gasleft(); - UserOperation calldata op = ops[i]; - UserOpInfo memory opInfo = opInfos[i]; - uint256 contextOffset = opInfo.contextOffset; - bytes memory context; - assembly {context := contextOffset} - - try this.innerHandleOp(op, opInfo, context) returns (uint256 _actualGasCost) { - collected += _actualGasCost; - } catch { - uint256 actualGas = preGas - gasleft() + opInfo.preOpGas; - collected += _handlePostOp(i, IPaymaster.PostOpMode.postOpReverted, op, opInfo, context, actualGas); - } - } - - _compensate(beneficiary, collected); - } //unchecked - } - - struct UserOpInfo { - bytes32 requestId; - uint256 prefund; - PaymentMode paymentMode; - uint256 contextOffset; - uint256 preOpGas; - } - - /** - * inner function to handle a UserOperation. - * Must be declared "external" to open a call context, but it can only be called by handleOps. - */ - function innerHandleOp(UserOperation calldata op, UserOpInfo calldata opInfo, bytes calldata context) external returns (uint256 actualGasCost) { - uint256 preGas = gasleft(); - require(msg.sender == address(this)); - - IPaymaster.PostOpMode mode = IPaymaster.PostOpMode.opSucceeded; - if (op.callData.length > 0) { - - (bool success,bytes memory result) = address(op.getSender()).call{gas : op.callGas}(op.callData); - if (!success) { - if (result.length > 0) { - emit UserOperationRevertReason(opInfo.requestId, op.getSender(), op.nonce, result); - } - mode = IPaymaster.PostOpMode.opReverted; - } - } - - unchecked { - uint256 actualGas = preGas - gasleft() + opInfo.preOpGas; - //note: opIndex is ignored (relevant only if mode==postOpReverted, which is only possible outside of innerHandleOp) - return _handlePostOp(0, mode, op, opInfo, context, actualGas); - } - } - - /** - * generate a request Id - unique identifier for this request. - * the request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid. - */ - function getRequestId(UserOperation calldata userOp) public view returns (bytes32) { - return keccak256(abi.encode(userOp.hash(), address(this), block.chainid)); - } - - /** - * Simulate a call to wallet.validateUserOp and paymaster.validatePaymasterUserOp. - * Validation succeeds if the call doesn't revert. - * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage outside the wallet's data. - * In order to split the running opcodes of the wallet (validateUserOp) from the paymaster's validatePaymasterUserOp, - * it should look for the NUMBER opcode at depth=1 (which itself is a banned opcode) - * @return preOpGas total gas used by validation (including contract creation) - * @return prefund the amount the wallet had to prefund (zero in case a paymaster pays) - */ - function simulateValidation(UserOperation calldata userOp) external returns (uint256 preOpGas, uint256 prefund) { - uint256 preGas = gasleft(); - - bytes32 requestId = getRequestId(userOp); - (prefund,,) = _validatePrepayment(0, userOp, requestId); - preOpGas = preGas - gasleft() + userOp.preVerificationGas; - - require(msg.sender == address(0), "must be called off-chain with from=zero-addr"); - } - - function _getPaymentInfo(UserOperation calldata userOp) internal view returns (uint256 requiredPrefund, PaymentMode paymentMode) { - requiredPrefund = userOp.requiredPreFund(); - if (userOp.hasPaymaster()) { - paymentMode = PaymentMode.paymasterDeposit; - } else { - paymentMode = PaymentMode.walletDeposit; - } - } - - // create the sender's contract if needed. - function _createSenderIfNeeded(UserOperation calldata op) internal { - if (op.initCode.length != 0) { - // note that we're still under the gas limit of validate, so probably - // this create2 creates a proxy account. - // @dev initCode must be unique (e.g. contains the signer address), to make sure - // it can only be executed from the entryPoint, and called with its initialization code (callData) - address sender1 = ICreate2Deployer(create2factory).deploy(op.initCode, bytes32(op.nonce)); - require(sender1 != address(0), "create2 failed"); - require(sender1 == op.getSender(), "sender doesn't match create2 address"); - } - } - - /** - * Get counterfactual sender address. - * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation. - * @param initCode the constructor code to be passed into the UserOperation. - * @param salt the salt parameter, to be passed as "nonce" in the UserOperation. - */ - function getSenderAddress(bytes memory initCode, uint256 salt) public view returns (address) { - bytes32 hash = keccak256( - abi.encodePacked( - bytes1(0xff), - address(create2factory), - salt, - keccak256(initCode) - ) - ); - - // NOTE: cast last 20 bytes of hash to address - return address(uint160(uint256(hash))); - } - - /** - * call wallet.validateUserOp. - * revert (with FailedOp) in case validateUserOp reverts, or wallet didn't send required prefund. - * decrement wallet's deposit if needed - */ - function _validateWalletPrepayment(uint256 opIndex, UserOperation calldata op, bytes32 requestId, uint256 requiredPrefund, PaymentMode paymentMode) internal returns (uint256 gasUsedByValidateWalletPrepayment) { - unchecked { - uint256 preGas = gasleft(); - _createSenderIfNeeded(op); - uint256 missingWalletFunds = 0; - address sender = op.getSender(); - if (paymentMode != PaymentMode.paymasterDeposit) { - uint256 bal = balanceOf(sender); - missingWalletFunds = bal > requiredPrefund ? 0 : requiredPrefund - bal; - } - // solhint-disable-next-line no-empty-blocks - try IWallet(sender).validateUserOp{gas : op.verificationGas}(op, requestId, missingWalletFunds) { - } catch Error(string memory revertReason) { - revert FailedOp(opIndex, address(0), revertReason); - } catch { - revert FailedOp(opIndex, address(0), ""); - } - if (paymentMode != PaymentMode.paymasterDeposit) { - DepositInfo storage senderInfo = deposits[sender]; - uint deposit = senderInfo.deposit; - if (requiredPrefund > deposit) { - revert FailedOp(opIndex, address(0), "wallet didn't pay prefund"); - } - senderInfo.deposit = uint112(deposit - requiredPrefund); - } - gasUsedByValidateWalletPrepayment = preGas - gasleft(); - } - } - - /** - * in case the request has a paymaster: - * validate paymaster is staked and has enough deposit. - * call paymaster.validatePaymasterUserOp. - * revert with proper FailedOp in case paymaster reverts. - * decrement paymaster's deposit - */ - function _validatePaymasterPrepayment(uint256 opIndex, UserOperation calldata op, bytes32 requestId, uint256 requiredPreFund, uint256 gasUsedByValidateWalletPrepayment) internal returns (bytes memory context) { - unchecked { - address paymaster = op.paymaster; - DepositInfo storage paymasterInfo = deposits[paymaster]; - uint deposit = paymasterInfo.deposit; - bool staked = paymasterInfo.staked; - if (!staked) { - revert FailedOp(opIndex, paymaster, "not staked"); - } - if (deposit < requiredPreFund) { - revert FailedOp(opIndex, paymaster, "paymaster deposit too low"); - } - paymasterInfo.deposit = uint112(deposit - requiredPreFund); - uint256 gas = op.verificationGas - gasUsedByValidateWalletPrepayment; - try IPaymaster(paymaster).validatePaymasterUserOp{gas : gas}(op, requestId, requiredPreFund) returns (bytes memory _context){ - context = _context; - } catch Error(string memory revertReason) { - revert FailedOp(opIndex, paymaster, revertReason); - } catch { - revert FailedOp(opIndex, paymaster, ""); - } - } - } - - /** - * validate wallet and paymaster (if defined). - * also make sure total validation doesn't exceed verificationGas - * this method is called off-chain (simulateValidation()) and on-chain (from handleOps) - */ - function _validatePrepayment(uint256 opIndex, UserOperation calldata userOp, bytes32 requestId) private returns (uint256 requiredPreFund, PaymentMode paymentMode, bytes memory context){ - - uint256 preGas = gasleft(); - uint256 maxGasValues = userOp.preVerificationGas | userOp.verificationGas | - userOp.callGas | userOp.maxFeePerGas | userOp.maxPriorityFeePerGas; - require(maxGasValues <= type(uint120).max, "gas values overflow"); - uint256 gasUsedByValidateWalletPrepayment; - (requiredPreFund, paymentMode) = _getPaymentInfo(userOp); - - (gasUsedByValidateWalletPrepayment) = _validateWalletPrepayment(opIndex, userOp, requestId, requiredPreFund, paymentMode); - - //a "marker" where wallet opcode validation is done and paymaster opcode validation is about to start - // (used only by off-chain simulateValidation) - uint256 marker = block.number; - (marker); - - if (paymentMode == PaymentMode.paymasterDeposit) { - (context) = _validatePaymasterPrepayment(opIndex, userOp, requestId, requiredPreFund, gasUsedByValidateWalletPrepayment); - } else { - context = ""; - } - unchecked { - uint256 gasUsed = preGas - gasleft(); - - if (userOp.verificationGas < gasUsed) { - revert FailedOp(opIndex, userOp.paymaster, "Used more than verificationGas"); - } - } - } - - /** - * process post-operation. - * called just after the callData is executed. - * if a paymaster is defined and its validation returned a non-empty context, its postOp is called. - * the excess amount is refunded to the wallet (or paymaster - if it is was used in the request) - * @param opIndex index in the batch - * @param mode - whether is called from innerHandleOp, or outside (postOpReverted) - * @param op the user operation - * @param opInfo info collected during validation - * @param context the context returned in validatePaymasterUserOp - * @param actualGas the gas used so far by this user operation - */ - function _handlePostOp(uint256 opIndex, IPaymaster.PostOpMode mode, UserOperation calldata op, UserOpInfo memory opInfo, bytes memory context, uint256 actualGas) private returns (uint256 actualGasCost) { - uint256 preGas = gasleft(); - uint256 gasPrice = UserOperationLib.gasPrice(op); - unchecked { - address refundAddress; - - address paymaster = op.paymaster; - if (paymaster == address(0)) { - refundAddress = op.getSender(); - } else { - refundAddress = paymaster; - if (context.length > 0) { - actualGasCost = actualGas * gasPrice; - if (mode != IPaymaster.PostOpMode.postOpReverted) { - IPaymaster(paymaster).postOp{gas : op.verificationGas}(mode, context, actualGasCost); - } else { - // solhint-disable-next-line no-empty-blocks - try IPaymaster(paymaster).postOp{gas : op.verificationGas}(mode, context, actualGasCost) {} - catch Error(string memory reason) { - revert FailedOp(opIndex, paymaster, reason); - } - catch { - revert FailedOp(opIndex, paymaster, "postOp revert"); - } - } - } - } - actualGas += preGas - gasleft(); - actualGasCost = actualGas * gasPrice; - if (opInfo.prefund < actualGasCost) { - revert FailedOp(opIndex, paymaster, "prefund below actualGasCost"); - } - uint refund = opInfo.prefund - actualGasCost; - internalIncrementDeposit(refundAddress, refund); - bool success = mode == IPaymaster.PostOpMode.opSucceeded; - emit UserOperationEvent(opInfo.requestId, op.getSender(), op.paymaster, op.nonce, actualGasCost, gasPrice, success); - } // unchecked - } - - /** - * return the storage cells used internally by the EntryPoint for this sender address. - * During `simulateValidation`, allow these storage cells to be accessed - * (that is, a wallet/paymaster are allowed to access their own deposit balance on the - * EntryPoint's storage, but no other account) - */ - function getSenderStorage(address sender) external view returns (uint256[] memory senderStorageCells) { - uint256 cell; - DepositInfo storage info = deposits[sender]; - - assembly { - cell := info.slot - } - senderStorageCells = new uint256[](1); - senderStorageCells[0] = cell; - } -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/IPaymaster.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/IPaymaster.sol deleted file mode 100644 index 134b828d1..000000000 --- a/packages/ethers-lib/scw-contracts/references/aa-4337/IPaymaster.sol +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.0; - -import "./UserOperation.sol"; - -/** - * the interface exposed by a paymaster contract, who agrees to pay the gas for user's operations. - * a paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction. - */ -interface IPaymaster { - - /** - * payment validation: check if paymaster agree to pay (using its stake) - * revert to reject this request. - * actual payment is done after postOp is called, by deducting actual call cost form the paymaster's stake. - * @param userOp the user operation - * @param requestId hash of the user's request data. - * @param maxCost the maximum cost of this transaction (based on maximum gas and gas price from userOp) - * @return context value to send to a postOp - * zero length to signify postOp is not required. - */ - function validatePaymasterUserOp(UserOperation calldata userOp, bytes32 requestId, uint maxCost) external view returns (bytes memory context); - - /** - * post-operation handler. - * Must verify sender is the entryPoint - * @param mode enum with the following options: - * opSucceeded - user operation succeeded. - * opReverted - user op reverted. still has to pay for gas. - * postOpReverted - user op succeeded, but caused postOp (in mode=opSucceeded) to revert. - * Now this is the 2nd call, after user's op was deliberately reverted. - * @param context - the context value returned by validatePaymasterUserOp - * @param actualGasCost - actual gas used so far (without this postOp call). - */ - function postOp(PostOpMode mode, bytes calldata context, uint actualGasCost) external; - - enum PostOpMode { - opSucceeded, // user op succeeded - opReverted, // user op reverted. still has to pay for gas. - postOpReverted //user op succeeded, but caused postOp to revert. Now its a 2nd call, after user's op was deliberately reverted. - } -} diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/IWallet.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/IWallet.sol deleted file mode 100644 index 0cd659df4..000000000 --- a/packages/ethers-lib/scw-contracts/references/aa-4337/IWallet.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.0; - -import "./UserOperation.sol"; - -interface IWallet { - - /** - * Validate user's signature and nonce - * the entryPoint will make the call to the recipient only if this validation call returns successfuly. - * - * @dev Must validate caller is the entryPoint. - * Must validate the signature and nonce - * @param userOp the operation that is about to be executed. - * @param requestId hash of the user's request data. can be used as the basis for signature. - * @param requiredPrefund the minimum amount to transfer to the sender(entryPoint) to be able to make the call. - * The excess is left as a deposit in the entrypoint, for future calls. - * can be withdrawn anytime using "entryPoint.withdrawTo()" - * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero. - */ - function validateUserOp(UserOperation calldata userOp, bytes32 requestId, uint requiredPrefund) external; -} diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/SimpleWallet.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/SimpleWallet.sol deleted file mode 100644 index e0708b4b8..000000000 --- a/packages/ethers-lib/scw-contracts/references/aa-4337/SimpleWallet.sol +++ /dev/null @@ -1,133 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.0; - -import "./IWallet.sol"; -import "./EntryPoint.sol"; -import "./ECDSA.sol"; -import "hardhat/console.sol"; - -//minimal wallet -// this is sample minimal wallet. -// has execute, eth handling methods -// has a single signer that can send requests through the entryPoint. -contract SimpleWallet is IWallet { - using ECDSA for bytes32; - using UserOperationLib for UserOperation; - struct OwnerNonce { - uint96 nonce; - address owner; - } - - OwnerNonce ownerNonce; - EntryPoint public entryPoint; - - function nonce() public view returns (uint) { - return ownerNonce.nonce; - } - - function owner() public view returns (address) { - return ownerNonce.owner; - } - - event EntryPointChanged(EntryPoint oldEntryPoint, EntryPoint newEntryPoint); - - receive() external payable {} - - constructor(EntryPoint _entryPoint, address _owner) { - entryPoint = _entryPoint; - ownerNonce.owner = _owner; - } - - modifier onlyOwner() { - _onlyOwner(); - _; - } - - function _onlyOwner() internal view { - //directly from EOA owner, or through the entryPoint (which gets redirected through execFromEntryPoint) - require(msg.sender == ownerNonce.owner || msg.sender == address(this), "only owner"); - } - - function transfer(address payable dest, uint amount) external onlyOwner { - dest.transfer(amount); - } - - function exec(address dest, uint value, bytes calldata func) external onlyOwner { - _call(dest, value, func); - } - - function execBatch(address[] calldata dest, bytes[] calldata func) external onlyOwner { - require(dest.length == func.length, "wrong array lengths"); - for (uint i = 0; i < dest.length; i++) { - _call(dest[i], 0, func[i]); - } - } - - function updateEntryPoint(EntryPoint _entryPoint) external onlyOwner { - emit EntryPointChanged(entryPoint, _entryPoint); - entryPoint = _entryPoint; - } - - function _requireFromEntryPoint() internal view { - require(msg.sender == address(entryPoint), "wallet: not from EntryPoint"); - } - - function validateUserOp(UserOperation calldata userOp, bytes32 requestId, uint requiredPrefund) external override { - _requireFromEntryPoint(); - _validateSignature(userOp, requestId); - _validateAndIncrementNonce(userOp); - _payPrefund(requiredPrefund); - } - - function _payPrefund(uint requiredPrefund) internal { - if (requiredPrefund != 0) { - //pay required prefund. make sure NOT to use the "gas" opcode, which is banned during validateUserOp - // (and used by default by the "call") - (bool success,) = payable(msg.sender).call{value : requiredPrefund, gas : type(uint).max}(""); - (success); - //ignore failure (its EntryPoint's job to verify, not wallet.) - } - } - - //called by entryPoint, only after validateUserOp succeeded. - function execFromEntryPoint(address dest, uint value, bytes calldata func) external { - _requireFromEntryPoint(); - _call(dest, value, func); - } - - function _validateAndIncrementNonce(UserOperation calldata userOp) internal { - //during construction, the "nonce" field hold the salt. - // if we assert it is zero, then we allow only a single wallet per owner. - if (userOp.initCode.length == 0) { - require(ownerNonce.nonce++ == userOp.nonce, "wallet: invalid nonce"); - } - } - - function _validateSignature(UserOperation calldata userOp, bytes32 requestId) internal view { - bytes32 hash = requestId.toEthSignedMessageHash(); - require(owner() == hash.recover(userOp.signature), "wallet: wrong signature"); - } - - function _call(address sender, uint value, bytes memory data) internal { - (bool success, bytes memory result) = sender.call{value : value}(data); - if (!success) { - assembly { - revert(add(result,32), mload(result)) - } - } - } - - function getDeposit() public view returns (uint) { - return entryPoint.balanceOf(address(this)); - } - - function addDeposit() public payable { - - (bool req,) = address(entryPoint).call{value : msg.value}(""); - require(req); - } - - function withdrawDepositTo(address payable withdrawAddress, uint amount) public onlyOwner{ - entryPoint.withdrawTo(withdrawAddress, amount); - } -} diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/StakeManager.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/StakeManager.sol deleted file mode 100644 index 48a4155bf..000000000 --- a/packages/ethers-lib/scw-contracts/references/aa-4337/StakeManager.sol +++ /dev/null @@ -1,181 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.0; - -/* solhint-disable avoid-low-level-calls */ -/* solhint-disable not-rely-on-time */ -/** - * manage deposits and stakes. - * deposit is just a balance used to pay for UserOperations (either by a paymaster or a wallet) - * stake is value locked for at least "unstakeDelay" by a paymaster. - */ -abstract contract StakeManager { - - /** - * minimum time (in seconds) required to lock a paymaster stake before it can be withdraw. - */ - uint32 immutable public unstakeDelaySec; - - /** - * minimum value required to stake for a paymaster - */ - uint256 immutable public paymasterStake; - - constructor(uint256 _paymasterStake, uint32 _unstakeDelaySec) { - unstakeDelaySec = _unstakeDelaySec; - paymasterStake = _paymasterStake; - } - - event Deposited( - address indexed account, - uint256 totalDeposit - ); - - event Withdrawn( - address indexed account, - address withdrawAddress, - uint256 amount - ); - - /// Emitted once a stake is scheduled for withdrawal - event StakeLocked( - address indexed account, - uint256 totalStaked, - uint256 withdrawTime - ); - - /// Emitted once a stake is scheduled for withdrawal - event StakeUnlocked( - address indexed account, - uint256 withdrawTime - ); - - event StakeWithdrawn( - address indexed account, - address withdrawAddress, - uint256 amount - ); - - /** - * @param deposit the account's deposit - * @param staked true if this account is staked as a paymaster - * @param stake actual amount of ether staked for this paymaster. must be above paymasterStake - * @param unstakeDelaySec minimum delay to withdraw the stake. must be above the global unstakeDelaySec - * @param withdrawTime - first block timestamp where 'withdrawStake' will be callable, or zero if already locked - * @dev sizes were chosen so that (deposit,staked) fit into one cell (used during handleOps) - * and the rest fit into a 2nd cell. - * 112 bit allows for 2^15 eth - * 64 bit for full timestamp - * 32 bit allow 150 years for unstake delay - */ - struct DepositInfo { - uint112 deposit; - bool staked; - uint112 stake; - uint32 unstakeDelaySec; - uint64 withdrawTime; - } - - /// maps paymaster to their deposits and stakes - mapping(address => DepositInfo) public deposits; - - function getDepositInfo(address account) public view returns (DepositInfo memory info) { - return deposits[account]; - } - - /// return the deposit (for gas payment) of the account - function balanceOf(address account) public view returns (uint256) { - return deposits[account].deposit; - } - - receive() external payable { - depositTo(msg.sender); - } - - function internalIncrementDeposit(address account, uint256 amount) internal { - DepositInfo storage info = deposits[account]; - uint256 newAmount = info.deposit + amount; - require(newAmount <= type(uint112).max, "deposit overflow"); - info.deposit = uint112(newAmount); - } - - /** - * add to the deposit of the given account - */ - function depositTo(address account) public payable { - internalIncrementDeposit(account, msg.value); - DepositInfo storage info = deposits[account]; - emit Deposited(account, info.deposit); - } - - /** - * add to the account's stake - amount and delay - * any pending unstake is first cancelled. - * @param _unstakeDelaySec the new lock duration before the deposit can be withdrawn. - */ - function addStake(uint32 _unstakeDelaySec) public payable { - DepositInfo storage info = deposits[msg.sender]; - require(_unstakeDelaySec >= unstakeDelaySec, "unstake delay too low"); - require(_unstakeDelaySec >= info.unstakeDelaySec, "cannot decrease unstake time"); - uint256 stake = info.stake + msg.value; - require(stake >= paymasterStake, "stake value too low"); - require(stake < type(uint112).max, "stake overflow"); - deposits[msg.sender] = DepositInfo( - info.deposit, - true, - uint112(stake), - _unstakeDelaySec, - 0 - ); - emit StakeLocked(msg.sender, stake, _unstakeDelaySec); - } - - /** - * attempt to unlock the stake. - * the value can be withdrawn (using withdrawStake) after the unstake delay. - */ - function unlockStake() external { - DepositInfo storage info = deposits[msg.sender]; - require(info.unstakeDelaySec != 0, "not staked"); - require(info.staked, "already unstaking"); - uint64 withdrawTime = uint64(block.timestamp) + info.unstakeDelaySec; - info.withdrawTime = withdrawTime; - info.staked = false; - emit StakeUnlocked(msg.sender, withdrawTime); - } - - - /** - * withdraw from the (unlocked) stake. - * must first call unlockStake and wait for the unstakeDelay to pass - * @param withdrawAddress the address to send withdrawn value. - */ - function withdrawStake(address payable withdrawAddress) external { - require(withdrawAddress != address(0), "Invalid withdraw address"); - DepositInfo storage info = deposits[msg.sender]; - uint256 stake = info.stake; - require(stake > 0, "No stake to withdraw"); - require(info.withdrawTime > 0, "must call unlockStake() first"); - require(info.withdrawTime <= block.timestamp, "Stake withdrawal is not due"); - info.unstakeDelaySec = 0; - info.withdrawTime = 0; - info.stake = 0; - emit StakeWithdrawn(msg.sender, withdrawAddress, stake); - (bool success,) = withdrawAddress.call{value : stake}(""); - require(success, "failed to withdraw stake"); - } - - /** - * withdraw from the deposit. - * @param withdrawAddress the address to send withdrawn value. - * @param withdrawAmount the amount to withdraw. - */ - function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external { - require(withdrawAddress != address(0), "Invalid withdraw address"); - DepositInfo memory info = deposits[msg.sender]; - require(withdrawAmount <= info.deposit, "Withdraw amount too large"); - info.deposit = uint112(info.deposit - withdrawAmount); - emit Withdrawn(msg.sender, withdrawAddress, withdrawAmount); - (bool success,) = withdrawAddress.call{value : withdrawAmount}(""); - require(success, "failed to withdraw"); - } -} diff --git a/packages/ethers-lib/scw-contracts/references/aa-4337/UserOperation.sol b/packages/ethers-lib/scw-contracts/references/aa-4337/UserOperation.sol deleted file mode 100644 index 3955365c8..000000000 --- a/packages/ethers-lib/scw-contracts/references/aa-4337/UserOperation.sol +++ /dev/null @@ -1,82 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.0; - -import "hardhat/console.sol"; - - struct UserOperation { - - address sender; - uint256 nonce; - bytes initCode; - bytes callData; - uint callGas; - uint verificationGas; - uint preVerificationGas; - uint maxFeePerGas; - uint maxPriorityFeePerGas; - address paymaster; - bytes paymasterData; - bytes signature; - } - -library UserOperationLib { - - function getSender(UserOperation calldata userOp) internal pure returns (address ret) { - assembly {ret := calldataload(userOp)} - } - - //relayer/miner might submit the TX with higher priorityFee, but the user should not - // pay above what he signed for. - function gasPrice(UserOperation calldata userOp) internal view returns (uint) { - unchecked { - uint maxFeePerGas = userOp.maxFeePerGas; - uint maxPriorityFeePerGas = userOp.maxPriorityFeePerGas; - if (maxFeePerGas == maxPriorityFeePerGas) { - //legacy mode (for networks that don't support basefee opcode) - return min(tx.gasprice, maxFeePerGas); - } - return min(tx.gasprice, min(maxFeePerGas, maxPriorityFeePerGas + block.basefee)); - } - } - - function requiredGas(UserOperation calldata userOp) internal pure returns (uint) { - unchecked { - //when using a Paymaster, the verificationGas is used also to cover the postOp call. - // our security model might call postOp eventually twice - uint mul = userOp.paymaster != address(0) ? 1 : 3; - return userOp.callGas + userOp.verificationGas * mul + userOp.preVerificationGas; - } - } - - function requiredPreFund(UserOperation calldata userOp) internal view returns (uint prefund) { - unchecked { - return requiredGas(userOp) * gasPrice(userOp); - } - } - - function hasPaymaster(UserOperation calldata userOp) internal pure returns (bool) { - return userOp.paymaster != address(0); - } - - function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) { - //lighter signature scheme. must match UserOp.ts#packUserOp - bytes calldata sig = userOp.signature; - assembly { - let ofs := userOp - let len := sub(sub(sig.offset, ofs), 32) - ret := mload(0x40) - mstore(0x40, add(ret, add(len, 32))) - mstore(ret, len) - calldatacopy(add(ret, 32), ofs, len) - } - return ret; - } - - function hash(UserOperation calldata userOp) internal pure returns (bytes32) { - return keccak256(pack(userOp)); - } - - function min(uint a, uint b) internal pure returns (uint) { - return a < b ? a : b; - } -} diff --git a/packages/ethers-lib/scw-contracts/references/factory/SingletonFactory.sol b/packages/ethers-lib/scw-contracts/references/factory/SingletonFactory.sol deleted file mode 100644 index fd8e89ac7..000000000 --- a/packages/ethers-lib/scw-contracts/references/factory/SingletonFactory.sol +++ /dev/null @@ -1,34 +0,0 @@ -/** - *Submitted for verification at Etherscan.io on 2020-03-30 -*/ -/* https://eips.ethereum.org/EIPS/eip-2470 */ - -pragma solidity ^0.8.0; - - -/** - * @title Singleton Factory (EIP-2470) - * @notice Exposes CREATE2 (EIP-1014) to deploy bytecode on deterministic addresses based on initialization code and salt. - * @author Ricardo Guilherme Schmidt (Status Research & Development GmbH) - */ -contract SingletonFactory { - event Deployed(address addr, uint256 salt); - /** - * @notice Deploys `_initCode` using `_salt` for defining the deterministic address. - * @param _initCode Initialization code. - * @param _salt Arbitrary value to modify resulting address. - * @return createdContract Created contract address. - */ - function deploy(bytes memory _initCode, uint256 _salt) - public - returns (address payable createdContract) - { - // solhint-disable-next-line no-inline-assembly - assembly { - createdContract := create2(0, add(_initCode, 0x20), mload(_initCode), _salt) - } - emit Deployed(createdContract, _salt); - } -} -// IV is a value changed to generate the vanity address. -// IV: 6583047 \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/IWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/IWallet.sol deleted file mode 100644 index 512efdfa2..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/IWallet.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.0; - -import "./libs/UserOperation.sol"; - -interface IWallet { - - /** - * Validate user's signature and nonce - * the entryPoint will make the call to the recipient only if this validation call returns successfuly. - * - * @dev Must validate caller is the entryPoint. - * Must validate the signature and nonce - * @param userOp the operation that is about to be executed. - * @param requestId hash of the user's request data. can be used as the basis for signature. - * @param requiredPrefund the minimum amount to transfer to the sender(entryPoint) to be able to make the call. - * The excess is left as a deposit in the entrypoint, for future calls. - * can be withdrawn anytime using "entryPoint.withdrawTo()" - * In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero. - */ - function validateUserOp(UserOperation calldata userOp, bytes32 requestId, uint requiredPrefund) external; -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/Proxy.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/Proxy.sol deleted file mode 100644 index 6d2defc36..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/Proxy.sol +++ /dev/null @@ -1,40 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -/** - * @title Proxy // This is the user's wallet - * @notice Basic proxy that delegates all calls to a fixed implementing contract. - */ -contract Proxy { - - /* This is the keccak-256 hash of "biconomy.scw.proxy.implementation" subtracted by 1, and is validated in the constructor */ - bytes32 internal constant _IMPLEMENTATION_SLOT = 0x37722d148fb373b961a84120b6c8d209709b45377878a466db32bbc40d95af26; - - event Received(uint indexed value, address indexed sender, bytes data); - - constructor(address _implementation) { - assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("biconomy.scw.proxy.implementation")) - 1)); - assembly { - sstore(_IMPLEMENTATION_SLOT,_implementation) - } - } - - fallback() external payable { - address target; - // solhint-disable-next-line no-inline-assembly - assembly { - target := sload(_IMPLEMENTATION_SLOT) - calldatacopy(0, 0, calldatasize()) - let result := delegatecall(gas(), target, 0, calldatasize(), 0, 0) - returndatacopy(0, 0, returndatasize()) - switch result - case 0 {revert(0, returndatasize())} - default {return (0, returndatasize())} - } - } - - receive() external payable { - emit Received(msg.value, msg.sender, ""); - } - -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol deleted file mode 100644 index 6cf0a8c61..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol +++ /dev/null @@ -1,467 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -//TODO -//review Base licensing -//https://spdx.org/licenses/ - -import "./libs/LibAddress.sol"; -import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import "./IWallet.sol"; -import "./common/Singleton.sol"; -import "./storage/WalletStorage.sol"; -import "./base/ModuleManager.sol"; -import "./base/FallbackManager.sol"; -import "./common/SignatureDecoder.sol"; -// import "./common/Hooks.sol"; -import "./common/SecuredTokenTransfer.sol"; -import "./interfaces/ISignatureValidator.sol"; -import "./interfaces/IERC165.sol"; -import "./libs/ECDSA.sol"; - -// Hooks not made a base yet -contract SmartWallet is - Singleton, - IWallet, - IERC165, - WalletStorage, - ModuleManager, - SignatureDecoder, - SecuredTokenTransfer, - ISignatureValidatorConstants, - FallbackManager, - Initializable - { - using ECDSA for bytes32; - using LibAddress for address; - - event ImplementationUpdated(address newImplementation); - event ExecutionFailure(bytes32 txHash, uint256 payment); - event ExecutionSuccess(bytes32 txHash, uint256 payment); - event EntryPointChanged(address oldEntryPoint, address newEntryPoint); - event EOAChanged(address indexed _scw, address indexed _oldEOA, address indexed _newEOA); - - // modifiers - // onlyOwner - /** - * @notice Throws if the sender is not an the owner. - */ - modifier onlyOwner { - require(msg.sender == owner, "Smart Account:: Sender is not authorized"); - _; - } - - // onlyOwner OR self - modifier mixedAuth { - require(msg.sender == owner || msg.sender == address(this),"Only owner or self"); - _; - } - - // @notice authorized modifier (onlySelf) is already inherited - - // Setters - - function setOwner(address _newOwner) external mixedAuth { - require(_newOwner != address(0), "Smart Account:: new Signatory address cannot be zero"); - owner = _newOwner; - emit EOAChanged(address(this),owner,_newOwner); - } - - /** - * @notice Updates the implementation of the base wallet - * @param _implementation New wallet implementation - */ - function updateImplementation(address _implementation) external mixedAuth { - require(_implementation.isContract(), "INVALID_IMPLEMENTATION"); - _setImplementation(_implementation); - emit ImplementationUpdated(_implementation); - } - - function updateEntryPoint(address _entryPoint) external mixedAuth { - require(_entryPoint != address(0), "Smart Account:: new entry point address cannot be zero"); - emit EntryPointChanged(entryPoint, _entryPoint); - entryPoint = _entryPoint; - } - - // Getters - - function domainSeparator() public view returns (bytes32) { - return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this)); - } - - /// @dev Returns the chain id used by this contract. - function getChainId() public view returns (uint256) { - uint256 id; - // solhint-disable-next-line no-inline-assembly - assembly { - id := chainid() - } - return id; - } - - /** - * @dev returns a value from the nonces 2d mapping - * @param batchId : the key of the user's batch being queried - * @return nonce : the number of transaction made within said batch - */ - function getNonce(uint256 batchId) - public view - returns (uint256) { - return nonces[batchId]; - } - - // Initialize / Setup - // Used to setup - // i. owner ii. entry point iii. handlers - function init(address _owner, address _entryPoint, address _handler) public initializer { - require(owner == address(0), "Already initialized"); - require(entryPoint == address(0), "Already initialized"); - require(_owner != address(0),"Invalid owner"); - require(_entryPoint != address(0), "Invalid Entrypoint"); - owner = _owner; - entryPoint = _entryPoint; - if (_handler != address(0)) internalSetFallbackHandler(_handler); - setupModules(address(0), bytes("")); - } - - /** - * @dev Returns the largest of two numbers. - */ - function max(uint256 a, uint256 b) internal pure returns (uint256) { - return a >= b ? a : b; - } - - // @review 2D nonces and args as default batchId 0 is always used - // TODO : Update description - // TODO : Add batchId and update in test cases, utils etc - // Gnosis style transaction with optional repay in native tokens OR ERC20 - /// @dev Allows to execute a Safe transaction confirmed by required number of owners and then pays the account that submitted the transaction. - /// Note: The fees are always transferred, even if the user transaction fails. - /// @param _tx Wallet transaction - /// @param batchId batchId key for 2D nonces - /// @param refundInfo Required information for gas refunds - /// @param signatures Packed signature data ({bytes32 r}{bytes32 s}{uint8 v}) - function execTransaction( - Transaction memory _tx, - uint256 batchId, - FeeRefund memory refundInfo, - bytes memory signatures - ) public payable virtual returns (bool success) { - bytes32 txHash; - // Use scope here to limit variable lifetime and prevent `stack too deep` errors - { - bytes memory txHashData = - encodeTransactionData( - // Transaction info - _tx, - // Payment info - refundInfo, - // Signature info - nonces[batchId] - ); - // Increase nonce and execute transaction. - // Default space aka batchId is 0 - nonces[batchId]++; - txHash = keccak256(txHashData); - checkSignatures(txHash, txHashData, signatures); - } - - - // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500) - // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150 - require(gasleft() >= max((_tx.targetTxGas * 64) / 63,_tx.targetTxGas + 2500) + 500, "BSA010"); - // Use scope here to limit variable lifetime and prevent `stack too deep` errors - { - uint256 gasUsed = gasleft(); - // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than targetTxGas) - // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than targetTxGas - success = execute(_tx.to, _tx.value, _tx.data, _tx.operation, refundInfo.gasPrice == 0 ? (gasleft() - 2500) : _tx.targetTxGas); - gasUsed = gasUsed - gasleft(); - // If no targetTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful - // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert - require(success || _tx.targetTxGas != 0 || refundInfo.gasPrice != 0, "BSA013"); - // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls - uint256 payment = 0; - if (refundInfo.gasPrice > 0) { - payment = handlePayment(gasUsed, refundInfo.baseGas, refundInfo.gasPrice, refundInfo.gasToken, refundInfo.refundReceiver); - } - if (success) emit ExecutionSuccess(txHash, payment); - else emit ExecutionFailure(txHash, payment); - } - } - - function handlePayment( - uint256 gasUsed, - uint256 baseGas, - uint256 gasPrice, - address gasToken, - address payable refundReceiver - ) private returns (uint256 payment) { - // solhint-disable-next-line avoid-tx-origin - address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver; - if (gasToken == address(0)) { - // For ETH we will only adjust the gas price to not be higher than the actual used gas price - payment = (gasUsed + baseGas) * (gasPrice < tx.gasprice ? gasPrice : tx.gasprice); - // Review: low level call value vs transfer - (bool success,) = receiver.call{value: payment}(""); - require(success, "BSA011"); - } else { - payment = (gasUsed + baseGas) * (gasPrice); - require(transferToken(gasToken, receiver, payment), "BSA012"); - } - } - - // @review - /** - * @dev Checks whether the signature provided is valid for the provided data, hash. Will revert otherwise. - * @param dataHash Hash of the data (could be either a message hash or transaction hash) - * @param signatures Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash. - */ - function checkSignatures( - bytes32 dataHash, - bytes memory data, - bytes memory signatures - ) public view { - uint8 v; - bytes32 r; - bytes32 s; - uint256 i = 0; - address _signer; - (v, r, s) = signatureSplit(signatures, i); - // review if necessary v = 1 - // review sig verification from other wallets - if(v == 0) { - // If v is 0 then it is a contract signature - // When handling contract signatures the address of the contract is encoded into r - _signer = address(uint160(uint256(r))); - - // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes - // This check is not completely accurate, since it is possible that more signatures than the threshold are send. - // Here we only check that the pointer is not pointing inside the part that is being processed - require(uint256(s) >= uint256(1) * 65, "BSA021"); - - // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes) - require(uint256(s) + 32 <= signatures.length, "BSA022"); - - // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length - uint256 contractSignatureLen; - // solhint-disable-next-line no-inline-assembly - assembly { - contractSignatureLen := mload(add(add(signatures, s), 0x20)) - } - require(uint256(s) + 32 + contractSignatureLen <= signatures.length, "BSA023"); - - // Check signature - bytes memory contractSignature; - // solhint-disable-next-line no-inline-assembly - assembly { - // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s - contractSignature := add(add(signatures, s), 0x20) - } - require(ISignatureValidator(_signer).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, "BSA024"); - } - else if(v > 30) { - // If v > 30 then default va (27,28) has been adjusted for eth_sign flow - // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover - _signer = ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", dataHash)), v - 4, r, s); - require(_signer == owner, "INVALID_SIGNATURE"); - } else { - _signer = ecrecover(dataHash, v, r, s); - require(_signer == owner, "INVALID_SIGNATURE"); - } - } - - /// review necessity for this method for estimating execute call - /// @dev Allows to estimate a transaction. - /// This method is only meant for estimation purpose, therefore the call will always revert and encode the result in the revert data. - /// Since the `estimateGas` function includes refunds, call this method to get an estimated of the costs that are deducted from the safe with `execTransaction` - /// @param to Destination address of Safe transaction. - /// @param value Ether value of transaction. - /// @param data Data payload of transaction. - /// @param operation Operation type of transaction. - /// @return Estimate without refunds and overhead fees (base transaction and payload data gas costs). - function requiredTxGas( - address to, - uint256 value, - bytes calldata data, - Enum.Operation operation - ) external returns (uint256) { - uint256 startGas = gasleft(); - // We don't provide an error message here, as we use it to return the estimate - require(execute(to, value, data, operation, gasleft())); - uint256 requiredGas = startGas - gasleft(); - // Convert response to string and return via error message - revert(string(abi.encodePacked(requiredGas))); - } - - - /// @dev Returns hash to be signed by owner. - /// @param to Destination address. - /// @param value Ether value. - /// @param data Data payload. - /// @param operation Operation type. - /// @param targetTxGas Fas that should be used for the safe transaction. - /// @param baseGas Gas costs for data used to trigger the safe transaction. - /// @param gasPrice Maximum gas price that should be used for this transaction. - /// @param gasToken Token address (or 0 if ETH) that is used for the payment. - /// @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin). - /// @param _nonce Transaction nonce. - /// @return Transaction hash. - function getTransactionHash( - address to, - uint256 value, - bytes calldata data, - Enum.Operation operation, - uint256 targetTxGas, - uint256 baseGas, - uint256 gasPrice, - address gasToken, - address payable refundReceiver, - uint256 _nonce - ) public view returns (bytes32) { - Transaction memory _tx = Transaction({ - to: to, - value: value, - data: data, - operation: operation, - targetTxGas: targetTxGas - }); - FeeRefund memory refundInfo = FeeRefund({ - baseGas: baseGas, - gasPrice: gasPrice, - gasToken: gasToken, - refundReceiver: refundReceiver - }); - return keccak256(encodeTransactionData(_tx, refundInfo, _nonce)); - } - - - /// @dev Returns the bytes that are hashed to be signed by owner. - /// @param _tx Wallet transaction - /// @param refundInfo Required information for gas refunds - /// @param _nonce Transaction nonce. - /// @return Transaction hash bytes. - function encodeTransactionData( - Transaction memory _tx, - FeeRefund memory refundInfo, - uint256 _nonce - ) public view returns (bytes memory) { - bytes32 safeTxHash = - keccak256( - abi.encode( - WALLET_TX_TYPEHASH, - _tx.to, - _tx.value, - keccak256(_tx.data), - _tx.operation, - _tx.targetTxGas, - refundInfo.baseGas, - refundInfo.gasPrice, - refundInfo.gasToken, - refundInfo.refundReceiver, - _nonce - ) - ); - return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash); - } - - // Extra Utils - - // Review: low level call value vs transfer // dest.transfer(amount); - function transfer(address payable dest, uint amount) external onlyOwner { - require(dest != address(0), "this action will burn your funds"); - (bool success,) = dest.call{value:amount}(""); - require(success,"transfer failed"); - } - - function pullTokens(address token, address dest, uint256 amount) external onlyOwner { - IERC20 tokenContract = IERC20(token); - SafeERC20.safeTransfer(tokenContract, dest, amount); - } - - function exec(address dest, uint value, bytes calldata func) external onlyOwner{ - _call(dest, value, func); - } - - function execBatch(address[] calldata dest, bytes[] calldata func) external onlyOwner{ - require(dest.length == func.length, "wrong array lengths"); - for (uint i = 0; i < dest.length;) { - _call(dest[i], 0, func[i]); - unchecked { - ++i; - } - } - } - - // AA implementation - function _call(address sender, uint value, bytes memory data) internal { - // @review linter - (bool success, bytes memory result) = sender.call{value : value}(data); - if (!success) { - // solhint-disable-next-line no-inline-assembly - assembly { - revert(add(result,32), mload(result)) - } - } - } - - function _requireFromEntryPoint() internal view { - require(msg.sender == address(entryPoint), "wallet: not from EntryPoint"); - } - - //called by entryPoint, only after validateUserOp succeeded. - function execFromEntryPoint(address dest, uint value, bytes calldata func) external { - _requireFromEntryPoint(); - _call(dest, value, func); - } - - function validateUserOp(UserOperation calldata userOp, bytes32 requestId, uint requiredPrefund) external override { - _requireFromEntryPoint(); - _validateSignature(userOp, requestId); - //during construction, the "nonce" field hold the salt. - // if we assert it is zero, then we allow only a single wallet per owner. - if (userOp.initCode.length == 0) { - _validateAndUpdateNonce(userOp); - } - _payPrefund(requiredPrefund); - } - - // review nonce conflict with AA userOp nonce - // userOp can omit nonce or have batchId as well! - function _validateAndUpdateNonce(UserOperation calldata userOp) internal { - require(nonces[0]++ == userOp.nonce, "wallet: invalid nonce"); - } - - function _payPrefund(uint requiredPrefund) internal { - if (requiredPrefund != 0) { - //pay required prefund. make sure NOT to use the "gas" opcode, which is banned during validateUserOp - // (and used by default by the "call") - // @review linter - (bool success,) = payable(msg.sender).call{value : requiredPrefund, gas : type(uint).max}(""); - (success); - //ignore failure (its EntryPoint's job to verify, not wallet.) - } - } - - function _validateSignature(UserOperation calldata userOp, bytes32 requestId) internal view { - bytes32 hash = requestId.toEthSignedMessageHash(); - require(owner == hash.recover(userOp.signature), "wallet: wrong signature"); - } - - - /** - * @notice Query if a contract implements an interface - * @param interfaceId The interface identifier, as specified in ERC165 - * @return `true` if the contract implements `_interfaceID` - */ - function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) { - return interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7 - } - - // Review - // withdrawDepositTo - // addDeposit - // getDeposit -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/WalletFactory.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/WalletFactory.sol deleted file mode 100644 index 988495ab8..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/WalletFactory.sol +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -//import "@openzeppelin/contracts/proxy/Clones.sol"; -import "./Proxy.sol"; -import "./SmartWallet.sol"; -//@review -//possibly IWallet.sol - -contract WalletFactory { - address internal _defaultImpl; - - //states : registry - mapping (address => bool) public isWalletExist; - - constructor(address _baseImpl) { - require(_baseImpl != address(0), "base wallet address can not be zero"); - _defaultImpl = _baseImpl; - } - - event WalletCreated(address indexed _proxy, address indexed _implementation, address indexed _owner); - - /** - * @notice Deploys wallet using create2 and points it to _defaultImpl - * @param _owner EOA signatory of the wallet - * @param _entryPoint AA 4337 entry point address - * @param _handler fallback handler address - * @param _index extra salt that allows to deploy more wallets if needed for same EOA (default 0) - */ - function deployCounterFactualWallet(address _owner, address _entryPoint, address _handler, uint _index) public returns(address proxy){ - bytes32 salt = keccak256(abi.encodePacked(_owner, address(uint160(_index)))); - bytes memory deploymentData = abi.encodePacked(type(Proxy).creationCode, uint(uint160(_defaultImpl))); - // solhint-disable-next-line no-inline-assembly - assembly { - proxy := create2(0x0, add(0x20, deploymentData), mload(deploymentData), salt) - } - require(address(proxy) != address(0), "Create2 call failed"); - emit WalletCreated(proxy,_defaultImpl,_owner); - SmartWallet(proxy).init(_owner, _entryPoint, _handler); - isWalletExist[proxy] = true; - } - - /** - * @notice Deploys wallet using create and points it to _defaultImpl - * @param _owner EOA signatory of the wallet - * @param _entryPoint AA 4337 entry point address - * @param _handler fallback handler address - */ - function deployWallet(address _owner, address _entryPoint, address _handler) public returns(address proxy){ - bytes memory deploymentData = abi.encodePacked(type(Proxy).creationCode, uint(uint160(_defaultImpl))); - // solhint-disable-next-line no-inline-assembly - assembly { - proxy := create(0x0, add(0x20, deploymentData), mload(deploymentData)) - } - emit WalletCreated(proxy,_defaultImpl,_owner); - SmartWallet(proxy).init(_owner, _entryPoint, _handler); - isWalletExist[proxy] = true; - } - - /** - * @notice Allows to find out wallet address prior to deployment - * @param _owner EOA signatory of the wallet - * @param _index extra salt that allows to deploy more wallets if needed for same EOA (default 0) - */ - function getAddressForCounterfactualWallet(address _owner, uint _index) external view returns (address _wallet) { - bytes memory code = abi.encodePacked(type(Proxy).creationCode, uint(uint160(_defaultImpl))); - bytes32 salt = keccak256(abi.encodePacked(_owner, address(uint160(_index)))); - bytes32 hash = keccak256(abi.encodePacked(bytes1(0xff), address(this), salt, keccak256(code))); - _wallet = address(uint160(uint(hash))); - } - -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Executor.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Executor.sol deleted file mode 100644 index df53624da..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Executor.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -import "../common/Enum.sol"; - -/// @title Executor - A contract that can execute transactions -contract Executor { - function execute( - address to, - uint256 value, - bytes memory data, - Enum.Operation operation, - uint256 txGas - ) internal returns (bool success) { - if (operation == Enum.Operation.DelegateCall) { - // solhint-disable-next-line no-inline-assembly - assembly { - success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0) - } - } else { - // solhint-disable-next-line no-inline-assembly - assembly { - success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0) - } - } - } -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol deleted file mode 100644 index 722ee3552..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/FallbackManager.sol +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -import "../common/SelfAuthorized.sol"; - -/// @title Fallback Manager - A contract that manages fallback calls made to this contract -/// @author Richard Meissner - -contract FallbackManager is SelfAuthorized { - event ChangedFallbackHandler(address handler); - - // keccak256("fallback_manager.handler.address") - bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5; - - function internalSetFallbackHandler(address handler) internal { - bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT; - // solhint-disable-next-line no-inline-assembly - assembly { - sstore(slot, handler) - } - } - - /// @dev Allows to add a contract to handle fallback calls. - /// Only fallback calls without value and with data will be forwarded. - /// This can only be done via a Safe transaction. - /// @param handler contract to handle fallback calls. - function setFallbackHandler(address handler) public authorized { - internalSetFallbackHandler(handler); - emit ChangedFallbackHandler(handler); - } - - // solhint-disable-next-line payable-fallback,no-complex-fallback - fallback() external { - bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT; - // solhint-disable-next-line no-inline-assembly - assembly { - let handler := sload(slot) - if iszero(handler) { - return(0, 0) - } - calldatacopy(0, 0, calldatasize()) - // The msg.sender address is shifted to the left by 12 bytes to remove the padding - // Then the address without padding is stored right after the calldata - mstore(calldatasize(), shl(96, caller())) - // Add 20 bytes for the address appended add the end - let success := call(gas(), handler, 0, 0, add(calldatasize(), 20), 0, 0) - returndatacopy(0, 0, returndatasize()) - if iszero(success) { - revert(0, returndatasize()) - } - return(0, returndatasize()) - } - } -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Module.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Module.sol deleted file mode 100644 index 808b4d5c8..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/Module.sol +++ /dev/null @@ -1,6 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -contract Module { - -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol deleted file mode 100644 index 40b645d71..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/base/ModuleManager.sol +++ /dev/null @@ -1,133 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -import "../common/Enum.sol"; -import "../common/SelfAuthorized.sol"; -import "./Executor.sol"; - -/// @title Module Manager - A contract that manages modules that can execute transactions via this contract -contract ModuleManager is SelfAuthorized, Executor { - // Events - event EnabledModule(address module); - event DisabledModule(address module); - event ExecutionFromModuleSuccess(address indexed module); - event ExecutionFromModuleFailure(address indexed module); - - address internal constant SENTINEL_MODULES = address(0x1); - - mapping(address => address) internal modules; - - function setupModules(address to, bytes memory data) internal { - require(modules[SENTINEL_MODULES] == address(0), "BSA100"); - modules[SENTINEL_MODULES] = SENTINEL_MODULES; - if (to != address(0)) - // Setup has to complete successfully or transaction fails. - require(execute(to, 0, data, Enum.Operation.DelegateCall, gasleft()), "BSA000"); - } - - /// @dev Allows to add a module to the whitelist. - /// This can only be done via a Safe transaction. - /// @notice Enables the module `module` for the Safe. - /// @param module Module to be whitelisted. - function enableModule(address module) public authorized { - // Module address cannot be null or sentinel. - require(module != address(0) && module != SENTINEL_MODULES, "BSA101"); - // Module cannot be added twice. - require(modules[module] == address(0), "BSA102"); - modules[module] = modules[SENTINEL_MODULES]; - modules[SENTINEL_MODULES] = module; - emit EnabledModule(module); - } - - /// @dev Allows to remove a module from the whitelist. - /// This can only be done via a Safe transaction. - /// @notice Disables the module `module` for the Safe. - /// @param prevModule Module that pointed to the module to be removed in the linked list - /// @param module Module to be removed. - function disableModule(address prevModule, address module) public authorized { - // Validate module address and check that it corresponds to module index. - require(module != address(0) && module != SENTINEL_MODULES, "BSA101"); - require(modules[prevModule] == module, "BSA103"); - modules[prevModule] = modules[module]; - modules[module] = address(0); - emit DisabledModule(module); - } - - /// @dev Allows a Module to execute a Safe transaction without any further confirmations. - /// @param to Destination address of module transaction. - /// @param value Ether value of module transaction. - /// @param data Data payload of module transaction. - /// @param operation Operation type of module transaction. - function execTransactionFromModule( - address to, - uint256 value, - bytes memory data, - Enum.Operation operation - ) public virtual returns (bool success) { - // Only whitelisted modules are allowed. - require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), "BSA104"); - // Execute transaction without further confirmations. - success = execute(to, value, data, operation, gasleft()); - if (success) emit ExecutionFromModuleSuccess(msg.sender); - else emit ExecutionFromModuleFailure(msg.sender); - } - - /// @dev Allows a Module to execute a Safe transaction without any further confirmations and return data - /// @param to Destination address of module transaction. - /// @param value Ether value of module transaction. - /// @param data Data payload of module transaction. - /// @param operation Operation type of module transaction. - function execTransactionFromModuleReturnData( - address to, - uint256 value, - bytes memory data, - Enum.Operation operation - ) public returns (bool success, bytes memory returnData) { - success = execTransactionFromModule(to, value, data, operation); - // solhint-disable-next-line no-inline-assembly - assembly { - // Load free memory location - let ptr := mload(0x40) - // We allocate memory for the return data by setting the free memory location to - // current free memory location + data size + 32 bytes for data size value - mstore(0x40, add(ptr, add(returndatasize(), 0x20))) - // Store the size - mstore(ptr, returndatasize()) - // Store the data - returndatacopy(add(ptr, 0x20), 0, returndatasize()) - // Point the return data to the correct memory location - returnData := ptr - } - } - - /// @dev Returns if an module is enabled - /// @return True if the module is enabled - function isModuleEnabled(address module) public view returns (bool) { - return SENTINEL_MODULES != module && modules[module] != address(0); - } - - /// @dev Returns array of modules. Useful for a widget - /// @param start Start of the page. - /// @param pageSize Maximum number of modules that should be returned. - /// @return array Array of modules. - /// @return next Start of the next page. - function getModulesPaginated(address start, uint256 pageSize) external view returns (address[] memory array, address next) { - // Init array with max page size - array = new address[](pageSize); - - // Populate return array - uint256 moduleCount = 0; - address currentModule = modules[start]; - while (currentModule != address(0x0) && currentModule != SENTINEL_MODULES && moduleCount < pageSize) { - array[moduleCount] = currentModule; - currentModule = modules[currentModule]; - moduleCount++; - } - next = currentModule; - // Set correct size of returned array - // solhint-disable-next-line no-inline-assembly - assembly { - mstore(array, moduleCount) - } - } -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Enum.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Enum.sol deleted file mode 100644 index 844c4f6ae..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Enum.sol +++ /dev/null @@ -1,7 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -/// @title Enum - Collection of enums -contract Enum { - enum Operation {Call, DelegateCall} -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SecuredTokenTransfer.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SecuredTokenTransfer.sol deleted file mode 100644 index d63853ef2..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SecuredTokenTransfer.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -/// @title SecuredTokenTransfer - Secure token transfer -contract SecuredTokenTransfer { - /// @dev Transfers a token and returns if it was a success - /// @param token Token that should be transferred - /// @param receiver Receiver to whom the token should be transferred - /// @param amount The amount of tokens that should be transferred - function transferToken( - address token, - address receiver, - uint256 amount - ) internal returns (bool transferred) { - // 0xa9059cbb - keccack("transfer(address,uint256)") - // Review for sig collision and HAL-04 - bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount); - // solhint-disable-next-line no-inline-assembly - assembly { - // We write the return value to scratch space. - // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory - let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20) - switch returndatasize() - case 0 { - transferred := success - } - case 0x20 { - transferred := iszero(or(iszero(success), iszero(mload(0)))) - } - default { - transferred := 0 - } - } - } -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SelfAuthorized.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SelfAuthorized.sol deleted file mode 100644 index 6db989c0a..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SelfAuthorized.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -/// @title SelfAuthorized - authorizes current contract to perform actions -contract SelfAuthorized { - function requireSelfCall() private view { - require(msg.sender == address(this), "BSA031"); - } - - modifier authorized() { - // This is a function call as it minimized the bytecode size - requireSelfCall(); - _; - } -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SignatureDecoder.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SignatureDecoder.sol deleted file mode 100644 index ddef0a780..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/SignatureDecoder.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -/// @title SignatureDecoder - Decodes signatures that a encoded as bytes -contract SignatureDecoder { - /// @dev divides bytes signature into `uint8 v, bytes32 r, bytes32 s`. - /// @notice Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures - /// @param pos which signature to read. A prior bounds check of this parameter should be performed, to avoid out of bounds access - /// @param signatures concatenated rsv signatures - function signatureSplit(bytes memory signatures, uint256 pos) - internal - pure - returns ( - uint8 v, - bytes32 r, - bytes32 s - ) - { - // The signature format is a compact form of: - // {bytes32 r}{bytes32 s}{uint8 v} - // Compact means, uint8 is not padded to 32 bytes. - // solhint-disable-next-line no-inline-assembly - assembly { - let signaturePos := mul(0x41, pos) - r := mload(add(signatures, add(signaturePos, 0x20))) - s := mload(add(signatures, add(signaturePos, 0x40))) - // Here we are loading the last 32 bytes, including 31 bytes - // of 's'. There is no 'mload8' to do this. - // - // 'byte' is not working due to the Solidity parser, so lets - // use the second best option, 'and' - v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff) - } - } -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Singleton.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Singleton.sol deleted file mode 100644 index 60fb16006..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/common/Singleton.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -/// @title Singleton - Base for singleton contracts (should always be first super contract) -/// This contract is tightly coupled to the proxy contract -contract Singleton { - // singleton slot always needs to be first declared variable, to ensure that it is at the same location as in the Proxy contract. - - /* This is the keccak-256 hash of "biconomy.scw.proxy.implementation" subtracted by 1 */ - bytes32 internal constant _IMPLEMENTATION_SLOT = 0x37722d148fb373b961a84120b6c8d209709b45377878a466db32bbc40d95af26; - - function _setImplementation(address _imp) internal { - assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("biconomy.scw.proxy.implementation")) - 1)); - // solhint-disable-next-line no-inline-assembly - assembly { - sstore(_IMPLEMENTATION_SLOT, _imp) - } - } - - function _getImplementation() internal view returns (address _imp) { - // solhint-disable-next-line no-inline-assembly - assembly { - _imp := sload(_IMPLEMENTATION_SLOT) - } - } - -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol deleted file mode 100644 index be93b483c..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol +++ /dev/null @@ -1,61 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -import "../interfaces/ERC1155TokenReceiver.sol"; -import "../interfaces/ERC721TokenReceiver.sol"; -import "../interfaces/ERC777TokensRecipient.sol"; -import "../interfaces/IERC165.sol"; - -/// @title Default Callback Handler - returns true for known token callbacks -/// @author Richard Meissner - -contract DefaultCallbackHandler is ERC1155TokenReceiver, ERC777TokensRecipient, ERC721TokenReceiver, IERC165 { - string public constant NAME = "Default Callback Handler"; - string public constant VERSION = "1.0.0"; - - function onERC1155Received( - address, - address, - uint256, - uint256, - bytes calldata - ) external pure override returns (bytes4) { - return 0xf23a6e61; - } - - function onERC1155BatchReceived( - address, - address, - uint256[] calldata, - uint256[] calldata, - bytes calldata - ) external pure override returns (bytes4) { - return 0xbc197c81; - } - - function onERC721Received( - address, - address, - uint256, - bytes calldata - ) external pure override returns (bytes4) { - return 0x150b7a02; - } - - function tokensReceived( - address, - address, - address, - uint256, - bytes calldata, - bytes calldata - ) external pure override { - // We implement this for completeness, doesn't really have any value - } - - function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) { - return - interfaceId == type(ERC1155TokenReceiver).interfaceId || - interfaceId == type(ERC721TokenReceiver).interfaceId || - interfaceId == type(IERC165).interfaceId; - } -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC1155TokenReceiver.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC1155TokenReceiver.sol deleted file mode 100644 index 3ef82f5c8..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC1155TokenReceiver.sol +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -/** - Note: The ERC-165 identifier for this interface is 0x4e2312e0. -*/ -interface ERC1155TokenReceiver { - /** - @notice Handle the receipt of a single ERC1155 token type. - @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated. - This function MUST return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61) if it accepts the transfer. - This function MUST revert if it rejects the transfer. - Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller. - @param _operator The address which initiated the transfer (i.e. msg.sender) - @param _from The address which previously owned the token - @param _id The ID of the token being transferred - @param _value The amount of tokens being transferred - @param _data Additional data with no specified format - @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` - */ - function onERC1155Received( - address _operator, - address _from, - uint256 _id, - uint256 _value, - bytes calldata _data - ) external returns (bytes4); - - /** - @notice Handle the receipt of multiple ERC1155 token types. - @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated. - This function MUST return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81) if it accepts the transfer(s). - This function MUST revert if it rejects the transfer(s). - Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller. - @param _operator The address which initiated the batch transfer (i.e. msg.sender) - @param _from The address which previously owned the token - @param _ids An array containing ids of each token being transferred (order and length must match _values array) - @param _values An array containing amounts of each token being transferred (order and length must match _ids array) - @param _data Additional data with no specified format - @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` - */ - function onERC1155BatchReceived( - address _operator, - address _from, - uint256[] calldata _ids, - uint256[] calldata _values, - bytes calldata _data - ) external returns (bytes4); -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC721TokenReceiver.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC721TokenReceiver.sol deleted file mode 100644 index b9fc82aba..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC721TokenReceiver.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02. -interface ERC721TokenReceiver { - /// @notice Handle the receipt of an NFT - /// @dev The ERC721 smart contract calls this function on the recipient - /// after a `transfer`. This function MAY throw to revert and reject the - /// transfer. Return of other than the magic value MUST result in the - /// transaction being reverted. - /// Note: the contract address is always the message sender. - /// @param _operator The address which called `safeTransferFrom` function - /// @param _from The address which previously owned the token - /// @param _tokenId The NFT identifier which is being transferred - /// @param _data Additional data with no specified format - /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` - /// unless throwing - function onERC721Received( - address _operator, - address _from, - uint256 _tokenId, - bytes calldata _data - ) external returns (bytes4); -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC777TokensRecipient.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC777TokensRecipient.sol deleted file mode 100644 index aa88c5acc..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ERC777TokensRecipient.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -interface ERC777TokensRecipient { - function tokensReceived( - address operator, - address from, - address to, - uint256 amount, - bytes calldata data, - bytes calldata operatorData - ) external; -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ICreate2Deployer.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ICreate2Deployer.sol deleted file mode 100644 index cc7b436b9..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ICreate2Deployer.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.12; - -/** - * create2-based deployer (eip-2470) - */ -interface ICreate2Deployer { - function deploy(bytes memory initCode, bytes32 salt) external returns (address); -} - diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC1271Wallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC1271Wallet.sol deleted file mode 100644 index b51d0e782..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC1271Wallet.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.0; - -// Might not use this interface -interface IERC1271Wallet { - - /** - * @notice Verifies whether the provided signature is valid with respect to the provided data - * @dev MUST return the correct magic value if the signature provided is valid for the provided data - * > The bytes4 magic value to return when signature is valid is 0x20c13b0b : bytes4(keccak256("isValidSignature(bytes,bytes)") - * > This function MAY modify Ethereum's state - * @param _data Arbitrary length data signed on the behalf of address(this) - * @param _signature Signature byte array associated with _data - * @return magicValue Magic value 0x20c13b0b if the signature is valid and 0x0 otherwise - */ - function isValidSignature( - bytes calldata _data, - bytes calldata _signature) - external - view - returns (bytes4 magicValue); - - /** - * @notice Verifies whether the provided signature is valid with respect to the provided hash - * @dev MUST return the correct magic value if the signature provided is valid for the provided hash - * > The bytes4 magic value to return when signature is valid is 0x20c13b0b : bytes4(keccak256("isValidSignature(bytes,bytes)") - * > This function MAY modify Ethereum's state - * @param _hash keccak256 hash that was signed - * @param _signature Signature byte array associated with _data - * @return magicValue Magic value 0x20c13b0b if the signature is valid and 0x0 otherwise - */ - function isValidSignature( - bytes32 _hash, - bytes calldata _signature) - external - view - returns (bytes4 magicValue); -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC165.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC165.sol deleted file mode 100644 index f7920c798..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/IERC165.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol -interface IERC165 { - /** - * @dev Returns true if this contract implements the interface defined by - * `interfaceId`. See the corresponding - * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] - * to learn more about how these ids are created. - * - * This function call must use less than 30 000 gas. - */ - function supportsInterface(bytes4 interfaceId) external view returns (bool); -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ISignatureValidator.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ISignatureValidator.sol deleted file mode 100644 index 9856891c7..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/interfaces/ISignatureValidator.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -contract ISignatureValidatorConstants { - // bytes4(keccak256("isValidSignature(bytes,bytes)") - bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b; -} - -abstract contract ISignatureValidator is ISignatureValidatorConstants { - /** - * @dev Should return whether the signature provided is valid for the provided data - * @param _data Arbitrary length data signed on the behalf of address(this) - * @param _signature Signature byte array associated with _data - * - * MUST return the bytes4 magic value 0x20c13b0b when function passes. - * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5) - * MUST allow external calls - */ - function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4); -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/ECDSA.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/ECDSA.sol deleted file mode 100644 index a74844189..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/ECDSA.sol +++ /dev/null @@ -1,250 +0,0 @@ -// SPDX-License-Identifier: MIT -// a copy of import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", with tiny modification: -// ecrecover should not use the "GAS" opcode. -// (its a precompile, and uses fixed gas anyway) -// instead, ecrecover2 uses assembly. -// Had to change "pure" to "view", since the compiler can't tell this "staticcall" is pure - -pragma solidity ^0.8.0; - -/** - * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. - * - * These functions can be used to verify that a message was signed by the holder - * of the private keys of a given address. - */ -library ECDSA { - enum RecoverError { - NoError, - InvalidSignature, - InvalidSignatureLength, - InvalidSignatureS, - InvalidSignatureV - } - - function _throwError(RecoverError error) private pure { - if (error == RecoverError.NoError) { - return; - // no error: do nothing - } else if (error == RecoverError.InvalidSignature) { - revert("ECDSA: invalid signature"); - } else if (error == RecoverError.InvalidSignatureLength) { - revert("ECDSA: invalid signature length"); - } else if (error == RecoverError.InvalidSignatureS) { - revert("ECDSA: invalid signature 's' value"); - } else if (error == RecoverError.InvalidSignatureV) { - revert("ECDSA: invalid signature 'v' value"); - } - } - - /** - * @dev Returns the address that signed a hashed message (`hash`) with - * `signature` or error string. This address can then be used for verification purposes. - * - * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: - * this function rejects them by requiring the `s` value to be in the lower - * half order, and the `v` value to be either 27 or 28. - * - * IMPORTANT: `hash` _must_ be the result of a hash operation for the - * verification to be secure: it is possible to craft signatures that - * recover to arbitrary addresses for non-hashed data. A safe way to ensure - * this is by receiving a hash of the original message (which may otherwise - * be too long), and then calling {toEthSignedMessageHash} on it. - * - * Documentation for signature generation: - * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] - * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] - * - * _Available since v4.3._ - */ - function tryRecover(bytes32 hash, bytes memory signature) internal view returns (address, RecoverError) { - // Check the signature length - // - case 65: r,s,v signature (standard) - // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ - if (signature.length == 65) { - bytes32 r; - bytes32 s; - uint8 v; - // ecrecover takes the signature parameters, and the only way to get them - // currently is to use assembly. - // solhint-disable-next-line no-inline-assembly - assembly { - r := mload(add(signature, 0x20)) - s := mload(add(signature, 0x40)) - v := byte(0, mload(add(signature, 0x60))) - } - return tryRecover(hash, v, r, s); - } else if (signature.length == 64) { - bytes32 r; - bytes32 vs; - // ecrecover takes the signature parameters, and the only way to get them - // currently is to use assembly. - // solhint-disable-next-line no-inline-assembly - assembly { - r := mload(add(signature, 0x20)) - vs := mload(add(signature, 0x40)) - } - return tryRecover(hash, r, vs); - } else { - return (address(0), RecoverError.InvalidSignatureLength); - } - } - - /** - * @dev Returns the address that signed a hashed message (`hash`) with - * `signature`. This address can then be used for verification purposes. - * - * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: - * this function rejects them by requiring the `s` value to be in the lower - * half order, and the `v` value to be either 27 or 28. - * - * IMPORTANT: `hash` _must_ be the result of a hash operation for the - * verification to be secure: it is possible to craft signatures that - * recover to arbitrary addresses for non-hashed data. A safe way to ensure - * this is by receiving a hash of the original message (which may otherwise - * be too long), and then calling {toEthSignedMessageHash} on it. - */ - function recover(bytes32 hash, bytes memory signature) internal view returns (address) { - (address recovered, RecoverError error) = tryRecover(hash, signature); - _throwError(error); - return recovered; - } - - /** - * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. - * - * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] - * - * _Available since v4.3._ - */ - function tryRecover( - bytes32 hash, - bytes32 r, - bytes32 vs - ) internal view returns (address, RecoverError) { - bytes32 s; - uint8 v; - // solhint-disable-next-line no-inline-assembly - assembly { - s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) - v := add(shr(255, vs), 27) - } - return tryRecover(hash, v, r, s); - } - - /** - * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. - * - * _Available since v4.2._ - */ - function recover( - bytes32 hash, - bytes32 r, - bytes32 vs - ) internal view returns (address) { - (address recovered, RecoverError error) = tryRecover(hash, r, vs); - _throwError(error); - return recovered; - } - - /** - * @dev Overload of {ECDSA-tryRecover} that receives the `v`, - * `r` and `s` signature fields separately. - * - * _Available since v4.3._ - */ - function tryRecover( - bytes32 hash, - uint8 v, - bytes32 r, - bytes32 s - ) internal view returns (address, RecoverError) { - // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature - // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines - // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most - // signatures from current libraries generate a unique signature with an s-value in the lower half order. - // - // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value - // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or - // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept - // these malleable signatures as well. - if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { - return (address(0), RecoverError.InvalidSignatureS); - } - if (v != 27 && v != 28) { - return (address(0), RecoverError.InvalidSignatureV); - } - - // If the signature is valid (and not malleable), return the signer address - // address signer = ecrecover(hash,v,r,s); - address signer = ecrecover2(hash, v, r, s); - - if (signer == address(0)) { - return (address(0), RecoverError.InvalidSignature); - } - - return (signer, RecoverError.NoError); - } - - function ecrecover2(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal view returns (address signer) { - uint status; - // solhint-disable-next-line no-inline-assembly - assembly { - let pointer := mload(0x40) - - mstore(pointer, hash) - mstore(add(pointer, 0x20), v) - mstore(add(pointer, 0x40), r) - mstore(add(pointer, 0x60), s) - - - status := staticcall(not(0), 0x01, pointer, 0x80, pointer, 0x20) - signer := mload(pointer) - // not required by this code, but other solidity code assumes unused data is zero... - mstore(pointer, 0) - mstore(add(pointer, 0x20), 0) - } - } - - /** - * @dev Overload of {ECDSA-recover} that receives the `v`, - * `r` and `s` signature fields separately. - */ - function recover( - bytes32 hash, - uint8 v, - bytes32 r, - bytes32 s - ) internal view returns (address) { - (address recovered, RecoverError error) = tryRecover(hash, v, r, s); - _throwError(error); - return recovered; - } - - /** - * @dev Returns an Ethereum Signed Message, created from a `hash`. This - * produces hash corresponding to the one signed with the - * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] - * JSON-RPC method as part of EIP-191. - * - * See {recover}. - */ - function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { - // 32 is the length in bytes of hash, - // enforced by the type signature above - return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); - } - - /** - * @dev Returns an Ethereum Signed Typed Data, created from a - * `domainSeparator` and a `structHash`. This produces hash corresponding - * to the one signed with the - * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] - * JSON-RPC method as part of EIP-712. - * - * See {recover}. - */ - function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { - return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); - } -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/LibAddress.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/LibAddress.sol deleted file mode 100644 index 225ec792c..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/LibAddress.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -library LibAddress { - /** - * @notice Will return true if provided address is a contract - * @param account Address to verify if contract or not - * @dev This contract will return false if called within the constructor of - * a contract's deployment, as the code is not yet stored on-chain. - */ - function isContract(address account) internal view returns (bool) { - uint256 csize; - // solhint-disable-next-line no-inline-assembly - assembly { csize := extcodesize(account) } - return csize != 0; - } -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSend.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSend.sol deleted file mode 100644 index 7918e03e2..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSend.sol +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -/// @title Multi Send - Allows to batch multiple transactions into one. -/// @author Nick Dodson - -/// @author Gonçalo Sá - -/// @author Stefan George - -/// @author Richard Meissner - -contract MultiSend { - address private immutable multisendSingleton; - - constructor() { - multisendSingleton = address(this); - } - - /// @dev Sends multiple transactions and reverts all if one fails. - /// @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of - /// operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte), - /// to as a address (=> 20 bytes), - /// value as a uint256 (=> 32 bytes), - /// data length as a uint256 (=> 32 bytes), - /// data as bytes. - /// see abi.encodePacked for more information on packed encoding - /// @notice This method is payable as delegatecalls keep the msg.value from the previous call - /// If the calling method (e.g. execTransaction) received ETH this would revert otherwise - function multiSend(bytes memory transactions) public payable { - require(address(this) != multisendSingleton, "MultiSend should only be called via delegatecall"); - // solhint-disable-next-line no-inline-assembly - assembly { - let length := mload(transactions) - let i := 0x20 - for { - // Pre block is not used in "while mode" - } lt(i, length) { - // Post block is not used in "while mode" - } { - // First byte of the data is the operation. - // We shift by 248 bits (256 - 8 [operation byte]) it right since mload will always load 32 bytes (a word). - // This will also zero out unused data. - let operation := shr(0xf8, mload(add(transactions, i))) - // We offset the load address by 1 byte (operation byte) - // We shift it right by 96 bits (256 - 160 [20 address bytes]) to right-align the data and zero out unused data. - let to := shr(0x60, mload(add(transactions, add(i, 0x01)))) - // We offset the load address by 21 byte (operation byte + 20 address bytes) - let value := mload(add(transactions, add(i, 0x15))) - // We offset the load address by 53 byte (operation byte + 20 address bytes + 32 value bytes) - let dataLength := mload(add(transactions, add(i, 0x35))) - // We offset the load address by 85 byte (operation byte + 20 address bytes + 32 value bytes + 32 data length bytes) - let data := add(transactions, add(i, 0x55)) - let success := 0 - switch operation - case 0 { - success := call(gas(), to, value, data, dataLength, 0, 0) - } - case 1 { - success := delegatecall(gas(), to, data, dataLength, 0, 0) - } - if eq(success, 0) { - revert(0, 0) - } - // Next entry starts at 85 byte + data length - i := add(i, add(0x55, dataLength)) - } - } - } -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol deleted file mode 100644 index 2a84c3fcb..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol +++ /dev/null @@ -1,61 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -pragma solidity ^0.8.0; - -/// @title Multi Send Call Only - Allows to batch multiple transactions into one, but only calls -/// @author Stefan George - -/// @author Richard Meissner - -/// @notice The guard logic is not required here as this contract doesn't support nested delegate calls -contract MultiSendCallOnly { - /// @dev Sends multiple transactions and reverts all if one fails. - /// @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of - /// operation has to be uint8(0) in this version (=> 1 byte), - /// to as a address (=> 20 bytes), - /// value as a uint256 (=> 32 bytes), - /// data length as a uint256 (=> 32 bytes), - /// data as bytes. - /// see abi.encodePacked for more information on packed encoding - /// @notice The code is for most part the same as the normal MultiSend (to keep compatibility), - /// but reverts if a transaction tries to use a delegatecall. - /// @notice This method is payable as delegatecalls keep the msg.value from the previous call - /// If the calling method (e.g. execTransaction) received ETH this would revert otherwise - function multiSend(bytes memory transactions) public payable { - // solhint-disable-next-line no-inline-assembly - assembly { - let length := mload(transactions) - let i := 0x20 - for { - // Pre block is not used in "while mode" - } lt(i, length) { - // Post block is not used in "while mode" - } { - // First byte of the data is the operation. - // We shift by 248 bits (256 - 8 [operation byte]) it right since mload will always load 32 bytes (a word). - // This will also zero out unused data. - let operation := shr(0xf8, mload(add(transactions, i))) - // We offset the load address by 1 byte (operation byte) - // We shift it right by 96 bits (256 - 160 [20 address bytes]) to right-align the data and zero out unused data. - let to := shr(0x60, mload(add(transactions, add(i, 0x01)))) - // We offset the load address by 21 byte (operation byte + 20 address bytes) - let value := mload(add(transactions, add(i, 0x15))) - // We offset the load address by 53 byte (operation byte + 20 address bytes + 32 value bytes) - let dataLength := mload(add(transactions, add(i, 0x35))) - // We offset the load address by 85 byte (operation byte + 20 address bytes + 32 value bytes + 32 data length bytes) - let data := add(transactions, add(i, 0x55)) - let success := 0 - switch operation - case 0 { - success := call(gas(), to, value, data, dataLength, 0, 0) - } - // This version does not allow delegatecalls - case 1 { - revert(0, 0) - } - if eq(success, 0) { - revert(0, 0) - } - // Next entry starts at 85 byte + data length - i := add(i, add(0x55, dataLength)) - } - } - } -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/UserOperation.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/UserOperation.sol deleted file mode 100644 index f356ff78d..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/libs/UserOperation.sol +++ /dev/null @@ -1,81 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.0; - - struct UserOperation { - address sender; - uint256 nonce; - bytes initCode; - bytes callData; - uint callGas; - uint verificationGas; - uint preVerificationGas; - uint maxFeePerGas; - uint maxPriorityFeePerGas; - address paymaster; - bytes paymasterData; - bytes signature; - } - -library UserOperationLib { - - function getSender(UserOperation calldata userOp) internal pure returns (address ret) { - // solhint-disable-next-line no-inline-assembly - assembly {ret := calldataload(userOp)} - } - - //relayer/miner might submit the TX with higher priorityFee, but the user should not - // pay above what he signed for. - function gasPrice(UserOperation calldata userOp) internal view returns (uint) { - unchecked { - uint maxFeePerGas = userOp.maxFeePerGas; - uint maxPriorityFeePerGas = userOp.maxPriorityFeePerGas; - if (maxFeePerGas == maxPriorityFeePerGas) { - //legacy mode (for networks that don't support basefee opcode) - return min(tx.gasprice, maxFeePerGas); - } - return min(tx.gasprice, min(maxFeePerGas, maxPriorityFeePerGas + block.basefee)); - } - } - - function requiredGas(UserOperation calldata userOp) internal pure returns (uint) { - unchecked { - //when using a Paymaster, the verificationGas is used also to cover the postOp call. - // our security model might call postOp eventually twice - uint mul = userOp.paymaster != address(0) ? 1 : 3; - return userOp.callGas + userOp.verificationGas * mul + userOp.preVerificationGas; - } - } - - function requiredPreFund(UserOperation calldata userOp) internal view returns (uint prefund) { - unchecked { - return requiredGas(userOp) * gasPrice(userOp); - } - } - - function hasPaymaster(UserOperation calldata userOp) internal pure returns (bool) { - return userOp.paymaster != address(0); - } - - function pack(UserOperation calldata userOp) internal pure returns (bytes memory ret) { - //lighter signature scheme. must match UserOp.ts#packUserOp - bytes calldata sig = userOp.signature; - // solhint-disable-next-line no-inline-assembly - assembly { - let ofs := userOp - let len := sub(sub(sig.offset, ofs), 32) - ret := mload(0x40) - mstore(0x40, add(ret, add(len, 32))) - mstore(ret, len) - calldatacopy(add(ret, 32), ofs, len) - } - return ret; - } - - function hash(UserOperation calldata userOp) internal pure returns (bytes32) { - return keccak256(pack(userOp)); - } - - function min(uint a, uint b) internal pure returns (uint) { - return a < b ? a : b; - } -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol deleted file mode 100644 index bc7b86598..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/modules/test/WhitelistModule.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.0; -import "../../SmartWallet.sol"; - -contract WhitelistModule { - - mapping(address => bool) public whitelisted; - address public moduleOwner; - - constructor(address _owner) { - moduleOwner = _owner; - } - - modifier onlyOwner { - require(msg.sender == moduleOwner, "sender not authorized"); - _; - } - - function whitelistDestination(address payable _target) external onlyOwner { - require(_target != address(0),"Destination target can not be zero address"); - whitelisted[_target] = true; - } - - function authCall(SmartWallet _safe, address payable _to, uint96 _amount, bytes memory _data) external { // Could have some access control from here like guardians! - require(_to != address(0),"Target can not be zero address"); - require(whitelisted[_to] == true,"Unauthorized :: Target must be whitelised!"); - require(_safe.execTransactionFromModule(_to, _amount, _data, Enum.Operation.Call), "Could not execute ether transfer"); - } - - // If value transfer required from wallet - /*function handlePayment( - BaseWallet safe, - uint256 gasUsed, - uint256 dataGas, - uint256 gasPrice, - address gasToken, - address refundReceiver - ) - private - { - uint256 amount = (gasUsed - gasleft() + dataGas) * gasPrice; - // solium-disable-next-line security/no-tx-origin - address receiver = refundReceiver == address(0) ? tx.origin : refundReceiver; - if (gasToken == address(0)) { - // solium-disable-next-line security/no-send - require(safe.execTransactionFromModule(receiver, amount, "", Enum.Operation.Call), "Could not pay gas costs with ether"); - } else { - bytes memory data = abi.encodeWithSignature("transfer(address,uint256)", receiver, amount); - require(safe.execTransactionFromModule(gasToken, 0, data, Enum.Operation.Call), "Could not pay gas costs with token"); - } - }*/ -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol deleted file mode 100644 index 9710efb45..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "../common/Enum.sol"; - -contract WalletStorage { - // Version - string public constant VERSION = "0.0.1"; - - // Domain Seperators - // keccak256( - // "EIP712Domain(uint256 chainId,address verifyingContract)" - // ); - bytes32 internal constant DOMAIN_SEPARATOR_TYPEHASH = 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218; - - // @review for any modifications - // keccak256( - // "WalletTx(address to,uint256 value,bytes data,uint8 operation,uint256 targetTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" - // ); - bytes32 internal constant WALLET_TX_TYPEHASH = 0xeedfef42e81fe8cd0e4185e4320e9f8d52fd97eb890b85fa9bd7ad97c9a18de2; - - // Owner storage - address public owner; - - struct Transaction { - address to; - uint256 value; - bytes data; - Enum.Operation operation; - uint256 targetTxGas; - // uint256 batchId; - } - - struct FeeRefund { - uint256 baseGas; - uint256 gasPrice; //gasPrice or tokenGasPrice - address gasToken; - address payable refundReceiver; - } - - // @review - // uint256 public nonce; //changed to 2D nonce - mapping(uint256 => uint256) public nonces; - - // AA storage - address public entryPoint; -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/Button.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/Button.sol deleted file mode 100644 index 8900c8abc..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/Button.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; -import "@openzeppelin/contracts/access/Ownable.sol"; - -contract Button is Ownable { - - event ButtonPushed(address pusher, uint256 pushes); - uint256 public pushes; - - function pushButton() public onlyOwner { - pushes++; - emit ButtonPushed(msg.sender, pushes); - } -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StakedTestToken.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StakedTestToken.sol deleted file mode 100644 index bd9889f83..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StakedTestToken.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; - -contract StakedTestToken is ERC20 { - - address public STAKED_TOKEN; - - constructor (address _token) - ERC20("stTST", "StakedTestToken") { - STAKED_TOKEN = _token; - } - - function mint(address sender, uint amount) external { - _mint(sender, amount); - } - - function stake(address _for, uint amount) external { - IERC20(STAKED_TOKEN).transferFrom(msg.sender, address(this), amount); - _mint(_for, amount); - } -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StorageSetter.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StorageSetter.sol deleted file mode 100644 index e134fd58c..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/StorageSetter.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.0; -contract StorageSetter { - function setStorage(bytes3 data) public { - bytes32 slot = 0x4242424242424242424242424242424242424242424242424242424242424242; - // solhint-disable-next-line no-inline-assembly - assembly { - sstore(slot, data) - } - } - } \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol deleted file mode 100644 index ab602edb9..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; - -contract TestToken is ERC20 { - constructor () - ERC20("TST", "TestToken") { - } - - function mint(address sender, uint amount) external { - _mint(sender, amount); - } -} diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/utils/GasEstimator.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/utils/GasEstimator.sol deleted file mode 100644 index 6ac208a04..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/utils/GasEstimator.sol +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - - -contract GasEstimator { - function estimate( - address _to, - bytes calldata _data - ) external returns (bool success, bytes memory result, uint256 gas) { - // solhint-disable - uint256 initialGas = gasleft(); - (success, result) = _to.call(_data); - gas = initialGas - gasleft(); - // solhint-enable - } -} \ No newline at end of file diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index 97b70d0ad..588c39e17 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -6,7 +6,7 @@ import { Eip3770Address, EthAdapter, EthAdapterTransaction, - GetContractProps, + SmartAccountVersion, SmartWalletContract } from '@biconomy-sdk/core-types' import { validateEip3770Address } from '@gnosis.pm/safe-core-sdk-utils' @@ -17,10 +17,6 @@ import { getSmartWalletContractInstance, getSmartWalletFactoryContractInstance } from './contracts/contractInstancesEthers' -import SmartWalletProxyFactoryEthersContract from './contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract' -import MultiSendEthersContract from './contracts/MultiSend/MultiSendEthersContract' -import MultiSendCallOnlyEthersContract from './contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract' - type Ethers = typeof ethers export interface EthersAdapterConfig { @@ -72,32 +68,32 @@ class EthersAdapter implements EthAdapter { return (await this.#provider.getNetwork()).chainId } - getSmartWalletContract(address: string): SmartWalletContract { + getSmartWalletContract(smartAccountVersion: SmartAccountVersion, address: string): SmartWalletContract { if (!address) { throw new Error('Invalid Smart Wallet contract address') } - return getSmartWalletContractInstance(address, this.#provider) + return getSmartWalletContractInstance(smartAccountVersion, address, this.#provider) } - getMultiSendContract(address: string): MultiSendEthersContract { + getMultiSendContract(smartAccountVersion: SmartAccountVersion, address: string) { if (!address) { throw new Error('Invalid Multi Send contract address') } - return getMultiSendContractInstance(address, this.#provider) + return getMultiSendContractInstance(smartAccountVersion, address, this.#provider) } - getMultiSendCallOnlyContract(address: string): MultiSendCallOnlyEthersContract { + getMultiSendCallOnlyContract(smartAccountVersion: SmartAccountVersion, address: string) { if (!address) { throw new Error('Invalid Multi Send contract address') } - return getMultiSendCallOnlyContractInstance(address, this.#provider) + return getMultiSendCallOnlyContractInstance(smartAccountVersion, address, this.#provider) } - getSmartWalletFactoryContract(address: string): SmartWalletProxyFactoryEthersContract { + getSmartWalletFactoryContract(smartAccountVersion: SmartAccountVersion, address: string) { if (!address) { throw new Error('Invalid Wallet Factory contract address') } - return getSmartWalletFactoryContractInstance(address, this.#provider) + return getSmartWalletFactoryContractInstance(smartAccountVersion, address, this.#provider) } async getContractCode(address: string): Promise { diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts similarity index 91% rename from packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts rename to packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts index fe2a86c27..2d0b36178 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts @@ -2,8 +2,8 @@ import { EntryPointContract, UserOperation, TransactionResult } from '@biconomy- import { EntryPointContract as EntryPointContract_TypeChain, EntryPointContractInterface -} from '../../../typechain/src/ethers-v5/v1.0.0/EntryPointContract' -import { toTxResult } from '../../utils' +} from '../../../../typechain/src/ethers-v5/v1.0.0/EntryPointContract' +import { toTxResult } from '../../../utils' import { Contract } from '@ethersproject/contracts' class EntryPointEthersContract implements EntryPointContract { diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts new file mode 100644 index 000000000..2d0b36178 --- /dev/null +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts @@ -0,0 +1,42 @@ +import { EntryPointContract, UserOperation, TransactionResult } from '@biconomy-sdk/core-types' +import { + EntryPointContract as EntryPointContract_TypeChain, + EntryPointContractInterface +} from '../../../../typechain/src/ethers-v5/v1.0.0/EntryPointContract' +import { toTxResult } from '../../../utils' +import { Contract } from '@ethersproject/contracts' + +class EntryPointEthersContract implements EntryPointContract { + constructor(public contract: EntryPointContract_TypeChain) {} + + getAddress(): string { + return this.contract.address + } + + getContract(): Contract { + return this.contract + } + + async simulateValidation(userOperation: UserOperation): Promise { + const resultSet = await this.contract.simulateValidation(userOperation) + return toTxResult(resultSet) + } + + async getRequestId(userOperation: UserOperation): Promise { + return this.contract.getRequestId(userOperation) + } + + async handleOps( + userOperations: UserOperation[], + beneficiary: string + ): Promise { + const resultSet = await this.contract.handleOps(userOperations, beneficiary) + return toTxResult(resultSet) + } + + async getSenderAddress(initCode: string, salt: number): Promise { + return this.contract.getSenderAddress(initCode, salt) + } +} + +export default EntryPointEthersContract diff --git a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts similarity index 91% rename from packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts rename to packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts index 9cb385161..0f45cea6a 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts @@ -2,7 +2,7 @@ import { MultiSendContract } from '@biconomy-sdk/core-types' import { MultiSendContract as MultiSend_TypeChain, MultiSendContractInterface -} from '../../../typechain/src/ethers-v5/v1.0.0/MultiSendContract' +} from '../../../../typechain/src/ethers-v5/v1.0.0/MultiSendContract' import { Contract } from '@ethersproject/contracts' import { Interface } from '@ethersproject/abi' diff --git a/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts new file mode 100644 index 000000000..0f45cea6a --- /dev/null +++ b/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts @@ -0,0 +1,32 @@ +import { MultiSendContract } from '@biconomy-sdk/core-types' +import { + MultiSendContract as MultiSend_TypeChain, + MultiSendContractInterface +} from '../../../../typechain/src/ethers-v5/v1.0.0/MultiSendContract' +import { Contract } from '@ethersproject/contracts' +import { Interface } from '@ethersproject/abi' + +class MultiSendEthersContract implements MultiSendContract { + constructor(public contract: MultiSend_TypeChain) {} + + getAddress(): string { + return this.contract.address + } + + getContract(): Contract { + return this.contract + } + + getInterface(): Interface { + return this.contract.interface + } + + encode: MultiSendContractInterface['encodeFunctionData'] = ( + methodName: any, + params: any + ): string => { + return this.contract.interface.encodeFunctionData(methodName, params) + } +} + +export default MultiSendEthersContract diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts similarity index 91% rename from packages/ethers-lib/src/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.ts rename to packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts index 728de8a72..147e5e5b8 100644 --- a/packages/ethers-lib/src/contracts/MultiSendCallOnly/MultiSendCallOnlyEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts @@ -2,7 +2,7 @@ import { MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' import { MultiSendCallOnlyContract as MultiSendCallOnly_TypeChain, MultiSendCallOnlyContractInterface -} from '../../../typechain/src/ethers-v5/v1.0.0/MultiSendCallOnlyContract' +} from '../../../../typechain/src/ethers-v5/v1.0.0/MultiSendCallOnlyContract' import { Contract } from '@ethersproject/contracts' import { Interface } from '@ethersproject/abi' diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts new file mode 100644 index 000000000..147e5e5b8 --- /dev/null +++ b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts @@ -0,0 +1,32 @@ +import { MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' +import { + MultiSendCallOnlyContract as MultiSendCallOnly_TypeChain, + MultiSendCallOnlyContractInterface +} from '../../../../typechain/src/ethers-v5/v1.0.0/MultiSendCallOnlyContract' +import { Contract } from '@ethersproject/contracts' +import { Interface } from '@ethersproject/abi' + +class MultiSendCallOnlyEthersContract implements MultiSendCallOnlyContract { + constructor(public contract: MultiSendCallOnly_TypeChain) {} + + getAddress(): string { + return this.contract.address + } + + getContract(): Contract { + return this.contract + } + + getInterface(): Interface { + return this.contract.interface + } + + encode: MultiSendCallOnlyContractInterface['encodeFunctionData'] = ( + methodName: any, + params: any + ): string => { + return this.contract.interface.encodeFunctionData(methodName, params) + } +} + +export default MultiSendCallOnlyEthersContract diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts similarity index 90% rename from packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts rename to packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts index a5d8f9c07..7f490bb91 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts @@ -7,9 +7,9 @@ import { FeeRefund, TransactionResult } from '@biconomy-sdk/core-types' -import { toTxResult } from '../../utils' -import { SmartWalletContract as SmartWalletContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' -import { SmartWalletContractInterface } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' +import { toTxResult } from '../../../utils' +import { SmartWalletContract as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' +import { SmartWalletContractInterface } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' import { getJsonWalletAddress, Interface } from 'ethers/lib/utils' import { Contract } from '@ethersproject/contracts' class SmartWalletContractEthers implements SmartWalletContract { diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts new file mode 100644 index 000000000..7f490bb91 --- /dev/null +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts @@ -0,0 +1,79 @@ +import { BigNumber } from '@ethersproject/bignumber' +import { + SmartAccountVersion, + SmartWalletContract, + WalletTransaction, + ExecTransaction, + FeeRefund, + TransactionResult +} from '@biconomy-sdk/core-types' +import { toTxResult } from '../../../utils' +import { SmartWalletContract as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' +import { SmartWalletContractInterface } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' +import { getJsonWalletAddress, Interface } from 'ethers/lib/utils' +import { Contract } from '@ethersproject/contracts' +class SmartWalletContractEthers implements SmartWalletContract { + constructor(public contract: SmartWalletContract_TypeChain) {} + + getInterface(): Interface { + return this.contract.interface + } + + getContract(): Contract { + return this.contract + } + + getAddress(): string { + return this.contract.address + } + + setAddress(address: string) { + this.contract.attach(address) + } + + async getOwner(): Promise { + return await this.contract.owner() + } + + async getVersion(): Promise { + return (await this.contract.VERSION()) as SmartAccountVersion + } + + async getNonce(batchId: number): Promise { + return await this.contract.getNonce(batchId) + } + async getTransactionHash(smartAccountTrxData: WalletTransaction): Promise { + return this.contract.getTransactionHash( + smartAccountTrxData.to, + smartAccountTrxData.value, + smartAccountTrxData.data, + smartAccountTrxData.operation, + smartAccountTrxData.targetTxGas, + smartAccountTrxData.baseGas, + smartAccountTrxData.gasPrice, + smartAccountTrxData.gasToken, + smartAccountTrxData.refundReceiver, + smartAccountTrxData.nonce + ) + } + + async execTransaction( + _tx: ExecTransaction, + batchId: number, + refundInfo: FeeRefund, + signatures: string + ): Promise { + // TODO: estimate GAS before making the transaction + const txResponse = await this.contract.execTransaction(_tx, batchId, refundInfo, signatures) + return toTxResult(txResponse) + } + + encode: SmartWalletContractInterface['encodeFunctionData'] = ( + methodName: any, + params: any + ): string => { + return this.contract.interface.encodeFunctionData(methodName, params) + } +} + +export default SmartWalletContractEthers diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts similarity index 92% rename from packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts rename to packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts index 95512bcfb..4b1bcc2df 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts @@ -1,6 +1,6 @@ import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' -import { toTxResult } from '../../utils' -import { SmartWalletFactoryContract as SmartWalletFactoryContract_TypeChain } from '../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' +import { toTxResult } from '../../../utils' +import { SmartWalletFactoryContract as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' import { Interface } from '@ethersproject/abi' import { Contract } from '@ethersproject/contracts' diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts new file mode 100644 index 000000000..4b1bcc2df --- /dev/null +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts @@ -0,0 +1,60 @@ +import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' +import { toTxResult } from '../../../utils' +import { SmartWalletFactoryContract as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' +import { Interface } from '@ethersproject/abi' +import { Contract } from '@ethersproject/contracts' + +class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { + constructor(public contract: SmartWalletFactoryContract_TypeChain) {} + + getInterface(): Interface { + return this.contract.interface + } + + getContract(): Contract { + return this.contract + } + + async isWalletExist(wallet: string): Promise { + const doesExist = await this.contract.isWalletExist(wallet) + return doesExist + } + + getAddress(): string { + return this.contract.address + } + + setAddress(address: string) { + this.contract.attach(address) + } + + async deployCounterFactualWallet( + owner: string, + entryPoint: string, + handler: string, + index: number + ): Promise { + const resultSet = await this.contract.deployCounterFactualWallet( + owner, + entryPoint, + handler, + index + ) + return toTxResult(resultSet) + } + + async deployWallet( + owner: string, + entryPoint: string, + handler: string + ): Promise { + const resultSet = await this.contract.deployWallet(owner, entryPoint, handler) + return toTxResult(resultSet) + } + + async getAddressForCounterfactualWallet(owner: string, index: number): Promise { + return this.contract.getAddressForCounterfactualWallet(owner, index) + } +} + +export default SmartWalletFactoryContractEthers diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index b26a2d9b6..6f1f50ff9 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -1,46 +1,90 @@ -import { Signer } from '@ethersproject/abstract-signer' import { SmartWalletContract__factory as SmartWalletContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContract__factory' import { MultiSendContract__factory as MultiSendContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendContract__factory' import { MultiSendCallOnlyContract__factory as MultiSendCallOnlyContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendCallOnlyContract__factory' import { SmartWalletFactoryContract__factory as SmartWalletFactoryContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFactoryContract__factory' -import SmartWalletContractEthers from './SmartWallet/SmartWalletContractEthers' -import MultiSendEthersContract from './MultiSend/MultiSendEthersContract' -import MultiSendCallOnlyEthersContract from './MultiSendCallOnly/MultiSendCallOnlyEthersContract' -import SmartWalletFacoryContractEthers from './SmartWalletFactory/SmartWalletProxyFactoryEthersContract' + +import SmartWalletContractEthers_v1_0_0 from './SmartWallet/v1.0.0/SmartWalletContractEthers' +import SmartWalletContractEthers_v1_0_1 from './SmartWallet/v1.0.0/SmartWalletContractEthers' + +import MultiSendEthersContract_v1_0_0 from './MultiSend/v1.0.0/MultiSendEthersContract' +import MultiSendEthersContract_v1_0_1 from './MultiSend/v1.0.1/MultiSendEthersContract' + +import MultiSendCallOnlyEthersContract_v1_0_0 from './MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract' +import MultiSendCallOnlyEthersContract_v1_0_1 from './MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract' + +import SmartWalletFacoryContractEthers_v1_0_0 from './SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract' +import SmartWalletFacoryContractEthers_v1_0_1 from './SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract' + import { JsonRpcProvider } from '@ethersproject/providers' +import { SmartAccountVersion } from '@biconomy-sdk/core-types' export function getSmartWalletContractInstance( + smartAccountVersion: SmartAccountVersion, contractAddress: string, // signer: Signer provider: JsonRpcProvider -): SmartWalletContractEthers { - let walletContract = SmartWalletContract.connect(contractAddress, provider) - return new SmartWalletContractEthers(walletContract) +): SmartWalletContractEthers_v1_0_0 | SmartWalletContractEthers_v1_0_1 { + let walletContract + switch (smartAccountVersion) { + case '1.0.0': + walletContract = SmartWalletContract.connect(contractAddress, provider) + return new SmartWalletContractEthers_v1_0_0(walletContract) + case '1.0.1': + walletContract = SmartWalletContract.connect(contractAddress, provider) + return new SmartWalletContractEthers_v1_0_1(walletContract) + } } // Review export function getMultiSendContractInstance( + smartAccountVersion: SmartAccountVersion, contractAddress: string, // signer: Signer provider: JsonRpcProvider -): MultiSendEthersContract { - let multiSendContract = MultiSendContract.connect(contractAddress, provider) - return new MultiSendEthersContract(multiSendContract) +): MultiSendEthersContract_v1_0_0 | MultiSendEthersContract_v1_0_1 { + let multiSendContract + + switch (smartAccountVersion) { + case '1.0.0': + multiSendContract = MultiSendContract.connect(contractAddress, provider) + return new MultiSendEthersContract_v1_0_0(multiSendContract) + case '1.0.1': + multiSendContract = MultiSendContract.connect(contractAddress, provider) + return new MultiSendEthersContract_v1_0_1(multiSendContract) + } } export function getMultiSendCallOnlyContractInstance( + smartAccountVersion: SmartAccountVersion, contractAddress: string, // signer: Signer provider: JsonRpcProvider -): MultiSendCallOnlyEthersContract { - let multiSendCallContract = MultiSendCallOnlyContract.connect(contractAddress, provider) - return new MultiSendCallOnlyEthersContract(multiSendCallContract) +): MultiSendCallOnlyEthersContract_v1_0_0 | MultiSendCallOnlyEthersContract_v1_0_1 { + let multiSendCallContract + + switch (smartAccountVersion) { + case '1.0.0': + multiSendCallContract = MultiSendCallOnlyContract.connect(contractAddress, provider) + return new MultiSendCallOnlyEthersContract_v1_0_0(multiSendCallContract) + case '1.0.1': + multiSendCallContract = MultiSendCallOnlyContract.connect(contractAddress, provider) + return new MultiSendCallOnlyEthersContract_v1_0_1(multiSendCallContract) + } } export function getSmartWalletFactoryContractInstance( + smartAccountVersion: SmartAccountVersion, contractAddress: string, provider: JsonRpcProvider -): SmartWalletFacoryContractEthers { - let walletFactoryContract = SmartWalletFactoryContract.connect(contractAddress, provider) - return new SmartWalletFacoryContractEthers(walletFactoryContract) +): SmartWalletFacoryContractEthers_v1_0_0 | SmartWalletFacoryContractEthers_v1_0_1 { + let walletFactoryContract + + switch (smartAccountVersion) { + case '1.0.0': + walletFactoryContract = SmartWalletFactoryContract.connect(contractAddress, provider) + return new SmartWalletFacoryContractEthers_v1_0_0(walletFactoryContract) + case '1.0.1': + walletFactoryContract = SmartWalletFactoryContract.connect(contractAddress, provider) + return new SmartWalletFacoryContractEthers_v1_0_1(walletFactoryContract) + } } diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index fc48c1a75..6073b6f76 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -1,3 +1,4 @@ +import { ChainId, SmartAccountVersion } from '@biconomy-sdk/core-types' export type SmartAccountInfoResponse = { readonly name: string readonly version: string @@ -22,8 +23,16 @@ export type BalancesDto = { tokenAddresses: string[] } +export type ContractDetails = { + version: SmartAccountVersion + + address: string + + abi: string +} + export type ChainConfig = { - chainId: number + chainId: ChainId name: string symbol: string isL2: boolean @@ -31,12 +40,12 @@ export type ChainConfig = { description: string blockExplorerUriTemplate: BlockExplorerConfig ensRegistryAddress: string - walletFactoryAddress: string - multiSendAddress: string - multiSendCallAddress: string - walletAddress: string // base wallet - entryPoint: string //should make this address var - fallBackHandler: string //should make this address var + walletFactory: ContractDetails[] + multiSend: ContractDetails[] + multiSendCall: ContractDetails[] + wallet: ContractDetails[] // base wallet + entryPoint: ContractDetails[] //should make this address var + fallBackHandler: ContractDetails[] //should make this address var relayerURL: string providerUrl: string indexerUrl: string diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 1f9f1fd16..57b3cac37 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -5,7 +5,9 @@ import { getSmartWalletFactoryContract, getMultiSendContract, getMultiSendCallOnlyContract, - getSmartWalletContract + getSmartWalletContract, + findChainById, + findContractAddressesByVersion } from './utils/FetchContractsInfo' import { ChainId, @@ -15,7 +17,8 @@ import { MultiSendContract, MultiSendCallOnlyContract, RawTransactionType, - SmartAccountState + SmartAccountState, + SmartAccountVersion } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' import NodeClient, { ChainConfig, SupportedChainsResponse } from '@biconomy-sdk/node-client' @@ -25,19 +28,21 @@ import { WalletTransaction, ExecTransaction, FeeRefund, - SmartAccountTransaction, - getSignatureParameters, - EIP712_WALLET_TX_TYPE, - buildSmartAccountTransaction, + SmartAccountTransaction, + getSignatureParameters, + EIP712_WALLET_TX_TYPE, + buildSmartAccountTransaction, smartAccountSignMessage, - MetaTransaction, - buildMultiSendSmartAccountTx + MetaTransaction, + buildMultiSendSmartAccountTx, + AddressZero } from '@biconomy-sdk/transactions' import { BalancesDto } from '@biconomy-sdk/node-client' import { BalancesResponse, UsdBalanceResponse } from '@biconomy-sdk/node-client' // Create an instance of Smart Account with multi-chain support. class SmartAccount { + DEFAULT_VERSION: SmartAccountVersion = '1.0.1' // { ethAdapter } is a window that gives access to all the implemented functions of it // requires signer and read-only provider ethAdapter!: { [chainId: number]: EthersAdapter } @@ -76,10 +81,14 @@ class SmartAccount { address!: string // contract instances - smartWalletContract!: { [chainId: number]: SmartWalletContract } - multiSendContract!: { [chainId: number]: MultiSendContract } - multiSendCallOnlyContract!: { [chainId: number]: MultiSendCallOnlyContract } - smartWalletFactoryContract!: { [chainId: number]: SmartWalletFactoryContract } + smartWalletContract!: { [chainId: number]: { [version: string]: SmartWalletContract } } + multiSendContract!: { [chainId: number]: { [version: string]: MultiSendContract } } + multiSendCallOnlyContract!: { + [chainId: number]: { [version: string]: MultiSendCallOnlyContract } + } + smartWalletFactoryContract!: { + [chainId: number]: { [version: string]: SmartWalletFactoryContract } + } // TODO // Review provider type WalletProviderLike / ExternalProvider @@ -108,6 +117,15 @@ class SmartAccount { // this.relayer } + /** + * + * @param smartAccountVersion + * @description // set wallet version to be able to interact with different deployed versions + */ + setWalletVersion(smartAccountVersion: SmartAccountVersion){ + this.DEFAULT_VERSION = smartAccountVersion + } + // TODO // add a flag initialised which gets checked before calling other functions @@ -143,42 +161,46 @@ class SmartAccount { this.owner = await this.ethersAdapter().getSignerAddress() // @review // Smart Account addresses gets set by querying active chain's wallet factory (along with owner and index = 0) - this.address = await this.getAddress() + this.address = await this.getAddress(this.DEFAULT_VERSION) return this } // Intialize contracts to be used throughout this class private initializeContracts(chainId: ChainId) { // We get the addresses using chainConfig fetched from backend node - const smartWalletAddress = - this.chainConfig.find((n) => n.chainId === chainId)?.walletAddress || '' - const smartWalletFactoryAddress = - this.chainConfig.find((n) => n.chainId === chainId)?.walletFactoryAddress || '' - const multiSendAddress = - this.chainConfig.find((n) => n.chainId === chainId)?.multiSendAddress || '' - const multiSendCallAddress = - this.chainConfig.find((n) => n.chainId === chainId)?.multiSendCallAddress || '' - - this.smartWalletFactoryContract[chainId] = getSmartWalletFactoryContract( - this.ethAdapter[chainId], - smartWalletFactoryAddress - ) - - // NOTE/TODO : attached address is not wallet address yet - this.smartWalletContract[chainId] = getSmartWalletContract( - this.ethAdapter[chainId], - smartWalletAddress - ) - - this.multiSendContract[chainId] = getMultiSendContract( - this.ethAdapter[chainId], - multiSendAddress - ) - - this.multiSendCallOnlyContract[chainId] = getMultiSendCallOnlyContract( - this.ethAdapter[chainId], - multiSendCallAddress - ) + const currentChainInfo: ChainConfig = findChainById(chainId, this.chainConfig) + + const smartWallet = currentChainInfo.wallet + const smartWalletFactoryAddress = currentChainInfo.walletFactory + const multiSend = currentChainInfo.multiSend + const multiSendCall = currentChainInfo.multiSendCall + + for (let index = 0; index < smartWallet.length; index++) { + const version = smartWallet[index].version + this.smartWalletFactoryContract[chainId][`${version}`] = getSmartWalletFactoryContract( + version, + this.ethAdapter[chainId], + smartWalletFactoryAddress[index].address + ) + // NOTE/TODO : attached address is not wallet address yet + this.smartWalletContract[chainId][`${version}`] = getSmartWalletContract( + version, + this.ethAdapter[chainId], + smartWallet[index].address + ) + + this.multiSendContract[chainId][`${version}`] = getMultiSendContract( + version, + this.ethAdapter[chainId], + multiSend[index].address + ) + + this.multiSendCallOnlyContract[chainId][`${version}`] = getMultiSendCallOnlyContract( + version, + this.ethAdapter[chainId], + multiSendCall[index].address + ) + } } /** @@ -189,13 +211,19 @@ class SmartAccount { return this.nodeClient.getAllSupportedChains() } - public async getAlltokenBalances(balancesDto: BalancesDto, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - if(!balancesDto.chainId) balancesDto.chainId = chainId; + public async getAlltokenBalances( + balancesDto: BalancesDto, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + if (!balancesDto.chainId) balancesDto.chainId = chainId return this.nodeClient.getAlltokenBalances(balancesDto) } - public async getTotalBalanceInUsd(balancesDto: BalancesDto, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - if(!balancesDto.chainId) balancesDto.chainId = chainId; + public async getTotalBalanceInUsd( + balancesDto: BalancesDto, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + if (!balancesDto.chainId) balancesDto.chainId = chainId return this.nodeClient.getTotalBalanceInUsd(balancesDto) } @@ -243,10 +271,11 @@ class SmartAccount { * @returns:string Signature */ async signTransaction( + smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, tx: WalletTransaction, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { - let walletContract = this.smartAccount(chainId).getContract() + let walletContract = this.smartAccount(smartAccountVersion, chainId).getContract() walletContract = walletContract.attach(this.address) // TODO - rename and organize utils @@ -265,6 +294,7 @@ class SmartAccount { * @returns */ async sendTransaction( + smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, tx: WalletTransaction, batchId: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId @@ -291,10 +321,10 @@ class SmartAccount { refundReceiver: tx.refundReceiver } - let walletContract = this.smartAccount(chainId).getContract() + let walletContract = this.smartAccount(smartAccountVersion, chainId).getContract() walletContract = walletContract.attach(this.address) - let signature = await this.signTransaction(tx) + let signature = await this.signTransaction(smartAccountVersion, tx) let execTransaction = await walletContract.populateTransaction.execTransaction( transaction, @@ -306,14 +336,14 @@ class SmartAccount { rawTx.to = this.address rawTx.data = execTransaction.data - const state = await this.getSmartAccountState(chainId) + const state = await this.getSmartAccountState(smartAccountVersion, chainId) const signedTx = { rawTx, tx } - const txn = await this.relayer.relay(signedTx, state, this.getSmartAccountContext(chainId)) + const txn = await this.relayer.relay(signedTx, state, this.getSmartAccountContext(smartAccountVersion, chainId)) return txn } @@ -327,16 +357,17 @@ class SmartAccount { * @returns */ async createSmartAccountTransaction( + smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, transaction: Transaction, batchId: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { - let walletContract = this.smartAccount(chainId).getContract() + let walletContract = this.smartAccount(smartAccountVersion, chainId).getContract() walletContract = walletContract.attach(this.address) // NOTE : If the wallet is not deployed yet then nonce would be zero let nonce = 0 - if (await this.isDeployed(chainId)) { + if (await this.isDeployed(smartAccountVersion, chainId)) { nonce = (await walletContract.getNonce(batchId)).toNumber() } console.log('nonce: ', nonce) @@ -351,57 +382,63 @@ class SmartAccount { return walletTx } - /** + /** * Prepares compatible WalletTransaction object based on Transaction Request * @todo Write test case and limit batch size based on test results in scw-contracts * @notice This transaction is without fee refund (gasless) - * @param transaction - * @param batchId - * @param chainId - * @returns + * @param transaction + * @param batchId + * @param chainId + * @returns */ - async createSmartAccountTransactionBatch(transactions: Transaction[], batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - let walletContract = this.smartAccount(chainId).getContract(); - walletContract = walletContract.attach(this.address); - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0; - if(await this.isDeployed(chainId)) { - nonce = (await walletContract.getNonce(batchId)).toNumber(); - } - console.log('nonce: ', nonce); - - - const txs: MetaTransaction[] = []; - - for(let i=0; i < transactions.length; i++) { - - const innerTx: WalletTransaction = buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) - - txs.push(innerTx); - } - - const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( - this.multiSend(chainId).getContract(), - txs, - nonce - ); - - return walletTx + async createSmartAccountTransactionBatch( + smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + transactions: Transaction[], + batchId: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + let walletContract = this.smartAccount(smartAccountVersion, chainId).getContract() + walletContract = walletContract.attach(this.address) + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (await this.isDeployed(smartAccountVersion, chainId)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } + console.log('nonce: ', nonce) + + const txs: MetaTransaction[] = [] + + for (let i = 0; i < transactions.length; i++) { + const innerTx: WalletTransaction = buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) + + txs.push(innerTx) } + const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( + this.multiSend(smartAccountVersion, chainId).getContract(), + txs, + nonce + ) + + return walletTx + } + /** * * @param chainId optional chainId * @returns Smart Wallet Contract instance attached with current smart account address (proxy) */ - smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { - const smartWallet = this.smartWalletContract[chainId] + smartAccount( + smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): SmartWalletContract { + const smartWallet = this.smartWalletContract[chainId][smartAccountVersion] // Review @talha const address = this.address smartWallet.getContract().attach(address) @@ -413,8 +450,11 @@ class SmartAccount { * @param chainId optional chainId * @returns Smart Wallet Factory instance for requested chainId */ - factory(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletFactoryContract { - return this.smartWalletFactoryContract[chainId] + factory( + smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): SmartWalletFactoryContract { + return this.smartWalletFactoryContract[chainId][smartAccountVersion] } /** @@ -422,8 +462,11 @@ class SmartAccount { * @param chainId optional chainId * @returns MultiSend contract instance for requested chainId */ - multiSend(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendContract { - return this.multiSendContract[chainId] + multiSend( + smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): MultiSendContract { + return this.multiSendContract[chainId][smartAccountVersion] } /** @@ -434,9 +477,10 @@ class SmartAccount { * @returns MultiSend Call Only contract instance for requested chainId */ multiSendCall( + smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): MultiSendCallOnlyContract { - return this.multiSendCallOnlyContract[chainId] + return this.multiSendCallOnlyContract[chainId][smartAccountVersion] } /** @@ -447,11 +491,14 @@ class SmartAccount { * @param chainId optional chainId * @returns Address of the Smart Account */ + async getAddress( + smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { - const address = await this.getAddressForCounterfactualWallet(index, chainId) + // we will hit smart account endpoint to fetch deployed smart account info + const address = await this.getAddressForCounterfactualWallet(smartAccountVersion, index, chainId) this.address = address return address // return await this.getAddressForCounterfactualWallet(index,chainId); @@ -464,14 +511,14 @@ class SmartAccount { * @param chainId optional chainId : Default is current active * @returns */ - async isDeployed(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + async isDeployed(smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { // Other approach : needs review and might be coming wrong // const readProvider = new ethers.providers.JsonRpcProvider(networks[chainId].providerUrl); // const walletCode = await readProvider.getCode(await this.getAddress(chainId)); // return !!walletCode && walletCode !== '0x' // but below works - return await this.factory(chainId).isWalletExist(this.address) + return await this.factory(smartAccountVersion, chainId).isWalletExist(this.address) } /** @@ -480,18 +527,21 @@ class SmartAccount { * @returns object containing infromation (owner, relevant contract addresses, isDeployed) about Smart Account for requested chain */ async getSmartAccountState( + smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { - const entryPoint = this.chainConfig.find((n) => n.chainId === chainId)?.entryPoint - const fallbackHandlerAddress = this.chainConfig.find( - (n) => n.chainId === chainId - )?.fallBackHandler + const contractsByVersion = findContractAddressesByVersion( + smartAccountVersion, + chainId, + this.chainConfig + ) + const state: SmartAccountState = { address: this.address, owner: this.owner, - isDeployed: await this.isDeployed(chainId), // could be set as state in init - entryPointAddress: entryPoint || '', - fallbackHandlerAddress: fallbackHandlerAddress || '' + isDeployed: await this.isDeployed(smartAccountVersion, chainId), // could be set as state in init + entryPointAddress: contractsByVersion.entryPointAddress || '', + fallbackHandlerAddress: contractsByVersion.fallBackHandlerAddress || '' } return state } @@ -504,13 +554,14 @@ class SmartAccount { * @returns object containing relevant contract instances */ getSmartAccountContext( + smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): SmartAccountContext { const context: SmartAccountContext = { - baseWallet: this.smartAccount(chainId), //might as well do getContract and attach and return contract - walletFactory: this.factory(chainId), - multiSend: this.multiSend(chainId), - multiSendCall: this.multiSendCall(chainId) + baseWallet: this.smartAccount(smartAccountVersion, chainId), //might as well do getContract and attach and return contract + walletFactory: this.factory(smartAccountVersion, chainId), + multiSend: this.multiSend(smartAccountVersion, chainId), + multiSendCall: this.multiSendCall(smartAccountVersion, chainId) // Could be added dex router for chain in the future } return context @@ -534,13 +585,13 @@ class SmartAccount { * @returns */ private async getAddressForCounterfactualWallet( + smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { - return await this.smartWalletFactoryContract[chainId].getAddressForCounterfactualWallet( - this.owner, - index - ) + return await this.smartWalletFactoryContract[chainId][ + smartAccountVersion + ].getAddressForCounterfactualWallet(this.owner, index) } } diff --git a/packages/smart-account/src/utils/FetchContractsInfo.ts b/packages/smart-account/src/utils/FetchContractsInfo.ts index 70b55f390..a58b16b74 100644 --- a/packages/smart-account/src/utils/FetchContractsInfo.ts +++ b/packages/smart-account/src/utils/FetchContractsInfo.ts @@ -1,34 +1,90 @@ +import { ChainConfig } from '@biconomy-sdk/node-client' +import { ChainId } from '@biconomy-sdk/core-types' import { SmartWalletContract, SmartWalletFactoryContract, MultiSendContract, - MultiSendCallOnlyContract + MultiSendCallOnlyContract, + SmartAccountVersion } from '@biconomy-sdk/core-types' import { WalletFactory, SmartWallet, MultiSend, MultiSendCallOnly } from '../assets/index' import EthersAdapter from '@biconomy-sdk/ethers-lib' export function getSmartWalletFactoryContract( + smartAccountVersion: SmartAccountVersion, ethAdapter: EthersAdapter, address: string ): SmartWalletFactoryContract { - return ethAdapter.getSmartWalletFactoryContract(address) + return ethAdapter.getSmartWalletFactoryContract(smartAccountVersion, address) } export function getMultiSendContract( + smartAccountVersion: SmartAccountVersion, ethAdapter: EthersAdapter, address: string ): MultiSendContract { - return ethAdapter.getMultiSendContract(address) + return ethAdapter.getMultiSendContract(smartAccountVersion, address) } export function getMultiSendCallOnlyContract( + smartAccountVersion: SmartAccountVersion, ethAdapter: EthersAdapter, address: string ): MultiSendCallOnlyContract { - return ethAdapter.getMultiSendCallOnlyContract(address) + return ethAdapter.getMultiSendCallOnlyContract(smartAccountVersion, address) } export function getSmartWalletContract( + smartAccountVersion: SmartAccountVersion, ethAdapter: EthersAdapter, address: string ): SmartWalletContract { - return ethAdapter.getSmartWalletContract(address) + return ethAdapter.getSmartWalletContract(smartAccountVersion, address) +} + +export function findChainById(chainId: ChainId, chainConfig: ChainConfig[]): ChainConfig { + const currentChainInfo = chainConfig.find((n: ChainConfig) => { + return n.chainId === chainId + }) + if (currentChainInfo) return currentChainInfo + throw new Error('Chain Not Found') +} + +export function findContractAddressesByVersion( + smartAccountVersion: SmartAccountVersion, + chainId: ChainId, + chainConfig: ChainConfig[] +) { + const chainInfo: ChainConfig = findChainById(chainId, chainConfig) + + const entryPointAddress = chainInfo.entryPoint.find((element) => { + return element.version === smartAccountVersion + })?.address + const walletFactoryAddress = chainInfo.walletFactory.find((element) => { + return element.version === smartAccountVersion + })?.address + const walletAddress = chainInfo.wallet.find((element) => { + return element.version === smartAccountVersion + })?.address + const multiSendAddress = chainInfo.multiSend.find((element) => { + return element.version === smartAccountVersion + })?.address + const multiSendCallAddress = chainInfo.multiSendCall.find((element) => { + return element.version === smartAccountVersion + })?.address + + const fallBackHandlerAddress = chainInfo.fallBackHandler.find((element) => { + return element.version === smartAccountVersion + })?.address + + if ( !chainInfo ){ + throw new Error('Chain Not Found') + } + return { + walletAddress, + walletFactoryAddress, + multiSendAddress, + multiSendCallAddress, + entryPointAddress, + fallBackHandlerAddress + + } } From f1b2c3c05a0d1342468525e5437616a16970f993 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 9 Aug 2022 00:38:20 +0530 Subject: [PATCH 0061/1247] rename --- packages/smart-account/src/SmartAccount.ts | 4 ++-- packages/smart-account/tests/smartaccount.spec.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 1f9f1fd16..668bd4b45 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -326,7 +326,7 @@ class SmartAccount { * @param chainId * @returns */ - async createSmartAccountTransaction( + async createTransaction( transaction: Transaction, batchId: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId @@ -360,7 +360,7 @@ class SmartAccount { * @param chainId * @returns */ - async createSmartAccountTransactionBatch(transactions: Transaction[], batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + async createTransactionBatch(transactions: Transaction[], batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index b79d2f566..c06574c24 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -423,7 +423,7 @@ describe('Wallet integration', function () { } const smartAccountTransaction: WalletTransaction = - await smartAccount.createSmartAccountTransaction(tx) + await smartAccount.createTransaction(tx) const signature = await smartAccount.signTransaction(smartAccountTransaction) console.log('signature is: ', signature) @@ -503,7 +503,7 @@ describe('Wallet integration', function () { } const smartAccountTransaction: WalletTransaction = - await smartAccount.createSmartAccountTransaction(tx) + await smartAccount.createTransaction(tx) // Attach relayer before sending a transaction From 64c34fa95f3ed26bf788cc68d5699e333c5a1152 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 9 Aug 2022 02:53:31 +0530 Subject: [PATCH 0062/1247] refund txn creation + dev notes --- .../smart-contract-wallet/SmartWallet.sol | 4 +- packages/smart-account/src/SmartAccount.ts | 56 +++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol index 6cf0a8c61..71a7bfe6f 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol @@ -149,6 +149,7 @@ contract SmartWallet is FeeRefund memory refundInfo, bytes memory signatures ) public payable virtual returns (bool success) { + uint256 gasUsed = gasleft(); bytes32 txHash; // Use scope here to limit variable lifetime and prevent `stack too deep` errors { @@ -174,17 +175,16 @@ contract SmartWallet is require(gasleft() >= max((_tx.targetTxGas * 64) / 63,_tx.targetTxGas + 2500) + 500, "BSA010"); // Use scope here to limit variable lifetime and prevent `stack too deep` errors { - uint256 gasUsed = gasleft(); // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than targetTxGas) // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than targetTxGas success = execute(_tx.to, _tx.value, _tx.data, _tx.operation, refundInfo.gasPrice == 0 ? (gasleft() - 2500) : _tx.targetTxGas); - gasUsed = gasUsed - gasleft(); // If no targetTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert require(success || _tx.targetTxGas != 0 || refundInfo.gasPrice != 0, "BSA013"); // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls uint256 payment = 0; if (refundInfo.gasPrice > 0) { + gasUsed = gasUsed - gasleft(); payment = handlePayment(gasUsed, refundInfo.baseGas, refundInfo.gasPrice, refundInfo.gasToken, refundInfo.refundReceiver); } if (success) emit ExecutionSuccess(txHash, payment); diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 668bd4b45..1a95134ec 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -351,6 +351,62 @@ class SmartAccount { return walletTx } + // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions + + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Rename based on other variations to prepare transaction + * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) + * @param transaction + * @param batchId + * @param chainId + * @returns + */ + async createRefundTransaction( + transaction: Transaction, + feeToken: string, // review types + batchId: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + let walletContract = this.smartAccount(chainId).getContract() + walletContract = walletContract.attach(this.address) + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (await this.isDeployed(chainId)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } + console.log('nonce: ', nonce) + + const gasEstimate1 = await this.ethersAdapter(chainId).estimateGas({ + to: transaction.to, + data: transaction.data || '0x', + from: this.address, + }); + + // Depending on feeToken provide baseGas! + + const baseGas = 25348 + 4928 + 16730 + 40015; //goerli USDC + const refundReceiver = "0x0000000000000000000000000000000000000000"; + const gasToken = feeToken; + const gasPrice = "17"; // this would be token gas price + const targetTxGas = gasEstimate1; // would come from estimator + + const walletTx: WalletTransaction = buildSmartAccountTransaction({ + to: transaction.to, + value: transaction.value, + data: transaction.data, // for token transfers use encodeTransfer + targetTxGas, + baseGas, + refundReceiver, + gasPrice, + gasToken, + nonce + }) + + return walletTx + } + /** * Prepares compatible WalletTransaction object based on Transaction Request * @todo Write test case and limit batch size based on test results in scw-contracts From b45f444f736c4d8462dcfab783165752311edc3a Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 9 Aug 2022 20:10:00 +0530 Subject: [PATCH 0063/1247] contract updated with revert method --- .../smart-contract-wallet/SmartWallet.sol | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol index 71a7bfe6f..62ba95fa6 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol @@ -213,6 +213,31 @@ contract SmartWallet is } } + function handlePaymentRevert( + uint256 gasUsed, + uint256 baseGas, + uint256 gasPrice, + address gasToken, + address payable refundReceiver + ) external returns (uint256 payment) { + uint256 startGas = gasleft(); + // solhint-disable-next-line avoid-tx-origin + address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver; + if (gasToken == address(0)) { + // For ETH we will only adjust the gas price to not be higher than the actual used gas price + payment = (gasUsed + baseGas) * (gasPrice < tx.gasprice ? gasPrice : tx.gasprice); + // Review: low level call value vs transfer + (bool success,) = receiver.call{value: payment}(""); + require(success, "BSA011"); + } else { + payment = (gasUsed + baseGas) * (gasPrice); + require(transferToken(gasToken, receiver, payment), "BSA012"); + } + uint256 requiredGas = startGas - gasleft(); + // Convert response to string and return via error message + revert(string(abi.encodePacked(requiredGas))); + } + // @review /** * @dev Checks whether the signature provided is valid for the provided data, hash. Will revert otherwise. From 969296d86e38836d433e2f06e62e7ad2f81945a7 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 10 Aug 2022 12:59:44 +0530 Subject: [PATCH 0064/1247] push missing test case --- .../smart-account/tests/smartaccount.spec.ts | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index b79d2f566..d8ccc1ef1 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -19,6 +19,7 @@ import { deployWalletContracts } from './utils/deploy' import { BytesLike, Interface } from 'ethers/lib/utils' import { Transaction } from '../src/types' import { WalletTransaction } from '@biconomy-sdk/core-types' +import { textSpanContainsPosition } from 'typescript' type EthereumInstance = { chainId?: number @@ -524,5 +525,78 @@ describe('Wallet integration', function () { ) } }) + + it('Should be able to send batch of transactions', async () => { + const userAddress = (await ethnode.signer?.getAddress()) || '' + const eoaSigner = ethnode.provider?.getSigner() + + const wallet = new SmartAccount(ethnode.provider, { + activeNetworkId: ChainId.GANACHE, + supportedNetworksIds: [ChainId.GOERLI ,ChainId.GANACHE] // has to be consisttent providers and network names + }) + + const smartAccount = await wallet.init() + + const signerAddress = await smartAccount.ethersAdapter().getSignerAddress() + + const smartAccountAddress = smartAccount.address + + // Wallet would have been deployed already + const isDeployed = await smartAccount.isDeployed() /// can pass chainId here + expect(isDeployed).to.be.equal(true) + + console.log('balance before ', await ethnode.provider?.getBalance(smartAccountAddress)) + + await ethnode.signer?.sendTransaction({ + from: signerAddress, + to: smartAccountAddress, + value: ethers.utils.parseEther('1') + }) + + console.log('balance after ', await ethnode.provider?.getBalance(smartAccountAddress)) + + const txs: Transaction[] = [] + + const tx1: Transaction = { + to: signerAddress, + data: '0x', + value: ethers.utils.parseEther('0.5') + } + + txs.push(tx1) + + console.log('receiver 1 ', signerAddress); + console.log('receiver 2 ', (await ethnode.provider?.getSigner(1).getAddress())); + + const tx2: Transaction = { + to: (await ethnode.provider?.getSigner(1).getAddress()) || signerAddress, + data: '0x', + value: ethers.utils.parseEther('0.5') + } + + txs.push(tx2) + + const smartAccountTransaction: WalletTransaction = + await smartAccount.createSmartAccountTransactionBatch(txs) + + // Attach relayer before sending a transaction + + const signer = await smartAccount.ethersAdapter().getSignerAddress() + if (eoaSigner) { + const relayer = new LocalRelayer(eoaSigner) + smartAccount.setRelayer(relayer) + expect(smartAccount.relayer).to.be.equal(relayer) + const response: TransactionResponse = await smartAccount.sendTransaction( + smartAccountTransaction + ) + + const receipt: TransactionReceipt = await response.wait(1) + expect(receipt.status).to.be.equal(1) + console.log('balance after ', await ethnode.provider?.getBalance(smartAccountAddress)) + expect((await ethnode.provider?.getBalance(smartAccountAddress))?.toString()).to.be.equal( + ethers.utils.parseEther('0.5').toString() + ) + } + }) }) }) From 28a3e3cb81b67906b85c47886c6da6afb464fb21 Mon Sep 17 00:00:00 2001 From: talha Date: Wed, 10 Aug 2022 12:57:16 +0500 Subject: [PATCH 0065/1247] added version with contract name and some fixes --- packages/ethers-lib/contracts/V1.0.0.sol | 10 +++--- packages/ethers-lib/contracts/V1.0.1.sol | 10 +++--- .../scripts/generateTypechainFiles.ts | 20 +++++------ .../v1.0.0/EntryPointEthersContract.ts | 6 ++-- .../v1.0.1/EntryPointEthersContract.ts | 6 ++-- .../v1.0.0/MultiSendEthersContract.ts | 8 ++--- .../v1.0.1/MultiSendEthersContract.ts | 8 ++--- .../v1.0.0/MultiSendCallOnlyEthersContract.ts | 8 ++--- .../v1.0.1/MultiSendCallOnlyEthersContract.ts | 8 ++--- .../v1.0.0/SmartWalletContractEthers.ts | 6 ++-- .../v1.0.1/SmartWalletContractEthers.ts | 8 ++--- .../SmartWalletProxyFactoryEthersContract.ts | 2 +- .../SmartWalletProxyFactoryEthersContract.ts | 2 +- .../src/contracts/contractInstancesEthers.ts | 33 +++++++++++-------- 14 files changed, 71 insertions(+), 64 deletions(-) diff --git a/packages/ethers-lib/contracts/V1.0.0.sol b/packages/ethers-lib/contracts/V1.0.0.sol index b27b031f4..b7b8dba77 100644 --- a/packages/ethers-lib/contracts/V1.0.0.sol +++ b/packages/ethers-lib/contracts/V1.0.0.sol @@ -7,13 +7,13 @@ import { MultiSend } from "scw-contracts-v1.0.0/contracts/smart-contract-wallet/ import { MultiSendCallOnly } from "scw-contracts-v1.0.0/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; import { EntryPoint } from "scw-contracts-v1.0.0/contracts/references/aa-4337/EntryPoint.sol"; -contract SmartWalletFactoryContract is WalletFactory { +contract SmartWalletFactoryContract_v1_0_0 is WalletFactory { constructor(address _defaultImpl) WalletFactory(_defaultImpl){} } -contract SmartWalletContract is SmartWallet {} -contract MultiSendContract is MultiSend {} -contract MultiSendCallOnlyContract is MultiSendCallOnly {} -contract EntryPointContract is EntryPoint { +contract SmartWalletContract_v1_0_0 is SmartWallet {} +contract MultiSendContract_v1_0_0 is MultiSend {} +contract MultiSendCallOnlyContract_v1_0_0 is MultiSendCallOnly {} +contract EntryPointContract_v1_0_0 is EntryPoint { constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} } diff --git a/packages/ethers-lib/contracts/V1.0.1.sol b/packages/ethers-lib/contracts/V1.0.1.sol index 33ff934c0..40ab6df28 100644 --- a/packages/ethers-lib/contracts/V1.0.1.sol +++ b/packages/ethers-lib/contracts/V1.0.1.sol @@ -7,13 +7,13 @@ import { MultiSend } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/ import { MultiSendCallOnly } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; import { EntryPoint } from "scw-contracts-v1.0.1/contracts/references/aa-4337/EntryPoint.sol"; -contract SmartWalletFactoryContract is WalletFactory { +contract SmartWalletFactoryContract_v1_0_1 is WalletFactory { constructor(address _defaultImpl) WalletFactory(_defaultImpl){} } -contract SmartWalletContract is SmartWallet {} -contract MultiSendContract is MultiSend {} -contract MultiSendCallOnlyContract is MultiSendCallOnly {} -contract EntryPointContract is EntryPoint { +contract SmartWalletContract_v1_0_1 is SmartWallet {} +contract MultiSendContract_v1_0_1 is MultiSend {} +contract MultiSendCallOnlyContract_v1_0_1 is MultiSendCallOnly {} +contract EntryPointContract_v1_0_1 is EntryPoint { constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} } diff --git a/packages/ethers-lib/scripts/generateTypechainFiles.ts b/packages/ethers-lib/scripts/generateTypechainFiles.ts index a93fa80d9..fc32d8fbb 100644 --- a/packages/ethers-lib/scripts/generateTypechainFiles.ts +++ b/packages/ethers-lib/scripts/generateTypechainFiles.ts @@ -16,18 +16,18 @@ const outDirTests = 'typechain/tests/' const smartAccountContractsPath = './artifacts/contracts' const smartAccountContracts_V1_0_0 = [ - `${smartAccountContractsPath}/V1.0.0.sol/SmartWalletContract.json`, - `${smartAccountContractsPath}/V1.0.0.sol//MultiSendContract.json`, - `${smartAccountContractsPath}/V1.0.0.sol//MultiSendCallOnlyContract.json`, - `${smartAccountContractsPath}/V1.0.0.sol//SmartWalletFactoryContract.json`, - `${smartAccountContractsPath}/V1.0.0.sol//EntryPointContract.json` + `${smartAccountContractsPath}/V1.0.0.sol/SmartWalletContract_v1_0_0.json`, + `${smartAccountContractsPath}/V1.0.0.sol//MultiSendContract_v1_0_0.json`, + `${smartAccountContractsPath}/V1.0.0.sol//MultiSendCallOnlyContract_v1_0_0.json`, + `${smartAccountContractsPath}/V1.0.0.sol//SmartWalletFactoryContract_v1_0_0.json`, + `${smartAccountContractsPath}/V1.0.0.sol//EntryPointContract_v1_0_0.json` ].join(' ') const smartAccountContracts_V1_0_1 = [ - `${smartAccountContractsPath}/V1.0.1.sol/SmartWalletContract.json`, - `${smartAccountContractsPath}/V1.0.1.sol/MultiSendContract.json`, - `${smartAccountContractsPath}/V1.0.1.sol/MultiSendCallOnlyContract.json`, - `${smartAccountContractsPath}/V1.0.1.sol/SmartWalletFactoryContract.json`, - `${smartAccountContractsPath}/V1.0.1.sol/EntryPointContract.json` + `${smartAccountContractsPath}/V1.0.1.sol/SmartWalletContract_v1_0_1.json`, + `${smartAccountContractsPath}/V1.0.1.sol/MultiSendContract_v1_0_1.json`, + `${smartAccountContractsPath}/V1.0.1.sol/MultiSendCallOnlyContract_v1_0_1.json`, + `${smartAccountContractsPath}/V1.0.1.sol/SmartWalletFactoryContract_v1_0_1.json`, + `${smartAccountContractsPath}/V1.0.1.sol/EntryPointContract_v1_0_1.json` ].join(' ') // Remove existing Typechain files diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts index 2d0b36178..d898e96e1 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts @@ -1,8 +1,8 @@ import { EntryPointContract, UserOperation, TransactionResult } from '@biconomy-sdk/core-types' import { - EntryPointContract as EntryPointContract_TypeChain, - EntryPointContractInterface -} from '../../../../typechain/src/ethers-v5/v1.0.0/EntryPointContract' + EntryPointContractV100 as EntryPointContract_TypeChain, + EntryPointContractV100Interface +} from '../../../../typechain/src/ethers-v5/v1.0.0/EntryPointContractV100' import { toTxResult } from '../../../utils' import { Contract } from '@ethersproject/contracts' diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts index 2d0b36178..2c438a94f 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts @@ -1,8 +1,8 @@ import { EntryPointContract, UserOperation, TransactionResult } from '@biconomy-sdk/core-types' import { - EntryPointContract as EntryPointContract_TypeChain, - EntryPointContractInterface -} from '../../../../typechain/src/ethers-v5/v1.0.0/EntryPointContract' + EntryPointContractV101 as EntryPointContract_TypeChain, + EntryPointContractV101Interface +} from '../../../../typechain/src/ethers-v5/v1.0.1/EntryPointContractV101' import { toTxResult } from '../../../utils' import { Contract } from '@ethersproject/contracts' diff --git a/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts index 0f45cea6a..0bfbd547b 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts @@ -1,8 +1,8 @@ import { MultiSendContract } from '@biconomy-sdk/core-types' import { - MultiSendContract as MultiSend_TypeChain, - MultiSendContractInterface -} from '../../../../typechain/src/ethers-v5/v1.0.0/MultiSendContract' + MultiSendContractV100 as MultiSend_TypeChain, + MultiSendContractV100Interface +} from '../../../../typechain/src/ethers-v5/v1.0.0/MultiSendContractV100' import { Contract } from '@ethersproject/contracts' import { Interface } from '@ethersproject/abi' @@ -21,7 +21,7 @@ class MultiSendEthersContract implements MultiSendContract { return this.contract.interface } - encode: MultiSendContractInterface['encodeFunctionData'] = ( + encode: MultiSendContractV100Interface['encodeFunctionData'] = ( methodName: any, params: any ): string => { diff --git a/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts index 0f45cea6a..abcf4dc5e 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts @@ -1,8 +1,8 @@ import { MultiSendContract } from '@biconomy-sdk/core-types' import { - MultiSendContract as MultiSend_TypeChain, - MultiSendContractInterface -} from '../../../../typechain/src/ethers-v5/v1.0.0/MultiSendContract' + MultiSendContractV101 as MultiSend_TypeChain, + MultiSendContractV101Interface +} from '../../../../typechain/src/ethers-v5/v1.0.1/MultiSendContractV101' import { Contract } from '@ethersproject/contracts' import { Interface } from '@ethersproject/abi' @@ -21,7 +21,7 @@ class MultiSendEthersContract implements MultiSendContract { return this.contract.interface } - encode: MultiSendContractInterface['encodeFunctionData'] = ( + encode: MultiSendContractV101Interface['encodeFunctionData'] = ( methodName: any, params: any ): string => { diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts index 147e5e5b8..69ea00939 100644 --- a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts @@ -1,8 +1,8 @@ import { MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' import { - MultiSendCallOnlyContract as MultiSendCallOnly_TypeChain, - MultiSendCallOnlyContractInterface -} from '../../../../typechain/src/ethers-v5/v1.0.0/MultiSendCallOnlyContract' + MultiSendCallOnlyContractV100 as MultiSendCallOnly_TypeChain, + MultiSendCallOnlyContractV100Interface +} from '../../../../typechain/src/ethers-v5/v1.0.0/MultiSendCallOnlyContractV100' import { Contract } from '@ethersproject/contracts' import { Interface } from '@ethersproject/abi' @@ -21,7 +21,7 @@ class MultiSendCallOnlyEthersContract implements MultiSendCallOnlyContract { return this.contract.interface } - encode: MultiSendCallOnlyContractInterface['encodeFunctionData'] = ( + encode: MultiSendCallOnlyContractV100Interface['encodeFunctionData'] = ( methodName: any, params: any ): string => { diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts index 147e5e5b8..cb79d2932 100644 --- a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts @@ -1,8 +1,8 @@ import { MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' import { - MultiSendCallOnlyContract as MultiSendCallOnly_TypeChain, - MultiSendCallOnlyContractInterface -} from '../../../../typechain/src/ethers-v5/v1.0.0/MultiSendCallOnlyContract' + MultiSendCallOnlyContractV101 as MultiSendCallOnly_TypeChain, + MultiSendCallOnlyContractV101Interface +} from '../../../../typechain/src/ethers-v5/v1.0.1/MultiSendCallOnlyContractV101' import { Contract } from '@ethersproject/contracts' import { Interface } from '@ethersproject/abi' @@ -21,7 +21,7 @@ class MultiSendCallOnlyEthersContract implements MultiSendCallOnlyContract { return this.contract.interface } - encode: MultiSendCallOnlyContractInterface['encodeFunctionData'] = ( + encode: MultiSendCallOnlyContractV101Interface['encodeFunctionData'] = ( methodName: any, params: any ): string => { diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts index 7f490bb91..3f083d68d 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts @@ -8,8 +8,8 @@ import { TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' -import { SmartWalletContract as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' -import { SmartWalletContractInterface } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' +import { SmartWalletContractV100 as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContractV100' +import { SmartWalletContractV100Interface } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContractV100' import { getJsonWalletAddress, Interface } from 'ethers/lib/utils' import { Contract } from '@ethersproject/contracts' class SmartWalletContractEthers implements SmartWalletContract { @@ -68,7 +68,7 @@ class SmartWalletContractEthers implements SmartWalletContract { return toTxResult(txResponse) } - encode: SmartWalletContractInterface['encodeFunctionData'] = ( + encode: SmartWalletContractV100Interface['encodeFunctionData'] = ( methodName: any, params: any ): string => { diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts index 7f490bb91..621345069 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts @@ -8,9 +8,9 @@ import { TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' -import { SmartWalletContract as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' -import { SmartWalletContractInterface } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContract' -import { getJsonWalletAddress, Interface } from 'ethers/lib/utils' +import { SmartWalletContractV101 as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletContractV101' +import { SmartWalletContractV101Interface } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletContractV101' +import { Interface } from 'ethers/lib/utils' import { Contract } from '@ethersproject/contracts' class SmartWalletContractEthers implements SmartWalletContract { constructor(public contract: SmartWalletContract_TypeChain) {} @@ -68,7 +68,7 @@ class SmartWalletContractEthers implements SmartWalletContract { return toTxResult(txResponse) } - encode: SmartWalletContractInterface['encodeFunctionData'] = ( + encode: SmartWalletContractV101Interface['encodeFunctionData'] = ( methodName: any, params: any ): string => { diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts index 4b1bcc2df..7aa18ac60 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts @@ -1,6 +1,6 @@ import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' -import { SmartWalletFactoryContract as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' +import { SmartWalletFactoryContractV100 as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContractV100' import { Interface } from '@ethersproject/abi' import { Contract } from '@ethersproject/contracts' diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts index 4b1bcc2df..eb3122e92 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts @@ -1,6 +1,6 @@ import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' -import { SmartWalletFactoryContract as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContract' +import { SmartWalletFactoryContractV101 as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletFactoryContractV101' import { Interface } from '@ethersproject/abi' import { Contract } from '@ethersproject/contracts' diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index 6f1f50ff9..c9c1597a9 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -1,10 +1,17 @@ -import { SmartWalletContract__factory as SmartWalletContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContract__factory' -import { MultiSendContract__factory as MultiSendContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendContract__factory' -import { MultiSendCallOnlyContract__factory as MultiSendCallOnlyContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendCallOnlyContract__factory' -import { SmartWalletFactoryContract__factory as SmartWalletFactoryContract } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFactoryContract__factory' +import { SmartWalletContractV100__factory as SmartWalletContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContractV100__factory' +import { SmartWalletContractV101__factory as SmartWalletContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletContractV101__factory' + +import { MultiSendContractV100__factory as MultiSendContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendContractV100__factory' +import { MultiSendContractV101__factory as MultiSendContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/MultiSendContractV101__factory' + +import { MultiSendCallOnlyContractV100__factory as MultiSendCallOnlyContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendCallOnlyContractV100__factory' +import { MultiSendCallOnlyContractV101__factory as MultiSendCallOnlyContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/MultiSendCallOnlyContractV101__factory' + +import { SmartWalletFactoryContractV100__factory as SmartWalletFactoryContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFactoryContractV100__factory' +import { SmartWalletFactoryContractV101__factory as SmartWalletFactoryContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletFactoryContractV101__factory' import SmartWalletContractEthers_v1_0_0 from './SmartWallet/v1.0.0/SmartWalletContractEthers' -import SmartWalletContractEthers_v1_0_1 from './SmartWallet/v1.0.0/SmartWalletContractEthers' +import SmartWalletContractEthers_v1_0_1 from './SmartWallet/v1.0.1/SmartWalletContractEthers' import MultiSendEthersContract_v1_0_0 from './MultiSend/v1.0.0/MultiSendEthersContract' import MultiSendEthersContract_v1_0_1 from './MultiSend/v1.0.1/MultiSendEthersContract' @@ -27,10 +34,10 @@ export function getSmartWalletContractInstance( let walletContract switch (smartAccountVersion) { case '1.0.0': - walletContract = SmartWalletContract.connect(contractAddress, provider) + walletContract = SmartWalletContractV100.connect(contractAddress, provider) return new SmartWalletContractEthers_v1_0_0(walletContract) case '1.0.1': - walletContract = SmartWalletContract.connect(contractAddress, provider) + walletContract = SmartWalletContractV101.connect(contractAddress, provider) return new SmartWalletContractEthers_v1_0_1(walletContract) } } @@ -46,10 +53,10 @@ export function getMultiSendContractInstance( switch (smartAccountVersion) { case '1.0.0': - multiSendContract = MultiSendContract.connect(contractAddress, provider) + multiSendContract = MultiSendContractV100.connect(contractAddress, provider) return new MultiSendEthersContract_v1_0_0(multiSendContract) case '1.0.1': - multiSendContract = MultiSendContract.connect(contractAddress, provider) + multiSendContract = MultiSendContractV101.connect(contractAddress, provider) return new MultiSendEthersContract_v1_0_1(multiSendContract) } } @@ -64,10 +71,10 @@ export function getMultiSendCallOnlyContractInstance( switch (smartAccountVersion) { case '1.0.0': - multiSendCallContract = MultiSendCallOnlyContract.connect(contractAddress, provider) + multiSendCallContract = MultiSendCallOnlyContractV100.connect(contractAddress, provider) return new MultiSendCallOnlyEthersContract_v1_0_0(multiSendCallContract) case '1.0.1': - multiSendCallContract = MultiSendCallOnlyContract.connect(contractAddress, provider) + multiSendCallContract = MultiSendCallOnlyContractV101.connect(contractAddress, provider) return new MultiSendCallOnlyEthersContract_v1_0_1(multiSendCallContract) } } @@ -81,10 +88,10 @@ export function getSmartWalletFactoryContractInstance( switch (smartAccountVersion) { case '1.0.0': - walletFactoryContract = SmartWalletFactoryContract.connect(contractAddress, provider) + walletFactoryContract = SmartWalletFactoryContractV100.connect(contractAddress, provider) return new SmartWalletFacoryContractEthers_v1_0_0(walletFactoryContract) case '1.0.1': - walletFactoryContract = SmartWalletFactoryContract.connect(contractAddress, provider) + walletFactoryContract = SmartWalletFactoryContractV101.connect(contractAddress, provider) return new SmartWalletFacoryContractEthers_v1_0_1(walletFactoryContract) } } From 13f7ae8b50349a1279c2a537475aba72ccb6fa8a Mon Sep 17 00:00:00 2001 From: arcticfloyd1984 Date: Wed, 10 Aug 2022 13:30:39 +0530 Subject: [PATCH 0066/1247] rpc relayer code added --- package-lock.json | 4322 +++++++++++++++++++- packages/core-types/src/types.ts | 4 + packages/relayer/src/index.ts | 3 +- packages/relayer/src/rest-relayer.ts | 148 + packages/relayer/src/utils/httpRequests.ts | 53 + packages/smart-account/src/SmartAccount.ts | 1 - 6 files changed, 4426 insertions(+), 105 deletions(-) create mode 100644 packages/relayer/src/rest-relayer.ts create mode 100644 packages/relayer/src/utils/httpRequests.ts diff --git a/package-lock.json b/package-lock.json index 8ce79d211..0ea6aa48c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ }, "devDependencies": { "lerna": "^5.1.6", - "nx": "^14.4.2", + "nx": "^14.4.3", "prettier": "2.7.1", "ts-node": "^10.8.2" }, @@ -20,6 +20,19 @@ ] } }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", @@ -32,6 +45,228 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz", + "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", @@ -41,6 +276,29 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", @@ -117,6 +375,244 @@ "node": ">=4" } }, + "node_modules/@babel/parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.10.tgz", + "integrity": "sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.10.tgz", + "integrity": "sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, "node_modules/@biconomy-sdk/core-types": { "resolved": "packages/core-types", "link": true @@ -137,6 +633,10 @@ "resolved": "packages/smart-account", "link": true }, + "node_modules/@biconomy-sdk/transactions": { + "resolved": "packages/transactions", + "link": true + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "devOptional": true, @@ -1410,7 +1910,6 @@ }, "node_modules/@ethersproject/solidity": { "version": "5.6.1", - "dev": true, "funding": [ { "type": "individual", @@ -1576,13 +2075,27 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "node_modules/@gnosis.pm/safe-core-sdk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.3.2.tgz", + "integrity": "sha512-XD50+AU7ahHwX0+YG8jeyqxrqNsEdLfCzAS5+9WkGuXMNm+K4jkJ9yBHN5yKAu5JXeCDYEQkjTSdVilm8ZLpXQ==", + "dependencies": { + "@ethersproject/solidity": "^5.6.0", + "@gnosis.pm/safe-core-sdk-types": "^1.3.0", + "@gnosis.pm/safe-deployments": "1.15.0", + "ethereumjs-util": "^7.1.4", + "semver": "^7.3.5", + "web3-utils": "^1.7.1" + } + }, "node_modules/@gnosis.pm/safe-core-sdk-types": { - "version": "1.1.0", - "license": "MIT", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.4.0.tgz", + "integrity": "sha512-v+V6wqfFVgBl2sZ8FqCMwL/qFnr6wBCcJ/gllo4OvItYw/dmXlMCkxUrERoILSeHDezLkrWnnzA4tHfkEwYuwg==", "dependencies": { "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "^1.12.0", + "@gnosis.pm/safe-deployments": "1.15.0", "web3-core": "^1.7.1" } }, @@ -1658,6 +2171,394 @@ "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", "dev": true }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", + "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/reporters": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.1.3", + "jest-config": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-resolve-dependencies": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "jest-watcher": "^28.1.3", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "node_modules/@jest/environment": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", + "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "dev": true, + "dependencies": { + "expect": "^28.1.3", + "jest-snapshot": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "dependencies": { + "jest-get-type": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", + "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", + "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/types": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", + "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.13", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", + "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.0.8", "devOptional": true, @@ -1666,6 +2567,15 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "devOptional": true, @@ -3180,21 +4090,21 @@ } }, "node_modules/@nrwl/cli": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.4.2.tgz", - "integrity": "sha512-JNV4kP9goZD4BlTQGKdKhCRc1bhiWYp1TaDJHdk4ZfhiLt1NzXNxxgc/eX2obFZ3Hw+KdM/gM5F7KfWBbtSGSw==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.2.tgz", + "integrity": "sha512-uriSxM33IpiBpW9kHEW3gw5OjPaQe3jHdWUMOT88TrqTlf449qe01Sys8+H2YgJMIcLTFYX0fP4V1K9jqKKZCg==", "dev": true, "dependencies": { - "nx": "14.4.2" + "nx": "14.5.2" } }, "node_modules/@nrwl/tao": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.4.2.tgz", - "integrity": "sha512-Ygw3skKZfFhi4MBHZKQ8A67pDQxeyDdY78tFWViMN0SEn9ExL41Q8V9aSMfir8VZYGca6ZOXX5MRhbeHdcgMLQ==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.2.tgz", + "integrity": "sha512-SEx3SM7xQiB8mOQ/gCt7lFJKRrkq3rBX6FiV3bl+dQtuKK2zKQbyikY9r+MCZCQNqZAud3HJ2xCyKZBhK8htQg==", "dev": true, "dependencies": { - "nx": "14.4.2" + "nx": "14.5.2" }, "bin": { "tao": "index.js" @@ -3654,6 +4564,12 @@ "version": "1.14.1", "license": "0BSD" }, + "node_modules/@sinclair/typebox": { + "version": "0.24.26", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.26.tgz", + "integrity": "sha512-1ZVIyyS1NXDRVT8GjWD5jULjhDyM3IsIHef2VGUMdnWOlX2tkPjyEX/7K0TGSH2S8EaPhp1ylFdjSjUGQ+gecg==", + "dev": true + }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "dev": true, @@ -3663,6 +4579,24 @@ "node": ">=6" } }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, "node_modules/@solidity-parser/parser": { "version": "0.14.2", "license": "MIT", @@ -3732,6 +4666,47 @@ "version": "7.2.0", "license": "MIT" }, + "node_modules/@types/babel__core": { + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, "node_modules/@types/bignumber.js": { "version": "5.0.0", "dev": true, @@ -3760,6 +4735,39 @@ "@types/chai": "*" } }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.11", "dev": true, @@ -3810,7 +4818,6 @@ }, "node_modules/@types/mocha": { "version": "9.1.1", - "dev": true, "license": "MIT" }, "node_modules/@types/node": { @@ -3887,6 +4894,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, "node_modules/@types/underscore": { "version": "1.11.4", "dev": true, @@ -3901,6 +4914,21 @@ "@types/underscore": "*" } }, + "node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.30.6", "dev": true, @@ -4481,6 +5509,97 @@ "license": "MIT", "peer": true }, + "node_modules/babel-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", + "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "dev": true, + "dependencies": { + "@jest/transform": "^28.1.3", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.1.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", + "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", + "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^28.1.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "license": "MIT" @@ -4788,6 +5907,34 @@ "safe-buffer": "^5.2.0" } }, + "node_modules/browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/bs58": { "version": "4.0.1", "license": "MIT", @@ -4804,6 +5951,15 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, "node_modules/buffer": { "version": "5.7.1", "funding": [ @@ -5059,6 +6215,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001373", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", + "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, "node_modules/caseless": { "version": "0.12.0", "dev": true, @@ -5107,6 +6279,15 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -5194,6 +6375,12 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, "node_modules/class-is": { "version": "1.1.0", "dev": true, @@ -5356,6 +6543,16 @@ "node": ">=10" } }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, "node_modules/code-point-at": { "version": "1.1.0", "dev": true, @@ -5365,6 +6562,12 @@ "node": ">=0.10.0" } }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, "node_modules/color-convert": { "version": "2.0.1", "license": "MIT", @@ -5754,6 +6957,21 @@ "node": ">=10" } }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/cookie": { "version": "0.4.2", "license": "MIT", @@ -6047,6 +7265,15 @@ "dev": true, "license": "MIT" }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", @@ -6177,6 +7404,15 @@ "node": ">=8" } }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/dezalgo": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", @@ -6194,6 +7430,15 @@ "node": ">=0.3.1" } }, + "node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/diffie-hellman": { "version": "5.0.3", "dev": true, @@ -6295,6 +7540,12 @@ "license": "MIT", "peer": true }, + "node_modules/electron-to-chromium": { + "version": "1.4.210", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.210.tgz", + "integrity": "sha512-kSiX4tuyZijV7Cz0MWVmGT8K2siqaOA4Z66K5dCttPPRh0HicOcOAEj1KlC8O8J1aOS/1M8rGofOzksLKaHWcQ==", + "dev": true + }, "node_modules/elliptic": { "version": "6.5.4", "license": "MIT", @@ -6312,6 +7563,18 @@ "version": "4.12.0", "license": "MIT" }, + "node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "license": "MIT" @@ -6700,6 +7963,19 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.4.0", "dev": true, @@ -7027,6 +8303,31 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/express": { "version": "4.18.1", "dev": true, @@ -7225,6 +8526,15 @@ "reusify": "^1.0.4" } }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -9486,12 +10796,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/caniuse-lite": { - "version": "1.0.30001174", - "dev": true, - "license": "CC-BY-4.0", - "peer": true - }, "node_modules/ganache-core/node_modules/caseless": { "version": "0.12.0", "dev": true, @@ -9812,21 +11116,6 @@ "node": ">= 0.6" } }, - "node_modules/ganache-core/node_modules/convert-source-map": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/ganache-core/node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/ganache-core/node_modules/cookie": { "version": "0.4.0", "dev": true, @@ -10194,12 +11483,6 @@ "optional": true, "peer": true }, - "node_modules/ganache-core/node_modules/electron-to-chromium": { - "version": "1.3.636", - "dev": true, - "license": "ISC", - "peer": true - }, "node_modules/ganache-core/node_modules/elliptic": { "version": "6.5.3", "dev": true, @@ -17537,6 +18820,15 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "license": "ISC", @@ -17564,6 +18856,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/get-pkg-repo": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", @@ -18323,6 +19624,12 @@ "node": ">=10" } }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "node_modules/http-cache-semantics": { "version": "4.1.0", "dev": true, @@ -18812,6 +20119,15 @@ "license": "MIT", "peer": true }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/is-generator-function": { "version": "1.0.10", "license": "MIT", @@ -19094,6 +20410,81 @@ "license": "MIT", "peer": true }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isurl": { "version": "1.0.0", "dev": true, @@ -19107,6 +20498,629 @@ "node": ">= 4" } }, + "node_modules/jest-changed-files": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", + "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-circus": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", + "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "p-limit": "^3.1.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-cli": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", + "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "dev": true, + "dependencies": { + "@jest/core": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "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.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-cli/node_modules/yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-config": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", + "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.3", + "@jest/types": "^28.1.3", + "babel-jest": "^28.1.3", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.3", + "jest-environment-node": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "node_modules/jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", + "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.3", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", + "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", + "dev": true, + "dependencies": { + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-mock": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", + "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", + "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", + "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", + "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/environment": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-leak-detector": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-resolve": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-util": "^28.1.3", + "jest-watcher": "^28.1.3", + "jest-worker": "^28.1.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runtime": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", + "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/globals": "^28.1.3", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", + "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "natural-compare": "^1.4.0", + "pretty-format": "^28.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-util/node_modules/ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "node_modules/jest-validate": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", + "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/js-sha3": { "version": "0.8.0", "license": "MIT" @@ -19133,6 +21147,18 @@ "license": "MIT", "peer": true }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.0", "dev": true, @@ -19314,6 +21340,15 @@ "graceful-fs": "^4.1.11" } }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/lcid": { "version": "1.0.0", "dev": true, @@ -19455,6 +21490,15 @@ "node": ">=6" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "dev": true, @@ -19913,6 +21957,15 @@ "node": ">= 10" } }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -20812,6 +22865,18 @@ "node-gyp-build-test": "build-test.js" } }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -21187,14 +23252,14 @@ "license": "MIT" }, "node_modules/nx": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.4.2.tgz", - "integrity": "sha512-bYO//HuwQL4X8y+2BjUPtkPLDiYI1zMejQo6+uJl3+VdYPcsjwW/ca581tBPHiPH95XnHiBartnMrMJtn11grw==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-14.5.2.tgz", + "integrity": "sha512-I6KWVMR5Ksj/HgderkcmJmyaqHdWblQeFUeVq9to263Wr3QCIRigbvdDI3rq3ZQCBMyhUSOVP9MFXROoRVtJXQ==", "dev": true, "hasInstallScript": true, "dependencies": { - "@nrwl/cli": "14.4.2", - "@nrwl/tao": "14.4.2", + "@nrwl/cli": "14.5.2", + "@nrwl/tao": "14.5.2", "@parcel/watcher": "2.0.4", "chalk": "4.1.0", "chokidar": "^3.5.1", @@ -22356,6 +24421,12 @@ "license": "MIT", "peer": true }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/picomatch": { "version": "2.3.1", "license": "MIT", @@ -22410,6 +24481,15 @@ "node": ">=0.10.0" } }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -22471,6 +24551,33 @@ "node": ">=6.0.0" } }, + "node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/proc-log": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", @@ -22532,6 +24639,19 @@ "node": ">=10" } }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/promzard": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", @@ -22722,6 +24842,12 @@ "node": ">=0.10.0" } }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -23148,6 +25274,15 @@ "node": ">=8" } }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/responselike": { "version": "1.0.2", "dev": true, @@ -23536,6 +25671,12 @@ "simple-concat": "^1.0.0" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "node_modules/slash": { "version": "3.0.0", "license": "MIT", @@ -23772,6 +25913,12 @@ "readable-stream": "^3.0.0" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, "node_modules/sshpk": { "version": "1.17.0", "dev": true, @@ -23815,6 +25962,27 @@ "node": ">= 8" } }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/stacktrace-parser": { "version": "0.1.10", "license": "MIT", @@ -23859,6 +26027,19 @@ "dev": true, "license": "WTFPL OR MIT" }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/string-width": { "version": "4.2.3", "license": "MIT", @@ -23982,6 +26163,19 @@ "node": ">=8" } }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "dev": true, @@ -24268,6 +26462,36 @@ "node": ">=4" } }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/test-value": { "version": "2.1.0", "dev": true, @@ -24341,6 +26565,21 @@ "node": ">=0.10.0" } }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-readable-stream": { "version": "1.0.0", "dev": true, @@ -24895,6 +27134,32 @@ "yarn": "*" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "dev": true, @@ -25003,6 +27268,30 @@ "devOptional": true, "license": "MIT" }, + "node_modules/v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "dev": true, @@ -25062,6 +27351,15 @@ "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", "dev": true }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -25993,12 +28291,10 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@biconomy-sdk/core-types": "*", "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0" }, "devDependencies": { - "@biconomy-sdk/core-types": "*", "@nomiclabs/hardhat-ethers": "^2.0.5", "@nomiclabs/hardhat-waffle": "^2.0.3", "@typechain/ethers-v5": "^9.0.0", @@ -26029,12 +28325,11 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@biconomy-sdk/core-types": "*", "@ethersproject/abstract-signer": "^5.6.0", + "@gnosis.pm/safe-core-sdk": "^2.1.0", "node-fetch": "^2.6.6" }, "devDependencies": { - "@biconomy-sdk/core-types": "*", "@gnosis.pm/safe-ethers-lib": "^1.1.0", "@gnosis.pm/safe-web3-lib": "^1.1.0", "@nomiclabs/hardhat-ethers": "^2.0.5", @@ -26071,24 +28366,27 @@ "packages/relayer": { "name": "@biconomy-sdk/relayer", "version": "1.0.0", - "license": "MIT" + "license": "MIT", + "dependencies": { + "@biconomy-sdk/core-types": "*" + }, + "devDependencies": { + "@biconomy-sdk/core-types": "*" + } }, "packages/smart-account": { "name": "@biconomy-sdk/smart-account", "version": "1.0.0", "license": "MIT", "dependencies": { - "@biconomy-sdk/core-types": "*", - "@biconomy-sdk/ethers-lib": "*", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", "@gnosis.pm/safe-deployments": "^1.12.0", + "@types/mocha": "^9.1.1", "web3-core": "^1.7.1" }, "devDependencies": { - "@biconomy-sdk/core-types": "*", - "@biconomy-sdk/ethers-lib": "*", "@types/node": "^17.0.23", "@typescript-eslint/eslint-plugin": "^5.17.0", "@typescript-eslint/parser": "^5.17.0", @@ -26096,6 +28394,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", "ethers": "^5.5.3", + "jest-cli": "^28.1.3", "prettier": "^2.6.2", "typescript": "^4.6.3" } @@ -26104,9 +28403,24 @@ "version": "17.0.45", "dev": true, "license": "MIT" + }, + "packages/transactions": { + "name": "@biconomy-sdk/transactions", + "version": "1.0.0", + "license": "MIT" } }, "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", @@ -26116,12 +28430,196 @@ "@babel/highlight": "^7.18.6" } }, + "@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true + }, + "@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz", + "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true + }, "@babel/helper-validator-identifier": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", "dev": true }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, "@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", @@ -26185,6 +28683,183 @@ } } }, + "@babel/parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.10.tgz", + "integrity": "sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.10.tgz", + "integrity": "sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, "@biconomy-sdk/core-types": { "version": "file:packages/core-types", "requires": { @@ -26211,7 +28886,6 @@ "@biconomy-sdk/ethers-lib": { "version": "file:packages/ethers-lib", "requires": { - "@biconomy-sdk/core-types": "*", "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@nomiclabs/hardhat-ethers": "^2.0.5", "@nomiclabs/hardhat-waffle": "^2.0.3", @@ -26240,8 +28914,8 @@ "@biconomy-sdk/node-client": { "version": "file:packages/node-client", "requires": { - "@biconomy-sdk/core-types": "*", "@ethersproject/abstract-signer": "^5.6.0", + "@gnosis.pm/safe-core-sdk": "^2.1.0", "@gnosis.pm/safe-ethers-lib": "^1.1.0", "@gnosis.pm/safe-web3-lib": "^1.1.0", "@nomiclabs/hardhat-ethers": "^2.0.5", @@ -26278,17 +28952,19 @@ } }, "@biconomy-sdk/relayer": { - "version": "file:packages/relayer" + "version": "file:packages/relayer", + "requires": { + "@biconomy-sdk/core-types": "*" + } }, "@biconomy-sdk/smart-account": { "version": "file:packages/smart-account", "requires": { - "@biconomy-sdk/core-types": "*", - "@biconomy-sdk/ethers-lib": "*", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", "@gnosis.pm/safe-deployments": "^1.12.0", + "@types/mocha": "^9.1.1", "@types/node": "^17.0.23", "@typescript-eslint/eslint-plugin": "^5.17.0", "@typescript-eslint/parser": "^5.17.0", @@ -26296,6 +28972,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", "ethers": "^5.5.3", + "jest-cli": "^28.1.3", "prettier": "^2.6.2", "typescript": "^4.6.3", "web3-core": "^1.7.1" @@ -26307,6 +28984,9 @@ } } }, + "@biconomy-sdk/transactions": { + "version": "file:packages/transactions" + }, "@cspotcode/source-map-support": { "version": "0.8.1", "devOptional": true, @@ -27138,7 +29818,6 @@ }, "@ethersproject/solidity": { "version": "5.6.1", - "dev": true, "requires": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", @@ -27227,12 +29906,27 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "@gnosis.pm/safe-core-sdk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.3.2.tgz", + "integrity": "sha512-XD50+AU7ahHwX0+YG8jeyqxrqNsEdLfCzAS5+9WkGuXMNm+K4jkJ9yBHN5yKAu5JXeCDYEQkjTSdVilm8ZLpXQ==", + "requires": { + "@ethersproject/solidity": "^5.6.0", + "@gnosis.pm/safe-core-sdk-types": "^1.3.0", + "@gnosis.pm/safe-deployments": "1.15.0", + "ethereumjs-util": "^7.1.4", + "semver": "^7.3.5", + "web3-utils": "^1.7.1" + } + }, "@gnosis.pm/safe-core-sdk-types": { - "version": "1.1.0", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.4.0.tgz", + "integrity": "sha512-v+V6wqfFVgBl2sZ8FqCMwL/qFnr6wBCcJ/gllo4OvItYw/dmXlMCkxUrERoILSeHDezLkrWnnzA4tHfkEwYuwg==", "requires": { "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "^1.12.0", + "@gnosis.pm/safe-deployments": "1.15.0", "web3-core": "^1.7.1" } }, @@ -27290,10 +29984,341 @@ "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", "dev": true }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", + "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/reporters": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.1.3", + "jest-config": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-resolve-dependencies": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "jest-watcher": "^28.1.3", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + } + } + }, + "@jest/environment": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", + "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3" + } + }, + "@jest/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "dev": true, + "requires": { + "expect": "^28.1.3", + "jest-snapshot": "^28.1.3" + } + }, + "@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2" + } + }, + "@jest/fake-timers": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", + "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "@jest/globals": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", + "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/types": "^28.1.3" + } + }, + "@jest/reporters": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", + "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, + "@jest/source-map": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.13", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", + "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "dev": true, + "requires": { + "@jest/test-result": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + } + } + }, + "@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@jridgewell/resolve-uri": { "version": "3.0.8", "devOptional": true }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, "@jridgewell/sourcemap-codec": { "version": "1.4.14", "devOptional": true @@ -28516,21 +31541,21 @@ } }, "@nrwl/cli": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.4.2.tgz", - "integrity": "sha512-JNV4kP9goZD4BlTQGKdKhCRc1bhiWYp1TaDJHdk4ZfhiLt1NzXNxxgc/eX2obFZ3Hw+KdM/gM5F7KfWBbtSGSw==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.2.tgz", + "integrity": "sha512-uriSxM33IpiBpW9kHEW3gw5OjPaQe3jHdWUMOT88TrqTlf449qe01Sys8+H2YgJMIcLTFYX0fP4V1K9jqKKZCg==", "dev": true, "requires": { - "nx": "14.4.2" + "nx": "14.5.2" } }, "@nrwl/tao": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.4.2.tgz", - "integrity": "sha512-Ygw3skKZfFhi4MBHZKQ8A67pDQxeyDdY78tFWViMN0SEn9ExL41Q8V9aSMfir8VZYGca6ZOXX5MRhbeHdcgMLQ==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.2.tgz", + "integrity": "sha512-SEx3SM7xQiB8mOQ/gCt7lFJKRrkq3rBX6FiV3bl+dQtuKK2zKQbyikY9r+MCZCQNqZAud3HJ2xCyKZBhK8htQg==", "dev": true, "requires": { - "nx": "14.4.2" + "nx": "14.5.2" } }, "@octokit/auth-token": { @@ -28931,11 +31956,35 @@ } } }, + "@sinclair/typebox": { + "version": "0.24.26", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.26.tgz", + "integrity": "sha512-1ZVIyyS1NXDRVT8GjWD5jULjhDyM3IsIHef2VGUMdnWOlX2tkPjyEX/7K0TGSH2S8EaPhp1ylFdjSjUGQ+gecg==", + "dev": true + }, "@sindresorhus/is": { "version": "0.14.0", "dev": true, "peer": true }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, "@solidity-parser/parser": { "version": "0.14.2", "requires": { @@ -28983,6 +32032,47 @@ "@types/abstract-leveldown": { "version": "7.2.0" }, + "@types/babel__core": { + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, "@types/bignumber.js": { "version": "5.0.0", "dev": true, @@ -29007,6 +32097,39 @@ "@types/chai": "*" } }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, "@types/json-schema": { "version": "7.0.11", "dev": true @@ -29051,8 +32174,7 @@ } }, "@types/mocha": { - "version": "9.1.1", - "dev": true + "version": "9.1.1" }, "@types/node": { "version": "18.0.1" @@ -29119,6 +32241,12 @@ "version": "8.1.2", "dev": true }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, "@types/underscore": { "version": "1.11.4", "dev": true @@ -29131,6 +32259,21 @@ "@types/underscore": "*" } }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, "@typescript-eslint/eslint-plugin": { "version": "5.30.6", "dev": true, @@ -29481,6 +32624,76 @@ "dev": true, "peer": true }, + "babel-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", + "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "dev": true, + "requires": { + "@jest/transform": "^28.1.3", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.1.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", + "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", + "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^28.1.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, "balanced-match": { "version": "1.0.2" }, @@ -29717,6 +32930,18 @@ "safe-buffer": "^5.2.0" } }, + "browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, "bs58": { "version": "4.0.1", "requires": { @@ -29731,6 +32956,15 @@ "safe-buffer": "^5.1.2" } }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, "buffer": { "version": "5.7.1", "requires": { @@ -29906,6 +33140,12 @@ "quick-lru": "^4.0.1" } }, + "caniuse-lite": { + "version": "1.0.30001373", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", + "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", + "dev": true + }, "caseless": { "version": "0.12.0", "dev": true, @@ -29938,6 +33178,12 @@ "supports-color": "^7.1.0" } }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -30000,6 +33246,12 @@ "safe-buffer": "^5.0.1" } }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, "class-is": { "version": "1.1.0", "dev": true, @@ -30108,11 +33360,23 @@ "mkdirp-infer-owner": "^2.0.0" } }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, "code-point-at": { "version": "1.1.0", "dev": true, "peer": true }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, "color-convert": { "version": "2.0.1", "requires": { @@ -30407,6 +33671,23 @@ "q": "^1.5.1" } }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, "cookie": { "version": "0.4.2" }, @@ -30615,6 +33896,12 @@ "version": "0.1.4", "dev": true }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, "defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", @@ -30711,6 +33998,12 @@ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, "dezalgo": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", @@ -30724,6 +34017,12 @@ "diff": { "version": "5.0.0" }, + "diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true + }, "diffie-hellman": { "version": "5.0.3", "dev": true, @@ -30804,6 +34103,12 @@ "dev": true, "peer": true }, + "electron-to-chromium": { + "version": "1.4.210", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.210.tgz", + "integrity": "sha512-kSiX4tuyZijV7Cz0MWVmGT8K2siqaOA4Z66K5dCttPPRh0HicOcOAEj1KlC8O8J1aOS/1M8rGofOzksLKaHWcQ==", + "dev": true + }, "elliptic": { "version": "6.5.4", "requires": { @@ -30821,6 +34126,12 @@ } } }, + "emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true + }, "emoji-regex": { "version": "8.0.0" }, @@ -31075,6 +34386,12 @@ "eslint-visitor-keys": "^3.3.0" } }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, "esquery": { "version": "1.4.0", "dev": true, @@ -31329,6 +34646,25 @@ "strip-final-newline": "^2.0.0" } }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dev": true, + "requires": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + } + }, "express": { "version": "4.18.1", "dev": true, @@ -31488,6 +34824,15 @@ "reusify": "^1.0.4" } }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -33191,11 +36536,6 @@ "get-intrinsic": "^1.0.2" } }, - "caniuse-lite": { - "version": "1.0.30001174", - "dev": true, - "peer": true - }, "caseless": { "version": "0.12.0", "dev": true, @@ -33446,21 +36786,6 @@ "optional": true, "peer": true }, - "convert-source-map": { - "version": "1.7.0", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - } - } - }, "cookie": { "version": "0.4.0", "dev": true, @@ -33745,11 +37070,6 @@ "optional": true, "peer": true }, - "electron-to-chromium": { - "version": "1.3.636", - "dev": true, - "peer": true - }, "elliptic": { "version": "6.5.3", "dev": true, @@ -39589,6 +42909,12 @@ "wide-align": "^1.1.5" } }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, "get-caller-file": { "version": "2.0.5" }, @@ -39604,6 +42930,12 @@ "has-symbols": "^1.0.3" } }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, "get-pkg-repo": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", @@ -40127,6 +43459,12 @@ "lru-cache": "^6.0.0" } }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "http-cache-semantics": { "version": "4.1.0", "dev": true @@ -40439,6 +43777,12 @@ "dev": true, "peer": true }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, "is-generator-function": { "version": "1.0.10", "requires": { @@ -40604,6 +43948,65 @@ "dev": true, "peer": true }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, "isurl": { "version": "1.0.0", "dev": true, @@ -40613,6 +44016,502 @@ "is-object": "^1.0.1" } }, + "jest-changed-files": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", + "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } + } + }, + "jest-circus": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", + "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "p-limit": "^3.1.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } + } + }, + "jest-cli": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", + "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "dev": true, + "requires": { + "@jest/core": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "dependencies": { + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true + } + } + }, + "jest-config": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", + "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.3", + "@jest/types": "^28.1.3", + "babel-jest": "^28.1.3", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.3", + "jest-environment-node": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + } + } + }, + "jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-docblock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", + "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.3", + "pretty-format": "^28.1.3" + } + }, + "jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", + "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", + "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + }, + "jest-resolve": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", + "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", + "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "dev": true, + "requires": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.3" + } + }, + "jest-runner": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", + "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", + "dev": true, + "requires": { + "@jest/console": "^28.1.3", + "@jest/environment": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-leak-detector": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-resolve": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-util": "^28.1.3", + "jest-watcher": "^28.1.3", + "jest-worker": "^28.1.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "jest-runtime": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", + "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/globals": "^28.1.3", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", + "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "natural-compare": "^1.4.0", + "pretty-format": "^28.1.3", + "semver": "^7.3.5" + } + }, + "jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + } + } + }, + "jest-validate": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", + "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.3" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dev": true, + "requires": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "js-sha3": { "version": "0.8.0" }, @@ -40633,6 +44532,12 @@ "dev": true, "peer": true }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, "json-buffer": { "version": "3.0.0", "dev": true, @@ -40778,6 +44683,12 @@ "graceful-fs": "^4.1.11" } }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, "lcid": { "version": "1.0.0", "dev": true, @@ -40873,6 +44784,12 @@ "xtend": "~4.0.0" } }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, "levn": { "version": "0.4.1", "dev": true, @@ -41215,6 +45132,15 @@ } } }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, "map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -41841,6 +45767,18 @@ "node-gyp-build": { "version": "4.4.0" }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, "nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -42137,13 +46075,13 @@ } }, "nx": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.4.2.tgz", - "integrity": "sha512-bYO//HuwQL4X8y+2BjUPtkPLDiYI1zMejQo6+uJl3+VdYPcsjwW/ca581tBPHiPH95XnHiBartnMrMJtn11grw==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-14.5.2.tgz", + "integrity": "sha512-I6KWVMR5Ksj/HgderkcmJmyaqHdWblQeFUeVq9to263Wr3QCIRigbvdDI3rq3ZQCBMyhUSOVP9MFXROoRVtJXQ==", "dev": true, "requires": { - "@nrwl/cli": "14.4.2", - "@nrwl/tao": "14.4.2", + "@nrwl/cli": "14.5.2", + "@nrwl/tao": "14.5.2", "@parcel/watcher": "2.0.4", "chalk": "4.1.0", "chokidar": "^3.5.1", @@ -42969,6 +46907,12 @@ "dev": true, "peer": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.1" }, @@ -42995,6 +46939,12 @@ "pinkie": "^2.0.0" } }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -43029,6 +46979,26 @@ "fast-diff": "^1.1.2" } }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, "proc-log": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", @@ -43074,6 +47044,16 @@ "retry": "^0.12.0" } }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, "promzard": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", @@ -43209,6 +47189,12 @@ } } }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -43523,6 +47509,12 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true + }, "responselike": { "version": "1.0.2", "dev": true, @@ -43779,6 +47771,12 @@ "simple-concat": "^1.0.0" } }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "slash": { "version": "3.0.0" }, @@ -43943,6 +47941,12 @@ "readable-stream": "^3.0.0" } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, "sshpk": { "version": "1.17.0", "dev": true, @@ -43975,6 +47979,23 @@ "minipass": "^3.1.1" } }, + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "stacktrace-parser": { "version": "0.1.10", "requires": { @@ -44003,6 +48024,16 @@ "version": "2.0.0", "dev": true }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, "string-width": { "version": "4.2.3", "requires": { @@ -44078,6 +48109,16 @@ "has-flag": "^4.0.0" } }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "dev": true @@ -44292,6 +48333,27 @@ "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, "test-value": { "version": "2.1.0", "dev": true, @@ -44349,6 +48411,18 @@ "dev": true, "peer": true }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, "to-readable-stream": { "version": "1.0.0", "dev": true, @@ -44725,6 +48799,16 @@ "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true }, + "update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", "dev": true, @@ -44805,6 +48889,29 @@ "version": "3.0.1", "devOptional": true }, + "v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, "validate-npm-package-license": { "version": "3.0.4", "dev": true, @@ -44855,6 +48962,15 @@ "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", "dev": true }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 963d8aa82..8ce2db9b2 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -171,3 +171,7 @@ export interface UserOperation { paymasterData: string signature: string } + +export interface RestRelayerOptions { + url: string +} diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index 2a28b31c8..a10ade1aa 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -11,4 +11,5 @@ export interface Relayer { // wait(metaTxnId: string | SignedTransactions, timeout: number): Promise } - export * from './local-relayer' \ No newline at end of file + export * from './local-relayer' + export * from './rest-relayer' \ No newline at end of file diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts new file mode 100644 index 000000000..2a15ea984 --- /dev/null +++ b/packages/relayer/src/rest-relayer.ts @@ -0,0 +1,148 @@ +import { TransactionRequest, TransactionResponse } from '@ethersproject/providers' +import { Signer as AbstractSigner, ethers } from 'ethers' +import { Relayer } from '.'; + +import { + SmartWalletFactoryContract, + SmartWalletContract, + MultiSendContract, + MultiSendCallOnlyContract, + TransactionResult, + SmartAccountContext, + SmartAccountState, + SignedTransaction, + WalletTransaction, + RawTransactionType, + RestRelayerOptions +} from '@biconomy-sdk/core-types' +import { MetaTransaction, encodeMultiSend } from './utils/multisend'; +import { HttpMethod, sendRequest } from './utils/httpRequests'; + +/** + * Relayer class that would be used via REST API to execute transactions + */ +export class RestRelayer implements Relayer { + #relayServiceBaseUrl: string + + constructor(options: RestRelayerOptions) { + const { url } = options; + this.#relayServiceBaseUrl = url; + } + + // TODO + // Review function arguments and return values + // Could get smartAccount instance + // Defines a type that takes config, context for SCW in play along with other details + async deployWallet(config: SmartAccountState, context: SmartAccountContext, index:number = 0): Promise { + // Should check if already deployed + //Review for index and ownership transfer case + const {address} = config; + const {walletFactory} = context; + const isExist = await walletFactory.isWalletExist(address); + if(isExist) { + throw new Error("Smart Account is Already Deployed") + } + const walletDeployTxn = this.prepareWalletDeploy(config, context, index); + // REST API call to relayer + return sendRequest({ + url: `${this.#relayServiceBaseUrl}`, + method: HttpMethod.Post, + body: { ...walletDeployTxn, gasLimit: ethers.constants.Two.pow(24) } + }) + } + + prepareWalletDeploy( // owner, entryPoint, handler, index + config:SmartAccountState, + context: SmartAccountContext, + index: number = 0, + // context: WalletContext + ): { to: string, data: string} { + const {walletFactory} = context; + const {owner, entryPointAddress, fallbackHandlerAddress} = config; + const factoryInterface = walletFactory.getInterface(); + + return { + to: walletFactory.getAddress(), // from context + data: factoryInterface.encodeFunctionData(factoryInterface.getFunction('deployCounterFactualWallet'), + [owner, entryPointAddress, fallbackHandlerAddress, index] + ) + } + } + + /*async isWalletDeployed(walletAddress: string): Promise { + // Check if wallet is deployed + return true; + }*/ + + /*async getFeeOptions( + ): Promise<{ options: FeeOption[] }> { + return { options: [] } + }*/ + + /*async gasRefundOptions( + ): Promise { + const { options } = //await this.getFeeOptions() + return options + }*/ + + // Should make an object that takes config and context + // Add feeQuote later + // Appending tx and rawTx may not be necessary + + async relay(signedTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext) : Promise { + + const { isDeployed, address } = config; + const { multiSendCall } = context; // multisend has to be multiSendCallOnly here! + if(!isDeployed) { + // If not =>> preprendWalletDeploy + console.log('here'); + const {to, data} = this.prepareWalletDeploy(config,context); + const originalTx:WalletTransaction = signedTx.tx; + + const txs: MetaTransaction[] = [ + { + to, + value: 0, + data, + operation: 0 + }, + { + to: address, + value: 0, + data: signedTx.rawTx.data || '', + operation: 0 + } + ] + + const txnData = multiSendCall.getInterface().encodeFunctionData("multiSend", [ + encodeMultiSend(txs), + ]); + console + + const finalRawRx = { + to: multiSendCall.getAddress(), + data: txnData, + chainId: signedTx.rawTx.chainId, + value: 0 + } + console.log('finaRawTx'); + console.log(finalRawRx); + + // API call + // rawTx to becomes multiSend address and data gets prepared again + return sendRequest({ + url: `${this.#relayServiceBaseUrl}`, + method: HttpMethod.Post, + body: { ...finalRawRx, gasLimit: ethers.constants.Two.pow(24) } + }) + } + console.log('signedTx', signedTx); + console.log('gasLimit', ethers.constants.Two.pow(24)); + // API call + return sendRequest({ + url: `${this.#relayServiceBaseUrl}`, + method: HttpMethod.Post, + body: { ...signedTx.rawTx, gasLimit: ethers.constants.Two.pow(24) } + }) + } + } \ No newline at end of file diff --git a/packages/relayer/src/utils/httpRequests.ts b/packages/relayer/src/utils/httpRequests.ts new file mode 100644 index 000000000..e6aee087a --- /dev/null +++ b/packages/relayer/src/utils/httpRequests.ts @@ -0,0 +1,53 @@ +import fetch from 'node-fetch' + +export enum HttpMethod { + Get = 'get', + Post = 'post', + Delete = 'delete' +} + +interface HttpRequest { + url: string + method: HttpMethod + body?: Object +} + +export async function sendRequest({ url, method, body }: HttpRequest): Promise { + const response = await fetch(url, { + method, + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(body) + }) + + let jsonResponse + try { + jsonResponse = await response.json() + } catch (error) { + if (!response.ok) { + throw new Error(response.statusText) + } + } + + if (response.ok) { + return jsonResponse as T + } + if (jsonResponse.data) { + throw new Error(jsonResponse.data) + } + if (jsonResponse.detail) { + throw new Error(jsonResponse.detail) + } + if (jsonResponse.message) { + throw new Error(jsonResponse.message) + } + if (jsonResponse.nonFieldErrors) { + throw new Error(jsonResponse.nonFieldErrors) + } + if (jsonResponse.delegate) { + throw new Error(jsonResponse.delegate) + } + throw new Error(response.statusText) +} diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 7a182efb5..8a6fb5939 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -138,7 +138,6 @@ class SmartAccount { chainId, this.ethAdapter[chainId] ); - // Should attach the address here this.smartWalletContract[chainId] = getSmartWalletContract( chainId, From 49e5b6bdeb4a3f3e3e5222395ca15fb1492b2750 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 16 Aug 2022 18:36:01 +0530 Subject: [PATCH 0067/1247] clear script --- link.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/link.sh b/link.sh index 779cb6bcf..19cb53d25 100755 --- a/link.sh +++ b/link.sh @@ -1,4 +1,11 @@ #!/bin/sh -npm run unbuild -npm run build -npm link \ No newline at end of file +# npm run unbuild +# npm run build +# npm link +rm -rf node_modules +rm -rf packages/core-types/node_modules +rm -rf packages/ethers-lib/node_modules +rm -rf packages/node_client/node_modules +rm -rf packages/relayer/node_modules +rm -rf packages/smart-account/node_modules +rm -rf packages/transactions/node_modules \ No newline at end of file From 522d1fe7c85bace7047d51a42024bdd9df3f201e Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 16 Aug 2022 23:32:42 +0530 Subject: [PATCH 0068/1247] reworking test cases for versioning --- package.json | 2 +- packages/smart-account/src/SmartAccount.ts | 83 +-- .../smart-account/tests/smartaccount.spec.ts | 540 +++++++++++++----- packages/smart-account/tests/utils/deploy.ts | 8 +- 4 files changed, 447 insertions(+), 186 deletions(-) diff --git a/package.json b/package.json index 6185146a1..69aec382c 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "devDependencies": { "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.5.4", + "nx": "^14.5.6", "prettier": "2.7.1", "ts-node": "^10.8.2" } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 57b3cac37..8d9183359 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -161,7 +161,7 @@ class SmartAccount { this.owner = await this.ethersAdapter().getSignerAddress() // @review // Smart Account addresses gets set by querying active chain's wallet factory (along with owner and index = 0) - this.address = await this.getAddress(this.DEFAULT_VERSION) + this.address = await this.getAddress() return this } @@ -175,26 +175,35 @@ class SmartAccount { const multiSend = currentChainInfo.multiSend const multiSendCall = currentChainInfo.multiSendCall + console.log(this.smartWalletFactoryContract[chainId]) + console.log("===>>>>>>>>"); + for (let index = 0; index < smartWallet.length; index++) { + console.log("===>>>"); const version = smartWallet[index].version + console.log(version); + this.smartWalletFactoryContract[chainId] = {} this.smartWalletFactoryContract[chainId][`${version}`] = getSmartWalletFactoryContract( version, this.ethAdapter[chainId], smartWalletFactoryAddress[index].address ) // NOTE/TODO : attached address is not wallet address yet + this.smartWalletContract[chainId] = {} this.smartWalletContract[chainId][`${version}`] = getSmartWalletContract( version, this.ethAdapter[chainId], smartWallet[index].address ) + this.multiSendContract[chainId] = {} this.multiSendContract[chainId][`${version}`] = getMultiSendContract( version, this.ethAdapter[chainId], multiSend[index].address ) + this.multiSendCallOnlyContract[chainId] = {} this.multiSendCallOnlyContract[chainId][`${version}`] = getMultiSendCallOnlyContract( version, this.ethAdapter[chainId], @@ -271,11 +280,11 @@ class SmartAccount { * @returns:string Signature */ async signTransaction( - smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, tx: WalletTransaction, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { - let walletContract = this.smartAccount(smartAccountVersion, chainId).getContract() + let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) // TODO - rename and organize utils @@ -294,7 +303,7 @@ class SmartAccount { * @returns */ async sendTransaction( - smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, tx: WalletTransaction, batchId: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId @@ -321,10 +330,10 @@ class SmartAccount { refundReceiver: tx.refundReceiver } - let walletContract = this.smartAccount(smartAccountVersion, chainId).getContract() + let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) - let signature = await this.signTransaction(smartAccountVersion, tx) + let signature = await this.signTransaction(tx) let execTransaction = await walletContract.populateTransaction.execTransaction( transaction, @@ -336,14 +345,14 @@ class SmartAccount { rawTx.to = this.address rawTx.data = execTransaction.data - const state = await this.getSmartAccountState(smartAccountVersion, chainId) + const state = await this.getSmartAccountState(chainId) const signedTx = { rawTx, tx } - const txn = await this.relayer.relay(signedTx, state, this.getSmartAccountContext(smartAccountVersion, chainId)) + const txn = await this.relayer.relay(signedTx, state, this.getSmartAccountContext(chainId)) return txn } @@ -357,17 +366,17 @@ class SmartAccount { * @returns */ async createSmartAccountTransaction( - smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, transaction: Transaction, batchId: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { - let walletContract = this.smartAccount(smartAccountVersion, chainId).getContract() + let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) // NOTE : If the wallet is not deployed yet then nonce would be zero let nonce = 0 - if (await this.isDeployed(smartAccountVersion, chainId)) { + if (await this.isDeployed(chainId)) { nonce = (await walletContract.getNonce(batchId)).toNumber() } console.log('nonce: ', nonce) @@ -392,17 +401,17 @@ class SmartAccount { * @returns */ async createSmartAccountTransactionBatch( - smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, transactions: Transaction[], batchId: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { - let walletContract = this.smartAccount(smartAccountVersion, chainId).getContract() + let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) // NOTE : If the wallet is not deployed yet then nonce would be zero let nonce = 0 - if (await this.isDeployed(smartAccountVersion, chainId)) { + if (await this.isDeployed(chainId)) { nonce = (await walletContract.getNonce(batchId)).toNumber() } console.log('nonce: ', nonce) @@ -421,7 +430,7 @@ class SmartAccount { } const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( - this.multiSend(smartAccountVersion, chainId).getContract(), + this.multiSend(chainId).getContract(), txs, nonce ) @@ -435,10 +444,10 @@ class SmartAccount { * @returns Smart Wallet Contract instance attached with current smart account address (proxy) */ smartAccount( - smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): SmartWalletContract { - const smartWallet = this.smartWalletContract[chainId][smartAccountVersion] + const smartWallet = this.smartWalletContract[chainId][this.DEFAULT_VERSION] // Review @talha const address = this.address smartWallet.getContract().attach(address) @@ -451,10 +460,10 @@ class SmartAccount { * @returns Smart Wallet Factory instance for requested chainId */ factory( - smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): SmartWalletFactoryContract { - return this.smartWalletFactoryContract[chainId][smartAccountVersion] + return this.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION] } /** @@ -463,10 +472,10 @@ class SmartAccount { * @returns MultiSend contract instance for requested chainId */ multiSend( - smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): MultiSendContract { - return this.multiSendContract[chainId][smartAccountVersion] + return this.multiSendContract[chainId][this.DEFAULT_VERSION] } /** @@ -477,10 +486,10 @@ class SmartAccount { * @returns MultiSend Call Only contract instance for requested chainId */ multiSendCall( - smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): MultiSendCallOnlyContract { - return this.multiSendCallOnlyContract[chainId][smartAccountVersion] + return this.multiSendCallOnlyContract[chainId][this.DEFAULT_VERSION] } /** @@ -493,12 +502,12 @@ class SmartAccount { */ async getAddress( - smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { // we will hit smart account endpoint to fetch deployed smart account info - const address = await this.getAddressForCounterfactualWallet(smartAccountVersion, index, chainId) + const address = await this.getAddressForCounterfactualWallet(index, chainId) this.address = address return address // return await this.getAddressForCounterfactualWallet(index,chainId); @@ -511,14 +520,14 @@ class SmartAccount { * @param chainId optional chainId : Default is current active * @returns */ - async isDeployed(smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + async isDeployed(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { // Other approach : needs review and might be coming wrong // const readProvider = new ethers.providers.JsonRpcProvider(networks[chainId].providerUrl); // const walletCode = await readProvider.getCode(await this.getAddress(chainId)); // return !!walletCode && walletCode !== '0x' // but below works - return await this.factory(smartAccountVersion, chainId).isWalletExist(this.address) + return await this.factory(chainId).isWalletExist(this.address) } /** @@ -527,11 +536,11 @@ class SmartAccount { * @returns object containing infromation (owner, relevant contract addresses, isDeployed) about Smart Account for requested chain */ async getSmartAccountState( - smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { const contractsByVersion = findContractAddressesByVersion( - smartAccountVersion, + this.DEFAULT_VERSION, chainId, this.chainConfig ) @@ -539,7 +548,7 @@ class SmartAccount { const state: SmartAccountState = { address: this.address, owner: this.owner, - isDeployed: await this.isDeployed(smartAccountVersion, chainId), // could be set as state in init + isDeployed: await this.isDeployed(chainId), // could be set as state in init entryPointAddress: contractsByVersion.entryPointAddress || '', fallbackHandlerAddress: contractsByVersion.fallBackHandlerAddress || '' } @@ -554,14 +563,14 @@ class SmartAccount { * @returns object containing relevant contract instances */ getSmartAccountContext( - smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): SmartAccountContext { const context: SmartAccountContext = { - baseWallet: this.smartAccount(smartAccountVersion, chainId), //might as well do getContract and attach and return contract - walletFactory: this.factory(smartAccountVersion, chainId), - multiSend: this.multiSend(smartAccountVersion, chainId), - multiSendCall: this.multiSendCall(smartAccountVersion, chainId) + baseWallet: this.smartAccount(chainId), //might as well do getContract and attach and return contract + walletFactory: this.factory(chainId), + multiSend: this.multiSend(chainId), + multiSendCall: this.multiSendCall(chainId) // Could be added dex router for chain in the future } return context @@ -585,12 +594,12 @@ class SmartAccount { * @returns */ private async getAddressForCounterfactualWallet( - smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { return await this.smartWalletFactoryContract[chainId][ - smartAccountVersion + this.DEFAULT_VERSION ].getAddressForCounterfactualWallet(this.owner, index) } } diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index b79d2f566..e6cb22e75 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -75,34 +75,70 @@ describe('Wallet integration', function () { "code": 200, "data": [ { - "chainId": 5, - "name": "Goerli", + "chainId": 1, + "name": "Ethereum", "symbol": "ETH", "isL2": false, - "isMainnet": false, + "isMainnet": true, "description": "", "blockExplorerUriTemplate": { - "address": "https://goerli.etherscan.io/address/", - "txHash": "https://goerli.etherscan.io/address/", - "api": "https://goerli.etherscan.io/" + "address": "https://etherscan.io/address/", + "txHash": "https://etherscan.io/address/", + "api": "https://api.etherscan.io/" }, - "ensRegistryAddress": "", - "walletFactoryAddress": "0x050bca32264195976Fe00BcA566B548413A9E658", - "multiSendAddress": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "multiSendCallAddress": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": true, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": true, - "walletAddress": "0x056DcE811A2b695171274855E7246039Df298158", - "entryPoint": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "fallBackHandler": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "ensRegistryAddress": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", + "walletFactory": [ + { + "version": "0.0.1", + "address": "0x050bca32264195976Fe00BcA566B548413A9E658", + "abi": "" + } + ], + "multiSend": [ + { + "version": "0.0.1", + "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "0.0.1", + "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "0.0.1", + "address": "0x056DcE811A2b695171274855E7246039Df298158", + "abi": "" + } + ], + "entryPoint": [ + { + "version": "0.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "0.0.1", + "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "abi": "" + } + ], "relayerUrl": "", - "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", + "providerUrl": "https://kovan.infura.io/v3/d126f392798444609246423b06116c77", "indexerUrl": "", "backendNodeUrl": "", "token": { - "chainId": 5, + "chainId": 1, "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "name": "Ether", "symbol": "ETH", @@ -112,35 +148,71 @@ describe('Wallet integration', function () { } }, { - "chainId": 80001, - "name": "Polygon Mumbai", + "chainId": 137, + "name": "Polygon", "symbol": "MATIC", "isL2": true, - "isMainnet": false, + "isMainnet": true, "description": "", "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" + "address": "https://polygonscan.com/address/", + "txHash": "https://polygonscan.com/address/", + "api": "https://api.polygonscan.com/" }, "ensRegistryAddress": "", - "walletFactoryAddress": "0x050bca32264195976Fe00BcA566B548413A9E658", - "multiSendAddress": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "multiSendCallAddress": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": true, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": true, - "walletAddress": "0x056DcE811A2b695171274855E7246039Df298158", - "entryPoint": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "fallBackHandler": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "walletFactory": [ + { + "version": "0.0.1", + "address": "0x050bca32264195976Fe00BcA566B548413A9E658", + "abi": "" + } + ], + "multiSend": [ + { + "version": "0.0.1", + "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "0.0.1", + "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "0.0.1", + "address": "0x056DcE811A2b695171274855E7246039Df298158", + "abi": "" + } + ], + "entryPoint": [ + { + "version": "0.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "0.0.1", + "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "abi": "" + } + ], "relayerUrl": "", - "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", + "providerUrl": "https://polygon-mainnet.g.alchemy.com/v2/s6bOKN9QDGXpVbsqzJMl_AHeZHNOCTcM", "indexerUrl": "", "backendNodeUrl": "", "token": { - "chainId": 80001, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "chainId": 137, + "address": "0x0000000000000000000000000000000000001010", "name": "Polygon Matic", "symbol": "Matic", "decimals": 18, @@ -149,90 +221,143 @@ describe('Wallet integration', function () { } }, { - "chainId": 97, - "name": "BSC Testnet", + "chainId": 56, + "name": "BSC Mainnet", "symbol": "BNB", "isL2": true, - "isMainnet": false, + "isMainnet": true, "description": "", "blockExplorerUriTemplate": { - "address": "https://bscscan.com//address/", + "address": "https://bscscan.com/address/", "txHash": "https://bscscan.com/address/", "api": "https://bscscan.com/" }, "ensRegistryAddress": "", - "walletFactoryAddress": "0x050bca32264195976Fe00BcA566B548413A9E658", - "multiSendAddress": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "multiSendCallAddress": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": true, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": true, - "walletAddress": "0x056DcE811A2b695171274855E7246039Df298158", - "entryPoint": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "fallBackHandler": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "walletFactory": [ + { + "version": "0.0.1", + "address": "0x050bca32264195976Fe00BcA566B548413A9E658", + "abi": "" + } + ], + "multiSend": [ + { + "version": "0.0.1", + "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "0.0.1", + "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "0.0.1", + "address": "0x056DcE811A2b695171274855E7246039Df298158", + "abi": "" + } + ], + "entryPoint": [ + { + "version": "0.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "0.0.1", + "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "abi": "" + } + ], "relayerUrl": "", - "providerUrl": "https://data-seed-prebsc-1-s1.binance.org:8545/", + "providerUrl": "https://bsc-dataseed2.binance.org/", "indexerUrl": "", - "backendNodeUrl": "" + "backendNodeUrl": "", + "token": { + "chainId": 56, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "name": "BNB Coin", + "symbol": "BNB", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png", + "isNative": true + } }, { - "chainId": 1337, - "name": "Ganache", + "chainId": 5, + "name": "Goerli", "symbol": "ETH", - "isL2": true, + "isL2": false, "isMainnet": false, "description": "", "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" + "address": "https://goerli.etherscan.io/address/", + "txHash": "https://goerli.etherscan.io/address/", + "api": "https://goerli.etherscan.io/" }, "ensRegistryAddress": "", - "walletFactoryAddress": walletFactory.address, - "multiSendAddress": multiSend.address, - "multiSendCallAddress": multiSendCallOnly.address, - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": true, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": true, - "walletAddress": smartWallet.address, - "entryPoint": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", - "fallBackHandler": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", - "relayerUrl": "", - "providerUrl": "http://localhost:8545", - "indexerUrl": "", - "backendNodeUrl": "" - }, - { - "chainId": 1, - "name": "Ethereum", - "symbol": "ETH", - "isL2": false, - "isMainnet": true, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://etherscan.io/address/", - "txHash": "https://etherscan.io/address/", - "api": "https://api.etherscan.io/" - }, - "ensRegistryAddress": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", - "walletFactoryAddress": "0x050bca32264195976Fe00BcA566B548413A9E658", - "multiSendAddress": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "multiSendCallAddress": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": true, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": true, - "walletAddress": "0x056DcE811A2b695171274855E7246039Df298158", - "entryPoint": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "fallBackHandler": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "walletFactory": [ + { + "version": "0.0.1", + "address": "0x050bca32264195976Fe00BcA566B548413A9E658", + "abi": "" + } + ], + "multiSend": [ + { + "version": "0.0.1", + "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "0.0.1", + "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "0.0.1", + "address": "0x056DcE811A2b695171274855E7246039Df298158", + "abi": "" + } + ], + "entryPoint": [ + { + "version": "0.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "0.0.1", + "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "abi": "" + } + ], "relayerUrl": "", - "providerUrl": "https://kovan.infura.io/v3/d126f392798444609246423b06116c77", + "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", "indexerUrl": "", "backendNodeUrl": "", "token": { - "chainId": 1, + "chainId": 5, "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "name": "Ether", "symbol": "ETH", @@ -242,35 +367,71 @@ describe('Wallet integration', function () { } }, { - "chainId": 137, - "name": "Polygon", + "chainId": 80001, + "name": "Polygon Mumbai", "symbol": "MATIC", "isL2": true, - "isMainnet": true, + "isMainnet": false, "description": "", "blockExplorerUriTemplate": { - "address": "https://polygonscan.com/address/", - "txHash": "https://polygonscan.com/address/", - "api": "https://api.polygonscan.com/" + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" }, "ensRegistryAddress": "", - "walletFactoryAddress": "0x050bca32264195976Fe00BcA566B548413A9E658", - "multiSendAddress": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "multiSendCallAddress": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": true, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": true, - "walletAddress": "0x056DcE811A2b695171274855E7246039Df298158", - "entryPoint": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "fallBackHandler": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "walletFactory": [ + { + "version": "0.0.1", + "address": "0x050bca32264195976Fe00BcA566B548413A9E658", + "abi": "" + } + ], + "multiSend": [ + { + "version": "0.0.1", + "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "0.0.1", + "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "0.0.1", + "address": "0x056DcE811A2b695171274855E7246039Df298158", + "abi": "" + } + ], + "entryPoint": [ + { + "version": "0.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "0.0.1", + "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "abi": "" + } + ], "relayerUrl": "", - "providerUrl": "https://polygon-mainnet.g.alchemy.com/v2/s6bOKN9QDGXpVbsqzJMl_AHeZHNOCTcM", + "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", "indexerUrl": "", "backendNodeUrl": "", "token": { - "chainId": 137, - "address": "0x0000000000000000000000000000000000001010", + "chainId": 80001, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "name": "Polygon Matic", "symbol": "Matic", "decimals": 18, @@ -279,41 +440,132 @@ describe('Wallet integration', function () { } }, { - "chainId": 56, - "name": "BSC Mainnet", + "chainId": 97, + "name": "BSC Testnet", "symbol": "BNB", "isL2": true, - "isMainnet": true, + "isMainnet": false, "description": "", "blockExplorerUriTemplate": { - "address": "https://bscscan.com/address/", + "address": "https://bscscan.com//address/", "txHash": "https://bscscan.com/address/", "api": "https://bscscan.com/" }, "ensRegistryAddress": "", - "walletFactoryAddress": "0x050bca32264195976Fe00BcA566B548413A9E658", - "multiSendAddress": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "multiSendCallAddress": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "walletCreatedCallBackEndpoint": "https://localhost:3000/smart-wallet/", - "walletCreatedEventHit": true, - "EoaChangedCallBackEndpoint": "https://localhost:3000/smart-wallet/owner", - "EoaChangedEventHit": true, - "walletAddress": "0x056DcE811A2b695171274855E7246039Df298158", - "entryPoint": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "fallBackHandler": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "walletFactory": [ + { + "version": "0.0.1", + "address": "0x050bca32264195976Fe00BcA566B548413A9E658", + "abi": "" + } + ], + "multiSend": [ + { + "version": "0.0.1", + "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "0.0.1", + "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "0.0.1", + "address": "0x056DcE811A2b695171274855E7246039Df298158", + "abi": "" + } + ], + "entryPoint": [ + { + "version": "0.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "0.0.1", + "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "abi": "" + } + ], "relayerUrl": "", - "providerUrl": "https://bsc-dataseed2.binance.org/", + "providerUrl": "https://data-seed-prebsc-1-s1.binance.org:8545/", "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 56, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "name": "BNB Coin", - "symbol": "BNB", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png", - "isNative": true - } + "backendNodeUrl": "" + }, + { + "chainId": 1337, + "name": "Ganache", + "symbol": "ETH", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" + }, + "ensRegistryAddress": "", + "walletFactory": [ + { + "version": "0.0.1", + "address": "0x85c0995669f8a0173a5B5F6003DA060E8D17f0c3", + "abi": "" + } + ], + "multiSend": [ + { + "version": "0.0.1", + "address": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "0.0.1", + "address": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "0.0.1", + "address": "0x0ba464506a3D66C962121e3C25ed56678A2585B6", + "abi": "" + } + ], + "entryPoint": [ + { + "version": "0.0.1", + "address": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "0.0.1", + "address": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "http://localhost:8545", + "indexerUrl": "", + "backendNodeUrl": "" } ] }) diff --git a/packages/smart-account/tests/utils/deploy.ts b/packages/smart-account/tests/utils/deploy.ts index 62ef87029..658371ad9 100644 --- a/packages/smart-account/tests/utils/deploy.ts +++ b/packages/smart-account/tests/utils/deploy.ts @@ -1,10 +1,10 @@ import { Contract, ethers } from 'ethers' // import { SmartWalletContract } from '@biconomy-sdk/core-types' -const SmartWalletArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/Smartwallet.sol/SmartWallet.json') -const WalletFactoryArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/WalletFactory.sol/WalletFactory.json') -const MultiSendArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/libs/MultiSend.sol/MultiSend.json') -const MultiSendCallOnlyArtifact = require('@biconomy-sdk/ethers-lib/artifacts/scw-contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol/MultiSendCallOnly.json') +const SmartWalletArtifact = require('@biconomy-sdk/ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletContract_v1_0_1.json') +const WalletFactoryArtifact = require('@biconomy-sdk/ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletFactoryContract_v1_0_1.json') +const MultiSendArtifact = require('@biconomy-sdk/ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendContract_v1_0_1.json') +const MultiSendCallOnlyArtifact = require('@biconomy-sdk/ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendCallOnlyContract_v1_0_1.json') export async function deployWalletContracts( signer: ethers.Signer From bd92afde8be99462b2abba67e5484492f1ab58ae Mon Sep 17 00:00:00 2001 From: talha Date: Wed, 17 Aug 2022 13:28:48 +0500 Subject: [PATCH 0069/1247] necessary updates --- lerna.json | 3 +- link.sh | 8 ++++- package.json | 9 ++++- packages/smart-account/package.json | 9 +++-- packages/smart-account/src/SmartAccount.ts | 38 +++++++++++++++------- 5 files changed, 50 insertions(+), 17 deletions(-) diff --git a/lerna.json b/lerna.json index 28fff685d..59de0e6be 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,6 @@ "packages/*" ], "useNx": true, - "version": "1.0.0" + "version": "1.0.0", + "useWorkspaces": true } diff --git a/link.sh b/link.sh index 19cb53d25..83cddb17b 100755 --- a/link.sh +++ b/link.sh @@ -4,8 +4,14 @@ # npm link rm -rf node_modules rm -rf packages/core-types/node_modules +rm -rf packages/core-types/package-lock.json rm -rf packages/ethers-lib/node_modules +rm -rf packages/ethers-lib/package-lock.json rm -rf packages/node_client/node_modules +rm -rf packages/node_client/package-lock.json rm -rf packages/relayer/node_modules +rm -rf packages/relayer/package-lock.json rm -rf packages/smart-account/node_modules -rm -rf packages/transactions/node_modules \ No newline at end of file +rm -rf packages/smart-account/package-lock.json +rm -rf packages/transactions/node_modules +rm -rf packages/transactions/package-lock.json diff --git a/package.json b/package.json index 69aec382c..c80faa7e0 100644 --- a/package.json +++ b/package.json @@ -28,10 +28,17 @@ }, "author": "Biconomy (https://biconomy.io)", "devDependencies": { + "@types/jest": "^28.1.7", + "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.1.6", "nx": "^14.5.6", "prettier": "2.7.1", - "ts-node": "^10.8.2" + "ts-node": "^10.9.1" + }, + "dependencies": { + "chai": "^4.3.6", + "chai-as-promised": "^7.1.1", + "typescript": "^4.7.4" } } diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 1a71b8e3a..332bef99e 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -44,7 +44,11 @@ "jest-cli": "^28.1.3", "nock": "^13.2.9", "prettier": "^2.6.2", - "typescript": "^4.6.3" + "@types/jest": "^28.1.7", + "web3-core": "^1.7.1", + "chai": "^4.3.6", + "chai-as-promised": "^7.1.1", + "typescript": "^4.7.4" }, "dependencies": { "@biconomy-sdk/core-types": "*", @@ -57,7 +61,6 @@ "@ethersproject/providers": "^5.6.8", "@gnosis.pm/safe-deployments": "^1.12.0", "@nomiclabs/hardhat-ethers": "^2.1.0", - "@types/mocha": "^9.1.1", - "web3-core": "^1.7.1" + "@types/mocha": "^9.1.1" } } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 8d9183359..f4bd4ebb0 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -153,7 +153,11 @@ class SmartAccount { signer, provider: readProvider }) - + console.log('network is ', network); + // console.log('signer is ', signer) + // console.log('readProvider ', readProvider) + console.log('network ', this.ethAdapter[network]); + this.initializeContracts(network) } @@ -175,36 +179,48 @@ class SmartAccount { const multiSend = currentChainInfo.multiSend const multiSendCall = currentChainInfo.multiSendCall - console.log(this.smartWalletFactoryContract[chainId]) + this.smartWalletFactoryContract[chainId] = {} + this.smartWalletContract[chainId] = {} + this.multiSendContract[chainId] = {} + this.multiSendCallOnlyContract[chainId] = {} + console.log("===>>>>>>>>"); for (let index = 0; index < smartWallet.length; index++) { console.log("===>>>"); const version = smartWallet[index].version - console.log(version); - this.smartWalletFactoryContract[chainId] = {} - this.smartWalletFactoryContract[chainId][`${version}`] = getSmartWalletFactoryContract( + console.log(smartWallet[index]); + + const dummyInstance = getSmartWalletFactoryContract( + version, + this.ethAdapter[chainId], + smartWalletFactoryAddress[index].address + ) + console.log('this.ethAdapter[chainId] ', this.ethAdapter[chainId]); + + console.log('dummyInstance ', dummyInstance); + + this.smartWalletFactoryContract[chainId].version = getSmartWalletFactoryContract( version, this.ethAdapter[chainId], smartWalletFactoryAddress[index].address ) + console.log(' logging instance ', this.smartWalletFactoryContract[chainId].version); + // NOTE/TODO : attached address is not wallet address yet - this.smartWalletContract[chainId] = {} - this.smartWalletContract[chainId][`${version}`] = getSmartWalletContract( + this.smartWalletContract[chainId].version = getSmartWalletContract( version, this.ethAdapter[chainId], smartWallet[index].address ) - this.multiSendContract[chainId] = {} - this.multiSendContract[chainId][`${version}`] = getMultiSendContract( + this.multiSendContract[chainId].version = getMultiSendContract( version, this.ethAdapter[chainId], multiSend[index].address ) - this.multiSendCallOnlyContract[chainId] = {} - this.multiSendCallOnlyContract[chainId][`${version}`] = getMultiSendCallOnlyContract( + this.multiSendCallOnlyContract[chainId].version = getMultiSendCallOnlyContract( version, this.ethAdapter[chainId], multiSendCall[index].address From 07c3f0f1836fc4a6ac8a134e2882b2715bb7a346 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 17 Aug 2022 19:41:39 +0530 Subject: [PATCH 0070/1247] nx version update --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6185146a1..69aec382c 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "devDependencies": { "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.5.4", + "nx": "^14.5.6", "prettier": "2.7.1", "ts-node": "^10.8.2" } From 2df08d256e159cc4d6001365ab86984a9df7fcbf Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 17 Aug 2022 19:44:06 +0530 Subject: [PATCH 0071/1247] rename txn method --- packages/smart-account/tests/smartaccount.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index d1d302849..5432741ff 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -577,7 +577,7 @@ describe('Wallet integration', function () { txs.push(tx2) const smartAccountTransaction: WalletTransaction = - await smartAccount.createSmartAccountTransactionBatch(txs) + await smartAccount.createTransactionBatch(txs) // Attach relayer before sending a transaction From 41f485988d034642eb8bdbf6e6fb4f26babe1f25 Mon Sep 17 00:00:00 2001 From: arcticfloyd1984 Date: Wed, 17 Aug 2022 19:45:29 +0530 Subject: [PATCH 0072/1247] rest-relayer --- packages/smart-account/src/SmartAccount.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 7dfc35a9f..3eb0a605d 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -160,18 +160,11 @@ class SmartAccount { this.chainConfig.find((n) => n.chainId === chainId)?.multiSendCallAddress || '' this.smartWalletFactoryContract[chainId] = getSmartWalletFactoryContract( -<<<<<<< HEAD - chainId, - this.ethAdapter[chainId] - ); - // Should attach the address here -======= this.ethAdapter[chainId], smartWalletFactoryAddress ) // NOTE/TODO : attached address is not wallet address yet ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe this.smartWalletContract[chainId] = getSmartWalletContract( this.ethAdapter[chainId], smartWalletAddress From 2211653f17c0fb950653f61f2a21c6ca6b607838 Mon Sep 17 00:00:00 2001 From: arcticfloyd1984 Date: Wed, 17 Aug 2022 19:46:33 +0530 Subject: [PATCH 0073/1247] rest-relayer --- packages/relayer/src/index.ts | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index 6bba1f920..996f0485c 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -2,7 +2,6 @@ import { TransactionResponse } from '@ethersproject/providers' import { SignedTransaction, SmartAccountState, SmartAccountContext } from '@biconomy-sdk/core-types' export interface Relayer { -<<<<<<< HEAD // relayer will submit the transaction(s) to the network and return the transaction response. // The quote should be the one returned from getFeeOptions, if any. /*quote?: FeeQuote*/ @@ -13,18 +12,3 @@ export interface Relayer { export * from './local-relayer' export * from './rest-relayer' -======= - // relayer will submit the transaction(s) to the network and return the transaction response. - // The quote should be the one returned from getFeeOptions, if any. - /*quote?: FeeQuote*/ - relay( - rawTx: SignedTransaction, - config: SmartAccountState, - context: SmartAccountContext - ): Promise - // wait for transaction confirmation - // wait(metaTxnId: string | SignedTransactions, timeout: number): Promise -} - -export * from './local-relayer' ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe From 87b176489f91d70fc36a2ab70e91d7e31f92edde Mon Sep 17 00:00:00 2001 From: arcticfloyd1984 Date: Wed, 17 Aug 2022 19:51:10 +0530 Subject: [PATCH 0074/1247] removed package-lock.json --- package-lock.json | 48322 -------------------------------------------- 1 file changed, 48322 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 8ac59ade5..000000000 --- a/package-lock.json +++ /dev/null @@ -1,48322 +0,0 @@ -{ - "name": "biconomy-sdk", - "requires": true, -<<<<<<< HEAD - "packages": { - "": { - "name": "biconomy-sdk", - "dependencies": { - "hardhat": "^2.9.9" - }, - "devDependencies": { - "lerna": "^5.1.6", - "nx": "^14.4.3", - "prettier": "2.7.1", - "ts-node": "^10.8.2" - }, - "workspaces": { - "packages": [ - "packages/*" - ] - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { -======= - "lockfileVersion": 1, - "dependencies": { - "@babel/code-frame": { ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, -<<<<<<< HEAD - "node_modules/@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz", - "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { -======= - "@babel/helper-validator-identifier": { ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true - }, -<<<<<<< HEAD - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { -======= - "@babel/highlight": { ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - } - }, - "@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - } - }, - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - }, -<<<<<<< HEAD - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.10.tgz", - "integrity": "sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.10.tgz", - "integrity": "sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@biconomy-sdk/core-types": { - "resolved": "packages/core-types", - "link": true - }, - "node_modules/@biconomy-sdk/ethers-lib": { - "resolved": "packages/ethers-lib", - "link": true - }, - "node_modules/@biconomy-sdk/node-client": { - "resolved": "packages/node-client", - "link": true - }, - "node_modules/@biconomy-sdk/relayer": { - "resolved": "packages/relayer", - "link": true - }, - "node_modules/@biconomy-sdk/smart-account": { - "resolved": "packages/smart-account", - "link": true - }, - "node_modules/@biconomy-sdk/transactions": { - "resolved": "packages/transactions", - "link": true - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "devOptional": true, - "license": "MIT", -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "dependencies": { - "buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - } - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/vm": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", - "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.3", - "@ethereumjs/blockchain": "^5.5.3", - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.4", - "rustbn.js": "~0.2.0" - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", - "dev": true - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "dev": true, - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@lerna/add": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.3.0.tgz", - "integrity": "sha512-MxwTO2UBxZwwuquKbBqdYa56YTqg6Lfz1MZsRQxO7F2cb2NN8NEYTcGOli/71Ee/2AoX4R4xIFTh3TnaflQ25A==", - "dev": true, - "requires": { - "@lerna/bootstrap": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "npm-package-arg": "8.1.1", - "p-map": "^4.0.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" - } - }, - "@lerna/bootstrap": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.3.0.tgz", - "integrity": "sha512-iHVjt6YOQKLY0j+ex13a6ZxjIQ1TSSXqbl6z1hVjBFaDyCh7pra/tgj0LohZDVCaouLwRKucceQfTGrb+cfo7A==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/has-npm-version": "5.3.0", - "@lerna/npm-install": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/rimraf-dir": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/symlink-binary": "5.3.0", - "@lerna/symlink-dependencies": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@npmcli/arborist": "5.3.0", - "dedent": "^0.7.0", - "get-port": "^5.1.1", - "multimatch": "^5.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4" - } - }, - "@lerna/changed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.3.0.tgz", - "integrity": "sha512-i6ZfBDBZCpnPaSWTuNGTrnExkHNMC+/cSUuS9njaqe+tXgqE95Ja3cMxWZth9Q1uasjcEBHPU2jG0VKrU37rpA==", - "dev": true, - "requires": { - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/listable": "5.3.0", - "@lerna/output": "5.3.0" - } - }, - "@lerna/check-working-tree": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.3.0.tgz", - "integrity": "sha512-qo6jUGWXKLVL1nU8aEECqwrGRjs9o1l1hXdD2juA4Fvzsam1cFVHJwsmw3hAXGhEPD0oalg/XR62H9rZSCLOvQ==", - "dev": true, - "requires": { - "@lerna/collect-uncommitted": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "@lerna/validation-error": "5.3.0" - } - }, - "@lerna/child-process": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.3.0.tgz", - "integrity": "sha512-4uXPNIptrgQQQVHVVAXBD8F7IqSvZL3Og0G0DHiWKH+dsSyMIUtaIGJt7sifVoL7nzex4AqEiPq/AubpmG5g4Q==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "execa": "^5.0.0", - "strong-log-transformer": "^2.1.0" - } - }, - "@lerna/clean": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.3.0.tgz", - "integrity": "sha512-Jn+Dr7A69dch8m1dLe7l/SDVQVQT2j7zdy2gaZVEmJIgEEaXmEbfJ2t2n06vRXtckI9B85M5mubT1U3Y7KuNuA==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/rimraf-dir": "5.3.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1" - } - }, - "@lerna/cli": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.3.0.tgz", - "integrity": "sha512-P7F3Xs98pXMEGZX+mnFfsd6gU03x8UrwQ3mElvQBICl4Ew9z6rS8NGUd3JOPFzm4/vSTjYTnPyPdWBjj6/f6sw==", - "dev": true, - "requires": { - "@lerna/global-options": "5.3.0", - "dedent": "^0.7.0", - "npmlog": "^6.0.2", - "yargs": "^16.2.0" - }, - "dependencies": { - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "@lerna/collect-uncommitted": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.3.0.tgz", - "integrity": "sha512-Ll/mU9Nes0NQoa0pSv2TR2PTCkIomBGuDWH48OF2sKKu69NuLjrD2L0udS5nJYig9HxFewtm4QTiUdYPxfJXkQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "chalk": "^4.1.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/collect-updates": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.3.0.tgz", - "integrity": "sha512-fzJo/rmdXKWKYt+9IXjtenIZtSr3blMH8GEqoVKpSZ7TJGpxcFNmMe6foa60BgaTnDmmg1y7Qu6JbQJ3Ra5c5w==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "slash": "^3.0.0" - } - }, - "@lerna/command": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.3.0.tgz", - "integrity": "sha512-UNQQ4EGTumqLhOuDPcRA4LpdS9pcTYKSdh/8MdKPeyIRN70vCTwdeTrxqaaKsn3Jo7ycvyUQT5yfrUFmCClfoA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/project": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@lerna/write-log-file": "5.3.0", - "clone-deep": "^4.0.1", - "dedent": "^0.7.0", - "execa": "^5.0.0", - "is-ci": "^2.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/conventional-commits": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.3.0.tgz", - "integrity": "sha512-9uoQ2E1J7pL0fml5PNO7FydnBNeqrNOQa53Ca1Klf5t/x4vIn51ocOZNm/YbRAc/affnrxxp+gR2/SWlN0yKqQ==", - "dev": true, - "requires": { - "@lerna/validation-error": "5.3.0", - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.4", - "conventional-recommended-bump": "^6.1.0", - "fs-extra": "^9.1.0", - "get-stream": "^6.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "semver": "^7.3.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/create": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.3.0.tgz", - "integrity": "sha512-DotTReCc3+Q9rpMA8RKAGemUK7JXT7skbxHvpqpPj7ryNkIv/dNAFC2EHglcpt9Rmyo6YbSP2zk0gfDbdiIcVA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "init-package-json": "^3.0.2", - "npm-package-arg": "8.1.1", - "p-reduce": "^2.1.0", - "pacote": "^13.6.1", - "pify": "^5.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0", - "whatwg-url": "^8.4.0", - "yargs-parser": "20.2.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/create-symlink": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.3.0.tgz", - "integrity": "sha512-xIoC9m4J/u4NV/8ms4P2fiimaYgialqJvNamvMDRmgE1c3BLDSGk2nE4nVI2W5LxjgJdMTiIH9v1QpTUC9Fv+Q==", - "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/describe-ref": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.3.0.tgz", - "integrity": "sha512-R+CtJcOuAF3kJ6GNQnGC3STEi+5OtpNVz2n17sAs/xqJnq79tPdzEhT+pMxB2eSEkQYlSr+cCKMpF0m/mtIPQA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/diff": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.3.0.tgz", - "integrity": "sha512-i6f99dtO90u1QIJEfVtKE831m4gnMHBwY+4D84GY2SJMno8uI7ZyxMRZQh1nAFtvlNozO2MgzLr1OHtNMZOIgQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/validation-error": "5.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/exec": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.3.0.tgz", - "integrity": "sha512-kI/IuF1hbT+pEMZc3v4+w8BLckUIi45ipzOP0bWvXNgSKKuADAU3HLv+ifRXEjob5906C+Zc7K2IVoVS6r1TDg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/profiler": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/validation-error": "5.3.0", - "p-map": "^4.0.0" - } - }, - "@lerna/filter-options": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.3.0.tgz", - "integrity": "sha512-ddgy0oDisTKIhCJ4WY5CeEhTsyrbW+zeBvZ7rVaG0oQXjSSYBried4TXRvgy67fampfHoPX+eQq5l1SYTRFPlw==", - "dev": true, - "requires": { - "@lerna/collect-updates": "5.3.0", - "@lerna/filter-packages": "5.3.0", - "dedent": "^0.7.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/filter-packages": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.3.0.tgz", - "integrity": "sha512-5/2V50sQB2+JNwuCHP/UPm3y8PN2JWVY9CbNLtF3K5bymNsCkQh2KHEL9wlWZ4yfr/2ufpy4XFPaFUHNoUOGnQ==", - "dev": true, - "requires": { - "@lerna/validation-error": "5.3.0", - "multimatch": "^5.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/get-npm-exec-opts": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.3.0.tgz", - "integrity": "sha512-cYBypDo8C7f4MvVvap2nYgtk8MXAADrYU1VdECSJ3Stbe4p2vBGt8bM9xkS2uPfQFMK3YSy3YPkSZcSjVXyoGw==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/get-packed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.3.0.tgz", - "integrity": "sha512-kD12w7Ko5TThuOuPF2HBLyuPsHK3oyyWyzleGBqR4DqxMtbMRgimyTQnr5o58XBOwUPCFsv1EZiqeGk+3HTGEA==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "ssri": "^9.0.1", - "tar": "^6.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/github-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.3.0.tgz", - "integrity": "sha512-UqAclsWDMthmbv3Z8QE1K7D/4e93ytg31mc+nEj+UdU+xJQ0L1ypl8zWAmGNs1sFkQntIiTIB4W5zgHet5mmZw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^19.0.3", - "git-url-parse": "^12.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/gitlab-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.3.0.tgz", - "integrity": "sha512-otwbiaGDgvn5MGF1ypsCO48inMpdcxuiDlbxrKD6glPUwNHiGV+PU8LLCCDKimwjjQhl88ySLpL1oTm4jnZ1Aw==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "npmlog": "^6.0.2", - "whatwg-url": "^8.4.0" - } - }, - "@lerna/global-options": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.3.0.tgz", - "integrity": "sha512-iEoFrDSU+KtfcB+lHW5grjg3VkEqzZNTUnWnE1FCBBwj9tSLOHjgKGtWWjIQtBUJ+qcLBbusap9Stqzr7UPYpQ==", - "dev": true - }, - "@lerna/has-npm-version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.3.0.tgz", - "integrity": "sha512-A/bK8e+QP/VMqZkq1wZbyOzMz/AY92tAVsBOQ5Yw2zqshdMVj99st3YHLOqJf/HTEzQo27GGI/ajmcltHS2l6A==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "semver": "^7.3.4" - } - }, - "@lerna/import": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.3.0.tgz", - "integrity": "sha512-KjVT9oFNSp1JLdrS1LSXjDcLiu2TMSfy6tpmhF9Zxo7oKB21SgWmXVV9rcWDueW2RIxNXDeVUG0NVNj2BRGeEQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "p-map-series": "^2.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/info": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.3.0.tgz", - "integrity": "sha512-pyeZSM/PIpBHCXdHPrbh6sPZlngXUxhTVFb0VaIjQ5Ms585xi15s1UQDO3FvzqdyMyalx0QGzCJbNx5XeoCejg==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/output": "5.3.0", - "envinfo": "^7.7.4" - } - }, - "@lerna/init": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.3.0.tgz", - "integrity": "sha512-y46lzEtgMdEseTJGQQqYZOjqqd7iN+e14vFh/9q5h62V4Y8nlUJRzovVo8JSeaGwKLB0B3dq3BuUn0PNywMhpA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/project": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "write-json-file": "^4.3.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/link": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.3.0.tgz", - "integrity": "sha512-+QBwnGg3S8Zk8M8G5CA4kmGq92rkEMbmWJXaxie3jQayp+GXgSlLs6R4jwSOZlztY6xR3WawMI9sHJ0Vdu+g7w==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/symlink-dependencies": "5.3.0", - "p-map": "^4.0.0", - "slash": "^3.0.0" - } - }, - "@lerna/list": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.3.0.tgz", - "integrity": "sha512-5RJvle3m4l2H0UmKNlwS8h2OIlNGsNTKPC4DYrJYt0+fhgzf5SEV1QKw+fuUqe3F8MziIkSGQB52HsjwPE6AWQ==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/listable": "5.3.0", - "@lerna/output": "5.3.0" - } - }, - "@lerna/listable": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.3.0.tgz", - "integrity": "sha512-RdmeV9mDeuBOgVOlF/KNH/qttyiYwHbeqHiMAw9s9AfMo/Fz3iDZaTGZuruMm84TZSkKxI7m5mjTlC0djsyKog==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.3.0", - "chalk": "^4.1.0", - "columnify": "^1.6.0" - } - }, - "@lerna/log-packed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.3.0.tgz", - "integrity": "sha512-tDuOot3vSOUSP7fNNej8UM0fah5oy8mKXe026grt4J0OP4L3rhSWxhfrDBQ3Ylh2dAjgHzscUf/vpnNC9HnhOQ==", - "dev": true, - "requires": { - "byte-size": "^7.0.0", - "columnify": "^1.6.0", - "has-unicode": "^2.0.1", - "npmlog": "^6.0.2" - } - }, - "@lerna/npm-conf": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.3.0.tgz", - "integrity": "sha512-ejlypb90tvIsKUCb0fcOKt7wcPEjLdVK2zfbNs0M+UlRDLyRVOHUVdelJ15cRDNjQHzhBo2HBUKn5Fmm/2pcmg==", - "dev": true, - "requires": { - "config-chain": "^1.1.12", - "pify": "^5.0.0" - } - }, - "@lerna/npm-dist-tag": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.3.0.tgz", - "integrity": "sha512-OPahPk9QLXQXFgtrWm22NNxajVYKavCyTh8ijMwXTGXXbMJAw+PVjokfrUuEtg7FQi+kfJSrYAcJAxxfQq2eiA==", - "dev": true, - "requires": { - "@lerna/otplease": "5.3.0", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/npm-install": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.3.0.tgz", - "integrity": "sha512-scbWo8nW+P9KfitWG3y7Ep97dOs64ECfz9xfqtjagEXKYBPxG3skvwwljkfNnuxrCNs71JVD+imvcewHzih28g==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/get-npm-exec-opts": "5.3.0", - "fs-extra": "^9.1.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "signal-exit": "^3.0.3", - "write-pkg": "^4.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/npm-publish": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.3.0.tgz", - "integrity": "sha512-n+ocN1Dxrs6AmrSNqZl57cwhP4/VjQXdEI+QYauNnErNjMQW8Wt+tNaTlVAhZ1DnorwAo86o2uzFF/BgdUqh9A==", - "dev": true, - "requires": { - "@lerna/otplease": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "fs-extra": "^9.1.0", - "libnpmpublish": "^6.0.4", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "read-package-json": "^5.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/npm-run-script": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.3.0.tgz", - "integrity": "sha512-2cLR1YdzeMjaMKgDuwHE+iZgVPt+Ttzb3/wFtp7Mw9TlKmNIdbHdrnfl12ABz5knPC+62CCNjB/gznfLndPp2w==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/get-npm-exec-opts": "5.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/otplease": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.3.0.tgz", - "integrity": "sha512-Xpju2VC5TiycmBP/mdp9hRstkH2MLm8/7o2NotVTCJwASWdKphRMqezhh5BX0E9i6VyrjzmTqSYEh9FNZZ9MwQ==", - "dev": true, - "requires": { - "@lerna/prompt": "5.3.0" - } - }, - "@lerna/output": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.3.0.tgz", - "integrity": "sha512-fISmHDu/9PKInFmT5NXsbh8cR6aE6SUXWrteXJ6PBYK30s0f/pVcfswb9VccX0Yea8HmqMQgCHWUWifkZeXiRA==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/pack-directory": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.3.0.tgz", - "integrity": "sha512-dTGMUB6/GjExhmLZ8yeFaRKJuSm6M/IsfxSJdL4gFPLigUIAS4XhzXS3KnL0+Ef1ue1yaTlAE9c/czfkE0pc/w==", - "dev": true, - "requires": { - "@lerna/get-packed": "5.3.0", - "@lerna/package": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/temp-write": "5.3.0", - "npm-packlist": "^5.1.1", - "npmlog": "^6.0.2", - "tar": "^6.1.0" - } - }, - "@lerna/package": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.3.0.tgz", - "integrity": "sha512-hsB03miiaNdvZ/UGzl0sVqxVat5x33EG9JiYgIoFqzroQPrG+WShmX3ctuO06TY1pxb4iNuHLPIbQomHEzzj8w==", - "dev": true, - "requires": { - "load-json-file": "^6.2.0", - "npm-package-arg": "8.1.1", - "write-pkg": "^4.0.0" - } - }, - "@lerna/package-graph": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.3.0.tgz", - "integrity": "sha512-UEHY7l/yknwFvQgo0RifyY+B5QdzuFutLZYSN1BMmyWttOZD9rkM263qnLNGTZ2BUE4dXDwwwOHuhLvi+xDRsA==", - "dev": true, - "requires": { - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/validation-error": "5.3.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "semver": "^7.3.4" - } - }, - "@lerna/prerelease-id-from-version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.3.0.tgz", - "integrity": "sha512-o1wsLns6hFTsmk4iqTRJNWLnFzlBBwgu17hp8T2iU4U7LUlDT2ZSKV3smGAU6GfrwX3MAp4LZ5syxgjFjrUOnw==", - "dev": true, - "requires": { - "semver": "^7.3.4" - } - }, - "@lerna/profiler": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.3.0.tgz", - "integrity": "sha512-LEZYca29EPgZR0q5E+7CJkn25Cw3OxNMQJU/CVn/HGeoWYWOpoDxujrZBl8is2bw06LHXvRbVXEUATLc+ACbqQ==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "upath": "^2.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/project": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.3.0.tgz", - "integrity": "sha512-InhIo9uwT1yod72ai5SKseJSUk8KkqG6COmwp1/45vibbawb7ZLbokpns7n46A0NdGNlmwJolamybYOuyumejw==", - "dev": true, - "requires": { - "@lerna/package": "5.3.0", - "@lerna/validation-error": "5.3.0", - "cosmiconfig": "^7.0.0", - "dedent": "^0.7.0", - "dot-prop": "^6.0.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.2", - "load-json-file": "^6.2.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "resolve-from": "^5.0.0", - "write-json-file": "^4.3.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@lerna/prompt": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.3.0.tgz", - "integrity": "sha512-4bIusBdjpw665CJtFsVsaB55hLHnmKnrcOaRjna6N/MdJDl8Th6X4EM4rrfXTX/uUNR3XcV91lYqcLuLmrpm5w==", - "dev": true, - "requires": { - "inquirer": "^8.2.4", - "npmlog": "^6.0.2" - } - }, - "@lerna/publish": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.3.0.tgz", - "integrity": "sha512-T8T1BQdI+NnlVARKwIXzILknEuiQlZToBsDpuX06M7+45t/pp9Z+u6pVt3rrqwiUPZ/dpoZzYKI31YdNJtGMcQ==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.3.0", - "@lerna/child-process": "5.3.0", - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "@lerna/log-packed": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/npm-dist-tag": "5.3.0", - "@lerna/npm-publish": "5.3.0", - "@lerna/otplease": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/pack-directory": "5.3.0", - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@lerna/version": "5.3.0", - "fs-extra": "^9.1.0", - "libnpmaccess": "^6.0.3", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/pulse-till-done": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.3.0.tgz", - "integrity": "sha512-yNvSuPLT1ZTtD2LMVOmiDhw4+9qkyf6xCpfxiUp4cGEN+qIuazWB5JicKLE49o27DBdaG8Ao4lAlb16x/gNrwQ==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/query-graph": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.3.0.tgz", - "integrity": "sha512-t99lNj97/Vilp5Js1Be7MoyaZ5U0fbOFh0E7lnTfSLvZhTkPMK6xLvAx2M3NQqhwYCQjTFDuf9ozQ3HQtYZAmA==", - "dev": true, - "requires": { - "@lerna/package-graph": "5.3.0" - } - }, -<<<<<<< HEAD - "node_modules/@ethersproject/solidity": { - "version": "5.6.1", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" -======= - "@lerna/resolve-symlink": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.3.0.tgz", - "integrity": "sha512-zKI7rV5FzzlMBfi6kjDS0ulzcdDTORvdOJ/+CHU5C2h+v+P64Nk2VhZZNCCBDoO/l4GRhgehZOB70GIamO1TSw==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "read-cmd-shim": "^3.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/rimraf-dir": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.3.0.tgz", - "integrity": "sha512-/QJebh0tSY3LjgEyOo+6NH/b7ZNw9IpjqiDtvnLixjtdfkgli1OKOoZTa4KrO0mJoqMRq4yAa98cjpIzyKqCqw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "npmlog": "^6.0.2", - "path-exists": "^4.0.0", - "rimraf": "^3.0.2" - } - }, - "@lerna/run": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.3.0.tgz", - "integrity": "sha512-KwoKTj1w71OmUHONNYhZME+tr5lk9Q4f+3LUr2WtWZRuOAGO5ZCRrcZc+N4Ib7zno89Ub6Ovz51fcjwltLh72w==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/npm-run-script": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/profiler": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/timer": "5.3.0", - "@lerna/validation-error": "5.3.0", - "p-map": "^4.0.0" - } - }, - "@lerna/run-lifecycle": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.3.0.tgz", - "integrity": "sha512-EuBCGwm2PLgkebfyqo3yNkwfSb1EzHeo3lA8t4yld6LXWkgUPBFhc7RwRc6TsQOpjpfFvDSGoI282R01o0jPVQ==", - "dev": true, - "requires": { - "@lerna/npm-conf": "5.3.0", - "@npmcli/run-script": "^4.1.7", - "npmlog": "^6.0.2", - "p-queue": "^6.6.2" - } - }, - "@lerna/run-topologically": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.3.0.tgz", - "integrity": "sha512-WiFF2EiwLjAguKs0lEmcukTL7WhuWFwxNprrGWFxEkBhlGdMFk18n8BaZN8FO26xqzztzuPzSx1re/f/dEEAPg==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.3.0", - "p-queue": "^6.6.2" - } - }, - "@lerna/symlink-binary": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.3.0.tgz", - "integrity": "sha512-dIATASuGS6y512AGjacOoTpkFDPsKlhggjzL3KLdSNmxV3288nUqaFBuA7rTnnMNnBQ7jVuE1JKJupZnzPN0cA==", - "dev": true, - "requires": { - "@lerna/create-symlink": "5.3.0", - "@lerna/package": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } -<<<<<<< HEAD - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "node_modules/@gnosis.pm/safe-core-sdk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.3.2.tgz", - "integrity": "sha512-XD50+AU7ahHwX0+YG8jeyqxrqNsEdLfCzAS5+9WkGuXMNm+K4jkJ9yBHN5yKAu5JXeCDYEQkjTSdVilm8ZLpXQ==", - "dependencies": { - "@ethersproject/solidity": "^5.6.0", - "@gnosis.pm/safe-core-sdk-types": "^1.3.0", - "@gnosis.pm/safe-deployments": "1.15.0", - "ethereumjs-util": "^7.1.4", - "semver": "^7.3.5", - "web3-utils": "^1.7.1" - } - }, - "node_modules/@gnosis.pm/safe-core-sdk-types": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.4.0.tgz", - "integrity": "sha512-v+V6wqfFVgBl2sZ8FqCMwL/qFnr6wBCcJ/gllo4OvItYw/dmXlMCkxUrERoILSeHDezLkrWnnzA4tHfkEwYuwg==", - "dependencies": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "1.15.0", - "web3-core": "^1.7.1" - } - }, - "node_modules/@gnosis.pm/safe-core-sdk-utils": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "web3-utils": "^1.7.1" - } - }, - "node_modules/@gnosis.pm/safe-deployments": { - "version": "1.15.0", - "license": "MIT", - "dependencies": { - "semver": "^7.3.7" - } - }, - "node_modules/@gnosis.pm/safe-ethers-lib": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" - }, - "peerDependencies": { - "ethers": "^5.5.3" -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - } - }, - "@lerna/symlink-dependencies": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.3.0.tgz", - "integrity": "sha512-qkq4YT/Bdrb3W22ve+d2Gy3hRTrtT/zBhjKTCukEpYsFJLwSjZ4z5vbv6J15/j6PN1Km9oTRp6vBYmdjAuARQQ==", - "dev": true, - "requires": { - "@lerna/create-symlink": "5.3.0", - "@lerna/resolve-symlink": "5.3.0", - "@lerna/symlink-binary": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@lerna/temp-write": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.3.0.tgz", - "integrity": "sha512-AhC5Q+tV0yebEc1P2jsB4apQzztW8dgdLLc1G1Pkt46l5vezRGhZmsj+iUyCsVjpdUSO/UcAq1DbI2Xzhf5arg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "is-stream": "^2.0.0", - "make-dir": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^8.3.2" - } - }, - "@lerna/timer": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.3.0.tgz", - "integrity": "sha512-IeDjj1gJtbUPKl2ebpiml9u4k2kRqYF1Dbs6JuWpeC7lGxAx3JcUmkNH2RQ1BYTxk5xc9FKlgNMrZQwhq2K1Ow==", - "dev": true - }, -<<<<<<< HEAD - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/core": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", - "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", - "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "node_modules/@jest/environment": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", - "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", - "dev": true, - "dependencies": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", - "dev": true, - "dependencies": { - "jest-get-type": "^28.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", - "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", - "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", - "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", - "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", - "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.13", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/source-map/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", - "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/transform/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.8", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@lerna/add": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.1.8.tgz", - "integrity": "sha512-ABplk8a5MmiT8lG1b9KHijRUwj/nOePMuezBHjJEpNeQ8Bw5w3IV/6hpdmApx/w1StBwWWf0UG42klrxXlfl/g==", -======= - "@lerna/validation-error": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.3.0.tgz", - "integrity": "sha512-GVvnTxx+CNFjXCiJahAu2c/pP2R3DhGuQp4CJUyKegnzGaWK0h5PhlwRL7/LbDMPLh2zLobPOVr9kTOjwv76Nw==", ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.3.0.tgz", - "integrity": "sha512-QOQSAdpeP66oQQ20nNZ4NhJS5NtZZDGyz36kP/4BeqjGK6QgtrEmto4+vmWj49w3VJUIXnrqAKHiPkhFUmJm5Q==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.3.0", - "@lerna/child-process": "5.3.0", - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/conventional-commits": "5.3.0", - "@lerna/github-client": "5.3.0", - "@lerna/gitlab-client": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/temp-write": "5.3.0", - "@lerna/validation-error": "5.3.0", - "chalk": "^4.1.0", - "dedent": "^0.7.0", - "load-json-file": "^6.2.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "p-reduce": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4", - "slash": "^3.0.0", - "write-json-file": "^4.3.0" - } - }, - "@lerna/write-log-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.3.0.tgz", - "integrity": "sha512-cmrNAI5+9auUJSuTVrUzt2nb/KX6htgjdw7gGPMI1Tm6cdBIbs67R6LedZ8yvYOLGsXB2Se93vxv5fTgEHWfCw==", - "dev": true, - "requires": { - "npmlog": "^6.0.2", - "write-file-atomic": "^4.0.1" - } - }, - "@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", - "dev": true - }, - "@noble/secp256k1": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/arborist": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz", - "integrity": "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==", - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.0", - "cacache": "^16.0.6", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } - } - }, - "@npmcli/fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.1.tgz", - "integrity": "sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg==", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", - "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/map-workspaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", - "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", - "dev": true, - "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@npmcli/metavuln-calculator": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", - "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", - "dev": true, - "requires": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "@npmcli/name-from-folder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", - "dev": true - }, - "@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", - "dev": true - }, - "@npmcli/package-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", - "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1" - } - }, - "@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.0.tgz", - "integrity": "sha512-e/QgLg7j2wSJp1/7JRl0GC8c7PMX+uYlA/1Tb+IDOLdSM4T7K1VQ9mm9IGU3WRtY5vEIObpqCLb3aCNCug18DA==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - } - }, - "@nrwl/cli": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.2.tgz", - "integrity": "sha512-uriSxM33IpiBpW9kHEW3gw5OjPaQe3jHdWUMOT88TrqTlf449qe01Sys8+H2YgJMIcLTFYX0fP4V1K9jqKKZCg==", - "dev": true, - "requires": { - "nx": "14.5.2" - } - }, - "@nrwl/tao": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.2.tgz", - "integrity": "sha512-SEx3SM7xQiB8mOQ/gCt7lFJKRrkq3rBX6FiV3bl+dQtuKK2zKQbyikY9r+MCZCQNqZAud3HJ2xCyKZBhK8htQg==", - "dev": true, - "requires": { - "nx": "14.5.2" - } - }, - "@octokit/auth-token": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", - "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3" - } - }, - "@octokit/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", - "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", - "dev": true, - "requires": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", - "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", - "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", - "dev": true, - "requires": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", - "dev": true - }, - "@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz", - "integrity": "sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==", - "dev": true, - "requires": { - "@octokit/types": "^6.41.0" - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.2.0.tgz", - "integrity": "sha512-PZ+yfkbZAuRUtqu6Y191/V3eM0KBPx+Yq7nh+ONPdpm3EX4pd5UnK2y2XgO/0AtNum5a4aJCDjqsDuUZ2hWRXw==", - "dev": true, - "requires": { - "@octokit/types": "^6.41.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/request": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.0.tgz", - "integrity": "sha512-7IAmHnaezZrgUqtRShMlByJK33MT9ZDnMRgZjnRrRV9a/jzzFwKGz0vxhFU6i7VMLraYcQ1qmcAOin37Kryq+Q==", - "dev": true, - "requires": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", - "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", - "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", - "dev": true, - "requires": { - "@octokit/core": "^4.0.0", - "@octokit/plugin-paginate-rest": "^3.0.0", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0" - } - }, - "@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dev": true, - "requires": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", - "dev": true, - "requires": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - }, - "dependencies": { - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - } - } - }, - "@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "dev": true - }, - "@scure/bip32": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", - "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", - "dev": true, - "requires": { - "@noble/hashes": "~1.1.1", - "@noble/secp256k1": "~1.6.0", - "@scure/base": "~1.1.0" - } - }, - "@scure/bip39": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", - "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", - "dev": true, - "requires": { - "@noble/hashes": "~1.1.1", - "@scure/base": "~1.1.0" - } - }, - "@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "requires": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - } - }, - "@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true - }, - "@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@solidity-parser/parser": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", - "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", - "dev": true, - "requires": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", - "dev": true - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", - "dev": true - }, - "@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dev": true, - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/node": { - "version": "18.6.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", - "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true - }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "requires": { - "async": "^2.4.0" - } - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true - }, - "bin-links": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", - "integrity": "sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ==", - "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "byte-size": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", - "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", - "dev": true - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, -<<<<<<< HEAD - "node_modules/@nrwl/cli": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.2.tgz", - "integrity": "sha512-uriSxM33IpiBpW9kHEW3gw5OjPaQe3jHdWUMOT88TrqTlf449qe01Sys8+H2YgJMIcLTFYX0fP4V1K9jqKKZCg==", - "dev": true, - "dependencies": { - "nx": "14.5.2" - } - }, - "node_modules/@nrwl/tao": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.2.tgz", - "integrity": "sha512-SEx3SM7xQiB8mOQ/gCt7lFJKRrkq3rBX6FiV3bl+dQtuKK2zKQbyikY9r+MCZCQNqZAud3HJ2xCyKZBhK8htQg==", - "dev": true, - "dependencies": { - "nx": "14.5.2" -======= - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", - "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", - "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dev": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - }, - "dependencies": { - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", - "dev": true, - "requires": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" - } - }, - "conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true - }, - "conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", - "dev": true, - "requires": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "requires": { - "JSONStream": "^1.0.4", - "is-text-path": "^1.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", - "dev": true, - "requires": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - } - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "core-js-pure": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.1.tgz", - "integrity": "sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, -<<<<<<< HEAD - "node_modules/@sinclair/typebox": { - "version": "0.24.26", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.26.tgz", - "integrity": "sha512-1ZVIyyS1NXDRVT8GjWD5jULjhDyM3IsIHef2VGUMdnWOlX2tkPjyEX/7K0TGSH2S8EaPhp1ylFdjSjUGQ+gecg==", - "dev": true - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", -======= - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, -<<<<<<< HEAD - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.2", - "license": "MIT", - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } -======= - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "dev": true ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - } - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, -<<<<<<< HEAD - "node_modules/@types/abstract-leveldown": { - "version": "7.2.0", - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/bignumber.js": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bignumber.js": "*" - } - }, - "node_modules/@types/bn.js": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/chai": { - "version": "4.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.5", -======= - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - } - } - }, -<<<<<<< HEAD - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", -======= - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, -<<<<<<< HEAD - "node_modules/@types/mocha": { - "version": "9.1.1", - "license": "MIT" -======= - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, -<<<<<<< HEAD - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/underscore": { - "version": "1.11.4", - "dev": true, - "license": "MIT" -======= - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, -<<<<<<< HEAD - "node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.30.6", -======= - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - } - } - }, -<<<<<<< HEAD - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.4", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-eventemitter": { - "version": "0.2.4", - "license": "MIT", - "dependencies": { - "async": "^2.4.0" - } - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/babel-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", - "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", - "dev": true, - "dependencies": { - "@jest/transform": "^28.1.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", - "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", - "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^28.1.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base-x": { - "version": "3.0.9", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "dev": true, - "license": "Unlicense", - "peer": true - }, - "node_modules/bech32": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true - }, - "node_modules/bignumber.js": { - "version": "9.0.2", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/bin-links": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", - "integrity": "sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ==", - "dev": true, - "dependencies": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/bin-links/node_modules/cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", - "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", - "dev": true, - "dependencies": { - "mkdirp-infer-owner": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/bin-links/node_modules/read-cmd-shim": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", - "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/bin-links/node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/blakejs": { - "version": "1.2.1", - "license": "MIT" - }, - "node_modules/bluebird": { - "version": "3.7.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/bn.js": { - "version": "5.2.1", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/depd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.10.3", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "license": "ISC" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "license": "MIT", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/bufferutil": { - "version": "4.0.6", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, - "node_modules/byte-size": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", - "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "4.5.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001373", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", - "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/caseless": { - "version": "0.12.0", - "dev": true, - "license": "Apache-2.0", - "peer": true - }, - "node_modules/chai": { - "version": "4.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-as-promised": { - "version": "7.1.1", - "dev": true, - "license": "WTFPL", - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 5" - } - }, - "node_modules/chalk": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/check-error": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/cids": { - "version": "0.7.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" - } - }, - "node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "node_modules/class-is": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/cmd-shim": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", - "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", - "dev": true, - "dependencies": { - "mkdirp-infer-owner": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.19", - "dev": true, - "license": "MIT" - }, - "node_modules/columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dev": true, - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "license": "MIT" - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/command-line-usage/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/commander": { - "version": "3.0.2", - "license": "MIT" - }, - "node_modules/common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true - }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/compare-func/node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "engines": [ - "node >= 6.0" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-hash": { - "version": "2.5.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", - "dev": true, - "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", - "dev": true, - "dependencies": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", - "dev": true, - "dependencies": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - }, - "bin": { - "conventional-recommended-bump": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.4.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/cookiejar": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/core-js-pure": { - "version": "3.23.3", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cors": { - "version": "2.8.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "devOptional": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/d": { - "version": "1.0.1", - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/deferred-leveldown": { - "version": "5.3.0", - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deferred-leveldown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "node_modules/des.js": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "dev": true, - "peer": true - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.210", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.210.tgz", - "integrity": "sha512-kSiX4tuyZijV7Cz0MWVmGT8K2siqaOA4Z66K5dCttPPRh0HicOcOAEj1KlC8O8J1aOS/1M8rGofOzksLKaHWcQ==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding-down": { - "version": "6.3.0", - "license": "MIT", - "dependencies": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/errno": { - "version": "0.1.8", - "license": "MIT", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.20.1", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.61", - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.19.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "9.3.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eth-ens-namehash": { - "version": "2.0.8", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "node_modules/eth-ens-namehash/node_modules/js-sha3": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/eth-lib": { - "version": "0.1.29", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/eth-lib/node_modules/bn.js": { - "version": "4.12.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/eth-lib/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/eth-lib/node_modules/ws": { - "version": "3.3.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "node_modules/ethereum-bloom-filters": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "js-sha3": "^0.8.0" - } - }, - "node_modules/ethereum-cryptography": { - "version": "0.1.3", - "license": "MIT", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/ethereum-waffle": { - "version": "3.4.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@ethereum-waffle/chai": "^3.4.4", - "@ethereum-waffle/compiler": "^3.4.4", - "@ethereum-waffle/mock-contract": "^3.4.4", - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.0.1" - }, - "bin": { - "waffle": "bin/waffle" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/ethereumjs-abi": { - "version": "0.6.8", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { - "version": "4.11.6", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ethereumjs-abi/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "6.2.1", - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ethers": { - "version": "5.6.9", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.6.4", - "@ethersproject/abstract-provider": "5.6.1", - "@ethersproject/abstract-signer": "5.6.2", - "@ethersproject/address": "5.6.1", - "@ethersproject/base64": "5.6.1", - "@ethersproject/basex": "5.6.1", - "@ethersproject/bignumber": "5.6.2", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.1", - "@ethersproject/contracts": "5.6.2", - "@ethersproject/hash": "5.6.1", - "@ethersproject/hdnode": "5.6.2", - "@ethersproject/json-wallets": "5.6.1", - "@ethersproject/keccak256": "5.6.1", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.4", - "@ethersproject/pbkdf2": "5.6.1", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.8", - "@ethersproject/random": "5.6.1", - "@ethersproject/rlp": "5.6.1", - "@ethersproject/sha2": "5.6.1", - "@ethersproject/signing-key": "5.6.2", - "@ethersproject/solidity": "5.6.1", - "@ethersproject/strings": "5.6.1", - "@ethersproject/transactions": "5.6.2", - "@ethersproject/units": "5.6.1", - "@ethersproject/wallet": "5.6.2", - "@ethersproject/web": "5.6.1", - "@ethersproject/wordlists": "5.6.1" - } - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "license": "MIT" - }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/express": { - "version": "4.18.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/depd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/express/node_modules/qs": { - "version": "6.10.3", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ext": { - "version": "1.6.0", - "license": "ISC", - "dependencies": { - "type": "^2.5.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.6.0", - "license": "ISC" - }, - "node_modules/extend": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "peer": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.13.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/find-replace": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "micromatch": "^4.0.2" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.6", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fp-ts": { - "version": "1.19.3", - "license": "MIT" - }, - "node_modules/fresh": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core": { - "version": "2.13.2", - "bundleDependencies": [ - "keccak" - ], - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "3.0.0", - "async": "2.6.2", - "bip39": "2.5.0", - "cachedown": "1.0.0", - "clone": "2.1.2", - "debug": "3.2.6", - "encoding-down": "5.0.4", - "eth-sig-util": "3.0.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-account": "3.0.0", - "ethereumjs-block": "2.2.2", - "ethereumjs-common": "1.5.0", - "ethereumjs-tx": "2.1.2", - "ethereumjs-util": "6.2.1", - "ethereumjs-vm": "4.2.0", - "heap": "0.2.6", - "keccak": "3.0.1", - "level-sublevel": "6.6.4", - "levelup": "3.1.1", - "lodash": "4.17.20", - "lru-cache": "5.1.1", - "merkle-patricia-tree": "3.0.0", - "patch-package": "6.2.2", - "seedrandom": "3.0.1", - "source-map-support": "0.5.12", - "tmp": "0.1.0", - "web3-provider-engine": "14.2.1", - "websocket": "1.0.32" - }, - "engines": { - "node": ">=8.9.0" - }, - "optionalDependencies": { - "ethereumjs-wallet": "0.6.5", - "web3": "1.2.11" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/abi": { - "version": "5.0.0-beta.153", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/address": ">=5.0.0-beta.128", - "@ethersproject/bignumber": ">=5.0.0-beta.130", - "@ethersproject/bytes": ">=5.0.0-beta.129", - "@ethersproject/constants": ">=5.0.0-beta.128", - "@ethersproject/hash": ">=5.0.0-beta.128", - "@ethersproject/keccak256": ">=5.0.0-beta.127", - "@ethersproject/logger": ">=5.0.0-beta.129", - "@ethersproject/properties": ">=5.0.0-beta.131", - "@ethersproject/strings": ">=5.0.0-beta.130" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/abstract-provider": { - "version": "5.0.8", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/networks": "^5.0.7", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/transactions": "^5.0.9", - "@ethersproject/web": "^5.0.12" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/abstract-signer": { - "version": "5.0.10", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/abstract-provider": "^5.0.8", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/address": { - "version": "5.0.9", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/rlp": "^5.0.7" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/base64": { - "version": "5.0.7", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/bignumber": { - "version": "5.0.13", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "bn.js": "^4.4.0" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/bytes": { - "version": "5.0.9", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/logger": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/constants": { - "version": "5.0.8", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.0.13" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/hash": { - "version": "5.0.10", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/abstract-signer": "^5.0.10", - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/keccak256": { - "version": "5.0.7", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "js-sha3": "0.5.7" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/logger": { - "version": "5.0.8", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/@ethersproject/networks": { - "version": "5.0.7", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/logger": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/properties": { - "version": "5.0.7", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/logger": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/rlp": { - "version": "5.0.7", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/signing-key": { - "version": "5.0.8", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "elliptic": "6.5.3" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/strings": { - "version": "5.0.8", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/logger": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/transactions": { - "version": "5.0.9", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/rlp": "^5.0.7", - "@ethersproject/signing-key": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@ethersproject/web": { - "version": "5.0.12", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/base64": "^5.0.7", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, - "node_modules/ganache-core/node_modules/@sindresorhus/is": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/@types/bn.js": { - "version": "4.11.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ganache-core/node_modules/@types/node": { - "version": "14.14.20", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/@types/pbkdf2": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ganache-core/node_modules/@types/secp256k1": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ganache-core/node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "license": "BSD-2-Clause", - "peer": true - }, - "node_modules/ganache-core/node_modules/abstract-leveldown": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/accepts": { - "version": "1.3.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/aes-js": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "peer": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ganache-core/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/arr-diff": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/arr-flatten": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/arr-union": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/array-flatten": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/array-unique": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/asn1": { - "version": "0.2.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/ganache-core/node_modules/asn1.js": { - "version": "5.4.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ganache-core/node_modules/assert-plus": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ganache-core/node_modules/assign-symbols": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/async": { - "version": "2.6.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "lodash": "^4.17.11" - } - }, - "node_modules/ganache-core/node_modules/async-eventemitter": { - "version": "0.2.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "async": "^2.4.0" - } - }, - "node_modules/ganache-core/node_modules/async-limiter": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/atob": { - "version": "2.1.2", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "peer": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/ganache-core/node_modules/aws-sign2": { - "version": "0.7.0", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/aws4": { - "version": "1.11.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-code-frame": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/strip-ansi": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ganache-core/node_modules/babel-core": { - "version": "6.26.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/json5": { - "version": "0.5.1", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/slash": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-generator": { - "version": "6.26.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/babel-generator/node_modules/jsesc": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-call-delegate": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-define-map": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-function-name": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-get-function-arity": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-hoist-variables": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-optimise-call-expression": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-regex": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helper-replace-supers": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-helpers": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-messages": { - "version": "6.23.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-regenerator": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "regenerator-transform": "^0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/ganache-core/node_modules/babel-preset-env": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - } - }, - "node_modules/ganache-core/node_modules/babel-preset-env/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/babel-register": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - } - }, - "node_modules/ganache-core/node_modules/babel-register/node_modules/source-map-support": { - "version": "0.4.18", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/ganache-core/node_modules/babel-runtime": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/ganache-core/node_modules/babel-template": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "node_modules/ganache-core/node_modules/babel-traverse": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "node_modules/ganache-core/node_modules/babel-traverse/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/babel-traverse/node_modules/globals": { - "version": "9.18.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-traverse/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/babel-types": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "node_modules/ganache-core/node_modules/babel-types/node_modules/to-fast-properties": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babelify": { - "version": "7.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "babel-core": "^6.0.14", - "object-assign": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/babylon": { - "version": "6.18.0", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "babylon": "bin/babylon.js" - } - }, - "node_modules/ganache-core/node_modules/backoff": { - "version": "2.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "precond": "0.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/balanced-match": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/base": { - "version": "0.11.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/base-x": { - "version": "3.0.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ganache-core/node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/base64-js": { - "version": "1.5.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/ganache-core/node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "dev": true, - "license": "Unlicense", - "peer": true - }, - "node_modules/ganache-core/node_modules/bignumber.js": { - "version": "9.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/bip39": { - "version": "2.5.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" - } - }, - "node_modules/ganache-core/node_modules/blakejs": { - "version": "1.1.0", - "dev": true, - "license": "CC0-1.0", - "peer": true - }, - "node_modules/ganache-core/node_modules/bluebird": { - "version": "3.7.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/bn.js": { - "version": "4.11.9", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/body-parser": { - "version": "1.19.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ganache-core/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/ganache-core/node_modules/brorand": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/browserify-aes": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ganache-core/node_modules/browserify-cipher": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/browserify-des": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/ganache-core/node_modules/browserify-rsa": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/ganache-core/node_modules/browserify-rsa/node_modules/bn.js": { - "version": "5.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/browserify-sign": { - "version": "4.2.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/ganache-core/node_modules/browserify-sign/node_modules/bn.js": { - "version": "5.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ganache-core/node_modules/browserslist": { - "version": "3.2.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - }, - "bin": { - "browserslist": "cli.js" - } - }, - "node_modules/ganache-core/node_modules/bs58": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/ganache-core/node_modules/bs58check": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/ganache-core/node_modules/buffer": { - "version": "5.7.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/ganache-core/node_modules/buffer-from": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/buffer-xor": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/bufferutil": { - "version": "4.0.3", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "dependencies": { - "node-gyp-build": "^4.2.0" - } - }, - "node_modules/ganache-core/node_modules/bytes": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/bytewise": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" - } - }, - "node_modules/ganache-core/node_modules/bytewise-core": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "typewise-core": "^1.2" - } - }, - "node_modules/ganache-core/node_modules/cache-base": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/cacheable-request": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache-core/node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache-core/node_modules/cachedown": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "^2.4.1", - "lru-cache": "^3.2.0" - } - }, - "node_modules/ganache-core/node_modules/cachedown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/cachedown/node_modules/lru-cache": { - "version": "3.2.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "pseudomap": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/caseless": { - "version": "0.12.0", - "dev": true, - "license": "Apache-2.0", - "peer": true - }, - "node_modules/ganache-core/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/checkpoint-store": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "functional-red-black-tree": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/chownr": { - "version": "1.1.4", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ci-info": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/cids": { - "version": "0.7.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" - } - }, - "node_modules/ganache-core/node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/cipher-base": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ganache-core/node_modules/class-is": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/class-utils": { - "version": "0.3.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/clone": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ganache-core/node_modules/clone-response": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/collection-visit": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ganache-core/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/combined-stream": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/component-emitter": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/concat-stream": { - "version": "1.6.2", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/ganache-core/node_modules/content-disposition": { - "version": "0.5.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/content-hash": { - "version": "2.5.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "node_modules/ganache-core/node_modules/content-type": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/cookie": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/cookie-signature": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/cookiejar": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/copy-descriptor": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/core-js": { - "version": "2.6.12", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/core-js-pure": { - "version": "3.8.2", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/ganache-core/node_modules/core-util-is": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/cors": { - "version": "2.8.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ganache-core/node_modules/create-ecdh": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/ganache-core/node_modules/create-hash": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/ganache-core/node_modules/create-hmac": { - "version": "1.1.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/ganache-core/node_modules/cross-fetch": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - } - }, - "node_modules/ganache-core/node_modules/crypto-browserify": { - "version": "3.12.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/d": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/dashdash": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/ganache-core/node_modules/debug": { - "version": "3.2.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/ganache-core/node_modules/decode-uri-component": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/ganache-core/node_modules/decompress-response": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/deep-equal": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/defer-to-connect": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/deferred-leveldown": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~5.0.0", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/deferred-leveldown/node_modules/abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/define-properties": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache-core/node_modules/define-property": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/defined": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/delayed-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ganache-core/node_modules/des.js": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/destroy": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/detect-indent": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/diffie-hellman": { - "version": "5.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/ganache-core/node_modules/dom-walk": { - "version": "0.1.2", - "dev": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/dotignore": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minimatch": "^3.0.4" - }, - "bin": { - "ignored": "bin/ignored" - } - }, - "node_modules/ganache-core/node_modules/duplexer3": { - "version": "0.1.4", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ecc-jsbn": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ganache-core/node_modules/ee-first": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/elliptic": { - "version": "6.5.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/encodeurl": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/encoding": { - "version": "0.1.13", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/ganache-core/node_modules/encoding-down": { - "version": "5.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "^5.0.0", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/encoding-down/node_modules/abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/end-of-stream": { - "version": "1.4.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/ganache-core/node_modules/errno": { - "version": "0.1.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/ganache-core/node_modules/es-abstract": { - "version": "1.18.0-next.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/es5-ext": { - "version": "0.10.53", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/ganache-core/node_modules/es6-iterator": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/ganache-core/node_modules/es6-symbol": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/ganache-core/node_modules/escape-html": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ganache-core/node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/etag": { - "version": "1.8.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/eth-block-tracker": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "eth-query": "^2.1.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.3", - "ethjs-util": "^0.1.3", - "json-rpc-engine": "^3.6.0", - "pify": "^2.3.0", - "tape": "^4.6.3" - } - }, - "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/pify": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/eth-ens-namehash": { - "version": "2.0.8", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-infura": { - "version": "3.2.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "cross-fetch": "^2.1.1", - "eth-json-rpc-middleware": "^1.5.0", - "json-rpc-engine": "^3.4.0", - "json-rpc-error": "^2.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware": { - "version": "1.6.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "async": "^2.5.0", - "eth-query": "^2.1.2", - "eth-tx-summary": "^3.1.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.1.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^3.6.0", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "tape": "^4.6.3" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block/node_modules/ethereum-common": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-errors": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/levelup": { - "version": "1.3.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/memdown": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-lib": { - "version": "0.1.29", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/ganache-core/node_modules/eth-query": { - "version": "2.1.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "node_modules/ganache-core/node_modules/eth-sig-util": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "buffer": "^5.2.1", - "elliptic": "^6.4.0", - "ethereumjs-abi": "0.6.5", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.0", - "tweetnacl-util": "^0.15.0" - } - }, - "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-abi": { - "version": "0.6.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^4.3.0" - } - }, - "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "4.5.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.8.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary": { - "version": "3.2.4", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "async": "^2.1.2", - "clone": "^2.0.0", - "concat-stream": "^1.5.1", - "end-of-stream": "^1.1.0", - "eth-query": "^2.0.2", - "ethereumjs-block": "^1.4.1", - "ethereumjs-tx": "^1.1.1", - "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "^2.6.0", - "through2": "^2.0.3" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-block/node_modules/ethereum-common": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-errors": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/levelup": { - "version": "1.3.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/memdown": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethashjs": { - "version": "0.0.8", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.1.2", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.0.2", - "miller-rabin": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethashjs/node_modules/bn.js": { - "version": "5.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethashjs/node_modules/buffer-xor": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethashjs/node_modules/ethereumjs-util": { - "version": "7.0.7", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereum-bloom-filters": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "js-sha3": "^0.8.0" - } - }, - "node_modules/ganache-core/node_modules/ethereum-bloom-filters/node_modules/js-sha3": { - "version": "0.8.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereum-common": { - "version": "0.0.18", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-abi": { - "version": "0.6.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-account": { - "version": "3.0.0", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-util": "^6.0.0", - "rlp": "^2.2.1", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-errors": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/levelup": { - "version": "1.3.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/memdown": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-blockchain": { - "version": "4.0.4", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.6.1", - "ethashjs": "~0.0.7", - "ethereumjs-block": "~2.2.2", - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.1.0", - "flow-stoplight": "^1.0.0", - "level-mem": "^3.0.1", - "lru-cache": "^5.1.1", - "rlp": "^2.2.2", - "semaphore": "^1.1.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-common": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm": { - "version": "4.2.0", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "core-js-pure": "^3.0.1", - "ethereumjs-account": "^3.0.0", - "ethereumjs-block": "^2.2.2", - "ethereumjs-blockchain": "^4.0.3", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.2", - "ethereumjs-util": "^6.2.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1", - "util.promisify": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-errors": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/levelup": { - "version": "1.3.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/memdown": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ethereumjs-wallet": { - "version": "0.6.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "aes-js": "^3.1.1", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^6.0.0", - "randombytes": "^2.0.6", - "safe-buffer": "^5.1.2", - "scryptsy": "^1.2.1", - "utf8": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "node_modules/ganache-core/node_modules/ethjs-unit": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ganache-core/node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ethjs-util": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ganache-core/node_modules/eventemitter3": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/events": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/ganache-core/node_modules/evp_bytestokey": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/express": { - "version": "4.17.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/ganache-core/node_modules/express/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/express/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/express/node_modules/qs": { - "version": "6.7.0", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ganache-core/node_modules/express/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ext": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "type": "^2.0.0" - } - }, - "node_modules/ganache-core/node_modules/ext/node_modules/type": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/extend": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/extend-shallow": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/extglob": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/extsprintf": { - "version": "1.3.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/fake-merkle-patricia-tree": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "checkpoint-store": "^1.1.0" - } - }, - "node_modules/ganache-core/node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/fetch-ponyfill": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "node-fetch": "~1.7.1" - } - }, - "node_modules/ganache-core/node_modules/fetch-ponyfill/node_modules/is-stream": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/fetch-ponyfill/node_modules/node-fetch": { - "version": "1.7.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/finalhandler": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root": { - "version": "1.2.1", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "fs-extra": "^4.0.3", - "micromatch": "^3.1.4" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/braces": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fill-range": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fs-extra": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-number": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/micromatch": { - "version": "3.1.10", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/to-regex-range": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/flow-stoplight": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/for-each": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/ganache-core/node_modules/for-in": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/forever-agent": { - "version": "0.6.1", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/form-data": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/ganache-core/node_modules/forwarded": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/fragment-cache": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/fresh": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/fs-extra": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/ganache-core/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/get-intrinsic": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ganache-core/node_modules/get-value": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/getpass": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/glob": { - "version": "7.1.3", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/global": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/ganache-core/node_modules/got": { - "version": "9.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/ganache-core/node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/graceful-fs": { - "version": "4.2.4", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/har-schema": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/har-validator": { - "version": "5.1.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/ganache-core/node_modules/has-ansi": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/has-symbol-support-x": { - "version": "1.4.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/has-symbols": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/has-value": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/has-values": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/has-values/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/hash-base": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ganache-core/node_modules/hash.js": { - "version": "1.1.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/heap": { - "version": "0.2.6", - "dev": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/hmac-drbg": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/home-or-tmp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/http-cache-semantics": { - "version": "4.1.0", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/http-errors": { - "version": "1.7.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/http-https": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/http-signature": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/ganache-core/node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/idna-uts46-hx": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "punycode": "2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ganache-core/node_modules/idna-uts46-hx/node_modules/punycode": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/ganache-core/node_modules/immediate": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/ganache-core/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/invariant": { - "version": "2.2.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/ipaddr.js": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ganache-core/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-arguments": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-callable": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-ci": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/ganache-core/node_modules/is-data-descriptor": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-date-object": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-descriptor": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-extendable": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-finite": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ganache-core/node_modules/is-fn": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-function": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/is-hex-prefixed": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ganache-core/node_modules/is-negative-zero": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-object": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-plain-obj": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-plain-object": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-regex": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-retry-allowed": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-symbol": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/is-windows": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/isstream": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/isurl": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ganache-core/node_modules/js-sha3": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/jsbn": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/json-buffer": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/json-rpc-engine": { - "version": "3.8.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "babel-preset-env": "^1.7.0", - "babelify": "^7.3.0", - "json-rpc-error": "^2.0.0", - "promise-to-callback": "^1.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/json-rpc-error": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1" - } - }, - "node_modules/ganache-core/node_modules/json-rpc-random-id": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/json-schema": { - "version": "0.2.3", - "dev": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/json-stable-stringify": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/ganache-core/node_modules/json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/ganache-core/node_modules/jsonify": { - "version": "0.0.0", - "dev": true, - "license": "Public Domain", - "peer": true - }, - "node_modules/ganache-core/node_modules/jsprim": { - "version": "1.4.1", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/ganache-core/node_modules/keccak": { - "version": "3.0.1", - "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "peer": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache-core/node_modules/keyv": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/ganache-core/node_modules/klaw-sync": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, - "node_modules/ganache-core/node_modules/level-codec": { - "version": "9.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/level-errors": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/level-iterator-stream": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.5", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/level-mem": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "level-packager": "~4.0.0", - "memdown": "~3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/memdown": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~5.0.0", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/level-packager": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "encoding-down": "~5.0.0", - "levelup": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/level-post": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ltgt": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/level-sublevel": { - "version": "6.6.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bytewise": "~1.1.0", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "level-iterator-stream": "^2.0.3", - "ltgt": "~2.1.1", - "pull-defer": "^0.2.2", - "pull-level": "^2.0.3", - "pull-stream": "^3.6.8", - "typewiselite": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/level-ws": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.8", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/levelup": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deferred-leveldown": "~4.0.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~3.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/levelup/node_modules/level-iterator-stream": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/lodash": { - "version": "4.17.20", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/looper": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/loose-envify": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/ganache-core/node_modules/lowercase-keys": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/ganache-core/node_modules/ltgt": { - "version": "2.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/map-cache": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/map-visit": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/md5.js": { - "version": "1.3.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/ganache-core/node_modules/media-typer": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/merge-descriptors": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree": { - "version": "3.0.0", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.6.1", - "ethereumjs-util": "^5.2.0", - "level-mem": "^3.0.1", - "level-ws": "^1.0.0", - "readable-stream": "^3.0.6", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ganache-core/node_modules/methods": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/miller-rabin": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/ganache-core/node_modules/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/mime-db": { - "version": "1.45.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/mime-types": { - "version": "2.1.28", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "mime-db": "1.45.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/mimic-response": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/min-document": { - "version": "2.19.0", - "dev": true, - "peer": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/ganache-core/node_modules/minimalistic-assert": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/minimatch": { - "version": "3.0.4", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/minimist": { - "version": "1.2.5", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/minizlib": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/ganache-core/node_modules/minizlib/node_modules/minipass": { - "version": "2.9.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/ganache-core/node_modules/mixin-deep": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/mkdirp": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ganache-core/node_modules/mkdirp-promise": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "mkdirp": "*" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/mock-fs": { - "version": "4.13.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/multibase": { - "version": "0.6.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/ganache-core/node_modules/multicodec": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "varint": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/multihashes": { - "version": "0.4.21", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/multihashes/node_modules/multibase": { - "version": "0.7.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/ganache-core/node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/nanomatch": { - "version": "1.2.13", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/negotiator": { - "version": "0.6.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/next-tick": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/nice-try": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/node-addon-api": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/node-fetch": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/ganache-core/node_modules/node-gyp-build": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "peer": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/ganache-core/node_modules/normalize-url": { - "version": "4.5.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ganache-core/node_modules/number-to-bn": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ganache-core/node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/oauth-sign": { - "version": "0.9.0", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object-inspect": { - "version": "1.9.0", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/object-is": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ganache-core/node_modules/object-visit": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/object.assign": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/object.getownpropertydescriptors": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/object.pick": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/oboe": { - "version": "2.1.4", - "dev": true, - "license": "BSD", - "optional": true, - "peer": true, - "dependencies": { - "http-https": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/on-finished": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/ganache-core/node_modules/os-homedir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/p-cancelable": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/p-timeout": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/parse-asn1": { - "version": "5.1.6", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/parse-headers": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/parseurl": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/pascalcase": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/patch-package": { - "version": "6.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^1.2.1", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "npm": ">5" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/cross-spawn": { - "version": "6.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/path-key": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/shebang-command": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/shebang-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/ganache-core/node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/path-parse": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/path-to-regexp": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/pbkdf2": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/ganache-core/node_modules/performance-now": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/posix-character-classes": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/precond": { - "version": "0.2.3", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/prepend-http": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/private": { - "version": "0.1.8", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/process": { - "version": "0.11.10", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/ganache-core/node_modules/promise-to-callback": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/proxy-addr": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ganache-core/node_modules/prr": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/pseudomap": { - "version": "1.0.2", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/psl": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/public-encrypt": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/ganache-core/node_modules/pull-cat": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/pull-defer": { - "version": "0.2.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/pull-level": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "level-post": "^1.0.7", - "pull-cat": "^1.1.9", - "pull-live": "^1.0.1", - "pull-pushable": "^2.0.0", - "pull-stream": "^3.4.0", - "pull-window": "^2.1.4", - "stream-to-pull-stream": "^1.7.1" - } - }, - "node_modules/ganache-core/node_modules/pull-live": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "pull-cat": "^1.1.9", - "pull-stream": "^3.4.0" - } - }, - "node_modules/ganache-core/node_modules/pull-pushable": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/pull-stream": { - "version": "3.6.14", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/pull-window": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "looper": "^2.0.0" - } - }, - "node_modules/ganache-core/node_modules/pump": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/ganache-core/node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/qs": { - "version": "6.5.2", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ganache-core/node_modules/query-string": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/ganache-core/node_modules/randomfill": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/ganache-core/node_modules/range-parser": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/raw-body": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/ganache-core/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/regenerate": { - "version": "1.4.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/regenerator-runtime": { - "version": "0.11.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/regenerator-transform": { - "version": "0.10.1", - "dev": true, - "license": "BSD", - "peer": true, - "dependencies": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "node_modules/ganache-core/node_modules/regex-not": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/regexp.prototype.flags": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/regexp.prototype.flags/node_modules/es-abstract": { - "version": "1.17.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/regexpu-core": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "node_modules/ganache-core/node_modules/regjsgen": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/regjsparser": { - "version": "0.1.5", - "dev": true, - "license": "BSD", - "peer": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/ganache-core/node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "dev": true, - "peer": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/ganache-core/node_modules/repeat-element": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/repeat-string": { - "version": "1.6.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/ganache-core/node_modules/repeating": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/request": { - "version": "2.88.2", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ganache-core/node_modules/resolve-url": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/responselike": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/resumer": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "through": "~2.3.4" - } - }, - "node_modules/ganache-core/node_modules/ret": { - "version": "0.1.15", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/ganache-core/node_modules/rimraf": { - "version": "2.6.3", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ganache-core/node_modules/ripemd160": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/ganache-core/node_modules/rlp": { - "version": "2.2.6", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.1" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/ganache-core/node_modules/rustbn.js": { - "version": "0.2.0", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "peer": true - }, - "node_modules/ganache-core/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/safe-event-emitter": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "events": "^3.0.0" - } - }, - "node_modules/ganache-core/node_modules/safe-regex": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/ganache-core/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/scrypt-js": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/scryptsy": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "pbkdf2": "^3.0.3" - } - }, - "node_modules/ganache-core/node_modules/secp256k1": { - "version": "4.0.2", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "dependencies": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache-core/node_modules/seedrandom": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/semaphore": { - "version": "1.1.0", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ganache-core/node_modules/send": { - "version": "0.17.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ganache-core/node_modules/send/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/send/node_modules/ms": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/serve-static": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ganache-core/node_modules/servify": { - "version": "0.1.12", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/set-immediate-shim": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/set-value": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/setimmediate": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/setprototypeof": { - "version": "1.1.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/sha.js": { - "version": "2.4.11", - "dev": true, - "license": "(MIT AND BSD-3-Clause)", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/ganache-core/node_modules/simple-concat": { - "version": "1.0.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/simple-get": { - "version": "2.8.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon": { - "version": "0.8.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon-node": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon-util": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon-util/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/source-map-resolve": { - "version": "0.5.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/ganache-core/node_modules/source-map-support": { - "version": "0.5.12", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/ganache-core/node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/source-map-url": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/split-string": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/sshpk": { - "version": "1.16.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "dev": true, - "license": "Unlicense", - "peer": true - }, - "node_modules/ganache-core/node_modules/static-extend": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/statuses": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/stream-to-pull-stream": { - "version": "1.7.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "looper": "^3.0.0", - "pull-stream": "^3.2.3" - } - }, - "node_modules/ganache-core/node_modules/stream-to-pull-stream/node_modules/looper": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/strict-uri-encode": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/ganache-core/node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/string.prototype.trim": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/string.prototype.trimend": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/string.prototype.trimstart": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/strip-hex-prefix": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ganache-core/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/swarm-js": { - "version": "0.1.40", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/get-stream": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/got": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/is-stream": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/p-cancelable": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/prepend-http": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/url-parse-lax": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/tape": { - "version": "4.13.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.5", - "object-inspect": "~1.7.0", - "resolve": "~1.17.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" - }, - "bin": { - "tape": "bin/tape" - } - }, - "node_modules/ganache-core/node_modules/tape/node_modules/glob": { - "version": "7.1.6", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ganache-core/node_modules/tape/node_modules/is-regex": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/tape/node_modules/object-inspect": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/tape/node_modules/resolve": { - "version": "1.17.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/tar": { - "version": "4.4.13", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/ganache-core/node_modules/tar/node_modules/fs-minipass": { - "version": "1.2.7", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/ganache-core/node_modules/tar/node_modules/minipass": { - "version": "2.9.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/ganache-core/node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/through2": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/ganache-core/node_modules/timed-out": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/tmp": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/to-object-path": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/to-object-path/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/to-readable-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/to-regex": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/toidentifier": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ganache-core/node_modules/tough-cookie": { - "version": "2.5.0", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ganache-core/node_modules/trim-right": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/tunnel-agent": { - "version": "0.6.0", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/tweetnacl": { - "version": "1.0.3", - "dev": true, - "license": "Unlicense", - "peer": true - }, - "node_modules/ganache-core/node_modules/tweetnacl-util": { - "version": "0.15.1", - "dev": true, - "license": "Unlicense", - "peer": true - }, - "node_modules/ganache-core/node_modules/type": { - "version": "1.2.0", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/type-is": { - "version": "1.6.18", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/typewise": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "typewise-core": "^1.2.0" - } - }, - "node_modules/ganache-core/node_modules/typewise-core": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/typewiselite": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/ultron": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/underscore": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/union-value": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/ganache-core/node_modules/unorm": { - "version": "1.6.0", - "dev": true, - "license": "MIT or GPL-2.0", - "peer": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/ganache-core/node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/unset-value": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/ganache-core/node_modules/urix": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/url-parse-lax": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/url-set-query": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/url-to-options": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ganache-core/node_modules/use": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/utf-8-validate": { - "version": "5.0.4", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "dependencies": { - "node-gyp-build": "^4.2.0" - } - }, - "node_modules/ganache-core/node_modules/utf8": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/util.promisify": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core/node_modules/utils-merge": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/ganache-core/node_modules/uuid": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/ganache-core/node_modules/varint": { - "version": "5.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/vary": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ganache-core/node_modules/verror": { - "version": "1.10.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/ganache-core/node_modules/web3": { - "version": "1.2.11", - "dev": true, - "hasInstallScript": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "web3-bzz": "1.2.11", - "web3-core": "1.2.11", - "web3-eth": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-shh": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-bzz": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.19.12", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-core": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.5", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-requestmanager": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core-helpers": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core-method": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core-promievent": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core-requestmanager": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-providers-http": "1.2.11", - "web3-providers-ipc": "1.2.11", - "web3-providers-ws": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core-subscriptions": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core/node_modules/@types/node": { - "version": "12.19.12", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-eth": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-accounts": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-eth-ens": "1.2.11", - "web3-eth-iban": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-abi": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/abi": "5.0.0-beta.153", - "underscore": "1.9.1", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-accounts": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-contract": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.5", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-ens": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-iban": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-personal": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.19.12", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-net": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine": { - "version": "14.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^3.0.0", - "eth-json-rpc-infura": "^3.1.0", - "eth-sig-util": "^1.4.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.2.0", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/eth-sig-util": { - "version": "1.4.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-block/node_modules/ethereum-common": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-errors": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/levelup": { - "version": "1.3.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/memdown": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "license": "MPL-2.0", - "peer": true, - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ws": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-providers-http": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "web3-core-helpers": "1.2.11", - "xhr2-cookies": "1.1.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-providers-ipc": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-providers-ws": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "websocket": "^1.0.31" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-shh": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-net": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-utils": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-utils/node_modules/eth-lib": { - "version": "0.2.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/ganache-core/node_modules/websocket": { - "version": "1.0.32", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ganache-core/node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/whatwg-fetch": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache-core/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache-core/node_modules/ws": { - "version": "3.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "node_modules/ganache-core/node_modules/ws/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/ganache-core/node_modules/xhr": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/xhr-request": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/ganache-core/node_modules/xhr-request-promise": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/ganache-core/node_modules/xhr2-cookies": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "cookiejar": "^2.1.1" - } - }, - "node_modules/ganache-core/node_modules/xtend": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/yaeti": { - "version": "0.0.6", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/ganache-core/node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", - "dev": true, - "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "get-pkg-repo": "src/cli.js" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-pkg-repo/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/get-pkg-repo/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/get-pkg-repo/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/get-pkg-repo/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", - "dev": true, - "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", - "dev": true, - "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", - "dev": true, - "dependencies": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, - "bin": { - "git-semver-tags": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-semver-tags/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/git-up": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-6.0.0.tgz", - "integrity": "sha512-6RUFSNd1c/D0xtGnyWN2sxza2bZtZ/EmI9448n6rCZruFwV/ezeEn2fJP7XnUQGwf0RAtd/mmUCbtH6JPYA2SA==", - "dev": true, - "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^7.0.2" - } - }, - "node_modules/git-url-parse": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-12.0.0.tgz", - "integrity": "sha512-I6LMWsxV87vysX1WfsoglXsXg6GjQRKq7+Dgiseo+h0skmp5Hp2rzmcEIRQot9CPA+uzU7x1x7jZdqvTFGnB+Q==", - "dev": true, - "dependencies": { - "git-up": "^6.0.0" - } - }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", - "dev": true, - "dependencies": { - "ini": "^1.3.2" - } - }, - "node_modules/glob": { - "version": "7.1.4", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/globals": { - "version": "13.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/fast-glob": { - "version": "3.2.11", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/got": { - "version": "9.6.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "license": "ISC" - }, - "node_modules/growl": { - "version": "1.10.5", - "license": "MIT", - "engines": { - "node": ">=4.x" - } - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/hardhat": { - "version": "2.9.9", - "license": "MIT", - "dependencies": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/blockchain": "^5.5.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/tx": "^3.5.1", - "@ethereumjs/vm": "^5.9.0", - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@sentry/node": "^5.18.1", - "@solidity-parser/parser": "^0.14.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^0.1.2", - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^7.1.4", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "lodash": "^4.17.11", - "merkle-patricia-tree": "^4.2.4", - "mnemonist": "^0.38.0", - "mocha": "^9.2.0", - "p-map": "^4.0.0", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "slash": "^3.0.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "true-case-path": "^2.2.1", - "tsort": "0.0.1", - "undici": "^5.4.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "bin": { - "hardhat": "internal/cli/cli.js" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || ^16.0.0" - }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/hardhat/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/hardhat/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/hardhat/node_modules/find-up": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/fs-extra": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/hardhat/node_modules/glob": { - "version": "7.2.0", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/hardhat/node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/jsonfile": { - "version": "4.0.0", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/hardhat/node_modules/locate-path": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/p-limit": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/p-locate": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/p-try": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/path-exists": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/resolve": { - "version": "1.17.0", - "license": "MIT", - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hardhat/node_modules/semver": { - "version": "6.3.0", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/hardhat/node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/universalify": { - "version": "0.1.2", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbol-support-x": { - "version": "1.4.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hash-base": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/depd": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-https": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/husky": { - "version": "7.0.4", - "dev": true, - "license": "MIT", - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/idna-uts46-hx": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "punycode": "2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/idna-uts46-hx/node_modules/punycode": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/immediate": { - "version": "3.3.0", - "license": "MIT" - }, - "node_modules/immutable": { - "version": "4.1.0", - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/init-package-json": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.5.tgz", - "integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==", - "dev": true, - "dependencies": { - "npm-package-arg": "^8.1.5", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^4.1.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/init-package-json/node_modules/read-package-json": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", - "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", - "dev": true, - "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/io-ts": { - "version": "1.10.4", - "license": "MIT", - "dependencies": { - "fp-ts": "^1.0.0" - } - }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-object": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, - "dependencies": { - "protocols": "^2.0.1" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.9", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-url": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isurl": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/jest-changed-files": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", - "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-circus": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", - "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-circus/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-cli": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", - "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", - "dev": true, - "dependencies": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-cli/node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "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.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jest-cli/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/jest-config": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", - "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "node_modules/jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", - "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-each": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", - "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", - "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", - "dev": true, - "dependencies": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-mock": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", - "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", - "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", - "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-runner": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", - "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", - "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-runner/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", - "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", - "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-util/node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "node_modules/jest-validate": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", - "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "leven": "^3.1.0", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "dev": true, - "license": "(AFL-2.1 OR BSD-3-Clause)", - "peer": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-nice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/just-diff": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.0.3.tgz", - "integrity": "sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg==", - "dev": true - }, - "node_modules/just-diff-apply": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.3.1.tgz", - "integrity": "sha512-dgFenZnMsc1xGNqgdtgnh7DK+Oy352CE3VZLbzcbQpsBs9iI2K3M0IRrdgREZ72eItTjbl0suRyvKRdVQa9GbA==", - "dev": true - }, - "node_modules/keccak": { - "version": "3.0.2", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/keccak/node_modules/node-addon-api": { - "version": "2.0.2", - "license": "MIT" - }, - "node_modules/keyv": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lerna": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.1.8.tgz", - "integrity": "sha512-KrpFx2l1x1X7wb9unqRU7OZTaNs5+67VQ1vxf8fIMgdtCAjEqkLxF/F3xLs+KBMws5PV19Q9YtPHn7SiwDl7iQ==", - "dev": true, - "dependencies": { - "@lerna/add": "5.1.8", - "@lerna/bootstrap": "5.1.8", - "@lerna/changed": "5.1.8", - "@lerna/clean": "5.1.8", - "@lerna/cli": "5.1.8", - "@lerna/create": "5.1.8", - "@lerna/diff": "5.1.8", - "@lerna/exec": "5.1.8", - "@lerna/import": "5.1.8", - "@lerna/info": "5.1.8", - "@lerna/init": "5.1.8", - "@lerna/link": "5.1.8", - "@lerna/list": "5.1.8", - "@lerna/publish": "5.1.8", - "@lerna/run": "5.1.8", - "@lerna/version": "5.1.8", - "import-local": "^3.0.2", - "npmlog": "^6.0.2" - }, - "bin": { - "lerna": "cli.js" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" - } - }, - "node_modules/level-codec": { - "version": "9.0.2", - "license": "MIT", - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-concat-iterator": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/level-errors": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream": { - "version": "4.0.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-mem": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-packager": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-supports": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-ws": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/levelup": { - "version": "4.4.0", - "license": "MIT", - "dependencies": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libnpmaccess": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", - "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", - "dev": true, - "dependencies": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/libnpmaccess/node_modules/npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/libnpmpublish": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", - "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", - "dev": true, - "dependencies": { - "normalize-package-data": "^3.0.2", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0", - "semver": "^7.1.3", - "ssri": "^8.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/libnpmpublish/node_modules/npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lilconfig": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/lint-staged": { - "version": "12.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.16", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^5.1.1", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.5.0", - "string-argv": "^0.3.1", - "supports-color": "^9.2.2", - "yaml": "^1.10.2" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/commander": { - "version": "9.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/lint-staged/node_modules/supports-color": { - "version": "9.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/listr2": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/rxjs": { - "version": "7.5.6", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.assign": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/loupe": { - "version": "2.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "license": "MIT" - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "devOptional": true, - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/make-fetch-happen/node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mcl-wasm": { - "version": "0.7.9", - "license": "BSD-3-Clause", - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memdown": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/immediate": { - "version": "3.2.3", - "license": "MIT" - }, - "node_modules/memorystream": { - "version": "0.3.1", - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/merkle-patricia-tree": { - "version": "4.2.4", - "license": "MPL-2.0", - "dependencies": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "dev": true, - "peer": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "3.0.5", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "dev": true, - "license": "MIT" - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-infer-owner": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-promise": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "mkdirp": "*" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mnemonist": { - "version": "0.38.5", - "license": "MIT", - "dependencies": { - "obliterator": "^2.0.0" - } - }, - "node_modules/mocha": { - "version": "9.2.2", - "license": "MIT", - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mock-fs": { - "version": "4.14.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/multibase": { - "version": "0.6.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/multicodec": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "varint": "^5.0.0" - } - }, - "node_modules/multihashes": { - "version": "0.4.21", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } - }, - "node_modules/multihashes/node_modules/multibase": { - "version": "0.7.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/multimatch/node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/nanoid": { - "version": "3.3.1", - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.1.0", - "license": "ISC" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.4.0", - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "node_modules/npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", - "dev": true, - "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-packlist/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm-packlist/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm-pick-manifest": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", - "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", - "dev": true, - "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-pick-manifest/node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/npm-pick-manifest/node_modules/lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-pick-manifest/node_modules/validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", - "dev": true, - "dependencies": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-registry-fetch/node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/npm-registry-fetch/node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-registry-fetch/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm-registry-fetch/node_modules/socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "license": "MIT", - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "license": "MIT" - }, - "node_modules/nx": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.5.2.tgz", - "integrity": "sha512-I6KWVMR5Ksj/HgderkcmJmyaqHdWblQeFUeVq9to263Wr3QCIRigbvdDI3rq3ZQCBMyhUSOVP9MFXROoRVtJXQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@nrwl/cli": "14.5.2", - "@nrwl/tao": "14.5.2", - "@parcel/watcher": "2.0.4", - "chalk": "4.1.0", - "chokidar": "^3.5.1", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", - "enquirer": "~2.3.6", - "fast-glob": "3.2.7", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^10.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "js-yaml": "4.1.0", - "jsonc-parser": "3.0.0", - "minimatch": "3.0.5", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.3.4", - "string-width": "^4.2.3", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^3.9.0", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.4.0", - "yargs-parser": "21.0.1" - }, - "bin": { - "nx": "bin/nx.js" - }, - "peerDependencies": { - "@swc-node/register": "^1.4.2", - "@swc/core": "^1.2.173" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/nx/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/nx/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/nx/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/nx/node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "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.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/nx/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obliterator": { - "version": "2.0.4", - "license": "MIT" - }, - "node_modules/oboe": { - "version": "2.1.5", - "license": "BSD", - "dependencies": { - "http-https": "^1.0.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", - "dev": true, - "dependencies": { - "p-reduce": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pacote": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", - "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", - "dev": true, - "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/@npmcli/run-script": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.5.tgz", - "integrity": "sha512-FyrZkZ+O0bCnQqm+mRb6sKbEJgyJudInwFN84gCcMUcxrWkR15Ags1uOHwnxHYdpj3T5eqrCZNW/Ys20MGTQ6Q==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pacote/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/pacote/node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/pacote/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/pacote/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pacote/node_modules/ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/pacote/node_modules/make-fetch-happen": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", - "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pacote/node_modules/minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", - "dev": true, - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/pacote/node_modules/node-gyp": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.0.0.tgz", - "integrity": "sha512-Ma6p4s+XCTPxCuAMrOA/IJRmVy16R8Sdhtwl4PrCr7IBlj4cPawF0vg/l7nOT1jPbuNS7lIRJpBSvVsXwEZuzw==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.22 || ^14.13 || >=16" - } - }, - "node_modules/pacote/node_modules/normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/pacote/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/npm-packlist": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", - "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", - "dev": true, - "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/npm-packlist/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/pacote/node_modules/npm-registry-fetch": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", - "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/read-package-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", - "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", - "dev": true, - "dependencies": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/read-package-json/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/pacote/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pacote/node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pacote/node_modules/validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-conflict-json": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", - "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/parse-headers": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-5.0.0.tgz", - "integrity": "sha512-qOpH55/+ZJ4jUu/oLO+ifUKjFPNZGfnPJtzvGzKN/4oLMil5m9OH4VpOj6++9/ytJcfks4kzH2hhi87GL/OU9A==", - "dev": true, - "dependencies": { - "protocols": "^2.0.0" - } - }, - "node_modules/parse-url": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-7.0.2.tgz", - "integrity": "sha512-PqO4Z0eCiQ08Wj6QQmrmp5YTTxpYfONdOEamrtvK63AmzXpcavIVQubGHxOEwiIoDZFb8uDOoQFS0NCcjqIYQg==", - "dev": true, - "dependencies": { - "is-ssh": "^1.4.0", - "normalize-url": "^6.1.0", - "parse-path": "^5.0.0", - "protocols": "^2.0.1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/patch-package": { - "version": "6.4.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "npm": ">5" - } - }, - "node_modules/patch-package/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/patch-package/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/patch-package/node_modules/cross-spawn": { - "version": "6.0.5", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/patch-package/node_modules/fs-extra": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/patch-package/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/patch-package/node_modules/open": { - "version": "7.4.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/patch-package/node_modules/path-key": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/rimraf": { - "version": "2.7.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/patch-package/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/patch-package/node_modules/shebang-command": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/patch-package/node_modules/shebang-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/patch-package/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/patch-package/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/patch-package/node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "license": "MIT", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.5.0", - "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postinstall-postinstall": { - "version": "2.1.0", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "2.7.1", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/promise-call-limit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", - "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", - "dev": true, - "dependencies": { - "read": "1" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true - }, - "node_modules/protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/psl": { - "version": "1.9.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/pump": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/read-cmd-shim": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", - "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", - "dev": true - }, - "node_modules/read-package-json": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", - "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", - "dev": true, - "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/read-pkg/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, - "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/request": { - "version": "2.88.2", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/resolve": { - "version": "1.22.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/responselike": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rlp": { - "version": "2.2.7", - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rustbn.js": { - "version": "0.2.0", - "license": "(MIT OR Apache-2.0)" - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/secp256k1/node_modules/node-addon-api": { - "version": "2.0.2", - "license": "MIT" - }, - "node_modules/semaphore-async-await": { - "version": "1.5.1", - "license": "MIT", - "engines": { - "node": ">=4.1" - } - }, - "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/send/node_modules/depd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/servify": { - "version": "0.1.12", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "license": "MIT" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/simple-get": { - "version": "2.8.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", - "dev": true, - "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/solc": { - "version": "0.7.3", - "license": "MIT", - "dependencies": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solcjs" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/solc/node_modules/jsonfile": { - "version": "2.4.0", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/solc/node_modules/rimraf": { - "version": "2.7.1", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.1", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/solc/node_modules/tmp": { - "version": "0.0.33", - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", - "dev": true, - "dependencies": { - "is-plain-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sort-keys/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.17.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "dev": true, - "license": "Unlicense", - "peer": true - }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "license": "MIT", - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-argv": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-format": { - "version": "2.0.0", - "dev": true, - "license": "WTFPL OR MIT" - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - }, - "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/swarm-js": { - "version": "0.1.40", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - } - }, - "node_modules/swarm-js/node_modules/chownr": { - "version": "1.1.4", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/swarm-js/node_modules/fs-minipass": { - "version": "1.2.7", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/swarm-js/node_modules/get-stream": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/got": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/is-stream": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/swarm-js/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/swarm-js/node_modules/minipass": { - "version": "2.9.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/swarm-js/node_modules/minizlib": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/swarm-js/node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/swarm-js/node_modules/p-cancelable": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/p-timeout": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/prepend-http": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/swarm-js/node_modules/tar": { - "version": "4.4.19", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/swarm-js/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/swarm-js/node_modules/url-parse-lax": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/swarm-js/node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/table-layout": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-value": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "array-back": "^1.0.3", - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/test-value/node_modules/array-back": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/test-value/node_modules/typical": { - "version": "2.6.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/testrpc": { - "version": "0.0.1", - "dev": true, - "peer": true - }, - "node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/timed-out": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/treeverse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", - "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/true-case-path": { - "version": "2.2.1", - "license": "Apache-2.0" - }, - "node_modules/ts-command-line-args": { - "version": "2.3.1", - "dev": true, - "license": "ISC", - "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" - } - }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/ts-generator": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mkdirp": "^0.5.2", - "@types/prettier": "^2.1.1", - "@types/resolve": "^0.0.8", - "chalk": "^2.4.1", - "glob": "^7.1.2", - "mkdirp": "^0.5.1", - "prettier": "^2.1.2", - "resolve": "^1.8.1", - "ts-essentials": "^1.0.0" - }, - "bin": { - "ts-generator": "dist/cli/run.js" - } - }, - "node_modules/ts-generator/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-generator/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-generator/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ts-generator/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/ts-generator/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-generator/node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ts-generator/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-generator/node_modules/ts-essentials": { - "version": "1.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/ts-node": { - "version": "10.8.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "devOptional": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.4.0", - "dev": true, - "license": "0BSD" - }, - "node_modules/tsort": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "license": "Unlicense" - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "license": "Unlicense" - }, - "node_modules/type": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typechain": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.1.1", - "fs-extra": "^7.0.0", - "glob": "^7.1.6", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.1.2", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.1.0" - } - }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/typechain/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/typechain/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/typechain/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.7.4", - "devOptional": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/typical": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/uglify-js": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.2.tgz", - "integrity": "sha512-AaQNokTNgExWrkEYA24BTNMSjyqEXPSfhqoS0AxmHkCJ4U+Dyy5AvbGV/sqxuxficEfGGoX3zWw9R7QpLFfEsg==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ultron": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici": { - "version": "5.6.0", - "license": "MIT", - "engines": { - "node": ">=12.18" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url": { - "version": "0.11.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/url-to-options": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/utf-8-validate": { - "version": "5.0.9", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/util": { - "version": "0.12.4", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "devOptional": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/varint": { - "version": "5.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/vary": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "peer": true, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/walk-up-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", - "dev": true - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web3": { - "version": "1.7.4", - "dev": true, - "hasInstallScript": true, - "license": "LGPL-3.0", - "peer": true, - "dependencies": { - "web3-bzz": "1.7.4", - "web3-core": "1.7.4", - "web3-eth": "1.7.4", - "web3-eth-personal": "1.7.4", - "web3-net": "1.7.4", - "web3-shh": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz": { - "version": "1.7.4", - "dev": true, - "hasInstallScript": true, - "license": "LGPL-3.0", - "peer": true, - "dependencies": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.20.55", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/web3-core": { - "version": "1.7.4", - "license": "LGPL-3.0", - "dependencies": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-helpers": { - "version": "1.7.4", - "license": "LGPL-3.0", - "dependencies": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method": { - "version": "1.7.4", - "license": "LGPL-3.0", - "dependencies": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent": { - "version": "1.7.4", - "license": "LGPL-3.0", - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent/node_modules/eventemitter3": { - "version": "4.0.4", - "license": "MIT" - }, - "node_modules/web3-core-requestmanager": { - "version": "1.7.4", - "license": "LGPL-3.0", - "dependencies": { - "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions": { - "version": "1.7.4", - "license": "LGPL-3.0", - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { - "version": "4.0.4", - "license": "MIT" - }, - "node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.55", - "license": "MIT" - }, - "node_modules/web3-eth": { - "version": "1.7.4", - "dev": true, - "license": "LGPL-3.0", - "peer": true, - "dependencies": { - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-eth-accounts": "1.7.4", - "web3-eth-contract": "1.7.4", - "web3-eth-ens": "1.7.4", - "web3-eth-iban": "1.7.4", - "web3-eth-personal": "1.7.4", - "web3-net": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-abi": { - "version": "1.7.4", - "dev": true, - "license": "LGPL-3.0", - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts": { - "version": "1.7.4", - "dev": true, - "license": "LGPL-3.0", - "peer": true, - "dependencies": { - "@ethereumjs/common": "^2.5.0", - "@ethereumjs/tx": "^3.3.2", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.0.10", - "scrypt-js": "^3.0.1", - "uuid": "3.3.2", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/bn.js": { - "version": "4.12.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/web3-eth-contract": { - "version": "1.7.4", - "dev": true, - "license": "LGPL-3.0", - "peer": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens": { - "version": "1.7.4", - "dev": true, - "license": "LGPL-3.0", - "peer": true, - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-eth-contract": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-iban": { - "version": "1.7.4", - "license": "LGPL-3.0", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal": { - "version": "1.7.4", - "dev": true, - "license": "LGPL-3.0", - "peer": true, - "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-net": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.55", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/web3-net": { - "version": "1.7.4", - "dev": true, - "license": "LGPL-3.0", - "peer": true, - "dependencies": { - "web3-core": "1.7.4", - "web3-core-method": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-http": { - "version": "1.7.4", - "license": "LGPL-3.0", - "dependencies": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ipc": { - "version": "1.7.4", - "license": "LGPL-3.0", - "dependencies": { - "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws": { - "version": "1.7.4", - "license": "LGPL-3.0", - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", - "websocket": "^1.0.32" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws/node_modules/eventemitter3": { - "version": "4.0.4", - "license": "MIT" - }, - "node_modules/web3-shh": { - "version": "1.7.4", - "dev": true, - "hasInstallScript": true, - "license": "LGPL-3.0", - "peer": true, - "dependencies": { - "web3-core": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-net": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils": { - "version": "1.7.4", - "license": "LGPL-3.0", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/websocket": { - "version": "1.0.34", - "license": "Apache-2.0", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "license": "MIT", - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/which-typed-array": { - "version": "1.1.8", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/window-size": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "window-size": "cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/workerpool": { - "version": "6.2.0", - "license": "Apache-2.0" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/write-json-file": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", - "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", - "dev": true, - "dependencies": { - "detect-indent": "^6.0.0", - "graceful-fs": "^4.1.15", - "is-plain-obj": "^2.0.0", - "make-dir": "^3.0.0", - "sort-keys": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8.3" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/write-json-file/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", - "dev": true, - "dependencies": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-pkg/node_modules/detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/write-pkg/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-pkg/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/write-pkg/node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/write-pkg/node_modules/type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-pkg/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/write-pkg/node_modules/write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "dependencies": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ws": { - "version": "7.5.8", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xhr": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xhr-request": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/xhr-request/node_modules/query-string": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/xhr-request/node_modules/strict-uri-encode": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/xhr2-cookies": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "cookiejar": "^2.1.1" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "license": "MIT", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/is-plain-obj": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/core-types": { - "name": "@biconomy-sdk/core-types", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "^1.12.0", - "web3-core": "^1.7.1" - }, - "devDependencies": { - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "prettier": "^2.6.2", - "typescript": "^4.6.3" - } - }, - "packages/core-types/node_modules/@types/node": { - "version": "17.0.45", - "dev": true, - "license": "MIT" - }, - "packages/ethers-lib": { - "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", - "@openzeppelin/contracts": "^4.6.0" - }, - "devDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.5", - "@nomiclabs/hardhat-waffle": "^2.0.3", - "@typechain/ethers-v5": "^9.0.0", - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "ethers": "^5.5.3", - "hardhat": "^2.9.2", - "prettier": "^2.6.2", - "ts-node": "^10.7.0", - "typechain": "^7.0.0", - "typescript": "^4.6.3" - }, - "peerDependencies": { - "ethers": "^5.5.3" - } - }, - "packages/ethers-lib/node_modules/@types/node": { - "version": "17.0.45", - "dev": true, - "license": "MIT" - }, - "packages/node-client": { - "name": "@biconomy-sdk/node-client", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.6.0", - "@gnosis.pm/safe-core-sdk": "^2.1.0", - "node-fetch": "^2.6.6" - }, - "devDependencies": { - "@gnosis.pm/safe-ethers-lib": "^1.1.0", - "@gnosis.pm/safe-web3-lib": "^1.1.0", - "@nomiclabs/hardhat-ethers": "^2.0.5", - "@nomiclabs/hardhat-waffle": "^2.0.3", - "@nomiclabs/hardhat-web3": "^2.0.0", - "@types/chai": "^4.3.0", - "@types/chai-as-promised": "^7.1.5", - "@types/mocha": "^9.1.0", - "@types/node": "^17.0.23", - "@types/node-fetch": "^2.6.2", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "chai": "^4.3.6", - "chai-as-promised": "^7.1.1", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "hardhat": "^2.9.2", - "husky": "^7.0.4", - "lint-staged": "^12.3.7", - "mocha": "^9.2.2", - "prettier": "^2.6.2", - "rimraf": "^3.0.2", - "ts-generator": "^0.1.1", - "ts-node": "^10.7.0", - "typescript": "^4.6.3" - } - }, - "packages/node-client/node_modules/@types/node": { - "version": "17.0.45", - "dev": true, - "license": "MIT" - }, - "packages/relayer": { - "name": "@biconomy-sdk/relayer", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@biconomy-sdk/core-types": "*" - }, - "devDependencies": { - "@biconomy-sdk/core-types": "*" - } - }, - "packages/smart-account": { - "name": "@biconomy-sdk/smart-account", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@ethersproject/providers": "^5.6.8", - "@gnosis.pm/safe-deployments": "^1.12.0", - "@types/mocha": "^9.1.1", - "web3-core": "^1.7.1" - }, - "devDependencies": { - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "ethers": "^5.5.3", - "jest-cli": "^28.1.3", - "prettier": "^2.6.2", - "typescript": "^4.6.3" - } - }, - "packages/smart-account/node_modules/@types/node": { - "version": "17.0.45", - "dev": true, - "license": "MIT" - }, - "packages/transactions": { - "name": "@biconomy-sdk/transactions", - "version": "1.0.0", - "license": "MIT" - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", - "dev": true - }, - "@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz", - "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.10.tgz", - "integrity": "sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.10.tgz", - "integrity": "sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@biconomy-sdk/core-types": { - "version": "file:packages/core-types", - "requires": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "^1.12.0", - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "prettier": "^2.6.2", - "typescript": "^4.6.3", - "web3-core": "^1.7.1" - }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "dev": true - } - } - }, - "@biconomy-sdk/ethers-lib": { - "version": "file:packages/ethers-lib", - "requires": { - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", - "@nomiclabs/hardhat-ethers": "^2.0.5", - "@nomiclabs/hardhat-waffle": "^2.0.3", - "@openzeppelin/contracts": "^4.6.0", - "@typechain/ethers-v5": "^9.0.0", - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "ethers": "^5.5.3", - "hardhat": "^2.9.2", - "prettier": "^2.6.2", - "ts-node": "^10.7.0", - "typechain": "^7.0.0", - "typescript": "^4.6.3" - }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "dev": true - } - } - }, - "@biconomy-sdk/node-client": { - "version": "file:packages/node-client", - "requires": { - "@ethersproject/abstract-signer": "^5.6.0", - "@gnosis.pm/safe-core-sdk": "^2.1.0", - "@gnosis.pm/safe-ethers-lib": "^1.1.0", - "@gnosis.pm/safe-web3-lib": "^1.1.0", - "@nomiclabs/hardhat-ethers": "^2.0.5", - "@nomiclabs/hardhat-waffle": "^2.0.3", - "@nomiclabs/hardhat-web3": "^2.0.0", - "@types/chai": "^4.3.0", - "@types/chai-as-promised": "^7.1.5", - "@types/mocha": "^9.1.0", - "@types/node": "^17.0.23", - "@types/node-fetch": "^2.6.2", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "chai": "^4.3.6", - "chai-as-promised": "^7.1.1", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "hardhat": "^2.9.2", - "husky": "^7.0.4", - "lint-staged": "^12.3.7", - "mocha": "^9.2.2", - "node-fetch": "^2.6.6", - "prettier": "^2.6.2", - "rimraf": "^3.0.2", - "ts-generator": "^0.1.1", - "ts-node": "^10.7.0", - "typescript": "^4.6.3" - }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "dev": true - } - } - }, - "@biconomy-sdk/relayer": { - "version": "file:packages/relayer", - "requires": { - "@biconomy-sdk/core-types": "*" - } - }, - "@biconomy-sdk/smart-account": { - "version": "file:packages/smart-account", - "requires": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@ethersproject/providers": "^5.6.8", - "@gnosis.pm/safe-deployments": "^1.12.0", - "@types/mocha": "^9.1.1", - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "ethers": "^5.5.3", - "jest-cli": "^28.1.3", - "prettier": "^2.6.2", - "typescript": "^4.6.3", - "web3-core": "^1.7.1" - }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "dev": true - } - } - }, - "@biconomy-sdk/transactions": { - "version": "file:packages/transactions" - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "devOptional": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@ensdomains/ens": { - "version": "0.4.5", - "dev": true, - "peer": true, - "requires": { - "bluebird": "^3.5.2", - "eth-ens-namehash": "^2.0.8", - "solc": "^0.4.20", - "testrpc": "0.0.1", - "web3-utils": "^1.0.0-beta.31" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "dev": true, - "peer": true - }, - "camelcase": { - "version": "3.0.0", - "dev": true, - "peer": true - }, - "cliui": { - "version": "3.2.0", - "dev": true, - "peer": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "dev": true, - "peer": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "fs-extra": { - "version": "0.30.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "get-caller-file": { - "version": "1.0.3", - "dev": true, - "peer": true - }, - "hosted-git-info": { - "version": "2.8.9", - "dev": true, - "peer": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "load-json-file": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "dev": true, - "peer": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "dev": true, - "peer": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "dev": true, - "peer": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "dev": true, - "peer": true - }, - "read-pkg": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "require-from-string": { - "version": "1.2.1", - "dev": true, - "peer": true - }, - "rimraf": { - "version": "2.7.1", - "dev": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "dev": true, - "peer": true - }, - "solc": { - "version": "0.4.26", - "dev": true, - "peer": true, - "requires": { - "fs-extra": "^0.30.0", - "memorystream": "^0.3.1", - "require-from-string": "^1.1.0", - "semver": "^5.3.0", - "yargs": "^4.7.1" - } - }, - "string-width": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "dev": true, - "peer": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.2", - "dev": true, - "peer": true - }, - "yargs": { - "version": "4.8.1", - "dev": true, - "peer": true, - "requires": { - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.1", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" - } - }, - "yargs-parser": { - "version": "2.4.1", - "dev": true, - "peer": true, - "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } - } - } - }, - "@ensdomains/resolver": { - "version": "0.2.4", - "dev": true, - "peer": true - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.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" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "@ethereum-waffle/chai": { - "version": "3.4.4", - "dev": true, - "peer": true, - "requires": { - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.5.2" - } - }, - "@ethereum-waffle/compiler": { - "version": "3.4.4", - "dev": true, - "peer": true, - "requires": { - "@resolver-engine/imports": "^0.3.3", - "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^2.0.0", - "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.5.5", - "ethers": "^5.0.1", - "mkdirp": "^0.5.1", - "node-fetch": "^2.6.1", - "solc": "^0.6.3", - "ts-generator": "^0.1.1", - "typechain": "^3.0.0" - }, - "dependencies": { - "@typechain/ethers-v5": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "ethers": "^5.0.2" - } - }, - "array-back": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "typical": "^2.6.1" - } - }, - "command-line-args": { - "version": "4.0.7", - "dev": true, - "peer": true, - "requires": { - "array-back": "^2.0.0", - "find-replace": "^1.0.3", - "typical": "^2.6.1" - } - }, - "find-replace": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "array-back": "^1.0.4", - "test-value": "^2.1.0" - }, - "dependencies": { - "array-back": { - "version": "1.0.4", - "dev": true, - "peer": true, - "requires": { - "typical": "^2.6.0" - } - } - } - }, - "fs-extra": { - "version": "0.30.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "mkdirp": { - "version": "0.5.6", - "dev": true, - "peer": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.7.1", - "dev": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "dev": true, - "peer": true - }, - "solc": { - "version": "0.6.12", - "dev": true, - "peer": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - } - }, - "tmp": { - "version": "0.0.33", - "dev": true, - "peer": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "ts-essentials": { - "version": "6.0.7", - "dev": true, - "peer": true, - "requires": {} - }, - "typechain": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "command-line-args": "^4.0.7", - "debug": "^4.1.1", - "fs-extra": "^7.0.0", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "ts-essentials": "^6.0.3", - "ts-generator": "^0.1.1" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - } - } - }, - "typical": { - "version": "2.6.1", - "dev": true, - "peer": true - }, - "universalify": { - "version": "0.1.2", - "dev": true, - "peer": true - } - } - }, - "@ethereum-waffle/ens": { - "version": "3.4.4", - "dev": true, - "peer": true, - "requires": { - "@ensdomains/ens": "^0.4.4", - "@ensdomains/resolver": "^0.2.4", - "ethers": "^5.5.2" - } - }, - "@ethereum-waffle/mock-contract": { - "version": "3.4.4", - "dev": true, - "peer": true, - "requires": { - "@ethersproject/abi": "^5.5.0", - "ethers": "^5.5.2" - } - }, - "@ethereum-waffle/provider": { - "version": "3.4.4", - "dev": true, - "peer": true, - "requires": { - "@ethereum-waffle/ens": "^3.4.4", - "ethers": "^5.5.2", - "ganache-core": "^2.13.2", - "patch-package": "^6.2.2", - "postinstall-postinstall": "^2.1.0" - } - }, - "@ethereumjs/block": { - "version": "3.6.3", - "requires": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - } - }, - "@ethereumjs/blockchain": { - "version": "5.5.3", - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1" - } - } - }, - "@ethereumjs/common": { - "version": "2.6.5", - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/ethash": { - "version": "1.1.0", - "requires": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "buffer-xor": { - "version": "2.0.2", - "requires": { - "safe-buffer": "^5.1.1" - } - } - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/vm": { - "version": "5.9.3", - "requires": { - "@ethereumjs/block": "^3.6.3", - "@ethereumjs/blockchain": "^5.5.3", - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.4", - "rustbn.js": "~0.2.0" - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/basex": { - "version": "5.6.1", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/hdnode": { - "version": "5.6.2", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/json-wallets": { - "version": "5.6.1", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.6.1", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/sha2": "^5.6.1" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/providers": { - "version": "5.6.8", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/base64": "^5.6.1", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1", - "bech32": "1.1.4", - "ws": "7.4.6" - }, - "dependencies": { - "ws": { - "version": "7.4.6", - "requires": {} - } - } - }, - "@ethersproject/random": { - "version": "5.6.1", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/sha2": { - "version": "5.6.1", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.6.1", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/units": { - "version": "5.6.1", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/wallet": { - "version": "5.6.2", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/json-wallets": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/wordlists": { - "version": "5.6.1", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "@gnosis.pm/safe-core-sdk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.3.2.tgz", - "integrity": "sha512-XD50+AU7ahHwX0+YG8jeyqxrqNsEdLfCzAS5+9WkGuXMNm+K4jkJ9yBHN5yKAu5JXeCDYEQkjTSdVilm8ZLpXQ==", - "requires": { - "@ethersproject/solidity": "^5.6.0", - "@gnosis.pm/safe-core-sdk-types": "^1.3.0", - "@gnosis.pm/safe-deployments": "1.15.0", - "ethereumjs-util": "^7.1.4", - "semver": "^7.3.5", - "web3-utils": "^1.7.1" - } - }, - "@gnosis.pm/safe-core-sdk-types": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.4.0.tgz", - "integrity": "sha512-v+V6wqfFVgBl2sZ8FqCMwL/qFnr6wBCcJ/gllo4OvItYw/dmXlMCkxUrERoILSeHDezLkrWnnzA4tHfkEwYuwg==", - "requires": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "1.15.0", - "web3-core": "^1.7.1" - } - }, - "@gnosis.pm/safe-core-sdk-utils": { - "version": "1.1.0", - "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "web3-utils": "^1.7.1" - } - }, - "@gnosis.pm/safe-deployments": { - "version": "1.15.0", - "requires": { - "semver": "^7.3.7" - } - }, - "@gnosis.pm/safe-ethers-lib": { - "version": "1.1.0", - "dev": true, - "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" - } - }, - "@gnosis.pm/safe-web3-lib": { - "version": "1.1.0", - "dev": true, - "requires": { - "@gnosis.pm/safe-core-sdk-types": "^1.1.0", - "@gnosis.pm/safe-core-sdk-utils": "^1.1.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true - }, - "@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", - "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - } - } - }, - "@jest/environment": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", - "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3" - } - }, - "@jest/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", - "dev": true, - "requires": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" - } - }, - "@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2" - } - }, - "@jest/fake-timers": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", - "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", - "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "@jest/globals": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", - "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" - } - }, - "@jest/reporters": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", - "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/source-map": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", - "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.13", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", - "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - } - } - }, - "@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.0.8", - "devOptional": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "devOptional": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "devOptional": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@lerna/add": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.1.8.tgz", - "integrity": "sha512-ABplk8a5MmiT8lG1b9KHijRUwj/nOePMuezBHjJEpNeQ8Bw5w3IV/6hpdmApx/w1StBwWWf0UG42klrxXlfl/g==", - "dev": true, - "requires": { - "@lerna/bootstrap": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/npm-conf": "5.1.8", - "@lerna/validation-error": "5.1.8", - "dedent": "^0.7.0", - "npm-package-arg": "^8.1.0", - "p-map": "^4.0.0", - "pacote": "^13.4.1", - "semver": "^7.3.4" - } - }, - "@lerna/bootstrap": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.1.8.tgz", - "integrity": "sha512-/QZJc6aRxi6csSR59jdqRXPFh33fbn60F1k/SWtCCELGkZub23fAPLKaO7SlMcyghN3oKlfTfVymu/NWEcptJQ==", - "dev": true, - "requires": { - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/has-npm-version": "5.1.8", - "@lerna/npm-install": "5.1.8", - "@lerna/package-graph": "5.1.8", - "@lerna/pulse-till-done": "5.1.8", - "@lerna/rimraf-dir": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/symlink-binary": "5.1.8", - "@lerna/symlink-dependencies": "5.1.8", - "@lerna/validation-error": "5.1.8", - "@npmcli/arborist": "5.2.0", - "dedent": "^0.7.0", - "get-port": "^5.1.1", - "multimatch": "^5.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4" - } - }, - "@lerna/changed": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.1.8.tgz", - "integrity": "sha512-JA9jX9VTHrwSMRJTgLEzdyyx4zi35X0yP6fUUFuli9a0zrB4HV4IowSn1XM03H8iebbDLB0eWBbosqhYwSP8Sw==", - "dev": true, - "requires": { - "@lerna/collect-updates": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/listable": "5.1.8", - "@lerna/output": "5.1.8" - } - }, - "@lerna/check-working-tree": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.1.8.tgz", - "integrity": "sha512-3QyiV75cYt9dtg9JhUt+Aiyk44mFjlyqIIJ/XZ2Cp/Xcwws/QrNKOTs5iYFX5XWzlpTgotOHcu1MH/mY55Czlw==", - "dev": true, - "requires": { - "@lerna/collect-uncommitted": "5.1.8", - "@lerna/describe-ref": "5.1.8", - "@lerna/validation-error": "5.1.8" - } - }, - "@lerna/child-process": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.1.8.tgz", - "integrity": "sha512-P0o4Y/sdiUJ53spZpaVv53NdAcl15UAi5//W3uT2T250xQPlVROwKy11S3Wzqglh94FYdi6XUy293x1uwBlFPw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "execa": "^5.0.0", - "strong-log-transformer": "^2.1.0" - } - }, - "@lerna/clean": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.1.8.tgz", - "integrity": "sha512-xMExZgjan5/8ZTjJkZoLoTKY1MQOMk7W1YXslbg9BpLevBycPk041MlLauzCyO8XdOpqpVnFCg/9W66fltqmQg==", - "dev": true, - "requires": { - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/prompt": "5.1.8", - "@lerna/pulse-till-done": "5.1.8", - "@lerna/rimraf-dir": "5.1.8", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1" - } - }, - "@lerna/cli": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.1.8.tgz", - "integrity": "sha512-0Ghhd9M9QvY6qZtnjTq5RHOIac2ttsW2VNFLFso8ov3YV+rJF4chLhyVaVBvLSA+5ZhwFH+xQ3/yeUx1tDO8GA==", - "dev": true, - "requires": { - "@lerna/global-options": "5.1.8", - "dedent": "^0.7.0", - "npmlog": "^6.0.2", - "yargs": "^16.2.0" - } - }, - "@lerna/collect-uncommitted": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.1.8.tgz", - "integrity": "sha512-pRsIYu82A3DxLahQI/3azoi/kjj6QSSHHAOx4y1YVefeDCaVtAm8aesNbpnyNVfJrie/1Gt5GMEpjfm/KScjlw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "chalk": "^4.1.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/collect-updates": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.1.8.tgz", - "integrity": "sha512-ZPQmYKzwDJ4T+t2fRUI/JjaCzC8Lv02kWIeSXrcIG+cf2xrbM0vK4iQMAKhagTsiWt9hrFwvtMgLp4a6+Ht8Qg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/describe-ref": "5.1.8", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "slash": "^3.0.0" - } - }, - "@lerna/command": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.1.8.tgz", - "integrity": "sha512-j/Q++APvkyN2t8GqOpK+4OxH1bB7OZGVWIKh0JQlwbtqH1Y06wlSyNdwpPmv8h1yO9fS1pY/xHwFbs1IicxwzA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/package-graph": "5.1.8", - "@lerna/project": "5.1.8", - "@lerna/validation-error": "5.1.8", - "@lerna/write-log-file": "5.1.8", - "clone-deep": "^4.0.1", - "dedent": "^0.7.0", - "execa": "^5.0.0", - "is-ci": "^2.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/conventional-commits": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.1.8.tgz", - "integrity": "sha512-UduSVDp/+2WlEV6ZO5s7yTzkfhYyPdEsqR6aaUtIJZe9wejcCK4Lc3BJ2BAYIOdtDArNY2CJPsz1LYvFDtPRkw==", - "dev": true, - "requires": { - "@lerna/validation-error": "5.1.8", - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.2", - "conventional-recommended-bump": "^6.1.0", - "fs-extra": "^9.1.0", - "get-stream": "^6.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "semver": "^7.3.4" - } - }, - "@lerna/create": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.1.8.tgz", - "integrity": "sha512-n9qLLeg1e0bQeuk8pA8ELEP05Ktl50e1EirdXGRqqvaXdCn41nYHo4PilUgb77/o/t3Z5N4/ic+0w8OvGVakNg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/npm-conf": "5.1.8", - "@lerna/validation-error": "5.1.8", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "init-package-json": "^2.0.2", - "npm-package-arg": "^8.1.0", - "p-reduce": "^2.1.0", - "pacote": "^13.4.1", - "pify": "^5.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0", - "whatwg-url": "^8.4.0", - "yargs-parser": "20.2.4" - } - }, - "@lerna/create-symlink": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.1.8.tgz", - "integrity": "sha512-5acQITDsJ7dqywPRrF1mpTUPm/EXFfiv/xF6zX+ySUjp4h0Zhhnsm8g2jFdRPDSjIxFD0rV/5iU4X6qmflXlAg==", - "dev": true, - "requires": { - "cmd-shim": "^4.1.0", - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/describe-ref": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.1.8.tgz", - "integrity": "sha512-/u5b2ho09icPcvPb1mlh/tPC07nSFc1cvvFjM9Yg5kfVs23vzVWeA8y0Bk5djlaaSzyHECyqviriX0aoaY47Wg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "npmlog": "^6.0.2" - } - }, - "@lerna/diff": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.1.8.tgz", - "integrity": "sha512-BLoi6l/v8p43IkAHTkpjZ4Kq27kYK7iti6y6gYoZuljSwNj38TjgqRb2ohHezQ5c0KFAj8xHEOuZM3Ou6tGyTQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/validation-error": "5.1.8", - "npmlog": "^6.0.2" - } - }, - "@lerna/exec": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.1.8.tgz", - "integrity": "sha512-U+owlBKoAUfULqRz0oBtHx/I6tYQy9I7xfPP0GoaXa8lpF7esnpCxsJG8GpdzFqIS30o6a2PtyHvp4jkrQF8Zw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/profiler": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/validation-error": "5.1.8", - "p-map": "^4.0.0" - } - }, - "@lerna/filter-options": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.1.8.tgz", - "integrity": "sha512-ene6xj1BRSFgIgcVg9xABp1cCiRnqm3Uetk9InxOtECbofpSDa7cQy5lsPv6GGAgXFbT91SURQiipH9FAOP+yQ==", - "dev": true, - "requires": { - "@lerna/collect-updates": "5.1.8", - "@lerna/filter-packages": "5.1.8", - "dedent": "^0.7.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/filter-packages": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.1.8.tgz", - "integrity": "sha512-2pdtZ+I2Sb+XKfUa/q8flVUyaY0hhwqFYMXll7Nut7Phb1w1TtkEXc2/N0Ac1yia6qSJB/5WrsbAcLF/ITp1vA==", - "dev": true, - "requires": { - "@lerna/validation-error": "5.1.8", - "multimatch": "^5.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/get-npm-exec-opts": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.1.8.tgz", - "integrity": "sha512-oujoIkEDDVK2+5ooPMEPI+xGs/iwPmGJ63AZu1h7P42YU9tHKQmF5yPybF3Jn99W8+HggM6APUGiX+5oHRvKXA==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/get-packed": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.1.8.tgz", - "integrity": "sha512-3vabIFlfUFQPbFnlOaDCNY4p7mufrhIFPoXxWu15JnjJsSDf9UB2a98xX43xNlxjgZLvnLai3bhCNfrKonI4Kw==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "ssri": "^8.0.1", - "tar": "^6.1.0" - } - }, - "@lerna/github-client": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.1.8.tgz", - "integrity": "sha512-y1oweMZ9xc/htIHy42hy2FuMUR/LS3CQlslXG9PAHzl5rE1VDDjvSv61kS50ZberGfB9xmkCxqH+2LgROG9B1A==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^18.1.0", - "git-url-parse": "^12.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/gitlab-client": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.1.8.tgz", - "integrity": "sha512-/EMKdkGnBU4ldyAQ4pXp2TKi1znvY3MiCULt8Hy42p4HhfFl/AxZYDovQYfop1NHVk29BQrGHfvlpyBNqZ2a8g==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "npmlog": "^6.0.2", - "whatwg-url": "^8.4.0" - } - }, - "@lerna/global-options": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.1.8.tgz", - "integrity": "sha512-VCfTilGh0O4T6Lk4DKYA5cUl1kPjwFfRUS/GSpdJx0Lf/dyDbFihrmTHefgUe9N2/nTQySDIdPk9HBr45tozWQ==", - "dev": true - }, - "@lerna/has-npm-version": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.1.8.tgz", - "integrity": "sha512-yN5j9gje2ND8zQf4tN52QDQ/yFb24o9Kasm4PZm99FzBURRIwFWCnvo3edOMaiJg0DpA660L+Kq9G0L+ZRKRZQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "semver": "^7.3.4" - } - }, - "@lerna/import": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.1.8.tgz", - "integrity": "sha512-m1+TEhlgS9i14T7o0/8o6FMZJ1O2PkQdpCjqUa5xdLITqvPozoMNujNgiX3ZVLg/XcFOjMtbCsYtspqtKyEsMQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/prompt": "5.1.8", - "@lerna/pulse-till-done": "5.1.8", - "@lerna/validation-error": "5.1.8", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "p-map-series": "^2.1.0" - } - }, - "@lerna/info": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.1.8.tgz", - "integrity": "sha512-VNCBNOrd5Q1iv1MOF++PzMrdAnTn6KTDbb5hcXHdWBRZUuOs3QOwVYGzAlTFMvwVmmlcER4z8BYyUsbxk3sIdQ==", - "dev": true, - "requires": { - "@lerna/command": "5.1.8", - "@lerna/output": "5.1.8", - "envinfo": "^7.7.4" - } - }, - "@lerna/init": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.1.8.tgz", - "integrity": "sha512-vEMnq/70u/c031/vURA4pZSxlBRAwjg7vOP7mt9M4dmKz/vkVnQ/5Ig9K0TKqC31hQg957/4m20obYEiFgC3Pw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/command": "5.1.8", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "write-json-file": "^4.3.0" - } - }, - "@lerna/link": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.1.8.tgz", - "integrity": "sha512-qOtZiMzB9JYyNPUlvpqTxh0Z1EmNVde8pFUIYybv+s3btrKEBPgsvvrOrob/mha3QJxnwcPDPjHt/wCHFxLruA==", - "dev": true, - "requires": { - "@lerna/command": "5.1.8", - "@lerna/package-graph": "5.1.8", - "@lerna/symlink-dependencies": "5.1.8", - "p-map": "^4.0.0", - "slash": "^3.0.0" - } - }, - "@lerna/list": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.1.8.tgz", - "integrity": "sha512-fVN9o/wKtgcOyuYwvYTg2HI6ORX2kOoBkCJ+PI/uZ/ImwLMTJ2Bf8i/Vsysl3bLFHhQFglzPZ7V1SQP/ku0Sdw==", - "dev": true, - "requires": { - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/listable": "5.1.8", - "@lerna/output": "5.1.8" - } - }, - "@lerna/listable": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.1.8.tgz", - "integrity": "sha512-nQ/40cbVZLFBv8o9Dz6ivHFZhosfDTYOPm4oHNu0xdexaTXWz5bQUlM4HtOm7K0dJ1fvLEVqiQNAuFSEhARt9g==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.1.8", - "chalk": "^4.1.0", - "columnify": "^1.6.0" - } - }, - "@lerna/log-packed": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.1.8.tgz", - "integrity": "sha512-alaCIzCtKV5oKyu632emda0hUQMw/BcL2U3v4ObLu90sU8P7mu6TipKRvR9OZxOLDnZGnPE7CMHSU8gsQoIasw==", - "dev": true, - "requires": { - "byte-size": "^7.0.0", - "columnify": "^1.6.0", - "has-unicode": "^2.0.1", - "npmlog": "^6.0.2" - } - }, - "@lerna/npm-conf": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.1.8.tgz", - "integrity": "sha512-d/pIcO4RwO3fXNlUbhQ6+qwULxGSiW/xcOtiETVf4ZfjaDqjkCaIxZaeZfm5gWDtII5klpQn3f2d71FCnZG5lw==", - "dev": true, - "requires": { - "config-chain": "^1.1.12", - "pify": "^5.0.0" - } - }, - "@lerna/npm-dist-tag": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.1.8.tgz", - "integrity": "sha512-vZXO0/EClOzRRHHfqB4APhZkxiJpQbsQAAFwaXQCNJE+3S+I/MD0S3iiUWrNs4QnN/8Lj1KyzUfznVDXX7AIUQ==", - "dev": true, - "requires": { - "@lerna/otplease": "5.1.8", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/npm-install": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.1.8.tgz", - "integrity": "sha512-AiYQyz4W1+NDeBw3qmdiiatfCtwtaGOi7zHtN1eAqheVTxEMuuYjNHt+8hu6nSpDFYtonz0NsKFvaqRJ5LbVmw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/get-npm-exec-opts": "5.1.8", - "fs-extra": "^9.1.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^6.0.2", - "signal-exit": "^3.0.3", - "write-pkg": "^4.0.0" - } - }, - "@lerna/npm-publish": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.1.8.tgz", - "integrity": "sha512-Gup/1d8ovc21x3spKPhFK0tIYYn8HOjnpCAg5ytINIW1QM/QcLAigY58If8uiyt+aojz6lubWrSR8/OHf9CXBw==", - "dev": true, - "requires": { - "@lerna/otplease": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", - "fs-extra": "^9.1.0", - "libnpmpublish": "^4.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "read-package-json": "^3.0.0" - } - }, - "@lerna/npm-run-script": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.1.8.tgz", - "integrity": "sha512-HzvukNC+hDIR25EpYWOvIGJItd0onXqzS9Ivdtw98ZQG3Jexi2Mn18A9tDqHOKCEGO3pVYrI9ep8VWkah2Bj1w==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "@lerna/get-npm-exec-opts": "5.1.8", - "npmlog": "^6.0.2" - } - }, - "@lerna/otplease": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.1.8.tgz", - "integrity": "sha512-/OVZ7Rbs8/ft14f4i/9HEFDsxJkBSg74rMUqyqFH3fID/RL3ja9hW5bI1bENxvYgs0bp/THy4lV5V75ZcI81zQ==", - "dev": true, - "requires": { - "@lerna/prompt": "5.1.8" - } - }, - "@lerna/output": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.1.8.tgz", - "integrity": "sha512-dXsKY8X2eAdPKRKHDZTASlWn95Eav1oQX9doUXkvV3o4UwIgqOCIsU7RqSED3EAEQz6VUH0rXNb/+d3uVeAoJQ==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/pack-directory": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.1.8.tgz", - "integrity": "sha512-aaH28ttS+JVimLFrVeZRWZ9Cii4GG2vkJXmQNikWBNQiFL/7S1x83NjMk4SQRdmtpYJkcQpQMZ2hDUdNxLnDCg==", - "dev": true, - "requires": { - "@lerna/get-packed": "5.1.8", - "@lerna/package": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", - "@lerna/temp-write": "5.1.8", - "npm-packlist": "^2.1.4", - "npmlog": "^6.0.2", - "tar": "^6.1.0" - } - }, - "@lerna/package": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.1.8.tgz", - "integrity": "sha512-Ot+wu6XZ93tw8p9oSTJJA15TzGhVpo8VbgNhKPcI3JJjkxVq2D5L5jVeBkjQvFEQBonLibTr339uLLXyZ0RMzg==", - "dev": true, - "requires": { - "load-json-file": "^6.2.0", - "npm-package-arg": "^8.1.0", - "write-pkg": "^4.0.0" - } - }, - "@lerna/package-graph": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.1.8.tgz", - "integrity": "sha512-aGwXTwCpPfhUPiSRhdppogZjOqJPm39EBxHFDa1E0+/Qaig5avJs4hI6OrPLyjsTywAswtCMOArvD1QZqxwvrQ==", - "dev": true, - "requires": { - "@lerna/prerelease-id-from-version": "5.1.8", - "@lerna/validation-error": "5.1.8", - "npm-package-arg": "^8.1.0", - "npmlog": "^6.0.2", - "semver": "^7.3.4" - } - }, - "@lerna/prerelease-id-from-version": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.1.8.tgz", - "integrity": "sha512-wfWv/8lHSk2/pl4FjopbDelFSLCz9s6J9AY5o7Sju9HtD9QUXcQHaXnEP1Rum9/rJZ8vWdFURcp9kzz8nxQ1Ow==", - "dev": true, - "requires": { - "semver": "^7.3.4" - } - }, - "@lerna/profiler": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.1.8.tgz", - "integrity": "sha512-vpAFN85BvMHfIGA53IcwaUnS9FHAismEnNyFCjMkzKV55mmXFZlWpZyO36ESdSQRWCo5/25f3Ln0Y6YubY3Dvw==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "upath": "^2.0.1" - } - }, - "@lerna/project": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.1.8.tgz", - "integrity": "sha512-zTFp91kmyJ0VHBmNXEArVrMSZVxnBJ7pHTt8C7RY91WSZhw8XDNumqMHDM+kEM1z/AtDBAAAGqBE3sjk5ONDXQ==", - "dev": true, - "requires": { - "@lerna/package": "5.1.8", - "@lerna/validation-error": "5.1.8", - "cosmiconfig": "^7.0.0", - "dedent": "^0.7.0", - "dot-prop": "^6.0.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.2", - "load-json-file": "^6.2.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "resolve-from": "^5.0.0", - "write-json-file": "^4.3.0" - } - }, - "@lerna/prompt": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.1.8.tgz", - "integrity": "sha512-Cmq0FV/vyCHu00kySxXMfuPvutsi8qoME2/nFcICIktvDqxXr5aSFY8QqB123awNCbpb4xcHykjFnEj/RNdb2Q==", - "dev": true, - "requires": { - "inquirer": "^7.3.3", - "npmlog": "^6.0.2" - } - }, - "@lerna/publish": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.1.8.tgz", - "integrity": "sha512-Q88WxXVNAh/ZWj7vYG83RZUfQyQlJMg7tDhsVTvZzy3VpkkCPtmJXZfX+g4RmE0PNyjsXx9QLYAOZnOB613WyA==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.1.8", - "@lerna/child-process": "5.1.8", - "@lerna/collect-updates": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/describe-ref": "5.1.8", - "@lerna/log-packed": "5.1.8", - "@lerna/npm-conf": "5.1.8", - "@lerna/npm-dist-tag": "5.1.8", - "@lerna/npm-publish": "5.1.8", - "@lerna/otplease": "5.1.8", - "@lerna/output": "5.1.8", - "@lerna/pack-directory": "5.1.8", - "@lerna/prerelease-id-from-version": "5.1.8", - "@lerna/prompt": "5.1.8", - "@lerna/pulse-till-done": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/validation-error": "5.1.8", - "@lerna/version": "5.1.8", - "fs-extra": "^9.1.0", - "libnpmaccess": "^4.0.1", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "pacote": "^13.4.1", - "semver": "^7.3.4" - } - }, - "@lerna/pulse-till-done": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.1.8.tgz", - "integrity": "sha512-KsyOazHG6wnjfdJhIdhTaTNwhj8Np/aPPei/ac9WzcuzgLS/uCs1IVFFIYBv5JdTmyVBKmguSZxdYjk7JzKBew==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/query-graph": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.1.8.tgz", - "integrity": "sha512-+p+bjPI403Hwv1djTS5aJe7DtPWIDw0a427BE68h1mmrPc9oTe3GG+0lingbfGR8woA2rOmjytgK2jeErOryPg==", - "dev": true, - "requires": { - "@lerna/package-graph": "5.1.8" - } - }, - "@lerna/resolve-symlink": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.1.8.tgz", - "integrity": "sha512-OJa8ct4Oo2BcD95FmJqkc5qZMepaQK5RZAWoTqEXG/13Gs0mPc0fZGIhnnpTqtm3mgNhlT7ypCHG42I7hKiSeg==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "read-cmd-shim": "^2.0.0" - } - }, - "@lerna/rimraf-dir": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.1.8.tgz", - "integrity": "sha512-3pT1X8kzW8xHUuAmRgzSKAF+/H1h1eSWq5+ACzeTWnvgqE7++0URee7TXwVCP/5FZPTZIzIclQCh4G0WD9Jfjg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.1.8", - "npmlog": "^6.0.2", - "path-exists": "^4.0.0", - "rimraf": "^3.0.2" - } - }, - "@lerna/run": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.1.8.tgz", - "integrity": "sha512-E5mI3FswVN9zQ3bCYUQxxPlLL400vnKpwLSzzRNFy//TR8Geu0LeR6NY+Jf0jklsKxwWGMJgqL6VqPqxDaNtdw==", - "dev": true, - "requires": { - "@lerna/command": "5.1.8", - "@lerna/filter-options": "5.1.8", - "@lerna/npm-run-script": "5.1.8", - "@lerna/output": "5.1.8", - "@lerna/profiler": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/timer": "5.1.8", - "@lerna/validation-error": "5.1.8", - "p-map": "^4.0.0" - } - }, - "@lerna/run-lifecycle": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.1.8.tgz", - "integrity": "sha512-5rRpovujhLJufKRzMp5sl2BIIqrPeoXxjniQbzkpSxZ2vnD+bE9xOoaciHQxOsmXfXhza0C+k3xYMM5+B/bVzg==", - "dev": true, - "requires": { - "@lerna/npm-conf": "5.1.8", - "@npmcli/run-script": "^3.0.2", - "npmlog": "^6.0.2" - } - }, - "@lerna/run-topologically": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.1.8.tgz", - "integrity": "sha512-isuulfBdNsrgV2QF/HwCKCecfR9mPEU9N4Nf8n9nQQgakwOscoDlwGp2xv27pvcQKI52q/o/ISEjz3JeoEQiOA==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.1.8", - "p-queue": "^6.6.2" - } - }, - "@lerna/symlink-binary": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.1.8.tgz", - "integrity": "sha512-s7VfKNJZnWvTKZ7KR8Yxh1rYhE/ARMioD5axyu3FleS3Xsdla2M5sQsLouCrdfM3doTO8lMxPVvVSFmL7q0KOA==", - "dev": true, - "requires": { - "@lerna/create-symlink": "5.1.8", - "@lerna/package": "5.1.8", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0" - } - }, - "@lerna/symlink-dependencies": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.1.8.tgz", - "integrity": "sha512-U5diiaKdWUlvoFMh3sYIEESBLa8Z3Q/EpkLl5o4YkcbPBjFHJFpmoqCGomwL9sf9HQUV2S9Lt9szJT8qgQm86Q==", - "dev": true, - "requires": { - "@lerna/create-symlink": "5.1.8", - "@lerna/resolve-symlink": "5.1.8", - "@lerna/symlink-binary": "5.1.8", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0" - } - }, - "@lerna/temp-write": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.1.8.tgz", - "integrity": "sha512-4/guYB5XotugyM8P/F1z6b+hNlSCe/QuZsmiZwgXOw2lmYnkSzLWDVjqsdZtNYqojK0lioxcPjZiL5qnEkk1PQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "is-stream": "^2.0.0", - "make-dir": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^8.3.2" - } - }, - "@lerna/timer": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.1.8.tgz", - "integrity": "sha512-Ua4bw2YOO3U+sFujE+MsUG+lllU0X7u6PCTj1QKe0QlR0zr2gCa0pcwjUQPdNfxnpJpPY+hdbfTUv2viDloaiA==", - "dev": true - }, - "@lerna/validation-error": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.1.8.tgz", - "integrity": "sha512-n+IiaxN2b08ZMYnezsmwL6rXB15/VvweusC04GMh1XtWunnMzSg9JDM7y6bw2vfpBBQx6cBFhLKSpD2Fcq5D5Q==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/version": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.1.8.tgz", - "integrity": "sha512-3f4P7KjIs6Gn2iaGkA5EASE9izZeDKtEzE8i2DE7YfVdw/P+EwFfKv2mKBXGbckYw42YO1tL6aD2QH0C8XbwlA==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.1.8", - "@lerna/child-process": "5.1.8", - "@lerna/collect-updates": "5.1.8", - "@lerna/command": "5.1.8", - "@lerna/conventional-commits": "5.1.8", - "@lerna/github-client": "5.1.8", - "@lerna/gitlab-client": "5.1.8", - "@lerna/output": "5.1.8", - "@lerna/prerelease-id-from-version": "5.1.8", - "@lerna/prompt": "5.1.8", - "@lerna/run-lifecycle": "5.1.8", - "@lerna/run-topologically": "5.1.8", - "@lerna/temp-write": "5.1.8", - "@lerna/validation-error": "5.1.8", - "chalk": "^4.1.0", - "dedent": "^0.7.0", - "load-json-file": "^6.2.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "p-reduce": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4", - "slash": "^3.0.0", - "write-json-file": "^4.3.0" - } - }, - "@lerna/write-log-file": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.1.8.tgz", - "integrity": "sha512-B+shMH3TpzA7Q5GGbuNkOmdPQdD1LXRFj7R17LINkn82PhP9CUgubwYuiVzrLa16ADi0V5Ad76pqtHi/6kD0nA==", - "dev": true, - "requires": { - "npmlog": "^6.0.2", - "write-file-atomic": "^3.0.3" - } - }, - "@metamask/eth-sig-util": { - "version": "4.0.1", - "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0" - }, - "ethereumjs-util": { - "version": "6.2.1", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@nomiclabs/hardhat-ethers": { - "version": "2.1.0", - "dev": true, - "requires": {} - }, - "@nomiclabs/hardhat-waffle": { - "version": "2.0.3", - "dev": true, - "requires": { - "@types/sinon-chai": "^3.2.3", - "@types/web3": "1.0.19" - } - }, - "@nomiclabs/hardhat-web3": { - "version": "2.0.0", - "dev": true, - "requires": { - "@types/bignumber.js": "^5.0.0" - } - }, - "@npmcli/arborist": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.2.0.tgz", - "integrity": "sha512-zWV7scFGL0SmpvfQyIWnMFbU/0YgtMNyvJiJwR98kyjUSntJGWFFR0O600d5W+TrDcTg0GyDbY+HdzGEg+GXLg==", - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^3.0.0", - "bin-links": "^3.0.0", - "cacache": "^16.0.6", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.0.5", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - }, - "dependencies": { - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", - "dev": true - }, - "make-fetch-happen": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", - "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - } - }, - "minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "npm-registry-fetch": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", - "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", - "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "@npmcli/ci-detect": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz", - "integrity": "sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q==", - "dev": true - }, - "@npmcli/fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", - "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", - "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", - "dev": true - } - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/map-workspaces": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz", - "integrity": "sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q==", - "dev": true, - "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@npmcli/metavuln-calculator": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", - "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", - "dev": true, - "requires": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/name-from-folder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", - "dev": true - }, - "@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", - "dev": true - }, - "@npmcli/package-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", - "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1" - } - }, - "@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz", - "integrity": "sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^8.4.1", - "read-package-json-fast": "^2.0.3" - } - }, - "@nrwl/cli": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.2.tgz", - "integrity": "sha512-uriSxM33IpiBpW9kHEW3gw5OjPaQe3jHdWUMOT88TrqTlf449qe01Sys8+H2YgJMIcLTFYX0fP4V1K9jqKKZCg==", - "dev": true, - "requires": { - "nx": "14.5.2" - } - }, - "@nrwl/tao": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.2.tgz", - "integrity": "sha512-SEx3SM7xQiB8mOQ/gCt7lFJKRrkq3rBX6FiV3bl+dQtuKK2zKQbyikY9r+MCZCQNqZAud3HJ2xCyKZBhK8htQg==", - "dev": true, - "requires": { - "nx": "14.5.2" - } - }, - "@octokit/auth-token": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", - "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", - "dev": true, - "peer": true, - "requires": { - "@octokit/types": "^6.0.3" - } - }, - "@octokit/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", - "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", - "dev": true, - "peer": true, - "requires": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", - "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", - "dev": true, - "peer": true, - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", - "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", - "dev": true, - "peer": true, - "requires": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "12.8.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.8.0.tgz", - "integrity": "sha512-ydcKLs2KKcxlhpdWLzJxEBDEk/U5MUeqtqkXlrtAUXXFPs6vLl1PEGghFC/BbpleosB7iXs0Z4P2DGe7ZT5ZNg==", - "dev": true - }, - "@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "2.21.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.2.tgz", - "integrity": "sha512-S24H0a6bBVreJtoTaRHT/gnVASbOHVTRMOVIqd9zrJBP3JozsxJB56TDuTUmd1xLI4/rAE2HNmThvVKtIdLLEw==", - "dev": true, - "requires": { - "@octokit/types": "^6.39.0" - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true, - "requires": {} - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", - "dev": true, - "requires": { - "@octokit/types": "^6.39.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.1.0.tgz", - "integrity": "sha512-36V+sP4bJli31TRq8sea3d/Q1XGgZ9cnqpsegkLCnvpu+hoYephSkxGlWg4KB6dyUM1IWPXVrLFOKYzObQ+MZg==", - "dev": true, - "peer": true, - "requires": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", - "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", - "dev": true, - "peer": true, - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", - "dev": true, - "requires": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" - }, - "dependencies": { - "@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3" - } - }, - "@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "dev": true, - "requires": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", - "dev": true, - "requires": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", - "dev": true, - "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - } - } - }, - "@octokit/types": { - "version": "6.39.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.39.0.tgz", - "integrity": "sha512-Mq4N9sOAYCitTsBtDdRVrBE80lIrMBhL9Jbrw0d+j96BAzlq4V+GLHFJbHokEsVvO/9tQupQdoFdgVYhD2C8UQ==", - "dev": true, - "requires": { - "@octokit/openapi-types": "^12.7.0" - } - }, - "@openzeppelin/contracts": { - "version": "4.7.0" - }, - "@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", - "dev": true, - "requires": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - } - }, - "@resolver-engine/core": { - "version": "0.3.3", - "dev": true, - "peer": true, - "requires": { - "debug": "^3.1.0", - "is-url": "^1.2.4", - "request": "^2.85.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/fs": { - "version": "0.3.3", - "dev": true, - "peer": true, - "requires": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/imports": { - "version": "0.3.3", - "dev": true, - "peer": true, - "requires": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0", - "hosted-git-info": "^2.6.0", - "path-browserify": "^1.0.0", - "url": "^0.11.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "dev": true, - "peer": true - } - } - }, - "@resolver-engine/imports-fs": { - "version": "0.3.3", - "dev": true, - "peer": true, - "requires": { - "@resolver-engine/fs": "^0.3.3", - "@resolver-engine/imports": "^0.3.3", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@sentry/core": { - "version": "5.30.0", - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "@sentry/hub": { - "version": "5.30.0", - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "@sentry/minimal": { - "version": "5.30.0", - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "@sentry/node": { - "version": "5.30.0", - "requires": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "@sentry/tracing": { - "version": "5.30.0", - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "@sentry/types": { - "version": "5.30.0" - }, - "@sentry/utils": { - "version": "5.30.0", - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "@sinclair/typebox": { - "version": "0.24.26", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.26.tgz", - "integrity": "sha512-1ZVIyyS1NXDRVT8GjWD5jULjhDyM3IsIHef2VGUMdnWOlX2tkPjyEX/7K0TGSH2S8EaPhp1ylFdjSjUGQ+gecg==", - "dev": true - }, - "@sindresorhus/is": { - "version": "0.14.0", - "dev": true, - "peer": true - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@solidity-parser/parser": { - "version": "0.14.2", - "requires": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "dev": true, - "peer": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "devOptional": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "devOptional": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "devOptional": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "devOptional": true - }, - "@typechain/ethers-v5": { - "version": "9.0.0", - "dev": true, - "requires": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - } - }, - "@types/abstract-leveldown": { - "version": "7.2.0" - }, - "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/bignumber.js": { - "version": "5.0.0", - "dev": true, - "requires": { - "bignumber.js": "*" - } - }, - "@types/bn.js": { - "version": "5.1.0", - "requires": { - "@types/node": "*" - } - }, - "@types/chai": { - "version": "4.3.1", - "dev": true - }, - "@types/chai-as-promised": { - "version": "7.1.5", - "dev": true, - "requires": { - "@types/chai": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/level-errors": { - "version": "3.0.0" - }, - "@types/levelup": { - "version": "4.3.3", - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1" - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/mkdirp": { - "version": "0.5.2", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/mocha": { - "version": "9.1.1" - }, - "@types/node": { - "version": "18.0.1" - }, - "@types/node-fetch": { - "version": "2.6.2", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "requires": { - "@types/node": "*" - } - }, - "@types/prettier": { - "version": "2.6.3", - "dev": true - }, - "@types/resolve": { - "version": "0.0.8", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.3", - "requires": { - "@types/node": "*" - } - }, - "@types/sinon": { - "version": "10.0.12", - "dev": true, - "requires": { - "@types/sinonjs__fake-timers": "*" - } - }, - "@types/sinon-chai": { - "version": "3.2.8", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "@types/sinonjs__fake-timers": { - "version": "8.1.2", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/underscore": { - "version": "1.11.4", - "dev": true - }, - "@types/web3": { - "version": "1.0.19", - "dev": true, - "requires": { - "@types/bn.js": "*", - "@types/underscore": "*" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.30.6", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.6", - "@typescript-eslint/type-utils": "5.30.6", - "@typescript-eslint/utils": "5.30.6", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.30.6", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.6", - "@typescript-eslint/types": "5.30.6", - "@typescript-eslint/typescript-estree": "5.30.6", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.30.6", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.6", - "@typescript-eslint/visitor-keys": "5.30.6" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.30.6", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.30.6", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.30.6", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.30.6", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.6", - "@typescript-eslint/visitor-keys": "5.30.6", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.30.6", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.6", - "@typescript-eslint/types": "5.30.6", - "@typescript-eslint/typescript-estree": "5.30.6", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.30.6", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.6", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2" - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abstract-leveldown": { - "version": "6.3.0", - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "accepts": { - "version": "1.3.8", - "dev": true, - "peer": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.7.1", - "devOptional": true - }, - "acorn-jsx": { - "version": "5.3.2", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "devOptional": true - }, - "add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true - }, - "adm-zip": { - "version": "0.4.16" - }, - "aes-js": { - "version": "3.0.0", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.3" - }, - "ansi-escapes": { - "version": "4.3.2", - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3" - } - } - }, - "ansi-regex": { - "version": "5.0.1" - }, - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4" - }, - "anymatch": { - "version": "3.1.2", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", - "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "arg": { - "version": "4.1.3", - "devOptional": true - }, - "argparse": { - "version": "2.0.1" - }, - "array-back": { - "version": "3.1.0", - "dev": true - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "dev": true, - "peer": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "dev": true, - "peer": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "dev": true, - "peer": true - } - } - }, - "assert-plus": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "assertion-error": { - "version": "1.1.0", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "dev": true - }, - "async": { - "version": "2.6.4", - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "requires": { - "async": "^2.4.0" - } - }, - "async-limiter": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "asynckit": { - "version": "0.4.0", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5" - }, - "aws-sign2": { - "version": "0.7.0", - "dev": true, - "peer": true - }, - "aws4": { - "version": "1.11.0", - "dev": true, - "peer": true - }, - "babel-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", - "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", - "dev": true, - "requires": { - "@jest/transform": "^28.1.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", - "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", - "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^28.1.3", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2" - }, - "base-x": { - "version": "3.0.9", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "dev": true, - "peer": true - } - } - }, - "bech32": { - "version": "1.1.4" - }, - "before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true - }, - "bignumber.js": { - "version": "9.0.2" - }, - "bin-links": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", - "integrity": "sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ==", - "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - }, - "dependencies": { - "cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", - "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", - "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "read-cmd-shim": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", - "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - } - } - }, - "binary-extensions": { - "version": "2.2.0" - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "blakejs": { - "version": "1.2.1" - }, - "bluebird": { - "version": "3.7.2", - "dev": true, - "peer": true - }, - "bn.js": { - "version": "5.2.1" - }, - "body-parser": { - "version": "1.20.0", - "dev": true, - "peer": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "peer": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "qs": { - "version": "6.10.3", - "dev": true, - "peer": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0" - }, - "browser-stdout": { - "version": "1.3.1" - }, - "browserify-aes": { - "version": "1.2.0", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" - } - }, - "bs58": { - "version": "4.0.1", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2" - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "dev": true, - "peer": true - }, - "buffer-xor": { - "version": "1.0.3" - }, - "bufferutil": { - "version": "4.0.6", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, - "byte-size": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", - "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", - "dev": true - }, - "bytes": { - "version": "3.1.2" - }, - "cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "lru-cache": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", - "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", - "dev": true - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - } - } - }, - "cacheable-request": { - "version": "6.1.0", - "dev": true, - "peer": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "dev": true, - "peer": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "normalize-url": { - "version": "4.5.1", - "dev": true, - "peer": true - } - } - }, - "call-bind": { - "version": "1.0.2", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caniuse-lite": { - "version": "1.0.30001373", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", - "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "dev": true, - "peer": true - }, - "chai": { - "version": "4.3.6", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chai-as-promised": { - "version": "7.1.1", - "dev": true, - "requires": { - "check-error": "^1.0.2" - } - }, - "chalk": { - "version": "4.1.0", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "ci-info": { - "version": "2.0.0" - }, - "cids": { - "version": "0.7.5", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "dependencies": { - "multicodec": { - "version": "1.0.4", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "class-is": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "clean-stack": { - "version": "2.2.0" - }, - "cli-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true - }, - "cli-truncate": { - "version": "3.1.0", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "clone-response": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "cmd-shim": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", - "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", - "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4" - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "dev": true - }, - "columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dev": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, - "combined-stream": { - "version": "1.0.8", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9" - }, - "command-line-args": { - "version": "5.2.1", - "dev": true, - "requires": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - } - }, - "command-line-usage": { - "version": "6.1.3", - "dev": true, - "requires": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "array-back": { - "version": "4.0.2", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "typical": { - "version": "5.2.0", - "dev": true - } - } - }, - "commander": { - "version": "3.0.2" - }, - "common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - }, - "dependencies": { - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - } - } - }, - "concat-map": { - "version": "0.0.1" - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-hash": { - "version": "2.5.2", - "dev": true, - "peer": true, - "requires": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "content-type": { - "version": "1.0.4", - "dev": true, - "peer": true - }, - "conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", - "dev": true, - "requires": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" - } - }, - "conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true - }, - "conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", - "dev": true, - "requires": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "requires": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", - "dev": true, - "requires": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - } - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "cookie": { - "version": "0.4.2" - }, - "cookie-signature": { - "version": "1.0.6", - "dev": true, - "peer": true - }, - "cookiejar": { - "version": "2.1.3" - }, - "core-js-pure": { - "version": "3.23.3" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "dev": true, - "peer": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "crc-32": { - "version": "1.2.2" - }, - "create-ecdh": { - "version": "4.0.4", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "dev": true, - "peer": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "devOptional": true - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "dev": true, - "peer": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "d": { - "version": "1.0.1", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "requires": { - "ms": "2.1.2" - } - }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - } - } - }, - "decode-uri-component": { - "version": "0.2.0", - "dev": true, - "peer": true - }, - "decompress-response": { - "version": "3.3.0", - "dev": true, - "peer": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", - "dev": true, - "requires": { - "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - } - } - }, - "defer-to-connect": { - "version": "1.1.3", - "dev": true, - "peer": true - }, - "deferred-leveldown": { - "version": "5.3.0", - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - } - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.2.0", - "dev": true, - "peer": true - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff": { - "version": "5.0.0" - }, - "diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "dev": true, - "peer": true - } - } - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-walk": { - "version": "0.1.2", - "dev": true, - "peer": true - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "duplexer3": { - "version": "0.1.5", - "dev": true, - "peer": true - }, - "eastasianwidth": { - "version": "0.2.0", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "dev": true, - "peer": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "dev": true, - "peer": true - }, - "electron-to-chromium": { - "version": "1.4.210", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.210.tgz", - "integrity": "sha512-kSiX4tuyZijV7Cz0MWVmGT8K2siqaOA4Z66K5dCttPPRh0HicOcOAEj1KlC8O8J1aOS/1M8rGofOzksLKaHWcQ==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0" - } - } - }, - "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0" - }, - "encodeurl": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "encoding": { - "version": "0.1.13", - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "encoding-down": { - "version": "6.3.0", - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "end-of-stream": { - "version": "1.4.4", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "env-paths": { - "version": "2.2.1" - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1" - }, - "escape-html": { - "version": "1.0.3", - "dev": true, - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5" - }, - "eslint": { - "version": "8.19.0", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "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.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "dev": true - }, - "eslint-scope": { - "version": "7.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "dev": true, - "requires": {} - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "dev": true - }, - "espree": { - "version": "9.3.2", - "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "etag": { - "version": "1.8.1", - "dev": true, - "peer": true - }, - "eth-ens-namehash": { - "version": "2.0.8", - "dev": true, - "peer": true, - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "dev": true, - "peer": true - } - } - }, - "eth-lib": { - "version": "0.1.29", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "ws": { - "version": "3.3.3", - "dev": true, - "peer": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } - } - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereum-waffle": { - "version": "3.4.4", - "dev": true, - "peer": true, - "requires": { - "@ethereum-waffle/chai": "^3.4.4", - "@ethereum-waffle/compiler": "^3.4.4", - "@ethereum-waffle/mock-contract": "^3.4.4", - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.0.1" - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0" - }, - "ethereumjs-util": { - "version": "6.2.1", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethers": { - "version": "5.6.9", - "dev": true, - "requires": { - "@ethersproject/abi": "5.6.4", - "@ethersproject/abstract-provider": "5.6.1", - "@ethersproject/abstract-signer": "5.6.2", - "@ethersproject/address": "5.6.1", - "@ethersproject/base64": "5.6.1", - "@ethersproject/basex": "5.6.1", - "@ethersproject/bignumber": "5.6.2", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.1", - "@ethersproject/contracts": "5.6.2", - "@ethersproject/hash": "5.6.1", - "@ethersproject/hdnode": "5.6.2", - "@ethersproject/json-wallets": "5.6.1", - "@ethersproject/keccak256": "5.6.1", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.4", - "@ethersproject/pbkdf2": "5.6.1", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.8", - "@ethersproject/random": "5.6.1", - "@ethersproject/rlp": "5.6.1", - "@ethersproject/sha2": "5.6.1", - "@ethersproject/signing-key": "5.6.2", - "@ethersproject/solidity": "5.6.1", - "@ethersproject/strings": "5.6.1", - "@ethersproject/transactions": "5.6.2", - "@ethersproject/units": "5.6.1", - "@ethersproject/wallet": "5.6.2", - "@ethersproject/web": "5.6.1", - "@ethersproject/wordlists": "5.6.1" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6" - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-target-shim": { - "version": "5.0.1" - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "5.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", - "dev": true, - "requires": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "express": { - "version": "4.18.1", - "dev": true, - "peer": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "cookie": { - "version": "0.5.0", - "dev": true, - "peer": true - }, - "debug": { - "version": "2.6.9", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "qs": { - "version": "6.10.3", - "dev": true, - "peer": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "ext": { - "version": "1.6.0", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0" - } - } - }, - "extend": { - "version": "3.0.2", - "dev": true, - "peer": true - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "dev": true, - "peer": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@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": { - "version": "2.1.0", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", -======= - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "requires": { - "to-regex-range": "^5.0.1" - } - }, -<<<<<<< HEAD - "finalhandler": { - "version": "1.2.0", - "dev": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "peer": true - } - } - }, - "find-replace": { - "version": "3.0.0", - "dev": true, - "requires": { - "array-back": "^3.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "find-yarn-workspace-root": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "micromatch": "^4.0.2" - } - }, - "flat": { - "version": "5.0.2" - }, - "flat-cache": { - "version": "3.0.4", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1" - }, - "for-each": { - "version": "0.3.3", - "requires": { - "is-callable": "^1.1.3" - } - }, - "forever-agent": { - "version": "0.6.1", - "dev": true, - "peer": true - }, - "form-data": { - "version": "3.0.1", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "dev": true, - "peer": true - }, - "fp-ts": { - "version": "1.19.3" - }, - "fresh": { - "version": "0.5.2", - "dev": true, - "peer": true -======= - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { -<<<<<<< HEAD - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" -======= - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" -<<<<<<< HEAD - } - }, - "fs.realpath": { - "version": "1.0.0" - }, - "fsevents": { - "version": "2.3.2", - "optional": true - }, - "function-bind": { - "version": "1.1.1" - }, - "function.prototype.name": { - "version": "1.1.5", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1" - }, - "functions-have-names": { - "version": "1.2.3" - }, - "ganache-core": { - "version": "2.13.2", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "3.0.0", - "async": "2.6.2", - "bip39": "2.5.0", - "cachedown": "1.0.0", - "clone": "2.1.2", - "debug": "3.2.6", - "encoding-down": "5.0.4", - "eth-sig-util": "3.0.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-account": "3.0.0", - "ethereumjs-block": "2.2.2", - "ethereumjs-common": "1.5.0", - "ethereumjs-tx": "2.1.2", - "ethereumjs-util": "6.2.1", - "ethereumjs-vm": "4.2.0", - "ethereumjs-wallet": "0.6.5", - "heap": "0.2.6", - "keccak": "3.0.1", - "level-sublevel": "6.6.4", - "levelup": "3.1.1", - "lodash": "4.17.20", - "lru-cache": "5.1.1", - "merkle-patricia-tree": "3.0.0", - "patch-package": "6.2.2", - "seedrandom": "3.0.1", - "source-map-support": "0.5.12", - "tmp": "0.1.0", - "web3": "1.2.11", - "web3-provider-engine": "14.2.1", - "websocket": "1.0.32" - }, - "dependencies": { - "@ethersproject/abi": { - "version": "5.0.0-beta.153", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/address": ">=5.0.0-beta.128", - "@ethersproject/bignumber": ">=5.0.0-beta.130", - "@ethersproject/bytes": ">=5.0.0-beta.129", - "@ethersproject/constants": ">=5.0.0-beta.128", - "@ethersproject/hash": ">=5.0.0-beta.128", - "@ethersproject/keccak256": ">=5.0.0-beta.127", - "@ethersproject/logger": ">=5.0.0-beta.129", - "@ethersproject/properties": ">=5.0.0-beta.131", - "@ethersproject/strings": ">=5.0.0-beta.130" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.0.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/networks": "^5.0.7", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/transactions": "^5.0.9", - "@ethersproject/web": "^5.0.12" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.0.10", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/abstract-provider": "^5.0.8", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7" - } - }, - "@ethersproject/address": { - "version": "5.0.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/rlp": "^5.0.7" - } - }, - "@ethersproject/base64": { - "version": "5.0.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bytes": "^5.0.9" - } - }, - "@ethersproject/bignumber": { - "version": "5.0.13", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/constants": { - "version": "5.0.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bignumber": "^5.0.13" - } - }, - "@ethersproject/hash": { - "version": "5.0.10", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/abstract-signer": "^5.0.10", - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.8", - "dev": true, - "optional": true, - "peer": true - }, - "@ethersproject/networks": { - "version": "5.0.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/properties": { - "version": "5.0.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/rlp": { - "version": "5.0.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/signing-key": { - "version": "5.0.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "elliptic": "6.5.3" - } - }, - "@ethersproject/strings": { - "version": "5.0.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/transactions": { - "version": "5.0.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/rlp": "^5.0.7", - "@ethersproject/signing-key": "^5.0.8" - } - }, - "@ethersproject/web": { - "version": "5.0.12", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/base64": "^5.0.7", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "dev": true, - "optional": true, - "peer": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@types/bn.js": { - "version": "4.11.6", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "14.14.20", - "dev": true, - "peer": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.1", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "abstract-leveldown": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "accepts": { - "version": "1.3.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "aes-js": { - "version": "3.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "ajv": { - "version": "6.12.6", - "dev": true, - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "arr-diff": { - "version": "4.0.0", - "dev": true, - "peer": true - }, - "arr-flatten": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "arr-union": { - "version": "3.1.0", - "dev": true, - "peer": true - }, - "array-flatten": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "array-unique": { - "version": "0.3.2", - "dev": true, - "peer": true - }, - "asn1": { - "version": "0.2.4", - "dev": true, - "peer": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "assign-symbols": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "async": { - "version": "2.6.2", - "dev": true, - "peer": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "dev": true, - "peer": true, - "requires": { - "async": "^2.4.0" - } - }, - "async-limiter": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "asynckit": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "atob": { - "version": "2.1.2", - "dev": true, - "peer": true - }, - "aws-sign2": { - "version": "0.7.0", - "dev": true, - "peer": true - }, - "aws4": { - "version": "1.11.0", - "dev": true, - "peer": true - }, - "babel-code-frame": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "dev": true, - "peer": true - }, - "ansi-styles": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "chalk": { - "version": "1.1.3", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "dev": true, - "peer": true - }, - "strip-ansi": { - "version": "3.0.1", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "dev": true, - "peer": true - } - } - }, - "babel-core": { - "version": "6.26.3", - "dev": true, - "peer": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "json5": { - "version": "0.5.1", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "slash": { - "version": "1.0.0", - "dev": true, - "peer": true - } - } - }, - "babel-generator": { - "version": "6.26.1", - "dev": true, - "peer": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "dev": true, - "peer": true - } - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "dev": true, - "peer": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "dev": true, - "peer": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "dev": true, - "peer": true - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "dev": true, - "peer": true, - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "regenerator-transform": "^0.10.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-preset-env": { - "version": "1.7.0", - "dev": true, - "peer": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "dev": true, - "peer": true - } - } - }, - "babel-register": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - }, - "dependencies": { - "source-map-support": { - "version": "0.4.18", - "dev": true, - "peer": true, - "requires": { - "source-map": "^0.5.6" - } - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.0.0", - "dev": true, - "peer": true - } - } - }, - "babel-types": { - "version": "6.26.0", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "dev": true, - "peer": true - } - } - }, - "babelify": { - "version": "7.3.0", - "dev": true, - "peer": true, - "requires": { - "babel-core": "^6.0.14", - "object-assign": "^4.0.0" - } - }, - "babylon": { - "version": "6.18.0", - "dev": true, - "peer": true - }, - "backoff": { - "version": "2.5.0", - "dev": true, - "peer": true, - "requires": { - "precond": "0.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "base": { - "version": "0.11.2", - "dev": true, - "peer": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "base-x": { - "version": "3.0.8", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "dev": true, - "peer": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "dev": true, - "peer": true - } - } - }, - "bignumber.js": { - "version": "9.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "bip39": { - "version": "2.5.0", - "dev": true, - "peer": true, - "requires": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" - } - }, - "blakejs": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "bluebird": { - "version": "3.7.2", - "dev": true, - "optional": true, - "peer": true - }, - "bn.js": { - "version": "4.11.9", - "dev": true, - "peer": true - }, - "body-parser": { - "version": "1.19.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "qs": { - "version": "6.7.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "peer": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "browserify-aes": { - "version": "1.2.0", - "dev": true, - "peer": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3", - "dev": true, - "optional": true, - "peer": true - }, - "readable-stream": { - "version": "3.6.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "browserslist": { - "version": "3.2.8", - "dev": true, - "peer": true, - "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - } - }, - "bs58": { - "version": "4.0.1", - "dev": true, - "peer": true, - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "5.7.1", - "dev": true, - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.1", - "dev": true, - "peer": true - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "dev": true, - "optional": true, - "peer": true - }, - "buffer-xor": { - "version": "1.0.3", - "dev": true, - "peer": true - }, - "bufferutil": { - "version": "4.0.3", - "dev": true, - "peer": true, - "requires": { - "node-gyp-build": "^4.2.0" - } - }, - "bytes": { - "version": "3.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "bytewise": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" - } - }, - "bytewise-core": { - "version": "1.2.3", - "dev": true, - "peer": true, - "requires": { - "typewise-core": "^1.2" - } - }, - "cache-base": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cacheable-request": { - "version": "6.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "cachedown": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "^2.4.1", - "lru-cache": "^3.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "lru-cache": { - "version": "3.2.0", - "dev": true, - "peer": true, - "requires": { - "pseudomap": "^1.0.1" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caseless": { - "version": "0.12.0", - "dev": true, - "peer": true - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "checkpoint-store": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "functional-red-black-tree": "^1.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "dev": true, - "optional": true, - "peer": true - }, - "ci-info": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "cids": { - "version": "0.7.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "dependencies": { - "multicodec": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-is": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "class-utils": { - "version": "0.3.6", - "dev": true, - "peer": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "dev": true, - "peer": true - } - } - }, - "clone": { - "version": "2.1.2", - "dev": true, - "peer": true - }, - "clone-response": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true, - "peer": true - }, - "combined-stream": { - "version": "1.0.8", - "dev": true, - "peer": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "dev": true, - "peer": true - }, - "concat-map": { - "version": "0.0.1", - "dev": true, - "peer": true - }, - "concat-stream": { - "version": "1.6.2", - "dev": true, - "peer": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "content-disposition": { - "version": "0.5.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "content-hash": { - "version": "2.5.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "content-type": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "cookie": { - "version": "0.4.0", - "dev": true, - "optional": true, - "peer": true - }, - "cookie-signature": { - "version": "1.0.6", - "dev": true, - "optional": true, - "peer": true - }, - "cookiejar": { - "version": "2.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "copy-descriptor": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "core-js": { - "version": "2.6.12", - "dev": true, - "peer": true - }, - "core-js-pure": { - "version": "3.8.2", - "dev": true, - "peer": true - }, - "core-util-is": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "cors": { - "version": "2.8.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-ecdh": { - "version": "4.0.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "create-hash": { - "version": "1.2.0", - "dev": true, - "peer": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "dev": true, - "peer": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-fetch": { - "version": "2.2.3", - "dev": true, - "peer": true, - "requires": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "d": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "3.2.6", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "dev": true, - "peer": true - }, - "decompress-response": { - "version": "3.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-equal": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "dev": true, - "optional": true, - "peer": true - }, - "deferred-leveldown": { - "version": "4.0.2", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~5.0.0", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "define-properties": { - "version": "1.1.3", - "dev": true, - "peer": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "defined": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "delayed-stream": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "des.js": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "detect-indent": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dom-walk": { - "version": "0.1.2", - "dev": true, - "peer": true - }, - "dotignore": { - "version": "0.1.2", - "dev": true, - "peer": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "duplexer3": { - "version": "0.1.4", - "dev": true, - "optional": true, - "peer": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "dev": true, - "peer": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "elliptic": { - "version": "6.5.3", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "encodeurl": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "encoding": { - "version": "0.1.13", - "dev": true, - "peer": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "dev": true, - "peer": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "encoding-down": { - "version": "5.0.4", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "^5.0.0", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "dev": true, - "peer": true, - "requires": { - "once": "^1.4.0" - } - }, - "errno": { - "version": "0.1.8", - "dev": true, - "peer": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.18.0-next.1", - "dev": true, - "peer": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "dev": true, - "peer": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "dev": true, - "peer": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "dev": true, - "peer": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "dev": true, - "peer": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-html": { - "version": "1.0.3", - "dev": true, - "optional": true, - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "peer": true - }, - "esutils": { - "version": "2.0.3", - "dev": true, - "peer": true - }, - "etag": { - "version": "1.8.1", - "dev": true, - "optional": true, - "peer": true - }, - "eth-block-tracker": { - "version": "3.0.1", - "dev": true, - "peer": true, - "requires": { - "eth-query": "^2.1.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.3", - "ethjs-util": "^0.1.3", - "json-rpc-engine": "^3.6.0", - "pify": "^2.3.0", - "tape": "^4.6.3" - }, - "dependencies": { - "ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "peer": true, - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "pify": { - "version": "2.3.0", - "dev": true, - "peer": true - } - } - }, - "eth-ens-namehash": { - "version": "2.0.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "eth-json-rpc-infura": { - "version": "3.2.1", - "dev": true, - "peer": true, - "requires": { - "cross-fetch": "^2.1.1", - "eth-json-rpc-middleware": "^1.5.0", - "json-rpc-engine": "^3.4.0", - "json-rpc-error": "^2.0.0" - } - }, - "eth-json-rpc-middleware": { - "version": "1.6.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.5.0", - "eth-query": "^2.1.2", - "eth-tx-summary": "^3.1.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.1.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^3.6.0", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "tape": "^4.6.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereum-common": { - "version": "0.2.0", - "dev": true, - "peer": true - } - } - }, - "ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "peer": true, - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "isarray": { - "version": "0.0.1", - "dev": true, - "peer": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true, - "peer": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "peer": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "peer": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "peer": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true, - "peer": true - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.4.1", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true, - "peer": true - } - } - }, - "eth-lib": { - "version": "0.1.29", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "eth-query": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "eth-sig-util": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.2.1", - "elliptic": "^6.4.0", - "ethereumjs-abi": "0.6.5", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.0", - "tweetnacl-util": "^0.15.0" - }, - "dependencies": { - "ethereumjs-abi": { - "version": "0.6.5", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^4.3.0" - }, - "dependencies": { - "ethereumjs-util": { - "version": "4.5.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.8.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.0.0" - } - } - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "eth-tx-summary": { - "version": "3.2.4", - "dev": true, - "peer": true, - "requires": { - "async": "^2.1.2", - "clone": "^2.0.0", - "concat-stream": "^1.5.1", - "end-of-stream": "^1.1.0", - "eth-query": "^2.0.2", - "ethereumjs-block": "^1.4.1", - "ethereumjs-tx": "^1.1.1", - "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "^2.6.0", - "through2": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereum-common": { - "version": "0.2.0", - "dev": true, - "peer": true - } - } - }, - "ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "peer": true, - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "isarray": { - "version": "0.0.1", - "dev": true, - "peer": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true, - "peer": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "peer": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "peer": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "peer": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true, - "peer": true - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.4.1", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true, - "peer": true - } - } - }, - "ethashjs": { - "version": "0.0.8", - "dev": true, - "peer": true, - "requires": { - "async": "^2.1.2", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.0.2", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3", - "dev": true, - "peer": true - }, - "buffer-xor": { - "version": "2.0.2", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-util": { - "version": "7.0.7", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.4" - } - } - } - }, - "ethereum-bloom-filters": { - "version": "1.0.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "js-sha3": "^0.8.0" - }, - "dependencies": { - "js-sha3": { - "version": "0.8.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "ethereum-common": { - "version": "0.0.18", - "dev": true, - "peer": true - }, - "ethereum-cryptography": { - "version": "0.1.3", - "dev": true, - "peer": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-account": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-util": "^6.0.0", - "rlp": "^2.2.1", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "isarray": { - "version": "0.0.1", - "dev": true, - "peer": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true, - "peer": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "peer": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "peer": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "peer": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true, - "peer": true - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.4.1", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true, - "peer": true - } - } - }, - "ethereumjs-blockchain": { - "version": "4.0.4", - "dev": true, - "peer": true, - "requires": { - "async": "^2.6.1", - "ethashjs": "~0.0.7", - "ethereumjs-block": "~2.2.2", - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.1.0", - "flow-stoplight": "^1.0.0", - "level-mem": "^3.0.1", - "lru-cache": "^5.1.1", - "rlp": "^2.2.2", - "semaphore": "^1.1.0" - } - }, - "ethereumjs-common": { - "version": "1.5.0", - "dev": true, - "peer": true - }, - "ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "ethereumjs-vm": { - "version": "4.2.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "core-js-pure": "^3.0.1", - "ethereumjs-account": "^3.0.0", - "ethereumjs-block": "^2.2.2", - "ethereumjs-blockchain": "^4.0.3", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.2", - "ethereumjs-util": "^6.2.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1", - "util.promisify": "^1.0.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "isarray": { - "version": "0.0.1", - "dev": true, - "peer": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true, - "peer": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "peer": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "peer": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "peer": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true, - "peer": true - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.4.1", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true, - "peer": true - } - } - }, - "ethereumjs-wallet": { - "version": "0.6.5", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "aes-js": "^3.1.1", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^6.0.0", - "randombytes": "^2.0.6", - "safe-buffer": "^5.1.2", - "scryptsy": "^1.2.1", - "utf8": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "eventemitter3": { - "version": "4.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "events": { - "version": "3.2.0", - "dev": true, - "peer": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "dev": true, - "peer": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "kind-of": { - "version": "5.1.0", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.0.0", - "dev": true, - "peer": true - } - } - }, - "express": { - "version": "4.17.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "qs": { - "version": "6.7.0", - "dev": true, - "optional": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "ext": { - "version": "1.4.0", - "dev": true, - "peer": true, - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.1.0", - "dev": true, - "peer": true - } - } - }, - "extend": { - "version": "3.0.2", - "dev": true, - "peer": true - }, - "extend-shallow": { - "version": "3.0.2", - "dev": true, - "peer": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "extglob": { - "version": "2.0.4", - "dev": true, - "peer": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "dev": true, - "peer": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "dev": true, - "peer": true - }, - "fake-merkle-patricia-tree": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "checkpoint-store": "^1.1.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "peer": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "peer": true - }, - "fetch-ponyfill": { - "version": "4.1.0", - "dev": true, - "peer": true, - "requires": { - "node-fetch": "~1.7.1" - }, - "dependencies": { - "is-stream": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "node-fetch": { - "version": "1.7.3", - "dev": true, - "peer": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "find-yarn-workspace-root": { - "version": "1.2.1", - "dev": true, - "peer": true, - "requires": { - "fs-extra": "^4.0.3", - "micromatch": "^3.1.4" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "dev": true, - "peer": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fs-extra": { - "version": "4.0.3", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-extendable": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "is-number": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "dev": true, - "peer": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "dev": true, - "peer": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "flow-stoplight": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "for-each": { - "version": "0.3.3", - "dev": true, - "peer": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "forever-agent": { - "version": "0.6.1", - "dev": true, - "peer": true - }, - "form-data": { - "version": "2.3.3", - "dev": true, - "peer": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "fragment-cache": { - "version": "0.2.1", - "dev": true, - "peer": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "dev": true, - "optional": true, - "peer": true - }, - "fs-extra": { - "version": "7.0.1", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true, - "peer": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "get-intrinsic": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "5.2.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "dev": true, - "peer": true - }, - "getpass": { - "version": "0.1.7", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "dev": true, - "peer": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global": { - "version": "4.4.0", - "dev": true, - "peer": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "got": { - "version": "9.6.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "graceful-fs": { - "version": "4.2.4", - "dev": true, - "peer": true - }, - "har-schema": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "har-validator": { - "version": "5.1.5", - "dev": true, - "peer": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "dev": true, - "peer": true - } - } - }, - "has-flag": { - "version": "3.0.0", - "dev": true, - "peer": true - }, - "has-symbol-support-x": { - "version": "1.4.2", - "dev": true, - "optional": true, - "peer": true - }, - "has-symbols": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "has-value": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-number": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "hash.js": { - "version": "1.1.7", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "heap": { - "version": "0.2.6", - "dev": true, - "peer": true - }, - "hmac-drbg": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "home-or-tmp": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "http-errors": { - "version": "1.7.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "http-https": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "http-signature": { - "version": "1.2.0", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "ieee754": { - "version": "1.2.1", - "dev": true, - "peer": true - }, - "immediate": { - "version": "3.2.3", - "dev": true, - "peer": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "peer": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true, - "peer": true - }, - "invariant": { - "version": "2.2.4", - "dev": true, - "peer": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "1.9.1", - "dev": true, - "optional": true, - "peer": true - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-arguments": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.2", - "dev": true, - "peer": true - }, - "is-ci": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-date-object": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "is-descriptor": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-finite": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "is-fn": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "is-function": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "is-hex-prefixed": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "is-negative-zero": { - "version": "2.0.1", - "dev": true, - "peer": true - }, - "is-object": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "is-plain-obj": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "is-plain-object": { - "version": "2.0.4", - "dev": true, - "peer": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "dev": true, - "optional": true, - "peer": true - }, - "is-symbol": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "is-windows": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "isexe": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "isstream": { - "version": "0.1.2", - "dev": true, - "peer": true - }, - "isurl": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "js-sha3": { - "version": "0.5.7", - "dev": true, - "optional": true, - "peer": true - }, - "jsbn": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "json-buffer": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "json-rpc-engine": { - "version": "3.8.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "babel-preset-env": "^1.7.0", - "babelify": "^7.3.0", - "json-rpc-error": "^2.0.0", - "promise-to-callback": "^1.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "json-rpc-error": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1" - } - }, - "json-rpc-random-id": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "json-schema": { - "version": "0.2.3", - "dev": true, - "peer": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "peer": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "peer": true - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "dev": true, - "peer": true - }, - "jsprim": { - "version": "1.4.1", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "keccak": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "keyv": { - "version": "3.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "klaw-sync": { - "version": "6.0.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.11" - } - }, - "level-codec": { - "version": "9.0.2", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.6.0" - } - }, - "level-errors": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "2.0.3", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.5", - "xtend": "^4.0.0" - } - }, - "level-mem": { - "version": "3.0.1", - "dev": true, - "peer": true, - "requires": { - "level-packager": "~4.0.0", - "memdown": "~3.0.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "memdown": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~5.0.0", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - } - } - }, - "level-packager": { - "version": "4.0.1", - "dev": true, - "peer": true, - "requires": { - "encoding-down": "~5.0.0", - "levelup": "^3.0.0" - } - }, - "level-post": { - "version": "1.0.7", - "dev": true, - "peer": true, - "requires": { - "ltgt": "^2.1.2" - } - }, - "level-sublevel": { - "version": "6.6.4", - "dev": true, - "peer": true, - "requires": { - "bytewise": "~1.1.0", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "level-iterator-stream": "^2.0.3", - "ltgt": "~2.1.1", - "pull-defer": "^0.2.2", - "pull-level": "^2.0.3", - "pull-stream": "^3.6.8", - "typewiselite": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "level-ws": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.8", - "xtend": "^4.0.1" - } - }, - "levelup": { - "version": "3.1.1", - "dev": true, - "peer": true, - "requires": { - "deferred-leveldown": "~4.0.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~3.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "level-iterator-stream": { - "version": "3.0.1", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "xtend": "^4.0.0" - } - } - } - }, - "lodash": { - "version": "4.17.20", - "dev": true, - "peer": true - }, - "looper": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "loose-envify": { - "version": "1.4.0", - "dev": true, - "peer": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "lru-cache": { - "version": "5.1.1", - "dev": true, - "peer": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "ltgt": { - "version": "2.1.3", - "dev": true, - "peer": true - }, - "map-cache": { - "version": "0.2.2", - "dev": true, - "peer": true - }, - "map-visit": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "dev": true, - "peer": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "dev": true, - "optional": true, - "peer": true - }, - "merge-descriptors": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "merkle-patricia-tree": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.6.1", - "ethereumjs-util": "^5.2.0", - "level-mem": "^3.0.1", - "level-ws": "^1.0.0", - "readable-stream": "^3.0.6", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "methods": { - "version": "1.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "miller-rabin": { - "version": "4.0.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "dev": true, - "optional": true, - "peer": true - }, - "mime-db": { - "version": "1.45.0", - "dev": true, - "peer": true - }, - "mime-types": { - "version": "2.1.28", - "dev": true, - "peer": true, - "requires": { - "mime-db": "1.45.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "min-document": { - "version": "2.19.0", - "dev": true, - "peer": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "minimatch": { - "version": "3.0.4", - "dev": true, - "peer": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "dev": true, - "peer": true - }, - "minizlib": { - "version": "1.3.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^2.9.0" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "mixin-deep": { - "version": "1.3.2", - "dev": true, - "peer": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "mkdirp": { - "version": "0.5.5", - "dev": true, - "peer": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mkdirp-promise": { - "version": "5.0.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "mkdirp": "*" - } - }, - "mock-fs": { - "version": "4.13.0", - "dev": true, - "optional": true, - "peer": true - }, - "ms": { - "version": "2.1.3", - "dev": true, - "peer": true - }, - "multibase": { - "version": "0.6.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "multicodec": { - "version": "0.5.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "varint": "^5.0.0" - } - }, - "multihashes": { - "version": "0.4.21", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - }, - "dependencies": { - "multibase": { - "version": "0.7.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - } - } - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "nanomatch": { - "version": "1.2.13", - "dev": true, - "peer": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "negotiator": { - "version": "0.6.2", - "dev": true, - "optional": true, - "peer": true - }, - "next-tick": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "nice-try": { - "version": "1.0.5", - "dev": true, - "peer": true - }, - "node-addon-api": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "peer": true - }, - "node-fetch": { - "version": "2.1.2", - "dev": true, - "peer": true - }, - "node-gyp-build": { - "version": "4.2.3", - "bundled": true, - "dev": true, - "peer": true - }, - "normalize-url": { - "version": "4.5.0", - "dev": true, - "optional": true, - "peer": true - }, - "number-to-bn": { - "version": "1.7.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "dev": true, - "peer": true - }, - "object-assign": { - "version": "4.1.1", - "dev": true, - "peer": true - }, - "object-copy": { - "version": "0.1.0", - "dev": true, - "peer": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "dev": true, - "peer": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.9.0", - "dev": true, - "peer": true - }, - "object-is": { - "version": "1.1.4", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "dev": true, - "peer": true - }, - "object-visit": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.1", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "dev": true, - "peer": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "oboe": { - "version": "2.1.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "http-https": "^1.0.0" - } - }, - "on-finished": { - "version": "2.3.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "dev": true, - "peer": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "os-tmpdir": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "p-cancelable": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "p-timeout": { - "version": "1.2.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "parse-asn1": { - "version": "5.1.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-headers": { - "version": "2.0.3", - "dev": true, - "peer": true - }, - "parseurl": { - "version": "1.3.3", - "dev": true, - "optional": true, - "peer": true - }, - "pascalcase": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "patch-package": { - "version": "6.2.2", - "dev": true, - "peer": true, - "requires": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^1.2.1", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "dev": true, - "peer": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.7.1", - "dev": true, - "peer": true - }, - "shebang-command": { - "version": "1.2.0", - "dev": true, - "peer": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "slash": { - "version": "2.0.0", - "dev": true, - "peer": true - }, - "tmp": { - "version": "0.0.33", - "dev": true, - "peer": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "which": { - "version": "1.3.1", - "dev": true, - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "path-parse": { - "version": "1.0.6", - "dev": true, - "peer": true - }, - "path-to-regexp": { - "version": "0.1.7", - "dev": true, - "optional": true, - "peer": true - }, - "pbkdf2": { - "version": "3.1.1", - "dev": true, - "peer": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "dev": true, - "peer": true - }, - "posix-character-classes": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "precond": { - "version": "0.2.3", - "dev": true, - "peer": true - }, - "prepend-http": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "private": { - "version": "0.1.8", - "dev": true, - "peer": true - }, - "process": { - "version": "0.11.10", - "dev": true, - "peer": true - }, - "promise-to-callback": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - } - }, - "proxy-addr": { - "version": "2.0.6", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "pseudomap": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "psl": { - "version": "1.8.0", - "dev": true, - "peer": true - }, - "public-encrypt": { - "version": "4.0.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pull-cat": { - "version": "1.1.11", - "dev": true, - "peer": true - }, - "pull-defer": { - "version": "0.2.3", - "dev": true, - "peer": true - }, - "pull-level": { - "version": "2.0.4", - "dev": true, - "peer": true, - "requires": { - "level-post": "^1.0.7", - "pull-cat": "^1.1.9", - "pull-live": "^1.0.1", - "pull-pushable": "^2.0.0", - "pull-stream": "^3.4.0", - "pull-window": "^2.1.4", - "stream-to-pull-stream": "^1.7.1" - } - }, - "pull-live": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "pull-cat": "^1.1.9", - "pull-stream": "^3.4.0" - } - }, - "pull-pushable": { - "version": "2.2.0", - "dev": true, - "peer": true - }, - "pull-stream": { - "version": "3.6.14", - "dev": true, - "peer": true - }, - "pull-window": { - "version": "2.1.4", - "dev": true, - "peer": true, - "requires": { - "looper": "^2.0.0" - } - }, - "pump": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "dev": true, - "peer": true - }, - "qs": { - "version": "6.5.2", - "dev": true, - "peer": true - }, - "query-string": { - "version": "5.1.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "dev": true, - "optional": true, - "peer": true - }, - "raw-body": { - "version": "2.4.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - } - } - }, - "regenerate": { - "version": "1.4.2", - "dev": true, - "peer": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "dev": true, - "peer": true - }, - "regenerator-transform": { - "version": "0.10.1", - "dev": true, - "peer": true, - "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "dev": true, - "peer": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "dev": true, - "peer": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "regexpu-core": { - "version": "2.0.0", - "dev": true, - "peer": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "regjsgen": { - "version": "0.2.0", - "dev": true, - "peer": true - }, - "regjsparser": { - "version": "0.1.5", - "dev": true, - "peer": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "dev": true, - "peer": true - } - } - }, - "repeat-element": { - "version": "1.1.3", - "dev": true, - "peer": true - }, - "repeat-string": { - "version": "1.6.1", - "dev": true, - "peer": true - }, - "repeating": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.2", - "dev": true, - "peer": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "resolve-url": { - "version": "0.2.1", - "dev": true, - "peer": true - }, - "responselike": { - "version": "1.0.2", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "resumer": { - "version": "0.0.0", - "dev": true, - "peer": true, - "requires": { - "through": "~2.3.4" - } - }, - "ret": { - "version": "0.1.15", - "dev": true, - "peer": true - }, - "rimraf": { - "version": "2.6.3", - "dev": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "dev": true, - "peer": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.6", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.1" - } - }, - "rustbn.js": { - "version": "0.2.0", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.2.1", - "dev": true, - "peer": true - }, - "safe-event-emitter": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "events": "^3.0.0" - } - }, - "safe-regex": { - "version": "1.1.0", - "dev": true, - "peer": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "dev": true, - "peer": true - }, - "scrypt-js": { - "version": "3.0.1", - "dev": true, - "peer": true - }, - "scryptsy": { - "version": "1.2.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "pbkdf2": "^3.0.3" - } - }, - "secp256k1": { - "version": "4.0.2", - "dev": true, - "peer": true, - "requires": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "seedrandom": { - "version": "3.0.1", - "dev": true, - "peer": true - }, - "semaphore": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "send": { - "version": "0.17.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "ms": { - "version": "2.1.1", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "servify": { - "version": "0.1.12", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, - "set-immediate-shim": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "set-value": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "dev": true, - "peer": true - } - } - }, - "setimmediate": { - "version": "1.0.5", - "dev": true, - "peer": true - }, - "setprototypeof": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "sha.js": { - "version": "2.4.11", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "simple-concat": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "simple-get": { - "version": "2.8.1", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "dev": true, - "peer": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "kind-of": { - "version": "5.1.0", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.0.0", - "dev": true, - "peer": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "dev": true, - "peer": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "dev": true, - "peer": true - }, - "source-map-resolve": { - "version": "0.5.3", - "dev": true, - "peer": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.12", - "dev": true, - "peer": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true, - "peer": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "split-string": { - "version": "3.1.0", - "dev": true, - "peer": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sshpk": { - "version": "1.16.1", - "dev": true, - "peer": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "dev": true, - "peer": true - } - } - }, - "static-extend": { - "version": "0.1.2", - "dev": true, - "peer": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "dev": true, - "peer": true - } - } - }, - "statuses": { - "version": "1.5.0", - "dev": true, - "optional": true, - "peer": true - }, - "stream-to-pull-stream": { - "version": "1.7.3", - "dev": true, - "peer": true, - "requires": { - "looper": "^3.0.0", - "pull-stream": "^3.2.3" - }, - "dependencies": { - "looper": { - "version": "3.0.0", - "dev": true, - "peer": true - } - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "string_decoder": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - } - } - }, - "string.prototype.trim": { - "version": "1.2.3", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "swarm-js": { - "version": "0.1.40", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "4.0.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "get-stream": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "got": { - "version": "7.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true - }, - "p-cancelable": { - "version": "0.3.0", - "dev": true, - "optional": true, - "peer": true - }, - "prepend-http": { - "version": "1.0.4", - "dev": true, - "optional": true, - "peer": true - }, - "url-parse-lax": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "tape": { - "version": "4.13.3", - "dev": true, - "peer": true, - "requires": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.5", - "object-inspect": "~1.7.0", - "resolve": "~1.17.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "dev": true, - "peer": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "is-regex": { - "version": "1.0.5", - "dev": true, - "peer": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-inspect": { - "version": "1.7.0", - "dev": true, - "peer": true - }, - "resolve": { - "version": "1.17.0", - "dev": true, - "peer": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "tar": { - "version": "4.4.13", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "dependencies": { - "fs-minipass": { - "version": "1.2.7", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "minipass": { - "version": "2.9.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "through": { - "version": "2.3.8", - "dev": true, - "peer": true - }, - "through2": { - "version": "2.0.5", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timed-out": { - "version": "4.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "tmp": { - "version": "0.1.0", - "dev": true, - "peer": true, - "requires": { - "rimraf": "^2.6.3" - } - }, - "to-object-path": { - "version": "0.3.0", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "dev": true, - "peer": true - }, - "kind-of": { - "version": "3.2.2", - "dev": true, - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-readable-stream": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "to-regex": { - "version": "3.0.2", - "dev": true, - "peer": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "tough-cookie": { - "version": "2.5.0", - "dev": true, - "peer": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "trim-right": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "tunnel-agent": { - "version": "0.6.0", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "1.0.3", - "dev": true, - "peer": true - }, - "tweetnacl-util": { - "version": "0.15.1", - "dev": true, - "peer": true - }, - "type": { - "version": "1.2.0", - "dev": true, - "peer": true - }, - "type-is": { - "version": "1.6.18", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "peer": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typewise": { - "version": "1.0.3", - "dev": true, - "peer": true, - "requires": { - "typewise-core": "^1.2.0" - } - }, - "typewise-core": { - "version": "1.2.0", - "dev": true, - "peer": true - }, - "typewiselite": { - "version": "1.0.0", - "dev": true, - "peer": true - }, - "ultron": { - "version": "1.1.1", - "dev": true, - "optional": true, - "peer": true - }, - "underscore": { - "version": "1.9.1", - "dev": true, - "optional": true, - "peer": true - }, - "union-value": { - "version": "1.0.1", - "dev": true, - "peer": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "dev": true, - "peer": true - } - } - }, - "universalify": { - "version": "0.1.2", - "dev": true, - "peer": true - }, - "unorm": { - "version": "1.6.0", - "dev": true, - "peer": true - }, - "unpipe": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "unset-value": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "dev": true, - "peer": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "dev": true, - "peer": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "dev": true, - "peer": true - } - } - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "peer": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "dev": true, - "peer": true - }, - "url-parse-lax": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-set-query": { - "version": "1.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "url-to-options": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "use": { - "version": "3.1.1", - "dev": true, - "peer": true - }, - "utf-8-validate": { - "version": "5.0.4", - "dev": true, - "peer": true, - "requires": { - "node-gyp-build": "^4.2.0" - } - }, - "utf8": { - "version": "3.0.0", - "dev": true, - "optional": true, - "peer": true - }, - "util-deprecate": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "util.promisify": { - "version": "1.1.1", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" - } - }, - "utils-merge": { - "version": "1.0.1", - "dev": true, - "optional": true, - "peer": true - }, - "uuid": { - "version": "3.4.0", - "dev": true, - "peer": true - }, - "varint": { - "version": "5.0.2", - "dev": true, - "optional": true, - "peer": true - }, - "vary": { - "version": "1.1.2", - "dev": true, - "optional": true, - "peer": true - }, - "verror": { - "version": "1.10.0", - "dev": true, - "peer": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "web3": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "web3-bzz": "1.2.11", - "web3-core": "1.2.11", - "web3-eth": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-shh": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-bzz": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - }, - "dependencies": { - "@types/node": { - "version": "12.19.12", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "web3-core": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.5", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-requestmanager": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "@types/node": { - "version": "12.19.12", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "web3-core-helpers": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-core-method": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-core-promievent": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-core-requestmanager": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-providers-http": "1.2.11", - "web3-providers-ipc": "1.2.11", - "web3-providers-ws": "1.2.11" - } - }, - "web3-core-subscriptions": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - } - }, - "web3-eth": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-accounts": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-eth-ens": "1.2.11", - "web3-eth-iban": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-eth-abi": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@ethersproject/abi": "5.0.0-beta.153", - "underscore": "1.9.1", - "web3-utils": "1.2.11" - } - }, - "web3-eth-accounts": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "uuid": { - "version": "3.3.2", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "web3-eth-contract": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.5", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-eth-ens": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-eth-iban": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.2.11" - } - }, - "web3-eth-personal": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@types/node": "^12.12.6", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "@types/node": { - "version": "12.19.12", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "web3-net": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - } - }, - "web3-provider-engine": { - "version": "14.2.1", - "dev": true, - "peer": true, - "requires": { - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^3.0.0", - "eth-json-rpc-infura": "^3.1.0", - "eth-sig-util": "^1.4.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.2.0", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "eth-sig-util": { - "version": "1.4.2", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereum-common": { - "version": "0.2.0", - "dev": true, - "peer": true - } - } - }, - "ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "peer": true, - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "peer": true, - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "peer": true, - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "isarray": { - "version": "0.0.1", - "dev": true, - "peer": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true, - "peer": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "peer": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "peer": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "peer": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "peer": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true, - "peer": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "peer": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "peer": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true, - "peer": true - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true, - "peer": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.4.1", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true, - "peer": true - }, - "ws": { - "version": "5.2.2", - "dev": true, - "peer": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "web3-providers-http": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "web3-core-helpers": "1.2.11", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - } - }, - "web3-providers-ws": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "websocket": "^1.0.31" - } - }, - "web3-shh": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-net": "1.2.11" - } - }, - "web3-utils": { - "version": "1.2.11", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - } - } - }, - "websocket": { - "version": "1.0.32", - "dev": true, - "peer": true, - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "peer": true - } - } - }, - "whatwg-fetch": { - "version": "2.0.4", - "dev": true, - "peer": true - }, - "wrappy": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "ws": { - "version": "3.3.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "xhr": { - "version": "2.6.0", - "dev": true, - "peer": true, - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "xhr-request-promise": { - "version": "0.1.3", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "xhr-request": "^1.1.0" - } - }, - "xhr2-cookies": { - "version": "1.1.0", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "cookiejar": "^2.1.1" - } - }, - "xtend": { - "version": "4.0.2", - "dev": true, - "peer": true - }, - "yaeti": { - "version": "0.0.6", - "dev": true, - "peer": true - }, - "yallist": { - "version": "3.1.1", - "dev": true, - "peer": true - } -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", - "dev": true, - "requires": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", - "dev": true, - "requires": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", - "dev": true, - "requires": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } - } - }, - "git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", - "dev": true, - "requires": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "git-up": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-6.0.0.tgz", - "integrity": "sha512-6RUFSNd1c/D0xtGnyWN2sxza2bZtZ/EmI9448n6rCZruFwV/ezeEn2fJP7XnUQGwf0RAtd/mmUCbtH6JPYA2SA==", - "dev": true, - "requires": { - "is-ssh": "^1.4.0", - "parse-url": "^7.0.2" - } - }, - "git-url-parse": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-12.0.0.tgz", - "integrity": "sha512-I6LMWsxV87vysX1WfsoglXsXg6GjQRKq7+Dgiseo+h0skmp5Hp2rzmcEIRQot9CPA+uzU7x1x7jZdqvTFGnB+Q==", - "dev": true, - "requires": { - "git-up": "^6.0.0" - } - }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", - "dev": true, - "requires": { - "ini": "^1.3.2" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "hardhat": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.10.1.tgz", - "integrity": "sha512-0FN9TyCtn7Lt25SB2ei2G7nA2rZjP+RN6MvFOm+zYwherxLZNo6RbD8nDz88eCbhRapevmXqOiL2nM8INKsjmA==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/blockchain": "^5.5.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/tx": "^3.5.1", - "@ethereumjs/vm": "^5.9.0", - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@sentry/node": "^5.18.1", - "@solidity-parser/parser": "^0.14.2", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^7.1.4", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "lodash": "^4.17.11", - "merkle-patricia-tree": "^4.2.4", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "slash": "^3.0.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "true-case-path": "^2.2.1", - "tsort": "0.0.1", - "undici": "^5.4.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "ethereum-cryptography": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", - "dev": true, - "requires": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - } - } - }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - } - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "init-package-json": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz", - "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", - "dev": true, - "requires": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } - } - }, - "inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - } - }, - "io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "requires": { - "fp-ts": "^1.0.0" - } - }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { -<<<<<<< HEAD - "version": "2.1.1" - }, - "is-fullwidth-code-point": { - "version": "3.0.0" - }, - "is-function": { - "version": "1.0.2", - "dev": true, - "peer": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "requires": { - "has-tostringtag": "^1.0.0" - } -======= - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "dev": true - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, - "requires": { - "protocols": "^2.0.1" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, -<<<<<<< HEAD - "isstream": { - "version": "0.1.2", - "dev": true, - "peer": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "isurl": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "jest-changed-files": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", - "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } - } - }, - "jest-circus": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", - "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } - } - }, - "jest-cli": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", - "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", - "dev": true, - "requires": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "dependencies": { - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true - } - } - }, - "jest-config": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", - "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - } - } - }, - "jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-docblock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", - "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", - "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" - } - }, - "jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true - }, - "jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", - "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", - "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true - }, - "jest-resolve": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", - "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", - "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", - "dev": true, - "requires": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" - } - }, - "jest-runner": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", - "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } - } - }, - "jest-runtime": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", - "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-snapshot": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", - "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" - } - }, - "jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - } - } - }, - "jest-validate": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", - "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "leven": "^3.1.0", - "pretty-format": "^28.1.3" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, -<<<<<<< HEAD - "jsbn": { - "version": "0.1.1", - "dev": true, - "peer": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.0", - "dev": true, - "peer": true - }, -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-stringify-nice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true - }, - "just-diff": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.0.3.tgz", - "integrity": "sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg==", - "dev": true - }, - "just-diff-apply": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.3.1.tgz", - "integrity": "sha512-dgFenZnMsc1xGNqgdtgnh7DK+Oy352CE3VZLbzcbQpsBs9iI2K3M0IRrdgREZ72eItTjbl0suRyvKRdVQa9GbA==", - "dev": true - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "klaw": { - "version": "1.3.1", -<<<<<<< HEAD - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "klaw-sync": { - "version": "6.0.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.11" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "lcid": { - "version": "1.0.0", -======= - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "lerna": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.3.0.tgz", - "integrity": "sha512-0Y9xJqleVu0ExGmsw2WM/GkVmxOwtA7OLQFS5ERPKJfnsxH9roTX3a7NPaGQRI2E+tSJLJJGgNSf3WYEqinOqA==", - "dev": true, - "requires": { - "@lerna/add": "5.3.0", - "@lerna/bootstrap": "5.3.0", - "@lerna/changed": "5.3.0", - "@lerna/clean": "5.3.0", - "@lerna/cli": "5.3.0", - "@lerna/create": "5.3.0", - "@lerna/diff": "5.3.0", - "@lerna/exec": "5.3.0", - "@lerna/import": "5.3.0", - "@lerna/info": "5.3.0", - "@lerna/init": "5.3.0", - "@lerna/link": "5.3.0", - "@lerna/list": "5.3.0", - "@lerna/publish": "5.3.0", - "@lerna/run": "5.3.0", - "@lerna/version": "5.3.0", - "import-local": "^3.0.2", - "npmlog": "^6.0.2", - "nx": ">=14.4.3 < 16" - } - }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "requires": { - "buffer": "^5.6.0" - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - } - }, - "level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dev": true, - "requires": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - } - }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dev": true, - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - }, - "level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, -<<<<<<< HEAD - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "libnpmaccess": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.3.tgz", - "integrity": "sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg==", - "dev": true, - "requires": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } - } - }, - "libnpmpublish": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.4.tgz", - "integrity": "sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg==", - "dev": true, - "requires": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", - "ssri": "^9.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "make-fetch-happen": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz", - "integrity": "sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", - "dev": true - } - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true - }, - "meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - } - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "requires": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, - "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "mkdirp-infer-owner": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "requires": { - "obliterator": "^2.0.0" - } - }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - } - } - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, - "node-gyp": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz", - "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - } - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-package-arg": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", - "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", - "dev": true, - "requires": { - "hosted-git-info": "^3.0.6", - "semver": "^7.0.0", - "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, - "hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "npm-packlist": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", - "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "npm-pick-manifest": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", - "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", - "dev": true, - "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } - } - }, - "npm-registry-fetch": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.0.tgz", - "integrity": "sha512-10LJQ/1+VhKrZjIuY9I/+gQTvumqqlgnsCufoXETHAPFTS3+M+Z5CFhZRDHGavmJ6rOye3UvNga88vl8n1r6gg==", - "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "nx": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.5.2.tgz", - "integrity": "sha512-I6KWVMR5Ksj/HgderkcmJmyaqHdWblQeFUeVq9to263Wr3QCIRigbvdDI3rq3ZQCBMyhUSOVP9MFXROoRVtJXQ==", - "dev": true, - "requires": { - "@nrwl/cli": "14.5.2", - "@nrwl/tao": "14.5.2", - "@parcel/watcher": "2.0.4", - "chalk": "4.1.0", - "chokidar": "^3.5.1", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", - "enquirer": "~2.3.6", - "fast-glob": "3.2.7", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^10.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "js-yaml": "4.1.0", - "jsonc-parser": "3.0.0", - "minimatch": "3.0.5", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.3.4", - "string-width": "^4.2.3", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^3.9.0", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.4.0", - "yargs-parser": "21.0.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@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" - } - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-map-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", - "dev": true - }, - "p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true - }, - "p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - } - }, - "p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", - "dev": true, - "requires": { - "p-reduce": "^2.0.0" - } - }, - "pacote": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", - "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", - "dev": true, - "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, - "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-conflict-json": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", - "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@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" - } - }, - "parse-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-5.0.0.tgz", - "integrity": "sha512-qOpH55/+ZJ4jUu/oLO+ifUKjFPNZGfnPJtzvGzKN/4oLMil5m9OH4VpOj6++9/ytJcfks4kzH2hhi87GL/OU9A==", - "dev": true, - "requires": { - "protocols": "^2.0.0" - } - }, - "parse-url": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-7.0.2.tgz", - "integrity": "sha512-PqO4Z0eCiQ08Wj6QQmrmp5YTTxpYfONdOEamrtvK63AmzXpcavIVQubGHxOEwiIoDZFb8uDOoQFS0NCcjqIYQg==", - "dev": true, - "requires": { - "is-ssh": "^1.4.0", - "normalize-url": "^6.1.0", - "parse-path": "^5.0.0", - "protocols": "^2.0.1" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, -<<<<<<< HEAD - "performance-now": { - "version": "2.1.0", - "dev": true, - "peer": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - }, -<<<<<<< HEAD - "pinkie": { - "version": "2.0.4", - "dev": true, - "peer": true - }, - "pinkie-promise": { - "version": "2.0.1", - "dev": true, - "peer": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, -<<<<<<< HEAD - "prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "dev": true - }, - "promise-call-limit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", - "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", - "dev": true, - "requires": { - "read": "1" - } - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true - }, - "protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", - "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", - "dev": true - }, - "read-package-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", - "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - } - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, -<<<<<<< HEAD - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "dev": true, - "peer": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dev": true, - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true - }, - "rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "dev": true, - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, -<<<<<<< HEAD - "simple-concat": { - "version": "1.0.1", - "dev": true, - "peer": true - }, - "simple-get": { - "version": "2.8.2", - "dev": true, - "peer": true, - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "socks": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", - "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", - "dev": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", - "dev": true, - "requires": { - "is-plain-obj": "^2.0.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "requires": { - "readable-stream": "^3.0.0" - } - }, -<<<<<<< HEAD - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "sshpk": { - "version": "1.17.0", - "dev": true, - "peer": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "dev": true, - "peer": true - } - } - }, -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - } - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - } - }, - "supports-color": { - "version": "7.2.0", -<<<<<<< HEAD - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true - }, - "swarm-js": { - "version": "0.1.40", - "dev": true, - "peer": true, - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "dev": true, - "peer": true - }, - "fs-extra": { - "version": "4.0.3", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "dev": true, - "peer": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "get-stream": { - "version": "3.0.0", - "dev": true, - "peer": true - }, - "got": { - "version": "7.1.0", - "dev": true, - "peer": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "minipass": { - "version": "2.9.0", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "dev": true, - "peer": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.6", - "dev": true, - "peer": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "p-cancelable": { - "version": "0.3.0", - "dev": true, - "peer": true - }, - "p-timeout": { - "version": "1.2.1", - "dev": true, - "peer": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "prepend-http": { - "version": "1.0.4", - "dev": true, - "peer": true - }, - "tar": { - "version": "4.4.19", - "dev": true, - "peer": true, - "requires": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - } - }, - "universalify": { - "version": "0.1.2", - "dev": true, - "peer": true - }, - "url-parse-lax": { - "version": "1.0.0", - "dev": true, - "peer": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "yallist": { - "version": "3.1.1", - "dev": true, - "peer": true - } - } - }, - "table-layout": { - "version": "1.0.2", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "dev": true - }, - "typical": { - "version": "5.2.0", - "dev": true - } -======= - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - } - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true - }, -<<<<<<< HEAD - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "test-value": { - "version": "2.1.0", - "dev": true, - "peer": true, - "requires": { - "array-back": "^1.0.3", - "typical": "^2.6.0" - }, - "dependencies": { - "array-back": { - "version": "1.0.4", - "dev": true, - "peer": true, - "requires": { - "typical": "^2.6.0" - } - }, - "typical": { - "version": "2.6.1", - "dev": true, - "peer": true - } - } - }, - "testrpc": { - "version": "0.0.1", - "dev": true, - "peer": true - }, -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - }, -<<<<<<< HEAD - "timed-out": { - "version": "4.0.1", - "dev": true, - "peer": true - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-readable-stream": { - "version": "1.0.0", -======= - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "treeverse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", - "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", - "dev": true - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true - }, - "true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", - "dev": true - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "uglify-js": { - "version": "3.16.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", - "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", - "dev": true, - "optional": true - }, - "undici": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.8.1.tgz", - "integrity": "sha512-iDRmWX4Zar/4A/t+1LrKQRm102zw2l9Wgat3LtTlTn8ykvMZmAmpq9tjyHEigx18FsY7IfATvyN3xSw9BDz0eA==", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { -<<<<<<< HEAD - "version": "1.0.0" - }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url": { - "version": "0.11.0", - "dev": true, - "peer": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "dev": true, - "peer": true - } - } - }, - "url-parse-lax": { - "version": "3.0.0", - "dev": true, - "peer": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-set-query": { -======= ->>>>>>> d5276ee0ea7e352b374389a4604e2df839442ebe - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "walk-up-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", - "dev": true - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "write-json-file": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", - "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", - "dev": true, - "requires": { - "detect-indent": "^6.0.0", - "graceful-fs": "^4.1.15", - "is-plain-obj": "^2.0.0", - "make-dir": "^3.0.0", - "sort-keys": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - } - } - }, - "write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", - "dev": true, - "requires": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, - "dependencies": { - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "requires": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - } - } - } - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "dependencies": { - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - } - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - } - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} From a1065de519738302c94b69f2d13adb19a1c02eca Mon Sep 17 00:00:00 2001 From: arcticfloyd1984 Date: Wed, 17 Aug 2022 19:58:30 +0530 Subject: [PATCH 0075/1247] reverting refund flow changes --- .../smart-contract-wallet/SmartWallet.sol | 29 +-------- packages/smart-account/src/SmartAccount.ts | 64 +------------------ .../smart-account/tests/smartaccount.spec.ts | 4 +- 3 files changed, 7 insertions(+), 90 deletions(-) diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol index 62ba95fa6..6cf0a8c61 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol @@ -149,7 +149,6 @@ contract SmartWallet is FeeRefund memory refundInfo, bytes memory signatures ) public payable virtual returns (bool success) { - uint256 gasUsed = gasleft(); bytes32 txHash; // Use scope here to limit variable lifetime and prevent `stack too deep` errors { @@ -175,16 +174,17 @@ contract SmartWallet is require(gasleft() >= max((_tx.targetTxGas * 64) / 63,_tx.targetTxGas + 2500) + 500, "BSA010"); // Use scope here to limit variable lifetime and prevent `stack too deep` errors { + uint256 gasUsed = gasleft(); // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than targetTxGas) // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than targetTxGas success = execute(_tx.to, _tx.value, _tx.data, _tx.operation, refundInfo.gasPrice == 0 ? (gasleft() - 2500) : _tx.targetTxGas); + gasUsed = gasUsed - gasleft(); // If no targetTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert require(success || _tx.targetTxGas != 0 || refundInfo.gasPrice != 0, "BSA013"); // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls uint256 payment = 0; if (refundInfo.gasPrice > 0) { - gasUsed = gasUsed - gasleft(); payment = handlePayment(gasUsed, refundInfo.baseGas, refundInfo.gasPrice, refundInfo.gasToken, refundInfo.refundReceiver); } if (success) emit ExecutionSuccess(txHash, payment); @@ -213,31 +213,6 @@ contract SmartWallet is } } - function handlePaymentRevert( - uint256 gasUsed, - uint256 baseGas, - uint256 gasPrice, - address gasToken, - address payable refundReceiver - ) external returns (uint256 payment) { - uint256 startGas = gasleft(); - // solhint-disable-next-line avoid-tx-origin - address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver; - if (gasToken == address(0)) { - // For ETH we will only adjust the gas price to not be higher than the actual used gas price - payment = (gasUsed + baseGas) * (gasPrice < tx.gasprice ? gasPrice : tx.gasprice); - // Review: low level call value vs transfer - (bool success,) = receiver.call{value: payment}(""); - require(success, "BSA011"); - } else { - payment = (gasUsed + baseGas) * (gasPrice); - require(transferToken(gasToken, receiver, payment), "BSA012"); - } - uint256 requiredGas = startGas - gasleft(); - // Convert response to string and return via error message - revert(string(abi.encodePacked(requiredGas))); - } - // @review /** * @dev Checks whether the signature provided is valid for the provided data, hash. Will revert otherwise. diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 3eb0a605d..509fa9eb9 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -326,7 +326,7 @@ class SmartAccount { * @param chainId * @returns */ - async createTransaction( + async createSmartAccountTransaction( transaction: Transaction, batchId: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId @@ -351,62 +351,6 @@ class SmartAccount { return walletTx } - // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions - - /** - * Prepares compatible WalletTransaction object based on Transaction Request - * @todo Rename based on other variations to prepare transaction - * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) - * @param transaction - * @param batchId - * @param chainId - * @returns - */ - async createRefundTransaction( - transaction: Transaction, - feeToken: string, // review types - batchId: number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): Promise { - let walletContract = this.smartAccount(chainId).getContract() - walletContract = walletContract.attach(this.address) - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0 - if (await this.isDeployed(chainId)) { - nonce = (await walletContract.getNonce(batchId)).toNumber() - } - console.log('nonce: ', nonce) - - const gasEstimate1 = await this.ethersAdapter(chainId).estimateGas({ - to: transaction.to, - data: transaction.data || '0x', - from: this.address, - }); - - // Depending on feeToken provide baseGas! - - const baseGas = 25348 + 4928 + 16730 + 40015; //goerli USDC - const refundReceiver = "0x0000000000000000000000000000000000000000"; - const gasToken = feeToken; - const gasPrice = "17"; // this would be token gas price - const targetTxGas = gasEstimate1; // would come from estimator - - const walletTx: WalletTransaction = buildSmartAccountTransaction({ - to: transaction.to, - value: transaction.value, - data: transaction.data, // for token transfers use encodeTransfer - targetTxGas, - baseGas, - refundReceiver, - gasPrice, - gasToken, - nonce - }) - - return walletTx - } - /** * Prepares compatible WalletTransaction object based on Transaction Request * @todo Write test case and limit batch size based on test results in scw-contracts @@ -416,7 +360,7 @@ class SmartAccount { * @param chainId * @returns */ - async createTransactionBatch(transactions: Transaction[], batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + async createSmartAccountTransactionBatch(transactions: Transaction[], batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); @@ -583,8 +527,6 @@ class SmartAccount { // more methods to fetch balance via backend -> indexer node // getTokenBalances() @Talha - // @notice : instead of just reading from contract this should come from backend (given owner and index) - // this API would be able to check history of owner, contract updates and read from chain /** * @param address Owner aka {EOA} address * @param index number of smart account deploy i.e {0, 1 ,2 ...} @@ -610,4 +552,4 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { backend_url: 'https://sdk-backend.staging.biconomy.io/v1' } -export default SmartAccount +export default SmartAccount \ No newline at end of file diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index d1d302849..d8ccc1ef1 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -424,7 +424,7 @@ describe('Wallet integration', function () { } const smartAccountTransaction: WalletTransaction = - await smartAccount.createTransaction(tx) + await smartAccount.createSmartAccountTransaction(tx) const signature = await smartAccount.signTransaction(smartAccountTransaction) console.log('signature is: ', signature) @@ -504,7 +504,7 @@ describe('Wallet integration', function () { } const smartAccountTransaction: WalletTransaction = - await smartAccount.createTransaction(tx) + await smartAccount.createSmartAccountTransaction(tx) // Attach relayer before sending a transaction From 0469cc1877f8ad81ef243140b28a48dac4dce7d6 Mon Sep 17 00:00:00 2001 From: talha Date: Wed, 17 Aug 2022 22:43:25 +0500 Subject: [PATCH 0076/1247] logging and fixes --- lerna.json | 3 +- packages/smart-account/src/SmartAccount.ts | 107 +++++++++------------ 2 files changed, 47 insertions(+), 63 deletions(-) diff --git a/lerna.json b/lerna.json index 59de0e6be..28fff685d 100644 --- a/lerna.json +++ b/lerna.json @@ -3,6 +3,5 @@ "packages/*" ], "useNx": true, - "version": "1.0.0", - "useWorkspaces": true + "version": "1.0.0" } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index f4bd4ebb0..079cbb2fa 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -42,7 +42,7 @@ import { BalancesResponse, UsdBalanceResponse } from '@biconomy-sdk/node-client' // Create an instance of Smart Account with multi-chain support. class SmartAccount { - DEFAULT_VERSION: SmartAccountVersion = '1.0.1' + DEFAULT_VERSION: SmartAccountVersion = '1.0.0' // { ethAdapter } is a window that gives access to all the implemented functions of it // requires signer and read-only provider ethAdapter!: { [chainId: number]: EthersAdapter } @@ -118,11 +118,11 @@ class SmartAccount { } /** - * + * * @param smartAccountVersion * @description // set wallet version to be able to interact with different deployed versions */ - setWalletVersion(smartAccountVersion: SmartAccountVersion){ + setWalletVersion(smartAccountVersion: SmartAccountVersion) { this.DEFAULT_VERSION = smartAccountVersion } @@ -146,6 +146,7 @@ class SmartAccount { const providerUrl = chainConfig.find((n) => n.chainId === network)?.providerUrl // To keep it network agnostic // Note: think about events when signer needs to pay gas + const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable this.ethAdapter[network] = new EthersAdapter({ @@ -153,14 +154,13 @@ class SmartAccount { signer, provider: readProvider }) - console.log('network is ', network); - // console.log('signer is ', signer) - // console.log('readProvider ', readProvider) - console.log('network ', this.ethAdapter[network]); - + + this.smartWalletFactoryContract[network] = {} + this.smartWalletContract[network] = {} + this.multiSendContract[network] = {} + this.multiSendCallOnlyContract[network] = {} this.initializeContracts(network) } - // We set the common owner by quering default active chainId ethAdapter this.owner = await this.ethersAdapter().getSignerAddress() // @review @@ -178,49 +178,29 @@ class SmartAccount { const smartWalletFactoryAddress = currentChainInfo.walletFactory const multiSend = currentChainInfo.multiSend const multiSendCall = currentChainInfo.multiSendCall - - this.smartWalletFactoryContract[chainId] = {} - this.smartWalletContract[chainId] = {} - this.multiSendContract[chainId] = {} - this.multiSendCallOnlyContract[chainId] = {} - - console.log("===>>>>>>>>"); - for (let index = 0; index < smartWallet.length; index++) { - console.log("===>>>"); const version = smartWallet[index].version - console.log(smartWallet[index]); + console.log(smartWallet[index]) - const dummyInstance = getSmartWalletFactoryContract( + this.smartWalletFactoryContract[chainId][version] = getSmartWalletFactoryContract( version, this.ethAdapter[chainId], smartWalletFactoryAddress[index].address ) - console.log('this.ethAdapter[chainId] ', this.ethAdapter[chainId]); - - console.log('dummyInstance ', dummyInstance); - - this.smartWalletFactoryContract[chainId].version = getSmartWalletFactoryContract( - version, - this.ethAdapter[chainId], - smartWalletFactoryAddress[index].address - ) - console.log(' logging instance ', this.smartWalletFactoryContract[chainId].version); - // NOTE/TODO : attached address is not wallet address yet - this.smartWalletContract[chainId].version = getSmartWalletContract( + this.smartWalletContract[chainId][version] = getSmartWalletContract( version, this.ethAdapter[chainId], smartWallet[index].address ) - this.multiSendContract[chainId].version = getMultiSendContract( + this.multiSendContract[chainId][version] = getMultiSendContract( version, this.ethAdapter[chainId], multiSend[index].address ) - this.multiSendCallOnlyContract[chainId].version = getMultiSendCallOnlyContract( + this.multiSendCallOnlyContract[chainId][version] = getMultiSendCallOnlyContract( version, this.ethAdapter[chainId], multiSendCall[index].address @@ -228,6 +208,38 @@ class SmartAccount { } } + // Review : more / other potential methods + // sendSignedTransaction + // signMessage + + // Discuss about multichain aspect of relayer node url and clients + // TODO: get details from backend config + // NOTE: Discuss about multichain aspect of relayer node url and clients + + // more methods to fetch balance via backend -> indexer node + // getTokenBalances() @Talha + + /** + * @param address Owner aka {EOA} address + * @param index number of smart account deploy i.e {0, 1 ,2 ...} + * @description return address for Smart account + * @returns + */ + private async getAddressForCounterfactualWallet( + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + index: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + console.log('index and ChainId ', index, chainId, this.DEFAULT_VERSION) + console.log( + 'Instance to this is ', + this.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION] + ) + return this.smartWalletFactoryContract[chainId][ + this.DEFAULT_VERSION + ].getAddressForCounterfactualWallet(this.owner, index) + } + /** * Fetch supported chainInfo from backend node : used in init * @returns ChainConfig response received from backend node @@ -591,33 +603,6 @@ class SmartAccount { } return context } - - // Review : more / other potential methods - // sendSignedTransaction - // signMessage - - // Discuss about multichain aspect of relayer node url and clients - // TODO: get details from backend config - // NOTE: Discuss about multichain aspect of relayer node url and clients - - // more methods to fetch balance via backend -> indexer node - // getTokenBalances() @Talha - - /** - * @param address Owner aka {EOA} address - * @param index number of smart account deploy i.e {0, 1 ,2 ...} - * @description return address for Smart account - * @returns - */ - private async getAddressForCounterfactualWallet( - // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, - index: number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): Promise { - return await this.smartWalletFactoryContract[chainId][ - this.DEFAULT_VERSION - ].getAddressForCounterfactualWallet(this.owner, index) - } } // Temporary default config From 15660914f8f5fa512d5fb83e026d0a9ce3ee53b1 Mon Sep 17 00:00:00 2001 From: talha Date: Thu, 18 Aug 2022 02:19:14 +0500 Subject: [PATCH 0077/1247] script for making builds --- link.sh | 22 +++++----------------- rebuild.sh | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 17 deletions(-) create mode 100755 rebuild.sh diff --git a/link.sh b/link.sh index 83cddb17b..beaca34a1 100755 --- a/link.sh +++ b/link.sh @@ -1,17 +1,5 @@ -#!/bin/sh -# npm run unbuild -# npm run build -# npm link -rm -rf node_modules -rm -rf packages/core-types/node_modules -rm -rf packages/core-types/package-lock.json -rm -rf packages/ethers-lib/node_modules -rm -rf packages/ethers-lib/package-lock.json -rm -rf packages/node_client/node_modules -rm -rf packages/node_client/package-lock.json -rm -rf packages/relayer/node_modules -rm -rf packages/relayer/package-lock.json -rm -rf packages/smart-account/node_modules -rm -rf packages/smart-account/package-lock.json -rm -rf packages/transactions/node_modules -rm -rf packages/transactions/package-lock.json +!/bin/sh +npm run unbuild +npm run build +npm link + diff --git a/rebuild.sh b/rebuild.sh new file mode 100755 index 000000000..c33bb881d --- /dev/null +++ b/rebuild.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +rm -rf node_modules +rm -rf packages/core-types/node_modules +rm -rf packages/core-types/package-lock.json +rm -rf packages/core-types/dist +rm -rf packages/ethers-lib/node_modules +rm -rf packages/ethers-lib/package-lock.json +rm -rf packages/ethers-lib/dist + +rm -rf packages/node_client/node_modules +rm -rf packages/node_client/package-lock.json +rm -rf packages/node_client/dist + +rm -rf packages/relayer/node_modules +rm -rf packages/relayer/package-lock.json +rm -rf packages/relayer/dist + +rm -rf packages/smart-account/node_modules +rm -rf packages/smart-account/package-lock.json +rm -rf packages/smart-account/dist + +rm -rf packages/transactions/node_modules +rm -rf packages/transactions/package-lock.json +rm -rf packages/transactions/dist + +npx lerna bootstrap --force-local +npm run build +npm link \ No newline at end of file From 2308ec2927c302529cf8e829ca6cdd43df87bf56 Mon Sep 17 00:00:00 2001 From: talha Date: Thu, 18 Aug 2022 05:36:12 +0500 Subject: [PATCH 0078/1247] estimation methods --- packages/node-client/src/INodeClient.ts | 10 ++++- packages/node-client/src/NodeClient.ts | 38 ++++++++++++++++++- .../node-client/src/types/NodeClientTypes.ts | 8 ++++ packages/smart-account/src/SmartAccount.ts | 16 +++++++- rebuild.sh | 29 ++++++++++++++ 5 files changed, 96 insertions(+), 5 deletions(-) create mode 100755 rebuild.sh diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index 472901a10..7d4f4f161 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -1,3 +1,4 @@ +import { MetaTransactionData } from '@biconomy-sdk/core-types' import { Signer } from '@ethersproject/abstract-signer' import { TokenPriceResponse, @@ -8,7 +9,8 @@ import { SmartAccountsResponse, BalancesResponse, BalancesDto, - UsdBalanceResponse + UsdBalanceResponse, + EstimateGasResponse } from './types/NodeClientTypes' interface INodeClient { @@ -35,6 +37,12 @@ interface INodeClient { getAlltokenBalances(balancesDto: BalancesDto): Promise getTotalBalanceInUsd(balancesDto: BalancesDto): Promise + + estimateExternalGas(chainId: number, estimatorAddress: string, encodedData: string): Promise + + estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise + + estimateHandlePaymentGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise } export default INodeClient diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index ca41496fb..331d91799 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -8,11 +8,12 @@ import { SmartAccountsResponse, BalancesDto, BalancesResponse, - UsdBalanceResponse + UsdBalanceResponse, + EstimateGasResponse } from './types/NodeClientTypes' import { getTxServiceBaseUrl } from './utils' import { HttpMethod, sendRequest } from './utils/httpRequests' - +import { MetaTransactionData } from '@biconomy-sdk/core-types' export interface NodeClientConfig { /** txServiceUrl - Safe Transaction Service URL */ txServiceUrl: string @@ -114,6 +115,39 @@ class NodeClient implements INodeClient { body: balancesDto }) } + async estimateExternalGas(chainId: number, estimatorAddress: string, encodedData: string): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/estimator/external`, + method: HttpMethod.Post, + body: { + chainId, + estimatorAddress, + encodedData + } + }) + } + async estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/estimator/required`, + method: HttpMethod.Post, + body: { + chainId, + estimatorAddress, + transaction + } + }) + } + async estimateHandlePaymentGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/estimator/handle-payment`, + method: HttpMethod.Post, + body: { + chainId, + estimatorAddress, + transaction + } + }) + } } export default NodeClient diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index fc48c1a75..e37e5e086 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -158,3 +158,11 @@ export type UsdBalanceResponse = { totalBalance: number } } + +export type EstimateGasResponse = { + message: string + code: number + data: { + gas: number + } +} diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 1f9f1fd16..55f044748 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -15,7 +15,8 @@ import { MultiSendContract, MultiSendCallOnlyContract, RawTransactionType, - SmartAccountState + SmartAccountState, + MetaTransactionData } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' import NodeClient, { ChainConfig, SupportedChainsResponse } from '@biconomy-sdk/node-client' @@ -34,7 +35,7 @@ import { buildMultiSendSmartAccountTx } from '@biconomy-sdk/transactions' import { BalancesDto } from '@biconomy-sdk/node-client' -import { BalancesResponse, UsdBalanceResponse } from '@biconomy-sdk/node-client' +import { BalancesResponse, UsdBalanceResponse, EstimateGasResponse } from '@biconomy-sdk/node-client' // Create an instance of Smart Account with multi-chain support. class SmartAccount { @@ -199,6 +200,17 @@ class SmartAccount { return this.nodeClient.getTotalBalanceInUsd(balancesDto) } + public async estimateExternalGas(chainId: number, estimatorAddress: string, encodedData: string): Promise { + return this.nodeClient.estimateExternalGas(chainId, estimatorAddress, encodedData) + } + public async estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise { + return this.nodeClient.estimateRequiredTxGas(chainId, estimatorAddress, transaction) + } + public async estimateHandlePaymentGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise { + return this.nodeClient.estimateHandlePaymentGas(chainId, estimatorAddress, transaction) + } + + // return adapter instance to be used for blockchain interactions /** * adapter instance to be used for some blockchain interactions diff --git a/rebuild.sh b/rebuild.sh new file mode 100755 index 000000000..c33bb881d --- /dev/null +++ b/rebuild.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +rm -rf node_modules +rm -rf packages/core-types/node_modules +rm -rf packages/core-types/package-lock.json +rm -rf packages/core-types/dist +rm -rf packages/ethers-lib/node_modules +rm -rf packages/ethers-lib/package-lock.json +rm -rf packages/ethers-lib/dist + +rm -rf packages/node_client/node_modules +rm -rf packages/node_client/package-lock.json +rm -rf packages/node_client/dist + +rm -rf packages/relayer/node_modules +rm -rf packages/relayer/package-lock.json +rm -rf packages/relayer/dist + +rm -rf packages/smart-account/node_modules +rm -rf packages/smart-account/package-lock.json +rm -rf packages/smart-account/dist + +rm -rf packages/transactions/node_modules +rm -rf packages/transactions/package-lock.json +rm -rf packages/transactions/dist + +npx lerna bootstrap --force-local +npm run build +npm link \ No newline at end of file From 828958dd50996b71fca8d74127ecbd62d8c55e8f Mon Sep 17 00:00:00 2001 From: talha Date: Thu, 18 Aug 2022 07:33:46 +0500 Subject: [PATCH 0079/1247] local package moved to dependencies --- packages/ethers-lib/package.json | 3 +-- packages/node-client/package.json | 3 +-- packages/relayer/package.json | 5 +---- packages/smart-account/package.json | 15 +++++---------- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 130ca82ea..3140a2add 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -22,7 +22,6 @@ "dist" ], "devDependencies": { - "@biconomy-sdk/core-types": "*", "@nomiclabs/hardhat-ethers": "^2.0.5", "@nomiclabs/hardhat-waffle": "^2.0.3", "@typechain/ethers-v5": "^9.0.0", @@ -43,7 +42,7 @@ "access": "public" }, "dependencies": { - "@biconomy-sdk/core-types": "^1.0.0", + "@biconomy-sdk/core-types": "*", "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0" }, diff --git a/packages/node-client/package.json b/packages/node-client/package.json index cf3f840bd..f9a93b6b7 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -22,7 +22,6 @@ "dist" ], "devDependencies": { - "@biconomy-sdk/core-types": "*", "@gnosis.pm/safe-core-sdk": "^2.1.0", "@gnosis.pm/safe-ethers-lib": "^1.1.0", "@gnosis.pm/safe-web3-lib": "^1.1.0", @@ -66,7 +65,7 @@ "access": "public" }, "dependencies": { - "@biconomy-sdk/core-types": "^1.0.0", + "@biconomy-sdk/core-types": "*", "@ethersproject/abstract-signer": "^5.6.0", "@gnosis.pm/safe-core-sdk": "^2.1.0", "node-fetch": "^2.6.6" diff --git a/packages/relayer/package.json b/packages/relayer/package.json index c64f636a1..704573fc7 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -24,13 +24,10 @@ "lint": "tslint -p tsconfig.json" }, "dependencies": { - "@biconomy-sdk/core-types": "^1.0.0", + "@biconomy-sdk/core-types": "*", "@ethersproject/providers": "^5.6.8", "ethers": "^5.6.9" }, - "devDependencies": { - "@biconomy-sdk/core-types": "*" - }, "publishConfig": { "access": "public" }, diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 961c265ad..c28eeee0b 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -30,11 +30,6 @@ "access": "public" }, "devDependencies": { - "@biconomy-sdk/core-types": "*", - "@biconomy-sdk/ethers-lib": "*", - "@biconomy-sdk/node-client": "*", - "@biconomy-sdk/relayer": "*", - "@biconomy-sdk/transactions": "*", "@nomiclabs/hardhat-ethers": "^2.1.0", "@types/mocha": "^9.1.1", "@types/node": "^17.0.23", @@ -50,11 +45,11 @@ "typescript": "^4.6.3" }, "dependencies": { - "@biconomy-sdk/core-types": "^1.0.0", - "@biconomy-sdk/ethers-lib": "^1.0.0", - "@biconomy-sdk/node-client": "^1.0.0", - "@biconomy-sdk/relayer": "^1.0.0", - "@biconomy-sdk/transactions": "^1.0.0", + "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/ethers-lib": "*", + "@biconomy-sdk/node-client": "*", + "@biconomy-sdk/relayer": "*", + "@biconomy-sdk/transactions": "*", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", From 9fe8f11a7ba89cfc9aa8e1ddcf30d04b151439b0 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 18 Aug 2022 10:34:38 +0530 Subject: [PATCH 0080/1247] version update --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6185146a1..eb0da446f 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "devDependencies": { "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.5.4", + "nx": "^14.5.7", "prettier": "2.7.1", "ts-node": "^10.8.2" } From 1186a219e9f4b1adc16ffb8a7541cab0a055b714 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 18 Aug 2022 10:45:50 +0530 Subject: [PATCH 0081/1247] rename txn methods --- packages/smart-account/src/SmartAccount.ts | 4 ++-- packages/smart-account/tests/smartaccount.spec.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 1171c1569..800082a7c 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -338,7 +338,7 @@ class SmartAccount { * @param chainId * @returns */ - async createSmartAccountTransaction( + async createTransaction( transaction: Transaction, batchId: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId @@ -372,7 +372,7 @@ class SmartAccount { * @param chainId * @returns */ - async createSmartAccountTransactionBatch(transactions: Transaction[], batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + async createTransactionBatch(transactions: Transaction[], batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 6fef1341e..5432741ff 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -424,7 +424,7 @@ describe('Wallet integration', function () { } const smartAccountTransaction: WalletTransaction = - await smartAccount.createSmartAccountTransaction(tx) + await smartAccount.createTransaction(tx) const signature = await smartAccount.signTransaction(smartAccountTransaction) console.log('signature is: ', signature) @@ -504,7 +504,7 @@ describe('Wallet integration', function () { } const smartAccountTransaction: WalletTransaction = - await smartAccount.createSmartAccountTransaction(tx) + await smartAccount.createTransaction(tx) // Attach relayer before sending a transaction From 5754a6df327eab963542d90c2d1a1f49fb39bd2a Mon Sep 17 00:00:00 2001 From: talha Date: Thu, 18 Aug 2022 10:22:55 +0500 Subject: [PATCH 0082/1247] estimation changes --- packages/node-client/src/INodeClient.ts | 2 +- packages/node-client/src/NodeClient.ts | 3 +-- packages/smart-account/src/SmartAccount.ts | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index 7d4f4f161..d6baae48f 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -38,7 +38,7 @@ interface INodeClient { getTotalBalanceInUsd(balancesDto: BalancesDto): Promise - estimateExternalGas(chainId: number, estimatorAddress: string, encodedData: string): Promise + estimateExternalGas(chainId: number, encodedData: string): Promise estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index 331d91799..4fda9b7e3 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -115,13 +115,12 @@ class NodeClient implements INodeClient { body: balancesDto }) } - async estimateExternalGas(chainId: number, estimatorAddress: string, encodedData: string): Promise { + async estimateExternalGas(chainId: number, encodedData: string): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/external`, method: HttpMethod.Post, body: { chainId, - estimatorAddress, encodedData } }) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 55f044748..580660920 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -200,8 +200,8 @@ class SmartAccount { return this.nodeClient.getTotalBalanceInUsd(balancesDto) } - public async estimateExternalGas(chainId: number, estimatorAddress: string, encodedData: string): Promise { - return this.nodeClient.estimateExternalGas(chainId, estimatorAddress, encodedData) + public async estimateExternalGas(chainId: number, encodedData: string): Promise { + return this.nodeClient.estimateExternalGas(chainId, encodedData) } public async estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise { return this.nodeClient.estimateRequiredTxGas(chainId, estimatorAddress, transaction) From d675d83e81302fa6dd774339ddabe1f40403dfa6 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 18 Aug 2022 13:03:41 +0530 Subject: [PATCH 0083/1247] comment out estimation methods --- packages/smart-account/src/SmartAccount.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 731173525..139148690 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -200,7 +200,7 @@ class SmartAccount { return this.nodeClient.getTotalBalanceInUsd(balancesDto) } - public async estimateExternalGas(chainId: number, encodedData: string): Promise { + /*public async estimateExternalGas(chainId: number, encodedData: string): Promise { return this.nodeClient.estimateExternalGas(chainId, encodedData) } public async estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise { @@ -208,7 +208,7 @@ class SmartAccount { } public async estimateHandlePaymentGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise { return this.nodeClient.estimateHandlePaymentGas(chainId, estimatorAddress, transaction) - } + }*/ // return adapter instance to be used for blockchain interactions From e176101f4f1f091dde2421ac0fc4204802029676 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 18 Aug 2022 18:27:06 +0530 Subject: [PATCH 0084/1247] use latest version for refund calc + refactor --- .../smart-contract-wallet/SmartWallet.sol | 43 +++++++- packages/node-client/src/INodeClient.ts | 2 +- packages/smart-account/src/SmartAccount.ts | 99 ++++++++++++++++++- 3 files changed, 135 insertions(+), 9 deletions(-) diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol index 6cf0a8c61..c7ed9e269 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol @@ -20,6 +20,7 @@ import "./common/SecuredTokenTransfer.sol"; import "./interfaces/ISignatureValidator.sol"; import "./interfaces/IERC165.sol"; import "./libs/ECDSA.sol"; +// import "hardhat/console.sol"; // Hooks not made a base yet contract SmartWallet is @@ -149,6 +150,10 @@ contract SmartWallet is FeeRefund memory refundInfo, bytes memory signatures ) public payable virtual returns (bool success) { + // initial gas = 21k + non_zero_bytes * 16 + zero_bytes * 4 + // ~= 21k + calldata.length * [1/3 * 16 + 2/3 * 4] + uint256 startGas = gasleft() + 21000 + msg.data.length * 8; + //console.log("init %s", 21000 + msg.data.length * 8); bytes32 txHash; // Use scope here to limit variable lifetime and prevent `stack too deep` errors { @@ -174,21 +179,24 @@ contract SmartWallet is require(gasleft() >= max((_tx.targetTxGas * 64) / 63,_tx.targetTxGas + 2500) + 500, "BSA010"); // Use scope here to limit variable lifetime and prevent `stack too deep` errors { - uint256 gasUsed = gasleft(); // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than targetTxGas) // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than targetTxGas success = execute(_tx.to, _tx.value, _tx.data, _tx.operation, refundInfo.gasPrice == 0 ? (gasleft() - 2500) : _tx.targetTxGas); - gasUsed = gasUsed - gasleft(); // If no targetTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert require(success || _tx.targetTxGas != 0 || refundInfo.gasPrice != 0, "BSA013"); // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls uint256 payment = 0; + // uint256 extraGas; if (refundInfo.gasPrice > 0) { - payment = handlePayment(gasUsed, refundInfo.baseGas, refundInfo.gasPrice, refundInfo.gasToken, refundInfo.refundReceiver); + //console.log("sent %s", startGas - gasleft()); + // extraGas = gasleft(); + payment = handlePayment(startGas - gasleft(), refundInfo.baseGas, refundInfo.gasPrice, refundInfo.gasToken, refundInfo.refundReceiver); } if (success) emit ExecutionSuccess(txHash, payment); else emit ExecutionFailure(txHash, payment); + // extraGas = extraGas - gasleft(); + //console.log("extra gas %s ", extraGas); } } @@ -199,6 +207,7 @@ contract SmartWallet is address gasToken, address payable refundReceiver ) private returns (uint256 payment) { + // uint256 startGas = gasleft(); // solhint-disable-next-line avoid-tx-origin address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver; if (gasToken == address(0)) { @@ -211,6 +220,34 @@ contract SmartWallet is payment = (gasUsed + baseGas) * (gasPrice); require(transferToken(gasToken, receiver, payment), "BSA012"); } + // uint256 requiredGas = startGas - gasleft(); + //console.log("hp %s", requiredGas); + } + + function handlePaymentRevert( + uint256 gasUsed, + uint256 baseGas, + uint256 gasPrice, + address gasToken, + address payable refundReceiver + ) external returns (uint256 payment) { + uint256 startGas = gasleft(); + // solhint-disable-next-line avoid-tx-origin + address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver; + if (gasToken == address(0)) { + // For ETH we will only adjust the gas price to not be higher than the actual used gas price + payment = (gasUsed + baseGas) * (gasPrice < tx.gasprice ? gasPrice : tx.gasprice); + // Review: low level call value vs transfer + (bool success,) = receiver.call{value: payment}(""); + require(success, "BSA011"); + } else { + payment = (gasUsed + baseGas) * (gasPrice); + require(transferToken(gasToken, receiver, payment), "BSA012"); + } + uint256 requiredGas = startGas - gasleft(); + //console.log("hpr %s", requiredGas); + // Convert response to string and return via error message + revert(string(abi.encodePacked(requiredGas))); } // @review diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index d6baae48f..06c3936ed 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -42,7 +42,7 @@ interface INodeClient { estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise - estimateHandlePaymentGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise + estimateHandlePaymentGas(chainId: number, estimatorAddress: string, feeRefund: MetaTransactionData): Promise } export default INodeClient diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 2044e9474..a4d9932b6 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -16,7 +16,9 @@ import { MultiSendCallOnlyContract, RawTransactionType, SmartAccountState, - MetaTransactionData + MetaTransactionData, + OperationType, + FeeRefundData } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' import NodeClient, { ChainConfig, SupportedChainsResponse } from '@biconomy-sdk/node-client' @@ -200,15 +202,15 @@ class SmartAccount { return this.nodeClient.getTotalBalanceInUsd(balancesDto) } - /*public async estimateExternalGas(chainId: number, encodedData: string): Promise { + public async estimateExternalGas(chainId: number, encodedData: string): Promise { return this.nodeClient.estimateExternalGas(chainId, encodedData) } public async estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise { return this.nodeClient.estimateRequiredTxGas(chainId, estimatorAddress, transaction) } - public async estimateHandlePaymentGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise { - return this.nodeClient.estimateHandlePaymentGas(chainId, estimatorAddress, transaction) - }*/ + public async estimateHandlePaymentGas(chainId: number, estimatorAddress: string, feeRefundData: FeeRefundData): Promise { + return this.nodeClient.estimateHandlePaymentGas(chainId, estimatorAddress, feeRefundData) + } // return adapter instance to be used for blockchain interactions @@ -329,6 +331,93 @@ class SmartAccount { return txn } + // Get Fee Options from relayer and make it available for display + // We can also show list of transactions to be processed (decodeContractCall) + /** + * + * @param transaction + * @param batchId + * @param chainId + */ + async prepareRefundTransaction( + transaction: Transaction, + batchId: number = 0, // may not be necessary + chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { + + } + + // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions + + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Rename based on other variations to prepare transaction + * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) + * @param transaction + * @param batchId + * @param chainId + * @returns + */ + async createRefundTransaction( + transaction: Transaction, + feeToken: string, // review types + batchId: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + let walletContract = this.smartAccount(chainId).getContract() + walletContract = walletContract.attach(this.address) + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (await this.isDeployed(chainId)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } + console.log('nonce: ', nonce) + + const internalTx: MetaTransactionData = { + to: transaction.to, + value: '0x', + data: transaction.data || '0x', + operation: OperationType.Call + } + const gasEstimate1 = await this.estimateRequiredTxGas(chainId, this.address, internalTx) + + /*const gasEstimate1 = await this.ethersAdapter(chainId).estimateGas({ + to: transaction.to, + data: transaction.data || '0x', + from: this.address, + });*/ + + // Depending on feeToken provide baseGas! + + const refundDetails: FeeRefundData = { + baseGas: gasEstimate1, + gasPrice: 17, // this would be token gas price // review + gasToken: feeToken, + refundReceiver: "0x0000000000000000000000000000000000000000" + } + + const handlePaymentEstimate = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails) + + const baseGas = handlePaymentEstimate + 4928; // delegate call + event emission + state updates + const refundReceiver = "0x0000000000000000000000000000000000000000"; + const gasToken = feeToken; + + const walletTx: WalletTransaction = buildSmartAccountTransaction({ + to: transaction.to, + value: transaction.value, + data: transaction.data, // for token transfers use encodeTransfer + targetTxGas: gasEstimate1, + baseGas, + refundReceiver: "0x0000000000000000000000000000000000000000", + gasPrice: refundDetails.gasPrice.toString(), //review + gasToken: refundDetails.gasToken, + nonce + }) + + return walletTx + } + + /** * Prepares compatible WalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction From c0455ba8e4dfa6917b064faf972786fc56ca9cae Mon Sep 17 00:00:00 2001 From: arcticfloyd1984 Date: Thu, 18 Aug 2022 18:39:43 +0530 Subject: [PATCH 0085/1247] added fee options --- packages/relayer/src/rest-relayer.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 2a15ea984..15c27bfe2 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -143,6 +143,13 @@ export class RestRelayer implements Relayer { url: `${this.#relayServiceBaseUrl}`, method: HttpMethod.Post, body: { ...signedTx.rawTx, gasLimit: ethers.constants.Two.pow(24) } - }) + }) + } + + async getFeeOptions(chainId: number) { + return sendRequest({ + url: `${this.#relayServiceBaseUrl}/feeOptions?chainId=${chainId}`, + method: HttpMethod.Get, + }) } } \ No newline at end of file From 0399090c1a158d0d055e57e9b31fbc3f10a6aed6 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 18 Aug 2022 19:00:04 +0530 Subject: [PATCH 0086/1247] refactor --- packages/node-client/src/INodeClient.ts | 4 +-- packages/node-client/src/NodeClient.ts | 6 ++-- packages/smart-account/src/SmartAccount.ts | 34 +++++++++++++--------- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index 06c3936ed..eb4192af5 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -1,4 +1,4 @@ -import { MetaTransactionData } from '@biconomy-sdk/core-types' +import { FeeRefundData, MetaTransactionData } from '@biconomy-sdk/core-types' import { Signer } from '@ethersproject/abstract-signer' import { TokenPriceResponse, @@ -42,7 +42,7 @@ interface INodeClient { estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise - estimateHandlePaymentGas(chainId: number, estimatorAddress: string, feeRefund: MetaTransactionData): Promise + estimateHandlePaymentGas(chainId: number, estimatorAddress: string, feeRefund: FeeRefundData): Promise } export default INodeClient diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index 4fda9b7e3..290bae307 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -13,7 +13,7 @@ import { } from './types/NodeClientTypes' import { getTxServiceBaseUrl } from './utils' import { HttpMethod, sendRequest } from './utils/httpRequests' -import { MetaTransactionData } from '@biconomy-sdk/core-types' +import { FeeRefundData, MetaTransactionData } from '@biconomy-sdk/core-types' export interface NodeClientConfig { /** txServiceUrl - Safe Transaction Service URL */ txServiceUrl: string @@ -136,14 +136,14 @@ class NodeClient implements INodeClient { } }) } - async estimateHandlePaymentGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise { + async estimateHandlePaymentGas(chainId: number, estimatorAddress: string, feeRefundData: FeeRefundData): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/handle-payment`, method: HttpMethod.Post, body: { chainId, estimatorAddress, - transaction + feeRefundData } }) } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index a4d9932b6..1b6c655d2 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -339,12 +339,21 @@ class SmartAccount { * @param batchId * @param chainId */ - async prepareRefundTransaction( + /*async prepareRefundTransaction( transaction: Transaction, batchId: number = 0, // may not be necessary chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { - } + // const gasPriceQuotes = relayer.getFeeOptions + + // 1. If wallet is deployed + // 2. If wallet is not deployed (batch wallet deployment on multisend) + + // actual estimation with dummy sig + // => calc feeQuotes => store to be shown in widget (If wallet is not deployed show higher quote) + + // return {a, b} + }*/ // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions @@ -357,9 +366,10 @@ class SmartAccount { * @param chainId * @returns */ - async createRefundTransaction( + /*async createRefundTransaction( transaction: Transaction, feeToken: string, // review types + tokenGasPrice: number, // review types batchId: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { @@ -373,6 +383,9 @@ class SmartAccount { } console.log('nonce: ', nonce) + // in terms of calculating baseGas we should know if wallet is deployed or not otherwise it needs to consider deployment cost + // (will get batched by relayer) + const internalTx: MetaTransactionData = { to: transaction.to, value: '0x', @@ -381,17 +394,12 @@ class SmartAccount { } const gasEstimate1 = await this.estimateRequiredTxGas(chainId, this.address, internalTx) - /*const gasEstimate1 = await this.ethersAdapter(chainId).estimateGas({ - to: transaction.to, - data: transaction.data || '0x', - from: this.address, - });*/ - // Depending on feeToken provide baseGas! const refundDetails: FeeRefundData = { + // gasUsed: gasEstimate1, baseGas: gasEstimate1, - gasPrice: 17, // this would be token gas price // review + gasPrice: tokenGasPrice, // this would be token gas price // review gasToken: feeToken, refundReceiver: "0x0000000000000000000000000000000000000000" } @@ -399,9 +407,7 @@ class SmartAccount { const handlePaymentEstimate = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails) const baseGas = handlePaymentEstimate + 4928; // delegate call + event emission + state updates - const refundReceiver = "0x0000000000000000000000000000000000000000"; - const gasToken = feeToken; - + const walletTx: WalletTransaction = buildSmartAccountTransaction({ to: transaction.to, value: transaction.value, @@ -415,7 +421,7 @@ class SmartAccount { }) return walletTx - } + }*/ /** From a27786b29327ec85884f3d903a864430fce5ad7e Mon Sep 17 00:00:00 2001 From: talha Date: Thu, 18 Aug 2022 18:30:05 +0500 Subject: [PATCH 0087/1247] fee estimation changes --- packages/core-types/src/transaction.types.ts | 1 + packages/node-client/src/INodeClient.ts | 4 ++-- packages/node-client/src/NodeClient.ts | 12 ++++++------ packages/relayer/package.json | 3 +++ packages/smart-account/src/SmartAccount.ts | 12 ++++++------ 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index e224dc200..ae343af47 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -32,6 +32,7 @@ export interface ExecTransaction { } export interface FeeRefund { + gasUsed: string | number baseGas: string | number gasPrice: string | number gasToken: string diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index 06c3936ed..5c0cd68b5 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -1,4 +1,4 @@ -import { MetaTransactionData } from '@biconomy-sdk/core-types' +import { MetaTransactionData, FeeRefundData } from '@biconomy-sdk/core-types' import { Signer } from '@ethersproject/abstract-signer' import { TokenPriceResponse, @@ -42,7 +42,7 @@ interface INodeClient { estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise - estimateHandlePaymentGas(chainId: number, estimatorAddress: string, feeRefund: MetaTransactionData): Promise + estimateHandlePaymentGas(chainId: number, estimatorAddress: string, feeRefund: FeeRefundData): Promise } export default INodeClient diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index 4fda9b7e3..d3a8f8b70 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -13,7 +13,7 @@ import { } from './types/NodeClientTypes' import { getTxServiceBaseUrl } from './utils' import { HttpMethod, sendRequest } from './utils/httpRequests' -import { MetaTransactionData } from '@biconomy-sdk/core-types' +import { MetaTransactionData, FeeRefundData } from '@biconomy-sdk/core-types' export interface NodeClientConfig { /** txServiceUrl - Safe Transaction Service URL */ txServiceUrl: string @@ -125,25 +125,25 @@ class NodeClient implements INodeClient { } }) } - async estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise { + async estimateRequiredTxGas(chainId: number, walletAddress: string, transaction: MetaTransactionData): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/required`, method: HttpMethod.Post, body: { chainId, - estimatorAddress, + walletAddress, transaction } }) } - async estimateHandlePaymentGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise { + async estimateHandlePaymentGas(chainId: number, walletAddress: string, feeRefund: FeeRefundData): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/handle-payment`, method: HttpMethod.Post, body: { chainId, - estimatorAddress, - transaction + walletAddress, + feeRefund } }) } diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 704573fc7..8bf0a2914 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -33,5 +33,8 @@ }, "bugs": { "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" + }, + "devDependencies": { + "@types/node-fetch": "^2.6.2" } } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index a4d9932b6..758676a7b 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -205,11 +205,11 @@ class SmartAccount { public async estimateExternalGas(chainId: number, encodedData: string): Promise { return this.nodeClient.estimateExternalGas(chainId, encodedData) } - public async estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise { - return this.nodeClient.estimateRequiredTxGas(chainId, estimatorAddress, transaction) + public async estimateRequiredTxGas(chainId: number, walletAddress: string, transaction: MetaTransactionData): Promise { + return this.nodeClient.estimateRequiredTxGas(chainId, walletAddress, transaction) } - public async estimateHandlePaymentGas(chainId: number, estimatorAddress: string, feeRefundData: FeeRefundData): Promise { - return this.nodeClient.estimateHandlePaymentGas(chainId, estimatorAddress, feeRefundData) + public async estimateHandlePaymentGas(chainId: number, walletAddress: string, feeRefundData: FeeRefundData): Promise { + return this.nodeClient.estimateHandlePaymentGas(chainId, walletAddress, feeRefundData) } @@ -379,7 +379,7 @@ class SmartAccount { data: transaction.data || '0x', operation: OperationType.Call } - const gasEstimate1 = await this.estimateRequiredTxGas(chainId, this.address, internalTx) + const gasEstimate1 = Number(await this.estimateRequiredTxGas(chainId, this.address, internalTx)) /*const gasEstimate1 = await this.ethersAdapter(chainId).estimateGas({ to: transaction.to, @@ -396,7 +396,7 @@ class SmartAccount { refundReceiver: "0x0000000000000000000000000000000000000000" } - const handlePaymentEstimate = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails) + const handlePaymentEstimate = Number(await this.estimateHandlePaymentGas(chainId, this.address, refundDetails)) const baseGas = handlePaymentEstimate + 4928; // delegate call + event emission + state updates const refundReceiver = "0x0000000000000000000000000000000000000000"; From 6f3e11880ffc9d7a30de141a9a840581daa67b57 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 19 Aug 2022 00:53:33 +0530 Subject: [PATCH 0088/1247] refactor based on estimation test --- packages/core-types/src/transaction.types.ts | 2 +- packages/core-types/src/types.ts | 1 + packages/smart-account/src/SmartAccount.ts | 20 +++++++++++++------- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index ae343af47..9f76c0bf5 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -41,7 +41,7 @@ export interface FeeRefund { export interface MetaTransactionData { readonly to: string - readonly value: string + readonly value: BigNumberish readonly data: string readonly operation?: OperationType } diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 3efe6714f..78b1d71ce 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -25,6 +25,7 @@ export interface SmartAccountState { fallbackHandlerAddress: string } export interface FeeRefundData { + readonly gasUsed: number readonly baseGas: number readonly gasPrice: number readonly gasToken: string diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 56914d888..4522b3694 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -366,7 +366,7 @@ class SmartAccount { * @param chainId * @returns */ - /*async createRefundTransaction( + async createRefundTransaction( transaction: Transaction, feeToken: string, // review types tokenGasPrice: number, // review types @@ -388,25 +388,31 @@ class SmartAccount { const internalTx: MetaTransactionData = { to: transaction.to, - value: '0x', + value: transaction.value || 0, data: transaction.data || '0x', operation: OperationType.Call } - const gasEstimate1 = Number(await this.estimateRequiredTxGas(chainId, this.address, internalTx)) + console.log(internalTx); + const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); + const gasEstimate1 = Number(response.data.gas) + console.log('required txgas estimate ', gasEstimate1); // Depending on feeToken provide baseGas! const refundDetails: FeeRefundData = { - // gasUsed: gasEstimate1, + gasUsed: gasEstimate1, baseGas: gasEstimate1, gasPrice: tokenGasPrice, // this would be token gas price // review gasToken: feeToken, refundReceiver: "0x0000000000000000000000000000000000000000" } - const handlePaymentEstimate = Number(await this.estimateHandlePaymentGas(chainId, this.address, refundDetails)) + const handlePaymentResponse = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails); + const handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - const baseGas = handlePaymentEstimate + 4928; // delegate call + event emission + state updates + console.log('handle payment estimate ', handlePaymentEstimate); + + const baseGas = handlePaymentEstimate + 4928 + 22900; // delegate call + event emission + state updates const walletTx: WalletTransaction = buildSmartAccountTransaction({ to: transaction.to, @@ -421,7 +427,7 @@ class SmartAccount { }) return walletTx - }*/ + } /** From aeceab20f051f7670fe7f8b6173375f00133b8f1 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 19 Aug 2022 15:44:16 +0530 Subject: [PATCH 0089/1247] refund tx batch init --- packages/smart-account/src/SmartAccount.ts | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 4522b3694..43a7133f5 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -412,6 +412,7 @@ class SmartAccount { console.log('handle payment estimate ', handlePaymentEstimate); + // If the wallet deployment has to be appended then baseGas would change const baseGas = handlePaymentEstimate + 4928 + 22900; // delegate call + event emission + state updates const walletTx: WalletTransaction = buildSmartAccountTransaction({ @@ -464,6 +465,40 @@ class SmartAccount { return walletTx } + async createRefundTransactionBatch(transactions: Transaction[], batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + let walletContract = this.smartAccount(chainId).getContract(); + walletContract = walletContract.attach(this.address); + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0; + if(await this.isDeployed(chainId)) { + nonce = (await walletContract.getNonce(batchId)).toNumber(); + } + console.log('nonce: ', nonce); + + const txs: MetaTransaction[] = []; + + for(let i=0; i < transactions.length; i++) { + + const innerTx: WalletTransaction = buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) + + txs.push(innerTx); + } + + const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( + this.multiSend(chainId).getContract(), + txs, + nonce + ); + + return walletTx + } + /** * Prepares compatible WalletTransaction object based on Transaction Request * @todo Write test case and limit batch size based on test results in scw-contracts From dd33f7bc742e5e1f439f9d67d40e8a01a331e3c6 Mon Sep 17 00:00:00 2001 From: arcticfloyd1984 Date: Fri, 19 Aug 2022 17:52:23 +0530 Subject: [PATCH 0090/1247] FeeOptions Response type added --- packages/core-types/src/types.ts | 15 +++++++++++++++ packages/relayer/src/rest-relayer.ts | 5 +++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 78b1d71ce..00df8462d 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -54,3 +54,18 @@ export interface UserOperation { export interface RestRelayerOptions { url: string } + +export interface TokenData { + tokenGasPrice: string, + symbol: string, + address: string, + decimal: number, + logoUrl: string +} +export interface FeeOptionsResponse { + msg: string, + data: { + chainId: number, + response: Array + } +} \ No newline at end of file diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 15c27bfe2..91f553f8a 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -13,7 +13,8 @@ import { SignedTransaction, WalletTransaction, RawTransactionType, - RestRelayerOptions + RestRelayerOptions, + FeeOptionsResponse } from '@biconomy-sdk/core-types' import { MetaTransaction, encodeMultiSend } from './utils/multisend'; import { HttpMethod, sendRequest } from './utils/httpRequests'; @@ -146,7 +147,7 @@ export class RestRelayer implements Relayer { }) } - async getFeeOptions(chainId: number) { + async getFeeOptions(chainId: number): Promise { return sendRequest({ url: `${this.#relayServiceBaseUrl}/feeOptions?chainId=${chainId}`, method: HttpMethod.Get, From 9a4ff403195521e38b9faa41edc60dccd444f75f Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 19 Aug 2022 20:02:28 +0530 Subject: [PATCH 0091/1247] refund smart account batch updated --- packages/relayer/src/local-relayer.ts | 22 +++++- packages/smart-account/src/SmartAccount.ts | 81 +++++++++++++++++++++- 2 files changed, 99 insertions(+), 4 deletions(-) diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index 161acbc00..63ee29c78 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -135,8 +135,28 @@ export class LocalRelayer implements Relayer { const tx = this.signer.sendTransaction({ ...signedTx.rawTx, - gasLimit: ethers.constants.Two.pow(24) + gasLimit: ethers.constants.Two.pow(24), + gasPrice: 5000000000, }) return tx } + + async getFeeOptions(chainId: number) { + console.log('requested fee options for chain ', chainId); + const feeOptions = { + "msg": "all ok", + "data": { + "chainId": 5, + "response": [ + { + "tokenGasPrice": "5", + "symbol": "USDC", + "address": "0xb5B640E6414b6DeF4FC9B3C1EeF373925effeCcF", + "decimal": 6, + "logoUrl": "https://raw.githubusercontent.com/spothq/cryptocurrency-icons/master/128/color/usdc.png" + }] + } + }; + return feeOptions; + } } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 43a7133f5..115cb6cd8 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -355,6 +355,30 @@ class SmartAccount { // return {a, b} }*/ + // Get Fee Options from relayer and make it available for display + // We can also show list of transactions to be processed (decodeContractCall) + /** + * + * @param transaction + * @param batchId + * @param chainId + */ + /*async prepareRefundTransactionBatch( + transactions: Transaction[], + batchId: number = 0, // may not be necessary + chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { + + // const gasPriceQuotes = relayer.getFeeOptions + + // 1. If wallet is deployed + // 2. If wallet is not deployed (batch wallet deployment on multisend) + + // actual estimation with dummy sig + // => calc feeQuotes => store to be shown in widget (If wallet is not deployed show higher quote) + + // return {a, b} + }*/ + // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions /** @@ -413,7 +437,7 @@ class SmartAccount { console.log('handle payment estimate ', handlePaymentEstimate); // If the wallet deployment has to be appended then baseGas would change - const baseGas = handlePaymentEstimate + 4928 + 22900; // delegate call + event emission + state updates + const baseGas = handlePaymentEstimate + 4928 + 2360; // delegate call + event emission + state updates const walletTx: WalletTransaction = buildSmartAccountTransaction({ to: transaction.to, @@ -465,7 +489,12 @@ class SmartAccount { return walletTx } - async createRefundTransactionBatch(transactions: Transaction[], batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + async createRefundTransactionBatch( + transactions: Transaction[], + feeToken: string, // review types + tokenGasPrice: number, // review types, + batchId:number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); @@ -495,8 +524,53 @@ class SmartAccount { txs, nonce ); + + console.log('wallet txn with refund ', walletTx); + + const internalTx: MetaTransactionData = { + to: walletTx.to, + value: walletTx.value || 0, + data: walletTx.data || '0x', + operation: walletTx.operation + } + console.log(internalTx); + const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); + // considerable offset ref gnosis safe service client safeTxGas + const gasEstimate1 = Number(response.data.gas) //+ 50000 + console.log('required txgas estimate ', gasEstimate1); - return walletTx + // Depending on feeToken provide baseGas! + + const refundDetails: FeeRefundData = { + gasUsed: gasEstimate1, + baseGas: gasEstimate1, + gasPrice: tokenGasPrice, // this would be token gas price // review + gasToken: feeToken, + refundReceiver: "0x0000000000000000000000000000000000000000" + } + + const handlePaymentResponse = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails); + const handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + + console.log('handle payment estimate ', handlePaymentEstimate); + + // If the wallet deployment has to be appended then baseGas would change + const baseGas = handlePaymentEstimate + 4928 + 2360; // delegate call + event emission + state updates + + const finalWalletTx: WalletTransaction = buildSmartAccountTransaction({ + to: walletTx.to, + value: walletTx.value, + data: walletTx.data, // for token transfers use encodeTransfer + operation: walletTx.operation, + targetTxGas: gasEstimate1, + baseGas: baseGas, + refundReceiver: "0x0000000000000000000000000000000000000000", + gasPrice: refundDetails.gasPrice.toString(), //review + gasToken: refundDetails.gasToken, + nonce + }) + + return finalWalletTx } /** @@ -539,6 +613,7 @@ class SmartAccount { txs, nonce ); + console.log('wallet txn without refund ', walletTx); return walletTx } From 635f00efb76d08c593baa30e806d0804a73ba81d Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 19 Aug 2022 20:05:20 +0530 Subject: [PATCH 0092/1247] fee options in local relayer --- packages/relayer/src/local-relayer.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index 63ee29c78..8e5b210b3 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -6,7 +6,8 @@ import { SmartAccountContext, SmartAccountState, SignedTransaction, - WalletTransaction + WalletTransaction, + FeeOptionsResponse } from '@biconomy-sdk/core-types' import { MetaTransaction, encodeMultiSend } from './utils/multisend' @@ -141,9 +142,9 @@ export class LocalRelayer implements Relayer { return tx } - async getFeeOptions(chainId: number) { + getFeeOptions(chainId: number) : FeeOptionsResponse { console.log('requested fee options for chain ', chainId); - const feeOptions = { + const feeOptions: FeeOptionsResponse = { "msg": "all ok", "data": { "chainId": 5, From 8ae1ba0a61735297fe94503c4f306d9f33566607 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 19 Aug 2022 21:19:30 +0530 Subject: [PATCH 0093/1247] additional gas for prepend + dev notes --- packages/smart-account/src/SmartAccount.ts | 35 ++++++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 115cb6cd8..b3fb68a5b 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -386,6 +386,8 @@ class SmartAccount { * @todo Rename based on other variations to prepare transaction * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) * @param transaction + * @param feeToken choice to token to refund the relayer with + * @param tokenGasPrice selected fee quote details * @param batchId * @param chainId * @returns @@ -418,7 +420,7 @@ class SmartAccount { } console.log(internalTx); const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); - const gasEstimate1 = Number(response.data.gas) + const gasEstimate1 = Number(response.data.gas) + 50000 console.log('required txgas estimate ', gasEstimate1); // Depending on feeToken provide baseGas! @@ -445,7 +447,7 @@ class SmartAccount { data: transaction.data, // for token transfers use encodeTransfer targetTxGas: gasEstimate1, baseGas, - refundReceiver: "0x0000000000000000000000000000000000000000", + refundReceiver: "0x0000000000000000000000000000000000000000", // const 0 gasPrice: refundDetails.gasPrice.toString(), //review gasToken: refundDetails.gasToken, nonce @@ -489,6 +491,17 @@ class SmartAccount { return walletTx } + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Rename based on other variations to prepare transaction + * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) + * @param transactions + * @param feeToken choice to token to refund the relayer with + * @param tokenGasPrice selected fee quote details + * @param batchId + * @param chainId + * @returns + */ async createRefundTransactionBatch( transactions: Transaction[], feeToken: string, // review types @@ -497,12 +510,20 @@ class SmartAccount { chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); - + + let additionalBaseGas = 0; + // NOTE : If the wallet is not deployed yet then nonce would be zero let nonce = 0; if(await this.isDeployed(chainId)) { nonce = (await walletContract.getNonce(batchId)).toNumber(); - } + } else { + // We know it's going to get deployed by Relayer + // but we handle refund cost here.. + additionalBaseGas += 261884; // wallet deployment gas + additionalBaseGas -= 21000; + // could be done using external call (gasEstimatorv api) + } console.log('nonce: ', nonce); const txs: MetaTransaction[] = []; @@ -534,9 +555,11 @@ class SmartAccount { operation: walletTx.operation } console.log(internalTx); + // TODO + // Currently we can't do these estimations without wallet being deployed... const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); // considerable offset ref gnosis safe service client safeTxGas - const gasEstimate1 = Number(response.data.gas) //+ 50000 + const gasEstimate1 = Number(response.data.gas) + 50000 console.log('required txgas estimate ', gasEstimate1); // Depending on feeToken provide baseGas! @@ -555,7 +578,7 @@ class SmartAccount { console.log('handle payment estimate ', handlePaymentEstimate); // If the wallet deployment has to be appended then baseGas would change - const baseGas = handlePaymentEstimate + 4928 + 2360; // delegate call + event emission + state updates + const baseGas = handlePaymentEstimate + 4928 + 2360 + additionalBaseGas; // delegate call + event emission + state updates const finalWalletTx: WalletTransaction = buildSmartAccountTransaction({ to: walletTx.to, From a4b6d359a1a30db7d658733ca2da68c3f7a04682 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sat, 20 Aug 2022 01:03:37 +0530 Subject: [PATCH 0094/1247] temp control flow in refund tx batch --- package.json | 2 +- packages/smart-account/src/SmartAccount.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index eb0da446f..e7dc0ab83 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "devDependencies": { "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.5.7", + "nx": "^14.5.8", "prettier": "2.7.1", "ts-node": "^10.8.2" } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index b3fb68a5b..ed62da8c2 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -592,6 +592,12 @@ class SmartAccount { gasToken: refundDetails.gasToken, nonce }) + + // If wallet is not deployed revise targetTxGas and baseGas + if(!(await this.isDeployed(chainId))) { + finalWalletTx.targetTxGas = 500000 + finalWalletTx.baseGas = baseGas + 22900 + } return finalWalletTx } From 4aa9018c78ff3457d1aa4de71aab913117772105 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 23 Aug 2022 17:45:36 +0400 Subject: [PATCH 0095/1247] tokenGasPrice factor + fee quote changes --- packages/core-types/src/transaction.types.ts | 2 + packages/core-types/src/types.ts | 22 ++- .../smart-contract-wallet/SmartWallet.sol | 12 +- .../storage/WalletStorage.sol | 1 + .../SmartWallet/SmartWalletContractEthers.ts | 1 + packages/relayer/src/index.ts | 3 +- packages/relayer/src/local-relayer.ts | 20 +- packages/relayer/src/rest-relayer.ts | 2 +- packages/smart-account/src/SmartAccount.ts | 185 ++++++++++++++---- packages/smart-account/src/assets/index.ts | 11 ++ packages/transactions/src/execution.ts | 6 + 11 files changed, 211 insertions(+), 54 deletions(-) diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index 9f76c0bf5..9a62b8d7b 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -35,6 +35,7 @@ export interface FeeRefund { gasUsed: string | number baseGas: string | number gasPrice: string | number + tokenGasPriceFactor: string | number gasToken: string refundReceiver: string } @@ -75,6 +76,7 @@ export interface WalletTransaction extends MetaTransaction{ targetTxGas: string | number baseGas: string | number gasPrice: string | number + tokenGasPriceFactor: string | number gasToken: string refundReceiver: string nonce: number diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 00df8462d..a5d1ce290 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -28,6 +28,7 @@ export interface FeeRefundData { readonly gasUsed: number readonly baseGas: number readonly gasPrice: number + readonly tokenGasPriceFactor: string | number readonly gasToken: string readonly refundReceiver: string } @@ -51,21 +52,40 @@ export interface UserOperation { signature: string } +export const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000" + export interface RestRelayerOptions { url: string } export interface TokenData { - tokenGasPrice: string, + tokenGasPrice: number, // review + offset?: number, // review symbol: string, address: string, decimal: number, logoUrl: string } + +export interface FeeQuote { + symbol: string, + address: string, + decimal: number, + logoUrl: string, + payment: number, + tokenGasPrice: number, //review + offset?: number, +} + export interface FeeOptionsResponse { msg: string, data: { chainId: number, response: Array } +} +export interface FeeOption { + feeToken: string, + tokenGasPrice: number | string, //review + offset: number | string // review } \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol index c7ed9e269..68f39fecd 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol @@ -191,7 +191,7 @@ contract SmartWallet is if (refundInfo.gasPrice > 0) { //console.log("sent %s", startGas - gasleft()); // extraGas = gasleft(); - payment = handlePayment(startGas - gasleft(), refundInfo.baseGas, refundInfo.gasPrice, refundInfo.gasToken, refundInfo.refundReceiver); + payment = handlePayment(startGas - gasleft(), refundInfo.baseGas, refundInfo.gasPrice, refundInfo.tokenGasPriceFactor, refundInfo.gasToken, refundInfo.refundReceiver); } if (success) emit ExecutionSuccess(txHash, payment); else emit ExecutionFailure(txHash, payment); @@ -204,6 +204,7 @@ contract SmartWallet is uint256 gasUsed, uint256 baseGas, uint256 gasPrice, + uint256 tokenGasPriceFactor, address gasToken, address payable refundReceiver ) private returns (uint256 payment) { @@ -217,7 +218,7 @@ contract SmartWallet is (bool success,) = receiver.call{value: payment}(""); require(success, "BSA011"); } else { - payment = (gasUsed + baseGas) * (gasPrice); + payment = (gasUsed + baseGas) * (gasPrice) / (tokenGasPriceFactor); require(transferToken(gasToken, receiver, payment), "BSA012"); } // uint256 requiredGas = startGas - gasleft(); @@ -228,6 +229,7 @@ contract SmartWallet is uint256 gasUsed, uint256 baseGas, uint256 gasPrice, + uint256 tokenGasPriceFactor, address gasToken, address payable refundReceiver ) external returns (uint256 payment) { @@ -241,7 +243,7 @@ contract SmartWallet is (bool success,) = receiver.call{value: payment}(""); require(success, "BSA011"); } else { - payment = (gasUsed + baseGas) * (gasPrice); + payment = (gasUsed + baseGas) * (gasPrice) / (tokenGasPriceFactor ); require(transferToken(gasToken, receiver, payment), "BSA012"); } uint256 requiredGas = startGas - gasleft(); @@ -260,7 +262,7 @@ contract SmartWallet is bytes32 dataHash, bytes memory data, bytes memory signatures - ) public view { + ) public view virtual { uint8 v; bytes32 r; bytes32 s; @@ -354,6 +356,7 @@ contract SmartWallet is uint256 targetTxGas, uint256 baseGas, uint256 gasPrice, + uint256 tokenGasPriceFactor, address gasToken, address payable refundReceiver, uint256 _nonce @@ -368,6 +371,7 @@ contract SmartWallet is FeeRefund memory refundInfo = FeeRefund({ baseGas: baseGas, gasPrice: gasPrice, + tokenGasPriceFactor: tokenGasPriceFactor, gasToken: gasToken, refundReceiver: refundReceiver }); diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol index 9710efb45..709455f9f 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol @@ -34,6 +34,7 @@ contract WalletStorage { struct FeeRefund { uint256 baseGas; uint256 gasPrice; //gasPrice or tokenGasPrice + uint256 tokenGasPriceFactor; address gasToken; address payable refundReceiver; } diff --git a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts index a5d8f9c07..3c4c123b6 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/SmartWalletContractEthers.ts @@ -51,6 +51,7 @@ class SmartWalletContractEthers implements SmartWalletContract { smartAccountTrxData.targetTxGas, smartAccountTrxData.baseGas, smartAccountTrxData.gasPrice, + smartAccountTrxData.tokenGasPriceFactor, smartAccountTrxData.gasToken, smartAccountTrxData.refundReceiver, smartAccountTrxData.nonce diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index 996f0485c..a8cb91b82 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -1,10 +1,11 @@ import { TransactionResponse } from '@ethersproject/providers' -import { SignedTransaction, SmartAccountState, SmartAccountContext } from '@biconomy-sdk/core-types' +import { SignedTransaction, SmartAccountState, SmartAccountContext, FeeOptionsResponse } from '@biconomy-sdk/core-types' export interface Relayer { // relayer will submit the transaction(s) to the network and return the transaction response. // The quote should be the one returned from getFeeOptions, if any. /*quote?: FeeQuote*/ + getFeeOptions(chainId: number): Promise relay(rawTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext): Promise // wait for transaction confirmation // wait(metaTxnId: string | SignedTransactions, timeout: number): Promise diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index 8e5b210b3..4e778ceab 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -136,26 +136,26 @@ export class LocalRelayer implements Relayer { const tx = this.signer.sendTransaction({ ...signedTx.rawTx, - gasLimit: ethers.constants.Two.pow(24), - gasPrice: 5000000000, + gasLimit: ethers.constants.Two.pow(24) }) return tx } - getFeeOptions(chainId: number) : FeeOptionsResponse { + async getFeeOptions(chainId: number) : Promise { console.log('requested fee options for chain ', chainId); const feeOptions: FeeOptionsResponse = { "msg": "all ok", "data": { "chainId": 5, "response": [ - { - "tokenGasPrice": "5", - "symbol": "USDC", - "address": "0xb5B640E6414b6DeF4FC9B3C1EeF373925effeCcF", - "decimal": 6, - "logoUrl": "https://raw.githubusercontent.com/spothq/cryptocurrency-icons/master/128/color/usdc.png" - }] + { + "tokenGasPrice": 157718, + "symbol": "USDC", + "address": "0xb5B640E6414b6DeF4FC9B3C1EeF373925effeCcF", + "decimal": 6, + "logoUrl": "https://raw.githubusercontent.com/spothq/cryptocurrency-icons/master/128/color/usdc.png", + "offset": 1000000 + }] } }; return feeOptions; diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 91f553f8a..c808dce85 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -143,7 +143,7 @@ export class RestRelayer implements Relayer { return sendRequest({ url: `${this.#relayServiceBaseUrl}`, method: HttpMethod.Post, - body: { ...signedTx.rawTx, gasLimit: ethers.constants.Two.pow(24) } + body: { ...signedTx.rawTx, /*gasLimit: ethers.constants.Two.pow(24)*/ } }) } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index ed62da8c2..adfbef2db 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -18,7 +18,11 @@ import { SmartAccountState, MetaTransactionData, OperationType, - FeeRefundData + FeeRefundData, + TokenData, + FeeQuote, + FeeOptionsResponse, + ZERO_ADDRESS } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' import NodeClient, { ChainConfig, SupportedChainsResponse } from '@biconomy-sdk/node-client' @@ -36,6 +40,7 @@ import { MetaTransaction, buildMultiSendSmartAccountTx } from '@biconomy-sdk/transactions' +import { GasEstimator } from './assets' import { BalancesDto } from '@biconomy-sdk/node-client' import { BalancesResponse, UsdBalanceResponse, EstimateGasResponse } from '@biconomy-sdk/node-client' @@ -301,6 +306,7 @@ class SmartAccount { const refundInfo: FeeRefund = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, + tokenGasPriceFactor: tx.tokenGasPriceFactor, gasToken: tx.gasToken, refundReceiver: tx.refundReceiver } @@ -339,21 +345,41 @@ class SmartAccount { * @param batchId * @param chainId */ - /*async prepareRefundTransaction( + async prepareRefundTransaction( transaction: Transaction, batchId: number = 0, // may not be necessary - chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { + chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - // const gasPriceQuotes = relayer.getFeeOptions + const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; + let feeQuotes: Array = []; // 1. If wallet is deployed // 2. If wallet is not deployed (batch wallet deployment on multisend) - // actual estimation with dummy sig - // => calc feeQuotes => store to be shown in widget (If wallet is not deployed show higher quote) + // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth + const estimatedGasUsed: number = await this.estimateTransaction(transaction, batchId, chainId); + + feeOptionsAvailable.forEach((feeOption) => { + const tokenGasPrice = feeOption.tokenGasPrice || 0; + const offset = feeOption.offset || 1; + let payment = tokenGasPrice * estimatedGasUsed / offset; + + let feeQuote = { + symbol: feeOption.symbol, + address: feeOption.address, + decimal: feeOption.decimal, + logoUrl: feeOption.logoUrl, + tokenGasPrice: feeOption.tokenGasPrice, + offset: feeOption.offset, + payment: payment + } - // return {a, b} - }*/ + feeQuotes.push(feeQuote); + }); + + return feeQuotes; + } // Get Fee Options from relayer and make it available for display // We can also show list of transactions to be processed (decodeContractCall) @@ -363,21 +389,64 @@ class SmartAccount { * @param batchId * @param chainId */ - /*async prepareRefundTransactionBatch( + async prepareRefundTransactionBatch( transactions: Transaction[], batchId: number = 0, // may not be necessary - chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { + chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - // const gasPriceQuotes = relayer.getFeeOptions + const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; + let feeQuotes: Array = []; // 1. If wallet is deployed // 2. If wallet is not deployed (batch wallet deployment on multisend) - // actual estimation with dummy sig - // => calc feeQuotes => store to be shown in widget (If wallet is not deployed show higher quote) + // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth + const estimatedGasUsed: number = await this.estimateTransactionBatch(transactions, batchId, chainId); + + feeOptionsAvailable.forEach((feeOption) => { + const tokenGasPrice = feeOption.tokenGasPrice || 0; + const offset = feeOption.offset || 1; + let payment = tokenGasPrice * estimatedGasUsed / offset; + + let feeQuote = { + symbol: feeOption.symbol, + address: feeOption.address, + decimal: feeOption.decimal, + logoUrl: feeOption.logoUrl, + tokenGasPrice: feeOption.tokenGasPrice, + offset: feeOption.offset, + payment: payment + } - // return {a, b} - }*/ + feeQuotes.push(feeQuote); + }); + + return feeQuotes; + } + + async estimateTransactionBatch( + transactions: Transaction[], + batchId: number = 0, // may not be necessary + chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + // eth_call api method + let estimatedGasUsed = 500000; + console.log('transactions ', transactions); + console.log('batchId ', batchId); + console.log('chainId ', chainId); + return estimatedGasUsed; + } + + async estimateTransaction(transaction: Transaction, + batchId: number = 0, // may not be necessary + chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + // eth_call api method + let estimatedGasUsed = 500000; + console.log('transaction ', transaction); + console.log('batchId ', batchId); + console.log('chainId ', chainId); + return estimatedGasUsed; + } // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions @@ -394,8 +463,7 @@ class SmartAccount { */ async createRefundTransaction( transaction: Transaction, - feeToken: string, // review types - tokenGasPrice: number, // review types + feeQuote: FeeQuote, batchId: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { @@ -420,7 +488,7 @@ class SmartAccount { } console.log(internalTx); const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); - const gasEstimate1 = Number(response.data.gas) + 50000 + const gasEstimate1 = Number(response.data.gas) + 50000 // review // check safeServiceClient console.log('required txgas estimate ', gasEstimate1); // Depending on feeToken provide baseGas! @@ -428,18 +496,23 @@ class SmartAccount { const refundDetails: FeeRefundData = { gasUsed: gasEstimate1, baseGas: gasEstimate1, - gasPrice: tokenGasPrice, // this would be token gas price // review - gasToken: feeToken, - refundReceiver: "0x0000000000000000000000000000000000000000" + gasPrice: feeQuote.tokenGasPrice, + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: ZERO_ADDRESS } const handlePaymentResponse = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails); - const handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) console.log('handle payment estimate ', handlePaymentEstimate); // If the wallet deployment has to be appended then baseGas would change - const baseGas = handlePaymentEstimate + 4928 + 2360; // delegate call + event emission + state updates + if(handlePaymentEstimate === 0){ + handlePaymentEstimate = 22900 + } + console.log('handlePaymentEstimate ', handlePaymentEstimate); + const baseGas = 22900 + 4928 + 2360; // delegate call + event emission + state updates const walletTx: WalletTransaction = buildSmartAccountTransaction({ to: transaction.to, @@ -447,8 +520,9 @@ class SmartAccount { data: transaction.data, // for token transfers use encodeTransfer targetTxGas: gasEstimate1, baseGas, - refundReceiver: "0x0000000000000000000000000000000000000000", // const 0 + refundReceiver: ZERO_ADDRESS, gasPrice: refundDetails.gasPrice.toString(), //review + tokenGasPriceFactor: refundDetails.tokenGasPriceFactor.toString(), gasToken: refundDetails.gasToken, nonce }) @@ -504,8 +578,7 @@ class SmartAccount { */ async createRefundTransactionBatch( transactions: Transaction[], - feeToken: string, // review types - tokenGasPrice: number, // review types, + feeQuote: FeeQuote, batchId:number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let walletContract = this.smartAccount(chainId).getContract(); @@ -518,10 +591,32 @@ class SmartAccount { if(await this.isDeployed(chainId)) { nonce = (await walletContract.getNonce(batchId)).toNumber(); } else { + + const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); + const walletFactoryInterface = this.factory().getInterface(); + const state = await this.getSmartAccountState(); + + + const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ + this.factory().getAddress(), + walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ + state.owner, + state.entryPointAddress, + state.fallbackHandlerAddress, + 0 + ]) + ]) + console.log('encodedEstimate ', encodedEstimateData) + + const deployCostresponse = await this.estimateExternalGas(chainId, encodedEstimateData); + const estimateWalletDeployment = Number(deployCostresponse.data.gas); + console.log('estimateWalletDeployment ', estimateWalletDeployment); + + // We know it's going to get deployed by Relayer // but we handle refund cost here.. - additionalBaseGas += 261884; // wallet deployment gas - additionalBaseGas -= 21000; + additionalBaseGas += estimateWalletDeployment; // wallet deployment gas + additionalBaseGas -= 21000; // cause it would be pretty much accounted in internal txn on wallet // could be done using external call (gasEstimatorv api) } console.log('nonce: ', nonce); @@ -558,27 +653,41 @@ class SmartAccount { // TODO // Currently we can't do these estimations without wallet being deployed... const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); + + // If we get this reponse zero, there has to be a way to estimate this fror undeployed wallet + // i. use really high value + // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] + // considerable offset ref gnosis safe service client safeTxGas const gasEstimate1 = Number(response.data.gas) + 50000 console.log('required txgas estimate ', gasEstimate1); // Depending on feeToken provide baseGas! + + console.log('feeQuote.offset ', feeQuote.offset); const refundDetails: FeeRefundData = { gasUsed: gasEstimate1, baseGas: gasEstimate1, - gasPrice: tokenGasPrice, // this would be token gas price // review - gasToken: feeToken, - refundReceiver: "0x0000000000000000000000000000000000000000" + gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: ZERO_ADDRESS } const handlePaymentResponse = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails); - const handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - - console.log('handle payment estimate ', handlePaymentEstimate); - + // If we get this reponse zero, there has to be a way to estimate this for undeployed wallet + // We could use constant value provided by the relayer + let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + + if(handlePaymentEstimate === 0){ + handlePaymentEstimate = 22900 + } + console.log('handlePaymentEstimate ', handlePaymentEstimate); + // If the wallet deployment has to be appended then baseGas would change - const baseGas = handlePaymentEstimate + 4928 + 2360 + additionalBaseGas; // delegate call + event emission + state updates + const regularOffSet = 4928 + 2360; + const baseGas = 22900 + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment const finalWalletTx: WalletTransaction = buildSmartAccountTransaction({ to: walletTx.to, @@ -587,13 +696,15 @@ class SmartAccount { operation: walletTx.operation, targetTxGas: gasEstimate1, baseGas: baseGas, - refundReceiver: "0x0000000000000000000000000000000000000000", + refundReceiver: ZERO_ADDRESS, gasPrice: refundDetails.gasPrice.toString(), //review + tokenGasPriceFactor: refundDetails.tokenGasPriceFactor.toString(), gasToken: refundDetails.gasToken, nonce }) // If wallet is not deployed revise targetTxGas and baseGas + // Temp... if(!(await this.isDeployed(chainId))) { finalWalletTx.targetTxGas = 500000 finalWalletTx.baseGas = baseGas + 22900 diff --git a/packages/smart-account/src/assets/index.ts b/packages/smart-account/src/assets/index.ts index e085aee64..89bf02c24 100644 --- a/packages/smart-account/src/assets/index.ts +++ b/packages/smart-account/src/assets/index.ts @@ -1245,3 +1245,14 @@ export const WalletFactory = { } ] } + +export const GasEstimator = { + defaultAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', + released: true, + contractName: 'WalletFactory', + version: '1.0.0', + networkAddresses: { + '5': '0xc6e8748a08e591250a3eed526e9455859633c6c4', + }, + abi: [ { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "estimate", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" }, { "internalType": "bytes", "name": "result", "type": "bytes" }, { "internalType": "uint256", "name": "gas", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ] +} \ No newline at end of file diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index 58e98069d..cda1ecc46 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -69,6 +69,7 @@ export interface Transaction { export interface FeeRefund { baseGas: string | number gasPrice: string | number + tokenGasPriceFactor: string | number gasToken: string refundReceiver: string } @@ -77,6 +78,7 @@ export interface WalletTransaction extends MetaTransaction{ targetTxGas: string | number baseGas: string | number gasPrice: string | number + tokenGasPriceFactor: string | number gasToken: string refundReceiver: string nonce: number @@ -214,6 +216,7 @@ export const executeTx = async ( const refundInfo: FeeRefund = { baseGas: SmartAccountTx.baseGas, gasPrice: SmartAccountTx.gasPrice, + tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, gasToken: SmartAccountTx.gasToken, refundReceiver: SmartAccountTx.refundReceiver } @@ -243,6 +246,7 @@ export const populateExecuteTx = async ( const refundInfo: FeeRefund = { baseGas: SmartAccountTx.baseGas, gasPrice: SmartAccountTx.gasPrice, + tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, gasToken: SmartAccountTx.gasToken, refundReceiver: SmartAccountTx.refundReceiver } @@ -317,6 +321,7 @@ export const buildSmartAccountTransaction = (template: { targetTxGas?: number | string baseGas?: number | string gasPrice?: number | string + tokenGasPriceFactor?: number | string gasToken?: string refundReceiver?: string nonce: number @@ -329,6 +334,7 @@ export const buildSmartAccountTransaction = (template: { targetTxGas: template.targetTxGas || 0, baseGas: template.baseGas || 0, gasPrice: template.gasPrice || 0, + tokenGasPriceFactor: template.tokenGasPriceFactor || 1, gasToken: template.gasToken || AddressZero, refundReceiver: template.refundReceiver || AddressZero, nonce: template.nonce From 35bbe7a19d403ac5985bed18e811043ded7009dd Mon Sep 17 00:00:00 2001 From: arcticfloyd1984 Date: Wed, 24 Aug 2022 13:32:39 +0530 Subject: [PATCH 0096/1247] updated rest relayer end point with refundInfo --- packages/relayer/src/rest-relayer.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 91f553f8a..defe40d2c 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -143,7 +143,10 @@ export class RestRelayer implements Relayer { return sendRequest({ url: `${this.#relayServiceBaseUrl}`, method: HttpMethod.Post, - body: { ...signedTx.rawTx, gasLimit: ethers.constants.Two.pow(24) } + body: { ...signedTx.rawTx, gasLimit: ethers.constants.Two.pow(24), refundInfo: { + tokenGasPrice: signedTx.tx.gasPrice, + gasToken: signedTx.tx.gasToken, + } } }) } From 4c6ca01a75f528ab0e8ae9ac0a219dc2f94a36cd Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 25 Aug 2022 10:51:56 +0400 Subject: [PATCH 0097/1247] nx package version update --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e7dc0ab83..fec067df5 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "devDependencies": { "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.5.8", + "nx": "^14.5.10", "prettier": "2.7.1", "ts-node": "^10.8.2" } From 93b45d079f4a019154018e346c716a88a79cfa30 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 25 Aug 2022 11:36:16 +0400 Subject: [PATCH 0098/1247] version 1.0.1 publish ready --- lerna.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- .../handler/DefaultCallbackHandler.sol | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/smart-account/src/assets/index.ts | 10 +++++----- packages/transactions/package.json | 2 +- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/lerna.json b/lerna.json index 28fff685d..4cd4a921d 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages/*" ], "useNx": true, - "version": "1.0.0" + "version": "1.0.1" } diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 2da83105a..a45f7f7c1 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.0", + "version": "1.0.1", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 3140a2add..9be4d5995 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.0", + "version": "1.0.1", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol index be93b483c..fec92fef2 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol @@ -10,7 +10,7 @@ import "../interfaces/IERC165.sol"; /// @author Richard Meissner - contract DefaultCallbackHandler is ERC1155TokenReceiver, ERC777TokensRecipient, ERC721TokenReceiver, IERC165 { string public constant NAME = "Default Callback Handler"; - string public constant VERSION = "1.0.0"; + string public constant VERSION = "1.0.1"; function onERC1155Received( address, diff --git a/packages/node-client/package.json b/packages/node-client/package.json index f9a93b6b7..d8cb078b3 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.0", + "version": "1.0.1", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 8bf0a2914..afda1e15c 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.0", + "version": "1.0.1", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index c28eeee0b..52a0f709a 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.0", + "version": "1.0.1", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/smart-account/src/assets/index.ts b/packages/smart-account/src/assets/index.ts index 89bf02c24..1f0f2a5e8 100644 --- a/packages/smart-account/src/assets/index.ts +++ b/packages/smart-account/src/assets/index.ts @@ -2,7 +2,7 @@ export const MultiSend = { defaultAddress: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', released: true, contractName: 'MultiSend', - version: '1.0.0', + version: '1.0.1', networkAddresses: { '1': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', '4': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', @@ -40,7 +40,7 @@ export const MultiSendCallOnly = { defaultAddress: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', released: true, contractName: 'MultiSendCallOnly', - version: '1.0.0', + version: '1.0.1', networkAddresses: { '1': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', '4': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', @@ -73,7 +73,7 @@ export const SmartWallet = { defaultAddress: '0x056DcE811A2b695171274855E7246039Df298158', released: true, contractName: 'SmartWallet', - version: '1.0.0', + version: '1.0.1', networkAddresses: { '1': '0x056DcE811A2b695171274855E7246039Df298158', '4': '0x056DcE811A2b695171274855E7246039Df298158', @@ -1088,7 +1088,7 @@ export const WalletFactory = { defaultAddress: '0x050bca32264195976Fe00BcA566B548413A9E658', released: true, contractName: 'WalletFactory', - version: '1.0.0', + version: '1.0.1', networkAddresses: { '1': '0x050bca32264195976Fe00BcA566B548413A9E658', '4': '0x050bca32264195976Fe00BcA566B548413A9E658', @@ -1250,7 +1250,7 @@ export const GasEstimator = { defaultAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', released: true, contractName: 'WalletFactory', - version: '1.0.0', + version: '1.0.1', networkAddresses: { '5': '0xc6e8748a08e591250a3eed526e9455859633c6c4', }, diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 9a3e40233..fd907aab1 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.0", + "version": "1.0.1", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From bc4dc01302d1e7cbbc25f56d0270968277ca5765 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 25 Aug 2022 13:19:20 +0400 Subject: [PATCH 0099/1247] forward approach latest contracts --- .../smart-contract-wallet/SmartWallet.sol | 5 +- .../SmartWalletGasEstimation.sol | 574 ++++++++++++++++++ .../SmartWalletNoAuth.sol | 67 ++ .../handler/DefaultCallbackHandler.sol | 2 +- .../smart-contract-wallet/test/TestToken.sol | 4 + 5 files changed, 648 insertions(+), 4 deletions(-) create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletGasEstimation.sol create mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletNoAuth.sol diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol index 68f39fecd..1b16dfe06 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol @@ -20,7 +20,6 @@ import "./common/SecuredTokenTransfer.sol"; import "./interfaces/ISignatureValidator.sol"; import "./interfaces/IERC165.sol"; import "./libs/ECDSA.sol"; -// import "hardhat/console.sol"; // Hooks not made a base yet contract SmartWallet is @@ -199,7 +198,7 @@ contract SmartWallet is //console.log("extra gas %s ", extraGas); } } - + function handlePayment( uint256 gasUsed, uint256 baseGas, @@ -243,7 +242,7 @@ contract SmartWallet is (bool success,) = receiver.call{value: payment}(""); require(success, "BSA011"); } else { - payment = (gasUsed + baseGas) * (gasPrice) / (tokenGasPriceFactor ); + payment = (gasUsed + baseGas) * (gasPrice) / (tokenGasPriceFactor); require(transferToken(gasToken, receiver, payment), "BSA012"); } uint256 requiredGas = startGas - gasleft(); diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletGasEstimation.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletGasEstimation.sol new file mode 100644 index 000000000..88e465988 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletGasEstimation.sol @@ -0,0 +1,574 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +//TODO +//review Base licensing +//https://spdx.org/licenses/ + +import "./libs/LibAddress.sol"; +import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "./IWallet.sol"; +import "./common/Singleton.sol"; +import "./storage/WalletStorage.sol"; +import "./base/ModuleManager.sol"; +import "./base/FallbackManager.sol"; +import "./common/SignatureDecoder.sol"; +// import "./common/Hooks.sol"; +import "./common/SecuredTokenTransfer.sol"; +import "./interfaces/ISignatureValidator.sol"; +import "./interfaces/IERC165.sol"; +import "./libs/ECDSA.sol"; +// import "hardhat/console.sol"; + +// Hooks not made a base yet +contract SmartWalletGasEstimation is + Singleton, + IWallet, + IERC165, + WalletStorage, + ModuleManager, + SignatureDecoder, + SecuredTokenTransfer, + ISignatureValidatorConstants, + FallbackManager, + Initializable + { + using ECDSA for bytes32; + using LibAddress for address; + + event ImplementationUpdated(address newImplementation); + event ExecutionFailure(bytes32 txHash, uint256 payment); + event ExecutionSuccess(bytes32 txHash, uint256 payment); + event EntryPointChanged(address oldEntryPoint, address newEntryPoint); + event EOAChanged(address indexed _scw, address indexed _oldEOA, address indexed _newEOA); + + // modifiers + // onlyOwner + /** + * @notice Throws if the sender is not an the owner. + */ + modifier onlyOwner { + require(msg.sender == owner, "Smart Account:: Sender is not authorized"); + _; + } + + // onlyOwner OR self + modifier mixedAuth { + require(msg.sender == owner || msg.sender == address(this),"Only owner or self"); + _; + } + + // @notice authorized modifier (onlySelf) is already inherited + + // Setters + + function setOwner(address _newOwner) external mixedAuth { + require(_newOwner != address(0), "Smart Account:: new Signatory address cannot be zero"); + owner = _newOwner; + emit EOAChanged(address(this),owner,_newOwner); + } + + /** + * @notice Updates the implementation of the base wallet + * @param _implementation New wallet implementation + */ + function updateImplementation(address _implementation) external mixedAuth { + require(_implementation.isContract(), "INVALID_IMPLEMENTATION"); + _setImplementation(_implementation); + emit ImplementationUpdated(_implementation); + } + + function updateEntryPoint(address _entryPoint) external mixedAuth { + require(_entryPoint != address(0), "Smart Account:: new entry point address cannot be zero"); + emit EntryPointChanged(entryPoint, _entryPoint); + entryPoint = _entryPoint; + } + + // Getters + + function domainSeparator() public view returns (bytes32) { + return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this)); + } + + /// @dev Returns the chain id used by this contract. + function getChainId() public view returns (uint256) { + uint256 id; + // solhint-disable-next-line no-inline-assembly + assembly { + id := chainid() + } + return id; + } + + /** + * @dev returns a value from the nonces 2d mapping + * @param batchId : the key of the user's batch being queried + * @return nonce : the number of transaction made within said batch + */ + function getNonce(uint256 batchId) + public view + returns (uint256) { + return nonces[batchId]; + } + + // Initialize / Setup + // Used to setup + // i. owner ii. entry point iii. handlers + function init(address _owner, address _entryPoint, address _handler) public initializer { + require(owner == address(0), "Already initialized"); + require(entryPoint == address(0), "Already initialized"); + require(_owner != address(0),"Invalid owner"); + require(_entryPoint != address(0), "Invalid Entrypoint"); + owner = _owner; + entryPoint = _entryPoint; + if (_handler != address(0)) internalSetFallbackHandler(_handler); + setupModules(address(0), bytes("")); + } + + /** + * @dev Returns the largest of two numbers. + */ + function max(uint256 a, uint256 b) internal pure returns (uint256) { + return a >= b ? a : b; + } + + // Gnosis style transaction with optional repay in native tokens OR ERC20 + /// @dev Allows to execute a Safe transaction confirmed by required number of owners and then pays the account that submitted the transaction. + /// Note: The fees are always transferred, even if the user transaction fails. + /// @param _tx Wallet transaction + /// @param batchId batchId key for 2D nonces + /// @param refundInfo Required information for gas refunds + function execTransactionEstimation( + Transaction memory _tx, + uint256 batchId, + FeeRefund memory refundInfo + ) public payable virtual returns (bool success) { + // initial gas = 21k + non_zero_bytes * 16 + zero_bytes * 4 + // ~= 21k + calldata.length * [1/3 * 16 + 2/3 * 4] + uint256 startGas = gasleft() + 21000 + msg.data.length * 8; + //console.log("init %s", 21000 + msg.data.length * 8); + bytes32 txHash; + // Use scope here to limit variable lifetime and prevent `stack too deep` errors + { + bytes memory txHashData = + encodeTransactionData( + // Transaction info + _tx, + // Payment info + refundInfo, + // Signature info + nonces[batchId] + ); + // Increase nonce and execute transaction. + // Default space aka batchId is 0 + nonces[batchId]++; + txHash = keccak256(txHashData); + // this is not the one with fake sig verification + // checkSignatures(txHash, txHashData, signatures); + } + + + // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500) + // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150 + require(gasleft() >= max((_tx.targetTxGas * 64) / 63,_tx.targetTxGas + 2500) + 500, "BSA010"); + // Use scope here to limit variable lifetime and prevent `stack too deep` errors + { + // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than targetTxGas) + // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than targetTxGas + success = execute(_tx.to, _tx.value, _tx.data, _tx.operation, refundInfo.gasPrice == 0 ? (gasleft() - 2500) : _tx.targetTxGas); + // If no targetTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful + // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert + require(success || _tx.targetTxGas != 0 || refundInfo.gasPrice != 0, "BSA013"); + // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls + uint256 payment = 0; + // uint256 extraGas; + // We may send gasPrice 0 + if (refundInfo.gasPrice > 0) { + //console.log("sent %s", startGas - gasleft()); + // extraGas = gasleft(); + payment = handlePayment(startGas - gasleft(), refundInfo.baseGas, refundInfo.gasPrice, refundInfo.tokenGasPriceFactor, refundInfo.gasToken, refundInfo.refundReceiver); + } + if (success) emit ExecutionSuccess(txHash, payment); + else emit ExecutionFailure(txHash, payment); + // extraGas = extraGas - gasleft(); + //console.log("extra gas %s ", extraGas); + uint256 requiredGas = startGas - gasleft(); + // Convert response to string and return via error message + revert(string(abi.encodePacked(requiredGas))); + } + } + + // @review 2D nonces and args as default batchId 0 is always used + // TODO : Update description + // TODO : Add batchId and update in test cases, utils etc + // Gnosis style transaction with optional repay in native tokens OR ERC20 + /// @dev Allows to execute a Safe transaction confirmed by required number of owners and then pays the account that submitted the transaction. + /// Note: The fees are always transferred, even if the user transaction fails. + /// @param _tx Wallet transaction + /// @param batchId batchId key for 2D nonces + /// @param refundInfo Required information for gas refunds + /// @param signatures Packed signature data ({bytes32 r}{bytes32 s}{uint8 v}) + function execTransaction( + Transaction memory _tx, + uint256 batchId, + FeeRefund memory refundInfo, + bytes memory signatures + ) public payable virtual returns (bool success) { + // initial gas = 21k + non_zero_bytes * 16 + zero_bytes * 4 + // ~= 21k + calldata.length * [1/3 * 16 + 2/3 * 4] + uint256 startGas = gasleft() + 21000 + msg.data.length * 8; + //console.log("init %s", 21000 + msg.data.length * 8); + bytes32 txHash; + // Use scope here to limit variable lifetime and prevent `stack too deep` errors + { + bytes memory txHashData = + encodeTransactionData( + // Transaction info + _tx, + // Payment info + refundInfo, + // Signature info + nonces[batchId] + ); + // Increase nonce and execute transaction. + // Default space aka batchId is 0 + nonces[batchId]++; + txHash = keccak256(txHashData); + checkSignatures(txHash, txHashData, signatures); + } + + + // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500) + // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150 + require(gasleft() >= max((_tx.targetTxGas * 64) / 63,_tx.targetTxGas + 2500) + 500, "BSA010"); + // Use scope here to limit variable lifetime and prevent `stack too deep` errors + { + // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than targetTxGas) + // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than targetTxGas + success = execute(_tx.to, _tx.value, _tx.data, _tx.operation, refundInfo.gasPrice == 0 ? (gasleft() - 2500) : _tx.targetTxGas); + // If no targetTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful + // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert + require(success || _tx.targetTxGas != 0 || refundInfo.gasPrice != 0, "BSA013"); + // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls + uint256 payment = 0; + // uint256 extraGas; + if (refundInfo.gasPrice > 0) { + //console.log("sent %s", startGas - gasleft()); + // extraGas = gasleft(); + payment = handlePayment(startGas - gasleft(), refundInfo.baseGas, refundInfo.gasPrice, refundInfo.tokenGasPriceFactor, refundInfo.gasToken, refundInfo.refundReceiver); + } + if (success) emit ExecutionSuccess(txHash, payment); + else emit ExecutionFailure(txHash, payment); + // extraGas = extraGas - gasleft(); + //console.log("extra gas %s ", extraGas); + } + } + + function handlePayment( + uint256 gasUsed, + uint256 baseGas, + uint256 gasPrice, + uint256 tokenGasPriceFactor, + address gasToken, + address payable refundReceiver + ) private returns (uint256 payment) { + // uint256 startGas = gasleft(); + // solhint-disable-next-line avoid-tx-origin + address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver; + if (gasToken == address(0)) { + // For ETH we will only adjust the gas price to not be higher than the actual used gas price + payment = (gasUsed + baseGas) * (gasPrice < tx.gasprice ? gasPrice : tx.gasprice); + // Review: low level call value vs transfer + (bool success,) = receiver.call{value: payment}(""); + require(success, "BSA011"); + } else { + payment = (gasUsed + baseGas) * (gasPrice) / (tokenGasPriceFactor); + require(transferToken(gasToken, receiver, payment), "BSA012"); + } + // uint256 requiredGas = startGas - gasleft(); + //console.log("hp %s", requiredGas); + } + + function handlePaymentRevert( + uint256 gasUsed, + uint256 baseGas, + uint256 gasPrice, + uint256 tokenGasPriceFactor, + address gasToken, + address payable refundReceiver + ) external returns (uint256 payment) { + uint256 startGas = gasleft(); + // solhint-disable-next-line avoid-tx-origin + address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver; + if (gasToken == address(0)) { + // For ETH we will only adjust the gas price to not be higher than the actual used gas price + payment = (gasUsed + baseGas) * (gasPrice < tx.gasprice ? gasPrice : tx.gasprice); + // Review: low level call value vs transfer + (bool success,) = receiver.call{value: payment}(""); + require(success, "BSA011"); + } else { + payment = (gasUsed + baseGas) * (gasPrice) / (tokenGasPriceFactor); + require(transferToken(gasToken, receiver, payment), "BSA012"); + } + uint256 requiredGas = startGas - gasleft(); + //console.log("hpr %s", requiredGas); + // Convert response to string and return via error message + revert(string(abi.encodePacked(requiredGas))); + } + + // @review + /** + * @dev Checks whether the signature provided is valid for the provided data, hash. Will revert otherwise. + * @param dataHash Hash of the data (could be either a message hash or transaction hash) + * @param signatures Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash. + */ + function checkSignatures( + bytes32 dataHash, + bytes memory data, + bytes memory signatures + ) public view { + uint8 v; + bytes32 r; + bytes32 s; + uint256 i = 0; + address _signer; + (v, r, s) = signatureSplit(signatures, i); + // review if necessary v = 1 + // review sig verification from other wallets + if(v == 0) { + // If v is 0 then it is a contract signature + // When handling contract signatures the address of the contract is encoded into r + _signer = address(uint160(uint256(r))); + + // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes + // This check is not completely accurate, since it is possible that more signatures than the threshold are send. + // Here we only check that the pointer is not pointing inside the part that is being processed + require(uint256(s) >= uint256(1) * 65, "BSA021"); + + // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes) + require(uint256(s) + 32 <= signatures.length, "BSA022"); + + // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length + uint256 contractSignatureLen; + // solhint-disable-next-line no-inline-assembly + assembly { + contractSignatureLen := mload(add(add(signatures, s), 0x20)) + } + require(uint256(s) + 32 + contractSignatureLen <= signatures.length, "BSA023"); + + // Check signature + bytes memory contractSignature; + // solhint-disable-next-line no-inline-assembly + assembly { + // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s + contractSignature := add(add(signatures, s), 0x20) + } + require(ISignatureValidator(_signer).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, "BSA024"); + } + else if(v > 30) { + // If v > 30 then default va (27,28) has been adjusted for eth_sign flow + // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover + _signer = ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", dataHash)), v - 4, r, s); + require(_signer == owner, "INVALID_SIGNATURE"); + } else { + _signer = ecrecover(dataHash, v, r, s); + require(_signer == owner, "INVALID_SIGNATURE"); + } + } + + /// review necessity for this method for estimating execute call + /// @dev Allows to estimate a transaction. + /// This method is only meant for estimation purpose, therefore the call will always revert and encode the result in the revert data. + /// Since the `estimateGas` function includes refunds, call this method to get an estimated of the costs that are deducted from the safe with `execTransaction` + /// @param to Destination address of Safe transaction. + /// @param value Ether value of transaction. + /// @param data Data payload of transaction. + /// @param operation Operation type of transaction. + /// @return Estimate without refunds and overhead fees (base transaction and payload data gas costs). + function requiredTxGas( + address to, + uint256 value, + bytes calldata data, + Enum.Operation operation + ) external returns (uint256) { + uint256 startGas = gasleft(); + // We don't provide an error message here, as we use it to return the estimate + require(execute(to, value, data, operation, gasleft())); + uint256 requiredGas = startGas - gasleft(); + // Convert response to string and return via error message + revert(string(abi.encodePacked(requiredGas))); + } + + + /// @dev Returns hash to be signed by owner. + /// @param to Destination address. + /// @param value Ether value. + /// @param data Data payload. + /// @param operation Operation type. + /// @param targetTxGas Fas that should be used for the safe transaction. + /// @param baseGas Gas costs for data used to trigger the safe transaction. + /// @param gasPrice Maximum gas price that should be used for this transaction. + /// @param gasToken Token address (or 0 if ETH) that is used for the payment. + /// @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin). + /// @param _nonce Transaction nonce. + /// @return Transaction hash. + function getTransactionHash( + address to, + uint256 value, + bytes calldata data, + Enum.Operation operation, + uint256 targetTxGas, + uint256 baseGas, + uint256 gasPrice, + uint256 tokenGasPriceFactor, + address gasToken, + address payable refundReceiver, + uint256 _nonce + ) public view returns (bytes32) { + Transaction memory _tx = Transaction({ + to: to, + value: value, + data: data, + operation: operation, + targetTxGas: targetTxGas + }); + FeeRefund memory refundInfo = FeeRefund({ + baseGas: baseGas, + gasPrice: gasPrice, + tokenGasPriceFactor: tokenGasPriceFactor, + gasToken: gasToken, + refundReceiver: refundReceiver + }); + return keccak256(encodeTransactionData(_tx, refundInfo, _nonce)); + } + + + /// @dev Returns the bytes that are hashed to be signed by owner. + /// @param _tx Wallet transaction + /// @param refundInfo Required information for gas refunds + /// @param _nonce Transaction nonce. + /// @return Transaction hash bytes. + function encodeTransactionData( + Transaction memory _tx, + FeeRefund memory refundInfo, + uint256 _nonce + ) public view returns (bytes memory) { + bytes32 safeTxHash = + keccak256( + abi.encode( + WALLET_TX_TYPEHASH, + _tx.to, + _tx.value, + keccak256(_tx.data), + _tx.operation, + _tx.targetTxGas, + refundInfo.baseGas, + refundInfo.gasPrice, + refundInfo.gasToken, + refundInfo.refundReceiver, + _nonce + ) + ); + return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash); + } + + // Extra Utils + + // Review: low level call value vs transfer // dest.transfer(amount); + function transfer(address payable dest, uint amount) external onlyOwner { + require(dest != address(0), "this action will burn your funds"); + (bool success,) = dest.call{value:amount}(""); + require(success,"transfer failed"); + } + + function pullTokens(address token, address dest, uint256 amount) external onlyOwner { + IERC20 tokenContract = IERC20(token); + SafeERC20.safeTransfer(tokenContract, dest, amount); + } + + function exec(address dest, uint value, bytes calldata func) external onlyOwner{ + _call(dest, value, func); + } + + function execBatch(address[] calldata dest, bytes[] calldata func) external onlyOwner{ + require(dest.length == func.length, "wrong array lengths"); + for (uint i = 0; i < dest.length;) { + _call(dest[i], 0, func[i]); + unchecked { + ++i; + } + } + } + + // AA implementation + function _call(address sender, uint value, bytes memory data) internal { + // @review linter + (bool success, bytes memory result) = sender.call{value : value}(data); + if (!success) { + // solhint-disable-next-line no-inline-assembly + assembly { + revert(add(result,32), mload(result)) + } + } + } + + function _requireFromEntryPoint() internal view { + require(msg.sender == address(entryPoint), "wallet: not from EntryPoint"); + } + + //called by entryPoint, only after validateUserOp succeeded. + function execFromEntryPoint(address dest, uint value, bytes calldata func) external { + _requireFromEntryPoint(); + _call(dest, value, func); + } + + function validateUserOp(UserOperation calldata userOp, bytes32 requestId, uint requiredPrefund) external override { + _requireFromEntryPoint(); + _validateSignature(userOp, requestId); + //during construction, the "nonce" field hold the salt. + // if we assert it is zero, then we allow only a single wallet per owner. + if (userOp.initCode.length == 0) { + _validateAndUpdateNonce(userOp); + } + _payPrefund(requiredPrefund); + } + + // review nonce conflict with AA userOp nonce + // userOp can omit nonce or have batchId as well! + function _validateAndUpdateNonce(UserOperation calldata userOp) internal { + require(nonces[0]++ == userOp.nonce, "wallet: invalid nonce"); + } + + function _payPrefund(uint requiredPrefund) internal { + if (requiredPrefund != 0) { + //pay required prefund. make sure NOT to use the "gas" opcode, which is banned during validateUserOp + // (and used by default by the "call") + // @review linter + (bool success,) = payable(msg.sender).call{value : requiredPrefund, gas : type(uint).max}(""); + (success); + //ignore failure (its EntryPoint's job to verify, not wallet.) + } + } + + function _validateSignature(UserOperation calldata userOp, bytes32 requestId) internal view { + bytes32 hash = requestId.toEthSignedMessageHash(); + require(owner == hash.recover(userOp.signature), "wallet: wrong signature"); + } + + + /** + * @notice Query if a contract implements an interface + * @param interfaceId The interface identifier, as specified in ERC165 + * @return `true` if the contract implements `_interfaceID` + */ + function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) { + return interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7 + } + + // Review + // withdrawDepositTo + // addDeposit + // getDeposit +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletNoAuth.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletNoAuth.sol new file mode 100644 index 000000000..4f2bdf939 --- /dev/null +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletNoAuth.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "./SmartWallet.sol"; + +contract SmartWalletNoAuth is SmartWallet { + + + /** + * @dev Checks whether the signature provided is valid for the provided data, hash. Will revert otherwise. + * @param dataHash Hash of the data (could be either a message hash or transaction hash) + * @param signatures Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash. + */ + function checkSignatures( + bytes32 dataHash, + bytes memory data, + bytes memory signatures + ) public view override { + uint8 v; + bytes32 r; + bytes32 s; + uint256 i = 0; + address _signer; + (v, r, s) = signatureSplit(signatures, i); + // review if necessary v = 1 + // review sig verification from other wallets + if(v == 0) { + // If v is 0 then it is a contract signature + // When handling contract signatures the address of the contract is encoded into r + _signer = address(uint160(uint256(r))); + + // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes + // This check is not completely accurate, since it is possible that more signatures than the threshold are send. + // Here we only check that the pointer is not pointing inside the part that is being processed + require(uint256(s) >= uint256(1) * 65, "BSA021"); + + // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes) + require(uint256(s) + 32 <= signatures.length, "BSA022"); + + // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length + uint256 contractSignatureLen; + // solhint-disable-next-line no-inline-assembly + assembly { + contractSignatureLen := mload(add(add(signatures, s), 0x20)) + } + require(uint256(s) + 32 + contractSignatureLen <= signatures.length, "BSA023"); + + // Check signature + bytes memory contractSignature; + // solhint-disable-next-line no-inline-assembly + assembly { + // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s + contractSignature := add(add(signatures, s), 0x20) + } + require(ISignatureValidator(_signer).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, "BSA024"); + } + else if(v > 30) { + // If v > 30 then default va (27,28) has been adjusted for eth_sign flow + // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover + _signer = ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", dataHash)), v - 4, r, s); + require(_signer == owner || true, "INVALID_SIGNATURE"); + } else { + _signer = ecrecover(dataHash, v, r, s); + require(_signer == owner || true, "INVALID_SIGNATURE"); + } + } +} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol index fec92fef2..be93b483c 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/handler/DefaultCallbackHandler.sol @@ -10,7 +10,7 @@ import "../interfaces/IERC165.sol"; /// @author Richard Meissner - contract DefaultCallbackHandler is ERC1155TokenReceiver, ERC777TokensRecipient, ERC721TokenReceiver, IERC165 { string public constant NAME = "Default Callback Handler"; - string public constant VERSION = "1.0.1"; + string public constant VERSION = "1.0.0"; function onERC1155Received( address, diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol index ab602edb9..989cee7ed 100644 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol +++ b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol @@ -11,4 +11,8 @@ contract TestToken is ERC20 { function mint(address sender, uint amount) external { _mint(sender, amount); } + + function decimals() public view virtual override returns (uint8) { + return 6; + } } From 272a115b30b3a120cd8875adbd76c83e006190d9 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 25 Aug 2022 13:22:54 +0400 Subject: [PATCH 0100/1247] version update to publish with latest contracts --- lerna.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/smart-account/src/assets/index.ts | 10 +++++----- packages/transactions/package.json | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lerna.json b/lerna.json index 4cd4a921d..8e4561e01 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages/*" ], "useNx": true, - "version": "1.0.1" + "version": "1.0.2" } diff --git a/packages/core-types/package.json b/packages/core-types/package.json index a45f7f7c1..10cae29ce 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.1", + "version": "1.0.2", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 9be4d5995..c1c6a3e82 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.1", + "version": "1.0.2", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index d8cb078b3..e18ea610a 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.1", + "version": "1.0.2", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index afda1e15c..9f2a57c23 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.1", + "version": "1.0.2", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 52a0f709a..bc5ede057 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.1", + "version": "1.0.2", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/smart-account/src/assets/index.ts b/packages/smart-account/src/assets/index.ts index 1f0f2a5e8..9a0067cab 100644 --- a/packages/smart-account/src/assets/index.ts +++ b/packages/smart-account/src/assets/index.ts @@ -2,7 +2,7 @@ export const MultiSend = { defaultAddress: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', released: true, contractName: 'MultiSend', - version: '1.0.1', + version: '1.0.2', networkAddresses: { '1': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', '4': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', @@ -40,7 +40,7 @@ export const MultiSendCallOnly = { defaultAddress: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', released: true, contractName: 'MultiSendCallOnly', - version: '1.0.1', + version: '1.0.2', networkAddresses: { '1': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', '4': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', @@ -73,7 +73,7 @@ export const SmartWallet = { defaultAddress: '0x056DcE811A2b695171274855E7246039Df298158', released: true, contractName: 'SmartWallet', - version: '1.0.1', + version: '1.0.2', networkAddresses: { '1': '0x056DcE811A2b695171274855E7246039Df298158', '4': '0x056DcE811A2b695171274855E7246039Df298158', @@ -1088,7 +1088,7 @@ export const WalletFactory = { defaultAddress: '0x050bca32264195976Fe00BcA566B548413A9E658', released: true, contractName: 'WalletFactory', - version: '1.0.1', + version: '1.0.2', networkAddresses: { '1': '0x050bca32264195976Fe00BcA566B548413A9E658', '4': '0x050bca32264195976Fe00BcA566B548413A9E658', @@ -1250,7 +1250,7 @@ export const GasEstimator = { defaultAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', released: true, contractName: 'WalletFactory', - version: '1.0.1', + version: '1.0.2', networkAddresses: { '5': '0xc6e8748a08e591250a3eed526e9455859633c6c4', }, diff --git a/packages/transactions/package.json b/packages/transactions/package.json index fd907aab1..f3463db41 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.1", + "version": "1.0.2", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From 2b3bd39727af73e0c4bb78edbab93842839cd622 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 25 Aug 2022 18:57:27 +0400 Subject: [PATCH 0101/1247] refactor as per rest relayer --- lerna.json | 2 +- packages/core-types/package.json | 2 +- packages/core-types/src/types.ts | 9 +++++++++ packages/ethers-lib/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/relayer/src/index.ts | 3 ++- packages/relayer/src/local-relayer.ts | 5 +++-- packages/relayer/src/rest-relayer.ts | 7 ++++--- packages/smart-account/package.json | 2 +- packages/smart-account/src/SmartAccount.ts | 13 +++++++------ packages/smart-account/src/assets/index.ts | 10 +++++----- packages/transactions/package.json | 2 +- 13 files changed, 37 insertions(+), 24 deletions(-) diff --git a/lerna.json b/lerna.json index 8e4561e01..f1d4cbaa7 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages/*" ], "useNx": true, - "version": "1.0.2" + "version": "1.0.3" } diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 10cae29ce..11e84681e 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.2", + "version": "1.0.3", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index a5d1ce290..b082cb80d 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -37,6 +37,15 @@ export interface Eip3770Address { address: string } +export interface RelayResponse { + code?: number; + message?: string; + transactionId?: string; + hash: string; + error?: string; + connectionUrl?: string; +} + export interface UserOperation { sender: string nonce: number diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index c1c6a3e82..0ef7c7b05 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.2", + "version": "1.0.3", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index e18ea610a..1aeea6f4d 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.2", + "version": "1.0.3", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 9f2a57c23..3b064163d 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.2", + "version": "1.0.3", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index a8cb91b82..16400faeb 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -1,12 +1,13 @@ import { TransactionResponse } from '@ethersproject/providers' import { SignedTransaction, SmartAccountState, SmartAccountContext, FeeOptionsResponse } from '@biconomy-sdk/core-types' +import { RelayResponse } from '@biconomy-sdk/core-types' export interface Relayer { // relayer will submit the transaction(s) to the network and return the transaction response. // The quote should be the one returned from getFeeOptions, if any. /*quote?: FeeQuote*/ getFeeOptions(chainId: number): Promise - relay(rawTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext): Promise + relay(rawTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext): Promise // wait for transaction confirmation // wait(metaTxnId: string | SignedTransactions, timeout: number): Promise } diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index 4e778ceab..ed2a52ae6 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -7,7 +7,8 @@ import { SmartAccountState, SignedTransaction, WalletTransaction, - FeeOptionsResponse + FeeOptionsResponse, + RelayResponse } from '@biconomy-sdk/core-types' import { MetaTransaction, encodeMultiSend } from './utils/multisend' @@ -90,7 +91,7 @@ export class LocalRelayer implements Relayer { signedTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext - ): Promise { + ): Promise { const { isDeployed, address } = config const { multiSendCall } = context // multisend has to be multiSendCallOnly here! if (!isDeployed) { diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 5becb148a..2a7c73806 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -14,7 +14,8 @@ import { WalletTransaction, RawTransactionType, RestRelayerOptions, - FeeOptionsResponse + FeeOptionsResponse, + RelayResponse } from '@biconomy-sdk/core-types' import { MetaTransaction, encodeMultiSend } from './utils/multisend'; import { HttpMethod, sendRequest } from './utils/httpRequests'; @@ -90,7 +91,7 @@ export class RestRelayer implements Relayer { // Add feeQuote later // Appending tx and rawTx may not be necessary - async relay(signedTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext) : Promise { + async relay(signedTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext) : Promise { const { isDeployed, address } = config; const { multiSendCall } = context; // multisend has to be multiSendCallOnly here! @@ -134,7 +135,7 @@ export class RestRelayer implements Relayer { return sendRequest({ url: `${this.#relayServiceBaseUrl}`, method: HttpMethod.Post, - body: { ...finalRawRx, gasLimit: ethers.constants.Two.pow(24) } + body: { ...finalRawRx, /*gasLimit: ethers.constants.Two.pow(24)*/ } }) } console.log('signedTx', signedTx); diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index bc5ede057..8c656bb17 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.2", + "version": "1.0.3", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index adfbef2db..c1d46ea24 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -22,7 +22,8 @@ import { TokenData, FeeQuote, FeeOptionsResponse, - ZERO_ADDRESS + ZERO_ADDRESS, + RelayResponse } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' import NodeClient, { ChainConfig, SupportedChainsResponse } from '@biconomy-sdk/node-client' @@ -287,7 +288,7 @@ class SmartAccount { tx: WalletTransaction, batchId: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): Promise { + ): Promise { let rawTx: RawTransactionType = { to: tx.to, data: tx.data, @@ -333,8 +334,8 @@ class SmartAccount { tx } - const txn = await this.relayer.relay(signedTx, state, this.getSmartAccountContext(chainId)) - return txn + const txn:RelayResponse = await this.relayer.relay(signedTx, state, this.getSmartAccountContext(chainId)) + return txn.hash } // Get Fee Options from relayer and make it available for display @@ -430,7 +431,7 @@ class SmartAccount { batchId: number = 0, // may not be necessary chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { // eth_call api method - let estimatedGasUsed = 500000; + let estimatedGasUsed = 435318; console.log('transactions ', transactions); console.log('batchId ', batchId); console.log('chainId ', chainId); @@ -441,7 +442,7 @@ class SmartAccount { batchId: number = 0, // may not be necessary chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { // eth_call api method - let estimatedGasUsed = 500000; + let estimatedGasUsed = 435318; console.log('transaction ', transaction); console.log('batchId ', batchId); console.log('chainId ', chainId); diff --git a/packages/smart-account/src/assets/index.ts b/packages/smart-account/src/assets/index.ts index 9a0067cab..447acc609 100644 --- a/packages/smart-account/src/assets/index.ts +++ b/packages/smart-account/src/assets/index.ts @@ -2,7 +2,7 @@ export const MultiSend = { defaultAddress: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', released: true, contractName: 'MultiSend', - version: '1.0.2', + version: '1.0.3', networkAddresses: { '1': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', '4': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', @@ -40,7 +40,7 @@ export const MultiSendCallOnly = { defaultAddress: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', released: true, contractName: 'MultiSendCallOnly', - version: '1.0.2', + version: '1.0.3', networkAddresses: { '1': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', '4': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', @@ -73,7 +73,7 @@ export const SmartWallet = { defaultAddress: '0x056DcE811A2b695171274855E7246039Df298158', released: true, contractName: 'SmartWallet', - version: '1.0.2', + version: '1.0.3', networkAddresses: { '1': '0x056DcE811A2b695171274855E7246039Df298158', '4': '0x056DcE811A2b695171274855E7246039Df298158', @@ -1088,7 +1088,7 @@ export const WalletFactory = { defaultAddress: '0x050bca32264195976Fe00BcA566B548413A9E658', released: true, contractName: 'WalletFactory', - version: '1.0.2', + version: '1.0.3', networkAddresses: { '1': '0x050bca32264195976Fe00BcA566B548413A9E658', '4': '0x050bca32264195976Fe00BcA566B548413A9E658', @@ -1250,7 +1250,7 @@ export const GasEstimator = { defaultAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', released: true, contractName: 'WalletFactory', - version: '1.0.2', + version: '1.0.3', networkAddresses: { '5': '0xc6e8748a08e591250a3eed526e9455859633c6c4', }, diff --git a/packages/transactions/package.json b/packages/transactions/package.json index f3463db41..1eb4c86b1 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.2", + "version": "1.0.3", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From e95a8a3fd8f55fd5b1ed2caa52956e9c4d20c53d Mon Sep 17 00:00:00 2001 From: talha Date: Fri, 26 Aug 2022 10:39:11 +0500 Subject: [PATCH 0102/1247] initial refund merge --- package-lock.json | 3965 +++++++++-------- packages/core-types/package.json | 4 +- .../core-types/src/ethereumLibs/EthAdapter.ts | 6 - packages/core-types/src/transaction.types.ts | 1 + packages/core-types/src/types.ts | 2 +- packages/ethers-lib/contracts/V1.0.2.sol | 19 + packages/ethers-lib/package.json | 7 +- .../scripts/generateTypechainFiles.ts | 12 + .../v1.0.2/EntryPointEthersContract.ts | 42 + .../v1.0.2/MultiSendEthersContract.ts | 32 + .../v1.0.2/MultiSendCallOnlyEthersContract.ts | 32 + .../v1.0.2/SmartWalletContractEthers.ts | 80 + .../SmartWalletProxyFactoryEthersContract.ts | 60 + .../src/contracts/contractInstancesEthers.ts | 34 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/smart-account/src/SmartAccount.ts | 37 +- packages/transactions/package.json | 2 +- 19 files changed, 2378 insertions(+), 1963 deletions(-) create mode 100644 packages/ethers-lib/contracts/V1.0.2.sol create mode 100644 packages/ethers-lib/src/contracts/EntryPointContract/v1.0.2/EntryPointEthersContract.ts create mode 100644 packages/ethers-lib/src/contracts/MultiSend/v1.0.2/MultiSendEthersContract.ts create mode 100644 packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.2/MultiSendCallOnlyEthersContract.ts create mode 100644 packages/ethers-lib/src/contracts/SmartWallet/v1.0.2/SmartWalletContractEthers.ts create mode 100644 packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.2/SmartWalletProxyFactoryEthersContract.ts diff --git a/package-lock.json b/package-lock.json index 8cca87f37..8daec99ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,12 +64,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -94,18 +88,6 @@ "dev": true, "requires": { "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } } }, "@ethereumjs/block": { @@ -134,6 +116,23 @@ "level-mem": "^5.0.1", "lru-cache": "^5.1.1", "semaphore-async-await": "^1.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } } }, "@ethereumjs/common": { @@ -201,214 +200,215 @@ } }, "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", "dev": true, "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", "dev": true, "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" } }, "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", "dev": true, "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", "dev": true, "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" } }, "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.6.1" + "@ethersproject/bytes": "^5.7.0" } }, "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", "bn.js": "^5.2.1" } }, "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", "dev": true, "requires": { - "@ethersproject/logger": "^5.6.0" + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", "dev": true, "requires": { - "@ethersproject/bignumber": "^5.6.2" + "@ethersproject/bignumber": "^5.7.0" } }, "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", "dev": true, "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.6.1", + "@ethersproject/bytes": "^5.7.0", "js-sha3": "0.8.0" } }, "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", "dev": true }, "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.0.tgz", + "integrity": "sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA==", "dev": true, "requires": { - "@ethersproject/logger": "^5.6.0" + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", "dev": true, "requires": { - "@ethersproject/logger": "^5.6.0" + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", "bn.js": "^5.2.1", "elliptic": "6.5.4", "hash.js": "1.1.7" } }, "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", "dev": true, "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" } }, "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.0.tgz", + "integrity": "sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA==", "dev": true, "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, "@gar/promisify": { @@ -473,17 +473,27 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@lerna/add": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.3.0.tgz", - "integrity": "sha512-MxwTO2UBxZwwuquKbBqdYa56YTqg6Lfz1MZsRQxO7F2cb2NN8NEYTcGOli/71Ee/2AoX4R4xIFTh3TnaflQ25A==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.4.3.tgz", + "integrity": "sha512-wBjBHX/A0nSiVGJDq5wNpqR+zrxKFREeKrqvIXGmAgcwpDjp76JLVhdSdQns+X+AYsf13NFaNhBqfGlF5SZNnQ==", "dev": true, "requires": { - "@lerna/bootstrap": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/validation-error": "5.3.0", + "@lerna/bootstrap": "5.4.3", + "@lerna/command": "5.4.3", + "@lerna/filter-options": "5.4.3", + "@lerna/npm-conf": "5.4.3", + "@lerna/validation-error": "5.4.3", "dedent": "^0.7.0", "npm-package-arg": "8.1.1", "p-map": "^4.0.0", @@ -492,23 +502,23 @@ } }, "@lerna/bootstrap": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.3.0.tgz", - "integrity": "sha512-iHVjt6YOQKLY0j+ex13a6ZxjIQ1TSSXqbl6z1hVjBFaDyCh7pra/tgj0LohZDVCaouLwRKucceQfTGrb+cfo7A==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/has-npm-version": "5.3.0", - "@lerna/npm-install": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/rimraf-dir": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/symlink-binary": "5.3.0", - "@lerna/symlink-dependencies": "5.3.0", - "@lerna/validation-error": "5.3.0", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.4.3.tgz", + "integrity": "sha512-9mruEpXD2p8mG9Feak0QzU+JcROsJ8J0MvY7gTGtUqQJqBIA6HGEYXQueHbcl+jGdZyTZOz139KsavPui55QEQ==", + "dev": true, + "requires": { + "@lerna/command": "5.4.3", + "@lerna/filter-options": "5.4.3", + "@lerna/has-npm-version": "5.4.3", + "@lerna/npm-install": "5.4.3", + "@lerna/package-graph": "5.4.3", + "@lerna/pulse-till-done": "5.4.3", + "@lerna/rimraf-dir": "5.4.3", + "@lerna/run-lifecycle": "5.4.3", + "@lerna/run-topologically": "5.4.3", + "@lerna/symlink-binary": "5.4.3", + "@lerna/symlink-dependencies": "5.4.3", + "@lerna/validation-error": "5.4.3", "@npmcli/arborist": "5.3.0", "dedent": "^0.7.0", "get-port": "^5.1.1", @@ -522,32 +532,32 @@ } }, "@lerna/changed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.3.0.tgz", - "integrity": "sha512-i6ZfBDBZCpnPaSWTuNGTrnExkHNMC+/cSUuS9njaqe+tXgqE95Ja3cMxWZth9Q1uasjcEBHPU2jG0VKrU37rpA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.4.3.tgz", + "integrity": "sha512-q1ARClN0pLZ53hBPiR4TJB6GGq17Yhwb6iKwQryZBWuOEc87NqqRtIPWswk5NISj2qcPQlbyrnB3RshwLkyo7w==", "dev": true, "requires": { - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/listable": "5.3.0", - "@lerna/output": "5.3.0" + "@lerna/collect-updates": "5.4.3", + "@lerna/command": "5.4.3", + "@lerna/listable": "5.4.3", + "@lerna/output": "5.4.3" } }, "@lerna/check-working-tree": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.3.0.tgz", - "integrity": "sha512-qo6jUGWXKLVL1nU8aEECqwrGRjs9o1l1hXdD2juA4Fvzsam1cFVHJwsmw3hAXGhEPD0oalg/XR62H9rZSCLOvQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.4.3.tgz", + "integrity": "sha512-OnGqIDW8sRcAQDV8mdtvYIh0EIv2FXm+4/qKAveFhyDkWWpnUF/ZSIa/CFVHYoKFFzb5WOBouml2oqWPyFHhbA==", "dev": true, "requires": { - "@lerna/collect-uncommitted": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "@lerna/validation-error": "5.3.0" + "@lerna/collect-uncommitted": "5.4.3", + "@lerna/describe-ref": "5.4.3", + "@lerna/validation-error": "5.4.3" } }, "@lerna/child-process": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.3.0.tgz", - "integrity": "sha512-4uXPNIptrgQQQVHVVAXBD8F7IqSvZL3Og0G0DHiWKH+dsSyMIUtaIGJt7sifVoL7nzex4AqEiPq/AubpmG5g4Q==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.4.3.tgz", + "integrity": "sha512-p7wJ8QT8kXHk4EAy/oyjCD603n1F61Tm4l6thF1h9MAw3ejSvvUZ0BKSg9vPoZ/YMAC9ZuVm1mFsyoi5RlvIHw==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -556,28 +566,28 @@ } }, "@lerna/clean": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.3.0.tgz", - "integrity": "sha512-Jn+Dr7A69dch8m1dLe7l/SDVQVQT2j7zdy2gaZVEmJIgEEaXmEbfJ2t2n06vRXtckI9B85M5mubT1U3Y7KuNuA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.4.3.tgz", + "integrity": "sha512-Kl04A5NqywbBf7azSt9UJqHzRCXogHNpEh3Yng5+Y4ggunP4zVabzdoYGdggS4AsbDuIOKECx9BmCiDwJ4Qv8g==", "dev": true, "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/rimraf-dir": "5.3.0", + "@lerna/command": "5.4.3", + "@lerna/filter-options": "5.4.3", + "@lerna/prompt": "5.4.3", + "@lerna/pulse-till-done": "5.4.3", + "@lerna/rimraf-dir": "5.4.3", "p-map": "^4.0.0", "p-map-series": "^2.1.0", "p-waterfall": "^2.1.1" } }, "@lerna/cli": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.3.0.tgz", - "integrity": "sha512-P7F3Xs98pXMEGZX+mnFfsd6gU03x8UrwQ3mElvQBICl4Ew9z6rS8NGUd3JOPFzm4/vSTjYTnPyPdWBjj6/f6sw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.4.3.tgz", + "integrity": "sha512-avnRUZ51nSZMR+tOcMQZ61hnVbDNdmyaVRxfSLByH5OFY+KPnfaTPv1z4ub+rEtV2NTI5DYWAqxupNGLuu9bQQ==", "dev": true, "requires": { - "@lerna/global-options": "5.3.0", + "@lerna/global-options": "5.4.3", "dedent": "^0.7.0", "npmlog": "^6.0.2", "yargs": "^16.2.0" @@ -597,44 +607,50 @@ "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, "@lerna/collect-uncommitted": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.3.0.tgz", - "integrity": "sha512-Ll/mU9Nes0NQoa0pSv2TR2PTCkIomBGuDWH48OF2sKKu69NuLjrD2L0udS5nJYig9HxFewtm4QTiUdYPxfJXkQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.4.3.tgz", + "integrity": "sha512-/0u95DbwP1+orGifkPRqaIqD8Ui2vpy9KmeuHTui+4iR/ZvZbgIouMdOhH+fU9e5hfLF6geUKnEFjL+Lxa4qdg==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", + "@lerna/child-process": "5.4.3", "chalk": "^4.1.0", "npmlog": "^6.0.2" } }, "@lerna/collect-updates": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.3.0.tgz", - "integrity": "sha512-fzJo/rmdXKWKYt+9IXjtenIZtSr3blMH8GEqoVKpSZ7TJGpxcFNmMe6foa60BgaTnDmmg1y7Qu6JbQJ3Ra5c5w==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.4.3.tgz", + "integrity": "sha512-TU3+hcwqHWKSK0J+NWNo5pjP7nnCzhnFfL/UfCG6oNAUb6PnmKSgZ9NqjOXja1WjJPrtFDIGoIYzLJZCePFyLw==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/describe-ref": "5.3.0", + "@lerna/child-process": "5.4.3", + "@lerna/describe-ref": "5.4.3", "minimatch": "^3.0.4", "npmlog": "^6.0.2", "slash": "^3.0.0" } }, "@lerna/command": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.3.0.tgz", - "integrity": "sha512-UNQQ4EGTumqLhOuDPcRA4LpdS9pcTYKSdh/8MdKPeyIRN70vCTwdeTrxqaaKsn3Jo7ycvyUQT5yfrUFmCClfoA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.4.3.tgz", + "integrity": "sha512-xBdbqcvHeWltH4QvWcmH9dKjWzD+KXfhSP0NBgwED8ZNMxSuzBz2OS3Ps8KbLemXNP8P0yhjoPgitGmxxeY/ow==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/project": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@lerna/write-log-file": "5.3.0", + "@lerna/child-process": "5.4.3", + "@lerna/package-graph": "5.4.3", + "@lerna/project": "5.4.3", + "@lerna/validation-error": "5.4.3", + "@lerna/write-log-file": "5.4.3", "clone-deep": "^4.0.1", "dedent": "^0.7.0", "execa": "^5.0.0", @@ -643,12 +659,12 @@ } }, "@lerna/conventional-commits": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.3.0.tgz", - "integrity": "sha512-9uoQ2E1J7pL0fml5PNO7FydnBNeqrNOQa53Ca1Klf5t/x4vIn51ocOZNm/YbRAc/affnrxxp+gR2/SWlN0yKqQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.4.3.tgz", + "integrity": "sha512-GHZdpCUMqalO692O7Mqj5idYftZWaCylb4TSPkHEU8xSfxtufp8lM+Q8Xxv35ymzs0pBrmzSLZIpIMQ9awDABg==", "dev": true, "requires": { - "@lerna/validation-error": "5.3.0", + "@lerna/validation-error": "5.4.3", "conventional-changelog-angular": "^5.0.12", "conventional-changelog-core": "^4.2.4", "conventional-recommended-bump": "^6.1.0", @@ -672,34 +688,24 @@ "universalify": "^2.0.0" } }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true } } }, "@lerna/create": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.3.0.tgz", - "integrity": "sha512-DotTReCc3+Q9rpMA8RKAGemUK7JXT7skbxHvpqpPj7ryNkIv/dNAFC2EHglcpt9Rmyo6YbSP2zk0gfDbdiIcVA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.4.3.tgz", + "integrity": "sha512-VLrcfjBNzhUie5tLWSEa203BljirEG7OH62lgoLqR9qA/FVozoWrRKmly/EVw8Q7+5UNw/ciTzXnbm0BPXl6tg==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/validation-error": "5.3.0", + "@lerna/child-process": "5.4.3", + "@lerna/command": "5.4.3", + "@lerna/npm-conf": "5.4.3", + "@lerna/validation-error": "5.4.3", "dedent": "^0.7.0", "fs-extra": "^9.1.0", "globby": "^11.0.2", @@ -716,6 +722,15 @@ "yargs-parser": "20.2.4" }, "dependencies": { + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, "fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -728,28 +743,33 @@ "universalify": "^2.0.0" } }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "builtins": "^5.0.0" } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true } } }, "@lerna/create-symlink": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.3.0.tgz", - "integrity": "sha512-xIoC9m4J/u4NV/8ms4P2fiimaYgialqJvNamvMDRmgE1c3BLDSGk2nE4nVI2W5LxjgJdMTiIH9v1QpTUC9Fv+Q==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.4.3.tgz", + "integrity": "sha512-QxmKCHA5woed/qJjKNkOSgkbhhmPV3g61F499uVwPtyPivn9Y2mbeVPMQrLkb0CL9M6aJ7vE4fi6T5XMqsbNpg==", "dev": true, "requires": { "cmd-shim": "^5.0.0", @@ -768,98 +788,82 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true } } }, "@lerna/describe-ref": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.3.0.tgz", - "integrity": "sha512-R+CtJcOuAF3kJ6GNQnGC3STEi+5OtpNVz2n17sAs/xqJnq79tPdzEhT+pMxB2eSEkQYlSr+cCKMpF0m/mtIPQA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.4.3.tgz", + "integrity": "sha512-g3R5exjZy5MOcMPzgU8+t7sGEt4gGMKQLUFfg5NAceera6RGWUieY8OWL6jlacgyM4c8iyh15Tu14YwzL2DiBA==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", + "@lerna/child-process": "5.4.3", "npmlog": "^6.0.2" } }, "@lerna/diff": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.3.0.tgz", - "integrity": "sha512-i6f99dtO90u1QIJEfVtKE831m4gnMHBwY+4D84GY2SJMno8uI7ZyxMRZQh1nAFtvlNozO2MgzLr1OHtNMZOIgQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.4.3.tgz", + "integrity": "sha512-MJKvy/XC2RpS/gqg7GguQsBv5rZm+S5P/kfnqhapXCniGviZfq+JfY5TQCsAP9umiybR2sB004K1Z7heyU8uMA==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/validation-error": "5.3.0", + "@lerna/child-process": "5.4.3", + "@lerna/command": "5.4.3", + "@lerna/validation-error": "5.4.3", "npmlog": "^6.0.2" } }, "@lerna/exec": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.3.0.tgz", - "integrity": "sha512-kI/IuF1hbT+pEMZc3v4+w8BLckUIi45ipzOP0bWvXNgSKKuADAU3HLv+ifRXEjob5906C+Zc7K2IVoVS6r1TDg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.4.3.tgz", + "integrity": "sha512-BLrva/KV6JWTV+7h7h+NQDsxpz0z1Nh99BUqqvZDzGIKMey4c1fo+CQGac77TsAophnv0ieFgHkSmrC6NXJa9g==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/profiler": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/validation-error": "5.3.0", + "@lerna/child-process": "5.4.3", + "@lerna/command": "5.4.3", + "@lerna/filter-options": "5.4.3", + "@lerna/profiler": "5.4.3", + "@lerna/run-topologically": "5.4.3", + "@lerna/validation-error": "5.4.3", "p-map": "^4.0.0" } }, "@lerna/filter-options": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.3.0.tgz", - "integrity": "sha512-ddgy0oDisTKIhCJ4WY5CeEhTsyrbW+zeBvZ7rVaG0oQXjSSYBried4TXRvgy67fampfHoPX+eQq5l1SYTRFPlw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.4.3.tgz", + "integrity": "sha512-581GE81BSWgS9za4tBv1nwZ2ImgH7UO3xil1b7xogvc/iGwM0MgOwt9f1MrS5ZOliNnme4cSZEGFe+QWPXCE4A==", "dev": true, "requires": { - "@lerna/collect-updates": "5.3.0", - "@lerna/filter-packages": "5.3.0", + "@lerna/collect-updates": "5.4.3", + "@lerna/filter-packages": "5.4.3", "dedent": "^0.7.0", "npmlog": "^6.0.2" } }, "@lerna/filter-packages": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.3.0.tgz", - "integrity": "sha512-5/2V50sQB2+JNwuCHP/UPm3y8PN2JWVY9CbNLtF3K5bymNsCkQh2KHEL9wlWZ4yfr/2ufpy4XFPaFUHNoUOGnQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.4.3.tgz", + "integrity": "sha512-W5OVMUjXh/Zii17FCSbIf/6Q3Bo5ETMAWMZ6EpHSU99M0kdvgpjXj3VUSjiCzwccqIa2EZjaua0RWSbOtfZCVg==", "dev": true, "requires": { - "@lerna/validation-error": "5.3.0", + "@lerna/validation-error": "5.4.3", "multimatch": "^5.0.0", "npmlog": "^6.0.2" } }, "@lerna/get-npm-exec-opts": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.3.0.tgz", - "integrity": "sha512-cYBypDo8C7f4MvVvap2nYgtk8MXAADrYU1VdECSJ3Stbe4p2vBGt8bM9xkS2uPfQFMK3YSy3YPkSZcSjVXyoGw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.4.3.tgz", + "integrity": "sha512-q/3zQvlwTpAh6HVtVGOTuCGIgkhtCPK9CcHRo09c0Q3LQk5MsZYkPmJe0ujU1Gf7pILzQA5tnCy56eWT5uMPUg==", "dev": true, "requires": { "npmlog": "^6.0.2" } }, "@lerna/get-packed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.3.0.tgz", - "integrity": "sha512-kD12w7Ko5TThuOuPF2HBLyuPsHK3oyyWyzleGBqR4DqxMtbMRgimyTQnr5o58XBOwUPCFsv1EZiqeGk+3HTGEA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.4.3.tgz", + "integrity": "sha512-y97plqJmrTwnZE9EH0MhtwnVHOF/revnH95fD2UyUpGrxdAFvbE7rs3A9zrSxurFLn4q6qWBKONwQLccQSTBTA==", "dev": true, "requires": { "fs-extra": "^9.1.0", @@ -878,32 +882,16 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true } } }, "@lerna/github-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.3.0.tgz", - "integrity": "sha512-UqAclsWDMthmbv3Z8QE1K7D/4e93ytg31mc+nEj+UdU+xJQ0L1ypl8zWAmGNs1sFkQntIiTIB4W5zgHet5mmZw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.4.3.tgz", + "integrity": "sha512-P/i64IUDw72YvS5lTciCLAxvjliN2lZSDZSqH59kQ4m2dma0dChiLTreq1Ei8xyY124oacARwxxQCN95m2u3nw==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", + "@lerna/child-process": "5.4.3", "@octokit/plugin-enterprise-rest": "^6.0.1", "@octokit/rest": "^19.0.3", "git-url-parse": "^12.0.0", @@ -911,9 +899,9 @@ } }, "@lerna/gitlab-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.3.0.tgz", - "integrity": "sha512-otwbiaGDgvn5MGF1ypsCO48inMpdcxuiDlbxrKD6glPUwNHiGV+PU8LLCCDKimwjjQhl88ySLpL1oTm4jnZ1Aw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.4.3.tgz", + "integrity": "sha512-EEr5OkdiS7ev2X9jaknr3UUksPajij1nGFFhPXpAexAEkJYSRjdSvfPtd4ssTViIHMGHKMcNcGrMW+ESly1lpw==", "dev": true, "requires": { "node-fetch": "^2.6.1", @@ -922,32 +910,32 @@ } }, "@lerna/global-options": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.3.0.tgz", - "integrity": "sha512-iEoFrDSU+KtfcB+lHW5grjg3VkEqzZNTUnWnE1FCBBwj9tSLOHjgKGtWWjIQtBUJ+qcLBbusap9Stqzr7UPYpQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.4.3.tgz", + "integrity": "sha512-e0TVIHLl0IULJWfLA9uGOIYnI3MVAjTp9I0p/9u3fC62dQxJBhoy5/9+y2zuu85MTB+4XTVi2m8G99H9pfBhMA==", "dev": true }, "@lerna/has-npm-version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.3.0.tgz", - "integrity": "sha512-A/bK8e+QP/VMqZkq1wZbyOzMz/AY92tAVsBOQ5Yw2zqshdMVj99st3YHLOqJf/HTEzQo27GGI/ajmcltHS2l6A==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.4.3.tgz", + "integrity": "sha512-Vu5etw5vXEbYLOO26lO3u5gEjX9vWUjqLTQfNEnJxflaH9JWw2NNJ/6nXG0hqc8kEmMdhabrw+FHSKaO9ZQygw==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", + "@lerna/child-process": "5.4.3", "semver": "^7.3.4" } }, "@lerna/import": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.3.0.tgz", - "integrity": "sha512-KjVT9oFNSp1JLdrS1LSXjDcLiu2TMSfy6tpmhF9Zxo7oKB21SgWmXVV9rcWDueW2RIxNXDeVUG0NVNj2BRGeEQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.4.3.tgz", + "integrity": "sha512-SRUyITjhqbN7JOrUHskaqbppiq8yqpSLw1+tseT3D3HdYQQjvQzR1GjBVm+LZKlHRi9qqku9fqUNQf9AqbtysA==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/validation-error": "5.3.0", + "@lerna/child-process": "5.4.3", + "@lerna/command": "5.4.3", + "@lerna/prompt": "5.4.3", + "@lerna/pulse-till-done": "5.4.3", + "@lerna/validation-error": "5.4.3", "dedent": "^0.7.0", "fs-extra": "^9.1.0", "p-map-series": "^2.1.0" @@ -964,45 +952,29 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true } } }, "@lerna/info": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.3.0.tgz", - "integrity": "sha512-pyeZSM/PIpBHCXdHPrbh6sPZlngXUxhTVFb0VaIjQ5Ms585xi15s1UQDO3FvzqdyMyalx0QGzCJbNx5XeoCejg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.4.3.tgz", + "integrity": "sha512-cO0jWK2zcU9fsnoR2aqYU1IqNxWBkLvvQcTiodPqMsTAVh2F8cbwUXptWJyvsyCkKqO86axa7h6AbeF9rHRj0g==", "dev": true, "requires": { - "@lerna/command": "5.3.0", - "@lerna/output": "5.3.0", + "@lerna/command": "5.4.3", + "@lerna/output": "5.4.3", "envinfo": "^7.7.4" } }, "@lerna/init": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.3.0.tgz", - "integrity": "sha512-y46lzEtgMdEseTJGQQqYZOjqqd7iN+e14vFh/9q5h62V4Y8nlUJRzovVo8JSeaGwKLB0B3dq3BuUn0PNywMhpA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.4.3.tgz", + "integrity": "sha512-cicNfMuswF+8S5RhbvCnXIrdNWTS5/ajwGYOv85x/Gu2FOJ1eqJ4W4Ai6ybANBefErE4+7aSGl/kt/+sRvTeTw==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/project": "5.3.0", + "@lerna/child-process": "5.4.3", + "@lerna/command": "5.4.3", + "@lerna/project": "5.4.3", "fs-extra": "^9.1.0", "p-map": "^4.0.0", "write-json-file": "^4.3.0" @@ -1019,65 +991,49 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true } } }, "@lerna/link": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.3.0.tgz", - "integrity": "sha512-+QBwnGg3S8Zk8M8G5CA4kmGq92rkEMbmWJXaxie3jQayp+GXgSlLs6R4jwSOZlztY6xR3WawMI9sHJ0Vdu+g7w==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.4.3.tgz", + "integrity": "sha512-DY6PQYE2g1a5QGDXCoajr8hl87m83vmfUIz1342x1qwWHmfRLfS3KTPPfa5bsZk/ABVOrqjjz/v3m4SEJ4LC5A==", "dev": true, "requires": { - "@lerna/command": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/symlink-dependencies": "5.3.0", + "@lerna/command": "5.4.3", + "@lerna/package-graph": "5.4.3", + "@lerna/symlink-dependencies": "5.4.3", "p-map": "^4.0.0", "slash": "^3.0.0" } }, "@lerna/list": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.3.0.tgz", - "integrity": "sha512-5RJvle3m4l2H0UmKNlwS8h2OIlNGsNTKPC4DYrJYt0+fhgzf5SEV1QKw+fuUqe3F8MziIkSGQB52HsjwPE6AWQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.4.3.tgz", + "integrity": "sha512-VEoJfobof7Welp+1yX6gm0EtpZw9vyztGvTtOeHQ1fhfW88oav03Qoi/hk1qZXPf7/hVZrJKEmSJ4etxsbZ3/g==", "dev": true, "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/listable": "5.3.0", - "@lerna/output": "5.3.0" + "@lerna/command": "5.4.3", + "@lerna/filter-options": "5.4.3", + "@lerna/listable": "5.4.3", + "@lerna/output": "5.4.3" } }, "@lerna/listable": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.3.0.tgz", - "integrity": "sha512-RdmeV9mDeuBOgVOlF/KNH/qttyiYwHbeqHiMAw9s9AfMo/Fz3iDZaTGZuruMm84TZSkKxI7m5mjTlC0djsyKog==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.4.3.tgz", + "integrity": "sha512-VcJMw+z84Rj1nLIso474+veFx0tCH9Jas02YXx9cgAnaK1IRP0BI9O0vccQIZ+2Rb62VLiFGzyCJIyKyhcGZHw==", "dev": true, "requires": { - "@lerna/query-graph": "5.3.0", + "@lerna/query-graph": "5.4.3", "chalk": "^4.1.0", "columnify": "^1.6.0" } }, "@lerna/log-packed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.3.0.tgz", - "integrity": "sha512-tDuOot3vSOUSP7fNNej8UM0fah5oy8mKXe026grt4J0OP4L3rhSWxhfrDBQ3Ylh2dAjgHzscUf/vpnNC9HnhOQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.4.3.tgz", + "integrity": "sha512-pFEBaj5JOf44+kOV6eiFHAfEULC6NhHJHHFwkljL1WNcx/+46aOADY9LrjmVtp8uPWv3fMCb3ZGcxuGebz1lYA==", "dev": true, "requires": { "byte-size": "^7.0.0", @@ -1087,35 +1043,43 @@ } }, "@lerna/npm-conf": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.3.0.tgz", - "integrity": "sha512-ejlypb90tvIsKUCb0fcOKt7wcPEjLdVK2zfbNs0M+UlRDLyRVOHUVdelJ15cRDNjQHzhBo2HBUKn5Fmm/2pcmg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.4.3.tgz", + "integrity": "sha512-iQrrZHxAXqogfCpQvC/ac42/gR3osT+WN2FFB1gjVYYFBMZto5mlpcvyzH8rb75OJfak8iDtOYHUymmwSda1jw==", "dev": true, "requires": { "config-chain": "^1.1.12", "pify": "^5.0.0" + }, + "dependencies": { + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + } } }, "@lerna/npm-dist-tag": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.3.0.tgz", - "integrity": "sha512-OPahPk9QLXQXFgtrWm22NNxajVYKavCyTh8ijMwXTGXXbMJAw+PVjokfrUuEtg7FQi+kfJSrYAcJAxxfQq2eiA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.4.3.tgz", + "integrity": "sha512-LnbD6xrnrmMdXH/nntyd/xJueKZGhCv3YLWK9F6YQdmUoeWY+W7eckmdd8LKL6ZqupyeLxgn0NKwiJ5wxf0F2w==", "dev": true, "requires": { - "@lerna/otplease": "5.3.0", + "@lerna/otplease": "5.4.3", "npm-package-arg": "8.1.1", "npm-registry-fetch": "^13.3.0", "npmlog": "^6.0.2" } }, "@lerna/npm-install": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.3.0.tgz", - "integrity": "sha512-scbWo8nW+P9KfitWG3y7Ep97dOs64ECfz9xfqtjagEXKYBPxG3skvwwljkfNnuxrCNs71JVD+imvcewHzih28g==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.4.3.tgz", + "integrity": "sha512-MPXYQ1r/UMV9x+6F2VEk3miHOw4fn+G4zN11PGB5nWmuaT4uq7rPoudkdRvMRqm6bK0NpL/trssSb12ERzevqg==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/get-npm-exec-opts": "5.3.0", + "@lerna/child-process": "5.4.3", + "@lerna/get-npm-exec-opts": "5.4.3", "fs-extra": "^9.1.0", "npm-package-arg": "8.1.1", "npmlog": "^6.0.2", @@ -1134,33 +1098,17 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true } } }, "@lerna/npm-publish": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.3.0.tgz", - "integrity": "sha512-n+ocN1Dxrs6AmrSNqZl57cwhP4/VjQXdEI+QYauNnErNjMQW8Wt+tNaTlVAhZ1DnorwAo86o2uzFF/BgdUqh9A==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.4.3.tgz", + "integrity": "sha512-yfwtTWYRace2oJK+a7nVUs7HubypgoA1fEZ6JUZFKVkq54C8tDdyYz4EtTtiFr7WMjP8p3NWxh7RNh7Tyx7ckQ==", "dev": true, "requires": { - "@lerna/otplease": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", + "@lerna/otplease": "5.4.3", + "@lerna/run-lifecycle": "5.4.3", "fs-extra": "^9.1.0", "libnpmpublish": "^6.0.4", "npm-package-arg": "8.1.1", @@ -1181,72 +1129,62 @@ "universalify": "^2.0.0" } }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true } } }, "@lerna/npm-run-script": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.3.0.tgz", - "integrity": "sha512-2cLR1YdzeMjaMKgDuwHE+iZgVPt+Ttzb3/wFtp7Mw9TlKmNIdbHdrnfl12ABz5knPC+62CCNjB/gznfLndPp2w==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.4.3.tgz", + "integrity": "sha512-xb6YAxAxGDBPlpZtjDPlM9NAgIcNte31iuGpG0I5eTYqBppKNZ7CQ8oi76qptrLyrK/ug9kqDIGti5OgyAMihQ==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/get-npm-exec-opts": "5.3.0", + "@lerna/child-process": "5.4.3", + "@lerna/get-npm-exec-opts": "5.4.3", "npmlog": "^6.0.2" } }, "@lerna/otplease": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.3.0.tgz", - "integrity": "sha512-Xpju2VC5TiycmBP/mdp9hRstkH2MLm8/7o2NotVTCJwASWdKphRMqezhh5BX0E9i6VyrjzmTqSYEh9FNZZ9MwQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.4.3.tgz", + "integrity": "sha512-iy+NpqP9UcB8a0W3Nhq20x2gWSRQcmkOb25qSJj7f5AisCwGWypYlD6RZ9NqCzUD7KEbAaydEEyhoPw9dQRFmg==", "dev": true, "requires": { - "@lerna/prompt": "5.3.0" + "@lerna/prompt": "5.4.3" } }, "@lerna/output": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.3.0.tgz", - "integrity": "sha512-fISmHDu/9PKInFmT5NXsbh8cR6aE6SUXWrteXJ6PBYK30s0f/pVcfswb9VccX0Yea8HmqMQgCHWUWifkZeXiRA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.4.3.tgz", + "integrity": "sha512-y/skSk0jMxPlJ1gpQwmKiMdElbznOMCYdCi170wfj3esby+fr8eULiwx7wUy3K+YtEGp7JS6TUjXb4zm9O0rMw==", "dev": true, "requires": { "npmlog": "^6.0.2" } }, "@lerna/pack-directory": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.3.0.tgz", - "integrity": "sha512-dTGMUB6/GjExhmLZ8yeFaRKJuSm6M/IsfxSJdL4gFPLigUIAS4XhzXS3KnL0+Ef1ue1yaTlAE9c/czfkE0pc/w==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.4.3.tgz", + "integrity": "sha512-47vsQem4Jr1W7Ce03RKihprBFLh2Q+VKgIcQGPec764i5uv3QWHzqK//da7+fmHr86qusinHvCIV7X3pXcohWg==", "dev": true, "requires": { - "@lerna/get-packed": "5.3.0", - "@lerna/package": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/temp-write": "5.3.0", + "@lerna/get-packed": "5.4.3", + "@lerna/package": "5.4.3", + "@lerna/run-lifecycle": "5.4.3", + "@lerna/temp-write": "5.4.3", "npm-packlist": "^5.1.1", "npmlog": "^6.0.2", "tar": "^6.1.0" } }, "@lerna/package": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.3.0.tgz", - "integrity": "sha512-hsB03miiaNdvZ/UGzl0sVqxVat5x33EG9JiYgIoFqzroQPrG+WShmX3ctuO06TY1pxb4iNuHLPIbQomHEzzj8w==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.4.3.tgz", + "integrity": "sha512-EIw82v4ijzS3qRCSKHNSJ/UTnFDroaEp6mj7pzLO6lIrAqg7MgtKeThMhzEAMvF4yNB7BL+UR+dZ0jI47WgQJQ==", "dev": true, "requires": { "load-json-file": "^6.2.0", @@ -1255,31 +1193,31 @@ } }, "@lerna/package-graph": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.3.0.tgz", - "integrity": "sha512-UEHY7l/yknwFvQgo0RifyY+B5QdzuFutLZYSN1BMmyWttOZD9rkM263qnLNGTZ2BUE4dXDwwwOHuhLvi+xDRsA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.4.3.tgz", + "integrity": "sha512-8eyAS+hb+K/+1Si2UNh4KPaLFdgTgdrRcsuTY7aKaINyrzoLTArAKPk4dQZTH1d0SUWtFzicvWixkkzq21QuOw==", "dev": true, "requires": { - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/validation-error": "5.3.0", + "@lerna/prerelease-id-from-version": "5.4.3", + "@lerna/validation-error": "5.4.3", "npm-package-arg": "8.1.1", "npmlog": "^6.0.2", "semver": "^7.3.4" } }, "@lerna/prerelease-id-from-version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.3.0.tgz", - "integrity": "sha512-o1wsLns6hFTsmk4iqTRJNWLnFzlBBwgu17hp8T2iU4U7LUlDT2ZSKV3smGAU6GfrwX3MAp4LZ5syxgjFjrUOnw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.4.3.tgz", + "integrity": "sha512-bXsBCv/VJrWXz2usnk52TtTb4dsXSeYDI2U1N2z/DssFKlOpH7xL1mKWC4OXE2XBqb9I49sDPfZzN8BxTfJdJQ==", "dev": true, "requires": { "semver": "^7.3.4" } }, "@lerna/profiler": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.3.0.tgz", - "integrity": "sha512-LEZYca29EPgZR0q5E+7CJkn25Cw3OxNMQJU/CVn/HGeoWYWOpoDxujrZBl8is2bw06LHXvRbVXEUATLc+ACbqQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.4.3.tgz", + "integrity": "sha512-6otMDwCzfWszV0K7RRjlF5gibLZt1ay+NmtrhL7TZ7PSizIJXlf6HxZiYodGgjahKAdGxx34H9XyToVzOLdg3w==", "dev": true, "requires": { "fs-extra": "^9.1.0", @@ -1298,33 +1236,17 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true } } }, "@lerna/project": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.3.0.tgz", - "integrity": "sha512-InhIo9uwT1yod72ai5SKseJSUk8KkqG6COmwp1/45vibbawb7ZLbokpns7n46A0NdGNlmwJolamybYOuyumejw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.4.3.tgz", + "integrity": "sha512-j2EeuwdbHsL++jy0s2ShDbdOPirPOL/FNMRf7Qtwl4pEWoOiSYmv/LnIt2pV7cwww9Lx8Y682/7CQwlXdgrrMw==", "dev": true, "requires": { - "@lerna/package": "5.3.0", - "@lerna/validation-error": "5.3.0", + "@lerna/package": "5.4.3", + "@lerna/validation-error": "5.4.3", "cosmiconfig": "^7.0.0", "dedent": "^0.7.0", "dot-prop": "^6.0.1", @@ -1335,29 +1257,12 @@ "p-map": "^4.0.0", "resolve-from": "^5.0.0", "write-json-file": "^4.3.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } } }, "@lerna/prompt": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.3.0.tgz", - "integrity": "sha512-4bIusBdjpw665CJtFsVsaB55hLHnmKnrcOaRjna6N/MdJDl8Th6X4EM4rrfXTX/uUNR3XcV91lYqcLuLmrpm5w==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.4.3.tgz", + "integrity": "sha512-VqrTgnbm1H24aYacXmZ2z7atHO6W4NamvwHroGRFqiM34dCLQh8S22X5mNnb4nX5lgfb+doqcxBtOi91vqpJ2g==", "dev": true, "requires": { "inquirer": "^8.2.4", @@ -1365,30 +1270,30 @@ } }, "@lerna/publish": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.3.0.tgz", - "integrity": "sha512-T8T1BQdI+NnlVARKwIXzILknEuiQlZToBsDpuX06M7+45t/pp9Z+u6pVt3rrqwiUPZ/dpoZzYKI31YdNJtGMcQ==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.3.0", - "@lerna/child-process": "5.3.0", - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "@lerna/log-packed": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/npm-dist-tag": "5.3.0", - "@lerna/npm-publish": "5.3.0", - "@lerna/otplease": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/pack-directory": "5.3.0", - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@lerna/version": "5.3.0", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.4.3.tgz", + "integrity": "sha512-SYziRvRwahzbM0A4T63FfQsk2i33cIauKXlJz6t3GQZvVzUFb0gD/baVas2V7Fs/Ty1oCqtmDKB/ABTznWYwGg==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "5.4.3", + "@lerna/child-process": "5.4.3", + "@lerna/collect-updates": "5.4.3", + "@lerna/command": "5.4.3", + "@lerna/describe-ref": "5.4.3", + "@lerna/log-packed": "5.4.3", + "@lerna/npm-conf": "5.4.3", + "@lerna/npm-dist-tag": "5.4.3", + "@lerna/npm-publish": "5.4.3", + "@lerna/otplease": "5.4.3", + "@lerna/output": "5.4.3", + "@lerna/pack-directory": "5.4.3", + "@lerna/prerelease-id-from-version": "5.4.3", + "@lerna/prompt": "5.4.3", + "@lerna/pulse-till-done": "5.4.3", + "@lerna/run-lifecycle": "5.4.3", + "@lerna/run-topologically": "5.4.3", + "@lerna/validation-error": "5.4.3", + "@lerna/version": "5.4.3", "fs-extra": "^9.1.0", "libnpmaccess": "^6.0.3", "npm-package-arg": "8.1.1", @@ -1411,47 +1316,31 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true } } }, "@lerna/pulse-till-done": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.3.0.tgz", - "integrity": "sha512-yNvSuPLT1ZTtD2LMVOmiDhw4+9qkyf6xCpfxiUp4cGEN+qIuazWB5JicKLE49o27DBdaG8Ao4lAlb16x/gNrwQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.4.3.tgz", + "integrity": "sha512-Twy0UmVtyFzC+sLDnuY0u37Xu17WAP7ysQ7riaLx9KhO0M9MZvoY+kDF/hg0K204tZi0dr6R5eLGEUd+Xkg9Rw==", "dev": true, "requires": { "npmlog": "^6.0.2" } }, "@lerna/query-graph": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.3.0.tgz", - "integrity": "sha512-t99lNj97/Vilp5Js1Be7MoyaZ5U0fbOFh0E7lnTfSLvZhTkPMK6xLvAx2M3NQqhwYCQjTFDuf9ozQ3HQtYZAmA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.4.3.tgz", + "integrity": "sha512-eiRsEPg+t2tN9VWXSAj2y0zEphPrOz6DdYw/5ntVFDecIfoANxGKcCkOTqb3PnaC8BojI64N3Ju+i41jcO0mLw==", "dev": true, "requires": { - "@lerna/package-graph": "5.3.0" + "@lerna/package-graph": "5.4.3" } }, "@lerna/resolve-symlink": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.3.0.tgz", - "integrity": "sha512-zKI7rV5FzzlMBfi6kjDS0ulzcdDTORvdOJ/+CHU5C2h+v+P64Nk2VhZZNCCBDoO/l4GRhgehZOB70GIamO1TSw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.4.3.tgz", + "integrity": "sha512-BzqinKmTny70KgSBAaVgdLHaVR3WXRVk5EDbQHB73qg4dHiyYrzvDBqkaKzv1K1th8E4LdQQXf5LiNEbfU/1Bg==", "dev": true, "requires": { "fs-extra": "^9.1.0", @@ -1470,84 +1359,76 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true } } }, "@lerna/rimraf-dir": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.3.0.tgz", - "integrity": "sha512-/QJebh0tSY3LjgEyOo+6NH/b7ZNw9IpjqiDtvnLixjtdfkgli1OKOoZTa4KrO0mJoqMRq4yAa98cjpIzyKqCqw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.4.3.tgz", + "integrity": "sha512-gBraUVczKk4Jik1+qCj4jtQ53l1zmWmMoH7A11ifYI60Dg7Mc6iQcIZOIj6siD5TSOtSCy7qePu3VyXBOIquvQ==", "dev": true, "requires": { - "@lerna/child-process": "5.3.0", + "@lerna/child-process": "5.4.3", "npmlog": "^6.0.2", "path-exists": "^4.0.0", "rimraf": "^3.0.2" + }, + "dependencies": { + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } } }, "@lerna/run": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.3.0.tgz", - "integrity": "sha512-KwoKTj1w71OmUHONNYhZME+tr5lk9Q4f+3LUr2WtWZRuOAGO5ZCRrcZc+N4Ib7zno89Ub6Ovz51fcjwltLh72w==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/npm-run-script": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/profiler": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/timer": "5.3.0", - "@lerna/validation-error": "5.3.0", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.4.3.tgz", + "integrity": "sha512-PyHOYCsuJ+5r9ymjtwbQCbMMebVhaZ7Xy4jNpL9kqIvmdxe1S5QTP6Vyc6+RAvUtx0upP++0MFFA8CbZ1ZwOcw==", + "dev": true, + "requires": { + "@lerna/command": "5.4.3", + "@lerna/filter-options": "5.4.3", + "@lerna/npm-run-script": "5.4.3", + "@lerna/output": "5.4.3", + "@lerna/profiler": "5.4.3", + "@lerna/run-topologically": "5.4.3", + "@lerna/timer": "5.4.3", + "@lerna/validation-error": "5.4.3", "p-map": "^4.0.0" } }, "@lerna/run-lifecycle": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.3.0.tgz", - "integrity": "sha512-EuBCGwm2PLgkebfyqo3yNkwfSb1EzHeo3lA8t4yld6LXWkgUPBFhc7RwRc6TsQOpjpfFvDSGoI282R01o0jPVQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.4.3.tgz", + "integrity": "sha512-XKUfELNjkR6EUg+Xh92s1etjNvCbTBw20QMXDsyGSipHcLr7huXjC0D2/4/+j8/N5sz/rg+JufQfc1ldtpOU0A==", "dev": true, "requires": { - "@lerna/npm-conf": "5.3.0", + "@lerna/npm-conf": "5.4.3", "@npmcli/run-script": "^4.1.7", "npmlog": "^6.0.2", "p-queue": "^6.6.2" } }, "@lerna/run-topologically": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.3.0.tgz", - "integrity": "sha512-WiFF2EiwLjAguKs0lEmcukTL7WhuWFwxNprrGWFxEkBhlGdMFk18n8BaZN8FO26xqzztzuPzSx1re/f/dEEAPg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.4.3.tgz", + "integrity": "sha512-9bT8mJ0RICIk16l8L9jRRqSXGSiLEKUd50DLz5Tv0EdOKD+prwffAivCpVMYF9tdD5UaQzDAK/VzFdS5FEzPQg==", "dev": true, "requires": { - "@lerna/query-graph": "5.3.0", + "@lerna/query-graph": "5.4.3", "p-queue": "^6.6.2" } }, "@lerna/symlink-binary": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.3.0.tgz", - "integrity": "sha512-dIATASuGS6y512AGjacOoTpkFDPsKlhggjzL3KLdSNmxV3288nUqaFBuA7rTnnMNnBQ7jVuE1JKJupZnzPN0cA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.4.3.tgz", + "integrity": "sha512-iXBijyb1+NiOeifnRsbicSju6/FGtv6hvNny2lbjyr0EJ8jMz6JaoQ6eep9yXhgaNRJND1Pw9JBiCv6EhhcyCw==", "dev": true, "requires": { - "@lerna/create-symlink": "5.3.0", - "@lerna/package": "5.3.0", + "@lerna/create-symlink": "5.4.3", + "@lerna/package": "5.4.3", "fs-extra": "^9.1.0", "p-map": "^4.0.0" }, @@ -1563,34 +1444,18 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true } } }, "@lerna/symlink-dependencies": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.3.0.tgz", - "integrity": "sha512-qkq4YT/Bdrb3W22ve+d2Gy3hRTrtT/zBhjKTCukEpYsFJLwSjZ4z5vbv6J15/j6PN1Km9oTRp6vBYmdjAuARQQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.4.3.tgz", + "integrity": "sha512-9fK3fIl6wyihyfKhDUquiAx8JoMjctBJ7zhLjrgOon5Ua2fyc+mVp9fTWsjHtv7IaC/TeP9oA4/IcBtdr2xieg==", "dev": true, "requires": { - "@lerna/create-symlink": "5.3.0", - "@lerna/resolve-symlink": "5.3.0", - "@lerna/symlink-binary": "5.3.0", + "@lerna/create-symlink": "5.4.3", + "@lerna/resolve-symlink": "5.4.3", + "@lerna/symlink-binary": "5.4.3", "fs-extra": "^9.1.0", "p-map": "^4.0.0", "p-map-series": "^2.1.0" @@ -1607,29 +1472,13 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true } } }, "@lerna/temp-write": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.3.0.tgz", - "integrity": "sha512-AhC5Q+tV0yebEc1P2jsB4apQzztW8dgdLLc1G1Pkt46l5vezRGhZmsj+iUyCsVjpdUSO/UcAq1DbI2Xzhf5arg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.4.3.tgz", + "integrity": "sha512-HgAVNmKfeRKm4QPFGFfmzVC/lA2jv5QpMXPPDahoBEI6BhYtMmHiUWQan6dfsCoSf65xDd+9NTESya9AOSbN2w==", "dev": true, "requires": { "graceful-fs": "^4.1.15", @@ -1637,43 +1486,60 @@ "make-dir": "^3.0.0", "temp-dir": "^1.0.0", "uuid": "^8.3.2" - } + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } }, "@lerna/timer": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.3.0.tgz", - "integrity": "sha512-IeDjj1gJtbUPKl2ebpiml9u4k2kRqYF1Dbs6JuWpeC7lGxAx3JcUmkNH2RQ1BYTxk5xc9FKlgNMrZQwhq2K1Ow==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.4.3.tgz", + "integrity": "sha512-0NwrCxug6pmSAuPaAHNr5VRGw7+nqikoIpwx6RViJiOD+UYFf3k955fngtSX2JhETR/7it9ncgpbaLvlxusx9g==", "dev": true }, "@lerna/validation-error": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.3.0.tgz", - "integrity": "sha512-GVvnTxx+CNFjXCiJahAu2c/pP2R3DhGuQp4CJUyKegnzGaWK0h5PhlwRL7/LbDMPLh2zLobPOVr9kTOjwv76Nw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.4.3.tgz", + "integrity": "sha512-edf9vbQaDViffhHqL/wHdGs83RV7uJ4N5E3VEpjXefWIUfgmw9wYjkX338WYUh/XqDYbSV6C1M8A24FT3/0uzw==", "dev": true, "requires": { "npmlog": "^6.0.2" } }, "@lerna/version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.3.0.tgz", - "integrity": "sha512-QOQSAdpeP66oQQ20nNZ4NhJS5NtZZDGyz36kP/4BeqjGK6QgtrEmto4+vmWj49w3VJUIXnrqAKHiPkhFUmJm5Q==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.3.0", - "@lerna/child-process": "5.3.0", - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/conventional-commits": "5.3.0", - "@lerna/github-client": "5.3.0", - "@lerna/gitlab-client": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/temp-write": "5.3.0", - "@lerna/validation-error": "5.3.0", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.4.3.tgz", + "integrity": "sha512-a6Q+o1fZbOg/GVG8QtvfyOpX0sZ38bbI9hSJU5YMf99YKdyzp80dDDav+IGMxIaZSj08HJ1pPyXOLR27I8fTUQ==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "5.4.3", + "@lerna/child-process": "5.4.3", + "@lerna/collect-updates": "5.4.3", + "@lerna/command": "5.4.3", + "@lerna/conventional-commits": "5.4.3", + "@lerna/github-client": "5.4.3", + "@lerna/gitlab-client": "5.4.3", + "@lerna/output": "5.4.3", + "@lerna/prerelease-id-from-version": "5.4.3", + "@lerna/prompt": "5.4.3", + "@lerna/run-lifecycle": "5.4.3", + "@lerna/run-topologically": "5.4.3", + "@lerna/temp-write": "5.4.3", + "@lerna/validation-error": "5.4.3", "chalk": "^4.1.0", "dedent": "^0.7.0", "load-json-file": "^6.2.0", @@ -1689,13 +1555,25 @@ } }, "@lerna/write-log-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.3.0.tgz", - "integrity": "sha512-cmrNAI5+9auUJSuTVrUzt2nb/KX6htgjdw7gGPMI1Tm6cdBIbs67R6LedZ8yvYOLGsXB2Se93vxv5fTgEHWfCw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.4.3.tgz", + "integrity": "sha512-S2kctFhsO4mMbR52tW9VjYrGWUMYO5YIjprg8B7vQSwYvWOOJfqOKy/A+P/U5zXuCSAbDDGssyS+CCM36MFEQw==", "dev": true, "requires": { "npmlog": "^6.0.2", "write-file-atomic": "^4.0.1" + }, + "dependencies": { + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + } } }, "@metamask/eth-sig-util": { @@ -1726,6 +1604,29 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, "ethereumjs-util": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", @@ -1823,25 +1724,28 @@ "walk-up-path": "^1.0.0" }, "dependencies": { + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", + "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", "dev": true, "requires": { "lru-cache": "^7.5.1" } }, "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", "dev": true }, "npm-package-arg": { @@ -1855,23 +1759,63 @@ "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } } } }, "@npmcli/fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.1.tgz", - "integrity": "sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "dev": true, "requires": { "@gar/promisify": "^1.1.3", "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "@npmcli/git": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", - "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", + "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", "dev": true, "requires": { "@npmcli/promise-spawn": "^3.0.0", @@ -1886,16 +1830,30 @@ }, "dependencies": { "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", "dev": true }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } } } }, @@ -1964,24 +1922,27 @@ "json-parse-even-better-errors": "^2.3.1", "pacote": "^13.0.3", "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "@npmcli/move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", "dev": true, "requires": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } } }, "@npmcli/name-from-folder": { @@ -2015,9 +1976,9 @@ } }, "@npmcli/run-script": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.0.tgz", - "integrity": "sha512-e/QgLg7j2wSJp1/7JRl0GC8c7PMX+uYlA/1Tb+IDOLdSM4T7K1VQ9mm9IGU3WRtY5vEIObpqCLb3aCNCug18DA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", + "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", "dev": true, "requires": { "@npmcli/node-gyp": "^2.0.0", @@ -2046,55 +2007,63 @@ } }, "@octokit/auth-token": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", - "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.1.tgz", + "integrity": "sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA==", "dev": true, "requires": { - "@octokit/types": "^6.0.3" + "@octokit/types": "^7.0.0" } }, "@octokit/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", - "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.5.tgz", + "integrity": "sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA==", "dev": true, "requires": { "@octokit/auth-token": "^3.0.0", "@octokit/graphql": "^5.0.0", "@octokit/request": "^6.0.0", "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.0.3", + "@octokit/types": "^7.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" } }, "@octokit/endpoint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", - "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.1.tgz", + "integrity": "sha512-/wTXAJwt0HzJ2IeE4kQXO+mBScfzyCkI0hMtkIaqyXd9zg76OpOfNQfHL9FlaxAV2RsNiOXZibVWloy8EexENg==", "dev": true, "requires": { - "@octokit/types": "^6.0.3", + "@octokit/types": "^7.0.0", "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } } }, "@octokit/graphql": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", - "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.1.tgz", + "integrity": "sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA==", "dev": true, "requires": { "@octokit/request": "^6.0.0", - "@octokit/types": "^6.0.3", + "@octokit/types": "^7.0.0", "universal-user-agent": "^6.0.0" } }, "@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.4.0.tgz", + "integrity": "sha512-2mVzW0X1+HDO3jF80/+QFZNzJiTefELKbhMu6yaBYbp/1gSMkVDm4rT472gJljTokWUlXaaE63m7WrWENhMDLw==", "dev": true }, "@octokit/plugin-enterprise-rest": { @@ -2104,12 +2073,12 @@ "dev": true }, "@octokit/plugin-paginate-rest": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz", - "integrity": "sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.1.0.tgz", + "integrity": "sha512-2O5K5fpajYG5g62wjzHR7/cWYaCA88CextAW3vFP+yoIHD0KEdlVMHfM5/i5LyV+JMmqiYW7w5qfg46FR+McNw==", "dev": true, "requires": { - "@octokit/types": "^6.41.0" + "@octokit/types": "^7.1.1" } }, "@octokit/plugin-request-log": { @@ -2119,59 +2088,67 @@ "dev": true }, "@octokit/plugin-rest-endpoint-methods": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.2.0.tgz", - "integrity": "sha512-PZ+yfkbZAuRUtqu6Y191/V3eM0KBPx+Yq7nh+ONPdpm3EX4pd5UnK2y2XgO/0AtNum5a4aJCDjqsDuUZ2hWRXw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.3.0.tgz", + "integrity": "sha512-qEu2wn6E7hqluZwIEUnDxWROvKjov3zMIAi4H4d7cmKWNMeBprEXZzJe8pE5eStUYC1ysGhD0B7L6IeG1Rfb+g==", "dev": true, "requires": { - "@octokit/types": "^6.41.0", + "@octokit/types": "^7.0.0", "deprecation": "^2.3.1" } }, "@octokit/request": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.0.tgz", - "integrity": "sha512-7IAmHnaezZrgUqtRShMlByJK33MT9ZDnMRgZjnRrRV9a/jzzFwKGz0vxhFU6i7VMLraYcQ1qmcAOin37Kryq+Q==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.1.tgz", + "integrity": "sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ==", "dev": true, "requires": { "@octokit/endpoint": "^7.0.0", "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.16.1", + "@octokit/types": "^7.0.0", "is-plain-object": "^5.0.0", "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } } }, "@octokit/request-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", - "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.1.tgz", + "integrity": "sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ==", "dev": true, "requires": { - "@octokit/types": "^6.0.3", + "@octokit/types": "^7.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" } }, "@octokit/rest": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", - "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.4.tgz", + "integrity": "sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA==", "dev": true, "requires": { "@octokit/core": "^4.0.0", - "@octokit/plugin-paginate-rest": "^3.0.0", + "@octokit/plugin-paginate-rest": "^4.0.0", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-rest-endpoint-methods": "^6.0.0" } }, "@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-7.1.1.tgz", + "integrity": "sha512-Dx6cNTORyVaKY0Yeb9MbHksk79L8GXsihbG6PtWqTpkyA2TY1qBWE26EQXVG3dHwY9Femdd/WEeRUEiD0+H3TQ==", "dev": true, "requires": { - "@octokit/openapi-types": "^12.11.0" + "@octokit/openapi-types": "^13.4.0" } }, "@parcel/watcher": { @@ -2182,14 +2159,6 @@ "requires": { "node-addon-api": "^3.2.1", "node-gyp-build": "^4.3.0" - }, - "dependencies": { - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - } } }, "@scure/base": { @@ -2230,6 +2199,14 @@ "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@sentry/hub": { @@ -2241,6 +2218,14 @@ "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@sentry/minimal": { @@ -2252,6 +2237,14 @@ "@sentry/hub": "5.30.0", "@sentry/types": "5.30.0", "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@sentry/node": { @@ -2269,6 +2262,14 @@ "https-proxy-agent": "^5.0.0", "lru_map": "^0.3.3", "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@sentry/tracing": { @@ -2282,6 +2283,14 @@ "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@sentry/types": { @@ -2298,6 +2307,14 @@ "requires": { "@sentry/types": "5.30.0", "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@sinclair/typebox": { @@ -2385,9 +2402,9 @@ } }, "@types/jest": { - "version": "28.1.7", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.7.tgz", - "integrity": "sha512-acDN4VHD40V24tgu0iC44jchXavRNVFXQ/E6Z5XNsswgoSO/4NgsXoEYmPUGookKldlZQyIpmrEXsHI9cA3ZTA==", + "version": "28.1.8", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz", + "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==", "dev": true, "requires": { "expect": "^28.0.0", @@ -2442,9 +2459,9 @@ "dev": true }, "@types/node": { - "version": "18.6.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", - "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==", + "version": "18.7.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", + "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", "dev": true }, "@types/normalize-package-data": { @@ -2584,6 +2601,14 @@ "debug": "^4.1.0", "depd": "^1.1.2", "humanize-ms": "^1.2.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + } } }, "aggregate-error": { @@ -2609,14 +2634,6 @@ "dev": true, "requires": { "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } } }, "ansi-regex": { @@ -2697,9 +2714,9 @@ "dev": true }, "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true }, "asap": { @@ -2765,17 +2782,35 @@ "dev": true }, "bin-links": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", - "integrity": "sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.3.tgz", + "integrity": "sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==", "dev": true, "requires": { "cmd-shim": "^5.0.0", "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", + "npm-normalize-package-bin": "^2.0.0", "read-cmd-shim": "^3.0.0", "rimraf": "^3.0.0", "write-file-atomic": "^4.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + } } }, "binary-extensions": { @@ -2895,13 +2930,10 @@ "dev": true }, "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true }, "byte-size": { "version": "7.0.1", @@ -2916,9 +2948,9 @@ "dev": true }, "cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "dev": true, "requires": { "@npmcli/fs": "^2.1.0", @@ -2938,7 +2970,7 @@ "rimraf": "^3.0.2", "ssri": "^9.0.0", "tar": "^6.1.11", - "unique-filename": "^1.1.1" + "unique-filename": "^2.0.0" }, "dependencies": { "brace-expansion": { @@ -2964,9 +2996,9 @@ } }, "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", "dev": true }, "minimatch": { @@ -2977,12 +3009,6 @@ "requires": { "brace-expansion": "^2.0.1" } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true } } }, @@ -3003,9 +3029,9 @@ "dev": true }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "camelcase-keys": { @@ -3017,6 +3043,14 @@ "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } } }, "chai": { @@ -3042,9 +3076,9 @@ } }, "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -3076,17 +3110,6 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } } }, "chownr": { @@ -3096,9 +3119,9 @@ "dev": true }, "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", "dev": true }, "cipher-base": { @@ -3164,17 +3187,6 @@ "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } } }, "cmd-shim": { @@ -3223,6 +3235,12 @@ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", "dev": true }, + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true + }, "common-ancestor-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", @@ -3314,6 +3332,29 @@ "read-pkg": "^3.0.0", "read-pkg-up": "^3.0.0", "through2": "^4.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + } } }, "conventional-changelog-preset-loader": { @@ -3394,15 +3435,15 @@ "dev": true }, "core-js-pure": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.1.tgz", - "integrity": "sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg==", + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.0.tgz", + "integrity": "sha512-IeHpLwk3uoci37yoI2Laty59+YqH9x5uR65/yiA0ARAJrTrN4YU0rmauLWfvqOuk77SlNJXj2rM6oT/dBD87+A==", "dev": true }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "cosmiconfig": { @@ -3496,9 +3537,9 @@ "dev": true }, "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, "decamelize-keys": { @@ -3511,6 +3552,12 @@ "map-obj": "^1.0.0" }, "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -3580,9 +3627,9 @@ "dev": true }, "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, "deprecation": { @@ -3592,9 +3639,9 @@ "dev": true }, "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true }, "dezalgo": { @@ -3773,33 +3820,22 @@ "dev": true }, "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dev": true, + "requires": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } }, "ethereumjs-abi": { "version": "0.6.8", @@ -3826,6 +3862,29 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, "ethereumjs-util": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", @@ -3854,6 +3913,31 @@ "create-hash": "^1.1.2", "ethereum-cryptography": "^0.1.3", "rlp": "^2.2.4" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, "ethjs-util": { @@ -3927,12 +4011,23 @@ "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" + }, + "dependencies": { + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } } }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -3940,17 +4035,6 @@ "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } } }, "fastq": { @@ -3969,14 +4053,6 @@ "dev": true, "requires": { "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - } } }, "fill-range": { @@ -3988,6 +4064,15 @@ "to-regex-range": "^5.0.1" } }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -4013,14 +4098,14 @@ "dev": true }, "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, "fs-minipass": { @@ -4116,15 +4201,6 @@ "lru-cache": "^6.0.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -4165,12 +4241,6 @@ "xtend": "~4.0.1" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -4185,6 +4255,12 @@ "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, @@ -4278,9 +4354,9 @@ } }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -4312,6 +4388,21 @@ "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" + }, + "dependencies": { + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@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" + } + } } }, "graceful-fs": { @@ -4340,9 +4431,9 @@ "dev": true }, "hardhat": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.10.1.tgz", - "integrity": "sha512-0FN9TyCtn7Lt25SB2ei2G7nA2rZjP+RN6MvFOm+zYwherxLZNo6RbD8nDz88eCbhRapevmXqOiL2nM8INKsjmA==", + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.10.2.tgz", + "integrity": "sha512-L/KvDDT/MA6332uAtYTqdcHoSABljw4pPjHQe5SHdIJ+xKfaSc6vDKw03CmrQ5Xup0gHs8XnVSBpZo1AbbIW7g==", "dev": true, "requires": { "@ethereumjs/block": "^3.6.2", @@ -4395,12 +4486,6 @@ "ws": "^7.4.6" }, "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -4410,15 +4495,6 @@ "color-convert": "^1.9.0" } }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -4428,16 +4504,14 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - } } }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -4453,194 +4527,44 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "ethereum-cryptography": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", - "dev": true, - "requires": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "p-try": "^1.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { - "p-limit": "^1.1.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "path-exists": { + "has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "requires": { - "glob": "^7.1.3" + "graceful-fs": "^4.1.6" } }, "semver": { @@ -4649,44 +4573,6 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -4694,36 +4580,13 @@ "dev": true, "requires": { "has-flag": "^3.0.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - } } }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } } } }, @@ -4793,10 +4656,13 @@ } }, "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "http-cache-semantics": { "version": "4.1.0", @@ -4815,14 +4681,6 @@ "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - } } }, "http-proxy-agent": { @@ -4931,6 +4789,14 @@ "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } } }, "import-local": { @@ -4998,19 +4864,28 @@ "validate-npm-package-name": "^4.0.0" }, "dependencies": { + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", + "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", "dev": true, "requires": { "lru-cache": "^7.5.1" } }, "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", "dev": true }, "npm-package-arg": { @@ -5024,15 +4899,44 @@ "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } - } - } - }, - "inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", - "dev": true, - "requires": { + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + } + } + }, + "inquirer": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "dev": true, + "requires": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", @@ -5048,6 +4952,18 @@ "strip-ansi": "^6.0.0", "through": "^2.3.6", "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "io-ts": { @@ -5087,6 +5003,14 @@ "dev": true, "requires": { "ci-info": "^2.0.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + } } }, "is-core-module": { @@ -5110,6 +5034,12 @@ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -5150,16 +5080,19 @@ "dev": true }, "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } }, "is-ssh": { "version": "1.4.0", @@ -5283,14 +5216,6 @@ "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" - }, - "dependencies": { - "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - } } }, "js-sha3": { @@ -5354,12 +5279,13 @@ "dev": true }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "jsonparse": { @@ -5369,15 +5295,15 @@ "dev": true }, "just-diff": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.0.3.tgz", - "integrity": "sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.1.1.tgz", + "integrity": "sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ==", "dev": true }, "just-diff-apply": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.3.1.tgz", - "integrity": "sha512-dgFenZnMsc1xGNqgdtgnh7DK+Oy352CE3VZLbzcbQpsBs9iI2K3M0IRrdgREZ72eItTjbl0suRyvKRdVQa9GbA==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.4.1.tgz", + "integrity": "sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g==", "dev": true }, "keccak": { @@ -5389,6 +5315,14 @@ "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", "readable-stream": "^3.6.0" + }, + "dependencies": { + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true + } } }, "kind-of": { @@ -5407,30 +5341,30 @@ } }, "lerna": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.3.0.tgz", - "integrity": "sha512-0Y9xJqleVu0ExGmsw2WM/GkVmxOwtA7OLQFS5ERPKJfnsxH9roTX3a7NPaGQRI2E+tSJLJJGgNSf3WYEqinOqA==", - "dev": true, - "requires": { - "@lerna/add": "5.3.0", - "@lerna/bootstrap": "5.3.0", - "@lerna/changed": "5.3.0", - "@lerna/clean": "5.3.0", - "@lerna/cli": "5.3.0", - "@lerna/create": "5.3.0", - "@lerna/diff": "5.3.0", - "@lerna/exec": "5.3.0", - "@lerna/import": "5.3.0", - "@lerna/info": "5.3.0", - "@lerna/init": "5.3.0", - "@lerna/link": "5.3.0", - "@lerna/list": "5.3.0", - "@lerna/publish": "5.3.0", - "@lerna/run": "5.3.0", - "@lerna/version": "5.3.0", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.4.3.tgz", + "integrity": "sha512-PypijMk4Jii8DoWGRLiHhBUaqpjXAmrwbs6uUZgyb07JrqCrXW3nhAyzdZE5S0rk1/sRzjd10fYmntOgNFfKBw==", + "dev": true, + "requires": { + "@lerna/add": "5.4.3", + "@lerna/bootstrap": "5.4.3", + "@lerna/changed": "5.4.3", + "@lerna/clean": "5.4.3", + "@lerna/cli": "5.4.3", + "@lerna/create": "5.4.3", + "@lerna/diff": "5.4.3", + "@lerna/exec": "5.4.3", + "@lerna/import": "5.4.3", + "@lerna/info": "5.4.3", + "@lerna/init": "5.4.3", + "@lerna/link": "5.4.3", + "@lerna/list": "5.4.3", + "@lerna/publish": "5.4.3", + "@lerna/run": "5.4.3", + "@lerna/version": "5.4.3", "import-local": "^3.0.2", "npmlog": "^6.0.2", - "nx": ">=14.4.3 < 16" + "nx": ">=14.5.4 < 16" } }, "level-codec": { @@ -5533,19 +5467,28 @@ "npm-registry-fetch": "^13.0.0" }, "dependencies": { + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", + "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", "dev": true, "requires": { "lru-cache": "^7.5.1" } }, "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", "dev": true }, "npm-package-arg": { @@ -5559,6 +5502,35 @@ "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } } } }, @@ -5575,33 +5547,30 @@ "ssri": "^9.0.0" }, "dependencies": { + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", + "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", "dev": true, "requires": { "lru-cache": "^7.5.1" } }, "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", "dev": true }, - "normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, "npm-package-arg": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", @@ -5613,6 +5582,35 @@ "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } } } }, @@ -5634,6 +5632,12 @@ "type-fest": "^0.6.0" }, "dependencies": { + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, "type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", @@ -5642,6 +5646,16 @@ } } }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -5673,12 +5687,12 @@ } }, "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "yallist": "^3.0.2" + "yallist": "^4.0.0" } }, "lru_map": { @@ -5694,18 +5708,19 @@ "dev": true }, "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "semver": "^6.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } @@ -5717,9 +5732,9 @@ "dev": true }, "make-fetch-happen": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz", - "integrity": "sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, "requires": { "agentkeepalive": "^4.2.1", @@ -5741,9 +5756,9 @@ }, "dependencies": { "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", "dev": true } } @@ -5841,6 +5856,15 @@ "path-exists": "^4.0.0" } }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -5850,6 +5874,18 @@ "p-locate": "^4.1.0" } }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -5868,6 +5904,18 @@ "p-limit": "^2.2.0" } }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -5880,6 +5928,12 @@ "type-fest": "^0.6.0" }, "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -5892,6 +5946,12 @@ "validate-npm-package-license": "^3.0.1" } }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", @@ -5919,17 +5979,17 @@ } } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, "type-fest": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, @@ -6012,9 +6072,9 @@ "dev": true }, "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -6035,6 +6095,20 @@ "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" + }, + "dependencies": { + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + } } }, "minipass": { @@ -6044,14 +6118,6 @@ "dev": true, "requires": { "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } } }, "minipass-collect": { @@ -6064,9 +6130,9 @@ } }, "minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, "requires": { "encoding": "^0.1.13", @@ -6120,16 +6186,14 @@ "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } } }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, "mkdirp-infer-owner": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", @@ -6139,14 +6203,6 @@ "chownr": "^2.0.0", "infer-owner": "^1.0.4", "mkdirp": "^1.0.3" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } } }, "mnemonist": { @@ -6158,38 +6214,198 @@ "obliterator": "^2.0.0" } }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" + "mocha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - } - } + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + } + } + }, + "modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } }, "mute-stream": { "version": "0.0.8", @@ -6197,6 +6413,12 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -6210,9 +6432,9 @@ "dev": true }, "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, "node-fetch": { @@ -6264,6 +6486,17 @@ "semver": "^7.3.5", "tar": "^6.1.2", "which": "^2.0.2" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "node-gyp-build": { @@ -6282,40 +6515,51 @@ } }, "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", + "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", "dev": true, "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "dependencies": { "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", + "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.5.1" } }, "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "requires": { - "yallist": "^4.0.0" + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -6364,59 +6608,18 @@ "hosted-git-info": "^3.0.6", "semver": "^7.0.0", "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, - "hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } } }, "npm-packlist": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", - "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", + "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", "dev": true, "requires": { "glob": "^8.0.1", "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" }, "dependencies": { "brace-expansion": { @@ -6449,34 +6652,64 @@ "requires": { "brace-expansion": "^2.0.1" } + }, + "npm-bundled": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", + "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^2.0.0" + } + }, + "npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true } } }, "npm-pick-manifest": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", - "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", + "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", "dev": true, "requires": { "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", + "npm-normalize-package-bin": "^2.0.0", "npm-package-arg": "^9.0.0", "semver": "^7.3.5" }, "dependencies": { + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", + "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", "dev": true, "requires": { "lru-cache": "^7.5.1" } }, "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", + "dev": true + }, + "npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", "dev": true }, "npm-package-arg": { @@ -6490,13 +6723,42 @@ "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } } } }, "npm-registry-fetch": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.0.tgz", - "integrity": "sha512-10LJQ/1+VhKrZjIuY9I/+gQTvumqqlgnsCufoXETHAPFTS3+M+Z5CFhZRDHGavmJ6rOye3UvNga88vl8n1r6gg==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", + "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", "dev": true, "requires": { "make-fetch-happen": "^10.0.6", @@ -6508,19 +6770,28 @@ "proc-log": "^2.0.0" }, "dependencies": { + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", + "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", "dev": true, "requires": { "lru-cache": "^7.5.1" } }, "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", "dev": true }, "npm-package-arg": { @@ -6534,6 +6805,35 @@ "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } } } }, @@ -6594,126 +6894,6 @@ "v8-compile-cache": "2.3.0", "yargs": "^17.4.0", "yargs-parser": "21.0.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@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" - } - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true - } } }, "object-inspect": { @@ -6786,6 +6966,24 @@ "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, "p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -6833,9 +7031,9 @@ } }, "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true }, "p-waterfall": { @@ -6848,9 +7046,9 @@ } }, "pacote": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", - "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", + "version": "13.6.2", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", + "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", "dev": true, "requires": { "@npmcli/git": "^3.0.0", @@ -6876,25 +7074,28 @@ "tar": "^6.1.11" }, "dependencies": { + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", + "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", "dev": true, "requires": { "lru-cache": "^7.5.1" } }, "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", "dev": true }, "npm-package-arg": { @@ -6908,6 +7109,35 @@ "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } } } }, @@ -6965,9 +7195,9 @@ } }, "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true }, "path-is-absolute": { @@ -7019,9 +7249,9 @@ "dev": true }, "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pkg-dir": { @@ -7069,6 +7299,18 @@ "requires": { "p-limit": "^2.2.0" } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true } } }, @@ -7165,6 +7407,12 @@ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -7229,21 +7477,21 @@ } }, "read-cmd-shim": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", - "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz", + "integrity": "sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==", "dev": true }, "read-package-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", - "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", + "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", "dev": true, "requires": { "glob": "^8.0.1", "json-parse-even-better-errors": "^2.3.1", "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^2.0.0" }, "dependencies": { "brace-expansion": { @@ -7268,21 +7516,6 @@ "once": "^1.3.0" } }, - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "dev": true - }, "minimatch": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", @@ -7292,17 +7525,11 @@ "brace-expansion": "^2.0.1" } }, - "normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } + "npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true } } }, @@ -7327,6 +7554,12 @@ "path-type": "^3.0.0" }, "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -7381,12 +7614,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true } } }, @@ -7398,57 +7625,6 @@ "requires": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - } } }, "readable-stream": { @@ -7521,20 +7697,12 @@ "dev": true, "requires": { "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } } }, "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "restore-cursor": { @@ -7615,14 +7783,6 @@ "dev": true, "requires": { "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - } } }, "safe-buffer": { @@ -7652,6 +7812,14 @@ "elliptic": "^6.5.4", "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0" + }, + "dependencies": { + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true + } } }, "semaphore-async-await": { @@ -7661,29 +7829,12 @@ "dev": true }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, "requires": { "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } } }, "serialize-javascript": { @@ -7797,19 +7948,84 @@ "socks": "^2.6.2" } }, + "solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "dev": true, + "requires": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, "sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, "requires": { - "is-plain-obj": "^2.0.0" + "is-plain-obj": "^1.0.0" }, "dependencies": { "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true } } @@ -7857,9 +8073,9 @@ } }, "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", "dev": true }, "split": { @@ -7938,14 +8154,6 @@ "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - } } }, "string_decoder": { @@ -7967,9 +8175,9 @@ } }, "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, "strip-final-newline": { @@ -8034,20 +8242,6 @@ "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } } }, "tar-stream": { @@ -8091,12 +8285,12 @@ } }, "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { - "os-tmpdir": "~1.0.2" + "rimraf": "^3.0.0" } }, "to-regex-range": { @@ -8121,14 +8315,6 @@ "dev": true, "requires": { "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } } }, "treeverse": { @@ -8188,20 +8374,12 @@ "json5": "^1.0.1", "minimist": "^1.2.6", "strip-bom": "^3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } } }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, "tsort": { @@ -8227,6 +8405,12 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -8243,36 +8427,36 @@ } }, "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==" }, "uglify-js": { - "version": "3.16.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", - "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.0.tgz", + "integrity": "sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==", "dev": true, "optional": true }, "undici": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.8.1.tgz", - "integrity": "sha512-iDRmWX4Zar/4A/t+1LrKQRm102zw2l9Wgat3LtTlTn8ykvMZmAmpq9tjyHEigx18FsY7IfATvyN3xSw9BDz0eA==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.10.0.tgz", + "integrity": "sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g==", "dev": true }, "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "dev": true, "requires": { - "unique-slug": "^2.0.0" + "unique-slug": "^3.0.0" } }, "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "dev": true, "requires": { "imurmurhash": "^0.1.4" @@ -8285,9 +8469,9 @@ "dev": true }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unpipe": { @@ -8337,12 +8521,12 @@ } }, "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "dev": true, "requires": { - "builtins": "^5.0.0" + "builtins": "^1.0.3" } }, "walk-up-path": { @@ -8401,6 +8585,12 @@ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, + "workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -8419,13 +8609,14 @@ "dev": true }, "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "requires": { + "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "signal-exit": "^3.0.2" } }, "write-json-file": { @@ -8442,12 +8633,36 @@ "write-file-atomic": "^3.0.0" }, "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, + "sort-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", + "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", + "dev": true, + "requires": { + "is-plain-obj": "^2.0.0" + } + }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -8473,60 +8688,12 @@ "write-json-file": "^3.2.0" }, "dependencies": { - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, "type-fest": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", "dev": true }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, "write-json-file": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", @@ -8544,9 +8711,9 @@ } }, "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true }, "xtend": { @@ -8562,9 +8729,9 @@ "dev": true }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yaml": { @@ -8586,20 +8753,12 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.0.0" - }, - "dependencies": { - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - } } }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "dev": true }, "yargs-unparser": { @@ -8612,26 +8771,6 @@ "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - } } }, "yn": { diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 2da83105a..b87a9276b 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.0", + "version": "1.0.3", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -37,7 +37,7 @@ "dependencies": { "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", - "@gnosis.pm/safe-deployments": "^1.12.0", + "@gnosis.pm/safe-deployments": "^1.16.0", "web3-core": "^1.7.1" } } diff --git a/packages/core-types/src/ethereumLibs/EthAdapter.ts b/packages/core-types/src/ethereumLibs/EthAdapter.ts index 1406b4bd7..6ba62dad4 100644 --- a/packages/core-types/src/ethereumLibs/EthAdapter.ts +++ b/packages/core-types/src/ethereumLibs/EthAdapter.ts @@ -1,5 +1,4 @@ import { BigNumber } from '@ethersproject/bignumber' -import { SingletonDeployment } from '@gnosis.pm/safe-deployments' import { SmartWalletContract } from 'contracts/SmartWalletContract' import { MultiSendContract } from '../contracts/MultiSendContract' import { MultiSendCallOnlyContract } from '../contracts/MultiSendCallOnlyContract' @@ -15,11 +14,6 @@ export interface EthAdapterTransaction { gasLimit?: number } -export interface GetContractProps { - chainId: number - singletonDeployment?: SingletonDeployment -} - export interface EthAdapter { getEip3770Address(fullAddress: string): Promise getBalance(address: string): Promise diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index d34c0ade5..155eea996 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -77,6 +77,7 @@ export interface WalletTransaction extends MetaTransaction{ baseGas: string | number gasPrice: string | number gasToken: string + tokenGasPriceFactor: string refundReceiver: string nonce: number } diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 4b6134734..92b4ff6dc 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -3,7 +3,7 @@ import { MultiSendContract } from './contracts/MultiSendContract' import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' import { SmartWalletContract } from './contracts/SmartWalletContract' -export type SmartAccountVersion = '1.0.1' | '1.0.0' +export type SmartAccountVersion = '1.0.2' | '1.0.1' | '1.0.0' export enum OperationType { Call, // 0 diff --git a/packages/ethers-lib/contracts/V1.0.2.sol b/packages/ethers-lib/contracts/V1.0.2.sol new file mode 100644 index 000000000..e5594fb4c --- /dev/null +++ b/packages/ethers-lib/contracts/V1.0.2.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.4.0 <=0.8.15; + +import { WalletFactory } from "scw-contracts-v1.0.3/contracts/smart-contract-wallet/WalletFactory.sol"; +import { SmartWallet } from "scw-contracts-v1.0.3/contracts/smart-contract-wallet/SmartWallet.sol"; +import { MultiSend } from "scw-contracts-v1.0.3/contracts/smart-contract-wallet/libs/MultiSend.sol"; +import { MultiSendCallOnly } from "scw-contracts-v1.0.3/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; +import { EntryPoint } from "scw-contracts-v1.0.3/contracts/references/aa-4337/EntryPoint.sol"; + +contract SmartWalletFactoryContract_v1_0_2 is WalletFactory { + constructor(address _defaultImpl) WalletFactory(_defaultImpl){} +} +contract SmartWalletContract_v1_0_2 is SmartWallet {} +contract MultiSendContract_v1_0_2 is MultiSend {} +contract MultiSendCallOnlyContract_v1_0_2 is MultiSendCallOnly {} +contract EntryPointContract_v1_0_2 is EntryPoint { + constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} +} + diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 3ba0e808d..cb84d41b4 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.0", + "version": "1.0.3", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -45,8 +45,9 @@ "@biconomy-sdk/core-types": "*", "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0", - "scw-contracts-v1.0.0": "npm:scw-contracts@^1.0.0", - "scw-contracts-v1.0.1": "npm:scw-contracts@^1.0.1" + "scw-contracts-v1.0.0": "npm:scw-contracts@1.0.0", + "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.1", + "scw-contracts-v1.0.3": "npm:scw-contracts@1.0.3" }, "peerDependencies": { "ethers": "^5.5.3" diff --git a/packages/ethers-lib/scripts/generateTypechainFiles.ts b/packages/ethers-lib/scripts/generateTypechainFiles.ts index fc32d8fbb..6dc793018 100644 --- a/packages/ethers-lib/scripts/generateTypechainFiles.ts +++ b/packages/ethers-lib/scripts/generateTypechainFiles.ts @@ -29,6 +29,13 @@ const smartAccountContracts_V1_0_1 = [ `${smartAccountContractsPath}/V1.0.1.sol/SmartWalletFactoryContract_v1_0_1.json`, `${smartAccountContractsPath}/V1.0.1.sol/EntryPointContract_v1_0_1.json` ].join(' ') +const smartAccountContracts_V1_0_2 = [ + `${smartAccountContractsPath}/V1.0.2.sol/SmartWalletContract_v1_0_2.json`, + `${smartAccountContractsPath}/V1.0.2.sol/MultiSendContract_v1_0_2.json`, + `${smartAccountContractsPath}/V1.0.2.sol/MultiSendCallOnlyContract_v1_0_2.json`, + `${smartAccountContractsPath}/V1.0.2.sol/SmartWalletFactoryContract_v1_0_2.json`, + `${smartAccountContractsPath}/V1.0.2.sol/EntryPointContract_v1_0_2.json` +].join(' ') // Remove existing Typechain files execSync(`rimraf ${outDirSrc} ${outDirTests}`) @@ -67,6 +74,7 @@ const ethersV5 = 'ethers-v5' // Src: Ethers V5 types generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.0`, smartAccountContracts_V1_0_0) generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.1`, smartAccountContracts_V1_0_1) +generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.2`, smartAccountContracts_V1_0_2) moveTypechainFiles( `${typeChainDirectorySrcPath}${ethersV5}/v1.0.0`, @@ -76,3 +84,7 @@ moveTypechainFiles( `${typeChainDirectorySrcPath}${ethersV5}/v1.0.1`, `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.1` ) +moveTypechainFiles( + `${typeChainDirectorySrcPath}${ethersV5}/v1.0.2`, + `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.2` +) diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.2/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.2/EntryPointEthersContract.ts new file mode 100644 index 000000000..e3d91131b --- /dev/null +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.2/EntryPointEthersContract.ts @@ -0,0 +1,42 @@ +import { EntryPointContract, UserOperation, TransactionResult } from '@biconomy-sdk/core-types' +import { + EntryPointContractV102 as EntryPointContract_TypeChain, + EntryPointContractV102Interface +} from '../../../../typechain/src/ethers-v5/v1.0.2/EntryPointContractV102' +import { toTxResult } from '../../../utils' +import { Contract } from '@ethersproject/contracts' + +class EntryPointEthersContract implements EntryPointContract { + constructor(public contract: EntryPointContract_TypeChain) {} + + getAddress(): string { + return this.contract.address + } + + getContract(): Contract { + return this.contract + } + + async simulateValidation(userOperation: UserOperation): Promise { + const resultSet = await this.contract.simulateValidation(userOperation) + return toTxResult(resultSet) + } + + async getRequestId(userOperation: UserOperation): Promise { + return this.contract.getRequestId(userOperation) + } + + async handleOps( + userOperations: UserOperation[], + beneficiary: string + ): Promise { + const resultSet = await this.contract.handleOps(userOperations, beneficiary) + return toTxResult(resultSet) + } + + async getSenderAddress(initCode: string, salt: number): Promise { + return this.contract.getSenderAddress(initCode, salt) + } +} + +export default EntryPointEthersContract diff --git a/packages/ethers-lib/src/contracts/MultiSend/v1.0.2/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/v1.0.2/MultiSendEthersContract.ts new file mode 100644 index 000000000..7777a7185 --- /dev/null +++ b/packages/ethers-lib/src/contracts/MultiSend/v1.0.2/MultiSendEthersContract.ts @@ -0,0 +1,32 @@ +import { MultiSendContract } from '@biconomy-sdk/core-types' +import { + MultiSendContractV102 as MultiSend_TypeChain, + MultiSendContractV102Interface +} from '../../../../typechain/src/ethers-v5/v1.0.2/MultiSendContractV102' +import { Contract } from '@ethersproject/contracts' +import { Interface } from '@ethersproject/abi' + +class MultiSendEthersContract implements MultiSendContract { + constructor(public contract: MultiSend_TypeChain) {} + + getAddress(): string { + return this.contract.address + } + + getContract(): Contract { + return this.contract + } + + getInterface(): Interface { + return this.contract.interface + } + + encode: MultiSendContractV102Interface['encodeFunctionData'] = ( + methodName: any, + params: any + ): string => { + return this.contract.interface.encodeFunctionData(methodName, params) + } +} + +export default MultiSendEthersContract diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.2/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.2/MultiSendCallOnlyEthersContract.ts new file mode 100644 index 000000000..1dab3df4d --- /dev/null +++ b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.2/MultiSendCallOnlyEthersContract.ts @@ -0,0 +1,32 @@ +import { MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' +import { + MultiSendCallOnlyContractV102 as MultiSendCallOnly_TypeChain, + MultiSendCallOnlyContractV102Interface +} from '../../../../typechain/src/ethers-v5/v1.0.2/MultiSendCallOnlyContractV102' +import { Contract } from '@ethersproject/contracts' +import { Interface } from '@ethersproject/abi' + +class MultiSendCallOnlyEthersContract implements MultiSendCallOnlyContract { + constructor(public contract: MultiSendCallOnly_TypeChain) {} + + getAddress(): string { + return this.contract.address + } + + getContract(): Contract { + return this.contract + } + + getInterface(): Interface { + return this.contract.interface + } + + encode: MultiSendCallOnlyContractV102Interface['encodeFunctionData'] = ( + methodName: any, + params: any + ): string => { + return this.contract.interface.encodeFunctionData(methodName, params) + } +} + +export default MultiSendCallOnlyEthersContract diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.2/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.2/SmartWalletContractEthers.ts new file mode 100644 index 000000000..43130421b --- /dev/null +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.2/SmartWalletContractEthers.ts @@ -0,0 +1,80 @@ +import { BigNumber } from '@ethersproject/bignumber' +import { + SmartAccountVersion, + SmartWalletContract, + WalletTransaction, + ExecTransaction, + FeeRefund, + TransactionResult +} from '@biconomy-sdk/core-types' +import { toTxResult } from '../../../utils' +import { SmartWalletContractV102 as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.2/SmartWalletContractV102' +import { SmartWalletContractV102Interface } from '../../../../typechain/src/ethers-v5/v1.0.2/SmartWalletContractV102' +import { Interface } from 'ethers/lib/utils' +import { Contract } from '@ethersproject/contracts' +class SmartWalletContractEthers implements SmartWalletContract { + constructor(public contract: SmartWalletContract_TypeChain) {} + + getInterface(): Interface { + return this.contract.interface + } + + getContract(): Contract { + return this.contract + } + + getAddress(): string { + return this.contract.address + } + + setAddress(address: string) { + this.contract.attach(address) + } + + async getOwner(): Promise { + return await this.contract.owner() + } + + async getVersion(): Promise { + return (await this.contract.VERSION()) as SmartAccountVersion + } + + async getNonce(batchId: number): Promise { + return await this.contract.getNonce(batchId) + } + async getTransactionHash(smartAccountTrxData: WalletTransaction): Promise { + return this.contract.getTransactionHash( + smartAccountTrxData.to, + smartAccountTrxData.value, + smartAccountTrxData.data, + smartAccountTrxData.operation, + smartAccountTrxData.targetTxGas, + smartAccountTrxData.baseGas, + smartAccountTrxData.gasPrice, + smartAccountTrxData.tokenGasPriceFactor, + smartAccountTrxData.gasToken, + smartAccountTrxData.refundReceiver, + smartAccountTrxData.nonce + ) + } + + async execTransaction( + _tx: ExecTransaction, + batchId: number, + refundInfo: FeeRefund, + signatures: string + ): Promise { + // TODO: estimate GAS before making the transaction + const txResponse = await this.contract.execTransaction(_tx, batchId, refundInfo, signatures) + return toTxResult(txResponse) + } + + encode: SmartWalletContractV102Interface['encodeFunctionData'] = ( + methodName: any, + params: any + ): string => { + return this.contract.interface.encodeFunctionData(methodName, params) + } +} + +export default SmartWalletContractEthers diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.2/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.2/SmartWalletProxyFactoryEthersContract.ts new file mode 100644 index 000000000..70a315932 --- /dev/null +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.2/SmartWalletProxyFactoryEthersContract.ts @@ -0,0 +1,60 @@ +import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' +import { toTxResult } from '../../../utils' +import { SmartWalletFactoryContractV102 as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.2/SmartWalletFactoryContractV102' +import { Interface } from '@ethersproject/abi' +import { Contract } from '@ethersproject/contracts' + +class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { + constructor(public contract: SmartWalletFactoryContract_TypeChain) {} + + getInterface(): Interface { + return this.contract.interface + } + + getContract(): Contract { + return this.contract + } + + async isWalletExist(wallet: string): Promise { + const doesExist = await this.contract.isWalletExist(wallet) + return doesExist + } + + getAddress(): string { + return this.contract.address + } + + setAddress(address: string) { + this.contract.attach(address) + } + + async deployCounterFactualWallet( + owner: string, + entryPoint: string, + handler: string, + index: number + ): Promise { + const resultSet = await this.contract.deployCounterFactualWallet( + owner, + entryPoint, + handler, + index + ) + return toTxResult(resultSet) + } + + async deployWallet( + owner: string, + entryPoint: string, + handler: string + ): Promise { + const resultSet = await this.contract.deployWallet(owner, entryPoint, handler) + return toTxResult(resultSet) + } + + async getAddressForCounterfactualWallet(owner: string, index: number): Promise { + return this.contract.getAddressForCounterfactualWallet(owner, index) + } +} + +export default SmartWalletFactoryContractEthers diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index c9c1597a9..048047859 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -1,26 +1,34 @@ import { SmartWalletContractV100__factory as SmartWalletContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContractV100__factory' import { SmartWalletContractV101__factory as SmartWalletContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletContractV101__factory' +import { SmartWalletContractV102__factory as SmartWalletContractV102 } from '../../typechain/src/ethers-v5/v1.0.2/factories/SmartWalletContractV102__factory' import { MultiSendContractV100__factory as MultiSendContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendContractV100__factory' import { MultiSendContractV101__factory as MultiSendContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/MultiSendContractV101__factory' +import { MultiSendContractV102__factory as MultiSendContractV102 } from '../../typechain/src/ethers-v5/v1.0.2/factories/MultiSendContractV102__factory' import { MultiSendCallOnlyContractV100__factory as MultiSendCallOnlyContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendCallOnlyContractV100__factory' import { MultiSendCallOnlyContractV101__factory as MultiSendCallOnlyContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/MultiSendCallOnlyContractV101__factory' +import { MultiSendCallOnlyContractV102__factory as MultiSendCallOnlyContractV102 } from '../../typechain/src/ethers-v5/v1.0.2/factories/MultiSendCallOnlyContractV102__factory' import { SmartWalletFactoryContractV100__factory as SmartWalletFactoryContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFactoryContractV100__factory' import { SmartWalletFactoryContractV101__factory as SmartWalletFactoryContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletFactoryContractV101__factory' +import { SmartWalletFactoryContractV102__factory as SmartWalletFactoryContractV102 } from '../../typechain/src/ethers-v5/v1.0.2/factories/SmartWalletFactoryContractV102__factory' import SmartWalletContractEthers_v1_0_0 from './SmartWallet/v1.0.0/SmartWalletContractEthers' import SmartWalletContractEthers_v1_0_1 from './SmartWallet/v1.0.1/SmartWalletContractEthers' +import SmartWalletContractEthers_v1_0_2 from './SmartWallet/v1.0.2/SmartWalletContractEthers' import MultiSendEthersContract_v1_0_0 from './MultiSend/v1.0.0/MultiSendEthersContract' import MultiSendEthersContract_v1_0_1 from './MultiSend/v1.0.1/MultiSendEthersContract' +import MultiSendEthersContract_v1_0_2 from './MultiSend/v1.0.2/MultiSendEthersContract' import MultiSendCallOnlyEthersContract_v1_0_0 from './MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract' import MultiSendCallOnlyEthersContract_v1_0_1 from './MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract' +import MultiSendCallOnlyEthersContract_v1_0_2 from './MultiSendCallOnly/v1.0.2/MultiSendCallOnlyEthersContract' import SmartWalletFacoryContractEthers_v1_0_0 from './SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract' import SmartWalletFacoryContractEthers_v1_0_1 from './SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract' +import SmartWalletFacoryContractEthers_v1_0_2 from './SmartWalletFactory/v1.0.2/SmartWalletProxyFactoryEthersContract' import { JsonRpcProvider } from '@ethersproject/providers' import { SmartAccountVersion } from '@biconomy-sdk/core-types' @@ -30,7 +38,10 @@ export function getSmartWalletContractInstance( contractAddress: string, // signer: Signer provider: JsonRpcProvider -): SmartWalletContractEthers_v1_0_0 | SmartWalletContractEthers_v1_0_1 { +): + | SmartWalletContractEthers_v1_0_0 + | SmartWalletContractEthers_v1_0_1 + | SmartWalletContractEthers_v1_0_2 { let walletContract switch (smartAccountVersion) { case '1.0.0': @@ -39,6 +50,9 @@ export function getSmartWalletContractInstance( case '1.0.1': walletContract = SmartWalletContractV101.connect(contractAddress, provider) return new SmartWalletContractEthers_v1_0_1(walletContract) + case '1.0.2': + walletContract = SmartWalletContractV102.connect(contractAddress, provider) + return new SmartWalletContractEthers_v1_0_2(walletContract) } } @@ -48,7 +62,10 @@ export function getMultiSendContractInstance( contractAddress: string, // signer: Signer provider: JsonRpcProvider -): MultiSendEthersContract_v1_0_0 | MultiSendEthersContract_v1_0_1 { +): + | MultiSendEthersContract_v1_0_0 + | MultiSendEthersContract_v1_0_1 + | MultiSendEthersContract_v1_0_2 { let multiSendContract switch (smartAccountVersion) { @@ -58,6 +75,9 @@ export function getMultiSendContractInstance( case '1.0.1': multiSendContract = MultiSendContractV101.connect(contractAddress, provider) return new MultiSendEthersContract_v1_0_1(multiSendContract) + case '1.0.2': + multiSendContract = MultiSendContractV102.connect(contractAddress, provider) + return new MultiSendEthersContract_v1_0_2(multiSendContract) } } @@ -66,7 +86,7 @@ export function getMultiSendCallOnlyContractInstance( contractAddress: string, // signer: Signer provider: JsonRpcProvider -): MultiSendCallOnlyEthersContract_v1_0_0 | MultiSendCallOnlyEthersContract_v1_0_1 { +): MultiSendCallOnlyEthersContract_v1_0_0 | MultiSendCallOnlyEthersContract_v1_0_1 | MultiSendCallOnlyEthersContract_v1_0_2 { let multiSendCallContract switch (smartAccountVersion) { @@ -76,6 +96,9 @@ export function getMultiSendCallOnlyContractInstance( case '1.0.1': multiSendCallContract = MultiSendCallOnlyContractV101.connect(contractAddress, provider) return new MultiSendCallOnlyEthersContract_v1_0_1(multiSendCallContract) + case '1.0.2': + multiSendCallContract = MultiSendCallOnlyContractV102.connect(contractAddress, provider) + return new MultiSendCallOnlyEthersContract_v1_0_2(multiSendCallContract) } } @@ -83,7 +106,7 @@ export function getSmartWalletFactoryContractInstance( smartAccountVersion: SmartAccountVersion, contractAddress: string, provider: JsonRpcProvider -): SmartWalletFacoryContractEthers_v1_0_0 | SmartWalletFacoryContractEthers_v1_0_1 { +): SmartWalletFacoryContractEthers_v1_0_0 | SmartWalletFacoryContractEthers_v1_0_1 | SmartWalletFacoryContractEthers_v1_0_2 { let walletFactoryContract switch (smartAccountVersion) { @@ -93,5 +116,8 @@ export function getSmartWalletFactoryContractInstance( case '1.0.1': walletFactoryContract = SmartWalletFactoryContractV101.connect(contractAddress, provider) return new SmartWalletFacoryContractEthers_v1_0_1(walletFactoryContract) + case '1.0.2': + walletFactoryContract = SmartWalletFactoryContractV102.connect(contractAddress, provider) + return new SmartWalletFacoryContractEthers_v1_0_2(walletFactoryContract) } } diff --git a/packages/node-client/package.json b/packages/node-client/package.json index f9a93b6b7..1aeea6f4d 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.0", + "version": "1.0.3", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 8bf0a2914..3b064163d 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.0", + "version": "1.0.3", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 824d29cbc..a221e34d5 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.0", + "version": "1.0.3", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 84139cd1d..8d8d17111 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -10,6 +10,7 @@ import { findContractAddressesByVersion } from './utils/FetchContractsInfo' import { + SmartAccountVersion, ChainId, SmartAccountContext, SmartWalletFactoryContract, @@ -348,12 +349,11 @@ class SmartAccount { * @param chainId optional chainId * @returns */ - async sendTransaction( - // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + async sendTransaction( tx: WalletTransaction, batchId: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): Promise { + ): Promise { let rawTx: RawTransactionType = { to: tx.to, data: tx.data, @@ -377,7 +377,7 @@ class SmartAccount { refundReceiver: tx.refundReceiver } - let walletContract = this.smartAccount(chainId).getContract() + let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() walletContract = walletContract.attach(this.address) let signature = await this.signTransaction(tx) @@ -399,8 +399,8 @@ class SmartAccount { tx } - const txn = await this.relayer.relay(signedTx, state, this.getSmartAccountContext(chainId)) - return txn + const txn:RelayResponse = await this.relayer.relay(signedTx, state, this.getSmartAccountContext(chainId)) + return txn.hash } // Get Fee Options from relayer and make it available for display @@ -789,7 +789,7 @@ class SmartAccount { * @returns */ async createTransactionBatch(transactions: Transaction[], batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - let walletContract = this.smartAccount(chainId).getContract(); + let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract(); walletContract = walletContract.attach(this.address); // NOTE : If the wallet is not deployed yet then nonce would be zero @@ -823,29 +823,6 @@ class SmartAccount { return walletTx } - console.log('nonce: ', nonce) - - const txs: MetaTransaction[] = [] - - for (let i = 0; i < transactions.length; i++) { - const innerTx: WalletTransaction = buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) - - txs.push(innerTx) - } - - const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( - this.multiSend(chainId).getContract(), - txs, - nonce - ) - - return walletTx - } /** * diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 9a3e40233..1eb4c86b1 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.0", + "version": "1.0.3", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From 524af942e4d82f8ade008c244974dbd013c1f26d Mon Sep 17 00:00:00 2001 From: talha Date: Fri, 26 Aug 2022 14:57:20 +0500 Subject: [PATCH 0103/1247] types update --- packages/core-types/src/dto.types.ts | 0 packages/core-types/src/transaction.types.ts | 15 +++- packages/node-client/src/INodeClient.ts | 18 +++-- packages/node-client/src/NodeClient.ts | 38 +++++----- .../node-client/src/types/NodeClientTypes.ts | 30 +++++++- packages/relayer/src/index.ts | 4 +- packages/relayer/src/local-relayer.ts | 31 +++++---- packages/relayer/src/rest-relayer.ts | 25 ++++--- packages/smart-account/src/SmartAccount.ts | 69 +++++++++++++------ packages/smart-account/src/types.ts | 2 + 10 files changed, 157 insertions(+), 75 deletions(-) create mode 100644 packages/core-types/src/dto.types.ts diff --git a/packages/core-types/src/dto.types.ts b/packages/core-types/src/dto.types.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index 90fe7bfe0..1caad3053 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -1,8 +1,9 @@ import { BigNumber, BigNumberish } from '@ethersproject/bignumber' -import { OperationType } from './types' +import { OperationType, SmartAccountContext, SmartAccountState } from './types' import { PromiEvent, TransactionReceipt } from 'web3-core/types' import { ContractTransaction } from '@ethersproject/contracts' + export interface RawTransactionType { from?: string gasPrice?: string | BigNumber @@ -120,3 +121,15 @@ export interface TransactionResult extends BaseTransactionResult { transactionResponse?: ContractTransaction options?: TransactionOptions } + +export interface RelayTransaction { + signedTx: SignedTransaction, + config: SmartAccountState, + context: SmartAccountContext +} + +export interface DeployWallet { + config: SmartAccountState + context: SmartAccountContext + index:number +} \ No newline at end of file diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index eb4192af5..c43db4c6c 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -1,6 +1,11 @@ -import { FeeRefundData, MetaTransactionData } from '@biconomy-sdk/core-types' +import { FeeRefund, MetaTransactionData } from '@biconomy-sdk/core-types' import { Signer } from '@ethersproject/abstract-signer' import { + EstimateExternalGasDto, + EstimateRequiredTxGasDto, + EstimateHandlePaymentTxGasDto, + SmartAccountByOwnerDto, + TokenByChainIdAndAddressDto, TokenPriceResponse, SupportedChainsResponse, individualChainResponse, @@ -26,23 +31,22 @@ interface INodeClient { getAllTokens(): Promise getTokensByChainId(chainId: number): Promise getTokenByChainIdAndAddress( - chainId: number, - tokenAddress: string + tokenByChainIdAndAddressDto: TokenByChainIdAndAddressDto ): Promise // Smart Account Endpoints - getSmartAccountsByOwner(chainId: number, owner: string): Promise + getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise getAlltokenBalances(balancesDto: BalancesDto): Promise getTotalBalanceInUsd(balancesDto: BalancesDto): Promise - estimateExternalGas(chainId: number, encodedData: string): Promise + estimateExternalGas(estimateExternalGasDto: EstimateExternalGasDto): Promise - estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise + estimateRequiredTxGas(estimateRequiredTxGasDto: EstimateRequiredTxGasDto): Promise - estimateHandlePaymentGas(chainId: number, estimatorAddress: string, feeRefund: FeeRefundData): Promise + estimateHandlePaymentGas(estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto): Promise } export default INodeClient diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index d3a8f8b70..7f29b6c3d 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -1,5 +1,10 @@ import INodeClient from './INodeClient' import { + EstimateExternalGasDto, + EstimateRequiredTxGasDto, + EstimateHandlePaymentTxGasDto, + SmartAccountByOwnerDto, + TokenByChainIdAndAddressDto, TokenPriceResponse, SupportedChainsResponse, individualChainResponse, @@ -13,7 +18,7 @@ import { } from './types/NodeClientTypes' import { getTxServiceBaseUrl } from './utils' import { HttpMethod, sendRequest } from './utils/httpRequests' -import { MetaTransactionData, FeeRefundData } from '@biconomy-sdk/core-types' +import { MetaTransactionData, FeeRefund } from '@biconomy-sdk/core-types' export interface NodeClientConfig { /** txServiceUrl - Safe Transaction Service URL */ txServiceUrl: string @@ -84,16 +89,17 @@ class NodeClient implements INodeClient { } async getTokenByChainIdAndAddress( - chainId: number, - tokenAddress: string + tokenByChainIdAndAddressDto: TokenByChainIdAndAddressDto ): Promise { + const { chainId, tokenAddress} = tokenByChainIdAndAddressDto return sendRequest({ url: `${this.#txServiceBaseUrl}/tokens/chainId/${chainId}/address/${tokenAddress}`, method: HttpMethod.Get }) } - async getSmartAccountsByOwner(chainId: number, owner: string): Promise { + async getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise { + const { chainId, owner } = smartAccountByOwnerDto return sendRequest({ url: `${this.#txServiceBaseUrl}/smart-accounts/chainId/${chainId}/owner/${owner}`, method: HttpMethod.Get @@ -115,36 +121,26 @@ class NodeClient implements INodeClient { body: balancesDto }) } - async estimateExternalGas(chainId: number, encodedData: string): Promise { + + async estimateExternalGas(estimateExternalGasDto: EstimateExternalGasDto): Promise{ return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/external`, method: HttpMethod.Post, - body: { - chainId, - encodedData - } + body: estimateExternalGasDto }) } - async estimateRequiredTxGas(chainId: number, walletAddress: string, transaction: MetaTransactionData): Promise { + async estimateRequiredTxGas(estimateRequiredTxGasDto: EstimateRequiredTxGasDto): Promise{ return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/required`, method: HttpMethod.Post, - body: { - chainId, - walletAddress, - transaction - } + body: estimateRequiredTxGasDto }) } - async estimateHandlePaymentGas(chainId: number, walletAddress: string, feeRefund: FeeRefundData): Promise { + estimateHandlePaymentGas(estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto): Promise{ return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/handle-payment`, method: HttpMethod.Post, - body: { - chainId, - walletAddress, - feeRefund - } + body: estimateHandlePaymentTxGasDto }) } } diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index 459df5c63..882336b9a 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -1,4 +1,4 @@ -import { ChainId, SmartAccountVersion } from '@biconomy-sdk/core-types' +import { ChainId, SmartAccountVersion, MetaTransactionData, FeeRefund } from '@biconomy-sdk/core-types' export type SmartAccountInfoResponse = { readonly name: string readonly version: string @@ -23,6 +23,34 @@ export type BalancesDto = { tokenAddresses: string[] } +export type EstimateExternalGasDto = { + chainId: number + encodedData: string +} + +export type EstimateRequiredTxGasDto = { + chainId: number + walletAddress: string + transaction: MetaTransactionData +} + +export type EstimateHandlePaymentTxGasDto = { + chainId: number + walletAddress: string + feeRefundData: FeeRefund +} + +export type SmartAccountByOwnerDto = { + chainId: number, + owner: string +} + +export type TokenByChainIdAndAddressDto = { + chainId: number, + tokenAddress: string +} + + export type ContractDetails = { version: SmartAccountVersion diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index 16400faeb..bef2eab44 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -1,13 +1,13 @@ import { TransactionResponse } from '@ethersproject/providers' import { SignedTransaction, SmartAccountState, SmartAccountContext, FeeOptionsResponse } from '@biconomy-sdk/core-types' -import { RelayResponse } from '@biconomy-sdk/core-types' +import { RelayTransaction, RelayResponse } from '@biconomy-sdk/core-types' export interface Relayer { // relayer will submit the transaction(s) to the network and return the transaction response. // The quote should be the one returned from getFeeOptions, if any. /*quote?: FeeQuote*/ getFeeOptions(chainId: number): Promise - relay(rawTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext): Promise + relay(relayTransaction: RelayTransaction): Promise // wait for transaction confirmation // wait(metaTxnId: string | SignedTransactions, timeout: number): Promise } diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index ed2a52ae6..cfe9582d3 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -3,11 +3,10 @@ import { Signer as AbstractSigner, ethers } from 'ethers' import { Relayer } from '.' import { - SmartAccountContext, - SmartAccountState, - SignedTransaction, + DeployWallet, WalletTransaction, FeeOptionsResponse, + RelayTransaction, RelayResponse } from '@biconomy-sdk/core-types' import { MetaTransaction, encodeMultiSend } from './utils/multisend' @@ -27,19 +26,18 @@ export class LocalRelayer implements Relayer { // Could get smartAccount instance // Defines a type that takes config, context for SCW in play along with other details async deployWallet( - config: SmartAccountState, - context: SmartAccountContext, - index: number = 0 + deployWallet: DeployWallet ): Promise { // Should check if already deployed //Review for index and ownership transfer case + const { config, context, index = 0 } = deployWallet const { address } = config const { walletFactory } = context const isExist = await walletFactory.isWalletExist(address) if (isExist) { throw new Error('Smart Account is Already Deployed') } - const walletDeployTxn = this.prepareWalletDeploy(config, context, index) + const walletDeployTxn = this.prepareWalletDeploy({config, context, index}) const tx = this.signer.sendTransaction({ ...walletDeployTxn, gasLimit: ethers.constants.Two.pow(24) @@ -48,12 +46,11 @@ export class LocalRelayer implements Relayer { } prepareWalletDeploy( - // owner, entryPoint, handler, index - config: SmartAccountState, - context: SmartAccountContext, - index: number = 0 + deployWallet: DeployWallet // context: WalletContext ): { to: string; data: string } { + const { config, context, index = 0 } = deployWallet + const { walletFactory } = context const { owner, entryPointAddress, fallbackHandlerAddress } = config const factoryInterface = walletFactory.getInterface() @@ -88,16 +85,20 @@ export class LocalRelayer implements Relayer { // Appending tx and rawTx may not be necessary async relay( - signedTx: SignedTransaction, - config: SmartAccountState, - context: SmartAccountContext + relayTransaction: RelayTransaction ): Promise { + const { config, signedTx, context } = relayTransaction const { isDeployed, address } = config const { multiSendCall } = context // multisend has to be multiSendCallOnly here! if (!isDeployed) { // If not =>> preprendWalletDeploy console.log('here') - const { to, data } = this.prepareWalletDeploy(config, context) + const prepareWalletDeploy: DeployWallet = { + config, + context, + index: 0 + } + const { to, data } = this.prepareWalletDeploy(prepareWalletDeploy) const originalTx: WalletTransaction = signedTx.tx const txs: MetaTransaction[] = [ diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 2a7c73806..1b091cf31 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -8,6 +8,8 @@ import { MultiSendContract, MultiSendCallOnlyContract, TransactionResult, + RelayTransaction, + DeployWallet, SmartAccountContext, SmartAccountState, SignedTransaction, @@ -35,16 +37,17 @@ export class RestRelayer implements Relayer { // Review function arguments and return values // Could get smartAccount instance // Defines a type that takes config, context for SCW in play along with other details - async deployWallet(config: SmartAccountState, context: SmartAccountContext, index:number = 0): Promise { + async deployWallet(deployWallet: DeployWallet): Promise { // Should check if already deployed //Review for index and ownership transfer case + const { config, context, index = 0 } = deployWallet const {address} = config; const {walletFactory} = context; const isExist = await walletFactory.isWalletExist(address); if(isExist) { throw new Error("Smart Account is Already Deployed") } - const walletDeployTxn = this.prepareWalletDeploy(config, context, index); + const walletDeployTxn = this.prepareWalletDeploy(deployWallet); // REST API call to relayer return sendRequest({ url: `${this.#relayServiceBaseUrl}`, @@ -54,11 +57,10 @@ export class RestRelayer implements Relayer { } prepareWalletDeploy( // owner, entryPoint, handler, index - config:SmartAccountState, - context: SmartAccountContext, - index: number = 0, + deployWallet: DeployWallet // context: WalletContext ): { to: string, data: string} { + const { config, context, index = 0 } = deployWallet const {walletFactory} = context; const {owner, entryPointAddress, fallbackHandlerAddress} = config; const factoryInterface = walletFactory.getInterface(); @@ -91,14 +93,21 @@ export class RestRelayer implements Relayer { // Add feeQuote later // Appending tx and rawTx may not be necessary - async relay(signedTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext) : Promise { - + async relay( + relayTransaction: RelayTransaction + ): Promise { + const { config, signedTx, context } = relayTransaction const { isDeployed, address } = config; const { multiSendCall } = context; // multisend has to be multiSendCallOnly here! if(!isDeployed) { // If not =>> preprendWalletDeploy console.log('here'); - const {to, data} = this.prepareWalletDeploy(config,context); + const prepareWalletDeploy: DeployWallet = { + config, + context, + index: 0 + } + const {to, data} = this.prepareWalletDeploy(prepareWalletDeploy); const originalTx:WalletTransaction = signedTx.tx; const txs: MetaTransaction[] = [ diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 5a3dfd451..f68669245 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -11,6 +11,7 @@ import { } from './utils/FetchContractsInfo' import { ExecTransaction, + RelayTransaction, FeeRefund, WalletTransaction, SmartAccountVersion, @@ -34,7 +35,7 @@ import { RelayResponse } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' -import NodeClient, { ChainConfig, SupportedChainsResponse } from '@biconomy-sdk/node-client' +import NodeClient, { ChainConfig, SupportedChainsResponse, EstimateExternalGasDto, EstimateRequiredTxGasDto, EstimateHandlePaymentTxGasDto} from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' import { Relayer } from '@biconomy-sdk/relayer' import { @@ -107,7 +108,7 @@ class SmartAccount { /**Constrcutor for the Smart Account. If config is not provided it makes Smart Contract available using default configuration * If you wish to use your own backend server and relayer service, pass the URLs here */ - constructor(walletProvider: Web3Provider, config?: Partial) { + constructor(walletProvider: Web3Provider, config?: Partial) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } if (config) { this.#smartAccountConfig = { ...this.#smartAccountConfig, ...config } @@ -236,7 +237,6 @@ class SmartAccount { * @returns */ private async getAddressForCounterfactualWallet( - // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { @@ -274,14 +274,14 @@ class SmartAccount { return this.nodeClient.getTotalBalanceInUsd(balancesDto) } - public async estimateExternalGas(chainId: number, encodedData: string): Promise { - return this.nodeClient.estimateExternalGas(chainId, encodedData) + public async estimateExternalGas(estimateExternalGasDto: EstimateExternalGasDto): Promise{ + return this.nodeClient.estimateExternalGas(estimateExternalGasDto) } - public async estimateRequiredTxGas(chainId: number, walletAddress: string, transaction: MetaTransactionData): Promise { - return this.nodeClient.estimateRequiredTxGas(chainId, walletAddress, transaction) + public async estimateRequiredTxGas(estimateRequiredTxGasDto: EstimateRequiredTxGasDto): Promise{ + return this.nodeClient.estimateRequiredTxGas(estimateRequiredTxGasDto) } - public async estimateHandlePaymentGas(chainId: number, walletAddress: string, feeRefundData: FeeRefundData): Promise { - return this.nodeClient.estimateHandlePaymentGas(chainId, walletAddress, feeRefundData) + public async estimateHandlePaymentGas(estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto): Promise{ + return this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentTxGasDto) } @@ -329,7 +329,6 @@ class SmartAccount { * @returns:string Signature */ async signTransaction( - // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, tx: WalletTransaction, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { @@ -401,8 +400,12 @@ class SmartAccount { rawTx, tx } - - const txn:RelayResponse = await this.relayer.relay(signedTx, state, this.getSmartAccountContext(chainId)) + const relayTrx: RelayTransaction = { + signedTx, + config: state, + context: this.getSmartAccountContext(chainId) + } + const txn:RelayResponse = await this.relayer.relay(relayTrx) return txn.hash } @@ -556,13 +559,18 @@ class SmartAccount { operation: OperationType.Call } console.log(internalTx); - const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); + const connectedWallet = this.address + const estimateRequiredTxGas: EstimateRequiredTxGasDto = { + chainId, + walletAddress: connectedWallet, + transaction: internalTx} + const response = await this.estimateRequiredTxGas(estimateRequiredTxGas); const gasEstimate1 = Number(response.data.gas) + 50000 // review // check safeServiceClient console.log('required txgas estimate ', gasEstimate1); // Depending on feeToken provide baseGas! - const refundDetails: FeeRefundData = { + const refundDetails: FeeRefund = { gasUsed: gasEstimate1, baseGas: gasEstimate1, gasPrice: feeQuote.tokenGasPrice, @@ -571,7 +579,12 @@ class SmartAccount { refundReceiver: ZERO_ADDRESS } - const handlePaymentResponse = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails); + const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { + chainId, + walletAddress: connectedWallet, + feeRefundData: refundDetails} + + const handlePaymentResponse = await this.estimateHandlePaymentGas(estimateHandlePaymentGas); let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) console.log('handle payment estimate ', handlePaymentEstimate); @@ -651,7 +664,8 @@ class SmartAccount { batchId:number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let walletContract = this.smartAccount(chainId).getContract(); - walletContract = walletContract.attach(this.address); + const connectedWallet = this.address + walletContract = walletContract.attach(connectedWallet); let additionalBaseGas = 0; @@ -677,7 +691,9 @@ class SmartAccount { ]) console.log('encodedEstimate ', encodedEstimateData) - const deployCostresponse = await this.estimateExternalGas(chainId, encodedEstimateData); + const estimateExternalGas: EstimateExternalGasDto = {chainId, encodedData: encodedEstimateData} + + const deployCostresponse = await this.estimateExternalGas(estimateExternalGas); const estimateWalletDeployment = Number(deployCostresponse.data.gas); console.log('estimateWalletDeployment ', estimateWalletDeployment); @@ -721,7 +737,14 @@ class SmartAccount { console.log(internalTx); // TODO // Currently we can't do these estimations without wallet being deployed... - const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); + + const estimateRequiredTxGas: EstimateRequiredTxGasDto = { + chainId, + walletAddress: connectedWallet, + transaction: internalTx + } + + const response = await this.estimateRequiredTxGas(estimateRequiredTxGas); // If we get this reponse zero, there has to be a way to estimate this fror undeployed wallet // i. use really high value @@ -735,7 +758,7 @@ class SmartAccount { console.log('feeQuote.offset ', feeQuote.offset); - const refundDetails: FeeRefundData = { + const refundDetails: FeeRefund = { gasUsed: gasEstimate1, baseGas: gasEstimate1, gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review @@ -743,8 +766,14 @@ class SmartAccount { gasToken: feeQuote.address, refundReceiver: ZERO_ADDRESS } + + const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { + chainId, + walletAddress: connectedWallet, + feeRefundData: refundDetails + } - const handlePaymentResponse = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails); + const handlePaymentResponse = await this.estimateHandlePaymentGas(estimateHandlePaymentGas); // If we get this reponse zero, there has to be a way to estimate this for undeployed wallet // We could use constant value provided by the relayer let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 0e3d5dca6..63d9af4a3 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -3,6 +3,8 @@ import { ChainNames, ChainId, } from '@biconomy-sdk/core-types' +import { Web3Provider } from '@ethersproject/providers' + // walletProvider: WalletProviderLike // TODO : Ability to provide custom URLs for all supported networks export interface SmartAccountConfig { From 1c017c7d29ef0a8117c4caecdc17eeab506018b1 Mon Sep 17 00:00:00 2001 From: talha Date: Fri, 26 Aug 2022 17:09:36 +0500 Subject: [PATCH 0104/1247] smart account changes --- packages/core-types/src/dto.types.ts | 0 packages/core-types/src/index.ts | 1 + .../core-types/src/smart-account.types.ts | 57 ++++++++++++++ packages/smart-account/src/SmartAccount.ts | 78 ++++++++++--------- 4 files changed, 99 insertions(+), 37 deletions(-) delete mode 100644 packages/core-types/src/dto.types.ts create mode 100644 packages/core-types/src/smart-account.types.ts diff --git a/packages/core-types/src/dto.types.ts b/packages/core-types/src/dto.types.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts index 845714e5b..2e4411586 100644 --- a/packages/core-types/src/index.ts +++ b/packages/core-types/src/index.ts @@ -7,3 +7,4 @@ export * from './ethereumLibs/EthAdapter' export * from './types' export * from './chains.types' export * from './transaction.types' +export * from './smart-account.types' diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts new file mode 100644 index 000000000..37699bd97 --- /dev/null +++ b/packages/core-types/src/smart-account.types.ts @@ -0,0 +1,57 @@ +// Smart Account Detail Param Types + +import { ChainId } from './chains.types' +import { WalletTransaction, Transaction } from './transaction.types' +import { FeeQuote } from './types' +export type AddressForCounterFactualWalletDto = { + index: number + chainId: ChainId +} + +export type SignTransactionDto = { + tx: WalletTransaction, + chainId: ChainId +} + +export type SendTransactionDto = { + tx: WalletTransaction + batchId: number + chainId: ChainId +} + +export type PrepareTransactionDto = { + transaction: Transaction + batchId: number + chainId: ChainId +} + +export type PrepareRefundTransactionDto = { + transaction: Transaction[] + batchId: number + chainId: ChainId +} + +export type RefundTransactionDto = { + transaction: Transaction + feeQuote: FeeQuote + batchId: number + chainId: ChainId +} +export type RefundTransactionBatchDto = { + transactions: Transaction[] + feeQuote: FeeQuote + batchId: number + chainId: ChainId +} + +export type TransactionDto = { + transaction: Transaction + batchId: number + chainId: ChainId +} + +export type TransactionBatchDto = { + transaction: Transaction + batchId: number + chainId: ChainId +} \ No newline at end of file diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index f68669245..5c7590e44 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -10,6 +10,15 @@ import { findContractAddressesByVersion } from './utils/FetchContractsInfo' import { + AddressForCounterFactualWalletDto, + SignTransactionDto, + SendTransactionDto, + PrepareTransactionDto, + PrepareRefundTransactionDto, + RefundTransactionDto, + RefundTransactionBatchDto, + TransactionDto, + TransactionBatchDto, ExecTransaction, RelayTransaction, FeeRefund, @@ -237,9 +246,9 @@ class SmartAccount { * @returns */ private async getAddressForCounterfactualWallet( - index: number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId + addressForCounterFactualWalletDto: AddressForCounterFactualWalletDto ): Promise { + const {index = 0 , chainId = this.#smartAccountConfig.activeNetworkId } = addressForCounterFactualWalletDto console.log('index and ChainId ', index, chainId, this.DEFAULT_VERSION) console.log( 'Instance to this is ', @@ -329,9 +338,9 @@ class SmartAccount { * @returns:string Signature */ async signTransaction( - tx: WalletTransaction, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId + signTransactionDto: SignTransactionDto ): Promise { + const { chainId = this.#smartAccountConfig.activeNetworkId, tx } = signTransactionDto let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) @@ -351,10 +360,9 @@ class SmartAccount { * @returns */ async sendTransaction( - tx: WalletTransaction, - batchId: number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId + sendTransactionDto: SendTransactionDto ): Promise { + const { tx, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = sendTransactionDto let rawTx: RawTransactionType = { to: tx.to, data: tx.data, @@ -418,9 +426,10 @@ class SmartAccount { * @param chainId */ async prepareRefundTransaction( - transaction: Transaction, - batchId: number = 0, // may not be necessary - chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + prepareTransactionDto: PrepareTransactionDto + ): Promise { + + const { transaction, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = prepareTransactionDto const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; @@ -430,7 +439,7 @@ class SmartAccount { // 2. If wallet is not deployed (batch wallet deployment on multisend) // actual estimation with dummy sig // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth - const estimatedGasUsed: number = await this.estimateTransaction(transaction, batchId, chainId); + const estimatedGasUsed: number = await this.estimateTransaction({transaction, batchId, chainId}); feeOptionsAvailable.forEach((feeOption) => { const tokenGasPrice = feeOption.tokenGasPrice || 0; @@ -462,10 +471,10 @@ class SmartAccount { * @param chainId */ async prepareRefundTransactionBatch( - transactions: Transaction[], - batchId: number = 0, // may not be necessary - chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + prepareRefundTransactionDto: PrepareRefundTransactionDto + ): Promise { + const { transactions, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId} = prepareRefundTransactionDto const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; let feeQuotes: Array = []; @@ -474,7 +483,7 @@ class SmartAccount { // 2. If wallet is not deployed (batch wallet deployment on multisend) // actual estimation with dummy sig // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth - const estimatedGasUsed: number = await this.estimateTransactionBatch(transactions, batchId, chainId); + const estimatedGasUsed: number = await this.estimateTransactionBatch({ transactions, batchId, chainId }); feeOptionsAvailable.forEach((feeOption) => { const tokenGasPrice = feeOption.tokenGasPrice || 0; @@ -498,27 +507,26 @@ class SmartAccount { } async estimateTransactionBatch( - transactions: Transaction[], - batchId: number = 0, // may not be necessary - chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + prepareRefundTransactionDto: PrepareRefundTransactionDto + ): Promise { + const { transaction, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId} = prepareRefundTransactionDto // eth_call api method let estimatedGasUsed = 435318; - console.log('transactions ', transactions); + console.log('transactions ', transaction); console.log('batchId ', batchId); console.log('chainId ', chainId); return estimatedGasUsed; } - async estimateTransaction(transaction: Transaction, - batchId: number = 0, // may not be necessary - chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + async estimateTransaction(prepareTransactionDto: PrepareTransactionDto): Promise { // eth_call api method + const { transaction, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = prepareTransactionDto let estimatedGasUsed = 435318; console.log('transaction ', transaction); console.log('batchId ', batchId); console.log('chainId ', chainId); return estimatedGasUsed; - } + } // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions @@ -534,11 +542,9 @@ class SmartAccount { * @returns */ async createRefundTransaction( - transaction: Transaction, - feeQuote: FeeQuote, - batchId: number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId + refundTransactionDto: RefundTransactionDto ): Promise { + const { transaction, feeQuote, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = refundTransactionDto let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) @@ -623,10 +629,9 @@ class SmartAccount { * @returns */ async createTransaction( - transaction: Transaction, - batchId: number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId + transactionDto: TransactionDto ): Promise { + const { transaction, batchId = 0 , chainId = this.#smartAccountConfig.activeNetworkId } = transactionDto let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) @@ -659,10 +664,9 @@ class SmartAccount { * @returns */ async createRefundTransactionBatch( - transactions: Transaction[], - feeQuote: FeeQuote, - batchId:number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + refundTransactionBatchDto: RefundTransactionBatchDto + ): Promise { + const { transactions, feeQuote, batchId = 0 , chainId = this.#smartAccountConfig.activeNetworkId} = refundTransactionBatchDto let walletContract = this.smartAccount(chainId).getContract(); const connectedWallet = this.address walletContract = walletContract.attach(connectedWallet); @@ -820,7 +824,8 @@ class SmartAccount { * @param chainId * @returns */ - async createTransactionBatch(transactions: Transaction[], batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + async createTransactionBatch(transactionBatchDto: TransactionBatchDto): Promise { + const { transactions, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = transactionBatchDto let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract(); walletContract = walletContract.attach(this.address); @@ -862,7 +867,6 @@ class SmartAccount { * @returns Smart Wallet Contract instance attached with current smart account address (proxy) */ smartAccount( - // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): SmartWalletContract { const smartWallet = this.smartWalletContract[chainId][this.DEFAULT_VERSION] @@ -925,7 +929,7 @@ class SmartAccount { chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { // we will hit smart account endpoint to fetch deployed smart account info - const address = await this.getAddressForCounterfactualWallet(index, chainId) + const address = await this.getAddressForCounterfactualWallet({index, chainId}) this.address = address return address // return await this.getAddressForCounterfactualWallet(index,chainId); From af1b08bc4f3a1180f5e9538bef5c45f6dc504625 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 26 Aug 2022 16:30:35 +0400 Subject: [PATCH 0105/1247] check up test case update --- packages/smart-account/tests/smartaccount.spec.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 5432741ff..4339332f4 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -513,12 +513,12 @@ describe('Wallet integration', function () { const relayer = new LocalRelayer(eoaSigner) smartAccount.setRelayer(relayer) expect(smartAccount.relayer).to.be.equal(relayer) - const response: TransactionResponse = await smartAccount.sendTransaction( + const hash: string = await smartAccount.sendTransaction( smartAccountTransaction ) - const receipt: TransactionReceipt = await response.wait(1) - expect(receipt.status).to.be.equal(1) + //const receipt: TransactionReceipt = await response.wait(1) + //expect(receipt.status).to.be.equal(1) console.log('balance after ', await ethnode.provider?.getBalance(smartAccountAddress)) expect((await ethnode.provider?.getBalance(smartAccountAddress))?.toString()).to.be.equal( ethers.utils.parseEther('0.5').toString() @@ -586,12 +586,13 @@ describe('Wallet integration', function () { const relayer = new LocalRelayer(eoaSigner) smartAccount.setRelayer(relayer) expect(smartAccount.relayer).to.be.equal(relayer) - const response: TransactionResponse = await smartAccount.sendTransaction( + const txHash: string = await smartAccount.sendTransaction( smartAccountTransaction ) - const receipt: TransactionReceipt = await response.wait(1) - expect(receipt.status).to.be.equal(1) + // TODO : get receipt from hash using provider + // const receipt: TransactionReceipt = await response.wait(1) + // expect(receipt.status).to.be.equal(1) console.log('balance after ', await ethnode.provider?.getBalance(smartAccountAddress)) expect((await ethnode.provider?.getBalance(smartAccountAddress))?.toString()).to.be.equal( ethers.utils.parseEther('0.5').toString() From 8013d0e6b4931084042c9584f1f82b45015ffab0 Mon Sep 17 00:00:00 2001 From: talha Date: Fri, 26 Aug 2022 17:38:50 +0500 Subject: [PATCH 0106/1247] smart account dtos update --- packages/core-types/src/smart-account.types.ts | 4 ++-- packages/smart-account/src/SmartAccount.ts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 37699bd97..3d49f72d4 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -26,7 +26,7 @@ export type PrepareTransactionDto = { } export type PrepareRefundTransactionDto = { - transaction: Transaction[] + transactions: Transaction[] batchId: number chainId: ChainId } @@ -51,7 +51,7 @@ export type TransactionDto = { } export type TransactionBatchDto = { - transaction: Transaction + transactions: Transaction[] batchId: number chainId: ChainId } \ No newline at end of file diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 5c7590e44..c0b192f53 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -142,7 +142,7 @@ class SmartAccount { * @param smartAccountVersion * @description // set wallet version to be able to interact with different deployed versions */ - setWalletVersion(smartAccountVersion: SmartAccountVersion) { + setSmartAccountVersion(smartAccountVersion: SmartAccountVersion) { this.DEFAULT_VERSION = smartAccountVersion } @@ -390,7 +390,7 @@ class SmartAccount { let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() walletContract = walletContract.attach(this.address) - let signature = await this.signTransaction(tx) + let signature = await this.signTransaction({tx, chainId}) let execTransaction = await walletContract.populateTransaction.execTransaction( transaction, @@ -509,10 +509,10 @@ class SmartAccount { async estimateTransactionBatch( prepareRefundTransactionDto: PrepareRefundTransactionDto ): Promise { - const { transaction, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId} = prepareRefundTransactionDto + const { transactions, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId} = prepareRefundTransactionDto // eth_call api method let estimatedGasUsed = 435318; - console.log('transactions ', transaction); + console.log('transactions ', transactions); console.log('batchId ', batchId); console.log('chainId ', chainId); return estimatedGasUsed; From d86592c68fc646728cca0f26666b0dbca491ab67 Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 29 Aug 2022 11:26:31 +0400 Subject: [PATCH 0107/1247] error fixes --- packages/core-types/src/smart-account.types.ts | 2 +- packages/smart-account/src/SmartAccount.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 37699bd97..9ce6c357b 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -51,7 +51,7 @@ export type TransactionDto = { } export type TransactionBatchDto = { - transaction: Transaction + transactions: Transaction[] batchId: number chainId: ChainId } \ No newline at end of file diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 5c7590e44..8fa82c125 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -390,7 +390,7 @@ class SmartAccount { let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() walletContract = walletContract.attach(this.address) - let signature = await this.signTransaction(tx) + let signature = await this.signTransaction({tx, chainId}) let execTransaction = await walletContract.populateTransaction.execTransaction( transaction, @@ -474,7 +474,7 @@ class SmartAccount { prepareRefundTransactionDto: PrepareRefundTransactionDto ): Promise { - const { transactions, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId} = prepareRefundTransactionDto + const { transaction, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId} = prepareRefundTransactionDto const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; let feeQuotes: Array = []; @@ -483,7 +483,7 @@ class SmartAccount { // 2. If wallet is not deployed (batch wallet deployment on multisend) // actual estimation with dummy sig // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth - const estimatedGasUsed: number = await this.estimateTransactionBatch({ transactions, batchId, chainId }); + const estimatedGasUsed: number = await this.estimateTransactionBatch({ transaction, batchId, chainId }); feeOptionsAvailable.forEach((feeOption) => { const tokenGasPrice = feeOption.tokenGasPrice || 0; From 844840ec30313ac9bd5adb87a4de47521e1ac782 Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 29 Aug 2022 11:58:07 +0400 Subject: [PATCH 0108/1247] v3 shifted to v2, compilation issue and some structs removal --- packages/core-types/src/types.ts | 8 -------- packages/ethers-lib/contracts/V1.0.2.sol | 10 +++++----- packages/ethers-lib/package.json | 2 +- packages/smart-account/src/SmartAccount.ts | 5 ++--- 4 files changed, 8 insertions(+), 17 deletions(-) diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 9e46d6c5c..dd56be445 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -24,14 +24,6 @@ export interface SmartAccountState { entryPointAddress: string fallbackHandlerAddress: string } -export interface FeeRefundData { - readonly gasUsed: number - readonly baseGas: number - readonly gasPrice: number - readonly tokenGasPriceFactor: string | number - readonly gasToken: string - readonly refundReceiver: string -} export interface Eip3770Address { prefix: string address: string diff --git a/packages/ethers-lib/contracts/V1.0.2.sol b/packages/ethers-lib/contracts/V1.0.2.sol index e5594fb4c..e10a206d8 100644 --- a/packages/ethers-lib/contracts/V1.0.2.sol +++ b/packages/ethers-lib/contracts/V1.0.2.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity >=0.4.0 <=0.8.15; -import { WalletFactory } from "scw-contracts-v1.0.3/contracts/smart-contract-wallet/WalletFactory.sol"; -import { SmartWallet } from "scw-contracts-v1.0.3/contracts/smart-contract-wallet/SmartWallet.sol"; -import { MultiSend } from "scw-contracts-v1.0.3/contracts/smart-contract-wallet/libs/MultiSend.sol"; -import { MultiSendCallOnly } from "scw-contracts-v1.0.3/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; -import { EntryPoint } from "scw-contracts-v1.0.3/contracts/references/aa-4337/EntryPoint.sol"; +import { WalletFactory } from "scw-contracts-v1.0.2/contracts/smart-contract-wallet/WalletFactory.sol"; +import { SmartWallet } from "scw-contracts-v1.0.2/contracts/smart-contract-wallet/SmartWallet.sol"; +import { MultiSend } from "scw-contracts-v1.0.2/contracts/smart-contract-wallet/libs/MultiSend.sol"; +import { MultiSendCallOnly } from "scw-contracts-v1.0.2/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; +import { EntryPoint } from "scw-contracts-v1.0.2/contracts/references/aa-4337/EntryPoint.sol"; contract SmartWalletFactoryContract_v1_0_2 is WalletFactory { constructor(address _defaultImpl) WalletFactory(_defaultImpl){} diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index cb84d41b4..2d2ea40dd 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -47,7 +47,7 @@ "@openzeppelin/contracts": "^4.6.0", "scw-contracts-v1.0.0": "npm:scw-contracts@1.0.0", "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.1", - "scw-contracts-v1.0.3": "npm:scw-contracts@1.0.3" + "scw-contracts-v1.0.2": "npm:scw-contracts@1.0.2" }, "peerDependencies": { "ethers": "^5.5.3" diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 20ccd8dee..79a39774d 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -36,7 +36,6 @@ import { MetaTransactionData, MetaTransaction, OperationType, - FeeRefundData, TokenData, FeeQuote, FeeOptionsResponse, @@ -474,7 +473,7 @@ class SmartAccount { prepareRefundTransactionDto: PrepareRefundTransactionDto ): Promise { - const { transaction, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId} = prepareRefundTransactionDto + const { transactions, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId} = prepareRefundTransactionDto const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; let feeQuotes: Array = []; @@ -483,7 +482,7 @@ class SmartAccount { // 2. If wallet is not deployed (batch wallet deployment on multisend) // actual estimation with dummy sig // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth - const estimatedGasUsed: number = await this.estimateTransactionBatch({ transaction, batchId, chainId }); + const estimatedGasUsed: number = await this.estimateTransactionBatch({ transactions, batchId, chainId }); feeOptionsAvailable.forEach((feeOption) => { const tokenGasPrice = feeOption.tokenGasPrice || 0; From 35e24fd968d1a0dc9bedd394787c18e8afd28bed Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 29 Aug 2022 12:05:10 +0400 Subject: [PATCH 0109/1247] plug estimation api using eth_call and no auth bytecode --- packages/node-client/src/INodeClient.ts | 2 ++ packages/node-client/src/NodeClient.ts | 14 ++++++++++++++ packages/smart-account/src/SmartAccount.ts | 7 +++++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index eb4192af5..bce3b94d7 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -43,6 +43,8 @@ interface INodeClient { estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise estimateHandlePaymentGas(chainId: number, estimatorAddress: string, feeRefund: FeeRefundData): Promise + + estimateUndeployedContractGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData, feeRefund: FeeRefundData, signature: string): Promise } export default INodeClient diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index d3a8f8b70..8c49ccb66 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -147,6 +147,20 @@ class NodeClient implements INodeClient { } }) } + + async estimateUndeployedContractGas(chainId: number, walletAddress: string, transaction: MetaTransactionData, feeRefund: FeeRefundData, signature:string): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/estimator/undeployed`, + method: HttpMethod.Post, + body: { + chainId, + walletAddress, + transaction, + feeRefund, + signature + } + }) + } } export default NodeClient diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index c1d46ea24..bc1cc7bad 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -217,6 +217,9 @@ class SmartAccount { public async estimateHandlePaymentGas(chainId: number, walletAddress: string, feeRefundData: FeeRefundData): Promise { return this.nodeClient.estimateHandlePaymentGas(chainId, walletAddress, feeRefundData) } + public async estimateUndeployedContractGas(chainId: number, walletAddress: string, transaction: MetaTransactionData, feeRefundData: FeeRefundData, signature: string): Promise { + return this.nodeClient.estimateUndeployedContractGas(chainId, walletAddress, transaction, feeRefundData, signature) + } // return adapter instance to be used for blockchain interactions @@ -513,7 +516,7 @@ class SmartAccount { handlePaymentEstimate = 22900 } console.log('handlePaymentEstimate ', handlePaymentEstimate); - const baseGas = 22900 + 4928 + 2360; // delegate call + event emission + state updates + const baseGas = handlePaymentEstimate + 4928 + 2360; // delegate call + event emission + state updates const walletTx: WalletTransaction = buildSmartAccountTransaction({ to: transaction.to, @@ -688,7 +691,7 @@ class SmartAccount { // If the wallet deployment has to be appended then baseGas would change const regularOffSet = 4928 + 2360; - const baseGas = 22900 + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment + const baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment const finalWalletTx: WalletTransaction = buildSmartAccountTransaction({ to: walletTx.to, From 37aaa81d74dea2fd5c968bf91346136c8d027f6a Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 29 Aug 2022 12:38:56 +0400 Subject: [PATCH 0110/1247] refactor --- packages/smart-account/src/SmartAccount.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index bc1cc7bad..6fb6922d7 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -891,9 +891,6 @@ class SmartAccount { // TODO: get details from backend config // NOTE: Discuss about multichain aspect of relayer node url and clients - // more methods to fetch balance via backend -> indexer node - // getTokenBalances() @Talha - /** * @param address Owner aka {EOA} address * @param index number of smart account deploy i.e {0, 1 ,2 ...} From c9724e52a7f877fd04609a64da1f9caa467df967 Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 29 Aug 2022 13:23:31 +0400 Subject: [PATCH 0111/1247] Fine Upgrades --- packages/core-types/src/transaction.types.ts | 10 +++++++++- packages/node-client/src/INodeClient.ts | 2 -- packages/node-client/src/NodeClient.ts | 1 - packages/smart-account/src/SmartAccount.ts | 11 +++-------- packages/transactions/src/execution.ts | 14 +------------- packages/transactions/src/multisend.ts | 2 +- 6 files changed, 14 insertions(+), 26 deletions(-) diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index 1caad3053..ee470f950 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -32,14 +32,22 @@ export interface ExecTransaction { targetTxGas: string | number } +export interface SmartAccountSignature { + signer: string + data: string +} + export interface FeeRefund { - gasUsed: string | number baseGas: string | number gasPrice: string | number tokenGasPriceFactor: string | number gasToken: string refundReceiver: string } +// extended from FeeRefund as we need this for handlePayment Estimate +export interface FeeRefundHandlePayment extends FeeRefund { + gasUsed: string | number +} export interface MetaTransactionData { readonly to: string diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index c43db4c6c..fec0b980c 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -1,5 +1,3 @@ -import { FeeRefund, MetaTransactionData } from '@biconomy-sdk/core-types' -import { Signer } from '@ethersproject/abstract-signer' import { EstimateExternalGasDto, EstimateRequiredTxGasDto, diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index 7f29b6c3d..3f2d4b611 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -18,7 +18,6 @@ import { } from './types/NodeClientTypes' import { getTxServiceBaseUrl } from './utils' import { HttpMethod, sendRequest } from './utils/httpRequests' -import { MetaTransactionData, FeeRefund } from '@biconomy-sdk/core-types' export interface NodeClientConfig { /** txServiceUrl - Safe Transaction Service URL */ txServiceUrl: string diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 79a39774d..2d17f1ce5 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -21,6 +21,7 @@ import { TransactionBatchDto, ExecTransaction, RelayTransaction, + FeeRefundHandlePayment, FeeRefund, WalletTransaction, SmartAccountVersion, @@ -47,13 +48,9 @@ import NodeClient, { ChainConfig, SupportedChainsResponse, EstimateExternalGasDt import { Web3Provider } from '@ethersproject/providers' import { Relayer } from '@biconomy-sdk/relayer' import { - SmartAccountTransaction, - getSignatureParameters, - EIP712_WALLET_TX_TYPE, buildSmartAccountTransaction, smartAccountSignMessage, - buildMultiSendSmartAccountTx, - AddressZero + buildMultiSendSmartAccountTx } from '@biconomy-sdk/transactions' import { GasEstimator } from './assets' import { BalancesDto } from '@biconomy-sdk/node-client' @@ -378,7 +375,6 @@ class SmartAccount { } const refundInfo: FeeRefund = { - gasUsed: 0, baseGas: tx.baseGas, gasPrice: tx.gasPrice, tokenGasPriceFactor: tx.tokenGasPriceFactor, @@ -576,7 +572,6 @@ class SmartAccount { // Depending on feeToken provide baseGas! const refundDetails: FeeRefund = { - gasUsed: gasEstimate1, baseGas: gasEstimate1, gasPrice: feeQuote.tokenGasPrice, tokenGasPriceFactor: feeQuote.offset || 1, @@ -761,7 +756,7 @@ class SmartAccount { console.log('feeQuote.offset ', feeQuote.offset); - const refundDetails: FeeRefund = { + const refundDetails: FeeRefundHandlePayment = { gasUsed: gasEstimate1, baseGas: gasEstimate1, gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index 0f239b7c6..2d39fc78d 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -8,7 +8,7 @@ import { PopulatedTransaction } from 'ethers' -import { ExecTransaction, FeeRefund, WalletTransaction } from '@biconomy-sdk/core-types' +import { ExecTransaction, FeeRefund, WalletTransaction, SmartAccountSignature } from '@biconomy-sdk/core-types' import { TypedDataSigner } from '@ethersproject/abstract-signer' import { AddressZero } from '@ethersproject/constants' @@ -43,17 +43,7 @@ export const EIP712_SMART_ACCOUNT_MESSAGE_TYPE = { SmartAccountMessage: [{ type: 'bytes', name: 'message' }] } -export interface SmartAccountTransaction { - _tx: ExecTransaction - refundInfo: FeeRefund - batchId: number - nonce: string | number -} -export interface SmartAccountSignature { - signer: string - data: string -} export const calculateSmartAccountDomainSeparator = ( wallet: Contract, @@ -165,7 +155,6 @@ export const executeTx = async ( targetTxGas: SmartAccountTx.targetTxGas } const refundInfo: FeeRefund = { - gasUsed: 0, baseGas: SmartAccountTx.baseGas, gasPrice: SmartAccountTx.gasPrice, tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, @@ -196,7 +185,6 @@ export const populateExecuteTx = async ( targetTxGas: SmartAccountTx.targetTxGas } const refundInfo: FeeRefund = { - gasUsed: 0, baseGas: SmartAccountTx.baseGas, gasPrice: SmartAccountTx.gasPrice, tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, diff --git a/packages/transactions/src/multisend.ts b/packages/transactions/src/multisend.ts index 5c8f8ce14..548e84b59 100644 --- a/packages/transactions/src/multisend.ts +++ b/packages/transactions/src/multisend.ts @@ -1,6 +1,6 @@ import { Contract, utils } from 'ethers' import { buildContractCall } from './execution' -import { MetaTransaction,MetaTransactionData, WalletTransaction } from '@biconomy-sdk/core-types' +import { MetaTransaction, WalletTransaction } from '@biconomy-sdk/core-types' // TODO // Review all types From f311426f28784f4efa07568110478e0410314638 Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 29 Aug 2022 15:03:39 +0400 Subject: [PATCH 0112/1247] code formatting --- .../core-types/src/ethereumLibs/EthAdapter.ts | 15 +- .../core-types/src/smart-account.types.ts | 58 +- packages/core-types/src/transaction.types.ts | 11 +- packages/core-types/src/types.ts | 50 +- packages/ethers-lib/src/EthersAdapter.ts | 5 +- .../src/contracts/contractInstancesEthers.ts | 18 +- packages/node-client/src/INodeClient.ts | 12 +- packages/node-client/src/NodeClient.ts | 18 +- .../node-client/src/types/NodeClientTypes.ts | 12 +- packages/relayer/src/index.ts | 29 +- packages/relayer/src/local-relayer.ts | 46 +- packages/relayer/src/rest-relayer.ts | 241 +-- packages/relayer/src/utils/multisend.ts | 2 +- packages/smart-account/src/SmartAccount.ts | 592 +++---- packages/smart-account/src/assets/index.ts | 1429 +++++++++-------- packages/smart-account/src/types.ts | 7 +- .../src/utils/FetchContractsInfo.ts | 3 +- .../smart-account/tests/smartaccount.spec.ts | 1017 ++++++------ packages/transactions/src/execution.ts | 9 +- 19 files changed, 1848 insertions(+), 1726 deletions(-) diff --git a/packages/core-types/src/ethereumLibs/EthAdapter.ts b/packages/core-types/src/ethereumLibs/EthAdapter.ts index 6ba62dad4..4a6ed3726 100644 --- a/packages/core-types/src/ethereumLibs/EthAdapter.ts +++ b/packages/core-types/src/ethereumLibs/EthAdapter.ts @@ -18,10 +18,19 @@ export interface EthAdapter { getEip3770Address(fullAddress: string): Promise getBalance(address: string): Promise getChainId(): Promise - getSmartWalletContract(smartAccountVersion: SmartAccountVersion, address: string): SmartWalletContract + getSmartWalletContract( + smartAccountVersion: SmartAccountVersion, + address: string + ): SmartWalletContract getMultiSendContract(smartAccountVersion: SmartAccountVersion, address: string): MultiSendContract - getMultiSendCallOnlyContract(smartAccountVersion: SmartAccountVersion, address: string): MultiSendCallOnlyContract - getSmartWalletFactoryContract(smartAccountVersion: SmartAccountVersion, address: string): SmartWalletFactoryContract + getMultiSendCallOnlyContract( + smartAccountVersion: SmartAccountVersion, + address: string + ): MultiSendCallOnlyContract + getSmartWalletFactoryContract( + smartAccountVersion: SmartAccountVersion, + address: string + ): SmartWalletFactoryContract getContractCode(address: string): Promise isContractDeployed(address: string): Promise getTransaction(transactionHash: string): Promise diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 3d49f72d4..305dc92db 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -1,57 +1,57 @@ // Smart Account Detail Param Types -import { ChainId } from './chains.types' +import { ChainId } from './chains.types' import { WalletTransaction, Transaction } from './transaction.types' import { FeeQuote } from './types' export type AddressForCounterFactualWalletDto = { - index: number - chainId: ChainId + index: number + chainId: ChainId } export type SignTransactionDto = { - tx: WalletTransaction, - chainId: ChainId + tx: WalletTransaction + chainId: ChainId } export type SendTransactionDto = { - tx: WalletTransaction - batchId: number - chainId: ChainId + tx: WalletTransaction + batchId: number + chainId: ChainId } export type PrepareTransactionDto = { - transaction: Transaction - batchId: number - chainId: ChainId + transaction: Transaction + batchId: number + chainId: ChainId } export type PrepareRefundTransactionDto = { - transactions: Transaction[] - batchId: number - chainId: ChainId + transactions: Transaction[] + batchId: number + chainId: ChainId } export type RefundTransactionDto = { - transaction: Transaction - feeQuote: FeeQuote - batchId: number - chainId: ChainId + transaction: Transaction + feeQuote: FeeQuote + batchId: number + chainId: ChainId } export type RefundTransactionBatchDto = { - transactions: Transaction[] - feeQuote: FeeQuote - batchId: number - chainId: ChainId + transactions: Transaction[] + feeQuote: FeeQuote + batchId: number + chainId: ChainId } export type TransactionDto = { - transaction: Transaction - batchId: number - chainId: ChainId + transaction: Transaction + batchId: number + chainId: ChainId } export type TransactionBatchDto = { - transactions: Transaction[] - batchId: number - chainId: ChainId -} \ No newline at end of file + transactions: Transaction[] + batchId: number + chainId: ChainId +} diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index ee470f950..d96c05e60 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -3,7 +3,6 @@ import { OperationType, SmartAccountContext, SmartAccountState } from './types' import { PromiEvent, TransactionReceipt } from 'web3-core/types' import { ContractTransaction } from '@ethersproject/contracts' - export interface RawTransactionType { from?: string gasPrice?: string | BigNumber @@ -81,7 +80,7 @@ export interface MetaTransaction { operation: number } -export interface WalletTransaction extends MetaTransaction{ +export interface WalletTransaction extends MetaTransaction { targetTxGas: string | number baseGas: string | number gasPrice: string | number @@ -131,13 +130,13 @@ export interface TransactionResult extends BaseTransactionResult { } export interface RelayTransaction { - signedTx: SignedTransaction, - config: SmartAccountState, + signedTx: SignedTransaction + config: SmartAccountState context: SmartAccountContext } export interface DeployWallet { config: SmartAccountState context: SmartAccountContext - index:number -} \ No newline at end of file + index: number +} diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index dd56be445..7c804184d 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -3,7 +3,7 @@ import { MultiSendContract } from './contracts/MultiSendContract' import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' import { SmartWalletContract } from './contracts/SmartWalletContract' -export type SmartAccountVersion = '1.0.2' | '1.0.1' | '1.0.0' +export type SmartAccountVersion = '1.0.2' | '1.0.1' | '1.0.0' export enum OperationType { Call, // 0 @@ -30,12 +30,12 @@ export interface Eip3770Address { } export interface RelayResponse { - code?: number; - message?: string; - transactionId?: string; - hash: string; - error?: string; - connectionUrl?: string; + code?: number + message?: string + transactionId?: string + hash: string + error?: string + connectionUrl?: string } export interface UserOperation { @@ -53,40 +53,40 @@ export interface UserOperation { signature: string } -export const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000" +export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' export interface RestRelayerOptions { url: string } export interface TokenData { - tokenGasPrice: number, // review - offset?: number, // review - symbol: string, - address: string, - decimal: number, + tokenGasPrice: number // review + offset?: number // review + symbol: string + address: string + decimal: number logoUrl: string } export interface FeeQuote { - symbol: string, - address: string, - decimal: number, - logoUrl: string, - payment: number, - tokenGasPrice: number, //review - offset?: number, + symbol: string + address: string + decimal: number + logoUrl: string + payment: number + tokenGasPrice: number //review + offset?: number } export interface FeeOptionsResponse { - msg: string, + msg: string data: { - chainId: number, + chainId: number response: Array } } export interface FeeOption { - feeToken: string, - tokenGasPrice: number | string, //review + feeToken: string + tokenGasPrice: number | string //review offset: number | string // review -} \ No newline at end of file +} diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index 588c39e17..698223439 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -68,7 +68,10 @@ class EthersAdapter implements EthAdapter { return (await this.#provider.getNetwork()).chainId } - getSmartWalletContract(smartAccountVersion: SmartAccountVersion, address: string): SmartWalletContract { + getSmartWalletContract( + smartAccountVersion: SmartAccountVersion, + address: string + ): SmartWalletContract { if (!address) { throw new Error('Invalid Smart Wallet contract address') } diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index 048047859..1707e1100 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -86,7 +86,10 @@ export function getMultiSendCallOnlyContractInstance( contractAddress: string, // signer: Signer provider: JsonRpcProvider -): MultiSendCallOnlyEthersContract_v1_0_0 | MultiSendCallOnlyEthersContract_v1_0_1 | MultiSendCallOnlyEthersContract_v1_0_2 { +): + | MultiSendCallOnlyEthersContract_v1_0_0 + | MultiSendCallOnlyEthersContract_v1_0_1 + | MultiSendCallOnlyEthersContract_v1_0_2 { let multiSendCallContract switch (smartAccountVersion) { @@ -97,8 +100,8 @@ export function getMultiSendCallOnlyContractInstance( multiSendCallContract = MultiSendCallOnlyContractV101.connect(contractAddress, provider) return new MultiSendCallOnlyEthersContract_v1_0_1(multiSendCallContract) case '1.0.2': - multiSendCallContract = MultiSendCallOnlyContractV102.connect(contractAddress, provider) - return new MultiSendCallOnlyEthersContract_v1_0_2(multiSendCallContract) + multiSendCallContract = MultiSendCallOnlyContractV102.connect(contractAddress, provider) + return new MultiSendCallOnlyEthersContract_v1_0_2(multiSendCallContract) } } @@ -106,7 +109,10 @@ export function getSmartWalletFactoryContractInstance( smartAccountVersion: SmartAccountVersion, contractAddress: string, provider: JsonRpcProvider -): SmartWalletFacoryContractEthers_v1_0_0 | SmartWalletFacoryContractEthers_v1_0_1 | SmartWalletFacoryContractEthers_v1_0_2 { +): + | SmartWalletFacoryContractEthers_v1_0_0 + | SmartWalletFacoryContractEthers_v1_0_1 + | SmartWalletFacoryContractEthers_v1_0_2 { let walletFactoryContract switch (smartAccountVersion) { @@ -117,7 +123,7 @@ export function getSmartWalletFactoryContractInstance( walletFactoryContract = SmartWalletFactoryContractV101.connect(contractAddress, provider) return new SmartWalletFacoryContractEthers_v1_0_1(walletFactoryContract) case '1.0.2': - walletFactoryContract = SmartWalletFactoryContractV102.connect(contractAddress, provider) - return new SmartWalletFacoryContractEthers_v1_0_2(walletFactoryContract) + walletFactoryContract = SmartWalletFactoryContractV102.connect(contractAddress, provider) + return new SmartWalletFacoryContractEthers_v1_0_2(walletFactoryContract) } } diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index fec0b980c..c17ae85d8 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -34,7 +34,9 @@ interface INodeClient { // Smart Account Endpoints - getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise + getSmartAccountsByOwner( + smartAccountByOwnerDto: SmartAccountByOwnerDto + ): Promise getAlltokenBalances(balancesDto: BalancesDto): Promise @@ -42,9 +44,13 @@ interface INodeClient { estimateExternalGas(estimateExternalGasDto: EstimateExternalGasDto): Promise - estimateRequiredTxGas(estimateRequiredTxGasDto: EstimateRequiredTxGasDto): Promise + estimateRequiredTxGas( + estimateRequiredTxGasDto: EstimateRequiredTxGasDto + ): Promise - estimateHandlePaymentGas(estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto): Promise + estimateHandlePaymentGas( + estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto + ): Promise } export default INodeClient diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index 3f2d4b611..a1b4b63a8 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -90,14 +90,16 @@ class NodeClient implements INodeClient { async getTokenByChainIdAndAddress( tokenByChainIdAndAddressDto: TokenByChainIdAndAddressDto ): Promise { - const { chainId, tokenAddress} = tokenByChainIdAndAddressDto + const { chainId, tokenAddress } = tokenByChainIdAndAddressDto return sendRequest({ url: `${this.#txServiceBaseUrl}/tokens/chainId/${chainId}/address/${tokenAddress}`, method: HttpMethod.Get }) } - async getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise { + async getSmartAccountsByOwner( + smartAccountByOwnerDto: SmartAccountByOwnerDto + ): Promise { const { chainId, owner } = smartAccountByOwnerDto return sendRequest({ url: `${this.#txServiceBaseUrl}/smart-accounts/chainId/${chainId}/owner/${owner}`, @@ -121,21 +123,27 @@ class NodeClient implements INodeClient { }) } - async estimateExternalGas(estimateExternalGasDto: EstimateExternalGasDto): Promise{ + async estimateExternalGas( + estimateExternalGasDto: EstimateExternalGasDto + ): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/external`, method: HttpMethod.Post, body: estimateExternalGasDto }) } - async estimateRequiredTxGas(estimateRequiredTxGasDto: EstimateRequiredTxGasDto): Promise{ + async estimateRequiredTxGas( + estimateRequiredTxGasDto: EstimateRequiredTxGasDto + ): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/required`, method: HttpMethod.Post, body: estimateRequiredTxGasDto }) } - estimateHandlePaymentGas(estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto): Promise{ + estimateHandlePaymentGas( + estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto + ): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/handle-payment`, method: HttpMethod.Post, diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index 882336b9a..c73ece846 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -1,4 +1,9 @@ -import { ChainId, SmartAccountVersion, MetaTransactionData, FeeRefund } from '@biconomy-sdk/core-types' +import { + ChainId, + SmartAccountVersion, + MetaTransactionData, + FeeRefund +} from '@biconomy-sdk/core-types' export type SmartAccountInfoResponse = { readonly name: string readonly version: string @@ -41,16 +46,15 @@ export type EstimateHandlePaymentTxGasDto = { } export type SmartAccountByOwnerDto = { - chainId: number, + chainId: number owner: string } export type TokenByChainIdAndAddressDto = { - chainId: number, + chainId: number tokenAddress: string } - export type ContractDetails = { version: SmartAccountVersion diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index bef2eab44..8c3c254e6 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -1,16 +1,21 @@ import { TransactionResponse } from '@ethersproject/providers' -import { SignedTransaction, SmartAccountState, SmartAccountContext, FeeOptionsResponse } from '@biconomy-sdk/core-types' +import { + SignedTransaction, + SmartAccountState, + SmartAccountContext, + FeeOptionsResponse +} from '@biconomy-sdk/core-types' import { RelayTransaction, RelayResponse } from '@biconomy-sdk/core-types' export interface Relayer { - // relayer will submit the transaction(s) to the network and return the transaction response. - // The quote should be the one returned from getFeeOptions, if any. - /*quote?: FeeQuote*/ - getFeeOptions(chainId: number): Promise - relay(relayTransaction: RelayTransaction): Promise - // wait for transaction confirmation - // wait(metaTxnId: string | SignedTransactions, timeout: number): Promise - } - - export * from './local-relayer' - export * from './rest-relayer' + // relayer will submit the transaction(s) to the network and return the transaction response. + // The quote should be the one returned from getFeeOptions, if any. + /*quote?: FeeQuote*/ + getFeeOptions(chainId: number): Promise + relay(relayTransaction: RelayTransaction): Promise + // wait for transaction confirmation + // wait(metaTxnId: string | SignedTransactions, timeout: number): Promise +} + +export * from './local-relayer' +export * from './rest-relayer' diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index cfe9582d3..9f0be96a6 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -25,9 +25,7 @@ export class LocalRelayer implements Relayer { // Review function arguments and return values // Could get smartAccount instance // Defines a type that takes config, context for SCW in play along with other details - async deployWallet( - deployWallet: DeployWallet - ): Promise { + async deployWallet(deployWallet: DeployWallet): Promise { // Should check if already deployed //Review for index and ownership transfer case const { config, context, index = 0 } = deployWallet @@ -37,7 +35,7 @@ export class LocalRelayer implements Relayer { if (isExist) { throw new Error('Smart Account is Already Deployed') } - const walletDeployTxn = this.prepareWalletDeploy({config, context, index}) + const walletDeployTxn = this.prepareWalletDeploy({ config, context, index }) const tx = this.signer.sendTransaction({ ...walletDeployTxn, gasLimit: ethers.constants.Two.pow(24) @@ -84,9 +82,7 @@ export class LocalRelayer implements Relayer { // Add feeQuote later // Appending tx and rawTx may not be necessary - async relay( - relayTransaction: RelayTransaction - ): Promise { + async relay(relayTransaction: RelayTransaction): Promise { const { config, signedTx, context } = relayTransaction const { isDeployed, address } = config const { multiSendCall } = context // multisend has to be multiSendCallOnly here! @@ -143,23 +139,25 @@ export class LocalRelayer implements Relayer { return tx } - async getFeeOptions(chainId: number) : Promise { - console.log('requested fee options for chain ', chainId); + async getFeeOptions(chainId: number): Promise { + console.log('requested fee options for chain ', chainId) const feeOptions: FeeOptionsResponse = { - "msg": "all ok", - "data": { - "chainId": 5, - "response": [ - { - "tokenGasPrice": 157718, - "symbol": "USDC", - "address": "0xb5B640E6414b6DeF4FC9B3C1EeF373925effeCcF", - "decimal": 6, - "logoUrl": "https://raw.githubusercontent.com/spothq/cryptocurrency-icons/master/128/color/usdc.png", - "offset": 1000000 - }] - } - }; - return feeOptions; + msg: 'all ok', + data: { + chainId: 5, + response: [ + { + tokenGasPrice: 157718, + symbol: 'USDC', + address: '0xb5B640E6414b6DeF4FC9B3C1EeF373925effeCcF', + decimal: 6, + logoUrl: + 'https://raw.githubusercontent.com/spothq/cryptocurrency-icons/master/128/color/usdc.png', + offset: 1000000 + } + ] + } + } + return feeOptions } } diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 1b091cf31..df58a334c 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -1,6 +1,6 @@ import { TransactionRequest, TransactionResponse } from '@ethersproject/providers' import { Signer as AbstractSigner, ethers } from 'ethers' -import { Relayer } from '.'; +import { Relayer } from '.' import { SmartWalletFactoryContract, @@ -11,7 +11,7 @@ import { RelayTransaction, DeployWallet, SmartAccountContext, - SmartAccountState, + SmartAccountState, SignedTransaction, WalletTransaction, RawTransactionType, @@ -19,151 +19,154 @@ import { FeeOptionsResponse, RelayResponse } from '@biconomy-sdk/core-types' -import { MetaTransaction, encodeMultiSend } from './utils/multisend'; -import { HttpMethod, sendRequest } from './utils/httpRequests'; +import { MetaTransaction, encodeMultiSend } from './utils/multisend' +import { HttpMethod, sendRequest } from './utils/httpRequests' /** * Relayer class that would be used via REST API to execute transactions */ -export class RestRelayer implements Relayer { - #relayServiceBaseUrl: string +export class RestRelayer implements Relayer { + #relayServiceBaseUrl: string - constructor(options: RestRelayerOptions) { - const { url } = options; - this.#relayServiceBaseUrl = url; - } + constructor(options: RestRelayerOptions) { + const { url } = options + this.#relayServiceBaseUrl = url + } - // TODO - // Review function arguments and return values - // Could get smartAccount instance - // Defines a type that takes config, context for SCW in play along with other details - async deployWallet(deployWallet: DeployWallet): Promise { - // Should check if already deployed - //Review for index and ownership transfer case - const { config, context, index = 0 } = deployWallet - const {address} = config; - const {walletFactory} = context; - const isExist = await walletFactory.isWalletExist(address); - if(isExist) { - throw new Error("Smart Account is Already Deployed") - } - const walletDeployTxn = this.prepareWalletDeploy(deployWallet); - // REST API call to relayer - return sendRequest({ - url: `${this.#relayServiceBaseUrl}`, - method: HttpMethod.Post, - body: { ...walletDeployTxn, gasLimit: ethers.constants.Two.pow(24) } - }) + // TODO + // Review function arguments and return values + // Could get smartAccount instance + // Defines a type that takes config, context for SCW in play along with other details + async deployWallet(deployWallet: DeployWallet): Promise { + // Should check if already deployed + //Review for index and ownership transfer case + const { config, context, index = 0 } = deployWallet + const { address } = config + const { walletFactory } = context + const isExist = await walletFactory.isWalletExist(address) + if (isExist) { + throw new Error('Smart Account is Already Deployed') } + const walletDeployTxn = this.prepareWalletDeploy(deployWallet) + // REST API call to relayer + return sendRequest({ + url: `${this.#relayServiceBaseUrl}`, + method: HttpMethod.Post, + body: { ...walletDeployTxn, gasLimit: ethers.constants.Two.pow(24) } + }) + } - prepareWalletDeploy( // owner, entryPoint, handler, index - deployWallet: DeployWallet - // context: WalletContext - ): { to: string, data: string} { - const { config, context, index = 0 } = deployWallet - const {walletFactory} = context; - const {owner, entryPointAddress, fallbackHandlerAddress} = config; - const factoryInterface = walletFactory.getInterface(); - - return { - to: walletFactory.getAddress(), // from context - data: factoryInterface.encodeFunctionData(factoryInterface.getFunction('deployCounterFactualWallet'), - [owner, entryPointAddress, fallbackHandlerAddress, index] - ) - } + prepareWalletDeploy( + // owner, entryPoint, handler, index + deployWallet: DeployWallet + // context: WalletContext + ): { to: string; data: string } { + const { config, context, index = 0 } = deployWallet + const { walletFactory } = context + const { owner, entryPointAddress, fallbackHandlerAddress } = config + const factoryInterface = walletFactory.getInterface() + + return { + to: walletFactory.getAddress(), // from context + data: factoryInterface.encodeFunctionData( + factoryInterface.getFunction('deployCounterFactualWallet'), + [owner, entryPointAddress, fallbackHandlerAddress, index] + ) } + } - /*async isWalletDeployed(walletAddress: string): Promise { + /*async isWalletDeployed(walletAddress: string): Promise { // Check if wallet is deployed return true; }*/ - /*async getFeeOptions( + /*async getFeeOptions( ): Promise<{ options: FeeOption[] }> { return { options: [] } }*/ - - /*async gasRefundOptions( + + /*async gasRefundOptions( ): Promise { const { options } = //await this.getFeeOptions() return options }*/ - // Should make an object that takes config and context - // Add feeQuote later - // Appending tx and rawTx may not be necessary - - async relay( - relayTransaction: RelayTransaction - ): Promise { - const { config, signedTx, context } = relayTransaction - const { isDeployed, address } = config; - const { multiSendCall } = context; // multisend has to be multiSendCallOnly here! - if(!isDeployed) { - // If not =>> preprendWalletDeploy - console.log('here'); - const prepareWalletDeploy: DeployWallet = { - config, - context, - index: 0 - } - const {to, data} = this.prepareWalletDeploy(prepareWalletDeploy); - const originalTx:WalletTransaction = signedTx.tx; - - const txs: MetaTransaction[] = [ - { - to, - value: 0, - data, - operation: 0 - }, - { - to: address, - value: 0, - data: signedTx.rawTx.data || '', - operation: 0 - } - ] - - const txnData = multiSendCall.getInterface().encodeFunctionData("multiSend", [ - encodeMultiSend(txs), - ]); - console - - const finalRawRx = { - to: multiSendCall.getAddress(), - data: txnData, - chainId: signedTx.rawTx.chainId, - value: 0 + // Should make an object that takes config and context + // Add feeQuote later + // Appending tx and rawTx may not be necessary + + async relay(relayTransaction: RelayTransaction): Promise { + const { config, signedTx, context } = relayTransaction + const { isDeployed, address } = config + const { multiSendCall } = context // multisend has to be multiSendCallOnly here! + if (!isDeployed) { + // If not =>> preprendWalletDeploy + console.log('here') + const prepareWalletDeploy: DeployWallet = { + config, + context, + index: 0 + } + const { to, data } = this.prepareWalletDeploy(prepareWalletDeploy) + const originalTx: WalletTransaction = signedTx.tx + + const txs: MetaTransaction[] = [ + { + to, + value: 0, + data, + operation: 0 + }, + { + to: address, + value: 0, + data: signedTx.rawTx.data || '', + operation: 0 } - console.log('finaRawTx'); - console.log(finalRawRx); - - // API call - // rawTx to becomes multiSend address and data gets prepared again - return sendRequest({ - url: `${this.#relayServiceBaseUrl}`, - method: HttpMethod.Post, - body: { ...finalRawRx, /*gasLimit: ethers.constants.Two.pow(24)*/ } - }) + ] + + const txnData = multiSendCall + .getInterface() + .encodeFunctionData('multiSend', [encodeMultiSend(txs)]) + console + + const finalRawRx = { + to: multiSendCall.getAddress(), + data: txnData, + chainId: signedTx.rawTx.chainId, + value: 0 } - console.log('signedTx', signedTx); - console.log('gasLimit', ethers.constants.Two.pow(24)); + console.log('finaRawTx') + console.log(finalRawRx) + // API call + // rawTx to becomes multiSend address and data gets prepared again return sendRequest({ url: `${this.#relayServiceBaseUrl}`, method: HttpMethod.Post, - body: { ...signedTx.rawTx, /*gasLimit: ethers.constants.Two.pow(24),*/ refundInfo: { - tokenGasPrice: signedTx.tx.gasPrice, - gasToken: signedTx.tx.gasToken, - } } + body: { ...finalRawRx /*gasLimit: ethers.constants.Two.pow(24)*/ } }) } + console.log('signedTx', signedTx) + console.log('gasLimit', ethers.constants.Two.pow(24)) + // API call + return sendRequest({ + url: `${this.#relayServiceBaseUrl}`, + method: HttpMethod.Post, + body: { + ...signedTx.rawTx, + /*gasLimit: ethers.constants.Two.pow(24),*/ refundInfo: { + tokenGasPrice: signedTx.tx.gasPrice, + gasToken: signedTx.tx.gasToken + } + } + }) + } - async getFeeOptions(chainId: number): Promise { - return sendRequest({ - url: `${this.#relayServiceBaseUrl}/feeOptions?chainId=${chainId}`, - method: HttpMethod.Get, - }) - } - } \ No newline at end of file + async getFeeOptions(chainId: number): Promise { + return sendRequest({ + url: `${this.#relayServiceBaseUrl}/feeOptions?chainId=${chainId}`, + method: HttpMethod.Get + }) + } +} diff --git a/packages/relayer/src/utils/multisend.ts b/packages/relayer/src/utils/multisend.ts index 94524a03d..6a293ab8b 100644 --- a/packages/relayer/src/utils/multisend.ts +++ b/packages/relayer/src/utils/multisend.ts @@ -9,7 +9,7 @@ export interface MetaTransaction { operation: number } -export interface WalletTransaction extends MetaTransaction{ +export interface WalletTransaction extends MetaTransaction { targetTxGas: string | number baseGas: string | number gasPrice: string | number diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 2d17f1ce5..4f793186c 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -44,7 +44,13 @@ import { RelayResponse } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' -import NodeClient, { ChainConfig, SupportedChainsResponse, EstimateExternalGasDto, EstimateRequiredTxGasDto, EstimateHandlePaymentTxGasDto} from '@biconomy-sdk/node-client' +import NodeClient, { + ChainConfig, + SupportedChainsResponse, + EstimateExternalGasDto, + EstimateRequiredTxGasDto, + EstimateHandlePaymentTxGasDto +} from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' import { Relayer } from '@biconomy-sdk/relayer' import { @@ -54,7 +60,11 @@ import { } from '@biconomy-sdk/transactions' import { GasEstimator } from './assets' import { BalancesDto } from '@biconomy-sdk/node-client' -import { BalancesResponse, UsdBalanceResponse, EstimateGasResponse } from '@biconomy-sdk/node-client' +import { + BalancesResponse, + UsdBalanceResponse, + EstimateGasResponse +} from '@biconomy-sdk/node-client' // Create an instance of Smart Account with multi-chain support. class SmartAccount { @@ -113,7 +123,7 @@ class SmartAccount { /**Constrcutor for the Smart Account. If config is not provided it makes Smart Contract available using default configuration * If you wish to use your own backend server and relayer service, pass the URLs here */ - constructor(walletProvider: Web3Provider, config?: Partial) { + constructor(walletProvider: Web3Provider, config?: Partial) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } if (config) { this.#smartAccountConfig = { ...this.#smartAccountConfig, ...config } @@ -162,7 +172,7 @@ class SmartAccount { const providerUrl = chainConfig.find((n) => n.chainId === network)?.providerUrl // To keep it network agnostic // Note: think about events when signer needs to pay gas - + const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable this.ethAdapter[network] = new EthersAdapter({ @@ -244,7 +254,8 @@ class SmartAccount { private async getAddressForCounterfactualWallet( addressForCounterFactualWalletDto: AddressForCounterFactualWalletDto ): Promise { - const {index = 0 , chainId = this.#smartAccountConfig.activeNetworkId } = addressForCounterFactualWalletDto + const { index = 0, chainId = this.#smartAccountConfig.activeNetworkId } = + addressForCounterFactualWalletDto console.log('index and ChainId ', index, chainId, this.DEFAULT_VERSION) console.log( 'Instance to this is ', @@ -279,17 +290,22 @@ class SmartAccount { return this.nodeClient.getTotalBalanceInUsd(balancesDto) } - public async estimateExternalGas(estimateExternalGasDto: EstimateExternalGasDto): Promise{ + public async estimateExternalGas( + estimateExternalGasDto: EstimateExternalGasDto + ): Promise { return this.nodeClient.estimateExternalGas(estimateExternalGasDto) } - public async estimateRequiredTxGas(estimateRequiredTxGasDto: EstimateRequiredTxGasDto): Promise{ + public async estimateRequiredTxGas( + estimateRequiredTxGasDto: EstimateRequiredTxGasDto + ): Promise { return this.nodeClient.estimateRequiredTxGas(estimateRequiredTxGasDto) } - public async estimateHandlePaymentGas(estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto): Promise{ + public async estimateHandlePaymentGas( + estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto + ): Promise { return this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentTxGasDto) } - // return adapter instance to be used for blockchain interactions /** * adapter instance to be used for some blockchain interactions @@ -333,10 +349,8 @@ class SmartAccount { * @param chainId optional chainId * @returns:string Signature */ - async signTransaction( - signTransactionDto: SignTransactionDto - ): Promise { - const { chainId = this.#smartAccountConfig.activeNetworkId, tx } = signTransactionDto + async signTransaction(signTransactionDto: SignTransactionDto): Promise { + const { chainId = this.#smartAccountConfig.activeNetworkId, tx } = signTransactionDto let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) @@ -355,10 +369,12 @@ class SmartAccount { * @param chainId optional chainId * @returns */ - async sendTransaction( - sendTransactionDto: SendTransactionDto - ): Promise { - const { tx, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = sendTransactionDto + async sendTransaction(sendTransactionDto: SendTransactionDto): Promise { + const { + tx, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = sendTransactionDto let rawTx: RawTransactionType = { to: tx.to, data: tx.data, @@ -385,7 +401,7 @@ class SmartAccount { let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() walletContract = walletContract.attach(this.address) - let signature = await this.signTransaction({tx, chainId}) + let signature = await this.signTransaction({ tx, chainId }) let execTransaction = await walletContract.populateTransaction.execTransaction( transaction, @@ -404,42 +420,49 @@ class SmartAccount { tx } const relayTrx: RelayTransaction = { - signedTx, - config: state, + signedTx, + config: state, context: this.getSmartAccountContext(chainId) } - const txn:RelayResponse = await this.relayer.relay(relayTrx) + const txn: RelayResponse = await this.relayer.relay(relayTrx) return txn.hash } // Get Fee Options from relayer and make it available for display // We can also show list of transactions to be processed (decodeContractCall) /** - * - * @param transaction - * @param batchId - * @param chainId + * + * @param transaction + * @param batchId + * @param chainId */ async prepareRefundTransaction( prepareTransactionDto: PrepareTransactionDto ): Promise { + const { + transaction, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = prepareTransactionDto - const { transaction, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = prepareTransactionDto - - const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) - const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; - let feeQuotes: Array = []; + const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response + let feeQuotes: Array = [] // 1. If wallet is deployed - // 2. If wallet is not deployed (batch wallet deployment on multisend) + // 2. If wallet is not deployed (batch wallet deployment on multisend) // actual estimation with dummy sig // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth - const estimatedGasUsed: number = await this.estimateTransaction({transaction, batchId, chainId}); + const estimatedGasUsed: number = await this.estimateTransaction({ + transaction, + batchId, + chainId + }) feeOptionsAvailable.forEach((feeOption) => { - const tokenGasPrice = feeOption.tokenGasPrice || 0; - const offset = feeOption.offset || 1; - let payment = tokenGasPrice * estimatedGasUsed / offset; + const tokenGasPrice = feeOption.tokenGasPrice || 0 + const offset = feeOption.offset || 1 + let payment = (tokenGasPrice * estimatedGasUsed) / offset let feeQuote = { symbol: feeOption.symbol, @@ -451,39 +474,46 @@ class SmartAccount { payment: payment } - feeQuotes.push(feeQuote); - }); + feeQuotes.push(feeQuote) + }) - return feeQuotes; + return feeQuotes } // Get Fee Options from relayer and make it available for display // We can also show list of transactions to be processed (decodeContractCall) /** - * - * @param transaction - * @param batchId - * @param chainId + * + * @param transaction + * @param batchId + * @param chainId */ async prepareRefundTransactionBatch( prepareRefundTransactionDto: PrepareRefundTransactionDto ): Promise { - - const { transactions, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId} = prepareRefundTransactionDto - const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) - const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; - let feeQuotes: Array = []; + const { + transactions, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = prepareRefundTransactionDto + const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response + let feeQuotes: Array = [] // 1. If wallet is deployed - // 2. If wallet is not deployed (batch wallet deployment on multisend) + // 2. If wallet is not deployed (batch wallet deployment on multisend) // actual estimation with dummy sig // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth - const estimatedGasUsed: number = await this.estimateTransactionBatch({ transactions, batchId, chainId }); + const estimatedGasUsed: number = await this.estimateTransactionBatch({ + transactions, + batchId, + chainId + }) feeOptionsAvailable.forEach((feeOption) => { - const tokenGasPrice = feeOption.tokenGasPrice || 0; - const offset = feeOption.offset || 1; - let payment = tokenGasPrice * estimatedGasUsed / offset; + const tokenGasPrice = feeOption.tokenGasPrice || 0 + const offset = feeOption.offset || 1 + let payment = (tokenGasPrice * estimatedGasUsed) / offset let feeQuote = { symbol: feeOption.symbol, @@ -495,35 +525,43 @@ class SmartAccount { payment: payment } - feeQuotes.push(feeQuote); - }); + feeQuotes.push(feeQuote) + }) - return feeQuotes; + return feeQuotes } async estimateTransactionBatch( prepareRefundTransactionDto: PrepareRefundTransactionDto - ): Promise { - const { transactions, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId} = prepareRefundTransactionDto - // eth_call api method - let estimatedGasUsed = 435318; - console.log('transactions ', transactions); - console.log('batchId ', batchId); - console.log('chainId ', chainId); - return estimatedGasUsed; - } + ): Promise { + const { + transactions, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = prepareRefundTransactionDto + // eth_call api method + let estimatedGasUsed = 435318 + console.log('transactions ', transactions) + console.log('batchId ', batchId) + console.log('chainId ', chainId) + return estimatedGasUsed + } async estimateTransaction(prepareTransactionDto: PrepareTransactionDto): Promise { - // eth_call api method - const { transaction, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = prepareTransactionDto - let estimatedGasUsed = 435318; - console.log('transaction ', transaction); - console.log('batchId ', batchId); - console.log('chainId ', chainId); - return estimatedGasUsed; + // eth_call api method + const { + transaction, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = prepareTransactionDto + let estimatedGasUsed = 435318 + console.log('transaction ', transaction) + console.log('batchId ', batchId) + console.log('chainId ', chainId) + return estimatedGasUsed } - // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions + // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions /** * Prepares compatible WalletTransaction object based on Transaction Request @@ -531,15 +569,20 @@ class SmartAccount { * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) * @param transaction * @param feeToken choice to token to refund the relayer with - * @param tokenGasPrice selected fee quote details + * @param tokenGasPrice selected fee quote details * @param batchId * @param chainId * @returns */ - async createRefundTransaction( + async createRefundTransaction( refundTransactionDto: RefundTransactionDto ): Promise { - const { transaction, feeQuote, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = refundTransactionDto + const { + transaction, + feeQuote, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = refundTransactionDto let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) @@ -550,7 +593,7 @@ class SmartAccount { } console.log('nonce: ', nonce) - // in terms of calculating baseGas we should know if wallet is deployed or not otherwise it needs to consider deployment cost + // in terms of calculating baseGas we should know if wallet is deployed or not otherwise it needs to consider deployment cost // (will get batched by relayer) const internalTx: MetaTransactionData = { @@ -559,43 +602,45 @@ class SmartAccount { data: transaction.data || '0x', operation: OperationType.Call } - console.log(internalTx); + console.log(internalTx) const connectedWallet = this.address const estimateRequiredTxGas: EstimateRequiredTxGasDto = { - chainId, - walletAddress: connectedWallet, - transaction: internalTx} - const response = await this.estimateRequiredTxGas(estimateRequiredTxGas); + chainId, + walletAddress: connectedWallet, + transaction: internalTx + } + const response = await this.estimateRequiredTxGas(estimateRequiredTxGas) const gasEstimate1 = Number(response.data.gas) + 50000 // review // check safeServiceClient - console.log('required txgas estimate ', gasEstimate1); + console.log('required txgas estimate ', gasEstimate1) // Depending on feeToken provide baseGas! const refundDetails: FeeRefund = { baseGas: gasEstimate1, gasPrice: feeQuote.tokenGasPrice, - tokenGasPriceFactor: feeQuote.offset || 1, + tokenGasPriceFactor: feeQuote.offset || 1, gasToken: feeQuote.address, refundReceiver: ZERO_ADDRESS } const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId, - walletAddress: connectedWallet, - feeRefundData: refundDetails} + chainId, + walletAddress: connectedWallet, + feeRefundData: refundDetails + } - const handlePaymentResponse = await this.estimateHandlePaymentGas(estimateHandlePaymentGas); + const handlePaymentResponse = await this.estimateHandlePaymentGas(estimateHandlePaymentGas) let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - console.log('handle payment estimate ', handlePaymentEstimate); + console.log('handle payment estimate ', handlePaymentEstimate) // If the wallet deployment has to be appended then baseGas would change - if(handlePaymentEstimate === 0){ + if (handlePaymentEstimate === 0) { handlePaymentEstimate = 22900 } - console.log('handlePaymentEstimate ', handlePaymentEstimate); - const baseGas = 22900 + 4928 + 2360; // delegate call + event emission + state updates - + console.log('handlePaymentEstimate ', handlePaymentEstimate) + const baseGas = 22900 + 4928 + 2360 // delegate call + event emission + state updates + const walletTx: WalletTransaction = buildSmartAccountTransaction({ to: transaction.to, value: transaction.value, @@ -612,7 +657,6 @@ class SmartAccount { return walletTx } - /** * Prepares compatible WalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction @@ -622,10 +666,12 @@ class SmartAccount { * @param chainId * @returns */ - async createTransaction( - transactionDto: TransactionDto - ): Promise { - const { transaction, batchId = 0 , chainId = this.#smartAccountConfig.activeNetworkId } = transactionDto + async createTransaction(transactionDto: TransactionDto): Promise { + const { + transaction, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = transactionDto let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) @@ -652,7 +698,7 @@ class SmartAccount { * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) * @param transactions * @param feeToken choice to token to refund the relayer with - * @param tokenGasPrice selected fee quote details + * @param tokenGasPrice selected fee quote details * @param batchId * @param chainId * @returns @@ -660,156 +706,160 @@ class SmartAccount { async createRefundTransactionBatch( refundTransactionBatchDto: RefundTransactionBatchDto ): Promise { - const { transactions, feeQuote, batchId = 0 , chainId = this.#smartAccountConfig.activeNetworkId} = refundTransactionBatchDto - let walletContract = this.smartAccount(chainId).getContract(); + const { + transactions, + feeQuote, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = refundTransactionBatchDto + let walletContract = this.smartAccount(chainId).getContract() const connectedWallet = this.address - walletContract = walletContract.attach(connectedWallet); - - let additionalBaseGas = 0; - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0; - if(await this.isDeployed(chainId)) { - nonce = (await walletContract.getNonce(batchId)).toNumber(); - } else { - - const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); - const walletFactoryInterface = this.factory().getInterface(); - const state = await this.getSmartAccountState(); - - - const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ - this.factory().getAddress(), - walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ - state.owner, - state.entryPointAddress, - state.fallbackHandlerAddress, - 0 - ]) - ]) - console.log('encodedEstimate ', encodedEstimateData) + walletContract = walletContract.attach(connectedWallet) - const estimateExternalGas: EstimateExternalGasDto = {chainId, encodedData: encodedEstimateData} + let additionalBaseGas = 0 - const deployCostresponse = await this.estimateExternalGas(estimateExternalGas); - const estimateWalletDeployment = Number(deployCostresponse.data.gas); - console.log('estimateWalletDeployment ', estimateWalletDeployment); - + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (await this.isDeployed(chainId)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } else { + const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi) + const walletFactoryInterface = this.factory().getInterface() + const state = await this.getSmartAccountState() + + const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ + this.factory().getAddress(), + walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ + state.owner, + state.entryPointAddress, + state.fallbackHandlerAddress, + 0 + ]) + ]) + console.log('encodedEstimate ', encodedEstimateData) - // We know it's going to get deployed by Relayer - // but we handle refund cost here.. - additionalBaseGas += estimateWalletDeployment; // wallet deployment gas - additionalBaseGas -= 21000; // cause it would be pretty much accounted in internal txn on wallet - // could be done using external call (gasEstimatorv api) + const estimateExternalGas: EstimateExternalGasDto = { + chainId, + encodedData: encodedEstimateData } - console.log('nonce: ', nonce); - const txs: MetaTransaction[] = []; + const deployCostresponse = await this.estimateExternalGas(estimateExternalGas) + const estimateWalletDeployment = Number(deployCostresponse.data.gas) + console.log('estimateWalletDeployment ', estimateWalletDeployment) - for(let i=0; i < transactions.length; i++) { + // We know it's going to get deployed by Relayer + // but we handle refund cost here.. + additionalBaseGas += estimateWalletDeployment // wallet deployment gas + additionalBaseGas -= 21000 // cause it would be pretty much accounted in internal txn on wallet + // could be done using external call (gasEstimatorv api) + } + console.log('nonce: ', nonce) - const innerTx: WalletTransaction = buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) + const txs: MetaTransaction[] = [] - txs.push(innerTx); - } + for (let i = 0; i < transactions.length; i++) { + const innerTx: WalletTransaction = buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) - const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( - this.multiSend(chainId).getContract(), - txs, - nonce - ); + txs.push(innerTx) + } - console.log('wallet txn with refund ', walletTx); + const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( + this.multiSend(chainId).getContract(), + txs, + nonce + ) - const internalTx: MetaTransaction = { - to: walletTx.to, - value: walletTx.value || 0, - data: walletTx.data || '0x', - operation: walletTx.operation - } - console.log(internalTx); - // TODO - // Currently we can't do these estimations without wallet being deployed... + console.log('wallet txn with refund ', walletTx) - const estimateRequiredTxGas: EstimateRequiredTxGasDto = { - chainId, - walletAddress: connectedWallet, - transaction: internalTx - } + const internalTx: MetaTransaction = { + to: walletTx.to, + value: walletTx.value || 0, + data: walletTx.data || '0x', + operation: walletTx.operation + } + console.log(internalTx) + // TODO + // Currently we can't do these estimations without wallet being deployed... - const response = await this.estimateRequiredTxGas(estimateRequiredTxGas); - - // If we get this reponse zero, there has to be a way to estimate this fror undeployed wallet - // i. use really high value - // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] - - // considerable offset ref gnosis safe service client safeTxGas - const gasEstimate1 = Number(response.data.gas) + 50000 - console.log('required txgas estimate ', gasEstimate1); - - // Depending on feeToken provide baseGas! - - console.log('feeQuote.offset ', feeQuote.offset); - - const refundDetails: FeeRefundHandlePayment = { - gasUsed: gasEstimate1, - baseGas: gasEstimate1, - gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: ZERO_ADDRESS - } + const estimateRequiredTxGas: EstimateRequiredTxGasDto = { + chainId, + walletAddress: connectedWallet, + transaction: internalTx + } - const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId, - walletAddress: connectedWallet, - feeRefundData: refundDetails - } - - const handlePaymentResponse = await this.estimateHandlePaymentGas(estimateHandlePaymentGas); - // If we get this reponse zero, there has to be a way to estimate this for undeployed wallet - // We could use constant value provided by the relayer - let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - - if(handlePaymentEstimate === 0){ - handlePaymentEstimate = 22900 - } - console.log('handlePaymentEstimate ', handlePaymentEstimate); - - // If the wallet deployment has to be appended then baseGas would change - const regularOffSet = 4928 + 2360; - const baseGas = 22900 + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment - - const finalWalletTx: WalletTransaction = buildSmartAccountTransaction({ - to: walletTx.to, - value: walletTx.value, - data: walletTx.data, // for token transfers use encodeTransfer - operation: walletTx.operation, - targetTxGas: gasEstimate1, - baseGas: baseGas, - refundReceiver: ZERO_ADDRESS, - gasPrice: refundDetails.gasPrice.toString(), //review - tokenGasPriceFactor: refundDetails.tokenGasPriceFactor.toString(), - gasToken: refundDetails.gasToken, - nonce - }) + const response = await this.estimateRequiredTxGas(estimateRequiredTxGas) - // If wallet is not deployed revise targetTxGas and baseGas - // Temp... - if(!(await this.isDeployed(chainId))) { - finalWalletTx.targetTxGas = 500000 - finalWalletTx.baseGas = baseGas + 22900 - } - - return finalWalletTx - } + // If we get this reponse zero, there has to be a way to estimate this fror undeployed wallet + // i. use really high value + // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] + + // considerable offset ref gnosis safe service client safeTxGas + const gasEstimate1 = Number(response.data.gas) + 50000 + console.log('required txgas estimate ', gasEstimate1) + + // Depending on feeToken provide baseGas! + + console.log('feeQuote.offset ', feeQuote.offset) + + const refundDetails: FeeRefundHandlePayment = { + gasUsed: gasEstimate1, + baseGas: gasEstimate1, + gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: ZERO_ADDRESS + } + + const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { + chainId, + walletAddress: connectedWallet, + feeRefundData: refundDetails + } + + const handlePaymentResponse = await this.estimateHandlePaymentGas(estimateHandlePaymentGas) + // If we get this reponse zero, there has to be a way to estimate this for undeployed wallet + // We could use constant value provided by the relayer + let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + + if (handlePaymentEstimate === 0) { + handlePaymentEstimate = 22900 + } + console.log('handlePaymentEstimate ', handlePaymentEstimate) + + // If the wallet deployment has to be appended then baseGas would change + const regularOffSet = 4928 + 2360 + const baseGas = 22900 + regularOffSet + additionalBaseGas // delegate call + event emission + state updates + potential deployment + + const finalWalletTx: WalletTransaction = buildSmartAccountTransaction({ + to: walletTx.to, + value: walletTx.value, + data: walletTx.data, // for token transfers use encodeTransfer + operation: walletTx.operation, + targetTxGas: gasEstimate1, + baseGas: baseGas, + refundReceiver: ZERO_ADDRESS, + gasPrice: refundDetails.gasPrice.toString(), //review + tokenGasPriceFactor: refundDetails.tokenGasPriceFactor.toString(), + gasToken: refundDetails.gasToken, + nonce + }) + + // If wallet is not deployed revise targetTxGas and baseGas + // Temp... + if (!(await this.isDeployed(chainId))) { + finalWalletTx.targetTxGas = 500000 + finalWalletTx.baseGas = baseGas + 22900 + } + + return finalWalletTx + } - /** + /** * Prepares compatible WalletTransaction object based on Transaction Request * @todo Write test case and limit batch size based on test results in scw-contracts * @notice This transaction is without fee refund (gasless) @@ -818,51 +868,53 @@ class SmartAccount { * @param chainId * @returns */ - async createTransactionBatch(transactionBatchDto: TransactionBatchDto): Promise { - const { transactions, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = transactionBatchDto - let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract(); - walletContract = walletContract.attach(this.address); - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0; - if(await this.isDeployed(chainId)) { - nonce = (await walletContract.getNonce(batchId)).toNumber(); - } - console.log('nonce: ', nonce); - - - const txs: MetaTransaction[] = []; - - for(let i=0; i < transactions.length; i++) { - - const innerTx: WalletTransaction = buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) - - txs.push(innerTx); - } + async createTransactionBatch( + transactionBatchDto: TransactionBatchDto + ): Promise { + const { + transactions, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = transactionBatchDto + let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() + walletContract = walletContract.attach(this.address) - const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( - this.multiSend(chainId).getContract(), - txs, - nonce - ); - console.log('wallet txn without refund ', walletTx); - - return walletTx + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (await this.isDeployed(chainId)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } + console.log('nonce: ', nonce) + + const txs: MetaTransaction[] = [] + + for (let i = 0; i < transactions.length; i++) { + const innerTx: WalletTransaction = buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) + + txs.push(innerTx) } + const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( + this.multiSend(chainId).getContract(), + txs, + nonce + ) + console.log('wallet txn without refund ', walletTx) + + return walletTx + } + /** * * @param chainId optional chainId * @returns Smart Wallet Contract instance attached with current smart account address (proxy) */ - smartAccount( - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): SmartWalletContract { + smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { const smartWallet = this.smartWalletContract[chainId][this.DEFAULT_VERSION] // Review @talha const address = this.address @@ -923,7 +975,7 @@ class SmartAccount { chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { // we will hit smart account endpoint to fetch deployed smart account info - const address = await this.getAddressForCounterfactualWallet({index, chainId}) + const address = await this.getAddressForCounterfactualWallet({ index, chainId }) this.address = address return address // return await this.getAddressForCounterfactualWallet(index,chainId); @@ -1001,4 +1053,4 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { backend_url: 'https://sdk-backend.staging.biconomy.io/v1' } -export default SmartAccount \ No newline at end of file +export default SmartAccount diff --git a/packages/smart-account/src/assets/index.ts b/packages/smart-account/src/assets/index.ts index 447acc609..b49c3d9df 100644 --- a/packages/smart-account/src/assets/index.ts +++ b/packages/smart-account/src/assets/index.ts @@ -16,22 +16,22 @@ export const MultiSend = { }, abi: [ { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" + inputs: [], + stateMutability: 'nonpayable', + type: 'constructor' }, { - "inputs": [ + inputs: [ { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" + internalType: 'bytes', + name: 'transactions', + type: 'bytes' } ], - "name": "multiSend", - "outputs": [], - "stateMutability": "payable", - "type": "function" + name: 'multiSend', + outputs: [], + stateMutability: 'payable', + type: 'function' } ] } @@ -54,17 +54,17 @@ export const MultiSendCallOnly = { }, abi: [ { - "inputs": [ + inputs: [ { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" + internalType: 'bytes', + name: 'transactions', + type: 'bytes' } ], - "name": "multiSend", - "outputs": [], - "stateMutability": "payable", - "type": "function" + name: 'multiSend', + outputs: [], + stateMutability: 'payable', + type: 'function' } ] } @@ -84,1002 +84,1002 @@ export const SmartWallet = { }, abi: [ { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "address", - "name": "handler", - "type": "address" + indexed: false, + internalType: 'address', + name: 'handler', + type: 'address' } ], - "name": "ChangedFallbackHandler", - "type": "event" + name: 'ChangedFallbackHandler', + type: 'event' }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" + indexed: false, + internalType: 'address', + name: 'module', + type: 'address' } ], - "name": "DisabledModule", - "type": "event" + name: 'DisabledModule', + type: 'event' }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "address", - "name": "_scw", - "type": "address" + indexed: true, + internalType: 'address', + name: '_scw', + type: 'address' }, { - "indexed": true, - "internalType": "address", - "name": "_oldEOA", - "type": "address" + indexed: true, + internalType: 'address', + name: '_oldEOA', + type: 'address' }, { - "indexed": true, - "internalType": "address", - "name": "_newEOA", - "type": "address" + indexed: true, + internalType: 'address', + name: '_newEOA', + type: 'address' } ], - "name": "EOAChanged", - "type": "event" + name: 'EOAChanged', + type: 'event' }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" + indexed: false, + internalType: 'address', + name: 'module', + type: 'address' } ], - "name": "EnabledModule", - "type": "event" + name: 'EnabledModule', + type: 'event' }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "address", - "name": "oldEntryPoint", - "type": "address" + indexed: false, + internalType: 'address', + name: 'oldEntryPoint', + type: 'address' }, { - "indexed": false, - "internalType": "address", - "name": "newEntryPoint", - "type": "address" + indexed: false, + internalType: 'address', + name: 'newEntryPoint', + type: 'address' } ], - "name": "EntryPointChanged", - "type": "event" + name: 'EntryPointChanged', + type: 'event' }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' }, { - "indexed": false, - "internalType": "uint256", - "name": "payment", - "type": "uint256" + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' } ], - "name": "ExecutionFailure", - "type": "event" + name: 'ExecutionFailure', + type: 'event' }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" + indexed: true, + internalType: 'address', + name: 'module', + type: 'address' } ], - "name": "ExecutionFromModuleFailure", - "type": "event" + name: 'ExecutionFromModuleFailure', + type: 'event' }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" + indexed: true, + internalType: 'address', + name: 'module', + type: 'address' } ], - "name": "ExecutionFromModuleSuccess", - "type": "event" + name: 'ExecutionFromModuleSuccess', + type: 'event' }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' }, { - "indexed": false, - "internalType": "uint256", - "name": "payment", - "type": "uint256" + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' } ], - "name": "ExecutionSuccess", - "type": "event" + name: 'ExecutionSuccess', + type: 'event' }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "address", - "name": "newImplementation", - "type": "address" + indexed: false, + internalType: 'address', + name: 'newImplementation', + type: 'address' } ], - "name": "ImplementationUpdated", - "type": "event" + name: 'ImplementationUpdated', + type: 'event' }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" + indexed: false, + internalType: 'uint8', + name: 'version', + type: 'uint8' } ], - "name": "Initialized", - "type": "event" + name: 'Initialized', + type: 'event' }, { - "stateMutability": "nonpayable", - "type": "fallback" + stateMutability: 'nonpayable', + type: 'fallback' }, { - "inputs": [], - "name": "VERSION", - "outputs": [ + inputs: [], + name: 'VERSION', + outputs: [ { - "internalType": "string", - "name": "", - "type": "string" + internalType: 'string', + name: '', + type: 'string' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" + internalType: 'bytes32', + name: 'dataHash', + type: 'bytes32' }, { - "internalType": "bytes", - "name": "data", - "type": "bytes" + internalType: 'bytes', + name: 'data', + type: 'bytes' }, { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" + internalType: 'bytes', + name: 'signatures', + type: 'bytes' } ], - "name": "checkSignatures", - "outputs": [], - "stateMutability": "view", - "type": "function" + name: 'checkSignatures', + outputs: [], + stateMutability: 'view', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "prevModule", - "type": "address" + internalType: 'address', + name: 'prevModule', + type: 'address' }, { - "internalType": "address", - "name": "module", - "type": "address" + internalType: 'address', + name: 'module', + type: 'address' } ], - "name": "disableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'disableModule', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [], - "name": "domainSeparator", - "outputs": [ + inputs: [], + name: 'domainSeparator', + outputs: [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" + internalType: 'bytes32', + name: '', + type: 'bytes32' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "module", - "type": "address" + internalType: 'address', + name: 'module', + type: 'address' } ], - "name": "enableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'enableModule', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "components": [ + components: [ { - "internalType": "address", - "name": "to", - "type": "address" + internalType: 'address', + name: 'to', + type: 'address' }, { - "internalType": "uint256", - "name": "value", - "type": "uint256" + internalType: 'uint256', + name: 'value', + type: 'uint256' }, { - "internalType": "bytes", - "name": "data", - "type": "bytes" + internalType: 'bytes', + name: 'data', + type: 'bytes' }, { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' }, { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" + internalType: 'uint256', + name: 'targetTxGas', + type: 'uint256' } ], - "internalType": "struct WalletStorage.Transaction", - "name": "_tx", - "type": "tuple" + internalType: 'struct WalletStorage.Transaction', + name: '_tx', + type: 'tuple' }, { - "components": [ + components: [ { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" + internalType: 'uint256', + name: 'baseGas', + type: 'uint256' }, { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" + internalType: 'uint256', + name: 'gasPrice', + type: 'uint256' }, { - "internalType": "address", - "name": "gasToken", - "type": "address" + internalType: 'address', + name: 'gasToken', + type: 'address' }, { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" + internalType: 'address payable', + name: 'refundReceiver', + type: 'address' } ], - "internalType": "struct WalletStorage.FeeRefund", - "name": "refundInfo", - "type": "tuple" + internalType: 'struct WalletStorage.FeeRefund', + name: 'refundInfo', + type: 'tuple' }, { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" + internalType: 'uint256', + name: '_nonce', + type: 'uint256' } ], - "name": "encodeTransactionData", - "outputs": [ + name: 'encodeTransactionData', + outputs: [ { - "internalType": "bytes", - "name": "", - "type": "bytes" + internalType: 'bytes', + name: '', + type: 'bytes' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' }, { - "inputs": [], - "name": "entryPoint", - "outputs": [ + inputs: [], + name: 'entryPoint', + outputs: [ { - "internalType": "address", - "name": "", - "type": "address" + internalType: 'address', + name: '', + type: 'address' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "dest", - "type": "address" + internalType: 'address', + name: 'dest', + type: 'address' }, { - "internalType": "uint256", - "name": "value", - "type": "uint256" + internalType: 'uint256', + name: 'value', + type: 'uint256' }, { - "internalType": "bytes", - "name": "func", - "type": "bytes" + internalType: 'bytes', + name: 'func', + type: 'bytes' } ], - "name": "exec", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'exec', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address[]", - "name": "dest", - "type": "address[]" + internalType: 'address[]', + name: 'dest', + type: 'address[]' }, { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" + internalType: 'bytes[]', + name: 'func', + type: 'bytes[]' } ], - "name": "execBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'execBatch', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "dest", - "type": "address" + internalType: 'address', + name: 'dest', + type: 'address' }, { - "internalType": "uint256", - "name": "value", - "type": "uint256" + internalType: 'uint256', + name: 'value', + type: 'uint256' }, { - "internalType": "bytes", - "name": "func", - "type": "bytes" + internalType: 'bytes', + name: 'func', + type: 'bytes' } ], - "name": "execFromEntryPoint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'execFromEntryPoint', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "components": [ + components: [ { - "internalType": "address", - "name": "to", - "type": "address" + internalType: 'address', + name: 'to', + type: 'address' }, { - "internalType": "uint256", - "name": "value", - "type": "uint256" + internalType: 'uint256', + name: 'value', + type: 'uint256' }, { - "internalType": "bytes", - "name": "data", - "type": "bytes" + internalType: 'bytes', + name: 'data', + type: 'bytes' }, { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' }, { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" + internalType: 'uint256', + name: 'targetTxGas', + type: 'uint256' } ], - "internalType": "struct WalletStorage.Transaction", - "name": "_tx", - "type": "tuple" + internalType: 'struct WalletStorage.Transaction', + name: '_tx', + type: 'tuple' }, { - "internalType": "uint256", - "name": "batchId", - "type": "uint256" + internalType: 'uint256', + name: 'batchId', + type: 'uint256' }, { - "components": [ + components: [ { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" + internalType: 'uint256', + name: 'baseGas', + type: 'uint256' }, { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" + internalType: 'uint256', + name: 'gasPrice', + type: 'uint256' }, { - "internalType": "address", - "name": "gasToken", - "type": "address" + internalType: 'address', + name: 'gasToken', + type: 'address' }, { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" + internalType: 'address payable', + name: 'refundReceiver', + type: 'address' } ], - "internalType": "struct WalletStorage.FeeRefund", - "name": "refundInfo", - "type": "tuple" + internalType: 'struct WalletStorage.FeeRefund', + name: 'refundInfo', + type: 'tuple' }, { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" + internalType: 'bytes', + name: 'signatures', + type: 'bytes' } ], - "name": "execTransaction", - "outputs": [ + name: 'execTransaction', + outputs: [ { - "internalType": "bool", - "name": "success", - "type": "bool" + internalType: 'bool', + name: 'success', + type: 'bool' } ], - "stateMutability": "payable", - "type": "function" + stateMutability: 'payable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "to", - "type": "address" + internalType: 'address', + name: 'to', + type: 'address' }, { - "internalType": "uint256", - "name": "value", - "type": "uint256" + internalType: 'uint256', + name: 'value', + type: 'uint256' }, { - "internalType": "bytes", - "name": "data", - "type": "bytes" + internalType: 'bytes', + name: 'data', + type: 'bytes' }, { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' } ], - "name": "execTransactionFromModule", - "outputs": [ + name: 'execTransactionFromModule', + outputs: [ { - "internalType": "bool", - "name": "success", - "type": "bool" + internalType: 'bool', + name: 'success', + type: 'bool' } ], - "stateMutability": "nonpayable", - "type": "function" + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "to", - "type": "address" + internalType: 'address', + name: 'to', + type: 'address' }, { - "internalType": "uint256", - "name": "value", - "type": "uint256" + internalType: 'uint256', + name: 'value', + type: 'uint256' }, { - "internalType": "bytes", - "name": "data", - "type": "bytes" + internalType: 'bytes', + name: 'data', + type: 'bytes' }, { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' } ], - "name": "execTransactionFromModuleReturnData", - "outputs": [ + name: 'execTransactionFromModuleReturnData', + outputs: [ { - "internalType": "bool", - "name": "success", - "type": "bool" + internalType: 'bool', + name: 'success', + type: 'bool' }, { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" + internalType: 'bytes', + name: 'returnData', + type: 'bytes' } ], - "stateMutability": "nonpayable", - "type": "function" + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [], - "name": "getChainId", - "outputs": [ + inputs: [], + name: 'getChainId', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + internalType: 'uint256', + name: '', + type: 'uint256' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "start", - "type": "address" + internalType: 'address', + name: 'start', + type: 'address' }, { - "internalType": "uint256", - "name": "pageSize", - "type": "uint256" + internalType: 'uint256', + name: 'pageSize', + type: 'uint256' } ], - "name": "getModulesPaginated", - "outputs": [ + name: 'getModulesPaginated', + outputs: [ { - "internalType": "address[]", - "name": "array", - "type": "address[]" + internalType: 'address[]', + name: 'array', + type: 'address[]' }, { - "internalType": "address", - "name": "next", - "type": "address" + internalType: 'address', + name: 'next', + type: 'address' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "batchId", - "type": "uint256" + internalType: 'uint256', + name: 'batchId', + type: 'uint256' } ], - "name": "getNonce", - "outputs": [ + name: 'getNonce', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + internalType: 'uint256', + name: '', + type: 'uint256' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "to", - "type": "address" + internalType: 'address', + name: 'to', + type: 'address' }, { - "internalType": "uint256", - "name": "value", - "type": "uint256" + internalType: 'uint256', + name: 'value', + type: 'uint256' }, { - "internalType": "bytes", - "name": "data", - "type": "bytes" + internalType: 'bytes', + name: 'data', + type: 'bytes' }, { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' }, { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" + internalType: 'uint256', + name: 'targetTxGas', + type: 'uint256' }, { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" + internalType: 'uint256', + name: 'baseGas', + type: 'uint256' }, { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" + internalType: 'uint256', + name: 'gasPrice', + type: 'uint256' }, { - "internalType": "address", - "name": "gasToken", - "type": "address" + internalType: 'address', + name: 'gasToken', + type: 'address' }, { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" + internalType: 'address payable', + name: 'refundReceiver', + type: 'address' }, { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" + internalType: 'uint256', + name: '_nonce', + type: 'uint256' } ], - "name": "getTransactionHash", - "outputs": [ + name: 'getTransactionHash', + outputs: [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" + internalType: 'bytes32', + name: '', + type: 'bytes32' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "_owner", - "type": "address" + internalType: 'address', + name: '_owner', + type: 'address' }, { - "internalType": "address", - "name": "_entryPoint", - "type": "address" + internalType: 'address', + name: '_entryPoint', + type: 'address' }, { - "internalType": "address", - "name": "_handler", - "type": "address" + internalType: 'address', + name: '_handler', + type: 'address' } ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'init', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "module", - "type": "address" + internalType: 'address', + name: 'module', + type: 'address' } ], - "name": "isModuleEnabled", - "outputs": [ + name: 'isModuleEnabled', + outputs: [ { - "internalType": "bool", - "name": "", - "type": "bool" + internalType: 'bool', + name: '', + type: 'bool' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + internalType: 'uint256', + name: '', + type: 'uint256' } ], - "name": "nonces", - "outputs": [ + name: 'nonces', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + internalType: 'uint256', + name: '', + type: 'uint256' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' }, { - "inputs": [], - "name": "owner", - "outputs": [ + inputs: [], + name: 'owner', + outputs: [ { - "internalType": "address", - "name": "", - "type": "address" + internalType: 'address', + name: '', + type: 'address' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "token", - "type": "address" + internalType: 'address', + name: 'token', + type: 'address' }, { - "internalType": "address", - "name": "dest", - "type": "address" + internalType: 'address', + name: 'dest', + type: 'address' }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + internalType: 'uint256', + name: 'amount', + type: 'uint256' } ], - "name": "pullTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'pullTokens', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "to", - "type": "address" + internalType: 'address', + name: 'to', + type: 'address' }, { - "internalType": "uint256", - "name": "value", - "type": "uint256" + internalType: 'uint256', + name: 'value', + type: 'uint256' }, { - "internalType": "bytes", - "name": "data", - "type": "bytes" + internalType: 'bytes', + name: 'data', + type: 'bytes' }, { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' } ], - "name": "requiredTxGas", - "outputs": [ + name: 'requiredTxGas', + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + internalType: 'uint256', + name: '', + type: 'uint256' } ], - "stateMutability": "nonpayable", - "type": "function" + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "handler", - "type": "address" + internalType: 'address', + name: 'handler', + type: 'address' } ], - "name": "setFallbackHandler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'setFallbackHandler', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "_newOwner", - "type": "address" + internalType: 'address', + name: '_newOwner', + type: 'address' } ], - "name": "setOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'setOwner', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" + internalType: 'bytes4', + name: 'interfaceId', + type: 'bytes4' } ], - "name": "supportsInterface", - "outputs": [ + name: 'supportsInterface', + outputs: [ { - "internalType": "bool", - "name": "", - "type": "bool" + internalType: 'bool', + name: '', + type: 'bool' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address payable", - "name": "dest", - "type": "address" + internalType: 'address payable', + name: 'dest', + type: 'address' }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + internalType: 'uint256', + name: 'amount', + type: 'uint256' } ], - "name": "transfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'transfer', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "_entryPoint", - "type": "address" + internalType: 'address', + name: '_entryPoint', + type: 'address' } ], - "name": "updateEntryPoint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'updateEntryPoint', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "_implementation", - "type": "address" + internalType: 'address', + name: '_implementation', + type: 'address' } ], - "name": "updateImplementation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'updateImplementation', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "components": [ + components: [ { - "internalType": "address", - "name": "sender", - "type": "address" + internalType: 'address', + name: 'sender', + type: 'address' }, { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" + internalType: 'uint256', + name: 'nonce', + type: 'uint256' }, { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" + internalType: 'bytes', + name: 'initCode', + type: 'bytes' }, { - "internalType": "bytes", - "name": "callData", - "type": "bytes" + internalType: 'bytes', + name: 'callData', + type: 'bytes' }, { - "internalType": "uint256", - "name": "callGas", - "type": "uint256" + internalType: 'uint256', + name: 'callGas', + type: 'uint256' }, { - "internalType": "uint256", - "name": "verificationGas", - "type": "uint256" + internalType: 'uint256', + name: 'verificationGas', + type: 'uint256' }, { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" + internalType: 'uint256', + name: 'preVerificationGas', + type: 'uint256' }, { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" + internalType: 'uint256', + name: 'maxFeePerGas', + type: 'uint256' }, { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" + internalType: 'uint256', + name: 'maxPriorityFeePerGas', + type: 'uint256' }, { - "internalType": "address", - "name": "paymaster", - "type": "address" + internalType: 'address', + name: 'paymaster', + type: 'address' }, { - "internalType": "bytes", - "name": "paymasterData", - "type": "bytes" + internalType: 'bytes', + name: 'paymasterData', + type: 'bytes' }, { - "internalType": "bytes", - "name": "signature", - "type": "bytes" + internalType: 'bytes', + name: 'signature', + type: 'bytes' } ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" + internalType: 'struct UserOperation', + name: 'userOp', + type: 'tuple' }, { - "internalType": "bytes32", - "name": "requestId", - "type": "bytes32" + internalType: 'bytes32', + name: 'requestId', + type: 'bytes32' }, { - "internalType": "uint256", - "name": "requiredPrefund", - "type": "uint256" + internalType: 'uint256', + name: 'requiredPrefund', + type: 'uint256' } ], - "name": "validateUserOp", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + name: 'validateUserOp', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' } ] } @@ -1102,146 +1102,146 @@ export const WalletFactory = { }, abi: [ { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "_baseImpl", - "type": "address" + internalType: 'address', + name: '_baseImpl', + type: 'address' } ], - "stateMutability": "nonpayable", - "type": "constructor" + stateMutability: 'nonpayable', + type: 'constructor' }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "address", - "name": "_proxy", - "type": "address" + indexed: true, + internalType: 'address', + name: '_proxy', + type: 'address' }, { - "indexed": true, - "internalType": "address", - "name": "_implementation", - "type": "address" + indexed: true, + internalType: 'address', + name: '_implementation', + type: 'address' }, { - "indexed": true, - "internalType": "address", - "name": "_owner", - "type": "address" + indexed: true, + internalType: 'address', + name: '_owner', + type: 'address' } ], - "name": "WalletCreated", - "type": "event" + name: 'WalletCreated', + type: 'event' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "_owner", - "type": "address" + internalType: 'address', + name: '_owner', + type: 'address' }, { - "internalType": "address", - "name": "_entryPoint", - "type": "address" + internalType: 'address', + name: '_entryPoint', + type: 'address' }, { - "internalType": "address", - "name": "_handler", - "type": "address" + internalType: 'address', + name: '_handler', + type: 'address' }, { - "internalType": "uint256", - "name": "_index", - "type": "uint256" + internalType: 'uint256', + name: '_index', + type: 'uint256' } ], - "name": "deployCounterFactualWallet", - "outputs": [ + name: 'deployCounterFactualWallet', + outputs: [ { - "internalType": "address", - "name": "proxy", - "type": "address" + internalType: 'address', + name: 'proxy', + type: 'address' } ], - "stateMutability": "nonpayable", - "type": "function" + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "_owner", - "type": "address" + internalType: 'address', + name: '_owner', + type: 'address' }, { - "internalType": "address", - "name": "_entryPoint", - "type": "address" + internalType: 'address', + name: '_entryPoint', + type: 'address' }, { - "internalType": "address", - "name": "_handler", - "type": "address" + internalType: 'address', + name: '_handler', + type: 'address' } ], - "name": "deployWallet", - "outputs": [ + name: 'deployWallet', + outputs: [ { - "internalType": "address", - "name": "proxy", - "type": "address" + internalType: 'address', + name: 'proxy', + type: 'address' } ], - "stateMutability": "nonpayable", - "type": "function" + stateMutability: 'nonpayable', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "_owner", - "type": "address" + internalType: 'address', + name: '_owner', + type: 'address' }, { - "internalType": "uint256", - "name": "_index", - "type": "uint256" + internalType: 'uint256', + name: '_index', + type: 'uint256' } ], - "name": "getAddressForCounterfactualWallet", - "outputs": [ + name: 'getAddressForCounterfactualWallet', + outputs: [ { - "internalType": "address", - "name": "_wallet", - "type": "address" + internalType: 'address', + name: '_wallet', + type: 'address' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "", - "type": "address" + internalType: 'address', + name: '', + type: 'address' } ], - "name": "isWalletExist", - "outputs": [ + name: 'isWalletExist', + outputs: [ { - "internalType": "bool", - "name": "", - "type": "bool" + internalType: 'bool', + name: '', + type: 'bool' } ], - "stateMutability": "view", - "type": "function" + stateMutability: 'view', + type: 'function' } ] } @@ -1252,7 +1252,22 @@ export const GasEstimator = { contractName: 'WalletFactory', version: '1.0.3', networkAddresses: { - '5': '0xc6e8748a08e591250a3eed526e9455859633c6c4', + '5': '0xc6e8748a08e591250a3eed526e9455859633c6c4' }, - abi: [ { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "estimate", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" }, { "internalType": "bytes", "name": "result", "type": "bytes" }, { "internalType": "uint256", "name": "gas", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ] -} \ No newline at end of file + abi: [ + { + inputs: [ + { internalType: 'address', name: '_to', type: 'address' }, + { internalType: 'bytes', name: '_data', type: 'bytes' } + ], + name: 'estimate', + outputs: [ + { internalType: 'bool', name: 'success', type: 'bool' }, + { internalType: 'bytes', name: 'result', type: 'bytes' }, + { internalType: 'uint256', name: 'gas', type: 'uint256' } + ], + stateMutability: 'nonpayable', + type: 'function' + } + ] +} diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 63d9af4a3..ab70d0945 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -1,15 +1,12 @@ import { BytesLike, Wallet, BigNumberish } from 'ethers' -import { - ChainNames, - ChainId, -} from '@biconomy-sdk/core-types' +import { ChainNames, ChainId } from '@biconomy-sdk/core-types' import { Web3Provider } from '@ethersproject/providers' // walletProvider: WalletProviderLike // TODO : Ability to provide custom URLs for all supported networks export interface SmartAccountConfig { activeNetworkId: ChainId // same - supportedNetworksIds: ChainId[] // Network[] chainId: CbainId, rpcUrl?: string + supportedNetworksIds: ChainId[] // Network[] chainId: CbainId, rpcUrl?: string backend_url: string } // relayer_url diff --git a/packages/smart-account/src/utils/FetchContractsInfo.ts b/packages/smart-account/src/utils/FetchContractsInfo.ts index a58b16b74..ecf69335a 100644 --- a/packages/smart-account/src/utils/FetchContractsInfo.ts +++ b/packages/smart-account/src/utils/FetchContractsInfo.ts @@ -75,7 +75,7 @@ export function findContractAddressesByVersion( return element.version === smartAccountVersion })?.address - if ( !chainInfo ){ + if (!chainInfo) { throw new Error('Chain Not Found') } return { @@ -85,6 +85,5 @@ export function findContractAddressesByVersion( multiSendCallAddress, entryPointAddress, fallBackHandlerAddress - } } diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index f44273718..e8742e119 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -72,504 +72,520 @@ describe('Wallet integration', function () { .persist() .get('/v1/chains/') .reply(200, { - "message": "Success", - "code": 200, - "data": [ - { - "chainId": 1, - "name": "Ethereum", - "symbol": "ETH", - "isL2": false, - "isMainnet": true, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://etherscan.io/address/", - "txHash": "https://etherscan.io/address/", - "api": "https://api.etherscan.io/" - }, - "ensRegistryAddress": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", - "walletFactory": [ - { - "version": "0.0.1", - "address": "0x050bca32264195976Fe00BcA566B548413A9E658", - "abi": "" - } - ], - "multiSend": [ - { - "version": "0.0.1", - "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "0.0.1", - "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "0.0.1", - "address": "0x056DcE811A2b695171274855E7246039Df298158", - "abi": "" - } - ], - "entryPoint": [ - { - "version": "0.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "0.0.1", - "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://kovan.infura.io/v3/d126f392798444609246423b06116c77", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 1, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "name": "Ether", - "symbol": "ETH", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", - "isNative": true - } + message: 'Success', + code: 200, + data: [ + { + chainId: 1, + name: 'Ethereum', + symbol: 'ETH', + isL2: false, + isMainnet: true, + description: '', + blockExplorerUriTemplate: { + address: 'https://etherscan.io/address/', + txHash: 'https://etherscan.io/address/', + api: 'https://api.etherscan.io/' }, - { - "chainId": 137, - "name": "Polygon", - "symbol": "MATIC", - "isL2": true, - "isMainnet": true, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://polygonscan.com/address/", - "txHash": "https://polygonscan.com/address/", - "api": "https://api.polygonscan.com/" - }, - "ensRegistryAddress": "", - "walletFactory": [ - { - "version": "0.0.1", - "address": "0x050bca32264195976Fe00BcA566B548413A9E658", - "abi": "" - } - ], - "multiSend": [ - { - "version": "0.0.1", - "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "0.0.1", - "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "0.0.1", - "address": "0x056DcE811A2b695171274855E7246039Df298158", - "abi": "" - } - ], - "entryPoint": [ - { - "version": "0.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "0.0.1", - "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://polygon-mainnet.g.alchemy.com/v2/s6bOKN9QDGXpVbsqzJMl_AHeZHNOCTcM", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 137, - "address": "0x0000000000000000000000000000000000001010", - "name": "Polygon Matic", - "symbol": "Matic", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png", - "isNative": true - } - }, - { - "chainId": 56, - "name": "BSC Mainnet", - "symbol": "BNB", - "isL2": true, - "isMainnet": true, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://bscscan.com/address/", - "txHash": "https://bscscan.com/address/", - "api": "https://bscscan.com/" - }, - "ensRegistryAddress": "", - "walletFactory": [ - { - "version": "0.0.1", - "address": "0x050bca32264195976Fe00BcA566B548413A9E658", - "abi": "" - } - ], - "multiSend": [ - { - "version": "0.0.1", - "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "0.0.1", - "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "0.0.1", - "address": "0x056DcE811A2b695171274855E7246039Df298158", - "abi": "" - } - ], - "entryPoint": [ - { - "version": "0.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "0.0.1", - "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://bsc-dataseed2.binance.org/", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 56, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "name": "BNB Coin", - "symbol": "BNB", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png", - "isNative": true - } + ensRegistryAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + walletFactory: [ + { + version: '0.0.1', + address: '0x050bca32264195976Fe00BcA566B548413A9E658', + abi: '' + } + ], + multiSend: [ + { + version: '0.0.1', + address: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + abi: '' + } + ], + multiSendCall: [ + { + version: '0.0.1', + address: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + EoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + EoaChangedEventHit: false, + wallet: [ + { + version: '0.0.1', + address: '0x056DcE811A2b695171274855E7246039Df298158', + abi: '' + } + ], + entryPoint: [ + { + version: '0.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + fallBackHandler: [ + { + version: '0.0.1', + address: '0xFc942E06c54d08502557FA40e1Aa23C5258132D5', + abi: '' + } + ], + relayerUrl: '', + providerUrl: 'https://kovan.infura.io/v3/d126f392798444609246423b06116c77', + indexerUrl: '', + backendNodeUrl: '', + token: { + chainId: 1, + address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + name: 'Ether', + symbol: 'ETH', + decimals: 18, + logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png', + isNative: true + } + }, + { + chainId: 137, + name: 'Polygon', + symbol: 'MATIC', + isL2: true, + isMainnet: true, + description: '', + blockExplorerUriTemplate: { + address: 'https://polygonscan.com/address/', + txHash: 'https://polygonscan.com/address/', + api: 'https://api.polygonscan.com/' }, - { - "chainId": 5, - "name": "Goerli", - "symbol": "ETH", - "isL2": false, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://goerli.etherscan.io/address/", - "txHash": "https://goerli.etherscan.io/address/", - "api": "https://goerli.etherscan.io/" - }, - "ensRegistryAddress": "", - "walletFactory": [ - { - "version": "0.0.1", - "address": "0x050bca32264195976Fe00BcA566B548413A9E658", - "abi": "" - } - ], - "multiSend": [ - { - "version": "0.0.1", - "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "0.0.1", - "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "0.0.1", - "address": "0x056DcE811A2b695171274855E7246039Df298158", - "abi": "" - } - ], - "entryPoint": [ - { - "version": "0.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "0.0.1", - "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 5, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "name": "Ether", - "symbol": "ETH", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", - "isNative": true - } + ensRegistryAddress: '', + walletFactory: [ + { + version: '0.0.1', + address: '0x050bca32264195976Fe00BcA566B548413A9E658', + abi: '' + } + ], + multiSend: [ + { + version: '0.0.1', + address: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + abi: '' + } + ], + multiSendCall: [ + { + version: '0.0.1', + address: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + EoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + EoaChangedEventHit: false, + wallet: [ + { + version: '0.0.1', + address: '0x056DcE811A2b695171274855E7246039Df298158', + abi: '' + } + ], + entryPoint: [ + { + version: '0.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + fallBackHandler: [ + { + version: '0.0.1', + address: '0xFc942E06c54d08502557FA40e1Aa23C5258132D5', + abi: '' + } + ], + relayerUrl: '', + providerUrl: + 'https://polygon-mainnet.g.alchemy.com/v2/s6bOKN9QDGXpVbsqzJMl_AHeZHNOCTcM', + indexerUrl: '', + backendNodeUrl: '', + token: { + chainId: 137, + address: '0x0000000000000000000000000000000000001010', + name: 'Polygon Matic', + symbol: 'Matic', + decimals: 18, + logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png', + isNative: true + } + }, + { + chainId: 56, + name: 'BSC Mainnet', + symbol: 'BNB', + isL2: true, + isMainnet: true, + description: '', + blockExplorerUriTemplate: { + address: 'https://bscscan.com/address/', + txHash: 'https://bscscan.com/address/', + api: 'https://bscscan.com/' }, - { - "chainId": 80001, - "name": "Polygon Mumbai", - "symbol": "MATIC", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" - }, - "ensRegistryAddress": "", - "walletFactory": [ - { - "version": "0.0.1", - "address": "0x050bca32264195976Fe00BcA566B548413A9E658", - "abi": "" - } - ], - "multiSend": [ - { - "version": "0.0.1", - "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "0.0.1", - "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "0.0.1", - "address": "0x056DcE811A2b695171274855E7246039Df298158", - "abi": "" - } - ], - "entryPoint": [ - { - "version": "0.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "0.0.1", - "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 80001, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "name": "Polygon Matic", - "symbol": "Matic", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png", - "isNative": true - } + ensRegistryAddress: '', + walletFactory: [ + { + version: '0.0.1', + address: '0x050bca32264195976Fe00BcA566B548413A9E658', + abi: '' + } + ], + multiSend: [ + { + version: '0.0.1', + address: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + abi: '' + } + ], + multiSendCall: [ + { + version: '0.0.1', + address: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + EoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + EoaChangedEventHit: false, + wallet: [ + { + version: '0.0.1', + address: '0x056DcE811A2b695171274855E7246039Df298158', + abi: '' + } + ], + entryPoint: [ + { + version: '0.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + fallBackHandler: [ + { + version: '0.0.1', + address: '0xFc942E06c54d08502557FA40e1Aa23C5258132D5', + abi: '' + } + ], + relayerUrl: '', + providerUrl: 'https://bsc-dataseed2.binance.org/', + indexerUrl: '', + backendNodeUrl: '', + token: { + chainId: 56, + address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + name: 'BNB Coin', + symbol: 'BNB', + decimals: 18, + logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png', + isNative: true + } + }, + { + chainId: 5, + name: 'Goerli', + symbol: 'ETH', + isL2: false, + isMainnet: false, + description: '', + blockExplorerUriTemplate: { + address: 'https://goerli.etherscan.io/address/', + txHash: 'https://goerli.etherscan.io/address/', + api: 'https://goerli.etherscan.io/' }, - { - "chainId": 97, - "name": "BSC Testnet", - "symbol": "BNB", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://bscscan.com//address/", - "txHash": "https://bscscan.com/address/", - "api": "https://bscscan.com/" - }, - "ensRegistryAddress": "", - "walletFactory": [ - { - "version": "0.0.1", - "address": "0x050bca32264195976Fe00BcA566B548413A9E658", - "abi": "" - } - ], - "multiSend": [ - { - "version": "0.0.1", - "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "0.0.1", - "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "0.0.1", - "address": "0x056DcE811A2b695171274855E7246039Df298158", - "abi": "" - } - ], - "entryPoint": [ - { - "version": "0.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "0.0.1", - "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://data-seed-prebsc-1-s1.binance.org:8545/", - "indexerUrl": "", - "backendNodeUrl": "" + ensRegistryAddress: '', + walletFactory: [ + { + version: '0.0.1', + address: '0x050bca32264195976Fe00BcA566B548413A9E658', + abi: '' + } + ], + multiSend: [ + { + version: '0.0.1', + address: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + abi: '' + } + ], + multiSendCall: [ + { + version: '0.0.1', + address: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + EoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + EoaChangedEventHit: false, + wallet: [ + { + version: '0.0.1', + address: '0x056DcE811A2b695171274855E7246039Df298158', + abi: '' + } + ], + entryPoint: [ + { + version: '0.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + fallBackHandler: [ + { + version: '0.0.1', + address: '0xFc942E06c54d08502557FA40e1Aa23C5258132D5', + abi: '' + } + ], + relayerUrl: '', + providerUrl: 'https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg', + indexerUrl: '', + backendNodeUrl: '', + token: { + chainId: 5, + address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + name: 'Ether', + symbol: 'ETH', + decimals: 18, + logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png', + isNative: true + } + }, + { + chainId: 80001, + name: 'Polygon Mumbai', + symbol: 'MATIC', + isL2: true, + isMainnet: false, + description: '', + blockExplorerUriTemplate: { + address: 'https://mumbai.polygonscan.com/address/', + txHash: 'https://mumbai.polygonscan.com/address/', + api: 'https://api.mumbai.polygonscan.com/' }, - { - "chainId": 1337, - "name": "Ganache", - "symbol": "ETH", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" - }, - "ensRegistryAddress": "", - "walletFactory": [ - { - "version": "0.0.1", - "address": "0x85c0995669f8a0173a5B5F6003DA060E8D17f0c3", - "abi": "" - } - ], - "multiSend": [ - { - "version": "0.0.1", - "address": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "0.0.1", - "address": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "0.0.1", - "address": "0x0ba464506a3D66C962121e3C25ed56678A2585B6", - "abi": "" - } - ], - "entryPoint": [ - { - "version": "0.0.1", - "address": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "0.0.1", - "address": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "http://localhost:8545", - "indexerUrl": "", - "backendNodeUrl": "" + ensRegistryAddress: '', + walletFactory: [ + { + version: '0.0.1', + address: '0x050bca32264195976Fe00BcA566B548413A9E658', + abi: '' + } + ], + multiSend: [ + { + version: '0.0.1', + address: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + abi: '' + } + ], + multiSendCall: [ + { + version: '0.0.1', + address: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + EoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + EoaChangedEventHit: false, + wallet: [ + { + version: '0.0.1', + address: '0x056DcE811A2b695171274855E7246039Df298158', + abi: '' + } + ], + entryPoint: [ + { + version: '0.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + fallBackHandler: [ + { + version: '0.0.1', + address: '0xFc942E06c54d08502557FA40e1Aa23C5258132D5', + abi: '' + } + ], + relayerUrl: '', + providerUrl: + 'https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b', + indexerUrl: '', + backendNodeUrl: '', + token: { + chainId: 80001, + address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + name: 'Polygon Matic', + symbol: 'Matic', + decimals: 18, + logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png', + isNative: true } + }, + { + chainId: 97, + name: 'BSC Testnet', + symbol: 'BNB', + isL2: true, + isMainnet: false, + description: '', + blockExplorerUriTemplate: { + address: 'https://bscscan.com//address/', + txHash: 'https://bscscan.com/address/', + api: 'https://bscscan.com/' + }, + ensRegistryAddress: '', + walletFactory: [ + { + version: '0.0.1', + address: '0x050bca32264195976Fe00BcA566B548413A9E658', + abi: '' + } + ], + multiSend: [ + { + version: '0.0.1', + address: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + abi: '' + } + ], + multiSendCall: [ + { + version: '0.0.1', + address: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + EoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + EoaChangedEventHit: false, + wallet: [ + { + version: '0.0.1', + address: '0x056DcE811A2b695171274855E7246039Df298158', + abi: '' + } + ], + entryPoint: [ + { + version: '0.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + fallBackHandler: [ + { + version: '0.0.1', + address: '0xFc942E06c54d08502557FA40e1Aa23C5258132D5', + abi: '' + } + ], + relayerUrl: '', + providerUrl: 'https://data-seed-prebsc-1-s1.binance.org:8545/', + indexerUrl: '', + backendNodeUrl: '' + }, + { + chainId: 1337, + name: 'Ganache', + symbol: 'ETH', + isL2: true, + isMainnet: false, + description: '', + blockExplorerUriTemplate: { + address: 'https://mumbai.polygonscan.com/address/', + txHash: 'https://mumbai.polygonscan.com/address/', + api: 'https://api.mumbai.polygonscan.com/' + }, + ensRegistryAddress: '', + walletFactory: [ + { + version: '0.0.1', + address: '0x85c0995669f8a0173a5B5F6003DA060E8D17f0c3', + abi: '' + } + ], + multiSend: [ + { + version: '0.0.1', + address: '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', + abi: '' + } + ], + multiSendCall: [ + { + version: '0.0.1', + address: '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + EoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + EoaChangedEventHit: false, + wallet: [ + { + version: '0.0.1', + address: '0x0ba464506a3D66C962121e3C25ed56678A2585B6', + abi: '' + } + ], + entryPoint: [ + { + version: '0.0.1', + address: '0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d', + abi: '' + } + ], + fallBackHandler: [ + { + version: '0.0.1', + address: '0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4', + abi: '' + } + ], + relayerUrl: '', + providerUrl: 'http://localhost:8545', + indexerUrl: '', + backendNodeUrl: '' + } ] - }) + }) }) it('Should init and return details of smart account', async () => { @@ -675,8 +691,7 @@ describe('Wallet integration', function () { value: ethers.utils.parseEther('1') } - const smartAccountTransaction: WalletTransaction = - await smartAccount.createTransaction(tx) + const smartAccountTransaction: WalletTransaction = await smartAccount.createTransaction(tx) const signature = await smartAccount.signTransaction(smartAccountTransaction) console.log('signature is: ', signature) @@ -726,7 +741,7 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.GOERLI ,ChainId.GANACHE] // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names }) const smartAccount = await wallet.init() @@ -755,8 +770,7 @@ describe('Wallet integration', function () { value: ethers.utils.parseEther('0.5') } - const smartAccountTransaction: WalletTransaction = - await smartAccount.createTransaction(tx) + const smartAccountTransaction: WalletTransaction = await smartAccount.createTransaction(tx) // Attach relayer before sending a transaction @@ -784,7 +798,7 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.GOERLI ,ChainId.GANACHE] // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names }) const smartAccount = await wallet.init() @@ -817,8 +831,8 @@ describe('Wallet integration', function () { txs.push(tx1) - console.log('receiver 1 ', signerAddress); - console.log('receiver 2 ', (await ethnode.provider?.getSigner(1).getAddress())); + console.log('receiver 1 ', signerAddress) + console.log('receiver 2 ', await ethnode.provider?.getSigner(1).getAddress()) const tx2: Transaction = { to: (await ethnode.provider?.getSigner(1).getAddress()) || signerAddress, @@ -828,8 +842,9 @@ describe('Wallet integration', function () { txs.push(tx2) - const smartAccountTransaction: WalletTransaction = - await smartAccount.createTransactionBatch(txs) + const smartAccountTransaction: WalletTransaction = await smartAccount.createTransactionBatch( + txs + ) // Attach relayer before sending a transaction diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index 2d39fc78d..211e76b4a 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -8,7 +8,12 @@ import { PopulatedTransaction } from 'ethers' -import { ExecTransaction, FeeRefund, WalletTransaction, SmartAccountSignature } from '@biconomy-sdk/core-types' +import { + ExecTransaction, + FeeRefund, + WalletTransaction, + SmartAccountSignature +} from '@biconomy-sdk/core-types' import { TypedDataSigner } from '@ethersproject/abstract-signer' import { AddressZero } from '@ethersproject/constants' @@ -43,8 +48,6 @@ export const EIP712_SMART_ACCOUNT_MESSAGE_TYPE = { SmartAccountMessage: [{ type: 'bytes', name: 'message' }] } - - export const calculateSmartAccountDomainSeparator = ( wallet: Contract, chainId: BigNumberish From 7c38e4da0e4dae9eada8433a2995c9d2ce866081 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 29 Aug 2022 19:43:04 +0400 Subject: [PATCH 0113/1247] working with undeployed wallet estimate api --- packages/core-types/src/transaction.types.ts | 2 +- packages/core-types/src/types.ts | 2 + packages/node-client/src/INodeClient.ts | 4 +- packages/node-client/src/NodeClient.ts | 4 +- packages/smart-account/src/SmartAccount.ts | 130 +++++++++++++++++-- 5 files changed, 123 insertions(+), 19 deletions(-) diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index 9a62b8d7b..bd64b2cae 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -32,7 +32,7 @@ export interface ExecTransaction { } export interface FeeRefund { - gasUsed: string | number + // gasUsed: string | number baseGas: string | number gasPrice: string | number tokenGasPriceFactor: string | number diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index b082cb80d..3280f9d24 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -63,6 +63,8 @@ export interface UserOperation { export const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000" +export const FAKE_SIGNATURE = "0x39f5032f1cd30005aa1e35f04394cabfe7de3b6ae6d95b27edd8556064c287bf61f321fead0cf48ca4405d497cc8fc47fc7ff0b7f5c45baa14090a44f2307d8230" + export interface RestRelayerOptions { url: string } diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index bce3b94d7..ee2d2b242 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -1,4 +1,4 @@ -import { FeeRefundData, MetaTransactionData } from '@biconomy-sdk/core-types' +import { FeeRefund, FeeRefundData, MetaTransactionData } from '@biconomy-sdk/core-types' import { Signer } from '@ethersproject/abstract-signer' import { TokenPriceResponse, @@ -44,7 +44,7 @@ interface INodeClient { estimateHandlePaymentGas(chainId: number, estimatorAddress: string, feeRefund: FeeRefundData): Promise - estimateUndeployedContractGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData, feeRefund: FeeRefundData, signature: string): Promise + estimateUndeployedContractGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData, feeRefund: FeeRefund, signature: string): Promise } export default INodeClient diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index 8c49ccb66..c8550751f 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -13,7 +13,7 @@ import { } from './types/NodeClientTypes' import { getTxServiceBaseUrl } from './utils' import { HttpMethod, sendRequest } from './utils/httpRequests' -import { MetaTransactionData, FeeRefundData } from '@biconomy-sdk/core-types' +import { MetaTransactionData, FeeRefund, FeeRefundData } from '@biconomy-sdk/core-types' export interface NodeClientConfig { /** txServiceUrl - Safe Transaction Service URL */ txServiceUrl: string @@ -148,7 +148,7 @@ class NodeClient implements INodeClient { }) } - async estimateUndeployedContractGas(chainId: number, walletAddress: string, transaction: MetaTransactionData, feeRefund: FeeRefundData, signature:string): Promise { + async estimateUndeployedContractGas(chainId: number, walletAddress: string, transaction: MetaTransactionData, feeRefund: FeeRefund, signature:string): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/undeployed`, method: HttpMethod.Post, diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 6fb6922d7..02120e644 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -23,6 +23,7 @@ import { FeeQuote, FeeOptionsResponse, ZERO_ADDRESS, + FAKE_SIGNATURE, RelayResponse } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' @@ -217,7 +218,7 @@ class SmartAccount { public async estimateHandlePaymentGas(chainId: number, walletAddress: string, feeRefundData: FeeRefundData): Promise { return this.nodeClient.estimateHandlePaymentGas(chainId, walletAddress, feeRefundData) } - public async estimateUndeployedContractGas(chainId: number, walletAddress: string, transaction: MetaTransactionData, feeRefundData: FeeRefundData, signature: string): Promise { + public async estimateUndeployedContractGas(chainId: number, walletAddress: string, transaction: MetaTransactionData, feeRefundData: FeeRefund, signature: string): Promise { return this.nodeClient.estimateUndeployedContractGas(chainId, walletAddress, transaction, feeRefundData, signature) } @@ -256,8 +257,6 @@ class SmartAccount { return this } - // Can also add := sendSignedTransaction - /** * * @notice personal sign is used currently (// @todo Signer should be able to use _typedSignData) @@ -433,22 +432,125 @@ class SmartAccount { transactions: Transaction[], batchId: number = 0, // may not be necessary chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - // eth_call api method - let estimatedGasUsed = 435318; - console.log('transactions ', transactions); - console.log('batchId ', batchId); - console.log('chainId ', chainId); + let estimatedGasUsed = 0; + // Check if available from current state + const isDeployed = await this.isDeployed(chainId); + if (!isDeployed) { + const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); + const walletFactoryInterface = this.factory().getInterface(); + const state = await this.getSmartAccountState(); + + + const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ + this.factory().getAddress(), + walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ + state.owner, + state.entryPointAddress, + state.fallbackHandlerAddress, + 0 + ]) + ]) + console.log('encodedEstimate ', encodedEstimateData) + + const deployCostresponse = await this.estimateExternalGas(chainId, encodedEstimateData); + const estimateWalletDeployment = Number(deployCostresponse.data.gas); + console.log('estimateWalletDeployment ', estimateWalletDeployment); + + estimatedGasUsed += estimateWalletDeployment; + estimatedGasUsed -= 21000; + } + + const tx = await this.createTransactionBatch(transactions, batchId); + + const txn: ExecTransaction = { + to: tx.to, + value: tx.value, + data: tx.data, + operation: tx.operation, + targetTxGas: tx.targetTxGas + } + + // to avoid failing eth_call override with undeployed wallet + txn.targetTxGas = 500000; + + const refundInfo: FeeRefund = { + baseGas: tx.baseGas, + gasPrice: tx.gasPrice, + tokenGasPriceFactor: tx.tokenGasPriceFactor, + gasToken: tx.gasToken, + refundReceiver: tx.refundReceiver + } + + const ethCallOverrideResponse = await this.estimateUndeployedContractGas(chainId, this.address, txn, refundInfo, FAKE_SIGNATURE); + let noAuthEstimate = Number(ethCallOverrideResponse.data.gas); + console.log('no auth no refund estimate', noAuthEstimate); + + estimatedGasUsed += noAuthEstimate; + + // For the refund we need to add estimation seperately + estimatedGasUsed += 22900 // Might have to come from relayer along with quotes + return estimatedGasUsed; } async estimateTransaction(transaction: Transaction, batchId: number = 0, // may not be necessary chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - // eth_call api method - let estimatedGasUsed = 435318; - console.log('transaction ', transaction); - console.log('batchId ', batchId); - console.log('chainId ', chainId); + let estimatedGasUsed = 0; + // Check if available from current state + const isDeployed = await this.isDeployed(chainId); + if (!isDeployed) { + const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); + const walletFactoryInterface = this.factory().getInterface(); + const state = await this.getSmartAccountState(); + + + const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ + this.factory().getAddress(), + walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ + state.owner, + state.entryPointAddress, + state.fallbackHandlerAddress, + 0 + ]) + ]) + console.log('encodedEstimate ', encodedEstimateData) + + const deployCostresponse = await this.estimateExternalGas(chainId, encodedEstimateData); + const estimateWalletDeployment = Number(deployCostresponse.data.gas); + console.log('estimateWalletDeployment ', estimateWalletDeployment); + + estimatedGasUsed += estimateWalletDeployment; + estimatedGasUsed -= 21000; + } + + const tx = await this.createTransaction(transaction, batchId); + + const txn: ExecTransaction = { + to: tx.to, + value: tx.value, + data: tx.data, + operation: tx.operation, + targetTxGas: tx.targetTxGas + } + + const refundInfo: FeeRefund = { + baseGas: tx.baseGas, + gasPrice: tx.gasPrice, + tokenGasPriceFactor: tx.tokenGasPriceFactor, + gasToken: tx.gasToken, + refundReceiver: tx.refundReceiver + } + + const ethCallOverrideResponse = await this.estimateUndeployedContractGas(chainId, this.address, txn, refundInfo, FAKE_SIGNATURE); + let noAuthEstimate = Number(ethCallOverrideResponse.data.gas); + console.log('no auth no refund estimate', noAuthEstimate); + + estimatedGasUsed += noAuthEstimate; + + // For the refund we need to add estimation seperately + estimatedGasUsed += 22900 + return estimatedGasUsed; } @@ -565,7 +667,7 @@ class SmartAccount { data: transaction.data, // for token transfers use encodeTransfer nonce }) - + return walletTx } From f6e3f1abe51445fb677fb302c04f1e14da373dba Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 30 Aug 2022 10:51:43 +0400 Subject: [PATCH 0114/1247] refactor --- packages/smart-account/src/SmartAccount.ts | 75 +++++++++++----------- 1 file changed, 39 insertions(+), 36 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 02120e644..50c662e96 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -487,6 +487,8 @@ class SmartAccount { estimatedGasUsed += noAuthEstimate; + // TODO @review + // chat with Sachin // For the refund we need to add estimation seperately estimatedGasUsed += 22900 // Might have to come from relayer along with quotes @@ -548,6 +550,8 @@ class SmartAccount { estimatedGasUsed += noAuthEstimate; + // TODO @review + // chat with Sachin // For the refund we need to add estimation seperately estimatedGasUsed += 22900 @@ -636,41 +640,6 @@ class SmartAccount { return walletTx } - - /** - * Prepares compatible WalletTransaction object based on Transaction Request - * @todo Rename based on other variations to prepare transaction - * @notice This transaction is without fee refund (gasless) - * @param transaction - * @param batchId - * @param chainId - * @returns - */ - async createTransaction( - transaction: Transaction, - batchId: number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): Promise { - let walletContract = this.smartAccount(chainId).getContract() - walletContract = walletContract.attach(this.address) - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0 - if (await this.isDeployed(chainId)) { - nonce = (await walletContract.getNonce(batchId)).toNumber() - } - console.log('nonce: ', nonce) - - const walletTx: WalletTransaction = buildSmartAccountTransaction({ - to: transaction.to, - value: transaction.value, - data: transaction.data, // for token transfers use encodeTransfer - nonce - }) - - return walletTx - } - /** * Prepares compatible WalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction @@ -817,7 +786,41 @@ class SmartAccount { } return finalWalletTx - } + } + + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Rename based on other variations to prepare transaction + * @notice This transaction is without fee refund (gasless) + * @param transaction + * @param batchId + * @param chainId + * @returns + */ + async createTransaction( + transaction: Transaction, + batchId: number = 0, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + let walletContract = this.smartAccount(chainId).getContract() + walletContract = walletContract.attach(this.address) + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (await this.isDeployed(chainId)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } + console.log('nonce: ', nonce) + + const walletTx: WalletTransaction = buildSmartAccountTransaction({ + to: transaction.to, + value: transaction.value, + data: transaction.data, // for token transfers use encodeTransfer + nonce + }) + + return walletTx + } /** * Prepares compatible WalletTransaction object based on Transaction Request From 09606b5f0baff2c238f62ca66c1c699cbc2f4324 Mon Sep 17 00:00:00 2001 From: talha Date: Tue, 30 Aug 2022 11:00:13 +0400 Subject: [PATCH 0115/1247] refund final changes --- .../src/contracts/SmartWalletContract.ts | 10 ++++++++-- packages/core-types/src/transaction.types.ts | 10 +++++++--- .../v1.0.0/SmartWalletContractEthers.ts | 5 +++-- .../v1.0.1/SmartWalletContractEthers.ts | 5 +++-- .../v1.0.2/SmartWalletContractEthers.ts | 5 +++-- .../node-client/src/types/NodeClientTypes.ts | 5 +++-- packages/smart-account/src/SmartAccount.ts | 19 ++++++++++++++++--- packages/transactions/src/execution.ts | 7 ++++--- 8 files changed, 47 insertions(+), 19 deletions(-) diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index 18c4c3a2a..04024063c 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -1,4 +1,4 @@ -import { WalletTransaction, ExecTransaction, FeeRefund } from '../transaction.types' +import { WalletTransaction, ExecTransaction, FeeRefundV1_0_0, FeeRefundV1_0_2 } from '../transaction.types' import { SmartAccountVersion } from '../types' import { BigNumber } from '@ethersproject/bignumber' import { Interface } from '@ethersproject/abi' @@ -18,7 +18,13 @@ export interface SmartWalletContract { execTransaction( transaction: ExecTransaction, batchId: number, - feeRefundData: FeeRefund, + feeRefundData: FeeRefundV1_0_0, + signatures: string + ): any + execTransaction( + transaction: ExecTransaction, + batchId: number, + feeRefundData: FeeRefundV1_0_2, signatures: string ): any encode(methodName: string, params: any): string diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index d96c05e60..45e09b275 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -36,15 +36,19 @@ export interface SmartAccountSignature { data: string } -export interface FeeRefund { +export interface FeeRefundV1_0_0 { baseGas: string | number gasPrice: string | number - tokenGasPriceFactor: string | number gasToken: string refundReceiver: string } +export interface FeeRefundV1_0_2 extends FeeRefundV1_0_0{ + tokenGasPriceFactor: string | number +} + + // extended from FeeRefund as we need this for handlePayment Estimate -export interface FeeRefundHandlePayment extends FeeRefund { +export interface FeeRefundHandlePayment extends FeeRefundV1_0_2 { gasUsed: string | number } diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts index 3f083d68d..baf289bce 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts @@ -4,7 +4,8 @@ import { SmartWalletContract, WalletTransaction, ExecTransaction, - FeeRefund, + FeeRefundV1_0_0, + FeeRefundV1_0_2, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' @@ -60,7 +61,7 @@ class SmartWalletContractEthers implements SmartWalletContract { async execTransaction( _tx: ExecTransaction, batchId: number, - refundInfo: FeeRefund, + refundInfo: FeeRefundV1_0_0, signatures: string ): Promise { // TODO: estimate GAS before making the transaction diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts index 621345069..521d751ea 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts @@ -4,7 +4,8 @@ import { SmartWalletContract, WalletTransaction, ExecTransaction, - FeeRefund, + FeeRefundV1_0_0, + FeeRefundV1_0_2, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' @@ -60,7 +61,7 @@ class SmartWalletContractEthers implements SmartWalletContract { async execTransaction( _tx: ExecTransaction, batchId: number, - refundInfo: FeeRefund, + refundInfo: FeeRefundV1_0_0, signatures: string ): Promise { // TODO: estimate GAS before making the transaction diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.2/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.2/SmartWalletContractEthers.ts index 43130421b..fe4801104 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.2/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.2/SmartWalletContractEthers.ts @@ -4,7 +4,8 @@ import { SmartWalletContract, WalletTransaction, ExecTransaction, - FeeRefund, + FeeRefundV1_0_0, + FeeRefundV1_0_2, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' @@ -61,7 +62,7 @@ class SmartWalletContractEthers implements SmartWalletContract { async execTransaction( _tx: ExecTransaction, batchId: number, - refundInfo: FeeRefund, + refundInfo: FeeRefundV1_0_2, signatures: string ): Promise { // TODO: estimate GAS before making the transaction diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index c73ece846..eef9cf2e8 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -2,7 +2,8 @@ import { ChainId, SmartAccountVersion, MetaTransactionData, - FeeRefund + FeeRefundV1_0_0, + FeeRefundV1_0_2, } from '@biconomy-sdk/core-types' export type SmartAccountInfoResponse = { readonly name: string @@ -42,7 +43,7 @@ export type EstimateRequiredTxGasDto = { export type EstimateHandlePaymentTxGasDto = { chainId: number walletAddress: string - feeRefundData: FeeRefund + feeRefundData: FeeRefundV1_0_0 | FeeRefundV1_0_2 } export type SmartAccountByOwnerDto = { diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 4f793186c..6bf27b7e2 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -22,7 +22,8 @@ import { ExecTransaction, RelayTransaction, FeeRefundHandlePayment, - FeeRefund, + FeeRefundV1_0_0, + FeeRefundV1_0_2, WalletTransaction, SmartAccountVersion, SignedTransaction, @@ -390,7 +391,7 @@ class SmartAccount { targetTxGas: tx.targetTxGas } - const refundInfo: FeeRefund = { + let refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_2 = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, tokenGasPriceFactor: tx.tokenGasPriceFactor, @@ -398,6 +399,8 @@ class SmartAccount { refundReceiver: tx.refundReceiver } + refundInfo = this.transformRefundDto(this.DEFAULT_VERSION, refundInfo) + let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() walletContract = walletContract.attach(this.address) @@ -428,6 +431,16 @@ class SmartAccount { return txn.hash } + transformRefundDto(smartAccountVersion: SmartAccountVersion, refundDto: FeeRefundV1_0_0 | FeeRefundV1_0_2 ) { + let resultSet = {...refundDto} + switch(smartAccountVersion){ + case '1.0.0': + if ( typeof(refundDto) ) + return resultSet + } + return resultSet + } + // Get Fee Options from relayer and make it available for display // We can also show list of transactions to be processed (decodeContractCall) /** @@ -615,7 +628,7 @@ class SmartAccount { // Depending on feeToken provide baseGas! - const refundDetails: FeeRefund = { + const refundDetails: FeeRefundV1_0_0 | FeeRefundV1_0_2 = { baseGas: gasEstimate1, gasPrice: feeQuote.tokenGasPrice, tokenGasPriceFactor: feeQuote.offset || 1, diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index 211e76b4a..8e3bd543a 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -10,7 +10,8 @@ import { import { ExecTransaction, - FeeRefund, + FeeRefundV1_0_0, + FeeRefundV1_0_2, WalletTransaction, SmartAccountSignature } from '@biconomy-sdk/core-types' @@ -157,7 +158,7 @@ export const executeTx = async ( operation: SmartAccountTx.operation, targetTxGas: SmartAccountTx.targetTxGas } - const refundInfo: FeeRefund = { + const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_2 = { baseGas: SmartAccountTx.baseGas, gasPrice: SmartAccountTx.gasPrice, tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, @@ -187,7 +188,7 @@ export const populateExecuteTx = async ( operation: SmartAccountTx.operation, targetTxGas: SmartAccountTx.targetTxGas } - const refundInfo: FeeRefund = { + const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_2 = { baseGas: SmartAccountTx.baseGas, gasPrice: SmartAccountTx.gasPrice, tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, From d164bc12b747d2e805c2592570045ac4a6c995e1 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 30 Aug 2022 13:22:52 +0400 Subject: [PATCH 0116/1247] updated test case (i) --- packages/smart-account/src/SmartAccount.ts | 4 - .../smart-account/tests/smartaccount.spec.ts | 1026 ++++++++--------- 2 files changed, 508 insertions(+), 522 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index a233e61ff..14b3547a4 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -260,10 +260,6 @@ class SmartAccount { const { index = 0, chainId = this.#smartAccountConfig.activeNetworkId } = addressForCounterFactualWalletDto console.log('index and ChainId ', index, chainId, this.DEFAULT_VERSION) - console.log( - 'Instance to this is ', - this.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION] - ) return this.smartWalletFactoryContract[chainId][ this.DEFAULT_VERSION ].getAddressForCounterfactualWallet(this.owner, index) diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index bafb96f50..74dd4ae5e 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -17,8 +17,7 @@ const { expect } = chai.use(chaiAsPromised) import hardhat from 'hardhat' import { deployWalletContracts } from './utils/deploy' import { BytesLike, Interface } from 'ethers/lib/utils' -import { Transaction } from '../src/types' -import { WalletTransaction } from '@biconomy-sdk/core-types' +import { WalletTransaction, Transaction } from '@biconomy-sdk/core-types' import { textSpanContainsPosition } from 'typescript' type EthereumInstance = { @@ -72,520 +71,511 @@ describe('Wallet integration', function () { .persist() .get('/v1/chains/') .reply(200, { - message: 'Success', - code: 200, - data: [ - { - chainId: 1, - name: 'Ethereum', - symbol: 'ETH', - isL2: false, - isMainnet: true, - description: '', - blockExplorerUriTemplate: { - address: 'https://etherscan.io/address/', - txHash: 'https://etherscan.io/address/', - api: 'https://api.etherscan.io/' + "message": "Success", + "code": 200, + "data": [ + { + "chainId": 1, + "name": "Ethereum", + "symbol": "ETH", + "isL2": false, + "isMainnet": true, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://etherscan.io/address/", + "txHash": "https://etherscan.io/address/", + "api": "https://api.etherscan.io/" + }, + "ensRegistryAddress": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", + "estimatorAddress": "", + "walletFactory": [ + { + "version": "1.0.0", + "address": "0x6CEdFEec52d852fdAcDC6aD4a80F58aab406a898", + "abi": "" + } + ], + "multiSend": [ + { + "version": "1.0.0", + "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": "0xeA6eEf40Eaa8A642022f1697D6ED2fFC0Ffe5DFB", + "abi": "" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "https://kovan.infura.io/v3/d126f392798444609246423b06116c77", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 1, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "name": "Ether", + "symbol": "ETH", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", + "isNative": true + } }, - ensRegistryAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - walletFactory: [ - { - version: '0.0.1', - address: '0x050bca32264195976Fe00BcA566B548413A9E658', - abi: '' - } - ], - multiSend: [ - { - version: '0.0.1', - address: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', - abi: '' - } - ], - multiSendCall: [ - { - version: '0.0.1', - address: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', - abi: '' - } - ], - walletCreatedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, - EoaChangedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - EoaChangedEventHit: false, - wallet: [ - { - version: '0.0.1', - address: '0x056DcE811A2b695171274855E7246039Df298158', - abi: '' - } - ], - entryPoint: [ - { - version: '0.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', - abi: '' - } - ], - fallBackHandler: [ - { - version: '0.0.1', - address: '0xFc942E06c54d08502557FA40e1Aa23C5258132D5', - abi: '' - } - ], - relayerUrl: '', - providerUrl: 'https://kovan.infura.io/v3/d126f392798444609246423b06116c77', - indexerUrl: '', - backendNodeUrl: '', - token: { - chainId: 1, - address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', - name: 'Ether', - symbol: 'ETH', - decimals: 18, - logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png', - isNative: true - } - }, - { - chainId: 137, - name: 'Polygon', - symbol: 'MATIC', - isL2: true, - isMainnet: true, - description: '', - blockExplorerUriTemplate: { - address: 'https://polygonscan.com/address/', - txHash: 'https://polygonscan.com/address/', - api: 'https://api.polygonscan.com/' + { + "chainId": 137, + "name": "Polygon", + "symbol": "MATIC", + "isL2": true, + "isMainnet": true, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://polygonscan.com/address/", + "txHash": "https://polygonscan.com/address/", + "api": "https://api.polygonscan.com/" + }, + "ensRegistryAddress": "", + "estimatorAddress": "", + "walletFactory": [ + { + "version": "1.0.0", + "address": "0x6CEdFEec52d852fdAcDC6aD4a80F58aab406a898", + "abi": "" + } + ], + "multiSend": [ + { + "version": "1.0.0", + "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": "0xeA6eEf40Eaa8A642022f1697D6ED2fFC0Ffe5DFB", + "abi": "" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "https://polygon-mainnet.g.alchemy.com/v2/s6bOKN9QDGXpVbsqzJMl_AHeZHNOCTcM", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 137, + "address": "0x0000000000000000000000000000000000001010", + "name": "Polygon Matic", + "symbol": "Matic", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png", + "isNative": true + } }, - ensRegistryAddress: '', - walletFactory: [ - { - version: '0.0.1', - address: '0x050bca32264195976Fe00BcA566B548413A9E658', - abi: '' - } - ], - multiSend: [ - { - version: '0.0.1', - address: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', - abi: '' - } - ], - multiSendCall: [ - { - version: '0.0.1', - address: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', - abi: '' - } - ], - walletCreatedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, - EoaChangedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - EoaChangedEventHit: false, - wallet: [ - { - version: '0.0.1', - address: '0x056DcE811A2b695171274855E7246039Df298158', - abi: '' - } - ], - entryPoint: [ - { - version: '0.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', - abi: '' - } - ], - fallBackHandler: [ - { - version: '0.0.1', - address: '0xFc942E06c54d08502557FA40e1Aa23C5258132D5', - abi: '' - } - ], - relayerUrl: '', - providerUrl: - 'https://polygon-mainnet.g.alchemy.com/v2/s6bOKN9QDGXpVbsqzJMl_AHeZHNOCTcM', - indexerUrl: '', - backendNodeUrl: '', - token: { - chainId: 137, - address: '0x0000000000000000000000000000000000001010', - name: 'Polygon Matic', - symbol: 'Matic', - decimals: 18, - logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png', - isNative: true - } - }, - { - chainId: 56, - name: 'BSC Mainnet', - symbol: 'BNB', - isL2: true, - isMainnet: true, - description: '', - blockExplorerUriTemplate: { - address: 'https://bscscan.com/address/', - txHash: 'https://bscscan.com/address/', - api: 'https://bscscan.com/' + { + "chainId": 56, + "name": "BSC Mainnet", + "symbol": "BNB", + "isL2": true, + "isMainnet": true, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://bscscan.com/address/", + "txHash": "https://bscscan.com/address/", + "api": "https://bscscan.com/" + }, + "ensRegistryAddress": "", + "estimatorAddress": "", + "walletFactory": [ + { + "version": "1.0.0", + "address": "0x6CEdFEec52d852fdAcDC6aD4a80F58aab406a898", + "abi": "" + } + ], + "multiSend": [ + { + "version": "1.0.0", + "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": "0xeA6eEf40Eaa8A642022f1697D6ED2fFC0Ffe5DFB", + "abi": "" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "https://bsc-dataseed2.binance.org/", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 56, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "name": "BNB Coin", + "symbol": "BNB", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png", + "isNative": true + } }, - ensRegistryAddress: '', - walletFactory: [ - { - version: '0.0.1', - address: '0x050bca32264195976Fe00BcA566B548413A9E658', - abi: '' - } - ], - multiSend: [ - { - version: '0.0.1', - address: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', - abi: '' - } - ], - multiSendCall: [ - { - version: '0.0.1', - address: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', - abi: '' - } - ], - walletCreatedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, - EoaChangedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - EoaChangedEventHit: false, - wallet: [ - { - version: '0.0.1', - address: '0x056DcE811A2b695171274855E7246039Df298158', - abi: '' - } - ], - entryPoint: [ - { - version: '0.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', - abi: '' - } - ], - fallBackHandler: [ - { - version: '0.0.1', - address: '0xFc942E06c54d08502557FA40e1Aa23C5258132D5', - abi: '' - } - ], - relayerUrl: '', - providerUrl: 'https://bsc-dataseed2.binance.org/', - indexerUrl: '', - backendNodeUrl: '', - token: { - chainId: 56, - address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', - name: 'BNB Coin', - symbol: 'BNB', - decimals: 18, - logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png', - isNative: true - } - }, - { - chainId: 5, - name: 'Goerli', - symbol: 'ETH', - isL2: false, - isMainnet: false, - description: '', - blockExplorerUriTemplate: { - address: 'https://goerli.etherscan.io/address/', - txHash: 'https://goerli.etherscan.io/address/', - api: 'https://goerli.etherscan.io/' + { + "chainId": 5, + "name": "Goerli", + "symbol": "ETH", + "isL2": false, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://goerli.etherscan.io/address/", + "txHash": "https://goerli.etherscan.io/address/", + "api": "https://goerli.etherscan.io/" + }, + "ensRegistryAddress": "", + "estimatorAddress": "", + "walletFactory": [ + { + "version": "1.0.0", + "address": "0x6CEdFEec52d852fdAcDC6aD4a80F58aab406a898", + "abi": "" + } + ], + "multiSend": [ + { + "version": "1.0.0", + "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": "0xeA6eEf40Eaa8A642022f1697D6ED2fFC0Ffe5DFB", + "abi": "" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 5, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "name": "Ether", + "symbol": "ETH", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", + "isNative": true + } }, - ensRegistryAddress: '', - walletFactory: [ - { - version: '0.0.1', - address: '0x050bca32264195976Fe00BcA566B548413A9E658', - abi: '' - } - ], - multiSend: [ - { - version: '0.0.1', - address: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', - abi: '' - } - ], - multiSendCall: [ - { - version: '0.0.1', - address: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', - abi: '' - } - ], - walletCreatedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, - EoaChangedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - EoaChangedEventHit: false, - wallet: [ - { - version: '0.0.1', - address: '0x056DcE811A2b695171274855E7246039Df298158', - abi: '' - } - ], - entryPoint: [ - { - version: '0.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', - abi: '' - } - ], - fallBackHandler: [ - { - version: '0.0.1', - address: '0xFc942E06c54d08502557FA40e1Aa23C5258132D5', - abi: '' - } - ], - relayerUrl: '', - providerUrl: 'https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg', - indexerUrl: '', - backendNodeUrl: '', - token: { - chainId: 5, - address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', - name: 'Ether', - symbol: 'ETH', - decimals: 18, - logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png', - isNative: true - } - }, - { - chainId: 80001, - name: 'Polygon Mumbai', - symbol: 'MATIC', - isL2: true, - isMainnet: false, - description: '', - blockExplorerUriTemplate: { - address: 'https://mumbai.polygonscan.com/address/', - txHash: 'https://mumbai.polygonscan.com/address/', - api: 'https://api.mumbai.polygonscan.com/' + { + "chainId": 80001, + "name": "Polygon Mumbai", + "symbol": "MATIC", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" + }, + "ensRegistryAddress": "", + "estimatorAddress": "", + "walletFactory": [ + { + "version": "1.0.0", + "address": "0x6CEdFEec52d852fdAcDC6aD4a80F58aab406a898", + "abi": "" + } + ], + "multiSend": [ + { + "version": "1.0.0", + "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": "0xeA6eEf40Eaa8A642022f1697D6ED2fFC0Ffe5DFB", + "abi": "" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 80001, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "name": "Polygon Matic", + "symbol": "Matic", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png", + "isNative": true + } }, - ensRegistryAddress: '', - walletFactory: [ - { - version: '0.0.1', - address: '0x050bca32264195976Fe00BcA566B548413A9E658', - abi: '' - } - ], - multiSend: [ - { - version: '0.0.1', - address: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', - abi: '' - } - ], - multiSendCall: [ - { - version: '0.0.1', - address: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', - abi: '' - } - ], - walletCreatedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, - EoaChangedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - EoaChangedEventHit: false, - wallet: [ - { - version: '0.0.1', - address: '0x056DcE811A2b695171274855E7246039Df298158', - abi: '' - } - ], - entryPoint: [ - { - version: '0.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', - abi: '' - } - ], - fallBackHandler: [ - { - version: '0.0.1', - address: '0xFc942E06c54d08502557FA40e1Aa23C5258132D5', - abi: '' - } - ], - relayerUrl: '', - providerUrl: - 'https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b', - indexerUrl: '', - backendNodeUrl: '', - token: { - chainId: 80001, - address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', - name: 'Polygon Matic', - symbol: 'Matic', - decimals: 18, - logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png', - isNative: true - } - }, - { - chainId: 97, - name: 'BSC Testnet', - symbol: 'BNB', - isL2: true, - isMainnet: false, - description: '', - blockExplorerUriTemplate: { - address: 'https://bscscan.com//address/', - txHash: 'https://bscscan.com/address/', - api: 'https://bscscan.com/' + { + "chainId": 97, + "name": "BSC Testnet", + "symbol": "BNB", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://bscscan.com//address/", + "txHash": "https://bscscan.com/address/", + "api": "https://bscscan.com/" + }, + "ensRegistryAddress": "", + "estimatorAddress": "", + "walletFactory": [ + { + "version": "1.0.0", + "address": "0x6CEdFEec52d852fdAcDC6aD4a80F58aab406a898", + "abi": "" + } + ], + "multiSend": [ + { + "version": "1.0.0", + "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": "0xeA6eEf40Eaa8A642022f1697D6ED2fFC0Ffe5DFB", + "abi": "" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "https://data-seed-prebsc-1-s1.binance.org:8545/", + "indexerUrl": "", + "backendNodeUrl": "" }, - ensRegistryAddress: '', - walletFactory: [ - { - version: '0.0.1', - address: '0x050bca32264195976Fe00BcA566B548413A9E658', - abi: '' - } - ], - multiSend: [ - { - version: '0.0.1', - address: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', - abi: '' - } - ], - multiSendCall: [ - { - version: '0.0.1', - address: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', - abi: '' - } - ], - walletCreatedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, - EoaChangedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - EoaChangedEventHit: false, - wallet: [ - { - version: '0.0.1', - address: '0x056DcE811A2b695171274855E7246039Df298158', - abi: '' - } - ], - entryPoint: [ - { - version: '0.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', - abi: '' - } - ], - fallBackHandler: [ - { - version: '0.0.1', - address: '0xFc942E06c54d08502557FA40e1Aa23C5258132D5', - abi: '' - } - ], - relayerUrl: '', - providerUrl: 'https://data-seed-prebsc-1-s1.binance.org:8545/', - indexerUrl: '', - backendNodeUrl: '' - }, - { - chainId: 1337, - name: 'Ganache', - symbol: 'ETH', - isL2: true, - isMainnet: false, - description: '', - blockExplorerUriTemplate: { - address: 'https://mumbai.polygonscan.com/address/', - txHash: 'https://mumbai.polygonscan.com/address/', - api: 'https://api.mumbai.polygonscan.com/' - }, - ensRegistryAddress: '', - walletFactory: [ - { - version: '0.0.1', - address: '0x85c0995669f8a0173a5B5F6003DA060E8D17f0c3', - abi: '' - } - ], - multiSend: [ - { - version: '0.0.1', - address: '0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8', - abi: '' - } - ], - multiSendCall: [ - { - version: '0.0.1', - address: '0x0Bc8A760B4a8a922A88b1C1773e3798641348508', - abi: '' - } - ], - walletCreatedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, - EoaChangedCallBackEndpoint: - 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - EoaChangedEventHit: false, - wallet: [ - { - version: '0.0.1', - address: '0x0ba464506a3D66C962121e3C25ed56678A2585B6', - abi: '' - } - ], - entryPoint: [ - { - version: '0.0.1', - address: '0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d', - abi: '' - } - ], - fallBackHandler: [ - { - version: '0.0.1', - address: '0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4', - abi: '' - } - ], - relayerUrl: '', - providerUrl: 'http://localhost:8545', - indexerUrl: '', - backendNodeUrl: '' - } + { + "chainId": 1337, + "name": "Ganache", + "symbol": "ETH", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" + }, + "ensRegistryAddress": "", + "estimatorAddress": "", + "walletFactory": [ + { + "version": "1.0.0", + "address": walletFactory.address, + "abi": "" + } + ], + "multiSend": [ + { + "version": "1.0.0", + "address": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "EoaChangedEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": smartWallet.address, + "abi": "" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "http://localhost:8545", + "indexerUrl": "", + "backendNodeUrl": "" + } ] - }) + }) }) it('Should init and return details of smart account', async () => { @@ -646,7 +636,7 @@ describe('Wallet integration', function () { const relayer = new LocalRelayer(eoaSigner) const state = await smartAccount.getSmartAccountState() const context = smartAccount.getSmartAccountContext() - const deployment = await relayer.deployWallet(state, context) // index 0 + const deployment = await relayer.deployWallet({config: state, context, index: 0}) const receipt: TransactionReceipt = await deployment.wait(1) expect(receipt.status).to.be.equal(1) } @@ -691,9 +681,9 @@ describe('Wallet integration', function () { value: ethers.utils.parseEther('1') } - const smartAccountTransaction: WalletTransaction = await smartAccount.createTransaction(tx) + const smartAccountTransaction: WalletTransaction = await smartAccount.createTransaction({transaction:tx}) - const signature = await smartAccount.signTransaction(smartAccountTransaction) + const signature = await smartAccount.signTransaction({tx: smartAccountTransaction}) console.log('signature is: ', signature) }) @@ -770,7 +760,7 @@ describe('Wallet integration', function () { value: ethers.utils.parseEther('0.5') } - const smartAccountTransaction: WalletTransaction = await smartAccount.createTransaction(tx) + const smartAccountTransaction: WalletTransaction = await smartAccount.createTransaction({transaction: tx}) // Attach relayer before sending a transaction @@ -780,7 +770,7 @@ describe('Wallet integration', function () { smartAccount.setRelayer(relayer) expect(smartAccount.relayer).to.be.equal(relayer) const hash: string = await smartAccount.sendTransaction( - smartAccountTransaction + {tx: smartAccountTransaction} ) //const receipt: TransactionReceipt = await response.wait(1) @@ -792,7 +782,7 @@ describe('Wallet integration', function () { } }) - it('Should be able to send batch of transactions', async () => { + /*it('Should be able to send batch of transactions', async () => { const userAddress = (await ethnode.signer?.getAddress()) || '' const eoaSigner = ethnode.provider?.getSigner() @@ -843,7 +833,7 @@ describe('Wallet integration', function () { txs.push(tx2) const smartAccountTransaction: WalletTransaction = await smartAccount.createTransactionBatch( - txs + {transactions: txs} ) // Attach relayer before sending a transaction @@ -854,7 +844,7 @@ describe('Wallet integration', function () { smartAccount.setRelayer(relayer) expect(smartAccount.relayer).to.be.equal(relayer) const txHash: string = await smartAccount.sendTransaction( - smartAccountTransaction + {tx: smartAccountTransaction} ) // TODO : get receipt from hash using provider @@ -865,6 +855,6 @@ describe('Wallet integration', function () { ethers.utils.parseEther('0.5').toString() ) } - }) + })*/ }) }) From cc3f884f259191fbff825e9199c2fef14ac7f332 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 30 Aug 2022 17:12:00 +0400 Subject: [PATCH 0117/1247] refactor dto names --- .../core-types/src/smart-account.types.ts | 36 +++++++++---------- .../node-client/src/types/NodeClientTypes.ts | 2 +- packages/smart-account/src/SmartAccount.ts | 20 +++++------ 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 305dc92db..ce3d86f41 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -5,53 +5,53 @@ import { WalletTransaction, Transaction } from './transaction.types' import { FeeQuote } from './types' export type AddressForCounterFactualWalletDto = { index: number - chainId: ChainId + chainId?: ChainId } export type SignTransactionDto = { tx: WalletTransaction - chainId: ChainId + chainId?: ChainId } export type SendTransactionDto = { tx: WalletTransaction - batchId: number - chainId: ChainId + batchId?: number + chainId?: ChainId } -export type PrepareTransactionDto = { +export type PrepareRefundTransactionDto = { transaction: Transaction - batchId: number - chainId: ChainId + batchId?: number + chainId?: ChainId } -export type PrepareRefundTransactionDto = { +export type PrepareRefundTransactionsDto = { transactions: Transaction[] - batchId: number - chainId: ChainId + batchId?: number + chainId?: ChainId } export type RefundTransactionDto = { transaction: Transaction feeQuote: FeeQuote - batchId: number - chainId: ChainId + batchId?: number + chainId?: ChainId } export type RefundTransactionBatchDto = { transactions: Transaction[] feeQuote: FeeQuote - batchId: number - chainId: ChainId + batchId?: number + chainId?: ChainId } export type TransactionDto = { transaction: Transaction - batchId: number - chainId: ChainId + batchId?: number + chainId?: ChainId } export type TransactionBatchDto = { transactions: Transaction[] - batchId: number - chainId: ChainId + batchId?: number + chainId?: ChainId } diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index eef9cf2e8..d923be73f 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -43,7 +43,7 @@ export type EstimateRequiredTxGasDto = { export type EstimateHandlePaymentTxGasDto = { chainId: number walletAddress: string - feeRefundData: FeeRefundV1_0_0 | FeeRefundV1_0_2 + feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_2 } export type SmartAccountByOwnerDto = { diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 14b3547a4..f9ead55c4 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -13,8 +13,8 @@ import { AddressForCounterFactualWalletDto, SignTransactionDto, SendTransactionDto, - PrepareTransactionDto, PrepareRefundTransactionDto, + PrepareRefundTransactionsDto, RefundTransactionDto, RefundTransactionBatchDto, TransactionDto, @@ -449,13 +449,13 @@ class SmartAccount { * @param chainId */ async prepareRefundTransaction( - prepareTransactionDto: PrepareTransactionDto + prepareRefundTransactionDto: PrepareRefundTransactionDto ): Promise { const { transaction, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId - } = prepareTransactionDto + } = prepareRefundTransactionDto const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response @@ -501,13 +501,13 @@ class SmartAccount { * @param chainId */ async prepareRefundTransactionBatch( - prepareRefundTransactionDto: PrepareRefundTransactionDto + prepareRefundTransactionsDto: PrepareRefundTransactionsDto ): Promise { const { transactions, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId - } = prepareRefundTransactionDto + } = prepareRefundTransactionsDto const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response let feeQuotes: Array = [] @@ -543,9 +543,9 @@ class SmartAccount { return feeQuotes } - async estimateTransactionBatch( prepareRefundTransactionDto: PrepareRefundTransactionDto): Promise { + async estimateTransactionBatch( prepareRefundTransactionsDto: PrepareRefundTransactionsDto): Promise { - const { transactions, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = prepareRefundTransactionDto + const { transactions, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = prepareRefundTransactionsDto let estimatedGasUsed = 0; // Check if available from current state const isDeployed = await this.isDeployed(chainId); @@ -609,7 +609,7 @@ class SmartAccount { return estimatedGasUsed; } - async estimateTransaction(prepareTransactionDto: PrepareTransactionDto): Promise { + async estimateTransaction(prepareTransactionDto: PrepareRefundTransactionDto): Promise { const { transaction, batchId = 0, @@ -742,7 +742,7 @@ class SmartAccount { const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { chainId, walletAddress: connectedWallet, - feeRefundData: refundDetails + feeRefund: refundDetails } const handlePaymentResponse = await this.estimateHandlePaymentGas(estimateHandlePaymentGas) @@ -922,7 +922,7 @@ class SmartAccount { refundReceiver: ZERO_ADDRESS } - const handlePaymentResponse = await this.estimateHandlePaymentGas({chainId, walletAddress: this.address, feeRefundData: refundDetails}); + const handlePaymentResponse = await this.estimateHandlePaymentGas({chainId, walletAddress: this.address, feeRefund: refundDetails}); // If we get this reponse zero, there has to be a way to estimate this for undeployed wallet // We could use constant value provided by the relayer let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) From fa560690295ea2b797792f9178ddfe2c04ff3c04 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 30 Aug 2022 17:38:10 +0400 Subject: [PATCH 0118/1247] fixes for undeployed contract estimation + default version to latest --- packages/node-client/src/INodeClient.ts | 5 +- packages/node-client/src/NodeClient.ts | 21 ++++---- .../node-client/src/types/NodeClientTypes.ts | 8 ++++ packages/smart-account/src/SmartAccount.ts | 48 +++++++++++++------ 4 files changed, 53 insertions(+), 29 deletions(-) diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index 3da5a30fa..6bc777160 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -4,6 +4,7 @@ import { EstimateExternalGasDto, EstimateRequiredTxGasDto, EstimateHandlePaymentTxGasDto, + EstimateUndeployedContractGasDto, SmartAccountByOwnerDto, TokenByChainIdAndAddressDto, TokenPriceResponse, @@ -54,7 +55,9 @@ interface INodeClient { estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto ): Promise - // estimateUndeployedContractGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData, feeRefund: FeeRefund, signature: string): Promise + estimateUndeployedContractGas( + estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto + ): Promise } export default INodeClient diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index 49133764c..6c2d4889d 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -3,6 +3,7 @@ import { EstimateExternalGasDto, EstimateRequiredTxGasDto, EstimateHandlePaymentTxGasDto, + EstimateUndeployedContractGasDto, SmartAccountByOwnerDto, TokenByChainIdAndAddressDto, TokenPriceResponse, @@ -151,19 +152,13 @@ class NodeClient implements INodeClient { }) } - // async estimateUndeployedContractGas(chainId: number, walletAddress: string, transaction: MetaTransactionData, feeRefund: FeeRefund, signature:string): Promise { - // return sendRequest({ - // url: `${this.#txServiceBaseUrl}/estimator/undeployed`, - // method: HttpMethod.Post, - // body: { - // chainId, - // walletAddress, - // transaction, - // feeRefund, - // signature - // } - // }) - // } + async estimateUndeployedContractGas(estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/estimator/undeployed`, + method: HttpMethod.Post, + body: estimateUndeployedContractGasDto + }) + } } export default NodeClient diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index d923be73f..a6c5e5505 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -46,6 +46,14 @@ export type EstimateHandlePaymentTxGasDto = { feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_2 } +export type EstimateUndeployedContractGasDto = { + chainId: number + walletAddress: string + feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_2 + transaction: MetaTransactionData + signature: string +} + export type SmartAccountByOwnerDto = { chainId: number owner: string diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index f9ead55c4..d897a501b 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -52,7 +52,8 @@ import NodeClient, { SupportedChainsResponse, EstimateExternalGasDto, EstimateRequiredTxGasDto, - EstimateHandlePaymentTxGasDto + EstimateHandlePaymentTxGasDto, + EstimateUndeployedContractGasDto } from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' import { Relayer } from '@biconomy-sdk/relayer' @@ -71,7 +72,8 @@ import { // Create an instance of Smart Account with multi-chain support. class SmartAccount { - DEFAULT_VERSION: SmartAccountVersion = '1.0.0' + // By default latest version + DEFAULT_VERSION: SmartAccountVersion = '1.0.2' // { ethAdapter } is a window that gives access to all the implemented functions of it // requires signer and read-only provider ethAdapter!: { [chainId: number]: EthersAdapter } @@ -304,9 +306,10 @@ class SmartAccount { ): Promise { return this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentTxGasDto) } - // public async estimateUndeployedContractGas(chainId: number, walletAddress: string, transaction: MetaTransactionData, feeRefundData: FeeRefund, signature: string): Promise { - // return this.nodeClient.estimateUndeployedContractGas(chainId, walletAddress, transaction, feeRefundData, signature) - // } + public async estimateUndeployedContractGas(estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto + ): Promise { + return this.nodeClient.estimateUndeployedContractGas(estimateUndeployedContractGasDto) + } // return adapter instance to be used for blockchain interactions /** @@ -594,12 +597,20 @@ class SmartAccount { gasToken: tx.gasToken, refundReceiver: tx.refundReceiver } - // TODO: required updates - // const ethCallOverrideResponse = await this.estimateUndeployedContractGas(chainId, this.address, txn, refundInfo, FAKE_SIGNATURE); - // let noAuthEstimate = Number(ethCallOverrideResponse.data.gas); - // console.log('no auth no refund estimate', noAuthEstimate); - // estimatedGasUsed += noAuthEstimate; + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + transaction: txn, + walletAddress: this.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE + } + + const ethCallOverrideResponse = await this.estimateUndeployedContractGas(estimateUndeployedContractGasDto); + let noAuthEstimate = Number(ethCallOverrideResponse.data.gas); + console.log('no auth no refund estimate', noAuthEstimate); + + estimatedGasUsed += noAuthEstimate; // TODO @review // chat with Sachin @@ -662,12 +673,19 @@ class SmartAccount { refundReceiver: tx.refundReceiver } - // TODO: required updates - // const ethCallOverrideResponse = await this.estimateUndeployedContractGas(chainId, this.address, txn, refundInfo, FAKE_SIGNATURE); - // let noAuthEstimate = Number(ethCallOverrideResponse.data.gas); - // console.log('no auth no refund estimate', noAuthEstimate); + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + transaction: txn, + walletAddress: this.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE + } + + const ethCallOverrideResponse = await this.estimateUndeployedContractGas(estimateUndeployedContractGasDto); + let noAuthEstimate = Number(ethCallOverrideResponse.data.gas); + console.log('no auth no refund estimate', noAuthEstimate); - // estimatedGasUsed += noAuthEstimate; + estimatedGasUsed += noAuthEstimate; // TODO @review // chat with Sachin From 4bd7289bdc00bf2d7d0864bbe65ddd09fd742152 Mon Sep 17 00:00:00 2001 From: talha Date: Wed, 31 Aug 2022 12:20:26 +0400 Subject: [PATCH 0119/1247] smart account version changed fixed --- packages/smart-account/src/SmartAccount.ts | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index d897a501b..7b927d053 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -153,8 +153,9 @@ class SmartAccount { * @param smartAccountVersion * @description // set wallet version to be able to interact with different deployed versions */ - setSmartAccountVersion(smartAccountVersion: SmartAccountVersion) { + async setSmartAccountVersion(smartAccountVersion: SmartAccountVersion) { this.DEFAULT_VERSION = smartAccountVersion + this.address = await this.getAddress() } // TODO @@ -261,7 +262,7 @@ class SmartAccount { ): Promise { const { index = 0, chainId = this.#smartAccountConfig.activeNetworkId } = addressForCounterFactualWalletDto - console.log('index and ChainId ', index, chainId, this.DEFAULT_VERSION) + console.log('index and ChainId ', index, chainId, this.DEFAULT_VERSION) return this.smartWalletFactoryContract[chainId][ this.DEFAULT_VERSION ].getAddressForCounterfactualWallet(this.owner, index) @@ -393,7 +394,7 @@ class SmartAccount { targetTxGas: tx.targetTxGas } - let refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_2 = { + const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_2 = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, tokenGasPriceFactor: tx.tokenGasPriceFactor, @@ -401,8 +402,6 @@ class SmartAccount { refundReceiver: tx.refundReceiver } - refundInfo = this.transformRefundDto(this.DEFAULT_VERSION, refundInfo) - let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() walletContract = walletContract.attach(this.address) @@ -433,16 +432,6 @@ class SmartAccount { return txn.hash } - transformRefundDto(smartAccountVersion: SmartAccountVersion, refundDto: FeeRefundV1_0_0 | FeeRefundV1_0_2 ) { - let resultSet = {...refundDto} - switch(smartAccountVersion){ - case '1.0.0': - if ( typeof(refundDto) ) - return resultSet - } - return resultSet - } - // Get Fee Options from relayer and make it available for display // We can also show list of transactions to be processed (decodeContractCall) /** From f9e422d7abf56749ab272c6d8fcb31b1db0754bf Mon Sep 17 00:00:00 2001 From: talha Date: Fri, 2 Sep 2022 11:25:08 +0400 Subject: [PATCH 0120/1247] get smart account by owner sdk function --- package-lock.json | 26 +++++++++++----------- package.json | 2 +- packages/smart-account/src/SmartAccount.ts | 8 +++++++ 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8daec99ba..8874c8acc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1989,21 +1989,21 @@ } }, "@nrwl/cli": { - "version": "14.5.10", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.10.tgz", - "integrity": "sha512-GpnnKGO3+HwlMmZSStbq1MOyoDJg2I0HN4nBqM3ltaQkfxGZv3erwRMOAT+8mba2MWbJJ2QQgASAYvTscNYjOQ==", + "version": "14.6.3", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.6.3.tgz", + "integrity": "sha512-S+o59oswVCfzD/Txh94Vz+HoOl2ynJkuBiyuXjTved1PEpIM68SmFv6Wx8p8vYBbHLv2sL71pb0uqjFJJFovJw==", "dev": true, "requires": { - "nx": "14.5.10" + "nx": "14.6.3" } }, "@nrwl/tao": { - "version": "14.5.10", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.10.tgz", - "integrity": "sha512-eWORRba0HlTNmOQFUxHqki0Z5yiRIq1Hl0taprmZpz2lgDXuzPIjGfAi5/ETy5+G5gkEyxFnCq7+SiMilPokwA==", + "version": "14.6.3", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.6.3.tgz", + "integrity": "sha512-iVLLcluU5WDSHCxB5so/eSeIY4JK+Cp8Yjh21MLZBkYSw/NIryk9lbHyXQPl37+JY94FRO1G87kvgk4AFly1pw==", "dev": true, "requires": { - "nx": "14.5.10" + "nx": "14.6.3" } }, "@octokit/auth-token": { @@ -6859,13 +6859,13 @@ } }, "nx": { - "version": "14.5.10", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.5.10.tgz", - "integrity": "sha512-dqiV+zY32k98mfKFTgiQyYd9HYZmB1zoJj6gYniEuqzs6CKp8ZSpeRDaVQRxR6wEMvW9MSTA9kBg8sJ78W/NZg==", + "version": "14.6.3", + "resolved": "https://registry.npmjs.org/nx/-/nx-14.6.3.tgz", + "integrity": "sha512-jdIFsyZDr1CyUzNifwNJ5dNrRRgSHy2gE1zIxcxVQuLUzDHLwOs/oHAGisyXKJsTaxVRr4Yd2lWGudeU8ZEhyg==", "dev": true, "requires": { - "@nrwl/cli": "14.5.10", - "@nrwl/tao": "14.5.10", + "@nrwl/cli": "14.6.3", + "@nrwl/tao": "14.6.3", "@parcel/watcher": "2.0.4", "chalk": "4.1.0", "chokidar": "^3.5.1", diff --git a/package.json b/package.json index a8895336f..8e1fc28e1 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.5.10", + "nx": "^14.6.3", "prettier": "2.7.1", "ts-node": "^10.9.1" }, diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 7b927d053..786ed8e4f 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -50,6 +50,8 @@ import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' import NodeClient, { ChainConfig, SupportedChainsResponse, + SmartAccountsResponse, + SmartAccountByOwnerDto, EstimateExternalGasDto, EstimateRequiredTxGasDto, EstimateHandlePaymentTxGasDto, @@ -292,6 +294,12 @@ class SmartAccount { return this.nodeClient.getTotalBalanceInUsd(balancesDto) } + public async getSmartAccountsByOwner( + smartAccountByOwnerDto: SmartAccountByOwnerDto + ): Promise { + return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto) + } + public async estimateExternalGas( estimateExternalGasDto: EstimateExternalGasDto ): Promise { From 82318f31b499aaec81e668e01b1c2e3a4a36252b Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 5 Sep 2022 16:52:07 +0400 Subject: [PATCH 0121/1247] estimation methods with override + fee calculations based on wallet deployed state + dev notes --- package.json | 2 +- packages/core-types/src/types.ts | 10 + packages/node-client/src/INodeClient.ts | 6 + packages/node-client/src/NodeClient.ts | 23 ++ .../node-client/src/types/NodeClientTypes.ts | 3 +- packages/relayer/src/local-relayer.ts | 4 +- packages/relayer/src/rest-relayer.ts | 30 +- packages/smart-account/src/SmartAccount.ts | 386 +++++++++++------- 8 files changed, 302 insertions(+), 162 deletions(-) diff --git a/package.json b/package.json index fec067df5..9c233314a 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "devDependencies": { "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.5.10", + "nx": "^14.6.4", "prettier": "2.7.1", "ts-node": "^10.8.2" } diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 3280f9d24..f0eed377d 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -63,6 +63,13 @@ export interface UserOperation { export const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000" +// Review +export const DEFAULT_FEE_RECEIVER = "0x7306aC7A32eb690232De81a9FFB44Bb346026faB" + +export const GAS_USAGE_OFFSET = 4928 + 2360 + +// Few more constants can be added regarding token transfer / handle payments + export const FAKE_SIGNATURE = "0x39f5032f1cd30005aa1e35f04394cabfe7de3b6ae6d95b27edd8556064c287bf61f321fead0cf48ca4405d497cc8fc47fc7ff0b7f5c45baa14090a44f2307d8230" export interface RestRelayerOptions { @@ -76,6 +83,8 @@ export interface TokenData { address: string, decimal: number, logoUrl: string + feeTokenTransferGas: number; + refundReceiver?: string } export interface FeeQuote { @@ -86,6 +95,7 @@ export interface FeeQuote { payment: number, tokenGasPrice: number, //review offset?: number, + refundReceiver?: string; } export interface FeeOptionsResponse { diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index ee2d2b242..a4b025db9 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -42,8 +42,14 @@ interface INodeClient { estimateRequiredTxGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise + // TODO + // rename estimatorAddress where it's needed + estimateRequiredTxGasOverride(chainId: number, estimatorAddress: string, transaction: MetaTransactionData): Promise + estimateHandlePaymentGas(chainId: number, estimatorAddress: string, feeRefund: FeeRefundData): Promise + estimateHandlePaymentGasOverride(chainId: number, estimatorAddress: string, feeRefund: FeeRefundData): Promise + estimateUndeployedContractGas(chainId: number, estimatorAddress: string, transaction: MetaTransactionData, feeRefund: FeeRefund, signature: string): Promise } diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index c8550751f..289c1120e 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -136,6 +136,17 @@ class NodeClient implements INodeClient { } }) } + async estimateRequiredTxGasOverride(chainId: number, walletAddress: string, transaction: MetaTransactionData): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/estimator/required-override`, + method: HttpMethod.Post, + body: { + chainId, + walletAddress, + transaction + } + }) + } async estimateHandlePaymentGas(chainId: number, walletAddress: string, feeRefund: FeeRefundData): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/handle-payment`, @@ -148,6 +159,18 @@ class NodeClient implements INodeClient { }) } + async estimateHandlePaymentGasOverride(chainId: number, walletAddress: string, feeRefund: FeeRefundData): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/estimator/handle-payment-override`, + method: HttpMethod.Post, + body: { + chainId, + walletAddress, + feeRefund + } + }) + } + async estimateUndeployedContractGas(chainId: number, walletAddress: string, transaction: MetaTransactionData, feeRefund: FeeRefund, signature:string): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/undeployed`, diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index e37e5e086..14b3279da 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -163,6 +163,7 @@ export type EstimateGasResponse = { message: string code: number data: { - gas: number + gas: number, + txBaseGas?: number } } diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index ed2a52ae6..849d1a17d 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -155,7 +155,9 @@ export class LocalRelayer implements Relayer { "address": "0xb5B640E6414b6DeF4FC9B3C1EeF373925effeCcF", "decimal": 6, "logoUrl": "https://raw.githubusercontent.com/spothq/cryptocurrency-icons/master/128/color/usdc.png", - "offset": 1000000 + "offset": 1000000, + "feeTokenTransferGas": 22975, + "refundReceiver": "0xc1d3206324d806b6586cf15324178f8e8781a293" }] } }; diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 2a7c73806..07c6fcca8 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -71,33 +71,17 @@ export class RestRelayer implements Relayer { } } - /*async isWalletDeployed(walletAddress: string): Promise { - // Check if wallet is deployed - return true; - }*/ - /*async getFeeOptions( - ): Promise<{ options: FeeOption[] }> { - return { options: [] } - }*/ - - /*async gasRefundOptions( - ): Promise { - const { options } = //await this.getFeeOptions() - return options - }*/ - // Should make an object that takes config and context - // Add feeQuote later - // Appending tx and rawTx may not be necessary + // Make gas limit a param + // We would send manual gas limit with high targetTxGas (whenever targetTxGas can't be accurately estimated) async relay(signedTx: SignedTransaction, config: SmartAccountState, context: SmartAccountContext) : Promise { const { isDeployed, address } = config; const { multiSendCall } = context; // multisend has to be multiSendCallOnly here! if(!isDeployed) { // If not =>> preprendWalletDeploy - console.log('here'); const {to, data} = this.prepareWalletDeploy(config,context); const originalTx:WalletTransaction = signedTx.tx; @@ -135,7 +119,10 @@ export class RestRelayer implements Relayer { return sendRequest({ url: `${this.#relayServiceBaseUrl}`, method: HttpMethod.Post, - body: { ...finalRawRx, /*gasLimit: ethers.constants.Two.pow(24)*/ } + body: { ...finalRawRx, /*gasLimit: { + hex: '0x1E8480', + type: 'hex' + },*/ } }) } console.log('signedTx', signedTx); @@ -144,7 +131,10 @@ export class RestRelayer implements Relayer { return sendRequest({ url: `${this.#relayServiceBaseUrl}`, method: HttpMethod.Post, - body: { ...signedTx.rawTx, /*gasLimit: ethers.constants.Two.pow(24),*/ refundInfo: { + body: { ...signedTx.rawTx, /*gasLimit: { + hex: '0x1E8480', + type: 'hex' + },*/ refundInfo: { tokenGasPrice: signedTx.tx.gasPrice, gasToken: signedTx.tx.gasToken, } } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 50c662e96..2b0605179 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -24,6 +24,8 @@ import { FeeOptionsResponse, ZERO_ADDRESS, FAKE_SIGNATURE, + GAS_USAGE_OFFSET, + DEFAULT_FEE_RECEIVER, RelayResponse } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' @@ -42,6 +44,7 @@ import { MetaTransaction, buildMultiSendSmartAccountTx } from '@biconomy-sdk/transactions' +import { encodeTransfer } from '@biconomy-sdk/transactions' import { GasEstimator } from './assets' import { BalancesDto } from '@biconomy-sdk/node-client' import { BalancesResponse, UsdBalanceResponse, EstimateGasResponse } from '@biconomy-sdk/node-client' @@ -215,9 +218,15 @@ class SmartAccount { public async estimateRequiredTxGas(chainId: number, walletAddress: string, transaction: MetaTransactionData): Promise { return this.nodeClient.estimateRequiredTxGas(chainId, walletAddress, transaction) } + public async estimateRequiredTxGasOverride(chainId: number, walletAddress: string, transaction: MetaTransactionData): Promise { + return this.nodeClient.estimateRequiredTxGasOverride(chainId, walletAddress, transaction) + } public async estimateHandlePaymentGas(chainId: number, walletAddress: string, feeRefundData: FeeRefundData): Promise { return this.nodeClient.estimateHandlePaymentGas(chainId, walletAddress, feeRefundData) } + public async estimateHandlePaymentGasOverride(chainId: number, walletAddress: string, feeRefundData: FeeRefundData): Promise { + return this.nodeClient.estimateHandlePaymentGasOverride(chainId, walletAddress, feeRefundData) + } public async estimateUndeployedContractGas(chainId: number, walletAddress: string, transaction: MetaTransactionData, feeRefundData: FeeRefund, signature: string): Promise { return this.nodeClient.estimateUndeployedContractGas(chainId, walletAddress, transaction, feeRefundData, signature) } @@ -363,10 +372,13 @@ class SmartAccount { // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth const estimatedGasUsed: number = await this.estimateTransaction(transaction, batchId, chainId); + // also relayer would give feeReceiver that becomes part of feeQuote + feeOptionsAvailable.forEach((feeOption) => { + const feeTokenTransferGas = feeOption.feeTokenTransferGas const tokenGasPrice = feeOption.tokenGasPrice || 0; const offset = feeOption.offset || 1; - let payment = tokenGasPrice * estimatedGasUsed / offset; + let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; let feeQuote = { symbol: feeOption.symbol, @@ -375,7 +387,8 @@ class SmartAccount { logoUrl: feeOption.logoUrl, tokenGasPrice: feeOption.tokenGasPrice, offset: feeOption.offset, - payment: payment + payment: payment, + refundReceiver: feeOption.refundReceiver } feeQuotes.push(feeQuote); @@ -407,10 +420,13 @@ class SmartAccount { // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth const estimatedGasUsed: number = await this.estimateTransactionBatch(transactions, batchId, chainId); + // also relayer should give feeReceiver that becomes part of feeQuote + feeOptionsAvailable.forEach((feeOption) => { + const feeTokenTransferGas = feeOption.feeTokenTransferGas const tokenGasPrice = feeOption.tokenGasPrice || 0; const offset = feeOption.offset || 1; - let payment = tokenGasPrice * estimatedGasUsed / offset; + let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; let feeQuote = { symbol: feeOption.symbol, @@ -419,7 +435,8 @@ class SmartAccount { logoUrl: feeOption.logoUrl, tokenGasPrice: feeOption.tokenGasPrice, offset: feeOption.offset, - payment: payment + payment: payment, + refundReceiver: feeOption.refundReceiver } feeQuotes.push(feeQuote); @@ -457,7 +474,6 @@ class SmartAccount { console.log('estimateWalletDeployment ', estimateWalletDeployment); estimatedGasUsed += estimateWalletDeployment; - estimatedGasUsed -= 21000; } const tx = await this.createTransactionBatch(transactions, batchId); @@ -482,16 +498,10 @@ class SmartAccount { } const ethCallOverrideResponse = await this.estimateUndeployedContractGas(chainId, this.address, txn, refundInfo, FAKE_SIGNATURE); - let noAuthEstimate = Number(ethCallOverrideResponse.data.gas); + let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); console.log('no auth no refund estimate', noAuthEstimate); estimatedGasUsed += noAuthEstimate; - - // TODO @review - // chat with Sachin - // For the refund we need to add estimation seperately - estimatedGasUsed += 22900 // Might have to come from relayer along with quotes - return estimatedGasUsed; } @@ -502,28 +512,10 @@ class SmartAccount { // Check if available from current state const isDeployed = await this.isDeployed(chainId); if (!isDeployed) { - const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); - const walletFactoryInterface = this.factory().getInterface(); - const state = await this.getSmartAccountState(); - - const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ - this.factory().getAddress(), - walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ - state.owner, - state.entryPointAddress, - state.fallbackHandlerAddress, - 0 - ]) - ]) - console.log('encodedEstimate ', encodedEstimateData) - - const deployCostresponse = await this.estimateExternalGas(chainId, encodedEstimateData); - const estimateWalletDeployment = Number(deployCostresponse.data.gas); - console.log('estimateWalletDeployment ', estimateWalletDeployment); + const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); estimatedGasUsed += estimateWalletDeployment; - estimatedGasUsed -= 21000; } const tx = await this.createTransaction(transaction, batchId); @@ -535,6 +527,9 @@ class SmartAccount { operation: tx.operation, targetTxGas: tx.targetTxGas } + + // to avoid failing eth_call override with undeployed wallet + txn.targetTxGas = 500000; const refundInfo: FeeRefund = { baseGas: tx.baseGas, @@ -545,16 +540,10 @@ class SmartAccount { } const ethCallOverrideResponse = await this.estimateUndeployedContractGas(chainId, this.address, txn, refundInfo, FAKE_SIGNATURE); - let noAuthEstimate = Number(ethCallOverrideResponse.data.gas); + let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); console.log('no auth no refund estimate', noAuthEstimate); estimatedGasUsed += noAuthEstimate; - - // TODO @review - // chat with Sachin - // For the refund we need to add estimation seperately - estimatedGasUsed += 22900 - return estimatedGasUsed; } @@ -571,6 +560,7 @@ class SmartAccount { * @param chainId * @returns */ + // Could be passed on estimateWalletDeploymentGas: number, async createRefundTransaction( transaction: Transaction, feeQuote: FeeQuote, @@ -580,10 +570,17 @@ class SmartAccount { let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) + let additionalBaseGas = 0; + // NOTE : If the wallet is not deployed yet then nonce would be zero let nonce = 0 - if (await this.isDeployed(chainId)) { + const isDeployed = await this.isDeployed(chainId); + if (isDeployed) { nonce = (await walletContract.getNonce(batchId)).toNumber() + } else { + const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); + // We know it's going to get deployed by Relayer but we handle refund cost here.. + additionalBaseGas += estimateWalletDeployment; // wallet deployment gas } console.log('nonce: ', nonce) @@ -597,43 +594,77 @@ class SmartAccount { operation: OperationType.Call } console.log(internalTx); - const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); - const gasEstimate1 = Number(response.data.gas) + 50000 // review // check safeServiceClient - console.log('required txgas estimate ', gasEstimate1); - // Depending on feeToken provide baseGas! + let targetTxGas, baseGas, handlePaymentEstimate; - const refundDetails: FeeRefundData = { - gasUsed: gasEstimate1, - baseGas: gasEstimate1, - gasPrice: feeQuote.tokenGasPrice, - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: ZERO_ADDRESS - } + const regularOffSet = GAS_USAGE_OFFSET - const handlePaymentResponse = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails); - let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + if(!isDeployed){ + // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet - console.log('handle payment estimate ', handlePaymentEstimate); + // targetTxGas? + // i. use really high value + // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] + + const response = await this.estimateRequiredTxGasOverride(chainId, this.address, internalTx); + + // TODO + // Review + const requiredTxGasEstimate = Number(response.data.gas) + 330000 + console.log('required txgas estimate (with override) ', requiredTxGasEstimate); + targetTxGas = requiredTxGasEstimate; + + // baseGas? + // Depending on feeToken provide baseGas! We could use constant value provided by the relayer + + const refundDetails: FeeRefundData = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + + const handlePaymentResponse = await this.estimateHandlePaymentGasOverride(chainId, this.address, refundDetails); + handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate); + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; + + } else { + const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); + // considerable offset ref gnosis safe service client safeTxGas + const requiredTxGasEstimate = Number(response.data.gas) + 30000 + console.log('required txgas estimate ', requiredTxGasEstimate); + targetTxGas = requiredTxGasEstimate; + + const refundDetails: FeeRefundData = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + + const handlePaymentResponse = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails); + handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + + console.log('handlePaymentEstimate ', handlePaymentEstimate); + + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment + } - // If the wallet deployment has to be appended then baseGas would change - if(handlePaymentEstimate === 0){ - handlePaymentEstimate = 22900 - } - console.log('handlePaymentEstimate ', handlePaymentEstimate); - const baseGas = handlePaymentEstimate + 4928 + 2360; // delegate call + event emission + state updates - const walletTx: WalletTransaction = buildSmartAccountTransaction({ to: transaction.to, value: transaction.value, data: transaction.data, // for token transfers use encodeTransfer - targetTxGas: gasEstimate1, + targetTxGas: targetTxGas, baseGas, - refundReceiver: ZERO_ADDRESS, - gasPrice: refundDetails.gasPrice.toString(), //review - tokenGasPriceFactor: refundDetails.tokenGasPriceFactor.toString(), - gasToken: refundDetails.gasToken, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS, + gasPrice: feeQuote.tokenGasPrice.toString(), //review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, nonce }) @@ -658,41 +689,18 @@ class SmartAccount { chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { let walletContract = this.smartAccount(chainId).getContract(); walletContract = walletContract.attach(this.address); - + const isDeployed = await this.isDeployed(chainId); let additionalBaseGas = 0; // NOTE : If the wallet is not deployed yet then nonce would be zero let nonce = 0; - if(await this.isDeployed(chainId)) { + if(isDeployed) { nonce = (await walletContract.getNonce(batchId)).toNumber(); } else { - - const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); - const walletFactoryInterface = this.factory().getInterface(); - const state = await this.getSmartAccountState(); - - - const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ - this.factory().getAddress(), - walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ - state.owner, - state.entryPointAddress, - state.fallbackHandlerAddress, - 0 - ]) - ]) - console.log('encodedEstimate ', encodedEstimateData) - - const deployCostresponse = await this.estimateExternalGas(chainId, encodedEstimateData); - const estimateWalletDeployment = Number(deployCostresponse.data.gas); - console.log('estimateWalletDeployment ', estimateWalletDeployment); - - - // We know it's going to get deployed by Relayer - // but we handle refund cost here.. + // TODO : estimation cost can be passed + const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); + // We know it's going to get deployed by Relayer but we handle refund cost here.. additionalBaseGas += estimateWalletDeployment; // wallet deployment gas - additionalBaseGas -= 21000; // cause it would be pretty much accounted in internal txn on wallet - // could be done using external call (gasEstimatorv api) } console.log('nonce: ', nonce); @@ -725,68 +733,110 @@ class SmartAccount { operation: walletTx.operation } console.log(internalTx); - // TODO - // Currently we can't do these estimations without wallet being deployed... - const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); - // If we get this reponse zero, there has to be a way to estimate this fror undeployed wallet - // i. use really high value - // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] + let targetTxGas, baseGas, handlePaymentEstimate; - // considerable offset ref gnosis safe service client safeTxGas - const gasEstimate1 = Number(response.data.gas) + 50000 - console.log('required txgas estimate ', gasEstimate1); - - // Depending on feeToken provide baseGas! + const regularOffSet = GAS_USAGE_OFFSET - console.log('feeQuote.offset ', feeQuote.offset); - - const refundDetails: FeeRefundData = { - gasUsed: gasEstimate1, - baseGas: gasEstimate1, - gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: ZERO_ADDRESS - } - - const handlePaymentResponse = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails); - // If we get this reponse zero, there has to be a way to estimate this for undeployed wallet - // We could use constant value provided by the relayer - let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + if(!isDeployed){ + // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet + + // targetTxGas? + // i. use really high value + // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] + + const response = await this.estimateRequiredTxGasOverride(chainId, this.address, internalTx); + + // not getting accurate value for undeployed wallet + // TODO + // Review + const requiredTxGasEstimate = Number(response.data.gas) + 330000 + console.log('required txgas estimate (with override) ', requiredTxGasEstimate); + targetTxGas = requiredTxGasEstimate; + + // baseGas? + // Depending on feeToken provide baseGas! We could use constant value provided by the relayer + + const refundDetails: FeeRefundData = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + + const handlePaymentResponse = await this.estimateHandlePaymentGasOverride(chainId, this.address, refundDetails); + handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + + console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate); - if(handlePaymentEstimate === 0){ - handlePaymentEstimate = 22900 + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; + + } else { + const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); + // considerable offset ref gnosis safe service client safeTxGas + const requiredTxGasEstimate = Number(response.data.gas) + 30000 + console.log('required txgas estimate ', requiredTxGasEstimate); + targetTxGas = requiredTxGasEstimate; + + const refundDetails: FeeRefundData = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + + const handlePaymentResponse = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails); + handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + + console.log('handlePaymentEstimate ', handlePaymentEstimate); + + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment } - console.log('handlePaymentEstimate ', handlePaymentEstimate); - // If the wallet deployment has to be appended then baseGas would change - const regularOffSet = 4928 + 2360; - const baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment - const finalWalletTx: WalletTransaction = buildSmartAccountTransaction({ to: walletTx.to, value: walletTx.value, data: walletTx.data, // for token transfers use encodeTransfer operation: walletTx.operation, - targetTxGas: gasEstimate1, + targetTxGas: targetTxGas, baseGas: baseGas, - refundReceiver: ZERO_ADDRESS, - gasPrice: refundDetails.gasPrice.toString(), //review - tokenGasPriceFactor: refundDetails.tokenGasPriceFactor.toString(), - gasToken: refundDetails.gasToken, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS, + gasPrice: feeQuote.tokenGasPrice.toString(), //review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, nonce }) - - // If wallet is not deployed revise targetTxGas and baseGas - // Temp... - if(!(await this.isDeployed(chainId))) { - finalWalletTx.targetTxGas = 500000 - finalWalletTx.baseGas = baseGas + 22900 - } return finalWalletTx } + + async estimateSmartAccountDeployment(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); + const walletFactoryInterface = this.factory().getInterface(); + const state = await this.getSmartAccountState(); + + + const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ + this.factory().getAddress(), + walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ + state.owner, + state.entryPointAddress, + state.fallbackHandlerAddress, + 0 + ]) + ]) + console.log('encodedEstimate ', encodedEstimateData) + + const deployCostresponse = await this.estimateExternalGas(chainId, encodedEstimateData); + const estimateWalletDeployment = Number(deployCostresponse.data.gas); + console.log('estimateWalletDeployment ', estimateWalletDeployment); + + return estimateWalletDeployment; + } /** * Prepares compatible WalletTransaction object based on Transaction Request @@ -867,6 +917,64 @@ class SmartAccount { return walletTx } + async prepareDeployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { + const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; + let feeQuotes: Array = []; + + const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); + + feeOptionsAvailable.forEach((feeOption) => { + // TODO + // Make it a constant + const estimatedGasUsed: number = (estimateWalletDeployment + 77369); + + // const feeTokenTransferGas = feeOption.feeTokenTransferGas + const tokenGasPrice = feeOption.tokenGasPrice || 0; + const offset = feeOption.offset || 1; + let payment = tokenGasPrice * (estimatedGasUsed) / offset; + + let feeQuote = { + symbol: feeOption.symbol, + address: feeOption.address, + decimal: feeOption.decimal, + logoUrl: feeOption.logoUrl, + tokenGasPrice: feeOption.tokenGasPrice, + offset: feeOption.offset, + payment: payment, + refundReceiver: feeOption.refundReceiver + } + + feeQuotes.push(feeQuote); + }); + + return feeQuotes; + } + + // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment + async deployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId, feeQuote: FeeQuote): Promise { + // Not checking again if the wallet is actually deployed + // const isDeployed = await this.isDeployed(chainId); + const token = feeQuote.address; + const offset = feeQuote.offset || 1; + const feeReceiver = feeQuote.refundReceiver || DEFAULT_FEE_RECEIVER; + + const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); + + // do estimations here or pass on payment and use feeQuote fully! + let feesToPay = feeQuote.tokenGasPrice * (estimateWalletDeployment + 77369) / offset; + feesToPay = parseInt(feesToPay.toString()); + + const tx = { + to: token, + data: encodeTransfer(feeReceiver, Number(feesToPay)) + }; + + const transaction = await this.createTransaction(tx); + const txHash = await this.sendTransaction(transaction); + return txHash; + } + /** * * @param chainId optional chainId From e57b5f89800a5dbe1162123506274c3b0ebf3994 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 5 Sep 2022 16:52:44 +0400 Subject: [PATCH 0122/1247] version upgrade --- lerna.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/smart-account/src/assets/index.ts | 10 +++++----- packages/transactions/package.json | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lerna.json b/lerna.json index f1d4cbaa7..a708a46cf 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages/*" ], "useNx": true, - "version": "1.0.3" + "version": "1.0.4" } diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 11e84681e..aba67557b 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.3", + "version": "1.0.4", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 0ef7c7b05..1e05f01e4 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.3", + "version": "1.0.4", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 1aeea6f4d..e5f883ee3 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.3", + "version": "1.0.4", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 3b064163d..90f0f2c90 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.3", + "version": "1.0.4", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 8c656bb17..87dc2c28c 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.3", + "version": "1.0.4", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/smart-account/src/assets/index.ts b/packages/smart-account/src/assets/index.ts index 447acc609..c0df5a4be 100644 --- a/packages/smart-account/src/assets/index.ts +++ b/packages/smart-account/src/assets/index.ts @@ -2,7 +2,7 @@ export const MultiSend = { defaultAddress: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', released: true, contractName: 'MultiSend', - version: '1.0.3', + version: '1.0.4', networkAddresses: { '1': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', '4': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', @@ -40,7 +40,7 @@ export const MultiSendCallOnly = { defaultAddress: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', released: true, contractName: 'MultiSendCallOnly', - version: '1.0.3', + version: '1.0.4', networkAddresses: { '1': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', '4': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', @@ -73,7 +73,7 @@ export const SmartWallet = { defaultAddress: '0x056DcE811A2b695171274855E7246039Df298158', released: true, contractName: 'SmartWallet', - version: '1.0.3', + version: '1.0.4', networkAddresses: { '1': '0x056DcE811A2b695171274855E7246039Df298158', '4': '0x056DcE811A2b695171274855E7246039Df298158', @@ -1088,7 +1088,7 @@ export const WalletFactory = { defaultAddress: '0x050bca32264195976Fe00BcA566B548413A9E658', released: true, contractName: 'WalletFactory', - version: '1.0.3', + version: '1.0.4', networkAddresses: { '1': '0x050bca32264195976Fe00BcA566B548413A9E658', '4': '0x050bca32264195976Fe00BcA566B548413A9E658', @@ -1250,7 +1250,7 @@ export const GasEstimator = { defaultAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', released: true, contractName: 'WalletFactory', - version: '1.0.3', + version: '1.0.4', networkAddresses: { '5': '0xc6e8748a08e591250a3eed526e9455859633c6c4', }, diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 1eb4c86b1..3bc12c89b 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.3", + "version": "1.0.4", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From 3bb99f442a28525a336c053a6f4957fa0cd3d2df Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 5 Sep 2022 23:23:41 +0400 Subject: [PATCH 0123/1247] merge ready --- packages/smart-account/src/SmartAccount.ts | 940 ++++++++++++--------- 1 file changed, 523 insertions(+), 417 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 48a87ed01..d3ff4bc00 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -5,7 +5,9 @@ import { getSmartWalletFactoryContract, getMultiSendContract, getMultiSendCallOnlyContract, - getSmartWalletContract + getSmartWalletContract, + findChainById, + findContractAddressesByVersion } from './utils/FetchContractsInfo' import { AddressForCounterFactualWalletDto, @@ -17,10 +19,12 @@ import { RefundTransactionBatchDto, TransactionDto, TransactionBatchDto, + ExecTransaction, RelayTransaction, FeeRefundHandlePayment, FeeRefundV1_0_0, FeeRefundV1_0_2, + WalletTransaction, SmartAccountVersion, SignedTransaction, ChainId, @@ -32,6 +36,7 @@ import { RawTransactionType, SmartAccountState, MetaTransactionData, + MetaTransaction, OperationType, TokenData, FeeQuote, @@ -43,28 +48,40 @@ import { RelayResponse } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' -import NodeClient, { ChainConfig, SupportedChainsResponse } from '@biconomy-sdk/node-client' +import NodeClient, { + ChainConfig, + SupportedChainsResponse, + SmartAccountsResponse, + SmartAccountByOwnerDto, + EstimateExternalGasDto, + EstimateRequiredTxGasDto, + EstimateHandlePaymentTxGasDto, + EstimateUndeployedContractGasDto +} from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' import { Relayer } from '@biconomy-sdk/relayer' import { - WalletTransaction, - ExecTransaction, - FeeRefund, - SmartAccountTransaction, - getSignatureParameters, - EIP712_WALLET_TX_TYPE, - buildSmartAccountTransaction, + buildSmartAccountTransaction, smartAccountSignMessage, - MetaTransaction, - buildMultiSendSmartAccountTx + buildMultiSendSmartAccountTx, + // WalletTransaction, + // ExecTransaction, + // MetaTransaction, + // buildMultiSendSmartAccountTx } from '@biconomy-sdk/transactions' import { encodeTransfer } from '@biconomy-sdk/transactions' import { GasEstimator } from './assets' import { BalancesDto } from '@biconomy-sdk/node-client' -import { BalancesResponse, UsdBalanceResponse, EstimateGasResponse } from '@biconomy-sdk/node-client' +import { + BalancesResponse, + UsdBalanceResponse, + EstimateGasResponse +} from '@biconomy-sdk/node-client' // Create an instance of Smart Account with multi-chain support. class SmartAccount { + // By default latest version + DEFAULT_VERSION: SmartAccountVersion = '1.0.2' // { ethAdapter } is a window that gives access to all the implemented functions of it // requires signer and read-only provider ethAdapter!: { [chainId: number]: EthersAdapter } @@ -103,10 +120,14 @@ class SmartAccount { address!: string // contract instances - smartWalletContract!: { [chainId: number]: SmartWalletContract } - multiSendContract!: { [chainId: number]: MultiSendContract } - multiSendCallOnlyContract!: { [chainId: number]: MultiSendCallOnlyContract } - smartWalletFactoryContract!: { [chainId: number]: SmartWalletFactoryContract } + smartWalletContract!: { [chainId: number]: { [version: string]: SmartWalletContract } } + multiSendContract!: { [chainId: number]: { [version: string]: MultiSendContract } } + multiSendCallOnlyContract!: { + [chainId: number]: { [version: string]: MultiSendCallOnlyContract } + } + smartWalletFactoryContract!: { + [chainId: number]: { [version: string]: SmartWalletFactoryContract } + } // TODO // Review provider type WalletProviderLike / ExternalProvider @@ -131,8 +152,17 @@ class SmartAccount { this.signer = walletProvider.getSigner() this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) - // upcoming - // this.relayer + } + + /** + * + * @param smartAccountVersion + * @description // set wallet version to be able to interact with different deployed versions + */ + // TODO //@review @Talha + async setSmartAccountVersion(smartAccountVersion: SmartAccountVersion) { + this.DEFAULT_VERSION = smartAccountVersion + this.address = await this.getAddress() } // TODO @@ -155,6 +185,7 @@ class SmartAccount { const providerUrl = chainConfig.find((n) => n.chainId === network)?.providerUrl // To keep it network agnostic // Note: think about events when signer needs to pay gas + const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable this.ethAdapter[network] = new EthersAdapter({ @@ -163,9 +194,12 @@ class SmartAccount { provider: readProvider }) + this.smartWalletFactoryContract[network] = {} + this.smartWalletContract[network] = {} + this.multiSendContract[network] = {} + this.multiSendCallOnlyContract[network] = {} this.initializeContracts(network) } - // We set the common owner by quering default active chainId ethAdapter this.owner = await this.ethersAdapter().getSignerAddress() // @review @@ -213,6 +247,31 @@ class SmartAccount { } } + // Review : more / other potential methods + // sendSignedTransaction + // signMessage + + // Discuss about multichain aspect of relayer node url and clients + // TODO: get details from backend config + // NOTE: Discuss about multichain aspect of relayer node url and clients + + /** + * @param address Owner aka {EOA} address + * @param index number of smart account deploy i.e {0, 1 ,2 ...} + * @description return address for Smart account + * @returns + */ + private async getAddressForCounterfactualWallet( + addressForCounterFactualWalletDto: AddressForCounterFactualWalletDto + ): Promise { + const { index = 0, chainId = this.#smartAccountConfig.activeNetworkId } = + addressForCounterFactualWalletDto + console.log('index and ChainId ', index, chainId, this.DEFAULT_VERSION) + return this.smartWalletFactoryContract[chainId][ + this.DEFAULT_VERSION + ].getAddressForCounterfactualWallet(this.owner, index) + } + /** * Fetch supported chainInfo from backend node : used in init * @returns ChainConfig response received from backend node @@ -221,35 +280,57 @@ class SmartAccount { return this.nodeClient.getAllSupportedChains() } - public async getAlltokenBalances(balancesDto: BalancesDto, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - if(!balancesDto.chainId) balancesDto.chainId = chainId; + public async getAlltokenBalances( + balancesDto: BalancesDto, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + if (!balancesDto.chainId) balancesDto.chainId = chainId return this.nodeClient.getAlltokenBalances(balancesDto) } - public async getTotalBalanceInUsd(balancesDto: BalancesDto, chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - if(!balancesDto.chainId) balancesDto.chainId = chainId; + public async getTotalBalanceInUsd( + balancesDto: BalancesDto, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): Promise { + if (!balancesDto.chainId) balancesDto.chainId = chainId return this.nodeClient.getTotalBalanceInUsd(balancesDto) } - public async estimateExternalGas(chainId: number, encodedData: string): Promise { - return this.nodeClient.estimateExternalGas(chainId, encodedData) + public async getSmartAccountsByOwner( + smartAccountByOwnerDto: SmartAccountByOwnerDto + ): Promise { + return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto) } - public async estimateRequiredTxGas(chainId: number, walletAddress: string, transaction: MetaTransactionData): Promise { - return this.nodeClient.estimateRequiredTxGas(chainId, walletAddress, transaction) + + public async estimateExternalGas( + estimateExternalGasDto: EstimateExternalGasDto + ): Promise { + return this.nodeClient.estimateExternalGas(estimateExternalGasDto) } - public async estimateRequiredTxGasOverride(chainId: number, walletAddress: string, transaction: MetaTransactionData): Promise { - return this.nodeClient.estimateRequiredTxGasOverride(chainId, walletAddress, transaction) + public async estimateRequiredTxGas( + estimateRequiredTxGasDto: EstimateRequiredTxGasDto + ): Promise { + return this.nodeClient.estimateRequiredTxGas(estimateRequiredTxGasDto) } - public async estimateHandlePaymentGas(chainId: number, walletAddress: string, feeRefundData: FeeRefundData): Promise { - return this.nodeClient.estimateHandlePaymentGas(chainId, walletAddress, feeRefundData) + public async estimateRequiredTxGasOverride( + estimateRequiredTxGasDto: EstimateRequiredTxGasDto + ): Promise { + return this.nodeClient.estimateRequiredTxGasOverride(estimateRequiredTxGasDto) } - public async estimateHandlePaymentGasOverride(chainId: number, walletAddress: string, feeRefundData: FeeRefundData): Promise { - return this.nodeClient.estimateHandlePaymentGasOverride(chainId, walletAddress, feeRefundData) + public async estimateHandlePaymentGas( + estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto + ): Promise { + return this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentTxGasDto) } - public async estimateUndeployedContractGas(chainId: number, walletAddress: string, transaction: MetaTransactionData, feeRefundData: FeeRefund, signature: string): Promise { - return this.nodeClient.estimateUndeployedContractGas(chainId, walletAddress, transaction, feeRefundData, signature) + public async estimateHandlePaymentGasOverride( + estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto + ): Promise { + return this.nodeClient.estimateHandlePaymentGasOverride(estimateHandlePaymentTxGasDto) + } + public async estimateUndeployedContractGas(estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto + ): Promise { + return this.nodeClient.estimateUndeployedContractGas(estimateUndeployedContractGasDto) } - // return adapter instance to be used for blockchain interactions /** @@ -292,10 +373,8 @@ class SmartAccount { * @param chainId optional chainId * @returns:string Signature */ - async signTransaction( - tx: WalletTransaction, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): Promise { + async signTransaction(signTransactionDto: SignTransactionDto): Promise { + const { chainId = this.#smartAccountConfig.activeNetworkId, tx } = signTransactionDto let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) @@ -314,11 +393,12 @@ class SmartAccount { * @param chainId optional chainId * @returns */ - async sendTransaction( - tx: WalletTransaction, - batchId: number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): Promise { + async sendTransaction(sendTransactionDto: SendTransactionDto): Promise { + const { + tx, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = sendTransactionDto let rawTx: RawTransactionType = { to: tx.to, data: tx.data, @@ -334,7 +414,7 @@ class SmartAccount { targetTxGas: tx.targetTxGas } - const refundInfo: FeeRefund = { + const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_2 = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, tokenGasPriceFactor: tx.tokenGasPriceFactor, @@ -342,10 +422,10 @@ class SmartAccount { refundReceiver: tx.refundReceiver } - let walletContract = this.smartAccount(chainId).getContract() + let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() walletContract = walletContract.attach(this.address) - let signature = await this.signTransaction(tx) + let signature = await this.signTransaction({ tx, chainId }) let execTransaction = await walletContract.populateTransaction.execTransaction( transaction, @@ -359,44 +439,56 @@ class SmartAccount { const state = await this.getSmartAccountState(chainId) - const signedTx = { + const signedTx: SignedTransaction = { rawTx, tx } - - const txn:RelayResponse = await this.relayer.relay(signedTx, state, this.getSmartAccountContext(chainId)) + const relayTrx: RelayTransaction = { + signedTx, + config: state, + context: this.getSmartAccountContext(chainId) + } + const txn: RelayResponse = await this.relayer.relay(relayTrx) return txn.hash } // Get Fee Options from relayer and make it available for display // We can also show list of transactions to be processed (decodeContractCall) /** - * - * @param transaction - * @param batchId - * @param chainId + * + * @param prepareRefundTransactionDto */ async prepareRefundTransaction( - transaction: Transaction, - batchId: number = 0, // may not be necessary - chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + prepareRefundTransactionDto: PrepareRefundTransactionDto + ): Promise { + // TODO + // Review @Talha + const { + transaction, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = prepareRefundTransactionDto - const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) - const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; - let feeQuotes: Array = []; + const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response + let feeQuotes: Array = [] // 1. If wallet is deployed - // 2. If wallet is not deployed (batch wallet deployment on multisend) + // 2. If wallet is not deployed (batch wallet deployment on multisend) // actual estimation with dummy sig // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth - const estimatedGasUsed: number = await this.estimateTransaction(transaction, batchId, chainId); + const estimatedGasUsed: number = await this.estimateTransaction({ + transaction, + batchId, + chainId + }) // also relayer would give feeReceiver that becomes part of feeQuote feeOptionsAvailable.forEach((feeOption) => { const feeTokenTransferGas = feeOption.feeTokenTransferGas - const tokenGasPrice = feeOption.tokenGasPrice || 0; - const offset = feeOption.offset || 1; + const tokenGasPrice = feeOption.tokenGasPrice || 0 + const offset = feeOption.offset || 1 let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; let feeQuote = { @@ -410,41 +502,44 @@ class SmartAccount { refundReceiver: feeOption.refundReceiver } - feeQuotes.push(feeQuote); - }); + feeQuotes.push(feeQuote) + }) - return feeQuotes; + return feeQuotes } // Get Fee Options from relayer and make it available for display // We can also show list of transactions to be processed (decodeContractCall) /** - * - * @param transaction - * @param batchId - * @param chainId + * + * @param prepareRefundTransactionsDto */ async prepareRefundTransactionBatch( - transactions: Transaction[], - batchId: number = 0, // may not be necessary - chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - - const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) - const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; - let feeQuotes: Array = []; + prepareRefundTransactionsDto: PrepareRefundTransactionsDto + ): Promise { + const { + transactions, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = prepareRefundTransactionsDto + const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response + let feeQuotes: Array = [] // 1. If wallet is deployed - // 2. If wallet is not deployed (batch wallet deployment on multisend) + // 2. If wallet is not deployed (batch wallet deployment on multisend) // actual estimation with dummy sig // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth - const estimatedGasUsed: number = await this.estimateTransactionBatch(transactions, batchId, chainId); - - // also relayer should give feeReceiver that becomes part of feeQuote + const estimatedGasUsed: number = await this.estimateTransactionBatch({ + transactions, + batchId, + chainId + }) feeOptionsAvailable.forEach((feeOption) => { const feeTokenTransferGas = feeOption.feeTokenTransferGas - const tokenGasPrice = feeOption.tokenGasPrice || 0; - const offset = feeOption.offset || 1; + const tokenGasPrice = feeOption.tokenGasPrice || 0 + const offset = feeOption.offset || 1 let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; let feeQuote = { @@ -458,44 +553,25 @@ class SmartAccount { refundReceiver: feeOption.refundReceiver } - feeQuotes.push(feeQuote); - }); + feeQuotes.push(feeQuote) + }) - return feeQuotes; + return feeQuotes } - async estimateTransactionBatch( - transactions: Transaction[], - batchId: number = 0, // may not be necessary - chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { + async estimateTransactionBatch( prepareRefundTransactionsDto: PrepareRefundTransactionsDto): Promise { + + const { transactions, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = prepareRefundTransactionsDto let estimatedGasUsed = 0; // Check if available from current state const isDeployed = await this.isDeployed(chainId); if (!isDeployed) { - const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); - const walletFactoryInterface = this.factory().getInterface(); - const state = await this.getSmartAccountState(); - - - const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ - this.factory().getAddress(), - walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ - state.owner, - state.entryPointAddress, - state.fallbackHandlerAddress, - 0 - ]) - ]) - console.log('encodedEstimate ', encodedEstimateData) - - const deployCostresponse = await this.estimateExternalGas(chainId, encodedEstimateData); - const estimateWalletDeployment = Number(deployCostresponse.data.gas); + const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); console.log('estimateWalletDeployment ', estimateWalletDeployment); - estimatedGasUsed += estimateWalletDeployment; } - const tx = await this.createTransactionBatch(transactions, batchId); + const tx = await this.createTransactionBatch({ transactions, batchId, chainId}); const txn: ExecTransaction = { to: tx.to, @@ -508,7 +584,7 @@ class SmartAccount { // to avoid failing eth_call override with undeployed wallet txn.targetTxGas = 500000; - const refundInfo: FeeRefund = { + const refundInfo: FeeRefundV1_0_2 = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, tokenGasPriceFactor: tx.tokenGasPriceFactor, @@ -516,28 +592,41 @@ class SmartAccount { refundReceiver: tx.refundReceiver } - const ethCallOverrideResponse = await this.estimateUndeployedContractGas(chainId, this.address, txn, refundInfo, FAKE_SIGNATURE); + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + transaction: txn, + walletAddress: this.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE + } + + const ethCallOverrideResponse = await this.estimateUndeployedContractGas(estimateUndeployedContractGasDto); let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); console.log('no auth no refund estimate', noAuthEstimate); estimatedGasUsed += noAuthEstimate; + return estimatedGasUsed; } - async estimateTransaction(transaction: Transaction, - batchId: number = 0, // may not be necessary - chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - let estimatedGasUsed = 0; + async estimateTransaction(prepareTransactionDto: PrepareRefundTransactionDto): Promise { + const { + transaction, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = prepareTransactionDto + + let estimatedGasUsed = 0; // Check if available from current state const isDeployed = await this.isDeployed(chainId); if (!isDeployed) { - const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); + console.log('estimateWalletDeployment ', estimateWalletDeployment); estimatedGasUsed += estimateWalletDeployment; } - const tx = await this.createTransaction(transaction, batchId); + const tx = await this.createTransaction({ transaction, batchId, chainId }); const txn: ExecTransaction = { to: tx.to, @@ -550,7 +639,7 @@ class SmartAccount { // to avoid failing eth_call override with undeployed wallet txn.targetTxGas = 500000; - const refundInfo: FeeRefund = { + const refundInfo: FeeRefundV1_0_2 = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, tokenGasPriceFactor: tx.tokenGasPriceFactor, @@ -558,34 +647,41 @@ class SmartAccount { refundReceiver: tx.refundReceiver } - const ethCallOverrideResponse = await this.estimateUndeployedContractGas(chainId, this.address, txn, refundInfo, FAKE_SIGNATURE); + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + transaction: txn, + walletAddress: this.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE + } + + const ethCallOverrideResponse = await this.estimateUndeployedContractGas(estimateUndeployedContractGasDto); let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); console.log('no auth no refund estimate', noAuthEstimate); estimatedGasUsed += noAuthEstimate; + return estimatedGasUsed; } - // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions + // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions /** * Prepares compatible WalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) - * @param transaction - * @param feeToken choice to token to refund the relayer with - * @param tokenGasPrice selected fee quote details - * @param batchId - * @param chainId + * @param refundTransactionDto * @returns */ - // Could be passed on estimateWalletDeploymentGas: number, - async createRefundTransaction( - transaction: Transaction, - feeQuote: FeeQuote, - batchId: number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId + async createRefundTransaction( + refundTransactionDto: RefundTransactionDto ): Promise { + const { + transaction, + feeQuote, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = refundTransactionDto let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) @@ -603,7 +699,7 @@ class SmartAccount { } console.log('nonce: ', nonce) - // in terms of calculating baseGas we should know if wallet is deployed or not otherwise it needs to consider deployment cost + // in terms of calculating baseGas we should know if wallet is deployed or not otherwise it needs to consider deployment cost // (will get batched by relayer) const internalTx: MetaTransactionData = { @@ -612,68 +708,87 @@ class SmartAccount { data: transaction.data || '0x', operation: OperationType.Call } - console.log(internalTx); + console.log(internalTx) let targetTxGas, baseGas, handlePaymentEstimate; + const regularOffSet = GAS_USAGE_OFFSET + + if(!isDeployed){ + // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet + // targetTxGas? + // i. use really high value + // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] + + const estimateRequiredTxGas: EstimateRequiredTxGasDto = { + chainId, + walletAddress: this.address, + transaction: internalTx + } + const response = await this.estimateRequiredTxGasOverride(estimateRequiredTxGas) + // TODO + // Review + const requiredTxGasEstimate = Number(response.data.gas) + 330000 + console.log('required txgas estimate (with override) ', requiredTxGasEstimate); + targetTxGas = requiredTxGasEstimate; - const regularOffSet = GAS_USAGE_OFFSET - - if(!isDeployed){ - // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet - - // targetTxGas? - // i. use really high value - // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] - - const response = await this.estimateRequiredTxGasOverride(chainId, this.address, internalTx); - - // TODO - // Review - const requiredTxGasEstimate = Number(response.data.gas) + 330000 - console.log('required txgas estimate (with override) ', requiredTxGasEstimate); - targetTxGas = requiredTxGasEstimate; - - // baseGas? - // Depending on feeToken provide baseGas! We could use constant value provided by the relayer - - const refundDetails: FeeRefundData = { - gasUsed: requiredTxGasEstimate, - baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS - } - - const handlePaymentResponse = await this.estimateHandlePaymentGasOverride(chainId, this.address, refundDetails); - handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate); - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; - - } else { - const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); - // considerable offset ref gnosis safe service client safeTxGas - const requiredTxGasEstimate = Number(response.data.gas) + 30000 - console.log('required txgas estimate ', requiredTxGasEstimate); - targetTxGas = requiredTxGasEstimate; - - const refundDetails: FeeRefundData = { - gasUsed: requiredTxGasEstimate, - baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS - } - - const handlePaymentResponse = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails); - handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - - console.log('handlePaymentEstimate ', handlePaymentEstimate); + // baseGas? + // Depending on feeToken provide baseGas! We could use constant value provided by the relayer + - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment - } + const refundDetails: FeeRefundHandlePayment = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { + chainId, + walletAddress: this.address, + feeRefund: refundDetails + } + const handlePaymentResponse = await this.estimateHandlePaymentGasOverride(estimateHandlePaymentGas) + let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + + console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate); + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; + } else { + const estimateRequiredTxGas: EstimateRequiredTxGasDto = { + chainId, + walletAddress: this.address, + transaction: internalTx + } + + const response = await this.estimateRequiredTxGas(estimateRequiredTxGas); + // considerable offset ref gnosis safe service client safeTxGas + const requiredTxGasEstimate = Number(response.data.gas) + 30000 + console.log('required txgas estimate ', requiredTxGasEstimate); + targetTxGas = requiredTxGasEstimate; + + const refundDetails: FeeRefundHandlePayment = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + + const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { + chainId, + walletAddress: this.address, + feeRefund: refundDetails + } + const handlePaymentResponse = await this.estimateHandlePaymentGasOverride(estimateHandlePaymentGas) + let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + + console.log('handlePaymentEstimate ', handlePaymentEstimate); + + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment + } + const walletTx: WalletTransaction = buildSmartAccountTransaction({ to: transaction.to, value: transaction.value, @@ -693,152 +808,184 @@ class SmartAccount { /** * Prepares compatible WalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction - * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) - * @param transactions - * @param feeToken choice to token to refund the relayer with - * @param tokenGasPrice selected fee quote details + * @notice This transaction is without fee refund (gasless) + * @param transaction * @param batchId * @param chainId * @returns */ + async createTransaction(transactionDto: TransactionDto): Promise { + const { + transaction, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = transactionDto + let walletContract = this.smartAccount(chainId).getContract() + walletContract = walletContract.attach(this.address) + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (await this.isDeployed(chainId)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } + console.log('nonce: ', nonce) + + const walletTx: WalletTransaction = buildSmartAccountTransaction({ + to: transaction.to, + value: transaction.value, + data: transaction.data, // for token transfers use encodeTransfer + nonce + }) + + return walletTx + } + + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Rename based on other variations to prepare transaction + * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) + * @param refundTransactionBatchDto + * @returns + */ async createRefundTransactionBatch( - transactions: Transaction[], - feeQuote: FeeQuote, - batchId:number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - let walletContract = this.smartAccount(chainId).getContract(); - walletContract = walletContract.attach(this.address); + refundTransactionBatchDto: RefundTransactionBatchDto + ): Promise { + const { + transactions, + feeQuote, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = refundTransactionBatchDto + let walletContract = this.smartAccount(chainId).getContract() + const connectedWallet = this.address + walletContract = walletContract.attach(connectedWallet) + const isDeployed = await this.isDeployed(chainId); let additionalBaseGas = 0; - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0; - if(isDeployed) { - nonce = (await walletContract.getNonce(batchId)).toNumber(); - } else { - // TODO : estimation cost can be passed - const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); - // We know it's going to get deployed by Relayer but we handle refund cost here.. - additionalBaseGas += estimateWalletDeployment; // wallet deployment gas - } - console.log('nonce: ', nonce); - const txs: MetaTransaction[] = []; - - for(let i=0; i < transactions.length; i++) { + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (isDeployed) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } else { + // TODO : estimation cost can be passed - const innerTx: WalletTransaction = buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) + const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); + // We know it's going to get deployed by Relayer but we handle refund cost here.. + console.log('estimateWalletDeployment ', estimateWalletDeployment) - txs.push(innerTx); - } + // We know it's going to get deployed by Relayer + // but we handle refund cost here.. + additionalBaseGas += estimateWalletDeployment // wallet deployment gas + } + console.log('nonce: ', nonce) - const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( - this.multiSend(chainId).getContract(), - txs, - nonce - ); + const txs: MetaTransaction[] = [] - console.log('wallet txn with refund ', walletTx); + for (let i = 0; i < transactions.length; i++) { + const innerTx: WalletTransaction = buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) - const internalTx: MetaTransactionData = { - to: walletTx.to, - value: walletTx.value || 0, - data: walletTx.data || '0x', - operation: walletTx.operation - } - console.log(internalTx); + txs.push(innerTx) + } - let targetTxGas, baseGas, handlePaymentEstimate; + const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( + this.multiSend(chainId).getContract(), + txs, + nonce + ); + console.log('wallet txn with refund ', walletTx); - const regularOffSet = GAS_USAGE_OFFSET + const internalTx: MetaTransactionData = { + to: walletTx.to, + value: walletTx.value || 0, + data: walletTx.data || '0x', + operation: walletTx.operation + } + console.log(internalTx); + + let targetTxGas, baseGas, handlePaymentEstimate; + const regularOffSet = GAS_USAGE_OFFSET; - if(!isDeployed){ - // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet + if(!isDeployed){ + // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet + // targetTxGas? + // i. use really high value + // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] - // targetTxGas? - // i. use really high value - // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] + const response = await this.estimateRequiredTxGasOverride({chainId, walletAddress: this.address, transaction: internalTx}) - const response = await this.estimateRequiredTxGasOverride(chainId, this.address, internalTx); + // not getting accurate value for undeployed wallet + // TODO + // Review + const requiredTxGasEstimate = Number(response.data.gas) + 330000 + console.log('required txgas estimate (with override) ', requiredTxGasEstimate); + targetTxGas = requiredTxGasEstimate; + + // baseGas? + // Depending on feeToken provide baseGas! We could use constant value provided by the relayer + + const refundDetails: FeeRefundHandlePayment = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } - // not getting accurate value for undeployed wallet - // TODO - // Review - const requiredTxGasEstimate = Number(response.data.gas) + 330000 - console.log('required txgas estimate (with override) ', requiredTxGasEstimate); - targetTxGas = requiredTxGasEstimate; + const handlePaymentResponse = await this.estimateHandlePaymentGasOverride({chainId, walletAddress: this.address, feeRefund: refundDetails}); + handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate); + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; + } else { - // baseGas? - // Depending on feeToken provide baseGas! We could use constant value provided by the relayer + const response = await this.estimateRequiredTxGas({chainId, walletAddress: this.address, transaction: internalTx}) + // considerable offset ref gnosis safe service client safeTxGas + const requiredTxGasEstimate = Number(response.data.gas) + 30000 + console.log('required txgas estimate ', requiredTxGasEstimate); + targetTxGas = requiredTxGasEstimate; + + const refundDetails: FeeRefundHandlePayment = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } - const refundDetails: FeeRefundData = { - gasUsed: requiredTxGasEstimate, - baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS - } - - const handlePaymentResponse = await this.estimateHandlePaymentGasOverride(chainId, this.address, refundDetails); - handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - - console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate); - - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; - - } else { - const response = await this.estimateRequiredTxGas(chainId, this.address, internalTx); - // considerable offset ref gnosis safe service client safeTxGas - const requiredTxGasEstimate = Number(response.data.gas) + 30000 - console.log('required txgas estimate ', requiredTxGasEstimate); - targetTxGas = requiredTxGasEstimate; - - const refundDetails: FeeRefundData = { - gasUsed: requiredTxGasEstimate, - baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS - } - - const handlePaymentResponse = await this.estimateHandlePaymentGas(chainId, this.address, refundDetails); - handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + const handlePaymentResponse = await this.estimateHandlePaymentGas({chainId, walletAddress: this.address, feeRefund: refundDetails}); + handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + console.log('handlePaymentEstimate ', handlePaymentEstimate); + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment + } - console.log('handlePaymentEstimate ', handlePaymentEstimate); + const finalWalletTx: WalletTransaction = buildSmartAccountTransaction({ + to: walletTx.to, + value: walletTx.value, + data: walletTx.data, // for token transfers use encodeTransfer + operation: walletTx.operation, + targetTxGas: targetTxGas, + baseGas: baseGas, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS, + gasPrice: feeQuote.tokenGasPrice.toString(), //review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + nonce + }) - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment - } - - const finalWalletTx: WalletTransaction = buildSmartAccountTransaction({ - to: walletTx.to, - value: walletTx.value, - data: walletTx.data, // for token transfers use encodeTransfer - operation: walletTx.operation, - targetTxGas: targetTxGas, - baseGas: baseGas, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS, - gasPrice: feeQuote.tokenGasPrice.toString(), //review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - nonce - }) - - return finalWalletTx + return finalWalletTx } async estimateSmartAccountDeployment(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); const walletFactoryInterface = this.factory().getInterface(); const state = await this.getSmartAccountState(); - - const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ this.factory().getAddress(), walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ @@ -849,92 +996,61 @@ class SmartAccount { ]) ]) console.log('encodedEstimate ', encodedEstimateData) - - const deployCostresponse = await this.estimateExternalGas(chainId, encodedEstimateData); + const deployCostresponse = await this.estimateExternalGas({chainId, encodedData:encodedEstimateData}); const estimateWalletDeployment = Number(deployCostresponse.data.gas); console.log('estimateWalletDeployment ', estimateWalletDeployment); - return estimateWalletDeployment; } - - /** + + /** * Prepares compatible WalletTransaction object based on Transaction Request - * @todo Rename based on other variations to prepare transaction + * @todo Write test case and limit batch size based on test results in scw-contracts * @notice This transaction is without fee refund (gasless) * @param transaction * @param batchId * @param chainId * @returns */ - async createTransaction( - transaction: Transaction, - batchId: number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): Promise { - let walletContract = this.smartAccount(chainId).getContract() - walletContract = walletContract.attach(this.address) - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0 - if (await this.isDeployed(chainId)) { - nonce = (await walletContract.getNonce(batchId)).toNumber() - } - console.log('nonce: ', nonce) - - const walletTx: WalletTransaction = buildSmartAccountTransaction({ - to: transaction.to, - value: transaction.value, - data: transaction.data, // for token transfers use encodeTransfer - nonce - }) - - return walletTx + async createTransactionBatch( + transactionBatchDto: TransactionBatchDto + ): Promise { + const { + transactions, + batchId = 0, + chainId = this.#smartAccountConfig.activeNetworkId + } = transactionBatchDto + let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() + walletContract = walletContract.attach(this.address) + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (await this.isDeployed(chainId)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() } + console.log('nonce: ', nonce) - /** - * Prepares compatible WalletTransaction object based on Transaction Request - * @todo Write test case and limit batch size based on test results in scw-contracts - * @notice This transaction is without fee refund (gasless) - * @param transaction - * @param batchId - * @param chainId - * @returns - */ - async createTransactionBatch(transactions: Transaction[], batchId:number = 0,chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - let walletContract = this.smartAccount(chainId).getContract(); - walletContract = walletContract.attach(this.address); - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0; - if(await this.isDeployed(chainId)) { - nonce = (await walletContract.getNonce(batchId)).toNumber(); - } - console.log('nonce: ', nonce); - - - const txs: MetaTransaction[] = []; + const txs: MetaTransaction[] = [] - for(let i=0; i < transactions.length; i++) { + for (let i = 0; i < transactions.length; i++) { + const innerTx: WalletTransaction = buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) - const innerTx: WalletTransaction = buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) + txs.push(innerTx) + } - txs.push(innerTx); - } + const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( + this.multiSend(chainId).getContract(), + txs, + nonce + ) + console.log('wallet txn without refund ', walletTx) - const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( - this.multiSend(chainId).getContract(), - txs, - nonce - ); - console.log('wallet txn without refund ', walletTx); - - return walletTx - } + return walletTx + } async prepareDeployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) @@ -989,8 +1105,8 @@ class SmartAccount { data: encodeTransfer(feeReceiver, Number(feesToPay)) }; - const transaction = await this.createTransaction(tx); - const txHash = await this.sendTransaction(transaction); + const transaction = await this.createTransaction({transaction: tx}); + const txHash = await this.sendTransaction({tx:transaction}); return txHash; } @@ -1000,7 +1116,7 @@ class SmartAccount { * @returns Smart Wallet Contract instance attached with current smart account address (proxy) */ smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { - const smartWallet = this.smartWalletContract[chainId] + const smartWallet = this.smartWalletContract[chainId][this.DEFAULT_VERSION] // Review @talha const address = this.address smartWallet.getContract().attach(address) @@ -1012,8 +1128,11 @@ class SmartAccount { * @param chainId optional chainId * @returns Smart Wallet Factory instance for requested chainId */ - factory(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletFactoryContract { - return this.smartWalletFactoryContract[chainId] + factory( + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): SmartWalletFactoryContract { + return this.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION] } /** @@ -1021,8 +1140,11 @@ class SmartAccount { * @param chainId optional chainId * @returns MultiSend contract instance for requested chainId */ - multiSend(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendContract { - return this.multiSendContract[chainId] + multiSend( + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + chainId: ChainId = this.#smartAccountConfig.activeNetworkId + ): MultiSendContract { + return this.multiSendContract[chainId][this.DEFAULT_VERSION] } /** @@ -1033,9 +1155,10 @@ class SmartAccount { * @returns MultiSend Call Only contract instance for requested chainId */ multiSendCall( + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): MultiSendCallOnlyContract { - return this.multiSendCallOnlyContract[chainId] + return this.multiSendCallOnlyContract[chainId][this.DEFAULT_VERSION] } /** @@ -1046,11 +1169,14 @@ class SmartAccount { * @param chainId optional chainId * @returns Address of the Smart Account */ + async getAddress( + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, index: number = 0, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { - const address = await this.getAddressForCounterfactualWallet(index, chainId) + // we will hit smart account endpoint to fetch deployed smart account info + const address = await this.getAddressForCounterfactualWallet({ index, chainId }) this.address = address return address // return await this.getAddressForCounterfactualWallet(index,chainId); @@ -1079,18 +1205,21 @@ class SmartAccount { * @returns object containing infromation (owner, relevant contract addresses, isDeployed) about Smart Account for requested chain */ async getSmartAccountState( + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): Promise { - const entryPoint = this.chainConfig.find((n) => n.chainId === chainId)?.entryPoint - const fallbackHandlerAddress = this.chainConfig.find( - (n) => n.chainId === chainId - )?.fallBackHandler + const contractsByVersion = findContractAddressesByVersion( + this.DEFAULT_VERSION, + chainId, + this.chainConfig + ) + const state: SmartAccountState = { address: this.address, owner: this.owner, isDeployed: await this.isDeployed(chainId), // could be set as state in init - entryPointAddress: entryPoint || '', - fallbackHandlerAddress: fallbackHandlerAddress || '' + entryPointAddress: contractsByVersion.entryPointAddress || '', + fallbackHandlerAddress: contractsByVersion.fallBackHandlerAddress || '' } return state } @@ -1103,6 +1232,7 @@ class SmartAccount { * @returns object containing relevant contract instances */ getSmartAccountContext( + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): SmartAccountContext { const context: SmartAccountContext = { @@ -1114,30 +1244,6 @@ class SmartAccount { } return context } - - // Review : more / other potential methods - // sendSignedTransaction - // signMessage - - // Discuss about multichain aspect of relayer node url and clients - // TODO: get details from backend config - // NOTE: Discuss about multichain aspect of relayer node url and clients - - /** - * @param address Owner aka {EOA} address - * @param index number of smart account deploy i.e {0, 1 ,2 ...} - * @description return address for Smart account - * @returns - */ - private async getAddressForCounterfactualWallet( - index: number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): Promise { - return await this.smartWalletFactoryContract[chainId].getAddressForCounterfactualWallet( - this.owner, - index - ) - } } // Temporary default config From 9a7c9995bebb63aa5f283940f682756d0566b9ef Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 6 Sep 2022 19:56:02 +0400 Subject: [PATCH 0124/1247] refactor ref gas estimation --- packages/smart-account/src/SmartAccount.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index d3ff4bc00..61e00080b 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -781,7 +781,7 @@ class SmartAccount { walletAddress: this.address, feeRefund: refundDetails } - const handlePaymentResponse = await this.estimateHandlePaymentGasOverride(estimateHandlePaymentGas) + const handlePaymentResponse = await this.estimateHandlePaymentGas(estimateHandlePaymentGas) let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) console.log('handlePaymentEstimate ', handlePaymentEstimate); @@ -809,9 +809,7 @@ class SmartAccount { * Prepares compatible WalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction * @notice This transaction is without fee refund (gasless) - * @param transaction - * @param batchId - * @param chainId + * @param transactionDto * @returns */ async createTransaction(transactionDto: TransactionDto): Promise { From 35d1f2153910576a1c026ad2086e6269f0e0af75 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 7 Sep 2022 16:57:00 +0400 Subject: [PATCH 0125/1247] configured new version + using 1.0.6 temp + custom gas limit in rest relayer from sendTransaction --- package.json | 2 +- .../src/contracts/SmartWalletContract.ts | 4 +- packages/core-types/src/transaction.types.ts | 10 ++- packages/core-types/src/types.ts | 2 +- packages/ethers-lib/contracts/V1.0.1.sol | 19 ----- packages/ethers-lib/contracts/V1.0.2.sol | 19 ----- packages/ethers-lib/contracts/V1.0.6.sol | 19 +++++ packages/ethers-lib/package.json | 3 +- .../scripts/generateTypechainFiles.ts | 30 +++---- .../v1.0.2/EntryPointEthersContract.ts | 42 ---------- .../EntryPointEthersContract.ts | 6 +- .../v1.0.2/MultiSendEthersContract.ts | 32 -------- .../MultiSendEthersContract.ts | 8 +- .../v1.0.2/MultiSendCallOnlyEthersContract.ts | 32 -------- .../MultiSendCallOnlyEthersContract.ts | 8 +- .../v1.0.0/SmartWalletContractEthers.ts | 2 +- .../v1.0.1/SmartWalletContractEthers.ts | 80 ------------------- .../SmartWalletContractEthers.ts | 10 +-- .../SmartWalletProxyFactoryEthersContract.ts | 60 -------------- .../SmartWalletProxyFactoryEthersContract.ts | 2 +- .../src/contracts/contractInstancesEthers.ts | 72 ++++++----------- .../node-client/src/types/NodeClientTypes.ts | 6 +- packages/relayer/src/local-relayer.ts | 2 +- packages/relayer/src/rest-relayer.ts | 13 +-- packages/smart-account/src/SmartAccount.ts | 23 ++++-- packages/transactions/src/execution.ts | 6 +- 26 files changed, 109 insertions(+), 403 deletions(-) delete mode 100644 packages/ethers-lib/contracts/V1.0.1.sol delete mode 100644 packages/ethers-lib/contracts/V1.0.2.sol create mode 100644 packages/ethers-lib/contracts/V1.0.6.sol delete mode 100644 packages/ethers-lib/src/contracts/EntryPointContract/v1.0.2/EntryPointEthersContract.ts rename packages/ethers-lib/src/contracts/EntryPointContract/{v1.0.1 => v1.0.6}/EntryPointEthersContract.ts (87%) delete mode 100644 packages/ethers-lib/src/contracts/MultiSend/v1.0.2/MultiSendEthersContract.ts rename packages/ethers-lib/src/contracts/MultiSend/{v1.0.1 => v1.0.6}/MultiSendEthersContract.ts (74%) delete mode 100644 packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.2/MultiSendCallOnlyEthersContract.ts rename packages/ethers-lib/src/contracts/MultiSendCallOnly/{v1.0.1 => v1.0.6}/MultiSendCallOnlyEthersContract.ts (73%) delete mode 100644 packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts rename packages/ethers-lib/src/contracts/SmartWallet/{v1.0.2 => v1.0.6}/SmartWalletContractEthers.ts (84%) delete mode 100644 packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts rename packages/ethers-lib/src/contracts/SmartWalletFactory/{v1.0.2 => v1.0.6}/SmartWalletProxyFactoryEthersContract.ts (94%) diff --git a/package.json b/package.json index f4ed056dd..ef0967d93 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.6.4", + "nx": "^14.6.5", "prettier": "2.7.1", "ts-node": "^10.9.1" }, diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index 04024063c..9443307d8 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -1,4 +1,4 @@ -import { WalletTransaction, ExecTransaction, FeeRefundV1_0_0, FeeRefundV1_0_2 } from '../transaction.types' +import { WalletTransaction, ExecTransaction, FeeRefundV1_0_0, FeeRefundV1_0_6 } from '../transaction.types' import { SmartAccountVersion } from '../types' import { BigNumber } from '@ethersproject/bignumber' import { Interface } from '@ethersproject/abi' @@ -24,7 +24,7 @@ export interface SmartWalletContract { execTransaction( transaction: ExecTransaction, batchId: number, - feeRefundData: FeeRefundV1_0_2, + feeRefundData: FeeRefundV1_0_6, signatures: string ): any encode(methodName: string, params: any): string diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index d179c77dc..6b28d2ab2 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -52,13 +52,13 @@ export interface FeeRefundV1_0_0 { gasToken: string refundReceiver: string } -export interface FeeRefundV1_0_2 extends FeeRefundV1_0_0{ +export interface FeeRefundV1_0_6 extends FeeRefundV1_0_0{ tokenGasPriceFactor: string | number } // extended from FeeRefund as we need this for handlePayment Estimate -export interface FeeRefundHandlePayment extends FeeRefundV1_0_2 { +export interface FeeRefundHandlePayment extends FeeRefundV1_0_6 { gasUsed: string | number } @@ -147,6 +147,12 @@ export interface RelayTransaction { signedTx: SignedTransaction config: SmartAccountState context: SmartAccountContext + gasLimit?: GasLimit +} + +export interface GasLimit { + hex: string, + type: string } export interface DeployWallet { diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 324413dfd..dc7f1f0b4 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -3,7 +3,7 @@ import { MultiSendContract } from './contracts/MultiSendContract' import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' import { SmartWalletContract } from './contracts/SmartWalletContract' -export type SmartAccountVersion = '1.0.2' | '1.0.1' | '1.0.0' +export type SmartAccountVersion = '1.0.6' | '1.0.0' export enum OperationType { Call, // 0 diff --git a/packages/ethers-lib/contracts/V1.0.1.sol b/packages/ethers-lib/contracts/V1.0.1.sol deleted file mode 100644 index 40ab6df28..000000000 --- a/packages/ethers-lib/contracts/V1.0.1.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity >=0.4.0 <=0.8.15; - -import { WalletFactory } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/WalletFactory.sol"; -import { SmartWallet } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/SmartWallet.sol"; -import { MultiSend } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/libs/MultiSend.sol"; -import { MultiSendCallOnly } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; -import { EntryPoint } from "scw-contracts-v1.0.1/contracts/references/aa-4337/EntryPoint.sol"; - -contract SmartWalletFactoryContract_v1_0_1 is WalletFactory { - constructor(address _defaultImpl) WalletFactory(_defaultImpl){} -} -contract SmartWalletContract_v1_0_1 is SmartWallet {} -contract MultiSendContract_v1_0_1 is MultiSend {} -contract MultiSendCallOnlyContract_v1_0_1 is MultiSendCallOnly {} -contract EntryPointContract_v1_0_1 is EntryPoint { - constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} -} - diff --git a/packages/ethers-lib/contracts/V1.0.2.sol b/packages/ethers-lib/contracts/V1.0.2.sol deleted file mode 100644 index e10a206d8..000000000 --- a/packages/ethers-lib/contracts/V1.0.2.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity >=0.4.0 <=0.8.15; - -import { WalletFactory } from "scw-contracts-v1.0.2/contracts/smart-contract-wallet/WalletFactory.sol"; -import { SmartWallet } from "scw-contracts-v1.0.2/contracts/smart-contract-wallet/SmartWallet.sol"; -import { MultiSend } from "scw-contracts-v1.0.2/contracts/smart-contract-wallet/libs/MultiSend.sol"; -import { MultiSendCallOnly } from "scw-contracts-v1.0.2/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; -import { EntryPoint } from "scw-contracts-v1.0.2/contracts/references/aa-4337/EntryPoint.sol"; - -contract SmartWalletFactoryContract_v1_0_2 is WalletFactory { - constructor(address _defaultImpl) WalletFactory(_defaultImpl){} -} -contract SmartWalletContract_v1_0_2 is SmartWallet {} -contract MultiSendContract_v1_0_2 is MultiSend {} -contract MultiSendCallOnlyContract_v1_0_2 is MultiSendCallOnly {} -contract EntryPointContract_v1_0_2 is EntryPoint { - constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} -} - diff --git a/packages/ethers-lib/contracts/V1.0.6.sol b/packages/ethers-lib/contracts/V1.0.6.sol new file mode 100644 index 000000000..9c0119115 --- /dev/null +++ b/packages/ethers-lib/contracts/V1.0.6.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.4.0 <=0.8.15; + +import { WalletFactory } from "scw-contracts-v1.0.6/contracts/smart-contract-wallet/WalletFactory.sol"; +import { SmartWallet } from "scw-contracts-v1.0.6/contracts/smart-contract-wallet/SmartWallet.sol"; +import { MultiSend } from "scw-contracts-v1.0.6/contracts/smart-contract-wallet/libs/MultiSend.sol"; +import { MultiSendCallOnly } from "scw-contracts-v1.0.6/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; +import { EntryPoint } from "scw-contracts-v1.0.6/contracts/references/aa-4337/EntryPoint.sol"; + +contract SmartWalletFactoryContract_v1_0_6 is WalletFactory { + constructor(address _defaultImpl) WalletFactory(_defaultImpl){} +} +contract SmartWalletContract_v1_0_6 is SmartWallet {} +contract MultiSendContract_v1_0_6 is MultiSend {} +contract MultiSendCallOnlyContract_v1_0_6 is MultiSendCallOnly {} +contract EntryPointContract_v1_0_6 is EntryPoint { + constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} +} + diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 04b178c53..f84c337d3 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -46,8 +46,7 @@ "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0", "scw-contracts-v1.0.0": "npm:scw-contracts@1.0.0", - "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.1", - "scw-contracts-v1.0.2": "npm:scw-contracts@1.0.2" + "scw-contracts-v1.0.6": "npm:scw-contracts@1.0.6" }, "peerDependencies": { "ethers": "^5.5.3" diff --git a/packages/ethers-lib/scripts/generateTypechainFiles.ts b/packages/ethers-lib/scripts/generateTypechainFiles.ts index 6dc793018..61ff5012b 100644 --- a/packages/ethers-lib/scripts/generateTypechainFiles.ts +++ b/packages/ethers-lib/scripts/generateTypechainFiles.ts @@ -22,19 +22,12 @@ const smartAccountContracts_V1_0_0 = [ `${smartAccountContractsPath}/V1.0.0.sol//SmartWalletFactoryContract_v1_0_0.json`, `${smartAccountContractsPath}/V1.0.0.sol//EntryPointContract_v1_0_0.json` ].join(' ') -const smartAccountContracts_V1_0_1 = [ - `${smartAccountContractsPath}/V1.0.1.sol/SmartWalletContract_v1_0_1.json`, - `${smartAccountContractsPath}/V1.0.1.sol/MultiSendContract_v1_0_1.json`, - `${smartAccountContractsPath}/V1.0.1.sol/MultiSendCallOnlyContract_v1_0_1.json`, - `${smartAccountContractsPath}/V1.0.1.sol/SmartWalletFactoryContract_v1_0_1.json`, - `${smartAccountContractsPath}/V1.0.1.sol/EntryPointContract_v1_0_1.json` -].join(' ') -const smartAccountContracts_V1_0_2 = [ - `${smartAccountContractsPath}/V1.0.2.sol/SmartWalletContract_v1_0_2.json`, - `${smartAccountContractsPath}/V1.0.2.sol/MultiSendContract_v1_0_2.json`, - `${smartAccountContractsPath}/V1.0.2.sol/MultiSendCallOnlyContract_v1_0_2.json`, - `${smartAccountContractsPath}/V1.0.2.sol/SmartWalletFactoryContract_v1_0_2.json`, - `${smartAccountContractsPath}/V1.0.2.sol/EntryPointContract_v1_0_2.json` +const smartAccountContracts_V1_0_6 = [ + `${smartAccountContractsPath}/V1.0.6.sol/SmartWalletContract_v1_0_6.json`, + `${smartAccountContractsPath}/V1.0.6.sol/MultiSendContract_v1_0_6.json`, + `${smartAccountContractsPath}/V1.0.6.sol/MultiSendCallOnlyContract_v1_0_6.json`, + `${smartAccountContractsPath}/V1.0.6.sol/SmartWalletFactoryContract_v1_0_6.json`, + `${smartAccountContractsPath}/V1.0.6.sol/EntryPointContract_v1_0_6.json` ].join(' ') // Remove existing Typechain files @@ -73,18 +66,13 @@ const ethersV5 = 'ethers-v5' // Src: Ethers V5 types generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.0`, smartAccountContracts_V1_0_0) -generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.1`, smartAccountContracts_V1_0_1) -generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.2`, smartAccountContracts_V1_0_2) +generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.6`, smartAccountContracts_V1_0_6) moveTypechainFiles( `${typeChainDirectorySrcPath}${ethersV5}/v1.0.0`, `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.0` ) moveTypechainFiles( - `${typeChainDirectorySrcPath}${ethersV5}/v1.0.1`, - `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.1` -) -moveTypechainFiles( - `${typeChainDirectorySrcPath}${ethersV5}/v1.0.2`, - `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.2` + `${typeChainDirectorySrcPath}${ethersV5}/v1.0.6`, + `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.6` ) diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.2/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.2/EntryPointEthersContract.ts deleted file mode 100644 index e3d91131b..000000000 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.2/EntryPointEthersContract.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { EntryPointContract, UserOperation, TransactionResult } from '@biconomy-sdk/core-types' -import { - EntryPointContractV102 as EntryPointContract_TypeChain, - EntryPointContractV102Interface -} from '../../../../typechain/src/ethers-v5/v1.0.2/EntryPointContractV102' -import { toTxResult } from '../../../utils' -import { Contract } from '@ethersproject/contracts' - -class EntryPointEthersContract implements EntryPointContract { - constructor(public contract: EntryPointContract_TypeChain) {} - - getAddress(): string { - return this.contract.address - } - - getContract(): Contract { - return this.contract - } - - async simulateValidation(userOperation: UserOperation): Promise { - const resultSet = await this.contract.simulateValidation(userOperation) - return toTxResult(resultSet) - } - - async getRequestId(userOperation: UserOperation): Promise { - return this.contract.getRequestId(userOperation) - } - - async handleOps( - userOperations: UserOperation[], - beneficiary: string - ): Promise { - const resultSet = await this.contract.handleOps(userOperations, beneficiary) - return toTxResult(resultSet) - } - - async getSenderAddress(initCode: string, salt: number): Promise { - return this.contract.getSenderAddress(initCode, salt) - } -} - -export default EntryPointEthersContract diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.6/EntryPointEthersContract.ts similarity index 87% rename from packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts rename to packages/ethers-lib/src/contracts/EntryPointContract/v1.0.6/EntryPointEthersContract.ts index 2c438a94f..5c01650ba 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.6/EntryPointEthersContract.ts @@ -1,8 +1,8 @@ import { EntryPointContract, UserOperation, TransactionResult } from '@biconomy-sdk/core-types' import { - EntryPointContractV101 as EntryPointContract_TypeChain, - EntryPointContractV101Interface -} from '../../../../typechain/src/ethers-v5/v1.0.1/EntryPointContractV101' + EntryPointContractV106 as EntryPointContract_TypeChain, + EntryPointContractV106Interface +} from '../../../../typechain/src/ethers-v5/v1.0.6/EntryPointContractV106' import { toTxResult } from '../../../utils' import { Contract } from '@ethersproject/contracts' diff --git a/packages/ethers-lib/src/contracts/MultiSend/v1.0.2/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/v1.0.2/MultiSendEthersContract.ts deleted file mode 100644 index 7777a7185..000000000 --- a/packages/ethers-lib/src/contracts/MultiSend/v1.0.2/MultiSendEthersContract.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { MultiSendContract } from '@biconomy-sdk/core-types' -import { - MultiSendContractV102 as MultiSend_TypeChain, - MultiSendContractV102Interface -} from '../../../../typechain/src/ethers-v5/v1.0.2/MultiSendContractV102' -import { Contract } from '@ethersproject/contracts' -import { Interface } from '@ethersproject/abi' - -class MultiSendEthersContract implements MultiSendContract { - constructor(public contract: MultiSend_TypeChain) {} - - getAddress(): string { - return this.contract.address - } - - getContract(): Contract { - return this.contract - } - - getInterface(): Interface { - return this.contract.interface - } - - encode: MultiSendContractV102Interface['encodeFunctionData'] = ( - methodName: any, - params: any - ): string => { - return this.contract.interface.encodeFunctionData(methodName, params) - } -} - -export default MultiSendEthersContract diff --git a/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/v1.0.6/MultiSendEthersContract.ts similarity index 74% rename from packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts rename to packages/ethers-lib/src/contracts/MultiSend/v1.0.6/MultiSendEthersContract.ts index abcf4dc5e..93e928840 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/v1.0.6/MultiSendEthersContract.ts @@ -1,8 +1,8 @@ import { MultiSendContract } from '@biconomy-sdk/core-types' import { - MultiSendContractV101 as MultiSend_TypeChain, - MultiSendContractV101Interface -} from '../../../../typechain/src/ethers-v5/v1.0.1/MultiSendContractV101' + MultiSendContractV106 as MultiSend_TypeChain, + MultiSendContractV106Interface +} from '../../../../typechain/src/ethers-v5/v1.0.6/MultiSendContractV106' import { Contract } from '@ethersproject/contracts' import { Interface } from '@ethersproject/abi' @@ -21,7 +21,7 @@ class MultiSendEthersContract implements MultiSendContract { return this.contract.interface } - encode: MultiSendContractV101Interface['encodeFunctionData'] = ( + encode: MultiSendContractV106Interface['encodeFunctionData'] = ( methodName: any, params: any ): string => { diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.2/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.2/MultiSendCallOnlyEthersContract.ts deleted file mode 100644 index 1dab3df4d..000000000 --- a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.2/MultiSendCallOnlyEthersContract.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' -import { - MultiSendCallOnlyContractV102 as MultiSendCallOnly_TypeChain, - MultiSendCallOnlyContractV102Interface -} from '../../../../typechain/src/ethers-v5/v1.0.2/MultiSendCallOnlyContractV102' -import { Contract } from '@ethersproject/contracts' -import { Interface } from '@ethersproject/abi' - -class MultiSendCallOnlyEthersContract implements MultiSendCallOnlyContract { - constructor(public contract: MultiSendCallOnly_TypeChain) {} - - getAddress(): string { - return this.contract.address - } - - getContract(): Contract { - return this.contract - } - - getInterface(): Interface { - return this.contract.interface - } - - encode: MultiSendCallOnlyContractV102Interface['encodeFunctionData'] = ( - methodName: any, - params: any - ): string => { - return this.contract.interface.encodeFunctionData(methodName, params) - } -} - -export default MultiSendCallOnlyEthersContract diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.6/MultiSendCallOnlyEthersContract.ts similarity index 73% rename from packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts rename to packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.6/MultiSendCallOnlyEthersContract.ts index cb79d2932..af96ffb61 100644 --- a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.6/MultiSendCallOnlyEthersContract.ts @@ -1,8 +1,8 @@ import { MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' import { - MultiSendCallOnlyContractV101 as MultiSendCallOnly_TypeChain, - MultiSendCallOnlyContractV101Interface -} from '../../../../typechain/src/ethers-v5/v1.0.1/MultiSendCallOnlyContractV101' + MultiSendCallOnlyContractV106 as MultiSendCallOnly_TypeChain, + MultiSendCallOnlyContractV106Interface +} from '../../../../typechain/src/ethers-v5/v1.0.6/MultiSendCallOnlyContractV106' import { Contract } from '@ethersproject/contracts' import { Interface } from '@ethersproject/abi' @@ -21,7 +21,7 @@ class MultiSendCallOnlyEthersContract implements MultiSendCallOnlyContract { return this.contract.interface } - encode: MultiSendCallOnlyContractV101Interface['encodeFunctionData'] = ( + encode: MultiSendCallOnlyContractV106Interface['encodeFunctionData'] = ( methodName: any, params: any ): string => { diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts index baf289bce..263823f4f 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts @@ -5,7 +5,7 @@ import { WalletTransaction, ExecTransaction, FeeRefundV1_0_0, - FeeRefundV1_0_2, + FeeRefundV1_0_6, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts deleted file mode 100644 index 521d751ea..000000000 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber' -import { - SmartAccountVersion, - SmartWalletContract, - WalletTransaction, - ExecTransaction, - FeeRefundV1_0_0, - FeeRefundV1_0_2, - TransactionResult -} from '@biconomy-sdk/core-types' -import { toTxResult } from '../../../utils' -import { SmartWalletContractV101 as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletContractV101' -import { SmartWalletContractV101Interface } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletContractV101' -import { Interface } from 'ethers/lib/utils' -import { Contract } from '@ethersproject/contracts' -class SmartWalletContractEthers implements SmartWalletContract { - constructor(public contract: SmartWalletContract_TypeChain) {} - - getInterface(): Interface { - return this.contract.interface - } - - getContract(): Contract { - return this.contract - } - - getAddress(): string { - return this.contract.address - } - - setAddress(address: string) { - this.contract.attach(address) - } - - async getOwner(): Promise { - return await this.contract.owner() - } - - async getVersion(): Promise { - return (await this.contract.VERSION()) as SmartAccountVersion - } - - async getNonce(batchId: number): Promise { - return await this.contract.getNonce(batchId) - } - async getTransactionHash(smartAccountTrxData: WalletTransaction): Promise { - return this.contract.getTransactionHash( - smartAccountTrxData.to, - smartAccountTrxData.value, - smartAccountTrxData.data, - smartAccountTrxData.operation, - smartAccountTrxData.targetTxGas, - smartAccountTrxData.baseGas, - smartAccountTrxData.gasPrice, - smartAccountTrxData.gasToken, - smartAccountTrxData.refundReceiver, - smartAccountTrxData.nonce - ) - } - - async execTransaction( - _tx: ExecTransaction, - batchId: number, - refundInfo: FeeRefundV1_0_0, - signatures: string - ): Promise { - // TODO: estimate GAS before making the transaction - const txResponse = await this.contract.execTransaction(_tx, batchId, refundInfo, signatures) - return toTxResult(txResponse) - } - - encode: SmartWalletContractV101Interface['encodeFunctionData'] = ( - methodName: any, - params: any - ): string => { - return this.contract.interface.encodeFunctionData(methodName, params) - } -} - -export default SmartWalletContractEthers diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.2/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.6/SmartWalletContractEthers.ts similarity index 84% rename from packages/ethers-lib/src/contracts/SmartWallet/v1.0.2/SmartWalletContractEthers.ts rename to packages/ethers-lib/src/contracts/SmartWallet/v1.0.6/SmartWalletContractEthers.ts index fe4801104..e8737866d 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.2/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.6/SmartWalletContractEthers.ts @@ -5,12 +5,12 @@ import { WalletTransaction, ExecTransaction, FeeRefundV1_0_0, - FeeRefundV1_0_2, + FeeRefundV1_0_6, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' -import { SmartWalletContractV102 as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.2/SmartWalletContractV102' -import { SmartWalletContractV102Interface } from '../../../../typechain/src/ethers-v5/v1.0.2/SmartWalletContractV102' +import { SmartWalletContractV106 as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.6/SmartWalletContractV106' +import { SmartWalletContractV106Interface } from '../../../../typechain/src/ethers-v5/v1.0.6/SmartWalletContractV106' import { Interface } from 'ethers/lib/utils' import { Contract } from '@ethersproject/contracts' class SmartWalletContractEthers implements SmartWalletContract { @@ -62,7 +62,7 @@ class SmartWalletContractEthers implements SmartWalletContract { async execTransaction( _tx: ExecTransaction, batchId: number, - refundInfo: FeeRefundV1_0_2, + refundInfo: FeeRefundV1_0_6, signatures: string ): Promise { // TODO: estimate GAS before making the transaction @@ -70,7 +70,7 @@ class SmartWalletContractEthers implements SmartWalletContract { return toTxResult(txResponse) } - encode: SmartWalletContractV102Interface['encodeFunctionData'] = ( + encode: SmartWalletContractV106Interface['encodeFunctionData'] = ( methodName: any, params: any ): string => { diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts deleted file mode 100644 index eb3122e92..000000000 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' -import { toTxResult } from '../../../utils' -import { SmartWalletFactoryContractV101 as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletFactoryContractV101' -import { Interface } from '@ethersproject/abi' -import { Contract } from '@ethersproject/contracts' - -class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { - constructor(public contract: SmartWalletFactoryContract_TypeChain) {} - - getInterface(): Interface { - return this.contract.interface - } - - getContract(): Contract { - return this.contract - } - - async isWalletExist(wallet: string): Promise { - const doesExist = await this.contract.isWalletExist(wallet) - return doesExist - } - - getAddress(): string { - return this.contract.address - } - - setAddress(address: string) { - this.contract.attach(address) - } - - async deployCounterFactualWallet( - owner: string, - entryPoint: string, - handler: string, - index: number - ): Promise { - const resultSet = await this.contract.deployCounterFactualWallet( - owner, - entryPoint, - handler, - index - ) - return toTxResult(resultSet) - } - - async deployWallet( - owner: string, - entryPoint: string, - handler: string - ): Promise { - const resultSet = await this.contract.deployWallet(owner, entryPoint, handler) - return toTxResult(resultSet) - } - - async getAddressForCounterfactualWallet(owner: string, index: number): Promise { - return this.contract.getAddressForCounterfactualWallet(owner, index) - } -} - -export default SmartWalletFactoryContractEthers diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.2/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.6/SmartWalletProxyFactoryEthersContract.ts similarity index 94% rename from packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.2/SmartWalletProxyFactoryEthersContract.ts rename to packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.6/SmartWalletProxyFactoryEthersContract.ts index 70a315932..5b4efb9e7 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.2/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.6/SmartWalletProxyFactoryEthersContract.ts @@ -1,6 +1,6 @@ import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' -import { SmartWalletFactoryContractV102 as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.2/SmartWalletFactoryContractV102' +import { SmartWalletFactoryContractV106 as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.6/SmartWalletFactoryContractV106' import { Interface } from '@ethersproject/abi' import { Contract } from '@ethersproject/contracts' diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index 1707e1100..5e5dd9b45 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -1,34 +1,26 @@ import { SmartWalletContractV100__factory as SmartWalletContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContractV100__factory' -import { SmartWalletContractV101__factory as SmartWalletContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletContractV101__factory' -import { SmartWalletContractV102__factory as SmartWalletContractV102 } from '../../typechain/src/ethers-v5/v1.0.2/factories/SmartWalletContractV102__factory' +import { SmartWalletContractV106__factory as SmartWalletContractV106 } from '../../typechain/src/ethers-v5/v1.0.6/factories/SmartWalletContractV106__factory' import { MultiSendContractV100__factory as MultiSendContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendContractV100__factory' -import { MultiSendContractV101__factory as MultiSendContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/MultiSendContractV101__factory' -import { MultiSendContractV102__factory as MultiSendContractV102 } from '../../typechain/src/ethers-v5/v1.0.2/factories/MultiSendContractV102__factory' +import { MultiSendContractV106__factory as MultiSendContractV106 } from '../../typechain/src/ethers-v5/v1.0.6/factories/MultiSendContractV106__factory' import { MultiSendCallOnlyContractV100__factory as MultiSendCallOnlyContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendCallOnlyContractV100__factory' -import { MultiSendCallOnlyContractV101__factory as MultiSendCallOnlyContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/MultiSendCallOnlyContractV101__factory' -import { MultiSendCallOnlyContractV102__factory as MultiSendCallOnlyContractV102 } from '../../typechain/src/ethers-v5/v1.0.2/factories/MultiSendCallOnlyContractV102__factory' +import { MultiSendCallOnlyContractV106__factory as MultiSendCallOnlyContractV106 } from '../../typechain/src/ethers-v5/v1.0.6/factories/MultiSendCallOnlyContractV106__factory' import { SmartWalletFactoryContractV100__factory as SmartWalletFactoryContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFactoryContractV100__factory' -import { SmartWalletFactoryContractV101__factory as SmartWalletFactoryContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletFactoryContractV101__factory' -import { SmartWalletFactoryContractV102__factory as SmartWalletFactoryContractV102 } from '../../typechain/src/ethers-v5/v1.0.2/factories/SmartWalletFactoryContractV102__factory' +import { SmartWalletFactoryContractV106__factory as SmartWalletFactoryContractV106 } from '../../typechain/src/ethers-v5/v1.0.6/factories/SmartWalletFactoryContractV106__factory' import SmartWalletContractEthers_v1_0_0 from './SmartWallet/v1.0.0/SmartWalletContractEthers' -import SmartWalletContractEthers_v1_0_1 from './SmartWallet/v1.0.1/SmartWalletContractEthers' -import SmartWalletContractEthers_v1_0_2 from './SmartWallet/v1.0.2/SmartWalletContractEthers' +import SmartWalletContractEthers_v1_0_6 from './SmartWallet/v1.0.6/SmartWalletContractEthers' import MultiSendEthersContract_v1_0_0 from './MultiSend/v1.0.0/MultiSendEthersContract' -import MultiSendEthersContract_v1_0_1 from './MultiSend/v1.0.1/MultiSendEthersContract' -import MultiSendEthersContract_v1_0_2 from './MultiSend/v1.0.2/MultiSendEthersContract' +import MultiSendEthersContract_v1_0_6 from './MultiSend/v1.0.6/MultiSendEthersContract' import MultiSendCallOnlyEthersContract_v1_0_0 from './MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract' -import MultiSendCallOnlyEthersContract_v1_0_1 from './MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract' -import MultiSendCallOnlyEthersContract_v1_0_2 from './MultiSendCallOnly/v1.0.2/MultiSendCallOnlyEthersContract' +import MultiSendCallOnlyEthersContract_v1_0_6 from './MultiSendCallOnly/v1.0.6/MultiSendCallOnlyEthersContract' import SmartWalletFacoryContractEthers_v1_0_0 from './SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract' -import SmartWalletFacoryContractEthers_v1_0_1 from './SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract' -import SmartWalletFacoryContractEthers_v1_0_2 from './SmartWalletFactory/v1.0.2/SmartWalletProxyFactoryEthersContract' +import SmartWalletFacoryContractEthers_v1_0_6 from './SmartWalletFactory/v1.0.6/SmartWalletProxyFactoryEthersContract' import { JsonRpcProvider } from '@ethersproject/providers' import { SmartAccountVersion } from '@biconomy-sdk/core-types' @@ -40,19 +32,15 @@ export function getSmartWalletContractInstance( provider: JsonRpcProvider ): | SmartWalletContractEthers_v1_0_0 - | SmartWalletContractEthers_v1_0_1 - | SmartWalletContractEthers_v1_0_2 { + | SmartWalletContractEthers_v1_0_6 { let walletContract switch (smartAccountVersion) { case '1.0.0': walletContract = SmartWalletContractV100.connect(contractAddress, provider) return new SmartWalletContractEthers_v1_0_0(walletContract) - case '1.0.1': - walletContract = SmartWalletContractV101.connect(contractAddress, provider) - return new SmartWalletContractEthers_v1_0_1(walletContract) - case '1.0.2': - walletContract = SmartWalletContractV102.connect(contractAddress, provider) - return new SmartWalletContractEthers_v1_0_2(walletContract) + case '1.0.6': + walletContract = SmartWalletContractV106.connect(contractAddress, provider) + return new SmartWalletContractEthers_v1_0_6(walletContract) } } @@ -64,20 +52,16 @@ export function getMultiSendContractInstance( provider: JsonRpcProvider ): | MultiSendEthersContract_v1_0_0 - | MultiSendEthersContract_v1_0_1 - | MultiSendEthersContract_v1_0_2 { + | MultiSendEthersContract_v1_0_6 { let multiSendContract switch (smartAccountVersion) { case '1.0.0': multiSendContract = MultiSendContractV100.connect(contractAddress, provider) return new MultiSendEthersContract_v1_0_0(multiSendContract) - case '1.0.1': - multiSendContract = MultiSendContractV101.connect(contractAddress, provider) - return new MultiSendEthersContract_v1_0_1(multiSendContract) - case '1.0.2': - multiSendContract = MultiSendContractV102.connect(contractAddress, provider) - return new MultiSendEthersContract_v1_0_2(multiSendContract) + case '1.0.6': + multiSendContract = MultiSendContractV106.connect(contractAddress, provider) + return new MultiSendEthersContract_v1_0_6(multiSendContract) } } @@ -88,20 +72,16 @@ export function getMultiSendCallOnlyContractInstance( provider: JsonRpcProvider ): | MultiSendCallOnlyEthersContract_v1_0_0 - | MultiSendCallOnlyEthersContract_v1_0_1 - | MultiSendCallOnlyEthersContract_v1_0_2 { + | MultiSendCallOnlyEthersContract_v1_0_6 { let multiSendCallContract switch (smartAccountVersion) { case '1.0.0': multiSendCallContract = MultiSendCallOnlyContractV100.connect(contractAddress, provider) return new MultiSendCallOnlyEthersContract_v1_0_0(multiSendCallContract) - case '1.0.1': - multiSendCallContract = MultiSendCallOnlyContractV101.connect(contractAddress, provider) - return new MultiSendCallOnlyEthersContract_v1_0_1(multiSendCallContract) - case '1.0.2': - multiSendCallContract = MultiSendCallOnlyContractV102.connect(contractAddress, provider) - return new MultiSendCallOnlyEthersContract_v1_0_2(multiSendCallContract) + case '1.0.6': + multiSendCallContract = MultiSendCallOnlyContractV106.connect(contractAddress, provider) + return new MultiSendCallOnlyEthersContract_v1_0_6(multiSendCallContract) } } @@ -111,19 +91,15 @@ export function getSmartWalletFactoryContractInstance( provider: JsonRpcProvider ): | SmartWalletFacoryContractEthers_v1_0_0 - | SmartWalletFacoryContractEthers_v1_0_1 - | SmartWalletFacoryContractEthers_v1_0_2 { + | SmartWalletFacoryContractEthers_v1_0_6 { let walletFactoryContract switch (smartAccountVersion) { case '1.0.0': walletFactoryContract = SmartWalletFactoryContractV100.connect(contractAddress, provider) return new SmartWalletFacoryContractEthers_v1_0_0(walletFactoryContract) - case '1.0.1': - walletFactoryContract = SmartWalletFactoryContractV101.connect(contractAddress, provider) - return new SmartWalletFacoryContractEthers_v1_0_1(walletFactoryContract) - case '1.0.2': - walletFactoryContract = SmartWalletFactoryContractV102.connect(contractAddress, provider) - return new SmartWalletFacoryContractEthers_v1_0_2(walletFactoryContract) + case '1.0.6': + walletFactoryContract = SmartWalletFactoryContractV106.connect(contractAddress, provider) + return new SmartWalletFacoryContractEthers_v1_0_6(walletFactoryContract) } } diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index c302bf224..40bdb251e 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -3,7 +3,7 @@ import { SmartAccountVersion, MetaTransactionData, FeeRefundV1_0_0, - FeeRefundV1_0_2, + FeeRefundV1_0_6, } from '@biconomy-sdk/core-types' export type SmartAccountInfoResponse = { readonly name: string @@ -43,13 +43,13 @@ export type EstimateRequiredTxGasDto = { export type EstimateHandlePaymentTxGasDto = { chainId: number walletAddress: string - feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_2 + feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_6 } export type EstimateUndeployedContractGasDto = { chainId: number walletAddress: string - feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_2 + feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_6 transaction: MetaTransactionData signature: string } diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index 769b960f4..3032748dc 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -83,7 +83,7 @@ export class LocalRelayer implements Relayer { // Appending tx and rawTx may not be necessary async relay(relayTransaction: RelayTransaction): Promise { - const { config, signedTx, context } = relayTransaction + const { config, signedTx, context, gasLimit } = relayTransaction const { isDeployed, address } = config const { multiSendCall } = context // multisend has to be multiSendCallOnly here! if (!isDeployed) { diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index f6280eaca..8d2f5f35a 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -79,7 +79,7 @@ export class RestRelayer implements Relayer { // We would send manual gas limit with high targetTxGas (whenever targetTxGas can't be accurately estimated) async relay(relayTransaction: RelayTransaction): Promise { - const { config, signedTx, context } = relayTransaction + const { config, signedTx, context, gasLimit } = relayTransaction const { isDeployed, address } = config const { multiSendCall } = context // multisend has to be multiSendCallOnly here! if (!isDeployed) { @@ -123,25 +123,18 @@ export class RestRelayer implements Relayer { return sendRequest({ url: `${this.#relayServiceBaseUrl}`, method: HttpMethod.Post, - body: { ...finalRawRx, /*gasLimit: { - hex: '0x1E8480', - type: 'hex' - },*/ refundInfo: { + body: { ...finalRawRx, gasLimit: gasLimit, refundInfo: { tokenGasPrice: signedTx.tx.gasPrice, gasToken: signedTx.tx.gasToken } } }) } console.log('signedTx', signedTx) - console.log('gasLimit', ethers.constants.Two.pow(24)) // API call return sendRequest({ url: `${this.#relayServiceBaseUrl}`, method: HttpMethod.Post, - body: { ...signedTx.rawTx, /*gasLimit: { - hex: '0x1E8480', - type: 'hex' - },*/ refundInfo: { + body: { ...signedTx.rawTx, gasLimit: gasLimit, refundInfo: { tokenGasPrice: signedTx.tx.gasPrice, gasToken: signedTx.tx.gasToken, } } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 61e00080b..b57288b67 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -23,7 +23,7 @@ import { RelayTransaction, FeeRefundHandlePayment, FeeRefundV1_0_0, - FeeRefundV1_0_2, + FeeRefundV1_0_6, WalletTransaction, SmartAccountVersion, SignedTransaction, @@ -81,7 +81,7 @@ import { // Create an instance of Smart Account with multi-chain support. class SmartAccount { // By default latest version - DEFAULT_VERSION: SmartAccountVersion = '1.0.2' + DEFAULT_VERSION: SmartAccountVersion = '1.0.6' // { ethAdapter } is a window that gives access to all the implemented functions of it // requires signer and read-only provider ethAdapter!: { [chainId: number]: EthersAdapter } @@ -399,6 +399,8 @@ class SmartAccount { batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = sendTransactionDto + let gasLimit; + const isDeployed = await this.isDeployed(chainId); let rawTx: RawTransactionType = { to: tx.to, data: tx.data, @@ -414,7 +416,7 @@ class SmartAccount { targetTxGas: tx.targetTxGas } - const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_2 = { + const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_6 = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, tokenGasPriceFactor: tx.tokenGasPriceFactor, @@ -448,6 +450,13 @@ class SmartAccount { config: state, context: this.getSmartAccountContext(chainId) } + if(!isDeployed) { + gasLimit = { + hex: '0x1E8480', + type: 'hex' + } + relayTrx.gasLimit = gasLimit; + } const txn: RelayResponse = await this.relayer.relay(relayTrx) return txn.hash } @@ -584,7 +593,7 @@ class SmartAccount { // to avoid failing eth_call override with undeployed wallet txn.targetTxGas = 500000; - const refundInfo: FeeRefundV1_0_2 = { + const refundInfo: FeeRefundV1_0_6 = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, tokenGasPriceFactor: tx.tokenGasPriceFactor, @@ -639,7 +648,7 @@ class SmartAccount { // to avoid failing eth_call override with undeployed wallet txn.targetTxGas = 500000; - const refundInfo: FeeRefundV1_0_2 = { + const refundInfo: FeeRefundV1_0_6 = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, tokenGasPriceFactor: tx.tokenGasPriceFactor, @@ -727,7 +736,7 @@ class SmartAccount { const response = await this.estimateRequiredTxGasOverride(estimateRequiredTxGas) // TODO // Review - const requiredTxGasEstimate = Number(response.data.gas) + 330000 + const requiredTxGasEstimate = Number(response.data.gas) + 700000 console.log('required txgas estimate (with override) ', requiredTxGasEstimate); targetTxGas = requiredTxGasEstimate; @@ -920,7 +929,7 @@ class SmartAccount { // not getting accurate value for undeployed wallet // TODO // Review - const requiredTxGasEstimate = Number(response.data.gas) + 330000 + const requiredTxGasEstimate = Number(response.data.gas) + 700000 console.log('required txgas estimate (with override) ', requiredTxGasEstimate); targetTxGas = requiredTxGasEstimate; diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index 8e3bd543a..9515a8478 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -11,7 +11,7 @@ import { import { ExecTransaction, FeeRefundV1_0_0, - FeeRefundV1_0_2, + FeeRefundV1_0_6, WalletTransaction, SmartAccountSignature } from '@biconomy-sdk/core-types' @@ -158,7 +158,7 @@ export const executeTx = async ( operation: SmartAccountTx.operation, targetTxGas: SmartAccountTx.targetTxGas } - const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_2 = { + const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_6 = { baseGas: SmartAccountTx.baseGas, gasPrice: SmartAccountTx.gasPrice, tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, @@ -188,7 +188,7 @@ export const populateExecuteTx = async ( operation: SmartAccountTx.operation, targetTxGas: SmartAccountTx.targetTxGas } - const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_2 = { + const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_6 = { baseGas: SmartAccountTx.baseGas, gasPrice: SmartAccountTx.gasPrice, tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, From a662fbd4ca3349f7f79ab9f08145ea6de74edbdd Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 7 Sep 2022 17:25:07 +0400 Subject: [PATCH 0126/1247] workign changes with 1.0.1 (revert 1.0.6) --- .../src/contracts/SmartWalletContract.ts | 4 +- packages/core-types/src/transaction.types.ts | 4 +- packages/core-types/src/types.ts | 2 +- packages/ethers-lib/contracts/V1.0.1.sol | 19 ++++++++ packages/ethers-lib/contracts/V1.0.6.sol | 19 -------- packages/ethers-lib/package.json | 2 +- .../scripts/generateTypechainFiles.ts | 18 +++---- .../EntryPointEthersContract.ts | 6 +-- .../MultiSendEthersContract.ts | 8 ++-- .../MultiSendCallOnlyEthersContract.ts | 8 ++-- .../v1.0.0/SmartWalletContractEthers.ts | 2 +- .../SmartWalletContractEthers.ts | 10 ++-- .../SmartWalletProxyFactoryEthersContract.ts | 2 +- .../src/contracts/contractInstancesEthers.ts | 48 +++++++++---------- .../node-client/src/types/NodeClientTypes.ts | 6 +-- packages/smart-account/src/SmartAccount.ts | 10 ++-- packages/transactions/src/execution.ts | 6 +-- 17 files changed, 87 insertions(+), 87 deletions(-) create mode 100644 packages/ethers-lib/contracts/V1.0.1.sol delete mode 100644 packages/ethers-lib/contracts/V1.0.6.sol rename packages/ethers-lib/src/contracts/EntryPointContract/{v1.0.6 => v1.0.1}/EntryPointEthersContract.ts (87%) rename packages/ethers-lib/src/contracts/MultiSend/{v1.0.6 => v1.0.1}/MultiSendEthersContract.ts (74%) rename packages/ethers-lib/src/contracts/MultiSendCallOnly/{v1.0.6 => v1.0.1}/MultiSendCallOnlyEthersContract.ts (73%) rename packages/ethers-lib/src/contracts/SmartWallet/{v1.0.6 => v1.0.1}/SmartWalletContractEthers.ts (84%) rename packages/ethers-lib/src/contracts/SmartWalletFactory/{v1.0.6 => v1.0.1}/SmartWalletProxyFactoryEthersContract.ts (94%) diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index 9443307d8..3a600dd9a 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -1,4 +1,4 @@ -import { WalletTransaction, ExecTransaction, FeeRefundV1_0_0, FeeRefundV1_0_6 } from '../transaction.types' +import { WalletTransaction, ExecTransaction, FeeRefundV1_0_0, FeeRefundV1_0_1 } from '../transaction.types' import { SmartAccountVersion } from '../types' import { BigNumber } from '@ethersproject/bignumber' import { Interface } from '@ethersproject/abi' @@ -24,7 +24,7 @@ export interface SmartWalletContract { execTransaction( transaction: ExecTransaction, batchId: number, - feeRefundData: FeeRefundV1_0_6, + feeRefundData: FeeRefundV1_0_1, signatures: string ): any encode(methodName: string, params: any): string diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index 6b28d2ab2..028639f5a 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -52,13 +52,13 @@ export interface FeeRefundV1_0_0 { gasToken: string refundReceiver: string } -export interface FeeRefundV1_0_6 extends FeeRefundV1_0_0{ +export interface FeeRefundV1_0_1 extends FeeRefundV1_0_0{ tokenGasPriceFactor: string | number } // extended from FeeRefund as we need this for handlePayment Estimate -export interface FeeRefundHandlePayment extends FeeRefundV1_0_6 { +export interface FeeRefundHandlePayment extends FeeRefundV1_0_1 { gasUsed: string | number } diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index dc7f1f0b4..10da2b49e 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -3,7 +3,7 @@ import { MultiSendContract } from './contracts/MultiSendContract' import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' import { SmartWalletContract } from './contracts/SmartWalletContract' -export type SmartAccountVersion = '1.0.6' | '1.0.0' +export type SmartAccountVersion = '1.0.1' | '1.0.0' export enum OperationType { Call, // 0 diff --git a/packages/ethers-lib/contracts/V1.0.1.sol b/packages/ethers-lib/contracts/V1.0.1.sol new file mode 100644 index 000000000..40ab6df28 --- /dev/null +++ b/packages/ethers-lib/contracts/V1.0.1.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.4.0 <=0.8.15; + +import { WalletFactory } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/WalletFactory.sol"; +import { SmartWallet } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/SmartWallet.sol"; +import { MultiSend } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/libs/MultiSend.sol"; +import { MultiSendCallOnly } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; +import { EntryPoint } from "scw-contracts-v1.0.1/contracts/references/aa-4337/EntryPoint.sol"; + +contract SmartWalletFactoryContract_v1_0_1 is WalletFactory { + constructor(address _defaultImpl) WalletFactory(_defaultImpl){} +} +contract SmartWalletContract_v1_0_1 is SmartWallet {} +contract MultiSendContract_v1_0_1 is MultiSend {} +contract MultiSendCallOnlyContract_v1_0_1 is MultiSendCallOnly {} +contract EntryPointContract_v1_0_1 is EntryPoint { + constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} +} + diff --git a/packages/ethers-lib/contracts/V1.0.6.sol b/packages/ethers-lib/contracts/V1.0.6.sol deleted file mode 100644 index 9c0119115..000000000 --- a/packages/ethers-lib/contracts/V1.0.6.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity >=0.4.0 <=0.8.15; - -import { WalletFactory } from "scw-contracts-v1.0.6/contracts/smart-contract-wallet/WalletFactory.sol"; -import { SmartWallet } from "scw-contracts-v1.0.6/contracts/smart-contract-wallet/SmartWallet.sol"; -import { MultiSend } from "scw-contracts-v1.0.6/contracts/smart-contract-wallet/libs/MultiSend.sol"; -import { MultiSendCallOnly } from "scw-contracts-v1.0.6/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; -import { EntryPoint } from "scw-contracts-v1.0.6/contracts/references/aa-4337/EntryPoint.sol"; - -contract SmartWalletFactoryContract_v1_0_6 is WalletFactory { - constructor(address _defaultImpl) WalletFactory(_defaultImpl){} -} -contract SmartWalletContract_v1_0_6 is SmartWallet {} -contract MultiSendContract_v1_0_6 is MultiSend {} -contract MultiSendCallOnlyContract_v1_0_6 is MultiSendCallOnly {} -contract EntryPointContract_v1_0_6 is EntryPoint { - constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} -} - diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index f84c337d3..ddf540cb9 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -46,7 +46,7 @@ "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0", "scw-contracts-v1.0.0": "npm:scw-contracts@1.0.0", - "scw-contracts-v1.0.6": "npm:scw-contracts@1.0.6" + "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.6" }, "peerDependencies": { "ethers": "^5.5.3" diff --git a/packages/ethers-lib/scripts/generateTypechainFiles.ts b/packages/ethers-lib/scripts/generateTypechainFiles.ts index 61ff5012b..fc32d8fbb 100644 --- a/packages/ethers-lib/scripts/generateTypechainFiles.ts +++ b/packages/ethers-lib/scripts/generateTypechainFiles.ts @@ -22,12 +22,12 @@ const smartAccountContracts_V1_0_0 = [ `${smartAccountContractsPath}/V1.0.0.sol//SmartWalletFactoryContract_v1_0_0.json`, `${smartAccountContractsPath}/V1.0.0.sol//EntryPointContract_v1_0_0.json` ].join(' ') -const smartAccountContracts_V1_0_6 = [ - `${smartAccountContractsPath}/V1.0.6.sol/SmartWalletContract_v1_0_6.json`, - `${smartAccountContractsPath}/V1.0.6.sol/MultiSendContract_v1_0_6.json`, - `${smartAccountContractsPath}/V1.0.6.sol/MultiSendCallOnlyContract_v1_0_6.json`, - `${smartAccountContractsPath}/V1.0.6.sol/SmartWalletFactoryContract_v1_0_6.json`, - `${smartAccountContractsPath}/V1.0.6.sol/EntryPointContract_v1_0_6.json` +const smartAccountContracts_V1_0_1 = [ + `${smartAccountContractsPath}/V1.0.1.sol/SmartWalletContract_v1_0_1.json`, + `${smartAccountContractsPath}/V1.0.1.sol/MultiSendContract_v1_0_1.json`, + `${smartAccountContractsPath}/V1.0.1.sol/MultiSendCallOnlyContract_v1_0_1.json`, + `${smartAccountContractsPath}/V1.0.1.sol/SmartWalletFactoryContract_v1_0_1.json`, + `${smartAccountContractsPath}/V1.0.1.sol/EntryPointContract_v1_0_1.json` ].join(' ') // Remove existing Typechain files @@ -66,13 +66,13 @@ const ethersV5 = 'ethers-v5' // Src: Ethers V5 types generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.0`, smartAccountContracts_V1_0_0) -generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.6`, smartAccountContracts_V1_0_6) +generateTypechainFiles(ethersV5, `${outDirSrc}${ethersV5}/v1.0.1`, smartAccountContracts_V1_0_1) moveTypechainFiles( `${typeChainDirectorySrcPath}${ethersV5}/v1.0.0`, `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.0` ) moveTypechainFiles( - `${typeChainDirectorySrcPath}${ethersV5}/v1.0.6`, - `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.6` + `${typeChainDirectorySrcPath}${ethersV5}/v1.0.1`, + `${typeChainDirectoryBuildPath}${ethersV5}/v1.0.1` ) diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.6/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts similarity index 87% rename from packages/ethers-lib/src/contracts/EntryPointContract/v1.0.6/EntryPointEthersContract.ts rename to packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts index 5c01650ba..2c438a94f 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.6/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts @@ -1,8 +1,8 @@ import { EntryPointContract, UserOperation, TransactionResult } from '@biconomy-sdk/core-types' import { - EntryPointContractV106 as EntryPointContract_TypeChain, - EntryPointContractV106Interface -} from '../../../../typechain/src/ethers-v5/v1.0.6/EntryPointContractV106' + EntryPointContractV101 as EntryPointContract_TypeChain, + EntryPointContractV101Interface +} from '../../../../typechain/src/ethers-v5/v1.0.1/EntryPointContractV101' import { toTxResult } from '../../../utils' import { Contract } from '@ethersproject/contracts' diff --git a/packages/ethers-lib/src/contracts/MultiSend/v1.0.6/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts similarity index 74% rename from packages/ethers-lib/src/contracts/MultiSend/v1.0.6/MultiSendEthersContract.ts rename to packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts index 93e928840..abcf4dc5e 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/v1.0.6/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts @@ -1,8 +1,8 @@ import { MultiSendContract } from '@biconomy-sdk/core-types' import { - MultiSendContractV106 as MultiSend_TypeChain, - MultiSendContractV106Interface -} from '../../../../typechain/src/ethers-v5/v1.0.6/MultiSendContractV106' + MultiSendContractV101 as MultiSend_TypeChain, + MultiSendContractV101Interface +} from '../../../../typechain/src/ethers-v5/v1.0.1/MultiSendContractV101' import { Contract } from '@ethersproject/contracts' import { Interface } from '@ethersproject/abi' @@ -21,7 +21,7 @@ class MultiSendEthersContract implements MultiSendContract { return this.contract.interface } - encode: MultiSendContractV106Interface['encodeFunctionData'] = ( + encode: MultiSendContractV101Interface['encodeFunctionData'] = ( methodName: any, params: any ): string => { diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.6/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts similarity index 73% rename from packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.6/MultiSendCallOnlyEthersContract.ts rename to packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts index af96ffb61..cb79d2932 100644 --- a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.6/MultiSendCallOnlyEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts @@ -1,8 +1,8 @@ import { MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' import { - MultiSendCallOnlyContractV106 as MultiSendCallOnly_TypeChain, - MultiSendCallOnlyContractV106Interface -} from '../../../../typechain/src/ethers-v5/v1.0.6/MultiSendCallOnlyContractV106' + MultiSendCallOnlyContractV101 as MultiSendCallOnly_TypeChain, + MultiSendCallOnlyContractV101Interface +} from '../../../../typechain/src/ethers-v5/v1.0.1/MultiSendCallOnlyContractV101' import { Contract } from '@ethersproject/contracts' import { Interface } from '@ethersproject/abi' @@ -21,7 +21,7 @@ class MultiSendCallOnlyEthersContract implements MultiSendCallOnlyContract { return this.contract.interface } - encode: MultiSendCallOnlyContractV106Interface['encodeFunctionData'] = ( + encode: MultiSendCallOnlyContractV101Interface['encodeFunctionData'] = ( methodName: any, params: any ): string => { diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts index 263823f4f..212403227 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts @@ -5,7 +5,7 @@ import { WalletTransaction, ExecTransaction, FeeRefundV1_0_0, - FeeRefundV1_0_6, + FeeRefundV1_0_1, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.6/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts similarity index 84% rename from packages/ethers-lib/src/contracts/SmartWallet/v1.0.6/SmartWalletContractEthers.ts rename to packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts index e8737866d..70d724648 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.6/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts @@ -5,12 +5,12 @@ import { WalletTransaction, ExecTransaction, FeeRefundV1_0_0, - FeeRefundV1_0_6, + FeeRefundV1_0_1, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' -import { SmartWalletContractV106 as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.6/SmartWalletContractV106' -import { SmartWalletContractV106Interface } from '../../../../typechain/src/ethers-v5/v1.0.6/SmartWalletContractV106' +import { SmartWalletContractV101 as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletContractV101' +import { SmartWalletContractV101Interface } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletContractV101' import { Interface } from 'ethers/lib/utils' import { Contract } from '@ethersproject/contracts' class SmartWalletContractEthers implements SmartWalletContract { @@ -62,7 +62,7 @@ class SmartWalletContractEthers implements SmartWalletContract { async execTransaction( _tx: ExecTransaction, batchId: number, - refundInfo: FeeRefundV1_0_6, + refundInfo: FeeRefundV1_0_1, signatures: string ): Promise { // TODO: estimate GAS before making the transaction @@ -70,7 +70,7 @@ class SmartWalletContractEthers implements SmartWalletContract { return toTxResult(txResponse) } - encode: SmartWalletContractV106Interface['encodeFunctionData'] = ( + encode: SmartWalletContractV101Interface['encodeFunctionData'] = ( methodName: any, params: any ): string => { diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.6/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts similarity index 94% rename from packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.6/SmartWalletProxyFactoryEthersContract.ts rename to packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts index 5b4efb9e7..eb3122e92 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.6/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts @@ -1,6 +1,6 @@ import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' -import { SmartWalletFactoryContractV106 as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.6/SmartWalletFactoryContractV106' +import { SmartWalletFactoryContractV101 as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletFactoryContractV101' import { Interface } from '@ethersproject/abi' import { Contract } from '@ethersproject/contracts' diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index 5e5dd9b45..c4512dcb8 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -1,26 +1,26 @@ import { SmartWalletContractV100__factory as SmartWalletContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContractV100__factory' -import { SmartWalletContractV106__factory as SmartWalletContractV106 } from '../../typechain/src/ethers-v5/v1.0.6/factories/SmartWalletContractV106__factory' +import { SmartWalletContractV101__factory as SmartWalletContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletContractV101__factory' import { MultiSendContractV100__factory as MultiSendContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendContractV100__factory' -import { MultiSendContractV106__factory as MultiSendContractV106 } from '../../typechain/src/ethers-v5/v1.0.6/factories/MultiSendContractV106__factory' +import { MultiSendContractV101__factory as MultiSendContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/MultiSendContractV101__factory' import { MultiSendCallOnlyContractV100__factory as MultiSendCallOnlyContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendCallOnlyContractV100__factory' -import { MultiSendCallOnlyContractV106__factory as MultiSendCallOnlyContractV106 } from '../../typechain/src/ethers-v5/v1.0.6/factories/MultiSendCallOnlyContractV106__factory' +import { MultiSendCallOnlyContractV101__factory as MultiSendCallOnlyContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/MultiSendCallOnlyContractV101__factory' import { SmartWalletFactoryContractV100__factory as SmartWalletFactoryContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFactoryContractV100__factory' -import { SmartWalletFactoryContractV106__factory as SmartWalletFactoryContractV106 } from '../../typechain/src/ethers-v5/v1.0.6/factories/SmartWalletFactoryContractV106__factory' +import { SmartWalletFactoryContractV101__factory as SmartWalletFactoryContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletFactoryContractV101__factory' import SmartWalletContractEthers_v1_0_0 from './SmartWallet/v1.0.0/SmartWalletContractEthers' -import SmartWalletContractEthers_v1_0_6 from './SmartWallet/v1.0.6/SmartWalletContractEthers' +import SmartWalletContractEthers_v1_0_1 from './SmartWallet/v1.0.1/SmartWalletContractEthers' import MultiSendEthersContract_v1_0_0 from './MultiSend/v1.0.0/MultiSendEthersContract' -import MultiSendEthersContract_v1_0_6 from './MultiSend/v1.0.6/MultiSendEthersContract' +import MultiSendEthersContract_v1_0_1 from './MultiSend/v1.0.1/MultiSendEthersContract' import MultiSendCallOnlyEthersContract_v1_0_0 from './MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract' -import MultiSendCallOnlyEthersContract_v1_0_6 from './MultiSendCallOnly/v1.0.6/MultiSendCallOnlyEthersContract' +import MultiSendCallOnlyEthersContract_v1_0_1 from './MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract' import SmartWalletFacoryContractEthers_v1_0_0 from './SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract' -import SmartWalletFacoryContractEthers_v1_0_6 from './SmartWalletFactory/v1.0.6/SmartWalletProxyFactoryEthersContract' +import SmartWalletFacoryContractEthers_v1_0_1 from './SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract' import { JsonRpcProvider } from '@ethersproject/providers' import { SmartAccountVersion } from '@biconomy-sdk/core-types' @@ -32,15 +32,15 @@ export function getSmartWalletContractInstance( provider: JsonRpcProvider ): | SmartWalletContractEthers_v1_0_0 - | SmartWalletContractEthers_v1_0_6 { + | SmartWalletContractEthers_v1_0_1 { let walletContract switch (smartAccountVersion) { case '1.0.0': walletContract = SmartWalletContractV100.connect(contractAddress, provider) return new SmartWalletContractEthers_v1_0_0(walletContract) - case '1.0.6': - walletContract = SmartWalletContractV106.connect(contractAddress, provider) - return new SmartWalletContractEthers_v1_0_6(walletContract) + case '1.0.1': + walletContract = SmartWalletContractV101.connect(contractAddress, provider) + return new SmartWalletContractEthers_v1_0_1(walletContract) } } @@ -52,16 +52,16 @@ export function getMultiSendContractInstance( provider: JsonRpcProvider ): | MultiSendEthersContract_v1_0_0 - | MultiSendEthersContract_v1_0_6 { + | MultiSendEthersContract_v1_0_1 { let multiSendContract switch (smartAccountVersion) { case '1.0.0': multiSendContract = MultiSendContractV100.connect(contractAddress, provider) return new MultiSendEthersContract_v1_0_0(multiSendContract) - case '1.0.6': - multiSendContract = MultiSendContractV106.connect(contractAddress, provider) - return new MultiSendEthersContract_v1_0_6(multiSendContract) + case '1.0.1': + multiSendContract = MultiSendContractV101.connect(contractAddress, provider) + return new MultiSendEthersContract_v1_0_1(multiSendContract) } } @@ -72,16 +72,16 @@ export function getMultiSendCallOnlyContractInstance( provider: JsonRpcProvider ): | MultiSendCallOnlyEthersContract_v1_0_0 - | MultiSendCallOnlyEthersContract_v1_0_6 { + | MultiSendCallOnlyEthersContract_v1_0_1 { let multiSendCallContract switch (smartAccountVersion) { case '1.0.0': multiSendCallContract = MultiSendCallOnlyContractV100.connect(contractAddress, provider) return new MultiSendCallOnlyEthersContract_v1_0_0(multiSendCallContract) - case '1.0.6': - multiSendCallContract = MultiSendCallOnlyContractV106.connect(contractAddress, provider) - return new MultiSendCallOnlyEthersContract_v1_0_6(multiSendCallContract) + case '1.0.1': + multiSendCallContract = MultiSendCallOnlyContractV101.connect(contractAddress, provider) + return new MultiSendCallOnlyEthersContract_v1_0_1(multiSendCallContract) } } @@ -91,15 +91,15 @@ export function getSmartWalletFactoryContractInstance( provider: JsonRpcProvider ): | SmartWalletFacoryContractEthers_v1_0_0 - | SmartWalletFacoryContractEthers_v1_0_6 { + | SmartWalletFacoryContractEthers_v1_0_1 { let walletFactoryContract switch (smartAccountVersion) { case '1.0.0': walletFactoryContract = SmartWalletFactoryContractV100.connect(contractAddress, provider) return new SmartWalletFacoryContractEthers_v1_0_0(walletFactoryContract) - case '1.0.6': - walletFactoryContract = SmartWalletFactoryContractV106.connect(contractAddress, provider) - return new SmartWalletFacoryContractEthers_v1_0_6(walletFactoryContract) + case '1.0.1': + walletFactoryContract = SmartWalletFactoryContractV101.connect(contractAddress, provider) + return new SmartWalletFacoryContractEthers_v1_0_1(walletFactoryContract) } } diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index 40bdb251e..d45921d58 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -3,7 +3,7 @@ import { SmartAccountVersion, MetaTransactionData, FeeRefundV1_0_0, - FeeRefundV1_0_6, + FeeRefundV1_0_1, } from '@biconomy-sdk/core-types' export type SmartAccountInfoResponse = { readonly name: string @@ -43,13 +43,13 @@ export type EstimateRequiredTxGasDto = { export type EstimateHandlePaymentTxGasDto = { chainId: number walletAddress: string - feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_6 + feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_1 } export type EstimateUndeployedContractGasDto = { chainId: number walletAddress: string - feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_6 + feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_1 transaction: MetaTransactionData signature: string } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index b57288b67..ab0dacb1c 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -23,7 +23,7 @@ import { RelayTransaction, FeeRefundHandlePayment, FeeRefundV1_0_0, - FeeRefundV1_0_6, + FeeRefundV1_0_1, WalletTransaction, SmartAccountVersion, SignedTransaction, @@ -81,7 +81,7 @@ import { // Create an instance of Smart Account with multi-chain support. class SmartAccount { // By default latest version - DEFAULT_VERSION: SmartAccountVersion = '1.0.6' + DEFAULT_VERSION: SmartAccountVersion = '1.0.1' // { ethAdapter } is a window that gives access to all the implemented functions of it // requires signer and read-only provider ethAdapter!: { [chainId: number]: EthersAdapter } @@ -416,7 +416,7 @@ class SmartAccount { targetTxGas: tx.targetTxGas } - const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_6 = { + const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_1 = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, tokenGasPriceFactor: tx.tokenGasPriceFactor, @@ -593,7 +593,7 @@ class SmartAccount { // to avoid failing eth_call override with undeployed wallet txn.targetTxGas = 500000; - const refundInfo: FeeRefundV1_0_6 = { + const refundInfo: FeeRefundV1_0_1 = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, tokenGasPriceFactor: tx.tokenGasPriceFactor, @@ -648,7 +648,7 @@ class SmartAccount { // to avoid failing eth_call override with undeployed wallet txn.targetTxGas = 500000; - const refundInfo: FeeRefundV1_0_6 = { + const refundInfo: FeeRefundV1_0_1 = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, tokenGasPriceFactor: tx.tokenGasPriceFactor, diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index 9515a8478..dc94116c9 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -11,7 +11,7 @@ import { import { ExecTransaction, FeeRefundV1_0_0, - FeeRefundV1_0_6, + FeeRefundV1_0_1, WalletTransaction, SmartAccountSignature } from '@biconomy-sdk/core-types' @@ -158,7 +158,7 @@ export const executeTx = async ( operation: SmartAccountTx.operation, targetTxGas: SmartAccountTx.targetTxGas } - const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_6 = { + const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_1 = { baseGas: SmartAccountTx.baseGas, gasPrice: SmartAccountTx.gasPrice, tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, @@ -188,7 +188,7 @@ export const populateExecuteTx = async ( operation: SmartAccountTx.operation, targetTxGas: SmartAccountTx.targetTxGas } - const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_6 = { + const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_1 = { baseGas: SmartAccountTx.baseGas, gasPrice: SmartAccountTx.gasPrice, tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, From f457f794e27999ccc069c4afb7eb7644e224b61e Mon Sep 17 00:00:00 2001 From: Aman Raj Date: Thu, 8 Sep 2022 20:52:38 +0530 Subject: [PATCH 0127/1247] fix: smart account response type --- packages/node-client/src/types/NodeClientTypes.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index d45921d58..733a5fa85 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -3,7 +3,7 @@ import { SmartAccountVersion, MetaTransactionData, FeeRefundV1_0_0, - FeeRefundV1_0_1, + FeeRefundV1_0_1 } from '@biconomy-sdk/core-types' export type SmartAccountInfoResponse = { readonly name: string @@ -143,6 +143,7 @@ export type TokenInfo = { } export type ISmartAccount = { + version: string smartAccountAddress: string isDeployed: boolean } @@ -193,7 +194,7 @@ export type IndividualTokenResponse = { export type SmartAccountsResponse = { message: string code: number - data: ISmartAccount + data: ISmartAccount[] } export type BalancesResponse = { message: string @@ -213,7 +214,7 @@ export type EstimateGasResponse = { message: string code: number data: { - gas: number, + gas: number txBaseGas?: number } } From b6b6f64c6384704a20dc1a5a0e44ae92f5129a55 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 13 Sep 2022 17:37:10 +0400 Subject: [PATCH 0128/1247] minor changes past code review + dev notes --- package.json | 2 +- .../core-types/src/smart-account.types.ts | 20 +++++++ packages/core-types/src/transaction.types.ts | 37 +------------ packages/core-types/src/types.ts | 17 ------ packages/ethers-lib/contracts/V1.0.0.sol | 3 +- packages/ethers-lib/contracts/V1.0.1.sol | 3 +- packages/ethers-lib/src/EthersAdapter.ts | 3 +- packages/node-client/hardhat.config.ts | 53 ------------------- packages/node-client/src/INodeClient.ts | 7 ++- packages/node-client/src/NodeClient.ts | 4 +- .../node-client/src/types/NodeClientTypes.ts | 2 +- packages/relayer/src/index.ts | 2 + packages/relayer/src/local-relayer.ts | 24 +-------- 13 files changed, 39 insertions(+), 138 deletions(-) delete mode 100644 packages/node-client/hardhat.config.ts diff --git a/package.json b/package.json index ef0967d93..f3f441c21 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.6.5", + "nx": "^14.7.5", "prettier": "2.7.1", "ts-node": "^10.9.1" }, diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index ce3d86f41..908068a7a 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -3,6 +3,26 @@ import { ChainId } from './chains.types' import { WalletTransaction, Transaction } from './transaction.types' import { FeeQuote } from './types' +import { SmartWalletFactoryContract } from './contracts/SmartWalletFactoryContract' +import { MultiSendContract } from './contracts/MultiSendContract' +import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' +import { SmartWalletContract } from './contracts/SmartWalletContract' + +export interface SmartAccountContext { + baseWallet: SmartWalletContract + walletFactory: SmartWalletFactoryContract + multiSend: MultiSendContract + multiSendCall: MultiSendCallOnlyContract +} + +export interface SmartAccountState { + address: string + owner: string + isDeployed: boolean + entryPointAddress: string + fallbackHandlerAddress: string +} + export type AddressForCounterFactualWalletDto = { index: number chainId?: ChainId diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index 028639f5a..68d706729 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -1,5 +1,6 @@ import { BigNumber, BigNumberish } from '@ethersproject/bignumber' -import { OperationType, SmartAccountContext, SmartAccountState } from './types' +import { OperationType } from './types' +import { SmartAccountContext, SmartAccountState } from './smart-account.types' import { PromiEvent, TransactionReceipt } from 'web3-core/types' import { ContractTransaction } from '@ethersproject/contracts' @@ -68,25 +69,6 @@ export interface MetaTransactionData { readonly data: string readonly operation?: OperationType } - -// export interface SmartAccountTrxData extends MetaTransactionData { -// readonly operation: OperationType -// readonly targetTxGas: number -// readonly baseGas: number -// readonly gasPrice: number -// readonly gasToken: string -// readonly refundReceiver: string -// readonly nonce: number -// } - -// export interface SmartAccountTrxDataPartial extends MetaTransactionData { -// readonly targetTxGas?: number -// readonly baseGas?: number -// readonly gasPrice?: number -// readonly gasToken?: string -// readonly refundReceiver?: string -// readonly nonce?: number -// } export interface MetaTransaction { to: string value: BigNumberish @@ -111,21 +93,6 @@ export interface Signature { dynamicPart(): string } -// export interface SmartAccountTrx { -// readonly data: Transaction -// readonly signatures: Map -// addSignature(signature: Signature): void -// encodedSignatures(): string -// } - -// export interface Transaction { -// readonly to: string -// readonly value: string -// readonly data: string -// readonly operation: OperationType -// readonly targetTxGas: number -// } - export interface TransactionOptions { from?: string gas?: number | string diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 10da2b49e..5354f467d 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -1,7 +1,3 @@ -import { SmartWalletFactoryContract } from './contracts/SmartWalletFactoryContract' -import { MultiSendContract } from './contracts/MultiSendContract' -import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' -import { SmartWalletContract } from './contracts/SmartWalletContract' export type SmartAccountVersion = '1.0.1' | '1.0.0' @@ -10,20 +6,7 @@ export enum OperationType { DelegateCall // 1 } -export interface SmartAccountContext { - baseWallet: SmartWalletContract - walletFactory: SmartWalletFactoryContract - multiSend: MultiSendContract - multiSendCall: MultiSendCallOnlyContract -} -export interface SmartAccountState { - address: string - owner: string - isDeployed: boolean - entryPointAddress: string - fallbackHandlerAddress: string -} export interface Eip3770Address { prefix: string address: string diff --git a/packages/ethers-lib/contracts/V1.0.0.sol b/packages/ethers-lib/contracts/V1.0.0.sol index b7b8dba77..319711979 100644 --- a/packages/ethers-lib/contracts/V1.0.0.sol +++ b/packages/ethers-lib/contracts/V1.0.0.sol @@ -1,5 +1,6 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity >=0.4.0 <=0.8.15; +pragma solidity ^0.8.0; +// @review import { WalletFactory } from "scw-contracts-v1.0.0/contracts/smart-contract-wallet/WalletFactory.sol"; import { SmartWallet } from "scw-contracts-v1.0.0/contracts/smart-contract-wallet/SmartWallet.sol"; diff --git a/packages/ethers-lib/contracts/V1.0.1.sol b/packages/ethers-lib/contracts/V1.0.1.sol index 40ab6df28..6af7011d9 100644 --- a/packages/ethers-lib/contracts/V1.0.1.sol +++ b/packages/ethers-lib/contracts/V1.0.1.sol @@ -1,5 +1,6 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity >=0.4.0 <=0.8.15; +// @review +pragma solidity ^0.8.0; import { WalletFactory } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/WalletFactory.sol"; import { SmartWallet } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/SmartWallet.sol"; diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index 698223439..36b7a15fe 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -42,7 +42,6 @@ class EthersAdapter implements EthAdapter { } this.#signer = signer this.#provider = provider - //this.#provider = signer.provider this.#ethers = ethers } @@ -87,7 +86,7 @@ class EthersAdapter implements EthAdapter { getMultiSendCallOnlyContract(smartAccountVersion: SmartAccountVersion, address: string) { if (!address) { - throw new Error('Invalid Multi Send contract address') + throw new Error('Invalid Multi Send Call Only contract address') } return getMultiSendCallOnlyContractInstance(smartAccountVersion, address, this.#provider) } diff --git a/packages/node-client/hardhat.config.ts b/packages/node-client/hardhat.config.ts deleted file mode 100644 index 293c51e5e..000000000 --- a/packages/node-client/hardhat.config.ts +++ /dev/null @@ -1,53 +0,0 @@ -import '@nomiclabs/hardhat-ethers' -import '@nomiclabs/hardhat-waffle' -import '@nomiclabs/hardhat-web3' -import dotenv from 'dotenv' -import { HardhatUserConfig, HttpNetworkUserConfig } from 'hardhat/types' -import yargs from 'yargs' - -const argv = yargs - .option('network', { - type: 'string', - default: 'hardhat', - }) - .help(false) - .version(false).argv - -dotenv.config() -const { INFURA_KEY, MNEMONIC, PK, TESTS_PATH } = process.env -const DEFAULT_MNEMONIC = 'myth like bonus scare over problem client lizard pioneer submit female collect' - -const sharedNetworkConfig: HttpNetworkUserConfig = {} -if (PK) { - sharedNetworkConfig.accounts = [PK]; -} else { - sharedNetworkConfig.accounts = { - mnemonic: MNEMONIC || DEFAULT_MNEMONIC, - } -} - -if (['rinkeby'].includes(argv.network) && INFURA_KEY === undefined) { - throw new Error( - `Could not find Infura key in env, unable to connect to network ${argv.network}`, - ) -} - -const config: HardhatUserConfig = { - // defaultNetwork: "rinkeby", - paths: { - tests: TESTS_PATH - }, - networks: { - hardhat: { - allowUnlimitedContractSize: true, - blockGasLimit: 100000000, - gas: 100000000 - }, - rinkeby: { - ...sharedNetworkConfig, - url: `https://rinkeby.infura.io/v3/${INFURA_KEY}`, - } - } -} - -export default config diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index 2b0768821..0ef56ab1b 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -9,7 +9,7 @@ import { TokenByChainIdAndAddressDto, TokenPriceResponse, SupportedChainsResponse, - individualChainResponse, + IndividualChainResponse, SupportedTokensResponse, IndividualTokenResponse, SmartAccountsResponse, @@ -23,7 +23,7 @@ interface INodeClient { // Chain Apis getAllSupportedChains(): Promise - getChainById(chainId: number): Promise + getChainById(chainId: number): Promise getTokenPricesByChainId(chainId: number): Promise @@ -47,6 +47,9 @@ interface INodeClient { estimateExternalGas(estimateExternalGasDto: EstimateExternalGasDto): Promise + // TODO + // Comment usage + estimateRequiredTxGas( estimateRequiredTxGasDto: EstimateRequiredTxGasDto ): Promise diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index dfa9f9ca0..0219f488d 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -8,7 +8,7 @@ import { TokenByChainIdAndAddressDto, TokenPriceResponse, SupportedChainsResponse, - individualChainResponse, + IndividualChainResponse, SupportedTokensResponse, IndividualTokenResponse, SmartAccountsResponse, @@ -54,7 +54,7 @@ class NodeClient implements INodeClient { * @description thie function will return the chain detail base on supplied { chainId } * @returns */ - async getChainById(chainId: number): Promise { + async getChainById(chainId: number): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/chains/${chainId}`, method: HttpMethod.Get diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index d45921d58..df16fddfd 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -169,7 +169,7 @@ export type SupportedChainsResponse = { data: ChainConfig[] } -export type individualChainResponse = { +export type IndividualChainResponse = { message: string code: number data: ChainConfig diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index 8c3c254e6..72a0b9d03 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -7,6 +7,8 @@ import { } from '@biconomy-sdk/core-types' import { RelayTransaction, RelayResponse } from '@biconomy-sdk/core-types' + +// JsonRpcRequest export interface Relayer { // relayer will submit the transaction(s) to the network and return the transaction response. // The quote should be the one returned from getFeeOptions, if any. diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index 3032748dc..1d76c4ff9 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -27,7 +27,7 @@ export class LocalRelayer implements Relayer { // Defines a type that takes config, context for SCW in play along with other details async deployWallet(deployWallet: DeployWallet): Promise { // Should check if already deployed - //Review for index and ownership transfer case + // Review for index and ownership transfer case const { config, context, index = 0 } = deployWallet const { address } = config const { walletFactory } = context @@ -62,33 +62,11 @@ export class LocalRelayer implements Relayer { } } - /*async isWalletDeployed(walletAddress: string): Promise { - // Check if wallet is deployed - return true; - }*/ - - /*async getFeeOptions( - ): Promise<{ options: FeeOption[] }> { - return { options: [] } - }*/ - - /*async gasRefundOptions( - ): Promise { - const { options } = //await this.getFeeOptions() - return options - }*/ - - // Should make an object that takes config and context - // Add feeQuote later - // Appending tx and rawTx may not be necessary - async relay(relayTransaction: RelayTransaction): Promise { const { config, signedTx, context, gasLimit } = relayTransaction const { isDeployed, address } = config const { multiSendCall } = context // multisend has to be multiSendCallOnly here! if (!isDeployed) { - // If not =>> preprendWalletDeploy - console.log('here') const prepareWalletDeploy: DeployWallet = { config, context, From 801220e086775ba175eec9c1d2c5b234b8588d79 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 15 Sep 2022 12:22:00 +0400 Subject: [PATCH 0129/1247] consistent package version --- packages/ethers-lib/package.json | 3 ++- packages/node-client/package.json | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index ddf540cb9..f608de847 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -22,7 +22,7 @@ "dist" ], "devDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.5", + "@nomiclabs/hardhat-ethers": "^2.1.0", "@nomiclabs/hardhat-waffle": "^2.0.3", "@typechain/ethers-v5": "^9.0.0", "@types/node": "^17.0.23", @@ -43,6 +43,7 @@ }, "dependencies": { "@biconomy-sdk/core-types": "*", + "@nomiclabs/hardhat-ethers": "^2.1.0", "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0", "scw-contracts-v1.0.0": "npm:scw-contracts@1.0.0", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index e5f883ee3..62a19c707 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -25,7 +25,7 @@ "@gnosis.pm/safe-core-sdk": "^2.1.0", "@gnosis.pm/safe-ethers-lib": "^1.1.0", "@gnosis.pm/safe-web3-lib": "^1.1.0", - "@nomiclabs/hardhat-ethers": "^2.0.5", + "@nomiclabs/hardhat-ethers": "^2.1.0", "@nomiclabs/hardhat-waffle": "^2.0.3", "@nomiclabs/hardhat-web3": "^2.0.0", "@types/chai": "^4.3.0", @@ -48,7 +48,8 @@ "rimraf": "^3.0.2", "ts-generator": "^0.1.1", "ts-node": "^10.7.0", - "typescript": "^4.6.3" + "typescript": "^4.6.3", + "@biconomy-sdk/core-types": "*" }, "lint-staged": { "src/**/!(*test).ts": [ @@ -66,6 +67,7 @@ }, "dependencies": { "@biconomy-sdk/core-types": "*", + "@nomiclabs/hardhat-ethers": "^2.1.0", "@ethersproject/abstract-signer": "^5.6.0", "@gnosis.pm/safe-core-sdk": "^2.1.0", "node-fetch": "^2.6.6" From cda37b10ac94578b61284b080353f437dd2f653f Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 15 Sep 2022 12:30:10 +0400 Subject: [PATCH 0130/1247] tsconfig renamed --- packages/smart-account/package.json | 2 +- tsconfig.test.json => tsconfig.json | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename tsconfig.test.json => tsconfig.json (100%) diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 6bf6609e0..3553a2b4a 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -14,7 +14,7 @@ "unbuild": "rimraf dist *.tsbuildinfo", "build": "rimraf dist && tsc", "test": "yarn test:concurrently 'yarn test:run'", - "test:file": "TS_NODE_PROJECT=../../tsconfig.test.json mocha -r ts-node/register --timeout 30000", + "test:file": "TS_NODE_PROJECT=../../tsconfig.json mocha -r ts-node/register --timeout 30000", "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:run": "yarn test:file tests/**/*.spec.ts", "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", diff --git a/tsconfig.test.json b/tsconfig.json similarity index 100% rename from tsconfig.test.json rename to tsconfig.json From c1d70b578e54e1537e51c3b46229c689e38c7713 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 15 Sep 2022 12:31:29 +0400 Subject: [PATCH 0131/1247] package versions update for publish (testing) --- lerna.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/smart-account/src/assets/index.ts | 10 +++++----- packages/transactions/package.json | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lerna.json b/lerna.json index a708a46cf..2890bf35c 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages/*" ], "useNx": true, - "version": "1.0.4" + "version": "1.0.5" } diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 927849914..e57d6c88c 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.4", + "version": "1.0.5", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index f608de847..d2dd64677 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.4", + "version": "1.0.5", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 62a19c707..657ac2b8a 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.4", + "version": "1.0.5", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 90f0f2c90..7cff93339 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.4", + "version": "1.0.5", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 3553a2b4a..97f088dc5 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.4", + "version": "1.0.5", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/smart-account/src/assets/index.ts b/packages/smart-account/src/assets/index.ts index 2dc1160b7..61d5786fc 100644 --- a/packages/smart-account/src/assets/index.ts +++ b/packages/smart-account/src/assets/index.ts @@ -2,7 +2,7 @@ export const MultiSend = { defaultAddress: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', released: true, contractName: 'MultiSend', - version: '1.0.4', + version: '1.0.5', networkAddresses: { '1': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', '4': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', @@ -40,7 +40,7 @@ export const MultiSendCallOnly = { defaultAddress: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', released: true, contractName: 'MultiSendCallOnly', - version: '1.0.4', + version: '1.0.5', networkAddresses: { '1': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', '4': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', @@ -73,7 +73,7 @@ export const SmartWallet = { defaultAddress: '0x056DcE811A2b695171274855E7246039Df298158', released: true, contractName: 'SmartWallet', - version: '1.0.4', + version: '1.0.5', networkAddresses: { '1': '0x056DcE811A2b695171274855E7246039Df298158', '4': '0x056DcE811A2b695171274855E7246039Df298158', @@ -1088,7 +1088,7 @@ export const WalletFactory = { defaultAddress: '0x050bca32264195976Fe00BcA566B548413A9E658', released: true, contractName: 'WalletFactory', - version: '1.0.4', + version: '1.0.5', networkAddresses: { '1': '0x050bca32264195976Fe00BcA566B548413A9E658', '4': '0x050bca32264195976Fe00BcA566B548413A9E658', @@ -1250,7 +1250,7 @@ export const GasEstimator = { defaultAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', released: true, contractName: 'WalletFactory', - version: '1.0.4', + version: '1.0.5', networkAddresses: { '5': '0xc6e8748a08e591250a3eed526e9455859633c6c4' }, diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 17bada573..7f411efb7 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.4", + "version": "1.0.5", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From e952cd60025aaffa0264230dcf11210b3b13375d Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 15 Sep 2022 13:50:47 +0400 Subject: [PATCH 0132/1247] remove workspaces --- package.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/package.json b/package.json index f3f441c21..3a60babe3 100644 --- a/package.json +++ b/package.json @@ -21,11 +21,6 @@ "bug": "Bug Fix" } }, - "workspaces": { - "packages": [ - "packages/*" - ] - }, "author": "Biconomy (https://biconomy.io)", "devDependencies": { "@types/jest": "^28.1.7", From 090da9cf9c9efbabf041e2e782a474be76849721 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sun, 18 Sep 2022 14:15:31 +0400 Subject: [PATCH 0133/1247] updates needed for test cases + dev notes --- packages/smart-account/package.json | 13 +- packages/smart-account/src/SmartAccount.ts | 8 + .../smart-account/tests/smartaccount.spec.ts | 1423 +++++++++++------ packages/smart-account/tests/utils/deploy.ts | 8 +- 4 files changed, 934 insertions(+), 518 deletions(-) diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 97f088dc5..082487fc3 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -31,10 +31,13 @@ }, "devDependencies": { "@nomiclabs/hardhat-ethers": "^2.1.0", + "@types/jest": "^28.1.7", "@types/mocha": "^9.1.1", "@types/node": "^17.0.23", "@typescript-eslint/eslint-plugin": "^5.17.0", "@typescript-eslint/parser": "^5.17.0", + "chai": "^4.3.6", + "chai-as-promised": "^7.1.1", "eslint": "^8.12.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", @@ -42,11 +45,8 @@ "jest-cli": "^28.1.3", "nock": "^13.2.9", "prettier": "^2.6.2", - "@types/jest": "^28.1.7", - "web3-core": "^1.7.1", - "chai": "^4.3.6", - "chai-as-promised": "^7.1.1", - "typescript": "^4.7.4" + "typescript": "^4.7.4", + "web3-core": "^1.7.1" }, "dependencies": { "@biconomy-sdk/core-types": "*", @@ -59,6 +59,7 @@ "@ethersproject/providers": "^5.6.8", "@gnosis.pm/safe-deployments": "^1.12.0", "@nomiclabs/hardhat-ethers": "^2.1.0", - "@types/mocha": "^9.1.1" + "@types/mocha": "^9.1.1", + "concurrently": "^7.4.0" } } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index ab0dacb1c..05c258286 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -772,6 +772,10 @@ class SmartAccount { const response = await this.estimateRequiredTxGas(estimateRequiredTxGas); // considerable offset ref gnosis safe service client safeTxGas + // @Talha + // TODO + // handle exception responses and when gas returned is 0 + // We could stop the further flow const requiredTxGasEstimate = Number(response.data.gas) + 30000 console.log('required txgas estimate ', requiredTxGasEstimate); targetTxGas = requiredTxGasEstimate; @@ -953,6 +957,10 @@ class SmartAccount { const response = await this.estimateRequiredTxGas({chainId, walletAddress: this.address, transaction: internalTx}) // considerable offset ref gnosis safe service client safeTxGas + // @Talha + // TODO + // handle exception responses and when gas returned is 0 + // We could stop the further flow const requiredTxGasEstimate = Number(response.data.gas) + 30000 console.log('required txgas estimate ', requiredTxGasEstimate); targetTxGas = requiredTxGasEstimate; diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 74dd4ae5e..0ec47882f 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -65,517 +65,916 @@ describe('Wallet integration', function () { console.log('base wallet deployed at : ', smartWallet.address) console.log('wallet factory deployed at : ', walletFactory.address) console.log('multi send deployed at : ', multiSend.address) - console.log('multi send deployed at : ', multiSendCallOnly.address) + console.log('multi send call deployed at : ', multiSendCallOnly.address) const scope = nock('https://sdk-backend.staging.biconomy.io') .persist() .get('/v1/chains/') .reply(200, { - "message": "Success", - "code": 200, - "data": [ - { - "chainId": 1, - "name": "Ethereum", - "symbol": "ETH", - "isL2": false, - "isMainnet": true, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://etherscan.io/address/", - "txHash": "https://etherscan.io/address/", - "api": "https://api.etherscan.io/" - }, - "ensRegistryAddress": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", - "estimatorAddress": "", - "walletFactory": [ - { - "version": "1.0.0", - "address": "0x6CEdFEec52d852fdAcDC6aD4a80F58aab406a898", - "abi": "" - } - ], - "multiSend": [ - { - "version": "1.0.0", - "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": "0xeA6eEf40Eaa8A642022f1697D6ED2fFC0Ffe5DFB", - "abi": "" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://kovan.infura.io/v3/d126f392798444609246423b06116c77", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 1, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "name": "Ether", - "symbol": "ETH", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", - "isNative": true - } - }, - { - "chainId": 137, - "name": "Polygon", - "symbol": "MATIC", - "isL2": true, - "isMainnet": true, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://polygonscan.com/address/", - "txHash": "https://polygonscan.com/address/", - "api": "https://api.polygonscan.com/" - }, - "ensRegistryAddress": "", - "estimatorAddress": "", - "walletFactory": [ - { - "version": "1.0.0", - "address": "0x6CEdFEec52d852fdAcDC6aD4a80F58aab406a898", - "abi": "" - } - ], - "multiSend": [ - { - "version": "1.0.0", - "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": "0xeA6eEf40Eaa8A642022f1697D6ED2fFC0Ffe5DFB", - "abi": "" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://polygon-mainnet.g.alchemy.com/v2/s6bOKN9QDGXpVbsqzJMl_AHeZHNOCTcM", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 137, - "address": "0x0000000000000000000000000000000000001010", - "name": "Polygon Matic", - "symbol": "Matic", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png", - "isNative": true - } - }, - { - "chainId": 56, - "name": "BSC Mainnet", - "symbol": "BNB", - "isL2": true, - "isMainnet": true, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://bscscan.com/address/", - "txHash": "https://bscscan.com/address/", - "api": "https://bscscan.com/" - }, - "ensRegistryAddress": "", - "estimatorAddress": "", - "walletFactory": [ - { - "version": "1.0.0", - "address": "0x6CEdFEec52d852fdAcDC6aD4a80F58aab406a898", - "abi": "" - } - ], - "multiSend": [ - { - "version": "1.0.0", - "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": "0xeA6eEf40Eaa8A642022f1697D6ED2fFC0Ffe5DFB", - "abi": "" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://bsc-dataseed2.binance.org/", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 56, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "name": "BNB Coin", - "symbol": "BNB", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png", - "isNative": true - } - }, - { - "chainId": 5, - "name": "Goerli", - "symbol": "ETH", - "isL2": false, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://goerli.etherscan.io/address/", - "txHash": "https://goerli.etherscan.io/address/", - "api": "https://goerli.etherscan.io/" - }, - "ensRegistryAddress": "", - "estimatorAddress": "", - "walletFactory": [ - { - "version": "1.0.0", - "address": "0x6CEdFEec52d852fdAcDC6aD4a80F58aab406a898", - "abi": "" - } - ], - "multiSend": [ - { - "version": "1.0.0", - "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": "0xeA6eEf40Eaa8A642022f1697D6ED2fFC0Ffe5DFB", - "abi": "" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 5, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "name": "Ether", - "symbol": "ETH", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", - "isNative": true - } - }, - { - "chainId": 80001, - "name": "Polygon Mumbai", - "symbol": "MATIC", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" - }, - "ensRegistryAddress": "", - "estimatorAddress": "", - "walletFactory": [ - { - "version": "1.0.0", - "address": "0x6CEdFEec52d852fdAcDC6aD4a80F58aab406a898", - "abi": "" - } - ], - "multiSend": [ - { - "version": "1.0.0", - "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": "0xeA6eEf40Eaa8A642022f1697D6ED2fFC0Ffe5DFB", - "abi": "" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 80001, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "name": "Polygon Matic", - "symbol": "Matic", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png", - "isNative": true - } - }, - { - "chainId": 97, - "name": "BSC Testnet", - "symbol": "BNB", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://bscscan.com//address/", - "txHash": "https://bscscan.com/address/", - "api": "https://bscscan.com/" - }, - "ensRegistryAddress": "", - "estimatorAddress": "", - "walletFactory": [ - { - "version": "1.0.0", - "address": "0x6CEdFEec52d852fdAcDC6aD4a80F58aab406a898", - "abi": "" - } - ], - "multiSend": [ - { - "version": "1.0.0", - "address": "0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0xa72E2c9EC14DDee494F551AAe9885158105F809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": "0xeA6eEf40Eaa8A642022f1697D6ED2fFC0Ffe5DFB", - "abi": "" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xFc942E06c54d08502557FA40e1Aa23C5258132D5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://data-seed-prebsc-1-s1.binance.org:8545/", - "indexerUrl": "", - "backendNodeUrl": "" - }, - { - "chainId": 1337, - "name": "Ganache", - "symbol": "ETH", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" - }, - "ensRegistryAddress": "", - "estimatorAddress": "", - "walletFactory": [ - { - "version": "1.0.0", - "address": walletFactory.address, - "abi": "" - } - ], - "multiSend": [ - { - "version": "1.0.0", - "address": "0xb1D112B7Ef6a1F0787943dee588127ED0dbD41A8", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0x0Bc8A760B4a8a922A88b1C1773e3798641348508", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "EoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "EoaChangedEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": smartWallet.address, - "abi": "" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xDc7d491D694CB44d0Da0400E05F9650c5e0FB11d", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xa9939Cb3Ed4efaeA050f75A23fD8709cBE6181e4", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "http://localhost:8545", - "indexerUrl": "", - "backendNodeUrl": "" - } - ] - }) + "message": "Success", + "code": 200, + "data": [ + { + "chainId": 1, + "name": "Ethereum", + "symbol": "ETH", + "isL2": false, + "isMainnet": true, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://etherscan.io/address/", + "txHash": "https://etherscan.io/address/", + "api": "https://api.etherscan.io/" + }, + "ensRegistryAddress": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", + "estimatorAddress": "0xc6e8748a08e591250a3eed526e9455859633c6c4", + "walletFactory": [ + { + "version": "1.0.0", + "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", + "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": "0x596387b0232540b3b620050dcd747fa7e4d21797", + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6", + "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" + } + ], + "decoderAddress": "0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18", + "multiSend": [ + { + "version": "1.0.0", + "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "eoaChangedEventHit": false, + "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", + "updateImplementationEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": "0xc313daf8dc1e6991f15068a6ca27d372f08a5455", + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "https://kovan.infura.io/v3/d126f392798444609246423b06116c77", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 1, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "name": "Ether", + "symbol": "ETH", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", + "isNative": true + } + }, + { + "chainId": 137, + "name": "Polygon", + "symbol": "MATIC", + "isL2": true, + "isMainnet": true, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://polygonscan.com/address/", + "txHash": "https://polygonscan.com/address/", + "api": "https://api.polygonscan.com/" + }, + "ensRegistryAddress": "", + "estimatorAddress": "0xc6e8748a08e591250a3eed526e9455859633c6c4", + "walletFactory": [ + { + "version": "1.0.0", + "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", + "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": "0x2602cf019a69f40fb7de5a0f3fdb778eee7ed722", + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6", + "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" + } + ], + "decoderAddress": "0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18", + "multiSend": [ + { + "version": "1.0.0", + "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "eoaChangedEventHit": false, + "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", + "updateImplementationEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": "0x140a25bd5b002dceae2754cf12576a2640ddc18e", + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xfc942e06c54d08502557fa40e1aa23c5258132d5", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "https://polygon-mainnet.g.alchemy.com/v2/s6bOKN9QDGXpVbsqzJMl_AHeZHNOCTcM", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 137, + "address": "0x0000000000000000000000000000000000001010", + "name": "Polygon Matic", + "symbol": "Matic", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png", + "isNative": true + } + }, + { + "chainId": 56, + "name": "BSC Mainnet", + "symbol": "BNB", + "isL2": true, + "isMainnet": true, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://bscscan.com/address/", + "txHash": "https://bscscan.com/address/", + "api": "https://bscscan.com/" + }, + "ensRegistryAddress": "", + "estimatorAddress": "0xc6e8748a08e591250a3eed526e9455859633c6c4", + "walletFactory": [ + { + "version": "1.0.0", + "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", + "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": "0x596387b0232540b3b620050dcd747fa7e4d21797", + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6", + "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" + } + ], + "decoderAddress": "0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18", + "multiSend": [ + { + "version": "1.0.0", + "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "eoaChangedEventHit": false, + "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", + "updateImplementationEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": "0xc313daf8dc1e6991f15068a6ca27d372f08a5455", + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "https://bsc-dataseed2.binance.org/", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 56, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "name": "BNB Coin", + "symbol": "BNB", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png", + "isNative": true + } + }, + { + "chainId": 5, + "name": "Goerli", + "symbol": "ETH", + "isL2": false, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://goerli.etherscan.io/address/", + "txHash": "https://goerli.etherscan.io/address/", + "api": "https://goerli.etherscan.io/" + }, + "ensRegistryAddress": "", + "estimatorAddress": "0x8caefe0d512b8e86c7c1bb59e7473d354cf864ab", + "walletFactory": [ + { + "version": "1.0.0", + "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", + "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": "0x2602cf019a69f40fb7de5a0f3fdb778eee7ed722", + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6", + "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" + } + ], + "decoderAddress": "0xba63a55b7ee3334044a2100c99acdd93325fc0cb", + "multiSend": [ + { + "version": "1.0.0", + "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "eoaChangedEventHit": false, + "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", + "updateImplementationEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": "0x140a25bd5b002dceae2754cf12576a2640ddc18e", + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xfc942e06c54d08502557fa40e1aa23c5258132d5", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xfc942e06c54d08502557fa40e1aa23c5258132d5", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 5, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "name": "Ether", + "symbol": "ETH", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", + "isNative": true + } + }, + { + "chainId": 80001, + "name": "Polygon Mumbai", + "symbol": "MATIC", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" + }, + "ensRegistryAddress": "", + "estimatorAddress": "0x8caefe0d512b8e86c7c1bb59e7473d354cf864ab", + "walletFactory": [ + { + "version": "1.0.0", + "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", + "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": "0x2602cf019a69f40fb7de5a0f3fdb778eee7ed722", + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", + "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" + } + ], + "decoderAddress": "0xba63a55b7ee3334044a2100c99acdd93325fc0cb", + "multiSend": [ + { + "version": "1.0.0", + "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "eoaChangedEventHit": false, + "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", + "updateImplementationEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": "0x140a25bd5b002dceae2754cf12576a2640ddc18e", + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xfc942e06c54d08502557fa40e1aa23c5258132d5", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xfc942e06c54d08502557fa40e1aa23c5258132d5", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", + "indexerUrl": "", + "backendNodeUrl": "", + "token": { + "chainId": 80001, + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "name": "Polygon Matic", + "symbol": "Matic", + "decimals": 18, + "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png", + "isNative": true + } + }, + { + "chainId": 97, + "name": "BSC Testnet", + "symbol": "BNB", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://bscscan.com//address/", + "txHash": "https://bscscan.com/address/", + "api": "https://bscscan.com/" + }, + "ensRegistryAddress": "", + "estimatorAddress": "0xc6e8748a08e591250a3eed526e9455859633c6c4", + "walletFactory": [ + { + "version": "1.0.0", + "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", + "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": "0x596387b0232540b3b620050dcd747fa7e4d21797", + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6", + "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" + } + ], + "decoderAddress": "0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18", + "multiSend": [ + { + "version": "1.0.0", + "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "eoaChangedEventHit": false, + "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", + "updateImplementationEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": "0xc313daf8dc1e6991f15068a6ca27d372f08a5455", + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "https://data-seed-prebsc-1-s1.binance.org:8545/", + "indexerUrl": "", + "backendNodeUrl": "" + }, + { + "chainId": 1337, + "name": "Ganache", + "symbol": "ETH", + "isL2": true, + "isMainnet": false, + "description": "", + "blockExplorerUriTemplate": { + "address": "https://mumbai.polygonscan.com/address/", + "txHash": "https://mumbai.polygonscan.com/address/", + "api": "https://api.mumbai.polygonscan.com/" + }, + "ensRegistryAddress": "", + "estimatorAddress": "0xc6e8748a08e591250a3eed526e9455859633c6c4", + "walletFactory": [ + { + "version": "1.0.0", + "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", + "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": walletFactory.address, + "abi": "", + "walletCreatedEventName": "WalletCreated", + "WalletCreatedEventConfirmations": 6, + "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6", + "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" + } + ], + "decoderAddress": "0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18", + "multiSend": [ + { + "version": "1.0.0", + "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "abi": "" + }, + { + "version": "1.0.1", + "address": multiSend.address, + "abi": "" + } + ], + "multiSendCall": [ + { + "version": "1.0.0", + "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", + "abi": "" + }, + { + "version": "1.0.1", + "address": multiSendCallOnly.address, + "abi": "" + } + ], + "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", + "walletCreatedEventHit": false, + "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", + "eoaChangedEventHit": false, + "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", + "updateImplementationEventHit": false, + "wallet": [ + { + "version": "1.0.0", + "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + }, + { + "version": "1.0.1", + "address": smartWallet.address, + "abi": "", + "eoaChangedEventName": "EOAChanged", + "eoaChangedEventConfirmations": 6, + "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", + "updateImplementationEventName": "UpdateImplementation", + "updateImplementationEventConfirmations": 6, + "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", + "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" + } + ], + "entryPoint": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "fallBackHandler": [ + { + "version": "1.0.0", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + }, + { + "version": "1.0.1", + "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", + "abi": "" + } + ], + "relayerUrl": "", + "providerUrl": "http://localhost:8545", + "indexerUrl": "", + "backendNodeUrl": "" + } + ] + }) }) it('Should init and return details of smart account', async () => { @@ -782,7 +1181,7 @@ describe('Wallet integration', function () { } }) - /*it('Should be able to send batch of transactions', async () => { + it('Should be able to send batch of transactions', async () => { const userAddress = (await ethnode.signer?.getAddress()) || '' const eoaSigner = ethnode.provider?.getSigner() @@ -855,6 +1254,14 @@ describe('Wallet integration', function () { ethers.utils.parseEther('0.5').toString() ) } - })*/ + }) + + // Next // TODO + // Test cases for forward transaction mocking responses from rest relayer + // createRefundTransaction (+Batch) + // prepareDeployAndPayFees + // deployAndPayFees + // createRefundTransaction (+Batch) + // estimateDeployments etc while mocking response form backend client }) }) diff --git a/packages/smart-account/tests/utils/deploy.ts b/packages/smart-account/tests/utils/deploy.ts index 658371ad9..575a7ec59 100644 --- a/packages/smart-account/tests/utils/deploy.ts +++ b/packages/smart-account/tests/utils/deploy.ts @@ -1,10 +1,10 @@ import { Contract, ethers } from 'ethers' // import { SmartWalletContract } from '@biconomy-sdk/core-types' -const SmartWalletArtifact = require('@biconomy-sdk/ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletContract_v1_0_1.json') -const WalletFactoryArtifact = require('@biconomy-sdk/ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletFactoryContract_v1_0_1.json') -const MultiSendArtifact = require('@biconomy-sdk/ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendContract_v1_0_1.json') -const MultiSendCallOnlyArtifact = require('@biconomy-sdk/ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendCallOnlyContract_v1_0_1.json') +const SmartWalletArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletContract_v1_0_1.json') +const WalletFactoryArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletFactoryContract_v1_0_1.json') +const MultiSendArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendContract_v1_0_1.json') +const MultiSendCallOnlyArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendCallOnlyContract_v1_0_1.json') export async function deployWalletContracts( signer: ethers.Signer From d79522bb0a74057f774ca1f1f58c20ed5ea1af2a Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 19 Sep 2022 16:00:28 +0400 Subject: [PATCH 0134/1247] enable to send custom gas limit --- packages/core-types/src/smart-account.types.ts | 2 ++ packages/smart-account/src/SmartAccount.ts | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 908068a7a..15591fc31 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -7,6 +7,7 @@ import { SmartWalletFactoryContract } from './contracts/SmartWalletFactoryContra import { MultiSendContract } from './contracts/MultiSendContract' import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' import { SmartWalletContract } from './contracts/SmartWalletContract' +import { GasLimit } from './transaction.types' export interface SmartAccountContext { baseWallet: SmartWalletContract @@ -37,6 +38,7 @@ export type SendTransactionDto = { tx: WalletTransaction batchId?: number chainId?: ChainId + gasLimit?: GasLimit; } export type PrepareRefundTransactionDto = { diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 05c258286..39878aa7d 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -399,7 +399,7 @@ class SmartAccount { batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = sendTransactionDto - let gasLimit; + let { gasLimit } = sendTransactionDto const isDeployed = await this.isDeployed(chainId); let rawTx: RawTransactionType = { to: tx.to, @@ -450,12 +450,16 @@ class SmartAccount { config: state, context: this.getSmartAccountContext(chainId) } + // Must be in specified format + if(gasLimit) { + relayTrx.gasLimit = gasLimit; + } if(!isDeployed) { gasLimit = { hex: '0x1E8480', type: 'hex' } - relayTrx.gasLimit = gasLimit; + relayTrx.gasLimit = gasLimit; } const txn: RelayResponse = await this.relayer.relay(relayTrx) return txn.hash From d2ce0a76fefb13c532a5740bc63fad09b7014517 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 19 Sep 2022 16:03:14 +0400 Subject: [PATCH 0135/1247] version update to publish --- lerna.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/smart-account/src/assets/index.ts | 10 +++++----- packages/transactions/package.json | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lerna.json b/lerna.json index 2890bf35c..3d7ebc3c3 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages/*" ], "useNx": true, - "version": "1.0.5" + "version": "1.0.6" } diff --git a/packages/core-types/package.json b/packages/core-types/package.json index e57d6c88c..361a46860 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.5", + "version": "1.0.6", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index d2dd64677..e8f7081d8 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.5", + "version": "1.0.6", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 657ac2b8a..6da07eb90 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.5", + "version": "1.0.6", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 7cff93339..b1117dc94 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.5", + "version": "1.0.6", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 082487fc3..7239e2563 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.5", + "version": "1.0.6", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/smart-account/src/assets/index.ts b/packages/smart-account/src/assets/index.ts index 61d5786fc..02fa2719f 100644 --- a/packages/smart-account/src/assets/index.ts +++ b/packages/smart-account/src/assets/index.ts @@ -2,7 +2,7 @@ export const MultiSend = { defaultAddress: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', released: true, contractName: 'MultiSend', - version: '1.0.5', + version: '1.0.1', networkAddresses: { '1': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', '4': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', @@ -40,7 +40,7 @@ export const MultiSendCallOnly = { defaultAddress: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', released: true, contractName: 'MultiSendCallOnly', - version: '1.0.5', + version: '1.0.1', networkAddresses: { '1': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', '4': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', @@ -73,7 +73,7 @@ export const SmartWallet = { defaultAddress: '0x056DcE811A2b695171274855E7246039Df298158', released: true, contractName: 'SmartWallet', - version: '1.0.5', + version: '1.0.1', networkAddresses: { '1': '0x056DcE811A2b695171274855E7246039Df298158', '4': '0x056DcE811A2b695171274855E7246039Df298158', @@ -1088,7 +1088,7 @@ export const WalletFactory = { defaultAddress: '0x050bca32264195976Fe00BcA566B548413A9E658', released: true, contractName: 'WalletFactory', - version: '1.0.5', + version: '1.0.1', networkAddresses: { '1': '0x050bca32264195976Fe00BcA566B548413A9E658', '4': '0x050bca32264195976Fe00BcA566B548413A9E658', @@ -1250,7 +1250,7 @@ export const GasEstimator = { defaultAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', released: true, contractName: 'WalletFactory', - version: '1.0.5', + version: '1.0.1', networkAddresses: { '5': '0xc6e8748a08e591250a3eed526e9455859633c6c4' }, diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 7f411efb7..0063b34aa 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.5", + "version": "1.0.6", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From 8a391c4685d3a65e9dc0995699a80e80261e1b07 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 19 Sep 2022 17:08:04 +0400 Subject: [PATCH 0136/1247] refactor --- packages/core-types/src/smart-account.types.ts | 2 +- packages/core-types/src/transaction.types.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 15591fc31..24390fc87 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -38,7 +38,7 @@ export type SendTransactionDto = { tx: WalletTransaction batchId?: number chainId?: ChainId - gasLimit?: GasLimit; + gasLimit?: GasLimit } export type PrepareRefundTransactionDto = { diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index 68d706729..cfd14a9cd 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -118,7 +118,7 @@ export interface RelayTransaction { } export interface GasLimit { - hex: string, + hex: string type: string } From 5c115534b4b3735af903b0812f046b901db68c61 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 19 Sep 2022 17:09:34 +0400 Subject: [PATCH 0137/1247] version update --- lerna.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 4 ++-- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lerna.json b/lerna.json index 3d7ebc3c3..0f1a3386e 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages/*" ], "useNx": true, - "version": "1.0.6" + "version": "1.0.7" } diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 361a46860..b9461bac2 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.6", + "version": "1.0.7", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index e8f7081d8..5664cc945 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.6", + "version": "1.0.7", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -47,7 +47,7 @@ "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0", "scw-contracts-v1.0.0": "npm:scw-contracts@1.0.0", - "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.6" + "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.7" }, "peerDependencies": { "ethers": "^5.5.3" diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 6da07eb90..0d34508de 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.6", + "version": "1.0.7", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index b1117dc94..bf2f0afd9 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.6", + "version": "1.0.7", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 7239e2563..b664489e6 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.6", + "version": "1.0.7", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 0063b34aa..7567c7647 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.6", + "version": "1.0.7", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From 5849b15bce25c5cc7acbf0b99117a414f5420a2c Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 19 Sep 2022 18:22:25 +0400 Subject: [PATCH 0138/1247] revert wrong version update --- packages/ethers-lib/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 5664cc945..df0107dc1 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -47,7 +47,7 @@ "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0", "scw-contracts-v1.0.0": "npm:scw-contracts@1.0.0", - "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.7" + "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.5" }, "peerDependencies": { "ethers": "^5.5.3" From 3f3f98af02d81db70757d0d02927823979db01a9 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 19 Sep 2022 18:23:20 +0400 Subject: [PATCH 0139/1247] publish 1.0.8 --- lerna.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index 0f1a3386e..58fe23699 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages/*" ], "useNx": true, - "version": "1.0.7" + "version": "1.0.8" } diff --git a/packages/core-types/package.json b/packages/core-types/package.json index b9461bac2..ac20c361c 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.7", + "version": "1.0.8", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index df0107dc1..130d1a08c 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.7", + "version": "1.0.8", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 0d34508de..5eeefc2e3 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.7", + "version": "1.0.8", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index bf2f0afd9..6da294e0f 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.7", + "version": "1.0.8", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index b664489e6..fd8f2bf52 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.7", + "version": "1.0.8", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 7567c7647..5d87b2cb1 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.7", + "version": "1.0.8", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From 9e7b6a85cdbda421fcf0d78f1954821c90c7019b Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 19 Sep 2022 20:07:20 +0400 Subject: [PATCH 0140/1247] versioning in estimation endpoint --- lerna.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/node-client/package.json | 2 +- packages/node-client/src/types/NodeClientTypes.ts | 2 ++ packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/smart-account/src/SmartAccount.ts | 12 ++++++++---- packages/transactions/package.json | 2 +- 9 files changed, 17 insertions(+), 11 deletions(-) diff --git a/lerna.json b/lerna.json index 58fe23699..e080d064a 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages/*" ], "useNx": true, - "version": "1.0.8" + "version": "1.0.9" } diff --git a/packages/core-types/package.json b/packages/core-types/package.json index ac20c361c..924c7fcbe 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.8", + "version": "1.0.9", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 130d1a08c..31b394e4e 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.8", + "version": "1.0.9", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 5eeefc2e3..252ea916c 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.8", + "version": "1.0.9", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index 388c23c5a..ac0a27862 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -42,12 +42,14 @@ export type EstimateRequiredTxGasDto = { export type EstimateHandlePaymentTxGasDto = { chainId: number + version: string walletAddress: string feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_1 } export type EstimateUndeployedContractGasDto = { chainId: number + version: string walletAddress: string feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_1 transaction: MetaTransactionData diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 6da294e0f..e24fc2811 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.8", + "version": "1.0.9", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index fd8f2bf52..4ddc710e5 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.8", + "version": "1.0.9", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 39878aa7d..20e94705a 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -607,6 +607,7 @@ class SmartAccount { const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { chainId, + version: this.DEFAULT_VERSION, transaction: txn, walletAddress: this.address, feeRefund: refundInfo, @@ -662,6 +663,7 @@ class SmartAccount { const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { chainId, + version: this.DEFAULT_VERSION, transaction: txn, walletAddress: this.address, feeRefund: refundInfo, @@ -757,7 +759,8 @@ class SmartAccount { refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS } const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId, + chainId, + version: this.DEFAULT_VERSION, walletAddress: this.address, feeRefund: refundDetails } @@ -794,7 +797,8 @@ class SmartAccount { } const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId, + chainId, + version: this.DEFAULT_VERSION, walletAddress: this.address, feeRefund: refundDetails } @@ -953,7 +957,7 @@ class SmartAccount { refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS } - const handlePaymentResponse = await this.estimateHandlePaymentGasOverride({chainId, walletAddress: this.address, feeRefund: refundDetails}); + const handlePaymentResponse = await this.estimateHandlePaymentGasOverride({chainId, version: this.DEFAULT_VERSION, walletAddress: this.address, feeRefund: refundDetails}); handlePaymentEstimate = Number(handlePaymentResponse.data.gas) console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate); baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; @@ -978,7 +982,7 @@ class SmartAccount { refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS } - const handlePaymentResponse = await this.estimateHandlePaymentGas({chainId, walletAddress: this.address, feeRefund: refundDetails}); + const handlePaymentResponse = await this.estimateHandlePaymentGas({chainId, version: this.DEFAULT_VERSION, walletAddress: this.address, feeRefund: refundDetails}); handlePaymentEstimate = Number(handlePaymentResponse.data.gas) console.log('handlePaymentEstimate ', handlePaymentEstimate); baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 5d87b2cb1..0a7a193a0 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.8", + "version": "1.0.9", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From 58a807a9069136d0d7601c98bcc4982fc26eb50f Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 20 Sep 2022 12:00:33 +0400 Subject: [PATCH 0141/1247] push build with new version --- lerna.json | 2 +- package.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lerna.json b/lerna.json index e080d064a..82cc456f2 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages/*" ], "useNx": true, - "version": "1.0.9" + "version": "1.0.10" } diff --git a/package.json b/package.json index 3a60babe3..b106a1659 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.7.5", + "nx": "^14.7.6", "prettier": "2.7.1", "ts-node": "^10.9.1" }, diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 924c7fcbe..4faa6b837 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.9", + "version": "1.0.10", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 31b394e4e..a6cb9543c 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.9", + "version": "1.0.10", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 252ea916c..1052cd45d 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.9", + "version": "1.0.10", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index e24fc2811..438ed48a7 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.9", + "version": "1.0.10", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 4ddc710e5..2845ede2d 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.9", + "version": "1.0.10", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 0a7a193a0..428220850 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.9", + "version": "1.0.10", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From 70d2d66437112c0f88e55ef94379b2d53b483c0c Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 21 Sep 2022 13:48:31 +0400 Subject: [PATCH 0142/1247] updated smart contract for version 1.0.1 + publish 1.0.11 --- lerna.json | 2 +- package.json | 2 +- packages/core-types/package.json | 2 +- packages/core-types/src/contracts/EntryPointContract.ts | 3 +-- packages/core-types/src/types.ts | 8 +++----- packages/ethers-lib/contracts/V1.0.0.sol | 4 ++-- packages/ethers-lib/contracts/V1.0.1.sol | 4 ++-- packages/ethers-lib/package.json | 4 ++-- .../EntryPointContract/v1.0.0/EntryPointEthersContract.ts | 8 ++------ .../EntryPointContract/v1.0.1/EntryPointEthersContract.ts | 8 ++------ packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- 14 files changed, 21 insertions(+), 32 deletions(-) diff --git a/lerna.json b/lerna.json index 82cc456f2..6c4c63e9f 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages/*" ], "useNx": true, - "version": "1.0.10" + "version": "1.0.11" } diff --git a/package.json b/package.json index b106a1659..2b0041825 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.7.6", + "nx": "^14.7.8", "prettier": "2.7.1", "ts-node": "^10.9.1" }, diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 4faa6b837..7cd530ce0 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.10", + "version": "1.0.11", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/core-types/src/contracts/EntryPointContract.ts b/packages/core-types/src/contracts/EntryPointContract.ts index a9818fa85..cf3e96079 100644 --- a/packages/core-types/src/contracts/EntryPointContract.ts +++ b/packages/core-types/src/contracts/EntryPointContract.ts @@ -5,7 +5,6 @@ import { Contract } from '@ethersproject/contracts' export interface EntryPointContract { getContract(): Contract handleOps(userOperations: UserOperation[], beneficiary: string): Promise - simulateValidation(userOperation: UserOperation): Promise + simulateValidation(userOperation: UserOperation, offChainSigCheck: boolean): Promise getRequestId(userOperation: UserOperation): Promise - getSenderAddress(initCode: string, salt: number): Promise } diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 5354f467d..b41921806 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -20,19 +20,17 @@ export interface RelayResponse { error?: string connectionUrl?: string } - export interface UserOperation { sender: string nonce: number initCode: string callData: string - callGas: number - verificationGas: number + callGasLimit: number + verificationGasLimit: number preVerificationGas: number maxFeePerGas: number maxPriorityFeePerGas: number - paymaster: string - paymasterData: string + paymasterAndData: string signature: string } diff --git a/packages/ethers-lib/contracts/V1.0.0.sol b/packages/ethers-lib/contracts/V1.0.0.sol index 319711979..a8805019f 100644 --- a/packages/ethers-lib/contracts/V1.0.0.sol +++ b/packages/ethers-lib/contracts/V1.0.0.sol @@ -6,7 +6,7 @@ import { WalletFactory } from "scw-contracts-v1.0.0/contracts/smart-contract-wal import { SmartWallet } from "scw-contracts-v1.0.0/contracts/smart-contract-wallet/SmartWallet.sol"; import { MultiSend } from "scw-contracts-v1.0.0/contracts/smart-contract-wallet/libs/MultiSend.sol"; import { MultiSendCallOnly } from "scw-contracts-v1.0.0/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; -import { EntryPoint } from "scw-contracts-v1.0.0/contracts/references/aa-4337/EntryPoint.sol"; +import { EntryPoint } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/aa-4337/core/EntryPoint.sol"; contract SmartWalletFactoryContract_v1_0_0 is WalletFactory { constructor(address _defaultImpl) WalletFactory(_defaultImpl){} @@ -15,6 +15,6 @@ contract SmartWalletContract_v1_0_0 is SmartWallet {} contract MultiSendContract_v1_0_0 is MultiSend {} contract MultiSendCallOnlyContract_v1_0_0 is MultiSendCallOnly {} contract EntryPointContract_v1_0_0 is EntryPoint { - constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} + constructor(uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_paymasterStake, _unstakeDelaySec){} } diff --git a/packages/ethers-lib/contracts/V1.0.1.sol b/packages/ethers-lib/contracts/V1.0.1.sol index 6af7011d9..5c6f7479a 100644 --- a/packages/ethers-lib/contracts/V1.0.1.sol +++ b/packages/ethers-lib/contracts/V1.0.1.sol @@ -6,7 +6,7 @@ import { WalletFactory } from "scw-contracts-v1.0.1/contracts/smart-contract-wal import { SmartWallet } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/SmartWallet.sol"; import { MultiSend } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/libs/MultiSend.sol"; import { MultiSendCallOnly } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/libs/MultiSendCallOnly.sol"; -import { EntryPoint } from "scw-contracts-v1.0.1/contracts/references/aa-4337/EntryPoint.sol"; +import { EntryPoint } from "scw-contracts-v1.0.1/contracts/smart-contract-wallet/aa-4337/core/EntryPoint.sol"; contract SmartWalletFactoryContract_v1_0_1 is WalletFactory { constructor(address _defaultImpl) WalletFactory(_defaultImpl){} @@ -15,6 +15,6 @@ contract SmartWalletContract_v1_0_1 is SmartWallet {} contract MultiSendContract_v1_0_1 is MultiSend {} contract MultiSendCallOnlyContract_v1_0_1 is MultiSendCallOnly {} contract EntryPointContract_v1_0_1 is EntryPoint { - constructor(address _create2factory, uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_create2factory, _paymasterStake, _unstakeDelaySec){} + constructor(uint _paymasterStake, uint32 _unstakeDelaySec) EntryPoint(_paymasterStake, _unstakeDelaySec){} } diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index a6cb9543c..bd1b15fa4 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.10", + "version": "1.0.11", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -47,7 +47,7 @@ "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0", "scw-contracts-v1.0.0": "npm:scw-contracts@1.0.0", - "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.5" + "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.7" }, "peerDependencies": { "ethers": "^5.5.3" diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts index d898e96e1..cdba18c2d 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts @@ -17,8 +17,8 @@ class EntryPointEthersContract implements EntryPointContract { return this.contract } - async simulateValidation(userOperation: UserOperation): Promise { - const resultSet = await this.contract.simulateValidation(userOperation) + async simulateValidation(userOperation: UserOperation, offChainSigCheck: boolean): Promise { + const resultSet = await this.contract.simulateValidation(userOperation, offChainSigCheck) return toTxResult(resultSet) } @@ -33,10 +33,6 @@ class EntryPointEthersContract implements EntryPointContract { const resultSet = await this.contract.handleOps(userOperations, beneficiary) return toTxResult(resultSet) } - - async getSenderAddress(initCode: string, salt: number): Promise { - return this.contract.getSenderAddress(initCode, salt) - } } export default EntryPointEthersContract diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts index 2c438a94f..d194c798d 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts @@ -17,8 +17,8 @@ class EntryPointEthersContract implements EntryPointContract { return this.contract } - async simulateValidation(userOperation: UserOperation): Promise { - const resultSet = await this.contract.simulateValidation(userOperation) + async simulateValidation(userOperation: UserOperation, offChainSigCheck: boolean): Promise { + const resultSet = await this.contract.simulateValidation(userOperation, offChainSigCheck) return toTxResult(resultSet) } @@ -33,10 +33,6 @@ class EntryPointEthersContract implements EntryPointContract { const resultSet = await this.contract.handleOps(userOperations, beneficiary) return toTxResult(resultSet) } - - async getSenderAddress(initCode: string, salt: number): Promise { - return this.contract.getSenderAddress(initCode, salt) - } } export default EntryPointEthersContract diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 1052cd45d..04116b65c 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.10", + "version": "1.0.11", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 438ed48a7..17a962d43 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.10", + "version": "1.0.11", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 2845ede2d..8224b7a21 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.10", + "version": "1.0.11", "description": "Biconomy Client SDK types", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 428220850..5afb70754 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.10", + "version": "1.0.11", "description": "utils for sending all transaction legos", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", From 4321532492178b2e5345264cfbc609c6dbbc98fd Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 22 Sep 2022 14:46:10 +0400 Subject: [PATCH 0143/1247] BSDK-71-init-cleanup --- .../src/contracts/SmartWalletContract.ts | 2 - .../smart-contract-wallet/SmartWallet.sol | 507 ---------------- .../SmartWalletGasEstimation.sol | 574 ------------------ .../SmartWalletNoAuth.sol | 67 -- .../storage/WalletStorage.sol | 48 -- .../smart-contract-wallet/test/TestToken.sol | 18 - .../v1.0.0/SmartWalletContractEthers.ts | 2 +- .../v1.0.1/SmartWalletContractEthers.ts | 1 - packages/node-client/src/INodeClient.ts | 90 ++- packages/relayer/README.md | 2 +- packages/relayer/src/local-relayer.ts | 1 - packages/relayer/src/rest-relayer.ts | 1 - packages/smart-account/src/SmartAccount.ts | 3 +- packages/smart-account/src/types.ts | 17 +- packages/transactions/src/execution.ts | 2 - packages/transactions/src/multisend.ts | 2 - 16 files changed, 89 insertions(+), 1248 deletions(-) delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletGasEstimation.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletNoAuth.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol delete mode 100644 packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index 3a600dd9a..f3535202c 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -4,8 +4,6 @@ import { BigNumber } from '@ethersproject/bignumber' import { Interface } from '@ethersproject/abi' import { Contract } from '@ethersproject/contracts' -// TODO -// Rename export interface SmartWalletContract { getAddress(): string getContract(): Contract diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol deleted file mode 100644 index 1b16dfe06..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWallet.sol +++ /dev/null @@ -1,507 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -//TODO -//review Base licensing -//https://spdx.org/licenses/ - -import "./libs/LibAddress.sol"; -import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import "./IWallet.sol"; -import "./common/Singleton.sol"; -import "./storage/WalletStorage.sol"; -import "./base/ModuleManager.sol"; -import "./base/FallbackManager.sol"; -import "./common/SignatureDecoder.sol"; -// import "./common/Hooks.sol"; -import "./common/SecuredTokenTransfer.sol"; -import "./interfaces/ISignatureValidator.sol"; -import "./interfaces/IERC165.sol"; -import "./libs/ECDSA.sol"; - -// Hooks not made a base yet -contract SmartWallet is - Singleton, - IWallet, - IERC165, - WalletStorage, - ModuleManager, - SignatureDecoder, - SecuredTokenTransfer, - ISignatureValidatorConstants, - FallbackManager, - Initializable - { - using ECDSA for bytes32; - using LibAddress for address; - - event ImplementationUpdated(address newImplementation); - event ExecutionFailure(bytes32 txHash, uint256 payment); - event ExecutionSuccess(bytes32 txHash, uint256 payment); - event EntryPointChanged(address oldEntryPoint, address newEntryPoint); - event EOAChanged(address indexed _scw, address indexed _oldEOA, address indexed _newEOA); - - // modifiers - // onlyOwner - /** - * @notice Throws if the sender is not an the owner. - */ - modifier onlyOwner { - require(msg.sender == owner, "Smart Account:: Sender is not authorized"); - _; - } - - // onlyOwner OR self - modifier mixedAuth { - require(msg.sender == owner || msg.sender == address(this),"Only owner or self"); - _; - } - - // @notice authorized modifier (onlySelf) is already inherited - - // Setters - - function setOwner(address _newOwner) external mixedAuth { - require(_newOwner != address(0), "Smart Account:: new Signatory address cannot be zero"); - owner = _newOwner; - emit EOAChanged(address(this),owner,_newOwner); - } - - /** - * @notice Updates the implementation of the base wallet - * @param _implementation New wallet implementation - */ - function updateImplementation(address _implementation) external mixedAuth { - require(_implementation.isContract(), "INVALID_IMPLEMENTATION"); - _setImplementation(_implementation); - emit ImplementationUpdated(_implementation); - } - - function updateEntryPoint(address _entryPoint) external mixedAuth { - require(_entryPoint != address(0), "Smart Account:: new entry point address cannot be zero"); - emit EntryPointChanged(entryPoint, _entryPoint); - entryPoint = _entryPoint; - } - - // Getters - - function domainSeparator() public view returns (bytes32) { - return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this)); - } - - /// @dev Returns the chain id used by this contract. - function getChainId() public view returns (uint256) { - uint256 id; - // solhint-disable-next-line no-inline-assembly - assembly { - id := chainid() - } - return id; - } - - /** - * @dev returns a value from the nonces 2d mapping - * @param batchId : the key of the user's batch being queried - * @return nonce : the number of transaction made within said batch - */ - function getNonce(uint256 batchId) - public view - returns (uint256) { - return nonces[batchId]; - } - - // Initialize / Setup - // Used to setup - // i. owner ii. entry point iii. handlers - function init(address _owner, address _entryPoint, address _handler) public initializer { - require(owner == address(0), "Already initialized"); - require(entryPoint == address(0), "Already initialized"); - require(_owner != address(0),"Invalid owner"); - require(_entryPoint != address(0), "Invalid Entrypoint"); - owner = _owner; - entryPoint = _entryPoint; - if (_handler != address(0)) internalSetFallbackHandler(_handler); - setupModules(address(0), bytes("")); - } - - /** - * @dev Returns the largest of two numbers. - */ - function max(uint256 a, uint256 b) internal pure returns (uint256) { - return a >= b ? a : b; - } - - // @review 2D nonces and args as default batchId 0 is always used - // TODO : Update description - // TODO : Add batchId and update in test cases, utils etc - // Gnosis style transaction with optional repay in native tokens OR ERC20 - /// @dev Allows to execute a Safe transaction confirmed by required number of owners and then pays the account that submitted the transaction. - /// Note: The fees are always transferred, even if the user transaction fails. - /// @param _tx Wallet transaction - /// @param batchId batchId key for 2D nonces - /// @param refundInfo Required information for gas refunds - /// @param signatures Packed signature data ({bytes32 r}{bytes32 s}{uint8 v}) - function execTransaction( - Transaction memory _tx, - uint256 batchId, - FeeRefund memory refundInfo, - bytes memory signatures - ) public payable virtual returns (bool success) { - // initial gas = 21k + non_zero_bytes * 16 + zero_bytes * 4 - // ~= 21k + calldata.length * [1/3 * 16 + 2/3 * 4] - uint256 startGas = gasleft() + 21000 + msg.data.length * 8; - //console.log("init %s", 21000 + msg.data.length * 8); - bytes32 txHash; - // Use scope here to limit variable lifetime and prevent `stack too deep` errors - { - bytes memory txHashData = - encodeTransactionData( - // Transaction info - _tx, - // Payment info - refundInfo, - // Signature info - nonces[batchId] - ); - // Increase nonce and execute transaction. - // Default space aka batchId is 0 - nonces[batchId]++; - txHash = keccak256(txHashData); - checkSignatures(txHash, txHashData, signatures); - } - - - // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500) - // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150 - require(gasleft() >= max((_tx.targetTxGas * 64) / 63,_tx.targetTxGas + 2500) + 500, "BSA010"); - // Use scope here to limit variable lifetime and prevent `stack too deep` errors - { - // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than targetTxGas) - // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than targetTxGas - success = execute(_tx.to, _tx.value, _tx.data, _tx.operation, refundInfo.gasPrice == 0 ? (gasleft() - 2500) : _tx.targetTxGas); - // If no targetTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful - // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert - require(success || _tx.targetTxGas != 0 || refundInfo.gasPrice != 0, "BSA013"); - // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls - uint256 payment = 0; - // uint256 extraGas; - if (refundInfo.gasPrice > 0) { - //console.log("sent %s", startGas - gasleft()); - // extraGas = gasleft(); - payment = handlePayment(startGas - gasleft(), refundInfo.baseGas, refundInfo.gasPrice, refundInfo.tokenGasPriceFactor, refundInfo.gasToken, refundInfo.refundReceiver); - } - if (success) emit ExecutionSuccess(txHash, payment); - else emit ExecutionFailure(txHash, payment); - // extraGas = extraGas - gasleft(); - //console.log("extra gas %s ", extraGas); - } - } - - function handlePayment( - uint256 gasUsed, - uint256 baseGas, - uint256 gasPrice, - uint256 tokenGasPriceFactor, - address gasToken, - address payable refundReceiver - ) private returns (uint256 payment) { - // uint256 startGas = gasleft(); - // solhint-disable-next-line avoid-tx-origin - address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver; - if (gasToken == address(0)) { - // For ETH we will only adjust the gas price to not be higher than the actual used gas price - payment = (gasUsed + baseGas) * (gasPrice < tx.gasprice ? gasPrice : tx.gasprice); - // Review: low level call value vs transfer - (bool success,) = receiver.call{value: payment}(""); - require(success, "BSA011"); - } else { - payment = (gasUsed + baseGas) * (gasPrice) / (tokenGasPriceFactor); - require(transferToken(gasToken, receiver, payment), "BSA012"); - } - // uint256 requiredGas = startGas - gasleft(); - //console.log("hp %s", requiredGas); - } - - function handlePaymentRevert( - uint256 gasUsed, - uint256 baseGas, - uint256 gasPrice, - uint256 tokenGasPriceFactor, - address gasToken, - address payable refundReceiver - ) external returns (uint256 payment) { - uint256 startGas = gasleft(); - // solhint-disable-next-line avoid-tx-origin - address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver; - if (gasToken == address(0)) { - // For ETH we will only adjust the gas price to not be higher than the actual used gas price - payment = (gasUsed + baseGas) * (gasPrice < tx.gasprice ? gasPrice : tx.gasprice); - // Review: low level call value vs transfer - (bool success,) = receiver.call{value: payment}(""); - require(success, "BSA011"); - } else { - payment = (gasUsed + baseGas) * (gasPrice) / (tokenGasPriceFactor); - require(transferToken(gasToken, receiver, payment), "BSA012"); - } - uint256 requiredGas = startGas - gasleft(); - //console.log("hpr %s", requiredGas); - // Convert response to string and return via error message - revert(string(abi.encodePacked(requiredGas))); - } - - // @review - /** - * @dev Checks whether the signature provided is valid for the provided data, hash. Will revert otherwise. - * @param dataHash Hash of the data (could be either a message hash or transaction hash) - * @param signatures Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash. - */ - function checkSignatures( - bytes32 dataHash, - bytes memory data, - bytes memory signatures - ) public view virtual { - uint8 v; - bytes32 r; - bytes32 s; - uint256 i = 0; - address _signer; - (v, r, s) = signatureSplit(signatures, i); - // review if necessary v = 1 - // review sig verification from other wallets - if(v == 0) { - // If v is 0 then it is a contract signature - // When handling contract signatures the address of the contract is encoded into r - _signer = address(uint160(uint256(r))); - - // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes - // This check is not completely accurate, since it is possible that more signatures than the threshold are send. - // Here we only check that the pointer is not pointing inside the part that is being processed - require(uint256(s) >= uint256(1) * 65, "BSA021"); - - // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes) - require(uint256(s) + 32 <= signatures.length, "BSA022"); - - // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length - uint256 contractSignatureLen; - // solhint-disable-next-line no-inline-assembly - assembly { - contractSignatureLen := mload(add(add(signatures, s), 0x20)) - } - require(uint256(s) + 32 + contractSignatureLen <= signatures.length, "BSA023"); - - // Check signature - bytes memory contractSignature; - // solhint-disable-next-line no-inline-assembly - assembly { - // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s - contractSignature := add(add(signatures, s), 0x20) - } - require(ISignatureValidator(_signer).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, "BSA024"); - } - else if(v > 30) { - // If v > 30 then default va (27,28) has been adjusted for eth_sign flow - // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover - _signer = ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", dataHash)), v - 4, r, s); - require(_signer == owner, "INVALID_SIGNATURE"); - } else { - _signer = ecrecover(dataHash, v, r, s); - require(_signer == owner, "INVALID_SIGNATURE"); - } - } - - /// review necessity for this method for estimating execute call - /// @dev Allows to estimate a transaction. - /// This method is only meant for estimation purpose, therefore the call will always revert and encode the result in the revert data. - /// Since the `estimateGas` function includes refunds, call this method to get an estimated of the costs that are deducted from the safe with `execTransaction` - /// @param to Destination address of Safe transaction. - /// @param value Ether value of transaction. - /// @param data Data payload of transaction. - /// @param operation Operation type of transaction. - /// @return Estimate without refunds and overhead fees (base transaction and payload data gas costs). - function requiredTxGas( - address to, - uint256 value, - bytes calldata data, - Enum.Operation operation - ) external returns (uint256) { - uint256 startGas = gasleft(); - // We don't provide an error message here, as we use it to return the estimate - require(execute(to, value, data, operation, gasleft())); - uint256 requiredGas = startGas - gasleft(); - // Convert response to string and return via error message - revert(string(abi.encodePacked(requiredGas))); - } - - - /// @dev Returns hash to be signed by owner. - /// @param to Destination address. - /// @param value Ether value. - /// @param data Data payload. - /// @param operation Operation type. - /// @param targetTxGas Fas that should be used for the safe transaction. - /// @param baseGas Gas costs for data used to trigger the safe transaction. - /// @param gasPrice Maximum gas price that should be used for this transaction. - /// @param gasToken Token address (or 0 if ETH) that is used for the payment. - /// @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin). - /// @param _nonce Transaction nonce. - /// @return Transaction hash. - function getTransactionHash( - address to, - uint256 value, - bytes calldata data, - Enum.Operation operation, - uint256 targetTxGas, - uint256 baseGas, - uint256 gasPrice, - uint256 tokenGasPriceFactor, - address gasToken, - address payable refundReceiver, - uint256 _nonce - ) public view returns (bytes32) { - Transaction memory _tx = Transaction({ - to: to, - value: value, - data: data, - operation: operation, - targetTxGas: targetTxGas - }); - FeeRefund memory refundInfo = FeeRefund({ - baseGas: baseGas, - gasPrice: gasPrice, - tokenGasPriceFactor: tokenGasPriceFactor, - gasToken: gasToken, - refundReceiver: refundReceiver - }); - return keccak256(encodeTransactionData(_tx, refundInfo, _nonce)); - } - - - /// @dev Returns the bytes that are hashed to be signed by owner. - /// @param _tx Wallet transaction - /// @param refundInfo Required information for gas refunds - /// @param _nonce Transaction nonce. - /// @return Transaction hash bytes. - function encodeTransactionData( - Transaction memory _tx, - FeeRefund memory refundInfo, - uint256 _nonce - ) public view returns (bytes memory) { - bytes32 safeTxHash = - keccak256( - abi.encode( - WALLET_TX_TYPEHASH, - _tx.to, - _tx.value, - keccak256(_tx.data), - _tx.operation, - _tx.targetTxGas, - refundInfo.baseGas, - refundInfo.gasPrice, - refundInfo.gasToken, - refundInfo.refundReceiver, - _nonce - ) - ); - return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash); - } - - // Extra Utils - - // Review: low level call value vs transfer // dest.transfer(amount); - function transfer(address payable dest, uint amount) external onlyOwner { - require(dest != address(0), "this action will burn your funds"); - (bool success,) = dest.call{value:amount}(""); - require(success,"transfer failed"); - } - - function pullTokens(address token, address dest, uint256 amount) external onlyOwner { - IERC20 tokenContract = IERC20(token); - SafeERC20.safeTransfer(tokenContract, dest, amount); - } - - function exec(address dest, uint value, bytes calldata func) external onlyOwner{ - _call(dest, value, func); - } - - function execBatch(address[] calldata dest, bytes[] calldata func) external onlyOwner{ - require(dest.length == func.length, "wrong array lengths"); - for (uint i = 0; i < dest.length;) { - _call(dest[i], 0, func[i]); - unchecked { - ++i; - } - } - } - - // AA implementation - function _call(address sender, uint value, bytes memory data) internal { - // @review linter - (bool success, bytes memory result) = sender.call{value : value}(data); - if (!success) { - // solhint-disable-next-line no-inline-assembly - assembly { - revert(add(result,32), mload(result)) - } - } - } - - function _requireFromEntryPoint() internal view { - require(msg.sender == address(entryPoint), "wallet: not from EntryPoint"); - } - - //called by entryPoint, only after validateUserOp succeeded. - function execFromEntryPoint(address dest, uint value, bytes calldata func) external { - _requireFromEntryPoint(); - _call(dest, value, func); - } - - function validateUserOp(UserOperation calldata userOp, bytes32 requestId, uint requiredPrefund) external override { - _requireFromEntryPoint(); - _validateSignature(userOp, requestId); - //during construction, the "nonce" field hold the salt. - // if we assert it is zero, then we allow only a single wallet per owner. - if (userOp.initCode.length == 0) { - _validateAndUpdateNonce(userOp); - } - _payPrefund(requiredPrefund); - } - - // review nonce conflict with AA userOp nonce - // userOp can omit nonce or have batchId as well! - function _validateAndUpdateNonce(UserOperation calldata userOp) internal { - require(nonces[0]++ == userOp.nonce, "wallet: invalid nonce"); - } - - function _payPrefund(uint requiredPrefund) internal { - if (requiredPrefund != 0) { - //pay required prefund. make sure NOT to use the "gas" opcode, which is banned during validateUserOp - // (and used by default by the "call") - // @review linter - (bool success,) = payable(msg.sender).call{value : requiredPrefund, gas : type(uint).max}(""); - (success); - //ignore failure (its EntryPoint's job to verify, not wallet.) - } - } - - function _validateSignature(UserOperation calldata userOp, bytes32 requestId) internal view { - bytes32 hash = requestId.toEthSignedMessageHash(); - require(owner == hash.recover(userOp.signature), "wallet: wrong signature"); - } - - - /** - * @notice Query if a contract implements an interface - * @param interfaceId The interface identifier, as specified in ERC165 - * @return `true` if the contract implements `_interfaceID` - */ - function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) { - return interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7 - } - - // Review - // withdrawDepositTo - // addDeposit - // getDeposit -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletGasEstimation.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletGasEstimation.sol deleted file mode 100644 index 88e465988..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletGasEstimation.sol +++ /dev/null @@ -1,574 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -//TODO -//review Base licensing -//https://spdx.org/licenses/ - -import "./libs/LibAddress.sol"; -import "@openzeppelin/contracts/proxy/utils/Initializable.sol"; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import "./IWallet.sol"; -import "./common/Singleton.sol"; -import "./storage/WalletStorage.sol"; -import "./base/ModuleManager.sol"; -import "./base/FallbackManager.sol"; -import "./common/SignatureDecoder.sol"; -// import "./common/Hooks.sol"; -import "./common/SecuredTokenTransfer.sol"; -import "./interfaces/ISignatureValidator.sol"; -import "./interfaces/IERC165.sol"; -import "./libs/ECDSA.sol"; -// import "hardhat/console.sol"; - -// Hooks not made a base yet -contract SmartWalletGasEstimation is - Singleton, - IWallet, - IERC165, - WalletStorage, - ModuleManager, - SignatureDecoder, - SecuredTokenTransfer, - ISignatureValidatorConstants, - FallbackManager, - Initializable - { - using ECDSA for bytes32; - using LibAddress for address; - - event ImplementationUpdated(address newImplementation); - event ExecutionFailure(bytes32 txHash, uint256 payment); - event ExecutionSuccess(bytes32 txHash, uint256 payment); - event EntryPointChanged(address oldEntryPoint, address newEntryPoint); - event EOAChanged(address indexed _scw, address indexed _oldEOA, address indexed _newEOA); - - // modifiers - // onlyOwner - /** - * @notice Throws if the sender is not an the owner. - */ - modifier onlyOwner { - require(msg.sender == owner, "Smart Account:: Sender is not authorized"); - _; - } - - // onlyOwner OR self - modifier mixedAuth { - require(msg.sender == owner || msg.sender == address(this),"Only owner or self"); - _; - } - - // @notice authorized modifier (onlySelf) is already inherited - - // Setters - - function setOwner(address _newOwner) external mixedAuth { - require(_newOwner != address(0), "Smart Account:: new Signatory address cannot be zero"); - owner = _newOwner; - emit EOAChanged(address(this),owner,_newOwner); - } - - /** - * @notice Updates the implementation of the base wallet - * @param _implementation New wallet implementation - */ - function updateImplementation(address _implementation) external mixedAuth { - require(_implementation.isContract(), "INVALID_IMPLEMENTATION"); - _setImplementation(_implementation); - emit ImplementationUpdated(_implementation); - } - - function updateEntryPoint(address _entryPoint) external mixedAuth { - require(_entryPoint != address(0), "Smart Account:: new entry point address cannot be zero"); - emit EntryPointChanged(entryPoint, _entryPoint); - entryPoint = _entryPoint; - } - - // Getters - - function domainSeparator() public view returns (bytes32) { - return keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, getChainId(), this)); - } - - /// @dev Returns the chain id used by this contract. - function getChainId() public view returns (uint256) { - uint256 id; - // solhint-disable-next-line no-inline-assembly - assembly { - id := chainid() - } - return id; - } - - /** - * @dev returns a value from the nonces 2d mapping - * @param batchId : the key of the user's batch being queried - * @return nonce : the number of transaction made within said batch - */ - function getNonce(uint256 batchId) - public view - returns (uint256) { - return nonces[batchId]; - } - - // Initialize / Setup - // Used to setup - // i. owner ii. entry point iii. handlers - function init(address _owner, address _entryPoint, address _handler) public initializer { - require(owner == address(0), "Already initialized"); - require(entryPoint == address(0), "Already initialized"); - require(_owner != address(0),"Invalid owner"); - require(_entryPoint != address(0), "Invalid Entrypoint"); - owner = _owner; - entryPoint = _entryPoint; - if (_handler != address(0)) internalSetFallbackHandler(_handler); - setupModules(address(0), bytes("")); - } - - /** - * @dev Returns the largest of two numbers. - */ - function max(uint256 a, uint256 b) internal pure returns (uint256) { - return a >= b ? a : b; - } - - // Gnosis style transaction with optional repay in native tokens OR ERC20 - /// @dev Allows to execute a Safe transaction confirmed by required number of owners and then pays the account that submitted the transaction. - /// Note: The fees are always transferred, even if the user transaction fails. - /// @param _tx Wallet transaction - /// @param batchId batchId key for 2D nonces - /// @param refundInfo Required information for gas refunds - function execTransactionEstimation( - Transaction memory _tx, - uint256 batchId, - FeeRefund memory refundInfo - ) public payable virtual returns (bool success) { - // initial gas = 21k + non_zero_bytes * 16 + zero_bytes * 4 - // ~= 21k + calldata.length * [1/3 * 16 + 2/3 * 4] - uint256 startGas = gasleft() + 21000 + msg.data.length * 8; - //console.log("init %s", 21000 + msg.data.length * 8); - bytes32 txHash; - // Use scope here to limit variable lifetime and prevent `stack too deep` errors - { - bytes memory txHashData = - encodeTransactionData( - // Transaction info - _tx, - // Payment info - refundInfo, - // Signature info - nonces[batchId] - ); - // Increase nonce and execute transaction. - // Default space aka batchId is 0 - nonces[batchId]++; - txHash = keccak256(txHashData); - // this is not the one with fake sig verification - // checkSignatures(txHash, txHashData, signatures); - } - - - // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500) - // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150 - require(gasleft() >= max((_tx.targetTxGas * 64) / 63,_tx.targetTxGas + 2500) + 500, "BSA010"); - // Use scope here to limit variable lifetime and prevent `stack too deep` errors - { - // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than targetTxGas) - // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than targetTxGas - success = execute(_tx.to, _tx.value, _tx.data, _tx.operation, refundInfo.gasPrice == 0 ? (gasleft() - 2500) : _tx.targetTxGas); - // If no targetTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful - // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert - require(success || _tx.targetTxGas != 0 || refundInfo.gasPrice != 0, "BSA013"); - // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls - uint256 payment = 0; - // uint256 extraGas; - // We may send gasPrice 0 - if (refundInfo.gasPrice > 0) { - //console.log("sent %s", startGas - gasleft()); - // extraGas = gasleft(); - payment = handlePayment(startGas - gasleft(), refundInfo.baseGas, refundInfo.gasPrice, refundInfo.tokenGasPriceFactor, refundInfo.gasToken, refundInfo.refundReceiver); - } - if (success) emit ExecutionSuccess(txHash, payment); - else emit ExecutionFailure(txHash, payment); - // extraGas = extraGas - gasleft(); - //console.log("extra gas %s ", extraGas); - uint256 requiredGas = startGas - gasleft(); - // Convert response to string and return via error message - revert(string(abi.encodePacked(requiredGas))); - } - } - - // @review 2D nonces and args as default batchId 0 is always used - // TODO : Update description - // TODO : Add batchId and update in test cases, utils etc - // Gnosis style transaction with optional repay in native tokens OR ERC20 - /// @dev Allows to execute a Safe transaction confirmed by required number of owners and then pays the account that submitted the transaction. - /// Note: The fees are always transferred, even if the user transaction fails. - /// @param _tx Wallet transaction - /// @param batchId batchId key for 2D nonces - /// @param refundInfo Required information for gas refunds - /// @param signatures Packed signature data ({bytes32 r}{bytes32 s}{uint8 v}) - function execTransaction( - Transaction memory _tx, - uint256 batchId, - FeeRefund memory refundInfo, - bytes memory signatures - ) public payable virtual returns (bool success) { - // initial gas = 21k + non_zero_bytes * 16 + zero_bytes * 4 - // ~= 21k + calldata.length * [1/3 * 16 + 2/3 * 4] - uint256 startGas = gasleft() + 21000 + msg.data.length * 8; - //console.log("init %s", 21000 + msg.data.length * 8); - bytes32 txHash; - // Use scope here to limit variable lifetime and prevent `stack too deep` errors - { - bytes memory txHashData = - encodeTransactionData( - // Transaction info - _tx, - // Payment info - refundInfo, - // Signature info - nonces[batchId] - ); - // Increase nonce and execute transaction. - // Default space aka batchId is 0 - nonces[batchId]++; - txHash = keccak256(txHashData); - checkSignatures(txHash, txHashData, signatures); - } - - - // We require some gas to emit the events (at least 2500) after the execution and some to perform code until the execution (500) - // We also include the 1/64 in the check that is not send along with a call to counteract potential shortings because of EIP-150 - require(gasleft() >= max((_tx.targetTxGas * 64) / 63,_tx.targetTxGas + 2500) + 500, "BSA010"); - // Use scope here to limit variable lifetime and prevent `stack too deep` errors - { - // If the gasPrice is 0 we assume that nearly all available gas can be used (it is always more than targetTxGas) - // We only substract 2500 (compared to the 3000 before) to ensure that the amount passed is still higher than targetTxGas - success = execute(_tx.to, _tx.value, _tx.data, _tx.operation, refundInfo.gasPrice == 0 ? (gasleft() - 2500) : _tx.targetTxGas); - // If no targetTxGas and no gasPrice was set (e.g. both are 0), then the internal tx is required to be successful - // This makes it possible to use `estimateGas` without issues, as it searches for the minimum gas where the tx doesn't revert - require(success || _tx.targetTxGas != 0 || refundInfo.gasPrice != 0, "BSA013"); - // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls - uint256 payment = 0; - // uint256 extraGas; - if (refundInfo.gasPrice > 0) { - //console.log("sent %s", startGas - gasleft()); - // extraGas = gasleft(); - payment = handlePayment(startGas - gasleft(), refundInfo.baseGas, refundInfo.gasPrice, refundInfo.tokenGasPriceFactor, refundInfo.gasToken, refundInfo.refundReceiver); - } - if (success) emit ExecutionSuccess(txHash, payment); - else emit ExecutionFailure(txHash, payment); - // extraGas = extraGas - gasleft(); - //console.log("extra gas %s ", extraGas); - } - } - - function handlePayment( - uint256 gasUsed, - uint256 baseGas, - uint256 gasPrice, - uint256 tokenGasPriceFactor, - address gasToken, - address payable refundReceiver - ) private returns (uint256 payment) { - // uint256 startGas = gasleft(); - // solhint-disable-next-line avoid-tx-origin - address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver; - if (gasToken == address(0)) { - // For ETH we will only adjust the gas price to not be higher than the actual used gas price - payment = (gasUsed + baseGas) * (gasPrice < tx.gasprice ? gasPrice : tx.gasprice); - // Review: low level call value vs transfer - (bool success,) = receiver.call{value: payment}(""); - require(success, "BSA011"); - } else { - payment = (gasUsed + baseGas) * (gasPrice) / (tokenGasPriceFactor); - require(transferToken(gasToken, receiver, payment), "BSA012"); - } - // uint256 requiredGas = startGas - gasleft(); - //console.log("hp %s", requiredGas); - } - - function handlePaymentRevert( - uint256 gasUsed, - uint256 baseGas, - uint256 gasPrice, - uint256 tokenGasPriceFactor, - address gasToken, - address payable refundReceiver - ) external returns (uint256 payment) { - uint256 startGas = gasleft(); - // solhint-disable-next-line avoid-tx-origin - address payable receiver = refundReceiver == address(0) ? payable(tx.origin) : refundReceiver; - if (gasToken == address(0)) { - // For ETH we will only adjust the gas price to not be higher than the actual used gas price - payment = (gasUsed + baseGas) * (gasPrice < tx.gasprice ? gasPrice : tx.gasprice); - // Review: low level call value vs transfer - (bool success,) = receiver.call{value: payment}(""); - require(success, "BSA011"); - } else { - payment = (gasUsed + baseGas) * (gasPrice) / (tokenGasPriceFactor); - require(transferToken(gasToken, receiver, payment), "BSA012"); - } - uint256 requiredGas = startGas - gasleft(); - //console.log("hpr %s", requiredGas); - // Convert response to string and return via error message - revert(string(abi.encodePacked(requiredGas))); - } - - // @review - /** - * @dev Checks whether the signature provided is valid for the provided data, hash. Will revert otherwise. - * @param dataHash Hash of the data (could be either a message hash or transaction hash) - * @param signatures Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash. - */ - function checkSignatures( - bytes32 dataHash, - bytes memory data, - bytes memory signatures - ) public view { - uint8 v; - bytes32 r; - bytes32 s; - uint256 i = 0; - address _signer; - (v, r, s) = signatureSplit(signatures, i); - // review if necessary v = 1 - // review sig verification from other wallets - if(v == 0) { - // If v is 0 then it is a contract signature - // When handling contract signatures the address of the contract is encoded into r - _signer = address(uint160(uint256(r))); - - // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes - // This check is not completely accurate, since it is possible that more signatures than the threshold are send. - // Here we only check that the pointer is not pointing inside the part that is being processed - require(uint256(s) >= uint256(1) * 65, "BSA021"); - - // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes) - require(uint256(s) + 32 <= signatures.length, "BSA022"); - - // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length - uint256 contractSignatureLen; - // solhint-disable-next-line no-inline-assembly - assembly { - contractSignatureLen := mload(add(add(signatures, s), 0x20)) - } - require(uint256(s) + 32 + contractSignatureLen <= signatures.length, "BSA023"); - - // Check signature - bytes memory contractSignature; - // solhint-disable-next-line no-inline-assembly - assembly { - // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s - contractSignature := add(add(signatures, s), 0x20) - } - require(ISignatureValidator(_signer).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, "BSA024"); - } - else if(v > 30) { - // If v > 30 then default va (27,28) has been adjusted for eth_sign flow - // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover - _signer = ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", dataHash)), v - 4, r, s); - require(_signer == owner, "INVALID_SIGNATURE"); - } else { - _signer = ecrecover(dataHash, v, r, s); - require(_signer == owner, "INVALID_SIGNATURE"); - } - } - - /// review necessity for this method for estimating execute call - /// @dev Allows to estimate a transaction. - /// This method is only meant for estimation purpose, therefore the call will always revert and encode the result in the revert data. - /// Since the `estimateGas` function includes refunds, call this method to get an estimated of the costs that are deducted from the safe with `execTransaction` - /// @param to Destination address of Safe transaction. - /// @param value Ether value of transaction. - /// @param data Data payload of transaction. - /// @param operation Operation type of transaction. - /// @return Estimate without refunds and overhead fees (base transaction and payload data gas costs). - function requiredTxGas( - address to, - uint256 value, - bytes calldata data, - Enum.Operation operation - ) external returns (uint256) { - uint256 startGas = gasleft(); - // We don't provide an error message here, as we use it to return the estimate - require(execute(to, value, data, operation, gasleft())); - uint256 requiredGas = startGas - gasleft(); - // Convert response to string and return via error message - revert(string(abi.encodePacked(requiredGas))); - } - - - /// @dev Returns hash to be signed by owner. - /// @param to Destination address. - /// @param value Ether value. - /// @param data Data payload. - /// @param operation Operation type. - /// @param targetTxGas Fas that should be used for the safe transaction. - /// @param baseGas Gas costs for data used to trigger the safe transaction. - /// @param gasPrice Maximum gas price that should be used for this transaction. - /// @param gasToken Token address (or 0 if ETH) that is used for the payment. - /// @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin). - /// @param _nonce Transaction nonce. - /// @return Transaction hash. - function getTransactionHash( - address to, - uint256 value, - bytes calldata data, - Enum.Operation operation, - uint256 targetTxGas, - uint256 baseGas, - uint256 gasPrice, - uint256 tokenGasPriceFactor, - address gasToken, - address payable refundReceiver, - uint256 _nonce - ) public view returns (bytes32) { - Transaction memory _tx = Transaction({ - to: to, - value: value, - data: data, - operation: operation, - targetTxGas: targetTxGas - }); - FeeRefund memory refundInfo = FeeRefund({ - baseGas: baseGas, - gasPrice: gasPrice, - tokenGasPriceFactor: tokenGasPriceFactor, - gasToken: gasToken, - refundReceiver: refundReceiver - }); - return keccak256(encodeTransactionData(_tx, refundInfo, _nonce)); - } - - - /// @dev Returns the bytes that are hashed to be signed by owner. - /// @param _tx Wallet transaction - /// @param refundInfo Required information for gas refunds - /// @param _nonce Transaction nonce. - /// @return Transaction hash bytes. - function encodeTransactionData( - Transaction memory _tx, - FeeRefund memory refundInfo, - uint256 _nonce - ) public view returns (bytes memory) { - bytes32 safeTxHash = - keccak256( - abi.encode( - WALLET_TX_TYPEHASH, - _tx.to, - _tx.value, - keccak256(_tx.data), - _tx.operation, - _tx.targetTxGas, - refundInfo.baseGas, - refundInfo.gasPrice, - refundInfo.gasToken, - refundInfo.refundReceiver, - _nonce - ) - ); - return abi.encodePacked(bytes1(0x19), bytes1(0x01), domainSeparator(), safeTxHash); - } - - // Extra Utils - - // Review: low level call value vs transfer // dest.transfer(amount); - function transfer(address payable dest, uint amount) external onlyOwner { - require(dest != address(0), "this action will burn your funds"); - (bool success,) = dest.call{value:amount}(""); - require(success,"transfer failed"); - } - - function pullTokens(address token, address dest, uint256 amount) external onlyOwner { - IERC20 tokenContract = IERC20(token); - SafeERC20.safeTransfer(tokenContract, dest, amount); - } - - function exec(address dest, uint value, bytes calldata func) external onlyOwner{ - _call(dest, value, func); - } - - function execBatch(address[] calldata dest, bytes[] calldata func) external onlyOwner{ - require(dest.length == func.length, "wrong array lengths"); - for (uint i = 0; i < dest.length;) { - _call(dest[i], 0, func[i]); - unchecked { - ++i; - } - } - } - - // AA implementation - function _call(address sender, uint value, bytes memory data) internal { - // @review linter - (bool success, bytes memory result) = sender.call{value : value}(data); - if (!success) { - // solhint-disable-next-line no-inline-assembly - assembly { - revert(add(result,32), mload(result)) - } - } - } - - function _requireFromEntryPoint() internal view { - require(msg.sender == address(entryPoint), "wallet: not from EntryPoint"); - } - - //called by entryPoint, only after validateUserOp succeeded. - function execFromEntryPoint(address dest, uint value, bytes calldata func) external { - _requireFromEntryPoint(); - _call(dest, value, func); - } - - function validateUserOp(UserOperation calldata userOp, bytes32 requestId, uint requiredPrefund) external override { - _requireFromEntryPoint(); - _validateSignature(userOp, requestId); - //during construction, the "nonce" field hold the salt. - // if we assert it is zero, then we allow only a single wallet per owner. - if (userOp.initCode.length == 0) { - _validateAndUpdateNonce(userOp); - } - _payPrefund(requiredPrefund); - } - - // review nonce conflict with AA userOp nonce - // userOp can omit nonce or have batchId as well! - function _validateAndUpdateNonce(UserOperation calldata userOp) internal { - require(nonces[0]++ == userOp.nonce, "wallet: invalid nonce"); - } - - function _payPrefund(uint requiredPrefund) internal { - if (requiredPrefund != 0) { - //pay required prefund. make sure NOT to use the "gas" opcode, which is banned during validateUserOp - // (and used by default by the "call") - // @review linter - (bool success,) = payable(msg.sender).call{value : requiredPrefund, gas : type(uint).max}(""); - (success); - //ignore failure (its EntryPoint's job to verify, not wallet.) - } - } - - function _validateSignature(UserOperation calldata userOp, bytes32 requestId) internal view { - bytes32 hash = requestId.toEthSignedMessageHash(); - require(owner == hash.recover(userOp.signature), "wallet: wrong signature"); - } - - - /** - * @notice Query if a contract implements an interface - * @param interfaceId The interface identifier, as specified in ERC165 - * @return `true` if the contract implements `_interfaceID` - */ - function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) { - return interfaceId == type(IERC165).interfaceId; // 0x01ffc9a7 - } - - // Review - // withdrawDepositTo - // addDeposit - // getDeposit -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletNoAuth.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletNoAuth.sol deleted file mode 100644 index 4f2bdf939..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/SmartWalletNoAuth.sol +++ /dev/null @@ -1,67 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "./SmartWallet.sol"; - -contract SmartWalletNoAuth is SmartWallet { - - - /** - * @dev Checks whether the signature provided is valid for the provided data, hash. Will revert otherwise. - * @param dataHash Hash of the data (could be either a message hash or transaction hash) - * @param signatures Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash. - */ - function checkSignatures( - bytes32 dataHash, - bytes memory data, - bytes memory signatures - ) public view override { - uint8 v; - bytes32 r; - bytes32 s; - uint256 i = 0; - address _signer; - (v, r, s) = signatureSplit(signatures, i); - // review if necessary v = 1 - // review sig verification from other wallets - if(v == 0) { - // If v is 0 then it is a contract signature - // When handling contract signatures the address of the contract is encoded into r - _signer = address(uint160(uint256(r))); - - // Check that signature data pointer (s) is not pointing inside the static part of the signatures bytes - // This check is not completely accurate, since it is possible that more signatures than the threshold are send. - // Here we only check that the pointer is not pointing inside the part that is being processed - require(uint256(s) >= uint256(1) * 65, "BSA021"); - - // Check that signature data pointer (s) is in bounds (points to the length of data -> 32 bytes) - require(uint256(s) + 32 <= signatures.length, "BSA022"); - - // Check if the contract signature is in bounds: start of data is s + 32 and end is start + signature length - uint256 contractSignatureLen; - // solhint-disable-next-line no-inline-assembly - assembly { - contractSignatureLen := mload(add(add(signatures, s), 0x20)) - } - require(uint256(s) + 32 + contractSignatureLen <= signatures.length, "BSA023"); - - // Check signature - bytes memory contractSignature; - // solhint-disable-next-line no-inline-assembly - assembly { - // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s - contractSignature := add(add(signatures, s), 0x20) - } - require(ISignatureValidator(_signer).isValidSignature(data, contractSignature) == EIP1271_MAGIC_VALUE, "BSA024"); - } - else if(v > 30) { - // If v > 30 then default va (27,28) has been adjusted for eth_sign flow - // To support eth_sign and similar we adjust v and hash the messageHash with the Ethereum message prefix before applying ecrecover - _signer = ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", dataHash)), v - 4, r, s); - require(_signer == owner || true, "INVALID_SIGNATURE"); - } else { - _signer = ecrecover(dataHash, v, r, s); - require(_signer == owner || true, "INVALID_SIGNATURE"); - } - } -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol deleted file mode 100644 index 709455f9f..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/storage/WalletStorage.sol +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "../common/Enum.sol"; - -contract WalletStorage { - // Version - string public constant VERSION = "0.0.1"; - - // Domain Seperators - // keccak256( - // "EIP712Domain(uint256 chainId,address verifyingContract)" - // ); - bytes32 internal constant DOMAIN_SEPARATOR_TYPEHASH = 0x47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218; - - // @review for any modifications - // keccak256( - // "WalletTx(address to,uint256 value,bytes data,uint8 operation,uint256 targetTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" - // ); - bytes32 internal constant WALLET_TX_TYPEHASH = 0xeedfef42e81fe8cd0e4185e4320e9f8d52fd97eb890b85fa9bd7ad97c9a18de2; - - // Owner storage - address public owner; - - struct Transaction { - address to; - uint256 value; - bytes data; - Enum.Operation operation; - uint256 targetTxGas; - // uint256 batchId; - } - - struct FeeRefund { - uint256 baseGas; - uint256 gasPrice; //gasPrice or tokenGasPrice - uint256 tokenGasPriceFactor; - address gasToken; - address payable refundReceiver; - } - - // @review - // uint256 public nonce; //changed to 2D nonce - mapping(uint256 => uint256) public nonces; - - // AA storage - address public entryPoint; -} \ No newline at end of file diff --git a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol b/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol deleted file mode 100644 index 989cee7ed..000000000 --- a/packages/ethers-lib/scw-contracts/smart-contract-wallet/test/TestToken.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; - -contract TestToken is ERC20 { - constructor () - ERC20("TST", "TestToken") { - } - - function mint(address sender, uint amount) external { - _mint(sender, amount); - } - - function decimals() public view virtual override returns (uint8) { - return 6; - } -} diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts index 212403227..900d84e9e 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts @@ -64,7 +64,7 @@ class SmartWalletContractEthers implements SmartWalletContract { refundInfo: FeeRefundV1_0_0, signatures: string ): Promise { - // TODO: estimate GAS before making the transaction + // review: Gas estimation could come in here const txResponse = await this.contract.execTransaction(_tx, batchId, refundInfo, signatures) return toTxResult(txResponse) } diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts index 70d724648..91eb1ee3a 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts @@ -65,7 +65,6 @@ class SmartWalletContractEthers implements SmartWalletContract { refundInfo: FeeRefundV1_0_1, signatures: string ): Promise { - // TODO: estimate GAS before making the transaction const txResponse = await this.contract.execTransaction(_tx, batchId, refundInfo, signatures) return toTxResult(txResponse) } diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index 0ef56ab1b..0a9874867 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -20,48 +20,124 @@ import { } from './types/NodeClientTypes' interface INodeClient { - // Chain Apis + // 1. Chain Apis + + /** + * Get all supported chains by backend node configuration + */ getAllSupportedChains(): Promise + /** + * Get ChainConfig for requested chainId + * @param chainId + */ getChainById(chainId: number): Promise - getTokenPricesByChainId(chainId: number): Promise + // 2. Token APIs - // Tokens Endpoint + /** + * Get prices for configured tokens from backend node API + * @param chainId + */ + getTokenPricesByChainId(chainId: number): Promise + /** + * Get all supported tokens + */ + // review getAllTokens(): Promise + + /** + * Get TokenInfo for requested chainId + * @param chainId + */ getTokensByChainId(chainId: number): Promise + + /** + * Get TokenInfo by address and chainId + * @param tokenByChainIdAndAddressDto + */ getTokenByChainIdAndAddress( tokenByChainIdAndAddressDto: TokenByChainIdAndAddressDto ): Promise - // Smart Account Endpoints + // 3. Smart Account Endpoints + /** + * Get information of all smart accounts deployed for particular eoa owner for any version and index + * @param smartAccountByOwnerDto + */ getSmartAccountsByOwner( smartAccountByOwnerDto: SmartAccountByOwnerDto ): Promise + // 4. Balances Endpoints + + /** + * Get token balances for requested chainId and address + * address could be EOA or SmartAccount + * @param balancesDto + */ getAlltokenBalances(balancesDto: BalancesDto): Promise + /** + * + * @param balancesDto Get total USD balance + */ getTotalBalanceInUsd(balancesDto: BalancesDto): Promise + // 5. Gas Estimation Endpoints + /** + * About: This is generic method to estimate gas on any contract call done using GasEstimator contract + * Can be used to estimate gas before sending final transaction. + * Purpose: Currently used in smart account methods deployAndPayFees / prepareDeployandPayFees + * @param estimateExternalGasDto + */ estimateExternalGas(estimateExternalGasDto: EstimateExternalGasDto): Promise - // TODO - // Comment usage - + /** + * + * @param estimateRequiredTxGasDto + * About: Estimating the gas for inner transaction + * Purpose: Returns suggested value for targetTxGas + * Uses method requiredTxGas on SmartWallet contract and captures gas result from revert string + */ estimateRequiredTxGas( estimateRequiredTxGasDto: EstimateRequiredTxGasDto ): Promise + /** + * About : Estimating the gas for inner transaction for undeployed wallet + * Purpose: Returns suggested value for targetTxGas when the wallet is undeployed. + * Uses eth_call and bytecode of SmartWalletNoAuth which has method requiredTxGas + * @param estimateRequiredTxGasDto + */ estimateRequiredTxGasOverride(estimateRequiredTxGasDto: EstimateRequiredTxGasDto): Promise + /** + * + * @param estimateHandlePaymentTxGasDto + * About : Estimating the gas for token refund internal transaction handlePayment + * Purpose: Returns suggested value for handlePayment part to calculate baseGas + */ estimateHandlePaymentGas( estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto ): Promise + /** + * About : Estimating the gas for token refund internal transaction handlePayment but for undeployed wallet + * (counterfactual address should have token balance) + * Purpose: Returns suggested value for handlePayment part to calculate baseGas + * @param estimateHandlePaymentTxGasDto + */ estimateHandlePaymentGasOverride(estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto): Promise + /** + * About: Estimating the gas for execTransaction method on undeployed smart-wallet + * for undeployed wallet it uses fake signature and byte code of SmartwalletNoAuth using eth_call + * Purpose: Returns suggested value for overall transaction gas cost for undeployed wallet. Helpful for calculating fee quote + * @param estimateUndeployedContractGasDto + */ estimateUndeployedContractGas( estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto ): Promise diff --git a/packages/relayer/README.md b/packages/relayer/README.md index adeadfc52..294264a24 100644 --- a/packages/relayer/README.md +++ b/packages/relayer/README.md @@ -1,6 +1,6 @@ # `relayer` -> TODO: description +> A library of helper functions for interacting with Relayer service which accepts regular transactions and account abstraction user operations. ## Usage diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index 1d76c4ff9..63ae60feb 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -23,7 +23,6 @@ export class LocalRelayer implements Relayer { // TODO // Review function arguments and return values - // Could get smartAccount instance // Defines a type that takes config, context for SCW in play along with other details async deployWallet(deployWallet: DeployWallet): Promise { // Should check if already deployed diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 8d2f5f35a..b65cee19b 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -35,7 +35,6 @@ export class RestRelayer implements Relayer { // TODO // Review function arguments and return values - // Could get smartAccount instance // Defines a type that takes config, context for SCW in play along with other details async deployWallet(deployWallet: DeployWallet): Promise { // Should check if already deployed diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 20e94705a..649fced6e 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -157,9 +157,8 @@ class SmartAccount { /** * * @param smartAccountVersion - * @description // set wallet version to be able to interact with different deployed versions + * @description set Smart wallet contracts version to be able to interact with different deployed versions */ - // TODO //@review @Talha async setSmartAccountVersion(smartAccountVersion: SmartAccountVersion) { this.DEFAULT_VERSION = smartAccountVersion this.address = await this.getAddress() diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 89c1ac869..cf9ee5515 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -4,29 +4,18 @@ import { Web3Provider } from '@ethersproject/providers' // walletProvider: WalletProviderLike // TODO : Ability to provide custom URLs for all supported networks +// TODO : Provide optional dapp api key for managed paymasters dashboard +// relayer_url export interface SmartAccountConfig { activeNetworkId: ChainId // same supportedNetworksIds: ChainId[] // Network[] chainId: CbainId, rpcUrl?: string backend_url: string } -// relayer_url -// TODO -// Review location, usage and name of types @chirag -// Should be kept in native types and the moment it needs to be shared by other package, move to core types and use from there -// export interface MetaTransaction { -// to: string -// value?: BigNumberish -// data?: string -// nonce?: BigNumberish -// gasLimit?: BigNumberish -// // delegateCall?: boolean -// // revertOnError?: boolean -// } export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' -// reference i could work on +// Reference export interface WalletProvider { readonly type?: string readonly wallet?: Wallet diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index dc94116c9..120b0426c 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -19,8 +19,6 @@ import { import { TypedDataSigner } from '@ethersproject/abstract-signer' import { AddressZero } from '@ethersproject/constants' -// TODO -// Review all types and their placement and dependency export const EIP_DOMAIN = { EIP712Domain: [ { type: 'uint256', name: 'chainId' }, diff --git a/packages/transactions/src/multisend.ts b/packages/transactions/src/multisend.ts index 548e84b59..403000938 100644 --- a/packages/transactions/src/multisend.ts +++ b/packages/transactions/src/multisend.ts @@ -2,8 +2,6 @@ import { Contract, utils } from 'ethers' import { buildContractCall } from './execution' import { MetaTransaction, WalletTransaction } from '@biconomy-sdk/core-types' -// TODO -// Review all types const encodeMetaTransaction = (tx: MetaTransaction): string => { const data = utils.arrayify(tx.data) const encoded = utils.solidityPack( From 8507715b0eb76d83558796a80c216ab3d13319d9 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 23 Sep 2022 12:23:06 +0400 Subject: [PATCH 0144/1247] config updated --- package.json | 2 +- .../node-client/src/types/NodeClientTypes.ts | 8 ++++++ packages/smart-account/src/SmartAccount.ts | 26 ++++++++++++++++--- packages/smart-account/src/types.ts | 3 +++ 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 2b0041825..a844fc91f 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.7.8", + "nx": "^14.7.11", "prettier": "2.7.1", "ts-node": "^10.9.1" }, diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index ac0a27862..10d0ac413 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -23,6 +23,9 @@ export type SmartAccountInfoResponse = { } } +//TODO +//Review types in this file + export type BalancesDto = { chainId: number eoaAddress: string @@ -98,6 +101,11 @@ export type ChainConfig = { token: TokenInfo } +export type ProviderUrlConfig = { + chainId: ChainId + providerUrl: string +} + export type MasterCopyResponse = { address: string version: string diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 649fced6e..13d6f79bd 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -49,6 +49,7 @@ import { } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' import NodeClient, { + ProviderUrlConfig, ChainConfig, SupportedChainsResponse, SmartAccountsResponse, @@ -98,6 +99,8 @@ class SmartAccount { // Chain configurations fetched from backend chainConfig!: ChainConfig[] + providerUrlConfig!: ProviderUrlConfig[] + // providers!: Web3Provider[] provider!: Web3Provider @@ -119,6 +122,8 @@ class SmartAccount { // @review address!: string + dappAPIKey!: string + // contract instances smartWalletContract!: { [chainId: number]: { [version: string]: SmartWalletContract } } multiSendContract!: { [chainId: number]: { [version: string]: MultiSendContract } } @@ -141,7 +146,10 @@ class SmartAccount { if (config) { this.#smartAccountConfig = { ...this.#smartAccountConfig, ...config } } - + // Useful for AA flow. Check if it is valid key + this.dappAPIKey = this.#smartAccountConfig.dappAPIKey || '' + // Useful if Dapp needs custom RPC Urls. Check if valid. Fallback to public Urls + this.providerUrlConfig = this.#smartAccountConfig.providerUrlConfig || [] this.ethAdapter = {} this.smartWalletContract = {} this.multiSendContract = {} @@ -176,16 +184,19 @@ class SmartAccount { this.chainConfig = chainConfig // console.log("chain config: ", chainConfig); + const providerUrlConfig = this.providerUrlConfig + const signer = this.signer // (check usage of getsignerByAddress from mexa/sdk and playground) for (let i = 0; i < this.supportedNetworkIds.length; i++) { const network = this.supportedNetworkIds[i] + const providerUrlFromConfig = providerUrlConfig.find((m) => m.chainId === network)?.providerUrl const providerUrl = chainConfig.find((n) => n.chainId === network)?.providerUrl // To keep it network agnostic // Note: think about events when signer needs to pay gas - const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) + const readProvider = new ethers.providers.JsonRpcProvider(providerUrlFromConfig && providerUrlFromConfig!== '' ? providerUrlFromConfig : providerUrl) // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable this.ethAdapter[network] = new EthersAdapter({ ethers, @@ -1273,7 +1284,16 @@ class SmartAccount { export const DefaultSmartAccountConfig: SmartAccountConfig = { activeNetworkId: ChainId.GOERLI, //Update later supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], - backend_url: 'https://sdk-backend.staging.biconomy.io/v1' + backend_url: 'https://sdk-backend.staging.biconomy.io/v1', + // dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', + /*providerUrlConfig: [ + { chainId: ChainId.GOERLI, + providerUrl: "https://eth-goerli.alchemyapi.io/v2/lmW2og_aq-OXWKYRoRu-X6Yl6wDQYt_2" + }, + { chainId: ChainId.POLYGON_MUMBAI, + providerUrl: "https://polygon-mumbai.g.alchemy.com/v2/Q4WqQVxhEEmBYREX22xfsS2-s5EXWD31" + } + ]*/ } export default SmartAccount \ No newline at end of file diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index cf9ee5515..775d3b032 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -1,6 +1,7 @@ import { BytesLike, Wallet, BigNumberish } from 'ethers' import { ChainNames, ChainId } from '@biconomy-sdk/core-types' import { Web3Provider } from '@ethersproject/providers' +import { ProviderUrlConfig } from '@biconomy-sdk/node-client' // walletProvider: WalletProviderLike // TODO : Ability to provide custom URLs for all supported networks @@ -10,6 +11,8 @@ export interface SmartAccountConfig { activeNetworkId: ChainId // same supportedNetworksIds: ChainId[] // Network[] chainId: CbainId, rpcUrl?: string backend_url: string + dappAPIKey?: string + providerUrlConfig?: ProviderUrlConfig[] } From 6362bd6f4849147daf9f65453ccb3c19e85e08ae Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 26 Sep 2022 12:53:32 +0400 Subject: [PATCH 0145/1247] gas estimation pkg init --- package.json | 2 +- packages/gas-estimator/README.md | 11 +++++++++ packages/gas-estimator/package.json | 34 ++++++++++++++++++++++++++++ packages/gas-estimator/src/index.ts | 0 packages/gas-estimator/tsconfig.json | 9 ++++++++ 5 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 packages/gas-estimator/README.md create mode 100644 packages/gas-estimator/package.json create mode 100644 packages/gas-estimator/src/index.ts create mode 100644 packages/gas-estimator/tsconfig.json diff --git a/package.json b/package.json index 2b0041825..78046820e 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.7.8", + "nx": "^14.7.13", "prettier": "2.7.1", "ts-node": "^10.9.1" }, diff --git a/packages/gas-estimator/README.md b/packages/gas-estimator/README.md new file mode 100644 index 000000000..4aed419e7 --- /dev/null +++ b/packages/gas-estimator/README.md @@ -0,0 +1,11 @@ +# `@biconomy-sdk/gas-estimator` + +> TODO: description + +## Usage + +``` +const gasEstimator = require('@biconomy-sdk/gas-estimator'); + +// TODO: DEMONSTRATE API +``` diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json new file mode 100644 index 000000000..b8ab400fc --- /dev/null +++ b/packages/gas-estimator/package.json @@ -0,0 +1,34 @@ +{ + "name": "@biconomy-sdk/gas-estimator", + "version": "1.0.11", + "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", + "keywords": [ + "gas-estimation", + "gas-usage", + "estimateGas" + ], + "author": "livingrockrises ", + "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", + "license": "MIT", + "main": "dist/src/index.js", + "directories": { + "lib": "lib", + "test": "__tests__" + }, + "files": [ + "lib" + ], + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" + }, + "scripts": { + "test": "node ./__tests__/@biconomy-sdk/gas-estimator.test.js" + }, + "bugs": { + "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" + } +} diff --git a/packages/gas-estimator/src/index.ts b/packages/gas-estimator/src/index.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/gas-estimator/tsconfig.json b/packages/gas-estimator/tsconfig.json new file mode 100644 index 000000000..c7ff8535e --- /dev/null +++ b/packages/gas-estimator/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src" + }, + "include": ["src"] +} From 81c3c52f33f51f6cfbc4aace2c6e112606724ee3 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 27 Sep 2022 00:48:54 +0400 Subject: [PATCH 0146/1247] refactor and pkg setup --- package.json | 2 +- packages/gas-estimator/package.json | 4 +++- packages/gas-estimator/src/generic-estimator.ts | 0 packages/gas-estimator/src/index.ts | 3 +++ packages/gas-estimator/src/interfaces/estimator.ts | 4 ++++ packages/gas-estimator/src/orderride-estimator.ts | 0 packages/gas-estimator/src/smartaccount-estimator.ts | 0 packages/node-client/src/INodeClient.ts | 4 ++++ 8 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 packages/gas-estimator/src/generic-estimator.ts create mode 100644 packages/gas-estimator/src/interfaces/estimator.ts create mode 100644 packages/gas-estimator/src/orderride-estimator.ts create mode 100644 packages/gas-estimator/src/smartaccount-estimator.ts diff --git a/package.json b/package.json index a844fc91f..78046820e 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.7.11", + "nx": "^14.7.13", "prettier": "2.7.1", "ts-node": "^10.9.1" }, diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index b8ab400fc..659219bab 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -26,9 +26,11 @@ "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" }, "scripts": { - "test": "node ./__tests__/@biconomy-sdk/gas-estimator.test.js" }, "bugs": { "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" + }, + "dependencies": { + "ethers": "^5.7.1" } } diff --git a/packages/gas-estimator/src/generic-estimator.ts b/packages/gas-estimator/src/generic-estimator.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/gas-estimator/src/index.ts b/packages/gas-estimator/src/index.ts index e69de29bb..dd86f7fa3 100644 --- a/packages/gas-estimator/src/index.ts +++ b/packages/gas-estimator/src/index.ts @@ -0,0 +1,3 @@ +export * from './interfaces/estimator' +// export * from './generic-estimator' +// export * from './override-estimator' \ No newline at end of file diff --git a/packages/gas-estimator/src/interfaces/estimator.ts b/packages/gas-estimator/src/interfaces/estimator.ts new file mode 100644 index 000000000..17aa27d15 --- /dev/null +++ b/packages/gas-estimator/src/interfaces/estimator.ts @@ -0,0 +1,4 @@ +import { ethers } from "ethers" + +export interface Estimator { +} \ No newline at end of file diff --git a/packages/gas-estimator/src/orderride-estimator.ts b/packages/gas-estimator/src/orderride-estimator.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/gas-estimator/src/smartaccount-estimator.ts b/packages/gas-estimator/src/smartaccount-estimator.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index 0a9874867..45f7d77a7 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -141,6 +141,10 @@ interface INodeClient { estimateUndeployedContractGas( estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto ): Promise + + // 6. Conditional Gasless Endpoint + + // 7. Signing Service Endpoint } export default INodeClient From 046543d0f0f05c33c33d1fb7d4414ed6dd2e0fba Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 27 Sep 2022 15:45:17 +0400 Subject: [PATCH 0147/1247] placeholder pkg --- packages/account-abstraction/README.md | 11 ++++++++ packages/account-abstraction/package.json | 33 ++++++++++++++++++++++ packages/account-abstraction/tsconfig.json | 10 +++++++ 3 files changed, 54 insertions(+) create mode 100644 packages/account-abstraction/README.md create mode 100644 packages/account-abstraction/package.json create mode 100644 packages/account-abstraction/tsconfig.json diff --git a/packages/account-abstraction/README.md b/packages/account-abstraction/README.md new file mode 100644 index 000000000..62d9bbde3 --- /dev/null +++ b/packages/account-abstraction/README.md @@ -0,0 +1,11 @@ +# `@biconomy-sdk/account-abstraction` + +> TODO: description + +## Usage + +``` +const accountAbstraction = require('@biconomy-sdk/account-abstraction'); + +// TODO: DEMONSTRATE API +``` diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json new file mode 100644 index 000000000..b1e23728e --- /dev/null +++ b/packages/account-abstraction/package.json @@ -0,0 +1,33 @@ +{ + "name": "@biconomy-sdk/account-abstraction", + "version": "1.0.11", + "description": "Account abstraction APIs to prepare user operations ", + "keywords": [ + "account-abstraction", + "sdk", + "erc4337" + ], + "author": "livingrockrises ", + "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", + "license": "MIT", + "main": "dist/src/index.js", + "directories": { + "lib": "lib", + "test": "__tests__" + }, + "files": [ + "lib" + ], + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" + }, + "scripts": { + }, + "bugs": { + "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" + } +} diff --git a/packages/account-abstraction/tsconfig.json b/packages/account-abstraction/tsconfig.json new file mode 100644 index 000000000..c4202fe28 --- /dev/null +++ b/packages/account-abstraction/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src" + }, + "include": ["src"] + } + \ No newline at end of file From 4f15e40d0162d3d5dc17dcaffc67c144cb562be0 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 27 Sep 2022 15:48:20 +0400 Subject: [PATCH 0148/1247] update revbuild --- rebuild.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rebuild.sh b/rebuild.sh index c33bb881d..7d05628ac 100755 --- a/rebuild.sh +++ b/rebuild.sh @@ -1,13 +1,23 @@ #!/bin/sh rm -rf node_modules + +rm -rf packages/account-abstraction/node_modules +rm -rf packages/account-abstraction/package-lock.json +rm -rf packages/account-abstraction/dist + rm -rf packages/core-types/node_modules rm -rf packages/core-types/package-lock.json rm -rf packages/core-types/dist + rm -rf packages/ethers-lib/node_modules rm -rf packages/ethers-lib/package-lock.json rm -rf packages/ethers-lib/dist +rm -rf packages/gas-estimator/node_modules +rm -rf packages/gas-estimator/package-lock.json +rm -rf packages/gas-estimator/dist + rm -rf packages/node_client/node_modules rm -rf packages/node_client/package-lock.json rm -rf packages/node_client/dist From 084a357da559fac3dbf634893d76601a1f4fc254 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 27 Sep 2022 15:49:10 +0400 Subject: [PATCH 0149/1247] update contracts version --- packages/ethers-lib/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index bd1b15fa4..23ef177e6 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -47,7 +47,7 @@ "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0", "scw-contracts-v1.0.0": "npm:scw-contracts@1.0.0", - "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.7" + "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.8" }, "peerDependencies": { "ethers": "^5.5.3" From acdff2ba15f12f7b6c9e89a45d3e04dc8a1a58d2 Mon Sep 17 00:00:00 2001 From: talha Date: Tue, 27 Sep 2022 16:51:21 +0500 Subject: [PATCH 0150/1247] initial changes --- .../core-types/src/smart-account.types.ts | 41 +- packages/smart-account/src/SmartAccount.ts | 420 +- packages/smart-account/src/types.ts | 5 - packages/transactions/package.json | 5 +- packages/transactions/src/assets/index.ts | 1273 +++++ packages/transactions/src/contract-utils.ts | 119 + packages/transactions/src/index.ts | 8 + packages/transactions/src/transaction.ts | 386 ++ .../src/utils/FetchContractsInfo.ts | 89 + packages/transactions/yarn.lock | 4725 +++++++++++++++++ 10 files changed, 6697 insertions(+), 374 deletions(-) create mode 100644 packages/transactions/src/assets/index.ts create mode 100644 packages/transactions/src/contract-utils.ts create mode 100644 packages/transactions/src/transaction.ts create mode 100644 packages/transactions/src/utils/FetchContractsInfo.ts create mode 100644 packages/transactions/yarn.lock diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 24390fc87..492293d33 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -9,6 +9,15 @@ import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract import { SmartWalletContract } from './contracts/SmartWalletContract' import { GasLimit } from './transaction.types' + +export interface Config { + owner: string, + version: string + activeNetworkId: ChainId // same + supportedNetworksIds: ChainId[] // Network[] chainId: CbainId, rpcUrl?: string + backend_url: string +} + export interface SmartAccountContext { baseWallet: SmartWalletContract walletFactory: SmartWalletFactoryContract @@ -16,6 +25,15 @@ export interface SmartAccountContext { multiSendCall: MultiSendCallOnlyContract } + +export type EstimateSmartAccountDeploymentDto = { + chainId: ChainId + version: string + owner: string, + entryPointAddress: string + fallbackHandlerAddress: string +} + export interface SmartAccountState { address: string owner: string @@ -26,7 +44,8 @@ export interface SmartAccountState { export type AddressForCounterFactualWalletDto = { index: number - chainId?: ChainId + chainId: ChainId + version: string } export type SignTransactionDto = { @@ -42,9 +61,10 @@ export type SendTransactionDto = { } export type PrepareRefundTransactionDto = { + version: string transaction: Transaction - batchId?: number - chainId?: ChainId + batchId: number + chainId: ChainId } export type PrepareRefundTransactionsDto = { @@ -54,10 +74,11 @@ export type PrepareRefundTransactionsDto = { } export type RefundTransactionDto = { + version: string transaction: Transaction feeQuote: FeeQuote - batchId?: number - chainId?: ChainId + batchId: number + chainId: ChainId } export type RefundTransactionBatchDto = { transactions: Transaction[] @@ -67,13 +88,15 @@ export type RefundTransactionBatchDto = { } export type TransactionDto = { + version: string, transaction: Transaction - batchId?: number - chainId?: ChainId + batchId: number + chainId: ChainId } export type TransactionBatchDto = { + version: string transactions: Transaction[] - batchId?: number - chainId?: ChainId + batchId: number + chainId: ChainId } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 20e94705a..b01e07237 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -1,4 +1,3 @@ -import { SmartAccountConfig } from './types' import EthersAdapter from '@biconomy-sdk/ethers-lib' import { ethers } from 'ethers' import { @@ -10,7 +9,6 @@ import { findContractAddressesByVersion } from './utils/FetchContractsInfo' import { - AddressForCounterFactualWalletDto, SignTransactionDto, SendTransactionDto, PrepareRefundTransactionDto, @@ -45,7 +43,8 @@ import { FAKE_SIGNATURE, GAS_USAGE_OFFSET, DEFAULT_FEE_RECEIVER, - RelayResponse + RelayResponse, + Config } from '@biconomy-sdk/core-types' import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' import NodeClient, { @@ -78,7 +77,11 @@ import { EstimateGasResponse } from '@biconomy-sdk/node-client' +import { Transaction, ContractUtils } from '@biconomy-sdk/transactions' + // Create an instance of Smart Account with multi-chain support. + +// extends Transaction class SmartAccount { // By default latest version DEFAULT_VERSION: SmartAccountVersion = '1.0.1' @@ -90,7 +93,7 @@ class SmartAccount { context!: { [chainId: number]: SmartAccountContext } // Optional config to initialise instance of Smart Account. One can provide main active chain and only limited chains they need to be on. - #smartAccountConfig!: SmartAccountConfig + #smartAccountConfig!: Config // Array of chain ids that current multi-chain instance supports supportedNetworkIds!: ChainId[] @@ -105,6 +108,8 @@ class SmartAccount { nodeClient!: NodeClient + transactionInstance!: any + // Instance of relayer (Relayer Service Client) connected with this Smart Account and always ready to dispatch transactions // relayer.relay => dispatch to blockchain // other methods are useful for the widget @@ -119,15 +124,8 @@ class SmartAccount { // @review address!: string - // contract instances - smartWalletContract!: { [chainId: number]: { [version: string]: SmartWalletContract } } - multiSendContract!: { [chainId: number]: { [version: string]: MultiSendContract } } - multiSendCallOnlyContract!: { - [chainId: number]: { [version: string]: MultiSendCallOnlyContract } - } - smartWalletFactoryContract!: { - [chainId: number]: { [version: string]: SmartWalletFactoryContract } - } + contractUtils!: any + // TODO // Review provider type WalletProviderLike / ExternalProvider @@ -136,22 +134,29 @@ class SmartAccount { /**Constrcutor for the Smart Account. If config is not provided it makes Smart Contract available using default configuration * If you wish to use your own backend server and relayer service, pass the URLs here */ - constructor(walletProvider: Web3Provider, config?: Partial) { + constructor(walletProvider: Web3Provider, config: Config) { + // super(walletProvider, config) this.#smartAccountConfig = { ...DefaultSmartAccountConfig } if (config) { this.#smartAccountConfig = { ...this.#smartAccountConfig, ...config } } this.ethAdapter = {} - this.smartWalletContract = {} - this.multiSendContract = {} - this.multiSendCallOnlyContract = {} - this.smartWalletFactoryContract = {} this.supportedNetworkIds = this.#smartAccountConfig.supportedNetworksIds this.provider = walletProvider this.signer = walletProvider.getSigner() - this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) + + // this.transactionInstance = new Transaction(this.provider, this.#smartAccountConfig) + // this.contractUtils = new ContractUtils() + // this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) + } + + async init(){ + await this.transactionInstance.initialize(this.provider, this.#smartAccountConfig) + this.nodeClient = await this.transactionInstance.getNodeClient() + this.contractUtils = await this.transactionInstance.getContractUtilInstance() + return this } /** @@ -162,89 +167,7 @@ class SmartAccount { // TODO //@review @Talha async setSmartAccountVersion(smartAccountVersion: SmartAccountVersion) { this.DEFAULT_VERSION = smartAccountVersion - this.address = await this.getAddress() - } - - // TODO - // add a flag initialised which gets checked before calling other functions - - /** - * - * @returns this/self - instance of SmartAccount - */ - public async init(): Promise { - const chainConfig = (await this.getSupportedChainsInfo()).data - this.chainConfig = chainConfig - // console.log("chain config: ", chainConfig); - - const signer = this.signer - // (check usage of getsignerByAddress from mexa/sdk and playground) - - for (let i = 0; i < this.supportedNetworkIds.length; i++) { - const network = this.supportedNetworkIds[i] - const providerUrl = chainConfig.find((n) => n.chainId === network)?.providerUrl - // To keep it network agnostic - // Note: think about events when signer needs to pay gas - - const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) - // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable - this.ethAdapter[network] = new EthersAdapter({ - ethers, - signer, - provider: readProvider - }) - - this.smartWalletFactoryContract[network] = {} - this.smartWalletContract[network] = {} - this.multiSendContract[network] = {} - this.multiSendCallOnlyContract[network] = {} - this.initializeContracts(network) - } - // We set the common owner by quering default active chainId ethAdapter - this.owner = await this.ethersAdapter().getSignerAddress() - // @review - // Smart Account addresses gets set by querying active chain's wallet factory (along with owner and index = 0) - this.address = await this.getAddress() - return this - } - - // Intialize contracts to be used throughout this class - private initializeContracts(chainId: ChainId) { - // We get the addresses using chainConfig fetched from backend node - const currentChainInfo: ChainConfig = findChainById(chainId, this.chainConfig) - - const smartWallet = currentChainInfo.wallet - const smartWalletFactoryAddress = currentChainInfo.walletFactory - const multiSend = currentChainInfo.multiSend - const multiSendCall = currentChainInfo.multiSendCall - for (let index = 0; index < smartWallet.length; index++) { - const version = smartWallet[index].version - console.log(smartWallet[index]) - - this.smartWalletFactoryContract[chainId][version] = getSmartWalletFactoryContract( - version, - this.ethAdapter[chainId], - smartWalletFactoryAddress[index].address - ) - // NOTE/TODO : attached address is not wallet address yet - this.smartWalletContract[chainId][version] = getSmartWalletContract( - version, - this.ethAdapter[chainId], - smartWallet[index].address - ) - - this.multiSendContract[chainId][version] = getMultiSendContract( - version, - this.ethAdapter[chainId], - multiSend[index].address - ) - - this.multiSendCallOnlyContract[chainId][version] = getMultiSendCallOnlyContract( - version, - this.ethAdapter[chainId], - multiSendCall[index].address - ) - } + this.address = await this.transactionInstance.getAddress({index: 0, chainId: this.#smartAccountConfig.activeNetworkId, version: this.DEFAULT_VERSION}) } // Review : more / other potential methods @@ -255,30 +178,6 @@ class SmartAccount { // TODO: get details from backend config // NOTE: Discuss about multichain aspect of relayer node url and clients - /** - * @param address Owner aka {EOA} address - * @param index number of smart account deploy i.e {0, 1 ,2 ...} - * @description return address for Smart account - * @returns - */ - private async getAddressForCounterfactualWallet( - addressForCounterFactualWalletDto: AddressForCounterFactualWalletDto - ): Promise { - const { index = 0, chainId = this.#smartAccountConfig.activeNetworkId } = - addressForCounterFactualWalletDto - console.log('index and ChainId ', index, chainId, this.DEFAULT_VERSION) - return this.smartWalletFactoryContract[chainId][ - this.DEFAULT_VERSION - ].getAddressForCounterfactualWallet(this.owner, index) - } - - /** - * Fetch supported chainInfo from backend node : used in init - * @returns ChainConfig response received from backend node - */ - private async getSupportedChainsInfo(): Promise { - return this.nodeClient.getAllSupportedChains() - } public async getAlltokenBalances( balancesDto: BalancesDto, @@ -424,7 +323,7 @@ class SmartAccount { refundReceiver: tx.refundReceiver } - let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() + let walletContract = this.contractUtils.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() walletContract = walletContract.attach(this.address) let signature = await this.signTransaction({ tx, chainId }) @@ -491,6 +390,7 @@ class SmartAccount { // actual estimation with dummy sig // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth const estimatedGasUsed: number = await this.estimateTransaction({ + version: this.DEFAULT_VERSION, transaction, batchId, chainId @@ -527,6 +427,7 @@ class SmartAccount { * * @param prepareRefundTransactionsDto */ + // TODO: Rename method to getFeeOptionsForBatch async prepareRefundTransactionBatch( prepareRefundTransactionsDto: PrepareRefundTransactionsDto ): Promise { @@ -584,7 +485,7 @@ class SmartAccount { estimatedGasUsed += estimateWalletDeployment; } - const tx = await this.createTransactionBatch({ transactions, batchId, chainId}); + const tx = await this.createTransactionBatch({ version: this.DEFAULT_VERSION, transactions, batchId, chainId}); const txn: ExecTransaction = { to: tx.to, @@ -640,7 +541,7 @@ class SmartAccount { estimatedGasUsed += estimateWalletDeployment; } - const tx = await this.createTransaction({ transaction, batchId, chainId }); + const tx = await this.createTransaction({ version: this.DEFAULT_VERSION, transaction, batchId, chainId }); const txn: ExecTransaction = { to: tx.to, @@ -691,139 +592,9 @@ class SmartAccount { async createRefundTransaction( refundTransactionDto: RefundTransactionDto ): Promise { - const { - transaction, - feeQuote, - batchId = 0, - chainId = this.#smartAccountConfig.activeNetworkId - } = refundTransactionDto - let walletContract = this.smartAccount(chainId).getContract() - walletContract = walletContract.attach(this.address) - - let additionalBaseGas = 0; - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0 - const isDeployed = await this.isDeployed(chainId); - if (isDeployed) { - nonce = (await walletContract.getNonce(batchId)).toNumber() - } else { - const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); - // We know it's going to get deployed by Relayer but we handle refund cost here.. - additionalBaseGas += estimateWalletDeployment; // wallet deployment gas - } - console.log('nonce: ', nonce) - - // in terms of calculating baseGas we should know if wallet is deployed or not otherwise it needs to consider deployment cost - // (will get batched by relayer) - - const internalTx: MetaTransactionData = { - to: transaction.to, - value: transaction.value || 0, - data: transaction.data || '0x', - operation: OperationType.Call - } - console.log(internalTx) - - let targetTxGas, baseGas, handlePaymentEstimate; - const regularOffSet = GAS_USAGE_OFFSET - - if(!isDeployed){ - // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet - // targetTxGas? - // i. use really high value - // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] - - const estimateRequiredTxGas: EstimateRequiredTxGasDto = { - chainId, - walletAddress: this.address, - transaction: internalTx - } - const response = await this.estimateRequiredTxGasOverride(estimateRequiredTxGas) - // TODO - // Review - const requiredTxGasEstimate = Number(response.data.gas) + 700000 - console.log('required txgas estimate (with override) ', requiredTxGasEstimate); - targetTxGas = requiredTxGasEstimate; - - // baseGas? - // Depending on feeToken provide baseGas! We could use constant value provided by the relayer - - - const refundDetails: FeeRefundHandlePayment = { - gasUsed: requiredTxGasEstimate, - baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS - } - const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId, - version: this.DEFAULT_VERSION, - walletAddress: this.address, - feeRefund: refundDetails - } - const handlePaymentResponse = await this.estimateHandlePaymentGasOverride(estimateHandlePaymentGas) - let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - - console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate); - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; - } else { - - const estimateRequiredTxGas: EstimateRequiredTxGasDto = { - chainId, - walletAddress: this.address, - transaction: internalTx - } - - const response = await this.estimateRequiredTxGas(estimateRequiredTxGas); - // considerable offset ref gnosis safe service client safeTxGas - // @Talha - // TODO - // handle exception responses and when gas returned is 0 - // We could stop the further flow - const requiredTxGasEstimate = Number(response.data.gas) + 30000 - console.log('required txgas estimate ', requiredTxGasEstimate); - targetTxGas = requiredTxGasEstimate; - - const refundDetails: FeeRefundHandlePayment = { - gasUsed: requiredTxGasEstimate, - baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS - } - - const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId, - version: this.DEFAULT_VERSION, - walletAddress: this.address, - feeRefund: refundDetails - } - const handlePaymentResponse = await this.estimateHandlePaymentGas(estimateHandlePaymentGas) - let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - - console.log('handlePaymentEstimate ', handlePaymentEstimate); - - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment - } - - const walletTx: WalletTransaction = buildSmartAccountTransaction({ - to: transaction.to, - value: transaction.value, - data: transaction.data, // for token transfers use encodeTransfer - targetTxGas: targetTxGas, - baseGas, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS, - gasPrice: feeQuote.tokenGasPrice.toString(), //review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - nonce - }) - - return walletTx + refundTransactionDto.chainId = this.#smartAccountConfig.activeNetworkId + refundTransactionDto.version = this.DEFAULT_VERSION + return this.transactionInstance.createRefundTransaction(refundTransactionDto) } /** @@ -834,30 +605,27 @@ class SmartAccount { * @returns */ async createTransaction(transactionDto: TransactionDto): Promise { - const { - transaction, - batchId = 0, - chainId = this.#smartAccountConfig.activeNetworkId - } = transactionDto - let walletContract = this.smartAccount(chainId).getContract() - walletContract = walletContract.attach(this.address) + transactionDto.chainId = this.#smartAccountConfig.activeNetworkId + transactionDto.version = this.DEFAULT_VERSION + return this.transactionInstance.createTransaction(transactionDto) + } - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0 - if (await this.isDeployed(chainId)) { - nonce = (await walletContract.getNonce(batchId)).toNumber() + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Write test case and limit batch size based on test results in scw-contracts + * @notice This transaction is without fee refund (gasless) + * @param transaction + * @param batchId + * @param chainId + * @returns + */ + async createTransactionBatch( + transactionBatchDto: TransactionBatchDto + ): Promise { + transactionBatchDto.chainId = this.#smartAccountConfig.activeNetworkId + transactionBatchDto.version = this.DEFAULT_VERSION + return this.transactionInstance.createTransactionBatch(transactionBatchDto) } - console.log('nonce: ', nonce) - - const walletTx: WalletTransaction = buildSmartAccountTransaction({ - to: transaction.to, - value: transaction.value, - data: transaction.data, // for token transfers use encodeTransfer - nonce - }) - - return walletTx - } /** * Prepares compatible WalletTransaction object based on Transaction Request @@ -1025,55 +793,7 @@ class SmartAccount { return estimateWalletDeployment; } - /** - * Prepares compatible WalletTransaction object based on Transaction Request - * @todo Write test case and limit batch size based on test results in scw-contracts - * @notice This transaction is without fee refund (gasless) - * @param transaction - * @param batchId - * @param chainId - * @returns - */ - async createTransactionBatch( - transactionBatchDto: TransactionBatchDto - ): Promise { - const { - transactions, - batchId = 0, - chainId = this.#smartAccountConfig.activeNetworkId - } = transactionBatchDto - let walletContract = this.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() - walletContract = walletContract.attach(this.address) - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0 - if (await this.isDeployed(chainId)) { - nonce = (await walletContract.getNonce(batchId)).toNumber() - } - console.log('nonce: ', nonce) - - const txs: MetaTransaction[] = [] - - for (let i = 0; i < transactions.length; i++) { - const innerTx: WalletTransaction = buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) - - txs.push(innerTx) - } - - const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( - this.multiSend(chainId).getContract(), - txs, - nonce - ) - console.log('wallet txn without refund ', walletTx) - - return walletTx - } async prepareDeployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) @@ -1108,7 +828,7 @@ class SmartAccount { return feeQuotes; } - + // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment async deployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId, feeQuote: FeeQuote): Promise { // Not checking again if the wallet is actually deployed @@ -1128,7 +848,7 @@ class SmartAccount { data: encodeTransfer(feeReceiver, Number(feesToPay)) }; - const transaction = await this.createTransaction({transaction: tx}); + const transaction = await this.createTransaction({version: this.DEFAULT_VERSION, transaction: tx, batchId: 0, chainId: this.#smartAccountConfig.activeNetworkId}); const txHash = await this.sendTransaction({tx:transaction}); return txHash; } @@ -1139,7 +859,7 @@ class SmartAccount { * @returns Smart Wallet Contract instance attached with current smart account address (proxy) */ smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { - const smartWallet = this.smartWalletContract[chainId][this.DEFAULT_VERSION] + const smartWallet = this.contractUtils.smartWalletContract[chainId][this.DEFAULT_VERSION] // Review @talha const address = this.address smartWallet.getContract().attach(address) @@ -1155,7 +875,7 @@ class SmartAccount { // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): SmartWalletFactoryContract { - return this.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION] + return this.contractUtils.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION] } /** @@ -1167,7 +887,7 @@ class SmartAccount { // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): MultiSendContract { - return this.multiSendContract[chainId][this.DEFAULT_VERSION] + return this.contractUtils.multiSendContract[chainId][this.DEFAULT_VERSION] } /** @@ -1181,29 +901,9 @@ class SmartAccount { // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): MultiSendCallOnlyContract { - return this.multiSendCallOnlyContract[chainId][this.DEFAULT_VERSION] + return this.contractUtils.multiSendCallOnlyContract[chainId][this.DEFAULT_VERSION] } - /** - * @review - * returns address of Smart account by actually calling appropriate Wallet Factory contract - * This method is used in init - * @param index optional index : Indexes are relevant if the owner/signatory EOA deployed/wants to deploy multiple Smart Accounts - * @param chainId optional chainId - * @returns Address of the Smart Account - */ - - async getAddress( - // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, - index: number = 0, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): Promise { - // we will hit smart account endpoint to fetch deployed smart account info - const address = await this.getAddressForCounterfactualWallet({ index, chainId }) - this.address = address - return address - // return await this.getAddressForCounterfactualWallet(index,chainId); - } /** * Allows one to check if the smart account is already deployed on requested chainOd @@ -1271,7 +971,9 @@ class SmartAccount { // Temporary default config // TODO/NOTE : make Goerli and Mumbai as test networks and remove others -export const DefaultSmartAccountConfig: SmartAccountConfig = { +export const DefaultSmartAccountConfig: Config = { + owner: '', + version: '1.0.1', activeNetworkId: ChainId.GOERLI, //Update later supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], backend_url: 'https://sdk-backend.staging.biconomy.io/v1' diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 89c1ac869..21be30061 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -4,11 +4,6 @@ import { Web3Provider } from '@ethersproject/providers' // walletProvider: WalletProviderLike // TODO : Ability to provide custom URLs for all supported networks -export interface SmartAccountConfig { - activeNetworkId: ChainId // same - supportedNetworksIds: ChainId[] // Network[] chainId: CbainId, rpcUrl?: string - backend_url: string -} // relayer_url // TODO diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 5afb70754..74355f55f 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -33,9 +33,12 @@ "access": "public" }, "dependencies": { + "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/ethers-lib": "*", + "@biconomy-sdk/node-client": "*", + "@biconomy-sdk/relayer": "*", "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/constants": "^5.6.1", - "@biconomy-sdk/core-types": "*", "ethers": "^5.6.9" } } diff --git a/packages/transactions/src/assets/index.ts b/packages/transactions/src/assets/index.ts new file mode 100644 index 000000000..02fa2719f --- /dev/null +++ b/packages/transactions/src/assets/index.ts @@ -0,0 +1,1273 @@ +export const MultiSend = { + defaultAddress: '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + released: true, + contractName: 'MultiSend', + version: '1.0.1', + networkAddresses: { + '1': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '4': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '5': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '42': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '88': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '100': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '246': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '73799': '0xF9DC4a9B8b551f693a10EcB5F931fE2E1a9156f0', + '31338': '0x1A3F36c656Da24c18C703B8c2d1829F5D32E8E49' + }, + abi: [ + { + inputs: [], + stateMutability: 'nonpayable', + type: 'constructor' + }, + { + inputs: [ + { + internalType: 'bytes', + name: 'transactions', + type: 'bytes' + } + ], + name: 'multiSend', + outputs: [], + stateMutability: 'payable', + type: 'function' + } + ] +} + +export const MultiSendCallOnly = { + defaultAddress: '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + released: true, + contractName: 'MultiSendCallOnly', + version: '1.0.1', + networkAddresses: { + '1': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '4': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '5': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '42': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '88': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '100': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '246': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '73799': '0xa72E2c9EC14DDee494F551AAe9885158105F809c', + '31338': '0x1A3F36c656Da24c18C703B8c2d1829F5D32E8E49' + }, + abi: [ + { + inputs: [ + { + internalType: 'bytes', + name: 'transactions', + type: 'bytes' + } + ], + name: 'multiSend', + outputs: [], + stateMutability: 'payable', + type: 'function' + } + ] +} + +export const SmartWallet = { + defaultAddress: '0x056DcE811A2b695171274855E7246039Df298158', + released: true, + contractName: 'SmartWallet', + version: '1.0.1', + networkAddresses: { + '1': '0x056DcE811A2b695171274855E7246039Df298158', + '4': '0x056DcE811A2b695171274855E7246039Df298158', + '5': '0x056DcE811A2b695171274855E7246039Df298158', + '42': '0x056DcE811A2b695171274855E7246039Df298158', + '100': '0x056DcE811A2b695171274855E7246039Df298158', + '31338': '0x0ba464506a3D66C962121e3C25ed56678A2585B6' + }, + abi: [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'handler', + type: 'address' + } + ], + name: 'ChangedFallbackHandler', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'DisabledModule', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: '_scw', + type: 'address' + }, + { + indexed: true, + internalType: 'address', + name: '_oldEOA', + type: 'address' + }, + { + indexed: true, + internalType: 'address', + name: '_newEOA', + type: 'address' + } + ], + name: 'EOAChanged', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'EnabledModule', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'oldEntryPoint', + type: 'address' + }, + { + indexed: false, + internalType: 'address', + name: 'newEntryPoint', + type: 'address' + } + ], + name: 'EntryPointChanged', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'ExecutionFromModuleFailure', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'ExecutionFromModuleSuccess', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'newImplementation', + type: 'address' + } + ], + name: 'ImplementationUpdated', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'uint8', + name: 'version', + type: 'uint8' + } + ], + name: 'Initialized', + type: 'event' + }, + { + stateMutability: 'nonpayable', + type: 'fallback' + }, + { + inputs: [], + name: 'VERSION', + outputs: [ + { + internalType: 'string', + name: '', + type: 'string' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'bytes32', + name: 'dataHash', + type: 'bytes32' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'bytes', + name: 'signatures', + type: 'bytes' + } + ], + name: 'checkSignatures', + outputs: [], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'prevModule', + type: 'address' + }, + { + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'disableModule', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [], + name: 'domainSeparator', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'enableModule', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + components: [ + { + internalType: 'address', + name: 'to', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + internalType: 'uint256', + name: 'targetTxGas', + type: 'uint256' + } + ], + internalType: 'struct WalletStorage.Transaction', + name: '_tx', + type: 'tuple' + }, + { + components: [ + { + internalType: 'uint256', + name: 'baseGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'gasPrice', + type: 'uint256' + }, + { + internalType: 'address', + name: 'gasToken', + type: 'address' + }, + { + internalType: 'address payable', + name: 'refundReceiver', + type: 'address' + } + ], + internalType: 'struct WalletStorage.FeeRefund', + name: 'refundInfo', + type: 'tuple' + }, + { + internalType: 'uint256', + name: '_nonce', + type: 'uint256' + } + ], + name: 'encodeTransactionData', + outputs: [ + { + internalType: 'bytes', + name: '', + type: 'bytes' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [], + name: 'entryPoint', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'dest', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'func', + type: 'bytes' + } + ], + name: 'exec', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address[]', + name: 'dest', + type: 'address[]' + }, + { + internalType: 'bytes[]', + name: 'func', + type: 'bytes[]' + } + ], + name: 'execBatch', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'dest', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'func', + type: 'bytes' + } + ], + name: 'execFromEntryPoint', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + components: [ + { + internalType: 'address', + name: 'to', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + internalType: 'uint256', + name: 'targetTxGas', + type: 'uint256' + } + ], + internalType: 'struct WalletStorage.Transaction', + name: '_tx', + type: 'tuple' + }, + { + internalType: 'uint256', + name: 'batchId', + type: 'uint256' + }, + { + components: [ + { + internalType: 'uint256', + name: 'baseGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'gasPrice', + type: 'uint256' + }, + { + internalType: 'address', + name: 'gasToken', + type: 'address' + }, + { + internalType: 'address payable', + name: 'refundReceiver', + type: 'address' + } + ], + internalType: 'struct WalletStorage.FeeRefund', + name: 'refundInfo', + type: 'tuple' + }, + { + internalType: 'bytes', + name: 'signatures', + type: 'bytes' + } + ], + name: 'execTransaction', + outputs: [ + { + internalType: 'bool', + name: 'success', + type: 'bool' + } + ], + stateMutability: 'payable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + } + ], + name: 'execTransactionFromModule', + outputs: [ + { + internalType: 'bool', + name: 'success', + type: 'bool' + } + ], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + } + ], + name: 'execTransactionFromModuleReturnData', + outputs: [ + { + internalType: 'bool', + name: 'success', + type: 'bool' + }, + { + internalType: 'bytes', + name: 'returnData', + type: 'bytes' + } + ], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [], + name: 'getChainId', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'start', + type: 'address' + }, + { + internalType: 'uint256', + name: 'pageSize', + type: 'uint256' + } + ], + name: 'getModulesPaginated', + outputs: [ + { + internalType: 'address[]', + name: 'array', + type: 'address[]' + }, + { + internalType: 'address', + name: 'next', + type: 'address' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'batchId', + type: 'uint256' + } + ], + name: 'getNonce', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + internalType: 'uint256', + name: 'targetTxGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'baseGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'gasPrice', + type: 'uint256' + }, + { + internalType: 'address', + name: 'gasToken', + type: 'address' + }, + { + internalType: 'address payable', + name: 'refundReceiver', + type: 'address' + }, + { + internalType: 'uint256', + name: '_nonce', + type: 'uint256' + } + ], + name: 'getTransactionHash', + outputs: [ + { + internalType: 'bytes32', + name: '', + type: 'bytes32' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '_owner', + type: 'address' + }, + { + internalType: 'address', + name: '_entryPoint', + type: 'address' + }, + { + internalType: 'address', + name: '_handler', + type: 'address' + } + ], + name: 'init', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'module', + type: 'address' + } + ], + name: 'isModuleEnabled', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256' + } + ], + name: 'nonces', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [], + name: 'owner', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'token', + type: 'address' + }, + { + internalType: 'address', + name: 'dest', + type: 'address' + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256' + } + ], + name: 'pullTokens', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address' + }, + { + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + } + ], + name: 'requiredTxGas', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256' + } + ], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: 'handler', + type: 'address' + } + ], + name: 'setFallbackHandler', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '_newOwner', + type: 'address' + } + ], + name: 'setOwner', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'bytes4', + name: 'interfaceId', + type: 'bytes4' + } + ], + name: 'supportsInterface', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address payable', + name: 'dest', + type: 'address' + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256' + } + ], + name: 'transfer', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '_entryPoint', + type: 'address' + } + ], + name: 'updateEntryPoint', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '_implementation', + type: 'address' + } + ], + name: 'updateImplementation', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + components: [ + { + internalType: 'address', + name: 'sender', + type: 'address' + }, + { + internalType: 'uint256', + name: 'nonce', + type: 'uint256' + }, + { + internalType: 'bytes', + name: 'initCode', + type: 'bytes' + }, + { + internalType: 'bytes', + name: 'callData', + type: 'bytes' + }, + { + internalType: 'uint256', + name: 'callGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'verificationGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'preVerificationGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'maxFeePerGas', + type: 'uint256' + }, + { + internalType: 'uint256', + name: 'maxPriorityFeePerGas', + type: 'uint256' + }, + { + internalType: 'address', + name: 'paymaster', + type: 'address' + }, + { + internalType: 'bytes', + name: 'paymasterData', + type: 'bytes' + }, + { + internalType: 'bytes', + name: 'signature', + type: 'bytes' + } + ], + internalType: 'struct UserOperation', + name: 'userOp', + type: 'tuple' + }, + { + internalType: 'bytes32', + name: 'requestId', + type: 'bytes32' + }, + { + internalType: 'uint256', + name: 'requiredPrefund', + type: 'uint256' + } + ], + name: 'validateUserOp', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + } + ] +} + +export const WalletFactory = { + defaultAddress: '0x050bca32264195976Fe00BcA566B548413A9E658', + released: true, + contractName: 'WalletFactory', + version: '1.0.1', + networkAddresses: { + '1': '0x050bca32264195976Fe00BcA566B548413A9E658', + '4': '0x050bca32264195976Fe00BcA566B548413A9E658', + '5': '0x050bca32264195976Fe00BcA566B548413A9E658', + '42': '0x050bca32264195976Fe00BcA566B548413A9E658', + '88': '0x050bca32264195976Fe00BcA566B548413A9E658', + '100': '0x050bca32264195976Fe00BcA566B548413A9E658', + '246': '0x050bca32264195976Fe00BcA566B548413A9E658', + '73799': '0x050bca32264195976Fe00BcA566B548413A9E658', + '31338': '0x85c0995669f8a0173a5B5F6003DA060E8D17f0c3' + }, + abi: [ + { + inputs: [ + { + internalType: 'address', + name: '_baseImpl', + type: 'address' + } + ], + stateMutability: 'nonpayable', + type: 'constructor' + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: '_proxy', + type: 'address' + }, + { + indexed: true, + internalType: 'address', + name: '_implementation', + type: 'address' + }, + { + indexed: true, + internalType: 'address', + name: '_owner', + type: 'address' + } + ], + name: 'WalletCreated', + type: 'event' + }, + { + inputs: [ + { + internalType: 'address', + name: '_owner', + type: 'address' + }, + { + internalType: 'address', + name: '_entryPoint', + type: 'address' + }, + { + internalType: 'address', + name: '_handler', + type: 'address' + }, + { + internalType: 'uint256', + name: '_index', + type: 'uint256' + } + ], + name: 'deployCounterFactualWallet', + outputs: [ + { + internalType: 'address', + name: 'proxy', + type: 'address' + } + ], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '_owner', + type: 'address' + }, + { + internalType: 'address', + name: '_entryPoint', + type: 'address' + }, + { + internalType: 'address', + name: '_handler', + type: 'address' + } + ], + name: 'deployWallet', + outputs: [ + { + internalType: 'address', + name: 'proxy', + type: 'address' + } + ], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '_owner', + type: 'address' + }, + { + internalType: 'uint256', + name: '_index', + type: 'uint256' + } + ], + name: 'getAddressForCounterfactualWallet', + outputs: [ + { + internalType: 'address', + name: '_wallet', + type: 'address' + } + ], + stateMutability: 'view', + type: 'function' + }, + { + inputs: [ + { + internalType: 'address', + name: '', + type: 'address' + } + ], + name: 'isWalletExist', + outputs: [ + { + internalType: 'bool', + name: '', + type: 'bool' + } + ], + stateMutability: 'view', + type: 'function' + } + ] +} + +export const GasEstimator = { + defaultAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', + released: true, + contractName: 'WalletFactory', + version: '1.0.1', + networkAddresses: { + '5': '0xc6e8748a08e591250a3eed526e9455859633c6c4' + }, + abi: [ + { + inputs: [ + { internalType: 'address', name: '_to', type: 'address' }, + { internalType: 'bytes', name: '_data', type: 'bytes' } + ], + name: 'estimate', + outputs: [ + { internalType: 'bool', name: 'success', type: 'bool' }, + { internalType: 'bytes', name: 'result', type: 'bytes' }, + { internalType: 'uint256', name: 'gas', type: 'uint256' } + ], + stateMutability: 'nonpayable', + type: 'function' + } + ] +} diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts new file mode 100644 index 000000000..ee2defd2c --- /dev/null +++ b/packages/transactions/src/contract-utils.ts @@ -0,0 +1,119 @@ +import { + ChainId, + SmartWalletContract, + SmartWalletFactoryContract, + MultiSendContract, + MultiSendCallOnlyContract, + EstimateSmartAccountDeploymentDto +} from '@biconomy-sdk/core-types' +import{ + ChainConfig, + SupportedChainsResponse +} from '@biconomy-sdk/node-client' +import { + getSmartWalletFactoryContract, + getMultiSendContract, + getMultiSendCallOnlyContract, + getSmartWalletContract + +} from './utils/FetchContractsInfo' +import { GasEstimator } from './assets' +import { ethers } from 'ethers' +import EthersAdapter from '@biconomy-sdk/ethers-lib' +import { JsonRpcSigner } from '@ethersproject/providers' +import { version } from 'typescript' + +class ContractUtils { + ethAdapter!: { [chainId: number]: EthersAdapter } + + smartWalletContract!: { [chainId: number]: { [version: string]: SmartWalletContract } } + multiSendContract!: { [chainId: number]: { [version: string]: MultiSendContract } } + multiSendCallOnlyContract!: { + [chainId: number]: { [version: string]: MultiSendCallOnlyContract } + } + smartWalletFactoryContract!: { + [chainId: number]: { [version: string]: SmartWalletFactoryContract } + } + + constructor(){ + this.ethAdapter = {} + this.smartWalletContract = {} + this.multiSendContract = {} + this.multiSendCallOnlyContract = {} + this.smartWalletFactoryContract = {} + } + + public async initialize(supportedChains: SupportedChainsResponse, signer: JsonRpcSigner) { + const chainsInfo = supportedChains.data + + for (let i = 0; i < chainsInfo.length; i++) { + const network = chainsInfo[i] + const providerUrl = network.providerUrl + // To keep it network agnostic + // Note: think about events when signer needs to pay gas + + const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) + // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable + this.ethAdapter[network.chainId] = new EthersAdapter({ + ethers, + signer, + provider: readProvider + }) + + this.smartWalletFactoryContract[network.chainId] = {} + this.smartWalletContract[network.chainId] = {} + this.multiSendContract[network.chainId] = {} + this.multiSendCallOnlyContract[network.chainId] = {} + this.initializeContracts(network) + } + } + initializeContracts(chaininfo: ChainConfig) { + // We get the addresses using chainConfig fetched from backend node + + const smartWallet = chaininfo.wallet + const smartWalletFactoryAddress = chaininfo.walletFactory + const multiSend = chaininfo.multiSend + const multiSendCall = chaininfo.multiSendCall + for (let index = 0; index < smartWallet.length; index++) { + const version = smartWallet[index].version + console.log(smartWallet[index]) + + this.smartWalletFactoryContract[chaininfo.chainId][version] = getSmartWalletFactoryContract( + version, + this.ethAdapter[chaininfo.chainId], + smartWalletFactoryAddress[index].address + ) + // NOTE/TODO : attached address is not wallet address yet + this.smartWalletContract[chaininfo.chainId][version] = getSmartWalletContract( + version, + this.ethAdapter[chaininfo.chainId], + smartWallet[index].address + ) + + this.multiSendContract[chaininfo.chainId][version] = getMultiSendContract( + version, + this.ethAdapter[chaininfo.chainId], + multiSend[index].address + ) + + this.multiSendCallOnlyContract[chaininfo.chainId][version] = getMultiSendCallOnlyContract( + version, + this.ethAdapter[chaininfo.chainId], + multiSendCall[index].address + ) + } + } + // TODO: params as Object + async isDeployed(chainId: ChainId, version: string, address: string): Promise { + // Other approach : needs review and might be coming wrong + // const readProvider = new ethers.providers.JsonRpcProvider(networks[chainId].providerUrl); + // const walletCode = await readProvider.getCode(await this.getAddress(chainId)); + // return !!walletCode && walletCode !== '0x' + + // but below works + return await this.smartWalletFactoryContract[chainId][version].isWalletExist(address) + } + +} + +export default ContractUtils \ No newline at end of file diff --git a/packages/transactions/src/index.ts b/packages/transactions/src/index.ts index fb7071a1c..098e10c83 100644 --- a/packages/transactions/src/index.ts +++ b/packages/transactions/src/index.ts @@ -2,3 +2,11 @@ export * from './types' export * from './utils' export * from './execution' export * from './multisend' + +import Transaction from './transaction' +import ContractUtils from './contract-utils' + +export { + Transaction, + ContractUtils +} diff --git a/packages/transactions/src/transaction.ts b/packages/transactions/src/transaction.ts new file mode 100644 index 000000000..b91cb20ad --- /dev/null +++ b/packages/transactions/src/transaction.ts @@ -0,0 +1,386 @@ +import { smartAccountSignMessage } from 'execution' +import { + TransactionDto, + TransactionBatchDto, + MetaTransaction, + MetaTransactionData, + RefundTransactionDto, + WalletTransaction, + Config, + OperationType, + ZERO_ADDRESS, + ChainId, + GAS_USAGE_OFFSET, + FeeRefundHandlePayment, + AddressForCounterFactualWalletDto, + EstimateSmartAccountDeploymentDto +} from '@biconomy-sdk/core-types' +import { ethers, version } from 'ethers' +import EthersAdapter from '@biconomy-sdk/ethers-lib' +import { GasEstimator } from './assets' + +import NodeClient, { + ChainConfig, + SupportedChainsResponse, + SmartAccountsResponse, + SmartAccountByOwnerDto, + EstimateExternalGasDto, + EstimateRequiredTxGasDto, + EstimateHandlePaymentTxGasDto, + EstimateUndeployedContractGasDto +} from '@biconomy-sdk/node-client' + +import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' +import { Relayer } from '@biconomy-sdk/relayer' +import { + getSmartWalletFactoryContract, + getMultiSendContract, + getMultiSendCallOnlyContract, + getSmartWalletContract, + findChainById, + findContractAddressesByVersion +} from './utils/FetchContractsInfo' +import { Web3Provider } from '@ethersproject/providers' +import ContractUtils from './contract-utils' +import { buildSmartAccountTransaction } from './execution' +import { buildMultiSendSmartAccountTx } from './multisend' + +class Transaction { + + nodeClient!: NodeClient + relayer!: Relayer + + // Owner of the Smart Account common between all chains + // Could be part of Smart Account state / config + // @review with Sachin + owner!: string + + // Address of the smart contract wallet common between all chains + // @review + address!: string + + localConfig!: Config + + contractUtils!: ContractUtils + + // constructor(walletProvider: Web3Provider, config: Config) { + // this.localConfig = { ...DefaultConfig } + + // if (config) { + // this.localConfig = { ...this.localConfig, ...config } + // } + // this.provider = walletProvider + // this.signer = walletProvider.getSigner() + // this.owner = this.localConfig.owner + // this.contractUtils = new ContractUtils() + // this.nodeClient = new NodeClient({ txServiceUrl: config.backend_url }) + // } + + + async initialize(walletProvider: Web3Provider, config: Config){ + this.localConfig = { ...DefaultConfig } + + if (config) { + this.localConfig = { ...this.localConfig, ...config } + } + const signer = walletProvider.getSigner() + this.owner = this.localConfig.owner + this.contractUtils = new ContractUtils() + this.nodeClient = new NodeClient({ txServiceUrl: config.backend_url }) + await this.contractUtils.initialize(await this.nodeClient.getAllSupportedChains(), signer) + } + + async getContractUtilInstance(): Promise{ + return this.contractUtils + } + + async getNodeClient(): Promise{ + return this.nodeClient + } + + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Rename based on other variations to prepare transaction + * @notice This transaction is without fee refund (gasless) + * @param transactionDto + * @returns + */ + async createTransaction(transactionDto: TransactionDto): Promise { + const { transaction, batchId = 0, chainId, version } = transactionDto + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() + walletContract = walletContract.attach(this.address) + + let nonce = 0 + if (await this.contractUtils.isDeployed(chainId, version, this.address)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } + console.log('nonce: ', nonce) + + const walletTx: WalletTransaction = buildSmartAccountTransaction({ + to: transaction.to, + value: transaction.value, + data: transaction.data, // for token transfers use encodeTransfer + nonce + }) + + return walletTx + } + + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Write test case and limit batch size based on test results in scw-contracts + * @notice This transaction is without fee refund (gasless) + * @param transaction + * @param batchId + * @param chainId + * @returns + */ + // TODO: Merge this method with createTransaction, both batch and single transactions can be batched in same transactions + async createTransactionBatch( + transactionBatchDto: TransactionBatchDto + ): Promise { + const { transactions, chainId, batchId, version } = transactionBatchDto + // NOTE : If the wallet is not deployed yet then nonce would be zero + let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() + walletContract = walletContract.attach(this.address) + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (await this.contractUtils.isDeployed(chainId, version, this.address)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } + console.log('nonce: ', nonce) + + const txs: MetaTransaction[] = [] + + for (let i = 0; i < transactions.length; i++) { + const innerTx: WalletTransaction = buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) + + txs.push(innerTx) + } + + const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( + this.contractUtils.multiSendContract[chainId][version].getContract(), + txs, + nonce + ) + console.log('wallet txn without refund ', walletTx) + + return walletTx + } + + async estimateSmartAccountDeployment(estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto): Promise { + const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); + const { chainId, version, owner, entryPointAddress, fallbackHandlerAddress } = estimateSmartAccountDeploymentDto + const walletFactoryInterface = this.contractUtils.smartWalletFactoryContract[chainId][version].getInterface(); + const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ + this.contractUtils.smartWalletFactoryContract[chainId][version].getAddress(), + walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ + owner, + entryPointAddress, + fallbackHandlerAddress, + 0 + ]) + ]) + console.log('encodedEstimate ', encodedEstimateData) + const deployCostresponse = await this.nodeClient.estimateExternalGas({chainId, encodedData:encodedEstimateData}); + const estimateWalletDeployment = Number(deployCostresponse.data.gas); + console.log('estimateWalletDeployment ', estimateWalletDeployment); + return estimateWalletDeployment; + } + + + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Rename based on other variations to prepare transaction + * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) + * @param refundTransactionDto + * @returns + */ + async createRefundTransaction( + refundTransactionDto: RefundTransactionDto + ): Promise { + const { transaction, feeQuote, batchId, chainId, version } = refundTransactionDto + let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() + walletContract = walletContract.attach(this.address) + + let additionalBaseGas = 0 + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + const isDeployed = await this.contractUtils.isDeployed(chainId, version, this.address) + if (isDeployed) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } else { + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: this.owner, + entryPointAddress: '', + fallbackHandlerAddress: '' + }) + // We know it's going to get deployed by Relayer but we handle refund cost here.. + additionalBaseGas += estimateWalletDeployment // wallet deployment gas + } + console.log('nonce: ', nonce) + + // in terms of calculating baseGas we should know if wallet is deployed or not otherwise it needs to consider deployment cost + // (will get batched by relayer) + + const internalTx: MetaTransactionData = { + to: transaction.to, + value: transaction.value || 0, + data: transaction.data || '0x', + operation: OperationType.Call + } + console.log(internalTx) + + let targetTxGas, baseGas, handlePaymentEstimate + const regularOffSet = GAS_USAGE_OFFSET + + if (!isDeployed) { + // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet + // targetTxGas? + // i. use really high value + // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] + + const estimateRequiredTxGas: EstimateRequiredTxGasDto = { + chainId, + walletAddress: this.address, + transaction: internalTx + } + const response = await this.nodeClient.estimateRequiredTxGasOverride(estimateRequiredTxGas) + // TODO + // Review + const requiredTxGasEstimate = Number(response.data.gas) + 700000 + console.log('required txgas estimate (with override) ', requiredTxGasEstimate) + targetTxGas = requiredTxGasEstimate + + // baseGas? + // Depending on feeToken provide baseGas! We could use constant value provided by the relayer + + const refundDetails: FeeRefundHandlePayment = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { + chainId, + version: version, + walletAddress: this.address, + feeRefund: refundDetails + } + const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGasOverride( + estimateHandlePaymentGas + ) + let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + + console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate) + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas + } else { + const estimateRequiredTxGas: EstimateRequiredTxGasDto = { + chainId, + walletAddress: this.address, + transaction: internalTx + } + + const response = await this.nodeClient.estimateRequiredTxGas(estimateRequiredTxGas) + // considerable offset ref gnosis safe service client safeTxGas + // @Talha + // TODO + // handle exception responses and when gas returned is 0 + // We could stop the further flow + const requiredTxGasEstimate = Number(response.data.gas) + 30000 + console.log('required txgas estimate ', requiredTxGasEstimate) + targetTxGas = requiredTxGasEstimate + + const refundDetails: FeeRefundHandlePayment = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + + const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { + chainId, + version: version, + walletAddress: this.address, + feeRefund: refundDetails + } + const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentGas) + let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + + console.log('handlePaymentEstimate ', handlePaymentEstimate) + + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas // delegate call + event emission + state updates + potential deployment + } + + const walletTx: WalletTransaction = buildSmartAccountTransaction({ + to: transaction.to, + value: transaction.value, + data: transaction.data, // for token transfers use encodeTransfer + targetTxGas: targetTxGas, + baseGas, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS, + gasPrice: feeQuote.tokenGasPrice.toString(), //review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + nonce + }) + + return walletTx + } + + async getAddress( + addressForCounterFactualWalletDto: AddressForCounterFactualWalletDto + ): Promise { + // TODO: Get from node client first from cache, if not found then query smart contract + // we will hit smart account endpoint to fetch deployed smart account info + const address = await this.getAddressForCounterfactualWallet(addressForCounterFactualWalletDto) + this.address = address + return address + } + + /** + * @param address Owner aka {EOA} address + * @param index number of smart account deploy i.e {0, 1 ,2 ...} + * @description return address for Smart account + * @returns + + */ + // TODO: hit the api before getting data from smart contract + async getAddressForCounterfactualWallet( + addressForCounterFactualWalletDto: AddressForCounterFactualWalletDto + ): Promise { + const { index, chainId, version } = addressForCounterFactualWalletDto + console.log('index and ChainId ', index, chainId, version) + return this.contractUtils.smartWalletFactoryContract[chainId][ + version + ].getAddressForCounterfactualWallet(this.owner, index) + } + + ethersAdapter(chainId: ChainId): EthersAdapter { + return this.contractUtils.ethAdapter[chainId] + } +} +const DefaultConfig: Config = { + owner: '', + version: '1.0.1', + activeNetworkId: ChainId.GOERLI, //Update later + supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], + backend_url: 'https://sdk-backend.staging.biconomy.io/v1' +} + +export default Transaction \ No newline at end of file diff --git a/packages/transactions/src/utils/FetchContractsInfo.ts b/packages/transactions/src/utils/FetchContractsInfo.ts new file mode 100644 index 000000000..ecf69335a --- /dev/null +++ b/packages/transactions/src/utils/FetchContractsInfo.ts @@ -0,0 +1,89 @@ +import { ChainConfig } from '@biconomy-sdk/node-client' +import { ChainId } from '@biconomy-sdk/core-types' +import { + SmartWalletContract, + SmartWalletFactoryContract, + MultiSendContract, + MultiSendCallOnlyContract, + SmartAccountVersion +} from '@biconomy-sdk/core-types' +import { WalletFactory, SmartWallet, MultiSend, MultiSendCallOnly } from '../assets/index' + +import EthersAdapter from '@biconomy-sdk/ethers-lib' + +export function getSmartWalletFactoryContract( + smartAccountVersion: SmartAccountVersion, + ethAdapter: EthersAdapter, + address: string +): SmartWalletFactoryContract { + return ethAdapter.getSmartWalletFactoryContract(smartAccountVersion, address) +} +export function getMultiSendContract( + smartAccountVersion: SmartAccountVersion, + ethAdapter: EthersAdapter, + address: string +): MultiSendContract { + return ethAdapter.getMultiSendContract(smartAccountVersion, address) +} +export function getMultiSendCallOnlyContract( + smartAccountVersion: SmartAccountVersion, + ethAdapter: EthersAdapter, + address: string +): MultiSendCallOnlyContract { + return ethAdapter.getMultiSendCallOnlyContract(smartAccountVersion, address) +} +export function getSmartWalletContract( + smartAccountVersion: SmartAccountVersion, + ethAdapter: EthersAdapter, + address: string +): SmartWalletContract { + return ethAdapter.getSmartWalletContract(smartAccountVersion, address) +} + +export function findChainById(chainId: ChainId, chainConfig: ChainConfig[]): ChainConfig { + const currentChainInfo = chainConfig.find((n: ChainConfig) => { + return n.chainId === chainId + }) + if (currentChainInfo) return currentChainInfo + throw new Error('Chain Not Found') +} + +export function findContractAddressesByVersion( + smartAccountVersion: SmartAccountVersion, + chainId: ChainId, + chainConfig: ChainConfig[] +) { + const chainInfo: ChainConfig = findChainById(chainId, chainConfig) + + const entryPointAddress = chainInfo.entryPoint.find((element) => { + return element.version === smartAccountVersion + })?.address + const walletFactoryAddress = chainInfo.walletFactory.find((element) => { + return element.version === smartAccountVersion + })?.address + const walletAddress = chainInfo.wallet.find((element) => { + return element.version === smartAccountVersion + })?.address + const multiSendAddress = chainInfo.multiSend.find((element) => { + return element.version === smartAccountVersion + })?.address + const multiSendCallAddress = chainInfo.multiSendCall.find((element) => { + return element.version === smartAccountVersion + })?.address + + const fallBackHandlerAddress = chainInfo.fallBackHandler.find((element) => { + return element.version === smartAccountVersion + })?.address + + if (!chainInfo) { + throw new Error('Chain Not Found') + } + return { + walletAddress, + walletFactoryAddress, + multiSendAddress, + multiSendCallAddress, + entryPointAddress, + fallBackHandlerAddress + } +} diff --git a/packages/transactions/yarn.lock b/packages/transactions/yarn.lock new file mode 100644 index 000000000..fb3ffc3f7 --- /dev/null +++ b/packages/transactions/yarn.lock @@ -0,0 +1,4725 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@account-abstraction/contracts@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@account-abstraction/contracts/-/contracts-0.2.0.tgz#d353fd4b26d8867a3c0067fc0e20da03c99ca2dd" + integrity sha512-CbPYA7o55u1S5Fee5qIWffD/4dxJ7v+86Si8TOUOE/tAMUWP+nzU1kHKUwFrM/HT8OxAQpeXccCD4UtROLtfwA== + +"@biconomy-sdk/core-types@*": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@biconomy-sdk/core-types/-/core-types-1.0.11.tgz#cb60c73e2ce0710989513cfca0c26dfc702014f3" + integrity sha512-hoeHCGrkIF1AaRuXbdjIMfzQWptND3L3ZoTlBhyIbrvTrVxcrSuZ+b3KK40sq+8a9fCSeHHHhrSIVmfg1xGkKw== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/contracts" "^5.6.0" + "@gnosis.pm/safe-deployments" "^1.16.0" + web3-core "^1.7.1" + +"@biconomy-sdk/ethers-lib@*": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@biconomy-sdk/ethers-lib/-/ethers-lib-1.0.11.tgz#8259f12a8057bb20833eddd8994c9296bcb244a3" + integrity sha512-kfNXrUJSdaTpTvcNmg6dmS8d6RQ5/odhizh/fgeH0PpYHN0BgZgVbpk/vWt3IEEVoSXkVpEP+Z630snAbjzAuw== + dependencies: + "@biconomy-sdk/core-types" "*" + "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" + "@nomiclabs/hardhat-ethers" "^2.1.0" + "@openzeppelin/contracts" "^4.6.0" + scw-contracts-v1.0.0 "npm:scw-contracts@1.0.0" + scw-contracts-v1.0.1 "npm:scw-contracts@1.0.7" + +"@biconomy-sdk/node-client@*": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@biconomy-sdk/node-client/-/node-client-1.0.11.tgz#20213749fc1b5366d5e5027dbac0c681c628b7d5" + integrity sha512-9CXW3OgcDiAQOsSRIRnVKuBxjRlGO51ef6v59zCacESmiJJsybdqGiSfgLnCRjx7NCHkDF00MT1h034IWlhCZw== + dependencies: + "@biconomy-sdk/core-types" "*" + "@ethersproject/abstract-signer" "^5.6.0" + "@gnosis.pm/safe-core-sdk" "^2.1.0" + "@nomiclabs/hardhat-ethers" "^2.1.0" + node-fetch "^2.6.6" + +"@biconomy-sdk/relayer@*": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@biconomy-sdk/relayer/-/relayer-1.0.11.tgz#1b711ce681365c6888974a0ebb2243c3781e79e1" + integrity sha512-LkTcJCcUQVsKoFGhd/+XiTjyXsDmxqLiKUVm92rMpneZix2X2XDwRvSVzApBhOQQRqpJGAZ3pw9yGJ446eRjIQ== + dependencies: + "@biconomy-sdk/core-types" "*" + "@ethersproject/providers" "^5.6.8" + ethers "^5.6.9" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.1", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.4.1", "@ethersproject/contracts@^5.6.0", "@ethersproject/contracts@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.1", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@^5.6.8": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.1.tgz#b0799b616d5579cd1067a8ebf1fc1ec74c1e122c" + integrity sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.4.0", "@ethersproject/solidity@^5.6.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.4.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@gnosis.pm/safe-core-sdk-types@^1.4.0", "@gnosis.pm/safe-core-sdk-types@^1.6.1": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.6.1.tgz#dcd0c19d61fb5266b6e40bac1cd91fde44eda1d7" + integrity sha512-KRflubR/W2qVeRxavh2ALtXI6CyCCcyuL1olJAVn/xkZVYJJjvXn+5GxbRloJFIJrgFCNWYbHrO0sXtywP5Y1g== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@gnosis.pm/safe-deployments" "1.16.0" + web3-core "^1.8.0" + web3-utils "^1.8.0" + +"@gnosis.pm/safe-core-sdk-utils@^1.1.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.4.1.tgz#c1c6d7fe78682a0090c47a24b1306c46a69d2e0d" + integrity sha512-VrebOIw5ULOgTuV1hK4V0Wp1cg50Sw9urUYyBFnkI6kzL13f3ngGa5IUZ6O+HOOSNrO2mB+EEr09gWp5IN7ECA== + dependencies: + "@gnosis.pm/safe-core-sdk-types" "^1.6.1" + semver "^7.3.7" + web3-utils "^1.8.0" + +"@gnosis.pm/safe-core-sdk@^2.1.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.4.1.tgz#55b0764dc6968a683841fb07ac7d930f96357b41" + integrity sha512-FlpHW+jzKNtO9HMFF+R7IbdvJM5J4R4JW76jSe3MAbUA5KlmAW9BFDl/sgdQTREttIZMG2dr9A94RU9YcsljXw== + dependencies: + "@ethersproject/solidity" "^5.6.0" + "@gnosis.pm/safe-core-sdk-types" "^1.4.0" + "@gnosis.pm/safe-deployments" "1.15.0" + ethereumjs-util "^7.1.4" + semver "^7.3.5" + web3-utils "^1.7.1" + +"@gnosis.pm/safe-deployments@1.15.0": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz#71ed9a37437a3080443c49aa65308f2d8839d751" + integrity sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew== + dependencies: + semver "^7.3.7" + +"@gnosis.pm/safe-deployments@1.16.0", "@gnosis.pm/safe-deployments@^1.16.0": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-deployments/-/safe-deployments-1.16.0.tgz#78b1fb400934ff117f7d9c8e66398503bd772eeb" + integrity sha512-5Wakso6SiulstuZfz3gH6yME8Q50BT5dVxIfgWz4vzOmyyqmAVstMd0VIwyw6IDee0gU4mHKZjhD3UXPKEvRCw== + dependencies: + semver "^7.3.7" + +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" + integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== + +"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" + integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== + +"@nomicfoundation/ethereumjs-block@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz#fdd5c045e7baa5169abeed0e1202bf94e4481c49" + integrity sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA== + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-blockchain@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz#1a8c243a46d4d3691631f139bfb3a4a157187b0c" + integrity sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw== + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-ethash" "^2.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + abstract-level "^1.0.3" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + level "^8.0.0" + lru-cache "^5.1.1" + memory-level "^1.0.0" + +"@nomicfoundation/ethereumjs-common@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz#f6bcc7753994555e49ab3aa517fc8bcf89c280b9" + integrity sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA== + dependencies: + "@nomicfoundation/ethereumjs-util" "^8.0.0" + crc-32 "^1.2.0" + +"@nomicfoundation/ethereumjs-ethash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz#11539c32fe0990e1122ff987d1b84cfa34774e81" + integrity sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew== + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + abstract-level "^1.0.3" + bigint-crypto-utils "^3.0.23" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-evm@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz#99cd173c03b59107c156a69c5e215409098a370b" + integrity sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q== + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@types/async-eventemitter" "^0.2.1" + async-eventemitter "^0.2.4" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/ethereumjs-rlp@^4.0.0", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz#d9a9c5f0f10310c8849b6525101de455a53e771d" + integrity sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw== + +"@nomicfoundation/ethereumjs-statemanager@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz#14a9d4e1c828230368f7ab520c144c34d8721e4b" + integrity sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ== + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + functional-red-black-tree "^1.0.1" + +"@nomicfoundation/ethereumjs-trie@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz#dcfbe3be53a94bc061c9767a396c16702bc2f5b7" + integrity sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + ethereum-cryptography "0.1.3" + readable-stream "^3.6.0" + +"@nomicfoundation/ethereumjs-tx@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz#59dc7452b0862b30342966f7052ab9a1f7802f52" + integrity sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w== + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz#deb2b15d2c308a731e82977aefc4e61ca0ece6c5" + integrity sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-vm@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz#2bb50d332bf41790b01a3767ffec3987585d1de6" + integrity sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w== + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-evm" "^1.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@types/async-eventemitter" "^0.2.1" + async-eventemitter "^0.2.4" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.0.3.tgz#1d49e4ac028831a3011a9f3dca60bd1963185342" + integrity sha512-W+bIiNiZmiy+MTYFZn3nwjyPUO6wfWJ0lnXx2zZrM8xExKObMrhCh50yy8pQING24mHfpPFCn89wEB/iG7vZDw== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz#c0fccecc5506ff5466225e41e65691abafef3dbe" + integrity sha512-HuJd1K+2MgmFIYEpx46uzwEFjvzKAI765mmoMxy4K+Aqq1p+q7hHRlsFU2kx3NB8InwotkkIq3A5FLU1sI1WDw== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.0.3.tgz#8261d033f7172b347490cd005931ef8168ab4d73" + integrity sha512-2cR8JNy23jZaO/vZrsAnWCsO73asU7ylrHIe0fEsXbZYqBP9sMr+/+xP3CELDHJxUbzBY8zqGvQt1ULpyrG+Kw== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.0.3.tgz#1ba64b1d76425f8953dedc6367bd7dd46f31dfc5" + integrity sha512-Eyv50EfYbFthoOb0I1568p+eqHGLwEUhYGOxcRNywtlTE9nj+c+MT1LA53HnxD9GsboH4YtOOmJOulrjG7KtbA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.0.3.tgz#8d864c49b55e683f7e3b5cce9d10b628797280ac" + integrity sha512-V8grDqI+ivNrgwEt2HFdlwqV2/EQbYAdj3hbOvjrA8Qv+nq4h9jhQUxFpegYMDtpU8URJmNNlXgtfucSrAQwtQ== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.0.3.tgz#16e769500cf1a8bb42ab9498cee3b93c30f78295" + integrity sha512-uRfVDlxtwT1vIy7MAExWAkRD4r9M79zMG7S09mCrWUn58DbLs7UFl+dZXBX0/8FTGYWHhOT/1Etw1ZpAf5DTrg== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.0.3.tgz#75f4e1a25526d54c506e4eba63b3d698b6255b8f" + integrity sha512-8HPwYdLbhcPpSwsE0yiU/aZkXV43vlXT2ycH+XlOjWOnLfH8C41z0njK8DHRtEFnp4OVN6E7E5lHBBKDZXCliA== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.0.3.tgz#ef6e20cfad5eedfdb145cc34a44501644cd7d015" + integrity sha512-5WWcT6ZNvfCuxjlpZOY7tdvOqT1kIQYlDF9Q42wMpZ5aTm4PvjdCmFDDmmTvyXEBJ4WTVmY5dWNWaxy8h/E28g== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.0.3.tgz#98c4e3af9cee68896220fa7e270aefdf7fc89c7b" + integrity sha512-P/LWGZwWkyjSwkzq6skvS2wRc3gabzAbk6Akqs1/Iiuggql2CqdLBkcYWL5Xfv3haynhL+2jlNkak+v2BTZI4A== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.0.3.tgz#12da288e7ef17ec14848f19c1e8561fed20d231d" + integrity sha512-4AcTtLZG1s/S5mYAIr/sdzywdNwJpOcdStGF3QMBzEt+cGn3MchMaS9b1gyhb2KKM2c39SmPF5fUuWq1oBSQZQ== + +"@nomicfoundation/solidity-analyzer@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz#d1029f872e66cb1082503b02cc8b0be12f8dd95e" + integrity sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.0.3" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.0.3" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.0.3" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.0.3" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.0.3" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.0.3" + +"@nomiclabs/hardhat-ethers@^2.1.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz#3f1d1ab49813d1bae4c035cc1adec224711e528b" + integrity sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA== + +"@nomiclabs/hardhat-etherscan@^2.1.6": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz#e206275e96962cd15e5ba9148b44388bc922d8c2" + integrity sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^5.0.2" + debug "^4.1.1" + fs-extra "^7.0.1" + node-fetch "^2.6.0" + semver "^6.3.0" + +"@openzeppelin/contracts@^4.2.0", "@openzeppelin/contracts@^4.6.0": + version "4.7.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.7.3.tgz#939534757a81f8d69cc854c7692805684ff3111e" + integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== + +"@scure/base@~1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" + integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + +"@scure/bip32@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.0.tgz#dea45875e7fbc720c2b4560325f1cf5d2246d95b" + integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== + dependencies: + "@noble/hashes" "~1.1.1" + "@noble/secp256k1" "~1.6.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" + integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== + dependencies: + "@noble/hashes" "~1.1.1" + "@scure/base" "~1.1.0" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@solidity-parser/parser@^0.14.0": + version "0.14.3" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.3.tgz#0d627427b35a40d8521aaa933cc3df7d07bfa36f" + integrity sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@trufflesuite/bigint-buffer@1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" + integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== + dependencies: + node-gyp-build "4.4.0" + +"@typechain/hardhat@^2.3.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-2.3.1.tgz#1e8a6e3795e115a5d5348526282b5c597fab0b78" + integrity sha512-BQV8OKQi0KAzLXCdsPO0pZBNQQ6ra8A2ucC26uFX/kquRBtJu1yEyWnVSmtr07b5hyRoJRpzUeINLnyqz4/MAw== + dependencies: + fs-extra "^9.1.0" + +"@types/async-eventemitter@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" + integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== + +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" + integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== + dependencies: + "@types/node" "*" + +"@types/concat-stream@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== + dependencies: + "@types/node" "*" + +"@types/form-data@0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + dependencies: + "@types/node" "*" + +"@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/mocha@^9.0.0": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" + integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== + +"@types/node@*": + version "18.7.23" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.23.tgz#75c580983846181ebe5f4abc40fe9dfb2d65665f" + integrity sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg== + +"@types/node@^10.0.3": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/node@^12.12.6": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@types/node@^8.0.0": + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/qs@^6.2.31", "@types/qs@^6.9.7": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/secp256k1@^4.0.1": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + dependencies: + "@types/node" "*" + +"@types/seedrandom@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" + integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abortcontroller-polyfill@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz#1b5b487bd6436b5b764fd52a612509702c3144b5" + integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== + +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +aes-js@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" + integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.12.3: + 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@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" + integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +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== + +anymatch@~3.1.1, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-uniq@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +array.prototype.reduce@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz#8167e80089f78bff70a99e20bd4201d4663b0a6f" + integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +async-eventemitter@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async@^2.4.0: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +bigint-crypto-utils@^3.0.23: + version "3.1.6" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.1.6.tgz#3a52a660423416856342d0d9981935fa9856f177" + integrity sha512-k5ljSLHx94jQTW3+18KEfxLJR8/XFBHqhfhEGF48qT8p/jL6EdiG7oNOiiIRGMFh2wEP8kaCXZbVd+5dYkngUg== + dependencies: + bigint-mod-arith "^3.1.0" + +bigint-mod-arith@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/bigint-mod-arith/-/bigint-mod-arith-3.1.1.tgz#127c504faf30d27ba010ac7b7d58708a68e3c20b" + integrity sha512-SzFqdncZKXq5uh3oLFZXmzaZEMDsA7ml9l53xKaVGO6/+y26xNwAaTQEg2R+D+d07YduLbKi0dni3YPsR51UDQ== + +bignumber.js@^9.0.0, bignumber.js@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" + integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bufferutil@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== + dependencies: + node-gyp-build "^4.3.0" + +bufferutil@^4.0.1: + version "4.0.6" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" + integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== + dependencies: + node-gyp-build "^4.3.0" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +camelcase@^5.0.0: + 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.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caseless@^0.12.0, caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +cbor@^5.0.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" + integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== + dependencies: + bignumber.js "^9.0.1" + nofilter "^1.0.4" + +chai-as-promised@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" + integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + dependencies: + check-error "^1.0.2" + +chai-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/chai-string/-/chai-string-1.5.0.tgz#0bdb2d8a5f1dbe90bc78ec493c1c1c180dd4d3d2" + integrity sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw== + +chalk@^2.4.2: + version "2.4.2" + 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" + +chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +"charenc@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + +chokidar@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" + integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.2.0" + optionalDependencies: + fsevents "~2.1.1" + +chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +classic-level@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.2.0.tgz#2d52bdec8e7a27f534e67fdeb890abef3e643c27" + integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-table3@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@1.4.0, colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +commander@^8.1.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.6.0, concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-fetch@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +"crypt@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +debug@3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.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.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +diff@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" + integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encode-utf8@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.0, enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +es-abstract@^1.19.0, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.0, es-abstract@^1.20.1: + version "1.20.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.3.tgz#90b143ff7aedc8b3d189bcfac7f1e3e3f81e9da1" + integrity sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.6" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +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.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +eth-gas-reporter@^0.2.24, eth-gas-reporter@^0.2.25: + version "0.2.25" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz#546dfa946c1acee93cb1a94c2a1162292d6ff566" + integrity sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ== + dependencies: + "@ethersproject/abi" "^5.0.0-beta.146" + "@solidity-parser/parser" "^0.14.0" + cli-table3 "^0.5.0" + colors "1.4.0" + ethereum-cryptography "^1.0.3" + ethers "^4.0.40" + fs-readdir-recursive "^1.1.0" + lodash "^4.17.14" + markdown-table "^1.1.3" + mocha "^7.1.1" + req-cwd "^2.0.0" + request "^2.88.0" + request-promise-native "^1.0.5" + sha1 "^1.1.1" + sync-request "^6.0.0" + +ethereum-bloom-filters@^1.0.6: + version "1.0.10" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz#74f2ac0f0f5fe79f012c889b3b8446a9a6264e6d" + integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== + dependencies: + "@noble/hashes" "1.1.2" + "@noble/secp256k1" "1.6.3" + "@scure/bip32" "1.1.0" + "@scure/bip39" "1.1.0" + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.4: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethereumjs-wallet@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz#2c000504b4c71e8f3782dabe1113d192522e99b6" + integrity sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA== + dependencies: + aes-js "^3.1.2" + bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" + ethereumjs-util "^7.1.2" + randombytes "^2.1.0" + scrypt-js "^3.0.1" + utf8 "^3.0.0" + uuid "^8.3.2" + +ethers@^4.0.40: + version "4.0.49" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" + integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== + dependencies: + aes-js "3.0.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.4" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + +ethers@^5.6.8, ethers@^5.6.9: + version "5.7.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.1.tgz#48c83a44900b5f006eb2f65d3ba6277047fd4f33" + integrity sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.1" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +ext@^1.1.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1: + 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-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== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@5.0.0: + version "5.0.0" + 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" + path-exists "^4.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +flat@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" + integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== + dependencies: + is-buffer "~2.0.3" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== + dependencies: + imul "^1.0.0" + +follow-redirects@^1.12.1, follow-redirects@^1.14.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.2: + 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== + +ganache-cli@^6.12.2: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" + integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== + dependencies: + ethereumjs-util "6.2.1" + source-map-support "0.5.12" + yargs "13.2.4" + +ganache@^7.1.0: + version "7.4.3" + resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.4.3.tgz#e995f1250697264efbb34d4241c374a2b0271415" + integrity sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA== + dependencies: + "@trufflesuite/bigint-buffer" "1.1.10" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "5.1.1" + "@types/seedrandom" "3.0.1" + emittery "0.10.0" + keccak "3.0.2" + leveldown "6.1.0" + secp256k1 "4.0.3" + optionalDependencies: + bufferutil "4.0.5" + utf-8-validate "5.0.7" + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +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" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +glob-parent@~5.1.0, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hardhat-deploy-ethers@^0.3.0-beta.11: + version "0.3.0-beta.13" + resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz#b96086ff768ddf69928984d5eb0a8d78cfca9366" + integrity sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw== + +hardhat-deploy@^0.9.3: + version "0.9.29" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.9.29.tgz#b1177d4f3077f335ad3f50c55825d9417ec75968" + integrity sha512-8tIGszPFmOaXtyloCbASiZPvoAgLNGGL/Ubys3YW/oj4dvoPa8G6YDyaOCdsAhsENZ+QgR280NFSG9JdN7SU9Q== + dependencies: + "@ethersproject/abi" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.1" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.1" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/contracts" "^5.4.1" + "@ethersproject/providers" "^5.4.4" + "@ethersproject/solidity" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/wallet" "^5.4.0" + "@types/qs" "^6.9.7" + axios "^0.21.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" + enquirer "^2.3.6" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + +hardhat-gas-reporter@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz#9a2afb354bc3b6346aab55b1c02ca556d0e16450" + integrity sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg== + dependencies: + array-uniq "1.0.3" + eth-gas-reporter "^0.2.25" + sha1 "^1.1.1" + +hardhat@^2.9.5: + version "2.11.2" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.11.2.tgz#c81388630255823bb1717ec07c4ee651b1fbe97f" + integrity sha512-BdsXC1CFJQDJKmAgCwpmGhFuVU6dcqlgMgT0Kg/xmFAFVugkpYu6NRmh4AaJ3Fah0/BR9DOR4XgQGIbg4eon/Q== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-evm" "^1.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-vm" "^6.0.0" + "@nomicfoundation/solidity-analyzer" "^0.0.3" + "@sentry/node" "^5.18.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + abort-controller "^3.0.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + keccak "^3.0.2" + lodash "^4.17.11" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + qs "^6.7.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + tsort "0.0.1" + undici "^5.4.0" + 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.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== + +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== + dependencies: + "@types/node" "^10.0.3" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.4.24: + version "0.4.24" + 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" + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +immutable@^4.0.0-rc.12: + version "4.1.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +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.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + 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, is-buffer@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +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-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +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.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/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@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +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-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.3, is-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.9.tgz#246d77d2871e7d9f5aeb1d54b9f52c71329ece67" + integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/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" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +js-sha3@0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-yaml@3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +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-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +keccak@3.0.2, keccak@^3.0.0, keccak@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + optionalDependencies: + graceful-fs "^4.1.9" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-transcoder@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== + dependencies: + buffer "^6.0.3" + module-error "^1.0.1" + +level@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" + integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== + dependencies: + browser-level "^1.0.1" + classic-level "^1.2.0" + +leveldown@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" + integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +markdown-table@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + +match-all@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" + integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== + +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memory-level@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" + integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== + dependencies: + abstract-level "^1.0.0" + functional-red-black-tree "^1.0.1" + module-error "^1.0.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +mkdirp@0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" + integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +mocha@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" + integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== + dependencies: + ansi-colors "3.2.3" + browser-stdout "1.3.1" + chokidar "3.3.0" + debug "3.2.6" + diff "3.5.0" + escape-string-regexp "1.0.5" + find-up "3.0.0" + glob "7.1.3" + growl "1.10.5" + he "1.2.0" + js-yaml "3.13.1" + log-symbols "3.0.0" + minimatch "3.0.4" + mkdirp "0.5.5" + ms "2.1.1" + node-environment-flags "1.0.6" + object.assign "4.1.0" + strip-json-comments "2.0.1" + supports-color "6.0.0" + which "1.3.1" + wide-align "1.1.3" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "1.6.0" + +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-environment-flags@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" + integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== + dependencies: + object.getownpropertydescriptors "^2.0.3" + semver "^5.7.0" + +node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.6: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" + integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + +nofilter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" + integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.0.11, 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.assign@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +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.getownpropertydescriptors@^2.0.3: + version "2.1.4" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz#7965e6437a57278b587383831a9b829455a4bc37" + integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== + dependencies: + array.prototype.reduce "^1.0.4" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.1" + +obliterator@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== + dependencies: + http-https "^1.0.0" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.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.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/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== + +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.2.0.tgz#a1f6280ab67457fbfc8aad2b198c9497e9e5c806" + integrity sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg== + dependencies: + asap "~2.0.6" + +psl@^1.1.28: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +raw-body@^2.4.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^2.2.2: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" + integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== + dependencies: + picomatch "^2.0.4" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +req-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" + integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== + dependencies: + req-from "^2.0.0" + +req-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" + integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== + dependencies: + resolve-from "^3.0.0" + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.5: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.0: + version "2.0.2" + 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@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +rimraf@^2.2.8: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +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.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +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", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" + integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== + +scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +"scw-contracts-v1.0.0@npm:scw-contracts@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/scw-contracts/-/scw-contracts-1.0.0.tgz#aebbf0cabca5bb892b73511752e8b08cafe0c37e" + integrity sha512-23OsUVpMZZJMb9qe8Bu0rzz47BxhOQv9QdxlHdd/GeE2cnpe5atC36rs3wquXKzfMrru+NEKhlhyR8674hrBpg== + dependencies: + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/constants" "^5.6.1" + "@nomiclabs/hardhat-etherscan" "^2.1.6" + "@openzeppelin/contracts" "^4.2.0" + "@typechain/hardhat" "^2.3.0" + "@types/mocha" "^9.0.0" + chai-as-promised "^7.1.1" + chai-string "^1.5.0" + eth-gas-reporter "^0.2.24" + ethereumjs-util "^7.1.0" + ethereumjs-wallet "^1.0.1" + ethers "^5.6.8" + ganache "^7.1.0" + ganache-cli "^6.12.2" + hardhat "^2.9.5" + hardhat-deploy "^0.9.3" + hardhat-deploy-ethers "^0.3.0-beta.11" + hardhat-gas-reporter "^1.0.7" + solc "^0.8.15" + source-map-support "^0.5.19" + typescript "^4.3.5" + +"scw-contracts-v1.0.1@npm:scw-contracts@1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/scw-contracts/-/scw-contracts-1.0.7.tgz#1f0878d82ce114cd316f268127a5c2295553b553" + integrity sha512-5Y2vpNIeHW2VsBIaukkKNn1/bjBBQlR8Dbbpi/UrHPSKU8A577ezZJZbWKysqh21IuFDJ44YRzaQDtTlLBDYDg== + dependencies: + "@account-abstraction/contracts" "^0.2.0" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/constants" "^5.6.1" + "@nomiclabs/hardhat-etherscan" "^2.1.6" + "@openzeppelin/contracts" "^4.2.0" + "@typechain/hardhat" "^2.3.0" + "@types/mocha" "^9.0.0" + chai-as-promised "^7.1.1" + chai-string "^1.5.0" + eth-gas-reporter "^0.2.24" + ethereumjs-util "^7.1.0" + ethereumjs-wallet "^1.0.1" + ethers "^5.6.8" + ganache "^7.1.0" + ganache-cli "^6.12.2" + hardhat "^2.9.5" + hardhat-deploy "^0.9.3" + hardhat-deploy-ethers "^0.3.0-beta.11" + hardhat-gas-reporter "^1.0.7" + solc "^0.8.15" + source-map-support "^0.5.19" + typescript "^4.3.5" + +secp256k1@4.0.3, secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +semver@^5.5.0, semver@^5.7.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + 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== + +setimmediate@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" + integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.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-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== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +solc@^0.8.15: + version "0.8.17" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.17.tgz#c748fec6a64bf029ec406aa9b37e75938d1115ae" + integrity sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g== + dependencies: + command-exists "^1.2.8" + commander "^8.1.0" + follow-redirects "^1.12.1" + js-sha3 "0.8.0" + memorystream "^0.3.1" + semver "^5.5.0" + tmp "0.0.33" + +source-map-support@0.5.12: + version "0.5.12" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.13, source-map-support@^0.5.19: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sshpk@^1.7.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== + +"string-width@^1.0.2 || 2", string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +strip-json-comments@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" + integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== + dependencies: + has-flag "^3.0.0" + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +sync-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + +tmp@0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript@^4.3.5: + version "4.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.3.tgz#d59344522c4bc464a65a730ac695007fdb66dd88" + integrity sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig== + +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@^5.4.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.10.0.tgz#dd9391087a90ccfbd007568db458674232ebf014" + integrity sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +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.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== + dependencies: + node-gyp-build "^4.3.0" + +utf-8-validate@^5.0.2: + version "5.0.9" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" + integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== + dependencies: + node-gyp-build "^4.3.0" + +utf8@3.0.0, utf8@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.0: + version "0.12.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" + integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + +uuid@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" + integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +web3-core-helpers@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz#5dcfdda1a4ea277041d912003198f1334ca29d7c" + integrity sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw== + dependencies: + web3-eth-iban "1.8.0" + web3-utils "1.8.0" + +web3-core-method@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.8.0.tgz#9c2da8896808917d1679c319f19e2174ba17086c" + integrity sha512-c94RAzo3gpXwf2rf8rL8C77jOzNWF4mXUoUfZYYsiY35cJFd46jQDPI00CB5+ZbICTiA5mlVzMj4e7jAsTqiLA== + dependencies: + "@ethersproject/transactions" "^5.6.2" + web3-core-helpers "1.8.0" + web3-core-promievent "1.8.0" + web3-core-subscriptions "1.8.0" + web3-utils "1.8.0" + +web3-core-promievent@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.8.0.tgz#979765fd4d37ab0f158f0ee54037b279b737bd53" + integrity sha512-FGLyjAuOaAQ+ZhV6iuw9tg/9WvIkSZXKHQ4mdTyQ8MxVraOtFivOCbuLLsGgapfHYX+RPxsc1j1YzQjKoupagQ== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.8.0.tgz#06189df80cf52d24a195a7ef655031afe8192df3" + integrity sha512-2AoYCs3Owl5foWcf4uKPONyqFygSl9T54L8b581U16nsUirjhoTUGK/PBhMDVcLCmW4QQmcY5A8oPFpkQc1TTg== + dependencies: + util "^0.12.0" + web3-core-helpers "1.8.0" + web3-providers-http "1.8.0" + web3-providers-ipc "1.8.0" + web3-providers-ws "1.8.0" + +web3-core-subscriptions@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.8.0.tgz#ff66ae4467c8cb4716367248bcefb1845c0f8b83" + integrity sha512-7lHVRzDdg0+Gcog55lG6Q3D8JV+jN+4Ly6F8cSn9xFUAwOkdbgdWsjknQG7t7CDWy21DQkvdiY2BJF8S68AqOA== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.8.0" + +web3-core@^1.7.1, web3-core@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.8.0.tgz#90afce527ac1b1dff8cbed2acbc0336530b8aacf" + integrity sha512-9sCA+Z02ci6zoY2bAquFiDjujRwmSKHiSGi4B8IstML8okSytnzXk1izHYSynE7ahIkguhjWAuXFvX76F5rAbA== + dependencies: + "@types/bn.js" "^5.1.0" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.8.0" + web3-core-method "1.8.0" + web3-core-requestmanager "1.8.0" + web3-utils "1.8.0" + +web3-eth-iban@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz#3af8a0c95b5f7b0b81ab0bcd2075c1e5dda31520" + integrity sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg== + dependencies: + bn.js "^5.2.1" + web3-utils "1.8.0" + +web3-providers-http@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.8.0.tgz#3fd1e569ead2095343fac17d53160a3bae674c23" + integrity sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw== + dependencies: + abortcontroller-polyfill "^1.7.3" + cross-fetch "^3.1.4" + es6-promise "^4.2.8" + web3-core-helpers "1.8.0" + +web3-providers-ipc@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.8.0.tgz#d339a24c4d764e459e425d3ac868a551ac33e3ea" + integrity sha512-tAXHtVXNUOgehaBU8pzAlB3qhjn/PRpjdzEjzHNFqtRRTwzSEKOJxFeEhaUA4FzHnTlbnrs8ujHWUitcp1elfg== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.8.0" + +web3-providers-ws@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.8.0.tgz#a0a73e0606981ea32bed40d215000a64753899de" + integrity sha512-bcZtSifsqyJxwkfQYamfdIRp4nhj9eJd7cxHg1uUkfLJK125WP96wyJL1xbPt7qt0MpfnTFn8/UuIqIB6nFENg== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.8.0" + websocket "^1.0.32" + +web3-utils@1.8.0, web3-utils@^1.7.1, web3-utils@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.8.0.tgz#0a506f8c6af9a2ad6ba79689892662769534fc03" + integrity sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ== + dependencies: + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +websocket@^1.0.32: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +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.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + +which-typed-array@^1.1.2: + version "1.1.8" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.8.tgz#0cfd53401a6f334d90ed1125754a42ed663eb01f" + integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.9" + +which@1.3.1, 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" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +xmlhttprequest@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== + +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.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" + integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== + dependencies: + flat "^4.1.0" + lodash "^4.17.15" + yargs "^13.3.0" + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.0" + +yargs@13.3.2, yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.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 "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 1a090a1772e0f6079f16cb150c2c9a991a824fe0 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 27 Sep 2022 23:51:09 +0400 Subject: [PATCH 0151/1247] update packages + init smart account error handling in node api --- .gitignore | 4 ++++ package.json | 2 +- packages/core-types/package.json | 7 +++--- packages/ethers-lib/package.json | 7 +++--- packages/gas-estimator/package.json | 9 +++----- packages/node-client/package.json | 7 +++--- packages/relayer/package.json | 7 +++--- packages/smart-account/package.json | 7 +++--- packages/smart-account/src/SmartAccount.ts | 25 ++++++++++++++++++---- packages/transactions/package.json | 7 +++--- rebuild.sh | 4 ++++ 11 files changed, 57 insertions(+), 29 deletions(-) diff --git a/.gitignore b/.gitignore index a7e8216eb..15487d50e 100644 --- a/.gitignore +++ b/.gitignore @@ -54,8 +54,12 @@ cache artifacts deployments +packages/common/src/types/ + # lockfiles packages/core-types/package-lock.json +packages/account-abstraction/package-lock.json +packages/common/package-lock.json packages/ethers-lib/package-lock.json packages/node-client/package-lock.json packages/relayer/package-lock.json diff --git a/package.json b/package.json index 78046820e..c497e6bcf 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.7.13", + "nx": "^14.7.17", "prettier": "2.7.1", "ts-node": "^10.9.1" }, diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 7cd530ce0..bdcacff93 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -2,8 +2,8 @@ "name": "@biconomy-sdk/core-types", "version": "1.0.11", "description": "Biconomy Client SDK types", - "main": "dist/src/index.js", - "typings": "dist/src/index.d.ts", + "main": "./dist/src/index.js", + "typings": "./dist/src/index.d.ts", "keywords": [ "Ethereum", "Gnosis", @@ -19,7 +19,8 @@ "author": "Biconomy (https://biconomy.io)", "license": "MIT", "files": [ - "dist" + "dist/*", + "README.md" ], "devDependencies": { "@types/node": "^17.0.23", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 23ef177e6..5413f613c 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -2,8 +2,8 @@ "name": "@biconomy-sdk/ethers-lib", "version": "1.0.11", "description": "Ethers library adapter to be used by Biconomy SDK", - "main": "dist/src/index.js", - "typings": "dist/src/index.d.ts", + "main": "./dist/src/index.js", + "typings": "./dist/src/index.d.ts", "keywords": [ "Ethereum", "SDK", @@ -19,7 +19,8 @@ "author": "Biconomy (https://biconomy.io)", "license": "MIT", "files": [ - "dist" + "dist/*", + "README.md" ], "devDependencies": { "@nomiclabs/hardhat-ethers": "^2.1.0", diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index 659219bab..9bf2d6829 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -10,13 +10,10 @@ "author": "livingrockrises ", "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", "license": "MIT", - "main": "dist/src/index.js", - "directories": { - "lib": "lib", - "test": "__tests__" - }, + "main": "./dist/src/index.js", "files": [ - "lib" + "dist/*", + "README.md" ], "publishConfig": { "access": "public" diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 04116b65c..a75c21eb6 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -2,8 +2,8 @@ "name": "@biconomy-sdk/node-client", "version": "1.0.11", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", - "main": "dist/src/index.js", - "typings": "dist/src/index.d.ts", + "main": "./dist/src/index.js", + "typings": "./dist/src/index.d.ts", "keywords": [ "Ethereum", "Gnosis", @@ -19,7 +19,8 @@ "author": "Biconomy (https://biconomy.io)", "license": "MIT", "files": [ - "dist" + "dist/*", + "README.md" ], "devDependencies": { "@gnosis.pm/safe-core-sdk": "^2.1.0", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 17a962d43..d30a0926b 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -8,10 +8,11 @@ "author": "livingrockrises ", "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", "license": "MIT", - "main": "dist/src/index.js", - "typings": "dist/src/index.d.ts", + "main": "./dist/src/index.js", + "typings": "./dist/src/index.d.ts", "files": [ - "dist" + "dist/*", + "README.md" ], "repository": { "type": "git", diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 8224b7a21..b25abb400 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -2,8 +2,8 @@ "name": "@biconomy-sdk/smart-account", "version": "1.0.11", "description": "Biconomy Client SDK types", - "main": "dist/src/index.js", - "typings": "dist/src/index.d.ts", + "main": "./dist/src/index.js", + "typings": "./dist/src/index.d.ts", "keywords": [ "Ethereum", "Gnosis", @@ -24,7 +24,8 @@ "author": "Biconomy (https://biconomy.io)", "license": "MIT", "files": [ - "dist" + "dist/*", + "README.md" ], "publishConfig": { "access": "public" diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 13d6f79bd..8b24d48f1 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -78,6 +78,7 @@ import { UsdBalanceResponse, EstimateGasResponse } from '@biconomy-sdk/node-client' +import { stringify } from 'querystring' // Create an instance of Smart Account with multi-chain support. class SmartAccount { @@ -787,13 +788,21 @@ class SmartAccount { transaction: internalTx } - const response = await this.estimateRequiredTxGas(estimateRequiredTxGas); + let response, gas; + try { + response = await this.estimateRequiredTxGas(estimateRequiredTxGas); + gas = response.data.gas; + } catch(error: any) { + console.log('error in gas estimation ', stringify(error)) + gas = 0 + throw new Error('Failed gas estimation. Check assets in smart account for this transaction to go through') + } // considerable offset ref gnosis safe service client safeTxGas // @Talha // TODO // handle exception responses and when gas returned is 0 // We could stop the further flow - const requiredTxGasEstimate = Number(response.data.gas) + 30000 + const requiredTxGasEstimate = Number(gas) + 30000 console.log('required txgas estimate ', requiredTxGasEstimate); targetTxGas = requiredTxGasEstimate; @@ -973,13 +982,21 @@ class SmartAccount { baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; } else { - const response = await this.estimateRequiredTxGas({chainId, walletAddress: this.address, transaction: internalTx}) + let response, gas; + try { + response = await this.estimateRequiredTxGas({chainId, walletAddress: this.address, transaction: internalTx}) + gas = response.data.gas; + } catch(error: any) { + console.log('error in gas estimation ', stringify(error)) + gas = 0 + throw new Error('Failed gas estimation. Check assets in smart account for this transaction to go through') + } // considerable offset ref gnosis safe service client safeTxGas // @Talha // TODO // handle exception responses and when gas returned is 0 // We could stop the further flow - const requiredTxGasEstimate = Number(response.data.gas) + 30000 + const requiredTxGasEstimate = Number(gas) + 30000 console.log('required txgas estimate ', requiredTxGasEstimate); targetTxGas = requiredTxGasEstimate; diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 5afb70754..ef77ccf87 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -2,8 +2,8 @@ "name": "@biconomy-sdk/transactions", "version": "1.0.11", "description": "utils for sending all transaction legos", - "main": "dist/src/index.js", - "typings": "dist/src/index.d.ts", + "main": "./dist/src/index.js", + "typings": "./dist/src/index.d.ts", "keywords": [ "legos", "batching", @@ -14,7 +14,8 @@ "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", "license": "MIT", "files": [ - "dist" + "dist/*", + "README.md" ], "repository": { "type": "git", diff --git a/rebuild.sh b/rebuild.sh index 7d05628ac..96bfe58bc 100755 --- a/rebuild.sh +++ b/rebuild.sh @@ -6,6 +6,10 @@ rm -rf packages/account-abstraction/node_modules rm -rf packages/account-abstraction/package-lock.json rm -rf packages/account-abstraction/dist +rm -rf packages/common/node_modules +rm -rf packages/common/package-lock.json +rm -rf packages/common/dist + rm -rf packages/core-types/node_modules rm -rf packages/core-types/package-lock.json rm -rf packages/core-types/dist From 86419cfbb6f9560aedc273d06ca0936313e662c3 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 28 Sep 2022 00:19:33 +0400 Subject: [PATCH 0152/1247] init with helpers in place --- .../account-abstraction/hardhat.config.ts | 15 + packages/account-abstraction/package.json | 36 ++- .../account-abstraction/src/BaseWalletAPI.ts | 262 ++++++++++++++++++ .../account-abstraction/src/ClientConfig.ts | 6 + .../src/DeterministicDeployer.ts | 102 +++++++ .../src/ERC4337EthersProvider.ts | 115 ++++++++ .../src/ERC4337EthersSigner.ts | 98 +++++++ .../account-abstraction/src/HttpRpcClient.ts | 48 ++++ .../account-abstraction/src/PaymasterAPI.ts | 8 + packages/account-abstraction/src/Provider.ts | 31 +++ .../src/SimpleWalletAPI.ts | 104 +++++++ .../src/TransactionDetailsForUserOp.ts | 10 + .../src/UserOperationEventListener.ts | 95 +++++++ packages/account-abstraction/src/index.ts | 6 + .../test/0-deterministicDeployer.test.ts | 25 ++ .../test/1-SimpleWalletAPI.test.ts | 90 ++++++ .../test/2-ERC4337EthersProvider.test.ts | 20 ++ .../test/3-ERC4337EthersSigner.test.ts | 76 +++++ packages/common/README.md | 11 + .../common/contracts/test/SampleRecipient.sol | 21 ++ .../contracts/test/SingletonFactory.sol | 26 ++ packages/common/hardhat.config.ts | 19 ++ packages/common/package.json | 48 ++++ packages/common/src/ERC4337Utils.ts | 81 ++++++ packages/common/src/SolidityTypeAliases.ts | 11 + packages/common/src/Version.ts | 2 + packages/common/src/index.ts | 2 + 27 files changed, 1363 insertions(+), 5 deletions(-) create mode 100644 packages/account-abstraction/hardhat.config.ts create mode 100644 packages/account-abstraction/src/BaseWalletAPI.ts create mode 100644 packages/account-abstraction/src/ClientConfig.ts create mode 100644 packages/account-abstraction/src/DeterministicDeployer.ts create mode 100644 packages/account-abstraction/src/ERC4337EthersProvider.ts create mode 100644 packages/account-abstraction/src/ERC4337EthersSigner.ts create mode 100644 packages/account-abstraction/src/HttpRpcClient.ts create mode 100644 packages/account-abstraction/src/PaymasterAPI.ts create mode 100644 packages/account-abstraction/src/Provider.ts create mode 100644 packages/account-abstraction/src/SimpleWalletAPI.ts create mode 100644 packages/account-abstraction/src/TransactionDetailsForUserOp.ts create mode 100644 packages/account-abstraction/src/UserOperationEventListener.ts create mode 100644 packages/account-abstraction/src/index.ts create mode 100644 packages/account-abstraction/test/0-deterministicDeployer.test.ts create mode 100644 packages/account-abstraction/test/1-SimpleWalletAPI.test.ts create mode 100644 packages/account-abstraction/test/2-ERC4337EthersProvider.test.ts create mode 100644 packages/account-abstraction/test/3-ERC4337EthersSigner.test.ts create mode 100644 packages/common/README.md create mode 100644 packages/common/contracts/test/SampleRecipient.sol create mode 100644 packages/common/contracts/test/SingletonFactory.sol create mode 100644 packages/common/hardhat.config.ts create mode 100644 packages/common/package.json create mode 100644 packages/common/src/ERC4337Utils.ts create mode 100644 packages/common/src/SolidityTypeAliases.ts create mode 100644 packages/common/src/Version.ts create mode 100644 packages/common/src/index.ts diff --git a/packages/account-abstraction/hardhat.config.ts b/packages/account-abstraction/hardhat.config.ts new file mode 100644 index 000000000..ae7ce15b3 --- /dev/null +++ b/packages/account-abstraction/hardhat.config.ts @@ -0,0 +1,15 @@ +import '@nomiclabs/hardhat-ethers' +import '@nomicfoundation/hardhat-toolbox' + +import { HardhatUserConfig } from 'hardhat/config' + +const config: HardhatUserConfig = { + solidity: { + version: '0.8.15', + settings: { + optimizer: { enabled: true } + } + } +} + +export default config diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index b1e23728e..d4c36a757 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -11,12 +11,9 @@ "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", "license": "MIT", "main": "dist/src/index.js", - "directories": { - "lib": "lib", - "test": "__tests__" - }, "files": [ - "lib" + "dist/*", + "README.md" ], "publishConfig": { "access": "public" @@ -26,8 +23,37 @@ "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" }, "scripts": { + "clear": "rm -rf dist artifacts cache", + "lint": "eslint -f unix .", + "lint-fix": "eslint -f unix . --fix", + "test": "hardhat test", + "build": "hardhat compile && yarn typechain && tsc", + "hardhat-test": "hardhat test", + "tsc": "tsc", + "watch-tsc": "tsc -w --preserveWatchOutput" }, "bugs": { "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" + }, + "dependencies": { + "@account-abstraction/contracts": "^0.2.0", + "@biconomy-sdk/common": "1.0.11", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/providers": "^5.7.0", + "@nomiclabs/hardhat-ethers": "^2.0.0", + "ethers": "^5.7.0", + "hardhat": "^2.9.7" + }, + "devDependencies": { + "@biconomy-sdk/core-types": "1.0.11", + "@biconomy-sdk/common": "1.0.11", + "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", + "@nomicfoundation/hardhat-toolbox": "^1.0.2", + "@nomiclabs/hardhat-ethers": "^2.0.0", + "chai": "^4.3.6", + "hardhat": "^2.9.7" } } diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts new file mode 100644 index 000000000..ac096fc6d --- /dev/null +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -0,0 +1,262 @@ +import { ethers, BigNumber, BigNumberish } from 'ethers' +import { Provider } from '@ethersproject/providers' +import { + EntryPoint, EntryPoint__factory, + UserOperationStruct +} from '@account-abstraction/contracts' + +import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp' +import { resolveProperties } from 'ethers/lib/utils' +import { PaymasterAPI } from './PaymasterAPI' +import { getRequestId } from '@biconomy-sdk/common' + +/** + * Base class for all Smart Wallet ERC-4337 Clients to implement. + * Subclass should inherit 5 methods to support a specific wallet contract: + * + * - getWalletInitCode - return the value to put into the "initCode" field, if the wallet is not yet deployed. should create the wallet instance using a factory contract. + * - getNonce - return current wallet's nonce value + * - encodeExecute - encode the call from entryPoint through our wallet to the target contract. + * - signRequestId - sign the requestId of a UserOp. + * + * The user can use the following APIs: + * - createUnsignedUserOp - given "target" and "calldata", fill userOp to perform that operation from the wallet. + * - createSignedUserOp - helper to call the above createUnsignedUserOp, and then extract the requestId and sign it + */ +export abstract class BaseWalletAPI { + private senderAddress!: string + private isPhantom = true + // entryPoint connected to "zero" address. allowed to make static calls (e.g. to getSenderAddress) + private readonly entryPointView: EntryPoint + + /** + * subclass MAY initialize to support custom paymaster + */ + paymasterAPI?: PaymasterAPI + + /** + * base constructor. + * subclass SHOULD add parameters that define the owner (signer) of this wallet + * @param provider - read-only provider for view calls + * @param entryPointAddress - the entryPoint to send requests through (used to calculate the request-id, and for gas estimations) + * @param walletAddress. may be empty for new wallet (using factory to determine address) + */ + protected constructor ( + readonly provider: Provider, + readonly entryPointAddress: string, + readonly walletAddress?: string + ) { + // factory "connect" define the contract address. the contract "connect" defines the "from" address. + this.entryPointView = EntryPoint__factory.connect(entryPointAddress, provider).connect(ethers.constants.AddressZero) + } + + async init (): Promise { + await this.getWalletAddress() + return this + } + + /** + * return the value to put into the "initCode" field, if the wallet is not yet deployed. + * this value holds the "factory" address, followed by this wallet's information + */ + abstract getWalletInitCode (): Promise + + /** + * return current wallet's nonce. + */ + abstract getNonce (): Promise + + /** + * encode the call from entryPoint through our wallet to the target contract. + * @param target + * @param value + * @param data + */ + abstract encodeExecute (target: string, value: BigNumberish, data: string): Promise + + /** + * sign a userOp's hash (requestId). + * @param requestId + */ + abstract signRequestId (requestId: string): Promise + + /** + * check if the wallet is already deployed. + */ + async checkWalletPhantom (): Promise { + if (!this.isPhantom) { + // already deployed. no need to check anymore. + return this.isPhantom + } + const senderAddressCode = await this.provider.getCode(this.getWalletAddress()) + if (senderAddressCode.length > 2) { + console.log(`SimpleWallet Contract already deployed at ${this.senderAddress}`) + this.isPhantom = false + } else { + // console.log(`SimpleWallet Contract is NOT YET deployed at ${this.senderAddress} - working in "phantom wallet" mode.`) + } + return this.isPhantom + } + + /** + * calculate the wallet address even before it is deployed + */ + async getCounterFactualAddress (): Promise { + const initCode = this.getWalletInitCode() + // use entryPoint to query wallet address (factory can provide a helper method to do the same, but + // this method attempts to be generic + return await this.entryPointView.callStatic.getSenderAddress(initCode) + } + + /** + * return initCode value to into the UserOp. + * (either deployment code, or empty hex if contract already deployed) + */ + async getInitCode (): Promise { + if (await this.checkWalletPhantom()) { + return await this.getWalletInitCode() + } + return '0x' + } + + /** + * return maximum gas used for verification. + * NOTE: createUnsignedUserOp will add to this value the cost of creation, if the wallet is not yet created. + */ + async getVerificationGasLimit (): Promise { + return 100000 + } + + /** + * should cover cost of putting calldata on-chain, and some overhead. + * actual overhead depends on the expected bundle size + */ + async getPreVerificationGas (userOp: Partial): Promise { + console.log(userOp) + const bundleSize = 1 + const cost = 21000 + // TODO: calculate calldata cost + return Math.floor(cost / bundleSize) + } + + async encodeUserOpCallDataAndGasLimit (detailsForUserOp: TransactionDetailsForUserOp): Promise<{ callData: string, callGasLimit: BigNumber }> { + function parseNumber (a: any): BigNumber | null { + if (a == null || a === '') return null + return BigNumber.from(a.toString()) + } + + const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0) + const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data) + + const callGasLimit = parseNumber(detailsForUserOp.gasLimit) ?? await this.provider.estimateGas({ + from: this.entryPointAddress, + to: this.getWalletAddress(), + data: callData + }) + + return { + callData, + callGasLimit + } + } + + /** + * return requestId for signing. + * This value matches entryPoint.getRequestId (calculated off-chain, to avoid a view call) + * @param userOp userOperation, (signature field ignored) + */ + async getRequestId (userOp: UserOperationStruct): Promise { + const op = await resolveProperties(userOp) + const chainId = await this.provider.getNetwork().then(net => net.chainId) + return getRequestId(op, this.entryPointAddress, chainId) + } + + /** + * return the wallet's address. + * this value is valid even before deploying the wallet. + */ + async getWalletAddress (): Promise { + if (this.senderAddress == null) { + if (this.walletAddress != null) { + this.senderAddress = this.walletAddress + } else { + this.senderAddress = await this.getCounterFactualAddress() + } + } + return this.senderAddress + } + + /** + * create a UserOperation, filling all details (except signature) + * - if wallet is not yet created, add initCode to deploy it. + * - if gas or nonce are missing, read them from the chain (note that we can't fill gaslimit before the wallet is created) + * @param info + */ + async createUnsignedUserOp (info: TransactionDetailsForUserOp): Promise { + const { + callData, + callGasLimit + } = await this.encodeUserOpCallDataAndGasLimit(info) + const initCode = await this.getInitCode() + + let verificationGasLimit = BigNumber.from(await this.getVerificationGasLimit()) + if (initCode.length > 2) { + // add creation to required verification gas + const initGas = await this.entryPointView.estimateGas.getSenderAddress(initCode) + verificationGasLimit = verificationGasLimit.add(initGas) + } + + let { + maxFeePerGas, + maxPriorityFeePerGas + } = info + if (maxFeePerGas == null || maxPriorityFeePerGas == null) { + const feeData = await this.provider.getFeeData() + if (maxFeePerGas == null) { + maxFeePerGas = feeData.maxFeePerGas ?? undefined + } + if (maxPriorityFeePerGas == null) { + maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? undefined + } + } + + const partialUserOp: any = { + sender: this.getWalletAddress(), + nonce: this.getNonce(), + initCode, + callData, + callGasLimit, + verificationGasLimit, + maxFeePerGas, + maxPriorityFeePerGas + } + + partialUserOp.paymasterAndData = this.paymasterAPI == null ? '0x' : await this.paymasterAPI.getPaymasterAndData(partialUserOp) + return { + ...partialUserOp, + preVerificationGas: this.getPreVerificationGas(partialUserOp), + signature: '' + } + } + + /** + * Sign the filled userOp. + * @param userOp the UserOperation to sign (with signature field ignored) + */ + async signUserOp (userOp: UserOperationStruct): Promise { + const requestId = await this.getRequestId(userOp) + const signature = this.signRequestId(requestId) + return { + ...userOp, + signature + } + } + + /** + * helper method: create and sign a user operation. + * @param info transaction details for the userOp + */ + async createSignedUserOp (info: TransactionDetailsForUserOp): Promise { + return await this.signUserOp(await this.createUnsignedUserOp(info)) + } +} diff --git a/packages/account-abstraction/src/ClientConfig.ts b/packages/account-abstraction/src/ClientConfig.ts new file mode 100644 index 000000000..c688d12ec --- /dev/null +++ b/packages/account-abstraction/src/ClientConfig.ts @@ -0,0 +1,6 @@ +export interface ClientConfig { + paymasterAddress?: string + entryPointAddress: string + bundlerUrl: string + chainId: number +} diff --git a/packages/account-abstraction/src/DeterministicDeployer.ts b/packages/account-abstraction/src/DeterministicDeployer.ts new file mode 100644 index 000000000..c148cb783 --- /dev/null +++ b/packages/account-abstraction/src/DeterministicDeployer.ts @@ -0,0 +1,102 @@ +import { ethers } from "hardhat"; +import { BigNumber, BigNumberish } from 'ethers' +import { hexConcat, hexlify, hexZeroPad, keccak256 } from 'ethers/lib/utils' +import { TransactionRequest } from '@ethersproject/abstract-provider' + +/** + * wrapper class for Arachnid's deterministic deployer + * (deterministic deployer used by 'hardhat-deployer'. generates the same addresses as "hardhat-deploy") + */ +export class DeterministicDeployer { + /** + * return the address this code will get deployed to. + * @param ctrCode constructor code to pass to CREATE2 + * @param salt optional salt. defaults to zero + */ + static async getAddress (ctrCode: string, salt: BigNumberish = 0): Promise { + return await DeterministicDeployer.instance.getDeterministicDeployAddress(ctrCode, salt) + } + + /** + * deploy the contract, unless already deployed + * @param ctrCode constructor code to pass to CREATE2 + * @param salt optional salt. defaults to zero + * @return the deployed address + */ + static async deploy (ctrCode: string, salt: BigNumberish = 0): Promise { + return await DeterministicDeployer.instance.deterministicDeploy(ctrCode, salt) + } + + // from: https://github.com/Arachnid/deterministic-deployment-proxy + proxyAddress = '0x4e59b44847b379578588920ca78fbf26c0b4956c' + deploymentTransaction = '0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222' + deploymentSignerAddress = '0x3fab184622dc19b6109349b94811493bf2a45362' + deploymentGasPrice = 100e9 + deploymentGasLimit = 100000 + + constructor (readonly provider = ethers.provider) { + } + + async isContractDeployed (address: string): Promise { + return await this.provider.getCode(address).then((code: string | any[]) => code.length > 2) + } + + async isDeployerDeployed (): Promise { + return await this.isContractDeployed(this.proxyAddress) + } + + async deployDeployer (): Promise { + if (await this.isContractDeployed(this.proxyAddress)) { + return + } + const bal = await this.provider.getBalance(this.deploymentSignerAddress) + const neededBalance = BigNumber.from(this.deploymentGasLimit).mul(this.deploymentGasPrice) + const signer = this.provider.getSigner() + if (bal.lt(neededBalance)) { + await signer.sendTransaction({ + to: this.deploymentSignerAddress, + value: neededBalance, + gasLimit: this.deploymentGasLimit + }) + } + await this.provider.send('eth_sendRawTransaction', [this.deploymentTransaction]) + if (!await this.isContractDeployed(this.proxyAddress)) { + throw new Error('raw TX didn\'t deploy deployer!') + } + } + + async getDeployTransaction (ctrCode: string, salt: BigNumberish = 0): Promise { + await this.deployDeployer() + const saltEncoded = hexZeroPad(hexlify(salt), 32) + return { + to: this.proxyAddress, + data: hexConcat([ + saltEncoded, + ctrCode]) + } + } + + async getDeterministicDeployAddress (ctrCode: string, salt: BigNumberish = 0): Promise { + // this method works only before the contract is already deployed: + // return await this.provider.call(await this.getDeployTransaction(ctrCode, salt)) + const saltEncoded = hexZeroPad(hexlify(salt), 32) + + return '0x' + keccak256(hexConcat([ + '0xff', + this.proxyAddress, + saltEncoded, + keccak256(ctrCode) + ])).slice(-40) + } + + async deterministicDeploy (ctrCode: string, salt: BigNumberish = 0): Promise { + const addr = await this.getDeterministicDeployAddress(ctrCode, salt) + if (!await this.isContractDeployed(addr)) { + await this.provider.getSigner().sendTransaction( + await this.getDeployTransaction(ctrCode, salt)) + } + return addr + } + + static instance = new DeterministicDeployer() +} diff --git a/packages/account-abstraction/src/ERC4337EthersProvider.ts b/packages/account-abstraction/src/ERC4337EthersProvider.ts new file mode 100644 index 000000000..d4af2a2d0 --- /dev/null +++ b/packages/account-abstraction/src/ERC4337EthersProvider.ts @@ -0,0 +1,115 @@ +import { BaseProvider, TransactionReceipt, TransactionResponse } from '@ethersproject/providers' +import { BigNumber, Signer } from 'ethers' +import { Network } from '@ethersproject/networks' +import { hexValue, resolveProperties } from 'ethers/lib/utils' +import { getRequestId } from '@biconomy-sdk/common' +import { ClientConfig } from './ClientConfig' +import { ERC4337EthersSigner } from './ERC4337EthersSigner' +import { UserOperationEventListener } from './UserOperationEventListener' +import { HttpRpcClient } from './HttpRpcClient' +import { EntryPoint, UserOperationStruct } from '@account-abstraction/contracts' +import { BaseWalletAPI } from './BaseWalletAPI' + +export class ERC4337EthersProvider extends BaseProvider { + initializedBlockNumber!: number + + readonly signer: ERC4337EthersSigner + + constructor ( + readonly config: ClientConfig, + readonly originalSigner: Signer, + readonly originalProvider: BaseProvider, + readonly httpRpcClient: HttpRpcClient, + readonly entryPoint: EntryPoint, + readonly smartWalletAPI: BaseWalletAPI + ) { + super({ + name: 'ERC-4337 Custom Network', + chainId: config.chainId + }) + this.signer = new ERC4337EthersSigner(config, originalSigner, this, httpRpcClient, smartWalletAPI) + } + + async init (): Promise { + this.initializedBlockNumber = await this.originalProvider.getBlockNumber() + await this.smartWalletAPI.init() + // await this.signer.init() + return this + } + + getSigner (): ERC4337EthersSigner { + return this.signer + } + + async perform (method: string, params: any): Promise { + if (method === 'sendTransaction' || method === 'getTransactionReceipt') { + // TODO: do we need 'perform' method to be available at all? + // there is nobody out there to use it for ERC-4337 methods yet, we have nothing to override in fact. + throw new Error('Should not get here. Investigate.') + } + return await this.originalProvider.perform(method, params) + } + + async getTransaction (transactionHash: string | Promise): Promise { + // TODO + return await super.getTransaction(transactionHash) + } + + async getTransactionReceipt (transactionHash: string | Promise): Promise { + const requestId = await transactionHash + const sender = await this.getSenderWalletAddress() + return await new Promise((resolve, reject) => { + new UserOperationEventListener( + resolve, reject, this.entryPoint, sender, requestId + ).start() + }) + } + + async getSenderWalletAddress (): Promise { + return await this.smartWalletAPI.getWalletAddress() + } + + async waitForTransaction (transactionHash: string, confirmations?: number, timeout?: number): Promise { + console.log(confirmations) + const sender = await this.getSenderWalletAddress() + + return await new Promise((resolve, reject) => { + const listener = new UserOperationEventListener(resolve, reject, this.entryPoint, sender, transactionHash, undefined, timeout) + listener.start() + }) + } + + // fabricate a response in a format usable by ethers users... + async constructUserOpTransactionResponse (userOp1: UserOperationStruct): Promise { + const userOp = await resolveProperties(userOp1) + const requestId = getRequestId(userOp, this.config.entryPointAddress, this.config.chainId) + const waitPromise = new Promise((resolve, reject) => { + new UserOperationEventListener( + resolve, reject, this.entryPoint, userOp.sender, requestId, userOp.nonce + ).start() + }) + return { + hash: requestId, + confirmations: 0, + from: userOp.sender, + nonce: BigNumber.from(userOp.nonce).toNumber(), + gasLimit: BigNumber.from(userOp.callGasLimit), // ?? + value: BigNumber.from(0), + data: hexValue(userOp.callData), // should extract the actual called method from this "execFromEntryPoint()" call + chainId: this.config.chainId, + wait: async (confirmations?: number): Promise => { + console.log(confirmations) + const transactionReceipt = await waitPromise + if (userOp.initCode.length !== 0) { + // checking if the wallet has been deployed by the transaction; it must be if we are here + await this.smartWalletAPI.checkWalletPhantom() + } + return transactionReceipt + } + } + } + + async detectNetwork (): Promise { + return (this.originalProvider as any).detectNetwork() + } +} diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts new file mode 100644 index 000000000..391ace4f4 --- /dev/null +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -0,0 +1,98 @@ +import { Deferrable, defineReadOnly } from '@ethersproject/properties' +import { Provider, TransactionRequest, TransactionResponse } from '@ethersproject/providers' +import { Signer } from '@ethersproject/abstract-signer' + +import { Bytes } from 'ethers' +import { ERC4337EthersProvider } from './ERC4337EthersProvider' +import { ClientConfig } from './ClientConfig' +import { HttpRpcClient } from './HttpRpcClient' +import { UserOperationStruct } from '@account-abstraction/contracts' +import { BaseWalletAPI } from './BaseWalletAPI' + +export class ERC4337EthersSigner extends Signer { + // TODO: we have 'erc4337provider', remove shared dependencies or avoid two-way reference + constructor ( + readonly config: ClientConfig, + readonly originalSigner: Signer, + readonly erc4337provider: ERC4337EthersProvider, + readonly httpRpcClient: HttpRpcClient, + readonly smartWalletAPI: BaseWalletAPI) { + super() + defineReadOnly(this, 'provider', erc4337provider) + } + + // This one is called by Contract. It signs the request and passes in to Provider to be sent. + async sendTransaction (transaction: Deferrable): Promise { + const tx: TransactionRequest = await this.populateTransaction(transaction) + await this.verifyAllNecessaryFields(tx) + const userOperation = await this.smartWalletAPI.createSignedUserOp({ + target: tx.to ?? '', + data: tx.data?.toString() ?? '', + value: tx.value, + gasLimit: tx.gasLimit + }) + const transactionResponse = await this.erc4337provider.constructUserOpTransactionResponse(userOperation) + try { + await this.httpRpcClient.sendUserOpToBundler(userOperation) + } catch (error: any) { + // console.error('sendUserOpToBundler failed', error) + throw this.unwrapError(error) + } + // TODO: handle errors - transaction that is "rejected" by bundler is _not likely_ to ever resolve its "wait()" + return transactionResponse + } + + unwrapError (errorIn: any): Error { + if (errorIn.body != null) { + const errorBody = JSON.parse(errorIn.body) + let paymasterInfo: string = '' + let failedOpMessage: string | undefined = errorBody?.error?.message + if (failedOpMessage?.includes('FailedOp') === true) { + // TODO: better error extraction methods will be needed + const matched = failedOpMessage.match(/FailedOp\((.*)\)/) + if (matched != null) { + const split = matched[1].split(',') + paymasterInfo = `(paymaster address: ${split[1]})` + failedOpMessage = split[2] + } + } + const error = new Error(`The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo})`) + error.stack = errorIn.stack + return error + } + return errorIn + } + + async verifyAllNecessaryFields (transactionRequest: TransactionRequest): Promise { + if (transactionRequest.to == null) { + throw new Error('Missing call target') + } + if (transactionRequest.data == null && transactionRequest.value == null) { + // TBD: banning no-op UserOps seems to make sense on provider level + throw new Error('Missing call data or value') + } + } + + connect (provider: Provider): Signer { + console.log(provider) + throw new Error('changing providers is not supported') + } + + async getAddress (): Promise { + return await this.erc4337provider.getSenderWalletAddress() + } + + async signMessage (message: Bytes | string): Promise { + return await this.originalSigner.signMessage(message) + } + + async signTransaction (transaction: Deferrable): Promise { + console.log(transaction) + throw new Error('not implemented') + } + + async signUserOperation (userOperation: UserOperationStruct): Promise { + const message = await this.smartWalletAPI.getRequestId(userOperation) + return await this.originalSigner.signMessage(message) + } +} diff --git a/packages/account-abstraction/src/HttpRpcClient.ts b/packages/account-abstraction/src/HttpRpcClient.ts new file mode 100644 index 000000000..eb02fedc1 --- /dev/null +++ b/packages/account-abstraction/src/HttpRpcClient.ts @@ -0,0 +1,48 @@ +import { JsonRpcProvider } from '@ethersproject/providers' +import { ethers } from 'ethers' +import { hexValue, resolveProperties } from 'ethers/lib/utils' + +import { UserOperationStruct } from '@account-abstraction/contracts' + +export class HttpRpcClient { + private readonly userOpJsonRpcProvider: JsonRpcProvider + + constructor ( + readonly bundlerUrl: string, + readonly entryPointAddress: string, + readonly chainId: number + ) { + this.userOpJsonRpcProvider = new ethers.providers.JsonRpcProvider(this.bundlerUrl, { + name: 'Not actually connected to network, only talking to the Bundler!', + chainId + }) + } + + async sendUserOpToBundler (userOp1: UserOperationStruct): Promise { + const userOp = await resolveProperties(userOp1) + const hexifiedUserOp: any = + Object.keys(userOp) + .map(key => { + let val = (userOp as any)[key] + if (typeof val !== 'string' || !val.startsWith('0x')) { + val = hexValue(val) + } + return [key, val] + }) + .reduce((set, [k, v]) => ({ ...set, [k]: v }), {}) + + const jsonRequestData: [UserOperationStruct, string] = [hexifiedUserOp, this.entryPointAddress] + await this.printUserOperation(jsonRequestData) + return await this.userOpJsonRpcProvider + .send('eth_sendUserOperation', [hexifiedUserOp, this.entryPointAddress]) + } + + private async printUserOperation ([userOp1, entryPointAddress]: [UserOperationStruct, string]): Promise { + const userOp = await resolveProperties(userOp1) + console.log('sending eth_sendUserOperation', { + ...userOp, + initCode: (userOp.initCode ?? '').length, + callData: (userOp.callData ?? '').length + }, entryPointAddress) + } +} diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts new file mode 100644 index 000000000..d82d884cd --- /dev/null +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -0,0 +1,8 @@ +import { UserOperationStruct } from '@account-abstraction/contracts' + +export class PaymasterAPI { + async getPaymasterAndData (userOp: Partial): Promise { + console.log(userOp) + return '0x' + } +} diff --git a/packages/account-abstraction/src/Provider.ts b/packages/account-abstraction/src/Provider.ts new file mode 100644 index 000000000..930c20638 --- /dev/null +++ b/packages/account-abstraction/src/Provider.ts @@ -0,0 +1,31 @@ +import { JsonRpcProvider } from '@ethersproject/providers' + +import { EntryPoint__factory, SimpleWalletDeployer__factory } from '@account-abstraction/contracts' + +import { ClientConfig } from './ClientConfig' +import { SimpleWalletAPI } from './SimpleWalletAPI' +import { ERC4337EthersProvider } from './ERC4337EthersProvider' +import { HttpRpcClient } from './HttpRpcClient' +import { DeterministicDeployer } from './DeterministicDeployer' +import { Signer } from '@ethersproject/abstract-signer' + +export async function newProvider ( + originalProvider: JsonRpcProvider, + config: ClientConfig, + originalSigner: Signer = originalProvider.getSigner() + +): Promise { + const entryPoint = new EntryPoint__factory().attach(config.entryPointAddress).connect(originalProvider) + // Initial SimpleWallet instance is not deployed and exists just for the interface + const simpleWalletDeployer = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) + const smartWalletAPI = new SimpleWalletAPI(originalProvider, entryPoint.address, undefined, originalSigner, simpleWalletDeployer, 0) + const httpRpcClient = new HttpRpcClient(config.bundlerUrl, config.entryPointAddress, 31337) + return await new ERC4337EthersProvider( + config, + originalSigner, + originalProvider, + httpRpcClient, + entryPoint, + smartWalletAPI + ).init() +} diff --git a/packages/account-abstraction/src/SimpleWalletAPI.ts b/packages/account-abstraction/src/SimpleWalletAPI.ts new file mode 100644 index 000000000..2facb84fb --- /dev/null +++ b/packages/account-abstraction/src/SimpleWalletAPI.ts @@ -0,0 +1,104 @@ +import { BigNumber, BigNumberish } from 'ethers' +import { + SimpleWallet, + SimpleWallet__factory, SimpleWalletDeployer, + SimpleWalletDeployer__factory +} from '@account-abstraction/contracts' + +import { arrayify, hexConcat } from 'ethers/lib/utils' +import { Signer } from '@ethersproject/abstract-signer' +import { BaseWalletAPI } from './BaseWalletAPI' +import { Provider } from '@ethersproject/providers' + +/** + * An implementation of the BaseWalletAPI using the SimpleWallet contract. + * - contract deployer gets "entrypoint", "owner" addresses and "index" nonce + * - owner signs requests using normal "Ethereum Signed Message" (ether's signer.signMessage()) + * - nonce method is "nonce()" + * - execute method is "execFromEntryPoint()" + */ +export class SimpleWalletAPI extends BaseWalletAPI { + /** + * base constructor. + * subclass SHOULD add parameters that define the owner (signer) of this wallet + * @param provider - read-only provider for view calls + * @param entryPointAddress - the entryPoint to send requests through (used to calculate the request-id, and for gas estimations) + * @param walletAddress optional wallet address, if connecting to an existing contract. + * @param owner the signer object for the wallet owner + * @param factoryAddress address of contract "factory" to deploy new contracts + * @param index nonce value used when creating multiple wallets for the same owner + */ + constructor ( + provider: Provider, + entryPointAddress: string, + walletAddress: string | undefined, + readonly owner: Signer, + readonly factoryAddress?: string, + // index is "salt" used to distinguish multiple wallets of the same signer. + readonly index = 0 + ) { + super(provider, entryPointAddress, walletAddress) + } + + /** + * our wallet contract. + * should support the "execFromSingleton" and "nonce" methods + */ + walletContract?: SimpleWallet + + factory?: SimpleWalletDeployer + + async _getWalletContract (): Promise { + if (this.walletContract == null) { + this.walletContract = SimpleWallet__factory.connect(await this.getWalletAddress(), this.provider) + } + return this.walletContract + } + + /** + * return the value to put into the "initCode" field, if the wallet is not yet deployed. + * this value holds the "factory" address, followed by this wallet's information + */ + async getWalletInitCode (): Promise { + if (this.factory == null) { + if (this.factoryAddress != null && this.factoryAddress !== '') { + this.factory = SimpleWalletDeployer__factory.connect(this.factoryAddress, this.provider) + } else { + throw new Error('no factory to get initCode') + } + } + return hexConcat([ + this.factory.address, + this.factory.interface.encodeFunctionData('deployWallet', [this.entryPointAddress, await this.owner.getAddress(), this.index]) + ]) + } + + async getNonce (): Promise { + if (await this.checkWalletPhantom()) { + return BigNumber.from(0) + } + const walletContract = await this._getWalletContract() + return await walletContract.nonce() + } + + /** + * encode a method call from entryPoint to our contract + * @param target + * @param value + * @param data + */ + async encodeExecute (target: string, value: BigNumberish, data: string): Promise { + const walletContract = await this._getWalletContract() + return walletContract.interface.encodeFunctionData( + 'execFromEntryPoint', + [ + target, + value, + data + ]) + } + + async signRequestId (requestId: string): Promise { + return await this.owner.signMessage(arrayify(requestId)) + } +} diff --git a/packages/account-abstraction/src/TransactionDetailsForUserOp.ts b/packages/account-abstraction/src/TransactionDetailsForUserOp.ts new file mode 100644 index 000000000..1e9beeac2 --- /dev/null +++ b/packages/account-abstraction/src/TransactionDetailsForUserOp.ts @@ -0,0 +1,10 @@ +import { BigNumberish } from 'ethers' + +export interface TransactionDetailsForUserOp { + target: string + data: string + value?: BigNumberish + gasLimit?: BigNumberish + maxFeePerGas?: BigNumberish + maxPriorityFeePerGas?: BigNumberish +} diff --git a/packages/account-abstraction/src/UserOperationEventListener.ts b/packages/account-abstraction/src/UserOperationEventListener.ts new file mode 100644 index 000000000..82e201605 --- /dev/null +++ b/packages/account-abstraction/src/UserOperationEventListener.ts @@ -0,0 +1,95 @@ +import { BigNumberish, Event } from 'ethers' +import { TransactionReceipt } from '@ethersproject/providers' +import { EntryPoint } from '@account-abstraction/contracts' +import { defaultAbiCoder } from 'ethers/lib/utils' + +const DEFAULT_TRANSACTION_TIMEOUT: number = 10000 + +/** + * This class encapsulates Ethers.js listener function and necessary UserOperation details to + * discover a TransactionReceipt for the operation. + */ +export class UserOperationEventListener { + resolved: boolean = false + boundLisener: (this: any, ...param: any) => void + + constructor ( + readonly resolve: (t: TransactionReceipt) => void, + readonly reject: (reason?: any) => void, + readonly entryPoint: EntryPoint, + readonly sender: string, + readonly requestId: string, + readonly nonce?: BigNumberish, + readonly timeout?: number + ) { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + this.boundLisener = this.listenerCallback.bind(this) + setTimeout(() => { + this.stop() + this.reject(new Error('Timed out')) + }, this.timeout ?? DEFAULT_TRANSACTION_TIMEOUT) + } + + start (): void { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + const filter = this.entryPoint.filters.UserOperationEvent(this.requestId) + // listener takes time... first query directly: + // eslint-disable-next-line @typescript-eslint/no-misused-promises + setTimeout(async () => { + const res = await this.entryPoint.queryFilter(filter, 'latest') + if (res.length > 0) { + void this.listenerCallback(res[0]) + } else { + this.entryPoint.once(filter, this.boundLisener) + } + }, 100) + } + + stop (): void { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + this.entryPoint.off('UserOperationEvent', this.boundLisener) + } + + async listenerCallback (this: any, ...param: any): Promise { + console.log(param) + const event = arguments[arguments.length - 1] as Event + if (event.args == null) { + console.error('got event without args', event) + return + } + // TODO: can this happen? we register to event by requestId.. + if (event.args.requestId !== this.requestId) { + console.log(`== event with wrong requestId: sender/nonce: event.${event.args.sender as string}@${event.args.nonce.toString() as string}!= userOp.${this.sender as string}@${parseInt(this.nonce?.toString())}`) + return + } + + const transactionReceipt = await event.getTransactionReceipt() + transactionReceipt.transactionHash = this.requestId + console.log('got event with status=', event.args.success, 'gasUsed=', transactionReceipt.gasUsed) + + // before returning the receipt, update the status from the event. + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + if (!event.args.success) { + await this.extractFailureReason(transactionReceipt) + } + this.stop() + this.resolve(transactionReceipt) + this.resolved = true + } + + async extractFailureReason (receipt: TransactionReceipt): Promise { + console.log('mark tx as failed') + receipt.status = 0 + const revertReasonEvents = await this.entryPoint.queryFilter(this.entryPoint.filters.UserOperationRevertReason(this.requestId, this.sender), receipt.blockHash) + if (revertReasonEvents[0] != null) { + let message = revertReasonEvents[0].args.revertReason + if (message.startsWith('0x08c379a0')) { + // Error(string) + message = defaultAbiCoder.decode(['string'], '0x' + message.substring(10)).toString() + } + console.log(`rejecting with reason: ${message}`) + this.reject(new Error(`UserOp failed with reason: ${message}`) + ) + } + } +} diff --git a/packages/account-abstraction/src/index.ts b/packages/account-abstraction/src/index.ts new file mode 100644 index 000000000..e9d635318 --- /dev/null +++ b/packages/account-abstraction/src/index.ts @@ -0,0 +1,6 @@ +export { SimpleWalletAPI } from './SimpleWalletAPI' +export { PaymasterAPI } from './PaymasterAPI' +export { newProvider } from './Provider' +export { ERC4337EthersSigner } from './ERC4337EthersSigner' +export { ERC4337EthersProvider } from './ERC4337EthersProvider' +export { ClientConfig } from './ClientConfig' diff --git a/packages/account-abstraction/test/0-deterministicDeployer.test.ts b/packages/account-abstraction/test/0-deterministicDeployer.test.ts new file mode 100644 index 000000000..305b8e7f1 --- /dev/null +++ b/packages/account-abstraction/test/0-deterministicDeployer.test.ts @@ -0,0 +1,25 @@ +import { expect } from 'chai' +import { SampleRecipient__factory } from '@biconomy-sdk/common/dist/src/types' +import { ethers } from 'hardhat' +import { hexValue } from 'ethers/lib/utils' +import { DeterministicDeployer } from '../src/DeterministicDeployer' + +const deployer = DeterministicDeployer.instance + +describe('#deterministicDeployer', () => { + it('deploy deployer', async () => { + expect(await deployer.isDeployerDeployed()).to.equal(false) + await deployer.deployDeployer() + expect(await deployer.isDeployerDeployed()).to.equal(true) + }) + it('should ignore deploy again of deployer', async () => { + await deployer.deployDeployer() + }) + it('should deploy at given address', async () => { + const ctr = hexValue(new SampleRecipient__factory(ethers.provider.getSigner()).getDeployTransaction().data!) + const addr = await DeterministicDeployer.getAddress(ctr) + expect(await deployer.isContractDeployed(addr)).to.equal(false) + await DeterministicDeployer.deploy(ctr) + expect(await deployer.isContractDeployed(addr)).to.equal(true) + }) +}) diff --git a/packages/account-abstraction/test/1-SimpleWalletAPI.test.ts b/packages/account-abstraction/test/1-SimpleWalletAPI.test.ts new file mode 100644 index 000000000..d70edff1d --- /dev/null +++ b/packages/account-abstraction/test/1-SimpleWalletAPI.test.ts @@ -0,0 +1,90 @@ +import { + EntryPoint, + EntryPoint__factory, + SimpleWalletDeployer__factory, + UserOperationStruct +} from '@account-abstraction/contracts' +import { Wallet } from 'ethers' +import { parseEther } from 'ethers/lib/utils' +import { expect } from 'chai' +import { anyValue } from '@nomicfoundation/hardhat-chai-matchers/withArgs' +import { ethers } from 'hardhat' +import { SimpleWalletAPI } from '../src' +import { SampleRecipient, SampleRecipient__factory } from '@biconomy-sdk/common/dist/src/types' +import { DeterministicDeployer } from '../src/DeterministicDeployer' + +const provider = ethers.provider +const signer = provider.getSigner() +describe('SimpleWalletAPI', () => { + let owner: Wallet + let api: SimpleWalletAPI + let entryPoint: EntryPoint + let beneficiary: string + let recipient: SampleRecipient + let walletAddress: string + let walletDeployed = false + before('init', async () => { + entryPoint = await new EntryPoint__factory(signer).deploy(1, 1) + beneficiary = await signer.getAddress() + + recipient = await new SampleRecipient__factory(signer).deploy() + owner = Wallet.createRandom() + const factoryAddress = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) + api = new SimpleWalletAPI( + provider, + entryPoint.address, + undefined, + owner, + factoryAddress + ) + }) + + it('#getRequestId should match entryPoint.getRequestId', async function () { + const userOp: UserOperationStruct = { + sender: '0x'.padEnd(42, '1'), + nonce: 2, + initCode: '0x3333', + callData: '0x4444', + callGasLimit: 5, + verificationGasLimit: 6, + preVerificationGas: 7, + maxFeePerGas: 8, + maxPriorityFeePerGas: 9, + paymasterAndData: '0xaaaaaa', + signature: '0xbbbb' + } + const hash = await api.getRequestId(userOp) + const epHash = await entryPoint.getRequestId(userOp) + expect(hash).to.equal(epHash) + }) + it('should deploy to counterfactual address', async () => { + walletAddress = await api.getWalletAddress() + expect(await provider.getCode(walletAddress).then(code => code.length)).to.equal(2) + + await signer.sendTransaction({ + to: walletAddress, + value: parseEther('0.1') + }) + const op = await api.createSignedUserOp({ + target: recipient.address, + data: recipient.interface.encodeFunctionData('something', ['hello']) + }) + + await expect(entryPoint.handleOps([op], beneficiary)).to.emit(recipient, 'Sender') + .withArgs(anyValue, walletAddress, 'hello') + expect(await provider.getCode(walletAddress).then(code => code.length)).to.greaterThan(1000) + walletDeployed = true + }) + it('should use wallet API after creation without a factory', async function () { + if (!walletDeployed) { + this.skip() + } + const api1 = new SimpleWalletAPI(provider, entryPoint.address, walletAddress, owner) + const op1 = await api1.createSignedUserOp({ + target: recipient.address, + data: recipient.interface.encodeFunctionData('something', ['world']) + }) + await expect(entryPoint.handleOps([op1], beneficiary)).to.emit(recipient, 'Sender') + .withArgs(anyValue, walletAddress, 'world') + }) +}) diff --git a/packages/account-abstraction/test/2-ERC4337EthersProvider.test.ts b/packages/account-abstraction/test/2-ERC4337EthersProvider.test.ts new file mode 100644 index 000000000..c46822125 --- /dev/null +++ b/packages/account-abstraction/test/2-ERC4337EthersProvider.test.ts @@ -0,0 +1,20 @@ +// import { expect } from 'chai' +// import hre from 'hardhat' +// import { time } from '@nomicfoundation/hardhat-network-helpers' +// +// describe('Lock', function () { +// it('Should set the right unlockTime', async function () { +// const lockedAmount = 1_000_000_000 +// const ONE_YEAR_IN_SECS = 365 * 24 * 60 * 60 +// const unlockTime = (await time.latest()) + ONE_YEAR_IN_SECS +// +// // deploy a lock contract where funds can be withdrawn +// // one year in the future +// const Lock = await hre.ethers.getContractFactory('Lock') +// const lock = await Lock.deploy(unlockTime, { value: lockedAmount }) +// +// // assert that the value is correct +// expect(await lock.unlockTime()).to.equal(unlockTime) +// }) +// }) +// should throw timeout exception if user operation is not mined after x time diff --git a/packages/account-abstraction/test/3-ERC4337EthersSigner.test.ts b/packages/account-abstraction/test/3-ERC4337EthersSigner.test.ts new file mode 100644 index 000000000..23496fbbe --- /dev/null +++ b/packages/account-abstraction/test/3-ERC4337EthersSigner.test.ts @@ -0,0 +1,76 @@ +import { SampleRecipient, SampleRecipient__factory } from '@biconomy-sdk/common/dist/src/types' +import { ethers } from 'hardhat' +import { ClientConfig, ERC4337EthersProvider, newProvider } from '../src' +import { EntryPoint, EntryPoint__factory } from '@account-abstraction/contracts' +import { expect } from 'chai' +import { parseEther } from 'ethers/lib/utils' +import { Wallet } from 'ethers' +import { anyValue } from '@nomicfoundation/hardhat-chai-matchers/withArgs' + +const provider = ethers.provider +const signer = provider.getSigner() + +describe('ERC4337EthersSigner, Provider', function () { + let recipient: SampleRecipient + let aaProvider: ERC4337EthersProvider + let entryPoint: EntryPoint + before('init', async () => { + const deployRecipient = await new SampleRecipient__factory(signer).deploy() + entryPoint = await new EntryPoint__factory(signer).deploy(1, 1) + const config: ClientConfig = { + chainId: await provider.getNetwork().then(net => net.chainId), + entryPointAddress: entryPoint.address, + bundlerUrl: '' + } + const aasigner = Wallet.createRandom() + aaProvider = await newProvider(provider, config, aasigner) + + const beneficiary = provider.getSigner().getAddress() + // for testing: bypass sending through a bundler, and send directly to our entrypoint.. + aaProvider.httpRpcClient.sendUserOpToBundler = async (userOp) => { + try { + await entryPoint.handleOps([userOp], beneficiary) + } catch (e: any) { + // doesn't report error unless called with callStatic + await entryPoint.callStatic.handleOps([userOp], beneficiary).catch((e: any) => { + // eslint-disable-next-line + const message = e.errorArgs != null ? `${e.errorName}(${e.errorArgs.join(',')})` : e.message + throw new Error(message) + }) + } + } + recipient = deployRecipient.connect(aaProvider.getSigner()) + }) + + it('should fail to send before funding', async () => { + try { + await recipient.something('hello', { gasLimit: 1e6 }) + throw new Error('should revert') + } catch (e: any) { + expect(e.message).to.eq('FailedOp(0,0x0000000000000000000000000000000000000000,wallet didn\'t pay prefund)') + } + }) + + it('should use ERC-4337 Signer and Provider to send the UserOperation to the bundler', async function () { + const walletAddress = await aaProvider.getSigner().getAddress() + await signer.sendTransaction({ + to: walletAddress, + value: parseEther('0.1') + }) + const ret = await recipient.something('hello') + await expect(ret).to.emit(recipient, 'Sender') + .withArgs(anyValue, walletAddress, 'hello') + }) + + it('should revert if on-chain userOp execution reverts', async function () { + // specifying gas, so that estimateGas won't revert.. + const ret = await recipient.reverting({ gasLimit: 10000 }) + + try { + await ret.wait() + throw new Error('expected to revert') + } catch (e: any) { + expect(e.message).to.match(/test revert/) + } + }) +}) diff --git a/packages/common/README.md b/packages/common/README.md new file mode 100644 index 000000000..4f634f042 --- /dev/null +++ b/packages/common/README.md @@ -0,0 +1,11 @@ +# `@biconomy-sdk/common` + +> TODO: description + +## Usage + +``` +const common = require('@biconomy-sdk/common'); + +// TODO: DEMONSTRATE API +``` diff --git a/packages/common/contracts/test/SampleRecipient.sol b/packages/common/contracts/test/SampleRecipient.sol new file mode 100644 index 000000000..7110710cd --- /dev/null +++ b/packages/common/contracts/test/SampleRecipient.sol @@ -0,0 +1,21 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +// TODO: get hardhat types from '@account-abstraction' package directly +// only to import the file in hardhat compilation +import "@account-abstraction/contracts/samples/SimpleWallet.sol"; + +contract SampleRecipient { + + SimpleWallet wallet; + + event Sender(address txOrigin, address msgSender, string message); + + function something(string memory message) public { + emit Sender(tx.origin, msg.sender, message); + } + + function reverting() public { + revert( "test revert"); + } +} diff --git a/packages/common/contracts/test/SingletonFactory.sol b/packages/common/contracts/test/SingletonFactory.sol new file mode 100644 index 000000000..9a2fab5a3 --- /dev/null +++ b/packages/common/contracts/test/SingletonFactory.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.15; + +/** + * @title Singleton Factory (EIP-2470) + * @notice Exposes CREATE2 (EIP-1014) to deploy bytecode on deterministic addresses based on initialization code and salt. + * @author Ricardo Guilherme Schmidt (Status Research & Development GmbH) + */ +contract SingletonFactory { + /** + * @notice Deploys `_initCode` using `_salt` for defining the deterministic address. + * @param _initCode Initialization code. + * @param _salt Arbitrary value to modify resulting address. + * @return createdContract Created contract address. + */ + function deploy(bytes memory _initCode, bytes32 _salt) + public + returns (address payable createdContract) + { + assembly { + createdContract := create2(0, add(_initCode, 0x20), mload(_initCode), _salt) + } + } +} +// IV is a value changed to generate the vanity address. +// IV: 6583047 diff --git a/packages/common/hardhat.config.ts b/packages/common/hardhat.config.ts new file mode 100644 index 000000000..a292aa8f3 --- /dev/null +++ b/packages/common/hardhat.config.ts @@ -0,0 +1,19 @@ +// import '@nomiclabs/hardhat-ethers' +import '@nomicfoundation/hardhat-toolbox' + +import { HardhatUserConfig } from 'hardhat/config' + +const config: HardhatUserConfig = { + typechain: { + outDir: 'src/types', + target: 'ethers-v5' + }, + solidity: { + version: '0.8.15', + settings: { + optimizer: { enabled: true } + } + } +} + +export default config diff --git a/packages/common/package.json b/packages/common/package.json new file mode 100644 index 000000000..f795f8d80 --- /dev/null +++ b/packages/common/package.json @@ -0,0 +1,48 @@ +{ + "name": "@biconomy-sdk/common", + "version": "1.0.11", + "description": "common utils to be used for aa transactions", + "keywords": [ + "utils" + ], + "author": "livingrockrises ", + "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", + "license": "MIT", + "main": "dist/src/index.js", + "files": [ + "dist/*", + "README.md" + ], + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" + }, + "scripts": { + "clear": "rm -rf dist artifacts cache src/types", + "hardhat-compile": "yarn clear && hardhat compile", + "hardhat-deploy": "hardhat deploy", + "hardhat-node": "hardhat node", + "lint-fix": "eslint -f unix . --fix", + "watch-tsc": "tsc -w --preserveWatchOutput", + "tsc": "tsc" + }, + "bugs": { + "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" + }, + "dependencies": { + "@account-abstraction/contracts": "^0.2.0", + "@ethersproject/abi": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/providers": "^5.7.0", + "@openzeppelin/contracts": "^4.7.3", + "ethers": "^5.7.0" + }, + "devDependencies": { + "@nomicfoundation/hardhat-toolbox": "^1.0.2", + "@nomiclabs/hardhat-ethers": "^2.0.0", + "hardhat": "^2.11.0" + } +} diff --git a/packages/common/src/ERC4337Utils.ts b/packages/common/src/ERC4337Utils.ts new file mode 100644 index 000000000..75bd81a36 --- /dev/null +++ b/packages/common/src/ERC4337Utils.ts @@ -0,0 +1,81 @@ +import { arrayify, defaultAbiCoder, keccak256 } from 'ethers/lib/utils' +import { UserOperationStruct } from '@account-abstraction/contracts' +import { abi as entryPointAbi } from '@account-abstraction/contracts/artifacts/IEntryPoint.json' + +// UserOperation is the first parameter of simulateValidation +const UserOpType = entryPointAbi.find(entry => entry.name === 'simulateValidation')?.inputs[0] + +// reverse "Deferrable" or "PromiseOrValue" fields +export type NotPromise = { + [P in keyof T]: Exclude> +} + +function encode (typevalues: Array<{ type: string, val: any }>, forSignature: boolean): string { + const types = typevalues.map(typevalue => typevalue.type === 'bytes' && forSignature ? 'bytes32' : typevalue.type) + const values = typevalues.map((typevalue) => typevalue.type === 'bytes' && forSignature ? keccak256(typevalue.val) : typevalue.val) + return defaultAbiCoder.encode(types, values) +} + +export function packUserOp (op: NotPromise, forSignature = true): string { + if (forSignature) { + // lighter signature scheme (must match UserOperation#pack): do encode a zero-length signature, but strip afterwards the appended zero-length value + const userOpType = { + components: [ + { type: 'address', name: 'sender' }, + { type: 'uint256', name: 'nonce' }, + { type: 'bytes', name: 'initCode' }, + { type: 'bytes', name: 'callData' }, + { type: 'uint256', name: 'callGasLimit' }, + { type: 'uint256', name: 'verificationGasLimit' }, + { type: 'uint256', name: 'preVerificationGas' }, + { type: 'uint256', name: 'maxFeePerGas' }, + { type: 'uint256', name: 'maxPriorityFeePerGas' }, + { type: 'bytes', name: 'paymasterAndData' }, + { type: 'bytes', name: 'signature' } + ], + name: 'userOp', + type: 'tuple' + } + // console.log('hard-coded userOpType', userOpType) + // console.log('from ABI userOpType', UserOpType) + let encoded = defaultAbiCoder.encode([userOpType as any], [{ ...op, signature: '0x' }]) + // remove leading word (total length) and trailing word (zero-length signature) + encoded = '0x' + encoded.slice(66, encoded.length - 64) + return encoded + } + const typedValues = (UserOpType as any).components.map((c: {name: keyof typeof op, type: string}) => ({ + type: c.type, + val: op[c.name] + })) + const typevalues = [ + { type: 'address', val: op.sender }, + { type: 'uint256', val: op.nonce }, + { type: 'bytes', val: op.initCode }, + { type: 'bytes', val: op.callData }, + { type: 'uint256', val: op.callGasLimit }, + { type: 'uint256', val: op.verificationGasLimit }, + { type: 'uint256', val: op.preVerificationGas }, + { type: 'uint256', val: op.maxFeePerGas }, + { type: 'uint256', val: op.maxPriorityFeePerGas }, + { type: 'bytes', val: op.paymasterAndData } + ] + console.log('hard-coded typedvalues', typevalues) + console.log('from ABI typedValues', typedValues) + if (!forSignature) { + // for the purpose of calculating gas cost, also hash signature + typevalues.push({ type: 'bytes', val: op.signature }) + } + return encode(typevalues, forSignature) +} + +export function getRequestId (op: NotPromise, entryPoint: string, chainId: number): string { + const userOpHash = keccak256(packUserOp(op, true)) + const enc = defaultAbiCoder.encode( + ['bytes32', 'address', 'uint256'], + [userOpHash, entryPoint, chainId]) + return keccak256(enc) +} + +export function getRequestIdForSigning (op: NotPromise, entryPoint: string, chainId: number): Uint8Array { + return arrayify(getRequestId(op, entryPoint, chainId)) +} diff --git a/packages/common/src/SolidityTypeAliases.ts b/packages/common/src/SolidityTypeAliases.ts new file mode 100644 index 000000000..eeca09d2a --- /dev/null +++ b/packages/common/src/SolidityTypeAliases.ts @@ -0,0 +1,11 @@ +// define the same export types as used by export typechain/ethers +import { BigNumberish } from 'ethers' +import { BytesLike } from '@ethersproject/bytes' + +export type address = string + +export type uint256 = BigNumberish +export type uint64 = BigNumberish + +export type bytes = BytesLike +export type bytes32 = BytesLike diff --git a/packages/common/src/Version.ts b/packages/common/src/Version.ts new file mode 100644 index 000000000..51aa3dc55 --- /dev/null +++ b/packages/common/src/Version.ts @@ -0,0 +1,2 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +export const erc4337RuntimeVersion: string = require('../../package.json').version diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts new file mode 100644 index 000000000..b2442bbeb --- /dev/null +++ b/packages/common/src/index.ts @@ -0,0 +1,2 @@ +export * from './Version' +export * from './ERC4337Utils' From 4ad6e8394f2f6649d52722246dc26ac1d893fbee Mon Sep 17 00:00:00 2001 From: talha Date: Wed, 28 Sep 2022 03:57:21 +0500 Subject: [PATCH 0153/1247] stable code with wallet deployment and trx --- packages/smart-account/src/SmartAccount.ts | 28 ++++++++++++--------- packages/transactions/src/contract-utils.ts | 5 +++- packages/transactions/src/index.ts | 17 +++++++------ packages/transactions/src/transaction.ts | 6 +++-- 4 files changed, 34 insertions(+), 22 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index b01e07237..c6b712919 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -59,16 +59,12 @@ import NodeClient, { } from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' import { Relayer } from '@biconomy-sdk/relayer' -import { +import Transaction, { buildSmartAccountTransaction, smartAccountSignMessage, buildMultiSendSmartAccountTx, - // WalletTransaction, - // ExecTransaction, - // MetaTransaction, - // buildMultiSendSmartAccountTx + encodeTransfer } from '@biconomy-sdk/transactions' -import { encodeTransfer } from '@biconomy-sdk/transactions' import { GasEstimator } from './assets' import { BalancesDto } from '@biconomy-sdk/node-client' import { @@ -77,7 +73,9 @@ import { EstimateGasResponse } from '@biconomy-sdk/node-client' -import { Transaction, ContractUtils } from '@biconomy-sdk/transactions' +console.log('NodeClient ', NodeClient) +console.log('Transaction ', Transaction) +// import { ContractUtils } from '@biconomy-sdk/transactions' // Create an instance of Smart Account with multi-chain support. @@ -153,9 +151,15 @@ class SmartAccount { } async init(){ + this.owner = await this.signer.getAddress() + this.#smartAccountConfig.owner = this.owner + this.transactionInstance = new Transaction() await this.transactionInstance.initialize(this.provider, this.#smartAccountConfig) this.nodeClient = await this.transactionInstance.getNodeClient() this.contractUtils = await this.transactionInstance.getContractUtilInstance() + const chainConfig = (await this.nodeClient.getAllSupportedChains()).data + this.chainConfig = chainConfig + this.address = await this.transactionInstance.getAddress({index: 0, chainId: this.#smartAccountConfig.activeNetworkId, version: this.DEFAULT_VERSION}) return this } @@ -919,7 +923,7 @@ class SmartAccount { // return !!walletCode && walletCode !== '0x' // but below works - return await this.factory(chainId).isWalletExist(this.address) + return await this.contractUtils.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION].isWalletExist(this.address) } /** @@ -959,10 +963,10 @@ class SmartAccount { chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): SmartAccountContext { const context: SmartAccountContext = { - baseWallet: this.smartAccount(chainId), //might as well do getContract and attach and return contract - walletFactory: this.factory(chainId), - multiSend: this.multiSend(chainId), - multiSendCall: this.multiSendCall(chainId) + baseWallet: this.contractUtils.smartWalletContract[chainId][this.DEFAULT_VERSION], + walletFactory: this.contractUtils.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION], + multiSend: this.contractUtils.multiSendContract[chainId][this.DEFAULT_VERSION], + multiSendCall: this.contractUtils.multiSendCallOnlyContract[chainId][this.DEFAULT_VERSION], // Could be added dex router for chain in the future } return context diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index ee2defd2c..ea513e022 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -50,9 +50,12 @@ class ContractUtils { const network = chainsInfo[i] const providerUrl = network.providerUrl // To keep it network agnostic - // Note: think about events when signer needs to pay gas + // Note: think about events when signer needs to pay gas const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) + + console.log('chain id ', network.chainId, 'readProvider ', readProvider); + // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable this.ethAdapter[network.chainId] = new EthersAdapter({ ethers, diff --git a/packages/transactions/src/index.ts b/packages/transactions/src/index.ts index 098e10c83..b1ec1ab49 100644 --- a/packages/transactions/src/index.ts +++ b/packages/transactions/src/index.ts @@ -1,12 +1,15 @@ -export * from './types' + + +import Transaction from './transaction' +import ContractUtils from './contract-utils' + + +export default Transaction + + export * from './utils' export * from './execution' export * from './multisend' -import Transaction from './transaction' -import ContractUtils from './contract-utils' +// export { ContractUtils } -export { - Transaction, - ContractUtils -} diff --git a/packages/transactions/src/transaction.ts b/packages/transactions/src/transaction.ts index b91cb20ad..ab4766f10 100644 --- a/packages/transactions/src/transaction.ts +++ b/packages/transactions/src/transaction.ts @@ -76,7 +76,7 @@ class Transaction { // this.nodeClient = new NodeClient({ txServiceUrl: config.backend_url }) // } - + constructor(){} async initialize(walletProvider: Web3Provider, config: Config){ this.localConfig = { ...DefaultConfig } @@ -84,7 +84,7 @@ class Transaction { this.localConfig = { ...this.localConfig, ...config } } const signer = walletProvider.getSigner() - this.owner = this.localConfig.owner + this.owner = await signer.getAddress() this.contractUtils = new ContractUtils() this.nodeClient = new NodeClient({ txServiceUrl: config.backend_url }) await this.contractUtils.initialize(await this.nodeClient.getAllSupportedChains(), signer) @@ -349,6 +349,8 @@ class Transaction { // TODO: Get from node client first from cache, if not found then query smart contract // we will hit smart account endpoint to fetch deployed smart account info const address = await this.getAddressForCounterfactualWallet(addressForCounterFactualWalletDto) + console.log('address is ', address); + this.address = address return address } From 798ddaa3aec23078afe560bd79e537a7ed82fd7d Mon Sep 17 00:00:00 2001 From: talha Date: Wed, 28 Sep 2022 08:19:19 +0500 Subject: [PATCH 0154/1247] inital code separation tested with demo dapp --- packages/core-types/package.json | 1 + .../core-types/src/smart-account.types.ts | 15 +- packages/smart-account/src/SmartAccount.ts | 412 +------------ packages/transactions/src/transaction.ts | 543 +++++++++++++++++- 4 files changed, 575 insertions(+), 396 deletions(-) diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 7cd530ce0..efc98cde9 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -35,6 +35,7 @@ "access": "public" }, "dependencies": { + "@ethersproject/providers": "^5.6.8", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@gnosis.pm/safe-deployments": "^1.16.0", diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 492293d33..e66a7ac63 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -8,6 +8,7 @@ import { MultiSendContract } from './contracts/MultiSendContract' import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' import { SmartWalletContract } from './contracts/SmartWalletContract' import { GasLimit } from './transaction.types' +import { JsonRpcSigner } from '@ethersproject/providers' export interface Config { @@ -49,8 +50,10 @@ export type AddressForCounterFactualWalletDto = { } export type SignTransactionDto = { + version: string tx: WalletTransaction - chainId?: ChainId + chainId: ChainId + signer: JsonRpcSigner } export type SendTransactionDto = { @@ -68,9 +71,10 @@ export type PrepareRefundTransactionDto = { } export type PrepareRefundTransactionsDto = { + version: string transactions: Transaction[] - batchId?: number - chainId?: ChainId + batchId: number + chainId: ChainId } export type RefundTransactionDto = { @@ -81,10 +85,11 @@ export type RefundTransactionDto = { chainId: ChainId } export type RefundTransactionBatchDto = { + version: string transactions: Transaction[] feeQuote: FeeQuote - batchId?: number - chainId?: ChainId + batchId: number + chainId: ChainId } export type TransactionDto = { diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index c6b712919..66ae5d480 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -252,9 +252,10 @@ class SmartAccount { * @param relayer Relayer client to be associated with this smart account * @returns this/self */ - setRelayer(relayer: Relayer): SmartAccount { + async setRelayer(relayer: Relayer): Promise { if (relayer === undefined) return this this.relayer = relayer + await this.transactionInstance.setRelayer(relayer) return this } @@ -277,16 +278,11 @@ class SmartAccount { * @returns:string Signature */ async signTransaction(signTransactionDto: SignTransactionDto): Promise { - const { chainId = this.#smartAccountConfig.activeNetworkId, tx } = signTransactionDto - let walletContract = this.smartAccount(chainId).getContract() - walletContract = walletContract.attach(this.address) - - // TODO - rename and organize utils - const { signer, data } = await smartAccountSignMessage(this.signer, walletContract, tx, chainId) + signTransactionDto.chainId = this.#smartAccountConfig.activeNetworkId + signTransactionDto.version = this.DEFAULT_VERSION + signTransactionDto.signer = this.signer - let signature = '0x' - signature += data.slice(2) - return signature + return this.transactionInstance.signTransaction(signTransactionDto) } /** @@ -296,7 +292,7 @@ class SmartAccount { * @param chainId optional chainId * @returns */ - async sendTransaction(sendTransactionDto: SendTransactionDto): Promise { + async sendTransaction(sendTransactionDto: SendTransactionDto): Promise { const { tx, batchId = 0, @@ -330,7 +326,7 @@ class SmartAccount { let walletContract = this.contractUtils.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() walletContract = walletContract.attach(this.address) - let signature = await this.signTransaction({ tx, chainId }) + let signature = await this.signTransaction({ version: this.DEFAULT_VERSION, tx, chainId, signer: this.signer }) let execTransaction = await walletContract.populateTransaction.execTransaction( transaction, @@ -379,50 +375,10 @@ class SmartAccount { ): Promise { // TODO // Review @Talha - const { - transaction, - batchId = 0, - chainId = this.#smartAccountConfig.activeNetworkId - } = prepareRefundTransactionDto - - const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) - const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response - let feeQuotes: Array = [] - - // 1. If wallet is deployed - // 2. If wallet is not deployed (batch wallet deployment on multisend) - // actual estimation with dummy sig - // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth - const estimatedGasUsed: number = await this.estimateTransaction({ - version: this.DEFAULT_VERSION, - transaction, - batchId, - chainId - }) - - // also relayer would give feeReceiver that becomes part of feeQuote - - feeOptionsAvailable.forEach((feeOption) => { - const feeTokenTransferGas = feeOption.feeTokenTransferGas - const tokenGasPrice = feeOption.tokenGasPrice || 0 - const offset = feeOption.offset || 1 - let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; - - let feeQuote = { - symbol: feeOption.symbol, - address: feeOption.address, - decimal: feeOption.decimal, - logoUrl: feeOption.logoUrl, - tokenGasPrice: feeOption.tokenGasPrice, - offset: feeOption.offset, - payment: payment, - refundReceiver: feeOption.refundReceiver - } - - feeQuotes.push(feeQuote) - }) - - return feeQuotes + prepareRefundTransactionDto.chainId = this.#smartAccountConfig.activeNetworkId + prepareRefundTransactionDto.version = this.DEFAULT_VERSION + prepareRefundTransactionDto.batchId = 0 + return this.transactionInstance.prepareRefundTransaction(prepareRefundTransactionDto) } // Get Fee Options from relayer and make it available for display @@ -435,155 +391,13 @@ class SmartAccount { async prepareRefundTransactionBatch( prepareRefundTransactionsDto: PrepareRefundTransactionsDto ): Promise { - const { - transactions, - batchId = 0, - chainId = this.#smartAccountConfig.activeNetworkId - } = prepareRefundTransactionsDto - const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) - const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response - let feeQuotes: Array = [] - - // 1. If wallet is deployed - // 2. If wallet is not deployed (batch wallet deployment on multisend) - // actual estimation with dummy sig - // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth - const estimatedGasUsed: number = await this.estimateTransactionBatch({ - transactions, - batchId, - chainId - }) - - feeOptionsAvailable.forEach((feeOption) => { - const feeTokenTransferGas = feeOption.feeTokenTransferGas - const tokenGasPrice = feeOption.tokenGasPrice || 0 - const offset = feeOption.offset || 1 - let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; - - let feeQuote = { - symbol: feeOption.symbol, - address: feeOption.address, - decimal: feeOption.decimal, - logoUrl: feeOption.logoUrl, - tokenGasPrice: feeOption.tokenGasPrice, - offset: feeOption.offset, - payment: payment, - refundReceiver: feeOption.refundReceiver - } - - feeQuotes.push(feeQuote) - }) - - return feeQuotes + prepareRefundTransactionsDto.chainId = this.#smartAccountConfig.activeNetworkId + prepareRefundTransactionsDto.version = this.DEFAULT_VERSION + prepareRefundTransactionsDto.batchId = 0 + console.log('prepareRefundTransactionsDto ', prepareRefundTransactionsDto); + return this.transactionInstance.prepareRefundTransactionBatch(prepareRefundTransactionsDto) } - async estimateTransactionBatch( prepareRefundTransactionsDto: PrepareRefundTransactionsDto): Promise { - - const { transactions, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = prepareRefundTransactionsDto - let estimatedGasUsed = 0; - // Check if available from current state - const isDeployed = await this.isDeployed(chainId); - if (!isDeployed) { - const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); - console.log('estimateWalletDeployment ', estimateWalletDeployment); - estimatedGasUsed += estimateWalletDeployment; - } - - const tx = await this.createTransactionBatch({ version: this.DEFAULT_VERSION, transactions, batchId, chainId}); - - const txn: ExecTransaction = { - to: tx.to, - value: tx.value, - data: tx.data, - operation: tx.operation, - targetTxGas: tx.targetTxGas - } - - // to avoid failing eth_call override with undeployed wallet - txn.targetTxGas = 500000; - - const refundInfo: FeeRefundV1_0_1 = { - baseGas: tx.baseGas, - gasPrice: tx.gasPrice, - tokenGasPriceFactor: tx.tokenGasPriceFactor, - gasToken: tx.gasToken, - refundReceiver: tx.refundReceiver - } - - const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { - chainId, - version: this.DEFAULT_VERSION, - transaction: txn, - walletAddress: this.address, - feeRefund: refundInfo, - signature: FAKE_SIGNATURE - } - - const ethCallOverrideResponse = await this.estimateUndeployedContractGas(estimateUndeployedContractGasDto); - let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); - console.log('no auth no refund estimate', noAuthEstimate); - - estimatedGasUsed += noAuthEstimate; - - return estimatedGasUsed; - } - - async estimateTransaction(prepareTransactionDto: PrepareRefundTransactionDto): Promise { - const { - transaction, - batchId = 0, - chainId = this.#smartAccountConfig.activeNetworkId - } = prepareTransactionDto - - let estimatedGasUsed = 0; - // Check if available from current state - const isDeployed = await this.isDeployed(chainId); - if (!isDeployed) { - const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); - console.log('estimateWalletDeployment ', estimateWalletDeployment); - - estimatedGasUsed += estimateWalletDeployment; - } - - const tx = await this.createTransaction({ version: this.DEFAULT_VERSION, transaction, batchId, chainId }); - - const txn: ExecTransaction = { - to: tx.to, - value: tx.value, - data: tx.data, - operation: tx.operation, - targetTxGas: tx.targetTxGas - } - - // to avoid failing eth_call override with undeployed wallet - txn.targetTxGas = 500000; - - const refundInfo: FeeRefundV1_0_1 = { - baseGas: tx.baseGas, - gasPrice: tx.gasPrice, - tokenGasPriceFactor: tx.tokenGasPriceFactor, - gasToken: tx.gasToken, - refundReceiver: tx.refundReceiver - } - - const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { - chainId, - version: this.DEFAULT_VERSION, - transaction: txn, - walletAddress: this.address, - feeRefund: refundInfo, - signature: FAKE_SIGNATURE - } - - const ethCallOverrideResponse = await this.estimateUndeployedContractGas(estimateUndeployedContractGasDto); - let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); - console.log('no auth no refund estimate', noAuthEstimate); - - estimatedGasUsed += noAuthEstimate; - - return estimatedGasUsed; - } - // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions /** @@ -598,6 +412,8 @@ class SmartAccount { ): Promise { refundTransactionDto.chainId = this.#smartAccountConfig.activeNetworkId refundTransactionDto.version = this.DEFAULT_VERSION + refundTransactionDto.batchId = 0 + return this.transactionInstance.createRefundTransaction(refundTransactionDto) } @@ -611,6 +427,7 @@ class SmartAccount { async createTransaction(transactionDto: TransactionDto): Promise { transactionDto.chainId = this.#smartAccountConfig.activeNetworkId transactionDto.version = this.DEFAULT_VERSION + transactionDto.batchId = 0 return this.transactionInstance.createTransaction(transactionDto) } @@ -641,140 +458,10 @@ class SmartAccount { async createRefundTransactionBatch( refundTransactionBatchDto: RefundTransactionBatchDto ): Promise { - const { - transactions, - feeQuote, - batchId = 0, - chainId = this.#smartAccountConfig.activeNetworkId - } = refundTransactionBatchDto - let walletContract = this.smartAccount(chainId).getContract() - const connectedWallet = this.address - walletContract = walletContract.attach(connectedWallet) - - const isDeployed = await this.isDeployed(chainId); - let additionalBaseGas = 0; - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0 - if (isDeployed) { - nonce = (await walletContract.getNonce(batchId)).toNumber() - } else { - // TODO : estimation cost can be passed - - const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); - // We know it's going to get deployed by Relayer but we handle refund cost here.. - console.log('estimateWalletDeployment ', estimateWalletDeployment) - - // We know it's going to get deployed by Relayer - // but we handle refund cost here.. - additionalBaseGas += estimateWalletDeployment // wallet deployment gas - } - console.log('nonce: ', nonce) - - const txs: MetaTransaction[] = [] - - for (let i = 0; i < transactions.length; i++) { - const innerTx: WalletTransaction = buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) - - txs.push(innerTx) - } - - const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( - this.multiSend(chainId).getContract(), - txs, - nonce - ); - console.log('wallet txn with refund ', walletTx); - - const internalTx: MetaTransactionData = { - to: walletTx.to, - value: walletTx.value || 0, - data: walletTx.data || '0x', - operation: walletTx.operation - } - console.log(internalTx); - - let targetTxGas, baseGas, handlePaymentEstimate; - const regularOffSet = GAS_USAGE_OFFSET; - - if(!isDeployed){ - // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet - // targetTxGas? - // i. use really high value - // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] - - const response = await this.estimateRequiredTxGasOverride({chainId, walletAddress: this.address, transaction: internalTx}) - - // not getting accurate value for undeployed wallet - // TODO - // Review - const requiredTxGasEstimate = Number(response.data.gas) + 700000 - console.log('required txgas estimate (with override) ', requiredTxGasEstimate); - targetTxGas = requiredTxGasEstimate; - - // baseGas? - // Depending on feeToken provide baseGas! We could use constant value provided by the relayer - - const refundDetails: FeeRefundHandlePayment = { - gasUsed: requiredTxGasEstimate, - baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS - } - - const handlePaymentResponse = await this.estimateHandlePaymentGasOverride({chainId, version: this.DEFAULT_VERSION, walletAddress: this.address, feeRefund: refundDetails}); - handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate); - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; - } else { - - const response = await this.estimateRequiredTxGas({chainId, walletAddress: this.address, transaction: internalTx}) - // considerable offset ref gnosis safe service client safeTxGas - // @Talha - // TODO - // handle exception responses and when gas returned is 0 - // We could stop the further flow - const requiredTxGasEstimate = Number(response.data.gas) + 30000 - console.log('required txgas estimate ', requiredTxGasEstimate); - targetTxGas = requiredTxGasEstimate; - - const refundDetails: FeeRefundHandlePayment = { - gasUsed: requiredTxGasEstimate, - baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS - } - - const handlePaymentResponse = await this.estimateHandlePaymentGas({chainId, version: this.DEFAULT_VERSION, walletAddress: this.address, feeRefund: refundDetails}); - handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - console.log('handlePaymentEstimate ', handlePaymentEstimate); - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment - } - - const finalWalletTx: WalletTransaction = buildSmartAccountTransaction({ - to: walletTx.to, - value: walletTx.value, - data: walletTx.data, // for token transfers use encodeTransfer - operation: walletTx.operation, - targetTxGas: targetTxGas, - baseGas: baseGas, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS, - gasPrice: feeQuote.tokenGasPrice.toString(), //review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - nonce - }) - - return finalWalletTx + refundTransactionBatchDto.chainId = this.#smartAccountConfig.activeNetworkId + refundTransactionBatchDto.version = this.DEFAULT_VERSION + refundTransactionBatchDto.batchId = 0 + return this.transactionInstance.createRefundTransactionBatch(refundTransactionBatchDto) } async estimateSmartAccountDeployment(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { @@ -800,59 +487,12 @@ class SmartAccount { async prepareDeployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { - const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) - const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; - let feeQuotes: Array = []; - - const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); - - feeOptionsAvailable.forEach((feeOption) => { - // TODO - // Make it a constant - const estimatedGasUsed: number = (estimateWalletDeployment + 77369); - - // const feeTokenTransferGas = feeOption.feeTokenTransferGas - const tokenGasPrice = feeOption.tokenGasPrice || 0; - const offset = feeOption.offset || 1; - let payment = tokenGasPrice * (estimatedGasUsed) / offset; - - let feeQuote = { - symbol: feeOption.symbol, - address: feeOption.address, - decimal: feeOption.decimal, - logoUrl: feeOption.logoUrl, - tokenGasPrice: feeOption.tokenGasPrice, - offset: feeOption.offset, - payment: payment, - refundReceiver: feeOption.refundReceiver - } - - feeQuotes.push(feeQuote); - }); - - return feeQuotes; + return this.transactionInstance.prepareDeployAndPayFees(chainId, this.DEFAULT_VERSION) } // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment async deployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId, feeQuote: FeeQuote): Promise { - // Not checking again if the wallet is actually deployed - // const isDeployed = await this.isDeployed(chainId); - const token = feeQuote.address; - const offset = feeQuote.offset || 1; - const feeReceiver = feeQuote.refundReceiver || DEFAULT_FEE_RECEIVER; - - const estimateWalletDeployment = await this.estimateSmartAccountDeployment(chainId); - - // do estimations here or pass on payment and use feeQuote fully! - let feesToPay = feeQuote.tokenGasPrice * (estimateWalletDeployment + 77369) / offset; - feesToPay = parseInt(feesToPay.toString()); - - const tx = { - to: token, - data: encodeTransfer(feeReceiver, Number(feesToPay)) - }; - - const transaction = await this.createTransaction({version: this.DEFAULT_VERSION, transaction: tx, batchId: 0, chainId: this.#smartAccountConfig.activeNetworkId}); + const transaction = await this.transactionInstance.deployAndPayFees(chainId, this.DEFAULT_VERSION, feeQuote) const txHash = await this.sendTransaction({tx:transaction}); return txHash; } diff --git a/packages/transactions/src/transaction.ts b/packages/transactions/src/transaction.ts index ab4766f10..3f0b9af4b 100644 --- a/packages/transactions/src/transaction.ts +++ b/packages/transactions/src/transaction.ts @@ -1,15 +1,30 @@ -import { smartAccountSignMessage } from 'execution' +import { smartAccountSignMessage } from './execution' +import { encodeTransfer } from './utils' import { + SendTransactionDto, + DEFAULT_FEE_RECEIVER, + SignTransactionDto, + PrepareRefundTransactionsDto, + PrepareRefundTransactionDto, TransactionDto, TransactionBatchDto, + RefundTransactionBatchDto, + ExecTransaction, MetaTransaction, MetaTransactionData, RefundTransactionDto, WalletTransaction, Config, + RawTransactionType, OperationType, ZERO_ADDRESS, + FeeRefundV1_0_1, + FeeRefundV1_0_0, ChainId, + FeeQuote, + FeeOptionsResponse, + FAKE_SIGNATURE, + TokenData, GAS_USAGE_OFFSET, FeeRefundHandlePayment, AddressForCounterFactualWalletDto, @@ -47,6 +62,8 @@ import { buildMultiSendSmartAccountTx } from './multisend' class Transaction { + entryPointAddress = '0xF05217199F1C25604c67993F11a81461Bc97F3Ab' + fallBackHandlerAddress = '0xf05217199f1c25604c67993f11a81461bc97f3ab' nodeClient!: NodeClient relayer!: Relayer @@ -90,6 +107,14 @@ class Transaction { await this.contractUtils.initialize(await this.nodeClient.getAllSupportedChains(), signer) } + setRelayer(relayer: Relayer) { + console.log('setting relayer'); + + this.relayer = relayer + console.log('relayer ', this.relayer); + + } + async getContractUtilInstance(): Promise{ return this.contractUtils } @@ -98,6 +123,97 @@ class Transaction { return this.nodeClient } + /** + * + * @notice personal sign is used currently (// @todo Signer should be able to use _typedSignData) + * @param tx WalletTransaction Smart Account Transaction object prepared + * @param chainId optional chainId + * @returns:string Signature + */ + async signTransaction(signTransactionDto: SignTransactionDto): Promise { + const { chainId, tx, version, signer } = signTransactionDto + let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() + walletContract = walletContract.attach(this.address) + + // TODO - rename and organize utils + const { data } = await smartAccountSignMessage(signer, walletContract, tx, chainId) + + let signature = '0x' + signature += data.slice(2) + return signature + } + + + + async prepareDeployAndPayFees(chainId: ChainId, version: string) { + console.log('getFeeOptions ', this.relayer) + const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; + let feeQuotes: Array = []; + + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: this.owner, + entryPointAddress: this.entryPointAddress, + fallbackHandlerAddress: this.fallBackHandlerAddress + }) + + feeOptionsAvailable.forEach((feeOption) => { + // TODO + // Make it a constant + const estimatedGasUsed: number = (estimateWalletDeployment + 77369); + + // const feeTokenTransferGas = feeOption.feeTokenTransferGas + const tokenGasPrice = feeOption.tokenGasPrice || 0; + const offset = feeOption.offset || 1; + let payment = tokenGasPrice * (estimatedGasUsed) / offset; + + let feeQuote = { + symbol: feeOption.symbol, + address: feeOption.address, + decimal: feeOption.decimal, + logoUrl: feeOption.logoUrl, + tokenGasPrice: feeOption.tokenGasPrice, + offset: feeOption.offset, + payment: payment, + refundReceiver: feeOption.refundReceiver + } + + feeQuotes.push(feeQuote); + }); + + return feeQuotes; + } + + // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment + async deployAndPayFees(chainId: ChainId, version: string, feeQuote: FeeQuote): Promise { + // Not checking again if the wallet is actually deployed + // const isDeployed = await this.isDeployed(chainId); + const token = feeQuote.address; + const offset = feeQuote.offset || 1; + const feeReceiver = feeQuote.refundReceiver || DEFAULT_FEE_RECEIVER; + + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: this.owner, + entryPointAddress: this.entryPointAddress, + fallbackHandlerAddress: this.fallBackHandlerAddress + }) + // do estimations here or pass on payment and use feeQuote fully! + let feesToPay = feeQuote.tokenGasPrice * (estimateWalletDeployment + 77369) / offset; + feesToPay = parseInt(feesToPay.toString()); + + const tx = { + to: token, + data: encodeTransfer(feeReceiver, Number(feesToPay)) + }; + + const transaction = await this.createTransaction({version, transaction: tx, batchId: 0, chainId}); + return transaction + } + /** * Prepares compatible WalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction @@ -176,6 +292,246 @@ class Transaction { return walletTx } + async estimateTransaction(prepareTransactionDto: PrepareRefundTransactionDto): Promise { + const { + transaction, + batchId, + chainId, + version + } = prepareTransactionDto + + let estimatedGasUsed = 0; + // Check if available from current state + const isDeployed = await this.contractUtils.isDeployed( + chainId, + version, + this.address + ); + if (!isDeployed) { + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: this.owner, + entryPointAddress: this.entryPointAddress, + fallbackHandlerAddress: this.fallBackHandlerAddress + }) + console.log('estimateWalletDeployment ', estimateWalletDeployment); + + estimatedGasUsed += estimateWalletDeployment; + } + + const tx = await this.createTransaction({ version, transaction, batchId, chainId }); + + const txn: ExecTransaction = { + to: tx.to, + value: tx.value, + data: tx.data, + operation: tx.operation, + targetTxGas: tx.targetTxGas + } + + // to avoid failing eth_call override with undeployed wallet + txn.targetTxGas = 500000; + + const refundInfo: FeeRefundV1_0_1 = { + baseGas: tx.baseGas, + gasPrice: tx.gasPrice, + tokenGasPriceFactor: tx.tokenGasPriceFactor, + gasToken: tx.gasToken, + refundReceiver: tx.refundReceiver + } + + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + version, + transaction: txn, + walletAddress: this.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE + } + + const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas(estimateUndeployedContractGasDto); + let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); + console.log('no auth no refund estimate', noAuthEstimate); + + estimatedGasUsed += noAuthEstimate; + + return estimatedGasUsed; + } + + // Get Fee Options from relayer and make it available for display + // We can also show list of transactions to be processed (decodeContractCall) + /** + * + * @param prepareRefundTransactionDto + */ + async prepareRefundTransaction( + prepareRefundTransactionDto: PrepareRefundTransactionDto + ): Promise { + // TODO + // Review @Talha + const { + transaction, + batchId, + chainId, + version + } = prepareRefundTransactionDto + + const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response + let feeQuotes: Array = [] + + // 1. If wallet is deployed + // 2. If wallet is not deployed (batch wallet deployment on multisend) + // actual estimation with dummy sig + // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth + const estimatedGasUsed: number = await this.estimateTransaction({ + version, + transaction, + batchId, + chainId + }) + + // also relayer would give feeReceiver that becomes part of feeQuote + + feeOptionsAvailable.forEach((feeOption) => { + const feeTokenTransferGas = feeOption.feeTokenTransferGas + const tokenGasPrice = feeOption.tokenGasPrice || 0 + const offset = feeOption.offset || 1 + let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; + + let feeQuote = { + symbol: feeOption.symbol, + address: feeOption.address, + decimal: feeOption.decimal, + logoUrl: feeOption.logoUrl, + tokenGasPrice: feeOption.tokenGasPrice, + offset: feeOption.offset, + payment: payment, + refundReceiver: feeOption.refundReceiver + } + + feeQuotes.push(feeQuote) + }) + + return feeQuotes + } + + async estimateTransactionBatch( prepareRefundTransactionsDto: PrepareRefundTransactionsDto): Promise { + + const { transactions, batchId, chainId, version } = prepareRefundTransactionsDto + let estimatedGasUsed = 0; + // Check if available from current state + const isDeployed = await this.contractUtils.isDeployed(chainId, version, this.address); + if (!isDeployed) { + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: this.owner, + entryPointAddress: this.entryPointAddress, + fallbackHandlerAddress: this.fallBackHandlerAddress + }); + console.log('estimateWalletDeployment ', estimateWalletDeployment); + estimatedGasUsed += estimateWalletDeployment; + } + + const tx = await this.createTransactionBatch({ version, transactions, batchId, chainId}); + + const txn: ExecTransaction = { + to: tx.to, + value: tx.value, + data: tx.data, + operation: tx.operation, + targetTxGas: tx.targetTxGas + } + + // to avoid failing eth_call override with undeployed wallet + txn.targetTxGas = 500000; + + const refundInfo: FeeRefundV1_0_1 = { + baseGas: tx.baseGas, + gasPrice: tx.gasPrice, + tokenGasPriceFactor: tx.tokenGasPriceFactor, + gasToken: tx.gasToken, + refundReceiver: tx.refundReceiver + } + + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + version, + transaction: txn, + walletAddress: this.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE + } + + const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas(estimateUndeployedContractGasDto); + let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); + console.log('no auth no refund estimate', noAuthEstimate); + + estimatedGasUsed += noAuthEstimate; + + return estimatedGasUsed; + } + + // Get Fee Options from relayer and make it available for display + // We can also show list of transactions to be processed (decodeContractCall) + /** + * + * @param prepareRefundTransactionsDto + */ + // TODO: Rename method to getFeeOptionsForBatch + async prepareRefundTransactionBatch( + prepareRefundTransactionsDto: PrepareRefundTransactionsDto + ): Promise { + const { + transactions, + batchId, + chainId, + version + } = prepareRefundTransactionsDto + console.log('calling getFeeOptions'); + + const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) + console.log('gasPriceQuotesResponse '); + + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response + let feeQuotes: Array = [] + + // 1. If wallet is deployed + // 2. If wallet is not deployed (batch wallet deployment on multisend) + // actual estimation with dummy sig + // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth + const estimatedGasUsed: number = await this.estimateTransactionBatch({ + version, + transactions, + batchId, + chainId + }) + + feeOptionsAvailable.forEach((feeOption) => { + const feeTokenTransferGas = feeOption.feeTokenTransferGas + const tokenGasPrice = feeOption.tokenGasPrice || 0 + const offset = feeOption.offset || 1 + let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; + + let feeQuote = { + symbol: feeOption.symbol, + address: feeOption.address, + decimal: feeOption.decimal, + logoUrl: feeOption.logoUrl, + tokenGasPrice: feeOption.tokenGasPrice, + offset: feeOption.offset, + payment: payment, + refundReceiver: feeOption.refundReceiver + } + + feeQuotes.push(feeQuote) + }) + + return feeQuotes + } + async estimateSmartAccountDeployment(estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto): Promise { const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); const { chainId, version, owner, entryPointAddress, fallbackHandlerAddress } = estimateSmartAccountDeploymentDto @@ -223,8 +579,8 @@ class Transaction { chainId, version, owner: this.owner, - entryPointAddress: '', - fallbackHandlerAddress: '' + entryPointAddress: this.entryPointAddress, + fallbackHandlerAddress: this.fallBackHandlerAddress }) // We know it's going to get deployed by Relayer but we handle refund cost here.. additionalBaseGas += estimateWalletDeployment // wallet deployment gas @@ -283,7 +639,7 @@ class Transaction { const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGasOverride( estimateHandlePaymentGas ) - let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + handlePaymentEstimate = Number(handlePaymentResponse.data.gas) console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate) baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas @@ -320,7 +676,7 @@ class Transaction { feeRefund: refundDetails } const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentGas) - let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + handlePaymentEstimate = Number(handlePaymentResponse.data.gas) console.log('handlePaymentEstimate ', handlePaymentEstimate) @@ -343,6 +699,183 @@ class Transaction { return walletTx } + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Rename based on other variations to prepare transaction + * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) + * @param refundTransactionBatchDto + * @returns + */ + async createRefundTransactionBatch( + refundTransactionBatchDto: RefundTransactionBatchDto + ): Promise { + const { + transactions, + feeQuote, + batchId, + chainId, + version + } = refundTransactionBatchDto + let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() + const connectedWallet = this.address + walletContract = walletContract.attach(connectedWallet) + + const isDeployed = await this.contractUtils.isDeployed(chainId, version, this.address); + let additionalBaseGas = 0; + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (isDeployed) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } else { + // TODO : estimation cost can be passed + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: this.owner, + entryPointAddress: this.entryPointAddress, + fallbackHandlerAddress: this.fallBackHandlerAddress + }) + // We know it's going to get deployed by Relayer but we handle refund cost here.. + console.log('estimateWalletDeployment ', estimateWalletDeployment) + + // We know it's going to get deployed by Relayer + // but we handle refund cost here.. + additionalBaseGas += estimateWalletDeployment // wallet deployment gas + } + console.log('nonce: ', nonce) + + const txs: MetaTransaction[] = [] + + for (let i = 0; i < transactions.length; i++) { + const innerTx: WalletTransaction = buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) + + txs.push(innerTx) + } + + const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( + this.contractUtils.multiSendContract[chainId][version].getContract(), + txs, + nonce + ); + console.log('wallet txn with refund ', walletTx); + + const internalTx: MetaTransactionData = { + to: walletTx.to, + value: walletTx.value || 0, + data: walletTx.data || '0x', + operation: walletTx.operation + } + console.log(internalTx); + + let targetTxGas, baseGas, handlePaymentEstimate; + const regularOffSet = GAS_USAGE_OFFSET; + + if(!isDeployed){ + // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet + // targetTxGas? + // i. use really high value + // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] + const estimateRequiredTxGas: EstimateRequiredTxGasDto = { + chainId, + walletAddress: this.address, + transaction: internalTx + } + const response = await this.nodeClient.estimateRequiredTxGasOverride(estimateRequiredTxGas) + + // not getting accurate value for undeployed wallet + // TODO + // Review + const requiredTxGasEstimate = Number(response.data.gas) + 700000 + console.log('required txgas estimate (with override) ', requiredTxGasEstimate); + targetTxGas = requiredTxGasEstimate; + + // baseGas? + // Depending on feeToken provide baseGas! We could use constant value provided by the relayer + + const refundDetails: FeeRefundHandlePayment = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + + const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { + chainId, + version: version, + walletAddress: this.address, + feeRefund: refundDetails + } + + const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGasOverride( + estimateHandlePaymentGas + ) + let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate); + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; + } else { + + const estimateRequiredTxGas: EstimateRequiredTxGasDto = { + chainId, + walletAddress: this.address, + transaction: internalTx + } + + const response = await this.nodeClient.estimateRequiredTxGas(estimateRequiredTxGas) + // considerable offset ref gnosis safe service client safeTxGas + // @Talha + // TODO + // handle exception responses and when gas returned is 0 + // We could stop the further flow + const requiredTxGasEstimate = Number(response.data.gas) + 30000 + console.log('required txgas estimate ', requiredTxGasEstimate); + targetTxGas = requiredTxGasEstimate; + + const refundDetails: FeeRefundHandlePayment = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + + const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { + chainId, + version: version, + walletAddress: this.address, + feeRefund: refundDetails + } + const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentGas) + let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + console.log('handlePaymentEstimate ', handlePaymentEstimate); + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment + } + + const finalWalletTx: WalletTransaction = buildSmartAccountTransaction({ + to: walletTx.to, + value: walletTx.value, + data: walletTx.data, // for token transfers use encodeTransfer + operation: walletTx.operation, + targetTxGas: targetTxGas, + baseGas: baseGas, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS, + gasPrice: feeQuote.tokenGasPrice.toString(), //review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + nonce + }) + + return finalWalletTx + } + async getAddress( addressForCounterFactualWalletDto: AddressForCounterFactualWalletDto ): Promise { From a5666e57fc8dd57b90e62686ea4d53c92b0a3347 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 30 Sep 2022 21:39:12 +0400 Subject: [PATCH 0155/1247] initial setup + dev notes --- package.json | 2 +- packages/core-types/src/index.ts | 1 + packages/core-types/src/node-client.types.ts | 1 + .../core-types/src/smart-account.types.ts | 13 +- packages/smart-account/src/SmartAccount.ts | 282 ++---- .../src/utils/FetchContractsInfo.ts | 14 +- packages/transactions/src/RelayerAPI.ts | 0 packages/transactions/src/TransactionAPI.ts | 16 + packages/transactions/src/account-utils.ts | 84 ++ packages/transactions/src/contract-utils.ts | 38 +- packages/transactions/src/estimator.ts | 179 ++++ packages/transactions/src/index.ts | 14 +- .../transactions/src/transaction-manager.ts | 728 ++++++++++++++ packages/transactions/src/transaction.ts | 921 ------------------ packages/transactions/src/types.ts | 3 + packages/transactions/src/utils.ts | 153 +-- .../src/utils/FetchContractsInfo.ts | 13 +- 17 files changed, 1255 insertions(+), 1207 deletions(-) create mode 100644 packages/core-types/src/node-client.types.ts create mode 100644 packages/transactions/src/RelayerAPI.ts create mode 100644 packages/transactions/src/TransactionAPI.ts create mode 100644 packages/transactions/src/account-utils.ts create mode 100644 packages/transactions/src/estimator.ts create mode 100644 packages/transactions/src/transaction-manager.ts delete mode 100644 packages/transactions/src/transaction.ts diff --git a/package.json b/package.json index 2b0041825..f76365bd6 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.1.6", - "nx": "^14.7.8", + "nx": "^14.8.2", "prettier": "2.7.1", "ts-node": "^10.9.1" }, diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts index 2e4411586..163b3bdf7 100644 --- a/packages/core-types/src/index.ts +++ b/packages/core-types/src/index.ts @@ -6,5 +6,6 @@ export * from './contracts/EntryPointContract' export * from './ethereumLibs/EthAdapter' export * from './types' export * from './chains.types' +export * from './node-client.types' export * from './transaction.types' export * from './smart-account.types' diff --git a/packages/core-types/src/node-client.types.ts b/packages/core-types/src/node-client.types.ts new file mode 100644 index 000000000..c833e7b2d --- /dev/null +++ b/packages/core-types/src/node-client.types.ts @@ -0,0 +1 @@ +import { ChainId } from './chains.types' \ No newline at end of file diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index e66a7ac63..b21be4c89 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -16,7 +16,8 @@ export interface Config { version: string activeNetworkId: ChainId // same supportedNetworksIds: ChainId[] // Network[] chainId: CbainId, rpcUrl?: string - backend_url: string + backend_url: string, + relayer_url: string } export interface SmartAccountContext { @@ -36,11 +37,11 @@ export type EstimateSmartAccountDeploymentDto = { } export interface SmartAccountState { - address: string - owner: string - isDeployed: boolean - entryPointAddress: string - fallbackHandlerAddress: string + address: string // multichain (EVM) + owner: string // multichain (EVM) + isDeployed: boolean // chain specific + entryPointAddress: string // chain specific + fallbackHandlerAddress: string // chain specific } export type AddressForCounterFactualWalletDto = { diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 66ae5d480..2b8b5bcb7 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -1,11 +1,5 @@ import EthersAdapter from '@biconomy-sdk/ethers-lib' -import { ethers } from 'ethers' import { - getSmartWalletFactoryContract, - getMultiSendContract, - getMultiSendCallOnlyContract, - getSmartWalletContract, - findChainById, findContractAddressesByVersion } from './utils/FetchContractsInfo' import { @@ -19,7 +13,6 @@ import { TransactionBatchDto, ExecTransaction, RelayTransaction, - FeeRefundHandlePayment, FeeRefundV1_0_0, FeeRefundV1_0_1, WalletTransaction, @@ -29,60 +22,34 @@ import { SmartAccountContext, SmartWalletFactoryContract, SmartWalletContract, - MultiSendContract, - MultiSendCallOnlyContract, + AddressForCounterFactualWalletDto, RawTransactionType, SmartAccountState, - MetaTransactionData, - MetaTransaction, - OperationType, - TokenData, FeeQuote, - FeeOptionsResponse, - ZERO_ADDRESS, - FAKE_SIGNATURE, - GAS_USAGE_OFFSET, - DEFAULT_FEE_RECEIVER, RelayResponse, Config } from '@biconomy-sdk/core-types' -import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' +import { JsonRpcSigner } from '@ethersproject/providers' import NodeClient, { ChainConfig, - SupportedChainsResponse, SmartAccountsResponse, SmartAccountByOwnerDto, - EstimateExternalGasDto, - EstimateRequiredTxGasDto, - EstimateHandlePaymentTxGasDto, - EstimateUndeployedContractGasDto } from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' -import { Relayer } from '@biconomy-sdk/relayer' -import Transaction, { - buildSmartAccountTransaction, - smartAccountSignMessage, - buildMultiSendSmartAccountTx, - encodeTransfer -} from '@biconomy-sdk/transactions' -import { GasEstimator } from './assets' +import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' +import { TransactionManager, ContractUtils } from '@biconomy-sdk/transactions' import { BalancesDto } from '@biconomy-sdk/node-client' import { BalancesResponse, UsdBalanceResponse, - EstimateGasResponse } from '@biconomy-sdk/node-client' -console.log('NodeClient ', NodeClient) -console.log('Transaction ', Transaction) -// import { ContractUtils } from '@biconomy-sdk/transactions' // Create an instance of Smart Account with multi-chain support. - -// extends Transaction class SmartAccount { // By default latest version DEFAULT_VERSION: SmartAccountVersion = '1.0.1' + // { ethAdapter } is a window that gives access to all the implemented functions of it // requires signer and read-only provider ethAdapter!: { [chainId: number]: EthersAdapter } @@ -98,15 +65,20 @@ class SmartAccount { // Chain configurations fetched from backend chainConfig!: ChainConfig[] - - // providers!: Web3Provider[] + + // Can maintain it's own version of provider / providers provider!: Web3Provider + // Ideally not JsonRpcSigner but extended signer // Also the original EOA signer signer!: JsonRpcSigner + // We may have different signer for ERC4337 nodeClient!: NodeClient - transactionInstance!: any + contractUtils!: ContractUtils + + // TBD : Do we keep manager for both SCW(forward) and Account Abstraction? + transactionManager!: { [chainId: number]: TransactionManager } // Instance of relayer (Relayer Service Client) connected with this Smart Account and always ready to dispatch transactions // relayer.relay => dispatch to blockchain @@ -122,18 +94,15 @@ class SmartAccount { // @review address!: string - contractUtils!: any - - - // TODO // Review provider type WalletProviderLike / ExternalProvider // Can expose recommended provider classes through the SDK - /**Constrcutor for the Smart Account. If config is not provided it makes Smart Contract available using default configuration + /** + * Constrcutor for the Smart Account. If config is not provided it makes Smart Account available using default configuration * If you wish to use your own backend server and relayer service, pass the URLs here */ + // review SmartAccountConfig constructor(walletProvider: Web3Provider, config: Config) { - // super(walletProvider, config) this.#smartAccountConfig = { ...DefaultSmartAccountConfig } if (config) { this.#smartAccountConfig = { ...this.#smartAccountConfig, ...config } @@ -141,25 +110,34 @@ class SmartAccount { this.ethAdapter = {} this.supportedNetworkIds = this.#smartAccountConfig.supportedNetworksIds + this.provider = walletProvider this.signer = walletProvider.getSigner() - - // this.transactionInstance = new Transaction(this.provider, this.#smartAccountConfig) - // this.contractUtils = new ContractUtils() - // this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) + this.contractUtils = new ContractUtils() + this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) + this.relayer = new RestRelayer({url: this.#smartAccountConfig.relayer_url}); } async init(){ + this.owner = await this.signer.getAddress() this.#smartAccountConfig.owner = this.owner - this.transactionInstance = new Transaction() - await this.transactionInstance.initialize(this.provider, this.#smartAccountConfig) - this.nodeClient = await this.transactionInstance.getNodeClient() - this.contractUtils = await this.transactionInstance.getContractUtilInstance() + const chainConfig = (await this.nodeClient.getAllSupportedChains()).data this.chainConfig = chainConfig - this.address = await this.transactionInstance.getAddress({index: 0, chainId: this.#smartAccountConfig.activeNetworkId, version: this.DEFAULT_VERSION}) + + await this.contractUtils.initialize(chainConfig, this.signer) + + this.address = await this.getAddress({index: 0, chainId: this.#smartAccountConfig.activeNetworkId, version: this.DEFAULT_VERSION}) + + await Promise.all(this.supportedNetworkIds.map(async(networkId) => { + this.transactionManager[networkId] = new TransactionManager(networkId) + const state = await this.getSmartAccountState(networkId) + // Note: Defualt relayer needs to set in constructor + await this.transactionManager[networkId].initialize(this.relayer, this.nodeClient, this.contractUtils, state) + })) + return this } @@ -171,18 +149,9 @@ class SmartAccount { // TODO //@review @Talha async setSmartAccountVersion(smartAccountVersion: SmartAccountVersion) { this.DEFAULT_VERSION = smartAccountVersion - this.address = await this.transactionInstance.getAddress({index: 0, chainId: this.#smartAccountConfig.activeNetworkId, version: this.DEFAULT_VERSION}) + this.address = await this.getAddress({index: 0, chainId: this.#smartAccountConfig.activeNetworkId, version: this.DEFAULT_VERSION}) } - // Review : more / other potential methods - // sendSignedTransaction - // signMessage - - // Discuss about multichain aspect of relayer node url and clients - // TODO: get details from backend config - // NOTE: Discuss about multichain aspect of relayer node url and clients - - public async getAlltokenBalances( balancesDto: BalancesDto, chainId: ChainId = this.#smartAccountConfig.activeNetworkId @@ -205,36 +174,6 @@ class SmartAccount { return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto) } - public async estimateExternalGas( - estimateExternalGasDto: EstimateExternalGasDto - ): Promise { - return this.nodeClient.estimateExternalGas(estimateExternalGasDto) - } - public async estimateRequiredTxGas( - estimateRequiredTxGasDto: EstimateRequiredTxGasDto - ): Promise { - return this.nodeClient.estimateRequiredTxGas(estimateRequiredTxGasDto) - } - public async estimateRequiredTxGasOverride( - estimateRequiredTxGasDto: EstimateRequiredTxGasDto - ): Promise { - return this.nodeClient.estimateRequiredTxGasOverride(estimateRequiredTxGasDto) - } - public async estimateHandlePaymentGas( - estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto - ): Promise { - return this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentTxGasDto) - } - public async estimateHandlePaymentGasOverride( - estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto - ): Promise { - return this.nodeClient.estimateHandlePaymentGasOverride(estimateHandlePaymentTxGasDto) - } - public async estimateUndeployedContractGas(estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto - ): Promise { - return this.nodeClient.estimateUndeployedContractGas(estimateUndeployedContractGasDto) - } - // return adapter instance to be used for blockchain interactions /** * adapter instance to be used for some blockchain interactions @@ -255,7 +194,8 @@ class SmartAccount { async setRelayer(relayer: Relayer): Promise { if (relayer === undefined) return this this.relayer = relayer - await this.transactionInstance.setRelayer(relayer) + //If we end up maintaining relayer instance on this then it should update all transaction managers + //await this.transactionManager[this.#smartAccountConfig.activeNetworkId].setRelayer(relayer) return this } @@ -270,6 +210,7 @@ class SmartAccount { return this } + /** * * @notice personal sign is used currently (// @todo Signer should be able to use _typedSignData) @@ -281,10 +222,10 @@ class SmartAccount { signTransactionDto.chainId = this.#smartAccountConfig.activeNetworkId signTransactionDto.version = this.DEFAULT_VERSION signTransactionDto.signer = this.signer - - return this.transactionInstance.signTransaction(signTransactionDto) + return this.signer.signTransaction(signTransactionDto) } + // This would be a implementation on user sponsorship provider /** * Prepares encoded wallet transaction, gets signature from the signer and dispatches to the blockchain using relayer * @param tx WalletTransaction Smart Account Transaction object prepared @@ -375,10 +316,12 @@ class SmartAccount { ): Promise { // TODO // Review @Talha - prepareRefundTransactionDto.chainId = this.#smartAccountConfig.activeNetworkId + // Note : If you have provided a chainId in dto then that should be used and fallback to activer chain Id + const chainId = this.#smartAccountConfig.activeNetworkId + prepareRefundTransactionDto.chainId = chainId prepareRefundTransactionDto.version = this.DEFAULT_VERSION prepareRefundTransactionDto.batchId = 0 - return this.transactionInstance.prepareRefundTransaction(prepareRefundTransactionDto) + return this.transactionManager[chainId].prepareRefundTransaction(prepareRefundTransactionDto) } // Get Fee Options from relayer and make it available for display @@ -391,11 +334,12 @@ class SmartAccount { async prepareRefundTransactionBatch( prepareRefundTransactionsDto: PrepareRefundTransactionsDto ): Promise { - prepareRefundTransactionsDto.chainId = this.#smartAccountConfig.activeNetworkId + const chainId = this.#smartAccountConfig.activeNetworkId + prepareRefundTransactionsDto.chainId = chainId prepareRefundTransactionsDto.version = this.DEFAULT_VERSION prepareRefundTransactionsDto.batchId = 0 console.log('prepareRefundTransactionsDto ', prepareRefundTransactionsDto); - return this.transactionInstance.prepareRefundTransactionBatch(prepareRefundTransactionsDto) + return this.transactionManager[chainId].prepareRefundTransactionBatch(prepareRefundTransactionsDto) } // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions @@ -410,11 +354,11 @@ class SmartAccount { async createRefundTransaction( refundTransactionDto: RefundTransactionDto ): Promise { - refundTransactionDto.chainId = this.#smartAccountConfig.activeNetworkId + const chainId = this.#smartAccountConfig.activeNetworkId + refundTransactionDto.chainId = chainId refundTransactionDto.version = this.DEFAULT_VERSION refundTransactionDto.batchId = 0 - - return this.transactionInstance.createRefundTransaction(refundTransactionDto) + return this.transactionManager[chainId].createRefundTransaction(refundTransactionDto) } /** @@ -425,10 +369,11 @@ class SmartAccount { * @returns */ async createTransaction(transactionDto: TransactionDto): Promise { - transactionDto.chainId = this.#smartAccountConfig.activeNetworkId + const chainId = this.#smartAccountConfig.activeNetworkId + transactionDto.chainId = chainId transactionDto.version = this.DEFAULT_VERSION transactionDto.batchId = 0 - return this.transactionInstance.createTransaction(transactionDto) + return this.transactionManager[chainId].createTransaction(transactionDto) } /** @@ -443,9 +388,10 @@ class SmartAccount { async createTransactionBatch( transactionBatchDto: TransactionBatchDto ): Promise { - transactionBatchDto.chainId = this.#smartAccountConfig.activeNetworkId + const chainId = this.#smartAccountConfig.activeNetworkId + transactionBatchDto.chainId = chainId transactionBatchDto.version = this.DEFAULT_VERSION - return this.transactionInstance.createTransactionBatch(transactionBatchDto) + return this.transactionManager[chainId].createTransactionBatch(transactionBatchDto) } /** @@ -458,41 +404,20 @@ class SmartAccount { async createRefundTransactionBatch( refundTransactionBatchDto: RefundTransactionBatchDto ): Promise { - refundTransactionBatchDto.chainId = this.#smartAccountConfig.activeNetworkId + const chainId = this.#smartAccountConfig.activeNetworkId + refundTransactionBatchDto.chainId = chainId refundTransactionBatchDto.version = this.DEFAULT_VERSION refundTransactionBatchDto.batchId = 0 - return this.transactionInstance.createRefundTransactionBatch(refundTransactionBatchDto) - } - - async estimateSmartAccountDeployment(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); - const walletFactoryInterface = this.factory().getInterface(); - const state = await this.getSmartAccountState(); - const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ - this.factory().getAddress(), - walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ - state.owner, - state.entryPointAddress, - state.fallbackHandlerAddress, - 0 - ]) - ]) - console.log('encodedEstimate ', encodedEstimateData) - const deployCostresponse = await this.estimateExternalGas({chainId, encodedData:encodedEstimateData}); - const estimateWalletDeployment = Number(deployCostresponse.data.gas); - console.log('estimateWalletDeployment ', estimateWalletDeployment); - return estimateWalletDeployment; + return this.transactionManager[chainId].createRefundTransactionBatch(refundTransactionBatchDto) } - - async prepareDeployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { - return this.transactionInstance.prepareDeployAndPayFees(chainId, this.DEFAULT_VERSION) + return this.transactionManager[chainId].prepareDeployAndPayFees(chainId, this.DEFAULT_VERSION) } // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment async deployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId, feeQuote: FeeQuote): Promise { - const transaction = await this.transactionInstance.deployAndPayFees(chainId, this.DEFAULT_VERSION, feeQuote) + const transaction = await this.transactionManager[chainId].deployAndPayFees(chainId, this.DEFAULT_VERSION, feeQuote) const txHash = await this.sendTransaction({tx:transaction}); return txHash; } @@ -504,7 +429,6 @@ class SmartAccount { */ smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { const smartWallet = this.contractUtils.smartWalletContract[chainId][this.DEFAULT_VERSION] - // Review @talha const address = this.address smartWallet.getContract().attach(address) return smartWallet @@ -515,39 +439,48 @@ class SmartAccount { * @param chainId optional chainId * @returns Smart Wallet Factory instance for requested chainId */ - factory( - // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): SmartWalletFactoryContract { + factory(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletFactoryContract { return this.contractUtils.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION] } - /** - * - * @param chainId optional chainId - * @returns MultiSend contract instance for requested chainId - */ - multiSend( - // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): MultiSendContract { + multiSend(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { return this.contractUtils.multiSendContract[chainId][this.DEFAULT_VERSION] } - /** - * @notice the difference between multiSend and multiSendCall - * Multisend is only used for delegateCalls (i.e. sending off a batch of transaction from Smart account) - * MultiSendCall is only used for calls (i.e batching Smart Account transaction with another transaction not on Smart Account) - * @param chainId optional chainId - * @returns MultiSend Call Only contract instance for requested chainId - */ - multiSendCall( - // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): MultiSendCallOnlyContract { + multiSendCall(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { return this.contractUtils.multiSendCallOnlyContract[chainId][this.DEFAULT_VERSION] } + // Note: expose getMultiSend(), getMultiSendCall() + + + // TODO + // Note: get Address method should not be here as we are passing smart account state + // Marked for deletion + async getAddress( + addressForCounterFactualWalletDto: AddressForCounterFactualWalletDto + ): Promise { + // TODO: Get from node client first from cache, if not found then query smart contract + const { index, chainId, version } = addressForCounterFactualWalletDto + this.contractUtils.smartWalletFactoryContract[chainId][ + version + ].getAddressForCounterfactualWallet(this.owner, index) + const address = await this.contractUtils.smartWalletFactoryContract[chainId][version].getAddressForCounterfactualWallet(this.owner, index) + this.address = address + return address + } + + // Could be part of SmartAccountAPI for AA + /*async getAddressForCounterfactualWallet( + addressForCounterFactualWalletDto: AddressForCounterFactualWalletDto + ): Promise { + const { index, chainId, version } = addressForCounterFactualWalletDto + console.log('index and ChainId ', index, chainId, version) + return this.contractUtils.smartWalletFactoryContract[chainId][ + version + ].getAddressForCounterfactualWallet(this.owner, index) + }*/ + /** * Allows one to check if the smart account is already deployed on requested chainOd @@ -557,12 +490,16 @@ class SmartAccount { * @returns */ async isDeployed(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - // Other approach : needs review and might be coming wrong - // const readProvider = new ethers.providers.JsonRpcProvider(networks[chainId].providerUrl); - // const walletCode = await readProvider.getCode(await this.getAddress(chainId)); - // return !!walletCode && walletCode !== '0x' - - // but below works + // Other approach : needs review + /*let isPhantom = false + // could be readProvider.getCode + const walletAddressCode = await this.provider.getCode(this.address) + if (walletAddressCode.length > 2) { + isPhantom = true + } + return isPhantom;*/ + + //Below works return await this.contractUtils.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION].isWalletExist(this.address) } @@ -602,13 +539,7 @@ class SmartAccount { // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): SmartAccountContext { - const context: SmartAccountContext = { - baseWallet: this.contractUtils.smartWalletContract[chainId][this.DEFAULT_VERSION], - walletFactory: this.contractUtils.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION], - multiSend: this.contractUtils.multiSendContract[chainId][this.DEFAULT_VERSION], - multiSendCall: this.contractUtils.multiSendCallOnlyContract[chainId][this.DEFAULT_VERSION], - // Could be added dex router for chain in the future - } + const context: SmartAccountContext = this.contractUtils.getSmartAccountContext(chainId) return context } } @@ -620,7 +551,8 @@ export const DefaultSmartAccountConfig: Config = { version: '1.0.1', activeNetworkId: ChainId.GOERLI, //Update later supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], - backend_url: 'https://sdk-backend.staging.biconomy.io/v1' + backend_url: 'https://sdk-backend.staging.biconomy.io/v1', + relayer_url: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay' } export default SmartAccount \ No newline at end of file diff --git a/packages/smart-account/src/utils/FetchContractsInfo.ts b/packages/smart-account/src/utils/FetchContractsInfo.ts index ecf69335a..4e99b1638 100644 --- a/packages/smart-account/src/utils/FetchContractsInfo.ts +++ b/packages/smart-account/src/utils/FetchContractsInfo.ts @@ -1,6 +1,6 @@ import { ChainConfig } from '@biconomy-sdk/node-client' -import { ChainId } from '@biconomy-sdk/core-types' import { + ChainId, SmartWalletContract, SmartWalletFactoryContract, MultiSendContract, @@ -55,23 +55,23 @@ export function findContractAddressesByVersion( ) { const chainInfo: ChainConfig = findChainById(chainId, chainConfig) - const entryPointAddress = chainInfo.entryPoint.find((element) => { + const entryPointAddress = chainInfo.entryPoint.find((element: any) => { return element.version === smartAccountVersion })?.address - const walletFactoryAddress = chainInfo.walletFactory.find((element) => { + const walletFactoryAddress = chainInfo.walletFactory.find((element: any) => { return element.version === smartAccountVersion })?.address - const walletAddress = chainInfo.wallet.find((element) => { + const walletAddress = chainInfo.wallet.find((element: any) => { return element.version === smartAccountVersion })?.address - const multiSendAddress = chainInfo.multiSend.find((element) => { + const multiSendAddress = chainInfo.multiSend.find((element: any) => { return element.version === smartAccountVersion })?.address - const multiSendCallAddress = chainInfo.multiSendCall.find((element) => { + const multiSendCallAddress = chainInfo.multiSendCall.find((element: any) => { return element.version === smartAccountVersion })?.address - const fallBackHandlerAddress = chainInfo.fallBackHandler.find((element) => { + const fallBackHandlerAddress = chainInfo.fallBackHandler.find((element: any) => { return element.version === smartAccountVersion })?.address diff --git a/packages/transactions/src/RelayerAPI.ts b/packages/transactions/src/RelayerAPI.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/transactions/src/TransactionAPI.ts b/packages/transactions/src/TransactionAPI.ts new file mode 100644 index 000000000..921623295 --- /dev/null +++ b/packages/transactions/src/TransactionAPI.ts @@ -0,0 +1,16 @@ +import { BigNumber, BigNumberish } from 'ethers' +import { +SmartWalletContract, +SmartWalletFactoryContract, +MultiSendContract, +MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' +import { Signer } from '@ethersproject/abstract-signer' +import { Provider } from '@ethersproject/providers' + +export class TransactionAPI { + + + constructor() { + } + +} \ No newline at end of file diff --git a/packages/transactions/src/account-utils.ts b/packages/transactions/src/account-utils.ts new file mode 100644 index 000000000..55396fc4b --- /dev/null +++ b/packages/transactions/src/account-utils.ts @@ -0,0 +1,84 @@ +import { + arrayify, + // defaultAbiCoder, + // hexConcat, + parseEther + // solidityKeccak256, +} from 'ethers/lib/utils' +import { + ethers, + BigNumber, + // BigNumberish, + // Contract, + // ContractReceipt, + Wallet +} from 'ethers' +/* import { + IERC20, + EntryPoint, + EntryPoint__factory, + SimpleWallet__factory, +} from "../typechain"; */ +// import { BytesLike } from "@ethersproject/bytes"; +// import { expect } from "chai"; +// import { debugTransaction } from "./debugTx"; +import { keccak256 } from 'ethereumjs-util' + +export const AddressZero = ethers.constants.AddressZero +export const HashZero = ethers.constants.HashZero +export const ONE_ETH = parseEther('1') +export const TWO_ETH = parseEther('2') +export const FIVE_ETH = parseEther('5') + +export const tostr = (x: any) => (x != null ? x.toString() : 'null') + +let counter = 0 +// create non-random account, so gas calculations are deterministic +export function createWalletOwner(): Wallet { + const privateKey = keccak256(Buffer.from(arrayify(BigNumber.from(++counter)))) + return new ethers.Wallet(privateKey, ethers.providers.getDefaultProvider()) + // return new ethers.Wallet('0x'.padEnd(66, privkeyBase), ethers.provider); +} + +export async function getBalance(address: string): Promise { + const balance = await ethers.providers.getDefaultProvider().getBalance(address) + return parseInt(balance.toString()) +} + +export function getSignatureParameters(signature: string) { + if (!ethers.utils.isHexString(signature)) { + throw new Error('Given value "'.concat(signature, '" is not a valid hex string.')) + } + var r = signature.slice(0, 66) + var s = '0x'.concat(signature.slice(66, 130)) + var v = ethers.BigNumber.from('0x'.concat(signature.slice(130, 132))).toNumber() + if (![27, 28].includes(v)) v += 27 + return { + r: r, + s: s, + v: v + } +} + +export const Erc20 = [ + 'function transfer(address _receiver, uint256 _value) public returns (bool success)', + 'function transferFrom(address, address, uint) public returns (bool)', + 'function approve(address _spender, uint256 _value) public returns (bool success)', + 'function allowance(address _owner, address _spender) public view returns (uint256 remaining)', + 'function balanceOf(address _owner) public view returns (uint256 balance)', + 'event Approval(address indexed _owner, address indexed _spender, uint256 _value)' +] + +export const Erc20Interface = new ethers.utils.Interface(Erc20) + +export const encodeTransfer = (target: string, amount: string | number): string => { + return Erc20Interface.encodeFunctionData('transfer', [target, amount]) +} + +export const encodeTransferFrom = ( + from: string, + target: string, + amount: string | number +): string => { + return Erc20Interface.encodeFunctionData('transferFrom', [from, target, amount]) +} diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index ea513e022..24468c24c 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -4,6 +4,7 @@ import { SmartWalletFactoryContract, MultiSendContract, MultiSendCallOnlyContract, + SmartAccountContext, EstimateSmartAccountDeploymentDto } from '@biconomy-sdk/core-types' import{ @@ -15,15 +16,13 @@ import { getMultiSendContract, getMultiSendCallOnlyContract, getSmartWalletContract - } from './utils/FetchContractsInfo' -import { GasEstimator } from './assets' import { ethers } from 'ethers' import EthersAdapter from '@biconomy-sdk/ethers-lib' import { JsonRpcSigner } from '@ethersproject/providers' -import { version } from 'typescript' +import { SmartAccountVersion } from '@biconomy-sdk/core-types' -class ContractUtils { +export class ContractUtils { ethAdapter!: { [chainId: number]: EthersAdapter } smartWalletContract!: { [chainId: number]: { [version: string]: SmartWalletContract } } @@ -35,6 +34,8 @@ class ContractUtils { [chainId: number]: { [version: string]: SmartWalletFactoryContract } } + // Note: Should DEFAULT_VERSION be moved here? + constructor(){ this.ethAdapter = {} this.smartWalletContract = {} @@ -43,8 +44,8 @@ class ContractUtils { this.smartWalletFactoryContract = {} } - public async initialize(supportedChains: SupportedChainsResponse, signer: JsonRpcSigner) { - const chainsInfo = supportedChains.data + public async initialize(supportedChains: ChainConfig[], signer: JsonRpcSigner) { + const chainsInfo = supportedChains; for (let i = 0; i < chainsInfo.length; i++) { const network = chainsInfo[i] @@ -106,7 +107,9 @@ class ContractUtils { ) } } + // TODO: params as Object + // May not need it at all if we go provider route async isDeployed(chainId: ChainId, version: string, address: string): Promise { // Other approach : needs review and might be coming wrong // const readProvider = new ethers.providers.JsonRpcProvider(networks[chainId].providerUrl); @@ -117,6 +120,27 @@ class ContractUtils { return await this.smartWalletFactoryContract[chainId][version].isWalletExist(address) } + // + /** + * Serves smart contract instances associated with Smart Account for requested ChainId + * Context is useful when relayer is deploying a wallet + * @param chainId requested chain : default is active chain + * @returns object containing relevant contract instances + */ + getSmartAccountContext( + // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, + chainId: ChainId, + version: SmartAccountVersion + ): SmartAccountContext { + const context: SmartAccountContext = { + baseWallet: this.smartWalletContract[chainId][version], + walletFactory: this.smartWalletFactoryContract[chainId][version], + multiSend: this.multiSendContract[chainId][version], + multiSendCall: this.multiSendCallOnlyContract[chainId][version], + // Could be added dex router for chain in the future + } + return context + } } -export default ContractUtils \ No newline at end of file +// export default ContractUtils \ No newline at end of file diff --git a/packages/transactions/src/estimator.ts b/packages/transactions/src/estimator.ts new file mode 100644 index 000000000..5dae04719 --- /dev/null +++ b/packages/transactions/src/estimator.ts @@ -0,0 +1,179 @@ +import { ethers } from 'ethers' +import { GasEstimator } from './assets' +import NodeClient, { + ChainConfig, + SupportedChainsResponse, + SmartAccountsResponse, + SmartAccountByOwnerDto, + EstimateExternalGasDto, + EstimateRequiredTxGasDto, + EstimateHandlePaymentTxGasDto, + EstimateUndeployedContractGasDto, +} from '@biconomy-sdk/node-client' +import { ContractUtils } from './contract-utils' +import { + PrepareRefundTransactionDto, + PrepareRefundTransactionsDto, + EstimateSmartAccountDeploymentDto, + WalletTransaction, + FAKE_SIGNATURE, + ExecTransaction, + FeeRefundV1_0_1, + SmartAccountState, + } from '@biconomy-sdk/core-types' + +export class Estimator { + + nodeClient!: NodeClient + + contractUtils!: ContractUtils + + // Note: Smart account state should Not be part of constructor + constructor(nodeClient: NodeClient, contractUtils: ContractUtils) { + this.nodeClient = nodeClient + this.contractUtils = contractUtils + } + + async estimateTransaction(prepareTransactionDto: PrepareRefundTransactionDto, createdTransaction: WalletTransaction, smartAccountState: SmartAccountState): Promise { + const { + transaction, + batchId, + chainId, + version + } = prepareTransactionDto + + let estimatedGasUsed = 0; + // Check if available from current state + const isDeployed = await this.contractUtils.isDeployed( + chainId, + version, + smartAccountState.address // SmartAccountState + ); + if (!isDeployed) { + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: smartAccountState.owner, // SmartAccountState + entryPointAddress: smartAccountState.entryPointAddress, // SmartAccountState + fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress // SmartAccountState + }) + console.log('estimateWalletDeployment ', estimateWalletDeployment); + + estimatedGasUsed += estimateWalletDeployment; + } + + const txn: ExecTransaction = { + to: createdTransaction.to, + value: createdTransaction.value, + data: createdTransaction.data, + operation: createdTransaction.operation, + targetTxGas: createdTransaction.targetTxGas + } + + // to avoid failing eth_call override with undeployed wallet + txn.targetTxGas = 500000; + + const refundInfo: FeeRefundV1_0_1 = { + baseGas: createdTransaction.baseGas, + gasPrice: createdTransaction.gasPrice, + tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, + gasToken: createdTransaction.gasToken, + refundReceiver: createdTransaction.refundReceiver + } + + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + version, + transaction: txn, + walletAddress: smartAccountState.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE + } + + const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas(estimateUndeployedContractGasDto); + let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); + console.log('no auth no refund estimate', noAuthEstimate); + + estimatedGasUsed += noAuthEstimate; + + return estimatedGasUsed; + } + + async estimateTransactionBatch(prepareRefundTransactionsDto: PrepareRefundTransactionsDto, createdTransaction: WalletTransaction, smartAccountState: SmartAccountState): Promise { + + const { transactions, batchId, chainId, version } = prepareRefundTransactionsDto + let estimatedGasUsed = 0; + // Check if available from current state + const isDeployed = await this.contractUtils.isDeployed(chainId, version, smartAccountState.address); + if (!isDeployed) { + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: smartAccountState.owner, + entryPointAddress: smartAccountState.entryPointAddress, + fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress + }); + console.log('estimateWalletDeployment ', estimateWalletDeployment); + estimatedGasUsed += estimateWalletDeployment; + } + + const txn: ExecTransaction = { + to: createdTransaction.to, + value: createdTransaction.value, + data: createdTransaction.data, + operation: createdTransaction.operation, + targetTxGas: createdTransaction.targetTxGas + } + + // to avoid failing eth_call override with undeployed wallet + txn.targetTxGas = 500000; + + const refundInfo: FeeRefundV1_0_1 = { + baseGas: createdTransaction.baseGas, + gasPrice: createdTransaction.gasPrice, + tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, + gasToken: createdTransaction.gasToken, + refundReceiver: createdTransaction.refundReceiver + } + + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + version, + transaction: txn, + walletAddress: smartAccountState.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE + } + + const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas(estimateUndeployedContractGasDto); + let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); + console.log('no auth no refund estimate', noAuthEstimate); + + estimatedGasUsed += noAuthEstimate; + + return estimatedGasUsed; + } + + async estimateSmartAccountDeployment(estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto): Promise { + const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); + const { chainId, version, owner, entryPointAddress, fallbackHandlerAddress } = estimateSmartAccountDeploymentDto + const walletFactoryInterface = this.contractUtils.smartWalletFactoryContract[chainId][version].getInterface(); + const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ + this.contractUtils.smartWalletFactoryContract[chainId][version].getAddress(), + walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ + owner, + entryPointAddress, + fallbackHandlerAddress, + 0 + ]) + ]) + console.log('encodedEstimate ', encodedEstimateData) + const deployCostresponse = await this.nodeClient.estimateExternalGas({ chainId, encodedData: encodedEstimateData }); + const estimateWalletDeployment = Number(deployCostresponse.data.gas); + console.log('estimateWalletDeployment ', estimateWalletDeployment); + return estimateWalletDeployment; + } + + + +} \ No newline at end of file diff --git a/packages/transactions/src/index.ts b/packages/transactions/src/index.ts index b1ec1ab49..311fc9fc3 100644 --- a/packages/transactions/src/index.ts +++ b/packages/transactions/src/index.ts @@ -1,15 +1,9 @@ +// Review +export { TransactionManager } from './transaction-manager' +export { ContractUtils } from './contract-utils' -import Transaction from './transaction' -import ContractUtils from './contract-utils' - - -export default Transaction - - -export * from './utils' +export * from './account-utils' export * from './execution' export * from './multisend' -// export { ContractUtils } - diff --git a/packages/transactions/src/transaction-manager.ts b/packages/transactions/src/transaction-manager.ts new file mode 100644 index 000000000..769467dba --- /dev/null +++ b/packages/transactions/src/transaction-manager.ts @@ -0,0 +1,728 @@ +import { smartAccountSignMessage } from './execution' +import { encodeTransfer } from './account-utils' +import { + DEFAULT_FEE_RECEIVER, + PrepareRefundTransactionsDto, + PrepareRefundTransactionDto, + TransactionDto, + TransactionBatchDto, + RefundTransactionBatchDto, + MetaTransaction, + MetaTransactionData, + RefundTransactionDto, + WalletTransaction, + OperationType, + ZERO_ADDRESS, + ChainId, + FeeQuote, + FeeOptionsResponse, + TokenData, + GAS_USAGE_OFFSET, + FeeRefundHandlePayment, + EstimateSmartAccountDeploymentDto, + SmartAccountState +} from '@biconomy-sdk/core-types' +import { ethers } from 'ethers' +import EthersAdapter from '@biconomy-sdk/ethers-lib' +import { GasEstimator } from './assets' +import { Estimator } from './estimator' + +import NodeClient, { + EstimateRequiredTxGasDto, + EstimateHandlePaymentTxGasDto +} from '@biconomy-sdk/node-client' + +import { Relayer } from '@biconomy-sdk/relayer' +import { ContractUtils } from './contract-utils' +import { Utils } from './Utils' + +// export class +export class TransactionManager { + + chainId: ChainId + + // Need setters + nodeClient!: NodeClient + estimator!: Estimator + contractUtils!: ContractUtils + relayer!: Relayer + + utils!: Utils + + smartAccountState!: SmartAccountState + + + constructor(chainId: ChainId) { + this.chainId = chainId + this.utils = new Utils() + } + + // smart account config and context + async initialize(relayer: Relayer, nodeClient: NodeClient, contractUtils: ContractUtils, smartAccountState: SmartAccountState) { + + // Note: smart account is state specific so we may end up using chain specific transaction managers as discussed. + + this.smartAccountState = smartAccountState + + this.nodeClient = nodeClient + // this.nodeClient = new NodeClient({ txServiceUrl: config.backend_url }) + + this.contractUtils = contractUtils + + this.relayer = relayer + + // estimator init + this.estimator = new Estimator(this.nodeClient, this.contractUtils) + } + + setRelayer(relayer: Relayer) { + this.relayer = relayer + return this + } + + async getContractUtilInstance(): Promise { + return this.contractUtils + } + + async getEstimatorInstance(): Promise { + return this.estimator + } + + async getNodeClient(): Promise { + return this.nodeClient + } + + async prepareDeployAndPayFees(chainId: ChainId, version: string) { + console.log(chainId) + const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(this.chainId) + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; + let feeQuotes: Array = []; + + const self = this + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId: self.chainId, + version, + owner: this.smartAccountState.owner, + entryPointAddress: this.smartAccountState.entryPointAddress, + fallbackHandlerAddress: this.smartAccountState.fallbackHandlerAddress + }) + + feeOptionsAvailable.forEach((feeOption) => { + // TODO + // Make it a constant + const estimatedGasUsed: number = (estimateWalletDeployment + 77369); + + // const feeTokenTransferGas = feeOption.feeTokenTransferGas + const tokenGasPrice = feeOption.tokenGasPrice || 0; + const offset = feeOption.offset || 1; + let payment = tokenGasPrice * (estimatedGasUsed) / offset; + + let feeQuote = { + symbol: feeOption.symbol, + address: feeOption.address, + decimal: feeOption.decimal, + logoUrl: feeOption.logoUrl, + tokenGasPrice: feeOption.tokenGasPrice, + offset: feeOption.offset, + payment: payment, + refundReceiver: feeOption.refundReceiver + } + + feeQuotes.push(feeQuote); + }); + + return feeQuotes; + } + + // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment + async deployAndPayFees(chainId: ChainId, version: string, feeQuote: FeeQuote): Promise { + console.log(chainId) + const token = feeQuote.address; + const offset = feeQuote.offset || 1; + const feeReceiver = feeQuote.refundReceiver || DEFAULT_FEE_RECEIVER; + + const self = this + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId: this.chainId, + version, + owner: this.smartAccountState.owner, + entryPointAddress: this.smartAccountState.entryPointAddress, + fallbackHandlerAddress: this.smartAccountState.fallbackHandlerAddress + }) + // do estimations here or pass on payment and use feeQuote fully! + let feesToPay = feeQuote.tokenGasPrice * (estimateWalletDeployment + 77369) / offset; + feesToPay = parseInt(feesToPay.toString()); + + const tx = { + to: token, + data: encodeTransfer(feeReceiver, Number(feesToPay)) + }; + + const transaction = await this.createTransaction({ version, transaction: tx, batchId: 0, chainId: this.chainId }); + return transaction + } + + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Rename based on other variations to prepare transaction + * @notice This transaction is without fee refund (gasless) + * @param transactionDto + * @returns + */ + async createTransaction(transactionDto: TransactionDto): Promise { + const { transaction, batchId = 0, version } = transactionDto + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let walletContract = this.contractUtils.smartWalletContract[this.chainId][version].getContract() + walletContract = walletContract.attach(this.smartAccountState.address) + + let nonce = 0 + if (await this.contractUtils.isDeployed(this.chainId, version, this.smartAccountState.address)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } + console.log('nonce: ', nonce) + + const walletTx: WalletTransaction = this.utils.buildSmartAccountTransaction({ + to: transaction.to, + value: transaction.value, + data: transaction.data, // for token transfers use encodeTransfer + nonce + }) + + return walletTx + } + + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Write test case and limit batch size based on test results in scw-contracts + * @notice This transaction is without fee refund (gasless) + * @param transaction + * @param batchId + * @param chainId + * @returns + */ + // TODO: Merge this method with createTransaction, both batch and single transactions can be batched in same transactions + async createTransactionBatch( + transactionBatchDto: TransactionBatchDto + ): Promise { + const { transactions, batchId, version } = transactionBatchDto + // NOTE : If the wallet is not deployed yet then nonce would be zero + let walletContract = this.contractUtils.smartWalletContract[this.chainId][version].getContract() + walletContract = walletContract.attach(this.smartAccountState.address) + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (await this.contractUtils.isDeployed(this.chainId, version, this.smartAccountState.address)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } + console.log('nonce: ', nonce) + + const txs: MetaTransaction[] = [] + + for (let i = 0; i < transactions.length; i++) { + const innerTx: WalletTransaction = this.utils.buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) + + txs.push(innerTx) + } + + const walletTx: WalletTransaction = this.utils.buildMultiSendSmartAccountTx( + this.contractUtils.multiSendContract[this.chainId][version].getContract(), + txs, + nonce + ) + console.log('wallet txn without refund ', walletTx) + + return walletTx + } + + async estimateTransaction(prepareTransactionDto: PrepareRefundTransactionDto): Promise { + const { + transaction, + batchId, + version + } = prepareTransactionDto + // OR just like contractUtils manages context, this class manages state getState(chainId) method + // const state = await this.getSmartAccountState(chainId); + + // try catch + const tx = await this.createTransaction({ version, transaction, batchId, chainId: this.chainId }); + + // try catch + let estimatedGasUsed = await this.estimator.estimateTransaction(prepareTransactionDto, tx, this.smartAccountState); + return estimatedGasUsed; + } + + // Get Fee Options from relayer and make it available for display + // We can also show list of transactions to be processed (decodeContractCall) + /** + * + * @param prepareRefundTransactionDto + */ + async prepareRefundTransaction( + prepareRefundTransactionDto: PrepareRefundTransactionDto + ): Promise { + // TODO + // Review @Talha + const { + transaction, + batchId, + version + } = prepareRefundTransactionDto + + const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(this.chainId) + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response + let feeQuotes: Array = [] + + // 1. If wallet is deployed + // 2. If wallet is not deployed (batch wallet deployment on multisend) + // actual estimation with dummy sig + // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth + const estimatedGasUsed: number = await this.estimateTransaction({ + version, + transaction, + batchId, + chainId: this.chainId + }) + + // also relayer would give feeReceiver that becomes part of feeQuote + + feeOptionsAvailable.forEach((feeOption) => { + const feeTokenTransferGas = feeOption.feeTokenTransferGas + const tokenGasPrice = feeOption.tokenGasPrice || 0 + const offset = feeOption.offset || 1 + let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; + + let feeQuote = { + symbol: feeOption.symbol, + address: feeOption.address, + decimal: feeOption.decimal, + logoUrl: feeOption.logoUrl, + tokenGasPrice: feeOption.tokenGasPrice, + offset: feeOption.offset, + payment: payment, + refundReceiver: feeOption.refundReceiver + } + + feeQuotes.push(feeQuote) + }) + + return feeQuotes + } + + async estimateTransactionBatch(prepareRefundTransactionsDto: PrepareRefundTransactionsDto): Promise { + + const { transactions, batchId, version } = prepareRefundTransactionsDto + const tx = await this.createTransactionBatch({ version, transactions, batchId, chainId: this.chainId }); + // try catch + let estimatedGasUsed = await this.estimator.estimateTransactionBatch(prepareRefundTransactionsDto, tx, this.smartAccountState); + return estimatedGasUsed; + } + + // Get Fee Options from relayer and make it available for display + // We can also show list of transactions to be processed (decodeContractCall) + /** + * + * @param prepareRefundTransactionsDto + */ + // TODO: Rename method to getFeeOptionsForBatch + async prepareRefundTransactionBatch( + prepareRefundTransactionsDto: PrepareRefundTransactionsDto + ): Promise { + const { + transactions, + batchId, + version + } = prepareRefundTransactionsDto + console.log('calling getFeeOptions'); + + const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(this.chainId) + console.log('gasPriceQuotesResponse '); + + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response + let feeQuotes: Array = [] + + // 1. If wallet is deployed + // 2. If wallet is not deployed (batch wallet deployment on multisend) + // actual estimation with dummy sig + // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth + + // this.createTransaction + // pass to estimator method + const estimatedGasUsed: number = await this.estimateTransactionBatch({ + version, + transactions, + batchId, + chainId: this.chainId + }) + + feeOptionsAvailable.forEach((feeOption) => { + const feeTokenTransferGas = feeOption.feeTokenTransferGas + const tokenGasPrice = feeOption.tokenGasPrice || 0 + const offset = feeOption.offset || 1 + let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; + + let feeQuote = { + symbol: feeOption.symbol, + address: feeOption.address, + decimal: feeOption.decimal, + logoUrl: feeOption.logoUrl, + tokenGasPrice: feeOption.tokenGasPrice, + offset: feeOption.offset, + payment: payment, + refundReceiver: feeOption.refundReceiver + } + + feeQuotes.push(feeQuote) + }) + + return feeQuotes + } + + async estimateSmartAccountDeployment(estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto): Promise { + const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); + // Try catch + const estimateWalletDeployment = await this.estimator.estimateSmartAccountDeployment(estimateSmartAccountDeploymentDto); + return estimateWalletDeployment; + } + + + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Rename based on other variations to prepare transaction + * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) + * @param refundTransactionDto + * @returns + */ + async createRefundTransaction( + refundTransactionDto: RefundTransactionDto + ): Promise { + const { transaction, feeQuote, batchId, version } = refundTransactionDto + let walletContract = this.contractUtils.smartWalletContract[this.chainId][version].getContract() + walletContract = walletContract.attach(this.smartAccountState.address) + + let additionalBaseGas = 0 + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + const isDeployed = await this.contractUtils.isDeployed(this.chainId, version, this.smartAccountState.address) + if (isDeployed) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } else { + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId: this.chainId, + version, + owner: this.smartAccountState.owner, + entryPointAddress: this.smartAccountState.entryPointAddress, + fallbackHandlerAddress: this.smartAccountState.fallbackHandlerAddress + }) + // We know it's going to get deployed by Relayer but we handle refund cost here.. + additionalBaseGas += estimateWalletDeployment // wallet deployment gas + } + console.log('nonce: ', nonce) + + // in terms of calculating baseGas we should know if wallet is deployed or not otherwise it needs to consider deployment cost + // (will get batched by relayer) + + const internalTx: MetaTransactionData = { + to: transaction.to, + value: transaction.value || 0, + data: transaction.data || '0x', + operation: OperationType.Call + } + console.log(internalTx) + + let targetTxGas, baseGas, handlePaymentEstimate + const regularOffSet = GAS_USAGE_OFFSET + + if (!isDeployed) { + // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet + // targetTxGas? + // i. use really high value + // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] + + const estimateRequiredTxGas: EstimateRequiredTxGasDto = { + chainId: this.chainId, + walletAddress: this.smartAccountState.address, + transaction: internalTx + } + const response = await this.nodeClient.estimateRequiredTxGasOverride(estimateRequiredTxGas) + // TODO + // Review + const requiredTxGasEstimate = Number(response.data.gas) + 700000 + console.log('required txgas estimate (with override) ', requiredTxGasEstimate) + targetTxGas = requiredTxGasEstimate + + // baseGas? + // Depending on feeToken provide baseGas! We could use constant value provided by the relayer + + const refundDetails: FeeRefundHandlePayment = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { + chainId: this.chainId, + version: version, + walletAddress: this.smartAccountState.address, + feeRefund: refundDetails + } + const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGasOverride( + estimateHandlePaymentGas + ) + handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + + console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate) + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas + } else { + const estimateRequiredTxGas: EstimateRequiredTxGasDto = { + chainId: this.chainId, + walletAddress: this.smartAccountState.address, + transaction: internalTx + } + + const response = await this.nodeClient.estimateRequiredTxGas(estimateRequiredTxGas) + // considerable offset ref gnosis safe service client safeTxGas + // @Talha + // TODO + // handle exception responses and when gas returned is 0 + // We could stop the further flow + const requiredTxGasEstimate = Number(response.data.gas) + 30000 + console.log('required txgas estimate ', requiredTxGasEstimate) + targetTxGas = requiredTxGasEstimate + + const refundDetails: FeeRefundHandlePayment = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + + const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { + chainId: this.chainId, + version: version, + walletAddress: this.smartAccountState.address, + feeRefund: refundDetails + } + const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentGas) + handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + + console.log('handlePaymentEstimate ', handlePaymentEstimate) + + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas // delegate call + event emission + state updates + potential deployment + } + + const walletTx: WalletTransaction = this.utils.buildSmartAccountTransaction({ + to: transaction.to, + value: transaction.value, + data: transaction.data, // for token transfers use encodeTransfer + targetTxGas: targetTxGas, + baseGas, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS, + gasPrice: feeQuote.tokenGasPrice.toString(), //review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + nonce + }) + + return walletTx + } + + /** + * Prepares compatible WalletTransaction object based on Transaction Request + * @todo Rename based on other variations to prepare transaction + * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) + * @param refundTransactionBatchDto + * @returns + */ + async createRefundTransactionBatch( + refundTransactionBatchDto: RefundTransactionBatchDto + ): Promise { + const { + transactions, + feeQuote, + batchId, + version + } = refundTransactionBatchDto + let walletContract = this.contractUtils.smartWalletContract[this.chainId][version].getContract() + const connectedWallet = this.smartAccountState.address + walletContract = walletContract.attach(connectedWallet) + + const isDeployed = await this.contractUtils.isDeployed(this.chainId, version, this.smartAccountState.address); + let additionalBaseGas = 0; + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (isDeployed) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } else { + // TODO : estimation cost can be passed + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId: this.chainId, + version, + owner: this.smartAccountState.owner, + entryPointAddress: this.smartAccountState.entryPointAddress, + fallbackHandlerAddress: this.smartAccountState.fallbackHandlerAddress + }) + // We know it's going to get deployed by Relayer but we handle refund cost here.. + console.log('estimateWalletDeployment ', estimateWalletDeployment) + + // We know it's going to get deployed by Relayer + // but we handle refund cost here.. + additionalBaseGas += estimateWalletDeployment // wallet deployment gas + } + console.log('nonce: ', nonce) + + const txs: MetaTransaction[] = [] + + for (let i = 0; i < transactions.length; i++) { + const innerTx: WalletTransaction = this.utils.buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) + + txs.push(innerTx) + } + + const walletTx: WalletTransaction = this.utils.buildMultiSendSmartAccountTx( + this.contractUtils.multiSendContract[this.chainId][version].getContract(), + txs, + nonce + ); + console.log('wallet txn with refund ', walletTx); + + const internalTx: MetaTransactionData = { + to: walletTx.to, + value: walletTx.value || 0, + data: walletTx.data || '0x', + operation: walletTx.operation + } + console.log(internalTx); + + let targetTxGas, baseGas, handlePaymentEstimate; + const regularOffSet = GAS_USAGE_OFFSET; + + if (!isDeployed) { + // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet + // targetTxGas? + // i. use really high value + // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] + const estimateRequiredTxGas: EstimateRequiredTxGasDto = { + chainId: this.chainId, + walletAddress: this.smartAccountState.address, + transaction: internalTx + } + const response = await this.nodeClient.estimateRequiredTxGasOverride(estimateRequiredTxGas) + + // not getting accurate value for undeployed wallet + // TODO + // Review + const requiredTxGasEstimate = Number(response.data.gas) + 700000 + console.log('required txgas estimate (with override) ', requiredTxGasEstimate); + targetTxGas = requiredTxGasEstimate; + + // baseGas? + // Depending on feeToken provide baseGas! We could use constant value provided by the relayer + + const refundDetails: FeeRefundHandlePayment = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + + const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { + chainId: this.chainId, + version: version, + walletAddress: this.smartAccountState.address, + feeRefund: refundDetails + } + + const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGasOverride( + estimateHandlePaymentGas + ) + let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate); + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; + } else { + + const estimateRequiredTxGas: EstimateRequiredTxGasDto = { + chainId: this.chainId, + walletAddress: this.smartAccountState.address, + transaction: internalTx + } + + const response = await this.nodeClient.estimateRequiredTxGas(estimateRequiredTxGas) + // considerable offset ref gnosis safe service client safeTxGas + // @Talha + // TODO + // handle exception responses and when gas returned is 0 + // We could stop the further flow + const requiredTxGasEstimate = Number(response.data.gas) + 30000 + console.log('required txgas estimate ', requiredTxGasEstimate); + targetTxGas = requiredTxGasEstimate; + + const refundDetails: FeeRefundHandlePayment = { + gasUsed: requiredTxGasEstimate, + baseGas: requiredTxGasEstimate, + gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS + } + + const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { + chainId: this.chainId, + version: version, + walletAddress: this.smartAccountState.address, + feeRefund: refundDetails + } + const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentGas) + let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + console.log('handlePaymentEstimate ', handlePaymentEstimate); + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment + } + + const finalWalletTx: WalletTransaction = this.utils.buildSmartAccountTransaction({ + to: walletTx.to, + value: walletTx.value, + data: walletTx.data, // for token transfers use encodeTransfer + operation: walletTx.operation, + targetTxGas: targetTxGas, + baseGas: baseGas, + refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS, + gasPrice: feeQuote.tokenGasPrice.toString(), //review + tokenGasPriceFactor: feeQuote.offset || 1, + gasToken: feeQuote.address, + nonce + }) + + return finalWalletTx + } + + /** + * @param address Owner aka {EOA} address + * @param index number of smart account deploy i.e {0, 1 ,2 ...} + * @description return address for Smart account + * @returns + */ + ethersAdapter(): EthersAdapter { + return this.contractUtils.ethAdapter[this.chainId] + } +} + +// Review +// export default TransactionManager \ No newline at end of file diff --git a/packages/transactions/src/transaction.ts b/packages/transactions/src/transaction.ts deleted file mode 100644 index 3f0b9af4b..000000000 --- a/packages/transactions/src/transaction.ts +++ /dev/null @@ -1,921 +0,0 @@ -import { smartAccountSignMessage } from './execution' -import { encodeTransfer } from './utils' -import { - SendTransactionDto, - DEFAULT_FEE_RECEIVER, - SignTransactionDto, - PrepareRefundTransactionsDto, - PrepareRefundTransactionDto, - TransactionDto, - TransactionBatchDto, - RefundTransactionBatchDto, - ExecTransaction, - MetaTransaction, - MetaTransactionData, - RefundTransactionDto, - WalletTransaction, - Config, - RawTransactionType, - OperationType, - ZERO_ADDRESS, - FeeRefundV1_0_1, - FeeRefundV1_0_0, - ChainId, - FeeQuote, - FeeOptionsResponse, - FAKE_SIGNATURE, - TokenData, - GAS_USAGE_OFFSET, - FeeRefundHandlePayment, - AddressForCounterFactualWalletDto, - EstimateSmartAccountDeploymentDto -} from '@biconomy-sdk/core-types' -import { ethers, version } from 'ethers' -import EthersAdapter from '@biconomy-sdk/ethers-lib' -import { GasEstimator } from './assets' - -import NodeClient, { - ChainConfig, - SupportedChainsResponse, - SmartAccountsResponse, - SmartAccountByOwnerDto, - EstimateExternalGasDto, - EstimateRequiredTxGasDto, - EstimateHandlePaymentTxGasDto, - EstimateUndeployedContractGasDto -} from '@biconomy-sdk/node-client' - -import { JsonRpcSigner, TransactionResponse } from '@ethersproject/providers' -import { Relayer } from '@biconomy-sdk/relayer' -import { - getSmartWalletFactoryContract, - getMultiSendContract, - getMultiSendCallOnlyContract, - getSmartWalletContract, - findChainById, - findContractAddressesByVersion -} from './utils/FetchContractsInfo' -import { Web3Provider } from '@ethersproject/providers' -import ContractUtils from './contract-utils' -import { buildSmartAccountTransaction } from './execution' -import { buildMultiSendSmartAccountTx } from './multisend' - -class Transaction { - - entryPointAddress = '0xF05217199F1C25604c67993F11a81461Bc97F3Ab' - fallBackHandlerAddress = '0xf05217199f1c25604c67993f11a81461bc97f3ab' - nodeClient!: NodeClient - relayer!: Relayer - - // Owner of the Smart Account common between all chains - // Could be part of Smart Account state / config - // @review with Sachin - owner!: string - - // Address of the smart contract wallet common between all chains - // @review - address!: string - - localConfig!: Config - - contractUtils!: ContractUtils - - // constructor(walletProvider: Web3Provider, config: Config) { - // this.localConfig = { ...DefaultConfig } - - // if (config) { - // this.localConfig = { ...this.localConfig, ...config } - // } - // this.provider = walletProvider - // this.signer = walletProvider.getSigner() - // this.owner = this.localConfig.owner - // this.contractUtils = new ContractUtils() - // this.nodeClient = new NodeClient({ txServiceUrl: config.backend_url }) - // } - - constructor(){} - async initialize(walletProvider: Web3Provider, config: Config){ - this.localConfig = { ...DefaultConfig } - - if (config) { - this.localConfig = { ...this.localConfig, ...config } - } - const signer = walletProvider.getSigner() - this.owner = await signer.getAddress() - this.contractUtils = new ContractUtils() - this.nodeClient = new NodeClient({ txServiceUrl: config.backend_url }) - await this.contractUtils.initialize(await this.nodeClient.getAllSupportedChains(), signer) - } - - setRelayer(relayer: Relayer) { - console.log('setting relayer'); - - this.relayer = relayer - console.log('relayer ', this.relayer); - - } - - async getContractUtilInstance(): Promise{ - return this.contractUtils - } - - async getNodeClient(): Promise{ - return this.nodeClient - } - - /** - * - * @notice personal sign is used currently (// @todo Signer should be able to use _typedSignData) - * @param tx WalletTransaction Smart Account Transaction object prepared - * @param chainId optional chainId - * @returns:string Signature - */ - async signTransaction(signTransactionDto: SignTransactionDto): Promise { - const { chainId, tx, version, signer } = signTransactionDto - let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() - walletContract = walletContract.attach(this.address) - - // TODO - rename and organize utils - const { data } = await smartAccountSignMessage(signer, walletContract, tx, chainId) - - let signature = '0x' - signature += data.slice(2) - return signature - } - - - - async prepareDeployAndPayFees(chainId: ChainId, version: string) { - console.log('getFeeOptions ', this.relayer) - const gasPriceQuotesResponse:FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) - const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; - let feeQuotes: Array = []; - - const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId, - version, - owner: this.owner, - entryPointAddress: this.entryPointAddress, - fallbackHandlerAddress: this.fallBackHandlerAddress - }) - - feeOptionsAvailable.forEach((feeOption) => { - // TODO - // Make it a constant - const estimatedGasUsed: number = (estimateWalletDeployment + 77369); - - // const feeTokenTransferGas = feeOption.feeTokenTransferGas - const tokenGasPrice = feeOption.tokenGasPrice || 0; - const offset = feeOption.offset || 1; - let payment = tokenGasPrice * (estimatedGasUsed) / offset; - - let feeQuote = { - symbol: feeOption.symbol, - address: feeOption.address, - decimal: feeOption.decimal, - logoUrl: feeOption.logoUrl, - tokenGasPrice: feeOption.tokenGasPrice, - offset: feeOption.offset, - payment: payment, - refundReceiver: feeOption.refundReceiver - } - - feeQuotes.push(feeQuote); - }); - - return feeQuotes; - } - - // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment - async deployAndPayFees(chainId: ChainId, version: string, feeQuote: FeeQuote): Promise { - // Not checking again if the wallet is actually deployed - // const isDeployed = await this.isDeployed(chainId); - const token = feeQuote.address; - const offset = feeQuote.offset || 1; - const feeReceiver = feeQuote.refundReceiver || DEFAULT_FEE_RECEIVER; - - const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId, - version, - owner: this.owner, - entryPointAddress: this.entryPointAddress, - fallbackHandlerAddress: this.fallBackHandlerAddress - }) - // do estimations here or pass on payment and use feeQuote fully! - let feesToPay = feeQuote.tokenGasPrice * (estimateWalletDeployment + 77369) / offset; - feesToPay = parseInt(feesToPay.toString()); - - const tx = { - to: token, - data: encodeTransfer(feeReceiver, Number(feesToPay)) - }; - - const transaction = await this.createTransaction({version, transaction: tx, batchId: 0, chainId}); - return transaction - } - - /** - * Prepares compatible WalletTransaction object based on Transaction Request - * @todo Rename based on other variations to prepare transaction - * @notice This transaction is without fee refund (gasless) - * @param transactionDto - * @returns - */ - async createTransaction(transactionDto: TransactionDto): Promise { - const { transaction, batchId = 0, chainId, version } = transactionDto - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() - walletContract = walletContract.attach(this.address) - - let nonce = 0 - if (await this.contractUtils.isDeployed(chainId, version, this.address)) { - nonce = (await walletContract.getNonce(batchId)).toNumber() - } - console.log('nonce: ', nonce) - - const walletTx: WalletTransaction = buildSmartAccountTransaction({ - to: transaction.to, - value: transaction.value, - data: transaction.data, // for token transfers use encodeTransfer - nonce - }) - - return walletTx - } - - /** - * Prepares compatible WalletTransaction object based on Transaction Request - * @todo Write test case and limit batch size based on test results in scw-contracts - * @notice This transaction is without fee refund (gasless) - * @param transaction - * @param batchId - * @param chainId - * @returns - */ - // TODO: Merge this method with createTransaction, both batch and single transactions can be batched in same transactions - async createTransactionBatch( - transactionBatchDto: TransactionBatchDto - ): Promise { - const { transactions, chainId, batchId, version } = transactionBatchDto - // NOTE : If the wallet is not deployed yet then nonce would be zero - let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() - walletContract = walletContract.attach(this.address) - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0 - if (await this.contractUtils.isDeployed(chainId, version, this.address)) { - nonce = (await walletContract.getNonce(batchId)).toNumber() - } - console.log('nonce: ', nonce) - - const txs: MetaTransaction[] = [] - - for (let i = 0; i < transactions.length; i++) { - const innerTx: WalletTransaction = buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) - - txs.push(innerTx) - } - - const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( - this.contractUtils.multiSendContract[chainId][version].getContract(), - txs, - nonce - ) - console.log('wallet txn without refund ', walletTx) - - return walletTx - } - - async estimateTransaction(prepareTransactionDto: PrepareRefundTransactionDto): Promise { - const { - transaction, - batchId, - chainId, - version - } = prepareTransactionDto - - let estimatedGasUsed = 0; - // Check if available from current state - const isDeployed = await this.contractUtils.isDeployed( - chainId, - version, - this.address - ); - if (!isDeployed) { - const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId, - version, - owner: this.owner, - entryPointAddress: this.entryPointAddress, - fallbackHandlerAddress: this.fallBackHandlerAddress - }) - console.log('estimateWalletDeployment ', estimateWalletDeployment); - - estimatedGasUsed += estimateWalletDeployment; - } - - const tx = await this.createTransaction({ version, transaction, batchId, chainId }); - - const txn: ExecTransaction = { - to: tx.to, - value: tx.value, - data: tx.data, - operation: tx.operation, - targetTxGas: tx.targetTxGas - } - - // to avoid failing eth_call override with undeployed wallet - txn.targetTxGas = 500000; - - const refundInfo: FeeRefundV1_0_1 = { - baseGas: tx.baseGas, - gasPrice: tx.gasPrice, - tokenGasPriceFactor: tx.tokenGasPriceFactor, - gasToken: tx.gasToken, - refundReceiver: tx.refundReceiver - } - - const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { - chainId, - version, - transaction: txn, - walletAddress: this.address, - feeRefund: refundInfo, - signature: FAKE_SIGNATURE - } - - const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas(estimateUndeployedContractGasDto); - let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); - console.log('no auth no refund estimate', noAuthEstimate); - - estimatedGasUsed += noAuthEstimate; - - return estimatedGasUsed; - } - - // Get Fee Options from relayer and make it available for display - // We can also show list of transactions to be processed (decodeContractCall) - /** - * - * @param prepareRefundTransactionDto - */ - async prepareRefundTransaction( - prepareRefundTransactionDto: PrepareRefundTransactionDto - ): Promise { - // TODO - // Review @Talha - const { - transaction, - batchId, - chainId, - version - } = prepareRefundTransactionDto - - const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) - const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response - let feeQuotes: Array = [] - - // 1. If wallet is deployed - // 2. If wallet is not deployed (batch wallet deployment on multisend) - // actual estimation with dummy sig - // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth - const estimatedGasUsed: number = await this.estimateTransaction({ - version, - transaction, - batchId, - chainId - }) - - // also relayer would give feeReceiver that becomes part of feeQuote - - feeOptionsAvailable.forEach((feeOption) => { - const feeTokenTransferGas = feeOption.feeTokenTransferGas - const tokenGasPrice = feeOption.tokenGasPrice || 0 - const offset = feeOption.offset || 1 - let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; - - let feeQuote = { - symbol: feeOption.symbol, - address: feeOption.address, - decimal: feeOption.decimal, - logoUrl: feeOption.logoUrl, - tokenGasPrice: feeOption.tokenGasPrice, - offset: feeOption.offset, - payment: payment, - refundReceiver: feeOption.refundReceiver - } - - feeQuotes.push(feeQuote) - }) - - return feeQuotes - } - - async estimateTransactionBatch( prepareRefundTransactionsDto: PrepareRefundTransactionsDto): Promise { - - const { transactions, batchId, chainId, version } = prepareRefundTransactionsDto - let estimatedGasUsed = 0; - // Check if available from current state - const isDeployed = await this.contractUtils.isDeployed(chainId, version, this.address); - if (!isDeployed) { - const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId, - version, - owner: this.owner, - entryPointAddress: this.entryPointAddress, - fallbackHandlerAddress: this.fallBackHandlerAddress - }); - console.log('estimateWalletDeployment ', estimateWalletDeployment); - estimatedGasUsed += estimateWalletDeployment; - } - - const tx = await this.createTransactionBatch({ version, transactions, batchId, chainId}); - - const txn: ExecTransaction = { - to: tx.to, - value: tx.value, - data: tx.data, - operation: tx.operation, - targetTxGas: tx.targetTxGas - } - - // to avoid failing eth_call override with undeployed wallet - txn.targetTxGas = 500000; - - const refundInfo: FeeRefundV1_0_1 = { - baseGas: tx.baseGas, - gasPrice: tx.gasPrice, - tokenGasPriceFactor: tx.tokenGasPriceFactor, - gasToken: tx.gasToken, - refundReceiver: tx.refundReceiver - } - - const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { - chainId, - version, - transaction: txn, - walletAddress: this.address, - feeRefund: refundInfo, - signature: FAKE_SIGNATURE - } - - const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas(estimateUndeployedContractGasDto); - let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); - console.log('no auth no refund estimate', noAuthEstimate); - - estimatedGasUsed += noAuthEstimate; - - return estimatedGasUsed; - } - - // Get Fee Options from relayer and make it available for display - // We can also show list of transactions to be processed (decodeContractCall) - /** - * - * @param prepareRefundTransactionsDto - */ - // TODO: Rename method to getFeeOptionsForBatch - async prepareRefundTransactionBatch( - prepareRefundTransactionsDto: PrepareRefundTransactionsDto - ): Promise { - const { - transactions, - batchId, - chainId, - version - } = prepareRefundTransactionsDto - console.log('calling getFeeOptions'); - - const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) - console.log('gasPriceQuotesResponse '); - - const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response - let feeQuotes: Array = [] - - // 1. If wallet is deployed - // 2. If wallet is not deployed (batch wallet deployment on multisend) - // actual estimation with dummy sig - // eth_call to rescue : undeployed /deployed wallet with override bytecode SmartWalletNoAuth - const estimatedGasUsed: number = await this.estimateTransactionBatch({ - version, - transactions, - batchId, - chainId - }) - - feeOptionsAvailable.forEach((feeOption) => { - const feeTokenTransferGas = feeOption.feeTokenTransferGas - const tokenGasPrice = feeOption.tokenGasPrice || 0 - const offset = feeOption.offset || 1 - let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; - - let feeQuote = { - symbol: feeOption.symbol, - address: feeOption.address, - decimal: feeOption.decimal, - logoUrl: feeOption.logoUrl, - tokenGasPrice: feeOption.tokenGasPrice, - offset: feeOption.offset, - payment: payment, - refundReceiver: feeOption.refundReceiver - } - - feeQuotes.push(feeQuote) - }) - - return feeQuotes - } - - async estimateSmartAccountDeployment(estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto): Promise { - const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); - const { chainId, version, owner, entryPointAddress, fallbackHandlerAddress } = estimateSmartAccountDeploymentDto - const walletFactoryInterface = this.contractUtils.smartWalletFactoryContract[chainId][version].getInterface(); - const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ - this.contractUtils.smartWalletFactoryContract[chainId][version].getAddress(), - walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ - owner, - entryPointAddress, - fallbackHandlerAddress, - 0 - ]) - ]) - console.log('encodedEstimate ', encodedEstimateData) - const deployCostresponse = await this.nodeClient.estimateExternalGas({chainId, encodedData:encodedEstimateData}); - const estimateWalletDeployment = Number(deployCostresponse.data.gas); - console.log('estimateWalletDeployment ', estimateWalletDeployment); - return estimateWalletDeployment; - } - - - /** - * Prepares compatible WalletTransaction object based on Transaction Request - * @todo Rename based on other variations to prepare transaction - * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) - * @param refundTransactionDto - * @returns - */ - async createRefundTransaction( - refundTransactionDto: RefundTransactionDto - ): Promise { - const { transaction, feeQuote, batchId, chainId, version } = refundTransactionDto - let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() - walletContract = walletContract.attach(this.address) - - let additionalBaseGas = 0 - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0 - const isDeployed = await this.contractUtils.isDeployed(chainId, version, this.address) - if (isDeployed) { - nonce = (await walletContract.getNonce(batchId)).toNumber() - } else { - const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId, - version, - owner: this.owner, - entryPointAddress: this.entryPointAddress, - fallbackHandlerAddress: this.fallBackHandlerAddress - }) - // We know it's going to get deployed by Relayer but we handle refund cost here.. - additionalBaseGas += estimateWalletDeployment // wallet deployment gas - } - console.log('nonce: ', nonce) - - // in terms of calculating baseGas we should know if wallet is deployed or not otherwise it needs to consider deployment cost - // (will get batched by relayer) - - const internalTx: MetaTransactionData = { - to: transaction.to, - value: transaction.value || 0, - data: transaction.data || '0x', - operation: OperationType.Call - } - console.log(internalTx) - - let targetTxGas, baseGas, handlePaymentEstimate - const regularOffSet = GAS_USAGE_OFFSET - - if (!isDeployed) { - // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet - // targetTxGas? - // i. use really high value - // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] - - const estimateRequiredTxGas: EstimateRequiredTxGasDto = { - chainId, - walletAddress: this.address, - transaction: internalTx - } - const response = await this.nodeClient.estimateRequiredTxGasOverride(estimateRequiredTxGas) - // TODO - // Review - const requiredTxGasEstimate = Number(response.data.gas) + 700000 - console.log('required txgas estimate (with override) ', requiredTxGasEstimate) - targetTxGas = requiredTxGasEstimate - - // baseGas? - // Depending on feeToken provide baseGas! We could use constant value provided by the relayer - - const refundDetails: FeeRefundHandlePayment = { - gasUsed: requiredTxGasEstimate, - baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS - } - const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId, - version: version, - walletAddress: this.address, - feeRefund: refundDetails - } - const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGasOverride( - estimateHandlePaymentGas - ) - handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - - console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate) - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas - } else { - const estimateRequiredTxGas: EstimateRequiredTxGasDto = { - chainId, - walletAddress: this.address, - transaction: internalTx - } - - const response = await this.nodeClient.estimateRequiredTxGas(estimateRequiredTxGas) - // considerable offset ref gnosis safe service client safeTxGas - // @Talha - // TODO - // handle exception responses and when gas returned is 0 - // We could stop the further flow - const requiredTxGasEstimate = Number(response.data.gas) + 30000 - console.log('required txgas estimate ', requiredTxGasEstimate) - targetTxGas = requiredTxGasEstimate - - const refundDetails: FeeRefundHandlePayment = { - gasUsed: requiredTxGasEstimate, - baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS - } - - const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId, - version: version, - walletAddress: this.address, - feeRefund: refundDetails - } - const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentGas) - handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - - console.log('handlePaymentEstimate ', handlePaymentEstimate) - - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas // delegate call + event emission + state updates + potential deployment - } - - const walletTx: WalletTransaction = buildSmartAccountTransaction({ - to: transaction.to, - value: transaction.value, - data: transaction.data, // for token transfers use encodeTransfer - targetTxGas: targetTxGas, - baseGas, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS, - gasPrice: feeQuote.tokenGasPrice.toString(), //review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - nonce - }) - - return walletTx - } - - /** - * Prepares compatible WalletTransaction object based on Transaction Request - * @todo Rename based on other variations to prepare transaction - * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) - * @param refundTransactionBatchDto - * @returns - */ - async createRefundTransactionBatch( - refundTransactionBatchDto: RefundTransactionBatchDto - ): Promise { - const { - transactions, - feeQuote, - batchId, - chainId, - version - } = refundTransactionBatchDto - let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() - const connectedWallet = this.address - walletContract = walletContract.attach(connectedWallet) - - const isDeployed = await this.contractUtils.isDeployed(chainId, version, this.address); - let additionalBaseGas = 0; - - // NOTE : If the wallet is not deployed yet then nonce would be zero - let nonce = 0 - if (isDeployed) { - nonce = (await walletContract.getNonce(batchId)).toNumber() - } else { - // TODO : estimation cost can be passed - const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId, - version, - owner: this.owner, - entryPointAddress: this.entryPointAddress, - fallbackHandlerAddress: this.fallBackHandlerAddress - }) - // We know it's going to get deployed by Relayer but we handle refund cost here.. - console.log('estimateWalletDeployment ', estimateWalletDeployment) - - // We know it's going to get deployed by Relayer - // but we handle refund cost here.. - additionalBaseGas += estimateWalletDeployment // wallet deployment gas - } - console.log('nonce: ', nonce) - - const txs: MetaTransaction[] = [] - - for (let i = 0; i < transactions.length; i++) { - const innerTx: WalletTransaction = buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) - - txs.push(innerTx) - } - - const walletTx: WalletTransaction = buildMultiSendSmartAccountTx( - this.contractUtils.multiSendContract[chainId][version].getContract(), - txs, - nonce - ); - console.log('wallet txn with refund ', walletTx); - - const internalTx: MetaTransactionData = { - to: walletTx.to, - value: walletTx.value || 0, - data: walletTx.data || '0x', - operation: walletTx.operation - } - console.log(internalTx); - - let targetTxGas, baseGas, handlePaymentEstimate; - const regularOffSet = GAS_USAGE_OFFSET; - - if(!isDeployed){ - // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet - // targetTxGas? - // i. use really high value - // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] - const estimateRequiredTxGas: EstimateRequiredTxGasDto = { - chainId, - walletAddress: this.address, - transaction: internalTx - } - const response = await this.nodeClient.estimateRequiredTxGasOverride(estimateRequiredTxGas) - - // not getting accurate value for undeployed wallet - // TODO - // Review - const requiredTxGasEstimate = Number(response.data.gas) + 700000 - console.log('required txgas estimate (with override) ', requiredTxGasEstimate); - targetTxGas = requiredTxGasEstimate; - - // baseGas? - // Depending on feeToken provide baseGas! We could use constant value provided by the relayer - - const refundDetails: FeeRefundHandlePayment = { - gasUsed: requiredTxGasEstimate, - baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS - } - - const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId, - version: version, - walletAddress: this.address, - feeRefund: refundDetails - } - - const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGasOverride( - estimateHandlePaymentGas - ) - let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate); - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; - } else { - - const estimateRequiredTxGas: EstimateRequiredTxGasDto = { - chainId, - walletAddress: this.address, - transaction: internalTx - } - - const response = await this.nodeClient.estimateRequiredTxGas(estimateRequiredTxGas) - // considerable offset ref gnosis safe service client safeTxGas - // @Talha - // TODO - // handle exception responses and when gas returned is 0 - // We could stop the further flow - const requiredTxGasEstimate = Number(response.data.gas) + 30000 - console.log('required txgas estimate ', requiredTxGasEstimate); - targetTxGas = requiredTxGasEstimate; - - const refundDetails: FeeRefundHandlePayment = { - gasUsed: requiredTxGasEstimate, - baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS - } - - const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId, - version: version, - walletAddress: this.address, - feeRefund: refundDetails - } - const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentGas) - let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - console.log('handlePaymentEstimate ', handlePaymentEstimate); - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment - } - - const finalWalletTx: WalletTransaction = buildSmartAccountTransaction({ - to: walletTx.to, - value: walletTx.value, - data: walletTx.data, // for token transfers use encodeTransfer - operation: walletTx.operation, - targetTxGas: targetTxGas, - baseGas: baseGas, - refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS, - gasPrice: feeQuote.tokenGasPrice.toString(), //review - tokenGasPriceFactor: feeQuote.offset || 1, - gasToken: feeQuote.address, - nonce - }) - - return finalWalletTx - } - - async getAddress( - addressForCounterFactualWalletDto: AddressForCounterFactualWalletDto - ): Promise { - // TODO: Get from node client first from cache, if not found then query smart contract - // we will hit smart account endpoint to fetch deployed smart account info - const address = await this.getAddressForCounterfactualWallet(addressForCounterFactualWalletDto) - console.log('address is ', address); - - this.address = address - return address - } - - /** - * @param address Owner aka {EOA} address - * @param index number of smart account deploy i.e {0, 1 ,2 ...} - * @description return address for Smart account - * @returns - - */ - // TODO: hit the api before getting data from smart contract - async getAddressForCounterfactualWallet( - addressForCounterFactualWalletDto: AddressForCounterFactualWalletDto - ): Promise { - const { index, chainId, version } = addressForCounterFactualWalletDto - console.log('index and ChainId ', index, chainId, version) - return this.contractUtils.smartWalletFactoryContract[chainId][ - version - ].getAddressForCounterfactualWallet(this.owner, index) - } - - ethersAdapter(chainId: ChainId): EthersAdapter { - return this.contractUtils.ethAdapter[chainId] - } -} -const DefaultConfig: Config = { - owner: '', - version: '1.0.1', - activeNetworkId: ChainId.GOERLI, //Update later - supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], - backend_url: 'https://sdk-backend.staging.biconomy.io/v1' -} - -export default Transaction \ No newline at end of file diff --git a/packages/transactions/src/types.ts b/packages/transactions/src/types.ts index b9c2cb770..aae8fbf17 100644 --- a/packages/transactions/src/types.ts +++ b/packages/transactions/src/types.ts @@ -8,6 +8,9 @@ import { PopulatedTransaction, BytesLike } from 'ethers' +import { + EstimateSmartAccountDeploymentDto +} from '@biconomy-sdk/core-types' import { TypedDataSigner } from '@ethersproject/abstract-signer' import { AddressZero } from '@ethersproject/constants' diff --git a/packages/transactions/src/utils.ts b/packages/transactions/src/utils.ts index 55396fc4b..b50c74968 100644 --- a/packages/transactions/src/utils.ts +++ b/packages/transactions/src/utils.ts @@ -1,84 +1,91 @@ import { - arrayify, - // defaultAbiCoder, - // hexConcat, - parseEther - // solidityKeccak256, -} from 'ethers/lib/utils' -import { - ethers, - BigNumber, - // BigNumberish, - // Contract, - // ContractReceipt, - Wallet + BigNumber, + BigNumberish, + Contract, + utils } from 'ethers' -/* import { - IERC20, - EntryPoint, - EntryPoint__factory, - SimpleWallet__factory, -} from "../typechain"; */ -// import { BytesLike } from "@ethersproject/bytes"; -// import { expect } from "chai"; -// import { debugTransaction } from "./debugTx"; -import { keccak256 } from 'ethereumjs-util' -export const AddressZero = ethers.constants.AddressZero -export const HashZero = ethers.constants.HashZero -export const ONE_ETH = parseEther('1') -export const TWO_ETH = parseEther('2') -export const FIVE_ETH = parseEther('5') +import { MetaTransaction, WalletTransaction } from '@biconomy-sdk/core-types' + +import { AddressZero } from '@ethersproject/constants' + +export class Utils { + + constructor() { -export const tostr = (x: any) => (x != null ? x.toString() : 'null') + } -let counter = 0 -// create non-random account, so gas calculations are deterministic -export function createWalletOwner(): Wallet { - const privateKey = keccak256(Buffer.from(arrayify(BigNumber.from(++counter)))) - return new ethers.Wallet(privateKey, ethers.providers.getDefaultProvider()) - // return new ethers.Wallet('0x'.padEnd(66, privkeyBase), ethers.provider); -} + buildSmartAccountTransaction = (template: { + to: string + value?: BigNumberish + data?: string + operation?: number + targetTxGas?: number | string + baseGas?: number | string + gasPrice?: number | string + tokenGasPriceFactor?: number | string + gasToken?: string + refundReceiver?: string + nonce: number + }): WalletTransaction => { + return { + to: template.to, + value: template.value || 0, + data: template.data || '0x', + operation: template.operation || 0, + targetTxGas: template.targetTxGas || 0, + baseGas: template.baseGas || 0, + gasPrice: template.gasPrice || 0, + tokenGasPriceFactor: template.tokenGasPriceFactor || 1, + gasToken: template.gasToken || AddressZero, + refundReceiver: template.refundReceiver || AddressZero, + nonce: template.nonce + } + } -export async function getBalance(address: string): Promise { - const balance = await ethers.providers.getDefaultProvider().getBalance(address) - return parseInt(balance.toString()) -} + buildMultiSendSmartAccountTx = ( + multiSend: Contract, + txs: MetaTransaction[], + nonce: number, + overrides?: Partial + ): WalletTransaction => { + return this.buildContractCall(multiSend, 'multiSend', [this.encodeMultiSend(txs)], nonce, true, overrides) + } -export function getSignatureParameters(signature: string) { - if (!ethers.utils.isHexString(signature)) { - throw new Error('Given value "'.concat(signature, '" is not a valid hex string.')) - } - var r = signature.slice(0, 66) - var s = '0x'.concat(signature.slice(66, 130)) - var v = ethers.BigNumber.from('0x'.concat(signature.slice(130, 132))).toNumber() - if (![27, 28].includes(v)) v += 27 - return { - r: r, - s: s, - v: v - } -} + encodeMultiSend = (txs: MetaTransaction[]): string => { + return '0x' + txs.map((tx) => this.encodeMetaTransaction(tx)).join('') + } -export const Erc20 = [ - 'function transfer(address _receiver, uint256 _value) public returns (bool success)', - 'function transferFrom(address, address, uint) public returns (bool)', - 'function approve(address _spender, uint256 _value) public returns (bool success)', - 'function allowance(address _owner, address _spender) public view returns (uint256 remaining)', - 'function balanceOf(address _owner) public view returns (uint256 balance)', - 'event Approval(address indexed _owner, address indexed _spender, uint256 _value)' -] + encodeMetaTransaction = (tx: MetaTransaction): string => { + const data = utils.arrayify(tx.data) + const encoded = utils.solidityPack( + ['uint8', 'address', 'uint256', 'uint256', 'bytes'], + [tx.operation, tx.to, tx.value, data.length, data] + ) + return encoded.slice(2) + } -export const Erc20Interface = new ethers.utils.Interface(Erc20) + buildContractCall = ( + contract: Contract, + method: string, + params: any[], + nonce: number, + delegateCall?: boolean, + overrides?: Partial + ): WalletTransaction => { + const data = contract.interface.encodeFunctionData(method, params) + return this.buildSmartAccountTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }, + overrides + ) + ) + } -export const encodeTransfer = (target: string, amount: string | number): string => { - return Erc20Interface.encodeFunctionData('transfer', [target, amount]) -} -export const encodeTransferFrom = ( - from: string, - target: string, - amount: string | number -): string => { - return Erc20Interface.encodeFunctionData('transferFrom', [from, target, amount]) -} +} \ No newline at end of file diff --git a/packages/transactions/src/utils/FetchContractsInfo.ts b/packages/transactions/src/utils/FetchContractsInfo.ts index ecf69335a..f7e741ce6 100644 --- a/packages/transactions/src/utils/FetchContractsInfo.ts +++ b/packages/transactions/src/utils/FetchContractsInfo.ts @@ -7,7 +7,6 @@ import { MultiSendCallOnlyContract, SmartAccountVersion } from '@biconomy-sdk/core-types' -import { WalletFactory, SmartWallet, MultiSend, MultiSendCallOnly } from '../assets/index' import EthersAdapter from '@biconomy-sdk/ethers-lib' @@ -55,23 +54,23 @@ export function findContractAddressesByVersion( ) { const chainInfo: ChainConfig = findChainById(chainId, chainConfig) - const entryPointAddress = chainInfo.entryPoint.find((element) => { + const entryPointAddress = chainInfo.entryPoint.find((element: any) => { return element.version === smartAccountVersion })?.address - const walletFactoryAddress = chainInfo.walletFactory.find((element) => { + const walletFactoryAddress = chainInfo.walletFactory.find((element: any) => { return element.version === smartAccountVersion })?.address - const walletAddress = chainInfo.wallet.find((element) => { + const walletAddress = chainInfo.wallet.find((element: any) => { return element.version === smartAccountVersion })?.address - const multiSendAddress = chainInfo.multiSend.find((element) => { + const multiSendAddress = chainInfo.multiSend.find((element: any) => { return element.version === smartAccountVersion })?.address - const multiSendCallAddress = chainInfo.multiSendCall.find((element) => { + const multiSendCallAddress = chainInfo.multiSendCall.find((element: any) => { return element.version === smartAccountVersion })?.address - const fallBackHandlerAddress = chainInfo.fallBackHandler.find((element) => { + const fallBackHandlerAddress = chainInfo.fallBackHandler.find((element: any) => { return element.version === smartAccountVersion })?.address From cd7f02d06fd965af2f999e402f3294856aafd9e6 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 30 Sep 2022 23:30:25 +0400 Subject: [PATCH 0156/1247] refactor minor --- packages/transactions/src/TransactionAPI.ts | 6 ++++-- .../transactions/src/transaction-manager.ts | 20 ++++++------------- packages/transactions/src/utils.ts | 17 +++++++++++++++- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/packages/transactions/src/TransactionAPI.ts b/packages/transactions/src/TransactionAPI.ts index 921623295..d0411f848 100644 --- a/packages/transactions/src/TransactionAPI.ts +++ b/packages/transactions/src/TransactionAPI.ts @@ -7,10 +7,12 @@ MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' import { Signer } from '@ethersproject/abstract-signer' import { Provider } from '@ethersproject/providers' -export class TransactionAPI { +class TransactionAPI { constructor() { } -} \ No newline at end of file +} + +export default TransactionAPI \ No newline at end of file diff --git a/packages/transactions/src/transaction-manager.ts b/packages/transactions/src/transaction-manager.ts index 769467dba..f89f51fed 100644 --- a/packages/transactions/src/transaction-manager.ts +++ b/packages/transactions/src/transaction-manager.ts @@ -557,7 +557,10 @@ export class TransactionManager { const connectedWallet = this.smartAccountState.address walletContract = walletContract.attach(connectedWallet) - const isDeployed = await this.contractUtils.isDeployed(this.chainId, version, this.smartAccountState.address); + // TODO + // Review + const isDeployed = this.smartAccountState.isDeployed + // await this.contractUtils.isDeployed(this.chainId, version, this.smartAccountState.address); let additionalBaseGas = 0; // NOTE : If the wallet is not deployed yet then nonce would be zero @@ -582,18 +585,7 @@ export class TransactionManager { } console.log('nonce: ', nonce) - const txs: MetaTransaction[] = [] - - for (let i = 0; i < transactions.length; i++) { - const innerTx: WalletTransaction = this.utils.buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) - - txs.push(innerTx) - } + const txs: MetaTransaction[] = this.utils.buildSmartAccountTransactions(transactions) const walletTx: WalletTransaction = this.utils.buildMultiSendSmartAccountTx( this.contractUtils.multiSendContract[this.chainId][version].getContract(), @@ -610,7 +602,7 @@ export class TransactionManager { } console.log(internalTx); - let targetTxGas, baseGas, handlePaymentEstimate; + let targetTxGas, baseGas; const regularOffSet = GAS_USAGE_OFFSET; if (!isDeployed) { diff --git a/packages/transactions/src/utils.ts b/packages/transactions/src/utils.ts index b50c74968..5766127a7 100644 --- a/packages/transactions/src/utils.ts +++ b/packages/transactions/src/utils.ts @@ -5,7 +5,7 @@ import { utils } from 'ethers' -import { MetaTransaction, WalletTransaction } from '@biconomy-sdk/core-types' +import { MetaTransaction, WalletTransaction, Transaction } from '@biconomy-sdk/core-types' import { AddressZero } from '@ethersproject/constants' @@ -43,6 +43,21 @@ export class Utils { } } + buildSmartAccountTransactions = (transactions: Transaction[]):MetaTransaction[] => { + const txs: MetaTransaction[] = [] + for (let i = 0; i < transactions.length; i++) { + const innerTx: WalletTransaction = this.buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) + + txs.push(innerTx) + } + return txs + } + buildMultiSendSmartAccountTx = ( multiSend: Contract, txs: MetaTransaction[], From 555716bc5fedcd9463a986b68823b8172bd80e9c Mon Sep 17 00:00:00 2001 From: talha Date: Sun, 2 Oct 2022 19:50:52 +0500 Subject: [PATCH 0157/1247] local configuration changes --- package-lock.json | 117 ++++++++++++++---- packages/core-types/src/index.ts | 1 - packages/core-types/src/node-client.types.ts | 1 - packages/smart-account/src/SmartAccount.ts | 12 +- packages/transactions/src/contract-utils.ts | 4 +- packages/transactions/src/estimator.ts | 2 +- packages/transactions/src/index.ts | 10 +- .../transactions/src/transaction-manager.ts | 8 +- rebuild.sh | 6 +- 9 files changed, 116 insertions(+), 45 deletions(-) delete mode 100644 packages/core-types/src/node-client.types.ts diff --git a/package-lock.json b/package-lock.json index 8874c8acc..28a117883 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1989,21 +1989,21 @@ } }, "@nrwl/cli": { - "version": "14.6.3", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.6.3.tgz", - "integrity": "sha512-S+o59oswVCfzD/Txh94Vz+HoOl2ynJkuBiyuXjTved1PEpIM68SmFv6Wx8p8vYBbHLv2sL71pb0uqjFJJFovJw==", + "version": "14.8.2", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.8.2.tgz", + "integrity": "sha512-I+oblryFkZJYk9TMsBWNdN0SV7OjsiD80gD1WjA1KXEQiFVfopYgwErBrxoenodncXrMFRCk/QR9U5F+23+Vow==", "dev": true, "requires": { - "nx": "14.6.3" + "nx": "14.8.2" } }, "@nrwl/tao": { - "version": "14.6.3", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.6.3.tgz", - "integrity": "sha512-iVLLcluU5WDSHCxB5so/eSeIY4JK+Cp8Yjh21MLZBkYSw/NIryk9lbHyXQPl37+JY94FRO1G87kvgk4AFly1pw==", + "version": "14.8.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.8.2.tgz", + "integrity": "sha512-a4+O307YZJf1H6CDQFGs4DoUvl7xUFSJo2rNHoR9jDlWU+Ug3n0iivX7Fih6Ui0gX4ocEpRwzNMmJhEmEq1BYw==", "dev": true, "requires": { - "nx": "14.6.3" + "nx": "14.8.2" } }, "@octokit/auth-token": { @@ -2521,6 +2521,52 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "@yarnpkg/parsers": { + "version": "3.0.0-rc.22", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.22.tgz", + "integrity": "sha512-GAWDjXduYBUVmOzlj3X0OwTQ1BV4ZeDdgw8yXST3K0lB95drWEGxa1at0v7BmHDyK2y1F1IJufc8N4yrcuXjWg==", + "dev": true, + "requires": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, + "@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", @@ -3825,6 +3871,12 @@ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, "ethereum-cryptography": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", @@ -5273,9 +5325,9 @@ } }, "jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, "jsonfile": { @@ -6859,14 +6911,17 @@ } }, "nx": { - "version": "14.6.3", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.6.3.tgz", - "integrity": "sha512-jdIFsyZDr1CyUzNifwNJ5dNrRRgSHy2gE1zIxcxVQuLUzDHLwOs/oHAGisyXKJsTaxVRr4Yd2lWGudeU8ZEhyg==", + "version": "14.8.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-14.8.2.tgz", + "integrity": "sha512-pPijBoeybsIlCD8FMH8WTns+pcIL+0ZOh/+otUX2LfVsi+ppH33GUxO9QVLPrLcyGaoHhwil4hYBxPIQ7Z1r2g==", "dev": true, "requires": { - "@nrwl/cli": "14.6.3", - "@nrwl/tao": "14.6.3", + "@nrwl/cli": "14.8.2", + "@nrwl/tao": "14.8.2", "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "^3.0.0-rc.18", + "@zkochan/js-yaml": "0.0.6", "chalk": "4.1.0", "chokidar": "^3.5.1", "cli-cursor": "3.1.0", @@ -6881,12 +6936,13 @@ "glob": "7.1.4", "ignore": "^5.0.4", "js-yaml": "4.1.0", - "jsonc-parser": "3.0.0", + "jsonc-parser": "3.2.0", "minimatch": "3.0.5", "npm-run-path": "^4.0.1", "open": "^8.4.0", "semver": "7.3.4", "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", "tmp": "~0.2.1", "tsconfig-paths": "^3.9.0", @@ -8096,6 +8152,12 @@ "readable-stream": "^3.0.0" } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, "ssri": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", @@ -8741,18 +8803,31 @@ "dev": true }, "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", + "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", "dev": true, "requires": { - "cliui": "^7.0.2", + "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.0.0" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + } } }, "yargs-parser": { diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts index 163b3bdf7..2e4411586 100644 --- a/packages/core-types/src/index.ts +++ b/packages/core-types/src/index.ts @@ -6,6 +6,5 @@ export * from './contracts/EntryPointContract' export * from './ethereumLibs/EthAdapter' export * from './types' export * from './chains.types' -export * from './node-client.types' export * from './transaction.types' export * from './smart-account.types' diff --git a/packages/core-types/src/node-client.types.ts b/packages/core-types/src/node-client.types.ts deleted file mode 100644 index c833e7b2d..000000000 --- a/packages/core-types/src/node-client.types.ts +++ /dev/null @@ -1 +0,0 @@ -import { ChainId } from './chains.types' \ No newline at end of file diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 2b8b5bcb7..b4548f83f 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -37,7 +37,7 @@ import NodeClient, { } from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' -import { TransactionManager, ContractUtils } from '@biconomy-sdk/transactions' +import TransactionManager, { ContractUtils } from '@biconomy-sdk/transactions' import { BalancesDto } from '@biconomy-sdk/node-client' import { BalancesResponse, @@ -443,14 +443,6 @@ class SmartAccount { return this.contractUtils.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION] } - multiSend(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { - return this.contractUtils.multiSendContract[chainId][this.DEFAULT_VERSION] - } - - multiSendCall(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { - return this.contractUtils.multiSendCallOnlyContract[chainId][this.DEFAULT_VERSION] - } - // Note: expose getMultiSend(), getMultiSendCall() @@ -539,7 +531,7 @@ class SmartAccount { // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): SmartAccountContext { - const context: SmartAccountContext = this.contractUtils.getSmartAccountContext(chainId) + const context: SmartAccountContext = this.contractUtils.getSmartAccountContext(chainId, this.DEFAULT_VERSION) return context } } diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index 24468c24c..f2babc33c 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -22,7 +22,7 @@ import EthersAdapter from '@biconomy-sdk/ethers-lib' import { JsonRpcSigner } from '@ethersproject/providers' import { SmartAccountVersion } from '@biconomy-sdk/core-types' -export class ContractUtils { +class ContractUtils { ethAdapter!: { [chainId: number]: EthersAdapter } smartWalletContract!: { [chainId: number]: { [version: string]: SmartWalletContract } } @@ -143,4 +143,4 @@ export class ContractUtils { } } -// export default ContractUtils \ No newline at end of file +export default ContractUtils \ No newline at end of file diff --git a/packages/transactions/src/estimator.ts b/packages/transactions/src/estimator.ts index 5dae04719..a73357901 100644 --- a/packages/transactions/src/estimator.ts +++ b/packages/transactions/src/estimator.ts @@ -10,7 +10,7 @@ import NodeClient, { EstimateHandlePaymentTxGasDto, EstimateUndeployedContractGasDto, } from '@biconomy-sdk/node-client' -import { ContractUtils } from './contract-utils' +import ContractUtils from './contract-utils' import { PrepareRefundTransactionDto, PrepareRefundTransactionsDto, diff --git a/packages/transactions/src/index.ts b/packages/transactions/src/index.ts index 311fc9fc3..0de5bc2aa 100644 --- a/packages/transactions/src/index.ts +++ b/packages/transactions/src/index.ts @@ -1,9 +1,15 @@ // Review -export { TransactionManager } from './transaction-manager' -export { ContractUtils } from './contract-utils' + +import TransactionManager from './transaction-manager' +import ContractUtils from './contract-utils' + + +export default TransactionManager export * from './account-utils' export * from './execution' export * from './multisend' +export { ContractUtils } + diff --git a/packages/transactions/src/transaction-manager.ts b/packages/transactions/src/transaction-manager.ts index 769467dba..862c822bf 100644 --- a/packages/transactions/src/transaction-manager.ts +++ b/packages/transactions/src/transaction-manager.ts @@ -33,11 +33,11 @@ import NodeClient, { } from '@biconomy-sdk/node-client' import { Relayer } from '@biconomy-sdk/relayer' -import { ContractUtils } from './contract-utils' -import { Utils } from './Utils' +import ContractUtils from './contract-utils' +import { Utils } from './utils' // export class -export class TransactionManager { +class TransactionManager { chainId: ChainId @@ -725,4 +725,4 @@ export class TransactionManager { } // Review -// export default TransactionManager \ No newline at end of file +export default TransactionManager \ No newline at end of file diff --git a/rebuild.sh b/rebuild.sh index c33bb881d..46ca4807c 100755 --- a/rebuild.sh +++ b/rebuild.sh @@ -24,6 +24,6 @@ rm -rf packages/transactions/node_modules rm -rf packages/transactions/package-lock.json rm -rf packages/transactions/dist -npx lerna bootstrap --force-local -npm run build -npm link \ No newline at end of file +# npx lerna bootstrap --force-local +# npm run build +# npm link \ No newline at end of file From b12a98fab7fe2b123f003538ecb2b5b720beab12 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sun, 2 Oct 2022 19:03:35 +0400 Subject: [PATCH 0158/1247] transactionManager using common --- packages/core-types/src/index.ts | 1 - packages/core-types/src/node-client.types.ts | 1 - .../core-types/src/smart-account.types.ts | 4 +- packages/smart-account/src/SmartAccount.ts | 43 ++++---- packages/transactions/src/contract-utils.ts | 4 +- packages/transactions/src/estimator.ts | 2 +- packages/transactions/src/index.ts | 9 +- .../transactions/src/transaction-manager.ts | 102 ++++++++---------- 8 files changed, 78 insertions(+), 88 deletions(-) delete mode 100644 packages/core-types/src/node-client.types.ts diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts index 163b3bdf7..2e4411586 100644 --- a/packages/core-types/src/index.ts +++ b/packages/core-types/src/index.ts @@ -6,6 +6,5 @@ export * from './contracts/EntryPointContract' export * from './ethereumLibs/EthAdapter' export * from './types' export * from './chains.types' -export * from './node-client.types' export * from './transaction.types' export * from './smart-account.types' diff --git a/packages/core-types/src/node-client.types.ts b/packages/core-types/src/node-client.types.ts deleted file mode 100644 index c833e7b2d..000000000 --- a/packages/core-types/src/node-client.types.ts +++ /dev/null @@ -1 +0,0 @@ -import { ChainId } from './chains.types' \ No newline at end of file diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index b21be4c89..ab01f8da3 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -11,9 +11,7 @@ import { GasLimit } from './transaction.types' import { JsonRpcSigner } from '@ethersproject/providers' -export interface Config { - owner: string, - version: string +export interface SmartAccountConfig { activeNetworkId: ChainId // same supportedNetworksIds: ChainId[] // Network[] chainId: CbainId, rpcUrl?: string backend_url: string, diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 2b8b5bcb7..585cd6c09 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -27,7 +27,7 @@ import { SmartAccountState, FeeQuote, RelayResponse, - Config + SmartAccountConfig } from '@biconomy-sdk/core-types' import { JsonRpcSigner } from '@ethersproject/providers' import NodeClient, { @@ -37,7 +37,7 @@ import NodeClient, { } from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' -import { TransactionManager, ContractUtils } from '@biconomy-sdk/transactions' +import TransactionManager , { ContractUtils } from '@biconomy-sdk/transactions' import { BalancesDto } from '@biconomy-sdk/node-client' import { BalancesResponse, @@ -58,7 +58,7 @@ class SmartAccount { context!: { [chainId: number]: SmartAccountContext } // Optional config to initialise instance of Smart Account. One can provide main active chain and only limited chains they need to be on. - #smartAccountConfig!: Config + #smartAccountConfig!: SmartAccountConfig // Array of chain ids that current multi-chain instance supports supportedNetworkIds!: ChainId[] @@ -78,7 +78,7 @@ class SmartAccount { contractUtils!: ContractUtils // TBD : Do we keep manager for both SCW(forward) and Account Abstraction? - transactionManager!: { [chainId: number]: TransactionManager } + transactionManager!: TransactionManager // Instance of relayer (Relayer Service Client) connected with this Smart Account and always ready to dispatch transactions // relayer.relay => dispatch to blockchain @@ -102,7 +102,7 @@ class SmartAccount { * If you wish to use your own backend server and relayer service, pass the URLs here */ // review SmartAccountConfig - constructor(walletProvider: Web3Provider, config: Config) { + constructor(walletProvider: Web3Provider, config: SmartAccountConfig) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } if (config) { this.#smartAccountConfig = { ...this.#smartAccountConfig, ...config } @@ -121,6 +121,8 @@ class SmartAccount { async init(){ + this.setActiveChain(this.#smartAccountConfig.activeNetworkId) + this.owner = await this.signer.getAddress() this.#smartAccountConfig.owner = this.owner @@ -131,12 +133,11 @@ class SmartAccount { this.address = await this.getAddress({index: 0, chainId: this.#smartAccountConfig.activeNetworkId, version: this.DEFAULT_VERSION}) - await Promise.all(this.supportedNetworkIds.map(async(networkId) => { - this.transactionManager[networkId] = new TransactionManager(networkId) - const state = await this.getSmartAccountState(networkId) - // Note: Defualt relayer needs to set in constructor - await this.transactionManager[networkId].initialize(this.relayer, this.nodeClient, this.contractUtils, state) - })) + this.transactionManager = new TransactionManager() + + const state = await this.getSmartAccountState(this.#smartAccountConfig.activeNetworkId) + + await this.transactionManager.initialize(this.relayer, this.nodeClient, this.contractUtils, state) return this } @@ -195,7 +196,7 @@ class SmartAccount { if (relayer === undefined) return this this.relayer = relayer //If we end up maintaining relayer instance on this then it should update all transaction managers - //await this.transactionManager[this.#smartAccountConfig.activeNetworkId].setRelayer(relayer) + //await this.transactionManager.setRelayer(relayer) return this } @@ -321,7 +322,7 @@ class SmartAccount { prepareRefundTransactionDto.chainId = chainId prepareRefundTransactionDto.version = this.DEFAULT_VERSION prepareRefundTransactionDto.batchId = 0 - return this.transactionManager[chainId].prepareRefundTransaction(prepareRefundTransactionDto) + return this.transactionManager.prepareRefundTransaction(prepareRefundTransactionDto) } // Get Fee Options from relayer and make it available for display @@ -339,7 +340,7 @@ class SmartAccount { prepareRefundTransactionsDto.version = this.DEFAULT_VERSION prepareRefundTransactionsDto.batchId = 0 console.log('prepareRefundTransactionsDto ', prepareRefundTransactionsDto); - return this.transactionManager[chainId].prepareRefundTransactionBatch(prepareRefundTransactionsDto) + return this.transactionManager.prepareRefundTransactionBatch(prepareRefundTransactionsDto) } // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions @@ -358,7 +359,7 @@ class SmartAccount { refundTransactionDto.chainId = chainId refundTransactionDto.version = this.DEFAULT_VERSION refundTransactionDto.batchId = 0 - return this.transactionManager[chainId].createRefundTransaction(refundTransactionDto) + return this.transactionManager.createRefundTransaction(refundTransactionDto) } /** @@ -373,7 +374,7 @@ class SmartAccount { transactionDto.chainId = chainId transactionDto.version = this.DEFAULT_VERSION transactionDto.batchId = 0 - return this.transactionManager[chainId].createTransaction(transactionDto) + return this.transactionManager.createTransaction(transactionDto) } /** @@ -391,7 +392,7 @@ class SmartAccount { const chainId = this.#smartAccountConfig.activeNetworkId transactionBatchDto.chainId = chainId transactionBatchDto.version = this.DEFAULT_VERSION - return this.transactionManager[chainId].createTransactionBatch(transactionBatchDto) + return this.transactionManager.createTransactionBatch(transactionBatchDto) } /** @@ -408,16 +409,16 @@ class SmartAccount { refundTransactionBatchDto.chainId = chainId refundTransactionBatchDto.version = this.DEFAULT_VERSION refundTransactionBatchDto.batchId = 0 - return this.transactionManager[chainId].createRefundTransactionBatch(refundTransactionBatchDto) + return this.transactionManager.createRefundTransactionBatch(refundTransactionBatchDto) } async prepareDeployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { - return this.transactionManager[chainId].prepareDeployAndPayFees(chainId, this.DEFAULT_VERSION) + return this.transactionManager.prepareDeployAndPayFees(chainId, this.DEFAULT_VERSION) } // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment async deployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId, feeQuote: FeeQuote): Promise { - const transaction = await this.transactionManager[chainId].deployAndPayFees(chainId, this.DEFAULT_VERSION, feeQuote) + const transaction = await this.transactionManager.deployAndPayFees(chainId, this.DEFAULT_VERSION, feeQuote) const txHash = await this.sendTransaction({tx:transaction}); return txHash; } @@ -546,7 +547,7 @@ class SmartAccount { // Temporary default config // TODO/NOTE : make Goerli and Mumbai as test networks and remove others -export const DefaultSmartAccountConfig: Config = { +export const DefaultSmartAccountConfig: SmartAccountConfig = { owner: '', version: '1.0.1', activeNetworkId: ChainId.GOERLI, //Update later diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index 24468c24c..f2babc33c 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -22,7 +22,7 @@ import EthersAdapter from '@biconomy-sdk/ethers-lib' import { JsonRpcSigner } from '@ethersproject/providers' import { SmartAccountVersion } from '@biconomy-sdk/core-types' -export class ContractUtils { +class ContractUtils { ethAdapter!: { [chainId: number]: EthersAdapter } smartWalletContract!: { [chainId: number]: { [version: string]: SmartWalletContract } } @@ -143,4 +143,4 @@ export class ContractUtils { } } -// export default ContractUtils \ No newline at end of file +export default ContractUtils \ No newline at end of file diff --git a/packages/transactions/src/estimator.ts b/packages/transactions/src/estimator.ts index 5dae04719..a73357901 100644 --- a/packages/transactions/src/estimator.ts +++ b/packages/transactions/src/estimator.ts @@ -10,7 +10,7 @@ import NodeClient, { EstimateHandlePaymentTxGasDto, EstimateUndeployedContractGasDto, } from '@biconomy-sdk/node-client' -import { ContractUtils } from './contract-utils' +import ContractUtils from './contract-utils' import { PrepareRefundTransactionDto, PrepareRefundTransactionsDto, diff --git a/packages/transactions/src/index.ts b/packages/transactions/src/index.ts index 311fc9fc3..54f4e3d47 100644 --- a/packages/transactions/src/index.ts +++ b/packages/transactions/src/index.ts @@ -1,9 +1,10 @@ -// Review -export { TransactionManager } from './transaction-manager' -export { ContractUtils } from './contract-utils' - +import TransactionManager from './transaction-manager' +import ContractUtils from './contract-utils' export * from './account-utils' export * from './execution' export * from './multisend' + +export default TransactionManager +export { ContractUtils } \ No newline at end of file diff --git a/packages/transactions/src/transaction-manager.ts b/packages/transactions/src/transaction-manager.ts index f89f51fed..81c60935b 100644 --- a/packages/transactions/src/transaction-manager.ts +++ b/packages/transactions/src/transaction-manager.ts @@ -1,4 +1,3 @@ -import { smartAccountSignMessage } from './execution' import { encodeTransfer } from './account-utils' import { DEFAULT_FEE_RECEIVER, @@ -33,13 +32,13 @@ import NodeClient, { } from '@biconomy-sdk/node-client' import { Relayer } from '@biconomy-sdk/relayer' -import { ContractUtils } from './contract-utils' -import { Utils } from './Utils' +import ContractUtils from './contract-utils' +import { Utils } from './utils' -// export class -export class TransactionManager { - chainId: ChainId +class TransactionManager { + + // chainId: ChainId // Need setters nodeClient!: NodeClient @@ -52,8 +51,7 @@ export class TransactionManager { smartAccountState!: SmartAccountState - constructor(chainId: ChainId) { - this.chainId = chainId + constructor() { this.utils = new Utils() } @@ -93,14 +91,12 @@ export class TransactionManager { } async prepareDeployAndPayFees(chainId: ChainId, version: string) { - console.log(chainId) - const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(this.chainId) + const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; let feeQuotes: Array = []; - const self = this const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId: self.chainId, + chainId: chainId, version, owner: this.smartAccountState.owner, entryPointAddress: this.smartAccountState.entryPointAddress, @@ -136,14 +132,13 @@ export class TransactionManager { // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment async deployAndPayFees(chainId: ChainId, version: string, feeQuote: FeeQuote): Promise { - console.log(chainId) const token = feeQuote.address; const offset = feeQuote.offset || 1; const feeReceiver = feeQuote.refundReceiver || DEFAULT_FEE_RECEIVER; const self = this const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId: this.chainId, + chainId: chainId, version, owner: this.smartAccountState.owner, entryPointAddress: this.smartAccountState.entryPointAddress, @@ -158,7 +153,7 @@ export class TransactionManager { data: encodeTransfer(feeReceiver, Number(feesToPay)) }; - const transaction = await this.createTransaction({ version, transaction: tx, batchId: 0, chainId: this.chainId }); + const transaction = await this.createTransaction({ version, transaction: tx, batchId: 0, chainId: chainId }); return transaction } @@ -170,14 +165,14 @@ export class TransactionManager { * @returns */ async createTransaction(transactionDto: TransactionDto): Promise { - const { transaction, batchId = 0, version } = transactionDto + const { transaction, batchId = 0, chainId, version } = transactionDto // NOTE : If the wallet is not deployed yet then nonce would be zero - let walletContract = this.contractUtils.smartWalletContract[this.chainId][version].getContract() + let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() walletContract = walletContract.attach(this.smartAccountState.address) let nonce = 0 - if (await this.contractUtils.isDeployed(this.chainId, version, this.smartAccountState.address)) { + if (await this.contractUtils.isDeployed(chainId, version, this.smartAccountState.address)) { nonce = (await walletContract.getNonce(batchId)).toNumber() } console.log('nonce: ', nonce) @@ -205,14 +200,14 @@ export class TransactionManager { async createTransactionBatch( transactionBatchDto: TransactionBatchDto ): Promise { - const { transactions, batchId, version } = transactionBatchDto + const { transactions, batchId, chainId, version } = transactionBatchDto // NOTE : If the wallet is not deployed yet then nonce would be zero - let walletContract = this.contractUtils.smartWalletContract[this.chainId][version].getContract() + let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() walletContract = walletContract.attach(this.smartAccountState.address) // NOTE : If the wallet is not deployed yet then nonce would be zero let nonce = 0 - if (await this.contractUtils.isDeployed(this.chainId, version, this.smartAccountState.address)) { + if (await this.contractUtils.isDeployed(chainId, version, this.smartAccountState.address)) { nonce = (await walletContract.getNonce(batchId)).toNumber() } console.log('nonce: ', nonce) @@ -231,7 +226,7 @@ export class TransactionManager { } const walletTx: WalletTransaction = this.utils.buildMultiSendSmartAccountTx( - this.contractUtils.multiSendContract[this.chainId][version].getContract(), + this.contractUtils.multiSendContract[chainId][version].getContract(), txs, nonce ) @@ -244,13 +239,14 @@ export class TransactionManager { const { transaction, batchId, + chainId, version } = prepareTransactionDto // OR just like contractUtils manages context, this class manages state getState(chainId) method // const state = await this.getSmartAccountState(chainId); // try catch - const tx = await this.createTransaction({ version, transaction, batchId, chainId: this.chainId }); + const tx = await this.createTransaction({ version, transaction, batchId, chainId: chainId }); // try catch let estimatedGasUsed = await this.estimator.estimateTransaction(prepareTransactionDto, tx, this.smartAccountState); @@ -271,10 +267,11 @@ export class TransactionManager { const { transaction, batchId, + chainId, version } = prepareRefundTransactionDto - const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(this.chainId) + const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response let feeQuotes: Array = [] @@ -286,7 +283,7 @@ export class TransactionManager { version, transaction, batchId, - chainId: this.chainId + chainId: chainId }) // also relayer would give feeReceiver that becomes part of feeQuote @@ -316,8 +313,8 @@ export class TransactionManager { async estimateTransactionBatch(prepareRefundTransactionsDto: PrepareRefundTransactionsDto): Promise { - const { transactions, batchId, version } = prepareRefundTransactionsDto - const tx = await this.createTransactionBatch({ version, transactions, batchId, chainId: this.chainId }); + const { transactions, batchId, chainId, version } = prepareRefundTransactionsDto + const tx = await this.createTransactionBatch({ version, transactions, batchId, chainId: chainId }); // try catch let estimatedGasUsed = await this.estimator.estimateTransactionBatch(prepareRefundTransactionsDto, tx, this.smartAccountState); return estimatedGasUsed; @@ -336,11 +333,12 @@ export class TransactionManager { const { transactions, batchId, + chainId, version } = prepareRefundTransactionsDto console.log('calling getFeeOptions'); - const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(this.chainId) + const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) console.log('gasPriceQuotesResponse '); const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response @@ -357,7 +355,7 @@ export class TransactionManager { version, transactions, batchId, - chainId: this.chainId + chainId: chainId }) feeOptionsAvailable.forEach((feeOption) => { @@ -401,20 +399,20 @@ export class TransactionManager { async createRefundTransaction( refundTransactionDto: RefundTransactionDto ): Promise { - const { transaction, feeQuote, batchId, version } = refundTransactionDto - let walletContract = this.contractUtils.smartWalletContract[this.chainId][version].getContract() + const { transaction, feeQuote, batchId, chainId, version } = refundTransactionDto + let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() walletContract = walletContract.attach(this.smartAccountState.address) let additionalBaseGas = 0 // NOTE : If the wallet is not deployed yet then nonce would be zero let nonce = 0 - const isDeployed = await this.contractUtils.isDeployed(this.chainId, version, this.smartAccountState.address) + const isDeployed = await this.contractUtils.isDeployed(chainId, version, this.smartAccountState.address) if (isDeployed) { nonce = (await walletContract.getNonce(batchId)).toNumber() } else { const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId: this.chainId, + chainId: chainId, version, owner: this.smartAccountState.owner, entryPointAddress: this.smartAccountState.entryPointAddress, @@ -446,7 +444,7 @@ export class TransactionManager { // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] const estimateRequiredTxGas: EstimateRequiredTxGasDto = { - chainId: this.chainId, + chainId: chainId, walletAddress: this.smartAccountState.address, transaction: internalTx } @@ -469,7 +467,7 @@ export class TransactionManager { refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS } const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId: this.chainId, + chainId: chainId, version: version, walletAddress: this.smartAccountState.address, feeRefund: refundDetails @@ -483,7 +481,7 @@ export class TransactionManager { baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas } else { const estimateRequiredTxGas: EstimateRequiredTxGasDto = { - chainId: this.chainId, + chainId: chainId, walletAddress: this.smartAccountState.address, transaction: internalTx } @@ -508,7 +506,7 @@ export class TransactionManager { } const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId: this.chainId, + chainId: chainId, version: version, walletAddress: this.smartAccountState.address, feeRefund: refundDetails @@ -551,16 +549,17 @@ export class TransactionManager { transactions, feeQuote, batchId, + chainId, version } = refundTransactionBatchDto - let walletContract = this.contractUtils.smartWalletContract[this.chainId][version].getContract() + let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() const connectedWallet = this.smartAccountState.address walletContract = walletContract.attach(connectedWallet) // TODO // Review const isDeployed = this.smartAccountState.isDeployed - // await this.contractUtils.isDeployed(this.chainId, version, this.smartAccountState.address); + // await this.contractUtils.isDeployed(chainId, version, this.smartAccountState.address); let additionalBaseGas = 0; // NOTE : If the wallet is not deployed yet then nonce would be zero @@ -570,7 +569,7 @@ export class TransactionManager { } else { // TODO : estimation cost can be passed const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId: this.chainId, + chainId: chainId, version, owner: this.smartAccountState.owner, entryPointAddress: this.smartAccountState.entryPointAddress, @@ -588,7 +587,7 @@ export class TransactionManager { const txs: MetaTransaction[] = this.utils.buildSmartAccountTransactions(transactions) const walletTx: WalletTransaction = this.utils.buildMultiSendSmartAccountTx( - this.contractUtils.multiSendContract[this.chainId][version].getContract(), + this.contractUtils.multiSendContract[chainId][version].getContract(), txs, nonce ); @@ -611,7 +610,7 @@ export class TransactionManager { // i. use really high value // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] const estimateRequiredTxGas: EstimateRequiredTxGasDto = { - chainId: this.chainId, + chainId: chainId, walletAddress: this.smartAccountState.address, transaction: internalTx } @@ -637,7 +636,7 @@ export class TransactionManager { } const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId: this.chainId, + chainId: chainId, version: version, walletAddress: this.smartAccountState.address, feeRefund: refundDetails @@ -652,7 +651,7 @@ export class TransactionManager { } else { const estimateRequiredTxGas: EstimateRequiredTxGasDto = { - chainId: this.chainId, + chainId: chainId, walletAddress: this.smartAccountState.address, transaction: internalTx } @@ -677,7 +676,7 @@ export class TransactionManager { } const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { - chainId: this.chainId, + chainId: chainId, version: version, walletAddress: this.smartAccountState.address, feeRefund: refundDetails @@ -705,16 +704,9 @@ export class TransactionManager { return finalWalletTx } - /** - * @param address Owner aka {EOA} address - * @param index number of smart account deploy i.e {0, 1 ,2 ...} - * @description return address for Smart account - * @returns - */ - ethersAdapter(): EthersAdapter { - return this.contractUtils.ethAdapter[this.chainId] + ethersAdapter(chainId: ChainId): EthersAdapter { + return this.contractUtils.ethAdapter[chainId] } } -// Review -// export default TransactionManager \ No newline at end of file +export default TransactionManager \ No newline at end of file From ee21f77ea5fb3b988dc76f733aed466e29e9de90 Mon Sep 17 00:00:00 2001 From: talha Date: Sun, 2 Oct 2022 21:17:00 +0500 Subject: [PATCH 0159/1247] build script and mising pkg --- packages/transactions/package.json | 1 + rebuild.sh | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 74355f55f..c573f7226 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -39,6 +39,7 @@ "@biconomy-sdk/relayer": "*", "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/constants": "^5.6.1", + "ethereumjs-util": "^7.1.5", "ethers": "^5.6.9" } } diff --git a/rebuild.sh b/rebuild.sh index 46ca4807c..9665b2906 100755 --- a/rebuild.sh +++ b/rebuild.sh @@ -1,5 +1,5 @@ #!/bin/sh - +rm -rf package-lock.json rm -rf node_modules rm -rf packages/core-types/node_modules rm -rf packages/core-types/package-lock.json @@ -24,6 +24,6 @@ rm -rf packages/transactions/node_modules rm -rf packages/transactions/package-lock.json rm -rf packages/transactions/dist -# npx lerna bootstrap --force-local -# npm run build -# npm link \ No newline at end of file +npx lerna bootstrap --force-local +npm run build +npm link \ No newline at end of file From 5f6197a7e95c6b0c6e76c265c0a5bca11f2e8313 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sun, 2 Oct 2022 23:14:26 +0400 Subject: [PATCH 0160/1247] pkg json updated --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3f9bb625d..3367bdaab 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@types/jest": "^28.1.7", "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", - "lerna": "^4.0.0", + "lerna": "^5.5.4", "nx": "^14.8.2", "prettier": "2.7.1", "rimraf": "^3.0.2", From a86bbb2dde1a36ebe7a316b5b1497aabf884fb28 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 3 Oct 2022 12:11:22 +0400 Subject: [PATCH 0161/1247] update smart account config --- packages/core-types/src/smart-account.types.ts | 8 ++++---- packages/smart-account/src/SmartAccount.ts | 5 +---- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index d14f0c325..91bc0da6a 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -12,8 +12,8 @@ import { JsonRpcSigner } from '@ethersproject/providers' export interface SmartAccountConfig { - owner: string - version: string + // owner: string + // version: string activeNetworkId: ChainId // same supportedNetworksIds: ChainId[] // Network[] chainId: CbainId, rpcUrl?: string backend_url: string, @@ -40,8 +40,8 @@ export interface SmartAccountState { address: string // multichain (EVM) owner: string // multichain (EVM) isDeployed: boolean // chain specific - entryPointAddress: string // chain specific - fallbackHandlerAddress: string // chain specific + entryPointAddress: string // chain specific? + fallbackHandlerAddress: string // chain specific? } export type AddressForCounterFactualWalletDto = { diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 4e7fcec5b..3d3081db0 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -124,8 +124,7 @@ class SmartAccount { this.setActiveChain(this.#smartAccountConfig.activeNetworkId) this.owner = await this.signer.getAddress() - this.#smartAccountConfig.owner = this.owner - + const chainConfig = (await this.nodeClient.getAllSupportedChains()).data this.chainConfig = chainConfig @@ -545,8 +544,6 @@ class SmartAccount { // Temporary default config // TODO/NOTE : make Goerli and Mumbai as test networks and remove others export const DefaultSmartAccountConfig: SmartAccountConfig = { - owner: '', - version: '1.0.1', activeNetworkId: ChainId.GOERLI, //Update later supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], backend_url: 'https://sdk-backend.staging.biconomy.io/v1', From 283e14a172e18984471021e16962dcf3604b976a Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 3 Oct 2022 15:08:33 +0500 Subject: [PATCH 0162/1247] types update and backend functions --- .nvmrc | 1 + package-lock.json | 8864 ------------ .../src/contracts/EntryPointContract.ts | 6 +- .../src/contracts/SmartWalletContract.ts | 8 +- .../contracts/SmartWalletFactoryContract.ts | 6 +- .../EvmNetworkManager.ts} | 8 +- packages/core-types/src/index.ts | 2 +- .../core-types/src/smart-account.types.ts | 12 +- packages/core-types/src/transaction.types.ts | 38 +- packages/core-types/src/types.ts | 16 +- packages/ethers-lib/src/EthersAdapter.ts | 12 +- .../v1.0.0/EntryPointEthersContract.ts | 6 +- .../v1.0.1/EntryPointEthersContract.ts | 6 +- .../v1.0.0/SmartWalletContractEthers.ts | 15 +- .../v1.0.1/SmartWalletContractEthers.ts | 13 +- .../SmartWalletProxyFactoryEthersContract.ts | 6 +- .../SmartWalletProxyFactoryEthersContract.ts | 6 +- packages/ethers-lib/src/index.ts | 4 +- packages/ethers-lib/src/types.ts | 8 +- packages/ethers-lib/src/utils/index.ts | 6 +- packages/node-client/src/INodeClient.ts | 13 +- packages/node-client/src/NodeClient.ts | 25 +- .../node-client/src/types/NodeClientTypes.ts | 28 +- packages/relayer/src/local-relayer.ts | 4 +- packages/relayer/src/rest-relayer.ts | 10 - packages/smart-account/src/SmartAccount.ts | 42 +- packages/transactions/src/contract-utils.ts | 6 +- packages/transactions/src/estimator.ts | 19 +- packages/transactions/src/execution.ts | 33 +- packages/transactions/src/multisend.ts | 12 +- .../transactions/src/transaction-manager.ts | 48 +- packages/transactions/src/utils.ts | 24 +- packages/transactions/yarn.lock | 4725 ------- yarn.lock | 11621 ++++++++++++++++ 34 files changed, 11863 insertions(+), 13790 deletions(-) create mode 100644 .nvmrc delete mode 100644 package-lock.json rename packages/core-types/src/{ethereumLibs/EthAdapter.ts => evm-manager/EvmNetworkManager.ts} (87%) delete mode 100644 packages/transactions/yarn.lock create mode 100644 yarn.lock diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 000000000..c9d82507f --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v14.17.0 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 28a117883..000000000 --- a/package-lock.json +++ /dev/null @@ -1,8864 +0,0 @@ -{ - "name": "biconomy-sdk", - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - } - }, - "@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - } - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/vm": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", - "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.3", - "@ethereumjs/blockchain": "^5.5.3", - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.4", - "rustbn.js": "~0.2.0" - } - }, - "@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "dev": true - }, - "@ethersproject/networks": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.0.tgz", - "integrity": "sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" - } - }, - "@ethersproject/web": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.0.tgz", - "integrity": "sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA==", - "dev": true, - "requires": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true - }, - "@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2" - } - }, - "@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@lerna/add": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.4.3.tgz", - "integrity": "sha512-wBjBHX/A0nSiVGJDq5wNpqR+zrxKFREeKrqvIXGmAgcwpDjp76JLVhdSdQns+X+AYsf13NFaNhBqfGlF5SZNnQ==", - "dev": true, - "requires": { - "@lerna/bootstrap": "5.4.3", - "@lerna/command": "5.4.3", - "@lerna/filter-options": "5.4.3", - "@lerna/npm-conf": "5.4.3", - "@lerna/validation-error": "5.4.3", - "dedent": "^0.7.0", - "npm-package-arg": "8.1.1", - "p-map": "^4.0.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" - } - }, - "@lerna/bootstrap": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.4.3.tgz", - "integrity": "sha512-9mruEpXD2p8mG9Feak0QzU+JcROsJ8J0MvY7gTGtUqQJqBIA6HGEYXQueHbcl+jGdZyTZOz139KsavPui55QEQ==", - "dev": true, - "requires": { - "@lerna/command": "5.4.3", - "@lerna/filter-options": "5.4.3", - "@lerna/has-npm-version": "5.4.3", - "@lerna/npm-install": "5.4.3", - "@lerna/package-graph": "5.4.3", - "@lerna/pulse-till-done": "5.4.3", - "@lerna/rimraf-dir": "5.4.3", - "@lerna/run-lifecycle": "5.4.3", - "@lerna/run-topologically": "5.4.3", - "@lerna/symlink-binary": "5.4.3", - "@lerna/symlink-dependencies": "5.4.3", - "@lerna/validation-error": "5.4.3", - "@npmcli/arborist": "5.3.0", - "dedent": "^0.7.0", - "get-port": "^5.1.1", - "multimatch": "^5.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4" - } - }, - "@lerna/changed": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.4.3.tgz", - "integrity": "sha512-q1ARClN0pLZ53hBPiR4TJB6GGq17Yhwb6iKwQryZBWuOEc87NqqRtIPWswk5NISj2qcPQlbyrnB3RshwLkyo7w==", - "dev": true, - "requires": { - "@lerna/collect-updates": "5.4.3", - "@lerna/command": "5.4.3", - "@lerna/listable": "5.4.3", - "@lerna/output": "5.4.3" - } - }, - "@lerna/check-working-tree": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.4.3.tgz", - "integrity": "sha512-OnGqIDW8sRcAQDV8mdtvYIh0EIv2FXm+4/qKAveFhyDkWWpnUF/ZSIa/CFVHYoKFFzb5WOBouml2oqWPyFHhbA==", - "dev": true, - "requires": { - "@lerna/collect-uncommitted": "5.4.3", - "@lerna/describe-ref": "5.4.3", - "@lerna/validation-error": "5.4.3" - } - }, - "@lerna/child-process": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.4.3.tgz", - "integrity": "sha512-p7wJ8QT8kXHk4EAy/oyjCD603n1F61Tm4l6thF1h9MAw3ejSvvUZ0BKSg9vPoZ/YMAC9ZuVm1mFsyoi5RlvIHw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "execa": "^5.0.0", - "strong-log-transformer": "^2.1.0" - } - }, - "@lerna/clean": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.4.3.tgz", - "integrity": "sha512-Kl04A5NqywbBf7azSt9UJqHzRCXogHNpEh3Yng5+Y4ggunP4zVabzdoYGdggS4AsbDuIOKECx9BmCiDwJ4Qv8g==", - "dev": true, - "requires": { - "@lerna/command": "5.4.3", - "@lerna/filter-options": "5.4.3", - "@lerna/prompt": "5.4.3", - "@lerna/pulse-till-done": "5.4.3", - "@lerna/rimraf-dir": "5.4.3", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1" - } - }, - "@lerna/cli": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.4.3.tgz", - "integrity": "sha512-avnRUZ51nSZMR+tOcMQZ61hnVbDNdmyaVRxfSLByH5OFY+KPnfaTPv1z4ub+rEtV2NTI5DYWAqxupNGLuu9bQQ==", - "dev": true, - "requires": { - "@lerna/global-options": "5.4.3", - "dedent": "^0.7.0", - "npmlog": "^6.0.2", - "yargs": "^16.2.0" - }, - "dependencies": { - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } - } - }, - "@lerna/collect-uncommitted": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.4.3.tgz", - "integrity": "sha512-/0u95DbwP1+orGifkPRqaIqD8Ui2vpy9KmeuHTui+4iR/ZvZbgIouMdOhH+fU9e5hfLF6geUKnEFjL+Lxa4qdg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "chalk": "^4.1.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/collect-updates": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.4.3.tgz", - "integrity": "sha512-TU3+hcwqHWKSK0J+NWNo5pjP7nnCzhnFfL/UfCG6oNAUb6PnmKSgZ9NqjOXja1WjJPrtFDIGoIYzLJZCePFyLw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "@lerna/describe-ref": "5.4.3", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "slash": "^3.0.0" - } - }, - "@lerna/command": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.4.3.tgz", - "integrity": "sha512-xBdbqcvHeWltH4QvWcmH9dKjWzD+KXfhSP0NBgwED8ZNMxSuzBz2OS3Ps8KbLemXNP8P0yhjoPgitGmxxeY/ow==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "@lerna/package-graph": "5.4.3", - "@lerna/project": "5.4.3", - "@lerna/validation-error": "5.4.3", - "@lerna/write-log-file": "5.4.3", - "clone-deep": "^4.0.1", - "dedent": "^0.7.0", - "execa": "^5.0.0", - "is-ci": "^2.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/conventional-commits": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.4.3.tgz", - "integrity": "sha512-GHZdpCUMqalO692O7Mqj5idYftZWaCylb4TSPkHEU8xSfxtufp8lM+Q8Xxv35ymzs0pBrmzSLZIpIMQ9awDABg==", - "dev": true, - "requires": { - "@lerna/validation-error": "5.4.3", - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.4", - "conventional-recommended-bump": "^6.1.0", - "fs-extra": "^9.1.0", - "get-stream": "^6.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "semver": "^7.3.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - } - } - }, - "@lerna/create": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.4.3.tgz", - "integrity": "sha512-VLrcfjBNzhUie5tLWSEa203BljirEG7OH62lgoLqR9qA/FVozoWrRKmly/EVw8Q7+5UNw/ciTzXnbm0BPXl6tg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "@lerna/command": "5.4.3", - "@lerna/npm-conf": "5.4.3", - "@lerna/validation-error": "5.4.3", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "init-package-json": "^3.0.2", - "npm-package-arg": "8.1.1", - "p-reduce": "^2.1.0", - "pacote": "^13.6.1", - "pify": "^5.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0", - "whatwg-url": "^8.4.0", - "yargs-parser": "20.2.4" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - } - } - }, - "@lerna/create-symlink": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.4.3.tgz", - "integrity": "sha512-QxmKCHA5woed/qJjKNkOSgkbhhmPV3g61F499uVwPtyPivn9Y2mbeVPMQrLkb0CL9M6aJ7vE4fi6T5XMqsbNpg==", - "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/describe-ref": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.4.3.tgz", - "integrity": "sha512-g3R5exjZy5MOcMPzgU8+t7sGEt4gGMKQLUFfg5NAceera6RGWUieY8OWL6jlacgyM4c8iyh15Tu14YwzL2DiBA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "npmlog": "^6.0.2" - } - }, - "@lerna/diff": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.4.3.tgz", - "integrity": "sha512-MJKvy/XC2RpS/gqg7GguQsBv5rZm+S5P/kfnqhapXCniGviZfq+JfY5TQCsAP9umiybR2sB004K1Z7heyU8uMA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "@lerna/command": "5.4.3", - "@lerna/validation-error": "5.4.3", - "npmlog": "^6.0.2" - } - }, - "@lerna/exec": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.4.3.tgz", - "integrity": "sha512-BLrva/KV6JWTV+7h7h+NQDsxpz0z1Nh99BUqqvZDzGIKMey4c1fo+CQGac77TsAophnv0ieFgHkSmrC6NXJa9g==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "@lerna/command": "5.4.3", - "@lerna/filter-options": "5.4.3", - "@lerna/profiler": "5.4.3", - "@lerna/run-topologically": "5.4.3", - "@lerna/validation-error": "5.4.3", - "p-map": "^4.0.0" - } - }, - "@lerna/filter-options": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.4.3.tgz", - "integrity": "sha512-581GE81BSWgS9za4tBv1nwZ2ImgH7UO3xil1b7xogvc/iGwM0MgOwt9f1MrS5ZOliNnme4cSZEGFe+QWPXCE4A==", - "dev": true, - "requires": { - "@lerna/collect-updates": "5.4.3", - "@lerna/filter-packages": "5.4.3", - "dedent": "^0.7.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/filter-packages": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.4.3.tgz", - "integrity": "sha512-W5OVMUjXh/Zii17FCSbIf/6Q3Bo5ETMAWMZ6EpHSU99M0kdvgpjXj3VUSjiCzwccqIa2EZjaua0RWSbOtfZCVg==", - "dev": true, - "requires": { - "@lerna/validation-error": "5.4.3", - "multimatch": "^5.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/get-npm-exec-opts": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.4.3.tgz", - "integrity": "sha512-q/3zQvlwTpAh6HVtVGOTuCGIgkhtCPK9CcHRo09c0Q3LQk5MsZYkPmJe0ujU1Gf7pILzQA5tnCy56eWT5uMPUg==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/get-packed": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.4.3.tgz", - "integrity": "sha512-y97plqJmrTwnZE9EH0MhtwnVHOF/revnH95fD2UyUpGrxdAFvbE7rs3A9zrSxurFLn4q6qWBKONwQLccQSTBTA==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "ssri": "^9.0.1", - "tar": "^6.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/github-client": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.4.3.tgz", - "integrity": "sha512-P/i64IUDw72YvS5lTciCLAxvjliN2lZSDZSqH59kQ4m2dma0dChiLTreq1Ei8xyY124oacARwxxQCN95m2u3nw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^19.0.3", - "git-url-parse": "^12.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/gitlab-client": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.4.3.tgz", - "integrity": "sha512-EEr5OkdiS7ev2X9jaknr3UUksPajij1nGFFhPXpAexAEkJYSRjdSvfPtd4ssTViIHMGHKMcNcGrMW+ESly1lpw==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "npmlog": "^6.0.2", - "whatwg-url": "^8.4.0" - } - }, - "@lerna/global-options": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.4.3.tgz", - "integrity": "sha512-e0TVIHLl0IULJWfLA9uGOIYnI3MVAjTp9I0p/9u3fC62dQxJBhoy5/9+y2zuu85MTB+4XTVi2m8G99H9pfBhMA==", - "dev": true - }, - "@lerna/has-npm-version": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.4.3.tgz", - "integrity": "sha512-Vu5etw5vXEbYLOO26lO3u5gEjX9vWUjqLTQfNEnJxflaH9JWw2NNJ/6nXG0hqc8kEmMdhabrw+FHSKaO9ZQygw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "semver": "^7.3.4" - } - }, - "@lerna/import": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.4.3.tgz", - "integrity": "sha512-SRUyITjhqbN7JOrUHskaqbppiq8yqpSLw1+tseT3D3HdYQQjvQzR1GjBVm+LZKlHRi9qqku9fqUNQf9AqbtysA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "@lerna/command": "5.4.3", - "@lerna/prompt": "5.4.3", - "@lerna/pulse-till-done": "5.4.3", - "@lerna/validation-error": "5.4.3", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "p-map-series": "^2.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/info": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.4.3.tgz", - "integrity": "sha512-cO0jWK2zcU9fsnoR2aqYU1IqNxWBkLvvQcTiodPqMsTAVh2F8cbwUXptWJyvsyCkKqO86axa7h6AbeF9rHRj0g==", - "dev": true, - "requires": { - "@lerna/command": "5.4.3", - "@lerna/output": "5.4.3", - "envinfo": "^7.7.4" - } - }, - "@lerna/init": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.4.3.tgz", - "integrity": "sha512-cicNfMuswF+8S5RhbvCnXIrdNWTS5/ajwGYOv85x/Gu2FOJ1eqJ4W4Ai6ybANBefErE4+7aSGl/kt/+sRvTeTw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "@lerna/command": "5.4.3", - "@lerna/project": "5.4.3", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "write-json-file": "^4.3.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/link": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.4.3.tgz", - "integrity": "sha512-DY6PQYE2g1a5QGDXCoajr8hl87m83vmfUIz1342x1qwWHmfRLfS3KTPPfa5bsZk/ABVOrqjjz/v3m4SEJ4LC5A==", - "dev": true, - "requires": { - "@lerna/command": "5.4.3", - "@lerna/package-graph": "5.4.3", - "@lerna/symlink-dependencies": "5.4.3", - "p-map": "^4.0.0", - "slash": "^3.0.0" - } - }, - "@lerna/list": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.4.3.tgz", - "integrity": "sha512-VEoJfobof7Welp+1yX6gm0EtpZw9vyztGvTtOeHQ1fhfW88oav03Qoi/hk1qZXPf7/hVZrJKEmSJ4etxsbZ3/g==", - "dev": true, - "requires": { - "@lerna/command": "5.4.3", - "@lerna/filter-options": "5.4.3", - "@lerna/listable": "5.4.3", - "@lerna/output": "5.4.3" - } - }, - "@lerna/listable": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.4.3.tgz", - "integrity": "sha512-VcJMw+z84Rj1nLIso474+veFx0tCH9Jas02YXx9cgAnaK1IRP0BI9O0vccQIZ+2Rb62VLiFGzyCJIyKyhcGZHw==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.4.3", - "chalk": "^4.1.0", - "columnify": "^1.6.0" - } - }, - "@lerna/log-packed": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.4.3.tgz", - "integrity": "sha512-pFEBaj5JOf44+kOV6eiFHAfEULC6NhHJHHFwkljL1WNcx/+46aOADY9LrjmVtp8uPWv3fMCb3ZGcxuGebz1lYA==", - "dev": true, - "requires": { - "byte-size": "^7.0.0", - "columnify": "^1.6.0", - "has-unicode": "^2.0.1", - "npmlog": "^6.0.2" - } - }, - "@lerna/npm-conf": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.4.3.tgz", - "integrity": "sha512-iQrrZHxAXqogfCpQvC/ac42/gR3osT+WN2FFB1gjVYYFBMZto5mlpcvyzH8rb75OJfak8iDtOYHUymmwSda1jw==", - "dev": true, - "requires": { - "config-chain": "^1.1.12", - "pify": "^5.0.0" - }, - "dependencies": { - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - } - } - }, - "@lerna/npm-dist-tag": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.4.3.tgz", - "integrity": "sha512-LnbD6xrnrmMdXH/nntyd/xJueKZGhCv3YLWK9F6YQdmUoeWY+W7eckmdd8LKL6ZqupyeLxgn0NKwiJ5wxf0F2w==", - "dev": true, - "requires": { - "@lerna/otplease": "5.4.3", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/npm-install": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.4.3.tgz", - "integrity": "sha512-MPXYQ1r/UMV9x+6F2VEk3miHOw4fn+G4zN11PGB5nWmuaT4uq7rPoudkdRvMRqm6bK0NpL/trssSb12ERzevqg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "@lerna/get-npm-exec-opts": "5.4.3", - "fs-extra": "^9.1.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "signal-exit": "^3.0.3", - "write-pkg": "^4.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/npm-publish": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.4.3.tgz", - "integrity": "sha512-yfwtTWYRace2oJK+a7nVUs7HubypgoA1fEZ6JUZFKVkq54C8tDdyYz4EtTtiFr7WMjP8p3NWxh7RNh7Tyx7ckQ==", - "dev": true, - "requires": { - "@lerna/otplease": "5.4.3", - "@lerna/run-lifecycle": "5.4.3", - "fs-extra": "^9.1.0", - "libnpmpublish": "^6.0.4", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "read-package-json": "^5.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - } - } - }, - "@lerna/npm-run-script": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.4.3.tgz", - "integrity": "sha512-xb6YAxAxGDBPlpZtjDPlM9NAgIcNte31iuGpG0I5eTYqBppKNZ7CQ8oi76qptrLyrK/ug9kqDIGti5OgyAMihQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "@lerna/get-npm-exec-opts": "5.4.3", - "npmlog": "^6.0.2" - } - }, - "@lerna/otplease": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.4.3.tgz", - "integrity": "sha512-iy+NpqP9UcB8a0W3Nhq20x2gWSRQcmkOb25qSJj7f5AisCwGWypYlD6RZ9NqCzUD7KEbAaydEEyhoPw9dQRFmg==", - "dev": true, - "requires": { - "@lerna/prompt": "5.4.3" - } - }, - "@lerna/output": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.4.3.tgz", - "integrity": "sha512-y/skSk0jMxPlJ1gpQwmKiMdElbznOMCYdCi170wfj3esby+fr8eULiwx7wUy3K+YtEGp7JS6TUjXb4zm9O0rMw==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/pack-directory": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.4.3.tgz", - "integrity": "sha512-47vsQem4Jr1W7Ce03RKihprBFLh2Q+VKgIcQGPec764i5uv3QWHzqK//da7+fmHr86qusinHvCIV7X3pXcohWg==", - "dev": true, - "requires": { - "@lerna/get-packed": "5.4.3", - "@lerna/package": "5.4.3", - "@lerna/run-lifecycle": "5.4.3", - "@lerna/temp-write": "5.4.3", - "npm-packlist": "^5.1.1", - "npmlog": "^6.0.2", - "tar": "^6.1.0" - } - }, - "@lerna/package": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.4.3.tgz", - "integrity": "sha512-EIw82v4ijzS3qRCSKHNSJ/UTnFDroaEp6mj7pzLO6lIrAqg7MgtKeThMhzEAMvF4yNB7BL+UR+dZ0jI47WgQJQ==", - "dev": true, - "requires": { - "load-json-file": "^6.2.0", - "npm-package-arg": "8.1.1", - "write-pkg": "^4.0.0" - } - }, - "@lerna/package-graph": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.4.3.tgz", - "integrity": "sha512-8eyAS+hb+K/+1Si2UNh4KPaLFdgTgdrRcsuTY7aKaINyrzoLTArAKPk4dQZTH1d0SUWtFzicvWixkkzq21QuOw==", - "dev": true, - "requires": { - "@lerna/prerelease-id-from-version": "5.4.3", - "@lerna/validation-error": "5.4.3", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "semver": "^7.3.4" - } - }, - "@lerna/prerelease-id-from-version": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.4.3.tgz", - "integrity": "sha512-bXsBCv/VJrWXz2usnk52TtTb4dsXSeYDI2U1N2z/DssFKlOpH7xL1mKWC4OXE2XBqb9I49sDPfZzN8BxTfJdJQ==", - "dev": true, - "requires": { - "semver": "^7.3.4" - } - }, - "@lerna/profiler": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.4.3.tgz", - "integrity": "sha512-6otMDwCzfWszV0K7RRjlF5gibLZt1ay+NmtrhL7TZ7PSizIJXlf6HxZiYodGgjahKAdGxx34H9XyToVzOLdg3w==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "upath": "^2.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/project": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.4.3.tgz", - "integrity": "sha512-j2EeuwdbHsL++jy0s2ShDbdOPirPOL/FNMRf7Qtwl4pEWoOiSYmv/LnIt2pV7cwww9Lx8Y682/7CQwlXdgrrMw==", - "dev": true, - "requires": { - "@lerna/package": "5.4.3", - "@lerna/validation-error": "5.4.3", - "cosmiconfig": "^7.0.0", - "dedent": "^0.7.0", - "dot-prop": "^6.0.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.2", - "load-json-file": "^6.2.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "resolve-from": "^5.0.0", - "write-json-file": "^4.3.0" - } - }, - "@lerna/prompt": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.4.3.tgz", - "integrity": "sha512-VqrTgnbm1H24aYacXmZ2z7atHO6W4NamvwHroGRFqiM34dCLQh8S22X5mNnb4nX5lgfb+doqcxBtOi91vqpJ2g==", - "dev": true, - "requires": { - "inquirer": "^8.2.4", - "npmlog": "^6.0.2" - } - }, - "@lerna/publish": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.4.3.tgz", - "integrity": "sha512-SYziRvRwahzbM0A4T63FfQsk2i33cIauKXlJz6t3GQZvVzUFb0gD/baVas2V7Fs/Ty1oCqtmDKB/ABTznWYwGg==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.4.3", - "@lerna/child-process": "5.4.3", - "@lerna/collect-updates": "5.4.3", - "@lerna/command": "5.4.3", - "@lerna/describe-ref": "5.4.3", - "@lerna/log-packed": "5.4.3", - "@lerna/npm-conf": "5.4.3", - "@lerna/npm-dist-tag": "5.4.3", - "@lerna/npm-publish": "5.4.3", - "@lerna/otplease": "5.4.3", - "@lerna/output": "5.4.3", - "@lerna/pack-directory": "5.4.3", - "@lerna/prerelease-id-from-version": "5.4.3", - "@lerna/prompt": "5.4.3", - "@lerna/pulse-till-done": "5.4.3", - "@lerna/run-lifecycle": "5.4.3", - "@lerna/run-topologically": "5.4.3", - "@lerna/validation-error": "5.4.3", - "@lerna/version": "5.4.3", - "fs-extra": "^9.1.0", - "libnpmaccess": "^6.0.3", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/pulse-till-done": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.4.3.tgz", - "integrity": "sha512-Twy0UmVtyFzC+sLDnuY0u37Xu17WAP7ysQ7riaLx9KhO0M9MZvoY+kDF/hg0K204tZi0dr6R5eLGEUd+Xkg9Rw==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/query-graph": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.4.3.tgz", - "integrity": "sha512-eiRsEPg+t2tN9VWXSAj2y0zEphPrOz6DdYw/5ntVFDecIfoANxGKcCkOTqb3PnaC8BojI64N3Ju+i41jcO0mLw==", - "dev": true, - "requires": { - "@lerna/package-graph": "5.4.3" - } - }, - "@lerna/resolve-symlink": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.4.3.tgz", - "integrity": "sha512-BzqinKmTny70KgSBAaVgdLHaVR3WXRVk5EDbQHB73qg4dHiyYrzvDBqkaKzv1K1th8E4LdQQXf5LiNEbfU/1Bg==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "read-cmd-shim": "^3.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/rimraf-dir": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.4.3.tgz", - "integrity": "sha512-gBraUVczKk4Jik1+qCj4jtQ53l1zmWmMoH7A11ifYI60Dg7Mc6iQcIZOIj6siD5TSOtSCy7qePu3VyXBOIquvQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.4.3", - "npmlog": "^6.0.2", - "path-exists": "^4.0.0", - "rimraf": "^3.0.2" - }, - "dependencies": { - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "@lerna/run": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.4.3.tgz", - "integrity": "sha512-PyHOYCsuJ+5r9ymjtwbQCbMMebVhaZ7Xy4jNpL9kqIvmdxe1S5QTP6Vyc6+RAvUtx0upP++0MFFA8CbZ1ZwOcw==", - "dev": true, - "requires": { - "@lerna/command": "5.4.3", - "@lerna/filter-options": "5.4.3", - "@lerna/npm-run-script": "5.4.3", - "@lerna/output": "5.4.3", - "@lerna/profiler": "5.4.3", - "@lerna/run-topologically": "5.4.3", - "@lerna/timer": "5.4.3", - "@lerna/validation-error": "5.4.3", - "p-map": "^4.0.0" - } - }, - "@lerna/run-lifecycle": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.4.3.tgz", - "integrity": "sha512-XKUfELNjkR6EUg+Xh92s1etjNvCbTBw20QMXDsyGSipHcLr7huXjC0D2/4/+j8/N5sz/rg+JufQfc1ldtpOU0A==", - "dev": true, - "requires": { - "@lerna/npm-conf": "5.4.3", - "@npmcli/run-script": "^4.1.7", - "npmlog": "^6.0.2", - "p-queue": "^6.6.2" - } - }, - "@lerna/run-topologically": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.4.3.tgz", - "integrity": "sha512-9bT8mJ0RICIk16l8L9jRRqSXGSiLEKUd50DLz5Tv0EdOKD+prwffAivCpVMYF9tdD5UaQzDAK/VzFdS5FEzPQg==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.4.3", - "p-queue": "^6.6.2" - } - }, - "@lerna/symlink-binary": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.4.3.tgz", - "integrity": "sha512-iXBijyb1+NiOeifnRsbicSju6/FGtv6hvNny2lbjyr0EJ8jMz6JaoQ6eep9yXhgaNRJND1Pw9JBiCv6EhhcyCw==", - "dev": true, - "requires": { - "@lerna/create-symlink": "5.4.3", - "@lerna/package": "5.4.3", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/symlink-dependencies": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.4.3.tgz", - "integrity": "sha512-9fK3fIl6wyihyfKhDUquiAx8JoMjctBJ7zhLjrgOon5Ua2fyc+mVp9fTWsjHtv7IaC/TeP9oA4/IcBtdr2xieg==", - "dev": true, - "requires": { - "@lerna/create-symlink": "5.4.3", - "@lerna/resolve-symlink": "5.4.3", - "@lerna/symlink-binary": "5.4.3", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@lerna/temp-write": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.4.3.tgz", - "integrity": "sha512-HgAVNmKfeRKm4QPFGFfmzVC/lA2jv5QpMXPPDahoBEI6BhYtMmHiUWQan6dfsCoSf65xDd+9NTESya9AOSbN2w==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "is-stream": "^2.0.0", - "make-dir": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@lerna/timer": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.4.3.tgz", - "integrity": "sha512-0NwrCxug6pmSAuPaAHNr5VRGw7+nqikoIpwx6RViJiOD+UYFf3k955fngtSX2JhETR/7it9ncgpbaLvlxusx9g==", - "dev": true - }, - "@lerna/validation-error": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.4.3.tgz", - "integrity": "sha512-edf9vbQaDViffhHqL/wHdGs83RV7uJ4N5E3VEpjXefWIUfgmw9wYjkX338WYUh/XqDYbSV6C1M8A24FT3/0uzw==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/version": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.4.3.tgz", - "integrity": "sha512-a6Q+o1fZbOg/GVG8QtvfyOpX0sZ38bbI9hSJU5YMf99YKdyzp80dDDav+IGMxIaZSj08HJ1pPyXOLR27I8fTUQ==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.4.3", - "@lerna/child-process": "5.4.3", - "@lerna/collect-updates": "5.4.3", - "@lerna/command": "5.4.3", - "@lerna/conventional-commits": "5.4.3", - "@lerna/github-client": "5.4.3", - "@lerna/gitlab-client": "5.4.3", - "@lerna/output": "5.4.3", - "@lerna/prerelease-id-from-version": "5.4.3", - "@lerna/prompt": "5.4.3", - "@lerna/run-lifecycle": "5.4.3", - "@lerna/run-topologically": "5.4.3", - "@lerna/temp-write": "5.4.3", - "@lerna/validation-error": "5.4.3", - "chalk": "^4.1.0", - "dedent": "^0.7.0", - "load-json-file": "^6.2.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "p-reduce": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4", - "slash": "^3.0.0", - "write-json-file": "^4.3.0" - } - }, - "@lerna/write-log-file": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.4.3.tgz", - "integrity": "sha512-S2kctFhsO4mMbR52tW9VjYrGWUMYO5YIjprg8B7vQSwYvWOOJfqOKy/A+P/U5zXuCSAbDDGssyS+CCM36MFEQw==", - "dev": true, - "requires": { - "npmlog": "^6.0.2", - "write-file-atomic": "^4.0.1" - }, - "dependencies": { - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - } - } - }, - "@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", - "dev": true - }, - "@noble/secp256k1": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/arborist": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz", - "integrity": "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==", - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.0", - "cacache": "^16.0.6", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", - "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@npmcli/git": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", - "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - } - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/map-workspaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", - "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", - "dev": true, - "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@npmcli/metavuln-calculator": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", - "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", - "dev": true, - "requires": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/name-from-folder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", - "dev": true - }, - "@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", - "dev": true - }, - "@npmcli/package-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", - "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1" - } - }, - "@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", - "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - } - }, - "@nrwl/cli": { - "version": "14.8.2", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.8.2.tgz", - "integrity": "sha512-I+oblryFkZJYk9TMsBWNdN0SV7OjsiD80gD1WjA1KXEQiFVfopYgwErBrxoenodncXrMFRCk/QR9U5F+23+Vow==", - "dev": true, - "requires": { - "nx": "14.8.2" - } - }, - "@nrwl/tao": { - "version": "14.8.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.8.2.tgz", - "integrity": "sha512-a4+O307YZJf1H6CDQFGs4DoUvl7xUFSJo2rNHoR9jDlWU+Ug3n0iivX7Fih6Ui0gX4ocEpRwzNMmJhEmEq1BYw==", - "dev": true, - "requires": { - "nx": "14.8.2" - } - }, - "@octokit/auth-token": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.1.tgz", - "integrity": "sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA==", - "dev": true, - "requires": { - "@octokit/types": "^7.0.0" - } - }, - "@octokit/core": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.5.tgz", - "integrity": "sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA==", - "dev": true, - "requires": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^7.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.1.tgz", - "integrity": "sha512-/wTXAJwt0HzJ2IeE4kQXO+mBScfzyCkI0hMtkIaqyXd9zg76OpOfNQfHL9FlaxAV2RsNiOXZibVWloy8EexENg==", - "dev": true, - "requires": { - "@octokit/types": "^7.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } - } - }, - "@octokit/graphql": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.1.tgz", - "integrity": "sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA==", - "dev": true, - "requires": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^7.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.4.0.tgz", - "integrity": "sha512-2mVzW0X1+HDO3jF80/+QFZNzJiTefELKbhMu6yaBYbp/1gSMkVDm4rT472gJljTokWUlXaaE63m7WrWENhMDLw==", - "dev": true - }, - "@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.1.0.tgz", - "integrity": "sha512-2O5K5fpajYG5g62wjzHR7/cWYaCA88CextAW3vFP+yoIHD0KEdlVMHfM5/i5LyV+JMmqiYW7w5qfg46FR+McNw==", - "dev": true, - "requires": { - "@octokit/types": "^7.1.1" - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.3.0.tgz", - "integrity": "sha512-qEu2wn6E7hqluZwIEUnDxWROvKjov3zMIAi4H4d7cmKWNMeBprEXZzJe8pE5eStUYC1ysGhD0B7L6IeG1Rfb+g==", - "dev": true, - "requires": { - "@octokit/types": "^7.0.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/request": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.1.tgz", - "integrity": "sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ==", - "dev": true, - "requires": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^7.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } - } - }, - "@octokit/request-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.1.tgz", - "integrity": "sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ==", - "dev": true, - "requires": { - "@octokit/types": "^7.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.4.tgz", - "integrity": "sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA==", - "dev": true, - "requires": { - "@octokit/core": "^4.0.0", - "@octokit/plugin-paginate-rest": "^4.0.0", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0" - } - }, - "@octokit/types": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-7.1.1.tgz", - "integrity": "sha512-Dx6cNTORyVaKY0Yeb9MbHksk79L8GXsihbG6PtWqTpkyA2TY1qBWE26EQXVG3dHwY9Femdd/WEeRUEiD0+H3TQ==", - "dev": true, - "requires": { - "@octokit/openapi-types": "^13.4.0" - } - }, - "@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", - "dev": true, - "requires": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - } - }, - "@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "dev": true - }, - "@scure/bip32": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", - "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", - "dev": true, - "requires": { - "@noble/hashes": "~1.1.1", - "@noble/secp256k1": "~1.6.0", - "@scure/base": "~1.1.0" - } - }, - "@scure/bip39": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", - "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", - "dev": true, - "requires": { - "@noble/hashes": "~1.1.1", - "@scure/base": "~1.1.0" - } - }, - "@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "requires": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true - }, - "@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sinclair/typebox": { - "version": "0.24.28", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.28.tgz", - "integrity": "sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow==", - "dev": true - }, - "@solidity-parser/parser": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", - "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", - "dev": true, - "requires": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==", - "dev": true - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "28.1.8", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz", - "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==", - "dev": true, - "requires": { - "expect": "^28.0.0", - "pretty-format": "^28.0.0" - } - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", - "dev": true - }, - "@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dev": true, - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true - }, - "@types/node": { - "version": "18.7.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", - "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.11", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.11.tgz", - "integrity": "sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "@yarnpkg/parsers": { - "version": "3.0.0-rc.22", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.22.tgz", - "integrity": "sha512-GAWDjXduYBUVmOzlj3X0OwTQ1BV4ZeDdgw8yXST3K0lB95drWEGxa1at0v7BmHDyK2y1F1IJufc8N4yrcuXjWg==", - "dev": true, - "requires": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true - }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "requires": { - "async": "^2.4.0" - } - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true - }, - "bin-links": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.3.tgz", - "integrity": "sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==", - "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - } - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, - "byte-size": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", - "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", - "dev": true - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", - "dev": true - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } - } - }, - "chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "requires": { - "check-error": "^1.0.2" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", - "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", - "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dev": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - }, - "dependencies": { - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", - "dev": true, - "requires": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - } - } - }, - "conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true - }, - "conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", - "dev": true, - "requires": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "requires": { - "JSONStream": "^1.0.4", - "is-text-path": "^1.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", - "dev": true, - "requires": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - } - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "core-js-pure": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.0.tgz", - "integrity": "sha512-IeHpLwk3uoci37yoI2Laty59+YqH9x5uR65/yiA0ARAJrTrN4YU0rmauLWfvqOuk77SlNJXj2rM6oT/dBD87+A==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "dev": true - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - } - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - } - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true - }, - "dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "ethereum-cryptography": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", - "dev": true, - "requires": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", - "dev": true, - "requires": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - } - } - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@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" - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", - "dev": true, - "requires": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } - } - }, - "get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", - "dev": true, - "requires": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", - "dev": true, - "requires": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } - } - }, - "git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", - "dev": true, - "requires": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "git-up": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-6.0.0.tgz", - "integrity": "sha512-6RUFSNd1c/D0xtGnyWN2sxza2bZtZ/EmI9448n6rCZruFwV/ezeEn2fJP7XnUQGwf0RAtd/mmUCbtH6JPYA2SA==", - "dev": true, - "requires": { - "is-ssh": "^1.4.0", - "parse-url": "^7.0.2" - } - }, - "git-url-parse": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-12.0.0.tgz", - "integrity": "sha512-I6LMWsxV87vysX1WfsoglXsXg6GjQRKq7+Dgiseo+h0skmp5Hp2rzmcEIRQot9CPA+uzU7x1x7jZdqvTFGnB+Q==", - "dev": true, - "requires": { - "git-up": "^6.0.0" - } - }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", - "dev": true, - "requires": { - "ini": "^1.3.2" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "dependencies": { - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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" - } - } - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "hardhat": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.10.2.tgz", - "integrity": "sha512-L/KvDDT/MA6332uAtYTqdcHoSABljw4pPjHQe5SHdIJ+xKfaSc6vDKw03CmrQ5Xup0gHs8XnVSBpZo1AbbIW7g==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/blockchain": "^5.5.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/tx": "^3.5.1", - "@ethereumjs/vm": "^5.9.0", - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@sentry/node": "^5.18.1", - "@solidity-parser/parser": "^0.14.2", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^7.1.4", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "lodash": "^4.17.11", - "merkle-patricia-tree": "^4.2.4", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "slash": "^3.0.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "true-case-path": "^2.2.1", - "tsort": "0.0.1", - "undici": "^5.4.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "init-package-json": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz", - "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", - "dev": true, - "requires": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", - "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "requires": { - "fp-ts": "^1.0.0" - } - }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - }, - "dependencies": { - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - } - } - }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "dev": true - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, - "requires": { - "protocols": "^2.0.1" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true - }, - "jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-stringify-nice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true - }, - "just-diff": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.1.1.tgz", - "integrity": "sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ==", - "dev": true - }, - "just-diff-apply": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.4.1.tgz", - "integrity": "sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g==", - "dev": true - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - } - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "lerna": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.4.3.tgz", - "integrity": "sha512-PypijMk4Jii8DoWGRLiHhBUaqpjXAmrwbs6uUZgyb07JrqCrXW3nhAyzdZE5S0rk1/sRzjd10fYmntOgNFfKBw==", - "dev": true, - "requires": { - "@lerna/add": "5.4.3", - "@lerna/bootstrap": "5.4.3", - "@lerna/changed": "5.4.3", - "@lerna/clean": "5.4.3", - "@lerna/cli": "5.4.3", - "@lerna/create": "5.4.3", - "@lerna/diff": "5.4.3", - "@lerna/exec": "5.4.3", - "@lerna/import": "5.4.3", - "@lerna/info": "5.4.3", - "@lerna/init": "5.4.3", - "@lerna/link": "5.4.3", - "@lerna/list": "5.4.3", - "@lerna/publish": "5.4.3", - "@lerna/run": "5.4.3", - "@lerna/version": "5.4.3", - "import-local": "^3.0.2", - "npmlog": "^6.0.2", - "nx": ">=14.5.4 < 16" - } - }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "requires": { - "buffer": "^5.6.0" - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - } - }, - "level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dev": true, - "requires": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - } - }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dev": true, - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - }, - "level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "libnpmaccess": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.3.tgz", - "integrity": "sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg==", - "dev": true, - "requires": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", - "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "libnpmpublish": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.4.tgz", - "integrity": "sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg==", - "dev": true, - "requires": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", - "ssri": "^9.0.0" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", - "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", - "requires": { - "get-func-name": "^2.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", - "dev": true - } - } - }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", - "dev": true - } - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true - }, - "meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "requires": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "dependencies": { - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - } - } - }, - "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mkdirp-infer-owner": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - } - }, - "mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "requires": { - "obliterator": "^2.0.0" - } - }, - "mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - } - } - }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - } - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, - "node-gyp": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz", - "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "dev": true - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "dependencies": { - "hosted-git-info": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", - "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-package-arg": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", - "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", - "dev": true, - "requires": { - "hosted-git-info": "^3.0.6", - "semver": "^7.0.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", - "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "npm-bundled": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", - "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^2.0.0" - } - }, - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } - } - }, - "npm-pick-manifest": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", - "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", - "dev": true, - "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", - "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", - "dev": true - }, - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "npm-registry-fetch": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", - "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", - "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", - "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "nx": { - "version": "14.8.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.8.2.tgz", - "integrity": "sha512-pPijBoeybsIlCD8FMH8WTns+pcIL+0ZOh/+otUX2LfVsi+ppH33GUxO9QVLPrLcyGaoHhwil4hYBxPIQ7Z1r2g==", - "dev": true, - "requires": { - "@nrwl/cli": "14.8.2", - "@nrwl/tao": "14.8.2", - "@parcel/watcher": "2.0.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "^3.0.0-rc.18", - "@zkochan/js-yaml": "0.0.6", - "chalk": "4.1.0", - "chokidar": "^3.5.1", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", - "enquirer": "~2.3.6", - "fast-glob": "3.2.7", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^10.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "js-yaml": "4.1.0", - "jsonc-parser": "3.2.0", - "minimatch": "3.0.5", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.3.4", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^3.9.0", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.4.0", - "yargs-parser": "21.0.1" - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-map-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", - "dev": true - }, - "p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true - }, - "p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - } - }, - "p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", - "dev": true, - "requires": { - "p-reduce": "^2.0.0" - } - }, - "pacote": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", - "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", - "dev": true, - "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, - "dependencies": { - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "hosted-git-info": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz", - "integrity": "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "lru-cache": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", - "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - } - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-conflict-json": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", - "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@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" - } - }, - "parse-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-5.0.0.tgz", - "integrity": "sha512-qOpH55/+ZJ4jUu/oLO+ifUKjFPNZGfnPJtzvGzKN/4oLMil5m9OH4VpOj6++9/ytJcfks4kzH2hhi87GL/OU9A==", - "dev": true, - "requires": { - "protocols": "^2.0.0" - } - }, - "parse-url": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-7.0.2.tgz", - "integrity": "sha512-PqO4Z0eCiQ08Wj6QQmrmp5YTTxpYfONdOEamrtvK63AmzXpcavIVQubGHxOEwiIoDZFb8uDOoQFS0NCcjqIYQg==", - "dev": true, - "requires": { - "is-ssh": "^1.4.0", - "normalize-url": "^6.1.0", - "parse-path": "^5.0.0", - "protocols": "^2.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "dev": true - }, - "promise-call-limit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", - "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", - "dev": true, - "requires": { - "read": "1" - } - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true - }, - "protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz", - "integrity": "sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==", - "dev": true - }, - "read-package-json": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", - "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dev": true, - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true - }, - "rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "dev": true, - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "dependencies": { - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - } - } - }, - "semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", - "dev": true - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "socks": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", - "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", - "dev": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - } - } - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "requires": { - "readable-stream": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true - }, - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "treeverse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", - "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", - "dev": true - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true - }, - "true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", - "dev": true - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", - "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==" - }, - "uglify-js": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.0.tgz", - "integrity": "sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==", - "dev": true, - "optional": true - }, - "undici": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.10.0.tgz", - "integrity": "sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g==", - "dev": true - }, - "unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "requires": { - "unique-slug": "^3.0.0" - } - }, - "unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "walk-up-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", - "dev": true - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "write-json-file": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", - "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", - "dev": true, - "requires": { - "detect-indent": "^6.0.0", - "graceful-fs": "^4.1.15", - "is-plain-obj": "^2.0.0", - "make-dir": "^3.0.0", - "sort-keys": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", - "dev": true, - "requires": { - "is-plain-obj": "^2.0.0" - } - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - } - } - }, - "write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", - "dev": true, - "requires": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, - "dependencies": { - "type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true - }, - "write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "requires": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - } - } - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", - "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", - "dev": true, - "requires": { - "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.0.0" - }, - "dependencies": { - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - } - } - }, - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/packages/core-types/src/contracts/EntryPointContract.ts b/packages/core-types/src/contracts/EntryPointContract.ts index cf3e96079..6af1f9fc5 100644 --- a/packages/core-types/src/contracts/EntryPointContract.ts +++ b/packages/core-types/src/contracts/EntryPointContract.ts @@ -1,10 +1,10 @@ import { UserOperation } from '../types' -import { TransactionResult } from '../transaction.types' +import { ITransactionResult } from '../transaction.types' import { Contract } from '@ethersproject/contracts' export interface EntryPointContract { getContract(): Contract - handleOps(userOperations: UserOperation[], beneficiary: string): Promise - simulateValidation(userOperation: UserOperation, offChainSigCheck: boolean): Promise + handleOps(userOperations: UserOperation[], beneficiary: string): Promise + simulateValidation(userOperation: UserOperation, offChainSigCheck: boolean): Promise getRequestId(userOperation: UserOperation): Promise } diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index 3a600dd9a..ce899b25b 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -1,4 +1,4 @@ -import { WalletTransaction, ExecTransaction, FeeRefundV1_0_0, FeeRefundV1_0_1 } from '../transaction.types' +import { IWalletTransaction, ExecTransaction, IFeeRefundV1_0_0, IFeeRefundV1_0_1 } from '../transaction.types' import { SmartAccountVersion } from '../types' import { BigNumber } from '@ethersproject/bignumber' import { Interface } from '@ethersproject/abi' @@ -14,17 +14,17 @@ export interface SmartWalletContract { getOwner(): Promise getVersion(): Promise getNonce(batchId: number): Promise - getTransactionHash(smartAccountTrxData: WalletTransaction): Promise + getTransactionHash(smartAccountTrxData: IWalletTransaction): Promise execTransaction( transaction: ExecTransaction, batchId: number, - feeRefundData: FeeRefundV1_0_0, + feeRefundData: IFeeRefundV1_0_0, signatures: string ): any execTransaction( transaction: ExecTransaction, batchId: number, - feeRefundData: FeeRefundV1_0_1, + feeRefundData: IFeeRefundV1_0_1, signatures: string ): any encode(methodName: string, params: any): string diff --git a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts index 8f26205f9..7cf0c06de 100644 --- a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts +++ b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts @@ -1,4 +1,4 @@ -import { TransactionResult } from '../transaction.types' +import { ITransactionResult } from '../transaction.types' import { Interface } from '@ethersproject/abi' import { Contract } from '@ethersproject/contracts' export interface SmartWalletFactoryContract { @@ -11,7 +11,7 @@ export interface SmartWalletFactoryContract { entryPoint: string, handler: string, index: number - ): Promise - deployWallet(owner: string, entryPoint: string, handler: string): Promise + ): Promise + deployWallet(owner: string, entryPoint: string, handler: string): Promise getAddressForCounterfactualWallet(owner: string, index: number): Promise } diff --git a/packages/core-types/src/ethereumLibs/EthAdapter.ts b/packages/core-types/src/evm-manager/EvmNetworkManager.ts similarity index 87% rename from packages/core-types/src/ethereumLibs/EthAdapter.ts rename to packages/core-types/src/evm-manager/EvmNetworkManager.ts index 4a6ed3726..897cc3d9e 100644 --- a/packages/core-types/src/ethereumLibs/EthAdapter.ts +++ b/packages/core-types/src/evm-manager/EvmNetworkManager.ts @@ -5,7 +5,7 @@ import { MultiSendCallOnlyContract } from '../contracts/MultiSendCallOnlyContrac import { SmartWalletFactoryContract } from '../contracts/SmartWalletFactoryContract' import { Eip3770Address, SmartAccountVersion } from '../types' -export interface EthAdapterTransaction { +export interface IEvmNetworkManagerTransaction { to: string from: string data: string @@ -14,7 +14,7 @@ export interface EthAdapterTransaction { gasLimit?: number } -export interface EthAdapter { +export interface IEvmNetworkManager { getEip3770Address(fullAddress: string): Promise getBalance(address: string): Promise getChainId(): Promise @@ -37,8 +37,8 @@ export interface EthAdapter { getSignerAddress(): Promise signMessage(message: string): Promise estimateGas( - transaction: EthAdapterTransaction, + transaction: IEvmNetworkManagerTransaction, callback?: (error: Error, gas: number) => void ): Promise - call(transaction: EthAdapterTransaction): Promise + call(transaction: IEvmNetworkManagerTransaction): Promise } diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts index 2e4411586..b1bc3a815 100644 --- a/packages/core-types/src/index.ts +++ b/packages/core-types/src/index.ts @@ -3,7 +3,7 @@ export * from './contracts/MultiSendContract' export * from './contracts/MultiSendCallOnlyContract' export * from './contracts/SmartWalletFactoryContract' export * from './contracts/EntryPointContract' -export * from './ethereumLibs/EthAdapter' +export * from './evm-manager/EvmNetworkManager' export * from './types' export * from './chains.types' export * from './transaction.types' diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index d14f0c325..85d50b500 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -1,7 +1,7 @@ // Smart Account Detail Param Types import { ChainId } from './chains.types' -import { WalletTransaction, Transaction } from './transaction.types' +import { IWalletTransaction, Transaction } from './transaction.types' import { FeeQuote } from './types' import { SmartWalletFactoryContract } from './contracts/SmartWalletFactoryContract' import { MultiSendContract } from './contracts/MultiSendContract' @@ -11,7 +11,7 @@ import { GasLimit } from './transaction.types' import { JsonRpcSigner } from '@ethersproject/providers' -export interface SmartAccountConfig { +export type SmartAccountConfig = { owner: string version: string activeNetworkId: ChainId // same @@ -20,7 +20,7 @@ export interface SmartAccountConfig { relayer_url: string } -export interface SmartAccountContext { +export type SmartAccountContext = { baseWallet: SmartWalletContract walletFactory: SmartWalletFactoryContract multiSend: MultiSendContract @@ -36,7 +36,7 @@ export type EstimateSmartAccountDeploymentDto = { fallbackHandlerAddress: string } -export interface SmartAccountState { +export type SmartAccountState = { address: string // multichain (EVM) owner: string // multichain (EVM) isDeployed: boolean // chain specific @@ -52,13 +52,13 @@ export type AddressForCounterFactualWalletDto = { export type SignTransactionDto = { version: string - tx: WalletTransaction + tx: IWalletTransaction chainId: ChainId signer: JsonRpcSigner } export type SendTransactionDto = { - tx: WalletTransaction + tx: IWalletTransaction batchId?: number chainId?: ChainId gasLimit?: GasLimit diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index cfd14a9cd..b295c48d8 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -4,7 +4,7 @@ import { SmartAccountContext, SmartAccountState } from './smart-account.types' import { PromiEvent, TransactionReceipt } from 'web3-core/types' import { ContractTransaction } from '@ethersproject/contracts' -export interface RawTransactionType { +export type RawTransactionType = { from?: string gasPrice?: string | BigNumber maxFeePerGas?: string | BigNumber @@ -19,7 +19,7 @@ export interface RawTransactionType { type?: number } -export interface Transaction { +export type Transaction = { to: string value?: BigNumberish data?: string @@ -28,12 +28,12 @@ export interface Transaction { // delegateCall?: boolean // revertOnError?: boolean } -export interface SignedTransaction { +export type SignedTransaction = { rawTx: RawTransactionType - tx: WalletTransaction + tx: IWalletTransaction } -export interface ExecTransaction { +export type ExecTransaction = { to: string value: BigNumberish data: string @@ -41,42 +41,42 @@ export interface ExecTransaction { targetTxGas: string | number } -export interface SmartAccountSignature { +export type SmartAccountSignature = { signer: string data: string } -export interface FeeRefundV1_0_0 { +export interface IFeeRefundV1_0_0 { // gasUsed: string | number baseGas: string | number gasPrice: string | number gasToken: string refundReceiver: string } -export interface FeeRefundV1_0_1 extends FeeRefundV1_0_0{ +export interface IFeeRefundV1_0_1 extends IFeeRefundV1_0_0{ tokenGasPriceFactor: string | number } // extended from FeeRefund as we need this for handlePayment Estimate -export interface FeeRefundHandlePayment extends FeeRefundV1_0_1 { +export interface IFeeRefundHandlePayment extends IFeeRefundV1_0_1 { gasUsed: string | number } -export interface MetaTransactionData { +export type MetaTransactionData = { readonly to: string readonly value: BigNumberish readonly data: string readonly operation?: OperationType } -export interface MetaTransaction { +export interface IMetaTransaction { to: string value: BigNumberish data: string operation: number } -export interface WalletTransaction extends MetaTransaction { +export interface IWalletTransaction extends IMetaTransaction { targetTxGas: string | number baseGas: string | number gasPrice: string | number @@ -86,43 +86,43 @@ export interface WalletTransaction extends MetaTransaction { nonce: number } -export interface Signature { +export type Signature = { readonly signer: string readonly data: string staticPart(): string dynamicPart(): string } -export interface TransactionOptions { +export type TransactionOptions = { from?: string gas?: number | string gasLimit?: number | string gasPrice?: number | string } -export interface BaseTransactionResult { +export interface IBaseTransactionResult { hash: string } -export interface TransactionResult extends BaseTransactionResult { +export interface ITransactionResult extends IBaseTransactionResult { promiEvent?: PromiEvent transactionResponse?: ContractTransaction options?: TransactionOptions } -export interface RelayTransaction { +export type RelayTransaction = { signedTx: SignedTransaction config: SmartAccountState context: SmartAccountContext gasLimit?: GasLimit } -export interface GasLimit { +export type GasLimit = { hex: string type: string } -export interface DeployWallet { +export type DeployWallet = { config: SmartAccountState context: SmartAccountContext index: number diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index b41921806..c36b3ca4b 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -7,12 +7,12 @@ export enum OperationType { } -export interface Eip3770Address { +export type Eip3770Address = { prefix: string address: string } -export interface RelayResponse { +export type RelayResponse = { code?: number message?: string transactionId?: string @@ -20,7 +20,7 @@ export interface RelayResponse { error?: string connectionUrl?: string } -export interface UserOperation { +export type UserOperation = { sender: string nonce: number initCode: string @@ -45,11 +45,11 @@ export const GAS_USAGE_OFFSET = 4928 + 2360 export const FAKE_SIGNATURE = "0x39f5032f1cd30005aa1e35f04394cabfe7de3b6ae6d95b27edd8556064c287bf61f321fead0cf48ca4405d497cc8fc47fc7ff0b7f5c45baa14090a44f2307d8230" -export interface RestRelayerOptions { +export type RestRelayerOptions = { url: string } -export interface TokenData { +export type TokenData = { tokenGasPrice: number // review offset?: number // review symbol: string @@ -60,7 +60,7 @@ export interface TokenData { refundReceiver?: string } -export interface FeeQuote { +export type FeeQuote = { symbol: string, address: string, decimal: number, @@ -71,14 +71,14 @@ export interface FeeQuote { refundReceiver?: string; } -export interface FeeOptionsResponse { +export type FeeOptionsResponse = { msg: string data: { chainId: number response: Array } } -export interface FeeOption { +export type FeeOption = { feeToken: string tokenGasPrice: number | string //review offset: number | string // review diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index 36b7a15fe..2396af4c6 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -4,8 +4,8 @@ import { BigNumber } from '@ethersproject/bignumber' import { Provider, JsonRpcProvider } from '@ethersproject/providers' import { Eip3770Address, - EthAdapter, - EthAdapterTransaction, + IEvmNetworkManager, + IEvmNetworkManagerTransaction, SmartAccountVersion, SmartWalletContract } from '@biconomy-sdk/core-types' @@ -28,7 +28,7 @@ export interface EthersAdapterConfig { provider: JsonRpcProvider } -class EthersAdapter implements EthAdapter { +class EvmNetworkManager implements IEvmNetworkManager { #ethers: Ethers #signer: Signer #provider: JsonRpcProvider @@ -121,13 +121,13 @@ class EthersAdapter implements EthAdapter { } // Review - async estimateGas(transaction: EthAdapterTransaction): Promise { + async estimateGas(transaction: IEvmNetworkManagerTransaction): Promise { return (await this.#provider.estimateGas(transaction)).toNumber() } - call(transaction: EthAdapterTransaction): Promise { + call(transaction: IEvmNetworkManagerTransaction): Promise { return this.#provider.call(transaction) } } -export default EthersAdapter +export default EvmNetworkManager diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts index cdba18c2d..07838e9d1 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts @@ -1,4 +1,4 @@ -import { EntryPointContract, UserOperation, TransactionResult } from '@biconomy-sdk/core-types' +import { EntryPointContract, UserOperation, ITransactionResult } from '@biconomy-sdk/core-types' import { EntryPointContractV100 as EntryPointContract_TypeChain, EntryPointContractV100Interface @@ -17,7 +17,7 @@ class EntryPointEthersContract implements EntryPointContract { return this.contract } - async simulateValidation(userOperation: UserOperation, offChainSigCheck: boolean): Promise { + async simulateValidation(userOperation: UserOperation, offChainSigCheck: boolean): Promise { const resultSet = await this.contract.simulateValidation(userOperation, offChainSigCheck) return toTxResult(resultSet) } @@ -29,7 +29,7 @@ class EntryPointEthersContract implements EntryPointContract { async handleOps( userOperations: UserOperation[], beneficiary: string - ): Promise { + ): Promise { const resultSet = await this.contract.handleOps(userOperations, beneficiary) return toTxResult(resultSet) } diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts index d194c798d..8e2f033e3 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts @@ -1,4 +1,4 @@ -import { EntryPointContract, UserOperation, TransactionResult } from '@biconomy-sdk/core-types' +import { EntryPointContract, UserOperation, ITransactionResult } from '@biconomy-sdk/core-types' import { EntryPointContractV101 as EntryPointContract_TypeChain, EntryPointContractV101Interface @@ -17,7 +17,7 @@ class EntryPointEthersContract implements EntryPointContract { return this.contract } - async simulateValidation(userOperation: UserOperation, offChainSigCheck: boolean): Promise { + async simulateValidation(userOperation: UserOperation, offChainSigCheck: boolean): Promise { const resultSet = await this.contract.simulateValidation(userOperation, offChainSigCheck) return toTxResult(resultSet) } @@ -29,7 +29,7 @@ class EntryPointEthersContract implements EntryPointContract { async handleOps( userOperations: UserOperation[], beneficiary: string - ): Promise { + ): Promise { const resultSet = await this.contract.handleOps(userOperations, beneficiary) return toTxResult(resultSet) } diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts index 212403227..25282f86f 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts @@ -2,16 +2,15 @@ import { BigNumber } from '@ethersproject/bignumber' import { SmartAccountVersion, SmartWalletContract, - WalletTransaction, + IWalletTransaction, ExecTransaction, - FeeRefundV1_0_0, - FeeRefundV1_0_1, - TransactionResult + IFeeRefundV1_0_0, + ITransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' import { SmartWalletContractV100 as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContractV100' import { SmartWalletContractV100Interface } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContractV100' -import { getJsonWalletAddress, Interface } from 'ethers/lib/utils' +import { Interface } from 'ethers/lib/utils' import { Contract } from '@ethersproject/contracts' class SmartWalletContractEthers implements SmartWalletContract { constructor(public contract: SmartWalletContract_TypeChain) {} @@ -43,7 +42,7 @@ class SmartWalletContractEthers implements SmartWalletContract { async getNonce(batchId: number): Promise { return await this.contract.getNonce(batchId) } - async getTransactionHash(smartAccountTrxData: WalletTransaction): Promise { + async getTransactionHash(smartAccountTrxData: IWalletTransaction): Promise { return this.contract.getTransactionHash( smartAccountTrxData.to, smartAccountTrxData.value, @@ -61,9 +60,9 @@ class SmartWalletContractEthers implements SmartWalletContract { async execTransaction( _tx: ExecTransaction, batchId: number, - refundInfo: FeeRefundV1_0_0, + refundInfo: IFeeRefundV1_0_0, signatures: string - ): Promise { + ): Promise { // TODO: estimate GAS before making the transaction const txResponse = await this.contract.execTransaction(_tx, batchId, refundInfo, signatures) return toTxResult(txResponse) diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts index 70d724648..a736985f3 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts @@ -2,11 +2,10 @@ import { BigNumber } from '@ethersproject/bignumber' import { SmartAccountVersion, SmartWalletContract, - WalletTransaction, + IWalletTransaction, ExecTransaction, - FeeRefundV1_0_0, - FeeRefundV1_0_1, - TransactionResult + IFeeRefundV1_0_1, + ITransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' import { SmartWalletContractV101 as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletContractV101' @@ -43,7 +42,7 @@ class SmartWalletContractEthers implements SmartWalletContract { async getNonce(batchId: number): Promise { return await this.contract.getNonce(batchId) } - async getTransactionHash(smartAccountTrxData: WalletTransaction): Promise { + async getTransactionHash(smartAccountTrxData: IWalletTransaction): Promise { return this.contract.getTransactionHash( smartAccountTrxData.to, smartAccountTrxData.value, @@ -62,9 +61,9 @@ class SmartWalletContractEthers implements SmartWalletContract { async execTransaction( _tx: ExecTransaction, batchId: number, - refundInfo: FeeRefundV1_0_1, + refundInfo: IFeeRefundV1_0_1, signatures: string - ): Promise { + ): Promise { // TODO: estimate GAS before making the transaction const txResponse = await this.contract.execTransaction(_tx, batchId, refundInfo, signatures) return toTxResult(txResponse) diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts index 7aa18ac60..d412fad88 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts @@ -1,4 +1,4 @@ -import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' +import { SmartWalletFactoryContract, ITransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' import { SmartWalletFactoryContractV100 as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContractV100' import { Interface } from '@ethersproject/abi' @@ -33,7 +33,7 @@ class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { entryPoint: string, handler: string, index: number - ): Promise { + ): Promise { const resultSet = await this.contract.deployCounterFactualWallet( owner, entryPoint, @@ -47,7 +47,7 @@ class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { owner: string, entryPoint: string, handler: string - ): Promise { + ): Promise { const resultSet = await this.contract.deployWallet(owner, entryPoint, handler) return toTxResult(resultSet) } diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts index eb3122e92..f4ce8f5f0 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts @@ -1,4 +1,4 @@ -import { SmartWalletFactoryContract, TransactionResult } from '@biconomy-sdk/core-types' +import { SmartWalletFactoryContract, ITransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' import { SmartWalletFactoryContractV101 as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletFactoryContractV101' import { Interface } from '@ethersproject/abi' @@ -33,7 +33,7 @@ class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { entryPoint: string, handler: string, index: number - ): Promise { + ): Promise { const resultSet = await this.contract.deployCounterFactualWallet( owner, entryPoint, @@ -47,7 +47,7 @@ class SmartWalletFactoryContractEthers implements SmartWalletFactoryContract { owner: string, entryPoint: string, handler: string - ): Promise { + ): Promise { const resultSet = await this.contract.deployWallet(owner, entryPoint, handler) return toTxResult(resultSet) } diff --git a/packages/ethers-lib/src/index.ts b/packages/ethers-lib/src/index.ts index 237fe0daf..b17459341 100644 --- a/packages/ethers-lib/src/index.ts +++ b/packages/ethers-lib/src/index.ts @@ -1,5 +1,5 @@ import EthersAdapter, { EthersAdapterConfig } from './EthersAdapter' -import { EthersTransactionOptions, EthersTransactionResult } from './types' +import { IEthersTransactionOptions, IEthersTransactionResult } from './types' export default EthersAdapter -export { EthersAdapterConfig, EthersTransactionOptions, EthersTransactionResult } +export { EthersAdapterConfig, IEthersTransactionOptions, IEthersTransactionResult } diff --git a/packages/ethers-lib/src/types.ts b/packages/ethers-lib/src/types.ts index e00725828..6e77f252d 100644 --- a/packages/ethers-lib/src/types.ts +++ b/packages/ethers-lib/src/types.ts @@ -1,13 +1,13 @@ import { ContractTransaction } from '@ethersproject/contracts' -import { BaseTransactionResult } from '@gnosis.pm/safe-core-sdk-types' +import { IBaseTransactionResult } from '@biconomy-sdk/core-types' -export interface EthersTransactionOptions { +export interface IEthersTransactionOptions { from?: string gasLimit?: number | string gasPrice?: number | string } -export interface EthersTransactionResult extends BaseTransactionResult { +export interface IEthersTransactionResult extends IBaseTransactionResult { transactionResponse: ContractTransaction - options?: EthersTransactionOptions + options?: IEthersTransactionOptions } diff --git a/packages/ethers-lib/src/utils/index.ts b/packages/ethers-lib/src/utils/index.ts index e022237a3..6f4e03721 100644 --- a/packages/ethers-lib/src/utils/index.ts +++ b/packages/ethers-lib/src/utils/index.ts @@ -1,5 +1,5 @@ import { ContractTransaction } from '@ethersproject/contracts' -import { EthersTransactionOptions, EthersTransactionResult } from '../types' +import { IEthersTransactionOptions, IEthersTransactionResult } from '../types' export function sameString(str1: string, str2: string): boolean { return str1.toLowerCase() === str2.toLowerCase() @@ -7,8 +7,8 @@ export function sameString(str1: string, str2: string): boolean { export function toTxResult( transactionResponse: ContractTransaction, - options?: EthersTransactionOptions -): EthersTransactionResult { + options?: IEthersTransactionOptions +): IEthersTransactionResult { return { hash: transactionResponse.hash, options, diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index 0ef56ab1b..10a1f4f54 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -1,5 +1,4 @@ // import { FeeRefund, FeeRefundData, MetaTransactionData } from '@biconomy-sdk/core-types' -import { Signer } from '@ethersproject/abstract-signer' import { EstimateExternalGasDto, EstimateRequiredTxGasDto, @@ -16,7 +15,8 @@ import { BalancesResponse, BalancesDto, UsdBalanceResponse, - EstimateGasResponse + EstimateGasResponse, + TransactionResponse } from './types/NodeClientTypes' interface INodeClient { @@ -65,6 +65,15 @@ interface INodeClient { estimateUndeployedContractGas( estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto ): Promise + + getTransactionByHash( + txHash: string + ): Promise + + getTransactionByAddress( + chainId: number, + address: string + ): Promise } export default INodeClient diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index 0219f488d..72d7c9e7b 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -15,20 +15,18 @@ import { BalancesDto, BalancesResponse, UsdBalanceResponse, - EstimateGasResponse + EstimateGasResponse, + TransactionResponse } from './types/NodeClientTypes' import { getTxServiceBaseUrl } from './utils' import { HttpMethod, sendRequest } from './utils/httpRequests' export interface NodeClientConfig { /** txServiceUrl - Safe Transaction Service URL */ txServiceUrl: string - /** ethAdapter - Ethereum adapter */ - // ethAdapter: EthAdapter } class NodeClient implements INodeClient { #txServiceBaseUrl: string - // #ethAdapter: EthAdapter // Review // Removed ethAdapter @@ -178,6 +176,25 @@ class NodeClient implements INodeClient { body: estimateUndeployedContractGasDto }) } + + getTransactionByAddress( + chainId: number, + address: string + ): Promise{ + return sendRequest({ + url: `${this.#txServiceBaseUrl}/transactions/chainId/${chainId}/address/${address}`, + method: HttpMethod.Get + }) + } + + getTransactionByHash( + txHash: string + ): Promise{ + return sendRequest({ + url: `${this.#txServiceBaseUrl}/transactions/txHash/${txHash}`, + method: HttpMethod.Get + }) + } } export default NodeClient diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index ac0a27862..a275202c0 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -2,8 +2,8 @@ import { ChainId, SmartAccountVersion, MetaTransactionData, - FeeRefundV1_0_0, - FeeRefundV1_0_1 + IFeeRefundV1_0_0, + IFeeRefundV1_0_1 } from '@biconomy-sdk/core-types' export type SmartAccountInfoResponse = { readonly name: string @@ -23,6 +23,26 @@ export type SmartAccountInfoResponse = { } } +export type TransactionResponse = { + symbol: string + tokenAddress: string + scwAddress: string + txHash: string + blockNumber: number + payment: number + gasLimit: number + gasUsage: number + gasPrice: number + chainId: number + fromAddress: string + toAddress: string + amount: number + type: string + txStatus: string + createdAt: number + updatedAt: number +} + export type BalancesDto = { chainId: number eoaAddress: string @@ -44,14 +64,14 @@ export type EstimateHandlePaymentTxGasDto = { chainId: number version: string walletAddress: string - feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_1 + feeRefund: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 } export type EstimateUndeployedContractGasDto = { chainId: number version: string walletAddress: string - feeRefund: FeeRefundV1_0_0 | FeeRefundV1_0_1 + feeRefund: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 transaction: MetaTransactionData signature: string } diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index 1d76c4ff9..a60750810 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -4,7 +4,7 @@ import { Relayer } from '.' import { DeployWallet, - WalletTransaction, + IWalletTransaction, FeeOptionsResponse, RelayTransaction, RelayResponse @@ -73,7 +73,7 @@ export class LocalRelayer implements Relayer { index: 0 } const { to, data } = this.prepareWalletDeploy(prepareWalletDeploy) - const originalTx: WalletTransaction = signedTx.tx + const originalTx: IWalletTransaction = signedTx.tx const txs: MetaTransaction[] = [ { diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 8d2f5f35a..2640e7a57 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -3,18 +3,8 @@ import { Signer as AbstractSigner, ethers } from 'ethers' import { Relayer } from '.' import { - SmartWalletFactoryContract, - SmartWalletContract, - MultiSendContract, - MultiSendCallOnlyContract, - TransactionResult, RelayTransaction, DeployWallet, - SmartAccountContext, - SmartAccountState, - SignedTransaction, - WalletTransaction, - RawTransactionType, RestRelayerOptions, FeeOptionsResponse, RelayResponse diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 4e7fcec5b..bfd9f94fc 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -13,9 +13,9 @@ import { TransactionBatchDto, ExecTransaction, RelayTransaction, - FeeRefundV1_0_0, - FeeRefundV1_0_1, - WalletTransaction, + IFeeRefundV1_0_0, + IFeeRefundV1_0_1, + IWalletTransaction, SmartAccountVersion, SignedTransaction, ChainId, @@ -40,6 +40,7 @@ import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' import TransactionManager, { ContractUtils, smartAccountSignMessage } from '@biconomy-sdk/transactions' import { BalancesDto } from '@biconomy-sdk/node-client' import { + TransactionResponse, BalancesResponse, UsdBalanceResponse, } from '@biconomy-sdk/node-client' @@ -174,6 +175,19 @@ class SmartAccount { ): Promise { return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto) } + + public async getTransactionByAddress( + chainId: number, + address: string ): Promise { + return this.nodeClient.getTransactionByAddress(chainId, address) + } + + public async getTransactionByHash( + txHash: string ): Promise { + return this.nodeClient.getTransactionByHash(txHash) + } + + // return adapter instance to be used for blockchain interactions /** @@ -215,7 +229,7 @@ class SmartAccount { /** * * @notice personal sign is used currently (// @todo Signer should be able to use _typedSignData) - * @param tx WalletTransaction Smart Account Transaction object prepared + * @param tx IWalletTransaction Smart Account Transaction object prepared * @param chainId optional chainId * @returns:string Signature */ @@ -234,7 +248,7 @@ class SmartAccount { // This would be a implementation on user sponsorship provider /** * Prepares encoded wallet transaction, gets signature from the signer and dispatches to the blockchain using relayer - * @param tx WalletTransaction Smart Account Transaction object prepared + * @param tx IWalletTransaction Smart Account Transaction object prepared * @param batchId optional nonce space for parallel processing * @param chainId optional chainId * @returns @@ -262,7 +276,7 @@ class SmartAccount { targetTxGas: tx.targetTxGas } - const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_1 = { + const refundInfo: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 = { baseGas: tx.baseGas, gasPrice: tx.gasPrice, tokenGasPriceFactor: tx.tokenGasPriceFactor, @@ -351,7 +365,7 @@ class SmartAccount { // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions /** - * Prepares compatible WalletTransaction object based on Transaction Request + * Prepares compatible IWalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) * @param refundTransactionDto @@ -359,7 +373,7 @@ class SmartAccount { */ async createRefundTransaction( refundTransactionDto: RefundTransactionDto - ): Promise { + ): Promise { const chainId = this.#smartAccountConfig.activeNetworkId refundTransactionDto.chainId = chainId refundTransactionDto.version = this.DEFAULT_VERSION @@ -368,13 +382,13 @@ class SmartAccount { } /** - * Prepares compatible WalletTransaction object based on Transaction Request + * Prepares compatible IWalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction * @notice This transaction is without fee refund (gasless) * @param transactionDto * @returns */ - async createTransaction(transactionDto: TransactionDto): Promise { + async createTransaction(transactionDto: TransactionDto): Promise { const chainId = this.#smartAccountConfig.activeNetworkId transactionDto.chainId = chainId transactionDto.version = this.DEFAULT_VERSION @@ -383,7 +397,7 @@ class SmartAccount { } /** - * Prepares compatible WalletTransaction object based on Transaction Request + * Prepares compatible IWalletTransaction object based on Transaction Request * @todo Write test case and limit batch size based on test results in scw-contracts * @notice This transaction is without fee refund (gasless) * @param transaction @@ -393,7 +407,7 @@ class SmartAccount { */ async createTransactionBatch( transactionBatchDto: TransactionBatchDto - ): Promise { + ): Promise { const chainId = this.#smartAccountConfig.activeNetworkId transactionBatchDto.chainId = chainId transactionBatchDto.version = this.DEFAULT_VERSION @@ -401,7 +415,7 @@ class SmartAccount { } /** - * Prepares compatible WalletTransaction object based on Transaction Request + * Prepares compatible IWalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) * @param refundTransactionBatchDto @@ -409,7 +423,7 @@ class SmartAccount { */ async createRefundTransactionBatch( refundTransactionBatchDto: RefundTransactionBatchDto - ): Promise { + ): Promise { const chainId = this.#smartAccountConfig.activeNetworkId refundTransactionBatchDto.chainId = chainId refundTransactionBatchDto.version = this.DEFAULT_VERSION diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index f2babc33c..56bd504f9 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -18,12 +18,12 @@ import { getSmartWalletContract } from './utils/FetchContractsInfo' import { ethers } from 'ethers' -import EthersAdapter from '@biconomy-sdk/ethers-lib' +import EvmNetworkManager from '@biconomy-sdk/ethers-lib' import { JsonRpcSigner } from '@ethersproject/providers' import { SmartAccountVersion } from '@biconomy-sdk/core-types' class ContractUtils { - ethAdapter!: { [chainId: number]: EthersAdapter } + ethAdapter!: { [chainId: number]: EvmNetworkManager } smartWalletContract!: { [chainId: number]: { [version: string]: SmartWalletContract } } multiSendContract!: { [chainId: number]: { [version: string]: MultiSendContract } } @@ -58,7 +58,7 @@ class ContractUtils { console.log('chain id ', network.chainId, 'readProvider ', readProvider); // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable - this.ethAdapter[network.chainId] = new EthersAdapter({ + this.ethAdapter[network.chainId] = new EvmNetworkManager({ ethers, signer, provider: readProvider diff --git a/packages/transactions/src/estimator.ts b/packages/transactions/src/estimator.ts index a73357901..d89ad35ac 100644 --- a/packages/transactions/src/estimator.ts +++ b/packages/transactions/src/estimator.ts @@ -1,13 +1,6 @@ import { ethers } from 'ethers' import { GasEstimator } from './assets' import NodeClient, { - ChainConfig, - SupportedChainsResponse, - SmartAccountsResponse, - SmartAccountByOwnerDto, - EstimateExternalGasDto, - EstimateRequiredTxGasDto, - EstimateHandlePaymentTxGasDto, EstimateUndeployedContractGasDto, } from '@biconomy-sdk/node-client' import ContractUtils from './contract-utils' @@ -15,10 +8,10 @@ import { PrepareRefundTransactionDto, PrepareRefundTransactionsDto, EstimateSmartAccountDeploymentDto, - WalletTransaction, + IWalletTransaction, FAKE_SIGNATURE, ExecTransaction, - FeeRefundV1_0_1, + IFeeRefundV1_0_1, SmartAccountState, } from '@biconomy-sdk/core-types' @@ -34,7 +27,7 @@ export class Estimator { this.contractUtils = contractUtils } - async estimateTransaction(prepareTransactionDto: PrepareRefundTransactionDto, createdTransaction: WalletTransaction, smartAccountState: SmartAccountState): Promise { + async estimateTransaction(prepareTransactionDto: PrepareRefundTransactionDto, createdTransaction: IWalletTransaction, smartAccountState: SmartAccountState): Promise { const { transaction, batchId, @@ -73,7 +66,7 @@ export class Estimator { // to avoid failing eth_call override with undeployed wallet txn.targetTxGas = 500000; - const refundInfo: FeeRefundV1_0_1 = { + const refundInfo: IFeeRefundV1_0_1 = { baseGas: createdTransaction.baseGas, gasPrice: createdTransaction.gasPrice, tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, @@ -99,7 +92,7 @@ export class Estimator { return estimatedGasUsed; } - async estimateTransactionBatch(prepareRefundTransactionsDto: PrepareRefundTransactionsDto, createdTransaction: WalletTransaction, smartAccountState: SmartAccountState): Promise { + async estimateTransactionBatch(prepareRefundTransactionsDto: PrepareRefundTransactionsDto, createdTransaction: IWalletTransaction, smartAccountState: SmartAccountState): Promise { const { transactions, batchId, chainId, version } = prepareRefundTransactionsDto let estimatedGasUsed = 0; @@ -128,7 +121,7 @@ export class Estimator { // to avoid failing eth_call override with undeployed wallet txn.targetTxGas = 500000; - const refundInfo: FeeRefundV1_0_1 = { + const refundInfo: IFeeRefundV1_0_1 = { baseGas: createdTransaction.baseGas, gasPrice: createdTransaction.gasPrice, tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index dc94116c9..09bf11d12 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -2,7 +2,6 @@ import { Contract, Wallet, utils, - BigNumber, BigNumberish, Signer, PopulatedTransaction @@ -10,9 +9,9 @@ import { import { ExecTransaction, - FeeRefundV1_0_0, - FeeRefundV1_0_1, - WalletTransaction, + IFeeRefundV1_0_0, + IFeeRefundV1_0_1, + IWalletTransaction, SmartAccountSignature } from '@biconomy-sdk/core-types' @@ -61,7 +60,7 @@ export const calculateSmartAccountDomainSeparator = ( export const preimageWalletTransactionHash = ( wallet: Contract, - SmartAccountTx: WalletTransaction, + SmartAccountTx: IWalletTransaction, chainId: BigNumberish ): string => { return utils._TypedDataEncoder.encode( @@ -73,7 +72,7 @@ export const preimageWalletTransactionHash = ( export const calculateSmartAccountTransactionHash = ( wallet: Contract, - SmartAccountTx: WalletTransaction, + SmartAccountTx: IWalletTransaction, chainId: BigNumberish ): string => { return utils._TypedDataEncoder.hash( @@ -98,7 +97,7 @@ export const calculateSmartAccountMessageHash = ( export const smartAccountSignTypedData = async ( signer: Signer & TypedDataSigner, wallet: Contract, - SmartAccountTx: WalletTransaction, + SmartAccountTx: IWalletTransaction, chainId?: BigNumberish ): Promise => { if (!chainId && !signer.provider) throw Error('Provider required to retrieve chainId') @@ -126,7 +125,7 @@ export const signHash = async (signer: Signer, hash: string): Promise => { const cid = chainId || (await signer.provider!!.getNetwork()).chainId @@ -146,7 +145,7 @@ export const buildSignatureBytes = (signatures: SmartAccountSignature[]): string export const executeTx = async ( wallet: Contract, - SmartAccountTx: WalletTransaction, + SmartAccountTx: IWalletTransaction, signatures: SmartAccountSignature[], overrides?: any ): Promise => { @@ -158,7 +157,7 @@ export const executeTx = async ( operation: SmartAccountTx.operation, targetTxGas: SmartAccountTx.targetTxGas } - const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_1 = { + const refundInfo: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 = { baseGas: SmartAccountTx.baseGas, gasPrice: SmartAccountTx.gasPrice, tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, @@ -176,7 +175,7 @@ export const executeTx = async ( export const populateExecuteTx = async ( wallet: Contract, - SmartAccountTx: WalletTransaction, + SmartAccountTx: IWalletTransaction, signatures: SmartAccountSignature[], overrides?: any ): Promise => { @@ -188,7 +187,7 @@ export const populateExecuteTx = async ( operation: SmartAccountTx.operation, targetTxGas: SmartAccountTx.targetTxGas } - const refundInfo: FeeRefundV1_0_0 | FeeRefundV1_0_1 = { + const refundInfo: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 = { baseGas: SmartAccountTx.baseGas, gasPrice: SmartAccountTx.gasPrice, tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, @@ -210,8 +209,8 @@ export const buildContractCall = ( params: any[], nonce: number, delegateCall?: boolean, - overrides?: Partial -): WalletTransaction => { + overrides?: Partial +): IWalletTransaction => { const data = contract.interface.encodeFunctionData(method, params) return buildSmartAccountTransaction( Object.assign( @@ -228,7 +227,7 @@ export const buildContractCall = ( export const executeTxWithSigners = async ( wallet: Contract, - tx: WalletTransaction, + tx: IWalletTransaction, signers: Wallet[], overrides?: any ) => { @@ -245,7 +244,7 @@ export const executeContractCallWithSigners = async ( params: any[], signers: Wallet[], delegateCall?: boolean, - overrides?: Partial + overrides?: Partial ) => { const tx = buildContractCall( contract, @@ -270,7 +269,7 @@ export const buildSmartAccountTransaction = (template: { gasToken?: string refundReceiver?: string nonce: number -}): WalletTransaction => { +}): IWalletTransaction => { return { to: template.to, value: template.value || 0, diff --git a/packages/transactions/src/multisend.ts b/packages/transactions/src/multisend.ts index 548e84b59..61ea9a7d7 100644 --- a/packages/transactions/src/multisend.ts +++ b/packages/transactions/src/multisend.ts @@ -1,10 +1,10 @@ import { Contract, utils } from 'ethers' import { buildContractCall } from './execution' -import { MetaTransaction, WalletTransaction } from '@biconomy-sdk/core-types' +import { IMetaTransaction, IWalletTransaction } from '@biconomy-sdk/core-types' // TODO // Review all types -const encodeMetaTransaction = (tx: MetaTransaction): string => { +const encodeMetaTransaction = (tx: IMetaTransaction): string => { const data = utils.arrayify(tx.data) const encoded = utils.solidityPack( ['uint8', 'address', 'uint256', 'uint256', 'bytes'], @@ -13,15 +13,15 @@ const encodeMetaTransaction = (tx: MetaTransaction): string => { return encoded.slice(2) } -export const encodeMultiSend = (txs: MetaTransaction[]): string => { +export const encodeMultiSend = (txs: IMetaTransaction[]): string => { return '0x' + txs.map((tx) => encodeMetaTransaction(tx)).join('') } export const buildMultiSendSmartAccountTx = ( multiSend: Contract, - txs: MetaTransaction[], + txs: IMetaTransaction[], nonce: number, - overrides?: Partial -): WalletTransaction => { + overrides?: Partial +): IWalletTransaction => { return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) } diff --git a/packages/transactions/src/transaction-manager.ts b/packages/transactions/src/transaction-manager.ts index 18598d09d..28ad3e176 100644 --- a/packages/transactions/src/transaction-manager.ts +++ b/packages/transactions/src/transaction-manager.ts @@ -6,10 +6,10 @@ import { TransactionDto, TransactionBatchDto, RefundTransactionBatchDto, - MetaTransaction, + IMetaTransaction, MetaTransactionData, RefundTransactionDto, - WalletTransaction, + IWalletTransaction, OperationType, ZERO_ADDRESS, ChainId, @@ -17,7 +17,7 @@ import { FeeOptionsResponse, TokenData, GAS_USAGE_OFFSET, - FeeRefundHandlePayment, + IFeeRefundHandlePayment, EstimateSmartAccountDeploymentDto, SmartAccountState } from '@biconomy-sdk/core-types' @@ -129,7 +129,7 @@ class TransactionManager { } // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment - async deployAndPayFees(chainId: ChainId, version: string, feeQuote: FeeQuote): Promise { + async deployAndPayFees(chainId: ChainId, version: string, feeQuote: FeeQuote): Promise { const token = feeQuote.address; const offset = feeQuote.offset || 1; const feeReceiver = feeQuote.refundReceiver || DEFAULT_FEE_RECEIVER; @@ -155,13 +155,13 @@ class TransactionManager { } /** - * Prepares compatible WalletTransaction object based on Transaction Request + * Prepares compatible IWalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction * @notice This transaction is without fee refund (gasless) * @param transactionDto * @returns */ - async createTransaction(transactionDto: TransactionDto): Promise { + async createTransaction(transactionDto: TransactionDto): Promise { const { transaction, batchId = 0, chainId, version } = transactionDto // NOTE : If the wallet is not deployed yet then nonce would be zero @@ -174,7 +174,7 @@ class TransactionManager { } console.log('nonce: ', nonce) - const walletTx: WalletTransaction = this.utils.buildSmartAccountTransaction({ + const walletTx: IWalletTransaction = this.utils.buildSmartAccountTransaction({ to: transaction.to, value: transaction.value, data: transaction.data, // for token transfers use encodeTransfer @@ -185,7 +185,7 @@ class TransactionManager { } /** - * Prepares compatible WalletTransaction object based on Transaction Request + * Prepares compatible IWalletTransaction object based on Transaction Request * @todo Write test case and limit batch size based on test results in scw-contracts * @notice This transaction is without fee refund (gasless) * @param transaction @@ -196,7 +196,7 @@ class TransactionManager { // TODO: Merge this method with createTransaction, both batch and single transactions can be batched in same transactions async createTransactionBatch( transactionBatchDto: TransactionBatchDto - ): Promise { + ): Promise { const { transactions, batchId, chainId, version } = transactionBatchDto // NOTE : If the wallet is not deployed yet then nonce would be zero let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() @@ -209,10 +209,10 @@ class TransactionManager { } console.log('nonce: ', nonce) - const txs: MetaTransaction[] = [] + const txs: IMetaTransaction[] = [] for (let i = 0; i < transactions.length; i++) { - const innerTx: WalletTransaction = this.utils.buildSmartAccountTransaction({ + const innerTx: IWalletTransaction = this.utils.buildSmartAccountTransaction({ to: transactions[i].to, value: transactions[i].value, data: transactions[i].data, // for token transfers use encodeTransfer @@ -222,7 +222,7 @@ class TransactionManager { txs.push(innerTx) } - const walletTx: WalletTransaction = this.utils.buildMultiSendSmartAccountTx( + const walletTx: IWalletTransaction = this.utils.buildMultiSendSmartAccountTx( this.contractUtils.multiSendContract[chainId][version].getContract(), txs, nonce @@ -387,7 +387,7 @@ class TransactionManager { /** - * Prepares compatible WalletTransaction object based on Transaction Request + * Prepares compatible IWalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) * @param refundTransactionDto @@ -395,7 +395,7 @@ class TransactionManager { */ async createRefundTransaction( refundTransactionDto: RefundTransactionDto - ): Promise { + ): Promise { const { transaction, feeQuote, batchId, chainId, version } = refundTransactionDto let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() walletContract = walletContract.attach(this.smartAccountState.address) @@ -455,7 +455,7 @@ class TransactionManager { // baseGas? // Depending on feeToken provide baseGas! We could use constant value provided by the relayer - const refundDetails: FeeRefundHandlePayment = { + const refundDetails: IFeeRefundHandlePayment = { gasUsed: requiredTxGasEstimate, baseGas: requiredTxGasEstimate, gasPrice: feeQuote.tokenGasPrice, @@ -493,7 +493,7 @@ class TransactionManager { console.log('required txgas estimate ', requiredTxGasEstimate) targetTxGas = requiredTxGasEstimate - const refundDetails: FeeRefundHandlePayment = { + const refundDetails: IFeeRefundHandlePayment = { gasUsed: requiredTxGasEstimate, baseGas: requiredTxGasEstimate, gasPrice: feeQuote.tokenGasPrice, @@ -516,7 +516,7 @@ class TransactionManager { baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas // delegate call + event emission + state updates + potential deployment } - const walletTx: WalletTransaction = this.utils.buildSmartAccountTransaction({ + const walletTx: IWalletTransaction = this.utils.buildSmartAccountTransaction({ to: transaction.to, value: transaction.value, data: transaction.data, // for token transfers use encodeTransfer @@ -533,7 +533,7 @@ class TransactionManager { } /** - * Prepares compatible WalletTransaction object based on Transaction Request + * Prepares compatible IWalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) * @param refundTransactionBatchDto @@ -541,7 +541,7 @@ class TransactionManager { */ async createRefundTransactionBatch( refundTransactionBatchDto: RefundTransactionBatchDto - ): Promise { + ): Promise { const { transactions, feeQuote, @@ -581,9 +581,9 @@ class TransactionManager { } console.log('nonce: ', nonce) - const txs: MetaTransaction[] = this.utils.buildSmartAccountTransactions(transactions) + const txs: IMetaTransaction[] = this.utils.buildSmartAccountTransactions(transactions) - const walletTx: WalletTransaction = this.utils.buildMultiSendSmartAccountTx( + const walletTx: IWalletTransaction = this.utils.buildMultiSendSmartAccountTx( this.contractUtils.multiSendContract[chainId][version].getContract(), txs, nonce @@ -623,7 +623,7 @@ class TransactionManager { // baseGas? // Depending on feeToken provide baseGas! We could use constant value provided by the relayer - const refundDetails: FeeRefundHandlePayment = { + const refundDetails: IFeeRefundHandlePayment = { gasUsed: requiredTxGasEstimate, baseGas: requiredTxGasEstimate, gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review @@ -663,7 +663,7 @@ class TransactionManager { console.log('required txgas estimate ', requiredTxGasEstimate); targetTxGas = requiredTxGasEstimate; - const refundDetails: FeeRefundHandlePayment = { + const refundDetails: IFeeRefundHandlePayment = { gasUsed: requiredTxGasEstimate, baseGas: requiredTxGasEstimate, gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review @@ -684,7 +684,7 @@ class TransactionManager { baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment } - const finalWalletTx: WalletTransaction = this.utils.buildSmartAccountTransaction({ + const finalWalletTx: IWalletTransaction = this.utils.buildSmartAccountTransaction({ to: walletTx.to, value: walletTx.value, data: walletTx.data, // for token transfers use encodeTransfer diff --git a/packages/transactions/src/utils.ts b/packages/transactions/src/utils.ts index 5766127a7..71c10078c 100644 --- a/packages/transactions/src/utils.ts +++ b/packages/transactions/src/utils.ts @@ -5,7 +5,7 @@ import { utils } from 'ethers' -import { MetaTransaction, WalletTransaction, Transaction } from '@biconomy-sdk/core-types' +import { IMetaTransaction, IWalletTransaction, Transaction } from '@biconomy-sdk/core-types' import { AddressZero } from '@ethersproject/constants' @@ -27,7 +27,7 @@ export class Utils { gasToken?: string refundReceiver?: string nonce: number - }): WalletTransaction => { + }): IWalletTransaction => { return { to: template.to, value: template.value || 0, @@ -43,10 +43,10 @@ export class Utils { } } - buildSmartAccountTransactions = (transactions: Transaction[]):MetaTransaction[] => { - const txs: MetaTransaction[] = [] + buildSmartAccountTransactions = (transactions: Transaction[]):IMetaTransaction[] => { + const txs: IMetaTransaction[] = [] for (let i = 0; i < transactions.length; i++) { - const innerTx: WalletTransaction = this.buildSmartAccountTransaction({ + const innerTx: IWalletTransaction = this.buildSmartAccountTransaction({ to: transactions[i].to, value: transactions[i].value, data: transactions[i].data, // for token transfers use encodeTransfer @@ -60,18 +60,18 @@ export class Utils { buildMultiSendSmartAccountTx = ( multiSend: Contract, - txs: MetaTransaction[], + txs: IMetaTransaction[], nonce: number, - overrides?: Partial - ): WalletTransaction => { + overrides?: Partial + ): IWalletTransaction => { return this.buildContractCall(multiSend, 'multiSend', [this.encodeMultiSend(txs)], nonce, true, overrides) } - encodeMultiSend = (txs: MetaTransaction[]): string => { + encodeMultiSend = (txs: IMetaTransaction[]): string => { return '0x' + txs.map((tx) => this.encodeMetaTransaction(tx)).join('') } - encodeMetaTransaction = (tx: MetaTransaction): string => { + encodeMetaTransaction = (tx: IMetaTransaction): string => { const data = utils.arrayify(tx.data) const encoded = utils.solidityPack( ['uint8', 'address', 'uint256', 'uint256', 'bytes'], @@ -86,8 +86,8 @@ export class Utils { params: any[], nonce: number, delegateCall?: boolean, - overrides?: Partial - ): WalletTransaction => { + overrides?: Partial + ): IWalletTransaction => { const data = contract.interface.encodeFunctionData(method, params) return this.buildSmartAccountTransaction( Object.assign( diff --git a/packages/transactions/yarn.lock b/packages/transactions/yarn.lock deleted file mode 100644 index fb3ffc3f7..000000000 --- a/packages/transactions/yarn.lock +++ /dev/null @@ -1,4725 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@account-abstraction/contracts@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@account-abstraction/contracts/-/contracts-0.2.0.tgz#d353fd4b26d8867a3c0067fc0e20da03c99ca2dd" - integrity sha512-CbPYA7o55u1S5Fee5qIWffD/4dxJ7v+86Si8TOUOE/tAMUWP+nzU1kHKUwFrM/HT8OxAQpeXccCD4UtROLtfwA== - -"@biconomy-sdk/core-types@*": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@biconomy-sdk/core-types/-/core-types-1.0.11.tgz#cb60c73e2ce0710989513cfca0c26dfc702014f3" - integrity sha512-hoeHCGrkIF1AaRuXbdjIMfzQWptND3L3ZoTlBhyIbrvTrVxcrSuZ+b3KK40sq+8a9fCSeHHHhrSIVmfg1xGkKw== - dependencies: - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/contracts" "^5.6.0" - "@gnosis.pm/safe-deployments" "^1.16.0" - web3-core "^1.7.1" - -"@biconomy-sdk/ethers-lib@*": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@biconomy-sdk/ethers-lib/-/ethers-lib-1.0.11.tgz#8259f12a8057bb20833eddd8994c9296bcb244a3" - integrity sha512-kfNXrUJSdaTpTvcNmg6dmS8d6RQ5/odhizh/fgeH0PpYHN0BgZgVbpk/vWt3IEEVoSXkVpEP+Z630snAbjzAuw== - dependencies: - "@biconomy-sdk/core-types" "*" - "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" - "@nomiclabs/hardhat-ethers" "^2.1.0" - "@openzeppelin/contracts" "^4.6.0" - scw-contracts-v1.0.0 "npm:scw-contracts@1.0.0" - scw-contracts-v1.0.1 "npm:scw-contracts@1.0.7" - -"@biconomy-sdk/node-client@*": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@biconomy-sdk/node-client/-/node-client-1.0.11.tgz#20213749fc1b5366d5e5027dbac0c681c628b7d5" - integrity sha512-9CXW3OgcDiAQOsSRIRnVKuBxjRlGO51ef6v59zCacESmiJJsybdqGiSfgLnCRjx7NCHkDF00MT1h034IWlhCZw== - dependencies: - "@biconomy-sdk/core-types" "*" - "@ethersproject/abstract-signer" "^5.6.0" - "@gnosis.pm/safe-core-sdk" "^2.1.0" - "@nomiclabs/hardhat-ethers" "^2.1.0" - node-fetch "^2.6.6" - -"@biconomy-sdk/relayer@*": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@biconomy-sdk/relayer/-/relayer-1.0.11.tgz#1b711ce681365c6888974a0ebb2243c3781e79e1" - integrity sha512-LkTcJCcUQVsKoFGhd/+XiTjyXsDmxqLiKUVm92rMpneZix2X2XDwRvSVzApBhOQQRqpJGAZ3pw9yGJ446eRjIQ== - dependencies: - "@biconomy-sdk/core-types" "*" - "@ethersproject/providers" "^5.6.8" - ethers "^5.6.9" - -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.1", "@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.4.1", "@ethersproject/contracts@^5.6.0", "@ethersproject/contracts@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@5.7.1", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@^5.6.8": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.1.tgz#b0799b616d5579cd1067a8ebf1fc1ec74c1e122c" - integrity sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.4.0", "@ethersproject/solidity@^5.6.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.4.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@gnosis.pm/safe-core-sdk-types@^1.4.0", "@gnosis.pm/safe-core-sdk-types@^1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.6.1.tgz#dcd0c19d61fb5266b6e40bac1cd91fde44eda1d7" - integrity sha512-KRflubR/W2qVeRxavh2ALtXI6CyCCcyuL1olJAVn/xkZVYJJjvXn+5GxbRloJFIJrgFCNWYbHrO0sXtywP5Y1g== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/contracts" "^5.7.0" - "@gnosis.pm/safe-deployments" "1.16.0" - web3-core "^1.8.0" - web3-utils "^1.8.0" - -"@gnosis.pm/safe-core-sdk-utils@^1.1.0": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.4.1.tgz#c1c6d7fe78682a0090c47a24b1306c46a69d2e0d" - integrity sha512-VrebOIw5ULOgTuV1hK4V0Wp1cg50Sw9urUYyBFnkI6kzL13f3ngGa5IUZ6O+HOOSNrO2mB+EEr09gWp5IN7ECA== - dependencies: - "@gnosis.pm/safe-core-sdk-types" "^1.6.1" - semver "^7.3.7" - web3-utils "^1.8.0" - -"@gnosis.pm/safe-core-sdk@^2.1.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.4.1.tgz#55b0764dc6968a683841fb07ac7d930f96357b41" - integrity sha512-FlpHW+jzKNtO9HMFF+R7IbdvJM5J4R4JW76jSe3MAbUA5KlmAW9BFDl/sgdQTREttIZMG2dr9A94RU9YcsljXw== - dependencies: - "@ethersproject/solidity" "^5.6.0" - "@gnosis.pm/safe-core-sdk-types" "^1.4.0" - "@gnosis.pm/safe-deployments" "1.15.0" - ethereumjs-util "^7.1.4" - semver "^7.3.5" - web3-utils "^1.7.1" - -"@gnosis.pm/safe-deployments@1.15.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz#71ed9a37437a3080443c49aa65308f2d8839d751" - integrity sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew== - dependencies: - semver "^7.3.7" - -"@gnosis.pm/safe-deployments@1.16.0", "@gnosis.pm/safe-deployments@^1.16.0": - version "1.16.0" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-deployments/-/safe-deployments-1.16.0.tgz#78b1fb400934ff117f7d9c8e66398503bd772eeb" - integrity sha512-5Wakso6SiulstuZfz3gH6yME8Q50BT5dVxIfgWz4vzOmyyqmAVstMd0VIwyw6IDee0gU4mHKZjhD3UXPKEvRCw== - dependencies: - semver "^7.3.7" - -"@metamask/eth-sig-util@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" - integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^6.2.1" - ethjs-util "^0.1.6" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.1" - -"@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" - integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== - -"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" - integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== - -"@nomicfoundation/ethereumjs-block@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz#fdd5c045e7baa5169abeed0e1202bf94e4481c49" - integrity sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-blockchain@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz#1a8c243a46d4d3691631f139bfb3a4a157187b0c" - integrity sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw== - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-ethash" "^2.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - abstract-level "^1.0.3" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - level "^8.0.0" - lru-cache "^5.1.1" - memory-level "^1.0.0" - -"@nomicfoundation/ethereumjs-common@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz#f6bcc7753994555e49ab3aa517fc8bcf89c280b9" - integrity sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA== - dependencies: - "@nomicfoundation/ethereumjs-util" "^8.0.0" - crc-32 "^1.2.0" - -"@nomicfoundation/ethereumjs-ethash@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz#11539c32fe0990e1122ff987d1b84cfa34774e81" - integrity sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew== - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - abstract-level "^1.0.3" - bigint-crypto-utils "^3.0.23" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-evm@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz#99cd173c03b59107c156a69c5e215409098a370b" - integrity sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/ethereumjs-rlp@^4.0.0", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz#d9a9c5f0f10310c8849b6525101de455a53e771d" - integrity sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw== - -"@nomicfoundation/ethereumjs-statemanager@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz#14a9d4e1c828230368f7ab520c144c34d8721e4b" - integrity sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" - -"@nomicfoundation/ethereumjs-trie@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz#dcfbe3be53a94bc061c9767a396c16702bc2f5b7" - integrity sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - ethereum-cryptography "0.1.3" - readable-stream "^3.6.0" - -"@nomicfoundation/ethereumjs-tx@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz#59dc7452b0862b30342966f7052ab9a1f7802f52" - integrity sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-util@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz#deb2b15d2c308a731e82977aefc4e61ca0ece6c5" - integrity sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-vm@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz#2bb50d332bf41790b01a3767ffec3987585d1de6" - integrity sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w== - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-evm" "^1.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.0.3.tgz#1d49e4ac028831a3011a9f3dca60bd1963185342" - integrity sha512-W+bIiNiZmiy+MTYFZn3nwjyPUO6wfWJ0lnXx2zZrM8xExKObMrhCh50yy8pQING24mHfpPFCn89wEB/iG7vZDw== - -"@nomicfoundation/solidity-analyzer-darwin-x64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz#c0fccecc5506ff5466225e41e65691abafef3dbe" - integrity sha512-HuJd1K+2MgmFIYEpx46uzwEFjvzKAI765mmoMxy4K+Aqq1p+q7hHRlsFU2kx3NB8InwotkkIq3A5FLU1sI1WDw== - -"@nomicfoundation/solidity-analyzer-freebsd-x64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.0.3.tgz#8261d033f7172b347490cd005931ef8168ab4d73" - integrity sha512-2cR8JNy23jZaO/vZrsAnWCsO73asU7ylrHIe0fEsXbZYqBP9sMr+/+xP3CELDHJxUbzBY8zqGvQt1ULpyrG+Kw== - -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.0.3.tgz#1ba64b1d76425f8953dedc6367bd7dd46f31dfc5" - integrity sha512-Eyv50EfYbFthoOb0I1568p+eqHGLwEUhYGOxcRNywtlTE9nj+c+MT1LA53HnxD9GsboH4YtOOmJOulrjG7KtbA== - -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.0.3.tgz#8d864c49b55e683f7e3b5cce9d10b628797280ac" - integrity sha512-V8grDqI+ivNrgwEt2HFdlwqV2/EQbYAdj3hbOvjrA8Qv+nq4h9jhQUxFpegYMDtpU8URJmNNlXgtfucSrAQwtQ== - -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.0.3.tgz#16e769500cf1a8bb42ab9498cee3b93c30f78295" - integrity sha512-uRfVDlxtwT1vIy7MAExWAkRD4r9M79zMG7S09mCrWUn58DbLs7UFl+dZXBX0/8FTGYWHhOT/1Etw1ZpAf5DTrg== - -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.0.3.tgz#75f4e1a25526d54c506e4eba63b3d698b6255b8f" - integrity sha512-8HPwYdLbhcPpSwsE0yiU/aZkXV43vlXT2ycH+XlOjWOnLfH8C41z0njK8DHRtEFnp4OVN6E7E5lHBBKDZXCliA== - -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.0.3.tgz#ef6e20cfad5eedfdb145cc34a44501644cd7d015" - integrity sha512-5WWcT6ZNvfCuxjlpZOY7tdvOqT1kIQYlDF9Q42wMpZ5aTm4PvjdCmFDDmmTvyXEBJ4WTVmY5dWNWaxy8h/E28g== - -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.0.3.tgz#98c4e3af9cee68896220fa7e270aefdf7fc89c7b" - integrity sha512-P/LWGZwWkyjSwkzq6skvS2wRc3gabzAbk6Akqs1/Iiuggql2CqdLBkcYWL5Xfv3haynhL+2jlNkak+v2BTZI4A== - -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.0.3.tgz#12da288e7ef17ec14848f19c1e8561fed20d231d" - integrity sha512-4AcTtLZG1s/S5mYAIr/sdzywdNwJpOcdStGF3QMBzEt+cGn3MchMaS9b1gyhb2KKM2c39SmPF5fUuWq1oBSQZQ== - -"@nomicfoundation/solidity-analyzer@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz#d1029f872e66cb1082503b02cc8b0be12f8dd95e" - integrity sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg== - optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.0.3" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.0.3" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.0.3" - -"@nomiclabs/hardhat-ethers@^2.1.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz#3f1d1ab49813d1bae4c035cc1adec224711e528b" - integrity sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA== - -"@nomiclabs/hardhat-etherscan@^2.1.6": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz#e206275e96962cd15e5ba9148b44388bc922d8c2" - integrity sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA== - dependencies: - "@ethersproject/abi" "^5.1.2" - "@ethersproject/address" "^5.0.2" - cbor "^5.0.2" - debug "^4.1.1" - fs-extra "^7.0.1" - node-fetch "^2.6.0" - semver "^6.3.0" - -"@openzeppelin/contracts@^4.2.0", "@openzeppelin/contracts@^4.6.0": - version "4.7.3" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.7.3.tgz#939534757a81f8d69cc854c7692805684ff3111e" - integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== - -"@scure/base@~1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" - integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== - -"@scure/bip32@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.0.tgz#dea45875e7fbc720c2b4560325f1cf5d2246d95b" - integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== - dependencies: - "@noble/hashes" "~1.1.1" - "@noble/secp256k1" "~1.6.0" - "@scure/base" "~1.1.0" - -"@scure/bip39@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" - integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== - dependencies: - "@noble/hashes" "~1.1.1" - "@scure/base" "~1.1.0" - -"@sentry/core@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" - integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/hub@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" - integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== - dependencies: - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/minimal@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" - integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@sentry/node@^5.18.1": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" - integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== - dependencies: - "@sentry/core" "5.30.0" - "@sentry/hub" "5.30.0" - "@sentry/tracing" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/tracing@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" - integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/types@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" - integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== - -"@sentry/utils@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" - integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== - dependencies: - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@solidity-parser/parser@^0.14.0": - version "0.14.3" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.3.tgz#0d627427b35a40d8521aaa933cc3df7d07bfa36f" - integrity sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw== - dependencies: - antlr4ts "^0.5.0-alpha.4" - -"@trufflesuite/bigint-buffer@1.1.10": - version "1.1.10" - resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" - integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== - dependencies: - node-gyp-build "4.4.0" - -"@typechain/hardhat@^2.3.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-2.3.1.tgz#1e8a6e3795e115a5d5348526282b5c597fab0b78" - integrity sha512-BQV8OKQi0KAzLXCdsPO0pZBNQQ6ra8A2ucC26uFX/kquRBtJu1yEyWnVSmtr07b5hyRoJRpzUeINLnyqz4/MAw== - dependencies: - fs-extra "^9.1.0" - -"@types/async-eventemitter@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" - integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== - -"@types/bn.js@^4.11.3": - version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== - dependencies: - "@types/node" "*" - -"@types/bn.js@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" - integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== - dependencies: - "@types/node" "*" - -"@types/concat-stream@^1.6.0": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" - integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== - dependencies: - "@types/node" "*" - -"@types/form-data@0.0.33": - version "0.0.33" - resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" - integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== - dependencies: - "@types/node" "*" - -"@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== - -"@types/mocha@^9.0.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" - integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== - -"@types/node@*": - version "18.7.23" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.23.tgz#75c580983846181ebe5f4abc40fe9dfb2d65665f" - integrity sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg== - -"@types/node@^10.0.3": - version "10.17.60" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" - integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== - -"@types/node@^12.12.6": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== - -"@types/node@^8.0.0": - version "8.10.66" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" - integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== - -"@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== - dependencies: - "@types/node" "*" - -"@types/qs@^6.2.31", "@types/qs@^6.9.7": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== - dependencies: - "@types/node" "*" - -"@types/seedrandom@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" - integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== - -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -abortcontroller-polyfill@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz#1b5b487bd6436b5b764fd52a612509702c3144b5" - integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== - -abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" - integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== - dependencies: - buffer "^6.0.3" - catering "^2.1.0" - is-buffer "^2.0.5" - level-supports "^4.0.0" - level-transcoder "^1.0.1" - module-error "^1.0.1" - queue-microtask "^1.2.3" - -abstract-leveldown@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" - integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== - dependencies: - buffer "^6.0.3" - catering "^2.0.0" - is-buffer "^2.0.5" - level-concat-iterator "^3.0.0" - level-supports "^2.0.1" - queue-microtask "^1.2.3" - -adm-zip@^0.4.16: - version "0.4.16" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" - integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== - -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - -aes-js@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" - integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.12.3: - 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@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -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== - -anymatch@~3.1.1, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-uniq@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== - -array.prototype.reduce@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz#8167e80089f78bff70a99e20bd4201d4663b0a6f" - integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -asap@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -async-eventemitter@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" - -async@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -bigint-crypto-utils@^3.0.23: - version "3.1.6" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.1.6.tgz#3a52a660423416856342d0d9981935fa9856f177" - integrity sha512-k5ljSLHx94jQTW3+18KEfxLJR8/XFBHqhfhEGF48qT8p/jL6EdiG7oNOiiIRGMFh2wEP8kaCXZbVd+5dYkngUg== - dependencies: - bigint-mod-arith "^3.1.0" - -bigint-mod-arith@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/bigint-mod-arith/-/bigint-mod-arith-3.1.1.tgz#127c504faf30d27ba010ac7b7d58708a68e3c20b" - integrity sha512-SzFqdncZKXq5uh3oLFZXmzaZEMDsA7ml9l53xKaVGO6/+y26xNwAaTQEg2R+D+d07YduLbKi0dni3YPsR51UDQ== - -bignumber.js@^9.0.0, bignumber.js@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" - integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -blakejs@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-level@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" - integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.1" - module-error "^1.0.2" - run-parallel-limit "^1.1.0" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -bs58@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58check@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bufferutil@4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" - integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== - dependencies: - node-gyp-build "^4.3.0" - -bufferutil@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" - integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== - dependencies: - node-gyp-build "^4.3.0" - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -camelcase@^5.0.0: - 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.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caseless@^0.12.0, caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - -cbor@^5.0.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== - dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" - -chai-as-promised@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" - integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== - dependencies: - check-error "^1.0.2" - -chai-string@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/chai-string/-/chai-string-1.5.0.tgz#0bdb2d8a5f1dbe90bc78ec493c1c1c180dd4d3d2" - integrity sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw== - -chalk@^2.4.2: - version "2.4.2" - 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" - -chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -"charenc@>= 0.0.1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== - -chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.2.0" - optionalDependencies: - fsevents "~2.1.1" - -chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -classic-level@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.2.0.tgz#2d52bdec8e7a27f534e67fdeb890abef3e643c27" - integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.0" - module-error "^1.0.1" - napi-macros "~2.0.0" - node-gyp-build "^4.3.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-table3@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colors@1.4.0, colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - -commander@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - -commander@^8.1.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^1.6.0, concat-stream@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-fetch@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -"crypt@>= 0.0.1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -debug@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.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.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emittery@0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" - integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encode-utf8@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" - integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.0, enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -es-abstract@^1.19.0, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.0, es-abstract@^1.20.1: - version "1.20.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.3.tgz#90b143ff7aedc8b3d189bcfac7f1e3e3f81e9da1" - integrity sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.6" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -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.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^4.2.8: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -eth-gas-reporter@^0.2.24, eth-gas-reporter@^0.2.25: - version "0.2.25" - resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz#546dfa946c1acee93cb1a94c2a1162292d6ff566" - integrity sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ== - dependencies: - "@ethersproject/abi" "^5.0.0-beta.146" - "@solidity-parser/parser" "^0.14.0" - cli-table3 "^0.5.0" - colors "1.4.0" - ethereum-cryptography "^1.0.3" - ethers "^4.0.40" - fs-readdir-recursive "^1.1.0" - lodash "^4.17.14" - markdown-table "^1.1.3" - mocha "^7.1.1" - req-cwd "^2.0.0" - request "^2.88.0" - request-promise-native "^1.0.5" - sha1 "^1.1.1" - sync-request "^6.0.0" - -ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - -ethereum-cryptography@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz#74f2ac0f0f5fe79f012c889b3b8446a9a6264e6d" - integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== - dependencies: - "@noble/hashes" "1.1.2" - "@noble/secp256k1" "1.6.3" - "@scure/bip32" "1.1.0" - "@scure/bip39" "1.1.0" - -ethereumjs-abi@^0.6.8: - version "0.6.8" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" - integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== - dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" - -ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - -ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.4: - version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethereumjs-wallet@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz#2c000504b4c71e8f3782dabe1113d192522e99b6" - integrity sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA== - dependencies: - aes-js "^3.1.2" - bs58check "^2.1.2" - ethereum-cryptography "^0.1.3" - ethereumjs-util "^7.1.2" - randombytes "^2.1.0" - scrypt-js "^3.0.1" - utf8 "^3.0.0" - uuid "^8.3.2" - -ethers@^4.0.40: - version "4.0.49" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" - integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== - dependencies: - aes-js "3.0.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.4" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - -ethers@^5.6.8, ethers@^5.6.9: - version "5.7.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.1.tgz#48c83a44900b5f006eb2f65d3ba6277047fd4f33" - integrity sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.1" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - -ethjs-util@0.1.6, ethjs-util@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" - integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== - dependencies: - is-hex-prefixed "1.0.0" - strip-hex-prefix "1.0.0" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - -evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-deep-equal@^3.1.1: - 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-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== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@5.0.0: - version "5.0.0" - 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" - path-exists "^4.0.0" - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -flat@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== - dependencies: - is-buffer "~2.0.3" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -fmix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" - integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== - dependencies: - imul "^1.0.0" - -follow-redirects@^1.12.1, follow-redirects@^1.14.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fp-ts@1.19.3: - version "1.19.3" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" - integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== - -fp-ts@^1.0.0: - version "1.19.5" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" - integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== - -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -functions-have-names@^1.2.2: - 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== - -ganache-cli@^6.12.2: - version "6.12.2" - resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" - integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== - dependencies: - ethereumjs-util "6.2.1" - source-map-support "0.5.12" - yargs "13.2.4" - -ganache@^7.1.0: - version "7.4.3" - resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.4.3.tgz#e995f1250697264efbb34d4241c374a2b0271415" - integrity sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA== - dependencies: - "@trufflesuite/bigint-buffer" "1.1.10" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "5.1.1" - "@types/seedrandom" "3.0.1" - emittery "0.10.0" - keccak "3.0.2" - leveldown "6.1.0" - secp256k1 "4.0.3" - optionalDependencies: - bufferutil "4.0.5" - utf-8-validate "5.0.7" - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-port@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" - integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -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" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -glob-parent@~5.1.0, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -hardhat-deploy-ethers@^0.3.0-beta.11: - version "0.3.0-beta.13" - resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz#b96086ff768ddf69928984d5eb0a8d78cfca9366" - integrity sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw== - -hardhat-deploy@^0.9.3: - version "0.9.29" - resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.9.29.tgz#b1177d4f3077f335ad3f50c55825d9417ec75968" - integrity sha512-8tIGszPFmOaXtyloCbASiZPvoAgLNGGL/Ubys3YW/oj4dvoPa8G6YDyaOCdsAhsENZ+QgR280NFSG9JdN7SU9Q== - dependencies: - "@ethersproject/abi" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.1" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.1" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/contracts" "^5.4.1" - "@ethersproject/providers" "^5.4.4" - "@ethersproject/solidity" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/wallet" "^5.4.0" - "@types/qs" "^6.9.7" - axios "^0.21.1" - chalk "^4.1.2" - chokidar "^3.5.2" - debug "^4.3.2" - enquirer "^2.3.6" - form-data "^4.0.0" - fs-extra "^10.0.0" - match-all "^1.2.6" - murmur-128 "^0.2.1" - qs "^6.9.4" - -hardhat-gas-reporter@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz#9a2afb354bc3b6346aab55b1c02ca556d0e16450" - integrity sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg== - dependencies: - array-uniq "1.0.3" - eth-gas-reporter "^0.2.25" - sha1 "^1.1.1" - -hardhat@^2.9.5: - version "2.11.2" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.11.2.tgz#c81388630255823bb1717ec07c4ee651b1fbe97f" - integrity sha512-BdsXC1CFJQDJKmAgCwpmGhFuVU6dcqlgMgT0Kg/xmFAFVugkpYu6NRmh4AaJ3Fah0/BR9DOR4XgQGIbg4eon/Q== - dependencies: - "@ethersproject/abi" "^5.1.2" - "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-evm" "^1.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@nomicfoundation/ethereumjs-vm" "^6.0.0" - "@nomicfoundation/solidity-analyzer" "^0.0.3" - "@sentry/node" "^5.18.1" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" - adm-zip "^0.4.16" - aggregate-error "^3.0.0" - ansi-escapes "^4.3.0" - chalk "^2.4.2" - chokidar "^3.4.0" - ci-info "^2.0.0" - debug "^4.1.1" - enquirer "^2.3.0" - env-paths "^2.2.0" - ethereum-cryptography "^1.0.3" - ethereumjs-abi "^0.6.8" - find-up "^2.1.0" - fp-ts "1.19.3" - fs-extra "^7.0.1" - glob "7.2.0" - immutable "^4.0.0-rc.12" - io-ts "1.10.4" - keccak "^3.0.2" - lodash "^4.17.11" - mnemonist "^0.38.0" - mocha "^10.0.0" - p-map "^4.0.0" - qs "^6.7.0" - raw-body "^2.4.1" - resolve "1.17.0" - semver "^6.3.0" - solc "0.7.3" - source-map-support "^0.5.13" - stacktrace-parser "^0.1.10" - tsort "0.0.1" - undici "^5.4.0" - 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.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -http-basic@^8.1.1: - version "8.1.3" - resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" - integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== - dependencies: - caseless "^0.12.0" - concat-stream "^1.6.2" - http-response-object "^3.0.1" - parse-cache-control "^1.0.1" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-https@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" - integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== - -http-response-object@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" - integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== - dependencies: - "@types/node" "^10.0.3" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -iconv-lite@0.4.24: - version "0.4.24" - 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" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -immutable@^4.0.0-rc.12: - version "4.1.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" - integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== - -imul@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" - integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -io-ts@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" - integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== - dependencies: - fp-ts "^1.0.0" - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -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.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - 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, is-buffer@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -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-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - -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.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/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@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -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-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.3, is-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.9.tgz#246d77d2871e7d9f5aeb1d54b9f52c71329ece67" - integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.20.0" - for-each "^0.3.3" - has-tostringtag "^1.0.0" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/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" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -js-sha3@0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== - -js-sha3@0.8.0, js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -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-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -keccak@3.0.2, keccak@^3.0.0, keccak@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== - optionalDependencies: - graceful-fs "^4.1.9" - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -level-concat-iterator@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" - integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== - dependencies: - catering "^2.1.0" - -level-supports@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" - integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== - -level-supports@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" - integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== - -level-transcoder@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" - integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== - dependencies: - buffer "^6.0.3" - module-error "^1.0.1" - -level@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" - integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== - dependencies: - browser-level "^1.0.1" - classic-level "^1.2.0" - -leveldown@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" - integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== - dependencies: - abstract-leveldown "^7.2.0" - napi-macros "~2.0.0" - node-gyp-build "^4.3.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -log-symbols@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -markdown-table@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" - integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== - -match-all@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" - integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== - -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memory-level@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" - integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== - dependencies: - abstract-level "^1.0.0" - functional-red-black-tree "^1.0.1" - module-error "^1.0.1" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -mkdirp@0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -mnemonist@^0.38.0: - version "0.38.5" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" - integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== - dependencies: - obliterator "^2.0.0" - -mocha@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" - integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== - dependencies: - "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -mocha@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" - integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - -module-error@^1.0.1, module-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" - integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -murmur-128@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" - integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== - dependencies: - encode-utf8 "^1.0.2" - fmix "^0.1.0" - imul "^1.0.0" - -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - -node-environment-flags@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.6: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" - integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== - -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== - -nofilter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" - integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -number-to-bn@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-keys@^1.0.11, 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.assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -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.getownpropertydescriptors@^2.0.3: - version "2.1.4" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz#7965e6437a57278b587383831a9b829455a4bc37" - integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== - dependencies: - array.prototype.reduce "^1.0.4" - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.1" - -obliterator@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" - integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== - -oboe@2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" - integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== - dependencies: - http-https "^1.0.0" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.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.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/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== - -parse-cache-control@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" - integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -pbkdf2@^3.0.17: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -promise@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.2.0.tgz#a1f6280ab67457fbfc8aad2b198c9497e9e5c806" - integrity sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg== - dependencies: - asap "~2.0.6" - -psl@^1.1.28: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -queue-microtask@^1.2.2, queue-microtask@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -raw-body@^2.4.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -readable-stream@^2.2.2: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== - dependencies: - picomatch "^2.0.4" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -req-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" - integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== - dependencies: - req-from "^2.0.0" - -req-from@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" - integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== - dependencies: - resolve-from "^3.0.0" - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.5: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.0: - version "2.0.2" - 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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== - -resolve@1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -rimraf@^2.2.8: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rlp@^2.2.3, rlp@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - -run-parallel-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" - integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== - dependencies: - queue-microtask "^1.2.2" - -rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - -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.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -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", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scrypt-js@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" - integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== - -scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -"scw-contracts-v1.0.0@npm:scw-contracts@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/scw-contracts/-/scw-contracts-1.0.0.tgz#aebbf0cabca5bb892b73511752e8b08cafe0c37e" - integrity sha512-23OsUVpMZZJMb9qe8Bu0rzz47BxhOQv9QdxlHdd/GeE2cnpe5atC36rs3wquXKzfMrru+NEKhlhyR8674hrBpg== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/constants" "^5.6.1" - "@nomiclabs/hardhat-etherscan" "^2.1.6" - "@openzeppelin/contracts" "^4.2.0" - "@typechain/hardhat" "^2.3.0" - "@types/mocha" "^9.0.0" - chai-as-promised "^7.1.1" - chai-string "^1.5.0" - eth-gas-reporter "^0.2.24" - ethereumjs-util "^7.1.0" - ethereumjs-wallet "^1.0.1" - ethers "^5.6.8" - ganache "^7.1.0" - ganache-cli "^6.12.2" - hardhat "^2.9.5" - hardhat-deploy "^0.9.3" - hardhat-deploy-ethers "^0.3.0-beta.11" - hardhat-gas-reporter "^1.0.7" - solc "^0.8.15" - source-map-support "^0.5.19" - typescript "^4.3.5" - -"scw-contracts-v1.0.1@npm:scw-contracts@1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/scw-contracts/-/scw-contracts-1.0.7.tgz#1f0878d82ce114cd316f268127a5c2295553b553" - integrity sha512-5Y2vpNIeHW2VsBIaukkKNn1/bjBBQlR8Dbbpi/UrHPSKU8A577ezZJZbWKysqh21IuFDJ44YRzaQDtTlLBDYDg== - dependencies: - "@account-abstraction/contracts" "^0.2.0" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/constants" "^5.6.1" - "@nomiclabs/hardhat-etherscan" "^2.1.6" - "@openzeppelin/contracts" "^4.2.0" - "@typechain/hardhat" "^2.3.0" - "@types/mocha" "^9.0.0" - chai-as-promised "^7.1.1" - chai-string "^1.5.0" - eth-gas-reporter "^0.2.24" - ethereumjs-util "^7.1.0" - ethereumjs-wallet "^1.0.1" - ethers "^5.6.8" - ganache "^7.1.0" - ganache-cli "^6.12.2" - hardhat "^2.9.5" - hardhat-deploy "^0.9.3" - hardhat-deploy-ethers "^0.3.0-beta.11" - hardhat-gas-reporter "^1.0.7" - solc "^0.8.15" - source-map-support "^0.5.19" - typescript "^4.3.5" - -secp256k1@4.0.3, secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -semver@^5.5.0, semver@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.5, semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - 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== - -setimmediate@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" - integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -sha1@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" - integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== - dependencies: - charenc ">= 0.0.1" - crypt ">= 0.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-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== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -solc@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - follow-redirects "^1.12.1" - fs-extra "^0.30.0" - js-sha3 "0.8.0" - memorystream "^0.3.1" - require-from-string "^2.0.0" - semver "^5.5.0" - tmp "0.0.33" - -solc@^0.8.15: - version "0.8.17" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.17.tgz#c748fec6a64bf029ec406aa9b37e75938d1115ae" - integrity sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g== - dependencies: - command-exists "^1.2.8" - commander "^8.1.0" - follow-redirects "^1.12.1" - js-sha3 "0.8.0" - memorystream "^0.3.1" - semver "^5.5.0" - tmp "0.0.33" - -source-map-support@0.5.12: - version "0.5.12" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.5.13, source-map-support@^0.5.19: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stacktrace-parser@^0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" - integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== - dependencies: - type-fest "^0.7.1" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== - -"string-width@^1.0.2 || 2", string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -strip-hex-prefix@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - -strip-json-comments@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strip-json-comments@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -sync-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" - integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== - dependencies: - http-response-object "^3.0.1" - sync-rpc "^1.2.1" - then-request "^6.0.0" - -sync-rpc@^1.2.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" - integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== - dependencies: - get-port "^3.1.0" - -then-request@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" - integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== - dependencies: - "@types/concat-stream" "^1.6.0" - "@types/form-data" "0.0.33" - "@types/node" "^8.0.0" - "@types/qs" "^6.2.31" - caseless "~0.12.0" - concat-stream "^1.6.0" - form-data "^2.2.0" - http-basic "^8.1.1" - http-response-object "^3.0.1" - promise "^8.0.0" - qs "^6.4.0" - -tmp@0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsort@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" - integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl-util@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" - integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" - integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typescript@^4.3.5: - version "4.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.3.tgz#d59344522c4bc464a65a730ac695007fdb66dd88" - integrity sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig== - -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@^5.4.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.10.0.tgz#dd9391087a90ccfbd007568db458674232ebf014" - integrity sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -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.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" - integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== - dependencies: - node-gyp-build "^4.3.0" - -utf-8-validate@^5.0.2: - version "5.0.9" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" - integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== - dependencies: - node-gyp-build "^4.3.0" - -utf8@3.0.0, utf8@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@^0.12.0: - version "0.12.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" - integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - safe-buffer "^5.1.2" - which-typed-array "^1.1.2" - -uuid@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" - integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -web3-core-helpers@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz#5dcfdda1a4ea277041d912003198f1334ca29d7c" - integrity sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw== - dependencies: - web3-eth-iban "1.8.0" - web3-utils "1.8.0" - -web3-core-method@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.8.0.tgz#9c2da8896808917d1679c319f19e2174ba17086c" - integrity sha512-c94RAzo3gpXwf2rf8rL8C77jOzNWF4mXUoUfZYYsiY35cJFd46jQDPI00CB5+ZbICTiA5mlVzMj4e7jAsTqiLA== - dependencies: - "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.8.0" - web3-core-promievent "1.8.0" - web3-core-subscriptions "1.8.0" - web3-utils "1.8.0" - -web3-core-promievent@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.8.0.tgz#979765fd4d37ab0f158f0ee54037b279b737bd53" - integrity sha512-FGLyjAuOaAQ+ZhV6iuw9tg/9WvIkSZXKHQ4mdTyQ8MxVraOtFivOCbuLLsGgapfHYX+RPxsc1j1YzQjKoupagQ== - dependencies: - eventemitter3 "4.0.4" - -web3-core-requestmanager@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.8.0.tgz#06189df80cf52d24a195a7ef655031afe8192df3" - integrity sha512-2AoYCs3Owl5foWcf4uKPONyqFygSl9T54L8b581U16nsUirjhoTUGK/PBhMDVcLCmW4QQmcY5A8oPFpkQc1TTg== - dependencies: - util "^0.12.0" - web3-core-helpers "1.8.0" - web3-providers-http "1.8.0" - web3-providers-ipc "1.8.0" - web3-providers-ws "1.8.0" - -web3-core-subscriptions@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.8.0.tgz#ff66ae4467c8cb4716367248bcefb1845c0f8b83" - integrity sha512-7lHVRzDdg0+Gcog55lG6Q3D8JV+jN+4Ly6F8cSn9xFUAwOkdbgdWsjknQG7t7CDWy21DQkvdiY2BJF8S68AqOA== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.8.0" - -web3-core@^1.7.1, web3-core@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.8.0.tgz#90afce527ac1b1dff8cbed2acbc0336530b8aacf" - integrity sha512-9sCA+Z02ci6zoY2bAquFiDjujRwmSKHiSGi4B8IstML8okSytnzXk1izHYSynE7ahIkguhjWAuXFvX76F5rAbA== - dependencies: - "@types/bn.js" "^5.1.0" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.8.0" - web3-core-method "1.8.0" - web3-core-requestmanager "1.8.0" - web3-utils "1.8.0" - -web3-eth-iban@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz#3af8a0c95b5f7b0b81ab0bcd2075c1e5dda31520" - integrity sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg== - dependencies: - bn.js "^5.2.1" - web3-utils "1.8.0" - -web3-providers-http@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.8.0.tgz#3fd1e569ead2095343fac17d53160a3bae674c23" - integrity sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw== - dependencies: - abortcontroller-polyfill "^1.7.3" - cross-fetch "^3.1.4" - es6-promise "^4.2.8" - web3-core-helpers "1.8.0" - -web3-providers-ipc@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.8.0.tgz#d339a24c4d764e459e425d3ac868a551ac33e3ea" - integrity sha512-tAXHtVXNUOgehaBU8pzAlB3qhjn/PRpjdzEjzHNFqtRRTwzSEKOJxFeEhaUA4FzHnTlbnrs8ujHWUitcp1elfg== - dependencies: - oboe "2.1.5" - web3-core-helpers "1.8.0" - -web3-providers-ws@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.8.0.tgz#a0a73e0606981ea32bed40d215000a64753899de" - integrity sha512-bcZtSifsqyJxwkfQYamfdIRp4nhj9eJd7cxHg1uUkfLJK125WP96wyJL1xbPt7qt0MpfnTFn8/UuIqIB6nFENg== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.8.0" - websocket "^1.0.32" - -web3-utils@1.8.0, web3-utils@^1.7.1, web3-utils@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.8.0.tgz#0a506f8c6af9a2ad6ba79689892662769534fc03" - integrity sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ== - dependencies: - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -websocket@^1.0.32: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -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.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== - -which-typed-array@^1.1.2: - version "1.1.8" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.8.tgz#0cfd53401a6f334d90ed1125754a42ed663eb01f" - integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.20.0" - for-each "^0.3.3" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.9" - -which@1.3.1, 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" - -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== - -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.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.0" - -yargs@13.3.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.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 "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..94f0e654b --- /dev/null +++ b/yarn.lock @@ -0,0 +1,11621 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@account-abstraction/contracts@^0.2.0": + version "0.2.0" + resolved "https://registry.npmjs.org/@account-abstraction/contracts/-/contracts-0.2.0.tgz" + integrity sha512-CbPYA7o55u1S5Fee5qIWffD/4dxJ7v+86Si8TOUOE/tAMUWP+nzU1kHKUwFrM/HT8OxAQpeXccCD4UtROLtfwA== + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.19.3": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz" + integrity sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz" + integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.3" + "@babel/helper-compilation-targets" "^7.19.3" + "@babel/helper-module-transforms" "^7.19.0" + "@babel/helpers" "^7.19.0" + "@babel/parser" "^7.19.3" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.3" + "@babel/types" "^7.19.3" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.19.3", "@babel/generator@^7.7.2": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz" + integrity sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ== + dependencies: + "@babel/types" "^7.19.3" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.19.3": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz" + integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg== + dependencies: + "@babel/compat-data" "^7.19.3" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== + dependencies: + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.19.0": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz" + integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz" + integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helpers@^7.19.0": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz" + integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== + dependencies: + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.3": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz" + integrity sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/template@^7.18.10", "@babel/template@^7.3.3": + version "7.18.10" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.19.0", "@babel/traverse@^7.19.3", "@babel/traverse@^7.7.2": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz" + integrity sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.3" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.19.3" + "@babel/types" "^7.19.3" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.19.3", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz" + integrity sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw== + dependencies: + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@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" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@eslint/eslintrc@^1.3.2": + version "1.3.2" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz" + integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.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" + +"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.2", "@ethereumjs/block@^3.6.3": + version "3.6.3" + resolved "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz" + integrity sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg== + dependencies: + "@ethereumjs/common" "^2.6.5" + "@ethereumjs/tx" "^3.5.2" + ethereumjs-util "^7.1.5" + merkle-patricia-tree "^4.2.4" + +"@ethereumjs/blockchain@^5.5.2", "@ethereumjs/blockchain@^5.5.3": + version "5.5.3" + resolved "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz" + integrity sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw== + dependencies: + "@ethereumjs/block" "^3.6.2" + "@ethereumjs/common" "^2.6.4" + "@ethereumjs/ethash" "^1.1.0" + debug "^4.3.3" + ethereumjs-util "^7.1.5" + level-mem "^5.0.1" + lru-cache "^5.1.1" + semaphore-async-await "^1.5.1" + +"@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": + version "2.6.5" + resolved "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + +"@ethereumjs/ethash@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz" + integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== + dependencies: + "@ethereumjs/block" "^3.5.0" + "@types/levelup" "^4.3.0" + buffer-xor "^2.0.1" + ethereumjs-util "^7.1.1" + miller-rabin "^4.0.0" + +"@ethereumjs/tx@^3.3.2", "@ethereumjs/tx@^3.5.1", "@ethereumjs/tx@^3.5.2": + version "3.5.2" + resolved "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== + dependencies: + "@ethereumjs/common" "^2.6.4" + ethereumjs-util "^7.1.5" + +"@ethereumjs/vm@^5.9.0": + version "5.9.3" + resolved "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz" + integrity sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg== + dependencies: + "@ethereumjs/block" "^3.6.3" + "@ethereumjs/blockchain" "^5.5.3" + "@ethereumjs/common" "^2.6.5" + "@ethereumjs/tx" "^3.5.2" + async-eventemitter "^0.2.4" + core-js-pure "^3.0.1" + debug "^4.3.3" + ethereumjs-util "^7.1.5" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + merkle-patricia-tree "^4.2.4" + rustbn.js "~0.2.0" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.1", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.4.1", "@ethersproject/contracts@^5.6.0", "@ethersproject/contracts@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.1", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@^5.6.8": + version "5.7.1" + resolved "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.1.tgz" + integrity sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.4.0", "@ethersproject/solidity@^5.6.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.4.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@gnosis.pm/safe-core-sdk-types@^1.4.0", "@gnosis.pm/safe-core-sdk-types@^1.6.1": + version "1.6.1" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.6.1.tgz" + integrity sha512-KRflubR/W2qVeRxavh2ALtXI6CyCCcyuL1olJAVn/xkZVYJJjvXn+5GxbRloJFIJrgFCNWYbHrO0sXtywP5Y1g== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@gnosis.pm/safe-deployments" "1.16.0" + web3-core "^1.8.0" + web3-utils "^1.8.0" + +"@gnosis.pm/safe-core-sdk-utils@^1.1.0", "@gnosis.pm/safe-core-sdk-utils@^1.4.1": + version "1.4.1" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.4.1.tgz" + integrity sha512-VrebOIw5ULOgTuV1hK4V0Wp1cg50Sw9urUYyBFnkI6kzL13f3ngGa5IUZ6O+HOOSNrO2mB+EEr09gWp5IN7ECA== + dependencies: + "@gnosis.pm/safe-core-sdk-types" "^1.6.1" + semver "^7.3.7" + web3-utils "^1.8.0" + +"@gnosis.pm/safe-core-sdk@^2.1.0": + version "2.4.1" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.4.1.tgz" + integrity sha512-FlpHW+jzKNtO9HMFF+R7IbdvJM5J4R4JW76jSe3MAbUA5KlmAW9BFDl/sgdQTREttIZMG2dr9A94RU9YcsljXw== + dependencies: + "@ethersproject/solidity" "^5.6.0" + "@gnosis.pm/safe-core-sdk-types" "^1.4.0" + "@gnosis.pm/safe-deployments" "1.15.0" + ethereumjs-util "^7.1.4" + semver "^7.3.5" + web3-utils "^1.7.1" + +"@gnosis.pm/safe-deployments@1.15.0": + version "1.15.0" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz" + integrity sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew== + dependencies: + semver "^7.3.7" + +"@gnosis.pm/safe-deployments@1.16.0", "@gnosis.pm/safe-deployments@^1.12.0", "@gnosis.pm/safe-deployments@^1.16.0": + version "1.16.0" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.16.0.tgz" + integrity sha512-5Wakso6SiulstuZfz3gH6yME8Q50BT5dVxIfgWz4vzOmyyqmAVstMd0VIwyw6IDee0gU4mHKZjhD3UXPKEvRCw== + dependencies: + semver "^7.3.7" + +"@gnosis.pm/safe-ethers-lib@^1.1.0": + version "1.6.1" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.6.1.tgz" + integrity sha512-rUv2Dwi3whTmcgx6EejI5llMDnxhwyTX/8j01K6fWBfOAFaUV78gbtPcwmdr1WCVVcXSdKszyarus5fyZTKNfA== + dependencies: + "@gnosis.pm/safe-core-sdk-types" "^1.6.1" + "@gnosis.pm/safe-core-sdk-utils" "^1.4.1" + ethers "^5.7.1" + +"@gnosis.pm/safe-web3-lib@^1.1.0": + version "1.6.1" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.6.1.tgz" + integrity sha512-fOXtxjSmetky4CGapAWPTmzRLBDG+5sGbwriypy6OZ3rcPWvwRyC8p06IhpqofadJIEQP5HphPECtQNVSPEkjA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@gnosis.pm/safe-core-sdk-types" "^1.6.1" + "@gnosis.pm/safe-core-sdk-utils" "^1.4.1" + web3 "^1.8.0" + web3-core "^1.8.0" + web3-utils "^1.8.0" + +"@humanwhocodes/config-array@^0.10.5": + version "0.10.7" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz" + integrity sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + +"@isaacs/string-locale-compare@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + +"@jest/core@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz" + integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/reporters" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^28.1.3" + jest-config "^28.1.3" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-resolve-dependencies "^28.1.3" + jest-runner "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + jest-watcher "^28.1.3" + micromatch "^4.0.4" + pretty-format "^28.1.3" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz" + integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== + dependencies: + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + dependencies: + jest-get-type "^28.0.2" + +"@jest/expect@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz" + integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== + dependencies: + expect "^28.1.3" + jest-snapshot "^28.1.3" + +"@jest/fake-timers@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz" + integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== + dependencies: + "@jest/types" "^28.1.3" + "@sinonjs/fake-timers" "^9.1.2" + "@types/node" "*" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +"@jest/globals@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz" + integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/types" "^28.1.3" + +"@jest/reporters@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz" + integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + jest-worker "^28.1.3" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + terminal-link "^2.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/source-map@^28.1.2": + version "28.1.2" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz" + integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== + dependencies: + "@jridgewell/trace-mapping" "^0.3.13" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== + dependencies: + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz" + integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== + dependencies: + "@jest/test-result" "^28.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + slash "^3.0.0" + +"@jest/transform@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz" + integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.1" + +"@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + dependencies: + "@jest/schemas" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13": + version "0.3.15" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@lerna/add@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.5.4.tgz#2c925ced1cb42779a440f046c37aa0151a560b87" + integrity sha512-eMEWdyH2ijjDuOCZ5qI7nZlWtVmOx/aABGyNmNEG1ChNDQSmxgEmmqxagQCtW7+T63e9AaHsjrxYahBWYBnuhw== + dependencies: + "@lerna/bootstrap" "5.5.4" + "@lerna/command" "5.5.4" + "@lerna/filter-options" "5.5.4" + "@lerna/npm-conf" "5.5.4" + "@lerna/validation-error" "5.5.4" + dedent "^0.7.0" + npm-package-arg "8.1.1" + p-map "^4.0.0" + pacote "^13.6.1" + semver "^7.3.4" + +"@lerna/bootstrap@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-5.5.4.tgz#919fdccf9447ce1b6901fb30ca69860f6563c958" + integrity sha512-MGC6naM0DrFNYTZPEW477uqWCqXmI4MRBKjtGNMiJhczYcFdD6x30u688zoAuO5HUoyqL6Uw7Ea28GVEyDm93Q== + dependencies: + "@lerna/command" "5.5.4" + "@lerna/filter-options" "5.5.4" + "@lerna/has-npm-version" "5.5.4" + "@lerna/npm-install" "5.5.4" + "@lerna/package-graph" "5.5.4" + "@lerna/pulse-till-done" "5.5.4" + "@lerna/rimraf-dir" "5.5.4" + "@lerna/run-lifecycle" "5.5.4" + "@lerna/run-topologically" "5.5.4" + "@lerna/symlink-binary" "5.5.4" + "@lerna/symlink-dependencies" "5.5.4" + "@lerna/validation-error" "5.5.4" + "@npmcli/arborist" "5.3.0" + dedent "^0.7.0" + get-port "^5.1.1" + multimatch "^5.0.0" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + p-map "^4.0.0" + p-map-series "^2.1.0" + p-waterfall "^2.1.1" + semver "^7.3.4" + +"@lerna/changed@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-5.5.4.tgz#61742e6d92e7f0aaec6b787f6b0a6203ef444c99" + integrity sha512-/tns9PA5m9XCKJk13RRJotCOFR/bZ+7zfxz20zpIELT9GehZLTaEPsItxVnlqQ4dMHMe0fl6XG6dFqeBqLOW4g== + dependencies: + "@lerna/collect-updates" "5.5.4" + "@lerna/command" "5.5.4" + "@lerna/listable" "5.5.4" + "@lerna/output" "5.5.4" + +"@lerna/check-working-tree@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-5.5.4.tgz#f19bddb23543010a848a3f44e66fc63929f6d4c9" + integrity sha512-uIHlEb/JSX9P230UNH69W21fWM4oKu8ulRdXuYCBckpbJkDz9nT1yS2y4wUHx+3GfXWqGKygTh8Z06vSdYg+2A== + dependencies: + "@lerna/collect-uncommitted" "5.5.4" + "@lerna/describe-ref" "5.5.4" + "@lerna/validation-error" "5.5.4" + +"@lerna/child-process@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-5.5.4.tgz#97a7d2c994895e56ef8a0c49716a0a692867b5aa" + integrity sha512-1QlxFASrKlV3cG7XPFolOdrS4W784zv4DgipmTxaP++VlVAwbrHhqUdIEytDV6d0rlRksf6LPYzJhXdwlBkCEQ== + dependencies: + chalk "^4.1.0" + execa "^5.0.0" + strong-log-transformer "^2.1.0" + +"@lerna/clean@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-5.5.4.tgz#329ecf24c5c66056f0ba96fdff1d1bc2b9bed5fe" + integrity sha512-q1fXRm6ZXo3HrFfsgyY9C83haotPT/Xa5K8fQX6GADuNLk0Xo3+ycouHeidblRLmQtCa3WNPEmCthTuaWrSUoQ== + dependencies: + "@lerna/command" "5.5.4" + "@lerna/filter-options" "5.5.4" + "@lerna/prompt" "5.5.4" + "@lerna/pulse-till-done" "5.5.4" + "@lerna/rimraf-dir" "5.5.4" + p-map "^4.0.0" + p-map-series "^2.1.0" + p-waterfall "^2.1.1" + +"@lerna/cli@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-5.5.4.tgz#f1c31d59d9be2aaafab6b856c7858a3da98d7b82" + integrity sha512-4uJEFEN0QNnQgghbpdY5wLmBPOeUeBeCKGh9s2pc1fkn0I1wKDhG0QByOfcf+jGuid2bA7DXzvJRXRgq0fWw0A== + dependencies: + "@lerna/global-options" "5.5.4" + dedent "^0.7.0" + npmlog "^6.0.2" + yargs "^16.2.0" + +"@lerna/collect-uncommitted@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-5.5.4.tgz#cdfb5f0c1651742f72147189e38822b815e45892" + integrity sha512-xLCsp8Qx5z/BWCxqUt8W8Se2XJcCQE6YUAti9TSWD5Ar+M5Etkgz2YJiUjZfZrsWZPBCqNfGfxx9Sjs7a/r+8A== + dependencies: + "@lerna/child-process" "5.5.4" + chalk "^4.1.0" + npmlog "^6.0.2" + +"@lerna/collect-updates@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-5.5.4.tgz#424fbcb4a717eb2ed7c6a2015857d85d7e2e131f" + integrity sha512-m34bVoMO5QOd5K5uyAtQtkTiXBIEJHydXMwNXs+YTIAgy82JXNHfZE9vV63Fd5ZWOGY6ORthuXuC2Jn0Vx9tQA== + dependencies: + "@lerna/child-process" "5.5.4" + "@lerna/describe-ref" "5.5.4" + minimatch "^3.0.4" + npmlog "^6.0.2" + slash "^3.0.0" + +"@lerna/command@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-5.5.4.tgz#f06f6dad4b5eed05fb4b98165d054af21be79715" + integrity sha512-/7drNy2DjVjDjm2knsDfEQIFEdRgPE2/lQ3yfEjVbXqs319o6KWbQVeoNy5GjGnLvc3v3eObA0cSJXHzEV11Bg== + dependencies: + "@lerna/child-process" "5.5.4" + "@lerna/package-graph" "5.5.4" + "@lerna/project" "5.5.4" + "@lerna/validation-error" "5.5.4" + "@lerna/write-log-file" "5.5.4" + clone-deep "^4.0.1" + dedent "^0.7.0" + execa "^5.0.0" + is-ci "^2.0.0" + npmlog "^6.0.2" + +"@lerna/conventional-commits@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-5.5.4.tgz#d4fbc9240ec95bc73395b87b2e778cb95ac57b36" + integrity sha512-zLcaveLXnIDYo3e9ChKsHSxiG7vOJeKdcoC5Fj8WH4DjAq/aqy15TE5SJr6aO8hOU/ph0EonPwyQBf4X2Lg5fg== + dependencies: + "@lerna/validation-error" "5.5.4" + conventional-changelog-angular "^5.0.12" + conventional-changelog-core "^4.2.4" + conventional-recommended-bump "^6.1.0" + fs-extra "^9.1.0" + get-stream "^6.0.0" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + pify "^5.0.0" + semver "^7.3.4" + +"@lerna/create-symlink@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-5.5.4.tgz#91314744a715ad0ef4d330d0b4cf30cadd052025" + integrity sha512-TOfkeEQGhE90mvtky0Vpfl+6hwBz0tSXV0+gjRBmla/sYU/9+QoSH36TauHrmu/O3C8/CWtoGruxiWq8jP6Gyw== + dependencies: + cmd-shim "^5.0.0" + fs-extra "^9.1.0" + npmlog "^6.0.2" + +"@lerna/create@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-5.5.4.tgz#defb6bc3ab263bf8acbbfc34407a4de23cd2594f" + integrity sha512-mmZKy5U4OKBr/r8Tm6C8gubYHubQaHdPJ+aYuA/l4uCfK0p/Jly84Fy7M3kclcqm8FKDPKDhlp0Y2jnc32jBbA== + dependencies: + "@lerna/child-process" "5.5.4" + "@lerna/command" "5.5.4" + "@lerna/npm-conf" "5.5.4" + "@lerna/validation-error" "5.5.4" + dedent "^0.7.0" + fs-extra "^9.1.0" + globby "^11.0.2" + init-package-json "^3.0.2" + npm-package-arg "8.1.1" + p-reduce "^2.1.0" + pacote "^13.6.1" + pify "^5.0.0" + semver "^7.3.4" + slash "^3.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^4.0.0" + yargs-parser "20.2.4" + +"@lerna/describe-ref@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-5.5.4.tgz#8b5dc90b5570e6646ca813fe4006e06408acfb05" + integrity sha512-2LDEsuSbZTta7SuwKVo9ofeKvxqy4YFNOjEt7+JceZIfh4si3MjIPBX7l8AsCaUmwJnpOEYba0aau72AUAOtoA== + dependencies: + "@lerna/child-process" "5.5.4" + npmlog "^6.0.2" + +"@lerna/diff@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-5.5.4.tgz#21344bd0fb5d2578b7873b16959ceee6eee4e512" + integrity sha512-OTieqJA4zKAV0KeG0nXwPnCkwg3LH+ucXlelnj1w+gaP2ndHbJVwgUWXGpqCHk8tn935KKOULhP7BGmAwvTYlQ== + dependencies: + "@lerna/child-process" "5.5.4" + "@lerna/command" "5.5.4" + "@lerna/validation-error" "5.5.4" + npmlog "^6.0.2" + +"@lerna/exec@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-5.5.4.tgz#7ff09f9c786bf66ade7bf4823f60a4feab3b267c" + integrity sha512-o1SQ+6/U6L8hih6+wAgjyOhqo2CKzMcW6YWLs5erRY9E6VCEc2kX7SW3223ehsAhUIPfG7n+KYPmuZbWvTpbGQ== + dependencies: + "@lerna/child-process" "5.5.4" + "@lerna/command" "5.5.4" + "@lerna/filter-options" "5.5.4" + "@lerna/profiler" "5.5.4" + "@lerna/run-topologically" "5.5.4" + "@lerna/validation-error" "5.5.4" + p-map "^4.0.0" + +"@lerna/filter-options@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-5.5.4.tgz#c25ee6abb2eb2610d1da390911eafbfddecedf68" + integrity sha512-t1amUypgloaKN8d3VN7GiJQd4ommDplxSisAMS8hztb6ail3EbxasRQ03GXz4+6yQ98sam+D03soqSWAJcinrw== + dependencies: + "@lerna/collect-updates" "5.5.4" + "@lerna/filter-packages" "5.5.4" + dedent "^0.7.0" + npmlog "^6.0.2" + +"@lerna/filter-packages@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-5.5.4.tgz#7f07fe9afb4eacc43fec67c82c9e4acb33b393a7" + integrity sha512-mwpiF+L0np003AUp3ntKEFkNOXWBONwm9q8rW9TOR8OeqMXbxYWGLg2IR+Wc8EClmen79tahn076nUD85OLqew== + dependencies: + "@lerna/validation-error" "5.5.4" + multimatch "^5.0.0" + npmlog "^6.0.2" + +"@lerna/get-npm-exec-opts@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.5.4.tgz#8c1b19a364071350a305f9da50a6b851ced1fc6f" + integrity sha512-PLvSdt0woeOz3TZDHRshYVR9TSOUNunxZ4mE8f0tg9FPQ5R1uuwd2BF4HmEL7AlWFtFS+sOwuL9bI1btV1ELew== + dependencies: + npmlog "^6.0.2" + +"@lerna/get-packed@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-5.5.4.tgz#2aa2772a6c90bdb1335b79d6c9058fca73a74505" + integrity sha512-BXQcQ5rfdIa8hkDd4UdETWs9mDiFvmBRpSNxpgaRiuL1w7AXEaMREQgKOFiv8fv/e+z/F0SXD048Fptj8d5pjA== + dependencies: + fs-extra "^9.1.0" + ssri "^9.0.1" + tar "^6.1.0" + +"@lerna/github-client@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-5.5.4.tgz#9ff47636e57514fb8d44678ad64664c932868d79" + integrity sha512-m5vTRsHyfzh16T3fX3ipdjZyQwl4Gnwav4RmEaVUFp2uMqsr0TrML7LJ/eqOqjGvj/+JWa52rIQsUCQe9BJYag== + dependencies: + "@lerna/child-process" "5.5.4" + "@octokit/plugin-enterprise-rest" "^6.0.1" + "@octokit/rest" "^19.0.3" + git-url-parse "^13.1.0" + npmlog "^6.0.2" + +"@lerna/gitlab-client@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-5.5.4.tgz#e18a479e8f2f3ce0ecfa1e0d4f0a16d646809bba" + integrity sha512-vPSr6xFxtOigFY/fE8oYF+360WsV+g2ZkoJB34FA6UucjWBBPu2W13ydUYfqvJYODJYFzhTjB9b8zf0MJ0KMrQ== + dependencies: + node-fetch "^2.6.1" + npmlog "^6.0.2" + +"@lerna/global-options@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-5.5.4.tgz#ed2daee879205255b4667921d6c91a4e2c04dda8" + integrity sha512-J2K4CsnYuKrW7bDR2gRABUFFrLaJ5z4GaaDpaKtQi6sHFKcVBfYz0B51Fe3NGFOvrct4YS9N7SgKDxPd5Nznig== + +"@lerna/has-npm-version@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-5.5.4.tgz#32655bdf0d7deeb7de78ebc4e978ecc02b18bf91" + integrity sha512-l+nDc/QYvfA5f0tFxzd9mZ/SP0nfxbqpZ9csGyqU8NV/40fHRRouO+fcLtxjcG/mruMjiAB/P216BBbRmGb2VA== + dependencies: + "@lerna/child-process" "5.5.4" + semver "^7.3.4" + +"@lerna/import@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-5.5.4.tgz#b0e07b54c13c786eac4a7639cc0db80ff1f952c6" + integrity sha512-1edy4e+0w4/awahc3uPvRQngIHbri5BGZZbjvsX8aKlPUd9pFg5U9/5w3lVE5jnZFRnqwhpJyyvJjL2M5F6IgQ== + dependencies: + "@lerna/child-process" "5.5.4" + "@lerna/command" "5.5.4" + "@lerna/prompt" "5.5.4" + "@lerna/pulse-till-done" "5.5.4" + "@lerna/validation-error" "5.5.4" + dedent "^0.7.0" + fs-extra "^9.1.0" + p-map-series "^2.1.0" + +"@lerna/info@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/info/-/info-5.5.4.tgz#c0bb38a5d97f60019278a49ee324a3be804b9baa" + integrity sha512-JgYRP2WZUCuiYyf3CQjqEMGoqWpM7t/bammKW/sC3P0/xGSykh45vdRwVojcu4fGRZ/YS7sfFt28Dbw4QFp0iQ== + dependencies: + "@lerna/command" "5.5.4" + "@lerna/output" "5.5.4" + envinfo "^7.7.4" + +"@lerna/init@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-5.5.4.tgz#78142ec262e5d54c0ced716239c39acd2c2cf821" + integrity sha512-BteH3O8ywUN8eBhwzOey3gTXxxKRxGz1JJ6tP1mA0KZoJgiBsSFoZbx7SJeGrR8gY7kmEyvXTY1geaxmb7V+vQ== + dependencies: + "@lerna/child-process" "5.5.4" + "@lerna/command" "5.5.4" + "@lerna/project" "5.5.4" + fs-extra "^9.1.0" + p-map "^4.0.0" + write-json-file "^4.3.0" + +"@lerna/link@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-5.5.4.tgz#5bd2097ab123f6034b470626d220bd5ce03cbc77" + integrity sha512-/kFST918MLhvWbs3szbUw3/6pPa0/vS77WnHk8n3S3v/PuzUEjm9CncYrZ0xB1ZiGk6oa4YTPWMlqyYMY1k0hQ== + dependencies: + "@lerna/command" "5.5.4" + "@lerna/package-graph" "5.5.4" + "@lerna/symlink-dependencies" "5.5.4" + "@lerna/validation-error" "5.5.4" + p-map "^4.0.0" + slash "^3.0.0" + +"@lerna/list@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-5.5.4.tgz#fd27a69118e6ed515149fd77690ce6ecc3058456" + integrity sha512-ppLy99mQYoDkO+SxqnknPYqOnO+iJskb0G2h2fLF4ZK98oy2duJWkkehagwCVtmPax/DqWDDc/IAj+KWpcC0bQ== + dependencies: + "@lerna/command" "5.5.4" + "@lerna/filter-options" "5.5.4" + "@lerna/listable" "5.5.4" + "@lerna/output" "5.5.4" + +"@lerna/listable@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-5.5.4.tgz#eff0720d5c01f734933b95dd8b2161d3126dc487" + integrity sha512-c6acWwSDQE5zeBcnH3m+mwfDr3zr515LsC30tXRenkqp4lbXeyrUPw0Mckw1ksw2nyb5LZl8gQnrFbAKC8gBSA== + dependencies: + "@lerna/query-graph" "5.5.4" + chalk "^4.1.0" + columnify "^1.6.0" + +"@lerna/log-packed@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-5.5.4.tgz#0f0285445aadf3289148af7949f2cd61a21ff553" + integrity sha512-g3lW5yIIe66aVTOYn78+h21GR9gr/WdU3/z8jm0VzGC+VR7KqCKU+49JOCOh7LlNf7sY4ZE6ZbaZptp5wUjrgQ== + dependencies: + byte-size "^7.0.0" + columnify "^1.6.0" + has-unicode "^2.0.1" + npmlog "^6.0.2" + +"@lerna/npm-conf@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-5.5.4.tgz#642438b68dbd98af1189fb85646d3e0ca24b3741" + integrity sha512-BwnP0ezR84nQ5Sh0CdH77Q8evDcqP9bFUdjX6eZT4Rxl0432ocB1YpweNnUDQO4Boxj/FiOu/OaE0Kej+I+5ew== + dependencies: + config-chain "^1.1.12" + pify "^5.0.0" + +"@lerna/npm-dist-tag@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-5.5.4.tgz#2ed3ad80af572bfdcf631f8271e59240d72e011b" + integrity sha512-aAisCh5b2+6cjLxZh03/MGGcBjL7KNBWi5qW6OCdQQpcxH5r0aUJ5F1rmXJE0qxgsLWaGRLzngWk+v6VJHqYJQ== + dependencies: + "@lerna/otplease" "5.5.4" + npm-package-arg "8.1.1" + npm-registry-fetch "^13.3.0" + npmlog "^6.0.2" + +"@lerna/npm-install@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-5.5.4.tgz#0b801d16d04cf2c9c6c114ec0b188ad190c63775" + integrity sha512-lglf2KRxg30dCvNWwxQRJmCfXC51byNqYQt9/dFrnWcotHwpNRIFnVM3tWMdVxlwJMiozU/PjUFBateaxmukXw== + dependencies: + "@lerna/child-process" "5.5.4" + "@lerna/get-npm-exec-opts" "5.5.4" + fs-extra "^9.1.0" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + signal-exit "^3.0.3" + write-pkg "^4.0.0" + +"@lerna/npm-publish@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-5.5.4.tgz#fbdcadf5bedf91bbd33ddca79e742262f8b72465" + integrity sha512-Z3GQqby0FR7HW82/t7j7nOF9pfSwNVmgms0zTq7a8YaEe8uDlAxGMW4sVN8uT89mZfBfS6R1WMlBbC5Ea+jy/A== + dependencies: + "@lerna/otplease" "5.5.4" + "@lerna/run-lifecycle" "5.5.4" + fs-extra "^9.1.0" + libnpmpublish "^6.0.4" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + pify "^5.0.0" + read-package-json "^5.0.1" + +"@lerna/npm-run-script@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-5.5.4.tgz#88dc25d81b5263d85443b570d06f1c87df38c58a" + integrity sha512-fwHZRTGUldN9D2Rugg0HdwE8A8OZ7CF7g63y7OjzIoxASqtZBDyHZgrVbY/xZcrhqCF0+VJ1vR0c/uFwtWFrtA== + dependencies: + "@lerna/child-process" "5.5.4" + "@lerna/get-npm-exec-opts" "5.5.4" + npmlog "^6.0.2" + +"@lerna/otplease@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-5.5.4.tgz#8b1f5af43e3e99131ca6077ac6f9c274733a6a77" + integrity sha512-c/tSjuMGw0esoxqtW0Qs2gCcvFDCrOlFnd4EgTJQKUSbNwVrabMkDJRMP0zu7UiSYJCCWKlBnjpBCiBXNG2H4A== + dependencies: + "@lerna/prompt" "5.5.4" + +"@lerna/output@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-5.5.4.tgz#22c9d78a39b7062c90fd1a1e0050a4129dc9c239" + integrity sha512-qiYtDQ4k9sXzXRlbSuLUFDNLk42sJY3n7x7fWKt6v5I9s2uh5d3cBctBuvV8+YX82H1inQ9hpyFafzOBO8tbCA== + dependencies: + npmlog "^6.0.2" + +"@lerna/pack-directory@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-5.5.4.tgz#987dba5049a57fd822412e9a1770dab9f4da314c" + integrity sha512-yUhu8ADzUZOZPfimMwlxxuxIweXitMKTVAmhz9eruiNHxsc0GpKb89yemep03iXqtrjC1Pt/QsS+dhJNNKdZ4A== + dependencies: + "@lerna/get-packed" "5.5.4" + "@lerna/package" "5.5.4" + "@lerna/run-lifecycle" "5.5.4" + "@lerna/temp-write" "5.5.4" + npm-packlist "^5.1.1" + npmlog "^6.0.2" + tar "^6.1.0" + +"@lerna/package-graph@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-5.5.4.tgz#32abce3e23e09017f5323f2704d9544ffcb1ccbf" + integrity sha512-1g0c08mooZBtrIG8gMOdpbZ3rn5VM+e47pLFAXZcfGUaNUfc0OM58Z50ONiJq23XlJmS4vQ2e4X3cs7Hc7+Dxw== + dependencies: + "@lerna/prerelease-id-from-version" "5.5.4" + "@lerna/validation-error" "5.5.4" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + semver "^7.3.4" + +"@lerna/package@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-5.5.4.tgz#815c35a8f5a12a6f91f3a0314178f198ffcbc1c5" + integrity sha512-wpBcq4zVFVQOJI9QT0TJItRjl6jGSGFp93n4D8KHXXiyeKmN9CW4EnwFY9bnT3r5OteZN+eorD6r2TnRe8VPDg== + dependencies: + load-json-file "^6.2.0" + npm-package-arg "8.1.1" + write-pkg "^4.0.0" + +"@lerna/prerelease-id-from-version@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.5.4.tgz#ba17e53051b15cfe7ba9c98e75abd5644559f8a7" + integrity sha512-IHNQxbILrRGhw9CCdqy0ncSjDpNvdJCcaGFh3+TJRx6Bjhl5ifbUjI0gBUxd7i5Aict5dguWlhAWHQpef48AqA== + dependencies: + semver "^7.3.4" + +"@lerna/profiler@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-5.5.4.tgz#2082a05c4aecee0bd567a5069efb09511212f4c6" + integrity sha512-LPnO8mXhXSBT8PD5pEWkgd+2d8lJqQ0fnwcIPG0B8o6tnQrSc2gXLNxStYOFedzcZXRhAYiFVrf5VjOKHV6Ghw== + dependencies: + fs-extra "^9.1.0" + npmlog "^6.0.2" + upath "^2.0.1" + +"@lerna/project@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-5.5.4.tgz#184d13b0b47187bed5fa6a6227c2a0abf6060fda" + integrity sha512-iLdyc+jPU0cR6BQO3V3Sf51WP3Oac+I/+518dIGdWS7ot9nEbjuZripHJjIkyZKSfnKPTEtz2aUta0ndoewwuQ== + dependencies: + "@lerna/package" "5.5.4" + "@lerna/validation-error" "5.5.4" + cosmiconfig "^7.0.0" + dedent "^0.7.0" + dot-prop "^6.0.1" + glob-parent "^5.1.1" + globby "^11.0.2" + js-yaml "^4.1.0" + load-json-file "^6.2.0" + npmlog "^6.0.2" + p-map "^4.0.0" + resolve-from "^5.0.0" + write-json-file "^4.3.0" + +"@lerna/prompt@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-5.5.4.tgz#3b61a9ba3996c0cf3926671e8f9a15189b9b9ef4" + integrity sha512-X8H2V4dDkFLYzZkMTillvuGAphU5fTDR66HgZlhgKtbJjm7OrjxhoRdk/YlMpI+HdYwXhdUzhEe9YJEhqhfe6w== + dependencies: + inquirer "^8.2.4" + npmlog "^6.0.2" + +"@lerna/publish@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-5.5.4.tgz#73dceae590815e096d3410c98f07ba01a7bccbc1" + integrity sha512-zBlZsk+NBUfg4o7ycKH8/hc4NRJWd4RmxB6Kn7xo7MOJMW3x+K4aABcqY2GGxEMUxx3rBBVPIdziVWbyS7UIxA== + dependencies: + "@lerna/check-working-tree" "5.5.4" + "@lerna/child-process" "5.5.4" + "@lerna/collect-updates" "5.5.4" + "@lerna/command" "5.5.4" + "@lerna/describe-ref" "5.5.4" + "@lerna/log-packed" "5.5.4" + "@lerna/npm-conf" "5.5.4" + "@lerna/npm-dist-tag" "5.5.4" + "@lerna/npm-publish" "5.5.4" + "@lerna/otplease" "5.5.4" + "@lerna/output" "5.5.4" + "@lerna/pack-directory" "5.5.4" + "@lerna/prerelease-id-from-version" "5.5.4" + "@lerna/prompt" "5.5.4" + "@lerna/pulse-till-done" "5.5.4" + "@lerna/run-lifecycle" "5.5.4" + "@lerna/run-topologically" "5.5.4" + "@lerna/validation-error" "5.5.4" + "@lerna/version" "5.5.4" + fs-extra "^9.1.0" + libnpmaccess "^6.0.3" + npm-package-arg "8.1.1" + npm-registry-fetch "^13.3.0" + npmlog "^6.0.2" + p-map "^4.0.0" + p-pipe "^3.1.0" + pacote "^13.6.1" + semver "^7.3.4" + +"@lerna/pulse-till-done@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-5.5.4.tgz#c7fe3349a1da86534fb42bb7f858a6245e6d67e0" + integrity sha512-xC4/QPnIQfrE1aA8W5w6AfaT0gTm8SeVmrsQzMMlUTJ2JAnflsHv1oG69M89xq2DrlXsEVaah56Xbjavy+woQg== + dependencies: + npmlog "^6.0.2" + +"@lerna/query-graph@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-5.5.4.tgz#64079526a6e483a28c0b9cda12f8444ced6016b3" + integrity sha512-TJsmJ++3NpEs+LxF0B02hAv2HigJ9ffa9e+paK27oE8sTiH3YataMHaNu5ZkeotJTw7u0IiRLm0zi4z4xoRlLg== + dependencies: + "@lerna/package-graph" "5.5.4" + +"@lerna/resolve-symlink@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-5.5.4.tgz#3711dc911193d8f1843616bf4a77e4fbf14daedf" + integrity sha512-cAIXELf04dHx/XF/2njCM0bpiyup6Nedpmm1XNJzrJuWrGmwK2qW5F2wQ/RHXWXsLIe/BsOl/hfEONm7o7k8sA== + dependencies: + fs-extra "^9.1.0" + npmlog "^6.0.2" + read-cmd-shim "^3.0.0" + +"@lerna/rimraf-dir@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-5.5.4.tgz#35b1ee9cf3bca12748df4e53f7e5cef5ef845d6a" + integrity sha512-++I7ToqICE4KSqi4T8enfcou8XPZV3gmrpARVD9VW4Tz3w8BP/JijB6AJwgZKojdqQenXU7u3lLTzfepKN1iOA== + dependencies: + "@lerna/child-process" "5.5.4" + npmlog "^6.0.2" + path-exists "^4.0.0" + rimraf "^3.0.2" + +"@lerna/run-lifecycle@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-5.5.4.tgz#e9d61d5c290402f936818ca775168a677d965ad7" + integrity sha512-MIE8HJml8gWkH5jt/5omiPr69VUMUPwvhkf6Irpg5yxIE5K4oeViVZMay2v6cPA9jAeTDCshHb7gt2EPBSsYQA== + dependencies: + "@lerna/npm-conf" "5.5.4" + "@npmcli/run-script" "^4.1.7" + npmlog "^6.0.2" + p-queue "^6.6.2" + +"@lerna/run-topologically@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-5.5.4.tgz#14fdd4d40882445b9346d0e814c61eb8237687a9" + integrity sha512-p1UNHgR8sOaS40nVD0HyqwmawDXBOikIibjbJLcY2QuvWwzAGKjfWm/sAXagYjgzaPYQAhaHyOxTdGe8T+a7uQ== + dependencies: + "@lerna/query-graph" "5.5.4" + p-queue "^6.6.2" + +"@lerna/run@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-5.5.4.tgz#b7cff31b3240c7326119a9a675af2bbc16af6d2a" + integrity sha512-R9g+4nfIDgK+I4RleAJpXrStzLlUCEHR/rxH2t5LJ6DLaoKUG6oeRZsf2w/It/r2IMV1dq2xG6chs+H1o1J+Ow== + dependencies: + "@lerna/command" "5.5.4" + "@lerna/filter-options" "5.5.4" + "@lerna/npm-run-script" "5.5.4" + "@lerna/output" "5.5.4" + "@lerna/profiler" "5.5.4" + "@lerna/run-topologically" "5.5.4" + "@lerna/timer" "5.5.4" + "@lerna/validation-error" "5.5.4" + fs-extra "^9.1.0" + p-map "^4.0.0" + +"@lerna/symlink-binary@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-5.5.4.tgz#cb7e8194e7b860196aff306aa35e0db67f1b5c3a" + integrity sha512-FVhkL8KIgk0gPJV136Sl0/t3LD3qDngIRqJVNPIbATVHagkLVsuJM6+BcdWLxoMUCtwHIyWqgcXn1Oa/DVSUEA== + dependencies: + "@lerna/create-symlink" "5.5.4" + "@lerna/package" "5.5.4" + fs-extra "^9.1.0" + p-map "^4.0.0" + +"@lerna/symlink-dependencies@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-5.5.4.tgz#99607534e239b1479209d3025988e3b2c5ccc073" + integrity sha512-BfOcATr0TreXRfIhIRvgGCT2o8uEqrwVLo8edCQICeqgju19fFn22Qmyb8LW+LMJjBUuSkpJDqqamQ6nj3Ch2A== + dependencies: + "@lerna/create-symlink" "5.5.4" + "@lerna/resolve-symlink" "5.5.4" + "@lerna/symlink-binary" "5.5.4" + fs-extra "^9.1.0" + p-map "^4.0.0" + p-map-series "^2.1.0" + +"@lerna/temp-write@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/temp-write/-/temp-write-5.5.4.tgz#02c07da23944a765d3f319f247c71e0b99b9416f" + integrity sha512-cJy9f9uSvnPxfc2a1ARapGLJXllQlJKKb0idi8aA3ylvgDA7grfKIDPdkf6cBcpPAq8aixDq9GdCZ6oLKdISeA== + dependencies: + graceful-fs "^4.1.15" + is-stream "^2.0.0" + make-dir "^3.0.0" + temp-dir "^1.0.0" + uuid "^8.3.2" + +"@lerna/timer@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-5.5.4.tgz#815f054f3825a58af58518309d32e29e36fd2c8b" + integrity sha512-B3eesmrNaw64Svo2pkmCtBVIJbomegiOMrdxFkZrf8ugTKwobn3KSZZkdbN+hjq8SKpRz3XgtjAuSFUzdg8c3A== + +"@lerna/validation-error@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-5.5.4.tgz#935018275d0005cc5e7540854815ec7404a5b129" + integrity sha512-FUC3x40zBAu0ny1AWXT38LOVRaSJkjdAv9GiYLu9sx+7T7X18q38zPFyVPIIhrrTJsNNWkro/NTA7r4/BcdvoQ== + dependencies: + npmlog "^6.0.2" + +"@lerna/version@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-5.5.4.tgz#4bfe1ec09a508f5a14c325599c88a92d3bede8a4" + integrity sha512-J39m2KfhkkDzfCUjnC2+UbBrWBRs1TkrvFlHFbb8wHUOY5bs+dj5RLyUchF/VJOYFSJXr8LLQFdMPeptF2wItg== + dependencies: + "@lerna/check-working-tree" "5.5.4" + "@lerna/child-process" "5.5.4" + "@lerna/collect-updates" "5.5.4" + "@lerna/command" "5.5.4" + "@lerna/conventional-commits" "5.5.4" + "@lerna/github-client" "5.5.4" + "@lerna/gitlab-client" "5.5.4" + "@lerna/output" "5.5.4" + "@lerna/prerelease-id-from-version" "5.5.4" + "@lerna/prompt" "5.5.4" + "@lerna/run-lifecycle" "5.5.4" + "@lerna/run-topologically" "5.5.4" + "@lerna/temp-write" "5.5.4" + "@lerna/validation-error" "5.5.4" + chalk "^4.1.0" + dedent "^0.7.0" + load-json-file "^6.2.0" + minimatch "^3.0.4" + npmlog "^6.0.2" + p-map "^4.0.0" + p-pipe "^3.1.0" + p-reduce "^2.1.0" + p-waterfall "^2.1.1" + semver "^7.3.4" + slash "^3.0.0" + write-json-file "^4.3.0" + +"@lerna/write-log-file@5.5.4": + version "5.5.4" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-5.5.4.tgz#28d04afa813457a58c6d32d8a4b4581cbaf34d02" + integrity sha512-PDdVuWHLkMw6ygP1hKTciphmYKRDTmNJASxVlxxOv9UkZe7QQvfke0i/OXNPRZHJK7eKCtv2Zu91amE8qCjVNw== + dependencies: + npmlog "^6.0.2" + write-file-atomic "^4.0.1" + +"@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" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz" + integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== + +"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": + version "1.6.3" + resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz" + integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nomiclabs/hardhat-ethers@^2.1.0": + version "2.1.1" + resolved "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz" + integrity sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA== + +"@nomiclabs/hardhat-etherscan@^2.1.6": + version "2.1.8" + resolved "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz" + integrity sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^5.0.2" + debug "^4.1.1" + fs-extra "^7.0.1" + node-fetch "^2.6.0" + semver "^6.3.0" + +"@nomiclabs/hardhat-waffle@^2.0.3": + version "2.0.3" + resolved "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz" + integrity sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg== + dependencies: + "@types/sinon-chai" "^3.2.3" + "@types/web3" "1.0.19" + +"@nomiclabs/hardhat-web3@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz" + integrity sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q== + dependencies: + "@types/bignumber.js" "^5.0.0" + +"@npmcli/arborist@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.3.0.tgz#321d9424677bfc08569e98a5ac445ee781f32053" + integrity sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/map-workspaces" "^2.0.3" + "@npmcli/metavuln-calculator" "^3.0.1" + "@npmcli/move-file" "^2.0.0" + "@npmcli/name-from-folder" "^1.0.1" + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/package-json" "^2.0.0" + "@npmcli/run-script" "^4.1.3" + bin-links "^3.0.0" + cacache "^16.0.6" + common-ancestor-path "^1.0.1" + json-parse-even-better-errors "^2.3.1" + json-stringify-nice "^1.1.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + nopt "^5.0.0" + npm-install-checks "^5.0.0" + npm-package-arg "^9.0.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.0" + npmlog "^6.0.2" + pacote "^13.6.1" + parse-conflict-json "^2.0.1" + proc-log "^2.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^1.0.1" + read-package-json-fast "^2.0.2" + readdir-scoped-modules "^1.1.0" + rimraf "^3.0.2" + semver "^7.3.7" + ssri "^9.0.0" + treeverse "^2.0.0" + walk-up-path "^1.0.0" + +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/git@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" + integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== + dependencies: + "@npmcli/promise-spawn" "^3.0.0" + lru-cache "^7.4.4" + mkdirp "^1.0.4" + npm-pick-manifest "^7.0.0" + proc-log "^2.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^2.0.2" + +"@npmcli/installed-package-contents@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +"@npmcli/map-workspaces@^2.0.3": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" + integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== + dependencies: + "@npmcli/name-from-folder" "^1.0.1" + glob "^8.0.1" + minimatch "^5.0.1" + read-package-json-fast "^2.0.3" + +"@npmcli/metavuln-calculator@^3.0.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" + integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== + dependencies: + cacache "^16.0.0" + json-parse-even-better-errors "^2.3.1" + pacote "^13.0.3" + semver "^7.3.5" + +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/name-from-folder@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" + integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== + +"@npmcli/node-gyp@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" + integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== + +"@npmcli/package-json@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" + integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== + dependencies: + json-parse-even-better-errors "^2.3.1" + +"@npmcli/promise-spawn@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" + integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== + dependencies: + infer-owner "^1.0.4" + +"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.1.7": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" + integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== + dependencies: + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/promise-spawn" "^3.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^2.0.3" + which "^2.0.2" + +"@nrwl/cli@14.8.2": + version "14.8.2" + resolved "https://registry.npmjs.org/@nrwl/cli/-/cli-14.8.2.tgz" + integrity sha512-I+oblryFkZJYk9TMsBWNdN0SV7OjsiD80gD1WjA1KXEQiFVfopYgwErBrxoenodncXrMFRCk/QR9U5F+23+Vow== + dependencies: + nx "14.8.2" + +"@nrwl/tao@14.8.2": + version "14.8.2" + resolved "https://registry.npmjs.org/@nrwl/tao/-/tao-14.8.2.tgz" + integrity sha512-a4+O307YZJf1H6CDQFGs4DoUvl7xUFSJo2rNHoR9jDlWU+Ug3n0iivX7Fih6Ui0gX4ocEpRwzNMmJhEmEq1BYw== + dependencies: + nx "14.8.2" + +"@octokit/auth-token@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.1.tgz#88bc2baf5d706cb258474e722a720a8365dff2ec" + integrity sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA== + dependencies: + "@octokit/types" "^7.0.0" + +"@octokit/core@^4.0.0": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.0.5.tgz#589e68c0a35d2afdcd41dafceab072c2fbc6ab5f" + integrity sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA== + dependencies: + "@octokit/auth-token" "^3.0.0" + "@octokit/graphql" "^5.0.0" + "@octokit/request" "^6.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^7.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^7.0.0": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.2.tgz#11ee868406ba7bb1642e61bbe676d641f79f02be" + integrity sha512-8/AUACfE9vpRpehE6ZLfEtzkibe5nfsSwFZVMsG8qabqRt1M81qZYUFRZa1B8w8lP6cdfDJfRq9HWS+MbmR7tw== + dependencies: + "@octokit/types" "^7.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^5.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.1.tgz#a06982514ad131fb6fbb9da968653b2233fade9b" + integrity sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA== + dependencies: + "@octokit/request" "^6.0.0" + "@octokit/types" "^7.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^13.11.0": + version "13.13.1" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-13.13.1.tgz#a783bacb1817c9f61a2a0c3f81ea22ad62340fdf" + integrity sha512-4EuKSk3N95UBWFau3Bz9b3pheQ8jQYbKmBL5+GSuY8YDPDwu03J4BjI+66yNi8aaX/3h1qDpb0mbBkLdr+cfGQ== + +"@octokit/plugin-enterprise-rest@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + +"@octokit/plugin-paginate-rest@^4.0.0": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.3.1.tgz#553e653ee0318605acd23bf3a799c8bfafdedae3" + integrity sha512-h8KKxESmSFTcXX409CAxlaOYscEDvN2KGQRsLCGT1NSqRW+D6EXLVQ8vuHhFznS9MuH9QYw1GfsUN30bg8hjVA== + dependencies: + "@octokit/types" "^7.5.0" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@^6.0.0": + version "6.6.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.6.2.tgz#cfd1c7280940d5a82d9af12566bafcb33f22bee4" + integrity sha512-n9dL5KMpz9qVFSNdcVWC8ZPbl68QbTk7+CMPXCXqaMZOLn1n1YuoSFFCy84Ge0fx333fUqpnBHv8BFjwGtUQkA== + dependencies: + "@octokit/types" "^7.5.0" + deprecation "^2.3.1" + +"@octokit/request-error@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.1.tgz#3fd747913c06ab2195e52004a521889dadb4b295" + integrity sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ== + dependencies: + "@octokit/types" "^7.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^6.0.0": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.1.tgz#3ceeb22dab09a29595d96594b6720fc14495cf4e" + integrity sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ== + dependencies: + "@octokit/endpoint" "^7.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^7.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + +"@octokit/rest@^19.0.3": + version "19.0.4" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.4.tgz#fd8bed1cefffa486e9ae46a9dc608ce81bcfcbdd" + integrity sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA== + dependencies: + "@octokit/core" "^4.0.0" + "@octokit/plugin-paginate-rest" "^4.0.0" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^6.0.0" + +"@octokit/types@^7.0.0", "@octokit/types@^7.5.0": + version "7.5.1" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-7.5.1.tgz#4e8b182933c17e1f41cc25d44757dbdb7bd76c1b" + integrity sha512-Zk4OUMLCSpXNI8KZZn47lVLJSsgMyCimsWWQI5hyjZg7hdYm0kjotaIkbG0Pp8SfU2CofMBzonboTqvzn3FrJA== + dependencies: + "@octokit/openapi-types" "^13.11.0" + +"@openzeppelin/contracts@^4.2.0", "@openzeppelin/contracts@^4.6.0": + version "4.7.3" + resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz" + integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== + +"@parcel/watcher@2.0.4": + version "2.0.4" + resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz" + integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== + dependencies: + node-addon-api "^3.2.1" + node-gyp-build "^4.3.0" + +"@scure/base@~1.1.0": + version "1.1.1" + resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" + integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + +"@scure/bip32@1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz" + integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== + dependencies: + "@noble/hashes" "~1.1.1" + "@noble/secp256k1" "~1.6.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz" + integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== + dependencies: + "@noble/hashes" "~1.1.1" + "@scure/base" "~1.1.0" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sinclair/typebox@^0.24.1": + version "0.24.28" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.28.tgz" + integrity sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow== + +"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": + version "4.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^9.1.2": + version "9.1.2" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.2": + version "0.14.3" + resolved "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz" + integrity sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + dependencies: + defer-to-connect "^2.0.1" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@trufflesuite/bigint-buffer@1.1.10": + version "1.1.10" + resolved "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz" + integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== + dependencies: + node-gyp-build "4.4.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@typechain/ethers-v5@^9.0.0": + version "9.0.0" + resolved "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz" + integrity sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ== + dependencies: + lodash "^4.17.15" + ts-essentials "^7.0.1" + +"@typechain/hardhat@^2.3.0": + version "2.3.1" + resolved "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-2.3.1.tgz" + integrity sha512-BQV8OKQi0KAzLXCdsPO0pZBNQQ6ra8A2ucC26uFX/kquRBtJu1yEyWnVSmtr07b5hyRoJRpzUeINLnyqz4/MAw== + dependencies: + fs-extra "^9.1.0" + +"@types/abstract-leveldown@*": + version "7.2.0" + resolved "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz" + integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== + +"@types/babel__core@^7.1.14": + version "7.1.19" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.18.2" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz" + integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg== + dependencies: + "@babel/types" "^7.3.0" + +"@types/bignumber.js@^5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz" + integrity sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA== + dependencies: + bignumber.js "*" + +"@types/bn.js@*", "@types/bn.js@^5.1.0": + version "5.1.0" + resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz" + integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== + dependencies: + "@types/node" "*" + +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": + version "6.0.2" + resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz" + integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + +"@types/chai-as-promised@^7.1.5": + version "7.1.5" + resolved "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz" + integrity sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ== + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@^4.3.0": + version "4.3.3" + resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz" + integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g== + +"@types/concat-stream@^1.6.0": + version "1.6.1" + resolved "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== + dependencies: + "@types/node" "*" + +"@types/form-data@0.0.33": + version "0.0.33" + resolved "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz" + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + dependencies: + "@types/node" "*" + +"@types/graceful-fs@^4.1.3": + version "4.1.5" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^28.1.7": + version "28.1.8" + resolved "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz" + integrity sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw== + dependencies: + expect "^28.0.0" + pretty-format "^28.0.0" + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/keyv@*": + version "3.1.4" + resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/level-errors@*": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz" + integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== + +"@types/levelup@^4.3.0": + version "4.3.3" + resolved "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz" + integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== + dependencies: + "@types/abstract-leveldown" "*" + "@types/level-errors" "*" + "@types/node" "*" + +"@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/minimist@^1.2.0": + version "1.2.2" + resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + +"@types/mkdirp@^0.5.2": + version "0.5.2" + resolved "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz" + integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== + dependencies: + "@types/node" "*" + +"@types/mocha@^9.0.0", "@types/mocha@^9.1.0", "@types/mocha@^9.1.1": + version "9.1.1" + resolved "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" + integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== + +"@types/node-fetch@^2.6.2": + version "2.6.2" + resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz" + integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node@*": + version "18.7.13" + resolved "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz" + integrity sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw== + +"@types/node@^10.0.3": + version "10.17.60" + resolved "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/node@^12.12.6": + version "12.20.55" + resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@types/node@^17.0.23": + version "17.0.45" + resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/node@^8.0.0": + version "8.10.66" + resolved "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.1.1", "@types/prettier@^2.1.5": + version "2.7.1" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz" + integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow== + +"@types/qs@^6.2.31", "@types/qs@^6.9.7": + version "6.9.7" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/resolve@^0.0.8": + version "0.0.8" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + +"@types/responselike@*", "@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +"@types/secp256k1@^4.0.1": + version "4.0.3" + resolved "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + dependencies: + "@types/node" "*" + +"@types/seedrandom@3.0.1": + version "3.0.1" + resolved "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz" + integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== + +"@types/sinon-chai@^3.2.3": + version "3.2.8" + resolved "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz" + integrity sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g== + dependencies: + "@types/chai" "*" + "@types/sinon" "*" + +"@types/sinon@*": + version "10.0.13" + resolved "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz" + integrity sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ== + dependencies: + "@types/sinonjs__fake-timers" "*" + +"@types/sinonjs__fake-timers@*": + version "8.1.2" + resolved "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz" + integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/underscore@*": + version "1.11.4" + resolved "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz" + integrity sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg== + +"@types/web3@1.0.19": + version "1.0.19" + resolved "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz" + integrity sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A== + dependencies: + "@types/bn.js" "*" + "@types/underscore" "*" + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.11" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.11.tgz" + integrity sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.17.0": + version "5.38.1" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.1.tgz" + integrity sha512-ky7EFzPhqz3XlhS7vPOoMDaQnQMn+9o5ICR9CPr/6bw8HrFkzhMSxuA3gRfiJVvs7geYrSeawGJjZoZQKCOglQ== + dependencies: + "@typescript-eslint/scope-manager" "5.38.1" + "@typescript-eslint/type-utils" "5.38.1" + "@typescript-eslint/utils" "5.38.1" + debug "^4.3.4" + ignore "^5.2.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.17.0": + version "5.38.1" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.38.1.tgz" + integrity sha512-LDqxZBVFFQnQRz9rUZJhLmox+Ep5kdUmLatLQnCRR6523YV+XhRjfYzStQ4MheFA8kMAfUlclHSbu+RKdRwQKw== + dependencies: + "@typescript-eslint/scope-manager" "5.38.1" + "@typescript-eslint/types" "5.38.1" + "@typescript-eslint/typescript-estree" "5.38.1" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.38.1": + version "5.38.1" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.38.1.tgz" + integrity sha512-BfRDq5RidVU3RbqApKmS7RFMtkyWMM50qWnDAkKgQiezRtLKsoyRKIvz1Ok5ilRWeD9IuHvaidaLxvGx/2eqTQ== + dependencies: + "@typescript-eslint/types" "5.38.1" + "@typescript-eslint/visitor-keys" "5.38.1" + +"@typescript-eslint/type-utils@5.38.1": + version "5.38.1" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.38.1.tgz" + integrity sha512-UU3j43TM66gYtzo15ivK2ZFoDFKKP0k03MItzLdq0zV92CeGCXRfXlfQX5ILdd4/DSpHkSjIgLLLh1NtkOJOAw== + dependencies: + "@typescript-eslint/typescript-estree" "5.38.1" + "@typescript-eslint/utils" "5.38.1" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.38.1": + version "5.38.1" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.38.1.tgz" + integrity sha512-QTW1iHq1Tffp9lNfbfPm4WJabbvpyaehQ0SrvVK2yfV79SytD9XDVxqiPvdrv2LK7DGSFo91TB2FgWanbJAZXg== + +"@typescript-eslint/typescript-estree@5.38.1": + version "5.38.1" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.1.tgz" + integrity sha512-99b5e/Enoe8fKMLdSuwrfH/C0EIbpUWmeEKHmQlGZb8msY33qn1KlkFww0z26o5Omx7EVjzVDCWEfrfCDHfE7g== + dependencies: + "@typescript-eslint/types" "5.38.1" + "@typescript-eslint/visitor-keys" "5.38.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.38.1": + version "5.38.1" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.38.1.tgz" + integrity sha512-oIuUiVxPBsndrN81oP8tXnFa/+EcZ03qLqPDfSZ5xIJVm7A9V0rlkQwwBOAGtrdN70ZKDlKv+l1BeT4eSFxwXA== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.38.1" + "@typescript-eslint/types" "5.38.1" + "@typescript-eslint/typescript-estree" "5.38.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/visitor-keys@5.38.1": + version "5.38.1" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.1.tgz" + integrity sha512-bSHr1rRxXt54+j2n4k54p4fj8AHJ49VDWtjpImOpzQj4qjAiOpPni+V1Tyajh19Api1i844F757cur8wH3YvOA== + dependencies: + "@typescript-eslint/types" "5.38.1" + eslint-visitor-keys "^3.3.0" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +"@yarnpkg/parsers@^3.0.0-rc.18": + version "3.0.0-rc.22" + resolved "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.22.tgz" + integrity sha512-GAWDjXduYBUVmOzlj3X0OwTQ1BV4ZeDdgw8yXST3K0lB95drWEGxa1at0v7BmHDyK2y1F1IJufc8N4yrcuXjWg== + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@zkochan/js-yaml@0.0.6": + version "0.0.6" + resolved "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz" + integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== + dependencies: + argparse "^2.0.1" + +JSONStream@^1.0.4: + version "1.3.5" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abortcontroller-polyfill@^1.7.3: + version "1.7.3" + resolved "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz" + integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== + +abstract-leveldown@^6.2.1: + version "6.3.0" + resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz" + integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@~6.2.1: + version "6.2.3" + resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz" + integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + 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" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +aes-js@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz" + integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + 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@3.2.3: + version "3.2.3" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz" + integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.0.0: + version "6.1.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz" + integrity sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg== + +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + +anymatch@^3.0.3, anymatch@~3.1.1, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1, array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +array.prototype.reduce@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz" + integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@^2.0.0, asap@~2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-eventemitter@^0.2.4: + version "0.2.4" + resolved "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.4.0: + version "2.6.4" + resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +babel-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz" + integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== + dependencies: + "@jest/transform" "^28.1.3" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^28.1.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz" + integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz" + integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== + dependencies: + babel-plugin-jest-hoist "^28.1.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2, base-x@^3.0.8: + version "3.0.9" + resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +before-after-hook@^2.2.0: + version "2.2.2" + resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz" + integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== + +bignumber.js@*, bignumber.js@^9.0.0, bignumber.js@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz" + integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== + +bin-links@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" + integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== + dependencies: + cmd-shim "^5.0.0" + mkdirp-infer-owner "^2.0.0" + npm-normalize-package-bin "^2.0.0" + read-cmd-shim "^3.0.0" + rimraf "^3.0.0" + write-file-atomic "^4.0.0" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bluebird@^3.5.0: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +body-parser@1.20.0, body-parser@^1.16.0: + version "1.20.0" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserslist@^4.21.3: + version "4.21.4" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz" + integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer-xor@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz" + integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== + dependencies: + safe-buffer "^5.1.1" + +buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bufferutil@4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== + dependencies: + node-gyp-build "^4.3.0" + +bufferutil@^4.0.1: + version "4.0.6" + resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz" + integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== + dependencies: + node-gyp-build "^4.3.0" + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +byte-size@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz" + integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-lookup@^6.0.4: + version "6.1.0" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz" + integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== + +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" + 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.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001400: + version "1.0.30001414" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz" + integrity sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg== + +caseless@^0.12.0, caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +catering@^2.0.0, catering@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +cbor@^5.0.2: + version "5.2.0" + resolved "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz" + integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== + dependencies: + bignumber.js "^9.0.1" + nofilter "^1.0.4" + +chai-as-promised@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz" + integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + dependencies: + check-error "^1.0.2" + +chai-string@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz" + integrity sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw== + +chai@^4.3.6: + version "4.3.6" + resolved "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz" + integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@4.1.0, chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + 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" + +chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +"charenc@>= 0.0.1": + version "0.0.2" + resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + +chokidar@3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz" + integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.2.0" + optionalDependencies: + fsevents "~2.1.1" + +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" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0: + version "3.3.2" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz" + integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== + +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + +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" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@3.1.0, cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-spinners@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + +cli-table3@^0.5.0: + version "0.5.1" + resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + 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-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +cmd-shim@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" + integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== + dependencies: + mkdirp-infer-owner "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colorette@^2.0.16: + version "2.0.19" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +colors@1.4.0, colors@^1.1.2: + version "1.4.0" + resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +columnify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +commander@^8.1.0: + version "8.3.0" + resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +commander@^9.3.0: + version "9.4.1" + resolved "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz" + integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== + +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.6.0, concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +concurrently@^7.4.0: + version "7.4.0" + resolved "https://registry.npmjs.org/concurrently/-/concurrently-7.4.0.tgz" + integrity sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA== + dependencies: + chalk "^4.1.0" + date-fns "^2.29.1" + lodash "^4.17.21" + rxjs "^7.0.0" + shell-quote "^1.7.3" + spawn-command "^0.0.2-1" + supports-color "^8.1.0" + tree-kill "^1.2.2" + yargs "^17.3.1" + +config-chain@^1.1.12: + version "1.1.13" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +conventional-changelog-angular@^5.0.12: + version "5.0.13" + resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz" + integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-core@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" + integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^5.0.0" + conventional-commits-parser "^3.2.0" + dateformat "^3.0.0" + get-pkg-repo "^4.0.0" + git-raw-commits "^2.0.8" + git-remote-origin-url "^2.0.0" + git-semver-tags "^4.1.1" + lodash "^4.17.15" + normalize-package-data "^3.0.0" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^4.0.0" + +conventional-changelog-preset-loader@^2.3.4: + version "2.3.4" + resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz" + integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== + dependencies: + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" + +conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.2.0: + version "3.2.4" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +conventional-recommended-bump@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz" + integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.3.4" + conventional-commits-filter "^2.0.7" + conventional-commits-parser "^3.2.0" + git-raw-commits "^2.0.8" + git-semver-tags "^4.1.1" + meow "^8.0.0" + q "^1.5.1" + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +core-js-pure@^3.0.1: + version "3.25.0" + resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.0.tgz" + integrity sha512-IeHpLwk3uoci37yoI2Laty59+YqH9x5uR65/yiA0ARAJrTrN4YU0rmauLWfvqOuk77SlNJXj2rM6oT/dBD87+A== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@^2.8.1: + version "2.8.5" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-fetch@^3.1.4: + version "3.1.5" + resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + 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" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +"crypt@>= 0.0.1": + version "0.0.2" + resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +crypto-browserify@3.12.0: + version "3.12.0" + resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +date-fns@^2.29.1: + version "2.29.3" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" + integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.2.6: + version "3.2.6" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@4.3.3: + version "4.3.3" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" + integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== + +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" + integrity sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg== + 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.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + 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" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + dependencies: + clone "^1.0.2" + +defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +deferred-leveldown@~5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz" + integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== + dependencies: + abstract-leveldown "~6.2.1" + inherits "^2.0.3" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + 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" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +detect-indent@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +dezalgo@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + dependencies: + asap "^2.0.0" + wrappy "1" + +diff-sequences@^28.1.1: + version "28.1.1" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" + integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== + +diff@3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dot-prop@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== + dependencies: + is-obj "^2.0.0" + +dotenv@~10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.251: + version "1.4.270" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.270.tgz" + integrity sha512-KNhIzgLiJmDDC444dj9vEOpZEgsV96ult9Iff98Vanumn+ShJHd5se8aX6KeVxdc0YQeqdrezBZv89rleDbvSg== + +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@0.10.0: + version "0.10.0" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz" + integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== + +emittery@^0.10.2: + version "0.10.2" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + 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" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding-down@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz" + integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== + dependencies: + abstract-leveldown "^6.2.1" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.0, enquirer@^2.3.6, enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +envinfo@^7.7.4: + version "7.8.1" + resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +errno@~0.1.1: + version "0.1.8" + resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.19.0, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.0, es-abstract@^1.20.1: + version "1.20.3" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz" + integrity sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.6" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + 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" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +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" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-plugin-prettier@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.12.0: + version "8.24.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz" + integrity sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ== + dependencies: + "@eslint/eslintrc" "^1.3.2" + "@humanwhocodes/config-array" "^0.10.5" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + "@humanwhocodes/module-importer" "^1.0.1" + ajv "^6.10.0" + 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.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + 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.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-sdsl "^4.1.4" + 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.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.0" + resolved "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz" + integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eth-ens-namehash@2.0.8: + version "2.0.8" + resolved "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz" + integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-gas-reporter@^0.2.24, eth-gas-reporter@^0.2.25: + version "0.2.25" + resolved "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz" + integrity sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ== + dependencies: + "@ethersproject/abi" "^5.0.0-beta.146" + "@solidity-parser/parser" "^0.14.0" + cli-table3 "^0.5.0" + colors "1.4.0" + ethereum-cryptography "^1.0.3" + ethers "^4.0.40" + fs-readdir-recursive "^1.1.0" + lodash "^4.17.14" + markdown-table "^1.1.3" + mocha "^7.1.1" + req-cwd "^2.0.0" + request "^2.88.0" + request-promise-native "^1.0.5" + sha1 "^1.1.1" + sync-request "^6.0.0" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +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" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + dependencies: + js-sha3 "^0.8.0" + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz" + 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" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.0.3: + version "1.1.2" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" + integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== + dependencies: + "@noble/hashes" "1.1.2" + "@noble/secp256k1" "1.6.3" + "@scure/bip32" "1.1.0" + "@scure/bip39" "1.1.0" + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethereumjs-wallet@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz" + integrity sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA== + dependencies: + aes-js "^3.1.2" + bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" + ethereumjs-util "^7.1.2" + randombytes "^2.1.0" + scrypt-js "^3.0.1" + utf8 "^3.0.0" + uuid "^8.3.2" + +ethers@^4.0.40: + version "4.0.49" + resolved "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz" + integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== + dependencies: + aes-js "3.0.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.4" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + +ethers@^5.5.3, ethers@^5.6.8, ethers@^5.6.9, ethers@^5.7.1: + version "5.7.1" + resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.1.tgz" + integrity sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.1" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^5.0.0, execa@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^28.0.0, expect@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== + dependencies: + "@jest/expect-utils" "^28.1.3" + jest-get-type "^28.0.2" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + +express@^4.14.0: + version "4.18.1" + resolved "https://registry.npmjs.org/express/-/express-4.18.1.tgz" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.0" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.10.3" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.7.0" + resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + 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-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + 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.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +figures@3.2.0, figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + +find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.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" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flat@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz" + integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== + dependencies: + is-buffer "~2.0.3" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz" + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== + dependencies: + imul "^1.0.0" + +follow-redirects@^1.12.1, follow-redirects@^1.14.0: + version "1.15.1" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data-encoder@1.7.1: + version "1.7.1" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz" + integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== + +form-data@^2.2.0, form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fp-ts@1.19.3, fp-ts@^1.0.0: + version "1.19.3" + resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz" + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^10.0.0, fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.0, fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +fsevents@~2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functional-red-black-tree@^1.0.1, 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" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +ganache-cli@^6.12.2: + version "6.12.2" + resolved "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz" + integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== + dependencies: + ethereumjs-util "6.2.1" + source-map-support "0.5.12" + yargs "13.2.4" + +ganache@^7.1.0: + version "7.4.3" + resolved "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz" + integrity sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA== + dependencies: + "@trufflesuite/bigint-buffer" "1.1.10" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "5.1.1" + "@types/seedrandom" "3.0.1" + emittery "0.10.0" + keccak "3.0.2" + leveldown "6.1.0" + secp256k1 "4.0.3" + optionalDependencies: + bufferutil "4.0.5" + utf-8-validate "5.0.7" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +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" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +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" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-pkg-repo@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.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" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +git-raw-commits@^2.0.8: + version "2.0.11" + resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz" + integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz" + integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== + dependencies: + meow "^8.0.0" + semver "^6.0.0" + +git-up@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" + integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== + dependencies: + is-ssh "^1.4.0" + parse-url "^8.1.0" + +git-url-parse@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" + integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== + dependencies: + git-up "^7.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + dependencies: + ini "^1.3.2" + +glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.3: + version "7.1.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.1.4, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.4" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.6: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.1: + version "8.0.3" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global@~4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/global/-/global-4.4.0.tgz" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.2, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +got@12.1.0: + version "12.1.0" + resolved "https://registry.npmjs.org/got/-/got-12.1.0.tgz" + integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== + dependencies: + "@sindresorhus/is" "^4.6.0" + "@szmarczak/http-timer" "^5.0.1" + "@types/cacheable-request" "^6.0.2" + "@types/responselike" "^1.0.0" + cacheable-lookup "^6.0.4" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + form-data-encoder "1.7.1" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^2.0.0" + +got@^11.8.5: + version "11.8.5" + resolved "https://registry.npmjs.org/got/-/got-11.8.5.tgz" + integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +handlebars@^4.7.7: + version "4.7.7" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +hardhat-deploy-ethers@^0.3.0-beta.11: + version "0.3.0-beta.13" + resolved "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz" + integrity sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw== + +hardhat-deploy@^0.9.3: + version "0.9.29" + resolved "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.29.tgz" + integrity sha512-8tIGszPFmOaXtyloCbASiZPvoAgLNGGL/Ubys3YW/oj4dvoPa8G6YDyaOCdsAhsENZ+QgR280NFSG9JdN7SU9Q== + dependencies: + "@ethersproject/abi" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.1" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.1" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/contracts" "^5.4.1" + "@ethersproject/providers" "^5.4.4" + "@ethersproject/solidity" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/wallet" "^5.4.0" + "@types/qs" "^6.9.7" + axios "^0.21.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" + enquirer "^2.3.6" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + +hardhat-gas-reporter@^1.0.7: + version "1.0.9" + resolved "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz" + integrity sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg== + dependencies: + array-uniq "1.0.3" + eth-gas-reporter "^0.2.25" + sha1 "^1.1.1" + +hardhat@^2.9.2, hardhat@^2.9.5, hardhat@^2.9.9: + version "2.10.2" + resolved "https://registry.npmjs.org/hardhat/-/hardhat-2.10.2.tgz" + integrity sha512-L/KvDDT/MA6332uAtYTqdcHoSABljw4pPjHQe5SHdIJ+xKfaSc6vDKw03CmrQ5Xup0gHs8XnVSBpZo1AbbIW7g== + dependencies: + "@ethereumjs/block" "^3.6.2" + "@ethereumjs/blockchain" "^5.5.2" + "@ethereumjs/common" "^2.6.4" + "@ethereumjs/tx" "^3.5.1" + "@ethereumjs/vm" "^5.9.0" + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@sentry/node" "^5.18.1" + "@solidity-parser/parser" "^0.14.2" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + abort-controller "^3.0.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + ethereumjs-util "^7.1.4" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + lodash "^4.17.11" + merkle-patricia-tree "^4.2.4" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + qs "^6.7.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + slash "^3.0.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + "true-case-path" "^2.2.1" + tsort "0.0.1" + undici "^5.4.0" + 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.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + 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" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz" + integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^3.0.6: + version "3.0.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.1.0.tgz#9786123f92ef3627f24abc3f15c20d98ec4a6594" + integrity sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q== + dependencies: + lru-cache "^7.5.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz" + integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== + dependencies: + "@types/node" "^10.0.3" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +http2-wrapper@^2.1.10: + version "2.1.11" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz" + integrity sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +husky@^7.0.4: + version "7.0.4" + resolved "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz" + integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== + +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" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== + dependencies: + minimatch "^5.0.1" + +ignore@^5.0.4, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + +immediate@~3.2.3: + version "3.2.3" + resolved "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz" + integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== + +immutable@^4.0.0-rc.12: + version "4.1.0" + resolved "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz" + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + 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" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.2, ini@^1.3.4: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +init-package-json@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" + integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== + dependencies: + npm-package-arg "^9.0.1" + promzard "^0.3.0" + read "^1.0.7" + read-package-json "^5.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^4.0.0" + +inquirer@^8.2.4: + version "8.2.4" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" + integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + 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" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^2.0.5, is-buffer@~2.0.3: + version "2.0.5" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.6: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +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" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +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" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + 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" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-plain-obj@^2.0.0, 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" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + 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.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-ssh@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" + integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== + dependencies: + protocols "^2.0.1" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz" + integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz" + integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz" + integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== + dependencies: + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz" + integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + p-limit "^3.1.0" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz" + integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== + dependencies: + "@jest/core" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + prompts "^2.0.1" + yargs "^17.3.1" + +jest-config@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz" + integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^28.1.3" + "@jest/types" "^28.1.3" + babel-jest "^28.1.3" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^28.1.3" + jest-environment-node "^28.1.3" + jest-get-type "^28.0.2" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-runner "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^28.1.3" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== + dependencies: + chalk "^4.0.0" + diff-sequences "^28.1.1" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-docblock@^28.1.1: + version "28.1.1" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz" + integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== + dependencies: + detect-newline "^3.0.0" + +jest-each@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz" + integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== + dependencies: + "@jest/types" "^28.1.3" + chalk "^4.0.0" + jest-get-type "^28.0.2" + jest-util "^28.1.3" + pretty-format "^28.1.3" + +jest-environment-node@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz" + integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +jest-get-type@^28.0.2: + version "28.0.2" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" + integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== + +jest-haste-map@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz" + integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== + dependencies: + "@jest/types" "^28.1.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + jest-worker "^28.1.3" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz" + integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== + dependencies: + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== + dependencies: + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz" + integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^28.0.2: + version "28.0.2" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz" + integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== + dependencies: + jest-regex-util "^28.0.2" + jest-snapshot "^28.1.3" + +jest-resolve@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz" + integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-pnp-resolver "^1.2.2" + jest-util "^28.1.3" + jest-validate "^28.1.3" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz" + integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/environment" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.10.2" + graceful-fs "^4.2.9" + jest-docblock "^28.1.1" + jest-environment-node "^28.1.3" + jest-haste-map "^28.1.3" + jest-leak-detector "^28.1.3" + jest-message-util "^28.1.3" + jest-resolve "^28.1.3" + jest-runtime "^28.1.3" + jest-util "^28.1.3" + jest-watcher "^28.1.3" + jest-worker "^28.1.3" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz" + integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/globals" "^28.1.3" + "@jest/source-map" "^28.1.2" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz" + integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^28.1.3" + graceful-fs "^4.2.9" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + jest-haste-map "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + natural-compare "^1.4.0" + pretty-format "^28.1.3" + semver "^7.3.5" + +jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz" + integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== + dependencies: + "@jest/types" "^28.1.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^28.0.2" + leven "^3.1.0" + pretty-format "^28.1.3" + +jest-watcher@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== + dependencies: + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^28.1.3" + string-length "^4.0.1" + +jest-worker@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +js-sdsl@^4.1.4: + version "4.1.5" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz" + integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== + +js-sha3@0.5.7, js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" + integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@3.13.1: + version "3.13.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +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" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.10.0, js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +jsonc-parser@3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz" + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +just-diff-apply@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.4.1.tgz#1debed059ad009863b4db0e8d8f333d743cdd83b" + integrity sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g== + +just-diff@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.1.1.tgz#8da6414342a5ed6d02ccd64f5586cbbed3146202" + integrity sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ== + +keccak@3.0.2, keccak@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +keyv@^4.0.0: + version "4.5.0" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz" + integrity sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + 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" + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + optionalDependencies: + graceful-fs "^4.1.9" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +lerna@^5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-5.5.4.tgz#34d95dd3e26c725ce4ba981b887aaf59ce899519" + integrity sha512-LAFQ/U6SL7/EM0sedtFaFS4b0RbTqsYYOJ6LV9Y7l/zWFlqLcg41vLblkNRuxsNB5FZBNpfiWvXmd1KiWkQ/yQ== + dependencies: + "@lerna/add" "5.5.4" + "@lerna/bootstrap" "5.5.4" + "@lerna/changed" "5.5.4" + "@lerna/clean" "5.5.4" + "@lerna/cli" "5.5.4" + "@lerna/create" "5.5.4" + "@lerna/diff" "5.5.4" + "@lerna/exec" "5.5.4" + "@lerna/import" "5.5.4" + "@lerna/info" "5.5.4" + "@lerna/init" "5.5.4" + "@lerna/link" "5.5.4" + "@lerna/list" "5.5.4" + "@lerna/publish" "5.5.4" + "@lerna/run" "5.5.4" + "@lerna/version" "5.5.4" + import-local "^3.0.2" + npmlog "^6.0.2" + nx ">=14.6.1 < 16" + typescript "^3 || ^4" + +level-codec@^9.0.0: + version "9.0.2" + resolved "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz" + integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== + dependencies: + buffer "^5.6.0" + +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-concat-iterator@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz" + integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== + +level-errors@^2.0.0, level-errors@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz" + integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== + dependencies: + errno "~0.1.1" + +level-iterator-stream@~4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz" + integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== + dependencies: + inherits "^2.0.4" + readable-stream "^3.4.0" + xtend "^4.0.2" + +level-mem@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz" + integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== + dependencies: + level-packager "^5.0.3" + memdown "^5.0.0" + +level-packager@^5.0.3: + version "5.1.1" + resolved "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz" + integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== + dependencies: + encoding-down "^6.3.0" + levelup "^4.3.2" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + +level-supports@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz" + integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== + dependencies: + xtend "^4.0.2" + +level-ws@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz" + integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== + dependencies: + inherits "^2.0.3" + readable-stream "^3.1.0" + xtend "^4.0.1" + +leveldown@6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz" + integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +levelup@^4.3.2: + version "4.4.0" + resolved "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz" + integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== + dependencies: + deferred-leveldown "~5.3.0" + level-errors "~2.0.0" + level-iterator-stream "~4.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +libnpmaccess@^6.0.3: + version "6.0.4" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz#2dd158bd8a071817e2207d3b201d37cf1ad6ae6b" + integrity sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag== + dependencies: + aproba "^2.0.0" + minipass "^3.1.1" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + +libnpmpublish@^6.0.4: + version "6.0.5" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.5.tgz#5a894f3de2e267d62f86be2a508e362599b5a4b1" + integrity sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg== + dependencies: + normalize-package-data "^4.0.0" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + semver "^7.3.7" + ssri "^9.0.0" + +lilconfig@2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz" + integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lint-staged@^12.3.7: + version "12.5.0" + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz" + integrity sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.16" + commander "^9.3.0" + debug "^4.3.4" + execa "^5.1.1" + lilconfig "2.0.5" + listr2 "^4.0.5" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-inspect "^1.12.2" + pidtree "^0.5.0" + string-argv "^0.3.1" + supports-color "^9.2.2" + yaml "^1.10.2" + +listr2@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz" + integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.5" + through "^2.3.8" + wrap-ansi "^7.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-json-file@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== + dependencies: + graceful-fs "^4.1.15" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + 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" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +log-symbols@4.1.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +loupe@^2.3.1: + version "2.3.4" + resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" + integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== + dependencies: + get-func-name "^2.0.0" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.14.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" + integrity sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +ltgt@~2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz" + integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: + version "10.2.1" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +markdown-table@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + +match-all@^1.2.6: + version "1.2.6" + resolved "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz" + integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== + +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memdown@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz" + integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== + dependencies: + abstract-leveldown "~6.2.1" + functional-red-black-tree "~1.0.1" + immediate "~3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.2.0" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merkle-patricia-tree@^4.2.4: + version "4.2.4" + resolved "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz" + integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== + dependencies: + "@types/levelup" "^4.3.0" + ethereumjs-util "^7.1.4" + level-mem "^5.0.1" + level-ws "^2.0.0" + readable-stream "^3.6.0" + semaphore-async-await "^1.5.1" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + 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" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimatch@3.0.5, minimatch@^3.0.4: + version "3.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz" + integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== + dependencies: + brace-expansion "^1.1.7" + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" + 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.5, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: + version "3.3.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-infer-owner@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz" + integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== + dependencies: + chownr "^2.0.0" + infer-owner "^1.0.4" + mkdirp "^1.0.3" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz" + integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== + dependencies: + mkdirp "*" + +mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@0.5.5: + version "0.5.5" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^0.5.1, mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz" + integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +mocha@^7.1.1: + version "7.2.0" + resolved "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz" + integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== + dependencies: + ansi-colors "3.2.3" + browser-stdout "1.3.1" + chokidar "3.3.0" + debug "3.2.6" + diff "3.5.0" + escape-string-regexp "1.0.5" + find-up "3.0.0" + glob "7.1.3" + growl "1.10.5" + he "1.2.0" + js-yaml "3.13.1" + log-symbols "3.0.0" + minimatch "3.0.4" + mkdirp "0.5.5" + ms "2.1.1" + node-environment-flags "1.0.6" + object.assign "4.1.0" + strip-json-comments "2.0.1" + supports-color "6.0.0" + which "1.3.1" + wide-align "1.1.3" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "1.6.0" + +mocha@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz" + integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.3" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + growl "1.10.5" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "4.2.1" + ms "2.1.3" + nanoid "3.3.1" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + workerpool "6.2.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +mock-fs@^4.1.0: + version "4.14.0" + resolved "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2, ms@^2.0.0, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + +multimatch@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + +mute-stream@0.0.8, mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz" + integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== + +nanoid@3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== + +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.0: + version "2.6.2" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +nock@^13.2.9: + version "13.2.9" + resolved "https://registry.npmjs.org/nock/-/nock-13.2.9.tgz" + integrity sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA== + dependencies: + debug "^4.1.0" + json-stringify-safe "^5.0.1" + lodash "^4.17.21" + propagate "^2.0.0" + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-addon-api@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-environment-flags@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz" + integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== + dependencies: + object.getownpropertydescriptors "^2.0.3" + semver "^5.7.0" + +node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.5.0" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz" + integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + +node-gyp@^9.0.0, node-gyp@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz" + integrity sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +nofilter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz" + integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + 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-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" + integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== + dependencies: + hosted-git-info "^5.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +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" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-bundled@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-bundled@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" + integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== + dependencies: + npm-normalize-package-bin "^2.0.0" + +npm-install-checks@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" + integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-normalize-package-bin@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" + integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== + +npm-package-arg@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" + integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== + dependencies: + hosted-git-info "^3.0.6" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: + version "9.1.2" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz#fc8acecb00235f42270dda446f36926ddd9ac2bc" + integrity sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg== + dependencies: + hosted-git-info "^5.0.0" + proc-log "^2.0.1" + semver "^7.3.5" + validate-npm-package-name "^4.0.0" + +npm-packlist@^5.1.0, npm-packlist@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" + integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== + dependencies: + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^2.0.0" + npm-normalize-package-bin "^2.0.0" + +npm-pick-manifest@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz#1d372b4e7ea7c6712316c0e99388a73ed3496e84" + integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== + dependencies: + npm-install-checks "^5.0.0" + npm-normalize-package-bin "^2.0.0" + npm-package-arg "^9.0.0" + semver "^7.3.5" + +npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.0: + version "13.3.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" + integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== + dependencies: + make-fetch-happen "^10.0.6" + minipass "^3.1.6" + minipass-fetch "^2.0.3" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^9.0.1" + proc-log "^2.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^6.0.0, npmlog@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.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" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +nx@14.8.2, "nx@>=14.6.1 < 16", nx@^14.8.2: + version "14.8.2" + resolved "https://registry.yarnpkg.com/nx/-/nx-14.8.2.tgz#b285a09368418c4c0fa55c2d5ee411fe1fd3706b" + integrity sha512-pPijBoeybsIlCD8FMH8WTns+pcIL+0ZOh/+otUX2LfVsi+ppH33GUxO9QVLPrLcyGaoHhwil4hYBxPIQ7Z1r2g== + dependencies: + "@nrwl/cli" "14.8.2" + "@nrwl/tao" "14.8.2" + "@parcel/watcher" "2.0.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "^3.0.0-rc.18" + "@zkochan/js-yaml" "0.0.6" + chalk "4.1.0" + chokidar "^3.5.1" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^7.0.2" + dotenv "~10.0.0" + enquirer "~2.3.6" + fast-glob "3.2.7" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^10.1.0" + glob "7.1.4" + ignore "^5.0.4" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + minimatch "3.0.5" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.3.4" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^3.9.0" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.4.0" + yargs-parser "21.0.1" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.0.11, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + 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.getownpropertydescriptors@^2.0.3: + version "2.1.4" + resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz" + integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== + dependencies: + array.prototype.reduce "^1.0.4" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.1" + +obliterator@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz" + integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== + dependencies: + http-https "^1.0.0" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.0" + resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + 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" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map-series@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz" + integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-pipe@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== + +p-queue@^6.6.2: + version "6.6.2" + resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-reduce@^2.0.0, p-reduce@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +p-waterfall@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz" + integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== + dependencies: + p-reduce "^2.0.0" + +pacote@^13.0.3, pacote@^13.6.1: + version "13.6.2" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" + integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== + dependencies: + "@npmcli/git" "^3.0.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/promise-spawn" "^3.0.0" + "@npmcli/run-script" "^4.1.0" + cacache "^16.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.6" + mkdirp "^1.0.4" + npm-package-arg "^9.0.0" + npm-packlist "^5.1.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.1" + proc-log "^2.0.0" + promise-retry "^2.0.1" + read-package-json "^5.0.0" + read-package-json-fast "^2.0.3" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz" + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + +parse-conflict-json@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" + integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== + dependencies: + json-parse-even-better-errors "^2.3.1" + just-diff "^5.0.1" + just-diff-apply "^5.2.0" + +parse-headers@^2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + 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" + +parse-path@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" + integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== + dependencies: + protocols "^2.0.0" + +parse-url@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" + integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== + dependencies: + parse-path "^7.0.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +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" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17, pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pidtree@^0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz" + integrity sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@2.7.1, prettier@^2.1.2, prettier@^2.6.2: + version "2.7.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +pretty-format@^28.0.0, pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + dependencies: + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +proc-log@^2.0.0, proc-log@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" + integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" + integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +promise@^8.0.0: + version "8.2.0" + resolved "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz" + integrity sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg== + dependencies: + asap "~2.0.6" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz" + integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== + dependencies: + read "1" + +propagate@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz" + integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz" + integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +psl@^1.1.28: + version "1.9.0" + resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" + integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qs@6.10.3: + version "6.10.3" + resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" + +qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: + version "6.11.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1, raw-body@^2.4.1: + version "2.5.1" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +read-cmd-shim@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" + integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== + +read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" + integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== + dependencies: + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" + +read-package-json@^5.0.0, read-package-json@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" + integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== + dependencies: + glob "^8.0.1" + json-parse-even-better-errors "^2.3.1" + normalize-package-data "^4.0.0" + npm-normalize-package-bin "^2.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" + 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@1, read@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz" + integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== + dependencies: + mute-stream "~0.0.4" + +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.2.2, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +readdirp@~3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz" + integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== + dependencies: + picomatch "^2.0.4" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +req-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz" + integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== + dependencies: + req-from "^2.0.0" + +req-from@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz" + integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== + dependencies: + resolve-from "^3.0.0" + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.5: + version "1.0.9" + resolved "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.79.0, request@^2.88.0: + version "2.88.2" + resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +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" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + 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" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + +resolve@1.17.0, resolve@^1.10.0, resolve@^1.8.1: + version "1.17.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.20.0: + version "1.22.1" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" + 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" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + 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" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +rxjs@^7.0.0, rxjs@^7.5.5: + version "7.5.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz" + integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.2.1, 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.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + 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", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz" + integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== + +scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +"scw-contracts-v1.0.0@npm:scw-contracts@1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.0.tgz" + integrity sha512-23OsUVpMZZJMb9qe8Bu0rzz47BxhOQv9QdxlHdd/GeE2cnpe5atC36rs3wquXKzfMrru+NEKhlhyR8674hrBpg== + dependencies: + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/constants" "^5.6.1" + "@nomiclabs/hardhat-etherscan" "^2.1.6" + "@openzeppelin/contracts" "^4.2.0" + "@typechain/hardhat" "^2.3.0" + "@types/mocha" "^9.0.0" + chai-as-promised "^7.1.1" + chai-string "^1.5.0" + eth-gas-reporter "^0.2.24" + ethereumjs-util "^7.1.0" + ethereumjs-wallet "^1.0.1" + ethers "^5.6.8" + ganache "^7.1.0" + ganache-cli "^6.12.2" + hardhat "^2.9.5" + hardhat-deploy "^0.9.3" + hardhat-deploy-ethers "^0.3.0-beta.11" + hardhat-gas-reporter "^1.0.7" + solc "^0.8.15" + source-map-support "^0.5.19" + typescript "^4.3.5" + +"scw-contracts-v1.0.1@npm:scw-contracts@1.0.7": + version "1.0.7" + resolved "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.7.tgz" + integrity sha512-5Y2vpNIeHW2VsBIaukkKNn1/bjBBQlR8Dbbpi/UrHPSKU8A577ezZJZbWKysqh21IuFDJ44YRzaQDtTlLBDYDg== + dependencies: + "@account-abstraction/contracts" "^0.2.0" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/constants" "^5.6.1" + "@nomiclabs/hardhat-etherscan" "^2.1.6" + "@openzeppelin/contracts" "^4.2.0" + "@typechain/hardhat" "^2.3.0" + "@types/mocha" "^9.0.0" + chai-as-promised "^7.1.1" + chai-string "^1.5.0" + eth-gas-reporter "^0.2.24" + ethereumjs-util "^7.1.0" + ethereumjs-wallet "^1.0.1" + ethers "^5.6.8" + ganache "^7.1.0" + ganache-cli "^6.12.2" + hardhat "^2.9.5" + hardhat-deploy "^0.9.3" + hardhat-deploy-ethers "^0.3.0-beta.11" + hardhat-gas-reporter "^1.0.7" + solc "^0.8.15" + source-map-support "^0.5.19" + typescript "^4.3.5" + +secp256k1@4.0.3, secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +semaphore-async-await@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz" + integrity sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg== + +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.3.4, semver@^7.1.1, semver@^7.3.4: + version "7.3.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.0.0, semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +setimmediate@1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz" + integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz" + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + 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" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + 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" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3: + version "1.7.3" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, 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" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^2.7.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" + integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.0" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" + integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +solc@^0.8.15: + version "0.8.17" + resolved "https://registry.npmjs.org/solc/-/solc-0.8.17.tgz" + integrity sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g== + dependencies: + command-exists "^1.2.8" + commander "^8.1.0" + follow-redirects "^1.12.1" + js-sha3 "0.8.0" + memorystream "^0.3.1" + semver "^5.5.0" + tmp "0.0.33" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz" + integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== + dependencies: + is-plain-obj "^2.0.0" + +source-map-support@0.5.12: + version "0.5.12" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.13, source-map-support@^0.5.19: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spawn-command@^0.0.2-1: + version "0.0.2-1" + resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz" + integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + 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.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + 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.12" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sshpk@^1.7.0: + version "1.17.0" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^9.0.0, ssri@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz" + integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== + +string-argv@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4", 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" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +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" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +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" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, 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" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strong-log-transformer@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +supports-color@6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz" + integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== + dependencies: + has-flag "^3.0.0" + +supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^9.2.2: + version "9.2.3" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.2.3.tgz" + integrity sha512-aszYUX/DVK/ed5rFLb/dDinVJrQjG/vmU433wtqVSD800rYsJNWxh2R3USV90aLSU+UsyQkbNeffVLzc6B6foA== + +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +swarm-js@^0.1.40: + version "0.1.42" + resolved "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz" + integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^11.8.5" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + +sync-request@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + +tar-stream@~2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^4.0.2: + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: + version "6.1.11" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +tmp@0.0.33, tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +treeverse@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" + integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +"true-case-path@^2.2.1": + version "2.2.1" + resolved "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz" + integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== + +ts-command-line-args@^2.2.0: + version "2.3.1" + resolved "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz" + integrity sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + +ts-essentials@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz" + integrity sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ== + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + +ts-generator@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz" + integrity sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ== + dependencies: + "@types/mkdirp" "^0.5.2" + "@types/prettier" "^2.1.1" + "@types/resolve" "^0.0.8" + chalk "^2.4.1" + glob "^7.1.2" + mkdirp "^0.5.1" + prettier "^2.1.2" + resolve "^1.8.1" + ts-essentials "^1.0.0" + +ts-node@^10.7.0, ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.9.0: + version "3.14.1" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" + 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" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.7.2: + version "2.7.2" + resolved "https://registry.npmjs.org/type/-/type-2.7.2.tgz" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + +typechain@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz" + integrity sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ== + dependencies: + "@types/prettier" "^2.1.1" + debug "^4.1.1" + fs-extra "^7.0.0" + glob "^7.1.6" + js-sha3 "^0.8.0" + lodash "^4.17.15" + mkdirp "^1.0.4" + prettier "^2.1.2" + ts-command-line-args "^2.2.0" + ts-essentials "^7.0.1" + +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" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +"typescript@^3 || ^4": + version "4.8.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" + integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== + +typescript@^4.3.5, typescript@^4.6.3, typescript@^4.7.4: + version "4.8.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz" + integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== + +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + +uglify-js@^3.1.4: + version "3.17.2" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.2.tgz" + integrity sha512-bbxglRjsGQMchfvXZNusUcYgiB9Hx2K4AHYXQy2DITZ9Rd+JzhX7+hoocE5Winr7z2oHvPsekkBwXtigvxevXg== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + 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@^5.4.0: + version "5.10.0" + resolved "https://registry.npmjs.org/undici/-/undici-5.10.0.tgz" + integrity sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g== + +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +upath@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + +update-browserslist-db@^1.0.9: + version "1.0.9" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz" + integrity sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz" + integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== + +utf-8-validate@5.0.7: + version "5.0.7" + resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== + dependencies: + node-gyp-build "^4.3.0" + +utf-8-validate@^5.0.2: + version "5.0.9" + resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz" + integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== + dependencies: + node-gyp-build "^4.3.0" + +utf8@3.0.0, utf8@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.0: + version "0.12.4" + resolved "https://registry.npmjs.org/util/-/util-0.12.4.tgz" + integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz" + integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-compile-cache@2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" + +validate-npm-package-name@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" + integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== + dependencies: + builtins "^5.0.0" + +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +walk-up-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" + integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +web3-bzz@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.0.tgz" + integrity sha512-caDtdKeLi7+2Vb+y+cq2yyhkNjnxkFzVW0j1DtemarBg3dycG1iEl75CVQMLNO6Wkg+HH9tZtRnUyFIe5LIUeQ== + dependencies: + "@types/node" "^12.12.6" + got "12.1.0" + swarm-js "^0.1.40" + +web3-core-helpers@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz" + integrity sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw== + dependencies: + web3-eth-iban "1.8.0" + web3-utils "1.8.0" + +web3-core-method@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.0.tgz" + integrity sha512-c94RAzo3gpXwf2rf8rL8C77jOzNWF4mXUoUfZYYsiY35cJFd46jQDPI00CB5+ZbICTiA5mlVzMj4e7jAsTqiLA== + dependencies: + "@ethersproject/transactions" "^5.6.2" + web3-core-helpers "1.8.0" + web3-core-promievent "1.8.0" + web3-core-subscriptions "1.8.0" + web3-utils "1.8.0" + +web3-core-promievent@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.0.tgz" + integrity sha512-FGLyjAuOaAQ+ZhV6iuw9tg/9WvIkSZXKHQ4mdTyQ8MxVraOtFivOCbuLLsGgapfHYX+RPxsc1j1YzQjKoupagQ== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.0.tgz" + integrity sha512-2AoYCs3Owl5foWcf4uKPONyqFygSl9T54L8b581U16nsUirjhoTUGK/PBhMDVcLCmW4QQmcY5A8oPFpkQc1TTg== + dependencies: + util "^0.12.0" + web3-core-helpers "1.8.0" + web3-providers-http "1.8.0" + web3-providers-ipc "1.8.0" + web3-providers-ws "1.8.0" + +web3-core-subscriptions@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.0.tgz" + integrity sha512-7lHVRzDdg0+Gcog55lG6Q3D8JV+jN+4Ly6F8cSn9xFUAwOkdbgdWsjknQG7t7CDWy21DQkvdiY2BJF8S68AqOA== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.8.0" + +web3-core@1.8.0, web3-core@^1.7.1, web3-core@^1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-core/-/web3-core-1.8.0.tgz" + integrity sha512-9sCA+Z02ci6zoY2bAquFiDjujRwmSKHiSGi4B8IstML8okSytnzXk1izHYSynE7ahIkguhjWAuXFvX76F5rAbA== + dependencies: + "@types/bn.js" "^5.1.0" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.8.0" + web3-core-method "1.8.0" + web3-core-requestmanager "1.8.0" + web3-utils "1.8.0" + +web3-eth-abi@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.0.tgz" + integrity sha512-xPeMb2hS9YLQK/Q5YZpkcmzoRGM+/R8bogSrYHhNC3hjZSSU0YRH+1ZKK0f9YF4qDZaPMI8tKWIMSCDIpjG6fg== + dependencies: + "@ethersproject/abi" "^5.6.3" + web3-utils "1.8.0" + +web3-eth-accounts@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.0.tgz" + integrity sha512-HQ/MDSv4bexwJLvnqsM6xpGE7c2NVOqyhzOZFyMUKXbIwIq85T3TaLnM9pCN7XqMpDcfxqiZ3q43JqQVkzHdmw== + dependencies: + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/tx" "^3.3.2" + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-util "^7.0.10" + scrypt-js "^3.0.1" + uuid "3.3.2" + web3-core "1.8.0" + web3-core-helpers "1.8.0" + web3-core-method "1.8.0" + web3-utils "1.8.0" + +web3-eth-contract@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.0.tgz" + integrity sha512-6xeXhW2YoCrz2Ayf2Vm4srWiMOB6LawkvxWJDnUWJ8SMATg4Pgu42C/j8rz/enXbYWt2IKuj0kk8+QszxQbK+Q== + dependencies: + "@types/bn.js" "^5.1.0" + web3-core "1.8.0" + web3-core-helpers "1.8.0" + web3-core-method "1.8.0" + web3-core-promievent "1.8.0" + web3-core-subscriptions "1.8.0" + web3-eth-abi "1.8.0" + web3-utils "1.8.0" + +web3-eth-ens@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.0.tgz" + integrity sha512-/eFbQEwvsMOEiOhw9/iuRXCsPkqAmHHWuFOrThQkozRgcnSTRnvxkkRC/b6koiT5/HaKeUs4yQDg+/ixsIxZxA== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.8.0" + web3-core-helpers "1.8.0" + web3-core-promievent "1.8.0" + web3-eth-abi "1.8.0" + web3-eth-contract "1.8.0" + web3-utils "1.8.0" + +web3-eth-iban@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz" + integrity sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg== + dependencies: + bn.js "^5.2.1" + web3-utils "1.8.0" + +web3-eth-personal@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.0.tgz" + integrity sha512-L7FT4nR3HmsfZyIAhFpEctKkYGOjRC2h6iFKs9gnFCHZga8yLcYcGaYOBIoYtaKom99MuGBoosayWt/Twh7F5A== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.8.0" + web3-core-helpers "1.8.0" + web3-core-method "1.8.0" + web3-net "1.8.0" + web3-utils "1.8.0" + +web3-eth@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.0.tgz" + integrity sha512-hist52os3OT4TQFB/GxPSMxTh3995sz6LPvQpPvj7ktSbpg9RNSFaSsPlCT63wUAHA3PZb1FemkAIeQM5t72Lw== + dependencies: + web3-core "1.8.0" + web3-core-helpers "1.8.0" + web3-core-method "1.8.0" + web3-core-subscriptions "1.8.0" + web3-eth-abi "1.8.0" + web3-eth-accounts "1.8.0" + web3-eth-contract "1.8.0" + web3-eth-ens "1.8.0" + web3-eth-iban "1.8.0" + web3-eth-personal "1.8.0" + web3-net "1.8.0" + web3-utils "1.8.0" + +web3-net@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-net/-/web3-net-1.8.0.tgz" + integrity sha512-kX6EAacK7QrOe7DOh0t5yHS5q2kxZmTCxPVwSz9io9xBeE4n4UhmzGJ/VfhP2eM3OPKYeypcR3LEO6zZ8xn2vw== + dependencies: + web3-core "1.8.0" + web3-core-method "1.8.0" + web3-utils "1.8.0" + +web3-providers-http@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.0.tgz" + integrity sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw== + dependencies: + abortcontroller-polyfill "^1.7.3" + cross-fetch "^3.1.4" + es6-promise "^4.2.8" + web3-core-helpers "1.8.0" + +web3-providers-ipc@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.0.tgz" + integrity sha512-tAXHtVXNUOgehaBU8pzAlB3qhjn/PRpjdzEjzHNFqtRRTwzSEKOJxFeEhaUA4FzHnTlbnrs8ujHWUitcp1elfg== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.8.0" + +web3-providers-ws@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.0.tgz" + integrity sha512-bcZtSifsqyJxwkfQYamfdIRp4nhj9eJd7cxHg1uUkfLJK125WP96wyJL1xbPt7qt0MpfnTFn8/UuIqIB6nFENg== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.8.0" + websocket "^1.0.32" + +web3-shh@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.0.tgz" + integrity sha512-DNRgSa9Jf9xYFUGKSMylrf+zt3MPjhI2qF+UWX07o0y3+uf8zalDGiJOWvIS4upAsdPiKKVJ7co+Neof47OMmg== + dependencies: + web3-core "1.8.0" + web3-core-method "1.8.0" + web3-core-subscriptions "1.8.0" + web3-net "1.8.0" + +web3-utils@1.8.0, web3-utils@^1.7.1, web3-utils@^1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz" + integrity sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ== + dependencies: + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +web3@^1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz" + integrity sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA== + dependencies: + web3-bzz "1.8.0" + web3-core "1.8.0" + web3-eth "1.8.0" + web3-eth-personal "1.8.0" + web3-net "1.8.0" + web3-shh "1.8.0" + web3-utils "1.8.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +websocket@^1.0.32: + version "1.0.34" + resolved "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + 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.0" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" + integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + +which-typed-array@^1.1.2: + version "1.1.8" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz" + integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.9" + +which@1.3.1, which@^1.2.9: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@2.0.2, which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + +workerpool@6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz" + integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + 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" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-json-file@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz" + integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== + dependencies: + detect-indent "^6.0.0" + graceful-fs "^4.1.15" + is-plain-obj "^2.0.0" + make-dir "^3.0.0" + sort-keys "^4.0.0" + write-file-atomic "^3.0.0" + +write-pkg@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz" + integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== + dependencies: + sort-keys "^2.0.0" + type-fest "^0.4.1" + write-json-file "^3.2.0" + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr@^2.0.4, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xmlhttprequest@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz" + integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== + +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" + 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" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@20.2.4, yargs-parser@^20.2.2: + version "20.2.4" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@21.0.1, yargs-parser@^21.0.0: + version "21.0.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== + +yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz" + integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== + dependencies: + flat "^4.1.0" + lodash "^4.17.15" + yargs "^13.3.0" + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.0" + +yargs@13.3.2, yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.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 "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@16.2.0, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.3.1, yargs@^17.4.0: + version "17.6.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz" + integrity sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g== + 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.0.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 054e17690478c7646f9c2371a3ad273f296ebe3c Mon Sep 17 00:00:00 2001 From: Aman Raj Date: Mon, 3 Oct 2022 20:39:14 +0530 Subject: [PATCH 0163/1247] fix types --- packages/core-types/src/smart-account.types.ts | 12 ++++++------ packages/smart-account/src/SmartAccount.ts | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 2e21ed6a6..84095a5de 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -79,10 +79,10 @@ export type PrepareRefundTransactionDto = { } export type PrepareRefundTransactionsDto = { - version: string + version?: string transactions: Transaction[] - batchId: number - chainId: ChainId + batchId?: number + chainId?: ChainId } export type RefundTransactionDto = { @@ -93,11 +93,11 @@ export type RefundTransactionDto = { chainId: ChainId } export type RefundTransactionBatchDto = { - version: string + version?: string transactions: Transaction[] feeQuote: FeeQuote - batchId: number - chainId: ChainId + batchId?: number + chainId?: ChainId } export type TransactionDto = { diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 2207c5594..1be5cca8c 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -110,7 +110,7 @@ class SmartAccount { * If you wish to use your own backend server and relayer service, pass the URLs here */ // review SmartAccountConfig - constructor(walletProvider: Web3Provider, config: SmartAccountConfig) { + constructor(walletProvider: Web3Provider, config?: Partial) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } if (config) { this.#smartAccountConfig = { ...this.#smartAccountConfig, ...config } From 7b73d199bca15574c7717d73edd34e2d62c5957a Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 3 Oct 2022 23:16:45 +0400 Subject: [PATCH 0164/1247] types mismatch fix for review --- .../core-types/src/smart-account.types.ts | 24 ++--- packages/smart-account/src/SmartAccount.ts | 98 ++++++++++++------- packages/transactions/src/estimator.ts | 8 +- .../transactions/src/transaction-manager.ts | 17 ++-- packages/transactions/src/types.ts | 66 +++++++++---- 5 files changed, 135 insertions(+), 78 deletions(-) diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 84095a5de..35c7ec3cd 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -72,10 +72,10 @@ export type SendTransactionDto = { } export type PrepareRefundTransactionDto = { - version: string + version?: string transaction: Transaction - batchId: number - chainId: ChainId + batchId?: number + chainId?: ChainId } export type PrepareRefundTransactionsDto = { @@ -86,11 +86,11 @@ export type PrepareRefundTransactionsDto = { } export type RefundTransactionDto = { - version: string + version?: string transaction: Transaction feeQuote: FeeQuote - batchId: number - chainId: ChainId + batchId?: number + chainId?: ChainId } export type RefundTransactionBatchDto = { version?: string @@ -101,15 +101,15 @@ export type RefundTransactionBatchDto = { } export type TransactionDto = { - version: string, + version?: string, transaction: Transaction - batchId: number - chainId: ChainId + batchId?: number + chainId?: ChainId } export type TransactionBatchDto = { - version: string + version?: string transactions: Transaction[] - batchId: number - chainId: ChainId + batchId?: number + chainId?: ChainId } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 1be5cca8c..fba35c560 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -344,14 +344,16 @@ class SmartAccount { async prepareRefundTransaction( prepareRefundTransactionDto: PrepareRefundTransactionDto ): Promise { - // TODO - // Review @Talha - // Note : If you have provided a chainId in dto then that should be used and fallback to activer chain Id - const chainId = this.#smartAccountConfig.activeNetworkId - prepareRefundTransactionDto.chainId = chainId - prepareRefundTransactionDto.version = this.DEFAULT_VERSION - prepareRefundTransactionDto.batchId = 0 - return this.transactionManager.prepareRefundTransaction(prepareRefundTransactionDto) + let { + version, + transaction, + batchId, + chainId + } = prepareRefundTransactionDto + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + version = version ? version : this.DEFAULT_VERSION + batchId = batchId ? batchId: 0 + return this.transactionManager.prepareRefundTransaction({chainId, version, transaction, batchId}) } // Get Fee Options from relayer and make it available for display @@ -364,12 +366,17 @@ class SmartAccount { async prepareRefundTransactionBatch( prepareRefundTransactionsDto: PrepareRefundTransactionsDto ): Promise { - const chainId = this.#smartAccountConfig.activeNetworkId - prepareRefundTransactionsDto.chainId = chainId - prepareRefundTransactionsDto.version = this.DEFAULT_VERSION - prepareRefundTransactionsDto.batchId = 0 - console.log('prepareRefundTransactionsDto ', prepareRefundTransactionsDto); - return this.transactionManager.prepareRefundTransactionBatch(prepareRefundTransactionsDto) + let { + version, + transactions, + batchId, + chainId + } = prepareRefundTransactionsDto + + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + version = version ? version : this.DEFAULT_VERSION + batchId = batchId ? batchId: 0 + return this.transactionManager.prepareRefundTransactionBatch({version, chainId, batchId, transactions}) } // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions @@ -384,11 +391,17 @@ class SmartAccount { async createRefundTransaction( refundTransactionDto: RefundTransactionDto ): Promise { - const chainId = this.#smartAccountConfig.activeNetworkId - refundTransactionDto.chainId = chainId - refundTransactionDto.version = this.DEFAULT_VERSION - refundTransactionDto.batchId = 0 - return this.transactionManager.createRefundTransaction(refundTransactionDto) + let { + version, + transaction, + batchId, + feeQuote, + chainId + } = refundTransactionDto + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + version = version ? version : this.DEFAULT_VERSION + batchId = batchId ? batchId: 0 + return this.transactionManager.createRefundTransaction({version, transaction, batchId, chainId, feeQuote}) } /** @@ -399,11 +412,17 @@ class SmartAccount { * @returns */ async createTransaction(transactionDto: TransactionDto): Promise { - const chainId = this.#smartAccountConfig.activeNetworkId - transactionDto.chainId = chainId - transactionDto.version = this.DEFAULT_VERSION - transactionDto.batchId = 0 - return this.transactionManager.createTransaction(transactionDto) + let { + version, + transaction, + batchId, + chainId + } = transactionDto + + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + version = version ? version : this.DEFAULT_VERSION + batchId = batchId ? batchId: 0 + return this.transactionManager.createTransaction({chainId, version, batchId, transaction}) } /** @@ -418,10 +437,17 @@ class SmartAccount { async createTransactionBatch( transactionBatchDto: TransactionBatchDto ): Promise { - const chainId = this.#smartAccountConfig.activeNetworkId - transactionBatchDto.chainId = chainId - transactionBatchDto.version = this.DEFAULT_VERSION - return this.transactionManager.createTransactionBatch(transactionBatchDto) + let { + version, + transactions, + batchId, + chainId + } = transactionBatchDto + + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + version = version ? version : this.DEFAULT_VERSION + batchId = batchId ? batchId: 0 + return this.transactionManager.createTransactionBatch({version, transactions, chainId, batchId}) } /** @@ -434,11 +460,17 @@ class SmartAccount { async createRefundTransactionBatch( refundTransactionBatchDto: RefundTransactionBatchDto ): Promise { - const chainId = this.#smartAccountConfig.activeNetworkId - refundTransactionBatchDto.chainId = chainId - refundTransactionBatchDto.version = this.DEFAULT_VERSION - refundTransactionBatchDto.batchId = 0 - return this.transactionManager.createRefundTransactionBatch(refundTransactionBatchDto) + let { + version, + transactions, + batchId, + feeQuote, + chainId + } = refundTransactionBatchDto + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + version = version ? version : this.DEFAULT_VERSION + batchId = batchId ? batchId: 0 + return this.transactionManager.createRefundTransactionBatch({version, transactions, chainId, batchId, feeQuote}) } async prepareDeployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { diff --git a/packages/transactions/src/estimator.ts b/packages/transactions/src/estimator.ts index d89ad35ac..6556a0675 100644 --- a/packages/transactions/src/estimator.ts +++ b/packages/transactions/src/estimator.ts @@ -5,15 +5,17 @@ import NodeClient, { } from '@biconomy-sdk/node-client' import ContractUtils from './contract-utils' import { - PrepareRefundTransactionDto, - PrepareRefundTransactionsDto, EstimateSmartAccountDeploymentDto, IWalletTransaction, FAKE_SIGNATURE, ExecTransaction, IFeeRefundV1_0_1, - SmartAccountState, + SmartAccountState } from '@biconomy-sdk/core-types' +import { + PrepareRefundTransactionsDto, + PrepareRefundTransactionDto + } from './types' export class Estimator { diff --git a/packages/transactions/src/transaction-manager.ts b/packages/transactions/src/transaction-manager.ts index 28ad3e176..9a71767f5 100644 --- a/packages/transactions/src/transaction-manager.ts +++ b/packages/transactions/src/transaction-manager.ts @@ -1,14 +1,8 @@ import { encodeTransfer } from './account-utils' import { DEFAULT_FEE_RECEIVER, - PrepareRefundTransactionsDto, - PrepareRefundTransactionDto, - TransactionDto, - TransactionBatchDto, - RefundTransactionBatchDto, IMetaTransaction, MetaTransactionData, - RefundTransactionDto, IWalletTransaction, OperationType, ZERO_ADDRESS, @@ -21,6 +15,14 @@ import { EstimateSmartAccountDeploymentDto, SmartAccountState } from '@biconomy-sdk/core-types' +import { + PrepareRefundTransactionsDto, + PrepareRefundTransactionDto, + TransactionDto, + TransactionBatchDto, + RefundTransactionBatchDto, + RefundTransactionDto, +} from './types' import { ethers } from 'ethers' import EthersAdapter from '@biconomy-sdk/ethers-lib' import { GasEstimator } from './assets' @@ -333,10 +335,7 @@ class TransactionManager { chainId, version } = prepareRefundTransactionsDto - console.log('calling getFeeOptions'); - const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) - console.log('gasPriceQuotesResponse '); const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response let feeQuotes: Array = [] diff --git a/packages/transactions/src/types.ts b/packages/transactions/src/types.ts index aae8fbf17..3a9aa3ba0 100644 --- a/packages/transactions/src/types.ts +++ b/packages/transactions/src/types.ts @@ -1,24 +1,48 @@ import { - Contract, - Wallet, - utils, - BigNumber, - BigNumberish, - Signer, - PopulatedTransaction, - BytesLike -} from 'ethers' -import { - EstimateSmartAccountDeploymentDto + Transaction, + ChainId, + FeeQuote, } from '@biconomy-sdk/core-types' -import { TypedDataSigner } from '@ethersproject/abstract-signer' -import { AddressZero } from '@ethersproject/constants' -/*export interface SmartAccountTransaction extends MetaTransaction { - targetTxGas: string | number; - baseGas: string | number; - gasPrice: string | number; - gasToken: string; - refundReceiver: string; - nonce: string | number; -};*/ +export type PrepareRefundTransactionDto = { + version: string + transaction: Transaction + batchId: number + chainId: ChainId +} + +export type PrepareRefundTransactionsDto = { + version: string + transactions: Transaction[] + batchId: number + chainId: ChainId +} + +export type RefundTransactionDto = { + version: string + transaction: Transaction + feeQuote: FeeQuote + batchId: number + chainId: ChainId +} +export type RefundTransactionBatchDto = { + version: string + transactions: Transaction[] + feeQuote: FeeQuote + batchId: number + chainId: ChainId +} + +export type TransactionDto = { + version: string, + transaction: Transaction + batchId: number + chainId: ChainId +} + +export type TransactionBatchDto = { + version: string + transactions: Transaction[] + batchId: number + chainId: ChainId +} \ No newline at end of file From 965215834ce04f302b99db9bacb81051689390c0 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 3 Oct 2022 23:30:37 +0400 Subject: [PATCH 0165/1247] version update for testing --- lerna.json | 2 +- packages/account-abstraction/package.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/gas-estimator/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lerna.json b/lerna.json index 24149a1b3..13de3ca6e 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], "npmClient": "yarn", - "version": "independent", + "version": "1.0.12", "useWorkspaces": true } \ No newline at end of file diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index b1e23728e..f99eea7a1 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/account-abstraction", - "version": "1.0.11", + "version": "1.0.12", "description": "Account abstraction APIs to prepare user operations ", "keywords": [ "account-abstraction", diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 8455011f2..78859b9d1 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.11", + "version": "1.0.12", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 5413f613c..c4b47a0bc 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.11", + "version": "1.0.12", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index 9bf2d6829..cecc90368 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/gas-estimator", - "version": "1.0.11", + "version": "1.0.12", "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", "keywords": [ "gas-estimation", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index a75c21eb6..a0ac49e0c 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.11", + "version": "1.0.12", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index d30a0926b..e1fdc90ca 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.11", + "version": "1.0.12", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index b25abb400..6481e1baa 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.11", + "version": "1.0.12", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 4dbcb1f2a..3a078acfc 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.11", + "version": "1.0.12", "description": "utils for sending all transaction legos", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From 707f28bc694263eebd896448c7b830bb0d5b9f21 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 4 Oct 2022 15:52:19 +0400 Subject: [PATCH 0166/1247] build fix --- packages/account-abstraction/package.json | 8 +++--- packages/account-abstraction/tsconfig.json | 4 ++- .../common/contracts/test/SampleRecipient.sol | 21 --------------- .../contracts/test/SingletonFactory.sol | 26 ------------------- packages/common/package.json | 6 ++++- packages/common/tsconfig.json | 10 +++++++ tsconfig.json | 2 ++ 7 files changed, 25 insertions(+), 52 deletions(-) delete mode 100644 packages/common/contracts/test/SampleRecipient.sol delete mode 100644 packages/common/contracts/test/SingletonFactory.sol create mode 100644 packages/common/tsconfig.json diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index d4c36a757..98a8eb702 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -37,19 +37,21 @@ }, "dependencies": { "@account-abstraction/contracts": "^0.2.0", - "@biconomy-sdk/common": "1.0.11", + "@biconomy-sdk/common": "*", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/networks": "^5.7.0", "@ethersproject/properties": "^5.7.0", "@ethersproject/providers": "^5.7.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.6", "@nomiclabs/hardhat-ethers": "^2.0.0", "ethers": "^5.7.0", - "hardhat": "^2.9.7" + "hardhat": "^2.9.7", + "solidity-coverage": "^0.7.22" }, "devDependencies": { + "@biconomy-sdk/common": "*", "@biconomy-sdk/core-types": "1.0.11", - "@biconomy-sdk/common": "1.0.11", "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", "@nomicfoundation/hardhat-toolbox": "^1.0.2", "@nomiclabs/hardhat-ethers": "^2.0.0", diff --git a/packages/account-abstraction/tsconfig.json b/packages/account-abstraction/tsconfig.json index c4202fe28..9022d270b 100644 --- a/packages/account-abstraction/tsconfig.json +++ b/packages/account-abstraction/tsconfig.json @@ -5,6 +5,8 @@ "outDir": "dist", "baseUrl": "src" }, - "include": ["src"] + "exclude": ["dist", "node_modules"], + "include": ["src"], + "files": ["./hardhat.config.ts"] } \ No newline at end of file diff --git a/packages/common/contracts/test/SampleRecipient.sol b/packages/common/contracts/test/SampleRecipient.sol deleted file mode 100644 index 7110710cd..000000000 --- a/packages/common/contracts/test/SampleRecipient.sol +++ /dev/null @@ -1,21 +0,0 @@ -//SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -// TODO: get hardhat types from '@account-abstraction' package directly -// only to import the file in hardhat compilation -import "@account-abstraction/contracts/samples/SimpleWallet.sol"; - -contract SampleRecipient { - - SimpleWallet wallet; - - event Sender(address txOrigin, address msgSender, string message); - - function something(string memory message) public { - emit Sender(tx.origin, msg.sender, message); - } - - function reverting() public { - revert( "test revert"); - } -} diff --git a/packages/common/contracts/test/SingletonFactory.sol b/packages/common/contracts/test/SingletonFactory.sol deleted file mode 100644 index 9a2fab5a3..000000000 --- a/packages/common/contracts/test/SingletonFactory.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: CC0-1.0 -pragma solidity ^0.8.15; - -/** - * @title Singleton Factory (EIP-2470) - * @notice Exposes CREATE2 (EIP-1014) to deploy bytecode on deterministic addresses based on initialization code and salt. - * @author Ricardo Guilherme Schmidt (Status Research & Development GmbH) - */ -contract SingletonFactory { - /** - * @notice Deploys `_initCode` using `_salt` for defining the deterministic address. - * @param _initCode Initialization code. - * @param _salt Arbitrary value to modify resulting address. - * @return createdContract Created contract address. - */ - function deploy(bytes memory _initCode, bytes32 _salt) - public - returns (address payable createdContract) - { - assembly { - createdContract := create2(0, add(_initCode, 0x20), mload(_initCode), _salt) - } - } -} -// IV is a value changed to generate the vanity address. -// IV: 6583047 diff --git a/packages/common/package.json b/packages/common/package.json index f795f8d80..bfb58228e 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -27,7 +27,11 @@ "hardhat-node": "hardhat node", "lint-fix": "eslint -f unix . --fix", "watch-tsc": "tsc -w --preserveWatchOutput", - "tsc": "tsc" + "tsc": "tsc", + "unbuild": "rimraf dist *.tsbuildinfo", + "build": "rimraf dist && tsc", + "format": "prettier --write \"{src,tests}/**/*.ts\"", + "lint": "tslint -p tsconfig.json" }, "bugs": { "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json new file mode 100644 index 000000000..cd15f5c0a --- /dev/null +++ b/packages/common/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src" + }, + "include": ["src"] +} + \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 2c1689a44..6ea55ccb4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,6 +15,8 @@ "./tests/**/*" ], "references": [ + { "path": "account-abstraction" }, + { "path": "common" }, { "path": "core-types" }, { "path": "ethers-lib" }, { "path": "gas-estimator" }, From 408e89e876f422121a6a91782b4012bfa736fa46 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 4 Oct 2022 16:01:34 +0400 Subject: [PATCH 0167/1247] version update --- lerna.json | 2 +- packages/account-abstraction/package.json | 4 ++-- packages/common/package.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/gas-estimator/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lerna.json b/lerna.json index 13de3ca6e..218e64937 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], "npmClient": "yarn", - "version": "1.0.12", + "version": "1.0.13", "useWorkspaces": true } \ No newline at end of file diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index 7b0286f57..ff52ff124 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/account-abstraction", - "version": "1.0.12", + "version": "1.0.13", "description": "Account abstraction APIs to prepare user operations ", "keywords": [ "account-abstraction", @@ -51,7 +51,7 @@ }, "devDependencies": { "@biconomy-sdk/common": "*", - "@biconomy-sdk/core-types": "1.0.11", + "@biconomy-sdk/core-types": "*", "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", "@nomicfoundation/hardhat-toolbox": "^1.0.2", "@nomiclabs/hardhat-ethers": "^2.0.0", diff --git a/packages/common/package.json b/packages/common/package.json index bfb58228e..7de73bc89 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/common", - "version": "1.0.11", + "version": "1.0.13", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 78859b9d1..0923e6771 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.12", + "version": "1.0.13", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index c4b47a0bc..5380419d0 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.12", + "version": "1.0.13", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index cecc90368..16922015b 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/gas-estimator", - "version": "1.0.12", + "version": "1.0.13", "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", "keywords": [ "gas-estimation", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index a0ac49e0c..15d503680 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.12", + "version": "1.0.13", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index e1fdc90ca..51b22a431 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.12", + "version": "1.0.13", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 6481e1baa..88d4549c3 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.12", + "version": "1.0.13", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 3a078acfc..f45e0a5bb 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.12", + "version": "1.0.13", "description": "utils for sending all transaction legos", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From d3b7542f5392db232e26897b8835b145835ef842 Mon Sep 17 00:00:00 2001 From: Aman Raj Date: Tue, 4 Oct 2022 19:11:25 +0530 Subject: [PATCH 0168/1247] web3-auth init --- packages/web3-auth/package.json | 39 + packages/web3-auth/src/index.ts | 3 + packages/web3-auth/tsconfig.json | 14 + rebuild.sh | 5 + tsconfig.json | 3 +- yarn.lock | 21461 ++++++++++++++++------------- 6 files changed, 11632 insertions(+), 9893 deletions(-) create mode 100644 packages/web3-auth/package.json create mode 100644 packages/web3-auth/src/index.ts create mode 100644 packages/web3-auth/tsconfig.json diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json new file mode 100644 index 000000000..40a782cc9 --- /dev/null +++ b/packages/web3-auth/package.json @@ -0,0 +1,39 @@ +{ + "name": "@biconomy-sdk/web3-auth", + "version": "1.0.12", + "description": "web3-auth for biconomy sdk", + "main": "./dist/src/index.js", + "typings": "./dist/src/index.d.ts", + "keywords": [ + "legos", + "batching", + "one-click", + "cross-chain" + ], + "author": "livingrockrises ", + "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", + "license": "MIT", + "files": [ + "dist/*", + "README.md" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" + }, + "scripts": { + "unbuild": "rimraf dist *.tsbuildinfo", + "build": "rimraf dist && tsc", + "format": "prettier --write \"{src,tests}/**/*.ts\"", + "lint": "tslint -p tsconfig.json" + }, + "bugs": { + "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@toruslabs/torus-embed": "^1.36.2" + } +} \ No newline at end of file diff --git a/packages/web3-auth/src/index.ts b/packages/web3-auth/src/index.ts new file mode 100644 index 000000000..87035215f --- /dev/null +++ b/packages/web3-auth/src/index.ts @@ -0,0 +1,3 @@ +import Torus from '@toruslabs/torus-embed' + +export default Torus diff --git a/packages/web3-auth/tsconfig.json b/packages/web3-auth/tsconfig.json new file mode 100644 index 000000000..2a945f000 --- /dev/null +++ b/packages/web3-auth/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src", + "resolveJsonModule": true, + "esModuleInterop": true, + }, + "include": [ + "src", + "src/**/*.json" + ] +} \ No newline at end of file diff --git a/rebuild.sh b/rebuild.sh index 702f45360..08540908e 100755 --- a/rebuild.sh +++ b/rebuild.sh @@ -36,6 +36,11 @@ rm -rf packages/transactions/yarn.lock rm -rf packages/transactions/package-lock.json rm -rf packages/transactions/dist +rm -rf packages/web3-auth/node_modules +rm -rf packages/web3-auth/yarn.lock +rm -rf packages/web3-auth/package-lock.json +rm -rf packages/web3-auth/dist + #npx lerna bootstrap --force-local #npm run build #npm link \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 6ea55ccb4..4d58d5982 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,7 +23,8 @@ { "path": "node-client" }, { "path": "relayer" }, { "path": "smart-account" }, - { "path": "transactions" } + { "path": "transactions" }, + { "path": "web3-auth" } ] } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 94f0e654b..47106e2de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,34 +3,34 @@ "@account-abstraction/contracts@^0.2.0": - version "0.2.0" - resolved "https://registry.npmjs.org/@account-abstraction/contracts/-/contracts-0.2.0.tgz" - integrity sha512-CbPYA7o55u1S5Fee5qIWffD/4dxJ7v+86Si8TOUOE/tAMUWP+nzU1kHKUwFrM/HT8OxAQpeXccCD4UtROLtfwA== + "integrity" "sha512-CbPYA7o55u1S5Fee5qIWffD/4dxJ7v+86Si8TOUOE/tAMUWP+nzU1kHKUwFrM/HT8OxAQpeXccCD4UtROLtfwA==" + "resolved" "https://registry.npmjs.org/@account-abstraction/contracts/-/contracts-0.2.0.tgz" + "version" "0.2.0" "@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + "integrity" "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" + "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + "version" "2.2.0" dependencies: "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + "integrity" "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.19.3": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz" - integrity sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.19.3": + "integrity" "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==" + "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz" + "version" "7.19.3" -"@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz" - integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ== +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.4.0-0", "@babel/core@^7.8.0": + "integrity" "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz" + "version" "7.19.3" dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" @@ -42,62 +42,74 @@ "@babel/template" "^7.18.10" "@babel/traverse" "^7.19.3" "@babel/types" "^7.19.3" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.2" + "json5" "^2.2.1" + "semver" "^6.3.0" "@babel/generator@^7.19.3", "@babel/generator@^7.7.2": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz" - integrity sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ== + "integrity" "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz" + "version" "7.19.3" dependencies: "@babel/types" "^7.19.3" "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" + "jsesc" "^2.5.1" -"@babel/helper-compilation-targets@^7.19.3": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz" - integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.19.3": + "integrity" "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==" + "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz" + "version" "7.19.3" dependencies: "@babel/compat-data" "^7.19.3" "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - semver "^6.3.0" + "browserslist" "^4.21.3" + "semver" "^6.3.0" + +"@babel/helper-define-polyfill-provider@^0.3.3": + "integrity" "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" + "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + "debug" "^4.1.1" + "lodash.debounce" "^4.0.8" + "resolve" "^1.14.2" + "semver" "^6.1.2" "@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + "integrity" "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" + "version" "7.18.9" "@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== + "integrity" "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==" + "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" + "version" "7.19.0" dependencies: "@babel/template" "^7.18.10" "@babel/types" "^7.19.0" "@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + "integrity" "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + "integrity" "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-transforms@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz" - integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== + "integrity" "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz" + "version" "7.19.0" dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-module-imports" "^7.18.6" @@ -108,167 +120,186 @@ "@babel/traverse" "^7.19.0" "@babel/types" "^7.19.0" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz" - integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0": + "integrity" "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz" + "version" "7.19.0" "@babel/helper-simple-access@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" - integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + "integrity" "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + "integrity" "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-string-parser@^7.18.10": - version "7.18.10" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz" - integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + "integrity" "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" + "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz" + "version" "7.18.10" "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + "integrity" "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" + "version" "7.19.1" "@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + "integrity" "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" + "version" "7.18.6" "@babel/helpers@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz" - integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== + "integrity" "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==" + "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz" + "version" "7.19.0" dependencies: "@babel/template" "^7.18.10" "@babel/traverse" "^7.19.0" "@babel/types" "^7.19.0" "@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + "integrity" "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" + "chalk" "^2.0.0" + "js-tokens" "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.3": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz" - integrity sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ== + "integrity" "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz" + "version" "7.19.3" "@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + "version" "7.8.4" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + "integrity" "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + "version" "7.12.13" dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz" - integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + "integrity" "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-runtime@^7.5.5": + "integrity" "sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz" + "version" "7.19.1" + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "babel-plugin-polyfill-corejs2" "^0.3.3" + "babel-plugin-polyfill-corejs3" "^0.6.0" + "babel-plugin-polyfill-regenerator" "^0.4.1" + "semver" "^6.3.0" + +"@babel/runtime@^7.5.5", "@babel/runtime@^7.x", "@babel/runtime@7.x": + "integrity" "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==" + "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz" + "version" "7.19.0" + dependencies: + "regenerator-runtime" "^0.13.4" + "@babel/template@^7.18.10", "@babel/template@^7.3.3": - version "7.18.10" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" - integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + "integrity" "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" + "version" "7.18.10" dependencies: "@babel/code-frame" "^7.18.6" "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.3", "@babel/traverse@^7.7.2": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz" - integrity sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ== + "integrity" "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz" + "version" "7.19.3" dependencies: "@babel/code-frame" "^7.18.6" "@babel/generator" "^7.19.3" @@ -278,118 +309,188 @@ "@babel/helper-split-export-declaration" "^7.18.6" "@babel/parser" "^7.19.3" "@babel/types" "^7.19.3" - debug "^4.1.0" - globals "^11.1.0" + "debug" "^4.1.0" + "globals" "^11.1.0" "@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.19.3", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz" - integrity sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw== + "integrity" "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz" + "version" "7.19.3" dependencies: "@babel/helper-string-parser" "^7.18.10" "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" + "to-fast-properties" "^2.0.0" "@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "integrity" "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + "version" "0.2.3" + +"@biconomy-sdk/account-abstraction@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/account-abstraction": + "resolved" "file:packages/account-abstraction" + "version" "1.0.11" + +"@biconomy-sdk/core-types@*", "@biconomy-sdk/core-types@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/core-types": + "resolved" "file:packages/core-types" + "version" "1.0.11" + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/contracts" "^5.6.0" + "@ethersproject/providers" "^5.6.8" + "@gnosis.pm/safe-deployments" "^1.16.0" + "web3-core" "^1.7.1" + +"@biconomy-sdk/ethers-lib@*", "@biconomy-sdk/ethers-lib@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/ethers-lib": + "resolved" "file:packages/ethers-lib" + "version" "1.0.11" + dependencies: + "@biconomy-sdk/core-types" "*" + "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" + "@nomiclabs/hardhat-ethers" "^2.1.0" + "@openzeppelin/contracts" "^4.6.0" + "scw-contracts-v1.0.0" "npm:scw-contracts@1.0.0" + "scw-contracts-v1.0.1" "npm:scw-contracts@1.0.8" + +"@biconomy-sdk/gas-estimator@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/gas-estimator": + "resolved" "file:packages/gas-estimator" + "version" "1.0.11" + dependencies: + "ethers" "^5.7.1" + +"@biconomy-sdk/node-client@*", "@biconomy-sdk/node-client@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/node-client": + "resolved" "file:packages/node-client" + "version" "1.0.11" + dependencies: + "@biconomy-sdk/core-types" "*" + "@ethersproject/abstract-signer" "^5.6.0" + "@gnosis.pm/safe-core-sdk" "^2.1.0" + "@nomiclabs/hardhat-ethers" "^2.1.0" + "node-fetch" "^2.6.6" + +"@biconomy-sdk/relayer@*", "@biconomy-sdk/relayer@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/relayer": + "resolved" "file:packages/relayer" + "version" "1.0.11" + dependencies: + "@biconomy-sdk/core-types" "*" + "@ethersproject/providers" "^5.6.8" + "ethers" "^5.6.9" + +"@biconomy-sdk/smart-account@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/smart-account": + "resolved" "file:packages/smart-account" + "version" "1.0.11" + dependencies: + "@biconomy-sdk/core-types" "*" + "@biconomy-sdk/ethers-lib" "*" + "@biconomy-sdk/node-client" "*" + "@biconomy-sdk/relayer" "*" + "@biconomy-sdk/transactions" "*" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/contracts" "^5.6.0" + "@ethersproject/providers" "^5.6.8" + "@gnosis.pm/safe-deployments" "^1.12.0" + "@nomiclabs/hardhat-ethers" "^2.1.0" + "@types/mocha" "^9.1.1" + "concurrently" "^7.4.0" + +"@biconomy-sdk/transactions@*", "@biconomy-sdk/transactions@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/transactions": + "resolved" "file:packages/transactions" + "version" "1.0.11" + dependencies: + "@biconomy-sdk/core-types" "*" + "@biconomy-sdk/ethers-lib" "*" + "@biconomy-sdk/node-client" "*" + "@biconomy-sdk/relayer" "*" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/constants" "^5.6.1" + "ethereumjs-util" "^7.1.5" + "ethers" "^5.6.9" + +"@biconomy-sdk/web3-auth@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/web3-auth": + "resolved" "file:packages/web3-auth" + "version" "1.0.12" + dependencies: + "@toruslabs/torus-embed" "^1.36.2" + +"@chainlink/contracts@^0.4.1": + "integrity" "sha512-wVI/KZ9nIH0iqoebVxYrZfNVWO23vwds1UrHdbF+S0JwyixtT+54xYGlot723jCrAeBeQHsDRQXnEhhbUEHpgQ==" + "resolved" "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.4.2.tgz" + "version" "0.4.2" + dependencies: + "@eth-optimism/contracts" "^0.5.21" "@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" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + "integrity" "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==" + "resolved" "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + "version" "0.8.1" dependencies: "@jridgewell/trace-mapping" "0.3.9" "@eslint/eslintrc@^1.3.2": - version "1.3.2" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz" - integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.15.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" - -"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.2", "@ethereumjs/block@^3.6.3": - version "3.6.3" - resolved "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz" - integrity sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg== - dependencies: - "@ethereumjs/common" "^2.6.5" - "@ethereumjs/tx" "^3.5.2" - ethereumjs-util "^7.1.5" - merkle-patricia-tree "^4.2.4" - -"@ethereumjs/blockchain@^5.5.2", "@ethereumjs/blockchain@^5.5.3": - version "5.5.3" - resolved "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz" - integrity sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/common" "^2.6.4" - "@ethereumjs/ethash" "^1.1.0" - debug "^4.3.3" - ethereumjs-util "^7.1.5" - level-mem "^5.0.1" - lru-cache "^5.1.1" - semaphore-async-await "^1.5.1" - -"@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": - version "2.6.5" - resolved "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz" - integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.5" - -"@ethereumjs/ethash@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz" - integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== - dependencies: - "@ethereumjs/block" "^3.5.0" - "@types/levelup" "^4.3.0" - buffer-xor "^2.0.1" - ethereumjs-util "^7.1.1" - miller-rabin "^4.0.0" - -"@ethereumjs/tx@^3.3.2", "@ethereumjs/tx@^3.5.1", "@ethereumjs/tx@^3.5.2": - version "3.5.2" - resolved "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz" - integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== + "integrity" "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "ajv" "^6.12.4" + "debug" "^4.3.2" + "espree" "^9.4.0" + "globals" "^13.15.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" + +"@eth-optimism/contracts@^0.5.21": + "integrity" "sha512-HbNUUDIM1dUAM0hWPfGp3l9/Zte40zi8QhVbUSIwdYRA7jG7cZgbteqavrjW8wwFqxkWX9IrtA0KAR7pNlSAIQ==" + "resolved" "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.37.tgz" + "version" "0.5.37" + dependencies: + "@eth-optimism/core-utils" "0.10.1" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + +"@eth-optimism/core-utils@0.10.1": + "integrity" "sha512-IJvG5UtYvyz6An9QdohlCLoeB3NBFxx2lRJKlPzvYYlfugUNNCHsajRIWIwJTcPRRma0WPd46JUsKACLJDdNrA==" + "resolved" "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.10.1.tgz" + "version" "0.10.1" + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/providers" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + "bufio" "^1.0.7" + "chai" "^4.3.4" + +"@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.4": + "integrity" "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==" + "resolved" "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz" + "version" "2.6.5" + dependencies: + "crc-32" "^1.2.0" + "ethereumjs-util" "^7.1.5" + +"@ethereumjs/tx@^3.3.0", "@ethereumjs/tx@^3.3.2": + "integrity" "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==" + "resolved" "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz" + "version" "3.5.2" dependencies: "@ethereumjs/common" "^2.6.4" - ethereumjs-util "^7.1.5" - -"@ethereumjs/vm@^5.9.0": - version "5.9.3" - resolved "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz" - integrity sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg== - dependencies: - "@ethereumjs/block" "^3.6.3" - "@ethereumjs/blockchain" "^5.5.3" - "@ethereumjs/common" "^2.6.5" - "@ethereumjs/tx" "^3.5.2" - async-eventemitter "^0.2.4" - core-js-pure "^3.0.1" - debug "^4.3.3" - ethereumjs-util "^7.1.5" - functional-red-black-tree "^1.0.1" - mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.2.4" - rustbn.js "~0.2.0" - -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + "ethereumjs-util" "^7.1.5" + +"@ethersproject/abi@^5.0.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0", "@ethersproject/abi@5.7.0": + "integrity" "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==" + "resolved" "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/address" "^5.7.0" "@ethersproject/bignumber" "^5.7.0" @@ -401,10 +502,10 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== +"@ethersproject/abstract-provider@^5.7.0", "@ethersproject/abstract-provider@5.7.0": + "integrity" "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==" + "resolved" "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/bytes" "^5.7.0" @@ -414,10 +515,10 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== +"@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2", "@ethersproject/abstract-signer@^5.7.0", "@ethersproject/abstract-signer@5.7.0": + "integrity" "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==" + "resolved" "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/bignumber" "^5.7.0" @@ -425,10 +526,10 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== +"@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.7.0", "@ethersproject/address@5.7.0": + "integrity" "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==" + "resolved" "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/bytes" "^5.7.0" @@ -436,48 +537,48 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== +"@ethersproject/base64@^5.7.0", "@ethersproject/base64@5.7.0": + "integrity" "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==" + "resolved" "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== +"@ethersproject/basex@^5.7.0", "@ethersproject/basex@5.7.0": + "integrity" "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==" + "resolved" "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== +"@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.7.0", "@ethersproject/bignumber@5.7.0": + "integrity" "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==" + "resolved" "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" + "bn.js" "^5.2.1" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== +"@ethersproject/bytes@^5.0.0", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.7.0", "@ethersproject/bytes@5.7.0": + "integrity" "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==" + "resolved" "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.1", "@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== +"@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.1", "@ethersproject/constants@^5.7.0", "@ethersproject/constants@5.7.0": + "integrity" "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==" + "resolved" "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.4.1", "@ethersproject/contracts@^5.6.0", "@ethersproject/contracts@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== +"@ethersproject/contracts@^5.4.1", "@ethersproject/contracts@^5.6.0", "@ethersproject/contracts@^5.7.0", "@ethersproject/contracts@5.7.0": + "integrity" "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==" + "resolved" "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/abi" "^5.7.0" "@ethersproject/abstract-provider" "^5.7.0" @@ -490,10 +591,10 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/transactions" "^5.7.0" -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== +"@ethersproject/hash@^5.7.0", "@ethersproject/hash@5.7.0": + "integrity" "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==" + "resolved" "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/abstract-signer" "^5.7.0" "@ethersproject/address" "^5.7.0" @@ -505,10 +606,10 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== +"@ethersproject/hdnode@^5.7.0", "@ethersproject/hdnode@5.7.0": + "integrity" "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==" + "resolved" "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/abstract-signer" "^5.7.0" "@ethersproject/basex" "^5.7.0" @@ -523,10 +624,10 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== +"@ethersproject/json-wallets@^5.7.0", "@ethersproject/json-wallets@5.7.0": + "integrity" "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==" + "resolved" "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/abstract-signer" "^5.7.0" "@ethersproject/address" "^5.7.0" @@ -539,48 +640,48 @@ "@ethersproject/random" "^5.7.0" "@ethersproject/strings" "^5.7.0" "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" + "aes-js" "3.0.0" + "scrypt-js" "3.0.1" -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== +"@ethersproject/keccak256@^5.7.0", "@ethersproject/keccak256@5.7.0": + "integrity" "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==" + "resolved" "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" + "js-sha3" "0.8.0" -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== +"@ethersproject/logger@^5.7.0", "@ethersproject/logger@5.7.0": + "integrity" "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" + "resolved" "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" + "version" "5.7.0" -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== +"@ethersproject/networks@^5.7.0", "@ethersproject/networks@5.7.1": + "integrity" "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==" + "resolved" "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" + "version" "5.7.1" dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== +"@ethersproject/pbkdf2@^5.7.0", "@ethersproject/pbkdf2@5.7.0": + "integrity" "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==" + "resolved" "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== +"@ethersproject/properties@^5.7.0", "@ethersproject/properties@5.7.0": + "integrity" "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==" + "resolved" "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.1", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@^5.6.8": - version "5.7.1" - resolved "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.1.tgz" - integrity sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ== +"@ethersproject/providers@^5.0.0", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@^5.6.8", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@5.7.1": + "integrity" "sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ==" + "resolved" "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.1.tgz" + "version" "5.7.1" dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/abstract-signer" "^5.7.0" @@ -600,50 +701,50 @@ "@ethersproject/strings" "^5.7.0" "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" + "bech32" "1.1.4" + "ws" "7.4.6" -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== +"@ethersproject/random@^5.7.0", "@ethersproject/random@5.7.0": + "integrity" "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==" + "resolved" "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== +"@ethersproject/rlp@^5.7.0", "@ethersproject/rlp@5.7.0": + "integrity" "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==" + "resolved" "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== +"@ethersproject/sha2@^5.7.0", "@ethersproject/sha2@5.7.0": + "integrity" "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==" + "resolved" "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" + "hash.js" "1.1.7" -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== +"@ethersproject/signing-key@^5.7.0", "@ethersproject/signing-key@5.7.0": + "integrity" "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==" + "resolved" "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" + "bn.js" "^5.2.1" + "elliptic" "6.5.4" + "hash.js" "1.1.7" -"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.4.0", "@ethersproject/solidity@^5.6.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== +"@ethersproject/solidity@^5.4.0", "@ethersproject/solidity@^5.6.0", "@ethersproject/solidity@5.7.0": + "integrity" "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==" + "resolved" "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/bytes" "^5.7.0" @@ -652,19 +753,19 @@ "@ethersproject/sha2" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== +"@ethersproject/strings@^5.7.0", "@ethersproject/strings@5.7.0": + "integrity" "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==" + "resolved" "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== +"@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0", "@ethersproject/transactions@5.7.0": + "integrity" "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==" + "resolved" "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/address" "^5.7.0" "@ethersproject/bignumber" "^5.7.0" @@ -677,18 +778,18 @@ "@ethersproject/signing-key" "^5.7.0" "@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + "integrity" "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==" + "resolved" "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.4.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== +"@ethersproject/wallet@^5.4.0", "@ethersproject/wallet@5.7.0": + "integrity" "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==" + "resolved" "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/abstract-signer" "^5.7.0" @@ -706,10 +807,10 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== +"@ethersproject/web@^5.7.0", "@ethersproject/web@5.7.1": + "integrity" "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==" + "resolved" "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" + "version" "5.7.1" dependencies: "@ethersproject/base64" "^5.7.0" "@ethersproject/bytes" "^5.7.0" @@ -717,10 +818,10 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== +"@ethersproject/wordlists@^5.7.0", "@ethersproject/wordlists@5.7.0": + "integrity" "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==" + "resolved" "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/hash" "^5.7.0" @@ -729,143 +830,143 @@ "@ethersproject/strings" "^5.7.0" "@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + "version" "1.1.3" "@gnosis.pm/safe-core-sdk-types@^1.4.0", "@gnosis.pm/safe-core-sdk-types@^1.6.1": - version "1.6.1" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.6.1.tgz" - integrity sha512-KRflubR/W2qVeRxavh2ALtXI6CyCCcyuL1olJAVn/xkZVYJJjvXn+5GxbRloJFIJrgFCNWYbHrO0sXtywP5Y1g== + "integrity" "sha512-KRflubR/W2qVeRxavh2ALtXI6CyCCcyuL1olJAVn/xkZVYJJjvXn+5GxbRloJFIJrgFCNWYbHrO0sXtywP5Y1g==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.6.1.tgz" + "version" "1.6.1" dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/contracts" "^5.7.0" "@gnosis.pm/safe-deployments" "1.16.0" - web3-core "^1.8.0" - web3-utils "^1.8.0" + "web3-core" "^1.8.0" + "web3-utils" "^1.8.0" "@gnosis.pm/safe-core-sdk-utils@^1.1.0", "@gnosis.pm/safe-core-sdk-utils@^1.4.1": - version "1.4.1" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.4.1.tgz" - integrity sha512-VrebOIw5ULOgTuV1hK4V0Wp1cg50Sw9urUYyBFnkI6kzL13f3ngGa5IUZ6O+HOOSNrO2mB+EEr09gWp5IN7ECA== + "integrity" "sha512-VrebOIw5ULOgTuV1hK4V0Wp1cg50Sw9urUYyBFnkI6kzL13f3ngGa5IUZ6O+HOOSNrO2mB+EEr09gWp5IN7ECA==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.4.1.tgz" + "version" "1.4.1" dependencies: "@gnosis.pm/safe-core-sdk-types" "^1.6.1" - semver "^7.3.7" - web3-utils "^1.8.0" + "semver" "^7.3.7" + "web3-utils" "^1.8.0" "@gnosis.pm/safe-core-sdk@^2.1.0": - version "2.4.1" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.4.1.tgz" - integrity sha512-FlpHW+jzKNtO9HMFF+R7IbdvJM5J4R4JW76jSe3MAbUA5KlmAW9BFDl/sgdQTREttIZMG2dr9A94RU9YcsljXw== + "integrity" "sha512-FlpHW+jzKNtO9HMFF+R7IbdvJM5J4R4JW76jSe3MAbUA5KlmAW9BFDl/sgdQTREttIZMG2dr9A94RU9YcsljXw==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.4.1.tgz" + "version" "2.4.1" dependencies: "@ethersproject/solidity" "^5.6.0" "@gnosis.pm/safe-core-sdk-types" "^1.4.0" "@gnosis.pm/safe-deployments" "1.15.0" - ethereumjs-util "^7.1.4" - semver "^7.3.5" - web3-utils "^1.7.1" + "ethereumjs-util" "^7.1.4" + "semver" "^7.3.5" + "web3-utils" "^1.7.1" -"@gnosis.pm/safe-deployments@1.15.0": - version "1.15.0" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz" - integrity sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew== +"@gnosis.pm/safe-deployments@^1.12.0", "@gnosis.pm/safe-deployments@^1.16.0", "@gnosis.pm/safe-deployments@1.16.0": + "integrity" "sha512-5Wakso6SiulstuZfz3gH6yME8Q50BT5dVxIfgWz4vzOmyyqmAVstMd0VIwyw6IDee0gU4mHKZjhD3UXPKEvRCw==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.16.0.tgz" + "version" "1.16.0" dependencies: - semver "^7.3.7" + "semver" "^7.3.7" -"@gnosis.pm/safe-deployments@1.16.0", "@gnosis.pm/safe-deployments@^1.12.0", "@gnosis.pm/safe-deployments@^1.16.0": - version "1.16.0" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.16.0.tgz" - integrity sha512-5Wakso6SiulstuZfz3gH6yME8Q50BT5dVxIfgWz4vzOmyyqmAVstMd0VIwyw6IDee0gU4mHKZjhD3UXPKEvRCw== +"@gnosis.pm/safe-deployments@1.15.0": + "integrity" "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz" + "version" "1.15.0" dependencies: - semver "^7.3.7" + "semver" "^7.3.7" "@gnosis.pm/safe-ethers-lib@^1.1.0": - version "1.6.1" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.6.1.tgz" - integrity sha512-rUv2Dwi3whTmcgx6EejI5llMDnxhwyTX/8j01K6fWBfOAFaUV78gbtPcwmdr1WCVVcXSdKszyarus5fyZTKNfA== + "integrity" "sha512-rUv2Dwi3whTmcgx6EejI5llMDnxhwyTX/8j01K6fWBfOAFaUV78gbtPcwmdr1WCVVcXSdKszyarus5fyZTKNfA==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.6.1.tgz" + "version" "1.6.1" dependencies: "@gnosis.pm/safe-core-sdk-types" "^1.6.1" "@gnosis.pm/safe-core-sdk-utils" "^1.4.1" - ethers "^5.7.1" + "ethers" "^5.7.1" "@gnosis.pm/safe-web3-lib@^1.1.0": - version "1.6.1" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.6.1.tgz" - integrity sha512-fOXtxjSmetky4CGapAWPTmzRLBDG+5sGbwriypy6OZ3rcPWvwRyC8p06IhpqofadJIEQP5HphPECtQNVSPEkjA== + "integrity" "sha512-fOXtxjSmetky4CGapAWPTmzRLBDG+5sGbwriypy6OZ3rcPWvwRyC8p06IhpqofadJIEQP5HphPECtQNVSPEkjA==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.6.1.tgz" + "version" "1.6.1" dependencies: "@ethersproject/bignumber" "^5.7.0" "@gnosis.pm/safe-core-sdk-types" "^1.6.1" "@gnosis.pm/safe-core-sdk-utils" "^1.4.1" - web3 "^1.8.0" - web3-core "^1.8.0" - web3-utils "^1.8.0" + "web3" "^1.8.0" + "web3-core" "^1.8.0" + "web3-utils" "^1.8.0" "@humanwhocodes/config-array@^0.10.5": - version "0.10.7" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz" - integrity sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w== + "integrity" "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz" + "version" "0.10.7" dependencies: "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" + "debug" "^4.1.1" + "minimatch" "^3.0.4" "@humanwhocodes/gitignore-to-minimatch@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" - integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + "integrity" "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" + "version" "1.0.2" "@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + "integrity" "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + "version" "1.0.1" "@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + "version" "1.2.1" "@hutson/parse-repository-url@^3.0.0": - version "3.0.2" - resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz" - integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + "integrity" "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==" + "resolved" "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz" + "version" "3.0.2" "@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + "integrity" "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==" + "resolved" "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz" + "version" "1.1.0" "@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==" + "resolved" "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + "version" "1.1.0" dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" + "camelcase" "^5.3.1" + "find-up" "^4.1.0" + "get-package-type" "^0.1.0" + "js-yaml" "^3.13.1" + "resolve-from" "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + "integrity" "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + "resolved" "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + "version" "0.1.3" "@jest/console@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz" - integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + "integrity" "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==" + "resolved" "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - slash "^3.0.0" + "chalk" "^4.0.0" + "jest-message-util" "^28.1.3" + "jest-util" "^28.1.3" + "slash" "^3.0.0" "@jest/core@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz" - integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== + "integrity" "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==" + "resolved" "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/console" "^28.1.3" "@jest/reporters" "^28.1.3" @@ -873,80 +974,80 @@ "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^28.1.3" - jest-config "^28.1.3" - jest-haste-map "^28.1.3" - jest-message-util "^28.1.3" - jest-regex-util "^28.0.2" - jest-resolve "^28.1.3" - jest-resolve-dependencies "^28.1.3" - jest-runner "^28.1.3" - jest-runtime "^28.1.3" - jest-snapshot "^28.1.3" - jest-util "^28.1.3" - jest-validate "^28.1.3" - jest-watcher "^28.1.3" - micromatch "^4.0.4" - pretty-format "^28.1.3" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.9" + "jest-changed-files" "^28.1.3" + "jest-config" "^28.1.3" + "jest-haste-map" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-regex-util" "^28.0.2" + "jest-resolve" "^28.1.3" + "jest-resolve-dependencies" "^28.1.3" + "jest-runner" "^28.1.3" + "jest-runtime" "^28.1.3" + "jest-snapshot" "^28.1.3" + "jest-util" "^28.1.3" + "jest-validate" "^28.1.3" + "jest-watcher" "^28.1.3" + "micromatch" "^4.0.4" + "pretty-format" "^28.1.3" + "rimraf" "^3.0.0" + "slash" "^3.0.0" + "strip-ansi" "^6.0.0" "@jest/environment@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz" - integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== + "integrity" "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==" + "resolved" "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/fake-timers" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - jest-mock "^28.1.3" + "jest-mock" "^28.1.3" "@jest/expect-utils@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz" - integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + "integrity" "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==" + "resolved" "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz" + "version" "28.1.3" dependencies: - jest-get-type "^28.0.2" + "jest-get-type" "^28.0.2" "@jest/expect@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz" - integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== + "integrity" "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==" + "resolved" "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz" + "version" "28.1.3" dependencies: - expect "^28.1.3" - jest-snapshot "^28.1.3" + "expect" "^28.1.3" + "jest-snapshot" "^28.1.3" "@jest/fake-timers@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz" - integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== + "integrity" "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==" + "resolved" "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" - jest-message-util "^28.1.3" - jest-mock "^28.1.3" - jest-util "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-mock" "^28.1.3" + "jest-util" "^28.1.3" "@jest/globals@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz" - integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== + "integrity" "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==" + "resolved" "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/environment" "^28.1.3" "@jest/expect" "^28.1.3" "@jest/types" "^28.1.3" "@jest/reporters@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz" - integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== + "integrity" "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==" + "resolved" "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz" + "version" "28.1.3" dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^28.1.3" @@ -955,162 +1056,162 @@ "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - jest-worker "^28.1.3" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - terminal-link "^2.0.0" - v8-to-istanbul "^9.0.1" + "chalk" "^4.0.0" + "collect-v8-coverage" "^1.0.0" + "exit" "^0.1.2" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "istanbul-lib-coverage" "^3.0.0" + "istanbul-lib-instrument" "^5.1.0" + "istanbul-lib-report" "^3.0.0" + "istanbul-lib-source-maps" "^4.0.0" + "istanbul-reports" "^3.1.3" + "jest-message-util" "^28.1.3" + "jest-util" "^28.1.3" + "jest-worker" "^28.1.3" + "slash" "^3.0.0" + "string-length" "^4.0.1" + "strip-ansi" "^6.0.0" + "terminal-link" "^2.0.0" + "v8-to-istanbul" "^9.0.1" "@jest/schemas@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" - integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + "integrity" "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==" + "resolved" "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" + "version" "28.1.3" dependencies: "@sinclair/typebox" "^0.24.1" "@jest/source-map@^28.1.2": - version "28.1.2" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz" - integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== + "integrity" "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==" + "resolved" "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz" + "version" "28.1.2" dependencies: "@jridgewell/trace-mapping" "^0.3.13" - callsites "^3.0.0" - graceful-fs "^4.2.9" + "callsites" "^3.0.0" + "graceful-fs" "^4.2.9" "@jest/test-result@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz" - integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== + "integrity" "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==" + "resolved" "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/console" "^28.1.3" "@jest/types" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" + "collect-v8-coverage" "^1.0.0" "@jest/test-sequencer@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz" - integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== + "integrity" "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==" + "resolved" "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/test-result" "^28.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - slash "^3.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.3" + "slash" "^3.0.0" "@jest/transform@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz" - integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== + "integrity" "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==" + "resolved" "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/core" "^7.11.6" "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - jest-regex-util "^28.0.2" - jest-util "^28.1.3" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.1" + "babel-plugin-istanbul" "^6.1.1" + "chalk" "^4.0.0" + "convert-source-map" "^1.4.0" + "fast-json-stable-stringify" "^2.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.3" + "jest-regex-util" "^28.0.2" + "jest-util" "^28.1.3" + "micromatch" "^4.0.4" + "pirates" "^4.0.4" + "slash" "^3.0.0" + "write-file-atomic" "^4.0.1" "@jest/types@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz" - integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + "integrity" "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==" + "resolved" "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/schemas" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^17.0.8" - chalk "^4.0.0" + "chalk" "^4.0.0" "@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + "integrity" "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" + "version" "0.1.1" dependencies: "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + "integrity" "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + "version" "0.3.2" dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + "integrity" "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + "version" "3.1.0" "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + "version" "1.1.2" "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + "integrity" "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + "version" "1.4.14" -"@jridgewell/trace-mapping@0.3.9", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": + "integrity" "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz" + "version" "0.3.15" dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13": - version "0.3.15" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz" - integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== +"@jridgewell/trace-mapping@0.3.9": + "integrity" "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + "version" "0.3.9" dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" "@lerna/add@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.5.4.tgz#2c925ced1cb42779a440f046c37aa0151a560b87" - integrity sha512-eMEWdyH2ijjDuOCZ5qI7nZlWtVmOx/aABGyNmNEG1ChNDQSmxgEmmqxagQCtW7+T63e9AaHsjrxYahBWYBnuhw== + "integrity" "sha512-eMEWdyH2ijjDuOCZ5qI7nZlWtVmOx/aABGyNmNEG1ChNDQSmxgEmmqxagQCtW7+T63e9AaHsjrxYahBWYBnuhw==" + "resolved" "https://registry.npmjs.org/@lerna/add/-/add-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/bootstrap" "5.5.4" "@lerna/command" "5.5.4" "@lerna/filter-options" "5.5.4" "@lerna/npm-conf" "5.5.4" "@lerna/validation-error" "5.5.4" - dedent "^0.7.0" - npm-package-arg "8.1.1" - p-map "^4.0.0" - pacote "^13.6.1" - semver "^7.3.4" + "dedent" "^0.7.0" + "npm-package-arg" "8.1.1" + "p-map" "^4.0.0" + "pacote" "^13.6.1" + "semver" "^7.3.4" "@lerna/bootstrap@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-5.5.4.tgz#919fdccf9447ce1b6901fb30ca69860f6563c958" - integrity sha512-MGC6naM0DrFNYTZPEW477uqWCqXmI4MRBKjtGNMiJhczYcFdD6x30u688zoAuO5HUoyqL6Uw7Ea28GVEyDm93Q== + "integrity" "sha512-MGC6naM0DrFNYTZPEW477uqWCqXmI4MRBKjtGNMiJhczYcFdD6x30u688zoAuO5HUoyqL6Uw7Ea28GVEyDm93Q==" + "resolved" "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/command" "5.5.4" "@lerna/filter-options" "5.5.4" @@ -1125,20 +1226,20 @@ "@lerna/symlink-dependencies" "5.5.4" "@lerna/validation-error" "5.5.4" "@npmcli/arborist" "5.3.0" - dedent "^0.7.0" - get-port "^5.1.1" - multimatch "^5.0.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" - semver "^7.3.4" + "dedent" "^0.7.0" + "get-port" "^5.1.1" + "multimatch" "^5.0.0" + "npm-package-arg" "8.1.1" + "npmlog" "^6.0.2" + "p-map" "^4.0.0" + "p-map-series" "^2.1.0" + "p-waterfall" "^2.1.1" + "semver" "^7.3.4" "@lerna/changed@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-5.5.4.tgz#61742e6d92e7f0aaec6b787f6b0a6203ef444c99" - integrity sha512-/tns9PA5m9XCKJk13RRJotCOFR/bZ+7zfxz20zpIELT9GehZLTaEPsItxVnlqQ4dMHMe0fl6XG6dFqeBqLOW4g== + "integrity" "sha512-/tns9PA5m9XCKJk13RRJotCOFR/bZ+7zfxz20zpIELT9GehZLTaEPsItxVnlqQ4dMHMe0fl6XG6dFqeBqLOW4g==" + "resolved" "https://registry.npmjs.org/@lerna/changed/-/changed-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/collect-updates" "5.5.4" "@lerna/command" "5.5.4" @@ -1146,153 +1247,153 @@ "@lerna/output" "5.5.4" "@lerna/check-working-tree@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-5.5.4.tgz#f19bddb23543010a848a3f44e66fc63929f6d4c9" - integrity sha512-uIHlEb/JSX9P230UNH69W21fWM4oKu8ulRdXuYCBckpbJkDz9nT1yS2y4wUHx+3GfXWqGKygTh8Z06vSdYg+2A== + "integrity" "sha512-uIHlEb/JSX9P230UNH69W21fWM4oKu8ulRdXuYCBckpbJkDz9nT1yS2y4wUHx+3GfXWqGKygTh8Z06vSdYg+2A==" + "resolved" "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/collect-uncommitted" "5.5.4" "@lerna/describe-ref" "5.5.4" "@lerna/validation-error" "5.5.4" "@lerna/child-process@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-5.5.4.tgz#97a7d2c994895e56ef8a0c49716a0a692867b5aa" - integrity sha512-1QlxFASrKlV3cG7XPFolOdrS4W784zv4DgipmTxaP++VlVAwbrHhqUdIEytDV6d0rlRksf6LPYzJhXdwlBkCEQ== + "integrity" "sha512-1QlxFASrKlV3cG7XPFolOdrS4W784zv4DgipmTxaP++VlVAwbrHhqUdIEytDV6d0rlRksf6LPYzJhXdwlBkCEQ==" + "resolved" "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.5.4.tgz" + "version" "5.5.4" dependencies: - chalk "^4.1.0" - execa "^5.0.0" - strong-log-transformer "^2.1.0" + "chalk" "^4.1.0" + "execa" "^5.0.0" + "strong-log-transformer" "^2.1.0" "@lerna/clean@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-5.5.4.tgz#329ecf24c5c66056f0ba96fdff1d1bc2b9bed5fe" - integrity sha512-q1fXRm6ZXo3HrFfsgyY9C83haotPT/Xa5K8fQX6GADuNLk0Xo3+ycouHeidblRLmQtCa3WNPEmCthTuaWrSUoQ== + "integrity" "sha512-q1fXRm6ZXo3HrFfsgyY9C83haotPT/Xa5K8fQX6GADuNLk0Xo3+ycouHeidblRLmQtCa3WNPEmCthTuaWrSUoQ==" + "resolved" "https://registry.npmjs.org/@lerna/clean/-/clean-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/command" "5.5.4" "@lerna/filter-options" "5.5.4" "@lerna/prompt" "5.5.4" "@lerna/pulse-till-done" "5.5.4" "@lerna/rimraf-dir" "5.5.4" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" + "p-map" "^4.0.0" + "p-map-series" "^2.1.0" + "p-waterfall" "^2.1.1" "@lerna/cli@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-5.5.4.tgz#f1c31d59d9be2aaafab6b856c7858a3da98d7b82" - integrity sha512-4uJEFEN0QNnQgghbpdY5wLmBPOeUeBeCKGh9s2pc1fkn0I1wKDhG0QByOfcf+jGuid2bA7DXzvJRXRgq0fWw0A== + "integrity" "sha512-4uJEFEN0QNnQgghbpdY5wLmBPOeUeBeCKGh9s2pc1fkn0I1wKDhG0QByOfcf+jGuid2bA7DXzvJRXRgq0fWw0A==" + "resolved" "https://registry.npmjs.org/@lerna/cli/-/cli-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/global-options" "5.5.4" - dedent "^0.7.0" - npmlog "^6.0.2" - yargs "^16.2.0" + "dedent" "^0.7.0" + "npmlog" "^6.0.2" + "yargs" "^16.2.0" "@lerna/collect-uncommitted@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-5.5.4.tgz#cdfb5f0c1651742f72147189e38822b815e45892" - integrity sha512-xLCsp8Qx5z/BWCxqUt8W8Se2XJcCQE6YUAti9TSWD5Ar+M5Etkgz2YJiUjZfZrsWZPBCqNfGfxx9Sjs7a/r+8A== + "integrity" "sha512-xLCsp8Qx5z/BWCxqUt8W8Se2XJcCQE6YUAti9TSWD5Ar+M5Etkgz2YJiUjZfZrsWZPBCqNfGfxx9Sjs7a/r+8A==" + "resolved" "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" - chalk "^4.1.0" - npmlog "^6.0.2" + "chalk" "^4.1.0" + "npmlog" "^6.0.2" "@lerna/collect-updates@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-5.5.4.tgz#424fbcb4a717eb2ed7c6a2015857d85d7e2e131f" - integrity sha512-m34bVoMO5QOd5K5uyAtQtkTiXBIEJHydXMwNXs+YTIAgy82JXNHfZE9vV63Fd5ZWOGY6ORthuXuC2Jn0Vx9tQA== + "integrity" "sha512-m34bVoMO5QOd5K5uyAtQtkTiXBIEJHydXMwNXs+YTIAgy82JXNHfZE9vV63Fd5ZWOGY6ORthuXuC2Jn0Vx9tQA==" + "resolved" "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/describe-ref" "5.5.4" - minimatch "^3.0.4" - npmlog "^6.0.2" - slash "^3.0.0" + "minimatch" "^3.0.4" + "npmlog" "^6.0.2" + "slash" "^3.0.0" "@lerna/command@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-5.5.4.tgz#f06f6dad4b5eed05fb4b98165d054af21be79715" - integrity sha512-/7drNy2DjVjDjm2knsDfEQIFEdRgPE2/lQ3yfEjVbXqs319o6KWbQVeoNy5GjGnLvc3v3eObA0cSJXHzEV11Bg== + "integrity" "sha512-/7drNy2DjVjDjm2knsDfEQIFEdRgPE2/lQ3yfEjVbXqs319o6KWbQVeoNy5GjGnLvc3v3eObA0cSJXHzEV11Bg==" + "resolved" "https://registry.npmjs.org/@lerna/command/-/command-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/package-graph" "5.5.4" "@lerna/project" "5.5.4" "@lerna/validation-error" "5.5.4" "@lerna/write-log-file" "5.5.4" - clone-deep "^4.0.1" - dedent "^0.7.0" - execa "^5.0.0" - is-ci "^2.0.0" - npmlog "^6.0.2" + "clone-deep" "^4.0.1" + "dedent" "^0.7.0" + "execa" "^5.0.0" + "is-ci" "^2.0.0" + "npmlog" "^6.0.2" "@lerna/conventional-commits@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-5.5.4.tgz#d4fbc9240ec95bc73395b87b2e778cb95ac57b36" - integrity sha512-zLcaveLXnIDYo3e9ChKsHSxiG7vOJeKdcoC5Fj8WH4DjAq/aqy15TE5SJr6aO8hOU/ph0EonPwyQBf4X2Lg5fg== + "integrity" "sha512-zLcaveLXnIDYo3e9ChKsHSxiG7vOJeKdcoC5Fj8WH4DjAq/aqy15TE5SJr6aO8hOU/ph0EonPwyQBf4X2Lg5fg==" + "resolved" "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/validation-error" "5.5.4" - conventional-changelog-angular "^5.0.12" - conventional-changelog-core "^4.2.4" - conventional-recommended-bump "^6.1.0" - fs-extra "^9.1.0" - get-stream "^6.0.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - pify "^5.0.0" - semver "^7.3.4" + "conventional-changelog-angular" "^5.0.12" + "conventional-changelog-core" "^4.2.4" + "conventional-recommended-bump" "^6.1.0" + "fs-extra" "^9.1.0" + "get-stream" "^6.0.0" + "npm-package-arg" "8.1.1" + "npmlog" "^6.0.2" + "pify" "^5.0.0" + "semver" "^7.3.4" "@lerna/create-symlink@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-5.5.4.tgz#91314744a715ad0ef4d330d0b4cf30cadd052025" - integrity sha512-TOfkeEQGhE90mvtky0Vpfl+6hwBz0tSXV0+gjRBmla/sYU/9+QoSH36TauHrmu/O3C8/CWtoGruxiWq8jP6Gyw== + "integrity" "sha512-TOfkeEQGhE90mvtky0Vpfl+6hwBz0tSXV0+gjRBmla/sYU/9+QoSH36TauHrmu/O3C8/CWtoGruxiWq8jP6Gyw==" + "resolved" "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.5.4.tgz" + "version" "5.5.4" dependencies: - cmd-shim "^5.0.0" - fs-extra "^9.1.0" - npmlog "^6.0.2" + "cmd-shim" "^5.0.0" + "fs-extra" "^9.1.0" + "npmlog" "^6.0.2" "@lerna/create@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-5.5.4.tgz#defb6bc3ab263bf8acbbfc34407a4de23cd2594f" - integrity sha512-mmZKy5U4OKBr/r8Tm6C8gubYHubQaHdPJ+aYuA/l4uCfK0p/Jly84Fy7M3kclcqm8FKDPKDhlp0Y2jnc32jBbA== + "integrity" "sha512-mmZKy5U4OKBr/r8Tm6C8gubYHubQaHdPJ+aYuA/l4uCfK0p/Jly84Fy7M3kclcqm8FKDPKDhlp0Y2jnc32jBbA==" + "resolved" "https://registry.npmjs.org/@lerna/create/-/create-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/command" "5.5.4" "@lerna/npm-conf" "5.5.4" "@lerna/validation-error" "5.5.4" - dedent "^0.7.0" - fs-extra "^9.1.0" - globby "^11.0.2" - init-package-json "^3.0.2" - npm-package-arg "8.1.1" - p-reduce "^2.1.0" - pacote "^13.6.1" - pify "^5.0.0" - semver "^7.3.4" - slash "^3.0.0" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" - yargs-parser "20.2.4" + "dedent" "^0.7.0" + "fs-extra" "^9.1.0" + "globby" "^11.0.2" + "init-package-json" "^3.0.2" + "npm-package-arg" "8.1.1" + "p-reduce" "^2.1.0" + "pacote" "^13.6.1" + "pify" "^5.0.0" + "semver" "^7.3.4" + "slash" "^3.0.0" + "validate-npm-package-license" "^3.0.4" + "validate-npm-package-name" "^4.0.0" + "yargs-parser" "20.2.4" "@lerna/describe-ref@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-5.5.4.tgz#8b5dc90b5570e6646ca813fe4006e06408acfb05" - integrity sha512-2LDEsuSbZTta7SuwKVo9ofeKvxqy4YFNOjEt7+JceZIfh4si3MjIPBX7l8AsCaUmwJnpOEYba0aau72AUAOtoA== + "integrity" "sha512-2LDEsuSbZTta7SuwKVo9ofeKvxqy4YFNOjEt7+JceZIfh4si3MjIPBX7l8AsCaUmwJnpOEYba0aau72AUAOtoA==" + "resolved" "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/diff@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-5.5.4.tgz#21344bd0fb5d2578b7873b16959ceee6eee4e512" - integrity sha512-OTieqJA4zKAV0KeG0nXwPnCkwg3LH+ucXlelnj1w+gaP2ndHbJVwgUWXGpqCHk8tn935KKOULhP7BGmAwvTYlQ== + "integrity" "sha512-OTieqJA4zKAV0KeG0nXwPnCkwg3LH+ucXlelnj1w+gaP2ndHbJVwgUWXGpqCHk8tn935KKOULhP7BGmAwvTYlQ==" + "resolved" "https://registry.npmjs.org/@lerna/diff/-/diff-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/command" "5.5.4" "@lerna/validation-error" "5.5.4" - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/exec@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-5.5.4.tgz#7ff09f9c786bf66ade7bf4823f60a4feab3b267c" - integrity sha512-o1SQ+6/U6L8hih6+wAgjyOhqo2CKzMcW6YWLs5erRY9E6VCEc2kX7SW3223ehsAhUIPfG7n+KYPmuZbWvTpbGQ== + "integrity" "sha512-o1SQ+6/U6L8hih6+wAgjyOhqo2CKzMcW6YWLs5erRY9E6VCEc2kX7SW3223ehsAhUIPfG7n+KYPmuZbWvTpbGQ==" + "resolved" "https://registry.npmjs.org/@lerna/exec/-/exec-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/command" "5.5.4" @@ -1300,126 +1401,126 @@ "@lerna/profiler" "5.5.4" "@lerna/run-topologically" "5.5.4" "@lerna/validation-error" "5.5.4" - p-map "^4.0.0" + "p-map" "^4.0.0" "@lerna/filter-options@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-5.5.4.tgz#c25ee6abb2eb2610d1da390911eafbfddecedf68" - integrity sha512-t1amUypgloaKN8d3VN7GiJQd4ommDplxSisAMS8hztb6ail3EbxasRQ03GXz4+6yQ98sam+D03soqSWAJcinrw== + "integrity" "sha512-t1amUypgloaKN8d3VN7GiJQd4ommDplxSisAMS8hztb6ail3EbxasRQ03GXz4+6yQ98sam+D03soqSWAJcinrw==" + "resolved" "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/collect-updates" "5.5.4" "@lerna/filter-packages" "5.5.4" - dedent "^0.7.0" - npmlog "^6.0.2" + "dedent" "^0.7.0" + "npmlog" "^6.0.2" "@lerna/filter-packages@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-5.5.4.tgz#7f07fe9afb4eacc43fec67c82c9e4acb33b393a7" - integrity sha512-mwpiF+L0np003AUp3ntKEFkNOXWBONwm9q8rW9TOR8OeqMXbxYWGLg2IR+Wc8EClmen79tahn076nUD85OLqew== + "integrity" "sha512-mwpiF+L0np003AUp3ntKEFkNOXWBONwm9q8rW9TOR8OeqMXbxYWGLg2IR+Wc8EClmen79tahn076nUD85OLqew==" + "resolved" "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/validation-error" "5.5.4" - multimatch "^5.0.0" - npmlog "^6.0.2" + "multimatch" "^5.0.0" + "npmlog" "^6.0.2" "@lerna/get-npm-exec-opts@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.5.4.tgz#8c1b19a364071350a305f9da50a6b851ced1fc6f" - integrity sha512-PLvSdt0woeOz3TZDHRshYVR9TSOUNunxZ4mE8f0tg9FPQ5R1uuwd2BF4HmEL7AlWFtFS+sOwuL9bI1btV1ELew== + "integrity" "sha512-PLvSdt0woeOz3TZDHRshYVR9TSOUNunxZ4mE8f0tg9FPQ5R1uuwd2BF4HmEL7AlWFtFS+sOwuL9bI1btV1ELew==" + "resolved" "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.5.4.tgz" + "version" "5.5.4" dependencies: - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/get-packed@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-5.5.4.tgz#2aa2772a6c90bdb1335b79d6c9058fca73a74505" - integrity sha512-BXQcQ5rfdIa8hkDd4UdETWs9mDiFvmBRpSNxpgaRiuL1w7AXEaMREQgKOFiv8fv/e+z/F0SXD048Fptj8d5pjA== + "integrity" "sha512-BXQcQ5rfdIa8hkDd4UdETWs9mDiFvmBRpSNxpgaRiuL1w7AXEaMREQgKOFiv8fv/e+z/F0SXD048Fptj8d5pjA==" + "resolved" "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.5.4.tgz" + "version" "5.5.4" dependencies: - fs-extra "^9.1.0" - ssri "^9.0.1" - tar "^6.1.0" + "fs-extra" "^9.1.0" + "ssri" "^9.0.1" + "tar" "^6.1.0" "@lerna/github-client@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-5.5.4.tgz#9ff47636e57514fb8d44678ad64664c932868d79" - integrity sha512-m5vTRsHyfzh16T3fX3ipdjZyQwl4Gnwav4RmEaVUFp2uMqsr0TrML7LJ/eqOqjGvj/+JWa52rIQsUCQe9BJYag== + "integrity" "sha512-m5vTRsHyfzh16T3fX3ipdjZyQwl4Gnwav4RmEaVUFp2uMqsr0TrML7LJ/eqOqjGvj/+JWa52rIQsUCQe9BJYag==" + "resolved" "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@octokit/plugin-enterprise-rest" "^6.0.1" "@octokit/rest" "^19.0.3" - git-url-parse "^13.1.0" - npmlog "^6.0.2" + "git-url-parse" "^13.1.0" + "npmlog" "^6.0.2" "@lerna/gitlab-client@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-5.5.4.tgz#e18a479e8f2f3ce0ecfa1e0d4f0a16d646809bba" - integrity sha512-vPSr6xFxtOigFY/fE8oYF+360WsV+g2ZkoJB34FA6UucjWBBPu2W13ydUYfqvJYODJYFzhTjB9b8zf0MJ0KMrQ== + "integrity" "sha512-vPSr6xFxtOigFY/fE8oYF+360WsV+g2ZkoJB34FA6UucjWBBPu2W13ydUYfqvJYODJYFzhTjB9b8zf0MJ0KMrQ==" + "resolved" "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.5.4.tgz" + "version" "5.5.4" dependencies: - node-fetch "^2.6.1" - npmlog "^6.0.2" + "node-fetch" "^2.6.1" + "npmlog" "^6.0.2" "@lerna/global-options@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-5.5.4.tgz#ed2daee879205255b4667921d6c91a4e2c04dda8" - integrity sha512-J2K4CsnYuKrW7bDR2gRABUFFrLaJ5z4GaaDpaKtQi6sHFKcVBfYz0B51Fe3NGFOvrct4YS9N7SgKDxPd5Nznig== + "integrity" "sha512-J2K4CsnYuKrW7bDR2gRABUFFrLaJ5z4GaaDpaKtQi6sHFKcVBfYz0B51Fe3NGFOvrct4YS9N7SgKDxPd5Nznig==" + "resolved" "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.5.4.tgz" + "version" "5.5.4" "@lerna/has-npm-version@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-5.5.4.tgz#32655bdf0d7deeb7de78ebc4e978ecc02b18bf91" - integrity sha512-l+nDc/QYvfA5f0tFxzd9mZ/SP0nfxbqpZ9csGyqU8NV/40fHRRouO+fcLtxjcG/mruMjiAB/P216BBbRmGb2VA== + "integrity" "sha512-l+nDc/QYvfA5f0tFxzd9mZ/SP0nfxbqpZ9csGyqU8NV/40fHRRouO+fcLtxjcG/mruMjiAB/P216BBbRmGb2VA==" + "resolved" "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" - semver "^7.3.4" + "semver" "^7.3.4" "@lerna/import@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-5.5.4.tgz#b0e07b54c13c786eac4a7639cc0db80ff1f952c6" - integrity sha512-1edy4e+0w4/awahc3uPvRQngIHbri5BGZZbjvsX8aKlPUd9pFg5U9/5w3lVE5jnZFRnqwhpJyyvJjL2M5F6IgQ== + "integrity" "sha512-1edy4e+0w4/awahc3uPvRQngIHbri5BGZZbjvsX8aKlPUd9pFg5U9/5w3lVE5jnZFRnqwhpJyyvJjL2M5F6IgQ==" + "resolved" "https://registry.npmjs.org/@lerna/import/-/import-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/command" "5.5.4" "@lerna/prompt" "5.5.4" "@lerna/pulse-till-done" "5.5.4" "@lerna/validation-error" "5.5.4" - dedent "^0.7.0" - fs-extra "^9.1.0" - p-map-series "^2.1.0" + "dedent" "^0.7.0" + "fs-extra" "^9.1.0" + "p-map-series" "^2.1.0" "@lerna/info@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-5.5.4.tgz#c0bb38a5d97f60019278a49ee324a3be804b9baa" - integrity sha512-JgYRP2WZUCuiYyf3CQjqEMGoqWpM7t/bammKW/sC3P0/xGSykh45vdRwVojcu4fGRZ/YS7sfFt28Dbw4QFp0iQ== + "integrity" "sha512-JgYRP2WZUCuiYyf3CQjqEMGoqWpM7t/bammKW/sC3P0/xGSykh45vdRwVojcu4fGRZ/YS7sfFt28Dbw4QFp0iQ==" + "resolved" "https://registry.npmjs.org/@lerna/info/-/info-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/command" "5.5.4" "@lerna/output" "5.5.4" - envinfo "^7.7.4" + "envinfo" "^7.7.4" "@lerna/init@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-5.5.4.tgz#78142ec262e5d54c0ced716239c39acd2c2cf821" - integrity sha512-BteH3O8ywUN8eBhwzOey3gTXxxKRxGz1JJ6tP1mA0KZoJgiBsSFoZbx7SJeGrR8gY7kmEyvXTY1geaxmb7V+vQ== + "integrity" "sha512-BteH3O8ywUN8eBhwzOey3gTXxxKRxGz1JJ6tP1mA0KZoJgiBsSFoZbx7SJeGrR8gY7kmEyvXTY1geaxmb7V+vQ==" + "resolved" "https://registry.npmjs.org/@lerna/init/-/init-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/command" "5.5.4" "@lerna/project" "5.5.4" - fs-extra "^9.1.0" - p-map "^4.0.0" - write-json-file "^4.3.0" + "fs-extra" "^9.1.0" + "p-map" "^4.0.0" + "write-json-file" "^4.3.0" "@lerna/link@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-5.5.4.tgz#5bd2097ab123f6034b470626d220bd5ce03cbc77" - integrity sha512-/kFST918MLhvWbs3szbUw3/6pPa0/vS77WnHk8n3S3v/PuzUEjm9CncYrZ0xB1ZiGk6oa4YTPWMlqyYMY1k0hQ== + "integrity" "sha512-/kFST918MLhvWbs3szbUw3/6pPa0/vS77WnHk8n3S3v/PuzUEjm9CncYrZ0xB1ZiGk6oa4YTPWMlqyYMY1k0hQ==" + "resolved" "https://registry.npmjs.org/@lerna/link/-/link-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/command" "5.5.4" "@lerna/package-graph" "5.5.4" "@lerna/symlink-dependencies" "5.5.4" "@lerna/validation-error" "5.5.4" - p-map "^4.0.0" - slash "^3.0.0" + "p-map" "^4.0.0" + "slash" "^3.0.0" "@lerna/list@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-5.5.4.tgz#fd27a69118e6ed515149fd77690ce6ecc3058456" - integrity sha512-ppLy99mQYoDkO+SxqnknPYqOnO+iJskb0G2h2fLF4ZK98oy2duJWkkehagwCVtmPax/DqWDDc/IAj+KWpcC0bQ== + "integrity" "sha512-ppLy99mQYoDkO+SxqnknPYqOnO+iJskb0G2h2fLF4ZK98oy2duJWkkehagwCVtmPax/DqWDDc/IAj+KWpcC0bQ==" + "resolved" "https://registry.npmjs.org/@lerna/list/-/list-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/command" "5.5.4" "@lerna/filter-options" "5.5.4" @@ -1427,172 +1528,172 @@ "@lerna/output" "5.5.4" "@lerna/listable@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-5.5.4.tgz#eff0720d5c01f734933b95dd8b2161d3126dc487" - integrity sha512-c6acWwSDQE5zeBcnH3m+mwfDr3zr515LsC30tXRenkqp4lbXeyrUPw0Mckw1ksw2nyb5LZl8gQnrFbAKC8gBSA== + "integrity" "sha512-c6acWwSDQE5zeBcnH3m+mwfDr3zr515LsC30tXRenkqp4lbXeyrUPw0Mckw1ksw2nyb5LZl8gQnrFbAKC8gBSA==" + "resolved" "https://registry.npmjs.org/@lerna/listable/-/listable-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/query-graph" "5.5.4" - chalk "^4.1.0" - columnify "^1.6.0" + "chalk" "^4.1.0" + "columnify" "^1.6.0" "@lerna/log-packed@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-5.5.4.tgz#0f0285445aadf3289148af7949f2cd61a21ff553" - integrity sha512-g3lW5yIIe66aVTOYn78+h21GR9gr/WdU3/z8jm0VzGC+VR7KqCKU+49JOCOh7LlNf7sY4ZE6ZbaZptp5wUjrgQ== + "integrity" "sha512-g3lW5yIIe66aVTOYn78+h21GR9gr/WdU3/z8jm0VzGC+VR7KqCKU+49JOCOh7LlNf7sY4ZE6ZbaZptp5wUjrgQ==" + "resolved" "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.5.4.tgz" + "version" "5.5.4" dependencies: - byte-size "^7.0.0" - columnify "^1.6.0" - has-unicode "^2.0.1" - npmlog "^6.0.2" + "byte-size" "^7.0.0" + "columnify" "^1.6.0" + "has-unicode" "^2.0.1" + "npmlog" "^6.0.2" "@lerna/npm-conf@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-5.5.4.tgz#642438b68dbd98af1189fb85646d3e0ca24b3741" - integrity sha512-BwnP0ezR84nQ5Sh0CdH77Q8evDcqP9bFUdjX6eZT4Rxl0432ocB1YpweNnUDQO4Boxj/FiOu/OaE0Kej+I+5ew== + "integrity" "sha512-BwnP0ezR84nQ5Sh0CdH77Q8evDcqP9bFUdjX6eZT4Rxl0432ocB1YpweNnUDQO4Boxj/FiOu/OaE0Kej+I+5ew==" + "resolved" "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.5.4.tgz" + "version" "5.5.4" dependencies: - config-chain "^1.1.12" - pify "^5.0.0" + "config-chain" "^1.1.12" + "pify" "^5.0.0" "@lerna/npm-dist-tag@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-5.5.4.tgz#2ed3ad80af572bfdcf631f8271e59240d72e011b" - integrity sha512-aAisCh5b2+6cjLxZh03/MGGcBjL7KNBWi5qW6OCdQQpcxH5r0aUJ5F1rmXJE0qxgsLWaGRLzngWk+v6VJHqYJQ== + "integrity" "sha512-aAisCh5b2+6cjLxZh03/MGGcBjL7KNBWi5qW6OCdQQpcxH5r0aUJ5F1rmXJE0qxgsLWaGRLzngWk+v6VJHqYJQ==" + "resolved" "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/otplease" "5.5.4" - npm-package-arg "8.1.1" - npm-registry-fetch "^13.3.0" - npmlog "^6.0.2" + "npm-package-arg" "8.1.1" + "npm-registry-fetch" "^13.3.0" + "npmlog" "^6.0.2" "@lerna/npm-install@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-5.5.4.tgz#0b801d16d04cf2c9c6c114ec0b188ad190c63775" - integrity sha512-lglf2KRxg30dCvNWwxQRJmCfXC51byNqYQt9/dFrnWcotHwpNRIFnVM3tWMdVxlwJMiozU/PjUFBateaxmukXw== + "integrity" "sha512-lglf2KRxg30dCvNWwxQRJmCfXC51byNqYQt9/dFrnWcotHwpNRIFnVM3tWMdVxlwJMiozU/PjUFBateaxmukXw==" + "resolved" "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/get-npm-exec-opts" "5.5.4" - fs-extra "^9.1.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - signal-exit "^3.0.3" - write-pkg "^4.0.0" + "fs-extra" "^9.1.0" + "npm-package-arg" "8.1.1" + "npmlog" "^6.0.2" + "signal-exit" "^3.0.3" + "write-pkg" "^4.0.0" "@lerna/npm-publish@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-5.5.4.tgz#fbdcadf5bedf91bbd33ddca79e742262f8b72465" - integrity sha512-Z3GQqby0FR7HW82/t7j7nOF9pfSwNVmgms0zTq7a8YaEe8uDlAxGMW4sVN8uT89mZfBfS6R1WMlBbC5Ea+jy/A== + "integrity" "sha512-Z3GQqby0FR7HW82/t7j7nOF9pfSwNVmgms0zTq7a8YaEe8uDlAxGMW4sVN8uT89mZfBfS6R1WMlBbC5Ea+jy/A==" + "resolved" "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/otplease" "5.5.4" "@lerna/run-lifecycle" "5.5.4" - fs-extra "^9.1.0" - libnpmpublish "^6.0.4" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - pify "^5.0.0" - read-package-json "^5.0.1" + "fs-extra" "^9.1.0" + "libnpmpublish" "^6.0.4" + "npm-package-arg" "8.1.1" + "npmlog" "^6.0.2" + "pify" "^5.0.0" + "read-package-json" "^5.0.1" "@lerna/npm-run-script@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-5.5.4.tgz#88dc25d81b5263d85443b570d06f1c87df38c58a" - integrity sha512-fwHZRTGUldN9D2Rugg0HdwE8A8OZ7CF7g63y7OjzIoxASqtZBDyHZgrVbY/xZcrhqCF0+VJ1vR0c/uFwtWFrtA== + "integrity" "sha512-fwHZRTGUldN9D2Rugg0HdwE8A8OZ7CF7g63y7OjzIoxASqtZBDyHZgrVbY/xZcrhqCF0+VJ1vR0c/uFwtWFrtA==" + "resolved" "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/get-npm-exec-opts" "5.5.4" - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/otplease@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-5.5.4.tgz#8b1f5af43e3e99131ca6077ac6f9c274733a6a77" - integrity sha512-c/tSjuMGw0esoxqtW0Qs2gCcvFDCrOlFnd4EgTJQKUSbNwVrabMkDJRMP0zu7UiSYJCCWKlBnjpBCiBXNG2H4A== + "integrity" "sha512-c/tSjuMGw0esoxqtW0Qs2gCcvFDCrOlFnd4EgTJQKUSbNwVrabMkDJRMP0zu7UiSYJCCWKlBnjpBCiBXNG2H4A==" + "resolved" "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/prompt" "5.5.4" "@lerna/output@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-5.5.4.tgz#22c9d78a39b7062c90fd1a1e0050a4129dc9c239" - integrity sha512-qiYtDQ4k9sXzXRlbSuLUFDNLk42sJY3n7x7fWKt6v5I9s2uh5d3cBctBuvV8+YX82H1inQ9hpyFafzOBO8tbCA== + "integrity" "sha512-qiYtDQ4k9sXzXRlbSuLUFDNLk42sJY3n7x7fWKt6v5I9s2uh5d3cBctBuvV8+YX82H1inQ9hpyFafzOBO8tbCA==" + "resolved" "https://registry.npmjs.org/@lerna/output/-/output-5.5.4.tgz" + "version" "5.5.4" dependencies: - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/pack-directory@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-5.5.4.tgz#987dba5049a57fd822412e9a1770dab9f4da314c" - integrity sha512-yUhu8ADzUZOZPfimMwlxxuxIweXitMKTVAmhz9eruiNHxsc0GpKb89yemep03iXqtrjC1Pt/QsS+dhJNNKdZ4A== + "integrity" "sha512-yUhu8ADzUZOZPfimMwlxxuxIweXitMKTVAmhz9eruiNHxsc0GpKb89yemep03iXqtrjC1Pt/QsS+dhJNNKdZ4A==" + "resolved" "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/get-packed" "5.5.4" "@lerna/package" "5.5.4" "@lerna/run-lifecycle" "5.5.4" "@lerna/temp-write" "5.5.4" - npm-packlist "^5.1.1" - npmlog "^6.0.2" - tar "^6.1.0" + "npm-packlist" "^5.1.1" + "npmlog" "^6.0.2" + "tar" "^6.1.0" "@lerna/package-graph@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-5.5.4.tgz#32abce3e23e09017f5323f2704d9544ffcb1ccbf" - integrity sha512-1g0c08mooZBtrIG8gMOdpbZ3rn5VM+e47pLFAXZcfGUaNUfc0OM58Z50ONiJq23XlJmS4vQ2e4X3cs7Hc7+Dxw== + "integrity" "sha512-1g0c08mooZBtrIG8gMOdpbZ3rn5VM+e47pLFAXZcfGUaNUfc0OM58Z50ONiJq23XlJmS4vQ2e4X3cs7Hc7+Dxw==" + "resolved" "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/prerelease-id-from-version" "5.5.4" "@lerna/validation-error" "5.5.4" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - semver "^7.3.4" + "npm-package-arg" "8.1.1" + "npmlog" "^6.0.2" + "semver" "^7.3.4" "@lerna/package@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-5.5.4.tgz#815c35a8f5a12a6f91f3a0314178f198ffcbc1c5" - integrity sha512-wpBcq4zVFVQOJI9QT0TJItRjl6jGSGFp93n4D8KHXXiyeKmN9CW4EnwFY9bnT3r5OteZN+eorD6r2TnRe8VPDg== + "integrity" "sha512-wpBcq4zVFVQOJI9QT0TJItRjl6jGSGFp93n4D8KHXXiyeKmN9CW4EnwFY9bnT3r5OteZN+eorD6r2TnRe8VPDg==" + "resolved" "https://registry.npmjs.org/@lerna/package/-/package-5.5.4.tgz" + "version" "5.5.4" dependencies: - load-json-file "^6.2.0" - npm-package-arg "8.1.1" - write-pkg "^4.0.0" + "load-json-file" "^6.2.0" + "npm-package-arg" "8.1.1" + "write-pkg" "^4.0.0" "@lerna/prerelease-id-from-version@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.5.4.tgz#ba17e53051b15cfe7ba9c98e75abd5644559f8a7" - integrity sha512-IHNQxbILrRGhw9CCdqy0ncSjDpNvdJCcaGFh3+TJRx6Bjhl5ifbUjI0gBUxd7i5Aict5dguWlhAWHQpef48AqA== + "integrity" "sha512-IHNQxbILrRGhw9CCdqy0ncSjDpNvdJCcaGFh3+TJRx6Bjhl5ifbUjI0gBUxd7i5Aict5dguWlhAWHQpef48AqA==" + "resolved" "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.5.4.tgz" + "version" "5.5.4" dependencies: - semver "^7.3.4" + "semver" "^7.3.4" "@lerna/profiler@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-5.5.4.tgz#2082a05c4aecee0bd567a5069efb09511212f4c6" - integrity sha512-LPnO8mXhXSBT8PD5pEWkgd+2d8lJqQ0fnwcIPG0B8o6tnQrSc2gXLNxStYOFedzcZXRhAYiFVrf5VjOKHV6Ghw== + "integrity" "sha512-LPnO8mXhXSBT8PD5pEWkgd+2d8lJqQ0fnwcIPG0B8o6tnQrSc2gXLNxStYOFedzcZXRhAYiFVrf5VjOKHV6Ghw==" + "resolved" "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.5.4.tgz" + "version" "5.5.4" dependencies: - fs-extra "^9.1.0" - npmlog "^6.0.2" - upath "^2.0.1" + "fs-extra" "^9.1.0" + "npmlog" "^6.0.2" + "upath" "^2.0.1" "@lerna/project@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-5.5.4.tgz#184d13b0b47187bed5fa6a6227c2a0abf6060fda" - integrity sha512-iLdyc+jPU0cR6BQO3V3Sf51WP3Oac+I/+518dIGdWS7ot9nEbjuZripHJjIkyZKSfnKPTEtz2aUta0ndoewwuQ== + "integrity" "sha512-iLdyc+jPU0cR6BQO3V3Sf51WP3Oac+I/+518dIGdWS7ot9nEbjuZripHJjIkyZKSfnKPTEtz2aUta0ndoewwuQ==" + "resolved" "https://registry.npmjs.org/@lerna/project/-/project-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/package" "5.5.4" "@lerna/validation-error" "5.5.4" - cosmiconfig "^7.0.0" - dedent "^0.7.0" - dot-prop "^6.0.1" - glob-parent "^5.1.1" - globby "^11.0.2" - js-yaml "^4.1.0" - load-json-file "^6.2.0" - npmlog "^6.0.2" - p-map "^4.0.0" - resolve-from "^5.0.0" - write-json-file "^4.3.0" + "cosmiconfig" "^7.0.0" + "dedent" "^0.7.0" + "dot-prop" "^6.0.1" + "glob-parent" "^5.1.1" + "globby" "^11.0.2" + "js-yaml" "^4.1.0" + "load-json-file" "^6.2.0" + "npmlog" "^6.0.2" + "p-map" "^4.0.0" + "resolve-from" "^5.0.0" + "write-json-file" "^4.3.0" "@lerna/prompt@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-5.5.4.tgz#3b61a9ba3996c0cf3926671e8f9a15189b9b9ef4" - integrity sha512-X8H2V4dDkFLYzZkMTillvuGAphU5fTDR66HgZlhgKtbJjm7OrjxhoRdk/YlMpI+HdYwXhdUzhEe9YJEhqhfe6w== + "integrity" "sha512-X8H2V4dDkFLYzZkMTillvuGAphU5fTDR66HgZlhgKtbJjm7OrjxhoRdk/YlMpI+HdYwXhdUzhEe9YJEhqhfe6w==" + "resolved" "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.5.4.tgz" + "version" "5.5.4" dependencies: - inquirer "^8.2.4" - npmlog "^6.0.2" + "inquirer" "^8.2.4" + "npmlog" "^6.0.2" "@lerna/publish@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-5.5.4.tgz#73dceae590815e096d3410c98f07ba01a7bccbc1" - integrity sha512-zBlZsk+NBUfg4o7ycKH8/hc4NRJWd4RmxB6Kn7xo7MOJMW3x+K4aABcqY2GGxEMUxx3rBBVPIdziVWbyS7UIxA== + "integrity" "sha512-zBlZsk+NBUfg4o7ycKH8/hc4NRJWd4RmxB6Kn7xo7MOJMW3x+K4aABcqY2GGxEMUxx3rBBVPIdziVWbyS7UIxA==" + "resolved" "https://registry.npmjs.org/@lerna/publish/-/publish-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/check-working-tree" "5.5.4" "@lerna/child-process" "5.5.4" @@ -1613,71 +1714,71 @@ "@lerna/run-topologically" "5.5.4" "@lerna/validation-error" "5.5.4" "@lerna/version" "5.5.4" - fs-extra "^9.1.0" - libnpmaccess "^6.0.3" - npm-package-arg "8.1.1" - npm-registry-fetch "^13.3.0" - npmlog "^6.0.2" - p-map "^4.0.0" - p-pipe "^3.1.0" - pacote "^13.6.1" - semver "^7.3.4" + "fs-extra" "^9.1.0" + "libnpmaccess" "^6.0.3" + "npm-package-arg" "8.1.1" + "npm-registry-fetch" "^13.3.0" + "npmlog" "^6.0.2" + "p-map" "^4.0.0" + "p-pipe" "^3.1.0" + "pacote" "^13.6.1" + "semver" "^7.3.4" "@lerna/pulse-till-done@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-5.5.4.tgz#c7fe3349a1da86534fb42bb7f858a6245e6d67e0" - integrity sha512-xC4/QPnIQfrE1aA8W5w6AfaT0gTm8SeVmrsQzMMlUTJ2JAnflsHv1oG69M89xq2DrlXsEVaah56Xbjavy+woQg== + "integrity" "sha512-xC4/QPnIQfrE1aA8W5w6AfaT0gTm8SeVmrsQzMMlUTJ2JAnflsHv1oG69M89xq2DrlXsEVaah56Xbjavy+woQg==" + "resolved" "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.5.4.tgz" + "version" "5.5.4" dependencies: - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/query-graph@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-5.5.4.tgz#64079526a6e483a28c0b9cda12f8444ced6016b3" - integrity sha512-TJsmJ++3NpEs+LxF0B02hAv2HigJ9ffa9e+paK27oE8sTiH3YataMHaNu5ZkeotJTw7u0IiRLm0zi4z4xoRlLg== + "integrity" "sha512-TJsmJ++3NpEs+LxF0B02hAv2HigJ9ffa9e+paK27oE8sTiH3YataMHaNu5ZkeotJTw7u0IiRLm0zi4z4xoRlLg==" + "resolved" "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/package-graph" "5.5.4" "@lerna/resolve-symlink@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-5.5.4.tgz#3711dc911193d8f1843616bf4a77e4fbf14daedf" - integrity sha512-cAIXELf04dHx/XF/2njCM0bpiyup6Nedpmm1XNJzrJuWrGmwK2qW5F2wQ/RHXWXsLIe/BsOl/hfEONm7o7k8sA== + "integrity" "sha512-cAIXELf04dHx/XF/2njCM0bpiyup6Nedpmm1XNJzrJuWrGmwK2qW5F2wQ/RHXWXsLIe/BsOl/hfEONm7o7k8sA==" + "resolved" "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.5.4.tgz" + "version" "5.5.4" dependencies: - fs-extra "^9.1.0" - npmlog "^6.0.2" - read-cmd-shim "^3.0.0" + "fs-extra" "^9.1.0" + "npmlog" "^6.0.2" + "read-cmd-shim" "^3.0.0" "@lerna/rimraf-dir@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-5.5.4.tgz#35b1ee9cf3bca12748df4e53f7e5cef5ef845d6a" - integrity sha512-++I7ToqICE4KSqi4T8enfcou8XPZV3gmrpARVD9VW4Tz3w8BP/JijB6AJwgZKojdqQenXU7u3lLTzfepKN1iOA== + "integrity" "sha512-++I7ToqICE4KSqi4T8enfcou8XPZV3gmrpARVD9VW4Tz3w8BP/JijB6AJwgZKojdqQenXU7u3lLTzfepKN1iOA==" + "resolved" "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" - npmlog "^6.0.2" - path-exists "^4.0.0" - rimraf "^3.0.2" + "npmlog" "^6.0.2" + "path-exists" "^4.0.0" + "rimraf" "^3.0.2" "@lerna/run-lifecycle@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-5.5.4.tgz#e9d61d5c290402f936818ca775168a677d965ad7" - integrity sha512-MIE8HJml8gWkH5jt/5omiPr69VUMUPwvhkf6Irpg5yxIE5K4oeViVZMay2v6cPA9jAeTDCshHb7gt2EPBSsYQA== + "integrity" "sha512-MIE8HJml8gWkH5jt/5omiPr69VUMUPwvhkf6Irpg5yxIE5K4oeViVZMay2v6cPA9jAeTDCshHb7gt2EPBSsYQA==" + "resolved" "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/npm-conf" "5.5.4" "@npmcli/run-script" "^4.1.7" - npmlog "^6.0.2" - p-queue "^6.6.2" + "npmlog" "^6.0.2" + "p-queue" "^6.6.2" "@lerna/run-topologically@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-5.5.4.tgz#14fdd4d40882445b9346d0e814c61eb8237687a9" - integrity sha512-p1UNHgR8sOaS40nVD0HyqwmawDXBOikIibjbJLcY2QuvWwzAGKjfWm/sAXagYjgzaPYQAhaHyOxTdGe8T+a7uQ== + "integrity" "sha512-p1UNHgR8sOaS40nVD0HyqwmawDXBOikIibjbJLcY2QuvWwzAGKjfWm/sAXagYjgzaPYQAhaHyOxTdGe8T+a7uQ==" + "resolved" "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/query-graph" "5.5.4" - p-queue "^6.6.2" + "p-queue" "^6.6.2" "@lerna/run@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-5.5.4.tgz#b7cff31b3240c7326119a9a675af2bbc16af6d2a" - integrity sha512-R9g+4nfIDgK+I4RleAJpXrStzLlUCEHR/rxH2t5LJ6DLaoKUG6oeRZsf2w/It/r2IMV1dq2xG6chs+H1o1J+Ow== + "integrity" "sha512-R9g+4nfIDgK+I4RleAJpXrStzLlUCEHR/rxH2t5LJ6DLaoKUG6oeRZsf2w/It/r2IMV1dq2xG6chs+H1o1J+Ow==" + "resolved" "https://registry.npmjs.org/@lerna/run/-/run-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/command" "5.5.4" "@lerna/filter-options" "5.5.4" @@ -1687,58 +1788,58 @@ "@lerna/run-topologically" "5.5.4" "@lerna/timer" "5.5.4" "@lerna/validation-error" "5.5.4" - fs-extra "^9.1.0" - p-map "^4.0.0" + "fs-extra" "^9.1.0" + "p-map" "^4.0.0" "@lerna/symlink-binary@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-5.5.4.tgz#cb7e8194e7b860196aff306aa35e0db67f1b5c3a" - integrity sha512-FVhkL8KIgk0gPJV136Sl0/t3LD3qDngIRqJVNPIbATVHagkLVsuJM6+BcdWLxoMUCtwHIyWqgcXn1Oa/DVSUEA== + "integrity" "sha512-FVhkL8KIgk0gPJV136Sl0/t3LD3qDngIRqJVNPIbATVHagkLVsuJM6+BcdWLxoMUCtwHIyWqgcXn1Oa/DVSUEA==" + "resolved" "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/create-symlink" "5.5.4" "@lerna/package" "5.5.4" - fs-extra "^9.1.0" - p-map "^4.0.0" + "fs-extra" "^9.1.0" + "p-map" "^4.0.0" "@lerna/symlink-dependencies@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-5.5.4.tgz#99607534e239b1479209d3025988e3b2c5ccc073" - integrity sha512-BfOcATr0TreXRfIhIRvgGCT2o8uEqrwVLo8edCQICeqgju19fFn22Qmyb8LW+LMJjBUuSkpJDqqamQ6nj3Ch2A== + "integrity" "sha512-BfOcATr0TreXRfIhIRvgGCT2o8uEqrwVLo8edCQICeqgju19fFn22Qmyb8LW+LMJjBUuSkpJDqqamQ6nj3Ch2A==" + "resolved" "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/create-symlink" "5.5.4" "@lerna/resolve-symlink" "5.5.4" "@lerna/symlink-binary" "5.5.4" - fs-extra "^9.1.0" - p-map "^4.0.0" - p-map-series "^2.1.0" + "fs-extra" "^9.1.0" + "p-map" "^4.0.0" + "p-map-series" "^2.1.0" "@lerna/temp-write@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/temp-write/-/temp-write-5.5.4.tgz#02c07da23944a765d3f319f247c71e0b99b9416f" - integrity sha512-cJy9f9uSvnPxfc2a1ARapGLJXllQlJKKb0idi8aA3ylvgDA7grfKIDPdkf6cBcpPAq8aixDq9GdCZ6oLKdISeA== + "integrity" "sha512-cJy9f9uSvnPxfc2a1ARapGLJXllQlJKKb0idi8aA3ylvgDA7grfKIDPdkf6cBcpPAq8aixDq9GdCZ6oLKdISeA==" + "resolved" "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.5.4.tgz" + "version" "5.5.4" dependencies: - graceful-fs "^4.1.15" - is-stream "^2.0.0" - make-dir "^3.0.0" - temp-dir "^1.0.0" - uuid "^8.3.2" + "graceful-fs" "^4.1.15" + "is-stream" "^2.0.0" + "make-dir" "^3.0.0" + "temp-dir" "^1.0.0" + "uuid" "^8.3.2" "@lerna/timer@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-5.5.4.tgz#815f054f3825a58af58518309d32e29e36fd2c8b" - integrity sha512-B3eesmrNaw64Svo2pkmCtBVIJbomegiOMrdxFkZrf8ugTKwobn3KSZZkdbN+hjq8SKpRz3XgtjAuSFUzdg8c3A== + "integrity" "sha512-B3eesmrNaw64Svo2pkmCtBVIJbomegiOMrdxFkZrf8ugTKwobn3KSZZkdbN+hjq8SKpRz3XgtjAuSFUzdg8c3A==" + "resolved" "https://registry.npmjs.org/@lerna/timer/-/timer-5.5.4.tgz" + "version" "5.5.4" "@lerna/validation-error@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-5.5.4.tgz#935018275d0005cc5e7540854815ec7404a5b129" - integrity sha512-FUC3x40zBAu0ny1AWXT38LOVRaSJkjdAv9GiYLu9sx+7T7X18q38zPFyVPIIhrrTJsNNWkro/NTA7r4/BcdvoQ== + "integrity" "sha512-FUC3x40zBAu0ny1AWXT38LOVRaSJkjdAv9GiYLu9sx+7T7X18q38zPFyVPIIhrrTJsNNWkro/NTA7r4/BcdvoQ==" + "resolved" "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.5.4.tgz" + "version" "5.5.4" dependencies: - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/version@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-5.5.4.tgz#4bfe1ec09a508f5a14c325599c88a92d3bede8a4" - integrity sha512-J39m2KfhkkDzfCUjnC2+UbBrWBRs1TkrvFlHFbb8wHUOY5bs+dj5RLyUchF/VJOYFSJXr8LLQFdMPeptF2wItg== + "integrity" "sha512-J39m2KfhkkDzfCUjnC2+UbBrWBRs1TkrvFlHFbb8wHUOY5bs+dj5RLyUchF/VJOYFSJXr8LLQFdMPeptF2wItg==" + "resolved" "https://registry.npmjs.org/@lerna/version/-/version-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/check-working-tree" "5.5.4" "@lerna/child-process" "5.5.4" @@ -1754,106 +1855,277 @@ "@lerna/run-topologically" "5.5.4" "@lerna/temp-write" "5.5.4" "@lerna/validation-error" "5.5.4" - chalk "^4.1.0" - dedent "^0.7.0" - load-json-file "^6.2.0" - minimatch "^3.0.4" - npmlog "^6.0.2" - p-map "^4.0.0" - p-pipe "^3.1.0" - p-reduce "^2.1.0" - p-waterfall "^2.1.1" - semver "^7.3.4" - slash "^3.0.0" - write-json-file "^4.3.0" + "chalk" "^4.1.0" + "dedent" "^0.7.0" + "load-json-file" "^6.2.0" + "minimatch" "^3.0.4" + "npmlog" "^6.0.2" + "p-map" "^4.0.0" + "p-pipe" "^3.1.0" + "p-reduce" "^2.1.0" + "p-waterfall" "^2.1.1" + "semver" "^7.3.4" + "slash" "^3.0.0" + "write-json-file" "^4.3.0" "@lerna/write-log-file@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-5.5.4.tgz#28d04afa813457a58c6d32d8a4b4581cbaf34d02" - integrity sha512-PDdVuWHLkMw6ygP1hKTciphmYKRDTmNJASxVlxxOv9UkZe7QQvfke0i/OXNPRZHJK7eKCtv2Zu91amE8qCjVNw== - dependencies: - npmlog "^6.0.2" - write-file-atomic "^4.0.1" - -"@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" - integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^6.2.1" - ethjs-util "^0.1.6" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.1" - -"@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz" - integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== - -"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": - version "1.6.3" - resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz" - integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== + "integrity" "sha512-PDdVuWHLkMw6ygP1hKTciphmYKRDTmNJASxVlxxOv9UkZe7QQvfke0i/OXNPRZHJK7eKCtv2Zu91amE8qCjVNw==" + "resolved" "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.5.4.tgz" + "version" "5.5.4" + dependencies: + "npmlog" "^6.0.2" + "write-file-atomic" "^4.0.1" + +"@metamask/eth-sig-util@^4.0.0", "@metamask/eth-sig-util@4.0.1": + "integrity" "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==" + "resolved" "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "ethereumjs-abi" "^0.6.8" + "ethereumjs-util" "^6.2.1" + "ethjs-util" "^0.1.6" + "tweetnacl" "^1.0.3" + "tweetnacl-util" "^0.15.1" + +"@metamask/obs-store@^7.0.0": + "integrity" "sha512-Tr61Uu9CGXkCg5CZwOYRMQERd+y6fbtrtLd/PzDTPHO5UJpmSbU+7MPcQK7d1DwZCOCeCIvhmZSUCvYliC8uGw==" + "resolved" "https://registry.npmjs.org/@metamask/obs-store/-/obs-store-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + "through2" "^2.0.3" + +"@metamask/safe-event-emitter@^2.0.0": + "integrity" "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==" + "resolved" "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz" + "version" "2.0.0" + +"@noble/hashes@~1.1.1": + "integrity" "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==" + "resolved" "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz" + "version" "1.1.3" + +"@noble/hashes@1.1.2": + "integrity" "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" + "resolved" "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz" + "version" "1.1.2" + +"@noble/secp256k1@~1.6.0", "@noble/secp256k1@1.6.3": + "integrity" "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==" + "resolved" "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz" + "version" "1.6.3" "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" dependencies: "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" + "run-parallel" "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" "@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" dependencies: "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@nomiclabs/hardhat-ethers@^2.1.0": - version "2.1.1" - resolved "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz" - integrity sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA== + "fastq" "^1.6.0" + +"@nomicfoundation/ethereumjs-block@^4.0.0": + "integrity" "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "ethereum-cryptography" "0.1.3" + +"@nomicfoundation/ethereumjs-blockchain@^6.0.0": + "integrity" "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-ethash" "^2.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "abstract-level" "^1.0.3" + "debug" "^4.3.3" + "ethereum-cryptography" "0.1.3" + "level" "^8.0.0" + "lru-cache" "^5.1.1" + "memory-level" "^1.0.0" + +"@nomicfoundation/ethereumjs-common@^3.0.0": + "integrity" "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "crc-32" "^1.2.0" + +"@nomicfoundation/ethereumjs-ethash@^2.0.0": + "integrity" "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "abstract-level" "^1.0.3" + "bigint-crypto-utils" "^3.0.23" + "ethereum-cryptography" "0.1.3" + +"@nomicfoundation/ethereumjs-evm@^1.0.0": + "integrity" "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@types/async-eventemitter" "^0.2.1" + "async-eventemitter" "^0.2.4" + "debug" "^4.3.3" + "ethereum-cryptography" "0.1.3" + "mcl-wasm" "^0.7.1" + "rustbn.js" "~0.2.0" + +"@nomicfoundation/ethereumjs-rlp@^4.0.0", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2": + "integrity" "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz" + "version" "4.0.0" + +"@nomicfoundation/ethereumjs-statemanager@^1.0.0": + "integrity" "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "debug" "^4.3.3" + "ethereum-cryptography" "0.1.3" + "functional-red-black-tree" "^1.0.1" + +"@nomicfoundation/ethereumjs-trie@^5.0.0": + "integrity" "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "ethereum-cryptography" "0.1.3" + "readable-stream" "^3.6.0" + +"@nomicfoundation/ethereumjs-tx@^4.0.0": + "integrity" "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "ethereum-cryptography" "0.1.3" + +"@nomicfoundation/ethereumjs-util@^8.0.0": + "integrity" "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz" + "version" "8.0.0" + dependencies: + "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" + "ethereum-cryptography" "0.1.3" + +"@nomicfoundation/ethereumjs-vm@^6.0.0": + "integrity" "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-evm" "^1.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@types/async-eventemitter" "^0.2.1" + "async-eventemitter" "^0.2.4" + "debug" "^4.3.3" + "ethereum-cryptography" "0.1.3" + "functional-red-black-tree" "^1.0.1" + "mcl-wasm" "^0.7.1" + "rustbn.js" "~0.2.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.0.3": + "integrity" "sha512-W+bIiNiZmiy+MTYFZn3nwjyPUO6wfWJ0lnXx2zZrM8xExKObMrhCh50yy8pQING24mHfpPFCn89wEB/iG7vZDw==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.0.3.tgz" + "version" "0.0.3" + +"@nomicfoundation/solidity-analyzer@^0.0.3": + "integrity" "sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz" + "version" "0.0.3" + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.0.3" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.0.3" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.0.3" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.0.3" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.0.3" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.0.3" + +"@nomiclabs/hardhat-ethers@^2.0.0", "@nomiclabs/hardhat-ethers@^2.1.0": + "integrity" "sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA==" + "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz" + "version" "2.1.1" "@nomiclabs/hardhat-etherscan@^2.1.6": - version "2.1.8" - resolved "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz" - integrity sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA== + "integrity" "sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA==" + "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz" + "version" "2.1.8" dependencies: "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" - cbor "^5.0.2" - debug "^4.1.1" - fs-extra "^7.0.1" - node-fetch "^2.6.0" - semver "^6.3.0" + "cbor" "^5.0.2" + "debug" "^4.1.1" + "fs-extra" "^7.0.1" + "node-fetch" "^2.6.0" + "semver" "^6.3.0" "@nomiclabs/hardhat-waffle@^2.0.3": - version "2.0.3" - resolved "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz" - integrity sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg== + "integrity" "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==" + "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz" + "version" "2.0.3" dependencies: "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" "@nomiclabs/hardhat-web3@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz" - integrity sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q== + "integrity" "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==" + "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz" + "version" "2.0.0" dependencies: "@types/bignumber.js" "^5.0.0" "@npmcli/arborist@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.3.0.tgz#321d9424677bfc08569e98a5ac445ee781f32053" - integrity sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A== + "integrity" "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==" + "resolved" "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz" + "version" "5.3.0" dependencies: "@isaacs/string-locale-compare" "^1.1.0" "@npmcli/installed-package-contents" "^1.0.7" @@ -1864,233 +2136,233 @@ "@npmcli/node-gyp" "^2.0.0" "@npmcli/package-json" "^2.0.0" "@npmcli/run-script" "^4.1.3" - bin-links "^3.0.0" - cacache "^16.0.6" - common-ancestor-path "^1.0.1" - json-parse-even-better-errors "^2.3.1" - json-stringify-nice "^1.1.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - nopt "^5.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.0.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.0" - npmlog "^6.0.2" - pacote "^13.6.1" - parse-conflict-json "^2.0.1" - proc-log "^2.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^2.0.2" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.7" - ssri "^9.0.0" - treeverse "^2.0.0" - walk-up-path "^1.0.0" + "bin-links" "^3.0.0" + "cacache" "^16.0.6" + "common-ancestor-path" "^1.0.1" + "json-parse-even-better-errors" "^2.3.1" + "json-stringify-nice" "^1.1.4" + "mkdirp" "^1.0.4" + "mkdirp-infer-owner" "^2.0.0" + "nopt" "^5.0.0" + "npm-install-checks" "^5.0.0" + "npm-package-arg" "^9.0.0" + "npm-pick-manifest" "^7.0.0" + "npm-registry-fetch" "^13.0.0" + "npmlog" "^6.0.2" + "pacote" "^13.6.1" + "parse-conflict-json" "^2.0.1" + "proc-log" "^2.0.0" + "promise-all-reject-late" "^1.0.0" + "promise-call-limit" "^1.0.1" + "read-package-json-fast" "^2.0.2" + "readdir-scoped-modules" "^1.1.0" + "rimraf" "^3.0.2" + "semver" "^7.3.7" + "ssri" "^9.0.0" + "treeverse" "^2.0.0" + "walk-up-path" "^1.0.0" "@npmcli/fs@^2.1.0": - version "2.1.2" - resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" - integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + "integrity" "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==" + "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" + "version" "2.1.2" dependencies: "@gar/promisify" "^1.1.3" - semver "^7.3.5" + "semver" "^7.3.5" "@npmcli/git@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" - integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== + "integrity" "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==" + "resolved" "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz" + "version" "3.0.2" dependencies: "@npmcli/promise-spawn" "^3.0.0" - lru-cache "^7.4.4" - mkdirp "^1.0.4" - npm-pick-manifest "^7.0.0" - proc-log "^2.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^2.0.2" + "lru-cache" "^7.4.4" + "mkdirp" "^1.0.4" + "npm-pick-manifest" "^7.0.0" + "proc-log" "^2.0.0" + "promise-inflight" "^1.0.1" + "promise-retry" "^2.0.1" + "semver" "^7.3.5" + "which" "^2.0.2" "@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + "integrity" "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==" + "resolved" "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz" + "version" "1.0.7" dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" + "npm-bundled" "^1.1.1" + "npm-normalize-package-bin" "^1.0.1" "@npmcli/map-workspaces@^2.0.3": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" - integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== + "integrity" "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==" + "resolved" "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz" + "version" "2.0.4" dependencies: "@npmcli/name-from-folder" "^1.0.1" - glob "^8.0.1" - minimatch "^5.0.1" - read-package-json-fast "^2.0.3" + "glob" "^8.0.1" + "minimatch" "^5.0.1" + "read-package-json-fast" "^2.0.3" "@npmcli/metavuln-calculator@^3.0.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" - integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== + "integrity" "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==" + "resolved" "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz" + "version" "3.1.1" dependencies: - cacache "^16.0.0" - json-parse-even-better-errors "^2.3.1" - pacote "^13.0.3" - semver "^7.3.5" + "cacache" "^16.0.0" + "json-parse-even-better-errors" "^2.3.1" + "pacote" "^13.0.3" + "semver" "^7.3.5" "@npmcli/move-file@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" - integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + "integrity" "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==" + "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" + "version" "2.0.1" dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" + "mkdirp" "^1.0.4" + "rimraf" "^3.0.2" "@npmcli/name-from-folder@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" - integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== + "integrity" "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==" + "resolved" "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz" + "version" "1.0.1" "@npmcli/node-gyp@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" - integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== + "integrity" "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==" + "resolved" "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz" + "version" "2.0.0" "@npmcli/package-json@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" - integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== + "integrity" "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==" + "resolved" "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz" + "version" "2.0.0" dependencies: - json-parse-even-better-errors "^2.3.1" + "json-parse-even-better-errors" "^2.3.1" "@npmcli/promise-spawn@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" - integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== + "integrity" "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==" + "resolved" "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz" + "version" "3.0.0" dependencies: - infer-owner "^1.0.4" + "infer-owner" "^1.0.4" "@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.1.7": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" - integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== + "integrity" "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==" + "resolved" "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz" + "version" "4.2.1" dependencies: "@npmcli/node-gyp" "^2.0.0" "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^2.0.3" - which "^2.0.2" + "node-gyp" "^9.0.0" + "read-package-json-fast" "^2.0.3" + "which" "^2.0.2" "@nrwl/cli@14.8.2": - version "14.8.2" - resolved "https://registry.npmjs.org/@nrwl/cli/-/cli-14.8.2.tgz" - integrity sha512-I+oblryFkZJYk9TMsBWNdN0SV7OjsiD80gD1WjA1KXEQiFVfopYgwErBrxoenodncXrMFRCk/QR9U5F+23+Vow== + "integrity" "sha512-I+oblryFkZJYk9TMsBWNdN0SV7OjsiD80gD1WjA1KXEQiFVfopYgwErBrxoenodncXrMFRCk/QR9U5F+23+Vow==" + "resolved" "https://registry.npmjs.org/@nrwl/cli/-/cli-14.8.2.tgz" + "version" "14.8.2" dependencies: - nx "14.8.2" + "nx" "14.8.2" "@nrwl/tao@14.8.2": - version "14.8.2" - resolved "https://registry.npmjs.org/@nrwl/tao/-/tao-14.8.2.tgz" - integrity sha512-a4+O307YZJf1H6CDQFGs4DoUvl7xUFSJo2rNHoR9jDlWU+Ug3n0iivX7Fih6Ui0gX4ocEpRwzNMmJhEmEq1BYw== + "integrity" "sha512-a4+O307YZJf1H6CDQFGs4DoUvl7xUFSJo2rNHoR9jDlWU+Ug3n0iivX7Fih6Ui0gX4ocEpRwzNMmJhEmEq1BYw==" + "resolved" "https://registry.npmjs.org/@nrwl/tao/-/tao-14.8.2.tgz" + "version" "14.8.2" dependencies: - nx "14.8.2" + "nx" "14.8.2" "@octokit/auth-token@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.1.tgz#88bc2baf5d706cb258474e722a720a8365dff2ec" - integrity sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA== + "integrity" "sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA==" + "resolved" "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.1.tgz" + "version" "3.0.1" dependencies: "@octokit/types" "^7.0.0" -"@octokit/core@^4.0.0": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.0.5.tgz#589e68c0a35d2afdcd41dafceab072c2fbc6ab5f" - integrity sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA== +"@octokit/core@^4.0.0", "@octokit/core@>=3", "@octokit/core@>=4": + "integrity" "sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA==" + "resolved" "https://registry.npmjs.org/@octokit/core/-/core-4.0.5.tgz" + "version" "4.0.5" dependencies: "@octokit/auth-token" "^3.0.0" "@octokit/graphql" "^5.0.0" "@octokit/request" "^6.0.0" "@octokit/request-error" "^3.0.0" "@octokit/types" "^7.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" + "before-after-hook" "^2.2.0" + "universal-user-agent" "^6.0.0" "@octokit/endpoint@^7.0.0": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.2.tgz#11ee868406ba7bb1642e61bbe676d641f79f02be" - integrity sha512-8/AUACfE9vpRpehE6ZLfEtzkibe5nfsSwFZVMsG8qabqRt1M81qZYUFRZa1B8w8lP6cdfDJfRq9HWS+MbmR7tw== + "integrity" "sha512-8/AUACfE9vpRpehE6ZLfEtzkibe5nfsSwFZVMsG8qabqRt1M81qZYUFRZa1B8w8lP6cdfDJfRq9HWS+MbmR7tw==" + "resolved" "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.2.tgz" + "version" "7.0.2" dependencies: "@octokit/types" "^7.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" + "is-plain-object" "^5.0.0" + "universal-user-agent" "^6.0.0" "@octokit/graphql@^5.0.0": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.1.tgz#a06982514ad131fb6fbb9da968653b2233fade9b" - integrity sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA== + "integrity" "sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA==" + "resolved" "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.1.tgz" + "version" "5.0.1" dependencies: "@octokit/request" "^6.0.0" "@octokit/types" "^7.0.0" - universal-user-agent "^6.0.0" + "universal-user-agent" "^6.0.0" "@octokit/openapi-types@^13.11.0": - version "13.13.1" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-13.13.1.tgz#a783bacb1817c9f61a2a0c3f81ea22ad62340fdf" - integrity sha512-4EuKSk3N95UBWFau3Bz9b3pheQ8jQYbKmBL5+GSuY8YDPDwu03J4BjI+66yNi8aaX/3h1qDpb0mbBkLdr+cfGQ== + "integrity" "sha512-4EuKSk3N95UBWFau3Bz9b3pheQ8jQYbKmBL5+GSuY8YDPDwu03J4BjI+66yNi8aaX/3h1qDpb0mbBkLdr+cfGQ==" + "resolved" "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.13.1.tgz" + "version" "13.13.1" "@octokit/plugin-enterprise-rest@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz" - integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + "integrity" "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==" + "resolved" "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz" + "version" "6.0.1" "@octokit/plugin-paginate-rest@^4.0.0": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.3.1.tgz#553e653ee0318605acd23bf3a799c8bfafdedae3" - integrity sha512-h8KKxESmSFTcXX409CAxlaOYscEDvN2KGQRsLCGT1NSqRW+D6EXLVQ8vuHhFznS9MuH9QYw1GfsUN30bg8hjVA== + "integrity" "sha512-h8KKxESmSFTcXX409CAxlaOYscEDvN2KGQRsLCGT1NSqRW+D6EXLVQ8vuHhFznS9MuH9QYw1GfsUN30bg8hjVA==" + "resolved" "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.3.1.tgz" + "version" "4.3.1" dependencies: "@octokit/types" "^7.5.0" "@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + "integrity" "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==" + "resolved" "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" + "version" "1.0.4" "@octokit/plugin-rest-endpoint-methods@^6.0.0": - version "6.6.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.6.2.tgz#cfd1c7280940d5a82d9af12566bafcb33f22bee4" - integrity sha512-n9dL5KMpz9qVFSNdcVWC8ZPbl68QbTk7+CMPXCXqaMZOLn1n1YuoSFFCy84Ge0fx333fUqpnBHv8BFjwGtUQkA== + "integrity" "sha512-n9dL5KMpz9qVFSNdcVWC8ZPbl68QbTk7+CMPXCXqaMZOLn1n1YuoSFFCy84Ge0fx333fUqpnBHv8BFjwGtUQkA==" + "resolved" "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.6.2.tgz" + "version" "6.6.2" dependencies: "@octokit/types" "^7.5.0" - deprecation "^2.3.1" + "deprecation" "^2.3.1" "@octokit/request-error@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.1.tgz#3fd747913c06ab2195e52004a521889dadb4b295" - integrity sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ== + "integrity" "sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ==" + "resolved" "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.1.tgz" + "version" "3.0.1" dependencies: "@octokit/types" "^7.0.0" - deprecation "^2.0.0" - once "^1.4.0" + "deprecation" "^2.0.0" + "once" "^1.4.0" "@octokit/request@^6.0.0": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.1.tgz#3ceeb22dab09a29595d96594b6720fc14495cf4e" - integrity sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ== + "integrity" "sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ==" + "resolved" "https://registry.npmjs.org/@octokit/request/-/request-6.2.1.tgz" + "version" "6.2.1" dependencies: "@octokit/endpoint" "^7.0.0" "@octokit/request-error" "^3.0.0" "@octokit/types" "^7.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" + "is-plain-object" "^5.0.0" + "node-fetch" "^2.6.7" + "universal-user-agent" "^6.0.0" "@octokit/rest@^19.0.3": - version "19.0.4" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.4.tgz#fd8bed1cefffa486e9ae46a9dc608ce81bcfcbdd" - integrity sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA== + "integrity" "sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA==" + "resolved" "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.4.tgz" + "version" "19.0.4" dependencies: "@octokit/core" "^4.0.0" "@octokit/plugin-paginate-rest" "^4.0.0" @@ -2098,216 +2370,297 @@ "@octokit/plugin-rest-endpoint-methods" "^6.0.0" "@octokit/types@^7.0.0", "@octokit/types@^7.5.0": - version "7.5.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-7.5.1.tgz#4e8b182933c17e1f41cc25d44757dbdb7bd76c1b" - integrity sha512-Zk4OUMLCSpXNI8KZZn47lVLJSsgMyCimsWWQI5hyjZg7hdYm0kjotaIkbG0Pp8SfU2CofMBzonboTqvzn3FrJA== + "integrity" "sha512-Zk4OUMLCSpXNI8KZZn47lVLJSsgMyCimsWWQI5hyjZg7hdYm0kjotaIkbG0Pp8SfU2CofMBzonboTqvzn3FrJA==" + "resolved" "https://registry.npmjs.org/@octokit/types/-/types-7.5.1.tgz" + "version" "7.5.1" dependencies: "@octokit/openapi-types" "^13.11.0" +"@openzeppelin/contracts-upgradeable@^4.7.3": + "integrity" "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" + "resolved" "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz" + "version" "4.7.3" + "@openzeppelin/contracts@^4.2.0", "@openzeppelin/contracts@^4.6.0": - version "4.7.3" - resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz" - integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== + "integrity" "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" + "resolved" "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz" + "version" "4.7.3" "@parcel/watcher@2.0.4": - version "2.0.4" - resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz" - integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== + "integrity" "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==" + "resolved" "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz" + "version" "2.0.4" dependencies: - node-addon-api "^3.2.1" - node-gyp-build "^4.3.0" + "node-addon-api" "^3.2.1" + "node-gyp-build" "^4.3.0" "@scure/base@~1.1.0": - version "1.1.1" - resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" - integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + "integrity" "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" + "resolved" "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" + "version" "1.1.1" "@scure/bip32@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz" - integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== + "integrity" "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==" + "resolved" "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz" + "version" "1.1.0" dependencies: "@noble/hashes" "~1.1.1" "@noble/secp256k1" "~1.6.0" "@scure/base" "~1.1.0" "@scure/bip39@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz" - integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== + "integrity" "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==" + "resolved" "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz" + "version" "1.1.0" dependencies: "@noble/hashes" "~1.1.1" "@scure/base" "~1.1.0" "@sentry/core@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz" - integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + "integrity" "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==" + "resolved" "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz" + "version" "5.30.0" dependencies: "@sentry/hub" "5.30.0" "@sentry/minimal" "5.30.0" "@sentry/types" "5.30.0" "@sentry/utils" "5.30.0" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/hub@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz" - integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + "integrity" "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==" + "resolved" "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz" + "version" "5.30.0" dependencies: "@sentry/types" "5.30.0" "@sentry/utils" "5.30.0" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/minimal@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz" - integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + "integrity" "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==" + "resolved" "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz" + "version" "5.30.0" dependencies: "@sentry/hub" "5.30.0" "@sentry/types" "5.30.0" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/node@^5.18.1": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz" - integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + "integrity" "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==" + "resolved" "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz" + "version" "5.30.0" dependencies: "@sentry/core" "5.30.0" "@sentry/hub" "5.30.0" "@sentry/tracing" "5.30.0" "@sentry/types" "5.30.0" "@sentry/utils" "5.30.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" + "cookie" "^0.4.1" + "https-proxy-agent" "^5.0.0" + "lru_map" "^0.3.3" + "tslib" "^1.9.3" "@sentry/tracing@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz" - integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + "integrity" "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==" + "resolved" "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz" + "version" "5.30.0" dependencies: "@sentry/hub" "5.30.0" "@sentry/minimal" "5.30.0" "@sentry/types" "5.30.0" "@sentry/utils" "5.30.0" - tslib "^1.9.3" + "tslib" "^1.9.3" -"@sentry/types@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" - integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== +"@sentry/types@^7.x", "@sentry/types@5.30.0": + "integrity" "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" + "resolved" "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" + "version" "5.30.0" "@sentry/utils@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz" - integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + "integrity" "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==" + "resolved" "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz" + "version" "5.30.0" dependencies: "@sentry/types" "5.30.0" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sinclair/typebox@^0.24.1": - version "0.24.28" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.28.tgz" - integrity sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow== + "integrity" "sha512-ka0W0KN5i6LfrSocduwliMMpqVgohtPFidKdMEOUjoOFCHcOOYkKsPRxfs5f15oPNHTm6ERAm0GV/+/LTKeiWg==" + "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.44.tgz" + "version" "0.24.44" + +"@sindresorhus/is@^0.14.0": + "integrity" "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" + "version" "0.14.0" "@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + "integrity" "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" + "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + "version" "4.6.0" "@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + "integrity" "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==" + "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" + "version" "1.8.3" dependencies: - type-detect "4.0.8" + "type-detect" "4.0.8" "@sinonjs/fake-timers@^9.1.2": - version "9.1.2" - resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" - integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + "integrity" "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==" + "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" + "version" "9.1.2" dependencies: "@sinonjs/commons" "^1.7.0" -"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.2": - version "0.14.3" - resolved "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz" - integrity sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw== +"@solidity-parser/parser@^0.14.0": + "integrity" "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==" + "resolved" "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz" + "version" "0.14.3" + dependencies: + "antlr4ts" "^0.5.0-alpha.4" + +"@szmarczak/http-timer@^1.1.2": + "integrity" "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==" + "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" + "version" "1.1.2" dependencies: - antlr4ts "^0.5.0-alpha.4" + "defer-to-connect" "^1.0.1" "@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + "integrity" "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==" + "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" + "version" "4.0.6" dependencies: - defer-to-connect "^2.0.0" + "defer-to-connect" "^2.0.0" "@szmarczak/http-timer@^5.0.1": - version "5.0.1" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" - integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + "integrity" "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==" + "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" + "version" "5.0.1" dependencies: - defer-to-connect "^2.0.1" + "defer-to-connect" "^2.0.1" "@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "integrity" "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" + "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" + "version" "2.0.0" + +"@toruslabs/http-helpers@^3.2.0": + "integrity" "sha512-fCfvBHfYzd7AyOYlBo7wihh5nj6+4Ik6V5+nI7H63oiKICjMlByTXSauTUa/qm2mjZJn/OmVYeV5guPIgxoW1w==" + "resolved" "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "lodash.merge" "^4.6.2" + "loglevel" "^1.8.0" + +"@toruslabs/openlogin-jrpc@^2.6.0": + "integrity" "sha512-hX2b1HSBvC6jSVlXuhgdH8qyE83cj6SEiHjQ5VsHfRUv15wBgzj+x2Yjw5pjvbrnYXzUlFvFySs10EU7na1cuA==" + "resolved" "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-2.6.0.tgz" + "version" "2.6.0" + dependencies: + "@toruslabs/openlogin-utils" "^2.1.0" + "end-of-stream" "^1.4.4" + "eth-rpc-errors" "^4.0.3" + "events" "^3.3.0" + "fast-safe-stringify" "^2.1.1" + "once" "^1.4.0" + "pump" "^3.0.0" + "readable-stream" "^3.6.0" + +"@toruslabs/openlogin-utils@^2.1.0": + "integrity" "sha512-UVgjco4winOn4Gj0VRTvjSZgBA84h2OIkKuxrBFjS+yWhgxQBF4hXGp83uicSgx1MujtjyUOdhJrpV2joRHt9w==" + "resolved" "https://registry.npmjs.org/@toruslabs/openlogin-utils/-/openlogin-utils-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "base64url" "^3.0.1" + "keccak" "^3.0.2" + "randombytes" "^2.1.0" + +"@toruslabs/torus-embed@^1.36.2": + "integrity" "sha512-dkTmOconJZSKBfnoFPLXMQiSRFYBVAYLnGb/5PT2dE/cL0BKd2k7iq0RJlbQmmLKWTw7FjurCmX9AaoT9kWIjA==" + "resolved" "https://registry.npmjs.org/@toruslabs/torus-embed/-/torus-embed-1.36.3.tgz" + "version" "1.36.3" + dependencies: + "@metamask/obs-store" "^7.0.0" + "@toruslabs/http-helpers" "^3.2.0" + "@toruslabs/openlogin-jrpc" "^2.6.0" + "create-hash" "^1.2.0" + "end-of-stream" "^1.4.4" + "eth-rpc-errors" "^4.0.3" + "events" "^3.3.0" + "fast-deep-equal" "^3.1.3" + "is-stream" "^2.0.1" + "lodash.merge" "^4.6.2" + "loglevel" "^1.8.0" + "once" "^1.4.0" + "pump" "^3.0.0" + +"@truffle/hdwallet-provider@latest": + "version" "2.0.16" + dependencies: + "@ethereumjs/common" "^2.4.0" + "@ethereumjs/tx" "^3.3.0" + "@metamask/eth-sig-util" "4.0.1" + "@types/web3" "^1.0.20" + "ethereum-cryptography" "1.1.2" + "ethereum-protocol" "^1.0.1" + "ethereumjs-util" "^7.1.5" + "ethereumjs-wallet" "^1.0.2" + "web3" "1.7.4" + "web3-provider-engine" "16.0.3" "@trufflesuite/bigint-buffer@1.1.10": - version "1.1.10" - resolved "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz" - integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== + "integrity" "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==" + "resolved" "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz" + "version" "1.1.10" dependencies: - node-gyp-build "4.4.0" + "node-gyp-build" "4.4.0" "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + "integrity" "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "resolved" "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + "version" "1.0.9" "@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + "integrity" "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + "resolved" "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + "version" "1.0.11" "@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + "integrity" "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "resolved" "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + "version" "1.0.3" "@tsconfig/node16@^1.0.2": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" - integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + "integrity" "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + "resolved" "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" + "version" "1.0.3" "@typechain/ethers-v5@^9.0.0": - version "9.0.0" - resolved "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz" - integrity sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ== + "integrity" "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==" + "resolved" "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz" + "version" "9.0.0" dependencies: - lodash "^4.17.15" - ts-essentials "^7.0.1" + "lodash" "^4.17.15" + "ts-essentials" "^7.0.1" "@typechain/hardhat@^2.3.0": - version "2.3.1" - resolved "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-2.3.1.tgz" - integrity sha512-BQV8OKQi0KAzLXCdsPO0pZBNQQ6ra8A2ucC26uFX/kquRBtJu1yEyWnVSmtr07b5hyRoJRpzUeINLnyqz4/MAw== + "integrity" "sha512-BQV8OKQi0KAzLXCdsPO0pZBNQQ6ra8A2ucC26uFX/kquRBtJu1yEyWnVSmtr07b5hyRoJRpzUeINLnyqz4/MAw==" + "resolved" "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-2.3.1.tgz" + "version" "2.3.1" dependencies: - fs-extra "^9.1.0" + "fs-extra" "^9.1.0" -"@types/abstract-leveldown@*": - version "7.2.0" - resolved "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz" - integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== +"@types/async-eventemitter@^0.2.1": + "integrity" "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==" + "resolved" "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz" + "version" "0.2.1" "@types/babel__core@^7.1.14": - version "7.1.19" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" - integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + "integrity" "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==" + "resolved" "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" + "version" "7.1.19" dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -2316,52 +2669,52 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + "integrity" "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==" + "resolved" "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" + "version" "7.6.4" dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + "integrity" "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==" + "resolved" "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" + "version" "7.4.1" dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.18.2" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz" - integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg== + "integrity" "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==" + "resolved" "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz" + "version" "7.18.2" dependencies: "@babel/types" "^7.3.0" "@types/bignumber.js@^5.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz" - integrity sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA== + "integrity" "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==" + "resolved" "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz" + "version" "5.0.0" dependencies: - bignumber.js "*" + "bignumber.js" "*" "@types/bn.js@*", "@types/bn.js@^5.1.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz" - integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== + "integrity" "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==" + "resolved" "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz" + "version" "5.1.1" dependencies: "@types/node" "*" "@types/bn.js@^4.11.3": - version "4.11.6" - resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + "integrity" "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==" + "resolved" "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz" + "version" "4.11.6" dependencies: "@types/node" "*" "@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": - version "6.0.2" - resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz" - integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== + "integrity" "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==" + "resolved" "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz" + "version" "6.0.2" dependencies: "@types/http-cache-semantics" "*" "@types/keyv" "*" @@ -2369,796 +2722,839 @@ "@types/responselike" "*" "@types/chai-as-promised@^7.1.5": - version "7.1.5" - resolved "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz" - integrity sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ== + "integrity" "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==" + "resolved" "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz" + "version" "7.1.5" dependencies: "@types/chai" "*" "@types/chai@*", "@types/chai@^4.3.0": - version "4.3.3" - resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz" - integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g== + "integrity" "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" + "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz" + "version" "4.3.3" "@types/concat-stream@^1.6.0": - version "1.6.1" - resolved "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz" - integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== + "integrity" "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==" + "resolved" "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz" + "version" "1.6.1" dependencies: "@types/node" "*" "@types/form-data@0.0.33": - version "0.0.33" - resolved "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz" - integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + "integrity" "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==" + "resolved" "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz" + "version" "0.0.33" dependencies: "@types/node" "*" "@types/graceful-fs@^4.1.3": - version "4.1.5" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + "integrity" "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==" + "resolved" "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" + "version" "4.1.5" dependencies: "@types/node" "*" "@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + "integrity" "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + "resolved" "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" + "version" "4.0.1" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + "integrity" "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" + "version" "2.0.4" "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + "integrity" "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + "version" "3.0.1" dependencies: "@types/istanbul-lib-report" "*" "@types/jest@^28.1.7": - version "28.1.8" - resolved "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz" - integrity sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw== + "integrity" "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==" + "resolved" "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz" + "version" "28.1.8" dependencies: - expect "^28.0.0" - pretty-format "^28.0.0" + "expect" "^28.0.0" + "pretty-format" "^28.0.0" "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + "integrity" "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + "version" "7.0.11" "@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + "integrity" "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + "resolved" "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + "version" "0.0.29" "@types/keyv@*": - version "3.1.4" - resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + "integrity" "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==" + "resolved" "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" + "version" "3.1.4" dependencies: "@types/node" "*" -"@types/level-errors@*": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz" - integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== - -"@types/levelup@^4.3.0": - version "4.3.3" - resolved "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz" - integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== - dependencies: - "@types/abstract-leveldown" "*" - "@types/level-errors" "*" - "@types/node" "*" +"@types/lru-cache@^5.1.0": + "integrity" "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + "resolved" "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" + "version" "5.1.1" -"@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0": - version "5.1.1" - resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== +"@types/lru-cache@5.1.1": + "integrity" "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + "resolved" "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" + "version" "5.1.1" "@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + "integrity" "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" + "version" "3.0.5" "@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + "integrity" "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + "resolved" "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" + "version" "1.2.2" "@types/mkdirp@^0.5.2": - version "0.5.2" - resolved "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz" - integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== + "integrity" "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==" + "resolved" "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz" + "version" "0.5.2" dependencies: "@types/node" "*" "@types/mocha@^9.0.0", "@types/mocha@^9.1.0", "@types/mocha@^9.1.1": - version "9.1.1" - resolved "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" - integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== + "integrity" "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" + "resolved" "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" + "version" "9.1.1" "@types/node-fetch@^2.6.2": - version "2.6.2" - resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz" - integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== + "integrity" "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==" + "resolved" "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz" + "version" "2.6.2" dependencies: "@types/node" "*" - form-data "^3.0.0" + "form-data" "^3.0.0" "@types/node@*": - version "18.7.13" - resolved "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz" - integrity sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw== + "integrity" "sha512-vuYaNuEIbOYLTLUAJh50ezEbvxrD43iby+lpUA2aa148Nh5kX/AVO/9m1Ahmbux2iU5uxJTNF9g2Y+31uml7RQ==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-18.8.1.tgz" + "version" "18.8.1" "@types/node@^10.0.3": - version "10.17.60" - resolved "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" - integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + "integrity" "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" + "version" "10.17.60" "@types/node@^12.12.6": - version "12.20.55" - resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + "integrity" "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" + "version" "12.20.55" "@types/node@^17.0.23": - version "17.0.45" - resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + "integrity" "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" + "version" "17.0.45" "@types/node@^8.0.0": - version "8.10.66" - resolved "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz" - integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + "integrity" "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz" + "version" "8.10.66" "@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + "integrity" "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" + "resolved" "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" + "version" "2.4.1" "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" + "version" "4.0.0" "@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + "integrity" "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==" + "resolved" "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz" + "version" "3.1.0" dependencies: "@types/node" "*" "@types/prettier@^2.1.1", "@types/prettier@^2.1.5": - version "2.7.1" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz" - integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow== + "integrity" "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==" + "resolved" "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz" + "version" "2.7.1" "@types/qs@^6.2.31", "@types/qs@^6.9.7": - version "6.9.7" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + "integrity" "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + "resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" + "version" "6.9.7" "@types/resolve@^0.0.8": - version "0.0.8" - resolved "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + "integrity" "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==" + "resolved" "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz" + "version" "0.0.8" dependencies: "@types/node" "*" "@types/responselike@*", "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + "integrity" "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==" + "resolved" "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" + "version" "1.0.0" dependencies: "@types/node" "*" "@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + "integrity" "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==" + "resolved" "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz" + "version" "4.0.3" dependencies: "@types/node" "*" "@types/seedrandom@3.0.1": - version "3.0.1" - resolved "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz" - integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== + "integrity" "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==" + "resolved" "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz" + "version" "3.0.1" "@types/sinon-chai@^3.2.3": - version "3.2.8" - resolved "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz" - integrity sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g== + "integrity" "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==" + "resolved" "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz" + "version" "3.2.8" dependencies: "@types/chai" "*" "@types/sinon" "*" "@types/sinon@*": - version "10.0.13" - resolved "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz" - integrity sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ== + "integrity" "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==" + "resolved" "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz" + "version" "10.0.13" dependencies: "@types/sinonjs__fake-timers" "*" "@types/sinonjs__fake-timers@*": - version "8.1.2" - resolved "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz" - integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== + "integrity" "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==" + "resolved" "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz" + "version" "8.1.2" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + "integrity" "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + "resolved" "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" + "version" "2.0.1" "@types/underscore@*": - version "1.11.4" - resolved "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz" - integrity sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg== + "integrity" "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==" + "resolved" "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz" + "version" "1.11.4" + +"@types/web3@^1.0.20": + "integrity" "sha512-eFiYJKggNrOl0nsD+9cMh2MLk4zVBfXfGnVeRFbpiZzBE20eet4KLA3fXcjSuHaBn0RnQzwLAGdgzgzdet4C0A==" + "resolved" "https://registry.npmjs.org/@types/web3/-/web3-1.2.2.tgz" + "version" "1.2.2" + dependencies: + "web3" "*" "@types/web3@1.0.19": - version "1.0.19" - resolved "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz" - integrity sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A== + "integrity" "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==" + "resolved" "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz" + "version" "1.0.19" dependencies: "@types/bn.js" "*" "@types/underscore" "*" "@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + "integrity" "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + "version" "21.0.0" "@types/yargs@^17.0.8": - version "17.0.11" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.11.tgz" - integrity sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA== + "integrity" "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==" + "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz" + "version" "17.0.13" dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.17.0": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.1.tgz" - integrity sha512-ky7EFzPhqz3XlhS7vPOoMDaQnQMn+9o5ICR9CPr/6bw8HrFkzhMSxuA3gRfiJVvs7geYrSeawGJjZoZQKCOglQ== - dependencies: - "@typescript-eslint/scope-manager" "5.38.1" - "@typescript-eslint/type-utils" "5.38.1" - "@typescript-eslint/utils" "5.38.1" - debug "^4.3.4" - ignore "^5.2.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.17.0": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.38.1.tgz" - integrity sha512-LDqxZBVFFQnQRz9rUZJhLmox+Ep5kdUmLatLQnCRR6523YV+XhRjfYzStQ4MheFA8kMAfUlclHSbu+RKdRwQKw== - dependencies: - "@typescript-eslint/scope-manager" "5.38.1" - "@typescript-eslint/types" "5.38.1" - "@typescript-eslint/typescript-estree" "5.38.1" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.38.1": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.38.1.tgz" - integrity sha512-BfRDq5RidVU3RbqApKmS7RFMtkyWMM50qWnDAkKgQiezRtLKsoyRKIvz1Ok5ilRWeD9IuHvaidaLxvGx/2eqTQ== - dependencies: - "@typescript-eslint/types" "5.38.1" - "@typescript-eslint/visitor-keys" "5.38.1" - -"@typescript-eslint/type-utils@5.38.1": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.38.1.tgz" - integrity sha512-UU3j43TM66gYtzo15ivK2ZFoDFKKP0k03MItzLdq0zV92CeGCXRfXlfQX5ILdd4/DSpHkSjIgLLLh1NtkOJOAw== - dependencies: - "@typescript-eslint/typescript-estree" "5.38.1" - "@typescript-eslint/utils" "5.38.1" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.38.1": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.38.1.tgz" - integrity sha512-QTW1iHq1Tffp9lNfbfPm4WJabbvpyaehQ0SrvVK2yfV79SytD9XDVxqiPvdrv2LK7DGSFo91TB2FgWanbJAZXg== - -"@typescript-eslint/typescript-estree@5.38.1": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.1.tgz" - integrity sha512-99b5e/Enoe8fKMLdSuwrfH/C0EIbpUWmeEKHmQlGZb8msY33qn1KlkFww0z26o5Omx7EVjzVDCWEfrfCDHfE7g== - dependencies: - "@typescript-eslint/types" "5.38.1" - "@typescript-eslint/visitor-keys" "5.38.1" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.38.1": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.38.1.tgz" - integrity sha512-oIuUiVxPBsndrN81oP8tXnFa/+EcZ03qLqPDfSZ5xIJVm7A9V0rlkQwwBOAGtrdN70ZKDlKv+l1BeT4eSFxwXA== + "integrity" "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz" + "version" "5.39.0" + dependencies: + "@typescript-eslint/scope-manager" "5.39.0" + "@typescript-eslint/type-utils" "5.39.0" + "@typescript-eslint/utils" "5.39.0" + "debug" "^4.3.4" + "ignore" "^5.2.0" + "regexpp" "^3.2.0" + "semver" "^7.3.7" + "tsutils" "^3.21.0" + +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.17.0": + "integrity" "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz" + "version" "5.39.0" + dependencies: + "@typescript-eslint/scope-manager" "5.39.0" + "@typescript-eslint/types" "5.39.0" + "@typescript-eslint/typescript-estree" "5.39.0" + "debug" "^4.3.4" + +"@typescript-eslint/scope-manager@5.39.0": + "integrity" "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz" + "version" "5.39.0" + dependencies: + "@typescript-eslint/types" "5.39.0" + "@typescript-eslint/visitor-keys" "5.39.0" + +"@typescript-eslint/type-utils@5.39.0": + "integrity" "sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz" + "version" "5.39.0" + dependencies: + "@typescript-eslint/typescript-estree" "5.39.0" + "@typescript-eslint/utils" "5.39.0" + "debug" "^4.3.4" + "tsutils" "^3.21.0" + +"@typescript-eslint/types@5.39.0": + "integrity" "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz" + "version" "5.39.0" + +"@typescript-eslint/typescript-estree@5.39.0": + "integrity" "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz" + "version" "5.39.0" + dependencies: + "@typescript-eslint/types" "5.39.0" + "@typescript-eslint/visitor-keys" "5.39.0" + "debug" "^4.3.4" + "globby" "^11.1.0" + "is-glob" "^4.0.3" + "semver" "^7.3.7" + "tsutils" "^3.21.0" + +"@typescript-eslint/utils@5.39.0": + "integrity" "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz" + "version" "5.39.0" dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.38.1" - "@typescript-eslint/types" "5.38.1" - "@typescript-eslint/typescript-estree" "5.38.1" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + "@typescript-eslint/scope-manager" "5.39.0" + "@typescript-eslint/types" "5.39.0" + "@typescript-eslint/typescript-estree" "5.39.0" + "eslint-scope" "^5.1.1" + "eslint-utils" "^3.0.0" -"@typescript-eslint/visitor-keys@5.38.1": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.1.tgz" - integrity sha512-bSHr1rRxXt54+j2n4k54p4fj8AHJ49VDWtjpImOpzQj4qjAiOpPni+V1Tyajh19Api1i844F757cur8wH3YvOA== +"@typescript-eslint/visitor-keys@5.39.0": + "integrity" "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz" + "version" "5.39.0" dependencies: - "@typescript-eslint/types" "5.38.1" - eslint-visitor-keys "^3.3.0" + "@typescript-eslint/types" "5.39.0" + "eslint-visitor-keys" "^3.3.0" "@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + "integrity" "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + "resolved" "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" + "version" "1.1.2" "@yarnpkg/lockfile@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + "integrity" "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + "resolved" "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + "version" "1.1.0" "@yarnpkg/parsers@^3.0.0-rc.18": - version "3.0.0-rc.22" - resolved "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.22.tgz" - integrity sha512-GAWDjXduYBUVmOzlj3X0OwTQ1BV4ZeDdgw8yXST3K0lB95drWEGxa1at0v7BmHDyK2y1F1IJufc8N4yrcuXjWg== + "integrity" "sha512-GAWDjXduYBUVmOzlj3X0OwTQ1BV4ZeDdgw8yXST3K0lB95drWEGxa1at0v7BmHDyK2y1F1IJufc8N4yrcuXjWg==" + "resolved" "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.22.tgz" + "version" "3.0.0-rc.22" dependencies: - js-yaml "^3.10.0" - tslib "^2.4.0" + "js-yaml" "^3.10.0" + "tslib" "^2.4.0" "@zkochan/js-yaml@0.0.6": - version "0.0.6" - resolved "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz" - integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== - dependencies: - argparse "^2.0.1" - -JSONStream@^1.0.4: - version "1.3.5" - resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -abortcontroller-polyfill@^1.7.3: - version "1.7.3" - resolved "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz" - integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== - -abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -abstract-leveldown@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz" - integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== - dependencies: - buffer "^6.0.3" - catering "^2.0.0" - is-buffer "^2.0.5" - level-concat-iterator "^3.0.0" - level-supports "^2.0.1" - queue-microtask "^1.2.3" - -abstract-leveldown@~6.2.1: - version "6.2.3" - resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - 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" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.4.1, acorn@^8.8.0: - version "8.8.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== - -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" - integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== - -adm-zip@^0.4.16: - version "0.4.16" - resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" - integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== - -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - -aes-js@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz" - integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - 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@3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.0.0: - version "6.1.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz" - integrity sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg== - -antlr4ts@^0.5.0-alpha.4: - version "0.5.0-alpha.4" - resolved "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz" - integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== - -anymatch@^3.0.3, anymatch@~3.1.1, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-back@^3.0.1, array-back@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz" - integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== - -array-back@^4.0.1, array-back@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" - integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== - -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" - integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== - -array.prototype.reduce@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz" - integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -asap@^2.0.0, asap@~2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-eventemitter@^0.2.4: - version "0.2.4" - resolved "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.4.0: - version "2.6.4" - resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -babel-jest@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz" - integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== + "integrity" "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==" + "resolved" "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz" + "version" "0.0.6" + dependencies: + "argparse" "^2.0.1" + +"abbrev@^1.0.0", "abbrev@1": + "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "version" "1.1.1" + +"abort-controller@^3.0.0": + "integrity" "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==" + "resolved" "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "event-target-shim" "^5.0.0" + +"abortcontroller-polyfill@^1.7.3": + "integrity" "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==" + "resolved" "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz" + "version" "1.7.3" + +"abstract-level@^1.0.0", "abstract-level@^1.0.2", "abstract-level@^1.0.3": + "integrity" "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==" + "resolved" "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "buffer" "^6.0.3" + "catering" "^2.1.0" + "is-buffer" "^2.0.5" + "level-supports" "^4.0.0" + "level-transcoder" "^1.0.1" + "module-error" "^1.0.1" + "queue-microtask" "^1.2.3" + +"abstract-leveldown@^7.2.0": + "integrity" "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==" + "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "buffer" "^6.0.3" + "catering" "^2.0.0" + "is-buffer" "^2.0.5" + "level-concat-iterator" "^3.0.0" + "level-supports" "^2.0.1" + "queue-microtask" "^1.2.3" + +"abstract-leveldown@~2.6.0": + "integrity" "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==" + "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz" + "version" "2.6.3" + dependencies: + "xtend" "~4.0.0" + +"abstract-leveldown@~2.7.1": + "integrity" "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==" + "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz" + "version" "2.7.2" + dependencies: + "xtend" "~4.0.0" + +"accepts@~1.3.8": + "integrity" "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==" + "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + "version" "1.3.8" + dependencies: + "mime-types" "~2.1.34" + "negotiator" "0.6.3" + +"acorn-jsx@^5.3.2": + "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + "version" "5.3.2" + +"acorn-walk@^8.1.1": + "integrity" "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + "version" "8.2.0" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.4.1", "acorn@^8.8.0": + "integrity" "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" + "version" "8.8.0" + +"add-stream@^1.0.0": + "integrity" "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==" + "resolved" "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" + "version" "1.0.0" + +"adm-zip@^0.4.16": + "integrity" "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" + "resolved" "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" + "version" "0.4.16" + +"aes-js@^3.1.2": + "integrity" "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" + "resolved" "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz" + "version" "3.1.2" + +"aes-js@3.0.0": + "integrity" "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + "resolved" "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz" + "version" "3.0.0" + +"agent-base@^6.0.2", "agent-base@6": + "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" + "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "debug" "4" + +"agentkeepalive@^4.2.1": + "integrity" "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==" + "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "debug" "^4.1.0" + "depd" "^1.1.2" + "humanize-ms" "^1.2.1" + +"aggregate-error@^3.0.0": + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" + "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" + +"ajv@^6.10.0", "ajv@^6.12.3", "ajv@^6.12.4": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + 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": + "integrity" "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + "version" "4.1.3" + +"ansi-colors@3.2.3": + "integrity" "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz" + "version" "3.2.3" + +"ansi-colors@4.1.1": + "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + "version" "4.1.1" + +"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.0": + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "type-fest" "^0.21.3" + +"ansi-regex@^3.0.0": + "integrity" "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" + "version" "3.0.1" + +"ansi-regex@^4.1.0": + "integrity" "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" + "version" "4.1.1" + +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + +"ansi-regex@^6.0.1": + "integrity" "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + "version" "6.0.1" + +"ansi-styles@^3.2.0": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"ansi-styles@^5.0.0": + "integrity" "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + "version" "5.2.0" + +"ansi-styles@^6.0.0": + "integrity" "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz" + "version" "6.1.1" + +"antlr4ts@^0.5.0-alpha.4": + "integrity" "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" + "resolved" "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz" + "version" "0.5.0-alpha.4" + +"anymatch@^3.0.3", "anymatch@~3.1.1", "anymatch@~3.1.2": + "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0", "aproba@^2.0.0": + "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + "version" "2.0.0" + +"are-we-there-yet@^3.0.0": + "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" + +"arg@^4.1.0": + "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + "version" "4.1.3" + +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + +"array-back@^3.0.1", "array-back@^3.1.0": + "integrity" "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" + "resolved" "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz" + "version" "3.1.0" + +"array-back@^4.0.1": + "integrity" "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" + "resolved" "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" + "version" "4.0.2" + +"array-back@^4.0.2": + "integrity" "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" + "resolved" "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" + "version" "4.0.2" + +"array-differ@^3.0.0": + "integrity" "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==" + "resolved" "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" + "version" "3.0.0" + +"array-flatten@1.1.1": + "integrity" "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + "version" "1.1.1" + +"array-ify@^1.0.0": + "integrity" "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==" + "resolved" "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" + "version" "1.0.0" + +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + +"array-uniq@1.0.3": + "integrity" "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + "version" "1.0.3" + +"array.prototype.reduce@^1.0.4": + "integrity" "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==" + "resolved" "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.2" + "es-array-method-boxes-properly" "^1.0.0" + "is-string" "^1.0.7" + +"arrify@^1.0.1": + "integrity" "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" + "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + "version" "1.0.1" + +"arrify@^2.0.1": + "integrity" "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + "resolved" "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" + "version" "2.0.1" + +"asap@^2.0.0", "asap@~2.0.6": + "integrity" "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + "resolved" "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + "version" "2.0.6" + +"asn1.js@^5.2.0": + "integrity" "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==" + "resolved" "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" + "version" "5.4.1" + dependencies: + "bn.js" "^4.0.0" + "inherits" "^2.0.1" + "minimalistic-assert" "^1.0.0" + "safer-buffer" "^2.1.0" + +"asn1@~0.2.3": + "integrity" "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==" + "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "safer-buffer" "~2.1.0" + +"assert-plus@^1.0.0", "assert-plus@1.0.0": + "integrity" "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "version" "1.0.0" + +"assertion-error@^1.1.0": + "integrity" "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + "resolved" "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" + "version" "1.1.0" + +"astral-regex@^2.0.0": + "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + "version" "2.0.0" + +"async-eventemitter@^0.2.2", "async-eventemitter@^0.2.4": + "integrity" "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==" + "resolved" "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz" + "version" "0.2.4" + dependencies: + "async" "^2.4.0" + +"async-limiter@~1.0.0": + "integrity" "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + "resolved" "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" + "version" "1.0.1" + +"async-mutex@^0.2.6": + "integrity" "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==" + "resolved" "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "tslib" "^2.0.0" + +"async@^1.4.2": + "integrity" "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" + "version" "1.5.2" + +"async@^2.0.1", "async@^2.1.2", "async@^2.4.0", "async@^2.5.0": + "integrity" "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==" + "resolved" "https://registry.npmjs.org/async/-/async-2.6.4.tgz" + "version" "2.6.4" + dependencies: + "lodash" "^4.17.14" + +"asynckit@^0.4.0": + "integrity" "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + "version" "0.4.0" + +"at-least-node@^1.0.0": + "integrity" "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + "resolved" "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + "version" "1.0.0" + +"available-typed-arrays@^1.0.5": + "integrity" "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + "resolved" "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + "version" "1.0.5" + +"aws-sign2@~0.7.0": + "integrity" "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" + "resolved" "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" + "version" "0.7.0" + +"aws4@^1.8.0": + "integrity" "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "resolved" "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" + "version" "1.11.0" + +"axios@^0.21.1": + "integrity" "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==" + "resolved" "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" + "version" "0.21.4" + dependencies: + "follow-redirects" "^1.14.0" + +"babel-jest@^28.1.3": + "integrity" "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==" + "resolved" "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/transform" "^28.1.3" "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^28.1.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" + "babel-plugin-istanbul" "^6.1.1" + "babel-preset-jest" "^28.1.3" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "slash" "^3.0.0" -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== +"babel-plugin-istanbul@^6.1.1": + "integrity" "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==" + "resolved" "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + "version" "6.1.1" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" + "istanbul-lib-instrument" "^5.0.4" + "test-exclude" "^6.0.0" -babel-plugin-jest-hoist@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz" - integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== +"babel-plugin-jest-hoist@^28.1.3": + "integrity" "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==" + "resolved" "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== +"babel-plugin-polyfill-corejs2@^0.3.3": + "integrity" "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" + "semver" "^6.1.1" + +"babel-plugin-polyfill-corejs3@^0.6.0": + "integrity" "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz" + "version" "0.6.0" + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + "core-js-compat" "^3.25.1" + +"babel-plugin-polyfill-regenerator@^0.4.1": + "integrity" "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + +"babel-preset-current-node-syntax@^1.0.0": + "integrity" "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==" + "resolved" "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + "version" "1.0.1" dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -3173,1908 +3569,2324 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz" - integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== - dependencies: - babel-plugin-jest-hoist "^28.1.3" - babel-preset-current-node-syntax "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2, base-x@^3.0.8: - version "3.0.9" - resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -before-after-hook@^2.2.0: - version "2.2.2" - resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz" - integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== - -bignumber.js@*, bignumber.js@^9.0.0, bignumber.js@^9.0.1: - version "9.1.0" - resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz" - integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== - -bin-links@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" - integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== - dependencies: - cmd-shim "^5.0.0" - mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^2.0.0" - read-cmd-shim "^3.0.0" - rimraf "^3.0.0" - write-file-atomic "^4.0.0" - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -blakejs@^1.1.0: - version "1.2.1" - resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -bluebird@^3.5.0: - version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.0, body-parser@^1.16.0: - version "1.20.0" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.10.3" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserslist@^4.21.3: - version "4.21.4" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== - dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" - -bs58@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58check@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-to-arraybuffer@^0.0.5: - version "0.0.5" - resolved "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz" - integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer-xor@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz" - integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== - dependencies: - safe-buffer "^5.1.1" - -buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bufferutil@4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz" - integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== - dependencies: - node-gyp-build "^4.3.0" - -bufferutil@^4.0.1: - version "4.0.6" - resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz" - integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== - dependencies: - node-gyp-build "^4.3.0" - -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" - integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -byte-size@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz" - integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== +"babel-preset-jest@^28.1.3": + "integrity" "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==" + "resolved" "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz" + "version" "28.1.3" + dependencies: + "babel-plugin-jest-hoist" "^28.1.3" + "babel-preset-current-node-syntax" "^1.0.0" + +"backoff@^2.5.0": + "integrity" "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==" + "resolved" "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "precond" "0.2" + +"balanced-match@^1.0.0": + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + "version" "1.0.2" + +"base-x@^3.0.2", "base-x@^3.0.8": + "integrity" "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==" + "resolved" "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" + "version" "3.0.9" + dependencies: + "safe-buffer" "^5.0.1" + +"base64-js@^1.3.1": + "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + "version" "1.5.1" + +"base64url@^3.0.1": + "integrity" "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + "resolved" "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz" + "version" "3.0.1" + +"bcrypt-pbkdf@^1.0.0": + "integrity" "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" + "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "tweetnacl" "^0.14.3" + +"bech32@1.1.4": + "integrity" "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + "resolved" "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" + "version" "1.1.4" + +"before-after-hook@^2.2.0": + "integrity" "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + "resolved" "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" + "version" "2.2.3" + +"bigint-crypto-utils@^3.0.23": + "integrity" "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==" + "resolved" "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz" + "version" "3.1.7" + dependencies: + "bigint-mod-arith" "^3.1.0" + +"bigint-mod-arith@^3.1.0": + "integrity" "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==" + "resolved" "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz" + "version" "3.1.2" + +"bignumber.js@*", "bignumber.js@^9.0.0", "bignumber.js@^9.0.1": + "integrity" "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==" + "resolved" "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz" + "version" "9.1.0" + +"bin-links@^3.0.0": + "integrity" "sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==" + "resolved" "https://registry.npmjs.org/bin-links/-/bin-links-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "cmd-shim" "^5.0.0" + "mkdirp-infer-owner" "^2.0.0" + "npm-normalize-package-bin" "^2.0.0" + "read-cmd-shim" "^3.0.0" + "rimraf" "^3.0.0" + "write-file-atomic" "^4.0.0" + +"binary-extensions@^2.0.0": + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + "version" "2.2.0" + +"bl@^4.0.3", "bl@^4.1.0": + "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" + "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "buffer" "^5.5.0" + "inherits" "^2.0.4" + "readable-stream" "^3.4.0" + +"blakejs@^1.1.0": + "integrity" "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + "resolved" "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" + "version" "1.2.1" + +"bluebird@^3.5.0": + "integrity" "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + "version" "3.7.2" + +"bn.js@^4.0.0", "bn.js@^4.1.0", "bn.js@^4.11.0", "bn.js@^4.11.6", "bn.js@^4.11.8", "bn.js@^4.11.9": + "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + "version" "4.12.0" + +"bn.js@^4.11.1", "bn.js@^4.4.0": + "version" "4.11.9" + +"bn.js@^5.0.0": + "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + "version" "5.2.1" + +"bn.js@^5.1.1": + "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + "version" "5.2.1" + +"bn.js@^5.1.2": + "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + "version" "5.2.1" + +"bn.js@^5.2.0": + "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + "version" "5.2.1" + +"bn.js@^5.2.1": + "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + "version" "5.2.1" + +"bn.js@4.11.6": + "integrity" "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" + "version" "4.11.6" + +"body-parser@^1.16.0", "body-parser@1.20.0": + "integrity" "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==" + "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" + "version" "1.20.0" + dependencies: + "bytes" "3.1.2" + "content-type" "~1.0.4" + "debug" "2.6.9" + "depd" "2.0.0" + "destroy" "1.2.0" + "http-errors" "2.0.0" + "iconv-lite" "0.4.24" + "on-finished" "2.4.1" + "qs" "6.10.3" + "raw-body" "2.5.1" + "type-is" "~1.6.18" + "unpipe" "1.0.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"brace-expansion@^2.0.1": + "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "balanced-match" "^1.0.0" + +"braces@^3.0.2", "braces@~3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"brorand@^1.0.1", "brorand@^1.1.0": + "integrity" "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + "resolved" "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + "version" "1.1.0" + +"browser-level@^1.0.1": + "integrity" "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==" + "resolved" "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "abstract-level" "^1.0.2" + "catering" "^2.1.1" + "module-error" "^1.0.2" + "run-parallel-limit" "^1.1.0" + +"browser-stdout@1.3.1": + "integrity" "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + "version" "1.3.1" + +"browserify-aes@^1.0.0", "browserify-aes@^1.0.4", "browserify-aes@^1.2.0": + "integrity" "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==" + "resolved" "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "buffer-xor" "^1.0.3" + "cipher-base" "^1.0.0" + "create-hash" "^1.1.0" + "evp_bytestokey" "^1.0.3" + "inherits" "^2.0.1" + "safe-buffer" "^5.0.1" + +"browserify-cipher@^1.0.0": + "integrity" "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==" + "resolved" "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "browserify-aes" "^1.0.4" + "browserify-des" "^1.0.0" + "evp_bytestokey" "^1.0.0" + +"browserify-des@^1.0.0": + "integrity" "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==" + "resolved" "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "cipher-base" "^1.0.1" + "des.js" "^1.0.0" + "inherits" "^2.0.1" + "safe-buffer" "^5.1.2" + +"browserify-rsa@^4.0.0", "browserify-rsa@^4.0.1": + "integrity" "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==" + "resolved" "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "bn.js" "^5.0.0" + "randombytes" "^2.0.1" + +"browserify-sign@^4.0.0": + "integrity" "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==" + "resolved" "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "bn.js" "^5.1.1" + "browserify-rsa" "^4.0.1" + "create-hash" "^1.2.0" + "create-hmac" "^1.1.7" + "elliptic" "^6.5.3" + "inherits" "^2.0.4" + "parse-asn1" "^5.1.5" + "readable-stream" "^3.6.0" + "safe-buffer" "^5.2.0" + +"browserslist@^4.21.3", "browserslist@^4.21.4", "browserslist@>= 4.21.0": + "integrity" "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" + "version" "4.21.4" + dependencies: + "caniuse-lite" "^1.0.30001400" + "electron-to-chromium" "^1.4.251" + "node-releases" "^2.0.6" + "update-browserslist-db" "^1.0.9" + +"bs58@^4.0.0": + "integrity" "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==" + "resolved" "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "base-x" "^3.0.2" + +"bs58check@^2.1.2": + "integrity" "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==" + "resolved" "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "bs58" "^4.0.0" + "create-hash" "^1.1.0" + "safe-buffer" "^5.1.2" + +"bser@2.1.1": + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" + "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "node-int64" "^0.4.0" + +"btoa@^1.2.1": + "integrity" "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + "resolved" "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz" + "version" "1.2.1" + +"buffer-from@^1.0.0": + "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + "version" "1.1.2" + +"buffer-to-arraybuffer@^0.0.5": + "integrity" "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" + "resolved" "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz" + "version" "0.0.5" + +"buffer-xor@^1.0.3": + "integrity" "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + "resolved" "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + "version" "1.0.3" + +"buffer@^5.0.5", "buffer@^5.5.0", "buffer@^5.6.0": + "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + "version" "5.7.1" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.1.13" + +"buffer@^6.0.3": + "integrity" "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + "version" "6.0.3" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.2.1" + +"bufferutil@^4.0.1", "bufferutil@4.0.5": + "integrity" "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==" + "resolved" "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "node-gyp-build" "^4.3.0" + +"bufio@^1.0.7": + "integrity" "sha512-bd1dDQhiC+bEbEfg56IdBv7faWa6OipMs/AFFFvtFnB3wAYjlwQpQRZ0pm6ZkgtfL0pILRXhKxOiQj6UzoMR7A==" + "resolved" "https://registry.npmjs.org/bufio/-/bufio-1.0.7.tgz" + "version" "1.0.7" + +"builtins@^1.0.3": + "integrity" "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" + "resolved" "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" + "version" "1.0.3" + +"builtins@^5.0.0": + "integrity" "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==" + "resolved" "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "semver" "^7.0.0" + +"busboy@^1.6.0": + "integrity" "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==" + "resolved" "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" + "version" "1.6.0" + dependencies: + "streamsearch" "^1.1.0" + +"byte-size@^7.0.0": + "integrity" "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==" + "resolved" "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz" + "version" "7.0.1" -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +"bytes@3.1.2": + "integrity" "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + "version" "3.1.2" -cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: - version "16.1.3" - resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" - integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== +"cacache@^16.0.0", "cacache@^16.0.6", "cacache@^16.1.0": + "integrity" "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==" + "resolved" "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" + "version" "16.1.3" dependencies: "@npmcli/fs" "^2.1.0" "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - unique-filename "^2.0.0" - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-lookup@^6.0.4: - version "6.1.0" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz" - integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" - 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.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0, camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001400: - version "1.0.30001414" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz" - integrity sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg== - -caseless@^0.12.0, caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -catering@^2.0.0, catering@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - -cbor@^5.0.2: - version "5.2.0" - resolved "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== - dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" - -chai-as-promised@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz" - integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== - dependencies: - check-error "^1.0.2" - -chai-string@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz" - integrity sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw== - -chai@^4.3.6: - version "4.3.6" - resolved "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" - loupe "^2.3.1" - pathval "^1.1.1" - type-detect "^4.0.5" - -chalk@4.1.0, chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - 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" - -chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + "chownr" "^2.0.0" + "fs-minipass" "^2.1.0" + "glob" "^8.0.1" + "infer-owner" "^1.0.4" + "lru-cache" "^7.7.1" + "minipass" "^3.1.6" + "minipass-collect" "^1.0.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "mkdirp" "^1.0.4" + "p-map" "^4.0.0" + "promise-inflight" "^1.0.1" + "rimraf" "^3.0.2" + "ssri" "^9.0.0" + "tar" "^6.1.11" + "unique-filename" "^2.0.0" + +"cacheable-lookup@^5.0.3": + "integrity" "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" + "resolved" "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" + "version" "5.0.4" + +"cacheable-lookup@^6.0.4": + "integrity" "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==" + "resolved" "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz" + "version" "6.1.0" + +"cacheable-request@^6.0.0": + "integrity" "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==" + "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "clone-response" "^1.0.2" + "get-stream" "^5.1.0" + "http-cache-semantics" "^4.0.0" + "keyv" "^3.0.0" + "lowercase-keys" "^2.0.0" + "normalize-url" "^4.1.0" + "responselike" "^1.0.2" + +"cacheable-request@^7.0.2": + "integrity" "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==" + "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" + "version" "7.0.2" + dependencies: + "clone-response" "^1.0.2" + "get-stream" "^5.1.0" + "http-cache-semantics" "^4.0.0" + "keyv" "^4.0.0" + "lowercase-keys" "^2.0.0" + "normalize-url" "^6.0.1" + "responselike" "^2.0.0" + +"call-bind@^1.0.0", "call-bind@^1.0.2": + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "function-bind" "^1.1.1" + "get-intrinsic" "^1.0.2" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"camelcase-keys@^6.2.2": + "integrity" "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==" + "resolved" "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" + "version" "6.2.2" + dependencies: + "camelcase" "^5.3.1" + "map-obj" "^4.0.0" + "quick-lru" "^4.0.1" + +"camelcase@^5.0.0", "camelcase@^5.3.1": + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + "version" "5.3.1" + +"camelcase@^6.0.0": + "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + "version" "6.3.0" + +"camelcase@^6.2.0": + "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + "version" "6.3.0" + +"caniuse-lite@^1.0.30001400": + "integrity" "sha512-ER+PfgCJUe8BqunLGWd/1EY4g8AzQcsDAVzdtMGKVtQEmKAwaFfU6vb7EAVIqTMYsqxBorYZi2+22Iouj/y7GQ==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001415.tgz" + "version" "1.0.30001415" + +"caseless@^0.12.0", "caseless@~0.12.0": + "integrity" "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + "resolved" "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + "version" "0.12.0" + +"catering@^2.0.0": + "version" "2.1.0" + dependencies: + "queue-tick" "^1.0.0" + +"catering@^2.1.0", "catering@^2.1.1": + "integrity" "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==" + "resolved" "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz" + "version" "2.1.1" + +"cbor@^5.0.2": + "integrity" "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==" + "resolved" "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "bignumber.js" "^9.0.1" + "nofilter" "^1.0.4" + +"chai-as-promised@^7.1.1": + "integrity" "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==" + "resolved" "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "check-error" "^1.0.2" + +"chai-string@^1.5.0": + "integrity" "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==" + "resolved" "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz" + "version" "1.5.0" + +"chai@^4.1.2", "chai@^4.3.4", "chai@^4.3.6", "chai@>= 2.1.2 < 5": + "integrity" "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==" + "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz" + "version" "4.3.6" + dependencies: + "assertion-error" "^1.1.0" + "check-error" "^1.0.2" + "deep-eql" "^3.0.1" + "get-func-name" "^2.0.0" + "loupe" "^2.3.1" + "pathval" "^1.1.1" + "type-detect" "^4.0.5" + +"chalk@^2.0.0": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^2.4.1": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^2.4.2": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.1", "chalk@^4.1.2": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@4.1.0": + "integrity" "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"char-regex@^1.0.2": + "integrity" "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + "resolved" "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + "version" "1.0.2" + +"chardet@^0.7.0": + "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + "version" "0.7.0" "charenc@>= 0.0.1": - version "0.0.2" - resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== - -chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.2.0" + "integrity" "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" + "resolved" "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" + "version" "0.0.2" + +"check-error@^1.0.2": + "integrity" "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" + "resolved" "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" + "version" "1.0.2" + +"checkpoint-store@^1.1.0": + "integrity" "sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==" + "resolved" "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "functional-red-black-tree" "^1.0.1" + +"chokidar@^3.4.0", "chokidar@^3.5.1", "chokidar@^3.5.2", "chokidar@3.5.3": + "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + "version" "3.5.3" + dependencies: + "anymatch" "~3.1.2" + "braces" "~3.0.2" + "glob-parent" "~5.1.2" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.6.0" optionalDependencies: - fsevents "~2.1.1" - -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" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" + "fsevents" "~2.3.2" + +"chokidar@3.3.0": + "integrity" "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "anymatch" "~3.1.1" + "braces" "~3.0.2" + "glob-parent" "~5.1.0" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.2.0" optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.2.0: - version "3.3.2" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz" - integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== - -cids@^0.7.1: - version "0.7.5" - resolved "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz" - integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== - dependencies: - buffer "^5.5.0" - class-is "^1.1.0" - multibase "~0.6.0" - multicodec "^1.0.0" - multihashes "~0.4.15" - -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" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -cjs-module-lexer@^1.0.0: - version "1.2.2" - resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" - integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== - -class-is@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz" - integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@3.1.0, cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@2.6.1: - version "2.6.1" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-spinners@^2.5.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" - integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== - -cli-table3@^0.5.0: - version "0.5.1" - resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" + "fsevents" "~2.1.1" + +"chownr@^1.1.4": + "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + "version" "1.1.4" + +"chownr@^2.0.0": + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + "version" "2.0.0" + +"ci-info@^2.0.0": + "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + "version" "2.0.0" + +"ci-info@^3.2.0": + "integrity" "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz" + "version" "3.4.0" + +"cids@^0.7.1": + "integrity" "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==" + "resolved" "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz" + "version" "0.7.5" + dependencies: + "buffer" "^5.5.0" + "class-is" "^1.1.0" + "multibase" "~0.6.0" + "multicodec" "^1.0.0" + "multihashes" "~0.4.15" + +"cipher-base@^1.0.0", "cipher-base@^1.0.1", "cipher-base@^1.0.3": + "integrity" "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==" + "resolved" "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "inherits" "^2.0.1" + "safe-buffer" "^5.0.1" + +"cjs-module-lexer@^1.0.0": + "integrity" "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + "resolved" "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" + "version" "1.2.2" + +"class-is@^1.1.0": + "integrity" "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" + "resolved" "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz" + "version" "1.1.0" + +"classic-level@^1.2.0": + "integrity" "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==" + "resolved" "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "abstract-level" "^1.0.2" + "catering" "^2.1.0" + "module-error" "^1.0.1" + "napi-macros" "~2.0.0" + "node-gyp-build" "^4.3.0" + +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" + +"cli-cursor@^3.1.0", "cli-cursor@3.1.0": + "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "restore-cursor" "^3.1.0" + +"cli-spinners@^2.5.0": + "integrity" "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==" + "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz" + "version" "2.7.0" + +"cli-spinners@2.6.1": + "integrity" "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" + "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + "version" "2.6.1" + +"cli-table3@^0.5.0": + "integrity" "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==" + "resolved" "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz" + "version" "0.5.1" + dependencies: + "object-assign" "^4.1.0" + "string-width" "^2.1.1" optionalDependencies: - colors "^1.1.2" - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + "colors" "^1.1.2" + +"cli-truncate@^2.1.0": + "integrity" "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==" + "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + "version" "2.1.0" dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" - 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-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -colorette@^2.0.16: - version "2.0.19" - resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - -colors@1.4.0, colors@^1.1.2: - version "1.4.0" - resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -columnify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - -command-line-args@^5.1.1: - version "5.2.1" - resolved "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz" - integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== - dependencies: - array-back "^3.1.0" - find-replace "^3.0.0" - lodash.camelcase "^4.3.0" - typical "^4.0.0" - -command-line-usage@^6.1.0: - version "6.1.3" - resolved "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz" - integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== - dependencies: - array-back "^4.0.2" - chalk "^2.4.2" - table-layout "^1.0.2" - typical "^5.2.0" - -commander@3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - -commander@^8.1.0: - version "8.3.0" - resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -commander@^9.3.0: - version "9.4.1" - resolved "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz" - integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^1.6.0, concat-stream@^1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -concurrently@^7.4.0: - version "7.4.0" - resolved "https://registry.npmjs.org/concurrently/-/concurrently-7.4.0.tgz" - integrity sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA== - dependencies: - chalk "^4.1.0" - date-fns "^2.29.1" - lodash "^4.17.21" - rxjs "^7.0.0" - shell-quote "^1.7.3" - spawn-command "^0.0.2-1" - supports-color "^8.1.0" - tree-kill "^1.2.2" - yargs "^17.3.1" - -config-chain@^1.1.12: - version "1.1.13" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-hash@^2.5.2: - version "2.5.2" - resolved "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz" - integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== - dependencies: - cids "^0.7.1" - multicodec "^0.5.5" - multihashes "^0.4.15" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -conventional-changelog-angular@^5.0.12: - version "5.0.13" - resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-core@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" - integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== - dependencies: - add-stream "^1.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-parser "^3.2.0" - dateformat "^3.0.0" - get-pkg-repo "^4.0.0" - git-raw-commits "^2.0.8" - git-remote-origin-url "^2.0.0" - git-semver-tags "^4.1.1" - lodash "^4.17.15" - normalize-package-data "^3.0.0" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^4.0.0" - -conventional-changelog-preset-loader@^2.3.4: - version "2.3.4" - resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== - -conventional-changelog-writer@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz" - integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== - dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" - -conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.2.0: - version "3.2.4" - resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz" - integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -conventional-recommended-bump@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz" - integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.3.4" - conventional-commits-filter "^2.0.7" - conventional-commits-parser "^3.2.0" - git-raw-commits "^2.0.8" - git-semver-tags "^4.1.1" - meow "^8.0.0" - q "^1.5.1" - -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -core-js-pure@^3.0.1: - version "3.25.0" - resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.0.tgz" - integrity sha512-IeHpLwk3uoci37yoI2Laty59+YqH9x5uR65/yiA0ARAJrTrN4YU0rmauLWfvqOuk77SlNJXj2rM6oT/dBD87+A== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cors@^2.8.1: - version "2.8.5" - resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + "slice-ansi" "^3.0.0" + "string-width" "^4.2.0" + +"cli-truncate@^3.1.0": + "integrity" "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==" + "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "slice-ansi" "^5.0.0" + "string-width" "^5.0.0" + +"cli-width@^3.0.0": + "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + "version" "3.0.0" + +"cliui@^5.0.0": + "integrity" "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "string-width" "^3.1.0" + "strip-ansi" "^5.2.0" + "wrap-ansi" "^5.1.0" + +"cliui@^7.0.2": + "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + "version" "7.0.4" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^7.0.0" + +"cliui@^8.0.1": + "integrity" "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + "version" "8.0.1" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.1" + "wrap-ansi" "^7.0.0" + +"clone-deep@^4.0.1": + "integrity" "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==" + "resolved" "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "is-plain-object" "^2.0.4" + "kind-of" "^6.0.2" + "shallow-clone" "^3.0.0" + +"clone-response@^1.0.2": + "integrity" "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==" + "resolved" "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "mimic-response" "^1.0.0" + +"clone@^1.0.2": + "integrity" "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + "version" "1.0.4" + +"clone@^2.0.0", "clone@^2.1.1": + "integrity" "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + "resolved" "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" + "version" "2.1.2" + +"cmd-shim@^5.0.0": + "integrity" "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==" + "resolved" "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "mkdirp-infer-owner" "^2.0.0" + +"co@^4.6.0": + "integrity" "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" + "resolved" "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + "version" "4.6.0" + +"collect-v8-coverage@^1.0.0": + "integrity" "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "resolved" "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" + "version" "1.0.1" + +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-name@1.1.3": + "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"color-support@^1.1.3": + "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + "version" "1.1.3" + +"colorette@^2.0.16": + "integrity" "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + "version" "2.0.19" + +"colors@^1.1.2", "colors@1.4.0": + "integrity" "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + "resolved" "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" + "version" "1.4.0" + +"columnify@^1.6.0": + "integrity" "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==" + "resolved" "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz" + "version" "1.6.0" + dependencies: + "strip-ansi" "^6.0.1" + "wcwidth" "^1.0.0" + +"combined-stream@^1.0.6", "combined-stream@^1.0.8", "combined-stream@~1.0.6": + "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" + "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "delayed-stream" "~1.0.0" + +"command-exists@^1.2.8": + "integrity" "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + "resolved" "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" + "version" "1.2.9" + +"command-line-args@^5.1.1": + "integrity" "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==" + "resolved" "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "array-back" "^3.1.0" + "find-replace" "^3.0.0" + "lodash.camelcase" "^4.3.0" + "typical" "^4.0.0" + +"command-line-usage@^6.1.0": + "integrity" "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==" + "resolved" "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz" + "version" "6.1.3" + dependencies: + "array-back" "^4.0.2" + "chalk" "^2.4.2" + "table-layout" "^1.0.2" + "typical" "^5.2.0" + +"commander@^8.1.0": + "integrity" "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + "resolved" "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" + "version" "8.3.0" + +"commander@^9.3.0": + "integrity" "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==" + "resolved" "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz" + "version" "9.4.1" + +"commander@3.0.2": + "integrity" "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" + "resolved" "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz" + "version" "3.0.2" + +"common-ancestor-path@^1.0.1": + "integrity" "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==" + "resolved" "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz" + "version" "1.0.1" + +"compare-func@^2.0.0": + "integrity" "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==" + "resolved" "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "array-ify" "^1.0.0" + "dot-prop" "^5.1.0" + +"concat-map@0.0.1": + "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"concat-stream@^1.6.0", "concat-stream@^1.6.2": + "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==" + "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + "version" "1.6.2" + dependencies: + "buffer-from" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^2.2.2" + "typedarray" "^0.0.6" + +"concat-stream@^2.0.0": + "integrity" "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==" + "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "buffer-from" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^3.0.2" + "typedarray" "^0.0.6" + +"concurrently@^7.4.0": + "integrity" "sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA==" + "resolved" "https://registry.npmjs.org/concurrently/-/concurrently-7.4.0.tgz" + "version" "7.4.0" + dependencies: + "chalk" "^4.1.0" + "date-fns" "^2.29.1" + "lodash" "^4.17.21" + "rxjs" "^7.0.0" + "shell-quote" "^1.7.3" + "spawn-command" "^0.0.2-1" + "supports-color" "^8.1.0" + "tree-kill" "^1.2.2" + "yargs" "^17.3.1" + +"config-chain@^1.1.12": + "integrity" "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==" + "resolved" "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" + "version" "1.1.13" + dependencies: + "ini" "^1.3.4" + "proto-list" "~1.2.1" + +"console-control-strings@^1.1.0": + "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + "version" "1.1.0" + +"content-disposition@0.5.4": + "integrity" "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==" + "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + "version" "0.5.4" + dependencies: + "safe-buffer" "5.2.1" + +"content-hash@^2.5.2": + "integrity" "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==" + "resolved" "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz" + "version" "2.5.2" + dependencies: + "cids" "^0.7.1" + "multicodec" "^0.5.5" + "multihashes" "^0.4.15" + +"content-type@~1.0.4": + "integrity" "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + "version" "1.0.4" + +"conventional-changelog-angular@^5.0.12": + "integrity" "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==" + "resolved" "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz" + "version" "5.0.13" + dependencies: + "compare-func" "^2.0.0" + "q" "^1.5.1" + +"conventional-changelog-core@^4.2.4": + "integrity" "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==" + "resolved" "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz" + "version" "4.2.4" + dependencies: + "add-stream" "^1.0.0" + "conventional-changelog-writer" "^5.0.0" + "conventional-commits-parser" "^3.2.0" + "dateformat" "^3.0.0" + "get-pkg-repo" "^4.0.0" + "git-raw-commits" "^2.0.8" + "git-remote-origin-url" "^2.0.0" + "git-semver-tags" "^4.1.1" + "lodash" "^4.17.15" + "normalize-package-data" "^3.0.0" + "q" "^1.5.1" + "read-pkg" "^3.0.0" + "read-pkg-up" "^3.0.0" + "through2" "^4.0.0" + +"conventional-changelog-preset-loader@^2.3.4": + "integrity" "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==" + "resolved" "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz" + "version" "2.3.4" + +"conventional-changelog-writer@^5.0.0": + "integrity" "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==" + "resolved" "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "conventional-commits-filter" "^2.0.7" + "dateformat" "^3.0.0" + "handlebars" "^4.7.7" + "json-stringify-safe" "^5.0.1" + "lodash" "^4.17.15" + "meow" "^8.0.0" + "semver" "^6.0.0" + "split" "^1.0.0" + "through2" "^4.0.0" + +"conventional-commits-filter@^2.0.7": + "integrity" "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==" + "resolved" "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz" + "version" "2.0.7" + dependencies: + "lodash.ismatch" "^4.4.0" + "modify-values" "^1.0.0" + +"conventional-commits-parser@^3.2.0": + "integrity" "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==" + "resolved" "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz" + "version" "3.2.4" + dependencies: + "is-text-path" "^1.0.1" + "JSONStream" "^1.0.4" + "lodash" "^4.17.15" + "meow" "^8.0.0" + "split2" "^3.0.0" + "through2" "^4.0.0" + +"conventional-recommended-bump@^6.1.0": + "integrity" "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==" + "resolved" "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "concat-stream" "^2.0.0" + "conventional-changelog-preset-loader" "^2.3.4" + "conventional-commits-filter" "^2.0.7" + "conventional-commits-parser" "^3.2.0" + "git-raw-commits" "^2.0.8" + "git-semver-tags" "^4.1.1" + "meow" "^8.0.0" + "q" "^1.5.1" + +"convert-source-map@^1.4.0", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0": + "integrity" "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "safe-buffer" "~5.1.1" + +"cookie-signature@1.0.6": + "integrity" "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + "version" "1.0.6" + +"cookie@^0.4.1": + "integrity" "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + "version" "0.4.2" + +"cookie@0.5.0": + "integrity" "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + "version" "0.5.0" + +"cookiejar@^2.1.1": + "integrity" "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + "resolved" "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz" + "version" "2.1.3" + +"core-js-compat@^3.25.1": + "integrity" "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==" + "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz" + "version" "3.25.5" + dependencies: + "browserslist" "^4.21.4" + +"core-util-is@~1.0.0": + "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + "version" "1.0.3" + +"core-util-is@1.0.2": + "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "version" "1.0.2" + +"cors@^2.8.1": + "integrity" "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==" + "resolved" "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" + "version" "2.8.5" + dependencies: + "object-assign" "^4" + "vary" "^1" + +"cosmiconfig@^7.0.0": + "integrity" "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==" + "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" + "version" "7.0.1" dependencies: "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-fetch@^3.1.4: - version "3.1.5" - resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - 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" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" + "import-fresh" "^3.2.1" + "parse-json" "^5.0.0" + "path-type" "^4.0.0" + "yaml" "^1.10.0" + +"crc-32@^1.2.0": + "integrity" "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + "resolved" "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" + "version" "1.2.2" + +"create-ecdh@^4.0.0": + "integrity" "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==" + "resolved" "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "bn.js" "^4.1.0" + "elliptic" "^6.5.3" + +"create-hash@^1.1.0", "create-hash@^1.1.2", "create-hash@^1.2.0": + "integrity" "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==" + "resolved" "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "cipher-base" "^1.0.1" + "inherits" "^2.0.1" + "md5.js" "^1.3.4" + "ripemd160" "^2.0.1" + "sha.js" "^2.4.0" + +"create-hmac@^1.1.0", "create-hmac@^1.1.4", "create-hmac@^1.1.7": + "integrity" "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==" + "resolved" "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + "version" "1.1.7" + dependencies: + "cipher-base" "^1.0.3" + "create-hash" "^1.1.0" + "inherits" "^2.0.1" + "ripemd160" "^2.0.0" + "safe-buffer" "^5.0.1" + "sha.js" "^2.4.8" + +"create-require@^1.1.0": + "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + "version" "1.1.1" + +"cross-fetch@^2.1.0": + "integrity" "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==" + "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz" + "version" "2.2.6" + dependencies: + "node-fetch" "^2.6.7" + "whatwg-fetch" "^2.0.4" + +"cross-fetch@^3.1.4": + "integrity" "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==" + "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" + "version" "3.1.5" + dependencies: + "node-fetch" "2.6.7" + +"cross-spawn@^6.0.0": + "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + "version" "6.0.5" + dependencies: + "nice-try" "^1.0.4" + "path-key" "^2.0.1" + "semver" "^5.5.0" + "shebang-command" "^1.2.0" + "which" "^1.2.9" + +"cross-spawn@^7.0.2", "cross-spawn@^7.0.3": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" "crypt@>= 0.0.1": - version "0.0.2" - resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -crypto-browserify@3.12.0: - version "3.12.0" - resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -date-fns@^2.29.1: - version "2.29.3" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" - integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@2.6.9, debug@^2.2.0: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.2.6: - version "3.2.6" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@4.3.3: - version "4.3.3" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== - -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" - integrity sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg== - 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.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - 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" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== - dependencies: - type-detect "^4.0.0" - -deep-extend@~0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== - dependencies: - clone "^1.0.2" - -defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - 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" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" - integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== - -detect-indent@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -dezalgo@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== - dependencies: - asap "^2.0.0" - wrappy "1" - -diff-sequences@^28.1.1: - version "28.1.1" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" - integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== - -diff@3.5.0: - version "3.5.0" - resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dotenv@~10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.251: - version "1.4.270" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.270.tgz" - integrity sha512-KNhIzgLiJmDDC444dj9vEOpZEgsV96ult9Iff98Vanumn+ShJHd5se8aX6KeVxdc0YQeqdrezBZv89rleDbvSg== - -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emittery@0.10.0: - version "0.10.0" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz" - integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== - -emittery@^0.10.2: - version "0.10.2" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" - integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - 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" - integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - -encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.0, enquirer@^2.3.6, enquirer@~2.3.6: - version "2.3.6" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@^7.7.4: - version "7.8.1" - resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -errno@~0.1.1: - version "0.1.8" - resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.19.0, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.0, es-abstract@^1.20.1: - version "1.20.3" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz" - integrity sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.6" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - 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" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^4.2.8: - version "4.2.8" - resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -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" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== - -eslint-plugin-prettier@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" - integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@^8.12.0: - version "8.24.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz" - integrity sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ== + "integrity" "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" + "resolved" "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" + "version" "0.0.2" + +"crypto-browserify@3.12.0": + "integrity" "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==" + "resolved" "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" + "version" "3.12.0" + dependencies: + "browserify-cipher" "^1.0.0" + "browserify-sign" "^4.0.0" + "create-ecdh" "^4.0.0" + "create-hash" "^1.1.0" + "create-hmac" "^1.1.0" + "diffie-hellman" "^5.0.0" + "inherits" "^2.0.1" + "pbkdf2" "^3.0.3" + "public-encrypt" "^4.0.0" + "randombytes" "^2.0.0" + "randomfill" "^1.0.3" + +"d@^1.0.1", "d@1": + "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==" + "resolved" "https://registry.npmjs.org/d/-/d-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "es5-ext" "^0.10.50" + "type" "^1.0.1" + +"dargs@^7.0.0": + "integrity" "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==" + "resolved" "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" + "version" "7.0.0" + +"dashdash@^1.12.0": + "integrity" "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==" + "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + "version" "1.14.1" + dependencies: + "assert-plus" "^1.0.0" + +"date-fns@^2.29.1": + "integrity" "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" + "resolved" "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" + "version" "2.29.3" + +"dateformat@^3.0.0": + "integrity" "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" + "resolved" "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" + "version" "3.0.3" + +"debug@^2.2.0": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.3", "debug@^4.3.4", "debug@4", "debug@4.3.4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"debug@2.6.9": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@3.2.6": + "integrity" "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" + "version" "3.2.6" + dependencies: + "ms" "^2.1.1" + +"debug@4.3.3": + "integrity" "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" + "version" "4.3.3" + dependencies: + "ms" "2.1.2" + +"debuglog@^1.0.1": + "integrity" "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==" + "resolved" "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" + "version" "1.0.1" + +"decamelize-keys@^1.1.0": + "integrity" "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==" + "resolved" "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "decamelize" "^1.1.0" + "map-obj" "^1.0.0" + +"decamelize@^1.1.0", "decamelize@^1.2.0": + "integrity" "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + "version" "1.2.0" + +"decamelize@^4.0.0": + "integrity" "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" + "version" "4.0.0" + +"decode-uri-component@^0.2.0": + "integrity" "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" + "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + "version" "0.2.0" + +"decompress-response@^3.3.0": + "integrity" "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==" + "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "mimic-response" "^1.0.0" + +"decompress-response@^6.0.0": + "integrity" "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==" + "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "mimic-response" "^3.1.0" + +"dedent@^0.7.0": + "integrity" "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + "resolved" "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" + "version" "0.7.0" + +"deep-eql@^3.0.1": + "integrity" "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==" + "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "type-detect" "^4.0.0" + +"deep-extend@~0.6.0": + "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + "version" "0.6.0" + +"deep-is@^0.1.3": + "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + "version" "0.1.4" + +"deepmerge@^4.2.2": + "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + "version" "4.2.2" + +"defaults@^1.0.3": + "integrity" "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" + "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "clone" "^1.0.2" + +"defer-to-connect@^1.0.1": + "integrity" "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" + "version" "1.1.3" + +"defer-to-connect@^2.0.0", "defer-to-connect@^2.0.1": + "integrity" "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" + "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + "version" "2.0.1" + +"deferred-leveldown@~1.2.1": + "integrity" "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==" + "resolved" "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz" + "version" "1.2.2" + dependencies: + "abstract-leveldown" "~2.6.0" + +"define-lazy-prop@^2.0.0": + "integrity" "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + "resolved" "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + "version" "2.0.0" + +"define-properties@^1.1.2", "define-properties@^1.1.3", "define-properties@^1.1.4": + "integrity" "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + "version" "1.1.4" + dependencies: + "has-property-descriptors" "^1.0.0" + "object-keys" "^1.1.1" + +"delayed-stream@~1.0.0": + "integrity" "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + "version" "1.0.0" + +"delegates@^1.0.0": + "integrity" "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "version" "1.0.0" + +"depd@^1.1.2": + "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + "version" "1.1.2" + +"depd@2.0.0": + "integrity" "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + "resolved" "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + "version" "2.0.0" + +"deprecation@^2.0.0", "deprecation@^2.3.1": + "integrity" "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + "resolved" "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" + "version" "2.3.1" + +"des.js@^1.0.0": + "integrity" "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==" + "resolved" "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "inherits" "^2.0.1" + "minimalistic-assert" "^1.0.0" + +"destroy@1.2.0": + "integrity" "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + "version" "1.2.0" + +"detect-indent@^5.0.0": + "integrity" "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==" + "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" + "version" "5.0.0" + +"detect-indent@^6.0.0": + "integrity" "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==" + "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" + "version" "6.1.0" + +"detect-newline@^3.0.0": + "integrity" "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + "resolved" "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + "version" "3.1.0" + +"dezalgo@^1.0.0": + "integrity" "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==" + "resolved" "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "asap" "^2.0.0" + "wrappy" "1" + +"diff-sequences@^28.1.1": + "integrity" "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==" + "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" + "version" "28.1.1" + +"diff@^4.0.1": + "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + "version" "4.0.2" + +"diff@3.5.0": + "integrity" "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + "resolved" "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" + "version" "3.5.0" + +"diff@5.0.0": + "integrity" "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + "resolved" "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" + "version" "5.0.0" + +"diffie-hellman@^5.0.0": + "integrity" "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==" + "resolved" "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" + "version" "5.0.3" + dependencies: + "bn.js" "^4.1.0" + "miller-rabin" "^4.0.0" + "randombytes" "^2.0.0" + +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + +"doctrine@^3.0.0": + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "esutils" "^2.0.2" + +"dom-walk@^0.1.0": + "integrity" "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + "resolved" "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" + "version" "0.1.2" + +"dot-prop@^5.1.0": + "integrity" "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==" + "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" + "version" "5.3.0" + dependencies: + "is-obj" "^2.0.0" + +"dot-prop@^6.0.1": + "integrity" "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==" + "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "is-obj" "^2.0.0" + +"dotenv@~10.0.0": + "integrity" "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" + "version" "10.0.0" + +"duplexer@^0.1.1": + "integrity" "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + "resolved" "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + "version" "0.1.2" + +"duplexer3@^0.1.4": + "integrity" "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" + "version" "0.1.5" + +"eastasianwidth@^0.2.0": + "integrity" "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "resolved" "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + "version" "0.2.0" + +"ecc-jsbn@~0.1.1": + "integrity" "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==" + "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "jsbn" "~0.1.0" + "safer-buffer" "^2.1.0" + +"ee-first@1.1.1": + "integrity" "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + "version" "1.1.1" + +"electron-to-chromium@^1.4.251": + "integrity" "sha512-BCPBtK07xR1/uY2HFDtl3wK2De66AW4MSiPlLrnPNxKC/Qhccxd59W73654S3y6Rb/k3hmuGJOBnhjfoutetXA==" + "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.271.tgz" + "version" "1.4.271" + +"elliptic@^6.4.0", "elliptic@^6.5.2", "elliptic@^6.5.3", "elliptic@^6.5.4", "elliptic@6.5.4": + "integrity" "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==" + "resolved" "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" + "version" "6.5.4" + dependencies: + "bn.js" "^4.11.9" + "brorand" "^1.1.0" + "hash.js" "^1.0.0" + "hmac-drbg" "^1.0.1" + "inherits" "^2.0.4" + "minimalistic-assert" "^1.0.1" + "minimalistic-crypto-utils" "^1.0.1" + +"emittery@^0.10.2": + "integrity" "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" + "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" + "version" "0.10.2" + +"emittery@0.10.0": + "integrity" "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==" + "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz" + "version" "0.10.0" + +"emoji-regex@^7.0.1": + "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + "version" "7.0.3" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"emoji-regex@^9.2.2": + "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + "version" "9.2.2" + +"encode-utf8@^1.0.2": + "integrity" "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + "resolved" "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz" + "version" "1.0.3" + +"encodeurl@~1.0.2": + "integrity" "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + "version" "1.0.2" + +"encoding@^0.1.0", "encoding@^0.1.13": + "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" + "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + "version" "0.1.13" + dependencies: + "iconv-lite" "^0.6.2" + +"end-of-stream@^1.1.0", "end-of-stream@^1.4.1", "end-of-stream@^1.4.4": + "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" + "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + "version" "1.4.4" + dependencies: + "once" "^1.4.0" + +"enquirer@^2.3.0", "enquirer@^2.3.6", "enquirer@>= 2.3.0 < 3", "enquirer@~2.3.6": + "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" + "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + "version" "2.3.6" + dependencies: + "ansi-colors" "^4.1.1" + +"env-paths@^2.2.0": + "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + "version" "2.2.1" + +"envinfo@^7.7.4": + "integrity" "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" + "resolved" "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" + "version" "7.8.1" + +"err-code@^2.0.2": + "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + "version" "2.0.3" + +"errno@~0.1.1": + "integrity" "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==" + "resolved" "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" + "version" "0.1.8" + dependencies: + "prr" "~1.0.1" + +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-arrayish" "^0.2.1" + +"es-abstract@^1.19.0", "es-abstract@^1.19.2", "es-abstract@^1.19.5", "es-abstract@^1.20.0", "es-abstract@^1.20.1": + "integrity" "sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==" + "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz" + "version" "1.20.3" + dependencies: + "call-bind" "^1.0.2" + "es-to-primitive" "^1.2.1" + "function-bind" "^1.1.1" + "function.prototype.name" "^1.1.5" + "get-intrinsic" "^1.1.3" + "get-symbol-description" "^1.0.0" + "has" "^1.0.3" + "has-property-descriptors" "^1.0.0" + "has-symbols" "^1.0.3" + "internal-slot" "^1.0.3" + "is-callable" "^1.2.6" + "is-negative-zero" "^2.0.2" + "is-regex" "^1.1.4" + "is-shared-array-buffer" "^1.0.2" + "is-string" "^1.0.7" + "is-weakref" "^1.0.2" + "object-inspect" "^1.12.2" + "object-keys" "^1.1.1" + "object.assign" "^4.1.4" + "regexp.prototype.flags" "^1.4.3" + "safe-regex-test" "^1.0.0" + "string.prototype.trimend" "^1.0.5" + "string.prototype.trimstart" "^1.0.5" + "unbox-primitive" "^1.0.2" + +"es-array-method-boxes-properly@^1.0.0": + "integrity" "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + "resolved" "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" + "version" "1.0.0" + +"es-to-primitive@^1.2.1": + "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" + "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + "version" "1.2.1" + 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": + "integrity" "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==" + "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz" + "version" "0.10.62" + dependencies: + "es6-iterator" "^2.0.3" + "es6-symbol" "^3.1.3" + "next-tick" "^1.1.0" + +"es6-iterator@^2.0.3": + "integrity" "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==" + "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "d" "1" + "es5-ext" "^0.10.35" + "es6-symbol" "^3.1.1" + +"es6-promise@^4.2.8": + "integrity" "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + "resolved" "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" + "version" "4.2.8" + +"es6-symbol@^3.1.1", "es6-symbol@^3.1.3": + "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==" + "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" + "version" "3.1.3" + dependencies: + "d" "^1.0.1" + "ext" "^1.1.2" + +"escalade@^3.1.1": + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + "version" "3.1.1" + +"escape-html@~1.0.3": + "integrity" "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + "version" "1.0.3" + +"escape-string-regexp@^1.0.5", "escape-string-regexp@1.0.5": + "integrity" "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^2.0.0": + "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + "version" "2.0.0" + +"escape-string-regexp@^4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"escape-string-regexp@4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"eslint-config-prettier@^8.5.0": + "integrity" "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==" + "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" + "version" "8.5.0" + +"eslint-plugin-prettier@^4.0.0": + "integrity" "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==" + "resolved" "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "prettier-linter-helpers" "^1.0.0" + +"eslint-scope@^5.1.1": + "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^4.1.1" + +"eslint-scope@^7.1.1": + "integrity" "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^5.2.0" + +"eslint-utils@^3.0.0": + "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "eslint-visitor-keys" "^2.0.0" + +"eslint-visitor-keys@^2.0.0": + "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + "version" "2.1.0" + +"eslint-visitor-keys@^3.3.0": + "integrity" "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + "version" "3.3.0" + +"eslint@*", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^8.12.0", "eslint@>=5", "eslint@>=7.0.0", "eslint@>=7.28.0": + "integrity" "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz" + "version" "8.24.0" dependencies: "@eslint/eslintrc" "^1.3.2" "@humanwhocodes/config-array" "^0.10.5" "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" "@humanwhocodes/module-importer" "^1.0.1" - ajv "^6.10.0" - 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.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" - 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.1" - globals "^13.15.0" - globby "^11.1.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-sdsl "^4.1.4" - 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.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.4.0: - version "9.4.0" - resolved "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz" - integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eth-ens-namehash@2.0.8: - version "2.0.8" - resolved "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz" - integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== - dependencies: - idna-uts46-hx "^2.3.1" - js-sha3 "^0.5.7" - -eth-gas-reporter@^0.2.24, eth-gas-reporter@^0.2.25: - version "0.2.25" - resolved "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz" - integrity sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ== + "ajv" "^6.10.0" + "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.1.1" + "eslint-utils" "^3.0.0" + "eslint-visitor-keys" "^3.3.0" + "espree" "^9.4.0" + "esquery" "^1.4.0" + "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.1" + "globals" "^13.15.0" + "globby" "^11.1.0" + "grapheme-splitter" "^1.0.4" + "ignore" "^5.2.0" + "import-fresh" "^3.0.0" + "imurmurhash" "^0.1.4" + "is-glob" "^4.0.0" + "js-sdsl" "^4.1.4" + "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.1" + "regexpp" "^3.2.0" + "strip-ansi" "^6.0.1" + "strip-json-comments" "^3.1.0" + "text-table" "^0.2.0" + +"espree@^9.4.0": + "integrity" "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==" + "resolved" "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz" + "version" "9.4.0" + dependencies: + "acorn" "^8.8.0" + "acorn-jsx" "^5.3.2" + "eslint-visitor-keys" "^3.3.0" + +"esprima@^4.0.0": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"esquery@^1.4.0": + "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "estraverse" "^5.1.0" + +"esrecurse@^4.3.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^4.1.1": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" + +"estraverse@^5.1.0", "estraverse@^5.2.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"etag@~1.8.1": + "integrity" "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + "version" "1.8.1" + +"eth-block-tracker@^4.4.2": + "integrity" "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==" + "resolved" "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz" + "version" "4.4.3" + dependencies: + "@babel/plugin-transform-runtime" "^7.5.5" + "@babel/runtime" "^7.5.5" + "eth-query" "^2.1.0" + "json-rpc-random-id" "^1.0.1" + "pify" "^3.0.0" + "safe-event-emitter" "^1.0.1" + +"eth-ens-namehash@2.0.8": + "integrity" "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==" + "resolved" "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz" + "version" "2.0.8" + dependencies: + "idna-uts46-hx" "^2.3.1" + "js-sha3" "^0.5.7" + +"eth-gas-reporter@^0.2.24", "eth-gas-reporter@^0.2.25": + "integrity" "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==" + "resolved" "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz" + "version" "0.2.25" dependencies: "@ethersproject/abi" "^5.0.0-beta.146" "@solidity-parser/parser" "^0.14.0" - cli-table3 "^0.5.0" - colors "1.4.0" - ethereum-cryptography "^1.0.3" - ethers "^4.0.40" - fs-readdir-recursive "^1.1.0" - lodash "^4.17.14" - markdown-table "^1.1.3" - mocha "^7.1.1" - req-cwd "^2.0.0" - request "^2.88.0" - request-promise-native "^1.0.5" - sha1 "^1.1.1" - sync-request "^6.0.0" - -eth-lib@0.2.8: - version "0.2.8" - resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz" - integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - -eth-lib@^0.1.26: - version "0.1.29" - resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz" - integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - nano-json-stream-parser "^0.1.2" - servify "^0.1.12" - ws "^3.0.0" - xhr-request-promise "^0.1.2" - -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" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== - dependencies: - js-sha3 "^0.8.0" - -ethereum-cryptography@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz" - integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + "cli-table3" "^0.5.0" + "colors" "1.4.0" + "ethereum-cryptography" "^1.0.3" + "ethers" "^4.0.40" + "fs-readdir-recursive" "^1.1.0" + "lodash" "^4.17.14" + "markdown-table" "^1.1.3" + "mocha" "^7.1.1" + "req-cwd" "^2.0.0" + "request" "^2.88.0" + "request-promise-native" "^1.0.5" + "sha1" "^1.1.1" + "sync-request" "^6.0.0" + +"eth-json-rpc-filters@^4.2.1": + "integrity" "sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==" + "resolved" "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz" + "version" "4.2.2" + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + "async-mutex" "^0.2.6" + "eth-json-rpc-middleware" "^6.0.0" + "eth-query" "^2.1.2" + "json-rpc-engine" "^6.1.0" + "pify" "^5.0.0" + +"eth-json-rpc-infura@^5.1.0": + "integrity" "sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow==" + "resolved" "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "eth-json-rpc-middleware" "^6.0.0" + "eth-rpc-errors" "^3.0.0" + "json-rpc-engine" "^5.3.0" + "node-fetch" "^2.6.0" + +"eth-json-rpc-middleware@^6.0.0": + "integrity" "sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==" + "resolved" "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "btoa" "^1.2.1" + "clone" "^2.1.1" + "eth-query" "^2.1.2" + "eth-rpc-errors" "^3.0.0" + "eth-sig-util" "^1.4.2" + "ethereumjs-util" "^5.1.2" + "json-rpc-engine" "^5.3.0" + "json-stable-stringify" "^1.0.1" + "node-fetch" "^2.6.1" + "pify" "^3.0.0" + "safe-event-emitter" "^1.0.1" + +"eth-lib@^0.1.26": + "integrity" "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==" + "resolved" "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz" + "version" "0.1.29" + dependencies: + "bn.js" "^4.11.6" + "elliptic" "^6.4.0" + "nano-json-stream-parser" "^0.1.2" + "servify" "^0.1.12" + "ws" "^3.0.0" + "xhr-request-promise" "^0.1.2" + +"eth-lib@0.2.8": + "integrity" "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==" + "resolved" "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz" + "version" "0.2.8" + dependencies: + "bn.js" "^4.11.6" + "elliptic" "^6.4.0" + "xhr-request-promise" "^0.1.2" + +"eth-query@^2.1.0", "eth-query@^2.1.2": + "integrity" "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==" + "resolved" "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "json-rpc-random-id" "^1.0.0" + "xtend" "^4.0.1" + +"eth-rpc-errors@^3.0.0": + "integrity" "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==" + "resolved" "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "fast-safe-stringify" "^2.0.6" + +"eth-rpc-errors@^4.0.2": + "integrity" "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==" + "resolved" "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "fast-safe-stringify" "^2.0.6" + +"eth-rpc-errors@^4.0.3": + "integrity" "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==" + "resolved" "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "fast-safe-stringify" "^2.0.6" + +"eth-sig-util@^1.4.2": + "integrity" "sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw==" + "resolved" "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz" + "version" "1.4.2" + dependencies: + "ethereumjs-abi" "git+https://github.com/ethereumjs/ethereumjs-abi.git" + "ethereumjs-util" "^5.1.1" + +"ethereum-bloom-filters@^1.0.6": + "integrity" "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==" + "resolved" "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "js-sha3" "^0.8.0" + +"ethereum-common@^0.0.18": + "integrity" "sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==" + "resolved" "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz" + "version" "0.0.18" + +"ethereum-common@0.2.0": + "integrity" "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" + "resolved" "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz" + "version" "0.2.0" + +"ethereum-cryptography@^0.1.3", "ethereum-cryptography@0.1.3": + "integrity" "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==" + "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz" + "version" "0.1.3" dependencies: "@types/pbkdf2" "^3.0.0" "@types/secp256k1" "^4.0.1" - blakejs "^1.1.0" - browserify-aes "^1.2.0" - bs58check "^2.1.2" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - -ethereum-cryptography@^1.0.3: - version "1.1.2" - resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" - integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== + "blakejs" "^1.1.0" + "browserify-aes" "^1.2.0" + "bs58check" "^2.1.2" + "create-hash" "^1.2.0" + "create-hmac" "^1.1.7" + "hash.js" "^1.1.7" + "keccak" "^3.0.0" + "pbkdf2" "^3.0.17" + "randombytes" "^2.1.0" + "safe-buffer" "^5.1.2" + "scrypt-js" "^3.0.0" + "secp256k1" "^4.0.1" + "setimmediate" "^1.0.5" + +"ethereum-cryptography@^1.0.3": + "integrity" "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==" + "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" + "version" "1.1.2" dependencies: "@noble/hashes" "1.1.2" "@noble/secp256k1" "1.6.3" "@scure/bip32" "1.1.0" "@scure/bip39" "1.1.0" -ethereumjs-abi@^0.6.8: - version "0.6.8" - resolved "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz" - integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== +"ethereum-cryptography@1.1.2": + "integrity" "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==" + "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" + "version" "1.1.2" dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" + "@noble/hashes" "1.1.2" + "@noble/secp256k1" "1.6.3" + "@scure/bip32" "1.1.0" + "@scure/bip39" "1.1.0" -ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== +"ethereum-protocol@^1.0.1": + "integrity" "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==" + "resolved" "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz" + "version" "1.0.1" + +"ethereumjs-abi@^0.6.8": + "integrity" "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==" + "resolved" "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz" + "version" "0.6.8" + dependencies: + "bn.js" "^4.11.8" + "ethereumjs-util" "^6.0.0" + +"ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": + "version" "0.6.8" + dependencies: + "bn.js" "^4.11.8" + "ethereumjs-util" "^6.0.0" + +"ethereumjs-account@^2.0.3": + "integrity" "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==" + "resolved" "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "ethereumjs-util" "^5.0.0" + "rlp" "^2.0.0" + "safe-buffer" "^5.1.1" + +"ethereumjs-block@^1.2.2": + "integrity" "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==" + "resolved" "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz" + "version" "1.7.1" + dependencies: + "async" "^2.0.1" + "ethereum-common" "0.2.0" + "ethereumjs-tx" "^1.2.2" + "ethereumjs-util" "^5.0.0" + "merkle-patricia-tree" "^2.1.2" + +"ethereumjs-block@~2.2.0": + "integrity" "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==" + "resolved" "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz" + "version" "2.2.2" + dependencies: + "async" "^2.0.1" + "ethereumjs-common" "^1.5.0" + "ethereumjs-tx" "^2.1.1" + "ethereumjs-util" "^5.0.0" + "merkle-patricia-tree" "^2.1.2" + +"ethereumjs-common@^1.1.0", "ethereumjs-common@^1.5.0": + "integrity" "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==" + "resolved" "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz" + "version" "1.5.2" + +"ethereumjs-tx@^1.2.2": + "integrity" "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==" + "resolved" "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz" + "version" "1.3.7" + dependencies: + "ethereum-common" "^0.0.18" + "ethereumjs-util" "^5.0.0" + +"ethereumjs-tx@^2.1.1": + "integrity" "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==" + "resolved" "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "ethereumjs-common" "^1.5.0" + "ethereumjs-util" "^6.0.0" + +"ethereumjs-util@^5.0.0": + "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "^0.1.3" + "rlp" "^2.0.0" + "safe-buffer" "^5.1.1" + +"ethereumjs-util@^5.1.1": + "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "^0.1.3" + "rlp" "^2.0.0" + "safe-buffer" "^5.1.1" + +"ethereumjs-util@^5.1.2": + "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "^0.1.3" + "rlp" "^2.0.0" + "safe-buffer" "^5.1.1" + +"ethereumjs-util@^5.1.5": + "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "^0.1.3" + "rlp" "^2.0.0" + "safe-buffer" "^5.1.1" + +"ethereumjs-util@^6.0.0": + "integrity" "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" + "version" "6.2.1" + dependencies: + "@types/bn.js" "^4.11.3" + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "0.1.6" + "rlp" "^2.2.3" + +"ethereumjs-util@^6.2.1": + "integrity" "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" + "version" "6.2.1" dependencies: "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - -ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: - version "7.1.5" - resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "0.1.6" + "rlp" "^2.2.3" + +"ethereumjs-util@^7.0.10", "ethereumjs-util@^7.1.0", "ethereumjs-util@^7.1.2", "ethereumjs-util@^7.1.4", "ethereumjs-util@^7.1.5": + "integrity" "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz" + "version" "7.1.5" dependencies: "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethereumjs-wallet@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz" - integrity sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA== - dependencies: - aes-js "^3.1.2" - bs58check "^2.1.2" - ethereum-cryptography "^0.1.3" - ethereumjs-util "^7.1.2" - randombytes "^2.1.0" - scrypt-js "^3.0.1" - utf8 "^3.0.0" - uuid "^8.3.2" - -ethers@^4.0.40: - version "4.0.49" - resolved "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz" - integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== - dependencies: - aes-js "3.0.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.4" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - -ethers@^5.5.3, ethers@^5.6.8, ethers@^5.6.9, ethers@^5.7.1: - version "5.7.1" - resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.1.tgz" - integrity sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q== + "bn.js" "^5.1.2" + "create-hash" "^1.1.2" + "ethereum-cryptography" "^0.1.3" + "rlp" "^2.2.4" + +"ethereumjs-util@6.2.1": + "integrity" "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" + "version" "6.2.1" + dependencies: + "@types/bn.js" "^4.11.3" + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "0.1.6" + "rlp" "^2.2.3" + +"ethereumjs-vm@^2.3.4": + "integrity" "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==" + "resolved" "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz" + "version" "2.6.0" + dependencies: + "async" "^2.1.2" + "async-eventemitter" "^0.2.2" + "ethereumjs-account" "^2.0.3" + "ethereumjs-block" "~2.2.0" + "ethereumjs-common" "^1.1.0" + "ethereumjs-util" "^6.0.0" + "fake-merkle-patricia-tree" "^1.0.1" + "functional-red-black-tree" "^1.0.1" + "merkle-patricia-tree" "^2.3.2" + "rustbn.js" "~0.2.0" + "safe-buffer" "^5.1.1" + +"ethereumjs-wallet@^1.0.1", "ethereumjs-wallet@^1.0.2": + "integrity" "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==" + "resolved" "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "aes-js" "^3.1.2" + "bs58check" "^2.1.2" + "ethereum-cryptography" "^0.1.3" + "ethereumjs-util" "^7.1.2" + "randombytes" "^2.1.0" + "scrypt-js" "^3.0.1" + "utf8" "^3.0.0" + "uuid" "^8.3.2" + +"ethers@^4.0.40": + "integrity" "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==" + "resolved" "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz" + "version" "4.0.49" + dependencies: + "aes-js" "3.0.0" + "bn.js" "^4.11.9" + "elliptic" "6.5.4" + "hash.js" "1.1.3" + "js-sha3" "0.5.7" + "scrypt-js" "2.0.4" + "setimmediate" "1.0.4" + "uuid" "2.0.1" + "xmlhttprequest" "1.8.0" + +"ethers@^5", "ethers@^5.0.0", "ethers@^5.1.3", "ethers@^5.5.3", "ethers@^5.6.8", "ethers@^5.6.9", "ethers@^5.7.1": + "integrity" "sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q==" + "resolved" "https://registry.npmjs.org/ethers/-/ethers-5.7.1.tgz" + "version" "5.7.1" dependencies: "@ethersproject/abi" "5.7.0" "@ethersproject/abstract-provider" "5.7.0" @@ -5107,854 +5919,955 @@ ethers@^5.5.3, ethers@^5.6.8, ethers@^5.6.9, ethers@^5.7.1: "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - -ethjs-util@0.1.6, ethjs-util@^0.1.6: - version "0.1.6" - resolved "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz" - integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== - dependencies: - is-hex-prefixed "1.0.0" - strip-hex-prefix "1.0.0" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - -eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^5.0.0, execa@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expect@^28.0.0, expect@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz" - integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== +"ethjs-unit@0.1.6": + "integrity" "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==" + "resolved" "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "bn.js" "4.11.6" + "number-to-bn" "1.7.0" + +"ethjs-util@^0.1.3", "ethjs-util@^0.1.6", "ethjs-util@0.1.6": + "integrity" "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==" + "resolved" "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "is-hex-prefixed" "1.0.0" + "strip-hex-prefix" "1.0.0" + +"event-target-shim@^5.0.0": + "integrity" "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + "resolved" "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + "version" "5.0.1" + +"eventemitter3@^4.0.4": + "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + "version" "4.0.7" + +"eventemitter3@4.0.4": + "integrity" "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" + "version" "4.0.4" + +"events@^3.0.0", "events@^3.3.0": + "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + "version" "3.3.0" + +"evp_bytestokey@^1.0.0", "evp_bytestokey@^1.0.3": + "integrity" "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==" + "resolved" "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "md5.js" "^1.3.4" + "safe-buffer" "^5.1.1" + +"execa@^1.0.0": + "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "cross-spawn" "^6.0.0" + "get-stream" "^4.0.0" + "is-stream" "^1.1.0" + "npm-run-path" "^2.0.0" + "p-finally" "^1.0.0" + "signal-exit" "^3.0.0" + "strip-eof" "^1.0.0" + +"execa@^5.0.0", "execa@^5.1.1": + "integrity" "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==" + "resolved" "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "cross-spawn" "^7.0.3" + "get-stream" "^6.0.0" + "human-signals" "^2.1.0" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.1" + "onetime" "^5.1.2" + "signal-exit" "^3.0.3" + "strip-final-newline" "^2.0.0" + +"exit@^0.1.2": + "integrity" "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" + "resolved" "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + "version" "0.1.2" + +"expect@^28.0.0", "expect@^28.1.3": + "integrity" "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==" + "resolved" "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/expect-utils" "^28.1.3" - jest-get-type "^28.0.2" - jest-matcher-utils "^28.1.3" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - -express@^4.14.0: - version "4.18.1" - resolved "https://registry.npmjs.org/express/-/express-4.18.1.tgz" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.0" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.10.3" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extsprintf@1.3.0, extsprintf@^1.2.0: - version "1.3.0" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + "jest-get-type" "^28.0.2" + "jest-matcher-utils" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-util" "^28.1.3" + +"express@^4.14.0": + "integrity" "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==" + "resolved" "https://registry.npmjs.org/express/-/express-4.18.1.tgz" + "version" "4.18.1" + dependencies: + "accepts" "~1.3.8" + "array-flatten" "1.1.1" + "body-parser" "1.20.0" + "content-disposition" "0.5.4" + "content-type" "~1.0.4" + "cookie" "0.5.0" + "cookie-signature" "1.0.6" + "debug" "2.6.9" + "depd" "2.0.0" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "finalhandler" "1.2.0" + "fresh" "0.5.2" + "http-errors" "2.0.0" + "merge-descriptors" "1.0.1" + "methods" "~1.1.2" + "on-finished" "2.4.1" + "parseurl" "~1.3.3" + "path-to-regexp" "0.1.7" + "proxy-addr" "~2.0.7" + "qs" "6.10.3" + "range-parser" "~1.2.1" + "safe-buffer" "5.2.1" + "send" "0.18.0" + "serve-static" "1.15.0" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "type-is" "~1.6.18" + "utils-merge" "1.0.1" + "vary" "~1.1.2" + +"ext@^1.1.2": + "integrity" "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==" + "resolved" "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "type" "^2.7.2" + +"extend@~3.0.2": + "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + "version" "3.0.2" + +"external-editor@^3.0.3": + "integrity" "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==" + "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "chardet" "^0.7.0" + "iconv-lite" "^0.4.24" + "tmp" "^0.0.33" + +"extsprintf@^1.2.0": + "integrity" "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==" + "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz" + "version" "1.4.1" + +"extsprintf@1.3.0": + "integrity" "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + "version" "1.3.0" + +"fake-merkle-patricia-tree@^1.0.1": + "integrity" "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==" + "resolved" "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "checkpoint-store" "^1.1.0" + +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-diff@^1.1.2": + "integrity" "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + "resolved" "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" + "version" "1.2.0" + +"fast-glob@^3.2.9": + "integrity" "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + "version" "3.2.12" 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" + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" -fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== +"fast-glob@3.2.7": + "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" + "version" "3.2.7" 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" + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + +"fast-json-stable-stringify@^2.0.0": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" + +"fast-levenshtein@^2.0.6": + "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +"fast-safe-stringify@^2.0.6", "fast-safe-stringify@^2.1.1": + "integrity" "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + "resolved" "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" + "version" "2.1.1" -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +"fastq@^1.6.0": + "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + "version" "1.13.0" + dependencies: + "reusify" "^1.0.4" -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== +"fb-watchman@^2.0.0": + "integrity" "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==" + "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" + "version" "2.0.2" dependencies: - reusify "^1.0.4" + "bser" "2.1.1" -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== +"figures@^3.0.0", "figures@3.2.0": + "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" + "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + "version" "3.2.0" dependencies: - bser "2.1.1" - -figures@3.2.0, figures@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + "escape-string-regexp" "^1.0.5" + +"file-entry-cache@^6.0.1": + "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + "version" "6.0.1" dependencies: - escape-string-regexp "^1.0.5" + "flat-cache" "^3.0.4" -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +"finalhandler@1.2.0": + "integrity" "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==" + "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + "version" "1.2.0" dependencies: - to-regex-range "^5.0.1" + "debug" "2.6.9" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "on-finished" "2.4.1" + "parseurl" "~1.3.3" + "statuses" "2.0.1" + "unpipe" "~1.0.0" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== +"find-replace@^3.0.0": + "integrity" "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==" + "resolved" "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz" + "version" "3.0.0" dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" + "array-back" "^3.0.1" -find-replace@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz" - integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== +"find-up@^2.0.0": + "integrity" "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + "version" "2.1.0" dependencies: - array-back "^3.0.1" - -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.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" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flat@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== - dependencies: - is-buffer "~2.0.3" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -fmix@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz" - integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== - dependencies: - imul "^1.0.0" - -follow-redirects@^1.12.1, follow-redirects@^1.14.0: - version "1.15.1" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data-encoder@1.7.1: - version "1.7.1" - resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz" - integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== - -form-data@^2.2.0, form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fp-ts@1.19.3, fp-ts@^1.0.0: - version "1.19.3" - resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" - integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz" - integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@^10.0.0, fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^4.0.2: - version "4.0.3" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.0, fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs-minipass@^2.0.0, fs-minipass@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -fsevents@~2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functional-red-black-tree@^1.0.1, 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" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -ganache-cli@^6.12.2: - version "6.12.2" - resolved "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz" - integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== - dependencies: - ethereumjs-util "6.2.1" - source-map-support "0.5.12" - yargs "13.2.4" - -ganache@^7.1.0: - version "7.4.3" - resolved "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz" - integrity sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA== + "locate-path" "^2.0.0" + +"find-up@^2.1.0": + "integrity" "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "locate-path" "^2.0.0" + +"find-up@^3.0.0", "find-up@3.0.0": + "integrity" "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "locate-path" "^3.0.0" + +"find-up@^4.0.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"find-up@^4.1.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"find-up@^5.0.0": + "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" + +"find-up@5.0.0": + "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" + +"flat-cache@^3.0.4": + "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "flatted" "^3.1.0" + "rimraf" "^3.0.2" + +"flat@^4.1.0": + "integrity" "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==" + "resolved" "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "is-buffer" "~2.0.3" + +"flat@^5.0.2": + "integrity" "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + "resolved" "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + "version" "5.0.2" + +"flatted@^3.1.0": + "integrity" "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" + "version" "3.2.7" + +"fmix@^0.1.0": + "integrity" "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==" + "resolved" "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "imul" "^1.0.0" + +"follow-redirects@^1.12.1", "follow-redirects@^1.14.0": + "integrity" "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" + "version" "1.15.2" + +"for-each@^0.3.3": + "integrity" "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==" + "resolved" "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "is-callable" "^1.1.3" + +"forever-agent@~0.6.1": + "integrity" "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + "resolved" "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + "version" "0.6.1" + +"form-data-encoder@1.7.1": + "integrity" "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" + "resolved" "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz" + "version" "1.7.1" + +"form-data@^2.2.0": + "integrity" "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz" + "version" "2.5.1" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.6" + "mime-types" "^2.1.12" + +"form-data@^3.0.0": + "integrity" "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + +"form-data@^4.0.0": + "integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + +"form-data@~2.3.2": + "integrity" "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" + "version" "2.3.3" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.6" + "mime-types" "^2.1.12" + +"forwarded@0.2.0": + "integrity" "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + "version" "0.2.0" + +"fp-ts@^1.0.0": + "integrity" "sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A==" + "resolved" "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz" + "version" "1.19.5" + +"fp-ts@1.19.3": + "integrity" "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" + "resolved" "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" + "version" "1.19.3" + +"fresh@0.5.2": + "integrity" "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + "version" "0.5.2" + +"fs-constants@^1.0.0": + "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + "version" "1.0.0" + +"fs-extra@^0.30.0": + "integrity" "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz" + "version" "0.30.0" + dependencies: + "graceful-fs" "^4.1.2" + "jsonfile" "^2.1.0" + "klaw" "^1.0.0" + "path-is-absolute" "^1.0.0" + "rimraf" "^2.2.8" + +"fs-extra@^10.0.0": + "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + "version" "10.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-extra@^10.1.0": + "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + "version" "10.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-extra@^4.0.2": + "integrity" "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "graceful-fs" "^4.1.2" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" + +"fs-extra@^7.0.0": + "integrity" "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "graceful-fs" "^4.1.2" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" + +"fs-extra@^7.0.1": + "integrity" "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "graceful-fs" "^4.1.2" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" + +"fs-extra@^9.1.0": + "integrity" "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + "version" "9.1.0" + dependencies: + "at-least-node" "^1.0.0" + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-minipass@^1.2.7": + "integrity" "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" + "version" "1.2.7" + dependencies: + "minipass" "^2.6.0" + +"fs-minipass@^2.0.0", "fs-minipass@^2.1.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + +"fs-readdir-recursive@^1.1.0": + "integrity" "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + "resolved" "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz" + "version" "1.1.0" + +"fs.realpath@^1.0.0": + "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"fsevents@^2.3.2", "fsevents@~2.3.2": + "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + "version" "2.3.2" + +"fsevents@~2.1.1": + "integrity" "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz" + "version" "2.1.3" + +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" + +"function.prototype.name@^1.1.5": + "integrity" "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==" + "resolved" "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.0" + "functions-have-names" "^1.2.2" + +"functional-red-black-tree@^1.0.1": + "integrity" "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + "version" "1.0.1" + +"functions-have-names@^1.2.2": + "integrity" "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "resolved" "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + "version" "1.2.3" + +"ganache-cli@^6.12.2": + "integrity" "sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw==" + "resolved" "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz" + "version" "6.12.2" + dependencies: + "ethereumjs-util" "6.2.1" + "source-map-support" "0.5.12" + "yargs" "13.2.4" + +"ganache@^7.1.0": + "integrity" "sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA==" + "resolved" "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz" + "version" "7.4.3" dependencies: "@trufflesuite/bigint-buffer" "1.1.10" "@types/bn.js" "^5.1.0" "@types/lru-cache" "5.1.1" "@types/seedrandom" "3.0.1" - emittery "0.10.0" - keccak "3.0.2" - leveldown "6.1.0" - secp256k1 "4.0.3" + "emittery" "0.10.0" + "keccak" "3.0.2" + "leveldown" "6.1.0" + "secp256k1" "4.0.3" optionalDependencies: - bufferutil "4.0.5" - utf-8-validate "5.0.7" - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -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" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -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" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-pkg-repo@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz" - integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + "bufferutil" "4.0.5" + "utf-8-validate" "5.0.7" + +"gauge@^4.0.3": + "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.3" + "console-control-strings" "^1.1.0" + "has-unicode" "^2.0.1" + "signal-exit" "^3.0.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.5" + +"gensync@^1.0.0-beta.2": + "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + "version" "1.0.0-beta.2" + +"get-caller-file@^2.0.1", "get-caller-file@^2.0.5": + "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + "version" "2.0.5" + +"get-func-name@^2.0.0": + "integrity" "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" + "resolved" "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" + "version" "2.0.0" + +"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1", "get-intrinsic@^1.1.3": + "integrity" "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "function-bind" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.3" + +"get-package-type@^0.1.0": + "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + "version" "0.1.0" + +"get-pkg-repo@^4.0.0": + "integrity" "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==" + "resolved" "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz" + "version" "4.2.1" dependencies: "@hutson/parse-repository-url" "^3.0.0" - hosted-git-info "^4.0.0" - through2 "^2.0.0" - yargs "^16.2.0" + "hosted-git-info" "^4.0.0" + "through2" "^2.0.0" + "yargs" "^16.2.0" -get-port@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz" - integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== +"get-port@^3.1.0": + "integrity" "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" + "resolved" "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz" + "version" "3.2.0" -get-port@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== +"get-port@^5.1.1": + "integrity" "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==" + "resolved" "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" + "version" "5.1.1" -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== +"get-stream@^4.0.0": + "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + "version" "4.1.0" dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.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" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -git-raw-commits@^2.0.8: - version "2.0.11" - resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz" - integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== - dependencies: - dargs "^7.0.0" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz" - integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz" - integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== - dependencies: - meow "^8.0.0" - semver "^6.0.0" - -git-up@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" - integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== - dependencies: - is-ssh "^1.4.0" - parse-url "^8.1.0" - -git-url-parse@^13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" - integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== - dependencies: - git-up "^7.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz" - integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== - dependencies: - ini "^1.3.2" - -glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@7.1.3: - version "7.1.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.1.4, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.4" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.6: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.1: - version "8.0.3" - resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -global@~4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/global/-/global-4.4.0.tgz" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.15.0: - version "13.17.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.2, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -got@12.1.0: - version "12.1.0" - resolved "https://registry.npmjs.org/got/-/got-12.1.0.tgz" - integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== + "pump" "^3.0.0" + +"get-stream@^4.1.0": + "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + "version" "4.1.0" dependencies: - "@sindresorhus/is" "^4.6.0" - "@szmarczak/http-timer" "^5.0.1" - "@types/cacheable-request" "^6.0.2" - "@types/responselike" "^1.0.0" - cacheable-lookup "^6.0.4" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - form-data-encoder "1.7.1" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^2.0.0" - -got@^11.8.5: - version "11.8.5" - resolved "https://registry.npmjs.org/got/-/got-11.8.5.tgz" - integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== + "pump" "^3.0.0" + +"get-stream@^5.1.0": + "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "pump" "^3.0.0" + +"get-stream@^6.0.0", "get-stream@^6.0.1": + "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + "version" "6.0.1" + +"get-symbol-description@^1.0.0": + "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==" + "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "call-bind" "^1.0.2" + "get-intrinsic" "^1.1.1" + +"getpass@^0.1.1": + "integrity" "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==" + "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + "version" "0.1.7" + dependencies: + "assert-plus" "^1.0.0" + +"git-raw-commits@^2.0.8": + "integrity" "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==" + "resolved" "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz" + "version" "2.0.11" + dependencies: + "dargs" "^7.0.0" + "lodash" "^4.17.15" + "meow" "^8.0.0" + "split2" "^3.0.0" + "through2" "^4.0.0" + +"git-remote-origin-url@^2.0.0": + "integrity" "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==" + "resolved" "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "gitconfiglocal" "^1.0.0" + "pify" "^2.3.0" + +"git-semver-tags@^4.1.1": + "integrity" "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==" + "resolved" "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "meow" "^8.0.0" + "semver" "^6.0.0" + +"git-up@^7.0.0": + "integrity" "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==" + "resolved" "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "is-ssh" "^1.4.0" + "parse-url" "^8.1.0" + +"git-url-parse@^13.1.0": + "integrity" "sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==" + "resolved" "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz" + "version" "13.1.0" + dependencies: + "git-up" "^7.0.0" + +"gitconfiglocal@^1.0.0": + "integrity" "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==" + "resolved" "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "ini" "^1.3.2" + +"glob-parent@^5.1.1", "glob-parent@^5.1.2", "glob-parent@~5.1.0", "glob-parent@~5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob-parent@^6.0.1": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + +"glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6": + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.1.1" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^8.0.1": + "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + "version" "8.0.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^5.0.1" + "once" "^1.3.0" + +"glob@7.1.3": + "integrity" "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" + "version" "7.1.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@7.1.4": + "integrity" "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" + "version" "7.1.4" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@7.2.0": + "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"global@~4.4.0": + "integrity" "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==" + "resolved" "https://registry.npmjs.org/global/-/global-4.4.0.tgz" + "version" "4.4.0" + dependencies: + "min-document" "^2.19.0" + "process" "^0.11.10" + +"globals@^11.1.0": + "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + "version" "11.12.0" + +"globals@^13.15.0": + "integrity" "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" + "version" "13.17.0" + dependencies: + "type-fest" "^0.20.2" + +"globby@^11.0.2", "globby@^11.1.0": + "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + "version" "11.1.0" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.2.9" + "ignore" "^5.2.0" + "merge2" "^1.4.1" + "slash" "^3.0.0" + +"got@^11.8.5": + "integrity" "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==" + "resolved" "https://registry.npmjs.org/got/-/got-11.8.5.tgz" + "version" "11.8.5" dependencies: "@sindresorhus/is" "^4.0.0" "@szmarczak/http-timer" "^4.0.5" "@types/cacheable-request" "^6.0.1" "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" + "cacheable-lookup" "^5.0.3" + "cacheable-request" "^7.0.2" + "decompress-response" "^6.0.0" + "http2-wrapper" "^1.0.0-beta.5.2" + "lowercase-keys" "^2.0.0" + "p-cancelable" "^2.0.0" + "responselike" "^2.0.0" + +"got@12.1.0": + "integrity" "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==" + "resolved" "https://registry.npmjs.org/got/-/got-12.1.0.tgz" + "version" "12.1.0" + dependencies: + "@sindresorhus/is" "^4.6.0" + "@szmarczak/http-timer" "^5.0.1" + "@types/cacheable-request" "^6.0.2" + "@types/responselike" "^1.0.0" + "cacheable-lookup" "^6.0.4" + "cacheable-request" "^7.0.2" + "decompress-response" "^6.0.0" + "form-data-encoder" "1.7.1" + "get-stream" "^6.0.1" + "http2-wrapper" "^2.1.10" + "lowercase-keys" "^3.0.0" + "p-cancelable" "^3.0.0" + "responselike" "^2.0.0" + +"got@9.6.0": + "integrity" "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==" + "resolved" "https://registry.npmjs.org/got/-/got-9.6.0.tgz" + "version" "9.6.0" + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + "cacheable-request" "^6.0.0" + "decompress-response" "^3.3.0" + "duplexer3" "^0.1.4" + "get-stream" "^4.1.0" + "lowercase-keys" "^1.0.1" + "mimic-response" "^1.0.1" + "p-cancelable" "^1.0.0" + "to-readable-stream" "^1.0.0" + "url-parse-lax" "^3.0.0" + +"graceful-fs@^4.1.11", "graceful-fs@^4.1.15", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.1.9", "graceful-fs@^4.2.0", "graceful-fs@^4.2.6", "graceful-fs@^4.2.9": + "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + "version" "4.2.10" + +"grapheme-splitter@^1.0.4": + "integrity" "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + "resolved" "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + "version" "1.0.4" + +"growl@1.10.5": + "integrity" "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + "resolved" "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" + "version" "1.10.5" + +"handlebars@^4.7.7": + "integrity" "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==" + "resolved" "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" + "version" "4.7.7" + dependencies: + "minimist" "^1.2.5" + "neo-async" "^2.6.0" + "source-map" "^0.6.1" + "wordwrap" "^1.0.0" optionalDependencies: - uglify-js "^3.1.4" + "uglify-js" "^3.1.4" -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== +"har-schema@^2.0.0": + "integrity" "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" + "resolved" "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" + "version" "2.0.0" -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== +"har-validator@~5.1.3": + "integrity" "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==" + "resolved" "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" + "version" "5.1.5" dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" + "ajv" "^6.12.3" + "har-schema" "^2.0.0" -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== +"hard-rejection@^2.1.0": + "integrity" "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==" + "resolved" "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" + "version" "2.1.0" -hardhat-deploy-ethers@^0.3.0-beta.11: - version "0.3.0-beta.13" - resolved "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz" - integrity sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw== +"hardhat-deploy-ethers@^0.3.0-beta.11": + "integrity" "sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw==" + "resolved" "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz" + "version" "0.3.0-beta.13" -hardhat-deploy@^0.9.3: - version "0.9.29" - resolved "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.29.tgz" - integrity sha512-8tIGszPFmOaXtyloCbASiZPvoAgLNGGL/Ubys3YW/oj4dvoPa8G6YDyaOCdsAhsENZ+QgR280NFSG9JdN7SU9Q== +"hardhat-deploy@^0.9.3": + "integrity" "sha512-8tIGszPFmOaXtyloCbASiZPvoAgLNGGL/Ubys3YW/oj4dvoPa8G6YDyaOCdsAhsENZ+QgR280NFSG9JdN7SU9Q==" + "resolved" "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.29.tgz" + "version" "0.9.29" dependencies: "@ethersproject/abi" "^5.4.0" "@ethersproject/abstract-signer" "^5.4.1" @@ -5968,1010 +6881,1029 @@ hardhat-deploy@^0.9.3: "@ethersproject/transactions" "^5.4.0" "@ethersproject/wallet" "^5.4.0" "@types/qs" "^6.9.7" - axios "^0.21.1" - chalk "^4.1.2" - chokidar "^3.5.2" - debug "^4.3.2" - enquirer "^2.3.6" - form-data "^4.0.0" - fs-extra "^10.0.0" - match-all "^1.2.6" - murmur-128 "^0.2.1" - qs "^6.9.4" - -hardhat-gas-reporter@^1.0.7: - version "1.0.9" - resolved "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz" - integrity sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg== - dependencies: - array-uniq "1.0.3" - eth-gas-reporter "^0.2.25" - sha1 "^1.1.1" - -hardhat@^2.9.2, hardhat@^2.9.5, hardhat@^2.9.9: - version "2.10.2" - resolved "https://registry.npmjs.org/hardhat/-/hardhat-2.10.2.tgz" - integrity sha512-L/KvDDT/MA6332uAtYTqdcHoSABljw4pPjHQe5SHdIJ+xKfaSc6vDKw03CmrQ5Xup0gHs8XnVSBpZo1AbbIW7g== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/blockchain" "^5.5.2" - "@ethereumjs/common" "^2.6.4" - "@ethereumjs/tx" "^3.5.1" - "@ethereumjs/vm" "^5.9.0" + "axios" "^0.21.1" + "chalk" "^4.1.2" + "chokidar" "^3.5.2" + "debug" "^4.3.2" + "enquirer" "^2.3.6" + "form-data" "^4.0.0" + "fs-extra" "^10.0.0" + "match-all" "^1.2.6" + "murmur-128" "^0.2.1" + "qs" "^6.9.4" + +"hardhat-gas-reporter@^1.0.7": + "integrity" "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==" + "resolved" "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz" + "version" "1.0.9" + dependencies: + "array-uniq" "1.0.3" + "eth-gas-reporter" "^0.2.25" + "sha1" "^1.1.1" + +"hardhat@^2.0.0", "hardhat@^2.0.10", "hardhat@^2.0.2", "hardhat@^2.0.4", "hardhat@^2.6.8", "hardhat@^2.9.2", "hardhat@^2.9.5", "hardhat@^2.9.9": + "integrity" "sha512-BdsXC1CFJQDJKmAgCwpmGhFuVU6dcqlgMgT0Kg/xmFAFVugkpYu6NRmh4AaJ3Fah0/BR9DOR4XgQGIbg4eon/Q==" + "resolved" "https://registry.npmjs.org/hardhat/-/hardhat-2.11.2.tgz" + "version" "2.11.2" + dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-evm" "^1.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-vm" "^6.0.0" + "@nomicfoundation/solidity-analyzer" "^0.0.3" "@sentry/node" "^5.18.1" - "@solidity-parser/parser" "^0.14.2" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" - adm-zip "^0.4.16" - aggregate-error "^3.0.0" - ansi-escapes "^4.3.0" - chalk "^2.4.2" - chokidar "^3.4.0" - ci-info "^2.0.0" - debug "^4.1.1" - enquirer "^2.3.0" - env-paths "^2.2.0" - ethereum-cryptography "^1.0.3" - ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.1.4" - find-up "^2.1.0" - fp-ts "1.19.3" - fs-extra "^7.0.1" - glob "7.2.0" - immutable "^4.0.0-rc.12" - io-ts "1.10.4" - lodash "^4.17.11" - merkle-patricia-tree "^4.2.4" - mnemonist "^0.38.0" - mocha "^10.0.0" - p-map "^4.0.0" - qs "^6.7.0" - raw-body "^2.4.1" - resolve "1.17.0" - semver "^6.3.0" - slash "^3.0.0" - solc "0.7.3" - source-map-support "^0.5.13" - stacktrace-parser "^0.1.10" - "true-case-path" "^2.2.1" - tsort "0.0.1" - undici "^5.4.0" - 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.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" - 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" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz" - integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^3.0.6: - version "3.0.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" - integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.1.0.tgz#9786123f92ef3627f24abc3f15c20d98ec4a6594" - integrity sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q== - dependencies: - lru-cache "^7.5.1" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-basic@^8.1.1: - version "8.1.3" - resolved "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz" - integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== - dependencies: - caseless "^0.12.0" - concat-stream "^1.6.2" - http-response-object "^3.0.1" - parse-cache-control "^1.0.1" - -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-https@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz" - integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + "abort-controller" "^3.0.0" + "adm-zip" "^0.4.16" + "aggregate-error" "^3.0.0" + "ansi-escapes" "^4.3.0" + "chalk" "^2.4.2" + "chokidar" "^3.4.0" + "ci-info" "^2.0.0" + "debug" "^4.1.1" + "enquirer" "^2.3.0" + "env-paths" "^2.2.0" + "ethereum-cryptography" "^1.0.3" + "ethereumjs-abi" "^0.6.8" + "find-up" "^2.1.0" + "fp-ts" "1.19.3" + "fs-extra" "^7.0.1" + "glob" "7.2.0" + "immutable" "^4.0.0-rc.12" + "io-ts" "1.10.4" + "keccak" "^3.0.2" + "lodash" "^4.17.11" + "mnemonist" "^0.38.0" + "mocha" "^10.0.0" + "p-map" "^4.0.0" + "qs" "^6.7.0" + "raw-body" "^2.4.1" + "resolve" "1.17.0" + "semver" "^6.3.0" + "solc" "0.7.3" + "source-map-support" "^0.5.13" + "stacktrace-parser" "^0.1.10" + "tsort" "0.0.1" + "undici" "^5.4.0" + "uuid" "^8.3.2" + "ws" "^7.4.6" + +"has-bigints@^1.0.1", "has-bigints@^1.0.2": + "integrity" "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + "version" "1.0.2" + +"has-flag@^3.0.0": + "integrity" "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-property-descriptors@^1.0.0": + "integrity" "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==" + "resolved" "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "get-intrinsic" "^1.1.1" + +"has-symbols@^1.0.0", "has-symbols@^1.0.2", "has-symbols@^1.0.3": + "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + "version" "1.0.3" + +"has-tostringtag@^1.0.0": + "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==" + "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "has-symbols" "^1.0.2" + +"has-unicode@^2.0.1": + "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "version" "2.0.1" + +"has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" + +"hash-base@^3.0.0": + "integrity" "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==" + "resolved" "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "inherits" "^2.0.4" + "readable-stream" "^3.6.0" + "safe-buffer" "^5.2.0" + +"hash.js@^1.0.0", "hash.js@^1.0.3", "hash.js@^1.1.7", "hash.js@1.1.7": + "integrity" "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==" + "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + "version" "1.1.7" + dependencies: + "inherits" "^2.0.3" + "minimalistic-assert" "^1.0.1" + +"hash.js@1.1.3": + "integrity" "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==" + "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "inherits" "^2.0.3" + "minimalistic-assert" "^1.0.0" + +"he@1.2.0": + "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + "version" "1.2.0" + +"hmac-drbg@^1.0.0": + "version" "1.0.1" + dependencies: + "hash.js" "^1.0.3" + "minimalistic-assert" "^1.0.0" + "minimalistic-crypto-utils" "^1.0.1" + +"hmac-drbg@^1.0.1": + "integrity" "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==" + "resolved" "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "hash.js" "^1.0.3" + "minimalistic-assert" "^1.0.0" + "minimalistic-crypto-utils" "^1.0.1" + +"hosted-git-info@^2.1.4": + "integrity" "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + "version" "2.8.9" + +"hosted-git-info@^3.0.6": + "integrity" "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz" + "version" "3.0.8" + dependencies: + "lru-cache" "^6.0.0" + +"hosted-git-info@^4.0.0", "hosted-git-info@^4.0.1": + "integrity" "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "lru-cache" "^6.0.0" + +"hosted-git-info@^5.0.0": + "integrity" "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "lru-cache" "^7.5.1" + +"html-escaper@^2.0.0": + "integrity" "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "resolved" "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + "version" "2.0.2" + +"http-basic@^8.1.1": + "integrity" "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==" + "resolved" "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz" + "version" "8.1.3" + dependencies: + "caseless" "^0.12.0" + "concat-stream" "^1.6.2" + "http-response-object" "^3.0.1" + "parse-cache-control" "^1.0.1" + +"http-cache-semantics@^4.0.0", "http-cache-semantics@^4.1.0": + "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + "version" "4.1.0" + +"http-errors@2.0.0": + "integrity" "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "depd" "2.0.0" + "inherits" "2.0.4" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "toidentifier" "1.0.1" + +"http-https@^1.0.0": + "integrity" "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + "resolved" "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz" + "version" "1.0.0" + +"http-proxy-agent@^5.0.0": + "integrity" "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==" + "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + "version" "5.0.0" dependencies: "@tootallnate/once" "2" - agent-base "6" - debug "4" + "agent-base" "6" + "debug" "4" -http-response-object@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz" - integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== +"http-response-object@^3.0.1": + "integrity" "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==" + "resolved" "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz" + "version" "3.0.2" dependencies: "@types/node" "^10.0.3" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== +"http-signature@~1.2.0": + "integrity" "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==" + "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" + "version" "1.2.0" dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + "assert-plus" "^1.0.0" + "jsprim" "^1.2.2" + "sshpk" "^1.7.0" -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== +"http2-wrapper@^1.0.0-beta.5.2": + "integrity" "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==" + "resolved" "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" + "version" "1.0.3" dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" + "quick-lru" "^5.1.1" + "resolve-alpn" "^1.0.0" -http2-wrapper@^2.1.10: - version "2.1.11" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz" - integrity sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ== +"http2-wrapper@^2.1.10": + "integrity" "sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ==" + "resolved" "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz" + "version" "2.1.11" dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.0" + "quick-lru" "^5.1.1" + "resolve-alpn" "^1.2.0" -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== +"https-proxy-agent@^5.0.0": + "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" + "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + "version" "5.0.1" dependencies: - agent-base "6" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -husky@^7.0.4: - version "7.0.4" - resolved "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz" - integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== - -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" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -idna-uts46-hx@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz" - integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== - dependencies: - punycode "2.1.0" - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-walk@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" - integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== - dependencies: - minimatch "^5.0.1" - -ignore@^5.0.4, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -immediate@~3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz" - integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== - -immutable@^4.0.0-rc.12: - version "4.1.0" - resolved "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz" - integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imul@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz" - integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - 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" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.2, ini@^1.3.4: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -init-package-json@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" - integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== - dependencies: - npm-package-arg "^9.0.1" - promzard "^0.3.0" - read "^1.0.7" - read-package-json "^5.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" - -inquirer@^8.2.4: - version "8.2.4" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" - integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^7.0.0" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -io-ts@1.10.4: - version "1.10.4" - resolved "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz" - integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== - dependencies: - fp-ts "^1.0.0" - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" - 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" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^2.0.5, is-buffer@~2.0.3: - version "2.0.5" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.6: - version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-function@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz" - integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -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" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -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" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" - 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" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - -is-plain-obj@^2.0.0, 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" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" - 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.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-ssh@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== - dependencies: - protocols "^2.0.1" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" - integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== - dependencies: - text-extensions "^1.0.0" - -is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz" - integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.20.0" - for-each "^0.3.3" - has-tostringtag "^1.0.0" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" + "agent-base" "6" + "debug" "4" + +"human-signals@^2.1.0": + "integrity" "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + "version" "2.1.0" + +"humanize-ms@^1.2.1": + "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" + "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "ms" "^2.0.0" + +"husky@^7.0.4": + "integrity" "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==" + "resolved" "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz" + "version" "7.0.4" + +"iconv-lite@^0.4.24", "iconv-lite@0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + +"iconv-lite@^0.6.2": + "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + "version" "0.6.3" + dependencies: + "safer-buffer" ">= 2.1.2 < 3.0.0" + +"idna-uts46-hx@^2.3.1": + "integrity" "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==" + "resolved" "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz" + "version" "2.3.1" + dependencies: + "punycode" "2.1.0" + +"ieee754@^1.1.13", "ieee754@^1.2.1": + "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + "version" "1.2.1" + +"ignore-walk@^5.0.1": + "integrity" "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==" + "resolved" "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "minimatch" "^5.0.1" + +"ignore@^5.0.4", "ignore@^5.2.0": + "integrity" "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" + "version" "5.2.0" + +"immediate@^3.2.3": + "integrity" "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" + "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz" + "version" "3.3.0" + +"immutable@^4.0.0-rc.12": + "integrity" "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + "resolved" "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz" + "version" "4.1.0" + +"import-fresh@^3.0.0", "import-fresh@^3.2.1": + "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"import-local@^3.0.2": + "integrity" "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==" + "resolved" "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "pkg-dir" "^4.2.0" + "resolve-cwd" "^3.0.0" + +"imul@^1.0.0": + "integrity" "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==" + "resolved" "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz" + "version" "1.0.1" + +"imurmurhash@^0.1.4": + "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" + +"infer-owner@^1.0.4": + "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + "version" "1.0.4" + +"inflight@^1.0.4": + "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.1", "inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.1", "inherits@~2.0.3", "inherits@2", "inherits@2.0.4": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"ini@^1.3.2", "ini@^1.3.4": + "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + "version" "1.3.8" + +"init-package-json@^3.0.2": + "integrity" "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==" + "resolved" "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "npm-package-arg" "^9.0.1" + "promzard" "^0.3.0" + "read" "^1.0.7" + "read-package-json" "^5.0.0" + "semver" "^7.3.5" + "validate-npm-package-license" "^3.0.4" + "validate-npm-package-name" "^4.0.0" + +"inquirer@^8.2.4": + "integrity" "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz" + "version" "8.2.4" + dependencies: + "ansi-escapes" "^4.2.1" + "chalk" "^4.1.1" + "cli-cursor" "^3.1.0" + "cli-width" "^3.0.0" + "external-editor" "^3.0.3" + "figures" "^3.0.0" + "lodash" "^4.17.21" + "mute-stream" "0.0.8" + "ora" "^5.4.1" + "run-async" "^2.4.0" + "rxjs" "^7.5.5" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + "through" "^2.3.6" + "wrap-ansi" "^7.0.0" + +"internal-slot@^1.0.3": + "integrity" "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==" + "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "get-intrinsic" "^1.1.0" + "has" "^1.0.3" + "side-channel" "^1.0.4" + +"invert-kv@^2.0.0": + "integrity" "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + "resolved" "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz" + "version" "2.0.0" + +"io-ts@1.10.4": + "integrity" "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==" + "resolved" "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz" + "version" "1.10.4" + dependencies: + "fp-ts" "^1.0.0" + +"ip@^2.0.0": + "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + "version" "2.0.0" + +"ipaddr.js@1.9.1": + "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + "version" "1.9.1" + +"is-arguments@^1.0.4": + "integrity" "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==" + "resolved" "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-arrayish@^0.2.1": + "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-bigint@^1.0.1": + "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==" + "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "has-bigints" "^1.0.1" + +"is-binary-path@~2.1.0": + "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "binary-extensions" "^2.0.0" + +"is-boolean-object@^1.1.0": + "integrity" "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==" + "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-buffer@^2.0.5", "is-buffer@~2.0.3": + "integrity" "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" + "version" "2.0.5" + +"is-callable@^1.1.3", "is-callable@^1.1.4", "is-callable@^1.2.6": + "integrity" "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + "version" "1.2.7" + +"is-ci@^2.0.0": + "integrity" "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==" + "resolved" "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "ci-info" "^2.0.0" + +"is-core-module@^2.5.0", "is-core-module@^2.8.1", "is-core-module@^2.9.0": + "integrity" "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" + "version" "2.10.0" + dependencies: + "has" "^1.0.3" + +"is-date-object@^1.0.1": + "integrity" "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==" + "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-docker@^2.0.0", "is-docker@^2.1.1": + "integrity" "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + "resolved" "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + "version" "2.2.1" + +"is-extglob@^2.1.1": + "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fn@^1.0.0": + "integrity" "sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==" + "resolved" "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz" + "version" "1.0.0" + +"is-fullwidth-code-point@^2.0.0": + "integrity" "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + "version" "2.0.0" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-fullwidth-code-point@^4.0.0": + "integrity" "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" + "version" "4.0.0" + +"is-function@^1.0.1": + "integrity" "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + "resolved" "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz" + "version" "1.0.2" + +"is-generator-fn@^2.0.0": + "integrity" "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + "resolved" "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + "version" "2.1.0" + +"is-generator-function@^1.0.7": + "integrity" "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==" + "resolved" "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "is-extglob" "^2.1.1" + +"is-hex-prefixed@1.0.0": + "integrity" "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + "resolved" "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" + "version" "1.0.0" + +"is-interactive@^1.0.0": + "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + "version" "1.0.0" + +"is-lambda@^1.0.1": + "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + "version" "1.0.1" + +"is-negative-zero@^2.0.2": + "integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + "version" "2.0.2" + +"is-number-object@^1.0.4": + "integrity" "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==" + "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"is-obj@^2.0.0": + "integrity" "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + "version" "2.0.0" + +"is-plain-obj@^1.0.0": + "integrity" "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + "version" "1.1.0" + +"is-plain-obj@^1.1.0": + "integrity" "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + "version" "1.1.0" + +"is-plain-obj@^2.0.0", "is-plain-obj@^2.1.0": + "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + "version" "2.1.0" + +"is-plain-object@^2.0.4": + "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" + "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "isobject" "^3.0.1" + +"is-plain-object@^5.0.0": + "integrity" "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" + "version" "5.0.0" + +"is-regex@^1.1.4": + "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==" + "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + "version" "1.1.4" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-shared-array-buffer@^1.0.2": + "integrity" "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==" + "resolved" "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" + +"is-ssh@^1.4.0": + "integrity" "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==" + "resolved" "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "protocols" "^2.0.1" + +"is-stream@^1.1.0": + "integrity" "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + "version" "1.1.0" + +"is-stream@^2.0.0", "is-stream@^2.0.1": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" + +"is-string@^1.0.5", "is-string@^1.0.7": + "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" + "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-symbol@^1.0.2", "is-symbol@^1.0.3": + "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==" + "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "has-symbols" "^1.0.2" + +"is-text-path@^1.0.1": + "integrity" "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==" + "resolved" "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "text-extensions" "^1.0.0" + +"is-typed-array@^1.1.3", "is-typed-array@^1.1.9": + "integrity" "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==" + "resolved" "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz" + "version" "1.1.9" + dependencies: + "available-typed-arrays" "^1.0.5" + "call-bind" "^1.0.2" + "es-abstract" "^1.20.0" + "for-each" "^0.3.3" + "has-tostringtag" "^1.0.0" + +"is-typedarray@^1.0.0", "is-typedarray@~1.0.0": + "integrity" "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + "version" "1.0.0" + +"is-unicode-supported@^0.1.0": + "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + "version" "0.1.0" + +"is-weakref@^1.0.2": + "integrity" "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==" + "resolved" "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" + +"is-wsl@^2.2.0": + "integrity" "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==" + "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "is-docker" "^2.0.0" + +"isarray@~1.0.0": + "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== +"isarray@0.0.1": + "integrity" "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + "version" "0.0.1" + +"isexe@^2.0.0": + "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"isobject@^3.0.1": + "integrity" "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + "version" "3.0.1" + +"isstream@~0.1.2": + "integrity" "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + "resolved" "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + "version" "0.1.2" -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz" - integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== +"istanbul-lib-coverage@^3.0.0", "istanbul-lib-coverage@^3.2.0": + "integrity" "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" + "version" "3.2.0" + +"istanbul-lib-instrument@^5.0.4", "istanbul-lib-instrument@^5.1.0": + "integrity" "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==" + "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz" + "version" "5.2.0" dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" + "istanbul-lib-coverage" "^3.2.0" + "semver" "^6.3.0" -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== +"istanbul-lib-report@^3.0.0": + "integrity" "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" + "istanbul-lib-coverage" "^3.0.0" + "make-dir" "^3.0.0" + "supports-color" "^7.1.0" -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== +"istanbul-lib-source-maps@^4.0.0": + "integrity" "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + "version" "4.0.1" dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" + "debug" "^4.1.1" + "istanbul-lib-coverage" "^3.0.0" + "source-map" "^0.6.1" -istanbul-reports@^3.1.3: - version "3.1.5" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== +"istanbul-reports@^3.1.3": + "integrity" "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==" + "resolved" "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" + "version" "3.1.5" dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" + "html-escaper" "^2.0.0" + "istanbul-lib-report" "^3.0.0" -jest-changed-files@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz" - integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== +"jest-changed-files@^28.1.3": + "integrity" "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==" + "resolved" "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz" + "version" "28.1.3" dependencies: - execa "^5.0.0" - p-limit "^3.1.0" + "execa" "^5.0.0" + "p-limit" "^3.1.0" -jest-circus@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz" - integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== +"jest-circus@^28.1.3": + "integrity" "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==" + "resolved" "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/environment" "^28.1.3" "@jest/expect" "^28.1.3" "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^0.7.0" - is-generator-fn "^2.0.0" - jest-each "^28.1.3" - jest-matcher-utils "^28.1.3" - jest-message-util "^28.1.3" - jest-runtime "^28.1.3" - jest-snapshot "^28.1.3" - jest-util "^28.1.3" - p-limit "^3.1.0" - pretty-format "^28.1.3" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz" - integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== + "chalk" "^4.0.0" + "co" "^4.6.0" + "dedent" "^0.7.0" + "is-generator-fn" "^2.0.0" + "jest-each" "^28.1.3" + "jest-matcher-utils" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-runtime" "^28.1.3" + "jest-snapshot" "^28.1.3" + "jest-util" "^28.1.3" + "p-limit" "^3.1.0" + "pretty-format" "^28.1.3" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" + +"jest-cli@^28.1.3": + "integrity" "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==" + "resolved" "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/core" "^28.1.3" "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - import-local "^3.0.2" - jest-config "^28.1.3" - jest-util "^28.1.3" - jest-validate "^28.1.3" - prompts "^2.0.1" - yargs "^17.3.1" - -jest-config@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz" - integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.9" + "import-local" "^3.0.2" + "jest-config" "^28.1.3" + "jest-util" "^28.1.3" + "jest-validate" "^28.1.3" + "prompts" "^2.0.1" + "yargs" "^17.3.1" + +"jest-config@^28.1.3": + "integrity" "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==" + "resolved" "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/core" "^7.11.6" "@jest/test-sequencer" "^28.1.3" "@jest/types" "^28.1.3" - babel-jest "^28.1.3" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^28.1.3" - jest-environment-node "^28.1.3" - jest-get-type "^28.0.2" - jest-regex-util "^28.0.2" - jest-resolve "^28.1.3" - jest-runner "^28.1.3" - jest-util "^28.1.3" - jest-validate "^28.1.3" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^28.1.3" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" - integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== - dependencies: - chalk "^4.0.0" - diff-sequences "^28.1.1" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" - -jest-docblock@^28.1.1: - version "28.1.1" - resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz" - integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== - dependencies: - detect-newline "^3.0.0" - -jest-each@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz" - integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== + "babel-jest" "^28.1.3" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "deepmerge" "^4.2.2" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "jest-circus" "^28.1.3" + "jest-environment-node" "^28.1.3" + "jest-get-type" "^28.0.2" + "jest-regex-util" "^28.0.2" + "jest-resolve" "^28.1.3" + "jest-runner" "^28.1.3" + "jest-util" "^28.1.3" + "jest-validate" "^28.1.3" + "micromatch" "^4.0.4" + "parse-json" "^5.2.0" + "pretty-format" "^28.1.3" + "slash" "^3.0.0" + "strip-json-comments" "^3.1.1" + +"jest-diff@^28.1.3": + "integrity" "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==" + "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" + "version" "28.1.3" + dependencies: + "chalk" "^4.0.0" + "diff-sequences" "^28.1.1" + "jest-get-type" "^28.0.2" + "pretty-format" "^28.1.3" + +"jest-docblock@^28.1.1": + "integrity" "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==" + "resolved" "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "detect-newline" "^3.0.0" + +"jest-each@^28.1.3": + "integrity" "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==" + "resolved" "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" - chalk "^4.0.0" - jest-get-type "^28.0.2" - jest-util "^28.1.3" - pretty-format "^28.1.3" + "chalk" "^4.0.0" + "jest-get-type" "^28.0.2" + "jest-util" "^28.1.3" + "pretty-format" "^28.1.3" -jest-environment-node@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz" - integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== +"jest-environment-node@^28.1.3": + "integrity" "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==" + "resolved" "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/environment" "^28.1.3" "@jest/fake-timers" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - jest-mock "^28.1.3" - jest-util "^28.1.3" + "jest-mock" "^28.1.3" + "jest-util" "^28.1.3" -jest-get-type@^28.0.2: - version "28.0.2" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" - integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== +"jest-get-type@^28.0.2": + "integrity" "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==" + "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" + "version" "28.0.2" -jest-haste-map@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz" - integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== +"jest-haste-map@^28.1.3": + "integrity" "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==" + "resolved" "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@types/graceful-fs" "^4.1.3" "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^28.0.2" - jest-util "^28.1.3" - jest-worker "^28.1.3" - micromatch "^4.0.4" - walker "^1.0.8" + "anymatch" "^3.0.3" + "fb-watchman" "^2.0.0" + "graceful-fs" "^4.2.9" + "jest-regex-util" "^28.0.2" + "jest-util" "^28.1.3" + "jest-worker" "^28.1.3" + "micromatch" "^4.0.4" + "walker" "^1.0.8" optionalDependencies: - fsevents "^2.3.2" + "fsevents" "^2.3.2" -jest-leak-detector@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz" - integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== +"jest-leak-detector@^28.1.3": + "integrity" "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==" + "resolved" "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz" + "version" "28.1.3" dependencies: - jest-get-type "^28.0.2" - pretty-format "^28.1.3" + "jest-get-type" "^28.0.2" + "pretty-format" "^28.1.3" -jest-matcher-utils@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" - integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== +"jest-matcher-utils@^28.1.3": + "integrity" "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==" + "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" + "version" "28.1.3" dependencies: - chalk "^4.0.0" - jest-diff "^28.1.3" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" + "chalk" "^4.0.0" + "jest-diff" "^28.1.3" + "jest-get-type" "^28.0.2" + "pretty-format" "^28.1.3" -jest-message-util@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz" - integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== +"jest-message-util@^28.1.3": + "integrity" "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==" + "resolved" "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/code-frame" "^7.12.13" "@jest/types" "^28.1.3" "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^28.1.3" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz" - integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "micromatch" "^4.0.4" + "pretty-format" "^28.1.3" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" + +"jest-mock@^28.1.3": + "integrity" "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==" + "resolved" "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@types/node" "*" -jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^28.0.2: - version "28.0.2" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" - integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== - -jest-resolve-dependencies@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz" - integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== - dependencies: - jest-regex-util "^28.0.2" - jest-snapshot "^28.1.3" - -jest-resolve@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz" - integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - jest-pnp-resolver "^1.2.2" - jest-util "^28.1.3" - jest-validate "^28.1.3" - resolve "^1.20.0" - resolve.exports "^1.1.0" - slash "^3.0.0" - -jest-runner@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz" - integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== +"jest-pnp-resolver@^1.2.2": + "integrity" "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + "resolved" "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" + "version" "1.2.2" + +"jest-regex-util@^28.0.2": + "integrity" "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==" + "resolved" "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" + "version" "28.0.2" + +"jest-resolve-dependencies@^28.1.3": + "integrity" "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==" + "resolved" "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz" + "version" "28.1.3" + dependencies: + "jest-regex-util" "^28.0.2" + "jest-snapshot" "^28.1.3" + +"jest-resolve@*", "jest-resolve@^28.1.3": + "integrity" "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==" + "resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz" + "version" "28.1.3" + dependencies: + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.3" + "jest-pnp-resolver" "^1.2.2" + "jest-util" "^28.1.3" + "jest-validate" "^28.1.3" + "resolve" "^1.20.0" + "resolve.exports" "^1.1.0" + "slash" "^3.0.0" + +"jest-runner@^28.1.3": + "integrity" "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==" + "resolved" "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/console" "^28.1.3" "@jest/environment" "^28.1.3" @@ -6979,26 +7911,26 @@ jest-runner@^28.1.3: "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - chalk "^4.0.0" - emittery "^0.10.2" - graceful-fs "^4.2.9" - jest-docblock "^28.1.1" - jest-environment-node "^28.1.3" - jest-haste-map "^28.1.3" - jest-leak-detector "^28.1.3" - jest-message-util "^28.1.3" - jest-resolve "^28.1.3" - jest-runtime "^28.1.3" - jest-util "^28.1.3" - jest-watcher "^28.1.3" - jest-worker "^28.1.3" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz" - integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== + "chalk" "^4.0.0" + "emittery" "^0.10.2" + "graceful-fs" "^4.2.9" + "jest-docblock" "^28.1.1" + "jest-environment-node" "^28.1.3" + "jest-haste-map" "^28.1.3" + "jest-leak-detector" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-resolve" "^28.1.3" + "jest-runtime" "^28.1.3" + "jest-util" "^28.1.3" + "jest-watcher" "^28.1.3" + "jest-worker" "^28.1.3" + "p-limit" "^3.1.0" + "source-map-support" "0.5.13" + +"jest-runtime@^28.1.3": + "integrity" "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==" + "resolved" "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/environment" "^28.1.3" "@jest/fake-timers" "^28.1.3" @@ -7007,26 +7939,26 @@ jest-runtime@^28.1.3: "@jest/test-result" "^28.1.3" "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - execa "^5.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - jest-message-util "^28.1.3" - jest-mock "^28.1.3" - jest-regex-util "^28.0.2" - jest-resolve "^28.1.3" - jest-snapshot "^28.1.3" - jest-util "^28.1.3" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-snapshot@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz" - integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== + "chalk" "^4.0.0" + "cjs-module-lexer" "^1.0.0" + "collect-v8-coverage" "^1.0.0" + "execa" "^5.0.0" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-mock" "^28.1.3" + "jest-regex-util" "^28.0.2" + "jest-resolve" "^28.1.3" + "jest-snapshot" "^28.1.3" + "jest-util" "^28.1.3" + "slash" "^3.0.0" + "strip-bom" "^4.0.0" + +"jest-snapshot@^28.1.3": + "integrity" "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==" + "resolved" "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -7038,269 +7970,344 @@ jest-snapshot@^28.1.3: "@jest/types" "^28.1.3" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^28.1.3" - graceful-fs "^4.2.9" - jest-diff "^28.1.3" - jest-get-type "^28.0.2" - jest-haste-map "^28.1.3" - jest-matcher-utils "^28.1.3" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - natural-compare "^1.4.0" - pretty-format "^28.1.3" - semver "^7.3.5" - -jest-util@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz" - integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + "babel-preset-current-node-syntax" "^1.0.0" + "chalk" "^4.0.0" + "expect" "^28.1.3" + "graceful-fs" "^4.2.9" + "jest-diff" "^28.1.3" + "jest-get-type" "^28.0.2" + "jest-haste-map" "^28.1.3" + "jest-matcher-utils" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-util" "^28.1.3" + "natural-compare" "^1.4.0" + "pretty-format" "^28.1.3" + "semver" "^7.3.5" + +"jest-util@^28.1.3": + "integrity" "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==" + "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "graceful-fs" "^4.2.9" + "picomatch" "^2.2.3" -jest-validate@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz" - integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== +"jest-validate@^28.1.3": + "integrity" "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==" + "resolved" "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^28.0.2" - leven "^3.1.0" - pretty-format "^28.1.3" + "camelcase" "^6.2.0" + "chalk" "^4.0.0" + "jest-get-type" "^28.0.2" + "leven" "^3.1.0" + "pretty-format" "^28.1.3" -jest-watcher@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz" - integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== +"jest-watcher@^28.1.3": + "integrity" "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==" + "resolved" "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.10.2" - jest-util "^28.1.3" - string-length "^4.0.1" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "emittery" "^0.10.2" + "jest-util" "^28.1.3" + "string-length" "^4.0.1" -jest-worker@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" - integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== +"jest-worker@^28.1.3": + "integrity" "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" + "version" "28.1.3" dependencies: "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -js-sdsl@^4.1.4: - version "4.1.5" - resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz" - integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== - -js-sha3@0.5.7, js-sha3@^0.5.7: - version "0.5.7" - resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" - integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== - -js-sha3@0.8.0, js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -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" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -js-yaml@^3.10.0, js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - -jsonc-parser@3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz" - integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" + +"js-sdsl@^4.1.4": + "integrity" "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==" + "resolved" "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz" + "version" "4.1.5" + +"js-sha3@^0.5.7": + "integrity" "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" + "version" "0.5.7" + +"js-sha3@^0.8.0", "js-sha3@0.8.0": + "integrity" "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" + "version" "0.8.0" + +"js-sha3@0.5.7": + "integrity" "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" + "version" "0.5.7" + +"js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.10.0": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"js-yaml@^3.13.1": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"js-yaml@^4.1.0", "js-yaml@4.1.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + +"js-yaml@3.13.1": + "integrity" "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" + "version" "3.13.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"jsbn@~0.1.0": + "integrity" "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + "version" "0.1.1" + +"jsesc@^2.5.1": + "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + "version" "2.5.2" + +"json-buffer@3.0.0": + "integrity" "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" + "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" + "version" "3.0.0" + +"json-buffer@3.0.1": + "integrity" "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + "version" "3.0.1" + +"json-parse-better-errors@^1.0.1": + "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + "version" "1.0.2" + +"json-parse-even-better-errors@^2.3.0", "json-parse-even-better-errors@^2.3.1": + "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + "version" "2.3.1" + +"json-rpc-engine@^5.3.0": + "integrity" "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==" + "resolved" "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz" + "version" "5.4.0" + dependencies: + "eth-rpc-errors" "^3.0.0" + "safe-event-emitter" "^1.0.1" + +"json-rpc-engine@^6.1.0": + "integrity" "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==" + "resolved" "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + "eth-rpc-errors" "^4.0.2" + +"json-rpc-random-id@^1.0.0", "json-rpc-random-id@^1.0.1": + "integrity" "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" + "resolved" "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz" + "version" "1.0.1" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-schema@0.4.0": + "integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + "version" "0.4.0" + +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + +"json-stable-stringify@^1.0.1": + "integrity" "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==" + "resolved" "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "jsonify" "~0.0.0" + +"json-stringify-nice@^1.1.4": + "integrity" "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==" + "resolved" "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz" + "version" "1.1.4" + +"json-stringify-safe@^5.0.1", "json-stringify-safe@~5.0.1": + "integrity" "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + "resolved" "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + "version" "5.0.1" + +"json5@^1.0.1": + "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" + "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "minimist" "^1.2.0" + +"json5@^2.2.1": + "integrity" "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" + "version" "2.2.1" + +"jsonc-parser@3.2.0": + "integrity" "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + "resolved" "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + "version" "3.2.0" + +"jsonfile@^2.1.0": + "integrity" "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz" + "version" "2.4.0" optionalDependencies: - graceful-fs "^4.1.6" + "graceful-fs" "^4.1.6" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== +"jsonfile@^4.0.0": + "integrity" "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + "version" "4.0.0" optionalDependencies: - graceful-fs "^4.1.6" + "graceful-fs" "^4.1.6" -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== +"jsonfile@^6.0.1": + "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + "version" "6.1.0" dependencies: - universalify "^2.0.0" + "universalify" "^2.0.0" optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -just-diff-apply@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.4.1.tgz#1debed059ad009863b4db0e8d8f333d743cdd83b" - integrity sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g== - -just-diff@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.1.1.tgz#8da6414342a5ed6d02ccd64f5586cbbed3146202" - integrity sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ== - -keccak@3.0.2, keccak@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - -keyv@^4.0.0: - version "4.5.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz" - integrity sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - 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" - integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + "graceful-fs" "^4.1.6" + +"jsonify@~0.0.0": + "integrity" "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==" + "resolved" "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" + "version" "0.0.0" + +"jsonparse@^1.2.0", "jsonparse@^1.3.1": + "integrity" "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" + "resolved" "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + "version" "1.3.1" + +"JSONStream@^1.0.4": + "integrity" "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==" + "resolved" "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + "version" "1.3.5" + dependencies: + "jsonparse" "^1.2.0" + "through" ">=2.2.7 <3" + +"jsprim@^1.2.2": + "integrity" "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==" + "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" + "version" "1.4.2" + dependencies: + "assert-plus" "1.0.0" + "extsprintf" "1.3.0" + "json-schema" "0.4.0" + "verror" "1.10.0" + +"just-diff-apply@^5.2.0": + "integrity" "sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g==" + "resolved" "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.4.1.tgz" + "version" "5.4.1" + +"just-diff@^5.0.1": + "integrity" "sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ==" + "resolved" "https://registry.npmjs.org/just-diff/-/just-diff-5.1.1.tgz" + "version" "5.1.1" + +"keccak@^3.0.0", "keccak@^3.0.2": + "integrity" "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==" + "resolved" "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "node-addon-api" "^2.0.0" + "node-gyp-build" "^4.2.0" + "readable-stream" "^3.6.0" + +"keccak@3.0.2": + "integrity" "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==" + "resolved" "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "node-addon-api" "^2.0.0" + "node-gyp-build" "^4.2.0" + "readable-stream" "^3.6.0" + +"keyv@^3.0.0": + "integrity" "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==" + "resolved" "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "json-buffer" "3.0.0" + +"keyv@^4.0.0": + "integrity" "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==" + "resolved" "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz" + "version" "4.5.0" + dependencies: + "json-buffer" "3.0.1" + +"kind-of@^6.0.2", "kind-of@^6.0.3": + "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + "version" "6.0.3" + +"klaw@^1.0.0": + "integrity" "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==" + "resolved" "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz" + "version" "1.3.1" optionalDependencies: - graceful-fs "^4.1.9" + "graceful-fs" "^4.1.9" -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +"kleur@^3.0.3": + "integrity" "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "resolved" "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + "version" "3.0.3" -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== +"lcid@^2.0.0": + "integrity" "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==" + "resolved" "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz" + "version" "2.0.0" dependencies: - invert-kv "^2.0.0" + "invert-kv" "^2.0.0" -lerna@^5.5.4: - version "5.5.4" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-5.5.4.tgz#34d95dd3e26c725ce4ba981b887aaf59ce899519" - integrity sha512-LAFQ/U6SL7/EM0sedtFaFS4b0RbTqsYYOJ6LV9Y7l/zWFlqLcg41vLblkNRuxsNB5FZBNpfiWvXmd1KiWkQ/yQ== +"lerna@^5.5.4": + "integrity" "sha512-LAFQ/U6SL7/EM0sedtFaFS4b0RbTqsYYOJ6LV9Y7l/zWFlqLcg41vLblkNRuxsNB5FZBNpfiWvXmd1KiWkQ/yQ==" + "resolved" "https://registry.npmjs.org/lerna/-/lerna-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/add" "5.5.4" "@lerna/bootstrap" "5.5.4" @@ -7318,1207 +8325,1297 @@ lerna@^5.5.4: "@lerna/publish" "5.5.4" "@lerna/run" "5.5.4" "@lerna/version" "5.5.4" - import-local "^3.0.2" - npmlog "^6.0.2" - nx ">=14.6.1 < 16" - typescript "^3 || ^4" - -level-codec@^9.0.0: - version "9.0.2" - resolved "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz" - integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== - dependencies: - buffer "^5.6.0" - -level-concat-iterator@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz" - integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== - dependencies: - catering "^2.1.0" - -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - -level-errors@^2.0.0, level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - -level-mem@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz" - integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== - dependencies: - level-packager "^5.0.3" - memdown "^5.0.0" - -level-packager@^5.0.3: - version "5.1.1" - resolved "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - -level-supports@^2.0.1: - version "2.1.0" - resolved "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz" - integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== - -level-supports@~1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - -level-ws@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz" - integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== - dependencies: - inherits "^2.0.3" - readable-stream "^3.1.0" - xtend "^4.0.1" - -leveldown@6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz" - integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== - dependencies: - abstract-leveldown "^7.2.0" - napi-macros "~2.0.0" - node-gyp-build "^4.3.0" - -levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -libnpmaccess@^6.0.3: - version "6.0.4" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz#2dd158bd8a071817e2207d3b201d37cf1ad6ae6b" - integrity sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag== - dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" - -libnpmpublish@^6.0.4: - version "6.0.5" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.5.tgz#5a894f3de2e267d62f86be2a508e362599b5a4b1" - integrity sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg== - dependencies: - normalize-package-data "^4.0.0" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" - semver "^7.3.7" - ssri "^9.0.0" - -lilconfig@2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz" - integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lint-staged@^12.3.7: - version "12.5.0" - resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz" - integrity sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g== - dependencies: - cli-truncate "^3.1.0" - colorette "^2.0.16" - commander "^9.3.0" - debug "^4.3.4" - execa "^5.1.1" - lilconfig "2.0.5" - listr2 "^4.0.5" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-inspect "^1.12.2" - pidtree "^0.5.0" - string-argv "^0.3.1" - supports-color "^9.2.2" - yaml "^1.10.2" - -listr2@^4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz" - integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.16" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.5" - through "^2.3.8" - wrap-ansi "^7.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-json-file@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz" - integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== - dependencies: - graceful-fs "^4.1.15" - parse-json "^5.0.0" - strip-bom "^4.0.0" - type-fest "^0.6.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - 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" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" - integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -log-symbols@4.1.0, log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -loupe@^2.3.1: - version "2.3.4" - resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" - integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== - dependencies: - get-func-name "^2.0.0" - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.14.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" - integrity sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ== - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - -ltgt@~2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz" - integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: - version "10.2.1" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" - integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^16.1.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-fetch "^2.0.3" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^9.0.0" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" - integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - -markdown-table@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz" - integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== - -match-all@^1.2.6: - version "1.2.6" - resolved "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz" - integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== - -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memdown@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz" - integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== - dependencies: - abstract-leveldown "~6.2.1" - functional-red-black-tree "~1.0.1" - immediate "~3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.2.0" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -meow@^8.0.0: - version "8.1.2" - resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + "import-local" "^3.0.2" + "npmlog" "^6.0.2" + "nx" ">=14.6.1 < 16" + "typescript" "^3 || ^4" + +"level-codec@~7.0.0": + "integrity" "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" + "resolved" "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz" + "version" "7.0.1" + +"level-concat-iterator@^3.0.0": + "integrity" "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==" + "resolved" "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "catering" "^2.1.0" + +"level-errors@^1.0.3": + "integrity" "sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==" + "resolved" "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "errno" "~0.1.1" + +"level-errors@~1.0.3": + "integrity" "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==" + "resolved" "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "errno" "~0.1.1" + +"level-iterator-stream@~1.3.0": + "integrity" "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==" + "resolved" "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "inherits" "^2.0.1" + "level-errors" "^1.0.3" + "readable-stream" "^1.0.33" + "xtend" "^4.0.0" + +"level-supports@^2.0.1": + "integrity" "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==" + "resolved" "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz" + "version" "2.1.0" + +"level-supports@^4.0.0": + "integrity" "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==" + "resolved" "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz" + "version" "4.0.1" + +"level-transcoder@^1.0.1": + "integrity" "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==" + "resolved" "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "buffer" "^6.0.3" + "module-error" "^1.0.1" + +"level-ws@0.0.0": + "integrity" "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==" + "resolved" "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz" + "version" "0.0.0" + dependencies: + "readable-stream" "~1.0.15" + "xtend" "~2.1.1" + +"level@^8.0.0": + "integrity" "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==" + "resolved" "https://registry.npmjs.org/level/-/level-8.0.0.tgz" + "version" "8.0.0" + dependencies: + "browser-level" "^1.0.1" + "classic-level" "^1.2.0" + +"leveldown@6.1.0": + "integrity" "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==" + "resolved" "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "abstract-leveldown" "^7.2.0" + "napi-macros" "~2.0.0" + "node-gyp-build" "^4.3.0" + +"levelup@^1.2.1": + "integrity" "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==" + "resolved" "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz" + "version" "1.3.9" + dependencies: + "deferred-leveldown" "~1.2.1" + "level-codec" "~7.0.0" + "level-errors" "~1.0.3" + "level-iterator-stream" "~1.3.0" + "prr" "~1.0.1" + "semver" "~5.4.1" + "xtend" "~4.0.0" + +"leven@^3.1.0": + "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + "version" "3.1.0" + +"levn@^0.4.1": + "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "prelude-ls" "^1.2.1" + "type-check" "~0.4.0" + +"libnpmaccess@^6.0.3": + "integrity" "sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag==" + "resolved" "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.4.tgz" + "version" "6.0.4" + dependencies: + "aproba" "^2.0.0" + "minipass" "^3.1.1" + "npm-package-arg" "^9.0.1" + "npm-registry-fetch" "^13.0.0" + +"libnpmpublish@^6.0.4": + "integrity" "sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg==" + "resolved" "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.5.tgz" + "version" "6.0.5" + dependencies: + "normalize-package-data" "^4.0.0" + "npm-package-arg" "^9.0.1" + "npm-registry-fetch" "^13.0.0" + "semver" "^7.3.7" + "ssri" "^9.0.0" + +"lilconfig@2.0.5": + "integrity" "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==" + "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz" + "version" "2.0.5" + +"lines-and-columns@^1.1.6": + "integrity" "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + "version" "1.2.4" + +"lint-staged@^12.3.7": + "integrity" "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==" + "resolved" "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz" + "version" "12.5.0" + dependencies: + "cli-truncate" "^3.1.0" + "colorette" "^2.0.16" + "commander" "^9.3.0" + "debug" "^4.3.4" + "execa" "^5.1.1" + "lilconfig" "2.0.5" + "listr2" "^4.0.5" + "micromatch" "^4.0.5" + "normalize-path" "^3.0.0" + "object-inspect" "^1.12.2" + "pidtree" "^0.5.0" + "string-argv" "^0.3.1" + "supports-color" "^9.2.2" + "yaml" "^1.10.2" + +"listr2@^4.0.5": + "integrity" "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==" + "resolved" "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "cli-truncate" "^2.1.0" + "colorette" "^2.0.16" + "log-update" "^4.0.0" + "p-map" "^4.0.0" + "rfdc" "^1.3.0" + "rxjs" "^7.5.5" + "through" "^2.3.8" + "wrap-ansi" "^7.0.0" + +"load-json-file@^4.0.0": + "integrity" "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==" + "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "graceful-fs" "^4.1.2" + "parse-json" "^4.0.0" + "pify" "^3.0.0" + "strip-bom" "^3.0.0" + +"load-json-file@^6.2.0": + "integrity" "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==" + "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "graceful-fs" "^4.1.15" + "parse-json" "^5.0.0" + "strip-bom" "^4.0.0" + "type-fest" "^0.6.0" + +"locate-path@^2.0.0": + "integrity" "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "p-locate" "^2.0.0" + "path-exists" "^3.0.0" + +"locate-path@^3.0.0": + "integrity" "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "p-locate" "^3.0.0" + "path-exists" "^3.0.0" + +"locate-path@^5.0.0": + "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-locate" "^4.1.0" + +"locate-path@^6.0.0": + "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "p-locate" "^5.0.0" + +"lodash.camelcase@^4.3.0": + "integrity" "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + "resolved" "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" + "version" "4.3.0" + +"lodash.debounce@^4.0.8": + "integrity" "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + "version" "4.0.8" + +"lodash.ismatch@^4.4.0": + "integrity" "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==" + "resolved" "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" + "version" "4.4.0" + +"lodash.merge@^4.6.2": + "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + "version" "4.6.2" + +"lodash@^4.17.11", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.19", "lodash@^4.17.21": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"log-symbols@^4.1.0", "log-symbols@4.1.0": + "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "chalk" "^4.1.0" + "is-unicode-supported" "^0.1.0" + +"log-symbols@3.0.0": + "integrity" "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "chalk" "^2.4.2" + +"log-update@^4.0.0": + "integrity" "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==" + "resolved" "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-escapes" "^4.3.0" + "cli-cursor" "^3.1.0" + "slice-ansi" "^4.0.0" + "wrap-ansi" "^6.2.0" + +"loglevel@^1.8.0": + "integrity" "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==" + "resolved" "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz" + "version" "1.8.0" + +"loupe@^2.3.1": + "integrity" "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==" + "resolved" "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" + "version" "2.3.4" + dependencies: + "get-func-name" "^2.0.0" + +"lowercase-keys@^1.0.0", "lowercase-keys@^1.0.1": + "integrity" "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" + "version" "1.0.1" + +"lowercase-keys@^2.0.0": + "integrity" "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + "version" "2.0.0" + +"lowercase-keys@^3.0.0": + "integrity" "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==" + "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" + "version" "3.0.0" + +"lru_map@^0.3.3": + "integrity" "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + "resolved" "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" + "version" "0.3.3" + +"lru-cache@^5.1.1": + "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "yallist" "^3.0.2" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"lru-cache@^7.4.4": + "integrity" "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" + "version" "7.14.0" + +"lru-cache@^7.5.1": + "integrity" "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" + "version" "7.14.0" + +"lru-cache@^7.7.1": + "integrity" "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" + "version" "7.14.0" + +"ltgt@~2.2.0": + "integrity" "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" + "resolved" "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz" + "version" "2.2.1" + +"make-dir@^2.1.0": + "integrity" "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "pify" "^4.0.1" + "semver" "^5.6.0" + +"make-dir@^3.0.0": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^6.0.0" + +"make-error@^1.1.1": + "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + "version" "1.3.6" + +"make-fetch-happen@^10.0.3", "make-fetch-happen@^10.0.6": + "integrity" "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==" + "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" + "version" "10.2.1" + dependencies: + "agentkeepalive" "^4.2.1" + "cacache" "^16.1.0" + "http-cache-semantics" "^4.1.0" + "http-proxy-agent" "^5.0.0" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^7.7.1" + "minipass" "^3.1.6" + "minipass-collect" "^1.0.2" + "minipass-fetch" "^2.0.3" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.3" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^7.0.0" + "ssri" "^9.0.0" + +"makeerror@1.0.12": + "integrity" "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==" + "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + "version" "1.0.12" + dependencies: + "tmpl" "1.0.5" + +"map-age-cleaner@^0.1.1": + "integrity" "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==" + "resolved" "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" + "version" "0.1.3" + dependencies: + "p-defer" "^1.0.0" + +"map-obj@^1.0.0": + "integrity" "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" + "resolved" "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + "version" "1.0.1" + +"map-obj@^4.0.0": + "integrity" "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" + "resolved" "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" + "version" "4.3.0" + +"markdown-table@^1.1.3": + "integrity" "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==" + "resolved" "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz" + "version" "1.1.3" + +"match-all@^1.2.6": + "integrity" "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==" + "resolved" "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz" + "version" "1.2.6" + +"mcl-wasm@^0.7.1": + "integrity" "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==" + "resolved" "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz" + "version" "0.7.9" + +"md5.js@^1.3.4": + "integrity" "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==" + "resolved" "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" + "version" "1.3.5" + dependencies: + "hash-base" "^3.0.0" + "inherits" "^2.0.1" + "safe-buffer" "^5.1.2" + +"media-typer@0.3.0": + "integrity" "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + "version" "0.3.0" + +"mem@^4.0.0": + "integrity" "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==" + "resolved" "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "map-age-cleaner" "^0.1.1" + "mimic-fn" "^2.0.0" + "p-is-promise" "^2.0.0" + +"memdown@^1.0.0": + "integrity" "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==" + "resolved" "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "abstract-leveldown" "~2.7.1" + "functional-red-black-tree" "^1.0.1" + "immediate" "^3.2.3" + "inherits" "~2.0.1" + "ltgt" "~2.2.0" + "safe-buffer" "~5.1.1" + +"memory-level@^1.0.0": + "integrity" "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==" + "resolved" "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "abstract-level" "^1.0.0" + "functional-red-black-tree" "^1.0.1" + "module-error" "^1.0.1" + +"memorystream@^0.3.1": + "integrity" "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==" + "resolved" "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" + "version" "0.3.1" + +"meow@^8.0.0": + "integrity" "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==" + "resolved" "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" + "version" "8.1.2" dependencies: "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -merkle-patricia-tree@^4.2.4: - version "4.2.4" - resolved "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz" - integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== - dependencies: - "@types/levelup" "^4.3.0" - ethereumjs-util "^7.1.4" - level-mem "^5.0.1" - level-ws "^2.0.0" - readable-stream "^3.6.0" - semaphore-async-await "^1.5.1" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.0.0, mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" - 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" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@3.0.5, minimatch@^3.0.4: - version "3.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" - integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== - dependencies: - brace-expansion "^1.1.7" - -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + "camelcase-keys" "^6.2.2" + "decamelize-keys" "^1.1.0" + "hard-rejection" "^2.1.0" + "minimist-options" "4.1.0" + "normalize-package-data" "^3.0.0" + "read-pkg-up" "^7.0.1" + "redent" "^3.0.0" + "trim-newlines" "^3.0.0" + "type-fest" "^0.18.0" + "yargs-parser" "^20.2.3" + +"merge-descriptors@1.0.1": + "integrity" "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + "version" "1.0.1" + +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"merge2@^1.3.0", "merge2@^1.4.1": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"merkle-patricia-tree@^2.1.2", "merkle-patricia-tree@^2.3.2": + "integrity" "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==" + "resolved" "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz" + "version" "2.3.2" + dependencies: + "async" "^1.4.2" + "ethereumjs-util" "^5.0.0" + "level-ws" "0.0.0" + "levelup" "^1.2.1" + "memdown" "^1.0.0" + "readable-stream" "^2.0.0" + "rlp" "^2.0.0" + "semaphore" ">=1.0.1" + +"methods@~1.1.2": + "integrity" "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + "version" "1.1.2" + +"micromatch@^4.0.4", "micromatch@^4.0.5": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "braces" "^3.0.2" + "picomatch" "^2.3.1" + +"miller-rabin@^4.0.0": + "integrity" "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==" + "resolved" "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "bn.js" "^4.0.0" + "brorand" "^1.0.1" + +"mime-db@1.52.0": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" + +"mime-types@^2.1.12", "mime-types@^2.1.16", "mime-types@~2.1.19", "mime-types@~2.1.24", "mime-types@~2.1.34": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" + dependencies: + "mime-db" "1.52.0" + +"mime@1.6.0": + "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + "version" "1.6.0" + +"mimic-fn@^2.0.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"mimic-response@^1.0.0", "mimic-response@^1.0.1": + "integrity" "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + "version" "1.0.1" + +"mimic-response@^3.1.0": + "integrity" "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + "version" "3.1.0" + +"min-document@^2.19.0": + "integrity" "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==" + "resolved" "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" + "version" "2.19.0" + dependencies: + "dom-walk" "^0.1.0" + +"min-indent@^1.0.0": + "integrity" "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" + "resolved" "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + "version" "1.0.1" + +"minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1": + "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + "version" "1.0.1" + +"minimalistic-crypto-utils@^1.0.0", "minimalistic-crypto-utils@^1.0.1": + "integrity" "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "resolved" "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + "version" "1.0.1" + +"minimatch@^3.0.4", "minimatch@^3.1.1", "minimatch@^3.1.2": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@^5.0.1": + "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "brace-expansion" "^2.0.1" + +"minimatch@3.0.4": + "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@3.0.5": + "integrity" "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" + "version" "3.0.5" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@4.2.1": + "integrity" "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz" + "version" "4.2.1" dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== - dependencies: - brace-expansion "^2.0.1" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" - 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.5, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + "brace-expansion" "^1.1.7" + +"minimatch@5.0.1": + "integrity" "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "brace-expansion" "^2.0.1" + +"minimist-options@4.1.0": + "integrity" "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==" + "resolved" "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "arrify" "^1.0.1" + "is-plain-obj" "^1.1.0" + "kind-of" "^6.0.3" -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== +"minimist@^1.2.0", "minimist@^1.2.5", "minimist@^1.2.6": + "integrity" "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + "version" "1.2.6" + +"minipass-collect@^1.0.2": + "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" + "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + "version" "1.0.2" dependencies: - minipass "^3.0.0" + "minipass" "^3.0.0" -minipass-fetch@^2.0.3: - version "2.1.2" - resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" - integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== +"minipass-fetch@^2.0.3": + "integrity" "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==" + "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" + "version" "2.1.2" dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" + "minipass" "^3.1.6" + "minipass-sized" "^1.0.3" + "minizlib" "^2.1.2" optionalDependencies: - encoding "^0.1.13" + "encoding" "^0.1.13" -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== +"minipass-flush@^1.0.5": + "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" + "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + "version" "1.0.5" dependencies: - minipass "^3.0.0" + "minipass" "^3.0.0" -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== +"minipass-json-stream@^1.0.1": + "integrity" "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==" + "resolved" "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" + "version" "1.0.1" dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" + "jsonparse" "^1.3.1" + "minipass" "^3.0.0" -minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== +"minipass-pipeline@^1.2.4": + "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" + "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + "version" "1.2.4" dependencies: - minipass "^3.0.0" + "minipass" "^3.0.0" -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== +"minipass-sized@^1.0.3": + "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" + "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + "version" "1.0.3" dependencies: - minipass "^3.0.0" + "minipass" "^3.0.0" -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== +"minipass@^2.6.0", "minipass@^2.9.0": + "integrity" "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" + "version" "2.9.0" dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" + "safe-buffer" "^5.1.2" + "yallist" "^3.0.0" -minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: - version "3.3.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== +"minipass@^3.0.0", "minipass@^3.1.1", "minipass@^3.1.6": + "integrity" "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + "version" "3.3.4" dependencies: - yallist "^4.0.0" + "yallist" "^4.0.0" -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== +"minizlib@^1.3.3": + "integrity" "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" + "version" "1.3.3" dependencies: - minipass "^2.9.0" + "minipass" "^2.9.0" -minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== +"minizlib@^2.1.1", "minizlib@^2.1.2": + "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + "version" "2.1.2" dependencies: - minipass "^3.0.0" - yallist "^4.0.0" + "minipass" "^3.0.0" + "yallist" "^4.0.0" -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== +"mkdirp-infer-owner@^2.0.0": + "integrity" "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==" + "resolved" "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz" + "version" "2.0.0" dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" + "chownr" "^2.0.0" + "infer-owner" "^1.0.4" + "mkdirp" "^1.0.3" -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz" - integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== +"mkdirp-promise@^5.0.1": + "integrity" "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==" + "resolved" "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz" + "version" "5.0.1" dependencies: - mkdirp "*" + "mkdirp" "*" -mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +"mkdirp@*", "mkdirp@^1.0.3", "mkdirp@^1.0.4": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" -mkdirp@0.5.5: - version "0.5.5" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +"mkdirp@^0.5.1": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" dependencies: - minimist "^1.2.5" + "minimist" "^1.2.6" -mkdirp@^0.5.1, mkdirp@^0.5.5: - version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== +"mkdirp@^0.5.5": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" dependencies: - minimist "^1.2.6" + "minimist" "^1.2.6" -mnemonist@^0.38.0: - version "0.38.5" - resolved "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz" - integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== +"mkdirp@0.5.5": + "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" + "version" "0.5.5" dependencies: - obliterator "^2.0.0" + "minimist" "^1.2.5" -mocha@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz" - integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== +"mnemonist@^0.38.0": + "integrity" "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==" + "resolved" "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz" + "version" "0.38.5" + dependencies: + "obliterator" "^2.0.0" + +"mocha@^10.0.0": + "integrity" "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==" + "resolved" "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz" + "version" "10.0.0" dependencies: "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -mocha@^7.1.1: - version "7.2.0" - resolved "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz" - integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - -mocha@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz" - integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== + "ansi-colors" "4.1.1" + "browser-stdout" "1.3.1" + "chokidar" "3.5.3" + "debug" "4.3.4" + "diff" "5.0.0" + "escape-string-regexp" "4.0.0" + "find-up" "5.0.0" + "glob" "7.2.0" + "he" "1.2.0" + "js-yaml" "4.1.0" + "log-symbols" "4.1.0" + "minimatch" "5.0.1" + "ms" "2.1.3" + "nanoid" "3.3.3" + "serialize-javascript" "6.0.0" + "strip-json-comments" "3.1.1" + "supports-color" "8.1.1" + "workerpool" "6.2.1" + "yargs" "16.2.0" + "yargs-parser" "20.2.4" + "yargs-unparser" "2.0.0" + +"mocha@^7.1.1": + "integrity" "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==" + "resolved" "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "ansi-colors" "3.2.3" + "browser-stdout" "1.3.1" + "chokidar" "3.3.0" + "debug" "3.2.6" + "diff" "3.5.0" + "escape-string-regexp" "1.0.5" + "find-up" "3.0.0" + "glob" "7.1.3" + "growl" "1.10.5" + "he" "1.2.0" + "js-yaml" "3.13.1" + "log-symbols" "3.0.0" + "minimatch" "3.0.4" + "mkdirp" "0.5.5" + "ms" "2.1.1" + "node-environment-flags" "1.0.6" + "object.assign" "4.1.0" + "strip-json-comments" "2.0.1" + "supports-color" "6.0.0" + "which" "1.3.1" + "wide-align" "1.1.3" + "yargs" "13.3.2" + "yargs-parser" "13.1.2" + "yargs-unparser" "1.6.0" + +"mocha@^9.2.2": + "integrity" "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==" + "resolved" "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz" + "version" "9.2.2" dependencies: "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.3" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - growl "1.10.5" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "4.2.1" - ms "2.1.3" - nanoid "3.3.1" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -mock-fs@^4.1.0: - version "4.14.0" - resolved "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz" - integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2, ms@^2.0.0, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multibase@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz" - integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multibase@~0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz" - integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multicodec@^0.5.5: - version "0.5.7" - resolved "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz" - integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== - dependencies: - varint "^5.0.0" - -multicodec@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz" - integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== - dependencies: - buffer "^5.6.0" - varint "^5.0.0" - -multihashes@^0.4.15, multihashes@~0.4.15: - version "0.4.21" - resolved "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz" - integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== - dependencies: - buffer "^5.5.0" - multibase "^0.7.0" - varint "^5.0.0" - -multimatch@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" - integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== + "ansi-colors" "4.1.1" + "browser-stdout" "1.3.1" + "chokidar" "3.5.3" + "debug" "4.3.3" + "diff" "5.0.0" + "escape-string-regexp" "4.0.0" + "find-up" "5.0.0" + "glob" "7.2.0" + "growl" "1.10.5" + "he" "1.2.0" + "js-yaml" "4.1.0" + "log-symbols" "4.1.0" + "minimatch" "4.2.1" + "ms" "2.1.3" + "nanoid" "3.3.1" + "serialize-javascript" "6.0.0" + "strip-json-comments" "3.1.1" + "supports-color" "8.1.1" + "which" "2.0.2" + "workerpool" "6.2.0" + "yargs" "16.2.0" + "yargs-parser" "20.2.4" + "yargs-unparser" "2.0.0" + +"mock-fs@^4.1.0": + "integrity" "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" + "resolved" "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz" + "version" "4.14.0" + +"modify-values@^1.0.0": + "integrity" "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==" + "resolved" "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" + "version" "1.0.1" + +"module-error@^1.0.1", "module-error@^1.0.2": + "integrity" "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==" + "resolved" "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz" + "version" "1.0.2" + +"ms@^2.0.0", "ms@2.1.3": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" + +"ms@^2.1.1": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" + +"ms@2.0.0": + "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "version" "2.0.0" + +"ms@2.1.1": + "integrity" "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" + "version" "2.1.1" + +"ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"multibase@^0.7.0": + "integrity" "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==" + "resolved" "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz" + "version" "0.7.0" + dependencies: + "base-x" "^3.0.8" + "buffer" "^5.5.0" + +"multibase@~0.6.0": + "integrity" "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==" + "resolved" "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz" + "version" "0.6.1" + dependencies: + "base-x" "^3.0.8" + "buffer" "^5.5.0" + +"multicodec@^0.5.5": + "integrity" "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==" + "resolved" "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz" + "version" "0.5.7" + dependencies: + "varint" "^5.0.0" + +"multicodec@^1.0.0": + "integrity" "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==" + "resolved" "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "buffer" "^5.6.0" + "varint" "^5.0.0" + +"multihashes@^0.4.15", "multihashes@~0.4.15": + "integrity" "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==" + "resolved" "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz" + "version" "0.4.21" + dependencies: + "buffer" "^5.5.0" + "multibase" "^0.7.0" + "varint" "^5.0.0" + +"multimatch@^5.0.0": + "integrity" "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==" + "resolved" "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" + "version" "5.0.0" dependencies: "@types/minimatch" "^3.0.3" - array-differ "^3.0.0" - array-union "^2.1.0" - arrify "^2.0.1" - minimatch "^3.0.4" - -murmur-128@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz" - integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== - dependencies: - encode-utf8 "^1.0.2" - fmix "^0.1.0" - imul "^1.0.0" - -mute-stream@0.0.8, mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nano-json-stream-parser@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz" - integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== - -nanoid@3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== - -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3, negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.0: - version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -nock@^13.2.9: - version "13.2.9" - resolved "https://registry.npmjs.org/nock/-/nock-13.2.9.tgz" - integrity sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA== - dependencies: - debug "^4.1.0" - json-stringify-safe "^5.0.1" - lodash "^4.17.21" - propagate "^2.0.0" - -node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - -node-addon-api@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== - -node-environment-flags@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz" - integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== - -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== - -node-gyp@^9.0.0, node-gyp@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz" - integrity sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== - -nofilter@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz" - integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - 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-package-data@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" - integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== - dependencies: - hosted-git-info "^5.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -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" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-bundled@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-bundled@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" - integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== - dependencies: - npm-normalize-package-bin "^2.0.0" - -npm-install-checks@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" - integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-normalize-package-bin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" - integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== - -npm-package-arg@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" - integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== - dependencies: - hosted-git-info "^3.0.6" - semver "^7.0.0" - validate-npm-package-name "^3.0.0" - -npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: - version "9.1.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz#fc8acecb00235f42270dda446f36926ddd9ac2bc" - integrity sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg== - dependencies: - hosted-git-info "^5.0.0" - proc-log "^2.0.1" - semver "^7.3.5" - validate-npm-package-name "^4.0.0" - -npm-packlist@^5.1.0, npm-packlist@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" - integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== - dependencies: - glob "^8.0.1" - ignore-walk "^5.0.1" - npm-bundled "^2.0.0" - npm-normalize-package-bin "^2.0.0" - -npm-pick-manifest@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz#1d372b4e7ea7c6712316c0e99388a73ed3496e84" - integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== - dependencies: - npm-install-checks "^5.0.0" - npm-normalize-package-bin "^2.0.0" - npm-package-arg "^9.0.0" - semver "^7.3.5" - -npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.0: - version "13.3.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" - integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== - dependencies: - make-fetch-happen "^10.0.6" - minipass "^3.1.6" - minipass-fetch "^2.0.3" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^9.0.1" - proc-log "^2.0.0" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^6.0.0, npmlog@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.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" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - -nx@14.8.2, "nx@>=14.6.1 < 16", nx@^14.8.2: - version "14.8.2" - resolved "https://registry.yarnpkg.com/nx/-/nx-14.8.2.tgz#b285a09368418c4c0fa55c2d5ee411fe1fd3706b" - integrity sha512-pPijBoeybsIlCD8FMH8WTns+pcIL+0ZOh/+otUX2LfVsi+ppH33GUxO9QVLPrLcyGaoHhwil4hYBxPIQ7Z1r2g== + "array-differ" "^3.0.0" + "array-union" "^2.1.0" + "arrify" "^2.0.1" + "minimatch" "^3.0.4" + +"murmur-128@^0.2.1": + "integrity" "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==" + "resolved" "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz" + "version" "0.2.1" + dependencies: + "encode-utf8" "^1.0.2" + "fmix" "^0.1.0" + "imul" "^1.0.0" + +"mute-stream@~0.0.4", "mute-stream@0.0.8": + "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + "version" "0.0.8" + +"nano-json-stream-parser@^0.1.2": + "integrity" "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" + "resolved" "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz" + "version" "0.1.2" + +"nanoid@3.3.1": + "integrity" "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" + "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" + "version" "3.3.1" + +"nanoid@3.3.3": + "integrity" "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" + "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" + "version" "3.3.3" + +"napi-macros@~2.0.0": + "integrity" "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" + "resolved" "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz" + "version" "2.0.0" + +"natural-compare@^1.4.0": + "integrity" "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"negotiator@^0.6.3", "negotiator@0.6.3": + "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + "version" "0.6.3" + +"neo-async@^2.6.0": + "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + "version" "2.6.2" + +"next-tick@^1.1.0": + "integrity" "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + "resolved" "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" + "version" "1.1.0" + +"nice-try@^1.0.4": + "integrity" "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "resolved" "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + "version" "1.0.5" + +"nock@^13.2.9": + "integrity" "sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA==" + "resolved" "https://registry.npmjs.org/nock/-/nock-13.2.9.tgz" + "version" "13.2.9" + dependencies: + "debug" "^4.1.0" + "json-stringify-safe" "^5.0.1" + "lodash" "^4.17.21" + "propagate" "^2.0.0" + +"node-addon-api@^2.0.0": + "integrity" "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" + "version" "2.0.2" + +"node-addon-api@^3.2.1": + "integrity" "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" + "version" "3.2.1" + +"node-environment-flags@1.0.6": + "integrity" "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==" + "resolved" "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "object.getownpropertydescriptors" "^2.0.3" + "semver" "^5.7.0" + +"node-fetch@^2.6.0", "node-fetch@^2.6.1", "node-fetch@^2.6.6", "node-fetch@^2.6.7", "node-fetch@2.6.7": + "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + "version" "2.6.7" + dependencies: + "whatwg-url" "^5.0.0" + +"node-gyp-build@^4.2.0", "node-gyp-build@^4.3.0": + "integrity" "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" + "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz" + "version" "4.5.0" + +"node-gyp-build@4.4.0": + "integrity" "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" + "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz" + "version" "4.4.0" + +"node-gyp@^9.0.0", "node-gyp@^9.1.0": + "integrity" "sha512-/+/YxGfIJOh/fnMsr4Ep0v6oOIjnO1BgLd2dcDspBX1spTkQU7xSIox5RdRE/2/Uq3ZwK8Z5swRIbMUmPlslmg==" + "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-9.2.0.tgz" + "version" "9.2.0" + dependencies: + "env-paths" "^2.2.0" + "glob" "^7.1.4" + "graceful-fs" "^4.2.6" + "make-fetch-happen" "^10.0.3" + "nopt" "^6.0.0" + "npmlog" "^6.0.0" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.2" + "which" "^2.0.2" + +"node-int64@^0.4.0": + "integrity" "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + "version" "0.4.0" + +"node-releases@^2.0.6": + "integrity" "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" + "version" "2.0.6" + +"nofilter@^1.0.4": + "integrity" "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==" + "resolved" "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz" + "version" "1.0.4" + +"nopt@^5.0.0": + "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "abbrev" "1" + +"nopt@^6.0.0": + "integrity" "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "abbrev" "^1.0.0" + +"normalize-package-data@^2.3.2": + "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "hosted-git-info" "^2.1.4" + "resolve" "^1.10.0" + "semver" "2 || 3 || 4 || 5" + "validate-npm-package-license" "^3.0.1" + +"normalize-package-data@^2.5.0": + "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "hosted-git-info" "^2.1.4" + "resolve" "^1.10.0" + "semver" "2 || 3 || 4 || 5" + "validate-npm-package-license" "^3.0.1" + +"normalize-package-data@^3.0.0": + "integrity" "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "hosted-git-info" "^4.0.1" + "is-core-module" "^2.5.0" + "semver" "^7.3.4" + "validate-npm-package-license" "^3.0.1" + +"normalize-package-data@^4.0.0": + "integrity" "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "hosted-git-info" "^5.0.0" + "is-core-module" "^2.8.1" + "semver" "^7.3.5" + "validate-npm-package-license" "^3.0.4" + +"normalize-path@^3.0.0", "normalize-path@~3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"normalize-url@^4.1.0": + "integrity" "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" + "version" "4.5.1" + +"normalize-url@^6.0.1": + "integrity" "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + "version" "6.1.0" + +"npm-bundled@^1.1.1": + "integrity" "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==" + "resolved" "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "npm-normalize-package-bin" "^1.0.1" + +"npm-bundled@^2.0.0": + "integrity" "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==" + "resolved" "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "npm-normalize-package-bin" "^2.0.0" + +"npm-install-checks@^5.0.0": + "integrity" "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==" + "resolved" "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "semver" "^7.1.1" + +"npm-normalize-package-bin@^1.0.1": + "integrity" "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + "resolved" "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" + "version" "1.0.1" + +"npm-normalize-package-bin@^2.0.0": + "integrity" "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==" + "resolved" "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz" + "version" "2.0.0" + +"npm-package-arg@^9.0.0": + "integrity" "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==" + "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz" + "version" "9.1.2" + dependencies: + "hosted-git-info" "^5.0.0" + "proc-log" "^2.0.1" + "semver" "^7.3.5" + "validate-npm-package-name" "^4.0.0" + +"npm-package-arg@^9.0.1": + "integrity" "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==" + "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz" + "version" "9.1.2" + dependencies: + "hosted-git-info" "^5.0.0" + "proc-log" "^2.0.1" + "semver" "^7.3.5" + "validate-npm-package-name" "^4.0.0" + +"npm-package-arg@8.1.1": + "integrity" "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==" + "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "hosted-git-info" "^3.0.6" + "semver" "^7.0.0" + "validate-npm-package-name" "^3.0.0" + +"npm-packlist@^5.1.0", "npm-packlist@^5.1.1": + "integrity" "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==" + "resolved" "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz" + "version" "5.1.3" + dependencies: + "glob" "^8.0.1" + "ignore-walk" "^5.0.1" + "npm-bundled" "^2.0.0" + "npm-normalize-package-bin" "^2.0.0" + +"npm-pick-manifest@^7.0.0": + "integrity" "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==" + "resolved" "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz" + "version" "7.0.2" + dependencies: + "npm-install-checks" "^5.0.0" + "npm-normalize-package-bin" "^2.0.0" + "npm-package-arg" "^9.0.0" + "semver" "^7.3.5" + +"npm-registry-fetch@^13.0.0", "npm-registry-fetch@^13.0.1", "npm-registry-fetch@^13.3.0": + "integrity" "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==" + "resolved" "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz" + "version" "13.3.1" + dependencies: + "make-fetch-happen" "^10.0.6" + "minipass" "^3.1.6" + "minipass-fetch" "^2.0.3" + "minipass-json-stream" "^1.0.1" + "minizlib" "^2.1.2" + "npm-package-arg" "^9.0.1" + "proc-log" "^2.0.0" + +"npm-run-path@^2.0.0": + "integrity" "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "path-key" "^2.0.0" + +"npm-run-path@^4.0.1": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "path-key" "^3.0.0" + +"npmlog@^6.0.0", "npmlog@^6.0.2": + "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "are-we-there-yet" "^3.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^4.0.3" + "set-blocking" "^2.0.0" + +"number-to-bn@1.7.0": + "integrity" "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==" + "resolved" "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "bn.js" "4.11.6" + "strip-hex-prefix" "1.0.0" + +"nx@^14.8.2", "nx@>=14.6.1 < 16", "nx@14.8.2": + "integrity" "sha512-pPijBoeybsIlCD8FMH8WTns+pcIL+0ZOh/+otUX2LfVsi+ppH33GUxO9QVLPrLcyGaoHhwil4hYBxPIQ7Z1r2g==" + "resolved" "https://registry.npmjs.org/nx/-/nx-14.8.2.tgz" + "version" "14.8.2" dependencies: "@nrwl/cli" "14.8.2" "@nrwl/tao" "14.8.2" @@ -8526,1124 +9623,1252 @@ nx@14.8.2, "nx@>=14.6.1 < 16", nx@^14.8.2: "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "^3.0.0-rc.18" "@zkochan/js-yaml" "0.0.6" - chalk "4.1.0" - chokidar "^3.5.1" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - cliui "^7.0.2" - dotenv "~10.0.0" - enquirer "~2.3.6" - fast-glob "3.2.7" - figures "3.2.0" - flat "^5.0.2" - fs-extra "^10.1.0" - glob "7.1.4" - ignore "^5.0.4" - js-yaml "4.1.0" - jsonc-parser "3.2.0" - minimatch "3.0.5" - npm-run-path "^4.0.1" - open "^8.4.0" - semver "7.3.4" - string-width "^4.2.3" - strong-log-transformer "^2.1.0" - tar-stream "~2.2.0" - tmp "~0.2.1" - tsconfig-paths "^3.9.0" - tslib "^2.3.0" - v8-compile-cache "2.3.0" - yargs "^17.4.0" - yargs-parser "21.0.1" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-keys@^1.0.11, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" - 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.getownpropertydescriptors@^2.0.3: - version "2.1.4" - resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz" - integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== - dependencies: - array.prototype.reduce "^1.0.4" - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.1" - -obliterator@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" - integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== - -oboe@2.1.5: - version "2.1.5" - resolved "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz" - integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== - dependencies: - http-https "^1.0.0" - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.4.0: - version "8.4.0" - resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" - integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - 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" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map-series@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz" - integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + "chalk" "4.1.0" + "chokidar" "^3.5.1" + "cli-cursor" "3.1.0" + "cli-spinners" "2.6.1" + "cliui" "^7.0.2" + "dotenv" "~10.0.0" + "enquirer" "~2.3.6" + "fast-glob" "3.2.7" + "figures" "3.2.0" + "flat" "^5.0.2" + "fs-extra" "^10.1.0" + "glob" "7.1.4" + "ignore" "^5.0.4" + "js-yaml" "4.1.0" + "jsonc-parser" "3.2.0" + "minimatch" "3.0.5" + "npm-run-path" "^4.0.1" + "open" "^8.4.0" + "semver" "7.3.4" + "string-width" "^4.2.3" + "strong-log-transformer" "^2.1.0" + "tar-stream" "~2.2.0" + "tmp" "~0.2.1" + "tsconfig-paths" "^3.9.0" + "tslib" "^2.3.0" + "v8-compile-cache" "2.3.0" + "yargs" "^17.4.0" + "yargs-parser" "21.0.1" + +"oauth-sign@~0.9.0": + "integrity" "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "resolved" "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" + "version" "0.9.0" + +"object-assign@^4", "object-assign@^4.1.0", "object-assign@^4.1.1": + "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"object-inspect@^1.12.2", "object-inspect@^1.9.0": + "integrity" "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + "version" "1.12.2" + +"object-keys@^1.0.11", "object-keys@^1.1.1": + "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + "version" "1.1.1" + +"object-keys@~0.4.0": + "integrity" "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" + "version" "0.4.0" + +"object.assign@^4.1.4": + "integrity" "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + "version" "4.1.4" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "has-symbols" "^1.0.3" + "object-keys" "^1.1.1" + +"object.assign@4.1.0": + "integrity" "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "define-properties" "^1.1.2" + "function-bind" "^1.1.1" + "has-symbols" "^1.0.0" + "object-keys" "^1.0.11" + +"object.getownpropertydescriptors@^2.0.3": + "integrity" "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==" + "resolved" "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz" + "version" "2.1.4" + dependencies: + "array.prototype.reduce" "^1.0.4" + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.20.1" + +"obliterator@^2.0.0": + "integrity" "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" + "resolved" "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" + "version" "2.0.4" + +"oboe@2.1.5": + "integrity" "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==" + "resolved" "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz" + "version" "2.1.5" + dependencies: + "http-https" "^1.0.0" + +"on-finished@2.4.1": + "integrity" "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==" + "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + "version" "2.4.1" + dependencies: + "ee-first" "1.1.1" + +"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": + "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"onetime@^5.1.0", "onetime@^5.1.2": + "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "mimic-fn" "^2.1.0" + +"open@^8.4.0": + "integrity" "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==" + "resolved" "https://registry.npmjs.org/open/-/open-8.4.0.tgz" + "version" "8.4.0" + dependencies: + "define-lazy-prop" "^2.0.0" + "is-docker" "^2.1.1" + "is-wsl" "^2.2.0" + +"optionator@^0.9.1": + "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + "version" "0.9.1" + dependencies: + "deep-is" "^0.1.3" + "fast-levenshtein" "^2.0.6" + "levn" "^0.4.1" + "prelude-ls" "^1.2.1" + "type-check" "^0.4.0" + "word-wrap" "^1.2.3" + +"ora@^5.4.1": + "integrity" "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==" + "resolved" "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + "version" "5.4.1" + dependencies: + "bl" "^4.1.0" + "chalk" "^4.1.0" + "cli-cursor" "^3.1.0" + "cli-spinners" "^2.5.0" + "is-interactive" "^1.0.0" + "is-unicode-supported" "^0.1.0" + "log-symbols" "^4.1.0" + "strip-ansi" "^6.0.0" + "wcwidth" "^1.0.1" + +"os-locale@^3.1.0": + "integrity" "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==" + "resolved" "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "execa" "^1.0.0" + "lcid" "^2.0.0" + "mem" "^4.0.0" + +"os-tmpdir@~1.0.2": + "integrity" "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "version" "1.0.2" + +"p-cancelable@^1.0.0": + "integrity" "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" + "version" "1.1.0" + +"p-cancelable@^2.0.0": + "integrity" "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" + "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" + "version" "2.1.1" + +"p-cancelable@^3.0.0": + "integrity" "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==" + "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" + "version" "3.0.0" + +"p-defer@^1.0.0": + "integrity" "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==" + "resolved" "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" + "version" "1.0.0" + +"p-finally@^1.0.0": + "integrity" "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" + "resolved" "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + "version" "1.0.0" + +"p-is-promise@^2.0.0": + "integrity" "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + "resolved" "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz" + "version" "2.1.0" + +"p-limit@^1.1.0": + "integrity" "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "p-try" "^1.0.0" + +"p-limit@^2.0.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "p-try" "^2.0.0" + +"p-limit@^2.2.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "p-try" "^2.0.0" + +"p-limit@^3.0.2", "p-limit@^3.1.0": + "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "yocto-queue" "^0.1.0" + +"p-locate@^2.0.0": + "integrity" "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "p-limit" "^1.1.0" + +"p-locate@^3.0.0": + "integrity" "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "p-limit" "^2.0.0" + +"p-locate@^4.1.0": + "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "p-limit" "^2.2.0" + +"p-locate@^5.0.0": + "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + "version" "5.0.0" dependencies: - aggregate-error "^3.0.0" + "p-limit" "^3.0.2" -p-pipe@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz" - integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== +"p-map-series@^2.1.0": + "integrity" "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==" + "resolved" "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz" + "version" "2.1.0" -p-queue@^6.6.2: - version "6.6.2" - resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" - integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== +"p-map@^4.0.0": + "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + "version" "4.0.0" dependencies: - eventemitter3 "^4.0.4" - p-timeout "^3.2.0" + "aggregate-error" "^3.0.0" -p-reduce@^2.0.0, p-reduce@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== +"p-pipe@^3.1.0": + "integrity" "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==" + "resolved" "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz" + "version" "3.1.0" -p-timeout@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== +"p-queue@^6.6.2": + "integrity" "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==" + "resolved" "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" + "version" "6.6.2" dependencies: - p-finally "^1.0.0" + "eventemitter3" "^4.0.4" + "p-timeout" "^3.2.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== +"p-reduce@^2.0.0", "p-reduce@^2.1.0": + "integrity" "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==" + "resolved" "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" + "version" "2.1.0" + +"p-timeout@^3.2.0": + "integrity" "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==" + "resolved" "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "p-finally" "^1.0.0" -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +"p-try@^1.0.0": + "integrity" "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + "version" "1.0.0" -p-waterfall@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz" - integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== +"p-try@^2.0.0": + "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + "version" "2.2.0" + +"p-waterfall@^2.1.1": + "integrity" "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==" + "resolved" "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz" + "version" "2.1.1" dependencies: - p-reduce "^2.0.0" + "p-reduce" "^2.0.0" -pacote@^13.0.3, pacote@^13.6.1: - version "13.6.2" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" - integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== +"pacote@^13.0.3", "pacote@^13.6.1": + "integrity" "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==" + "resolved" "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz" + "version" "13.6.2" dependencies: "@npmcli/git" "^3.0.0" "@npmcli/installed-package-contents" "^1.0.7" "@npmcli/promise-spawn" "^3.0.0" "@npmcli/run-script" "^4.1.0" - cacache "^16.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.6" - mkdirp "^1.0.4" - npm-package-arg "^9.0.0" - npm-packlist "^5.1.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" - promise-retry "^2.0.1" - read-package-json "^5.0.0" - read-package-json-fast "^2.0.3" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-cache-control@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz" - integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== - -parse-conflict-json@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" - integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== - dependencies: - json-parse-even-better-errors "^2.3.1" - just-diff "^5.0.1" - just-diff-apply "^5.2.0" - -parse-headers@^2.0.0: - version "2.0.5" - resolved "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz" - integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0, parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + "cacache" "^16.0.0" + "chownr" "^2.0.0" + "fs-minipass" "^2.1.0" + "infer-owner" "^1.0.4" + "minipass" "^3.1.6" + "mkdirp" "^1.0.4" + "npm-package-arg" "^9.0.0" + "npm-packlist" "^5.1.0" + "npm-pick-manifest" "^7.0.0" + "npm-registry-fetch" "^13.0.1" + "proc-log" "^2.0.0" + "promise-retry" "^2.0.1" + "read-package-json" "^5.0.0" + "read-package-json-fast" "^2.0.3" + "rimraf" "^3.0.2" + "ssri" "^9.0.0" + "tar" "^6.1.11" + +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"parse-asn1@^5.0.0", "parse-asn1@^5.1.5": + "integrity" "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==" + "resolved" "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" + "version" "5.1.6" + dependencies: + "asn1.js" "^5.2.0" + "browserify-aes" "^1.0.0" + "evp_bytestokey" "^1.0.0" + "pbkdf2" "^3.0.3" + "safe-buffer" "^5.1.1" + +"parse-cache-control@^1.0.1": + "integrity" "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" + "resolved" "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz" + "version" "1.0.1" + +"parse-conflict-json@^2.0.1": + "integrity" "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==" + "resolved" "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "json-parse-even-better-errors" "^2.3.1" + "just-diff" "^5.0.1" + "just-diff-apply" "^5.2.0" + +"parse-headers@^2.0.0": + "integrity" "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + "resolved" "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz" + "version" "2.0.5" + +"parse-json@^4.0.0": + "integrity" "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "error-ex" "^1.3.1" + "json-parse-better-errors" "^1.0.1" + +"parse-json@^5.0.0", "parse-json@^5.2.0": + "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + "version" "5.2.0" 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" - -parse-path@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" - integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== - dependencies: - protocols "^2.0.0" - -parse-url@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" - integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== - dependencies: - parse-path "^7.0.0" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -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" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -pbkdf2@^3.0.17, pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz" - integrity sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pify@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - -pirates@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@2.7.1, prettier@^2.1.2, prettier@^2.6.2: - version "2.7.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== - -pretty-format@^28.0.0, pretty-format@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" - integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + "error-ex" "^1.3.1" + "json-parse-even-better-errors" "^2.3.0" + "lines-and-columns" "^1.1.6" + +"parse-path@^7.0.0": + "integrity" "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==" + "resolved" "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "protocols" "^2.0.0" + +"parse-url@^8.1.0": + "integrity" "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==" + "resolved" "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "parse-path" "^7.0.0" + +"parseurl@~1.3.3": + "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + "version" "1.3.3" + +"path-exists@^3.0.0": + "integrity" "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + "version" "3.0.0" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-key@^2.0.0", "path-key@^2.0.1": + "integrity" "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + "version" "2.0.1" + +"path-key@^3.0.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-parse@^1.0.6", "path-parse@^1.0.7": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" + +"path-to-regexp@0.1.7": + "integrity" "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + "version" "0.1.7" + +"path-type@^3.0.0": + "integrity" "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "pify" "^3.0.0" + +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"pathval@^1.1.1": + "integrity" "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" + "resolved" "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" + "version" "1.1.1" + +"pbkdf2@^3.0.17", "pbkdf2@^3.0.3": + "integrity" "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==" + "resolved" "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "create-hash" "^1.1.2" + "create-hmac" "^1.1.4" + "ripemd160" "^2.0.1" + "safe-buffer" "^5.0.1" + "sha.js" "^2.4.8" + +"performance-now@^2.1.0": + "integrity" "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "resolved" "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + "version" "2.1.0" + +"picocolors@^1.0.0": + "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + "version" "1.0.0" + +"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3", "picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" + +"pidtree@^0.5.0": + "integrity" "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==" + "resolved" "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz" + "version" "0.5.0" + +"pify@^2.3.0": + "integrity" "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + "version" "2.3.0" + +"pify@^3.0.0": + "integrity" "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + "version" "3.0.0" + +"pify@^4.0.1": + "integrity" "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "resolved" "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + "version" "4.0.1" + +"pify@^5.0.0": + "integrity" "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" + "resolved" "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" + "version" "5.0.0" + +"pirates@^4.0.4": + "integrity" "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" + "resolved" "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" + "version" "4.0.5" + +"pkg-dir@^4.2.0": + "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "find-up" "^4.0.0" + +"precond@0.2": + "integrity" "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==" + "resolved" "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz" + "version" "0.2.3" + +"prelude-ls@^1.2.1": + "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + "version" "1.2.1" + +"prepend-http@^2.0.0": + "integrity" "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" + "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" + "version" "2.0.0" + +"prettier-linter-helpers@^1.0.0": + "integrity" "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==" + "resolved" "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "fast-diff" "^1.1.2" + +"prettier@^2.1.2", "prettier@^2.6.2", "prettier@>=2.0.0", "prettier@2.7.1": + "integrity" "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" + "version" "2.7.1" + +"pretty-format@^28.0.0", "pretty-format@^28.1.3": + "integrity" "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/schemas" "^28.1.3" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -proc-log@^2.0.0, proc-log@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" - integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" - integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -promise@^8.0.0: - version "8.2.0" - resolved "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz" - integrity sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg== - dependencies: - asap "~2.0.6" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz" - integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== - dependencies: - read "1" - -propagate@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz" - integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -protocols@^2.0.0, protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - -psl@^1.1.28: - version "1.9.0" - resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" - integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.5.1: - version "1.5.1" - resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - -qs@6.10.3: - version "6.10.3" - resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" - -qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: - version "6.11.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -queue-microtask@^1.2.2, queue-microtask@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1, raw-body@^2.4.1: - version "2.5.1" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -read-cmd-shim@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" - integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== - -read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json@^5.0.0, read-package-json@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" - integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== - dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^2.3.1" - normalize-package-data "^4.0.0" - npm-normalize-package-bin "^2.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" - integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + "ansi-regex" "^5.0.1" + "ansi-styles" "^5.0.0" + "react-is" "^18.0.0" + +"proc-log@^2.0.0", "proc-log@^2.0.1": + "integrity" "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==" + "resolved" "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz" + "version" "2.0.1" + +"process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" + +"process@^0.11.10": + "integrity" "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + "version" "0.11.10" + +"promise-all-reject-late@^1.0.0": + "integrity" "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==" + "resolved" "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz" + "version" "1.0.1" + +"promise-call-limit@^1.0.1": + "integrity" "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==" + "resolved" "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz" + "version" "1.0.1" + +"promise-inflight@^1.0.1": + "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + "version" "1.0.1" + +"promise-retry@^2.0.1": + "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" + "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "err-code" "^2.0.2" + "retry" "^0.12.0" + +"promise-to-callback@^1.0.0": + "integrity" "sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==" + "resolved" "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-fn" "^1.0.0" + "set-immediate-shim" "^1.0.1" + +"promise@^8.0.0": + "integrity" "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==" + "resolved" "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz" + "version" "8.2.0" + dependencies: + "asap" "~2.0.6" + +"prompts@^2.0.1": + "integrity" "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==" + "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "kleur" "^3.0.3" + "sisteransi" "^1.0.5" + +"promzard@^0.3.0": + "integrity" "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==" + "resolved" "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "read" "1" + +"propagate@^2.0.0": + "integrity" "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" + "resolved" "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz" + "version" "2.0.1" + +"proto-list@~1.2.1": + "integrity" "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + "resolved" "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + "version" "1.2.4" + +"protocols@^2.0.0", "protocols@^2.0.1": + "integrity" "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==" + "resolved" "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz" + "version" "2.0.1" + +"proxy-addr@~2.0.7": + "integrity" "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==" + "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + "version" "2.0.7" + dependencies: + "forwarded" "0.2.0" + "ipaddr.js" "1.9.1" + +"prr@~1.0.1": + "integrity" "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + "resolved" "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + "version" "1.0.1" + +"psl@^1.1.28": + "integrity" "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "resolved" "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" + "version" "1.9.0" + +"public-encrypt@^4.0.0": + "integrity" "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==" + "resolved" "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "bn.js" "^4.1.0" + "browserify-rsa" "^4.0.0" + "create-hash" "^1.1.0" + "parse-asn1" "^5.0.0" + "randombytes" "^2.0.1" + "safe-buffer" "^5.1.2" + +"pump@^3.0.0": + "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" + "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.1" + +"punycode@^2.1.0", "punycode@^2.1.1": + "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + "version" "2.1.1" + +"punycode@2.1.0": + "integrity" "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" + "version" "2.1.0" + +"q@^1.5.1": + "integrity" "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + "resolved" "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + "version" "1.5.1" + +"qs@^6.4.0", "qs@^6.7.0", "qs@^6.9.4": + "integrity" "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" + "version" "6.11.0" + dependencies: + "side-channel" "^1.0.4" + +"qs@~6.5.2": + "integrity" "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" + "version" "6.5.3" + +"qs@6.10.3": + "integrity" "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" + "version" "6.10.3" + dependencies: + "side-channel" "^1.0.4" + +"query-string@^5.0.1": + "integrity" "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==" + "resolved" "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "decode-uri-component" "^0.2.0" + "object-assign" "^4.1.0" + "strict-uri-encode" "^1.0.0" + +"queue-microtask@^1.2.2", "queue-microtask@^1.2.3": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"queue-tick@^1.0.0": + "version" "1.0.0" + +"quick-lru@^4.0.1": + "integrity" "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" + "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" + "version" "4.0.1" + +"quick-lru@^5.1.1": + "integrity" "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + "version" "5.1.1" + +"randombytes@^2.0.0", "randombytes@^2.0.1", "randombytes@^2.0.5", "randombytes@^2.1.0": + "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" + "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "safe-buffer" "^5.1.0" + +"randomfill@^1.0.3": + "integrity" "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==" + "resolved" "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "randombytes" "^2.0.5" + "safe-buffer" "^5.1.0" + +"range-parser@~1.2.1": + "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + "version" "1.2.1" + +"raw-body@^2.4.1", "raw-body@2.5.1": + "integrity" "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==" + "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + "version" "2.5.1" + dependencies: + "bytes" "3.1.2" + "http-errors" "2.0.0" + "iconv-lite" "0.4.24" + "unpipe" "1.0.0" + +"react-is@^18.0.0": + "integrity" "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + "version" "18.2.0" + +"read-cmd-shim@^3.0.0": + "integrity" "sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==" + "resolved" "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz" + "version" "3.0.1" + +"read-package-json-fast@^2.0.2", "read-package-json-fast@^2.0.3": + "integrity" "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==" + "resolved" "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "json-parse-even-better-errors" "^2.3.0" + "npm-normalize-package-bin" "^1.0.1" + +"read-package-json@^5.0.0", "read-package-json@^5.0.1": + "integrity" "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==" + "resolved" "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz" + "version" "5.0.2" + dependencies: + "glob" "^8.0.1" + "json-parse-even-better-errors" "^2.3.1" + "normalize-package-data" "^4.0.0" + "npm-normalize-package-bin" "^2.0.0" + +"read-pkg-up@^3.0.0": + "integrity" "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==" + "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "find-up" "^2.0.0" + "read-pkg" "^3.0.0" + +"read-pkg-up@^7.0.1": + "integrity" "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==" + "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "find-up" "^4.1.0" + "read-pkg" "^5.2.0" + "type-fest" "^0.8.1" + +"read-pkg@^3.0.0": + "integrity" "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==" + "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "load-json-file" "^4.0.0" + "normalize-package-data" "^2.3.2" + "path-type" "^3.0.0" + +"read-pkg@^5.2.0": + "integrity" "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==" + "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" + "version" "5.2.0" 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@1, read@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz" - integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== - dependencies: - mute-stream "~0.0.4" - -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^2.2.2, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== - dependencies: - picomatch "^2.0.4" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -reduce-flatten@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz" - integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== - -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -req-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz" - integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== - dependencies: - req-from "^2.0.0" - -req-from@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz" - integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== - dependencies: - resolve-from "^3.0.0" - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.5: - version "1.0.9" - resolved "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.79.0, request@^2.88.0: - version "2.88.2" - resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -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" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: - version "1.2.1" - resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" - integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - 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" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== - -resolve@1.17.0, resolve@^1.10.0, resolve@^1.8.1: - version "1.17.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.20.0: - version "1.22.1" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" - 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" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - 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" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rlp@^2.2.3, rlp@^2.2.4: - version "2.2.7" - resolved "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - -rxjs@^7.0.0, rxjs@^7.5.5: - version "7.5.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz" - integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA== - dependencies: - tslib "^2.1.0" + "normalize-package-data" "^2.5.0" + "parse-json" "^5.0.0" + "type-fest" "^0.6.0" + +"read@^1.0.7", "read@1": + "integrity" "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==" + "resolved" "https://registry.npmjs.org/read/-/read-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "mute-stream" "~0.0.4" + +"readable-stream@^1.0.33": + "integrity" "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + "version" "1.1.14" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "0.0.1" + "string_decoder" "~0.10.x" + +"readable-stream@^2.0.0": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^2.2.2": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^2.2.9": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^3.0.0", "readable-stream@^3.0.2", "readable-stream@^3.1.1", "readable-stream@^3.4.0", "readable-stream@^3.6.0", "readable-stream@3": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readable-stream@~1.0.15": + "integrity" "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" + "version" "1.0.34" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "0.0.1" + "string_decoder" "~0.10.x" + +"readable-stream@~2.3.6": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readdir-scoped-modules@^1.1.0": + "integrity" "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==" + "resolved" "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "debuglog" "^1.0.1" + "dezalgo" "^1.0.0" + "graceful-fs" "^4.1.2" + "once" "^1.3.0" + +"readdirp@~3.2.0": + "integrity" "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "picomatch" "^2.0.4" + +"readdirp@~3.6.0": + "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "picomatch" "^2.2.1" + +"redent@^3.0.0": + "integrity" "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==" + "resolved" "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "indent-string" "^4.0.0" + "strip-indent" "^3.0.0" + +"reduce-flatten@^2.0.0": + "integrity" "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==" + "resolved" "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz" + "version" "2.0.0" + +"regenerator-runtime@^0.13.4": + "integrity" "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" + "version" "0.13.9" + +"regexp.prototype.flags@^1.4.3": + "integrity" "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==" + "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" + "version" "1.4.3" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "functions-have-names" "^1.2.2" + +"regexpp@^3.2.0": + "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + "version" "3.2.0" + +"req-cwd@^2.0.0": + "integrity" "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==" + "resolved" "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "req-from" "^2.0.0" + +"req-from@^2.0.0": + "integrity" "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==" + "resolved" "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "resolve-from" "^3.0.0" + +"request-promise-core@1.1.4": + "integrity" "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==" + "resolved" "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz" + "version" "1.1.4" + dependencies: + "lodash" "^4.17.19" + +"request-promise-native@^1.0.5": + "integrity" "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==" + "resolved" "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz" + "version" "1.0.9" + dependencies: + "request-promise-core" "1.1.4" + "stealthy-require" "^1.1.1" + "tough-cookie" "^2.3.3" + +"request@^2.34", "request@^2.79.0", "request@^2.85.0", "request@^2.88.0": + "integrity" "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==" + "resolved" "https://registry.npmjs.org/request/-/request-2.88.2.tgz" + "version" "2.88.2" + dependencies: + "aws-sign2" "~0.7.0" + "aws4" "^1.8.0" + "caseless" "~0.12.0" + "combined-stream" "~1.0.6" + "extend" "~3.0.2" + "forever-agent" "~0.6.1" + "form-data" "~2.3.2" + "har-validator" "~5.1.3" + "http-signature" "~1.2.0" + "is-typedarray" "~1.0.0" + "isstream" "~0.1.2" + "json-stringify-safe" "~5.0.1" + "mime-types" "~2.1.19" + "oauth-sign" "~0.9.0" + "performance-now" "^2.1.0" + "qs" "~6.5.2" + "safe-buffer" "^5.1.2" + "tough-cookie" "~2.5.0" + "tunnel-agent" "^0.6.0" + "uuid" "^3.3.2" + +"require-directory@^2.1.1": + "integrity" "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" + +"require-from-string@^2.0.0": + "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + "version" "2.0.2" + +"require-main-filename@^2.0.0": + "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + "version" "2.0.0" + +"resolve-alpn@^1.0.0", "resolve-alpn@^1.2.0": + "integrity" "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + "resolved" "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + "version" "1.2.1" + +"resolve-cwd@^3.0.0": + "integrity" "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==" + "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "resolve-from" "^5.0.0" + +"resolve-from@^3.0.0": + "integrity" "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" + "version" "3.0.0" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"resolve-from@^5.0.0": + "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + "version" "5.0.0" + +"resolve.exports@^1.1.0": + "integrity" "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" + "resolved" "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" + "version" "1.1.0" + +"resolve@^1.10.0", "resolve@^1.14.2", "resolve@^1.20.0", "resolve@^1.8.1": + "integrity" "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + "version" "1.22.1" + dependencies: + "is-core-module" "^2.9.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" + +"resolve@1.17.0": + "integrity" "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" + "version" "1.17.0" + dependencies: + "path-parse" "^1.0.6" + +"responselike@^1.0.2": + "integrity" "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==" + "resolved" "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "lowercase-keys" "^1.0.0" + +"responselike@^2.0.0": + "integrity" "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==" + "resolved" "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "lowercase-keys" "^2.0.0" + +"restore-cursor@^3.1.0": + "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + +"retry@^0.12.0": + "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rfdc@^1.3.0": + "integrity" "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + "resolved" "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" + "version" "1.3.0" + +"rimraf@^2.2.8": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "glob" "^7.1.3" + +"rimraf@^3.0.0", "rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"ripemd160@^2.0.0", "ripemd160@^2.0.1": + "integrity" "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==" + "resolved" "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "hash-base" "^3.0.0" + "inherits" "^2.0.1" + +"rlp@^2.0.0", "rlp@^2.2.3", "rlp@^2.2.4": + "integrity" "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==" + "resolved" "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz" + "version" "2.2.7" + dependencies: + "bn.js" "^5.2.0" + +"run-async@^2.4.0": + "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + "version" "2.4.1" + +"run-parallel-limit@^1.1.0": + "integrity" "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==" + "resolved" "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "queue-microtask" "^1.2.2" -safe-buffer@5.2.1, 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.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"rustbn.js@~0.2.0": + "integrity" "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" + "resolved" "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz" + "version" "0.2.0" -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" - 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", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +"rxjs@^7.0.0", "rxjs@^7.5.5": + "integrity" "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz" + "version" "7.5.7" + dependencies: + "tslib" "^2.1.0" -scrypt-js@2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz" - integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== +"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.1", "safe-buffer@~5.2.0", "safe-buffer@5.2.1": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" -scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== +"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-event-emitter@^1.0.1": + "integrity" "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==" + "resolved" "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "events" "^3.0.0" + +"safe-regex-test@^1.0.0": + "integrity" "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==" + "resolved" "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "call-bind" "^1.0.2" + "get-intrinsic" "^1.1.3" + "is-regex" "^1.1.4" + +"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@~2.1.0": + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" + +"scrypt-js@^3.0.0", "scrypt-js@^3.0.1", "scrypt-js@3.0.1": + "integrity" "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + "resolved" "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" + "version" "3.0.1" + +"scrypt-js@2.0.4": + "integrity" "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" + "resolved" "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz" + "version" "2.0.4" "scw-contracts-v1.0.0@npm:scw-contracts@1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.0.tgz" - integrity sha512-23OsUVpMZZJMb9qe8Bu0rzz47BxhOQv9QdxlHdd/GeE2cnpe5atC36rs3wquXKzfMrru+NEKhlhyR8674hrBpg== + "integrity" "sha512-23OsUVpMZZJMb9qe8Bu0rzz47BxhOQv9QdxlHdd/GeE2cnpe5atC36rs3wquXKzfMrru+NEKhlhyR8674hrBpg==" + "resolved" "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.0.tgz" + "version" "1.0.0" dependencies: "@ethersproject/abstract-signer" "^5.6.2" "@ethersproject/constants" "^5.6.1" @@ -9651,1971 +10876,2423 @@ scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: "@openzeppelin/contracts" "^4.2.0" "@typechain/hardhat" "^2.3.0" "@types/mocha" "^9.0.0" - chai-as-promised "^7.1.1" - chai-string "^1.5.0" - eth-gas-reporter "^0.2.24" - ethereumjs-util "^7.1.0" - ethereumjs-wallet "^1.0.1" - ethers "^5.6.8" - ganache "^7.1.0" - ganache-cli "^6.12.2" - hardhat "^2.9.5" - hardhat-deploy "^0.9.3" - hardhat-deploy-ethers "^0.3.0-beta.11" - hardhat-gas-reporter "^1.0.7" - solc "^0.8.15" - source-map-support "^0.5.19" - typescript "^4.3.5" - -"scw-contracts-v1.0.1@npm:scw-contracts@1.0.7": - version "1.0.7" - resolved "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.7.tgz" - integrity sha512-5Y2vpNIeHW2VsBIaukkKNn1/bjBBQlR8Dbbpi/UrHPSKU8A577ezZJZbWKysqh21IuFDJ44YRzaQDtTlLBDYDg== + "chai-as-promised" "^7.1.1" + "chai-string" "^1.5.0" + "eth-gas-reporter" "^0.2.24" + "ethereumjs-util" "^7.1.0" + "ethereumjs-wallet" "^1.0.1" + "ethers" "^5.6.8" + "ganache" "^7.1.0" + "ganache-cli" "^6.12.2" + "hardhat" "^2.9.5" + "hardhat-deploy" "^0.9.3" + "hardhat-deploy-ethers" "^0.3.0-beta.11" + "hardhat-gas-reporter" "^1.0.7" + "solc" "^0.8.15" + "source-map-support" "^0.5.19" + "typescript" "^4.3.5" + +"scw-contracts-v1.0.1@npm:scw-contracts@1.0.8": + "integrity" "sha512-a1zgevkJ33E5GLTOUJSUAjgXX0KhE+UeD+MxognKbiC3ZwDnA3Gu4/YbGukfgh448HsqtcWG76WipCn94dyrMQ==" + "resolved" "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.8.tgz" + "version" "1.0.8" dependencies: "@account-abstraction/contracts" "^0.2.0" + "@chainlink/contracts" "^0.4.1" "@ethersproject/abstract-signer" "^5.6.2" "@ethersproject/constants" "^5.6.1" "@nomiclabs/hardhat-etherscan" "^2.1.6" "@openzeppelin/contracts" "^4.2.0" + "@openzeppelin/contracts-upgradeable" "^4.7.3" "@typechain/hardhat" "^2.3.0" "@types/mocha" "^9.0.0" - chai-as-promised "^7.1.1" - chai-string "^1.5.0" - eth-gas-reporter "^0.2.24" - ethereumjs-util "^7.1.0" - ethereumjs-wallet "^1.0.1" - ethers "^5.6.8" - ganache "^7.1.0" - ganache-cli "^6.12.2" - hardhat "^2.9.5" - hardhat-deploy "^0.9.3" - hardhat-deploy-ethers "^0.3.0-beta.11" - hardhat-gas-reporter "^1.0.7" - solc "^0.8.15" - source-map-support "^0.5.19" - typescript "^4.3.5" - -secp256k1@4.0.3, secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -semaphore-async-await@^1.5.1: - version "1.5.1" - resolved "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz" - integrity sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg== - -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.3.4, semver@^7.1.1, semver@^7.3.4: - version "7.3.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.0.0, semver@^7.3.5, semver@^7.3.7: - version "7.3.7" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -servify@^0.1.12: - version "0.1.12" - resolved "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz" - integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== - dependencies: - body-parser "^1.16.0" - cors "^2.8.1" - express "^4.14.0" - request "^2.79.0" - xhr "^2.3.3" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -setimmediate@1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz" - integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -sha1@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz" - integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== - dependencies: - charenc ">= 0.0.1" - crypt ">= 0.0.1" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" - 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" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" - 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" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.7.3: - version "1.7.3" - resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, 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" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^2.7.0: - version "2.8.2" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" - integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.0" - resolved "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" - integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -solc@0.7.3: - version "0.7.3" - resolved "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - follow-redirects "^1.12.1" - fs-extra "^0.30.0" - js-sha3 "0.8.0" - memorystream "^0.3.1" - require-from-string "^2.0.0" - semver "^5.5.0" - tmp "0.0.33" - -solc@^0.8.15: - version "0.8.17" - resolved "https://registry.npmjs.org/solc/-/solc-0.8.17.tgz" - integrity sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g== - dependencies: - command-exists "^1.2.8" - commander "^8.1.0" - follow-redirects "^1.12.1" - js-sha3 "0.8.0" - memorystream "^0.3.1" - semver "^5.5.0" - tmp "0.0.33" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" - integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== - dependencies: - is-plain-obj "^1.0.0" - -sort-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz" - integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== - dependencies: - is-plain-obj "^2.0.0" - -source-map-support@0.5.12: - version "0.5.12" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.5.13, source-map-support@^0.5.19: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spawn-command@^0.0.2-1: - version "0.0.2-1" - resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz" - integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - 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.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - 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.12" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== - -split2@^3.0.0: - version "3.2.2" - resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^9.0.0, ssri@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - -stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== - dependencies: - escape-string-regexp "^2.0.0" - -stacktrace-parser@^0.1.10: - version "0.1.10" - resolved "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" - integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== - dependencies: - type-fest "^0.7.1" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz" - integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" - integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== - -string-argv@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== - -string-format@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz" - integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -"string-width@^1.0.2 || 2 || 3 || 4", 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" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^5.0.0: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" + "chai-as-promised" "^7.1.1" + "chai-string" "^1.5.0" + "eth-gas-reporter" "^0.2.24" + "ethereumjs-util" "^7.1.0" + "ethereumjs-wallet" "^1.0.1" + "ethers" "^5.6.8" + "ganache" "^7.1.0" + "ganache-cli" "^6.12.2" + "hardhat" "^2.9.5" + "hardhat-deploy" "^0.9.3" + "hardhat-deploy-ethers" "^0.3.0-beta.11" + "hardhat-gas-reporter" "^1.0.7" + "solc" "^0.8.15" + "solidity-bytes-utils" "^0.8.0" + "source-map-support" "^0.5.19" + "typescript" "^4.3.5" + +"secp256k1@^4.0.1": + "integrity" "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==" + "resolved" "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "elliptic" "^6.5.4" + "node-addon-api" "^2.0.0" + "node-gyp-build" "^4.2.0" + +"secp256k1@4.0.3": + "integrity" "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==" + "resolved" "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "elliptic" "^6.5.4" + "node-addon-api" "^2.0.0" + "node-gyp-build" "^4.2.0" + +"semaphore@^1.0.3", "semaphore@>=1.0.1": + "integrity" "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" + "resolved" "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz" + "version" "1.1.0" + +"semver@^5.5.0": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^5.6.0": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^5.7.0": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^6.0.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.1.1": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.1.2": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.3.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^7.0.0", "semver@^7.1.1", "semver@^7.3.4", "semver@^7.3.5", "semver@^7.3.7": + "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + "version" "7.3.7" + dependencies: + "lru-cache" "^6.0.0" + +"semver@~5.4.1": + "integrity" "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz" + "version" "5.4.1" + +"semver@2 || 3 || 4 || 5": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@7.3.4": + "integrity" "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" + "version" "7.3.4" + dependencies: + "lru-cache" "^6.0.0" + +"send@0.18.0": + "integrity" "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==" + "resolved" "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + "version" "0.18.0" + dependencies: + "debug" "2.6.9" + "depd" "2.0.0" + "destroy" "1.2.0" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "fresh" "0.5.2" + "http-errors" "2.0.0" + "mime" "1.6.0" + "ms" "2.1.3" + "on-finished" "2.4.1" + "range-parser" "~1.2.1" + "statuses" "2.0.1" + +"serialize-javascript@6.0.0": + "integrity" "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "randombytes" "^2.1.0" + +"serve-static@1.15.0": + "integrity" "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==" + "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + "version" "1.15.0" + dependencies: + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "parseurl" "~1.3.3" + "send" "0.18.0" + +"servify@^0.1.12": + "integrity" "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==" + "resolved" "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz" + "version" "0.1.12" + dependencies: + "body-parser" "^1.16.0" + "cors" "^2.8.1" + "express" "^4.14.0" + "request" "^2.79.0" + "xhr" "^2.3.3" + +"set-blocking@^2.0.0": + "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"set-immediate-shim@^1.0.1": + "integrity" "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==" + "resolved" "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" + "version" "1.0.1" + +"setimmediate@^1.0.5": + "integrity" "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + "version" "1.0.5" + +"setimmediate@1.0.4": + "integrity" "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" + "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz" + "version" "1.0.4" + +"setprototypeof@1.2.0": + "integrity" "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + "version" "1.2.0" + +"sha.js@^2.4.0", "sha.js@^2.4.8": + "integrity" "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==" + "resolved" "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + "version" "2.4.11" + dependencies: + "inherits" "^2.0.1" + "safe-buffer" "^5.0.1" + +"sha1@^1.1.1": + "integrity" "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==" + "resolved" "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "charenc" ">= 0.0.1" + "crypt" ">= 0.0.1" + +"shallow-clone@^3.0.0": + "integrity" "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==" + "resolved" "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "kind-of" "^6.0.2" + +"shebang-command@^1.2.0": + "integrity" "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "shebang-regex" "^1.0.0" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^1.0.0": + "integrity" "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + "version" "1.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"shell-quote@^1.7.3": + "integrity" "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" + "resolved" "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz" + "version" "1.7.3" + +"side-channel@^1.0.4": + "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" + "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.0" + "get-intrinsic" "^1.0.2" + "object-inspect" "^1.9.0" + +"signal-exit@^3.0.0": + "version" "3.0.3" + +"signal-exit@^3.0.2", "signal-exit@^3.0.3", "signal-exit@^3.0.7": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" + +"simple-concat@^1.0.0": + "integrity" "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + "resolved" "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + "version" "1.0.1" + +"simple-get@^2.7.0": + "integrity" "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==" + "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz" + "version" "2.8.2" + dependencies: + "decompress-response" "^3.3.0" + "once" "^1.3.1" + "simple-concat" "^1.0.0" + +"sisteransi@^1.0.5": + "integrity" "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + "version" "1.0.5" + +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"slice-ansi@^3.0.0": + "integrity" "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "astral-regex" "^2.0.0" + "is-fullwidth-code-point" "^3.0.0" + +"slice-ansi@^4.0.0": + "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "astral-regex" "^2.0.0" + "is-fullwidth-code-point" "^3.0.0" + +"slice-ansi@^5.0.0": + "integrity" "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "ansi-styles" "^6.0.0" + "is-fullwidth-code-point" "^4.0.0" + +"smart-buffer@^4.2.0": + "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + "version" "4.2.0" + +"socks-proxy-agent@^7.0.0": + "integrity" "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==" + "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "agent-base" "^6.0.2" + "debug" "^4.3.3" + "socks" "^2.6.2" + +"socks@^2.6.2": + "integrity" "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==" + "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "ip" "^2.0.0" + "smart-buffer" "^4.2.0" + +"solc@^0.8.15": + "integrity" "sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g==" + "resolved" "https://registry.npmjs.org/solc/-/solc-0.8.17.tgz" + "version" "0.8.17" + dependencies: + "command-exists" "^1.2.8" + "commander" "^8.1.0" + "follow-redirects" "^1.12.1" + "js-sha3" "0.8.0" + "memorystream" "^0.3.1" + "semver" "^5.5.0" + "tmp" "0.0.33" + +"solc@0.7.3": + "integrity" "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==" + "resolved" "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz" + "version" "0.7.3" + dependencies: + "command-exists" "^1.2.8" + "commander" "3.0.2" + "follow-redirects" "^1.12.1" + "fs-extra" "^0.30.0" + "js-sha3" "0.8.0" + "memorystream" "^0.3.1" + "require-from-string" "^2.0.0" + "semver" "^5.5.0" + "tmp" "0.0.33" + +"solidity-bytes-utils@^0.8.0": + "integrity" "sha512-r109ZHEf7zTMm1ENW6/IJFDWilFR/v0BZnGuFgDHJUV80ByobnV2k3txvwQaJ9ApL+6XAfwqsw5VFzjALbQPCw==" + "resolved" "https://registry.npmjs.org/solidity-bytes-utils/-/solidity-bytes-utils-0.8.0.tgz" + "version" "0.8.0" + dependencies: + "@truffle/hdwallet-provider" "latest" + +"sort-keys@^2.0.0": + "integrity" "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==" + "resolved" "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "is-plain-obj" "^1.0.0" + +"sort-keys@^4.0.0": + "integrity" "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==" + "resolved" "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "is-plain-obj" "^2.0.0" + +"source-map-support@^0.5.13", "source-map-support@^0.5.19": + "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + "version" "0.5.21" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map-support@0.5.12": + "integrity" "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz" + "version" "0.5.12" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map-support@0.5.13": + "integrity" "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" + "version" "0.5.13" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map@^0.6.0", "source-map@^0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"spawn-command@^0.0.2-1": + "integrity" "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==" + "resolved" "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz" + "version" "0.0.2-1" + +"spdx-correct@^3.0.0": + "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" + "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "spdx-expression-parse" "^3.0.0" + "spdx-license-ids" "^3.0.0" + +"spdx-exceptions@^2.1.0": + "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + "version" "2.3.0" + +"spdx-expression-parse@^3.0.0": + "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" + "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "spdx-exceptions" "^2.1.0" + "spdx-license-ids" "^3.0.0" + +"spdx-license-ids@^3.0.0": + "integrity" "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" + "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" + "version" "3.0.12" + +"split@^1.0.0": + "integrity" "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==" + "resolved" "https://registry.npmjs.org/split/-/split-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "through" "2" + +"split2@^3.0.0": + "integrity" "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==" + "resolved" "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "readable-stream" "^3.0.0" + +"sprintf-js@~1.0.2": + "integrity" "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"sshpk@^1.7.0": + "integrity" "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==" + "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" + "version" "1.17.0" + dependencies: + "asn1" "~0.2.3" + "assert-plus" "^1.0.0" + "bcrypt-pbkdf" "^1.0.0" + "dashdash" "^1.12.0" + "ecc-jsbn" "~0.1.1" + "getpass" "^0.1.1" + "jsbn" "~0.1.0" + "safer-buffer" "^2.0.2" + "tweetnacl" "~0.14.0" + +"ssri@^9.0.0", "ssri@^9.0.1": + "integrity" "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==" + "resolved" "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" + "version" "9.0.1" + dependencies: + "minipass" "^3.1.1" + +"stack-utils@^2.0.3": + "integrity" "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==" + "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "escape-string-regexp" "^2.0.0" + +"stacktrace-parser@^0.1.10": + "integrity" "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==" + "resolved" "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" + "version" "0.1.10" + dependencies: + "type-fest" "^0.7.1" + +"statuses@2.0.1": + "integrity" "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + "version" "2.0.1" + +"stealthy-require@^1.1.1": + "integrity" "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==" + "resolved" "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz" + "version" "1.1.1" + +"streamsearch@^1.1.0": + "integrity" "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" + "resolved" "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" + "version" "1.1.0" + +"strict-uri-encode@^1.0.0": + "integrity" "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" + "resolved" "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + "version" "1.1.0" + +"string_decoder@^1.1.1": + "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "safe-buffer" "~5.2.0" + +"string_decoder@~0.10.x": + "integrity" "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + "version" "0.10.31" + +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "safe-buffer" "~5.1.0" + +"string-argv@^0.3.1": + "integrity" "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" + "resolved" "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" + "version" "0.3.1" + +"string-format@^2.0.0": + "integrity" "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==" + "resolved" "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz" + "version" "2.0.0" + +"string-length@^4.0.1": + "integrity" "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==" + "resolved" "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "char-regex" "^1.0.2" + "strip-ansi" "^6.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"string-width@^1.0.2 || 2": + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^4.0.0" + +"string-width@^2.1.1": + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^4.0.0" + +"string-width@^3.0.0", "string-width@^3.1.0": + "integrity" "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "emoji-regex" "^7.0.1" + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^5.1.0" + +"string-width@^5.0.0": + "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "eastasianwidth" "^0.2.0" + "emoji-regex" "^9.2.2" + "strip-ansi" "^7.0.1" + +"string.prototype.trimend@^1.0.5": + "integrity" "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==" + "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" + +"string.prototype.trimstart@^1.0.5": + "integrity" "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==" + "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" + +"strip-ansi@^4.0.0": + "integrity" "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-regex" "^3.0.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== +"strip-ansi@^5.0.0", "strip-ansi@^5.1.0", "strip-ansi@^5.2.0": + "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "ansi-regex" "^4.1.0" + +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + +"strip-ansi@^7.0.1": + "integrity" "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + "version" "7.0.1" dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" + "ansi-regex" "^6.0.1" + +"strip-bom@^3.0.0": + "integrity" "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + "version" "3.0.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== +"strip-bom@^4.0.0": + "integrity" "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + "version" "4.0.0" -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -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" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -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" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, 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" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strong-log-transformer@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" - -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - -supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^9.2.2: - version "9.2.3" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.2.3.tgz" - integrity sha512-aszYUX/DVK/ed5rFLb/dDinVJrQjG/vmU433wtqVSD800rYsJNWxh2R3USV90aLSU+UsyQkbNeffVLzc6B6foA== - -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -swarm-js@^0.1.40: - version "0.1.42" - resolved "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz" - integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== - dependencies: - bluebird "^3.5.0" - buffer "^5.0.5" - eth-lib "^0.1.26" - fs-extra "^4.0.2" - got "^11.8.5" - mime-types "^2.1.16" - mkdirp-promise "^5.0.1" - mock-fs "^4.1.0" - setimmediate "^1.0.5" - tar "^4.0.2" - xhr-request "^1.0.1" - -sync-request@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz" - integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== - dependencies: - http-response-object "^3.0.1" - sync-rpc "^1.2.1" - then-request "^6.0.0" - -sync-rpc@^1.2.1: - version "1.3.6" - resolved "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz" - integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== - dependencies: - get-port "^3.1.0" - -table-layout@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz" - integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== - dependencies: - array-back "^4.0.1" - deep-extend "~0.6.0" - typical "^5.2.0" - wordwrapjs "^4.0.0" - -tar-stream@~2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^4.0.2: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - -tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.11" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" - integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== +"strip-eof@^1.0.0": + "integrity" "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" + "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + "version" "1.0.0" + +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" + +"strip-hex-prefix@1.0.0": + "integrity" "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==" + "resolved" "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-hex-prefixed" "1.0.0" + +"strip-indent@^3.0.0": + "integrity" "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==" + "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "min-indent" "^1.0.0" + +"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1", "strip-json-comments@3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" + +"strip-json-comments@2.0.1": + "integrity" "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + "version" "2.0.1" + +"strong-log-transformer@^2.1.0": + "integrity" "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==" + "resolved" "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "duplexer" "^0.1.1" + "minimist" "^1.2.0" + "through" "^2.3.4" + +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^7.0.0", "supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^8.0.0": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^8.1.0": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^9.2.2": + "integrity" "sha512-aszYUX/DVK/ed5rFLb/dDinVJrQjG/vmU433wtqVSD800rYsJNWxh2R3USV90aLSU+UsyQkbNeffVLzc6B6foA==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-9.2.3.tgz" + "version" "9.2.3" + +"supports-color@6.0.0": + "integrity" "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@8.1.1": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + +"supports-hyperlinks@^2.0.0": + "integrity" "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==" + "resolved" "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "has-flag" "^4.0.0" + "supports-color" "^7.0.0" + +"supports-preserve-symlinks-flag@^1.0.0": + "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + "version" "1.0.0" + +"swarm-js@^0.1.40": + "integrity" "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==" + "resolved" "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz" + "version" "0.1.42" + dependencies: + "bluebird" "^3.5.0" + "buffer" "^5.0.5" + "eth-lib" "^0.1.26" + "fs-extra" "^4.0.2" + "got" "^11.8.5" + "mime-types" "^2.1.16" + "mkdirp-promise" "^5.0.1" + "mock-fs" "^4.1.0" + "setimmediate" "^1.0.5" + "tar" "^4.0.2" + "xhr-request" "^1.0.1" + +"sync-request@^6.0.0": + "integrity" "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==" + "resolved" "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "http-response-object" "^3.0.1" + "sync-rpc" "^1.2.1" + "then-request" "^6.0.0" + +"sync-rpc@^1.2.1": + "integrity" "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==" + "resolved" "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz" + "version" "1.3.6" + dependencies: + "get-port" "^3.1.0" + +"table-layout@^1.0.2": + "integrity" "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==" + "resolved" "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "array-back" "^4.0.1" + "deep-extend" "~0.6.0" + "typical" "^5.2.0" + "wordwrapjs" "^4.0.0" + +"tar-stream@~2.2.0": + "integrity" "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" + "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "bl" "^4.0.3" + "end-of-stream" "^1.4.1" + "fs-constants" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^3.1.1" + +"tar@^4.0.2": + "integrity" "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==" + "resolved" "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" + "version" "4.4.19" + dependencies: + "chownr" "^1.1.4" + "fs-minipass" "^1.2.7" + "minipass" "^2.9.0" + "minizlib" "^1.3.3" + "mkdirp" "^0.5.5" + "safe-buffer" "^5.2.1" + "yallist" "^3.1.1" + +"tar@^6.1.0", "tar@^6.1.11", "tar@^6.1.2": + "integrity" "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==" + "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + "version" "6.1.11" + dependencies: + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^3.0.0" + "minizlib" "^2.1.1" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" + +"temp-dir@^1.0.0": + "integrity" "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==" + "resolved" "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" + "version" "1.0.0" + +"terminal-link@^2.0.0": + "integrity" "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==" + "resolved" "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ansi-escapes" "^4.2.1" + "supports-hyperlinks" "^2.0.0" + +"test-exclude@^6.0.0": + "integrity" "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==" + "resolved" "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + "version" "6.0.0" dependencies: "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" + "glob" "^7.1.4" + "minimatch" "^3.0.4" -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== +"text-extensions@^1.0.0": + "integrity" "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==" + "resolved" "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" + "version" "1.9.0" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +"text-table@^0.2.0": + "integrity" "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" -then-request@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz" - integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== +"then-request@^6.0.0": + "integrity" "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==" + "resolved" "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz" + "version" "6.0.2" dependencies: "@types/concat-stream" "^1.6.0" "@types/form-data" "0.0.33" "@types/node" "^8.0.0" "@types/qs" "^6.2.31" - caseless "~0.12.0" - concat-stream "^1.6.0" - form-data "^2.2.0" - http-basic "^8.1.1" - http-response-object "^3.0.1" - promise "^8.0.0" - qs "^6.4.0" - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" - integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== - -tmp@0.0.33, tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -treeverse@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" - integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== - -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -"true-case-path@^2.2.1": - version "2.2.1" - resolved "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz" - integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== - -ts-command-line-args@^2.2.0: - version "2.3.1" - resolved "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz" - integrity sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g== - dependencies: - chalk "^4.1.0" - command-line-args "^5.1.1" - command-line-usage "^6.1.0" - string-format "^2.0.0" - -ts-essentials@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz" - integrity sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ== - -ts-essentials@^7.0.1: - version "7.0.3" - resolved "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz" - integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== - -ts-generator@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz" - integrity sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ== + "caseless" "~0.12.0" + "concat-stream" "^1.6.0" + "form-data" "^2.2.0" + "http-basic" "^8.1.1" + "http-response-object" "^3.0.1" + "promise" "^8.0.0" + "qs" "^6.4.0" + +"through@^2.3.4", "through@^2.3.6", "through@^2.3.8", "through@>=2.2.7 <3", "through@2": + "integrity" "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + +"through2@^2.0.0": + "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "readable-stream" "~2.3.6" + "xtend" "~4.0.1" + +"through2@^2.0.3": + "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "readable-stream" "~2.3.6" + "xtend" "~4.0.1" + +"through2@^4.0.0": + "integrity" "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==" + "resolved" "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "readable-stream" "3" + +"timed-out@^4.0.1": + "integrity" "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==" + "resolved" "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" + "version" "4.0.1" + +"tmp@^0.0.33", "tmp@0.0.33": + "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + "version" "0.0.33" + dependencies: + "os-tmpdir" "~1.0.2" + +"tmp@~0.2.1": + "integrity" "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + "version" "0.2.1" + dependencies: + "rimraf" "^3.0.0" + +"tmpl@1.0.5": + "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + "version" "1.0.5" + +"to-fast-properties@^2.0.0": + "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + "version" "2.0.0" + +"to-readable-stream@^1.0.0": + "integrity" "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "resolved" "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" + "version" "1.0.0" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"toidentifier@1.0.1": + "integrity" "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + "version" "1.0.1" + +"tough-cookie@^2.3.3", "tough-cookie@~2.5.0": + "integrity" "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==" + "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "psl" "^1.1.28" + "punycode" "^2.1.1" + +"tr46@~0.0.3": + "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + "version" "0.0.3" + +"tree-kill@^1.2.2": + "integrity" "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" + "resolved" "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + "version" "1.2.2" + +"treeverse@^2.0.0": + "integrity" "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==" + "resolved" "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz" + "version" "2.0.0" + +"trim-newlines@^3.0.0": + "integrity" "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" + "resolved" "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" + "version" "3.0.1" + +"ts-command-line-args@^2.2.0": + "integrity" "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==" + "resolved" "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz" + "version" "2.3.1" + dependencies: + "chalk" "^4.1.0" + "command-line-args" "^5.1.1" + "command-line-usage" "^6.1.0" + "string-format" "^2.0.0" + +"ts-essentials@^1.0.0": + "integrity" "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==" + "resolved" "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz" + "version" "1.0.4" + +"ts-essentials@^7.0.1": + "integrity" "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==" + "resolved" "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz" + "version" "7.0.3" + +"ts-generator@^0.1.1": + "integrity" "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==" + "resolved" "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz" + "version" "0.1.1" dependencies: "@types/mkdirp" "^0.5.2" "@types/prettier" "^2.1.1" "@types/resolve" "^0.0.8" - chalk "^2.4.1" - glob "^7.1.2" - mkdirp "^0.5.1" - prettier "^2.1.2" - resolve "^1.8.1" - ts-essentials "^1.0.0" - -ts-node@^10.7.0, ts-node@^10.9.1: - version "10.9.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + "chalk" "^2.4.1" + "glob" "^7.1.2" + "mkdirp" "^0.5.1" + "prettier" "^2.1.2" + "resolve" "^1.8.1" + "ts-essentials" "^1.0.0" + +"ts-node@*", "ts-node@^10.7.0", "ts-node@^10.9.1", "ts-node@>=9.0.0": + "integrity" "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==" + "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + "version" "10.9.1" dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tsconfig-paths@^3.9.0: - version "3.14.1" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + "acorn" "^8.4.1" + "acorn-walk" "^8.1.1" + "arg" "^4.1.0" + "create-require" "^1.1.0" + "diff" "^4.0.1" + "make-error" "^1.1.1" + "v8-compile-cache-lib" "^3.0.1" + "yn" "3.1.1" + +"tsconfig-paths@^3.9.0": + "integrity" "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==" + "resolved" "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" + "version" "3.14.1" dependencies: "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tsort@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" - integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl-util@^0.15.1: - version "0.15.1" - resolved "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz" - integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz" - integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" - 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" - integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.npmjs.org/type/-/type-2.7.2.tgz" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typechain@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz" - integrity sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ== + "json5" "^1.0.1" + "minimist" "^1.2.6" + "strip-bom" "^3.0.0" + +"tslib@^1.8.1", "tslib@^1.9.3": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" + +"tslib@^2.0.0": + "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + "version" "2.4.0" + +"tslib@^2.1.0": + "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + "version" "2.4.0" + +"tslib@^2.3.0": + "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + "version" "2.4.0" + +"tslib@^2.4.0": + "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + "version" "2.4.0" + +"tsort@0.0.1": + "integrity" "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" + "resolved" "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" + "version" "0.0.1" + +"tsutils@^3.21.0": + "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" + "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + "version" "3.21.0" + dependencies: + "tslib" "^1.8.1" + +"tunnel-agent@^0.6.0": + "integrity" "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==" + "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + "version" "0.6.0" + dependencies: + "safe-buffer" "^5.0.1" + +"tweetnacl-util@^0.15.1": + "integrity" "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" + "resolved" "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz" + "version" "0.15.1" + +"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": + "integrity" "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + "version" "0.14.5" + +"tweetnacl@^1.0.3": + "integrity" "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" + "version" "1.0.3" + +"type-check@^0.4.0", "type-check@~0.4.0": + "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + "version" "0.4.0" + dependencies: + "prelude-ls" "^1.2.1" + +"type-detect@^4.0.0", "type-detect@^4.0.5", "type-detect@4.0.8": + "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + "version" "4.0.8" + +"type-fest@^0.18.0": + "integrity" "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" + "version" "0.18.1" + +"type-fest@^0.20.2": + "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + "version" "0.20.2" + +"type-fest@^0.21.3": + "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + "version" "0.21.3" + +"type-fest@^0.4.1": + "integrity" "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz" + "version" "0.4.1" + +"type-fest@^0.6.0": + "integrity" "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" + "version" "0.6.0" + +"type-fest@^0.7.1": + "integrity" "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz" + "version" "0.7.1" + +"type-fest@^0.8.1": + "integrity" "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + "version" "0.8.1" + +"type-is@~1.6.18": + "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" + "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + "version" "1.6.18" + dependencies: + "media-typer" "0.3.0" + "mime-types" "~2.1.24" + +"type@^1.0.1": + "integrity" "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "resolved" "https://registry.npmjs.org/type/-/type-1.2.0.tgz" + "version" "1.2.0" + +"type@^2.7.2": + "integrity" "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + "resolved" "https://registry.npmjs.org/type/-/type-2.7.2.tgz" + "version" "2.7.2" + +"typechain@^5.1.2", "typechain@^7.0.0": + "integrity" "sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ==" + "resolved" "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz" + "version" "7.0.1" dependencies: "@types/prettier" "^2.1.1" - debug "^4.1.1" - fs-extra "^7.0.0" - glob "^7.1.6" - js-sha3 "^0.8.0" - lodash "^4.17.15" - mkdirp "^1.0.4" - prettier "^2.1.2" - ts-command-line-args "^2.2.0" - ts-essentials "^7.0.1" - -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" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -"typescript@^3 || ^4": - version "4.8.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" - integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== - -typescript@^4.3.5, typescript@^4.6.3, typescript@^4.7.4: - version "4.8.2" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz" - integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== - -typical@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz" - integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== - -typical@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz" - integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== - -uglify-js@^3.1.4: - version "3.17.2" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.2.tgz" - integrity sha512-bbxglRjsGQMchfvXZNusUcYgiB9Hx2K4AHYXQy2DITZ9Rd+JzhX7+hoocE5Winr7z2oHvPsekkBwXtigvxevXg== - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" - 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@^5.4.0: - version "5.10.0" - resolved "https://registry.npmjs.org/undici/-/undici-5.10.0.tgz" - integrity sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g== - -unique-filename@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" - integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== - dependencies: - unique-slug "^3.0.0" - -unique-slug@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" - integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== - dependencies: - imurmurhash "^0.1.4" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -upath@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz" - integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== - -update-browserslist-db@^1.0.9: - version "1.0.9" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz" - integrity sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-set-query@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz" - integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== - -utf-8-validate@5.0.7: - version "5.0.7" - resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz" - integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== - dependencies: - node-gyp-build "^4.3.0" - -utf-8-validate@^5.0.2: - version "5.0.9" - resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz" - integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== - dependencies: - node-gyp-build "^4.3.0" - -utf8@3.0.0, utf8@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@^0.12.0: - version "0.12.4" - resolved "https://registry.npmjs.org/util/-/util-0.12.4.tgz" - integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - safe-buffer "^5.1.2" - which-typed-array "^1.1.2" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz" - integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== - -uuid@3.3.2: - version "3.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -v8-compile-cache@2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -v8-to-istanbul@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz" - integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + "debug" "^4.1.1" + "fs-extra" "^7.0.0" + "glob" "^7.1.6" + "js-sha3" "^0.8.0" + "lodash" "^4.17.15" + "mkdirp" "^1.0.4" + "prettier" "^2.1.2" + "ts-command-line-args" "^2.2.0" + "ts-essentials" "^7.0.1" + +"typedarray-to-buffer@^3.1.5": + "integrity" "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==" + "resolved" "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + "version" "3.1.5" + dependencies: + "is-typedarray" "^1.0.0" + +"typedarray@^0.0.6": + "integrity" "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + "version" "0.0.6" + +"typescript@*", "typescript@^3 || ^4", "typescript@^4.3.5", "typescript@^4.6.3", "typescript@^4.7.4", "typescript@>=2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.7.0", "typescript@>=4.0.0", "typescript@>=4.1.0": + "integrity" "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" + "version" "4.8.4" + +"typical@^4.0.0": + "integrity" "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" + "resolved" "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz" + "version" "4.0.0" + +"typical@^5.2.0": + "integrity" "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" + "resolved" "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz" + "version" "5.2.0" + +"uglify-js@^3.1.4": + "integrity" "sha512-bbxglRjsGQMchfvXZNusUcYgiB9Hx2K4AHYXQy2DITZ9Rd+JzhX7+hoocE5Winr7z2oHvPsekkBwXtigvxevXg==" + "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.2.tgz" + "version" "3.17.2" + +"ultron@~1.1.0": + "integrity" "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + "resolved" "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz" + "version" "1.1.1" + +"unbox-primitive@^1.0.2": + "integrity" "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==" + "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" + "has-bigints" "^1.0.2" + "has-symbols" "^1.0.3" + "which-boxed-primitive" "^1.0.2" + +"undici@^5.4.0": + "integrity" "sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==" + "resolved" "https://registry.npmjs.org/undici/-/undici-5.11.0.tgz" + "version" "5.11.0" + dependencies: + "busboy" "^1.6.0" + +"unique-filename@^2.0.0": + "integrity" "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==" + "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "unique-slug" "^3.0.0" + +"unique-slug@^3.0.0": + "integrity" "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==" + "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "imurmurhash" "^0.1.4" + +"universal-user-agent@^6.0.0": + "integrity" "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + "resolved" "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" + "version" "6.0.0" + +"universalify@^0.1.0": + "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + "version" "0.1.2" + +"universalify@^2.0.0": + "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + "version" "2.0.0" + +"unpipe@~1.0.0", "unpipe@1.0.0": + "integrity" "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + "version" "1.0.0" + +"upath@^2.0.1": + "integrity" "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==" + "resolved" "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz" + "version" "2.0.1" + +"update-browserslist-db@^1.0.9": + "integrity" "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==" + "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz" + "version" "1.0.9" + dependencies: + "escalade" "^3.1.1" + "picocolors" "^1.0.0" + +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"url-parse-lax@^3.0.0": + "integrity" "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==" + "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "prepend-http" "^2.0.0" + +"url-set-query@^1.0.0": + "integrity" "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" + "resolved" "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz" + "version" "1.0.0" + +"utf-8-validate@^5.0.2", "utf-8-validate@5.0.7": + "integrity" "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==" + "resolved" "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz" + "version" "5.0.7" + dependencies: + "node-gyp-build" "^4.3.0" + +"utf8@^3.0.0", "utf8@3.0.0": + "integrity" "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + "resolved" "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz" + "version" "3.0.0" + +"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": + "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"util@^0.12.0": + "integrity" "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==" + "resolved" "https://registry.npmjs.org/util/-/util-0.12.4.tgz" + "version" "0.12.4" + dependencies: + "inherits" "^2.0.3" + "is-arguments" "^1.0.4" + "is-generator-function" "^1.0.7" + "is-typed-array" "^1.1.3" + "safe-buffer" "^5.1.2" + "which-typed-array" "^1.1.2" + +"utils-merge@1.0.1": + "integrity" "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + "version" "1.0.1" + +"uuid@^3.3.2": + "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + "version" "3.4.0" + +"uuid@^8.3.2": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" + +"uuid@2.0.1": + "integrity" "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz" + "version" "2.0.1" + +"uuid@3.3.2": + "integrity" "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz" + "version" "3.3.2" + +"v8-compile-cache-lib@^3.0.1": + "integrity" "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "resolved" "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + "version" "3.0.1" + +"v8-compile-cache@2.3.0": + "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" + "version" "2.3.0" + +"v8-to-istanbul@^9.0.1": + "integrity" "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==" + "resolved" "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz" + "version" "9.0.1" dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" + "convert-source-map" "^1.6.0" -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== +"validate-npm-package-license@^3.0.1", "validate-npm-package-license@^3.0.4": + "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" + "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + "version" "3.0.4" dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" + "spdx-correct" "^3.0.0" + "spdx-expression-parse" "^3.0.0" -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" - integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== +"validate-npm-package-name@^3.0.0": + "integrity" "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==" + "resolved" "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" + "version" "3.0.0" dependencies: - builtins "^1.0.3" + "builtins" "^1.0.3" -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== +"validate-npm-package-name@^4.0.0": + "integrity" "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==" + "resolved" "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz" + "version" "4.0.0" dependencies: - builtins "^5.0.0" + "builtins" "^5.0.0" -varint@^5.0.0: - version "5.0.2" - resolved "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" - integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== +"varint@^5.0.0": + "integrity" "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + "resolved" "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" + "version" "5.0.2" -vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +"vary@^1", "vary@~1.1.2": + "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + "version" "1.1.2" -verror@1.10.0: - version "1.10.0" - resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== +"verror@1.10.0": + "integrity" "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==" + "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + "version" "1.10.0" dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" + "assert-plus" "^1.0.0" + "core-util-is" "1.0.2" + "extsprintf" "^1.2.0" -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== +"walk-up-path@^1.0.0": + "integrity" "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==" + "resolved" "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz" + "version" "1.0.0" + +"walker@^1.0.8": + "integrity" "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==" + "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "makeerror" "1.0.12" -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== +"wcwidth@^1.0.0", "wcwidth@^1.0.1": + "integrity" "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" + "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + "version" "1.0.1" dependencies: - makeerror "1.0.12" + "defaults" "^1.0.3" -wcwidth@^1.0.0, wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== +"web3-bzz@1.7.4": + "integrity" "sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q==" + "resolved" "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.4.tgz" + "version" "1.7.4" dependencies: - defaults "^1.0.3" + "@types/node" "^12.12.6" + "got" "9.6.0" + "swarm-js" "^0.1.40" -web3-bzz@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.0.tgz" - integrity sha512-caDtdKeLi7+2Vb+y+cq2yyhkNjnxkFzVW0j1DtemarBg3dycG1iEl75CVQMLNO6Wkg+HH9tZtRnUyFIe5LIUeQ== +"web3-bzz@1.8.0": + "integrity" "sha512-caDtdKeLi7+2Vb+y+cq2yyhkNjnxkFzVW0j1DtemarBg3dycG1iEl75CVQMLNO6Wkg+HH9tZtRnUyFIe5LIUeQ==" + "resolved" "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.0.tgz" + "version" "1.8.0" dependencies: "@types/node" "^12.12.6" - got "12.1.0" - swarm-js "^0.1.40" + "got" "12.1.0" + "swarm-js" "^0.1.40" + +"web3-core-helpers@1.7.4": + "integrity" "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==" + "resolved" "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "web3-eth-iban" "1.7.4" + "web3-utils" "1.7.4" + +"web3-core-helpers@1.8.0": + "integrity" "sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw==" + "resolved" "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "web3-eth-iban" "1.8.0" + "web3-utils" "1.8.0" -web3-core-helpers@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz" - integrity sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw== +"web3-core-method@1.7.4": + "integrity" "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==" + "resolved" "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz" + "version" "1.7.4" dependencies: - web3-eth-iban "1.8.0" - web3-utils "1.8.0" + "@ethersproject/transactions" "^5.6.2" + "web3-core-helpers" "1.7.4" + "web3-core-promievent" "1.7.4" + "web3-core-subscriptions" "1.7.4" + "web3-utils" "1.7.4" -web3-core-method@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.0.tgz" - integrity sha512-c94RAzo3gpXwf2rf8rL8C77jOzNWF4mXUoUfZYYsiY35cJFd46jQDPI00CB5+ZbICTiA5mlVzMj4e7jAsTqiLA== +"web3-core-method@1.8.0": + "integrity" "sha512-c94RAzo3gpXwf2rf8rL8C77jOzNWF4mXUoUfZYYsiY35cJFd46jQDPI00CB5+ZbICTiA5mlVzMj4e7jAsTqiLA==" + "resolved" "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.0.tgz" + "version" "1.8.0" dependencies: "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.8.0" - web3-core-promievent "1.8.0" - web3-core-subscriptions "1.8.0" - web3-utils "1.8.0" - -web3-core-promievent@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.0.tgz" - integrity sha512-FGLyjAuOaAQ+ZhV6iuw9tg/9WvIkSZXKHQ4mdTyQ8MxVraOtFivOCbuLLsGgapfHYX+RPxsc1j1YzQjKoupagQ== - dependencies: - eventemitter3 "4.0.4" - -web3-core-requestmanager@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.0.tgz" - integrity sha512-2AoYCs3Owl5foWcf4uKPONyqFygSl9T54L8b581U16nsUirjhoTUGK/PBhMDVcLCmW4QQmcY5A8oPFpkQc1TTg== - dependencies: - util "^0.12.0" - web3-core-helpers "1.8.0" - web3-providers-http "1.8.0" - web3-providers-ipc "1.8.0" - web3-providers-ws "1.8.0" - -web3-core-subscriptions@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.0.tgz" - integrity sha512-7lHVRzDdg0+Gcog55lG6Q3D8JV+jN+4Ly6F8cSn9xFUAwOkdbgdWsjknQG7t7CDWy21DQkvdiY2BJF8S68AqOA== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.8.0" - -web3-core@1.8.0, web3-core@^1.7.1, web3-core@^1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-core/-/web3-core-1.8.0.tgz" - integrity sha512-9sCA+Z02ci6zoY2bAquFiDjujRwmSKHiSGi4B8IstML8okSytnzXk1izHYSynE7ahIkguhjWAuXFvX76F5rAbA== + "web3-core-helpers" "1.8.0" + "web3-core-promievent" "1.8.0" + "web3-core-subscriptions" "1.8.0" + "web3-utils" "1.8.0" + +"web3-core-promievent@1.7.4": + "integrity" "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==" + "resolved" "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "eventemitter3" "4.0.4" + +"web3-core-promievent@1.8.0": + "integrity" "sha512-FGLyjAuOaAQ+ZhV6iuw9tg/9WvIkSZXKHQ4mdTyQ8MxVraOtFivOCbuLLsGgapfHYX+RPxsc1j1YzQjKoupagQ==" + "resolved" "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "eventemitter3" "4.0.4" + +"web3-core-requestmanager@1.7.4": + "integrity" "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==" + "resolved" "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "util" "^0.12.0" + "web3-core-helpers" "1.7.4" + "web3-providers-http" "1.7.4" + "web3-providers-ipc" "1.7.4" + "web3-providers-ws" "1.7.4" + +"web3-core-requestmanager@1.8.0": + "integrity" "sha512-2AoYCs3Owl5foWcf4uKPONyqFygSl9T54L8b581U16nsUirjhoTUGK/PBhMDVcLCmW4QQmcY5A8oPFpkQc1TTg==" + "resolved" "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "util" "^0.12.0" + "web3-core-helpers" "1.8.0" + "web3-providers-http" "1.8.0" + "web3-providers-ipc" "1.8.0" + "web3-providers-ws" "1.8.0" + +"web3-core-subscriptions@1.7.4": + "integrity" "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==" + "resolved" "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "eventemitter3" "4.0.4" + "web3-core-helpers" "1.7.4" + +"web3-core-subscriptions@1.8.0": + "integrity" "sha512-7lHVRzDdg0+Gcog55lG6Q3D8JV+jN+4Ly6F8cSn9xFUAwOkdbgdWsjknQG7t7CDWy21DQkvdiY2BJF8S68AqOA==" + "resolved" "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "eventemitter3" "4.0.4" + "web3-core-helpers" "1.8.0" + +"web3-core@^1.7.1", "web3-core@^1.8.0", "web3-core@1.8.0": + "integrity" "sha512-9sCA+Z02ci6zoY2bAquFiDjujRwmSKHiSGi4B8IstML8okSytnzXk1izHYSynE7ahIkguhjWAuXFvX76F5rAbA==" + "resolved" "https://registry.npmjs.org/web3-core/-/web3-core-1.8.0.tgz" + "version" "1.8.0" dependencies: "@types/bn.js" "^5.1.0" "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.8.0" - web3-core-method "1.8.0" - web3-core-requestmanager "1.8.0" - web3-utils "1.8.0" + "bignumber.js" "^9.0.0" + "web3-core-helpers" "1.8.0" + "web3-core-method" "1.8.0" + "web3-core-requestmanager" "1.8.0" + "web3-utils" "1.8.0" + +"web3-core@1.7.4": + "integrity" "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==" + "resolved" "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "@types/bn.js" "^5.1.0" + "@types/node" "^12.12.6" + "bignumber.js" "^9.0.0" + "web3-core-helpers" "1.7.4" + "web3-core-method" "1.7.4" + "web3-core-requestmanager" "1.7.4" + "web3-utils" "1.7.4" + +"web3-eth-abi@1.7.4": + "integrity" "sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg==" + "resolved" "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "@ethersproject/abi" "^5.6.3" + "web3-utils" "1.7.4" -web3-eth-abi@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.0.tgz" - integrity sha512-xPeMb2hS9YLQK/Q5YZpkcmzoRGM+/R8bogSrYHhNC3hjZSSU0YRH+1ZKK0f9YF4qDZaPMI8tKWIMSCDIpjG6fg== +"web3-eth-abi@1.8.0": + "integrity" "sha512-xPeMb2hS9YLQK/Q5YZpkcmzoRGM+/R8bogSrYHhNC3hjZSSU0YRH+1ZKK0f9YF4qDZaPMI8tKWIMSCDIpjG6fg==" + "resolved" "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.0.tgz" + "version" "1.8.0" dependencies: "@ethersproject/abi" "^5.6.3" - web3-utils "1.8.0" + "web3-utils" "1.8.0" -web3-eth-accounts@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.0.tgz" - integrity sha512-HQ/MDSv4bexwJLvnqsM6xpGE7c2NVOqyhzOZFyMUKXbIwIq85T3TaLnM9pCN7XqMpDcfxqiZ3q43JqQVkzHdmw== +"web3-eth-accounts@1.7.4": + "integrity" "sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw==" + "resolved" "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz" + "version" "1.7.4" dependencies: "@ethereumjs/common" "^2.5.0" "@ethereumjs/tx" "^3.3.2" - crypto-browserify "3.12.0" - eth-lib "0.2.8" - ethereumjs-util "^7.0.10" - scrypt-js "^3.0.1" - uuid "3.3.2" - web3-core "1.8.0" - web3-core-helpers "1.8.0" - web3-core-method "1.8.0" - web3-utils "1.8.0" - -web3-eth-contract@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.0.tgz" - integrity sha512-6xeXhW2YoCrz2Ayf2Vm4srWiMOB6LawkvxWJDnUWJ8SMATg4Pgu42C/j8rz/enXbYWt2IKuj0kk8+QszxQbK+Q== + "crypto-browserify" "3.12.0" + "eth-lib" "0.2.8" + "ethereumjs-util" "^7.0.10" + "scrypt-js" "^3.0.1" + "uuid" "3.3.2" + "web3-core" "1.7.4" + "web3-core-helpers" "1.7.4" + "web3-core-method" "1.7.4" + "web3-utils" "1.7.4" + +"web3-eth-accounts@1.8.0": + "integrity" "sha512-HQ/MDSv4bexwJLvnqsM6xpGE7c2NVOqyhzOZFyMUKXbIwIq85T3TaLnM9pCN7XqMpDcfxqiZ3q43JqQVkzHdmw==" + "resolved" "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/tx" "^3.3.2" + "crypto-browserify" "3.12.0" + "eth-lib" "0.2.8" + "ethereumjs-util" "^7.0.10" + "scrypt-js" "^3.0.1" + "uuid" "3.3.2" + "web3-core" "1.8.0" + "web3-core-helpers" "1.8.0" + "web3-core-method" "1.8.0" + "web3-utils" "1.8.0" + +"web3-eth-contract@1.7.4": + "integrity" "sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ==" + "resolved" "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "@types/bn.js" "^5.1.0" + "web3-core" "1.7.4" + "web3-core-helpers" "1.7.4" + "web3-core-method" "1.7.4" + "web3-core-promievent" "1.7.4" + "web3-core-subscriptions" "1.7.4" + "web3-eth-abi" "1.7.4" + "web3-utils" "1.7.4" + +"web3-eth-contract@1.8.0": + "integrity" "sha512-6xeXhW2YoCrz2Ayf2Vm4srWiMOB6LawkvxWJDnUWJ8SMATg4Pgu42C/j8rz/enXbYWt2IKuj0kk8+QszxQbK+Q==" + "resolved" "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.0.tgz" + "version" "1.8.0" dependencies: "@types/bn.js" "^5.1.0" - web3-core "1.8.0" - web3-core-helpers "1.8.0" - web3-core-method "1.8.0" - web3-core-promievent "1.8.0" - web3-core-subscriptions "1.8.0" - web3-eth-abi "1.8.0" - web3-utils "1.8.0" - -web3-eth-ens@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.0.tgz" - integrity sha512-/eFbQEwvsMOEiOhw9/iuRXCsPkqAmHHWuFOrThQkozRgcnSTRnvxkkRC/b6koiT5/HaKeUs4yQDg+/ixsIxZxA== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - web3-core "1.8.0" - web3-core-helpers "1.8.0" - web3-core-promievent "1.8.0" - web3-eth-abi "1.8.0" - web3-eth-contract "1.8.0" - web3-utils "1.8.0" - -web3-eth-iban@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz" - integrity sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg== - dependencies: - bn.js "^5.2.1" - web3-utils "1.8.0" - -web3-eth-personal@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.0.tgz" - integrity sha512-L7FT4nR3HmsfZyIAhFpEctKkYGOjRC2h6iFKs9gnFCHZga8yLcYcGaYOBIoYtaKom99MuGBoosayWt/Twh7F5A== + "web3-core" "1.8.0" + "web3-core-helpers" "1.8.0" + "web3-core-method" "1.8.0" + "web3-core-promievent" "1.8.0" + "web3-core-subscriptions" "1.8.0" + "web3-eth-abi" "1.8.0" + "web3-utils" "1.8.0" + +"web3-eth-ens@1.7.4": + "integrity" "sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA==" + "resolved" "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "content-hash" "^2.5.2" + "eth-ens-namehash" "2.0.8" + "web3-core" "1.7.4" + "web3-core-helpers" "1.7.4" + "web3-core-promievent" "1.7.4" + "web3-eth-abi" "1.7.4" + "web3-eth-contract" "1.7.4" + "web3-utils" "1.7.4" + +"web3-eth-ens@1.8.0": + "integrity" "sha512-/eFbQEwvsMOEiOhw9/iuRXCsPkqAmHHWuFOrThQkozRgcnSTRnvxkkRC/b6koiT5/HaKeUs4yQDg+/ixsIxZxA==" + "resolved" "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "content-hash" "^2.5.2" + "eth-ens-namehash" "2.0.8" + "web3-core" "1.8.0" + "web3-core-helpers" "1.8.0" + "web3-core-promievent" "1.8.0" + "web3-eth-abi" "1.8.0" + "web3-eth-contract" "1.8.0" + "web3-utils" "1.8.0" + +"web3-eth-iban@1.7.4": + "integrity" "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==" + "resolved" "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "bn.js" "^5.2.1" + "web3-utils" "1.7.4" + +"web3-eth-iban@1.8.0": + "integrity" "sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg==" + "resolved" "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "bn.js" "^5.2.1" + "web3-utils" "1.8.0" + +"web3-eth-personal@1.7.4": + "integrity" "sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g==" + "resolved" "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "@types/node" "^12.12.6" + "web3-core" "1.7.4" + "web3-core-helpers" "1.7.4" + "web3-core-method" "1.7.4" + "web3-net" "1.7.4" + "web3-utils" "1.7.4" + +"web3-eth-personal@1.8.0": + "integrity" "sha512-L7FT4nR3HmsfZyIAhFpEctKkYGOjRC2h6iFKs9gnFCHZga8yLcYcGaYOBIoYtaKom99MuGBoosayWt/Twh7F5A==" + "resolved" "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.0.tgz" + "version" "1.8.0" dependencies: "@types/node" "^12.12.6" - web3-core "1.8.0" - web3-core-helpers "1.8.0" - web3-core-method "1.8.0" - web3-net "1.8.0" - web3-utils "1.8.0" - -web3-eth@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.0.tgz" - integrity sha512-hist52os3OT4TQFB/GxPSMxTh3995sz6LPvQpPvj7ktSbpg9RNSFaSsPlCT63wUAHA3PZb1FemkAIeQM5t72Lw== - dependencies: - web3-core "1.8.0" - web3-core-helpers "1.8.0" - web3-core-method "1.8.0" - web3-core-subscriptions "1.8.0" - web3-eth-abi "1.8.0" - web3-eth-accounts "1.8.0" - web3-eth-contract "1.8.0" - web3-eth-ens "1.8.0" - web3-eth-iban "1.8.0" - web3-eth-personal "1.8.0" - web3-net "1.8.0" - web3-utils "1.8.0" - -web3-net@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-net/-/web3-net-1.8.0.tgz" - integrity sha512-kX6EAacK7QrOe7DOh0t5yHS5q2kxZmTCxPVwSz9io9xBeE4n4UhmzGJ/VfhP2eM3OPKYeypcR3LEO6zZ8xn2vw== - dependencies: - web3-core "1.8.0" - web3-core-method "1.8.0" - web3-utils "1.8.0" - -web3-providers-http@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.0.tgz" - integrity sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw== - dependencies: - abortcontroller-polyfill "^1.7.3" - cross-fetch "^3.1.4" - es6-promise "^4.2.8" - web3-core-helpers "1.8.0" - -web3-providers-ipc@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.0.tgz" - integrity sha512-tAXHtVXNUOgehaBU8pzAlB3qhjn/PRpjdzEjzHNFqtRRTwzSEKOJxFeEhaUA4FzHnTlbnrs8ujHWUitcp1elfg== - dependencies: - oboe "2.1.5" - web3-core-helpers "1.8.0" - -web3-providers-ws@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.0.tgz" - integrity sha512-bcZtSifsqyJxwkfQYamfdIRp4nhj9eJd7cxHg1uUkfLJK125WP96wyJL1xbPt7qt0MpfnTFn8/UuIqIB6nFENg== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.8.0" - websocket "^1.0.32" - -web3-shh@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.0.tgz" - integrity sha512-DNRgSa9Jf9xYFUGKSMylrf+zt3MPjhI2qF+UWX07o0y3+uf8zalDGiJOWvIS4upAsdPiKKVJ7co+Neof47OMmg== - dependencies: - web3-core "1.8.0" - web3-core-method "1.8.0" - web3-core-subscriptions "1.8.0" - web3-net "1.8.0" - -web3-utils@1.8.0, web3-utils@^1.7.1, web3-utils@^1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz" - integrity sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ== - dependencies: - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -web3@^1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz" - integrity sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA== - dependencies: - web3-bzz "1.8.0" - web3-core "1.8.0" - web3-eth "1.8.0" - web3-eth-personal "1.8.0" - web3-net "1.8.0" - web3-shh "1.8.0" - web3-utils "1.8.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -websocket@^1.0.32: - version "1.0.34" - resolved "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - 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.0" - resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== - -which-typed-array@^1.1.2: - version "1.1.8" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz" - integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.20.0" - for-each "^0.3.3" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.9" - -which@1.3.1, which@^1.2.9: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@2.0.2, which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -wordwrapjs@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz" - integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== - dependencies: - reduce-flatten "^2.0.0" - typical "^5.2.0" - -workerpool@6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz" - integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== - -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - 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" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -write-json-file@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz" - integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.15" - make-dir "^2.1.0" - pify "^4.0.1" - sort-keys "^2.0.0" - write-file-atomic "^2.4.2" - -write-json-file@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz" - integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== - dependencies: - detect-indent "^6.0.0" - graceful-fs "^4.1.15" - is-plain-obj "^2.0.0" - make-dir "^3.0.0" - sort-keys "^4.0.0" - write-file-atomic "^3.0.0" - -write-pkg@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz" - integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== - dependencies: - sort-keys "^2.0.0" - type-fest "^0.4.1" - write-json-file "^3.2.0" - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@^3.0.0: - version "3.3.3" - resolved "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xhr-request-promise@^0.1.2: - version "0.1.3" - resolved "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz" - integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== - dependencies: - xhr-request "^1.1.0" - -xhr-request@^1.0.1, xhr-request@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz" - integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== - dependencies: - buffer-to-arraybuffer "^0.0.5" - object-assign "^4.1.1" - query-string "^5.0.1" - simple-get "^2.7.0" - timed-out "^4.0.1" - url-set-query "^1.0.0" - xhr "^2.0.4" - -xhr@^2.0.4, xhr@^2.3.3: - version "2.6.0" - resolved "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz" - integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== - dependencies: - global "~4.4.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - -xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz" - integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== - -xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" - 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" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0, yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@20.2.4, yargs-parser@^20.2.2: - version "20.2.4" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@21.0.1, yargs-parser@^21.0.0: - version "21.0.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== - -yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.0" - -yargs@13.3.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.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 "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@16.2.0, yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.3.1, yargs@^17.4.0: - version "17.6.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz" - integrity sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g== - 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.0.0" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + "web3-core" "1.8.0" + "web3-core-helpers" "1.8.0" + "web3-core-method" "1.8.0" + "web3-net" "1.8.0" + "web3-utils" "1.8.0" + +"web3-eth@1.7.4": + "integrity" "sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug==" + "resolved" "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "web3-core" "1.7.4" + "web3-core-helpers" "1.7.4" + "web3-core-method" "1.7.4" + "web3-core-subscriptions" "1.7.4" + "web3-eth-abi" "1.7.4" + "web3-eth-accounts" "1.7.4" + "web3-eth-contract" "1.7.4" + "web3-eth-ens" "1.7.4" + "web3-eth-iban" "1.7.4" + "web3-eth-personal" "1.7.4" + "web3-net" "1.7.4" + "web3-utils" "1.7.4" + +"web3-eth@1.8.0": + "integrity" "sha512-hist52os3OT4TQFB/GxPSMxTh3995sz6LPvQpPvj7ktSbpg9RNSFaSsPlCT63wUAHA3PZb1FemkAIeQM5t72Lw==" + "resolved" "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "web3-core" "1.8.0" + "web3-core-helpers" "1.8.0" + "web3-core-method" "1.8.0" + "web3-core-subscriptions" "1.8.0" + "web3-eth-abi" "1.8.0" + "web3-eth-accounts" "1.8.0" + "web3-eth-contract" "1.8.0" + "web3-eth-ens" "1.8.0" + "web3-eth-iban" "1.8.0" + "web3-eth-personal" "1.8.0" + "web3-net" "1.8.0" + "web3-utils" "1.8.0" + +"web3-net@1.7.4": + "integrity" "sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg==" + "resolved" "https://registry.npmjs.org/web3-net/-/web3-net-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "web3-core" "1.7.4" + "web3-core-method" "1.7.4" + "web3-utils" "1.7.4" + +"web3-net@1.8.0": + "integrity" "sha512-kX6EAacK7QrOe7DOh0t5yHS5q2kxZmTCxPVwSz9io9xBeE4n4UhmzGJ/VfhP2eM3OPKYeypcR3LEO6zZ8xn2vw==" + "resolved" "https://registry.npmjs.org/web3-net/-/web3-net-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "web3-core" "1.8.0" + "web3-core-method" "1.8.0" + "web3-utils" "1.8.0" + +"web3-provider-engine@16.0.3": + "integrity" "sha512-Q3bKhGqLfMTdLvkd4TtkGYJHcoVQ82D1l8jTIwwuJp/sAp7VHnRYb9YJ14SW/69VMWoOhSpPLZV2tWb9V0WJoA==" + "resolved" "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-16.0.3.tgz" + "version" "16.0.3" + dependencies: + "@ethereumjs/tx" "^3.3.0" + "async" "^2.5.0" + "backoff" "^2.5.0" + "clone" "^2.0.0" + "cross-fetch" "^2.1.0" + "eth-block-tracker" "^4.4.2" + "eth-json-rpc-filters" "^4.2.1" + "eth-json-rpc-infura" "^5.1.0" + "eth-json-rpc-middleware" "^6.0.0" + "eth-rpc-errors" "^3.0.0" + "eth-sig-util" "^1.4.2" + "ethereumjs-block" "^1.2.2" + "ethereumjs-util" "^5.1.5" + "ethereumjs-vm" "^2.3.4" + "json-stable-stringify" "^1.0.1" + "promise-to-callback" "^1.0.0" + "readable-stream" "^2.2.9" + "request" "^2.85.0" + "semaphore" "^1.0.3" + "ws" "^5.1.1" + "xhr" "^2.2.0" + "xtend" "^4.0.1" + +"web3-providers-http@1.7.4": + "integrity" "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==" + "resolved" "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "web3-core-helpers" "1.7.4" + "xhr2-cookies" "1.1.0" + +"web3-providers-http@1.8.0": + "integrity" "sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw==" + "resolved" "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "abortcontroller-polyfill" "^1.7.3" + "cross-fetch" "^3.1.4" + "es6-promise" "^4.2.8" + "web3-core-helpers" "1.8.0" + +"web3-providers-ipc@1.7.4": + "integrity" "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==" + "resolved" "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "oboe" "2.1.5" + "web3-core-helpers" "1.7.4" + +"web3-providers-ipc@1.8.0": + "integrity" "sha512-tAXHtVXNUOgehaBU8pzAlB3qhjn/PRpjdzEjzHNFqtRRTwzSEKOJxFeEhaUA4FzHnTlbnrs8ujHWUitcp1elfg==" + "resolved" "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "oboe" "2.1.5" + "web3-core-helpers" "1.8.0" + +"web3-providers-ws@1.7.4": + "integrity" "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==" + "resolved" "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "eventemitter3" "4.0.4" + "web3-core-helpers" "1.7.4" + "websocket" "^1.0.32" + +"web3-providers-ws@1.8.0": + "integrity" "sha512-bcZtSifsqyJxwkfQYamfdIRp4nhj9eJd7cxHg1uUkfLJK125WP96wyJL1xbPt7qt0MpfnTFn8/UuIqIB6nFENg==" + "resolved" "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "eventemitter3" "4.0.4" + "web3-core-helpers" "1.8.0" + "websocket" "^1.0.32" + +"web3-shh@1.7.4": + "integrity" "sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A==" + "resolved" "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "web3-core" "1.7.4" + "web3-core-method" "1.7.4" + "web3-core-subscriptions" "1.7.4" + "web3-net" "1.7.4" + +"web3-shh@1.8.0": + "integrity" "sha512-DNRgSa9Jf9xYFUGKSMylrf+zt3MPjhI2qF+UWX07o0y3+uf8zalDGiJOWvIS4upAsdPiKKVJ7co+Neof47OMmg==" + "resolved" "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "web3-core" "1.8.0" + "web3-core-method" "1.8.0" + "web3-core-subscriptions" "1.8.0" + "web3-net" "1.8.0" + +"web3-utils@^1.7.1", "web3-utils@^1.8.0", "web3-utils@1.8.0": + "integrity" "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==" + "resolved" "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "bn.js" "^5.2.1" + "ethereum-bloom-filters" "^1.0.6" + "ethereumjs-util" "^7.1.0" + "ethjs-unit" "0.1.6" + "number-to-bn" "1.7.0" + "randombytes" "^2.1.0" + "utf8" "3.0.0" + +"web3-utils@1.7.4": + "integrity" "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==" + "resolved" "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "bn.js" "^5.2.1" + "ethereum-bloom-filters" "^1.0.6" + "ethereumjs-util" "^7.1.0" + "ethjs-unit" "0.1.6" + "number-to-bn" "1.7.0" + "randombytes" "^2.1.0" + "utf8" "3.0.0" + +"web3@*": + "integrity" "sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA==" + "resolved" "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "web3-bzz" "1.8.0" + "web3-core" "1.8.0" + "web3-eth" "1.8.0" + "web3-eth-personal" "1.8.0" + "web3-net" "1.8.0" + "web3-shh" "1.8.0" + "web3-utils" "1.8.0" + +"web3@^1.0.0-beta.36", "web3@^1.8.0": + "integrity" "sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA==" + "resolved" "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "web3-bzz" "1.8.0" + "web3-core" "1.8.0" + "web3-eth" "1.8.0" + "web3-eth-personal" "1.8.0" + "web3-net" "1.8.0" + "web3-shh" "1.8.0" + "web3-utils" "1.8.0" + +"web3@1.7.4": + "integrity" "sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A==" + "resolved" "https://registry.npmjs.org/web3/-/web3-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "web3-bzz" "1.7.4" + "web3-core" "1.7.4" + "web3-eth" "1.7.4" + "web3-eth-personal" "1.7.4" + "web3-net" "1.7.4" + "web3-shh" "1.7.4" + "web3-utils" "1.7.4" + +"webidl-conversions@^3.0.0": + "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + "version" "3.0.1" + +"websocket@^1.0.32": + "integrity" "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==" + "resolved" "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz" + "version" "1.0.34" + dependencies: + "bufferutil" "^4.0.1" + "debug" "^2.2.0" + "es5-ext" "^0.10.50" + "typedarray-to-buffer" "^3.1.5" + "utf-8-validate" "^5.0.2" + "yaeti" "^0.0.6" + +"whatwg-fetch@^2.0.4": + "integrity" "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + "resolved" "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz" + "version" "2.0.4" + +"whatwg-url@^5.0.0": + "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "tr46" "~0.0.3" + "webidl-conversions" "^3.0.0" + +"which-boxed-primitive@^1.0.2": + "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" + "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + "version" "1.0.2" + 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": + "integrity" "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" + "version" "2.0.0" + +"which-typed-array@^1.1.2": + "integrity" "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==" + "resolved" "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz" + "version" "1.1.8" + dependencies: + "available-typed-arrays" "^1.0.5" + "call-bind" "^1.0.2" + "es-abstract" "^1.20.0" + "for-each" "^0.3.3" + "has-tostringtag" "^1.0.0" + "is-typed-array" "^1.1.9" + +"which@^1.2.9": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"which@^2.0.1", "which@^2.0.2", "which@2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"which@1.3.1": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"wide-align@^1.1.5": + "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "string-width" "^1.0.2 || 2 || 3 || 4" + +"wide-align@1.1.3": + "integrity" "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "string-width" "^1.0.2 || 2" + +"word-wrap@^1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" + +"wordwrap@^1.0.0": + "integrity" "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + "resolved" "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + "version" "1.0.0" + +"wordwrapjs@^4.0.0": + "integrity" "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==" + "resolved" "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "reduce-flatten" "^2.0.0" + "typical" "^5.2.0" + +"workerpool@6.2.0": + "integrity" "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz" + "version" "6.2.0" + +"workerpool@6.2.1": + "integrity" "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" + "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" + "version" "6.2.1" + +"wrap-ansi@^5.1.0": + "integrity" "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "ansi-styles" "^3.2.0" + "string-width" "^3.0.0" + "strip-ansi" "^5.0.0" + +"wrap-ansi@^6.2.0": + "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrappy@1": + "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"write-file-atomic@^2.4.2": + "integrity" "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" + "version" "2.4.3" + dependencies: + "graceful-fs" "^4.1.11" + "imurmurhash" "^0.1.4" + "signal-exit" "^3.0.2" + +"write-file-atomic@^3.0.0": + "integrity" "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "imurmurhash" "^0.1.4" + "is-typedarray" "^1.0.0" + "signal-exit" "^3.0.2" + "typedarray-to-buffer" "^3.1.5" + +"write-file-atomic@^4.0.0", "write-file-atomic@^4.0.1": + "integrity" "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "imurmurhash" "^0.1.4" + "signal-exit" "^3.0.7" + +"write-json-file@^3.2.0": + "integrity" "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==" + "resolved" "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "detect-indent" "^5.0.0" + "graceful-fs" "^4.1.15" + "make-dir" "^2.1.0" + "pify" "^4.0.1" + "sort-keys" "^2.0.0" + "write-file-atomic" "^2.4.2" + +"write-json-file@^4.3.0": + "integrity" "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==" + "resolved" "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "detect-indent" "^6.0.0" + "graceful-fs" "^4.1.15" + "is-plain-obj" "^2.0.0" + "make-dir" "^3.0.0" + "sort-keys" "^4.0.0" + "write-file-atomic" "^3.0.0" + +"write-pkg@^4.0.0": + "integrity" "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==" + "resolved" "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "sort-keys" "^2.0.0" + "type-fest" "^0.4.1" + "write-json-file" "^3.2.0" + +"ws@^3.0.0": + "integrity" "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==" + "resolved" "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz" + "version" "3.3.3" + dependencies: + "async-limiter" "~1.0.0" + "safe-buffer" "~5.1.0" + "ultron" "~1.1.0" + +"ws@^5.1.1": + "integrity" "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==" + "resolved" "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz" + "version" "5.2.3" + dependencies: + "async-limiter" "~1.0.0" + +"ws@^7.4.6": + "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + "version" "7.5.9" + +"ws@7.4.6": + "integrity" "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" + "version" "7.4.6" + +"xhr-request-promise@^0.1.2": + "integrity" "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==" + "resolved" "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz" + "version" "0.1.3" + dependencies: + "xhr-request" "^1.1.0" + +"xhr-request@^1.0.1", "xhr-request@^1.1.0": + "integrity" "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==" + "resolved" "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "buffer-to-arraybuffer" "^0.0.5" + "object-assign" "^4.1.1" + "query-string" "^5.0.1" + "simple-get" "^2.7.0" + "timed-out" "^4.0.1" + "url-set-query" "^1.0.0" + "xhr" "^2.0.4" + +"xhr@^2.0.4", "xhr@^2.2.0", "xhr@^2.3.3": + "integrity" "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==" + "resolved" "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz" + "version" "2.6.0" + dependencies: + "global" "~4.4.0" + "is-function" "^1.0.1" + "parse-headers" "^2.0.0" + "xtend" "^4.0.0" + +"xhr2-cookies@1.1.0": + "integrity" "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==" + "resolved" "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "cookiejar" "^2.1.1" + +"xmlhttprequest@1.8.0": + "integrity" "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==" + "resolved" "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz" + "version" "1.8.0" + +"xtend@^4.0.0", "xtend@^4.0.1", "xtend@~4.0.0", "xtend@~4.0.1": + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" + +"xtend@~2.1.1": + "integrity" "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "object-keys" "~0.4.0" + +"y18n@^4.0.0": + "integrity" "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" + "version" "4.0.3" + +"y18n@^5.0.5": + "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + "version" "5.0.8" + +"yaeti@^0.0.6": + "integrity" "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" + "resolved" "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" + "version" "0.0.6" + +"yallist@^3.0.0", "yallist@^3.1.1": + "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + "version" "3.1.1" + +"yallist@^3.0.2": + "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + "version" "3.1.1" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yaml@^1.10.0", "yaml@^1.10.2": + "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + "version" "1.10.2" + +"yargs-parser@^13.1.0": + "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" + "version" "13.1.2" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs-parser@^13.1.2", "yargs-parser@13.1.2": + "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" + "version" "13.1.2" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs-parser@^20.2.2": + "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + "version" "20.2.9" + +"yargs-parser@^20.2.3": + "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + "version" "20.2.9" + +"yargs-parser@^21.0.0": + "integrity" "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + "version" "21.1.1" + +"yargs-parser@20.2.4": + "integrity" "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" + "version" "20.2.4" + +"yargs-parser@21.0.1": + "integrity" "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" + "version" "21.0.1" + +"yargs-unparser@1.6.0": + "integrity" "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==" + "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz" + "version" "1.6.0" + dependencies: + "flat" "^4.1.0" + "lodash" "^4.17.15" + "yargs" "^13.3.0" + +"yargs-unparser@2.0.0": + "integrity" "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==" + "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "camelcase" "^6.0.0" + "decamelize" "^4.0.0" + "flat" "^5.0.2" + "is-plain-obj" "^2.1.0" + +"yargs@^13.3.0", "yargs@13.3.2": + "integrity" "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" + "version" "13.3.2" + dependencies: + "cliui" "^5.0.0" + "find-up" "^3.0.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" "^3.0.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^13.1.2" + +"yargs@^16.2.0", "yargs@16.2.0": + "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + "version" "16.2.0" + dependencies: + "cliui" "^7.0.2" + "escalade" "^3.1.1" + "get-caller-file" "^2.0.5" + "require-directory" "^2.1.1" + "string-width" "^4.2.0" + "y18n" "^5.0.5" + "yargs-parser" "^20.2.2" + +"yargs@^17.3.1": + "integrity" "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz" + "version" "17.6.0" + 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.0.0" + +"yargs@^17.4.0": + "integrity" "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz" + "version" "17.6.0" + 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.0.0" + +"yargs@13.2.4": + "integrity" "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz" + "version" "13.2.4" + dependencies: + "cliui" "^5.0.0" + "find-up" "^3.0.0" + "get-caller-file" "^2.0.1" + "os-locale" "^3.1.0" + "require-directory" "^2.1.1" + "require-main-filename" "^2.0.0" + "set-blocking" "^2.0.0" + "string-width" "^3.0.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^13.1.0" + +"yn@3.1.1": + "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + "version" "3.1.1" + +"yocto-queue@^0.1.0": + "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + "version" "0.1.0" From 667e035c09c7227451eea27710adcd36ac464408 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 4 Oct 2022 22:00:37 +0400 Subject: [PATCH 0169/1247] init + dev notes --- package.json | 2 +- .../account-abstraction/src/BaseWalletAPI.ts | 4 + .../src/DeterministicDeployer.ts | 2 + .../account-abstraction/src/HttpRpcClient.ts | 2 + .../account-abstraction/src/PaymasterAPI.ts | 19 ++- packages/account-abstraction/src/Provider.ts | 4 + .../src/SimpleWalletAPI.ts | 3 + packages/smart-account/package.json | 1 + packages/smart-account/src/SmartAccount.ts | 22 ++- .../src/providers/SmartAccountProvider.ts | 99 +++++++++++ packages/smart-account/src/providers/types.ts | 42 +++++ packages/smart-account/src/signers/Signer.ts | 48 ++++++ .../src/signers/SmartAccountSigner.ts | 154 ++++++++++++++++++ 13 files changed, 395 insertions(+), 7 deletions(-) create mode 100644 packages/smart-account/src/providers/SmartAccountProvider.ts create mode 100644 packages/smart-account/src/providers/types.ts create mode 100644 packages/smart-account/src/signers/Signer.ts create mode 100644 packages/smart-account/src/signers/SmartAccountSigner.ts diff --git a/package.json b/package.json index 3367bdaab..9e723048f 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.5.4", - "nx": "^14.8.2", + "nx": "^14.8.3", "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1" diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index ac096fc6d..66cb2018d 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -23,6 +23,10 @@ import { getRequestId } from '@biconomy-sdk/common' * - createUnsignedUserOp - given "target" and "calldata", fill userOp to perform that operation from the wallet. * - createSignedUserOp - helper to call the above createUnsignedUserOp, and then extract the requestId and sign it */ + + +// Note: Resembles SmartAccount methods itself. Could be sperated out across smart-account & || transactions || new package and reclaim + export abstract class BaseWalletAPI { private senderAddress!: string private isPhantom = true diff --git a/packages/account-abstraction/src/DeterministicDeployer.ts b/packages/account-abstraction/src/DeterministicDeployer.ts index c148cb783..d93d14df2 100644 --- a/packages/account-abstraction/src/DeterministicDeployer.ts +++ b/packages/account-abstraction/src/DeterministicDeployer.ts @@ -7,6 +7,8 @@ import { TransactionRequest } from '@ethersproject/abstract-provider' * wrapper class for Arachnid's deterministic deployer * (deterministic deployer used by 'hardhat-deployer'. generates the same addresses as "hardhat-deploy") */ + +// TODO :: Updates based on https://github.com/bcnmy/account-abstraction/tree/develop-chirag export class DeterministicDeployer { /** * return the address this code will get deployed to. diff --git a/packages/account-abstraction/src/HttpRpcClient.ts b/packages/account-abstraction/src/HttpRpcClient.ts index eb02fedc1..c4b38076c 100644 --- a/packages/account-abstraction/src/HttpRpcClient.ts +++ b/packages/account-abstraction/src/HttpRpcClient.ts @@ -18,6 +18,8 @@ export class HttpRpcClient { }) } + // TODO : add version of HttpRpcClient || interface in RPC relayer to sendSCWTransactionToRelayer + async sendUserOpToBundler (userOp1: UserOperationStruct): Promise { const userOp = await resolveProperties(userOp1) const hexifiedUserOp: any = diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index d82d884cd..96e62eb06 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -1,8 +1,25 @@ import { UserOperationStruct } from '@account-abstraction/contracts' +import { resolveProperties } from '@ethersproject/properties' +import axios from 'axios' // httpSendRequest or through NodeClient export class PaymasterAPI { + + // Might maintain API key at smart account level + constructor(readonly apiUrl: string, readonly dappAPIKey: string) { + axios.defaults.baseURL = apiUrl + } + async getPaymasterAndData (userOp: Partial): Promise { console.log(userOp) - return '0x' + userOp = await resolveProperties(userOp) + // this.nodeClient.paymasterVerify() + // Note: Might be different service that bypass SDK backend node + const result = await axios.post('/signPaymaster', { + dappAPIKey: this.dappAPIKey, + userOp, + }) + + return result.data.paymasterAndData + // Fallback : return '0x' } } diff --git a/packages/account-abstraction/src/Provider.ts b/packages/account-abstraction/src/Provider.ts index 930c20638..661b69d4a 100644 --- a/packages/account-abstraction/src/Provider.ts +++ b/packages/account-abstraction/src/Provider.ts @@ -9,6 +9,10 @@ import { HttpRpcClient } from './HttpRpcClient' import { DeterministicDeployer } from './DeterministicDeployer' import { Signer } from '@ethersproject/abstract-signer' +// TODO: Update in the context of SmartAccount and WalletFactory aka deployer +// Might need smart account state for contract addresses + +// To be used in SmartAccount to init 4337 provider export async function newProvider ( originalProvider: JsonRpcProvider, config: ClientConfig, diff --git a/packages/account-abstraction/src/SimpleWalletAPI.ts b/packages/account-abstraction/src/SimpleWalletAPI.ts index 2facb84fb..1614a48fc 100644 --- a/packages/account-abstraction/src/SimpleWalletAPI.ts +++ b/packages/account-abstraction/src/SimpleWalletAPI.ts @@ -17,6 +17,9 @@ import { Provider } from '@ethersproject/providers' * - nonce method is "nonce()" * - execute method is "execFromEntryPoint()" */ + +// Should be maintain SmartAccountAPI +// Review export class SimpleWalletAPI extends BaseWalletAPI { /** * base constructor. diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 88d4549c3..defd89652 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -58,6 +58,7 @@ "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", + "@0xsequence/network": "^0.41.0", "@gnosis.pm/safe-deployments": "^1.12.0", "@nomiclabs/hardhat-ethers": "^2.1.0", "@types/mocha": "^9.1.1", diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 2e78eca0c..ae3b65d4e 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -45,8 +45,12 @@ import { BalancesResponse, UsdBalanceResponse, } from '@biconomy-sdk/node-client' -import { stringify } from 'querystring' +// SmartAccount User Refund +import { JsonRpcSender } from '@0xsequence/network' + +// AA +import { newProvider, ERC4337EthersProvider } from '@biconomy-sdk/account-abstraction' // Create an instance of Smart Account with multi-chain support. class SmartAccount { @@ -71,11 +75,11 @@ class SmartAccount { providerUrlConfig!: ProviderUrlConfig[] - // providers!: Web3Provider[] provider!: Web3Provider - // 4337Signer - // 4337Provider + // 4337Provider + aaProvider!: ERC4337EthersProvider + // Ideally not JsonRpcSigner but extended signer // Also the original EOA signer signer!: JsonRpcSigner // We may have different signer for ERC4337 @@ -124,9 +128,13 @@ class SmartAccount { this.providerUrlConfig = this.#smartAccountConfig.providerUrlConfig || [] this.ethAdapter = {} this.supportedNetworkIds = this.#smartAccountConfig.supportedNetworksIds - + + // Should not break if we make this wallet connected provider optional (We'd have JsonRpcProvider / JsonRpcSender) this.provider = walletProvider + + // TODO:: Allow original signer to be passed and preserve this.signer = walletProvider.getSigner() + // Meaning : EOASigner? / SmartAccountSigner? this.contractUtils = new ContractUtils() this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) @@ -153,6 +161,10 @@ class SmartAccount { await this.transactionManager.initialize(this.relayer, this.nodeClient, this.contractUtils, state) + // TODO : Init aaProvider + + // TODO: Define and init SmartAccountProvider + return this } diff --git a/packages/smart-account/src/providers/SmartAccountProvider.ts b/packages/smart-account/src/providers/SmartAccountProvider.ts new file mode 100644 index 000000000..caf078734 --- /dev/null +++ b/packages/smart-account/src/providers/SmartAccountProvider.ts @@ -0,0 +1,99 @@ +import { ethers } from 'ethers' +import { BytesLike, Bytes } from '@ethersproject/bytes' +import { Web3Provider, ExternalProvider, BaseProvider, JsonRpcProvider, Networkish } from '@ethersproject/providers' +import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer' +import { SmartAccountSigner } from '../signers/SmartAccountSigner' +import { JsonRpcHandler } from './types' +import { BigNumber, Signer } from 'ethers' +import { TransactionResponse } from '@ethersproject/providers' + +import { + ChainId, + SendTransactionDto, + SignTransactionDto, + IWalletTransaction, +} from '@biconomy-sdk/core-types' + +// import { JsonRpcSender } from '@0xsequence/network' + +/*export class SmartAccountProvider extends Web3Provider { //implements JsonRpcHandler + + // defaultChainId is the default chainId to use with requests, but may be + // overridden by passing chainId argument to a specific request + readonly _defaultChainId?: number + + constructor(provider: ExternalProvider, defaultChainId?: ChainId) { + + provider = provider + super(provider, 'any') + + this._defaultChainId = Number(defaultChainId) + + } + + // getsigner() +}*/ + +// Other ways.. +// We could just extend BaseProvider +export class SmartAccountProvider extends BaseProvider { + + readonly signer!: SmartAccountSigner + + // + // Might need relayer url in config + constructor( + tempProvider: Web3Provider, + chainId: ChainId, + readonly originalSigner: Signer, // EOASigner + readonly originalProvider: BaseProvider, // could be Web3Provider // optional? cc @sachin + // readonly httpRpcClient: HttpRpcClient, // Required for relaying to rpc-relayer + // readonly smartAccountAPI: SmartAccountAPI ? // Could be useful/needful + ) { + + super({ + name: 'Smart Account User Refund Provider', + chainId: chainId + }) + // Signer needs config, originalSigner, way to dispatch to rpc-relayer, smart-account-apis + + // Might pass relayer url as config + this.signer = new SmartAccountSigner(tempProvider, chainId) + + } + + async init (): Promise { + // Could init client / API class instances + return this + } + + getSigner (): SmartAccountSigner { + return this.signer + } + + async getTransaction (transactionHash: string | Promise): Promise { + // TODO + // Getting wallet transaction + return await super.getTransaction(transactionHash) + } + + // Could be + // getTransactionReceipt + + // TODO + // Helper for fabricating a response in a format usable by ethers users... + async constructSmartAccountTransactionResponse (tx: IWalletTransaction): Promise { + console.log(tx) + return null + } + + // Could be extra method getAddress() or getSmartAccountAddress() + + // Could be extra method waitForTransaction() + //{ + // This will poll on transactionId provided by the relayer, over the socket using messaging-sdk + //} + + + +} \ No newline at end of file diff --git a/packages/smart-account/src/providers/types.ts b/packages/smart-account/src/providers/types.ts new file mode 100644 index 000000000..fab2752b2 --- /dev/null +++ b/packages/smart-account/src/providers/types.ts @@ -0,0 +1,42 @@ +export const JsonRpcVersion = '2.0' + +export interface JsonRpcRequest { + jsonrpc?: string + id?: number + method: string + params?: any[] +} + +export interface JsonRpcResponse { + jsonrpc: string + id: number + result: any + error?: ProviderRpcError +} + +export interface ProviderRpcError extends Error { + message: string; + code?: number; + data?: { + [key: string]: any; + }; +} + +export type JsonRpcResponseCallback = (error?: ProviderRpcError, response?: JsonRpcResponse) => void + +export type JsonRpcHandlerFunc = (request: JsonRpcRequest, callback: JsonRpcResponseCallback, chainId?: number) => void + +export interface JsonRpcHandler { + sendAsync: JsonRpcHandlerFunc +} + +export type JsonRpcFetchFunc = (method: string, params?: any[], chainId?: number) => Promise + +// EIP-1193 function signature +export type JsonRpcRequestFunc = (request: { method: string; params?: any[] }, chainId?: number) => Promise + +export type JsonRpcMiddleware = (next: JsonRpcHandlerFunc) => JsonRpcHandlerFunc + +export interface JsonRpcMiddlewareHandler { + sendAsyncMiddleware: JsonRpcMiddleware +} diff --git a/packages/smart-account/src/signers/Signer.ts b/packages/smart-account/src/signers/Signer.ts new file mode 100644 index 000000000..996740cf8 --- /dev/null +++ b/packages/smart-account/src/signers/Signer.ts @@ -0,0 +1,48 @@ +import { ethers, Signer as AbstractSigner } from 'ethers' +import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer' + +// ChainId , SmartAccountContext, SmartAccountConfig, SmartAccountState from @biconomy-sdk/core-types +import { + ChainId, + SendTransactionDto, + SignTransactionDto, + } from '@biconomy-sdk/core-types' + +import { JsonRpcProvider, TransactionResponse } from '@ethersproject/providers' +// Might as well be RpcRelayer +import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' +import { BytesLike } from '@ethersproject/bytes' +import { Deferrable } from 'ethers/lib/utils' +import { TransactionRequest } from '@ethersproject/providers' + +export abstract class Signer extends AbstractSigner { + abstract getProvider(chainId?: number): Promise + // Review + abstract getRelayer(chainId?: number): Promise + + // signMessage ..... + // Review + abstract signMessage(message: BytesLike, chainId?: ChainId): Promise + + // signTypedData .. + abstract signTypedData( + domain: TypedDataDomain, + types: Record>, + message: Record, + chainId?: ChainId, + allSigners?: boolean + ): Promise + + // sendTransaction takes an prepared transaction dto, and then has it signed by + // the signer, and finally sends it to the rpc-relayer for submission to an Ethereum network. + abstract sendTransaction( + transaction: Deferrable, + // sendTransactionDto: SendTransactionDto + ): Promise // Could be transaction hash or receipt // TBD but it must follow AbstractSigner + + // We might as well (just) have sendTransactionBatch that takes array of transactions / sendTransactionsDto + + // Signs the transaction with original signer... + abstract signTransaction(signTransactionDto: SignTransactionDto): Promise + +} \ No newline at end of file diff --git a/packages/smart-account/src/signers/SmartAccountSigner.ts b/packages/smart-account/src/signers/SmartAccountSigner.ts new file mode 100644 index 000000000..3c4bcb91f --- /dev/null +++ b/packages/smart-account/src/signers/SmartAccountSigner.ts @@ -0,0 +1,154 @@ +import { ethers } from 'ethers' +import { BytesLike, Bytes } from '@ethersproject/bytes' +import { Web3Provider, ExternalProvider, JsonRpcProvider, Networkish } from '@ethersproject/providers' +import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer' +import { Signer } from './Signer' + +import { Signer as EthersSigner } from '@ethersproject/abstract-signer' + +// ChainId , SmartAccountContext, SmartAccountConfig, SmartAccountState from @biconomy-sdk/core-types +import { + ChainId, + SendTransactionDto, + SignTransactionDto, + } from '@biconomy-sdk/core-types' + +// Might as well be RpcRelayer +import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' + +import { Deferrable } from 'ethers/lib/utils' +import { TransactionRequest, TransactionResponse } from '@ethersproject/providers' + +// Other ways : // Signer needs config, originalSigner, way to dispatch to rpc-relayer, smart-account-apis + +export class SmartAccountSigner extends Signer implements TypedDataSigner { + // Should be SmartAccountProvider (which makes me want to merge SmartAccountSigner in SmartAccountProvider file) + readonly provider: Web3Provider + // Review + readonly defaultChainId?: number + + constructor(provider: Web3Provider, defaultChainId?: number) { + super() + this.provider = provider + this.defaultChainId = defaultChainId + } + + _address!: string + + // Might have + // _context: not smartAccountContext but the addresses of contracts from SmartAccountState + // + + // TBD + private _providers: { [key: number]: Web3Provider } = {} + + + /** + * Note: When you do getAddress it could use provider.getAddress / provider.getSmartAccountAddress or directly access SmartAccountAPI + */ + async getAddress(): Promise { + if (this._address) return this._address + const accounts = await this.provider.send('eth_accounts', []) + this._address = accounts[0] + return ethers.utils.getAddress(this._address) + } + + async signTransaction(signTransactionDto: SignTransactionDto): Promise { + console.log(signTransactionDto) + const signature = ""; + return signature + } + + // getProvider + + getRelayer(chainId?: number): Promise { + console.log(chainId) + throw new Error('TODO') + } + + // Review + // getProvider returns a Web3Provider instance for the current chain. + // Note that this method is bound to a particular chain + + // Review for the provider we want here + async getProvider(chainId?: number): Promise { + if (chainId) { + const currentChainId = await this.getChainId() + if (currentChainId !== chainId) { + throw new Error(`signer is attempting to access chain ${chainId}, but is already bound to chain ${currentChainId}`) + } + } + return this.provider + } + + // handle compatibility with smart account's intent + async sendTransaction(transaction: Deferrable):Promise { + console.log(transaction) + const txHash = "" + + // @ts-ignore + return txHash + } + + // signMessage matches implementation from ethers JsonRpcSigner for compatibility, but with + // multi-chain support. + async signMessage(message: BytesLike, chainId?: ChainId): Promise { + console.log(chainId) + + // TODO: study. sender JsonRpcRouter sender + // const provider = await this.getSender(Number(chainId) || this.defaultChainId) + + const data = typeof message === 'string' ? ethers.utils.toUtf8Bytes(message) : message + const address = await this.getAddress() + return await this.provider!.send('personal_sign', [ethers.utils.hexlify(data), address]) + } + + // signTypedData matches implementation from ethers JsonRpcSigner for compatibility, but with + // multi-chain support. + // Review + async signTypedData( + domain: TypedDataDomain, + types: Record>, + message: Record, + chainId?: ChainId, + ): Promise { + console.log(chainId) + return await this.provider.send( + 'eth_signTypedData_v4', + [await this.getAddress(), ethers.utils._TypedDataEncoder.getPayload(domain, types, message)] + ) + } + + async _signTypedData( + domain: TypedDataDomain, + types: Record>, + message: Record, + chainId?: ChainId + ): Promise { + return this.signTypedData(domain, types, message, chainId) + } + + connectUnchecked(): ethers.providers.JsonRpcSigner { + throw new Error('connectUnchecked is unsupported') + } + + connect(provider: ethers.providers.Provider): ethers.providers.JsonRpcSigner { + console.log(provider) + throw new Error('unsupported: cannot alter JSON-RPC Signer connection') + } +} + + +// Other ways... +/*export class SmartAccountSigner extends EthersSigner { + + // Needs httpRpcClient to sendSCWTransactionToRelayer + constructor() { + + } + + // Note: Since we're following this interface I feel createTransaction (from TransactionManager) should be part of this + async sendTransaction (transaction: Deferrable): Promise { + + } +}*/ \ No newline at end of file From 23640fc4b3d05edee5ffca4ff8bf1b2781b97cfc Mon Sep 17 00:00:00 2001 From: Aman Raj Date: Wed, 5 Oct 2022 11:38:14 +0530 Subject: [PATCH 0170/1247] add README.md --- packages/web3-auth/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 packages/web3-auth/README.md diff --git a/packages/web3-auth/README.md b/packages/web3-auth/README.md new file mode 100644 index 000000000..31e3d590a --- /dev/null +++ b/packages/web3-auth/README.md @@ -0,0 +1,12 @@ +# `web3-auth` + +> A library to import the torus web3 social auth directly from biconomy-sdk. + +## Usage + +``` +import Torus from "@biconomy-sdk/web3-auth"; + +const torus = new Torus(); +torus.init(); +``` From cf53c42df4628cf9ccf4523f1d4c4af3b5ca6286 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 5 Oct 2022 13:25:09 +0400 Subject: [PATCH 0171/1247] update version --- packages/web3-auth/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index 40a782cc9..febe2340c 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/web3-auth", - "version": "1.0.12", + "version": "1.0.13", "description": "web3-auth for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From 14f1466a12161b4bd490383dba8c97eb796c96f3 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 5 Oct 2022 21:17:38 +0400 Subject: [PATCH 0172/1247] dev notes + temp fill aa provider --- .../src/ERC4337EthersProvider.ts | 2 +- packages/account-abstraction/src/Provider.ts | 8 ++++++++ packages/core-types/src/smart-account.types.ts | 6 ++---- packages/smart-account/src/SmartAccount.ts | 16 +++++++++++++--- packages/transactions/src/contract-utils.ts | 4 ++-- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/packages/account-abstraction/src/ERC4337EthersProvider.ts b/packages/account-abstraction/src/ERC4337EthersProvider.ts index d4af2a2d0..58ea8124b 100644 --- a/packages/account-abstraction/src/ERC4337EthersProvider.ts +++ b/packages/account-abstraction/src/ERC4337EthersProvider.ts @@ -21,7 +21,7 @@ export class ERC4337EthersProvider extends BaseProvider { readonly originalProvider: BaseProvider, readonly httpRpcClient: HttpRpcClient, readonly entryPoint: EntryPoint, - readonly smartWalletAPI: BaseWalletAPI + readonly smartWalletAPI: BaseWalletAPI // instead of here we could actually make one in SmartAccount.ts and provide ) { super({ name: 'ERC-4337 Custom Network', diff --git a/packages/account-abstraction/src/Provider.ts b/packages/account-abstraction/src/Provider.ts index 661b69d4a..93a205f9c 100644 --- a/packages/account-abstraction/src/Provider.ts +++ b/packages/account-abstraction/src/Provider.ts @@ -20,9 +20,17 @@ export async function newProvider ( ): Promise { const entryPoint = new EntryPoint__factory().attach(config.entryPointAddress).connect(originalProvider) + + // Initial SimpleWallet instance is not deployed and exists just for the interface + + const simpleWalletDeployer = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) + + // SmartAccountAPI const smartWalletAPI = new SimpleWalletAPI(originalProvider, entryPoint.address, undefined, originalSigner, simpleWalletDeployer, 0) + + const httpRpcClient = new HttpRpcClient(config.bundlerUrl, config.entryPointAddress, 31337) return await new ERC4337EthersProvider( config, diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 35c7ec3cd..9422ecf67 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -8,12 +8,10 @@ import { MultiSendContract } from './contracts/MultiSendContract' import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' import { SmartWalletContract } from './contracts/SmartWalletContract' import { GasLimit } from './transaction.types' -import { JsonRpcSigner } from '@ethersproject/providers' +import { Signer } from 'ethers' export interface SmartAccountConfig { - // owner: string - // version: string activeNetworkId: ChainId // same supportedNetworksIds: ChainId[] // Network[] chainId: CbainId, rpcUrl?: string backend_url: string, @@ -61,7 +59,7 @@ export type SignTransactionDto = { version: string tx: IWalletTransaction chainId: ChainId - signer: JsonRpcSigner + signer: Signer } export type SendTransactionDto = { diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index ae3b65d4e..d7e0683a8 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -38,7 +38,7 @@ import NodeClient, { } from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' -import TransactionManager, { ContractUtils, smartAccountSignMessage } from '@biconomy-sdk/transactions' +import TransactionManager, { ContractUtils, smartAccountSignMessage, smartAccountSignTypedData } from '@biconomy-sdk/transactions' import { BalancesDto } from '@biconomy-sdk/node-client' import { TransactionResponse, @@ -50,7 +50,12 @@ import { import { JsonRpcSender } from '@0xsequence/network' // AA -import { newProvider, ERC4337EthersProvider } from '@biconomy-sdk/account-abstraction' +import { + newProvider, + ERC4337EthersProvider, + ClientConfig, + ERC4337EthersSigner } from '@biconomy-sdk/account-abstraction' +import { Signer } from 'ethers' // Create an instance of Smart Account with multi-chain support. class SmartAccount { @@ -81,7 +86,7 @@ class SmartAccount { aaProvider!: ERC4337EthersProvider // Ideally not JsonRpcSigner but extended signer // Also the original EOA signer - signer!: JsonRpcSigner + signer!: Signer // We may have different signer for ERC4337 nodeClient!: NodeClient @@ -162,6 +167,11 @@ class SmartAccount { await this.transactionManager.initialize(this.relayer, this.nodeClient, this.contractUtils, state) // TODO : Init aaProvider + const clientConfig: ClientConfig = { + bundlerUrl: '', // merge with default config + entryPointAddress: '', // merge with default config + } + this.aaProvider = await newProvider(this.provider, clientConfig, this.signer) // TODO: Define and init SmartAccountProvider diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index 56bd504f9..8a47c6d8e 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -17,7 +17,7 @@ import { getMultiSendCallOnlyContract, getSmartWalletContract } from './utils/FetchContractsInfo' -import { ethers } from 'ethers' +import { ethers, Signer } from 'ethers' import EvmNetworkManager from '@biconomy-sdk/ethers-lib' import { JsonRpcSigner } from '@ethersproject/providers' import { SmartAccountVersion } from '@biconomy-sdk/core-types' @@ -44,7 +44,7 @@ class ContractUtils { this.smartWalletFactoryContract = {} } - public async initialize(supportedChains: ChainConfig[], signer: JsonRpcSigner) { + public async initialize(supportedChains: ChainConfig[], signer: Signer) { const chainsInfo = supportedChains; for (let i = 0; i < chainsInfo.length; i++) { From 7d58d5319e07f0318407350374b76aa7d63beff6 Mon Sep 17 00:00:00 2001 From: talha Date: Thu, 6 Oct 2022 01:35:54 +0500 Subject: [PATCH 0173/1247] logical changes --- packages/account-abstraction/package.json | 1 + packages/account-abstraction/src/Provider.ts | 6 +- ...{SimpleWalletAPI.ts => SmartAccountAPI.ts} | 51 +- .../src/WalletFactoryAPI.ts | 17 + packages/account-abstraction/src/index.ts | 2 +- .../core-types/src/smart-account.types.ts | 3 + .../src/contracts/contractInstancesEthers.ts | 27 + packages/ethers-lib/src/index.ts | 21 + packages/smart-account/src/SmartAccount.ts | 16 + yarn.lock | 21850 +++++++++------- 10 files changed, 12053 insertions(+), 9941 deletions(-) rename packages/account-abstraction/src/{SimpleWalletAPI.ts => SmartAccountAPI.ts} (71%) create mode 100644 packages/account-abstraction/src/WalletFactoryAPI.ts diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index ff52ff124..44c7a2ca2 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -52,6 +52,7 @@ "devDependencies": { "@biconomy-sdk/common": "*", "@biconomy-sdk/core-types": "*", + "@biconomy-sdk/ethers-lib": "*", "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", "@nomicfoundation/hardhat-toolbox": "^1.0.2", "@nomiclabs/hardhat-ethers": "^2.0.0", diff --git a/packages/account-abstraction/src/Provider.ts b/packages/account-abstraction/src/Provider.ts index 661b69d4a..e5f7b7bd4 100644 --- a/packages/account-abstraction/src/Provider.ts +++ b/packages/account-abstraction/src/Provider.ts @@ -3,7 +3,7 @@ import { JsonRpcProvider } from '@ethersproject/providers' import { EntryPoint__factory, SimpleWalletDeployer__factory } from '@account-abstraction/contracts' import { ClientConfig } from './ClientConfig' -import { SimpleWalletAPI } from './SimpleWalletAPI' +import { SmartAccountAPI } from './SmartAccountAPI' import { ERC4337EthersProvider } from './ERC4337EthersProvider' import { HttpRpcClient } from './HttpRpcClient' import { DeterministicDeployer } from './DeterministicDeployer' @@ -21,8 +21,8 @@ export async function newProvider ( ): Promise { const entryPoint = new EntryPoint__factory().attach(config.entryPointAddress).connect(originalProvider) // Initial SimpleWallet instance is not deployed and exists just for the interface - const simpleWalletDeployer = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) - const smartWalletAPI = new SimpleWalletAPI(originalProvider, entryPoint.address, undefined, originalSigner, simpleWalletDeployer, 0) + // const simpleWalletDeployer = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) + const smartWalletAPI = new SmartAccountAPI(originalProvider, entryPoint.address, '', originalSigner, '', '', 0) const httpRpcClient = new HttpRpcClient(config.bundlerUrl, config.entryPointAddress, 31337) return await new ERC4337EthersProvider( config, diff --git a/packages/account-abstraction/src/SimpleWalletAPI.ts b/packages/account-abstraction/src/SmartAccountAPI.ts similarity index 71% rename from packages/account-abstraction/src/SimpleWalletAPI.ts rename to packages/account-abstraction/src/SmartAccountAPI.ts index 1614a48fc..3534149c8 100644 --- a/packages/account-abstraction/src/SimpleWalletAPI.ts +++ b/packages/account-abstraction/src/SmartAccountAPI.ts @@ -1,14 +1,14 @@ import { BigNumber, BigNumberish } from 'ethers' import { SimpleWallet, - SimpleWallet__factory, SimpleWalletDeployer, - SimpleWalletDeployer__factory + SimpleWallet__factory, } from '@account-abstraction/contracts' import { arrayify, hexConcat } from 'ethers/lib/utils' import { Signer } from '@ethersproject/abstract-signer' import { BaseWalletAPI } from './BaseWalletAPI' import { Provider } from '@ethersproject/providers' +import { WalletFactoryAPI } from './WalletFactoryAPI' /** * An implementation of the BaseWalletAPI using the SimpleWallet contract. @@ -20,7 +20,7 @@ import { Provider } from '@ethersproject/providers' // Should be maintain SmartAccountAPI // Review -export class SimpleWalletAPI extends BaseWalletAPI { +export class SmartAccountAPI extends BaseWalletAPI { /** * base constructor. * subclass SHOULD add parameters that define the owner (signer) of this wallet @@ -32,12 +32,12 @@ export class SimpleWalletAPI extends BaseWalletAPI { * @param index nonce value used when creating multiple wallets for the same owner */ constructor ( - provider: Provider, + provider: Provider, // may be removed in further development entryPointAddress: string, walletAddress: string | undefined, readonly owner: Signer, - readonly factoryAddress?: string, - // index is "salt" used to distinguish multiple wallets of the same signer. + readonly handlerAddress: string, + readonly factoryAddress: string, readonly index = 0 ) { super(provider, entryPointAddress, walletAddress) @@ -49,7 +49,7 @@ export class SimpleWalletAPI extends BaseWalletAPI { */ walletContract?: SimpleWallet - factory?: SimpleWalletDeployer + factory?: string async _getWalletContract (): Promise { if (this.walletContract == null) { @@ -63,16 +63,10 @@ export class SimpleWalletAPI extends BaseWalletAPI { * this value holds the "factory" address, followed by this wallet's information */ async getWalletInitCode (): Promise { - if (this.factory == null) { - if (this.factoryAddress != null && this.factoryAddress !== '') { - this.factory = SimpleWalletDeployer__factory.connect(this.factoryAddress, this.provider) - } else { - throw new Error('no factory to get initCode') - } - } + const deployWalletCallData = WalletFactoryAPI.deployWalletTransactionCallData(this.factoryAddress, await this.owner.getAddress(), this.entryPointAddress, this.handlerAddress, 0) return hexConcat([ - this.factory.address, - this.factory.interface.encodeFunctionData('deployWallet', [this.entryPointAddress, await this.owner.getAddress(), this.index]) + this.factoryAddress, + deployWalletCallData ]) } @@ -83,24 +77,23 @@ export class SimpleWalletAPI extends BaseWalletAPI { const walletContract = await this._getWalletContract() return await walletContract.nonce() } - - /** + /** * encode a method call from entryPoint to our contract * @param target * @param value * @param data */ - async encodeExecute (target: string, value: BigNumberish, data: string): Promise { - const walletContract = await this._getWalletContract() - return walletContract.interface.encodeFunctionData( - 'execFromEntryPoint', - [ - target, - value, - data - ]) - } - + async encodeExecute (target: string, value: BigNumberish, data: string): Promise { + const walletContract = await this._getWalletContract() + return walletContract.interface.encodeFunctionData( + 'execFromEntryPoint', + [ + target, + value, + data + ]) + } + // TODO: May be need to move this to ERC4337EthersPrivider async signRequestId (requestId: string): Promise { return await this.owner.signMessage(arrayify(requestId)) } diff --git a/packages/account-abstraction/src/WalletFactoryAPI.ts b/packages/account-abstraction/src/WalletFactoryAPI.ts new file mode 100644 index 000000000..d738290ea --- /dev/null +++ b/packages/account-abstraction/src/WalletFactoryAPI.ts @@ -0,0 +1,17 @@ + +import { Contract } from 'ethers' + +export class WalletFactoryAPI { + + // TODO: uncomment and enable constructor + // constructor( + // readonly factoryAddress: string + // ){} + + static deployWalletTransactionCallData (factoryAddress: string, owner: string, entryPoint: string, handler: string, index: number): string { + // these would be deployCounterfactualWallet + const factory = new Contract(factoryAddress, ['function deployCounterFactualWallet(address _owner, address _entryPoint, address _handler, uint _index) returns(address)']) + const encodedData = factory.interface.encodeFunctionData('deployCounterFactualWallet', [owner, entryPoint, handler, index]) + return encodedData + } +} \ No newline at end of file diff --git a/packages/account-abstraction/src/index.ts b/packages/account-abstraction/src/index.ts index e9d635318..2075077d4 100644 --- a/packages/account-abstraction/src/index.ts +++ b/packages/account-abstraction/src/index.ts @@ -1,4 +1,4 @@ -export { SimpleWalletAPI } from './SimpleWalletAPI' +export { SmartAccountAPI } from './SmartAccountAPI' export { PaymasterAPI } from './PaymasterAPI' export { newProvider } from './Provider' export { ERC4337EthersSigner } from './ERC4337EthersSigner' diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 35c7ec3cd..04eb3c6e8 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -20,6 +20,9 @@ export interface SmartAccountConfig { relayer_url: string, dappAPIKey?: string providerUrlConfig?: ProviderUrlConfig[] + entryPoint?: string + bundlerUrl?: string + paymasterAddress?: string } export type ProviderUrlConfig = { diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index c4512dcb8..0e01abfb5 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -22,6 +22,15 @@ import MultiSendCallOnlyEthersContract_v1_0_1 from './MultiSendCallOnly/v1.0.1/M import SmartWalletFacoryContractEthers_v1_0_0 from './SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract' import SmartWalletFacoryContractEthers_v1_0_1 from './SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract' +import { EntryPointContractV100__factory as EntryPointFactoryContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/EntryPointContractV100__factory' +import { EntryPointContractV101__factory as EntryPointFactoryContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/EntryPointContractV101__factory' + + +import EntryPointEthersContract_v1_0_0 from './EntryPointContract/v1.0.0/EntryPointEthersContract' +import EntryPointEthersContract_v1_0_1 from './EntryPointContract/v1.0.1/EntryPointEthersContract' + + + import { JsonRpcProvider } from '@ethersproject/providers' import { SmartAccountVersion } from '@biconomy-sdk/core-types' @@ -103,3 +112,21 @@ export function getSmartWalletFactoryContractInstance( return new SmartWalletFacoryContractEthers_v1_0_1(walletFactoryContract) } } + +export function getEntryPointFactoryContractInstance( + smartAccountVersion: SmartAccountVersion, + contractAddress: string, + provider: JsonRpcProvider +): | EntryPointEthersContract_v1_0_0 + | EntryPointEthersContract_v1_0_1 { + let walletFactoryContract + + switch (smartAccountVersion) { + case '1.0.0': + walletFactoryContract = EntryPointFactoryContractV100.connect(contractAddress, provider) + return new EntryPointEthersContract_v1_0_0(walletFactoryContract) + case '1.0.1': + walletFactoryContract = EntryPointFactoryContractV101.connect(contractAddress, provider) + return new EntryPointEthersContract_v1_0_1(walletFactoryContract) + } +} diff --git a/packages/ethers-lib/src/index.ts b/packages/ethers-lib/src/index.ts index b17459341..735817887 100644 --- a/packages/ethers-lib/src/index.ts +++ b/packages/ethers-lib/src/index.ts @@ -1,5 +1,26 @@ import EthersAdapter, { EthersAdapterConfig } from './EthersAdapter' import { IEthersTransactionOptions, IEthersTransactionResult } from './types' +export { SmartWalletContractV100__factory as SmartWalletContractV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContractV100__factory' +export { SmartWalletContractV101__factory as SmartWalletContractV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletContractV101__factory' + +export { MultiSendContractV100__factory as MultiSendContractV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/MultiSendContractV100__factory' +export { MultiSendContractV101__factory as MultiSendContractV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/MultiSendContractV101__factory' + +export { MultiSendCallOnlyContractV100__factory as MultiSendCallOnlyContractV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/MultiSendCallOnlyContractV100__factory' +export { MultiSendCallOnlyContractV101__factory as MultiSendCallOnlyContractV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/MultiSendCallOnlyContractV101__factory' + +export { SmartWalletFactoryContractV100__factory as SmartWalletFactoryContractV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFactoryContractV100__factory' +export { SmartWalletFactoryContractV101__factory as SmartWalletFactoryContractV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletFactoryContractV101__factory' + +export { EntryPointContractV100__factory as EntryPointFactoryContractV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/EntryPointContractV100__factory' +export { EntryPointContractV101__factory as EntryPointFactoryContractV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/EntryPointContractV101__factory' + + +export { EntryPointContractV100 } from '../typechain/src/ethers-v5/v1.0.0/EntryPointContractV100' +export { EntryPointContractV101 } from '../typechain/src/ethers-v5/v1.0.1/EntryPointContractV101' + + + export default EthersAdapter export { EthersAdapterConfig, IEthersTransactionOptions, IEthersTransactionResult } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index ae3b65d4e..3a1c06e11 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -117,6 +117,22 @@ class SmartAccount { * If you wish to use your own backend server and relayer service, pass the URLs here */ // review SmartAccountConfig + // TODO : EOA signer instead of { walletProvider } + // TODO : We Need to take EntryPoint | Paymaster | bundlerUrl address as optional ? + // TODO: May be need to manage separate config for Forward and gasless Flow + + + /** + Scw-Refund-Flow -- config + prepareRefundTransactionBatch + createRefundTransactionBatch + sendTransaction + */ + + /** + GassLess Flow -- config + sendGaslessTransaction + */ constructor(walletProvider: Web3Provider, config?: Partial) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } if (config) { diff --git a/yarn.lock b/yarn.lock index 94f0e654b..9bfd974b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,35 +2,54 @@ # yarn lockfile v1 +"@0xsequence/network@^0.41.0": + "integrity" "sha512-dRq0ywRKz3CA6c1OSzcD3SJXt35uPMc7OA9oj+tcpI/2FtbGkzsT5fwTDiKU86RYwiXg3GthS6a5j7LIJmVK0Q==" + "resolved" "https://registry.npmjs.org/@0xsequence/network/-/network-0.41.3.tgz" + "version" "0.41.3" + dependencies: + "@0xsequence/utils" "^0.41.3" + "@ethersproject/providers" "^5.5.1" + "ethers" "^5.5.2" + +"@0xsequence/utils@^0.41.3": + "integrity" "sha512-WY6x8Ja35eRcC69kK1MdvSYMSG8MIcSCEmJPUVYc31HsBkDCpjcroQqSl3MsxoP7YTv69XUbUdarReH9wA40lg==" + "resolved" "https://registry.npmjs.org/@0xsequence/utils/-/utils-0.41.3.tgz" + "version" "0.41.3" + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "ethers" "^5.5.2" + "js-base64" "^3.7.2" + "@account-abstraction/contracts@^0.2.0": - version "0.2.0" - resolved "https://registry.npmjs.org/@account-abstraction/contracts/-/contracts-0.2.0.tgz" - integrity sha512-CbPYA7o55u1S5Fee5qIWffD/4dxJ7v+86Si8TOUOE/tAMUWP+nzU1kHKUwFrM/HT8OxAQpeXccCD4UtROLtfwA== + "integrity" "sha512-CbPYA7o55u1S5Fee5qIWffD/4dxJ7v+86Si8TOUOE/tAMUWP+nzU1kHKUwFrM/HT8OxAQpeXccCD4UtROLtfwA==" + "resolved" "https://registry.npmjs.org/@account-abstraction/contracts/-/contracts-0.2.0.tgz" + "version" "0.2.0" "@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + "integrity" "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" + "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + "version" "2.2.0" dependencies: "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + "integrity" "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.19.3": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz" - integrity sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.19.3": + "integrity" "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==" + "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz" + "version" "7.19.3" -"@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz" - integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ== +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.4.0-0", "@babel/core@^7.8.0": + "integrity" "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz" + "version" "7.19.3" dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" @@ -42,62 +61,74 @@ "@babel/template" "^7.18.10" "@babel/traverse" "^7.19.3" "@babel/types" "^7.19.3" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.2" + "json5" "^2.2.1" + "semver" "^6.3.0" "@babel/generator@^7.19.3", "@babel/generator@^7.7.2": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz" - integrity sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ== + "integrity" "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz" + "version" "7.19.3" dependencies: "@babel/types" "^7.19.3" "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" + "jsesc" "^2.5.1" -"@babel/helper-compilation-targets@^7.19.3": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz" - integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.19.3": + "integrity" "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==" + "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz" + "version" "7.19.3" dependencies: "@babel/compat-data" "^7.19.3" "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - semver "^6.3.0" + "browserslist" "^4.21.3" + "semver" "^6.3.0" + +"@babel/helper-define-polyfill-provider@^0.3.3": + "integrity" "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" + "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + "debug" "^4.1.1" + "lodash.debounce" "^4.0.8" + "resolve" "^1.14.2" + "semver" "^6.1.2" "@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + "integrity" "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" + "version" "7.18.9" "@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== + "integrity" "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==" + "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" + "version" "7.19.0" dependencies: "@babel/template" "^7.18.10" "@babel/types" "^7.19.0" "@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + "integrity" "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + "integrity" "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-transforms@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz" - integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== + "integrity" "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz" + "version" "7.19.0" dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-module-imports" "^7.18.6" @@ -108,167 +139,186 @@ "@babel/traverse" "^7.19.0" "@babel/types" "^7.19.0" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz" - integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0": + "integrity" "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz" + "version" "7.19.0" "@babel/helper-simple-access@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" - integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + "integrity" "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + "integrity" "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-string-parser@^7.18.10": - version "7.18.10" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz" - integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + "integrity" "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" + "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz" + "version" "7.18.10" "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + "integrity" "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" + "version" "7.19.1" "@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + "integrity" "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" + "version" "7.18.6" "@babel/helpers@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz" - integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== + "integrity" "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==" + "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz" + "version" "7.19.0" dependencies: "@babel/template" "^7.18.10" "@babel/traverse" "^7.19.0" "@babel/types" "^7.19.0" "@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + "integrity" "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" + "chalk" "^2.0.0" + "js-tokens" "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.3": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz" - integrity sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ== + "integrity" "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz" + "version" "7.19.3" "@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + "version" "7.8.4" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + "integrity" "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + "version" "7.12.13" dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz" - integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + "integrity" "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-runtime@^7.5.5": + "integrity" "sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz" + "version" "7.19.1" + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "babel-plugin-polyfill-corejs2" "^0.3.3" + "babel-plugin-polyfill-corejs3" "^0.6.0" + "babel-plugin-polyfill-regenerator" "^0.4.1" + "semver" "^6.3.0" + +"@babel/runtime@^7.5.5": + "integrity" "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==" + "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz" + "version" "7.19.0" + dependencies: + "regenerator-runtime" "^0.13.4" + "@babel/template@^7.18.10", "@babel/template@^7.3.3": - version "7.18.10" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" - integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + "integrity" "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" + "version" "7.18.10" dependencies: "@babel/code-frame" "^7.18.6" "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.3", "@babel/traverse@^7.7.2": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz" - integrity sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ== + "integrity" "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz" + "version" "7.19.3" dependencies: "@babel/code-frame" "^7.18.6" "@babel/generator" "^7.19.3" @@ -278,118 +328,207 @@ "@babel/helper-split-export-declaration" "^7.18.6" "@babel/parser" "^7.19.3" "@babel/types" "^7.19.3" - debug "^4.1.0" - globals "^11.1.0" + "debug" "^4.1.0" + "globals" "^11.1.0" "@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.19.3", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.19.3" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz" - integrity sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw== + "integrity" "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz" + "version" "7.19.3" dependencies: "@babel/helper-string-parser" "^7.18.10" "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" + "to-fast-properties" "^2.0.0" "@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "integrity" "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + "version" "0.2.3" + +"@biconomy-sdk/account-abstraction@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/account-abstraction": + "resolved" "file:packages/account-abstraction" + "version" "1.0.13" + dependencies: + "@account-abstraction/contracts" "^0.2.0" + "@biconomy-sdk/common" "*" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/providers" "^5.7.0" + "@nomicfoundation/hardhat-network-helpers" "^1.0.6" + "@nomiclabs/hardhat-ethers" "^2.0.0" + "ethers" "^5.7.0" + "hardhat" "^2.9.7" + "solidity-coverage" "^0.7.22" + +"@biconomy-sdk/common@*", "@biconomy-sdk/common@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/common": + "resolved" "file:packages/common" + "version" "1.0.13" + dependencies: + "@account-abstraction/contracts" "^0.2.0" + "@ethersproject/abi" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/providers" "^5.7.0" + "@openzeppelin/contracts" "^4.7.3" + "ethers" "^5.7.0" + +"@biconomy-sdk/core-types@*", "@biconomy-sdk/core-types@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/core-types": + "resolved" "file:packages/core-types" + "version" "1.0.13" + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/contracts" "^5.6.0" + "@ethersproject/providers" "^5.6.8" + "@gnosis.pm/safe-deployments" "^1.16.0" + "web3-core" "^1.7.1" + +"@biconomy-sdk/ethers-lib@*", "@biconomy-sdk/ethers-lib@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/ethers-lib": + "resolved" "file:packages/ethers-lib" + "version" "1.0.13" + dependencies: + "@biconomy-sdk/core-types" "*" + "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" + "@nomiclabs/hardhat-ethers" "^2.1.0" + "@openzeppelin/contracts" "^4.6.0" + "scw-contracts-v1.0.0" "npm:scw-contracts@1.0.0" + "scw-contracts-v1.0.1" "npm:scw-contracts@1.0.8" + +"@biconomy-sdk/gas-estimator@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/gas-estimator": + "resolved" "file:packages/gas-estimator" + "version" "1.0.13" + dependencies: + "ethers" "^5.7.1" + +"@biconomy-sdk/node-client@*", "@biconomy-sdk/node-client@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/node-client": + "resolved" "file:packages/node-client" + "version" "1.0.13" + dependencies: + "@biconomy-sdk/core-types" "*" + "@ethersproject/abstract-signer" "^5.6.0" + "@gnosis.pm/safe-core-sdk" "^2.1.0" + "@nomiclabs/hardhat-ethers" "^2.1.0" + "node-fetch" "^2.6.6" + +"@biconomy-sdk/relayer@*", "@biconomy-sdk/relayer@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/relayer": + "resolved" "file:packages/relayer" + "version" "1.0.13" + dependencies: + "@biconomy-sdk/core-types" "*" + "@ethersproject/providers" "^5.6.8" + "ethers" "^5.6.9" + +"@biconomy-sdk/smart-account@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/smart-account": + "resolved" "file:packages/smart-account" + "version" "1.0.13" + dependencies: + "@0xsequence/network" "^0.41.0" + "@biconomy-sdk/core-types" "*" + "@biconomy-sdk/ethers-lib" "*" + "@biconomy-sdk/node-client" "*" + "@biconomy-sdk/relayer" "*" + "@biconomy-sdk/transactions" "*" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/contracts" "^5.6.0" + "@ethersproject/providers" "^5.6.8" + "@gnosis.pm/safe-deployments" "^1.12.0" + "@nomiclabs/hardhat-ethers" "^2.1.0" + "@types/mocha" "^9.1.1" + "concurrently" "^7.4.0" + +"@biconomy-sdk/transactions@*", "@biconomy-sdk/transactions@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/transactions": + "resolved" "file:packages/transactions" + "version" "1.0.13" + dependencies: + "@biconomy-sdk/core-types" "*" + "@biconomy-sdk/ethers-lib" "*" + "@biconomy-sdk/node-client" "*" + "@biconomy-sdk/relayer" "*" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/constants" "^5.6.1" + "ethereumjs-util" "^7.1.5" + "ethers" "^5.6.9" + +"@chainlink/contracts@^0.4.1": + "integrity" "sha512-wVI/KZ9nIH0iqoebVxYrZfNVWO23vwds1UrHdbF+S0JwyixtT+54xYGlot723jCrAeBeQHsDRQXnEhhbUEHpgQ==" + "resolved" "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.4.2.tgz" + "version" "0.4.2" + dependencies: + "@eth-optimism/contracts" "^0.5.21" "@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" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + "integrity" "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==" + "resolved" "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + "version" "0.8.1" dependencies: "@jridgewell/trace-mapping" "0.3.9" "@eslint/eslintrc@^1.3.2": - version "1.3.2" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz" - integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.15.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" - -"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.2", "@ethereumjs/block@^3.6.3": - version "3.6.3" - resolved "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz" - integrity sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg== - dependencies: - "@ethereumjs/common" "^2.6.5" - "@ethereumjs/tx" "^3.5.2" - ethereumjs-util "^7.1.5" - merkle-patricia-tree "^4.2.4" - -"@ethereumjs/blockchain@^5.5.2", "@ethereumjs/blockchain@^5.5.3": - version "5.5.3" - resolved "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz" - integrity sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/common" "^2.6.4" - "@ethereumjs/ethash" "^1.1.0" - debug "^4.3.3" - ethereumjs-util "^7.1.5" - level-mem "^5.0.1" - lru-cache "^5.1.1" - semaphore-async-await "^1.5.1" - -"@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": - version "2.6.5" - resolved "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz" - integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.5" - -"@ethereumjs/ethash@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz" - integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== - dependencies: - "@ethereumjs/block" "^3.5.0" - "@types/levelup" "^4.3.0" - buffer-xor "^2.0.1" - ethereumjs-util "^7.1.1" - miller-rabin "^4.0.0" - -"@ethereumjs/tx@^3.3.2", "@ethereumjs/tx@^3.5.1", "@ethereumjs/tx@^3.5.2": - version "3.5.2" - resolved "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz" - integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== + "integrity" "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "ajv" "^6.12.4" + "debug" "^4.3.2" + "espree" "^9.4.0" + "globals" "^13.15.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" + +"@eth-optimism/contracts@^0.5.21": + "integrity" "sha512-HbNUUDIM1dUAM0hWPfGp3l9/Zte40zi8QhVbUSIwdYRA7jG7cZgbteqavrjW8wwFqxkWX9IrtA0KAR7pNlSAIQ==" + "resolved" "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.37.tgz" + "version" "0.5.37" + dependencies: + "@eth-optimism/core-utils" "0.10.1" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + +"@eth-optimism/core-utils@0.10.1": + "integrity" "sha512-IJvG5UtYvyz6An9QdohlCLoeB3NBFxx2lRJKlPzvYYlfugUNNCHsajRIWIwJTcPRRma0WPd46JUsKACLJDdNrA==" + "resolved" "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.10.1.tgz" + "version" "0.10.1" + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/providers" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + "bufio" "^1.0.7" + "chai" "^4.3.4" + +"@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.4": + "integrity" "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==" + "resolved" "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz" + "version" "2.6.5" + dependencies: + "crc-32" "^1.2.0" + "ethereumjs-util" "^7.1.5" + +"@ethereumjs/tx@^3.3.0", "@ethereumjs/tx@^3.3.2": + "integrity" "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==" + "resolved" "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz" + "version" "3.5.2" dependencies: "@ethereumjs/common" "^2.6.4" - ethereumjs-util "^7.1.5" - -"@ethereumjs/vm@^5.9.0": - version "5.9.3" - resolved "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz" - integrity sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg== - dependencies: - "@ethereumjs/block" "^3.6.3" - "@ethereumjs/blockchain" "^5.5.3" - "@ethereumjs/common" "^2.6.5" - "@ethereumjs/tx" "^3.5.2" - async-eventemitter "^0.2.4" - core-js-pure "^3.0.1" - debug "^4.3.3" - ethereumjs-util "^7.1.5" - functional-red-black-tree "^1.0.1" - mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.2.4" - rustbn.js "~0.2.0" - -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + "ethereumjs-util" "^7.1.5" + +"@ethersproject/abi@^5.0.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.4.7", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0", "@ethersproject/abi@5.7.0": + "integrity" "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==" + "resolved" "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/address" "^5.7.0" "@ethersproject/bignumber" "^5.7.0" @@ -401,10 +540,10 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== +"@ethersproject/abstract-provider@^5.7.0", "@ethersproject/abstract-provider@5.7.0": + "integrity" "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==" + "resolved" "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/bytes" "^5.7.0" @@ -414,10 +553,10 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== +"@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.5.0", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2", "@ethersproject/abstract-signer@^5.7.0", "@ethersproject/abstract-signer@5.7.0": + "integrity" "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==" + "resolved" "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/bignumber" "^5.7.0" @@ -425,10 +564,10 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== +"@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.7.0", "@ethersproject/address@5.7.0": + "integrity" "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==" + "resolved" "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/bytes" "^5.7.0" @@ -436,48 +575,48 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== +"@ethersproject/base64@^5.7.0", "@ethersproject/base64@5.7.0": + "integrity" "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==" + "resolved" "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== +"@ethersproject/basex@^5.7.0", "@ethersproject/basex@5.7.0": + "integrity" "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==" + "resolved" "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== +"@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.7.0", "@ethersproject/bignumber@5.7.0": + "integrity" "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==" + "resolved" "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" + "bn.js" "^5.2.1" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== +"@ethersproject/bytes@^5.0.0", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.7.0", "@ethersproject/bytes@5.7.0": + "integrity" "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==" + "resolved" "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.1", "@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== +"@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.1", "@ethersproject/constants@^5.7.0", "@ethersproject/constants@5.7.0": + "integrity" "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==" + "resolved" "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.4.1", "@ethersproject/contracts@^5.6.0", "@ethersproject/contracts@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== +"@ethersproject/contracts@^5.4.1", "@ethersproject/contracts@^5.6.0", "@ethersproject/contracts@^5.7.0", "@ethersproject/contracts@5.7.0": + "integrity" "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==" + "resolved" "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/abi" "^5.7.0" "@ethersproject/abstract-provider" "^5.7.0" @@ -490,10 +629,10 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/transactions" "^5.7.0" -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== +"@ethersproject/hash@^5.7.0", "@ethersproject/hash@5.7.0": + "integrity" "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==" + "resolved" "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/abstract-signer" "^5.7.0" "@ethersproject/address" "^5.7.0" @@ -505,10 +644,10 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== +"@ethersproject/hdnode@^5.7.0", "@ethersproject/hdnode@5.7.0": + "integrity" "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==" + "resolved" "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/abstract-signer" "^5.7.0" "@ethersproject/basex" "^5.7.0" @@ -523,10 +662,10 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== +"@ethersproject/json-wallets@^5.7.0", "@ethersproject/json-wallets@5.7.0": + "integrity" "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==" + "resolved" "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/abstract-signer" "^5.7.0" "@ethersproject/address" "^5.7.0" @@ -539,48 +678,48 @@ "@ethersproject/random" "^5.7.0" "@ethersproject/strings" "^5.7.0" "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" + "aes-js" "3.0.0" + "scrypt-js" "3.0.1" -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== +"@ethersproject/keccak256@^5.7.0", "@ethersproject/keccak256@5.7.0": + "integrity" "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==" + "resolved" "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" + "js-sha3" "0.8.0" -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== +"@ethersproject/logger@^5.7.0", "@ethersproject/logger@5.7.0": + "integrity" "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" + "resolved" "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" + "version" "5.7.0" -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== +"@ethersproject/networks@^5.7.0", "@ethersproject/networks@5.7.1": + "integrity" "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==" + "resolved" "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" + "version" "5.7.1" dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== +"@ethersproject/pbkdf2@^5.7.0", "@ethersproject/pbkdf2@5.7.0": + "integrity" "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==" + "resolved" "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== +"@ethersproject/properties@^5.5.0", "@ethersproject/properties@^5.7.0", "@ethersproject/properties@5.7.0": + "integrity" "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==" + "resolved" "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.1", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@^5.6.8": - version "5.7.1" - resolved "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.1.tgz" - integrity sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ== +"@ethersproject/providers@^5.0.0", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@^5.4.7", "@ethersproject/providers@^5.5.1", "@ethersproject/providers@^5.6.8", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@5.7.1": + "integrity" "sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ==" + "resolved" "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.1.tgz" + "version" "5.7.1" dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/abstract-signer" "^5.7.0" @@ -600,50 +739,50 @@ "@ethersproject/strings" "^5.7.0" "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" + "bech32" "1.1.4" + "ws" "7.4.6" -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== +"@ethersproject/random@^5.7.0", "@ethersproject/random@5.7.0": + "integrity" "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==" + "resolved" "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== +"@ethersproject/rlp@^5.7.0", "@ethersproject/rlp@5.7.0": + "integrity" "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==" + "resolved" "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== +"@ethersproject/sha2@^5.7.0", "@ethersproject/sha2@5.7.0": + "integrity" "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==" + "resolved" "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" + "hash.js" "1.1.7" -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== +"@ethersproject/signing-key@^5.7.0", "@ethersproject/signing-key@5.7.0": + "integrity" "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==" + "resolved" "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" + "bn.js" "^5.2.1" + "elliptic" "6.5.4" + "hash.js" "1.1.7" -"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.4.0", "@ethersproject/solidity@^5.6.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== +"@ethersproject/solidity@^5.4.0", "@ethersproject/solidity@^5.6.0", "@ethersproject/solidity@5.7.0": + "integrity" "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==" + "resolved" "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/bytes" "^5.7.0" @@ -652,19 +791,19 @@ "@ethersproject/sha2" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== +"@ethersproject/strings@^5.7.0", "@ethersproject/strings@5.7.0": + "integrity" "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==" + "resolved" "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== +"@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0", "@ethersproject/transactions@5.7.0": + "integrity" "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==" + "resolved" "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/address" "^5.7.0" "@ethersproject/bignumber" "^5.7.0" @@ -677,18 +816,18 @@ "@ethersproject/signing-key" "^5.7.0" "@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + "integrity" "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==" + "resolved" "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.4.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== +"@ethersproject/wallet@^5.4.0", "@ethersproject/wallet@5.7.0": + "integrity" "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==" + "resolved" "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/abstract-signer" "^5.7.0" @@ -706,10 +845,10 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== +"@ethersproject/web@^5.7.0", "@ethersproject/web@5.7.1": + "integrity" "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==" + "resolved" "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" + "version" "5.7.1" dependencies: "@ethersproject/base64" "^5.7.0" "@ethersproject/bytes" "^5.7.0" @@ -717,10 +856,10 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== +"@ethersproject/wordlists@^5.7.0", "@ethersproject/wordlists@5.7.0": + "integrity" "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==" + "resolved" "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz" + "version" "5.7.0" dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/hash" "^5.7.0" @@ -729,143 +868,143 @@ "@ethersproject/strings" "^5.7.0" "@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + "version" "1.1.3" "@gnosis.pm/safe-core-sdk-types@^1.4.0", "@gnosis.pm/safe-core-sdk-types@^1.6.1": - version "1.6.1" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.6.1.tgz" - integrity sha512-KRflubR/W2qVeRxavh2ALtXI6CyCCcyuL1olJAVn/xkZVYJJjvXn+5GxbRloJFIJrgFCNWYbHrO0sXtywP5Y1g== + "integrity" "sha512-KRflubR/W2qVeRxavh2ALtXI6CyCCcyuL1olJAVn/xkZVYJJjvXn+5GxbRloJFIJrgFCNWYbHrO0sXtywP5Y1g==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.6.1.tgz" + "version" "1.6.1" dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/contracts" "^5.7.0" "@gnosis.pm/safe-deployments" "1.16.0" - web3-core "^1.8.0" - web3-utils "^1.8.0" + "web3-core" "^1.8.0" + "web3-utils" "^1.8.0" "@gnosis.pm/safe-core-sdk-utils@^1.1.0", "@gnosis.pm/safe-core-sdk-utils@^1.4.1": - version "1.4.1" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.4.1.tgz" - integrity sha512-VrebOIw5ULOgTuV1hK4V0Wp1cg50Sw9urUYyBFnkI6kzL13f3ngGa5IUZ6O+HOOSNrO2mB+EEr09gWp5IN7ECA== + "integrity" "sha512-VrebOIw5ULOgTuV1hK4V0Wp1cg50Sw9urUYyBFnkI6kzL13f3ngGa5IUZ6O+HOOSNrO2mB+EEr09gWp5IN7ECA==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.4.1.tgz" + "version" "1.4.1" dependencies: "@gnosis.pm/safe-core-sdk-types" "^1.6.1" - semver "^7.3.7" - web3-utils "^1.8.0" + "semver" "^7.3.7" + "web3-utils" "^1.8.0" "@gnosis.pm/safe-core-sdk@^2.1.0": - version "2.4.1" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.4.1.tgz" - integrity sha512-FlpHW+jzKNtO9HMFF+R7IbdvJM5J4R4JW76jSe3MAbUA5KlmAW9BFDl/sgdQTREttIZMG2dr9A94RU9YcsljXw== + "integrity" "sha512-FlpHW+jzKNtO9HMFF+R7IbdvJM5J4R4JW76jSe3MAbUA5KlmAW9BFDl/sgdQTREttIZMG2dr9A94RU9YcsljXw==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.4.1.tgz" + "version" "2.4.1" dependencies: "@ethersproject/solidity" "^5.6.0" "@gnosis.pm/safe-core-sdk-types" "^1.4.0" "@gnosis.pm/safe-deployments" "1.15.0" - ethereumjs-util "^7.1.4" - semver "^7.3.5" - web3-utils "^1.7.1" + "ethereumjs-util" "^7.1.4" + "semver" "^7.3.5" + "web3-utils" "^1.7.1" -"@gnosis.pm/safe-deployments@1.15.0": - version "1.15.0" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz" - integrity sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew== +"@gnosis.pm/safe-deployments@^1.12.0", "@gnosis.pm/safe-deployments@^1.16.0", "@gnosis.pm/safe-deployments@1.16.0": + "integrity" "sha512-5Wakso6SiulstuZfz3gH6yME8Q50BT5dVxIfgWz4vzOmyyqmAVstMd0VIwyw6IDee0gU4mHKZjhD3UXPKEvRCw==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.16.0.tgz" + "version" "1.16.0" dependencies: - semver "^7.3.7" + "semver" "^7.3.7" -"@gnosis.pm/safe-deployments@1.16.0", "@gnosis.pm/safe-deployments@^1.12.0", "@gnosis.pm/safe-deployments@^1.16.0": - version "1.16.0" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.16.0.tgz" - integrity sha512-5Wakso6SiulstuZfz3gH6yME8Q50BT5dVxIfgWz4vzOmyyqmAVstMd0VIwyw6IDee0gU4mHKZjhD3UXPKEvRCw== +"@gnosis.pm/safe-deployments@1.15.0": + "integrity" "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz" + "version" "1.15.0" dependencies: - semver "^7.3.7" + "semver" "^7.3.7" "@gnosis.pm/safe-ethers-lib@^1.1.0": - version "1.6.1" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.6.1.tgz" - integrity sha512-rUv2Dwi3whTmcgx6EejI5llMDnxhwyTX/8j01K6fWBfOAFaUV78gbtPcwmdr1WCVVcXSdKszyarus5fyZTKNfA== + "integrity" "sha512-rUv2Dwi3whTmcgx6EejI5llMDnxhwyTX/8j01K6fWBfOAFaUV78gbtPcwmdr1WCVVcXSdKszyarus5fyZTKNfA==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.6.1.tgz" + "version" "1.6.1" dependencies: "@gnosis.pm/safe-core-sdk-types" "^1.6.1" "@gnosis.pm/safe-core-sdk-utils" "^1.4.1" - ethers "^5.7.1" + "ethers" "^5.7.1" "@gnosis.pm/safe-web3-lib@^1.1.0": - version "1.6.1" - resolved "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.6.1.tgz" - integrity sha512-fOXtxjSmetky4CGapAWPTmzRLBDG+5sGbwriypy6OZ3rcPWvwRyC8p06IhpqofadJIEQP5HphPECtQNVSPEkjA== + "integrity" "sha512-fOXtxjSmetky4CGapAWPTmzRLBDG+5sGbwriypy6OZ3rcPWvwRyC8p06IhpqofadJIEQP5HphPECtQNVSPEkjA==" + "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.6.1.tgz" + "version" "1.6.1" dependencies: "@ethersproject/bignumber" "^5.7.0" "@gnosis.pm/safe-core-sdk-types" "^1.6.1" "@gnosis.pm/safe-core-sdk-utils" "^1.4.1" - web3 "^1.8.0" - web3-core "^1.8.0" - web3-utils "^1.8.0" + "web3" "^1.8.0" + "web3-core" "^1.8.0" + "web3-utils" "^1.8.0" "@humanwhocodes/config-array@^0.10.5": - version "0.10.7" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz" - integrity sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w== + "integrity" "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz" + "version" "0.10.7" dependencies: "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" + "debug" "^4.1.1" + "minimatch" "^3.0.4" "@humanwhocodes/gitignore-to-minimatch@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" - integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + "integrity" "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" + "version" "1.0.2" "@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + "integrity" "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + "version" "1.0.1" "@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + "version" "1.2.1" "@hutson/parse-repository-url@^3.0.0": - version "3.0.2" - resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz" - integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + "integrity" "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==" + "resolved" "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz" + "version" "3.0.2" "@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + "integrity" "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==" + "resolved" "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz" + "version" "1.1.0" "@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==" + "resolved" "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + "version" "1.1.0" dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" + "camelcase" "^5.3.1" + "find-up" "^4.1.0" + "get-package-type" "^0.1.0" + "js-yaml" "^3.13.1" + "resolve-from" "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + "integrity" "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + "resolved" "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + "version" "0.1.3" "@jest/console@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz" - integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + "integrity" "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==" + "resolved" "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - slash "^3.0.0" + "chalk" "^4.0.0" + "jest-message-util" "^28.1.3" + "jest-util" "^28.1.3" + "slash" "^3.0.0" "@jest/core@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz" - integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== + "integrity" "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==" + "resolved" "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/console" "^28.1.3" "@jest/reporters" "^28.1.3" @@ -873,80 +1012,80 @@ "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^28.1.3" - jest-config "^28.1.3" - jest-haste-map "^28.1.3" - jest-message-util "^28.1.3" - jest-regex-util "^28.0.2" - jest-resolve "^28.1.3" - jest-resolve-dependencies "^28.1.3" - jest-runner "^28.1.3" - jest-runtime "^28.1.3" - jest-snapshot "^28.1.3" - jest-util "^28.1.3" - jest-validate "^28.1.3" - jest-watcher "^28.1.3" - micromatch "^4.0.4" - pretty-format "^28.1.3" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.9" + "jest-changed-files" "^28.1.3" + "jest-config" "^28.1.3" + "jest-haste-map" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-regex-util" "^28.0.2" + "jest-resolve" "^28.1.3" + "jest-resolve-dependencies" "^28.1.3" + "jest-runner" "^28.1.3" + "jest-runtime" "^28.1.3" + "jest-snapshot" "^28.1.3" + "jest-util" "^28.1.3" + "jest-validate" "^28.1.3" + "jest-watcher" "^28.1.3" + "micromatch" "^4.0.4" + "pretty-format" "^28.1.3" + "rimraf" "^3.0.0" + "slash" "^3.0.0" + "strip-ansi" "^6.0.0" "@jest/environment@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz" - integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== + "integrity" "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==" + "resolved" "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/fake-timers" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - jest-mock "^28.1.3" + "jest-mock" "^28.1.3" "@jest/expect-utils@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz" - integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + "integrity" "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==" + "resolved" "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz" + "version" "28.1.3" dependencies: - jest-get-type "^28.0.2" + "jest-get-type" "^28.0.2" "@jest/expect@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz" - integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== + "integrity" "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==" + "resolved" "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz" + "version" "28.1.3" dependencies: - expect "^28.1.3" - jest-snapshot "^28.1.3" + "expect" "^28.1.3" + "jest-snapshot" "^28.1.3" "@jest/fake-timers@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz" - integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== + "integrity" "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==" + "resolved" "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" - jest-message-util "^28.1.3" - jest-mock "^28.1.3" - jest-util "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-mock" "^28.1.3" + "jest-util" "^28.1.3" "@jest/globals@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz" - integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== + "integrity" "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==" + "resolved" "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/environment" "^28.1.3" "@jest/expect" "^28.1.3" "@jest/types" "^28.1.3" "@jest/reporters@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz" - integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== + "integrity" "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==" + "resolved" "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz" + "version" "28.1.3" dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^28.1.3" @@ -955,162 +1094,162 @@ "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - jest-worker "^28.1.3" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - terminal-link "^2.0.0" - v8-to-istanbul "^9.0.1" + "chalk" "^4.0.0" + "collect-v8-coverage" "^1.0.0" + "exit" "^0.1.2" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "istanbul-lib-coverage" "^3.0.0" + "istanbul-lib-instrument" "^5.1.0" + "istanbul-lib-report" "^3.0.0" + "istanbul-lib-source-maps" "^4.0.0" + "istanbul-reports" "^3.1.3" + "jest-message-util" "^28.1.3" + "jest-util" "^28.1.3" + "jest-worker" "^28.1.3" + "slash" "^3.0.0" + "string-length" "^4.0.1" + "strip-ansi" "^6.0.0" + "terminal-link" "^2.0.0" + "v8-to-istanbul" "^9.0.1" "@jest/schemas@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" - integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + "integrity" "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==" + "resolved" "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" + "version" "28.1.3" dependencies: "@sinclair/typebox" "^0.24.1" "@jest/source-map@^28.1.2": - version "28.1.2" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz" - integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== + "integrity" "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==" + "resolved" "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz" + "version" "28.1.2" dependencies: "@jridgewell/trace-mapping" "^0.3.13" - callsites "^3.0.0" - graceful-fs "^4.2.9" + "callsites" "^3.0.0" + "graceful-fs" "^4.2.9" "@jest/test-result@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz" - integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== + "integrity" "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==" + "resolved" "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/console" "^28.1.3" "@jest/types" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" + "collect-v8-coverage" "^1.0.0" "@jest/test-sequencer@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz" - integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== + "integrity" "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==" + "resolved" "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/test-result" "^28.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - slash "^3.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.3" + "slash" "^3.0.0" "@jest/transform@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz" - integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== + "integrity" "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==" + "resolved" "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/core" "^7.11.6" "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - jest-regex-util "^28.0.2" - jest-util "^28.1.3" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.1" + "babel-plugin-istanbul" "^6.1.1" + "chalk" "^4.0.0" + "convert-source-map" "^1.4.0" + "fast-json-stable-stringify" "^2.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.3" + "jest-regex-util" "^28.0.2" + "jest-util" "^28.1.3" + "micromatch" "^4.0.4" + "pirates" "^4.0.4" + "slash" "^3.0.0" + "write-file-atomic" "^4.0.1" "@jest/types@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz" - integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + "integrity" "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==" + "resolved" "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/schemas" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^17.0.8" - chalk "^4.0.0" + "chalk" "^4.0.0" "@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + "integrity" "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" + "version" "0.1.1" dependencies: "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + "integrity" "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + "version" "0.3.2" dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + "integrity" "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + "version" "3.1.0" "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + "version" "1.1.2" "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + "integrity" "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + "version" "1.4.14" -"@jridgewell/trace-mapping@0.3.9", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": + "integrity" "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz" + "version" "0.3.15" dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13": - version "0.3.15" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz" - integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== +"@jridgewell/trace-mapping@0.3.9": + "integrity" "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + "version" "0.3.9" dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" "@lerna/add@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.5.4.tgz#2c925ced1cb42779a440f046c37aa0151a560b87" - integrity sha512-eMEWdyH2ijjDuOCZ5qI7nZlWtVmOx/aABGyNmNEG1ChNDQSmxgEmmqxagQCtW7+T63e9AaHsjrxYahBWYBnuhw== + "integrity" "sha512-eMEWdyH2ijjDuOCZ5qI7nZlWtVmOx/aABGyNmNEG1ChNDQSmxgEmmqxagQCtW7+T63e9AaHsjrxYahBWYBnuhw==" + "resolved" "https://registry.npmjs.org/@lerna/add/-/add-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/bootstrap" "5.5.4" "@lerna/command" "5.5.4" "@lerna/filter-options" "5.5.4" "@lerna/npm-conf" "5.5.4" "@lerna/validation-error" "5.5.4" - dedent "^0.7.0" - npm-package-arg "8.1.1" - p-map "^4.0.0" - pacote "^13.6.1" - semver "^7.3.4" + "dedent" "^0.7.0" + "npm-package-arg" "8.1.1" + "p-map" "^4.0.0" + "pacote" "^13.6.1" + "semver" "^7.3.4" "@lerna/bootstrap@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-5.5.4.tgz#919fdccf9447ce1b6901fb30ca69860f6563c958" - integrity sha512-MGC6naM0DrFNYTZPEW477uqWCqXmI4MRBKjtGNMiJhczYcFdD6x30u688zoAuO5HUoyqL6Uw7Ea28GVEyDm93Q== + "integrity" "sha512-MGC6naM0DrFNYTZPEW477uqWCqXmI4MRBKjtGNMiJhczYcFdD6x30u688zoAuO5HUoyqL6Uw7Ea28GVEyDm93Q==" + "resolved" "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/command" "5.5.4" "@lerna/filter-options" "5.5.4" @@ -1125,20 +1264,20 @@ "@lerna/symlink-dependencies" "5.5.4" "@lerna/validation-error" "5.5.4" "@npmcli/arborist" "5.3.0" - dedent "^0.7.0" - get-port "^5.1.1" - multimatch "^5.0.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" - semver "^7.3.4" + "dedent" "^0.7.0" + "get-port" "^5.1.1" + "multimatch" "^5.0.0" + "npm-package-arg" "8.1.1" + "npmlog" "^6.0.2" + "p-map" "^4.0.0" + "p-map-series" "^2.1.0" + "p-waterfall" "^2.1.1" + "semver" "^7.3.4" "@lerna/changed@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-5.5.4.tgz#61742e6d92e7f0aaec6b787f6b0a6203ef444c99" - integrity sha512-/tns9PA5m9XCKJk13RRJotCOFR/bZ+7zfxz20zpIELT9GehZLTaEPsItxVnlqQ4dMHMe0fl6XG6dFqeBqLOW4g== + "integrity" "sha512-/tns9PA5m9XCKJk13RRJotCOFR/bZ+7zfxz20zpIELT9GehZLTaEPsItxVnlqQ4dMHMe0fl6XG6dFqeBqLOW4g==" + "resolved" "https://registry.npmjs.org/@lerna/changed/-/changed-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/collect-updates" "5.5.4" "@lerna/command" "5.5.4" @@ -1146,153 +1285,153 @@ "@lerna/output" "5.5.4" "@lerna/check-working-tree@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-5.5.4.tgz#f19bddb23543010a848a3f44e66fc63929f6d4c9" - integrity sha512-uIHlEb/JSX9P230UNH69W21fWM4oKu8ulRdXuYCBckpbJkDz9nT1yS2y4wUHx+3GfXWqGKygTh8Z06vSdYg+2A== + "integrity" "sha512-uIHlEb/JSX9P230UNH69W21fWM4oKu8ulRdXuYCBckpbJkDz9nT1yS2y4wUHx+3GfXWqGKygTh8Z06vSdYg+2A==" + "resolved" "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/collect-uncommitted" "5.5.4" "@lerna/describe-ref" "5.5.4" "@lerna/validation-error" "5.5.4" "@lerna/child-process@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-5.5.4.tgz#97a7d2c994895e56ef8a0c49716a0a692867b5aa" - integrity sha512-1QlxFASrKlV3cG7XPFolOdrS4W784zv4DgipmTxaP++VlVAwbrHhqUdIEytDV6d0rlRksf6LPYzJhXdwlBkCEQ== + "integrity" "sha512-1QlxFASrKlV3cG7XPFolOdrS4W784zv4DgipmTxaP++VlVAwbrHhqUdIEytDV6d0rlRksf6LPYzJhXdwlBkCEQ==" + "resolved" "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.5.4.tgz" + "version" "5.5.4" dependencies: - chalk "^4.1.0" - execa "^5.0.0" - strong-log-transformer "^2.1.0" + "chalk" "^4.1.0" + "execa" "^5.0.0" + "strong-log-transformer" "^2.1.0" "@lerna/clean@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-5.5.4.tgz#329ecf24c5c66056f0ba96fdff1d1bc2b9bed5fe" - integrity sha512-q1fXRm6ZXo3HrFfsgyY9C83haotPT/Xa5K8fQX6GADuNLk0Xo3+ycouHeidblRLmQtCa3WNPEmCthTuaWrSUoQ== + "integrity" "sha512-q1fXRm6ZXo3HrFfsgyY9C83haotPT/Xa5K8fQX6GADuNLk0Xo3+ycouHeidblRLmQtCa3WNPEmCthTuaWrSUoQ==" + "resolved" "https://registry.npmjs.org/@lerna/clean/-/clean-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/command" "5.5.4" "@lerna/filter-options" "5.5.4" "@lerna/prompt" "5.5.4" "@lerna/pulse-till-done" "5.5.4" "@lerna/rimraf-dir" "5.5.4" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" + "p-map" "^4.0.0" + "p-map-series" "^2.1.0" + "p-waterfall" "^2.1.1" "@lerna/cli@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-5.5.4.tgz#f1c31d59d9be2aaafab6b856c7858a3da98d7b82" - integrity sha512-4uJEFEN0QNnQgghbpdY5wLmBPOeUeBeCKGh9s2pc1fkn0I1wKDhG0QByOfcf+jGuid2bA7DXzvJRXRgq0fWw0A== + "integrity" "sha512-4uJEFEN0QNnQgghbpdY5wLmBPOeUeBeCKGh9s2pc1fkn0I1wKDhG0QByOfcf+jGuid2bA7DXzvJRXRgq0fWw0A==" + "resolved" "https://registry.npmjs.org/@lerna/cli/-/cli-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/global-options" "5.5.4" - dedent "^0.7.0" - npmlog "^6.0.2" - yargs "^16.2.0" + "dedent" "^0.7.0" + "npmlog" "^6.0.2" + "yargs" "^16.2.0" "@lerna/collect-uncommitted@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-5.5.4.tgz#cdfb5f0c1651742f72147189e38822b815e45892" - integrity sha512-xLCsp8Qx5z/BWCxqUt8W8Se2XJcCQE6YUAti9TSWD5Ar+M5Etkgz2YJiUjZfZrsWZPBCqNfGfxx9Sjs7a/r+8A== + "integrity" "sha512-xLCsp8Qx5z/BWCxqUt8W8Se2XJcCQE6YUAti9TSWD5Ar+M5Etkgz2YJiUjZfZrsWZPBCqNfGfxx9Sjs7a/r+8A==" + "resolved" "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" - chalk "^4.1.0" - npmlog "^6.0.2" + "chalk" "^4.1.0" + "npmlog" "^6.0.2" "@lerna/collect-updates@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-5.5.4.tgz#424fbcb4a717eb2ed7c6a2015857d85d7e2e131f" - integrity sha512-m34bVoMO5QOd5K5uyAtQtkTiXBIEJHydXMwNXs+YTIAgy82JXNHfZE9vV63Fd5ZWOGY6ORthuXuC2Jn0Vx9tQA== + "integrity" "sha512-m34bVoMO5QOd5K5uyAtQtkTiXBIEJHydXMwNXs+YTIAgy82JXNHfZE9vV63Fd5ZWOGY6ORthuXuC2Jn0Vx9tQA==" + "resolved" "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/describe-ref" "5.5.4" - minimatch "^3.0.4" - npmlog "^6.0.2" - slash "^3.0.0" + "minimatch" "^3.0.4" + "npmlog" "^6.0.2" + "slash" "^3.0.0" "@lerna/command@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-5.5.4.tgz#f06f6dad4b5eed05fb4b98165d054af21be79715" - integrity sha512-/7drNy2DjVjDjm2knsDfEQIFEdRgPE2/lQ3yfEjVbXqs319o6KWbQVeoNy5GjGnLvc3v3eObA0cSJXHzEV11Bg== + "integrity" "sha512-/7drNy2DjVjDjm2knsDfEQIFEdRgPE2/lQ3yfEjVbXqs319o6KWbQVeoNy5GjGnLvc3v3eObA0cSJXHzEV11Bg==" + "resolved" "https://registry.npmjs.org/@lerna/command/-/command-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/package-graph" "5.5.4" "@lerna/project" "5.5.4" "@lerna/validation-error" "5.5.4" "@lerna/write-log-file" "5.5.4" - clone-deep "^4.0.1" - dedent "^0.7.0" - execa "^5.0.0" - is-ci "^2.0.0" - npmlog "^6.0.2" + "clone-deep" "^4.0.1" + "dedent" "^0.7.0" + "execa" "^5.0.0" + "is-ci" "^2.0.0" + "npmlog" "^6.0.2" "@lerna/conventional-commits@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-5.5.4.tgz#d4fbc9240ec95bc73395b87b2e778cb95ac57b36" - integrity sha512-zLcaveLXnIDYo3e9ChKsHSxiG7vOJeKdcoC5Fj8WH4DjAq/aqy15TE5SJr6aO8hOU/ph0EonPwyQBf4X2Lg5fg== + "integrity" "sha512-zLcaveLXnIDYo3e9ChKsHSxiG7vOJeKdcoC5Fj8WH4DjAq/aqy15TE5SJr6aO8hOU/ph0EonPwyQBf4X2Lg5fg==" + "resolved" "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/validation-error" "5.5.4" - conventional-changelog-angular "^5.0.12" - conventional-changelog-core "^4.2.4" - conventional-recommended-bump "^6.1.0" - fs-extra "^9.1.0" - get-stream "^6.0.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - pify "^5.0.0" - semver "^7.3.4" + "conventional-changelog-angular" "^5.0.12" + "conventional-changelog-core" "^4.2.4" + "conventional-recommended-bump" "^6.1.0" + "fs-extra" "^9.1.0" + "get-stream" "^6.0.0" + "npm-package-arg" "8.1.1" + "npmlog" "^6.0.2" + "pify" "^5.0.0" + "semver" "^7.3.4" "@lerna/create-symlink@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-5.5.4.tgz#91314744a715ad0ef4d330d0b4cf30cadd052025" - integrity sha512-TOfkeEQGhE90mvtky0Vpfl+6hwBz0tSXV0+gjRBmla/sYU/9+QoSH36TauHrmu/O3C8/CWtoGruxiWq8jP6Gyw== + "integrity" "sha512-TOfkeEQGhE90mvtky0Vpfl+6hwBz0tSXV0+gjRBmla/sYU/9+QoSH36TauHrmu/O3C8/CWtoGruxiWq8jP6Gyw==" + "resolved" "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.5.4.tgz" + "version" "5.5.4" dependencies: - cmd-shim "^5.0.0" - fs-extra "^9.1.0" - npmlog "^6.0.2" + "cmd-shim" "^5.0.0" + "fs-extra" "^9.1.0" + "npmlog" "^6.0.2" "@lerna/create@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-5.5.4.tgz#defb6bc3ab263bf8acbbfc34407a4de23cd2594f" - integrity sha512-mmZKy5U4OKBr/r8Tm6C8gubYHubQaHdPJ+aYuA/l4uCfK0p/Jly84Fy7M3kclcqm8FKDPKDhlp0Y2jnc32jBbA== + "integrity" "sha512-mmZKy5U4OKBr/r8Tm6C8gubYHubQaHdPJ+aYuA/l4uCfK0p/Jly84Fy7M3kclcqm8FKDPKDhlp0Y2jnc32jBbA==" + "resolved" "https://registry.npmjs.org/@lerna/create/-/create-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/command" "5.5.4" "@lerna/npm-conf" "5.5.4" "@lerna/validation-error" "5.5.4" - dedent "^0.7.0" - fs-extra "^9.1.0" - globby "^11.0.2" - init-package-json "^3.0.2" - npm-package-arg "8.1.1" - p-reduce "^2.1.0" - pacote "^13.6.1" - pify "^5.0.0" - semver "^7.3.4" - slash "^3.0.0" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" - yargs-parser "20.2.4" + "dedent" "^0.7.0" + "fs-extra" "^9.1.0" + "globby" "^11.0.2" + "init-package-json" "^3.0.2" + "npm-package-arg" "8.1.1" + "p-reduce" "^2.1.0" + "pacote" "^13.6.1" + "pify" "^5.0.0" + "semver" "^7.3.4" + "slash" "^3.0.0" + "validate-npm-package-license" "^3.0.4" + "validate-npm-package-name" "^4.0.0" + "yargs-parser" "20.2.4" "@lerna/describe-ref@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-5.5.4.tgz#8b5dc90b5570e6646ca813fe4006e06408acfb05" - integrity sha512-2LDEsuSbZTta7SuwKVo9ofeKvxqy4YFNOjEt7+JceZIfh4si3MjIPBX7l8AsCaUmwJnpOEYba0aau72AUAOtoA== + "integrity" "sha512-2LDEsuSbZTta7SuwKVo9ofeKvxqy4YFNOjEt7+JceZIfh4si3MjIPBX7l8AsCaUmwJnpOEYba0aau72AUAOtoA==" + "resolved" "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/diff@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-5.5.4.tgz#21344bd0fb5d2578b7873b16959ceee6eee4e512" - integrity sha512-OTieqJA4zKAV0KeG0nXwPnCkwg3LH+ucXlelnj1w+gaP2ndHbJVwgUWXGpqCHk8tn935KKOULhP7BGmAwvTYlQ== + "integrity" "sha512-OTieqJA4zKAV0KeG0nXwPnCkwg3LH+ucXlelnj1w+gaP2ndHbJVwgUWXGpqCHk8tn935KKOULhP7BGmAwvTYlQ==" + "resolved" "https://registry.npmjs.org/@lerna/diff/-/diff-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/command" "5.5.4" "@lerna/validation-error" "5.5.4" - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/exec@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-5.5.4.tgz#7ff09f9c786bf66ade7bf4823f60a4feab3b267c" - integrity sha512-o1SQ+6/U6L8hih6+wAgjyOhqo2CKzMcW6YWLs5erRY9E6VCEc2kX7SW3223ehsAhUIPfG7n+KYPmuZbWvTpbGQ== + "integrity" "sha512-o1SQ+6/U6L8hih6+wAgjyOhqo2CKzMcW6YWLs5erRY9E6VCEc2kX7SW3223ehsAhUIPfG7n+KYPmuZbWvTpbGQ==" + "resolved" "https://registry.npmjs.org/@lerna/exec/-/exec-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/command" "5.5.4" @@ -1300,126 +1439,126 @@ "@lerna/profiler" "5.5.4" "@lerna/run-topologically" "5.5.4" "@lerna/validation-error" "5.5.4" - p-map "^4.0.0" + "p-map" "^4.0.0" "@lerna/filter-options@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-5.5.4.tgz#c25ee6abb2eb2610d1da390911eafbfddecedf68" - integrity sha512-t1amUypgloaKN8d3VN7GiJQd4ommDplxSisAMS8hztb6ail3EbxasRQ03GXz4+6yQ98sam+D03soqSWAJcinrw== + "integrity" "sha512-t1amUypgloaKN8d3VN7GiJQd4ommDplxSisAMS8hztb6ail3EbxasRQ03GXz4+6yQ98sam+D03soqSWAJcinrw==" + "resolved" "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/collect-updates" "5.5.4" "@lerna/filter-packages" "5.5.4" - dedent "^0.7.0" - npmlog "^6.0.2" + "dedent" "^0.7.0" + "npmlog" "^6.0.2" "@lerna/filter-packages@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-5.5.4.tgz#7f07fe9afb4eacc43fec67c82c9e4acb33b393a7" - integrity sha512-mwpiF+L0np003AUp3ntKEFkNOXWBONwm9q8rW9TOR8OeqMXbxYWGLg2IR+Wc8EClmen79tahn076nUD85OLqew== + "integrity" "sha512-mwpiF+L0np003AUp3ntKEFkNOXWBONwm9q8rW9TOR8OeqMXbxYWGLg2IR+Wc8EClmen79tahn076nUD85OLqew==" + "resolved" "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/validation-error" "5.5.4" - multimatch "^5.0.0" - npmlog "^6.0.2" + "multimatch" "^5.0.0" + "npmlog" "^6.0.2" "@lerna/get-npm-exec-opts@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.5.4.tgz#8c1b19a364071350a305f9da50a6b851ced1fc6f" - integrity sha512-PLvSdt0woeOz3TZDHRshYVR9TSOUNunxZ4mE8f0tg9FPQ5R1uuwd2BF4HmEL7AlWFtFS+sOwuL9bI1btV1ELew== + "integrity" "sha512-PLvSdt0woeOz3TZDHRshYVR9TSOUNunxZ4mE8f0tg9FPQ5R1uuwd2BF4HmEL7AlWFtFS+sOwuL9bI1btV1ELew==" + "resolved" "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.5.4.tgz" + "version" "5.5.4" dependencies: - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/get-packed@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-5.5.4.tgz#2aa2772a6c90bdb1335b79d6c9058fca73a74505" - integrity sha512-BXQcQ5rfdIa8hkDd4UdETWs9mDiFvmBRpSNxpgaRiuL1w7AXEaMREQgKOFiv8fv/e+z/F0SXD048Fptj8d5pjA== + "integrity" "sha512-BXQcQ5rfdIa8hkDd4UdETWs9mDiFvmBRpSNxpgaRiuL1w7AXEaMREQgKOFiv8fv/e+z/F0SXD048Fptj8d5pjA==" + "resolved" "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.5.4.tgz" + "version" "5.5.4" dependencies: - fs-extra "^9.1.0" - ssri "^9.0.1" - tar "^6.1.0" + "fs-extra" "^9.1.0" + "ssri" "^9.0.1" + "tar" "^6.1.0" "@lerna/github-client@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-5.5.4.tgz#9ff47636e57514fb8d44678ad64664c932868d79" - integrity sha512-m5vTRsHyfzh16T3fX3ipdjZyQwl4Gnwav4RmEaVUFp2uMqsr0TrML7LJ/eqOqjGvj/+JWa52rIQsUCQe9BJYag== + "integrity" "sha512-m5vTRsHyfzh16T3fX3ipdjZyQwl4Gnwav4RmEaVUFp2uMqsr0TrML7LJ/eqOqjGvj/+JWa52rIQsUCQe9BJYag==" + "resolved" "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@octokit/plugin-enterprise-rest" "^6.0.1" "@octokit/rest" "^19.0.3" - git-url-parse "^13.1.0" - npmlog "^6.0.2" + "git-url-parse" "^13.1.0" + "npmlog" "^6.0.2" "@lerna/gitlab-client@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-5.5.4.tgz#e18a479e8f2f3ce0ecfa1e0d4f0a16d646809bba" - integrity sha512-vPSr6xFxtOigFY/fE8oYF+360WsV+g2ZkoJB34FA6UucjWBBPu2W13ydUYfqvJYODJYFzhTjB9b8zf0MJ0KMrQ== + "integrity" "sha512-vPSr6xFxtOigFY/fE8oYF+360WsV+g2ZkoJB34FA6UucjWBBPu2W13ydUYfqvJYODJYFzhTjB9b8zf0MJ0KMrQ==" + "resolved" "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.5.4.tgz" + "version" "5.5.4" dependencies: - node-fetch "^2.6.1" - npmlog "^6.0.2" + "node-fetch" "^2.6.1" + "npmlog" "^6.0.2" "@lerna/global-options@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-5.5.4.tgz#ed2daee879205255b4667921d6c91a4e2c04dda8" - integrity sha512-J2K4CsnYuKrW7bDR2gRABUFFrLaJ5z4GaaDpaKtQi6sHFKcVBfYz0B51Fe3NGFOvrct4YS9N7SgKDxPd5Nznig== + "integrity" "sha512-J2K4CsnYuKrW7bDR2gRABUFFrLaJ5z4GaaDpaKtQi6sHFKcVBfYz0B51Fe3NGFOvrct4YS9N7SgKDxPd5Nznig==" + "resolved" "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.5.4.tgz" + "version" "5.5.4" "@lerna/has-npm-version@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-5.5.4.tgz#32655bdf0d7deeb7de78ebc4e978ecc02b18bf91" - integrity sha512-l+nDc/QYvfA5f0tFxzd9mZ/SP0nfxbqpZ9csGyqU8NV/40fHRRouO+fcLtxjcG/mruMjiAB/P216BBbRmGb2VA== + "integrity" "sha512-l+nDc/QYvfA5f0tFxzd9mZ/SP0nfxbqpZ9csGyqU8NV/40fHRRouO+fcLtxjcG/mruMjiAB/P216BBbRmGb2VA==" + "resolved" "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" - semver "^7.3.4" + "semver" "^7.3.4" "@lerna/import@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-5.5.4.tgz#b0e07b54c13c786eac4a7639cc0db80ff1f952c6" - integrity sha512-1edy4e+0w4/awahc3uPvRQngIHbri5BGZZbjvsX8aKlPUd9pFg5U9/5w3lVE5jnZFRnqwhpJyyvJjL2M5F6IgQ== + "integrity" "sha512-1edy4e+0w4/awahc3uPvRQngIHbri5BGZZbjvsX8aKlPUd9pFg5U9/5w3lVE5jnZFRnqwhpJyyvJjL2M5F6IgQ==" + "resolved" "https://registry.npmjs.org/@lerna/import/-/import-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/command" "5.5.4" "@lerna/prompt" "5.5.4" "@lerna/pulse-till-done" "5.5.4" "@lerna/validation-error" "5.5.4" - dedent "^0.7.0" - fs-extra "^9.1.0" - p-map-series "^2.1.0" + "dedent" "^0.7.0" + "fs-extra" "^9.1.0" + "p-map-series" "^2.1.0" "@lerna/info@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-5.5.4.tgz#c0bb38a5d97f60019278a49ee324a3be804b9baa" - integrity sha512-JgYRP2WZUCuiYyf3CQjqEMGoqWpM7t/bammKW/sC3P0/xGSykh45vdRwVojcu4fGRZ/YS7sfFt28Dbw4QFp0iQ== + "integrity" "sha512-JgYRP2WZUCuiYyf3CQjqEMGoqWpM7t/bammKW/sC3P0/xGSykh45vdRwVojcu4fGRZ/YS7sfFt28Dbw4QFp0iQ==" + "resolved" "https://registry.npmjs.org/@lerna/info/-/info-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/command" "5.5.4" "@lerna/output" "5.5.4" - envinfo "^7.7.4" + "envinfo" "^7.7.4" "@lerna/init@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-5.5.4.tgz#78142ec262e5d54c0ced716239c39acd2c2cf821" - integrity sha512-BteH3O8ywUN8eBhwzOey3gTXxxKRxGz1JJ6tP1mA0KZoJgiBsSFoZbx7SJeGrR8gY7kmEyvXTY1geaxmb7V+vQ== + "integrity" "sha512-BteH3O8ywUN8eBhwzOey3gTXxxKRxGz1JJ6tP1mA0KZoJgiBsSFoZbx7SJeGrR8gY7kmEyvXTY1geaxmb7V+vQ==" + "resolved" "https://registry.npmjs.org/@lerna/init/-/init-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/command" "5.5.4" "@lerna/project" "5.5.4" - fs-extra "^9.1.0" - p-map "^4.0.0" - write-json-file "^4.3.0" + "fs-extra" "^9.1.0" + "p-map" "^4.0.0" + "write-json-file" "^4.3.0" "@lerna/link@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-5.5.4.tgz#5bd2097ab123f6034b470626d220bd5ce03cbc77" - integrity sha512-/kFST918MLhvWbs3szbUw3/6pPa0/vS77WnHk8n3S3v/PuzUEjm9CncYrZ0xB1ZiGk6oa4YTPWMlqyYMY1k0hQ== + "integrity" "sha512-/kFST918MLhvWbs3szbUw3/6pPa0/vS77WnHk8n3S3v/PuzUEjm9CncYrZ0xB1ZiGk6oa4YTPWMlqyYMY1k0hQ==" + "resolved" "https://registry.npmjs.org/@lerna/link/-/link-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/command" "5.5.4" "@lerna/package-graph" "5.5.4" "@lerna/symlink-dependencies" "5.5.4" "@lerna/validation-error" "5.5.4" - p-map "^4.0.0" - slash "^3.0.0" + "p-map" "^4.0.0" + "slash" "^3.0.0" "@lerna/list@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-5.5.4.tgz#fd27a69118e6ed515149fd77690ce6ecc3058456" - integrity sha512-ppLy99mQYoDkO+SxqnknPYqOnO+iJskb0G2h2fLF4ZK98oy2duJWkkehagwCVtmPax/DqWDDc/IAj+KWpcC0bQ== + "integrity" "sha512-ppLy99mQYoDkO+SxqnknPYqOnO+iJskb0G2h2fLF4ZK98oy2duJWkkehagwCVtmPax/DqWDDc/IAj+KWpcC0bQ==" + "resolved" "https://registry.npmjs.org/@lerna/list/-/list-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/command" "5.5.4" "@lerna/filter-options" "5.5.4" @@ -1427,172 +1566,172 @@ "@lerna/output" "5.5.4" "@lerna/listable@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-5.5.4.tgz#eff0720d5c01f734933b95dd8b2161d3126dc487" - integrity sha512-c6acWwSDQE5zeBcnH3m+mwfDr3zr515LsC30tXRenkqp4lbXeyrUPw0Mckw1ksw2nyb5LZl8gQnrFbAKC8gBSA== + "integrity" "sha512-c6acWwSDQE5zeBcnH3m+mwfDr3zr515LsC30tXRenkqp4lbXeyrUPw0Mckw1ksw2nyb5LZl8gQnrFbAKC8gBSA==" + "resolved" "https://registry.npmjs.org/@lerna/listable/-/listable-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/query-graph" "5.5.4" - chalk "^4.1.0" - columnify "^1.6.0" + "chalk" "^4.1.0" + "columnify" "^1.6.0" "@lerna/log-packed@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-5.5.4.tgz#0f0285445aadf3289148af7949f2cd61a21ff553" - integrity sha512-g3lW5yIIe66aVTOYn78+h21GR9gr/WdU3/z8jm0VzGC+VR7KqCKU+49JOCOh7LlNf7sY4ZE6ZbaZptp5wUjrgQ== + "integrity" "sha512-g3lW5yIIe66aVTOYn78+h21GR9gr/WdU3/z8jm0VzGC+VR7KqCKU+49JOCOh7LlNf7sY4ZE6ZbaZptp5wUjrgQ==" + "resolved" "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.5.4.tgz" + "version" "5.5.4" dependencies: - byte-size "^7.0.0" - columnify "^1.6.0" - has-unicode "^2.0.1" - npmlog "^6.0.2" + "byte-size" "^7.0.0" + "columnify" "^1.6.0" + "has-unicode" "^2.0.1" + "npmlog" "^6.0.2" "@lerna/npm-conf@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-5.5.4.tgz#642438b68dbd98af1189fb85646d3e0ca24b3741" - integrity sha512-BwnP0ezR84nQ5Sh0CdH77Q8evDcqP9bFUdjX6eZT4Rxl0432ocB1YpweNnUDQO4Boxj/FiOu/OaE0Kej+I+5ew== + "integrity" "sha512-BwnP0ezR84nQ5Sh0CdH77Q8evDcqP9bFUdjX6eZT4Rxl0432ocB1YpweNnUDQO4Boxj/FiOu/OaE0Kej+I+5ew==" + "resolved" "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.5.4.tgz" + "version" "5.5.4" dependencies: - config-chain "^1.1.12" - pify "^5.0.0" + "config-chain" "^1.1.12" + "pify" "^5.0.0" "@lerna/npm-dist-tag@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-5.5.4.tgz#2ed3ad80af572bfdcf631f8271e59240d72e011b" - integrity sha512-aAisCh5b2+6cjLxZh03/MGGcBjL7KNBWi5qW6OCdQQpcxH5r0aUJ5F1rmXJE0qxgsLWaGRLzngWk+v6VJHqYJQ== + "integrity" "sha512-aAisCh5b2+6cjLxZh03/MGGcBjL7KNBWi5qW6OCdQQpcxH5r0aUJ5F1rmXJE0qxgsLWaGRLzngWk+v6VJHqYJQ==" + "resolved" "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/otplease" "5.5.4" - npm-package-arg "8.1.1" - npm-registry-fetch "^13.3.0" - npmlog "^6.0.2" + "npm-package-arg" "8.1.1" + "npm-registry-fetch" "^13.3.0" + "npmlog" "^6.0.2" "@lerna/npm-install@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-5.5.4.tgz#0b801d16d04cf2c9c6c114ec0b188ad190c63775" - integrity sha512-lglf2KRxg30dCvNWwxQRJmCfXC51byNqYQt9/dFrnWcotHwpNRIFnVM3tWMdVxlwJMiozU/PjUFBateaxmukXw== + "integrity" "sha512-lglf2KRxg30dCvNWwxQRJmCfXC51byNqYQt9/dFrnWcotHwpNRIFnVM3tWMdVxlwJMiozU/PjUFBateaxmukXw==" + "resolved" "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/get-npm-exec-opts" "5.5.4" - fs-extra "^9.1.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - signal-exit "^3.0.3" - write-pkg "^4.0.0" + "fs-extra" "^9.1.0" + "npm-package-arg" "8.1.1" + "npmlog" "^6.0.2" + "signal-exit" "^3.0.3" + "write-pkg" "^4.0.0" "@lerna/npm-publish@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-5.5.4.tgz#fbdcadf5bedf91bbd33ddca79e742262f8b72465" - integrity sha512-Z3GQqby0FR7HW82/t7j7nOF9pfSwNVmgms0zTq7a8YaEe8uDlAxGMW4sVN8uT89mZfBfS6R1WMlBbC5Ea+jy/A== + "integrity" "sha512-Z3GQqby0FR7HW82/t7j7nOF9pfSwNVmgms0zTq7a8YaEe8uDlAxGMW4sVN8uT89mZfBfS6R1WMlBbC5Ea+jy/A==" + "resolved" "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/otplease" "5.5.4" "@lerna/run-lifecycle" "5.5.4" - fs-extra "^9.1.0" - libnpmpublish "^6.0.4" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - pify "^5.0.0" - read-package-json "^5.0.1" + "fs-extra" "^9.1.0" + "libnpmpublish" "^6.0.4" + "npm-package-arg" "8.1.1" + "npmlog" "^6.0.2" + "pify" "^5.0.0" + "read-package-json" "^5.0.1" "@lerna/npm-run-script@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-5.5.4.tgz#88dc25d81b5263d85443b570d06f1c87df38c58a" - integrity sha512-fwHZRTGUldN9D2Rugg0HdwE8A8OZ7CF7g63y7OjzIoxASqtZBDyHZgrVbY/xZcrhqCF0+VJ1vR0c/uFwtWFrtA== + "integrity" "sha512-fwHZRTGUldN9D2Rugg0HdwE8A8OZ7CF7g63y7OjzIoxASqtZBDyHZgrVbY/xZcrhqCF0+VJ1vR0c/uFwtWFrtA==" + "resolved" "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" "@lerna/get-npm-exec-opts" "5.5.4" - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/otplease@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-5.5.4.tgz#8b1f5af43e3e99131ca6077ac6f9c274733a6a77" - integrity sha512-c/tSjuMGw0esoxqtW0Qs2gCcvFDCrOlFnd4EgTJQKUSbNwVrabMkDJRMP0zu7UiSYJCCWKlBnjpBCiBXNG2H4A== + "integrity" "sha512-c/tSjuMGw0esoxqtW0Qs2gCcvFDCrOlFnd4EgTJQKUSbNwVrabMkDJRMP0zu7UiSYJCCWKlBnjpBCiBXNG2H4A==" + "resolved" "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/prompt" "5.5.4" "@lerna/output@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-5.5.4.tgz#22c9d78a39b7062c90fd1a1e0050a4129dc9c239" - integrity sha512-qiYtDQ4k9sXzXRlbSuLUFDNLk42sJY3n7x7fWKt6v5I9s2uh5d3cBctBuvV8+YX82H1inQ9hpyFafzOBO8tbCA== + "integrity" "sha512-qiYtDQ4k9sXzXRlbSuLUFDNLk42sJY3n7x7fWKt6v5I9s2uh5d3cBctBuvV8+YX82H1inQ9hpyFafzOBO8tbCA==" + "resolved" "https://registry.npmjs.org/@lerna/output/-/output-5.5.4.tgz" + "version" "5.5.4" dependencies: - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/pack-directory@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-5.5.4.tgz#987dba5049a57fd822412e9a1770dab9f4da314c" - integrity sha512-yUhu8ADzUZOZPfimMwlxxuxIweXitMKTVAmhz9eruiNHxsc0GpKb89yemep03iXqtrjC1Pt/QsS+dhJNNKdZ4A== + "integrity" "sha512-yUhu8ADzUZOZPfimMwlxxuxIweXitMKTVAmhz9eruiNHxsc0GpKb89yemep03iXqtrjC1Pt/QsS+dhJNNKdZ4A==" + "resolved" "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/get-packed" "5.5.4" "@lerna/package" "5.5.4" "@lerna/run-lifecycle" "5.5.4" "@lerna/temp-write" "5.5.4" - npm-packlist "^5.1.1" - npmlog "^6.0.2" - tar "^6.1.0" + "npm-packlist" "^5.1.1" + "npmlog" "^6.0.2" + "tar" "^6.1.0" "@lerna/package-graph@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-5.5.4.tgz#32abce3e23e09017f5323f2704d9544ffcb1ccbf" - integrity sha512-1g0c08mooZBtrIG8gMOdpbZ3rn5VM+e47pLFAXZcfGUaNUfc0OM58Z50ONiJq23XlJmS4vQ2e4X3cs7Hc7+Dxw== + "integrity" "sha512-1g0c08mooZBtrIG8gMOdpbZ3rn5VM+e47pLFAXZcfGUaNUfc0OM58Z50ONiJq23XlJmS4vQ2e4X3cs7Hc7+Dxw==" + "resolved" "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/prerelease-id-from-version" "5.5.4" "@lerna/validation-error" "5.5.4" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - semver "^7.3.4" + "npm-package-arg" "8.1.1" + "npmlog" "^6.0.2" + "semver" "^7.3.4" "@lerna/package@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-5.5.4.tgz#815c35a8f5a12a6f91f3a0314178f198ffcbc1c5" - integrity sha512-wpBcq4zVFVQOJI9QT0TJItRjl6jGSGFp93n4D8KHXXiyeKmN9CW4EnwFY9bnT3r5OteZN+eorD6r2TnRe8VPDg== + "integrity" "sha512-wpBcq4zVFVQOJI9QT0TJItRjl6jGSGFp93n4D8KHXXiyeKmN9CW4EnwFY9bnT3r5OteZN+eorD6r2TnRe8VPDg==" + "resolved" "https://registry.npmjs.org/@lerna/package/-/package-5.5.4.tgz" + "version" "5.5.4" dependencies: - load-json-file "^6.2.0" - npm-package-arg "8.1.1" - write-pkg "^4.0.0" + "load-json-file" "^6.2.0" + "npm-package-arg" "8.1.1" + "write-pkg" "^4.0.0" "@lerna/prerelease-id-from-version@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.5.4.tgz#ba17e53051b15cfe7ba9c98e75abd5644559f8a7" - integrity sha512-IHNQxbILrRGhw9CCdqy0ncSjDpNvdJCcaGFh3+TJRx6Bjhl5ifbUjI0gBUxd7i5Aict5dguWlhAWHQpef48AqA== + "integrity" "sha512-IHNQxbILrRGhw9CCdqy0ncSjDpNvdJCcaGFh3+TJRx6Bjhl5ifbUjI0gBUxd7i5Aict5dguWlhAWHQpef48AqA==" + "resolved" "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.5.4.tgz" + "version" "5.5.4" dependencies: - semver "^7.3.4" + "semver" "^7.3.4" "@lerna/profiler@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-5.5.4.tgz#2082a05c4aecee0bd567a5069efb09511212f4c6" - integrity sha512-LPnO8mXhXSBT8PD5pEWkgd+2d8lJqQ0fnwcIPG0B8o6tnQrSc2gXLNxStYOFedzcZXRhAYiFVrf5VjOKHV6Ghw== + "integrity" "sha512-LPnO8mXhXSBT8PD5pEWkgd+2d8lJqQ0fnwcIPG0B8o6tnQrSc2gXLNxStYOFedzcZXRhAYiFVrf5VjOKHV6Ghw==" + "resolved" "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.5.4.tgz" + "version" "5.5.4" dependencies: - fs-extra "^9.1.0" - npmlog "^6.0.2" - upath "^2.0.1" + "fs-extra" "^9.1.0" + "npmlog" "^6.0.2" + "upath" "^2.0.1" "@lerna/project@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-5.5.4.tgz#184d13b0b47187bed5fa6a6227c2a0abf6060fda" - integrity sha512-iLdyc+jPU0cR6BQO3V3Sf51WP3Oac+I/+518dIGdWS7ot9nEbjuZripHJjIkyZKSfnKPTEtz2aUta0ndoewwuQ== + "integrity" "sha512-iLdyc+jPU0cR6BQO3V3Sf51WP3Oac+I/+518dIGdWS7ot9nEbjuZripHJjIkyZKSfnKPTEtz2aUta0ndoewwuQ==" + "resolved" "https://registry.npmjs.org/@lerna/project/-/project-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/package" "5.5.4" "@lerna/validation-error" "5.5.4" - cosmiconfig "^7.0.0" - dedent "^0.7.0" - dot-prop "^6.0.1" - glob-parent "^5.1.1" - globby "^11.0.2" - js-yaml "^4.1.0" - load-json-file "^6.2.0" - npmlog "^6.0.2" - p-map "^4.0.0" - resolve-from "^5.0.0" - write-json-file "^4.3.0" + "cosmiconfig" "^7.0.0" + "dedent" "^0.7.0" + "dot-prop" "^6.0.1" + "glob-parent" "^5.1.1" + "globby" "^11.0.2" + "js-yaml" "^4.1.0" + "load-json-file" "^6.2.0" + "npmlog" "^6.0.2" + "p-map" "^4.0.0" + "resolve-from" "^5.0.0" + "write-json-file" "^4.3.0" "@lerna/prompt@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-5.5.4.tgz#3b61a9ba3996c0cf3926671e8f9a15189b9b9ef4" - integrity sha512-X8H2V4dDkFLYzZkMTillvuGAphU5fTDR66HgZlhgKtbJjm7OrjxhoRdk/YlMpI+HdYwXhdUzhEe9YJEhqhfe6w== + "integrity" "sha512-X8H2V4dDkFLYzZkMTillvuGAphU5fTDR66HgZlhgKtbJjm7OrjxhoRdk/YlMpI+HdYwXhdUzhEe9YJEhqhfe6w==" + "resolved" "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.5.4.tgz" + "version" "5.5.4" dependencies: - inquirer "^8.2.4" - npmlog "^6.0.2" + "inquirer" "^8.2.4" + "npmlog" "^6.0.2" "@lerna/publish@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-5.5.4.tgz#73dceae590815e096d3410c98f07ba01a7bccbc1" - integrity sha512-zBlZsk+NBUfg4o7ycKH8/hc4NRJWd4RmxB6Kn7xo7MOJMW3x+K4aABcqY2GGxEMUxx3rBBVPIdziVWbyS7UIxA== + "integrity" "sha512-zBlZsk+NBUfg4o7ycKH8/hc4NRJWd4RmxB6Kn7xo7MOJMW3x+K4aABcqY2GGxEMUxx3rBBVPIdziVWbyS7UIxA==" + "resolved" "https://registry.npmjs.org/@lerna/publish/-/publish-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/check-working-tree" "5.5.4" "@lerna/child-process" "5.5.4" @@ -1613,71 +1752,71 @@ "@lerna/run-topologically" "5.5.4" "@lerna/validation-error" "5.5.4" "@lerna/version" "5.5.4" - fs-extra "^9.1.0" - libnpmaccess "^6.0.3" - npm-package-arg "8.1.1" - npm-registry-fetch "^13.3.0" - npmlog "^6.0.2" - p-map "^4.0.0" - p-pipe "^3.1.0" - pacote "^13.6.1" - semver "^7.3.4" + "fs-extra" "^9.1.0" + "libnpmaccess" "^6.0.3" + "npm-package-arg" "8.1.1" + "npm-registry-fetch" "^13.3.0" + "npmlog" "^6.0.2" + "p-map" "^4.0.0" + "p-pipe" "^3.1.0" + "pacote" "^13.6.1" + "semver" "^7.3.4" "@lerna/pulse-till-done@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-5.5.4.tgz#c7fe3349a1da86534fb42bb7f858a6245e6d67e0" - integrity sha512-xC4/QPnIQfrE1aA8W5w6AfaT0gTm8SeVmrsQzMMlUTJ2JAnflsHv1oG69M89xq2DrlXsEVaah56Xbjavy+woQg== + "integrity" "sha512-xC4/QPnIQfrE1aA8W5w6AfaT0gTm8SeVmrsQzMMlUTJ2JAnflsHv1oG69M89xq2DrlXsEVaah56Xbjavy+woQg==" + "resolved" "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.5.4.tgz" + "version" "5.5.4" dependencies: - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/query-graph@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-5.5.4.tgz#64079526a6e483a28c0b9cda12f8444ced6016b3" - integrity sha512-TJsmJ++3NpEs+LxF0B02hAv2HigJ9ffa9e+paK27oE8sTiH3YataMHaNu5ZkeotJTw7u0IiRLm0zi4z4xoRlLg== + "integrity" "sha512-TJsmJ++3NpEs+LxF0B02hAv2HigJ9ffa9e+paK27oE8sTiH3YataMHaNu5ZkeotJTw7u0IiRLm0zi4z4xoRlLg==" + "resolved" "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/package-graph" "5.5.4" "@lerna/resolve-symlink@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-5.5.4.tgz#3711dc911193d8f1843616bf4a77e4fbf14daedf" - integrity sha512-cAIXELf04dHx/XF/2njCM0bpiyup6Nedpmm1XNJzrJuWrGmwK2qW5F2wQ/RHXWXsLIe/BsOl/hfEONm7o7k8sA== + "integrity" "sha512-cAIXELf04dHx/XF/2njCM0bpiyup6Nedpmm1XNJzrJuWrGmwK2qW5F2wQ/RHXWXsLIe/BsOl/hfEONm7o7k8sA==" + "resolved" "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.5.4.tgz" + "version" "5.5.4" dependencies: - fs-extra "^9.1.0" - npmlog "^6.0.2" - read-cmd-shim "^3.0.0" + "fs-extra" "^9.1.0" + "npmlog" "^6.0.2" + "read-cmd-shim" "^3.0.0" "@lerna/rimraf-dir@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-5.5.4.tgz#35b1ee9cf3bca12748df4e53f7e5cef5ef845d6a" - integrity sha512-++I7ToqICE4KSqi4T8enfcou8XPZV3gmrpARVD9VW4Tz3w8BP/JijB6AJwgZKojdqQenXU7u3lLTzfepKN1iOA== + "integrity" "sha512-++I7ToqICE4KSqi4T8enfcou8XPZV3gmrpARVD9VW4Tz3w8BP/JijB6AJwgZKojdqQenXU7u3lLTzfepKN1iOA==" + "resolved" "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/child-process" "5.5.4" - npmlog "^6.0.2" - path-exists "^4.0.0" - rimraf "^3.0.2" + "npmlog" "^6.0.2" + "path-exists" "^4.0.0" + "rimraf" "^3.0.2" "@lerna/run-lifecycle@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-5.5.4.tgz#e9d61d5c290402f936818ca775168a677d965ad7" - integrity sha512-MIE8HJml8gWkH5jt/5omiPr69VUMUPwvhkf6Irpg5yxIE5K4oeViVZMay2v6cPA9jAeTDCshHb7gt2EPBSsYQA== + "integrity" "sha512-MIE8HJml8gWkH5jt/5omiPr69VUMUPwvhkf6Irpg5yxIE5K4oeViVZMay2v6cPA9jAeTDCshHb7gt2EPBSsYQA==" + "resolved" "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/npm-conf" "5.5.4" "@npmcli/run-script" "^4.1.7" - npmlog "^6.0.2" - p-queue "^6.6.2" + "npmlog" "^6.0.2" + "p-queue" "^6.6.2" "@lerna/run-topologically@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-5.5.4.tgz#14fdd4d40882445b9346d0e814c61eb8237687a9" - integrity sha512-p1UNHgR8sOaS40nVD0HyqwmawDXBOikIibjbJLcY2QuvWwzAGKjfWm/sAXagYjgzaPYQAhaHyOxTdGe8T+a7uQ== + "integrity" "sha512-p1UNHgR8sOaS40nVD0HyqwmawDXBOikIibjbJLcY2QuvWwzAGKjfWm/sAXagYjgzaPYQAhaHyOxTdGe8T+a7uQ==" + "resolved" "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/query-graph" "5.5.4" - p-queue "^6.6.2" + "p-queue" "^6.6.2" "@lerna/run@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-5.5.4.tgz#b7cff31b3240c7326119a9a675af2bbc16af6d2a" - integrity sha512-R9g+4nfIDgK+I4RleAJpXrStzLlUCEHR/rxH2t5LJ6DLaoKUG6oeRZsf2w/It/r2IMV1dq2xG6chs+H1o1J+Ow== + "integrity" "sha512-R9g+4nfIDgK+I4RleAJpXrStzLlUCEHR/rxH2t5LJ6DLaoKUG6oeRZsf2w/It/r2IMV1dq2xG6chs+H1o1J+Ow==" + "resolved" "https://registry.npmjs.org/@lerna/run/-/run-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/command" "5.5.4" "@lerna/filter-options" "5.5.4" @@ -1687,58 +1826,58 @@ "@lerna/run-topologically" "5.5.4" "@lerna/timer" "5.5.4" "@lerna/validation-error" "5.5.4" - fs-extra "^9.1.0" - p-map "^4.0.0" + "fs-extra" "^9.1.0" + "p-map" "^4.0.0" "@lerna/symlink-binary@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-5.5.4.tgz#cb7e8194e7b860196aff306aa35e0db67f1b5c3a" - integrity sha512-FVhkL8KIgk0gPJV136Sl0/t3LD3qDngIRqJVNPIbATVHagkLVsuJM6+BcdWLxoMUCtwHIyWqgcXn1Oa/DVSUEA== + "integrity" "sha512-FVhkL8KIgk0gPJV136Sl0/t3LD3qDngIRqJVNPIbATVHagkLVsuJM6+BcdWLxoMUCtwHIyWqgcXn1Oa/DVSUEA==" + "resolved" "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/create-symlink" "5.5.4" "@lerna/package" "5.5.4" - fs-extra "^9.1.0" - p-map "^4.0.0" + "fs-extra" "^9.1.0" + "p-map" "^4.0.0" "@lerna/symlink-dependencies@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-5.5.4.tgz#99607534e239b1479209d3025988e3b2c5ccc073" - integrity sha512-BfOcATr0TreXRfIhIRvgGCT2o8uEqrwVLo8edCQICeqgju19fFn22Qmyb8LW+LMJjBUuSkpJDqqamQ6nj3Ch2A== + "integrity" "sha512-BfOcATr0TreXRfIhIRvgGCT2o8uEqrwVLo8edCQICeqgju19fFn22Qmyb8LW+LMJjBUuSkpJDqqamQ6nj3Ch2A==" + "resolved" "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/create-symlink" "5.5.4" "@lerna/resolve-symlink" "5.5.4" "@lerna/symlink-binary" "5.5.4" - fs-extra "^9.1.0" - p-map "^4.0.0" - p-map-series "^2.1.0" + "fs-extra" "^9.1.0" + "p-map" "^4.0.0" + "p-map-series" "^2.1.0" "@lerna/temp-write@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/temp-write/-/temp-write-5.5.4.tgz#02c07da23944a765d3f319f247c71e0b99b9416f" - integrity sha512-cJy9f9uSvnPxfc2a1ARapGLJXllQlJKKb0idi8aA3ylvgDA7grfKIDPdkf6cBcpPAq8aixDq9GdCZ6oLKdISeA== + "integrity" "sha512-cJy9f9uSvnPxfc2a1ARapGLJXllQlJKKb0idi8aA3ylvgDA7grfKIDPdkf6cBcpPAq8aixDq9GdCZ6oLKdISeA==" + "resolved" "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.5.4.tgz" + "version" "5.5.4" dependencies: - graceful-fs "^4.1.15" - is-stream "^2.0.0" - make-dir "^3.0.0" - temp-dir "^1.0.0" - uuid "^8.3.2" + "graceful-fs" "^4.1.15" + "is-stream" "^2.0.0" + "make-dir" "^3.0.0" + "temp-dir" "^1.0.0" + "uuid" "^8.3.2" "@lerna/timer@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-5.5.4.tgz#815f054f3825a58af58518309d32e29e36fd2c8b" - integrity sha512-B3eesmrNaw64Svo2pkmCtBVIJbomegiOMrdxFkZrf8ugTKwobn3KSZZkdbN+hjq8SKpRz3XgtjAuSFUzdg8c3A== + "integrity" "sha512-B3eesmrNaw64Svo2pkmCtBVIJbomegiOMrdxFkZrf8ugTKwobn3KSZZkdbN+hjq8SKpRz3XgtjAuSFUzdg8c3A==" + "resolved" "https://registry.npmjs.org/@lerna/timer/-/timer-5.5.4.tgz" + "version" "5.5.4" "@lerna/validation-error@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-5.5.4.tgz#935018275d0005cc5e7540854815ec7404a5b129" - integrity sha512-FUC3x40zBAu0ny1AWXT38LOVRaSJkjdAv9GiYLu9sx+7T7X18q38zPFyVPIIhrrTJsNNWkro/NTA7r4/BcdvoQ== + "integrity" "sha512-FUC3x40zBAu0ny1AWXT38LOVRaSJkjdAv9GiYLu9sx+7T7X18q38zPFyVPIIhrrTJsNNWkro/NTA7r4/BcdvoQ==" + "resolved" "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.5.4.tgz" + "version" "5.5.4" dependencies: - npmlog "^6.0.2" + "npmlog" "^6.0.2" "@lerna/version@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-5.5.4.tgz#4bfe1ec09a508f5a14c325599c88a92d3bede8a4" - integrity sha512-J39m2KfhkkDzfCUjnC2+UbBrWBRs1TkrvFlHFbb8wHUOY5bs+dj5RLyUchF/VJOYFSJXr8LLQFdMPeptF2wItg== + "integrity" "sha512-J39m2KfhkkDzfCUjnC2+UbBrWBRs1TkrvFlHFbb8wHUOY5bs+dj5RLyUchF/VJOYFSJXr8LLQFdMPeptF2wItg==" + "resolved" "https://registry.npmjs.org/@lerna/version/-/version-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/check-working-tree" "5.5.4" "@lerna/child-process" "5.5.4" @@ -1754,106 +1893,293 @@ "@lerna/run-topologically" "5.5.4" "@lerna/temp-write" "5.5.4" "@lerna/validation-error" "5.5.4" - chalk "^4.1.0" - dedent "^0.7.0" - load-json-file "^6.2.0" - minimatch "^3.0.4" - npmlog "^6.0.2" - p-map "^4.0.0" - p-pipe "^3.1.0" - p-reduce "^2.1.0" - p-waterfall "^2.1.1" - semver "^7.3.4" - slash "^3.0.0" - write-json-file "^4.3.0" + "chalk" "^4.1.0" + "dedent" "^0.7.0" + "load-json-file" "^6.2.0" + "minimatch" "^3.0.4" + "npmlog" "^6.0.2" + "p-map" "^4.0.0" + "p-pipe" "^3.1.0" + "p-reduce" "^2.1.0" + "p-waterfall" "^2.1.1" + "semver" "^7.3.4" + "slash" "^3.0.0" + "write-json-file" "^4.3.0" "@lerna/write-log-file@5.5.4": - version "5.5.4" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-5.5.4.tgz#28d04afa813457a58c6d32d8a4b4581cbaf34d02" - integrity sha512-PDdVuWHLkMw6ygP1hKTciphmYKRDTmNJASxVlxxOv9UkZe7QQvfke0i/OXNPRZHJK7eKCtv2Zu91amE8qCjVNw== - dependencies: - npmlog "^6.0.2" - write-file-atomic "^4.0.1" - -"@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" - integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^6.2.1" - ethjs-util "^0.1.6" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.1" - -"@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz" - integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== - -"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": - version "1.6.3" - resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz" - integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== + "integrity" "sha512-PDdVuWHLkMw6ygP1hKTciphmYKRDTmNJASxVlxxOv9UkZe7QQvfke0i/OXNPRZHJK7eKCtv2Zu91amE8qCjVNw==" + "resolved" "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.5.4.tgz" + "version" "5.5.4" + dependencies: + "npmlog" "^6.0.2" + "write-file-atomic" "^4.0.1" + +"@metamask/eth-sig-util@^4.0.0", "@metamask/eth-sig-util@4.0.1": + "integrity" "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==" + "resolved" "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "ethereumjs-abi" "^0.6.8" + "ethereumjs-util" "^6.2.1" + "ethjs-util" "^0.1.6" + "tweetnacl" "^1.0.3" + "tweetnacl-util" "^0.15.1" + +"@metamask/safe-event-emitter@^2.0.0": + "integrity" "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==" + "resolved" "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz" + "version" "2.0.0" + +"@noble/hashes@~1.1.1": + "integrity" "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==" + "resolved" "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz" + "version" "1.1.3" + +"@noble/hashes@1.1.2": + "integrity" "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" + "resolved" "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz" + "version" "1.1.2" + +"@noble/secp256k1@~1.6.0", "@noble/secp256k1@1.6.3": + "integrity" "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==" + "resolved" "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz" + "version" "1.6.3" "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" dependencies: "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" + "run-parallel" "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" "@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" dependencies: "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@nomiclabs/hardhat-ethers@^2.1.0": - version "2.1.1" - resolved "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz" - integrity sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA== - -"@nomiclabs/hardhat-etherscan@^2.1.6": - version "2.1.8" - resolved "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz" - integrity sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA== + "fastq" "^1.6.0" + +"@nomicfoundation/ethereumjs-block@^4.0.0": + "integrity" "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "ethereum-cryptography" "0.1.3" + +"@nomicfoundation/ethereumjs-blockchain@^6.0.0": + "integrity" "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-ethash" "^2.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "abstract-level" "^1.0.3" + "debug" "^4.3.3" + "ethereum-cryptography" "0.1.3" + "level" "^8.0.0" + "lru-cache" "^5.1.1" + "memory-level" "^1.0.0" + +"@nomicfoundation/ethereumjs-common@^3.0.0": + "integrity" "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "crc-32" "^1.2.0" + +"@nomicfoundation/ethereumjs-ethash@^2.0.0": + "integrity" "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "abstract-level" "^1.0.3" + "bigint-crypto-utils" "^3.0.23" + "ethereum-cryptography" "0.1.3" + +"@nomicfoundation/ethereumjs-evm@^1.0.0": + "integrity" "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@types/async-eventemitter" "^0.2.1" + "async-eventemitter" "^0.2.4" + "debug" "^4.3.3" + "ethereum-cryptography" "0.1.3" + "mcl-wasm" "^0.7.1" + "rustbn.js" "~0.2.0" + +"@nomicfoundation/ethereumjs-rlp@^4.0.0", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2": + "integrity" "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz" + "version" "4.0.0" + +"@nomicfoundation/ethereumjs-statemanager@^1.0.0": + "integrity" "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "debug" "^4.3.3" + "ethereum-cryptography" "0.1.3" + "functional-red-black-tree" "^1.0.1" + +"@nomicfoundation/ethereumjs-trie@^5.0.0": + "integrity" "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "ethereum-cryptography" "0.1.3" + "readable-stream" "^3.6.0" + +"@nomicfoundation/ethereumjs-tx@^4.0.0": + "integrity" "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "ethereum-cryptography" "0.1.3" + +"@nomicfoundation/ethereumjs-util@^8.0.0": + "integrity" "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz" + "version" "8.0.0" + dependencies: + "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" + "ethereum-cryptography" "0.1.3" + +"@nomicfoundation/ethereumjs-vm@^6.0.0": + "integrity" "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-evm" "^1.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@types/async-eventemitter" "^0.2.1" + "async-eventemitter" "^0.2.4" + "debug" "^4.3.3" + "ethereum-cryptography" "0.1.3" + "functional-red-black-tree" "^1.0.1" + "mcl-wasm" "^0.7.1" + "rustbn.js" "~0.2.0" + +"@nomicfoundation/hardhat-chai-matchers@^1.0.0", "@nomicfoundation/hardhat-chai-matchers@^1.0.3": + "integrity" "sha512-qEE7Drs2HSY+krH09TXm6P9LFogs0BqbUq6wPD7nQRhmJ+p5zoDaIZjM5WL1pHqU5MpGqya3y+BdwmTYBfU5UA==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "@ethersproject/abi" "^5.1.2" + "@types/chai-as-promised" "^7.1.3" + "chai-as-promised" "^7.1.1" + "chalk" "^2.4.2" + "deep-eql" "^4.0.1" + "ordinal" "^1.0.3" + +"@nomicfoundation/hardhat-network-helpers@^1.0.0", "@nomicfoundation/hardhat-network-helpers@^1.0.6": + "integrity" "sha512-a35iVD4ycF6AoTfllAnKm96IPIzzHpgKX/ep4oKc2bsUKFfMlacWdyntgC/7d5blyCTXfFssgNAvXDZfzNWVGQ==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "ethereumjs-util" "^7.1.4" + +"@nomicfoundation/hardhat-toolbox@^1.0.2": + "integrity" "sha512-8CEgWSKUK2aMit+76Sez8n7UB0Ze1lwT+LcWxj4EFP30lQWOwOws048t6MTPfThH0BlSWjC6hJRr0LncIkc1Sw==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-1.0.2.tgz" + "version" "1.0.2" + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.0.3": + "integrity" "sha512-HuJd1K+2MgmFIYEpx46uzwEFjvzKAI765mmoMxy4K+Aqq1p+q7hHRlsFU2kx3NB8InwotkkIq3A5FLU1sI1WDw==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz" + "version" "0.0.3" + +"@nomicfoundation/solidity-analyzer@^0.0.3": + "integrity" "sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz" + "version" "0.0.3" + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.0.3" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.0.3" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.0.3" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.0.3" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.0.3" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.0.3" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.0.3" + +"@nomiclabs/hardhat-ethers@^2.0.0", "@nomiclabs/hardhat-ethers@^2.1.0": + "integrity" "sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA==" + "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz" + "version" "2.1.1" + +"@nomiclabs/hardhat-etherscan@^2.1.6", "@nomiclabs/hardhat-etherscan@^3.0.0": + "integrity" "sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA==" + "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz" + "version" "2.1.8" dependencies: "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" - cbor "^5.0.2" - debug "^4.1.1" - fs-extra "^7.0.1" - node-fetch "^2.6.0" - semver "^6.3.0" + "cbor" "^5.0.2" + "debug" "^4.1.1" + "fs-extra" "^7.0.1" + "node-fetch" "^2.6.0" + "semver" "^6.3.0" "@nomiclabs/hardhat-waffle@^2.0.3": - version "2.0.3" - resolved "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz" - integrity sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg== + "integrity" "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==" + "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz" + "version" "2.0.3" dependencies: "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" "@nomiclabs/hardhat-web3@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz" - integrity sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q== + "integrity" "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==" + "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz" + "version" "2.0.0" dependencies: "@types/bignumber.js" "^5.0.0" "@npmcli/arborist@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.3.0.tgz#321d9424677bfc08569e98a5ac445ee781f32053" - integrity sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A== + "integrity" "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==" + "resolved" "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz" + "version" "5.3.0" dependencies: "@isaacs/string-locale-compare" "^1.1.0" "@npmcli/installed-package-contents" "^1.0.7" @@ -1864,233 +2190,233 @@ "@npmcli/node-gyp" "^2.0.0" "@npmcli/package-json" "^2.0.0" "@npmcli/run-script" "^4.1.3" - bin-links "^3.0.0" - cacache "^16.0.6" - common-ancestor-path "^1.0.1" - json-parse-even-better-errors "^2.3.1" - json-stringify-nice "^1.1.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - nopt "^5.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.0.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.0" - npmlog "^6.0.2" - pacote "^13.6.1" - parse-conflict-json "^2.0.1" - proc-log "^2.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^2.0.2" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.7" - ssri "^9.0.0" - treeverse "^2.0.0" - walk-up-path "^1.0.0" + "bin-links" "^3.0.0" + "cacache" "^16.0.6" + "common-ancestor-path" "^1.0.1" + "json-parse-even-better-errors" "^2.3.1" + "json-stringify-nice" "^1.1.4" + "mkdirp" "^1.0.4" + "mkdirp-infer-owner" "^2.0.0" + "nopt" "^5.0.0" + "npm-install-checks" "^5.0.0" + "npm-package-arg" "^9.0.0" + "npm-pick-manifest" "^7.0.0" + "npm-registry-fetch" "^13.0.0" + "npmlog" "^6.0.2" + "pacote" "^13.6.1" + "parse-conflict-json" "^2.0.1" + "proc-log" "^2.0.0" + "promise-all-reject-late" "^1.0.0" + "promise-call-limit" "^1.0.1" + "read-package-json-fast" "^2.0.2" + "readdir-scoped-modules" "^1.1.0" + "rimraf" "^3.0.2" + "semver" "^7.3.7" + "ssri" "^9.0.0" + "treeverse" "^2.0.0" + "walk-up-path" "^1.0.0" "@npmcli/fs@^2.1.0": - version "2.1.2" - resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" - integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + "integrity" "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==" + "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" + "version" "2.1.2" dependencies: "@gar/promisify" "^1.1.3" - semver "^7.3.5" + "semver" "^7.3.5" "@npmcli/git@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" - integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== + "integrity" "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==" + "resolved" "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz" + "version" "3.0.2" dependencies: "@npmcli/promise-spawn" "^3.0.0" - lru-cache "^7.4.4" - mkdirp "^1.0.4" - npm-pick-manifest "^7.0.0" - proc-log "^2.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^2.0.2" + "lru-cache" "^7.4.4" + "mkdirp" "^1.0.4" + "npm-pick-manifest" "^7.0.0" + "proc-log" "^2.0.0" + "promise-inflight" "^1.0.1" + "promise-retry" "^2.0.1" + "semver" "^7.3.5" + "which" "^2.0.2" "@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + "integrity" "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==" + "resolved" "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz" + "version" "1.0.7" dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" + "npm-bundled" "^1.1.1" + "npm-normalize-package-bin" "^1.0.1" "@npmcli/map-workspaces@^2.0.3": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" - integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== + "integrity" "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==" + "resolved" "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz" + "version" "2.0.4" dependencies: "@npmcli/name-from-folder" "^1.0.1" - glob "^8.0.1" - minimatch "^5.0.1" - read-package-json-fast "^2.0.3" + "glob" "^8.0.1" + "minimatch" "^5.0.1" + "read-package-json-fast" "^2.0.3" "@npmcli/metavuln-calculator@^3.0.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" - integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== + "integrity" "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==" + "resolved" "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz" + "version" "3.1.1" dependencies: - cacache "^16.0.0" - json-parse-even-better-errors "^2.3.1" - pacote "^13.0.3" - semver "^7.3.5" + "cacache" "^16.0.0" + "json-parse-even-better-errors" "^2.3.1" + "pacote" "^13.0.3" + "semver" "^7.3.5" "@npmcli/move-file@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" - integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + "integrity" "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==" + "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" + "version" "2.0.1" dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" + "mkdirp" "^1.0.4" + "rimraf" "^3.0.2" "@npmcli/name-from-folder@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" - integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== + "integrity" "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==" + "resolved" "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz" + "version" "1.0.1" "@npmcli/node-gyp@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" - integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== + "integrity" "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==" + "resolved" "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz" + "version" "2.0.0" "@npmcli/package-json@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" - integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== + "integrity" "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==" + "resolved" "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz" + "version" "2.0.0" dependencies: - json-parse-even-better-errors "^2.3.1" + "json-parse-even-better-errors" "^2.3.1" "@npmcli/promise-spawn@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" - integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== + "integrity" "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==" + "resolved" "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz" + "version" "3.0.0" dependencies: - infer-owner "^1.0.4" + "infer-owner" "^1.0.4" "@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.1.7": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" - integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== + "integrity" "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==" + "resolved" "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz" + "version" "4.2.1" dependencies: "@npmcli/node-gyp" "^2.0.0" "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^2.0.3" - which "^2.0.2" + "node-gyp" "^9.0.0" + "read-package-json-fast" "^2.0.3" + "which" "^2.0.2" -"@nrwl/cli@14.8.2": - version "14.8.2" - resolved "https://registry.npmjs.org/@nrwl/cli/-/cli-14.8.2.tgz" - integrity sha512-I+oblryFkZJYk9TMsBWNdN0SV7OjsiD80gD1WjA1KXEQiFVfopYgwErBrxoenodncXrMFRCk/QR9U5F+23+Vow== +"@nrwl/cli@14.8.3": + "integrity" "sha512-a8URAbqyZvegXMYU8pCA3Hfv0UdiDJc6HboazxinCJJgZWyqKYxRIWmKiWnfpXsr+qF6ntmBR/tC6yHbOL22gQ==" + "resolved" "https://registry.npmjs.org/@nrwl/cli/-/cli-14.8.3.tgz" + "version" "14.8.3" dependencies: - nx "14.8.2" + "nx" "14.8.3" -"@nrwl/tao@14.8.2": - version "14.8.2" - resolved "https://registry.npmjs.org/@nrwl/tao/-/tao-14.8.2.tgz" - integrity sha512-a4+O307YZJf1H6CDQFGs4DoUvl7xUFSJo2rNHoR9jDlWU+Ug3n0iivX7Fih6Ui0gX4ocEpRwzNMmJhEmEq1BYw== +"@nrwl/tao@14.8.3": + "integrity" "sha512-lN7+1biSM/7PYMMgh3jjOXJ9fe6VjhVrtZsDcB6lcklpShjXfHXqlpXDM7vjlw19aLeZMdFWHFoU2C5BTBtzgQ==" + "resolved" "https://registry.npmjs.org/@nrwl/tao/-/tao-14.8.3.tgz" + "version" "14.8.3" dependencies: - nx "14.8.2" + "nx" "14.8.3" "@octokit/auth-token@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.1.tgz#88bc2baf5d706cb258474e722a720a8365dff2ec" - integrity sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA== + "integrity" "sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA==" + "resolved" "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.1.tgz" + "version" "3.0.1" dependencies: "@octokit/types" "^7.0.0" -"@octokit/core@^4.0.0": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.0.5.tgz#589e68c0a35d2afdcd41dafceab072c2fbc6ab5f" - integrity sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA== +"@octokit/core@^4.0.0", "@octokit/core@>=3", "@octokit/core@>=4": + "integrity" "sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA==" + "resolved" "https://registry.npmjs.org/@octokit/core/-/core-4.0.5.tgz" + "version" "4.0.5" dependencies: "@octokit/auth-token" "^3.0.0" "@octokit/graphql" "^5.0.0" "@octokit/request" "^6.0.0" "@octokit/request-error" "^3.0.0" "@octokit/types" "^7.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" + "before-after-hook" "^2.2.0" + "universal-user-agent" "^6.0.0" "@octokit/endpoint@^7.0.0": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.2.tgz#11ee868406ba7bb1642e61bbe676d641f79f02be" - integrity sha512-8/AUACfE9vpRpehE6ZLfEtzkibe5nfsSwFZVMsG8qabqRt1M81qZYUFRZa1B8w8lP6cdfDJfRq9HWS+MbmR7tw== + "integrity" "sha512-8/AUACfE9vpRpehE6ZLfEtzkibe5nfsSwFZVMsG8qabqRt1M81qZYUFRZa1B8w8lP6cdfDJfRq9HWS+MbmR7tw==" + "resolved" "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.2.tgz" + "version" "7.0.2" dependencies: "@octokit/types" "^7.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" + "is-plain-object" "^5.0.0" + "universal-user-agent" "^6.0.0" "@octokit/graphql@^5.0.0": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.1.tgz#a06982514ad131fb6fbb9da968653b2233fade9b" - integrity sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA== + "integrity" "sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA==" + "resolved" "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.1.tgz" + "version" "5.0.1" dependencies: "@octokit/request" "^6.0.0" "@octokit/types" "^7.0.0" - universal-user-agent "^6.0.0" + "universal-user-agent" "^6.0.0" "@octokit/openapi-types@^13.11.0": - version "13.13.1" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-13.13.1.tgz#a783bacb1817c9f61a2a0c3f81ea22ad62340fdf" - integrity sha512-4EuKSk3N95UBWFau3Bz9b3pheQ8jQYbKmBL5+GSuY8YDPDwu03J4BjI+66yNi8aaX/3h1qDpb0mbBkLdr+cfGQ== + "integrity" "sha512-4EuKSk3N95UBWFau3Bz9b3pheQ8jQYbKmBL5+GSuY8YDPDwu03J4BjI+66yNi8aaX/3h1qDpb0mbBkLdr+cfGQ==" + "resolved" "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.13.1.tgz" + "version" "13.13.1" "@octokit/plugin-enterprise-rest@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz" - integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + "integrity" "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==" + "resolved" "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz" + "version" "6.0.1" "@octokit/plugin-paginate-rest@^4.0.0": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.3.1.tgz#553e653ee0318605acd23bf3a799c8bfafdedae3" - integrity sha512-h8KKxESmSFTcXX409CAxlaOYscEDvN2KGQRsLCGT1NSqRW+D6EXLVQ8vuHhFznS9MuH9QYw1GfsUN30bg8hjVA== + "integrity" "sha512-h8KKxESmSFTcXX409CAxlaOYscEDvN2KGQRsLCGT1NSqRW+D6EXLVQ8vuHhFznS9MuH9QYw1GfsUN30bg8hjVA==" + "resolved" "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.3.1.tgz" + "version" "4.3.1" dependencies: "@octokit/types" "^7.5.0" "@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + "integrity" "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==" + "resolved" "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" + "version" "1.0.4" "@octokit/plugin-rest-endpoint-methods@^6.0.0": - version "6.6.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.6.2.tgz#cfd1c7280940d5a82d9af12566bafcb33f22bee4" - integrity sha512-n9dL5KMpz9qVFSNdcVWC8ZPbl68QbTk7+CMPXCXqaMZOLn1n1YuoSFFCy84Ge0fx333fUqpnBHv8BFjwGtUQkA== + "integrity" "sha512-n9dL5KMpz9qVFSNdcVWC8ZPbl68QbTk7+CMPXCXqaMZOLn1n1YuoSFFCy84Ge0fx333fUqpnBHv8BFjwGtUQkA==" + "resolved" "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.6.2.tgz" + "version" "6.6.2" dependencies: "@octokit/types" "^7.5.0" - deprecation "^2.3.1" + "deprecation" "^2.3.1" "@octokit/request-error@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.1.tgz#3fd747913c06ab2195e52004a521889dadb4b295" - integrity sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ== + "integrity" "sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ==" + "resolved" "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.1.tgz" + "version" "3.0.1" dependencies: "@octokit/types" "^7.0.0" - deprecation "^2.0.0" - once "^1.4.0" + "deprecation" "^2.0.0" + "once" "^1.4.0" "@octokit/request@^6.0.0": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.1.tgz#3ceeb22dab09a29595d96594b6720fc14495cf4e" - integrity sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ== + "integrity" "sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ==" + "resolved" "https://registry.npmjs.org/@octokit/request/-/request-6.2.1.tgz" + "version" "6.2.1" dependencies: "@octokit/endpoint" "^7.0.0" "@octokit/request-error" "^3.0.0" "@octokit/types" "^7.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" + "is-plain-object" "^5.0.0" + "node-fetch" "^2.6.7" + "universal-user-agent" "^6.0.0" "@octokit/rest@^19.0.3": - version "19.0.4" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.4.tgz#fd8bed1cefffa486e9ae46a9dc608ce81bcfcbdd" - integrity sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA== + "integrity" "sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA==" + "resolved" "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.4.tgz" + "version" "19.0.4" dependencies: "@octokit/core" "^4.0.0" "@octokit/plugin-paginate-rest" "^4.0.0" @@ -2098,216 +2424,271 @@ "@octokit/plugin-rest-endpoint-methods" "^6.0.0" "@octokit/types@^7.0.0", "@octokit/types@^7.5.0": - version "7.5.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-7.5.1.tgz#4e8b182933c17e1f41cc25d44757dbdb7bd76c1b" - integrity sha512-Zk4OUMLCSpXNI8KZZn47lVLJSsgMyCimsWWQI5hyjZg7hdYm0kjotaIkbG0Pp8SfU2CofMBzonboTqvzn3FrJA== + "integrity" "sha512-Zk4OUMLCSpXNI8KZZn47lVLJSsgMyCimsWWQI5hyjZg7hdYm0kjotaIkbG0Pp8SfU2CofMBzonboTqvzn3FrJA==" + "resolved" "https://registry.npmjs.org/@octokit/types/-/types-7.5.1.tgz" + "version" "7.5.1" dependencies: "@octokit/openapi-types" "^13.11.0" -"@openzeppelin/contracts@^4.2.0", "@openzeppelin/contracts@^4.6.0": - version "4.7.3" - resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz" - integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== +"@openzeppelin/contracts-upgradeable@^4.7.3": + "integrity" "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" + "resolved" "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz" + "version" "4.7.3" + +"@openzeppelin/contracts@^4.2.0", "@openzeppelin/contracts@^4.6.0", "@openzeppelin/contracts@^4.7.3": + "integrity" "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" + "resolved" "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz" + "version" "4.7.3" "@parcel/watcher@2.0.4": - version "2.0.4" - resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz" - integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== + "integrity" "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==" + "resolved" "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz" + "version" "2.0.4" dependencies: - node-addon-api "^3.2.1" - node-gyp-build "^4.3.0" + "node-addon-api" "^3.2.1" + "node-gyp-build" "^4.3.0" "@scure/base@~1.1.0": - version "1.1.1" - resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" - integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + "integrity" "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" + "resolved" "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" + "version" "1.1.1" "@scure/bip32@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz" - integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== + "integrity" "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==" + "resolved" "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz" + "version" "1.1.0" dependencies: "@noble/hashes" "~1.1.1" "@noble/secp256k1" "~1.6.0" "@scure/base" "~1.1.0" "@scure/bip39@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz" - integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== + "integrity" "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==" + "resolved" "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz" + "version" "1.1.0" dependencies: "@noble/hashes" "~1.1.1" "@scure/base" "~1.1.0" "@sentry/core@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz" - integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + "integrity" "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==" + "resolved" "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz" + "version" "5.30.0" dependencies: "@sentry/hub" "5.30.0" "@sentry/minimal" "5.30.0" "@sentry/types" "5.30.0" "@sentry/utils" "5.30.0" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/hub@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz" - integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + "integrity" "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==" + "resolved" "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz" + "version" "5.30.0" dependencies: "@sentry/types" "5.30.0" "@sentry/utils" "5.30.0" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/minimal@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz" - integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + "integrity" "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==" + "resolved" "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz" + "version" "5.30.0" dependencies: "@sentry/hub" "5.30.0" "@sentry/types" "5.30.0" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/node@^5.18.1": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz" - integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + "integrity" "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==" + "resolved" "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz" + "version" "5.30.0" dependencies: "@sentry/core" "5.30.0" "@sentry/hub" "5.30.0" "@sentry/tracing" "5.30.0" "@sentry/types" "5.30.0" "@sentry/utils" "5.30.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" + "cookie" "^0.4.1" + "https-proxy-agent" "^5.0.0" + "lru_map" "^0.3.3" + "tslib" "^1.9.3" "@sentry/tracing@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz" - integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + "integrity" "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==" + "resolved" "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz" + "version" "5.30.0" dependencies: "@sentry/hub" "5.30.0" "@sentry/minimal" "5.30.0" "@sentry/types" "5.30.0" "@sentry/utils" "5.30.0" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/types@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" - integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + "integrity" "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" + "resolved" "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" + "version" "5.30.0" "@sentry/utils@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz" - integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + "integrity" "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==" + "resolved" "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz" + "version" "5.30.0" dependencies: "@sentry/types" "5.30.0" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sinclair/typebox@^0.24.1": - version "0.24.28" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.28.tgz" - integrity sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow== + "integrity" "sha512-ka0W0KN5i6LfrSocduwliMMpqVgohtPFidKdMEOUjoOFCHcOOYkKsPRxfs5f15oPNHTm6ERAm0GV/+/LTKeiWg==" + "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.44.tgz" + "version" "0.24.44" + +"@sindresorhus/is@^0.14.0": + "integrity" "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" + "version" "0.14.0" "@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + "integrity" "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" + "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + "version" "4.6.0" "@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + "integrity" "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==" + "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" + "version" "1.8.3" dependencies: - type-detect "4.0.8" + "type-detect" "4.0.8" "@sinonjs/fake-timers@^9.1.2": - version "9.1.2" - resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" - integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + "integrity" "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==" + "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" + "version" "9.1.2" dependencies: "@sinonjs/commons" "^1.7.0" -"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.2": - version "0.14.3" - resolved "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz" - integrity sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw== +"@solidity-parser/parser@^0.14.0": + "integrity" "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==" + "resolved" "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz" + "version" "0.14.3" + dependencies: + "antlr4ts" "^0.5.0-alpha.4" + +"@szmarczak/http-timer@^1.1.2": + "integrity" "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==" + "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" + "version" "1.1.2" dependencies: - antlr4ts "^0.5.0-alpha.4" + "defer-to-connect" "^1.0.1" "@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + "integrity" "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==" + "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" + "version" "4.0.6" dependencies: - defer-to-connect "^2.0.0" + "defer-to-connect" "^2.0.0" "@szmarczak/http-timer@^5.0.1": - version "5.0.1" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" - integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + "integrity" "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==" + "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" + "version" "5.0.1" dependencies: - defer-to-connect "^2.0.1" + "defer-to-connect" "^2.0.1" "@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "integrity" "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" + "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" + "version" "2.0.0" + +"@truffle/error@^0.1.1": + "integrity" "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==" + "resolved" "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz" + "version" "0.1.1" + +"@truffle/hdwallet-provider@latest": + "version" "2.0.16" + dependencies: + "@ethereumjs/common" "^2.4.0" + "@ethereumjs/tx" "^3.3.0" + "@metamask/eth-sig-util" "4.0.1" + "@types/web3" "^1.0.20" + "ethereum-cryptography" "1.1.2" + "ethereum-protocol" "^1.0.1" + "ethereumjs-util" "^7.1.5" + "ethereumjs-wallet" "^1.0.2" + "web3" "1.7.4" + "web3-provider-engine" "16.0.3" + +"@truffle/interface-adapter@^0.5.22": + "integrity" "sha512-Bgl5Afb1mPVNedI8CJzZQzVIdrZWSXISTBrXPZmppD4Q+6V1RUzlLxiaGGB4gYHOA+U0pBzD8MCcSycPAD9RsA==" + "resolved" "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.22.tgz" + "version" "0.5.22" + dependencies: + "bn.js" "^5.1.3" + "ethers" "^4.0.32" + "web3" "1.7.4" + +"@truffle/provider@^0.2.24": + "integrity" "sha512-DJrSxmMuJhC8/m7HUMo5E4wq+SUhg6iK/r9dYAHfnGOUZVj4Pxl0hiqYCDm9jU1iZwk3BmzkctoMS5+qJYST0A==" + "resolved" "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.60.tgz" + "version" "0.2.60" + dependencies: + "@truffle/error" "^0.1.1" + "@truffle/interface-adapter" "^0.5.22" + "debug" "^4.3.1" + "web3" "1.7.4" "@trufflesuite/bigint-buffer@1.1.10": - version "1.1.10" - resolved "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz" - integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== + "integrity" "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==" + "resolved" "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz" + "version" "1.1.10" dependencies: - node-gyp-build "4.4.0" + "node-gyp-build" "4.4.0" "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + "integrity" "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "resolved" "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + "version" "1.0.9" "@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + "integrity" "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + "resolved" "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + "version" "1.0.11" "@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + "integrity" "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "resolved" "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + "version" "1.0.3" "@tsconfig/node16@^1.0.2": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" - integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + "integrity" "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + "resolved" "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" + "version" "1.0.3" -"@typechain/ethers-v5@^9.0.0": - version "9.0.0" - resolved "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz" - integrity sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ== +"@typechain/ethers-v5@^10.1.0", "@typechain/ethers-v5@^9.0.0": + "integrity" "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==" + "resolved" "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz" + "version" "9.0.0" dependencies: - lodash "^4.17.15" - ts-essentials "^7.0.1" + "lodash" "^4.17.15" + "ts-essentials" "^7.0.1" -"@typechain/hardhat@^2.3.0": - version "2.3.1" - resolved "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-2.3.1.tgz" - integrity sha512-BQV8OKQi0KAzLXCdsPO0pZBNQQ6ra8A2ucC26uFX/kquRBtJu1yEyWnVSmtr07b5hyRoJRpzUeINLnyqz4/MAw== +"@typechain/hardhat@^2.3.0", "@typechain/hardhat@^6.1.2": + "integrity" "sha512-BQV8OKQi0KAzLXCdsPO0pZBNQQ6ra8A2ucC26uFX/kquRBtJu1yEyWnVSmtr07b5hyRoJRpzUeINLnyqz4/MAw==" + "resolved" "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-2.3.1.tgz" + "version" "2.3.1" dependencies: - fs-extra "^9.1.0" + "fs-extra" "^9.1.0" -"@types/abstract-leveldown@*": - version "7.2.0" - resolved "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz" - integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== +"@types/async-eventemitter@^0.2.1": + "integrity" "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==" + "resolved" "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz" + "version" "0.2.1" "@types/babel__core@^7.1.14": - version "7.1.19" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" - integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + "integrity" "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==" + "resolved" "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" + "version" "7.1.19" dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -2316,849 +2697,932 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + "integrity" "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==" + "resolved" "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" + "version" "7.6.4" dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + "integrity" "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==" + "resolved" "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" + "version" "7.4.1" dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.18.2" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz" - integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg== + "integrity" "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==" + "resolved" "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz" + "version" "7.18.2" dependencies: "@babel/types" "^7.3.0" "@types/bignumber.js@^5.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz" - integrity sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA== + "integrity" "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==" + "resolved" "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz" + "version" "5.0.0" dependencies: - bignumber.js "*" + "bignumber.js" "*" "@types/bn.js@*", "@types/bn.js@^5.1.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz" - integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== + "integrity" "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==" + "resolved" "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz" + "version" "5.1.1" dependencies: "@types/node" "*" "@types/bn.js@^4.11.3": - version "4.11.6" - resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + "integrity" "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==" + "resolved" "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz" + "version" "4.11.6" dependencies: "@types/node" "*" "@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": - version "6.0.2" - resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz" - integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== + "integrity" "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==" + "resolved" "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz" + "version" "6.0.2" dependencies: "@types/http-cache-semantics" "*" "@types/keyv" "*" "@types/node" "*" "@types/responselike" "*" -"@types/chai-as-promised@^7.1.5": - version "7.1.5" - resolved "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz" - integrity sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ== +"@types/chai-as-promised@^7.1.3", "@types/chai-as-promised@^7.1.5": + "integrity" "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==" + "resolved" "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz" + "version" "7.1.5" dependencies: "@types/chai" "*" -"@types/chai@*", "@types/chai@^4.3.0": - version "4.3.3" - resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz" - integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g== +"@types/chai@*", "@types/chai@^4.2.0", "@types/chai@^4.3.0": + "integrity" "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" + "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz" + "version" "4.3.3" "@types/concat-stream@^1.6.0": - version "1.6.1" - resolved "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz" - integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== + "integrity" "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==" + "resolved" "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz" + "version" "1.6.1" dependencies: "@types/node" "*" "@types/form-data@0.0.33": - version "0.0.33" - resolved "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz" - integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + "integrity" "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==" + "resolved" "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz" + "version" "0.0.33" dependencies: "@types/node" "*" +"@types/glob@^7.1.1": + "integrity" "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==" + "resolved" "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + "@types/graceful-fs@^4.1.3": - version "4.1.5" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + "integrity" "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==" + "resolved" "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" + "version" "4.1.5" dependencies: "@types/node" "*" "@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + "integrity" "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + "resolved" "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" + "version" "4.0.1" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + "integrity" "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" + "version" "2.0.4" "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + "integrity" "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + "version" "3.0.1" dependencies: "@types/istanbul-lib-report" "*" "@types/jest@^28.1.7": - version "28.1.8" - resolved "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz" - integrity sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw== + "integrity" "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==" + "resolved" "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz" + "version" "28.1.8" dependencies: - expect "^28.0.0" - pretty-format "^28.0.0" + "expect" "^28.0.0" + "pretty-format" "^28.0.0" "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + "integrity" "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + "version" "7.0.11" "@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + "integrity" "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + "resolved" "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + "version" "0.0.29" "@types/keyv@*": - version "3.1.4" - resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + "integrity" "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==" + "resolved" "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" + "version" "3.1.4" dependencies: "@types/node" "*" -"@types/level-errors@*": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz" - integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== +"@types/lru-cache@^5.1.0": + "integrity" "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + "resolved" "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" + "version" "5.1.1" -"@types/levelup@^4.3.0": - version "4.3.3" - resolved "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz" - integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== - dependencies: - "@types/abstract-leveldown" "*" - "@types/level-errors" "*" - "@types/node" "*" +"@types/lru-cache@5.1.1": + "integrity" "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + "resolved" "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" + "version" "5.1.1" -"@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0": - version "5.1.1" - resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== +"@types/minimatch@*": + "integrity" "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" + "version" "5.1.2" "@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + "integrity" "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" + "version" "3.0.5" "@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + "integrity" "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + "resolved" "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" + "version" "1.2.2" "@types/mkdirp@^0.5.2": - version "0.5.2" - resolved "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz" - integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== + "integrity" "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==" + "resolved" "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz" + "version" "0.5.2" dependencies: "@types/node" "*" "@types/mocha@^9.0.0", "@types/mocha@^9.1.0", "@types/mocha@^9.1.1": - version "9.1.1" - resolved "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" - integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== + "integrity" "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" + "resolved" "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" + "version" "9.1.1" "@types/node-fetch@^2.6.2": - version "2.6.2" - resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz" - integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== + "integrity" "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==" + "resolved" "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz" + "version" "2.6.2" dependencies: "@types/node" "*" - form-data "^3.0.0" + "form-data" "^3.0.0" -"@types/node@*": - version "18.7.13" - resolved "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz" - integrity sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw== +"@types/node@*", "@types/node@>=12.0.0": + "integrity" "sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-18.8.2.tgz" + "version" "18.8.2" "@types/node@^10.0.3": - version "10.17.60" - resolved "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" - integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + "integrity" "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" + "version" "10.17.60" "@types/node@^12.12.6": - version "12.20.55" - resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + "integrity" "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" + "version" "12.20.55" "@types/node@^17.0.23": - version "17.0.45" - resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + "integrity" "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" + "version" "17.0.45" "@types/node@^8.0.0": - version "8.10.66" - resolved "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz" - integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + "integrity" "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz" + "version" "8.10.66" "@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + "integrity" "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" + "resolved" "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" + "version" "2.4.1" "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" + "version" "4.0.0" "@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + "integrity" "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==" + "resolved" "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz" + "version" "3.1.0" dependencies: "@types/node" "*" "@types/prettier@^2.1.1", "@types/prettier@^2.1.5": - version "2.7.1" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz" - integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow== + "integrity" "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==" + "resolved" "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz" + "version" "2.7.1" "@types/qs@^6.2.31", "@types/qs@^6.9.7": - version "6.9.7" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + "integrity" "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + "resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" + "version" "6.9.7" "@types/resolve@^0.0.8": - version "0.0.8" - resolved "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + "integrity" "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==" + "resolved" "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz" + "version" "0.0.8" dependencies: "@types/node" "*" "@types/responselike@*", "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + "integrity" "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==" + "resolved" "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" + "version" "1.0.0" dependencies: "@types/node" "*" "@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + "integrity" "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==" + "resolved" "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz" + "version" "4.0.3" dependencies: "@types/node" "*" "@types/seedrandom@3.0.1": - version "3.0.1" - resolved "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz" - integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== + "integrity" "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==" + "resolved" "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz" + "version" "3.0.1" "@types/sinon-chai@^3.2.3": - version "3.2.8" - resolved "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz" - integrity sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g== + "integrity" "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==" + "resolved" "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz" + "version" "3.2.8" dependencies: "@types/chai" "*" "@types/sinon" "*" "@types/sinon@*": - version "10.0.13" - resolved "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz" - integrity sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ== + "integrity" "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==" + "resolved" "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz" + "version" "10.0.13" dependencies: "@types/sinonjs__fake-timers" "*" "@types/sinonjs__fake-timers@*": - version "8.1.2" - resolved "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz" - integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== + "integrity" "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==" + "resolved" "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz" + "version" "8.1.2" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + "integrity" "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + "resolved" "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" + "version" "2.0.1" "@types/underscore@*": - version "1.11.4" - resolved "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz" - integrity sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg== + "integrity" "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==" + "resolved" "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz" + "version" "1.11.4" + +"@types/web3@^1.0.20": + "integrity" "sha512-eFiYJKggNrOl0nsD+9cMh2MLk4zVBfXfGnVeRFbpiZzBE20eet4KLA3fXcjSuHaBn0RnQzwLAGdgzgzdet4C0A==" + "resolved" "https://registry.npmjs.org/@types/web3/-/web3-1.2.2.tgz" + "version" "1.2.2" + dependencies: + "web3" "*" "@types/web3@1.0.19": - version "1.0.19" - resolved "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz" - integrity sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A== + "integrity" "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==" + "resolved" "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz" + "version" "1.0.19" dependencies: "@types/bn.js" "*" "@types/underscore" "*" "@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + "integrity" "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + "version" "21.0.0" "@types/yargs@^17.0.8": - version "17.0.11" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.11.tgz" - integrity sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA== + "integrity" "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==" + "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz" + "version" "17.0.13" dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.17.0": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.1.tgz" - integrity sha512-ky7EFzPhqz3XlhS7vPOoMDaQnQMn+9o5ICR9CPr/6bw8HrFkzhMSxuA3gRfiJVvs7geYrSeawGJjZoZQKCOglQ== - dependencies: - "@typescript-eslint/scope-manager" "5.38.1" - "@typescript-eslint/type-utils" "5.38.1" - "@typescript-eslint/utils" "5.38.1" - debug "^4.3.4" - ignore "^5.2.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.17.0": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.38.1.tgz" - integrity sha512-LDqxZBVFFQnQRz9rUZJhLmox+Ep5kdUmLatLQnCRR6523YV+XhRjfYzStQ4MheFA8kMAfUlclHSbu+RKdRwQKw== - dependencies: - "@typescript-eslint/scope-manager" "5.38.1" - "@typescript-eslint/types" "5.38.1" - "@typescript-eslint/typescript-estree" "5.38.1" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.38.1": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.38.1.tgz" - integrity sha512-BfRDq5RidVU3RbqApKmS7RFMtkyWMM50qWnDAkKgQiezRtLKsoyRKIvz1Ok5ilRWeD9IuHvaidaLxvGx/2eqTQ== - dependencies: - "@typescript-eslint/types" "5.38.1" - "@typescript-eslint/visitor-keys" "5.38.1" - -"@typescript-eslint/type-utils@5.38.1": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.38.1.tgz" - integrity sha512-UU3j43TM66gYtzo15ivK2ZFoDFKKP0k03MItzLdq0zV92CeGCXRfXlfQX5ILdd4/DSpHkSjIgLLLh1NtkOJOAw== - dependencies: - "@typescript-eslint/typescript-estree" "5.38.1" - "@typescript-eslint/utils" "5.38.1" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.38.1": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.38.1.tgz" - integrity sha512-QTW1iHq1Tffp9lNfbfPm4WJabbvpyaehQ0SrvVK2yfV79SytD9XDVxqiPvdrv2LK7DGSFo91TB2FgWanbJAZXg== - -"@typescript-eslint/typescript-estree@5.38.1": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.1.tgz" - integrity sha512-99b5e/Enoe8fKMLdSuwrfH/C0EIbpUWmeEKHmQlGZb8msY33qn1KlkFww0z26o5Omx7EVjzVDCWEfrfCDHfE7g== - dependencies: - "@typescript-eslint/types" "5.38.1" - "@typescript-eslint/visitor-keys" "5.38.1" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.38.1": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.38.1.tgz" - integrity sha512-oIuUiVxPBsndrN81oP8tXnFa/+EcZ03qLqPDfSZ5xIJVm7A9V0rlkQwwBOAGtrdN70ZKDlKv+l1BeT4eSFxwXA== + "integrity" "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz" + "version" "5.39.0" + dependencies: + "@typescript-eslint/scope-manager" "5.39.0" + "@typescript-eslint/type-utils" "5.39.0" + "@typescript-eslint/utils" "5.39.0" + "debug" "^4.3.4" + "ignore" "^5.2.0" + "regexpp" "^3.2.0" + "semver" "^7.3.7" + "tsutils" "^3.21.0" + +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.17.0": + "integrity" "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz" + "version" "5.39.0" + dependencies: + "@typescript-eslint/scope-manager" "5.39.0" + "@typescript-eslint/types" "5.39.0" + "@typescript-eslint/typescript-estree" "5.39.0" + "debug" "^4.3.4" + +"@typescript-eslint/scope-manager@5.39.0": + "integrity" "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz" + "version" "5.39.0" + dependencies: + "@typescript-eslint/types" "5.39.0" + "@typescript-eslint/visitor-keys" "5.39.0" + +"@typescript-eslint/type-utils@5.39.0": + "integrity" "sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz" + "version" "5.39.0" + dependencies: + "@typescript-eslint/typescript-estree" "5.39.0" + "@typescript-eslint/utils" "5.39.0" + "debug" "^4.3.4" + "tsutils" "^3.21.0" + +"@typescript-eslint/types@5.39.0": + "integrity" "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz" + "version" "5.39.0" + +"@typescript-eslint/typescript-estree@5.39.0": + "integrity" "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz" + "version" "5.39.0" + dependencies: + "@typescript-eslint/types" "5.39.0" + "@typescript-eslint/visitor-keys" "5.39.0" + "debug" "^4.3.4" + "globby" "^11.1.0" + "is-glob" "^4.0.3" + "semver" "^7.3.7" + "tsutils" "^3.21.0" + +"@typescript-eslint/utils@5.39.0": + "integrity" "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz" + "version" "5.39.0" dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.38.1" - "@typescript-eslint/types" "5.38.1" - "@typescript-eslint/typescript-estree" "5.38.1" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + "@typescript-eslint/scope-manager" "5.39.0" + "@typescript-eslint/types" "5.39.0" + "@typescript-eslint/typescript-estree" "5.39.0" + "eslint-scope" "^5.1.1" + "eslint-utils" "^3.0.0" -"@typescript-eslint/visitor-keys@5.38.1": - version "5.38.1" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.1.tgz" - integrity sha512-bSHr1rRxXt54+j2n4k54p4fj8AHJ49VDWtjpImOpzQj4qjAiOpPni+V1Tyajh19Api1i844F757cur8wH3YvOA== +"@typescript-eslint/visitor-keys@5.39.0": + "integrity" "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz" + "version" "5.39.0" dependencies: - "@typescript-eslint/types" "5.38.1" - eslint-visitor-keys "^3.3.0" + "@typescript-eslint/types" "5.39.0" + "eslint-visitor-keys" "^3.3.0" "@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + "integrity" "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + "resolved" "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" + "version" "1.1.2" "@yarnpkg/lockfile@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + "integrity" "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + "resolved" "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + "version" "1.1.0" "@yarnpkg/parsers@^3.0.0-rc.18": - version "3.0.0-rc.22" - resolved "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.22.tgz" - integrity sha512-GAWDjXduYBUVmOzlj3X0OwTQ1BV4ZeDdgw8yXST3K0lB95drWEGxa1at0v7BmHDyK2y1F1IJufc8N4yrcuXjWg== + "integrity" "sha512-GAWDjXduYBUVmOzlj3X0OwTQ1BV4ZeDdgw8yXST3K0lB95drWEGxa1at0v7BmHDyK2y1F1IJufc8N4yrcuXjWg==" + "resolved" "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.22.tgz" + "version" "3.0.0-rc.22" dependencies: - js-yaml "^3.10.0" - tslib "^2.4.0" + "js-yaml" "^3.10.0" + "tslib" "^2.4.0" "@zkochan/js-yaml@0.0.6": - version "0.0.6" - resolved "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz" - integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== - dependencies: - argparse "^2.0.1" - -JSONStream@^1.0.4: - version "1.3.5" - resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -abortcontroller-polyfill@^1.7.3: - version "1.7.3" - resolved "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz" - integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== - -abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -abstract-leveldown@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz" - integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== - dependencies: - buffer "^6.0.3" - catering "^2.0.0" - is-buffer "^2.0.5" - level-concat-iterator "^3.0.0" - level-supports "^2.0.1" - queue-microtask "^1.2.3" - -abstract-leveldown@~6.2.1: - version "6.2.3" - resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - 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" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.4.1, acorn@^8.8.0: - version "8.8.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== - -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" - integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== - -adm-zip@^0.4.16: - version "0.4.16" - resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" - integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== - -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - -aes-js@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz" - integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - 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@3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.0.0: - version "6.1.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz" - integrity sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg== - -antlr4ts@^0.5.0-alpha.4: - version "0.5.0-alpha.4" - resolved "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz" - integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== - -anymatch@^3.0.3, anymatch@~3.1.1, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-back@^3.0.1, array-back@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz" - integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== - -array-back@^4.0.1, array-back@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" - integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== - -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" - integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== - -array.prototype.reduce@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz" - integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -asap@^2.0.0, asap@~2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-eventemitter@^0.2.4: - version "0.2.4" - resolved "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.4.0: - version "2.6.4" - resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -babel-jest@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz" - integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== + "integrity" "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==" + "resolved" "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz" + "version" "0.0.6" + dependencies: + "argparse" "^2.0.1" + +"abbrev@^1.0.0", "abbrev@1": + "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "version" "1.1.1" + +"abbrev@1.0.x": + "integrity" "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" + "version" "1.0.9" + +"abort-controller@^3.0.0": + "integrity" "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==" + "resolved" "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "event-target-shim" "^5.0.0" + +"abortcontroller-polyfill@^1.7.3": + "integrity" "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==" + "resolved" "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz" + "version" "1.7.3" + +"abstract-level@^1.0.0", "abstract-level@^1.0.2", "abstract-level@^1.0.3": + "integrity" "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==" + "resolved" "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "buffer" "^6.0.3" + "catering" "^2.1.0" + "is-buffer" "^2.0.5" + "level-supports" "^4.0.0" + "level-transcoder" "^1.0.1" + "module-error" "^1.0.1" + "queue-microtask" "^1.2.3" + +"abstract-leveldown@^7.2.0": + "integrity" "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==" + "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "buffer" "^6.0.3" + "catering" "^2.0.0" + "is-buffer" "^2.0.5" + "level-concat-iterator" "^3.0.0" + "level-supports" "^2.0.1" + "queue-microtask" "^1.2.3" + +"abstract-leveldown@~2.6.0": + "integrity" "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==" + "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz" + "version" "2.6.3" + dependencies: + "xtend" "~4.0.0" + +"abstract-leveldown@~2.7.1": + "integrity" "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==" + "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz" + "version" "2.7.2" + dependencies: + "xtend" "~4.0.0" + +"accepts@~1.3.8": + "integrity" "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==" + "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + "version" "1.3.8" + dependencies: + "mime-types" "~2.1.34" + "negotiator" "0.6.3" + +"acorn-jsx@^5.3.2": + "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + "version" "5.3.2" + +"acorn-walk@^8.1.1": + "integrity" "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + "version" "8.2.0" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.4.1", "acorn@^8.8.0": + "integrity" "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" + "version" "8.8.0" + +"add-stream@^1.0.0": + "integrity" "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==" + "resolved" "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" + "version" "1.0.0" + +"address@^1.0.1": + "integrity" "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==" + "resolved" "https://registry.npmjs.org/address/-/address-1.2.1.tgz" + "version" "1.2.1" + +"adm-zip@^0.4.16": + "integrity" "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" + "resolved" "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" + "version" "0.4.16" + +"aes-js@^3.1.2": + "integrity" "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" + "resolved" "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz" + "version" "3.1.2" + +"aes-js@3.0.0": + "integrity" "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + "resolved" "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz" + "version" "3.0.0" + +"agent-base@^6.0.2", "agent-base@6": + "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" + "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "debug" "4" + +"agentkeepalive@^4.2.1": + "integrity" "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==" + "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "debug" "^4.1.0" + "depd" "^1.1.2" + "humanize-ms" "^1.2.1" + +"aggregate-error@^3.0.0": + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" + "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" + +"ajv@^6.10.0", "ajv@^6.12.3", "ajv@^6.12.4": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + 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" + +"amdefine@>=0.0.4": + "integrity" "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==" + "resolved" "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + "version" "1.0.1" + +"ansi-colors@^4.1.1": + "integrity" "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + "version" "4.1.3" + +"ansi-colors@3.2.3": + "integrity" "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz" + "version" "3.2.3" + +"ansi-colors@4.1.1": + "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + "version" "4.1.1" + +"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.0": + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "type-fest" "^0.21.3" + +"ansi-regex@^3.0.0": + "integrity" "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" + "version" "3.0.1" + +"ansi-regex@^4.1.0": + "integrity" "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" + "version" "4.1.1" + +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + +"ansi-regex@^6.0.1": + "integrity" "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + "version" "6.0.1" + +"ansi-styles@^3.2.0": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"ansi-styles@^5.0.0": + "integrity" "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + "version" "5.2.0" + +"ansi-styles@^6.0.0": + "integrity" "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz" + "version" "6.1.1" + +"antlr4ts@^0.5.0-alpha.4": + "integrity" "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" + "resolved" "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz" + "version" "0.5.0-alpha.4" + +"anymatch@^3.0.3", "anymatch@~3.1.1", "anymatch@~3.1.2": + "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0", "aproba@^2.0.0": + "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + "version" "2.0.0" + +"are-we-there-yet@^3.0.0": + "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" + +"arg@^4.1.0": + "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + "version" "4.1.3" + +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + +"array-back@^3.0.1", "array-back@^3.1.0": + "integrity" "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" + "resolved" "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz" + "version" "3.1.0" + +"array-back@^4.0.1": + "integrity" "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" + "resolved" "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" + "version" "4.0.2" + +"array-back@^4.0.2": + "integrity" "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" + "resolved" "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" + "version" "4.0.2" + +"array-differ@^3.0.0": + "integrity" "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==" + "resolved" "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" + "version" "3.0.0" + +"array-flatten@1.1.1": + "integrity" "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + "version" "1.1.1" + +"array-ify@^1.0.0": + "integrity" "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==" + "resolved" "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" + "version" "1.0.0" + +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + +"array-uniq@1.0.3": + "integrity" "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + "version" "1.0.3" + +"array.prototype.reduce@^1.0.4": + "integrity" "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==" + "resolved" "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.2" + "es-array-method-boxes-properly" "^1.0.0" + "is-string" "^1.0.7" + +"arrify@^1.0.1": + "integrity" "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" + "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + "version" "1.0.1" + +"arrify@^2.0.1": + "integrity" "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + "resolved" "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" + "version" "2.0.1" + +"asap@^2.0.0", "asap@~2.0.6": + "integrity" "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + "resolved" "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + "version" "2.0.6" + +"asn1.js@^5.2.0": + "integrity" "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==" + "resolved" "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" + "version" "5.4.1" + dependencies: + "bn.js" "^4.0.0" + "inherits" "^2.0.1" + "minimalistic-assert" "^1.0.0" + "safer-buffer" "^2.1.0" + +"asn1@~0.2.3": + "integrity" "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==" + "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "safer-buffer" "~2.1.0" + +"assert-plus@^1.0.0", "assert-plus@1.0.0": + "integrity" "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "version" "1.0.0" + +"assertion-error@^1.1.0": + "integrity" "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + "resolved" "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" + "version" "1.1.0" + +"astral-regex@^2.0.0": + "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + "version" "2.0.0" + +"async-eventemitter@^0.2.2", "async-eventemitter@^0.2.4": + "integrity" "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==" + "resolved" "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz" + "version" "0.2.4" + dependencies: + "async" "^2.4.0" + +"async-limiter@~1.0.0": + "integrity" "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + "resolved" "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" + "version" "1.0.1" + +"async-mutex@^0.2.6": + "integrity" "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==" + "resolved" "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "tslib" "^2.0.0" + +"async@^1.4.2": + "integrity" "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" + "version" "1.5.2" + +"async@^2.0.1", "async@^2.1.2", "async@^2.4.0", "async@^2.5.0": + "integrity" "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==" + "resolved" "https://registry.npmjs.org/async/-/async-2.6.4.tgz" + "version" "2.6.4" + dependencies: + "lodash" "^4.17.14" + +"async@1.x": + "integrity" "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" + "version" "1.5.2" + +"asynckit@^0.4.0": + "integrity" "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + "version" "0.4.0" + +"at-least-node@^1.0.0": + "integrity" "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + "resolved" "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + "version" "1.0.0" + +"available-typed-arrays@^1.0.5": + "integrity" "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + "resolved" "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + "version" "1.0.5" + +"aws-sign2@~0.7.0": + "integrity" "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" + "resolved" "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" + "version" "0.7.0" + +"aws4@^1.8.0": + "integrity" "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "resolved" "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" + "version" "1.11.0" + +"axios@^0.21.1": + "integrity" "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==" + "resolved" "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" + "version" "0.21.4" + dependencies: + "follow-redirects" "^1.14.0" + +"axios@0.21.1": + "integrity" "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==" + "resolved" "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz" + "version" "0.21.1" + dependencies: + "follow-redirects" "^1.10.0" + +"babel-jest@^28.1.3": + "integrity" "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==" + "resolved" "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/transform" "^28.1.3" "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^28.1.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" + "babel-plugin-istanbul" "^6.1.1" + "babel-preset-jest" "^28.1.3" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "slash" "^3.0.0" -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== +"babel-plugin-istanbul@^6.1.1": + "integrity" "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==" + "resolved" "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + "version" "6.1.1" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" + "istanbul-lib-instrument" "^5.0.4" + "test-exclude" "^6.0.0" -babel-plugin-jest-hoist@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz" - integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== +"babel-plugin-jest-hoist@^28.1.3": + "integrity" "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==" + "resolved" "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== +"babel-plugin-polyfill-corejs2@^0.3.3": + "integrity" "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" + "semver" "^6.1.1" + +"babel-plugin-polyfill-corejs3@^0.6.0": + "integrity" "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz" + "version" "0.6.0" + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + "core-js-compat" "^3.25.1" + +"babel-plugin-polyfill-regenerator@^0.4.1": + "integrity" "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + +"babel-preset-current-node-syntax@^1.0.0": + "integrity" "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==" + "resolved" "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + "version" "1.0.1" dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -3173,1908 +3637,2374 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz" - integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== - dependencies: - babel-plugin-jest-hoist "^28.1.3" - babel-preset-current-node-syntax "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2, base-x@^3.0.8: - version "3.0.9" - resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -before-after-hook@^2.2.0: - version "2.2.2" - resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz" - integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== - -bignumber.js@*, bignumber.js@^9.0.0, bignumber.js@^9.0.1: - version "9.1.0" - resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz" - integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== - -bin-links@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" - integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== - dependencies: - cmd-shim "^5.0.0" - mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^2.0.0" - read-cmd-shim "^3.0.0" - rimraf "^3.0.0" - write-file-atomic "^4.0.0" - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -blakejs@^1.1.0: - version "1.2.1" - resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -bluebird@^3.5.0: - version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.0, body-parser@^1.16.0: - version "1.20.0" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.10.3" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserslist@^4.21.3: - version "4.21.4" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== - dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" - -bs58@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58check@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-to-arraybuffer@^0.0.5: - version "0.0.5" - resolved "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz" - integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer-xor@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz" - integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== - dependencies: - safe-buffer "^5.1.1" - -buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bufferutil@4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz" - integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== - dependencies: - node-gyp-build "^4.3.0" - -bufferutil@^4.0.1: - version "4.0.6" - resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz" - integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== - dependencies: - node-gyp-build "^4.3.0" - -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" - integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -byte-size@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz" - integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== +"babel-preset-jest@^28.1.3": + "integrity" "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==" + "resolved" "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz" + "version" "28.1.3" + dependencies: + "babel-plugin-jest-hoist" "^28.1.3" + "babel-preset-current-node-syntax" "^1.0.0" + +"backoff@^2.5.0": + "integrity" "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==" + "resolved" "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "precond" "0.2" + +"balanced-match@^1.0.0": + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + "version" "1.0.2" + +"base-x@^3.0.2", "base-x@^3.0.8": + "integrity" "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==" + "resolved" "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" + "version" "3.0.9" + dependencies: + "safe-buffer" "^5.0.1" + +"base64-js@^1.3.1": + "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + "version" "1.5.1" + +"bcrypt-pbkdf@^1.0.0": + "integrity" "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" + "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "tweetnacl" "^0.14.3" + +"bech32@1.1.4": + "integrity" "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + "resolved" "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" + "version" "1.1.4" + +"before-after-hook@^2.2.0": + "integrity" "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + "resolved" "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" + "version" "2.2.3" + +"bigint-crypto-utils@^3.0.23": + "integrity" "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==" + "resolved" "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz" + "version" "3.1.7" + dependencies: + "bigint-mod-arith" "^3.1.0" + +"bigint-mod-arith@^3.1.0": + "integrity" "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==" + "resolved" "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz" + "version" "3.1.2" + +"bignumber.js@*", "bignumber.js@^9.0.0", "bignumber.js@^9.0.1": + "integrity" "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==" + "resolved" "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz" + "version" "9.1.0" + +"bin-links@^3.0.0": + "integrity" "sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==" + "resolved" "https://registry.npmjs.org/bin-links/-/bin-links-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "cmd-shim" "^5.0.0" + "mkdirp-infer-owner" "^2.0.0" + "npm-normalize-package-bin" "^2.0.0" + "read-cmd-shim" "^3.0.0" + "rimraf" "^3.0.0" + "write-file-atomic" "^4.0.0" + +"binary-extensions@^2.0.0": + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + "version" "2.2.0" + +"bl@^4.0.3", "bl@^4.1.0": + "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" + "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "buffer" "^5.5.0" + "inherits" "^2.0.4" + "readable-stream" "^3.4.0" + +"blakejs@^1.1.0": + "integrity" "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + "resolved" "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" + "version" "1.2.1" + +"bluebird@^3.5.0": + "integrity" "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + "version" "3.7.2" + +"bn.js@^4.0.0", "bn.js@^4.1.0", "bn.js@^4.11.0", "bn.js@^4.11.6", "bn.js@^4.11.8", "bn.js@^4.11.9": + "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + "version" "4.12.0" + +"bn.js@^4.11.1", "bn.js@^4.4.0": + "version" "4.11.9" + +"bn.js@^5.0.0": + "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + "version" "5.2.1" + +"bn.js@^5.1.1": + "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + "version" "5.2.1" + +"bn.js@^5.1.2": + "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + "version" "5.2.1" + +"bn.js@^5.1.3": + "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + "version" "5.2.1" + +"bn.js@^5.2.0": + "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + "version" "5.2.1" + +"bn.js@^5.2.1": + "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + "version" "5.2.1" + +"bn.js@4.11.6": + "integrity" "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" + "version" "4.11.6" + +"body-parser@^1.16.0", "body-parser@1.20.0": + "integrity" "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==" + "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" + "version" "1.20.0" + dependencies: + "bytes" "3.1.2" + "content-type" "~1.0.4" + "debug" "2.6.9" + "depd" "2.0.0" + "destroy" "1.2.0" + "http-errors" "2.0.0" + "iconv-lite" "0.4.24" + "on-finished" "2.4.1" + "qs" "6.10.3" + "raw-body" "2.5.1" + "type-is" "~1.6.18" + "unpipe" "1.0.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"brace-expansion@^2.0.1": + "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "balanced-match" "^1.0.0" + +"braces@^3.0.2", "braces@~3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"brorand@^1.0.1", "brorand@^1.1.0": + "integrity" "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + "resolved" "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + "version" "1.1.0" + +"browser-level@^1.0.1": + "integrity" "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==" + "resolved" "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "abstract-level" "^1.0.2" + "catering" "^2.1.1" + "module-error" "^1.0.2" + "run-parallel-limit" "^1.1.0" + +"browser-stdout@1.3.1": + "integrity" "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + "version" "1.3.1" + +"browserify-aes@^1.0.0", "browserify-aes@^1.0.4", "browserify-aes@^1.2.0": + "integrity" "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==" + "resolved" "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "buffer-xor" "^1.0.3" + "cipher-base" "^1.0.0" + "create-hash" "^1.1.0" + "evp_bytestokey" "^1.0.3" + "inherits" "^2.0.1" + "safe-buffer" "^5.0.1" + +"browserify-cipher@^1.0.0": + "integrity" "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==" + "resolved" "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "browserify-aes" "^1.0.4" + "browserify-des" "^1.0.0" + "evp_bytestokey" "^1.0.0" + +"browserify-des@^1.0.0": + "integrity" "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==" + "resolved" "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "cipher-base" "^1.0.1" + "des.js" "^1.0.0" + "inherits" "^2.0.1" + "safe-buffer" "^5.1.2" + +"browserify-rsa@^4.0.0", "browserify-rsa@^4.0.1": + "integrity" "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==" + "resolved" "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "bn.js" "^5.0.0" + "randombytes" "^2.0.1" + +"browserify-sign@^4.0.0": + "integrity" "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==" + "resolved" "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "bn.js" "^5.1.1" + "browserify-rsa" "^4.0.1" + "create-hash" "^1.2.0" + "create-hmac" "^1.1.7" + "elliptic" "^6.5.3" + "inherits" "^2.0.4" + "parse-asn1" "^5.1.5" + "readable-stream" "^3.6.0" + "safe-buffer" "^5.2.0" + +"browserslist@^4.21.3", "browserslist@^4.21.4", "browserslist@>= 4.21.0": + "integrity" "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" + "version" "4.21.4" + dependencies: + "caniuse-lite" "^1.0.30001400" + "electron-to-chromium" "^1.4.251" + "node-releases" "^2.0.6" + "update-browserslist-db" "^1.0.9" + +"bs58@^4.0.0": + "integrity" "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==" + "resolved" "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "base-x" "^3.0.2" + +"bs58check@^2.1.2": + "integrity" "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==" + "resolved" "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "bs58" "^4.0.0" + "create-hash" "^1.1.0" + "safe-buffer" "^5.1.2" + +"bser@2.1.1": + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" + "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "node-int64" "^0.4.0" + +"btoa@^1.2.1": + "integrity" "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + "resolved" "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz" + "version" "1.2.1" + +"buffer-from@^1.0.0": + "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + "version" "1.1.2" + +"buffer-to-arraybuffer@^0.0.5": + "integrity" "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" + "resolved" "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz" + "version" "0.0.5" + +"buffer-xor@^1.0.3": + "integrity" "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + "resolved" "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + "version" "1.0.3" + +"buffer@^5.0.5", "buffer@^5.5.0", "buffer@^5.6.0": + "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + "version" "5.7.1" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.1.13" + +"buffer@^6.0.3": + "integrity" "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + "version" "6.0.3" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.2.1" + +"bufferutil@^4.0.1", "bufferutil@4.0.5": + "integrity" "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==" + "resolved" "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "node-gyp-build" "^4.3.0" + +"bufio@^1.0.7": + "integrity" "sha512-bd1dDQhiC+bEbEfg56IdBv7faWa6OipMs/AFFFvtFnB3wAYjlwQpQRZ0pm6ZkgtfL0pILRXhKxOiQj6UzoMR7A==" + "resolved" "https://registry.npmjs.org/bufio/-/bufio-1.0.7.tgz" + "version" "1.0.7" + +"builtins@^1.0.3": + "integrity" "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" + "resolved" "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" + "version" "1.0.3" + +"builtins@^5.0.0": + "integrity" "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==" + "resolved" "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "semver" "^7.0.0" + +"busboy@^1.6.0": + "integrity" "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==" + "resolved" "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" + "version" "1.6.0" + dependencies: + "streamsearch" "^1.1.0" + +"byte-size@^7.0.0": + "integrity" "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==" + "resolved" "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz" + "version" "7.0.1" -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +"bytes@3.1.2": + "integrity" "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + "version" "3.1.2" -cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: - version "16.1.3" - resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" - integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== +"cacache@^16.0.0", "cacache@^16.0.6", "cacache@^16.1.0": + "integrity" "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==" + "resolved" "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" + "version" "16.1.3" dependencies: "@npmcli/fs" "^2.1.0" "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - unique-filename "^2.0.0" - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-lookup@^6.0.4: - version "6.1.0" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz" - integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" - 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.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0, camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001400: - version "1.0.30001414" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz" - integrity sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg== - -caseless@^0.12.0, caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -catering@^2.0.0, catering@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - -cbor@^5.0.2: - version "5.2.0" - resolved "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== - dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" - -chai-as-promised@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz" - integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== - dependencies: - check-error "^1.0.2" - -chai-string@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz" - integrity sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw== - -chai@^4.3.6: - version "4.3.6" - resolved "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" - loupe "^2.3.1" - pathval "^1.1.1" - type-detect "^4.0.5" - -chalk@4.1.0, chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - 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" - -chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + "chownr" "^2.0.0" + "fs-minipass" "^2.1.0" + "glob" "^8.0.1" + "infer-owner" "^1.0.4" + "lru-cache" "^7.7.1" + "minipass" "^3.1.6" + "minipass-collect" "^1.0.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "mkdirp" "^1.0.4" + "p-map" "^4.0.0" + "promise-inflight" "^1.0.1" + "rimraf" "^3.0.2" + "ssri" "^9.0.0" + "tar" "^6.1.11" + "unique-filename" "^2.0.0" + +"cacheable-lookup@^5.0.3": + "integrity" "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" + "resolved" "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" + "version" "5.0.4" + +"cacheable-lookup@^6.0.4": + "integrity" "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==" + "resolved" "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz" + "version" "6.1.0" + +"cacheable-request@^6.0.0": + "integrity" "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==" + "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "clone-response" "^1.0.2" + "get-stream" "^5.1.0" + "http-cache-semantics" "^4.0.0" + "keyv" "^3.0.0" + "lowercase-keys" "^2.0.0" + "normalize-url" "^4.1.0" + "responselike" "^1.0.2" + +"cacheable-request@^7.0.2": + "integrity" "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==" + "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" + "version" "7.0.2" + dependencies: + "clone-response" "^1.0.2" + "get-stream" "^5.1.0" + "http-cache-semantics" "^4.0.0" + "keyv" "^4.0.0" + "lowercase-keys" "^2.0.0" + "normalize-url" "^6.0.1" + "responselike" "^2.0.0" + +"call-bind@^1.0.0", "call-bind@^1.0.2": + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "function-bind" "^1.1.1" + "get-intrinsic" "^1.0.2" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"camelcase-keys@^6.2.2": + "integrity" "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==" + "resolved" "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" + "version" "6.2.2" + dependencies: + "camelcase" "^5.3.1" + "map-obj" "^4.0.0" + "quick-lru" "^4.0.1" + +"camelcase@^5.0.0", "camelcase@^5.3.1": + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + "version" "5.3.1" + +"camelcase@^6.0.0": + "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + "version" "6.3.0" + +"camelcase@^6.2.0": + "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + "version" "6.3.0" + +"caniuse-lite@^1.0.30001400": + "integrity" "sha512-06wzzdAkCPZO+Qm4e/eNghZBDfVNDsCgw33T27OwBH9unE9S478OYw//Q2L7Npf/zBzs7rjZOszIFQkwQKAEqA==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001416.tgz" + "version" "1.0.30001416" + +"caseless@^0.12.0", "caseless@~0.12.0": + "integrity" "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + "resolved" "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + "version" "0.12.0" + +"catering@^2.0.0": + "version" "2.1.0" + dependencies: + "queue-tick" "^1.0.0" + +"catering@^2.1.0", "catering@^2.1.1": + "integrity" "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==" + "resolved" "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz" + "version" "2.1.1" + +"cbor@^5.0.2": + "integrity" "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==" + "resolved" "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "bignumber.js" "^9.0.1" + "nofilter" "^1.0.4" + +"chai-as-promised@^7.1.1": + "integrity" "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==" + "resolved" "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "check-error" "^1.0.2" + +"chai-string@^1.5.0": + "integrity" "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==" + "resolved" "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz" + "version" "1.5.0" + +"chai@^4.1.2", "chai@^4.2.0", "chai@^4.3.4", "chai@^4.3.6", "chai@>= 2.1.2 < 5": + "integrity" "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==" + "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz" + "version" "4.3.6" + dependencies: + "assertion-error" "^1.1.0" + "check-error" "^1.0.2" + "deep-eql" "^3.0.1" + "get-func-name" "^2.0.0" + "loupe" "^2.3.1" + "pathval" "^1.1.1" + "type-detect" "^4.0.5" + +"chalk@^2.0.0": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^2.4.1": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^2.4.2": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.1", "chalk@^4.1.2": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@4.1.0": + "integrity" "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"char-regex@^1.0.2": + "integrity" "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + "resolved" "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + "version" "1.0.2" + +"chardet@^0.7.0": + "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + "version" "0.7.0" "charenc@>= 0.0.1": - version "0.0.2" - resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== - -chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.2.0" + "integrity" "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" + "resolved" "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" + "version" "0.0.2" + +"check-error@^1.0.2": + "integrity" "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" + "resolved" "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" + "version" "1.0.2" + +"checkpoint-store@^1.1.0": + "integrity" "sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==" + "resolved" "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "functional-red-black-tree" "^1.0.1" + +"chokidar@^3.4.0", "chokidar@^3.5.1", "chokidar@^3.5.2", "chokidar@3.5.3": + "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + "version" "3.5.3" + dependencies: + "anymatch" "~3.1.2" + "braces" "~3.0.2" + "glob-parent" "~5.1.2" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.6.0" optionalDependencies: - fsevents "~2.1.1" - -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" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" + "fsevents" "~2.3.2" + +"chokidar@3.3.0": + "integrity" "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "anymatch" "~3.1.1" + "braces" "~3.0.2" + "glob-parent" "~5.1.0" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.2.0" optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.2.0: - version "3.3.2" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz" - integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== - -cids@^0.7.1: - version "0.7.5" - resolved "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz" - integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== - dependencies: - buffer "^5.5.0" - class-is "^1.1.0" - multibase "~0.6.0" - multicodec "^1.0.0" - multihashes "~0.4.15" - -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" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -cjs-module-lexer@^1.0.0: - version "1.2.2" - resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" - integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== - -class-is@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz" - integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@3.1.0, cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@2.6.1: - version "2.6.1" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-spinners@^2.5.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" - integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== - -cli-table3@^0.5.0: - version "0.5.1" - resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" + "fsevents" "~2.1.1" + +"chownr@^1.1.4": + "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + "version" "1.1.4" + +"chownr@^2.0.0": + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + "version" "2.0.0" + +"ci-info@^2.0.0": + "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + "version" "2.0.0" + +"ci-info@^3.2.0": + "integrity" "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz" + "version" "3.4.0" + +"cids@^0.7.1": + "integrity" "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==" + "resolved" "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz" + "version" "0.7.5" + dependencies: + "buffer" "^5.5.0" + "class-is" "^1.1.0" + "multibase" "~0.6.0" + "multicodec" "^1.0.0" + "multihashes" "~0.4.15" + +"cipher-base@^1.0.0", "cipher-base@^1.0.1", "cipher-base@^1.0.3": + "integrity" "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==" + "resolved" "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "inherits" "^2.0.1" + "safe-buffer" "^5.0.1" + +"cjs-module-lexer@^1.0.0": + "integrity" "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + "resolved" "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" + "version" "1.2.2" + +"class-is@^1.1.0": + "integrity" "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" + "resolved" "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz" + "version" "1.1.0" + +"classic-level@^1.2.0": + "integrity" "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==" + "resolved" "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "abstract-level" "^1.0.2" + "catering" "^2.1.0" + "module-error" "^1.0.1" + "napi-macros" "~2.0.0" + "node-gyp-build" "^4.3.0" + +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" + +"cli-cursor@^3.1.0", "cli-cursor@3.1.0": + "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "restore-cursor" "^3.1.0" + +"cli-spinners@^2.5.0": + "integrity" "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==" + "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz" + "version" "2.7.0" + +"cli-spinners@2.6.1": + "integrity" "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" + "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + "version" "2.6.1" + +"cli-table3@^0.5.0": + "integrity" "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==" + "resolved" "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz" + "version" "0.5.1" + dependencies: + "object-assign" "^4.1.0" + "string-width" "^2.1.1" optionalDependencies: - colors "^1.1.2" - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + "colors" "^1.1.2" + +"cli-truncate@^2.1.0": + "integrity" "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==" + "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + "version" "2.1.0" dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" - 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-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -colorette@^2.0.16: - version "2.0.19" - resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - -colors@1.4.0, colors@^1.1.2: - version "1.4.0" - resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -columnify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - -command-line-args@^5.1.1: - version "5.2.1" - resolved "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz" - integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== - dependencies: - array-back "^3.1.0" - find-replace "^3.0.0" - lodash.camelcase "^4.3.0" - typical "^4.0.0" - -command-line-usage@^6.1.0: - version "6.1.3" - resolved "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz" - integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== - dependencies: - array-back "^4.0.2" - chalk "^2.4.2" - table-layout "^1.0.2" - typical "^5.2.0" - -commander@3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - -commander@^8.1.0: - version "8.3.0" - resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -commander@^9.3.0: - version "9.4.1" - resolved "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz" - integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^1.6.0, concat-stream@^1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -concurrently@^7.4.0: - version "7.4.0" - resolved "https://registry.npmjs.org/concurrently/-/concurrently-7.4.0.tgz" - integrity sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA== - dependencies: - chalk "^4.1.0" - date-fns "^2.29.1" - lodash "^4.17.21" - rxjs "^7.0.0" - shell-quote "^1.7.3" - spawn-command "^0.0.2-1" - supports-color "^8.1.0" - tree-kill "^1.2.2" - yargs "^17.3.1" - -config-chain@^1.1.12: - version "1.1.13" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-hash@^2.5.2: - version "2.5.2" - resolved "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz" - integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== - dependencies: - cids "^0.7.1" - multicodec "^0.5.5" - multihashes "^0.4.15" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -conventional-changelog-angular@^5.0.12: - version "5.0.13" - resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-core@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" - integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== - dependencies: - add-stream "^1.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-parser "^3.2.0" - dateformat "^3.0.0" - get-pkg-repo "^4.0.0" - git-raw-commits "^2.0.8" - git-remote-origin-url "^2.0.0" - git-semver-tags "^4.1.1" - lodash "^4.17.15" - normalize-package-data "^3.0.0" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^4.0.0" - -conventional-changelog-preset-loader@^2.3.4: - version "2.3.4" - resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== - -conventional-changelog-writer@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz" - integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== - dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" - -conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.2.0: - version "3.2.4" - resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz" - integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -conventional-recommended-bump@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz" - integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.3.4" - conventional-commits-filter "^2.0.7" - conventional-commits-parser "^3.2.0" - git-raw-commits "^2.0.8" - git-semver-tags "^4.1.1" - meow "^8.0.0" - q "^1.5.1" - -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -core-js-pure@^3.0.1: - version "3.25.0" - resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.0.tgz" - integrity sha512-IeHpLwk3uoci37yoI2Laty59+YqH9x5uR65/yiA0ARAJrTrN4YU0rmauLWfvqOuk77SlNJXj2rM6oT/dBD87+A== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cors@^2.8.1: - version "2.8.5" - resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + "slice-ansi" "^3.0.0" + "string-width" "^4.2.0" + +"cli-truncate@^3.1.0": + "integrity" "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==" + "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "slice-ansi" "^5.0.0" + "string-width" "^5.0.0" + +"cli-width@^3.0.0": + "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + "version" "3.0.0" + +"cliui@^5.0.0": + "integrity" "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "string-width" "^3.1.0" + "strip-ansi" "^5.2.0" + "wrap-ansi" "^5.1.0" + +"cliui@^7.0.2": + "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + "version" "7.0.4" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^7.0.0" + +"cliui@^8.0.1": + "integrity" "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + "version" "8.0.1" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.1" + "wrap-ansi" "^7.0.0" + +"clone-deep@^4.0.1": + "integrity" "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==" + "resolved" "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "is-plain-object" "^2.0.4" + "kind-of" "^6.0.2" + "shallow-clone" "^3.0.0" + +"clone-response@^1.0.2": + "integrity" "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==" + "resolved" "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "mimic-response" "^1.0.0" + +"clone@^1.0.2": + "integrity" "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + "version" "1.0.4" + +"clone@^2.0.0", "clone@^2.1.1": + "integrity" "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + "resolved" "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" + "version" "2.1.2" + +"cmd-shim@^5.0.0": + "integrity" "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==" + "resolved" "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "mkdirp-infer-owner" "^2.0.0" + +"co@^4.6.0": + "integrity" "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" + "resolved" "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + "version" "4.6.0" + +"collect-v8-coverage@^1.0.0": + "integrity" "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "resolved" "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" + "version" "1.0.1" + +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-name@1.1.3": + "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"color-support@^1.1.3": + "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + "version" "1.1.3" + +"colorette@^2.0.16": + "integrity" "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + "version" "2.0.19" + +"colors@^1.1.2", "colors@1.4.0": + "integrity" "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + "resolved" "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" + "version" "1.4.0" + +"columnify@^1.6.0": + "integrity" "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==" + "resolved" "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz" + "version" "1.6.0" + dependencies: + "strip-ansi" "^6.0.1" + "wcwidth" "^1.0.0" + +"combined-stream@^1.0.6", "combined-stream@^1.0.8", "combined-stream@~1.0.6": + "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" + "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "delayed-stream" "~1.0.0" + +"command-exists@^1.2.8": + "integrity" "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + "resolved" "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" + "version" "1.2.9" + +"command-line-args@^5.1.1": + "integrity" "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==" + "resolved" "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "array-back" "^3.1.0" + "find-replace" "^3.0.0" + "lodash.camelcase" "^4.3.0" + "typical" "^4.0.0" + +"command-line-usage@^6.1.0": + "integrity" "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==" + "resolved" "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz" + "version" "6.1.3" + dependencies: + "array-back" "^4.0.2" + "chalk" "^2.4.2" + "table-layout" "^1.0.2" + "typical" "^5.2.0" + +"commander@^8.1.0": + "integrity" "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + "resolved" "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" + "version" "8.3.0" + +"commander@^9.3.0": + "integrity" "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==" + "resolved" "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz" + "version" "9.4.1" + +"commander@3.0.2": + "integrity" "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" + "resolved" "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz" + "version" "3.0.2" + +"common-ancestor-path@^1.0.1": + "integrity" "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==" + "resolved" "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz" + "version" "1.0.1" + +"compare-func@^2.0.0": + "integrity" "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==" + "resolved" "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "array-ify" "^1.0.0" + "dot-prop" "^5.1.0" + +"concat-map@0.0.1": + "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"concat-stream@^1.6.0", "concat-stream@^1.6.2": + "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==" + "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + "version" "1.6.2" + dependencies: + "buffer-from" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^2.2.2" + "typedarray" "^0.0.6" + +"concat-stream@^2.0.0": + "integrity" "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==" + "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "buffer-from" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^3.0.2" + "typedarray" "^0.0.6" + +"concurrently@^7.4.0": + "integrity" "sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA==" + "resolved" "https://registry.npmjs.org/concurrently/-/concurrently-7.4.0.tgz" + "version" "7.4.0" + dependencies: + "chalk" "^4.1.0" + "date-fns" "^2.29.1" + "lodash" "^4.17.21" + "rxjs" "^7.0.0" + "shell-quote" "^1.7.3" + "spawn-command" "^0.0.2-1" + "supports-color" "^8.1.0" + "tree-kill" "^1.2.2" + "yargs" "^17.3.1" + +"config-chain@^1.1.12": + "integrity" "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==" + "resolved" "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" + "version" "1.1.13" + dependencies: + "ini" "^1.3.4" + "proto-list" "~1.2.1" + +"console-control-strings@^1.1.0": + "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + "version" "1.1.0" + +"content-disposition@0.5.4": + "integrity" "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==" + "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + "version" "0.5.4" + dependencies: + "safe-buffer" "5.2.1" + +"content-hash@^2.5.2": + "integrity" "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==" + "resolved" "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz" + "version" "2.5.2" + dependencies: + "cids" "^0.7.1" + "multicodec" "^0.5.5" + "multihashes" "^0.4.15" + +"content-type@~1.0.4": + "integrity" "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + "version" "1.0.4" + +"conventional-changelog-angular@^5.0.12": + "integrity" "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==" + "resolved" "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz" + "version" "5.0.13" + dependencies: + "compare-func" "^2.0.0" + "q" "^1.5.1" + +"conventional-changelog-core@^4.2.4": + "integrity" "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==" + "resolved" "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz" + "version" "4.2.4" + dependencies: + "add-stream" "^1.0.0" + "conventional-changelog-writer" "^5.0.0" + "conventional-commits-parser" "^3.2.0" + "dateformat" "^3.0.0" + "get-pkg-repo" "^4.0.0" + "git-raw-commits" "^2.0.8" + "git-remote-origin-url" "^2.0.0" + "git-semver-tags" "^4.1.1" + "lodash" "^4.17.15" + "normalize-package-data" "^3.0.0" + "q" "^1.5.1" + "read-pkg" "^3.0.0" + "read-pkg-up" "^3.0.0" + "through2" "^4.0.0" + +"conventional-changelog-preset-loader@^2.3.4": + "integrity" "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==" + "resolved" "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz" + "version" "2.3.4" + +"conventional-changelog-writer@^5.0.0": + "integrity" "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==" + "resolved" "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "conventional-commits-filter" "^2.0.7" + "dateformat" "^3.0.0" + "handlebars" "^4.7.7" + "json-stringify-safe" "^5.0.1" + "lodash" "^4.17.15" + "meow" "^8.0.0" + "semver" "^6.0.0" + "split" "^1.0.0" + "through2" "^4.0.0" + +"conventional-commits-filter@^2.0.7": + "integrity" "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==" + "resolved" "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz" + "version" "2.0.7" + dependencies: + "lodash.ismatch" "^4.4.0" + "modify-values" "^1.0.0" + +"conventional-commits-parser@^3.2.0": + "integrity" "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==" + "resolved" "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz" + "version" "3.2.4" + dependencies: + "is-text-path" "^1.0.1" + "JSONStream" "^1.0.4" + "lodash" "^4.17.15" + "meow" "^8.0.0" + "split2" "^3.0.0" + "through2" "^4.0.0" + +"conventional-recommended-bump@^6.1.0": + "integrity" "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==" + "resolved" "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "concat-stream" "^2.0.0" + "conventional-changelog-preset-loader" "^2.3.4" + "conventional-commits-filter" "^2.0.7" + "conventional-commits-parser" "^3.2.0" + "git-raw-commits" "^2.0.8" + "git-semver-tags" "^4.1.1" + "meow" "^8.0.0" + "q" "^1.5.1" + +"convert-source-map@^1.4.0", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0": + "integrity" "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "safe-buffer" "~5.1.1" + +"cookie-signature@1.0.6": + "integrity" "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + "version" "1.0.6" + +"cookie@^0.4.1": + "integrity" "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + "version" "0.4.2" + +"cookie@0.5.0": + "integrity" "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + "version" "0.5.0" + +"cookiejar@^2.1.1": + "integrity" "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + "resolved" "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz" + "version" "2.1.3" + +"core-js-compat@^3.25.1": + "integrity" "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==" + "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz" + "version" "3.25.5" + dependencies: + "browserslist" "^4.21.4" + +"core-util-is@~1.0.0": + "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + "version" "1.0.3" + +"core-util-is@1.0.2": + "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "version" "1.0.2" + +"cors@^2.8.1": + "integrity" "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==" + "resolved" "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" + "version" "2.8.5" + dependencies: + "object-assign" "^4" + "vary" "^1" + +"cosmiconfig@^7.0.0": + "integrity" "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==" + "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" + "version" "7.0.1" dependencies: "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-fetch@^3.1.4: - version "3.1.5" - resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - 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" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" + "import-fresh" "^3.2.1" + "parse-json" "^5.0.0" + "path-type" "^4.0.0" + "yaml" "^1.10.0" + +"crc-32@^1.2.0": + "integrity" "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + "resolved" "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" + "version" "1.2.2" + +"create-ecdh@^4.0.0": + "integrity" "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==" + "resolved" "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "bn.js" "^4.1.0" + "elliptic" "^6.5.3" + +"create-hash@^1.1.0", "create-hash@^1.1.2", "create-hash@^1.2.0": + "integrity" "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==" + "resolved" "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "cipher-base" "^1.0.1" + "inherits" "^2.0.1" + "md5.js" "^1.3.4" + "ripemd160" "^2.0.1" + "sha.js" "^2.4.0" + +"create-hmac@^1.1.0", "create-hmac@^1.1.4", "create-hmac@^1.1.7": + "integrity" "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==" + "resolved" "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + "version" "1.1.7" + dependencies: + "cipher-base" "^1.0.3" + "create-hash" "^1.1.0" + "inherits" "^2.0.1" + "ripemd160" "^2.0.0" + "safe-buffer" "^5.0.1" + "sha.js" "^2.4.8" + +"create-require@^1.1.0": + "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + "version" "1.1.1" + +"cross-fetch@^2.1.0": + "integrity" "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==" + "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz" + "version" "2.2.6" + dependencies: + "node-fetch" "^2.6.7" + "whatwg-fetch" "^2.0.4" + +"cross-fetch@^3.1.4": + "integrity" "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==" + "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" + "version" "3.1.5" + dependencies: + "node-fetch" "2.6.7" + +"cross-spawn@^6.0.0": + "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + "version" "6.0.5" + dependencies: + "nice-try" "^1.0.4" + "path-key" "^2.0.1" + "semver" "^5.5.0" + "shebang-command" "^1.2.0" + "which" "^1.2.9" + +"cross-spawn@^7.0.2", "cross-spawn@^7.0.3": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" "crypt@>= 0.0.1": - version "0.0.2" - resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -crypto-browserify@3.12.0: - version "3.12.0" - resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -date-fns@^2.29.1: - version "2.29.3" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" - integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@2.6.9, debug@^2.2.0: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.2.6: - version "3.2.6" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@4.3.3: - version "4.3.3" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== - -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" - integrity sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg== - 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.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - 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" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== - dependencies: - type-detect "^4.0.0" - -deep-extend@~0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== - dependencies: - clone "^1.0.2" - -defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - 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" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" - integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== - -detect-indent@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -dezalgo@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== - dependencies: - asap "^2.0.0" - wrappy "1" - -diff-sequences@^28.1.1: - version "28.1.1" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" - integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== - -diff@3.5.0: - version "3.5.0" - resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dotenv@~10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.251: - version "1.4.270" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.270.tgz" - integrity sha512-KNhIzgLiJmDDC444dj9vEOpZEgsV96ult9Iff98Vanumn+ShJHd5se8aX6KeVxdc0YQeqdrezBZv89rleDbvSg== - -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emittery@0.10.0: - version "0.10.0" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz" - integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== - -emittery@^0.10.2: - version "0.10.2" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" - integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - 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" - integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - -encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.0, enquirer@^2.3.6, enquirer@~2.3.6: - version "2.3.6" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@^7.7.4: - version "7.8.1" - resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -errno@~0.1.1: - version "0.1.8" - resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.19.0, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.0, es-abstract@^1.20.1: - version "1.20.3" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz" - integrity sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.6" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - 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" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^4.2.8: - version "4.2.8" - resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -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" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== - -eslint-plugin-prettier@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" - integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@^8.12.0: - version "8.24.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz" - integrity sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ== + "integrity" "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" + "resolved" "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" + "version" "0.0.2" + +"crypto-browserify@3.12.0": + "integrity" "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==" + "resolved" "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" + "version" "3.12.0" + dependencies: + "browserify-cipher" "^1.0.0" + "browserify-sign" "^4.0.0" + "create-ecdh" "^4.0.0" + "create-hash" "^1.1.0" + "create-hmac" "^1.1.0" + "diffie-hellman" "^5.0.0" + "inherits" "^2.0.1" + "pbkdf2" "^3.0.3" + "public-encrypt" "^4.0.0" + "randombytes" "^2.0.0" + "randomfill" "^1.0.3" + +"d@^1.0.1", "d@1": + "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==" + "resolved" "https://registry.npmjs.org/d/-/d-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "es5-ext" "^0.10.50" + "type" "^1.0.1" + +"dargs@^7.0.0": + "integrity" "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==" + "resolved" "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" + "version" "7.0.0" + +"dashdash@^1.12.0": + "integrity" "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==" + "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + "version" "1.14.1" + dependencies: + "assert-plus" "^1.0.0" + +"date-fns@^2.29.1": + "integrity" "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" + "resolved" "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" + "version" "2.29.3" + +"dateformat@^3.0.0": + "integrity" "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" + "resolved" "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" + "version" "3.0.3" + +"death@^1.1.0": + "integrity" "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==" + "resolved" "https://registry.npmjs.org/death/-/death-1.1.0.tgz" + "version" "1.1.0" + +"debug@^2.2.0": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@^4.3.2", "debug@^4.3.3", "debug@^4.3.4", "debug@4", "debug@4.3.4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"debug@2.6.9": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@3.2.6": + "integrity" "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" + "version" "3.2.6" + dependencies: + "ms" "^2.1.1" + +"debug@4.3.3": + "integrity" "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" + "version" "4.3.3" + dependencies: + "ms" "2.1.2" + +"debuglog@^1.0.1": + "integrity" "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==" + "resolved" "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" + "version" "1.0.1" + +"decamelize-keys@^1.1.0": + "integrity" "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==" + "resolved" "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "decamelize" "^1.1.0" + "map-obj" "^1.0.0" + +"decamelize@^1.1.0", "decamelize@^1.2.0": + "integrity" "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + "version" "1.2.0" + +"decamelize@^4.0.0": + "integrity" "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" + "version" "4.0.0" + +"decode-uri-component@^0.2.0": + "integrity" "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" + "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + "version" "0.2.0" + +"decompress-response@^3.3.0": + "integrity" "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==" + "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "mimic-response" "^1.0.0" + +"decompress-response@^6.0.0": + "integrity" "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==" + "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "mimic-response" "^3.1.0" + +"dedent@^0.7.0": + "integrity" "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + "resolved" "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" + "version" "0.7.0" + +"deep-eql@^3.0.1": + "integrity" "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==" + "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "type-detect" "^4.0.0" + +"deep-eql@^4.0.1": + "integrity" "sha512-rc6HkZswtl+KMi/IODZ8k7C/P37clC2Rf1HYI11GqdbgvggIyHjsU5MdjlTlaP6eu24c0sR3mcW2SqsVZ1sXUw==" + "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "type-detect" "^4.0.0" + +"deep-extend@~0.6.0": + "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + "version" "0.6.0" + +"deep-is@^0.1.3", "deep-is@~0.1.3": + "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + "version" "0.1.4" + +"deepmerge@^4.2.2": + "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + "version" "4.2.2" + +"defaults@^1.0.3": + "integrity" "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" + "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "clone" "^1.0.2" + +"defer-to-connect@^1.0.1": + "integrity" "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" + "version" "1.1.3" + +"defer-to-connect@^2.0.0", "defer-to-connect@^2.0.1": + "integrity" "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" + "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + "version" "2.0.1" + +"deferred-leveldown@~1.2.1": + "integrity" "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==" + "resolved" "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz" + "version" "1.2.2" + dependencies: + "abstract-leveldown" "~2.6.0" + +"define-lazy-prop@^2.0.0": + "integrity" "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + "resolved" "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + "version" "2.0.0" + +"define-properties@^1.1.2", "define-properties@^1.1.3", "define-properties@^1.1.4": + "integrity" "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + "version" "1.1.4" + dependencies: + "has-property-descriptors" "^1.0.0" + "object-keys" "^1.1.1" + +"delayed-stream@~1.0.0": + "integrity" "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + "version" "1.0.0" + +"delegates@^1.0.0": + "integrity" "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "version" "1.0.0" + +"depd@^1.1.2": + "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + "version" "1.1.2" + +"depd@2.0.0": + "integrity" "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + "resolved" "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + "version" "2.0.0" + +"deprecation@^2.0.0", "deprecation@^2.3.1": + "integrity" "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + "resolved" "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" + "version" "2.3.1" + +"des.js@^1.0.0": + "integrity" "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==" + "resolved" "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "inherits" "^2.0.1" + "minimalistic-assert" "^1.0.0" + +"destroy@1.2.0": + "integrity" "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + "version" "1.2.0" + +"detect-indent@^5.0.0": + "integrity" "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==" + "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" + "version" "5.0.0" + +"detect-indent@^6.0.0": + "integrity" "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==" + "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" + "version" "6.1.0" + +"detect-newline@^3.0.0": + "integrity" "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + "resolved" "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + "version" "3.1.0" + +"detect-port@^1.3.0": + "integrity" "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==" + "resolved" "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz" + "version" "1.5.1" + dependencies: + "address" "^1.0.1" + "debug" "4" + +"dezalgo@^1.0.0": + "integrity" "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==" + "resolved" "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "asap" "^2.0.0" + "wrappy" "1" + +"diff-sequences@^28.1.1": + "integrity" "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==" + "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" + "version" "28.1.1" + +"diff@^4.0.1": + "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + "version" "4.0.2" + +"diff@3.5.0": + "integrity" "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + "resolved" "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" + "version" "3.5.0" + +"diff@5.0.0": + "integrity" "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + "resolved" "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" + "version" "5.0.0" + +"diffie-hellman@^5.0.0": + "integrity" "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==" + "resolved" "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" + "version" "5.0.3" + dependencies: + "bn.js" "^4.1.0" + "miller-rabin" "^4.0.0" + "randombytes" "^2.0.0" + +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + +"doctrine@^3.0.0": + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "esutils" "^2.0.2" + +"dom-walk@^0.1.0": + "integrity" "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + "resolved" "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" + "version" "0.1.2" + +"dot-prop@^5.1.0": + "integrity" "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==" + "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" + "version" "5.3.0" + dependencies: + "is-obj" "^2.0.0" + +"dot-prop@^6.0.1": + "integrity" "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==" + "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "is-obj" "^2.0.0" + +"dotenv@~10.0.0": + "integrity" "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" + "version" "10.0.0" + +"duplexer@^0.1.1": + "integrity" "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + "resolved" "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + "version" "0.1.2" + +"duplexer3@^0.1.4": + "integrity" "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" + "version" "0.1.5" + +"eastasianwidth@^0.2.0": + "integrity" "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "resolved" "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + "version" "0.2.0" + +"ecc-jsbn@~0.1.1": + "integrity" "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==" + "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "jsbn" "~0.1.0" + "safer-buffer" "^2.1.0" + +"ee-first@1.1.1": + "integrity" "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + "version" "1.1.1" + +"electron-to-chromium@^1.4.251": + "integrity" "sha512-KS6gPPGNrzpVv9HzFVq+Etd0AjZEPr5pvaTBn2yD6KV4+cKW4I0CJoJNgmTG6gUQPAMZ4wIPtcOuoou3qFAZCA==" + "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.272.tgz" + "version" "1.4.272" + +"elliptic@^6.4.0", "elliptic@^6.5.2", "elliptic@^6.5.3", "elliptic@^6.5.4", "elliptic@6.5.4": + "integrity" "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==" + "resolved" "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" + "version" "6.5.4" + dependencies: + "bn.js" "^4.11.9" + "brorand" "^1.1.0" + "hash.js" "^1.0.0" + "hmac-drbg" "^1.0.1" + "inherits" "^2.0.4" + "minimalistic-assert" "^1.0.1" + "minimalistic-crypto-utils" "^1.0.1" + +"emittery@^0.10.2": + "integrity" "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" + "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" + "version" "0.10.2" + +"emittery@0.10.0": + "integrity" "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==" + "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz" + "version" "0.10.0" + +"emoji-regex@^7.0.1": + "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + "version" "7.0.3" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"emoji-regex@^9.2.2": + "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + "version" "9.2.2" + +"encode-utf8@^1.0.2": + "integrity" "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + "resolved" "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz" + "version" "1.0.3" + +"encodeurl@~1.0.2": + "integrity" "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + "version" "1.0.2" + +"encoding@^0.1.0", "encoding@^0.1.13": + "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" + "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + "version" "0.1.13" + dependencies: + "iconv-lite" "^0.6.2" + +"end-of-stream@^1.1.0", "end-of-stream@^1.4.1": + "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" + "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + "version" "1.4.4" + dependencies: + "once" "^1.4.0" + +"enquirer@^2.3.0", "enquirer@^2.3.6", "enquirer@>= 2.3.0 < 3", "enquirer@~2.3.6": + "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" + "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + "version" "2.3.6" + dependencies: + "ansi-colors" "^4.1.1" + +"env-paths@^2.2.0": + "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + "version" "2.2.1" + +"envinfo@^7.7.4": + "integrity" "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" + "resolved" "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" + "version" "7.8.1" + +"err-code@^2.0.2": + "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + "version" "2.0.3" + +"errno@~0.1.1": + "integrity" "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==" + "resolved" "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" + "version" "0.1.8" + dependencies: + "prr" "~1.0.1" + +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-arrayish" "^0.2.1" + +"es-abstract@^1.19.0", "es-abstract@^1.19.2", "es-abstract@^1.19.5", "es-abstract@^1.20.0", "es-abstract@^1.20.1": + "integrity" "sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==" + "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz" + "version" "1.20.3" + dependencies: + "call-bind" "^1.0.2" + "es-to-primitive" "^1.2.1" + "function-bind" "^1.1.1" + "function.prototype.name" "^1.1.5" + "get-intrinsic" "^1.1.3" + "get-symbol-description" "^1.0.0" + "has" "^1.0.3" + "has-property-descriptors" "^1.0.0" + "has-symbols" "^1.0.3" + "internal-slot" "^1.0.3" + "is-callable" "^1.2.6" + "is-negative-zero" "^2.0.2" + "is-regex" "^1.1.4" + "is-shared-array-buffer" "^1.0.2" + "is-string" "^1.0.7" + "is-weakref" "^1.0.2" + "object-inspect" "^1.12.2" + "object-keys" "^1.1.1" + "object.assign" "^4.1.4" + "regexp.prototype.flags" "^1.4.3" + "safe-regex-test" "^1.0.0" + "string.prototype.trimend" "^1.0.5" + "string.prototype.trimstart" "^1.0.5" + "unbox-primitive" "^1.0.2" + +"es-array-method-boxes-properly@^1.0.0": + "integrity" "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + "resolved" "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" + "version" "1.0.0" + +"es-to-primitive@^1.2.1": + "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" + "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + "version" "1.2.1" + 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": + "integrity" "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==" + "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz" + "version" "0.10.62" + dependencies: + "es6-iterator" "^2.0.3" + "es6-symbol" "^3.1.3" + "next-tick" "^1.1.0" + +"es6-iterator@^2.0.3": + "integrity" "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==" + "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "d" "1" + "es5-ext" "^0.10.35" + "es6-symbol" "^3.1.1" + +"es6-promise@^4.2.8": + "integrity" "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + "resolved" "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" + "version" "4.2.8" + +"es6-symbol@^3.1.1", "es6-symbol@^3.1.3": + "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==" + "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" + "version" "3.1.3" + dependencies: + "d" "^1.0.1" + "ext" "^1.1.2" + +"escalade@^3.1.1": + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + "version" "3.1.1" + +"escape-html@~1.0.3": + "integrity" "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + "version" "1.0.3" + +"escape-string-regexp@^1.0.5", "escape-string-regexp@1.0.5": + "integrity" "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^2.0.0": + "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + "version" "2.0.0" + +"escape-string-regexp@^4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"escape-string-regexp@4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"escodegen@1.8.x": + "integrity" "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==" + "resolved" "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz" + "version" "1.8.1" + dependencies: + "esprima" "^2.7.1" + "estraverse" "^1.9.1" + "esutils" "^2.0.2" + "optionator" "^0.8.1" + optionalDependencies: + "source-map" "~0.2.0" + +"eslint-config-prettier@^8.5.0": + "integrity" "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==" + "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" + "version" "8.5.0" + +"eslint-plugin-prettier@^4.0.0": + "integrity" "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==" + "resolved" "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "prettier-linter-helpers" "^1.0.0" + +"eslint-scope@^5.1.1": + "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^4.1.1" + +"eslint-scope@^7.1.1": + "integrity" "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^5.2.0" + +"eslint-utils@^3.0.0": + "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "eslint-visitor-keys" "^2.0.0" + +"eslint-visitor-keys@^2.0.0": + "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + "version" "2.1.0" + +"eslint-visitor-keys@^3.3.0": + "integrity" "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + "version" "3.3.0" + +"eslint@*", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^8.12.0", "eslint@>=5", "eslint@>=7.0.0", "eslint@>=7.28.0": + "integrity" "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz" + "version" "8.24.0" dependencies: "@eslint/eslintrc" "^1.3.2" "@humanwhocodes/config-array" "^0.10.5" "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" "@humanwhocodes/module-importer" "^1.0.1" - ajv "^6.10.0" - 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.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" - 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.1" - globals "^13.15.0" - globby "^11.1.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-sdsl "^4.1.4" - 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.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.4.0: - version "9.4.0" - resolved "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz" - integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eth-ens-namehash@2.0.8: - version "2.0.8" - resolved "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz" - integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== - dependencies: - idna-uts46-hx "^2.3.1" - js-sha3 "^0.5.7" - -eth-gas-reporter@^0.2.24, eth-gas-reporter@^0.2.25: - version "0.2.25" - resolved "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz" - integrity sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ== + "ajv" "^6.10.0" + "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.1.1" + "eslint-utils" "^3.0.0" + "eslint-visitor-keys" "^3.3.0" + "espree" "^9.4.0" + "esquery" "^1.4.0" + "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.1" + "globals" "^13.15.0" + "globby" "^11.1.0" + "grapheme-splitter" "^1.0.4" + "ignore" "^5.2.0" + "import-fresh" "^3.0.0" + "imurmurhash" "^0.1.4" + "is-glob" "^4.0.0" + "js-sdsl" "^4.1.4" + "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.1" + "regexpp" "^3.2.0" + "strip-ansi" "^6.0.1" + "strip-json-comments" "^3.1.0" + "text-table" "^0.2.0" + +"espree@^9.4.0": + "integrity" "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==" + "resolved" "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz" + "version" "9.4.0" + dependencies: + "acorn" "^8.8.0" + "acorn-jsx" "^5.3.2" + "eslint-visitor-keys" "^3.3.0" + +"esprima@^2.7.1", "esprima@2.7.x": + "integrity" "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" + "version" "2.7.3" + +"esprima@^4.0.0": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"esquery@^1.4.0": + "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "estraverse" "^5.1.0" + +"esrecurse@^4.3.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^1.9.1": + "integrity" "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz" + "version" "1.9.3" + +"estraverse@^4.1.1": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" + +"estraverse@^5.1.0", "estraverse@^5.2.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"etag@~1.8.1": + "integrity" "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + "version" "1.8.1" + +"eth-block-tracker@^4.4.2": + "integrity" "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==" + "resolved" "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz" + "version" "4.4.3" + dependencies: + "@babel/plugin-transform-runtime" "^7.5.5" + "@babel/runtime" "^7.5.5" + "eth-query" "^2.1.0" + "json-rpc-random-id" "^1.0.1" + "pify" "^3.0.0" + "safe-event-emitter" "^1.0.1" + +"eth-ens-namehash@2.0.8": + "integrity" "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==" + "resolved" "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz" + "version" "2.0.8" + dependencies: + "idna-uts46-hx" "^2.3.1" + "js-sha3" "^0.5.7" + +"eth-gas-reporter@^0.2.24", "eth-gas-reporter@^0.2.25": + "integrity" "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==" + "resolved" "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz" + "version" "0.2.25" dependencies: "@ethersproject/abi" "^5.0.0-beta.146" "@solidity-parser/parser" "^0.14.0" - cli-table3 "^0.5.0" - colors "1.4.0" - ethereum-cryptography "^1.0.3" - ethers "^4.0.40" - fs-readdir-recursive "^1.1.0" - lodash "^4.17.14" - markdown-table "^1.1.3" - mocha "^7.1.1" - req-cwd "^2.0.0" - request "^2.88.0" - request-promise-native "^1.0.5" - sha1 "^1.1.1" - sync-request "^6.0.0" - -eth-lib@0.2.8: - version "0.2.8" - resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz" - integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - -eth-lib@^0.1.26: - version "0.1.29" - resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz" - integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - nano-json-stream-parser "^0.1.2" - servify "^0.1.12" - ws "^3.0.0" - xhr-request-promise "^0.1.2" - -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" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== - dependencies: - js-sha3 "^0.8.0" - -ethereum-cryptography@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz" - integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + "cli-table3" "^0.5.0" + "colors" "1.4.0" + "ethereum-cryptography" "^1.0.3" + "ethers" "^4.0.40" + "fs-readdir-recursive" "^1.1.0" + "lodash" "^4.17.14" + "markdown-table" "^1.1.3" + "mocha" "^7.1.1" + "req-cwd" "^2.0.0" + "request" "^2.88.0" + "request-promise-native" "^1.0.5" + "sha1" "^1.1.1" + "sync-request" "^6.0.0" + +"eth-json-rpc-filters@^4.2.1": + "integrity" "sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==" + "resolved" "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz" + "version" "4.2.2" + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + "async-mutex" "^0.2.6" + "eth-json-rpc-middleware" "^6.0.0" + "eth-query" "^2.1.2" + "json-rpc-engine" "^6.1.0" + "pify" "^5.0.0" + +"eth-json-rpc-infura@^5.1.0": + "integrity" "sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow==" + "resolved" "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "eth-json-rpc-middleware" "^6.0.0" + "eth-rpc-errors" "^3.0.0" + "json-rpc-engine" "^5.3.0" + "node-fetch" "^2.6.0" + +"eth-json-rpc-middleware@^6.0.0": + "integrity" "sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==" + "resolved" "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "btoa" "^1.2.1" + "clone" "^2.1.1" + "eth-query" "^2.1.2" + "eth-rpc-errors" "^3.0.0" + "eth-sig-util" "^1.4.2" + "ethereumjs-util" "^5.1.2" + "json-rpc-engine" "^5.3.0" + "json-stable-stringify" "^1.0.1" + "node-fetch" "^2.6.1" + "pify" "^3.0.0" + "safe-event-emitter" "^1.0.1" + +"eth-lib@^0.1.26": + "integrity" "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==" + "resolved" "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz" + "version" "0.1.29" + dependencies: + "bn.js" "^4.11.6" + "elliptic" "^6.4.0" + "nano-json-stream-parser" "^0.1.2" + "servify" "^0.1.12" + "ws" "^3.0.0" + "xhr-request-promise" "^0.1.2" + +"eth-lib@0.2.8": + "integrity" "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==" + "resolved" "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz" + "version" "0.2.8" + dependencies: + "bn.js" "^4.11.6" + "elliptic" "^6.4.0" + "xhr-request-promise" "^0.1.2" + +"eth-query@^2.1.0", "eth-query@^2.1.2": + "integrity" "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==" + "resolved" "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "json-rpc-random-id" "^1.0.0" + "xtend" "^4.0.1" + +"eth-rpc-errors@^3.0.0": + "integrity" "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==" + "resolved" "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "fast-safe-stringify" "^2.0.6" + +"eth-rpc-errors@^4.0.2": + "integrity" "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==" + "resolved" "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "fast-safe-stringify" "^2.0.6" + +"eth-sig-util@^1.4.2": + "integrity" "sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw==" + "resolved" "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz" + "version" "1.4.2" + dependencies: + "ethereumjs-abi" "git+https://github.com/ethereumjs/ethereumjs-abi.git" + "ethereumjs-util" "^5.1.1" + +"ethereum-bloom-filters@^1.0.6": + "integrity" "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==" + "resolved" "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "js-sha3" "^0.8.0" + +"ethereum-common@^0.0.18": + "integrity" "sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==" + "resolved" "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz" + "version" "0.0.18" + +"ethereum-common@0.2.0": + "integrity" "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" + "resolved" "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz" + "version" "0.2.0" + +"ethereum-cryptography@^0.1.3", "ethereum-cryptography@0.1.3": + "integrity" "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==" + "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz" + "version" "0.1.3" dependencies: "@types/pbkdf2" "^3.0.0" "@types/secp256k1" "^4.0.1" - blakejs "^1.1.0" - browserify-aes "^1.2.0" - bs58check "^2.1.2" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - -ethereum-cryptography@^1.0.3: - version "1.1.2" - resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" - integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== + "blakejs" "^1.1.0" + "browserify-aes" "^1.2.0" + "bs58check" "^2.1.2" + "create-hash" "^1.2.0" + "create-hmac" "^1.1.7" + "hash.js" "^1.1.7" + "keccak" "^3.0.0" + "pbkdf2" "^3.0.17" + "randombytes" "^2.1.0" + "safe-buffer" "^5.1.2" + "scrypt-js" "^3.0.0" + "secp256k1" "^4.0.1" + "setimmediate" "^1.0.5" + +"ethereum-cryptography@^1.0.3": + "integrity" "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==" + "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" + "version" "1.1.2" dependencies: "@noble/hashes" "1.1.2" "@noble/secp256k1" "1.6.3" "@scure/bip32" "1.1.0" "@scure/bip39" "1.1.0" -ethereumjs-abi@^0.6.8: - version "0.6.8" - resolved "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz" - integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== +"ethereum-cryptography@1.1.2": + "integrity" "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==" + "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" + "version" "1.1.2" dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" + "@noble/hashes" "1.1.2" + "@noble/secp256k1" "1.6.3" + "@scure/bip32" "1.1.0" + "@scure/bip39" "1.1.0" -ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== +"ethereum-protocol@^1.0.1": + "integrity" "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==" + "resolved" "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz" + "version" "1.0.1" + +"ethereumjs-abi@^0.6.8": + "integrity" "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==" + "resolved" "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz" + "version" "0.6.8" + dependencies: + "bn.js" "^4.11.8" + "ethereumjs-util" "^6.0.0" + +"ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": + "version" "0.6.8" + dependencies: + "bn.js" "^4.11.8" + "ethereumjs-util" "^6.0.0" + +"ethereumjs-account@^2.0.3": + "integrity" "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==" + "resolved" "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "ethereumjs-util" "^5.0.0" + "rlp" "^2.0.0" + "safe-buffer" "^5.1.1" + +"ethereumjs-block@^1.2.2": + "integrity" "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==" + "resolved" "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz" + "version" "1.7.1" + dependencies: + "async" "^2.0.1" + "ethereum-common" "0.2.0" + "ethereumjs-tx" "^1.2.2" + "ethereumjs-util" "^5.0.0" + "merkle-patricia-tree" "^2.1.2" + +"ethereumjs-block@~2.2.0": + "integrity" "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==" + "resolved" "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz" + "version" "2.2.2" + dependencies: + "async" "^2.0.1" + "ethereumjs-common" "^1.5.0" + "ethereumjs-tx" "^2.1.1" + "ethereumjs-util" "^5.0.0" + "merkle-patricia-tree" "^2.1.2" + +"ethereumjs-common@^1.1.0", "ethereumjs-common@^1.5.0": + "integrity" "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==" + "resolved" "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz" + "version" "1.5.2" + +"ethereumjs-tx@^1.2.2": + "integrity" "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==" + "resolved" "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz" + "version" "1.3.7" + dependencies: + "ethereum-common" "^0.0.18" + "ethereumjs-util" "^5.0.0" + +"ethereumjs-tx@^2.1.1": + "integrity" "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==" + "resolved" "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "ethereumjs-common" "^1.5.0" + "ethereumjs-util" "^6.0.0" + +"ethereumjs-util@^5.0.0": + "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "^0.1.3" + "rlp" "^2.0.0" + "safe-buffer" "^5.1.1" + +"ethereumjs-util@^5.1.1": + "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "^0.1.3" + "rlp" "^2.0.0" + "safe-buffer" "^5.1.1" + +"ethereumjs-util@^5.1.2": + "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "^0.1.3" + "rlp" "^2.0.0" + "safe-buffer" "^5.1.1" + +"ethereumjs-util@^5.1.5": + "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "^0.1.3" + "rlp" "^2.0.0" + "safe-buffer" "^5.1.1" + +"ethereumjs-util@^6.0.0": + "integrity" "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" + "version" "6.2.1" dependencies: "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - -ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: - version "7.1.5" - resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "0.1.6" + "rlp" "^2.2.3" + +"ethereumjs-util@^6.2.1": + "integrity" "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" + "version" "6.2.1" + dependencies: + "@types/bn.js" "^4.11.3" + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "0.1.6" + "rlp" "^2.2.3" + +"ethereumjs-util@^7.0.10", "ethereumjs-util@^7.1.0", "ethereumjs-util@^7.1.2", "ethereumjs-util@^7.1.4", "ethereumjs-util@^7.1.5": + "integrity" "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz" + "version" "7.1.5" dependencies: "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethereumjs-wallet@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz" - integrity sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA== - dependencies: - aes-js "^3.1.2" - bs58check "^2.1.2" - ethereum-cryptography "^0.1.3" - ethereumjs-util "^7.1.2" - randombytes "^2.1.0" - scrypt-js "^3.0.1" - utf8 "^3.0.0" - uuid "^8.3.2" - -ethers@^4.0.40: - version "4.0.49" - resolved "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz" - integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== - dependencies: - aes-js "3.0.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.4" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - -ethers@^5.5.3, ethers@^5.6.8, ethers@^5.6.9, ethers@^5.7.1: - version "5.7.1" - resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.1.tgz" - integrity sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q== + "bn.js" "^5.1.2" + "create-hash" "^1.1.2" + "ethereum-cryptography" "^0.1.3" + "rlp" "^2.2.4" + +"ethereumjs-util@6.2.1": + "integrity" "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==" + "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" + "version" "6.2.1" + dependencies: + "@types/bn.js" "^4.11.3" + "bn.js" "^4.11.0" + "create-hash" "^1.1.2" + "elliptic" "^6.5.2" + "ethereum-cryptography" "^0.1.3" + "ethjs-util" "0.1.6" + "rlp" "^2.2.3" + +"ethereumjs-vm@^2.3.4": + "integrity" "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==" + "resolved" "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz" + "version" "2.6.0" + dependencies: + "async" "^2.1.2" + "async-eventemitter" "^0.2.2" + "ethereumjs-account" "^2.0.3" + "ethereumjs-block" "~2.2.0" + "ethereumjs-common" "^1.1.0" + "ethereumjs-util" "^6.0.0" + "fake-merkle-patricia-tree" "^1.0.1" + "functional-red-black-tree" "^1.0.1" + "merkle-patricia-tree" "^2.3.2" + "rustbn.js" "~0.2.0" + "safe-buffer" "^5.1.1" + +"ethereumjs-wallet@^1.0.1", "ethereumjs-wallet@^1.0.2": + "integrity" "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==" + "resolved" "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "aes-js" "^3.1.2" + "bs58check" "^2.1.2" + "ethereum-cryptography" "^0.1.3" + "ethereumjs-util" "^7.1.2" + "randombytes" "^2.1.0" + "scrypt-js" "^3.0.1" + "utf8" "^3.0.0" + "uuid" "^8.3.2" + +"ethers@^4.0.32": + "integrity" "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==" + "resolved" "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz" + "version" "4.0.49" + dependencies: + "aes-js" "3.0.0" + "bn.js" "^4.11.9" + "elliptic" "6.5.4" + "hash.js" "1.1.3" + "js-sha3" "0.5.7" + "scrypt-js" "2.0.4" + "setimmediate" "1.0.4" + "uuid" "2.0.1" + "xmlhttprequest" "1.8.0" + +"ethers@^4.0.40": + "integrity" "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==" + "resolved" "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz" + "version" "4.0.49" + dependencies: + "aes-js" "3.0.0" + "bn.js" "^4.11.9" + "elliptic" "6.5.4" + "hash.js" "1.1.3" + "js-sha3" "0.5.7" + "scrypt-js" "2.0.4" + "setimmediate" "1.0.4" + "uuid" "2.0.1" + "xmlhttprequest" "1.8.0" + +"ethers@^5", "ethers@^5.0.0", "ethers@^5.1.3", "ethers@^5.4.7", "ethers@^5.5.2", "ethers@^5.5.3", "ethers@^5.6.8", "ethers@^5.6.9", "ethers@^5.7.0", "ethers@^5.7.1": + "integrity" "sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q==" + "resolved" "https://registry.npmjs.org/ethers/-/ethers-5.7.1.tgz" + "version" "5.7.1" dependencies: "@ethersproject/abi" "5.7.0" "@ethersproject/abstract-provider" "5.7.0" @@ -5107,854 +6037,1013 @@ ethers@^5.5.3, ethers@^5.6.8, ethers@^5.6.9, ethers@^5.7.1: "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - -ethjs-util@0.1.6, ethjs-util@^0.1.6: - version "0.1.6" - resolved "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz" - integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== - dependencies: - is-hex-prefixed "1.0.0" - strip-hex-prefix "1.0.0" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - -eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^5.0.0, execa@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expect@^28.0.0, expect@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz" - integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== +"ethjs-unit@0.1.6": + "integrity" "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==" + "resolved" "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "bn.js" "4.11.6" + "number-to-bn" "1.7.0" + +"ethjs-util@^0.1.3", "ethjs-util@^0.1.6", "ethjs-util@0.1.6": + "integrity" "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==" + "resolved" "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "is-hex-prefixed" "1.0.0" + "strip-hex-prefix" "1.0.0" + +"event-target-shim@^5.0.0": + "integrity" "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + "resolved" "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + "version" "5.0.1" + +"eventemitter3@^4.0.4": + "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + "version" "4.0.7" + +"eventemitter3@4.0.4": + "integrity" "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" + "version" "4.0.4" + +"events@^3.0.0": + "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + "version" "3.3.0" + +"evp_bytestokey@^1.0.0", "evp_bytestokey@^1.0.3": + "integrity" "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==" + "resolved" "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "md5.js" "^1.3.4" + "safe-buffer" "^5.1.1" + +"execa@^1.0.0": + "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "cross-spawn" "^6.0.0" + "get-stream" "^4.0.0" + "is-stream" "^1.1.0" + "npm-run-path" "^2.0.0" + "p-finally" "^1.0.0" + "signal-exit" "^3.0.0" + "strip-eof" "^1.0.0" + +"execa@^5.0.0", "execa@^5.1.1": + "integrity" "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==" + "resolved" "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "cross-spawn" "^7.0.3" + "get-stream" "^6.0.0" + "human-signals" "^2.1.0" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.1" + "onetime" "^5.1.2" + "signal-exit" "^3.0.3" + "strip-final-newline" "^2.0.0" + +"exit@^0.1.2": + "integrity" "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" + "resolved" "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + "version" "0.1.2" + +"expect@^28.0.0", "expect@^28.1.3": + "integrity" "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==" + "resolved" "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/expect-utils" "^28.1.3" - jest-get-type "^28.0.2" - jest-matcher-utils "^28.1.3" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - -express@^4.14.0: - version "4.18.1" - resolved "https://registry.npmjs.org/express/-/express-4.18.1.tgz" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.0" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.10.3" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extsprintf@1.3.0, extsprintf@^1.2.0: - version "1.3.0" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + "jest-get-type" "^28.0.2" + "jest-matcher-utils" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-util" "^28.1.3" + +"express@^4.14.0": + "integrity" "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==" + "resolved" "https://registry.npmjs.org/express/-/express-4.18.1.tgz" + "version" "4.18.1" + dependencies: + "accepts" "~1.3.8" + "array-flatten" "1.1.1" + "body-parser" "1.20.0" + "content-disposition" "0.5.4" + "content-type" "~1.0.4" + "cookie" "0.5.0" + "cookie-signature" "1.0.6" + "debug" "2.6.9" + "depd" "2.0.0" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "finalhandler" "1.2.0" + "fresh" "0.5.2" + "http-errors" "2.0.0" + "merge-descriptors" "1.0.1" + "methods" "~1.1.2" + "on-finished" "2.4.1" + "parseurl" "~1.3.3" + "path-to-regexp" "0.1.7" + "proxy-addr" "~2.0.7" + "qs" "6.10.3" + "range-parser" "~1.2.1" + "safe-buffer" "5.2.1" + "send" "0.18.0" + "serve-static" "1.15.0" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "type-is" "~1.6.18" + "utils-merge" "1.0.1" + "vary" "~1.1.2" + +"ext@^1.1.2": + "integrity" "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==" + "resolved" "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "type" "^2.7.2" + +"extend@~3.0.2": + "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + "version" "3.0.2" + +"external-editor@^3.0.3": + "integrity" "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==" + "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "chardet" "^0.7.0" + "iconv-lite" "^0.4.24" + "tmp" "^0.0.33" + +"extsprintf@^1.2.0": + "integrity" "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==" + "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz" + "version" "1.4.1" + +"extsprintf@1.3.0": + "integrity" "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + "version" "1.3.0" + +"fake-merkle-patricia-tree@^1.0.1": + "integrity" "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==" + "resolved" "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "checkpoint-store" "^1.1.0" + +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-diff@^1.1.2": + "integrity" "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + "resolved" "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" + "version" "1.2.0" + +"fast-glob@^3.0.3", "fast-glob@^3.2.9": + "integrity" "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + "version" "3.2.12" 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" + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" -fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== +"fast-glob@3.2.7": + "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" + "version" "3.2.7" 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" + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + +"fast-json-stable-stringify@^2.0.0": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +"fast-levenshtein@^2.0.6", "fast-levenshtein@~2.0.6": + "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +"fast-safe-stringify@^2.0.6": + "integrity" "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + "resolved" "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" + "version" "2.1.1" -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== +"fastq@^1.6.0": + "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + "version" "1.13.0" dependencies: - reusify "^1.0.4" + "reusify" "^1.0.4" -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== +"fb-watchman@^2.0.0": + "integrity" "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==" + "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" + "version" "2.0.2" dependencies: - bser "2.1.1" - -figures@3.2.0, figures@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + "bser" "2.1.1" + +"figures@^3.0.0", "figures@3.2.0": + "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" + "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "escape-string-regexp" "^1.0.5" + +"file-entry-cache@^6.0.1": + "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + "version" "6.0.1" dependencies: - escape-string-regexp "^1.0.5" + "flat-cache" "^3.0.4" -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +"finalhandler@1.2.0": + "integrity" "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==" + "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + "version" "1.2.0" dependencies: - to-regex-range "^5.0.1" + "debug" "2.6.9" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "on-finished" "2.4.1" + "parseurl" "~1.3.3" + "statuses" "2.0.1" + "unpipe" "~1.0.0" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== +"find-replace@^3.0.0": + "integrity" "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==" + "resolved" "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz" + "version" "3.0.0" dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" + "array-back" "^3.0.1" -find-replace@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz" - integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== +"find-up@^2.0.0": + "integrity" "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + "version" "2.1.0" dependencies: - array-back "^3.0.1" - -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.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" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flat@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== - dependencies: - is-buffer "~2.0.3" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -fmix@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz" - integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== - dependencies: - imul "^1.0.0" - -follow-redirects@^1.12.1, follow-redirects@^1.14.0: - version "1.15.1" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data-encoder@1.7.1: - version "1.7.1" - resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz" - integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== - -form-data@^2.2.0, form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fp-ts@1.19.3, fp-ts@^1.0.0: - version "1.19.3" - resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" - integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz" - integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@^10.0.0, fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^4.0.2: - version "4.0.3" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.0, fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs-minipass@^2.0.0, fs-minipass@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -fsevents@~2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functional-red-black-tree@^1.0.1, 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" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -ganache-cli@^6.12.2: - version "6.12.2" - resolved "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz" - integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== - dependencies: - ethereumjs-util "6.2.1" - source-map-support "0.5.12" - yargs "13.2.4" - -ganache@^7.1.0: - version "7.4.3" - resolved "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz" - integrity sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA== + "locate-path" "^2.0.0" + +"find-up@^2.1.0": + "integrity" "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "locate-path" "^2.0.0" + +"find-up@^3.0.0", "find-up@3.0.0": + "integrity" "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "locate-path" "^3.0.0" + +"find-up@^4.0.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"find-up@^4.1.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"find-up@^5.0.0": + "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" + +"find-up@5.0.0": + "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" + +"flat-cache@^3.0.4": + "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "flatted" "^3.1.0" + "rimraf" "^3.0.2" + +"flat@^4.1.0": + "integrity" "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==" + "resolved" "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "is-buffer" "~2.0.3" + +"flat@^5.0.2": + "integrity" "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + "resolved" "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + "version" "5.0.2" + +"flatted@^3.1.0": + "integrity" "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" + "version" "3.2.7" + +"fmix@^0.1.0": + "integrity" "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==" + "resolved" "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "imul" "^1.0.0" + +"follow-redirects@^1.10.0", "follow-redirects@^1.12.1", "follow-redirects@^1.14.0": + "integrity" "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" + "version" "1.15.2" + +"for-each@^0.3.3": + "integrity" "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==" + "resolved" "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "is-callable" "^1.1.3" + +"forever-agent@~0.6.1": + "integrity" "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + "resolved" "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + "version" "0.6.1" + +"form-data-encoder@1.7.1": + "integrity" "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" + "resolved" "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz" + "version" "1.7.1" + +"form-data@^2.2.0": + "integrity" "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz" + "version" "2.5.1" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.6" + "mime-types" "^2.1.12" + +"form-data@^3.0.0": + "integrity" "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + +"form-data@^4.0.0": + "integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + +"form-data@~2.3.2": + "integrity" "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" + "version" "2.3.3" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.6" + "mime-types" "^2.1.12" + +"forwarded@0.2.0": + "integrity" "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + "version" "0.2.0" + +"fp-ts@^1.0.0": + "integrity" "sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A==" + "resolved" "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz" + "version" "1.19.5" + +"fp-ts@1.19.3": + "integrity" "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" + "resolved" "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" + "version" "1.19.3" + +"fresh@0.5.2": + "integrity" "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + "version" "0.5.2" + +"fs-constants@^1.0.0": + "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + "version" "1.0.0" + +"fs-extra@^0.30.0": + "integrity" "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz" + "version" "0.30.0" + dependencies: + "graceful-fs" "^4.1.2" + "jsonfile" "^2.1.0" + "klaw" "^1.0.0" + "path-is-absolute" "^1.0.0" + "rimraf" "^2.2.8" + +"fs-extra@^10.0.0": + "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + "version" "10.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-extra@^10.1.0": + "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + "version" "10.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-extra@^4.0.2": + "integrity" "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "graceful-fs" "^4.1.2" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" + +"fs-extra@^7.0.0": + "integrity" "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "graceful-fs" "^4.1.2" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" + +"fs-extra@^7.0.1": + "integrity" "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "graceful-fs" "^4.1.2" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" + +"fs-extra@^8.1.0": + "integrity" "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" + +"fs-extra@^9.1.0": + "integrity" "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + "version" "9.1.0" + dependencies: + "at-least-node" "^1.0.0" + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-minipass@^1.2.7": + "integrity" "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" + "version" "1.2.7" + dependencies: + "minipass" "^2.6.0" + +"fs-minipass@^2.0.0", "fs-minipass@^2.1.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + +"fs-readdir-recursive@^1.1.0": + "integrity" "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + "resolved" "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz" + "version" "1.1.0" + +"fs.realpath@^1.0.0": + "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"fsevents@^2.3.2", "fsevents@~2.3.2": + "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + "version" "2.3.2" + +"fsevents@~2.1.1": + "integrity" "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz" + "version" "2.1.3" + +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" + +"function.prototype.name@^1.1.5": + "integrity" "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==" + "resolved" "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.0" + "functions-have-names" "^1.2.2" + +"functional-red-black-tree@^1.0.1": + "integrity" "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + "version" "1.0.1" + +"functions-have-names@^1.2.2": + "integrity" "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "resolved" "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + "version" "1.2.3" + +"ganache-cli@^6.12.2": + "integrity" "sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw==" + "resolved" "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz" + "version" "6.12.2" + dependencies: + "ethereumjs-util" "6.2.1" + "source-map-support" "0.5.12" + "yargs" "13.2.4" + +"ganache@^7.1.0": + "integrity" "sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA==" + "resolved" "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz" + "version" "7.4.3" dependencies: "@trufflesuite/bigint-buffer" "1.1.10" "@types/bn.js" "^5.1.0" "@types/lru-cache" "5.1.1" "@types/seedrandom" "3.0.1" - emittery "0.10.0" - keccak "3.0.2" - leveldown "6.1.0" - secp256k1 "4.0.3" + "emittery" "0.10.0" + "keccak" "3.0.2" + "leveldown" "6.1.0" + "secp256k1" "4.0.3" optionalDependencies: - bufferutil "4.0.5" - utf-8-validate "5.0.7" - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -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" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -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" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-pkg-repo@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz" - integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + "bufferutil" "4.0.5" + "utf-8-validate" "5.0.7" + +"gauge@^4.0.3": + "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.3" + "console-control-strings" "^1.1.0" + "has-unicode" "^2.0.1" + "signal-exit" "^3.0.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.5" + +"gensync@^1.0.0-beta.2": + "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + "version" "1.0.0-beta.2" + +"get-caller-file@^2.0.1", "get-caller-file@^2.0.5": + "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + "version" "2.0.5" + +"get-func-name@^2.0.0": + "integrity" "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" + "resolved" "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" + "version" "2.0.0" + +"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1", "get-intrinsic@^1.1.3": + "integrity" "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "function-bind" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.3" + +"get-package-type@^0.1.0": + "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + "version" "0.1.0" + +"get-pkg-repo@^4.0.0": + "integrity" "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==" + "resolved" "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz" + "version" "4.2.1" dependencies: "@hutson/parse-repository-url" "^3.0.0" - hosted-git-info "^4.0.0" - through2 "^2.0.0" - yargs "^16.2.0" - -get-port@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz" - integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + "hosted-git-info" "^4.0.0" + "through2" "^2.0.0" + "yargs" "^16.2.0" + +"get-port@^3.1.0": + "integrity" "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" + "resolved" "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz" + "version" "3.2.0" + +"get-port@^5.1.1": + "integrity" "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==" + "resolved" "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" + "version" "5.1.1" -get-port@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== +"get-stream@^4.0.0": + "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "pump" "^3.0.0" -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== +"get-stream@^4.1.0": + "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + "version" "4.1.0" dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.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" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -git-raw-commits@^2.0.8: - version "2.0.11" - resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz" - integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== - dependencies: - dargs "^7.0.0" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz" - integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz" - integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== - dependencies: - meow "^8.0.0" - semver "^6.0.0" - -git-up@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" - integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== - dependencies: - is-ssh "^1.4.0" - parse-url "^8.1.0" - -git-url-parse@^13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" - integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== - dependencies: - git-up "^7.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz" - integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== - dependencies: - ini "^1.3.2" - -glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@7.1.3: - version "7.1.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.1.4, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.4" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.6: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.1: - version "8.0.3" - resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -global@~4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/global/-/global-4.4.0.tgz" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.15.0: - version "13.17.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.2, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -got@12.1.0: - version "12.1.0" - resolved "https://registry.npmjs.org/got/-/got-12.1.0.tgz" - integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== + "pump" "^3.0.0" + +"get-stream@^5.1.0": + "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + "version" "5.2.0" dependencies: - "@sindresorhus/is" "^4.6.0" - "@szmarczak/http-timer" "^5.0.1" - "@types/cacheable-request" "^6.0.2" - "@types/responselike" "^1.0.0" - cacheable-lookup "^6.0.4" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - form-data-encoder "1.7.1" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^2.0.0" - -got@^11.8.5: - version "11.8.5" - resolved "https://registry.npmjs.org/got/-/got-11.8.5.tgz" - integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== + "pump" "^3.0.0" + +"get-stream@^6.0.0", "get-stream@^6.0.1": + "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + "version" "6.0.1" + +"get-symbol-description@^1.0.0": + "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==" + "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "call-bind" "^1.0.2" + "get-intrinsic" "^1.1.1" + +"getpass@^0.1.1": + "integrity" "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==" + "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + "version" "0.1.7" + dependencies: + "assert-plus" "^1.0.0" + +"ghost-testrpc@^0.0.2": + "integrity" "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==" + "resolved" "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz" + "version" "0.0.2" + dependencies: + "chalk" "^2.4.2" + "node-emoji" "^1.10.0" + +"git-raw-commits@^2.0.8": + "integrity" "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==" + "resolved" "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz" + "version" "2.0.11" + dependencies: + "dargs" "^7.0.0" + "lodash" "^4.17.15" + "meow" "^8.0.0" + "split2" "^3.0.0" + "through2" "^4.0.0" + +"git-remote-origin-url@^2.0.0": + "integrity" "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==" + "resolved" "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "gitconfiglocal" "^1.0.0" + "pify" "^2.3.0" + +"git-semver-tags@^4.1.1": + "integrity" "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==" + "resolved" "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "meow" "^8.0.0" + "semver" "^6.0.0" + +"git-up@^7.0.0": + "integrity" "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==" + "resolved" "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "is-ssh" "^1.4.0" + "parse-url" "^8.1.0" + +"git-url-parse@^13.1.0": + "integrity" "sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==" + "resolved" "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz" + "version" "13.1.0" + dependencies: + "git-up" "^7.0.0" + +"gitconfiglocal@^1.0.0": + "integrity" "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==" + "resolved" "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "ini" "^1.3.2" + +"glob-parent@^5.1.1", "glob-parent@^5.1.2", "glob-parent@~5.1.0", "glob-parent@~5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob-parent@^6.0.1": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + +"glob@^5.0.15": + "integrity" "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==" + "resolved" "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" + "version" "5.0.15" + dependencies: + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "2 || 3" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.0.0", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6": + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.1.1" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^8.0.1": + "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + "version" "8.0.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^5.0.1" + "once" "^1.3.0" + +"glob@7.1.3": + "integrity" "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" + "version" "7.1.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@7.1.4": + "integrity" "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" + "version" "7.1.4" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@7.2.0": + "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"global-modules@^2.0.0": + "integrity" "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==" + "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "global-prefix" "^3.0.0" + +"global-prefix@^3.0.0": + "integrity" "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==" + "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ini" "^1.3.5" + "kind-of" "^6.0.2" + "which" "^1.3.1" + +"global@~4.4.0": + "integrity" "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==" + "resolved" "https://registry.npmjs.org/global/-/global-4.4.0.tgz" + "version" "4.4.0" + dependencies: + "min-document" "^2.19.0" + "process" "^0.11.10" + +"globals@^11.1.0": + "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + "version" "11.12.0" + +"globals@^13.15.0": + "integrity" "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" + "version" "13.17.0" + dependencies: + "type-fest" "^0.20.2" + +"globby@^10.0.1": + "integrity" "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==" + "resolved" "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz" + "version" "10.0.2" + dependencies: + "@types/glob" "^7.1.1" + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.0.3" + "glob" "^7.1.3" + "ignore" "^5.1.1" + "merge2" "^1.2.3" + "slash" "^3.0.0" + +"globby@^11.0.2", "globby@^11.1.0": + "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + "version" "11.1.0" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.2.9" + "ignore" "^5.2.0" + "merge2" "^1.4.1" + "slash" "^3.0.0" + +"got@^11.8.5": + "integrity" "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==" + "resolved" "https://registry.npmjs.org/got/-/got-11.8.5.tgz" + "version" "11.8.5" dependencies: "@sindresorhus/is" "^4.0.0" "@szmarczak/http-timer" "^4.0.5" "@types/cacheable-request" "^6.0.1" "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" + "cacheable-lookup" "^5.0.3" + "cacheable-request" "^7.0.2" + "decompress-response" "^6.0.0" + "http2-wrapper" "^1.0.0-beta.5.2" + "lowercase-keys" "^2.0.0" + "p-cancelable" "^2.0.0" + "responselike" "^2.0.0" + +"got@12.1.0": + "integrity" "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==" + "resolved" "https://registry.npmjs.org/got/-/got-12.1.0.tgz" + "version" "12.1.0" + dependencies: + "@sindresorhus/is" "^4.6.0" + "@szmarczak/http-timer" "^5.0.1" + "@types/cacheable-request" "^6.0.2" + "@types/responselike" "^1.0.0" + "cacheable-lookup" "^6.0.4" + "cacheable-request" "^7.0.2" + "decompress-response" "^6.0.0" + "form-data-encoder" "1.7.1" + "get-stream" "^6.0.1" + "http2-wrapper" "^2.1.10" + "lowercase-keys" "^3.0.0" + "p-cancelable" "^3.0.0" + "responselike" "^2.0.0" + +"got@9.6.0": + "integrity" "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==" + "resolved" "https://registry.npmjs.org/got/-/got-9.6.0.tgz" + "version" "9.6.0" + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + "cacheable-request" "^6.0.0" + "decompress-response" "^3.3.0" + "duplexer3" "^0.1.4" + "get-stream" "^4.1.0" + "lowercase-keys" "^1.0.1" + "mimic-response" "^1.0.1" + "p-cancelable" "^1.0.0" + "to-readable-stream" "^1.0.0" + "url-parse-lax" "^3.0.0" + +"graceful-fs@^4.1.11", "graceful-fs@^4.1.15", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.1.9", "graceful-fs@^4.2.0", "graceful-fs@^4.2.6", "graceful-fs@^4.2.9": + "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + "version" "4.2.10" + +"grapheme-splitter@^1.0.4": + "integrity" "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + "resolved" "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + "version" "1.0.4" + +"growl@1.10.5": + "integrity" "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + "resolved" "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" + "version" "1.10.5" + +"handlebars@^4.0.1", "handlebars@^4.7.7": + "integrity" "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==" + "resolved" "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" + "version" "4.7.7" + dependencies: + "minimist" "^1.2.5" + "neo-async" "^2.6.0" + "source-map" "^0.6.1" + "wordwrap" "^1.0.0" optionalDependencies: - uglify-js "^3.1.4" + "uglify-js" "^3.1.4" -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== +"har-schema@^2.0.0": + "integrity" "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" + "resolved" "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" + "version" "2.0.0" -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== +"har-validator@~5.1.3": + "integrity" "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==" + "resolved" "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" + "version" "5.1.5" dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" + "ajv" "^6.12.3" + "har-schema" "^2.0.0" -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== +"hard-rejection@^2.1.0": + "integrity" "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==" + "resolved" "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" + "version" "2.1.0" -hardhat-deploy-ethers@^0.3.0-beta.11: - version "0.3.0-beta.13" - resolved "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz" - integrity sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw== +"hardhat-deploy-ethers@^0.3.0-beta.11": + "integrity" "sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw==" + "resolved" "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz" + "version" "0.3.0-beta.13" -hardhat-deploy@^0.9.3: - version "0.9.29" - resolved "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.29.tgz" - integrity sha512-8tIGszPFmOaXtyloCbASiZPvoAgLNGGL/Ubys3YW/oj4dvoPa8G6YDyaOCdsAhsENZ+QgR280NFSG9JdN7SU9Q== +"hardhat-deploy@^0.9.3": + "integrity" "sha512-8tIGszPFmOaXtyloCbASiZPvoAgLNGGL/Ubys3YW/oj4dvoPa8G6YDyaOCdsAhsENZ+QgR280NFSG9JdN7SU9Q==" + "resolved" "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.29.tgz" + "version" "0.9.29" dependencies: "@ethersproject/abi" "^5.4.0" "@ethersproject/abstract-signer" "^5.4.1" @@ -5968,1010 +7057,1039 @@ hardhat-deploy@^0.9.3: "@ethersproject/transactions" "^5.4.0" "@ethersproject/wallet" "^5.4.0" "@types/qs" "^6.9.7" - axios "^0.21.1" - chalk "^4.1.2" - chokidar "^3.5.2" - debug "^4.3.2" - enquirer "^2.3.6" - form-data "^4.0.0" - fs-extra "^10.0.0" - match-all "^1.2.6" - murmur-128 "^0.2.1" - qs "^6.9.4" - -hardhat-gas-reporter@^1.0.7: - version "1.0.9" - resolved "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz" - integrity sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg== - dependencies: - array-uniq "1.0.3" - eth-gas-reporter "^0.2.25" - sha1 "^1.1.1" - -hardhat@^2.9.2, hardhat@^2.9.5, hardhat@^2.9.9: - version "2.10.2" - resolved "https://registry.npmjs.org/hardhat/-/hardhat-2.10.2.tgz" - integrity sha512-L/KvDDT/MA6332uAtYTqdcHoSABljw4pPjHQe5SHdIJ+xKfaSc6vDKw03CmrQ5Xup0gHs8XnVSBpZo1AbbIW7g== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/blockchain" "^5.5.2" - "@ethereumjs/common" "^2.6.4" - "@ethereumjs/tx" "^3.5.1" - "@ethereumjs/vm" "^5.9.0" + "axios" "^0.21.1" + "chalk" "^4.1.2" + "chokidar" "^3.5.2" + "debug" "^4.3.2" + "enquirer" "^2.3.6" + "form-data" "^4.0.0" + "fs-extra" "^10.0.0" + "match-all" "^1.2.6" + "murmur-128" "^0.2.1" + "qs" "^6.9.4" + +"hardhat-gas-reporter@^1.0.7", "hardhat-gas-reporter@^1.0.8": + "integrity" "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==" + "resolved" "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz" + "version" "1.0.9" + dependencies: + "array-uniq" "1.0.3" + "eth-gas-reporter" "^0.2.25" + "sha1" "^1.1.1" + +"hardhat@^2.0.0", "hardhat@^2.0.10", "hardhat@^2.0.2", "hardhat@^2.0.4", "hardhat@^2.11.0", "hardhat@^2.6.8", "hardhat@^2.9.2", "hardhat@^2.9.4", "hardhat@^2.9.5", "hardhat@^2.9.7", "hardhat@^2.9.9": + "integrity" "sha512-BdsXC1CFJQDJKmAgCwpmGhFuVU6dcqlgMgT0Kg/xmFAFVugkpYu6NRmh4AaJ3Fah0/BR9DOR4XgQGIbg4eon/Q==" + "resolved" "https://registry.npmjs.org/hardhat/-/hardhat-2.11.2.tgz" + "version" "2.11.2" + dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-evm" "^1.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-vm" "^6.0.0" + "@nomicfoundation/solidity-analyzer" "^0.0.3" "@sentry/node" "^5.18.1" - "@solidity-parser/parser" "^0.14.2" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" - adm-zip "^0.4.16" - aggregate-error "^3.0.0" - ansi-escapes "^4.3.0" - chalk "^2.4.2" - chokidar "^3.4.0" - ci-info "^2.0.0" - debug "^4.1.1" - enquirer "^2.3.0" - env-paths "^2.2.0" - ethereum-cryptography "^1.0.3" - ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.1.4" - find-up "^2.1.0" - fp-ts "1.19.3" - fs-extra "^7.0.1" - glob "7.2.0" - immutable "^4.0.0-rc.12" - io-ts "1.10.4" - lodash "^4.17.11" - merkle-patricia-tree "^4.2.4" - mnemonist "^0.38.0" - mocha "^10.0.0" - p-map "^4.0.0" - qs "^6.7.0" - raw-body "^2.4.1" - resolve "1.17.0" - semver "^6.3.0" - slash "^3.0.0" - solc "0.7.3" - source-map-support "^0.5.13" - stacktrace-parser "^0.1.10" - "true-case-path" "^2.2.1" - tsort "0.0.1" - undici "^5.4.0" - 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.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" - 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" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz" - integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^3.0.6: - version "3.0.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" - integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.1.0.tgz#9786123f92ef3627f24abc3f15c20d98ec4a6594" - integrity sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q== - dependencies: - lru-cache "^7.5.1" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-basic@^8.1.1: - version "8.1.3" - resolved "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz" - integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== - dependencies: - caseless "^0.12.0" - concat-stream "^1.6.2" - http-response-object "^3.0.1" - parse-cache-control "^1.0.1" - -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-https@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz" - integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + "abort-controller" "^3.0.0" + "adm-zip" "^0.4.16" + "aggregate-error" "^3.0.0" + "ansi-escapes" "^4.3.0" + "chalk" "^2.4.2" + "chokidar" "^3.4.0" + "ci-info" "^2.0.0" + "debug" "^4.1.1" + "enquirer" "^2.3.0" + "env-paths" "^2.2.0" + "ethereum-cryptography" "^1.0.3" + "ethereumjs-abi" "^0.6.8" + "find-up" "^2.1.0" + "fp-ts" "1.19.3" + "fs-extra" "^7.0.1" + "glob" "7.2.0" + "immutable" "^4.0.0-rc.12" + "io-ts" "1.10.4" + "keccak" "^3.0.2" + "lodash" "^4.17.11" + "mnemonist" "^0.38.0" + "mocha" "^10.0.0" + "p-map" "^4.0.0" + "qs" "^6.7.0" + "raw-body" "^2.4.1" + "resolve" "1.17.0" + "semver" "^6.3.0" + "solc" "0.7.3" + "source-map-support" "^0.5.13" + "stacktrace-parser" "^0.1.10" + "tsort" "0.0.1" + "undici" "^5.4.0" + "uuid" "^8.3.2" + "ws" "^7.4.6" + +"has-bigints@^1.0.1", "has-bigints@^1.0.2": + "integrity" "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + "version" "1.0.2" + +"has-flag@^1.0.0": + "integrity" "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" + "version" "1.0.0" + +"has-flag@^3.0.0": + "integrity" "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-property-descriptors@^1.0.0": + "integrity" "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==" + "resolved" "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "get-intrinsic" "^1.1.1" + +"has-symbols@^1.0.0", "has-symbols@^1.0.2", "has-symbols@^1.0.3": + "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + "version" "1.0.3" + +"has-tostringtag@^1.0.0": + "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==" + "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "has-symbols" "^1.0.2" + +"has-unicode@^2.0.1": + "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "version" "2.0.1" + +"has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" + +"hash-base@^3.0.0": + "integrity" "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==" + "resolved" "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "inherits" "^2.0.4" + "readable-stream" "^3.6.0" + "safe-buffer" "^5.2.0" + +"hash.js@^1.0.0", "hash.js@^1.0.3", "hash.js@^1.1.7", "hash.js@1.1.7": + "integrity" "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==" + "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + "version" "1.1.7" + dependencies: + "inherits" "^2.0.3" + "minimalistic-assert" "^1.0.1" + +"hash.js@1.1.3": + "integrity" "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==" + "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "inherits" "^2.0.3" + "minimalistic-assert" "^1.0.0" + +"he@1.2.0": + "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + "version" "1.2.0" + +"hmac-drbg@^1.0.0": + "version" "1.0.1" + dependencies: + "hash.js" "^1.0.3" + "minimalistic-assert" "^1.0.0" + "minimalistic-crypto-utils" "^1.0.1" + +"hmac-drbg@^1.0.1": + "integrity" "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==" + "resolved" "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "hash.js" "^1.0.3" + "minimalistic-assert" "^1.0.0" + "minimalistic-crypto-utils" "^1.0.1" + +"hosted-git-info@^2.1.4": + "integrity" "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + "version" "2.8.9" + +"hosted-git-info@^3.0.6": + "integrity" "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz" + "version" "3.0.8" + dependencies: + "lru-cache" "^6.0.0" + +"hosted-git-info@^4.0.0", "hosted-git-info@^4.0.1": + "integrity" "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "lru-cache" "^6.0.0" + +"hosted-git-info@^5.0.0": + "integrity" "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "lru-cache" "^7.5.1" + +"html-escaper@^2.0.0": + "integrity" "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "resolved" "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + "version" "2.0.2" + +"http-basic@^8.1.1": + "integrity" "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==" + "resolved" "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz" + "version" "8.1.3" + dependencies: + "caseless" "^0.12.0" + "concat-stream" "^1.6.2" + "http-response-object" "^3.0.1" + "parse-cache-control" "^1.0.1" + +"http-cache-semantics@^4.0.0", "http-cache-semantics@^4.1.0": + "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + "version" "4.1.0" + +"http-errors@2.0.0": + "integrity" "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "depd" "2.0.0" + "inherits" "2.0.4" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "toidentifier" "1.0.1" + +"http-https@^1.0.0": + "integrity" "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + "resolved" "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz" + "version" "1.0.0" + +"http-proxy-agent@^5.0.0": + "integrity" "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==" + "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + "version" "5.0.0" dependencies: "@tootallnate/once" "2" - agent-base "6" - debug "4" + "agent-base" "6" + "debug" "4" -http-response-object@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz" - integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== +"http-response-object@^3.0.1": + "integrity" "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==" + "resolved" "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz" + "version" "3.0.2" dependencies: "@types/node" "^10.0.3" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== +"http-signature@~1.2.0": + "integrity" "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==" + "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" + "version" "1.2.0" dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + "assert-plus" "^1.0.0" + "jsprim" "^1.2.2" + "sshpk" "^1.7.0" -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== +"http2-wrapper@^1.0.0-beta.5.2": + "integrity" "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==" + "resolved" "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" + "version" "1.0.3" dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" + "quick-lru" "^5.1.1" + "resolve-alpn" "^1.0.0" -http2-wrapper@^2.1.10: - version "2.1.11" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz" - integrity sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ== +"http2-wrapper@^2.1.10": + "integrity" "sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ==" + "resolved" "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz" + "version" "2.1.11" dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.0" + "quick-lru" "^5.1.1" + "resolve-alpn" "^1.2.0" -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== +"https-proxy-agent@^5.0.0": + "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" + "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + "version" "5.0.1" dependencies: - agent-base "6" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -husky@^7.0.4: - version "7.0.4" - resolved "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz" - integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== - -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" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -idna-uts46-hx@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz" - integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== - dependencies: - punycode "2.1.0" - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-walk@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" - integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== - dependencies: - minimatch "^5.0.1" - -ignore@^5.0.4, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -immediate@~3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz" - integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== - -immutable@^4.0.0-rc.12: - version "4.1.0" - resolved "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz" - integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imul@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz" - integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - 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" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.2, ini@^1.3.4: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -init-package-json@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" - integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== - dependencies: - npm-package-arg "^9.0.1" - promzard "^0.3.0" - read "^1.0.7" - read-package-json "^5.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" - -inquirer@^8.2.4: - version "8.2.4" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" - integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^7.0.0" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -io-ts@1.10.4: - version "1.10.4" - resolved "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz" - integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== - dependencies: - fp-ts "^1.0.0" - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" - 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" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^2.0.5, is-buffer@~2.0.3: - version "2.0.5" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.6: - version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-function@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz" - integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -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" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -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" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" - 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" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - -is-plain-obj@^2.0.0, 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" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" - 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.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-ssh@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== - dependencies: - protocols "^2.0.1" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" - integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== - dependencies: - text-extensions "^1.0.0" - -is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz" - integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.20.0" - for-each "^0.3.3" - has-tostringtag "^1.0.0" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + "agent-base" "6" + "debug" "4" + +"human-signals@^2.1.0": + "integrity" "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + "version" "2.1.0" + +"humanize-ms@^1.2.1": + "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" + "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "ms" "^2.0.0" + +"husky@^7.0.4": + "integrity" "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==" + "resolved" "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz" + "version" "7.0.4" + +"iconv-lite@^0.4.24", "iconv-lite@0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + +"iconv-lite@^0.6.2": + "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + "version" "0.6.3" + dependencies: + "safer-buffer" ">= 2.1.2 < 3.0.0" + +"idna-uts46-hx@^2.3.1": + "integrity" "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==" + "resolved" "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz" + "version" "2.3.1" + dependencies: + "punycode" "2.1.0" + +"ieee754@^1.1.13", "ieee754@^1.2.1": + "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + "version" "1.2.1" + +"ignore-walk@^5.0.1": + "integrity" "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==" + "resolved" "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "minimatch" "^5.0.1" + +"ignore@^5.0.4", "ignore@^5.1.1", "ignore@^5.2.0": + "integrity" "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" + "version" "5.2.0" + +"immediate@^3.2.3": + "integrity" "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" + "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz" + "version" "3.3.0" + +"immutable@^4.0.0-rc.12": + "integrity" "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + "resolved" "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz" + "version" "4.1.0" + +"import-fresh@^3.0.0", "import-fresh@^3.2.1": + "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"import-local@^3.0.2": + "integrity" "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==" + "resolved" "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "pkg-dir" "^4.2.0" + "resolve-cwd" "^3.0.0" + +"imul@^1.0.0": + "integrity" "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==" + "resolved" "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz" + "version" "1.0.1" + +"imurmurhash@^0.1.4": + "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" + +"infer-owner@^1.0.4": + "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + "version" "1.0.4" + +"inflight@^1.0.4": + "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.1", "inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.1", "inherits@~2.0.3", "inherits@2", "inherits@2.0.4": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"ini@^1.3.2", "ini@^1.3.4", "ini@^1.3.5": + "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + "version" "1.3.8" + +"init-package-json@^3.0.2": + "integrity" "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==" + "resolved" "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "npm-package-arg" "^9.0.1" + "promzard" "^0.3.0" + "read" "^1.0.7" + "read-package-json" "^5.0.0" + "semver" "^7.3.5" + "validate-npm-package-license" "^3.0.4" + "validate-npm-package-name" "^4.0.0" + +"inquirer@^8.2.4": + "integrity" "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz" + "version" "8.2.4" + dependencies: + "ansi-escapes" "^4.2.1" + "chalk" "^4.1.1" + "cli-cursor" "^3.1.0" + "cli-width" "^3.0.0" + "external-editor" "^3.0.3" + "figures" "^3.0.0" + "lodash" "^4.17.21" + "mute-stream" "0.0.8" + "ora" "^5.4.1" + "run-async" "^2.4.0" + "rxjs" "^7.5.5" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + "through" "^2.3.6" + "wrap-ansi" "^7.0.0" + +"internal-slot@^1.0.3": + "integrity" "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==" + "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "get-intrinsic" "^1.1.0" + "has" "^1.0.3" + "side-channel" "^1.0.4" + +"interpret@^1.0.0": + "integrity" "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + "version" "1.4.0" + +"invert-kv@^2.0.0": + "integrity" "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + "resolved" "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz" + "version" "2.0.0" + +"io-ts@1.10.4": + "integrity" "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==" + "resolved" "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz" + "version" "1.10.4" + dependencies: + "fp-ts" "^1.0.0" + +"ip@^2.0.0": + "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + "version" "2.0.0" + +"ipaddr.js@1.9.1": + "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + "version" "1.9.1" + +"is-arguments@^1.0.4": + "integrity" "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==" + "resolved" "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-arrayish@^0.2.1": + "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-bigint@^1.0.1": + "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==" + "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "has-bigints" "^1.0.1" + +"is-binary-path@~2.1.0": + "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "binary-extensions" "^2.0.0" + +"is-boolean-object@^1.1.0": + "integrity" "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==" + "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-buffer@^2.0.5", "is-buffer@~2.0.3": + "integrity" "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" + "version" "2.0.5" + +"is-callable@^1.1.3", "is-callable@^1.1.4", "is-callable@^1.2.6": + "integrity" "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + "version" "1.2.7" + +"is-ci@^2.0.0": + "integrity" "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==" + "resolved" "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "ci-info" "^2.0.0" + +"is-core-module@^2.5.0", "is-core-module@^2.8.1", "is-core-module@^2.9.0": + "integrity" "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" + "version" "2.10.0" + dependencies: + "has" "^1.0.3" + +"is-date-object@^1.0.1": + "integrity" "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==" + "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-docker@^2.0.0", "is-docker@^2.1.1": + "integrity" "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + "resolved" "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + "version" "2.2.1" + +"is-extglob@^2.1.1": + "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fn@^1.0.0": + "integrity" "sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==" + "resolved" "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz" + "version" "1.0.0" + +"is-fullwidth-code-point@^2.0.0": + "integrity" "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + "version" "2.0.0" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-fullwidth-code-point@^4.0.0": + "integrity" "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" + "version" "4.0.0" + +"is-function@^1.0.1": + "integrity" "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + "resolved" "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz" + "version" "1.0.2" + +"is-generator-fn@^2.0.0": + "integrity" "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + "resolved" "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + "version" "2.1.0" + +"is-generator-function@^1.0.7": + "integrity" "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==" + "resolved" "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "is-extglob" "^2.1.1" + +"is-hex-prefixed@1.0.0": + "integrity" "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + "resolved" "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" + "version" "1.0.0" + +"is-interactive@^1.0.0": + "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + "version" "1.0.0" + +"is-lambda@^1.0.1": + "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + "version" "1.0.1" + +"is-negative-zero@^2.0.2": + "integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + "version" "2.0.2" + +"is-number-object@^1.0.4": + "integrity" "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==" + "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"is-obj@^2.0.0": + "integrity" "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + "version" "2.0.0" + +"is-plain-obj@^1.0.0": + "integrity" "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + "version" "1.1.0" + +"is-plain-obj@^1.1.0": + "integrity" "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + "version" "1.1.0" + +"is-plain-obj@^2.0.0", "is-plain-obj@^2.1.0": + "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + "version" "2.1.0" + +"is-plain-object@^2.0.4": + "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" + "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "isobject" "^3.0.1" + +"is-plain-object@^5.0.0": + "integrity" "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" + "version" "5.0.0" + +"is-regex@^1.1.4": + "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==" + "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + "version" "1.1.4" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-shared-array-buffer@^1.0.2": + "integrity" "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==" + "resolved" "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" + +"is-ssh@^1.4.0": + "integrity" "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==" + "resolved" "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "protocols" "^2.0.1" + +"is-stream@^1.1.0": + "integrity" "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + "version" "1.1.0" + +"is-stream@^2.0.0": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" + +"is-string@^1.0.5", "is-string@^1.0.7": + "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" + "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-symbol@^1.0.2", "is-symbol@^1.0.3": + "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==" + "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "has-symbols" "^1.0.2" + +"is-text-path@^1.0.1": + "integrity" "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==" + "resolved" "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "text-extensions" "^1.0.0" + +"is-typed-array@^1.1.3", "is-typed-array@^1.1.9": + "integrity" "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==" + "resolved" "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz" + "version" "1.1.9" + dependencies: + "available-typed-arrays" "^1.0.5" + "call-bind" "^1.0.2" + "es-abstract" "^1.20.0" + "for-each" "^0.3.3" + "has-tostringtag" "^1.0.0" + +"is-typedarray@^1.0.0", "is-typedarray@~1.0.0": + "integrity" "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + "version" "1.0.0" + +"is-unicode-supported@^0.1.0": + "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + "version" "0.1.0" + +"is-weakref@^1.0.2": + "integrity" "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==" + "resolved" "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" + +"is-wsl@^2.2.0": + "integrity" "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==" + "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "is-docker" "^2.0.0" + +"isarray@~1.0.0": + "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== +"isarray@0.0.1": + "integrity" "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + "version" "0.0.1" + +"isexe@^2.0.0": + "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"isobject@^3.0.1": + "integrity" "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + "version" "3.0.1" + +"isstream@~0.1.2": + "integrity" "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + "resolved" "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + "version" "0.1.2" -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz" - integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== +"istanbul-lib-coverage@^3.0.0", "istanbul-lib-coverage@^3.2.0": + "integrity" "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" + "version" "3.2.0" + +"istanbul-lib-instrument@^5.0.4", "istanbul-lib-instrument@^5.1.0": + "integrity" "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==" + "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz" + "version" "5.2.0" dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" + "istanbul-lib-coverage" "^3.2.0" + "semver" "^6.3.0" -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== +"istanbul-lib-report@^3.0.0": + "integrity" "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" + "istanbul-lib-coverage" "^3.0.0" + "make-dir" "^3.0.0" + "supports-color" "^7.1.0" -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== +"istanbul-lib-source-maps@^4.0.0": + "integrity" "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + "version" "4.0.1" dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" + "debug" "^4.1.1" + "istanbul-lib-coverage" "^3.0.0" + "source-map" "^0.6.1" -istanbul-reports@^3.1.3: - version "3.1.5" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== +"istanbul-reports@^3.1.3": + "integrity" "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==" + "resolved" "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" + "version" "3.1.5" dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" + "html-escaper" "^2.0.0" + "istanbul-lib-report" "^3.0.0" -jest-changed-files@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz" - integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== +"jest-changed-files@^28.1.3": + "integrity" "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==" + "resolved" "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz" + "version" "28.1.3" dependencies: - execa "^5.0.0" - p-limit "^3.1.0" + "execa" "^5.0.0" + "p-limit" "^3.1.0" -jest-circus@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz" - integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== +"jest-circus@^28.1.3": + "integrity" "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==" + "resolved" "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/environment" "^28.1.3" "@jest/expect" "^28.1.3" "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^0.7.0" - is-generator-fn "^2.0.0" - jest-each "^28.1.3" - jest-matcher-utils "^28.1.3" - jest-message-util "^28.1.3" - jest-runtime "^28.1.3" - jest-snapshot "^28.1.3" - jest-util "^28.1.3" - p-limit "^3.1.0" - pretty-format "^28.1.3" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz" - integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== + "chalk" "^4.0.0" + "co" "^4.6.0" + "dedent" "^0.7.0" + "is-generator-fn" "^2.0.0" + "jest-each" "^28.1.3" + "jest-matcher-utils" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-runtime" "^28.1.3" + "jest-snapshot" "^28.1.3" + "jest-util" "^28.1.3" + "p-limit" "^3.1.0" + "pretty-format" "^28.1.3" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" + +"jest-cli@^28.1.3": + "integrity" "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==" + "resolved" "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/core" "^28.1.3" "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - import-local "^3.0.2" - jest-config "^28.1.3" - jest-util "^28.1.3" - jest-validate "^28.1.3" - prompts "^2.0.1" - yargs "^17.3.1" - -jest-config@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz" - integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.9" + "import-local" "^3.0.2" + "jest-config" "^28.1.3" + "jest-util" "^28.1.3" + "jest-validate" "^28.1.3" + "prompts" "^2.0.1" + "yargs" "^17.3.1" + +"jest-config@^28.1.3": + "integrity" "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==" + "resolved" "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/core" "^7.11.6" "@jest/test-sequencer" "^28.1.3" "@jest/types" "^28.1.3" - babel-jest "^28.1.3" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^28.1.3" - jest-environment-node "^28.1.3" - jest-get-type "^28.0.2" - jest-regex-util "^28.0.2" - jest-resolve "^28.1.3" - jest-runner "^28.1.3" - jest-util "^28.1.3" - jest-validate "^28.1.3" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^28.1.3" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" - integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== - dependencies: - chalk "^4.0.0" - diff-sequences "^28.1.1" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" - -jest-docblock@^28.1.1: - version "28.1.1" - resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz" - integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== - dependencies: - detect-newline "^3.0.0" - -jest-each@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz" - integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== + "babel-jest" "^28.1.3" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "deepmerge" "^4.2.2" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "jest-circus" "^28.1.3" + "jest-environment-node" "^28.1.3" + "jest-get-type" "^28.0.2" + "jest-regex-util" "^28.0.2" + "jest-resolve" "^28.1.3" + "jest-runner" "^28.1.3" + "jest-util" "^28.1.3" + "jest-validate" "^28.1.3" + "micromatch" "^4.0.4" + "parse-json" "^5.2.0" + "pretty-format" "^28.1.3" + "slash" "^3.0.0" + "strip-json-comments" "^3.1.1" + +"jest-diff@^28.1.3": + "integrity" "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==" + "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" + "version" "28.1.3" + dependencies: + "chalk" "^4.0.0" + "diff-sequences" "^28.1.1" + "jest-get-type" "^28.0.2" + "pretty-format" "^28.1.3" + +"jest-docblock@^28.1.1": + "integrity" "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==" + "resolved" "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "detect-newline" "^3.0.0" + +"jest-each@^28.1.3": + "integrity" "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==" + "resolved" "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" - chalk "^4.0.0" - jest-get-type "^28.0.2" - jest-util "^28.1.3" - pretty-format "^28.1.3" + "chalk" "^4.0.0" + "jest-get-type" "^28.0.2" + "jest-util" "^28.1.3" + "pretty-format" "^28.1.3" -jest-environment-node@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz" - integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== +"jest-environment-node@^28.1.3": + "integrity" "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==" + "resolved" "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/environment" "^28.1.3" "@jest/fake-timers" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - jest-mock "^28.1.3" - jest-util "^28.1.3" + "jest-mock" "^28.1.3" + "jest-util" "^28.1.3" -jest-get-type@^28.0.2: - version "28.0.2" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" - integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== +"jest-get-type@^28.0.2": + "integrity" "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==" + "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" + "version" "28.0.2" -jest-haste-map@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz" - integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== +"jest-haste-map@^28.1.3": + "integrity" "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==" + "resolved" "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@types/graceful-fs" "^4.1.3" "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^28.0.2" - jest-util "^28.1.3" - jest-worker "^28.1.3" - micromatch "^4.0.4" - walker "^1.0.8" + "anymatch" "^3.0.3" + "fb-watchman" "^2.0.0" + "graceful-fs" "^4.2.9" + "jest-regex-util" "^28.0.2" + "jest-util" "^28.1.3" + "jest-worker" "^28.1.3" + "micromatch" "^4.0.4" + "walker" "^1.0.8" optionalDependencies: - fsevents "^2.3.2" + "fsevents" "^2.3.2" -jest-leak-detector@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz" - integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== +"jest-leak-detector@^28.1.3": + "integrity" "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==" + "resolved" "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz" + "version" "28.1.3" dependencies: - jest-get-type "^28.0.2" - pretty-format "^28.1.3" + "jest-get-type" "^28.0.2" + "pretty-format" "^28.1.3" -jest-matcher-utils@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" - integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== +"jest-matcher-utils@^28.1.3": + "integrity" "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==" + "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" + "version" "28.1.3" dependencies: - chalk "^4.0.0" - jest-diff "^28.1.3" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" + "chalk" "^4.0.0" + "jest-diff" "^28.1.3" + "jest-get-type" "^28.0.2" + "pretty-format" "^28.1.3" -jest-message-util@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz" - integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== +"jest-message-util@^28.1.3": + "integrity" "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==" + "resolved" "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/code-frame" "^7.12.13" "@jest/types" "^28.1.3" "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^28.1.3" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz" - integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "micromatch" "^4.0.4" + "pretty-format" "^28.1.3" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" + +"jest-mock@^28.1.3": + "integrity" "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==" + "resolved" "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@types/node" "*" -jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^28.0.2: - version "28.0.2" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" - integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== - -jest-resolve-dependencies@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz" - integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== - dependencies: - jest-regex-util "^28.0.2" - jest-snapshot "^28.1.3" - -jest-resolve@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz" - integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - jest-pnp-resolver "^1.2.2" - jest-util "^28.1.3" - jest-validate "^28.1.3" - resolve "^1.20.0" - resolve.exports "^1.1.0" - slash "^3.0.0" - -jest-runner@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz" - integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== +"jest-pnp-resolver@^1.2.2": + "integrity" "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + "resolved" "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" + "version" "1.2.2" + +"jest-regex-util@^28.0.2": + "integrity" "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==" + "resolved" "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" + "version" "28.0.2" + +"jest-resolve-dependencies@^28.1.3": + "integrity" "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==" + "resolved" "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz" + "version" "28.1.3" + dependencies: + "jest-regex-util" "^28.0.2" + "jest-snapshot" "^28.1.3" + +"jest-resolve@*", "jest-resolve@^28.1.3": + "integrity" "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==" + "resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz" + "version" "28.1.3" + dependencies: + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.3" + "jest-pnp-resolver" "^1.2.2" + "jest-util" "^28.1.3" + "jest-validate" "^28.1.3" + "resolve" "^1.20.0" + "resolve.exports" "^1.1.0" + "slash" "^3.0.0" + +"jest-runner@^28.1.3": + "integrity" "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==" + "resolved" "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/console" "^28.1.3" "@jest/environment" "^28.1.3" @@ -6979,26 +8097,26 @@ jest-runner@^28.1.3: "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - chalk "^4.0.0" - emittery "^0.10.2" - graceful-fs "^4.2.9" - jest-docblock "^28.1.1" - jest-environment-node "^28.1.3" - jest-haste-map "^28.1.3" - jest-leak-detector "^28.1.3" - jest-message-util "^28.1.3" - jest-resolve "^28.1.3" - jest-runtime "^28.1.3" - jest-util "^28.1.3" - jest-watcher "^28.1.3" - jest-worker "^28.1.3" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz" - integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== + "chalk" "^4.0.0" + "emittery" "^0.10.2" + "graceful-fs" "^4.2.9" + "jest-docblock" "^28.1.1" + "jest-environment-node" "^28.1.3" + "jest-haste-map" "^28.1.3" + "jest-leak-detector" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-resolve" "^28.1.3" + "jest-runtime" "^28.1.3" + "jest-util" "^28.1.3" + "jest-watcher" "^28.1.3" + "jest-worker" "^28.1.3" + "p-limit" "^3.1.0" + "source-map-support" "0.5.13" + +"jest-runtime@^28.1.3": + "integrity" "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==" + "resolved" "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/environment" "^28.1.3" "@jest/fake-timers" "^28.1.3" @@ -7007,26 +8125,26 @@ jest-runtime@^28.1.3: "@jest/test-result" "^28.1.3" "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - execa "^5.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - jest-message-util "^28.1.3" - jest-mock "^28.1.3" - jest-regex-util "^28.0.2" - jest-resolve "^28.1.3" - jest-snapshot "^28.1.3" - jest-util "^28.1.3" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-snapshot@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz" - integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== + "chalk" "^4.0.0" + "cjs-module-lexer" "^1.0.0" + "collect-v8-coverage" "^1.0.0" + "execa" "^5.0.0" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-mock" "^28.1.3" + "jest-regex-util" "^28.0.2" + "jest-resolve" "^28.1.3" + "jest-snapshot" "^28.1.3" + "jest-util" "^28.1.3" + "slash" "^3.0.0" + "strip-bom" "^4.0.0" + +"jest-snapshot@^28.1.3": + "integrity" "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==" + "resolved" "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -7038,269 +8156,362 @@ jest-snapshot@^28.1.3: "@jest/types" "^28.1.3" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^28.1.3" - graceful-fs "^4.2.9" - jest-diff "^28.1.3" - jest-get-type "^28.0.2" - jest-haste-map "^28.1.3" - jest-matcher-utils "^28.1.3" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - natural-compare "^1.4.0" - pretty-format "^28.1.3" - semver "^7.3.5" - -jest-util@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz" - integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + "babel-preset-current-node-syntax" "^1.0.0" + "chalk" "^4.0.0" + "expect" "^28.1.3" + "graceful-fs" "^4.2.9" + "jest-diff" "^28.1.3" + "jest-get-type" "^28.0.2" + "jest-haste-map" "^28.1.3" + "jest-matcher-utils" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-util" "^28.1.3" + "natural-compare" "^1.4.0" + "pretty-format" "^28.1.3" + "semver" "^7.3.5" + +"jest-util@^28.1.3": + "integrity" "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==" + "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "graceful-fs" "^4.2.9" + "picomatch" "^2.2.3" -jest-validate@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz" - integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== +"jest-validate@^28.1.3": + "integrity" "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==" + "resolved" "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^28.0.2" - leven "^3.1.0" - pretty-format "^28.1.3" + "camelcase" "^6.2.0" + "chalk" "^4.0.0" + "jest-get-type" "^28.0.2" + "leven" "^3.1.0" + "pretty-format" "^28.1.3" -jest-watcher@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz" - integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== +"jest-watcher@^28.1.3": + "integrity" "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==" + "resolved" "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.10.2" - jest-util "^28.1.3" - string-length "^4.0.1" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "emittery" "^0.10.2" + "jest-util" "^28.1.3" + "string-length" "^4.0.1" -jest-worker@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" - integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== +"jest-worker@^28.1.3": + "integrity" "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" + "version" "28.1.3" dependencies: "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -js-sdsl@^4.1.4: - version "4.1.5" - resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz" - integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== - -js-sha3@0.5.7, js-sha3@^0.5.7: - version "0.5.7" - resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" - integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== - -js-sha3@0.8.0, js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -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" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -js-yaml@^3.10.0, js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - -jsonc-parser@3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz" - integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" + +"js-base64@^3.7.2": + "integrity" "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" + "resolved" "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz" + "version" "3.7.2" + +"js-sdsl@^4.1.4": + "integrity" "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==" + "resolved" "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz" + "version" "4.1.5" + +"js-sha3@^0.5.7": + "integrity" "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" + "version" "0.5.7" + +"js-sha3@^0.8.0", "js-sha3@0.8.0": + "integrity" "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" + "version" "0.8.0" + +"js-sha3@0.5.7": + "integrity" "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" + "version" "0.5.7" + +"js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.10.0": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"js-yaml@^3.13.1": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"js-yaml@^4.1.0", "js-yaml@4.1.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + +"js-yaml@3.13.1": + "integrity" "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" + "version" "3.13.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"js-yaml@3.x": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"jsbn@~0.1.0": + "integrity" "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + "version" "0.1.1" + +"jsesc@^2.5.1": + "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + "version" "2.5.2" + +"json-buffer@3.0.0": + "integrity" "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" + "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" + "version" "3.0.0" + +"json-buffer@3.0.1": + "integrity" "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + "version" "3.0.1" + +"json-parse-better-errors@^1.0.1": + "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + "version" "1.0.2" + +"json-parse-even-better-errors@^2.3.0", "json-parse-even-better-errors@^2.3.1": + "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + "version" "2.3.1" + +"json-rpc-engine@^5.3.0": + "integrity" "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==" + "resolved" "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz" + "version" "5.4.0" + dependencies: + "eth-rpc-errors" "^3.0.0" + "safe-event-emitter" "^1.0.1" + +"json-rpc-engine@^6.1.0": + "integrity" "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==" + "resolved" "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + "eth-rpc-errors" "^4.0.2" + +"json-rpc-random-id@^1.0.0", "json-rpc-random-id@^1.0.1": + "integrity" "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" + "resolved" "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz" + "version" "1.0.1" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-schema@0.4.0": + "integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + "version" "0.4.0" + +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + +"json-stable-stringify@^1.0.1": + "integrity" "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==" + "resolved" "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "jsonify" "~0.0.0" + +"json-stringify-nice@^1.1.4": + "integrity" "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==" + "resolved" "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz" + "version" "1.1.4" + +"json-stringify-safe@^5.0.1", "json-stringify-safe@~5.0.1": + "integrity" "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + "resolved" "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + "version" "5.0.1" + +"json5@^1.0.1": + "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" + "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "minimist" "^1.2.0" + +"json5@^2.2.1": + "integrity" "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" + "version" "2.2.1" + +"jsonc-parser@3.2.0": + "integrity" "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + "resolved" "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + "version" "3.2.0" + +"jsonfile@^2.1.0": + "integrity" "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz" + "version" "2.4.0" optionalDependencies: - graceful-fs "^4.1.6" + "graceful-fs" "^4.1.6" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== +"jsonfile@^4.0.0": + "integrity" "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + "version" "4.0.0" optionalDependencies: - graceful-fs "^4.1.6" + "graceful-fs" "^4.1.6" -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== +"jsonfile@^6.0.1": + "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + "version" "6.1.0" dependencies: - universalify "^2.0.0" + "universalify" "^2.0.0" optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -just-diff-apply@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.4.1.tgz#1debed059ad009863b4db0e8d8f333d743cdd83b" - integrity sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g== - -just-diff@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.1.1.tgz#8da6414342a5ed6d02ccd64f5586cbbed3146202" - integrity sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ== - -keccak@3.0.2, keccak@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - -keyv@^4.0.0: - version "4.5.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz" - integrity sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - 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" - integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + "graceful-fs" "^4.1.6" + +"jsonify@~0.0.0": + "integrity" "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==" + "resolved" "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" + "version" "0.0.0" + +"jsonparse@^1.2.0", "jsonparse@^1.3.1": + "integrity" "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" + "resolved" "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + "version" "1.3.1" + +"jsonschema@^1.2.4": + "integrity" "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==" + "resolved" "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz" + "version" "1.4.1" + +"JSONStream@^1.0.4": + "integrity" "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==" + "resolved" "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + "version" "1.3.5" + dependencies: + "jsonparse" "^1.2.0" + "through" ">=2.2.7 <3" + +"jsprim@^1.2.2": + "integrity" "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==" + "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" + "version" "1.4.2" + dependencies: + "assert-plus" "1.0.0" + "extsprintf" "1.3.0" + "json-schema" "0.4.0" + "verror" "1.10.0" + +"just-diff-apply@^5.2.0": + "integrity" "sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g==" + "resolved" "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.4.1.tgz" + "version" "5.4.1" + +"just-diff@^5.0.1": + "integrity" "sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ==" + "resolved" "https://registry.npmjs.org/just-diff/-/just-diff-5.1.1.tgz" + "version" "5.1.1" + +"keccak@^3.0.0", "keccak@^3.0.2": + "integrity" "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==" + "resolved" "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "node-addon-api" "^2.0.0" + "node-gyp-build" "^4.2.0" + "readable-stream" "^3.6.0" + +"keccak@3.0.2": + "integrity" "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==" + "resolved" "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "node-addon-api" "^2.0.0" + "node-gyp-build" "^4.2.0" + "readable-stream" "^3.6.0" + +"keyv@^3.0.0": + "integrity" "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==" + "resolved" "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "json-buffer" "3.0.0" + +"keyv@^4.0.0": + "integrity" "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==" + "resolved" "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz" + "version" "4.5.0" + dependencies: + "json-buffer" "3.0.1" + +"kind-of@^6.0.2", "kind-of@^6.0.3": + "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + "version" "6.0.3" + +"klaw@^1.0.0": + "integrity" "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==" + "resolved" "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz" + "version" "1.3.1" optionalDependencies: - graceful-fs "^4.1.9" + "graceful-fs" "^4.1.9" -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +"kleur@^3.0.3": + "integrity" "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "resolved" "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + "version" "3.0.3" -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== +"lcid@^2.0.0": + "integrity" "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==" + "resolved" "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz" + "version" "2.0.0" dependencies: - invert-kv "^2.0.0" + "invert-kv" "^2.0.0" -lerna@^5.5.4: - version "5.5.4" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-5.5.4.tgz#34d95dd3e26c725ce4ba981b887aaf59ce899519" - integrity sha512-LAFQ/U6SL7/EM0sedtFaFS4b0RbTqsYYOJ6LV9Y7l/zWFlqLcg41vLblkNRuxsNB5FZBNpfiWvXmd1KiWkQ/yQ== +"lerna@^5.5.4": + "integrity" "sha512-LAFQ/U6SL7/EM0sedtFaFS4b0RbTqsYYOJ6LV9Y7l/zWFlqLcg41vLblkNRuxsNB5FZBNpfiWvXmd1KiWkQ/yQ==" + "resolved" "https://registry.npmjs.org/lerna/-/lerna-5.5.4.tgz" + "version" "5.5.4" dependencies: "@lerna/add" "5.5.4" "@lerna/bootstrap" "5.5.4" @@ -7318,2332 +8529,2636 @@ lerna@^5.5.4: "@lerna/publish" "5.5.4" "@lerna/run" "5.5.4" "@lerna/version" "5.5.4" - import-local "^3.0.2" - npmlog "^6.0.2" - nx ">=14.6.1 < 16" - typescript "^3 || ^4" - -level-codec@^9.0.0: - version "9.0.2" - resolved "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz" - integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== - dependencies: - buffer "^5.6.0" - -level-concat-iterator@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz" - integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== - dependencies: - catering "^2.1.0" - -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - -level-errors@^2.0.0, level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - -level-mem@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz" - integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== - dependencies: - level-packager "^5.0.3" - memdown "^5.0.0" - -level-packager@^5.0.3: - version "5.1.1" - resolved "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - -level-supports@^2.0.1: - version "2.1.0" - resolved "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz" - integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== - -level-supports@~1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - -level-ws@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz" - integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== - dependencies: - inherits "^2.0.3" - readable-stream "^3.1.0" - xtend "^4.0.1" - -leveldown@6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz" - integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== - dependencies: - abstract-leveldown "^7.2.0" - napi-macros "~2.0.0" - node-gyp-build "^4.3.0" - -levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -libnpmaccess@^6.0.3: - version "6.0.4" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz#2dd158bd8a071817e2207d3b201d37cf1ad6ae6b" - integrity sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag== - dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" - -libnpmpublish@^6.0.4: - version "6.0.5" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.5.tgz#5a894f3de2e267d62f86be2a508e362599b5a4b1" - integrity sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg== - dependencies: - normalize-package-data "^4.0.0" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" - semver "^7.3.7" - ssri "^9.0.0" - -lilconfig@2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz" - integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lint-staged@^12.3.7: - version "12.5.0" - resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz" - integrity sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g== - dependencies: - cli-truncate "^3.1.0" - colorette "^2.0.16" - commander "^9.3.0" - debug "^4.3.4" - execa "^5.1.1" - lilconfig "2.0.5" - listr2 "^4.0.5" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-inspect "^1.12.2" - pidtree "^0.5.0" - string-argv "^0.3.1" - supports-color "^9.2.2" - yaml "^1.10.2" - -listr2@^4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz" - integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.16" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.5" - through "^2.3.8" - wrap-ansi "^7.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-json-file@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz" - integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== - dependencies: - graceful-fs "^4.1.15" - parse-json "^5.0.0" - strip-bom "^4.0.0" - type-fest "^0.6.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - 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" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" - integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -log-symbols@4.1.0, log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -loupe@^2.3.1: - version "2.3.4" - resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" - integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== - dependencies: - get-func-name "^2.0.0" - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.14.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" - integrity sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ== - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - -ltgt@~2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz" - integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: - version "10.2.1" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" - integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^16.1.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-fetch "^2.0.3" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^9.0.0" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" - integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - -markdown-table@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz" - integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== - -match-all@^1.2.6: - version "1.2.6" - resolved "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz" - integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== - -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memdown@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz" - integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== - dependencies: - abstract-leveldown "~6.2.1" - functional-red-black-tree "~1.0.1" - immediate "~3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.2.0" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -meow@^8.0.0: - version "8.1.2" - resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + "import-local" "^3.0.2" + "npmlog" "^6.0.2" + "nx" ">=14.6.1 < 16" + "typescript" "^3 || ^4" + +"level-codec@~7.0.0": + "integrity" "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" + "resolved" "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz" + "version" "7.0.1" + +"level-concat-iterator@^3.0.0": + "integrity" "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==" + "resolved" "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "catering" "^2.1.0" + +"level-errors@^1.0.3": + "integrity" "sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==" + "resolved" "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "errno" "~0.1.1" + +"level-errors@~1.0.3": + "integrity" "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==" + "resolved" "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "errno" "~0.1.1" + +"level-iterator-stream@~1.3.0": + "integrity" "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==" + "resolved" "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "inherits" "^2.0.1" + "level-errors" "^1.0.3" + "readable-stream" "^1.0.33" + "xtend" "^4.0.0" + +"level-supports@^2.0.1": + "integrity" "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==" + "resolved" "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz" + "version" "2.1.0" + +"level-supports@^4.0.0": + "integrity" "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==" + "resolved" "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz" + "version" "4.0.1" + +"level-transcoder@^1.0.1": + "integrity" "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==" + "resolved" "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "buffer" "^6.0.3" + "module-error" "^1.0.1" + +"level-ws@0.0.0": + "integrity" "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==" + "resolved" "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz" + "version" "0.0.0" + dependencies: + "readable-stream" "~1.0.15" + "xtend" "~2.1.1" + +"level@^8.0.0": + "integrity" "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==" + "resolved" "https://registry.npmjs.org/level/-/level-8.0.0.tgz" + "version" "8.0.0" + dependencies: + "browser-level" "^1.0.1" + "classic-level" "^1.2.0" + +"leveldown@6.1.0": + "integrity" "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==" + "resolved" "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "abstract-leveldown" "^7.2.0" + "napi-macros" "~2.0.0" + "node-gyp-build" "^4.3.0" + +"levelup@^1.2.1": + "integrity" "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==" + "resolved" "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz" + "version" "1.3.9" + dependencies: + "deferred-leveldown" "~1.2.1" + "level-codec" "~7.0.0" + "level-errors" "~1.0.3" + "level-iterator-stream" "~1.3.0" + "prr" "~1.0.1" + "semver" "~5.4.1" + "xtend" "~4.0.0" + +"leven@^3.1.0": + "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + "version" "3.1.0" + +"levn@^0.4.1": + "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "prelude-ls" "^1.2.1" + "type-check" "~0.4.0" + +"levn@~0.3.0": + "integrity" "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" + +"libnpmaccess@^6.0.3": + "integrity" "sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag==" + "resolved" "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.4.tgz" + "version" "6.0.4" + dependencies: + "aproba" "^2.0.0" + "minipass" "^3.1.1" + "npm-package-arg" "^9.0.1" + "npm-registry-fetch" "^13.0.0" + +"libnpmpublish@^6.0.4": + "integrity" "sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg==" + "resolved" "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.5.tgz" + "version" "6.0.5" + dependencies: + "normalize-package-data" "^4.0.0" + "npm-package-arg" "^9.0.1" + "npm-registry-fetch" "^13.0.0" + "semver" "^7.3.7" + "ssri" "^9.0.0" + +"lilconfig@2.0.5": + "integrity" "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==" + "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz" + "version" "2.0.5" + +"lines-and-columns@^1.1.6": + "integrity" "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + "version" "1.2.4" + +"lint-staged@^12.3.7": + "integrity" "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==" + "resolved" "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz" + "version" "12.5.0" + dependencies: + "cli-truncate" "^3.1.0" + "colorette" "^2.0.16" + "commander" "^9.3.0" + "debug" "^4.3.4" + "execa" "^5.1.1" + "lilconfig" "2.0.5" + "listr2" "^4.0.5" + "micromatch" "^4.0.5" + "normalize-path" "^3.0.0" + "object-inspect" "^1.12.2" + "pidtree" "^0.5.0" + "string-argv" "^0.3.1" + "supports-color" "^9.2.2" + "yaml" "^1.10.2" + +"listr2@^4.0.5": + "integrity" "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==" + "resolved" "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "cli-truncate" "^2.1.0" + "colorette" "^2.0.16" + "log-update" "^4.0.0" + "p-map" "^4.0.0" + "rfdc" "^1.3.0" + "rxjs" "^7.5.5" + "through" "^2.3.8" + "wrap-ansi" "^7.0.0" + +"load-json-file@^4.0.0": + "integrity" "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==" + "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "graceful-fs" "^4.1.2" + "parse-json" "^4.0.0" + "pify" "^3.0.0" + "strip-bom" "^3.0.0" + +"load-json-file@^6.2.0": + "integrity" "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==" + "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "graceful-fs" "^4.1.15" + "parse-json" "^5.0.0" + "strip-bom" "^4.0.0" + "type-fest" "^0.6.0" + +"locate-path@^2.0.0": + "integrity" "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "p-locate" "^2.0.0" + "path-exists" "^3.0.0" + +"locate-path@^3.0.0": + "integrity" "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "p-locate" "^3.0.0" + "path-exists" "^3.0.0" + +"locate-path@^5.0.0": + "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-locate" "^4.1.0" + +"locate-path@^6.0.0": + "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "p-locate" "^5.0.0" + +"lodash.camelcase@^4.3.0": + "integrity" "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + "resolved" "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" + "version" "4.3.0" + +"lodash.debounce@^4.0.8": + "integrity" "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + "version" "4.0.8" + +"lodash.ismatch@^4.4.0": + "integrity" "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==" + "resolved" "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" + "version" "4.4.0" + +"lodash.merge@^4.6.2": + "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + "version" "4.6.2" + +"lodash@^4.17.11", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.19", "lodash@^4.17.21": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"log-symbols@^4.1.0", "log-symbols@4.1.0": + "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "chalk" "^4.1.0" + "is-unicode-supported" "^0.1.0" + +"log-symbols@3.0.0": + "integrity" "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "chalk" "^2.4.2" + +"log-update@^4.0.0": + "integrity" "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==" + "resolved" "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-escapes" "^4.3.0" + "cli-cursor" "^3.1.0" + "slice-ansi" "^4.0.0" + "wrap-ansi" "^6.2.0" + +"loupe@^2.3.1": + "integrity" "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==" + "resolved" "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" + "version" "2.3.4" + dependencies: + "get-func-name" "^2.0.0" + +"lowercase-keys@^1.0.0", "lowercase-keys@^1.0.1": + "integrity" "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" + "version" "1.0.1" + +"lowercase-keys@^2.0.0": + "integrity" "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + "version" "2.0.0" + +"lowercase-keys@^3.0.0": + "integrity" "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==" + "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" + "version" "3.0.0" + +"lru_map@^0.3.3": + "integrity" "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + "resolved" "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" + "version" "0.3.3" + +"lru-cache@^5.1.1": + "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "yallist" "^3.0.2" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"lru-cache@^7.4.4": + "integrity" "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" + "version" "7.14.0" + +"lru-cache@^7.5.1": + "integrity" "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" + "version" "7.14.0" + +"lru-cache@^7.7.1": + "integrity" "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" + "version" "7.14.0" + +"ltgt@~2.2.0": + "integrity" "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" + "resolved" "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz" + "version" "2.2.1" + +"make-dir@^2.1.0": + "integrity" "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "pify" "^4.0.1" + "semver" "^5.6.0" + +"make-dir@^3.0.0": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^6.0.0" + +"make-error@^1.1.1": + "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + "version" "1.3.6" + +"make-fetch-happen@^10.0.3", "make-fetch-happen@^10.0.6": + "integrity" "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==" + "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" + "version" "10.2.1" + dependencies: + "agentkeepalive" "^4.2.1" + "cacache" "^16.1.0" + "http-cache-semantics" "^4.1.0" + "http-proxy-agent" "^5.0.0" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^7.7.1" + "minipass" "^3.1.6" + "minipass-collect" "^1.0.2" + "minipass-fetch" "^2.0.3" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.3" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^7.0.0" + "ssri" "^9.0.0" + +"makeerror@1.0.12": + "integrity" "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==" + "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + "version" "1.0.12" + dependencies: + "tmpl" "1.0.5" + +"map-age-cleaner@^0.1.1": + "integrity" "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==" + "resolved" "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" + "version" "0.1.3" + dependencies: + "p-defer" "^1.0.0" + +"map-obj@^1.0.0": + "integrity" "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" + "resolved" "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + "version" "1.0.1" + +"map-obj@^4.0.0": + "integrity" "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" + "resolved" "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" + "version" "4.3.0" + +"markdown-table@^1.1.3": + "integrity" "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==" + "resolved" "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz" + "version" "1.1.3" + +"match-all@^1.2.6": + "integrity" "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==" + "resolved" "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz" + "version" "1.2.6" + +"mcl-wasm@^0.7.1": + "integrity" "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==" + "resolved" "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz" + "version" "0.7.9" + +"md5.js@^1.3.4": + "integrity" "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==" + "resolved" "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" + "version" "1.3.5" + dependencies: + "hash-base" "^3.0.0" + "inherits" "^2.0.1" + "safe-buffer" "^5.1.2" + +"media-typer@0.3.0": + "integrity" "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + "version" "0.3.0" + +"mem@^4.0.0": + "integrity" "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==" + "resolved" "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "map-age-cleaner" "^0.1.1" + "mimic-fn" "^2.0.0" + "p-is-promise" "^2.0.0" + +"memdown@^1.0.0": + "integrity" "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==" + "resolved" "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "abstract-leveldown" "~2.7.1" + "functional-red-black-tree" "^1.0.1" + "immediate" "^3.2.3" + "inherits" "~2.0.1" + "ltgt" "~2.2.0" + "safe-buffer" "~5.1.1" + +"memory-level@^1.0.0": + "integrity" "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==" + "resolved" "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "abstract-level" "^1.0.0" + "functional-red-black-tree" "^1.0.1" + "module-error" "^1.0.1" + +"memorystream@^0.3.1": + "integrity" "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==" + "resolved" "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" + "version" "0.3.1" + +"meow@^8.0.0": + "integrity" "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==" + "resolved" "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" + "version" "8.1.2" dependencies: "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -merkle-patricia-tree@^4.2.4: - version "4.2.4" - resolved "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz" - integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== - dependencies: - "@types/levelup" "^4.3.0" - ethereumjs-util "^7.1.4" - level-mem "^5.0.1" - level-ws "^2.0.0" - readable-stream "^3.6.0" - semaphore-async-await "^1.5.1" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.0.0, mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" - 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" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@3.0.5, minimatch@^3.0.4: - version "3.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" - integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== - dependencies: - brace-expansion "^1.1.7" - -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + "camelcase-keys" "^6.2.2" + "decamelize-keys" "^1.1.0" + "hard-rejection" "^2.1.0" + "minimist-options" "4.1.0" + "normalize-package-data" "^3.0.0" + "read-pkg-up" "^7.0.1" + "redent" "^3.0.0" + "trim-newlines" "^3.0.0" + "type-fest" "^0.18.0" + "yargs-parser" "^20.2.3" + +"merge-descriptors@1.0.1": + "integrity" "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + "version" "1.0.1" + +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"merge2@^1.2.3", "merge2@^1.3.0", "merge2@^1.4.1": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"merkle-patricia-tree@^2.1.2", "merkle-patricia-tree@^2.3.2": + "integrity" "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==" + "resolved" "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz" + "version" "2.3.2" + dependencies: + "async" "^1.4.2" + "ethereumjs-util" "^5.0.0" + "level-ws" "0.0.0" + "levelup" "^1.2.1" + "memdown" "^1.0.0" + "readable-stream" "^2.0.0" + "rlp" "^2.0.0" + "semaphore" ">=1.0.1" + +"methods@~1.1.2": + "integrity" "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + "version" "1.1.2" + +"micromatch@^4.0.4", "micromatch@^4.0.5": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "braces" "^3.0.2" + "picomatch" "^2.3.1" + +"miller-rabin@^4.0.0": + "integrity" "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==" + "resolved" "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "bn.js" "^4.0.0" + "brorand" "^1.0.1" + +"mime-db@1.52.0": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" + +"mime-types@^2.1.12", "mime-types@^2.1.16", "mime-types@~2.1.19", "mime-types@~2.1.24", "mime-types@~2.1.34": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" + dependencies: + "mime-db" "1.52.0" + +"mime@1.6.0": + "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + "version" "1.6.0" + +"mimic-fn@^2.0.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"mimic-response@^1.0.0", "mimic-response@^1.0.1": + "integrity" "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + "version" "1.0.1" + +"mimic-response@^3.1.0": + "integrity" "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + "version" "3.1.0" + +"min-document@^2.19.0": + "integrity" "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==" + "resolved" "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" + "version" "2.19.0" + dependencies: + "dom-walk" "^0.1.0" + +"min-indent@^1.0.0": + "integrity" "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" + "resolved" "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + "version" "1.0.1" + +"minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1": + "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + "version" "1.0.1" + +"minimalistic-crypto-utils@^1.0.0", "minimalistic-crypto-utils@^1.0.1": + "integrity" "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "resolved" "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + "version" "1.0.1" + +"minimatch@^3.0.4", "minimatch@^3.1.1", "minimatch@^3.1.2", "minimatch@2 || 3": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@^5.0.1": + "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "brace-expansion" "^2.0.1" + +"minimatch@3.0.4": + "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@3.0.5": + "integrity" "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" + "version" "3.0.5" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@4.2.1": + "integrity" "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz" + "version" "4.2.1" dependencies: - brace-expansion "^1.1.7" + "brace-expansion" "^1.1.7" + +"minimatch@5.0.1": + "integrity" "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "brace-expansion" "^2.0.1" + +"minimist-options@4.1.0": + "integrity" "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==" + "resolved" "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "arrify" "^1.0.1" + "is-plain-obj" "^1.1.0" + "kind-of" "^6.0.3" -minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== - dependencies: - brace-expansion "^2.0.1" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" - 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.5, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== +"minimist@^1.2.0", "minimist@^1.2.5", "minimist@^1.2.6": + "integrity" "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + "version" "1.2.6" + +"minipass-collect@^1.0.2": + "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" + "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + "version" "1.0.2" dependencies: - minipass "^3.0.0" + "minipass" "^3.0.0" -minipass-fetch@^2.0.3: - version "2.1.2" - resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" - integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== +"minipass-fetch@^2.0.3": + "integrity" "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==" + "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" + "version" "2.1.2" dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" + "minipass" "^3.1.6" + "minipass-sized" "^1.0.3" + "minizlib" "^2.1.2" optionalDependencies: - encoding "^0.1.13" + "encoding" "^0.1.13" + +"minipass-flush@^1.0.5": + "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" + "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "minipass" "^3.0.0" -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== +"minipass-json-stream@^1.0.1": + "integrity" "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==" + "resolved" "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" + "version" "1.0.1" dependencies: - minipass "^3.0.0" + "jsonparse" "^1.3.1" + "minipass" "^3.0.0" -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== +"minipass-pipeline@^1.2.4": + "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" + "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + "version" "1.2.4" dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" + "minipass" "^3.0.0" -minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== +"minipass-sized@^1.0.3": + "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" + "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + "version" "1.0.3" dependencies: - minipass "^3.0.0" + "minipass" "^3.0.0" -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== +"minipass@^2.6.0", "minipass@^2.9.0": + "integrity" "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" + "version" "2.9.0" dependencies: - minipass "^3.0.0" + "safe-buffer" "^5.1.2" + "yallist" "^3.0.0" -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== +"minipass@^3.0.0", "minipass@^3.1.1", "minipass@^3.1.6": + "integrity" "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + "version" "3.3.4" dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" + "yallist" "^4.0.0" -minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: - version "3.3.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== +"minizlib@^1.3.3": + "integrity" "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" + "version" "1.3.3" dependencies: - yallist "^4.0.0" + "minipass" "^2.9.0" -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== +"minizlib@^2.1.1", "minizlib@^2.1.2": + "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + "version" "2.1.2" dependencies: - minipass "^2.9.0" + "minipass" "^3.0.0" + "yallist" "^4.0.0" -minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== +"mkdirp-infer-owner@^2.0.0": + "integrity" "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==" + "resolved" "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz" + "version" "2.0.0" dependencies: - minipass "^3.0.0" - yallist "^4.0.0" + "chownr" "^2.0.0" + "infer-owner" "^1.0.4" + "mkdirp" "^1.0.3" -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== +"mkdirp-promise@^5.0.1": + "integrity" "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==" + "resolved" "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz" + "version" "5.0.1" dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" + "mkdirp" "*" -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz" - integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== +"mkdirp@*", "mkdirp@^1.0.3", "mkdirp@^1.0.4": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@^0.5.1": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" dependencies: - mkdirp "*" + "minimist" "^1.2.6" -mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +"mkdirp@^0.5.5": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" + dependencies: + "minimist" "^1.2.6" -mkdirp@0.5.5: - version "0.5.5" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +"mkdirp@0.5.5": + "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" + "version" "0.5.5" dependencies: - minimist "^1.2.5" + "minimist" "^1.2.5" -mkdirp@^0.5.1, mkdirp@^0.5.5: - version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== +"mkdirp@0.5.x": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" dependencies: - minimist "^1.2.6" + "minimist" "^1.2.6" -mnemonist@^0.38.0: - version "0.38.5" - resolved "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz" - integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== +"mnemonist@^0.38.0": + "integrity" "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==" + "resolved" "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz" + "version" "0.38.5" dependencies: - obliterator "^2.0.0" + "obliterator" "^2.0.0" -mocha@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz" - integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== +"mocha@^10.0.0": + "integrity" "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==" + "resolved" "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz" + "version" "10.0.0" dependencies: "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -mocha@^7.1.1: - version "7.2.0" - resolved "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz" - integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - -mocha@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz" - integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== + "ansi-colors" "4.1.1" + "browser-stdout" "1.3.1" + "chokidar" "3.5.3" + "debug" "4.3.4" + "diff" "5.0.0" + "escape-string-regexp" "4.0.0" + "find-up" "5.0.0" + "glob" "7.2.0" + "he" "1.2.0" + "js-yaml" "4.1.0" + "log-symbols" "4.1.0" + "minimatch" "5.0.1" + "ms" "2.1.3" + "nanoid" "3.3.3" + "serialize-javascript" "6.0.0" + "strip-json-comments" "3.1.1" + "supports-color" "8.1.1" + "workerpool" "6.2.1" + "yargs" "16.2.0" + "yargs-parser" "20.2.4" + "yargs-unparser" "2.0.0" + +"mocha@^7.1.1": + "integrity" "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==" + "resolved" "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "ansi-colors" "3.2.3" + "browser-stdout" "1.3.1" + "chokidar" "3.3.0" + "debug" "3.2.6" + "diff" "3.5.0" + "escape-string-regexp" "1.0.5" + "find-up" "3.0.0" + "glob" "7.1.3" + "growl" "1.10.5" + "he" "1.2.0" + "js-yaml" "3.13.1" + "log-symbols" "3.0.0" + "minimatch" "3.0.4" + "mkdirp" "0.5.5" + "ms" "2.1.1" + "node-environment-flags" "1.0.6" + "object.assign" "4.1.0" + "strip-json-comments" "2.0.1" + "supports-color" "6.0.0" + "which" "1.3.1" + "wide-align" "1.1.3" + "yargs" "13.3.2" + "yargs-parser" "13.1.2" + "yargs-unparser" "1.6.0" + +"mocha@^9.2.2": + "integrity" "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==" + "resolved" "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz" + "version" "9.2.2" dependencies: "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.3" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - growl "1.10.5" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "4.2.1" - ms "2.1.3" - nanoid "3.3.1" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -mock-fs@^4.1.0: - version "4.14.0" - resolved "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz" - integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2, ms@^2.0.0, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multibase@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz" - integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multibase@~0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz" - integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multicodec@^0.5.5: - version "0.5.7" - resolved "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz" - integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== - dependencies: - varint "^5.0.0" - -multicodec@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz" - integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== - dependencies: - buffer "^5.6.0" - varint "^5.0.0" - -multihashes@^0.4.15, multihashes@~0.4.15: - version "0.4.21" - resolved "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz" - integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== - dependencies: - buffer "^5.5.0" - multibase "^0.7.0" - varint "^5.0.0" - -multimatch@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" - integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== + "ansi-colors" "4.1.1" + "browser-stdout" "1.3.1" + "chokidar" "3.5.3" + "debug" "4.3.3" + "diff" "5.0.0" + "escape-string-regexp" "4.0.0" + "find-up" "5.0.0" + "glob" "7.2.0" + "growl" "1.10.5" + "he" "1.2.0" + "js-yaml" "4.1.0" + "log-symbols" "4.1.0" + "minimatch" "4.2.1" + "ms" "2.1.3" + "nanoid" "3.3.1" + "serialize-javascript" "6.0.0" + "strip-json-comments" "3.1.1" + "supports-color" "8.1.1" + "which" "2.0.2" + "workerpool" "6.2.0" + "yargs" "16.2.0" + "yargs-parser" "20.2.4" + "yargs-unparser" "2.0.0" + +"mock-fs@^4.1.0": + "integrity" "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" + "resolved" "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz" + "version" "4.14.0" + +"modify-values@^1.0.0": + "integrity" "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==" + "resolved" "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" + "version" "1.0.1" + +"module-error@^1.0.1", "module-error@^1.0.2": + "integrity" "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==" + "resolved" "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz" + "version" "1.0.2" + +"ms@^2.0.0", "ms@2.1.3": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" + +"ms@^2.1.1": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" + +"ms@2.0.0": + "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "version" "2.0.0" + +"ms@2.1.1": + "integrity" "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" + "version" "2.1.1" + +"ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"multibase@^0.7.0": + "integrity" "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==" + "resolved" "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz" + "version" "0.7.0" + dependencies: + "base-x" "^3.0.8" + "buffer" "^5.5.0" + +"multibase@~0.6.0": + "integrity" "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==" + "resolved" "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz" + "version" "0.6.1" + dependencies: + "base-x" "^3.0.8" + "buffer" "^5.5.0" + +"multicodec@^0.5.5": + "integrity" "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==" + "resolved" "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz" + "version" "0.5.7" + dependencies: + "varint" "^5.0.0" + +"multicodec@^1.0.0": + "integrity" "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==" + "resolved" "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "buffer" "^5.6.0" + "varint" "^5.0.0" + +"multihashes@^0.4.15", "multihashes@~0.4.15": + "integrity" "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==" + "resolved" "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz" + "version" "0.4.21" + dependencies: + "buffer" "^5.5.0" + "multibase" "^0.7.0" + "varint" "^5.0.0" + +"multimatch@^5.0.0": + "integrity" "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==" + "resolved" "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" + "version" "5.0.0" dependencies: "@types/minimatch" "^3.0.3" - array-differ "^3.0.0" - array-union "^2.1.0" - arrify "^2.0.1" - minimatch "^3.0.4" - -murmur-128@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz" - integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== - dependencies: - encode-utf8 "^1.0.2" - fmix "^0.1.0" - imul "^1.0.0" - -mute-stream@0.0.8, mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nano-json-stream-parser@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz" - integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== - -nanoid@3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== - -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3, negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.0: - version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -nock@^13.2.9: - version "13.2.9" - resolved "https://registry.npmjs.org/nock/-/nock-13.2.9.tgz" - integrity sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA== - dependencies: - debug "^4.1.0" - json-stringify-safe "^5.0.1" - lodash "^4.17.21" - propagate "^2.0.0" - -node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - -node-addon-api@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== - -node-environment-flags@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz" - integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== - -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== - -node-gyp@^9.0.0, node-gyp@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz" - integrity sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== - -nofilter@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz" - integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - 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-package-data@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" - integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== - dependencies: - hosted-git-info "^5.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -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" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-bundled@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-bundled@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" - integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== - dependencies: - npm-normalize-package-bin "^2.0.0" - -npm-install-checks@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" - integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-normalize-package-bin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" - integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== - -npm-package-arg@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" - integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== - dependencies: - hosted-git-info "^3.0.6" - semver "^7.0.0" - validate-npm-package-name "^3.0.0" - -npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: - version "9.1.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz#fc8acecb00235f42270dda446f36926ddd9ac2bc" - integrity sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg== - dependencies: - hosted-git-info "^5.0.0" - proc-log "^2.0.1" - semver "^7.3.5" - validate-npm-package-name "^4.0.0" - -npm-packlist@^5.1.0, npm-packlist@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" - integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== - dependencies: - glob "^8.0.1" - ignore-walk "^5.0.1" - npm-bundled "^2.0.0" - npm-normalize-package-bin "^2.0.0" - -npm-pick-manifest@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz#1d372b4e7ea7c6712316c0e99388a73ed3496e84" - integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== - dependencies: - npm-install-checks "^5.0.0" - npm-normalize-package-bin "^2.0.0" - npm-package-arg "^9.0.0" - semver "^7.3.5" - -npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.0: - version "13.3.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" - integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== - dependencies: - make-fetch-happen "^10.0.6" - minipass "^3.1.6" - minipass-fetch "^2.0.3" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^9.0.1" - proc-log "^2.0.0" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^6.0.0, npmlog@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.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" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - -nx@14.8.2, "nx@>=14.6.1 < 16", nx@^14.8.2: - version "14.8.2" - resolved "https://registry.yarnpkg.com/nx/-/nx-14.8.2.tgz#b285a09368418c4c0fa55c2d5ee411fe1fd3706b" - integrity sha512-pPijBoeybsIlCD8FMH8WTns+pcIL+0ZOh/+otUX2LfVsi+ppH33GUxO9QVLPrLcyGaoHhwil4hYBxPIQ7Z1r2g== - dependencies: - "@nrwl/cli" "14.8.2" - "@nrwl/tao" "14.8.2" + "array-differ" "^3.0.0" + "array-union" "^2.1.0" + "arrify" "^2.0.1" + "minimatch" "^3.0.4" + +"murmur-128@^0.2.1": + "integrity" "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==" + "resolved" "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz" + "version" "0.2.1" + dependencies: + "encode-utf8" "^1.0.2" + "fmix" "^0.1.0" + "imul" "^1.0.0" + +"mute-stream@~0.0.4", "mute-stream@0.0.8": + "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + "version" "0.0.8" + +"nano-json-stream-parser@^0.1.2": + "integrity" "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" + "resolved" "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz" + "version" "0.1.2" + +"nanoid@3.3.1": + "integrity" "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" + "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" + "version" "3.3.1" + +"nanoid@3.3.3": + "integrity" "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" + "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" + "version" "3.3.3" + +"napi-macros@~2.0.0": + "integrity" "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" + "resolved" "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz" + "version" "2.0.0" + +"natural-compare@^1.4.0": + "integrity" "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"negotiator@^0.6.3", "negotiator@0.6.3": + "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + "version" "0.6.3" + +"neo-async@^2.6.0": + "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + "version" "2.6.2" + +"next-tick@^1.1.0": + "integrity" "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + "resolved" "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" + "version" "1.1.0" + +"nice-try@^1.0.4": + "integrity" "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "resolved" "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + "version" "1.0.5" + +"nock@^13.2.9": + "integrity" "sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA==" + "resolved" "https://registry.npmjs.org/nock/-/nock-13.2.9.tgz" + "version" "13.2.9" + dependencies: + "debug" "^4.1.0" + "json-stringify-safe" "^5.0.1" + "lodash" "^4.17.21" + "propagate" "^2.0.0" + +"node-addon-api@^2.0.0": + "integrity" "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" + "version" "2.0.2" + +"node-addon-api@^3.2.1": + "integrity" "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" + "version" "3.2.1" + +"node-emoji@^1.10.0": + "integrity" "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==" + "resolved" "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" + "version" "1.11.0" + dependencies: + "lodash" "^4.17.21" + +"node-environment-flags@1.0.6": + "integrity" "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==" + "resolved" "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "object.getownpropertydescriptors" "^2.0.3" + "semver" "^5.7.0" + +"node-fetch@^2.6.0", "node-fetch@^2.6.1", "node-fetch@^2.6.6", "node-fetch@^2.6.7", "node-fetch@2.6.7": + "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + "version" "2.6.7" + dependencies: + "whatwg-url" "^5.0.0" + +"node-gyp-build@^4.2.0", "node-gyp-build@^4.3.0": + "integrity" "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" + "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz" + "version" "4.5.0" + +"node-gyp-build@4.4.0": + "integrity" "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" + "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz" + "version" "4.4.0" + +"node-gyp@^9.0.0", "node-gyp@^9.1.0": + "integrity" "sha512-/+/YxGfIJOh/fnMsr4Ep0v6oOIjnO1BgLd2dcDspBX1spTkQU7xSIox5RdRE/2/Uq3ZwK8Z5swRIbMUmPlslmg==" + "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-9.2.0.tgz" + "version" "9.2.0" + dependencies: + "env-paths" "^2.2.0" + "glob" "^7.1.4" + "graceful-fs" "^4.2.6" + "make-fetch-happen" "^10.0.3" + "nopt" "^6.0.0" + "npmlog" "^6.0.0" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.2" + "which" "^2.0.2" + +"node-int64@^0.4.0": + "integrity" "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + "version" "0.4.0" + +"node-releases@^2.0.6": + "integrity" "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" + "version" "2.0.6" + +"nofilter@^1.0.4": + "integrity" "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==" + "resolved" "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz" + "version" "1.0.4" + +"nopt@^5.0.0": + "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "abbrev" "1" + +"nopt@^6.0.0": + "integrity" "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "abbrev" "^1.0.0" + +"nopt@3.x": + "integrity" "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" + "version" "3.0.6" + dependencies: + "abbrev" "1" + +"normalize-package-data@^2.3.2": + "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "hosted-git-info" "^2.1.4" + "resolve" "^1.10.0" + "semver" "2 || 3 || 4 || 5" + "validate-npm-package-license" "^3.0.1" + +"normalize-package-data@^2.5.0": + "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "hosted-git-info" "^2.1.4" + "resolve" "^1.10.0" + "semver" "2 || 3 || 4 || 5" + "validate-npm-package-license" "^3.0.1" + +"normalize-package-data@^3.0.0": + "integrity" "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "hosted-git-info" "^4.0.1" + "is-core-module" "^2.5.0" + "semver" "^7.3.4" + "validate-npm-package-license" "^3.0.1" + +"normalize-package-data@^4.0.0": + "integrity" "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "hosted-git-info" "^5.0.0" + "is-core-module" "^2.8.1" + "semver" "^7.3.5" + "validate-npm-package-license" "^3.0.4" + +"normalize-path@^3.0.0", "normalize-path@~3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"normalize-url@^4.1.0": + "integrity" "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" + "version" "4.5.1" + +"normalize-url@^6.0.1": + "integrity" "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + "version" "6.1.0" + +"npm-bundled@^1.1.1": + "integrity" "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==" + "resolved" "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "npm-normalize-package-bin" "^1.0.1" + +"npm-bundled@^2.0.0": + "integrity" "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==" + "resolved" "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "npm-normalize-package-bin" "^2.0.0" + +"npm-install-checks@^5.0.0": + "integrity" "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==" + "resolved" "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "semver" "^7.1.1" + +"npm-normalize-package-bin@^1.0.1": + "integrity" "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + "resolved" "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" + "version" "1.0.1" + +"npm-normalize-package-bin@^2.0.0": + "integrity" "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==" + "resolved" "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz" + "version" "2.0.0" + +"npm-package-arg@^9.0.0": + "integrity" "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==" + "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz" + "version" "9.1.2" + dependencies: + "hosted-git-info" "^5.0.0" + "proc-log" "^2.0.1" + "semver" "^7.3.5" + "validate-npm-package-name" "^4.0.0" + +"npm-package-arg@^9.0.1": + "integrity" "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==" + "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz" + "version" "9.1.2" + dependencies: + "hosted-git-info" "^5.0.0" + "proc-log" "^2.0.1" + "semver" "^7.3.5" + "validate-npm-package-name" "^4.0.0" + +"npm-package-arg@8.1.1": + "integrity" "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==" + "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "hosted-git-info" "^3.0.6" + "semver" "^7.0.0" + "validate-npm-package-name" "^3.0.0" + +"npm-packlist@^5.1.0", "npm-packlist@^5.1.1": + "integrity" "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==" + "resolved" "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz" + "version" "5.1.3" + dependencies: + "glob" "^8.0.1" + "ignore-walk" "^5.0.1" + "npm-bundled" "^2.0.0" + "npm-normalize-package-bin" "^2.0.0" + +"npm-pick-manifest@^7.0.0": + "integrity" "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==" + "resolved" "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz" + "version" "7.0.2" + dependencies: + "npm-install-checks" "^5.0.0" + "npm-normalize-package-bin" "^2.0.0" + "npm-package-arg" "^9.0.0" + "semver" "^7.3.5" + +"npm-registry-fetch@^13.0.0", "npm-registry-fetch@^13.0.1", "npm-registry-fetch@^13.3.0": + "integrity" "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==" + "resolved" "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz" + "version" "13.3.1" + dependencies: + "make-fetch-happen" "^10.0.6" + "minipass" "^3.1.6" + "minipass-fetch" "^2.0.3" + "minipass-json-stream" "^1.0.1" + "minizlib" "^2.1.2" + "npm-package-arg" "^9.0.1" + "proc-log" "^2.0.0" + +"npm-run-path@^2.0.0": + "integrity" "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "path-key" "^2.0.0" + +"npm-run-path@^4.0.1": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "path-key" "^3.0.0" + +"npmlog@^6.0.0", "npmlog@^6.0.2": + "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "are-we-there-yet" "^3.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^4.0.3" + "set-blocking" "^2.0.0" + +"number-to-bn@1.7.0": + "integrity" "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==" + "resolved" "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "bn.js" "4.11.6" + "strip-hex-prefix" "1.0.0" + +"nx@^14.8.3", "nx@>=14.6.1 < 16", "nx@14.8.3": + "integrity" "sha512-6aMYrzlTqE77vHbaE1teI5P1A2oYkJGkuDMIo/zegRwUxCAjRzLAluUgPrmgqhuPTyTDn8p4aDfxAWV3Q0o/2Q==" + "resolved" "https://registry.npmjs.org/nx/-/nx-14.8.3.tgz" + "version" "14.8.3" + dependencies: + "@nrwl/cli" "14.8.3" + "@nrwl/tao" "14.8.3" "@parcel/watcher" "2.0.4" "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "^3.0.0-rc.18" "@zkochan/js-yaml" "0.0.6" - chalk "4.1.0" - chokidar "^3.5.1" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - cliui "^7.0.2" - dotenv "~10.0.0" - enquirer "~2.3.6" - fast-glob "3.2.7" - figures "3.2.0" - flat "^5.0.2" - fs-extra "^10.1.0" - glob "7.1.4" - ignore "^5.0.4" - js-yaml "4.1.0" - jsonc-parser "3.2.0" - minimatch "3.0.5" - npm-run-path "^4.0.1" - open "^8.4.0" - semver "7.3.4" - string-width "^4.2.3" - strong-log-transformer "^2.1.0" - tar-stream "~2.2.0" - tmp "~0.2.1" - tsconfig-paths "^3.9.0" - tslib "^2.3.0" - v8-compile-cache "2.3.0" - yargs "^17.4.0" - yargs-parser "21.0.1" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-keys@^1.0.11, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" - 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.getownpropertydescriptors@^2.0.3: - version "2.1.4" - resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz" - integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== - dependencies: - array.prototype.reduce "^1.0.4" - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.1" - -obliterator@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" - integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== - -oboe@2.1.5: - version "2.1.5" - resolved "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz" - integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== - dependencies: - http-https "^1.0.0" - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.4.0: - version "8.4.0" - resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" - integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - 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" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map-series@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz" - integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + "axios" "0.21.1" + "chalk" "4.1.0" + "chokidar" "^3.5.1" + "cli-cursor" "3.1.0" + "cli-spinners" "2.6.1" + "cliui" "^7.0.2" + "dotenv" "~10.0.0" + "enquirer" "~2.3.6" + "fast-glob" "3.2.7" + "figures" "3.2.0" + "flat" "^5.0.2" + "fs-extra" "^10.1.0" + "glob" "7.1.4" + "ignore" "^5.0.4" + "js-yaml" "4.1.0" + "jsonc-parser" "3.2.0" + "minimatch" "3.0.5" + "npm-run-path" "^4.0.1" + "open" "^8.4.0" + "semver" "7.3.4" + "string-width" "^4.2.3" + "strong-log-transformer" "^2.1.0" + "tar-stream" "~2.2.0" + "tmp" "~0.2.1" + "tsconfig-paths" "^3.9.0" + "tslib" "^2.3.0" + "v8-compile-cache" "2.3.0" + "yargs" "^17.4.0" + "yargs-parser" "21.0.1" + +"oauth-sign@~0.9.0": + "integrity" "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "resolved" "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" + "version" "0.9.0" + +"object-assign@^4", "object-assign@^4.1.0", "object-assign@^4.1.1": + "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"object-inspect@^1.12.2", "object-inspect@^1.9.0": + "integrity" "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + "version" "1.12.2" + +"object-keys@^1.0.11", "object-keys@^1.1.1": + "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + "version" "1.1.1" + +"object-keys@~0.4.0": + "integrity" "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" + "version" "0.4.0" + +"object.assign@^4.1.4": + "integrity" "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + "version" "4.1.4" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "has-symbols" "^1.0.3" + "object-keys" "^1.1.1" + +"object.assign@4.1.0": + "integrity" "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "define-properties" "^1.1.2" + "function-bind" "^1.1.1" + "has-symbols" "^1.0.0" + "object-keys" "^1.0.11" + +"object.getownpropertydescriptors@^2.0.3": + "integrity" "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==" + "resolved" "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz" + "version" "2.1.4" + dependencies: + "array.prototype.reduce" "^1.0.4" + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.20.1" + +"obliterator@^2.0.0": + "integrity" "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" + "resolved" "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" + "version" "2.0.4" + +"oboe@2.1.5": + "integrity" "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==" + "resolved" "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz" + "version" "2.1.5" + dependencies: + "http-https" "^1.0.0" + +"on-finished@2.4.1": + "integrity" "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==" + "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + "version" "2.4.1" + dependencies: + "ee-first" "1.1.1" + +"once@^1.3.0", "once@^1.3.1", "once@^1.4.0", "once@1.x": + "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"onetime@^5.1.0", "onetime@^5.1.2": + "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "mimic-fn" "^2.1.0" + +"open@^8.4.0": + "integrity" "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==" + "resolved" "https://registry.npmjs.org/open/-/open-8.4.0.tgz" + "version" "8.4.0" + dependencies: + "define-lazy-prop" "^2.0.0" + "is-docker" "^2.1.1" + "is-wsl" "^2.2.0" + +"optionator@^0.8.1": + "integrity" "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + "version" "0.8.3" + dependencies: + "deep-is" "~0.1.3" + "fast-levenshtein" "~2.0.6" + "levn" "~0.3.0" + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" + "word-wrap" "~1.2.3" + +"optionator@^0.9.1": + "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + "version" "0.9.1" + dependencies: + "deep-is" "^0.1.3" + "fast-levenshtein" "^2.0.6" + "levn" "^0.4.1" + "prelude-ls" "^1.2.1" + "type-check" "^0.4.0" + "word-wrap" "^1.2.3" + +"ora@^5.4.1": + "integrity" "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==" + "resolved" "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + "version" "5.4.1" + dependencies: + "bl" "^4.1.0" + "chalk" "^4.1.0" + "cli-cursor" "^3.1.0" + "cli-spinners" "^2.5.0" + "is-interactive" "^1.0.0" + "is-unicode-supported" "^0.1.0" + "log-symbols" "^4.1.0" + "strip-ansi" "^6.0.0" + "wcwidth" "^1.0.1" + +"ordinal@^1.0.3": + "integrity" "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==" + "resolved" "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz" + "version" "1.0.3" + +"os-locale@^3.1.0": + "integrity" "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==" + "resolved" "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "execa" "^1.0.0" + "lcid" "^2.0.0" + "mem" "^4.0.0" + +"os-tmpdir@~1.0.2": + "integrity" "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "version" "1.0.2" + +"p-cancelable@^1.0.0": + "integrity" "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" + "version" "1.1.0" + +"p-cancelable@^2.0.0": + "integrity" "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" + "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" + "version" "2.1.1" + +"p-cancelable@^3.0.0": + "integrity" "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==" + "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" + "version" "3.0.0" + +"p-defer@^1.0.0": + "integrity" "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==" + "resolved" "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" + "version" "1.0.0" + +"p-finally@^1.0.0": + "integrity" "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" + "resolved" "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + "version" "1.0.0" + +"p-is-promise@^2.0.0": + "integrity" "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + "resolved" "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz" + "version" "2.1.0" + +"p-limit@^1.1.0": + "integrity" "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "p-try" "^1.0.0" + +"p-limit@^2.0.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "p-try" "^2.0.0" + +"p-limit@^2.2.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "p-try" "^2.0.0" + +"p-limit@^3.0.2", "p-limit@^3.1.0": + "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "yocto-queue" "^0.1.0" + +"p-locate@^2.0.0": + "integrity" "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "p-limit" "^1.1.0" + +"p-locate@^3.0.0": + "integrity" "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "p-limit" "^2.0.0" + +"p-locate@^4.1.0": + "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "p-limit" "^2.2.0" + +"p-locate@^5.0.0": + "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-limit" "^3.0.2" + +"p-map-series@^2.1.0": + "integrity" "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==" + "resolved" "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz" + "version" "2.1.0" + +"p-map@^4.0.0": + "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + "version" "4.0.0" dependencies: - aggregate-error "^3.0.0" + "aggregate-error" "^3.0.0" -p-pipe@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz" - integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== +"p-pipe@^3.1.0": + "integrity" "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==" + "resolved" "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz" + "version" "3.1.0" -p-queue@^6.6.2: - version "6.6.2" - resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" - integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== +"p-queue@^6.6.2": + "integrity" "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==" + "resolved" "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" + "version" "6.6.2" dependencies: - eventemitter3 "^4.0.4" - p-timeout "^3.2.0" + "eventemitter3" "^4.0.4" + "p-timeout" "^3.2.0" -p-reduce@^2.0.0, p-reduce@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== +"p-reduce@^2.0.0", "p-reduce@^2.1.0": + "integrity" "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==" + "resolved" "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" + "version" "2.1.0" -p-timeout@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== +"p-timeout@^3.2.0": + "integrity" "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==" + "resolved" "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" + "version" "3.2.0" dependencies: - p-finally "^1.0.0" + "p-finally" "^1.0.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== +"p-try@^1.0.0": + "integrity" "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + "version" "1.0.0" -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +"p-try@^2.0.0": + "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + "version" "2.2.0" -p-waterfall@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz" - integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== +"p-waterfall@^2.1.1": + "integrity" "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==" + "resolved" "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz" + "version" "2.1.1" dependencies: - p-reduce "^2.0.0" + "p-reduce" "^2.0.0" -pacote@^13.0.3, pacote@^13.6.1: - version "13.6.2" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" - integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== +"pacote@^13.0.3", "pacote@^13.6.1": + "integrity" "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==" + "resolved" "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz" + "version" "13.6.2" dependencies: "@npmcli/git" "^3.0.0" "@npmcli/installed-package-contents" "^1.0.7" "@npmcli/promise-spawn" "^3.0.0" "@npmcli/run-script" "^4.1.0" - cacache "^16.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.6" - mkdirp "^1.0.4" - npm-package-arg "^9.0.0" - npm-packlist "^5.1.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" - promise-retry "^2.0.1" - read-package-json "^5.0.0" - read-package-json-fast "^2.0.3" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-cache-control@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz" - integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== - -parse-conflict-json@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" - integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== - dependencies: - json-parse-even-better-errors "^2.3.1" - just-diff "^5.0.1" - just-diff-apply "^5.2.0" - -parse-headers@^2.0.0: - version "2.0.5" - resolved "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz" - integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0, parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + "cacache" "^16.0.0" + "chownr" "^2.0.0" + "fs-minipass" "^2.1.0" + "infer-owner" "^1.0.4" + "minipass" "^3.1.6" + "mkdirp" "^1.0.4" + "npm-package-arg" "^9.0.0" + "npm-packlist" "^5.1.0" + "npm-pick-manifest" "^7.0.0" + "npm-registry-fetch" "^13.0.1" + "proc-log" "^2.0.0" + "promise-retry" "^2.0.1" + "read-package-json" "^5.0.0" + "read-package-json-fast" "^2.0.3" + "rimraf" "^3.0.2" + "ssri" "^9.0.0" + "tar" "^6.1.11" + +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"parse-asn1@^5.0.0", "parse-asn1@^5.1.5": + "integrity" "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==" + "resolved" "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" + "version" "5.1.6" + dependencies: + "asn1.js" "^5.2.0" + "browserify-aes" "^1.0.0" + "evp_bytestokey" "^1.0.0" + "pbkdf2" "^3.0.3" + "safe-buffer" "^5.1.1" + +"parse-cache-control@^1.0.1": + "integrity" "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" + "resolved" "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz" + "version" "1.0.1" + +"parse-conflict-json@^2.0.1": + "integrity" "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==" + "resolved" "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "json-parse-even-better-errors" "^2.3.1" + "just-diff" "^5.0.1" + "just-diff-apply" "^5.2.0" + +"parse-headers@^2.0.0": + "integrity" "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + "resolved" "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz" + "version" "2.0.5" + +"parse-json@^4.0.0": + "integrity" "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "error-ex" "^1.3.1" + "json-parse-better-errors" "^1.0.1" + +"parse-json@^5.0.0", "parse-json@^5.2.0": + "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + "version" "5.2.0" 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" - -parse-path@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" - integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== - dependencies: - protocols "^2.0.0" - -parse-url@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" - integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== - dependencies: - parse-path "^7.0.0" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -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" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -pbkdf2@^3.0.17, pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz" - integrity sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pify@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - -pirates@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@2.7.1, prettier@^2.1.2, prettier@^2.6.2: - version "2.7.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== - -pretty-format@^28.0.0, pretty-format@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" - integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + "error-ex" "^1.3.1" + "json-parse-even-better-errors" "^2.3.0" + "lines-and-columns" "^1.1.6" + +"parse-path@^7.0.0": + "integrity" "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==" + "resolved" "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "protocols" "^2.0.0" + +"parse-url@^8.1.0": + "integrity" "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==" + "resolved" "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "parse-path" "^7.0.0" + +"parseurl@~1.3.3": + "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + "version" "1.3.3" + +"path-exists@^3.0.0": + "integrity" "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + "version" "3.0.0" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-key@^2.0.0", "path-key@^2.0.1": + "integrity" "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + "version" "2.0.1" + +"path-key@^3.0.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-parse@^1.0.6", "path-parse@^1.0.7": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" + +"path-to-regexp@0.1.7": + "integrity" "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + "version" "0.1.7" + +"path-type@^3.0.0": + "integrity" "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "pify" "^3.0.0" + +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"pathval@^1.1.1": + "integrity" "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" + "resolved" "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" + "version" "1.1.1" + +"pbkdf2@^3.0.17", "pbkdf2@^3.0.3": + "integrity" "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==" + "resolved" "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "create-hash" "^1.1.2" + "create-hmac" "^1.1.4" + "ripemd160" "^2.0.1" + "safe-buffer" "^5.0.1" + "sha.js" "^2.4.8" + +"performance-now@^2.1.0": + "integrity" "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "resolved" "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + "version" "2.1.0" + +"picocolors@^1.0.0": + "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + "version" "1.0.0" + +"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3", "picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" + +"pidtree@^0.5.0": + "integrity" "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==" + "resolved" "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz" + "version" "0.5.0" + +"pify@^2.3.0": + "integrity" "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + "version" "2.3.0" + +"pify@^3.0.0": + "integrity" "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + "version" "3.0.0" + +"pify@^4.0.1": + "integrity" "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "resolved" "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + "version" "4.0.1" + +"pify@^5.0.0": + "integrity" "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" + "resolved" "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" + "version" "5.0.0" + +"pirates@^4.0.4": + "integrity" "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" + "resolved" "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" + "version" "4.0.5" + +"pkg-dir@^4.2.0": + "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "find-up" "^4.0.0" + +"precond@0.2": + "integrity" "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==" + "resolved" "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz" + "version" "0.2.3" + +"prelude-ls@^1.2.1": + "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + "version" "1.2.1" + +"prelude-ls@~1.1.2": + "integrity" "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + "version" "1.1.2" + +"prepend-http@^2.0.0": + "integrity" "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" + "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" + "version" "2.0.0" + +"prettier-linter-helpers@^1.0.0": + "integrity" "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==" + "resolved" "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "fast-diff" "^1.1.2" + +"prettier@^2.1.2", "prettier@^2.6.2", "prettier@>=2.0.0", "prettier@2.7.1": + "integrity" "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" + "version" "2.7.1" + +"pretty-format@^28.0.0", "pretty-format@^28.1.3": + "integrity" "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/schemas" "^28.1.3" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -proc-log@^2.0.0, proc-log@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" - integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" - integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -promise@^8.0.0: - version "8.2.0" - resolved "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz" - integrity sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg== - dependencies: - asap "~2.0.6" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz" - integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== - dependencies: - read "1" - -propagate@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz" - integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -protocols@^2.0.0, protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - -psl@^1.1.28: - version "1.9.0" - resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" - integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.5.1: - version "1.5.1" - resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - -qs@6.10.3: - version "6.10.3" - resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" - -qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: - version "6.11.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -queue-microtask@^1.2.2, queue-microtask@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1, raw-body@^2.4.1: - version "2.5.1" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -read-cmd-shim@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" - integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== - -read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json@^5.0.0, read-package-json@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" - integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== - dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^2.3.1" - normalize-package-data "^4.0.0" - npm-normalize-package-bin "^2.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" - integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + "ansi-regex" "^5.0.1" + "ansi-styles" "^5.0.0" + "react-is" "^18.0.0" + +"proc-log@^2.0.0", "proc-log@^2.0.1": + "integrity" "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==" + "resolved" "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz" + "version" "2.0.1" + +"process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" + +"process@^0.11.10": + "integrity" "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + "version" "0.11.10" + +"promise-all-reject-late@^1.0.0": + "integrity" "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==" + "resolved" "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz" + "version" "1.0.1" + +"promise-call-limit@^1.0.1": + "integrity" "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==" + "resolved" "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz" + "version" "1.0.1" + +"promise-inflight@^1.0.1": + "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + "version" "1.0.1" + +"promise-retry@^2.0.1": + "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" + "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "err-code" "^2.0.2" + "retry" "^0.12.0" + +"promise-to-callback@^1.0.0": + "integrity" "sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==" + "resolved" "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-fn" "^1.0.0" + "set-immediate-shim" "^1.0.1" + +"promise@^8.0.0": + "integrity" "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==" + "resolved" "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz" + "version" "8.2.0" + dependencies: + "asap" "~2.0.6" + +"prompts@^2.0.1": + "integrity" "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==" + "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "kleur" "^3.0.3" + "sisteransi" "^1.0.5" + +"promzard@^0.3.0": + "integrity" "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==" + "resolved" "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "read" "1" + +"propagate@^2.0.0": + "integrity" "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" + "resolved" "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz" + "version" "2.0.1" + +"proto-list@~1.2.1": + "integrity" "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + "resolved" "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + "version" "1.2.4" + +"protocols@^2.0.0", "protocols@^2.0.1": + "integrity" "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==" + "resolved" "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz" + "version" "2.0.1" + +"proxy-addr@~2.0.7": + "integrity" "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==" + "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + "version" "2.0.7" + dependencies: + "forwarded" "0.2.0" + "ipaddr.js" "1.9.1" + +"prr@~1.0.1": + "integrity" "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + "resolved" "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + "version" "1.0.1" + +"psl@^1.1.28": + "integrity" "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "resolved" "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" + "version" "1.9.0" + +"public-encrypt@^4.0.0": + "integrity" "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==" + "resolved" "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "bn.js" "^4.1.0" + "browserify-rsa" "^4.0.0" + "create-hash" "^1.1.0" + "parse-asn1" "^5.0.0" + "randombytes" "^2.0.1" + "safe-buffer" "^5.1.2" + +"pump@^3.0.0": + "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" + "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.1" + +"punycode@^2.1.0", "punycode@^2.1.1": + "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + "version" "2.1.1" + +"punycode@2.1.0": + "integrity" "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" + "version" "2.1.0" + +"q@^1.5.1": + "integrity" "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + "resolved" "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + "version" "1.5.1" + +"qs@^6.4.0", "qs@^6.7.0", "qs@^6.9.4": + "integrity" "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" + "version" "6.11.0" + dependencies: + "side-channel" "^1.0.4" + +"qs@~6.5.2": + "integrity" "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" + "version" "6.5.3" + +"qs@6.10.3": + "integrity" "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" + "version" "6.10.3" + dependencies: + "side-channel" "^1.0.4" + +"query-string@^5.0.1": + "integrity" "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==" + "resolved" "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "decode-uri-component" "^0.2.0" + "object-assign" "^4.1.0" + "strict-uri-encode" "^1.0.0" + +"queue-microtask@^1.2.2", "queue-microtask@^1.2.3": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"queue-tick@^1.0.0": + "version" "1.0.0" + +"quick-lru@^4.0.1": + "integrity" "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" + "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" + "version" "4.0.1" + +"quick-lru@^5.1.1": + "integrity" "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + "version" "5.1.1" + +"randombytes@^2.0.0", "randombytes@^2.0.1", "randombytes@^2.0.5", "randombytes@^2.1.0": + "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" + "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "safe-buffer" "^5.1.0" + +"randomfill@^1.0.3": + "integrity" "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==" + "resolved" "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "randombytes" "^2.0.5" + "safe-buffer" "^5.1.0" + +"range-parser@~1.2.1": + "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + "version" "1.2.1" + +"raw-body@^2.4.1", "raw-body@2.5.1": + "integrity" "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==" + "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + "version" "2.5.1" + dependencies: + "bytes" "3.1.2" + "http-errors" "2.0.0" + "iconv-lite" "0.4.24" + "unpipe" "1.0.0" + +"react-is@^18.0.0": + "integrity" "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + "version" "18.2.0" + +"read-cmd-shim@^3.0.0": + "integrity" "sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==" + "resolved" "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz" + "version" "3.0.1" + +"read-package-json-fast@^2.0.2", "read-package-json-fast@^2.0.3": + "integrity" "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==" + "resolved" "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "json-parse-even-better-errors" "^2.3.0" + "npm-normalize-package-bin" "^1.0.1" + +"read-package-json@^5.0.0", "read-package-json@^5.0.1": + "integrity" "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==" + "resolved" "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz" + "version" "5.0.2" + dependencies: + "glob" "^8.0.1" + "json-parse-even-better-errors" "^2.3.1" + "normalize-package-data" "^4.0.0" + "npm-normalize-package-bin" "^2.0.0" + +"read-pkg-up@^3.0.0": + "integrity" "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==" + "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "find-up" "^2.0.0" + "read-pkg" "^3.0.0" + +"read-pkg-up@^7.0.1": + "integrity" "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==" + "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "find-up" "^4.1.0" + "read-pkg" "^5.2.0" + "type-fest" "^0.8.1" + +"read-pkg@^3.0.0": + "integrity" "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==" + "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "load-json-file" "^4.0.0" + "normalize-package-data" "^2.3.2" + "path-type" "^3.0.0" + +"read-pkg@^5.2.0": + "integrity" "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==" + "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" + "version" "5.2.0" 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@1, read@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz" - integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== - dependencies: - mute-stream "~0.0.4" - -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^2.2.2, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== - dependencies: - picomatch "^2.0.4" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -reduce-flatten@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz" - integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== - -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -req-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz" - integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== - dependencies: - req-from "^2.0.0" - -req-from@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz" - integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== - dependencies: - resolve-from "^3.0.0" - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.5: - version "1.0.9" - resolved "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.79.0, request@^2.88.0: - version "2.88.2" - resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -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" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: - version "1.2.1" - resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" - integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - 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" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== - -resolve@1.17.0, resolve@^1.10.0, resolve@^1.8.1: - version "1.17.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.20.0: - version "1.22.1" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" - 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" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - 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" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rlp@^2.2.3, rlp@^2.2.4: - version "2.2.7" - resolved "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - -rxjs@^7.0.0, rxjs@^7.5.5: - version "7.5.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz" - integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA== - dependencies: - tslib "^2.1.0" - -safe-buffer@5.2.1, 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.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" - 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", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scrypt-js@2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz" - integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== - -scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + "normalize-package-data" "^2.5.0" + "parse-json" "^5.0.0" + "type-fest" "^0.6.0" + +"read@^1.0.7", "read@1": + "integrity" "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==" + "resolved" "https://registry.npmjs.org/read/-/read-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "mute-stream" "~0.0.4" + +"readable-stream@^1.0.33": + "integrity" "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + "version" "1.1.14" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "0.0.1" + "string_decoder" "~0.10.x" + +"readable-stream@^2.0.0": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^2.2.2": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^2.2.9": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^3.0.0", "readable-stream@^3.0.2", "readable-stream@^3.1.1", "readable-stream@^3.4.0", "readable-stream@^3.6.0", "readable-stream@3": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readable-stream@~1.0.15": + "integrity" "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" + "version" "1.0.34" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "0.0.1" + "string_decoder" "~0.10.x" + +"readable-stream@~2.3.6": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readdir-scoped-modules@^1.1.0": + "integrity" "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==" + "resolved" "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "debuglog" "^1.0.1" + "dezalgo" "^1.0.0" + "graceful-fs" "^4.1.2" + "once" "^1.3.0" + +"readdirp@~3.2.0": + "integrity" "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "picomatch" "^2.0.4" + +"readdirp@~3.6.0": + "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "picomatch" "^2.2.1" + +"rechoir@^0.6.2": + "integrity" "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==" + "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + "version" "0.6.2" + dependencies: + "resolve" "^1.1.6" + +"recursive-readdir@^2.2.2": + "integrity" "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==" + "resolved" "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz" + "version" "2.2.2" + dependencies: + "minimatch" "3.0.4" + +"redent@^3.0.0": + "integrity" "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==" + "resolved" "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "indent-string" "^4.0.0" + "strip-indent" "^3.0.0" + +"reduce-flatten@^2.0.0": + "integrity" "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==" + "resolved" "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz" + "version" "2.0.0" + +"regenerator-runtime@^0.13.4": + "integrity" "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" + "version" "0.13.9" + +"regexp.prototype.flags@^1.4.3": + "integrity" "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==" + "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" + "version" "1.4.3" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "functions-have-names" "^1.2.2" + +"regexpp@^3.2.0": + "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + "version" "3.2.0" + +"req-cwd@^2.0.0": + "integrity" "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==" + "resolved" "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "req-from" "^2.0.0" + +"req-from@^2.0.0": + "integrity" "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==" + "resolved" "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "resolve-from" "^3.0.0" + +"request-promise-core@1.1.4": + "integrity" "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==" + "resolved" "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz" + "version" "1.1.4" + dependencies: + "lodash" "^4.17.19" + +"request-promise-native@^1.0.5": + "integrity" "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==" + "resolved" "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz" + "version" "1.0.9" + dependencies: + "request-promise-core" "1.1.4" + "stealthy-require" "^1.1.1" + "tough-cookie" "^2.3.3" + +"request@^2.34", "request@^2.79.0", "request@^2.85.0", "request@^2.88.0": + "integrity" "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==" + "resolved" "https://registry.npmjs.org/request/-/request-2.88.2.tgz" + "version" "2.88.2" + dependencies: + "aws-sign2" "~0.7.0" + "aws4" "^1.8.0" + "caseless" "~0.12.0" + "combined-stream" "~1.0.6" + "extend" "~3.0.2" + "forever-agent" "~0.6.1" + "form-data" "~2.3.2" + "har-validator" "~5.1.3" + "http-signature" "~1.2.0" + "is-typedarray" "~1.0.0" + "isstream" "~0.1.2" + "json-stringify-safe" "~5.0.1" + "mime-types" "~2.1.19" + "oauth-sign" "~0.9.0" + "performance-now" "^2.1.0" + "qs" "~6.5.2" + "safe-buffer" "^5.1.2" + "tough-cookie" "~2.5.0" + "tunnel-agent" "^0.6.0" + "uuid" "^3.3.2" + +"require-directory@^2.1.1": + "integrity" "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" + +"require-from-string@^2.0.0": + "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + "version" "2.0.2" + +"require-main-filename@^2.0.0": + "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + "version" "2.0.0" + +"resolve-alpn@^1.0.0", "resolve-alpn@^1.2.0": + "integrity" "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + "resolved" "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + "version" "1.2.1" + +"resolve-cwd@^3.0.0": + "integrity" "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==" + "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "resolve-from" "^5.0.0" + +"resolve-from@^3.0.0": + "integrity" "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" + "version" "3.0.0" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"resolve-from@^5.0.0": + "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + "version" "5.0.0" + +"resolve.exports@^1.1.0": + "integrity" "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" + "resolved" "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" + "version" "1.1.0" + +"resolve@^1.1.6", "resolve@^1.10.0", "resolve@^1.14.2", "resolve@^1.20.0", "resolve@^1.8.1": + "integrity" "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + "version" "1.22.1" + dependencies: + "is-core-module" "^2.9.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" + +"resolve@1.1.x": + "integrity" "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz" + "version" "1.1.7" + +"resolve@1.17.0": + "integrity" "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" + "version" "1.17.0" + dependencies: + "path-parse" "^1.0.6" + +"responselike@^1.0.2": + "integrity" "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==" + "resolved" "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "lowercase-keys" "^1.0.0" + +"responselike@^2.0.0": + "integrity" "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==" + "resolved" "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "lowercase-keys" "^2.0.0" + +"restore-cursor@^3.1.0": + "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + +"retry@^0.12.0": + "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rfdc@^1.3.0": + "integrity" "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + "resolved" "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" + "version" "1.3.0" + +"rimraf@^2.2.8": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "glob" "^7.1.3" + +"rimraf@^3.0.0", "rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"ripemd160@^2.0.0", "ripemd160@^2.0.1": + "integrity" "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==" + "resolved" "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "hash-base" "^3.0.0" + "inherits" "^2.0.1" + +"rlp@^2.0.0", "rlp@^2.2.3", "rlp@^2.2.4": + "integrity" "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==" + "resolved" "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz" + "version" "2.2.7" + dependencies: + "bn.js" "^5.2.0" + +"run-async@^2.4.0": + "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + "version" "2.4.1" + +"run-parallel-limit@^1.1.0": + "integrity" "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==" + "resolved" "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "queue-microtask" "^1.2.2" + +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"rustbn.js@~0.2.0": + "integrity" "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" + "resolved" "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz" + "version" "0.2.0" + +"rxjs@^7.0.0", "rxjs@^7.5.5": + "integrity" "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz" + "version" "7.5.7" + dependencies: + "tslib" "^2.1.0" + +"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.1", "safe-buffer@~5.2.0", "safe-buffer@5.2.1": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" + +"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-event-emitter@^1.0.1": + "integrity" "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==" + "resolved" "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "events" "^3.0.0" + +"safe-regex-test@^1.0.0": + "integrity" "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==" + "resolved" "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "call-bind" "^1.0.2" + "get-intrinsic" "^1.1.3" + "is-regex" "^1.1.4" + +"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@~2.1.0": + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" + +"sc-istanbul@^0.4.5": + "integrity" "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==" + "resolved" "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz" + "version" "0.4.6" + dependencies: + "abbrev" "1.0.x" + "async" "1.x" + "escodegen" "1.8.x" + "esprima" "2.7.x" + "glob" "^5.0.15" + "handlebars" "^4.0.1" + "js-yaml" "3.x" + "mkdirp" "0.5.x" + "nopt" "3.x" + "once" "1.x" + "resolve" "1.1.x" + "supports-color" "^3.1.0" + "which" "^1.1.1" + "wordwrap" "^1.0.0" + +"scrypt-js@^3.0.0", "scrypt-js@^3.0.1", "scrypt-js@3.0.1": + "integrity" "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + "resolved" "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" + "version" "3.0.1" + +"scrypt-js@2.0.4": + "integrity" "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" + "resolved" "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz" + "version" "2.0.4" "scw-contracts-v1.0.0@npm:scw-contracts@1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.0.tgz" - integrity sha512-23OsUVpMZZJMb9qe8Bu0rzz47BxhOQv9QdxlHdd/GeE2cnpe5atC36rs3wquXKzfMrru+NEKhlhyR8674hrBpg== + "integrity" "sha512-23OsUVpMZZJMb9qe8Bu0rzz47BxhOQv9QdxlHdd/GeE2cnpe5atC36rs3wquXKzfMrru+NEKhlhyR8674hrBpg==" + "resolved" "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.0.tgz" + "version" "1.0.0" dependencies: "@ethersproject/abstract-signer" "^5.6.2" "@ethersproject/constants" "^5.6.1" @@ -9651,1971 +11166,2490 @@ scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: "@openzeppelin/contracts" "^4.2.0" "@typechain/hardhat" "^2.3.0" "@types/mocha" "^9.0.0" - chai-as-promised "^7.1.1" - chai-string "^1.5.0" - eth-gas-reporter "^0.2.24" - ethereumjs-util "^7.1.0" - ethereumjs-wallet "^1.0.1" - ethers "^5.6.8" - ganache "^7.1.0" - ganache-cli "^6.12.2" - hardhat "^2.9.5" - hardhat-deploy "^0.9.3" - hardhat-deploy-ethers "^0.3.0-beta.11" - hardhat-gas-reporter "^1.0.7" - solc "^0.8.15" - source-map-support "^0.5.19" - typescript "^4.3.5" - -"scw-contracts-v1.0.1@npm:scw-contracts@1.0.7": - version "1.0.7" - resolved "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.7.tgz" - integrity sha512-5Y2vpNIeHW2VsBIaukkKNn1/bjBBQlR8Dbbpi/UrHPSKU8A577ezZJZbWKysqh21IuFDJ44YRzaQDtTlLBDYDg== + "chai-as-promised" "^7.1.1" + "chai-string" "^1.5.0" + "eth-gas-reporter" "^0.2.24" + "ethereumjs-util" "^7.1.0" + "ethereumjs-wallet" "^1.0.1" + "ethers" "^5.6.8" + "ganache" "^7.1.0" + "ganache-cli" "^6.12.2" + "hardhat" "^2.9.5" + "hardhat-deploy" "^0.9.3" + "hardhat-deploy-ethers" "^0.3.0-beta.11" + "hardhat-gas-reporter" "^1.0.7" + "solc" "^0.8.15" + "source-map-support" "^0.5.19" + "typescript" "^4.3.5" + +"scw-contracts-v1.0.1@npm:scw-contracts@1.0.8": + "integrity" "sha512-a1zgevkJ33E5GLTOUJSUAjgXX0KhE+UeD+MxognKbiC3ZwDnA3Gu4/YbGukfgh448HsqtcWG76WipCn94dyrMQ==" + "resolved" "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.8.tgz" + "version" "1.0.8" dependencies: "@account-abstraction/contracts" "^0.2.0" + "@chainlink/contracts" "^0.4.1" "@ethersproject/abstract-signer" "^5.6.2" "@ethersproject/constants" "^5.6.1" "@nomiclabs/hardhat-etherscan" "^2.1.6" "@openzeppelin/contracts" "^4.2.0" + "@openzeppelin/contracts-upgradeable" "^4.7.3" "@typechain/hardhat" "^2.3.0" "@types/mocha" "^9.0.0" - chai-as-promised "^7.1.1" - chai-string "^1.5.0" - eth-gas-reporter "^0.2.24" - ethereumjs-util "^7.1.0" - ethereumjs-wallet "^1.0.1" - ethers "^5.6.8" - ganache "^7.1.0" - ganache-cli "^6.12.2" - hardhat "^2.9.5" - hardhat-deploy "^0.9.3" - hardhat-deploy-ethers "^0.3.0-beta.11" - hardhat-gas-reporter "^1.0.7" - solc "^0.8.15" - source-map-support "^0.5.19" - typescript "^4.3.5" - -secp256k1@4.0.3, secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -semaphore-async-await@^1.5.1: - version "1.5.1" - resolved "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz" - integrity sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg== - -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.3.4, semver@^7.1.1, semver@^7.3.4: - version "7.3.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.0.0, semver@^7.3.5, semver@^7.3.7: - version "7.3.7" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -servify@^0.1.12: - version "0.1.12" - resolved "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz" - integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== - dependencies: - body-parser "^1.16.0" - cors "^2.8.1" - express "^4.14.0" - request "^2.79.0" - xhr "^2.3.3" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -setimmediate@1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz" - integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -sha1@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz" - integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== - dependencies: - charenc ">= 0.0.1" - crypt ">= 0.0.1" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" - 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" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" - 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" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.7.3: - version "1.7.3" - resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, 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" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^2.7.0: - version "2.8.2" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" - integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.0" - resolved "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" - integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -solc@0.7.3: - version "0.7.3" - resolved "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - follow-redirects "^1.12.1" - fs-extra "^0.30.0" - js-sha3 "0.8.0" - memorystream "^0.3.1" - require-from-string "^2.0.0" - semver "^5.5.0" - tmp "0.0.33" - -solc@^0.8.15: - version "0.8.17" - resolved "https://registry.npmjs.org/solc/-/solc-0.8.17.tgz" - integrity sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g== - dependencies: - command-exists "^1.2.8" - commander "^8.1.0" - follow-redirects "^1.12.1" - js-sha3 "0.8.0" - memorystream "^0.3.1" - semver "^5.5.0" - tmp "0.0.33" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" - integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== - dependencies: - is-plain-obj "^1.0.0" - -sort-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz" - integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== - dependencies: - is-plain-obj "^2.0.0" - -source-map-support@0.5.12: - version "0.5.12" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.5.13, source-map-support@^0.5.19: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spawn-command@^0.0.2-1: - version "0.0.2-1" - resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz" - integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - 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.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - 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.12" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== - -split2@^3.0.0: - version "3.2.2" - resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^9.0.0, ssri@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - -stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== - dependencies: - escape-string-regexp "^2.0.0" - -stacktrace-parser@^0.1.10: - version "0.1.10" - resolved "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" - integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== - dependencies: - type-fest "^0.7.1" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz" - integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" - integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== - -string-argv@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== - -string-format@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz" - integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -"string-width@^1.0.2 || 2 || 3 || 4", 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" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^5.0.0: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" + "chai-as-promised" "^7.1.1" + "chai-string" "^1.5.0" + "eth-gas-reporter" "^0.2.24" + "ethereumjs-util" "^7.1.0" + "ethereumjs-wallet" "^1.0.1" + "ethers" "^5.6.8" + "ganache" "^7.1.0" + "ganache-cli" "^6.12.2" + "hardhat" "^2.9.5" + "hardhat-deploy" "^0.9.3" + "hardhat-deploy-ethers" "^0.3.0-beta.11" + "hardhat-gas-reporter" "^1.0.7" + "solc" "^0.8.15" + "solidity-bytes-utils" "^0.8.0" + "source-map-support" "^0.5.19" + "typescript" "^4.3.5" + +"secp256k1@^4.0.1": + "integrity" "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==" + "resolved" "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "elliptic" "^6.5.4" + "node-addon-api" "^2.0.0" + "node-gyp-build" "^4.2.0" + +"secp256k1@4.0.3": + "integrity" "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==" + "resolved" "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "elliptic" "^6.5.4" + "node-addon-api" "^2.0.0" + "node-gyp-build" "^4.2.0" + +"semaphore@^1.0.3", "semaphore@>=1.0.1": + "integrity" "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" + "resolved" "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz" + "version" "1.1.0" + +"semver@^5.5.0": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^5.6.0": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^5.7.0": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^6.0.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.1.1": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.1.2": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^6.3.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^7.0.0", "semver@^7.1.1", "semver@^7.3.4", "semver@^7.3.5", "semver@^7.3.7": + "integrity" "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + "version" "7.3.8" + dependencies: + "lru-cache" "^6.0.0" + +"semver@~5.4.1": + "integrity" "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz" + "version" "5.4.1" + +"semver@2 || 3 || 4 || 5": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@7.3.4": + "integrity" "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" + "version" "7.3.4" + dependencies: + "lru-cache" "^6.0.0" + +"send@0.18.0": + "integrity" "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==" + "resolved" "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + "version" "0.18.0" + dependencies: + "debug" "2.6.9" + "depd" "2.0.0" + "destroy" "1.2.0" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "fresh" "0.5.2" + "http-errors" "2.0.0" + "mime" "1.6.0" + "ms" "2.1.3" + "on-finished" "2.4.1" + "range-parser" "~1.2.1" + "statuses" "2.0.1" + +"serialize-javascript@6.0.0": + "integrity" "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "randombytes" "^2.1.0" + +"serve-static@1.15.0": + "integrity" "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==" + "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + "version" "1.15.0" + dependencies: + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "parseurl" "~1.3.3" + "send" "0.18.0" + +"servify@^0.1.12": + "integrity" "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==" + "resolved" "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz" + "version" "0.1.12" + dependencies: + "body-parser" "^1.16.0" + "cors" "^2.8.1" + "express" "^4.14.0" + "request" "^2.79.0" + "xhr" "^2.3.3" + +"set-blocking@^2.0.0": + "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"set-immediate-shim@^1.0.1": + "integrity" "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==" + "resolved" "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" + "version" "1.0.1" + +"setimmediate@^1.0.5": + "integrity" "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + "version" "1.0.5" + +"setimmediate@1.0.4": + "integrity" "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" + "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz" + "version" "1.0.4" + +"setprototypeof@1.2.0": + "integrity" "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + "version" "1.2.0" + +"sha.js@^2.4.0", "sha.js@^2.4.8": + "integrity" "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==" + "resolved" "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + "version" "2.4.11" + dependencies: + "inherits" "^2.0.1" + "safe-buffer" "^5.0.1" + +"sha1@^1.1.1": + "integrity" "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==" + "resolved" "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "charenc" ">= 0.0.1" + "crypt" ">= 0.0.1" + +"shallow-clone@^3.0.0": + "integrity" "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==" + "resolved" "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "kind-of" "^6.0.2" + +"shebang-command@^1.2.0": + "integrity" "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "shebang-regex" "^1.0.0" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^1.0.0": + "integrity" "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + "version" "1.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"shell-quote@^1.7.3": + "integrity" "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" + "resolved" "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz" + "version" "1.7.3" + +"shelljs@^0.8.3": + "integrity" "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==" + "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" + "version" "0.8.5" + dependencies: + "glob" "^7.0.0" + "interpret" "^1.0.0" + "rechoir" "^0.6.2" + +"side-channel@^1.0.4": + "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" + "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.0" + "get-intrinsic" "^1.0.2" + "object-inspect" "^1.9.0" + +"signal-exit@^3.0.0": + "version" "3.0.3" + +"signal-exit@^3.0.2", "signal-exit@^3.0.3", "signal-exit@^3.0.7": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" + +"simple-concat@^1.0.0": + "integrity" "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + "resolved" "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + "version" "1.0.1" + +"simple-get@^2.7.0": + "integrity" "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==" + "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz" + "version" "2.8.2" + dependencies: + "decompress-response" "^3.3.0" + "once" "^1.3.1" + "simple-concat" "^1.0.0" + +"sisteransi@^1.0.5": + "integrity" "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + "version" "1.0.5" + +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"slice-ansi@^3.0.0": + "integrity" "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "astral-regex" "^2.0.0" + "is-fullwidth-code-point" "^3.0.0" + +"slice-ansi@^4.0.0": + "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "astral-regex" "^2.0.0" + "is-fullwidth-code-point" "^3.0.0" + +"slice-ansi@^5.0.0": + "integrity" "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "ansi-styles" "^6.0.0" + "is-fullwidth-code-point" "^4.0.0" + +"smart-buffer@^4.2.0": + "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + "version" "4.2.0" + +"socks-proxy-agent@^7.0.0": + "integrity" "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==" + "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "agent-base" "^6.0.2" + "debug" "^4.3.3" + "socks" "^2.6.2" + +"socks@^2.6.2": + "integrity" "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==" + "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "ip" "^2.0.0" + "smart-buffer" "^4.2.0" + +"solc@^0.8.15": + "integrity" "sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g==" + "resolved" "https://registry.npmjs.org/solc/-/solc-0.8.17.tgz" + "version" "0.8.17" + dependencies: + "command-exists" "^1.2.8" + "commander" "^8.1.0" + "follow-redirects" "^1.12.1" + "js-sha3" "0.8.0" + "memorystream" "^0.3.1" + "semver" "^5.5.0" + "tmp" "0.0.33" + +"solc@0.7.3": + "integrity" "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==" + "resolved" "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz" + "version" "0.7.3" + dependencies: + "command-exists" "^1.2.8" + "commander" "3.0.2" + "follow-redirects" "^1.12.1" + "fs-extra" "^0.30.0" + "js-sha3" "0.8.0" + "memorystream" "^0.3.1" + "require-from-string" "^2.0.0" + "semver" "^5.5.0" + "tmp" "0.0.33" + +"solidity-bytes-utils@^0.8.0": + "integrity" "sha512-r109ZHEf7zTMm1ENW6/IJFDWilFR/v0BZnGuFgDHJUV80ByobnV2k3txvwQaJ9ApL+6XAfwqsw5VFzjALbQPCw==" + "resolved" "https://registry.npmjs.org/solidity-bytes-utils/-/solidity-bytes-utils-0.8.0.tgz" + "version" "0.8.0" + dependencies: + "@truffle/hdwallet-provider" "latest" + +"solidity-coverage@^0.7.21", "solidity-coverage@^0.7.22": + "integrity" "sha512-I6Zd5tsFY+gmj1FDIp6w7OrUePx6ZpMgKQZg7dWgPaQHePLi3Jk+iJ8lwZxsWEoNy2Lcv91rMxATWHqRaFdQpw==" + "resolved" "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.7.22.tgz" + "version" "0.7.22" + dependencies: + "@solidity-parser/parser" "^0.14.0" + "@truffle/provider" "^0.2.24" + "chalk" "^2.4.2" + "death" "^1.1.0" + "detect-port" "^1.3.0" + "fs-extra" "^8.1.0" + "ghost-testrpc" "^0.0.2" + "global-modules" "^2.0.0" + "globby" "^10.0.1" + "jsonschema" "^1.2.4" + "lodash" "^4.17.15" + "node-emoji" "^1.10.0" + "pify" "^4.0.1" + "recursive-readdir" "^2.2.2" + "sc-istanbul" "^0.4.5" + "semver" "^7.3.4" + "shelljs" "^0.8.3" + "web3-utils" "^1.3.0" + +"sort-keys@^2.0.0": + "integrity" "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==" + "resolved" "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "is-plain-obj" "^1.0.0" + +"sort-keys@^4.0.0": + "integrity" "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==" + "resolved" "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "is-plain-obj" "^2.0.0" + +"source-map-support@^0.5.13", "source-map-support@^0.5.19": + "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + "version" "0.5.21" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map-support@0.5.12": + "integrity" "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz" + "version" "0.5.12" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map-support@0.5.13": + "integrity" "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" + "version" "0.5.13" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map@^0.6.0", "source-map@^0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@~0.2.0": + "integrity" "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz" + "version" "0.2.0" + dependencies: + "amdefine" ">=0.0.4" + +"spawn-command@^0.0.2-1": + "integrity" "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==" + "resolved" "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz" + "version" "0.0.2-1" + +"spdx-correct@^3.0.0": + "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" + "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "spdx-expression-parse" "^3.0.0" + "spdx-license-ids" "^3.0.0" + +"spdx-exceptions@^2.1.0": + "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + "version" "2.3.0" + +"spdx-expression-parse@^3.0.0": + "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" + "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "spdx-exceptions" "^2.1.0" + "spdx-license-ids" "^3.0.0" + +"spdx-license-ids@^3.0.0": + "integrity" "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" + "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" + "version" "3.0.12" + +"split@^1.0.0": + "integrity" "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==" + "resolved" "https://registry.npmjs.org/split/-/split-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "through" "2" + +"split2@^3.0.0": + "integrity" "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==" + "resolved" "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "readable-stream" "^3.0.0" + +"sprintf-js@~1.0.2": + "integrity" "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"sshpk@^1.7.0": + "integrity" "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==" + "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" + "version" "1.17.0" + dependencies: + "asn1" "~0.2.3" + "assert-plus" "^1.0.0" + "bcrypt-pbkdf" "^1.0.0" + "dashdash" "^1.12.0" + "ecc-jsbn" "~0.1.1" + "getpass" "^0.1.1" + "jsbn" "~0.1.0" + "safer-buffer" "^2.0.2" + "tweetnacl" "~0.14.0" + +"ssri@^9.0.0", "ssri@^9.0.1": + "integrity" "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==" + "resolved" "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" + "version" "9.0.1" + dependencies: + "minipass" "^3.1.1" + +"stack-utils@^2.0.3": + "integrity" "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==" + "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "escape-string-regexp" "^2.0.0" + +"stacktrace-parser@^0.1.10": + "integrity" "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==" + "resolved" "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" + "version" "0.1.10" + dependencies: + "type-fest" "^0.7.1" + +"statuses@2.0.1": + "integrity" "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + "version" "2.0.1" + +"stealthy-require@^1.1.1": + "integrity" "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==" + "resolved" "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz" + "version" "1.1.1" + +"streamsearch@^1.1.0": + "integrity" "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" + "resolved" "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" + "version" "1.1.0" + +"strict-uri-encode@^1.0.0": + "integrity" "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" + "resolved" "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + "version" "1.1.0" + +"string_decoder@^1.1.1": + "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "safe-buffer" "~5.2.0" + +"string_decoder@~0.10.x": + "integrity" "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + "version" "0.10.31" + +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "safe-buffer" "~5.1.0" + +"string-argv@^0.3.1": + "integrity" "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" + "resolved" "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" + "version" "0.3.1" + +"string-format@^2.0.0": + "integrity" "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==" + "resolved" "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz" + "version" "2.0.0" + +"string-length@^4.0.1": + "integrity" "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==" + "resolved" "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "char-regex" "^1.0.2" + "strip-ansi" "^6.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"string-width@^1.0.2 || 2": + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^4.0.0" + +"string-width@^2.1.1": + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^4.0.0" + +"string-width@^3.0.0", "string-width@^3.1.0": + "integrity" "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "emoji-regex" "^7.0.1" + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^5.1.0" + +"string-width@^5.0.0": + "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "eastasianwidth" "^0.2.0" + "emoji-regex" "^9.2.2" + "strip-ansi" "^7.0.1" + +"string.prototype.trimend@^1.0.5": + "integrity" "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==" + "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" + +"string.prototype.trimstart@^1.0.5": + "integrity" "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==" + "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" + +"strip-ansi@^4.0.0": + "integrity" "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-regex" "^3.0.0" + +"strip-ansi@^5.0.0", "strip-ansi@^5.1.0", "strip-ansi@^5.2.0": + "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "ansi-regex" "^4.1.0" + +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== +"strip-ansi@^7.0.1": + "integrity" "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + "version" "7.0.1" dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" + "ansi-regex" "^6.0.1" + +"strip-bom@^3.0.0": + "integrity" "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + "version" "3.0.0" + +"strip-bom@^4.0.0": + "integrity" "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + "version" "4.0.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== +"strip-eof@^1.0.0": + "integrity" "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" + "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + "version" "1.0.0" -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -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" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -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" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, 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" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strong-log-transformer@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" - -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - -supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^9.2.2: - version "9.2.3" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.2.3.tgz" - integrity sha512-aszYUX/DVK/ed5rFLb/dDinVJrQjG/vmU433wtqVSD800rYsJNWxh2R3USV90aLSU+UsyQkbNeffVLzc6B6foA== - -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -swarm-js@^0.1.40: - version "0.1.42" - resolved "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz" - integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== - dependencies: - bluebird "^3.5.0" - buffer "^5.0.5" - eth-lib "^0.1.26" - fs-extra "^4.0.2" - got "^11.8.5" - mime-types "^2.1.16" - mkdirp-promise "^5.0.1" - mock-fs "^4.1.0" - setimmediate "^1.0.5" - tar "^4.0.2" - xhr-request "^1.0.1" - -sync-request@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz" - integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== - dependencies: - http-response-object "^3.0.1" - sync-rpc "^1.2.1" - then-request "^6.0.0" - -sync-rpc@^1.2.1: - version "1.3.6" - resolved "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz" - integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== - dependencies: - get-port "^3.1.0" - -table-layout@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz" - integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== - dependencies: - array-back "^4.0.1" - deep-extend "~0.6.0" - typical "^5.2.0" - wordwrapjs "^4.0.0" - -tar-stream@~2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^4.0.2: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - -tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.11" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" - integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" + +"strip-hex-prefix@1.0.0": + "integrity" "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==" + "resolved" "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-hex-prefixed" "1.0.0" + +"strip-indent@^3.0.0": + "integrity" "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==" + "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "min-indent" "^1.0.0" + +"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1", "strip-json-comments@3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" + +"strip-json-comments@2.0.1": + "integrity" "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + "version" "2.0.1" + +"strong-log-transformer@^2.1.0": + "integrity" "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==" + "resolved" "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "duplexer" "^0.1.1" + "minimist" "^1.2.0" + "through" "^2.3.4" + +"supports-color@^3.1.0": + "integrity" "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" + "version" "3.2.3" + dependencies: + "has-flag" "^1.0.0" + +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^7.0.0", "supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^8.0.0": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^8.1.0": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^9.2.2": + "integrity" "sha512-aszYUX/DVK/ed5rFLb/dDinVJrQjG/vmU433wtqVSD800rYsJNWxh2R3USV90aLSU+UsyQkbNeffVLzc6B6foA==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-9.2.3.tgz" + "version" "9.2.3" + +"supports-color@6.0.0": + "integrity" "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@8.1.1": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + +"supports-hyperlinks@^2.0.0": + "integrity" "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==" + "resolved" "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "has-flag" "^4.0.0" + "supports-color" "^7.0.0" + +"supports-preserve-symlinks-flag@^1.0.0": + "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + "version" "1.0.0" + +"swarm-js@^0.1.40": + "integrity" "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==" + "resolved" "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz" + "version" "0.1.42" + dependencies: + "bluebird" "^3.5.0" + "buffer" "^5.0.5" + "eth-lib" "^0.1.26" + "fs-extra" "^4.0.2" + "got" "^11.8.5" + "mime-types" "^2.1.16" + "mkdirp-promise" "^5.0.1" + "mock-fs" "^4.1.0" + "setimmediate" "^1.0.5" + "tar" "^4.0.2" + "xhr-request" "^1.0.1" + +"sync-request@^6.0.0": + "integrity" "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==" + "resolved" "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "http-response-object" "^3.0.1" + "sync-rpc" "^1.2.1" + "then-request" "^6.0.0" + +"sync-rpc@^1.2.1": + "integrity" "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==" + "resolved" "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz" + "version" "1.3.6" + dependencies: + "get-port" "^3.1.0" + +"table-layout@^1.0.2": + "integrity" "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==" + "resolved" "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "array-back" "^4.0.1" + "deep-extend" "~0.6.0" + "typical" "^5.2.0" + "wordwrapjs" "^4.0.0" + +"tar-stream@~2.2.0": + "integrity" "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" + "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "bl" "^4.0.3" + "end-of-stream" "^1.4.1" + "fs-constants" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^3.1.1" + +"tar@^4.0.2": + "integrity" "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==" + "resolved" "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" + "version" "4.4.19" + dependencies: + "chownr" "^1.1.4" + "fs-minipass" "^1.2.7" + "minipass" "^2.9.0" + "minizlib" "^1.3.3" + "mkdirp" "^0.5.5" + "safe-buffer" "^5.2.1" + "yallist" "^3.1.1" + +"tar@^6.1.0", "tar@^6.1.11", "tar@^6.1.2": + "integrity" "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==" + "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + "version" "6.1.11" + dependencies: + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^3.0.0" + "minizlib" "^2.1.1" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" + +"temp-dir@^1.0.0": + "integrity" "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==" + "resolved" "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" + "version" "1.0.0" + +"terminal-link@^2.0.0": + "integrity" "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==" + "resolved" "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ansi-escapes" "^4.2.1" + "supports-hyperlinks" "^2.0.0" + +"test-exclude@^6.0.0": + "integrity" "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==" + "resolved" "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + "version" "6.0.0" dependencies: "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" + "glob" "^7.1.4" + "minimatch" "^3.0.4" -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== +"text-extensions@^1.0.0": + "integrity" "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==" + "resolved" "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" + "version" "1.9.0" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +"text-table@^0.2.0": + "integrity" "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" -then-request@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz" - integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== +"then-request@^6.0.0": + "integrity" "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==" + "resolved" "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz" + "version" "6.0.2" dependencies: "@types/concat-stream" "^1.6.0" "@types/form-data" "0.0.33" "@types/node" "^8.0.0" "@types/qs" "^6.2.31" - caseless "~0.12.0" - concat-stream "^1.6.0" - form-data "^2.2.0" - http-basic "^8.1.1" - http-response-object "^3.0.1" - promise "^8.0.0" - qs "^6.4.0" - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" - integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== - -tmp@0.0.33, tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -treeverse@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" - integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== - -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -"true-case-path@^2.2.1": - version "2.2.1" - resolved "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz" - integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== - -ts-command-line-args@^2.2.0: - version "2.3.1" - resolved "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz" - integrity sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g== - dependencies: - chalk "^4.1.0" - command-line-args "^5.1.1" - command-line-usage "^6.1.0" - string-format "^2.0.0" - -ts-essentials@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz" - integrity sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ== - -ts-essentials@^7.0.1: - version "7.0.3" - resolved "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz" - integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== - -ts-generator@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz" - integrity sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ== + "caseless" "~0.12.0" + "concat-stream" "^1.6.0" + "form-data" "^2.2.0" + "http-basic" "^8.1.1" + "http-response-object" "^3.0.1" + "promise" "^8.0.0" + "qs" "^6.4.0" + +"through@^2.3.4", "through@^2.3.6", "through@^2.3.8", "through@>=2.2.7 <3", "through@2": + "integrity" "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + +"through2@^2.0.0": + "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "readable-stream" "~2.3.6" + "xtend" "~4.0.1" + +"through2@^4.0.0": + "integrity" "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==" + "resolved" "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "readable-stream" "3" + +"timed-out@^4.0.1": + "integrity" "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==" + "resolved" "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" + "version" "4.0.1" + +"tmp@^0.0.33", "tmp@0.0.33": + "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + "version" "0.0.33" + dependencies: + "os-tmpdir" "~1.0.2" + +"tmp@~0.2.1": + "integrity" "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + "version" "0.2.1" + dependencies: + "rimraf" "^3.0.0" + +"tmpl@1.0.5": + "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + "version" "1.0.5" + +"to-fast-properties@^2.0.0": + "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + "version" "2.0.0" + +"to-readable-stream@^1.0.0": + "integrity" "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "resolved" "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" + "version" "1.0.0" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"toidentifier@1.0.1": + "integrity" "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + "version" "1.0.1" + +"tough-cookie@^2.3.3", "tough-cookie@~2.5.0": + "integrity" "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==" + "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "psl" "^1.1.28" + "punycode" "^2.1.1" + +"tr46@~0.0.3": + "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + "version" "0.0.3" + +"tree-kill@^1.2.2": + "integrity" "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" + "resolved" "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + "version" "1.2.2" + +"treeverse@^2.0.0": + "integrity" "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==" + "resolved" "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz" + "version" "2.0.0" + +"trim-newlines@^3.0.0": + "integrity" "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" + "resolved" "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" + "version" "3.0.1" + +"ts-command-line-args@^2.2.0": + "integrity" "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==" + "resolved" "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz" + "version" "2.3.1" + dependencies: + "chalk" "^4.1.0" + "command-line-args" "^5.1.1" + "command-line-usage" "^6.1.0" + "string-format" "^2.0.0" + +"ts-essentials@^1.0.0": + "integrity" "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==" + "resolved" "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz" + "version" "1.0.4" + +"ts-essentials@^7.0.1": + "integrity" "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==" + "resolved" "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz" + "version" "7.0.3" + +"ts-generator@^0.1.1": + "integrity" "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==" + "resolved" "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz" + "version" "0.1.1" dependencies: "@types/mkdirp" "^0.5.2" "@types/prettier" "^2.1.1" "@types/resolve" "^0.0.8" - chalk "^2.4.1" - glob "^7.1.2" - mkdirp "^0.5.1" - prettier "^2.1.2" - resolve "^1.8.1" - ts-essentials "^1.0.0" - -ts-node@^10.7.0, ts-node@^10.9.1: - version "10.9.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + "chalk" "^2.4.1" + "glob" "^7.1.2" + "mkdirp" "^0.5.1" + "prettier" "^2.1.2" + "resolve" "^1.8.1" + "ts-essentials" "^1.0.0" + +"ts-node@*", "ts-node@^10.7.0", "ts-node@^10.9.1", "ts-node@>=8.0.0", "ts-node@>=9.0.0": + "integrity" "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==" + "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + "version" "10.9.1" dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tsconfig-paths@^3.9.0: - version "3.14.1" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + "acorn" "^8.4.1" + "acorn-walk" "^8.1.1" + "arg" "^4.1.0" + "create-require" "^1.1.0" + "diff" "^4.0.1" + "make-error" "^1.1.1" + "v8-compile-cache-lib" "^3.0.1" + "yn" "3.1.1" + +"tsconfig-paths@^3.9.0": + "integrity" "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==" + "resolved" "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" + "version" "3.14.1" dependencies: "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tsort@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" - integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl-util@^0.15.1: - version "0.15.1" - resolved "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz" - integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz" - integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" - 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" - integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.npmjs.org/type/-/type-2.7.2.tgz" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typechain@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz" - integrity sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ== + "json5" "^1.0.1" + "minimist" "^1.2.6" + "strip-bom" "^3.0.0" + +"tslib@^1.8.1", "tslib@^1.9.3": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" + +"tslib@^2.0.0": + "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + "version" "2.4.0" + +"tslib@^2.1.0": + "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + "version" "2.4.0" + +"tslib@^2.3.0": + "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + "version" "2.4.0" + +"tslib@^2.4.0": + "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + "version" "2.4.0" + +"tsort@0.0.1": + "integrity" "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" + "resolved" "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" + "version" "0.0.1" + +"tsutils@^3.21.0": + "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" + "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + "version" "3.21.0" + dependencies: + "tslib" "^1.8.1" + +"tunnel-agent@^0.6.0": + "integrity" "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==" + "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + "version" "0.6.0" + dependencies: + "safe-buffer" "^5.0.1" + +"tweetnacl-util@^0.15.1": + "integrity" "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" + "resolved" "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz" + "version" "0.15.1" + +"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": + "integrity" "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + "version" "0.14.5" + +"tweetnacl@^1.0.3": + "integrity" "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" + "version" "1.0.3" + +"type-check@^0.4.0": + "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + "version" "0.4.0" + dependencies: + "prelude-ls" "^1.2.1" + +"type-check@~0.3.2": + "integrity" "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "prelude-ls" "~1.1.2" + +"type-check@~0.4.0": + "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + "version" "0.4.0" + dependencies: + "prelude-ls" "^1.2.1" + +"type-detect@^4.0.0", "type-detect@^4.0.5", "type-detect@4.0.8": + "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + "version" "4.0.8" + +"type-fest@^0.18.0": + "integrity" "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" + "version" "0.18.1" + +"type-fest@^0.20.2": + "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + "version" "0.20.2" + +"type-fest@^0.21.3": + "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + "version" "0.21.3" + +"type-fest@^0.4.1": + "integrity" "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz" + "version" "0.4.1" + +"type-fest@^0.6.0": + "integrity" "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" + "version" "0.6.0" + +"type-fest@^0.7.1": + "integrity" "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz" + "version" "0.7.1" + +"type-fest@^0.8.1": + "integrity" "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + "version" "0.8.1" + +"type-is@~1.6.18": + "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" + "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + "version" "1.6.18" + dependencies: + "media-typer" "0.3.0" + "mime-types" "~2.1.24" + +"type@^1.0.1": + "integrity" "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "resolved" "https://registry.npmjs.org/type/-/type-1.2.0.tgz" + "version" "1.2.0" + +"type@^2.7.2": + "integrity" "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + "resolved" "https://registry.npmjs.org/type/-/type-2.7.2.tgz" + "version" "2.7.2" + +"typechain@^5.1.2", "typechain@^7.0.0", "typechain@^8.1.0": + "integrity" "sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ==" + "resolved" "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz" + "version" "7.0.1" dependencies: "@types/prettier" "^2.1.1" - debug "^4.1.1" - fs-extra "^7.0.0" - glob "^7.1.6" - js-sha3 "^0.8.0" - lodash "^4.17.15" - mkdirp "^1.0.4" - prettier "^2.1.2" - ts-command-line-args "^2.2.0" - ts-essentials "^7.0.1" - -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" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -"typescript@^3 || ^4": - version "4.8.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" - integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== - -typescript@^4.3.5, typescript@^4.6.3, typescript@^4.7.4: - version "4.8.2" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz" - integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== - -typical@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz" - integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== - -typical@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz" - integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== - -uglify-js@^3.1.4: - version "3.17.2" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.2.tgz" - integrity sha512-bbxglRjsGQMchfvXZNusUcYgiB9Hx2K4AHYXQy2DITZ9Rd+JzhX7+hoocE5Winr7z2oHvPsekkBwXtigvxevXg== - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" - 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@^5.4.0: - version "5.10.0" - resolved "https://registry.npmjs.org/undici/-/undici-5.10.0.tgz" - integrity sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g== - -unique-filename@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" - integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== - dependencies: - unique-slug "^3.0.0" - -unique-slug@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" - integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== - dependencies: - imurmurhash "^0.1.4" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -upath@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz" - integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== - -update-browserslist-db@^1.0.9: - version "1.0.9" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz" - integrity sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-set-query@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz" - integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== - -utf-8-validate@5.0.7: - version "5.0.7" - resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz" - integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== - dependencies: - node-gyp-build "^4.3.0" - -utf-8-validate@^5.0.2: - version "5.0.9" - resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz" - integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== - dependencies: - node-gyp-build "^4.3.0" - -utf8@3.0.0, utf8@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@^0.12.0: - version "0.12.4" - resolved "https://registry.npmjs.org/util/-/util-0.12.4.tgz" - integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - safe-buffer "^5.1.2" - which-typed-array "^1.1.2" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz" - integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== - -uuid@3.3.2: - version "3.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -v8-compile-cache@2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -v8-to-istanbul@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz" - integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + "debug" "^4.1.1" + "fs-extra" "^7.0.0" + "glob" "^7.1.6" + "js-sha3" "^0.8.0" + "lodash" "^4.17.15" + "mkdirp" "^1.0.4" + "prettier" "^2.1.2" + "ts-command-line-args" "^2.2.0" + "ts-essentials" "^7.0.1" + +"typedarray-to-buffer@^3.1.5": + "integrity" "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==" + "resolved" "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + "version" "3.1.5" + dependencies: + "is-typedarray" "^1.0.0" + +"typedarray@^0.0.6": + "integrity" "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + "version" "0.0.6" + +"typescript@*", "typescript@^3 || ^4", "typescript@^4.3.5", "typescript@^4.6.3", "typescript@^4.7.4", "typescript@>=2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.7.0", "typescript@>=4.0.0", "typescript@>=4.1.0", "typescript@>=4.5.0": + "integrity" "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" + "version" "4.8.4" + +"typical@^4.0.0": + "integrity" "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" + "resolved" "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz" + "version" "4.0.0" + +"typical@^5.2.0": + "integrity" "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" + "resolved" "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz" + "version" "5.2.0" + +"uglify-js@^3.1.4": + "integrity" "sha512-bbxglRjsGQMchfvXZNusUcYgiB9Hx2K4AHYXQy2DITZ9Rd+JzhX7+hoocE5Winr7z2oHvPsekkBwXtigvxevXg==" + "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.2.tgz" + "version" "3.17.2" + +"ultron@~1.1.0": + "integrity" "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + "resolved" "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz" + "version" "1.1.1" + +"unbox-primitive@^1.0.2": + "integrity" "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==" + "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" + "has-bigints" "^1.0.2" + "has-symbols" "^1.0.3" + "which-boxed-primitive" "^1.0.2" + +"undici@^5.4.0": + "integrity" "sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==" + "resolved" "https://registry.npmjs.org/undici/-/undici-5.11.0.tgz" + "version" "5.11.0" + dependencies: + "busboy" "^1.6.0" + +"unique-filename@^2.0.0": + "integrity" "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==" + "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "unique-slug" "^3.0.0" + +"unique-slug@^3.0.0": + "integrity" "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==" + "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "imurmurhash" "^0.1.4" + +"universal-user-agent@^6.0.0": + "integrity" "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + "resolved" "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" + "version" "6.0.0" + +"universalify@^0.1.0": + "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + "version" "0.1.2" + +"universalify@^2.0.0": + "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + "version" "2.0.0" + +"unpipe@~1.0.0", "unpipe@1.0.0": + "integrity" "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + "version" "1.0.0" + +"upath@^2.0.1": + "integrity" "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==" + "resolved" "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz" + "version" "2.0.1" + +"update-browserslist-db@^1.0.9": + "integrity" "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==" + "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz" + "version" "1.0.9" + dependencies: + "escalade" "^3.1.1" + "picocolors" "^1.0.0" + +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"url-parse-lax@^3.0.0": + "integrity" "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==" + "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "prepend-http" "^2.0.0" + +"url-set-query@^1.0.0": + "integrity" "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" + "resolved" "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz" + "version" "1.0.0" + +"utf-8-validate@^5.0.2", "utf-8-validate@5.0.7": + "integrity" "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==" + "resolved" "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz" + "version" "5.0.7" + dependencies: + "node-gyp-build" "^4.3.0" + +"utf8@^3.0.0", "utf8@3.0.0": + "integrity" "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + "resolved" "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz" + "version" "3.0.0" + +"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": + "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"util@^0.12.0": + "integrity" "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==" + "resolved" "https://registry.npmjs.org/util/-/util-0.12.4.tgz" + "version" "0.12.4" + dependencies: + "inherits" "^2.0.3" + "is-arguments" "^1.0.4" + "is-generator-function" "^1.0.7" + "is-typed-array" "^1.1.3" + "safe-buffer" "^5.1.2" + "which-typed-array" "^1.1.2" + +"utils-merge@1.0.1": + "integrity" "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + "version" "1.0.1" + +"uuid@^3.3.2": + "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + "version" "3.4.0" + +"uuid@^8.3.2": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" + +"uuid@2.0.1": + "integrity" "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz" + "version" "2.0.1" + +"uuid@3.3.2": + "integrity" "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz" + "version" "3.3.2" + +"v8-compile-cache-lib@^3.0.1": + "integrity" "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "resolved" "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + "version" "3.0.1" + +"v8-compile-cache@2.3.0": + "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" + "version" "2.3.0" + +"v8-to-istanbul@^9.0.1": + "integrity" "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==" + "resolved" "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz" + "version" "9.0.1" dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" + "convert-source-map" "^1.6.0" -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== +"validate-npm-package-license@^3.0.1", "validate-npm-package-license@^3.0.4": + "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" + "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + "version" "3.0.4" dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" + "spdx-correct" "^3.0.0" + "spdx-expression-parse" "^3.0.0" -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" - integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== +"validate-npm-package-name@^3.0.0": + "integrity" "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==" + "resolved" "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" + "version" "3.0.0" dependencies: - builtins "^1.0.3" + "builtins" "^1.0.3" -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== +"validate-npm-package-name@^4.0.0": + "integrity" "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==" + "resolved" "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz" + "version" "4.0.0" dependencies: - builtins "^5.0.0" + "builtins" "^5.0.0" -varint@^5.0.0: - version "5.0.2" - resolved "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" - integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== +"varint@^5.0.0": + "integrity" "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + "resolved" "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" + "version" "5.0.2" -vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +"vary@^1", "vary@~1.1.2": + "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + "version" "1.1.2" -verror@1.10.0: - version "1.10.0" - resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== +"verror@1.10.0": + "integrity" "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==" + "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + "version" "1.10.0" dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" + "assert-plus" "^1.0.0" + "core-util-is" "1.0.2" + "extsprintf" "^1.2.0" -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== +"walk-up-path@^1.0.0": + "integrity" "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==" + "resolved" "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz" + "version" "1.0.0" -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== +"walker@^1.0.8": + "integrity" "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==" + "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + "version" "1.0.8" dependencies: - makeerror "1.0.12" + "makeerror" "1.0.12" -wcwidth@^1.0.0, wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== +"wcwidth@^1.0.0", "wcwidth@^1.0.1": + "integrity" "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" + "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + "version" "1.0.1" dependencies: - defaults "^1.0.3" + "defaults" "^1.0.3" -web3-bzz@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.0.tgz" - integrity sha512-caDtdKeLi7+2Vb+y+cq2yyhkNjnxkFzVW0j1DtemarBg3dycG1iEl75CVQMLNO6Wkg+HH9tZtRnUyFIe5LIUeQ== +"web3-bzz@1.7.4": + "integrity" "sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q==" + "resolved" "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.4.tgz" + "version" "1.7.4" dependencies: "@types/node" "^12.12.6" - got "12.1.0" - swarm-js "^0.1.40" + "got" "9.6.0" + "swarm-js" "^0.1.40" -web3-core-helpers@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz" - integrity sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw== +"web3-bzz@1.8.0": + "integrity" "sha512-caDtdKeLi7+2Vb+y+cq2yyhkNjnxkFzVW0j1DtemarBg3dycG1iEl75CVQMLNO6Wkg+HH9tZtRnUyFIe5LIUeQ==" + "resolved" "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.0.tgz" + "version" "1.8.0" dependencies: - web3-eth-iban "1.8.0" - web3-utils "1.8.0" + "@types/node" "^12.12.6" + "got" "12.1.0" + "swarm-js" "^0.1.40" -web3-core-method@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.0.tgz" - integrity sha512-c94RAzo3gpXwf2rf8rL8C77jOzNWF4mXUoUfZYYsiY35cJFd46jQDPI00CB5+ZbICTiA5mlVzMj4e7jAsTqiLA== +"web3-core-helpers@1.7.4": + "integrity" "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==" + "resolved" "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "web3-eth-iban" "1.7.4" + "web3-utils" "1.7.4" + +"web3-core-helpers@1.8.0": + "integrity" "sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw==" + "resolved" "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "web3-eth-iban" "1.8.0" + "web3-utils" "1.8.0" + +"web3-core-method@1.7.4": + "integrity" "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==" + "resolved" "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "@ethersproject/transactions" "^5.6.2" + "web3-core-helpers" "1.7.4" + "web3-core-promievent" "1.7.4" + "web3-core-subscriptions" "1.7.4" + "web3-utils" "1.7.4" + +"web3-core-method@1.8.0": + "integrity" "sha512-c94RAzo3gpXwf2rf8rL8C77jOzNWF4mXUoUfZYYsiY35cJFd46jQDPI00CB5+ZbICTiA5mlVzMj4e7jAsTqiLA==" + "resolved" "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.0.tgz" + "version" "1.8.0" dependencies: "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.8.0" - web3-core-promievent "1.8.0" - web3-core-subscriptions "1.8.0" - web3-utils "1.8.0" - -web3-core-promievent@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.0.tgz" - integrity sha512-FGLyjAuOaAQ+ZhV6iuw9tg/9WvIkSZXKHQ4mdTyQ8MxVraOtFivOCbuLLsGgapfHYX+RPxsc1j1YzQjKoupagQ== - dependencies: - eventemitter3 "4.0.4" - -web3-core-requestmanager@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.0.tgz" - integrity sha512-2AoYCs3Owl5foWcf4uKPONyqFygSl9T54L8b581U16nsUirjhoTUGK/PBhMDVcLCmW4QQmcY5A8oPFpkQc1TTg== - dependencies: - util "^0.12.0" - web3-core-helpers "1.8.0" - web3-providers-http "1.8.0" - web3-providers-ipc "1.8.0" - web3-providers-ws "1.8.0" - -web3-core-subscriptions@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.0.tgz" - integrity sha512-7lHVRzDdg0+Gcog55lG6Q3D8JV+jN+4Ly6F8cSn9xFUAwOkdbgdWsjknQG7t7CDWy21DQkvdiY2BJF8S68AqOA== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.8.0" - -web3-core@1.8.0, web3-core@^1.7.1, web3-core@^1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-core/-/web3-core-1.8.0.tgz" - integrity sha512-9sCA+Z02ci6zoY2bAquFiDjujRwmSKHiSGi4B8IstML8okSytnzXk1izHYSynE7ahIkguhjWAuXFvX76F5rAbA== + "web3-core-helpers" "1.8.0" + "web3-core-promievent" "1.8.0" + "web3-core-subscriptions" "1.8.0" + "web3-utils" "1.8.0" + +"web3-core-promievent@1.7.4": + "integrity" "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==" + "resolved" "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "eventemitter3" "4.0.4" + +"web3-core-promievent@1.8.0": + "integrity" "sha512-FGLyjAuOaAQ+ZhV6iuw9tg/9WvIkSZXKHQ4mdTyQ8MxVraOtFivOCbuLLsGgapfHYX+RPxsc1j1YzQjKoupagQ==" + "resolved" "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "eventemitter3" "4.0.4" + +"web3-core-requestmanager@1.7.4": + "integrity" "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==" + "resolved" "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "util" "^0.12.0" + "web3-core-helpers" "1.7.4" + "web3-providers-http" "1.7.4" + "web3-providers-ipc" "1.7.4" + "web3-providers-ws" "1.7.4" + +"web3-core-requestmanager@1.8.0": + "integrity" "sha512-2AoYCs3Owl5foWcf4uKPONyqFygSl9T54L8b581U16nsUirjhoTUGK/PBhMDVcLCmW4QQmcY5A8oPFpkQc1TTg==" + "resolved" "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "util" "^0.12.0" + "web3-core-helpers" "1.8.0" + "web3-providers-http" "1.8.0" + "web3-providers-ipc" "1.8.0" + "web3-providers-ws" "1.8.0" + +"web3-core-subscriptions@1.7.4": + "integrity" "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==" + "resolved" "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "eventemitter3" "4.0.4" + "web3-core-helpers" "1.7.4" + +"web3-core-subscriptions@1.8.0": + "integrity" "sha512-7lHVRzDdg0+Gcog55lG6Q3D8JV+jN+4Ly6F8cSn9xFUAwOkdbgdWsjknQG7t7CDWy21DQkvdiY2BJF8S68AqOA==" + "resolved" "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "eventemitter3" "4.0.4" + "web3-core-helpers" "1.8.0" + +"web3-core@^1.7.1", "web3-core@^1.8.0", "web3-core@1.8.0": + "integrity" "sha512-9sCA+Z02ci6zoY2bAquFiDjujRwmSKHiSGi4B8IstML8okSytnzXk1izHYSynE7ahIkguhjWAuXFvX76F5rAbA==" + "resolved" "https://registry.npmjs.org/web3-core/-/web3-core-1.8.0.tgz" + "version" "1.8.0" dependencies: "@types/bn.js" "^5.1.0" "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.8.0" - web3-core-method "1.8.0" - web3-core-requestmanager "1.8.0" - web3-utils "1.8.0" + "bignumber.js" "^9.0.0" + "web3-core-helpers" "1.8.0" + "web3-core-method" "1.8.0" + "web3-core-requestmanager" "1.8.0" + "web3-utils" "1.8.0" -web3-eth-abi@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.0.tgz" - integrity sha512-xPeMb2hS9YLQK/Q5YZpkcmzoRGM+/R8bogSrYHhNC3hjZSSU0YRH+1ZKK0f9YF4qDZaPMI8tKWIMSCDIpjG6fg== +"web3-core@1.7.4": + "integrity" "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==" + "resolved" "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "@types/bn.js" "^5.1.0" + "@types/node" "^12.12.6" + "bignumber.js" "^9.0.0" + "web3-core-helpers" "1.7.4" + "web3-core-method" "1.7.4" + "web3-core-requestmanager" "1.7.4" + "web3-utils" "1.7.4" + +"web3-eth-abi@1.7.4": + "integrity" "sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg==" + "resolved" "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz" + "version" "1.7.4" dependencies: "@ethersproject/abi" "^5.6.3" - web3-utils "1.8.0" + "web3-utils" "1.7.4" -web3-eth-accounts@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.0.tgz" - integrity sha512-HQ/MDSv4bexwJLvnqsM6xpGE7c2NVOqyhzOZFyMUKXbIwIq85T3TaLnM9pCN7XqMpDcfxqiZ3q43JqQVkzHdmw== +"web3-eth-abi@1.8.0": + "integrity" "sha512-xPeMb2hS9YLQK/Q5YZpkcmzoRGM+/R8bogSrYHhNC3hjZSSU0YRH+1ZKK0f9YF4qDZaPMI8tKWIMSCDIpjG6fg==" + "resolved" "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "@ethersproject/abi" "^5.6.3" + "web3-utils" "1.8.0" + +"web3-eth-accounts@1.7.4": + "integrity" "sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw==" + "resolved" "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/tx" "^3.3.2" + "crypto-browserify" "3.12.0" + "eth-lib" "0.2.8" + "ethereumjs-util" "^7.0.10" + "scrypt-js" "^3.0.1" + "uuid" "3.3.2" + "web3-core" "1.7.4" + "web3-core-helpers" "1.7.4" + "web3-core-method" "1.7.4" + "web3-utils" "1.7.4" + +"web3-eth-accounts@1.8.0": + "integrity" "sha512-HQ/MDSv4bexwJLvnqsM6xpGE7c2NVOqyhzOZFyMUKXbIwIq85T3TaLnM9pCN7XqMpDcfxqiZ3q43JqQVkzHdmw==" + "resolved" "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.0.tgz" + "version" "1.8.0" dependencies: "@ethereumjs/common" "^2.5.0" "@ethereumjs/tx" "^3.3.2" - crypto-browserify "3.12.0" - eth-lib "0.2.8" - ethereumjs-util "^7.0.10" - scrypt-js "^3.0.1" - uuid "3.3.2" - web3-core "1.8.0" - web3-core-helpers "1.8.0" - web3-core-method "1.8.0" - web3-utils "1.8.0" - -web3-eth-contract@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.0.tgz" - integrity sha512-6xeXhW2YoCrz2Ayf2Vm4srWiMOB6LawkvxWJDnUWJ8SMATg4Pgu42C/j8rz/enXbYWt2IKuj0kk8+QszxQbK+Q== + "crypto-browserify" "3.12.0" + "eth-lib" "0.2.8" + "ethereumjs-util" "^7.0.10" + "scrypt-js" "^3.0.1" + "uuid" "3.3.2" + "web3-core" "1.8.0" + "web3-core-helpers" "1.8.0" + "web3-core-method" "1.8.0" + "web3-utils" "1.8.0" + +"web3-eth-contract@1.7.4": + "integrity" "sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ==" + "resolved" "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz" + "version" "1.7.4" dependencies: "@types/bn.js" "^5.1.0" - web3-core "1.8.0" - web3-core-helpers "1.8.0" - web3-core-method "1.8.0" - web3-core-promievent "1.8.0" - web3-core-subscriptions "1.8.0" - web3-eth-abi "1.8.0" - web3-utils "1.8.0" - -web3-eth-ens@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.0.tgz" - integrity sha512-/eFbQEwvsMOEiOhw9/iuRXCsPkqAmHHWuFOrThQkozRgcnSTRnvxkkRC/b6koiT5/HaKeUs4yQDg+/ixsIxZxA== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - web3-core "1.8.0" - web3-core-helpers "1.8.0" - web3-core-promievent "1.8.0" - web3-eth-abi "1.8.0" - web3-eth-contract "1.8.0" - web3-utils "1.8.0" - -web3-eth-iban@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz" - integrity sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg== - dependencies: - bn.js "^5.2.1" - web3-utils "1.8.0" - -web3-eth-personal@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.0.tgz" - integrity sha512-L7FT4nR3HmsfZyIAhFpEctKkYGOjRC2h6iFKs9gnFCHZga8yLcYcGaYOBIoYtaKom99MuGBoosayWt/Twh7F5A== + "web3-core" "1.7.4" + "web3-core-helpers" "1.7.4" + "web3-core-method" "1.7.4" + "web3-core-promievent" "1.7.4" + "web3-core-subscriptions" "1.7.4" + "web3-eth-abi" "1.7.4" + "web3-utils" "1.7.4" + +"web3-eth-contract@1.8.0": + "integrity" "sha512-6xeXhW2YoCrz2Ayf2Vm4srWiMOB6LawkvxWJDnUWJ8SMATg4Pgu42C/j8rz/enXbYWt2IKuj0kk8+QszxQbK+Q==" + "resolved" "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "@types/bn.js" "^5.1.0" + "web3-core" "1.8.0" + "web3-core-helpers" "1.8.0" + "web3-core-method" "1.8.0" + "web3-core-promievent" "1.8.0" + "web3-core-subscriptions" "1.8.0" + "web3-eth-abi" "1.8.0" + "web3-utils" "1.8.0" + +"web3-eth-ens@1.7.4": + "integrity" "sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA==" + "resolved" "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "content-hash" "^2.5.2" + "eth-ens-namehash" "2.0.8" + "web3-core" "1.7.4" + "web3-core-helpers" "1.7.4" + "web3-core-promievent" "1.7.4" + "web3-eth-abi" "1.7.4" + "web3-eth-contract" "1.7.4" + "web3-utils" "1.7.4" + +"web3-eth-ens@1.8.0": + "integrity" "sha512-/eFbQEwvsMOEiOhw9/iuRXCsPkqAmHHWuFOrThQkozRgcnSTRnvxkkRC/b6koiT5/HaKeUs4yQDg+/ixsIxZxA==" + "resolved" "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "content-hash" "^2.5.2" + "eth-ens-namehash" "2.0.8" + "web3-core" "1.8.0" + "web3-core-helpers" "1.8.0" + "web3-core-promievent" "1.8.0" + "web3-eth-abi" "1.8.0" + "web3-eth-contract" "1.8.0" + "web3-utils" "1.8.0" + +"web3-eth-iban@1.7.4": + "integrity" "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==" + "resolved" "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "bn.js" "^5.2.1" + "web3-utils" "1.7.4" + +"web3-eth-iban@1.8.0": + "integrity" "sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg==" + "resolved" "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "bn.js" "^5.2.1" + "web3-utils" "1.8.0" + +"web3-eth-personal@1.7.4": + "integrity" "sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g==" + "resolved" "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "@types/node" "^12.12.6" + "web3-core" "1.7.4" + "web3-core-helpers" "1.7.4" + "web3-core-method" "1.7.4" + "web3-net" "1.7.4" + "web3-utils" "1.7.4" + +"web3-eth-personal@1.8.0": + "integrity" "sha512-L7FT4nR3HmsfZyIAhFpEctKkYGOjRC2h6iFKs9gnFCHZga8yLcYcGaYOBIoYtaKom99MuGBoosayWt/Twh7F5A==" + "resolved" "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.0.tgz" + "version" "1.8.0" dependencies: "@types/node" "^12.12.6" - web3-core "1.8.0" - web3-core-helpers "1.8.0" - web3-core-method "1.8.0" - web3-net "1.8.0" - web3-utils "1.8.0" - -web3-eth@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.0.tgz" - integrity sha512-hist52os3OT4TQFB/GxPSMxTh3995sz6LPvQpPvj7ktSbpg9RNSFaSsPlCT63wUAHA3PZb1FemkAIeQM5t72Lw== - dependencies: - web3-core "1.8.0" - web3-core-helpers "1.8.0" - web3-core-method "1.8.0" - web3-core-subscriptions "1.8.0" - web3-eth-abi "1.8.0" - web3-eth-accounts "1.8.0" - web3-eth-contract "1.8.0" - web3-eth-ens "1.8.0" - web3-eth-iban "1.8.0" - web3-eth-personal "1.8.0" - web3-net "1.8.0" - web3-utils "1.8.0" - -web3-net@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-net/-/web3-net-1.8.0.tgz" - integrity sha512-kX6EAacK7QrOe7DOh0t5yHS5q2kxZmTCxPVwSz9io9xBeE4n4UhmzGJ/VfhP2eM3OPKYeypcR3LEO6zZ8xn2vw== - dependencies: - web3-core "1.8.0" - web3-core-method "1.8.0" - web3-utils "1.8.0" - -web3-providers-http@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.0.tgz" - integrity sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw== - dependencies: - abortcontroller-polyfill "^1.7.3" - cross-fetch "^3.1.4" - es6-promise "^4.2.8" - web3-core-helpers "1.8.0" - -web3-providers-ipc@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.0.tgz" - integrity sha512-tAXHtVXNUOgehaBU8pzAlB3qhjn/PRpjdzEjzHNFqtRRTwzSEKOJxFeEhaUA4FzHnTlbnrs8ujHWUitcp1elfg== - dependencies: - oboe "2.1.5" - web3-core-helpers "1.8.0" - -web3-providers-ws@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.0.tgz" - integrity sha512-bcZtSifsqyJxwkfQYamfdIRp4nhj9eJd7cxHg1uUkfLJK125WP96wyJL1xbPt7qt0MpfnTFn8/UuIqIB6nFENg== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.8.0" - websocket "^1.0.32" - -web3-shh@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.0.tgz" - integrity sha512-DNRgSa9Jf9xYFUGKSMylrf+zt3MPjhI2qF+UWX07o0y3+uf8zalDGiJOWvIS4upAsdPiKKVJ7co+Neof47OMmg== - dependencies: - web3-core "1.8.0" - web3-core-method "1.8.0" - web3-core-subscriptions "1.8.0" - web3-net "1.8.0" - -web3-utils@1.8.0, web3-utils@^1.7.1, web3-utils@^1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz" - integrity sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ== - dependencies: - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -web3@^1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz" - integrity sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA== - dependencies: - web3-bzz "1.8.0" - web3-core "1.8.0" - web3-eth "1.8.0" - web3-eth-personal "1.8.0" - web3-net "1.8.0" - web3-shh "1.8.0" - web3-utils "1.8.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -websocket@^1.0.32: - version "1.0.34" - resolved "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - 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.0" - resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== - -which-typed-array@^1.1.2: - version "1.1.8" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz" - integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.20.0" - for-each "^0.3.3" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.9" - -which@1.3.1, which@^1.2.9: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@2.0.2, which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -wordwrapjs@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz" - integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== - dependencies: - reduce-flatten "^2.0.0" - typical "^5.2.0" - -workerpool@6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz" - integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== - -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - 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" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -write-json-file@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz" - integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.15" - make-dir "^2.1.0" - pify "^4.0.1" - sort-keys "^2.0.0" - write-file-atomic "^2.4.2" - -write-json-file@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz" - integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== - dependencies: - detect-indent "^6.0.0" - graceful-fs "^4.1.15" - is-plain-obj "^2.0.0" - make-dir "^3.0.0" - sort-keys "^4.0.0" - write-file-atomic "^3.0.0" - -write-pkg@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz" - integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== - dependencies: - sort-keys "^2.0.0" - type-fest "^0.4.1" - write-json-file "^3.2.0" - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@^3.0.0: - version "3.3.3" - resolved "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xhr-request-promise@^0.1.2: - version "0.1.3" - resolved "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz" - integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== - dependencies: - xhr-request "^1.1.0" - -xhr-request@^1.0.1, xhr-request@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz" - integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== - dependencies: - buffer-to-arraybuffer "^0.0.5" - object-assign "^4.1.1" - query-string "^5.0.1" - simple-get "^2.7.0" - timed-out "^4.0.1" - url-set-query "^1.0.0" - xhr "^2.0.4" - -xhr@^2.0.4, xhr@^2.3.3: - version "2.6.0" - resolved "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz" - integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== - dependencies: - global "~4.4.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - -xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz" - integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== - -xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" - 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" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0, yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@20.2.4, yargs-parser@^20.2.2: - version "20.2.4" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@21.0.1, yargs-parser@^21.0.0: - version "21.0.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== - -yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.0" - -yargs@13.3.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.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 "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@16.2.0, yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.3.1, yargs@^17.4.0: - version "17.6.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz" - integrity sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g== - 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.0.0" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + "web3-core" "1.8.0" + "web3-core-helpers" "1.8.0" + "web3-core-method" "1.8.0" + "web3-net" "1.8.0" + "web3-utils" "1.8.0" + +"web3-eth@1.7.4": + "integrity" "sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug==" + "resolved" "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "web3-core" "1.7.4" + "web3-core-helpers" "1.7.4" + "web3-core-method" "1.7.4" + "web3-core-subscriptions" "1.7.4" + "web3-eth-abi" "1.7.4" + "web3-eth-accounts" "1.7.4" + "web3-eth-contract" "1.7.4" + "web3-eth-ens" "1.7.4" + "web3-eth-iban" "1.7.4" + "web3-eth-personal" "1.7.4" + "web3-net" "1.7.4" + "web3-utils" "1.7.4" + +"web3-eth@1.8.0": + "integrity" "sha512-hist52os3OT4TQFB/GxPSMxTh3995sz6LPvQpPvj7ktSbpg9RNSFaSsPlCT63wUAHA3PZb1FemkAIeQM5t72Lw==" + "resolved" "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "web3-core" "1.8.0" + "web3-core-helpers" "1.8.0" + "web3-core-method" "1.8.0" + "web3-core-subscriptions" "1.8.0" + "web3-eth-abi" "1.8.0" + "web3-eth-accounts" "1.8.0" + "web3-eth-contract" "1.8.0" + "web3-eth-ens" "1.8.0" + "web3-eth-iban" "1.8.0" + "web3-eth-personal" "1.8.0" + "web3-net" "1.8.0" + "web3-utils" "1.8.0" + +"web3-net@1.7.4": + "integrity" "sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg==" + "resolved" "https://registry.npmjs.org/web3-net/-/web3-net-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "web3-core" "1.7.4" + "web3-core-method" "1.7.4" + "web3-utils" "1.7.4" + +"web3-net@1.8.0": + "integrity" "sha512-kX6EAacK7QrOe7DOh0t5yHS5q2kxZmTCxPVwSz9io9xBeE4n4UhmzGJ/VfhP2eM3OPKYeypcR3LEO6zZ8xn2vw==" + "resolved" "https://registry.npmjs.org/web3-net/-/web3-net-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "web3-core" "1.8.0" + "web3-core-method" "1.8.0" + "web3-utils" "1.8.0" + +"web3-provider-engine@16.0.3": + "integrity" "sha512-Q3bKhGqLfMTdLvkd4TtkGYJHcoVQ82D1l8jTIwwuJp/sAp7VHnRYb9YJ14SW/69VMWoOhSpPLZV2tWb9V0WJoA==" + "resolved" "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-16.0.3.tgz" + "version" "16.0.3" + dependencies: + "@ethereumjs/tx" "^3.3.0" + "async" "^2.5.0" + "backoff" "^2.5.0" + "clone" "^2.0.0" + "cross-fetch" "^2.1.0" + "eth-block-tracker" "^4.4.2" + "eth-json-rpc-filters" "^4.2.1" + "eth-json-rpc-infura" "^5.1.0" + "eth-json-rpc-middleware" "^6.0.0" + "eth-rpc-errors" "^3.0.0" + "eth-sig-util" "^1.4.2" + "ethereumjs-block" "^1.2.2" + "ethereumjs-util" "^5.1.5" + "ethereumjs-vm" "^2.3.4" + "json-stable-stringify" "^1.0.1" + "promise-to-callback" "^1.0.0" + "readable-stream" "^2.2.9" + "request" "^2.85.0" + "semaphore" "^1.0.3" + "ws" "^5.1.1" + "xhr" "^2.2.0" + "xtend" "^4.0.1" + +"web3-providers-http@1.7.4": + "integrity" "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==" + "resolved" "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "web3-core-helpers" "1.7.4" + "xhr2-cookies" "1.1.0" + +"web3-providers-http@1.8.0": + "integrity" "sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw==" + "resolved" "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "abortcontroller-polyfill" "^1.7.3" + "cross-fetch" "^3.1.4" + "es6-promise" "^4.2.8" + "web3-core-helpers" "1.8.0" + +"web3-providers-ipc@1.7.4": + "integrity" "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==" + "resolved" "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "oboe" "2.1.5" + "web3-core-helpers" "1.7.4" + +"web3-providers-ipc@1.8.0": + "integrity" "sha512-tAXHtVXNUOgehaBU8pzAlB3qhjn/PRpjdzEjzHNFqtRRTwzSEKOJxFeEhaUA4FzHnTlbnrs8ujHWUitcp1elfg==" + "resolved" "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "oboe" "2.1.5" + "web3-core-helpers" "1.8.0" + +"web3-providers-ws@1.7.4": + "integrity" "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==" + "resolved" "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "eventemitter3" "4.0.4" + "web3-core-helpers" "1.7.4" + "websocket" "^1.0.32" + +"web3-providers-ws@1.8.0": + "integrity" "sha512-bcZtSifsqyJxwkfQYamfdIRp4nhj9eJd7cxHg1uUkfLJK125WP96wyJL1xbPt7qt0MpfnTFn8/UuIqIB6nFENg==" + "resolved" "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "eventemitter3" "4.0.4" + "web3-core-helpers" "1.8.0" + "websocket" "^1.0.32" + +"web3-shh@1.7.4": + "integrity" "sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A==" + "resolved" "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "web3-core" "1.7.4" + "web3-core-method" "1.7.4" + "web3-core-subscriptions" "1.7.4" + "web3-net" "1.7.4" + +"web3-shh@1.8.0": + "integrity" "sha512-DNRgSa9Jf9xYFUGKSMylrf+zt3MPjhI2qF+UWX07o0y3+uf8zalDGiJOWvIS4upAsdPiKKVJ7co+Neof47OMmg==" + "resolved" "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "web3-core" "1.8.0" + "web3-core-method" "1.8.0" + "web3-core-subscriptions" "1.8.0" + "web3-net" "1.8.0" + +"web3-utils@^1.3.0", "web3-utils@^1.7.1", "web3-utils@^1.8.0", "web3-utils@1.8.0": + "integrity" "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==" + "resolved" "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "bn.js" "^5.2.1" + "ethereum-bloom-filters" "^1.0.6" + "ethereumjs-util" "^7.1.0" + "ethjs-unit" "0.1.6" + "number-to-bn" "1.7.0" + "randombytes" "^2.1.0" + "utf8" "3.0.0" + +"web3-utils@1.7.4": + "integrity" "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==" + "resolved" "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "bn.js" "^5.2.1" + "ethereum-bloom-filters" "^1.0.6" + "ethereumjs-util" "^7.1.0" + "ethjs-unit" "0.1.6" + "number-to-bn" "1.7.0" + "randombytes" "^2.1.0" + "utf8" "3.0.0" + +"web3@*": + "integrity" "sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA==" + "resolved" "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "web3-bzz" "1.8.0" + "web3-core" "1.8.0" + "web3-eth" "1.8.0" + "web3-eth-personal" "1.8.0" + "web3-net" "1.8.0" + "web3-shh" "1.8.0" + "web3-utils" "1.8.0" + +"web3@^1.0.0-beta.36", "web3@1.7.4": + "integrity" "sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A==" + "resolved" "https://registry.npmjs.org/web3/-/web3-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "web3-bzz" "1.7.4" + "web3-core" "1.7.4" + "web3-eth" "1.7.4" + "web3-eth-personal" "1.7.4" + "web3-net" "1.7.4" + "web3-shh" "1.7.4" + "web3-utils" "1.7.4" + +"web3@^1.8.0": + "integrity" "sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA==" + "resolved" "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "web3-bzz" "1.8.0" + "web3-core" "1.8.0" + "web3-eth" "1.8.0" + "web3-eth-personal" "1.8.0" + "web3-net" "1.8.0" + "web3-shh" "1.8.0" + "web3-utils" "1.8.0" + +"webidl-conversions@^3.0.0": + "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + "version" "3.0.1" + +"websocket@^1.0.32": + "integrity" "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==" + "resolved" "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz" + "version" "1.0.34" + dependencies: + "bufferutil" "^4.0.1" + "debug" "^2.2.0" + "es5-ext" "^0.10.50" + "typedarray-to-buffer" "^3.1.5" + "utf-8-validate" "^5.0.2" + "yaeti" "^0.0.6" + +"whatwg-fetch@^2.0.4": + "integrity" "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + "resolved" "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz" + "version" "2.0.4" + +"whatwg-url@^5.0.0": + "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "tr46" "~0.0.3" + "webidl-conversions" "^3.0.0" + +"which-boxed-primitive@^1.0.2": + "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" + "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + "version" "1.0.2" + 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": + "integrity" "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" + "version" "2.0.0" + +"which-typed-array@^1.1.2": + "integrity" "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==" + "resolved" "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz" + "version" "1.1.8" + dependencies: + "available-typed-arrays" "^1.0.5" + "call-bind" "^1.0.2" + "es-abstract" "^1.20.0" + "for-each" "^0.3.3" + "has-tostringtag" "^1.0.0" + "is-typed-array" "^1.1.9" + +"which@^1.1.1": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"which@^1.2.9": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"which@^1.3.1": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"which@^2.0.1", "which@^2.0.2", "which@2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"which@1.3.1": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"wide-align@^1.1.5": + "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "string-width" "^1.0.2 || 2 || 3 || 4" + +"wide-align@1.1.3": + "integrity" "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "string-width" "^1.0.2 || 2" + +"word-wrap@^1.2.3", "word-wrap@~1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" + +"wordwrap@^1.0.0": + "integrity" "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + "resolved" "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + "version" "1.0.0" + +"wordwrapjs@^4.0.0": + "integrity" "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==" + "resolved" "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "reduce-flatten" "^2.0.0" + "typical" "^5.2.0" + +"workerpool@6.2.0": + "integrity" "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz" + "version" "6.2.0" + +"workerpool@6.2.1": + "integrity" "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" + "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" + "version" "6.2.1" + +"wrap-ansi@^5.1.0": + "integrity" "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "ansi-styles" "^3.2.0" + "string-width" "^3.0.0" + "strip-ansi" "^5.0.0" + +"wrap-ansi@^6.2.0": + "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrappy@1": + "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"write-file-atomic@^2.4.2": + "integrity" "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" + "version" "2.4.3" + dependencies: + "graceful-fs" "^4.1.11" + "imurmurhash" "^0.1.4" + "signal-exit" "^3.0.2" + +"write-file-atomic@^3.0.0": + "integrity" "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "imurmurhash" "^0.1.4" + "is-typedarray" "^1.0.0" + "signal-exit" "^3.0.2" + "typedarray-to-buffer" "^3.1.5" + +"write-file-atomic@^4.0.0", "write-file-atomic@^4.0.1": + "integrity" "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "imurmurhash" "^0.1.4" + "signal-exit" "^3.0.7" + +"write-json-file@^3.2.0": + "integrity" "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==" + "resolved" "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "detect-indent" "^5.0.0" + "graceful-fs" "^4.1.15" + "make-dir" "^2.1.0" + "pify" "^4.0.1" + "sort-keys" "^2.0.0" + "write-file-atomic" "^2.4.2" + +"write-json-file@^4.3.0": + "integrity" "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==" + "resolved" "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "detect-indent" "^6.0.0" + "graceful-fs" "^4.1.15" + "is-plain-obj" "^2.0.0" + "make-dir" "^3.0.0" + "sort-keys" "^4.0.0" + "write-file-atomic" "^3.0.0" + +"write-pkg@^4.0.0": + "integrity" "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==" + "resolved" "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "sort-keys" "^2.0.0" + "type-fest" "^0.4.1" + "write-json-file" "^3.2.0" + +"ws@^3.0.0": + "integrity" "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==" + "resolved" "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz" + "version" "3.3.3" + dependencies: + "async-limiter" "~1.0.0" + "safe-buffer" "~5.1.0" + "ultron" "~1.1.0" + +"ws@^5.1.1": + "integrity" "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==" + "resolved" "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz" + "version" "5.2.3" + dependencies: + "async-limiter" "~1.0.0" + +"ws@^7.4.6": + "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + "version" "7.5.9" + +"ws@7.4.6": + "integrity" "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" + "version" "7.4.6" + +"xhr-request-promise@^0.1.2": + "integrity" "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==" + "resolved" "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz" + "version" "0.1.3" + dependencies: + "xhr-request" "^1.1.0" + +"xhr-request@^1.0.1", "xhr-request@^1.1.0": + "integrity" "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==" + "resolved" "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "buffer-to-arraybuffer" "^0.0.5" + "object-assign" "^4.1.1" + "query-string" "^5.0.1" + "simple-get" "^2.7.0" + "timed-out" "^4.0.1" + "url-set-query" "^1.0.0" + "xhr" "^2.0.4" + +"xhr@^2.0.4", "xhr@^2.2.0", "xhr@^2.3.3": + "integrity" "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==" + "resolved" "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz" + "version" "2.6.0" + dependencies: + "global" "~4.4.0" + "is-function" "^1.0.1" + "parse-headers" "^2.0.0" + "xtend" "^4.0.0" + +"xhr2-cookies@1.1.0": + "integrity" "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==" + "resolved" "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "cookiejar" "^2.1.1" + +"xmlhttprequest@1.8.0": + "integrity" "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==" + "resolved" "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz" + "version" "1.8.0" + +"xtend@^4.0.0", "xtend@^4.0.1", "xtend@~4.0.0", "xtend@~4.0.1": + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" + +"xtend@~2.1.1": + "integrity" "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "object-keys" "~0.4.0" + +"y18n@^4.0.0": + "integrity" "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" + "version" "4.0.3" + +"y18n@^5.0.5": + "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + "version" "5.0.8" + +"yaeti@^0.0.6": + "integrity" "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" + "resolved" "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" + "version" "0.0.6" + +"yallist@^3.0.0", "yallist@^3.1.1": + "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + "version" "3.1.1" + +"yallist@^3.0.2": + "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + "version" "3.1.1" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yaml@^1.10.0", "yaml@^1.10.2": + "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + "version" "1.10.2" + +"yargs-parser@^13.1.0": + "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" + "version" "13.1.2" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs-parser@^13.1.2", "yargs-parser@13.1.2": + "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" + "version" "13.1.2" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs-parser@^20.2.2": + "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + "version" "20.2.9" + +"yargs-parser@^20.2.3": + "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + "version" "20.2.9" + +"yargs-parser@^21.0.0": + "integrity" "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + "version" "21.1.1" + +"yargs-parser@20.2.4": + "integrity" "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" + "version" "20.2.4" + +"yargs-parser@21.0.1": + "integrity" "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" + "version" "21.0.1" + +"yargs-unparser@1.6.0": + "integrity" "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==" + "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz" + "version" "1.6.0" + dependencies: + "flat" "^4.1.0" + "lodash" "^4.17.15" + "yargs" "^13.3.0" + +"yargs-unparser@2.0.0": + "integrity" "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==" + "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "camelcase" "^6.0.0" + "decamelize" "^4.0.0" + "flat" "^5.0.2" + "is-plain-obj" "^2.1.0" + +"yargs@^13.3.0", "yargs@13.3.2": + "integrity" "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" + "version" "13.3.2" + dependencies: + "cliui" "^5.0.0" + "find-up" "^3.0.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" "^3.0.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^13.1.2" + +"yargs@^16.2.0", "yargs@16.2.0": + "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + "version" "16.2.0" + dependencies: + "cliui" "^7.0.2" + "escalade" "^3.1.1" + "get-caller-file" "^2.0.5" + "require-directory" "^2.1.1" + "string-width" "^4.2.0" + "y18n" "^5.0.5" + "yargs-parser" "^20.2.2" + +"yargs@^17.3.1": + "integrity" "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz" + "version" "17.6.0" + 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.0.0" + +"yargs@^17.4.0": + "integrity" "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz" + "version" "17.6.0" + 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.0.0" + +"yargs@13.2.4": + "integrity" "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz" + "version" "13.2.4" + dependencies: + "cliui" "^5.0.0" + "find-up" "^3.0.0" + "get-caller-file" "^2.0.1" + "os-locale" "^3.1.0" + "require-directory" "^2.1.1" + "require-main-filename" "^2.0.0" + "set-blocking" "^2.0.0" + "string-width" "^3.0.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^13.1.0" + +"yn@3.1.1": + "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + "version" "3.1.1" + +"yocto-queue@^0.1.0": + "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + "version" "0.1.0" From 2c6bc7e8dd3cdf1740262b720ed16932893763b5 Mon Sep 17 00:00:00 2001 From: talha Date: Thu, 6 Oct 2022 14:22:38 +0500 Subject: [PATCH 0174/1247] single provider changes --- packages/account-abstraction/package.json | 1 + .../account-abstraction/src/BaseWalletAPI.ts | 121 ++++++++++-------- .../src/DeterministicDeployer.ts | 104 --------------- packages/account-abstraction/src/Provider.ts | 16 ++- .../src/SmartAccountAPI.ts | 38 ++---- .../src/contracts/EntryPointContract.ts | 6 +- .../v1.0.0/EntryPointEthersContract.ts | 9 +- .../v1.0.1/EntryPointEthersContract.ts | 10 +- packages/ethers-lib/src/index.ts | 4 +- packages/smart-account/src/SmartAccount.ts | 42 +++++- packages/transactions/src/contract-utils.ts | 8 +- 11 files changed, 169 insertions(+), 190 deletions(-) delete mode 100644 packages/account-abstraction/src/DeterministicDeployer.ts diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index 44c7a2ca2..f321d40ef 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -51,6 +51,7 @@ }, "devDependencies": { "@biconomy-sdk/common": "*", + "@biconomy-sdk/transactions": "*", "@biconomy-sdk/core-types": "*", "@biconomy-sdk/ethers-lib": "*", "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index 66cb2018d..d890b43d0 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -1,15 +1,17 @@ -import { ethers, BigNumber, BigNumberish } from 'ethers' +import { BigNumber, BigNumberish } from 'ethers' import { Provider } from '@ethersproject/providers' -import { - EntryPoint, EntryPoint__factory, - UserOperationStruct -} from '@account-abstraction/contracts' +import { UserOperationStruct } from '@account-abstraction/contracts' + +import { EntryPointContractV101 } from '@biconomy-sdk/ethers-lib' import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp' import { resolveProperties } from 'ethers/lib/utils' import { PaymasterAPI } from './PaymasterAPI' import { getRequestId } from '@biconomy-sdk/common' - +import { ContractUtils } from '@biconomy-sdk/transactions' +import { + SmartWalletContract, +} from '@biconomy-sdk/core-types' /** * Base class for all Smart Wallet ERC-4337 Clients to implement. * Subclass should inherit 5 methods to support a specific wallet contract: @@ -24,20 +26,25 @@ import { getRequestId } from '@biconomy-sdk/common' * - createSignedUserOp - helper to call the above createUnsignedUserOp, and then extract the requestId and sign it */ - -// Note: Resembles SmartAccount methods itself. Could be sperated out across smart-account & || transactions || new package and reclaim +// Note: Resembles SmartAccount methods itself. Could be sperated out across smart-account & || transactions || new package and reclaim export abstract class BaseWalletAPI { private senderAddress!: string private isPhantom = true // entryPoint connected to "zero" address. allowed to make static calls (e.g. to getSenderAddress) - private readonly entryPointView: EntryPoint + // private readonly entryPointView: EntryPoint /** * subclass MAY initialize to support custom paymaster */ paymasterAPI?: PaymasterAPI + /** + * our wallet contract. + * should support the "execFromSingleton" and "nonce" methods + */ + walletContract?: any + /** * base constructor. * subclass SHOULD add parameters that define the owner (signer) of this wallet @@ -45,16 +52,27 @@ export abstract class BaseWalletAPI { * @param entryPointAddress - the entryPoint to send requests through (used to calculate the request-id, and for gas estimations) * @param walletAddress. may be empty for new wallet (using factory to determine address) */ - protected constructor ( + protected constructor( readonly provider: Provider, - readonly entryPointAddress: string, + readonly contractUtils: ContractUtils, + readonly entryPoint: EntryPointContractV101, readonly walletAddress?: string ) { // factory "connect" define the contract address. the contract "connect" defines the "from" address. - this.entryPointView = EntryPoint__factory.connect(entryPointAddress, provider).connect(ethers.constants.AddressZero) + // this.entryPointView = EntryPoint__factory.connect(entryPointAddress, provider).connect(ethers.constants.AddressZero) } - async init (): Promise { + async _getWalletContract(): Promise { + if (this.walletContract == null) { + let walletContract = this.contractUtils + .getSmartWalletContract((await this.provider.getNetwork()).chainId) + .getContract() + walletContract = walletContract.attach(await this.getWalletAddress()) + } + return this.walletContract + } + + async init(): Promise { await this.getWalletAddress() return this } @@ -63,12 +81,12 @@ export abstract class BaseWalletAPI { * return the value to put into the "initCode" field, if the wallet is not yet deployed. * this value holds the "factory" address, followed by this wallet's information */ - abstract getWalletInitCode (): Promise + abstract getWalletInitCode(): Promise /** * return current wallet's nonce. */ - abstract getNonce (): Promise + abstract getNonce(batchId: number): Promise /** * encode the call from entryPoint through our wallet to the target contract. @@ -76,18 +94,18 @@ export abstract class BaseWalletAPI { * @param value * @param data */ - abstract encodeExecute (target: string, value: BigNumberish, data: string): Promise + abstract encodeExecute(target: string, value: BigNumberish, data: string): Promise /** * sign a userOp's hash (requestId). * @param requestId */ - abstract signRequestId (requestId: string): Promise + abstract signRequestId(requestId: string): Promise /** * check if the wallet is already deployed. */ - async checkWalletPhantom (): Promise { + async checkWalletPhantom(): Promise { if (!this.isPhantom) { // already deployed. no need to check anymore. return this.isPhantom @@ -105,18 +123,18 @@ export abstract class BaseWalletAPI { /** * calculate the wallet address even before it is deployed */ - async getCounterFactualAddress (): Promise { - const initCode = this.getWalletInitCode() + async getCounterFactualAddress(): Promise { + const initCode = await this.getWalletInitCode() // use entryPoint to query wallet address (factory can provide a helper method to do the same, but // this method attempts to be generic - return await this.entryPointView.callStatic.getSenderAddress(initCode) + return await this.entryPoint.callStatic.getSenderAddress(initCode) } /** * return initCode value to into the UserOp. * (either deployment code, or empty hex if contract already deployed) */ - async getInitCode (): Promise { + async getInitCode(): Promise { if (await this.checkWalletPhantom()) { return await this.getWalletInitCode() } @@ -127,7 +145,7 @@ export abstract class BaseWalletAPI { * return maximum gas used for verification. * NOTE: createUnsignedUserOp will add to this value the cost of creation, if the wallet is not yet created. */ - async getVerificationGasLimit (): Promise { + async getVerificationGasLimit(): Promise { return 100000 } @@ -135,7 +153,7 @@ export abstract class BaseWalletAPI { * should cover cost of putting calldata on-chain, and some overhead. * actual overhead depends on the expected bundle size */ - async getPreVerificationGas (userOp: Partial): Promise { + async getPreVerificationGas(userOp: Partial): Promise { console.log(userOp) const bundleSize = 1 const cost = 21000 @@ -143,20 +161,28 @@ export abstract class BaseWalletAPI { return Math.floor(cost / bundleSize) } - async encodeUserOpCallDataAndGasLimit (detailsForUserOp: TransactionDetailsForUserOp): Promise<{ callData: string, callGasLimit: BigNumber }> { - function parseNumber (a: any): BigNumber | null { + async encodeUserOpCallDataAndGasLimit( + detailsForUserOp: TransactionDetailsForUserOp + ): Promise<{ callData: string; callGasLimit: BigNumber }> { + function parseNumber(a: any): BigNumber | null { if (a == null || a === '') return null return BigNumber.from(a.toString()) } const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0) - const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data) + const callData = (await this._getWalletContract()).encode('execFromEntryPoint', [ + detailsForUserOp.target, + value, + detailsForUserOp.data + ]) - const callGasLimit = parseNumber(detailsForUserOp.gasLimit) ?? await this.provider.estimateGas({ - from: this.entryPointAddress, - to: this.getWalletAddress(), - data: callData - }) + const callGasLimit = + parseNumber(detailsForUserOp.gasLimit) ?? + (await this.provider.estimateGas({ + from: this.entryPoint.address, + to: this.getWalletAddress(), + data: callData + })) return { callData, @@ -169,17 +195,17 @@ export abstract class BaseWalletAPI { * This value matches entryPoint.getRequestId (calculated off-chain, to avoid a view call) * @param userOp userOperation, (signature field ignored) */ - async getRequestId (userOp: UserOperationStruct): Promise { + async getRequestId(userOp: UserOperationStruct): Promise { const op = await resolveProperties(userOp) - const chainId = await this.provider.getNetwork().then(net => net.chainId) - return getRequestId(op, this.entryPointAddress, chainId) + const chainId = await this.provider.getNetwork().then((net) => net.chainId) + return getRequestId(op, this.entryPoint.address, chainId) } /** * return the wallet's address. * this value is valid even before deploying the wallet. */ - async getWalletAddress (): Promise { + async getWalletAddress(): Promise { if (this.senderAddress == null) { if (this.walletAddress != null) { this.senderAddress = this.walletAddress @@ -196,24 +222,18 @@ export abstract class BaseWalletAPI { * - if gas or nonce are missing, read them from the chain (note that we can't fill gaslimit before the wallet is created) * @param info */ - async createUnsignedUserOp (info: TransactionDetailsForUserOp): Promise { - const { - callData, - callGasLimit - } = await this.encodeUserOpCallDataAndGasLimit(info) + async createUnsignedUserOp(info: TransactionDetailsForUserOp): Promise { + const { callData, callGasLimit } = await this.encodeUserOpCallDataAndGasLimit(info) const initCode = await this.getInitCode() let verificationGasLimit = BigNumber.from(await this.getVerificationGasLimit()) if (initCode.length > 2) { // add creation to required verification gas - const initGas = await this.entryPointView.estimateGas.getSenderAddress(initCode) + const initGas = await this.entryPoint.estimateGas.getSenderAddress(initCode) verificationGasLimit = verificationGasLimit.add(initGas) } - let { - maxFeePerGas, - maxPriorityFeePerGas - } = info + let { maxFeePerGas, maxPriorityFeePerGas } = info if (maxFeePerGas == null || maxPriorityFeePerGas == null) { const feeData = await this.provider.getFeeData() if (maxFeePerGas == null) { @@ -226,7 +246,7 @@ export abstract class BaseWalletAPI { const partialUserOp: any = { sender: this.getWalletAddress(), - nonce: this.getNonce(), + nonce: this.getNonce(0), // TODO: add batchid as param initCode, callData, callGasLimit, @@ -235,7 +255,8 @@ export abstract class BaseWalletAPI { maxPriorityFeePerGas } - partialUserOp.paymasterAndData = this.paymasterAPI == null ? '0x' : await this.paymasterAPI.getPaymasterAndData(partialUserOp) + partialUserOp.paymasterAndData = + this.paymasterAPI == null ? '0x' : await this.paymasterAPI.getPaymasterAndData(partialUserOp) return { ...partialUserOp, preVerificationGas: this.getPreVerificationGas(partialUserOp), @@ -247,7 +268,7 @@ export abstract class BaseWalletAPI { * Sign the filled userOp. * @param userOp the UserOperation to sign (with signature field ignored) */ - async signUserOp (userOp: UserOperationStruct): Promise { + async signUserOp(userOp: UserOperationStruct): Promise { const requestId = await this.getRequestId(userOp) const signature = this.signRequestId(requestId) return { @@ -260,7 +281,7 @@ export abstract class BaseWalletAPI { * helper method: create and sign a user operation. * @param info transaction details for the userOp */ - async createSignedUserOp (info: TransactionDetailsForUserOp): Promise { + async createSignedUserOp(info: TransactionDetailsForUserOp): Promise { return await this.signUserOp(await this.createUnsignedUserOp(info)) } } diff --git a/packages/account-abstraction/src/DeterministicDeployer.ts b/packages/account-abstraction/src/DeterministicDeployer.ts deleted file mode 100644 index d93d14df2..000000000 --- a/packages/account-abstraction/src/DeterministicDeployer.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { ethers } from "hardhat"; -import { BigNumber, BigNumberish } from 'ethers' -import { hexConcat, hexlify, hexZeroPad, keccak256 } from 'ethers/lib/utils' -import { TransactionRequest } from '@ethersproject/abstract-provider' - -/** - * wrapper class for Arachnid's deterministic deployer - * (deterministic deployer used by 'hardhat-deployer'. generates the same addresses as "hardhat-deploy") - */ - -// TODO :: Updates based on https://github.com/bcnmy/account-abstraction/tree/develop-chirag -export class DeterministicDeployer { - /** - * return the address this code will get deployed to. - * @param ctrCode constructor code to pass to CREATE2 - * @param salt optional salt. defaults to zero - */ - static async getAddress (ctrCode: string, salt: BigNumberish = 0): Promise { - return await DeterministicDeployer.instance.getDeterministicDeployAddress(ctrCode, salt) - } - - /** - * deploy the contract, unless already deployed - * @param ctrCode constructor code to pass to CREATE2 - * @param salt optional salt. defaults to zero - * @return the deployed address - */ - static async deploy (ctrCode: string, salt: BigNumberish = 0): Promise { - return await DeterministicDeployer.instance.deterministicDeploy(ctrCode, salt) - } - - // from: https://github.com/Arachnid/deterministic-deployment-proxy - proxyAddress = '0x4e59b44847b379578588920ca78fbf26c0b4956c' - deploymentTransaction = '0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222' - deploymentSignerAddress = '0x3fab184622dc19b6109349b94811493bf2a45362' - deploymentGasPrice = 100e9 - deploymentGasLimit = 100000 - - constructor (readonly provider = ethers.provider) { - } - - async isContractDeployed (address: string): Promise { - return await this.provider.getCode(address).then((code: string | any[]) => code.length > 2) - } - - async isDeployerDeployed (): Promise { - return await this.isContractDeployed(this.proxyAddress) - } - - async deployDeployer (): Promise { - if (await this.isContractDeployed(this.proxyAddress)) { - return - } - const bal = await this.provider.getBalance(this.deploymentSignerAddress) - const neededBalance = BigNumber.from(this.deploymentGasLimit).mul(this.deploymentGasPrice) - const signer = this.provider.getSigner() - if (bal.lt(neededBalance)) { - await signer.sendTransaction({ - to: this.deploymentSignerAddress, - value: neededBalance, - gasLimit: this.deploymentGasLimit - }) - } - await this.provider.send('eth_sendRawTransaction', [this.deploymentTransaction]) - if (!await this.isContractDeployed(this.proxyAddress)) { - throw new Error('raw TX didn\'t deploy deployer!') - } - } - - async getDeployTransaction (ctrCode: string, salt: BigNumberish = 0): Promise { - await this.deployDeployer() - const saltEncoded = hexZeroPad(hexlify(salt), 32) - return { - to: this.proxyAddress, - data: hexConcat([ - saltEncoded, - ctrCode]) - } - } - - async getDeterministicDeployAddress (ctrCode: string, salt: BigNumberish = 0): Promise { - // this method works only before the contract is already deployed: - // return await this.provider.call(await this.getDeployTransaction(ctrCode, salt)) - const saltEncoded = hexZeroPad(hexlify(salt), 32) - - return '0x' + keccak256(hexConcat([ - '0xff', - this.proxyAddress, - saltEncoded, - keccak256(ctrCode) - ])).slice(-40) - } - - async deterministicDeploy (ctrCode: string, salt: BigNumberish = 0): Promise { - const addr = await this.getDeterministicDeployAddress(ctrCode, salt) - if (!await this.isContractDeployed(addr)) { - await this.provider.getSigner().sendTransaction( - await this.getDeployTransaction(ctrCode, salt)) - } - return addr - } - - static instance = new DeterministicDeployer() -} diff --git a/packages/account-abstraction/src/Provider.ts b/packages/account-abstraction/src/Provider.ts index e5f7b7bd4..24322ddc1 100644 --- a/packages/account-abstraction/src/Provider.ts +++ b/packages/account-abstraction/src/Provider.ts @@ -1,13 +1,15 @@ import { JsonRpcProvider } from '@ethersproject/providers' -import { EntryPoint__factory, SimpleWalletDeployer__factory } from '@account-abstraction/contracts' +// import { EntryPoint__factory } from '@account-abstraction/contracts' + +import { EntryPointFactoryContractV101 } from '@biconomy-sdk/ethers-lib' import { ClientConfig } from './ClientConfig' import { SmartAccountAPI } from './SmartAccountAPI' import { ERC4337EthersProvider } from './ERC4337EthersProvider' import { HttpRpcClient } from './HttpRpcClient' -import { DeterministicDeployer } from './DeterministicDeployer' import { Signer } from '@ethersproject/abstract-signer' +import { ContractUtils } from '@biconomy-sdk/transactions' // TODO: Update in the context of SmartAccount and WalletFactory aka deployer // Might need smart account state for contract addresses @@ -15,14 +17,18 @@ import { Signer } from '@ethersproject/abstract-signer' // To be used in SmartAccount to init 4337 provider export async function newProvider ( originalProvider: JsonRpcProvider, + contractUtils: ContractUtils, config: ClientConfig, - originalSigner: Signer = originalProvider.getSigner() + originalSigner: Signer = originalProvider.getSigner(), + walletAddress: string, + fallbackHandlerAddress: string, + factoryAddress: string ): Promise { - const entryPoint = new EntryPoint__factory().attach(config.entryPointAddress).connect(originalProvider) + const entryPoint = EntryPointFactoryContractV101.connect(config.entryPointAddress, originalProvider) // Initial SimpleWallet instance is not deployed and exists just for the interface // const simpleWalletDeployer = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) - const smartWalletAPI = new SmartAccountAPI(originalProvider, entryPoint.address, '', originalSigner, '', '', 0) + const smartWalletAPI = new SmartAccountAPI(originalProvider, contractUtils, entryPoint, walletAddress, originalSigner, fallbackHandlerAddress, factoryAddress, 0) const httpRpcClient = new HttpRpcClient(config.bundlerUrl, config.entryPointAddress, 31337) return await new ERC4337EthersProvider( config, diff --git a/packages/account-abstraction/src/SmartAccountAPI.ts b/packages/account-abstraction/src/SmartAccountAPI.ts index 3534149c8..2155bcda8 100644 --- a/packages/account-abstraction/src/SmartAccountAPI.ts +++ b/packages/account-abstraction/src/SmartAccountAPI.ts @@ -1,17 +1,16 @@ import { BigNumber, BigNumberish } from 'ethers' -import { - SimpleWallet, - SimpleWallet__factory, -} from '@account-abstraction/contracts' +import { EntryPointContractV101 } from '@biconomy-sdk/ethers-lib' + import { arrayify, hexConcat } from 'ethers/lib/utils' import { Signer } from '@ethersproject/abstract-signer' import { BaseWalletAPI } from './BaseWalletAPI' import { Provider } from '@ethersproject/providers' import { WalletFactoryAPI } from './WalletFactoryAPI' +import { ContractUtils } from '@biconomy-sdk/transactions' /** - * An implementation of the BaseWalletAPI using the SimpleWallet contract. + * An implementation of the BaseWalletAPI using the SmartWalletContract contract. * - contract deployer gets "entrypoint", "owner" addresses and "index" nonce * - owner signs requests using normal "Ethereum Signed Message" (ether's signer.signMessage()) * - nonce method is "nonce()" @@ -32,50 +31,39 @@ export class SmartAccountAPI extends BaseWalletAPI { * @param index nonce value used when creating multiple wallets for the same owner */ constructor ( - provider: Provider, // may be removed in further development - entryPointAddress: string, + provider: Provider, + readonly contractUtils: ContractUtils, + readonly entryPoint: EntryPointContractV101, walletAddress: string | undefined, readonly owner: Signer, readonly handlerAddress: string, readonly factoryAddress: string, readonly index = 0 ) { - super(provider, entryPointAddress, walletAddress) + super(provider, contractUtils, entryPoint, walletAddress) } - /** - * our wallet contract. - * should support the "execFromSingleton" and "nonce" methods - */ - walletContract?: SimpleWallet - factory?: string - async _getWalletContract (): Promise { - if (this.walletContract == null) { - this.walletContract = SimpleWallet__factory.connect(await this.getWalletAddress(), this.provider) - } - return this.walletContract - } - /** * return the value to put into the "initCode" field, if the wallet is not yet deployed. * this value holds the "factory" address, followed by this wallet's information */ async getWalletInitCode (): Promise { - const deployWalletCallData = WalletFactoryAPI.deployWalletTransactionCallData(this.factoryAddress, await this.owner.getAddress(), this.entryPointAddress, this.handlerAddress, 0) + const deployWalletCallData = WalletFactoryAPI.deployWalletTransactionCallData(this.factoryAddress, await this.owner.getAddress(), this.entryPoint.address, this.handlerAddress, 0) return hexConcat([ this.factoryAddress, deployWalletCallData ]) } - async getNonce (): Promise { + + async getNonce (batchId: number): Promise { if (await this.checkWalletPhantom()) { return BigNumber.from(0) } const walletContract = await this._getWalletContract() - return await walletContract.nonce() + return await walletContract.getNonce(batchId) } /** * encode a method call from entryPoint to our contract @@ -85,7 +73,7 @@ export class SmartAccountAPI extends BaseWalletAPI { */ async encodeExecute (target: string, value: BigNumberish, data: string): Promise { const walletContract = await this._getWalletContract() - return walletContract.interface.encodeFunctionData( + return walletContract.getInterface().encodeFunctionData( 'execFromEntryPoint', [ target, diff --git a/packages/core-types/src/contracts/EntryPointContract.ts b/packages/core-types/src/contracts/EntryPointContract.ts index 6af1f9fc5..980c6a77d 100644 --- a/packages/core-types/src/contracts/EntryPointContract.ts +++ b/packages/core-types/src/contracts/EntryPointContract.ts @@ -1,8 +1,12 @@ import { UserOperation } from '../types' import { ITransactionResult } from '../transaction.types' import { Contract } from '@ethersproject/contracts' - +import { + BytesLike, +} from "ethers"; export interface EntryPointContract { + getAddress(): string + getSenderAddress(initCode: BytesLike): Promise getContract(): Contract handleOps(userOperations: UserOperation[], beneficiary: string): Promise simulateValidation(userOperation: UserOperation, offChainSigCheck: boolean): Promise diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts index 07838e9d1..c3de96d8c 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts @@ -5,7 +5,9 @@ import { } from '../../../../typechain/src/ethers-v5/v1.0.0/EntryPointContractV100' import { toTxResult } from '../../../utils' import { Contract } from '@ethersproject/contracts' - +import { + BytesLike +} from "ethers"; class EntryPointEthersContract implements EntryPointContract { constructor(public contract: EntryPointContract_TypeChain) {} @@ -13,6 +15,11 @@ class EntryPointEthersContract implements EntryPointContract { return this.contract.address } + async getSenderAddress(initCode: BytesLike): Promise { + const resultSet = await this.contract.getSenderAddress(initCode) + return toTxResult(resultSet) + } + getContract(): Contract { return this.contract } diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts index 8e2f033e3..1b148909b 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts @@ -5,7 +5,10 @@ import { } from '../../../../typechain/src/ethers-v5/v1.0.1/EntryPointContractV101' import { toTxResult } from '../../../utils' import { Contract } from '@ethersproject/contracts' - +import { + BytesLike, + ContractTransaction, +} from "ethers"; class EntryPointEthersContract implements EntryPointContract { constructor(public contract: EntryPointContract_TypeChain) {} @@ -13,6 +16,11 @@ class EntryPointEthersContract implements EntryPointContract { return this.contract.address } + async getSenderAddress(initCode: BytesLike): Promise { + const resultSet = await this.contract.getSenderAddress(initCode) + return toTxResult(resultSet) + } + getContract(): Contract { return this.contract } diff --git a/packages/ethers-lib/src/index.ts b/packages/ethers-lib/src/index.ts index 735817887..f4761daac 100644 --- a/packages/ethers-lib/src/index.ts +++ b/packages/ethers-lib/src/index.ts @@ -20,7 +20,9 @@ export { EntryPointContractV101__factory as EntryPointFactoryContractV101 } from export { EntryPointContractV100 } from '../typechain/src/ethers-v5/v1.0.0/EntryPointContractV100' export { EntryPointContractV101 } from '../typechain/src/ethers-v5/v1.0.1/EntryPointContractV101' +import EntryPointEthersContract_v1_0_0 from './contracts/EntryPointContract/v1.0.0/EntryPointEthersContract' +import EntryPointEthersContract_v1_0_1 from './contracts/EntryPointContract/v1.0.1/EntryPointEthersContract' export default EthersAdapter -export { EthersAdapterConfig, IEthersTransactionOptions, IEthersTransactionResult } +export { EthersAdapterConfig, IEthersTransactionOptions, IEthersTransactionResult, EntryPointEthersContract_v1_0_0, EntryPointEthersContract_v1_0_1 } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 3a1c06e11..f08cfa10f 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -21,6 +21,7 @@ import { ChainId, SmartAccountContext, SmartWalletFactoryContract, + MultiSendContract, SmartWalletContract, AddressForCounterFactualWalletDto, RawTransactionType, @@ -48,9 +49,11 @@ import { // SmartAccount User Refund import { JsonRpcSender } from '@0xsequence/network' +import { JsonRpcProvider } from '@ethersproject/providers' // AA import { newProvider, ERC4337EthersProvider } from '@biconomy-sdk/account-abstraction' +import { ethers } from 'ethers' // Create an instance of Smart Account with multi-chain support. class SmartAccount { @@ -77,6 +80,8 @@ class SmartAccount { provider!: Web3Provider + jsonProvider!: JsonRpcProvider + // 4337Provider aaProvider!: ERC4337EthersProvider @@ -147,12 +152,13 @@ class SmartAccount { // Should not break if we make this wallet connected provider optional (We'd have JsonRpcProvider / JsonRpcSender) this.provider = walletProvider + this.jsonProvider = new ethers.providers.JsonRpcProvider(walletProvider.provider.host) // TODO:: Allow original signer to be passed and preserve this.signer = walletProvider.getSigner() // Meaning : EOASigner? / SmartAccountSigner? - this.contractUtils = new ContractUtils() + this.contractUtils = new ContractUtils(this.DEFAULT_VERSION) this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) this.relayer = new RestRelayer({url: this.#smartAccountConfig.relayer_url}); } @@ -180,10 +186,40 @@ class SmartAccount { // TODO : Init aaProvider // TODO: Define and init SmartAccountProvider + const entryPointAddress = this.#smartAccountConfig.entryPoint ? this.#smartAccountConfig.entryPoint: state.entryPointAddress + const factoryAddress = this.contractUtils.smartWalletFactoryContract[this.#smartAccountConfig.activeNetworkId][this.DEFAULT_VERSION].getAddress() + this.aaProvider = await newProvider(this.jsonProvider, this.contractUtils, { + paymasterAddress: this.#smartAccountConfig.paymasterAddress, + entryPointAddress, + bundlerUrl: this.#smartAccountConfig.bundlerUrl || '', + chainId: this.#smartAccountConfig.activeNetworkId + }, this.signer, this.address, state.fallbackHandlerAddress, factoryAddress) return this } + // public async sendGasLessTransactions(transactionBatchDto: TransactionBatchDto){ + // let { + // version, + // transactions, + // chainId + // } = transactionBatchDto + + // chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + // version = version ? version : this.DEFAULT_VERSION + // const aaSigner = this.aaProvider.getSigner() + + // for (let index = 0; index < transactions.length; index++) { + // const element = transactions[index]; + + // } + // const abi: any = [] + // // const multiSend = await this.multiSend() + // const multiSendAddress = this.contractUtils.multiSendContract[chainId][version].getAddress() + // const greeter = new ethers.Contract(multiSendAddress, abi, aaSigner) + + // } + /** * * @param smartAccountVersion @@ -536,6 +572,10 @@ class SmartAccount { return this.contractUtils.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION] } + multiSend(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendContract { + return this.contractUtils.multiSendContract[chainId][this.DEFAULT_VERSION] + } + // Note: expose getMultiSend(), getMultiSendCall() diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index 56bd504f9..5e3761523 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -36,7 +36,7 @@ class ContractUtils { // Note: Should DEFAULT_VERSION be moved here? - constructor(){ + constructor(readonly version: string){ this.ethAdapter = {} this.smartWalletContract = {} this.multiSendContract = {} @@ -44,6 +44,12 @@ class ContractUtils { this.smartWalletFactoryContract = {} } + public getSmartWalletContract(chainId: number): SmartWalletContract{ + return this.smartWalletContract[chainId][this.version] + } + + + public async initialize(supportedChains: ChainConfig[], signer: JsonRpcSigner) { const chainsInfo = supportedChains; From 96e17b9491d9845b2ef7d7f97dd7e78cd7aa5da8 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 6 Oct 2022 14:02:30 +0400 Subject: [PATCH 0175/1247] updates to get ready for testing --- .../account-abstraction/src/PaymasterAPI.ts | 5 ++- .../core-types/src/smart-account.types.ts | 2 +- packages/smart-account/src/SmartAccount.ts | 41 ++++++++----------- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index 96e62eb06..d76b3b3f5 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -11,7 +11,7 @@ export class PaymasterAPI { async getPaymasterAndData (userOp: Partial): Promise { console.log(userOp) - userOp = await resolveProperties(userOp) + /*userOp = await resolveProperties(userOp) // this.nodeClient.paymasterVerify() // Note: Might be different service that bypass SDK backend node const result = await axios.post('/signPaymaster', { @@ -19,7 +19,8 @@ export class PaymasterAPI { userOp, }) - return result.data.paymasterAndData + return result.data.paymasterAndData*/ // Fallback : return '0x' + return '0x' } } diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 04eb3c6e8..338757115 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -20,7 +20,7 @@ export interface SmartAccountConfig { relayer_url: string, dappAPIKey?: string providerUrlConfig?: ProviderUrlConfig[] - entryPoint?: string + entryPointAddress?: string bundlerUrl?: string paymasterAddress?: string } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index f08cfa10f..6d3e83137 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -186,7 +186,7 @@ class SmartAccount { // TODO : Init aaProvider // TODO: Define and init SmartAccountProvider - const entryPointAddress = this.#smartAccountConfig.entryPoint ? this.#smartAccountConfig.entryPoint: state.entryPointAddress + const entryPointAddress = this.#smartAccountConfig.entryPointAddress ? this.#smartAccountConfig.entryPointAddress: state.entryPointAddress const factoryAddress = this.contractUtils.smartWalletFactoryContract[this.#smartAccountConfig.activeNetworkId][this.DEFAULT_VERSION].getAddress() this.aaProvider = await newProvider(this.jsonProvider, this.contractUtils, { paymasterAddress: this.#smartAccountConfig.paymasterAddress, @@ -198,27 +198,19 @@ class SmartAccount { return this } - // public async sendGasLessTransactions(transactionBatchDto: TransactionBatchDto){ - // let { - // version, - // transactions, - // chainId - // } = transactionBatchDto + public async sendGasLessTransaction(transactionDto: TransactionDto){ + let { + version, + transaction, + chainId + } = transactionDto - // chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId - // version = version ? version : this.DEFAULT_VERSION - // const aaSigner = this.aaProvider.getSigner() + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + version = version ? version : this.DEFAULT_VERSION + const aaSigner = this.aaProvider.getSigner() - // for (let index = 0; index < transactions.length; index++) { - // const element = transactions[index]; - - // } - // const abi: any = [] - // // const multiSend = await this.multiSend() - // const multiSendAddress = this.contractUtils.multiSendContract[chainId][version].getAddress() - // const greeter = new ethers.Contract(multiSendAddress, abi, aaSigner) - - // } + const response = await aaSigner.sendTransaction(transaction) + } /** * @@ -675,16 +667,17 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { activeNetworkId: ChainId.GOERLI, //Update later supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], backend_url: 'https://sdk-backend.staging.biconomy.io/v1', - relayer_url: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay' - // dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', - /*providerUrlConfig: [ + relayer_url: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay', + dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', + bundlerUrl: 'http://localhost:3000/rpc', + providerUrlConfig: [ { chainId: ChainId.GOERLI, providerUrl: "https://eth-goerli.alchemyapi.io/v2/lmW2og_aq-OXWKYRoRu-X6Yl6wDQYt_2" }, { chainId: ChainId.POLYGON_MUMBAI, providerUrl: "https://polygon-mumbai.g.alchemy.com/v2/Q4WqQVxhEEmBYREX22xfsS2-s5EXWD31" } - ]*/ + ] } export default SmartAccount \ No newline at end of file From 2bab7bff731283efd95134ac214cda2c866dff57 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 6 Oct 2022 16:47:29 +0400 Subject: [PATCH 0176/1247] temp updates for testing --- .../account-abstraction/src/BaseWalletAPI.ts | 21 ++++++++++++++++--- .../src/ERC4337EthersSigner.ts | 3 +-- .../src/SmartAccountAPI.ts | 6 +++++- packages/smart-account/src/SmartAccount.ts | 6 +++++- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index d890b43d0..33883e862 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -64,6 +64,15 @@ export abstract class BaseWalletAPI { async _getWalletContract(): Promise { if (this.walletContract == null) { + // console.log('this.contractUtils, ' this.contractUtils) + + console.log('issue, ') + + console.log('chainId ', (await this.provider.getNetwork()).chainId) + + console.log(this.contractUtils + .getSmartWalletContract((await this.provider.getNetwork()).chainId).getContract()) + let walletContract = this.contractUtils .getSmartWalletContract((await this.provider.getNetwork()).chainId) .getContract() @@ -170,11 +179,16 @@ export abstract class BaseWalletAPI { } const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0) - const callData = (await this._getWalletContract()).encode('execFromEntryPoint', [ + console.log('here') + console.log((await this._getWalletContract())) + const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data) + /*const callData = (await this._getWalletContract()).encodeFunctionData('execFromEntryPoint', [ detailsForUserOp.target, value, - detailsForUserOp.data - ]) + detailsForUserOp.data, + 0, + 300000 + ])*/ const callGasLimit = parseNumber(detailsForUserOp.gasLimit) ?? @@ -213,6 +227,7 @@ export abstract class BaseWalletAPI { this.senderAddress = await this.getCounterFactualAddress() } } + console.log('this.senderAddress ', this.senderAddress) return this.senderAddress } diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 391ace4f4..757833381 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -2,13 +2,12 @@ import { Deferrable, defineReadOnly } from '@ethersproject/properties' import { Provider, TransactionRequest, TransactionResponse } from '@ethersproject/providers' import { Signer } from '@ethersproject/abstract-signer' -import { Bytes } from 'ethers' +import { Bytes, ethers } from 'ethers' import { ERC4337EthersProvider } from './ERC4337EthersProvider' import { ClientConfig } from './ClientConfig' import { HttpRpcClient } from './HttpRpcClient' import { UserOperationStruct } from '@account-abstraction/contracts' import { BaseWalletAPI } from './BaseWalletAPI' - export class ERC4337EthersSigner extends Signer { // TODO: we have 'erc4337provider', remove shared dependencies or avoid two-way reference constructor ( diff --git a/packages/account-abstraction/src/SmartAccountAPI.ts b/packages/account-abstraction/src/SmartAccountAPI.ts index 2155bcda8..fd07a52a8 100644 --- a/packages/account-abstraction/src/SmartAccountAPI.ts +++ b/packages/account-abstraction/src/SmartAccountAPI.ts @@ -73,12 +73,16 @@ export class SmartAccountAPI extends BaseWalletAPI { */ async encodeExecute (target: string, value: BigNumberish, data: string): Promise { const walletContract = await this._getWalletContract() + // Review Talha + console.log(walletContract) return walletContract.getInterface().encodeFunctionData( 'execFromEntryPoint', [ target, value, - data + data, + 0, //temp + 200000, //temp ]) } // TODO: May be need to move this to ERC4337EthersPrivider diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 6d3e83137..c6ff1ccf3 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -152,7 +152,9 @@ class SmartAccount { // Should not break if we make this wallet connected provider optional (We'd have JsonRpcProvider / JsonRpcSender) this.provider = walletProvider - this.jsonProvider = new ethers.providers.JsonRpcProvider(walletProvider.provider.host) + // find by activ / corresponding eNetworkId + console.log('this.providerUrlConfig[0].providerUrl ', this.providerUrlConfig[0].providerUrl) + this.jsonProvider = new ethers.providers.JsonRpcProvider(this.providerUrlConfig[0].providerUrl) // TODO:: Allow original signer to be passed and preserve this.signer = walletProvider.getSigner() @@ -195,6 +197,8 @@ class SmartAccount { chainId: this.#smartAccountConfig.activeNetworkId }, this.signer, this.address, state.fallbackHandlerAddress, factoryAddress) + console.log('aa provider ', this.aaProvider) + return this } From 72fbd85c878393d99c414b5f9ae8e5cccc447f3b Mon Sep 17 00:00:00 2001 From: talha Date: Fri, 7 Oct 2022 11:40:57 +0500 Subject: [PATCH 0177/1247] contract instance fix --- packages/account-abstraction/src/BaseWalletAPI.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index 33883e862..916db17fc 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -43,7 +43,7 @@ export abstract class BaseWalletAPI { * our wallet contract. * should support the "execFromSingleton" and "nonce" methods */ - walletContract?: any + walletContract!: SmartWalletContract /** * base constructor. @@ -70,13 +70,11 @@ export abstract class BaseWalletAPI { console.log('chainId ', (await this.provider.getNetwork()).chainId) - console.log(this.contractUtils - .getSmartWalletContract((await this.provider.getNetwork()).chainId).getContract()) - - let walletContract = this.contractUtils + this.walletContract = this.contractUtils .getSmartWalletContract((await this.provider.getNetwork()).chainId) - .getContract() - walletContract = walletContract.attach(await this.getWalletAddress()) + this.walletContract.getContract().attach(await this.getWalletAddress()) + // this.walletContract = wallet.attach(await this.getWalletAddress()) + // console.log(this.walletContract.getInterface()) } return this.walletContract } @@ -227,7 +225,6 @@ export abstract class BaseWalletAPI { this.senderAddress = await this.getCounterFactualAddress() } } - console.log('this.senderAddress ', this.senderAddress) return this.senderAddress } From 6b75da5f5d22add02b43d2da8a10d7639cc12db7 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 7 Oct 2022 13:22:57 +0400 Subject: [PATCH 0178/1247] remove console log --- packages/account-abstraction/src/BaseWalletAPI.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index 916db17fc..0da566763 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -64,12 +64,6 @@ export abstract class BaseWalletAPI { async _getWalletContract(): Promise { if (this.walletContract == null) { - // console.log('this.contractUtils, ' this.contractUtils) - - console.log('issue, ') - - console.log('chainId ', (await this.provider.getNetwork()).chainId) - this.walletContract = this.contractUtils .getSmartWalletContract((await this.provider.getNetwork()).chainId) this.walletContract.getContract().attach(await this.getWalletAddress()) From 62075f810190dadf16079f79eae4d6f50df36ee1 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 7 Oct 2022 13:37:45 +0400 Subject: [PATCH 0179/1247] fix merge conflicts --- packages/smart-account/src/SmartAccount.ts | 11 ++--------- packages/transactions/src/contract-utils.ts | 3 +-- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 6312c3e8b..434838ab3 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -52,8 +52,8 @@ import { JsonRpcSender } from '@0xsequence/network' import { JsonRpcProvider } from '@ethersproject/providers' // AA -import { newProvider, ERC4337EthersProvider } from '@biconomy-sdk/account-abstraction' -import { ethers } from 'ethers' +import { newProvider, ERC4337EthersProvider, ClientConfig } from '@biconomy-sdk/account-abstraction' +import { ethers, Signer } from 'ethers' // Create an instance of Smart Account with multi-chain support. class SmartAccount { @@ -185,13 +185,6 @@ class SmartAccount { await this.transactionManager.initialize(this.relayer, this.nodeClient, this.contractUtils, state) - // TODO : Init aaProvider - const clientConfig: ClientConfig = { - bundlerUrl: '', // merge with default config - entryPointAddress: '', // merge with default config - } - this.aaProvider = await newProvider(this.provider, clientConfig, this.signer) - // TODO: Define and init SmartAccountProvider const entryPointAddress = this.#smartAccountConfig.entryPointAddress ? this.#smartAccountConfig.entryPointAddress: state.entryPointAddress const factoryAddress = this.contractUtils.smartWalletFactoryContract[this.#smartAccountConfig.activeNetworkId][this.DEFAULT_VERSION].getAddress() diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index d38f1ecd1..0d0d10c1b 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -19,7 +19,6 @@ import { } from './utils/FetchContractsInfo' import { ethers, Signer } from 'ethers' import EvmNetworkManager from '@biconomy-sdk/ethers-lib' -import { JsonRpcSigner } from '@ethersproject/providers' import { SmartAccountVersion } from '@biconomy-sdk/core-types' class ContractUtils { @@ -50,7 +49,7 @@ class ContractUtils { - public async initialize(supportedChains: ChainConfig[], signer: JsonRpcSigner) { + public async initialize(supportedChains: ChainConfig[], signer: Signer) { const chainsInfo = supportedChains; for (let i = 0; i < chainsInfo.length; i++) { From dacc57528ccce12f17b21c34277c65c6d95755ac Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 7 Oct 2022 16:10:57 +0400 Subject: [PATCH 0180/1247] dev note --- packages/account-abstraction/src/BaseWalletAPI.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index 0da566763..cd775d32a 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -62,6 +62,7 @@ export abstract class BaseWalletAPI { // this.entryPointView = EntryPoint__factory.connect(entryPointAddress, provider).connect(ethers.constants.AddressZero) } + // based on provider chainId we maintain smartWalletContract.. async _getWalletContract(): Promise { if (this.walletContract == null) { this.walletContract = this.contractUtils From a9a07f190eb316acb5e15844ef90640e9b836f46 Mon Sep 17 00:00:00 2001 From: talha Date: Fri, 7 Oct 2022 17:14:11 +0500 Subject: [PATCH 0181/1247] aa unstable --- packages/account-abstraction/src/Provider.ts | 2 +- packages/smart-account/src/SmartAccount.ts | 324 +++++++++++-------- packages/transactions/src/contract-utils.ts | 13 +- 3 files changed, 197 insertions(+), 142 deletions(-) diff --git a/packages/account-abstraction/src/Provider.ts b/packages/account-abstraction/src/Provider.ts index 24322ddc1..2eb391afd 100644 --- a/packages/account-abstraction/src/Provider.ts +++ b/packages/account-abstraction/src/Provider.ts @@ -29,7 +29,7 @@ export async function newProvider ( // Initial SimpleWallet instance is not deployed and exists just for the interface // const simpleWalletDeployer = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) const smartWalletAPI = new SmartAccountAPI(originalProvider, contractUtils, entryPoint, walletAddress, originalSigner, fallbackHandlerAddress, factoryAddress, 0) - const httpRpcClient = new HttpRpcClient(config.bundlerUrl, config.entryPointAddress, 31337) + const httpRpcClient = new HttpRpcClient(config.bundlerUrl, config.entryPointAddress, config.chainId) return await new ERC4337EthersProvider( config, originalSigner, diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index c6ff1ccf3..8b09f2415 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -1,7 +1,5 @@ import EthersAdapter from '@biconomy-sdk/ethers-lib' -import { - findContractAddressesByVersion -} from './utils/FetchContractsInfo' +import { findContractAddressesByVersion } from './utils/FetchContractsInfo' import { SignTransactionDto, SendTransactionDto, @@ -35,16 +33,19 @@ import NodeClient, { ProviderUrlConfig, ChainConfig, SmartAccountsResponse, - SmartAccountByOwnerDto, + SmartAccountByOwnerDto } from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' -import TransactionManager, { ContractUtils, smartAccountSignMessage } from '@biconomy-sdk/transactions' +import TransactionManager, { + ContractUtils, + smartAccountSignMessage +} from '@biconomy-sdk/transactions' import { BalancesDto } from '@biconomy-sdk/node-client' import { TransactionResponse, BalancesResponse, - UsdBalanceResponse, + UsdBalanceResponse } from '@biconomy-sdk/node-client' // SmartAccount User Refund @@ -83,8 +84,8 @@ class SmartAccount { jsonProvider!: JsonRpcProvider // 4337Provider - aaProvider!: ERC4337EthersProvider - + aaProvider!: { [chainId: number]: ERC4337EthersProvider } + // Ideally not JsonRpcSigner but extended signer // Also the original EOA signer signer!: JsonRpcSigner // We may have different signer for ERC4337 @@ -126,7 +127,6 @@ class SmartAccount { // TODO : We Need to take EntryPoint | Paymaster | bundlerUrl address as optional ? // TODO: May be need to manage separate config for Forward and gasless Flow - /** Scw-Refund-Flow -- config prepareRefundTransactionBatch @@ -149,12 +149,12 @@ class SmartAccount { this.providerUrlConfig = this.#smartAccountConfig.providerUrlConfig || [] this.ethAdapter = {} this.supportedNetworkIds = this.#smartAccountConfig.supportedNetworksIds - + // Should not break if we make this wallet connected provider optional (We'd have JsonRpcProvider / JsonRpcSender) this.provider = walletProvider - // find by activ / corresponding eNetworkId + // TODO: fix hardhcoded console.log('this.providerUrlConfig[0].providerUrl ', this.providerUrlConfig[0].providerUrl) - this.jsonProvider = new ethers.providers.JsonRpcProvider(this.providerUrlConfig[0].providerUrl) + // this.jsonProvider = new ethers.providers.JsonRpcProvider(this.providerUrlConfig[0].providerUrl) // TODO:: Allow original signer to be passed and preserve this.signer = walletProvider.getSigner() @@ -162,58 +162,96 @@ class SmartAccount { this.contractUtils = new ContractUtils(this.DEFAULT_VERSION) this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) - this.relayer = new RestRelayer({url: this.#smartAccountConfig.relayer_url}); + this.relayer = new RestRelayer({ url: this.#smartAccountConfig.relayer_url }) } - - async init(){ - + async init() { this.setActiveChain(this.#smartAccountConfig.activeNetworkId) this.owner = await this.signer.getAddress() - + this.chainConfig = [] + const chainConfig = (await this.nodeClient.getAllSupportedChains()).data - this.chainConfig = chainConfig + for (let index = 0; index < this.#smartAccountConfig.supportedNetworksIds.length; index++) { + const network = chainConfig.find(element => element.chainId === this.#smartAccountConfig.supportedNetworksIds[index]) + if ( network ) + this.chainConfig.push(network) + } + console.log('supported chains length is ', this.chainConfig.length) + console.log('supported chains list is ', this.chainConfig) - await this.contractUtils.initialize(chainConfig, this.signer) + await this.contractUtils.initialize( + chainConfig, + this.#smartAccountConfig, + this.signer + ) - this.address = await this.getAddress({index: 0, chainId: this.#smartAccountConfig.activeNetworkId, version: this.DEFAULT_VERSION}) + this.address = await this.getAddress({ + index: 0, + chainId: this.#smartAccountConfig.activeNetworkId, + version: this.DEFAULT_VERSION + }) this.transactionManager = new TransactionManager() const state = await this.getSmartAccountState(this.#smartAccountConfig.activeNetworkId) - await this.transactionManager.initialize(this.relayer, this.nodeClient, this.contractUtils, state) + await this.transactionManager.initialize( + this.relayer, + this.nodeClient, + this.contractUtils, + state + ) // TODO : Init aaProvider // TODO: Define and init SmartAccountProvider - const entryPointAddress = this.#smartAccountConfig.entryPointAddress ? this.#smartAccountConfig.entryPointAddress: state.entryPointAddress - const factoryAddress = this.contractUtils.smartWalletFactoryContract[this.#smartAccountConfig.activeNetworkId][this.DEFAULT_VERSION].getAddress() - this.aaProvider = await newProvider(this.jsonProvider, this.contractUtils, { - paymasterAddress: this.#smartAccountConfig.paymasterAddress, - entryPointAddress, - bundlerUrl: this.#smartAccountConfig.bundlerUrl || '', - chainId: this.#smartAccountConfig.activeNetworkId - }, this.signer, this.address, state.fallbackHandlerAddress, factoryAddress) + const entryPointAddress = this.#smartAccountConfig.entryPointAddress + ? this.#smartAccountConfig.entryPointAddress + : state.entryPointAddress + const factoryAddress = + this.contractUtils.smartWalletFactoryContract[this.#smartAccountConfig.activeNetworkId][ + this.DEFAULT_VERSION + ].getAddress() + + for (let index = 0; index < this.chainConfig.length; index++) { + const network = this.chainConfig[index] + console.log('initialising for chain ', network.chainId) + let providerUrl = this.#smartAccountConfig.providerUrlConfig?.find(element=> element.chainId === network.chainId)?.providerUrl || '' + console.log('Used provider from config ', providerUrl) + + if (!providerUrl) + providerUrl = network.providerUrl + + this.aaProvider[network.chainId] = await newProvider( + new ethers.providers.JsonRpcProvider(providerUrl), + this.contractUtils, + { + paymasterAddress: this.#smartAccountConfig.paymasterAddress, + entryPointAddress, + bundlerUrl: this.#smartAccountConfig.bundlerUrl || '', + chainId: network.chainId + }, + this.signer, + this.address, + state.fallbackHandlerAddress, + factoryAddress + ) + } console.log('aa provider ', this.aaProvider) return this } - public async sendGasLessTransaction(transactionDto: TransactionDto){ - let { - version, - transaction, - chainId - } = transactionDto - - chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId - version = version ? version : this.DEFAULT_VERSION - const aaSigner = this.aaProvider.getSigner() - - const response = await aaSigner.sendTransaction(transaction) + public async sendGasLessTransaction(transactionDto: TransactionDto) { + let { version, transaction, chainId } = transactionDto + + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + version = version ? version : this.DEFAULT_VERSION + const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() + + const response = await aaSigner.sendTransaction(transaction) } /** @@ -224,7 +262,11 @@ class SmartAccount { // TODO //@review @Talha async setSmartAccountVersion(smartAccountVersion: SmartAccountVersion) { this.DEFAULT_VERSION = smartAccountVersion - this.address = await this.getAddress({index: 0, chainId: this.#smartAccountConfig.activeNetworkId, version: this.DEFAULT_VERSION}) + this.address = await this.getAddress({ + index: 0, + chainId: this.#smartAccountConfig.activeNetworkId, + version: this.DEFAULT_VERSION + }) } public async getAlltokenBalances( @@ -248,20 +290,18 @@ class SmartAccount { ): Promise { return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto) } - + public async getTransactionByAddress( chainId: number, - address: string ): Promise { + address: string + ): Promise { return this.nodeClient.getTransactionByAddress(chainId, address) } - - public async getTransactionByHash( - txHash: string ): Promise { + + public async getTransactionByHash(txHash: string): Promise { return this.nodeClient.getTransactionByHash(txHash) } - - // return adapter instance to be used for blockchain interactions /** * adapter instance to be used for some blockchain interactions @@ -298,7 +338,6 @@ class SmartAccount { return this } - /** * * @notice personal sign is used currently (// @todo Signer should be able to use _typedSignData) @@ -306,7 +345,7 @@ class SmartAccount { * @param chainId optional chainId * @returns:string Signature */ - async signTransaction(signTransactionDto: SignTransactionDto): Promise { + async signTransaction(signTransactionDto: SignTransactionDto): Promise { const { chainId = this.#smartAccountConfig.activeNetworkId, tx } = signTransactionDto let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) @@ -326,14 +365,14 @@ class SmartAccount { * @param chainId optional chainId * @returns */ - async sendTransaction(sendTransactionDto: SendTransactionDto): Promise { + async sendTransaction(sendTransactionDto: SendTransactionDto): Promise { const { tx, batchId = 0, chainId = this.#smartAccountConfig.activeNetworkId } = sendTransactionDto - let { gasLimit } = sendTransactionDto - const isDeployed = await this.isDeployed(chainId); + let { gasLimit } = sendTransactionDto + const isDeployed = await this.isDeployed(chainId) let rawTx: RawTransactionType = { to: tx.to, data: tx.data, @@ -357,10 +396,16 @@ class SmartAccount { refundReceiver: tx.refundReceiver } - let walletContract = this.contractUtils.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() + let walletContract = + this.contractUtils.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() walletContract = walletContract.attach(this.address) - let signature = await this.signTransaction({ version: this.DEFAULT_VERSION, tx, chainId, signer: this.signer }) + let signature = await this.signTransaction({ + version: this.DEFAULT_VERSION, + tx, + chainId, + signer: this.signer + }) let execTransaction = await walletContract.populateTransaction.execTransaction( transaction, @@ -384,15 +429,15 @@ class SmartAccount { context: this.getSmartAccountContext(chainId) } // Must be in specified format - if(gasLimit) { - relayTrx.gasLimit = gasLimit; + if (gasLimit) { + relayTrx.gasLimit = gasLimit } - if(!isDeployed) { + if (!isDeployed) { gasLimit = { hex: '0x1E8480', type: 'hex' } - relayTrx.gasLimit = gasLimit; + relayTrx.gasLimit = gasLimit } const txn: RelayResponse = await this.relayer.relay(relayTrx) return txn.hash @@ -407,16 +452,16 @@ class SmartAccount { async prepareRefundTransaction( prepareRefundTransactionDto: PrepareRefundTransactionDto ): Promise { - let { - version, - transaction, - batchId, - chainId - } = prepareRefundTransactionDto + let { version, transaction, batchId, chainId } = prepareRefundTransactionDto chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId version = version ? version : this.DEFAULT_VERSION - batchId = batchId ? batchId: 0 - return this.transactionManager.prepareRefundTransaction({chainId, version, transaction, batchId}) + batchId = batchId ? batchId : 0 + return this.transactionManager.prepareRefundTransaction({ + chainId, + version, + transaction, + batchId + }) } // Get Fee Options from relayer and make it available for display @@ -429,17 +474,17 @@ class SmartAccount { async prepareRefundTransactionBatch( prepareRefundTransactionsDto: PrepareRefundTransactionsDto ): Promise { - let { - version, - transactions, - batchId, - chainId - } = prepareRefundTransactionsDto + let { version, transactions, batchId, chainId } = prepareRefundTransactionsDto chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId version = version ? version : this.DEFAULT_VERSION - batchId = batchId ? batchId: 0 - return this.transactionManager.prepareRefundTransactionBatch({version, chainId, batchId, transactions}) + batchId = batchId ? batchId : 0 + return this.transactionManager.prepareRefundTransactionBatch({ + version, + chainId, + batchId, + transactions + }) } // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions @@ -454,17 +499,17 @@ class SmartAccount { async createRefundTransaction( refundTransactionDto: RefundTransactionDto ): Promise { - let { + let { version, transaction, batchId, feeQuote, chainId } = refundTransactionDto + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + version = version ? version : this.DEFAULT_VERSION + batchId = batchId ? batchId : 0 + return this.transactionManager.createRefundTransaction({ version, transaction, batchId, - feeQuote, - chainId - } = refundTransactionDto - chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId - version = version ? version : this.DEFAULT_VERSION - batchId = batchId ? batchId: 0 - return this.transactionManager.createRefundTransaction({version, transaction, batchId, chainId, feeQuote}) + chainId, + feeQuote + }) } /** @@ -475,20 +520,15 @@ class SmartAccount { * @returns */ async createTransaction(transactionDto: TransactionDto): Promise { - let { - version, - transaction, - batchId, - chainId - } = transactionDto - + let { version, transaction, batchId, chainId } = transactionDto + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId version = version ? version : this.DEFAULT_VERSION - batchId = batchId ? batchId: 0 - return this.transactionManager.createTransaction({chainId, version, batchId, transaction}) + batchId = batchId ? batchId : 0 + return this.transactionManager.createTransaction({ chainId, version, batchId, transaction }) } - /** + /** * Prepares compatible IWalletTransaction object based on Transaction Request * @todo Write test case and limit batch size based on test results in scw-contracts * @notice This transaction is without fee refund (gasless) @@ -497,21 +537,21 @@ class SmartAccount { * @param chainId * @returns */ - async createTransactionBatch( - transactionBatchDto: TransactionBatchDto - ): Promise { - let { - version, - transactions, - batchId, - chainId - } = transactionBatchDto - - chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId - version = version ? version : this.DEFAULT_VERSION - batchId = batchId ? batchId: 0 - return this.transactionManager.createTransactionBatch({version, transactions, chainId, batchId}) - } + async createTransactionBatch( + transactionBatchDto: TransactionBatchDto + ): Promise { + let { version, transactions, batchId, chainId } = transactionBatchDto + + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + version = version ? version : this.DEFAULT_VERSION + batchId = batchId ? batchId : 0 + return this.transactionManager.createTransactionBatch({ + version, + transactions, + chainId, + batchId + }) + } /** * Prepares compatible IWalletTransaction object based on Transaction Request @@ -523,28 +563,35 @@ class SmartAccount { async createRefundTransactionBatch( refundTransactionBatchDto: RefundTransactionBatchDto ): Promise { - let { + let { version, transactions, batchId, feeQuote, chainId } = refundTransactionBatchDto + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + version = version ? version : this.DEFAULT_VERSION + batchId = batchId ? batchId : 0 + return this.transactionManager.createRefundTransactionBatch({ version, transactions, + chainId, batchId, - feeQuote, - chainId - } = refundTransactionBatchDto - chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId - version = version ? version : this.DEFAULT_VERSION - batchId = batchId ? batchId: 0 - return this.transactionManager.createRefundTransactionBatch({version, transactions, chainId, batchId, feeQuote}) + feeQuote + }) } async prepareDeployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { return this.transactionManager.prepareDeployAndPayFees(chainId, this.DEFAULT_VERSION) } - + // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment - async deployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId, feeQuote: FeeQuote): Promise { - const transaction = await this.transactionManager.deployAndPayFees(chainId, this.DEFAULT_VERSION, feeQuote) - const txHash = await this.sendTransaction({tx:transaction}); - return txHash; + async deployAndPayFees( + chainId: ChainId = this.#smartAccountConfig.activeNetworkId, + feeQuote: FeeQuote + ): Promise { + const transaction = await this.transactionManager.deployAndPayFees( + chainId, + this.DEFAULT_VERSION, + feeQuote + ) + const txHash = await this.sendTransaction({ tx: transaction }) + return txHash } /** @@ -572,10 +619,9 @@ class SmartAccount { return this.contractUtils.multiSendContract[chainId][this.DEFAULT_VERSION] } - // Note: expose getMultiSend(), getMultiSendCall() - + // Note: expose getMultiSend(), getMultiSendCall() - // TODO + // TODO // Note: get Address method should not be here as we are passing smart account state // Marked for deletion async getAddress( @@ -586,13 +632,15 @@ class SmartAccount { this.contractUtils.smartWalletFactoryContract[chainId][ version ].getAddressForCounterfactualWallet(this.owner, index) - const address = await this.contractUtils.smartWalletFactoryContract[chainId][version].getAddressForCounterfactualWallet(this.owner, index) + const address = await this.contractUtils.smartWalletFactoryContract[chainId][ + version + ].getAddressForCounterfactualWallet(this.owner, index) this.address = address return address } - // Could be part of SmartAccountAPI for AA - /*async getAddressForCounterfactualWallet( + // Could be part of SmartAccountAPI for AA + /*async getAddressForCounterfactualWallet( addressForCounterFactualWalletDto: AddressForCounterFactualWalletDto ): Promise { const { index, chainId, version } = addressForCounterFactualWalletDto @@ -602,7 +650,6 @@ class SmartAccount { ].getAddressForCounterfactualWallet(this.owner, index) }*/ - /** * Allows one to check if the smart account is already deployed on requested chainOd * @review @@ -621,7 +668,9 @@ class SmartAccount { return isPhantom;*/ //Below works - return await this.contractUtils.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION].isWalletExist(this.address) + return await this.contractUtils.smartWalletFactoryContract[chainId][ + this.DEFAULT_VERSION + ].isWalletExist(this.address) } /** @@ -660,7 +709,10 @@ class SmartAccount { // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId = this.#smartAccountConfig.activeNetworkId ): SmartAccountContext { - const context: SmartAccountContext = this.contractUtils.getSmartAccountContext(chainId, this.DEFAULT_VERSION) + const context: SmartAccountContext = this.contractUtils.getSmartAccountContext( + chainId, + this.DEFAULT_VERSION + ) return context } } @@ -675,13 +727,11 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', bundlerUrl: 'http://localhost:3000/rpc', providerUrlConfig: [ - { chainId: ChainId.GOERLI, - providerUrl: "https://eth-goerli.alchemyapi.io/v2/lmW2og_aq-OXWKYRoRu-X6Yl6wDQYt_2" - }, - { chainId: ChainId.POLYGON_MUMBAI, - providerUrl: "https://polygon-mumbai.g.alchemy.com/v2/Q4WqQVxhEEmBYREX22xfsS2-s5EXWD31" + { + chainId: ChainId.GOERLI, + providerUrl: 'https://eth-goerli.alchemyapi.io/v2/lmW2og_aq-OXWKYRoRu-X6Yl6wDQYt_2' } ] } -export default SmartAccount \ No newline at end of file +export default SmartAccount diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index 5e3761523..9d47e2ad0 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -5,7 +5,7 @@ import { MultiSendContract, MultiSendCallOnlyContract, SmartAccountContext, - EstimateSmartAccountDeploymentDto + SmartAccountConfig } from '@biconomy-sdk/core-types' import{ ChainConfig, @@ -50,14 +50,19 @@ class ContractUtils { - public async initialize(supportedChains: ChainConfig[], signer: JsonRpcSigner) { + public async initialize(supportedChains: ChainConfig[], config: SmartAccountConfig, signer: JsonRpcSigner) { const chainsInfo = supportedChains; for (let i = 0; i < chainsInfo.length; i++) { const network = chainsInfo[i] - const providerUrl = network.providerUrl // To keep it network agnostic - // Note: think about events when signer needs to pay gas + // Note: think about events when signer needs to pay gas + + let providerUrl = config.providerUrlConfig?.find(element=> element.chainId === network.chainId)?.providerUrl || '' + console.log('Used provider from config ', providerUrl) + + if (!providerUrl) + providerUrl = network.providerUrl const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) From c698bb9ed751c07f3d1e2e3b06ef33bdb664de83 Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 10 Oct 2022 16:08:18 +0500 Subject: [PATCH 0182/1247] pushing stable changes --- packages/account-abstraction/src/Provider.ts | 4 +- packages/common/src/ERC4337Utils.ts | 39 +- .../src/contracts/EntryPointContract.ts | 9 +- .../src/contracts/SmartWalletContract.ts | 7 +- .../core-types/src/smart-account.types.ts | 10 +- packages/core-types/src/transaction.types.ts | 5 +- packages/core-types/src/types.ts | 27 +- .../v1.0.0/EntryPointEthersContract.ts | 9 +- .../v1.0.1/EntryPointEthersContract.ts | 10 +- .../v1.0.0/SmartWalletContractEthers.ts | 2 +- .../src/contracts/contractInstancesEthers.ts | 22 +- packages/ethers-lib/src/index.ts | 10 +- packages/node-client/src/INodeClient.ts | 66 +- packages/node-client/src/NodeClient.ts | 47 +- packages/relayer/src/index.ts | 1 - packages/relayer/src/local-relayer.ts | 36 +- packages/relayer/src/rest-relayer.ts | 35 +- packages/smart-account/src/SmartAccount.ts | 40 +- .../src/providers/SmartAccountProvider.ts | 130 +- packages/smart-account/src/providers/types.ts | 21 +- packages/smart-account/src/signers/Signer.ts | 65 +- .../src/signers/SmartAccountSigner.ts | 113 +- .../smart-account/tests/smartaccount.spec.ts | 1913 +++++++++-------- packages/transactions/src/TransactionAPI.ts | 19 +- packages/transactions/src/contract-utils.ts | 40 +- packages/transactions/src/estimator.ts | 320 +-- packages/transactions/src/execution.ts | 9 +- packages/transactions/src/index.ts | 3 - .../transactions/src/transaction-manager.ts | 200 +- packages/transactions/src/types.ts | 10 +- packages/transactions/src/utils.ts | 179 +- yarn.lock | 104 +- 32 files changed, 1875 insertions(+), 1630 deletions(-) diff --git a/packages/account-abstraction/src/Provider.ts b/packages/account-abstraction/src/Provider.ts index 2eb391afd..4370b9719 100644 --- a/packages/account-abstraction/src/Provider.ts +++ b/packages/account-abstraction/src/Provider.ts @@ -30,7 +30,7 @@ export async function newProvider ( // const simpleWalletDeployer = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) const smartWalletAPI = new SmartAccountAPI(originalProvider, contractUtils, entryPoint, walletAddress, originalSigner, fallbackHandlerAddress, factoryAddress, 0) const httpRpcClient = new HttpRpcClient(config.bundlerUrl, config.entryPointAddress, config.chainId) - return await new ERC4337EthersProvider( + const ethProvider = await new ERC4337EthersProvider( config, originalSigner, originalProvider, @@ -38,4 +38,6 @@ export async function newProvider ( entryPoint, smartWalletAPI ).init() + console.log('initialisation completed in provider') + return ethProvider } diff --git a/packages/common/src/ERC4337Utils.ts b/packages/common/src/ERC4337Utils.ts index 75bd81a36..751893780 100644 --- a/packages/common/src/ERC4337Utils.ts +++ b/packages/common/src/ERC4337Utils.ts @@ -3,20 +3,24 @@ import { UserOperationStruct } from '@account-abstraction/contracts' import { abi as entryPointAbi } from '@account-abstraction/contracts/artifacts/IEntryPoint.json' // UserOperation is the first parameter of simulateValidation -const UserOpType = entryPointAbi.find(entry => entry.name === 'simulateValidation')?.inputs[0] +const UserOpType = entryPointAbi.find((entry) => entry.name === 'simulateValidation')?.inputs[0] // reverse "Deferrable" or "PromiseOrValue" fields export type NotPromise = { [P in keyof T]: Exclude> } -function encode (typevalues: Array<{ type: string, val: any }>, forSignature: boolean): string { - const types = typevalues.map(typevalue => typevalue.type === 'bytes' && forSignature ? 'bytes32' : typevalue.type) - const values = typevalues.map((typevalue) => typevalue.type === 'bytes' && forSignature ? keccak256(typevalue.val) : typevalue.val) +function encode(typevalues: Array<{ type: string; val: any }>, forSignature: boolean): string { + const types = typevalues.map((typevalue) => + typevalue.type === 'bytes' && forSignature ? 'bytes32' : typevalue.type + ) + const values = typevalues.map((typevalue) => + typevalue.type === 'bytes' && forSignature ? keccak256(typevalue.val) : typevalue.val + ) return defaultAbiCoder.encode(types, values) } -export function packUserOp (op: NotPromise, forSignature = true): string { +export function packUserOp(op: NotPromise, forSignature = true): string { if (forSignature) { // lighter signature scheme (must match UserOperation#pack): do encode a zero-length signature, but strip afterwards the appended zero-length value const userOpType = { @@ -43,10 +47,12 @@ export function packUserOp (op: NotPromise, forSignature = encoded = '0x' + encoded.slice(66, encoded.length - 64) return encoded } - const typedValues = (UserOpType as any).components.map((c: {name: keyof typeof op, type: string}) => ({ - type: c.type, - val: op[c.name] - })) + const typedValues = (UserOpType as any).components.map( + (c: { name: keyof typeof op; type: string }) => ({ + type: c.type, + val: op[c.name] + }) + ) const typevalues = [ { type: 'address', val: op.sender }, { type: 'uint256', val: op.nonce }, @@ -68,14 +74,23 @@ export function packUserOp (op: NotPromise, forSignature = return encode(typevalues, forSignature) } -export function getRequestId (op: NotPromise, entryPoint: string, chainId: number): string { +export function getRequestId( + op: NotPromise, + entryPoint: string, + chainId: number +): string { const userOpHash = keccak256(packUserOp(op, true)) const enc = defaultAbiCoder.encode( ['bytes32', 'address', 'uint256'], - [userOpHash, entryPoint, chainId]) + [userOpHash, entryPoint, chainId] + ) return keccak256(enc) } -export function getRequestIdForSigning (op: NotPromise, entryPoint: string, chainId: number): Uint8Array { +export function getRequestIdForSigning( + op: NotPromise, + entryPoint: string, + chainId: number +): Uint8Array { return arrayify(getRequestId(op, entryPoint, chainId)) } diff --git a/packages/core-types/src/contracts/EntryPointContract.ts b/packages/core-types/src/contracts/EntryPointContract.ts index 980c6a77d..a4c5217f5 100644 --- a/packages/core-types/src/contracts/EntryPointContract.ts +++ b/packages/core-types/src/contracts/EntryPointContract.ts @@ -1,14 +1,15 @@ import { UserOperation } from '../types' import { ITransactionResult } from '../transaction.types' import { Contract } from '@ethersproject/contracts' -import { - BytesLike, -} from "ethers"; +import { BytesLike } from 'ethers' export interface EntryPointContract { getAddress(): string getSenderAddress(initCode: BytesLike): Promise getContract(): Contract handleOps(userOperations: UserOperation[], beneficiary: string): Promise - simulateValidation(userOperation: UserOperation, offChainSigCheck: boolean): Promise + simulateValidation( + userOperation: UserOperation, + offChainSigCheck: boolean + ): Promise getRequestId(userOperation: UserOperation): Promise } diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index e245e52dd..2e534a268 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -1,4 +1,9 @@ -import { IWalletTransaction, ExecTransaction, IFeeRefundV1_0_0, IFeeRefundV1_0_1 } from '../transaction.types' +import { + IWalletTransaction, + ExecTransaction, + IFeeRefundV1_0_0, + IFeeRefundV1_0_1 +} from '../transaction.types' import { SmartAccountVersion } from '../types' import { BigNumber } from '@ethersproject/bignumber' import { Interface } from '@ethersproject/abi' diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index c3394bca0..c09e83390 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -10,12 +10,11 @@ import { SmartWalletContract } from './contracts/SmartWalletContract' import { GasLimit } from './transaction.types' import { Signer } from 'ethers' - export interface SmartAccountConfig { activeNetworkId: ChainId // same supportedNetworksIds: ChainId[] // Network[] chainId: CbainId, rpcUrl?: string - backend_url: string, - relayer_url: string, + backend_url: string + relayer_url: string dappAPIKey?: string providerUrlConfig?: ProviderUrlConfig[] entryPointAddress?: string @@ -35,11 +34,10 @@ export type SmartAccountContext = { multiSendCall: MultiSendCallOnlyContract } - export type EstimateSmartAccountDeploymentDto = { chainId: ChainId version: string - owner: string, + owner: string entryPointAddress: string fallbackHandlerAddress: string } @@ -102,7 +100,7 @@ export type RefundTransactionBatchDto = { } export type TransactionDto = { - version?: string, + version?: string transaction: Transaction batchId?: number chainId?: ChainId diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/transaction.types.ts index b295c48d8..62b3cfc69 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/transaction.types.ts @@ -41,7 +41,7 @@ export type ExecTransaction = { targetTxGas: string | number } -export type SmartAccountSignature = { +export type SmartAccountSignature = { signer: string data: string } @@ -53,11 +53,10 @@ export interface IFeeRefundV1_0_0 { gasToken: string refundReceiver: string } -export interface IFeeRefundV1_0_1 extends IFeeRefundV1_0_0{ +export interface IFeeRefundV1_0_1 extends IFeeRefundV1_0_0 { tokenGasPriceFactor: string | number } - // extended from FeeRefund as we need this for handlePayment Estimate export interface IFeeRefundHandlePayment extends IFeeRefundV1_0_1 { gasUsed: string | number diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index c36b3ca4b..926b54afa 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -1,4 +1,3 @@ - export type SmartAccountVersion = '1.0.1' | '1.0.0' export enum OperationType { @@ -6,7 +5,6 @@ export enum OperationType { DelegateCall // 1 } - export type Eip3770Address = { prefix: string address: string @@ -37,13 +35,14 @@ export type UserOperation = { export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' // Review -export const DEFAULT_FEE_RECEIVER = "0x7306aC7A32eb690232De81a9FFB44Bb346026faB" +export const DEFAULT_FEE_RECEIVER = '0x7306aC7A32eb690232De81a9FFB44Bb346026faB' export const GAS_USAGE_OFFSET = 4928 + 2360 -// Few more constants can be added regarding token transfer / handle payments +// Few more constants can be added regarding token transfer / handle payments -export const FAKE_SIGNATURE = "0x39f5032f1cd30005aa1e35f04394cabfe7de3b6ae6d95b27edd8556064c287bf61f321fead0cf48ca4405d497cc8fc47fc7ff0b7f5c45baa14090a44f2307d8230" +export const FAKE_SIGNATURE = + '0x39f5032f1cd30005aa1e35f04394cabfe7de3b6ae6d95b27edd8556064c287bf61f321fead0cf48ca4405d497cc8fc47fc7ff0b7f5c45baa14090a44f2307d8230' export type RestRelayerOptions = { url: string @@ -56,19 +55,19 @@ export type TokenData = { address: string decimal: number logoUrl: string - feeTokenTransferGas: number; + feeTokenTransferGas: number refundReceiver?: string } export type FeeQuote = { - symbol: string, - address: string, - decimal: number, - logoUrl: string, - payment: number, - tokenGasPrice: number, //review - offset?: number, - refundReceiver?: string; + symbol: string + address: string + decimal: number + logoUrl: string + payment: number + tokenGasPrice: number //review + offset?: number + refundReceiver?: string } export type FeeOptionsResponse = { diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts index c3de96d8c..4728eeb7c 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts @@ -5,9 +5,7 @@ import { } from '../../../../typechain/src/ethers-v5/v1.0.0/EntryPointContractV100' import { toTxResult } from '../../../utils' import { Contract } from '@ethersproject/contracts' -import { - BytesLike -} from "ethers"; +import { BytesLike } from 'ethers' class EntryPointEthersContract implements EntryPointContract { constructor(public contract: EntryPointContract_TypeChain) {} @@ -24,7 +22,10 @@ class EntryPointEthersContract implements EntryPointContract { return this.contract } - async simulateValidation(userOperation: UserOperation, offChainSigCheck: boolean): Promise { + async simulateValidation( + userOperation: UserOperation, + offChainSigCheck: boolean + ): Promise { const resultSet = await this.contract.simulateValidation(userOperation, offChainSigCheck) return toTxResult(resultSet) } diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts index 1b148909b..95278372c 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts @@ -5,10 +5,7 @@ import { } from '../../../../typechain/src/ethers-v5/v1.0.1/EntryPointContractV101' import { toTxResult } from '../../../utils' import { Contract } from '@ethersproject/contracts' -import { - BytesLike, - ContractTransaction, -} from "ethers"; +import { BytesLike, ContractTransaction } from 'ethers' class EntryPointEthersContract implements EntryPointContract { constructor(public contract: EntryPointContract_TypeChain) {} @@ -25,7 +22,10 @@ class EntryPointEthersContract implements EntryPointContract { return this.contract } - async simulateValidation(userOperation: UserOperation, offChainSigCheck: boolean): Promise { + async simulateValidation( + userOperation: UserOperation, + offChainSigCheck: boolean + ): Promise { const resultSet = await this.contract.simulateValidation(userOperation, offChainSigCheck) return toTxResult(resultSet) } diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts index e688f9c81..e45c3e8d1 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts @@ -4,7 +4,7 @@ import { SmartWalletContract, IWalletTransaction, ExecTransaction, - IFeeRefundV1_0_0, + IFeeRefundV1_0_0, ITransactionResult } from '@biconomy-sdk/core-types' import { toTxResult } from '../../../utils' diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index 0e01abfb5..2176da4b5 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -25,12 +25,9 @@ import SmartWalletFacoryContractEthers_v1_0_1 from './SmartWalletFactory/v1.0.1/ import { EntryPointContractV100__factory as EntryPointFactoryContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/EntryPointContractV100__factory' import { EntryPointContractV101__factory as EntryPointFactoryContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/EntryPointContractV101__factory' - import EntryPointEthersContract_v1_0_0 from './EntryPointContract/v1.0.0/EntryPointEthersContract' import EntryPointEthersContract_v1_0_1 from './EntryPointContract/v1.0.1/EntryPointEthersContract' - - import { JsonRpcProvider } from '@ethersproject/providers' import { SmartAccountVersion } from '@biconomy-sdk/core-types' @@ -39,9 +36,7 @@ export function getSmartWalletContractInstance( contractAddress: string, // signer: Signer provider: JsonRpcProvider -): - | SmartWalletContractEthers_v1_0_0 - | SmartWalletContractEthers_v1_0_1 { +): SmartWalletContractEthers_v1_0_0 | SmartWalletContractEthers_v1_0_1 { let walletContract switch (smartAccountVersion) { case '1.0.0': @@ -59,9 +54,7 @@ export function getMultiSendContractInstance( contractAddress: string, // signer: Signer provider: JsonRpcProvider -): - | MultiSendEthersContract_v1_0_0 - | MultiSendEthersContract_v1_0_1 { +): MultiSendEthersContract_v1_0_0 | MultiSendEthersContract_v1_0_1 { let multiSendContract switch (smartAccountVersion) { @@ -79,9 +72,7 @@ export function getMultiSendCallOnlyContractInstance( contractAddress: string, // signer: Signer provider: JsonRpcProvider -): - | MultiSendCallOnlyEthersContract_v1_0_0 - | MultiSendCallOnlyEthersContract_v1_0_1 { +): MultiSendCallOnlyEthersContract_v1_0_0 | MultiSendCallOnlyEthersContract_v1_0_1 { let multiSendCallContract switch (smartAccountVersion) { @@ -98,9 +89,7 @@ export function getSmartWalletFactoryContractInstance( smartAccountVersion: SmartAccountVersion, contractAddress: string, provider: JsonRpcProvider -): - | SmartWalletFacoryContractEthers_v1_0_0 - | SmartWalletFacoryContractEthers_v1_0_1 { +): SmartWalletFacoryContractEthers_v1_0_0 | SmartWalletFacoryContractEthers_v1_0_1 { let walletFactoryContract switch (smartAccountVersion) { @@ -117,8 +106,7 @@ export function getEntryPointFactoryContractInstance( smartAccountVersion: SmartAccountVersion, contractAddress: string, provider: JsonRpcProvider -): | EntryPointEthersContract_v1_0_0 - | EntryPointEthersContract_v1_0_1 { +): EntryPointEthersContract_v1_0_0 | EntryPointEthersContract_v1_0_1 { let walletFactoryContract switch (smartAccountVersion) { diff --git a/packages/ethers-lib/src/index.ts b/packages/ethers-lib/src/index.ts index f4761daac..c60e299b1 100644 --- a/packages/ethers-lib/src/index.ts +++ b/packages/ethers-lib/src/index.ts @@ -16,13 +16,17 @@ export { SmartWalletFactoryContractV101__factory as SmartWalletFactoryContractV1 export { EntryPointContractV100__factory as EntryPointFactoryContractV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/EntryPointContractV100__factory' export { EntryPointContractV101__factory as EntryPointFactoryContractV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/EntryPointContractV101__factory' - export { EntryPointContractV100 } from '../typechain/src/ethers-v5/v1.0.0/EntryPointContractV100' export { EntryPointContractV101 } from '../typechain/src/ethers-v5/v1.0.1/EntryPointContractV101' import EntryPointEthersContract_v1_0_0 from './contracts/EntryPointContract/v1.0.0/EntryPointEthersContract' import EntryPointEthersContract_v1_0_1 from './contracts/EntryPointContract/v1.0.1/EntryPointEthersContract' - export default EthersAdapter -export { EthersAdapterConfig, IEthersTransactionOptions, IEthersTransactionResult, EntryPointEthersContract_v1_0_0, EntryPointEthersContract_v1_0_1 } +export { + EthersAdapterConfig, + IEthersTransactionOptions, + IEthersTransactionResult, + EntryPointEthersContract_v1_0_0, + EntryPointEthersContract_v1_0_1 +} diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index f8524dc84..c1a91d7be 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -29,15 +29,15 @@ interface INodeClient { /** * Get ChainConfig for requested chainId - * @param chainId + * @param chainId */ getChainById(chainId: number): Promise // 2. Token APIs /** - * Get prices for configured tokens from backend node API - * @param chainId + * Get prices for configured tokens from backend node API + * @param chainId */ getTokenPricesByChainId(chainId: number): Promise @@ -49,13 +49,13 @@ interface INodeClient { /** * Get TokenInfo for requested chainId - * @param chainId + * @param chainId */ getTokensByChainId(chainId: number): Promise /** * Get TokenInfo by address and chainId - * @param tokenByChainIdAndAddressDto + * @param tokenByChainIdAndAddressDto */ getTokenByChainIdAndAddress( tokenByChainIdAndAddressDto: TokenByChainIdAndAddressDto @@ -65,7 +65,7 @@ interface INodeClient { /** * Get information of all smart accounts deployed for particular eoa owner for any version and index - * @param smartAccountByOwnerDto + * @param smartAccountByOwnerDto */ getSmartAccountsByOwner( smartAccountByOwnerDto: SmartAccountByOwnerDto @@ -74,15 +74,15 @@ interface INodeClient { // 4. Balances Endpoints /** - * Get token balances for requested chainId and address + * Get token balances for requested chainId and address * address could be EOA or SmartAccount - * @param balancesDto + * @param balancesDto */ getAlltokenBalances(balancesDto: BalancesDto): Promise /** - * - * @param balancesDto Get total USD balance + * + * @param balancesDto Get total USD balance */ getTotalBalanceInUsd(balancesDto: BalancesDto): Promise @@ -90,16 +90,16 @@ interface INodeClient { /** * About: This is generic method to estimate gas on any contract call done using GasEstimator contract * Can be used to estimate gas before sending final transaction. - * Purpose: Currently used in smart account methods deployAndPayFees / prepareDeployandPayFees - * @param estimateExternalGasDto + * Purpose: Currently used in smart account methods deployAndPayFees / prepareDeployandPayFees + * @param estimateExternalGasDto */ estimateExternalGas(estimateExternalGasDto: EstimateExternalGasDto): Promise /** - * - * @param estimateRequiredTxGasDto - * About: Estimating the gas for inner transaction - * Purpose: Returns suggested value for targetTxGas + * + * @param estimateRequiredTxGasDto + * About: Estimating the gas for inner transaction + * Purpose: Returns suggested value for targetTxGas * Uses method requiredTxGas on SmartWallet contract and captures gas result from revert string */ estimateRequiredTxGas( @@ -109,14 +109,16 @@ interface INodeClient { /** * About : Estimating the gas for inner transaction for undeployed wallet * Purpose: Returns suggested value for targetTxGas when the wallet is undeployed. - * Uses eth_call and bytecode of SmartWalletNoAuth which has method requiredTxGas - * @param estimateRequiredTxGasDto + * Uses eth_call and bytecode of SmartWalletNoAuth which has method requiredTxGas + * @param estimateRequiredTxGasDto */ - estimateRequiredTxGasOverride(estimateRequiredTxGasDto: EstimateRequiredTxGasDto): Promise + estimateRequiredTxGasOverride( + estimateRequiredTxGasDto: EstimateRequiredTxGasDto + ): Promise /** - * - * @param estimateHandlePaymentTxGasDto + * + * @param estimateHandlePaymentTxGasDto * About : Estimating the gas for token refund internal transaction handlePayment * Purpose: Returns suggested value for handlePayment part to calculate baseGas */ @@ -125,33 +127,29 @@ interface INodeClient { ): Promise /** - * About : Estimating the gas for token refund internal transaction handlePayment but for undeployed wallet + * About : Estimating the gas for token refund internal transaction handlePayment but for undeployed wallet * (counterfactual address should have token balance) - * Purpose: Returns suggested value for handlePayment part to calculate baseGas - * @param estimateHandlePaymentTxGasDto + * Purpose: Returns suggested value for handlePayment part to calculate baseGas + * @param estimateHandlePaymentTxGasDto */ - estimateHandlePaymentGasOverride(estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto): Promise + estimateHandlePaymentGasOverride( + estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto + ): Promise /** * About: Estimating the gas for execTransaction method on undeployed smart-wallet * for undeployed wallet it uses fake signature and byte code of SmartwalletNoAuth using eth_call * Purpose: Returns suggested value for overall transaction gas cost for undeployed wallet. Helpful for calculating fee quote - * @param estimateUndeployedContractGasDto + * @param estimateUndeployedContractGasDto */ estimateUndeployedContractGas( estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto ): Promise - getTransactionByHash( - txHash: string - ): Promise + getTransactionByHash(txHash: string): Promise - getTransactionByAddress( - chainId: number, - address: string - ): Promise + getTransactionByAddress(chainId: number, address: string): Promise - // 6. Conditional Gasless Endpoint // 7. Signing Service Endpoint diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index 72d7c9e7b..2da76f867 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -151,17 +151,19 @@ class NodeClient implements INodeClient { }) } - async estimateRequiredTxGasOverride(estimateRequiredTxGasDto: EstimateRequiredTxGasDto - ): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/estimator/required-override`, - method: HttpMethod.Post, - body: estimateRequiredTxGasDto - }) - } - - async estimateHandlePaymentGasOverride(estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto - ): Promise { + async estimateRequiredTxGasOverride( + estimateRequiredTxGasDto: EstimateRequiredTxGasDto + ): Promise { + return sendRequest({ + url: `${this.#txServiceBaseUrl}/estimator/required-override`, + method: HttpMethod.Post, + body: estimateRequiredTxGasDto + }) + } + + async estimateHandlePaymentGasOverride( + estimateHandlePaymentTxGasDto: EstimateHandlePaymentTxGasDto + ): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/handle-payment-override`, method: HttpMethod.Post, @@ -169,31 +171,28 @@ class NodeClient implements INodeClient { }) } - async estimateUndeployedContractGas(estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto): Promise { + async estimateUndeployedContractGas( + estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto + ): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/estimator/undeployed`, method: HttpMethod.Post, - body: estimateUndeployedContractGasDto - }) - } + body: estimateUndeployedContractGasDto + }) + } - getTransactionByAddress( - chainId: number, - address: string - ): Promise{ + getTransactionByAddress(chainId: number, address: string): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/transactions/chainId/${chainId}/address/${address}`, method: HttpMethod.Get - }) + }) } - getTransactionByHash( - txHash: string - ): Promise{ + getTransactionByHash(txHash: string): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/transactions/txHash/${txHash}`, method: HttpMethod.Get - }) + }) } } diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index 72a0b9d03..89cb0141f 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -7,7 +7,6 @@ import { } from '@biconomy-sdk/core-types' import { RelayTransaction, RelayResponse } from '@biconomy-sdk/core-types' - // JsonRpcRequest export interface Relayer { // relayer will submit the transaction(s) to the network and return the transaction response. diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index b1ad8029a..cae9c3570 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -119,22 +119,24 @@ export class LocalRelayer implements Relayer { async getFeeOptions(chainId: number): Promise { console.log('requested fee options for chain ', chainId) const feeOptions: FeeOptionsResponse = { - "msg": "all ok", - "data": { - "chainId": 5, - "response": [ - { - "tokenGasPrice": 157718, - "symbol": "USDC", - "address": "0xb5B640E6414b6DeF4FC9B3C1EeF373925effeCcF", - "decimal": 6, - "logoUrl": "https://raw.githubusercontent.com/spothq/cryptocurrency-icons/master/128/color/usdc.png", - "offset": 1000000, - "feeTokenTransferGas": 22975, - "refundReceiver": "0xc1d3206324d806b6586cf15324178f8e8781a293" - }] - } - }; - return feeOptions; + msg: 'all ok', + data: { + chainId: 5, + response: [ + { + tokenGasPrice: 157718, + symbol: 'USDC', + address: '0xb5B640E6414b6DeF4FC9B3C1EeF373925effeCcF', + decimal: 6, + logoUrl: + 'https://raw.githubusercontent.com/spothq/cryptocurrency-icons/master/128/color/usdc.png', + offset: 1000000, + feeTokenTransferGas: 22975, + refundReceiver: '0xc1d3206324d806b6586cf15324178f8e8781a293' + } + ] + } + } + return feeOptions } } diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 26fb5d359..104c89608 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -97,7 +97,7 @@ export class RestRelayer implements Relayer { const txnData = multiSendCall .getInterface() .encodeFunctionData('multiSend', [encodeMultiSend(txs)]) - + const finalRawRx = { to: multiSendCall.getAddress(), data: txnData, @@ -108,25 +108,34 @@ export class RestRelayer implements Relayer { console.log(finalRawRx) // API call - // rawTx to becomes multiSend address and data gets prepared again - return sendRequest({ + // rawTx to becomes multiSend address and data gets prepared again + return sendRequest({ url: `${this.#relayServiceBaseUrl}`, method: HttpMethod.Post, - body: { ...finalRawRx, gasLimit: gasLimit, refundInfo: { - tokenGasPrice: signedTx.tx.gasPrice, - gasToken: signedTx.tx.gasToken } } - }) - } - + body: { + ...finalRawRx, + gasLimit: gasLimit, + refundInfo: { + tokenGasPrice: signedTx.tx.gasPrice, + gasToken: signedTx.tx.gasToken + } + } + }) + } + console.log('signedTx', signedTx) // API call return sendRequest({ url: `${this.#relayServiceBaseUrl}`, method: HttpMethod.Post, - body: { ...signedTx.rawTx, gasLimit: gasLimit, refundInfo: { - tokenGasPrice: signedTx.tx.gasPrice, - gasToken: signedTx.tx.gasToken, - } } + body: { + ...signedTx.rawTx, + gasLimit: gasLimit, + refundInfo: { + tokenGasPrice: signedTx.tx.gasPrice, + gasToken: signedTx.tx.gasToken + } + } }) } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 75aa493c9..d82e04527 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -165,6 +165,7 @@ class SmartAccount { this.contractUtils = new ContractUtils(this.DEFAULT_VERSION) this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) this.relayer = new RestRelayer({ url: this.#smartAccountConfig.relayer_url }) + this.aaProvider = {} } async init() { @@ -175,18 +176,15 @@ class SmartAccount { const chainConfig = (await this.nodeClient.getAllSupportedChains()).data for (let index = 0; index < this.#smartAccountConfig.supportedNetworksIds.length; index++) { - const network = chainConfig.find(element => element.chainId === this.#smartAccountConfig.supportedNetworksIds[index]) - if ( network ) - this.chainConfig.push(network) + const network = chainConfig.find( + (element) => element.chainId === this.#smartAccountConfig.supportedNetworksIds[index] + ) + if (network) this.chainConfig.push(network) } console.log('supported chains length is ', this.chainConfig.length) console.log('supported chains list is ', this.chainConfig) - await this.contractUtils.initialize( - chainConfig, - this.#smartAccountConfig, - this.signer - ) + await this.contractUtils.initialize(chainConfig, this.#smartAccountConfig, this.signer) this.address = await this.getAddress({ index: 0, @@ -217,11 +215,25 @@ class SmartAccount { for (let index = 0; index < this.chainConfig.length; index++) { const network = this.chainConfig[index] console.log('initialising for chain ', network.chainId) - let providerUrl = this.#smartAccountConfig.providerUrlConfig?.find(element=> element.chainId === network.chainId)?.providerUrl || '' + let providerUrl = + this.#smartAccountConfig.providerUrlConfig?.find( + (element) => element.chainId === network.chainId + )?.providerUrl || '' console.log('Used provider from config ', providerUrl) - if (!providerUrl) - providerUrl = network.providerUrl + if (!providerUrl) providerUrl = network.providerUrl + + console.log( + ' this.#smartAccountConfig.paymasterAddress ', + this.#smartAccountConfig.paymasterAddress + ) + console.log(' entryPointAddress ', entryPointAddress) + console.log('this.#smartAccountConfig.bundlerUrl ', this.#smartAccountConfig.bundlerUrl) + console.log('network.chainId ', network.chainId) + console.log('this.signer ', this.signer) + console.log('this.address ', this.address) + console.log('state.fallbackHandlerAddress ', state.fallbackHandlerAddress) + console.log('factoryAddress ', factoryAddress) this.aaProvider[network.chainId] = await newProvider( new ethers.providers.JsonRpcProvider(providerUrl), @@ -237,6 +249,7 @@ class SmartAccount { state.fallbackHandlerAddress, factoryAddress ) + console.log('round completed for chainid ', network.chainId) } console.log('aa provider ', this.aaProvider) @@ -721,6 +734,7 @@ class SmartAccount { // TODO/NOTE : make Goerli and Mumbai as test networks and remove others export const DefaultSmartAccountConfig: SmartAccountConfig = { activeNetworkId: ChainId.GOERLI, //Update later + // paymasterAddress: '0x50e8996670759E1FAA315eeaCcEfe0c0A043aA51', supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], backend_url: 'https://sdk-backend.staging.biconomy.io/v1', relayer_url: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay', @@ -730,6 +744,10 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { { chainId: ChainId.GOERLI, providerUrl: 'https://eth-goerli.alchemyapi.io/v2/lmW2og_aq-OXWKYRoRu-X6Yl6wDQYt_2' + }, + { + chainId: ChainId.POLYGON_MUMBAI, + providerUrl: 'https://polygon-mumbai.g.alchemy.com/v2/Q4WqQVxhEEmBYREX22xfsS2-s5EXWD31' } ] } diff --git a/packages/smart-account/src/providers/SmartAccountProvider.ts b/packages/smart-account/src/providers/SmartAccountProvider.ts index caf078734..e074bb257 100644 --- a/packages/smart-account/src/providers/SmartAccountProvider.ts +++ b/packages/smart-account/src/providers/SmartAccountProvider.ts @@ -1,6 +1,12 @@ import { ethers } from 'ethers' import { BytesLike, Bytes } from '@ethersproject/bytes' -import { Web3Provider, ExternalProvider, BaseProvider, JsonRpcProvider, Networkish } from '@ethersproject/providers' +import { + Web3Provider, + ExternalProvider, + BaseProvider, + JsonRpcProvider, + Networkish +} from '@ethersproject/providers' import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer' import { SmartAccountSigner } from '../signers/SmartAccountSigner' import { JsonRpcHandler } from './types' @@ -8,10 +14,10 @@ import { BigNumber, Signer } from 'ethers' import { TransactionResponse } from '@ethersproject/providers' import { - ChainId, - SendTransactionDto, - SignTransactionDto, - IWalletTransaction, + ChainId, + SendTransactionDto, + SignTransactionDto, + IWalletTransaction } from '@biconomy-sdk/core-types' // import { JsonRpcSender } from '@0xsequence/network' @@ -37,63 +43,59 @@ import { // Other ways.. // We could just extend BaseProvider export class SmartAccountProvider extends BaseProvider { - - readonly signer!: SmartAccountSigner - - // - // Might need relayer url in config - constructor( - tempProvider: Web3Provider, - chainId: ChainId, - readonly originalSigner: Signer, // EOASigner - readonly originalProvider: BaseProvider, // could be Web3Provider // optional? cc @sachin - // readonly httpRpcClient: HttpRpcClient, // Required for relaying to rpc-relayer - // readonly smartAccountAPI: SmartAccountAPI ? // Could be useful/needful - ) { - - super({ - name: 'Smart Account User Refund Provider', - chainId: chainId - }) - // Signer needs config, originalSigner, way to dispatch to rpc-relayer, smart-account-apis - - // Might pass relayer url as config - this.signer = new SmartAccountSigner(tempProvider, chainId) - - } - - async init (): Promise { - // Could init client / API class instances - return this - } - - getSigner (): SmartAccountSigner { - return this.signer - } - - async getTransaction (transactionHash: string | Promise): Promise { - // TODO - // Getting wallet transaction - return await super.getTransaction(transactionHash) - } - - // Could be - // getTransactionReceipt - + readonly signer!: SmartAccountSigner + + // + // Might need relayer url in config + constructor( + tempProvider: Web3Provider, + chainId: ChainId, + readonly originalSigner: Signer, // EOASigner + readonly originalProvider: BaseProvider // could be Web3Provider // optional? cc @sachin + ) // readonly httpRpcClient: HttpRpcClient, // Required for relaying to rpc-relayer + // readonly smartAccountAPI: SmartAccountAPI ? // Could be useful/needful + { + super({ + name: 'Smart Account User Refund Provider', + chainId: chainId + }) + // Signer needs config, originalSigner, way to dispatch to rpc-relayer, smart-account-apis + + // Might pass relayer url as config + this.signer = new SmartAccountSigner(tempProvider, chainId) + } + + async init(): Promise { + // Could init client / API class instances + return this + } + + getSigner(): SmartAccountSigner { + return this.signer + } + + async getTransaction(transactionHash: string | Promise): Promise { // TODO - // Helper for fabricating a response in a format usable by ethers users... - async constructSmartAccountTransactionResponse (tx: IWalletTransaction): Promise { - console.log(tx) - return null - } - - // Could be extra method getAddress() or getSmartAccountAddress() - - // Could be extra method waitForTransaction() - //{ - // This will poll on transactionId provided by the relayer, over the socket using messaging-sdk - //} - - - -} \ No newline at end of file + // Getting wallet transaction + return await super.getTransaction(transactionHash) + } + + // Could be + // getTransactionReceipt + + // TODO + // Helper for fabricating a response in a format usable by ethers users... + async constructSmartAccountTransactionResponse( + tx: IWalletTransaction + ): Promise { + console.log(tx) + return null + } + + // Could be extra method getAddress() or getSmartAccountAddress() + + // Could be extra method waitForTransaction() + //{ + // This will poll on transactionId provided by the relayer, over the socket using messaging-sdk + //} +} diff --git a/packages/smart-account/src/providers/types.ts b/packages/smart-account/src/providers/types.ts index fab2752b2..cc96d83df 100644 --- a/packages/smart-account/src/providers/types.ts +++ b/packages/smart-account/src/providers/types.ts @@ -15,16 +15,20 @@ export interface JsonRpcResponse { } export interface ProviderRpcError extends Error { - message: string; - code?: number; - data?: { - [key: string]: any; - }; + message: string + code?: number + data?: { + [key: string]: any + } } export type JsonRpcResponseCallback = (error?: ProviderRpcError, response?: JsonRpcResponse) => void -export type JsonRpcHandlerFunc = (request: JsonRpcRequest, callback: JsonRpcResponseCallback, chainId?: number) => void +export type JsonRpcHandlerFunc = ( + request: JsonRpcRequest, + callback: JsonRpcResponseCallback, + chainId?: number +) => void export interface JsonRpcHandler { sendAsync: JsonRpcHandlerFunc @@ -33,7 +37,10 @@ export interface JsonRpcHandler { export type JsonRpcFetchFunc = (method: string, params?: any[], chainId?: number) => Promise // EIP-1193 function signature -export type JsonRpcRequestFunc = (request: { method: string; params?: any[] }, chainId?: number) => Promise +export type JsonRpcRequestFunc = ( + request: { method: string; params?: any[] }, + chainId?: number +) => Promise export type JsonRpcMiddleware = (next: JsonRpcHandlerFunc) => JsonRpcHandlerFunc diff --git a/packages/smart-account/src/signers/Signer.ts b/packages/smart-account/src/signers/Signer.ts index 996740cf8..7555673eb 100644 --- a/packages/smart-account/src/signers/Signer.ts +++ b/packages/smart-account/src/signers/Signer.ts @@ -2,11 +2,7 @@ import { ethers, Signer as AbstractSigner } from 'ethers' import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer' // ChainId , SmartAccountContext, SmartAccountConfig, SmartAccountState from @biconomy-sdk/core-types -import { - ChainId, - SendTransactionDto, - SignTransactionDto, - } from '@biconomy-sdk/core-types' +import { ChainId, SendTransactionDto, SignTransactionDto } from '@biconomy-sdk/core-types' import { JsonRpcProvider, TransactionResponse } from '@ethersproject/providers' // Might as well be RpcRelayer @@ -16,33 +12,32 @@ import { Deferrable } from 'ethers/lib/utils' import { TransactionRequest } from '@ethersproject/providers' export abstract class Signer extends AbstractSigner { - abstract getProvider(chainId?: number): Promise - // Review - abstract getRelayer(chainId?: number): Promise - - // signMessage ..... - // Review - abstract signMessage(message: BytesLike, chainId?: ChainId): Promise - - // signTypedData .. - abstract signTypedData( - domain: TypedDataDomain, - types: Record>, - message: Record, - chainId?: ChainId, - allSigners?: boolean - ): Promise - - // sendTransaction takes an prepared transaction dto, and then has it signed by - // the signer, and finally sends it to the rpc-relayer for submission to an Ethereum network. - abstract sendTransaction( - transaction: Deferrable, - // sendTransactionDto: SendTransactionDto - ): Promise // Could be transaction hash or receipt // TBD but it must follow AbstractSigner - - // We might as well (just) have sendTransactionBatch that takes array of transactions / sendTransactionsDto - - // Signs the transaction with original signer... - abstract signTransaction(signTransactionDto: SignTransactionDto): Promise - -} \ No newline at end of file + abstract getProvider(chainId?: number): Promise + // Review + abstract getRelayer(chainId?: number): Promise + + // signMessage ..... + // Review + abstract signMessage(message: BytesLike, chainId?: ChainId): Promise + + // signTypedData .. + abstract signTypedData( + domain: TypedDataDomain, + types: Record>, + message: Record, + chainId?: ChainId, + allSigners?: boolean + ): Promise + + // sendTransaction takes an prepared transaction dto, and then has it signed by + // the signer, and finally sends it to the rpc-relayer for submission to an Ethereum network. + abstract sendTransaction( + transaction: Deferrable + ): // sendTransactionDto: SendTransactionDto + Promise // Could be transaction hash or receipt // TBD but it must follow AbstractSigner + + // We might as well (just) have sendTransactionBatch that takes array of transactions / sendTransactionsDto + + // Signs the transaction with original signer... + abstract signTransaction(signTransactionDto: SignTransactionDto): Promise +} diff --git a/packages/smart-account/src/signers/SmartAccountSigner.ts b/packages/smart-account/src/signers/SmartAccountSigner.ts index 3c4bcb91f..956899824 100644 --- a/packages/smart-account/src/signers/SmartAccountSigner.ts +++ b/packages/smart-account/src/signers/SmartAccountSigner.ts @@ -1,17 +1,18 @@ import { ethers } from 'ethers' import { BytesLike, Bytes } from '@ethersproject/bytes' -import { Web3Provider, ExternalProvider, JsonRpcProvider, Networkish } from '@ethersproject/providers' +import { + Web3Provider, + ExternalProvider, + JsonRpcProvider, + Networkish +} from '@ethersproject/providers' import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer' import { Signer } from './Signer' import { Signer as EthersSigner } from '@ethersproject/abstract-signer' // ChainId , SmartAccountContext, SmartAccountConfig, SmartAccountState from @biconomy-sdk/core-types -import { - ChainId, - SendTransactionDto, - SignTransactionDto, - } from '@biconomy-sdk/core-types' +import { ChainId, SendTransactionDto, SignTransactionDto } from '@biconomy-sdk/core-types' // Might as well be RpcRelayer import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' @@ -22,75 +23,76 @@ import { TransactionRequest, TransactionResponse } from '@ethersproject/provider // Other ways : // Signer needs config, originalSigner, way to dispatch to rpc-relayer, smart-account-apis export class SmartAccountSigner extends Signer implements TypedDataSigner { - // Should be SmartAccountProvider (which makes me want to merge SmartAccountSigner in SmartAccountProvider file) - readonly provider: Web3Provider - // Review - readonly defaultChainId?: number - - constructor(provider: Web3Provider, defaultChainId?: number) { - super() - this.provider = provider - this.defaultChainId = defaultChainId - } + // Should be SmartAccountProvider (which makes me want to merge SmartAccountSigner in SmartAccountProvider file) + readonly provider: Web3Provider + // Review + readonly defaultChainId?: number - _address!: string - - // Might have - // _context: not smartAccountContext but the addresses of contracts from SmartAccountState - // + constructor(provider: Web3Provider, defaultChainId?: number) { + super() + this.provider = provider + this.defaultChainId = defaultChainId + } - // TBD - private _providers: { [key: number]: Web3Provider } = {} + _address!: string + // Might have + // _context: not smartAccountContext but the addresses of contracts from SmartAccountState + // - /** - * Note: When you do getAddress it could use provider.getAddress / provider.getSmartAccountAddress or directly access SmartAccountAPI - */ - async getAddress(): Promise { - if (this._address) return this._address - const accounts = await this.provider.send('eth_accounts', []) - this._address = accounts[0] - return ethers.utils.getAddress(this._address) - } + // TBD + private _providers: { [key: number]: Web3Provider } = {} - async signTransaction(signTransactionDto: SignTransactionDto): Promise { - console.log(signTransactionDto) - const signature = ""; - return signature - } + /** + * Note: When you do getAddress it could use provider.getAddress / provider.getSmartAccountAddress or directly access SmartAccountAPI + */ + async getAddress(): Promise { + if (this._address) return this._address + const accounts = await this.provider.send('eth_accounts', []) + this._address = accounts[0] + return ethers.utils.getAddress(this._address) + } - // getProvider + async signTransaction(signTransactionDto: SignTransactionDto): Promise { + console.log(signTransactionDto) + const signature = '' + return signature + } - getRelayer(chainId?: number): Promise { - console.log(chainId) - throw new Error('TODO') - } + // getProvider - // Review - // getProvider returns a Web3Provider instance for the current chain. + getRelayer(chainId?: number): Promise { + console.log(chainId) + throw new Error('TODO') + } + + // Review + // getProvider returns a Web3Provider instance for the current chain. // Note that this method is bound to a particular chain - + // Review for the provider we want here async getProvider(chainId?: number): Promise { if (chainId) { const currentChainId = await this.getChainId() if (currentChainId !== chainId) { - throw new Error(`signer is attempting to access chain ${chainId}, but is already bound to chain ${currentChainId}`) + throw new Error( + `signer is attempting to access chain ${chainId}, but is already bound to chain ${currentChainId}` + ) } } return this.provider } // handle compatibility with smart account's intent - async sendTransaction(transaction: Deferrable):Promise { + async sendTransaction(transaction: Deferrable): Promise { console.log(transaction) - const txHash = "" + const txHash = '' // @ts-ignore return txHash } - // signMessage matches implementation from ethers JsonRpcSigner for compatibility, but with + // signMessage matches implementation from ethers JsonRpcSigner for compatibility, but with // multi-chain support. async signMessage(message: BytesLike, chainId?: ChainId): Promise { console.log(chainId) @@ -110,13 +112,13 @@ export class SmartAccountSigner extends Signer implements TypedDataSigner { domain: TypedDataDomain, types: Record>, message: Record, - chainId?: ChainId, + chainId?: ChainId ): Promise { console.log(chainId) - return await this.provider.send( - 'eth_signTypedData_v4', - [await this.getAddress(), ethers.utils._TypedDataEncoder.getPayload(domain, types, message)] - ) + return await this.provider.send('eth_signTypedData_v4', [ + await this.getAddress(), + ethers.utils._TypedDataEncoder.getPayload(domain, types, message) + ]) } async _signTypedData( @@ -138,7 +140,6 @@ export class SmartAccountSigner extends Signer implements TypedDataSigner { } } - // Other ways... /*export class SmartAccountSigner extends EthersSigner { @@ -151,4 +152,4 @@ export class SmartAccountSigner extends Signer implements TypedDataSigner { async sendTransaction (transaction: Deferrable): Promise { } -}*/ \ No newline at end of file +}*/ diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index 0ec47882f..da66885e7 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -71,909 +71,1016 @@ describe('Wallet integration', function () { .persist() .get('/v1/chains/') .reply(200, { - "message": "Success", - "code": 200, - "data": [ - { - "chainId": 1, - "name": "Ethereum", - "symbol": "ETH", - "isL2": false, - "isMainnet": true, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://etherscan.io/address/", - "txHash": "https://etherscan.io/address/", - "api": "https://api.etherscan.io/" - }, - "ensRegistryAddress": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", - "estimatorAddress": "0xc6e8748a08e591250a3eed526e9455859633c6c4", - "walletFactory": [ - { - "version": "1.0.0", - "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", - "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": "0x596387b0232540b3b620050dcd747fa7e4d21797", - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6", - "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" - } - ], - "decoderAddress": "0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18", - "multiSend": [ - { - "version": "1.0.0", - "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "eoaChangedEventHit": false, - "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", - "updateImplementationEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": "0xc313daf8dc1e6991f15068a6ca27d372f08a5455", - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://kovan.infura.io/v3/d126f392798444609246423b06116c77", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 1, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "name": "Ether", - "symbol": "ETH", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", - "isNative": true - } + message: 'Success', + code: 200, + data: [ + { + chainId: 1, + name: 'Ethereum', + symbol: 'ETH', + isL2: false, + isMainnet: true, + description: '', + blockExplorerUriTemplate: { + address: 'https://etherscan.io/address/', + txHash: 'https://etherscan.io/address/', + api: 'https://api.etherscan.io/' + }, + ensRegistryAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + estimatorAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', + walletFactory: [ + { + version: '1.0.0', + address: '0x6cedfeec52d852fdacdc6ad4a80f58aab406a898', + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5', + walletCreatedAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"}],"name":"WalletCreated","type":"event"}]' + }, + { + version: '1.0.1', + address: '0x596387b0232540b3b620050dcd747fa7e4d21797', + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6', + walletCreatedAbi: + '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + } + ], + decoderAddress: '0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18', + multiSend: [ + { + version: '1.0.0', + address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + abi: '' + }, + { + version: '1.0.1', + address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + abi: '' + } + ], + multiSendCall: [ + { + version: '1.0.0', + address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + abi: '' + }, + { + version: '1.0.1', + address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + eoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + eoaChangedEventHit: false, + updateImplementationCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', + updateImplementationEventHit: false, + wallet: [ + { + version: '1.0.0', + address: '0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb', + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + }, + { + version: '1.0.1', + address: '0xc313daf8dc1e6991f15068a6ca27d372f08a5455', + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + } + ], + entryPoint: [ + { + version: '1.0.0', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + }, + { + version: '1.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + fallBackHandler: [ + { + version: '1.0.0', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + }, + { + version: '1.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + relayerUrl: '', + providerUrl: 'https://kovan.infura.io/v3/d126f392798444609246423b06116c77', + indexerUrl: '', + backendNodeUrl: '', + token: { + chainId: 1, + address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + name: 'Ether', + symbol: 'ETH', + decimals: 18, + logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png', + isNative: true + } + }, + { + chainId: 137, + name: 'Polygon', + symbol: 'MATIC', + isL2: true, + isMainnet: true, + description: '', + blockExplorerUriTemplate: { + address: 'https://polygonscan.com/address/', + txHash: 'https://polygonscan.com/address/', + api: 'https://api.polygonscan.com/' + }, + ensRegistryAddress: '', + estimatorAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', + walletFactory: [ + { + version: '1.0.0', + address: '0x6cedfeec52d852fdacdc6ad4a80f58aab406a898', + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5', + walletCreatedAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"}],"name":"WalletCreated","type":"event"}]' + }, + { + version: '1.0.1', + address: '0x2602cf019a69f40fb7de5a0f3fdb778eee7ed722', + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6', + walletCreatedAbi: + '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + } + ], + decoderAddress: '0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18', + multiSend: [ + { + version: '1.0.0', + address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + abi: '' + }, + { + version: '1.0.1', + address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + abi: '' + } + ], + multiSendCall: [ + { + version: '1.0.0', + address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + abi: '' + }, + { + version: '1.0.1', + address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + eoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + eoaChangedEventHit: false, + updateImplementationCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', + updateImplementationEventHit: false, + wallet: [ + { + version: '1.0.0', + address: '0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb', + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + }, + { + version: '1.0.1', + address: '0x140a25bd5b002dceae2754cf12576a2640ddc18e', + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + } + ], + entryPoint: [ + { + version: '1.0.0', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + }, + { + version: '1.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + fallBackHandler: [ + { + version: '1.0.0', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + }, + { + version: '1.0.1', + address: '0xfc942e06c54d08502557fa40e1aa23c5258132d5', + abi: '' + } + ], + relayerUrl: '', + providerUrl: + 'https://polygon-mainnet.g.alchemy.com/v2/s6bOKN9QDGXpVbsqzJMl_AHeZHNOCTcM', + indexerUrl: '', + backendNodeUrl: '', + token: { + chainId: 137, + address: '0x0000000000000000000000000000000000001010', + name: 'Polygon Matic', + symbol: 'Matic', + decimals: 18, + logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png', + isNative: true + } + }, + { + chainId: 56, + name: 'BSC Mainnet', + symbol: 'BNB', + isL2: true, + isMainnet: true, + description: '', + blockExplorerUriTemplate: { + address: 'https://bscscan.com/address/', + txHash: 'https://bscscan.com/address/', + api: 'https://bscscan.com/' + }, + ensRegistryAddress: '', + estimatorAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', + walletFactory: [ + { + version: '1.0.0', + address: '0x6cedfeec52d852fdacdc6ad4a80f58aab406a898', + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5', + walletCreatedAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"}],"name":"WalletCreated","type":"event"}]' + }, + { + version: '1.0.1', + address: '0x596387b0232540b3b620050dcd747fa7e4d21797', + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6', + walletCreatedAbi: + '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + } + ], + decoderAddress: '0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18', + multiSend: [ + { + version: '1.0.0', + address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + abi: '' + }, + { + version: '1.0.1', + address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + abi: '' + } + ], + multiSendCall: [ + { + version: '1.0.0', + address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + abi: '' + }, + { + version: '1.0.1', + address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + eoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + eoaChangedEventHit: false, + updateImplementationCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', + updateImplementationEventHit: false, + wallet: [ + { + version: '1.0.0', + address: '0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb', + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + }, + { + version: '1.0.1', + address: '0xc313daf8dc1e6991f15068a6ca27d372f08a5455', + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + } + ], + entryPoint: [ + { + version: '1.0.0', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + }, + { + version: '1.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + fallBackHandler: [ + { + version: '1.0.0', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + }, + { + version: '1.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + relayerUrl: '', + providerUrl: 'https://bsc-dataseed2.binance.org/', + indexerUrl: '', + backendNodeUrl: '', + token: { + chainId: 56, + address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + name: 'BNB Coin', + symbol: 'BNB', + decimals: 18, + logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png', + isNative: true + } + }, + { + chainId: 5, + name: 'Goerli', + symbol: 'ETH', + isL2: false, + isMainnet: false, + description: '', + blockExplorerUriTemplate: { + address: 'https://goerli.etherscan.io/address/', + txHash: 'https://goerli.etherscan.io/address/', + api: 'https://goerli.etherscan.io/' + }, + ensRegistryAddress: '', + estimatorAddress: '0x8caefe0d512b8e86c7c1bb59e7473d354cf864ab', + walletFactory: [ + { + version: '1.0.0', + address: '0x6cedfeec52d852fdacdc6ad4a80f58aab406a898', + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5', + walletCreatedAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"}],"name":"WalletCreated","type":"event"}]' + }, + { + version: '1.0.1', + address: '0x2602cf019a69f40fb7de5a0f3fdb778eee7ed722', + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6', + walletCreatedAbi: + '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + } + ], + decoderAddress: '0xba63a55b7ee3334044a2100c99acdd93325fc0cb', + multiSend: [ + { + version: '1.0.0', + address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + abi: '' + }, + { + version: '1.0.1', + address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + abi: '' + } + ], + multiSendCall: [ + { + version: '1.0.0', + address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + abi: '' + }, + { + version: '1.0.1', + address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + eoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + eoaChangedEventHit: false, + updateImplementationCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', + updateImplementationEventHit: false, + wallet: [ + { + version: '1.0.0', + address: '0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb', + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + }, + { + version: '1.0.1', + address: '0x140a25bd5b002dceae2754cf12576a2640ddc18e', + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + } + ], + entryPoint: [ + { + version: '1.0.0', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + }, + { + version: '1.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + fallBackHandler: [ + { + version: '1.0.0', + address: '0xfc942e06c54d08502557fa40e1aa23c5258132d5', + abi: '' + }, + { + version: '1.0.1', + address: '0xfc942e06c54d08502557fa40e1aa23c5258132d5', + abi: '' + } + ], + relayerUrl: '', + providerUrl: 'https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg', + indexerUrl: '', + backendNodeUrl: '', + token: { + chainId: 5, + address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + name: 'Ether', + symbol: 'ETH', + decimals: 18, + logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png', + isNative: true + } + }, + { + chainId: 80001, + name: 'Polygon Mumbai', + symbol: 'MATIC', + isL2: true, + isMainnet: false, + description: '', + blockExplorerUriTemplate: { + address: 'https://mumbai.polygonscan.com/address/', + txHash: 'https://mumbai.polygonscan.com/address/', + api: 'https://api.mumbai.polygonscan.com/' + }, + ensRegistryAddress: '', + estimatorAddress: '0x8caefe0d512b8e86c7c1bb59e7473d354cf864ab', + walletFactory: [ + { + version: '1.0.0', + address: '0x6cedfeec52d852fdacdc6ad4a80f58aab406a898', + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5', + walletCreatedAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"}],"name":"WalletCreated","type":"event"}]' + }, + { + version: '1.0.1', + address: '0x2602cf019a69f40fb7de5a0f3fdb778eee7ed722', + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5', + walletCreatedAbi: + '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + } + ], + decoderAddress: '0xba63a55b7ee3334044a2100c99acdd93325fc0cb', + multiSend: [ + { + version: '1.0.0', + address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + abi: '' + }, + { + version: '1.0.1', + address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + abi: '' + } + ], + multiSendCall: [ + { + version: '1.0.0', + address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + abi: '' + }, + { + version: '1.0.1', + address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + eoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + eoaChangedEventHit: false, + updateImplementationCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', + updateImplementationEventHit: false, + wallet: [ + { + version: '1.0.0', + address: '0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb', + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + }, + { + version: '1.0.1', + address: '0x140a25bd5b002dceae2754cf12576a2640ddc18e', + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + } + ], + entryPoint: [ + { + version: '1.0.0', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + }, + { + version: '1.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + fallBackHandler: [ + { + version: '1.0.0', + address: '0xfc942e06c54d08502557fa40e1aa23c5258132d5', + abi: '' + }, + { + version: '1.0.1', + address: '0xfc942e06c54d08502557fa40e1aa23c5258132d5', + abi: '' + } + ], + relayerUrl: '', + providerUrl: + 'https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b', + indexerUrl: '', + backendNodeUrl: '', + token: { + chainId: 80001, + address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', + name: 'Polygon Matic', + symbol: 'Matic', + decimals: 18, + logoURI: 'https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png', + isNative: true + } + }, + { + chainId: 97, + name: 'BSC Testnet', + symbol: 'BNB', + isL2: true, + isMainnet: false, + description: '', + blockExplorerUriTemplate: { + address: 'https://bscscan.com//address/', + txHash: 'https://bscscan.com/address/', + api: 'https://bscscan.com/' + }, + ensRegistryAddress: '', + estimatorAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', + walletFactory: [ + { + version: '1.0.0', + address: '0x6cedfeec52d852fdacdc6ad4a80f58aab406a898', + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5', + walletCreatedAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"}],"name":"WalletCreated","type":"event"}]' + }, + { + version: '1.0.1', + address: '0x596387b0232540b3b620050dcd747fa7e4d21797', + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6', + walletCreatedAbi: + '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + } + ], + decoderAddress: '0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18', + multiSend: [ + { + version: '1.0.0', + address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + abi: '' + }, + { + version: '1.0.1', + address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + abi: '' + } + ], + multiSendCall: [ + { + version: '1.0.0', + address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + abi: '' + }, + { + version: '1.0.1', + address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + eoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + eoaChangedEventHit: false, + updateImplementationCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', + updateImplementationEventHit: false, + wallet: [ + { + version: '1.0.0', + address: '0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb', + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + }, + { + version: '1.0.1', + address: '0xc313daf8dc1e6991f15068a6ca27d372f08a5455', + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + } + ], + entryPoint: [ + { + version: '1.0.0', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + }, + { + version: '1.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + fallBackHandler: [ + { + version: '1.0.0', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + }, + { + version: '1.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + relayerUrl: '', + providerUrl: 'https://data-seed-prebsc-1-s1.binance.org:8545/', + indexerUrl: '', + backendNodeUrl: '' + }, + { + chainId: 1337, + name: 'Ganache', + symbol: 'ETH', + isL2: true, + isMainnet: false, + description: '', + blockExplorerUriTemplate: { + address: 'https://mumbai.polygonscan.com/address/', + txHash: 'https://mumbai.polygonscan.com/address/', + api: 'https://api.mumbai.polygonscan.com/' + }, + ensRegistryAddress: '', + estimatorAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', + walletFactory: [ + { + version: '1.0.0', + address: '0x6cedfeec52d852fdacdc6ad4a80f58aab406a898', + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5', + walletCreatedAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"}],"name":"WalletCreated","type":"event"}]' }, { - "chainId": 137, - "name": "Polygon", - "symbol": "MATIC", - "isL2": true, - "isMainnet": true, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://polygonscan.com/address/", - "txHash": "https://polygonscan.com/address/", - "api": "https://api.polygonscan.com/" - }, - "ensRegistryAddress": "", - "estimatorAddress": "0xc6e8748a08e591250a3eed526e9455859633c6c4", - "walletFactory": [ - { - "version": "1.0.0", - "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", - "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": "0x2602cf019a69f40fb7de5a0f3fdb778eee7ed722", - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6", - "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" - } - ], - "decoderAddress": "0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18", - "multiSend": [ - { - "version": "1.0.0", - "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "eoaChangedEventHit": false, - "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", - "updateImplementationEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": "0x140a25bd5b002dceae2754cf12576a2640ddc18e", - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xfc942e06c54d08502557fa40e1aa23c5258132d5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://polygon-mainnet.g.alchemy.com/v2/s6bOKN9QDGXpVbsqzJMl_AHeZHNOCTcM", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 137, - "address": "0x0000000000000000000000000000000000001010", - "name": "Polygon Matic", - "symbol": "Matic", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png", - "isNative": true - } + version: '1.0.1', + address: walletFactory.address, + abi: '', + walletCreatedEventName: 'WalletCreated', + WalletCreatedEventConfirmations: 6, + walletCreatedEventTopicHash: + '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6', + walletCreatedAbi: + '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + } + ], + decoderAddress: '0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18', + multiSend: [ + { + version: '1.0.0', + address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + abi: '' }, { - "chainId": 56, - "name": "BSC Mainnet", - "symbol": "BNB", - "isL2": true, - "isMainnet": true, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://bscscan.com/address/", - "txHash": "https://bscscan.com/address/", - "api": "https://bscscan.com/" - }, - "ensRegistryAddress": "", - "estimatorAddress": "0xc6e8748a08e591250a3eed526e9455859633c6c4", - "walletFactory": [ - { - "version": "1.0.0", - "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", - "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": "0x596387b0232540b3b620050dcd747fa7e4d21797", - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6", - "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" - } - ], - "decoderAddress": "0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18", - "multiSend": [ - { - "version": "1.0.0", - "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "eoaChangedEventHit": false, - "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", - "updateImplementationEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": "0xc313daf8dc1e6991f15068a6ca27d372f08a5455", - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://bsc-dataseed2.binance.org/", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 56, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "name": "BNB Coin", - "symbol": "BNB", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png", - "isNative": true - } + version: '1.0.1', + address: multiSend.address, + abi: '' + } + ], + multiSendCall: [ + { + version: '1.0.0', + address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + abi: '' }, { - "chainId": 5, - "name": "Goerli", - "symbol": "ETH", - "isL2": false, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://goerli.etherscan.io/address/", - "txHash": "https://goerli.etherscan.io/address/", - "api": "https://goerli.etherscan.io/" - }, - "ensRegistryAddress": "", - "estimatorAddress": "0x8caefe0d512b8e86c7c1bb59e7473d354cf864ab", - "walletFactory": [ - { - "version": "1.0.0", - "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", - "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": "0x2602cf019a69f40fb7de5a0f3fdb778eee7ed722", - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6", - "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" - } - ], - "decoderAddress": "0xba63a55b7ee3334044a2100c99acdd93325fc0cb", - "multiSend": [ - { - "version": "1.0.0", - "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "eoaChangedEventHit": false, - "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", - "updateImplementationEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": "0x140a25bd5b002dceae2754cf12576a2640ddc18e", - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xfc942e06c54d08502557fa40e1aa23c5258132d5", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xfc942e06c54d08502557fa40e1aa23c5258132d5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://eth-goerli.g.alchemy.com/v2/477qAVdmEssSZbEPaUMTZXqyetQx5fxg", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 5, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "name": "Ether", - "symbol": "ETH", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png", - "isNative": true - } + version: '1.0.1', + address: multiSendCallOnly.address, + abi: '' + } + ], + walletCreatedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', + walletCreatedEventHit: false, + eoaChangedCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', + eoaChangedEventHit: false, + updateImplementationCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', + updateImplementationEventHit: false, + wallet: [ + { + version: '1.0.0', + address: '0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb', + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' }, { - "chainId": 80001, - "name": "Polygon Mumbai", - "symbol": "MATIC", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" - }, - "ensRegistryAddress": "", - "estimatorAddress": "0x8caefe0d512b8e86c7c1bb59e7473d354cf864ab", - "walletFactory": [ - { - "version": "1.0.0", - "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", - "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": "0x2602cf019a69f40fb7de5a0f3fdb778eee7ed722", - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", - "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" - } - ], - "decoderAddress": "0xba63a55b7ee3334044a2100c99acdd93325fc0cb", - "multiSend": [ - { - "version": "1.0.0", - "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "eoaChangedEventHit": false, - "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", - "updateImplementationEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": "0x140a25bd5b002dceae2754cf12576a2640ddc18e", - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xfc942e06c54d08502557fa40e1aa23c5258132d5", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xfc942e06c54d08502557fa40e1aa23c5258132d5", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://polygon-mumbai.g.alchemy.com/v2/7JwWhWSG1vtw6ggm_o_GcYnyNw02oM8b", - "indexerUrl": "", - "backendNodeUrl": "", - "token": { - "chainId": 80001, - "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", - "name": "Polygon Matic", - "symbol": "Matic", - "decimals": 18, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/3890.png", - "isNative": true - } + version: '1.0.1', + address: smartWallet.address, + abi: '', + eoaChangedEventName: 'EOAChanged', + eoaChangedEventConfirmations: 6, + eoaChangedEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + eoaChangedEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_scw","type":"address"},{"indexed":true,"internalType":"address","name":"_oldEOA","type":"address"},{"indexed":true,"internalType":"address","name":"_newEOA","type":"address"}],"name":"EOAChanged","type":"event"}]', + updateImplementationEventName: 'UpdateImplementation', + updateImplementationEventConfirmations: 6, + updateImplementationEventTopicHash: + '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + updateImplementationEventAbi: + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + } + ], + entryPoint: [ + { + version: '1.0.0', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' }, { - "chainId": 97, - "name": "BSC Testnet", - "symbol": "BNB", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://bscscan.com//address/", - "txHash": "https://bscscan.com/address/", - "api": "https://bscscan.com/" - }, - "ensRegistryAddress": "", - "estimatorAddress": "0xc6e8748a08e591250a3eed526e9455859633c6c4", - "walletFactory": [ - { - "version": "1.0.0", - "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", - "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": "0x596387b0232540b3b620050dcd747fa7e4d21797", - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6", - "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" - } - ], - "decoderAddress": "0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18", - "multiSend": [ - { - "version": "1.0.0", - "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "eoaChangedEventHit": false, - "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", - "updateImplementationEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": "0xc313daf8dc1e6991f15068a6ca27d372f08a5455", - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "https://data-seed-prebsc-1-s1.binance.org:8545/", - "indexerUrl": "", - "backendNodeUrl": "" + version: '1.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' + } + ], + fallBackHandler: [ + { + version: '1.0.0', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' }, { - "chainId": 1337, - "name": "Ganache", - "symbol": "ETH", - "isL2": true, - "isMainnet": false, - "description": "", - "blockExplorerUriTemplate": { - "address": "https://mumbai.polygonscan.com/address/", - "txHash": "https://mumbai.polygonscan.com/address/", - "api": "https://api.mumbai.polygonscan.com/" - }, - "ensRegistryAddress": "", - "estimatorAddress": "0xc6e8748a08e591250a3eed526e9455859633c6c4", - "walletFactory": [ - { - "version": "1.0.0", - "address": "0x6cedfeec52d852fdacdc6ad4a80f58aab406a898", - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5", - "walletCreatedAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": walletFactory.address, - "abi": "", - "walletCreatedEventName": "WalletCreated", - "WalletCreatedEventConfirmations": 6, - "walletCreatedEventTopicHash": "0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6", - "walletCreatedAbi": "{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"WalletCreated\",\"type\":\"event\"}" - } - ], - "decoderAddress": "0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18", - "multiSend": [ - { - "version": "1.0.0", - "address": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", - "abi": "" - }, - { - "version": "1.0.1", - "address": multiSend.address, - "abi": "" - } - ], - "multiSendCall": [ - { - "version": "1.0.0", - "address": "0xa72e2c9ec14ddee494f551aae9885158105f809c", - "abi": "" - }, - { - "version": "1.0.1", - "address": multiSendCallOnly.address, - "abi": "" - } - ], - "walletCreatedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts", - "walletCreatedEventHit": false, - "eoaChangedCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner", - "eoaChangedEventHit": false, - "updateImplementationCallBackEndpoint": "https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation", - "updateImplementationEventHit": false, - "wallet": [ - { - "version": "1.0.0", - "address": "0xea6eef40eaa8a642022f1697d6ed2ffc0ffe5dfb", - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - }, - { - "version": "1.0.1", - "address": smartWallet.address, - "abi": "", - "eoaChangedEventName": "EOAChanged", - "eoaChangedEventConfirmations": 6, - "eoaChangedEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "eoaChangedEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldEOA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newEOA\",\"type\":\"address\"}],\"name\":\"EOAChanged\",\"type\":\"event\"}]", - "updateImplementationEventName": "UpdateImplementation", - "updateImplementationEventConfirmations": 6, - "updateImplementationEventTopicHash": "0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4", - "updateImplementationEventAbi": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_scw\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"}]" - } - ], - "entryPoint": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "fallBackHandler": [ - { - "version": "1.0.0", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - }, - { - "version": "1.0.1", - "address": "0xF05217199F1C25604c67993F11a81461Bc97F3Ab", - "abi": "" - } - ], - "relayerUrl": "", - "providerUrl": "http://localhost:8545", - "indexerUrl": "", - "backendNodeUrl": "" + version: '1.0.1', + address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + abi: '' } - ] + ], + relayerUrl: '', + providerUrl: 'http://localhost:8545', + indexerUrl: '', + backendNodeUrl: '' + } + ] }) }) @@ -1035,7 +1142,7 @@ describe('Wallet integration', function () { const relayer = new LocalRelayer(eoaSigner) const state = await smartAccount.getSmartAccountState() const context = smartAccount.getSmartAccountContext() - const deployment = await relayer.deployWallet({config: state, context, index: 0}) + const deployment = await relayer.deployWallet({ config: state, context, index: 0 }) const receipt: TransactionReceipt = await deployment.wait(1) expect(receipt.status).to.be.equal(1) } @@ -1080,9 +1187,11 @@ describe('Wallet integration', function () { value: ethers.utils.parseEther('1') } - const smartAccountTransaction: WalletTransaction = await smartAccount.createTransaction({transaction:tx}) + const smartAccountTransaction: WalletTransaction = await smartAccount.createTransaction({ + transaction: tx + }) - const signature = await smartAccount.signTransaction({tx: smartAccountTransaction}) + const signature = await smartAccount.signTransaction({ tx: smartAccountTransaction }) console.log('signature is: ', signature) }) @@ -1159,7 +1268,9 @@ describe('Wallet integration', function () { value: ethers.utils.parseEther('0.5') } - const smartAccountTransaction: WalletTransaction = await smartAccount.createTransaction({transaction: tx}) + const smartAccountTransaction: WalletTransaction = await smartAccount.createTransaction({ + transaction: tx + }) // Attach relayer before sending a transaction @@ -1168,9 +1279,7 @@ describe('Wallet integration', function () { const relayer = new LocalRelayer(eoaSigner) smartAccount.setRelayer(relayer) expect(smartAccount.relayer).to.be.equal(relayer) - const hash: string = await smartAccount.sendTransaction( - {tx: smartAccountTransaction} - ) + const hash: string = await smartAccount.sendTransaction({ tx: smartAccountTransaction }) //const receipt: TransactionReceipt = await response.wait(1) //expect(receipt.status).to.be.equal(1) @@ -1231,9 +1340,9 @@ describe('Wallet integration', function () { txs.push(tx2) - const smartAccountTransaction: WalletTransaction = await smartAccount.createTransactionBatch( - {transactions: txs} - ) + const smartAccountTransaction: WalletTransaction = await smartAccount.createTransactionBatch({ + transactions: txs + }) // Attach relayer before sending a transaction @@ -1242,9 +1351,7 @@ describe('Wallet integration', function () { const relayer = new LocalRelayer(eoaSigner) smartAccount.setRelayer(relayer) expect(smartAccount.relayer).to.be.equal(relayer) - const txHash: string = await smartAccount.sendTransaction( - {tx: smartAccountTransaction} - ) + const txHash: string = await smartAccount.sendTransaction({ tx: smartAccountTransaction }) // TODO : get receipt from hash using provider // const receipt: TransactionReceipt = await response.wait(1) diff --git a/packages/transactions/src/TransactionAPI.ts b/packages/transactions/src/TransactionAPI.ts index d0411f848..13ab2c8e1 100644 --- a/packages/transactions/src/TransactionAPI.ts +++ b/packages/transactions/src/TransactionAPI.ts @@ -1,18 +1,15 @@ import { BigNumber, BigNumberish } from 'ethers' -import { -SmartWalletContract, -SmartWalletFactoryContract, -MultiSendContract, -MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' +import { + SmartWalletContract, + SmartWalletFactoryContract, + MultiSendContract, + MultiSendCallOnlyContract +} from '@biconomy-sdk/core-types' import { Signer } from '@ethersproject/abstract-signer' import { Provider } from '@ethersproject/providers' class TransactionAPI { - - - constructor() { - } - + constructor() {} } -export default TransactionAPI \ No newline at end of file +export default TransactionAPI diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index 6491cd639..505b73b1b 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -7,10 +7,7 @@ import { SmartAccountContext, SmartAccountConfig } from '@biconomy-sdk/core-types' -import{ - ChainConfig, - SupportedChainsResponse -} from '@biconomy-sdk/node-client' +import { ChainConfig, SupportedChainsResponse } from '@biconomy-sdk/node-client' import { getSmartWalletFactoryContract, getMultiSendContract, @@ -33,9 +30,9 @@ class ContractUtils { [chainId: number]: { [version: string]: SmartWalletFactoryContract } } - // Note: Should DEFAULT_VERSION be moved here? + // Note: Should DEFAULT_VERSION be moved here? - constructor(readonly version: string){ + constructor(readonly version: string) { this.ethAdapter = {} this.smartWalletContract = {} this.multiSendContract = {} @@ -43,31 +40,32 @@ class ContractUtils { this.smartWalletFactoryContract = {} } - public getSmartWalletContract(chainId: number): SmartWalletContract{ + public getSmartWalletContract(chainId: number): SmartWalletContract { return this.smartWalletContract[chainId][this.version] } - - - - public async initialize(supportedChains: ChainConfig[], config: SmartAccountConfig, signer: Signer) { - - const chainsInfo = supportedChains; + public async initialize( + supportedChains: ChainConfig[], + config: SmartAccountConfig, + signer: Signer + ) { + const chainsInfo = supportedChains for (let i = 0; i < chainsInfo.length; i++) { const network = chainsInfo[i] // To keep it network agnostic // Note: think about events when signer needs to pay gas - let providerUrl = config.providerUrlConfig?.find(element=> element.chainId === network.chainId)?.providerUrl || '' + let providerUrl = + config.providerUrlConfig?.find((element) => element.chainId === network.chainId) + ?.providerUrl || '' console.log('Used provider from config ', providerUrl) - if (!providerUrl) - providerUrl = network.providerUrl + if (!providerUrl) providerUrl = network.providerUrl const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) - console.log('chain id ', network.chainId, 'readProvider ', readProvider); + console.log('chain id ', network.chainId, 'readProvider ', readProvider) // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable this.ethAdapter[network.chainId] = new EvmNetworkManager({ @@ -132,14 +130,14 @@ class ContractUtils { return await this.smartWalletFactoryContract[chainId][version].isWalletExist(address) } - // + // /** * Serves smart contract instances associated with Smart Account for requested ChainId * Context is useful when relayer is deploying a wallet * @param chainId requested chain : default is active chain * @returns object containing relevant contract instances */ - getSmartAccountContext( + getSmartAccountContext( // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, chainId: ChainId, version: SmartAccountVersion @@ -148,11 +146,11 @@ class ContractUtils { baseWallet: this.smartWalletContract[chainId][version], walletFactory: this.smartWalletFactoryContract[chainId][version], multiSend: this.multiSendContract[chainId][version], - multiSendCall: this.multiSendCallOnlyContract[chainId][version], + multiSendCall: this.multiSendCallOnlyContract[chainId][version] // Could be added dex router for chain in the future } return context } } -export default ContractUtils \ No newline at end of file +export default ContractUtils diff --git a/packages/transactions/src/estimator.ts b/packages/transactions/src/estimator.ts index 6556a0675..51be10c93 100644 --- a/packages/transactions/src/estimator.ts +++ b/packages/transactions/src/estimator.ts @@ -1,174 +1,184 @@ import { ethers } from 'ethers' import { GasEstimator } from './assets' -import NodeClient, { - EstimateUndeployedContractGasDto, -} from '@biconomy-sdk/node-client' +import NodeClient, { EstimateUndeployedContractGasDto } from '@biconomy-sdk/node-client' import ContractUtils from './contract-utils' import { - EstimateSmartAccountDeploymentDto, - IWalletTransaction, - FAKE_SIGNATURE, - ExecTransaction, - IFeeRefundV1_0_1, - SmartAccountState - } from '@biconomy-sdk/core-types' -import { - PrepareRefundTransactionsDto, - PrepareRefundTransactionDto - } from './types' + EstimateSmartAccountDeploymentDto, + IWalletTransaction, + FAKE_SIGNATURE, + ExecTransaction, + IFeeRefundV1_0_1, + SmartAccountState +} from '@biconomy-sdk/core-types' +import { PrepareRefundTransactionsDto, PrepareRefundTransactionDto } from './types' export class Estimator { + nodeClient!: NodeClient + + contractUtils!: ContractUtils + + // Note: Smart account state should Not be part of constructor + constructor(nodeClient: NodeClient, contractUtils: ContractUtils) { + this.nodeClient = nodeClient + this.contractUtils = contractUtils + } + + async estimateTransaction( + prepareTransactionDto: PrepareRefundTransactionDto, + createdTransaction: IWalletTransaction, + smartAccountState: SmartAccountState + ): Promise { + const { transaction, batchId, chainId, version } = prepareTransactionDto + + let estimatedGasUsed = 0 + // Check if available from current state + const isDeployed = await this.contractUtils.isDeployed( + chainId, + version, + smartAccountState.address // SmartAccountState + ) + if (!isDeployed) { + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: smartAccountState.owner, // SmartAccountState + entryPointAddress: smartAccountState.entryPointAddress, // SmartAccountState + fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress // SmartAccountState + }) + console.log('estimateWalletDeployment ', estimateWalletDeployment) + + estimatedGasUsed += estimateWalletDeployment + } - nodeClient!: NodeClient + const txn: ExecTransaction = { + to: createdTransaction.to, + value: createdTransaction.value, + data: createdTransaction.data, + operation: createdTransaction.operation, + targetTxGas: createdTransaction.targetTxGas + } - contractUtils!: ContractUtils + // to avoid failing eth_call override with undeployed wallet + txn.targetTxGas = 500000 - // Note: Smart account state should Not be part of constructor - constructor(nodeClient: NodeClient, contractUtils: ContractUtils) { - this.nodeClient = nodeClient - this.contractUtils = contractUtils + const refundInfo: IFeeRefundV1_0_1 = { + baseGas: createdTransaction.baseGas, + gasPrice: createdTransaction.gasPrice, + tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, + gasToken: createdTransaction.gasToken, + refundReceiver: createdTransaction.refundReceiver } - async estimateTransaction(prepareTransactionDto: PrepareRefundTransactionDto, createdTransaction: IWalletTransaction, smartAccountState: SmartAccountState): Promise { - const { - transaction, - batchId, - chainId, - version - } = prepareTransactionDto - - let estimatedGasUsed = 0; - // Check if available from current state - const isDeployed = await this.contractUtils.isDeployed( - chainId, - version, - smartAccountState.address // SmartAccountState - ); - if (!isDeployed) { - const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId, - version, - owner: smartAccountState.owner, // SmartAccountState - entryPointAddress: smartAccountState.entryPointAddress, // SmartAccountState - fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress // SmartAccountState - }) - console.log('estimateWalletDeployment ', estimateWalletDeployment); - - estimatedGasUsed += estimateWalletDeployment; - } - - const txn: ExecTransaction = { - to: createdTransaction.to, - value: createdTransaction.value, - data: createdTransaction.data, - operation: createdTransaction.operation, - targetTxGas: createdTransaction.targetTxGas - } - - // to avoid failing eth_call override with undeployed wallet - txn.targetTxGas = 500000; - - const refundInfo: IFeeRefundV1_0_1 = { - baseGas: createdTransaction.baseGas, - gasPrice: createdTransaction.gasPrice, - tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, - gasToken: createdTransaction.gasToken, - refundReceiver: createdTransaction.refundReceiver - } - - const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { - chainId, - version, - transaction: txn, - walletAddress: smartAccountState.address, - feeRefund: refundInfo, - signature: FAKE_SIGNATURE - } - - const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas(estimateUndeployedContractGasDto); - let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); - console.log('no auth no refund estimate', noAuthEstimate); - - estimatedGasUsed += noAuthEstimate; - - return estimatedGasUsed; + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + version, + transaction: txn, + walletAddress: smartAccountState.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE } - async estimateTransactionBatch(prepareRefundTransactionsDto: PrepareRefundTransactionsDto, createdTransaction: IWalletTransaction, smartAccountState: SmartAccountState): Promise { - - const { transactions, batchId, chainId, version } = prepareRefundTransactionsDto - let estimatedGasUsed = 0; - // Check if available from current state - const isDeployed = await this.contractUtils.isDeployed(chainId, version, smartAccountState.address); - if (!isDeployed) { - const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId, - version, - owner: smartAccountState.owner, - entryPointAddress: smartAccountState.entryPointAddress, - fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress - }); - console.log('estimateWalletDeployment ', estimateWalletDeployment); - estimatedGasUsed += estimateWalletDeployment; - } - - const txn: ExecTransaction = { - to: createdTransaction.to, - value: createdTransaction.value, - data: createdTransaction.data, - operation: createdTransaction.operation, - targetTxGas: createdTransaction.targetTxGas - } - - // to avoid failing eth_call override with undeployed wallet - txn.targetTxGas = 500000; - - const refundInfo: IFeeRefundV1_0_1 = { - baseGas: createdTransaction.baseGas, - gasPrice: createdTransaction.gasPrice, - tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, - gasToken: createdTransaction.gasToken, - refundReceiver: createdTransaction.refundReceiver - } - - const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { - chainId, - version, - transaction: txn, - walletAddress: smartAccountState.address, - feeRefund: refundInfo, - signature: FAKE_SIGNATURE - } - - const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas(estimateUndeployedContractGasDto); - let noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas); - console.log('no auth no refund estimate', noAuthEstimate); - - estimatedGasUsed += noAuthEstimate; - - return estimatedGasUsed; + const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas( + estimateUndeployedContractGasDto + ) + let noAuthEstimate = + Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas) + console.log('no auth no refund estimate', noAuthEstimate) + + estimatedGasUsed += noAuthEstimate + + return estimatedGasUsed + } + + async estimateTransactionBatch( + prepareRefundTransactionsDto: PrepareRefundTransactionsDto, + createdTransaction: IWalletTransaction, + smartAccountState: SmartAccountState + ): Promise { + const { transactions, batchId, chainId, version } = prepareRefundTransactionsDto + let estimatedGasUsed = 0 + // Check if available from current state + const isDeployed = await this.contractUtils.isDeployed( + chainId, + version, + smartAccountState.address + ) + if (!isDeployed) { + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: smartAccountState.owner, + entryPointAddress: smartAccountState.entryPointAddress, + fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress + }) + console.log('estimateWalletDeployment ', estimateWalletDeployment) + estimatedGasUsed += estimateWalletDeployment } - async estimateSmartAccountDeployment(estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto): Promise { - const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); - const { chainId, version, owner, entryPointAddress, fallbackHandlerAddress } = estimateSmartAccountDeploymentDto - const walletFactoryInterface = this.contractUtils.smartWalletFactoryContract[chainId][version].getInterface(); - const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ - this.contractUtils.smartWalletFactoryContract[chainId][version].getAddress(), - walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ - owner, - entryPointAddress, - fallbackHandlerAddress, - 0 - ]) - ]) - console.log('encodedEstimate ', encodedEstimateData) - const deployCostresponse = await this.nodeClient.estimateExternalGas({ chainId, encodedData: encodedEstimateData }); - const estimateWalletDeployment = Number(deployCostresponse.data.gas); - console.log('estimateWalletDeployment ', estimateWalletDeployment); - return estimateWalletDeployment; + const txn: ExecTransaction = { + to: createdTransaction.to, + value: createdTransaction.value, + data: createdTransaction.data, + operation: createdTransaction.operation, + targetTxGas: createdTransaction.targetTxGas } + // to avoid failing eth_call override with undeployed wallet + txn.targetTxGas = 500000 + const refundInfo: IFeeRefundV1_0_1 = { + baseGas: createdTransaction.baseGas, + gasPrice: createdTransaction.gasPrice, + tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, + gasToken: createdTransaction.gasToken, + refundReceiver: createdTransaction.refundReceiver + } + + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + version, + transaction: txn, + walletAddress: smartAccountState.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE + } -} \ No newline at end of file + const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas( + estimateUndeployedContractGasDto + ) + let noAuthEstimate = + Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas) + console.log('no auth no refund estimate', noAuthEstimate) + + estimatedGasUsed += noAuthEstimate + + return estimatedGasUsed + } + + async estimateSmartAccountDeployment( + estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto + ): Promise { + const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi) + const { chainId, version, owner, entryPointAddress, fallbackHandlerAddress } = + estimateSmartAccountDeploymentDto + const walletFactoryInterface = + this.contractUtils.smartWalletFactoryContract[chainId][version].getInterface() + const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ + this.contractUtils.smartWalletFactoryContract[chainId][version].getAddress(), + walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ + owner, + entryPointAddress, + fallbackHandlerAddress, + 0 + ]) + ]) + console.log('encodedEstimate ', encodedEstimateData) + const deployCostresponse = await this.nodeClient.estimateExternalGas({ + chainId, + encodedData: encodedEstimateData + }) + const estimateWalletDeployment = Number(deployCostresponse.data.gas) + console.log('estimateWalletDeployment ', estimateWalletDeployment) + return estimateWalletDeployment + } +} diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index ae5d9a259..991a101e4 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -1,11 +1,4 @@ -import { - Contract, - Wallet, - utils, - BigNumberish, - Signer, - PopulatedTransaction -} from 'ethers' +import { Contract, Wallet, utils, BigNumberish, Signer, PopulatedTransaction } from 'ethers' import { ExecTransaction, diff --git a/packages/transactions/src/index.ts b/packages/transactions/src/index.ts index 0de5bc2aa..7e976665c 100644 --- a/packages/transactions/src/index.ts +++ b/packages/transactions/src/index.ts @@ -3,13 +3,10 @@ import TransactionManager from './transaction-manager' import ContractUtils from './contract-utils' - export default TransactionManager - export * from './account-utils' export * from './execution' export * from './multisend' export { ContractUtils } - diff --git a/packages/transactions/src/transaction-manager.ts b/packages/transactions/src/transaction-manager.ts index 9a71767f5..a894b51c5 100644 --- a/packages/transactions/src/transaction-manager.ts +++ b/packages/transactions/src/transaction-manager.ts @@ -21,7 +21,7 @@ import { TransactionDto, TransactionBatchDto, RefundTransactionBatchDto, - RefundTransactionDto, + RefundTransactionDto } from './types' import { ethers } from 'ethers' import EthersAdapter from '@biconomy-sdk/ethers-lib' @@ -37,7 +37,6 @@ import { Relayer } from '@biconomy-sdk/relayer' import ContractUtils from './contract-utils' import { Utils } from './utils' class TransactionManager { - // chainId: ChainId // Need setters @@ -50,14 +49,17 @@ class TransactionManager { smartAccountState!: SmartAccountState - constructor() { this.utils = new Utils() } - // smart account config and context - async initialize(relayer: Relayer, nodeClient: NodeClient, contractUtils: ContractUtils, smartAccountState: SmartAccountState) { - + // smart account config and context + async initialize( + relayer: Relayer, + nodeClient: NodeClient, + contractUtils: ContractUtils, + smartAccountState: SmartAccountState + ) { // Note: smart account is state specific so we may end up using chain specific transaction managers as discussed. this.smartAccountState = smartAccountState @@ -92,8 +94,8 @@ class TransactionManager { async prepareDeployAndPayFees(chainId: ChainId, version: string) { const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) - const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response; - let feeQuotes: Array = []; + const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response + let feeQuotes: Array = [] const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ chainId: chainId, @@ -106,12 +108,12 @@ class TransactionManager { feeOptionsAvailable.forEach((feeOption) => { // TODO // Make it a constant - const estimatedGasUsed: number = (estimateWalletDeployment + 77369); + const estimatedGasUsed: number = estimateWalletDeployment + 77369 // const feeTokenTransferGas = feeOption.feeTokenTransferGas - const tokenGasPrice = feeOption.tokenGasPrice || 0; - const offset = feeOption.offset || 1; - let payment = tokenGasPrice * (estimatedGasUsed) / offset; + const tokenGasPrice = feeOption.tokenGasPrice || 0 + const offset = feeOption.offset || 1 + let payment = (tokenGasPrice * estimatedGasUsed) / offset let feeQuote = { symbol: feeOption.symbol, @@ -124,17 +126,21 @@ class TransactionManager { refundReceiver: feeOption.refundReceiver } - feeQuotes.push(feeQuote); - }); + feeQuotes.push(feeQuote) + }) - return feeQuotes; + return feeQuotes } // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment - async deployAndPayFees(chainId: ChainId, version: string, feeQuote: FeeQuote): Promise { - const token = feeQuote.address; - const offset = feeQuote.offset || 1; - const feeReceiver = feeQuote.refundReceiver || DEFAULT_FEE_RECEIVER; + async deployAndPayFees( + chainId: ChainId, + version: string, + feeQuote: FeeQuote + ): Promise { + const token = feeQuote.address + const offset = feeQuote.offset || 1 + const feeReceiver = feeQuote.refundReceiver || DEFAULT_FEE_RECEIVER const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ chainId: chainId, @@ -144,15 +150,20 @@ class TransactionManager { fallbackHandlerAddress: this.smartAccountState.fallbackHandlerAddress }) // do estimations here or pass on payment and use feeQuote fully! - let feesToPay = feeQuote.tokenGasPrice * (estimateWalletDeployment + 77369) / offset; - feesToPay = parseInt(feesToPay.toString()); + let feesToPay = (feeQuote.tokenGasPrice * (estimateWalletDeployment + 77369)) / offset + feesToPay = parseInt(feesToPay.toString()) const tx = { to: token, data: encodeTransfer(feeReceiver, Number(feesToPay)) - }; + } - const transaction = await this.createTransaction({ version, transaction: tx, batchId: 0, chainId: chainId }); + const transaction = await this.createTransaction({ + version, + transaction: tx, + batchId: 0, + chainId: chainId + }) return transaction } @@ -235,21 +246,20 @@ class TransactionManager { } async estimateTransaction(prepareTransactionDto: PrepareRefundTransactionDto): Promise { - const { - transaction, - batchId, - chainId, - version - } = prepareTransactionDto + const { transaction, batchId, chainId, version } = prepareTransactionDto // OR just like contractUtils manages context, this class manages state getState(chainId) method - // const state = await this.getSmartAccountState(chainId); + // const state = await this.getSmartAccountState(chainId); // try catch - const tx = await this.createTransaction({ version, transaction, batchId, chainId: chainId }); + const tx = await this.createTransaction({ version, transaction, batchId, chainId: chainId }) // try catch - let estimatedGasUsed = await this.estimator.estimateTransaction(prepareTransactionDto, tx, this.smartAccountState); - return estimatedGasUsed; + let estimatedGasUsed = await this.estimator.estimateTransaction( + prepareTransactionDto, + tx, + this.smartAccountState + ) + return estimatedGasUsed } // Get Fee Options from relayer and make it available for display @@ -263,12 +273,7 @@ class TransactionManager { ): Promise { // TODO // Review @Talha - const { - transaction, - batchId, - chainId, - version - } = prepareRefundTransactionDto + const { transaction, batchId, chainId, version } = prepareRefundTransactionDto const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response @@ -291,7 +296,7 @@ class TransactionManager { const feeTokenTransferGas = feeOption.feeTokenTransferGas const tokenGasPrice = feeOption.tokenGasPrice || 0 const offset = feeOption.offset || 1 - let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; + let payment = (tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas)) / offset let feeQuote = { symbol: feeOption.symbol, @@ -310,13 +315,23 @@ class TransactionManager { return feeQuotes } - async estimateTransactionBatch(prepareRefundTransactionsDto: PrepareRefundTransactionsDto): Promise { - + async estimateTransactionBatch( + prepareRefundTransactionsDto: PrepareRefundTransactionsDto + ): Promise { const { transactions, batchId, chainId, version } = prepareRefundTransactionsDto - const tx = await this.createTransactionBatch({ version, transactions, batchId, chainId: chainId }); + const tx = await this.createTransactionBatch({ + version, + transactions, + batchId, + chainId: chainId + }) // try catch - let estimatedGasUsed = await this.estimator.estimateTransactionBatch(prepareRefundTransactionsDto, tx, this.smartAccountState); - return estimatedGasUsed; + let estimatedGasUsed = await this.estimator.estimateTransactionBatch( + prepareRefundTransactionsDto, + tx, + this.smartAccountState + ) + return estimatedGasUsed } // Get Fee Options from relayer and make it available for display @@ -329,12 +344,7 @@ class TransactionManager { async prepareRefundTransactionBatch( prepareRefundTransactionsDto: PrepareRefundTransactionsDto ): Promise { - const { - transactions, - batchId, - chainId, - version - } = prepareRefundTransactionsDto + const { transactions, batchId, chainId, version } = prepareRefundTransactionsDto const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response @@ -358,7 +368,7 @@ class TransactionManager { const feeTokenTransferGas = feeOption.feeTokenTransferGas const tokenGasPrice = feeOption.tokenGasPrice || 0 const offset = feeOption.offset || 1 - let payment = tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas) / offset; + let payment = (tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas)) / offset let feeQuote = { symbol: feeOption.symbol, @@ -377,14 +387,17 @@ class TransactionManager { return feeQuotes } - async estimateSmartAccountDeployment(estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto): Promise { - const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi); + async estimateSmartAccountDeployment( + estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto + ): Promise { + const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi) // Try catch - const estimateWalletDeployment = await this.estimator.estimateSmartAccountDeployment(estimateSmartAccountDeploymentDto); - return estimateWalletDeployment; + const estimateWalletDeployment = await this.estimator.estimateSmartAccountDeployment( + estimateSmartAccountDeploymentDto + ) + return estimateWalletDeployment } - /** * Prepares compatible IWalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction @@ -403,7 +416,11 @@ class TransactionManager { // NOTE : If the wallet is not deployed yet then nonce would be zero let nonce = 0 - const isDeployed = await this.contractUtils.isDeployed(chainId, version, this.smartAccountState.address) + const isDeployed = await this.contractUtils.isDeployed( + chainId, + version, + this.smartAccountState.address + ) if (isDeployed) { nonce = (await walletContract.getNonce(batchId)).toNumber() } else { @@ -507,7 +524,9 @@ class TransactionManager { walletAddress: this.smartAccountState.address, feeRefund: refundDetails } - const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentGas) + const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas( + estimateHandlePaymentGas + ) handlePaymentEstimate = Number(handlePaymentResponse.data.gas) console.log('handlePaymentEstimate ', handlePaymentEstimate) @@ -532,22 +551,16 @@ class TransactionManager { } /** - * Prepares compatible IWalletTransaction object based on Transaction Request - * @todo Rename based on other variations to prepare transaction - * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) - * @param refundTransactionBatchDto - * @returns - */ + * Prepares compatible IWalletTransaction object based on Transaction Request + * @todo Rename based on other variations to prepare transaction + * @notice This transaction is with fee refund (smart account pays using it's own assets accepted by relayers) + * @param refundTransactionBatchDto + * @returns + */ async createRefundTransactionBatch( refundTransactionBatchDto: RefundTransactionBatchDto ): Promise { - const { - transactions, - feeQuote, - batchId, - chainId, - version - } = refundTransactionBatchDto + const { transactions, feeQuote, batchId, chainId, version } = refundTransactionBatchDto let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() const connectedWallet = this.smartAccountState.address walletContract = walletContract.attach(connectedWallet) @@ -556,7 +569,7 @@ class TransactionManager { // Review const isDeployed = this.smartAccountState.isDeployed // await this.contractUtils.isDeployed(chainId, version, this.smartAccountState.address); - let additionalBaseGas = 0; + let additionalBaseGas = 0 // NOTE : If the wallet is not deployed yet then nonce would be zero let nonce = 0 @@ -586,8 +599,8 @@ class TransactionManager { this.contractUtils.multiSendContract[chainId][version].getContract(), txs, nonce - ); - console.log('wallet txn with refund ', walletTx); + ) + console.log('wallet txn with refund ', walletTx) const internalTx: MetaTransactionData = { to: walletTx.to, @@ -595,15 +608,15 @@ class TransactionManager { data: walletTx.data || '0x', operation: walletTx.operation } - console.log(internalTx); + console.log(internalTx) - let targetTxGas, baseGas; - const regularOffSet = GAS_USAGE_OFFSET; + let targetTxGas, baseGas + const regularOffSet = GAS_USAGE_OFFSET if (!isDeployed) { // Regular APIs will return 0 for handlePayment and requiredTxGas for undeployed wallet // targetTxGas? - // i. use really high value + // i. use really high value // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] const estimateRequiredTxGas: EstimateRequiredTxGasDto = { chainId: chainId, @@ -616,8 +629,8 @@ class TransactionManager { // TODO // Review const requiredTxGasEstimate = Number(response.data.gas) + 700000 - console.log('required txgas estimate (with override) ', requiredTxGasEstimate); - targetTxGas = requiredTxGasEstimate; + console.log('required txgas estimate (with override) ', requiredTxGasEstimate) + targetTxGas = requiredTxGasEstimate // baseGas? // Depending on feeToken provide baseGas! We could use constant value provided by the relayer @@ -625,7 +638,7 @@ class TransactionManager { const refundDetails: IFeeRefundHandlePayment = { gasUsed: requiredTxGasEstimate, baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review + gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review tokenGasPriceFactor: feeQuote.offset || 1, gasToken: feeQuote.address, refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS @@ -642,10 +655,9 @@ class TransactionManager { estimateHandlePaymentGas ) let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate); - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; + console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate) + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas } else { - const estimateRequiredTxGas: EstimateRequiredTxGasDto = { chainId: chainId, walletAddress: this.smartAccountState.address, @@ -656,16 +668,16 @@ class TransactionManager { // considerable offset ref gnosis safe service client safeTxGas // @Talha // TODO - // handle exception responses and when gas returned is 0 + // handle exception responses and when gas returned is 0 // We could stop the further flow const requiredTxGasEstimate = Number(response.data.gas) + 30000 - console.log('required txgas estimate ', requiredTxGasEstimate); - targetTxGas = requiredTxGasEstimate; + console.log('required txgas estimate ', requiredTxGasEstimate) + targetTxGas = requiredTxGasEstimate const refundDetails: IFeeRefundHandlePayment = { gasUsed: requiredTxGasEstimate, baseGas: requiredTxGasEstimate, - gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review + gasPrice: feeQuote.tokenGasPrice, // this would be token gas price // review tokenGasPriceFactor: feeQuote.offset || 1, gasToken: feeQuote.address, refundReceiver: feeQuote.refundReceiver || ZERO_ADDRESS @@ -677,10 +689,12 @@ class TransactionManager { walletAddress: this.smartAccountState.address, feeRefund: refundDetails } - const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas(estimateHandlePaymentGas) + const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas( + estimateHandlePaymentGas + ) let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) - console.log('handlePaymentEstimate ', handlePaymentEstimate); - baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas; // delegate call + event emission + state updates + potential deployment + console.log('handlePaymentEstimate ', handlePaymentEstimate) + baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas // delegate call + event emission + state updates + potential deployment } const finalWalletTx: IWalletTransaction = this.utils.buildSmartAccountTransaction({ @@ -705,4 +719,4 @@ class TransactionManager { } } -export default TransactionManager \ No newline at end of file +export default TransactionManager diff --git a/packages/transactions/src/types.ts b/packages/transactions/src/types.ts index 3a9aa3ba0..527c9b222 100644 --- a/packages/transactions/src/types.ts +++ b/packages/transactions/src/types.ts @@ -1,8 +1,4 @@ -import { - Transaction, - ChainId, - FeeQuote, -} from '@biconomy-sdk/core-types' +import { Transaction, ChainId, FeeQuote } from '@biconomy-sdk/core-types' export type PrepareRefundTransactionDto = { version: string @@ -34,7 +30,7 @@ export type RefundTransactionBatchDto = { } export type TransactionDto = { - version: string, + version: string transaction: Transaction batchId: number chainId: ChainId @@ -45,4 +41,4 @@ export type TransactionBatchDto = { transactions: Transaction[] batchId: number chainId: ChainId -} \ No newline at end of file +} diff --git a/packages/transactions/src/utils.ts b/packages/transactions/src/utils.ts index 71c10078c..b371e2202 100644 --- a/packages/transactions/src/utils.ts +++ b/packages/transactions/src/utils.ts @@ -1,106 +1,103 @@ -import { - BigNumber, - BigNumberish, - Contract, - utils -} from 'ethers' +import { BigNumber, BigNumberish, Contract, utils } from 'ethers' import { IMetaTransaction, IWalletTransaction, Transaction } from '@biconomy-sdk/core-types' import { AddressZero } from '@ethersproject/constants' export class Utils { + constructor() {} - constructor() { - - } - - buildSmartAccountTransaction = (template: { - to: string - value?: BigNumberish - data?: string - operation?: number - targetTxGas?: number | string - baseGas?: number | string - gasPrice?: number | string - tokenGasPriceFactor?: number | string - gasToken?: string - refundReceiver?: string - nonce: number - }): IWalletTransaction => { - return { - to: template.to, - value: template.value || 0, - data: template.data || '0x', - operation: template.operation || 0, - targetTxGas: template.targetTxGas || 0, - baseGas: template.baseGas || 0, - gasPrice: template.gasPrice || 0, - tokenGasPriceFactor: template.tokenGasPriceFactor || 1, - gasToken: template.gasToken || AddressZero, - refundReceiver: template.refundReceiver || AddressZero, - nonce: template.nonce - } + buildSmartAccountTransaction = (template: { + to: string + value?: BigNumberish + data?: string + operation?: number + targetTxGas?: number | string + baseGas?: number | string + gasPrice?: number | string + tokenGasPriceFactor?: number | string + gasToken?: string + refundReceiver?: string + nonce: number + }): IWalletTransaction => { + return { + to: template.to, + value: template.value || 0, + data: template.data || '0x', + operation: template.operation || 0, + targetTxGas: template.targetTxGas || 0, + baseGas: template.baseGas || 0, + gasPrice: template.gasPrice || 0, + tokenGasPriceFactor: template.tokenGasPriceFactor || 1, + gasToken: template.gasToken || AddressZero, + refundReceiver: template.refundReceiver || AddressZero, + nonce: template.nonce } + } - buildSmartAccountTransactions = (transactions: Transaction[]):IMetaTransaction[] => { - const txs: IMetaTransaction[] = [] - for (let i = 0; i < transactions.length; i++) { - const innerTx: IWalletTransaction = this.buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) - - txs.push(innerTx) - } - return txs - } + buildSmartAccountTransactions = (transactions: Transaction[]): IMetaTransaction[] => { + const txs: IMetaTransaction[] = [] + for (let i = 0; i < transactions.length; i++) { + const innerTx: IWalletTransaction = this.buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) - buildMultiSendSmartAccountTx = ( - multiSend: Contract, - txs: IMetaTransaction[], - nonce: number, - overrides?: Partial - ): IWalletTransaction => { - return this.buildContractCall(multiSend, 'multiSend', [this.encodeMultiSend(txs)], nonce, true, overrides) + txs.push(innerTx) } + return txs + } - encodeMultiSend = (txs: IMetaTransaction[]): string => { - return '0x' + txs.map((tx) => this.encodeMetaTransaction(tx)).join('') - } - - encodeMetaTransaction = (tx: IMetaTransaction): string => { - const data = utils.arrayify(tx.data) - const encoded = utils.solidityPack( - ['uint8', 'address', 'uint256', 'uint256', 'bytes'], - [tx.operation, tx.to, tx.value, data.length, data] - ) - return encoded.slice(2) - } + buildMultiSendSmartAccountTx = ( + multiSend: Contract, + txs: IMetaTransaction[], + nonce: number, + overrides?: Partial + ): IWalletTransaction => { + return this.buildContractCall( + multiSend, + 'multiSend', + [this.encodeMultiSend(txs)], + nonce, + true, + overrides + ) + } - buildContractCall = ( - contract: Contract, - method: string, - params: any[], - nonce: number, - delegateCall?: boolean, - overrides?: Partial - ): IWalletTransaction => { - const data = contract.interface.encodeFunctionData(method, params) - return this.buildSmartAccountTransaction( - Object.assign( - { - to: contract.address, - data, - operation: delegateCall ? 1 : 0, - nonce - }, - overrides - ) - ) - } + encodeMultiSend = (txs: IMetaTransaction[]): string => { + return '0x' + txs.map((tx) => this.encodeMetaTransaction(tx)).join('') + } + encodeMetaTransaction = (tx: IMetaTransaction): string => { + const data = utils.arrayify(tx.data) + const encoded = utils.solidityPack( + ['uint8', 'address', 'uint256', 'uint256', 'bytes'], + [tx.operation, tx.to, tx.value, data.length, data] + ) + return encoded.slice(2) + } -} \ No newline at end of file + buildContractCall = ( + contract: Contract, + method: string, + params: any[], + nonce: number, + delegateCall?: boolean, + overrides?: Partial + ): IWalletTransaction => { + const data = contract.interface.encodeFunctionData(method, params) + return this.buildSmartAccountTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }, + overrides + ) + ) + } +} diff --git a/yarn.lock b/yarn.lock index 9bfd974b4..34eed4f88 100644 --- a/yarn.lock +++ b/yarn.lock @@ -299,7 +299,7 @@ "babel-plugin-polyfill-regenerator" "^0.4.1" "semver" "^6.3.0" -"@babel/runtime@^7.5.5": +"@babel/runtime@^7.5.5", "@babel/runtime@^7.x", "@babel/runtime@7.x": "integrity" "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==" "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz" "version" "7.19.0" @@ -449,6 +449,12 @@ "ethereumjs-util" "^7.1.5" "ethers" "^5.6.9" +"@biconomy-sdk/web3-auth@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/web3-auth": + "resolved" "file:packages/web3-auth" + "version" "1.0.13" + dependencies: + "@toruslabs/torus-embed" "^1.36.2" + "@chainlink/contracts@^0.4.1": "integrity" "sha512-wVI/KZ9nIH0iqoebVxYrZfNVWO23vwds1UrHdbF+S0JwyixtT+54xYGlot723jCrAeBeQHsDRQXnEhhbUEHpgQ==" "resolved" "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.4.2.tgz" @@ -1925,6 +1931,14 @@ "tweetnacl" "^1.0.3" "tweetnacl-util" "^0.15.1" +"@metamask/obs-store@^7.0.0": + "integrity" "sha512-Tr61Uu9CGXkCg5CZwOYRMQERd+y6fbtrtLd/PzDTPHO5UJpmSbU+7MPcQK7d1DwZCOCeCIvhmZSUCvYliC8uGw==" + "resolved" "https://registry.npmjs.org/@metamask/obs-store/-/obs-store-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + "through2" "^2.0.3" + "@metamask/safe-event-emitter@^2.0.0": "integrity" "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==" "resolved" "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz" @@ -2525,6 +2539,11 @@ "@sentry/utils" "5.30.0" "tslib" "^1.9.3" +"@sentry/types@^7.x": + "integrity" "sha512-JzkOtenArOXmJBAk/FBbxKKX7XC650HqkhGL4ugT/f+RyxfiDZ0X1TAYMrvKIe+qpn5Nh7JUBfR+BARKAiu2wQ==" + "resolved" "https://registry.npmjs.org/@sentry/types/-/types-7.14.2.tgz" + "version" "7.14.2" + "@sentry/types@5.30.0": "integrity" "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" "resolved" "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" @@ -2600,6 +2619,56 @@ "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" "version" "2.0.0" +"@toruslabs/http-helpers@^3.2.0": + "integrity" "sha512-fCfvBHfYzd7AyOYlBo7wihh5nj6+4Ik6V5+nI7H63oiKICjMlByTXSauTUa/qm2mjZJn/OmVYeV5guPIgxoW1w==" + "resolved" "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "lodash.merge" "^4.6.2" + "loglevel" "^1.8.0" + +"@toruslabs/openlogin-jrpc@^2.6.0": + "integrity" "sha512-hX2b1HSBvC6jSVlXuhgdH8qyE83cj6SEiHjQ5VsHfRUv15wBgzj+x2Yjw5pjvbrnYXzUlFvFySs10EU7na1cuA==" + "resolved" "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-2.6.0.tgz" + "version" "2.6.0" + dependencies: + "@toruslabs/openlogin-utils" "^2.1.0" + "end-of-stream" "^1.4.4" + "eth-rpc-errors" "^4.0.3" + "events" "^3.3.0" + "fast-safe-stringify" "^2.1.1" + "once" "^1.4.0" + "pump" "^3.0.0" + "readable-stream" "^3.6.0" + +"@toruslabs/openlogin-utils@^2.1.0": + "integrity" "sha512-UVgjco4winOn4Gj0VRTvjSZgBA84h2OIkKuxrBFjS+yWhgxQBF4hXGp83uicSgx1MujtjyUOdhJrpV2joRHt9w==" + "resolved" "https://registry.npmjs.org/@toruslabs/openlogin-utils/-/openlogin-utils-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "base64url" "^3.0.1" + "keccak" "^3.0.2" + "randombytes" "^2.1.0" + +"@toruslabs/torus-embed@^1.36.2": + "integrity" "sha512-5PfgjhM+jobgbU2X5bz+Hb2qbf3Ljt/SFk5hXJ7YohZgX23CUiDqZL+zPOVOwX3BVJHBshqhMX9sOPOBMlfXMg==" + "resolved" "https://registry.npmjs.org/@toruslabs/torus-embed/-/torus-embed-1.36.4.tgz" + "version" "1.36.4" + dependencies: + "@metamask/obs-store" "^7.0.0" + "@toruslabs/http-helpers" "^3.2.0" + "@toruslabs/openlogin-jrpc" "^2.6.0" + "create-hash" "^1.2.0" + "end-of-stream" "^1.4.4" + "eth-rpc-errors" "^4.0.3" + "events" "^3.3.0" + "fast-deep-equal" "^3.1.3" + "is-stream" "^2.0.1" + "lodash.merge" "^4.6.2" + "loglevel" "^1.8.0" + "once" "^1.4.0" + "pump" "^3.0.0" + "@truffle/error@^0.1.1": "integrity" "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==" "resolved" "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz" @@ -3669,6 +3738,11 @@ "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" "version" "1.5.1" +"base64url@^3.0.1": + "integrity" "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + "resolved" "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz" + "version" "3.0.1" + "bcrypt-pbkdf@^1.0.0": "integrity" "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" @@ -5270,7 +5344,7 @@ dependencies: "iconv-lite" "^0.6.2" -"end-of-stream@^1.1.0", "end-of-stream@^1.4.1": +"end-of-stream@^1.1.0", "end-of-stream@^1.4.1", "end-of-stream@^1.4.4": "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" "version" "1.4.4" @@ -5701,6 +5775,13 @@ dependencies: "fast-safe-stringify" "^2.0.6" +"eth-rpc-errors@^4.0.3": + "integrity" "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==" + "resolved" "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "fast-safe-stringify" "^2.0.6" + "eth-sig-util@^1.4.2": "integrity" "sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw==" "resolved" "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz" @@ -6068,7 +6149,7 @@ "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" "version" "4.0.4" -"events@^3.0.0": +"events@^3.0.0", "events@^3.3.0": "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" "version" "3.3.0" @@ -6242,7 +6323,7 @@ "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" "version" "2.0.6" -"fast-safe-stringify@^2.0.6": +"fast-safe-stringify@^2.0.6", "fast-safe-stringify@^2.1.1": "integrity" "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" "resolved" "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" "version" "2.1.1" @@ -7741,7 +7822,7 @@ "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" "version" "1.1.0" -"is-stream@^2.0.0": +"is-stream@^2.0.0", "is-stream@^2.0.1": "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" "version" "2.0.1" @@ -8812,6 +8893,11 @@ "slice-ansi" "^4.0.0" "wrap-ansi" "^6.2.0" +"loglevel@^1.8.0": + "integrity" "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==" + "resolved" "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz" + "version" "1.8.0" + "loupe@^2.3.1": "integrity" "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==" "resolved" "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" @@ -12119,6 +12205,14 @@ "readable-stream" "~2.3.6" "xtend" "~4.0.1" +"through2@^2.0.3": + "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "readable-stream" "~2.3.6" + "xtend" "~4.0.1" + "through2@^4.0.0": "integrity" "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==" "resolved" "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" From 352bbdc7e4913e83a26d623817ea2562d333c6f4 Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 10 Oct 2022 18:23:02 +0500 Subject: [PATCH 0183/1247] paymaster endpoint integration --- packages/account-abstraction/src/BaseWalletAPI.ts | 1 + packages/account-abstraction/src/PaymasterAPI.ts | 13 ++++++------- packages/smart-account/src/SmartAccount.ts | 2 +- .../src/providers/SmartAccountProvider.ts | 5 ++--- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index cd775d32a..86449fe6e 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -60,6 +60,7 @@ export abstract class BaseWalletAPI { ) { // factory "connect" define the contract address. the contract "connect" defines the "from" address. // this.entryPointView = EntryPoint__factory.connect(entryPointAddress, provider).connect(ethers.constants.AddressZero) + this.paymasterAPI = new PaymasterAPI('https://us-central1-biconomy-staging.cloudfunctions.net', '') } // based on provider chainId we maintain smartWalletContract.. diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index d76b3b3f5..70f915428 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -11,16 +11,15 @@ export class PaymasterAPI { async getPaymasterAndData (userOp: Partial): Promise { console.log(userOp) - /*userOp = await resolveProperties(userOp) + userOp = await resolveProperties(userOp) // this.nodeClient.paymasterVerify() // Note: Might be different service that bypass SDK backend node - const result = await axios.post('/signPaymaster', { - dappAPIKey: this.dappAPIKey, - userOp, + const result = await axios.post('/signing-service', { + userOp }) + console.log('******** ||||| *********') + console.log('signing service response', result) - return result.data.paymasterAndData*/ - // Fallback : return '0x' - return '0x' + return result.data.paymasterAndData } } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index d82e04527..d803942e8 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -734,7 +734,7 @@ class SmartAccount { // TODO/NOTE : make Goerli and Mumbai as test networks and remove others export const DefaultSmartAccountConfig: SmartAccountConfig = { activeNetworkId: ChainId.GOERLI, //Update later - // paymasterAddress: '0x50e8996670759E1FAA315eeaCcEfe0c0A043aA51', + paymasterAddress: '0x50e8996670759E1FAA315eeaCcEfe0c0A043aA51', supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], backend_url: 'https://sdk-backend.staging.biconomy.io/v1', relayer_url: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay', diff --git a/packages/smart-account/src/providers/SmartAccountProvider.ts b/packages/smart-account/src/providers/SmartAccountProvider.ts index e074bb257..876c5982b 100644 --- a/packages/smart-account/src/providers/SmartAccountProvider.ts +++ b/packages/smart-account/src/providers/SmartAccountProvider.ts @@ -51,9 +51,8 @@ export class SmartAccountProvider extends BaseProvider { tempProvider: Web3Provider, chainId: ChainId, readonly originalSigner: Signer, // EOASigner - readonly originalProvider: BaseProvider // could be Web3Provider // optional? cc @sachin - ) // readonly httpRpcClient: HttpRpcClient, // Required for relaying to rpc-relayer - // readonly smartAccountAPI: SmartAccountAPI ? // Could be useful/needful + readonly originalProvider: BaseProvider // could be Web3Provider // optional? cc @sachin // readonly httpRpcClient: HttpRpcClient, // Required for relaying to rpc-relayer + ) // readonly smartAccountAPI: SmartAccountAPI ? // Could be useful/needful { super({ name: 'Smart Account User Refund Provider', From b8db1fe648b8101659a67ac3fd3d7eab556592f2 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 11 Oct 2022 06:47:06 +0400 Subject: [PATCH 0184/1247] logs and minor fix --- packages/account-abstraction/src/BaseWalletAPI.ts | 6 ++---- packages/account-abstraction/src/SmartAccountAPI.ts | 7 ++++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index cd775d32a..d47dc797b 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -172,8 +172,6 @@ export abstract class BaseWalletAPI { } const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0) - console.log('here') - console.log((await this._getWalletContract())) const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data) /*const callData = (await this._getWalletContract()).encodeFunctionData('execFromEntryPoint', [ detailsForUserOp.target, @@ -252,8 +250,8 @@ export abstract class BaseWalletAPI { } const partialUserOp: any = { - sender: this.getWalletAddress(), - nonce: this.getNonce(0), // TODO: add batchid as param + sender: await this.getWalletAddress(), + nonce: await this.getNonce(0), // TODO: add batchid as param initCode, callData, callGasLimit, diff --git a/packages/account-abstraction/src/SmartAccountAPI.ts b/packages/account-abstraction/src/SmartAccountAPI.ts index fd07a52a8..39eb26929 100644 --- a/packages/account-abstraction/src/SmartAccountAPI.ts +++ b/packages/account-abstraction/src/SmartAccountAPI.ts @@ -59,11 +59,16 @@ export class SmartAccountAPI extends BaseWalletAPI { async getNonce (batchId: number): Promise { + console.log('checking nonce') if (await this.checkWalletPhantom()) { return BigNumber.from(0) } const walletContract = await this._getWalletContract() - return await walletContract.getNonce(batchId) + console.log('walletContract before nonce (attached?)') + console.log(walletContract) + const nonce = await walletContract.getNonce(batchId) + console.log(nonce) + return nonce } /** * encode a method call from entryPoint to our contract From 39ab2e09311b791f16c518a76e44eb3fb44ddab2 Mon Sep 17 00:00:00 2001 From: talha Date: Tue, 11 Oct 2022 10:51:21 +0500 Subject: [PATCH 0185/1247] Nonce update issue --- .../account-abstraction/src/BaseWalletAPI.ts | 15 +++++---------- .../account-abstraction/src/PaymasterAPI.ts | 19 ++++++++++--------- .../src/SmartAccountAPI.ts | 2 +- packages/ethers-lib/src/index.ts | 6 ++++-- packages/smart-account/package.json | 1 + packages/smart-account/src/SmartAccount.ts | 2 +- 6 files changed, 22 insertions(+), 23 deletions(-) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index 7c3f450bd..46261090d 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -2,8 +2,7 @@ import { BigNumber, BigNumberish } from 'ethers' import { Provider } from '@ethersproject/providers' import { UserOperationStruct } from '@account-abstraction/contracts' -import { EntryPointContractV101 } from '@biconomy-sdk/ethers-lib' - +import { EntryPointContractV101, SmartWalletFactoryContract101, SmartWalletContractV101 } from '@biconomy-sdk/ethers-lib' import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp' import { resolveProperties } from 'ethers/lib/utils' import { PaymasterAPI } from './PaymasterAPI' @@ -43,7 +42,7 @@ export abstract class BaseWalletAPI { * our wallet contract. * should support the "execFromSingleton" and "nonce" methods */ - walletContract!: SmartWalletContract + walletContract!: SmartWalletContractV101 /** * base constructor. @@ -60,17 +59,13 @@ export abstract class BaseWalletAPI { ) { // factory "connect" define the contract address. the contract "connect" defines the "from" address. // this.entryPointView = EntryPoint__factory.connect(entryPointAddress, provider).connect(ethers.constants.AddressZero) - this.paymasterAPI = new PaymasterAPI('https://us-central1-biconomy-staging.cloudfunctions.net', '') + // this.paymasterAPI = new PaymasterAPI('https://us-central1-biconomy-staging.cloudfunctions.net', '') } // based on provider chainId we maintain smartWalletContract.. - async _getWalletContract(): Promise { + async _getWalletContract(): Promise { if (this.walletContract == null) { - this.walletContract = this.contractUtils - .getSmartWalletContract((await this.provider.getNetwork()).chainId) - this.walletContract.getContract().attach(await this.getWalletAddress()) - // this.walletContract = wallet.attach(await this.getWalletAddress()) - // console.log(this.walletContract.getInterface()) + this.walletContract = SmartWalletFactoryContract101.connect(await this.getWalletAddress(), this.provider) } return this.walletContract } diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index 70f915428..c395479b3 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -11,15 +11,16 @@ export class PaymasterAPI { async getPaymasterAndData (userOp: Partial): Promise { console.log(userOp) - userOp = await resolveProperties(userOp) - // this.nodeClient.paymasterVerify() - // Note: Might be different service that bypass SDK backend node - const result = await axios.post('/signing-service', { - userOp - }) - console.log('******** ||||| *********') - console.log('signing service response', result) + // userOp = await resolveProperties(userOp) + // // this.nodeClient.paymasterVerify() + // // Note: Might be different service that bypass SDK backend node + // const result = await axios.post('/signing-service', { + // userOp + // }) + // console.log('******** ||||| *********') + // console.log('signing service response', result) - return result.data.paymasterAndData + // return result.data.paymasterAndData + return '0x' } } diff --git a/packages/account-abstraction/src/SmartAccountAPI.ts b/packages/account-abstraction/src/SmartAccountAPI.ts index 39eb26929..bb622abe7 100644 --- a/packages/account-abstraction/src/SmartAccountAPI.ts +++ b/packages/account-abstraction/src/SmartAccountAPI.ts @@ -80,7 +80,7 @@ export class SmartAccountAPI extends BaseWalletAPI { const walletContract = await this._getWalletContract() // Review Talha console.log(walletContract) - return walletContract.getInterface().encodeFunctionData( + return walletContract.interface.encodeFunctionData( 'execFromEntryPoint', [ target, diff --git a/packages/ethers-lib/src/index.ts b/packages/ethers-lib/src/index.ts index c60e299b1..fa17985f3 100644 --- a/packages/ethers-lib/src/index.ts +++ b/packages/ethers-lib/src/index.ts @@ -1,8 +1,8 @@ import EthersAdapter, { EthersAdapterConfig } from './EthersAdapter' import { IEthersTransactionOptions, IEthersTransactionResult } from './types' -export { SmartWalletContractV100__factory as SmartWalletContractV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContractV100__factory' -export { SmartWalletContractV101__factory as SmartWalletContractV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletContractV101__factory' +export { SmartWalletContractV100__factory as SmartWalletFactoryContract100 } from '../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContractV100__factory' +export { SmartWalletContractV101__factory as SmartWalletFactoryContract101 } from '../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletContractV101__factory' export { MultiSendContractV100__factory as MultiSendContractV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/MultiSendContractV100__factory' export { MultiSendContractV101__factory as MultiSendContractV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/MultiSendContractV101__factory' @@ -19,6 +19,8 @@ export { EntryPointContractV101__factory as EntryPointFactoryContractV101 } from export { EntryPointContractV100 } from '../typechain/src/ethers-v5/v1.0.0/EntryPointContractV100' export { EntryPointContractV101 } from '../typechain/src/ethers-v5/v1.0.1/EntryPointContractV101' +export { SmartWalletContractV101 } from '../typechain/src/ethers-v5/v1.0.1/SmartWalletContractV101' + import EntryPointEthersContract_v1_0_0 from './contracts/EntryPointContract/v1.0.0/EntryPointEthersContract' import EntryPointEthersContract_v1_0_1 from './contracts/EntryPointContract/v1.0.1/EntryPointEthersContract' diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index defd89652..1b90072cf 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -55,6 +55,7 @@ "@biconomy-sdk/node-client": "*", "@biconomy-sdk/relayer": "*", "@biconomy-sdk/transactions": "*", + "@biconomy-sdk/account-abstraction": "*", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index d803942e8..f9d6d4ef0 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -55,7 +55,7 @@ import { JsonRpcSender } from '@0xsequence/network' import { JsonRpcProvider } from '@ethersproject/providers' // AA -import { newProvider, ERC4337EthersProvider, ClientConfig } from '@biconomy-sdk/account-abstraction' +import { newProvider, ERC4337EthersProvider } from '@biconomy-sdk/account-abstraction' import { ethers, Signer } from 'ethers' // Create an instance of Smart Account with multi-chain support. From d10bd4ee7c47f47237a13cb9b4e860ab3a756ab5 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 11 Oct 2022 10:29:45 +0400 Subject: [PATCH 0186/1247] methods added for further tests --- .../account-abstraction/src/BaseWalletAPI.ts | 11 ++- packages/smart-account/src/SmartAccount.ts | 97 ++++++++++++++++--- packages/transactions/src/utils.ts | 20 ++++ 3 files changed, 111 insertions(+), 17 deletions(-) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index d47dc797b..b1ed934be 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -1,4 +1,4 @@ -import { BigNumber, BigNumberish } from 'ethers' +import { BigNumber, BigNumberish, ethers } from 'ethers' import { Provider } from '@ethersproject/providers' import { UserOperationStruct } from '@account-abstraction/contracts' @@ -10,7 +10,7 @@ import { PaymasterAPI } from './PaymasterAPI' import { getRequestId } from '@biconomy-sdk/common' import { ContractUtils } from '@biconomy-sdk/transactions' import { - SmartWalletContract, + SmartWalletContract, ZERO_ADDRESS } from '@biconomy-sdk/core-types' /** * Base class for all Smart Wallet ERC-4337 Clients to implement. @@ -171,6 +171,13 @@ export abstract class BaseWalletAPI { return BigNumber.from(a.toString()) } + if(detailsForUserOp && detailsForUserOp.target === ZERO_ADDRESS && detailsForUserOp.data === ZERO_ADDRESS) { + return { + callData: '0x', + callGasLimit: BigNumber.from("21000") + } + } + const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0) const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data) /*const callData = (await this._getWalletContract()).encodeFunctionData('execFromEntryPoint', [ diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index d82e04527..22716ca08 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -26,9 +26,10 @@ import { SmartAccountState, FeeQuote, RelayResponse, - SmartAccountConfig + SmartAccountConfig, + ZERO_ADDRESS, + IMetaTransaction } from '@biconomy-sdk/core-types' -import { JsonRpcSigner } from '@ethersproject/providers' import NodeClient, { ProviderUrlConfig, ChainConfig, @@ -50,8 +51,6 @@ import { UsdBalanceResponse } from '@biconomy-sdk/node-client' -// SmartAccount User Refund -import { JsonRpcSender } from '@0xsequence/network' import { JsonRpcProvider } from '@ethersproject/providers' // AA @@ -83,8 +82,6 @@ class SmartAccount { provider!: Web3Provider - jsonProvider!: JsonRpcProvider - // 4337Provider aaProvider!: { [chainId: number]: ERC4337EthersProvider } @@ -156,12 +153,12 @@ class SmartAccount { this.provider = walletProvider // TODO: fix hardhcoded console.log('this.providerUrlConfig[0].providerUrl ', this.providerUrlConfig[0].providerUrl) - // this.jsonProvider = new ethers.providers.JsonRpcProvider(this.providerUrlConfig[0].providerUrl) // TODO:: Allow original signer to be passed and preserve this.signer = walletProvider.getSigner() - // Meaning : EOASigner? / SmartAccountSigner? + // Refer to SmartAccountSigner from eth-bogota branch + // TODO // Review this.contractUtils = new ContractUtils(this.DEFAULT_VERSION) this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) this.relayer = new RestRelayer({ url: this.#smartAccountConfig.relayer_url }) @@ -227,13 +224,13 @@ class SmartAccount { ' this.#smartAccountConfig.paymasterAddress ', this.#smartAccountConfig.paymasterAddress ) - console.log(' entryPointAddress ', entryPointAddress) - console.log('this.#smartAccountConfig.bundlerUrl ', this.#smartAccountConfig.bundlerUrl) - console.log('network.chainId ', network.chainId) - console.log('this.signer ', this.signer) - console.log('this.address ', this.address) - console.log('state.fallbackHandlerAddress ', state.fallbackHandlerAddress) - console.log('factoryAddress ', factoryAddress) + // console.log(' entryPointAddress ', entryPointAddress) + // console.log('this.#smartAccountConfig.bundlerUrl ', this.#smartAccountConfig.bundlerUrl) + // console.log('network.chainId ', network.chainId) + // console.log('this.signer ', this.signer) + // console.log('this.address ', this.address) + // console.log('state.fallbackHandlerAddress ', state.fallbackHandlerAddress) + // console.log('factoryAddress ', factoryAddress) this.aaProvider[network.chainId] = await newProvider( new ethers.providers.JsonRpcProvider(providerUrl), @@ -257,6 +254,11 @@ class SmartAccount { return this } + // TODO + // Optional methods for connecting paymaster + // Optional methods for connecting another bundler + + // Could be implemented at aaSigner level. Move some implementation to transactionManager public async sendGasLessTransaction(transactionDto: TransactionDto) { let { version, transaction, chainId } = transactionDto @@ -265,8 +267,73 @@ class SmartAccount { const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() const response = await aaSigner.sendTransaction(transaction) + // todo: make sense of this response and return hash to the user + } + + public async sendGaslessTransactionBatch(transactionBatchDto: TransactionBatchDto) { + let { version, transactions, batchId, chainId } = transactionBatchDto + + // Might get optional operation for tx + + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + version = version ? version : this.DEFAULT_VERSION + batchId = batchId ? batchId : 0 + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() + walletContract = walletContract.attach(this.address) + + // NOTE : If the wallet is not deployed yet then nonce would be zero + let nonce = 0 + if (await this.contractUtils.isDeployed(chainId, version, this.address)) { + nonce = (await walletContract.getNonce(batchId)).toNumber() + } + console.log('nonce: ', nonce) + + const txs: IMetaTransaction[] = [] + + for (let i = 0; i < transactions.length; i++) { + if (transactions[i]) { + const innerTx: IMetaTransaction = { + to: transactions[i].to, + value: transactions[i].value || 0, + operation: 0, // review + data: transactions[i].data || '0x', // for token transfers use encodeTransfer + } + + txs.push(innerTx) + } + } + + const multiSendContract = this.contractUtils.multiSendContract[chainId][version].getContract(); + + const finalTx = this.transactionManager.utils.buildMultiSendTx(multiSendContract, txs, nonce, true); + + const gaslessTx = { + to: finalTx.to, + data: finalTx.data, + value: finalTx.value + } + + const response = await this.sendGasLessTransaction({version, transaction: gaslessTx, chainId}) + } + + + // Only to deploy wallet using connected paymaster (or the one corresponding to dapp api key) + public async deployWalletUsingPaymaster() { // can pass chainId + const version = this.DEFAULT_VERSION; + const chainId = this.#smartAccountConfig.activeNetworkId; + const transaction = { + to: ZERO_ADDRESS, + data: ZERO_ADDRESS, + value: 0 + } + const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() + const response = await aaSigner.sendTransaction(transaction) + // todo: make sense of this response and return hash to the user } + /** * * @param smartAccountVersion diff --git a/packages/transactions/src/utils.ts b/packages/transactions/src/utils.ts index b371e2202..584a9b665 100644 --- a/packages/transactions/src/utils.ts +++ b/packages/transactions/src/utils.ts @@ -66,6 +66,26 @@ export class Utils { ) } + buildMultiSendTx = ( + multiSend: Contract, + txs: IMetaTransaction[], + nonce: number, + delegateCall?: boolean, + ): IMetaTransaction => { + + const data = multiSend.interface.encodeFunctionData('multiSend', [this.encodeMultiSend(txs)]) + return this.buildSmartAccountTransaction( + Object.assign( + { + to: multiSend.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }, + ) + ) + } + encodeMultiSend = (txs: IMetaTransaction[]): string => { return '0x' + txs.map((tx) => this.encodeMetaTransaction(tx)).join('') } From 4b93f77954a3d19437161b711d6c05d111f802ed Mon Sep 17 00:00:00 2001 From: talha Date: Tue, 11 Oct 2022 14:08:52 +0500 Subject: [PATCH 0187/1247] paymaster tranasction --- .../account-abstraction/src/BaseWalletAPI.ts | 30 ++++++++++-------- .../src/ERC4337EthersProvider.ts | 5 +-- .../src/ERC4337EthersSigner.ts | 4 +-- .../account-abstraction/src/HttpRpcClient.ts | 9 +++--- .../account-abstraction/src/PaymasterAPI.ts | 31 +++++++++++-------- packages/smart-account/src/SmartAccount.ts | 4 +++ 6 files changed, 48 insertions(+), 35 deletions(-) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index 46261090d..d5a288311 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -1,6 +1,6 @@ import { BigNumber, BigNumberish } from 'ethers' import { Provider } from '@ethersproject/providers' -import { UserOperationStruct } from '@account-abstraction/contracts' +import { UserOperation } from '@biconomy-sdk/core-types' import { EntryPointContractV101, SmartWalletFactoryContract101, SmartWalletContractV101 } from '@biconomy-sdk/ethers-lib' import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp' @@ -59,7 +59,7 @@ export abstract class BaseWalletAPI { ) { // factory "connect" define the contract address. the contract "connect" defines the "from" address. // this.entryPointView = EntryPoint__factory.connect(entryPointAddress, provider).connect(ethers.constants.AddressZero) - // this.paymasterAPI = new PaymasterAPI('https://us-central1-biconomy-staging.cloudfunctions.net', '') + this.paymasterAPI = new PaymasterAPI('https://us-central1-biconomy-staging.cloudfunctions.net', '') } // based on provider chainId we maintain smartWalletContract.. @@ -151,12 +151,15 @@ export abstract class BaseWalletAPI { * should cover cost of putting calldata on-chain, and some overhead. * actual overhead depends on the expected bundle size */ - async getPreVerificationGas(userOp: Partial): Promise { - console.log(userOp) - const bundleSize = 1 - const cost = 21000 - // TODO: calculate calldata cost - return Math.floor(cost / bundleSize) + async getPreVerificationGas(userOp: Partial): Promise { + console.log(userOp); + const bundleSize = 1; + const cost = 21000; + // TODO: calculate calldata cost + const preVerificationGas = Math.floor(cost / bundleSize) + console.log('preVerificationGas ', preVerificationGas); + console.log('preVerificationGas ', Math.floor(preVerificationGas)); + return Math.floor(preVerificationGas); } async encodeUserOpCallDataAndGasLimit( @@ -196,7 +199,7 @@ export abstract class BaseWalletAPI { * This value matches entryPoint.getRequestId (calculated off-chain, to avoid a view call) * @param userOp userOperation, (signature field ignored) */ - async getRequestId(userOp: UserOperationStruct): Promise { + async getRequestId(userOp: UserOperation): Promise { const op = await resolveProperties(userOp) const chainId = await this.provider.getNetwork().then((net) => net.chainId) return getRequestId(op, this.entryPoint.address, chainId) @@ -223,9 +226,10 @@ export abstract class BaseWalletAPI { * - if gas or nonce are missing, read them from the chain (note that we can't fill gaslimit before the wallet is created) * @param info */ - async createUnsignedUserOp(info: TransactionDetailsForUserOp): Promise { + async createUnsignedUserOp(info: TransactionDetailsForUserOp): Promise { const { callData, callGasLimit } = await this.encodeUserOpCallDataAndGasLimit(info) const initCode = await this.getInitCode() + console.log('initCode ', initCode) let verificationGasLimit = BigNumber.from(await this.getVerificationGasLimit()) if (initCode.length > 2) { @@ -269,9 +273,9 @@ export abstract class BaseWalletAPI { * Sign the filled userOp. * @param userOp the UserOperation to sign (with signature field ignored) */ - async signUserOp(userOp: UserOperationStruct): Promise { + async signUserOp(userOp: UserOperation): Promise { const requestId = await this.getRequestId(userOp) - const signature = this.signRequestId(requestId) + const signature = await this.signRequestId(requestId) return { ...userOp, signature @@ -282,7 +286,7 @@ export abstract class BaseWalletAPI { * helper method: create and sign a user operation. * @param info transaction details for the userOp */ - async createSignedUserOp(info: TransactionDetailsForUserOp): Promise { + async createSignedUserOp(info: TransactionDetailsForUserOp): Promise { return await this.signUserOp(await this.createUnsignedUserOp(info)) } } diff --git a/packages/account-abstraction/src/ERC4337EthersProvider.ts b/packages/account-abstraction/src/ERC4337EthersProvider.ts index 58ea8124b..794724bec 100644 --- a/packages/account-abstraction/src/ERC4337EthersProvider.ts +++ b/packages/account-abstraction/src/ERC4337EthersProvider.ts @@ -7,7 +7,8 @@ import { ClientConfig } from './ClientConfig' import { ERC4337EthersSigner } from './ERC4337EthersSigner' import { UserOperationEventListener } from './UserOperationEventListener' import { HttpRpcClient } from './HttpRpcClient' -import { EntryPoint, UserOperationStruct } from '@account-abstraction/contracts' +import { EntryPoint } from '@account-abstraction/contracts' +import { UserOperation } from '@biconomy-sdk/core-types' import { BaseWalletAPI } from './BaseWalletAPI' export class ERC4337EthersProvider extends BaseProvider { @@ -80,7 +81,7 @@ export class ERC4337EthersProvider extends BaseProvider { } // fabricate a response in a format usable by ethers users... - async constructUserOpTransactionResponse (userOp1: UserOperationStruct): Promise { + async constructUserOpTransactionResponse (userOp1: UserOperation): Promise { const userOp = await resolveProperties(userOp1) const requestId = getRequestId(userOp, this.config.entryPointAddress, this.config.chainId) const waitPromise = new Promise((resolve, reject) => { diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 757833381..33ee6e082 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -6,7 +6,7 @@ import { Bytes, ethers } from 'ethers' import { ERC4337EthersProvider } from './ERC4337EthersProvider' import { ClientConfig } from './ClientConfig' import { HttpRpcClient } from './HttpRpcClient' -import { UserOperationStruct } from '@account-abstraction/contracts' +import { UserOperation } from '@biconomy-sdk/core-types' import { BaseWalletAPI } from './BaseWalletAPI' export class ERC4337EthersSigner extends Signer { // TODO: we have 'erc4337provider', remove shared dependencies or avoid two-way reference @@ -90,7 +90,7 @@ export class ERC4337EthersSigner extends Signer { throw new Error('not implemented') } - async signUserOperation (userOperation: UserOperationStruct): Promise { + async signUserOperation (userOperation: UserOperation): Promise { const message = await this.smartWalletAPI.getRequestId(userOperation) return await this.originalSigner.signMessage(message) } diff --git a/packages/account-abstraction/src/HttpRpcClient.ts b/packages/account-abstraction/src/HttpRpcClient.ts index c4b38076c..704da796b 100644 --- a/packages/account-abstraction/src/HttpRpcClient.ts +++ b/packages/account-abstraction/src/HttpRpcClient.ts @@ -2,8 +2,7 @@ import { JsonRpcProvider } from '@ethersproject/providers' import { ethers } from 'ethers' import { hexValue, resolveProperties } from 'ethers/lib/utils' -import { UserOperationStruct } from '@account-abstraction/contracts' - +import { UserOperation } from '@biconomy-sdk/core-types' export class HttpRpcClient { private readonly userOpJsonRpcProvider: JsonRpcProvider @@ -20,7 +19,7 @@ export class HttpRpcClient { // TODO : add version of HttpRpcClient || interface in RPC relayer to sendSCWTransactionToRelayer - async sendUserOpToBundler (userOp1: UserOperationStruct): Promise { + async sendUserOpToBundler (userOp1: UserOperation): Promise { const userOp = await resolveProperties(userOp1) const hexifiedUserOp: any = Object.keys(userOp) @@ -33,13 +32,13 @@ export class HttpRpcClient { }) .reduce((set, [k, v]) => ({ ...set, [k]: v }), {}) - const jsonRequestData: [UserOperationStruct, string] = [hexifiedUserOp, this.entryPointAddress] + const jsonRequestData: [UserOperation, string] = [hexifiedUserOp, this.entryPointAddress] await this.printUserOperation(jsonRequestData) return await this.userOpJsonRpcProvider .send('eth_sendUserOperation', [hexifiedUserOp, this.entryPointAddress]) } - private async printUserOperation ([userOp1, entryPointAddress]: [UserOperationStruct, string]): Promise { + private async printUserOperation ([userOp1, entryPointAddress]: [UserOperation, string]): Promise { const userOp = await resolveProperties(userOp1) console.log('sending eth_sendUserOperation', { ...userOp, diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index c395479b3..bc2a6e547 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -1,7 +1,6 @@ -import { UserOperationStruct } from '@account-abstraction/contracts' import { resolveProperties } from '@ethersproject/properties' import axios from 'axios' // httpSendRequest or through NodeClient - +import { UserOperation } from '@biconomy-sdk/core-types' export class PaymasterAPI { // Might maintain API key at smart account level @@ -9,18 +8,24 @@ export class PaymasterAPI { axios.defaults.baseURL = apiUrl } - async getPaymasterAndData (userOp: Partial): Promise { + async getPaymasterAndData (userOp: Partial): Promise { console.log(userOp) - // userOp = await resolveProperties(userOp) - // // this.nodeClient.paymasterVerify() - // // Note: Might be different service that bypass SDK backend node - // const result = await axios.post('/signing-service', { - // userOp - // }) - // console.log('******** ||||| *********') - // console.log('signing service response', result) + userOp = await resolveProperties(userOp) + // this.nodeClient.paymasterVerify() + // Note: Might be different service that bypass SDK backend node + userOp.nonce = Number(userOp.nonce) + userOp.callGasLimit = Number(userOp.callGasLimit) + userOp.verificationGasLimit = Number(userOp.verificationGasLimit) + userOp.maxFeePerGas = Number(userOp.maxFeePerGas) + userOp.maxPriorityFeePerGas = Number(userOp.maxPriorityFeePerGas) + userOp.preVerificationGas = Number(userOp.preVerificationGas) + const result = await axios.post('/signing-service', { + userOp + }) + console.log('******** ||||| *********') + console.log('signing service response', result) - // return result.data.paymasterAndData - return '0x' + return result.data.paymasterAndData + // return '0x' } } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index f9d6d4ef0..ac05cb9eb 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -607,6 +607,10 @@ class SmartAccount { return txHash } + // async deployWalletWithPayMaster(chainId: ChainId = this.#smartAccountConfig.activeNetworkId){ + + // } + /** * * @param chainId optional chainId From 1ac22fdb2cb8db6590728d2b4874ff9d52026af7 Mon Sep 17 00:00:00 2001 From: talha Date: Tue, 11 Oct 2022 15:33:48 +0500 Subject: [PATCH 0188/1247] paymaster sponser changes --- packages/account-abstraction/src/BaseWalletAPI.ts | 3 +++ .../account-abstraction/src/ERC4337EthersSigner.ts | 3 +++ packages/account-abstraction/src/PaymasterAPI.ts | 5 ++++- packages/common/package.json | 1 + packages/common/src/ERC4337Utils.ts | 13 +++++++++---- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index d5a288311..ce74c5bd8 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -201,7 +201,9 @@ export abstract class BaseWalletAPI { */ async getRequestId(userOp: UserOperation): Promise { const op = await resolveProperties(userOp) + console.log('op ', op) const chainId = await this.provider.getNetwork().then((net) => net.chainId) + console.log('chainId ', chainId) return getRequestId(op, this.entryPoint.address, chainId) } @@ -274,6 +276,7 @@ export abstract class BaseWalletAPI { * @param userOp the UserOperation to sign (with signature field ignored) */ async signUserOp(userOp: UserOperation): Promise { + console.log('inside signUserOp') const requestId = await this.getRequestId(userOp) const signature = await this.signRequestId(requestId) return { diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 33ee6e082..023f645f5 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -30,7 +30,10 @@ export class ERC4337EthersSigner extends Signer { value: tx.value, gasLimit: tx.gasLimit }) + console.log('signed userOp ', userOperation) const transactionResponse = await this.erc4337provider.constructUserOpTransactionResponse(userOperation) + console.log('transactionResponse ', transactionResponse) + try { await this.httpRpcClient.sendUserOpToBundler(userOperation) } catch (error: any) { diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index bc2a6e547..fdd1a3235 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -18,7 +18,10 @@ export class PaymasterAPI { userOp.verificationGasLimit = Number(userOp.verificationGasLimit) userOp.maxFeePerGas = Number(userOp.maxFeePerGas) userOp.maxPriorityFeePerGas = Number(userOp.maxPriorityFeePerGas) - userOp.preVerificationGas = Number(userOp.preVerificationGas) + userOp.preVerificationGas = 21000; + userOp.signature = '0x' + userOp.paymasterAndData = '0x' + const result = await axios.post('/signing-service', { userOp }) diff --git a/packages/common/package.json b/packages/common/package.json index 7de73bc89..00d0f6ecb 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -37,6 +37,7 @@ "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" }, "dependencies": { + "@biconomy-sdk/core-types": "*", "@account-abstraction/contracts": "^0.2.0", "@ethersproject/abi": "^5.7.0", "@ethersproject/bytes": "^5.7.0", diff --git a/packages/common/src/ERC4337Utils.ts b/packages/common/src/ERC4337Utils.ts index 751893780..54c2077d4 100644 --- a/packages/common/src/ERC4337Utils.ts +++ b/packages/common/src/ERC4337Utils.ts @@ -1,5 +1,5 @@ import { arrayify, defaultAbiCoder, keccak256 } from 'ethers/lib/utils' -import { UserOperationStruct } from '@account-abstraction/contracts' +import { UserOperation } from '@biconomy-sdk/core-types' import { abi as entryPointAbi } from '@account-abstraction/contracts/artifacts/IEntryPoint.json' // UserOperation is the first parameter of simulateValidation @@ -20,7 +20,7 @@ function encode(typevalues: Array<{ type: string; val: any }>, forSignature: boo return defaultAbiCoder.encode(types, values) } -export function packUserOp(op: NotPromise, forSignature = true): string { +export function packUserOp(op: NotPromise, forSignature = true): string { if (forSignature) { // lighter signature scheme (must match UserOperation#pack): do encode a zero-length signature, but strip afterwards the appended zero-length value const userOpType = { @@ -42,6 +42,7 @@ export function packUserOp(op: NotPromise, forSignature = t } // console.log('hard-coded userOpType', userOpType) // console.log('from ABI userOpType', UserOpType) + console.log('op is ', op) let encoded = defaultAbiCoder.encode([userOpType as any], [{ ...op, signature: '0x' }]) // remove leading word (total length) and trailing word (zero-length signature) encoded = '0x' + encoded.slice(66, encoded.length - 64) @@ -75,20 +76,24 @@ export function packUserOp(op: NotPromise, forSignature = t } export function getRequestId( - op: NotPromise, + op: NotPromise, entryPoint: string, chainId: number ): string { + console.log(' inside getRequestId') const userOpHash = keccak256(packUserOp(op, true)) + console.log('userOpHash ', userOpHash); + const enc = defaultAbiCoder.encode( ['bytes32', 'address', 'uint256'], [userOpHash, entryPoint, chainId] ) + console.log('enc ', enc); return keccak256(enc) } export function getRequestIdForSigning( - op: NotPromise, + op: NotPromise, entryPoint: string, chainId: number ): Uint8Array { From 49af3da03d2d818e50a5c09d9c1e26ccb732c7c8 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 11 Oct 2022 20:30:00 +0400 Subject: [PATCH 0189/1247] update paymaster changes --- packages/account-abstraction/src/PaymasterAPI.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index fdd1a3235..75323357e 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -1,6 +1,7 @@ import { resolveProperties } from '@ethersproject/properties' import axios from 'axios' // httpSendRequest or through NodeClient import { UserOperation } from '@biconomy-sdk/core-types' +import { hexConcat } from 'ethers/lib/utils' export class PaymasterAPI { // Might maintain API key at smart account level @@ -28,7 +29,10 @@ export class PaymasterAPI { console.log('******** ||||| *********') console.log('signing service response', result) - return result.data.paymasterAndData + // ToDo: Get paymaster addr from dapp id / smart account config + const paymasterAndData = hexConcat(['0x50e8996670759E1FAA315eeaCcEfe0c0A043aA51', result.data.signedMessage]) + + return paymasterAndData // return '0x' } } From 5bbebb3924cba65e09d5b041212e1c0c8251685b Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 12 Oct 2022 14:10:29 +0400 Subject: [PATCH 0190/1247] replace axios with httpSendRequest --- package.json | 2 +- packages/account-abstraction/package.json | 2 +- .../account-abstraction/src/PaymasterAPI.ts | 20 ++++--- .../src/utils/httpRequests.ts | 53 +++++++++++++++++++ 4 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 packages/account-abstraction/src/utils/httpRequests.ts diff --git a/package.json b/package.json index 9e723048f..d54ec2c5c 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.5.4", - "nx": "^14.8.3", + "nx": "^14.8.4", "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1" diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index f321d40ef..aa2f5cebb 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -51,9 +51,9 @@ }, "devDependencies": { "@biconomy-sdk/common": "*", - "@biconomy-sdk/transactions": "*", "@biconomy-sdk/core-types": "*", "@biconomy-sdk/ethers-lib": "*", + "@biconomy-sdk/transactions": "*", "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", "@nomicfoundation/hardhat-toolbox": "^1.0.2", "@nomiclabs/hardhat-ethers": "^2.0.0", diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index 75323357e..a9a7b52a4 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -1,17 +1,19 @@ import { resolveProperties } from '@ethersproject/properties' -import axios from 'axios' // httpSendRequest or through NodeClient import { UserOperation } from '@biconomy-sdk/core-types' import { hexConcat } from 'ethers/lib/utils' +import { HttpMethod, sendRequest } from './utils/httpRequests' export class PaymasterAPI { // Might maintain API key at smart account level constructor(readonly apiUrl: string, readonly dappAPIKey: string) { - axios.defaults.baseURL = apiUrl + this.apiUrl = apiUrl } async getPaymasterAndData (userOp: Partial): Promise { console.log(userOp) userOp = await resolveProperties(userOp) + console.log('userOp') + console.log(userOp) // this.nodeClient.paymasterVerify() // Note: Might be different service that bypass SDK backend node userOp.nonce = Number(userOp.nonce) @@ -23,16 +25,20 @@ export class PaymasterAPI { userOp.signature = '0x' userOp.paymasterAndData = '0x' - const result = await axios.post('/signing-service', { - userOp + const result: any = await sendRequest({ + url: `${this.apiUrl}/signing-service`, + method: HttpMethod.Post, + body: { "userOp": userOp } }) + console.log('******** ||||| *********') console.log('signing service response', result) // ToDo: Get paymaster addr from dapp id / smart account config - const paymasterAndData = hexConcat(['0x50e8996670759E1FAA315eeaCcEfe0c0A043aA51', result.data.signedMessage]) + if(result) { + return hexConcat(['0x50e8996670759E1FAA315eeaCcEfe0c0A043aA51', result.signedMessage]) + } - return paymasterAndData - // return '0x' + return '0x' } } diff --git a/packages/account-abstraction/src/utils/httpRequests.ts b/packages/account-abstraction/src/utils/httpRequests.ts new file mode 100644 index 000000000..e6aee087a --- /dev/null +++ b/packages/account-abstraction/src/utils/httpRequests.ts @@ -0,0 +1,53 @@ +import fetch from 'node-fetch' + +export enum HttpMethod { + Get = 'get', + Post = 'post', + Delete = 'delete' +} + +interface HttpRequest { + url: string + method: HttpMethod + body?: Object +} + +export async function sendRequest({ url, method, body }: HttpRequest): Promise { + const response = await fetch(url, { + method, + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(body) + }) + + let jsonResponse + try { + jsonResponse = await response.json() + } catch (error) { + if (!response.ok) { + throw new Error(response.statusText) + } + } + + if (response.ok) { + return jsonResponse as T + } + if (jsonResponse.data) { + throw new Error(jsonResponse.data) + } + if (jsonResponse.detail) { + throw new Error(jsonResponse.detail) + } + if (jsonResponse.message) { + throw new Error(jsonResponse.message) + } + if (jsonResponse.nonFieldErrors) { + throw new Error(jsonResponse.nonFieldErrors) + } + if (jsonResponse.delegate) { + throw new Error(jsonResponse.delegate) + } + throw new Error(response.statusText) +} From fcf92763f4d4aae919fc7d94512c2539d0934667 Mon Sep 17 00:00:00 2001 From: talha Date: Wed, 12 Oct 2022 15:44:10 +0500 Subject: [PATCH 0191/1247] optimisation and paymaster fix --- .../account-abstraction/src/BaseWalletAPI.ts | 8 ++++---- .../account-abstraction/src/ClientConfig.ts | 4 +++- .../src/ERC4337EthersSigner.ts | 2 ++ .../account-abstraction/src/PaymasterAPI.ts | 12 +++++++++--- packages/account-abstraction/src/Provider.ts | 4 +--- .../src/SmartAccountAPI.ts | 7 +++---- .../core-types/src/smart-account.types.ts | 1 + packages/smart-account/src/SmartAccount.ts | 19 ++++--------------- 8 files changed, 27 insertions(+), 30 deletions(-) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index f638f7a40..ce84d4a52 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -1,15 +1,15 @@ import { BigNumber, BigNumberish, ethers } from 'ethers' import { Provider } from '@ethersproject/providers' import { UserOperation } from '@biconomy-sdk/core-types' +import { ClientConfig } from './ClientConfig' import { EntryPointContractV101, SmartWalletFactoryContract101, SmartWalletContractV101 } from '@biconomy-sdk/ethers-lib' import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp' import { resolveProperties } from 'ethers/lib/utils' import { PaymasterAPI } from './PaymasterAPI' import { getRequestId } from '@biconomy-sdk/common' -import { ContractUtils } from '@biconomy-sdk/transactions' import { - SmartWalletContract, ZERO_ADDRESS + ZERO_ADDRESS } from '@biconomy-sdk/core-types' /** * Base class for all Smart Wallet ERC-4337 Clients to implement. @@ -53,13 +53,13 @@ export abstract class BaseWalletAPI { */ protected constructor( readonly provider: Provider, - readonly contractUtils: ContractUtils, readonly entryPoint: EntryPointContractV101, + readonly clientConfig: ClientConfig, readonly walletAddress?: string ) { // factory "connect" define the contract address. the contract "connect" defines the "from" address. // this.entryPointView = EntryPoint__factory.connect(entryPointAddress, provider).connect(ethers.constants.AddressZero) - this.paymasterAPI = new PaymasterAPI('https://us-central1-biconomy-staging.cloudfunctions.net', '') + this.paymasterAPI = new PaymasterAPI(clientConfig.signingServiceUrl, clientConfig.dappId, clientConfig.paymasterAddress) } // based on provider chainId we maintain smartWalletContract.. diff --git a/packages/account-abstraction/src/ClientConfig.ts b/packages/account-abstraction/src/ClientConfig.ts index c688d12ec..bf43b31e1 100644 --- a/packages/account-abstraction/src/ClientConfig.ts +++ b/packages/account-abstraction/src/ClientConfig.ts @@ -1,5 +1,7 @@ export interface ClientConfig { - paymasterAddress?: string + dappId: string + signingServiceUrl: string + paymasterAddress: string entryPointAddress: string bundlerUrl: string chainId: number diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 023f645f5..7e0234a9e 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -22,7 +22,9 @@ export class ERC4337EthersSigner extends Signer { // This one is called by Contract. It signs the request and passes in to Provider to be sent. async sendTransaction (transaction: Deferrable): Promise { + console.log('received transaction ', transaction) const tx: TransactionRequest = await this.populateTransaction(transaction) + console.log('populate trx ', tx) await this.verifyAllNecessaryFields(tx) const userOperation = await this.smartWalletAPI.createSignedUserOp({ target: tx.to ?? '', diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index fdd1a3235..23cf87675 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -1,10 +1,12 @@ import { resolveProperties } from '@ethersproject/properties' import axios from 'axios' // httpSendRequest or through NodeClient import { UserOperation } from '@biconomy-sdk/core-types' +import { hexConcat } from 'ethers/lib/utils' + export class PaymasterAPI { // Might maintain API key at smart account level - constructor(readonly apiUrl: string, readonly dappAPIKey: string) { + constructor(readonly apiUrl: string, readonly dappAPIKey: string, readonly payMasterAddress: string) { axios.defaults.baseURL = apiUrl } @@ -27,8 +29,12 @@ export class PaymasterAPI { }) console.log('******** ||||| *********') console.log('signing service response', result) - - return result.data.paymasterAndData + // return result.data.paymasterAndData + const paymasterAndData = hexConcat([ + this.payMasterAddress, + result.data.signedMessage + ]) + return paymasterAndData // return '0x' } } diff --git a/packages/account-abstraction/src/Provider.ts b/packages/account-abstraction/src/Provider.ts index 4370b9719..bca6f18b8 100644 --- a/packages/account-abstraction/src/Provider.ts +++ b/packages/account-abstraction/src/Provider.ts @@ -9,7 +9,6 @@ import { SmartAccountAPI } from './SmartAccountAPI' import { ERC4337EthersProvider } from './ERC4337EthersProvider' import { HttpRpcClient } from './HttpRpcClient' import { Signer } from '@ethersproject/abstract-signer' -import { ContractUtils } from '@biconomy-sdk/transactions' // TODO: Update in the context of SmartAccount and WalletFactory aka deployer // Might need smart account state for contract addresses @@ -17,7 +16,6 @@ import { ContractUtils } from '@biconomy-sdk/transactions' // To be used in SmartAccount to init 4337 provider export async function newProvider ( originalProvider: JsonRpcProvider, - contractUtils: ContractUtils, config: ClientConfig, originalSigner: Signer = originalProvider.getSigner(), walletAddress: string, @@ -28,7 +26,7 @@ export async function newProvider ( const entryPoint = EntryPointFactoryContractV101.connect(config.entryPointAddress, originalProvider) // Initial SimpleWallet instance is not deployed and exists just for the interface // const simpleWalletDeployer = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) - const smartWalletAPI = new SmartAccountAPI(originalProvider, contractUtils, entryPoint, walletAddress, originalSigner, fallbackHandlerAddress, factoryAddress, 0) + const smartWalletAPI = new SmartAccountAPI(originalProvider, entryPoint, config, walletAddress, originalSigner, fallbackHandlerAddress, factoryAddress, 0) const httpRpcClient = new HttpRpcClient(config.bundlerUrl, config.entryPointAddress, config.chainId) const ethProvider = await new ERC4337EthersProvider( config, diff --git a/packages/account-abstraction/src/SmartAccountAPI.ts b/packages/account-abstraction/src/SmartAccountAPI.ts index bb622abe7..0c7d96ecd 100644 --- a/packages/account-abstraction/src/SmartAccountAPI.ts +++ b/packages/account-abstraction/src/SmartAccountAPI.ts @@ -1,13 +1,12 @@ import { BigNumber, BigNumberish } from 'ethers' import { EntryPointContractV101 } from '@biconomy-sdk/ethers-lib' - +import { ClientConfig } from './ClientConfig' import { arrayify, hexConcat } from 'ethers/lib/utils' import { Signer } from '@ethersproject/abstract-signer' import { BaseWalletAPI } from './BaseWalletAPI' import { Provider } from '@ethersproject/providers' import { WalletFactoryAPI } from './WalletFactoryAPI' -import { ContractUtils } from '@biconomy-sdk/transactions' /** * An implementation of the BaseWalletAPI using the SmartWalletContract contract. @@ -32,15 +31,15 @@ export class SmartAccountAPI extends BaseWalletAPI { */ constructor ( provider: Provider, - readonly contractUtils: ContractUtils, readonly entryPoint: EntryPointContractV101, + readonly clientConfig: ClientConfig, walletAddress: string | undefined, readonly owner: Signer, readonly handlerAddress: string, readonly factoryAddress: string, readonly index = 0 ) { - super(provider, contractUtils, entryPoint, walletAddress) + super(provider, entryPoint, clientConfig, walletAddress) } factory?: string diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index c09e83390..0321015b6 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -20,6 +20,7 @@ export interface SmartAccountConfig { entryPointAddress?: string bundlerUrl?: string paymasterAddress?: string + signingServiceUrl: string } export type ProviderUrlConfig = { diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index fee707277..4ffb99b7a 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -216,27 +216,15 @@ class SmartAccount { this.#smartAccountConfig.providerUrlConfig?.find( (element) => element.chainId === network.chainId )?.providerUrl || '' - console.log('Used provider from config ', providerUrl) if (!providerUrl) providerUrl = network.providerUrl - console.log( - ' this.#smartAccountConfig.paymasterAddress ', - this.#smartAccountConfig.paymasterAddress - ) - // console.log(' entryPointAddress ', entryPointAddress) - // console.log('this.#smartAccountConfig.bundlerUrl ', this.#smartAccountConfig.bundlerUrl) - // console.log('network.chainId ', network.chainId) - // console.log('this.signer ', this.signer) - // console.log('this.address ', this.address) - // console.log('state.fallbackHandlerAddress ', state.fallbackHandlerAddress) - // console.log('factoryAddress ', factoryAddress) - this.aaProvider[network.chainId] = await newProvider( new ethers.providers.JsonRpcProvider(providerUrl), - this.contractUtils, { - paymasterAddress: this.#smartAccountConfig.paymasterAddress, + dappId: this.dappAPIKey, + signingServiceUrl: this.#smartAccountConfig.signingServiceUrl, + paymasterAddress: this.#smartAccountConfig.paymasterAddress || '', entryPointAddress, bundlerUrl: this.#smartAccountConfig.bundlerUrl || '', chainId: network.chainId @@ -806,6 +794,7 @@ class SmartAccount { export const DefaultSmartAccountConfig: SmartAccountConfig = { activeNetworkId: ChainId.GOERLI, //Update later paymasterAddress: '0x50e8996670759E1FAA315eeaCcEfe0c0A043aA51', + signingServiceUrl: '', supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], backend_url: 'https://sdk-backend.staging.biconomy.io/v1', relayer_url: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay', From 215fbf185ccc2d674b171869b793291c47c8bacd Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 12 Oct 2022 16:04:53 +0400 Subject: [PATCH 0192/1247] updates for deploy wallet only using paymaster --- .../account-abstraction/src/BaseWalletAPI.ts | 2 +- .../src/ERC4337EthersSigner.ts | 31 ++++++++++++++++++- .../account-abstraction/src/PaymasterAPI.ts | 2 -- packages/node-client/src/INodeClient.ts | 6 ++-- packages/node-client/src/NodeClient.ts | 6 ++-- .../node-client/src/types/NodeClientTypes.ts | 2 +- packages/smart-account/src/SmartAccount.ts | 22 ++++++------- 7 files changed, 47 insertions(+), 24 deletions(-) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index f638f7a40..e0f17424f 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -170,7 +170,7 @@ export abstract class BaseWalletAPI { return BigNumber.from(a.toString()) } - if(detailsForUserOp && detailsForUserOp.target === ZERO_ADDRESS && detailsForUserOp.data === ZERO_ADDRESS) { + if(detailsForUserOp && detailsForUserOp.target === '' && detailsForUserOp.data === '') { return { callData: '0x', callGasLimit: BigNumber.from("21000") diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 023f645f5..ce7286073 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -20,6 +20,35 @@ export class ERC4337EthersSigner extends Signer { defineReadOnly(this, 'provider', erc4337provider) } + async deployWalletOnly(): Promise { + const userOperation = await this.smartWalletAPI.createSignedUserOp({ + target: '', + data: '', + value: 0, + gasLimit: 21000 + }) + + console.log('signed userOp ', userOperation) + let transactionResponse; + + try{ + transactionResponse = await this.erc4337provider.constructUserOpTransactionResponse(userOperation) + console.log('transactionResponse ', transactionResponse) + } + catch(err) { + console.log('error when making transaction for only deployment') + console.log(err) + } + + try { + await this.httpRpcClient.sendUserOpToBundler(userOperation) + } catch (error: any) { + // console.error('sendUserOpToBundler failed', error) + throw this.unwrapError(error) + } + // TODO: handle errors - transaction that is "rejected" by bundler is _not likely_ to ever resolve its "wait()" + return transactionResponse + } // This one is called by Contract. It signs the request and passes in to Provider to be sent. async sendTransaction (transaction: Deferrable): Promise { const tx: TransactionRequest = await this.populateTransaction(transaction) @@ -28,7 +57,7 @@ export class ERC4337EthersSigner extends Signer { target: tx.to ?? '', data: tx.data?.toString() ?? '', value: tx.value, - gasLimit: tx.gasLimit + // gasLimit: tx.gasLimit }) console.log('signed userOp ', userOperation) const transactionResponse = await this.erc4337provider.constructUserOpTransactionResponse(userOperation) diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index a9a7b52a4..85b3ad96f 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -14,8 +14,6 @@ export class PaymasterAPI { userOp = await resolveProperties(userOp) console.log('userOp') console.log(userOp) - // this.nodeClient.paymasterVerify() - // Note: Might be different service that bypass SDK backend node userOp.nonce = Number(userOp.nonce) userOp.callGasLimit = Number(userOp.callGasLimit) userOp.verificationGasLimit = Number(userOp.verificationGasLimit) diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index c1a91d7be..550691b8f 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -16,7 +16,7 @@ import { BalancesDto, UsdBalanceResponse, EstimateGasResponse, - TransactionResponse + SCWTransactionResponse } from './types/NodeClientTypes' interface INodeClient { @@ -146,9 +146,9 @@ interface INodeClient { estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto ): Promise - getTransactionByHash(txHash: string): Promise + getTransactionByHash(txHash: string): Promise - getTransactionByAddress(chainId: number, address: string): Promise + getTransactionByAddress(chainId: number, address: string): Promise // 6. Conditional Gasless Endpoint diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index 2da76f867..1f3923ac7 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -16,7 +16,7 @@ import { BalancesResponse, UsdBalanceResponse, EstimateGasResponse, - TransactionResponse + SCWTransactionResponse } from './types/NodeClientTypes' import { getTxServiceBaseUrl } from './utils' import { HttpMethod, sendRequest } from './utils/httpRequests' @@ -181,14 +181,14 @@ class NodeClient implements INodeClient { }) } - getTransactionByAddress(chainId: number, address: string): Promise { + getTransactionByAddress(chainId: number, address: string): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/transactions/chainId/${chainId}/address/${address}`, method: HttpMethod.Get }) } - getTransactionByHash(txHash: string): Promise { + getTransactionByHash(txHash: string): Promise { return sendRequest({ url: `${this.#txServiceBaseUrl}/transactions/txHash/${txHash}`, method: HttpMethod.Get diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index a5d4b9330..b9165e9c0 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -24,7 +24,7 @@ export type SmartAccountInfoResponse = { } // Review -export type TransactionResponse = { +export type SCWTransactionResponse = { symbol: string tokenAddress: string scwAddress: string diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index fee707277..7ed3e1703 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -46,11 +46,13 @@ import TransactionManager, { import { BalancesDto } from '@biconomy-sdk/node-client' import { - TransactionResponse, + SCWTransactionResponse, BalancesResponse, UsdBalanceResponse } from '@biconomy-sdk/node-client' +import { TransactionResponse } from '@ethersproject/providers' + import { JsonRpcProvider } from '@ethersproject/providers' // AA @@ -259,7 +261,7 @@ class SmartAccount { // Optional methods for connecting another bundler // Could be implemented at aaSigner level. Move some implementation to transactionManager - public async sendGasLessTransaction(transactionDto: TransactionDto) { + public async sendGasLessTransaction(transactionDto: TransactionDto): Promise { let { version, transaction, chainId } = transactionDto chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId @@ -267,6 +269,7 @@ class SmartAccount { const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() const response = await aaSigner.sendTransaction(transaction) + return response // todo: make sense of this response and return hash to the user } @@ -316,24 +319,17 @@ class SmartAccount { } const response = await this.sendGasLessTransaction({version, transaction: gaslessTx, chainId}) + return response } // Only to deploy wallet using connected paymaster (or the one corresponding to dapp api key) public async deployWalletUsingPaymaster() { // can pass chainId - const version = this.DEFAULT_VERSION; - const chainId = this.#smartAccountConfig.activeNetworkId; - const transaction = { - to: ZERO_ADDRESS, - data: ZERO_ADDRESS, - value: 0 - } const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() - const response = await aaSigner.sendTransaction(transaction) + const response = await aaSigner.deployWalletOnly() // todo: make sense of this response and return hash to the user } - /** * * @param smartAccountVersion @@ -374,11 +370,11 @@ class SmartAccount { public async getTransactionByAddress( chainId: number, address: string - ): Promise { + ): Promise { return this.nodeClient.getTransactionByAddress(chainId, address) } - public async getTransactionByHash(txHash: string): Promise { + public async getTransactionByHash(txHash: string): Promise { return this.nodeClient.getTransactionByHash(txHash) } From 32056ae6c6f4f33e78164b23bf6d0a7611d0b54a Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 12 Oct 2022 20:15:12 +0400 Subject: [PATCH 0193/1247] update encodeExecute and sendTransaction with customData --- .../account-abstraction/src/BaseWalletAPI.ts | 5 ++-- .../src/ERC4337EthersSigner.ts | 12 ++++++++- .../src/SmartAccountAPI.ts | 6 ++--- .../src/TransactionDetailsForUserOp.ts | 1 + packages/smart-account/src/SmartAccount.ts | 25 ++++++++++++++++--- 5 files changed, 40 insertions(+), 9 deletions(-) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index b607ba896..a6343eaa1 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -92,7 +92,7 @@ export abstract class BaseWalletAPI { * @param value * @param data */ - abstract encodeExecute(target: string, value: BigNumberish, data: string): Promise + abstract encodeExecute(target: string, value: BigNumberish, data: string, isDelegateCall: boolean): Promise /** * sign a userOp's hash (requestId). @@ -178,7 +178,8 @@ export abstract class BaseWalletAPI { } const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0) - const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data) + const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data, detailsForUserOp.isDelegateCall || false) + /*const callData = (await this._getWalletContract()).encodeFunctionData('execFromEntryPoint', [ detailsForUserOp.target, value, diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 7a84f2247..572890a1e 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -52,6 +52,15 @@ export class ERC4337EthersSigner extends Signer { // This one is called by Contract. It signs the request and passes in to Provider to be sent. async sendTransaction (transaction: Deferrable): Promise { console.log('received transaction ', transaction) + const customData : any = transaction.customData + console.log(customData) + let gasLimit = customData.appliedGasLimit; + + // temp + transaction.gasLimit = gasLimit + + // TODO : if isDeployed = false || skipGasLimit = true then use provided gas limit => transaction.gasLimit = gasLimit + delete transaction.customData const tx: TransactionRequest = await this.populateTransaction(transaction) console.log('populate trx ', tx) await this.verifyAllNecessaryFields(tx) @@ -59,7 +68,8 @@ export class ERC4337EthersSigner extends Signer { target: tx.to ?? '', data: tx.data?.toString() ?? '', value: tx.value, - // gasLimit: tx.gasLimit + gasLimit: tx.gasLimit, + isDelegateCall: true // get from customData.isBatchedToMultiSend }) console.log('signed userOp ', userOperation) const transactionResponse = await this.erc4337provider.constructUserOpTransactionResponse(userOperation) diff --git a/packages/account-abstraction/src/SmartAccountAPI.ts b/packages/account-abstraction/src/SmartAccountAPI.ts index 0c7d96ecd..4c0c9f4e6 100644 --- a/packages/account-abstraction/src/SmartAccountAPI.ts +++ b/packages/account-abstraction/src/SmartAccountAPI.ts @@ -75,7 +75,7 @@ export class SmartAccountAPI extends BaseWalletAPI { * @param value * @param data */ - async encodeExecute (target: string, value: BigNumberish, data: string): Promise { + async encodeExecute (target: string, value: BigNumberish, data: string, isDelegateCall: boolean): Promise { const walletContract = await this._getWalletContract() // Review Talha console.log(walletContract) @@ -85,8 +85,8 @@ export class SmartAccountAPI extends BaseWalletAPI { target, value, data, - 0, //temp - 200000, //temp + isDelegateCall ? 1 : 0, //temp // TODO // if multisend then delegatecall (take flag...) + 500000, //temp // TODO ]) } // TODO: May be need to move this to ERC4337EthersPrivider diff --git a/packages/account-abstraction/src/TransactionDetailsForUserOp.ts b/packages/account-abstraction/src/TransactionDetailsForUserOp.ts index 1e9beeac2..de89a2801 100644 --- a/packages/account-abstraction/src/TransactionDetailsForUserOp.ts +++ b/packages/account-abstraction/src/TransactionDetailsForUserOp.ts @@ -7,4 +7,5 @@ export interface TransactionDetailsForUserOp { gasLimit?: BigNumberish maxFeePerGas?: BigNumberish maxPriorityFeePerGas?: BigNumberish + isDelegateCall?: boolean } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index d250dd590..de29e2852 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -248,7 +248,6 @@ class SmartAccount { // Optional methods for connecting paymaster // Optional methods for connecting another bundler - // Could be implemented at aaSigner level. Move some implementation to transactionManager public async sendGasLessTransaction(transactionDto: TransactionDto): Promise { let { version, transaction, chainId } = transactionDto @@ -256,7 +255,22 @@ class SmartAccount { version = version ? version : this.DEFAULT_VERSION const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() - const response = await aaSigner.sendTransaction(transaction) + const state = await this.getSmartAccountState(chainId); + + let customData : Record = { + isDeployed : state.isDeployed, + skipGasLimit: false, + isBatchedToMultiSend: false, + appliedGasLimit: 500000 // could come from params or local mock estimation.. + } + + const multiSendContract = this.contractUtils.multiSendContract[chainId][version].getContract(); + if(ethers.utils.getAddress(transaction.to) === ethers.utils.getAddress(multiSendContract.address)) { + customData.skipGasLimit = true + customData.isBatchedToMultiSend = true + } + + const response = await aaSigner.sendTransaction({...transaction, customData: customData}) return response // todo: make sense of this response and return hash to the user } @@ -299,13 +313,18 @@ class SmartAccount { const multiSendContract = this.contractUtils.multiSendContract[chainId][version].getContract(); const finalTx = this.transactionManager.utils.buildMultiSendTx(multiSendContract, txs, nonce, true); + console.log('final gasless batch tx '); + console.log(finalTx) const gaslessTx = { to: finalTx.to, data: finalTx.data, - value: finalTx.value + value: finalTx.value, } + // Multisend is tricky because populateTransaction expects delegateCall and we must override + + // Review : Stuff before this can be moved to TransactionManager const response = await this.sendGasLessTransaction({version, transaction: gaslessTx, chainId}) return response } From 5378a64779bcfa048a693f534a1a66c92e917b58 Mon Sep 17 00:00:00 2001 From: talha Date: Thu, 13 Oct 2022 22:59:28 +0500 Subject: [PATCH 0194/1247] optimisation changes --- .../src/ERC4337EthersProvider.ts | 3 - packages/smart-account/src/SmartAccount.ts | 224 +++++++++--------- packages/transactions/src/contract-utils.ts | 89 ++++--- 3 files changed, 164 insertions(+), 152 deletions(-) diff --git a/packages/account-abstraction/src/ERC4337EthersProvider.ts b/packages/account-abstraction/src/ERC4337EthersProvider.ts index 794724bec..ca0b491da 100644 --- a/packages/account-abstraction/src/ERC4337EthersProvider.ts +++ b/packages/account-abstraction/src/ERC4337EthersProvider.ts @@ -12,7 +12,6 @@ import { UserOperation } from '@biconomy-sdk/core-types' import { BaseWalletAPI } from './BaseWalletAPI' export class ERC4337EthersProvider extends BaseProvider { - initializedBlockNumber!: number readonly signer: ERC4337EthersSigner @@ -32,9 +31,7 @@ export class ERC4337EthersProvider extends BaseProvider { } async init (): Promise { - this.initializedBlockNumber = await this.originalProvider.getBlockNumber() await this.smartWalletAPI.init() - // await this.signer.init() return this } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index de29e2852..84d2fb378 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -27,7 +27,6 @@ import { FeeQuote, RelayResponse, SmartAccountConfig, - ZERO_ADDRESS, IMetaTransaction } from '@biconomy-sdk/core-types' import NodeClient, { @@ -38,6 +37,7 @@ import NodeClient, { } from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' +import EvmNetworkManager from '@biconomy-sdk/ethers-lib' import TransactionManager, { ContractUtils, @@ -59,15 +59,30 @@ import { JsonRpcProvider } from '@ethersproject/providers' import { newProvider, ERC4337EthersProvider } from '@biconomy-sdk/account-abstraction' import { ethers, Signer } from 'ethers' + +// function Confirmable() { +// return function (target: Object, key: string | symbol, descriptor: PropertyDescriptor) { +// console.log('target ', target) +// console.log('key ', key) +// console.log('descriptor ', descriptor) +// const original = descriptor.value; + +// descriptor.value = function( ... args: any[]) { +// console.log('args ', args) +// args[0].chainId = 1 +// const result = original.apply(this, args); +// return result; +// }; + +// return descriptor; +// }; +// } + // Create an instance of Smart Account with multi-chain support. class SmartAccount { // By default latest version DEFAULT_VERSION: SmartAccountVersion = '1.0.1' - // { ethAdapter } is a window that gives access to all the implemented functions of it - // requires signer and read-only provider - ethAdapter!: { [chainId: number]: EthersAdapter } - // Smart Account Context provies relevant contract instances for chainId asked (default is current active chain) context!: { [chainId: number]: SmartAccountContext } @@ -148,49 +163,88 @@ class SmartAccount { this.dappAPIKey = this.#smartAccountConfig.dappAPIKey || '' // Useful if Dapp needs custom RPC Urls. Check if valid. Fallback to public Urls this.providerUrlConfig = this.#smartAccountConfig.providerUrlConfig || [] - this.ethAdapter = {} this.supportedNetworkIds = this.#smartAccountConfig.supportedNetworksIds // Should not break if we make this wallet connected provider optional (We'd have JsonRpcProvider / JsonRpcSender) this.provider = walletProvider - // TODO: fix hardhcoded - console.log('this.providerUrlConfig[0].providerUrl ', this.providerUrlConfig[0].providerUrl) - - // TODO:: Allow original signer to be passed and preserve this.signer = walletProvider.getSigner() // Refer to SmartAccountSigner from eth-bogota branch - // TODO // Review this.contractUtils = new ContractUtils(this.DEFAULT_VERSION) this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) this.relayer = new RestRelayer({ url: this.#smartAccountConfig.relayer_url }) this.aaProvider = {} } + getProviderUrl(network: ChainConfig): string { + let providerUrl = + this.#smartAccountConfig.providerUrlConfig?.find( + (element) => element.chainId === network.chainId + )?.providerUrl || '' + + if (!providerUrl) providerUrl = network.providerUrl + return providerUrl + } + + async initializeContractsAtChain(chainId: ChainId) { + let exist + try { + exist = this.contractUtils.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() + } catch (err) { + console.log('Instantiating chain ', chainId) + } + if (!exist) { + const network = this.chainConfig.find((element: ChainConfig) => element.chainId === chainId) + if (!network) return + const providerUrl = this.getProviderUrl(network) + const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) + await this.contractUtils.initializeContracts(this.signer, readProvider, network) + + if (!this.address){ + this.address = await this.getAddress({ + index: 0, + chainId: network.chainId, + version: this.DEFAULT_VERSION + }) + console.log('smart wallet address is ', this.address) + } + + this.aaProvider[network.chainId] = await newProvider( + new ethers.providers.JsonRpcProvider(providerUrl), + { + dappId: this.dappAPIKey, + signingServiceUrl: this.#smartAccountConfig.signingServiceUrl, + paymasterAddress: this.#smartAccountConfig.paymasterAddress || '', + entryPointAddress: this.#smartAccountConfig.entryPointAddress + ? this.#smartAccountConfig.entryPointAddress + : network.entryPoint[network.entryPoint.length - 1].address, + bundlerUrl: this.#smartAccountConfig.bundlerUrl || '', + chainId: network.chainId + }, + this.signer, + this.address, + network.fallBackHandler[network.fallBackHandler.length - 1].address, + network.walletFactory[network.walletFactory.length - 1].address + ) + } + } + async init() { this.setActiveChain(this.#smartAccountConfig.activeNetworkId) this.owner = await this.signer.getAddress() - this.chainConfig = [] const chainConfig = (await this.nodeClient.getAllSupportedChains()).data for (let index = 0; index < this.#smartAccountConfig.supportedNetworksIds.length; index++) { const network = chainConfig.find( - (element) => element.chainId === this.#smartAccountConfig.supportedNetworksIds[index] + (element: ChainConfig) => + element.chainId === this.#smartAccountConfig.activeNetworkId ) - if (network) this.chainConfig.push(network) + if (network) { + this.chainConfig.push(network) + } } - console.log('supported chains length is ', this.chainConfig.length) - console.log('supported chains list is ', this.chainConfig) - - await this.contractUtils.initialize(chainConfig, this.#smartAccountConfig, this.signer) - - this.address = await this.getAddress({ - index: 0, - chainId: this.#smartAccountConfig.activeNetworkId, - version: this.DEFAULT_VERSION - }) - + await this.initializeContractsAtChain(this.#smartAccountConfig.activeNetworkId) this.transactionManager = new TransactionManager() const state = await this.getSmartAccountState(this.#smartAccountConfig.activeNetworkId) @@ -201,46 +255,8 @@ class SmartAccount { this.contractUtils, state ) - - // TODO: Define and init SmartAccountProvider - const entryPointAddress = this.#smartAccountConfig.entryPointAddress - ? this.#smartAccountConfig.entryPointAddress - : state.entryPointAddress - const factoryAddress = - this.contractUtils.smartWalletFactoryContract[this.#smartAccountConfig.activeNetworkId][ - this.DEFAULT_VERSION - ].getAddress() - - for (let index = 0; index < this.chainConfig.length; index++) { - const network = this.chainConfig[index] - console.log('initialising for chain ', network.chainId) - let providerUrl = - this.#smartAccountConfig.providerUrlConfig?.find( - (element) => element.chainId === network.chainId - )?.providerUrl || '' - - if (!providerUrl) providerUrl = network.providerUrl - - this.aaProvider[network.chainId] = await newProvider( - new ethers.providers.JsonRpcProvider(providerUrl), - { - dappId: this.dappAPIKey, - signingServiceUrl: this.#smartAccountConfig.signingServiceUrl, - paymasterAddress: this.#smartAccountConfig.paymasterAddress || '', - entryPointAddress, - bundlerUrl: this.#smartAccountConfig.bundlerUrl || '', - chainId: network.chainId - }, - this.signer, - this.address, - state.fallbackHandlerAddress, - factoryAddress - ) - console.log('round completed for chainid ', network.chainId) - } - console.log('aa provider ', this.aaProvider) - + console.log('hurrahhh ----- initilization completed') return this } @@ -248,29 +264,35 @@ class SmartAccount { // Optional methods for connecting paymaster // Optional methods for connecting another bundler - public async sendGasLessTransaction(transactionDto: TransactionDto): Promise { + public async sendGasLessTransaction( + transactionDto: TransactionDto + ): Promise { let { version, transaction, chainId } = transactionDto chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId version = version ? version : this.DEFAULT_VERSION const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() - const state = await this.getSmartAccountState(chainId); + await this.initializeContractsAtChain(chainId) + + const state = await this.getSmartAccountState(chainId) - let customData : Record = { - isDeployed : state.isDeployed, + let customData: Record = { + isDeployed: state.isDeployed, skipGasLimit: false, isBatchedToMultiSend: false, appliedGasLimit: 500000 // could come from params or local mock estimation.. } - const multiSendContract = this.contractUtils.multiSendContract[chainId][version].getContract(); - if(ethers.utils.getAddress(transaction.to) === ethers.utils.getAddress(multiSendContract.address)) { + const multiSendContract = this.contractUtils.multiSendContract[chainId][version].getContract() + if ( + ethers.utils.getAddress(transaction.to) === ethers.utils.getAddress(multiSendContract.address) + ) { customData.skipGasLimit = true customData.isBatchedToMultiSend = true } - const response = await aaSigner.sendTransaction({...transaction, customData: customData}) + const response = await aaSigner.sendTransaction({ ...transaction, customData: customData }) return response // todo: make sense of this response and return hash to the user } @@ -303,35 +325,40 @@ class SmartAccount { to: transactions[i].to, value: transactions[i].value || 0, operation: 0, // review - data: transactions[i].data || '0x', // for token transfers use encodeTransfer + data: transactions[i].data || '0x' // for token transfers use encodeTransfer } txs.push(innerTx) } } - const multiSendContract = this.contractUtils.multiSendContract[chainId][version].getContract(); + const multiSendContract = this.contractUtils.multiSendContract[chainId][version].getContract() - const finalTx = this.transactionManager.utils.buildMultiSendTx(multiSendContract, txs, nonce, true); - console.log('final gasless batch tx '); + const finalTx = this.transactionManager.utils.buildMultiSendTx( + multiSendContract, + txs, + nonce, + true + ) + console.log('final gasless batch tx ') console.log(finalTx) const gaslessTx = { - to: finalTx.to, - data: finalTx.data, - value: finalTx.value, + to: finalTx.to, + data: finalTx.data, + value: finalTx.value } - // Multisend is tricky because populateTransaction expects delegateCall and we must override + // Multisend is tricky because populateTransaction expects delegateCall and we must override // Review : Stuff before this can be moved to TransactionManager - const response = await this.sendGasLessTransaction({version, transaction: gaslessTx, chainId}) + const response = await this.sendGasLessTransaction({ version, transaction: gaslessTx, chainId }) return response } - // Only to deploy wallet using connected paymaster (or the one corresponding to dapp api key) - public async deployWalletUsingPaymaster() { // can pass chainId + public async deployWalletUsingPaymaster() { + // can pass chainId const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() const response = await aaSigner.deployWalletOnly() // todo: make sense of this response and return hash to the user @@ -385,16 +412,6 @@ class SmartAccount { return this.nodeClient.getTransactionByHash(txHash) } - // return adapter instance to be used for blockchain interactions - /** - * adapter instance to be used for some blockchain interactions - * @param chainId requested chainId : default is current active chain - * @returns EthersAdapter - */ - ethersAdapter(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): EthersAdapter { - return this.ethAdapter[chainId] - } - // Assigns transaction relayer to this smart wallet instance /** * Assigns transaction relayer to this smart wallet instance @@ -416,8 +433,9 @@ class SmartAccount { * @param chainId * @returns self/this */ - setActiveChain(chainId: ChainId): SmartAccount { + async setActiveChain(chainId: ChainId): Promise { this.#smartAccountConfig.activeNetworkId = chainId + await this.initializeContractsAtChain(this.#smartAccountConfig.activeNetworkId) return this } @@ -677,9 +695,6 @@ class SmartAccount { return txHash } - // async deployWalletWithPayMaster(chainId: ChainId = this.#smartAccountConfig.activeNetworkId){ - - // } /** * @@ -716,9 +731,7 @@ class SmartAccount { ): Promise { // TODO: Get from node client first from cache, if not found then query smart contract const { index, chainId, version } = addressForCounterFactualWalletDto - this.contractUtils.smartWalletFactoryContract[chainId][ - version - ].getAddressForCounterfactualWallet(this.owner, index) + const address = await this.contractUtils.smartWalletFactoryContract[chainId][ version ].getAddressForCounterfactualWallet(this.owner, index) @@ -726,17 +739,6 @@ class SmartAccount { return address } - // Could be part of SmartAccountAPI for AA - /*async getAddressForCounterfactualWallet( - addressForCounterFactualWalletDto: AddressForCounterFactualWalletDto - ): Promise { - const { index, chainId, version } = addressForCounterFactualWalletDto - console.log('index and ChainId ', index, chainId, version) - return this.contractUtils.smartWalletFactoryContract[chainId][ - version - ].getAddressForCounterfactualWallet(this.owner, index) - }*/ - /** * Allows one to check if the smart account is already deployed on requested chainOd * @review @@ -815,7 +817,7 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { relayer_url: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay', dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', bundlerUrl: 'http://localhost:3000/rpc', - providerUrlConfig: [ + providerUrlConfig: [ // TODO: Define Type For It { chainId: ChainId.GOERLI, providerUrl: 'https://eth-goerli.alchemyapi.io/v2/lmW2og_aq-OXWKYRoRu-X6Yl6wDQYt_2' diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index 505b73b1b..c5491f87e 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -44,51 +44,64 @@ class ContractUtils { return this.smartWalletContract[chainId][this.version] } - public async initialize( - supportedChains: ChainConfig[], - config: SmartAccountConfig, - signer: Signer - ) { - const chainsInfo = supportedChains - - for (let i = 0; i < chainsInfo.length; i++) { - const network = chainsInfo[i] - // To keep it network agnostic - // Note: think about events when signer needs to pay gas - - let providerUrl = - config.providerUrlConfig?.find((element) => element.chainId === network.chainId) - ?.providerUrl || '' - console.log('Used provider from config ', providerUrl) - - if (!providerUrl) providerUrl = network.providerUrl - - const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) - - console.log('chain id ', network.chainId, 'readProvider ', readProvider) - - // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable - this.ethAdapter[network.chainId] = new EvmNetworkManager({ - ethers, - signer, - provider: readProvider - }) - - this.smartWalletFactoryContract[network.chainId] = {} - this.smartWalletContract[network.chainId] = {} - this.multiSendContract[network.chainId] = {} - this.multiSendCallOnlyContract[network.chainId] = {} - this.initializeContracts(network) - } - } - initializeContracts(chaininfo: ChainConfig) { + // public async initialize( + // supportedChains: ChainConfig[], + // config: SmartAccountConfig, + // signer: Signer + // ) { + // const chainsInfo = supportedChains + + // for (let i = 0; i < chainsInfo.length; i++) { + // const network = chainsInfo[i] + // // To keep it network agnostic + // // Note: think about events when signer needs to pay gas + + // let providerUrl = + // config.providerUrlConfig?.find((element) => element.chainId === network.chainId) + // ?.providerUrl || '' + // console.log('Used provider from config ', providerUrl) + + // if (!providerUrl) providerUrl = network.providerUrl + + // const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) + + // console.log('chain id ', network.chainId, 'readProvider ', readProvider) + + // // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable + // this.ethAdapter[network.chainId] = new EvmNetworkManager({ + // ethers, + // signer, + // provider: readProvider + // }) + + // this.smartWalletFactoryContract[network.chainId] = {} + // this.smartWalletContract[network.chainId] = {} + // this.multiSendContract[network.chainId] = {} + // this.multiSendCallOnlyContract[network.chainId] = {} + // this.initializeContracts(network) + // } + // } + initializeContracts(signer: Signer, readProvider: ethers.providers.JsonRpcProvider, chaininfo: ChainConfig) { // We get the addresses using chainConfig fetched from backend node const smartWallet = chaininfo.wallet const smartWalletFactoryAddress = chaininfo.walletFactory const multiSend = chaininfo.multiSend const multiSendCall = chaininfo.multiSendCall + this.ethAdapter[chaininfo.chainId] = new EvmNetworkManager({ + ethers, + signer, + provider: readProvider + }) + + this.smartWalletFactoryContract[chaininfo.chainId] = {} + this.smartWalletContract[chaininfo.chainId] = {} + this.multiSendContract[chaininfo.chainId] = {} + this.multiSendCallOnlyContract[chaininfo.chainId] = {} + for (let index = 0; index < smartWallet.length; index++) { + + const version = smartWallet[index].version console.log(smartWallet[index]) From 2d2923dc24b0b47c3e991a58c5a2c7e7419e86fe Mon Sep 17 00:00:00 2001 From: talha Date: Fri, 14 Oct 2022 12:50:03 +0500 Subject: [PATCH 0195/1247] smart account state management for multiple version logical fixes --- .../core-types/src/smart-account.types.ts | 2 + packages/smart-account/src/SmartAccount.ts | 87 +++++++++--------- packages/transactions/src/contract-utils.ts | 40 ++++++++- .../transactions/src/transaction-manager.ts | 88 +++++++++++-------- .../src/utils/FetchContractsInfo.ts | 2 +- 5 files changed, 137 insertions(+), 82 deletions(-) diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 0321015b6..3b73a6878 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -44,6 +44,8 @@ export type EstimateSmartAccountDeploymentDto = { } export type SmartAccountState = { + chainId: ChainId + version: string, address: string // multichain (EVM) owner: string // multichain (EVM) isDeployed: boolean // chain specific diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 84d2fb378..7fc5d9113 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -130,6 +130,8 @@ class SmartAccount { dappAPIKey!: string + smartAccountState!: SmartAccountState + // TODO // Review provider type WalletProviderLike / ExternalProvider // Can expose recommended provider classes through the SDK @@ -156,6 +158,14 @@ class SmartAccount { */ constructor(walletProvider: Web3Provider, config?: Partial) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } + + // if ( !this.#smartAccountConfig.activeNetworkId ){ + // throw Error('active chain needs to be specified') + // } + + // if ( this.#smartAccountConfig.supportedNetworksIds.length == 0 ) + // this.#smartAccountConfig.supportedNetworksIds = [this.#smartAccountConfig.activeNetworkId] + if (config) { this.#smartAccountConfig = { ...this.#smartAccountConfig, ...config } } @@ -170,10 +180,10 @@ class SmartAccount { this.signer = walletProvider.getSigner() // Refer to SmartAccountSigner from eth-bogota branch - this.contractUtils = new ContractUtils(this.DEFAULT_VERSION) this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) this.relayer = new RestRelayer({ url: this.#smartAccountConfig.relayer_url }) this.aaProvider = {} + this.chainConfig = [] } getProviderUrl(network: ChainConfig): string { @@ -207,6 +217,16 @@ class SmartAccount { version: this.DEFAULT_VERSION }) console.log('smart wallet address is ', this.address) + + this.smartAccountState = { + chainId: network.chainId, + version: this.DEFAULT_VERSION, + address: this.address, + owner: this.owner, + isDeployed: await this.contractUtils.isDeployed(network.chainId, this.DEFAULT_VERSION, this.address), // could be set as state in init + entryPointAddress: network.fallBackHandler[network.fallBackHandler.length - 1].address, + fallbackHandlerAddress: network.walletFactory[network.walletFactory.length - 1].address + } } this.aaProvider[network.chainId] = await newProvider( @@ -235,6 +255,9 @@ class SmartAccount { this.owner = await this.signer.getAddress() const chainConfig = (await this.nodeClient.getAllSupportedChains()).data + + this.contractUtils = new ContractUtils(this.DEFAULT_VERSION, chainConfig) + for (let index = 0; index < this.#smartAccountConfig.supportedNetworksIds.length; index++) { const network = chainConfig.find( (element: ChainConfig) => @@ -245,15 +268,14 @@ class SmartAccount { } } await this.initializeContractsAtChain(this.#smartAccountConfig.activeNetworkId) - this.transactionManager = new TransactionManager() - const state = await this.getSmartAccountState(this.#smartAccountConfig.activeNetworkId) + + this.transactionManager = new TransactionManager(this.smartAccountState) await this.transactionManager.initialize( this.relayer, this.nodeClient, - this.contractUtils, - state + this.contractUtils ) console.log('aa provider ', this.aaProvider) console.log('hurrahhh ----- initilization completed') @@ -275,7 +297,7 @@ class SmartAccount { await this.initializeContractsAtChain(chainId) - const state = await this.getSmartAccountState(chainId) + const state = await this.contractUtils.getSmartAccountState(this.smartAccountState) let customData: Record = { isDeployed: state.isDeployed, @@ -369,7 +391,6 @@ class SmartAccount { * @param smartAccountVersion * @description // set wallet version to be able to interact with different deployed versions */ - // TODO //@review @Talha async setSmartAccountVersion(smartAccountVersion: SmartAccountVersion) { this.DEFAULT_VERSION = smartAccountVersion this.address = await this.getAddress({ @@ -467,13 +488,14 @@ class SmartAccount { * @returns */ async sendTransaction(sendTransactionDto: SendTransactionDto): Promise { - const { + let { tx, batchId = 0, - chainId = this.#smartAccountConfig.activeNetworkId + chainId } = sendTransactionDto + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId let { gasLimit } = sendTransactionDto - const isDeployed = await this.isDeployed(chainId) + const isDeployed = await this.contractUtils.isDeployed(chainId, this.DEFAULT_VERSION, this.address) let rawTx: RawTransactionType = { to: tx.to, data: tx.data, @@ -518,7 +540,7 @@ class SmartAccount { rawTx.to = this.address rawTx.data = execTransaction.data - const state = await this.getSmartAccountState(chainId) + const state = await this.contractUtils.getSmartAccountState(this.smartAccountState) const signedTx: SignedTransaction = { rawTx, @@ -746,46 +768,27 @@ class SmartAccount { * @param chainId optional chainId : Default is current active * @returns */ - async isDeployed(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): Promise { - // Other approach : needs review - /*let isPhantom = false - // could be readProvider.getCode - const walletAddressCode = await this.provider.getCode(this.address) - if (walletAddressCode.length > 2) { - isPhantom = true - } - return isPhantom;*/ - - //Below works + async isDeployed(chainId: ChainId): Promise { + + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + return await this.contractUtils.smartWalletFactoryContract[chainId][ this.DEFAULT_VERSION ].isWalletExist(this.address) } - /** + /** * @review for owner * @param chainId requested chain : default is active chain * @returns object containing infromation (owner, relevant contract addresses, isDeployed) about Smart Account for requested chain */ - async getSmartAccountState( - // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId - ): Promise { - const contractsByVersion = findContractAddressesByVersion( - this.DEFAULT_VERSION, - chainId, - this.chainConfig - ) + async getSmartAccountState( + chainId: ChainId + ): Promise { - const state: SmartAccountState = { - address: this.address, - owner: this.owner, - isDeployed: await this.isDeployed(chainId), // could be set as state in init - entryPointAddress: contractsByVersion.entryPointAddress || '', - fallbackHandlerAddress: contractsByVersion.fallBackHandlerAddress || '' + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + return this.contractUtils.getSmartAccountState(this.smartAccountState) } - return state - } // /** @@ -796,8 +799,10 @@ class SmartAccount { */ getSmartAccountContext( // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, - chainId: ChainId = this.#smartAccountConfig.activeNetworkId + chainId: ChainId ): SmartAccountContext { + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + const context: SmartAccountContext = this.contractUtils.getSmartAccountContext( chainId, this.DEFAULT_VERSION diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index c5491f87e..93e54428f 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -5,14 +5,15 @@ import { MultiSendContract, MultiSendCallOnlyContract, SmartAccountContext, - SmartAccountConfig + SmartAccountState } from '@biconomy-sdk/core-types' import { ChainConfig, SupportedChainsResponse } from '@biconomy-sdk/node-client' import { getSmartWalletFactoryContract, getMultiSendContract, getMultiSendCallOnlyContract, - getSmartWalletContract + getSmartWalletContract, + findContractAddressesByVersion } from './utils/FetchContractsInfo' import { ethers, Signer } from 'ethers' import EvmNetworkManager from '@biconomy-sdk/ethers-lib' @@ -30,9 +31,11 @@ class ContractUtils { [chainId: number]: { [version: string]: SmartWalletFactoryContract } } + smartAccountState!: SmartAccountState + // Note: Should DEFAULT_VERSION be moved here? - constructor(readonly version: string) { + constructor(readonly version: string, readonly chainConfig: ChainConfig[]) { this.ethAdapter = {} this.smartWalletContract = {} this.multiSendContract = {} @@ -164,6 +167,37 @@ class ContractUtils { } return context } + + + async getSmartAccountState( + smartAccountState: SmartAccountState + ): Promise { + + let {address, owner, chainId, version} = smartAccountState + + version = version ? version : this.version + + + if (this.version !== version) { + this.smartAccountState.address = await this.smartWalletFactoryContract[chainId][ + version + ].getAddressForCounterfactualWallet(owner, 0) + this.smartAccountState.isDeployed = await this.isDeployed(chainId, version, address) // could be set as state in init + const contractsByVersion = findContractAddressesByVersion( + version, + chainId, + this.chainConfig + ) + this.smartAccountState.entryPointAddress = contractsByVersion.entryPointAddress || '', + this.smartAccountState.fallbackHandlerAddress = contractsByVersion.fallBackHandlerAddress || '' + } + + if (!this.smartAccountState){ + this.smartAccountState = smartAccountState + } + + return this.smartAccountState + } } export default ContractUtils diff --git a/packages/transactions/src/transaction-manager.ts b/packages/transactions/src/transaction-manager.ts index a894b51c5..725be2baf 100644 --- a/packages/transactions/src/transaction-manager.ts +++ b/packages/transactions/src/transaction-manager.ts @@ -47,9 +47,8 @@ class TransactionManager { utils!: Utils - smartAccountState!: SmartAccountState - constructor() { + constructor(readonly smartAccountState: SmartAccountState) { this.utils = new Utils() } @@ -57,13 +56,10 @@ class TransactionManager { async initialize( relayer: Relayer, nodeClient: NodeClient, - contractUtils: ContractUtils, - smartAccountState: SmartAccountState + contractUtils: ContractUtils ) { // Note: smart account is state specific so we may end up using chain specific transaction managers as discussed. - this.smartAccountState = smartAccountState - this.nodeClient = nodeClient // this.nodeClient = new NodeClient({ txServiceUrl: config.backend_url }) @@ -96,13 +92,16 @@ class TransactionManager { const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response let feeQuotes: Array = [] + + const smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ chainId: chainId, version, - owner: this.smartAccountState.owner, - entryPointAddress: this.smartAccountState.entryPointAddress, - fallbackHandlerAddress: this.smartAccountState.fallbackHandlerAddress + owner: smartAccountState.owner, + entryPointAddress: smartAccountState.entryPointAddress, + fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress }) feeOptionsAvailable.forEach((feeOption) => { @@ -142,12 +141,15 @@ class TransactionManager { const offset = feeQuote.offset || 1 const feeReceiver = feeQuote.refundReceiver || DEFAULT_FEE_RECEIVER + const smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) + + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ chainId: chainId, version, - owner: this.smartAccountState.owner, - entryPointAddress: this.smartAccountState.entryPointAddress, - fallbackHandlerAddress: this.smartAccountState.fallbackHandlerAddress + owner: smartAccountState.owner, + entryPointAddress: smartAccountState.entryPointAddress, + fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress }) // do estimations here or pass on payment and use feeQuote fully! let feesToPay = (feeQuote.tokenGasPrice * (estimateWalletDeployment + 77369)) / offset @@ -177,12 +179,14 @@ class TransactionManager { async createTransaction(transactionDto: TransactionDto): Promise { const { transaction, batchId = 0, chainId, version } = transactionDto + const smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) + // NOTE : If the wallet is not deployed yet then nonce would be zero let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() - walletContract = walletContract.attach(this.smartAccountState.address) + walletContract = walletContract.attach(smartAccountState.address) let nonce = 0 - if (await this.contractUtils.isDeployed(chainId, version, this.smartAccountState.address)) { + if (await this.contractUtils.isDeployed(chainId, version, smartAccountState.address)) { nonce = (await walletContract.getNonce(batchId)).toNumber() } console.log('nonce: ', nonce) @@ -212,12 +216,14 @@ class TransactionManager { ): Promise { const { transactions, batchId, chainId, version } = transactionBatchDto // NOTE : If the wallet is not deployed yet then nonce would be zero + + const smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() - walletContract = walletContract.attach(this.smartAccountState.address) + walletContract = walletContract.attach(smartAccountState.address) // NOTE : If the wallet is not deployed yet then nonce would be zero let nonce = 0 - if (await this.contractUtils.isDeployed(chainId, version, this.smartAccountState.address)) { + if (await this.contractUtils.isDeployed(chainId, version, smartAccountState.address)) { nonce = (await walletContract.getNonce(batchId)).toNumber() } console.log('nonce: ', nonce) @@ -247,6 +253,9 @@ class TransactionManager { async estimateTransaction(prepareTransactionDto: PrepareRefundTransactionDto): Promise { const { transaction, batchId, chainId, version } = prepareTransactionDto + + const smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) + // OR just like contractUtils manages context, this class manages state getState(chainId) method // const state = await this.getSmartAccountState(chainId); @@ -257,7 +266,7 @@ class TransactionManager { let estimatedGasUsed = await this.estimator.estimateTransaction( prepareTransactionDto, tx, - this.smartAccountState + smartAccountState ) return estimatedGasUsed } @@ -319,6 +328,8 @@ class TransactionManager { prepareRefundTransactionsDto: PrepareRefundTransactionsDto ): Promise { const { transactions, batchId, chainId, version } = prepareRefundTransactionsDto + + const smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) const tx = await this.createTransactionBatch({ version, transactions, @@ -329,7 +340,7 @@ class TransactionManager { let estimatedGasUsed = await this.estimator.estimateTransactionBatch( prepareRefundTransactionsDto, tx, - this.smartAccountState + smartAccountState ) return estimatedGasUsed } @@ -409,8 +420,10 @@ class TransactionManager { refundTransactionDto: RefundTransactionDto ): Promise { const { transaction, feeQuote, batchId, chainId, version } = refundTransactionDto + + const smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() - walletContract = walletContract.attach(this.smartAccountState.address) + walletContract = walletContract.attach(smartAccountState.address) let additionalBaseGas = 0 @@ -419,7 +432,7 @@ class TransactionManager { const isDeployed = await this.contractUtils.isDeployed( chainId, version, - this.smartAccountState.address + smartAccountState.address ) if (isDeployed) { nonce = (await walletContract.getNonce(batchId)).toNumber() @@ -427,9 +440,9 @@ class TransactionManager { const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ chainId: chainId, version, - owner: this.smartAccountState.owner, - entryPointAddress: this.smartAccountState.entryPointAddress, - fallbackHandlerAddress: this.smartAccountState.fallbackHandlerAddress + owner: smartAccountState.owner, + entryPointAddress: smartAccountState.entryPointAddress, + fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress }) // We know it's going to get deployed by Relayer but we handle refund cost here.. additionalBaseGas += estimateWalletDeployment // wallet deployment gas @@ -458,7 +471,7 @@ class TransactionManager { const estimateRequiredTxGas: EstimateRequiredTxGasDto = { chainId: chainId, - walletAddress: this.smartAccountState.address, + walletAddress: smartAccountState.address, transaction: internalTx } const response = await this.nodeClient.estimateRequiredTxGasOverride(estimateRequiredTxGas) @@ -482,7 +495,7 @@ class TransactionManager { const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { chainId: chainId, version: version, - walletAddress: this.smartAccountState.address, + walletAddress: smartAccountState.address, feeRefund: refundDetails } const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGasOverride( @@ -495,7 +508,7 @@ class TransactionManager { } else { const estimateRequiredTxGas: EstimateRequiredTxGasDto = { chainId: chainId, - walletAddress: this.smartAccountState.address, + walletAddress: smartAccountState.address, transaction: internalTx } @@ -521,7 +534,7 @@ class TransactionManager { const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { chainId: chainId, version: version, - walletAddress: this.smartAccountState.address, + walletAddress: smartAccountState.address, feeRefund: refundDetails } const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas( @@ -561,14 +574,15 @@ class TransactionManager { refundTransactionBatchDto: RefundTransactionBatchDto ): Promise { const { transactions, feeQuote, batchId, chainId, version } = refundTransactionBatchDto + const smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() - const connectedWallet = this.smartAccountState.address + const connectedWallet = smartAccountState.address walletContract = walletContract.attach(connectedWallet) // TODO // Review - const isDeployed = this.smartAccountState.isDeployed - // await this.contractUtils.isDeployed(chainId, version, this.smartAccountState.address); + const isDeployed = smartAccountState.isDeployed + // await this.contractUtils.isDeployed(chainId, version, smartAccountState.address); let additionalBaseGas = 0 // NOTE : If the wallet is not deployed yet then nonce would be zero @@ -580,9 +594,9 @@ class TransactionManager { const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ chainId: chainId, version, - owner: this.smartAccountState.owner, - entryPointAddress: this.smartAccountState.entryPointAddress, - fallbackHandlerAddress: this.smartAccountState.fallbackHandlerAddress + owner: smartAccountState.owner, + entryPointAddress: smartAccountState.entryPointAddress, + fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress }) // We know it's going to get deployed by Relayer but we handle refund cost here.. console.log('estimateWalletDeployment ', estimateWalletDeployment) @@ -620,7 +634,7 @@ class TransactionManager { // ii. estimate using different wallet bytecode using eth_call [ not guaranteed as might depend on wallet state !] const estimateRequiredTxGas: EstimateRequiredTxGasDto = { chainId: chainId, - walletAddress: this.smartAccountState.address, + walletAddress: smartAccountState.address, transaction: internalTx } const response = await this.nodeClient.estimateRequiredTxGasOverride(estimateRequiredTxGas) @@ -647,7 +661,7 @@ class TransactionManager { const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { chainId: chainId, version: version, - walletAddress: this.smartAccountState.address, + walletAddress: smartAccountState.address, feeRefund: refundDetails } @@ -660,7 +674,7 @@ class TransactionManager { } else { const estimateRequiredTxGas: EstimateRequiredTxGasDto = { chainId: chainId, - walletAddress: this.smartAccountState.address, + walletAddress: smartAccountState.address, transaction: internalTx } @@ -686,7 +700,7 @@ class TransactionManager { const estimateHandlePaymentGas: EstimateHandlePaymentTxGasDto = { chainId: chainId, version: version, - walletAddress: this.smartAccountState.address, + walletAddress: smartAccountState.address, feeRefund: refundDetails } const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas( diff --git a/packages/transactions/src/utils/FetchContractsInfo.ts b/packages/transactions/src/utils/FetchContractsInfo.ts index f7e741ce6..f8729fade 100644 --- a/packages/transactions/src/utils/FetchContractsInfo.ts +++ b/packages/transactions/src/utils/FetchContractsInfo.ts @@ -48,7 +48,7 @@ export function findChainById(chainId: ChainId, chainConfig: ChainConfig[]): Cha } export function findContractAddressesByVersion( - smartAccountVersion: SmartAccountVersion, + smartAccountVersion: string, chainId: ChainId, chainConfig: ChainConfig[] ) { From c5634be4054feb7e8016c525770a859af7bac45f Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 17 Oct 2022 18:07:13 +0400 Subject: [PATCH 0196/1247] minor refactor + dev notes --- package.json | 2 +- ...{EthersAdapter.ts => EvmNetworkManager.ts} | 0 packages/ethers-lib/src/index.ts | 4 +- packages/smart-account/src/SmartAccount.ts | 46 +++++++++++-------- 4 files changed, 31 insertions(+), 21 deletions(-) rename packages/ethers-lib/src/{EthersAdapter.ts => EvmNetworkManager.ts} (100%) diff --git a/package.json b/package.json index d54ec2c5c..a681d02d3 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.5.4", - "nx": "^14.8.4", + "nx": "^15.0.0", "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1" diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EvmNetworkManager.ts similarity index 100% rename from packages/ethers-lib/src/EthersAdapter.ts rename to packages/ethers-lib/src/EvmNetworkManager.ts diff --git a/packages/ethers-lib/src/index.ts b/packages/ethers-lib/src/index.ts index fa17985f3..52636aeca 100644 --- a/packages/ethers-lib/src/index.ts +++ b/packages/ethers-lib/src/index.ts @@ -1,4 +1,4 @@ -import EthersAdapter, { EthersAdapterConfig } from './EthersAdapter' +import EvmNetworkManager, { EthersAdapterConfig } from './EvmNetworkManager' import { IEthersTransactionOptions, IEthersTransactionResult } from './types' export { SmartWalletContractV100__factory as SmartWalletFactoryContract100 } from '../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContractV100__factory' @@ -24,7 +24,7 @@ export { SmartWalletContractV101 } from '../typechain/src/ethers-v5/v1.0.1/Smart import EntryPointEthersContract_v1_0_0 from './contracts/EntryPointContract/v1.0.0/EntryPointEthersContract' import EntryPointEthersContract_v1_0_1 from './contracts/EntryPointContract/v1.0.1/EntryPointEthersContract' -export default EthersAdapter +export default EvmNetworkManager export { EthersAdapterConfig, IEthersTransactionOptions, diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 7fc5d9113..67311d6db 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -295,31 +295,31 @@ class SmartAccount { version = version ? version : this.DEFAULT_VERSION const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() - await this.initializeContractsAtChain(chainId) + // await this.initializeContractsAtChain(chainId) - const state = await this.contractUtils.getSmartAccountState(this.smartAccountState) + // const state = await this.contractUtils.getSmartAccountState(this.smartAccountState) - let customData: Record = { - isDeployed: state.isDeployed, - skipGasLimit: false, - isBatchedToMultiSend: false, - appliedGasLimit: 500000 // could come from params or local mock estimation.. - } + // let customData: Record = { + // isDeployed: state.isDeployed, + // skipGasLimit: false, + // isBatchedToMultiSend: false, + // appliedGasLimit: 500000 // could come from params or local mock estimation.. + // } - const multiSendContract = this.contractUtils.multiSendContract[chainId][version].getContract() - if ( - ethers.utils.getAddress(transaction.to) === ethers.utils.getAddress(multiSendContract.address) - ) { - customData.skipGasLimit = true - customData.isBatchedToMultiSend = true - } + // const multiSendContract = this.contractUtils.multiSendContract[chainId][version].getContract() + // if ( + // ethers.utils.getAddress(transaction.to) === ethers.utils.getAddress(multiSendContract.address) + // ) { + // customData.skipGasLimit = true + // customData.isBatchedToMultiSend = true + // } - const response = await aaSigner.sendTransaction({ ...transaction, customData: customData }) + const response = await aaSigner.sendTransaction(transaction) return response // todo: make sense of this response and return hash to the user } - public async sendGaslessTransactionBatch(transactionBatchDto: TransactionBatchDto) { + public async sendGaslessTransactionBatch(transactionBatchDto: TransactionBatchDto): Promise { let { version, transactions, batchId, chainId } = transactionBatchDto // Might get optional operation for tx @@ -379,6 +379,9 @@ class SmartAccount { } // Only to deploy wallet using connected paymaster (or the one corresponding to dapp api key) + // Todo Chirag + // Add return type + // Review involvement of Dapp API Key public async deployWalletUsingPaymaster() { // can pass chainId const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() @@ -391,15 +394,18 @@ class SmartAccount { * @param smartAccountVersion * @description // set wallet version to be able to interact with different deployed versions */ - async setSmartAccountVersion(smartAccountVersion: SmartAccountVersion) { + async setSmartAccountVersion(smartAccountVersion: SmartAccountVersion): Promise { this.DEFAULT_VERSION = smartAccountVersion this.address = await this.getAddress({ index: 0, chainId: this.#smartAccountConfig.activeNetworkId, version: this.DEFAULT_VERSION }) + return this } + // Todo Chirag + // Review inputs as chainId is already part of Dto public async getAlltokenBalances( balancesDto: BalancesDto, chainId: ChainId = this.#smartAccountConfig.activeNetworkId @@ -408,6 +414,8 @@ class SmartAccount { return this.nodeClient.getAlltokenBalances(balancesDto) } + // Todo Chirag + // Review inputs as chainId is already part of Dto public async getTotalBalanceInUsd( balancesDto: BalancesDto, chainId: ChainId = this.#smartAccountConfig.activeNetworkId @@ -422,6 +430,7 @@ class SmartAccount { return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto) } + // @Talha to add description for this public async getTransactionByAddress( chainId: number, address: string @@ -699,6 +708,7 @@ class SmartAccount { }) } + // todo : chirag missing return type async prepareDeployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { return this.transactionManager.prepareDeployAndPayFees(chainId, this.DEFAULT_VERSION) } From 2751cd2c5f42d6fb65fc59a75709bb051b01e252 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 18 Oct 2022 02:51:18 +0400 Subject: [PATCH 0197/1247] refactor + update test case + dev notes --- packages/account-abstraction/package.json | 1 - .../src/ERC4337EthersSigner.ts | 1 + .../src/SmartAccountAPI.ts | 50 ++++++------ .../test/2-ERC4337EthersProvider.test.ts | 20 ----- ....test.ts => 2-ERC4337EthersSigner.test.ts} | 0 packages/core-types/src/types.ts | 2 +- .../smart-account/tests/smartaccount.spec.ts | 80 ++++++++++--------- packages/transactions/src/contract-utils.ts | 1 + .../transactions/src/transaction-manager.ts | 15 ++-- 9 files changed, 80 insertions(+), 90 deletions(-) delete mode 100644 packages/account-abstraction/test/2-ERC4337EthersProvider.test.ts rename packages/account-abstraction/test/{3-ERC4337EthersSigner.test.ts => 2-ERC4337EthersSigner.test.ts} (100%) diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index aa2f5cebb..4c3f484a0 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -26,7 +26,6 @@ "clear": "rm -rf dist artifacts cache", "lint": "eslint -f unix .", "lint-fix": "eslint -f unix . --fix", - "test": "hardhat test", "build": "hardhat compile && yarn typechain && tsc", "hardhat-test": "hardhat test", "tsc": "tsc", diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 572890a1e..a419afea3 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -20,6 +20,7 @@ export class ERC4337EthersSigner extends Signer { defineReadOnly(this, 'provider', erc4337provider) } + // todo chirag review response async deployWalletOnly(): Promise { const userOperation = await this.smartWalletAPI.createSignedUserOp({ target: '', diff --git a/packages/account-abstraction/src/SmartAccountAPI.ts b/packages/account-abstraction/src/SmartAccountAPI.ts index 4c0c9f4e6..18045d825 100644 --- a/packages/account-abstraction/src/SmartAccountAPI.ts +++ b/packages/account-abstraction/src/SmartAccountAPI.ts @@ -29,7 +29,7 @@ export class SmartAccountAPI extends BaseWalletAPI { * @param factoryAddress address of contract "factory" to deploy new contracts * @param index nonce value used when creating multiple wallets for the same owner */ - constructor ( + constructor( provider: Provider, readonly entryPoint: EntryPointContractV101, readonly clientConfig: ClientConfig, @@ -48,7 +48,7 @@ export class SmartAccountAPI extends BaseWalletAPI { * return the value to put into the "initCode" field, if the wallet is not yet deployed. * this value holds the "factory" address, followed by this wallet's information */ - async getWalletInitCode (): Promise { + async getWalletInitCode(): Promise { const deployWalletCallData = WalletFactoryAPI.deployWalletTransactionCallData(this.factoryAddress, await this.owner.getAddress(), this.entryPoint.address, this.handlerAddress, 0) return hexConcat([ this.factoryAddress, @@ -56,8 +56,8 @@ export class SmartAccountAPI extends BaseWalletAPI { ]) } - - async getNonce (batchId: number): Promise { + + async getNonce(batchId: number): Promise { console.log('checking nonce') if (await this.checkWalletPhantom()) { return BigNumber.from(0) @@ -69,28 +69,28 @@ export class SmartAccountAPI extends BaseWalletAPI { console.log(nonce) return nonce } - /** - * encode a method call from entryPoint to our contract - * @param target - * @param value - * @param data - */ - async encodeExecute (target: string, value: BigNumberish, data: string, isDelegateCall: boolean): Promise { - const walletContract = await this._getWalletContract() - // Review Talha - console.log(walletContract) - return walletContract.interface.encodeFunctionData( - 'execFromEntryPoint', - [ - target, - value, - data, - isDelegateCall ? 1 : 0, //temp // TODO // if multisend then delegatecall (take flag...) - 500000, //temp // TODO - ]) - } + /** + * encode a method call from entryPoint to our contract + * @param target + * @param value + * @param data + */ + async encodeExecute(target: string, value: BigNumberish, data: string, isDelegateCall: boolean): Promise { + const walletContract = await this._getWalletContract() + // Review Talha + console.log(walletContract) + return walletContract.interface.encodeFunctionData( + 'execFromEntryPoint', + [ + target, + value, + data, + isDelegateCall ? 1 : 0, //temp // TODO // if multisend then delegatecall (take flag...) + 500000, //temp // TODO + ]) + } // TODO: May be need to move this to ERC4337EthersPrivider - async signRequestId (requestId: string): Promise { + async signRequestId(requestId: string): Promise { return await this.owner.signMessage(arrayify(requestId)) } } diff --git a/packages/account-abstraction/test/2-ERC4337EthersProvider.test.ts b/packages/account-abstraction/test/2-ERC4337EthersProvider.test.ts deleted file mode 100644 index c46822125..000000000 --- a/packages/account-abstraction/test/2-ERC4337EthersProvider.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -// import { expect } from 'chai' -// import hre from 'hardhat' -// import { time } from '@nomicfoundation/hardhat-network-helpers' -// -// describe('Lock', function () { -// it('Should set the right unlockTime', async function () { -// const lockedAmount = 1_000_000_000 -// const ONE_YEAR_IN_SECS = 365 * 24 * 60 * 60 -// const unlockTime = (await time.latest()) + ONE_YEAR_IN_SECS -// -// // deploy a lock contract where funds can be withdrawn -// // one year in the future -// const Lock = await hre.ethers.getContractFactory('Lock') -// const lock = await Lock.deploy(unlockTime, { value: lockedAmount }) -// -// // assert that the value is correct -// expect(await lock.unlockTime()).to.equal(unlockTime) -// }) -// }) -// should throw timeout exception if user operation is not mined after x time diff --git a/packages/account-abstraction/test/3-ERC4337EthersSigner.test.ts b/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts similarity index 100% rename from packages/account-abstraction/test/3-ERC4337EthersSigner.test.ts rename to packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 926b54afa..c35865e8e 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -65,7 +65,7 @@ export type FeeQuote = { decimal: number logoUrl: string payment: number - tokenGasPrice: number //review + tokenGasPrice: number offset?: number refundReceiver?: string } diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/smartaccount.spec.ts index da66885e7..814c7e21d 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/smartaccount.spec.ts @@ -17,7 +17,7 @@ const { expect } = chai.use(chaiAsPromised) import hardhat from 'hardhat' import { deployWalletContracts } from './utils/deploy' import { BytesLike, Interface } from 'ethers/lib/utils' -import { WalletTransaction, Transaction } from '@biconomy-sdk/core-types' +import { IWalletTransaction, Transaction } from '@biconomy-sdk/core-types' import { textSpanContainsPosition } from 'typescript' type EthereumInstance = { @@ -60,7 +60,7 @@ describe('Wallet integration', function () { beforeEach(async () => { // adds entry point, multiSendCall and fallbackHandler const [smartWallet, walletFactory, multiSend, multiSendCallOnly] = - await deployWalletContracts(ethnode.signer) + await deployWalletContracts(ethnode.signer!) console.log('base wallet deployed at : ', smartWallet.address) console.log('wallet factory deployed at : ', walletFactory.address) @@ -1089,7 +1089,7 @@ describe('Wallet integration', function () { const eoaSigner = ethnode.provider?.getSigner() - const wallet = new SmartAccount(ethnode.provider, { + const wallet = new SmartAccount(ethnode.provider!, { activeNetworkId: ChainId.GANACHE, supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, @@ -1105,16 +1105,16 @@ describe('Wallet integration', function () { console.log(smartAccount.factory().getAddress()) - const signer = await smartAccount.ethersAdapter().getSignerAddress() + const signer = await smartAccount.signer.getAddress() - const address = await smartAccount.getAddress() + const address = await smartAccount.address console.log('counter factual wallet address: ', address) expect(address).to.be.equal(smartAccount.address) - const isDeployed = await smartAccount.isDeployed() /// can pass chainId here + const isDeployed = await smartAccount.isDeployed(ChainId.GANACHE) /// can pass chainId here // Check if the smart wallet is deployed or not - const state = await smartAccount.getSmartAccountState() + const state = await smartAccount.getSmartAccountState(ChainId.GANACHE) console.log('wallet state') expect(isDeployed).to.be.equal(false) }) @@ -1123,7 +1123,7 @@ describe('Wallet integration', function () { const userAddress = (await ethnode.signer?.getAddress()) || '' const eoaSigner = ethnode.provider?.getSigner() - const wallet = new SmartAccount(ethnode.provider, { + const wallet = new SmartAccount(ethnode.provider!, { activeNetworkId: ChainId.GANACHE, supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, @@ -1137,42 +1137,43 @@ describe('Wallet integration', function () { expect(smartAccount.owner).to.be.equal(eoa) } - const signer = await smartAccount.ethersAdapter().getSignerAddress() + const signer = await smartAccount.signer.getAddress() if (eoaSigner) { const relayer = new LocalRelayer(eoaSigner) - const state = await smartAccount.getSmartAccountState() - const context = smartAccount.getSmartAccountContext() + const state = await smartAccount.getSmartAccountState(ChainId.GANACHE) + const context = smartAccount.getSmartAccountContext(ChainId.GANACHE) const deployment = await relayer.deployWallet({ config: state, context, index: 0 }) const receipt: TransactionReceipt = await deployment.wait(1) expect(receipt.status).to.be.equal(1) } - const isDeployed = await smartAccount.isDeployed() /// can pass chainId here + const isDeployed = await smartAccount.isDeployed(ChainId.GANACHE) /// can pass chainId here expect(isDeployed).to.be.equal(true) - const context = smartAccount.getSmartAccountContext() + const context = smartAccount.getSmartAccountContext(ChainId.GANACHE) expect(context.baseWallet).to.be.equal(smartAccount.smartAccount()) expect(context.walletFactory).to.be.equal(smartAccount.factory()) expect(context.multiSend).to.be.equal(smartAccount.multiSend()) - expect(context.multiSendCall).to.be.equal(smartAccount.multiSendCall()) + // todo chirag review + // expect(context.multiSendCall).to.be.equal(smartAccount.multiSendCall()) }) it('Should be able to sign transaction', async () => { const userAddress = (await ethnode.signer?.getAddress()) || '' const eoaSigner = ethnode.provider?.getSigner() - const wallet = new SmartAccount(ethnode.provider, { + const wallet = new SmartAccount(ethnode.provider!, { activeNetworkId: ChainId.GANACHE, supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names }) const smartAccount = await wallet.init() - const signerAddress = await smartAccount.ethersAdapter().getSignerAddress() + const signerAddress = await smartAccount.signer.getAddress() const smartAccountAddress = smartAccount.address // Wallet would have been deployed already - const isDeployed = await smartAccount.isDeployed() /// can pass chainId here + const isDeployed = await smartAccount.isDeployed(ChainId.GANACHE) /// can pass chainId here expect(isDeployed).to.be.equal(true) /*await ethnode.signer?.sendTransaction({ @@ -1187,11 +1188,11 @@ describe('Wallet integration', function () { value: ethers.utils.parseEther('1') } - const smartAccountTransaction: WalletTransaction = await smartAccount.createTransaction({ + const smartAccountTransaction: IWalletTransaction = await smartAccount.createTransaction({ transaction: tx }) - const signature = await smartAccount.signTransaction({ tx: smartAccountTransaction }) + const signature = await smartAccount.signTransaction({ version: smartAccount.DEFAULT_VERSION, tx: smartAccountTransaction, chainId: ChainId.GANACHE, signer: smartAccount.signer }) console.log('signature is: ', signature) }) @@ -1200,7 +1201,7 @@ describe('Wallet integration', function () { const eoaSigner = ethnode.provider?.getSigner() - const wallet = new SmartAccount(ethnode.provider, { + const wallet = new SmartAccount(ethnode.provider!, { activeNetworkId: ChainId.GANACHE, supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names }) @@ -1214,42 +1215,47 @@ describe('Wallet integration', function () { console.log(smartAccount.factory().getAddress()) - const signer = await smartAccount.ethersAdapter().getSignerAddress() + const signer = await smartAccount.signer.getAddress() - const address = await smartAccount.getAddress() + const address = await smartAccount.address console.log('counter factual wallet address: ', address) expect(address).to.be.equal(smartAccount.address) smartAccount.setActiveChain(ChainId.GOERLI) - // Now on Rinkeby - const isDeployed = await smartAccount.isDeployed() /// can pass chainId here + // todo : undo and fix + // const isDeployed = await smartAccount.isDeployed(ChainId.GOERLI) /// can pass chainId here + // Check if the smart wallet is deployed or not - const state = await smartAccount.getSmartAccountState() + const state = await smartAccount.getSmartAccountState(ChainId.GOERLI) console.log(state) - expect(isDeployed).to.be.equal(false) - expect(state.entryPointAddress).to.be.equal('0xF05217199F1C25604c67993F11a81461Bc97F3Ab') + // todo : undo and fix + // expect(isDeployed).to.be.equal(false) + + // todo : update + // should be goerli entry point + // expect(state.entryPointAddress).to.be.equal('0xF05217199F1C25604c67993F11a81461Bc97F3Ab') }) it('Should be able to send transaction', async () => { const userAddress = (await ethnode.signer?.getAddress()) || '' const eoaSigner = ethnode.provider?.getSigner() - const wallet = new SmartAccount(ethnode.provider, { + const wallet = new SmartAccount(ethnode.provider!, { activeNetworkId: ChainId.GANACHE, supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names }) const smartAccount = await wallet.init() - const signerAddress = await smartAccount.ethersAdapter().getSignerAddress() + const signerAddress = await smartAccount.signer.getAddress() const smartAccountAddress = smartAccount.address // Wallet would have been deployed already - const isDeployed = await smartAccount.isDeployed() /// can pass chainId here + const isDeployed = await smartAccount.isDeployed(ChainId.GANACHE) /// can pass chainId here expect(isDeployed).to.be.equal(true) console.log('balance before ', await ethnode.provider?.getBalance(smartAccountAddress)) @@ -1268,13 +1274,13 @@ describe('Wallet integration', function () { value: ethers.utils.parseEther('0.5') } - const smartAccountTransaction: WalletTransaction = await smartAccount.createTransaction({ + const smartAccountTransaction: IWalletTransaction = await smartAccount.createTransaction({ transaction: tx }) // Attach relayer before sending a transaction - const signer = await smartAccount.ethersAdapter().getSignerAddress() + const signer = await smartAccount.signer.getAddress() if (eoaSigner) { const relayer = new LocalRelayer(eoaSigner) smartAccount.setRelayer(relayer) @@ -1294,19 +1300,19 @@ describe('Wallet integration', function () { const userAddress = (await ethnode.signer?.getAddress()) || '' const eoaSigner = ethnode.provider?.getSigner() - const wallet = new SmartAccount(ethnode.provider, { + const wallet = new SmartAccount(ethnode.provider!, { activeNetworkId: ChainId.GANACHE, supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names }) const smartAccount = await wallet.init() - const signerAddress = await smartAccount.ethersAdapter().getSignerAddress() + const signerAddress = await smartAccount.signer.getAddress() const smartAccountAddress = smartAccount.address // Wallet would have been deployed already - const isDeployed = await smartAccount.isDeployed() /// can pass chainId here + const isDeployed = await smartAccount.isDeployed(ChainId.GANACHE) /// can pass chainId here expect(isDeployed).to.be.equal(true) console.log('balance before ', await ethnode.provider?.getBalance(smartAccountAddress)) @@ -1340,13 +1346,13 @@ describe('Wallet integration', function () { txs.push(tx2) - const smartAccountTransaction: WalletTransaction = await smartAccount.createTransactionBatch({ + const smartAccountTransaction: IWalletTransaction = await smartAccount.createTransactionBatch({ transactions: txs }) // Attach relayer before sending a transaction - const signer = await smartAccount.ethersAdapter().getSignerAddress() + const signer = await smartAccount.signer.getAddress() if (eoaSigner) { const relayer = new LocalRelayer(eoaSigner) smartAccount.setRelayer(relayer) diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index 93e54428f..7d5bcc44f 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -84,6 +84,7 @@ class ContractUtils { // this.initializeContracts(network) // } // } + // todo chirag review/add return type initializeContracts(signer: Signer, readProvider: ethers.providers.JsonRpcProvider, chaininfo: ChainConfig) { // We get the addresses using chainConfig fetched from backend node diff --git a/packages/transactions/src/transaction-manager.ts b/packages/transactions/src/transaction-manager.ts index 725be2baf..cdff7ab78 100644 --- a/packages/transactions/src/transaction-manager.ts +++ b/packages/transactions/src/transaction-manager.ts @@ -24,7 +24,7 @@ import { RefundTransactionDto } from './types' import { ethers } from 'ethers' -import EthersAdapter from '@biconomy-sdk/ethers-lib' +import EvmNetworkManager from '@biconomy-sdk/ethers-lib' import { GasEstimator } from './assets' import { Estimator } from './estimator' @@ -40,6 +40,7 @@ class TransactionManager { // chainId: ChainId // Need setters + // todo chirag // make it INodeClient nodeClient!: NodeClient estimator!: Estimator contractUtils!: ContractUtils @@ -71,23 +72,25 @@ class TransactionManager { this.estimator = new Estimator(this.nodeClient, this.contractUtils) } - setRelayer(relayer: Relayer) { + setRelayer(relayer: Relayer): TransactionManager { this.relayer = relayer return this } - async getContractUtilInstance(): Promise { + getContractUtilInstance(): ContractUtils { return this.contractUtils } - async getEstimatorInstance(): Promise { + getEstimatorInstance(): Estimator { return this.estimator } - async getNodeClient(): Promise { + // review return type + getNodeClient(): NodeClient { return this.nodeClient } + // todo chirag add return type async prepareDeployAndPayFees(chainId: ChainId, version: string) { const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response @@ -728,7 +731,7 @@ class TransactionManager { return finalWalletTx } - ethersAdapter(chainId: ChainId): EthersAdapter { + ethersAdapter(chainId: ChainId): EvmNetworkManager { return this.contractUtils.ethAdapter[chainId] } } From 8748fc1eadaa8a50bc4f7e74dbc9bef42204b76b Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 20 Oct 2022 11:03:03 +0400 Subject: [PATCH 0198/1247] dev notes --- packages/account-abstraction/src/ERC4337EthersSigner.ts | 1 + packages/account-abstraction/src/PaymasterAPI.ts | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index a419afea3..3dca47ab6 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -62,6 +62,7 @@ export class ERC4337EthersSigner extends Signer { // TODO : if isDeployed = false || skipGasLimit = true then use provided gas limit => transaction.gasLimit = gasLimit delete transaction.customData + // transaction.from = await this.smartWalletAPI.getWalletAddress() const tx: TransactionRequest = await this.populateTransaction(transaction) console.log('populate trx ', tx) await this.verifyAllNecessaryFields(tx) diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index 332dac935..494a85c5b 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -23,6 +23,10 @@ export class PaymasterAPI { userOp.signature = '0x' userOp.paymasterAndData = '0x' + // TODO + // decode infromation about userop.callData (in case of batch or single tx) in verification service + + // add dappAPIKey in headers const result: any = await sendRequest({ url: `${this.apiUrl}/signing-service`, method: HttpMethod.Post, From 8b08d3fc744e634a181147c2a3249f42d0af8869 Mon Sep 17 00:00:00 2001 From: talha Date: Thu, 20 Oct 2022 17:10:42 +0500 Subject: [PATCH 0199/1247] multi chain stable changes --- packages/smart-account/src/SmartAccount.ts | 52 ++++++++----- packages/transactions/src/contract-utils.ts | 82 ++++++--------------- 2 files changed, 53 insertions(+), 81 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 7fc5d9113..ddac2637e 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -1,5 +1,3 @@ -import EthersAdapter from '@biconomy-sdk/ethers-lib' -import { findContractAddressesByVersion } from './utils/FetchContractsInfo' import { SignTransactionDto, SendTransactionDto, @@ -37,7 +35,6 @@ import NodeClient, { } from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' -import EvmNetworkManager from '@biconomy-sdk/ethers-lib' import TransactionManager, { ContractUtils, @@ -53,8 +50,6 @@ import { import { TransactionResponse } from '@ethersproject/providers' -import { JsonRpcProvider } from '@ethersproject/providers' - // AA import { newProvider, ERC4337EthersProvider } from '@biconomy-sdk/account-abstraction' import { ethers, Signer } from 'ethers' @@ -78,6 +73,7 @@ import { ethers, Signer } from 'ethers' // }; // } + // Create an instance of Smart Account with multi-chain support. class SmartAccount { // By default latest version @@ -159,12 +155,12 @@ class SmartAccount { constructor(walletProvider: Web3Provider, config?: Partial) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } - // if ( !this.#smartAccountConfig.activeNetworkId ){ - // throw Error('active chain needs to be specified') - // } + if ( !this.#smartAccountConfig.activeNetworkId ){ + throw Error('active chain needs to be specified') + } - // if ( this.#smartAccountConfig.supportedNetworksIds.length == 0 ) - // this.#smartAccountConfig.supportedNetworksIds = [this.#smartAccountConfig.activeNetworkId] + if ( this.#smartAccountConfig.supportedNetworksIds.length == 0 ) + this.#smartAccountConfig.supportedNetworksIds = [this.#smartAccountConfig.activeNetworkId] if (config) { this.#smartAccountConfig = { ...this.#smartAccountConfig, ...config } @@ -189,7 +185,7 @@ class SmartAccount { getProviderUrl(network: ChainConfig): string { let providerUrl = this.#smartAccountConfig.providerUrlConfig?.find( - (element) => element.chainId === network.chainId + (element: ProviderUrlConfig) => element.chainId === network.chainId )?.providerUrl || '' if (!providerUrl) providerUrl = network.providerUrl @@ -217,7 +213,9 @@ class SmartAccount { version: this.DEFAULT_VERSION }) console.log('smart wallet address is ', this.address) + } + if (!this.smartAccountState ){ this.smartAccountState = { chainId: network.chainId, version: this.DEFAULT_VERSION, @@ -227,6 +225,8 @@ class SmartAccount { entryPointAddress: network.fallBackHandler[network.fallBackHandler.length - 1].address, fallbackHandlerAddress: network.walletFactory[network.walletFactory.length - 1].address } + }else if(this.DEFAULT_VERSION !== this.smartAccountState.version){ + this.smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) } this.aaProvider[network.chainId] = await newProvider( @@ -256,12 +256,12 @@ class SmartAccount { const chainConfig = (await this.nodeClient.getAllSupportedChains()).data - this.contractUtils = new ContractUtils(this.DEFAULT_VERSION, chainConfig) + this.contractUtils = new ContractUtils(chainConfig) for (let index = 0; index < this.#smartAccountConfig.supportedNetworksIds.length; index++) { const network = chainConfig.find( (element: ChainConfig) => - element.chainId === this.#smartAccountConfig.activeNetworkId + element.chainId === this.#smartAccountConfig.supportedNetworksIds[index] ) if (network) { this.chainConfig.push(network) @@ -297,7 +297,7 @@ class SmartAccount { await this.initializeContractsAtChain(chainId) - const state = await this.contractUtils.getSmartAccountState(this.smartAccountState) + const state = await this.contractUtils.getSmartAccountState(this.smartAccountState, this.DEFAULT_VERSION, this.#smartAccountConfig.activeNetworkId) let customData: Record = { isDeployed: state.isDeployed, @@ -540,7 +540,7 @@ class SmartAccount { rawTx.to = this.address rawTx.data = execTransaction.data - const state = await this.contractUtils.getSmartAccountState(this.smartAccountState) + const state = await this.contractUtils.getSmartAccountState(this.smartAccountState, this.DEFAULT_VERSION, this.#smartAccountConfig.activeNetworkId) const signedTx: SignedTransaction = { rawTx, @@ -699,15 +699,18 @@ class SmartAccount { }) } - async prepareDeployAndPayFees(chainId: ChainId = this.#smartAccountConfig.activeNetworkId) { + async prepareDeployAndPayFees(chainId: ChainId) { + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId return this.transactionManager.prepareDeployAndPayFees(chainId, this.DEFAULT_VERSION) } // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment async deployAndPayFees( - chainId: ChainId = this.#smartAccountConfig.activeNetworkId, + chainId: ChainId, feeQuote: FeeQuote ): Promise { + + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId const transaction = await this.transactionManager.deployAndPayFees( chainId, this.DEFAULT_VERSION, @@ -735,11 +738,13 @@ class SmartAccount { * @param chainId optional chainId * @returns Smart Wallet Factory instance for requested chainId */ - factory(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletFactoryContract { + factory(chainId: ChainId): SmartWalletFactoryContract { + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId return this.contractUtils.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION] } - multiSend(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): MultiSendContract { + multiSend(chainId: ChainId): MultiSendContract { + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId return this.contractUtils.multiSendContract[chainId][this.DEFAULT_VERSION] } @@ -787,7 +792,7 @@ class SmartAccount { ): Promise { chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId - return this.contractUtils.getSmartAccountState(this.smartAccountState) + return this.contractUtils.getSmartAccountState(this.smartAccountState, this.DEFAULT_VERSION, this.#smartAccountConfig.activeNetworkId) } // @@ -834,4 +839,11 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { ] } +// paymaster for mumbai +// 0xE7ec51f075e9BDca7dFF9c9C47b14C2147e931f1 + +// paymaster for goerli +// 0x50e8996670759E1FAA315eeaCcEfe0c0A043aA51 + + export default SmartAccount diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index 93e54428f..85657e6be 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -7,7 +7,7 @@ import { SmartAccountContext, SmartAccountState } from '@biconomy-sdk/core-types' -import { ChainConfig, SupportedChainsResponse } from '@biconomy-sdk/node-client' +import { ChainConfig } from '@biconomy-sdk/node-client' import { getSmartWalletFactoryContract, getMultiSendContract, @@ -35,7 +35,7 @@ class ContractUtils { // Note: Should DEFAULT_VERSION be moved here? - constructor(readonly version: string, readonly chainConfig: ChainConfig[]) { + constructor(readonly chainConfig: ChainConfig[]) { this.ethAdapter = {} this.smartWalletContract = {} this.multiSendContract = {} @@ -43,47 +43,6 @@ class ContractUtils { this.smartWalletFactoryContract = {} } - public getSmartWalletContract(chainId: number): SmartWalletContract { - return this.smartWalletContract[chainId][this.version] - } - - // public async initialize( - // supportedChains: ChainConfig[], - // config: SmartAccountConfig, - // signer: Signer - // ) { - // const chainsInfo = supportedChains - - // for (let i = 0; i < chainsInfo.length; i++) { - // const network = chainsInfo[i] - // // To keep it network agnostic - // // Note: think about events when signer needs to pay gas - - // let providerUrl = - // config.providerUrlConfig?.find((element) => element.chainId === network.chainId) - // ?.providerUrl || '' - // console.log('Used provider from config ', providerUrl) - - // if (!providerUrl) providerUrl = network.providerUrl - - // const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) - - // console.log('chain id ', network.chainId, 'readProvider ', readProvider) - - // // Instantiating EthersAdapter instance and maintain it as above mentioned class level variable - // this.ethAdapter[network.chainId] = new EvmNetworkManager({ - // ethers, - // signer, - // provider: readProvider - // }) - - // this.smartWalletFactoryContract[network.chainId] = {} - // this.smartWalletContract[network.chainId] = {} - // this.multiSendContract[network.chainId] = {} - // this.multiSendCallOnlyContract[network.chainId] = {} - // this.initializeContracts(network) - // } - // } initializeContracts(signer: Signer, readProvider: ethers.providers.JsonRpcProvider, chaininfo: ChainConfig) { // We get the addresses using chainConfig fetched from backend node @@ -134,15 +93,7 @@ class ContractUtils { } } - // TODO: params as Object - // May not need it at all if we go provider route async isDeployed(chainId: ChainId, version: string, address: string): Promise { - // Other approach : needs review and might be coming wrong - // const readProvider = new ethers.providers.JsonRpcProvider(networks[chainId].providerUrl); - // const walletCode = await readProvider.getCode(await this.getAddress(chainId)); - // return !!walletCode && walletCode !== '0x' - - // but below works return await this.smartWalletFactoryContract[chainId][version].isWalletExist(address) } @@ -170,32 +121,41 @@ class ContractUtils { async getSmartAccountState( - smartAccountState: SmartAccountState + smartAccountState: SmartAccountState, + currentVersion?: string, + currentChainId?: ChainId ): Promise { let {address, owner, chainId, version} = smartAccountState - version = version ? version : this.version + if (!currentVersion){ + currentVersion = version + } + if (!currentChainId){ + currentChainId = chainId + } - if (this.version !== version) { + if (!this.smartAccountState){ + this.smartAccountState = smartAccountState + } + else if(this.smartAccountState.version !== currentVersion || this.smartAccountState.chainId !== currentChainId) { this.smartAccountState.address = await this.smartWalletFactoryContract[chainId][ version ].getAddressForCounterfactualWallet(owner, 0) - this.smartAccountState.isDeployed = await this.isDeployed(chainId, version, address) // could be set as state in init + this.smartAccountState.version = currentVersion + this.smartAccountState.chainId = currentChainId + + this.smartAccountState.isDeployed = await this.isDeployed(this.smartAccountState.chainId, this.smartAccountState.version, address) // could be set as state in init const contractsByVersion = findContractAddressesByVersion( - version, - chainId, + this.smartAccountState.version, + this.smartAccountState.chainId, this.chainConfig ) this.smartAccountState.entryPointAddress = contractsByVersion.entryPointAddress || '', this.smartAccountState.fallbackHandlerAddress = contractsByVersion.fallBackHandlerAddress || '' } - if (!this.smartAccountState){ - this.smartAccountState = smartAccountState - } - return this.smartAccountState } } From 081730f82a0876d23fb32996f042ae81f1f058c4 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 20 Oct 2022 18:17:51 +0400 Subject: [PATCH 0200/1247] aa test cases draft --- packages/account-abstraction/package.json | 1 + .../src/DeterministicDeployer.ts | 102 ++++++++++++++++++ .../test/0-deterministicDeployer.test.ts | 29 ++++- .../test/1-SimpleWalletAPI.test.ts | 90 ---------------- .../test/2-ERC4337EthersSigner.test.ts | 76 ------------- packages/account-abstraction/tsconfig.json | 2 +- .../common/contracts/test/SampleRecipient.sol | 21 ++++ .../contracts/test/SingletonFactory.sol | 26 +++++ packages/common/package.json | 2 +- packages/common/tsconfig.json | 2 +- 10 files changed, 179 insertions(+), 172 deletions(-) create mode 100644 packages/account-abstraction/src/DeterministicDeployer.ts delete mode 100644 packages/account-abstraction/test/1-SimpleWalletAPI.test.ts delete mode 100644 packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts create mode 100644 packages/common/contracts/test/SampleRecipient.sol create mode 100644 packages/common/contracts/test/SingletonFactory.sol diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index 4c3f484a0..f07a19b6b 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -27,6 +27,7 @@ "lint": "eslint -f unix .", "lint-fix": "eslint -f unix . --fix", "build": "hardhat compile && yarn typechain && tsc", + "test": "hardhat test", "hardhat-test": "hardhat test", "tsc": "tsc", "watch-tsc": "tsc -w --preserveWatchOutput" diff --git a/packages/account-abstraction/src/DeterministicDeployer.ts b/packages/account-abstraction/src/DeterministicDeployer.ts new file mode 100644 index 000000000..b5da9ae55 --- /dev/null +++ b/packages/account-abstraction/src/DeterministicDeployer.ts @@ -0,0 +1,102 @@ +import { ethers } from 'hardhat' +import { BigNumber, BigNumberish } from 'ethers' +import { hexConcat, hexlify, hexZeroPad, keccak256 } from 'ethers/lib/utils' +import { TransactionRequest } from '@ethersproject/abstract-provider' + +/** + * wrapper class for Arachnid's deterministic deployer + * (deterministic deployer used by 'hardhat-deployer'. generates the same addresses as "hardhat-deploy") + */ +export class DeterministicDeployer { + /** + * return the address this code will get deployed to. + * @param ctrCode constructor code to pass to CREATE2 + * @param salt optional salt. defaults to zero + */ + static async getAddress (ctrCode: string, salt: BigNumberish = 0): Promise { + return await DeterministicDeployer.instance.getDeterministicDeployAddress(ctrCode, salt) + } + + /** + * deploy the contract, unless already deployed + * @param ctrCode constructor code to pass to CREATE2 + * @param salt optional salt. defaults to zero + * @return the deployed address + */ + static async deploy (ctrCode: string, salt: BigNumberish = 0): Promise { + return await DeterministicDeployer.instance.deterministicDeploy(ctrCode, salt) + } + + // from: https://github.com/Arachnid/deterministic-deployment-proxy + proxyAddress = '0x4e59b44847b379578588920ca78fbf26c0b4956c' + deploymentTransaction = '0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222' + deploymentSignerAddress = '0x3fab184622dc19b6109349b94811493bf2a45362' + deploymentGasPrice = 100e9 + deploymentGasLimit = 100000 + + constructor (readonly provider = ethers.provider) { + } + + async isContractDeployed (address: string): Promise { + return await this.provider.getCode(address).then(code => code.length > 2) + } + + async isDeployerDeployed (): Promise { + return await this.isContractDeployed(this.proxyAddress) + } + + async deployDeployer (): Promise { + if (await this.isContractDeployed(this.proxyAddress)) { + return + } + const bal = await this.provider.getBalance(this.deploymentSignerAddress) + const neededBalance = BigNumber.from(this.deploymentGasLimit).mul(this.deploymentGasPrice) + const signer = this.provider.getSigner() + if (bal.lt(neededBalance)) { + await signer.sendTransaction({ + to: this.deploymentSignerAddress, + value: neededBalance, + gasLimit: this.deploymentGasLimit + }) + } + await this.provider.send('eth_sendRawTransaction', [this.deploymentTransaction]) + if (!await this.isContractDeployed(this.proxyAddress)) { + throw new Error('raw TX didn\'t deploy deployer!') + } + } + + async getDeployTransaction (ctrCode: string, salt: BigNumberish = 0): Promise { + await this.deployDeployer() + const saltEncoded = hexZeroPad(hexlify(salt), 32) + return { + to: this.proxyAddress, + data: hexConcat([ + saltEncoded, + ctrCode]) + } + } + + async getDeterministicDeployAddress (ctrCode: string, salt: BigNumberish = 0): Promise { + // this method works only before the contract is already deployed: + // return await this.provider.call(await this.getDeployTransaction(ctrCode, salt)) + const saltEncoded = hexZeroPad(hexlify(salt), 32) + + return '0x' + keccak256(hexConcat([ + '0xff', + this.proxyAddress, + saltEncoded, + keccak256(ctrCode) + ])).slice(-40) + } + + async deterministicDeploy (ctrCode: string, salt: BigNumberish = 0): Promise { + const addr = await this.getDeterministicDeployAddress(ctrCode, salt) + if (!await this.isContractDeployed(addr)) { + await this.provider.getSigner().sendTransaction( + await this.getDeployTransaction(ctrCode, salt)) + } + return addr + } + + static instance = new DeterministicDeployer() +} diff --git a/packages/account-abstraction/test/0-deterministicDeployer.test.ts b/packages/account-abstraction/test/0-deterministicDeployer.test.ts index 305b8e7f1..4c559451d 100644 --- a/packages/account-abstraction/test/0-deterministicDeployer.test.ts +++ b/packages/account-abstraction/test/0-deterministicDeployer.test.ts @@ -1,12 +1,34 @@ import { expect } from 'chai' -import { SampleRecipient__factory } from '@biconomy-sdk/common/dist/src/types' -import { ethers } from 'hardhat' +import { SmartWalletFactoryContractV101 } from '@biconomy-sdk/ethers-lib' +import hardhat from 'hardhat' import { hexValue } from 'ethers/lib/utils' import { DeterministicDeployer } from '../src/DeterministicDeployer' +import { ethers, Signer as AbstractSigner } from 'ethers' +import { + Web3Provider +} from '@ethersproject/providers' + const deployer = DeterministicDeployer.instance +type EthereumInstance = { + chainId?: number + provider?: Web3Provider + signer?: AbstractSigner +} + describe('#deterministicDeployer', () => { + const ethnode: EthereumInstance = {} + + before(async () => { + + + // Provider from hardhat without a server instance + ethnode.provider = new ethers.providers.Web3Provider(hardhat.network.provider.send) + ethnode.signer = ethnode.provider?.getSigner() + ethnode.chainId = 1337 + }) + it('deploy deployer', async () => { expect(await deployer.isDeployerDeployed()).to.equal(false) await deployer.deployDeployer() @@ -16,7 +38,8 @@ describe('#deterministicDeployer', () => { await deployer.deployDeployer() }) it('should deploy at given address', async () => { - const ctr = hexValue(new SampleRecipient__factory(ethers.provider.getSigner()).getDeployTransaction().data!) + const baseWallet = "0x548c6B8acf4f1396E915ffdC521F37D152DFB5A4" + const ctr = hexValue(new SmartWalletFactoryContractV101().getDeployTransaction(baseWallet).data!) const addr = await DeterministicDeployer.getAddress(ctr) expect(await deployer.isContractDeployed(addr)).to.equal(false) await DeterministicDeployer.deploy(ctr) diff --git a/packages/account-abstraction/test/1-SimpleWalletAPI.test.ts b/packages/account-abstraction/test/1-SimpleWalletAPI.test.ts deleted file mode 100644 index d70edff1d..000000000 --- a/packages/account-abstraction/test/1-SimpleWalletAPI.test.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { - EntryPoint, - EntryPoint__factory, - SimpleWalletDeployer__factory, - UserOperationStruct -} from '@account-abstraction/contracts' -import { Wallet } from 'ethers' -import { parseEther } from 'ethers/lib/utils' -import { expect } from 'chai' -import { anyValue } from '@nomicfoundation/hardhat-chai-matchers/withArgs' -import { ethers } from 'hardhat' -import { SimpleWalletAPI } from '../src' -import { SampleRecipient, SampleRecipient__factory } from '@biconomy-sdk/common/dist/src/types' -import { DeterministicDeployer } from '../src/DeterministicDeployer' - -const provider = ethers.provider -const signer = provider.getSigner() -describe('SimpleWalletAPI', () => { - let owner: Wallet - let api: SimpleWalletAPI - let entryPoint: EntryPoint - let beneficiary: string - let recipient: SampleRecipient - let walletAddress: string - let walletDeployed = false - before('init', async () => { - entryPoint = await new EntryPoint__factory(signer).deploy(1, 1) - beneficiary = await signer.getAddress() - - recipient = await new SampleRecipient__factory(signer).deploy() - owner = Wallet.createRandom() - const factoryAddress = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) - api = new SimpleWalletAPI( - provider, - entryPoint.address, - undefined, - owner, - factoryAddress - ) - }) - - it('#getRequestId should match entryPoint.getRequestId', async function () { - const userOp: UserOperationStruct = { - sender: '0x'.padEnd(42, '1'), - nonce: 2, - initCode: '0x3333', - callData: '0x4444', - callGasLimit: 5, - verificationGasLimit: 6, - preVerificationGas: 7, - maxFeePerGas: 8, - maxPriorityFeePerGas: 9, - paymasterAndData: '0xaaaaaa', - signature: '0xbbbb' - } - const hash = await api.getRequestId(userOp) - const epHash = await entryPoint.getRequestId(userOp) - expect(hash).to.equal(epHash) - }) - it('should deploy to counterfactual address', async () => { - walletAddress = await api.getWalletAddress() - expect(await provider.getCode(walletAddress).then(code => code.length)).to.equal(2) - - await signer.sendTransaction({ - to: walletAddress, - value: parseEther('0.1') - }) - const op = await api.createSignedUserOp({ - target: recipient.address, - data: recipient.interface.encodeFunctionData('something', ['hello']) - }) - - await expect(entryPoint.handleOps([op], beneficiary)).to.emit(recipient, 'Sender') - .withArgs(anyValue, walletAddress, 'hello') - expect(await provider.getCode(walletAddress).then(code => code.length)).to.greaterThan(1000) - walletDeployed = true - }) - it('should use wallet API after creation without a factory', async function () { - if (!walletDeployed) { - this.skip() - } - const api1 = new SimpleWalletAPI(provider, entryPoint.address, walletAddress, owner) - const op1 = await api1.createSignedUserOp({ - target: recipient.address, - data: recipient.interface.encodeFunctionData('something', ['world']) - }) - await expect(entryPoint.handleOps([op1], beneficiary)).to.emit(recipient, 'Sender') - .withArgs(anyValue, walletAddress, 'world') - }) -}) diff --git a/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts b/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts deleted file mode 100644 index 23496fbbe..000000000 --- a/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { SampleRecipient, SampleRecipient__factory } from '@biconomy-sdk/common/dist/src/types' -import { ethers } from 'hardhat' -import { ClientConfig, ERC4337EthersProvider, newProvider } from '../src' -import { EntryPoint, EntryPoint__factory } from '@account-abstraction/contracts' -import { expect } from 'chai' -import { parseEther } from 'ethers/lib/utils' -import { Wallet } from 'ethers' -import { anyValue } from '@nomicfoundation/hardhat-chai-matchers/withArgs' - -const provider = ethers.provider -const signer = provider.getSigner() - -describe('ERC4337EthersSigner, Provider', function () { - let recipient: SampleRecipient - let aaProvider: ERC4337EthersProvider - let entryPoint: EntryPoint - before('init', async () => { - const deployRecipient = await new SampleRecipient__factory(signer).deploy() - entryPoint = await new EntryPoint__factory(signer).deploy(1, 1) - const config: ClientConfig = { - chainId: await provider.getNetwork().then(net => net.chainId), - entryPointAddress: entryPoint.address, - bundlerUrl: '' - } - const aasigner = Wallet.createRandom() - aaProvider = await newProvider(provider, config, aasigner) - - const beneficiary = provider.getSigner().getAddress() - // for testing: bypass sending through a bundler, and send directly to our entrypoint.. - aaProvider.httpRpcClient.sendUserOpToBundler = async (userOp) => { - try { - await entryPoint.handleOps([userOp], beneficiary) - } catch (e: any) { - // doesn't report error unless called with callStatic - await entryPoint.callStatic.handleOps([userOp], beneficiary).catch((e: any) => { - // eslint-disable-next-line - const message = e.errorArgs != null ? `${e.errorName}(${e.errorArgs.join(',')})` : e.message - throw new Error(message) - }) - } - } - recipient = deployRecipient.connect(aaProvider.getSigner()) - }) - - it('should fail to send before funding', async () => { - try { - await recipient.something('hello', { gasLimit: 1e6 }) - throw new Error('should revert') - } catch (e: any) { - expect(e.message).to.eq('FailedOp(0,0x0000000000000000000000000000000000000000,wallet didn\'t pay prefund)') - } - }) - - it('should use ERC-4337 Signer and Provider to send the UserOperation to the bundler', async function () { - const walletAddress = await aaProvider.getSigner().getAddress() - await signer.sendTransaction({ - to: walletAddress, - value: parseEther('0.1') - }) - const ret = await recipient.something('hello') - await expect(ret).to.emit(recipient, 'Sender') - .withArgs(anyValue, walletAddress, 'hello') - }) - - it('should revert if on-chain userOp execution reverts', async function () { - // specifying gas, so that estimateGas won't revert.. - const ret = await recipient.reverting({ gasLimit: 10000 }) - - try { - await ret.wait() - throw new Error('expected to revert') - } catch (e: any) { - expect(e.message).to.match(/test revert/) - } - }) -}) diff --git a/packages/account-abstraction/tsconfig.json b/packages/account-abstraction/tsconfig.json index 9022d270b..9e736282a 100644 --- a/packages/account-abstraction/tsconfig.json +++ b/packages/account-abstraction/tsconfig.json @@ -6,7 +6,7 @@ "baseUrl": "src" }, "exclude": ["dist", "node_modules"], - "include": ["src"], + "include": ["./test", "./src", "./scripts"],//only the "scripts" part. "files": ["./hardhat.config.ts"] } \ No newline at end of file diff --git a/packages/common/contracts/test/SampleRecipient.sol b/packages/common/contracts/test/SampleRecipient.sol new file mode 100644 index 000000000..7110710cd --- /dev/null +++ b/packages/common/contracts/test/SampleRecipient.sol @@ -0,0 +1,21 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +// TODO: get hardhat types from '@account-abstraction' package directly +// only to import the file in hardhat compilation +import "@account-abstraction/contracts/samples/SimpleWallet.sol"; + +contract SampleRecipient { + + SimpleWallet wallet; + + event Sender(address txOrigin, address msgSender, string message); + + function something(string memory message) public { + emit Sender(tx.origin, msg.sender, message); + } + + function reverting() public { + revert( "test revert"); + } +} diff --git a/packages/common/contracts/test/SingletonFactory.sol b/packages/common/contracts/test/SingletonFactory.sol new file mode 100644 index 000000000..9a2fab5a3 --- /dev/null +++ b/packages/common/contracts/test/SingletonFactory.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.15; + +/** + * @title Singleton Factory (EIP-2470) + * @notice Exposes CREATE2 (EIP-1014) to deploy bytecode on deterministic addresses based on initialization code and salt. + * @author Ricardo Guilherme Schmidt (Status Research & Development GmbH) + */ +contract SingletonFactory { + /** + * @notice Deploys `_initCode` using `_salt` for defining the deterministic address. + * @param _initCode Initialization code. + * @param _salt Arbitrary value to modify resulting address. + * @return createdContract Created contract address. + */ + function deploy(bytes memory _initCode, bytes32 _salt) + public + returns (address payable createdContract) + { + assembly { + createdContract := create2(0, add(_initCode, 0x20), mload(_initCode), _salt) + } + } +} +// IV is a value changed to generate the vanity address. +// IV: 6583047 diff --git a/packages/common/package.json b/packages/common/package.json index 00d0f6ecb..a90782a0f 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -29,7 +29,7 @@ "watch-tsc": "tsc -w --preserveWatchOutput", "tsc": "tsc", "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build": "rimraf dist && tsc && hardhat compile", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index cd15f5c0a..f8295f226 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -5,6 +5,6 @@ "outDir": "dist", "baseUrl": "src" }, - "include": ["src"] + "include": ["./**/*.ts"] } \ No newline at end of file From 9fcb5b106519b1d8fe658ab0924d722b0d102351 Mon Sep 17 00:00:00 2001 From: Aman Raj <42104907+AmanRaj1608@users.noreply.github.com> Date: Thu, 20 Oct 2022 22:08:52 +0530 Subject: [PATCH 0201/1247] feat: smart account signer --- packages/smart-account/src/SmartAccount.ts | 38 +++--- packages/smart-account/src/signers/Signer.ts | 4 +- .../src/signers/SmartAccountSigner.ts | 112 ++++++++---------- 3 files changed, 68 insertions(+), 86 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 67311d6db..15f9a2e22 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -29,6 +29,7 @@ import { SmartAccountConfig, IMetaTransaction } from '@biconomy-sdk/core-types' +import { TypedDataSigner } from '@ethersproject/abstract-signer' import NodeClient, { ProviderUrlConfig, ChainConfig, @@ -41,7 +42,7 @@ import EvmNetworkManager from '@biconomy-sdk/ethers-lib' import TransactionManager, { ContractUtils, - smartAccountSignMessage + smartAccountSignTypedData } from '@biconomy-sdk/transactions' import { BalancesDto } from '@biconomy-sdk/node-client' @@ -52,8 +53,7 @@ import { } from '@biconomy-sdk/node-client' import { TransactionResponse } from '@ethersproject/providers' - -import { JsonRpcProvider } from '@ethersproject/providers' +import { SmartAccountSigner } from './signers/SmartAccountSigner' // AA import { newProvider, ERC4337EthersProvider } from '@biconomy-sdk/account-abstraction' @@ -103,7 +103,7 @@ class SmartAccount { aaProvider!: { [chainId: number]: ERC4337EthersProvider } // Ideally not JsonRpcSigner but extended signer // Also the original EOA signer - signer!: Signer + signer!: Signer & TypedDataSigner // We may have different signer for ERC4337 nodeClient!: NodeClient @@ -177,8 +177,8 @@ class SmartAccount { // Should not break if we make this wallet connected provider optional (We'd have JsonRpcProvider / JsonRpcSender) this.provider = walletProvider - this.signer = walletProvider.getSigner() - // Refer to SmartAccountSigner from eth-bogota branch + // TODO:: Allow original signer to be passed and preserve + this.signer = new SmartAccountSigner(this.provider) this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) this.relayer = new RestRelayer({ url: this.#smartAccountConfig.relayer_url }) @@ -210,7 +210,7 @@ class SmartAccount { const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) await this.contractUtils.initializeContracts(this.signer, readProvider, network) - if (!this.address){ + if (!this.address) { this.address = await this.getAddress({ index: 0, chainId: network.chainId, @@ -481,7 +481,7 @@ class SmartAccount { let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) // TODO - rename and organize utils - const { signer, data } = await smartAccountSignMessage(this.signer, walletContract, tx, chainId) + const { signer, data } = await smartAccountSignTypedData(this.signer, walletContract, tx, chainId) let signature = '0x' signature += data.slice(2) return signature @@ -787,18 +787,18 @@ class SmartAccount { ].isWalletExist(this.address) } - /** - * @review for owner - * @param chainId requested chain : default is active chain - * @returns object containing infromation (owner, relevant contract addresses, isDeployed) about Smart Account for requested chain - */ - async getSmartAccountState( - chainId: ChainId - ): Promise { + /** + * @review for owner + * @param chainId requested chain : default is active chain + * @returns object containing infromation (owner, relevant contract addresses, isDeployed) about Smart Account for requested chain + */ + async getSmartAccountState( + chainId: ChainId + ): Promise { - chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId - return this.contractUtils.getSmartAccountState(this.smartAccountState) - } + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + return this.contractUtils.getSmartAccountState(this.smartAccountState) + } // /** diff --git a/packages/smart-account/src/signers/Signer.ts b/packages/smart-account/src/signers/Signer.ts index 7555673eb..2b11fa824 100644 --- a/packages/smart-account/src/signers/Signer.ts +++ b/packages/smart-account/src/signers/Signer.ts @@ -1,4 +1,4 @@ -import { ethers, Signer as AbstractSigner } from 'ethers' +import { ethers, Signer as EthersSigner } from 'ethers' import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer' // ChainId , SmartAccountContext, SmartAccountConfig, SmartAccountState from @biconomy-sdk/core-types @@ -11,7 +11,7 @@ import { BytesLike } from '@ethersproject/bytes' import { Deferrable } from 'ethers/lib/utils' import { TransactionRequest } from '@ethersproject/providers' -export abstract class Signer extends AbstractSigner { +export abstract class Signer extends EthersSigner { abstract getProvider(chainId?: number): Promise // Review abstract getRelayer(chainId?: number): Promise diff --git a/packages/smart-account/src/signers/SmartAccountSigner.ts b/packages/smart-account/src/signers/SmartAccountSigner.ts index 956899824..7a94668f3 100644 --- a/packages/smart-account/src/signers/SmartAccountSigner.ts +++ b/packages/smart-account/src/signers/SmartAccountSigner.ts @@ -1,47 +1,34 @@ -import { ethers } from 'ethers' -import { BytesLike, Bytes } from '@ethersproject/bytes' -import { - Web3Provider, - ExternalProvider, - JsonRpcProvider, - Networkish -} from '@ethersproject/providers' +import { BigNumber, ethers, Signer as EthersSigner } from 'ethers' +import { BytesLike } from '@ethersproject/bytes' +import { JsonRpcProvider } from '@ethersproject/providers' import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer' -import { Signer } from './Signer' - -import { Signer as EthersSigner } from '@ethersproject/abstract-signer' - -// ChainId , SmartAccountContext, SmartAccountConfig, SmartAccountState from @biconomy-sdk/core-types -import { ChainId, SendTransactionDto, SignTransactionDto } from '@biconomy-sdk/core-types' +import { ChainId, SignTransactionDto } from '@biconomy-sdk/core-types' // Might as well be RpcRelayer -import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' - +// import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' import { Deferrable } from 'ethers/lib/utils' import { TransactionRequest, TransactionResponse } from '@ethersproject/providers' -// Other ways : // Signer needs config, originalSigner, way to dispatch to rpc-relayer, smart-account-apis +export class SmartAccountSigner extends EthersSigner implements TypedDataSigner { + readonly provider: JsonRpcProvider + // readonly sender: JsonRpcSender + readonly defaultChainId: number | undefined -export class SmartAccountSigner extends Signer implements TypedDataSigner { - // Should be SmartAccountProvider (which makes me want to merge SmartAccountSigner in SmartAccountProvider file) - readonly provider: Web3Provider - // Review - readonly defaultChainId?: number - - constructor(provider: Web3Provider, defaultChainId?: number) { + constructor(provider: JsonRpcProvider, defaultChainId?: number) { super() this.provider = provider this.defaultChainId = defaultChainId + // this.sender = new JsonRpcSender(provider) } _address!: string + // relayer: Relayer // Might have // _context: not smartAccountContext but the addresses of contracts from SmartAccountState - // // TBD - private _providers: { [key: number]: Web3Provider } = {} + // private _providers: { [key: number]: JsonRpcProvider } = {} /** * Note: When you do getAddress it could use provider.getAddress / provider.getSmartAccountAddress or directly access SmartAccountAPI @@ -53,25 +40,28 @@ export class SmartAccountSigner extends Signer implements TypedDataSigner { return ethers.utils.getAddress(this._address) } - async signTransaction(signTransactionDto: SignTransactionDto): Promise { - console.log(signTransactionDto) - const signature = '' - return signature + async getChainId(): Promise { + return (await this.provider.getNetwork()).chainId } - // getProvider - - getRelayer(chainId?: number): Promise { - console.log(chainId) - throw new Error('TODO') + async signTransaction(transaction: Deferrable): Promise { + if (!this.provider) { + throw new Error('missing provider') + } + const signature: any = await this.provider.send('eth_signTransaction', [transaction]) + return signature } - // Review - // getProvider returns a Web3Provider instance for the current chain. - // Note that this method is bound to a particular chain + // getRelayer(chainId?: number): Promise { + // console.log(chainId) + // throw new Error('TODO') + // } + // Review getProvider + // getProvider returns a JsonRpcProvider instance for the current chain. + // Note that this method is bound to a particular chain // Review for the provider we want here - async getProvider(chainId?: number): Promise { + async getProvider(chainId?: number): Promise { if (chainId) { const currentChainId = await this.getChainId() if (currentChainId !== chainId) { @@ -84,6 +74,7 @@ export class SmartAccountSigner extends Signer implements TypedDataSigner { } // handle compatibility with smart account's intent + // this should send the tx to relayers which will relay to network. async sendTransaction(transaction: Deferrable): Promise { console.log(transaction) const txHash = '' @@ -94,15 +85,13 @@ export class SmartAccountSigner extends Signer implements TypedDataSigner { // signMessage matches implementation from ethers JsonRpcSigner for compatibility, but with // multi-chain support. - async signMessage(message: BytesLike, chainId?: ChainId): Promise { - console.log(chainId) - - // TODO: study. sender JsonRpcRouter sender - // const provider = await this.getSender(Number(chainId) || this.defaultChainId) - + async signMessage(message: BytesLike): Promise { + if (!this.provider) { + throw new Error('missing provider') + } const data = typeof message === 'string' ? ethers.utils.toUtf8Bytes(message) : message const address = await this.getAddress() - return await this.provider!.send('personal_sign', [ethers.utils.hexlify(data), address]) + return await this.provider.send('personal_sign', [ethers.utils.hexlify(data), address]) } // signTypedData matches implementation from ethers JsonRpcSigner for compatibility, but with @@ -114,10 +103,15 @@ export class SmartAccountSigner extends Signer implements TypedDataSigner { message: Record, chainId?: ChainId ): Promise { - console.log(chainId) + const activeChainId = chainId ? chainId : await this.getChainId() + const domainChainId = domain.chainId ? BigNumber.from(domain.chainId).toNumber() : undefined + if (domainChainId && domainChainId !== activeChainId) { + throw new Error('Domain chainId is different from active chainId.') + } + return await this.provider.send('eth_signTypedData_v4', [ await this.getAddress(), - ethers.utils._TypedDataEncoder.getPayload(domain, types, message) + JSON.stringify(ethers.utils._TypedDataEncoder.getPayload(domain, types, message)) ]) } @@ -134,22 +128,10 @@ export class SmartAccountSigner extends Signer implements TypedDataSigner { throw new Error('connectUnchecked is unsupported') } - connect(provider: ethers.providers.Provider): ethers.providers.JsonRpcSigner { - console.log(provider) - throw new Error('unsupported: cannot alter JSON-RPC Signer connection') + connect(provider: JsonRpcProvider): SmartAccountSigner { + // if (provider) { + // return new SmartAccountSigner(provider) + // } + throw new Error('unsupported: cannot get JSON-RPC Signer connection') } } - -// Other ways... -/*export class SmartAccountSigner extends EthersSigner { - - // Needs httpRpcClient to sendSCWTransactionToRelayer - constructor() { - - } - - // Note: Since we're following this interface I feel createTransaction (from TransactionManager) should be part of this - async sendTransaction (transaction: Deferrable): Promise { - - } -}*/ From 614dd3481e3ad445e329e7fa32510da822dc8555 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 21 Oct 2022 22:22:12 +0400 Subject: [PATCH 0202/1247] contracts factory name convention update --- .../test/0-deterministicDeployer.test.ts | 4 ++-- .../ethers-lib/src/contracts/contractInstancesEthers.ts | 8 ++++---- packages/ethers-lib/src/index.ts | 5 +++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/account-abstraction/test/0-deterministicDeployer.test.ts b/packages/account-abstraction/test/0-deterministicDeployer.test.ts index 4c559451d..53f15d39b 100644 --- a/packages/account-abstraction/test/0-deterministicDeployer.test.ts +++ b/packages/account-abstraction/test/0-deterministicDeployer.test.ts @@ -1,5 +1,5 @@ import { expect } from 'chai' -import { SmartWalletFactoryContractV101 } from '@biconomy-sdk/ethers-lib' +import { SmartWalletFactoryFactoryContractV101 } from '@biconomy-sdk/ethers-lib' import hardhat from 'hardhat' import { hexValue } from 'ethers/lib/utils' import { DeterministicDeployer } from '../src/DeterministicDeployer' @@ -39,7 +39,7 @@ describe('#deterministicDeployer', () => { }) it('should deploy at given address', async () => { const baseWallet = "0x548c6B8acf4f1396E915ffdC521F37D152DFB5A4" - const ctr = hexValue(new SmartWalletFactoryContractV101().getDeployTransaction(baseWallet).data!) + const ctr = hexValue(new SmartWalletFactoryFactoryContractV101().getDeployTransaction(baseWallet).data!) const addr = await DeterministicDeployer.getAddress(ctr) expect(await deployer.isContractDeployed(addr)).to.equal(false) await DeterministicDeployer.deploy(ctr) diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index 2176da4b5..b020921fd 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -7,8 +7,8 @@ import { MultiSendContractV101__factory as MultiSendContractV101 } from '../../t import { MultiSendCallOnlyContractV100__factory as MultiSendCallOnlyContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/MultiSendCallOnlyContractV100__factory' import { MultiSendCallOnlyContractV101__factory as MultiSendCallOnlyContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/MultiSendCallOnlyContractV101__factory' -import { SmartWalletFactoryContractV100__factory as SmartWalletFactoryContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFactoryContractV100__factory' -import { SmartWalletFactoryContractV101__factory as SmartWalletFactoryContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletFactoryContractV101__factory' +import { SmartWalletFactoryContractV100__factory as SmartWalletFactoryFactoryContractV100 } from '../../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFactoryContractV100__factory' +import { SmartWalletFactoryContractV101__factory as SmartWalletFactoryFactoryContractV101 } from '../../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletFactoryContractV101__factory' import SmartWalletContractEthers_v1_0_0 from './SmartWallet/v1.0.0/SmartWalletContractEthers' import SmartWalletContractEthers_v1_0_1 from './SmartWallet/v1.0.1/SmartWalletContractEthers' @@ -94,10 +94,10 @@ export function getSmartWalletFactoryContractInstance( switch (smartAccountVersion) { case '1.0.0': - walletFactoryContract = SmartWalletFactoryContractV100.connect(contractAddress, provider) + walletFactoryContract = SmartWalletFactoryFactoryContractV100.connect(contractAddress, provider) return new SmartWalletFacoryContractEthers_v1_0_0(walletFactoryContract) case '1.0.1': - walletFactoryContract = SmartWalletFactoryContractV101.connect(contractAddress, provider) + walletFactoryContract = SmartWalletFactoryFactoryContractV101.connect(contractAddress, provider) return new SmartWalletFacoryContractEthers_v1_0_1(walletFactoryContract) } } diff --git a/packages/ethers-lib/src/index.ts b/packages/ethers-lib/src/index.ts index 52636aeca..5c0eaf54f 100644 --- a/packages/ethers-lib/src/index.ts +++ b/packages/ethers-lib/src/index.ts @@ -10,8 +10,8 @@ export { MultiSendContractV101__factory as MultiSendContractV101 } from '../type export { MultiSendCallOnlyContractV100__factory as MultiSendCallOnlyContractV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/MultiSendCallOnlyContractV100__factory' export { MultiSendCallOnlyContractV101__factory as MultiSendCallOnlyContractV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/MultiSendCallOnlyContractV101__factory' -export { SmartWalletFactoryContractV100__factory as SmartWalletFactoryContractV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFactoryContractV100__factory' -export { SmartWalletFactoryContractV101__factory as SmartWalletFactoryContractV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletFactoryContractV101__factory' +export { SmartWalletFactoryContractV100__factory as SmartWalletFactoryFactoryContractV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletFactoryContractV100__factory' +export { SmartWalletFactoryContractV101__factory as SmartWalletFactoryFactoryContractV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletFactoryContractV101__factory' export { EntryPointContractV100__factory as EntryPointFactoryContractV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/EntryPointContractV100__factory' export { EntryPointContractV101__factory as EntryPointFactoryContractV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/EntryPointContractV101__factory' @@ -20,6 +20,7 @@ export { EntryPointContractV100 } from '../typechain/src/ethers-v5/v1.0.0/EntryP export { EntryPointContractV101 } from '../typechain/src/ethers-v5/v1.0.1/EntryPointContractV101' export { SmartWalletContractV101 } from '../typechain/src/ethers-v5/v1.0.1/SmartWalletContractV101' +export { SmartWalletContractV100 } from '../typechain/src/ethers-v5/v1.0.0/SmartWalletContractV100' import EntryPointEthersContract_v1_0_0 from './contracts/EntryPointContract/v1.0.0/EntryPointEthersContract' import EntryPointEthersContract_v1_0_1 from './contracts/EntryPointContract/v1.0.1/EntryPointEthersContract' From b7e9da9e92f4ca252b5518fec8b917d6770159d4 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Sun, 23 Oct 2022 16:28:57 +0400 Subject: [PATCH 0203/1247] fix smart account api test case + update name and import in ethers lib ref factories --- package.json | 2 +- .../account-abstraction/src/BaseWalletAPI.ts | 11 +- .../account-abstraction/src/PaymasterAPI.ts | 8 + .../src/SmartAccountAPI.ts | 6 +- .../test/1-SmartAccountAPI.test.ts | 159 ++++++++++++++++++ packages/ethers-lib/src/index.ts | 7 +- 6 files changed, 180 insertions(+), 13 deletions(-) create mode 100644 packages/account-abstraction/test/1-SmartAccountAPI.test.ts diff --git a/package.json b/package.json index a681d02d3..5167447db 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.5.4", - "nx": "^15.0.0", + "nx": "^15.0.1", "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1" diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index a6343eaa1..89eb8c625 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -3,7 +3,7 @@ import { Provider } from '@ethersproject/providers' import { UserOperation } from '@biconomy-sdk/core-types' import { ClientConfig } from './ClientConfig' -import { EntryPointContractV101, SmartWalletFactoryContract101, SmartWalletContractV101 } from '@biconomy-sdk/ethers-lib' +import { EntryPointContractV101, SmartWalletFactoryV101, SmartWalletContractV101 } from '@biconomy-sdk/ethers-lib' import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp' import { resolveProperties } from 'ethers/lib/utils' import { PaymasterAPI } from './PaymasterAPI' @@ -65,7 +65,7 @@ export abstract class BaseWalletAPI { // based on provider chainId we maintain smartWalletContract.. async _getWalletContract(): Promise { if (this.walletContract == null) { - this.walletContract = SmartWalletFactoryContract101.connect(await this.getWalletAddress(), this.provider) + this.walletContract = SmartWalletFactoryV101.connect(await this.getWalletAddress(), this.provider) } return this.walletContract } @@ -152,12 +152,11 @@ export abstract class BaseWalletAPI { * actual overhead depends on the expected bundle size */ async getPreVerificationGas(userOp: Partial): Promise { - console.log(userOp); + console.log(userOp); const bundleSize = 1; const cost = 21000; // TODO: calculate calldata cost const preVerificationGas = Math.floor(cost / bundleSize) - console.log('preVerificationGas ', preVerificationGas); console.log('preVerificationGas ', Math.floor(preVerificationGas)); return Math.floor(preVerificationGas); } @@ -244,7 +243,9 @@ export abstract class BaseWalletAPI { let verificationGasLimit = BigNumber.from(await this.getVerificationGasLimit()) if (initCode.length > 2) { // add creation to required verification gas - const initGas = await this.entryPoint.estimateGas.getSenderAddress(initCode) + // using entry point static for gas estimation + const entryPointStatic = this.entryPoint.connect(ZERO_ADDRESS) + const initGas = await entryPointStatic.estimateGas.getSenderAddress(initCode, { from: ZERO_ADDRESS} ) verificationGasLimit = verificationGasLimit.add(initGas) } diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index 494a85c5b..4812abc6c 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -23,6 +23,14 @@ export class PaymasterAPI { userOp.signature = '0x' userOp.paymasterAndData = '0x' + // temp + // for test case until mocking and control flow return '0x' + // return '0x' + + if(this.payMasterAddress === '' || this.payMasterAddress === null) { + return '0x' + } + // TODO // decode infromation about userop.callData (in case of batch or single tx) in verification service diff --git a/packages/account-abstraction/src/SmartAccountAPI.ts b/packages/account-abstraction/src/SmartAccountAPI.ts index 18045d825..95465b7ba 100644 --- a/packages/account-abstraction/src/SmartAccountAPI.ts +++ b/packages/account-abstraction/src/SmartAccountAPI.ts @@ -63,10 +63,7 @@ export class SmartAccountAPI extends BaseWalletAPI { return BigNumber.from(0) } const walletContract = await this._getWalletContract() - console.log('walletContract before nonce (attached?)') - console.log(walletContract) const nonce = await walletContract.getNonce(batchId) - console.log(nonce) return nonce } /** @@ -77,8 +74,7 @@ export class SmartAccountAPI extends BaseWalletAPI { */ async encodeExecute(target: string, value: BigNumberish, data: string, isDelegateCall: boolean): Promise { const walletContract = await this._getWalletContract() - // Review Talha - console.log(walletContract) + return walletContract.interface.encodeFunctionData( 'execFromEntryPoint', [ diff --git a/packages/account-abstraction/test/1-SmartAccountAPI.test.ts b/packages/account-abstraction/test/1-SmartAccountAPI.test.ts new file mode 100644 index 000000000..0ee388809 --- /dev/null +++ b/packages/account-abstraction/test/1-SmartAccountAPI.test.ts @@ -0,0 +1,159 @@ +import { + EntryPoint, + EntryPoint__factory, + SimpleWalletDeployer__factory, + UserOperationStruct +} from '@account-abstraction/contracts' +import { Wallet } from 'ethers' +import { parseEther } from 'ethers/lib/utils' +import { expect } from 'chai' +import { anyValue } from '@nomicfoundation/hardhat-chai-matchers/withArgs' +import { ethers } from 'hardhat' +import { UserOperation } from '@biconomy-sdk/core-types' +import { SmartAccountAPI } from '../src' +import { SampleRecipient, SampleRecipient__factory } from '@biconomy-sdk/common/dist/src/types' + +import { + SmartWalletFactoryFactoryContractV101, + EntryPointFactoryContractV101, + SmartWalletFactoryV101, + SmartWalletFactoryContractV101, + EntryPointContractV101, + SmartWalletContractV101 +} + from '@biconomy-sdk/ethers-lib' +import { DeterministicDeployer } from '../src/DeterministicDeployer' + +const provider = ethers.provider +const signer = provider.getSigner() +const originalSigner = provider.getSigner(1) + +describe('SmartAccountAPI', async () => { + + let owner: Wallet + let api: SmartAccountAPI + let entryPoint: EntryPointContractV101 + let beneficiary: string + let recipient: SampleRecipient + let walletAddress: string + let baseWalletContract: SmartWalletContractV101 + let walletFactoryContract: SmartWalletFactoryContractV101 + let walletDeployed = false + let userSCW: SmartWalletContractV101 + + before('init', async () => { + + const chainId = (await provider.getNetwork()).chainId; + console.log(chainId) + + const fallBackHandlerAddress = "0xF05217199F1C25604c67993F11a81461Bc97F3Ab"; // temp + + entryPoint = await new EntryPointFactoryContractV101(signer).deploy(1, 1) + console.log('entryPoint ', entryPoint.address) + beneficiary = await signer.getAddress() + + recipient = await new SampleRecipient__factory(signer).deploy() + owner = Wallet.createRandom() + console.log('EOA address? ', owner.address) + + baseWalletContract = await new SmartWalletFactoryV101(signer).deploy() + console.log('base wallet deployed at ', baseWalletContract.address) + + walletFactoryContract = await new SmartWalletFactoryFactoryContractV101(signer).deploy(baseWalletContract.address) + console.log('wallet factory deployed at ', walletFactoryContract.address) + + const expected = await walletFactoryContract.getAddressForCounterfactualWallet(owner.address, 0); + console.log('expected address ', expected) + + // deploy wallet + // const proxy = await walletFactoryContract.deployCounterFactualWallet(owner.address, entryPoint.address, fallBackHandlerAddress, 0); + // console.log('proxy ', proxy) + + userSCW = baseWalletContract.attach(expected) + + // const factoryAddress = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) + + const clientConfig = { + dappId: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', + signingServiceUrl: 'https://us-central1-biconomy-staging.cloudfunctions.net', + paymasterAddress: '', + entryPointAddress: entryPoint.address, + bundlerUrl: 'http://localhost:3000/rpc', + chainId: chainId + } + + api = new SmartAccountAPI( + provider, // can do json rpc provider + entryPoint, + clientConfig, + expected, + owner, + fallBackHandlerAddress, + walletFactoryContract.address, + 0 + ) + + console.log('smart account api') + console.log(api.walletAddress) + + + + }) + + it('#getRequestId should match entryPoint.getRequestId', async function () { + + const userOp: UserOperation = { + sender: '0x'.padEnd(42, '1'), + nonce: 2, + initCode: '0x3333', + callData: '0x4444', + callGasLimit: 5, + verificationGasLimit: 6, + preVerificationGas: 7, + maxFeePerGas: 8, + maxPriorityFeePerGas: 9, + paymasterAndData: '0xaaaaaa', + signature: '0xbbbb' + } + const hash = await api.getRequestId(userOp) + const epHash = await entryPoint.getRequestId(userOp) + expect(hash).to.equal(epHash) + + }) + + it('should deploy to counterfactual address', async () => { + + walletAddress = await api.getWalletAddress() + console.log('wallet address from api ', walletAddress) + expect(await provider.getCode(walletAddress).then(code => code.length)).to.equal(2) + + await signer.sendTransaction({ + to: walletAddress, + value: parseEther('0.1') + }) + console.log('sent eth') + + let op: any; + try { + op = await api.createSignedUserOp({ + target: recipient.address, + data: recipient.interface.encodeFunctionData('something', ['hello']) + }) + } catch (err) { + console.log('error here') + console.log(err) + } + + await expect(entryPoint.handleOps([op], beneficiary)).to.emit(recipient, 'Sender') + .withArgs(anyValue, walletAddress, 'hello') + + //expect(await provider.getCode(walletAddress).then(code => code.length)).to.greaterThan(1000) + walletDeployed = true + + }) + + /*it('should use wallet API after creation without a factory', async function () { + + })*/ + +}) \ No newline at end of file diff --git a/packages/ethers-lib/src/index.ts b/packages/ethers-lib/src/index.ts index 5c0eaf54f..40032b623 100644 --- a/packages/ethers-lib/src/index.ts +++ b/packages/ethers-lib/src/index.ts @@ -1,8 +1,8 @@ import EvmNetworkManager, { EthersAdapterConfig } from './EvmNetworkManager' import { IEthersTransactionOptions, IEthersTransactionResult } from './types' -export { SmartWalletContractV100__factory as SmartWalletFactoryContract100 } from '../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContractV100__factory' -export { SmartWalletContractV101__factory as SmartWalletFactoryContract101 } from '../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletContractV101__factory' +export { SmartWalletContractV100__factory as SmartWalletFactoryV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContractV100__factory' +export { SmartWalletContractV101__factory as SmartWalletFactoryV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletContractV101__factory' export { MultiSendContractV100__factory as MultiSendContractV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/MultiSendContractV100__factory' export { MultiSendContractV101__factory as MultiSendContractV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/MultiSendContractV101__factory' @@ -22,6 +22,9 @@ export { EntryPointContractV101 } from '../typechain/src/ethers-v5/v1.0.1/EntryP export { SmartWalletContractV101 } from '../typechain/src/ethers-v5/v1.0.1/SmartWalletContractV101' export { SmartWalletContractV100 } from '../typechain/src/ethers-v5/v1.0.0/SmartWalletContractV100' +export { SmartWalletFactoryContractV101 } from '../typechain/src/ethers-v5/v1.0.1/SmartWalletFactoryContractV101' +export { SmartWalletFactoryContractV100 } from '../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContractV100' + import EntryPointEthersContract_v1_0_0 from './contracts/EntryPointContract/v1.0.0/EntryPointEthersContract' import EntryPointEthersContract_v1_0_1 from './contracts/EntryPointContract/v1.0.1/EntryPointEthersContract' From 20c35448287a0fd72815a686ec244766ed7af50b Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 24 Oct 2022 13:58:12 +0400 Subject: [PATCH 0204/1247] aa signer test cases --- .../src/ERC4337EthersSigner.ts | 6 +- .../test/1-SmartAccountAPI.test.ts | 43 +++++-- .../test/2-ERC4337EthersSigner.test.ts | 119 ++++++++++++++++++ 3 files changed, 160 insertions(+), 8 deletions(-) create mode 100644 packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 3dca47ab6..775cba1d3 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -55,7 +55,11 @@ export class ERC4337EthersSigner extends Signer { console.log('received transaction ', transaction) const customData : any = transaction.customData console.log(customData) - let gasLimit = customData.appliedGasLimit; + let gasLimit; + + if(customData && customData.appliedGasLimit) { + gasLimit = customData.appliedGasLimit + } // temp transaction.gasLimit = gasLimit diff --git a/packages/account-abstraction/test/1-SmartAccountAPI.test.ts b/packages/account-abstraction/test/1-SmartAccountAPI.test.ts index 0ee388809..c1bc6f1fa 100644 --- a/packages/account-abstraction/test/1-SmartAccountAPI.test.ts +++ b/packages/account-abstraction/test/1-SmartAccountAPI.test.ts @@ -27,6 +27,7 @@ import { DeterministicDeployer } from '../src/DeterministicDeployer' const provider = ethers.provider const signer = provider.getSigner() const originalSigner = provider.getSigner(1) +const fallBackHandlerAddress = "0xF05217199F1C25604c67993F11a81461Bc97F3Ab"; // temp describe('SmartAccountAPI', async () => { @@ -40,14 +41,14 @@ describe('SmartAccountAPI', async () => { let walletFactoryContract: SmartWalletFactoryContractV101 let walletDeployed = false let userSCW: SmartWalletContractV101 + let expected: string + let chainId: number before('init', async () => { - const chainId = (await provider.getNetwork()).chainId; + chainId = (await provider.getNetwork()).chainId; console.log(chainId) - const fallBackHandlerAddress = "0xF05217199F1C25604c67993F11a81461Bc97F3Ab"; // temp - entryPoint = await new EntryPointFactoryContractV101(signer).deploy(1, 1) console.log('entryPoint ', entryPoint.address) beneficiary = await signer.getAddress() @@ -62,7 +63,7 @@ describe('SmartAccountAPI', async () => { walletFactoryContract = await new SmartWalletFactoryFactoryContractV101(signer).deploy(baseWalletContract.address) console.log('wallet factory deployed at ', walletFactoryContract.address) - const expected = await walletFactoryContract.getAddressForCounterfactualWallet(owner.address, 0); + expected = await walletFactoryContract.getAddressForCounterfactualWallet(owner.address, 0); console.log('expected address ', expected) // deploy wallet @@ -152,8 +153,36 @@ describe('SmartAccountAPI', async () => { }) - /*it('should use wallet API after creation without a factory', async function () { + it('should use wallet API after creation without a factory', async function () { + + if (!walletDeployed) { + this.skip() + } + const clientConfig = { + dappId: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', + signingServiceUrl: 'https://us-central1-biconomy-staging.cloudfunctions.net', + paymasterAddress: '', + entryPointAddress: entryPoint.address, + bundlerUrl: 'http://localhost:3000/rpc', + chainId: chainId + } - })*/ + const api1 = new SmartAccountAPI( + provider, // can do json rpc provider + entryPoint, + clientConfig, + expected, + owner, + fallBackHandlerAddress, + walletFactoryContract.address, + 0 + ) -}) \ No newline at end of file + const op1 = await api1.createSignedUserOp({ + target: recipient.address, + data: recipient.interface.encodeFunctionData('something', ['world']) + }) + await expect(entryPoint.handleOps([op1], beneficiary)).to.emit(recipient, 'Sender') + .withArgs(anyValue, walletAddress, 'world') + }) +}) diff --git a/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts b/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts new file mode 100644 index 000000000..617cbe760 --- /dev/null +++ b/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts @@ -0,0 +1,119 @@ +import { SampleRecipient, SampleRecipient__factory } from '@biconomy-sdk/common/dist/src/types' +import { ethers } from 'hardhat' +import { ClientConfig, ERC4337EthersProvider, newProvider } from '../src' +import { EntryPoint, EntryPoint__factory } from '@account-abstraction/contracts' +import { expect } from 'chai' +import { parseEther } from 'ethers/lib/utils' +import { Wallet } from 'ethers' +import { anyValue } from '@nomicfoundation/hardhat-chai-matchers/withArgs' + +import { + SmartWalletFactoryFactoryContractV101, + EntryPointFactoryContractV101, + SmartWalletFactoryV101, + SmartWalletFactoryContractV101, + EntryPointContractV101, + SmartWalletContractV101 +} + from '@biconomy-sdk/ethers-lib' + +const provider = ethers.provider +const signer = provider.getSigner() +const originalSigner = provider.getSigner(1) +const fallBackHandlerAddress = "0xF05217199F1C25604c67993F11a81461Bc97F3Ab"; // temp + +describe('ERC4337EthersSigner, Provider', function () { + let recipient: SampleRecipient + let aaProvider: ERC4337EthersProvider + let entryPoint: EntryPoint + let walletAddress: string + let baseWalletContract: SmartWalletContractV101 + let walletFactoryContract: SmartWalletFactoryContractV101 + let walletDeployed = false + let userSCW: SmartWalletContractV101 + let expected: string + let beneficiary: string + let chainId: number + before('init', async () => { + const deployRecipient = await new SampleRecipient__factory(signer).deploy() + entryPoint = await new EntryPoint__factory(signer).deploy(1, 1) + + entryPoint = await new EntryPointFactoryContractV101(signer).deploy(1, 1) + console.log('entryPoint ', entryPoint.address) + beneficiary = await signer.getAddress() + + const owner = Wallet.createRandom() + + recipient = await new SampleRecipient__factory(signer).deploy() + console.log('EOA address? ', owner.address) + + baseWalletContract = await new SmartWalletFactoryV101(signer).deploy() + console.log('base wallet deployed at ', baseWalletContract.address) + + walletFactoryContract = await new SmartWalletFactoryFactoryContractV101(signer).deploy(baseWalletContract.address) + console.log('wallet factory deployed at ', walletFactoryContract.address) + + expected = await walletFactoryContract.getAddressForCounterfactualWallet(owner.address, 0); + console.log('expected address ', expected) + + const clientConfig: ClientConfig = { + dappId: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', + signingServiceUrl: 'https://us-central1-biconomy-staging.cloudfunctions.net', + paymasterAddress: '', + entryPointAddress: entryPoint.address, + bundlerUrl: 'http://localhost:3000/rpc', + chainId: await provider.getNetwork().then(net => net.chainId), + } + + aaProvider = await newProvider( + provider, + clientConfig, + owner, + expected, + fallBackHandlerAddress, + walletFactoryContract.address + ) + + // for testing: bypass sending through a bundler, and send directly to our entrypoint.. + aaProvider.httpRpcClient.sendUserOpToBundler = async (userOp) => { + try { + await entryPoint.handleOps([userOp], beneficiary) + } catch (e: any) { + // doesn't report error unless called with callStatic + await entryPoint.callStatic.handleOps([userOp], beneficiary).catch((e: any) => { + // eslint-disable-next-line + const message = e.errorArgs != null ? `${e.errorName}(${e.errorArgs.join(',')})` : e.message + throw new Error(message) + }) + } + } + recipient = deployRecipient.connect(aaProvider.getSigner()) + }) + + it('should fail to send before funding', async () => { + try { + await recipient.something('hello', { gasLimit: 1e6 }) + throw new Error('should revert') + } catch (e: any) { + expect(e.message).to.eq('FailedOp(0,0x0000000000000000000000000000000000000000,wallet didn\'t pay prefund)') + } + }) + + it('should use ERC-4337 Signer and Provider to send the UserOperation to the bundler', async function () { + const walletAddress = await aaProvider.getSigner().getAddress() + await signer.sendTransaction({ + to: walletAddress, + value: parseEther('0.1') + }) + + expect (await recipient.something('hello')).to.emit(recipient, 'Sender').withArgs(anyValue, walletAddress, 'hello') + }) + + it('should revert if on-chain userOp execution reverts', async function () { + try { + (await recipient.reverting({ gasLimit: 10000 })); + } catch (e: any) { + expect(e.message).to.match(/test revert/) + } + }) +}) \ No newline at end of file From f25a32710f9a9ab963f205e4b53a8e8e77cee46c Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 24 Oct 2022 16:30:43 +0400 Subject: [PATCH 0205/1247] init tests for node client and rleayer + add smart account test comments --- packages/node-client/package.json | 7 +- .../node-client/tests/0-nodeclient.spec.ts | 85 +++++++++++++++++++ packages/relayer/tests/0-relayer.spec.ts | 0 ...account.spec.ts => 0-smartaccount.spec.ts} | 11 ++- 4 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 packages/node-client/tests/0-nodeclient.spec.ts create mode 100644 packages/relayer/tests/0-relayer.spec.ts rename packages/smart-account/tests/{smartaccount.spec.ts => 0-smartaccount.spec.ts} (99%) diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 15d503680..304e17cb7 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -14,7 +14,12 @@ "unbuild": "rimraf dist", "build": "yarn rimraf dist && tsc", "format": "prettier --write \"{src,tests,e2e}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" + "lint": "tslint -p tsconfig.json", + "test": "yarn test:concurrently 'yarn test:run'", + "test:file": "TS_NODE_PROJECT=../../tsconfig.json mocha -r ts-node/register --timeout 30000", + "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", + "test:run": "yarn test:file tests/**/*.spec.ts", + "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'" }, "author": "Biconomy (https://biconomy.io)", "license": "MIT", diff --git a/packages/node-client/tests/0-nodeclient.spec.ts b/packages/node-client/tests/0-nodeclient.spec.ts new file mode 100644 index 000000000..36b32a875 --- /dev/null +++ b/packages/node-client/tests/0-nodeclient.spec.ts @@ -0,0 +1,85 @@ +import SmartAccount from '@biconomy-sdk/smart-account' +import { LocalRelayer } from '@biconomy-sdk/relayer' +import { Contract, ethers, Signer as AbstractSigner } from 'ethers' +import { + JsonRpcProvider, + TransactionReceipt, + TransactionResponse, + Web3Provider +} from '@ethersproject/providers' + +import chaiAsPromised from 'chai-as-promised' +import * as chai from 'chai' +const nock = require('nock') + +const { expect } = chai.use(chaiAsPromised) + +import NodeClient from '../dist/src' + +import { EstimateRequiredTxGasDto } from '../src/types/NodeClientTypes' + +type EthereumInstance = { + chainId?: number + provider?: Web3Provider + signer?: AbstractSigner +} + +enum ChainId { + // Ethereum + MAINNET = 1, + GOERLI = 5, + POLYGON_MUMBAI = 80001, + POLYGON_MAINNET = 137, + BSC_TESTNET = 97, + BSC_MAINNET = 56, + GANACHE = 1337 //Temp +} + +describe('Node Client', function () { + const ethnode: EthereumInstance = {} + let relayer: LocalRelayer + let smartAccount: SmartAccount + let nodeClient: NodeClient + + before(async () => { + nodeClient = new NodeClient({ txServiceUrl: 'https://sdk-backend.staging.biconomy.io/v1' }) + }) + + beforeEach(async () => { }) + + after(async () => { }) + + describe('Gas Estimation Endpoints', () => { + beforeEach(async () => { + // prepare data... + }) + + it('Should estimate targetTxGas accurately', async () => { + + // deets 1 + /* Wallet - deployed + Network - Goerli + Transaction action - approve USDC + Hyphen LP + Token balance ? - Yes + Address - 0xca4ef06cd2903684d3b4ed6d5616f23d73fe1f36 + */ + + const requiredTxGasDto: EstimateRequiredTxGasDto = { + "chainId": 5, + "walletAddress": "0xcA4Ef06cD2903684d3B4ed6d5616f23D73FE1F36", + "transaction": { + "to": "0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0", + "value": 0, + "data": "0x8d80ff0a0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000013200b5b640e6414b6def4fc9b3c1eef373925effeccf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044095ea7b3000000000000000000000000f9af530ab07796b1ec5706fc448d315a4586fda900000000000000000000000000000000000000000000000000000000000f424000f9af530ab07796b1ec5706fc448d315a4586fda90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004414fe72aa000000000000000000000000b5b640e6414b6def4fc9b3c1eef373925effeccf00000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000", + "operation": 1 + } + } + + const response = await nodeClient.estimateRequiredTxGas(requiredTxGasDto); + console.log(response); + + expect(response.code).to.be.equal(200); + }) + }) + +}) \ No newline at end of file diff --git a/packages/relayer/tests/0-relayer.spec.ts b/packages/relayer/tests/0-relayer.spec.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/smart-account/tests/smartaccount.spec.ts b/packages/smart-account/tests/0-smartaccount.spec.ts similarity index 99% rename from packages/smart-account/tests/smartaccount.spec.ts rename to packages/smart-account/tests/0-smartaccount.spec.ts index 814c7e21d..35db40eb0 100644 --- a/packages/smart-account/tests/smartaccount.spec.ts +++ b/packages/smart-account/tests/0-smartaccount.spec.ts @@ -1119,7 +1119,7 @@ describe('Wallet integration', function () { expect(isDeployed).to.be.equal(false) }) - it('Should deploy smart and return correct state and context', async () => { + it('Should deploy smart account and return correct state and context', async () => { const userAddress = (await ethnode.signer?.getAddress()) || '' const eoaSigner = ethnode.provider?.getSigner() @@ -1376,5 +1376,14 @@ describe('Wallet integration', function () { // deployAndPayFees // createRefundTransaction (+Batch) // estimateDeployments etc while mocking response form backend client + + // AA Spec + // sendGaslessTransaction + // deployWalletOnly + // sendGaslessTransactionBatch + // connectPaymaster? + // disconnectPaymaster? + // connectBundler? + }) }) From 941d0c683a962b467e771529b6a3781a530bb926 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 24 Oct 2022 16:37:20 +0400 Subject: [PATCH 0206/1247] nx version update --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3367bdaab..5167447db 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.5.4", - "nx": "^14.8.2", + "nx": "^15.0.1", "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1" From 4b476abf47d10992c579e20daae04f632a14e9bd Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 24 Oct 2022 19:04:47 +0500 Subject: [PATCH 0207/1247] stable changes --- .eslintrc.js | 1 - package.json | 6 +- packages/smart-account/src/SmartAccount.ts | 125 ++++++++++-------- .../src/providers/SmartAccountProvider.ts | 26 +--- packages/smart-account/src/providers/types.ts | 1 + packages/smart-account/src/signers/Signer.ts | 7 +- .../src/signers/SmartAccountSigner.ts | 31 ++--- packages/smart-account/src/types.ts | 6 +- .../src/utils/FetchContractsInfo.ts | 89 ------------- tsconfig.settings.json | 51 ++++--- 10 files changed, 122 insertions(+), 221 deletions(-) delete mode 100644 packages/smart-account/src/utils/FetchContractsInfo.ts diff --git a/.eslintrc.js b/.eslintrc.js index e6d1cbe96..a3685ba26 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,7 +2,6 @@ module.exports = { parser: '@typescript-eslint/parser', // Specifies the ESLint parser extends: [ 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin - 'prettier/@typescript-eslint', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier 'plugin:prettier/recommended', // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. ], parserOptions: { diff --git a/package.json b/package.json index d54ec2c5c..02c6bc9bb 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "postinstall": "cd packages/ethers-lib; hardhat compile", "prettier": "lerna run prettier --npm-client=npm", "diff": "lerna diff", - "new-version": "lerna version --conventional-commits --yes" + "new-version": "lerna version --conventional-commits --yes", + "lint": "eslint -c .eslintrc.js 'packages/smart-account/src/**/*.{ts,tsx}'" }, "changelog": { "labels": { @@ -31,9 +32,10 @@ "devDependencies": { "@types/jest": "^28.1.7", "@types/mocha": "^9.1.1", + "eslint-plugin-import": "^2.26.0", "hardhat": "^2.9.9", "lerna": "^5.5.4", - "nx": "^14.8.4", + "nx": "^15.0.1", "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1" diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index ddac2637e..12a33d0ba 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -53,8 +53,6 @@ import { TransactionResponse } from '@ethersproject/providers' // AA import { newProvider, ERC4337EthersProvider } from '@biconomy-sdk/account-abstraction' import { ethers, Signer } from 'ethers' - - // function Confirmable() { // return function (target: Object, key: string | symbol, descriptor: PropertyDescriptor) { // console.log('target ', target) @@ -72,8 +70,6 @@ import { ethers, Signer } from 'ethers' // return descriptor; // }; // } - - // Create an instance of Smart Account with multi-chain support. class SmartAccount { // By default latest version @@ -155,12 +151,12 @@ class SmartAccount { constructor(walletProvider: Web3Provider, config?: Partial) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } - if ( !this.#smartAccountConfig.activeNetworkId ){ + if (!this.#smartAccountConfig.activeNetworkId) { throw Error('active chain needs to be specified') } - if ( this.#smartAccountConfig.supportedNetworksIds.length == 0 ) - this.#smartAccountConfig.supportedNetworksIds = [this.#smartAccountConfig.activeNetworkId] + if (this.#smartAccountConfig.supportedNetworksIds.length == 0) + this.#smartAccountConfig.supportedNetworksIds = [this.#smartAccountConfig.activeNetworkId] if (config) { this.#smartAccountConfig = { ...this.#smartAccountConfig, ...config } @@ -206,7 +202,7 @@ class SmartAccount { const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) await this.contractUtils.initializeContracts(this.signer, readProvider, network) - if (!this.address){ + if (!this.address) { this.address = await this.getAddress({ index: 0, chainId: network.chainId, @@ -215,18 +211,24 @@ class SmartAccount { console.log('smart wallet address is ', this.address) } - if (!this.smartAccountState ){ + if (!this.smartAccountState) { this.smartAccountState = { chainId: network.chainId, version: this.DEFAULT_VERSION, address: this.address, owner: this.owner, - isDeployed: await this.contractUtils.isDeployed(network.chainId, this.DEFAULT_VERSION, this.address), // could be set as state in init + isDeployed: await this.contractUtils.isDeployed( + network.chainId, + this.DEFAULT_VERSION, + this.address + ), // could be set as state in init entryPointAddress: network.fallBackHandler[network.fallBackHandler.length - 1].address, fallbackHandlerAddress: network.walletFactory[network.walletFactory.length - 1].address } - }else if(this.DEFAULT_VERSION !== this.smartAccountState.version){ - this.smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) + } else if (this.DEFAULT_VERSION !== this.smartAccountState.version) { + this.smartAccountState = await this.contractUtils.getSmartAccountState( + this.smartAccountState + ) } this.aaProvider[network.chainId] = await newProvider( @@ -269,14 +271,9 @@ class SmartAccount { } await this.initializeContractsAtChain(this.#smartAccountConfig.activeNetworkId) - this.transactionManager = new TransactionManager(this.smartAccountState) - await this.transactionManager.initialize( - this.relayer, - this.nodeClient, - this.contractUtils - ) + await this.transactionManager.initialize(this.relayer, this.nodeClient, this.contractUtils) console.log('aa provider ', this.aaProvider) console.log('hurrahhh ----- initilization completed') return this @@ -289,7 +286,8 @@ class SmartAccount { public async sendGasLessTransaction( transactionDto: TransactionDto ): Promise { - let { version, transaction, chainId } = transactionDto + let { version, chainId } = transactionDto + const { transaction } = transactionDto chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId version = version ? version : this.DEFAULT_VERSION @@ -297,9 +295,13 @@ class SmartAccount { await this.initializeContractsAtChain(chainId) - const state = await this.contractUtils.getSmartAccountState(this.smartAccountState, this.DEFAULT_VERSION, this.#smartAccountConfig.activeNetworkId) - - let customData: Record = { + const state = await this.contractUtils.getSmartAccountState( + this.smartAccountState, + this.DEFAULT_VERSION, + this.#smartAccountConfig.activeNetworkId + ) + /* eslint-disable @typescript-eslint/no-explicit-any */ + const customData: Record = { isDeployed: state.isDeployed, skipGasLimit: false, isBatchedToMultiSend: false, @@ -320,7 +322,8 @@ class SmartAccount { } public async sendGaslessTransactionBatch(transactionBatchDto: TransactionBatchDto) { - let { version, transactions, batchId, chainId } = transactionBatchDto + let { version, batchId, chainId } = transactionBatchDto + const { transactions } = transactionBatchDto // Might get optional operation for tx @@ -382,7 +385,7 @@ class SmartAccount { public async deployWalletUsingPaymaster() { // can pass chainId const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() - const response = await aaSigner.deployWalletOnly() + await aaSigner.deployWalletOnly() // todo: make sense of this response and return hash to the user } @@ -472,7 +475,7 @@ class SmartAccount { let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) // TODO - rename and organize utils - const { signer, data } = await smartAccountSignMessage(this.signer, walletContract, tx, chainId) + const { data } = await smartAccountSignMessage(this.signer, walletContract, tx, chainId) let signature = '0x' signature += data.slice(2) return signature @@ -488,15 +491,16 @@ class SmartAccount { * @returns */ async sendTransaction(sendTransactionDto: SendTransactionDto): Promise { - let { - tx, - batchId = 0, - chainId - } = sendTransactionDto + let { chainId } = sendTransactionDto + const { batchId = 0, tx } = sendTransactionDto chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId let { gasLimit } = sendTransactionDto - const isDeployed = await this.contractUtils.isDeployed(chainId, this.DEFAULT_VERSION, this.address) - let rawTx: RawTransactionType = { + const isDeployed = await this.contractUtils.isDeployed( + chainId, + this.DEFAULT_VERSION, + this.address + ) + const rawTx: RawTransactionType = { to: tx.to, data: tx.data, value: 0, @@ -523,14 +527,14 @@ class SmartAccount { this.contractUtils.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() walletContract = walletContract.attach(this.address) - let signature = await this.signTransaction({ + const signature = await this.signTransaction({ version: this.DEFAULT_VERSION, tx, chainId, signer: this.signer }) - let execTransaction = await walletContract.populateTransaction.execTransaction( + const execTransaction = await walletContract.populateTransaction.execTransaction( transaction, batchId, refundInfo, @@ -540,7 +544,11 @@ class SmartAccount { rawTx.to = this.address rawTx.data = execTransaction.data - const state = await this.contractUtils.getSmartAccountState(this.smartAccountState, this.DEFAULT_VERSION, this.#smartAccountConfig.activeNetworkId) + const state = await this.contractUtils.getSmartAccountState( + this.smartAccountState, + this.DEFAULT_VERSION, + this.#smartAccountConfig.activeNetworkId + ) const signedTx: SignedTransaction = { rawTx, @@ -575,7 +583,8 @@ class SmartAccount { async prepareRefundTransaction( prepareRefundTransactionDto: PrepareRefundTransactionDto ): Promise { - let { version, transaction, batchId, chainId } = prepareRefundTransactionDto + let { version, batchId, chainId } = prepareRefundTransactionDto + const { transaction } = prepareRefundTransactionDto chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId version = version ? version : this.DEFAULT_VERSION batchId = batchId ? batchId : 0 @@ -597,7 +606,8 @@ class SmartAccount { async prepareRefundTransactionBatch( prepareRefundTransactionsDto: PrepareRefundTransactionsDto ): Promise { - let { version, transactions, batchId, chainId } = prepareRefundTransactionsDto + let { version, batchId, chainId } = prepareRefundTransactionsDto + const { transactions } = prepareRefundTransactionsDto chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId version = version ? version : this.DEFAULT_VERSION @@ -622,7 +632,8 @@ class SmartAccount { async createRefundTransaction( refundTransactionDto: RefundTransactionDto ): Promise { - let { version, transaction, batchId, feeQuote, chainId } = refundTransactionDto + let { version, batchId, chainId } = refundTransactionDto + const { transaction, feeQuote } = refundTransactionDto chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId version = version ? version : this.DEFAULT_VERSION batchId = batchId ? batchId : 0 @@ -643,7 +654,8 @@ class SmartAccount { * @returns */ async createTransaction(transactionDto: TransactionDto): Promise { - let { version, transaction, batchId, chainId } = transactionDto + let { version, batchId, chainId } = transactionDto + const { transaction } = transactionDto chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId version = version ? version : this.DEFAULT_VERSION @@ -663,7 +675,8 @@ class SmartAccount { async createTransactionBatch( transactionBatchDto: TransactionBatchDto ): Promise { - let { version, transactions, batchId, chainId } = transactionBatchDto + let { version, batchId, chainId } = transactionBatchDto + const { transactions } = transactionBatchDto chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId version = version ? version : this.DEFAULT_VERSION @@ -686,7 +699,8 @@ class SmartAccount { async createRefundTransactionBatch( refundTransactionBatchDto: RefundTransactionBatchDto ): Promise { - let { version, transactions, batchId, feeQuote, chainId } = refundTransactionBatchDto + let { version, batchId, chainId } = refundTransactionBatchDto + const { transactions, feeQuote } = refundTransactionBatchDto chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId version = version ? version : this.DEFAULT_VERSION batchId = batchId ? batchId : 0 @@ -705,11 +719,7 @@ class SmartAccount { } // Onboarding scenario where assets inside counterfactual smart account pays for it's deployment - async deployAndPayFees( - chainId: ChainId, - feeQuote: FeeQuote - ): Promise { - + async deployAndPayFees(chainId: ChainId, feeQuote: FeeQuote): Promise { chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId const transaction = await this.transactionManager.deployAndPayFees( chainId, @@ -720,7 +730,6 @@ class SmartAccount { return txHash } - /** * * @param chainId optional chainId @@ -774,7 +783,6 @@ class SmartAccount { * @returns */ async isDeployed(chainId: ChainId): Promise { - chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId return await this.contractUtils.smartWalletFactoryContract[chainId][ @@ -782,18 +790,19 @@ class SmartAccount { ].isWalletExist(this.address) } - /** + /** * @review for owner * @param chainId requested chain : default is active chain * @returns object containing infromation (owner, relevant contract addresses, isDeployed) about Smart Account for requested chain */ - async getSmartAccountState( - chainId: ChainId - ): Promise { - - chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId - return this.contractUtils.getSmartAccountState(this.smartAccountState, this.DEFAULT_VERSION, this.#smartAccountConfig.activeNetworkId) - } + async getSmartAccountState(chainId: ChainId): Promise { + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + return this.contractUtils.getSmartAccountState( + this.smartAccountState, + this.DEFAULT_VERSION, + chainId + ) + } // /** @@ -827,7 +836,8 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { relayer_url: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay', dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', bundlerUrl: 'http://localhost:3000/rpc', - providerUrlConfig: [ // TODO: Define Type For It + providerUrlConfig: [ + // TODO: Define Type For It { chainId: ChainId.GOERLI, providerUrl: 'https://eth-goerli.alchemyapi.io/v2/lmW2og_aq-OXWKYRoRu-X6Yl6wDQYt_2' @@ -845,5 +855,4 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { // paymaster for goerli // 0x50e8996670759E1FAA315eeaCcEfe0c0A043aA51 - export default SmartAccount diff --git a/packages/smart-account/src/providers/SmartAccountProvider.ts b/packages/smart-account/src/providers/SmartAccountProvider.ts index 876c5982b..db7e6ef07 100644 --- a/packages/smart-account/src/providers/SmartAccountProvider.ts +++ b/packages/smart-account/src/providers/SmartAccountProvider.ts @@ -1,24 +1,9 @@ -import { ethers } from 'ethers' -import { BytesLike, Bytes } from '@ethersproject/bytes' -import { - Web3Provider, - ExternalProvider, - BaseProvider, - JsonRpcProvider, - Networkish -} from '@ethersproject/providers' -import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer' +import { Web3Provider, BaseProvider } from '@ethersproject/providers' import { SmartAccountSigner } from '../signers/SmartAccountSigner' -import { JsonRpcHandler } from './types' -import { BigNumber, Signer } from 'ethers' +import { Signer } from 'ethers' import { TransactionResponse } from '@ethersproject/providers' -import { - ChainId, - SendTransactionDto, - SignTransactionDto, - IWalletTransaction -} from '@biconomy-sdk/core-types' +import { ChainId, IWalletTransaction } from '@biconomy-sdk/core-types' // import { JsonRpcSender } from '@0xsequence/network' @@ -51,9 +36,8 @@ export class SmartAccountProvider extends BaseProvider { tempProvider: Web3Provider, chainId: ChainId, readonly originalSigner: Signer, // EOASigner - readonly originalProvider: BaseProvider // could be Web3Provider // optional? cc @sachin // readonly httpRpcClient: HttpRpcClient, // Required for relaying to rpc-relayer - ) // readonly smartAccountAPI: SmartAccountAPI ? // Could be useful/needful - { + readonly originalProvider: BaseProvider // could be Web3Provider // optional? cc @sachin // readonly httpRpcClient: HttpRpcClient, // Required for relaying to rpc-relayer // readonly smartAccountAPI: SmartAccountAPI ? // Could be useful/needful + ) { super({ name: 'Smart Account User Refund Provider', chainId: chainId diff --git a/packages/smart-account/src/providers/types.ts b/packages/smart-account/src/providers/types.ts index cc96d83df..fca57e206 100644 --- a/packages/smart-account/src/providers/types.ts +++ b/packages/smart-account/src/providers/types.ts @@ -1,5 +1,6 @@ export const JsonRpcVersion = '2.0' +/* eslint-disable @typescript-eslint/no-explicit-any */ export interface JsonRpcRequest { jsonrpc?: string id?: number diff --git a/packages/smart-account/src/signers/Signer.ts b/packages/smart-account/src/signers/Signer.ts index 7555673eb..9b6664e51 100644 --- a/packages/smart-account/src/signers/Signer.ts +++ b/packages/smart-account/src/signers/Signer.ts @@ -1,12 +1,12 @@ -import { ethers, Signer as AbstractSigner } from 'ethers' +import { Signer as AbstractSigner } from 'ethers' import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer' // ChainId , SmartAccountContext, SmartAccountConfig, SmartAccountState from @biconomy-sdk/core-types -import { ChainId, SendTransactionDto, SignTransactionDto } from '@biconomy-sdk/core-types' +import { ChainId, SignTransactionDto } from '@biconomy-sdk/core-types' import { JsonRpcProvider, TransactionResponse } from '@ethersproject/providers' // Might as well be RpcRelayer -import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' +import { Relayer } from '@biconomy-sdk/relayer' import { BytesLike } from '@ethersproject/bytes' import { Deferrable } from 'ethers/lib/utils' import { TransactionRequest } from '@ethersproject/providers' @@ -21,6 +21,7 @@ export abstract class Signer extends AbstractSigner { abstract signMessage(message: BytesLike, chainId?: ChainId): Promise // signTypedData .. + /* eslint-disable @typescript-eslint/no-explicit-any */ abstract signTypedData( domain: TypedDataDomain, types: Record>, diff --git a/packages/smart-account/src/signers/SmartAccountSigner.ts b/packages/smart-account/src/signers/SmartAccountSigner.ts index 956899824..7fde0c54e 100644 --- a/packages/smart-account/src/signers/SmartAccountSigner.ts +++ b/packages/smart-account/src/signers/SmartAccountSigner.ts @@ -1,22 +1,14 @@ import { ethers } from 'ethers' -import { BytesLike, Bytes } from '@ethersproject/bytes' -import { - Web3Provider, - ExternalProvider, - JsonRpcProvider, - Networkish -} from '@ethersproject/providers' +import { BytesLike } from '@ethersproject/bytes' +import { Web3Provider } from '@ethersproject/providers' import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer' import { Signer } from './Signer' -import { Signer as EthersSigner } from '@ethersproject/abstract-signer' - // ChainId , SmartAccountContext, SmartAccountConfig, SmartAccountState from @biconomy-sdk/core-types -import { ChainId, SendTransactionDto, SignTransactionDto } from '@biconomy-sdk/core-types' +import { ChainId, SignTransactionDto } from '@biconomy-sdk/core-types' // Might as well be RpcRelayer -import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' - +import { Relayer } from '@biconomy-sdk/relayer' import { Deferrable } from 'ethers/lib/utils' import { TransactionRequest, TransactionResponse } from '@ethersproject/providers' @@ -53,7 +45,7 @@ export class SmartAccountSigner extends Signer implements TypedDataSigner { return ethers.utils.getAddress(this._address) } - async signTransaction(signTransactionDto: SignTransactionDto): Promise { + async signTransaction(signTransactionDto: Deferrable): Promise { console.log(signTransactionDto) const signature = '' return signature @@ -86,10 +78,10 @@ export class SmartAccountSigner extends Signer implements TypedDataSigner { // handle compatibility with smart account's intent async sendTransaction(transaction: Deferrable): Promise { console.log(transaction) - const txHash = '' - - // @ts-ignore - return txHash + // dummy code + const signedTx = await this.signTransaction(transaction) + const txDetails = this.provider.getTransaction(signedTx) + return txDetails } // signMessage matches implementation from ethers JsonRpcSigner for compatibility, but with @@ -102,12 +94,16 @@ export class SmartAccountSigner extends Signer implements TypedDataSigner { const data = typeof message === 'string' ? ethers.utils.toUtf8Bytes(message) : message const address = await this.getAddress() + + /* eslint-disable @typescript-eslint/no-non-null-assertion */ return await this.provider!.send('personal_sign', [ethers.utils.hexlify(data), address]) } // signTypedData matches implementation from ethers JsonRpcSigner for compatibility, but with // multi-chain support. // Review + + /* eslint-disable @typescript-eslint/no-explicit-any */ async signTypedData( domain: TypedDataDomain, types: Record>, @@ -121,6 +117,7 @@ export class SmartAccountSigner extends Signer implements TypedDataSigner { ]) } + /* eslint-disable @typescript-eslint/no-explicit-any */ async _signTypedData( domain: TypedDataDomain, types: Record>, diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index eaf9d7a7f..42605e63b 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -1,7 +1,5 @@ -import { BytesLike, Wallet, BigNumberish } from 'ethers' -import { ChainNames, ChainId } from '@biconomy-sdk/core-types' -import { Web3Provider } from '@ethersproject/providers' -import { ProviderUrlConfig } from '@biconomy-sdk/node-client' +import { BytesLike, Wallet } from 'ethers' +import { ChainNames } from '@biconomy-sdk/core-types' export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' diff --git a/packages/smart-account/src/utils/FetchContractsInfo.ts b/packages/smart-account/src/utils/FetchContractsInfo.ts deleted file mode 100644 index 4e99b1638..000000000 --- a/packages/smart-account/src/utils/FetchContractsInfo.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { ChainConfig } from '@biconomy-sdk/node-client' -import { - ChainId, - SmartWalletContract, - SmartWalletFactoryContract, - MultiSendContract, - MultiSendCallOnlyContract, - SmartAccountVersion -} from '@biconomy-sdk/core-types' -import { WalletFactory, SmartWallet, MultiSend, MultiSendCallOnly } from '../assets/index' - -import EthersAdapter from '@biconomy-sdk/ethers-lib' - -export function getSmartWalletFactoryContract( - smartAccountVersion: SmartAccountVersion, - ethAdapter: EthersAdapter, - address: string -): SmartWalletFactoryContract { - return ethAdapter.getSmartWalletFactoryContract(smartAccountVersion, address) -} -export function getMultiSendContract( - smartAccountVersion: SmartAccountVersion, - ethAdapter: EthersAdapter, - address: string -): MultiSendContract { - return ethAdapter.getMultiSendContract(smartAccountVersion, address) -} -export function getMultiSendCallOnlyContract( - smartAccountVersion: SmartAccountVersion, - ethAdapter: EthersAdapter, - address: string -): MultiSendCallOnlyContract { - return ethAdapter.getMultiSendCallOnlyContract(smartAccountVersion, address) -} -export function getSmartWalletContract( - smartAccountVersion: SmartAccountVersion, - ethAdapter: EthersAdapter, - address: string -): SmartWalletContract { - return ethAdapter.getSmartWalletContract(smartAccountVersion, address) -} - -export function findChainById(chainId: ChainId, chainConfig: ChainConfig[]): ChainConfig { - const currentChainInfo = chainConfig.find((n: ChainConfig) => { - return n.chainId === chainId - }) - if (currentChainInfo) return currentChainInfo - throw new Error('Chain Not Found') -} - -export function findContractAddressesByVersion( - smartAccountVersion: SmartAccountVersion, - chainId: ChainId, - chainConfig: ChainConfig[] -) { - const chainInfo: ChainConfig = findChainById(chainId, chainConfig) - - const entryPointAddress = chainInfo.entryPoint.find((element: any) => { - return element.version === smartAccountVersion - })?.address - const walletFactoryAddress = chainInfo.walletFactory.find((element: any) => { - return element.version === smartAccountVersion - })?.address - const walletAddress = chainInfo.wallet.find((element: any) => { - return element.version === smartAccountVersion - })?.address - const multiSendAddress = chainInfo.multiSend.find((element: any) => { - return element.version === smartAccountVersion - })?.address - const multiSendCallAddress = chainInfo.multiSendCall.find((element: any) => { - return element.version === smartAccountVersion - })?.address - - const fallBackHandlerAddress = chainInfo.fallBackHandler.find((element: any) => { - return element.version === smartAccountVersion - })?.address - - if (!chainInfo) { - throw new Error('Chain Not Found') - } - return { - walletAddress, - walletFactoryAddress, - multiSendAddress, - multiSendCallAddress, - entryPointAddress, - fallBackHandlerAddress - } -} diff --git a/tsconfig.settings.json b/tsconfig.settings.json index 44f79d8dd..86f910d6f 100644 --- a/tsconfig.settings.json +++ b/tsconfig.settings.json @@ -1,28 +1,27 @@ { - "compilerOptions": { - "target": "ES2019", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ - "module": "CommonJS", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ - "allowJs": false, /* Allow javascript files to be compiled. */ - "declaration": true, /* Generates corresponding '.d.ts' file. */ - "sourceMap": true, /* Generates corresponding '.map' file. */ - "strict": true, /* Enable all strict type-checking options. */ - "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - "strictNullChecks": true, /* Enable strict null checks. */ - "strictFunctionTypes": true, /* Enable strict checking of function types. */ - "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - "noUnusedParameters": true, /* Report errors on unused parameters. */ - "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - "skipLibCheck": true, /* Skip type checking of declaration files. */ - "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ - "resolveJsonModule": true - } + "compilerOptions": { + "target": "ES2019", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ + "module": "CommonJS", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + "allowJs": false, /* Allow javascript files to be compiled. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ + "sourceMap": true, /* Generates corresponding '.map' file. */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, /* Enable strict null checks. */ + "strictFunctionTypes": true, /* Enable strict checking of function types. */ + "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + "noUnusedParameters": true, /* Report errors on unused parameters. */ + "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + "skipLibCheck": true, /* Skip type checking of declaration files. */ + "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ + "resolveJsonModule": true } - \ No newline at end of file +} From 7bab645024331b2246f3e53eb8c0894a85846796 Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 24 Oct 2022 19:44:45 +0500 Subject: [PATCH 0208/1247] tx pkg stable changes --- packages/transactions/src/TransactionAPI.ts | 15 ------- packages/transactions/src/account-utils.ts | 8 ++-- packages/transactions/src/contract-utils.ts | 43 +++++++++++-------- packages/transactions/src/estimator.ts | 9 ++-- packages/transactions/src/execution.ts | 17 +++++--- .../transactions/src/transaction-manager.ts | 40 +++++++---------- packages/transactions/src/utils.ts | 24 +++++------ .../src/utils/FetchContractsInfo.ts | 8 +++- 8 files changed, 77 insertions(+), 87 deletions(-) delete mode 100644 packages/transactions/src/TransactionAPI.ts diff --git a/packages/transactions/src/TransactionAPI.ts b/packages/transactions/src/TransactionAPI.ts deleted file mode 100644 index 13ab2c8e1..000000000 --- a/packages/transactions/src/TransactionAPI.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { BigNumber, BigNumberish } from 'ethers' -import { - SmartWalletContract, - SmartWalletFactoryContract, - MultiSendContract, - MultiSendCallOnlyContract -} from '@biconomy-sdk/core-types' -import { Signer } from '@ethersproject/abstract-signer' -import { Provider } from '@ethersproject/providers' - -class TransactionAPI { - constructor() {} -} - -export default TransactionAPI diff --git a/packages/transactions/src/account-utils.ts b/packages/transactions/src/account-utils.ts index 55396fc4b..bb10e28e7 100644 --- a/packages/transactions/src/account-utils.ts +++ b/packages/transactions/src/account-utils.ts @@ -30,8 +30,6 @@ export const ONE_ETH = parseEther('1') export const TWO_ETH = parseEther('2') export const FIVE_ETH = parseEther('5') -export const tostr = (x: any) => (x != null ? x.toString() : 'null') - let counter = 0 // create non-random account, so gas calculations are deterministic export function createWalletOwner(): Wallet { @@ -49,9 +47,9 @@ export function getSignatureParameters(signature: string) { if (!ethers.utils.isHexString(signature)) { throw new Error('Given value "'.concat(signature, '" is not a valid hex string.')) } - var r = signature.slice(0, 66) - var s = '0x'.concat(signature.slice(66, 130)) - var v = ethers.BigNumber.from('0x'.concat(signature.slice(130, 132))).toNumber() + const r = signature.slice(0, 66) + const s = '0x'.concat(signature.slice(66, 130)) + let v = ethers.BigNumber.from('0x'.concat(signature.slice(130, 132))).toNumber() if (![27, 28].includes(v)) v += 27 return { r: r, diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index 85657e6be..4f9ec46c1 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -43,7 +43,11 @@ class ContractUtils { this.smartWalletFactoryContract = {} } - initializeContracts(signer: Signer, readProvider: ethers.providers.JsonRpcProvider, chaininfo: ChainConfig) { + initializeContracts( + signer: Signer, + readProvider: ethers.providers.JsonRpcProvider, + chaininfo: ChainConfig + ) { // We get the addresses using chainConfig fetched from backend node const smartWallet = chaininfo.wallet @@ -56,14 +60,12 @@ class ContractUtils { provider: readProvider }) - this.smartWalletFactoryContract[chaininfo.chainId] = {} - this.smartWalletContract[chaininfo.chainId] = {} - this.multiSendContract[chaininfo.chainId] = {} - this.multiSendCallOnlyContract[chaininfo.chainId] = {} + this.smartWalletFactoryContract[chaininfo.chainId] = {} + this.smartWalletContract[chaininfo.chainId] = {} + this.multiSendContract[chaininfo.chainId] = {} + this.multiSendCallOnlyContract[chaininfo.chainId] = {} for (let index = 0; index < smartWallet.length; index++) { - - const version = smartWallet[index].version console.log(smartWallet[index]) @@ -118,42 +120,47 @@ class ContractUtils { } return context } - async getSmartAccountState( smartAccountState: SmartAccountState, currentVersion?: string, currentChainId?: ChainId ): Promise { + const { address, owner, chainId, version } = smartAccountState - let {address, owner, chainId, version} = smartAccountState - - if (!currentVersion){ + if (!currentVersion) { currentVersion = version } - if (!currentChainId){ + if (!currentChainId) { currentChainId = chainId } - if (!this.smartAccountState){ + if (!this.smartAccountState) { this.smartAccountState = smartAccountState - } - else if(this.smartAccountState.version !== currentVersion || this.smartAccountState.chainId !== currentChainId) { + } else if ( + this.smartAccountState.version !== currentVersion || + this.smartAccountState.chainId !== currentChainId + ) { this.smartAccountState.address = await this.smartWalletFactoryContract[chainId][ version ].getAddressForCounterfactualWallet(owner, 0) this.smartAccountState.version = currentVersion this.smartAccountState.chainId = currentChainId - this.smartAccountState.isDeployed = await this.isDeployed(this.smartAccountState.chainId, this.smartAccountState.version, address) // could be set as state in init + this.smartAccountState.isDeployed = await this.isDeployed( + this.smartAccountState.chainId, + this.smartAccountState.version, + address + ) // could be set as state in init const contractsByVersion = findContractAddressesByVersion( this.smartAccountState.version, this.smartAccountState.chainId, this.chainConfig ) - this.smartAccountState.entryPointAddress = contractsByVersion.entryPointAddress || '', - this.smartAccountState.fallbackHandlerAddress = contractsByVersion.fallBackHandlerAddress || '' + ;(this.smartAccountState.entryPointAddress = contractsByVersion.entryPointAddress || ''), + (this.smartAccountState.fallbackHandlerAddress = + contractsByVersion.fallBackHandlerAddress || '') } return this.smartAccountState diff --git a/packages/transactions/src/estimator.ts b/packages/transactions/src/estimator.ts index 51be10c93..69c315358 100644 --- a/packages/transactions/src/estimator.ts +++ b/packages/transactions/src/estimator.ts @@ -28,8 +28,7 @@ export class Estimator { createdTransaction: IWalletTransaction, smartAccountState: SmartAccountState ): Promise { - const { transaction, batchId, chainId, version } = prepareTransactionDto - + const { chainId, version } = prepareTransactionDto let estimatedGasUsed = 0 // Check if available from current state const isDeployed = await this.contractUtils.isDeployed( @@ -81,7 +80,7 @@ export class Estimator { const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas( estimateUndeployedContractGasDto ) - let noAuthEstimate = + const noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas) console.log('no auth no refund estimate', noAuthEstimate) @@ -95,7 +94,7 @@ export class Estimator { createdTransaction: IWalletTransaction, smartAccountState: SmartAccountState ): Promise { - const { transactions, batchId, chainId, version } = prepareRefundTransactionsDto + const { chainId, version } = prepareRefundTransactionsDto let estimatedGasUsed = 0 // Check if available from current state const isDeployed = await this.contractUtils.isDeployed( @@ -146,7 +145,7 @@ export class Estimator { const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas( estimateUndeployedContractGasDto ) - let noAuthEstimate = + const noAuthEstimate = Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas) console.log('no auth no refund estimate', noAuthEstimate) diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts index 991a101e4..e250e5fd5 100644 --- a/packages/transactions/src/execution.ts +++ b/packages/transactions/src/execution.ts @@ -1,6 +1,7 @@ import { Contract, Wallet, utils, BigNumberish, Signer, PopulatedTransaction } from 'ethers' import { + ChainId, ExecTransaction, IFeeRefundV1_0_0, IFeeRefundV1_0_1, @@ -92,7 +93,7 @@ export const smartAccountSignTypedData = async ( chainId?: BigNumberish ): Promise => { if (!chainId && !signer.provider) throw Error('Provider required to retrieve chainId') - const cid = chainId || (await signer.provider!!.getNetwork()).chainId + const cid = chainId || (await signer.provider!.getNetwork()).chainId const signerAddress = await signer.getAddress() return { signer: signerAddress, @@ -117,9 +118,12 @@ export const smartAccountSignMessage = async ( signer: Signer, wallet: Contract, SmartAccountTx: IWalletTransaction, - chainId?: BigNumberish + chainId: ChainId ): Promise => { - const cid = chainId || (await signer.provider!!.getNetwork()).chainId + const cid = chainId ? chainId : (await signer.provider!.getNetwork()).chainId + if (!cid) { + throw Error('smartAccountSignMessage: Chain Id Not Found') + } return signHash(signer, calculateSmartAccountTransactionHash(wallet, SmartAccountTx, cid)) } @@ -134,6 +138,7 @@ export const buildSignatureBytes = (signatures: SmartAccountSignature[]): string return signatureBytes } +/* eslint-disable @typescript-eslint/no-explicit-any */ export const executeTx = async ( wallet: Contract, SmartAccountTx: IWalletTransaction, @@ -164,6 +169,7 @@ export const executeTx = async ( ) } +/* eslint-disable @typescript-eslint/no-explicit-any */ export const populateExecuteTx = async ( wallet: Contract, SmartAccountTx: IWalletTransaction, @@ -193,7 +199,7 @@ export const populateExecuteTx = async ( overrides || {} ) } - +/* eslint-disable @typescript-eslint/no-explicit-any */ export const buildContractCall = ( contract: Contract, method: string, @@ -216,6 +222,7 @@ export const buildContractCall = ( ) } +/* eslint-disable @typescript-eslint/no-explicit-any */ export const executeTxWithSigners = async ( wallet: Contract, tx: IWalletTransaction, @@ -227,7 +234,7 @@ export const executeTxWithSigners = async ( ) return executeTx(wallet, tx, sigs, overrides) } - +/* eslint-disable @typescript-eslint/no-explicit-any */ export const executeContractCallWithSigners = async ( wallet: Contract, contract: Contract, diff --git a/packages/transactions/src/transaction-manager.ts b/packages/transactions/src/transaction-manager.ts index 725be2baf..1678355cf 100644 --- a/packages/transactions/src/transaction-manager.ts +++ b/packages/transactions/src/transaction-manager.ts @@ -23,9 +23,7 @@ import { RefundTransactionBatchDto, RefundTransactionDto } from './types' -import { ethers } from 'ethers' import EthersAdapter from '@biconomy-sdk/ethers-lib' -import { GasEstimator } from './assets' import { Estimator } from './estimator' import NodeClient, { @@ -47,17 +45,12 @@ class TransactionManager { utils!: Utils - constructor(readonly smartAccountState: SmartAccountState) { this.utils = new Utils() } // smart account config and context - async initialize( - relayer: Relayer, - nodeClient: NodeClient, - contractUtils: ContractUtils - ) { + async initialize(relayer: Relayer, nodeClient: NodeClient, contractUtils: ContractUtils) { // Note: smart account is state specific so we may end up using chain specific transaction managers as discussed. this.nodeClient = nodeClient @@ -91,10 +84,9 @@ class TransactionManager { async prepareDeployAndPayFees(chainId: ChainId, version: string) { const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response - let feeQuotes: Array = [] - - const smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) + const feeQuotes: Array = [] + const smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ chainId: chainId, @@ -112,9 +104,9 @@ class TransactionManager { // const feeTokenTransferGas = feeOption.feeTokenTransferGas const tokenGasPrice = feeOption.tokenGasPrice || 0 const offset = feeOption.offset || 1 - let payment = (tokenGasPrice * estimatedGasUsed) / offset + const payment = (tokenGasPrice * estimatedGasUsed) / offset - let feeQuote = { + const feeQuote = { symbol: feeOption.symbol, address: feeOption.address, decimal: feeOption.decimal, @@ -143,7 +135,6 @@ class TransactionManager { const smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) - const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ chainId: chainId, version, @@ -263,7 +254,7 @@ class TransactionManager { const tx = await this.createTransaction({ version, transaction, batchId, chainId: chainId }) // try catch - let estimatedGasUsed = await this.estimator.estimateTransaction( + const estimatedGasUsed = await this.estimator.estimateTransaction( prepareTransactionDto, tx, smartAccountState @@ -286,7 +277,7 @@ class TransactionManager { const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response - let feeQuotes: Array = [] + const feeQuotes: Array = [] // 1. If wallet is deployed // 2. If wallet is not deployed (batch wallet deployment on multisend) @@ -305,9 +296,9 @@ class TransactionManager { const feeTokenTransferGas = feeOption.feeTokenTransferGas const tokenGasPrice = feeOption.tokenGasPrice || 0 const offset = feeOption.offset || 1 - let payment = (tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas)) / offset + const payment = (tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas)) / offset - let feeQuote = { + const feeQuote = { symbol: feeOption.symbol, address: feeOption.address, decimal: feeOption.decimal, @@ -337,7 +328,7 @@ class TransactionManager { chainId: chainId }) // try catch - let estimatedGasUsed = await this.estimator.estimateTransactionBatch( + const estimatedGasUsed = await this.estimator.estimateTransactionBatch( prepareRefundTransactionsDto, tx, smartAccountState @@ -359,7 +350,7 @@ class TransactionManager { const gasPriceQuotesResponse: FeeOptionsResponse = await this.relayer.getFeeOptions(chainId) const feeOptionsAvailable: Array = gasPriceQuotesResponse.data.response - let feeQuotes: Array = [] + const feeQuotes: Array = [] // 1. If wallet is deployed // 2. If wallet is not deployed (batch wallet deployment on multisend) @@ -379,9 +370,9 @@ class TransactionManager { const feeTokenTransferGas = feeOption.feeTokenTransferGas const tokenGasPrice = feeOption.tokenGasPrice || 0 const offset = feeOption.offset || 1 - let payment = (tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas)) / offset + const payment = (tokenGasPrice * (estimatedGasUsed + feeTokenTransferGas)) / offset - let feeQuote = { + const feeQuote = { symbol: feeOption.symbol, address: feeOption.address, decimal: feeOption.decimal, @@ -401,7 +392,6 @@ class TransactionManager { async estimateSmartAccountDeployment( estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto ): Promise { - const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi) // Try catch const estimateWalletDeployment = await this.estimator.estimateSmartAccountDeployment( estimateSmartAccountDeploymentDto @@ -668,7 +658,7 @@ class TransactionManager { const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGasOverride( estimateHandlePaymentGas ) - let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + const handlePaymentEstimate = Number(handlePaymentResponse.data.gas) console.log('handlePaymentEstimate (with override) ', handlePaymentEstimate) baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas } else { @@ -706,7 +696,7 @@ class TransactionManager { const handlePaymentResponse = await this.nodeClient.estimateHandlePaymentGas( estimateHandlePaymentGas ) - let handlePaymentEstimate = Number(handlePaymentResponse.data.gas) + const handlePaymentEstimate = Number(handlePaymentResponse.data.gas) console.log('handlePaymentEstimate ', handlePaymentEstimate) baseGas = handlePaymentEstimate + regularOffSet + additionalBaseGas // delegate call + event emission + state updates + potential deployment } diff --git a/packages/transactions/src/utils.ts b/packages/transactions/src/utils.ts index 584a9b665..7cb72c613 100644 --- a/packages/transactions/src/utils.ts +++ b/packages/transactions/src/utils.ts @@ -1,11 +1,13 @@ -import { BigNumber, BigNumberish, Contract, utils } from 'ethers' +import { BigNumberish, Contract, utils } from 'ethers' import { IMetaTransaction, IWalletTransaction, Transaction } from '@biconomy-sdk/core-types' import { AddressZero } from '@ethersproject/constants' export class Utils { - constructor() {} + constructor() { + console.log('Utils Class Initialized') + } buildSmartAccountTransaction = (template: { to: string @@ -70,19 +72,16 @@ export class Utils { multiSend: Contract, txs: IMetaTransaction[], nonce: number, - delegateCall?: boolean, + delegateCall?: boolean ): IMetaTransaction => { - const data = multiSend.interface.encodeFunctionData('multiSend', [this.encodeMultiSend(txs)]) return this.buildSmartAccountTransaction( - Object.assign( - { - to: multiSend.address, - data, - operation: delegateCall ? 1 : 0, - nonce - }, - ) + Object.assign({ + to: multiSend.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }) ) } @@ -99,6 +98,7 @@ export class Utils { return encoded.slice(2) } + /* eslint-disable @typescript-eslint/no-explicit-any */ buildContractCall = ( contract: Contract, method: string, diff --git a/packages/transactions/src/utils/FetchContractsInfo.ts b/packages/transactions/src/utils/FetchContractsInfo.ts index f8729fade..1ca0bfa79 100644 --- a/packages/transactions/src/utils/FetchContractsInfo.ts +++ b/packages/transactions/src/utils/FetchContractsInfo.ts @@ -53,23 +53,27 @@ export function findContractAddressesByVersion( chainConfig: ChainConfig[] ) { const chainInfo: ChainConfig = findChainById(chainId, chainConfig) - + /* eslint-disable @typescript-eslint/no-explicit-any */ const entryPointAddress = chainInfo.entryPoint.find((element: any) => { return element.version === smartAccountVersion })?.address + /* eslint-disable @typescript-eslint/no-explicit-any */ const walletFactoryAddress = chainInfo.walletFactory.find((element: any) => { return element.version === smartAccountVersion })?.address + /* eslint-disable @typescript-eslint/no-explicit-any */ const walletAddress = chainInfo.wallet.find((element: any) => { return element.version === smartAccountVersion })?.address + /* eslint-disable @typescript-eslint/no-explicit-any */ const multiSendAddress = chainInfo.multiSend.find((element: any) => { return element.version === smartAccountVersion })?.address + /* eslint-disable @typescript-eslint/no-explicit-any */ const multiSendCallAddress = chainInfo.multiSendCall.find((element: any) => { return element.version === smartAccountVersion })?.address - + /* eslint-disable @typescript-eslint/no-explicit-any */ const fallBackHandlerAddress = chainInfo.fallBackHandler.find((element: any) => { return element.version === smartAccountVersion })?.address From cedf7f829b83815dc0e47969a731362c9f9bedab Mon Sep 17 00:00:00 2001 From: talha Date: Mon, 24 Oct 2022 20:13:53 +0500 Subject: [PATCH 0209/1247] lint fixes --- package.json | 3 +- .../account-abstraction/src/BaseWalletAPI.ts | 61 ++++++++++++------- .../src/ERC4337EthersProvider.ts | 58 ++++++++++++------ .../src/ERC4337EthersSigner.ts | 54 ++++++++-------- .../account-abstraction/src/HttpRpcClient.ts | 49 +++++++++------ .../account-abstraction/src/PaymasterAPI.ts | 19 +++--- packages/account-abstraction/src/Provider.ts | 25 ++++++-- .../src/SmartAccountAPI.ts | 55 +++++++++-------- .../src/UserOperationEventListener.ts | 40 +++++++----- .../src/WalletFactoryAPI.ts | 37 +++++++---- .../src/utils/httpRequests.ts | 3 +- packages/common/src/ERC4337Utils.ts | 9 +-- .../contracts/MultiSendCallOnlyContract.ts | 1 + .../src/contracts/MultiSendContract.ts | 1 + .../src/contracts/SmartWalletContract.ts | 3 + .../src/evm-manager/EvmNetworkManager.ts | 1 + .../core-types/src/smart-account.types.ts | 2 +- packages/ethers-lib/src/EthersAdapter.ts | 2 +- .../v1.0.0/EntryPointEthersContract.ts | 5 +- .../v1.0.1/EntryPointEthersContract.ts | 7 +-- .../v1.0.0/MultiSendEthersContract.ts | 1 + .../v1.0.1/MultiSendEthersContract.ts | 2 +- .../v1.0.0/MultiSendCallOnlyEthersContract.ts | 2 +- .../v1.0.1/MultiSendCallOnlyEthersContract.ts | 1 + .../v1.0.0/SmartWalletContractEthers.ts | 1 + .../v1.0.1/SmartWalletContractEthers.ts | 2 +- packages/gas-estimator/src/index.ts | 4 +- .../gas-estimator/src/interfaces/estimator.ts | 4 -- .../node-client/src/utils/httpRequests.ts | 3 +- packages/relayer/src/index.ts | 8 +-- packages/relayer/src/local-relayer.ts | 5 +- packages/relayer/src/rest-relayer.ts | 6 +- packages/relayer/src/utils/httpRequests.ts | 4 +- packages/relayer/src/utils/multisend.ts | 4 +- .../src/signers/SmartAccountSigner.ts | 2 +- 35 files changed, 291 insertions(+), 193 deletions(-) delete mode 100644 packages/gas-estimator/src/interfaces/estimator.ts diff --git a/package.json b/package.json index 02c6bc9bb..4a0dd9392 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ "prettier": "lerna run prettier --npm-client=npm", "diff": "lerna diff", "new-version": "lerna version --conventional-commits --yes", - "lint": "eslint -c .eslintrc.js 'packages/smart-account/src/**/*.{ts,tsx}'" + "lint": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}'", + "lint:fix": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}' --fix" }, "changelog": { "labels": { diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index a6343eaa1..d9f3ad892 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -1,16 +1,17 @@ -import { BigNumber, BigNumberish, ethers } from 'ethers' +import { BigNumber, BigNumberish } from 'ethers' import { Provider } from '@ethersproject/providers' import { UserOperation } from '@biconomy-sdk/core-types' import { ClientConfig } from './ClientConfig' -import { EntryPointContractV101, SmartWalletFactoryContract101, SmartWalletContractV101 } from '@biconomy-sdk/ethers-lib' +import { + EntryPointContractV101, + SmartWalletFactoryContract101, + SmartWalletContractV101 +} from '@biconomy-sdk/ethers-lib' import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp' import { resolveProperties } from 'ethers/lib/utils' import { PaymasterAPI } from './PaymasterAPI' import { getRequestId } from '@biconomy-sdk/common' -import { - ZERO_ADDRESS -} from '@biconomy-sdk/core-types' /** * Base class for all Smart Wallet ERC-4337 Clients to implement. * Subclass should inherit 5 methods to support a specific wallet contract: @@ -59,13 +60,20 @@ export abstract class BaseWalletAPI { ) { // factory "connect" define the contract address. the contract "connect" defines the "from" address. // this.entryPointView = EntryPoint__factory.connect(entryPointAddress, provider).connect(ethers.constants.AddressZero) - this.paymasterAPI = new PaymasterAPI(clientConfig.signingServiceUrl, clientConfig.dappId, clientConfig.paymasterAddress) + this.paymasterAPI = new PaymasterAPI( + clientConfig.signingServiceUrl, + clientConfig.dappId, + clientConfig.paymasterAddress + ) } // based on provider chainId we maintain smartWalletContract.. async _getWalletContract(): Promise { if (this.walletContract == null) { - this.walletContract = SmartWalletFactoryContract101.connect(await this.getWalletAddress(), this.provider) + this.walletContract = SmartWalletFactoryContract101.connect( + await this.getWalletAddress(), + this.provider + ) } return this.walletContract } @@ -92,7 +100,12 @@ export abstract class BaseWalletAPI { * @param value * @param data */ - abstract encodeExecute(target: string, value: BigNumberish, data: string, isDelegateCall: boolean): Promise + abstract encodeExecute( + target: string, + value: BigNumberish, + data: string, + isDelegateCall: boolean + ): Promise /** * sign a userOp's hash (requestId). @@ -152,34 +165,40 @@ export abstract class BaseWalletAPI { * actual overhead depends on the expected bundle size */ async getPreVerificationGas(userOp: Partial): Promise { - console.log(userOp); - const bundleSize = 1; - const cost = 21000; - // TODO: calculate calldata cost - const preVerificationGas = Math.floor(cost / bundleSize) - console.log('preVerificationGas ', preVerificationGas); - console.log('preVerificationGas ', Math.floor(preVerificationGas)); - return Math.floor(preVerificationGas); + console.log(userOp) + const bundleSize = 1 + const cost = 21000 + // TODO: calculate calldata cost + const preVerificationGas = Math.floor(cost / bundleSize) + console.log('preVerificationGas ', preVerificationGas) + console.log('preVerificationGas ', Math.floor(preVerificationGas)) + return Math.floor(preVerificationGas) } async encodeUserOpCallDataAndGasLimit( detailsForUserOp: TransactionDetailsForUserOp ): Promise<{ callData: string; callGasLimit: BigNumber }> { + /* eslint-disable @typescript-eslint/no-explicit-any */ function parseNumber(a: any): BigNumber | null { if (a == null || a === '') return null return BigNumber.from(a.toString()) } - if(detailsForUserOp && detailsForUserOp.target === '' && detailsForUserOp.data === '') { + if (detailsForUserOp && detailsForUserOp.target === '' && detailsForUserOp.data === '') { return { callData: '0x', - callGasLimit: BigNumber.from("21000") + callGasLimit: BigNumber.from('21000') } } const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0) - const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data, detailsForUserOp.isDelegateCall || false) - + const callData = await this.encodeExecute( + detailsForUserOp.target, + value, + detailsForUserOp.data, + detailsForUserOp.isDelegateCall || false + ) + /*const callData = (await this._getWalletContract()).encodeFunctionData('execFromEntryPoint', [ detailsForUserOp.target, value, @@ -259,7 +278,7 @@ export abstract class BaseWalletAPI { } } - const partialUserOp: any = { + const partialUserOp: UserOperation = { sender: await this.getWalletAddress(), nonce: await this.getNonce(0), // TODO: add batchid as param initCode, diff --git a/packages/account-abstraction/src/ERC4337EthersProvider.ts b/packages/account-abstraction/src/ERC4337EthersProvider.ts index ca0b491da..fec27b4be 100644 --- a/packages/account-abstraction/src/ERC4337EthersProvider.ts +++ b/packages/account-abstraction/src/ERC4337EthersProvider.ts @@ -12,10 +12,9 @@ import { UserOperation } from '@biconomy-sdk/core-types' import { BaseWalletAPI } from './BaseWalletAPI' export class ERC4337EthersProvider extends BaseProvider { - readonly signer: ERC4337EthersSigner - constructor ( + constructor( readonly config: ClientConfig, readonly originalSigner: Signer, readonly originalProvider: BaseProvider, @@ -27,19 +26,26 @@ export class ERC4337EthersProvider extends BaseProvider { name: 'ERC-4337 Custom Network', chainId: config.chainId }) - this.signer = new ERC4337EthersSigner(config, originalSigner, this, httpRpcClient, smartWalletAPI) + this.signer = new ERC4337EthersSigner( + config, + originalSigner, + this, + httpRpcClient, + smartWalletAPI + ) } - async init (): Promise { + async init(): Promise { await this.smartWalletAPI.init() return this } - getSigner (): ERC4337EthersSigner { + getSigner(): ERC4337EthersSigner { return this.signer } - async perform (method: string, params: any): Promise { + /* eslint-disable @typescript-eslint/no-explicit-any */ + async perform(method: string, params: any): Promise { if (method === 'sendTransaction' || method === 'getTransactionReceipt') { // TODO: do we need 'perform' method to be available at all? // there is nobody out there to use it for ERC-4337 methods yet, we have nothing to override in fact. @@ -48,42 +54,59 @@ export class ERC4337EthersProvider extends BaseProvider { return await this.originalProvider.perform(method, params) } - async getTransaction (transactionHash: string | Promise): Promise { + async getTransaction(transactionHash: string | Promise): Promise { // TODO return await super.getTransaction(transactionHash) } - async getTransactionReceipt (transactionHash: string | Promise): Promise { + async getTransactionReceipt( + transactionHash: string | Promise + ): Promise { const requestId = await transactionHash const sender = await this.getSenderWalletAddress() return await new Promise((resolve, reject) => { - new UserOperationEventListener( - resolve, reject, this.entryPoint, sender, requestId - ).start() + new UserOperationEventListener(resolve, reject, this.entryPoint, sender, requestId).start() }) } - async getSenderWalletAddress (): Promise { + async getSenderWalletAddress(): Promise { return await this.smartWalletAPI.getWalletAddress() } - async waitForTransaction (transactionHash: string, confirmations?: number, timeout?: number): Promise { + async waitForTransaction( + transactionHash: string, + confirmations?: number, + timeout?: number + ): Promise { console.log(confirmations) const sender = await this.getSenderWalletAddress() return await new Promise((resolve, reject) => { - const listener = new UserOperationEventListener(resolve, reject, this.entryPoint, sender, transactionHash, undefined, timeout) + const listener = new UserOperationEventListener( + resolve, + reject, + this.entryPoint, + sender, + transactionHash, + undefined, + timeout + ) listener.start() }) } // fabricate a response in a format usable by ethers users... - async constructUserOpTransactionResponse (userOp1: UserOperation): Promise { + async constructUserOpTransactionResponse(userOp1: UserOperation): Promise { const userOp = await resolveProperties(userOp1) const requestId = getRequestId(userOp, this.config.entryPointAddress, this.config.chainId) const waitPromise = new Promise((resolve, reject) => { new UserOperationEventListener( - resolve, reject, this.entryPoint, userOp.sender, requestId, userOp.nonce + resolve, + reject, + this.entryPoint, + userOp.sender, + requestId, + userOp.nonce ).start() }) return { @@ -107,7 +130,8 @@ export class ERC4337EthersProvider extends BaseProvider { } } - async detectNetwork (): Promise { + async detectNetwork(): Promise { + /* eslint-disable @typescript-eslint/no-explicit-any */ return (this.originalProvider as any).detectNetwork() } } diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 572890a1e..eeeec9935 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -2,7 +2,7 @@ import { Deferrable, defineReadOnly } from '@ethersproject/properties' import { Provider, TransactionRequest, TransactionResponse } from '@ethersproject/providers' import { Signer } from '@ethersproject/abstract-signer' -import { Bytes, ethers } from 'ethers' +import { Bytes } from 'ethers' import { ERC4337EthersProvider } from './ERC4337EthersProvider' import { ClientConfig } from './ClientConfig' import { HttpRpcClient } from './HttpRpcClient' @@ -10,12 +10,13 @@ import { UserOperation } from '@biconomy-sdk/core-types' import { BaseWalletAPI } from './BaseWalletAPI' export class ERC4337EthersSigner extends Signer { // TODO: we have 'erc4337provider', remove shared dependencies or avoid two-way reference - constructor ( + constructor( readonly config: ClientConfig, readonly originalSigner: Signer, readonly erc4337provider: ERC4337EthersProvider, readonly httpRpcClient: HttpRpcClient, - readonly smartWalletAPI: BaseWalletAPI) { + readonly smartWalletAPI: BaseWalletAPI + ) { super() defineReadOnly(this, 'provider', erc4337provider) } @@ -29,20 +30,21 @@ export class ERC4337EthersSigner extends Signer { }) console.log('signed userOp ', userOperation) - let transactionResponse; + let transactionResponse - try{ - transactionResponse = await this.erc4337provider.constructUserOpTransactionResponse(userOperation) - console.log('transactionResponse ', transactionResponse) - } - catch(err) { + try { + transactionResponse = await this.erc4337provider.constructUserOpTransactionResponse( + userOperation + ) + console.log('transactionResponse ', transactionResponse) + } catch (err) { console.log('error when making transaction for only deployment') console.log(err) } try { await this.httpRpcClient.sendUserOpToBundler(userOperation) - } catch (error: any) { + } catch (error) { // console.error('sendUserOpToBundler failed', error) throw this.unwrapError(error) } @@ -50,11 +52,11 @@ export class ERC4337EthersSigner extends Signer { return transactionResponse } // This one is called by Contract. It signs the request and passes in to Provider to be sent. - async sendTransaction (transaction: Deferrable): Promise { + async sendTransaction(transaction: Deferrable): Promise { console.log('received transaction ', transaction) - const customData : any = transaction.customData + const customData = transaction.customData console.log(customData) - let gasLimit = customData.appliedGasLimit; + const gasLimit = customData.appliedGasLimit // temp transaction.gasLimit = gasLimit @@ -72,12 +74,14 @@ export class ERC4337EthersSigner extends Signer { isDelegateCall: true // get from customData.isBatchedToMultiSend }) console.log('signed userOp ', userOperation) - const transactionResponse = await this.erc4337provider.constructUserOpTransactionResponse(userOperation) + const transactionResponse = await this.erc4337provider.constructUserOpTransactionResponse( + userOperation + ) console.log('transactionResponse ', transactionResponse) try { await this.httpRpcClient.sendUserOpToBundler(userOperation) - } catch (error: any) { + } catch (error) { // console.error('sendUserOpToBundler failed', error) throw this.unwrapError(error) } @@ -85,10 +89,10 @@ export class ERC4337EthersSigner extends Signer { return transactionResponse } - unwrapError (errorIn: any): Error { + unwrapError(errorIn): Error { if (errorIn.body != null) { const errorBody = JSON.parse(errorIn.body) - let paymasterInfo: string = '' + let paymasterInfo = '' let failedOpMessage: string | undefined = errorBody?.error?.message if (failedOpMessage?.includes('FailedOp') === true) { // TODO: better error extraction methods will be needed @@ -99,14 +103,16 @@ export class ERC4337EthersSigner extends Signer { failedOpMessage = split[2] } } - const error = new Error(`The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo})`) + const error = new Error( + `The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo})` + ) error.stack = errorIn.stack return error } return errorIn } - async verifyAllNecessaryFields (transactionRequest: TransactionRequest): Promise { + async verifyAllNecessaryFields(transactionRequest: TransactionRequest): Promise { if (transactionRequest.to == null) { throw new Error('Missing call target') } @@ -116,25 +122,25 @@ export class ERC4337EthersSigner extends Signer { } } - connect (provider: Provider): Signer { + connect(provider: Provider): Signer { console.log(provider) throw new Error('changing providers is not supported') } - async getAddress (): Promise { + async getAddress(): Promise { return await this.erc4337provider.getSenderWalletAddress() } - async signMessage (message: Bytes | string): Promise { + async signMessage(message: Bytes | string): Promise { return await this.originalSigner.signMessage(message) } - async signTransaction (transaction: Deferrable): Promise { + async signTransaction(transaction: Deferrable): Promise { console.log(transaction) throw new Error('not implemented') } - async signUserOperation (userOperation: UserOperation): Promise { + async signUserOperation(userOperation: UserOperation): Promise { const message = await this.smartWalletAPI.getRequestId(userOperation) return await this.originalSigner.signMessage(message) } diff --git a/packages/account-abstraction/src/HttpRpcClient.ts b/packages/account-abstraction/src/HttpRpcClient.ts index 704da796b..c2b6e7161 100644 --- a/packages/account-abstraction/src/HttpRpcClient.ts +++ b/packages/account-abstraction/src/HttpRpcClient.ts @@ -6,7 +6,7 @@ import { UserOperation } from '@biconomy-sdk/core-types' export class HttpRpcClient { private readonly userOpJsonRpcProvider: JsonRpcProvider - constructor ( + constructor( readonly bundlerUrl: string, readonly entryPointAddress: string, readonly chainId: number @@ -19,31 +19,40 @@ export class HttpRpcClient { // TODO : add version of HttpRpcClient || interface in RPC relayer to sendSCWTransactionToRelayer - async sendUserOpToBundler (userOp1: UserOperation): Promise { + /* eslint-disable @typescript-eslint/no-explicit-any */ + async sendUserOpToBundler(userOp1: UserOperation): Promise { const userOp = await resolveProperties(userOp1) - const hexifiedUserOp: any = - Object.keys(userOp) - .map(key => { - let val = (userOp as any)[key] - if (typeof val !== 'string' || !val.startsWith('0x')) { - val = hexValue(val) - } - return [key, val] - }) - .reduce((set, [k, v]) => ({ ...set, [k]: v }), {}) + const hexifiedUserOp: any = Object.keys(userOp) + .map((key) => { + let val = (userOp as any)[key] + if (typeof val !== 'string' || !val.startsWith('0x')) { + val = hexValue(val) + } + return [key, val] + }) + .reduce((set, [k, v]) => ({ ...set, [k]: v }), {}) const jsonRequestData: [UserOperation, string] = [hexifiedUserOp, this.entryPointAddress] await this.printUserOperation(jsonRequestData) - return await this.userOpJsonRpcProvider - .send('eth_sendUserOperation', [hexifiedUserOp, this.entryPointAddress]) + return await this.userOpJsonRpcProvider.send('eth_sendUserOperation', [ + hexifiedUserOp, + this.entryPointAddress + ]) } - private async printUserOperation ([userOp1, entryPointAddress]: [UserOperation, string]): Promise { + private async printUserOperation([userOp1, entryPointAddress]: [ + UserOperation, + string + ]): Promise { const userOp = await resolveProperties(userOp1) - console.log('sending eth_sendUserOperation', { - ...userOp, - initCode: (userOp.initCode ?? '').length, - callData: (userOp.callData ?? '').length - }, entryPointAddress) + console.log( + 'sending eth_sendUserOperation', + { + ...userOp, + initCode: (userOp.initCode ?? '').length, + callData: (userOp.callData ?? '').length + }, + entryPointAddress + ) } } diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index 332dac935..178217f0c 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -3,13 +3,16 @@ import { UserOperation } from '@biconomy-sdk/core-types' import { hexConcat } from 'ethers/lib/utils' import { HttpMethod, sendRequest } from './utils/httpRequests' export class PaymasterAPI { - // Might maintain API key at smart account level - constructor(readonly apiUrl: string, readonly dappAPIKey: string, readonly payMasterAddress: string) { + constructor( + readonly apiUrl: string, + readonly dappAPIKey: string, + readonly payMasterAddress: string + ) { this.apiUrl = apiUrl } - async getPaymasterAndData (userOp: Partial): Promise { + async getPaymasterAndData(userOp: Partial): Promise { console.log(userOp) userOp = await resolveProperties(userOp) console.log('userOp') @@ -19,22 +22,22 @@ export class PaymasterAPI { userOp.verificationGasLimit = Number(userOp.verificationGasLimit) userOp.maxFeePerGas = Number(userOp.maxFeePerGas) userOp.maxPriorityFeePerGas = Number(userOp.maxPriorityFeePerGas) - userOp.preVerificationGas = 21000; + userOp.preVerificationGas = 21000 userOp.signature = '0x' userOp.paymasterAndData = '0x' - const result: any = await sendRequest({ + const result = await sendRequest({ url: `${this.apiUrl}/signing-service`, method: HttpMethod.Post, - body: { "userOp": userOp } + body: { userOp: userOp } }) console.log('******** ||||| *********') console.log('signing service response', result) // ToDo: Get paymaster addr from dapp id / smart account config - if(result) { - return hexConcat([this.payMasterAddress, result.signedMessage]) + if (result) { + return hexConcat([this.payMasterAddress, result.signedMessage]) } return '0x' diff --git a/packages/account-abstraction/src/Provider.ts b/packages/account-abstraction/src/Provider.ts index bca6f18b8..4cc2120f3 100644 --- a/packages/account-abstraction/src/Provider.ts +++ b/packages/account-abstraction/src/Provider.ts @@ -14,20 +14,35 @@ import { Signer } from '@ethersproject/abstract-signer' // Might need smart account state for contract addresses // To be used in SmartAccount to init 4337 provider -export async function newProvider ( +export async function newProvider( originalProvider: JsonRpcProvider, config: ClientConfig, originalSigner: Signer = originalProvider.getSigner(), walletAddress: string, fallbackHandlerAddress: string, factoryAddress: string - ): Promise { - const entryPoint = EntryPointFactoryContractV101.connect(config.entryPointAddress, originalProvider) + const entryPoint = EntryPointFactoryContractV101.connect( + config.entryPointAddress, + originalProvider + ) // Initial SimpleWallet instance is not deployed and exists just for the interface // const simpleWalletDeployer = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) - const smartWalletAPI = new SmartAccountAPI(originalProvider, entryPoint, config, walletAddress, originalSigner, fallbackHandlerAddress, factoryAddress, 0) - const httpRpcClient = new HttpRpcClient(config.bundlerUrl, config.entryPointAddress, config.chainId) + const smartWalletAPI = new SmartAccountAPI( + originalProvider, + entryPoint, + config, + walletAddress, + originalSigner, + fallbackHandlerAddress, + factoryAddress, + 0 + ) + const httpRpcClient = new HttpRpcClient( + config.bundlerUrl, + config.entryPointAddress, + config.chainId + ) const ethProvider = await new ERC4337EthersProvider( config, originalSigner, diff --git a/packages/account-abstraction/src/SmartAccountAPI.ts b/packages/account-abstraction/src/SmartAccountAPI.ts index 4c0c9f4e6..e14863dcd 100644 --- a/packages/account-abstraction/src/SmartAccountAPI.ts +++ b/packages/account-abstraction/src/SmartAccountAPI.ts @@ -16,7 +16,7 @@ import { WalletFactoryAPI } from './WalletFactoryAPI' * - execute method is "execFromEntryPoint()" */ -// Should be maintain SmartAccountAPI +// Should be maintain SmartAccountAPI // Review export class SmartAccountAPI extends BaseWalletAPI { /** @@ -29,7 +29,7 @@ export class SmartAccountAPI extends BaseWalletAPI { * @param factoryAddress address of contract "factory" to deploy new contracts * @param index nonce value used when creating multiple wallets for the same owner */ - constructor ( + constructor( provider: Provider, readonly entryPoint: EntryPointContractV101, readonly clientConfig: ClientConfig, @@ -48,16 +48,18 @@ export class SmartAccountAPI extends BaseWalletAPI { * return the value to put into the "initCode" field, if the wallet is not yet deployed. * this value holds the "factory" address, followed by this wallet's information */ - async getWalletInitCode (): Promise { - const deployWalletCallData = WalletFactoryAPI.deployWalletTransactionCallData(this.factoryAddress, await this.owner.getAddress(), this.entryPoint.address, this.handlerAddress, 0) - return hexConcat([ + async getWalletInitCode(): Promise { + const deployWalletCallData = WalletFactoryAPI.deployWalletTransactionCallData( this.factoryAddress, - deployWalletCallData - ]) + await this.owner.getAddress(), + this.entryPoint.address, + this.handlerAddress, + 0 + ) + return hexConcat([this.factoryAddress, deployWalletCallData]) } - - async getNonce (batchId: number): Promise { + async getNonce(batchId: number): Promise { console.log('checking nonce') if (await this.checkWalletPhantom()) { return BigNumber.from(0) @@ -69,28 +71,31 @@ export class SmartAccountAPI extends BaseWalletAPI { console.log(nonce) return nonce } - /** + /** * encode a method call from entryPoint to our contract * @param target * @param value * @param data */ - async encodeExecute (target: string, value: BigNumberish, data: string, isDelegateCall: boolean): Promise { - const walletContract = await this._getWalletContract() - // Review Talha - console.log(walletContract) - return walletContract.interface.encodeFunctionData( - 'execFromEntryPoint', - [ - target, - value, - data, - isDelegateCall ? 1 : 0, //temp // TODO // if multisend then delegatecall (take flag...) - 500000, //temp // TODO - ]) - } + async encodeExecute( + target: string, + value: BigNumberish, + data: string, + isDelegateCall: boolean + ): Promise { + const walletContract = await this._getWalletContract() + // Review Talha + console.log(walletContract) + return walletContract.interface.encodeFunctionData('execFromEntryPoint', [ + target, + value, + data, + isDelegateCall ? 1 : 0, //temp // TODO // if multisend then delegatecall (take flag...) + 500000 //temp // TODO + ]) + } // TODO: May be need to move this to ERC4337EthersPrivider - async signRequestId (requestId: string): Promise { + async signRequestId(requestId: string): Promise { return await this.owner.signMessage(arrayify(requestId)) } } diff --git a/packages/account-abstraction/src/UserOperationEventListener.ts b/packages/account-abstraction/src/UserOperationEventListener.ts index 82e201605..55adbe1e2 100644 --- a/packages/account-abstraction/src/UserOperationEventListener.ts +++ b/packages/account-abstraction/src/UserOperationEventListener.ts @@ -3,17 +3,18 @@ import { TransactionReceipt } from '@ethersproject/providers' import { EntryPoint } from '@account-abstraction/contracts' import { defaultAbiCoder } from 'ethers/lib/utils' -const DEFAULT_TRANSACTION_TIMEOUT: number = 10000 +const DEFAULT_TRANSACTION_TIMEOUT = 10000 /** * This class encapsulates Ethers.js listener function and necessary UserOperation details to * discover a TransactionReceipt for the operation. */ export class UserOperationEventListener { - resolved: boolean = false + resolved = false + /* eslint-disable @typescript-eslint/no-explicit-any */ boundLisener: (this: any, ...param: any) => void - - constructor ( + /* eslint-disable @typescript-eslint/no-explicit-any */ + constructor( readonly resolve: (t: TransactionReceipt) => void, readonly reject: (reason?: any) => void, readonly entryPoint: EntryPoint, @@ -30,7 +31,7 @@ export class UserOperationEventListener { }, this.timeout ?? DEFAULT_TRANSACTION_TIMEOUT) } - start (): void { + start(): void { // eslint-disable-next-line @typescript-eslint/no-misused-promises const filter = this.entryPoint.filters.UserOperationEvent(this.requestId) // listener takes time... first query directly: @@ -45,12 +46,12 @@ export class UserOperationEventListener { }, 100) } - stop (): void { + stop(): void { // eslint-disable-next-line @typescript-eslint/no-misused-promises this.entryPoint.off('UserOperationEvent', this.boundLisener) } - - async listenerCallback (this: any, ...param: any): Promise { + /* eslint-disable @typescript-eslint/no-explicit-any */ + async listenerCallback(this: any, ...param: any): Promise { console.log(param) const event = arguments[arguments.length - 1] as Event if (event.args == null) { @@ -59,13 +60,22 @@ export class UserOperationEventListener { } // TODO: can this happen? we register to event by requestId.. if (event.args.requestId !== this.requestId) { - console.log(`== event with wrong requestId: sender/nonce: event.${event.args.sender as string}@${event.args.nonce.toString() as string}!= userOp.${this.sender as string}@${parseInt(this.nonce?.toString())}`) + console.log( + `== event with wrong requestId: sender/nonce: event.${event.args.sender as string}@${ + event.args.nonce.toString() as string + }!= userOp.${this.sender as string}@${parseInt(this.nonce?.toString())}` + ) return } const transactionReceipt = await event.getTransactionReceipt() transactionReceipt.transactionHash = this.requestId - console.log('got event with status=', event.args.success, 'gasUsed=', transactionReceipt.gasUsed) + console.log( + 'got event with status=', + event.args.success, + 'gasUsed=', + transactionReceipt.gasUsed + ) // before returning the receipt, update the status from the event. // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions @@ -77,10 +87,13 @@ export class UserOperationEventListener { this.resolved = true } - async extractFailureReason (receipt: TransactionReceipt): Promise { + async extractFailureReason(receipt: TransactionReceipt): Promise { console.log('mark tx as failed') receipt.status = 0 - const revertReasonEvents = await this.entryPoint.queryFilter(this.entryPoint.filters.UserOperationRevertReason(this.requestId, this.sender), receipt.blockHash) + const revertReasonEvents = await this.entryPoint.queryFilter( + this.entryPoint.filters.UserOperationRevertReason(this.requestId, this.sender), + receipt.blockHash + ) if (revertReasonEvents[0] != null) { let message = revertReasonEvents[0].args.revertReason if (message.startsWith('0x08c379a0')) { @@ -88,8 +101,7 @@ export class UserOperationEventListener { message = defaultAbiCoder.decode(['string'], '0x' + message.substring(10)).toString() } console.log(`rejecting with reason: ${message}`) - this.reject(new Error(`UserOp failed with reason: ${message}`) - ) + this.reject(new Error(`UserOp failed with reason: ${message}`)) } } } diff --git a/packages/account-abstraction/src/WalletFactoryAPI.ts b/packages/account-abstraction/src/WalletFactoryAPI.ts index d738290ea..8482af09e 100644 --- a/packages/account-abstraction/src/WalletFactoryAPI.ts +++ b/packages/account-abstraction/src/WalletFactoryAPI.ts @@ -1,17 +1,28 @@ - import { Contract } from 'ethers' export class WalletFactoryAPI { + // TODO: uncomment and enable constructor + // constructor( + // readonly factoryAddress: string + // ){} - // TODO: uncomment and enable constructor - // constructor( - // readonly factoryAddress: string - // ){} - - static deployWalletTransactionCallData (factoryAddress: string, owner: string, entryPoint: string, handler: string, index: number): string { - // these would be deployCounterfactualWallet - const factory = new Contract(factoryAddress, ['function deployCounterFactualWallet(address _owner, address _entryPoint, address _handler, uint _index) returns(address)']) - const encodedData = factory.interface.encodeFunctionData('deployCounterFactualWallet', [owner, entryPoint, handler, index]) - return encodedData - } -} \ No newline at end of file + static deployWalletTransactionCallData( + factoryAddress: string, + owner: string, + entryPoint: string, + handler: string, + index: number + ): string { + // these would be deployCounterfactualWallet + const factory = new Contract(factoryAddress, [ + 'function deployCounterFactualWallet(address _owner, address _entryPoint, address _handler, uint _index) returns(address)' + ]) + const encodedData = factory.interface.encodeFunctionData('deployCounterFactualWallet', [ + owner, + entryPoint, + handler, + index + ]) + return encodedData + } +} diff --git a/packages/account-abstraction/src/utils/httpRequests.ts b/packages/account-abstraction/src/utils/httpRequests.ts index e6aee087a..11b2cf209 100644 --- a/packages/account-abstraction/src/utils/httpRequests.ts +++ b/packages/account-abstraction/src/utils/httpRequests.ts @@ -6,10 +6,11 @@ export enum HttpMethod { Delete = 'delete' } +/* eslint-disable @typescript-eslint/no-explicit-any */ interface HttpRequest { url: string method: HttpMethod - body?: Object + body?: Record } export async function sendRequest({ url, method, body }: HttpRequest): Promise { diff --git a/packages/common/src/ERC4337Utils.ts b/packages/common/src/ERC4337Utils.ts index 54c2077d4..9b6f6688b 100644 --- a/packages/common/src/ERC4337Utils.ts +++ b/packages/common/src/ERC4337Utils.ts @@ -6,10 +6,11 @@ import { abi as entryPointAbi } from '@account-abstraction/contracts/artifacts/I const UserOpType = entryPointAbi.find((entry) => entry.name === 'simulateValidation')?.inputs[0] // reverse "Deferrable" or "PromiseOrValue" fields +/* eslint-disable @typescript-eslint/no-explicit-any */ export type NotPromise = { [P in keyof T]: Exclude> } - +/* eslint-disable @typescript-eslint/no-explicit-any */ function encode(typevalues: Array<{ type: string; val: any }>, forSignature: boolean): string { const types = typevalues.map((typevalue) => typevalue.type === 'bytes' && forSignature ? 'bytes32' : typevalue.type @@ -82,13 +83,13 @@ export function getRequestId( ): string { console.log(' inside getRequestId') const userOpHash = keccak256(packUserOp(op, true)) - console.log('userOpHash ', userOpHash); - + console.log('userOpHash ', userOpHash) + const enc = defaultAbiCoder.encode( ['bytes32', 'address', 'uint256'], [userOpHash, entryPoint, chainId] ) - console.log('enc ', enc); + console.log('enc ', enc) return keccak256(enc) } diff --git a/packages/core-types/src/contracts/MultiSendCallOnlyContract.ts b/packages/core-types/src/contracts/MultiSendCallOnlyContract.ts index 93805ba69..db1ff8f82 100644 --- a/packages/core-types/src/contracts/MultiSendCallOnlyContract.ts +++ b/packages/core-types/src/contracts/MultiSendCallOnlyContract.ts @@ -4,5 +4,6 @@ export interface MultiSendCallOnlyContract { getAddress(): string getContract(): Contract getInterface(): Interface + /* eslint-disable @typescript-eslint/no-explicit-any */ encode(methodName: any, params: any): string } diff --git a/packages/core-types/src/contracts/MultiSendContract.ts b/packages/core-types/src/contracts/MultiSendContract.ts index e59724549..36eecdfda 100644 --- a/packages/core-types/src/contracts/MultiSendContract.ts +++ b/packages/core-types/src/contracts/MultiSendContract.ts @@ -4,5 +4,6 @@ export interface MultiSendContract { getAddress(): string getContract(): Contract getInterface(): Interface + /* eslint-disable @typescript-eslint/no-explicit-any */ encode(methodName: any, params: any): string } diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index 2e534a268..d4488266f 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -13,17 +13,20 @@ export interface SmartWalletContract { getAddress(): string getContract(): Contract getInterface(): Interface + /* eslint-disable @typescript-eslint/no-explicit-any */ setAddress(address: string): any getOwner(): Promise getVersion(): Promise getNonce(batchId: number): Promise getTransactionHash(smartAccountTrxData: IWalletTransaction): Promise + /* eslint-disable @typescript-eslint/no-explicit-any */ execTransaction( transaction: ExecTransaction, batchId: number, feeRefundData: IFeeRefundV1_0_0, signatures: string ): any + /* eslint-disable @typescript-eslint/no-explicit-any */ execTransaction( transaction: ExecTransaction, batchId: number, diff --git a/packages/core-types/src/evm-manager/EvmNetworkManager.ts b/packages/core-types/src/evm-manager/EvmNetworkManager.ts index 897cc3d9e..845b7a18c 100644 --- a/packages/core-types/src/evm-manager/EvmNetworkManager.ts +++ b/packages/core-types/src/evm-manager/EvmNetworkManager.ts @@ -33,6 +33,7 @@ export interface IEvmNetworkManager { ): SmartWalletFactoryContract getContractCode(address: string): Promise isContractDeployed(address: string): Promise + /* eslint-disable @typescript-eslint/no-explicit-any */ getTransaction(transactionHash: string): Promise getSignerAddress(): Promise signMessage(message: string): Promise diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 3b73a6878..1488e8fb6 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -45,7 +45,7 @@ export type EstimateSmartAccountDeploymentDto = { export type SmartAccountState = { chainId: ChainId - version: string, + version: string address: string // multichain (EVM) owner: string // multichain (EVM) isDeployed: boolean // chain specific diff --git a/packages/ethers-lib/src/EthersAdapter.ts b/packages/ethers-lib/src/EthersAdapter.ts index 2396af4c6..e4a68431d 100644 --- a/packages/ethers-lib/src/EthersAdapter.ts +++ b/packages/ethers-lib/src/EthersAdapter.ts @@ -1,7 +1,7 @@ import { TransactionResponse } from '@ethersproject/abstract-provider' import { Signer } from '@ethersproject/abstract-signer' import { BigNumber } from '@ethersproject/bignumber' -import { Provider, JsonRpcProvider } from '@ethersproject/providers' +import { JsonRpcProvider } from '@ethersproject/providers' import { Eip3770Address, IEvmNetworkManager, diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts index 4728eeb7c..fc1ed5a40 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts @@ -1,8 +1,5 @@ import { EntryPointContract, UserOperation, ITransactionResult } from '@biconomy-sdk/core-types' -import { - EntryPointContractV100 as EntryPointContract_TypeChain, - EntryPointContractV100Interface -} from '../../../../typechain/src/ethers-v5/v1.0.0/EntryPointContractV100' +import { EntryPointContractV100 as EntryPointContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/EntryPointContractV100' import { toTxResult } from '../../../utils' import { Contract } from '@ethersproject/contracts' import { BytesLike } from 'ethers' diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts index 95278372c..b3f30e0fd 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts @@ -1,11 +1,8 @@ import { EntryPointContract, UserOperation, ITransactionResult } from '@biconomy-sdk/core-types' -import { - EntryPointContractV101 as EntryPointContract_TypeChain, - EntryPointContractV101Interface -} from '../../../../typechain/src/ethers-v5/v1.0.1/EntryPointContractV101' +import { EntryPointContractV101 as EntryPointContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.1/EntryPointContractV101' import { toTxResult } from '../../../utils' import { Contract } from '@ethersproject/contracts' -import { BytesLike, ContractTransaction } from 'ethers' +import { BytesLike } from 'ethers' class EntryPointEthersContract implements EntryPointContract { constructor(public contract: EntryPointContract_TypeChain) {} diff --git a/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts index 0bfbd547b..788798f4e 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts @@ -21,6 +21,7 @@ class MultiSendEthersContract implements MultiSendContract { return this.contract.interface } + /* eslint-disable @typescript-eslint/no-explicit-any */ encode: MultiSendContractV100Interface['encodeFunctionData'] = ( methodName: any, params: any diff --git a/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts index abcf4dc5e..e685638b8 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts @@ -20,7 +20,7 @@ class MultiSendEthersContract implements MultiSendContract { getInterface(): Interface { return this.contract.interface } - + /* eslint-disable @typescript-eslint/no-explicit-any */ encode: MultiSendContractV101Interface['encodeFunctionData'] = ( methodName: any, params: any diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts index 69ea00939..2a6099b76 100644 --- a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts @@ -20,7 +20,7 @@ class MultiSendCallOnlyEthersContract implements MultiSendCallOnlyContract { getInterface(): Interface { return this.contract.interface } - + /* eslint-disable @typescript-eslint/no-explicit-any */ encode: MultiSendCallOnlyContractV100Interface['encodeFunctionData'] = ( methodName: any, params: any diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts index cb79d2932..e92ac7493 100644 --- a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts @@ -21,6 +21,7 @@ class MultiSendCallOnlyEthersContract implements MultiSendCallOnlyContract { return this.contract.interface } + /* eslint-disable @typescript-eslint/no-explicit-any */ encode: MultiSendCallOnlyContractV101Interface['encodeFunctionData'] = ( methodName: any, params: any diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts index e45c3e8d1..47ee87678 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts @@ -68,6 +68,7 @@ class SmartWalletContractEthers implements SmartWalletContract { return toTxResult(txResponse) } + /* eslint-disable @typescript-eslint/no-explicit-any */ encode: SmartWalletContractV100Interface['encodeFunctionData'] = ( methodName: any, params: any diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts index a736985f3..920da93d4 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts @@ -68,7 +68,7 @@ class SmartWalletContractEthers implements SmartWalletContract { const txResponse = await this.contract.execTransaction(_tx, batchId, refundInfo, signatures) return toTxResult(txResponse) } - + /* eslint-disable @typescript-eslint/no-explicit-any */ encode: SmartWalletContractV101Interface['encodeFunctionData'] = ( methodName: any, params: any diff --git a/packages/gas-estimator/src/index.ts b/packages/gas-estimator/src/index.ts index dd86f7fa3..d3bd28a9e 100644 --- a/packages/gas-estimator/src/index.ts +++ b/packages/gas-estimator/src/index.ts @@ -1,3 +1,3 @@ -export * from './interfaces/estimator' +// export * from './interfaces/estimator' // export * from './generic-estimator' -// export * from './override-estimator' \ No newline at end of file +// export * from './override-estimator' diff --git a/packages/gas-estimator/src/interfaces/estimator.ts b/packages/gas-estimator/src/interfaces/estimator.ts deleted file mode 100644 index 17aa27d15..000000000 --- a/packages/gas-estimator/src/interfaces/estimator.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ethers } from "ethers" - -export interface Estimator { -} \ No newline at end of file diff --git a/packages/node-client/src/utils/httpRequests.ts b/packages/node-client/src/utils/httpRequests.ts index e6aee087a..11b2cf209 100644 --- a/packages/node-client/src/utils/httpRequests.ts +++ b/packages/node-client/src/utils/httpRequests.ts @@ -6,10 +6,11 @@ export enum HttpMethod { Delete = 'delete' } +/* eslint-disable @typescript-eslint/no-explicit-any */ interface HttpRequest { url: string method: HttpMethod - body?: Object + body?: Record } export async function sendRequest({ url, method, body }: HttpRequest): Promise { diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index 89cb0141f..8709e6a29 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -1,10 +1,4 @@ -import { TransactionResponse } from '@ethersproject/providers' -import { - SignedTransaction, - SmartAccountState, - SmartAccountContext, - FeeOptionsResponse -} from '@biconomy-sdk/core-types' +import { FeeOptionsResponse } from '@biconomy-sdk/core-types' import { RelayTransaction, RelayResponse } from '@biconomy-sdk/core-types' // JsonRpcRequest diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index cae9c3570..bac5b5474 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -4,7 +4,6 @@ import { Relayer } from '.' import { DeployWallet, - IWalletTransaction, FeeOptionsResponse, RelayTransaction, RelayResponse @@ -62,7 +61,7 @@ export class LocalRelayer implements Relayer { } async relay(relayTransaction: RelayTransaction): Promise { - const { config, signedTx, context, gasLimit } = relayTransaction + const { config, signedTx, context } = relayTransaction const { isDeployed, address } = config const { multiSendCall } = context // multisend has to be multiSendCallOnly here! if (!isDeployed) { @@ -72,8 +71,6 @@ export class LocalRelayer implements Relayer { index: 0 } const { to, data } = this.prepareWalletDeploy(prepareWalletDeploy) - const originalTx: IWalletTransaction = signedTx.tx - const txs: MetaTransaction[] = [ { to, diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 104c89608..3b751f5ee 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -1,5 +1,5 @@ -import { TransactionRequest, TransactionResponse } from '@ethersproject/providers' -import { Signer as AbstractSigner, ethers } from 'ethers' +import { TransactionResponse } from '@ethersproject/providers' +import { ethers } from 'ethers' import { Relayer } from '.' import { @@ -29,7 +29,7 @@ export class RestRelayer implements Relayer { async deployWallet(deployWallet: DeployWallet): Promise { // Should check if already deployed //Review for index and ownership transfer case - const { config, context, index = 0 } = deployWallet + const { config, context } = deployWallet const { address } = config const { walletFactory } = context const isExist = await walletFactory.isWalletExist(address) diff --git a/packages/relayer/src/utils/httpRequests.ts b/packages/relayer/src/utils/httpRequests.ts index e6aee087a..ed8d0684b 100644 --- a/packages/relayer/src/utils/httpRequests.ts +++ b/packages/relayer/src/utils/httpRequests.ts @@ -5,11 +5,11 @@ export enum HttpMethod { Post = 'post', Delete = 'delete' } - +/* eslint-disable @typescript-eslint/no-explicit-any */ interface HttpRequest { url: string method: HttpMethod - body?: Object + body?: Record } export async function sendRequest({ url, method, body }: HttpRequest): Promise { diff --git a/packages/relayer/src/utils/multisend.ts b/packages/relayer/src/utils/multisend.ts index 6a293ab8b..b3e920776 100644 --- a/packages/relayer/src/utils/multisend.ts +++ b/packages/relayer/src/utils/multisend.ts @@ -1,5 +1,4 @@ -import { Contract, BigNumber, BigNumberish, utils } from 'ethers' -import { TypedDataSigner } from '@ethersproject/abstract-signer' +import { Contract, BigNumberish, utils } from 'ethers' import { AddressZero } from '@ethersproject/constants' export interface MetaTransaction { @@ -18,6 +17,7 @@ export interface WalletTransaction extends MetaTransaction { nonce: number } +/* eslint-disable @typescript-eslint/no-explicit-any */ export const buildContractCall = ( contract: Contract, method: string, diff --git a/packages/smart-account/src/signers/SmartAccountSigner.ts b/packages/smart-account/src/signers/SmartAccountSigner.ts index 7fde0c54e..5ad91d7cc 100644 --- a/packages/smart-account/src/signers/SmartAccountSigner.ts +++ b/packages/smart-account/src/signers/SmartAccountSigner.ts @@ -5,7 +5,7 @@ import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject import { Signer } from './Signer' // ChainId , SmartAccountContext, SmartAccountConfig, SmartAccountState from @biconomy-sdk/core-types -import { ChainId, SignTransactionDto } from '@biconomy-sdk/core-types' +import { ChainId } from '@biconomy-sdk/core-types' // Might as well be RpcRelayer import { Relayer } from '@biconomy-sdk/relayer' From dcdf931cc5df864bf0f83299c456b7ba0174d826 Mon Sep 17 00:00:00 2001 From: talha Date: Tue, 25 Oct 2022 12:26:10 +0500 Subject: [PATCH 0210/1247] minor fixes --- packages/account-abstraction/src/BaseWalletAPI.ts | 2 +- packages/account-abstraction/src/ERC4337EthersSigner.ts | 7 ++++--- packages/account-abstraction/src/PaymasterAPI.ts | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index d9f3ad892..e13ccfd30 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -278,7 +278,7 @@ export abstract class BaseWalletAPI { } } - const partialUserOp: UserOperation = { + const partialUserOp: any = { sender: await this.getWalletAddress(), nonce: await this.getNonce(0), // TODO: add batchid as param initCode, diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index eeeec9935..789d862b7 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -54,7 +54,8 @@ export class ERC4337EthersSigner extends Signer { // This one is called by Contract. It signs the request and passes in to Provider to be sent. async sendTransaction(transaction: Deferrable): Promise { console.log('received transaction ', transaction) - const customData = transaction.customData + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const customData: any = transaction.customData console.log(customData) const gasLimit = customData.appliedGasLimit @@ -88,8 +89,8 @@ export class ERC4337EthersSigner extends Signer { // TODO: handle errors - transaction that is "rejected" by bundler is _not likely_ to ever resolve its "wait()" return transactionResponse } - - unwrapError(errorIn): Error { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + unwrapError(errorIn: any): Error { if (errorIn.body != null) { const errorBody = JSON.parse(errorIn.body) let paymasterInfo = '' diff --git a/packages/account-abstraction/src/PaymasterAPI.ts b/packages/account-abstraction/src/PaymasterAPI.ts index 178217f0c..0fbc28841 100644 --- a/packages/account-abstraction/src/PaymasterAPI.ts +++ b/packages/account-abstraction/src/PaymasterAPI.ts @@ -26,7 +26,8 @@ export class PaymasterAPI { userOp.signature = '0x' userOp.paymasterAndData = '0x' - const result = await sendRequest({ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const result: any = await sendRequest({ url: `${this.apiUrl}/signing-service`, method: HttpMethod.Post, body: { userOp: userOp } From f20111e31ec71cda89f8df274d6cfe19f5c7cfa1 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 25 Oct 2022 15:17:51 +0400 Subject: [PATCH 0211/1247] minor fix working test cases --- package.json | 2 +- packages/smart-account/src/SmartAccount.ts | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 5167447db..04090c570 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.5.4", - "nx": "^15.0.1", + "nx": "^15.0.2", "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1" diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index d2c791685..484037681 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -277,8 +277,6 @@ class SmartAccount { this.nodeClient, this.contractUtils ) - console.log('aa provider ', this.aaProvider) - console.log('hurrahhh ----- initilization completed') return this } @@ -739,7 +737,8 @@ const state = await this.contractUtils.getSmartAccountState( * @param chainId optional chainId * @returns Smart Wallet Contract instance attached with current smart account address (proxy) */ - smartAccount(chainId: ChainId = this.#smartAccountConfig.activeNetworkId): SmartWalletContract { + smartAccount(chainId?: ChainId): SmartWalletContract { + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId const smartWallet = this.contractUtils.smartWalletContract[chainId][this.DEFAULT_VERSION] const address = this.address smartWallet.getContract().attach(address) @@ -751,12 +750,12 @@ const state = await this.contractUtils.getSmartAccountState( * @param chainId optional chainId * @returns Smart Wallet Factory instance for requested chainId */ - factory(chainId: ChainId): SmartWalletFactoryContract { + factory(chainId?: ChainId): SmartWalletFactoryContract { chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId return this.contractUtils.smartWalletFactoryContract[chainId][this.DEFAULT_VERSION] } - multiSend(chainId: ChainId): MultiSendContract { + multiSend(chainId?: ChainId): MultiSendContract { chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId return this.contractUtils.multiSendContract[chainId][this.DEFAULT_VERSION] } From 530d1ece488a225b8f8aa4b8033af971a898cd70 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 25 Oct 2022 20:21:24 +0400 Subject: [PATCH 0212/1247] refactor for chainId arg --- packages/smart-account/src/SmartAccount.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 484037681..123bcb8f3 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -710,7 +710,7 @@ const state = await this.contractUtils.getSmartAccountState( }) } - async prepareDeployAndPayFees(chainId: ChainId) { + async prepareDeployAndPayFees(chainId?: ChainId) { chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId return this.transactionManager.prepareDeployAndPayFees(chainId, this.DEFAULT_VERSION) } @@ -800,7 +800,7 @@ const state = await this.contractUtils.getSmartAccountState( * @returns object containing infromation (owner, relevant contract addresses, isDeployed) about Smart Account for requested chain */ async getSmartAccountState( - chainId: ChainId + chainId?: ChainId ): Promise { chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId @@ -816,7 +816,7 @@ const state = await this.contractUtils.getSmartAccountState( */ getSmartAccountContext( // smartAccountVersion: SmartAccountVersion = this.DEFAULT_VERSION, - chainId: ChainId + chainId?: ChainId ): SmartAccountContext { chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId From fa3f383427e7fb904b6d0e0336aba97bed7265f0 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 26 Oct 2022 13:18:36 +0400 Subject: [PATCH 0213/1247] fix bug in loading addresses + using 1.0.9 contracts --- .../src/ERC4337EthersSigner.ts | 2 +- packages/ethers-lib/package.json | 2 +- packages/smart-account/src/SmartAccount.ts | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 775cba1d3..470a1b0ec 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -62,7 +62,7 @@ export class ERC4337EthersSigner extends Signer { } // temp - transaction.gasLimit = gasLimit + // transaction.gasLimit = 500000 // TODO : if isDeployed = false || skipGasLimit = true then use provided gas limit => transaction.gasLimit = gasLimit delete transaction.customData diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 5380419d0..b9ce9588c 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -48,7 +48,7 @@ "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0", "scw-contracts-v1.0.0": "npm:scw-contracts@1.0.0", - "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.8" + "scw-contracts-v1.0.1": "npm:scw-contracts@1.0.9" }, "peerDependencies": { "ethers": "^5.5.3" diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 123bcb8f3..476009775 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -222,8 +222,8 @@ class SmartAccount { address: this.address, owner: this.owner, isDeployed: await this.contractUtils.isDeployed(network.chainId, this.DEFAULT_VERSION, this.address), // could be set as state in init - entryPointAddress: network.fallBackHandler[network.fallBackHandler.length - 1].address, - fallbackHandlerAddress: network.walletFactory[network.walletFactory.length - 1].address + entryPointAddress: network.entryPoint[network.entryPoint.length - 1].address, + fallbackHandlerAddress: network.fallBackHandler[network.fallBackHandler.length - 1].address } }else if(this.DEFAULT_VERSION !== this.smartAccountState.version){ this.smartAccountState = await this.contractUtils.getSmartAccountState(this.smartAccountState) @@ -293,13 +293,13 @@ class SmartAccount { version = version ? version : this.DEFAULT_VERSION const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() - // await this.initializeContractsAtChain(chainId) + await this.initializeContractsAtChain(chainId) -const state = await this.contractUtils.getSmartAccountState( - this.smartAccountState, - this.DEFAULT_VERSION, - this.#smartAccountConfig.activeNetworkId - ) + // const state = await this.contractUtils.getSmartAccountState( + // this.smartAccountState, + // this.DEFAULT_VERSION, + // this.#smartAccountConfig.activeNetworkId + // ) // let customData: Record = { // isDeployed: state.isDeployed, From 4de3606024d93b78f76bc7942a0c8c34a5bf592a Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 27 Oct 2022 08:36:26 +0400 Subject: [PATCH 0214/1247] version update --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 04090c570..87e081ec7 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.5.4", - "nx": "^15.0.2", + "nx": "^15.0.3", "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1" From c8e6ca88f90993522500f6eb75bd7cc2fb2f5f6c Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 27 Oct 2022 17:45:40 +0400 Subject: [PATCH 0215/1247] relayer relay calls using rpc --- .../account-abstraction/src/HttpRpcClient.ts | 4 +- packages/relayer/src/rest-relayer.ts | 50 +++++-------------- 2 files changed, 16 insertions(+), 38 deletions(-) diff --git a/packages/account-abstraction/src/HttpRpcClient.ts b/packages/account-abstraction/src/HttpRpcClient.ts index 704da796b..a77950196 100644 --- a/packages/account-abstraction/src/HttpRpcClient.ts +++ b/packages/account-abstraction/src/HttpRpcClient.ts @@ -3,6 +3,7 @@ import { ethers } from 'ethers' import { hexValue, resolveProperties } from 'ethers/lib/utils' import { UserOperation } from '@biconomy-sdk/core-types' +import { HttpMethod, sendRequest } from './utils/httpRequests' export class HttpRpcClient { private readonly userOpJsonRpcProvider: JsonRpcProvider @@ -15,6 +16,7 @@ export class HttpRpcClient { name: 'Not actually connected to network, only talking to the Bundler!', chainId }) + // this.chainId = chainId; } // TODO : add version of HttpRpcClient || interface in RPC relayer to sendSCWTransactionToRelayer @@ -35,7 +37,7 @@ export class HttpRpcClient { const jsonRequestData: [UserOperation, string] = [hexifiedUserOp, this.entryPointAddress] await this.printUserOperation(jsonRequestData) return await this.userOpJsonRpcProvider - .send('eth_sendUserOperation', [hexifiedUserOp, this.entryPointAddress]) + .send('eth_sendUserOperation', [hexifiedUserOp, this.entryPointAddress, this.chainId]) } private async printUserOperation ([userOp1, entryPointAddress]: [UserOperation, string]): Promise { diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 104c89608..743a67571 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -7,7 +7,8 @@ import { DeployWallet, RestRelayerOptions, FeeOptionsResponse, - RelayResponse + RelayResponse, + GasLimit } from '@biconomy-sdk/core-types' import { MetaTransaction, encodeMultiSend } from './utils/multisend' import { HttpMethod, sendRequest } from './utils/httpRequests' @@ -18,31 +19,12 @@ import { HttpMethod, sendRequest } from './utils/httpRequests' export class RestRelayer implements Relayer { #relayServiceBaseUrl: string + relayerNodeEthersProvider: ethers.providers.JsonRpcProvider; + constructor(options: RestRelayerOptions) { const { url } = options this.#relayServiceBaseUrl = url - } - - // TODO - // Review function arguments and return values - // Defines a type that takes config, context for SCW in play along with other details - async deployWallet(deployWallet: DeployWallet): Promise { - // Should check if already deployed - //Review for index and ownership transfer case - const { config, context, index = 0 } = deployWallet - const { address } = config - const { walletFactory } = context - const isExist = await walletFactory.isWalletExist(address) - if (isExist) { - throw new Error('Smart Account is Already Deployed') - } - const walletDeployTxn = this.prepareWalletDeploy(deployWallet) - // REST API call to relayer - return sendRequest({ - url: `${this.#relayServiceBaseUrl}`, - method: HttpMethod.Post, - body: { ...walletDeployTxn, gasLimit: ethers.constants.Two.pow(24) } - }) + this.relayerNodeEthersProvider = new ethers.providers.JsonRpcProvider(url); } prepareWalletDeploy( @@ -107,20 +89,14 @@ export class RestRelayer implements Relayer { console.log('finaRawTx') console.log(finalRawRx) - // API call - // rawTx to becomes multiSend address and data gets prepared again - return sendRequest({ - url: `${this.#relayServiceBaseUrl}`, - method: HttpMethod.Post, - body: { - ...finalRawRx, - gasLimit: gasLimit, - refundInfo: { - tokenGasPrice: signedTx.tx.gasPrice, - gasToken: signedTx.tx.gasToken - } - } - }) + // JSON RPC Call + // rawTx to becomes multiSend address and data gets prepared again + return await this.relayerNodeEthersProvider + .send('eth_sendSmartContractWalletTransaction', [{ ...signedTx.rawTx, gasLimit: (gasLimit as GasLimit).hex, refundInfo: { + tokenGasPrice: signedTx.tx.gasPrice, + gasToken: signedTx.tx.gasToken, + } + }]) } console.log('signedTx', signedTx) From c26c71adbd223397f2ce53fd3673ae77c24d4bc5 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 27 Oct 2022 17:47:01 +0400 Subject: [PATCH 0216/1247] updated relayer node url in default config --- packages/smart-account/src/SmartAccount.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 476009775..d799a7c8d 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -836,7 +836,7 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { signingServiceUrl: 'https://us-central1-biconomy-staging.cloudfunctions.net', supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], backend_url: 'https://sdk-backend.staging.biconomy.io/v1', - relayer_url: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay', + relayer_url: 'https://sdk-relayer-preview.staging.biconomy.io/', dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', bundlerUrl: 'http://localhost:3000/rpc', providerUrlConfig: [ // TODO: Define Type For It From 9419dd6b1c651731cb7fec1f158d28d4c5e1636a Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 27 Oct 2022 18:32:37 +0400 Subject: [PATCH 0217/1247] endpoint updated --- packages/smart-account/src/SmartAccount.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index d799a7c8d..95216a45d 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -836,7 +836,7 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { signingServiceUrl: 'https://us-central1-biconomy-staging.cloudfunctions.net', supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], backend_url: 'https://sdk-backend.staging.biconomy.io/v1', - relayer_url: 'https://sdk-relayer-preview.staging.biconomy.io/', + relayer_url: 'https://sdk-relayer-preview.staging.biconomy.io/v1/relay', dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', bundlerUrl: 'http://localhost:3000/rpc', providerUrlConfig: [ // TODO: Define Type For It From 5c60178be34efc2c4f401f69e0c68a1a57984fe7 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Fri, 28 Oct 2022 00:12:42 +0530 Subject: [PATCH 0218/1247] minor fixes --- packages/smart-account/src/signers/Signer.ts | 13 +- .../src/signers/SmartAccountSigner.ts | 18 +- yarn.lock | 1763 +++++++++-------- 3 files changed, 920 insertions(+), 874 deletions(-) diff --git a/packages/smart-account/src/signers/Signer.ts b/packages/smart-account/src/signers/Signer.ts index 2b11fa824..7be5ce614 100644 --- a/packages/smart-account/src/signers/Signer.ts +++ b/packages/smart-account/src/signers/Signer.ts @@ -1,17 +1,20 @@ -import { ethers, Signer as EthersSigner } from 'ethers' -import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer' +import { + TypedDataDomain, + TypedDataField, + Signer as AbstractSigner +} from '@ethersproject/abstract-signer' // ChainId , SmartAccountContext, SmartAccountConfig, SmartAccountState from @biconomy-sdk/core-types -import { ChainId, SendTransactionDto, SignTransactionDto } from '@biconomy-sdk/core-types' +import { ChainId, SignTransactionDto } from '@biconomy-sdk/core-types' import { JsonRpcProvider, TransactionResponse } from '@ethersproject/providers' // Might as well be RpcRelayer -import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' +import { Relayer } from '@biconomy-sdk/relayer' import { BytesLike } from '@ethersproject/bytes' import { Deferrable } from 'ethers/lib/utils' import { TransactionRequest } from '@ethersproject/providers' -export abstract class Signer extends EthersSigner { +export abstract class Signer extends AbstractSigner { abstract getProvider(chainId?: number): Promise // Review abstract getRelayer(chainId?: number): Promise diff --git a/packages/smart-account/src/signers/SmartAccountSigner.ts b/packages/smart-account/src/signers/SmartAccountSigner.ts index 7a94668f3..a65dbffc4 100644 --- a/packages/smart-account/src/signers/SmartAccountSigner.ts +++ b/packages/smart-account/src/signers/SmartAccountSigner.ts @@ -1,8 +1,13 @@ -import { BigNumber, ethers, Signer as EthersSigner } from 'ethers' +import { BigNumber, ethers } from 'ethers' import { BytesLike } from '@ethersproject/bytes' import { JsonRpcProvider } from '@ethersproject/providers' -import { TypedDataDomain, TypedDataField, TypedDataSigner } from '@ethersproject/abstract-signer' -import { ChainId, SignTransactionDto } from '@biconomy-sdk/core-types' +import { + TypedDataDomain, + TypedDataField, + TypedDataSigner, + Signer as EthersSigner +} from '@ethersproject/abstract-signer' +import { ChainId } from '@biconomy-sdk/core-types' // Might as well be RpcRelayer // import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' @@ -27,9 +32,6 @@ export class SmartAccountSigner extends EthersSigner implements TypedDataSigner // Might have // _context: not smartAccountContext but the addresses of contracts from SmartAccountState - // TBD - // private _providers: { [key: number]: JsonRpcProvider } = {} - /** * Note: When you do getAddress it could use provider.getAddress / provider.getSmartAccountAddress or directly access SmartAccountAPI */ @@ -74,7 +76,7 @@ export class SmartAccountSigner extends EthersSigner implements TypedDataSigner } // handle compatibility with smart account's intent - // this should send the tx to relayers which will relay to network. + // this should send the tx to relayers which will relay to network. async sendTransaction(transaction: Deferrable): Promise { console.log(transaction) const txHash = '' @@ -128,7 +130,7 @@ export class SmartAccountSigner extends EthersSigner implements TypedDataSigner throw new Error('connectUnchecked is unsupported') } - connect(provider: JsonRpcProvider): SmartAccountSigner { + connect(_provider: JsonRpcProvider): SmartAccountSigner { // if (provider) { // return new SmartAccountSigner(provider) // } diff --git a/yarn.lock b/yarn.lock index 34eed4f88..f02c608ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -41,47 +41,47 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.19.3": - "integrity" "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==" - "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz" - "version" "7.19.3" +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.0": + "integrity" "sha512-Gt9jszFJYq7qzXVK4slhc6NzJXnOVmRECWcVjF/T23rNXD9NtWQ0W3qxdg+p9wWIB+VQw3GYV/U2Ha9bRTfs4w==" + "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.0.tgz" + "version" "7.20.0" "@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.4.0-0", "@babel/core@^7.8.0": - "integrity" "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==" - "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz" - "version" "7.19.3" + "integrity" "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz" + "version" "7.19.6" dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.3" + "@babel/generator" "^7.19.6" "@babel/helper-compilation-targets" "^7.19.3" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helpers" "^7.19.0" - "@babel/parser" "^7.19.3" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helpers" "^7.19.4" + "@babel/parser" "^7.19.6" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.3" - "@babel/types" "^7.19.3" + "@babel/traverse" "^7.19.6" + "@babel/types" "^7.19.4" "convert-source-map" "^1.7.0" "debug" "^4.1.0" "gensync" "^1.0.0-beta.2" "json5" "^2.2.1" "semver" "^6.3.0" -"@babel/generator@^7.19.3", "@babel/generator@^7.7.2": - "integrity" "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==" - "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz" - "version" "7.19.3" +"@babel/generator@^7.19.6", "@babel/generator@^7.20.0", "@babel/generator@^7.7.2": + "integrity" "sha512-GUPcXxWibClgmYJuIwC2Bc2Lg+8b9VjaJ+HlNdACEVt+Wlr1eoU1OPZjZRm7Hzl0gaTsUZNQfeihvZJhG7oc3w==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.20.0.tgz" + "version" "7.20.0" dependencies: - "@babel/types" "^7.19.3" + "@babel/types" "^7.20.0" "@jridgewell/gen-mapping" "^0.3.2" "jsesc" "^2.5.1" "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.19.3": - "integrity" "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==" - "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz" - "version" "7.19.3" + "integrity" "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz" + "version" "7.20.0" dependencies: - "@babel/compat-data" "^7.19.3" + "@babel/compat-data" "^7.20.0" "@babel/helper-validator-option" "^7.18.6" "browserslist" "^4.21.3" "semver" "^6.3.0" @@ -125,31 +125,31 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.19.0": - "integrity" "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz" - "version" "7.19.0" +"@babel/helper-module-transforms@^7.19.6": + "integrity" "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz" + "version" "7.19.6" dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-simple-access" "^7.19.4" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/traverse" "^7.19.6" + "@babel/types" "^7.19.4" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0": "integrity" "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz" "version" "7.19.0" -"@babel/helper-simple-access@^7.18.6": - "integrity" "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==" - "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" - "version" "7.18.6" +"@babel/helper-simple-access@^7.19.4": + "integrity" "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz" + "version" "7.19.4" dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.19.4" "@babel/helper-split-export-declaration@^7.18.6": "integrity" "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" @@ -158,10 +158,10 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-string-parser@^7.18.10": - "integrity" "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" - "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz" - "version" "7.18.10" +"@babel/helper-string-parser@^7.19.4": + "integrity" "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz" + "version" "7.19.4" "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": "integrity" "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" @@ -173,14 +173,14 @@ "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" "version" "7.18.6" -"@babel/helpers@^7.19.0": - "integrity" "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==" - "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz" - "version" "7.19.0" +"@babel/helpers@^7.19.4": + "integrity" "sha512-aGMjYraN0zosCEthoGLdqot1oRsmxVTQRHadsUPz5QM44Zej2PYRz7XiDE7GqnkZnNtLbOuxqoZw42vkU7+XEQ==" + "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.0.tgz" + "version" "7.20.0" dependencies: "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/traverse" "^7.20.0" + "@babel/types" "^7.20.0" "@babel/highlight@^7.18.6": "integrity" "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" @@ -191,10 +191,10 @@ "chalk" "^2.0.0" "js-tokens" "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.3": - "integrity" "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==" - "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz" - "version" "7.19.3" +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.6", "@babel/parser@^7.20.0": + "integrity" "sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.20.0.tgz" + "version" "7.20.0" "@babel/plugin-syntax-async-generators@^7.8.4": "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" @@ -281,16 +281,16 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - "integrity" "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz" - "version" "7.18.6" + "integrity" "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz" + "version" "7.20.0" dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" "@babel/plugin-transform-runtime@^7.5.5": - "integrity" "sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz" - "version" "7.19.1" + "integrity" "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz" + "version" "7.19.6" dependencies: "@babel/helper-module-imports" "^7.18.6" "@babel/helper-plugin-utils" "^7.19.0" @@ -300,11 +300,11 @@ "semver" "^6.3.0" "@babel/runtime@^7.5.5", "@babel/runtime@^7.x", "@babel/runtime@7.x": - "integrity" "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==" - "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz" - "version" "7.19.0" + "integrity" "sha512-NDYdls71fTXoU8TZHfbBWg7DiZfNzClcKui/+kyi6ppD2L1qnWW3VV6CjtaBXSUGGhiTWJ6ereOIkUvenif66Q==" + "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.0.tgz" + "version" "7.20.0" dependencies: - "regenerator-runtime" "^0.13.4" + "regenerator-runtime" "^0.13.10" "@babel/template@^7.18.10", "@babel/template@^7.3.3": "integrity" "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" @@ -315,28 +315,28 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.19.0", "@babel/traverse@^7.19.3", "@babel/traverse@^7.7.2": - "integrity" "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==" - "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz" - "version" "7.19.3" +"@babel/traverse@^7.19.6", "@babel/traverse@^7.20.0", "@babel/traverse@^7.7.2": + "integrity" "sha512-5+cAXQNARgjRUK0JWu2UBwja4JLSO/rBMPJzpsKb+oBF5xlUuCfljQepS4XypBQoiigL0VQjTZy6WiONtUdScQ==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.0.tgz" + "version" "7.20.0" dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.3" + "@babel/generator" "^7.20.0" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.19.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.19.3" - "@babel/types" "^7.19.3" + "@babel/parser" "^7.20.0" + "@babel/types" "^7.20.0" "debug" "^4.1.0" "globals" "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.19.3", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - "integrity" "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==" - "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz" - "version" "7.19.3" +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.19.4", "@babel/types@^7.20.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + "integrity" "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz" + "version" "7.20.0" dependencies: - "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-string-parser" "^7.19.4" "@babel/helper-validator-identifier" "^7.19.1" "to-fast-properties" "^2.0.0" @@ -345,7 +345,7 @@ "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" "version" "0.2.3" -"@biconomy-sdk/account-abstraction@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/account-abstraction": +"@biconomy-sdk/account-abstraction@*", "@biconomy-sdk/account-abstraction@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/account-abstraction": "resolved" "file:packages/account-abstraction" "version" "1.0.13" dependencies: @@ -362,18 +362,19 @@ "hardhat" "^2.9.7" "solidity-coverage" "^0.7.22" -"@biconomy-sdk/common@*", "@biconomy-sdk/common@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/common": +"@biconomy-sdk/common@*", "@biconomy-sdk/common@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/common": "resolved" "file:packages/common" "version" "1.0.13" dependencies: "@account-abstraction/contracts" "^0.2.0" + "@biconomy-sdk/core-types" "*" "@ethersproject/abi" "^5.7.0" "@ethersproject/bytes" "^5.7.0" "@ethersproject/providers" "^5.7.0" "@openzeppelin/contracts" "^4.7.3" "ethers" "^5.7.0" -"@biconomy-sdk/core-types@*", "@biconomy-sdk/core-types@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/core-types": +"@biconomy-sdk/core-types@*", "@biconomy-sdk/core-types@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/core-types": "resolved" "file:packages/core-types" "version" "1.0.13" dependencies: @@ -383,7 +384,7 @@ "@gnosis.pm/safe-deployments" "^1.16.0" "web3-core" "^1.7.1" -"@biconomy-sdk/ethers-lib@*", "@biconomy-sdk/ethers-lib@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/ethers-lib": +"@biconomy-sdk/ethers-lib@*", "@biconomy-sdk/ethers-lib@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/ethers-lib": "resolved" "file:packages/ethers-lib" "version" "1.0.13" dependencies: @@ -392,15 +393,15 @@ "@nomiclabs/hardhat-ethers" "^2.1.0" "@openzeppelin/contracts" "^4.6.0" "scw-contracts-v1.0.0" "npm:scw-contracts@1.0.0" - "scw-contracts-v1.0.1" "npm:scw-contracts@1.0.8" + "scw-contracts-v1.0.1" "npm:scw-contracts@1.0.9" -"@biconomy-sdk/gas-estimator@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/gas-estimator": +"@biconomy-sdk/gas-estimator@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/gas-estimator": "resolved" "file:packages/gas-estimator" "version" "1.0.13" dependencies: "ethers" "^5.7.1" -"@biconomy-sdk/node-client@*", "@biconomy-sdk/node-client@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/node-client": +"@biconomy-sdk/node-client@*", "@biconomy-sdk/node-client@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/node-client": "resolved" "file:packages/node-client" "version" "1.0.13" dependencies: @@ -410,7 +411,7 @@ "@nomiclabs/hardhat-ethers" "^2.1.0" "node-fetch" "^2.6.6" -"@biconomy-sdk/relayer@*", "@biconomy-sdk/relayer@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/relayer": +"@biconomy-sdk/relayer@*", "@biconomy-sdk/relayer@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/relayer": "resolved" "file:packages/relayer" "version" "1.0.13" dependencies: @@ -418,11 +419,12 @@ "@ethersproject/providers" "^5.6.8" "ethers" "^5.6.9" -"@biconomy-sdk/smart-account@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/smart-account": +"@biconomy-sdk/smart-account@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/smart-account": "resolved" "file:packages/smart-account" "version" "1.0.13" dependencies: "@0xsequence/network" "^0.41.0" + "@biconomy-sdk/account-abstraction" "*" "@biconomy-sdk/core-types" "*" "@biconomy-sdk/ethers-lib" "*" "@biconomy-sdk/node-client" "*" @@ -436,7 +438,7 @@ "@types/mocha" "^9.1.1" "concurrently" "^7.4.0" -"@biconomy-sdk/transactions@*", "@biconomy-sdk/transactions@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/transactions": +"@biconomy-sdk/transactions@*", "@biconomy-sdk/transactions@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/transactions": "resolved" "file:packages/transactions" "version" "1.0.13" dependencies: @@ -449,7 +451,7 @@ "ethereumjs-util" "^7.1.5" "ethers" "^5.6.9" -"@biconomy-sdk/web3-auth@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/web3-auth": +"@biconomy-sdk/web3-auth@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/web3-auth": "resolved" "file:packages/web3-auth" "version" "1.0.13" dependencies: @@ -469,10 +471,10 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@eslint/eslintrc@^1.3.2": - "integrity" "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==" - "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz" - "version" "1.3.2" +"@eslint/eslintrc@^1.3.3": + "integrity" "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz" + "version" "1.3.3" dependencies: "ajv" "^6.12.4" "debug" "^4.3.2" @@ -722,10 +724,10 @@ dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@^5.0.0", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@^5.4.7", "@ethersproject/providers@^5.5.1", "@ethersproject/providers@^5.6.8", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@5.7.1": - "integrity" "sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ==" - "resolved" "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.1.tgz" - "version" "5.7.1" +"@ethersproject/providers@^5.0.0", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@^5.4.7", "@ethersproject/providers@^5.5.1", "@ethersproject/providers@^5.6.8", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@5.7.2": + "integrity" "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==" + "resolved" "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz" + "version" "5.7.2" dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/abstract-signer" "^5.7.0" @@ -945,20 +947,15 @@ "web3-core" "^1.8.0" "web3-utils" "^1.8.0" -"@humanwhocodes/config-array@^0.10.5": - "integrity" "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz" - "version" "0.10.7" +"@humanwhocodes/config-array@^0.11.6": + "integrity" "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz" + "version" "0.11.6" dependencies: "@humanwhocodes/object-schema" "^1.2.1" "debug" "^4.1.1" "minimatch" "^3.0.4" -"@humanwhocodes/gitignore-to-minimatch@^1.0.2": - "integrity" "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" - "version" "1.0.2" - "@humanwhocodes/module-importer@^1.0.1": "integrity" "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" "resolved" "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" @@ -1205,7 +1202,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": "integrity" "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" "version" "3.1.0" @@ -1215,18 +1212,18 @@ "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" "version" "1.1.2" -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@1.4.14": "integrity" "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" "version" "1.4.14" "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": - "integrity" "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==" - "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz" - "version" "0.3.15" + "integrity" "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz" + "version" "0.3.17" dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" "@jridgewell/trace-mapping@0.3.9": "integrity" "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==" @@ -1236,39 +1233,39 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@lerna/add@5.5.4": - "integrity" "sha512-eMEWdyH2ijjDuOCZ5qI7nZlWtVmOx/aABGyNmNEG1ChNDQSmxgEmmqxagQCtW7+T63e9AaHsjrxYahBWYBnuhw==" - "resolved" "https://registry.npmjs.org/@lerna/add/-/add-5.5.4.tgz" - "version" "5.5.4" +"@lerna/add@5.6.2": + "integrity" "sha512-NHrm7kYiqP+EviguY7/NltJ3G9vGmJW6v2BASUOhP9FZDhYbq3O+rCDlFdoVRNtcyrSg90rZFMOWHph4KOoCQQ==" + "resolved" "https://registry.npmjs.org/@lerna/add/-/add-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/bootstrap" "5.5.4" - "@lerna/command" "5.5.4" - "@lerna/filter-options" "5.5.4" - "@lerna/npm-conf" "5.5.4" - "@lerna/validation-error" "5.5.4" + "@lerna/bootstrap" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/filter-options" "5.6.2" + "@lerna/npm-conf" "5.6.2" + "@lerna/validation-error" "5.6.2" "dedent" "^0.7.0" "npm-package-arg" "8.1.1" "p-map" "^4.0.0" "pacote" "^13.6.1" "semver" "^7.3.4" -"@lerna/bootstrap@5.5.4": - "integrity" "sha512-MGC6naM0DrFNYTZPEW477uqWCqXmI4MRBKjtGNMiJhczYcFdD6x30u688zoAuO5HUoyqL6Uw7Ea28GVEyDm93Q==" - "resolved" "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.5.4.tgz" - "version" "5.5.4" - dependencies: - "@lerna/command" "5.5.4" - "@lerna/filter-options" "5.5.4" - "@lerna/has-npm-version" "5.5.4" - "@lerna/npm-install" "5.5.4" - "@lerna/package-graph" "5.5.4" - "@lerna/pulse-till-done" "5.5.4" - "@lerna/rimraf-dir" "5.5.4" - "@lerna/run-lifecycle" "5.5.4" - "@lerna/run-topologically" "5.5.4" - "@lerna/symlink-binary" "5.5.4" - "@lerna/symlink-dependencies" "5.5.4" - "@lerna/validation-error" "5.5.4" +"@lerna/bootstrap@5.6.2": + "integrity" "sha512-S2fMOEXbef7nrybQhzBywIGSLhuiQ5huPp1sU+v9Y6XEBsy/2IA+lb0gsZosvPqlRfMtiaFstL+QunaBhlWECA==" + "resolved" "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.6.2.tgz" + "version" "5.6.2" + dependencies: + "@lerna/command" "5.6.2" + "@lerna/filter-options" "5.6.2" + "@lerna/has-npm-version" "5.6.2" + "@lerna/npm-install" "5.6.2" + "@lerna/package-graph" "5.6.2" + "@lerna/pulse-till-done" "5.6.2" + "@lerna/rimraf-dir" "5.6.2" + "@lerna/run-lifecycle" "5.6.2" + "@lerna/run-topologically" "5.6.2" + "@lerna/symlink-binary" "5.6.2" + "@lerna/symlink-dependencies" "5.6.2" + "@lerna/validation-error" "5.6.2" "@npmcli/arborist" "5.3.0" "dedent" "^0.7.0" "get-port" "^5.1.1" @@ -1280,100 +1277,100 @@ "p-waterfall" "^2.1.1" "semver" "^7.3.4" -"@lerna/changed@5.5.4": - "integrity" "sha512-/tns9PA5m9XCKJk13RRJotCOFR/bZ+7zfxz20zpIELT9GehZLTaEPsItxVnlqQ4dMHMe0fl6XG6dFqeBqLOW4g==" - "resolved" "https://registry.npmjs.org/@lerna/changed/-/changed-5.5.4.tgz" - "version" "5.5.4" +"@lerna/changed@5.6.2": + "integrity" "sha512-uUgrkdj1eYJHQGsXXlpH5oEAfu3x0qzeTjgvpdNrxHEdQWi7zWiW59hRadmiImc14uJJYIwVK5q/QLugrsdGFQ==" + "resolved" "https://registry.npmjs.org/@lerna/changed/-/changed-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/collect-updates" "5.5.4" - "@lerna/command" "5.5.4" - "@lerna/listable" "5.5.4" - "@lerna/output" "5.5.4" + "@lerna/collect-updates" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/listable" "5.6.2" + "@lerna/output" "5.6.2" -"@lerna/check-working-tree@5.5.4": - "integrity" "sha512-uIHlEb/JSX9P230UNH69W21fWM4oKu8ulRdXuYCBckpbJkDz9nT1yS2y4wUHx+3GfXWqGKygTh8Z06vSdYg+2A==" - "resolved" "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.5.4.tgz" - "version" "5.5.4" +"@lerna/check-working-tree@5.6.2": + "integrity" "sha512-6Vf3IB6p+iNIubwVgr8A/KOmGh5xb4SyRmhFtAVqe33yWl2p3yc+mU5nGoz4ET3JLF1T9MhsePj0hNt6qyOTLQ==" + "resolved" "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/collect-uncommitted" "5.5.4" - "@lerna/describe-ref" "5.5.4" - "@lerna/validation-error" "5.5.4" + "@lerna/collect-uncommitted" "5.6.2" + "@lerna/describe-ref" "5.6.2" + "@lerna/validation-error" "5.6.2" -"@lerna/child-process@5.5.4": - "integrity" "sha512-1QlxFASrKlV3cG7XPFolOdrS4W784zv4DgipmTxaP++VlVAwbrHhqUdIEytDV6d0rlRksf6LPYzJhXdwlBkCEQ==" - "resolved" "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.5.4.tgz" - "version" "5.5.4" +"@lerna/child-process@5.6.2": + "integrity" "sha512-QIOQ3jIbWdduHd5892fbo3u7/dQgbhzEBB7cvf+Ys/iCPP8UQrBECi1lfRgA4kcTKC2MyMz0SoyXZz/lFcXc3A==" + "resolved" "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.6.2.tgz" + "version" "5.6.2" dependencies: "chalk" "^4.1.0" "execa" "^5.0.0" "strong-log-transformer" "^2.1.0" -"@lerna/clean@5.5.4": - "integrity" "sha512-q1fXRm6ZXo3HrFfsgyY9C83haotPT/Xa5K8fQX6GADuNLk0Xo3+ycouHeidblRLmQtCa3WNPEmCthTuaWrSUoQ==" - "resolved" "https://registry.npmjs.org/@lerna/clean/-/clean-5.5.4.tgz" - "version" "5.5.4" +"@lerna/clean@5.6.2": + "integrity" "sha512-A7j8r0Hk2pGyLUyaCmx4keNHen1L/KdcOjb4nR6X8GtTJR5AeA47a8rRKOCz9wwdyMPlo2Dau7d3RV9viv7a5g==" + "resolved" "https://registry.npmjs.org/@lerna/clean/-/clean-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/command" "5.5.4" - "@lerna/filter-options" "5.5.4" - "@lerna/prompt" "5.5.4" - "@lerna/pulse-till-done" "5.5.4" - "@lerna/rimraf-dir" "5.5.4" + "@lerna/command" "5.6.2" + "@lerna/filter-options" "5.6.2" + "@lerna/prompt" "5.6.2" + "@lerna/pulse-till-done" "5.6.2" + "@lerna/rimraf-dir" "5.6.2" "p-map" "^4.0.0" "p-map-series" "^2.1.0" "p-waterfall" "^2.1.1" -"@lerna/cli@5.5.4": - "integrity" "sha512-4uJEFEN0QNnQgghbpdY5wLmBPOeUeBeCKGh9s2pc1fkn0I1wKDhG0QByOfcf+jGuid2bA7DXzvJRXRgq0fWw0A==" - "resolved" "https://registry.npmjs.org/@lerna/cli/-/cli-5.5.4.tgz" - "version" "5.5.4" +"@lerna/cli@5.6.2": + "integrity" "sha512-w0NRIEqDOmYKlA5t0iyqx0hbY7zcozvApmfvwF0lhkuhf3k6LRAFSamtimGQWicC779a7J2NXw4ASuBV47Fs1Q==" + "resolved" "https://registry.npmjs.org/@lerna/cli/-/cli-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/global-options" "5.5.4" + "@lerna/global-options" "5.6.2" "dedent" "^0.7.0" "npmlog" "^6.0.2" "yargs" "^16.2.0" -"@lerna/collect-uncommitted@5.5.4": - "integrity" "sha512-xLCsp8Qx5z/BWCxqUt8W8Se2XJcCQE6YUAti9TSWD5Ar+M5Etkgz2YJiUjZfZrsWZPBCqNfGfxx9Sjs7a/r+8A==" - "resolved" "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.5.4.tgz" - "version" "5.5.4" +"@lerna/collect-uncommitted@5.6.2": + "integrity" "sha512-i0jhxpypyOsW2PpPwIw4xg6EPh7/N3YuiI6P2yL7PynZ8nOv8DkIdoyMkhUP4gALjBfckH8Bj94eIaKMviqW4w==" + "resolved" "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/child-process" "5.5.4" + "@lerna/child-process" "5.6.2" "chalk" "^4.1.0" "npmlog" "^6.0.2" -"@lerna/collect-updates@5.5.4": - "integrity" "sha512-m34bVoMO5QOd5K5uyAtQtkTiXBIEJHydXMwNXs+YTIAgy82JXNHfZE9vV63Fd5ZWOGY6ORthuXuC2Jn0Vx9tQA==" - "resolved" "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.5.4.tgz" - "version" "5.5.4" +"@lerna/collect-updates@5.6.2": + "integrity" "sha512-DdTK13X6PIsh9HINiMniFeiivAizR/1FBB+hDVe6tOhsXFBfjHMw1xZhXlE+mYIoFmDm1UFK7zvQSexoaxRqFA==" + "resolved" "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/child-process" "5.5.4" - "@lerna/describe-ref" "5.5.4" + "@lerna/child-process" "5.6.2" + "@lerna/describe-ref" "5.6.2" "minimatch" "^3.0.4" "npmlog" "^6.0.2" "slash" "^3.0.0" -"@lerna/command@5.5.4": - "integrity" "sha512-/7drNy2DjVjDjm2knsDfEQIFEdRgPE2/lQ3yfEjVbXqs319o6KWbQVeoNy5GjGnLvc3v3eObA0cSJXHzEV11Bg==" - "resolved" "https://registry.npmjs.org/@lerna/command/-/command-5.5.4.tgz" - "version" "5.5.4" +"@lerna/command@5.6.2": + "integrity" "sha512-eLVGI9TmxcaGt1M7TXGhhBZoeWOtOedMiH7NuCGHtL6TMJ9k+SCExyx+KpNmE6ImyNOzws6EvYLPLjftiqmoaA==" + "resolved" "https://registry.npmjs.org/@lerna/command/-/command-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/child-process" "5.5.4" - "@lerna/package-graph" "5.5.4" - "@lerna/project" "5.5.4" - "@lerna/validation-error" "5.5.4" - "@lerna/write-log-file" "5.5.4" + "@lerna/child-process" "5.6.2" + "@lerna/package-graph" "5.6.2" + "@lerna/project" "5.6.2" + "@lerna/validation-error" "5.6.2" + "@lerna/write-log-file" "5.6.2" "clone-deep" "^4.0.1" "dedent" "^0.7.0" "execa" "^5.0.0" "is-ci" "^2.0.0" "npmlog" "^6.0.2" -"@lerna/conventional-commits@5.5.4": - "integrity" "sha512-zLcaveLXnIDYo3e9ChKsHSxiG7vOJeKdcoC5Fj8WH4DjAq/aqy15TE5SJr6aO8hOU/ph0EonPwyQBf4X2Lg5fg==" - "resolved" "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.5.4.tgz" - "version" "5.5.4" +"@lerna/conventional-commits@5.6.2": + "integrity" "sha512-fPrJpYJhxCgY2uyOCTcAAC6+T6lUAtpEGxLbjWHWTb13oKKEygp9THoFpe6SbAD0fYMb3jeZCZCqNofM62rmuA==" + "resolved" "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/validation-error" "5.5.4" + "@lerna/validation-error" "5.6.2" "conventional-changelog-angular" "^5.0.12" "conventional-changelog-core" "^4.2.4" "conventional-recommended-bump" "^6.1.0" @@ -1384,27 +1381,26 @@ "pify" "^5.0.0" "semver" "^7.3.4" -"@lerna/create-symlink@5.5.4": - "integrity" "sha512-TOfkeEQGhE90mvtky0Vpfl+6hwBz0tSXV0+gjRBmla/sYU/9+QoSH36TauHrmu/O3C8/CWtoGruxiWq8jP6Gyw==" - "resolved" "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.5.4.tgz" - "version" "5.5.4" +"@lerna/create-symlink@5.6.2": + "integrity" "sha512-0WIs3P6ohPVh2+t5axrLZDE5Dt7fe3Kv0Auj0sBiBd6MmKZ2oS76apIl0Bspdbv8jX8+TRKGv6ib0280D0dtEw==" + "resolved" "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.6.2.tgz" + "version" "5.6.2" dependencies: "cmd-shim" "^5.0.0" "fs-extra" "^9.1.0" "npmlog" "^6.0.2" -"@lerna/create@5.5.4": - "integrity" "sha512-mmZKy5U4OKBr/r8Tm6C8gubYHubQaHdPJ+aYuA/l4uCfK0p/Jly84Fy7M3kclcqm8FKDPKDhlp0Y2jnc32jBbA==" - "resolved" "https://registry.npmjs.org/@lerna/create/-/create-5.5.4.tgz" - "version" "5.5.4" +"@lerna/create@5.6.2": + "integrity" "sha512-+Y5cMUxMNXjTTU9IHpgRYIwKo39w+blui1P+s+qYlZUSCUAew0xNpOBG8iN0Nc5X9op4U094oIdHxv7Dyz6tWQ==" + "resolved" "https://registry.npmjs.org/@lerna/create/-/create-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/child-process" "5.5.4" - "@lerna/command" "5.5.4" - "@lerna/npm-conf" "5.5.4" - "@lerna/validation-error" "5.5.4" + "@lerna/child-process" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/npm-conf" "5.6.2" + "@lerna/validation-error" "5.6.2" "dedent" "^0.7.0" "fs-extra" "^9.1.0" - "globby" "^11.0.2" "init-package-json" "^3.0.2" "npm-package-arg" "8.1.1" "p-reduce" "^2.1.0" @@ -1416,218 +1412,218 @@ "validate-npm-package-name" "^4.0.0" "yargs-parser" "20.2.4" -"@lerna/describe-ref@5.5.4": - "integrity" "sha512-2LDEsuSbZTta7SuwKVo9ofeKvxqy4YFNOjEt7+JceZIfh4si3MjIPBX7l8AsCaUmwJnpOEYba0aau72AUAOtoA==" - "resolved" "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.5.4.tgz" - "version" "5.5.4" +"@lerna/describe-ref@5.6.2": + "integrity" "sha512-UqU0N77aT1W8duYGir7R+Sk3jsY/c4lhcCEcnayMpFScMbAp0ETGsW04cYsHK29sgg+ZCc5zEwebBqabWhMhnA==" + "resolved" "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/child-process" "5.5.4" + "@lerna/child-process" "5.6.2" "npmlog" "^6.0.2" -"@lerna/diff@5.5.4": - "integrity" "sha512-OTieqJA4zKAV0KeG0nXwPnCkwg3LH+ucXlelnj1w+gaP2ndHbJVwgUWXGpqCHk8tn935KKOULhP7BGmAwvTYlQ==" - "resolved" "https://registry.npmjs.org/@lerna/diff/-/diff-5.5.4.tgz" - "version" "5.5.4" +"@lerna/diff@5.6.2": + "integrity" "sha512-aHKzKvUvUI8vOcshC2Za/bdz+plM3r/ycqUrPqaERzp+kc1pYHyPeXezydVdEmgmmwmyKI5hx4+2QNnzOnun2A==" + "resolved" "https://registry.npmjs.org/@lerna/diff/-/diff-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/child-process" "5.5.4" - "@lerna/command" "5.5.4" - "@lerna/validation-error" "5.5.4" + "@lerna/child-process" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/validation-error" "5.6.2" "npmlog" "^6.0.2" -"@lerna/exec@5.5.4": - "integrity" "sha512-o1SQ+6/U6L8hih6+wAgjyOhqo2CKzMcW6YWLs5erRY9E6VCEc2kX7SW3223ehsAhUIPfG7n+KYPmuZbWvTpbGQ==" - "resolved" "https://registry.npmjs.org/@lerna/exec/-/exec-5.5.4.tgz" - "version" "5.5.4" - dependencies: - "@lerna/child-process" "5.5.4" - "@lerna/command" "5.5.4" - "@lerna/filter-options" "5.5.4" - "@lerna/profiler" "5.5.4" - "@lerna/run-topologically" "5.5.4" - "@lerna/validation-error" "5.5.4" +"@lerna/exec@5.6.2": + "integrity" "sha512-meZozok5stK7S0oAVn+kdbTmU+kHj9GTXjW7V8kgwG9ld+JJMTH3nKK1L3mEKyk9TFu9vFWyEOF7HNK6yEOoVg==" + "resolved" "https://registry.npmjs.org/@lerna/exec/-/exec-5.6.2.tgz" + "version" "5.6.2" + dependencies: + "@lerna/child-process" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/filter-options" "5.6.2" + "@lerna/profiler" "5.6.2" + "@lerna/run-topologically" "5.6.2" + "@lerna/validation-error" "5.6.2" "p-map" "^4.0.0" -"@lerna/filter-options@5.5.4": - "integrity" "sha512-t1amUypgloaKN8d3VN7GiJQd4ommDplxSisAMS8hztb6ail3EbxasRQ03GXz4+6yQ98sam+D03soqSWAJcinrw==" - "resolved" "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.5.4.tgz" - "version" "5.5.4" +"@lerna/filter-options@5.6.2": + "integrity" "sha512-4Z0HIhPak2TabTsUqEBQaQeOqgqEt0qyskvsY0oviYvqP/nrJfJBZh4H93jIiNQF59LJCn5Ce3KJJrLExxjlzw==" + "resolved" "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/collect-updates" "5.5.4" - "@lerna/filter-packages" "5.5.4" + "@lerna/collect-updates" "5.6.2" + "@lerna/filter-packages" "5.6.2" "dedent" "^0.7.0" "npmlog" "^6.0.2" -"@lerna/filter-packages@5.5.4": - "integrity" "sha512-mwpiF+L0np003AUp3ntKEFkNOXWBONwm9q8rW9TOR8OeqMXbxYWGLg2IR+Wc8EClmen79tahn076nUD85OLqew==" - "resolved" "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.5.4.tgz" - "version" "5.5.4" +"@lerna/filter-packages@5.6.2": + "integrity" "sha512-el9V2lTEG0Bbz+Omo45hATkRVnChCTJhcTpth19cMJ6mQ4M5H4IgbWCJdFMBi/RpTnOhz9BhJxDbj95kuIvvzw==" + "resolved" "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/validation-error" "5.5.4" + "@lerna/validation-error" "5.6.2" "multimatch" "^5.0.0" "npmlog" "^6.0.2" -"@lerna/get-npm-exec-opts@5.5.4": - "integrity" "sha512-PLvSdt0woeOz3TZDHRshYVR9TSOUNunxZ4mE8f0tg9FPQ5R1uuwd2BF4HmEL7AlWFtFS+sOwuL9bI1btV1ELew==" - "resolved" "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.5.4.tgz" - "version" "5.5.4" +"@lerna/get-npm-exec-opts@5.6.2": + "integrity" "sha512-0RbSDJ+QC9D5UWZJh3DN7mBIU1NhBmdHOE289oHSkjDY+uEjdzMPkEUy+wZ8fCzMLFnnNQkAEqNaOAzZ7dmFLA==" + "resolved" "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.6.2.tgz" + "version" "5.6.2" dependencies: "npmlog" "^6.0.2" -"@lerna/get-packed@5.5.4": - "integrity" "sha512-BXQcQ5rfdIa8hkDd4UdETWs9mDiFvmBRpSNxpgaRiuL1w7AXEaMREQgKOFiv8fv/e+z/F0SXD048Fptj8d5pjA==" - "resolved" "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.5.4.tgz" - "version" "5.5.4" +"@lerna/get-packed@5.6.2": + "integrity" "sha512-pp5nNDmtrtd21aKHjwwOY5CS7XNIHxINzGa+Jholn1jMDYUtdskpN++ZqYbATGpW831++NJuiuBVyqAWi9xbXg==" + "resolved" "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.6.2.tgz" + "version" "5.6.2" dependencies: "fs-extra" "^9.1.0" "ssri" "^9.0.1" "tar" "^6.1.0" -"@lerna/github-client@5.5.4": - "integrity" "sha512-m5vTRsHyfzh16T3fX3ipdjZyQwl4Gnwav4RmEaVUFp2uMqsr0TrML7LJ/eqOqjGvj/+JWa52rIQsUCQe9BJYag==" - "resolved" "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.5.4.tgz" - "version" "5.5.4" +"@lerna/github-client@5.6.2": + "integrity" "sha512-pjALazZoRZtKqfwLBwmW3HPptVhQm54PvA8s3qhCQ+3JkqrZiIFwkkxNZxs3jwzr+aaSOzfhSzCndg0urb0GXA==" + "resolved" "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/child-process" "5.5.4" + "@lerna/child-process" "5.6.2" "@octokit/plugin-enterprise-rest" "^6.0.1" "@octokit/rest" "^19.0.3" "git-url-parse" "^13.1.0" "npmlog" "^6.0.2" -"@lerna/gitlab-client@5.5.4": - "integrity" "sha512-vPSr6xFxtOigFY/fE8oYF+360WsV+g2ZkoJB34FA6UucjWBBPu2W13ydUYfqvJYODJYFzhTjB9b8zf0MJ0KMrQ==" - "resolved" "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.5.4.tgz" - "version" "5.5.4" +"@lerna/gitlab-client@5.6.2": + "integrity" "sha512-TInJmbrsmYIwUyrRxytjO82KjJbRwm67F7LoZs1shAq6rMvNqi4NxSY9j+hT/939alFmEq1zssoy/caeLXHRfQ==" + "resolved" "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.6.2.tgz" + "version" "5.6.2" dependencies: "node-fetch" "^2.6.1" "npmlog" "^6.0.2" -"@lerna/global-options@5.5.4": - "integrity" "sha512-J2K4CsnYuKrW7bDR2gRABUFFrLaJ5z4GaaDpaKtQi6sHFKcVBfYz0B51Fe3NGFOvrct4YS9N7SgKDxPd5Nznig==" - "resolved" "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.5.4.tgz" - "version" "5.5.4" +"@lerna/global-options@5.6.2": + "integrity" "sha512-kaKELURXTlczthNJskdOvh6GGMyt24qat0xMoJZ8plYMdofJfhz24h1OFcvB/EwCUwP/XV1+ohE5P+vdktbrEg==" + "resolved" "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.6.2.tgz" + "version" "5.6.2" -"@lerna/has-npm-version@5.5.4": - "integrity" "sha512-l+nDc/QYvfA5f0tFxzd9mZ/SP0nfxbqpZ9csGyqU8NV/40fHRRouO+fcLtxjcG/mruMjiAB/P216BBbRmGb2VA==" - "resolved" "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.5.4.tgz" - "version" "5.5.4" +"@lerna/has-npm-version@5.6.2": + "integrity" "sha512-kXCnSzffmTWsaK0ol30coyCfO8WH26HFbmJjRBzKv7VGkuAIcB6gX2gqRRgNLLlvI+Yrp+JSlpVNVnu15SEH2g==" + "resolved" "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/child-process" "5.5.4" + "@lerna/child-process" "5.6.2" "semver" "^7.3.4" -"@lerna/import@5.5.4": - "integrity" "sha512-1edy4e+0w4/awahc3uPvRQngIHbri5BGZZbjvsX8aKlPUd9pFg5U9/5w3lVE5jnZFRnqwhpJyyvJjL2M5F6IgQ==" - "resolved" "https://registry.npmjs.org/@lerna/import/-/import-5.5.4.tgz" - "version" "5.5.4" +"@lerna/import@5.6.2": + "integrity" "sha512-xQUE49mtcP0z3KUdXBsyvp8rGDz6phuYUoQbhcFRJ7WPcQKzMvtm0XYrER6c2YWEX7QOuDac6tU82P8zTrTBaA==" + "resolved" "https://registry.npmjs.org/@lerna/import/-/import-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/child-process" "5.5.4" - "@lerna/command" "5.5.4" - "@lerna/prompt" "5.5.4" - "@lerna/pulse-till-done" "5.5.4" - "@lerna/validation-error" "5.5.4" + "@lerna/child-process" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/prompt" "5.6.2" + "@lerna/pulse-till-done" "5.6.2" + "@lerna/validation-error" "5.6.2" "dedent" "^0.7.0" "fs-extra" "^9.1.0" "p-map-series" "^2.1.0" -"@lerna/info@5.5.4": - "integrity" "sha512-JgYRP2WZUCuiYyf3CQjqEMGoqWpM7t/bammKW/sC3P0/xGSykh45vdRwVojcu4fGRZ/YS7sfFt28Dbw4QFp0iQ==" - "resolved" "https://registry.npmjs.org/@lerna/info/-/info-5.5.4.tgz" - "version" "5.5.4" +"@lerna/info@5.6.2": + "integrity" "sha512-MPjY5Olj+fiZHgfEdwXUFRKamdEuLr9Ob/qut8JsB/oQSQ4ALdQfnrOcMT8lJIcC2R67EA5yav2lHPBIkezm8A==" + "resolved" "https://registry.npmjs.org/@lerna/info/-/info-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/command" "5.5.4" - "@lerna/output" "5.5.4" + "@lerna/command" "5.6.2" + "@lerna/output" "5.6.2" "envinfo" "^7.7.4" -"@lerna/init@5.5.4": - "integrity" "sha512-BteH3O8ywUN8eBhwzOey3gTXxxKRxGz1JJ6tP1mA0KZoJgiBsSFoZbx7SJeGrR8gY7kmEyvXTY1geaxmb7V+vQ==" - "resolved" "https://registry.npmjs.org/@lerna/init/-/init-5.5.4.tgz" - "version" "5.5.4" +"@lerna/init@5.6.2": + "integrity" "sha512-ahU3/lgF+J8kdJAQysihFJROHthkIDXfHmvhw7AYnzf94HjxGNXj7nz6i3At1/dM/1nQhR+4/uNR1/OU4tTYYQ==" + "resolved" "https://registry.npmjs.org/@lerna/init/-/init-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/child-process" "5.5.4" - "@lerna/command" "5.5.4" - "@lerna/project" "5.5.4" + "@lerna/child-process" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/project" "5.6.2" "fs-extra" "^9.1.0" "p-map" "^4.0.0" "write-json-file" "^4.3.0" -"@lerna/link@5.5.4": - "integrity" "sha512-/kFST918MLhvWbs3szbUw3/6pPa0/vS77WnHk8n3S3v/PuzUEjm9CncYrZ0xB1ZiGk6oa4YTPWMlqyYMY1k0hQ==" - "resolved" "https://registry.npmjs.org/@lerna/link/-/link-5.5.4.tgz" - "version" "5.5.4" +"@lerna/link@5.6.2": + "integrity" "sha512-hXxQ4R3z6rUF1v2x62oIzLyeHL96u7ZBhxqYMJrm763D1VMSDcHKF9CjJfc6J9vH5Z2ZbL6CQg50Hw5mUpJbjg==" + "resolved" "https://registry.npmjs.org/@lerna/link/-/link-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/command" "5.5.4" - "@lerna/package-graph" "5.5.4" - "@lerna/symlink-dependencies" "5.5.4" - "@lerna/validation-error" "5.5.4" + "@lerna/command" "5.6.2" + "@lerna/package-graph" "5.6.2" + "@lerna/symlink-dependencies" "5.6.2" + "@lerna/validation-error" "5.6.2" "p-map" "^4.0.0" "slash" "^3.0.0" -"@lerna/list@5.5.4": - "integrity" "sha512-ppLy99mQYoDkO+SxqnknPYqOnO+iJskb0G2h2fLF4ZK98oy2duJWkkehagwCVtmPax/DqWDDc/IAj+KWpcC0bQ==" - "resolved" "https://registry.npmjs.org/@lerna/list/-/list-5.5.4.tgz" - "version" "5.5.4" +"@lerna/list@5.6.2": + "integrity" "sha512-WjE5O2tQ3TcS+8LqXUaxi0YdldhxUhNihT5+Gg4vzGdIlrPDioO50Zjo9d8jOU7i3LMIk6EzCma0sZr2CVfEGg==" + "resolved" "https://registry.npmjs.org/@lerna/list/-/list-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/command" "5.5.4" - "@lerna/filter-options" "5.5.4" - "@lerna/listable" "5.5.4" - "@lerna/output" "5.5.4" + "@lerna/command" "5.6.2" + "@lerna/filter-options" "5.6.2" + "@lerna/listable" "5.6.2" + "@lerna/output" "5.6.2" -"@lerna/listable@5.5.4": - "integrity" "sha512-c6acWwSDQE5zeBcnH3m+mwfDr3zr515LsC30tXRenkqp4lbXeyrUPw0Mckw1ksw2nyb5LZl8gQnrFbAKC8gBSA==" - "resolved" "https://registry.npmjs.org/@lerna/listable/-/listable-5.5.4.tgz" - "version" "5.5.4" +"@lerna/listable@5.6.2": + "integrity" "sha512-8Yp49BwkY/5XqVru38Zko+6Wj/sgbwzJfIGEPy3Qu575r1NA/b9eI1gX22aMsEeXUeGOybR7nWT5ewnPQHjqvA==" + "resolved" "https://registry.npmjs.org/@lerna/listable/-/listable-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/query-graph" "5.5.4" + "@lerna/query-graph" "5.6.2" "chalk" "^4.1.0" "columnify" "^1.6.0" -"@lerna/log-packed@5.5.4": - "integrity" "sha512-g3lW5yIIe66aVTOYn78+h21GR9gr/WdU3/z8jm0VzGC+VR7KqCKU+49JOCOh7LlNf7sY4ZE6ZbaZptp5wUjrgQ==" - "resolved" "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.5.4.tgz" - "version" "5.5.4" +"@lerna/log-packed@5.6.2": + "integrity" "sha512-O9GODG7tMtWk+2fufn2MOkIDBYMRoKBhYMHshO5Aw/VIsH76DIxpX1koMzWfUngM/C70R4uNAKcVWineX4qzIw==" + "resolved" "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.6.2.tgz" + "version" "5.6.2" dependencies: "byte-size" "^7.0.0" "columnify" "^1.6.0" "has-unicode" "^2.0.1" "npmlog" "^6.0.2" -"@lerna/npm-conf@5.5.4": - "integrity" "sha512-BwnP0ezR84nQ5Sh0CdH77Q8evDcqP9bFUdjX6eZT4Rxl0432ocB1YpweNnUDQO4Boxj/FiOu/OaE0Kej+I+5ew==" - "resolved" "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.5.4.tgz" - "version" "5.5.4" +"@lerna/npm-conf@5.6.2": + "integrity" "sha512-gWDPhw1wjXYXphk/PAghTLexO5T6abVFhXb+KOMCeem366mY0F5bM88PiorL73aErTNUoR8n+V4X29NTZzDZpQ==" + "resolved" "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.6.2.tgz" + "version" "5.6.2" dependencies: "config-chain" "^1.1.12" "pify" "^5.0.0" -"@lerna/npm-dist-tag@5.5.4": - "integrity" "sha512-aAisCh5b2+6cjLxZh03/MGGcBjL7KNBWi5qW6OCdQQpcxH5r0aUJ5F1rmXJE0qxgsLWaGRLzngWk+v6VJHqYJQ==" - "resolved" "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.5.4.tgz" - "version" "5.5.4" +"@lerna/npm-dist-tag@5.6.2": + "integrity" "sha512-t2RmxV6Eog4acXkUI+EzWuYVbeVVY139pANIWS9qtdajfgp4GVXZi1S8mAIb70yeHdNpCp1mhK0xpCrFH9LvGQ==" + "resolved" "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/otplease" "5.5.4" + "@lerna/otplease" "5.6.2" "npm-package-arg" "8.1.1" "npm-registry-fetch" "^13.3.0" "npmlog" "^6.0.2" -"@lerna/npm-install@5.5.4": - "integrity" "sha512-lglf2KRxg30dCvNWwxQRJmCfXC51byNqYQt9/dFrnWcotHwpNRIFnVM3tWMdVxlwJMiozU/PjUFBateaxmukXw==" - "resolved" "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.5.4.tgz" - "version" "5.5.4" +"@lerna/npm-install@5.6.2": + "integrity" "sha512-AT226zdEo+uGENd37jwYgdALKJAIJK4pNOfmXWZWzVb9oMOr8I2YSjPYvSYUNG7gOo2YJQU8x5Zd7OShv2924Q==" + "resolved" "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/child-process" "5.5.4" - "@lerna/get-npm-exec-opts" "5.5.4" + "@lerna/child-process" "5.6.2" + "@lerna/get-npm-exec-opts" "5.6.2" "fs-extra" "^9.1.0" "npm-package-arg" "8.1.1" "npmlog" "^6.0.2" "signal-exit" "^3.0.3" "write-pkg" "^4.0.0" -"@lerna/npm-publish@5.5.4": - "integrity" "sha512-Z3GQqby0FR7HW82/t7j7nOF9pfSwNVmgms0zTq7a8YaEe8uDlAxGMW4sVN8uT89mZfBfS6R1WMlBbC5Ea+jy/A==" - "resolved" "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.5.4.tgz" - "version" "5.5.4" +"@lerna/npm-publish@5.6.2": + "integrity" "sha512-ldSyewCfv9fAeC5xNjL0HKGSUxcC048EJoe/B+KRUmd+IPidvZxMEzRu08lSC/q3V9YeUv9ZvRnxATXOM8CffA==" + "resolved" "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/otplease" "5.5.4" - "@lerna/run-lifecycle" "5.5.4" + "@lerna/otplease" "5.6.2" + "@lerna/run-lifecycle" "5.6.2" "fs-extra" "^9.1.0" "libnpmpublish" "^6.0.4" "npm-package-arg" "8.1.1" @@ -1635,85 +1631,85 @@ "pify" "^5.0.0" "read-package-json" "^5.0.1" -"@lerna/npm-run-script@5.5.4": - "integrity" "sha512-fwHZRTGUldN9D2Rugg0HdwE8A8OZ7CF7g63y7OjzIoxASqtZBDyHZgrVbY/xZcrhqCF0+VJ1vR0c/uFwtWFrtA==" - "resolved" "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.5.4.tgz" - "version" "5.5.4" +"@lerna/npm-run-script@5.6.2": + "integrity" "sha512-MOQoWNcAyJivM8SYp0zELM7vg/Dj07j4YMdxZkey+S1UO0T4/vKBxb575o16hH4WeNzC3Pd7WBlb7C8dLOfNwQ==" + "resolved" "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/child-process" "5.5.4" - "@lerna/get-npm-exec-opts" "5.5.4" + "@lerna/child-process" "5.6.2" + "@lerna/get-npm-exec-opts" "5.6.2" "npmlog" "^6.0.2" -"@lerna/otplease@5.5.4": - "integrity" "sha512-c/tSjuMGw0esoxqtW0Qs2gCcvFDCrOlFnd4EgTJQKUSbNwVrabMkDJRMP0zu7UiSYJCCWKlBnjpBCiBXNG2H4A==" - "resolved" "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.5.4.tgz" - "version" "5.5.4" +"@lerna/otplease@5.6.2": + "integrity" "sha512-dGS4lzkEQVTMAgji82jp8RK6UK32wlzrBAO4P4iiVHCUTuwNLsY9oeBXvVXSMrosJnl6Hbe0NOvi43mqSucGoA==" + "resolved" "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/prompt" "5.5.4" + "@lerna/prompt" "5.6.2" -"@lerna/output@5.5.4": - "integrity" "sha512-qiYtDQ4k9sXzXRlbSuLUFDNLk42sJY3n7x7fWKt6v5I9s2uh5d3cBctBuvV8+YX82H1inQ9hpyFafzOBO8tbCA==" - "resolved" "https://registry.npmjs.org/@lerna/output/-/output-5.5.4.tgz" - "version" "5.5.4" +"@lerna/output@5.6.2": + "integrity" "sha512-++d+bfOQwY66yo7q1XuAvRcqtRHCG45e/awP5xQomTZ6R1rhWiZ3whWdc9Z6lF7+UtBB9toSYYffKU/xc3L0yQ==" + "resolved" "https://registry.npmjs.org/@lerna/output/-/output-5.6.2.tgz" + "version" "5.6.2" dependencies: "npmlog" "^6.0.2" -"@lerna/pack-directory@5.5.4": - "integrity" "sha512-yUhu8ADzUZOZPfimMwlxxuxIweXitMKTVAmhz9eruiNHxsc0GpKb89yemep03iXqtrjC1Pt/QsS+dhJNNKdZ4A==" - "resolved" "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.5.4.tgz" - "version" "5.5.4" +"@lerna/pack-directory@5.6.2": + "integrity" "sha512-w5Jk5fo+HkN4Le7WMOudTcmAymcf0xPd302TqAQncjXpk0cb8tZbj+5bbNHsGb58GRjOIm5icQbHXooQUxbHhA==" + "resolved" "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/get-packed" "5.5.4" - "@lerna/package" "5.5.4" - "@lerna/run-lifecycle" "5.5.4" - "@lerna/temp-write" "5.5.4" + "@lerna/get-packed" "5.6.2" + "@lerna/package" "5.6.2" + "@lerna/run-lifecycle" "5.6.2" + "@lerna/temp-write" "5.6.2" "npm-packlist" "^5.1.1" "npmlog" "^6.0.2" "tar" "^6.1.0" -"@lerna/package-graph@5.5.4": - "integrity" "sha512-1g0c08mooZBtrIG8gMOdpbZ3rn5VM+e47pLFAXZcfGUaNUfc0OM58Z50ONiJq23XlJmS4vQ2e4X3cs7Hc7+Dxw==" - "resolved" "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.5.4.tgz" - "version" "5.5.4" +"@lerna/package-graph@5.6.2": + "integrity" "sha512-TmL61qBBvA3Tc4qICDirZzdFFwWOA6qicIXUruLiE2PblRowRmCO1bKrrP6XbDOspzwrkPef6N2F2/5gHQAnkQ==" + "resolved" "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/prerelease-id-from-version" "5.5.4" - "@lerna/validation-error" "5.5.4" + "@lerna/prerelease-id-from-version" "5.6.2" + "@lerna/validation-error" "5.6.2" "npm-package-arg" "8.1.1" "npmlog" "^6.0.2" "semver" "^7.3.4" -"@lerna/package@5.5.4": - "integrity" "sha512-wpBcq4zVFVQOJI9QT0TJItRjl6jGSGFp93n4D8KHXXiyeKmN9CW4EnwFY9bnT3r5OteZN+eorD6r2TnRe8VPDg==" - "resolved" "https://registry.npmjs.org/@lerna/package/-/package-5.5.4.tgz" - "version" "5.5.4" +"@lerna/package@5.6.2": + "integrity" "sha512-LaOC8moyM5J9WnRiWZkedjOninSclBOJyPqhif6mHb2kCFX6jAroNYzE8KM4cphu8CunHuhI6Ixzswtv+Dultw==" + "resolved" "https://registry.npmjs.org/@lerna/package/-/package-5.6.2.tgz" + "version" "5.6.2" dependencies: "load-json-file" "^6.2.0" "npm-package-arg" "8.1.1" "write-pkg" "^4.0.0" -"@lerna/prerelease-id-from-version@5.5.4": - "integrity" "sha512-IHNQxbILrRGhw9CCdqy0ncSjDpNvdJCcaGFh3+TJRx6Bjhl5ifbUjI0gBUxd7i5Aict5dguWlhAWHQpef48AqA==" - "resolved" "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.5.4.tgz" - "version" "5.5.4" +"@lerna/prerelease-id-from-version@5.6.2": + "integrity" "sha512-7gIm9fecWFVNy2kpj/KbH11bRcpyANAwpsft3X5m6J7y7A6FTUscCbEvl3ZNdpQKHNuvnHgCtkm3A5PMSCEgkA==" + "resolved" "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.6.2.tgz" + "version" "5.6.2" dependencies: "semver" "^7.3.4" -"@lerna/profiler@5.5.4": - "integrity" "sha512-LPnO8mXhXSBT8PD5pEWkgd+2d8lJqQ0fnwcIPG0B8o6tnQrSc2gXLNxStYOFedzcZXRhAYiFVrf5VjOKHV6Ghw==" - "resolved" "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.5.4.tgz" - "version" "5.5.4" +"@lerna/profiler@5.6.2": + "integrity" "sha512-okwkagP5zyRIOYTceu/9/esW7UZFt7lyL6q6ZgpSG3TYC5Ay+FXLtS6Xiha/FQdVdumFqKULDWTGovzUlxcwaw==" + "resolved" "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.6.2.tgz" + "version" "5.6.2" dependencies: "fs-extra" "^9.1.0" "npmlog" "^6.0.2" "upath" "^2.0.1" -"@lerna/project@5.5.4": - "integrity" "sha512-iLdyc+jPU0cR6BQO3V3Sf51WP3Oac+I/+518dIGdWS7ot9nEbjuZripHJjIkyZKSfnKPTEtz2aUta0ndoewwuQ==" - "resolved" "https://registry.npmjs.org/@lerna/project/-/project-5.5.4.tgz" - "version" "5.5.4" +"@lerna/project@5.6.2": + "integrity" "sha512-kPIMcIy/0DVWM91FPMMFmXyAnCuuLm3NdhnA8NusE//VuY9wC6QC/3OwuCY39b2dbko/fPZheqKeAZkkMH6sGg==" + "resolved" "https://registry.npmjs.org/@lerna/project/-/project-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/package" "5.5.4" - "@lerna/validation-error" "5.5.4" + "@lerna/package" "5.6.2" + "@lerna/validation-error" "5.6.2" "cosmiconfig" "^7.0.0" "dedent" "^0.7.0" "dot-prop" "^6.0.1" @@ -1726,38 +1722,38 @@ "resolve-from" "^5.0.0" "write-json-file" "^4.3.0" -"@lerna/prompt@5.5.4": - "integrity" "sha512-X8H2V4dDkFLYzZkMTillvuGAphU5fTDR66HgZlhgKtbJjm7OrjxhoRdk/YlMpI+HdYwXhdUzhEe9YJEhqhfe6w==" - "resolved" "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.5.4.tgz" - "version" "5.5.4" +"@lerna/prompt@5.6.2": + "integrity" "sha512-4hTNmVYADEr0GJTMegWV+GW6n+dzKx1vN9v2ISqyle283Myv930WxuyO0PeYGqTrkneJsyPreCMovuEGCvZ0iQ==" + "resolved" "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.6.2.tgz" + "version" "5.6.2" dependencies: "inquirer" "^8.2.4" "npmlog" "^6.0.2" -"@lerna/publish@5.5.4": - "integrity" "sha512-zBlZsk+NBUfg4o7ycKH8/hc4NRJWd4RmxB6Kn7xo7MOJMW3x+K4aABcqY2GGxEMUxx3rBBVPIdziVWbyS7UIxA==" - "resolved" "https://registry.npmjs.org/@lerna/publish/-/publish-5.5.4.tgz" - "version" "5.5.4" - dependencies: - "@lerna/check-working-tree" "5.5.4" - "@lerna/child-process" "5.5.4" - "@lerna/collect-updates" "5.5.4" - "@lerna/command" "5.5.4" - "@lerna/describe-ref" "5.5.4" - "@lerna/log-packed" "5.5.4" - "@lerna/npm-conf" "5.5.4" - "@lerna/npm-dist-tag" "5.5.4" - "@lerna/npm-publish" "5.5.4" - "@lerna/otplease" "5.5.4" - "@lerna/output" "5.5.4" - "@lerna/pack-directory" "5.5.4" - "@lerna/prerelease-id-from-version" "5.5.4" - "@lerna/prompt" "5.5.4" - "@lerna/pulse-till-done" "5.5.4" - "@lerna/run-lifecycle" "5.5.4" - "@lerna/run-topologically" "5.5.4" - "@lerna/validation-error" "5.5.4" - "@lerna/version" "5.5.4" +"@lerna/publish@5.6.2": + "integrity" "sha512-QaW0GjMJMuWlRNjeDCjmY/vjriGSWgkLS23yu8VKNtV5U3dt5yIKA3DNGV3HgZACuu45kQxzMDsfLzgzbGNtYA==" + "resolved" "https://registry.npmjs.org/@lerna/publish/-/publish-5.6.2.tgz" + "version" "5.6.2" + dependencies: + "@lerna/check-working-tree" "5.6.2" + "@lerna/child-process" "5.6.2" + "@lerna/collect-updates" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/describe-ref" "5.6.2" + "@lerna/log-packed" "5.6.2" + "@lerna/npm-conf" "5.6.2" + "@lerna/npm-dist-tag" "5.6.2" + "@lerna/npm-publish" "5.6.2" + "@lerna/otplease" "5.6.2" + "@lerna/output" "5.6.2" + "@lerna/pack-directory" "5.6.2" + "@lerna/prerelease-id-from-version" "5.6.2" + "@lerna/prompt" "5.6.2" + "@lerna/pulse-till-done" "5.6.2" + "@lerna/run-lifecycle" "5.6.2" + "@lerna/run-topologically" "5.6.2" + "@lerna/validation-error" "5.6.2" + "@lerna/version" "5.6.2" "fs-extra" "^9.1.0" "libnpmaccess" "^6.0.3" "npm-package-arg" "8.1.1" @@ -1768,99 +1764,99 @@ "pacote" "^13.6.1" "semver" "^7.3.4" -"@lerna/pulse-till-done@5.5.4": - "integrity" "sha512-xC4/QPnIQfrE1aA8W5w6AfaT0gTm8SeVmrsQzMMlUTJ2JAnflsHv1oG69M89xq2DrlXsEVaah56Xbjavy+woQg==" - "resolved" "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.5.4.tgz" - "version" "5.5.4" +"@lerna/pulse-till-done@5.6.2": + "integrity" "sha512-eA/X1RCxU5YGMNZmbgPi+Kyfx1Q3bn4P9jo/LZy+/NRRr1po3ASXP2GJZ1auBh/9A2ELDvvKTOXCVHqczKC6rA==" + "resolved" "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.6.2.tgz" + "version" "5.6.2" dependencies: "npmlog" "^6.0.2" -"@lerna/query-graph@5.5.4": - "integrity" "sha512-TJsmJ++3NpEs+LxF0B02hAv2HigJ9ffa9e+paK27oE8sTiH3YataMHaNu5ZkeotJTw7u0IiRLm0zi4z4xoRlLg==" - "resolved" "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.5.4.tgz" - "version" "5.5.4" +"@lerna/query-graph@5.6.2": + "integrity" "sha512-KRngr96yBP8XYDi9/U62fnGO+ZXqm04Qk6a2HtoTr/ha8QvO1s7Tgm0xs/G7qWXDQHZgunWIbmK/LhxM7eFQrw==" + "resolved" "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/package-graph" "5.5.4" + "@lerna/package-graph" "5.6.2" -"@lerna/resolve-symlink@5.5.4": - "integrity" "sha512-cAIXELf04dHx/XF/2njCM0bpiyup6Nedpmm1XNJzrJuWrGmwK2qW5F2wQ/RHXWXsLIe/BsOl/hfEONm7o7k8sA==" - "resolved" "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.5.4.tgz" - "version" "5.5.4" +"@lerna/resolve-symlink@5.6.2": + "integrity" "sha512-PDQy+7M8JEFtwIVHJgWvSxHkxJf9zXCENkvIWDB+SsoDPhw9+caewt46bTeP5iGm9pOMu3oZukaWo/TvF7sNjg==" + "resolved" "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.6.2.tgz" + "version" "5.6.2" dependencies: "fs-extra" "^9.1.0" "npmlog" "^6.0.2" "read-cmd-shim" "^3.0.0" -"@lerna/rimraf-dir@5.5.4": - "integrity" "sha512-++I7ToqICE4KSqi4T8enfcou8XPZV3gmrpARVD9VW4Tz3w8BP/JijB6AJwgZKojdqQenXU7u3lLTzfepKN1iOA==" - "resolved" "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.5.4.tgz" - "version" "5.5.4" +"@lerna/rimraf-dir@5.6.2": + "integrity" "sha512-jgEfzz7uBUiQKteq3G8MtJiA2D2VoKmZSSY3VSiW/tPOSXYxxSHxEsClQdCeNa6+sYrDNDT8fP6MJ3lPLjDeLA==" + "resolved" "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/child-process" "5.5.4" + "@lerna/child-process" "5.6.2" "npmlog" "^6.0.2" "path-exists" "^4.0.0" "rimraf" "^3.0.2" -"@lerna/run-lifecycle@5.5.4": - "integrity" "sha512-MIE8HJml8gWkH5jt/5omiPr69VUMUPwvhkf6Irpg5yxIE5K4oeViVZMay2v6cPA9jAeTDCshHb7gt2EPBSsYQA==" - "resolved" "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.5.4.tgz" - "version" "5.5.4" +"@lerna/run-lifecycle@5.6.2": + "integrity" "sha512-u9gGgq/50Fm8dvfcc/TSHOCAQvzLD7poVanDMhHYWOAqRDnellJEEmA1K/Yka4vZmySrzluahkry9G6jcREt+g==" + "resolved" "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/npm-conf" "5.5.4" + "@lerna/npm-conf" "5.6.2" "@npmcli/run-script" "^4.1.7" "npmlog" "^6.0.2" "p-queue" "^6.6.2" -"@lerna/run-topologically@5.5.4": - "integrity" "sha512-p1UNHgR8sOaS40nVD0HyqwmawDXBOikIibjbJLcY2QuvWwzAGKjfWm/sAXagYjgzaPYQAhaHyOxTdGe8T+a7uQ==" - "resolved" "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.5.4.tgz" - "version" "5.5.4" +"@lerna/run-topologically@5.6.2": + "integrity" "sha512-QQ/jGOIsVvUg3izShWsd67RlWYh9UOH2yw97Ol1zySX9+JspCMVQrn9eKq1Pk8twQOFhT87LpT/aaxbTBgREPw==" + "resolved" "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/query-graph" "5.5.4" + "@lerna/query-graph" "5.6.2" "p-queue" "^6.6.2" -"@lerna/run@5.5.4": - "integrity" "sha512-R9g+4nfIDgK+I4RleAJpXrStzLlUCEHR/rxH2t5LJ6DLaoKUG6oeRZsf2w/It/r2IMV1dq2xG6chs+H1o1J+Ow==" - "resolved" "https://registry.npmjs.org/@lerna/run/-/run-5.5.4.tgz" - "version" "5.5.4" - dependencies: - "@lerna/command" "5.5.4" - "@lerna/filter-options" "5.5.4" - "@lerna/npm-run-script" "5.5.4" - "@lerna/output" "5.5.4" - "@lerna/profiler" "5.5.4" - "@lerna/run-topologically" "5.5.4" - "@lerna/timer" "5.5.4" - "@lerna/validation-error" "5.5.4" +"@lerna/run@5.6.2": + "integrity" "sha512-c2kJxdFrNg5KOkrhmgwKKUOsfSrGNlFCe26EttufOJ3xfY0VnXlEw9rHOkTgwtu7969rfCdyaVP1qckMrF1Dgw==" + "resolved" "https://registry.npmjs.org/@lerna/run/-/run-5.6.2.tgz" + "version" "5.6.2" + dependencies: + "@lerna/command" "5.6.2" + "@lerna/filter-options" "5.6.2" + "@lerna/npm-run-script" "5.6.2" + "@lerna/output" "5.6.2" + "@lerna/profiler" "5.6.2" + "@lerna/run-topologically" "5.6.2" + "@lerna/timer" "5.6.2" + "@lerna/validation-error" "5.6.2" "fs-extra" "^9.1.0" "p-map" "^4.0.0" -"@lerna/symlink-binary@5.5.4": - "integrity" "sha512-FVhkL8KIgk0gPJV136Sl0/t3LD3qDngIRqJVNPIbATVHagkLVsuJM6+BcdWLxoMUCtwHIyWqgcXn1Oa/DVSUEA==" - "resolved" "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.5.4.tgz" - "version" "5.5.4" +"@lerna/symlink-binary@5.6.2": + "integrity" "sha512-Cth+miwYyO81WAmrQbPBrLHuF+F0UUc0el5kRXLH6j5zzaRS3kMM68r40M7MmfH8m3GPi7691UARoWFEotW5jw==" + "resolved" "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/create-symlink" "5.5.4" - "@lerna/package" "5.5.4" + "@lerna/create-symlink" "5.6.2" + "@lerna/package" "5.6.2" "fs-extra" "^9.1.0" "p-map" "^4.0.0" -"@lerna/symlink-dependencies@5.5.4": - "integrity" "sha512-BfOcATr0TreXRfIhIRvgGCT2o8uEqrwVLo8edCQICeqgju19fFn22Qmyb8LW+LMJjBUuSkpJDqqamQ6nj3Ch2A==" - "resolved" "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.5.4.tgz" - "version" "5.5.4" +"@lerna/symlink-dependencies@5.6.2": + "integrity" "sha512-dUVNQLEcjVOIQiT9OlSAKt0ykjyJPy8l9i4NJDe2/0XYaUjo8PWsxJ0vrutz27jzi2aZUy07ASmowQZEmnLHAw==" + "resolved" "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.6.2.tgz" + "version" "5.6.2" dependencies: - "@lerna/create-symlink" "5.5.4" - "@lerna/resolve-symlink" "5.5.4" - "@lerna/symlink-binary" "5.5.4" + "@lerna/create-symlink" "5.6.2" + "@lerna/resolve-symlink" "5.6.2" + "@lerna/symlink-binary" "5.6.2" "fs-extra" "^9.1.0" "p-map" "^4.0.0" "p-map-series" "^2.1.0" -"@lerna/temp-write@5.5.4": - "integrity" "sha512-cJy9f9uSvnPxfc2a1ARapGLJXllQlJKKb0idi8aA3ylvgDA7grfKIDPdkf6cBcpPAq8aixDq9GdCZ6oLKdISeA==" - "resolved" "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.5.4.tgz" - "version" "5.5.4" +"@lerna/temp-write@5.6.2": + "integrity" "sha512-S5ZNVTurSwWBmc9kh5alfSjmO3+BnRT6shYtOlmVIUYqWeYVYA5C1Htj322bbU4CSNCMFK6NQl4qGKL17HMuig==" + "resolved" "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.6.2.tgz" + "version" "5.6.2" dependencies: "graceful-fs" "^4.1.15" "is-stream" "^2.0.0" @@ -1868,37 +1864,38 @@ "temp-dir" "^1.0.0" "uuid" "^8.3.2" -"@lerna/timer@5.5.4": - "integrity" "sha512-B3eesmrNaw64Svo2pkmCtBVIJbomegiOMrdxFkZrf8ugTKwobn3KSZZkdbN+hjq8SKpRz3XgtjAuSFUzdg8c3A==" - "resolved" "https://registry.npmjs.org/@lerna/timer/-/timer-5.5.4.tgz" - "version" "5.5.4" +"@lerna/timer@5.6.2": + "integrity" "sha512-AjMOiLc2B+5Nzdd9hNORetAdZ/WK8YNGX/+2ypzM68TMAPfIT5C40hMlSva9Yg4RsBz22REopXgM5s2zQd5ZQA==" + "resolved" "https://registry.npmjs.org/@lerna/timer/-/timer-5.6.2.tgz" + "version" "5.6.2" -"@lerna/validation-error@5.5.4": - "integrity" "sha512-FUC3x40zBAu0ny1AWXT38LOVRaSJkjdAv9GiYLu9sx+7T7X18q38zPFyVPIIhrrTJsNNWkro/NTA7r4/BcdvoQ==" - "resolved" "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.5.4.tgz" - "version" "5.5.4" +"@lerna/validation-error@5.6.2": + "integrity" "sha512-4WlDUHaa+RSJNyJRtX3gVIAPVzjZD2tle8AJ0ZYBfdZnZmG0VlB2pD1FIbOQPK8sY2h5m0cHLRvfLoLncqHvdQ==" + "resolved" "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.6.2.tgz" + "version" "5.6.2" dependencies: "npmlog" "^6.0.2" -"@lerna/version@5.5.4": - "integrity" "sha512-J39m2KfhkkDzfCUjnC2+UbBrWBRs1TkrvFlHFbb8wHUOY5bs+dj5RLyUchF/VJOYFSJXr8LLQFdMPeptF2wItg==" - "resolved" "https://registry.npmjs.org/@lerna/version/-/version-5.5.4.tgz" - "version" "5.5.4" - dependencies: - "@lerna/check-working-tree" "5.5.4" - "@lerna/child-process" "5.5.4" - "@lerna/collect-updates" "5.5.4" - "@lerna/command" "5.5.4" - "@lerna/conventional-commits" "5.5.4" - "@lerna/github-client" "5.5.4" - "@lerna/gitlab-client" "5.5.4" - "@lerna/output" "5.5.4" - "@lerna/prerelease-id-from-version" "5.5.4" - "@lerna/prompt" "5.5.4" - "@lerna/run-lifecycle" "5.5.4" - "@lerna/run-topologically" "5.5.4" - "@lerna/temp-write" "5.5.4" - "@lerna/validation-error" "5.5.4" +"@lerna/version@5.6.2": + "integrity" "sha512-odNSR2rTbHW++xMZSQKu/F6Syrd/sUvwDLPaMKktoOSPKmycHt/eWcuQQyACdtc43Iqeu4uQd7PCLsniqOVFrw==" + "resolved" "https://registry.npmjs.org/@lerna/version/-/version-5.6.2.tgz" + "version" "5.6.2" + dependencies: + "@lerna/check-working-tree" "5.6.2" + "@lerna/child-process" "5.6.2" + "@lerna/collect-updates" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/conventional-commits" "5.6.2" + "@lerna/github-client" "5.6.2" + "@lerna/gitlab-client" "5.6.2" + "@lerna/output" "5.6.2" + "@lerna/prerelease-id-from-version" "5.6.2" + "@lerna/prompt" "5.6.2" + "@lerna/run-lifecycle" "5.6.2" + "@lerna/run-topologically" "5.6.2" + "@lerna/temp-write" "5.6.2" + "@lerna/validation-error" "5.6.2" + "@nrwl/devkit" ">=14.8.1 < 16" "chalk" "^4.1.0" "dedent" "^0.7.0" "load-json-file" "^6.2.0" @@ -1912,10 +1909,10 @@ "slash" "^3.0.0" "write-json-file" "^4.3.0" -"@lerna/write-log-file@5.5.4": - "integrity" "sha512-PDdVuWHLkMw6ygP1hKTciphmYKRDTmNJASxVlxxOv9UkZe7QQvfke0i/OXNPRZHJK7eKCtv2Zu91amE8qCjVNw==" - "resolved" "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.5.4.tgz" - "version" "5.5.4" +"@lerna/write-log-file@5.6.2": + "integrity" "sha512-J09l18QnWQ3sXIRwuJkjXY3+KwPR2uO5NgbZGE3GXJK1V/LzOBRMvjGAIbuQHXw25uqe7vpLUpB8drtnFrubCQ==" + "resolved" "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.6.2.tgz" + "version" "5.6.2" dependencies: "npmlog" "^6.0.2" "write-file-atomic" "^4.0.1" @@ -1972,7 +1969,7 @@ "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" "version" "2.0.5" -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" "version" "1.2.8" @@ -2113,9 +2110,9 @@ "rustbn.js" "~0.2.0" "@nomicfoundation/hardhat-chai-matchers@^1.0.0", "@nomicfoundation/hardhat-chai-matchers@^1.0.3": - "integrity" "sha512-qEE7Drs2HSY+krH09TXm6P9LFogs0BqbUq6wPD7nQRhmJ+p5zoDaIZjM5WL1pHqU5MpGqya3y+BdwmTYBfU5UA==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.3.tgz" - "version" "1.0.3" + "integrity" "sha512-n/5UMwGaUK2zM8ALuMChVwB1lEPeDTb5oBjQ1g7hVsUdS8x+XG9JIEp4Ze6Bwy98tghA7Y1+PCH4SNE2P3UQ2g==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.4.tgz" + "version" "1.0.4" dependencies: "@ethersproject/abi" "^5.1.2" "@types/chai-as-promised" "^7.1.3" @@ -2136,31 +2133,31 @@ "resolved" "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-1.0.2.tgz" "version" "1.0.2" -"@nomicfoundation/solidity-analyzer-darwin-x64@0.0.3": - "integrity" "sha512-HuJd1K+2MgmFIYEpx46uzwEFjvzKAI765mmoMxy4K+Aqq1p+q7hHRlsFU2kx3NB8InwotkkIq3A5FLU1sI1WDw==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz" - "version" "0.0.3" +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.0": + "integrity" "sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz" + "version" "0.1.0" -"@nomicfoundation/solidity-analyzer@^0.0.3": - "integrity" "sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz" - "version" "0.0.3" +"@nomicfoundation/solidity-analyzer@^0.1.0": + "integrity" "sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz" + "version" "0.1.0" optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.0.3" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.0.3" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.0.3" + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.0" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.0" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.0" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.0" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.0" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.0" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.0" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.0" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.0" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.0" "@nomiclabs/hardhat-ethers@^2.0.0", "@nomiclabs/hardhat-ethers@^2.1.0": - "integrity" "sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA==" - "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz" - "version" "2.1.1" + "integrity" "sha512-RHWYwnxryWR8hzRmU4Jm/q4gzvXpetUOJ4OPlwH2YARcDB+j79+yAYCwO0lN1SUOb4++oOTJEe6AWLEc42LIvg==" + "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.1.tgz" + "version" "2.2.1" "@nomiclabs/hardhat-etherscan@^2.1.6", "@nomiclabs/hardhat-etherscan@^3.0.0": "integrity" "sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA==" @@ -2324,125 +2321,136 @@ "read-package-json-fast" "^2.0.3" "which" "^2.0.2" -"@nrwl/cli@14.8.3": - "integrity" "sha512-a8URAbqyZvegXMYU8pCA3Hfv0UdiDJc6HboazxinCJJgZWyqKYxRIWmKiWnfpXsr+qF6ntmBR/tC6yHbOL22gQ==" - "resolved" "https://registry.npmjs.org/@nrwl/cli/-/cli-14.8.3.tgz" - "version" "14.8.3" +"@nrwl/cli@15.0.3": + "integrity" "sha512-d023UTOWn9b37QtSMMmeBht5TH4oY8GkdC264I9BNrpvu3KNh6cDjhe0xas3d0zaOcR8Bn1LD5obPR3WOo/UUQ==" + "resolved" "https://registry.npmjs.org/@nrwl/cli/-/cli-15.0.3.tgz" + "version" "15.0.3" dependencies: - "nx" "14.8.3" + "nx" "15.0.3" -"@nrwl/tao@14.8.3": - "integrity" "sha512-lN7+1biSM/7PYMMgh3jjOXJ9fe6VjhVrtZsDcB6lcklpShjXfHXqlpXDM7vjlw19aLeZMdFWHFoU2C5BTBtzgQ==" - "resolved" "https://registry.npmjs.org/@nrwl/tao/-/tao-14.8.3.tgz" - "version" "14.8.3" +"@nrwl/devkit@>=14.8.1 < 16": + "integrity" "sha512-upFIXsIcI2nmsxOLK2YDZTmzmBKUVrBDA4pM9lkDmxe/N920e/rZnEpSwjoOYCQAJUWDgcrVOeFuMiUyTqe6Og==" + "resolved" "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.0.3.tgz" + "version" "15.0.3" dependencies: - "nx" "14.8.3" + "@phenomnomnominal/tsquery" "4.1.1" + "ejs" "^3.1.7" + "ignore" "^5.0.4" + "semver" "7.3.4" + "tslib" "^2.3.0" + +"@nrwl/tao@15.0.3": + "integrity" "sha512-4vxWMgb9XauVVKdytqh3razAl60u4M6526E5FYQCkC+OImwGA5Zpms0earYOwLh3XzSnTiooMT6XR9s06lTkHw==" + "resolved" "https://registry.npmjs.org/@nrwl/tao/-/tao-15.0.3.tgz" + "version" "15.0.3" + dependencies: + "nx" "15.0.3" "@octokit/auth-token@^3.0.0": - "integrity" "sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA==" - "resolved" "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.1.tgz" - "version" "3.0.1" + "integrity" "sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==" + "resolved" "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz" + "version" "3.0.2" dependencies: - "@octokit/types" "^7.0.0" + "@octokit/types" "^8.0.0" -"@octokit/core@^4.0.0", "@octokit/core@>=3", "@octokit/core@>=4": - "integrity" "sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA==" - "resolved" "https://registry.npmjs.org/@octokit/core/-/core-4.0.5.tgz" - "version" "4.0.5" +"@octokit/core@^4.1.0", "@octokit/core@>=3", "@octokit/core@>=4": + "integrity" "sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ==" + "resolved" "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz" + "version" "4.1.0" dependencies: "@octokit/auth-token" "^3.0.0" "@octokit/graphql" "^5.0.0" "@octokit/request" "^6.0.0" "@octokit/request-error" "^3.0.0" - "@octokit/types" "^7.0.0" + "@octokit/types" "^8.0.0" "before-after-hook" "^2.2.0" "universal-user-agent" "^6.0.0" "@octokit/endpoint@^7.0.0": - "integrity" "sha512-8/AUACfE9vpRpehE6ZLfEtzkibe5nfsSwFZVMsG8qabqRt1M81qZYUFRZa1B8w8lP6cdfDJfRq9HWS+MbmR7tw==" - "resolved" "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.2.tgz" - "version" "7.0.2" + "integrity" "sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw==" + "resolved" "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.3.tgz" + "version" "7.0.3" dependencies: - "@octokit/types" "^7.0.0" + "@octokit/types" "^8.0.0" "is-plain-object" "^5.0.0" "universal-user-agent" "^6.0.0" "@octokit/graphql@^5.0.0": - "integrity" "sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA==" - "resolved" "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.1.tgz" - "version" "5.0.1" + "integrity" "sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A==" + "resolved" "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.4.tgz" + "version" "5.0.4" dependencies: "@octokit/request" "^6.0.0" - "@octokit/types" "^7.0.0" + "@octokit/types" "^8.0.0" "universal-user-agent" "^6.0.0" -"@octokit/openapi-types@^13.11.0": - "integrity" "sha512-4EuKSk3N95UBWFau3Bz9b3pheQ8jQYbKmBL5+GSuY8YDPDwu03J4BjI+66yNi8aaX/3h1qDpb0mbBkLdr+cfGQ==" - "resolved" "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.13.1.tgz" - "version" "13.13.1" +"@octokit/openapi-types@^14.0.0": + "integrity" "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + "resolved" "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz" + "version" "14.0.0" "@octokit/plugin-enterprise-rest@^6.0.1": "integrity" "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==" "resolved" "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz" "version" "6.0.1" -"@octokit/plugin-paginate-rest@^4.0.0": - "integrity" "sha512-h8KKxESmSFTcXX409CAxlaOYscEDvN2KGQRsLCGT1NSqRW+D6EXLVQ8vuHhFznS9MuH9QYw1GfsUN30bg8hjVA==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.3.1.tgz" - "version" "4.3.1" +"@octokit/plugin-paginate-rest@^5.0.0": + "integrity" "sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw==" + "resolved" "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz" + "version" "5.0.1" dependencies: - "@octokit/types" "^7.5.0" + "@octokit/types" "^8.0.0" "@octokit/plugin-request-log@^1.0.4": "integrity" "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==" "resolved" "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" "version" "1.0.4" -"@octokit/plugin-rest-endpoint-methods@^6.0.0": - "integrity" "sha512-n9dL5KMpz9qVFSNdcVWC8ZPbl68QbTk7+CMPXCXqaMZOLn1n1YuoSFFCy84Ge0fx333fUqpnBHv8BFjwGtUQkA==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.6.2.tgz" - "version" "6.6.2" +"@octokit/plugin-rest-endpoint-methods@^6.7.0": + "integrity" "sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw==" + "resolved" "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz" + "version" "6.7.0" dependencies: - "@octokit/types" "^7.5.0" + "@octokit/types" "^8.0.0" "deprecation" "^2.3.1" "@octokit/request-error@^3.0.0": - "integrity" "sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ==" - "resolved" "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.1.tgz" - "version" "3.0.1" + "integrity" "sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg==" + "resolved" "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz" + "version" "3.0.2" dependencies: - "@octokit/types" "^7.0.0" + "@octokit/types" "^8.0.0" "deprecation" "^2.0.0" "once" "^1.4.0" "@octokit/request@^6.0.0": - "integrity" "sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ==" - "resolved" "https://registry.npmjs.org/@octokit/request/-/request-6.2.1.tgz" - "version" "6.2.1" + "integrity" "sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw==" + "resolved" "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz" + "version" "6.2.2" dependencies: "@octokit/endpoint" "^7.0.0" "@octokit/request-error" "^3.0.0" - "@octokit/types" "^7.0.0" + "@octokit/types" "^8.0.0" "is-plain-object" "^5.0.0" "node-fetch" "^2.6.7" "universal-user-agent" "^6.0.0" "@octokit/rest@^19.0.3": - "integrity" "sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA==" - "resolved" "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.4.tgz" - "version" "19.0.4" + "integrity" "sha512-+4qdrUFq2lk7Va+Qff3ofREQWGBeoTKNqlJO+FGjFP35ZahP+nBenhZiGdu8USSgmq4Ky3IJ/i4u0xbLqHaeow==" + "resolved" "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.5.tgz" + "version" "19.0.5" dependencies: - "@octokit/core" "^4.0.0" - "@octokit/plugin-paginate-rest" "^4.0.0" + "@octokit/core" "^4.1.0" + "@octokit/plugin-paginate-rest" "^5.0.0" "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^6.0.0" + "@octokit/plugin-rest-endpoint-methods" "^6.7.0" -"@octokit/types@^7.0.0", "@octokit/types@^7.5.0": - "integrity" "sha512-Zk4OUMLCSpXNI8KZZn47lVLJSsgMyCimsWWQI5hyjZg7hdYm0kjotaIkbG0Pp8SfU2CofMBzonboTqvzn3FrJA==" - "resolved" "https://registry.npmjs.org/@octokit/types/-/types-7.5.1.tgz" - "version" "7.5.1" +"@octokit/types@^8.0.0": + "integrity" "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==" + "resolved" "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz" + "version" "8.0.0" dependencies: - "@octokit/openapi-types" "^13.11.0" + "@octokit/openapi-types" "^14.0.0" "@openzeppelin/contracts-upgradeable@^4.7.3": "integrity" "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" @@ -2462,6 +2470,13 @@ "node-addon-api" "^3.2.1" "node-gyp-build" "^4.3.0" +"@phenomnomnominal/tsquery@4.1.1": + "integrity" "sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ==" + "resolved" "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "esquery" "^1.0.1" + "@scure/base@~1.1.0": "integrity" "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" "resolved" "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" @@ -2539,12 +2554,7 @@ "@sentry/utils" "5.30.0" "tslib" "^1.9.3" -"@sentry/types@^7.x": - "integrity" "sha512-JzkOtenArOXmJBAk/FBbxKKX7XC650HqkhGL4ugT/f+RyxfiDZ0X1TAYMrvKIe+qpn5Nh7JUBfR+BARKAiu2wQ==" - "resolved" "https://registry.npmjs.org/@sentry/types/-/types-7.14.2.tgz" - "version" "7.14.2" - -"@sentry/types@5.30.0": +"@sentry/types@^7.x", "@sentry/types@5.30.0": "integrity" "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" "resolved" "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" "version" "5.30.0" @@ -2558,9 +2568,9 @@ "tslib" "^1.9.3" "@sinclair/typebox@^0.24.1": - "integrity" "sha512-ka0W0KN5i6LfrSocduwliMMpqVgohtPFidKdMEOUjoOFCHcOOYkKsPRxfs5f15oPNHTm6ERAm0GV/+/LTKeiWg==" - "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.44.tgz" - "version" "0.24.44" + "integrity" "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" + "version" "0.24.51" "@sindresorhus/is@^0.14.0": "integrity" "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" @@ -2587,9 +2597,9 @@ "@sinonjs/commons" "^1.7.0" "@solidity-parser/parser@^0.14.0": - "integrity" "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==" - "resolved" "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz" - "version" "0.14.3" + "integrity" "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==" + "resolved" "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz" + "version" "0.14.5" dependencies: "antlr4ts" "^0.5.0-alpha.4" @@ -2651,9 +2661,9 @@ "randombytes" "^2.1.0" "@toruslabs/torus-embed@^1.36.2": - "integrity" "sha512-5PfgjhM+jobgbU2X5bz+Hb2qbf3Ljt/SFk5hXJ7YohZgX23CUiDqZL+zPOVOwX3BVJHBshqhMX9sOPOBMlfXMg==" - "resolved" "https://registry.npmjs.org/@toruslabs/torus-embed/-/torus-embed-1.36.4.tgz" - "version" "1.36.4" + "integrity" "sha512-QiagGXQJhRGBkBcDRX3VmBaF8k5U69LSMJqhAJ6zrCXOQpNWZkOXZigHO1nwyBjtWNmfx3dxkSeXHG9qMaZH8A==" + "resolved" "https://registry.npmjs.org/@toruslabs/torus-embed/-/torus-embed-1.36.6.tgz" + "version" "1.36.6" dependencies: "@metamask/obs-store" "^7.0.0" "@toruslabs/http-helpers" "^3.2.0" @@ -2675,35 +2685,44 @@ "version" "0.1.1" "@truffle/hdwallet-provider@latest": - "version" "2.0.16" + "version" "2.1.0" dependencies: "@ethereumjs/common" "^2.4.0" "@ethereumjs/tx" "^3.3.0" "@metamask/eth-sig-util" "4.0.1" + "@truffle/hdwallet" "^0.1.0" "@types/web3" "^1.0.20" "ethereum-cryptography" "1.1.2" "ethereum-protocol" "^1.0.1" "ethereumjs-util" "^7.1.5" - "ethereumjs-wallet" "^1.0.2" "web3" "1.7.4" "web3-provider-engine" "16.0.3" -"@truffle/interface-adapter@^0.5.22": - "integrity" "sha512-Bgl5Afb1mPVNedI8CJzZQzVIdrZWSXISTBrXPZmppD4Q+6V1RUzlLxiaGGB4gYHOA+U0pBzD8MCcSycPAD9RsA==" - "resolved" "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.22.tgz" - "version" "0.5.22" +"@truffle/hdwallet@^0.1.0": + "integrity" "sha512-tRqx7Kn5SbQoe56S5pWrIN3/aM9YMK2bFR8iD5gHGv6uXHRCL7b+PkeI1gyKk09SRWkY11YjRw+Up/V0x6tw6A==" + "resolved" "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "ethereum-cryptography" "1.1.2" + "keccak" "3.0.2" + "secp256k1" "4.0.3" + +"@truffle/interface-adapter@^0.5.23": + "integrity" "sha512-nU8kChKgcUP+tELId1PMgHnmd2KcBdBer59TxfVqAZXRmt6blm2tpBbGYtKzTIdZlf6kMqVbZXdB6u1CJDqfxg==" + "resolved" "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.23.tgz" + "version" "0.5.23" dependencies: "bn.js" "^5.1.3" "ethers" "^4.0.32" "web3" "1.7.4" "@truffle/provider@^0.2.24": - "integrity" "sha512-DJrSxmMuJhC8/m7HUMo5E4wq+SUhg6iK/r9dYAHfnGOUZVj4Pxl0hiqYCDm9jU1iZwk3BmzkctoMS5+qJYST0A==" - "resolved" "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.60.tgz" - "version" "0.2.60" + "integrity" "sha512-MxfUkt+fUO66F1u4wjYu7j8ZZxkodnOALII4CUTd55rTHd0mw0rRtVtYiNAaK+WDljqHb55bc6ecE45ioeTnqA==" + "resolved" "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.62.tgz" + "version" "0.2.62" dependencies: "@truffle/error" "^0.1.1" - "@truffle/interface-adapter" "^0.5.22" + "@truffle/interface-adapter" "^0.5.23" "debug" "^4.3.1" "web3" "1.7.4" @@ -2902,11 +2921,11 @@ "version" "0.0.29" "@types/keyv@*": - "integrity" "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==" - "resolved" "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" - "version" "3.1.4" + "integrity" "sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw==" + "resolved" "https://registry.npmjs.org/@types/keyv/-/keyv-4.2.0.tgz" + "version" "4.2.0" dependencies: - "@types/node" "*" + "keyv" "*" "@types/lru-cache@^5.1.0": "integrity" "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" @@ -2954,9 +2973,9 @@ "form-data" "^3.0.0" "@types/node@*", "@types/node@>=12.0.0": - "integrity" "sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-18.8.2.tgz" - "version" "18.8.2" + "integrity" "sha512-LhFTglglr63mNXUSRYD8A+ZAIu5sFqNJ4Y2fPuY7UlrySJH87rRRlhtVmMHplmfk5WkoJGmDjE9oiTfyX94CpQ==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-18.11.7.tgz" + "version" "18.11.7" "@types/node@^10.0.3": "integrity" "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" @@ -3031,6 +3050,11 @@ "resolved" "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz" "version" "3.0.1" +"@types/semver@^7.3.12": + "integrity" "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==" + "resolved" "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz" + "version" "7.3.13" + "@types/sinon-chai@^3.2.3": "integrity" "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==" "resolved" "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz" @@ -3089,13 +3113,13 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.17.0": - "integrity" "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz" - "version" "5.39.0" + "integrity" "sha512-DXUS22Y57/LAFSg3x7Vi6RNAuLpTXwxB9S2nIA7msBb/Zt8p7XqMwdpdc1IU7CkOQUPgAqR5fWvxuKCbneKGmA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.41.0.tgz" + "version" "5.41.0" dependencies: - "@typescript-eslint/scope-manager" "5.39.0" - "@typescript-eslint/type-utils" "5.39.0" - "@typescript-eslint/utils" "5.39.0" + "@typescript-eslint/scope-manager" "5.41.0" + "@typescript-eslint/type-utils" "5.41.0" + "@typescript-eslint/utils" "5.41.0" "debug" "^4.3.4" "ignore" "^5.2.0" "regexpp" "^3.2.0" @@ -3103,69 +3127,71 @@ "tsutils" "^3.21.0" "@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.17.0": - "integrity" "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz" - "version" "5.39.0" + "integrity" "sha512-HQVfix4+RL5YRWZboMD1pUfFN8MpRH4laziWkkAzyO1fvNOY/uinZcvo3QiFJVS/siNHupV8E5+xSwQZrl6PZA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.41.0.tgz" + "version" "5.41.0" dependencies: - "@typescript-eslint/scope-manager" "5.39.0" - "@typescript-eslint/types" "5.39.0" - "@typescript-eslint/typescript-estree" "5.39.0" + "@typescript-eslint/scope-manager" "5.41.0" + "@typescript-eslint/types" "5.41.0" + "@typescript-eslint/typescript-estree" "5.41.0" "debug" "^4.3.4" -"@typescript-eslint/scope-manager@5.39.0": - "integrity" "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz" - "version" "5.39.0" +"@typescript-eslint/scope-manager@5.41.0": + "integrity" "sha512-xOxPJCnuktUkY2xoEZBKXO5DBCugFzjrVndKdUnyQr3+9aDWZReKq9MhaoVnbL+maVwWJu/N0SEtrtEUNb62QQ==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.41.0.tgz" + "version" "5.41.0" dependencies: - "@typescript-eslint/types" "5.39.0" - "@typescript-eslint/visitor-keys" "5.39.0" + "@typescript-eslint/types" "5.41.0" + "@typescript-eslint/visitor-keys" "5.41.0" -"@typescript-eslint/type-utils@5.39.0": - "integrity" "sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz" - "version" "5.39.0" +"@typescript-eslint/type-utils@5.41.0": + "integrity" "sha512-L30HNvIG6A1Q0R58e4hu4h+fZqaO909UcnnPbwKiN6Rc3BUEx6ez2wgN7aC0cBfcAjZfwkzE+E2PQQ9nEuoqfA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.41.0.tgz" + "version" "5.41.0" dependencies: - "@typescript-eslint/typescript-estree" "5.39.0" - "@typescript-eslint/utils" "5.39.0" + "@typescript-eslint/typescript-estree" "5.41.0" + "@typescript-eslint/utils" "5.41.0" "debug" "^4.3.4" "tsutils" "^3.21.0" -"@typescript-eslint/types@5.39.0": - "integrity" "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz" - "version" "5.39.0" +"@typescript-eslint/types@5.41.0": + "integrity" "sha512-5BejraMXMC+2UjefDvrH0Fo/eLwZRV6859SXRg+FgbhA0R0l6lDqDGAQYhKbXhPN2ofk2kY5sgGyLNL907UXpA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.41.0.tgz" + "version" "5.41.0" -"@typescript-eslint/typescript-estree@5.39.0": - "integrity" "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz" - "version" "5.39.0" +"@typescript-eslint/typescript-estree@5.41.0": + "integrity" "sha512-SlzFYRwFSvswzDSQ/zPkIWcHv8O5y42YUskko9c4ki+fV6HATsTODUPbRbcGDFYP86gaJL5xohUEytvyNNcXWg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.41.0.tgz" + "version" "5.41.0" dependencies: - "@typescript-eslint/types" "5.39.0" - "@typescript-eslint/visitor-keys" "5.39.0" + "@typescript-eslint/types" "5.41.0" + "@typescript-eslint/visitor-keys" "5.41.0" "debug" "^4.3.4" "globby" "^11.1.0" "is-glob" "^4.0.3" "semver" "^7.3.7" "tsutils" "^3.21.0" -"@typescript-eslint/utils@5.39.0": - "integrity" "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz" - "version" "5.39.0" +"@typescript-eslint/utils@5.41.0": + "integrity" "sha512-QlvfwaN9jaMga9EBazQ+5DDx/4sAdqDkcs05AsQHMaopluVCUyu1bTRUVKzXbgjDlrRAQrYVoi/sXJ9fmG+KLQ==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.41.0.tgz" + "version" "5.41.0" dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.39.0" - "@typescript-eslint/types" "5.39.0" - "@typescript-eslint/typescript-estree" "5.39.0" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.41.0" + "@typescript-eslint/types" "5.41.0" + "@typescript-eslint/typescript-estree" "5.41.0" "eslint-scope" "^5.1.1" "eslint-utils" "^3.0.0" + "semver" "^7.3.7" -"@typescript-eslint/visitor-keys@5.39.0": - "integrity" "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz" - "version" "5.39.0" +"@typescript-eslint/visitor-keys@5.41.0": + "integrity" "sha512-vilqeHj267v8uzzakbm13HkPMl7cbYpKVjgFWZPIOHIJHZtinvypUhJ5xBXfWYg4eFKqztbMMpOgFpT9Gfx4fw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.41.0.tgz" + "version" "5.41.0" dependencies: - "@typescript-eslint/types" "5.39.0" + "@typescript-eslint/types" "5.41.0" "eslint-visitor-keys" "^3.3.0" "@ungap/promise-all-settled@1.1.2": @@ -3179,9 +3205,9 @@ "version" "1.1.0" "@yarnpkg/parsers@^3.0.0-rc.18": - "integrity" "sha512-GAWDjXduYBUVmOzlj3X0OwTQ1BV4ZeDdgw8yXST3K0lB95drWEGxa1at0v7BmHDyK2y1F1IJufc8N4yrcuXjWg==" - "resolved" "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.22.tgz" - "version" "3.0.0-rc.22" + "integrity" "sha512-F52Zryoi6uSHi43A/htykDD7l1707TQjHeAHTKxNWJBTwvrEKWYvuu1w8bzSHpFVc06ig2KyrpHPfmeiuOip8Q==" + "resolved" "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.26.tgz" + "version" "3.0.0-rc.26" dependencies: "js-yaml" "^3.10.0" "tslib" "^2.4.0" @@ -3211,9 +3237,9 @@ "event-target-shim" "^5.0.0" "abortcontroller-polyfill@^1.7.3": - "integrity" "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==" - "resolved" "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz" - "version" "1.7.3" + "integrity" "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==" + "resolved" "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz" + "version" "1.7.5" "abstract-level@^1.0.0", "abstract-level@^1.0.2", "abstract-level@^1.0.3": "integrity" "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==" @@ -3273,9 +3299,9 @@ "version" "8.2.0" "acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.4.1", "acorn@^8.8.0": - "integrity" "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" - "version" "8.8.0" + "integrity" "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" + "version" "8.8.1" "add-stream@^1.0.0": "integrity" "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==" @@ -3410,9 +3436,9 @@ "version" "5.2.0" "ansi-styles@^6.0.0": - "integrity" "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz" - "version" "6.1.1" + "integrity" "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + "version" "6.2.1" "antlr4ts@^0.5.0-alpha.4": "integrity" "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" @@ -3586,6 +3612,11 @@ dependencies: "lodash" "^4.17.14" +"async@^3.2.3": + "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + "version" "3.2.4" + "async@1.x": "integrity" "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" @@ -3623,12 +3654,14 @@ dependencies: "follow-redirects" "^1.14.0" -"axios@0.21.1": - "integrity" "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==" - "resolved" "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz" - "version" "0.21.1" +"axios@^1.0.0": + "integrity" "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==" + "resolved" "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz" + "version" "1.1.3" dependencies: - "follow-redirects" "^1.10.0" + "follow-redirects" "^1.15.0" + "form-data" "^4.0.0" + "proxy-from-env" "^1.1.0" "babel-jest@^28.1.3": "integrity" "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==" @@ -3856,10 +3889,10 @@ "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" "version" "4.11.6" -"body-parser@^1.16.0", "body-parser@1.20.0": - "integrity" "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==" - "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" - "version" "1.20.0" +"body-parser@^1.16.0", "body-parser@1.20.1": + "integrity" "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==" + "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" + "version" "1.20.1" dependencies: "bytes" "3.1.2" "content-type" "~1.0.4" @@ -3869,7 +3902,7 @@ "http-errors" "2.0.0" "iconv-lite" "0.4.24" "on-finished" "2.4.1" - "qs" "6.10.3" + "qs" "6.11.0" "raw-body" "2.5.1" "type-is" "~1.6.18" "unpipe" "1.0.0" @@ -4047,9 +4080,9 @@ "node-gyp-build" "^4.3.0" "bufio@^1.0.7": - "integrity" "sha512-bd1dDQhiC+bEbEfg56IdBv7faWa6OipMs/AFFFvtFnB3wAYjlwQpQRZ0pm6ZkgtfL0pILRXhKxOiQj6UzoMR7A==" - "resolved" "https://registry.npmjs.org/bufio/-/bufio-1.0.7.tgz" - "version" "1.0.7" + "integrity" "sha512-W0ydG8t+ST+drUpEwl1N+dU9Ije06g8+43CLtvEIzfKo9nPFLXbKqDYE2XSg4w6RugsBcCj7pEU7jOpBC6BqrA==" + "resolved" "https://registry.npmjs.org/bufio/-/bufio-1.1.3.tgz" + "version" "1.1.3" "builtins@^1.0.3": "integrity" "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" @@ -4178,9 +4211,9 @@ "version" "6.3.0" "caniuse-lite@^1.0.30001400": - "integrity" "sha512-06wzzdAkCPZO+Qm4e/eNghZBDfVNDsCgw33T27OwBH9unE9S478OYw//Q2L7Npf/zBzs7rjZOszIFQkwQKAEqA==" - "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001416.tgz" - "version" "1.0.30001416" + "integrity" "sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz" + "version" "1.0.30001426" "caseless@^0.12.0", "caseless@~0.12.0": "integrity" "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" @@ -4257,7 +4290,7 @@ "escape-string-regexp" "^1.0.5" "supports-color" "^5.3.0" -"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.1", "chalk@^4.1.2": +"chalk@^4.0.0", "chalk@^4.0.2", "chalk@^4.1.0", "chalk@^4.1.1", "chalk@^4.1.2": "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" "version" "4.1.2" @@ -4346,9 +4379,9 @@ "version" "2.0.0" "ci-info@^3.2.0": - "integrity" "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==" - "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz" - "version" "3.4.0" + "integrity" "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz" + "version" "3.5.0" "cids@^0.7.1": "integrity" "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==" @@ -4646,9 +4679,9 @@ "typedarray" "^0.0.6" "concurrently@^7.4.0": - "integrity" "sha512-M6AfrueDt/GEna/Vg9BqQ+93yuvzkSKmoTixnwEJkH0LlcGrRC2eCmjeG1tLLHIYfpYJABokqSGyMcXjm96AFA==" - "resolved" "https://registry.npmjs.org/concurrently/-/concurrently-7.4.0.tgz" - "version" "7.4.0" + "integrity" "sha512-5E3mwiS+i2JYBzr5BpXkFxOnleZTMsG+WnE/dCG4/P+oiVXrbmrBwJ2ozn4SxwB2EZDrKR568X+puVohxz3/Mg==" + "resolved" "https://registry.npmjs.org/concurrently/-/concurrently-7.5.0.tgz" + "version" "7.5.0" dependencies: "chalk" "^4.1.0" "date-fns" "^2.29.1" @@ -4777,11 +4810,9 @@ "q" "^1.5.1" "convert-source-map@^1.4.0", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0": - "integrity" "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" - "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "safe-buffer" "~5.1.1" + "integrity" "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" + "version" "1.9.0" "cookie-signature@1.0.6": "integrity" "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" @@ -4804,9 +4835,9 @@ "version" "2.1.3" "core-js-compat@^3.25.1": - "integrity" "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==" - "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz" - "version" "3.25.5" + "integrity" "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==" + "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz" + "version" "3.26.0" dependencies: "browserslist" "^4.21.4" @@ -5084,9 +5115,9 @@ "version" "4.2.2" "defaults@^1.0.3": - "integrity" "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" - "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - "version" "1.0.3" + "integrity" "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==" + "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + "version" "1.0.4" dependencies: "clone" "^1.0.2" @@ -5284,10 +5315,17 @@ "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" "version" "1.1.1" +"ejs@^3.1.7": + "integrity" "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==" + "resolved" "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz" + "version" "3.1.8" + dependencies: + "jake" "^10.8.5" + "electron-to-chromium@^1.4.251": - "integrity" "sha512-KS6gPPGNrzpVv9HzFVq+Etd0AjZEPr5pvaTBn2yD6KV4+cKW4I0CJoJNgmTG6gUQPAMZ4wIPtcOuoou3qFAZCA==" - "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.272.tgz" - "version" "1.4.272" + "integrity" "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz" + "version" "1.4.284" "elliptic@^6.4.0", "elliptic@^6.5.2", "elliptic@^6.5.3", "elliptic@^6.5.4", "elliptic@6.5.4": "integrity" "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==" @@ -5388,9 +5426,9 @@ "is-arrayish" "^0.2.1" "es-abstract@^1.19.0", "es-abstract@^1.19.2", "es-abstract@^1.19.5", "es-abstract@^1.20.0", "es-abstract@^1.20.1": - "integrity" "sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==" - "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz" - "version" "1.20.3" + "integrity" "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==" + "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz" + "version" "1.20.4" dependencies: "call-bind" "^1.0.2" "es-to-primitive" "^1.2.1" @@ -5402,7 +5440,7 @@ "has-property-descriptors" "^1.0.0" "has-symbols" "^1.0.3" "internal-slot" "^1.0.3" - "is-callable" "^1.2.6" + "is-callable" "^1.2.7" "is-negative-zero" "^2.0.2" "is-regex" "^1.1.4" "is-shared-array-buffer" "^1.0.2" @@ -5550,14 +5588,14 @@ "version" "3.3.0" "eslint@*", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^8.12.0", "eslint@>=5", "eslint@>=7.0.0", "eslint@>=7.28.0": - "integrity" "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz" - "version" "8.24.0" + "integrity" "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz" + "version" "8.26.0" dependencies: - "@eslint/eslintrc" "^1.3.2" - "@humanwhocodes/config-array" "^0.10.5" - "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" "ajv" "^6.10.0" "chalk" "^4.0.0" "cross-spawn" "^7.0.2" @@ -5573,14 +5611,14 @@ "fast-deep-equal" "^3.1.3" "file-entry-cache" "^6.0.1" "find-up" "^5.0.0" - "glob-parent" "^6.0.1" + "glob-parent" "^6.0.2" "globals" "^13.15.0" - "globby" "^11.1.0" "grapheme-splitter" "^1.0.4" "ignore" "^5.2.0" "import-fresh" "^3.0.0" "imurmurhash" "^0.1.4" "is-glob" "^4.0.0" + "is-path-inside" "^3.0.3" "js-sdsl" "^4.1.4" "js-yaml" "^4.1.0" "json-stable-stringify-without-jsonify" "^1.0.1" @@ -5613,7 +5651,7 @@ "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" "version" "4.0.1" -"esquery@^1.4.0": +"esquery@^1.0.1", "esquery@^1.4.0": "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" "version" "1.4.0" @@ -6038,7 +6076,7 @@ "rustbn.js" "~0.2.0" "safe-buffer" "^5.1.1" -"ethereumjs-wallet@^1.0.1", "ethereumjs-wallet@^1.0.2": +"ethereumjs-wallet@^1.0.1": "integrity" "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==" "resolved" "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz" "version" "1.0.2" @@ -6083,9 +6121,9 @@ "xmlhttprequest" "1.8.0" "ethers@^5", "ethers@^5.0.0", "ethers@^5.1.3", "ethers@^5.4.7", "ethers@^5.5.2", "ethers@^5.5.3", "ethers@^5.6.8", "ethers@^5.6.9", "ethers@^5.7.0", "ethers@^5.7.1": - "integrity" "sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q==" - "resolved" "https://registry.npmjs.org/ethers/-/ethers-5.7.1.tgz" - "version" "5.7.1" + "integrity" "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==" + "resolved" "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" + "version" "5.7.2" dependencies: "@ethersproject/abi" "5.7.0" "@ethersproject/abstract-provider" "5.7.0" @@ -6105,7 +6143,7 @@ "@ethersproject/networks" "5.7.1" "@ethersproject/pbkdf2" "5.7.0" "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.1" + "@ethersproject/providers" "5.7.2" "@ethersproject/random" "5.7.0" "@ethersproject/rlp" "5.7.0" "@ethersproject/sha2" "5.7.0" @@ -6207,13 +6245,13 @@ "jest-util" "^28.1.3" "express@^4.14.0": - "integrity" "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==" - "resolved" "https://registry.npmjs.org/express/-/express-4.18.1.tgz" - "version" "4.18.1" + "integrity" "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==" + "resolved" "https://registry.npmjs.org/express/-/express-4.18.2.tgz" + "version" "4.18.2" dependencies: "accepts" "~1.3.8" "array-flatten" "1.1.1" - "body-parser" "1.20.0" + "body-parser" "1.20.1" "content-disposition" "0.5.4" "content-type" "~1.0.4" "cookie" "0.5.0" @@ -6232,7 +6270,7 @@ "parseurl" "~1.3.3" "path-to-regexp" "0.1.7" "proxy-addr" "~2.0.7" - "qs" "6.10.3" + "qs" "6.11.0" "range-parser" "~1.2.1" "safe-buffer" "5.2.1" "send" "0.18.0" @@ -6356,6 +6394,13 @@ dependencies: "flat-cache" "^3.0.4" +"filelist@^1.0.1": + "integrity" "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==" + "resolved" "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "minimatch" "^5.0.1" + "fill-range@^7.0.1": "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" @@ -6468,7 +6513,7 @@ dependencies: "imul" "^1.0.0" -"follow-redirects@^1.10.0", "follow-redirects@^1.12.1", "follow-redirects@^1.14.0": +"follow-redirects@^1.12.1", "follow-redirects@^1.14.0", "follow-redirects@^1.15.0": "integrity" "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" "version" "1.15.2" @@ -6695,9 +6740,9 @@ "yargs" "13.2.4" "ganache@^7.1.0": - "integrity" "sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA==" - "resolved" "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz" - "version" "7.4.3" + "integrity" "sha512-afNTJYBEaFrLPRrn7eUxH39TgnrffvHn/4T6THzQrc3rpfe4DOxw2nY2XEQxfsq1t4OqKSXtxomzyo26RZiOzw==" + "resolved" "https://registry.npmjs.org/ganache/-/ganache-7.5.0.tgz" + "version" "7.5.0" dependencies: "@trufflesuite/bigint-buffer" "1.1.10" "@types/bn.js" "^5.1.0" @@ -6879,7 +6924,7 @@ dependencies: "is-glob" "^4.0.1" -"glob-parent@^6.0.1": +"glob-parent@^6.0.2": "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" "version" "6.0.2" @@ -7159,9 +7204,9 @@ "sha1" "^1.1.1" "hardhat@^2.0.0", "hardhat@^2.0.10", "hardhat@^2.0.2", "hardhat@^2.0.4", "hardhat@^2.11.0", "hardhat@^2.6.8", "hardhat@^2.9.2", "hardhat@^2.9.4", "hardhat@^2.9.5", "hardhat@^2.9.7", "hardhat@^2.9.9": - "integrity" "sha512-BdsXC1CFJQDJKmAgCwpmGhFuVU6dcqlgMgT0Kg/xmFAFVugkpYu6NRmh4AaJ3Fah0/BR9DOR4XgQGIbg4eon/Q==" - "resolved" "https://registry.npmjs.org/hardhat/-/hardhat-2.11.2.tgz" - "version" "2.11.2" + "integrity" "sha512-ihqYoaAKMceVWRcc3VddftFM7Q4/WL5Xan8nrklfDRwwST0W1rWWEE8SrxGikW58IJdREsC/HXVHs0zKfYpiCA==" + "resolved" "https://registry.npmjs.org/hardhat/-/hardhat-2.12.1.tgz" + "version" "2.12.1" dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" @@ -7175,7 +7220,7 @@ "@nomicfoundation/ethereumjs-tx" "^4.0.0" "@nomicfoundation/ethereumjs-util" "^8.0.0" "@nomicfoundation/ethereumjs-vm" "^6.0.0" - "@nomicfoundation/solidity-analyzer" "^0.0.3" + "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" @@ -7331,9 +7376,9 @@ "lru-cache" "^6.0.0" "hosted-git-info@^5.0.0": - "integrity" "sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz" - "version" "5.1.0" + "integrity" "sha512-y5aljBDICf0OFQecausUdWGZbLxSaFc012tdP4xe4GcFMeYUrOptSGaTZ21gvIsPUSe1/K9EVKLYwBOSEOPirw==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.0.tgz" + "version" "5.2.0" dependencies: "lru-cache" "^7.5.1" @@ -7555,9 +7600,9 @@ "validate-npm-package-name" "^4.0.0" "inquirer@^8.2.4": - "integrity" "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==" - "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz" - "version" "8.2.4" + "integrity" "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz" + "version" "8.2.5" dependencies: "ansi-escapes" "^4.2.1" "chalk" "^4.1.1" @@ -7651,7 +7696,7 @@ "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" "version" "2.0.5" -"is-callable@^1.1.3", "is-callable@^1.1.4", "is-callable@^1.2.6": +"is-callable@^1.1.3", "is-callable@^1.1.4", "is-callable@^1.2.7": "integrity" "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" "version" "1.2.7" @@ -7664,9 +7709,9 @@ "ci-info" "^2.0.0" "is-core-module@^2.5.0", "is-core-module@^2.8.1", "is-core-module@^2.9.0": - "integrity" "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==" - "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" - "version" "2.10.0" + "integrity" "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" + "version" "2.11.0" dependencies: "has" "^1.0.3" @@ -7768,6 +7813,11 @@ "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" "version" "2.0.0" +"is-path-inside@^3.0.3": + "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + "version" "3.0.3" + "is-plain-obj@^1.0.0": "integrity" "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" @@ -7914,9 +7964,9 @@ "version" "3.2.0" "istanbul-lib-instrument@^5.0.4", "istanbul-lib-instrument@^5.1.0": - "integrity" "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==" - "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz" - "version" "5.2.0" + "integrity" "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==" + "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" + "version" "5.2.1" dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" @@ -7950,6 +8000,16 @@ "html-escaper" "^2.0.0" "istanbul-lib-report" "^3.0.0" +"jake@^10.8.5": + "integrity" "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==" + "resolved" "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz" + "version" "10.8.5" + dependencies: + "async" "^3.2.3" + "chalk" "^4.0.2" + "filelist" "^1.0.1" + "minimatch" "^3.0.4" + "jest-changed-files@^28.1.3": "integrity" "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==" "resolved" "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz" @@ -8491,9 +8551,9 @@ "graceful-fs" "^4.1.6" "jsonify@~0.0.0": - "integrity" "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==" - "resolved" "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" - "version" "0.0.0" + "integrity" "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==" + "resolved" "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz" + "version" "0.0.1" "jsonparse@^1.2.0", "jsonparse@^1.3.1": "integrity" "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" @@ -8533,7 +8593,7 @@ "resolved" "https://registry.npmjs.org/just-diff/-/just-diff-5.1.1.tgz" "version" "5.1.1" -"keccak@^3.0.0", "keccak@^3.0.2": +"keccak@^3.0.0", "keccak@^3.0.2", "keccak@3.0.2": "integrity" "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==" "resolved" "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz" "version" "3.0.2" @@ -8542,14 +8602,12 @@ "node-gyp-build" "^4.2.0" "readable-stream" "^3.6.0" -"keccak@3.0.2": - "integrity" "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==" - "resolved" "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz" - "version" "3.0.2" +"keyv@*", "keyv@^4.0.0": + "integrity" "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==" + "resolved" "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz" + "version" "4.5.0" dependencies: - "node-addon-api" "^2.0.0" - "node-gyp-build" "^4.2.0" - "readable-stream" "^3.6.0" + "json-buffer" "3.0.1" "keyv@^3.0.0": "integrity" "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==" @@ -8558,13 +8616,6 @@ dependencies: "json-buffer" "3.0.0" -"keyv@^4.0.0": - "integrity" "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==" - "resolved" "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz" - "version" "4.5.0" - dependencies: - "json-buffer" "3.0.1" - "kind-of@^6.0.2", "kind-of@^6.0.3": "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" @@ -8590,29 +8641,32 @@ "invert-kv" "^2.0.0" "lerna@^5.5.4": - "integrity" "sha512-LAFQ/U6SL7/EM0sedtFaFS4b0RbTqsYYOJ6LV9Y7l/zWFlqLcg41vLblkNRuxsNB5FZBNpfiWvXmd1KiWkQ/yQ==" - "resolved" "https://registry.npmjs.org/lerna/-/lerna-5.5.4.tgz" - "version" "5.5.4" - dependencies: - "@lerna/add" "5.5.4" - "@lerna/bootstrap" "5.5.4" - "@lerna/changed" "5.5.4" - "@lerna/clean" "5.5.4" - "@lerna/cli" "5.5.4" - "@lerna/create" "5.5.4" - "@lerna/diff" "5.5.4" - "@lerna/exec" "5.5.4" - "@lerna/import" "5.5.4" - "@lerna/info" "5.5.4" - "@lerna/init" "5.5.4" - "@lerna/link" "5.5.4" - "@lerna/list" "5.5.4" - "@lerna/publish" "5.5.4" - "@lerna/run" "5.5.4" - "@lerna/version" "5.5.4" + "integrity" "sha512-Y0yMPslvnBnTZi7Nrs/gDyYZYauNf61xWNCehISHIORxZmmpoluNkcWTfcyb47is5uJQCv5QJX5xKKubbs+a6w==" + "resolved" "https://registry.npmjs.org/lerna/-/lerna-5.6.2.tgz" + "version" "5.6.2" + dependencies: + "@lerna/add" "5.6.2" + "@lerna/bootstrap" "5.6.2" + "@lerna/changed" "5.6.2" + "@lerna/clean" "5.6.2" + "@lerna/cli" "5.6.2" + "@lerna/command" "5.6.2" + "@lerna/create" "5.6.2" + "@lerna/diff" "5.6.2" + "@lerna/exec" "5.6.2" + "@lerna/import" "5.6.2" + "@lerna/info" "5.6.2" + "@lerna/init" "5.6.2" + "@lerna/link" "5.6.2" + "@lerna/list" "5.6.2" + "@lerna/publish" "5.6.2" + "@lerna/run" "5.6.2" + "@lerna/version" "5.6.2" + "@nrwl/devkit" ">=14.8.1 < 16" "import-local" "^3.0.2" + "inquirer" "^8.2.4" "npmlog" "^6.0.2" - "nx" ">=14.6.1 < 16" + "nx" ">=14.8.1 < 16" "typescript" "^3 || ^4" "level-codec@~7.0.0": @@ -9215,7 +9269,7 @@ "resolved" "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" "version" "1.0.1" -"minimatch@^3.0.4", "minimatch@^3.1.1", "minimatch@^3.1.2", "minimatch@2 || 3": +"minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2", "minimatch@2 || 3": "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" "version" "3.1.2" @@ -9267,9 +9321,9 @@ "kind-of" "^6.0.3" "minimist@^1.2.0", "minimist@^1.2.5", "minimist@^1.2.6": - "integrity" "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - "version" "1.2.6" + "integrity" "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" + "version" "1.2.7" "minipass-collect@^1.0.2": "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" @@ -9405,11 +9459,10 @@ "obliterator" "^2.0.0" "mocha@^10.0.0": - "integrity" "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==" - "resolved" "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz" - "version" "10.0.0" + "integrity" "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==" + "resolved" "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz" + "version" "10.1.0" dependencies: - "@ungap/promise-all-settled" "1.1.2" "ansi-colors" "4.1.1" "browser-stdout" "1.3.1" "chokidar" "3.5.3" @@ -9695,9 +9748,9 @@ "version" "4.4.0" "node-gyp@^9.0.0", "node-gyp@^9.1.0": - "integrity" "sha512-/+/YxGfIJOh/fnMsr4Ep0v6oOIjnO1BgLd2dcDspBX1spTkQU7xSIox5RdRE/2/Uq3ZwK8Z5swRIbMUmPlslmg==" - "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-9.2.0.tgz" - "version" "9.2.0" + "integrity" "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==" + "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz" + "version" "9.3.0" dependencies: "env-paths" "^2.2.0" "glob" "^7.1.4" @@ -9926,18 +9979,18 @@ "bn.js" "4.11.6" "strip-hex-prefix" "1.0.0" -"nx@^14.8.3", "nx@>=14.6.1 < 16", "nx@14.8.3": - "integrity" "sha512-6aMYrzlTqE77vHbaE1teI5P1A2oYkJGkuDMIo/zegRwUxCAjRzLAluUgPrmgqhuPTyTDn8p4aDfxAWV3Q0o/2Q==" - "resolved" "https://registry.npmjs.org/nx/-/nx-14.8.3.tgz" - "version" "14.8.3" +"nx@^15.0.3", "nx@>= 14 <= 16", "nx@>=14.8.1 < 16", "nx@15.0.3": + "integrity" "sha512-d9VWeArRfh4erWriWBMWK24nW6njZHXB/WVl/+8rTq1OirdpHrnILixzogEmTmaBKBE/XXR+zXFWVPHJlsEAYw==" + "resolved" "https://registry.npmjs.org/nx/-/nx-15.0.3.tgz" + "version" "15.0.3" dependencies: - "@nrwl/cli" "14.8.3" - "@nrwl/tao" "14.8.3" + "@nrwl/cli" "15.0.3" + "@nrwl/tao" "15.0.3" "@parcel/watcher" "2.0.4" "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "^3.0.0-rc.18" "@zkochan/js-yaml" "0.0.6" - "axios" "0.21.1" + "axios" "^1.0.0" "chalk" "4.1.0" "chokidar" "^3.5.1" "cli-cursor" "3.1.0" @@ -10572,9 +10625,9 @@ "set-immediate-shim" "^1.0.1" "promise@^8.0.0": - "integrity" "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==" - "resolved" "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz" - "version" "8.2.0" + "integrity" "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==" + "resolved" "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz" + "version" "8.3.0" dependencies: "asap" "~2.0.6" @@ -10616,6 +10669,11 @@ "forwarded" "0.2.0" "ipaddr.js" "1.9.1" +"proxy-from-env@^1.1.0": + "integrity" "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "resolved" "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + "version" "1.1.0" + "prr@~1.0.1": "integrity" "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" "resolved" "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" @@ -10661,7 +10719,7 @@ "resolved" "https://registry.npmjs.org/q/-/q-1.5.1.tgz" "version" "1.5.1" -"qs@^6.4.0", "qs@^6.7.0", "qs@^6.9.4": +"qs@^6.4.0", "qs@^6.7.0", "qs@^6.9.4", "qs@6.11.0": "integrity" "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==" "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" "version" "6.11.0" @@ -10673,13 +10731,6 @@ "resolved" "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" "version" "6.5.3" -"qs@6.10.3": - "integrity" "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==" - "resolved" "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" - "version" "6.10.3" - dependencies: - "side-channel" "^1.0.4" - "query-string@^5.0.1": "integrity" "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==" "resolved" "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" @@ -10921,11 +10972,11 @@ "resolve" "^1.1.6" "recursive-readdir@^2.2.2": - "integrity" "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==" - "resolved" "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz" - "version" "2.2.2" + "integrity" "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==" + "resolved" "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz" + "version" "2.2.3" dependencies: - "minimatch" "3.0.4" + "minimatch" "^3.0.5" "redent@^3.0.0": "integrity" "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==" @@ -10940,10 +10991,10 @@ "resolved" "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz" "version" "2.0.0" -"regenerator-runtime@^0.13.4": - "integrity" "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" - "version" "0.13.9" +"regenerator-runtime@^0.13.10": + "integrity" "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" + "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz" + "version" "0.13.10" "regexp.prototype.flags@^1.4.3": "integrity" "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==" @@ -11268,17 +11319,17 @@ "source-map-support" "^0.5.19" "typescript" "^4.3.5" -"scw-contracts-v1.0.1@npm:scw-contracts@1.0.8": - "integrity" "sha512-a1zgevkJ33E5GLTOUJSUAjgXX0KhE+UeD+MxognKbiC3ZwDnA3Gu4/YbGukfgh448HsqtcWG76WipCn94dyrMQ==" - "resolved" "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.8.tgz" - "version" "1.0.8" +"scw-contracts-v1.0.1@npm:scw-contracts@1.0.9": + "integrity" "sha512-08IJMsQKJhcNwwhWXC8Ok35dF+O1z3/sHo4/MyZCUWLttFyyt4KqDLTQnwWyiLqUpbo+0x+kNIq+wO6IOb5tdg==" + "resolved" "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.9.tgz" + "version" "1.0.9" dependencies: "@account-abstraction/contracts" "^0.2.0" "@chainlink/contracts" "^0.4.1" "@ethersproject/abstract-signer" "^5.6.2" "@ethersproject/constants" "^5.6.1" "@nomiclabs/hardhat-etherscan" "^2.1.6" - "@openzeppelin/contracts" "^4.2.0" + "@openzeppelin/contracts" "^4.7.3" "@openzeppelin/contracts-upgradeable" "^4.7.3" "@typechain/hardhat" "^2.3.0" "@types/mocha" "^9.0.0" @@ -11299,16 +11350,7 @@ "source-map-support" "^0.5.19" "typescript" "^4.3.5" -"secp256k1@^4.0.1": - "integrity" "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==" - "resolved" "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "elliptic" "^6.5.4" - "node-addon-api" "^2.0.0" - "node-gyp-build" "^4.2.0" - -"secp256k1@4.0.3": +"secp256k1@^4.0.1", "secp256k1@4.0.3": "integrity" "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==" "resolved" "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" "version" "4.0.3" @@ -11501,9 +11543,9 @@ "version" "3.0.0" "shell-quote@^1.7.3": - "integrity" "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - "resolved" "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz" - "version" "1.7.3" + "integrity" "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" + "resolved" "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz" + "version" "1.7.4" "shelljs@^0.8.3": "integrity" "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==" @@ -12540,9 +12582,9 @@ "version" "5.2.0" "uglify-js@^3.1.4": - "integrity" "sha512-bbxglRjsGQMchfvXZNusUcYgiB9Hx2K4AHYXQy2DITZ9Rd+JzhX7+hoocE5Winr7z2oHvPsekkBwXtigvxevXg==" - "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.2.tgz" - "version" "3.17.2" + "integrity" "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==" + "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" + "version" "3.17.4" "ultron@~1.1.0": "integrity" "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" @@ -12560,9 +12602,9 @@ "which-boxed-primitive" "^1.0.2" "undici@^5.4.0": - "integrity" "sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==" - "resolved" "https://registry.npmjs.org/undici/-/undici-5.11.0.tgz" - "version" "5.11.0" + "integrity" "sha512-zMLamCG62PGjd9HHMpo05bSLvvwWOZgGeiWlN/vlqu3+lRo3elxktVGEyLMX+IO7c2eflLjcW74AlkhEZm15mg==" + "resolved" "https://registry.npmjs.org/undici/-/undici-5.12.0.tgz" + "version" "5.12.0" dependencies: "busboy" "^1.6.0" @@ -12606,9 +12648,9 @@ "version" "2.0.1" "update-browserslist-db@^1.0.9": - "integrity" "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==" - "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz" - "version" "1.0.9" + "integrity" "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==" + "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" + "version" "1.0.10" dependencies: "escalade" "^3.1.1" "picocolors" "^1.0.0" @@ -12650,15 +12692,14 @@ "version" "1.0.2" "util@^0.12.0": - "integrity" "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==" - "resolved" "https://registry.npmjs.org/util/-/util-0.12.4.tgz" - "version" "0.12.4" + "integrity" "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==" + "resolved" "https://registry.npmjs.org/util/-/util-0.12.5.tgz" + "version" "0.12.5" dependencies: "inherits" "^2.0.3" "is-arguments" "^1.0.4" "is-generator-function" "^1.0.7" "is-typed-array" "^1.1.3" - "safe-buffer" "^5.1.2" "which-typed-array" "^1.1.2" "utils-merge@1.0.1": From 0d689d214fc7abf32f4f2deabcce61041b73d642 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Fri, 28 Oct 2022 11:32:19 +0530 Subject: [PATCH 0219/1247] fix: optional sign flag --- packages/core-types/src/smart-account.types.ts | 8 +++++++- packages/smart-account/src/SmartAccount.ts | 9 ++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 3b73a6878..d1a7c8210 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -16,6 +16,7 @@ export interface SmartAccountConfig { backend_url: string relayer_url: string dappAPIKey?: string + signType?: SignTypeMethod providerUrlConfig?: ProviderUrlConfig[] entryPointAddress?: string bundlerUrl?: string @@ -23,6 +24,11 @@ export interface SmartAccountConfig { signingServiceUrl: string } +enum SignTypeMethod { + PERSONAL_SIGN = 'PERSONAL_SIGN', + EIP712_SIGN = 'EIP712_SIGN' +} + export type ProviderUrlConfig = { chainId: ChainId providerUrl: string @@ -45,7 +51,7 @@ export type EstimateSmartAccountDeploymentDto = { export type SmartAccountState = { chainId: ChainId - version: string, + version: string address: string // multichain (EVM) owner: string // multichain (EVM) isDeployed: boolean // chain specific diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index e34295301..c997ea539 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -173,8 +173,11 @@ class SmartAccount { // Should not break if we make this wallet connected provider optional (We'd have JsonRpcProvider / JsonRpcSender) this.provider = walletProvider - // TODO:: Allow original signer to be passed and preserve - this.signer = new SmartAccountSigner(this.provider) + if (this.#smartAccountConfig.signType === 'PERSONAL_SIGN') { + this.signer = walletProvider.getSigner() + } else { + this.signer = new SmartAccountSigner(this.provider) + } this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) this.relayer = new RestRelayer({ url: this.#smartAccountConfig.relayer_url }) @@ -866,4 +869,4 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { // paymaster for goerli // 0x50e8996670759E1FAA315eeaCcEfe0c0A043aA51 -export default SmartAccount \ No newline at end of file +export default SmartAccount From a278bda987a5e291b29cad5523d4ac64ba409fa0 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 28 Oct 2022 11:32:05 +0400 Subject: [PATCH 0220/1247] minimal smartaccountsigner + relay endpoint update + optional personal sign --- package.json | 2 +- .../core-types/src/smart-account.types.ts | 4 +- packages/smart-account/src/SmartAccount.ts | 41 +++++++++------- .../src/signers/SmartAccountSigner.ts | 48 +++++-------------- 4 files changed, 40 insertions(+), 55 deletions(-) diff --git a/package.json b/package.json index 87e081ec7..d0e1d79ee 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@types/mocha": "^9.1.1", "hardhat": "^2.9.9", "lerna": "^5.5.4", - "nx": "^15.0.3", + "nx": "^15.0.4", "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1" diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index d1a7c8210..5c3a2ebbe 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -16,7 +16,7 @@ export interface SmartAccountConfig { backend_url: string relayer_url: string dappAPIKey?: string - signType?: SignTypeMethod + signType: SignTypeMethod providerUrlConfig?: ProviderUrlConfig[] entryPointAddress?: string bundlerUrl?: string @@ -24,7 +24,7 @@ export interface SmartAccountConfig { signingServiceUrl: string } -enum SignTypeMethod { +export enum SignTypeMethod { PERSONAL_SIGN = 'PERSONAL_SIGN', EIP712_SIGN = 'EIP712_SIGN' } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index c997ea539..619630d9d 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -15,6 +15,7 @@ import { SmartAccountVersion, SignedTransaction, ChainId, + SignTypeMethod, SmartAccountContext, SmartWalletFactoryContract, MultiSendContract, @@ -39,6 +40,7 @@ import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' import TransactionManager, { ContractUtils, + smartAccountSignMessage, smartAccountSignTypedData } from '@biconomy-sdk/transactions' @@ -173,12 +175,7 @@ class SmartAccount { // Should not break if we make this wallet connected provider optional (We'd have JsonRpcProvider / JsonRpcSender) this.provider = walletProvider - if (this.#smartAccountConfig.signType === 'PERSONAL_SIGN') { - this.signer = walletProvider.getSigner() - } else { - this.signer = new SmartAccountSigner(this.provider) - } - + this.signer = new SmartAccountSigner(this.provider) this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) this.relayer = new RestRelayer({ url: this.#smartAccountConfig.relayer_url }) this.aaProvider = {} @@ -487,17 +484,28 @@ class SmartAccount { */ async signTransaction(signTransactionDto: SignTransactionDto): Promise { const { chainId = this.#smartAccountConfig.activeNetworkId, tx } = signTransactionDto + const signatureType = this.#smartAccountConfig.signType; let walletContract = this.smartAccount(chainId).getContract() walletContract = walletContract.attach(this.address) - // TODO - rename and organize utils - const { signer, data } = await smartAccountSignTypedData( - this.signer, - walletContract, - tx, - chainId - ) - let signature = '0x' - signature += data.slice(2) + let signature = '0x'; + if (signatureType === SignTypeMethod.PERSONAL_SIGN) { + const { signer, data } = await smartAccountSignMessage( + this.signer, + walletContract, + tx, + chainId + ) + signature += data.slice(2) + } else { + const { signer, data } = await smartAccountSignTypedData( + this.signer, + walletContract, + tx, + chainId + ) + signature += data.slice(2) + + } return signature // return this.signer.signTransaction(signTransactionDto) } @@ -844,10 +852,11 @@ class SmartAccount { export const DefaultSmartAccountConfig: SmartAccountConfig = { activeNetworkId: ChainId.GOERLI, //Update later paymasterAddress: '0x50e8996670759E1FAA315eeaCcEfe0c0A043aA51', + signType: SignTypeMethod.EIP712_SIGN, signingServiceUrl: 'https://us-central1-biconomy-staging.cloudfunctions.net', supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], backend_url: 'https://sdk-backend.staging.biconomy.io/v1', - relayer_url: 'https://sdk-relayer-preview.staging.biconomy.io/v1/relay', + relayer_url: 'https://sdk-relayer-preview.staging.biconomy.io/api/v1/relay', dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', bundlerUrl: 'http://localhost:3000/rpc', providerUrlConfig: [ diff --git a/packages/smart-account/src/signers/SmartAccountSigner.ts b/packages/smart-account/src/signers/SmartAccountSigner.ts index a65dbffc4..0903809a7 100644 --- a/packages/smart-account/src/signers/SmartAccountSigner.ts +++ b/packages/smart-account/src/signers/SmartAccountSigner.ts @@ -16,22 +16,27 @@ import { TransactionRequest, TransactionResponse } from '@ethersproject/provider export class SmartAccountSigner extends EthersSigner implements TypedDataSigner { readonly provider: JsonRpcProvider - // readonly sender: JsonRpcSender + // todo : later + //readonly sender: JsonRpcSender readonly defaultChainId: number | undefined constructor(provider: JsonRpcProvider, defaultChainId?: number) { super() this.provider = provider this.defaultChainId = defaultChainId - // this.sender = new JsonRpcSender(provider) + // todo : later + //this.sender = new JsonRpcSender(provider) } _address!: string - // relayer: Relayer + + // May have + // _relayer // Might have // _context: not smartAccountContext but the addresses of contracts from SmartAccountState + // todo : later /** * Note: When you do getAddress it could use provider.getAddress / provider.getSmartAccountAddress or directly access SmartAccountAPI */ @@ -54,39 +59,12 @@ export class SmartAccountSigner extends EthersSigner implements TypedDataSigner return signature } - // getRelayer(chainId?: number): Promise { - // console.log(chainId) - // throw new Error('TODO') - // } - + // Review getProvider - // getProvider returns a JsonRpcProvider instance for the current chain. - // Note that this method is bound to a particular chain - // Review for the provider we want here - async getProvider(chainId?: number): Promise { - if (chainId) { - const currentChainId = await this.getChainId() - if (currentChainId !== chainId) { - throw new Error( - `signer is attempting to access chain ${chainId}, but is already bound to chain ${currentChainId}` - ) - } - } - return this.provider - } - - // handle compatibility with smart account's intent - // this should send the tx to relayers which will relay to network. - async sendTransaction(transaction: Deferrable): Promise { - console.log(transaction) - const txHash = '' - // @ts-ignore - return txHash - } + // todo : implement sendTransaction - // signMessage matches implementation from ethers JsonRpcSigner for compatibility, but with - // multi-chain support. + // signMessage matches implementation from ethers JsonRpcSigner for compatibility async signMessage(message: BytesLike): Promise { if (!this.provider) { throw new Error('missing provider') @@ -96,9 +74,7 @@ export class SmartAccountSigner extends EthersSigner implements TypedDataSigner return await this.provider.send('personal_sign', [ethers.utils.hexlify(data), address]) } - // signTypedData matches implementation from ethers JsonRpcSigner for compatibility, but with - // multi-chain support. - // Review + // signTypedData matches implementation from ethers JsonRpcSigner for compatibility async signTypedData( domain: TypedDataDomain, types: Record>, From 32d5d51cdfce70e29896fb2fa6aba2a8079d6581 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 28 Oct 2022 12:57:46 +0400 Subject: [PATCH 0221/1247] testing forward flow with rpc relayer + potetial change for relayer instance per network + bundler url update --- .../account-abstraction/src/HttpRpcClient.ts | 1 - packages/core-types/src/types.ts | 5 ++- packages/relayer/src/rest-relayer.ts | 31 ++++++++++--------- packages/smart-account/src/SmartAccount.ts | 2 +- 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/packages/account-abstraction/src/HttpRpcClient.ts b/packages/account-abstraction/src/HttpRpcClient.ts index a77950196..be2f982cd 100644 --- a/packages/account-abstraction/src/HttpRpcClient.ts +++ b/packages/account-abstraction/src/HttpRpcClient.ts @@ -16,7 +16,6 @@ export class HttpRpcClient { name: 'Not actually connected to network, only talking to the Bundler!', chainId }) - // this.chainId = chainId; } // TODO : add version of HttpRpcClient || interface in RPC relayer to sendSCWTransactionToRelayer diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index c35865e8e..a1e5b5fa5 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -1,3 +1,5 @@ +import { ChainId } from "./chains.types" + export type SmartAccountVersion = '1.0.1' | '1.0.0' export enum OperationType { @@ -45,7 +47,8 @@ export const FAKE_SIGNATURE = '0x39f5032f1cd30005aa1e35f04394cabfe7de3b6ae6d95b27edd8556064c287bf61f321fead0cf48ca4405d497cc8fc47fc7ff0b7f5c45baa14090a44f2307d8230' export type RestRelayerOptions = { - url: string + url: string, + // chainId: ChainId } export type TokenData = { diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 743a67571..3e1b9f10f 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -19,12 +19,18 @@ import { HttpMethod, sendRequest } from './utils/httpRequests' export class RestRelayer implements Relayer { #relayServiceBaseUrl: string + // #chainId: number + relayerNodeEthersProvider: ethers.providers.JsonRpcProvider; constructor(options: RestRelayerOptions) { - const { url } = options + const { url, chainId } = options this.#relayServiceBaseUrl = url - this.relayerNodeEthersProvider = new ethers.providers.JsonRpcProvider(url); + // this.#chainId = chainId + this.relayerNodeEthersProvider = new ethers.providers.JsonRpcProvider(url /*, { + name: 'Not actually connected to network, only talking to the Relayer!', + chainId + }*/); } prepareWalletDeploy( @@ -92,7 +98,7 @@ export class RestRelayer implements Relayer { // JSON RPC Call // rawTx to becomes multiSend address and data gets prepared again return await this.relayerNodeEthersProvider - .send('eth_sendSmartContractWalletTransaction', [{ ...signedTx.rawTx, gasLimit: (gasLimit as GasLimit).hex, refundInfo: { + .send('eth_sendSmartContractWalletTransaction', [{ ...finalRawRx, gasLimit: (gasLimit as GasLimit).hex, refundInfo: { tokenGasPrice: signedTx.tx.gasPrice, gasToken: signedTx.tx.gasToken, } @@ -100,19 +106,16 @@ export class RestRelayer implements Relayer { } console.log('signedTx', signedTx) - // API call - return sendRequest({ - url: `${this.#relayServiceBaseUrl}`, - method: HttpMethod.Post, - body: { - ...signedTx.rawTx, - gasLimit: gasLimit, - refundInfo: { + + // JSON RPC Call + // rawTx to becomes multiSend address and data gets prepared again + return await this.relayerNodeEthersProvider + .send('eth_sendSmartContractWalletTransaction', [{ + ...signedTx.rawTx, gasLimit: (gasLimit as GasLimit).hex, refundInfo: { tokenGasPrice: signedTx.tx.gasPrice, - gasToken: signedTx.tx.gasToken + gasToken: signedTx.tx.gasToken, } - } - }) + }]) } async getFeeOptions(chainId: number): Promise { diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 619630d9d..ac9379905 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -858,7 +858,7 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { backend_url: 'https://sdk-backend.staging.biconomy.io/v1', relayer_url: 'https://sdk-relayer-preview.staging.biconomy.io/api/v1/relay', dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', - bundlerUrl: 'http://localhost:3000/rpc', + bundlerUrl: 'https://sdk-relayer-preview.staging.biconomy.io/api/v1/relay', providerUrlConfig: [ // TODO: Define Type For It { From e55ce2c556833a59d6365d725ac8e410be0116fc Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 28 Oct 2022 12:59:24 +0400 Subject: [PATCH 0222/1247] potetial change for relayer instance per network --- packages/relayer/src/rest-relayer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 3e1b9f10f..d6ae692e6 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -24,7 +24,7 @@ export class RestRelayer implements Relayer { relayerNodeEthersProvider: ethers.providers.JsonRpcProvider; constructor(options: RestRelayerOptions) { - const { url, chainId } = options + const { url /*, chainId*/ } = options this.#relayServiceBaseUrl = url // this.#chainId = chainId this.relayerNodeEthersProvider = new ethers.providers.JsonRpcProvider(url /*, { From b58f21b6d10c0c331d1ff26cf39a9ab1f311fe03 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 28 Oct 2022 14:41:32 +0400 Subject: [PATCH 0223/1247] minor clean + refactor --- packages/smart-account/src/SmartAccount.ts | 53 ++++----------------- packages/transactions/src/account-utils.ts | 15 ------ packages/transactions/src/contract-utils.ts | 2 - 3 files changed, 10 insertions(+), 60 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index ac9379905..f77c122a1 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -33,7 +33,11 @@ import NodeClient, { ProviderUrlConfig, ChainConfig, SmartAccountsResponse, - SmartAccountByOwnerDto + SmartAccountByOwnerDto, + SCWTransactionResponse, + BalancesResponse, + BalancesDto, + UsdBalanceResponse, } from '@biconomy-sdk/node-client' import { Web3Provider } from '@ethersproject/providers' import { Relayer, RestRelayer } from '@biconomy-sdk/relayer' @@ -44,37 +48,13 @@ import TransactionManager, { smartAccountSignTypedData } from '@biconomy-sdk/transactions' -import { BalancesDto } from '@biconomy-sdk/node-client' -import { - SCWTransactionResponse, - BalancesResponse, - UsdBalanceResponse -} from '@biconomy-sdk/node-client' - import { TransactionResponse } from '@ethersproject/providers' import { SmartAccountSigner } from './signers/SmartAccountSigner' // AA import { newProvider, ERC4337EthersProvider } from '@biconomy-sdk/account-abstraction' -import { ethers, Signer } from 'ethers' - -// function Confirmable() { -// return function (target: Object, key: string | symbol, descriptor: PropertyDescriptor) { -// console.log('target ', target) -// console.log('key ', key) -// console.log('descriptor ', descriptor) -// const original = descriptor.value; - -// descriptor.value = function( ... args: any[]) { -// console.log('args ', args) -// args[0].chainId = 1 -// const result = original.apply(this, args); -// return result; -// }; -// return descriptor; -// }; -// } +import { ethers, Signer } from 'ethers' // Create an instance of Smart Account with multi-chain support. class SmartAccount { @@ -100,17 +80,13 @@ class SmartAccount { // 4337Provider aaProvider!: { [chainId: number]: ERC4337EthersProvider } - // Ideally not JsonRpcSigner but extended signer // Also the original EOA signer signer!: Signer & TypedDataSigner - // We may have different signer for ERC4337 nodeClient!: NodeClient contractUtils!: ContractUtils - // TBD : Do we keep manager for both SCW(forward) and Account Abstraction? transactionManager!: TransactionManager - // aaTransactionManager // Instance of relayer (Relayer Service Client) connected with this Smart Account and always ready to dispatch transactions // relayer.relay => dispatch to blockchain @@ -126,33 +102,24 @@ class SmartAccount { // @review address!: string + // TODO : move to network config dappAPIKey!: string + // TODO : review from contractUtils smartAccountState!: SmartAccountState // TODO // Review provider type WalletProviderLike / ExternalProvider // Can expose recommended provider classes through the SDK - /** - * Constrcutor for the Smart Account. If config is not provided it makes Smart Account available using default configuration - * If you wish to use your own backend server and relayer service, pass the URLs here - */ // review SmartAccountConfig // TODO : EOA signer instead of { walletProvider } // TODO : We Need to take EntryPoint | Paymaster | bundlerUrl address as optional ? // TODO: May be need to manage separate config for Forward and gasless Flow /** - Scw-Refund-Flow -- config - prepareRefundTransactionBatch - createRefundTransactionBatch - sendTransaction - */ - - /** - GassLess Flow -- config - sendGaslessTransaction + * Constrcutor for the Smart Account. If config is not provided it makes Smart Account available using default configuration + * If you wish to use your own backend server and relayer service, pass the URLs here */ constructor(walletProvider: Web3Provider, config?: Partial) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } diff --git a/packages/transactions/src/account-utils.ts b/packages/transactions/src/account-utils.ts index 55396fc4b..eef43041e 100644 --- a/packages/transactions/src/account-utils.ts +++ b/packages/transactions/src/account-utils.ts @@ -1,27 +1,12 @@ import { arrayify, - // defaultAbiCoder, - // hexConcat, parseEther - // solidityKeccak256, } from 'ethers/lib/utils' import { ethers, BigNumber, - // BigNumberish, - // Contract, - // ContractReceipt, Wallet } from 'ethers' -/* import { - IERC20, - EntryPoint, - EntryPoint__factory, - SimpleWallet__factory, -} from "../typechain"; */ -// import { BytesLike } from "@ethersproject/bytes"; -// import { expect } from "chai"; -// import { debugTransaction } from "./debugTx"; import { keccak256 } from 'ethereumjs-util' export const AddressZero = ethers.constants.AddressZero diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/contract-utils.ts index 85657e6be..164418a36 100644 --- a/packages/transactions/src/contract-utils.ts +++ b/packages/transactions/src/contract-utils.ts @@ -33,8 +33,6 @@ class ContractUtils { smartAccountState!: SmartAccountState - // Note: Should DEFAULT_VERSION be moved here? - constructor(readonly chainConfig: ChainConfig[]) { this.ethAdapter = {} this.smartWalletContract = {} From 350555863c0a1de325e1e79f16864658793189cb Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 28 Oct 2022 15:11:06 +0400 Subject: [PATCH 0224/1247] lint fixes --- .../src/DeterministicDeployer.ts | 49 +++++++++---------- .../src/UserOperationEventListener.ts | 1 + packages/core-types/src/types.ts | 6 +-- .../src/contracts/contractInstancesEthers.ts | 10 +++- packages/transactions/src/account-utils.ts | 11 +---- 5 files changed, 37 insertions(+), 40 deletions(-) diff --git a/packages/account-abstraction/src/DeterministicDeployer.ts b/packages/account-abstraction/src/DeterministicDeployer.ts index b5da9ae55..a2a293d88 100644 --- a/packages/account-abstraction/src/DeterministicDeployer.ts +++ b/packages/account-abstraction/src/DeterministicDeployer.ts @@ -13,7 +13,7 @@ export class DeterministicDeployer { * @param ctrCode constructor code to pass to CREATE2 * @param salt optional salt. defaults to zero */ - static async getAddress (ctrCode: string, salt: BigNumberish = 0): Promise { + static async getAddress(ctrCode: string, salt: BigNumberish = 0): Promise { return await DeterministicDeployer.instance.getDeterministicDeployAddress(ctrCode, salt) } @@ -23,29 +23,29 @@ export class DeterministicDeployer { * @param salt optional salt. defaults to zero * @return the deployed address */ - static async deploy (ctrCode: string, salt: BigNumberish = 0): Promise { + static async deploy(ctrCode: string, salt: BigNumberish = 0): Promise { return await DeterministicDeployer.instance.deterministicDeploy(ctrCode, salt) } // from: https://github.com/Arachnid/deterministic-deployment-proxy proxyAddress = '0x4e59b44847b379578588920ca78fbf26c0b4956c' - deploymentTransaction = '0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222' + deploymentTransaction = + '0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222' deploymentSignerAddress = '0x3fab184622dc19b6109349b94811493bf2a45362' deploymentGasPrice = 100e9 deploymentGasLimit = 100000 - constructor (readonly provider = ethers.provider) { - } + constructor(readonly provider = ethers.provider) {} - async isContractDeployed (address: string): Promise { - return await this.provider.getCode(address).then(code => code.length > 2) + async isContractDeployed(address: string): Promise { + return await this.provider.getCode(address).then((code) => code.length > 2) } - async isDeployerDeployed (): Promise { + async isDeployerDeployed(): Promise { return await this.isContractDeployed(this.proxyAddress) } - async deployDeployer (): Promise { + async deployDeployer(): Promise { if (await this.isContractDeployed(this.proxyAddress)) { return } @@ -60,40 +60,37 @@ export class DeterministicDeployer { }) } await this.provider.send('eth_sendRawTransaction', [this.deploymentTransaction]) - if (!await this.isContractDeployed(this.proxyAddress)) { - throw new Error('raw TX didn\'t deploy deployer!') + if (!(await this.isContractDeployed(this.proxyAddress))) { + throw new Error("raw TX didn't deploy deployer!") } } - async getDeployTransaction (ctrCode: string, salt: BigNumberish = 0): Promise { + async getDeployTransaction(ctrCode: string, salt: BigNumberish = 0): Promise { await this.deployDeployer() const saltEncoded = hexZeroPad(hexlify(salt), 32) return { to: this.proxyAddress, - data: hexConcat([ - saltEncoded, - ctrCode]) + data: hexConcat([saltEncoded, ctrCode]) } } - async getDeterministicDeployAddress (ctrCode: string, salt: BigNumberish = 0): Promise { + async getDeterministicDeployAddress(ctrCode: string, salt: BigNumberish = 0): Promise { // this method works only before the contract is already deployed: // return await this.provider.call(await this.getDeployTransaction(ctrCode, salt)) const saltEncoded = hexZeroPad(hexlify(salt), 32) - return '0x' + keccak256(hexConcat([ - '0xff', - this.proxyAddress, - saltEncoded, - keccak256(ctrCode) - ])).slice(-40) + return ( + '0x' + + keccak256(hexConcat(['0xff', this.proxyAddress, saltEncoded, keccak256(ctrCode)])).slice(-40) + ) } - async deterministicDeploy (ctrCode: string, salt: BigNumberish = 0): Promise { + async deterministicDeploy(ctrCode: string, salt: BigNumberish = 0): Promise { const addr = await this.getDeterministicDeployAddress(ctrCode, salt) - if (!await this.isContractDeployed(addr)) { - await this.provider.getSigner().sendTransaction( - await this.getDeployTransaction(ctrCode, salt)) + if (!(await this.isContractDeployed(addr))) { + await this.provider + .getSigner() + .sendTransaction(await this.getDeployTransaction(ctrCode, salt)) } return addr } diff --git a/packages/account-abstraction/src/UserOperationEventListener.ts b/packages/account-abstraction/src/UserOperationEventListener.ts index 55adbe1e2..d876d1ed6 100644 --- a/packages/account-abstraction/src/UserOperationEventListener.ts +++ b/packages/account-abstraction/src/UserOperationEventListener.ts @@ -53,6 +53,7 @@ export class UserOperationEventListener { /* eslint-disable @typescript-eslint/no-explicit-any */ async listenerCallback(this: any, ...param: any): Promise { console.log(param) + // eslint-disable-next-line prefer-rest-params const event = arguments[arguments.length - 1] as Event if (event.args == null) { console.error('got event without args', event) diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index a1e5b5fa5..95c1e1e61 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -1,4 +1,4 @@ -import { ChainId } from "./chains.types" +import { ChainId } from './chains.types' export type SmartAccountVersion = '1.0.1' | '1.0.0' @@ -47,7 +47,7 @@ export const FAKE_SIGNATURE = '0x39f5032f1cd30005aa1e35f04394cabfe7de3b6ae6d95b27edd8556064c287bf61f321fead0cf48ca4405d497cc8fc47fc7ff0b7f5c45baa14090a44f2307d8230' export type RestRelayerOptions = { - url: string, + url: string // chainId: ChainId } @@ -68,7 +68,7 @@ export type FeeQuote = { decimal: number logoUrl: string payment: number - tokenGasPrice: number + tokenGasPrice: number offset?: number refundReceiver?: string } diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index b020921fd..ae8be2c3e 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -94,10 +94,16 @@ export function getSmartWalletFactoryContractInstance( switch (smartAccountVersion) { case '1.0.0': - walletFactoryContract = SmartWalletFactoryFactoryContractV100.connect(contractAddress, provider) + walletFactoryContract = SmartWalletFactoryFactoryContractV100.connect( + contractAddress, + provider + ) return new SmartWalletFacoryContractEthers_v1_0_0(walletFactoryContract) case '1.0.1': - walletFactoryContract = SmartWalletFactoryFactoryContractV101.connect(contractAddress, provider) + walletFactoryContract = SmartWalletFactoryFactoryContractV101.connect( + contractAddress, + provider + ) return new SmartWalletFacoryContractEthers_v1_0_1(walletFactoryContract) } } diff --git a/packages/transactions/src/account-utils.ts b/packages/transactions/src/account-utils.ts index fe4c24cd4..0fb8c2829 100644 --- a/packages/transactions/src/account-utils.ts +++ b/packages/transactions/src/account-utils.ts @@ -1,12 +1,5 @@ -import { - arrayify, - parseEther -} from 'ethers/lib/utils' -import { - ethers, - BigNumber, - Wallet -} from 'ethers' +import { arrayify, parseEther } from 'ethers/lib/utils' +import { ethers, BigNumber, Wallet } from 'ethers' import { keccak256 } from 'ethereumjs-util' export const AddressZero = ethers.constants.AddressZero From b80f009fb598642e6c4804b6e4ea1400ba8e0def Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 28 Oct 2022 15:38:10 +0400 Subject: [PATCH 0225/1247] discussion note --- packages/smart-account/src/SmartAccount.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index df7bb6edc..7ffd8e437 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -114,13 +114,12 @@ class SmartAccount { // review SmartAccountConfig // TODO : EOA signer instead of { walletProvider } - // TODO : We Need to take EntryPoint | Paymaster | bundlerUrl address as optional ? - // TODO: May be need to manage separate config for Forward and gasless Flow /** * Constrcutor for the Smart Account. If config is not provided it makes Smart Account available using default configuration * If you wish to use your own backend server and relayer service, pass the URLs here */ + // todo : could remove WalletProvider constructor(walletProvider: Web3Provider, config?: Partial) { this.#smartAccountConfig = { ...DefaultSmartAccountConfig } From d50921d106fbfef214e9521b2f83feef886838f8 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 28 Oct 2022 18:43:04 +0400 Subject: [PATCH 0226/1247] init with rpc relayer chainwise jsonrpc node provider aspect --- packages/relayer/src/rest-relayer.ts | 78 +++++++++++++++++----------- 1 file changed, 47 insertions(+), 31 deletions(-) diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 928472abe..497a08f31 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -1,4 +1,4 @@ -import { TransactionResponse } from '@ethersproject/providers' +import { JsonRpcProvider, TransactionResponse } from '@ethersproject/providers' import { ethers } from 'ethers' import { Relayer } from '.' @@ -8,7 +8,8 @@ import { RestRelayerOptions, FeeOptionsResponse, RelayResponse, - GasLimit + GasLimit, + ChainId } from '@biconomy-sdk/core-types' import { MetaTransaction, encodeMultiSend } from './utils/multisend' import { HttpMethod, sendRequest } from './utils/httpRequests' @@ -19,20 +20,24 @@ import { HttpMethod, sendRequest } from './utils/httpRequests' export class RestRelayer implements Relayer { #relayServiceBaseUrl: string - // #chainId: number - - relayerNodeEthersProvider: ethers.providers.JsonRpcProvider + relayerNodeEthersProvider!: { [chainId: number]: JsonRpcProvider } constructor(options: RestRelayerOptions) { - const { url /*, chainId*/ } = options + const { url } = options + this.relayerNodeEthersProvider = {} this.#relayServiceBaseUrl = url - // this.#chainId = chainId - this.relayerNodeEthersProvider = new ethers.providers.JsonRpcProvider( - url /*, { - name: 'Not actually connected to network, only talking to the Relayer!', - chainId - }*/ - ) + } + + setRelayerNodeEthersProvider(chainId: ChainId) { + if (!this.relayerNodeEthersProvider[chainId]) { + this.relayerNodeEthersProvider[chainId] = new ethers.providers.JsonRpcProvider( + this.#relayServiceBaseUrl, + { + name: 'Not actually connected to network, only talking to the Relayer!', + chainId: chainId + } + ) + } } prepareWalletDeploy( @@ -60,6 +65,11 @@ export class RestRelayer implements Relayer { async relay(relayTransaction: RelayTransaction): Promise { const { config, signedTx, context, gasLimit } = relayTransaction const { isDeployed, address } = config + const chainId = signedTx.rawTx.chainId + + // Creates an instance of relayer node ethers provider for chain not already discovered + this.setRelayerNodeEthersProvider(chainId) + const { multiSendCall } = context // multisend has to be multiSendCallOnly here! if (!isDeployed) { const prepareWalletDeploy: DeployWallet = { @@ -99,32 +109,38 @@ export class RestRelayer implements Relayer { // JSON RPC Call // rawTx to becomes multiSend address and data gets prepared again - return await this.relayerNodeEthersProvider.send('eth_sendSmartContractWalletTransaction', [ - { - ...finalRawRx, - gasLimit: (gasLimit as GasLimit).hex, - refundInfo: { - tokenGasPrice: signedTx.tx.gasPrice, - gasToken: signedTx.tx.gasToken + return await this.relayerNodeEthersProvider[chainId].send( + 'eth_sendSmartContractWalletTransaction', + [ + { + ...finalRawRx, + gasLimit: (gasLimit as GasLimit).hex, + refundInfo: { + tokenGasPrice: signedTx.tx.gasPrice, + gasToken: signedTx.tx.gasToken + } } - } - ]) + ] + ) } console.log('signedTx', signedTx) // JSON RPC Call // rawTx to becomes multiSend address and data gets prepared again - return await this.relayerNodeEthersProvider.send('eth_sendSmartContractWalletTransaction', [ - { - ...signedTx.rawTx, - gasLimit: (gasLimit as GasLimit).hex, - refundInfo: { - tokenGasPrice: signedTx.tx.gasPrice, - gasToken: signedTx.tx.gasToken + return await this.relayerNodeEthersProvider[chainId].send( + 'eth_sendSmartContractWalletTransaction', + [ + { + ...signedTx.rawTx, + gasLimit: (gasLimit as GasLimit).hex, + refundInfo: { + tokenGasPrice: signedTx.tx.gasPrice, + gasToken: signedTx.tx.gasToken + } } - } - ]) + ] + ) } async getFeeOptions(chainId: number): Promise { From 477206546e0518af5a1d835f7370d70d586420c0 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 31 Oct 2022 16:56:23 +0530 Subject: [PATCH 0227/1247] feat: social login ui added --- packages/web3-auth/package.json | 23 +++- packages/web3-auth/src/SocialLogin.tsx | 174 +++++++++++++++++++++++++ packages/web3-auth/src/UI.tsx | 143 ++++++++++++++++++++ packages/web3-auth/src/index.ts | 4 +- packages/web3-auth/tsconfig.json | 1 + packages/web3-auth/webpack.config.js | 21 +++ 6 files changed, 361 insertions(+), 5 deletions(-) create mode 100644 packages/web3-auth/src/SocialLogin.tsx create mode 100644 packages/web3-auth/src/UI.tsx create mode 100644 packages/web3-auth/webpack.config.js diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index febe2340c..a72d6a990 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -8,7 +8,8 @@ "legos", "batching", "one-click", - "cross-chain" + "cross-chain", + "web3auth" ], "author": "livingrockrises ", "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", @@ -34,6 +35,22 @@ "access": "public" }, "dependencies": { - "@toruslabs/torus-embed": "^1.36.2" + "@web3auth/base": "^3.0.0", + "@web3auth/core": "^3.0.0", + "@web3auth/openlogin-adapter": "^3.0.3", + "ethers": "^5.6.8", + "process": "^0.11.10", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.0.15", + "@types/react-dom": "^18.0.6", + "path": "^0.12.7", + "tslint": "^6.1.3", + "tslint-config-prettier": "^1.18.0", + "typescript": "^4.7.4", + "webpack": "^5.74.0", + "webpack-cli": "^4.10.0" } -} \ No newline at end of file +} diff --git a/packages/web3-auth/src/SocialLogin.tsx b/packages/web3-auth/src/SocialLogin.tsx new file mode 100644 index 000000000..078aee221 --- /dev/null +++ b/packages/web3-auth/src/SocialLogin.tsx @@ -0,0 +1,174 @@ +import React from 'react' +import { createRoot, hydrateRoot } from 'react-dom/client' +import { ethers } from 'ethers' +import { Web3AuthCore } from '@web3auth/core' +import { WALLET_ADAPTERS, CHAIN_NAMESPACES, SafeEventEmitterProvider } from '@web3auth/base' +import { OpenloginAdapter } from '@web3auth/openlogin-adapter' + +import UIComponent from './UI' + +function createLoginModal(socialLogin: SocialLogin) { + const domElement = (document as any).getElementById('web3auth-container') + if (domElement) { + hydrateRoot(domElement, ) + } else { + const root = createRoot(domElement) + root.render() + } +} + +class SocialLogin { + walletDiv: any + walletIframe: any + iWin: any = false + iframeInitialized = false + isInit = false + web3auth: Web3AuthCore | null = null + provider: SafeEventEmitterProvider | null = null + + constructor() { + this.createWalletDiv() + this.isInit = false + this.web3auth = null + this.provider = null + } + + async init(chainId: string) { + try { + console.log('init') + const web3AuthCore = new Web3AuthCore({ + clientId: + 'BEQgHQ6oRgaJXc3uMnGIr-AY-FLTwRinuq8xfgnInrnDrQZYXxDO0e53osvXzBXC1dcUTyD2Itf-zN1VEB8xZlo', + chainConfig: { + chainNamespace: CHAIN_NAMESPACES.EIP155, + chainId: chainId + } + }) + console.log('web3AuthCore 1', web3AuthCore) + + const openloginAdapter = new OpenloginAdapter({ + adapterSettings: { + clientId: + 'BEQgHQ6oRgaJXc3uMnGIr-AY-FLTwRinuq8xfgnInrnDrQZYXxDO0e53osvXzBXC1dcUTyD2Itf-zN1VEB8xZlo', + network: 'testnet', + uxMode: 'redirect', + loginConfig: { + google: { + name: 'Biconomy Social Login', + verifier: 'bico-google-test', + typeOfLogin: 'google', + clientId: '232763728538-7o7jmud0gkfojmijb603cu37konbbn96.apps.googleusercontent.com' + } + }, + whiteLabel: { + name: 'Biconomy SDK', + logoLight: 'https://s2.coinmarketcap.com/static/img/coins/64x64/9543.png', + logoDark: 'https://s2.coinmarketcap.com/static/img/coins/64x64/9543.png', + defaultLanguage: 'en', + dark: true + } + } + }) + web3AuthCore.configureAdapter(openloginAdapter) + console.log('web3AuthCore 2', web3AuthCore) + await web3AuthCore.init() + console.log('web3AuthCore 3', web3AuthCore) + this.web3auth = web3AuthCore + if (web3AuthCore && web3AuthCore.provider) { + this.provider = web3AuthCore.provider + } + this.isInit = true + } catch (error) { + console.error(error) + } + } + + _createIframe(iframeContainerDiv: any) { + this.walletIframe = document.createElement('iframe') + this.walletIframe.style.display = 'none' + this.walletIframe.style.display = 'relative' + this.walletIframe.onload = () => { + this.iWin = this.walletIframe.contentWindow || this.walletIframe + this.iframeInitialized = true + } + iframeContainerDiv.appendChild(this.walletIframe) + } + + createWalletDiv() { + //create a fixed div into html but keep it hidden initially + const walletDiv = document.createElement('div') + walletDiv.id = 'web3auth-container' + walletDiv.style.display = 'none' + walletDiv.style.position = 'fixed' + walletDiv.style.top = '0' + walletDiv.style.right = '0' + walletDiv.style.zIndex = '2323123' + this.walletDiv = walletDiv + // insert div into top of body. + document.body.insertBefore(walletDiv, document.body.firstChild) + this.walletDiv.innerHTML = + "" + this._createIframe(walletDiv) + } + + showWallet() { + this.walletDiv.style.display = 'block' + this.walletIframe.style.display = 'block' + // Set height and width of the iframe to 600x341 + this.walletIframe.style.height = '600px' + this.walletIframe.style.width = '341px' + this.walletIframe.style.border = '0px' + this.walletIframe.style.borderRadius = '3%' + const el = document.getElementById('web3auth-container') + el?.dispatchEvent(new Event('show-modal')) + } + + hideWallet() { + console.log('hide wallet') + this.walletDiv.style.display = 'none' + this.walletIframe.style.display = 'none' + } + + showConnectModal() { + createLoginModal(this) + } + + async login() { + console.log('this', this) + console.log('this.web3auth', this.web3auth) + if (!this.web3auth) { + console.log('web3auth not initialized yet') + return + } + try { + const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.OPENLOGIN, { + loginProvider: 'google' + }) + const web3Provider = new ethers.providers.Web3Provider(web3authProvider!) + const signer = web3Provider.getSigner() + const gotAccount = await signer.getAddress() + const network = await web3Provider.getNetwork() + console.info(`EOA Address ${gotAccount}\nNetwork: ${network}`) + return web3authProvider + } catch (error) { + console.error(error) + throw error + } + } + + logout() { + if (!this.web3auth) { + console.log('web3auth not initialized yet') + return + } + this.web3auth.logout().then(() => { + this.provider = null + }) + } +} + +const socialLoginSDK = new SocialLogin() +;(window as any).socialLoginSDK = socialLoginSDK +export { socialLoginSDK } + +export default SocialLogin diff --git a/packages/web3-auth/src/UI.tsx b/packages/web3-auth/src/UI.tsx new file mode 100644 index 000000000..11b403474 --- /dev/null +++ b/packages/web3-auth/src/UI.tsx @@ -0,0 +1,143 @@ +import React, { useEffect, useState } from 'react' + +const googleCardStyle = { + display: 'flex', + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + width: '319px', + height: '45px', + background: '#252525', + borderRadius: '12px', + border: 'none', + cursor: 'pointer' +} as React.CSSProperties + +const buttonTextSpan = { + fontFamily: 'Chakra Petch', + fontStyle: 'normal', + fontWeight: 600, + fontSize: '18px', + lineHeight: '23px', + display: 'flex', + alignItems: 'center', + textAlign: 'center', + color: '#FFFFFF' +} as React.CSSProperties + +const grid = { + display: 'flex', + alignItems: 'center', + flexDirection: 'column' +} as React.CSSProperties + +const container = { + position: 'fixed', + float: 'left', + left: '0%', + top: '0%', + // transform: 'translate(0%, 50%)', + transition: 'opacity 400ms ease-in', + borderRadius: 10, + padding: 30, + zIndex: 100, + background: 'black' +} as React.CSSProperties + +const footer = { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + marginTop: '26.39px' +} as React.CSSProperties + +const footerNormalText = { + fontFamily: 'Chakra Petch', + fontStyle: 'normal', + fontWeight: '600', + fontSize: '14.109px', + color: '#535353', + lineGeight: '18px' +} as React.CSSProperties + +const footerBigText = { + fontFamily: 'Chakra Petch', + fontStyle: 'normal', + fontWeight: '700', + fontSize: '16.1351px', + lineHeight: '21px', + color: '#535353' +} as React.CSSProperties + +const UI = (props: any) => { + const [show, setShow] = useState(true) + + useEffect(() => { + document.addEventListener('show-modal', (_e: unknown) => { + setShow(true) + }) + document.addEventListener('hide-modal', () => { + setShow(false) + }) + }, []) + + if (!show) { + return <> + } + + return ( +
+ +
+

+ Create a wallet
+ to continue +

+
+
+ +
+
+ powered by + + Biconomy +
+
+ ) +} + +export default UI diff --git a/packages/web3-auth/src/index.ts b/packages/web3-auth/src/index.ts index 87035215f..0c5cd6e6f 100644 --- a/packages/web3-auth/src/index.ts +++ b/packages/web3-auth/src/index.ts @@ -1,3 +1,3 @@ -import Torus from '@toruslabs/torus-embed' +import SocialLogin from './SocialLogin' -export default Torus +export default SocialLogin diff --git a/packages/web3-auth/tsconfig.json b/packages/web3-auth/tsconfig.json index 2a945f000..9e65871af 100644 --- a/packages/web3-auth/tsconfig.json +++ b/packages/web3-auth/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.settings.json", "compilerOptions": { + "jsx": "react", "composite": true, "outDir": "dist", "baseUrl": "src", diff --git a/packages/web3-auth/webpack.config.js b/packages/web3-auth/webpack.config.js new file mode 100644 index 000000000..61450f2f6 --- /dev/null +++ b/packages/web3-auth/webpack.config.js @@ -0,0 +1,21 @@ +const path = require('path'); + +module.exports = { + entry: './src/index.tsx', + module: { + rules: [ + { + test: /\.tsx?$/, + use: 'ts-loader', + exclude: /node_modules/, + }, + ], + }, + resolve: { + extensions: ['.tsx', '.ts', '.js'], + }, + output: { + filename: 'bundle.js', + path: path.resolve(__dirname, 'dist'), + }, +}; From dd34b2d54d41348275a8791813060292a84100d4 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Mon, 31 Oct 2022 17:54:04 +0400 Subject: [PATCH 0228/1247] pkg version update --- lerna.json | 2 +- packages/account-abstraction/package.json | 2 +- packages/common/package.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/gas-estimator/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/smart-account/src/SmartAccount.ts | 2 +- packages/transactions/package.json | 2 +- packages/web3-auth/package.json | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lerna.json b/lerna.json index 218e64937..b91a9c5f2 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], "npmClient": "yarn", - "version": "1.0.13", + "version": "1.0.17", "useWorkspaces": true } \ No newline at end of file diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index f07a19b6b..2eba2aa0f 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/account-abstraction", - "version": "1.0.13", + "version": "1.0.17", "description": "Account abstraction APIs to prepare user operations ", "keywords": [ "account-abstraction", diff --git a/packages/common/package.json b/packages/common/package.json index a90782a0f..682a26dc9 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/common", - "version": "1.0.13", + "version": "1.0.17", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 0923e6771..1cc3daabc 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.13", + "version": "1.0.17", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index b9ce9588c..400fad742 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.13", + "version": "1.0.17", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index 16922015b..5e8168a09 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/gas-estimator", - "version": "1.0.13", + "version": "1.0.17", "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", "keywords": [ "gas-estimation", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 304e17cb7..7a324932b 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.13", + "version": "1.0.17", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 51b22a431..828079b47 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.13", + "version": "1.0.17", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 1b90072cf..956d3c532 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.13", + "version": "1.0.17", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 7ffd8e437..17f6af372 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -170,7 +170,7 @@ class SmartAccount { if (!network) return const providerUrl = this.getProviderUrl(network) const readProvider = new ethers.providers.JsonRpcProvider(providerUrl) - await this.contractUtils.initializeContracts(this.signer, readProvider, network) + this.contractUtils.initializeContracts(this.signer, readProvider, network) if (!this.address) { this.address = await this.getAddress({ diff --git a/packages/transactions/package.json b/packages/transactions/package.json index f45e0a5bb..0b6e6fdf1 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.13", + "version": "1.0.17", "description": "utils for sending all transaction legos", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index febe2340c..957b8de67 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/web3-auth", - "version": "1.0.13", + "version": "1.0.17", "description": "web3-auth for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From 3a72f1f0dac445a55ec1688e1851165f8943cb73 Mon Sep 17 00:00:00 2001 From: Kunal Chauhan Date: Mon, 31 Oct 2022 23:19:55 +0530 Subject: [PATCH 0229/1247] added messaging sdk --- packages/core-types/src/types.ts | 4 +- packages/relayer/package.json | 3 +- packages/relayer/src/rest-relayer.ts | 81 +- yarn.lock | 23366 ++++++++++++------------- 4 files changed, 11657 insertions(+), 11797 deletions(-) diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 95c1e1e61..4ef25ffdd 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -15,8 +15,8 @@ export type Eip3770Address = { export type RelayResponse = { code?: number message?: string - transactionId?: string - hash: string + transactionId: string + hash?: string error?: string connectionUrl?: string } diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 828079b47..e080d5a69 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -27,7 +27,8 @@ "dependencies": { "@biconomy-sdk/core-types": "*", "@ethersproject/providers": "^5.6.8", - "ethers": "^5.6.9" + "ethers": "^5.6.9", + "gasless-messaging-sdk": "^0.0.9" }, "publishConfig": { "access": "public" diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 497a08f31..7f157c41d 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -13,6 +13,7 @@ import { } from '@biconomy-sdk/core-types' import { MetaTransaction, encodeMultiSend } from './utils/multisend' import { HttpMethod, sendRequest } from './utils/httpRequests' +import { ClientMessenger } from 'gasless-messaging-sdk' /** * Relayer class that would be used via REST API to execute transactions @@ -71,6 +72,7 @@ export class RestRelayer implements Relayer { this.setRelayerNodeEthersProvider(chainId) const { multiSendCall } = context // multisend has to be multiSendCallOnly here! + let finalRawRx if (!isDeployed) { const prepareWalletDeploy: DeployWallet = { config, @@ -98,41 +100,27 @@ export class RestRelayer implements Relayer { .getInterface() .encodeFunctionData('multiSend', [encodeMultiSend(txs)]) - const finalRawRx = { + finalRawRx = { to: multiSendCall.getAddress(), data: txnData, chainId: signedTx.rawTx.chainId, value: 0 } - console.log('finaRawTx') - console.log(finalRawRx) // JSON RPC Call // rawTx to becomes multiSend address and data gets prepared again - return await this.relayerNodeEthersProvider[chainId].send( - 'eth_sendSmartContractWalletTransaction', - [ - { - ...finalRawRx, - gasLimit: (gasLimit as GasLimit).hex, - refundInfo: { - tokenGasPrice: signedTx.tx.gasPrice, - gasToken: signedTx.tx.gasToken - } - } - ] - ) + } else { + finalRawRx = signedTx.rawTx } - console.log('signedTx', signedTx) + console.log('finaRawTx') + console.log(finalRawRx) - // JSON RPC Call - // rawTx to becomes multiSend address and data gets prepared again - return await this.relayerNodeEthersProvider[chainId].send( + const response = await this.relayerNodeEthersProvider[chainId].send( 'eth_sendSmartContractWalletTransaction', [ { - ...signedTx.rawTx, + ...finalRawRx, gasLimit: (gasLimit as GasLimit).hex, refundInfo: { tokenGasPrice: signedTx.tx.gasPrice, @@ -141,6 +129,57 @@ export class RestRelayer implements Relayer { } ] ) + if (response.transactionId && response.connectionUrl) { + const clientMessenger = new ClientMessenger(response.connectionUrl) + if (!clientMessenger.socketClient.isConnected()) { + await clientMessenger.connect() + } + + clientMessenger.createTransactionNotifier(response.transactionId, { + onMined: (tx: any) => { + const txId = tx.transactionId + clientMessenger.unsubscribe(txId) + console.log( + `Tx Hash mined message received at client ${JSON.stringify({ + transactionId: txId, + hash: tx.transactionHash, + receipt: tx.receipt + })}` + ) + }, + onHashGenerated: async (tx: any) => { + const txHash = tx.transactionHash + const txId = tx.transactionId + console.log( + `Tx Hash generated message received at client ${JSON.stringify({ + transactionId: txId, + hash: txHash + })}` + ) + + console.log(`Receive time for transaction id ${txId}: ${Date.now()}`) + return { + transactionId: txId, + hash: txHash + } + }, + onError: async (tx: any) => { + const err = tx.error + const txId = tx.transactionId + console.log(`Error message received at client is ${err}`) + clientMessenger.unsubscribe(txId) + + return { + transactionId: txId, + error: err + } + } + }) + } + return { + transactionId: response.transactionId, + error: response.error || 'transaction failed' + } } async getFeeOptions(chainId: number): Promise { diff --git a/yarn.lock b/yarn.lock index f02c608ef..076d1fad7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,53 +3,53 @@ "@0xsequence/network@^0.41.0": - "integrity" "sha512-dRq0ywRKz3CA6c1OSzcD3SJXt35uPMc7OA9oj+tcpI/2FtbGkzsT5fwTDiKU86RYwiXg3GthS6a5j7LIJmVK0Q==" - "resolved" "https://registry.npmjs.org/@0xsequence/network/-/network-0.41.3.tgz" - "version" "0.41.3" + version "0.41.3" + resolved "https://registry.npmjs.org/@0xsequence/network/-/network-0.41.3.tgz" + integrity sha512-dRq0ywRKz3CA6c1OSzcD3SJXt35uPMc7OA9oj+tcpI/2FtbGkzsT5fwTDiKU86RYwiXg3GthS6a5j7LIJmVK0Q== dependencies: "@0xsequence/utils" "^0.41.3" "@ethersproject/providers" "^5.5.1" - "ethers" "^5.5.2" + ethers "^5.5.2" "@0xsequence/utils@^0.41.3": - "integrity" "sha512-WY6x8Ja35eRcC69kK1MdvSYMSG8MIcSCEmJPUVYc31HsBkDCpjcroQqSl3MsxoP7YTv69XUbUdarReH9wA40lg==" - "resolved" "https://registry.npmjs.org/@0xsequence/utils/-/utils-0.41.3.tgz" - "version" "0.41.3" + version "0.41.3" + resolved "https://registry.npmjs.org/@0xsequence/utils/-/utils-0.41.3.tgz" + integrity sha512-WY6x8Ja35eRcC69kK1MdvSYMSG8MIcSCEmJPUVYc31HsBkDCpjcroQqSl3MsxoP7YTv69XUbUdarReH9wA40lg== dependencies: "@ethersproject/abstract-signer" "^5.5.0" "@ethersproject/properties" "^5.5.0" - "ethers" "^5.5.2" - "js-base64" "^3.7.2" + ethers "^5.5.2" + js-base64 "^3.7.2" "@account-abstraction/contracts@^0.2.0": - "integrity" "sha512-CbPYA7o55u1S5Fee5qIWffD/4dxJ7v+86Si8TOUOE/tAMUWP+nzU1kHKUwFrM/HT8OxAQpeXccCD4UtROLtfwA==" - "resolved" "https://registry.npmjs.org/@account-abstraction/contracts/-/contracts-0.2.0.tgz" - "version" "0.2.0" + version "0.2.0" + resolved "https://registry.npmjs.org/@account-abstraction/contracts/-/contracts-0.2.0.tgz" + integrity sha512-CbPYA7o55u1S5Fee5qIWffD/4dxJ7v+86Si8TOUOE/tAMUWP+nzU1kHKUwFrM/HT8OxAQpeXccCD4UtROLtfwA== "@ampproject/remapping@^2.1.0": - "integrity" "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" - "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" - "version" "2.2.0" + version "2.2.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== dependencies: "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": - "integrity" "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" - "version" "7.18.6" + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.0": - "integrity" "sha512-Gt9jszFJYq7qzXVK4slhc6NzJXnOVmRECWcVjF/T23rNXD9NtWQ0W3qxdg+p9wWIB+VQw3GYV/U2Ha9bRTfs4w==" - "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.0.tgz" - "version" "7.20.0" + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.0.tgz" + integrity sha512-Gt9jszFJYq7qzXVK4slhc6NzJXnOVmRECWcVjF/T23rNXD9NtWQ0W3qxdg+p9wWIB+VQw3GYV/U2Ha9bRTfs4w== -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.4.0-0", "@babel/core@^7.8.0": - "integrity" "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==" - "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz" - "version" "7.19.6" +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.19.6" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz" + integrity sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" @@ -61,74 +61,74 @@ "@babel/template" "^7.18.10" "@babel/traverse" "^7.19.6" "@babel/types" "^7.19.4" - "convert-source-map" "^1.7.0" - "debug" "^4.1.0" - "gensync" "^1.0.0-beta.2" - "json5" "^2.2.1" - "semver" "^6.3.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" "@babel/generator@^7.19.6", "@babel/generator@^7.20.0", "@babel/generator@^7.7.2": - "integrity" "sha512-GUPcXxWibClgmYJuIwC2Bc2Lg+8b9VjaJ+HlNdACEVt+Wlr1eoU1OPZjZRm7Hzl0gaTsUZNQfeihvZJhG7oc3w==" - "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.20.0.tgz" - "version" "7.20.0" + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.0.tgz" + integrity sha512-GUPcXxWibClgmYJuIwC2Bc2Lg+8b9VjaJ+HlNdACEVt+Wlr1eoU1OPZjZRm7Hzl0gaTsUZNQfeihvZJhG7oc3w== dependencies: "@babel/types" "^7.20.0" "@jridgewell/gen-mapping" "^0.3.2" - "jsesc" "^2.5.1" + jsesc "^2.5.1" "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.19.3": - "integrity" "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz" - "version" "7.20.0" + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz" + integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ== dependencies: "@babel/compat-data" "^7.20.0" "@babel/helper-validator-option" "^7.18.6" - "browserslist" "^4.21.3" - "semver" "^6.3.0" + browserslist "^4.21.3" + semver "^6.3.0" "@babel/helper-define-polyfill-provider@^0.3.3": - "integrity" "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" - "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" - "version" "0.3.3" + version "0.3.3" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== dependencies: "@babel/helper-compilation-targets" "^7.17.7" "@babel/helper-plugin-utils" "^7.16.7" - "debug" "^4.1.1" - "lodash.debounce" "^4.0.8" - "resolve" "^1.14.2" - "semver" "^6.1.2" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" "@babel/helper-environment-visitor@^7.18.9": - "integrity" "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" - "version" "7.18.9" + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== "@babel/helper-function-name@^7.19.0": - "integrity" "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==" - "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" - "version" "7.19.0" + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== dependencies: "@babel/template" "^7.18.10" "@babel/types" "^7.19.0" "@babel/helper-hoist-variables@^7.18.6": - "integrity" "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" - "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" - "version" "7.18.6" + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-imports@^7.18.6": - "integrity" "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" - "version" "7.18.6" + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-transforms@^7.19.6": - "integrity" "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz" - "version" "7.19.6" + version "7.19.6" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz" + integrity sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw== dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-module-imports" "^7.18.6" @@ -140,185 +140,185 @@ "@babel/types" "^7.19.4" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0": - "integrity" "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" - "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz" - "version" "7.19.0" + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz" + integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== "@babel/helper-simple-access@^7.19.4": - "integrity" "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==" - "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz" - "version" "7.19.4" + version "7.19.4" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz" + integrity sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg== dependencies: "@babel/types" "^7.19.4" "@babel/helper-split-export-declaration@^7.18.6": - "integrity" "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" - "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" - "version" "7.18.6" + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-string-parser@^7.19.4": - "integrity" "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz" - "version" "7.19.4" + version "7.19.4" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - "integrity" "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" - "version" "7.19.1" + version "7.19.1" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== "@babel/helper-validator-option@^7.18.6": - "integrity" "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" - "version" "7.18.6" + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== "@babel/helpers@^7.19.4": - "integrity" "sha512-aGMjYraN0zosCEthoGLdqot1oRsmxVTQRHadsUPz5QM44Zej2PYRz7XiDE7GqnkZnNtLbOuxqoZw42vkU7+XEQ==" - "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.0.tgz" - "version" "7.20.0" + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.0.tgz" + integrity sha512-aGMjYraN0zosCEthoGLdqot1oRsmxVTQRHadsUPz5QM44Zej2PYRz7XiDE7GqnkZnNtLbOuxqoZw42vkU7+XEQ== dependencies: "@babel/template" "^7.18.10" "@babel/traverse" "^7.20.0" "@babel/types" "^7.20.0" "@babel/highlight@^7.18.6": - "integrity" "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" - "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" - "version" "7.18.6" + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: "@babel/helper-validator-identifier" "^7.18.6" - "chalk" "^2.0.0" - "js-tokens" "^4.0.0" + chalk "^2.0.0" + js-tokens "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.6", "@babel/parser@^7.20.0": - "integrity" "sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg==" - "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.20.0.tgz" - "version" "7.20.0" + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.20.0.tgz" + integrity sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg== "@babel/plugin-syntax-async-generators@^7.8.4": - "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - "version" "7.8.4" + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": - "integrity" "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.8.3": - "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - "version" "7.12.13" + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-import-meta@^7.8.3": - "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" - "version" "7.10.4" + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": - "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - "version" "7.10.4" + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.8.3": - "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - "version" "7.10.4" + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": - "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": - "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-top-level-await@^7.8.3": - "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" - "version" "7.14.5" + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - "integrity" "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz" - "version" "7.20.0" + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz" + integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== dependencies: "@babel/helper-plugin-utils" "^7.19.0" "@babel/plugin-transform-runtime@^7.5.5": - "integrity" "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz" - "version" "7.19.6" + version "7.19.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz" + integrity sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw== dependencies: "@babel/helper-module-imports" "^7.18.6" "@babel/helper-plugin-utils" "^7.19.0" - "babel-plugin-polyfill-corejs2" "^0.3.3" - "babel-plugin-polyfill-corejs3" "^0.6.0" - "babel-plugin-polyfill-regenerator" "^0.4.1" - "semver" "^6.3.0" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + semver "^6.3.0" -"@babel/runtime@^7.5.5", "@babel/runtime@^7.x", "@babel/runtime@7.x": - "integrity" "sha512-NDYdls71fTXoU8TZHfbBWg7DiZfNzClcKui/+kyi6ppD2L1qnWW3VV6CjtaBXSUGGhiTWJ6ereOIkUvenif66Q==" - "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.0.tgz" - "version" "7.20.0" +"@babel/runtime@^7.5.5": + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.0.tgz" + integrity sha512-NDYdls71fTXoU8TZHfbBWg7DiZfNzClcKui/+kyi6ppD2L1qnWW3VV6CjtaBXSUGGhiTWJ6ereOIkUvenif66Q== dependencies: - "regenerator-runtime" "^0.13.10" + regenerator-runtime "^0.13.10" "@babel/template@^7.18.10", "@babel/template@^7.3.3": - "integrity" "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" - "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" - "version" "7.18.10" + version "7.18.10" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== dependencies: "@babel/code-frame" "^7.18.6" "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" "@babel/traverse@^7.19.6", "@babel/traverse@^7.20.0", "@babel/traverse@^7.7.2": - "integrity" "sha512-5+cAXQNARgjRUK0JWu2UBwja4JLSO/rBMPJzpsKb+oBF5xlUuCfljQepS4XypBQoiigL0VQjTZy6WiONtUdScQ==" - "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.0.tgz" - "version" "7.20.0" + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.0.tgz" + integrity sha512-5+cAXQNARgjRUK0JWu2UBwja4JLSO/rBMPJzpsKb+oBF5xlUuCfljQepS4XypBQoiigL0VQjTZy6WiONtUdScQ== dependencies: "@babel/code-frame" "^7.18.6" "@babel/generator" "^7.20.0" @@ -328,177 +328,65 @@ "@babel/helper-split-export-declaration" "^7.18.6" "@babel/parser" "^7.20.0" "@babel/types" "^7.20.0" - "debug" "^4.1.0" - "globals" "^11.1.0" + debug "^4.1.0" + globals "^11.1.0" "@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.19.4", "@babel/types@^7.20.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - "integrity" "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==" - "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz" - "version" "7.20.0" + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz" + integrity sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg== dependencies: "@babel/helper-string-parser" "^7.19.4" "@babel/helper-validator-identifier" "^7.19.1" - "to-fast-properties" "^2.0.0" + to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": - "integrity" "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" - "version" "0.2.3" - -"@biconomy-sdk/account-abstraction@*", "@biconomy-sdk/account-abstraction@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/account-abstraction": - "resolved" "file:packages/account-abstraction" - "version" "1.0.13" - dependencies: - "@account-abstraction/contracts" "^0.2.0" - "@biconomy-sdk/common" "*" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/providers" "^5.7.0" - "@nomicfoundation/hardhat-network-helpers" "^1.0.6" - "@nomiclabs/hardhat-ethers" "^2.0.0" - "ethers" "^5.7.0" - "hardhat" "^2.9.7" - "solidity-coverage" "^0.7.22" - -"@biconomy-sdk/common@*", "@biconomy-sdk/common@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/common": - "resolved" "file:packages/common" - "version" "1.0.13" - dependencies: - "@account-abstraction/contracts" "^0.2.0" - "@biconomy-sdk/core-types" "*" - "@ethersproject/abi" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/providers" "^5.7.0" - "@openzeppelin/contracts" "^4.7.3" - "ethers" "^5.7.0" - -"@biconomy-sdk/core-types@*", "@biconomy-sdk/core-types@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/core-types": - "resolved" "file:packages/core-types" - "version" "1.0.13" - dependencies: - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/contracts" "^5.6.0" - "@ethersproject/providers" "^5.6.8" - "@gnosis.pm/safe-deployments" "^1.16.0" - "web3-core" "^1.7.1" - -"@biconomy-sdk/ethers-lib@*", "@biconomy-sdk/ethers-lib@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/ethers-lib": - "resolved" "file:packages/ethers-lib" - "version" "1.0.13" - dependencies: - "@biconomy-sdk/core-types" "*" - "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" - "@nomiclabs/hardhat-ethers" "^2.1.0" - "@openzeppelin/contracts" "^4.6.0" - "scw-contracts-v1.0.0" "npm:scw-contracts@1.0.0" - "scw-contracts-v1.0.1" "npm:scw-contracts@1.0.9" - -"@biconomy-sdk/gas-estimator@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/gas-estimator": - "resolved" "file:packages/gas-estimator" - "version" "1.0.13" - dependencies: - "ethers" "^5.7.1" - -"@biconomy-sdk/node-client@*", "@biconomy-sdk/node-client@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/node-client": - "resolved" "file:packages/node-client" - "version" "1.0.13" - dependencies: - "@biconomy-sdk/core-types" "*" - "@ethersproject/abstract-signer" "^5.6.0" - "@gnosis.pm/safe-core-sdk" "^2.1.0" - "@nomiclabs/hardhat-ethers" "^2.1.0" - "node-fetch" "^2.6.6" - -"@biconomy-sdk/relayer@*", "@biconomy-sdk/relayer@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/relayer": - "resolved" "file:packages/relayer" - "version" "1.0.13" - dependencies: - "@biconomy-sdk/core-types" "*" - "@ethersproject/providers" "^5.6.8" - "ethers" "^5.6.9" - -"@biconomy-sdk/smart-account@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/smart-account": - "resolved" "file:packages/smart-account" - "version" "1.0.13" - dependencies: - "@0xsequence/network" "^0.41.0" - "@biconomy-sdk/account-abstraction" "*" - "@biconomy-sdk/core-types" "*" - "@biconomy-sdk/ethers-lib" "*" - "@biconomy-sdk/node-client" "*" - "@biconomy-sdk/relayer" "*" - "@biconomy-sdk/transactions" "*" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/contracts" "^5.6.0" - "@ethersproject/providers" "^5.6.8" - "@gnosis.pm/safe-deployments" "^1.12.0" - "@nomiclabs/hardhat-ethers" "^2.1.0" - "@types/mocha" "^9.1.1" - "concurrently" "^7.4.0" - -"@biconomy-sdk/transactions@*", "@biconomy-sdk/transactions@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/transactions": - "resolved" "file:packages/transactions" - "version" "1.0.13" - dependencies: - "@biconomy-sdk/core-types" "*" - "@biconomy-sdk/ethers-lib" "*" - "@biconomy-sdk/node-client" "*" - "@biconomy-sdk/relayer" "*" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/constants" "^5.6.1" - "ethereumjs-util" "^7.1.5" - "ethers" "^5.6.9" - -"@biconomy-sdk/web3-auth@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/web3-auth": - "resolved" "file:packages/web3-auth" - "version" "1.0.13" - dependencies: - "@toruslabs/torus-embed" "^1.36.2" + version "0.2.3" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@chainlink/contracts@^0.4.1": - "integrity" "sha512-wVI/KZ9nIH0iqoebVxYrZfNVWO23vwds1UrHdbF+S0JwyixtT+54xYGlot723jCrAeBeQHsDRQXnEhhbUEHpgQ==" - "resolved" "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.4.2.tgz" - "version" "0.4.2" + version "0.4.2" + resolved "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.4.2.tgz" + integrity sha512-wVI/KZ9nIH0iqoebVxYrZfNVWO23vwds1UrHdbF+S0JwyixtT+54xYGlot723jCrAeBeQHsDRQXnEhhbUEHpgQ== dependencies: "@eth-optimism/contracts" "^0.5.21" "@cspotcode/source-map-support@^0.8.0": - "integrity" "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==" - "resolved" "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" - "version" "0.8.1" + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" "@eslint/eslintrc@^1.3.3": - "integrity" "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==" - "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz" - "version" "1.3.3" - dependencies: - "ajv" "^6.12.4" - "debug" "^4.3.2" - "espree" "^9.4.0" - "globals" "^13.15.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" + version "1.3.3" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.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" "@eth-optimism/contracts@^0.5.21": - "integrity" "sha512-HbNUUDIM1dUAM0hWPfGp3l9/Zte40zi8QhVbUSIwdYRA7jG7cZgbteqavrjW8wwFqxkWX9IrtA0KAR7pNlSAIQ==" - "resolved" "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.37.tgz" - "version" "0.5.37" + version "0.5.37" + resolved "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.37.tgz" + integrity sha512-HbNUUDIM1dUAM0hWPfGp3l9/Zte40zi8QhVbUSIwdYRA7jG7cZgbteqavrjW8wwFqxkWX9IrtA0KAR7pNlSAIQ== dependencies: "@eth-optimism/core-utils" "0.10.1" "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/abstract-signer" "^5.7.0" "@eth-optimism/core-utils@0.10.1": - "integrity" "sha512-IJvG5UtYvyz6An9QdohlCLoeB3NBFxx2lRJKlPzvYYlfugUNNCHsajRIWIwJTcPRRma0WPd46JUsKACLJDdNrA==" - "resolved" "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.10.1.tgz" - "version" "0.10.1" + version "0.10.1" + resolved "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.10.1.tgz" + integrity sha512-IJvG5UtYvyz6An9QdohlCLoeB3NBFxx2lRJKlPzvYYlfugUNNCHsajRIWIwJTcPRRma0WPd46JUsKACLJDdNrA== dependencies: "@ethersproject/abi" "^5.7.0" "@ethersproject/abstract-provider" "^5.7.0" @@ -514,29 +402,29 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" - "bufio" "^1.0.7" - "chai" "^4.3.4" + bufio "^1.0.7" + chai "^4.3.4" "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.4": - "integrity" "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==" - "resolved" "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz" - "version" "2.6.5" + version "2.6.5" + resolved "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== dependencies: - "crc-32" "^1.2.0" - "ethereumjs-util" "^7.1.5" + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" "@ethereumjs/tx@^3.3.0", "@ethereumjs/tx@^3.3.2": - "integrity" "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==" - "resolved" "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz" - "version" "3.5.2" + version "3.5.2" + resolved "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== dependencies: "@ethereumjs/common" "^2.6.4" - "ethereumjs-util" "^7.1.5" + ethereumjs-util "^7.1.5" -"@ethersproject/abi@^5.0.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.4.7", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0", "@ethersproject/abi@5.7.0": - "integrity" "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==" - "resolved" "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== dependencies: "@ethersproject/address" "^5.7.0" "@ethersproject/bignumber" "^5.7.0" @@ -548,10 +436,10 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@^5.7.0", "@ethersproject/abstract-provider@5.7.0": - "integrity" "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==" - "resolved" "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/bytes" "^5.7.0" @@ -561,10 +449,10 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.5.0", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2", "@ethersproject/abstract-signer@^5.7.0", "@ethersproject/abstract-signer@5.7.0": - "integrity" "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==" - "resolved" "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.5.0", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/bignumber" "^5.7.0" @@ -572,10 +460,10 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.7.0", "@ethersproject/address@5.7.0": - "integrity" "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==" - "resolved" "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/bytes" "^5.7.0" @@ -583,48 +471,48 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/base64@^5.7.0", "@ethersproject/base64@5.7.0": - "integrity" "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==" - "resolved" "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/basex@^5.7.0", "@ethersproject/basex@5.7.0": - "integrity" "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==" - "resolved" "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.7.0", "@ethersproject/bignumber@5.7.0": - "integrity" "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==" - "resolved" "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" - "bn.js" "^5.2.1" + bn.js "^5.2.1" -"@ethersproject/bytes@^5.0.0", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.7.0", "@ethersproject/bytes@5.7.0": - "integrity" "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==" - "resolved" "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.1", "@ethersproject/constants@^5.7.0", "@ethersproject/constants@5.7.0": - "integrity" "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==" - "resolved" "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.1", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@^5.4.1", "@ethersproject/contracts@^5.6.0", "@ethersproject/contracts@^5.7.0", "@ethersproject/contracts@5.7.0": - "integrity" "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==" - "resolved" "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.4.1", "@ethersproject/contracts@^5.6.0", "@ethersproject/contracts@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== dependencies: "@ethersproject/abi" "^5.7.0" "@ethersproject/abstract-provider" "^5.7.0" @@ -637,10 +525,10 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/transactions" "^5.7.0" -"@ethersproject/hash@^5.7.0", "@ethersproject/hash@5.7.0": - "integrity" "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==" - "resolved" "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== dependencies: "@ethersproject/abstract-signer" "^5.7.0" "@ethersproject/address" "^5.7.0" @@ -652,10 +540,10 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hdnode@^5.7.0", "@ethersproject/hdnode@5.7.0": - "integrity" "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==" - "resolved" "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== dependencies: "@ethersproject/abstract-signer" "^5.7.0" "@ethersproject/basex" "^5.7.0" @@ -670,10 +558,10 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/json-wallets@^5.7.0", "@ethersproject/json-wallets@5.7.0": - "integrity" "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==" - "resolved" "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== dependencies: "@ethersproject/abstract-signer" "^5.7.0" "@ethersproject/address" "^5.7.0" @@ -686,48 +574,48 @@ "@ethersproject/random" "^5.7.0" "@ethersproject/strings" "^5.7.0" "@ethersproject/transactions" "^5.7.0" - "aes-js" "3.0.0" - "scrypt-js" "3.0.1" + aes-js "3.0.0" + scrypt-js "3.0.1" -"@ethersproject/keccak256@^5.7.0", "@ethersproject/keccak256@5.7.0": - "integrity" "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==" - "resolved" "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== dependencies: "@ethersproject/bytes" "^5.7.0" - "js-sha3" "0.8.0" + js-sha3 "0.8.0" -"@ethersproject/logger@^5.7.0", "@ethersproject/logger@5.7.0": - "integrity" "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" - "resolved" "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@^5.7.0", "@ethersproject/networks@5.7.1": - "integrity" "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==" - "resolved" "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" - "version" "5.7.1" +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/pbkdf2@^5.7.0", "@ethersproject/pbkdf2@5.7.0": - "integrity" "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==" - "resolved" "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@^5.5.0", "@ethersproject/properties@^5.7.0", "@ethersproject/properties@5.7.0": - "integrity" "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==" - "resolved" "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.5.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@^5.0.0", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@^5.4.7", "@ethersproject/providers@^5.5.1", "@ethersproject/providers@^5.6.8", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@5.7.2": - "integrity" "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==" - "resolved" "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz" - "version" "5.7.2" +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@^5.5.1", "@ethersproject/providers@^5.6.8", "@ethersproject/providers@^5.7.0": + version "5.7.2" + resolved "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/abstract-signer" "^5.7.0" @@ -747,50 +635,50 @@ "@ethersproject/strings" "^5.7.0" "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" - "bech32" "1.1.4" - "ws" "7.4.6" + bech32 "1.1.4" + ws "7.4.6" -"@ethersproject/random@^5.7.0", "@ethersproject/random@5.7.0": - "integrity" "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==" - "resolved" "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@^5.7.0", "@ethersproject/rlp@5.7.0": - "integrity" "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==" - "resolved" "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/sha2@^5.7.0", "@ethersproject/sha2@5.7.0": - "integrity" "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==" - "resolved" "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" - "hash.js" "1.1.7" + hash.js "1.1.7" -"@ethersproject/signing-key@^5.7.0", "@ethersproject/signing-key@5.7.0": - "integrity" "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==" - "resolved" "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" - "bn.js" "^5.2.1" - "elliptic" "6.5.4" - "hash.js" "1.1.7" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" -"@ethersproject/solidity@^5.4.0", "@ethersproject/solidity@^5.6.0", "@ethersproject/solidity@5.7.0": - "integrity" "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==" - "resolved" "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.4.0", "@ethersproject/solidity@^5.6.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/bytes" "^5.7.0" @@ -799,19 +687,19 @@ "@ethersproject/sha2" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/strings@^5.7.0", "@ethersproject/strings@5.7.0": - "integrity" "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==" - "resolved" "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0", "@ethersproject/transactions@5.7.0": - "integrity" "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==" - "resolved" "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== dependencies: "@ethersproject/address" "^5.7.0" "@ethersproject/bignumber" "^5.7.0" @@ -824,18 +712,18 @@ "@ethersproject/signing-key" "^5.7.0" "@ethersproject/units@5.7.0": - "integrity" "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==" - "resolved" "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz" - "version" "5.7.0" + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/wallet@^5.4.0", "@ethersproject/wallet@5.7.0": - "integrity" "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==" - "resolved" "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.4.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/abstract-signer" "^5.7.0" @@ -853,10 +741,10 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@^5.7.0", "@ethersproject/web@5.7.1": - "integrity" "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==" - "resolved" "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" - "version" "5.7.1" +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== dependencies: "@ethersproject/base64" "^5.7.0" "@ethersproject/bytes" "^5.7.0" @@ -864,10 +752,10 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/wordlists@^5.7.0", "@ethersproject/wordlists@5.7.0": - "integrity" "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==" - "resolved" "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz" - "version" "5.7.0" +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== dependencies: "@ethersproject/bytes" "^5.7.0" "@ethersproject/hash" "^5.7.0" @@ -876,138 +764,138 @@ "@ethersproject/strings" "^5.7.0" "@gar/promisify@^1.1.3": - "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" - "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" - "version" "1.1.3" + version "1.1.3" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@gnosis.pm/safe-core-sdk-types@^1.4.0", "@gnosis.pm/safe-core-sdk-types@^1.6.1": - "integrity" "sha512-KRflubR/W2qVeRxavh2ALtXI6CyCCcyuL1olJAVn/xkZVYJJjvXn+5GxbRloJFIJrgFCNWYbHrO0sXtywP5Y1g==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.6.1.tgz" - "version" "1.6.1" + version "1.6.1" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.6.1.tgz" + integrity sha512-KRflubR/W2qVeRxavh2ALtXI6CyCCcyuL1olJAVn/xkZVYJJjvXn+5GxbRloJFIJrgFCNWYbHrO0sXtywP5Y1g== dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/contracts" "^5.7.0" "@gnosis.pm/safe-deployments" "1.16.0" - "web3-core" "^1.8.0" - "web3-utils" "^1.8.0" + web3-core "^1.8.0" + web3-utils "^1.8.0" "@gnosis.pm/safe-core-sdk-utils@^1.1.0", "@gnosis.pm/safe-core-sdk-utils@^1.4.1": - "integrity" "sha512-VrebOIw5ULOgTuV1hK4V0Wp1cg50Sw9urUYyBFnkI6kzL13f3ngGa5IUZ6O+HOOSNrO2mB+EEr09gWp5IN7ECA==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.4.1.tgz" - "version" "1.4.1" + version "1.4.1" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.4.1.tgz" + integrity sha512-VrebOIw5ULOgTuV1hK4V0Wp1cg50Sw9urUYyBFnkI6kzL13f3ngGa5IUZ6O+HOOSNrO2mB+EEr09gWp5IN7ECA== dependencies: "@gnosis.pm/safe-core-sdk-types" "^1.6.1" - "semver" "^7.3.7" - "web3-utils" "^1.8.0" + semver "^7.3.7" + web3-utils "^1.8.0" "@gnosis.pm/safe-core-sdk@^2.1.0": - "integrity" "sha512-FlpHW+jzKNtO9HMFF+R7IbdvJM5J4R4JW76jSe3MAbUA5KlmAW9BFDl/sgdQTREttIZMG2dr9A94RU9YcsljXw==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.4.1.tgz" - "version" "2.4.1" + version "2.4.1" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.4.1.tgz" + integrity sha512-FlpHW+jzKNtO9HMFF+R7IbdvJM5J4R4JW76jSe3MAbUA5KlmAW9BFDl/sgdQTREttIZMG2dr9A94RU9YcsljXw== dependencies: "@ethersproject/solidity" "^5.6.0" "@gnosis.pm/safe-core-sdk-types" "^1.4.0" "@gnosis.pm/safe-deployments" "1.15.0" - "ethereumjs-util" "^7.1.4" - "semver" "^7.3.5" - "web3-utils" "^1.7.1" + ethereumjs-util "^7.1.4" + semver "^7.3.5" + web3-utils "^1.7.1" -"@gnosis.pm/safe-deployments@^1.12.0", "@gnosis.pm/safe-deployments@^1.16.0", "@gnosis.pm/safe-deployments@1.16.0": - "integrity" "sha512-5Wakso6SiulstuZfz3gH6yME8Q50BT5dVxIfgWz4vzOmyyqmAVstMd0VIwyw6IDee0gU4mHKZjhD3UXPKEvRCw==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.16.0.tgz" - "version" "1.16.0" +"@gnosis.pm/safe-deployments@1.15.0": + version "1.15.0" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz" + integrity sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew== dependencies: - "semver" "^7.3.7" + semver "^7.3.7" -"@gnosis.pm/safe-deployments@1.15.0": - "integrity" "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz" - "version" "1.15.0" +"@gnosis.pm/safe-deployments@1.16.0", "@gnosis.pm/safe-deployments@^1.12.0", "@gnosis.pm/safe-deployments@^1.16.0": + version "1.16.0" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.16.0.tgz" + integrity sha512-5Wakso6SiulstuZfz3gH6yME8Q50BT5dVxIfgWz4vzOmyyqmAVstMd0VIwyw6IDee0gU4mHKZjhD3UXPKEvRCw== dependencies: - "semver" "^7.3.7" + semver "^7.3.7" "@gnosis.pm/safe-ethers-lib@^1.1.0": - "integrity" "sha512-rUv2Dwi3whTmcgx6EejI5llMDnxhwyTX/8j01K6fWBfOAFaUV78gbtPcwmdr1WCVVcXSdKszyarus5fyZTKNfA==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.6.1.tgz" - "version" "1.6.1" + version "1.6.1" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.6.1.tgz" + integrity sha512-rUv2Dwi3whTmcgx6EejI5llMDnxhwyTX/8j01K6fWBfOAFaUV78gbtPcwmdr1WCVVcXSdKszyarus5fyZTKNfA== dependencies: "@gnosis.pm/safe-core-sdk-types" "^1.6.1" "@gnosis.pm/safe-core-sdk-utils" "^1.4.1" - "ethers" "^5.7.1" + ethers "^5.7.1" "@gnosis.pm/safe-web3-lib@^1.1.0": - "integrity" "sha512-fOXtxjSmetky4CGapAWPTmzRLBDG+5sGbwriypy6OZ3rcPWvwRyC8p06IhpqofadJIEQP5HphPECtQNVSPEkjA==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.6.1.tgz" - "version" "1.6.1" + version "1.6.1" + resolved "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.6.1.tgz" + integrity sha512-fOXtxjSmetky4CGapAWPTmzRLBDG+5sGbwriypy6OZ3rcPWvwRyC8p06IhpqofadJIEQP5HphPECtQNVSPEkjA== dependencies: "@ethersproject/bignumber" "^5.7.0" "@gnosis.pm/safe-core-sdk-types" "^1.6.1" "@gnosis.pm/safe-core-sdk-utils" "^1.4.1" - "web3" "^1.8.0" - "web3-core" "^1.8.0" - "web3-utils" "^1.8.0" + web3 "^1.8.0" + web3-core "^1.8.0" + web3-utils "^1.8.0" "@humanwhocodes/config-array@^0.11.6": - "integrity" "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz" - "version" "0.11.6" + version "0.11.6" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz" + integrity sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg== dependencies: "@humanwhocodes/object-schema" "^1.2.1" - "debug" "^4.1.1" - "minimatch" "^3.0.4" + debug "^4.1.1" + minimatch "^3.0.4" "@humanwhocodes/module-importer@^1.0.1": - "integrity" "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - "version" "1.0.1" + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": - "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - "version" "1.2.1" + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@hutson/parse-repository-url@^3.0.0": - "integrity" "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==" - "resolved" "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz" - "version" "3.0.2" + version "3.0.2" + resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== "@isaacs/string-locale-compare@^1.1.0": - "integrity" "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==" - "resolved" "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz" - "version" "1.1.0" + version "1.1.0" + resolved "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== "@istanbuljs/load-nyc-config@^1.0.0": - "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==" - "resolved" "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" - "version" "1.1.0" + version "1.1.0" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: - "camelcase" "^5.3.1" - "find-up" "^4.1.0" - "get-package-type" "^0.1.0" - "js-yaml" "^3.13.1" - "resolve-from" "^5.0.0" + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" "@istanbuljs/schema@^0.1.2": - "integrity" "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" - "resolved" "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" - "version" "0.1.3" + version "0.1.3" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^28.1.3": - "integrity" "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==" - "resolved" "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz" - "version" "28.1.3" + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== dependencies: "@jest/types" "^28.1.3" "@types/node" "*" - "chalk" "^4.0.0" - "jest-message-util" "^28.1.3" - "jest-util" "^28.1.3" - "slash" "^3.0.0" + chalk "^4.0.0" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" "@jest/core@^28.1.3": - "integrity" "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==" - "resolved" "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz" - "version" "28.1.3" + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz" + integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== dependencies: "@jest/console" "^28.1.3" "@jest/reporters" "^28.1.3" @@ -1015,80 +903,80 @@ "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - "ansi-escapes" "^4.2.1" - "chalk" "^4.0.0" - "ci-info" "^3.2.0" - "exit" "^0.1.2" - "graceful-fs" "^4.2.9" - "jest-changed-files" "^28.1.3" - "jest-config" "^28.1.3" - "jest-haste-map" "^28.1.3" - "jest-message-util" "^28.1.3" - "jest-regex-util" "^28.0.2" - "jest-resolve" "^28.1.3" - "jest-resolve-dependencies" "^28.1.3" - "jest-runner" "^28.1.3" - "jest-runtime" "^28.1.3" - "jest-snapshot" "^28.1.3" - "jest-util" "^28.1.3" - "jest-validate" "^28.1.3" - "jest-watcher" "^28.1.3" - "micromatch" "^4.0.4" - "pretty-format" "^28.1.3" - "rimraf" "^3.0.0" - "slash" "^3.0.0" - "strip-ansi" "^6.0.0" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^28.1.3" + jest-config "^28.1.3" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-resolve-dependencies "^28.1.3" + jest-runner "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + jest-watcher "^28.1.3" + micromatch "^4.0.4" + pretty-format "^28.1.3" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" "@jest/environment@^28.1.3": - "integrity" "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==" - "resolved" "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz" - "version" "28.1.3" + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz" + integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== dependencies: "@jest/fake-timers" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - "jest-mock" "^28.1.3" + jest-mock "^28.1.3" "@jest/expect-utils@^28.1.3": - "integrity" "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==" - "resolved" "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz" - "version" "28.1.3" + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== dependencies: - "jest-get-type" "^28.0.2" + jest-get-type "^28.0.2" "@jest/expect@^28.1.3": - "integrity" "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==" - "resolved" "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz" - "version" "28.1.3" + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz" + integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== dependencies: - "expect" "^28.1.3" - "jest-snapshot" "^28.1.3" + expect "^28.1.3" + jest-snapshot "^28.1.3" "@jest/fake-timers@^28.1.3": - "integrity" "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==" - "resolved" "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz" - "version" "28.1.3" + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz" + integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== dependencies: "@jest/types" "^28.1.3" "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" - "jest-message-util" "^28.1.3" - "jest-mock" "^28.1.3" - "jest-util" "^28.1.3" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-util "^28.1.3" "@jest/globals@^28.1.3": - "integrity" "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==" - "resolved" "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz" - "version" "28.1.3" + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz" + integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== dependencies: "@jest/environment" "^28.1.3" "@jest/expect" "^28.1.3" "@jest/types" "^28.1.3" "@jest/reporters@^28.1.3": - "integrity" "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==" - "resolved" "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz" - "version" "28.1.3" + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz" + integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^28.1.3" @@ -1097,162 +985,162 @@ "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" "@types/node" "*" - "chalk" "^4.0.0" - "collect-v8-coverage" "^1.0.0" - "exit" "^0.1.2" - "glob" "^7.1.3" - "graceful-fs" "^4.2.9" - "istanbul-lib-coverage" "^3.0.0" - "istanbul-lib-instrument" "^5.1.0" - "istanbul-lib-report" "^3.0.0" - "istanbul-lib-source-maps" "^4.0.0" - "istanbul-reports" "^3.1.3" - "jest-message-util" "^28.1.3" - "jest-util" "^28.1.3" - "jest-worker" "^28.1.3" - "slash" "^3.0.0" - "string-length" "^4.0.1" - "strip-ansi" "^6.0.0" - "terminal-link" "^2.0.0" - "v8-to-istanbul" "^9.0.1" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + jest-worker "^28.1.3" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + terminal-link "^2.0.0" + v8-to-istanbul "^9.0.1" "@jest/schemas@^28.1.3": - "integrity" "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==" - "resolved" "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" - "version" "28.1.3" + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== dependencies: "@sinclair/typebox" "^0.24.1" "@jest/source-map@^28.1.2": - "integrity" "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==" - "resolved" "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz" - "version" "28.1.2" + version "28.1.2" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz" + integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== dependencies: "@jridgewell/trace-mapping" "^0.3.13" - "callsites" "^3.0.0" - "graceful-fs" "^4.2.9" + callsites "^3.0.0" + graceful-fs "^4.2.9" "@jest/test-result@^28.1.3": - "integrity" "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==" - "resolved" "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz" - "version" "28.1.3" + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== dependencies: "@jest/console" "^28.1.3" "@jest/types" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" - "collect-v8-coverage" "^1.0.0" + collect-v8-coverage "^1.0.0" "@jest/test-sequencer@^28.1.3": - "integrity" "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==" - "resolved" "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz" - "version" "28.1.3" + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz" + integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== dependencies: "@jest/test-result" "^28.1.3" - "graceful-fs" "^4.2.9" - "jest-haste-map" "^28.1.3" - "slash" "^3.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + slash "^3.0.0" "@jest/transform@^28.1.3": - "integrity" "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==" - "resolved" "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz" - "version" "28.1.3" + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz" + integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== dependencies: "@babel/core" "^7.11.6" "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" - "babel-plugin-istanbul" "^6.1.1" - "chalk" "^4.0.0" - "convert-source-map" "^1.4.0" - "fast-json-stable-stringify" "^2.0.0" - "graceful-fs" "^4.2.9" - "jest-haste-map" "^28.1.3" - "jest-regex-util" "^28.0.2" - "jest-util" "^28.1.3" - "micromatch" "^4.0.4" - "pirates" "^4.0.4" - "slash" "^3.0.0" - "write-file-atomic" "^4.0.1" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.1" "@jest/types@^28.1.3": - "integrity" "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==" - "resolved" "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz" - "version" "28.1.3" + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== dependencies: "@jest/schemas" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^17.0.8" - "chalk" "^4.0.0" + chalk "^4.0.0" "@jridgewell/gen-mapping@^0.1.0": - "integrity" "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" - "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" - "version" "0.1.1" + version "0.1.1" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== dependencies: "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/gen-mapping@^0.3.2": - "integrity" "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" - "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" - "version" "0.3.2" + version "0.3.2" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": - "integrity" "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" - "version" "3.1.0" +"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - "version" "1.1.2" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@1.4.14": - "integrity" "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" - "version" "1.4.14" + version "1.1.2" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": - "integrity" "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" - "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz" - "version" "0.3.17" - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/trace-mapping@0.3.9": - "integrity" "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==" - "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - "version" "0.3.9" + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + "@lerna/add@5.6.2": - "integrity" "sha512-NHrm7kYiqP+EviguY7/NltJ3G9vGmJW6v2BASUOhP9FZDhYbq3O+rCDlFdoVRNtcyrSg90rZFMOWHph4KOoCQQ==" - "resolved" "https://registry.npmjs.org/@lerna/add/-/add-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/add/-/add-5.6.2.tgz" + integrity sha512-NHrm7kYiqP+EviguY7/NltJ3G9vGmJW6v2BASUOhP9FZDhYbq3O+rCDlFdoVRNtcyrSg90rZFMOWHph4KOoCQQ== dependencies: "@lerna/bootstrap" "5.6.2" "@lerna/command" "5.6.2" "@lerna/filter-options" "5.6.2" "@lerna/npm-conf" "5.6.2" "@lerna/validation-error" "5.6.2" - "dedent" "^0.7.0" - "npm-package-arg" "8.1.1" - "p-map" "^4.0.0" - "pacote" "^13.6.1" - "semver" "^7.3.4" + dedent "^0.7.0" + npm-package-arg "8.1.1" + p-map "^4.0.0" + pacote "^13.6.1" + semver "^7.3.4" "@lerna/bootstrap@5.6.2": - "integrity" "sha512-S2fMOEXbef7nrybQhzBywIGSLhuiQ5huPp1sU+v9Y6XEBsy/2IA+lb0gsZosvPqlRfMtiaFstL+QunaBhlWECA==" - "resolved" "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.6.2.tgz" + integrity sha512-S2fMOEXbef7nrybQhzBywIGSLhuiQ5huPp1sU+v9Y6XEBsy/2IA+lb0gsZosvPqlRfMtiaFstL+QunaBhlWECA== dependencies: "@lerna/command" "5.6.2" "@lerna/filter-options" "5.6.2" @@ -1267,20 +1155,20 @@ "@lerna/symlink-dependencies" "5.6.2" "@lerna/validation-error" "5.6.2" "@npmcli/arborist" "5.3.0" - "dedent" "^0.7.0" - "get-port" "^5.1.1" - "multimatch" "^5.0.0" - "npm-package-arg" "8.1.1" - "npmlog" "^6.0.2" - "p-map" "^4.0.0" - "p-map-series" "^2.1.0" - "p-waterfall" "^2.1.1" - "semver" "^7.3.4" + dedent "^0.7.0" + get-port "^5.1.1" + multimatch "^5.0.0" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + p-map "^4.0.0" + p-map-series "^2.1.0" + p-waterfall "^2.1.1" + semver "^7.3.4" "@lerna/changed@5.6.2": - "integrity" "sha512-uUgrkdj1eYJHQGsXXlpH5oEAfu3x0qzeTjgvpdNrxHEdQWi7zWiW59hRadmiImc14uJJYIwVK5q/QLugrsdGFQ==" - "resolved" "https://registry.npmjs.org/@lerna/changed/-/changed-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/changed/-/changed-5.6.2.tgz" + integrity sha512-uUgrkdj1eYJHQGsXXlpH5oEAfu3x0qzeTjgvpdNrxHEdQWi7zWiW59hRadmiImc14uJJYIwVK5q/QLugrsdGFQ== dependencies: "@lerna/collect-updates" "5.6.2" "@lerna/command" "5.6.2" @@ -1288,152 +1176,152 @@ "@lerna/output" "5.6.2" "@lerna/check-working-tree@5.6.2": - "integrity" "sha512-6Vf3IB6p+iNIubwVgr8A/KOmGh5xb4SyRmhFtAVqe33yWl2p3yc+mU5nGoz4ET3JLF1T9MhsePj0hNt6qyOTLQ==" - "resolved" "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.6.2.tgz" + integrity sha512-6Vf3IB6p+iNIubwVgr8A/KOmGh5xb4SyRmhFtAVqe33yWl2p3yc+mU5nGoz4ET3JLF1T9MhsePj0hNt6qyOTLQ== dependencies: "@lerna/collect-uncommitted" "5.6.2" "@lerna/describe-ref" "5.6.2" "@lerna/validation-error" "5.6.2" "@lerna/child-process@5.6.2": - "integrity" "sha512-QIOQ3jIbWdduHd5892fbo3u7/dQgbhzEBB7cvf+Ys/iCPP8UQrBECi1lfRgA4kcTKC2MyMz0SoyXZz/lFcXc3A==" - "resolved" "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.6.2.tgz" + integrity sha512-QIOQ3jIbWdduHd5892fbo3u7/dQgbhzEBB7cvf+Ys/iCPP8UQrBECi1lfRgA4kcTKC2MyMz0SoyXZz/lFcXc3A== dependencies: - "chalk" "^4.1.0" - "execa" "^5.0.0" - "strong-log-transformer" "^2.1.0" + chalk "^4.1.0" + execa "^5.0.0" + strong-log-transformer "^2.1.0" "@lerna/clean@5.6.2": - "integrity" "sha512-A7j8r0Hk2pGyLUyaCmx4keNHen1L/KdcOjb4nR6X8GtTJR5AeA47a8rRKOCz9wwdyMPlo2Dau7d3RV9viv7a5g==" - "resolved" "https://registry.npmjs.org/@lerna/clean/-/clean-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/clean/-/clean-5.6.2.tgz" + integrity sha512-A7j8r0Hk2pGyLUyaCmx4keNHen1L/KdcOjb4nR6X8GtTJR5AeA47a8rRKOCz9wwdyMPlo2Dau7d3RV9viv7a5g== dependencies: "@lerna/command" "5.6.2" "@lerna/filter-options" "5.6.2" "@lerna/prompt" "5.6.2" "@lerna/pulse-till-done" "5.6.2" "@lerna/rimraf-dir" "5.6.2" - "p-map" "^4.0.0" - "p-map-series" "^2.1.0" - "p-waterfall" "^2.1.1" + p-map "^4.0.0" + p-map-series "^2.1.0" + p-waterfall "^2.1.1" "@lerna/cli@5.6.2": - "integrity" "sha512-w0NRIEqDOmYKlA5t0iyqx0hbY7zcozvApmfvwF0lhkuhf3k6LRAFSamtimGQWicC779a7J2NXw4ASuBV47Fs1Q==" - "resolved" "https://registry.npmjs.org/@lerna/cli/-/cli-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/cli/-/cli-5.6.2.tgz" + integrity sha512-w0NRIEqDOmYKlA5t0iyqx0hbY7zcozvApmfvwF0lhkuhf3k6LRAFSamtimGQWicC779a7J2NXw4ASuBV47Fs1Q== dependencies: "@lerna/global-options" "5.6.2" - "dedent" "^0.7.0" - "npmlog" "^6.0.2" - "yargs" "^16.2.0" + dedent "^0.7.0" + npmlog "^6.0.2" + yargs "^16.2.0" "@lerna/collect-uncommitted@5.6.2": - "integrity" "sha512-i0jhxpypyOsW2PpPwIw4xg6EPh7/N3YuiI6P2yL7PynZ8nOv8DkIdoyMkhUP4gALjBfckH8Bj94eIaKMviqW4w==" - "resolved" "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.6.2.tgz" + integrity sha512-i0jhxpypyOsW2PpPwIw4xg6EPh7/N3YuiI6P2yL7PynZ8nOv8DkIdoyMkhUP4gALjBfckH8Bj94eIaKMviqW4w== dependencies: "@lerna/child-process" "5.6.2" - "chalk" "^4.1.0" - "npmlog" "^6.0.2" + chalk "^4.1.0" + npmlog "^6.0.2" "@lerna/collect-updates@5.6.2": - "integrity" "sha512-DdTK13X6PIsh9HINiMniFeiivAizR/1FBB+hDVe6tOhsXFBfjHMw1xZhXlE+mYIoFmDm1UFK7zvQSexoaxRqFA==" - "resolved" "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.6.2.tgz" + integrity sha512-DdTK13X6PIsh9HINiMniFeiivAizR/1FBB+hDVe6tOhsXFBfjHMw1xZhXlE+mYIoFmDm1UFK7zvQSexoaxRqFA== dependencies: "@lerna/child-process" "5.6.2" "@lerna/describe-ref" "5.6.2" - "minimatch" "^3.0.4" - "npmlog" "^6.0.2" - "slash" "^3.0.0" + minimatch "^3.0.4" + npmlog "^6.0.2" + slash "^3.0.0" "@lerna/command@5.6.2": - "integrity" "sha512-eLVGI9TmxcaGt1M7TXGhhBZoeWOtOedMiH7NuCGHtL6TMJ9k+SCExyx+KpNmE6ImyNOzws6EvYLPLjftiqmoaA==" - "resolved" "https://registry.npmjs.org/@lerna/command/-/command-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/command/-/command-5.6.2.tgz" + integrity sha512-eLVGI9TmxcaGt1M7TXGhhBZoeWOtOedMiH7NuCGHtL6TMJ9k+SCExyx+KpNmE6ImyNOzws6EvYLPLjftiqmoaA== dependencies: "@lerna/child-process" "5.6.2" "@lerna/package-graph" "5.6.2" "@lerna/project" "5.6.2" "@lerna/validation-error" "5.6.2" "@lerna/write-log-file" "5.6.2" - "clone-deep" "^4.0.1" - "dedent" "^0.7.0" - "execa" "^5.0.0" - "is-ci" "^2.0.0" - "npmlog" "^6.0.2" + clone-deep "^4.0.1" + dedent "^0.7.0" + execa "^5.0.0" + is-ci "^2.0.0" + npmlog "^6.0.2" "@lerna/conventional-commits@5.6.2": - "integrity" "sha512-fPrJpYJhxCgY2uyOCTcAAC6+T6lUAtpEGxLbjWHWTb13oKKEygp9THoFpe6SbAD0fYMb3jeZCZCqNofM62rmuA==" - "resolved" "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.6.2.tgz" + integrity sha512-fPrJpYJhxCgY2uyOCTcAAC6+T6lUAtpEGxLbjWHWTb13oKKEygp9THoFpe6SbAD0fYMb3jeZCZCqNofM62rmuA== dependencies: "@lerna/validation-error" "5.6.2" - "conventional-changelog-angular" "^5.0.12" - "conventional-changelog-core" "^4.2.4" - "conventional-recommended-bump" "^6.1.0" - "fs-extra" "^9.1.0" - "get-stream" "^6.0.0" - "npm-package-arg" "8.1.1" - "npmlog" "^6.0.2" - "pify" "^5.0.0" - "semver" "^7.3.4" + conventional-changelog-angular "^5.0.12" + conventional-changelog-core "^4.2.4" + conventional-recommended-bump "^6.1.0" + fs-extra "^9.1.0" + get-stream "^6.0.0" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + pify "^5.0.0" + semver "^7.3.4" "@lerna/create-symlink@5.6.2": - "integrity" "sha512-0WIs3P6ohPVh2+t5axrLZDE5Dt7fe3Kv0Auj0sBiBd6MmKZ2oS76apIl0Bspdbv8jX8+TRKGv6ib0280D0dtEw==" - "resolved" "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.6.2.tgz" + integrity sha512-0WIs3P6ohPVh2+t5axrLZDE5Dt7fe3Kv0Auj0sBiBd6MmKZ2oS76apIl0Bspdbv8jX8+TRKGv6ib0280D0dtEw== dependencies: - "cmd-shim" "^5.0.0" - "fs-extra" "^9.1.0" - "npmlog" "^6.0.2" + cmd-shim "^5.0.0" + fs-extra "^9.1.0" + npmlog "^6.0.2" "@lerna/create@5.6.2": - "integrity" "sha512-+Y5cMUxMNXjTTU9IHpgRYIwKo39w+blui1P+s+qYlZUSCUAew0xNpOBG8iN0Nc5X9op4U094oIdHxv7Dyz6tWQ==" - "resolved" "https://registry.npmjs.org/@lerna/create/-/create-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/create/-/create-5.6.2.tgz" + integrity sha512-+Y5cMUxMNXjTTU9IHpgRYIwKo39w+blui1P+s+qYlZUSCUAew0xNpOBG8iN0Nc5X9op4U094oIdHxv7Dyz6tWQ== dependencies: "@lerna/child-process" "5.6.2" "@lerna/command" "5.6.2" "@lerna/npm-conf" "5.6.2" "@lerna/validation-error" "5.6.2" - "dedent" "^0.7.0" - "fs-extra" "^9.1.0" - "init-package-json" "^3.0.2" - "npm-package-arg" "8.1.1" - "p-reduce" "^2.1.0" - "pacote" "^13.6.1" - "pify" "^5.0.0" - "semver" "^7.3.4" - "slash" "^3.0.0" - "validate-npm-package-license" "^3.0.4" - "validate-npm-package-name" "^4.0.0" - "yargs-parser" "20.2.4" + dedent "^0.7.0" + fs-extra "^9.1.0" + init-package-json "^3.0.2" + npm-package-arg "8.1.1" + p-reduce "^2.1.0" + pacote "^13.6.1" + pify "^5.0.0" + semver "^7.3.4" + slash "^3.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^4.0.0" + yargs-parser "20.2.4" "@lerna/describe-ref@5.6.2": - "integrity" "sha512-UqU0N77aT1W8duYGir7R+Sk3jsY/c4lhcCEcnayMpFScMbAp0ETGsW04cYsHK29sgg+ZCc5zEwebBqabWhMhnA==" - "resolved" "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.6.2.tgz" + integrity sha512-UqU0N77aT1W8duYGir7R+Sk3jsY/c4lhcCEcnayMpFScMbAp0ETGsW04cYsHK29sgg+ZCc5zEwebBqabWhMhnA== dependencies: "@lerna/child-process" "5.6.2" - "npmlog" "^6.0.2" + npmlog "^6.0.2" "@lerna/diff@5.6.2": - "integrity" "sha512-aHKzKvUvUI8vOcshC2Za/bdz+plM3r/ycqUrPqaERzp+kc1pYHyPeXezydVdEmgmmwmyKI5hx4+2QNnzOnun2A==" - "resolved" "https://registry.npmjs.org/@lerna/diff/-/diff-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/diff/-/diff-5.6.2.tgz" + integrity sha512-aHKzKvUvUI8vOcshC2Za/bdz+plM3r/ycqUrPqaERzp+kc1pYHyPeXezydVdEmgmmwmyKI5hx4+2QNnzOnun2A== dependencies: "@lerna/child-process" "5.6.2" "@lerna/command" "5.6.2" "@lerna/validation-error" "5.6.2" - "npmlog" "^6.0.2" + npmlog "^6.0.2" "@lerna/exec@5.6.2": - "integrity" "sha512-meZozok5stK7S0oAVn+kdbTmU+kHj9GTXjW7V8kgwG9ld+JJMTH3nKK1L3mEKyk9TFu9vFWyEOF7HNK6yEOoVg==" - "resolved" "https://registry.npmjs.org/@lerna/exec/-/exec-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/exec/-/exec-5.6.2.tgz" + integrity sha512-meZozok5stK7S0oAVn+kdbTmU+kHj9GTXjW7V8kgwG9ld+JJMTH3nKK1L3mEKyk9TFu9vFWyEOF7HNK6yEOoVg== dependencies: "@lerna/child-process" "5.6.2" "@lerna/command" "5.6.2" @@ -1441,126 +1329,126 @@ "@lerna/profiler" "5.6.2" "@lerna/run-topologically" "5.6.2" "@lerna/validation-error" "5.6.2" - "p-map" "^4.0.0" + p-map "^4.0.0" "@lerna/filter-options@5.6.2": - "integrity" "sha512-4Z0HIhPak2TabTsUqEBQaQeOqgqEt0qyskvsY0oviYvqP/nrJfJBZh4H93jIiNQF59LJCn5Ce3KJJrLExxjlzw==" - "resolved" "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.6.2.tgz" + integrity sha512-4Z0HIhPak2TabTsUqEBQaQeOqgqEt0qyskvsY0oviYvqP/nrJfJBZh4H93jIiNQF59LJCn5Ce3KJJrLExxjlzw== dependencies: "@lerna/collect-updates" "5.6.2" "@lerna/filter-packages" "5.6.2" - "dedent" "^0.7.0" - "npmlog" "^6.0.2" + dedent "^0.7.0" + npmlog "^6.0.2" "@lerna/filter-packages@5.6.2": - "integrity" "sha512-el9V2lTEG0Bbz+Omo45hATkRVnChCTJhcTpth19cMJ6mQ4M5H4IgbWCJdFMBi/RpTnOhz9BhJxDbj95kuIvvzw==" - "resolved" "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.6.2.tgz" + integrity sha512-el9V2lTEG0Bbz+Omo45hATkRVnChCTJhcTpth19cMJ6mQ4M5H4IgbWCJdFMBi/RpTnOhz9BhJxDbj95kuIvvzw== dependencies: "@lerna/validation-error" "5.6.2" - "multimatch" "^5.0.0" - "npmlog" "^6.0.2" + multimatch "^5.0.0" + npmlog "^6.0.2" "@lerna/get-npm-exec-opts@5.6.2": - "integrity" "sha512-0RbSDJ+QC9D5UWZJh3DN7mBIU1NhBmdHOE289oHSkjDY+uEjdzMPkEUy+wZ8fCzMLFnnNQkAEqNaOAzZ7dmFLA==" - "resolved" "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.6.2.tgz" + integrity sha512-0RbSDJ+QC9D5UWZJh3DN7mBIU1NhBmdHOE289oHSkjDY+uEjdzMPkEUy+wZ8fCzMLFnnNQkAEqNaOAzZ7dmFLA== dependencies: - "npmlog" "^6.0.2" + npmlog "^6.0.2" "@lerna/get-packed@5.6.2": - "integrity" "sha512-pp5nNDmtrtd21aKHjwwOY5CS7XNIHxINzGa+Jholn1jMDYUtdskpN++ZqYbATGpW831++NJuiuBVyqAWi9xbXg==" - "resolved" "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.6.2.tgz" + integrity sha512-pp5nNDmtrtd21aKHjwwOY5CS7XNIHxINzGa+Jholn1jMDYUtdskpN++ZqYbATGpW831++NJuiuBVyqAWi9xbXg== dependencies: - "fs-extra" "^9.1.0" - "ssri" "^9.0.1" - "tar" "^6.1.0" + fs-extra "^9.1.0" + ssri "^9.0.1" + tar "^6.1.0" "@lerna/github-client@5.6.2": - "integrity" "sha512-pjALazZoRZtKqfwLBwmW3HPptVhQm54PvA8s3qhCQ+3JkqrZiIFwkkxNZxs3jwzr+aaSOzfhSzCndg0urb0GXA==" - "resolved" "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.6.2.tgz" + integrity sha512-pjALazZoRZtKqfwLBwmW3HPptVhQm54PvA8s3qhCQ+3JkqrZiIFwkkxNZxs3jwzr+aaSOzfhSzCndg0urb0GXA== dependencies: "@lerna/child-process" "5.6.2" "@octokit/plugin-enterprise-rest" "^6.0.1" "@octokit/rest" "^19.0.3" - "git-url-parse" "^13.1.0" - "npmlog" "^6.0.2" + git-url-parse "^13.1.0" + npmlog "^6.0.2" "@lerna/gitlab-client@5.6.2": - "integrity" "sha512-TInJmbrsmYIwUyrRxytjO82KjJbRwm67F7LoZs1shAq6rMvNqi4NxSY9j+hT/939alFmEq1zssoy/caeLXHRfQ==" - "resolved" "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.6.2.tgz" + integrity sha512-TInJmbrsmYIwUyrRxytjO82KjJbRwm67F7LoZs1shAq6rMvNqi4NxSY9j+hT/939alFmEq1zssoy/caeLXHRfQ== dependencies: - "node-fetch" "^2.6.1" - "npmlog" "^6.0.2" + node-fetch "^2.6.1" + npmlog "^6.0.2" "@lerna/global-options@5.6.2": - "integrity" "sha512-kaKELURXTlczthNJskdOvh6GGMyt24qat0xMoJZ8plYMdofJfhz24h1OFcvB/EwCUwP/XV1+ohE5P+vdktbrEg==" - "resolved" "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.6.2.tgz" + integrity sha512-kaKELURXTlczthNJskdOvh6GGMyt24qat0xMoJZ8plYMdofJfhz24h1OFcvB/EwCUwP/XV1+ohE5P+vdktbrEg== "@lerna/has-npm-version@5.6.2": - "integrity" "sha512-kXCnSzffmTWsaK0ol30coyCfO8WH26HFbmJjRBzKv7VGkuAIcB6gX2gqRRgNLLlvI+Yrp+JSlpVNVnu15SEH2g==" - "resolved" "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.6.2.tgz" + integrity sha512-kXCnSzffmTWsaK0ol30coyCfO8WH26HFbmJjRBzKv7VGkuAIcB6gX2gqRRgNLLlvI+Yrp+JSlpVNVnu15SEH2g== dependencies: "@lerna/child-process" "5.6.2" - "semver" "^7.3.4" + semver "^7.3.4" "@lerna/import@5.6.2": - "integrity" "sha512-xQUE49mtcP0z3KUdXBsyvp8rGDz6phuYUoQbhcFRJ7WPcQKzMvtm0XYrER6c2YWEX7QOuDac6tU82P8zTrTBaA==" - "resolved" "https://registry.npmjs.org/@lerna/import/-/import-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/import/-/import-5.6.2.tgz" + integrity sha512-xQUE49mtcP0z3KUdXBsyvp8rGDz6phuYUoQbhcFRJ7WPcQKzMvtm0XYrER6c2YWEX7QOuDac6tU82P8zTrTBaA== dependencies: "@lerna/child-process" "5.6.2" "@lerna/command" "5.6.2" "@lerna/prompt" "5.6.2" "@lerna/pulse-till-done" "5.6.2" "@lerna/validation-error" "5.6.2" - "dedent" "^0.7.0" - "fs-extra" "^9.1.0" - "p-map-series" "^2.1.0" + dedent "^0.7.0" + fs-extra "^9.1.0" + p-map-series "^2.1.0" "@lerna/info@5.6.2": - "integrity" "sha512-MPjY5Olj+fiZHgfEdwXUFRKamdEuLr9Ob/qut8JsB/oQSQ4ALdQfnrOcMT8lJIcC2R67EA5yav2lHPBIkezm8A==" - "resolved" "https://registry.npmjs.org/@lerna/info/-/info-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/info/-/info-5.6.2.tgz" + integrity sha512-MPjY5Olj+fiZHgfEdwXUFRKamdEuLr9Ob/qut8JsB/oQSQ4ALdQfnrOcMT8lJIcC2R67EA5yav2lHPBIkezm8A== dependencies: "@lerna/command" "5.6.2" "@lerna/output" "5.6.2" - "envinfo" "^7.7.4" + envinfo "^7.7.4" "@lerna/init@5.6.2": - "integrity" "sha512-ahU3/lgF+J8kdJAQysihFJROHthkIDXfHmvhw7AYnzf94HjxGNXj7nz6i3At1/dM/1nQhR+4/uNR1/OU4tTYYQ==" - "resolved" "https://registry.npmjs.org/@lerna/init/-/init-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/init/-/init-5.6.2.tgz" + integrity sha512-ahU3/lgF+J8kdJAQysihFJROHthkIDXfHmvhw7AYnzf94HjxGNXj7nz6i3At1/dM/1nQhR+4/uNR1/OU4tTYYQ== dependencies: "@lerna/child-process" "5.6.2" "@lerna/command" "5.6.2" "@lerna/project" "5.6.2" - "fs-extra" "^9.1.0" - "p-map" "^4.0.0" - "write-json-file" "^4.3.0" + fs-extra "^9.1.0" + p-map "^4.0.0" + write-json-file "^4.3.0" "@lerna/link@5.6.2": - "integrity" "sha512-hXxQ4R3z6rUF1v2x62oIzLyeHL96u7ZBhxqYMJrm763D1VMSDcHKF9CjJfc6J9vH5Z2ZbL6CQg50Hw5mUpJbjg==" - "resolved" "https://registry.npmjs.org/@lerna/link/-/link-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/link/-/link-5.6.2.tgz" + integrity sha512-hXxQ4R3z6rUF1v2x62oIzLyeHL96u7ZBhxqYMJrm763D1VMSDcHKF9CjJfc6J9vH5Z2ZbL6CQg50Hw5mUpJbjg== dependencies: "@lerna/command" "5.6.2" "@lerna/package-graph" "5.6.2" "@lerna/symlink-dependencies" "5.6.2" "@lerna/validation-error" "5.6.2" - "p-map" "^4.0.0" - "slash" "^3.0.0" + p-map "^4.0.0" + slash "^3.0.0" "@lerna/list@5.6.2": - "integrity" "sha512-WjE5O2tQ3TcS+8LqXUaxi0YdldhxUhNihT5+Gg4vzGdIlrPDioO50Zjo9d8jOU7i3LMIk6EzCma0sZr2CVfEGg==" - "resolved" "https://registry.npmjs.org/@lerna/list/-/list-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/list/-/list-5.6.2.tgz" + integrity sha512-WjE5O2tQ3TcS+8LqXUaxi0YdldhxUhNihT5+Gg4vzGdIlrPDioO50Zjo9d8jOU7i3LMIk6EzCma0sZr2CVfEGg== dependencies: "@lerna/command" "5.6.2" "@lerna/filter-options" "5.6.2" @@ -1568,172 +1456,172 @@ "@lerna/output" "5.6.2" "@lerna/listable@5.6.2": - "integrity" "sha512-8Yp49BwkY/5XqVru38Zko+6Wj/sgbwzJfIGEPy3Qu575r1NA/b9eI1gX22aMsEeXUeGOybR7nWT5ewnPQHjqvA==" - "resolved" "https://registry.npmjs.org/@lerna/listable/-/listable-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/listable/-/listable-5.6.2.tgz" + integrity sha512-8Yp49BwkY/5XqVru38Zko+6Wj/sgbwzJfIGEPy3Qu575r1NA/b9eI1gX22aMsEeXUeGOybR7nWT5ewnPQHjqvA== dependencies: "@lerna/query-graph" "5.6.2" - "chalk" "^4.1.0" - "columnify" "^1.6.0" + chalk "^4.1.0" + columnify "^1.6.0" "@lerna/log-packed@5.6.2": - "integrity" "sha512-O9GODG7tMtWk+2fufn2MOkIDBYMRoKBhYMHshO5Aw/VIsH76DIxpX1koMzWfUngM/C70R4uNAKcVWineX4qzIw==" - "resolved" "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.6.2.tgz" + integrity sha512-O9GODG7tMtWk+2fufn2MOkIDBYMRoKBhYMHshO5Aw/VIsH76DIxpX1koMzWfUngM/C70R4uNAKcVWineX4qzIw== dependencies: - "byte-size" "^7.0.0" - "columnify" "^1.6.0" - "has-unicode" "^2.0.1" - "npmlog" "^6.0.2" + byte-size "^7.0.0" + columnify "^1.6.0" + has-unicode "^2.0.1" + npmlog "^6.0.2" "@lerna/npm-conf@5.6.2": - "integrity" "sha512-gWDPhw1wjXYXphk/PAghTLexO5T6abVFhXb+KOMCeem366mY0F5bM88PiorL73aErTNUoR8n+V4X29NTZzDZpQ==" - "resolved" "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.6.2.tgz" + integrity sha512-gWDPhw1wjXYXphk/PAghTLexO5T6abVFhXb+KOMCeem366mY0F5bM88PiorL73aErTNUoR8n+V4X29NTZzDZpQ== dependencies: - "config-chain" "^1.1.12" - "pify" "^5.0.0" + config-chain "^1.1.12" + pify "^5.0.0" "@lerna/npm-dist-tag@5.6.2": - "integrity" "sha512-t2RmxV6Eog4acXkUI+EzWuYVbeVVY139pANIWS9qtdajfgp4GVXZi1S8mAIb70yeHdNpCp1mhK0xpCrFH9LvGQ==" - "resolved" "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.6.2.tgz" + integrity sha512-t2RmxV6Eog4acXkUI+EzWuYVbeVVY139pANIWS9qtdajfgp4GVXZi1S8mAIb70yeHdNpCp1mhK0xpCrFH9LvGQ== dependencies: "@lerna/otplease" "5.6.2" - "npm-package-arg" "8.1.1" - "npm-registry-fetch" "^13.3.0" - "npmlog" "^6.0.2" + npm-package-arg "8.1.1" + npm-registry-fetch "^13.3.0" + npmlog "^6.0.2" "@lerna/npm-install@5.6.2": - "integrity" "sha512-AT226zdEo+uGENd37jwYgdALKJAIJK4pNOfmXWZWzVb9oMOr8I2YSjPYvSYUNG7gOo2YJQU8x5Zd7OShv2924Q==" - "resolved" "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.6.2.tgz" + integrity sha512-AT226zdEo+uGENd37jwYgdALKJAIJK4pNOfmXWZWzVb9oMOr8I2YSjPYvSYUNG7gOo2YJQU8x5Zd7OShv2924Q== dependencies: "@lerna/child-process" "5.6.2" "@lerna/get-npm-exec-opts" "5.6.2" - "fs-extra" "^9.1.0" - "npm-package-arg" "8.1.1" - "npmlog" "^6.0.2" - "signal-exit" "^3.0.3" - "write-pkg" "^4.0.0" + fs-extra "^9.1.0" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + signal-exit "^3.0.3" + write-pkg "^4.0.0" "@lerna/npm-publish@5.6.2": - "integrity" "sha512-ldSyewCfv9fAeC5xNjL0HKGSUxcC048EJoe/B+KRUmd+IPidvZxMEzRu08lSC/q3V9YeUv9ZvRnxATXOM8CffA==" - "resolved" "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.6.2.tgz" + integrity sha512-ldSyewCfv9fAeC5xNjL0HKGSUxcC048EJoe/B+KRUmd+IPidvZxMEzRu08lSC/q3V9YeUv9ZvRnxATXOM8CffA== dependencies: "@lerna/otplease" "5.6.2" "@lerna/run-lifecycle" "5.6.2" - "fs-extra" "^9.1.0" - "libnpmpublish" "^6.0.4" - "npm-package-arg" "8.1.1" - "npmlog" "^6.0.2" - "pify" "^5.0.0" - "read-package-json" "^5.0.1" + fs-extra "^9.1.0" + libnpmpublish "^6.0.4" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + pify "^5.0.0" + read-package-json "^5.0.1" "@lerna/npm-run-script@5.6.2": - "integrity" "sha512-MOQoWNcAyJivM8SYp0zELM7vg/Dj07j4YMdxZkey+S1UO0T4/vKBxb575o16hH4WeNzC3Pd7WBlb7C8dLOfNwQ==" - "resolved" "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.6.2.tgz" + integrity sha512-MOQoWNcAyJivM8SYp0zELM7vg/Dj07j4YMdxZkey+S1UO0T4/vKBxb575o16hH4WeNzC3Pd7WBlb7C8dLOfNwQ== dependencies: "@lerna/child-process" "5.6.2" "@lerna/get-npm-exec-opts" "5.6.2" - "npmlog" "^6.0.2" + npmlog "^6.0.2" "@lerna/otplease@5.6.2": - "integrity" "sha512-dGS4lzkEQVTMAgji82jp8RK6UK32wlzrBAO4P4iiVHCUTuwNLsY9oeBXvVXSMrosJnl6Hbe0NOvi43mqSucGoA==" - "resolved" "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.6.2.tgz" + integrity sha512-dGS4lzkEQVTMAgji82jp8RK6UK32wlzrBAO4P4iiVHCUTuwNLsY9oeBXvVXSMrosJnl6Hbe0NOvi43mqSucGoA== dependencies: "@lerna/prompt" "5.6.2" "@lerna/output@5.6.2": - "integrity" "sha512-++d+bfOQwY66yo7q1XuAvRcqtRHCG45e/awP5xQomTZ6R1rhWiZ3whWdc9Z6lF7+UtBB9toSYYffKU/xc3L0yQ==" - "resolved" "https://registry.npmjs.org/@lerna/output/-/output-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/output/-/output-5.6.2.tgz" + integrity sha512-++d+bfOQwY66yo7q1XuAvRcqtRHCG45e/awP5xQomTZ6R1rhWiZ3whWdc9Z6lF7+UtBB9toSYYffKU/xc3L0yQ== dependencies: - "npmlog" "^6.0.2" + npmlog "^6.0.2" "@lerna/pack-directory@5.6.2": - "integrity" "sha512-w5Jk5fo+HkN4Le7WMOudTcmAymcf0xPd302TqAQncjXpk0cb8tZbj+5bbNHsGb58GRjOIm5icQbHXooQUxbHhA==" - "resolved" "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.6.2.tgz" + integrity sha512-w5Jk5fo+HkN4Le7WMOudTcmAymcf0xPd302TqAQncjXpk0cb8tZbj+5bbNHsGb58GRjOIm5icQbHXooQUxbHhA== dependencies: "@lerna/get-packed" "5.6.2" "@lerna/package" "5.6.2" "@lerna/run-lifecycle" "5.6.2" "@lerna/temp-write" "5.6.2" - "npm-packlist" "^5.1.1" - "npmlog" "^6.0.2" - "tar" "^6.1.0" + npm-packlist "^5.1.1" + npmlog "^6.0.2" + tar "^6.1.0" "@lerna/package-graph@5.6.2": - "integrity" "sha512-TmL61qBBvA3Tc4qICDirZzdFFwWOA6qicIXUruLiE2PblRowRmCO1bKrrP6XbDOspzwrkPef6N2F2/5gHQAnkQ==" - "resolved" "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.6.2.tgz" + integrity sha512-TmL61qBBvA3Tc4qICDirZzdFFwWOA6qicIXUruLiE2PblRowRmCO1bKrrP6XbDOspzwrkPef6N2F2/5gHQAnkQ== dependencies: "@lerna/prerelease-id-from-version" "5.6.2" "@lerna/validation-error" "5.6.2" - "npm-package-arg" "8.1.1" - "npmlog" "^6.0.2" - "semver" "^7.3.4" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + semver "^7.3.4" "@lerna/package@5.6.2": - "integrity" "sha512-LaOC8moyM5J9WnRiWZkedjOninSclBOJyPqhif6mHb2kCFX6jAroNYzE8KM4cphu8CunHuhI6Ixzswtv+Dultw==" - "resolved" "https://registry.npmjs.org/@lerna/package/-/package-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/package/-/package-5.6.2.tgz" + integrity sha512-LaOC8moyM5J9WnRiWZkedjOninSclBOJyPqhif6mHb2kCFX6jAroNYzE8KM4cphu8CunHuhI6Ixzswtv+Dultw== dependencies: - "load-json-file" "^6.2.0" - "npm-package-arg" "8.1.1" - "write-pkg" "^4.0.0" + load-json-file "^6.2.0" + npm-package-arg "8.1.1" + write-pkg "^4.0.0" "@lerna/prerelease-id-from-version@5.6.2": - "integrity" "sha512-7gIm9fecWFVNy2kpj/KbH11bRcpyANAwpsft3X5m6J7y7A6FTUscCbEvl3ZNdpQKHNuvnHgCtkm3A5PMSCEgkA==" - "resolved" "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.6.2.tgz" + integrity sha512-7gIm9fecWFVNy2kpj/KbH11bRcpyANAwpsft3X5m6J7y7A6FTUscCbEvl3ZNdpQKHNuvnHgCtkm3A5PMSCEgkA== dependencies: - "semver" "^7.3.4" + semver "^7.3.4" "@lerna/profiler@5.6.2": - "integrity" "sha512-okwkagP5zyRIOYTceu/9/esW7UZFt7lyL6q6ZgpSG3TYC5Ay+FXLtS6Xiha/FQdVdumFqKULDWTGovzUlxcwaw==" - "resolved" "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.6.2.tgz" + integrity sha512-okwkagP5zyRIOYTceu/9/esW7UZFt7lyL6q6ZgpSG3TYC5Ay+FXLtS6Xiha/FQdVdumFqKULDWTGovzUlxcwaw== dependencies: - "fs-extra" "^9.1.0" - "npmlog" "^6.0.2" - "upath" "^2.0.1" + fs-extra "^9.1.0" + npmlog "^6.0.2" + upath "^2.0.1" "@lerna/project@5.6.2": - "integrity" "sha512-kPIMcIy/0DVWM91FPMMFmXyAnCuuLm3NdhnA8NusE//VuY9wC6QC/3OwuCY39b2dbko/fPZheqKeAZkkMH6sGg==" - "resolved" "https://registry.npmjs.org/@lerna/project/-/project-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/project/-/project-5.6.2.tgz" + integrity sha512-kPIMcIy/0DVWM91FPMMFmXyAnCuuLm3NdhnA8NusE//VuY9wC6QC/3OwuCY39b2dbko/fPZheqKeAZkkMH6sGg== dependencies: "@lerna/package" "5.6.2" "@lerna/validation-error" "5.6.2" - "cosmiconfig" "^7.0.0" - "dedent" "^0.7.0" - "dot-prop" "^6.0.1" - "glob-parent" "^5.1.1" - "globby" "^11.0.2" - "js-yaml" "^4.1.0" - "load-json-file" "^6.2.0" - "npmlog" "^6.0.2" - "p-map" "^4.0.0" - "resolve-from" "^5.0.0" - "write-json-file" "^4.3.0" + cosmiconfig "^7.0.0" + dedent "^0.7.0" + dot-prop "^6.0.1" + glob-parent "^5.1.1" + globby "^11.0.2" + js-yaml "^4.1.0" + load-json-file "^6.2.0" + npmlog "^6.0.2" + p-map "^4.0.0" + resolve-from "^5.0.0" + write-json-file "^4.3.0" "@lerna/prompt@5.6.2": - "integrity" "sha512-4hTNmVYADEr0GJTMegWV+GW6n+dzKx1vN9v2ISqyle283Myv930WxuyO0PeYGqTrkneJsyPreCMovuEGCvZ0iQ==" - "resolved" "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.6.2.tgz" + integrity sha512-4hTNmVYADEr0GJTMegWV+GW6n+dzKx1vN9v2ISqyle283Myv930WxuyO0PeYGqTrkneJsyPreCMovuEGCvZ0iQ== dependencies: - "inquirer" "^8.2.4" - "npmlog" "^6.0.2" + inquirer "^8.2.4" + npmlog "^6.0.2" "@lerna/publish@5.6.2": - "integrity" "sha512-QaW0GjMJMuWlRNjeDCjmY/vjriGSWgkLS23yu8VKNtV5U3dt5yIKA3DNGV3HgZACuu45kQxzMDsfLzgzbGNtYA==" - "resolved" "https://registry.npmjs.org/@lerna/publish/-/publish-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/publish/-/publish-5.6.2.tgz" + integrity sha512-QaW0GjMJMuWlRNjeDCjmY/vjriGSWgkLS23yu8VKNtV5U3dt5yIKA3DNGV3HgZACuu45kQxzMDsfLzgzbGNtYA== dependencies: "@lerna/check-working-tree" "5.6.2" "@lerna/child-process" "5.6.2" @@ -1754,71 +1642,71 @@ "@lerna/run-topologically" "5.6.2" "@lerna/validation-error" "5.6.2" "@lerna/version" "5.6.2" - "fs-extra" "^9.1.0" - "libnpmaccess" "^6.0.3" - "npm-package-arg" "8.1.1" - "npm-registry-fetch" "^13.3.0" - "npmlog" "^6.0.2" - "p-map" "^4.0.0" - "p-pipe" "^3.1.0" - "pacote" "^13.6.1" - "semver" "^7.3.4" + fs-extra "^9.1.0" + libnpmaccess "^6.0.3" + npm-package-arg "8.1.1" + npm-registry-fetch "^13.3.0" + npmlog "^6.0.2" + p-map "^4.0.0" + p-pipe "^3.1.0" + pacote "^13.6.1" + semver "^7.3.4" "@lerna/pulse-till-done@5.6.2": - "integrity" "sha512-eA/X1RCxU5YGMNZmbgPi+Kyfx1Q3bn4P9jo/LZy+/NRRr1po3ASXP2GJZ1auBh/9A2ELDvvKTOXCVHqczKC6rA==" - "resolved" "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.6.2.tgz" + integrity sha512-eA/X1RCxU5YGMNZmbgPi+Kyfx1Q3bn4P9jo/LZy+/NRRr1po3ASXP2GJZ1auBh/9A2ELDvvKTOXCVHqczKC6rA== dependencies: - "npmlog" "^6.0.2" + npmlog "^6.0.2" "@lerna/query-graph@5.6.2": - "integrity" "sha512-KRngr96yBP8XYDi9/U62fnGO+ZXqm04Qk6a2HtoTr/ha8QvO1s7Tgm0xs/G7qWXDQHZgunWIbmK/LhxM7eFQrw==" - "resolved" "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.6.2.tgz" + integrity sha512-KRngr96yBP8XYDi9/U62fnGO+ZXqm04Qk6a2HtoTr/ha8QvO1s7Tgm0xs/G7qWXDQHZgunWIbmK/LhxM7eFQrw== dependencies: "@lerna/package-graph" "5.6.2" "@lerna/resolve-symlink@5.6.2": - "integrity" "sha512-PDQy+7M8JEFtwIVHJgWvSxHkxJf9zXCENkvIWDB+SsoDPhw9+caewt46bTeP5iGm9pOMu3oZukaWo/TvF7sNjg==" - "resolved" "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.6.2.tgz" + integrity sha512-PDQy+7M8JEFtwIVHJgWvSxHkxJf9zXCENkvIWDB+SsoDPhw9+caewt46bTeP5iGm9pOMu3oZukaWo/TvF7sNjg== dependencies: - "fs-extra" "^9.1.0" - "npmlog" "^6.0.2" - "read-cmd-shim" "^3.0.0" + fs-extra "^9.1.0" + npmlog "^6.0.2" + read-cmd-shim "^3.0.0" "@lerna/rimraf-dir@5.6.2": - "integrity" "sha512-jgEfzz7uBUiQKteq3G8MtJiA2D2VoKmZSSY3VSiW/tPOSXYxxSHxEsClQdCeNa6+sYrDNDT8fP6MJ3lPLjDeLA==" - "resolved" "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.6.2.tgz" + integrity sha512-jgEfzz7uBUiQKteq3G8MtJiA2D2VoKmZSSY3VSiW/tPOSXYxxSHxEsClQdCeNa6+sYrDNDT8fP6MJ3lPLjDeLA== dependencies: "@lerna/child-process" "5.6.2" - "npmlog" "^6.0.2" - "path-exists" "^4.0.0" - "rimraf" "^3.0.2" + npmlog "^6.0.2" + path-exists "^4.0.0" + rimraf "^3.0.2" "@lerna/run-lifecycle@5.6.2": - "integrity" "sha512-u9gGgq/50Fm8dvfcc/TSHOCAQvzLD7poVanDMhHYWOAqRDnellJEEmA1K/Yka4vZmySrzluahkry9G6jcREt+g==" - "resolved" "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.6.2.tgz" + integrity sha512-u9gGgq/50Fm8dvfcc/TSHOCAQvzLD7poVanDMhHYWOAqRDnellJEEmA1K/Yka4vZmySrzluahkry9G6jcREt+g== dependencies: "@lerna/npm-conf" "5.6.2" "@npmcli/run-script" "^4.1.7" - "npmlog" "^6.0.2" - "p-queue" "^6.6.2" + npmlog "^6.0.2" + p-queue "^6.6.2" "@lerna/run-topologically@5.6.2": - "integrity" "sha512-QQ/jGOIsVvUg3izShWsd67RlWYh9UOH2yw97Ol1zySX9+JspCMVQrn9eKq1Pk8twQOFhT87LpT/aaxbTBgREPw==" - "resolved" "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.6.2.tgz" + integrity sha512-QQ/jGOIsVvUg3izShWsd67RlWYh9UOH2yw97Ol1zySX9+JspCMVQrn9eKq1Pk8twQOFhT87LpT/aaxbTBgREPw== dependencies: "@lerna/query-graph" "5.6.2" - "p-queue" "^6.6.2" + p-queue "^6.6.2" "@lerna/run@5.6.2": - "integrity" "sha512-c2kJxdFrNg5KOkrhmgwKKUOsfSrGNlFCe26EttufOJ3xfY0VnXlEw9rHOkTgwtu7969rfCdyaVP1qckMrF1Dgw==" - "resolved" "https://registry.npmjs.org/@lerna/run/-/run-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/run/-/run-5.6.2.tgz" + integrity sha512-c2kJxdFrNg5KOkrhmgwKKUOsfSrGNlFCe26EttufOJ3xfY0VnXlEw9rHOkTgwtu7969rfCdyaVP1qckMrF1Dgw== dependencies: "@lerna/command" "5.6.2" "@lerna/filter-options" "5.6.2" @@ -1828,58 +1716,58 @@ "@lerna/run-topologically" "5.6.2" "@lerna/timer" "5.6.2" "@lerna/validation-error" "5.6.2" - "fs-extra" "^9.1.0" - "p-map" "^4.0.0" + fs-extra "^9.1.0" + p-map "^4.0.0" "@lerna/symlink-binary@5.6.2": - "integrity" "sha512-Cth+miwYyO81WAmrQbPBrLHuF+F0UUc0el5kRXLH6j5zzaRS3kMM68r40M7MmfH8m3GPi7691UARoWFEotW5jw==" - "resolved" "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.6.2.tgz" + integrity sha512-Cth+miwYyO81WAmrQbPBrLHuF+F0UUc0el5kRXLH6j5zzaRS3kMM68r40M7MmfH8m3GPi7691UARoWFEotW5jw== dependencies: "@lerna/create-symlink" "5.6.2" "@lerna/package" "5.6.2" - "fs-extra" "^9.1.0" - "p-map" "^4.0.0" + fs-extra "^9.1.0" + p-map "^4.0.0" "@lerna/symlink-dependencies@5.6.2": - "integrity" "sha512-dUVNQLEcjVOIQiT9OlSAKt0ykjyJPy8l9i4NJDe2/0XYaUjo8PWsxJ0vrutz27jzi2aZUy07ASmowQZEmnLHAw==" - "resolved" "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.6.2.tgz" + integrity sha512-dUVNQLEcjVOIQiT9OlSAKt0ykjyJPy8l9i4NJDe2/0XYaUjo8PWsxJ0vrutz27jzi2aZUy07ASmowQZEmnLHAw== dependencies: "@lerna/create-symlink" "5.6.2" "@lerna/resolve-symlink" "5.6.2" "@lerna/symlink-binary" "5.6.2" - "fs-extra" "^9.1.0" - "p-map" "^4.0.0" - "p-map-series" "^2.1.0" + fs-extra "^9.1.0" + p-map "^4.0.0" + p-map-series "^2.1.0" "@lerna/temp-write@5.6.2": - "integrity" "sha512-S5ZNVTurSwWBmc9kh5alfSjmO3+BnRT6shYtOlmVIUYqWeYVYA5C1Htj322bbU4CSNCMFK6NQl4qGKL17HMuig==" - "resolved" "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.6.2.tgz" + integrity sha512-S5ZNVTurSwWBmc9kh5alfSjmO3+BnRT6shYtOlmVIUYqWeYVYA5C1Htj322bbU4CSNCMFK6NQl4qGKL17HMuig== dependencies: - "graceful-fs" "^4.1.15" - "is-stream" "^2.0.0" - "make-dir" "^3.0.0" - "temp-dir" "^1.0.0" - "uuid" "^8.3.2" + graceful-fs "^4.1.15" + is-stream "^2.0.0" + make-dir "^3.0.0" + temp-dir "^1.0.0" + uuid "^8.3.2" "@lerna/timer@5.6.2": - "integrity" "sha512-AjMOiLc2B+5Nzdd9hNORetAdZ/WK8YNGX/+2ypzM68TMAPfIT5C40hMlSva9Yg4RsBz22REopXgM5s2zQd5ZQA==" - "resolved" "https://registry.npmjs.org/@lerna/timer/-/timer-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/timer/-/timer-5.6.2.tgz" + integrity sha512-AjMOiLc2B+5Nzdd9hNORetAdZ/WK8YNGX/+2ypzM68TMAPfIT5C40hMlSva9Yg4RsBz22REopXgM5s2zQd5ZQA== "@lerna/validation-error@5.6.2": - "integrity" "sha512-4WlDUHaa+RSJNyJRtX3gVIAPVzjZD2tle8AJ0ZYBfdZnZmG0VlB2pD1FIbOQPK8sY2h5m0cHLRvfLoLncqHvdQ==" - "resolved" "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.6.2.tgz" + integrity sha512-4WlDUHaa+RSJNyJRtX3gVIAPVzjZD2tle8AJ0ZYBfdZnZmG0VlB2pD1FIbOQPK8sY2h5m0cHLRvfLoLncqHvdQ== dependencies: - "npmlog" "^6.0.2" + npmlog "^6.0.2" "@lerna/version@5.6.2": - "integrity" "sha512-odNSR2rTbHW++xMZSQKu/F6Syrd/sUvwDLPaMKktoOSPKmycHt/eWcuQQyACdtc43Iqeu4uQd7PCLsniqOVFrw==" - "resolved" "https://registry.npmjs.org/@lerna/version/-/version-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/version/-/version-5.6.2.tgz" + integrity sha512-odNSR2rTbHW++xMZSQKu/F6Syrd/sUvwDLPaMKktoOSPKmycHt/eWcuQQyACdtc43Iqeu4uQd7PCLsniqOVFrw== dependencies: "@lerna/check-working-tree" "5.6.2" "@lerna/child-process" "5.6.2" @@ -1896,103 +1784,103 @@ "@lerna/temp-write" "5.6.2" "@lerna/validation-error" "5.6.2" "@nrwl/devkit" ">=14.8.1 < 16" - "chalk" "^4.1.0" - "dedent" "^0.7.0" - "load-json-file" "^6.2.0" - "minimatch" "^3.0.4" - "npmlog" "^6.0.2" - "p-map" "^4.0.0" - "p-pipe" "^3.1.0" - "p-reduce" "^2.1.0" - "p-waterfall" "^2.1.1" - "semver" "^7.3.4" - "slash" "^3.0.0" - "write-json-file" "^4.3.0" + chalk "^4.1.0" + dedent "^0.7.0" + load-json-file "^6.2.0" + minimatch "^3.0.4" + npmlog "^6.0.2" + p-map "^4.0.0" + p-pipe "^3.1.0" + p-reduce "^2.1.0" + p-waterfall "^2.1.1" + semver "^7.3.4" + slash "^3.0.0" + write-json-file "^4.3.0" "@lerna/write-log-file@5.6.2": - "integrity" "sha512-J09l18QnWQ3sXIRwuJkjXY3+KwPR2uO5NgbZGE3GXJK1V/LzOBRMvjGAIbuQHXw25uqe7vpLUpB8drtnFrubCQ==" - "resolved" "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.6.2.tgz" - "version" "5.6.2" + version "5.6.2" + resolved "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.6.2.tgz" + integrity sha512-J09l18QnWQ3sXIRwuJkjXY3+KwPR2uO5NgbZGE3GXJK1V/LzOBRMvjGAIbuQHXw25uqe7vpLUpB8drtnFrubCQ== dependencies: - "npmlog" "^6.0.2" - "write-file-atomic" "^4.0.1" + npmlog "^6.0.2" + write-file-atomic "^4.0.1" -"@metamask/eth-sig-util@^4.0.0", "@metamask/eth-sig-util@4.0.1": - "integrity" "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==" - "resolved" "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz" - "version" "4.0.1" +"@metamask/eth-sig-util@4.0.1", "@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" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== dependencies: - "ethereumjs-abi" "^0.6.8" - "ethereumjs-util" "^6.2.1" - "ethjs-util" "^0.1.6" - "tweetnacl" "^1.0.3" - "tweetnacl-util" "^0.15.1" + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" "@metamask/obs-store@^7.0.0": - "integrity" "sha512-Tr61Uu9CGXkCg5CZwOYRMQERd+y6fbtrtLd/PzDTPHO5UJpmSbU+7MPcQK7d1DwZCOCeCIvhmZSUCvYliC8uGw==" - "resolved" "https://registry.npmjs.org/@metamask/obs-store/-/obs-store-7.0.0.tgz" - "version" "7.0.0" + version "7.0.0" + resolved "https://registry.npmjs.org/@metamask/obs-store/-/obs-store-7.0.0.tgz" + integrity sha512-Tr61Uu9CGXkCg5CZwOYRMQERd+y6fbtrtLd/PzDTPHO5UJpmSbU+7MPcQK7d1DwZCOCeCIvhmZSUCvYliC8uGw== dependencies: "@metamask/safe-event-emitter" "^2.0.0" - "through2" "^2.0.3" + through2 "^2.0.3" "@metamask/safe-event-emitter@^2.0.0": - "integrity" "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==" - "resolved" "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz" - "version" "2.0.0" - -"@noble/hashes@~1.1.1": - "integrity" "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==" - "resolved" "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz" - "version" "1.1.3" + version "2.0.0" + resolved "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz" + integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== "@noble/hashes@1.1.2": - "integrity" "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" - "resolved" "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz" - "version" "1.1.2" + version "1.1.2" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz" + integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== + +"@noble/hashes@~1.1.1": + version "1.1.3" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz" + integrity sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A== -"@noble/secp256k1@~1.6.0", "@noble/secp256k1@1.6.3": - "integrity" "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==" - "resolved" "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz" - "version" "1.6.3" +"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": + version "1.6.3" + resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz" + integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== "@nodelib/fs.scandir@2.1.5": - "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - "version" "2.1.5" + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" - "run-parallel" "^1.1.9" + run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - "version" "2.0.5" +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - "version" "1.2.8" + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" - "fastq" "^1.6.0" + fastq "^1.6.0" "@nomicfoundation/ethereumjs-block@^4.0.0": - "integrity" "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz" - "version" "4.0.0" + version "4.0.0" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz" + integrity sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA== dependencies: "@nomicfoundation/ethereumjs-common" "^3.0.0" "@nomicfoundation/ethereumjs-rlp" "^4.0.0" "@nomicfoundation/ethereumjs-trie" "^5.0.0" "@nomicfoundation/ethereumjs-tx" "^4.0.0" "@nomicfoundation/ethereumjs-util" "^8.0.0" - "ethereum-cryptography" "0.1.3" + ethereum-cryptography "0.1.3" "@nomicfoundation/ethereumjs-blockchain@^6.0.0": - "integrity" "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz" - "version" "6.0.0" + version "6.0.0" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz" + integrity sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw== dependencies: "@nomicfoundation/ethereumjs-block" "^4.0.0" "@nomicfoundation/ethereumjs-common" "^3.0.0" @@ -2000,97 +1888,97 @@ "@nomicfoundation/ethereumjs-rlp" "^4.0.0" "@nomicfoundation/ethereumjs-trie" "^5.0.0" "@nomicfoundation/ethereumjs-util" "^8.0.0" - "abstract-level" "^1.0.3" - "debug" "^4.3.3" - "ethereum-cryptography" "0.1.3" - "level" "^8.0.0" - "lru-cache" "^5.1.1" - "memory-level" "^1.0.0" + abstract-level "^1.0.3" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + level "^8.0.0" + lru-cache "^5.1.1" + memory-level "^1.0.0" "@nomicfoundation/ethereumjs-common@^3.0.0": - "integrity" "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz" - "version" "3.0.0" + version "3.0.0" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz" + integrity sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA== dependencies: "@nomicfoundation/ethereumjs-util" "^8.0.0" - "crc-32" "^1.2.0" + crc-32 "^1.2.0" "@nomicfoundation/ethereumjs-ethash@^2.0.0": - "integrity" "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz" - "version" "2.0.0" + version "2.0.0" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz" + integrity sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew== dependencies: "@nomicfoundation/ethereumjs-block" "^4.0.0" "@nomicfoundation/ethereumjs-rlp" "^4.0.0" "@nomicfoundation/ethereumjs-util" "^8.0.0" - "abstract-level" "^1.0.3" - "bigint-crypto-utils" "^3.0.23" - "ethereum-cryptography" "0.1.3" + abstract-level "^1.0.3" + bigint-crypto-utils "^3.0.23" + ethereum-cryptography "0.1.3" "@nomicfoundation/ethereumjs-evm@^1.0.0": - "integrity" "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz" - "version" "1.0.0" + version "1.0.0" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz" + integrity sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q== dependencies: "@nomicfoundation/ethereumjs-common" "^3.0.0" "@nomicfoundation/ethereumjs-util" "^8.0.0" "@types/async-eventemitter" "^0.2.1" - "async-eventemitter" "^0.2.4" - "debug" "^4.3.3" - "ethereum-cryptography" "0.1.3" - "mcl-wasm" "^0.7.1" - "rustbn.js" "~0.2.0" + async-eventemitter "^0.2.4" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" "@nomicfoundation/ethereumjs-rlp@^4.0.0", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2": - "integrity" "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz" - "version" "4.0.0" + version "4.0.0" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz" + integrity sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw== "@nomicfoundation/ethereumjs-statemanager@^1.0.0": - "integrity" "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz" - "version" "1.0.0" + version "1.0.0" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz" + integrity sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ== dependencies: "@nomicfoundation/ethereumjs-common" "^3.0.0" "@nomicfoundation/ethereumjs-rlp" "^4.0.0" "@nomicfoundation/ethereumjs-trie" "^5.0.0" "@nomicfoundation/ethereumjs-util" "^8.0.0" - "debug" "^4.3.3" - "ethereum-cryptography" "0.1.3" - "functional-red-black-tree" "^1.0.1" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + functional-red-black-tree "^1.0.1" "@nomicfoundation/ethereumjs-trie@^5.0.0": - "integrity" "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz" - "version" "5.0.0" + version "5.0.0" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz" + integrity sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A== dependencies: "@nomicfoundation/ethereumjs-rlp" "^4.0.0" "@nomicfoundation/ethereumjs-util" "^8.0.0" - "ethereum-cryptography" "0.1.3" - "readable-stream" "^3.6.0" + ethereum-cryptography "0.1.3" + readable-stream "^3.6.0" "@nomicfoundation/ethereumjs-tx@^4.0.0": - "integrity" "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz" - "version" "4.0.0" + version "4.0.0" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz" + integrity sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w== dependencies: "@nomicfoundation/ethereumjs-common" "^3.0.0" "@nomicfoundation/ethereumjs-rlp" "^4.0.0" "@nomicfoundation/ethereumjs-util" "^8.0.0" - "ethereum-cryptography" "0.1.3" + ethereum-cryptography "0.1.3" "@nomicfoundation/ethereumjs-util@^8.0.0": - "integrity" "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz" - "version" "8.0.0" + version "8.0.0" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz" + integrity sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A== dependencies: "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" - "ethereum-cryptography" "0.1.3" + ethereum-cryptography "0.1.3" "@nomicfoundation/ethereumjs-vm@^6.0.0": - "integrity" "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz" - "version" "6.0.0" + version "6.0.0" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz" + integrity sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w== dependencies: "@nomicfoundation/ethereumjs-block" "^4.0.0" "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" @@ -2102,46 +1990,91 @@ "@nomicfoundation/ethereumjs-tx" "^4.0.0" "@nomicfoundation/ethereumjs-util" "^8.0.0" "@types/async-eventemitter" "^0.2.1" - "async-eventemitter" "^0.2.4" - "debug" "^4.3.3" - "ethereum-cryptography" "0.1.3" - "functional-red-black-tree" "^1.0.1" - "mcl-wasm" "^0.7.1" - "rustbn.js" "~0.2.0" - -"@nomicfoundation/hardhat-chai-matchers@^1.0.0", "@nomicfoundation/hardhat-chai-matchers@^1.0.3": - "integrity" "sha512-n/5UMwGaUK2zM8ALuMChVwB1lEPeDTb5oBjQ1g7hVsUdS8x+XG9JIEp4Ze6Bwy98tghA7Y1+PCH4SNE2P3UQ2g==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.4.tgz" - "version" "1.0.4" + async-eventemitter "^0.2.4" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/hardhat-chai-matchers@^1.0.3": + version "1.0.4" + resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.4.tgz" + integrity sha512-n/5UMwGaUK2zM8ALuMChVwB1lEPeDTb5oBjQ1g7hVsUdS8x+XG9JIEp4Ze6Bwy98tghA7Y1+PCH4SNE2P3UQ2g== dependencies: "@ethersproject/abi" "^5.1.2" "@types/chai-as-promised" "^7.1.3" - "chai-as-promised" "^7.1.1" - "chalk" "^2.4.2" - "deep-eql" "^4.0.1" - "ordinal" "^1.0.3" + chai-as-promised "^7.1.1" + chalk "^2.4.2" + deep-eql "^4.0.1" + ordinal "^1.0.3" -"@nomicfoundation/hardhat-network-helpers@^1.0.0", "@nomicfoundation/hardhat-network-helpers@^1.0.6": - "integrity" "sha512-a35iVD4ycF6AoTfllAnKm96IPIzzHpgKX/ep4oKc2bsUKFfMlacWdyntgC/7d5blyCTXfFssgNAvXDZfzNWVGQ==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.6.tgz" - "version" "1.0.6" +"@nomicfoundation/hardhat-network-helpers@^1.0.6": + version "1.0.6" + resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.6.tgz" + integrity sha512-a35iVD4ycF6AoTfllAnKm96IPIzzHpgKX/ep4oKc2bsUKFfMlacWdyntgC/7d5blyCTXfFssgNAvXDZfzNWVGQ== dependencies: - "ethereumjs-util" "^7.1.4" + ethereumjs-util "^7.1.4" "@nomicfoundation/hardhat-toolbox@^1.0.2": - "integrity" "sha512-8CEgWSKUK2aMit+76Sez8n7UB0Ze1lwT+LcWxj4EFP30lQWOwOws048t6MTPfThH0BlSWjC6hJRr0LncIkc1Sw==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-1.0.2.tgz" - "version" "1.0.2" + version "1.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-1.0.2.tgz" + integrity sha512-8CEgWSKUK2aMit+76Sez8n7UB0Ze1lwT+LcWxj4EFP30lQWOwOws048t6MTPfThH0BlSWjC6hJRr0LncIkc1Sw== "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.0": - "integrity" "sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz" - "version" "0.1.0" + version "0.1.0" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz" + integrity sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz#1225f7da647ae1ad25a87125664704ecc0af6ccc" + integrity sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.0.tgz#dbc052dcdfd50ae50fd5ae1788b69b4e0fa40040" + integrity sha512-WFCZYMv86WowDA4GiJKnebMQRt3kCcFqHeIomW6NMyqiKqhK1kIZCxSLDYsxqlx396kKLPN1713Q1S8tu68GKg== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.0.tgz#e6b2eea633995b557e74e881d2a43eab4760903d" + integrity sha512-DTw6MNQWWlCgc71Pq7CEhEqkb7fZnS7oly13pujs4cMH1sR0JzNk90Mp1zpSCsCs4oKan2ClhMlLKtNat/XRKQ== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.0.tgz#af81107f5afa794f19988a368647727806e18dc4" + integrity sha512-wUpUnR/3GV5Da88MhrxXh/lhb9kxh9V3Jya2NpBEhKDIRCDmtXMSqPMXHZmOR9DfCwCvG6vLFPr/+YrPCnUN0w== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz#6877e1da1a06a9f08446070ab6e0a5347109f868" + integrity sha512-lR0AxK1x/MeKQ/3Pt923kPvwigmGX3OxeU5qNtQ9pj9iucgk4PzhbS3ruUeSpYhUxG50jN4RkIGwUMoev5lguw== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.0.tgz#bb6cd83a0c259eccef4183796b6329a66cf7ebd9" + integrity sha512-A1he/8gy/JeBD3FKvmI6WUJrGrI5uWJNr5Xb9WdV+DK0F8msuOqpEByLlnTdLkXMwW7nSl3awvLezOs9xBHJEg== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.0.tgz#9d4bca1cc9a1333fde985675083b0b7d165f6076" + integrity sha512-7x5SXZ9R9H4SluJZZP8XPN+ju7Mx+XeUMWZw7ZAqkdhP5mK19I4vz3x0zIWygmfE8RT7uQ5xMap0/9NPsO+ykw== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.0.tgz#0db5bfc6aa952bea4098d8d2c8947b4e5c4337ee" + integrity sha512-m7w3xf+hnE774YRXu+2mGV7RiF3QJtUoiYU61FascCkQhX3QMQavh7saH/vzb2jN5D24nT/jwvaHYX/MAM9zUw== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.0.tgz#2e0f39a2924dcd77db6b419828595e984fabcb33" + integrity sha512-xCuybjY0sLJQnJhupiFAXaek2EqF0AP0eBjgzaalPXSNvCEN6ZYHvUzdA50ENDVeSYFXcUsYf3+FsD3XKaeptA== "@nomicfoundation/solidity-analyzer@^0.1.0": - "integrity" "sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz" - "version" "0.1.0" + version "0.1.0" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz" + integrity sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg== optionalDependencies: "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.0" "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.0" @@ -2155,42 +2088,42 @@ "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.0" "@nomiclabs/hardhat-ethers@^2.0.0", "@nomiclabs/hardhat-ethers@^2.1.0": - "integrity" "sha512-RHWYwnxryWR8hzRmU4Jm/q4gzvXpetUOJ4OPlwH2YARcDB+j79+yAYCwO0lN1SUOb4++oOTJEe6AWLEc42LIvg==" - "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.1.tgz" - "version" "2.2.1" + version "2.2.1" + resolved "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.1.tgz" + integrity sha512-RHWYwnxryWR8hzRmU4Jm/q4gzvXpetUOJ4OPlwH2YARcDB+j79+yAYCwO0lN1SUOb4++oOTJEe6AWLEc42LIvg== -"@nomiclabs/hardhat-etherscan@^2.1.6", "@nomiclabs/hardhat-etherscan@^3.0.0": - "integrity" "sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA==" - "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz" - "version" "2.1.8" +"@nomiclabs/hardhat-etherscan@^2.1.6": + version "2.1.8" + resolved "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz" + integrity sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA== dependencies: "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" - "cbor" "^5.0.2" - "debug" "^4.1.1" - "fs-extra" "^7.0.1" - "node-fetch" "^2.6.0" - "semver" "^6.3.0" + cbor "^5.0.2" + debug "^4.1.1" + fs-extra "^7.0.1" + node-fetch "^2.6.0" + semver "^6.3.0" "@nomiclabs/hardhat-waffle@^2.0.3": - "integrity" "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==" - "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz" - "version" "2.0.3" + version "2.0.3" + resolved "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz" + integrity sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg== dependencies: "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" "@nomiclabs/hardhat-web3@^2.0.0": - "integrity" "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==" - "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz" - "version" "2.0.0" + version "2.0.0" + resolved "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz" + integrity sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q== dependencies: "@types/bignumber.js" "^5.0.0" "@npmcli/arborist@5.3.0": - "integrity" "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==" - "resolved" "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz" - "version" "5.3.0" + version "5.3.0" + resolved "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz" + integrity sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A== dependencies: "@isaacs/string-locale-compare" "^1.1.0" "@npmcli/installed-package-contents" "^1.0.7" @@ -2201,244 +2134,258 @@ "@npmcli/node-gyp" "^2.0.0" "@npmcli/package-json" "^2.0.0" "@npmcli/run-script" "^4.1.3" - "bin-links" "^3.0.0" - "cacache" "^16.0.6" - "common-ancestor-path" "^1.0.1" - "json-parse-even-better-errors" "^2.3.1" - "json-stringify-nice" "^1.1.4" - "mkdirp" "^1.0.4" - "mkdirp-infer-owner" "^2.0.0" - "nopt" "^5.0.0" - "npm-install-checks" "^5.0.0" - "npm-package-arg" "^9.0.0" - "npm-pick-manifest" "^7.0.0" - "npm-registry-fetch" "^13.0.0" - "npmlog" "^6.0.2" - "pacote" "^13.6.1" - "parse-conflict-json" "^2.0.1" - "proc-log" "^2.0.0" - "promise-all-reject-late" "^1.0.0" - "promise-call-limit" "^1.0.1" - "read-package-json-fast" "^2.0.2" - "readdir-scoped-modules" "^1.1.0" - "rimraf" "^3.0.2" - "semver" "^7.3.7" - "ssri" "^9.0.0" - "treeverse" "^2.0.0" - "walk-up-path" "^1.0.0" + bin-links "^3.0.0" + cacache "^16.0.6" + common-ancestor-path "^1.0.1" + json-parse-even-better-errors "^2.3.1" + json-stringify-nice "^1.1.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + nopt "^5.0.0" + npm-install-checks "^5.0.0" + npm-package-arg "^9.0.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.0" + npmlog "^6.0.2" + pacote "^13.6.1" + parse-conflict-json "^2.0.1" + proc-log "^2.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^1.0.1" + read-package-json-fast "^2.0.2" + readdir-scoped-modules "^1.1.0" + rimraf "^3.0.2" + semver "^7.3.7" + ssri "^9.0.0" + treeverse "^2.0.0" + walk-up-path "^1.0.0" "@npmcli/fs@^2.1.0": - "integrity" "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==" - "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" - "version" "2.1.2" + version "2.1.2" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== dependencies: "@gar/promisify" "^1.1.3" - "semver" "^7.3.5" + semver "^7.3.5" "@npmcli/git@^3.0.0": - "integrity" "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==" - "resolved" "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz" - "version" "3.0.2" + version "3.0.2" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz" + integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== dependencies: "@npmcli/promise-spawn" "^3.0.0" - "lru-cache" "^7.4.4" - "mkdirp" "^1.0.4" - "npm-pick-manifest" "^7.0.0" - "proc-log" "^2.0.0" - "promise-inflight" "^1.0.1" - "promise-retry" "^2.0.1" - "semver" "^7.3.5" - "which" "^2.0.2" + lru-cache "^7.4.4" + mkdirp "^1.0.4" + npm-pick-manifest "^7.0.0" + proc-log "^2.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^2.0.2" "@npmcli/installed-package-contents@^1.0.7": - "integrity" "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==" - "resolved" "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz" - "version" "1.0.7" + version "1.0.7" + resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz" + integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== dependencies: - "npm-bundled" "^1.1.1" - "npm-normalize-package-bin" "^1.0.1" + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" "@npmcli/map-workspaces@^2.0.3": - "integrity" "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==" - "resolved" "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz" - "version" "2.0.4" + version "2.0.4" + resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz" + integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== dependencies: "@npmcli/name-from-folder" "^1.0.1" - "glob" "^8.0.1" - "minimatch" "^5.0.1" - "read-package-json-fast" "^2.0.3" + glob "^8.0.1" + minimatch "^5.0.1" + read-package-json-fast "^2.0.3" "@npmcli/metavuln-calculator@^3.0.1": - "integrity" "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==" - "resolved" "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz" - "version" "3.1.1" + version "3.1.1" + resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz" + integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== dependencies: - "cacache" "^16.0.0" - "json-parse-even-better-errors" "^2.3.1" - "pacote" "^13.0.3" - "semver" "^7.3.5" + cacache "^16.0.0" + json-parse-even-better-errors "^2.3.1" + pacote "^13.0.3" + semver "^7.3.5" "@npmcli/move-file@^2.0.0": - "integrity" "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==" - "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" - "version" "2.0.1" + version "2.0.1" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== dependencies: - "mkdirp" "^1.0.4" - "rimraf" "^3.0.2" + mkdirp "^1.0.4" + rimraf "^3.0.2" "@npmcli/name-from-folder@^1.0.1": - "integrity" "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==" - "resolved" "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz" - "version" "1.0.1" + version "1.0.1" + resolved "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz" + integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== "@npmcli/node-gyp@^2.0.0": - "integrity" "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==" - "resolved" "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz" - "version" "2.0.0" + version "2.0.0" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz" + integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== "@npmcli/package-json@^2.0.0": - "integrity" "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==" - "resolved" "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz" - "version" "2.0.0" + version "2.0.0" + resolved "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz" + integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== dependencies: - "json-parse-even-better-errors" "^2.3.1" + json-parse-even-better-errors "^2.3.1" "@npmcli/promise-spawn@^3.0.0": - "integrity" "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==" - "resolved" "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz" - "version" "3.0.0" + version "3.0.0" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz" + integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== dependencies: - "infer-owner" "^1.0.4" + infer-owner "^1.0.4" "@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.1.7": - "integrity" "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==" - "resolved" "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz" - "version" "4.2.1" + version "4.2.1" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz" + integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== dependencies: "@npmcli/node-gyp" "^2.0.0" "@npmcli/promise-spawn" "^3.0.0" - "node-gyp" "^9.0.0" - "read-package-json-fast" "^2.0.3" - "which" "^2.0.2" + node-gyp "^9.0.0" + read-package-json-fast "^2.0.3" + which "^2.0.2" "@nrwl/cli@15.0.3": - "integrity" "sha512-d023UTOWn9b37QtSMMmeBht5TH4oY8GkdC264I9BNrpvu3KNh6cDjhe0xas3d0zaOcR8Bn1LD5obPR3WOo/UUQ==" - "resolved" "https://registry.npmjs.org/@nrwl/cli/-/cli-15.0.3.tgz" - "version" "15.0.3" + version "15.0.3" + resolved "https://registry.npmjs.org/@nrwl/cli/-/cli-15.0.3.tgz" + integrity sha512-d023UTOWn9b37QtSMMmeBht5TH4oY8GkdC264I9BNrpvu3KNh6cDjhe0xas3d0zaOcR8Bn1LD5obPR3WOo/UUQ== + dependencies: + nx "15.0.3" + +"@nrwl/cli@15.0.4": + version "15.0.4" + resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-15.0.4.tgz#a10da4912d525c4ebc14d3a19810c7e5f09d0ac0" + integrity sha512-H3lni8iXUOzWTg1nH4YqOYxpyDz8Bq1Y30bb26r5yRlhdwsNtDBCZCaJQim8yCqYXYJVbxQnU4Ree2WR8xSg/g== dependencies: - "nx" "15.0.3" + nx "15.0.4" "@nrwl/devkit@>=14.8.1 < 16": - "integrity" "sha512-upFIXsIcI2nmsxOLK2YDZTmzmBKUVrBDA4pM9lkDmxe/N920e/rZnEpSwjoOYCQAJUWDgcrVOeFuMiUyTqe6Og==" - "resolved" "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.0.3.tgz" - "version" "15.0.3" + version "15.0.3" + resolved "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.0.3.tgz" + integrity sha512-upFIXsIcI2nmsxOLK2YDZTmzmBKUVrBDA4pM9lkDmxe/N920e/rZnEpSwjoOYCQAJUWDgcrVOeFuMiUyTqe6Og== dependencies: "@phenomnomnominal/tsquery" "4.1.1" - "ejs" "^3.1.7" - "ignore" "^5.0.4" - "semver" "7.3.4" - "tslib" "^2.3.0" + ejs "^3.1.7" + ignore "^5.0.4" + semver "7.3.4" + tslib "^2.3.0" "@nrwl/tao@15.0.3": - "integrity" "sha512-4vxWMgb9XauVVKdytqh3razAl60u4M6526E5FYQCkC+OImwGA5Zpms0earYOwLh3XzSnTiooMT6XR9s06lTkHw==" - "resolved" "https://registry.npmjs.org/@nrwl/tao/-/tao-15.0.3.tgz" - "version" "15.0.3" + version "15.0.3" + resolved "https://registry.npmjs.org/@nrwl/tao/-/tao-15.0.3.tgz" + integrity sha512-4vxWMgb9XauVVKdytqh3razAl60u4M6526E5FYQCkC+OImwGA5Zpms0earYOwLh3XzSnTiooMT6XR9s06lTkHw== + dependencies: + nx "15.0.3" + +"@nrwl/tao@15.0.4": + version "15.0.4" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-15.0.4.tgz#193bf740bd1811d8506de79ce34a70086705b028" + integrity sha512-hBmHI6Zlq/bAyeF+SPa9EJdWEFGAAUB+puz2jQfPWcyvTBTYDwqimLNJCaj8uy+aXBmrRCjmfNSBvgNxRiA0Sg== dependencies: - "nx" "15.0.3" + nx "15.0.4" "@octokit/auth-token@^3.0.0": - "integrity" "sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==" - "resolved" "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz" - "version" "3.0.2" + version "3.0.2" + resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz" + integrity sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q== dependencies: "@octokit/types" "^8.0.0" -"@octokit/core@^4.1.0", "@octokit/core@>=3", "@octokit/core@>=4": - "integrity" "sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ==" - "resolved" "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz" - "version" "4.1.0" +"@octokit/core@^4.1.0": + version "4.1.0" + resolved "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz" + integrity sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ== dependencies: "@octokit/auth-token" "^3.0.0" "@octokit/graphql" "^5.0.0" "@octokit/request" "^6.0.0" "@octokit/request-error" "^3.0.0" "@octokit/types" "^8.0.0" - "before-after-hook" "^2.2.0" - "universal-user-agent" "^6.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" "@octokit/endpoint@^7.0.0": - "integrity" "sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw==" - "resolved" "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.3.tgz" - "version" "7.0.3" + version "7.0.3" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.3.tgz" + integrity sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw== dependencies: "@octokit/types" "^8.0.0" - "is-plain-object" "^5.0.0" - "universal-user-agent" "^6.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" "@octokit/graphql@^5.0.0": - "integrity" "sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A==" - "resolved" "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.4.tgz" - "version" "5.0.4" + version "5.0.4" + resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.4.tgz" + integrity sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A== dependencies: "@octokit/request" "^6.0.0" "@octokit/types" "^8.0.0" - "universal-user-agent" "^6.0.0" + universal-user-agent "^6.0.0" "@octokit/openapi-types@^14.0.0": - "integrity" "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" - "resolved" "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz" - "version" "14.0.0" + version "14.0.0" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz" + integrity sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw== "@octokit/plugin-enterprise-rest@^6.0.1": - "integrity" "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz" - "version" "6.0.1" + version "6.0.1" + resolved "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== "@octokit/plugin-paginate-rest@^5.0.0": - "integrity" "sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz" - "version" "5.0.1" + version "5.0.1" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz" + integrity sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw== dependencies: "@octokit/types" "^8.0.0" "@octokit/plugin-request-log@^1.0.4": - "integrity" "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" - "version" "1.0.4" + version "1.0.4" + resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== "@octokit/plugin-rest-endpoint-methods@^6.7.0": - "integrity" "sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz" - "version" "6.7.0" + version "6.7.0" + resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz" + integrity sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw== dependencies: "@octokit/types" "^8.0.0" - "deprecation" "^2.3.1" + deprecation "^2.3.1" "@octokit/request-error@^3.0.0": - "integrity" "sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg==" - "resolved" "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz" - "version" "3.0.2" + version "3.0.2" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz" + integrity sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg== dependencies: "@octokit/types" "^8.0.0" - "deprecation" "^2.0.0" - "once" "^1.4.0" + deprecation "^2.0.0" + once "^1.4.0" "@octokit/request@^6.0.0": - "integrity" "sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw==" - "resolved" "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz" - "version" "6.2.2" + version "6.2.2" + resolved "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz" + integrity sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw== dependencies: "@octokit/endpoint" "^7.0.0" "@octokit/request-error" "^3.0.0" "@octokit/types" "^8.0.0" - "is-plain-object" "^5.0.0" - "node-fetch" "^2.6.7" - "universal-user-agent" "^6.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" "@octokit/rest@^19.0.3": - "integrity" "sha512-+4qdrUFq2lk7Va+Qff3ofREQWGBeoTKNqlJO+FGjFP35ZahP+nBenhZiGdu8USSgmq4Ky3IJ/i4u0xbLqHaeow==" - "resolved" "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.5.tgz" - "version" "19.0.5" + version "19.0.5" + resolved "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.5.tgz" + integrity sha512-+4qdrUFq2lk7Va+Qff3ofREQWGBeoTKNqlJO+FGjFP35ZahP+nBenhZiGdu8USSgmq4Ky3IJ/i4u0xbLqHaeow== dependencies: "@octokit/core" "^4.1.0" "@octokit/plugin-paginate-rest" "^5.0.0" @@ -2446,337 +2393,400 @@ "@octokit/plugin-rest-endpoint-methods" "^6.7.0" "@octokit/types@^8.0.0": - "integrity" "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==" - "resolved" "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz" - "version" "8.0.0" + version "8.0.0" + resolved "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz" + integrity sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg== dependencies: "@octokit/openapi-types" "^14.0.0" "@openzeppelin/contracts-upgradeable@^4.7.3": - "integrity" "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" - "resolved" "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz" - "version" "4.7.3" + version "4.7.3" + resolved "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz" + integrity sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A== "@openzeppelin/contracts@^4.2.0", "@openzeppelin/contracts@^4.6.0", "@openzeppelin/contracts@^4.7.3": - "integrity" "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" - "resolved" "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz" - "version" "4.7.3" + version "4.7.3" + resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz" + integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== "@parcel/watcher@2.0.4": - "integrity" "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==" - "resolved" "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz" - "version" "2.0.4" + version "2.0.4" + resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz" + integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== dependencies: - "node-addon-api" "^3.2.1" - "node-gyp-build" "^4.3.0" + node-addon-api "^3.2.1" + node-gyp-build "^4.3.0" "@phenomnomnominal/tsquery@4.1.1": - "integrity" "sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ==" - "resolved" "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "esquery" "^1.0.1" + version "4.1.1" + resolved "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-4.1.1.tgz" + integrity sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ== + dependencies: + esquery "^1.0.1" + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== "@scure/base@~1.1.0": - "integrity" "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" - "resolved" "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" - "version" "1.1.1" + version "1.1.1" + resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" + integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== "@scure/bip32@1.1.0": - "integrity" "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==" - "resolved" "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz" - "version" "1.1.0" + version "1.1.0" + resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz" + integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== dependencies: "@noble/hashes" "~1.1.1" "@noble/secp256k1" "~1.6.0" "@scure/base" "~1.1.0" "@scure/bip39@1.1.0": - "integrity" "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==" - "resolved" "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz" - "version" "1.1.0" + version "1.1.0" + resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz" + integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== dependencies: "@noble/hashes" "~1.1.1" "@scure/base" "~1.1.0" "@sentry/core@5.30.0": - "integrity" "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==" - "resolved" "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz" - "version" "5.30.0" + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== dependencies: "@sentry/hub" "5.30.0" "@sentry/minimal" "5.30.0" "@sentry/types" "5.30.0" "@sentry/utils" "5.30.0" - "tslib" "^1.9.3" + tslib "^1.9.3" "@sentry/hub@5.30.0": - "integrity" "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==" - "resolved" "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz" - "version" "5.30.0" + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== dependencies: "@sentry/types" "5.30.0" "@sentry/utils" "5.30.0" - "tslib" "^1.9.3" + tslib "^1.9.3" "@sentry/minimal@5.30.0": - "integrity" "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==" - "resolved" "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz" - "version" "5.30.0" + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== dependencies: "@sentry/hub" "5.30.0" "@sentry/types" "5.30.0" - "tslib" "^1.9.3" + tslib "^1.9.3" "@sentry/node@^5.18.1": - "integrity" "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==" - "resolved" "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz" - "version" "5.30.0" + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== dependencies: "@sentry/core" "5.30.0" "@sentry/hub" "5.30.0" "@sentry/tracing" "5.30.0" "@sentry/types" "5.30.0" "@sentry/utils" "5.30.0" - "cookie" "^0.4.1" - "https-proxy-agent" "^5.0.0" - "lru_map" "^0.3.3" - "tslib" "^1.9.3" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" "@sentry/tracing@5.30.0": - "integrity" "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==" - "resolved" "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz" - "version" "5.30.0" + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== dependencies: "@sentry/hub" "5.30.0" "@sentry/minimal" "5.30.0" "@sentry/types" "5.30.0" "@sentry/utils" "5.30.0" - "tslib" "^1.9.3" + tslib "^1.9.3" -"@sentry/types@^7.x", "@sentry/types@5.30.0": - "integrity" "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" - "resolved" "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" - "version" "5.30.0" +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== "@sentry/utils@5.30.0": - "integrity" "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==" - "resolved" "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz" - "version" "5.30.0" + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== dependencies: "@sentry/types" "5.30.0" - "tslib" "^1.9.3" + tslib "^1.9.3" "@sinclair/typebox@^0.24.1": - "integrity" "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" - "version" "0.24.51" + version "0.24.51" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" + integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== "@sindresorhus/is@^0.14.0": - "integrity" "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" - "version" "0.14.0" + version "0.14.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== "@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": - "integrity" "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" - "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" - "version" "4.6.0" + version "4.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== "@sinonjs/commons@^1.7.0": - "integrity" "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==" - "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" - "version" "1.8.3" + version "1.8.3" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== dependencies: - "type-detect" "4.0.8" + type-detect "4.0.8" "@sinonjs/fake-timers@^9.1.2": - "integrity" "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==" - "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" - "version" "9.1.2" + version "9.1.2" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== dependencies: "@sinonjs/commons" "^1.7.0" "@solidity-parser/parser@^0.14.0": - "integrity" "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==" - "resolved" "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz" - "version" "0.14.5" + version "0.14.5" + resolved "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz" + integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== dependencies: - "antlr4ts" "^0.5.0-alpha.4" + antlr4ts "^0.5.0-alpha.4" "@szmarczak/http-timer@^1.1.2": - "integrity" "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==" - "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" - "version" "1.1.2" + version "1.1.2" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== dependencies: - "defer-to-connect" "^1.0.1" + defer-to-connect "^1.0.1" "@szmarczak/http-timer@^4.0.5": - "integrity" "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==" - "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" - "version" "4.0.6" + version "4.0.6" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== dependencies: - "defer-to-connect" "^2.0.0" + defer-to-connect "^2.0.0" "@szmarczak/http-timer@^5.0.1": - "integrity" "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==" - "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" - "version" "5.0.1" + version "5.0.1" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== dependencies: - "defer-to-connect" "^2.0.1" + defer-to-connect "^2.0.1" "@tootallnate/once@2": - "integrity" "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" - "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" - "version" "2.0.0" + version "2.0.0" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@toruslabs/http-helpers@^3.2.0": - "integrity" "sha512-fCfvBHfYzd7AyOYlBo7wihh5nj6+4Ik6V5+nI7H63oiKICjMlByTXSauTUa/qm2mjZJn/OmVYeV5guPIgxoW1w==" - "resolved" "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-3.2.0.tgz" - "version" "3.2.0" + version "3.2.0" + resolved "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-3.2.0.tgz" + integrity sha512-fCfvBHfYzd7AyOYlBo7wihh5nj6+4Ik6V5+nI7H63oiKICjMlByTXSauTUa/qm2mjZJn/OmVYeV5guPIgxoW1w== dependencies: - "lodash.merge" "^4.6.2" - "loglevel" "^1.8.0" + lodash.merge "^4.6.2" + loglevel "^1.8.0" "@toruslabs/openlogin-jrpc@^2.6.0": - "integrity" "sha512-hX2b1HSBvC6jSVlXuhgdH8qyE83cj6SEiHjQ5VsHfRUv15wBgzj+x2Yjw5pjvbrnYXzUlFvFySs10EU7na1cuA==" - "resolved" "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-2.6.0.tgz" - "version" "2.6.0" + version "2.6.0" + resolved "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-2.6.0.tgz" + integrity sha512-hX2b1HSBvC6jSVlXuhgdH8qyE83cj6SEiHjQ5VsHfRUv15wBgzj+x2Yjw5pjvbrnYXzUlFvFySs10EU7na1cuA== dependencies: "@toruslabs/openlogin-utils" "^2.1.0" - "end-of-stream" "^1.4.4" - "eth-rpc-errors" "^4.0.3" - "events" "^3.3.0" - "fast-safe-stringify" "^2.1.1" - "once" "^1.4.0" - "pump" "^3.0.0" - "readable-stream" "^3.6.0" + end-of-stream "^1.4.4" + eth-rpc-errors "^4.0.3" + events "^3.3.0" + fast-safe-stringify "^2.1.1" + once "^1.4.0" + pump "^3.0.0" + readable-stream "^3.6.0" "@toruslabs/openlogin-utils@^2.1.0": - "integrity" "sha512-UVgjco4winOn4Gj0VRTvjSZgBA84h2OIkKuxrBFjS+yWhgxQBF4hXGp83uicSgx1MujtjyUOdhJrpV2joRHt9w==" - "resolved" "https://registry.npmjs.org/@toruslabs/openlogin-utils/-/openlogin-utils-2.1.0.tgz" - "version" "2.1.0" + version "2.1.0" + resolved "https://registry.npmjs.org/@toruslabs/openlogin-utils/-/openlogin-utils-2.1.0.tgz" + integrity sha512-UVgjco4winOn4Gj0VRTvjSZgBA84h2OIkKuxrBFjS+yWhgxQBF4hXGp83uicSgx1MujtjyUOdhJrpV2joRHt9w== dependencies: - "base64url" "^3.0.1" - "keccak" "^3.0.2" - "randombytes" "^2.1.0" + base64url "^3.0.1" + keccak "^3.0.2" + randombytes "^2.1.0" "@toruslabs/torus-embed@^1.36.2": - "integrity" "sha512-QiagGXQJhRGBkBcDRX3VmBaF8k5U69LSMJqhAJ6zrCXOQpNWZkOXZigHO1nwyBjtWNmfx3dxkSeXHG9qMaZH8A==" - "resolved" "https://registry.npmjs.org/@toruslabs/torus-embed/-/torus-embed-1.36.6.tgz" - "version" "1.36.6" + version "1.36.6" + resolved "https://registry.npmjs.org/@toruslabs/torus-embed/-/torus-embed-1.36.6.tgz" + integrity sha512-QiagGXQJhRGBkBcDRX3VmBaF8k5U69LSMJqhAJ6zrCXOQpNWZkOXZigHO1nwyBjtWNmfx3dxkSeXHG9qMaZH8A== dependencies: "@metamask/obs-store" "^7.0.0" "@toruslabs/http-helpers" "^3.2.0" "@toruslabs/openlogin-jrpc" "^2.6.0" - "create-hash" "^1.2.0" - "end-of-stream" "^1.4.4" - "eth-rpc-errors" "^4.0.3" - "events" "^3.3.0" - "fast-deep-equal" "^3.1.3" - "is-stream" "^2.0.1" - "lodash.merge" "^4.6.2" - "loglevel" "^1.8.0" - "once" "^1.4.0" - "pump" "^3.0.0" + create-hash "^1.2.0" + end-of-stream "^1.4.4" + eth-rpc-errors "^4.0.3" + events "^3.3.0" + fast-deep-equal "^3.1.3" + is-stream "^2.0.1" + lodash.merge "^4.6.2" + loglevel "^1.8.0" + once "^1.4.0" + pump "^3.0.0" "@truffle/error@^0.1.1": - "integrity" "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==" - "resolved" "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz" - "version" "0.1.1" + version "0.1.1" + resolved "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz" + integrity sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA== "@truffle/hdwallet-provider@latest": - "version" "2.1.0" + version "2.1.0" + resolved "https://registry.yarnpkg.com/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.0.tgz#ee7b543e6061203d46b210ae34f97500c3f7d3bd" + integrity sha512-I4VlMJsYYwUCkMFWaEuTE3MhI5k7qKwYQj+axMKeoZDWVLtZ6QbkWynUrVdmwELQ+wFSyNzvsBj7F2Sqb0S0/Q== dependencies: "@ethereumjs/common" "^2.4.0" "@ethereumjs/tx" "^3.3.0" "@metamask/eth-sig-util" "4.0.1" "@truffle/hdwallet" "^0.1.0" "@types/web3" "^1.0.20" - "ethereum-cryptography" "1.1.2" - "ethereum-protocol" "^1.0.1" - "ethereumjs-util" "^7.1.5" - "web3" "1.7.4" - "web3-provider-engine" "16.0.3" + ethereum-cryptography "1.1.2" + ethereum-protocol "^1.0.1" + ethereumjs-util "^7.1.5" + web3 "1.7.4" + web3-provider-engine "16.0.3" "@truffle/hdwallet@^0.1.0": - "integrity" "sha512-tRqx7Kn5SbQoe56S5pWrIN3/aM9YMK2bFR8iD5gHGv6uXHRCL7b+PkeI1gyKk09SRWkY11YjRw+Up/V0x6tw6A==" - "resolved" "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.0.tgz" - "version" "0.1.0" + version "0.1.0" + resolved "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.0.tgz" + integrity sha512-tRqx7Kn5SbQoe56S5pWrIN3/aM9YMK2bFR8iD5gHGv6uXHRCL7b+PkeI1gyKk09SRWkY11YjRw+Up/V0x6tw6A== dependencies: - "ethereum-cryptography" "1.1.2" - "keccak" "3.0.2" - "secp256k1" "4.0.3" + ethereum-cryptography "1.1.2" + keccak "3.0.2" + secp256k1 "4.0.3" "@truffle/interface-adapter@^0.5.23": - "integrity" "sha512-nU8kChKgcUP+tELId1PMgHnmd2KcBdBer59TxfVqAZXRmt6blm2tpBbGYtKzTIdZlf6kMqVbZXdB6u1CJDqfxg==" - "resolved" "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.23.tgz" - "version" "0.5.23" + version "0.5.23" + resolved "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.23.tgz" + integrity sha512-nU8kChKgcUP+tELId1PMgHnmd2KcBdBer59TxfVqAZXRmt6blm2tpBbGYtKzTIdZlf6kMqVbZXdB6u1CJDqfxg== dependencies: - "bn.js" "^5.1.3" - "ethers" "^4.0.32" - "web3" "1.7.4" + bn.js "^5.1.3" + ethers "^4.0.32" + web3 "1.7.4" "@truffle/provider@^0.2.24": - "integrity" "sha512-MxfUkt+fUO66F1u4wjYu7j8ZZxkodnOALII4CUTd55rTHd0mw0rRtVtYiNAaK+WDljqHb55bc6ecE45ioeTnqA==" - "resolved" "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.62.tgz" - "version" "0.2.62" + version "0.2.62" + resolved "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.62.tgz" + integrity sha512-MxfUkt+fUO66F1u4wjYu7j8ZZxkodnOALII4CUTd55rTHd0mw0rRtVtYiNAaK+WDljqHb55bc6ecE45ioeTnqA== dependencies: "@truffle/error" "^0.1.1" "@truffle/interface-adapter" "^0.5.23" - "debug" "^4.3.1" - "web3" "1.7.4" + debug "^4.3.1" + web3 "1.7.4" "@trufflesuite/bigint-buffer@1.1.10": - "integrity" "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==" - "resolved" "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz" - "version" "1.1.10" + version "1.1.10" + resolved "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz" + integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== dependencies: - "node-gyp-build" "4.4.0" + node-gyp-build "4.4.0" "@tsconfig/node10@^1.0.7": - "integrity" "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - "resolved" "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" - "version" "1.0.9" + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": - "integrity" "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - "resolved" "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" - "version" "1.0.11" + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": - "integrity" "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - "resolved" "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" - "version" "1.0.3" + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": - "integrity" "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" - "resolved" "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" - "version" "1.0.3" + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== -"@typechain/ethers-v5@^10.1.0", "@typechain/ethers-v5@^9.0.0": - "integrity" "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==" - "resolved" "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz" - "version" "9.0.0" +"@typechain/ethers-v5@^9.0.0": + version "9.0.0" + resolved "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz" + integrity sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ== dependencies: - "lodash" "^4.17.15" - "ts-essentials" "^7.0.1" + lodash "^4.17.15" + ts-essentials "^7.0.1" -"@typechain/hardhat@^2.3.0", "@typechain/hardhat@^6.1.2": - "integrity" "sha512-BQV8OKQi0KAzLXCdsPO0pZBNQQ6ra8A2ucC26uFX/kquRBtJu1yEyWnVSmtr07b5hyRoJRpzUeINLnyqz4/MAw==" - "resolved" "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-2.3.1.tgz" - "version" "2.3.1" +"@typechain/hardhat@^2.3.0": + version "2.3.1" + resolved "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-2.3.1.tgz" + integrity sha512-BQV8OKQi0KAzLXCdsPO0pZBNQQ6ra8A2ucC26uFX/kquRBtJu1yEyWnVSmtr07b5hyRoJRpzUeINLnyqz4/MAw== dependencies: - "fs-extra" "^9.1.0" + fs-extra "^9.1.0" + +"@types/amqplib@^0.8.2": + version "0.8.2" + resolved "https://registry.yarnpkg.com/@types/amqplib/-/amqplib-0.8.2.tgz#9c46f2c7fac381e4f81bcb612c00d54549697d22" + integrity sha512-p+TFLzo52f8UanB+Nq6gyUi65yecAcRY3nYowU6MPGFtaJvEDxcnFWrxssSTkF+ts1W3zyQDvgVICLQem5WxRA== + dependencies: + "@types/bluebird" "*" + "@types/node" "*" "@types/async-eventemitter@^0.2.1": - "integrity" "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==" - "resolved" "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz" - "version" "0.2.1" + version "0.2.1" + resolved "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz" + integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== "@types/babel__core@^7.1.14": - "integrity" "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==" - "resolved" "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" - "version" "7.1.19" + version "7.1.19" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -2785,52 +2795,57 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - "integrity" "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==" - "resolved" "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" - "version" "7.6.4" + version "7.6.4" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - "integrity" "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==" - "resolved" "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" - "version" "7.4.1" + version "7.4.1" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - "integrity" "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==" - "resolved" "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz" - "version" "7.18.2" + version "7.18.2" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz" + integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg== dependencies: "@babel/types" "^7.3.0" "@types/bignumber.js@^5.0.0": - "integrity" "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==" - "resolved" "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz" - "version" "5.0.0" + version "5.0.0" + resolved "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz" + integrity sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA== dependencies: - "bignumber.js" "*" + bignumber.js "*" + +"@types/bluebird@*": + version "3.5.37" + resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.37.tgz#b99e5c7fe382c2c6d5252dc99d9fba6810fedbeb" + integrity sha512-g2qEd+zkfkTEudA2SrMAeAvY7CrFqtbsLILm2dT2VIeKTqMqVzcdfURlvu6FU3srRgbmXN1Srm94pg34EIehww== "@types/bn.js@*", "@types/bn.js@^5.1.0": - "integrity" "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==" - "resolved" "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz" - "version" "5.1.1" + version "5.1.1" + resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz" + integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== dependencies: "@types/node" "*" "@types/bn.js@^4.11.3": - "integrity" "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==" - "resolved" "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz" - "version" "4.11.6" + version "4.11.6" + resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== dependencies: "@types/node" "*" "@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": - "integrity" "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==" - "resolved" "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz" - "version" "6.0.2" + version "6.0.2" + resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz" + integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== dependencies: "@types/http-cache-semantics" "*" "@types/keyv" "*" @@ -2838,893 +2853,935 @@ "@types/responselike" "*" "@types/chai-as-promised@^7.1.3", "@types/chai-as-promised@^7.1.5": - "integrity" "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==" - "resolved" "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz" - "version" "7.1.5" + version "7.1.5" + resolved "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz" + integrity sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ== dependencies: "@types/chai" "*" -"@types/chai@*", "@types/chai@^4.2.0", "@types/chai@^4.3.0": - "integrity" "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" - "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz" - "version" "4.3.3" +"@types/chai@*", "@types/chai@^4.3.0": + version "4.3.3" + resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz" + integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g== "@types/concat-stream@^1.6.0": - "integrity" "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==" - "resolved" "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz" - "version" "1.6.1" + version "1.6.1" + resolved "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== dependencies: "@types/node" "*" "@types/form-data@0.0.33": - "integrity" "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==" - "resolved" "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz" - "version" "0.0.33" + version "0.0.33" + resolved "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz" + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== dependencies: "@types/node" "*" "@types/glob@^7.1.1": - "integrity" "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==" - "resolved" "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" - "version" "7.2.0" + version "7.2.0" + resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: "@types/minimatch" "*" "@types/node" "*" "@types/graceful-fs@^4.1.3": - "integrity" "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==" - "resolved" "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" - "version" "4.1.5" + version "4.1.5" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== dependencies: "@types/node" "*" "@types/http-cache-semantics@*": - "integrity" "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" - "resolved" "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" - "version" "4.0.1" + version "4.0.1" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - "integrity" "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" - "version" "2.0.4" + version "2.0.4" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": - "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==" - "resolved" "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - "version" "3.0.0" + version "3.0.0" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - "integrity" "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==" - "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" - "version" "3.0.1" + version "3.0.1" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: "@types/istanbul-lib-report" "*" "@types/jest@^28.1.7": - "integrity" "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==" - "resolved" "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz" - "version" "28.1.8" + version "28.1.8" + resolved "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz" + integrity sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw== dependencies: - "expect" "^28.0.0" - "pretty-format" "^28.0.0" + expect "^28.0.0" + pretty-format "^28.0.0" "@types/json-schema@^7.0.9": - "integrity" "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" - "version" "7.0.11" + version "7.0.11" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/json5@^0.0.29": - "integrity" "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - "resolved" "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" - "version" "0.0.29" + version "0.0.29" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/jsonwebtoken@^8.5.8": + version "8.5.9" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz#2c064ecb0b3128d837d2764aa0b117b0ff6e4586" + integrity sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg== + dependencies: + "@types/node" "*" "@types/keyv@*": - "integrity" "sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw==" - "resolved" "https://registry.npmjs.org/@types/keyv/-/keyv-4.2.0.tgz" - "version" "4.2.0" + version "4.2.0" + resolved "https://registry.npmjs.org/@types/keyv/-/keyv-4.2.0.tgz" + integrity sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw== dependencies: - "keyv" "*" + keyv "*" -"@types/lru-cache@^5.1.0": - "integrity" "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - "resolved" "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" - "version" "5.1.1" +"@types/long@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== -"@types/lru-cache@5.1.1": - "integrity" "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - "resolved" "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" - "version" "5.1.1" +"@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== "@types/minimatch@*": - "integrity" "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" - "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" - "version" "5.1.2" + version "5.1.2" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/minimatch@^3.0.3": - "integrity" "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" - "version" "3.0.5" + version "3.0.5" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/minimist@^1.2.0": - "integrity" "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" - "resolved" "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" - "version" "1.2.2" + version "1.2.2" + resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/mkdirp@^0.5.2": - "integrity" "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==" - "resolved" "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz" - "version" "0.5.2" + version "0.5.2" + resolved "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz" + integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== dependencies: "@types/node" "*" "@types/mocha@^9.0.0", "@types/mocha@^9.1.0", "@types/mocha@^9.1.1": - "integrity" "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" - "resolved" "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" - "version" "9.1.1" + version "9.1.1" + resolved "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" + integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== "@types/node-fetch@^2.6.2": - "integrity" "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==" - "resolved" "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz" - "version" "2.6.2" + version "2.6.2" + resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz" + integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== dependencies: "@types/node" "*" - "form-data" "^3.0.0" + form-data "^3.0.0" + +"@types/node@*": + version "18.11.7" + resolved "https://registry.npmjs.org/@types/node/-/node-18.11.7.tgz" + integrity sha512-LhFTglglr63mNXUSRYD8A+ZAIu5sFqNJ4Y2fPuY7UlrySJH87rRRlhtVmMHplmfk5WkoJGmDjE9oiTfyX94CpQ== -"@types/node@*", "@types/node@>=12.0.0": - "integrity" "sha512-LhFTglglr63mNXUSRYD8A+ZAIu5sFqNJ4Y2fPuY7UlrySJH87rRRlhtVmMHplmfk5WkoJGmDjE9oiTfyX94CpQ==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-18.11.7.tgz" - "version" "18.11.7" +"@types/node@>=13.7.0": + version "18.11.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.8.tgz#16d222a58d4363a2a359656dd20b28414de5d265" + integrity sha512-uGwPWlE0Hj972KkHtCDVwZ8O39GmyjfMane1Z3GUBGGnkZ2USDq7SxLpVIiIHpweY9DS0QTDH0Nw7RNBsAAZ5A== "@types/node@^10.0.3": - "integrity" "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" - "version" "10.17.60" + version "10.17.60" + resolved "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== "@types/node@^12.12.6": - "integrity" "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" - "version" "12.20.55" + version "12.20.55" + resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/node@^17.0.23": - "integrity" "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" - "version" "17.0.45" + version "17.0.45" + resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== "@types/node@^8.0.0": - "integrity" "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz" - "version" "8.10.66" + version "8.10.66" + resolved "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== "@types/normalize-package-data@^2.4.0": - "integrity" "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - "resolved" "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" - "version" "2.4.1" + version "2.4.1" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/parse-json@^4.0.0": - "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - "resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" - "version" "4.0.0" + version "4.0.0" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/pbkdf2@^3.0.0": - "integrity" "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==" - "resolved" "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz" - "version" "3.1.0" + version "3.1.0" + resolved "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== dependencies: "@types/node" "*" "@types/prettier@^2.1.1", "@types/prettier@^2.1.5": - "integrity" "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==" - "resolved" "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz" - "version" "2.7.1" + version "2.7.1" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz" + integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow== "@types/qs@^6.2.31", "@types/qs@^6.9.7": - "integrity" "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - "resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" - "version" "6.9.7" + version "6.9.7" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== "@types/resolve@^0.0.8": - "integrity" "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==" - "resolved" "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz" - "version" "0.0.8" + version "0.0.8" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== dependencies: "@types/node" "*" "@types/responselike@*", "@types/responselike@^1.0.0": - "integrity" "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==" - "resolved" "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" - "version" "1.0.0" + version "1.0.0" + resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== dependencies: "@types/node" "*" "@types/secp256k1@^4.0.1": - "integrity" "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==" - "resolved" "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz" - "version" "4.0.3" + version "4.0.3" + resolved "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== dependencies: "@types/node" "*" "@types/seedrandom@3.0.1": - "integrity" "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==" - "resolved" "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz" - "version" "3.0.1" + version "3.0.1" + resolved "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz" + integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== "@types/semver@^7.3.12": - "integrity" "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==" - "resolved" "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz" - "version" "7.3.13" + version "7.3.13" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== "@types/sinon-chai@^3.2.3": - "integrity" "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==" - "resolved" "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz" - "version" "3.2.8" + version "3.2.8" + resolved "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz" + integrity sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g== dependencies: "@types/chai" "*" "@types/sinon" "*" "@types/sinon@*": - "integrity" "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==" - "resolved" "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz" - "version" "10.0.13" + version "10.0.13" + resolved "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz" + integrity sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ== dependencies: "@types/sinonjs__fake-timers" "*" "@types/sinonjs__fake-timers@*": - "integrity" "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==" - "resolved" "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz" - "version" "8.1.2" + version "8.1.2" + resolved "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz" + integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== "@types/stack-utils@^2.0.0": - "integrity" "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" - "resolved" "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" - "version" "2.0.1" + version "2.0.1" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/underscore@*": - "integrity" "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==" - "resolved" "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz" - "version" "1.11.4" - -"@types/web3@^1.0.20": - "integrity" "sha512-eFiYJKggNrOl0nsD+9cMh2MLk4zVBfXfGnVeRFbpiZzBE20eet4KLA3fXcjSuHaBn0RnQzwLAGdgzgzdet4C0A==" - "resolved" "https://registry.npmjs.org/@types/web3/-/web3-1.2.2.tgz" - "version" "1.2.2" - dependencies: - "web3" "*" + version "1.11.4" + resolved "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz" + integrity sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg== "@types/web3@1.0.19": - "integrity" "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==" - "resolved" "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz" - "version" "1.0.19" + version "1.0.19" + resolved "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz" + integrity sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A== dependencies: "@types/bn.js" "*" "@types/underscore" "*" +"@types/web3@^1.0.20": + version "1.2.2" + resolved "https://registry.npmjs.org/@types/web3/-/web3-1.2.2.tgz" + integrity sha512-eFiYJKggNrOl0nsD+9cMh2MLk4zVBfXfGnVeRFbpiZzBE20eet4KLA3fXcjSuHaBn0RnQzwLAGdgzgzdet4C0A== + dependencies: + web3 "*" + +"@types/ws@^8.5.3": + version "8.5.3" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + "@types/yargs-parser@*": - "integrity" "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" - "version" "21.0.0" + version "21.0.0" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^17.0.8": - "integrity" "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==" - "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz" - "version" "17.0.13" + version "17.0.13" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz" + integrity sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.17.0": - "integrity" "sha512-DXUS22Y57/LAFSg3x7Vi6RNAuLpTXwxB9S2nIA7msBb/Zt8p7XqMwdpdc1IU7CkOQUPgAqR5fWvxuKCbneKGmA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.41.0.tgz" - "version" "5.41.0" + version "5.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.41.0.tgz" + integrity sha512-DXUS22Y57/LAFSg3x7Vi6RNAuLpTXwxB9S2nIA7msBb/Zt8p7XqMwdpdc1IU7CkOQUPgAqR5fWvxuKCbneKGmA== dependencies: "@typescript-eslint/scope-manager" "5.41.0" "@typescript-eslint/type-utils" "5.41.0" "@typescript-eslint/utils" "5.41.0" - "debug" "^4.3.4" - "ignore" "^5.2.0" - "regexpp" "^3.2.0" - "semver" "^7.3.7" - "tsutils" "^3.21.0" + debug "^4.3.4" + ignore "^5.2.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" -"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.17.0": - "integrity" "sha512-HQVfix4+RL5YRWZboMD1pUfFN8MpRH4laziWkkAzyO1fvNOY/uinZcvo3QiFJVS/siNHupV8E5+xSwQZrl6PZA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.41.0.tgz" - "version" "5.41.0" +"@typescript-eslint/parser@^5.17.0": + version "5.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.41.0.tgz" + integrity sha512-HQVfix4+RL5YRWZboMD1pUfFN8MpRH4laziWkkAzyO1fvNOY/uinZcvo3QiFJVS/siNHupV8E5+xSwQZrl6PZA== dependencies: "@typescript-eslint/scope-manager" "5.41.0" "@typescript-eslint/types" "5.41.0" "@typescript-eslint/typescript-estree" "5.41.0" - "debug" "^4.3.4" + debug "^4.3.4" "@typescript-eslint/scope-manager@5.41.0": - "integrity" "sha512-xOxPJCnuktUkY2xoEZBKXO5DBCugFzjrVndKdUnyQr3+9aDWZReKq9MhaoVnbL+maVwWJu/N0SEtrtEUNb62QQ==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.41.0.tgz" - "version" "5.41.0" + version "5.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.41.0.tgz" + integrity sha512-xOxPJCnuktUkY2xoEZBKXO5DBCugFzjrVndKdUnyQr3+9aDWZReKq9MhaoVnbL+maVwWJu/N0SEtrtEUNb62QQ== dependencies: "@typescript-eslint/types" "5.41.0" "@typescript-eslint/visitor-keys" "5.41.0" "@typescript-eslint/type-utils@5.41.0": - "integrity" "sha512-L30HNvIG6A1Q0R58e4hu4h+fZqaO909UcnnPbwKiN6Rc3BUEx6ez2wgN7aC0cBfcAjZfwkzE+E2PQQ9nEuoqfA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.41.0.tgz" - "version" "5.41.0" + version "5.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.41.0.tgz" + integrity sha512-L30HNvIG6A1Q0R58e4hu4h+fZqaO909UcnnPbwKiN6Rc3BUEx6ez2wgN7aC0cBfcAjZfwkzE+E2PQQ9nEuoqfA== dependencies: "@typescript-eslint/typescript-estree" "5.41.0" "@typescript-eslint/utils" "5.41.0" - "debug" "^4.3.4" - "tsutils" "^3.21.0" + debug "^4.3.4" + tsutils "^3.21.0" "@typescript-eslint/types@5.41.0": - "integrity" "sha512-5BejraMXMC+2UjefDvrH0Fo/eLwZRV6859SXRg+FgbhA0R0l6lDqDGAQYhKbXhPN2ofk2kY5sgGyLNL907UXpA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.41.0.tgz" - "version" "5.41.0" + version "5.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.41.0.tgz" + integrity sha512-5BejraMXMC+2UjefDvrH0Fo/eLwZRV6859SXRg+FgbhA0R0l6lDqDGAQYhKbXhPN2ofk2kY5sgGyLNL907UXpA== "@typescript-eslint/typescript-estree@5.41.0": - "integrity" "sha512-SlzFYRwFSvswzDSQ/zPkIWcHv8O5y42YUskko9c4ki+fV6HATsTODUPbRbcGDFYP86gaJL5xohUEytvyNNcXWg==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.41.0.tgz" - "version" "5.41.0" + version "5.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.41.0.tgz" + integrity sha512-SlzFYRwFSvswzDSQ/zPkIWcHv8O5y42YUskko9c4ki+fV6HATsTODUPbRbcGDFYP86gaJL5xohUEytvyNNcXWg== dependencies: "@typescript-eslint/types" "5.41.0" "@typescript-eslint/visitor-keys" "5.41.0" - "debug" "^4.3.4" - "globby" "^11.1.0" - "is-glob" "^4.0.3" - "semver" "^7.3.7" - "tsutils" "^3.21.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" "@typescript-eslint/utils@5.41.0": - "integrity" "sha512-QlvfwaN9jaMga9EBazQ+5DDx/4sAdqDkcs05AsQHMaopluVCUyu1bTRUVKzXbgjDlrRAQrYVoi/sXJ9fmG+KLQ==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.41.0.tgz" - "version" "5.41.0" + version "5.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.41.0.tgz" + integrity sha512-QlvfwaN9jaMga9EBazQ+5DDx/4sAdqDkcs05AsQHMaopluVCUyu1bTRUVKzXbgjDlrRAQrYVoi/sXJ9fmG+KLQ== dependencies: "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" "@typescript-eslint/scope-manager" "5.41.0" "@typescript-eslint/types" "5.41.0" "@typescript-eslint/typescript-estree" "5.41.0" - "eslint-scope" "^5.1.1" - "eslint-utils" "^3.0.0" - "semver" "^7.3.7" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" "@typescript-eslint/visitor-keys@5.41.0": - "integrity" "sha512-vilqeHj267v8uzzakbm13HkPMl7cbYpKVjgFWZPIOHIJHZtinvypUhJ5xBXfWYg4eFKqztbMMpOgFpT9Gfx4fw==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.41.0.tgz" - "version" "5.41.0" + version "5.41.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.41.0.tgz" + integrity sha512-vilqeHj267v8uzzakbm13HkPMl7cbYpKVjgFWZPIOHIJHZtinvypUhJ5xBXfWYg4eFKqztbMMpOgFpT9Gfx4fw== dependencies: "@typescript-eslint/types" "5.41.0" - "eslint-visitor-keys" "^3.3.0" + eslint-visitor-keys "^3.3.0" "@ungap/promise-all-settled@1.1.2": - "integrity" "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" - "resolved" "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" - "version" "1.1.2" + version "1.1.2" + resolved "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== "@yarnpkg/lockfile@^1.1.0": - "integrity" "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" - "resolved" "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" - "version" "1.1.0" + version "1.1.0" + resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== "@yarnpkg/parsers@^3.0.0-rc.18": - "integrity" "sha512-F52Zryoi6uSHi43A/htykDD7l1707TQjHeAHTKxNWJBTwvrEKWYvuu1w8bzSHpFVc06ig2KyrpHPfmeiuOip8Q==" - "resolved" "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.26.tgz" - "version" "3.0.0-rc.26" + version "3.0.0-rc.26" + resolved "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.26.tgz" + integrity sha512-F52Zryoi6uSHi43A/htykDD7l1707TQjHeAHTKxNWJBTwvrEKWYvuu1w8bzSHpFVc06ig2KyrpHPfmeiuOip8Q== dependencies: - "js-yaml" "^3.10.0" - "tslib" "^2.4.0" + js-yaml "^3.10.0" + tslib "^2.4.0" "@zkochan/js-yaml@0.0.6": - "integrity" "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==" - "resolved" "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz" - "version" "0.0.6" - dependencies: - "argparse" "^2.0.1" - -"abbrev@^1.0.0", "abbrev@1": - "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - "version" "1.1.1" - -"abbrev@1.0.x": - "integrity" "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==" - "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" - "version" "1.0.9" - -"abort-controller@^3.0.0": - "integrity" "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==" - "resolved" "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "event-target-shim" "^5.0.0" - -"abortcontroller-polyfill@^1.7.3": - "integrity" "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==" - "resolved" "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz" - "version" "1.7.5" - -"abstract-level@^1.0.0", "abstract-level@^1.0.2", "abstract-level@^1.0.3": - "integrity" "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==" - "resolved" "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "buffer" "^6.0.3" - "catering" "^2.1.0" - "is-buffer" "^2.0.5" - "level-supports" "^4.0.0" - "level-transcoder" "^1.0.1" - "module-error" "^1.0.1" - "queue-microtask" "^1.2.3" - -"abstract-leveldown@^7.2.0": - "integrity" "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==" - "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "buffer" "^6.0.3" - "catering" "^2.0.0" - "is-buffer" "^2.0.5" - "level-concat-iterator" "^3.0.0" - "level-supports" "^2.0.1" - "queue-microtask" "^1.2.3" - -"abstract-leveldown@~2.6.0": - "integrity" "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==" - "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz" - "version" "2.6.3" - dependencies: - "xtend" "~4.0.0" - -"abstract-leveldown@~2.7.1": - "integrity" "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==" - "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz" - "version" "2.7.2" - dependencies: - "xtend" "~4.0.0" - -"accepts@~1.3.8": - "integrity" "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==" - "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" - "version" "1.3.8" - dependencies: - "mime-types" "~2.1.34" - "negotiator" "0.6.3" - -"acorn-jsx@^5.3.2": - "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" - "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - "version" "5.3.2" - -"acorn-walk@^8.1.1": - "integrity" "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - "version" "8.2.0" - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.4.1", "acorn@^8.8.0": - "integrity" "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" - "version" "8.8.1" - -"add-stream@^1.0.0": - "integrity" "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==" - "resolved" "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" - "version" "1.0.0" - -"address@^1.0.1": - "integrity" "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==" - "resolved" "https://registry.npmjs.org/address/-/address-1.2.1.tgz" - "version" "1.2.1" - -"adm-zip@^0.4.16": - "integrity" "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" - "resolved" "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" - "version" "0.4.16" - -"aes-js@^3.1.2": - "integrity" "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" - "resolved" "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz" - "version" "3.1.2" - -"aes-js@3.0.0": - "integrity" "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - "resolved" "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz" - "version" "3.0.0" - -"agent-base@^6.0.2", "agent-base@6": - "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" - "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "debug" "4" - -"agentkeepalive@^4.2.1": - "integrity" "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==" - "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "debug" "^4.1.0" - "depd" "^1.1.2" - "humanize-ms" "^1.2.1" - -"aggregate-error@^3.0.0": - "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" - "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "clean-stack" "^2.0.0" - "indent-string" "^4.0.0" - -"ajv@^6.10.0", "ajv@^6.12.3", "ajv@^6.12.4": - "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - "version" "6.12.6" - 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" - -"amdefine@>=0.0.4": - "integrity" "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==" - "resolved" "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" - "version" "1.0.1" - -"ansi-colors@^4.1.1": - "integrity" "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" - "version" "4.1.3" - -"ansi-colors@3.2.3": - "integrity" "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz" - "version" "3.2.3" - -"ansi-colors@4.1.1": - "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - "version" "4.1.1" - -"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.0": - "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" - "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - "version" "4.3.2" - dependencies: - "type-fest" "^0.21.3" - -"ansi-regex@^3.0.0": - "integrity" "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" - "version" "3.0.1" - -"ansi-regex@^4.1.0": - "integrity" "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" - "version" "4.1.1" - -"ansi-regex@^5.0.1": - "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - "version" "5.0.1" - -"ansi-regex@^6.0.1": - "integrity" "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - "version" "6.0.1" - -"ansi-styles@^3.2.0": - "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.0" - -"ansi-styles@^3.2.1": - "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.0" - -"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": - "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "color-convert" "^2.0.1" - -"ansi-styles@^5.0.0": - "integrity" "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" - "version" "5.2.0" - -"ansi-styles@^6.0.0": - "integrity" "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - "version" "6.2.1" - -"antlr4ts@^0.5.0-alpha.4": - "integrity" "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" - "resolved" "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz" - "version" "0.5.0-alpha.4" - -"anymatch@^3.0.3", "anymatch@~3.1.1", "anymatch@~3.1.2": - "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" - "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "normalize-path" "^3.0.0" - "picomatch" "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0", "aproba@^2.0.0": - "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - "version" "2.0.0" - -"are-we-there-yet@^3.0.0": - "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "delegates" "^1.0.0" - "readable-stream" "^3.6.0" - -"arg@^4.1.0": - "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - "version" "4.1.3" - -"argparse@^1.0.7": - "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "sprintf-js" "~1.0.2" - -"argparse@^2.0.1": - "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - "version" "2.0.1" - -"array-back@^3.0.1", "array-back@^3.1.0": - "integrity" "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" - "resolved" "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz" - "version" "3.1.0" - -"array-back@^4.0.1": - "integrity" "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" - "resolved" "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" - "version" "4.0.2" - -"array-back@^4.0.2": - "integrity" "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" - "resolved" "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" - "version" "4.0.2" - -"array-differ@^3.0.0": - "integrity" "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==" - "resolved" "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" - "version" "3.0.0" - -"array-flatten@1.1.1": - "integrity" "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - "version" "1.1.1" - -"array-ify@^1.0.0": - "integrity" "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==" - "resolved" "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" - "version" "1.0.0" - -"array-union@^2.1.0": - "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - "version" "2.1.0" - -"array-uniq@1.0.3": - "integrity" "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - "version" "1.0.3" - -"array.prototype.reduce@^1.0.4": - "integrity" "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==" - "resolved" "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - "es-abstract" "^1.19.2" - "es-array-method-boxes-properly" "^1.0.0" - "is-string" "^1.0.7" - -"arrify@^1.0.1": - "integrity" "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" - "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" - "version" "1.0.1" - -"arrify@^2.0.1": - "integrity" "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" - "resolved" "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" - "version" "2.0.1" - -"asap@^2.0.0", "asap@~2.0.6": - "integrity" "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - "resolved" "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" - "version" "2.0.6" - -"asn1.js@^5.2.0": - "integrity" "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==" - "resolved" "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" - "version" "5.4.1" - dependencies: - "bn.js" "^4.0.0" - "inherits" "^2.0.1" - "minimalistic-assert" "^1.0.0" - "safer-buffer" "^2.1.0" - -"asn1@~0.2.3": - "integrity" "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==" - "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" - "version" "0.2.6" - dependencies: - "safer-buffer" "~2.1.0" - -"assert-plus@^1.0.0", "assert-plus@1.0.0": - "integrity" "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - "version" "1.0.0" - -"assertion-error@^1.1.0": - "integrity" "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - "resolved" "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" - "version" "1.1.0" - -"astral-regex@^2.0.0": - "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - "version" "2.0.0" - -"async-eventemitter@^0.2.2", "async-eventemitter@^0.2.4": - "integrity" "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==" - "resolved" "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz" - "version" "0.2.4" - dependencies: - "async" "^2.4.0" - -"async-limiter@~1.0.0": - "integrity" "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - "resolved" "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" - "version" "1.0.1" - -"async-mutex@^0.2.6": - "integrity" "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==" - "resolved" "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz" - "version" "0.2.6" - dependencies: - "tslib" "^2.0.0" - -"async@^1.4.2": - "integrity" "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" - "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" - "version" "1.5.2" - -"async@^2.0.1", "async@^2.1.2", "async@^2.4.0", "async@^2.5.0": - "integrity" "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==" - "resolved" "https://registry.npmjs.org/async/-/async-2.6.4.tgz" - "version" "2.6.4" - dependencies: - "lodash" "^4.17.14" - -"async@^3.2.3": - "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" - "version" "3.2.4" - -"async@1.x": - "integrity" "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" - "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" - "version" "1.5.2" - -"asynckit@^0.4.0": - "integrity" "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - "version" "0.4.0" - -"at-least-node@^1.0.0": - "integrity" "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - "resolved" "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" - "version" "1.0.0" - -"available-typed-arrays@^1.0.5": - "integrity" "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - "resolved" "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" - "version" "1.0.5" - -"aws-sign2@~0.7.0": - "integrity" "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" - "resolved" "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" - "version" "0.7.0" - -"aws4@^1.8.0": - "integrity" "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - "resolved" "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" - "version" "1.11.0" - -"axios@^0.21.1": - "integrity" "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==" - "resolved" "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" - "version" "0.21.4" - dependencies: - "follow-redirects" "^1.14.0" - -"axios@^1.0.0": - "integrity" "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==" - "resolved" "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "follow-redirects" "^1.15.0" - "form-data" "^4.0.0" - "proxy-from-env" "^1.1.0" - -"babel-jest@^28.1.3": - "integrity" "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==" - "resolved" "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz" - "version" "28.1.3" + version "0.0.6" + resolved "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz" + integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== + dependencies: + argparse "^2.0.1" + +JSONStream@^1.0.4: + version "1.3.5" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1, abbrev@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" + integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abortcontroller-polyfill@^1.7.3: + version "1.7.5" + resolved "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz" + integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== + +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@~2.6.0: + version "2.6.3" + resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz" + integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@~2.7.1: + version "2.7.2" + resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz" + integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== + dependencies: + xtend "~4.0.0" + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + 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" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + +address@^1.0.1: + version "1.2.1" + resolved "https://registry.npmjs.org/address/-/address-1.2.1.tgz" + integrity sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +aes-js@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz" + integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + 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" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== + +amqplib@^0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/amqplib/-/amqplib-0.9.1.tgz#f2ad6e518a148a761e102bf791314fbe4cb94346" + integrity sha512-a1DP0H1LcLSMKPAnhUN2AKbVyEPqEUrUf7O+odhKGxaO+Tf0nWtuD7Zq5P9uZwZteu56OfW9EQozSCTKsAEk5w== + dependencies: + bitsyntax "~0.1.0" + bluebird "^3.7.2" + buffer-more-ints "~1.0.0" + readable-stream "1.x >=1.1.9" + url-parse "~1.5.10" + +ansi-colors@3.2.3: + version "3.2.3" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz" + integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + +anymatch@^3.0.3, anymatch@~3.1.1, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1, array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-includes@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + get-intrinsic "^1.1.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" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +array.prototype.flat@^1.2.5: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" + integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" + +array.prototype.reduce@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz" + integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@^2.0.0, asap@~2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-eventemitter@^0.2.2, async-eventemitter@^0.2.4: + version "0.2.4" + resolved "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async-mutex@^0.2.6: + version "0.2.6" + resolved "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz" + integrity sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw== + dependencies: + tslib "^2.0.0" + +async@1.x, async@^1.4.2: + version "1.5.2" + resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + +async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0: + version "2.6.4" + resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +async@^3.2.3: + version "3.2.4" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axios@1.1.3, axios@^1.0.0: + version "1.1.3" + resolved "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz" + integrity sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +babel-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz" + integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== dependencies: "@jest/transform" "^28.1.3" "@types/babel__core" "^7.1.14" - "babel-plugin-istanbul" "^6.1.1" - "babel-preset-jest" "^28.1.3" - "chalk" "^4.0.0" - "graceful-fs" "^4.2.9" - "slash" "^3.0.0" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^28.1.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" -"babel-plugin-istanbul@^6.1.1": - "integrity" "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==" - "resolved" "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" - "version" "6.1.1" +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - "istanbul-lib-instrument" "^5.0.4" - "test-exclude" "^6.0.0" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" -"babel-plugin-jest-hoist@^28.1.3": - "integrity" "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==" - "resolved" "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz" - "version" "28.1.3" +babel-plugin-jest-hoist@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz" + integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -"babel-plugin-polyfill-corejs2@^0.3.3": - "integrity" "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" - "version" "0.3.3" +babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== dependencies: "@babel/compat-data" "^7.17.7" "@babel/helper-define-polyfill-provider" "^0.3.3" - "semver" "^6.1.1" + semver "^6.1.1" -"babel-plugin-polyfill-corejs3@^0.6.0": - "integrity" "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz" - "version" "0.6.0" +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== dependencies: "@babel/helper-define-polyfill-provider" "^0.3.3" - "core-js-compat" "^3.25.1" + core-js-compat "^3.25.1" -"babel-plugin-polyfill-regenerator@^0.4.1": - "integrity" "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" - "version" "0.4.1" +babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== dependencies: "@babel/helper-define-polyfill-provider" "^0.3.3" -"babel-preset-current-node-syntax@^1.0.0": - "integrity" "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==" - "resolved" "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" - "version" "1.0.1" +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -3739,2391 +3796,2322 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -"babel-preset-jest@^28.1.3": - "integrity" "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==" - "resolved" "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "babel-plugin-jest-hoist" "^28.1.3" - "babel-preset-current-node-syntax" "^1.0.0" - -"backoff@^2.5.0": - "integrity" "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==" - "resolved" "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "precond" "0.2" - -"balanced-match@^1.0.0": - "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - "version" "1.0.2" - -"base-x@^3.0.2", "base-x@^3.0.8": - "integrity" "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==" - "resolved" "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" - "version" "3.0.9" - dependencies: - "safe-buffer" "^5.0.1" - -"base64-js@^1.3.1": - "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - "version" "1.5.1" - -"base64url@^3.0.1": - "integrity" "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" - "resolved" "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz" - "version" "3.0.1" - -"bcrypt-pbkdf@^1.0.0": - "integrity" "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" - "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "tweetnacl" "^0.14.3" - -"bech32@1.1.4": - "integrity" "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - "resolved" "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" - "version" "1.1.4" - -"before-after-hook@^2.2.0": - "integrity" "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" - "resolved" "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" - "version" "2.2.3" - -"bigint-crypto-utils@^3.0.23": - "integrity" "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==" - "resolved" "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz" - "version" "3.1.7" - dependencies: - "bigint-mod-arith" "^3.1.0" - -"bigint-mod-arith@^3.1.0": - "integrity" "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==" - "resolved" "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz" - "version" "3.1.2" - -"bignumber.js@*", "bignumber.js@^9.0.0", "bignumber.js@^9.0.1": - "integrity" "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==" - "resolved" "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz" - "version" "9.1.0" - -"bin-links@^3.0.0": - "integrity" "sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==" - "resolved" "https://registry.npmjs.org/bin-links/-/bin-links-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "cmd-shim" "^5.0.0" - "mkdirp-infer-owner" "^2.0.0" - "npm-normalize-package-bin" "^2.0.0" - "read-cmd-shim" "^3.0.0" - "rimraf" "^3.0.0" - "write-file-atomic" "^4.0.0" - -"binary-extensions@^2.0.0": - "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - "version" "2.2.0" - -"bl@^4.0.3", "bl@^4.1.0": - "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" - "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "buffer" "^5.5.0" - "inherits" "^2.0.4" - "readable-stream" "^3.4.0" - -"blakejs@^1.1.0": - "integrity" "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - "resolved" "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" - "version" "1.2.1" - -"bluebird@^3.5.0": - "integrity" "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" - "version" "3.7.2" - -"bn.js@^4.0.0", "bn.js@^4.1.0", "bn.js@^4.11.0", "bn.js@^4.11.6", "bn.js@^4.11.8", "bn.js@^4.11.9": - "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - "version" "4.12.0" - -"bn.js@^4.11.1", "bn.js@^4.4.0": - "version" "4.11.9" - -"bn.js@^5.0.0": - "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - "version" "5.2.1" - -"bn.js@^5.1.1": - "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - "version" "5.2.1" - -"bn.js@^5.1.2": - "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - "version" "5.2.1" - -"bn.js@^5.1.3": - "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - "version" "5.2.1" - -"bn.js@^5.2.0": - "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - "version" "5.2.1" - -"bn.js@^5.2.1": - "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - "version" "5.2.1" - -"bn.js@4.11.6": - "integrity" "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" - "version" "4.11.6" - -"body-parser@^1.16.0", "body-parser@1.20.1": - "integrity" "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==" - "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" - "version" "1.20.1" - dependencies: - "bytes" "3.1.2" - "content-type" "~1.0.4" - "debug" "2.6.9" - "depd" "2.0.0" - "destroy" "1.2.0" - "http-errors" "2.0.0" - "iconv-lite" "0.4.24" - "on-finished" "2.4.1" - "qs" "6.11.0" - "raw-body" "2.5.1" - "type-is" "~1.6.18" - "unpipe" "1.0.0" - -"brace-expansion@^1.1.7": - "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - "version" "1.1.11" - dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" - -"brace-expansion@^2.0.1": - "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "balanced-match" "^1.0.0" - -"braces@^3.0.2", "braces@~3.0.2": - "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" - "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "fill-range" "^7.0.1" - -"brorand@^1.0.1", "brorand@^1.1.0": - "integrity" "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - "resolved" "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" - "version" "1.1.0" - -"browser-level@^1.0.1": - "integrity" "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==" - "resolved" "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "abstract-level" "^1.0.2" - "catering" "^2.1.1" - "module-error" "^1.0.2" - "run-parallel-limit" "^1.1.0" - -"browser-stdout@1.3.1": - "integrity" "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" - "version" "1.3.1" - -"browserify-aes@^1.0.0", "browserify-aes@^1.0.4", "browserify-aes@^1.2.0": - "integrity" "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==" - "resolved" "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "buffer-xor" "^1.0.3" - "cipher-base" "^1.0.0" - "create-hash" "^1.1.0" - "evp_bytestokey" "^1.0.3" - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" - -"browserify-cipher@^1.0.0": - "integrity" "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==" - "resolved" "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "browserify-aes" "^1.0.4" - "browserify-des" "^1.0.0" - "evp_bytestokey" "^1.0.0" - -"browserify-des@^1.0.0": - "integrity" "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==" - "resolved" "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "cipher-base" "^1.0.1" - "des.js" "^1.0.0" - "inherits" "^2.0.1" - "safe-buffer" "^5.1.2" - -"browserify-rsa@^4.0.0", "browserify-rsa@^4.0.1": - "integrity" "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==" - "resolved" "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "bn.js" "^5.0.0" - "randombytes" "^2.0.1" - -"browserify-sign@^4.0.0": - "integrity" "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==" - "resolved" "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "bn.js" "^5.1.1" - "browserify-rsa" "^4.0.1" - "create-hash" "^1.2.0" - "create-hmac" "^1.1.7" - "elliptic" "^6.5.3" - "inherits" "^2.0.4" - "parse-asn1" "^5.1.5" - "readable-stream" "^3.6.0" - "safe-buffer" "^5.2.0" - -"browserslist@^4.21.3", "browserslist@^4.21.4", "browserslist@>= 4.21.0": - "integrity" "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" - "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" - "version" "4.21.4" - dependencies: - "caniuse-lite" "^1.0.30001400" - "electron-to-chromium" "^1.4.251" - "node-releases" "^2.0.6" - "update-browserslist-db" "^1.0.9" - -"bs58@^4.0.0": - "integrity" "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==" - "resolved" "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "base-x" "^3.0.2" - -"bs58check@^2.1.2": - "integrity" "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==" - "resolved" "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "bs58" "^4.0.0" - "create-hash" "^1.1.0" - "safe-buffer" "^5.1.2" - -"bser@2.1.1": - "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" - "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "node-int64" "^0.4.0" - -"btoa@^1.2.1": - "integrity" "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" - "resolved" "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz" - "version" "1.2.1" - -"buffer-from@^1.0.0": - "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - "version" "1.1.2" - -"buffer-to-arraybuffer@^0.0.5": - "integrity" "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" - "resolved" "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz" - "version" "0.0.5" - -"buffer-xor@^1.0.3": - "integrity" "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - "resolved" "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" - "version" "1.0.3" - -"buffer@^5.0.5", "buffer@^5.5.0", "buffer@^5.6.0": - "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - "version" "5.7.1" - dependencies: - "base64-js" "^1.3.1" - "ieee754" "^1.1.13" - -"buffer@^6.0.3": - "integrity" "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - "version" "6.0.3" - dependencies: - "base64-js" "^1.3.1" - "ieee754" "^1.2.1" - -"bufferutil@^4.0.1", "bufferutil@4.0.5": - "integrity" "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==" - "resolved" "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz" - "version" "4.0.5" - dependencies: - "node-gyp-build" "^4.3.0" - -"bufio@^1.0.7": - "integrity" "sha512-W0ydG8t+ST+drUpEwl1N+dU9Ije06g8+43CLtvEIzfKo9nPFLXbKqDYE2XSg4w6RugsBcCj7pEU7jOpBC6BqrA==" - "resolved" "https://registry.npmjs.org/bufio/-/bufio-1.1.3.tgz" - "version" "1.1.3" - -"builtins@^1.0.3": - "integrity" "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" - "resolved" "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" - "version" "1.0.3" - -"builtins@^5.0.0": - "integrity" "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==" - "resolved" "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "semver" "^7.0.0" - -"busboy@^1.6.0": - "integrity" "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==" - "resolved" "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" - "version" "1.6.0" - dependencies: - "streamsearch" "^1.1.0" - -"byte-size@^7.0.0": - "integrity" "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==" - "resolved" "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz" - "version" "7.0.1" - -"bytes@3.1.2": - "integrity" "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" - "version" "3.1.2" +babel-preset-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz" + integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== + dependencies: + babel-plugin-jest-hoist "^28.1.3" + babel-preset-current-node-syntax "^1.0.0" + +backoff@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz" + integrity sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA== + dependencies: + precond "0.2" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2, base-x@^3.0.8: + version "3.0.9" + resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base64url@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz" + integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +bigint-crypto-utils@^3.0.23: + version "3.1.7" + resolved "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz" + integrity sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA== + dependencies: + bigint-mod-arith "^3.1.0" + +bigint-mod-arith@^3.1.0: + version "3.1.2" + resolved "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz" + integrity sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ== + +bignumber.js@*, bignumber.js@^9.0.0, bignumber.js@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz" + integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== + +bin-links@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/bin-links/-/bin-links-3.0.3.tgz" + integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== + dependencies: + cmd-shim "^5.0.0" + mkdirp-infer-owner "^2.0.0" + npm-normalize-package-bin "^2.0.0" + read-cmd-shim "^3.0.0" + rimraf "^3.0.0" + write-file-atomic "^4.0.0" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bitsyntax@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/bitsyntax/-/bitsyntax-0.1.0.tgz#b0c59acef03505de5a2ed62a2f763c56ae1d6205" + integrity sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q== + dependencies: + buffer-more-ints "~1.0.0" + debug "~2.6.9" + safe-buffer "~5.1.2" + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bluebird@^3.5.0, bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +body-parser@1.20.1, body-parser@^1.16.0: + version "1.20.1" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserslist@^4.21.3, browserslist@^4.21.4: + version "4.21.4" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-more-ints@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz#ef4f8e2dddbad429ed3828a9c55d44f05c611422" + integrity sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg== + +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz" + integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bufferutil@4.0.5, bufferutil@^4.0.1: + version "4.0.5" + resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== + dependencies: + node-gyp-build "^4.3.0" + +bufio@^1.0.7: + version "1.1.3" + resolved "https://registry.npmjs.org/bufio/-/bufio-1.1.3.tgz" + integrity sha512-W0ydG8t+ST+drUpEwl1N+dU9Ije06g8+43CLtvEIzfKo9nPFLXbKqDYE2XSg4w6RugsBcCj7pEU7jOpBC6BqrA== + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +byte-size@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz" + integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== -"cacache@^16.0.0", "cacache@^16.0.6", "cacache@^16.1.0": - "integrity" "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==" - "resolved" "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" - "version" "16.1.3" +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== dependencies: "@npmcli/fs" "^2.1.0" "@npmcli/move-file" "^2.0.0" - "chownr" "^2.0.0" - "fs-minipass" "^2.1.0" - "glob" "^8.0.1" - "infer-owner" "^1.0.4" - "lru-cache" "^7.7.1" - "minipass" "^3.1.6" - "minipass-collect" "^1.0.2" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.4" - "mkdirp" "^1.0.4" - "p-map" "^4.0.0" - "promise-inflight" "^1.0.1" - "rimraf" "^3.0.2" - "ssri" "^9.0.0" - "tar" "^6.1.11" - "unique-filename" "^2.0.0" - -"cacheable-lookup@^5.0.3": - "integrity" "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" - "resolved" "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" - "version" "5.0.4" - -"cacheable-lookup@^6.0.4": - "integrity" "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==" - "resolved" "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz" - "version" "6.1.0" - -"cacheable-request@^6.0.0": - "integrity" "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==" - "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "clone-response" "^1.0.2" - "get-stream" "^5.1.0" - "http-cache-semantics" "^4.0.0" - "keyv" "^3.0.0" - "lowercase-keys" "^2.0.0" - "normalize-url" "^4.1.0" - "responselike" "^1.0.2" - -"cacheable-request@^7.0.2": - "integrity" "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==" - "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" - "version" "7.0.2" - dependencies: - "clone-response" "^1.0.2" - "get-stream" "^5.1.0" - "http-cache-semantics" "^4.0.0" - "keyv" "^4.0.0" - "lowercase-keys" "^2.0.0" - "normalize-url" "^6.0.1" - "responselike" "^2.0.0" - -"call-bind@^1.0.0", "call-bind@^1.0.2": - "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" - "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "function-bind" "^1.1.1" - "get-intrinsic" "^1.0.2" - -"callsites@^3.0.0": - "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - "version" "3.1.0" - -"camelcase-keys@^6.2.2": - "integrity" "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==" - "resolved" "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" - "version" "6.2.2" - dependencies: - "camelcase" "^5.3.1" - "map-obj" "^4.0.0" - "quick-lru" "^4.0.1" - -"camelcase@^5.0.0", "camelcase@^5.3.1": - "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - "version" "5.3.1" - -"camelcase@^6.0.0": - "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - "version" "6.3.0" - -"camelcase@^6.2.0": - "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - "version" "6.3.0" - -"caniuse-lite@^1.0.30001400": - "integrity" "sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A==" - "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz" - "version" "1.0.30001426" - -"caseless@^0.12.0", "caseless@~0.12.0": - "integrity" "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - "resolved" "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" - "version" "0.12.0" - -"catering@^2.0.0": - "version" "2.1.0" - dependencies: - "queue-tick" "^1.0.0" - -"catering@^2.1.0", "catering@^2.1.1": - "integrity" "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==" - "resolved" "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz" - "version" "2.1.1" - -"cbor@^5.0.2": - "integrity" "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==" - "resolved" "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "bignumber.js" "^9.0.1" - "nofilter" "^1.0.4" - -"chai-as-promised@^7.1.1": - "integrity" "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==" - "resolved" "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz" - "version" "7.1.1" - dependencies: - "check-error" "^1.0.2" - -"chai-string@^1.5.0": - "integrity" "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==" - "resolved" "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz" - "version" "1.5.0" - -"chai@^4.1.2", "chai@^4.2.0", "chai@^4.3.4", "chai@^4.3.6", "chai@>= 2.1.2 < 5": - "integrity" "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==" - "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz" - "version" "4.3.6" - dependencies: - "assertion-error" "^1.1.0" - "check-error" "^1.0.2" - "deep-eql" "^3.0.1" - "get-func-name" "^2.0.0" - "loupe" "^2.3.1" - "pathval" "^1.1.1" - "type-detect" "^4.0.5" - -"chalk@^2.0.0": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^2.4.1": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^2.4.2": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^4.0.0", "chalk@^4.0.2", "chalk@^4.1.0", "chalk@^4.1.1", "chalk@^4.1.2": - "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"chalk@4.1.0": - "integrity" "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"char-regex@^1.0.2": - "integrity" "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" - "resolved" "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" - "version" "1.0.2" - -"chardet@^0.7.0": - "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - "version" "0.7.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-lookup@^6.0.4: + version "6.1.0" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz" + integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" + 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.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001400: + version "1.0.30001426" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz" + integrity sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A== + +caseless@^0.12.0, caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +cbor@^5.0.2: + version "5.2.0" + resolved "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz" + integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== + dependencies: + bignumber.js "^9.0.1" + nofilter "^1.0.4" + +cent.js@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cent.js/-/cent.js-2.1.0.tgz#bf275ad1496febbf0e5e29a2f2adb4cf0076d00b" + integrity sha512-dC36pOquM7OdOqVt3POdNA+wsO4/dj53h0P9FLUpWfF+0hyY6QKKNA+Cjcq0AFda4Cj7kYGcwSYbtU920i8B7Q== + dependencies: + axios "1.1.3" + +centrifuge@^2.8.4: + version "2.8.5" + resolved "https://registry.yarnpkg.com/centrifuge/-/centrifuge-2.8.5.tgz#94accdd105ddffe026f05994eaedc21e1ba82339" + integrity sha512-t06HyieeB2k7uSJSbVM4e7xMF+mfY8xvDtTJLF95ho0ba/X4MSoZcisi2PBzdCLyxG2BhkYW1Wcg6RUiPYTIlQ== + dependencies: + protobufjs "^6.11.2" + +chai-as-promised@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz" + integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + dependencies: + check-error "^1.0.2" + +chai-string@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz" + integrity sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw== + +chai@^4.3.4, chai@^4.3.6: + version "4.3.6" + resolved "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz" + integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + 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" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== "charenc@>= 0.0.1": - "integrity" "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" - "resolved" "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" - "version" "0.0.2" - -"check-error@^1.0.2": - "integrity" "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" - "resolved" "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" - "version" "1.0.2" - -"checkpoint-store@^1.1.0": - "integrity" "sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==" - "resolved" "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "functional-red-black-tree" "^1.0.1" - -"chokidar@^3.4.0", "chokidar@^3.5.1", "chokidar@^3.5.2", "chokidar@3.5.3": - "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" - "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" - "version" "3.5.3" - dependencies: - "anymatch" "~3.1.2" - "braces" "~3.0.2" - "glob-parent" "~5.1.2" - "is-binary-path" "~2.1.0" - "is-glob" "~4.0.1" - "normalize-path" "~3.0.0" - "readdirp" "~3.6.0" + version "0.0.2" + resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + +checkpoint-store@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz" + integrity sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg== + dependencies: + functional-red-black-tree "^1.0.1" + +chokidar@3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz" + integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.2.0" optionalDependencies: - "fsevents" "~2.3.2" - -"chokidar@3.3.0": - "integrity" "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==" - "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "anymatch" "~3.1.1" - "braces" "~3.0.2" - "glob-parent" "~5.1.0" - "is-binary-path" "~2.1.0" - "is-glob" "~4.0.1" - "normalize-path" "~3.0.0" - "readdirp" "~3.2.0" + fsevents "~2.1.1" + +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" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" optionalDependencies: - "fsevents" "~2.1.1" - -"chownr@^1.1.4": - "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - "resolved" "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" - "version" "1.1.4" - -"chownr@^2.0.0": - "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - "version" "2.0.0" - -"ci-info@^2.0.0": - "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" - "version" "2.0.0" - -"ci-info@^3.2.0": - "integrity" "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==" - "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz" - "version" "3.5.0" - -"cids@^0.7.1": - "integrity" "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==" - "resolved" "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz" - "version" "0.7.5" - dependencies: - "buffer" "^5.5.0" - "class-is" "^1.1.0" - "multibase" "~0.6.0" - "multicodec" "^1.0.0" - "multihashes" "~0.4.15" - -"cipher-base@^1.0.0", "cipher-base@^1.0.1", "cipher-base@^1.0.3": - "integrity" "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==" - "resolved" "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" - -"cjs-module-lexer@^1.0.0": - "integrity" "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" - "resolved" "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" - "version" "1.2.2" - -"class-is@^1.1.0": - "integrity" "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" - "resolved" "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz" - "version" "1.1.0" - -"classic-level@^1.2.0": - "integrity" "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==" - "resolved" "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "abstract-level" "^1.0.2" - "catering" "^2.1.0" - "module-error" "^1.0.1" - "napi-macros" "~2.0.0" - "node-gyp-build" "^4.3.0" - -"clean-stack@^2.0.0": - "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - "version" "2.2.0" - -"cli-cursor@^3.1.0", "cli-cursor@3.1.0": - "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" - "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "restore-cursor" "^3.1.0" - -"cli-spinners@^2.5.0": - "integrity" "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==" - "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz" - "version" "2.7.0" - -"cli-spinners@2.6.1": - "integrity" "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" - "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" - "version" "2.6.1" - -"cli-table3@^0.5.0": - "integrity" "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==" - "resolved" "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz" - "version" "0.5.1" - dependencies: - "object-assign" "^4.1.0" - "string-width" "^2.1.1" + fsevents "~2.3.2" + +chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0: + version "3.5.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz" + integrity sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw== + +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + +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" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + +classic-level@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz" + integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@3.1.0, cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-spinners@^2.5.0: + version "2.7.0" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + +cli-table3@^0.5.0: + version "0.5.1" + resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" optionalDependencies: - "colors" "^1.1.2" - -"cli-truncate@^2.1.0": - "integrity" "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==" - "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" - "version" "2.1.0" + colors "^1.1.2" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== dependencies: - "slice-ansi" "^3.0.0" - "string-width" "^4.2.0" - -"cli-truncate@^3.1.0": - "integrity" "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==" - "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "slice-ansi" "^5.0.0" - "string-width" "^5.0.0" - -"cli-width@^3.0.0": - "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - "version" "3.0.0" - -"cliui@^5.0.0": - "integrity" "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "string-width" "^3.1.0" - "strip-ansi" "^5.2.0" - "wrap-ansi" "^5.1.0" - -"cliui@^7.0.2": - "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - "version" "7.0.4" - dependencies: - "string-width" "^4.2.0" - "strip-ansi" "^6.0.0" - "wrap-ansi" "^7.0.0" - -"cliui@^8.0.1": - "integrity" "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" - "version" "8.0.1" - dependencies: - "string-width" "^4.2.0" - "strip-ansi" "^6.0.1" - "wrap-ansi" "^7.0.0" - -"clone-deep@^4.0.1": - "integrity" "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==" - "resolved" "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "is-plain-object" "^2.0.4" - "kind-of" "^6.0.2" - "shallow-clone" "^3.0.0" - -"clone-response@^1.0.2": - "integrity" "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==" - "resolved" "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "mimic-response" "^1.0.0" - -"clone@^1.0.2": - "integrity" "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" - "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - "version" "1.0.4" - -"clone@^2.0.0", "clone@^2.1.1": - "integrity" "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" - "resolved" "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" - "version" "2.1.2" - -"cmd-shim@^5.0.0": - "integrity" "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==" - "resolved" "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "mkdirp-infer-owner" "^2.0.0" - -"co@^4.6.0": - "integrity" "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" - "resolved" "https://registry.npmjs.org/co/-/co-4.6.0.tgz" - "version" "4.6.0" - -"collect-v8-coverage@^1.0.0": - "integrity" "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" - "resolved" "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" - "version" "1.0.1" - -"color-convert@^1.9.0": - "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - "version" "1.9.3" - dependencies: - "color-name" "1.1.3" - -"color-convert@^2.0.1": - "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "color-name" "~1.1.4" - -"color-name@~1.1.4": - "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - "version" "1.1.4" - -"color-name@1.1.3": - "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - "version" "1.1.3" - -"color-support@^1.1.3": - "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - "version" "1.1.3" - -"colorette@^2.0.16": - "integrity" "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" - "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" - "version" "2.0.19" - -"colors@^1.1.2", "colors@1.4.0": - "integrity" "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - "resolved" "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" - "version" "1.4.0" - -"columnify@^1.6.0": - "integrity" "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==" - "resolved" "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz" - "version" "1.6.0" - dependencies: - "strip-ansi" "^6.0.1" - "wcwidth" "^1.0.0" - -"combined-stream@^1.0.6", "combined-stream@^1.0.8", "combined-stream@~1.0.6": - "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" - "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - "version" "1.0.8" - dependencies: - "delayed-stream" "~1.0.0" - -"command-exists@^1.2.8": - "integrity" "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - "resolved" "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" - "version" "1.2.9" - -"command-line-args@^5.1.1": - "integrity" "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==" - "resolved" "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz" - "version" "5.2.1" - dependencies: - "array-back" "^3.1.0" - "find-replace" "^3.0.0" - "lodash.camelcase" "^4.3.0" - "typical" "^4.0.0" - -"command-line-usage@^6.1.0": - "integrity" "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==" - "resolved" "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz" - "version" "6.1.3" - dependencies: - "array-back" "^4.0.2" - "chalk" "^2.4.2" - "table-layout" "^1.0.2" - "typical" "^5.2.0" - -"commander@^8.1.0": - "integrity" "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - "resolved" "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" - "version" "8.3.0" - -"commander@^9.3.0": - "integrity" "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==" - "resolved" "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz" - "version" "9.4.1" - -"commander@3.0.2": - "integrity" "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" - "resolved" "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz" - "version" "3.0.2" - -"common-ancestor-path@^1.0.1": - "integrity" "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==" - "resolved" "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz" - "version" "1.0.1" - -"compare-func@^2.0.0": - "integrity" "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==" - "resolved" "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "array-ify" "^1.0.0" - "dot-prop" "^5.1.0" - -"concat-map@0.0.1": - "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - "version" "0.0.1" - -"concat-stream@^1.6.0", "concat-stream@^1.6.2": - "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==" - "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" - "version" "1.6.2" - dependencies: - "buffer-from" "^1.0.0" - "inherits" "^2.0.3" - "readable-stream" "^2.2.2" - "typedarray" "^0.0.6" - -"concat-stream@^2.0.0": - "integrity" "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==" - "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "buffer-from" "^1.0.0" - "inherits" "^2.0.3" - "readable-stream" "^3.0.2" - "typedarray" "^0.0.6" - -"concurrently@^7.4.0": - "integrity" "sha512-5E3mwiS+i2JYBzr5BpXkFxOnleZTMsG+WnE/dCG4/P+oiVXrbmrBwJ2ozn4SxwB2EZDrKR568X+puVohxz3/Mg==" - "resolved" "https://registry.npmjs.org/concurrently/-/concurrently-7.5.0.tgz" - "version" "7.5.0" - dependencies: - "chalk" "^4.1.0" - "date-fns" "^2.29.1" - "lodash" "^4.17.21" - "rxjs" "^7.0.0" - "shell-quote" "^1.7.3" - "spawn-command" "^0.0.2-1" - "supports-color" "^8.1.0" - "tree-kill" "^1.2.2" - "yargs" "^17.3.1" - -"config-chain@^1.1.12": - "integrity" "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==" - "resolved" "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" - "version" "1.1.13" - dependencies: - "ini" "^1.3.4" - "proto-list" "~1.2.1" - -"console-control-strings@^1.1.0": - "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - "version" "1.1.0" - -"content-disposition@0.5.4": - "integrity" "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==" - "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" - "version" "0.5.4" - dependencies: - "safe-buffer" "5.2.1" - -"content-hash@^2.5.2": - "integrity" "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==" - "resolved" "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz" - "version" "2.5.2" - dependencies: - "cids" "^0.7.1" - "multicodec" "^0.5.5" - "multihashes" "^0.4.15" - -"content-type@~1.0.4": - "integrity" "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" - "version" "1.0.4" - -"conventional-changelog-angular@^5.0.12": - "integrity" "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==" - "resolved" "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz" - "version" "5.0.13" - dependencies: - "compare-func" "^2.0.0" - "q" "^1.5.1" - -"conventional-changelog-core@^4.2.4": - "integrity" "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==" - "resolved" "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz" - "version" "4.2.4" - dependencies: - "add-stream" "^1.0.0" - "conventional-changelog-writer" "^5.0.0" - "conventional-commits-parser" "^3.2.0" - "dateformat" "^3.0.0" - "get-pkg-repo" "^4.0.0" - "git-raw-commits" "^2.0.8" - "git-remote-origin-url" "^2.0.0" - "git-semver-tags" "^4.1.1" - "lodash" "^4.17.15" - "normalize-package-data" "^3.0.0" - "q" "^1.5.1" - "read-pkg" "^3.0.0" - "read-pkg-up" "^3.0.0" - "through2" "^4.0.0" - -"conventional-changelog-preset-loader@^2.3.4": - "integrity" "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==" - "resolved" "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz" - "version" "2.3.4" - -"conventional-changelog-writer@^5.0.0": - "integrity" "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==" - "resolved" "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "conventional-commits-filter" "^2.0.7" - "dateformat" "^3.0.0" - "handlebars" "^4.7.7" - "json-stringify-safe" "^5.0.1" - "lodash" "^4.17.15" - "meow" "^8.0.0" - "semver" "^6.0.0" - "split" "^1.0.0" - "through2" "^4.0.0" - -"conventional-commits-filter@^2.0.7": - "integrity" "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==" - "resolved" "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz" - "version" "2.0.7" - dependencies: - "lodash.ismatch" "^4.4.0" - "modify-values" "^1.0.0" - -"conventional-commits-parser@^3.2.0": - "integrity" "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==" - "resolved" "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz" - "version" "3.2.4" - dependencies: - "is-text-path" "^1.0.1" - "JSONStream" "^1.0.4" - "lodash" "^4.17.15" - "meow" "^8.0.0" - "split2" "^3.0.0" - "through2" "^4.0.0" - -"conventional-recommended-bump@^6.1.0": - "integrity" "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==" - "resolved" "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "concat-stream" "^2.0.0" - "conventional-changelog-preset-loader" "^2.3.4" - "conventional-commits-filter" "^2.0.7" - "conventional-commits-parser" "^3.2.0" - "git-raw-commits" "^2.0.8" - "git-semver-tags" "^4.1.1" - "meow" "^8.0.0" - "q" "^1.5.1" - -"convert-source-map@^1.4.0", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0": - "integrity" "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" - "version" "1.9.0" - -"cookie-signature@1.0.6": - "integrity" "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - "version" "1.0.6" - -"cookie@^0.4.1": - "integrity" "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" - "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - "version" "0.4.2" - -"cookie@0.5.0": - "integrity" "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" - "version" "0.5.0" - -"cookiejar@^2.1.1": - "integrity" "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" - "resolved" "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz" - "version" "2.1.3" - -"core-js-compat@^3.25.1": - "integrity" "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==" - "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz" - "version" "3.26.0" - dependencies: - "browserslist" "^4.21.4" - -"core-util-is@~1.0.0": - "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - "version" "1.0.3" - -"core-util-is@1.0.2": - "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - "version" "1.0.2" - -"cors@^2.8.1": - "integrity" "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==" - "resolved" "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" - "version" "2.8.5" - dependencies: - "object-assign" "^4" - "vary" "^1" - -"cosmiconfig@^7.0.0": - "integrity" "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==" - "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" - "version" "7.0.1" + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + 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-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +clone@^2.0.0, clone@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + +cmd-shim@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz" + integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== + dependencies: + mkdirp-infer-owner "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colorette@^2.0.16: + version "2.0.19" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +colors@1.4.0, colors@^1.1.2: + version "1.4.0" + resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +columnify@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +commander@^8.1.0: + version "8.3.0" + resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +commander@^9.3.0: + version "9.4.1" + resolved "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz" + integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== + +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.6.0, concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +concurrently@^7.4.0: + version "7.5.0" + resolved "https://registry.npmjs.org/concurrently/-/concurrently-7.5.0.tgz" + integrity sha512-5E3mwiS+i2JYBzr5BpXkFxOnleZTMsG+WnE/dCG4/P+oiVXrbmrBwJ2ozn4SxwB2EZDrKR568X+puVohxz3/Mg== + dependencies: + chalk "^4.1.0" + date-fns "^2.29.1" + lodash "^4.17.21" + rxjs "^7.0.0" + shell-quote "^1.7.3" + spawn-command "^0.0.2-1" + supports-color "^8.1.0" + tree-kill "^1.2.2" + yargs "^17.3.1" + +config-chain@^1.1.12: + version "1.1.13" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +conventional-changelog-angular@^5.0.12: + version "5.0.13" + resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz" + integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-core@^4.2.4: + version "4.2.4" + resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz" + integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^5.0.0" + conventional-commits-parser "^3.2.0" + dateformat "^3.0.0" + get-pkg-repo "^4.0.0" + git-raw-commits "^2.0.8" + git-remote-origin-url "^2.0.0" + git-semver-tags "^4.1.1" + lodash "^4.17.15" + normalize-package-data "^3.0.0" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^4.0.0" + +conventional-changelog-preset-loader@^2.3.4: + version "2.3.4" + resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz" + integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== + dependencies: + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" + +conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.2.0: + version "3.2.4" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +conventional-recommended-bump@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz" + integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.3.4" + conventional-commits-filter "^2.0.7" + conventional-commits-parser "^3.2.0" + git-raw-commits "^2.0.8" + git-semver-tags "^4.1.1" + meow "^8.0.0" + q "^1.5.1" + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cookiejar@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + +core-js-compat@^3.25.1: + version "3.26.0" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz" + integrity sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A== + dependencies: + browserslist "^4.21.4" + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@^2.8.1: + version "2.8.5" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== dependencies: "@types/parse-json" "^4.0.0" - "import-fresh" "^3.2.1" - "parse-json" "^5.0.0" - "path-type" "^4.0.0" - "yaml" "^1.10.0" - -"crc-32@^1.2.0": - "integrity" "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" - "resolved" "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" - "version" "1.2.2" - -"create-ecdh@^4.0.0": - "integrity" "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==" - "resolved" "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" - "version" "4.0.4" - dependencies: - "bn.js" "^4.1.0" - "elliptic" "^6.5.3" - -"create-hash@^1.1.0", "create-hash@^1.1.2", "create-hash@^1.2.0": - "integrity" "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==" - "resolved" "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "cipher-base" "^1.0.1" - "inherits" "^2.0.1" - "md5.js" "^1.3.4" - "ripemd160" "^2.0.1" - "sha.js" "^2.4.0" - -"create-hmac@^1.1.0", "create-hmac@^1.1.4", "create-hmac@^1.1.7": - "integrity" "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==" - "resolved" "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" - "version" "1.1.7" - dependencies: - "cipher-base" "^1.0.3" - "create-hash" "^1.1.0" - "inherits" "^2.0.1" - "ripemd160" "^2.0.0" - "safe-buffer" "^5.0.1" - "sha.js" "^2.4.8" - -"create-require@^1.1.0": - "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - "version" "1.1.1" - -"cross-fetch@^2.1.0": - "integrity" "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==" - "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz" - "version" "2.2.6" - dependencies: - "node-fetch" "^2.6.7" - "whatwg-fetch" "^2.0.4" - -"cross-fetch@^3.1.4": - "integrity" "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==" - "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" - "version" "3.1.5" - dependencies: - "node-fetch" "2.6.7" - -"cross-spawn@^6.0.0": - "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" - "version" "6.0.5" - dependencies: - "nice-try" "^1.0.4" - "path-key" "^2.0.1" - "semver" "^5.5.0" - "shebang-command" "^1.2.0" - "which" "^1.2.9" - -"cross-spawn@^7.0.2", "cross-spawn@^7.0.3": - "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - "version" "7.0.3" - dependencies: - "path-key" "^3.1.0" - "shebang-command" "^2.0.0" - "which" "^2.0.1" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-fetch@^2.1.0: + version "2.2.6" + resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz" + integrity sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA== + dependencies: + node-fetch "^2.6.7" + whatwg-fetch "^2.0.4" + +cross-fetch@^3.1.4: + version "3.1.5" + resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + 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" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" "crypt@>= 0.0.1": - "integrity" "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" - "resolved" "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" - "version" "0.0.2" - -"crypto-browserify@3.12.0": - "integrity" "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==" - "resolved" "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" - "version" "3.12.0" - dependencies: - "browserify-cipher" "^1.0.0" - "browserify-sign" "^4.0.0" - "create-ecdh" "^4.0.0" - "create-hash" "^1.1.0" - "create-hmac" "^1.1.0" - "diffie-hellman" "^5.0.0" - "inherits" "^2.0.1" - "pbkdf2" "^3.0.3" - "public-encrypt" "^4.0.0" - "randombytes" "^2.0.0" - "randomfill" "^1.0.3" - -"d@^1.0.1", "d@1": - "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==" - "resolved" "https://registry.npmjs.org/d/-/d-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "es5-ext" "^0.10.50" - "type" "^1.0.1" - -"dargs@^7.0.0": - "integrity" "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==" - "resolved" "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" - "version" "7.0.0" - -"dashdash@^1.12.0": - "integrity" "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==" - "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - "version" "1.14.1" - dependencies: - "assert-plus" "^1.0.0" - -"date-fns@^2.29.1": - "integrity" "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" - "resolved" "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" - "version" "2.29.3" - -"dateformat@^3.0.0": - "integrity" "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" - "resolved" "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" - "version" "3.0.3" - -"death@^1.1.0": - "integrity" "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==" - "resolved" "https://registry.npmjs.org/death/-/death-1.1.0.tgz" - "version" "1.1.0" - -"debug@^2.2.0": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@^4.3.2", "debug@^4.3.3", "debug@^4.3.4", "debug@4", "debug@4.3.4": - "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - "version" "4.3.4" - dependencies: - "ms" "2.1.2" - -"debug@2.6.9": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@3.2.6": - "integrity" "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" - "version" "3.2.6" - dependencies: - "ms" "^2.1.1" - -"debug@4.3.3": - "integrity" "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" - "version" "4.3.3" - dependencies: - "ms" "2.1.2" - -"debuglog@^1.0.1": - "integrity" "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==" - "resolved" "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" - "version" "1.0.1" - -"decamelize-keys@^1.1.0": - "integrity" "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==" - "resolved" "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "decamelize" "^1.1.0" - "map-obj" "^1.0.0" - -"decamelize@^1.1.0", "decamelize@^1.2.0": - "integrity" "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - "version" "1.2.0" - -"decamelize@^4.0.0": - "integrity" "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" - "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" - "version" "4.0.0" - -"decode-uri-component@^0.2.0": - "integrity" "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" - "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" - "version" "0.2.0" - -"decompress-response@^3.3.0": - "integrity" "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==" - "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "mimic-response" "^1.0.0" - -"decompress-response@^6.0.0": - "integrity" "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==" - "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "mimic-response" "^3.1.0" - -"dedent@^0.7.0": - "integrity" "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - "resolved" "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" - "version" "0.7.0" - -"deep-eql@^3.0.1": - "integrity" "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==" - "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "type-detect" "^4.0.0" - -"deep-eql@^4.0.1": - "integrity" "sha512-rc6HkZswtl+KMi/IODZ8k7C/P37clC2Rf1HYI11GqdbgvggIyHjsU5MdjlTlaP6eu24c0sR3mcW2SqsVZ1sXUw==" - "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "type-detect" "^4.0.0" - -"deep-extend@~0.6.0": - "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - "version" "0.6.0" - -"deep-is@^0.1.3", "deep-is@~0.1.3": - "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" - "version" "0.1.4" - -"deepmerge@^4.2.2": - "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - "version" "4.2.2" - -"defaults@^1.0.3": - "integrity" "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==" - "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "clone" "^1.0.2" - -"defer-to-connect@^1.0.1": - "integrity" "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" - "version" "1.1.3" - -"defer-to-connect@^2.0.0", "defer-to-connect@^2.0.1": - "integrity" "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" - "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" - "version" "2.0.1" - -"deferred-leveldown@~1.2.1": - "integrity" "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==" - "resolved" "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz" - "version" "1.2.2" - dependencies: - "abstract-leveldown" "~2.6.0" - -"define-lazy-prop@^2.0.0": - "integrity" "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - "resolved" "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" - "version" "2.0.0" - -"define-properties@^1.1.2", "define-properties@^1.1.3", "define-properties@^1.1.4": - "integrity" "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==" - "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" - "version" "1.1.4" - dependencies: - "has-property-descriptors" "^1.0.0" - "object-keys" "^1.1.1" - -"delayed-stream@~1.0.0": - "integrity" "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - "version" "1.0.0" - -"delegates@^1.0.0": - "integrity" "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - "version" "1.0.0" - -"depd@^1.1.2": - "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - "version" "1.1.2" - -"depd@2.0.0": - "integrity" "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - "resolved" "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - "version" "2.0.0" - -"deprecation@^2.0.0", "deprecation@^2.3.1": - "integrity" "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - "resolved" "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" - "version" "2.3.1" - -"des.js@^1.0.0": - "integrity" "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==" - "resolved" "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "inherits" "^2.0.1" - "minimalistic-assert" "^1.0.0" - -"destroy@1.2.0": - "integrity" "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - "version" "1.2.0" - -"detect-indent@^5.0.0": - "integrity" "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==" - "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" - "version" "5.0.0" - -"detect-indent@^6.0.0": - "integrity" "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==" - "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" - "version" "6.1.0" - -"detect-newline@^3.0.0": - "integrity" "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" - "resolved" "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" - "version" "3.1.0" - -"detect-port@^1.3.0": - "integrity" "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==" - "resolved" "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz" - "version" "1.5.1" - dependencies: - "address" "^1.0.1" - "debug" "4" - -"dezalgo@^1.0.0": - "integrity" "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==" - "resolved" "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "asap" "^2.0.0" - "wrappy" "1" - -"diff-sequences@^28.1.1": - "integrity" "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==" - "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" - "version" "28.1.1" - -"diff@^4.0.1": - "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - "version" "4.0.2" - -"diff@3.5.0": - "integrity" "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" - "resolved" "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" - "version" "3.5.0" - -"diff@5.0.0": - "integrity" "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" - "resolved" "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" - "version" "5.0.0" - -"diffie-hellman@^5.0.0": - "integrity" "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==" - "resolved" "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" - "version" "5.0.3" - dependencies: - "bn.js" "^4.1.0" - "miller-rabin" "^4.0.0" - "randombytes" "^2.0.0" - -"dir-glob@^3.0.1": - "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" - "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "path-type" "^4.0.0" - -"doctrine@^3.0.0": - "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "esutils" "^2.0.2" - -"dom-walk@^0.1.0": - "integrity" "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - "resolved" "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" - "version" "0.1.2" - -"dot-prop@^5.1.0": - "integrity" "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==" - "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" - "version" "5.3.0" - dependencies: - "is-obj" "^2.0.0" - -"dot-prop@^6.0.1": - "integrity" "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==" - "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "is-obj" "^2.0.0" - -"dotenv@~10.0.0": - "integrity" "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" - "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" - "version" "10.0.0" - -"duplexer@^0.1.1": - "integrity" "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - "resolved" "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" - "version" "0.1.2" - -"duplexer3@^0.1.4": - "integrity" "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" - "version" "0.1.5" - -"eastasianwidth@^0.2.0": - "integrity" "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - "resolved" "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - "version" "0.2.0" - -"ecc-jsbn@~0.1.1": - "integrity" "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==" - "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - "version" "0.1.2" - dependencies: - "jsbn" "~0.1.0" - "safer-buffer" "^2.1.0" - -"ee-first@1.1.1": - "integrity" "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - "version" "1.1.1" - -"ejs@^3.1.7": - "integrity" "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==" - "resolved" "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz" - "version" "3.1.8" - dependencies: - "jake" "^10.8.5" - -"electron-to-chromium@^1.4.251": - "integrity" "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz" - "version" "1.4.284" - -"elliptic@^6.4.0", "elliptic@^6.5.2", "elliptic@^6.5.3", "elliptic@^6.5.4", "elliptic@6.5.4": - "integrity" "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==" - "resolved" "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" - "version" "6.5.4" - dependencies: - "bn.js" "^4.11.9" - "brorand" "^1.1.0" - "hash.js" "^1.0.0" - "hmac-drbg" "^1.0.1" - "inherits" "^2.0.4" - "minimalistic-assert" "^1.0.1" - "minimalistic-crypto-utils" "^1.0.1" - -"emittery@^0.10.2": - "integrity" "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" - "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" - "version" "0.10.2" - -"emittery@0.10.0": - "integrity" "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==" - "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz" - "version" "0.10.0" - -"emoji-regex@^7.0.1": - "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" - "version" "7.0.3" - -"emoji-regex@^8.0.0": - "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - "version" "8.0.0" - -"emoji-regex@^9.2.2": - "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - "version" "9.2.2" - -"encode-utf8@^1.0.2": - "integrity" "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" - "resolved" "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz" - "version" "1.0.3" - -"encodeurl@~1.0.2": - "integrity" "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - "version" "1.0.2" - -"encoding@^0.1.0", "encoding@^0.1.13": - "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" - "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - "version" "0.1.13" - dependencies: - "iconv-lite" "^0.6.2" - -"end-of-stream@^1.1.0", "end-of-stream@^1.4.1", "end-of-stream@^1.4.4": - "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" - "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - "version" "1.4.4" - dependencies: - "once" "^1.4.0" - -"enquirer@^2.3.0", "enquirer@^2.3.6", "enquirer@>= 2.3.0 < 3", "enquirer@~2.3.6": - "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" - "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" - "version" "2.3.6" - dependencies: - "ansi-colors" "^4.1.1" - -"env-paths@^2.2.0": - "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" - "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - "version" "2.2.1" - -"envinfo@^7.7.4": - "integrity" "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" - "resolved" "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" - "version" "7.8.1" - -"err-code@^2.0.2": - "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" - "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" - "version" "2.0.3" - -"errno@~0.1.1": - "integrity" "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==" - "resolved" "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" - "version" "0.1.8" - dependencies: - "prr" "~1.0.1" - -"error-ex@^1.3.1": - "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" - "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "is-arrayish" "^0.2.1" - -"es-abstract@^1.19.0", "es-abstract@^1.19.2", "es-abstract@^1.19.5", "es-abstract@^1.20.0", "es-abstract@^1.20.1": - "integrity" "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==" - "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz" - "version" "1.20.4" - dependencies: - "call-bind" "^1.0.2" - "es-to-primitive" "^1.2.1" - "function-bind" "^1.1.1" - "function.prototype.name" "^1.1.5" - "get-intrinsic" "^1.1.3" - "get-symbol-description" "^1.0.0" - "has" "^1.0.3" - "has-property-descriptors" "^1.0.0" - "has-symbols" "^1.0.3" - "internal-slot" "^1.0.3" - "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-weakref" "^1.0.2" - "object-inspect" "^1.12.2" - "object-keys" "^1.1.1" - "object.assign" "^4.1.4" - "regexp.prototype.flags" "^1.4.3" - "safe-regex-test" "^1.0.0" - "string.prototype.trimend" "^1.0.5" - "string.prototype.trimstart" "^1.0.5" - "unbox-primitive" "^1.0.2" - -"es-array-method-boxes-properly@^1.0.0": - "integrity" "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - "resolved" "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" - "version" "1.0.0" - -"es-to-primitive@^1.2.1": - "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" - "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - "version" "1.2.1" - 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": - "integrity" "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==" - "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz" - "version" "0.10.62" - dependencies: - "es6-iterator" "^2.0.3" - "es6-symbol" "^3.1.3" - "next-tick" "^1.1.0" - -"es6-iterator@^2.0.3": - "integrity" "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==" - "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" - "version" "2.0.3" - dependencies: - "d" "1" - "es5-ext" "^0.10.35" - "es6-symbol" "^3.1.1" - -"es6-promise@^4.2.8": - "integrity" "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - "resolved" "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" - "version" "4.2.8" - -"es6-symbol@^3.1.1", "es6-symbol@^3.1.3": - "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==" - "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" - "version" "3.1.3" - dependencies: - "d" "^1.0.1" - "ext" "^1.1.2" - -"escalade@^3.1.1": - "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - "version" "3.1.1" - -"escape-html@~1.0.3": - "integrity" "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - "version" "1.0.3" - -"escape-string-regexp@^1.0.5", "escape-string-regexp@1.0.5": - "integrity" "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - "version" "1.0.5" - -"escape-string-regexp@^2.0.0": - "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - "version" "2.0.0" - -"escape-string-regexp@^4.0.0": - "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - "version" "4.0.0" - -"escape-string-regexp@4.0.0": - "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - "version" "4.0.0" - -"escodegen@1.8.x": - "integrity" "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==" - "resolved" "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz" - "version" "1.8.1" - dependencies: - "esprima" "^2.7.1" - "estraverse" "^1.9.1" - "esutils" "^2.0.2" - "optionator" "^0.8.1" + version "0.0.2" + resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +crypto-browserify@3.12.0: + version "3.12.0" + resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +date-fns@^2.29.1: + version "2.29.3" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" + integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +death@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/death/-/death-1.1.0.tgz" + integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== + +debug@2.6.9, debug@^2.2.0, debug@^2.6.9, debug@~2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.2.6: + version "3.2.6" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@4.3.3: + version "4.3.3" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +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" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" + integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== + +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" + integrity sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg== + 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.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + 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" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-eql@^4.0.1: + version "4.1.1" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.1.tgz" + integrity sha512-rc6HkZswtl+KMi/IODZ8k7C/P37clC2Rf1HYI11GqdbgvggIyHjsU5MdjlTlaP6eu24c0sR3mcW2SqsVZ1sXUw== + dependencies: + type-detect "^4.0.0" + +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +deferred-leveldown@~1.2.1: + version "1.2.2" + resolved "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz" + integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA== + dependencies: + abstract-leveldown "~2.6.0" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + 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" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +detect-indent@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-port@^1.3.0: + version "1.5.1" + resolved "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz" + integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== + dependencies: + address "^1.0.1" + debug "4" + +dezalgo@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + dependencies: + asap "^2.0.0" + wrappy "1" + +diff-sequences@^28.1.1: + version "28.1.1" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" + integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== + +diff@3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + 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.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dot-prop@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== + dependencies: + is-obj "^2.0.0" + +dotenv@~10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.7: + version "3.1.8" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz" + integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.251: + version "1.4.284" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz" + integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== + +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@0.10.0: + version "0.10.0" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz" + integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== + +emittery@^0.10.2: + version "0.10.2" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + 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" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1, end-of-stream@^1.4.4: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.0, enquirer@^2.3.6, enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +envinfo@^7.7.4: + version "7.8.1" + resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +errno@~0.1.1: + version "0.1.8" + resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.0, es-abstract@^1.20.1: + version "1.20.4" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + 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-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + 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" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +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" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz" + integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" optionalDependencies: - "source-map" "~0.2.0" - -"eslint-config-prettier@^8.5.0": - "integrity" "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==" - "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" - "version" "8.5.0" - -"eslint-plugin-prettier@^4.0.0": - "integrity" "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==" - "resolved" "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "prettier-linter-helpers" "^1.0.0" - -"eslint-scope@^5.1.1": - "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "esrecurse" "^4.3.0" - "estraverse" "^4.1.1" - -"eslint-scope@^7.1.1": - "integrity" "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - "version" "7.1.1" - dependencies: - "esrecurse" "^4.3.0" - "estraverse" "^5.2.0" - -"eslint-utils@^3.0.0": - "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" - "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "eslint-visitor-keys" "^2.0.0" - -"eslint-visitor-keys@^2.0.0": - "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - "version" "2.1.0" - -"eslint-visitor-keys@^3.3.0": - "integrity" "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" - "version" "3.3.0" - -"eslint@*", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^8.12.0", "eslint@>=5", "eslint@>=7.0.0", "eslint@>=7.28.0": - "integrity" "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz" - "version" "8.26.0" + source-map "~0.2.0" + +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-module-utils@^2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-prettier@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.12.0: + version "8.26.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz" + integrity sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg== dependencies: "@eslint/eslintrc" "^1.3.3" "@humanwhocodes/config-array" "^0.11.6" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - "ajv" "^6.10.0" - "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.1.1" - "eslint-utils" "^3.0.0" - "eslint-visitor-keys" "^3.3.0" - "espree" "^9.4.0" - "esquery" "^1.4.0" - "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.15.0" - "grapheme-splitter" "^1.0.4" - "ignore" "^5.2.0" - "import-fresh" "^3.0.0" - "imurmurhash" "^0.1.4" - "is-glob" "^4.0.0" - "is-path-inside" "^3.0.3" - "js-sdsl" "^4.1.4" - "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.1" - "regexpp" "^3.2.0" - "strip-ansi" "^6.0.1" - "strip-json-comments" "^3.1.0" - "text-table" "^0.2.0" - -"espree@^9.4.0": - "integrity" "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==" - "resolved" "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz" - "version" "9.4.0" - dependencies: - "acorn" "^8.8.0" - "acorn-jsx" "^5.3.2" - "eslint-visitor-keys" "^3.3.0" - -"esprima@^2.7.1", "esprima@2.7.x": - "integrity" "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==" - "resolved" "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" - "version" "2.7.3" - -"esprima@^4.0.0": - "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - "version" "4.0.1" - -"esquery@^1.0.1", "esquery@^1.4.0": - "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" - "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "estraverse" "^5.1.0" - -"esrecurse@^4.3.0": - "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" - "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "estraverse" "^5.2.0" - -"estraverse@^1.9.1": - "integrity" "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz" - "version" "1.9.3" - -"estraverse@^4.1.1": - "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - "version" "4.3.0" - -"estraverse@^5.1.0", "estraverse@^5.2.0": - "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - "version" "5.3.0" - -"esutils@^2.0.2": - "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - "version" "2.0.3" - -"etag@~1.8.1": - "integrity" "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - "version" "1.8.1" - -"eth-block-tracker@^4.4.2": - "integrity" "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==" - "resolved" "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz" - "version" "4.4.3" + ajv "^6.10.0" + 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.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + 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.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + 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.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.0" + resolved "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz" + integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esprima@2.7.x, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" + integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1, esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz" + integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eth-block-tracker@^4.4.2: + version "4.4.3" + resolved "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz" + integrity sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw== dependencies: "@babel/plugin-transform-runtime" "^7.5.5" "@babel/runtime" "^7.5.5" - "eth-query" "^2.1.0" - "json-rpc-random-id" "^1.0.1" - "pify" "^3.0.0" - "safe-event-emitter" "^1.0.1" + eth-query "^2.1.0" + json-rpc-random-id "^1.0.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" -"eth-ens-namehash@2.0.8": - "integrity" "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==" - "resolved" "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz" - "version" "2.0.8" +eth-ens-namehash@2.0.8: + version "2.0.8" + resolved "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz" + integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== dependencies: - "idna-uts46-hx" "^2.3.1" - "js-sha3" "^0.5.7" + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" -"eth-gas-reporter@^0.2.24", "eth-gas-reporter@^0.2.25": - "integrity" "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==" - "resolved" "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz" - "version" "0.2.25" +eth-gas-reporter@^0.2.24, eth-gas-reporter@^0.2.25: + version "0.2.25" + resolved "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz" + integrity sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ== dependencies: "@ethersproject/abi" "^5.0.0-beta.146" "@solidity-parser/parser" "^0.14.0" - "cli-table3" "^0.5.0" - "colors" "1.4.0" - "ethereum-cryptography" "^1.0.3" - "ethers" "^4.0.40" - "fs-readdir-recursive" "^1.1.0" - "lodash" "^4.17.14" - "markdown-table" "^1.1.3" - "mocha" "^7.1.1" - "req-cwd" "^2.0.0" - "request" "^2.88.0" - "request-promise-native" "^1.0.5" - "sha1" "^1.1.1" - "sync-request" "^6.0.0" - -"eth-json-rpc-filters@^4.2.1": - "integrity" "sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==" - "resolved" "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz" - "version" "4.2.2" + cli-table3 "^0.5.0" + colors "1.4.0" + ethereum-cryptography "^1.0.3" + ethers "^4.0.40" + fs-readdir-recursive "^1.1.0" + lodash "^4.17.14" + markdown-table "^1.1.3" + mocha "^7.1.1" + req-cwd "^2.0.0" + request "^2.88.0" + request-promise-native "^1.0.5" + sha1 "^1.1.1" + sync-request "^6.0.0" + +eth-json-rpc-filters@^4.2.1: + version "4.2.2" + resolved "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz" + integrity sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw== dependencies: "@metamask/safe-event-emitter" "^2.0.0" - "async-mutex" "^0.2.6" - "eth-json-rpc-middleware" "^6.0.0" - "eth-query" "^2.1.2" - "json-rpc-engine" "^6.1.0" - "pify" "^5.0.0" - -"eth-json-rpc-infura@^5.1.0": - "integrity" "sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow==" - "resolved" "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "eth-json-rpc-middleware" "^6.0.0" - "eth-rpc-errors" "^3.0.0" - "json-rpc-engine" "^5.3.0" - "node-fetch" "^2.6.0" - -"eth-json-rpc-middleware@^6.0.0": - "integrity" "sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==" - "resolved" "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "btoa" "^1.2.1" - "clone" "^2.1.1" - "eth-query" "^2.1.2" - "eth-rpc-errors" "^3.0.0" - "eth-sig-util" "^1.4.2" - "ethereumjs-util" "^5.1.2" - "json-rpc-engine" "^5.3.0" - "json-stable-stringify" "^1.0.1" - "node-fetch" "^2.6.1" - "pify" "^3.0.0" - "safe-event-emitter" "^1.0.1" - -"eth-lib@^0.1.26": - "integrity" "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==" - "resolved" "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz" - "version" "0.1.29" - dependencies: - "bn.js" "^4.11.6" - "elliptic" "^6.4.0" - "nano-json-stream-parser" "^0.1.2" - "servify" "^0.1.12" - "ws" "^3.0.0" - "xhr-request-promise" "^0.1.2" - -"eth-lib@0.2.8": - "integrity" "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==" - "resolved" "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz" - "version" "0.2.8" - dependencies: - "bn.js" "^4.11.6" - "elliptic" "^6.4.0" - "xhr-request-promise" "^0.1.2" - -"eth-query@^2.1.0", "eth-query@^2.1.2": - "integrity" "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==" - "resolved" "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "json-rpc-random-id" "^1.0.0" - "xtend" "^4.0.1" - -"eth-rpc-errors@^3.0.0": - "integrity" "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==" - "resolved" "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "fast-safe-stringify" "^2.0.6" - -"eth-rpc-errors@^4.0.2": - "integrity" "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==" - "resolved" "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "fast-safe-stringify" "^2.0.6" - -"eth-rpc-errors@^4.0.3": - "integrity" "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==" - "resolved" "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "fast-safe-stringify" "^2.0.6" - -"eth-sig-util@^1.4.2": - "integrity" "sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw==" - "resolved" "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz" - "version" "1.4.2" - dependencies: - "ethereumjs-abi" "git+https://github.com/ethereumjs/ethereumjs-abi.git" - "ethereumjs-util" "^5.1.1" - -"ethereum-bloom-filters@^1.0.6": - "integrity" "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==" - "resolved" "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "js-sha3" "^0.8.0" - -"ethereum-common@^0.0.18": - "integrity" "sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==" - "resolved" "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz" - "version" "0.0.18" - -"ethereum-common@0.2.0": - "integrity" "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" - "resolved" "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz" - "version" "0.2.0" - -"ethereum-cryptography@^0.1.3", "ethereum-cryptography@0.1.3": - "integrity" "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==" - "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz" - "version" "0.1.3" + async-mutex "^0.2.6" + eth-json-rpc-middleware "^6.0.0" + eth-query "^2.1.2" + json-rpc-engine "^6.1.0" + pify "^5.0.0" + +eth-json-rpc-infura@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz" + integrity sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow== + dependencies: + eth-json-rpc-middleware "^6.0.0" + eth-rpc-errors "^3.0.0" + json-rpc-engine "^5.3.0" + node-fetch "^2.6.0" + +eth-json-rpc-middleware@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz" + integrity sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ== + dependencies: + btoa "^1.2.1" + clone "^2.1.1" + eth-query "^2.1.2" + eth-rpc-errors "^3.0.0" + eth-sig-util "^1.4.2" + ethereumjs-util "^5.1.2" + json-rpc-engine "^5.3.0" + json-stable-stringify "^1.0.1" + node-fetch "^2.6.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +eth-query@^2.1.0, eth-query@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz" + integrity sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA== + dependencies: + json-rpc-random-id "^1.0.0" + xtend "^4.0.1" + +eth-rpc-errors@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz" + integrity sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-rpc-errors@^4.0.2, eth-rpc-errors@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz" + integrity sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-sig-util@^1.4.2: + version "1.4.2" + resolved "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz" + integrity sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw== + dependencies: + ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" + ethereumjs-util "^5.1.1" + +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" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + dependencies: + js-sha3 "^0.8.0" + +ethereum-common@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz" + integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA== + +ethereum-common@^0.0.18: + version "0.0.18" + resolved "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz" + integrity sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ== + +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" + 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" - "create-hash" "^1.2.0" - "create-hmac" "^1.1.7" - "hash.js" "^1.1.7" - "keccak" "^3.0.0" - "pbkdf2" "^3.0.17" - "randombytes" "^2.1.0" - "safe-buffer" "^5.1.2" - "scrypt-js" "^3.0.0" - "secp256k1" "^4.0.1" - "setimmediate" "^1.0.5" - -"ethereum-cryptography@^1.0.3": - "integrity" "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==" - "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "@noble/hashes" "1.1.2" - "@noble/secp256k1" "1.6.3" - "@scure/bip32" "1.1.0" - "@scure/bip39" "1.1.0" - -"ethereum-cryptography@1.1.2": - "integrity" "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==" - "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" - "version" "1.1.2" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@1.1.2, ethereum-cryptography@^1.0.3: + version "1.1.2" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" + integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== dependencies: "@noble/hashes" "1.1.2" "@noble/secp256k1" "1.6.3" "@scure/bip32" "1.1.0" "@scure/bip39" "1.1.0" -"ethereum-protocol@^1.0.1": - "integrity" "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==" - "resolved" "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz" - "version" "1.0.1" +ethereum-protocol@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz" + integrity sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg== -"ethereumjs-abi@^0.6.8": - "integrity" "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==" - "resolved" "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz" - "version" "0.6.8" +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== dependencies: - "bn.js" "^4.11.8" - "ethereumjs-util" "^6.0.0" + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": - "version" "0.6.8" - dependencies: - "bn.js" "^4.11.8" - "ethereumjs-util" "^6.0.0" - -"ethereumjs-account@^2.0.3": - "integrity" "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==" - "resolved" "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz" - "version" "2.0.5" - dependencies: - "ethereumjs-util" "^5.0.0" - "rlp" "^2.0.0" - "safe-buffer" "^5.1.1" - -"ethereumjs-block@^1.2.2": - "integrity" "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==" - "resolved" "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz" - "version" "1.7.1" - dependencies: - "async" "^2.0.1" - "ethereum-common" "0.2.0" - "ethereumjs-tx" "^1.2.2" - "ethereumjs-util" "^5.0.0" - "merkle-patricia-tree" "^2.1.2" - -"ethereumjs-block@~2.2.0": - "integrity" "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==" - "resolved" "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz" - "version" "2.2.2" - dependencies: - "async" "^2.0.1" - "ethereumjs-common" "^1.5.0" - "ethereumjs-tx" "^2.1.1" - "ethereumjs-util" "^5.0.0" - "merkle-patricia-tree" "^2.1.2" - -"ethereumjs-common@^1.1.0", "ethereumjs-common@^1.5.0": - "integrity" "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==" - "resolved" "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz" - "version" "1.5.2" - -"ethereumjs-tx@^1.2.2": - "integrity" "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==" - "resolved" "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz" - "version" "1.3.7" - dependencies: - "ethereum-common" "^0.0.18" - "ethereumjs-util" "^5.0.0" - -"ethereumjs-tx@^2.1.1": - "integrity" "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==" - "resolved" "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "ethereumjs-common" "^1.5.0" - "ethereumjs-util" "^6.0.0" - -"ethereumjs-util@^5.0.0": - "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" - "version" "5.2.1" - dependencies: - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "^0.1.3" - "rlp" "^2.0.0" - "safe-buffer" "^5.1.1" - -"ethereumjs-util@^5.1.1": - "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" - "version" "5.2.1" - dependencies: - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "^0.1.3" - "rlp" "^2.0.0" - "safe-buffer" "^5.1.1" - -"ethereumjs-util@^5.1.2": - "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" - "version" "5.2.1" - dependencies: - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "^0.1.3" - "rlp" "^2.0.0" - "safe-buffer" "^5.1.1" - -"ethereumjs-util@^5.1.5": - "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" - "version" "5.2.1" - dependencies: - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "^0.1.3" - "rlp" "^2.0.0" - "safe-buffer" "^5.1.1" - -"ethereumjs-util@^6.0.0": - "integrity" "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" - "version" "6.2.1" - dependencies: - "@types/bn.js" "^4.11.3" - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "0.1.6" - "rlp" "^2.2.3" - -"ethereumjs-util@^6.2.1": - "integrity" "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" - "version" "6.2.1" + version "0.6.8" + resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0" + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-account@^2.0.3: + version "2.0.5" + resolved "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz" + integrity sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA== + dependencies: + ethereumjs-util "^5.0.0" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-block@^1.2.2: + version "1.7.1" + resolved "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz" + integrity sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg== + dependencies: + async "^2.0.1" + ethereum-common "0.2.0" + ethereumjs-tx "^1.2.2" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-block@~2.2.0: + version "2.2.2" + resolved "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz" + integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== + dependencies: + async "^2.0.1" + ethereumjs-common "^1.5.0" + ethereumjs-tx "^2.1.1" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-common@^1.1.0, ethereumjs-common@^1.5.0: + version "1.5.2" + resolved "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz" + integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== + +ethereumjs-tx@^1.2.2: + version "1.3.7" + resolved "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz" + integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== + dependencies: + ethereum-common "^0.0.18" + ethereumjs-util "^5.0.0" + +ethereumjs-tx@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz" + integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== + dependencies: + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.0.0" + +ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== dependencies: "@types/bn.js" "^4.11.3" - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "0.1.6" - "rlp" "^2.2.3" - -"ethereumjs-util@^7.0.10", "ethereumjs-util@^7.1.0", "ethereumjs-util@^7.1.2", "ethereumjs-util@^7.1.4", "ethereumjs-util@^7.1.5": - "integrity" "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz" - "version" "7.1.5" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^5.0.0, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.5: + version "5.2.1" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" + integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== + dependencies: + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "^0.1.3" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== dependencies: "@types/bn.js" "^5.1.0" - "bn.js" "^5.1.2" - "create-hash" "^1.1.2" - "ethereum-cryptography" "^0.1.3" - "rlp" "^2.2.4" - -"ethereumjs-util@6.2.1": - "integrity" "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" - "version" "6.2.1" - dependencies: - "@types/bn.js" "^4.11.3" - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "0.1.6" - "rlp" "^2.2.3" - -"ethereumjs-vm@^2.3.4": - "integrity" "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==" - "resolved" "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz" - "version" "2.6.0" - dependencies: - "async" "^2.1.2" - "async-eventemitter" "^0.2.2" - "ethereumjs-account" "^2.0.3" - "ethereumjs-block" "~2.2.0" - "ethereumjs-common" "^1.1.0" - "ethereumjs-util" "^6.0.0" - "fake-merkle-patricia-tree" "^1.0.1" - "functional-red-black-tree" "^1.0.1" - "merkle-patricia-tree" "^2.3.2" - "rustbn.js" "~0.2.0" - "safe-buffer" "^5.1.1" - -"ethereumjs-wallet@^1.0.1": - "integrity" "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==" - "resolved" "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "aes-js" "^3.1.2" - "bs58check" "^2.1.2" - "ethereum-cryptography" "^0.1.3" - "ethereumjs-util" "^7.1.2" - "randombytes" "^2.1.0" - "scrypt-js" "^3.0.1" - "utf8" "^3.0.0" - "uuid" "^8.3.2" - -"ethers@^4.0.32": - "integrity" "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==" - "resolved" "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz" - "version" "4.0.49" - dependencies: - "aes-js" "3.0.0" - "bn.js" "^4.11.9" - "elliptic" "6.5.4" - "hash.js" "1.1.3" - "js-sha3" "0.5.7" - "scrypt-js" "2.0.4" - "setimmediate" "1.0.4" - "uuid" "2.0.1" - "xmlhttprequest" "1.8.0" - -"ethers@^4.0.40": - "integrity" "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==" - "resolved" "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz" - "version" "4.0.49" - dependencies: - "aes-js" "3.0.0" - "bn.js" "^4.11.9" - "elliptic" "6.5.4" - "hash.js" "1.1.3" - "js-sha3" "0.5.7" - "scrypt-js" "2.0.4" - "setimmediate" "1.0.4" - "uuid" "2.0.1" - "xmlhttprequest" "1.8.0" - -"ethers@^5", "ethers@^5.0.0", "ethers@^5.1.3", "ethers@^5.4.7", "ethers@^5.5.2", "ethers@^5.5.3", "ethers@^5.6.8", "ethers@^5.6.9", "ethers@^5.7.0", "ethers@^5.7.1": - "integrity" "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==" - "resolved" "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" - "version" "5.7.2" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethereumjs-vm@^2.3.4: + version "2.6.0" + resolved "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz" + integrity sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw== + dependencies: + async "^2.1.2" + async-eventemitter "^0.2.2" + ethereumjs-account "^2.0.3" + ethereumjs-block "~2.2.0" + ethereumjs-common "^1.1.0" + ethereumjs-util "^6.0.0" + fake-merkle-patricia-tree "^1.0.1" + functional-red-black-tree "^1.0.1" + merkle-patricia-tree "^2.3.2" + rustbn.js "~0.2.0" + safe-buffer "^5.1.1" + +ethereumjs-wallet@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz" + integrity sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA== + dependencies: + aes-js "^3.1.2" + bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" + ethereumjs-util "^7.1.2" + randombytes "^2.1.0" + scrypt-js "^3.0.1" + utf8 "^3.0.0" + uuid "^8.3.2" + +ethers@^4.0.32, ethers@^4.0.40: + version "4.0.49" + resolved "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz" + integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== + dependencies: + aes-js "3.0.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.4" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + +ethers@^5.5.2, ethers@^5.5.3, ethers@^5.6.8, ethers@^5.6.9, ethers@^5.7.0, ethers@^5.7.1: + version "5.7.2" + resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== dependencies: "@ethersproject/abi" "5.7.0" "@ethersproject/abstract-provider" "5.7.0" @@ -6156,1020 +6144,986 @@ "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" -"ethjs-unit@0.1.6": - "integrity" "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==" - "resolved" "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz" - "version" "0.1.6" - dependencies: - "bn.js" "4.11.6" - "number-to-bn" "1.7.0" - -"ethjs-util@^0.1.3", "ethjs-util@^0.1.6", "ethjs-util@0.1.6": - "integrity" "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==" - "resolved" "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz" - "version" "0.1.6" - dependencies: - "is-hex-prefixed" "1.0.0" - "strip-hex-prefix" "1.0.0" - -"event-target-shim@^5.0.0": - "integrity" "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - "resolved" "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" - "version" "5.0.1" - -"eventemitter3@^4.0.4": - "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" - "version" "4.0.7" - -"eventemitter3@4.0.4": - "integrity" "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" - "version" "4.0.4" - -"events@^3.0.0", "events@^3.3.0": - "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" - "version" "3.3.0" - -"evp_bytestokey@^1.0.0", "evp_bytestokey@^1.0.3": - "integrity" "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==" - "resolved" "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "md5.js" "^1.3.4" - "safe-buffer" "^5.1.1" - -"execa@^1.0.0": - "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" - "resolved" "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "cross-spawn" "^6.0.0" - "get-stream" "^4.0.0" - "is-stream" "^1.1.0" - "npm-run-path" "^2.0.0" - "p-finally" "^1.0.0" - "signal-exit" "^3.0.0" - "strip-eof" "^1.0.0" - -"execa@^5.0.0", "execa@^5.1.1": - "integrity" "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==" - "resolved" "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "cross-spawn" "^7.0.3" - "get-stream" "^6.0.0" - "human-signals" "^2.1.0" - "is-stream" "^2.0.0" - "merge-stream" "^2.0.0" - "npm-run-path" "^4.0.1" - "onetime" "^5.1.2" - "signal-exit" "^3.0.3" - "strip-final-newline" "^2.0.0" - -"exit@^0.1.2": - "integrity" "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" - "resolved" "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - "version" "0.1.2" - -"expect@^28.0.0", "expect@^28.1.3": - "integrity" "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==" - "resolved" "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz" - "version" "28.1.3" +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0, events@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^5.0.0, execa@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^28.0.0, expect@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== dependencies: "@jest/expect-utils" "^28.1.3" - "jest-get-type" "^28.0.2" - "jest-matcher-utils" "^28.1.3" - "jest-message-util" "^28.1.3" - "jest-util" "^28.1.3" - -"express@^4.14.0": - "integrity" "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==" - "resolved" "https://registry.npmjs.org/express/-/express-4.18.2.tgz" - "version" "4.18.2" - dependencies: - "accepts" "~1.3.8" - "array-flatten" "1.1.1" - "body-parser" "1.20.1" - "content-disposition" "0.5.4" - "content-type" "~1.0.4" - "cookie" "0.5.0" - "cookie-signature" "1.0.6" - "debug" "2.6.9" - "depd" "2.0.0" - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "etag" "~1.8.1" - "finalhandler" "1.2.0" - "fresh" "0.5.2" - "http-errors" "2.0.0" - "merge-descriptors" "1.0.1" - "methods" "~1.1.2" - "on-finished" "2.4.1" - "parseurl" "~1.3.3" - "path-to-regexp" "0.1.7" - "proxy-addr" "~2.0.7" - "qs" "6.11.0" - "range-parser" "~1.2.1" - "safe-buffer" "5.2.1" - "send" "0.18.0" - "serve-static" "1.15.0" - "setprototypeof" "1.2.0" - "statuses" "2.0.1" - "type-is" "~1.6.18" - "utils-merge" "1.0.1" - "vary" "~1.1.2" - -"ext@^1.1.2": - "integrity" "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==" - "resolved" "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" - "version" "1.7.0" - dependencies: - "type" "^2.7.2" - -"extend@~3.0.2": - "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - "version" "3.0.2" - -"external-editor@^3.0.3": - "integrity" "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==" - "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "chardet" "^0.7.0" - "iconv-lite" "^0.4.24" - "tmp" "^0.0.33" - -"extsprintf@^1.2.0": - "integrity" "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==" - "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz" - "version" "1.4.1" - -"extsprintf@1.3.0": - "integrity" "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - "version" "1.3.0" - -"fake-merkle-patricia-tree@^1.0.1": - "integrity" "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==" - "resolved" "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "checkpoint-store" "^1.1.0" - -"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": - "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - "version" "3.1.3" - -"fast-diff@^1.1.2": - "integrity" "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" - "resolved" "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" - "version" "1.2.0" - -"fast-glob@^3.0.3", "fast-glob@^3.2.9": - "integrity" "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==" - "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" - "version" "3.2.12" + jest-get-type "^28.0.2" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + +express@^4.14.0: + version "4.18.2" + resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.7.0" + resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fake-merkle-patricia-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz" + integrity sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA== + dependencies: + checkpoint-store "^1.1.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== 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" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" -"fast-glob@3.2.7": - "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==" - "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" - "version" "3.2.7" +fast-glob@^3.0.3, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 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": - "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - "version" "2.1.0" - -"fast-levenshtein@^2.0.6", "fast-levenshtein@~2.0.6": - "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - "version" "2.0.6" - -"fast-safe-stringify@^2.0.6", "fast-safe-stringify@^2.1.1": - "integrity" "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - "resolved" "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" - "version" "2.1.1" - -"fastq@^1.6.0": - "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==" - "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" - "version" "1.13.0" - dependencies: - "reusify" "^1.0.4" - -"fb-watchman@^2.0.0": - "integrity" "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==" - "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "bser" "2.1.1" - -"figures@^3.0.0", "figures@3.2.0": - "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" - "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "escape-string-regexp" "^1.0.5" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" -"file-entry-cache@^6.0.1": - "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" - "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "flat-cache" "^3.0.4" +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -"filelist@^1.0.1": - "integrity" "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==" - "resolved" "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "minimatch" "^5.0.1" +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -"fill-range@^7.0.1": - "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "to-regex-range" "^5.0.1" +fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== -"finalhandler@1.2.0": - "integrity" "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==" - "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" - "version" "1.2.0" +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: - "debug" "2.6.9" - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "on-finished" "2.4.1" - "parseurl" "~1.3.3" - "statuses" "2.0.1" - "unpipe" "~1.0.0" + reusify "^1.0.4" -"find-replace@^3.0.0": - "integrity" "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==" - "resolved" "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz" - "version" "3.0.0" +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: - "array-back" "^3.0.1" + bser "2.1.1" -"find-up@^2.0.0": - "integrity" "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" - "version" "2.1.0" +figures@3.2.0, figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: - "locate-path" "^2.0.0" - -"find-up@^2.1.0": - "integrity" "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" - "version" "2.1.0" + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: - "locate-path" "^2.0.0" + flat-cache "^3.0.4" -"find-up@^3.0.0", "find-up@3.0.0": - "integrity" "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "locate-path" "^3.0.0" +filelist@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" -"find-up@^4.0.0": - "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "locate-path" "^5.0.0" - "path-exists" "^4.0.0" - -"find-up@^4.1.0": - "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - "version" "4.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: - "locate-path" "^5.0.0" - "path-exists" "^4.0.0" + to-regex-range "^5.0.1" -"find-up@^5.0.0": - "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - "version" "5.0.0" +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: - "locate-path" "^6.0.0" - "path-exists" "^4.0.0" + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" -"find-up@5.0.0": - "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - "version" "5.0.0" +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== dependencies: - "locate-path" "^6.0.0" - "path-exists" "^4.0.0" - -"flat-cache@^3.0.4": - "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" - "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "flatted" "^3.1.0" - "rimraf" "^3.0.2" - -"flat@^4.1.0": - "integrity" "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==" - "resolved" "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "is-buffer" "~2.0.3" - -"flat@^5.0.2": - "integrity" "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" - "resolved" "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" - "version" "5.0.2" - -"flatted@^3.1.0": - "integrity" "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" - "version" "3.2.7" - -"fmix@^0.1.0": - "integrity" "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==" - "resolved" "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz" - "version" "0.1.0" - dependencies: - "imul" "^1.0.0" - -"follow-redirects@^1.12.1", "follow-redirects@^1.14.0", "follow-redirects@^1.15.0": - "integrity" "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" - "version" "1.15.2" - -"for-each@^0.3.3": - "integrity" "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==" - "resolved" "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - "version" "0.3.3" - dependencies: - "is-callable" "^1.1.3" - -"forever-agent@~0.6.1": - "integrity" "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" - "resolved" "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" - "version" "0.6.1" - -"form-data-encoder@1.7.1": - "integrity" "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" - "resolved" "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz" - "version" "1.7.1" - -"form-data@^2.2.0": - "integrity" "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==" - "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz" - "version" "2.5.1" - dependencies: - "asynckit" "^0.4.0" - "combined-stream" "^1.0.6" - "mime-types" "^2.1.12" - -"form-data@^3.0.0": - "integrity" "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==" - "resolved" "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "asynckit" "^0.4.0" - "combined-stream" "^1.0.8" - "mime-types" "^2.1.12" - -"form-data@^4.0.0": - "integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==" - "resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "asynckit" "^0.4.0" - "combined-stream" "^1.0.8" - "mime-types" "^2.1.12" - -"form-data@~2.3.2": - "integrity" "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==" - "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" - "version" "2.3.3" - dependencies: - "asynckit" "^0.4.0" - "combined-stream" "^1.0.6" - "mime-types" "^2.1.12" - -"forwarded@0.2.0": - "integrity" "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" - "version" "0.2.0" - -"fp-ts@^1.0.0": - "integrity" "sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A==" - "resolved" "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz" - "version" "1.19.5" - -"fp-ts@1.19.3": - "integrity" "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" - "resolved" "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" - "version" "1.19.3" - -"fresh@0.5.2": - "integrity" "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - "version" "0.5.2" - -"fs-constants@^1.0.0": - "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - "version" "1.0.0" - -"fs-extra@^0.30.0": - "integrity" "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz" - "version" "0.30.0" - dependencies: - "graceful-fs" "^4.1.2" - "jsonfile" "^2.1.0" - "klaw" "^1.0.0" - "path-is-absolute" "^1.0.0" - "rimraf" "^2.2.8" - -"fs-extra@^10.0.0": - "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - "version" "10.1.0" - dependencies: - "graceful-fs" "^4.2.0" - "jsonfile" "^6.0.1" - "universalify" "^2.0.0" - -"fs-extra@^10.1.0": - "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - "version" "10.1.0" - dependencies: - "graceful-fs" "^4.2.0" - "jsonfile" "^6.0.1" - "universalify" "^2.0.0" - -"fs-extra@^4.0.2": - "integrity" "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "graceful-fs" "^4.1.2" - "jsonfile" "^4.0.0" - "universalify" "^0.1.0" - -"fs-extra@^7.0.0": - "integrity" "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "graceful-fs" "^4.1.2" - "jsonfile" "^4.0.0" - "universalify" "^0.1.0" - -"fs-extra@^7.0.1": - "integrity" "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "graceful-fs" "^4.1.2" - "jsonfile" "^4.0.0" - "universalify" "^0.1.0" - -"fs-extra@^8.1.0": - "integrity" "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" - "version" "8.1.0" - dependencies: - "graceful-fs" "^4.2.0" - "jsonfile" "^4.0.0" - "universalify" "^0.1.0" - -"fs-extra@^9.1.0": - "integrity" "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - "version" "9.1.0" - dependencies: - "at-least-node" "^1.0.0" - "graceful-fs" "^4.2.0" - "jsonfile" "^6.0.1" - "universalify" "^2.0.0" - -"fs-minipass@^1.2.7": - "integrity" "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==" - "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" - "version" "1.2.7" - dependencies: - "minipass" "^2.6.0" - -"fs-minipass@^2.0.0", "fs-minipass@^2.1.0": - "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" - "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "minipass" "^3.0.0" - -"fs-readdir-recursive@^1.1.0": - "integrity" "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" - "resolved" "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz" - "version" "1.1.0" - -"fs.realpath@^1.0.0": - "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - "version" "1.0.0" - -"fsevents@^2.3.2", "fsevents@~2.3.2": - "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" - "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - "version" "2.3.2" - -"fsevents@~2.1.1": - "integrity" "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==" - "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz" - "version" "2.1.3" - -"function-bind@^1.1.1": - "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - "version" "1.1.1" - -"function.prototype.name@^1.1.5": - "integrity" "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==" - "resolved" "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - "es-abstract" "^1.19.0" - "functions-have-names" "^1.2.2" - -"functional-red-black-tree@^1.0.1": - "integrity" "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - "version" "1.0.1" - -"functions-have-names@^1.2.2": - "integrity" "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - "resolved" "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" - "version" "1.2.3" - -"ganache-cli@^6.12.2": - "integrity" "sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw==" - "resolved" "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz" - "version" "6.12.2" - dependencies: - "ethereumjs-util" "6.2.1" - "source-map-support" "0.5.12" - "yargs" "13.2.4" - -"ganache@^7.1.0": - "integrity" "sha512-afNTJYBEaFrLPRrn7eUxH39TgnrffvHn/4T6THzQrc3rpfe4DOxw2nY2XEQxfsq1t4OqKSXtxomzyo26RZiOzw==" - "resolved" "https://registry.npmjs.org/ganache/-/ganache-7.5.0.tgz" - "version" "7.5.0" + array-back "^3.0.1" + +find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.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" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flat@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz" + integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== + dependencies: + is-buffer "~2.0.3" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz" + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== + dependencies: + imul "^1.0.0" + +follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data-encoder@1.7.1: + version "1.7.1" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz" + integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== + +form-data@^2.2.0: + version "2.5.1" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz" + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^10.0.0, fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.0, fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +fsevents@~2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +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" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +ganache-cli@^6.12.2: + version "6.12.2" + resolved "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz" + integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== + dependencies: + ethereumjs-util "6.2.1" + source-map-support "0.5.12" + yargs "13.2.4" + +ganache@^7.1.0: + version "7.5.0" + resolved "https://registry.npmjs.org/ganache/-/ganache-7.5.0.tgz" + integrity sha512-afNTJYBEaFrLPRrn7eUxH39TgnrffvHn/4T6THzQrc3rpfe4DOxw2nY2XEQxfsq1t4OqKSXtxomzyo26RZiOzw== dependencies: "@trufflesuite/bigint-buffer" "1.1.10" "@types/bn.js" "^5.1.0" "@types/lru-cache" "5.1.1" "@types/seedrandom" "3.0.1" - "emittery" "0.10.0" - "keccak" "3.0.2" - "leveldown" "6.1.0" - "secp256k1" "4.0.3" + emittery "0.10.0" + keccak "3.0.2" + leveldown "6.1.0" + secp256k1 "4.0.3" optionalDependencies: - "bufferutil" "4.0.5" - "utf-8-validate" "5.0.7" - -"gauge@^4.0.3": - "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" - "version" "4.0.4" - dependencies: - "aproba" "^1.0.3 || ^2.0.0" - "color-support" "^1.1.3" - "console-control-strings" "^1.1.0" - "has-unicode" "^2.0.1" - "signal-exit" "^3.0.7" - "string-width" "^4.2.3" - "strip-ansi" "^6.0.1" - "wide-align" "^1.1.5" - -"gensync@^1.0.0-beta.2": - "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - "version" "1.0.0-beta.2" - -"get-caller-file@^2.0.1", "get-caller-file@^2.0.5": - "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - "version" "2.0.5" - -"get-func-name@^2.0.0": - "integrity" "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" - "resolved" "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" - "version" "2.0.0" - -"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1", "get-intrinsic@^1.1.3": - "integrity" "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==" - "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "function-bind" "^1.1.1" - "has" "^1.0.3" - "has-symbols" "^1.0.3" - -"get-package-type@^0.1.0": - "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" - "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" - "version" "0.1.0" - -"get-pkg-repo@^4.0.0": - "integrity" "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==" - "resolved" "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz" - "version" "4.2.1" + bufferutil "4.0.5" + utf-8-validate "5.0.7" + +gasless-messaging-sdk@^0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/gasless-messaging-sdk/-/gasless-messaging-sdk-0.0.9.tgz#489cae9166907c1a90ae2aedc1cdd2bffbacdeaf" + integrity sha512-nRSsodyODsKUFo5+L2VCanZ/ER6p8KDB9tK6+p/5Pt0xHLWN6qMCwSqwbsZzyfH+uJLxbqXQo9pGxiNmVSejqA== + dependencies: + "@types/amqplib" "^0.8.2" + "@types/jsonwebtoken" "^8.5.8" + "@types/ws" "^8.5.3" + amqplib "^0.9.0" + cent.js "^2.0.2" + centrifuge "^2.8.4" + jsonwebtoken "^8.5.1" + ws "^8.8.0" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +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" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +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" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-pkg-repo@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== dependencies: "@hutson/parse-repository-url" "^3.0.0" - "hosted-git-info" "^4.0.0" - "through2" "^2.0.0" - "yargs" "^16.2.0" - -"get-port@^3.1.0": - "integrity" "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" - "resolved" "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz" - "version" "3.2.0" - -"get-port@^5.1.1": - "integrity" "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==" - "resolved" "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" - "version" "5.1.1" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== -"get-stream@^4.0.0": - "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" - "version" "4.1.0" +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: - "pump" "^3.0.0" + pump "^3.0.0" -"get-stream@^4.1.0": - "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" - "version" "4.1.0" +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: - "pump" "^3.0.0" - -"get-stream@^5.1.0": - "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "pump" "^3.0.0" - -"get-stream@^6.0.0", "get-stream@^6.0.1": - "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - "version" "6.0.1" - -"get-symbol-description@^1.0.0": - "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==" - "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "call-bind" "^1.0.2" - "get-intrinsic" "^1.1.1" - -"getpass@^0.1.1": - "integrity" "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==" - "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - "version" "0.1.7" - dependencies: - "assert-plus" "^1.0.0" - -"ghost-testrpc@^0.0.2": - "integrity" "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==" - "resolved" "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz" - "version" "0.0.2" - dependencies: - "chalk" "^2.4.2" - "node-emoji" "^1.10.0" - -"git-raw-commits@^2.0.8": - "integrity" "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==" - "resolved" "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz" - "version" "2.0.11" - dependencies: - "dargs" "^7.0.0" - "lodash" "^4.17.15" - "meow" "^8.0.0" - "split2" "^3.0.0" - "through2" "^4.0.0" - -"git-remote-origin-url@^2.0.0": - "integrity" "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==" - "resolved" "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "gitconfiglocal" "^1.0.0" - "pify" "^2.3.0" - -"git-semver-tags@^4.1.1": - "integrity" "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==" - "resolved" "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "meow" "^8.0.0" - "semver" "^6.0.0" - -"git-up@^7.0.0": - "integrity" "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==" - "resolved" "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "is-ssh" "^1.4.0" - "parse-url" "^8.1.0" - -"git-url-parse@^13.1.0": - "integrity" "sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==" - "resolved" "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz" - "version" "13.1.0" - dependencies: - "git-up" "^7.0.0" - -"gitconfiglocal@^1.0.0": - "integrity" "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==" - "resolved" "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "ini" "^1.3.2" - -"glob-parent@^5.1.1", "glob-parent@^5.1.2", "glob-parent@~5.1.0", "glob-parent@~5.1.2": - "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "is-glob" "^4.0.1" - -"glob-parent@^6.0.2": - "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "is-glob" "^4.0.3" - -"glob@^5.0.15": - "integrity" "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==" - "resolved" "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" - "version" "5.0.15" - dependencies: - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "2 || 3" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^7.0.0", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6": - "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - "version" "7.2.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.1.1" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^8.0.1": - "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - "version" "8.0.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^5.0.1" - "once" "^1.3.0" - -"glob@7.1.3": - "integrity" "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" - "version" "7.1.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@7.1.4": - "integrity" "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" - "version" "7.1.4" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@7.2.0": - "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"global-modules@^2.0.0": - "integrity" "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==" - "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "global-prefix" "^3.0.0" - -"global-prefix@^3.0.0": - "integrity" "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==" - "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "ini" "^1.3.5" - "kind-of" "^6.0.2" - "which" "^1.3.1" - -"global@~4.4.0": - "integrity" "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==" - "resolved" "https://registry.npmjs.org/global/-/global-4.4.0.tgz" - "version" "4.4.0" - dependencies: - "min-document" "^2.19.0" - "process" "^0.11.10" - -"globals@^11.1.0": - "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - "version" "11.12.0" - -"globals@^13.15.0": - "integrity" "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==" - "resolved" "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" - "version" "13.17.0" - dependencies: - "type-fest" "^0.20.2" - -"globby@^10.0.1": - "integrity" "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==" - "resolved" "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz" - "version" "10.0.2" + pump "^3.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" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +ghost-testrpc@^0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz" + integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== + dependencies: + chalk "^2.4.2" + node-emoji "^1.10.0" + +git-raw-commits@^2.0.8: + version "2.0.11" + resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz" + integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz" + integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== + dependencies: + meow "^8.0.0" + semver "^6.0.0" + +git-up@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz" + integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== + dependencies: + is-ssh "^1.4.0" + parse-url "^8.1.0" + +git-url-parse@^13.1.0: + version "13.1.0" + resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz" + integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== + dependencies: + git-up "^7.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + dependencies: + ini "^1.3.2" + +glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.3: + version "7.1.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.1.4: + version "7.1.4" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" + integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.1: + version "8.0.3" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +global@~4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/global/-/global-4.4.0.tgz" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== dependencies: "@types/glob" "^7.1.1" - "array-union" "^2.1.0" - "dir-glob" "^3.0.1" - "fast-glob" "^3.0.3" - "glob" "^7.1.3" - "ignore" "^5.1.1" - "merge2" "^1.2.3" - "slash" "^3.0.0" - -"globby@^11.0.2", "globby@^11.1.0": - "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==" - "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - "version" "11.1.0" - dependencies: - "array-union" "^2.1.0" - "dir-glob" "^3.0.1" - "fast-glob" "^3.2.9" - "ignore" "^5.2.0" - "merge2" "^1.4.1" - "slash" "^3.0.0" - -"got@^11.8.5": - "integrity" "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==" - "resolved" "https://registry.npmjs.org/got/-/got-11.8.5.tgz" - "version" "11.8.5" - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - "cacheable-lookup" "^5.0.3" - "cacheable-request" "^7.0.2" - "decompress-response" "^6.0.0" - "http2-wrapper" "^1.0.0-beta.5.2" - "lowercase-keys" "^2.0.0" - "p-cancelable" "^2.0.0" - "responselike" "^2.0.0" - -"got@12.1.0": - "integrity" "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==" - "resolved" "https://registry.npmjs.org/got/-/got-12.1.0.tgz" - "version" "12.1.0" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^11.0.2, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +got@12.1.0: + version "12.1.0" + resolved "https://registry.npmjs.org/got/-/got-12.1.0.tgz" + integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== dependencies: "@sindresorhus/is" "^4.6.0" "@szmarczak/http-timer" "^5.0.1" "@types/cacheable-request" "^6.0.2" "@types/responselike" "^1.0.0" - "cacheable-lookup" "^6.0.4" - "cacheable-request" "^7.0.2" - "decompress-response" "^6.0.0" - "form-data-encoder" "1.7.1" - "get-stream" "^6.0.1" - "http2-wrapper" "^2.1.10" - "lowercase-keys" "^3.0.0" - "p-cancelable" "^3.0.0" - "responselike" "^2.0.0" - -"got@9.6.0": - "integrity" "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==" - "resolved" "https://registry.npmjs.org/got/-/got-9.6.0.tgz" - "version" "9.6.0" + cacheable-lookup "^6.0.4" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + form-data-encoder "1.7.1" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^2.0.0" + +got@9.6.0: + version "9.6.0" + resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== dependencies: "@sindresorhus/is" "^0.14.0" "@szmarczak/http-timer" "^1.1.2" - "cacheable-request" "^6.0.0" - "decompress-response" "^3.3.0" - "duplexer3" "^0.1.4" - "get-stream" "^4.1.0" - "lowercase-keys" "^1.0.1" - "mimic-response" "^1.0.1" - "p-cancelable" "^1.0.0" - "to-readable-stream" "^1.0.0" - "url-parse-lax" "^3.0.0" - -"graceful-fs@^4.1.11", "graceful-fs@^4.1.15", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.1.9", "graceful-fs@^4.2.0", "graceful-fs@^4.2.6", "graceful-fs@^4.2.9": - "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - "version" "4.2.10" - -"grapheme-splitter@^1.0.4": - "integrity" "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - "resolved" "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" - "version" "1.0.4" - -"growl@1.10.5": - "integrity" "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" - "resolved" "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" - "version" "1.10.5" - -"handlebars@^4.0.1", "handlebars@^4.7.7": - "integrity" "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==" - "resolved" "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" - "version" "4.7.7" - dependencies: - "minimist" "^1.2.5" - "neo-async" "^2.6.0" - "source-map" "^0.6.1" - "wordwrap" "^1.0.0" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +got@^11.8.5: + version "11.8.5" + resolved "https://registry.npmjs.org/got/-/got-11.8.5.tgz" + integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +handlebars@^4.0.1, handlebars@^4.7.7: + version "4.7.7" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" optionalDependencies: - "uglify-js" "^3.1.4" + uglify-js "^3.1.4" -"har-schema@^2.0.0": - "integrity" "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" - "resolved" "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" - "version" "2.0.0" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== -"har-validator@~5.1.3": - "integrity" "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==" - "resolved" "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" - "version" "5.1.5" +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: - "ajv" "^6.12.3" - "har-schema" "^2.0.0" + ajv "^6.12.3" + har-schema "^2.0.0" -"hard-rejection@^2.1.0": - "integrity" "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==" - "resolved" "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" - "version" "2.1.0" +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -"hardhat-deploy-ethers@^0.3.0-beta.11": - "integrity" "sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw==" - "resolved" "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz" - "version" "0.3.0-beta.13" +hardhat-deploy-ethers@^0.3.0-beta.11: + version "0.3.0-beta.13" + resolved "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz" + integrity sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw== -"hardhat-deploy@^0.9.3": - "integrity" "sha512-8tIGszPFmOaXtyloCbASiZPvoAgLNGGL/Ubys3YW/oj4dvoPa8G6YDyaOCdsAhsENZ+QgR280NFSG9JdN7SU9Q==" - "resolved" "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.29.tgz" - "version" "0.9.29" +hardhat-deploy@^0.9.3: + version "0.9.29" + resolved "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.29.tgz" + integrity sha512-8tIGszPFmOaXtyloCbASiZPvoAgLNGGL/Ubys3YW/oj4dvoPa8G6YDyaOCdsAhsENZ+QgR280NFSG9JdN7SU9Q== dependencies: "@ethersproject/abi" "^5.4.0" "@ethersproject/abstract-signer" "^5.4.1" @@ -7183,30 +7137,30 @@ "@ethersproject/transactions" "^5.4.0" "@ethersproject/wallet" "^5.4.0" "@types/qs" "^6.9.7" - "axios" "^0.21.1" - "chalk" "^4.1.2" - "chokidar" "^3.5.2" - "debug" "^4.3.2" - "enquirer" "^2.3.6" - "form-data" "^4.0.0" - "fs-extra" "^10.0.0" - "match-all" "^1.2.6" - "murmur-128" "^0.2.1" - "qs" "^6.9.4" - -"hardhat-gas-reporter@^1.0.7", "hardhat-gas-reporter@^1.0.8": - "integrity" "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==" - "resolved" "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz" - "version" "1.0.9" - dependencies: - "array-uniq" "1.0.3" - "eth-gas-reporter" "^0.2.25" - "sha1" "^1.1.1" - -"hardhat@^2.0.0", "hardhat@^2.0.10", "hardhat@^2.0.2", "hardhat@^2.0.4", "hardhat@^2.11.0", "hardhat@^2.6.8", "hardhat@^2.9.2", "hardhat@^2.9.4", "hardhat@^2.9.5", "hardhat@^2.9.7", "hardhat@^2.9.9": - "integrity" "sha512-ihqYoaAKMceVWRcc3VddftFM7Q4/WL5Xan8nrklfDRwwST0W1rWWEE8SrxGikW58IJdREsC/HXVHs0zKfYpiCA==" - "resolved" "https://registry.npmjs.org/hardhat/-/hardhat-2.12.1.tgz" - "version" "2.12.1" + axios "^0.21.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" + enquirer "^2.3.6" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + +hardhat-gas-reporter@^1.0.7: + version "1.0.9" + resolved "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz" + integrity sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg== + dependencies: + array-uniq "1.0.3" + eth-gas-reporter "^0.2.25" + sha1 "^1.1.1" + +hardhat@^2.11.0, hardhat@^2.9.2, hardhat@^2.9.5, hardhat@^2.9.7, hardhat@^2.9.9: + version "2.12.1" + resolved "https://registry.npmjs.org/hardhat/-/hardhat-2.12.1.tgz" + integrity sha512-ihqYoaAKMceVWRcc3VddftFM7Q4/WL5Xan8nrklfDRwwST0W1rWWEE8SrxGikW58IJdREsC/HXVHs0zKfYpiCA== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" @@ -7224,1013 +7178,1001 @@ "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" - "abort-controller" "^3.0.0" - "adm-zip" "^0.4.16" - "aggregate-error" "^3.0.0" - "ansi-escapes" "^4.3.0" - "chalk" "^2.4.2" - "chokidar" "^3.4.0" - "ci-info" "^2.0.0" - "debug" "^4.1.1" - "enquirer" "^2.3.0" - "env-paths" "^2.2.0" - "ethereum-cryptography" "^1.0.3" - "ethereumjs-abi" "^0.6.8" - "find-up" "^2.1.0" - "fp-ts" "1.19.3" - "fs-extra" "^7.0.1" - "glob" "7.2.0" - "immutable" "^4.0.0-rc.12" - "io-ts" "1.10.4" - "keccak" "^3.0.2" - "lodash" "^4.17.11" - "mnemonist" "^0.38.0" - "mocha" "^10.0.0" - "p-map" "^4.0.0" - "qs" "^6.7.0" - "raw-body" "^2.4.1" - "resolve" "1.17.0" - "semver" "^6.3.0" - "solc" "0.7.3" - "source-map-support" "^0.5.13" - "stacktrace-parser" "^0.1.10" - "tsort" "0.0.1" - "undici" "^5.4.0" - "uuid" "^8.3.2" - "ws" "^7.4.6" - -"has-bigints@^1.0.1", "has-bigints@^1.0.2": - "integrity" "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" - "version" "1.0.2" - -"has-flag@^1.0.0": - "integrity" "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" - "version" "1.0.0" - -"has-flag@^3.0.0": - "integrity" "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - "version" "3.0.0" - -"has-flag@^4.0.0": - "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - "version" "4.0.0" - -"has-property-descriptors@^1.0.0": - "integrity" "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==" - "resolved" "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "get-intrinsic" "^1.1.1" - -"has-symbols@^1.0.0", "has-symbols@^1.0.2", "has-symbols@^1.0.3": - "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - "version" "1.0.3" - -"has-tostringtag@^1.0.0": - "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==" - "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "has-symbols" "^1.0.2" - -"has-unicode@^2.0.1": - "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - "version" "2.0.1" - -"has@^1.0.3": - "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" - "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "function-bind" "^1.1.1" - -"hash-base@^3.0.0": - "integrity" "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==" - "resolved" "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "inherits" "^2.0.4" - "readable-stream" "^3.6.0" - "safe-buffer" "^5.2.0" - -"hash.js@^1.0.0", "hash.js@^1.0.3", "hash.js@^1.1.7", "hash.js@1.1.7": - "integrity" "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==" - "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" - "version" "1.1.7" - dependencies: - "inherits" "^2.0.3" - "minimalistic-assert" "^1.0.1" - -"hash.js@1.1.3": - "integrity" "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==" - "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "inherits" "^2.0.3" - "minimalistic-assert" "^1.0.0" - -"he@1.2.0": - "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" - "version" "1.2.0" - -"hmac-drbg@^1.0.0": - "version" "1.0.1" - dependencies: - "hash.js" "^1.0.3" - "minimalistic-assert" "^1.0.0" - "minimalistic-crypto-utils" "^1.0.1" - -"hmac-drbg@^1.0.1": - "integrity" "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==" - "resolved" "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "hash.js" "^1.0.3" - "minimalistic-assert" "^1.0.0" - "minimalistic-crypto-utils" "^1.0.1" - -"hosted-git-info@^2.1.4": - "integrity" "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - "version" "2.8.9" - -"hosted-git-info@^3.0.6": - "integrity" "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz" - "version" "3.0.8" - dependencies: - "lru-cache" "^6.0.0" - -"hosted-git-info@^4.0.0", "hosted-git-info@^4.0.1": - "integrity" "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "lru-cache" "^6.0.0" - -"hosted-git-info@^5.0.0": - "integrity" "sha512-y5aljBDICf0OFQecausUdWGZbLxSaFc012tdP4xe4GcFMeYUrOptSGaTZ21gvIsPUSe1/K9EVKLYwBOSEOPirw==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "lru-cache" "^7.5.1" - -"html-escaper@^2.0.0": - "integrity" "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - "resolved" "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" - "version" "2.0.2" - -"http-basic@^8.1.1": - "integrity" "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==" - "resolved" "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz" - "version" "8.1.3" - dependencies: - "caseless" "^0.12.0" - "concat-stream" "^1.6.2" - "http-response-object" "^3.0.1" - "parse-cache-control" "^1.0.1" - -"http-cache-semantics@^4.0.0", "http-cache-semantics@^4.1.0": - "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - "version" "4.1.0" - -"http-errors@2.0.0": - "integrity" "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==" - "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "depd" "2.0.0" - "inherits" "2.0.4" - "setprototypeof" "1.2.0" - "statuses" "2.0.1" - "toidentifier" "1.0.1" - -"http-https@^1.0.0": - "integrity" "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - "resolved" "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz" - "version" "1.0.0" - -"http-proxy-agent@^5.0.0": - "integrity" "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==" - "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" - "version" "5.0.0" + abort-controller "^3.0.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + keccak "^3.0.2" + lodash "^4.17.11" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + qs "^6.7.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + tsort "0.0.1" + undici "^5.4.0" + 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.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz" + integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^3.0.6: + version "3.0.8" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.0.tgz" + integrity sha512-y5aljBDICf0OFQecausUdWGZbLxSaFc012tdP4xe4GcFMeYUrOptSGaTZ21gvIsPUSe1/K9EVKLYwBOSEOPirw== + dependencies: + lru-cache "^7.5.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz" + integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" - "agent-base" "6" - "debug" "4" + agent-base "6" + debug "4" -"http-response-object@^3.0.1": - "integrity" "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==" - "resolved" "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz" - "version" "3.0.2" +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== dependencies: "@types/node" "^10.0.3" -"http-signature@~1.2.0": - "integrity" "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==" - "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" - "version" "1.2.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: - "assert-plus" "^1.0.0" - "jsprim" "^1.2.2" - "sshpk" "^1.7.0" + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" -"http2-wrapper@^1.0.0-beta.5.2": - "integrity" "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==" - "resolved" "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" - "version" "1.0.3" +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== dependencies: - "quick-lru" "^5.1.1" - "resolve-alpn" "^1.0.0" + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" -"http2-wrapper@^2.1.10": - "integrity" "sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ==" - "resolved" "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz" - "version" "2.1.11" +http2-wrapper@^2.1.10: + version "2.1.11" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz" + integrity sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ== dependencies: - "quick-lru" "^5.1.1" - "resolve-alpn" "^1.2.0" + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" -"https-proxy-agent@^5.0.0": - "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" - "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - "version" "5.0.1" +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: - "agent-base" "6" - "debug" "4" - -"human-signals@^2.1.0": - "integrity" "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - "version" "2.1.0" - -"humanize-ms@^1.2.1": - "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" - "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "ms" "^2.0.0" - -"husky@^7.0.4": - "integrity" "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==" - "resolved" "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz" - "version" "7.0.4" - -"iconv-lite@^0.4.24", "iconv-lite@0.4.24": - "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - "version" "0.4.24" - dependencies: - "safer-buffer" ">= 2.1.2 < 3" - -"iconv-lite@^0.6.2": - "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - "version" "0.6.3" - dependencies: - "safer-buffer" ">= 2.1.2 < 3.0.0" - -"idna-uts46-hx@^2.3.1": - "integrity" "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==" - "resolved" "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz" - "version" "2.3.1" - dependencies: - "punycode" "2.1.0" - -"ieee754@^1.1.13", "ieee754@^1.2.1": - "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - "version" "1.2.1" - -"ignore-walk@^5.0.1": - "integrity" "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==" - "resolved" "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "minimatch" "^5.0.1" - -"ignore@^5.0.4", "ignore@^5.1.1", "ignore@^5.2.0": - "integrity" "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" - "version" "5.2.0" - -"immediate@^3.2.3": - "integrity" "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz" - "version" "3.3.0" - -"immutable@^4.0.0-rc.12": - "integrity" "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" - "resolved" "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz" - "version" "4.1.0" - -"import-fresh@^3.0.0", "import-fresh@^3.2.1": - "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" - "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "parent-module" "^1.0.0" - "resolve-from" "^4.0.0" - -"import-local@^3.0.2": - "integrity" "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==" - "resolved" "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "pkg-dir" "^4.2.0" - "resolve-cwd" "^3.0.0" - -"imul@^1.0.0": - "integrity" "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==" - "resolved" "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz" - "version" "1.0.1" - -"imurmurhash@^0.1.4": - "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - "version" "0.1.4" - -"indent-string@^4.0.0": - "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - "version" "4.0.0" - -"infer-owner@^1.0.4": - "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - "version" "1.0.4" - -"inflight@^1.0.4": - "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" - "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "once" "^1.3.0" - "wrappy" "1" - -"inherits@^2.0.1", "inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.1", "inherits@~2.0.3", "inherits@2", "inherits@2.0.4": - "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - "version" "2.0.4" - -"ini@^1.3.2", "ini@^1.3.4", "ini@^1.3.5": - "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - "version" "1.3.8" - -"init-package-json@^3.0.2": - "integrity" "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==" - "resolved" "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "npm-package-arg" "^9.0.1" - "promzard" "^0.3.0" - "read" "^1.0.7" - "read-package-json" "^5.0.0" - "semver" "^7.3.5" - "validate-npm-package-license" "^3.0.4" - "validate-npm-package-name" "^4.0.0" - -"inquirer@^8.2.4": - "integrity" "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==" - "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz" - "version" "8.2.5" - dependencies: - "ansi-escapes" "^4.2.1" - "chalk" "^4.1.1" - "cli-cursor" "^3.1.0" - "cli-width" "^3.0.0" - "external-editor" "^3.0.3" - "figures" "^3.0.0" - "lodash" "^4.17.21" - "mute-stream" "0.0.8" - "ora" "^5.4.1" - "run-async" "^2.4.0" - "rxjs" "^7.5.5" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - "through" "^2.3.6" - "wrap-ansi" "^7.0.0" - -"internal-slot@^1.0.3": - "integrity" "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==" - "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "get-intrinsic" "^1.1.0" - "has" "^1.0.3" - "side-channel" "^1.0.4" - -"interpret@^1.0.0": - "integrity" "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" - "version" "1.4.0" - -"invert-kv@^2.0.0": - "integrity" "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" - "resolved" "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz" - "version" "2.0.0" - -"io-ts@1.10.4": - "integrity" "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==" - "resolved" "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz" - "version" "1.10.4" - dependencies: - "fp-ts" "^1.0.0" - -"ip@^2.0.0": - "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" - "version" "2.0.0" - -"ipaddr.js@1.9.1": - "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - "version" "1.9.1" - -"is-arguments@^1.0.4": - "integrity" "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==" - "resolved" "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "call-bind" "^1.0.2" - "has-tostringtag" "^1.0.0" - -"is-arrayish@^0.2.1": - "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - "version" "0.2.1" - -"is-bigint@^1.0.1": - "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==" - "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "has-bigints" "^1.0.1" - -"is-binary-path@~2.1.0": - "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" - "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "binary-extensions" "^2.0.0" - -"is-boolean-object@^1.1.0": - "integrity" "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==" - "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "call-bind" "^1.0.2" - "has-tostringtag" "^1.0.0" - -"is-buffer@^2.0.5", "is-buffer@~2.0.3": - "integrity" "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" - "version" "2.0.5" - -"is-callable@^1.1.3", "is-callable@^1.1.4", "is-callable@^1.2.7": - "integrity" "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" - "version" "1.2.7" - -"is-ci@^2.0.0": - "integrity" "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==" - "resolved" "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "ci-info" "^2.0.0" - -"is-core-module@^2.5.0", "is-core-module@^2.8.1", "is-core-module@^2.9.0": - "integrity" "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==" - "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" - "version" "2.11.0" - dependencies: - "has" "^1.0.3" - -"is-date-object@^1.0.1": - "integrity" "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==" - "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-docker@^2.0.0", "is-docker@^2.1.1": - "integrity" "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - "resolved" "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" - "version" "2.2.1" - -"is-extglob@^2.1.1": - "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - "version" "2.1.1" - -"is-fn@^1.0.0": - "integrity" "sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==" - "resolved" "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz" - "version" "1.0.0" - -"is-fullwidth-code-point@^2.0.0": - "integrity" "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - "version" "2.0.0" - -"is-fullwidth-code-point@^3.0.0": - "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - "version" "3.0.0" - -"is-fullwidth-code-point@^4.0.0": - "integrity" "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" - "version" "4.0.0" - -"is-function@^1.0.1": - "integrity" "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - "resolved" "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz" - "version" "1.0.2" - -"is-generator-fn@^2.0.0": - "integrity" "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" - "resolved" "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" - "version" "2.1.0" - -"is-generator-function@^1.0.7": - "integrity" "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==" - "resolved" "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1": - "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "is-extglob" "^2.1.1" - -"is-hex-prefixed@1.0.0": - "integrity" "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" - "resolved" "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" - "version" "1.0.0" - -"is-interactive@^1.0.0": - "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" - "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" - "version" "1.0.0" - -"is-lambda@^1.0.1": - "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" - "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - "version" "1.0.1" - -"is-negative-zero@^2.0.2": - "integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" - "version" "2.0.2" - -"is-number-object@^1.0.4": - "integrity" "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==" - "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" - "version" "1.0.7" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-number@^7.0.0": - "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - "version" "7.0.0" - -"is-obj@^2.0.0": - "integrity" "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - "version" "2.0.0" - -"is-path-inside@^3.0.3": - "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - "version" "3.0.3" - -"is-plain-obj@^1.0.0": - "integrity" "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" - "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" - "version" "1.1.0" - -"is-plain-obj@^1.1.0": - "integrity" "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" - "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" - "version" "1.1.0" - -"is-plain-obj@^2.0.0", "is-plain-obj@^2.1.0": - "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" - "version" "2.1.0" - -"is-plain-object@^2.0.4": - "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" - "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "isobject" "^3.0.1" - -"is-plain-object@^5.0.0": - "integrity" "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - "version" "5.0.0" - -"is-regex@^1.1.4": - "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==" - "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" - "version" "1.1.4" - dependencies: - "call-bind" "^1.0.2" - "has-tostringtag" "^1.0.0" - -"is-shared-array-buffer@^1.0.2": - "integrity" "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==" - "resolved" "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "call-bind" "^1.0.2" - -"is-ssh@^1.4.0": - "integrity" "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==" - "resolved" "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "protocols" "^2.0.1" - -"is-stream@^1.1.0": - "integrity" "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" - "version" "1.1.0" - -"is-stream@^2.0.0", "is-stream@^2.0.1": - "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - "version" "2.0.1" - -"is-string@^1.0.5", "is-string@^1.0.7": - "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" - "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" - "version" "1.0.7" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-symbol@^1.0.2", "is-symbol@^1.0.3": - "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==" - "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "has-symbols" "^1.0.2" - -"is-text-path@^1.0.1": - "integrity" "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==" - "resolved" "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "text-extensions" "^1.0.0" - -"is-typed-array@^1.1.3", "is-typed-array@^1.1.9": - "integrity" "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==" - "resolved" "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz" - "version" "1.1.9" - dependencies: - "available-typed-arrays" "^1.0.5" - "call-bind" "^1.0.2" - "es-abstract" "^1.20.0" - "for-each" "^0.3.3" - "has-tostringtag" "^1.0.0" - -"is-typedarray@^1.0.0", "is-typedarray@~1.0.0": - "integrity" "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - "version" "1.0.0" - -"is-unicode-supported@^0.1.0": - "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - "version" "0.1.0" - -"is-weakref@^1.0.2": - "integrity" "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==" - "resolved" "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "call-bind" "^1.0.2" - -"is-wsl@^2.2.0": - "integrity" "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==" - "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "is-docker" "^2.0.0" - -"isarray@~1.0.0": - "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - "version" "1.0.0" + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +husky@^7.0.4: + version "7.0.4" + resolved "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz" + integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== + +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" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== + dependencies: + minimatch "^5.0.1" + +ignore@^5.0.4, ignore@^5.1.1, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + +immutable@^4.0.0-rc.12: + version "4.1.0" + resolved "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz" + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + 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" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.2, ini@^1.3.4, ini@^1.3.5: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +init-package-json@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz" + integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== + dependencies: + npm-package-arg "^9.0.1" + promzard "^0.3.0" + read "^1.0.7" + read-package-json "^5.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^4.0.0" + +inquirer@^8.2.4: + version "8.2.5" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz" + integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + 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" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^2.0.5, is-buffer@~2.0.3: + version "2.0.5" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +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" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz" + integrity sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +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" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +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" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + 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" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-plain-obj@^2.0.0, 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" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + 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.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-ssh@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz" + integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== + dependencies: + protocols "^2.0.1" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0, is-stream@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz" + integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== -"isarray@0.0.1": - "integrity" "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - "resolved" "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - "version" "0.0.1" - -"isexe@^2.0.0": - "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - "version" "2.0.0" - -"isobject@^3.0.1": - "integrity" "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - "version" "3.0.1" - -"isstream@~0.1.2": - "integrity" "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - "resolved" "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - "version" "0.1.2" +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -"istanbul-lib-coverage@^3.0.0", "istanbul-lib-coverage@^3.2.0": - "integrity" "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" - "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" - "version" "3.2.0" - -"istanbul-lib-instrument@^5.0.4", "istanbul-lib-instrument@^5.1.0": - "integrity" "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==" - "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" - "version" "5.2.1" +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" "@istanbuljs/schema" "^0.1.2" - "istanbul-lib-coverage" "^3.2.0" - "semver" "^6.3.0" - -"istanbul-lib-report@^3.0.0": - "integrity" "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==" - "resolved" "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "istanbul-lib-coverage" "^3.0.0" - "make-dir" "^3.0.0" - "supports-color" "^7.1.0" - -"istanbul-lib-source-maps@^4.0.0": - "integrity" "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==" - "resolved" "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "debug" "^4.1.1" - "istanbul-lib-coverage" "^3.0.0" - "source-map" "^0.6.1" - -"istanbul-reports@^3.1.3": - "integrity" "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==" - "resolved" "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" - "version" "3.1.5" - dependencies: - "html-escaper" "^2.0.0" - "istanbul-lib-report" "^3.0.0" - -"jake@^10.8.5": - "integrity" "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==" - "resolved" "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz" - "version" "10.8.5" - dependencies: - "async" "^3.2.3" - "chalk" "^4.0.2" - "filelist" "^1.0.1" - "minimatch" "^3.0.4" - -"jest-changed-files@^28.1.3": - "integrity" "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==" - "resolved" "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "execa" "^5.0.0" - "p-limit" "^3.1.0" - -"jest-circus@^28.1.3": - "integrity" "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==" - "resolved" "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz" - "version" "28.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jake@^10.8.5: + version "10.8.5" + resolved "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz" + integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.1" + minimatch "^3.0.4" + +jest-changed-files@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz" + integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== + dependencies: + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz" + integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== dependencies: "@jest/environment" "^28.1.3" "@jest/expect" "^28.1.3" "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - "chalk" "^4.0.0" - "co" "^4.6.0" - "dedent" "^0.7.0" - "is-generator-fn" "^2.0.0" - "jest-each" "^28.1.3" - "jest-matcher-utils" "^28.1.3" - "jest-message-util" "^28.1.3" - "jest-runtime" "^28.1.3" - "jest-snapshot" "^28.1.3" - "jest-util" "^28.1.3" - "p-limit" "^3.1.0" - "pretty-format" "^28.1.3" - "slash" "^3.0.0" - "stack-utils" "^2.0.3" - -"jest-cli@^28.1.3": - "integrity" "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==" - "resolved" "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz" - "version" "28.1.3" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + p-limit "^3.1.0" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz" + integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== dependencies: "@jest/core" "^28.1.3" "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" - "chalk" "^4.0.0" - "exit" "^0.1.2" - "graceful-fs" "^4.2.9" - "import-local" "^3.0.2" - "jest-config" "^28.1.3" - "jest-util" "^28.1.3" - "jest-validate" "^28.1.3" - "prompts" "^2.0.1" - "yargs" "^17.3.1" - -"jest-config@^28.1.3": - "integrity" "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==" - "resolved" "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz" - "version" "28.1.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + prompts "^2.0.1" + yargs "^17.3.1" + +jest-config@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz" + integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== dependencies: "@babel/core" "^7.11.6" "@jest/test-sequencer" "^28.1.3" "@jest/types" "^28.1.3" - "babel-jest" "^28.1.3" - "chalk" "^4.0.0" - "ci-info" "^3.2.0" - "deepmerge" "^4.2.2" - "glob" "^7.1.3" - "graceful-fs" "^4.2.9" - "jest-circus" "^28.1.3" - "jest-environment-node" "^28.1.3" - "jest-get-type" "^28.0.2" - "jest-regex-util" "^28.0.2" - "jest-resolve" "^28.1.3" - "jest-runner" "^28.1.3" - "jest-util" "^28.1.3" - "jest-validate" "^28.1.3" - "micromatch" "^4.0.4" - "parse-json" "^5.2.0" - "pretty-format" "^28.1.3" - "slash" "^3.0.0" - "strip-json-comments" "^3.1.1" - -"jest-diff@^28.1.3": - "integrity" "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==" - "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "chalk" "^4.0.0" - "diff-sequences" "^28.1.1" - "jest-get-type" "^28.0.2" - "pretty-format" "^28.1.3" - -"jest-docblock@^28.1.1": - "integrity" "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==" - "resolved" "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz" - "version" "28.1.1" - dependencies: - "detect-newline" "^3.0.0" - -"jest-each@^28.1.3": - "integrity" "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==" - "resolved" "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz" - "version" "28.1.3" + babel-jest "^28.1.3" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^28.1.3" + jest-environment-node "^28.1.3" + jest-get-type "^28.0.2" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-runner "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^28.1.3" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== + dependencies: + chalk "^4.0.0" + diff-sequences "^28.1.1" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-docblock@^28.1.1: + version "28.1.1" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz" + integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== + dependencies: + detect-newline "^3.0.0" + +jest-each@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz" + integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== dependencies: "@jest/types" "^28.1.3" - "chalk" "^4.0.0" - "jest-get-type" "^28.0.2" - "jest-util" "^28.1.3" - "pretty-format" "^28.1.3" + chalk "^4.0.0" + jest-get-type "^28.0.2" + jest-util "^28.1.3" + pretty-format "^28.1.3" -"jest-environment-node@^28.1.3": - "integrity" "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==" - "resolved" "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz" - "version" "28.1.3" +jest-environment-node@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz" + integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== dependencies: "@jest/environment" "^28.1.3" "@jest/fake-timers" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - "jest-mock" "^28.1.3" - "jest-util" "^28.1.3" + jest-mock "^28.1.3" + jest-util "^28.1.3" -"jest-get-type@^28.0.2": - "integrity" "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==" - "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" - "version" "28.0.2" +jest-get-type@^28.0.2: + version "28.0.2" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" + integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== -"jest-haste-map@^28.1.3": - "integrity" "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==" - "resolved" "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz" - "version" "28.1.3" +jest-haste-map@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz" + integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== dependencies: "@jest/types" "^28.1.3" "@types/graceful-fs" "^4.1.3" "@types/node" "*" - "anymatch" "^3.0.3" - "fb-watchman" "^2.0.0" - "graceful-fs" "^4.2.9" - "jest-regex-util" "^28.0.2" - "jest-util" "^28.1.3" - "jest-worker" "^28.1.3" - "micromatch" "^4.0.4" - "walker" "^1.0.8" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + jest-worker "^28.1.3" + micromatch "^4.0.4" + walker "^1.0.8" optionalDependencies: - "fsevents" "^2.3.2" + fsevents "^2.3.2" -"jest-leak-detector@^28.1.3": - "integrity" "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==" - "resolved" "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz" - "version" "28.1.3" +jest-leak-detector@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz" + integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== dependencies: - "jest-get-type" "^28.0.2" - "pretty-format" "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" -"jest-matcher-utils@^28.1.3": - "integrity" "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==" - "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" - "version" "28.1.3" +jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== dependencies: - "chalk" "^4.0.0" - "jest-diff" "^28.1.3" - "jest-get-type" "^28.0.2" - "pretty-format" "^28.1.3" + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" -"jest-message-util@^28.1.3": - "integrity" "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==" - "resolved" "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz" - "version" "28.1.3" +jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== dependencies: "@babel/code-frame" "^7.12.13" "@jest/types" "^28.1.3" "@types/stack-utils" "^2.0.0" - "chalk" "^4.0.0" - "graceful-fs" "^4.2.9" - "micromatch" "^4.0.4" - "pretty-format" "^28.1.3" - "slash" "^3.0.0" - "stack-utils" "^2.0.3" - -"jest-mock@^28.1.3": - "integrity" "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==" - "resolved" "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz" - "version" "28.1.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz" + integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== dependencies: "@jest/types" "^28.1.3" "@types/node" "*" -"jest-pnp-resolver@^1.2.2": - "integrity" "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" - "resolved" "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" - "version" "1.2.2" - -"jest-regex-util@^28.0.2": - "integrity" "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==" - "resolved" "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" - "version" "28.0.2" - -"jest-resolve-dependencies@^28.1.3": - "integrity" "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==" - "resolved" "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "jest-regex-util" "^28.0.2" - "jest-snapshot" "^28.1.3" - -"jest-resolve@*", "jest-resolve@^28.1.3": - "integrity" "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==" - "resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "chalk" "^4.0.0" - "graceful-fs" "^4.2.9" - "jest-haste-map" "^28.1.3" - "jest-pnp-resolver" "^1.2.2" - "jest-util" "^28.1.3" - "jest-validate" "^28.1.3" - "resolve" "^1.20.0" - "resolve.exports" "^1.1.0" - "slash" "^3.0.0" - -"jest-runner@^28.1.3": - "integrity" "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==" - "resolved" "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz" - "version" "28.1.3" +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^28.0.2: + version "28.0.2" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz" + integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== + dependencies: + jest-regex-util "^28.0.2" + jest-snapshot "^28.1.3" + +jest-resolve@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz" + integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-pnp-resolver "^1.2.2" + jest-util "^28.1.3" + jest-validate "^28.1.3" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz" + integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== dependencies: "@jest/console" "^28.1.3" "@jest/environment" "^28.1.3" @@ -8238,26 +8180,26 @@ "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - "chalk" "^4.0.0" - "emittery" "^0.10.2" - "graceful-fs" "^4.2.9" - "jest-docblock" "^28.1.1" - "jest-environment-node" "^28.1.3" - "jest-haste-map" "^28.1.3" - "jest-leak-detector" "^28.1.3" - "jest-message-util" "^28.1.3" - "jest-resolve" "^28.1.3" - "jest-runtime" "^28.1.3" - "jest-util" "^28.1.3" - "jest-watcher" "^28.1.3" - "jest-worker" "^28.1.3" - "p-limit" "^3.1.0" - "source-map-support" "0.5.13" - -"jest-runtime@^28.1.3": - "integrity" "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==" - "resolved" "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz" - "version" "28.1.3" + chalk "^4.0.0" + emittery "^0.10.2" + graceful-fs "^4.2.9" + jest-docblock "^28.1.1" + jest-environment-node "^28.1.3" + jest-haste-map "^28.1.3" + jest-leak-detector "^28.1.3" + jest-message-util "^28.1.3" + jest-resolve "^28.1.3" + jest-runtime "^28.1.3" + jest-util "^28.1.3" + jest-watcher "^28.1.3" + jest-worker "^28.1.3" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz" + integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== dependencies: "@jest/environment" "^28.1.3" "@jest/fake-timers" "^28.1.3" @@ -8266,26 +8208,26 @@ "@jest/test-result" "^28.1.3" "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" - "chalk" "^4.0.0" - "cjs-module-lexer" "^1.0.0" - "collect-v8-coverage" "^1.0.0" - "execa" "^5.0.0" - "glob" "^7.1.3" - "graceful-fs" "^4.2.9" - "jest-haste-map" "^28.1.3" - "jest-message-util" "^28.1.3" - "jest-mock" "^28.1.3" - "jest-regex-util" "^28.0.2" - "jest-resolve" "^28.1.3" - "jest-snapshot" "^28.1.3" - "jest-util" "^28.1.3" - "slash" "^3.0.0" - "strip-bom" "^4.0.0" - -"jest-snapshot@^28.1.3": - "integrity" "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==" - "resolved" "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz" - "version" "28.1.3" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz" + integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -8297,353 +8239,357 @@ "@jest/types" "^28.1.3" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" - "babel-preset-current-node-syntax" "^1.0.0" - "chalk" "^4.0.0" - "expect" "^28.1.3" - "graceful-fs" "^4.2.9" - "jest-diff" "^28.1.3" - "jest-get-type" "^28.0.2" - "jest-haste-map" "^28.1.3" - "jest-matcher-utils" "^28.1.3" - "jest-message-util" "^28.1.3" - "jest-util" "^28.1.3" - "natural-compare" "^1.4.0" - "pretty-format" "^28.1.3" - "semver" "^7.3.5" - -"jest-util@^28.1.3": - "integrity" "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==" - "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz" - "version" "28.1.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^28.1.3" + graceful-fs "^4.2.9" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + jest-haste-map "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + natural-compare "^1.4.0" + pretty-format "^28.1.3" + semver "^7.3.5" + +jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== dependencies: "@jest/types" "^28.1.3" "@types/node" "*" - "chalk" "^4.0.0" - "ci-info" "^3.2.0" - "graceful-fs" "^4.2.9" - "picomatch" "^2.2.3" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" -"jest-validate@^28.1.3": - "integrity" "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==" - "resolved" "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz" - "version" "28.1.3" +jest-validate@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz" + integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== dependencies: "@jest/types" "^28.1.3" - "camelcase" "^6.2.0" - "chalk" "^4.0.0" - "jest-get-type" "^28.0.2" - "leven" "^3.1.0" - "pretty-format" "^28.1.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^28.0.2" + leven "^3.1.0" + pretty-format "^28.1.3" -"jest-watcher@^28.1.3": - "integrity" "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==" - "resolved" "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz" - "version" "28.1.3" +jest-watcher@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== dependencies: "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - "ansi-escapes" "^4.2.1" - "chalk" "^4.0.0" - "emittery" "^0.10.2" - "jest-util" "^28.1.3" - "string-length" "^4.0.1" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^28.1.3" + string-length "^4.0.1" -"jest-worker@^28.1.3": - "integrity" "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==" - "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" - "version" "28.1.3" +jest-worker@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== dependencies: "@types/node" "*" - "merge-stream" "^2.0.0" - "supports-color" "^8.0.0" - -"js-base64@^3.7.2": - "integrity" "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" - "resolved" "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz" - "version" "3.7.2" - -"js-sdsl@^4.1.4": - "integrity" "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==" - "resolved" "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz" - "version" "4.1.5" - -"js-sha3@^0.5.7": - "integrity" "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" - "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" - "version" "0.5.7" - -"js-sha3@^0.8.0", "js-sha3@0.8.0": - "integrity" "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" - "version" "0.8.0" - -"js-sha3@0.5.7": - "integrity" "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" - "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" - "version" "0.5.7" - -"js-tokens@^4.0.0": - "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - "version" "4.0.0" - -"js-yaml@^3.10.0": - "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - "version" "3.14.1" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"js-yaml@^3.13.1": - "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - "version" "3.14.1" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"js-yaml@^4.1.0", "js-yaml@4.1.0": - "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "argparse" "^2.0.1" - -"js-yaml@3.13.1": - "integrity" "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" - "version" "3.13.1" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"js-yaml@3.x": - "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - "version" "3.14.1" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"jsbn@~0.1.0": - "integrity" "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - "version" "0.1.1" - -"jsesc@^2.5.1": - "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - "version" "2.5.2" - -"json-buffer@3.0.0": - "integrity" "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" - "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" - "version" "3.0.0" - -"json-buffer@3.0.1": - "integrity" "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - "version" "3.0.1" - -"json-parse-better-errors@^1.0.1": - "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" - "version" "1.0.2" - -"json-parse-even-better-errors@^2.3.0", "json-parse-even-better-errors@^2.3.1": - "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - "version" "2.3.1" - -"json-rpc-engine@^5.3.0": - "integrity" "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==" - "resolved" "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz" - "version" "5.4.0" - dependencies: - "eth-rpc-errors" "^3.0.0" - "safe-event-emitter" "^1.0.1" - -"json-rpc-engine@^6.1.0": - "integrity" "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==" - "resolved" "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz" - "version" "6.1.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +js-base64@^3.7.2: + version "3.7.2" + resolved "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz" + integrity sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ== + +js-sdsl@^4.1.4: + version "4.1.5" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz" + integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== + +js-sha3@0.5.7, js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" + integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@3.13.1: + version "3.13.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@3.x, js-yaml@^3.10.0, js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +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" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-rpc-engine@^5.3.0: + version "5.4.0" + resolved "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz" + integrity sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g== + dependencies: + eth-rpc-errors "^3.0.0" + safe-event-emitter "^1.0.1" + +json-rpc-engine@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz" + integrity sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ== dependencies: "@metamask/safe-event-emitter" "^2.0.0" - "eth-rpc-errors" "^4.0.2" - -"json-rpc-random-id@^1.0.0", "json-rpc-random-id@^1.0.1": - "integrity" "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" - "resolved" "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz" - "version" "1.0.1" - -"json-schema-traverse@^0.4.1": - "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - "version" "0.4.1" - -"json-schema@0.4.0": - "integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" - "version" "0.4.0" - -"json-stable-stringify-without-jsonify@^1.0.1": - "integrity" "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - "version" "1.0.1" - -"json-stable-stringify@^1.0.1": - "integrity" "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==" - "resolved" "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "jsonify" "~0.0.0" - -"json-stringify-nice@^1.1.4": - "integrity" "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==" - "resolved" "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz" - "version" "1.1.4" - -"json-stringify-safe@^5.0.1", "json-stringify-safe@~5.0.1": - "integrity" "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - "resolved" "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - "version" "5.0.1" - -"json5@^1.0.1": - "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" - "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "minimist" "^1.2.0" - -"json5@^2.2.1": - "integrity" "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" - "version" "2.2.1" - -"jsonc-parser@3.2.0": - "integrity" "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" - "resolved" "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" - "version" "3.2.0" - -"jsonfile@^2.1.0": - "integrity" "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==" - "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz" - "version" "2.4.0" + eth-rpc-errors "^4.0.2" + +json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz" + integrity sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" + integrity sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg== + dependencies: + jsonify "~0.0.0" + +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +jsonc-parser@3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz" + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== optionalDependencies: - "graceful-fs" "^4.1.6" + graceful-fs "^4.1.6" -"jsonfile@^4.0.0": - "integrity" "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==" - "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" - "version" "4.0.0" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: - "graceful-fs" "^4.1.6" + graceful-fs "^4.1.6" -"jsonfile@^6.0.1": - "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==" - "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - "version" "6.1.0" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: - "universalify" "^2.0.0" + universalify "^2.0.0" optionalDependencies: - "graceful-fs" "^4.1.6" - -"jsonify@~0.0.0": - "integrity" "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==" - "resolved" "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz" - "version" "0.0.1" - -"jsonparse@^1.2.0", "jsonparse@^1.3.1": - "integrity" "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" - "resolved" "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" - "version" "1.3.1" - -"jsonschema@^1.2.4": - "integrity" "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==" - "resolved" "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz" - "version" "1.4.1" - -"JSONStream@^1.0.4": - "integrity" "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==" - "resolved" "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" - "version" "1.3.5" - dependencies: - "jsonparse" "^1.2.0" - "through" ">=2.2.7 <3" - -"jsprim@^1.2.2": - "integrity" "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==" - "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" - "version" "1.4.2" - dependencies: - "assert-plus" "1.0.0" - "extsprintf" "1.3.0" - "json-schema" "0.4.0" - "verror" "1.10.0" - -"just-diff-apply@^5.2.0": - "integrity" "sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g==" - "resolved" "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.4.1.tgz" - "version" "5.4.1" - -"just-diff@^5.0.1": - "integrity" "sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ==" - "resolved" "https://registry.npmjs.org/just-diff/-/just-diff-5.1.1.tgz" - "version" "5.1.1" - -"keccak@^3.0.0", "keccak@^3.0.2", "keccak@3.0.2": - "integrity" "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==" - "resolved" "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "node-addon-api" "^2.0.0" - "node-gyp-build" "^4.2.0" - "readable-stream" "^3.6.0" - -"keyv@*", "keyv@^4.0.0": - "integrity" "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==" - "resolved" "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz" - "version" "4.5.0" - dependencies: - "json-buffer" "3.0.1" - -"keyv@^3.0.0": - "integrity" "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==" - "resolved" "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "json-buffer" "3.0.0" - -"kind-of@^6.0.2", "kind-of@^6.0.3": - "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - "version" "6.0.3" - -"klaw@^1.0.0": - "integrity" "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==" - "resolved" "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz" - "version" "1.3.1" + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.1" + resolved "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +jsonschema@^1.2.4: + version "1.4.1" + resolved "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz" + integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== + +jsonwebtoken@^8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +just-diff-apply@^5.2.0: + version "5.4.1" + resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.4.1.tgz" + integrity sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g== + +just-diff@^5.0.1: + version "5.1.1" + resolved "https://registry.npmjs.org/just-diff/-/just-diff-5.1.1.tgz" + integrity sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ== + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +keccak@3.0.2, keccak@^3.0.0, keccak@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +keyv@*, keyv@^4.0.0: + version "4.5.0" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz" + integrity sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA== + dependencies: + json-buffer "3.0.1" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + 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" + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== optionalDependencies: - "graceful-fs" "^4.1.9" + graceful-fs "^4.1.9" -"kleur@^3.0.3": - "integrity" "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - "resolved" "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" - "version" "3.0.3" +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -"lcid@^2.0.0": - "integrity" "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==" - "resolved" "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz" - "version" "2.0.0" +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== dependencies: - "invert-kv" "^2.0.0" + invert-kv "^2.0.0" -"lerna@^5.5.4": - "integrity" "sha512-Y0yMPslvnBnTZi7Nrs/gDyYZYauNf61xWNCehISHIORxZmmpoluNkcWTfcyb47is5uJQCv5QJX5xKKubbs+a6w==" - "resolved" "https://registry.npmjs.org/lerna/-/lerna-5.6.2.tgz" - "version" "5.6.2" +lerna@^5.5.4: + version "5.6.2" + resolved "https://registry.npmjs.org/lerna/-/lerna-5.6.2.tgz" + integrity sha512-Y0yMPslvnBnTZi7Nrs/gDyYZYauNf61xWNCehISHIORxZmmpoluNkcWTfcyb47is5uJQCv5QJX5xKKubbs+a6w== dependencies: "@lerna/add" "5.6.2" "@lerna/bootstrap" "5.6.2" @@ -8663,1326 +8609,1312 @@ "@lerna/run" "5.6.2" "@lerna/version" "5.6.2" "@nrwl/devkit" ">=14.8.1 < 16" - "import-local" "^3.0.2" - "inquirer" "^8.2.4" - "npmlog" "^6.0.2" - "nx" ">=14.8.1 < 16" - "typescript" "^3 || ^4" - -"level-codec@~7.0.0": - "integrity" "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" - "resolved" "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz" - "version" "7.0.1" - -"level-concat-iterator@^3.0.0": - "integrity" "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==" - "resolved" "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "catering" "^2.1.0" - -"level-errors@^1.0.3": - "integrity" "sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==" - "resolved" "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "errno" "~0.1.1" - -"level-errors@~1.0.3": - "integrity" "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==" - "resolved" "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "errno" "~0.1.1" - -"level-iterator-stream@~1.3.0": - "integrity" "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==" - "resolved" "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "inherits" "^2.0.1" - "level-errors" "^1.0.3" - "readable-stream" "^1.0.33" - "xtend" "^4.0.0" - -"level-supports@^2.0.1": - "integrity" "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==" - "resolved" "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz" - "version" "2.1.0" - -"level-supports@^4.0.0": - "integrity" "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==" - "resolved" "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz" - "version" "4.0.1" - -"level-transcoder@^1.0.1": - "integrity" "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==" - "resolved" "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "buffer" "^6.0.3" - "module-error" "^1.0.1" - -"level-ws@0.0.0": - "integrity" "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==" - "resolved" "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz" - "version" "0.0.0" - dependencies: - "readable-stream" "~1.0.15" - "xtend" "~2.1.1" - -"level@^8.0.0": - "integrity" "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==" - "resolved" "https://registry.npmjs.org/level/-/level-8.0.0.tgz" - "version" "8.0.0" - dependencies: - "browser-level" "^1.0.1" - "classic-level" "^1.2.0" - -"leveldown@6.1.0": - "integrity" "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==" - "resolved" "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "abstract-leveldown" "^7.2.0" - "napi-macros" "~2.0.0" - "node-gyp-build" "^4.3.0" - -"levelup@^1.2.1": - "integrity" "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==" - "resolved" "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz" - "version" "1.3.9" - dependencies: - "deferred-leveldown" "~1.2.1" - "level-codec" "~7.0.0" - "level-errors" "~1.0.3" - "level-iterator-stream" "~1.3.0" - "prr" "~1.0.1" - "semver" "~5.4.1" - "xtend" "~4.0.0" - -"leven@^3.1.0": - "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" - "version" "3.1.0" - -"levn@^0.4.1": - "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" - "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "prelude-ls" "^1.2.1" - "type-check" "~0.4.0" - -"levn@~0.3.0": - "integrity" "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==" - "resolved" "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" - "version" "0.3.0" - dependencies: - "prelude-ls" "~1.1.2" - "type-check" "~0.3.2" - -"libnpmaccess@^6.0.3": - "integrity" "sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag==" - "resolved" "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.4.tgz" - "version" "6.0.4" - dependencies: - "aproba" "^2.0.0" - "minipass" "^3.1.1" - "npm-package-arg" "^9.0.1" - "npm-registry-fetch" "^13.0.0" - -"libnpmpublish@^6.0.4": - "integrity" "sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg==" - "resolved" "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.5.tgz" - "version" "6.0.5" - dependencies: - "normalize-package-data" "^4.0.0" - "npm-package-arg" "^9.0.1" - "npm-registry-fetch" "^13.0.0" - "semver" "^7.3.7" - "ssri" "^9.0.0" - -"lilconfig@2.0.5": - "integrity" "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==" - "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz" - "version" "2.0.5" - -"lines-and-columns@^1.1.6": - "integrity" "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - "version" "1.2.4" - -"lint-staged@^12.3.7": - "integrity" "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==" - "resolved" "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz" - "version" "12.5.0" - dependencies: - "cli-truncate" "^3.1.0" - "colorette" "^2.0.16" - "commander" "^9.3.0" - "debug" "^4.3.4" - "execa" "^5.1.1" - "lilconfig" "2.0.5" - "listr2" "^4.0.5" - "micromatch" "^4.0.5" - "normalize-path" "^3.0.0" - "object-inspect" "^1.12.2" - "pidtree" "^0.5.0" - "string-argv" "^0.3.1" - "supports-color" "^9.2.2" - "yaml" "^1.10.2" - -"listr2@^4.0.5": - "integrity" "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==" - "resolved" "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz" - "version" "4.0.5" - dependencies: - "cli-truncate" "^2.1.0" - "colorette" "^2.0.16" - "log-update" "^4.0.0" - "p-map" "^4.0.0" - "rfdc" "^1.3.0" - "rxjs" "^7.5.5" - "through" "^2.3.8" - "wrap-ansi" "^7.0.0" - -"load-json-file@^4.0.0": - "integrity" "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==" - "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "graceful-fs" "^4.1.2" - "parse-json" "^4.0.0" - "pify" "^3.0.0" - "strip-bom" "^3.0.0" - -"load-json-file@^6.2.0": - "integrity" "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==" - "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz" - "version" "6.2.0" - dependencies: - "graceful-fs" "^4.1.15" - "parse-json" "^5.0.0" - "strip-bom" "^4.0.0" - "type-fest" "^0.6.0" - -"locate-path@^2.0.0": - "integrity" "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "p-locate" "^2.0.0" - "path-exists" "^3.0.0" - -"locate-path@^3.0.0": - "integrity" "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "p-locate" "^3.0.0" - "path-exists" "^3.0.0" - -"locate-path@^5.0.0": - "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "p-locate" "^4.1.0" - -"locate-path@^6.0.0": - "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "p-locate" "^5.0.0" - -"lodash.camelcase@^4.3.0": - "integrity" "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - "resolved" "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" - "version" "4.3.0" - -"lodash.debounce@^4.0.8": - "integrity" "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" - "version" "4.0.8" - -"lodash.ismatch@^4.4.0": - "integrity" "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==" - "resolved" "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" - "version" "4.4.0" - -"lodash.merge@^4.6.2": - "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - "version" "4.6.2" - -"lodash@^4.17.11", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.19", "lodash@^4.17.21": - "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - "version" "4.17.21" - -"log-symbols@^4.1.0", "log-symbols@4.1.0": - "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" - "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "chalk" "^4.1.0" - "is-unicode-supported" "^0.1.0" - -"log-symbols@3.0.0": - "integrity" "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==" - "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "chalk" "^2.4.2" - -"log-update@^4.0.0": - "integrity" "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==" - "resolved" "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-escapes" "^4.3.0" - "cli-cursor" "^3.1.0" - "slice-ansi" "^4.0.0" - "wrap-ansi" "^6.2.0" - -"loglevel@^1.8.0": - "integrity" "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==" - "resolved" "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz" - "version" "1.8.0" - -"loupe@^2.3.1": - "integrity" "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==" - "resolved" "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" - "version" "2.3.4" - dependencies: - "get-func-name" "^2.0.0" - -"lowercase-keys@^1.0.0", "lowercase-keys@^1.0.1": - "integrity" "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" - "version" "1.0.1" - -"lowercase-keys@^2.0.0": - "integrity" "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" - "version" "2.0.0" - -"lowercase-keys@^3.0.0": - "integrity" "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==" - "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" - "version" "3.0.0" - -"lru_map@^0.3.3": - "integrity" "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" - "resolved" "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" - "version" "0.3.3" - -"lru-cache@^5.1.1": - "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "yallist" "^3.0.2" - -"lru-cache@^6.0.0": - "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "yallist" "^4.0.0" - -"lru-cache@^7.4.4": - "integrity" "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" - "version" "7.14.0" - -"lru-cache@^7.5.1": - "integrity" "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" - "version" "7.14.0" - -"lru-cache@^7.7.1": - "integrity" "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" - "version" "7.14.0" - -"ltgt@~2.2.0": - "integrity" "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" - "resolved" "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz" - "version" "2.2.1" - -"make-dir@^2.1.0": - "integrity" "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "pify" "^4.0.1" - "semver" "^5.6.0" - -"make-dir@^3.0.0": - "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "semver" "^6.0.0" - -"make-error@^1.1.1": - "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - "version" "1.3.6" - -"make-fetch-happen@^10.0.3", "make-fetch-happen@^10.0.6": - "integrity" "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==" - "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" - "version" "10.2.1" - dependencies: - "agentkeepalive" "^4.2.1" - "cacache" "^16.1.0" - "http-cache-semantics" "^4.1.0" - "http-proxy-agent" "^5.0.0" - "https-proxy-agent" "^5.0.0" - "is-lambda" "^1.0.1" - "lru-cache" "^7.7.1" - "minipass" "^3.1.6" - "minipass-collect" "^1.0.2" - "minipass-fetch" "^2.0.3" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.4" - "negotiator" "^0.6.3" - "promise-retry" "^2.0.1" - "socks-proxy-agent" "^7.0.0" - "ssri" "^9.0.0" - -"makeerror@1.0.12": - "integrity" "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==" - "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" - "version" "1.0.12" - dependencies: - "tmpl" "1.0.5" - -"map-age-cleaner@^0.1.1": - "integrity" "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==" - "resolved" "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" - "version" "0.1.3" - dependencies: - "p-defer" "^1.0.0" - -"map-obj@^1.0.0": - "integrity" "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" - "resolved" "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" - "version" "1.0.1" - -"map-obj@^4.0.0": - "integrity" "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" - "resolved" "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" - "version" "4.3.0" - -"markdown-table@^1.1.3": - "integrity" "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==" - "resolved" "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz" - "version" "1.1.3" - -"match-all@^1.2.6": - "integrity" "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==" - "resolved" "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz" - "version" "1.2.6" - -"mcl-wasm@^0.7.1": - "integrity" "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==" - "resolved" "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz" - "version" "0.7.9" - -"md5.js@^1.3.4": - "integrity" "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==" - "resolved" "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" - "version" "1.3.5" - dependencies: - "hash-base" "^3.0.0" - "inherits" "^2.0.1" - "safe-buffer" "^5.1.2" - -"media-typer@0.3.0": - "integrity" "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - "version" "0.3.0" - -"mem@^4.0.0": - "integrity" "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==" - "resolved" "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "map-age-cleaner" "^0.1.1" - "mimic-fn" "^2.0.0" - "p-is-promise" "^2.0.0" - -"memdown@^1.0.0": - "integrity" "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==" - "resolved" "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "abstract-leveldown" "~2.7.1" - "functional-red-black-tree" "^1.0.1" - "immediate" "^3.2.3" - "inherits" "~2.0.1" - "ltgt" "~2.2.0" - "safe-buffer" "~5.1.1" - -"memory-level@^1.0.0": - "integrity" "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==" - "resolved" "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "abstract-level" "^1.0.0" - "functional-red-black-tree" "^1.0.1" - "module-error" "^1.0.1" - -"memorystream@^0.3.1": - "integrity" "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==" - "resolved" "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" - "version" "0.3.1" - -"meow@^8.0.0": - "integrity" "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==" - "resolved" "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" - "version" "8.1.2" + import-local "^3.0.2" + inquirer "^8.2.4" + npmlog "^6.0.2" + nx ">=14.8.1 < 16" + typescript "^3 || ^4" + +level-codec@~7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz" + integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== + +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-errors@^1.0.3: + version "1.1.2" + resolved "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz" + integrity sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w== + dependencies: + errno "~0.1.1" + +level-errors@~1.0.3: + version "1.0.5" + resolved "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz" + integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig== + dependencies: + errno "~0.1.1" + +level-iterator-stream@~1.3.0: + version "1.3.1" + resolved "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz" + integrity sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw== + dependencies: + inherits "^2.0.1" + level-errors "^1.0.3" + readable-stream "^1.0.33" + xtend "^4.0.0" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-transcoder@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== + dependencies: + buffer "^6.0.3" + module-error "^1.0.1" + +level-ws@0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz" + integrity sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw== + dependencies: + readable-stream "~1.0.15" + xtend "~2.1.1" + +level@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/level/-/level-8.0.0.tgz" + integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== + dependencies: + browser-level "^1.0.1" + classic-level "^1.2.0" + +leveldown@6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz" + integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +levelup@^1.2.1: + version "1.3.9" + resolved "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz" + integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ== + dependencies: + deferred-leveldown "~1.2.1" + level-codec "~7.0.0" + level-errors "~1.0.3" + level-iterator-stream "~1.3.0" + prr "~1.0.1" + semver "~5.4.1" + xtend "~4.0.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +libnpmaccess@^6.0.3: + version "6.0.4" + resolved "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.4.tgz" + integrity sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag== + dependencies: + aproba "^2.0.0" + minipass "^3.1.1" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + +libnpmpublish@^6.0.4: + version "6.0.5" + resolved "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.5.tgz" + integrity sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg== + dependencies: + normalize-package-data "^4.0.0" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + semver "^7.3.7" + ssri "^9.0.0" + +lilconfig@2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz" + integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lint-staged@^12.3.7: + version "12.5.0" + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz" + integrity sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.16" + commander "^9.3.0" + debug "^4.3.4" + execa "^5.1.1" + lilconfig "2.0.5" + listr2 "^4.0.5" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-inspect "^1.12.2" + pidtree "^0.5.0" + string-argv "^0.3.1" + supports-color "^9.2.2" + yaml "^1.10.2" + +listr2@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz" + integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.5" + through "^2.3.8" + wrap-ansi "^7.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-json-file@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== + dependencies: + graceful-fs "^4.1.15" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + 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" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +log-symbols@4.1.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +loglevel@^1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz" + integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== + +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +loupe@^2.3.1: + version "2.3.4" + resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" + integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== + dependencies: + get-func-name "^2.0.0" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.14.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" + integrity sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +ltgt@~2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz" + integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: + version "10.2.1" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +markdown-table@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + +match-all@^1.2.6: + version "1.2.6" + resolved "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz" + integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== + +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memdown@^1.0.0: + version "1.4.1" + resolved "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz" + integrity sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w== + dependencies: + abstract-leveldown "~2.7.1" + functional-red-black-tree "^1.0.1" + immediate "^3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.1.1" + +memory-level@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz" + integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== + dependencies: + abstract-level "^1.0.0" + functional-red-black-tree "^1.0.1" + module-error "^1.0.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== dependencies: "@types/minimist" "^1.2.0" - "camelcase-keys" "^6.2.2" - "decamelize-keys" "^1.1.0" - "hard-rejection" "^2.1.0" - "minimist-options" "4.1.0" - "normalize-package-data" "^3.0.0" - "read-pkg-up" "^7.0.1" - "redent" "^3.0.0" - "trim-newlines" "^3.0.0" - "type-fest" "^0.18.0" - "yargs-parser" "^20.2.3" - -"merge-descriptors@1.0.1": - "integrity" "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - "version" "1.0.1" - -"merge-stream@^2.0.0": - "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - "version" "2.0.0" - -"merge2@^1.2.3", "merge2@^1.3.0", "merge2@^1.4.1": - "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - "version" "1.4.1" - -"merkle-patricia-tree@^2.1.2", "merkle-patricia-tree@^2.3.2": - "integrity" "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==" - "resolved" "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz" - "version" "2.3.2" - dependencies: - "async" "^1.4.2" - "ethereumjs-util" "^5.0.0" - "level-ws" "0.0.0" - "levelup" "^1.2.1" - "memdown" "^1.0.0" - "readable-stream" "^2.0.0" - "rlp" "^2.0.0" - "semaphore" ">=1.0.1" - -"methods@~1.1.2": - "integrity" "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - "version" "1.1.2" - -"micromatch@^4.0.4", "micromatch@^4.0.5": - "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - "version" "4.0.5" - dependencies: - "braces" "^3.0.2" - "picomatch" "^2.3.1" - -"miller-rabin@^4.0.0": - "integrity" "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==" - "resolved" "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "bn.js" "^4.0.0" - "brorand" "^1.0.1" - -"mime-db@1.52.0": - "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - "version" "1.52.0" - -"mime-types@^2.1.12", "mime-types@^2.1.16", "mime-types@~2.1.19", "mime-types@~2.1.24", "mime-types@~2.1.34": - "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" - "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - "version" "2.1.35" - dependencies: - "mime-db" "1.52.0" - -"mime@1.6.0": - "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - "version" "1.6.0" - -"mimic-fn@^2.0.0": - "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - "version" "2.1.0" - -"mimic-fn@^2.1.0": - "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - "version" "2.1.0" - -"mimic-response@^1.0.0", "mimic-response@^1.0.1": - "integrity" "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - "version" "1.0.1" - -"mimic-response@^3.1.0": - "integrity" "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" - "version" "3.1.0" - -"min-document@^2.19.0": - "integrity" "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==" - "resolved" "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" - "version" "2.19.0" - dependencies: - "dom-walk" "^0.1.0" - -"min-indent@^1.0.0": - "integrity" "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" - "resolved" "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" - "version" "1.0.1" - -"minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1": - "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" - "version" "1.0.1" - -"minimalistic-crypto-utils@^1.0.0", "minimalistic-crypto-utils@^1.0.1": - "integrity" "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - "resolved" "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" - "version" "1.0.1" - -"minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2", "minimatch@2 || 3": - "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "brace-expansion" "^1.1.7" - -"minimatch@^5.0.1": - "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "brace-expansion" "^2.0.1" - -"minimatch@3.0.4": - "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "brace-expansion" "^1.1.7" - -"minimatch@3.0.5": - "integrity" "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" - "version" "3.0.5" - dependencies: - "brace-expansion" "^1.1.7" - -"minimatch@4.2.1": - "integrity" "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz" - "version" "4.2.1" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz" + integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== + dependencies: + async "^1.4.2" + ethereumjs-util "^5.0.0" + level-ws "0.0.0" + levelup "^1.2.1" + memdown "^1.0.0" + readable-stream "^2.0.0" + rlp "^2.0.0" + semaphore ">=1.0.1" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + 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" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +"minimatch@2 || 3", 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" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz" + integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== + dependencies: + brace-expansion "^1.1.7" + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== dependencies: - "brace-expansion" "^1.1.7" - -"minimatch@5.0.1": - "integrity" "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "brace-expansion" "^2.0.1" - -"minimist-options@4.1.0": - "integrity" "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==" - "resolved" "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "arrify" "^1.0.1" - "is-plain-obj" "^1.1.0" - "kind-of" "^6.0.3" + brace-expansion "^2.0.1" -"minimist@^1.2.0", "minimist@^1.2.5", "minimist@^1.2.6": - "integrity" "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" - "version" "1.2.7" - -"minipass-collect@^1.0.2": - "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" - "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "minipass" "^3.0.0" +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" -"minipass-fetch@^2.0.3": - "integrity" "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==" - "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "minipass" "^3.1.6" - "minipass-sized" "^1.0.3" - "minizlib" "^2.1.2" - optionalDependencies: - "encoding" "^0.1.13" +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" -"minipass-flush@^1.0.5": - "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" - "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - "version" "1.0.5" +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: - "minipass" "^3.0.0" + minipass "^3.0.0" -"minipass-json-stream@^1.0.1": - "integrity" "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==" - "resolved" "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" - "version" "1.0.1" +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== dependencies: - "jsonparse" "^1.3.1" - "minipass" "^3.0.0" + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" -"minipass-pipeline@^1.2.4": - "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" - "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - "version" "1.2.4" +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: - "minipass" "^3.0.0" + minipass "^3.0.0" -"minipass-sized@^1.0.3": - "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" - "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - "version" "1.0.3" +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== dependencies: - "minipass" "^3.0.0" + jsonparse "^1.3.1" + minipass "^3.0.0" -"minipass@^2.6.0", "minipass@^2.9.0": - "integrity" "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==" - "resolved" "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" - "version" "2.9.0" - dependencies: - "safe-buffer" "^5.1.2" - "yallist" "^3.0.0" - -"minipass@^3.0.0", "minipass@^3.1.1", "minipass@^3.1.6": - "integrity" "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==" - "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" - "version" "3.3.4" - dependencies: - "yallist" "^4.0.0" - -"minizlib@^1.3.3": - "integrity" "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==" - "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" - "version" "1.3.3" - dependencies: - "minipass" "^2.9.0" - -"minizlib@^2.1.1", "minizlib@^2.1.2": - "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" - "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "minipass" "^3.0.0" - "yallist" "^4.0.0" - -"mkdirp-infer-owner@^2.0.0": - "integrity" "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==" - "resolved" "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "chownr" "^2.0.0" - "infer-owner" "^1.0.4" - "mkdirp" "^1.0.3" - -"mkdirp-promise@^5.0.1": - "integrity" "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==" - "resolved" "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "mkdirp" "*" - -"mkdirp@*", "mkdirp@^1.0.3", "mkdirp@^1.0.4": - "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - "version" "1.0.4" - -"mkdirp@^0.5.1": - "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - "version" "0.5.6" - dependencies: - "minimist" "^1.2.6" - -"mkdirp@^0.5.5": - "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - "version" "0.5.6" - dependencies: - "minimist" "^1.2.6" - -"mkdirp@0.5.5": - "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - "version" "0.5.5" - dependencies: - "minimist" "^1.2.5" - -"mkdirp@0.5.x": - "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - "version" "0.5.6" - dependencies: - "minimist" "^1.2.6" - -"mnemonist@^0.38.0": - "integrity" "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==" - "resolved" "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz" - "version" "0.38.5" - dependencies: - "obliterator" "^2.0.0" - -"mocha@^10.0.0": - "integrity" "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==" - "resolved" "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz" - "version" "10.1.0" - dependencies: - "ansi-colors" "4.1.1" - "browser-stdout" "1.3.1" - "chokidar" "3.5.3" - "debug" "4.3.4" - "diff" "5.0.0" - "escape-string-regexp" "4.0.0" - "find-up" "5.0.0" - "glob" "7.2.0" - "he" "1.2.0" - "js-yaml" "4.1.0" - "log-symbols" "4.1.0" - "minimatch" "5.0.1" - "ms" "2.1.3" - "nanoid" "3.3.3" - "serialize-javascript" "6.0.0" - "strip-json-comments" "3.1.1" - "supports-color" "8.1.1" - "workerpool" "6.2.1" - "yargs" "16.2.0" - "yargs-parser" "20.2.4" - "yargs-unparser" "2.0.0" - -"mocha@^7.1.1": - "integrity" "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==" - "resolved" "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "ansi-colors" "3.2.3" - "browser-stdout" "1.3.1" - "chokidar" "3.3.0" - "debug" "3.2.6" - "diff" "3.5.0" - "escape-string-regexp" "1.0.5" - "find-up" "3.0.0" - "glob" "7.1.3" - "growl" "1.10.5" - "he" "1.2.0" - "js-yaml" "3.13.1" - "log-symbols" "3.0.0" - "minimatch" "3.0.4" - "mkdirp" "0.5.5" - "ms" "2.1.1" - "node-environment-flags" "1.0.6" - "object.assign" "4.1.0" - "strip-json-comments" "2.0.1" - "supports-color" "6.0.0" - "which" "1.3.1" - "wide-align" "1.1.3" - "yargs" "13.3.2" - "yargs-parser" "13.1.2" - "yargs-unparser" "1.6.0" - -"mocha@^9.2.2": - "integrity" "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==" - "resolved" "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz" - "version" "9.2.2" +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: + version "3.3.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-infer-owner@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz" + integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== + dependencies: + chownr "^2.0.0" + infer-owner "^1.0.4" + mkdirp "^1.0.3" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz" + integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== + dependencies: + mkdirp "*" + +mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@0.5.5: + version "0.5.5" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0: + version "10.1.0" + resolved "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz" + integrity sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +mocha@^7.1.1: + version "7.2.0" + resolved "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz" + integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== + dependencies: + ansi-colors "3.2.3" + browser-stdout "1.3.1" + chokidar "3.3.0" + debug "3.2.6" + diff "3.5.0" + escape-string-regexp "1.0.5" + find-up "3.0.0" + glob "7.1.3" + growl "1.10.5" + he "1.2.0" + js-yaml "3.13.1" + log-symbols "3.0.0" + minimatch "3.0.4" + mkdirp "0.5.5" + ms "2.1.1" + node-environment-flags "1.0.6" + object.assign "4.1.0" + strip-json-comments "2.0.1" + supports-color "6.0.0" + which "1.3.1" + wide-align "1.1.3" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "1.6.0" + +mocha@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz" + integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== dependencies: "@ungap/promise-all-settled" "1.1.2" - "ansi-colors" "4.1.1" - "browser-stdout" "1.3.1" - "chokidar" "3.5.3" - "debug" "4.3.3" - "diff" "5.0.0" - "escape-string-regexp" "4.0.0" - "find-up" "5.0.0" - "glob" "7.2.0" - "growl" "1.10.5" - "he" "1.2.0" - "js-yaml" "4.1.0" - "log-symbols" "4.1.0" - "minimatch" "4.2.1" - "ms" "2.1.3" - "nanoid" "3.3.1" - "serialize-javascript" "6.0.0" - "strip-json-comments" "3.1.1" - "supports-color" "8.1.1" - "which" "2.0.2" - "workerpool" "6.2.0" - "yargs" "16.2.0" - "yargs-parser" "20.2.4" - "yargs-unparser" "2.0.0" - -"mock-fs@^4.1.0": - "integrity" "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" - "resolved" "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz" - "version" "4.14.0" - -"modify-values@^1.0.0": - "integrity" "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==" - "resolved" "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" - "version" "1.0.1" - -"module-error@^1.0.1", "module-error@^1.0.2": - "integrity" "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==" - "resolved" "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz" - "version" "1.0.2" - -"ms@^2.0.0", "ms@2.1.3": - "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - "version" "2.1.3" - -"ms@^2.1.1": - "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - "version" "2.1.3" - -"ms@2.0.0": - "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - "version" "2.0.0" - -"ms@2.1.1": - "integrity" "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" - "version" "2.1.1" - -"ms@2.1.2": - "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - "version" "2.1.2" - -"multibase@^0.7.0": - "integrity" "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==" - "resolved" "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz" - "version" "0.7.0" - dependencies: - "base-x" "^3.0.8" - "buffer" "^5.5.0" - -"multibase@~0.6.0": - "integrity" "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==" - "resolved" "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz" - "version" "0.6.1" - dependencies: - "base-x" "^3.0.8" - "buffer" "^5.5.0" - -"multicodec@^0.5.5": - "integrity" "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==" - "resolved" "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz" - "version" "0.5.7" - dependencies: - "varint" "^5.0.0" - -"multicodec@^1.0.0": - "integrity" "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==" - "resolved" "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "buffer" "^5.6.0" - "varint" "^5.0.0" - -"multihashes@^0.4.15", "multihashes@~0.4.15": - "integrity" "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==" - "resolved" "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz" - "version" "0.4.21" - dependencies: - "buffer" "^5.5.0" - "multibase" "^0.7.0" - "varint" "^5.0.0" - -"multimatch@^5.0.0": - "integrity" "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==" - "resolved" "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" - "version" "5.0.0" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.3" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + growl "1.10.5" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "4.2.1" + ms "2.1.3" + nanoid "3.3.1" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + workerpool "6.2.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +mock-fs@^4.1.0: + version "4.14.0" + resolved "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + +multimatch@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== dependencies: "@types/minimatch" "^3.0.3" - "array-differ" "^3.0.0" - "array-union" "^2.1.0" - "arrify" "^2.0.1" - "minimatch" "^3.0.4" - -"murmur-128@^0.2.1": - "integrity" "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==" - "resolved" "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz" - "version" "0.2.1" - dependencies: - "encode-utf8" "^1.0.2" - "fmix" "^0.1.0" - "imul" "^1.0.0" - -"mute-stream@~0.0.4", "mute-stream@0.0.8": - "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - "version" "0.0.8" - -"nano-json-stream-parser@^0.1.2": - "integrity" "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" - "resolved" "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz" - "version" "0.1.2" - -"nanoid@3.3.1": - "integrity" "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" - "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" - "version" "3.3.1" - -"nanoid@3.3.3": - "integrity" "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" - "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" - "version" "3.3.3" - -"napi-macros@~2.0.0": - "integrity" "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" - "resolved" "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz" - "version" "2.0.0" - -"natural-compare@^1.4.0": - "integrity" "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - "version" "1.4.0" - -"negotiator@^0.6.3", "negotiator@0.6.3": - "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - "version" "0.6.3" - -"neo-async@^2.6.0": - "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" - "version" "2.6.2" - -"next-tick@^1.1.0": - "integrity" "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - "resolved" "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" - "version" "1.1.0" - -"nice-try@^1.0.4": - "integrity" "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - "resolved" "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" - "version" "1.0.5" - -"nock@^13.2.9": - "integrity" "sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA==" - "resolved" "https://registry.npmjs.org/nock/-/nock-13.2.9.tgz" - "version" "13.2.9" - dependencies: - "debug" "^4.1.0" - "json-stringify-safe" "^5.0.1" - "lodash" "^4.17.21" - "propagate" "^2.0.0" - -"node-addon-api@^2.0.0": - "integrity" "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" - "version" "2.0.2" - -"node-addon-api@^3.2.1": - "integrity" "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" - "version" "3.2.1" - -"node-emoji@^1.10.0": - "integrity" "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==" - "resolved" "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" - "version" "1.11.0" - dependencies: - "lodash" "^4.17.21" - -"node-environment-flags@1.0.6": - "integrity" "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==" - "resolved" "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "object.getownpropertydescriptors" "^2.0.3" - "semver" "^5.7.0" - -"node-fetch@^2.6.0", "node-fetch@^2.6.1", "node-fetch@^2.6.6", "node-fetch@^2.6.7", "node-fetch@2.6.7": - "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" - "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - "version" "2.6.7" - dependencies: - "whatwg-url" "^5.0.0" - -"node-gyp-build@^4.2.0", "node-gyp-build@^4.3.0": - "integrity" "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz" - "version" "4.5.0" - -"node-gyp-build@4.4.0": - "integrity" "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" - "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz" - "version" "4.4.0" - -"node-gyp@^9.0.0", "node-gyp@^9.1.0": - "integrity" "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==" - "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz" - "version" "9.3.0" - dependencies: - "env-paths" "^2.2.0" - "glob" "^7.1.4" - "graceful-fs" "^4.2.6" - "make-fetch-happen" "^10.0.3" - "nopt" "^6.0.0" - "npmlog" "^6.0.0" - "rimraf" "^3.0.2" - "semver" "^7.3.5" - "tar" "^6.1.2" - "which" "^2.0.2" - -"node-int64@^0.4.0": - "integrity" "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - "version" "0.4.0" - -"node-releases@^2.0.6": - "integrity" "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" - "version" "2.0.6" - -"nofilter@^1.0.4": - "integrity" "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==" - "resolved" "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz" - "version" "1.0.4" - -"nopt@^5.0.0": - "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" - "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "abbrev" "1" - -"nopt@^6.0.0": - "integrity" "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==" - "resolved" "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "abbrev" "^1.0.0" - -"nopt@3.x": - "integrity" "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==" - "resolved" "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" - "version" "3.0.6" - dependencies: - "abbrev" "1" - -"normalize-package-data@^2.3.2": - "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "hosted-git-info" "^2.1.4" - "resolve" "^1.10.0" - "semver" "2 || 3 || 4 || 5" - "validate-npm-package-license" "^3.0.1" - -"normalize-package-data@^2.5.0": - "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "hosted-git-info" "^2.1.4" - "resolve" "^1.10.0" - "semver" "2 || 3 || 4 || 5" - "validate-npm-package-license" "^3.0.1" - -"normalize-package-data@^3.0.0": - "integrity" "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "hosted-git-info" "^4.0.1" - "is-core-module" "^2.5.0" - "semver" "^7.3.4" - "validate-npm-package-license" "^3.0.1" - -"normalize-package-data@^4.0.0": - "integrity" "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "hosted-git-info" "^5.0.0" - "is-core-module" "^2.8.1" - "semver" "^7.3.5" - "validate-npm-package-license" "^3.0.4" - -"normalize-path@^3.0.0", "normalize-path@~3.0.0": - "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - "version" "3.0.0" - -"normalize-url@^4.1.0": - "integrity" "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" - "version" "4.5.1" - -"normalize-url@^6.0.1": - "integrity" "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" - "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" - "version" "6.1.0" - -"npm-bundled@^1.1.1": - "integrity" "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==" - "resolved" "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "npm-normalize-package-bin" "^1.0.1" - -"npm-bundled@^2.0.0": - "integrity" "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==" - "resolved" "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "npm-normalize-package-bin" "^2.0.0" - -"npm-install-checks@^5.0.0": - "integrity" "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==" - "resolved" "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "semver" "^7.1.1" - -"npm-normalize-package-bin@^1.0.1": - "integrity" "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - "resolved" "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" - "version" "1.0.1" - -"npm-normalize-package-bin@^2.0.0": - "integrity" "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==" - "resolved" "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz" - "version" "2.0.0" - -"npm-package-arg@^9.0.0": - "integrity" "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==" - "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz" - "version" "9.1.2" - dependencies: - "hosted-git-info" "^5.0.0" - "proc-log" "^2.0.1" - "semver" "^7.3.5" - "validate-npm-package-name" "^4.0.0" - -"npm-package-arg@^9.0.1": - "integrity" "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==" - "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz" - "version" "9.1.2" - dependencies: - "hosted-git-info" "^5.0.0" - "proc-log" "^2.0.1" - "semver" "^7.3.5" - "validate-npm-package-name" "^4.0.0" - -"npm-package-arg@8.1.1": - "integrity" "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==" - "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz" - "version" "8.1.1" - dependencies: - "hosted-git-info" "^3.0.6" - "semver" "^7.0.0" - "validate-npm-package-name" "^3.0.0" - -"npm-packlist@^5.1.0", "npm-packlist@^5.1.1": - "integrity" "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==" - "resolved" "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz" - "version" "5.1.3" - dependencies: - "glob" "^8.0.1" - "ignore-walk" "^5.0.1" - "npm-bundled" "^2.0.0" - "npm-normalize-package-bin" "^2.0.0" - -"npm-pick-manifest@^7.0.0": - "integrity" "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==" - "resolved" "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz" - "version" "7.0.2" - dependencies: - "npm-install-checks" "^5.0.0" - "npm-normalize-package-bin" "^2.0.0" - "npm-package-arg" "^9.0.0" - "semver" "^7.3.5" - -"npm-registry-fetch@^13.0.0", "npm-registry-fetch@^13.0.1", "npm-registry-fetch@^13.3.0": - "integrity" "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==" - "resolved" "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz" - "version" "13.3.1" - dependencies: - "make-fetch-happen" "^10.0.6" - "minipass" "^3.1.6" - "minipass-fetch" "^2.0.3" - "minipass-json-stream" "^1.0.1" - "minizlib" "^2.1.2" - "npm-package-arg" "^9.0.1" - "proc-log" "^2.0.0" - -"npm-run-path@^2.0.0": - "integrity" "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "path-key" "^2.0.0" - -"npm-run-path@^4.0.1": - "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "path-key" "^3.0.0" - -"npmlog@^6.0.0", "npmlog@^6.0.2": - "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "are-we-there-yet" "^3.0.0" - "console-control-strings" "^1.1.0" - "gauge" "^4.0.3" - "set-blocking" "^2.0.0" - -"number-to-bn@1.7.0": - "integrity" "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==" - "resolved" "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz" - "version" "1.7.0" - dependencies: - "bn.js" "4.11.6" - "strip-hex-prefix" "1.0.0" - -"nx@^15.0.3", "nx@>= 14 <= 16", "nx@>=14.8.1 < 16", "nx@15.0.3": - "integrity" "sha512-d9VWeArRfh4erWriWBMWK24nW6njZHXB/WVl/+8rTq1OirdpHrnILixzogEmTmaBKBE/XXR+zXFWVPHJlsEAYw==" - "resolved" "https://registry.npmjs.org/nx/-/nx-15.0.3.tgz" - "version" "15.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + +mute-stream@0.0.8, mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz" + integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== + +nanoid@3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== + +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.0: + version "2.6.2" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +nock@^13.2.9: + version "13.2.9" + resolved "https://registry.npmjs.org/nock/-/nock-13.2.9.tgz" + integrity sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA== + dependencies: + debug "^4.1.0" + json-stringify-safe "^5.0.1" + lodash "^4.17.21" + propagate "^2.0.0" + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-addon-api@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-environment-flags@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz" + integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== + dependencies: + object.getownpropertydescriptors "^2.0.3" + semver "^5.7.0" + +node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.5.0" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz" + integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + +node-gyp@^9.0.0, node-gyp@^9.1.0: + version "9.3.0" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz" + integrity sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +nofilter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz" + integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== + +nopt@3.x: + version "3.0.6" + resolved "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" + integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== + dependencies: + abbrev "1" + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + 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-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz" + integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== + dependencies: + hosted-git-info "^5.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +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" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-bundled@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-bundled@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz" + integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== + dependencies: + npm-normalize-package-bin "^2.0.0" + +npm-install-checks@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz" + integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-normalize-package-bin@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz" + integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== + +npm-package-arg@8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz" + integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== + dependencies: + hosted-git-info "^3.0.6" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: + version "9.1.2" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz" + integrity sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg== + dependencies: + hosted-git-info "^5.0.0" + proc-log "^2.0.1" + semver "^7.3.5" + validate-npm-package-name "^4.0.0" + +npm-packlist@^5.1.0, npm-packlist@^5.1.1: + version "5.1.3" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz" + integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== + dependencies: + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^2.0.0" + npm-normalize-package-bin "^2.0.0" + +npm-pick-manifest@^7.0.0: + version "7.0.2" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz" + integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== + dependencies: + npm-install-checks "^5.0.0" + npm-normalize-package-bin "^2.0.0" + npm-package-arg "^9.0.0" + semver "^7.3.5" + +npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.0: + version "13.3.1" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz" + integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== + dependencies: + make-fetch-happen "^10.0.6" + minipass "^3.1.6" + minipass-fetch "^2.0.3" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^9.0.1" + proc-log "^2.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^6.0.0, npmlog@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.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" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +nx@15.0.3, "nx@>=14.8.1 < 16": + version "15.0.3" + resolved "https://registry.npmjs.org/nx/-/nx-15.0.3.tgz" + integrity sha512-d9VWeArRfh4erWriWBMWK24nW6njZHXB/WVl/+8rTq1OirdpHrnILixzogEmTmaBKBE/XXR+zXFWVPHJlsEAYw== dependencies: "@nrwl/cli" "15.0.3" "@nrwl/tao" "15.0.3" @@ -9990,1312 +9922,1337 @@ "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "^3.0.0-rc.18" "@zkochan/js-yaml" "0.0.6" - "axios" "^1.0.0" - "chalk" "4.1.0" - "chokidar" "^3.5.1" - "cli-cursor" "3.1.0" - "cli-spinners" "2.6.1" - "cliui" "^7.0.2" - "dotenv" "~10.0.0" - "enquirer" "~2.3.6" - "fast-glob" "3.2.7" - "figures" "3.2.0" - "flat" "^5.0.2" - "fs-extra" "^10.1.0" - "glob" "7.1.4" - "ignore" "^5.0.4" - "js-yaml" "4.1.0" - "jsonc-parser" "3.2.0" - "minimatch" "3.0.5" - "npm-run-path" "^4.0.1" - "open" "^8.4.0" - "semver" "7.3.4" - "string-width" "^4.2.3" - "strong-log-transformer" "^2.1.0" - "tar-stream" "~2.2.0" - "tmp" "~0.2.1" - "tsconfig-paths" "^3.9.0" - "tslib" "^2.3.0" - "v8-compile-cache" "2.3.0" - "yargs" "^17.4.0" - "yargs-parser" "21.0.1" - -"oauth-sign@~0.9.0": - "integrity" "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - "resolved" "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" - "version" "0.9.0" - -"object-assign@^4", "object-assign@^4.1.0", "object-assign@^4.1.1": - "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - "version" "4.1.1" - -"object-inspect@^1.12.2", "object-inspect@^1.9.0": - "integrity" "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" - "version" "1.12.2" - -"object-keys@^1.0.11", "object-keys@^1.1.1": - "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - "version" "1.1.1" - -"object-keys@~0.4.0": - "integrity" "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" - "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" - "version" "0.4.0" - -"object.assign@^4.1.4": - "integrity" "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==" - "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" - "version" "4.1.4" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "has-symbols" "^1.0.3" - "object-keys" "^1.1.1" - -"object.assign@4.1.0": - "integrity" "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==" - "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "define-properties" "^1.1.2" - "function-bind" "^1.1.1" - "has-symbols" "^1.0.0" - "object-keys" "^1.0.11" - -"object.getownpropertydescriptors@^2.0.3": - "integrity" "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==" - "resolved" "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz" - "version" "2.1.4" - dependencies: - "array.prototype.reduce" "^1.0.4" - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.1" - -"obliterator@^2.0.0": - "integrity" "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" - "resolved" "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" - "version" "2.0.4" - -"oboe@2.1.5": - "integrity" "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==" - "resolved" "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz" - "version" "2.1.5" - dependencies: - "http-https" "^1.0.0" - -"on-finished@2.4.1": - "integrity" "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==" - "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - "version" "2.4.1" - dependencies: - "ee-first" "1.1.1" - -"once@^1.3.0", "once@^1.3.1", "once@^1.4.0", "once@1.x": - "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" - "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "wrappy" "1" - -"onetime@^5.1.0", "onetime@^5.1.2": - "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" - "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "mimic-fn" "^2.1.0" - -"open@^8.4.0": - "integrity" "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==" - "resolved" "https://registry.npmjs.org/open/-/open-8.4.0.tgz" - "version" "8.4.0" - dependencies: - "define-lazy-prop" "^2.0.0" - "is-docker" "^2.1.1" - "is-wsl" "^2.2.0" - -"optionator@^0.8.1": - "integrity" "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" - "version" "0.8.3" - dependencies: - "deep-is" "~0.1.3" - "fast-levenshtein" "~2.0.6" - "levn" "~0.3.0" - "prelude-ls" "~1.1.2" - "type-check" "~0.3.2" - "word-wrap" "~1.2.3" - -"optionator@^0.9.1": - "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - "version" "0.9.1" - dependencies: - "deep-is" "^0.1.3" - "fast-levenshtein" "^2.0.6" - "levn" "^0.4.1" - "prelude-ls" "^1.2.1" - "type-check" "^0.4.0" - "word-wrap" "^1.2.3" - -"ora@^5.4.1": - "integrity" "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==" - "resolved" "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - "version" "5.4.1" - dependencies: - "bl" "^4.1.0" - "chalk" "^4.1.0" - "cli-cursor" "^3.1.0" - "cli-spinners" "^2.5.0" - "is-interactive" "^1.0.0" - "is-unicode-supported" "^0.1.0" - "log-symbols" "^4.1.0" - "strip-ansi" "^6.0.0" - "wcwidth" "^1.0.1" - -"ordinal@^1.0.3": - "integrity" "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==" - "resolved" "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz" - "version" "1.0.3" - -"os-locale@^3.1.0": - "integrity" "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==" - "resolved" "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "execa" "^1.0.0" - "lcid" "^2.0.0" - "mem" "^4.0.0" - -"os-tmpdir@~1.0.2": - "integrity" "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - "version" "1.0.2" - -"p-cancelable@^1.0.0": - "integrity" "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" - "version" "1.1.0" - -"p-cancelable@^2.0.0": - "integrity" "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" - "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" - "version" "2.1.1" - -"p-cancelable@^3.0.0": - "integrity" "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==" - "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" - "version" "3.0.0" - -"p-defer@^1.0.0": - "integrity" "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==" - "resolved" "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" - "version" "1.0.0" - -"p-finally@^1.0.0": - "integrity" "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" - "resolved" "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" - "version" "1.0.0" - -"p-is-promise@^2.0.0": - "integrity" "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" - "resolved" "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz" - "version" "2.1.0" - -"p-limit@^1.1.0": - "integrity" "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "p-try" "^1.0.0" - -"p-limit@^2.0.0": - "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "p-try" "^2.0.0" - -"p-limit@^2.2.0": - "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "p-try" "^2.0.0" - -"p-limit@^3.0.2", "p-limit@^3.1.0": - "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "yocto-queue" "^0.1.0" - -"p-locate@^2.0.0": - "integrity" "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "p-limit" "^1.1.0" - -"p-locate@^3.0.0": - "integrity" "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "p-limit" "^2.0.0" - -"p-locate@^4.1.0": - "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "p-limit" "^2.2.0" - -"p-locate@^5.0.0": - "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "p-limit" "^3.0.2" - -"p-map-series@^2.1.0": - "integrity" "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==" - "resolved" "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz" - "version" "2.1.0" + axios "^1.0.0" + chalk "4.1.0" + chokidar "^3.5.1" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^7.0.2" + dotenv "~10.0.0" + enquirer "~2.3.6" + fast-glob "3.2.7" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^10.1.0" + glob "7.1.4" + ignore "^5.0.4" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + minimatch "3.0.5" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.3.4" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^3.9.0" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.4.0" + yargs-parser "21.0.1" + +nx@15.0.4, nx@^15.0.4: + version "15.0.4" + resolved "https://registry.yarnpkg.com/nx/-/nx-15.0.4.tgz#7299d4670c6a58584d47ca79ef79bec450163514" + integrity sha512-tCCiVJgCiX/R2zlL73dQsY49AxR/cA0dHX764KvLWIvB0mO8Zb7UWAwb8sdIbop3DqtGCopRTsAdOBcZXbe/9A== + dependencies: + "@nrwl/cli" "15.0.4" + "@nrwl/tao" "15.0.4" + "@parcel/watcher" "2.0.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "^3.0.0-rc.18" + "@zkochan/js-yaml" "0.0.6" + axios "^1.0.0" + chalk "4.1.0" + chokidar "^3.5.1" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^7.0.2" + dotenv "~10.0.0" + enquirer "~2.3.6" + fast-glob "3.2.7" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^10.1.0" + glob "7.1.4" + ignore "^5.0.4" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + minimatch "3.0.5" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.3.4" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^3.9.0" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.4.0" + yargs-parser "21.0.1" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.0.11, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" + integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== + +object.assign@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + 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.getownpropertydescriptors@^2.0.3: + version "2.1.4" + resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz" + integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== + dependencies: + array.prototype.reduce "^1.0.4" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.1" + +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +obliterator@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz" + integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== + dependencies: + http-https "^1.0.0" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.0" + resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +ordinal@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz" + integrity sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ== + +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + 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" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map-series@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz" + integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== -"p-map@^4.0.0": - "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" - "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - "version" "4.0.0" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: - "aggregate-error" "^3.0.0" + aggregate-error "^3.0.0" -"p-pipe@^3.1.0": - "integrity" "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==" - "resolved" "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz" - "version" "3.1.0" +p-pipe@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== -"p-queue@^6.6.2": - "integrity" "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==" - "resolved" "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" - "version" "6.6.2" +p-queue@^6.6.2: + version "6.6.2" + resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: - "eventemitter3" "^4.0.4" - "p-timeout" "^3.2.0" + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" -"p-reduce@^2.0.0", "p-reduce@^2.1.0": - "integrity" "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==" - "resolved" "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" - "version" "2.1.0" +p-reduce@^2.0.0, p-reduce@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== -"p-timeout@^3.2.0": - "integrity" "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==" - "resolved" "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" - "version" "3.2.0" +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: - "p-finally" "^1.0.0" + p-finally "^1.0.0" -"p-try@^1.0.0": - "integrity" "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" - "resolved" "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" - "version" "1.0.0" +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== -"p-try@^2.0.0": - "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - "version" "2.2.0" +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -"p-waterfall@^2.1.1": - "integrity" "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==" - "resolved" "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz" - "version" "2.1.1" +p-waterfall@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz" + integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== dependencies: - "p-reduce" "^2.0.0" + p-reduce "^2.0.0" -"pacote@^13.0.3", "pacote@^13.6.1": - "integrity" "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==" - "resolved" "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz" - "version" "13.6.2" +pacote@^13.0.3, pacote@^13.6.1: + version "13.6.2" + resolved "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz" + integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== dependencies: "@npmcli/git" "^3.0.0" "@npmcli/installed-package-contents" "^1.0.7" "@npmcli/promise-spawn" "^3.0.0" "@npmcli/run-script" "^4.1.0" - "cacache" "^16.0.0" - "chownr" "^2.0.0" - "fs-minipass" "^2.1.0" - "infer-owner" "^1.0.4" - "minipass" "^3.1.6" - "mkdirp" "^1.0.4" - "npm-package-arg" "^9.0.0" - "npm-packlist" "^5.1.0" - "npm-pick-manifest" "^7.0.0" - "npm-registry-fetch" "^13.0.1" - "proc-log" "^2.0.0" - "promise-retry" "^2.0.1" - "read-package-json" "^5.0.0" - "read-package-json-fast" "^2.0.3" - "rimraf" "^3.0.2" - "ssri" "^9.0.0" - "tar" "^6.1.11" - -"parent-module@^1.0.0": - "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" - "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "callsites" "^3.0.0" - -"parse-asn1@^5.0.0", "parse-asn1@^5.1.5": - "integrity" "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==" - "resolved" "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" - "version" "5.1.6" - dependencies: - "asn1.js" "^5.2.0" - "browserify-aes" "^1.0.0" - "evp_bytestokey" "^1.0.0" - "pbkdf2" "^3.0.3" - "safe-buffer" "^5.1.1" - -"parse-cache-control@^1.0.1": - "integrity" "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" - "resolved" "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz" - "version" "1.0.1" - -"parse-conflict-json@^2.0.1": - "integrity" "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==" - "resolved" "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "json-parse-even-better-errors" "^2.3.1" - "just-diff" "^5.0.1" - "just-diff-apply" "^5.2.0" - -"parse-headers@^2.0.0": - "integrity" "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" - "resolved" "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz" - "version" "2.0.5" - -"parse-json@^4.0.0": - "integrity" "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "error-ex" "^1.3.1" - "json-parse-better-errors" "^1.0.1" - -"parse-json@^5.0.0", "parse-json@^5.2.0": - "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - "version" "5.2.0" + cacache "^16.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.6" + mkdirp "^1.0.4" + npm-package-arg "^9.0.0" + npm-packlist "^5.1.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.1" + proc-log "^2.0.0" + promise-retry "^2.0.1" + read-package-json "^5.0.0" + read-package-json-fast "^2.0.3" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz" + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + +parse-conflict-json@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz" + integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== + dependencies: + json-parse-even-better-errors "^2.3.1" + just-diff "^5.0.1" + just-diff-apply "^5.2.0" + +parse-headers@^2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + 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" - -"parse-path@^7.0.0": - "integrity" "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==" - "resolved" "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "protocols" "^2.0.0" - -"parse-url@^8.1.0": - "integrity" "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==" - "resolved" "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz" - "version" "8.1.0" - dependencies: - "parse-path" "^7.0.0" - -"parseurl@~1.3.3": - "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - "version" "1.3.3" - -"path-exists@^3.0.0": - "integrity" "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" - "version" "3.0.0" - -"path-exists@^4.0.0": - "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - "version" "4.0.0" - -"path-is-absolute@^1.0.0": - "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - "version" "1.0.1" - -"path-key@^2.0.0", "path-key@^2.0.1": - "integrity" "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - "version" "2.0.1" - -"path-key@^3.0.0": - "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"path-key@^3.1.0": - "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"path-parse@^1.0.6", "path-parse@^1.0.7": - "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - "version" "1.0.7" - -"path-to-regexp@0.1.7": - "integrity" "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - "version" "0.1.7" - -"path-type@^3.0.0": - "integrity" "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "pify" "^3.0.0" - -"path-type@^4.0.0": - "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - "version" "4.0.0" - -"pathval@^1.1.1": - "integrity" "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" - "resolved" "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" - "version" "1.1.1" - -"pbkdf2@^3.0.17", "pbkdf2@^3.0.3": - "integrity" "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==" - "resolved" "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "create-hash" "^1.1.2" - "create-hmac" "^1.1.4" - "ripemd160" "^2.0.1" - "safe-buffer" "^5.0.1" - "sha.js" "^2.4.8" - -"performance-now@^2.1.0": - "integrity" "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - "resolved" "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" - "version" "2.1.0" - -"picocolors@^1.0.0": - "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - "version" "1.0.0" - -"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3", "picomatch@^2.3.1": - "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - "version" "2.3.1" - -"pidtree@^0.5.0": - "integrity" "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==" - "resolved" "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz" - "version" "0.5.0" - -"pify@^2.3.0": - "integrity" "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pify@^3.0.0": - "integrity" "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - "version" "3.0.0" - -"pify@^4.0.1": - "integrity" "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - "resolved" "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" - "version" "4.0.1" - -"pify@^5.0.0": - "integrity" "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" - "resolved" "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" - "version" "5.0.0" - -"pirates@^4.0.4": - "integrity" "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" - "resolved" "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" - "version" "4.0.5" - -"pkg-dir@^4.2.0": - "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" - "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" - "version" "4.2.0" - dependencies: - "find-up" "^4.0.0" - -"precond@0.2": - "integrity" "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==" - "resolved" "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz" - "version" "0.2.3" - -"prelude-ls@^1.2.1": - "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - "version" "1.2.1" - -"prelude-ls@~1.1.2": - "integrity" "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" - "version" "1.1.2" - -"prepend-http@^2.0.0": - "integrity" "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" - "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" - "version" "2.0.0" - -"prettier-linter-helpers@^1.0.0": - "integrity" "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==" - "resolved" "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "fast-diff" "^1.1.2" - -"prettier@^2.1.2", "prettier@^2.6.2", "prettier@>=2.0.0", "prettier@2.7.1": - "integrity" "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" - "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" - "version" "2.7.1" - -"pretty-format@^28.0.0", "pretty-format@^28.1.3": - "integrity" "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==" - "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" - "version" "28.1.3" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-path@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz" + integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== + dependencies: + protocols "^2.0.0" + +parse-url@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz" + integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== + dependencies: + parse-path "^7.0.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +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" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17, pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pidtree@^0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz" + integrity sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +precond@0.2: + version "0.2.3" + resolved "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz" + integrity sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@2.7.1, prettier@^2.1.2, prettier@^2.6.2: + version "2.7.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +pretty-format@^28.0.0, pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== dependencies: "@jest/schemas" "^28.1.3" - "ansi-regex" "^5.0.1" - "ansi-styles" "^5.0.0" - "react-is" "^18.0.0" - -"proc-log@^2.0.0", "proc-log@^2.0.1": - "integrity" "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==" - "resolved" "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz" - "version" "2.0.1" - -"process-nextick-args@~2.0.0": - "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - "version" "2.0.1" - -"process@^0.11.10": - "integrity" "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" - "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - "version" "0.11.10" - -"promise-all-reject-late@^1.0.0": - "integrity" "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==" - "resolved" "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz" - "version" "1.0.1" - -"promise-call-limit@^1.0.1": - "integrity" "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==" - "resolved" "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz" - "version" "1.0.1" - -"promise-inflight@^1.0.1": - "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - "version" "1.0.1" - -"promise-retry@^2.0.1": - "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" - "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "err-code" "^2.0.2" - "retry" "^0.12.0" - -"promise-to-callback@^1.0.0": - "integrity" "sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==" - "resolved" "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-fn" "^1.0.0" - "set-immediate-shim" "^1.0.1" - -"promise@^8.0.0": - "integrity" "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==" - "resolved" "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz" - "version" "8.3.0" - dependencies: - "asap" "~2.0.6" - -"prompts@^2.0.1": - "integrity" "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==" - "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "kleur" "^3.0.3" - "sisteransi" "^1.0.5" - -"promzard@^0.3.0": - "integrity" "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==" - "resolved" "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz" - "version" "0.3.0" - dependencies: - "read" "1" - -"propagate@^2.0.0": - "integrity" "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" - "resolved" "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz" - "version" "2.0.1" - -"proto-list@~1.2.1": - "integrity" "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - "resolved" "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" - "version" "1.2.4" - -"protocols@^2.0.0", "protocols@^2.0.1": - "integrity" "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==" - "resolved" "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz" - "version" "2.0.1" - -"proxy-addr@~2.0.7": - "integrity" "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==" - "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" - "version" "2.0.7" - dependencies: - "forwarded" "0.2.0" - "ipaddr.js" "1.9.1" - -"proxy-from-env@^1.1.0": - "integrity" "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - "resolved" "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" - "version" "1.1.0" - -"prr@~1.0.1": - "integrity" "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" - "resolved" "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" - "version" "1.0.1" - -"psl@^1.1.28": - "integrity" "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - "resolved" "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" - "version" "1.9.0" - -"public-encrypt@^4.0.0": - "integrity" "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==" - "resolved" "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "bn.js" "^4.1.0" - "browserify-rsa" "^4.0.0" - "create-hash" "^1.1.0" - "parse-asn1" "^5.0.0" - "randombytes" "^2.0.1" - "safe-buffer" "^5.1.2" - -"pump@^3.0.0": - "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" - "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "end-of-stream" "^1.1.0" - "once" "^1.3.1" - -"punycode@^2.1.0", "punycode@^2.1.1": - "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - "version" "2.1.1" - -"punycode@2.1.0": - "integrity" "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" - "version" "2.1.0" - -"q@^1.5.1": - "integrity" "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - "resolved" "https://registry.npmjs.org/q/-/q-1.5.1.tgz" - "version" "1.5.1" - -"qs@^6.4.0", "qs@^6.7.0", "qs@^6.9.4", "qs@6.11.0": - "integrity" "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==" - "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" - "version" "6.11.0" - dependencies: - "side-channel" "^1.0.4" - -"qs@~6.5.2": - "integrity" "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" - "resolved" "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" - "version" "6.5.3" - -"query-string@^5.0.1": - "integrity" "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==" - "resolved" "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "decode-uri-component" "^0.2.0" - "object-assign" "^4.1.0" - "strict-uri-encode" "^1.0.0" - -"queue-microtask@^1.2.2", "queue-microtask@^1.2.3": - "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - "version" "1.2.3" - -"queue-tick@^1.0.0": - "version" "1.0.0" - -"quick-lru@^4.0.1": - "integrity" "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" - "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" - "version" "4.0.1" - -"quick-lru@^5.1.1": - "integrity" "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" - "version" "5.1.1" - -"randombytes@^2.0.0", "randombytes@^2.0.1", "randombytes@^2.0.5", "randombytes@^2.1.0": - "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" - "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "safe-buffer" "^5.1.0" - -"randomfill@^1.0.3": - "integrity" "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==" - "resolved" "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "randombytes" "^2.0.5" - "safe-buffer" "^5.1.0" - -"range-parser@~1.2.1": - "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - "version" "1.2.1" - -"raw-body@^2.4.1", "raw-body@2.5.1": - "integrity" "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==" - "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" - "version" "2.5.1" - dependencies: - "bytes" "3.1.2" - "http-errors" "2.0.0" - "iconv-lite" "0.4.24" - "unpipe" "1.0.0" - -"react-is@^18.0.0": - "integrity" "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - "resolved" "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" - "version" "18.2.0" - -"read-cmd-shim@^3.0.0": - "integrity" "sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==" - "resolved" "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz" - "version" "3.0.1" - -"read-package-json-fast@^2.0.2", "read-package-json-fast@^2.0.3": - "integrity" "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==" - "resolved" "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz" - "version" "2.0.3" - dependencies: - "json-parse-even-better-errors" "^2.3.0" - "npm-normalize-package-bin" "^1.0.1" - -"read-package-json@^5.0.0", "read-package-json@^5.0.1": - "integrity" "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==" - "resolved" "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz" - "version" "5.0.2" - dependencies: - "glob" "^8.0.1" - "json-parse-even-better-errors" "^2.3.1" - "normalize-package-data" "^4.0.0" - "npm-normalize-package-bin" "^2.0.0" - -"read-pkg-up@^3.0.0": - "integrity" "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==" - "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "find-up" "^2.0.0" - "read-pkg" "^3.0.0" - -"read-pkg-up@^7.0.1": - "integrity" "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==" - "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "find-up" "^4.1.0" - "read-pkg" "^5.2.0" - "type-fest" "^0.8.1" - -"read-pkg@^3.0.0": - "integrity" "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==" - "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "load-json-file" "^4.0.0" - "normalize-package-data" "^2.3.2" - "path-type" "^3.0.0" - -"read-pkg@^5.2.0": - "integrity" "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==" - "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" - "version" "5.2.0" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +proc-log@^2.0.0, proc-log@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz" + integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz" + integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +promise-to-callback@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz" + integrity sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA== + dependencies: + is-fn "^1.0.0" + set-immediate-shim "^1.0.1" + +promise@^8.0.0: + version "8.3.0" + resolved "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + dependencies: + asap "~2.0.6" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz" + integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== + dependencies: + read "1" + +propagate@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz" + integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +protobufjs@^6.11.2: + version "6.11.3" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.3.tgz#637a527205a35caa4f3e2a9a4a13ddffe0e7af74" + integrity sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.1" + "@types/node" ">=13.7.0" + long "^4.0.0" + +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz" + integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +psl@^1.1.28: + version "1.9.0" + resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" + integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qs@6.11.0, qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: + version "6.11.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1, raw-body@^2.4.1: + version "2.5.1" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +read-cmd-shim@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz" + integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== + +read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz" + integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== + dependencies: + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" + +read-package-json@^5.0.0, read-package-json@^5.0.1: + version "5.0.2" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz" + integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== + dependencies: + glob "^8.0.1" + json-parse-even-better-errors "^2.3.1" + normalize-package-data "^4.0.0" + npm-normalize-package-bin "^2.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" + 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@^1.0.7", "read@1": - "integrity" "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==" - "resolved" "https://registry.npmjs.org/read/-/read-1.0.7.tgz" - "version" "1.0.7" - dependencies: - "mute-stream" "~0.0.4" - -"readable-stream@^1.0.33": - "integrity" "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" - "version" "1.1.14" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.1" - "isarray" "0.0.1" - "string_decoder" "~0.10.x" - -"readable-stream@^2.0.0": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@^2.2.2": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@^2.2.9": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@^3.0.0", "readable-stream@^3.0.2", "readable-stream@^3.1.1", "readable-stream@^3.4.0", "readable-stream@^3.6.0", "readable-stream@3": - "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"readable-stream@~1.0.15": - "integrity" "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" - "version" "1.0.34" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.1" - "isarray" "0.0.1" - "string_decoder" "~0.10.x" - -"readable-stream@~2.3.6": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readdir-scoped-modules@^1.1.0": - "integrity" "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==" - "resolved" "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "debuglog" "^1.0.1" - "dezalgo" "^1.0.0" - "graceful-fs" "^4.1.2" - "once" "^1.3.0" - -"readdirp@~3.2.0": - "integrity" "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==" - "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "picomatch" "^2.0.4" - -"readdirp@~3.6.0": - "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" - "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "picomatch" "^2.2.1" - -"rechoir@^0.6.2": - "integrity" "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==" - "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" - "version" "0.6.2" - dependencies: - "resolve" "^1.1.6" - -"recursive-readdir@^2.2.2": - "integrity" "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==" - "resolved" "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz" - "version" "2.2.3" - dependencies: - "minimatch" "^3.0.5" - -"redent@^3.0.0": - "integrity" "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==" - "resolved" "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "indent-string" "^4.0.0" - "strip-indent" "^3.0.0" - -"reduce-flatten@^2.0.0": - "integrity" "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==" - "resolved" "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz" - "version" "2.0.0" - -"regenerator-runtime@^0.13.10": - "integrity" "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" - "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz" - "version" "0.13.10" - -"regexp.prototype.flags@^1.4.3": - "integrity" "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==" - "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" - "version" "1.4.3" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - "functions-have-names" "^1.2.2" - -"regexpp@^3.2.0": - "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - "version" "3.2.0" - -"req-cwd@^2.0.0": - "integrity" "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==" - "resolved" "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "req-from" "^2.0.0" - -"req-from@^2.0.0": - "integrity" "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==" - "resolved" "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "resolve-from" "^3.0.0" - -"request-promise-core@1.1.4": - "integrity" "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==" - "resolved" "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz" - "version" "1.1.4" - dependencies: - "lodash" "^4.17.19" - -"request-promise-native@^1.0.5": - "integrity" "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==" - "resolved" "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz" - "version" "1.0.9" - dependencies: - "request-promise-core" "1.1.4" - "stealthy-require" "^1.1.1" - "tough-cookie" "^2.3.3" - -"request@^2.34", "request@^2.79.0", "request@^2.85.0", "request@^2.88.0": - "integrity" "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==" - "resolved" "https://registry.npmjs.org/request/-/request-2.88.2.tgz" - "version" "2.88.2" - dependencies: - "aws-sign2" "~0.7.0" - "aws4" "^1.8.0" - "caseless" "~0.12.0" - "combined-stream" "~1.0.6" - "extend" "~3.0.2" - "forever-agent" "~0.6.1" - "form-data" "~2.3.2" - "har-validator" "~5.1.3" - "http-signature" "~1.2.0" - "is-typedarray" "~1.0.0" - "isstream" "~0.1.2" - "json-stringify-safe" "~5.0.1" - "mime-types" "~2.1.19" - "oauth-sign" "~0.9.0" - "performance-now" "^2.1.0" - "qs" "~6.5.2" - "safe-buffer" "^5.1.2" - "tough-cookie" "~2.5.0" - "tunnel-agent" "^0.6.0" - "uuid" "^3.3.2" - -"require-directory@^2.1.1": - "integrity" "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - "version" "2.1.1" - -"require-from-string@^2.0.0": - "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - "version" "2.0.2" - -"require-main-filename@^2.0.0": - "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - "version" "2.0.0" - -"resolve-alpn@^1.0.0", "resolve-alpn@^1.2.0": - "integrity" "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - "resolved" "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" - "version" "1.2.1" - -"resolve-cwd@^3.0.0": - "integrity" "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==" - "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "resolve-from" "^5.0.0" - -"resolve-from@^3.0.0": - "integrity" "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" - "version" "3.0.0" - -"resolve-from@^4.0.0": - "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - "version" "4.0.0" - -"resolve-from@^5.0.0": - "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - "version" "5.0.0" - -"resolve.exports@^1.1.0": - "integrity" "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" - "resolved" "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" - "version" "1.1.0" - -"resolve@^1.1.6", "resolve@^1.10.0", "resolve@^1.14.2", "resolve@^1.20.0", "resolve@^1.8.1": - "integrity" "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" - "version" "1.22.1" - dependencies: - "is-core-module" "^2.9.0" - "path-parse" "^1.0.7" - "supports-preserve-symlinks-flag" "^1.0.0" - -"resolve@1.1.x": - "integrity" "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz" - "version" "1.1.7" - -"resolve@1.17.0": - "integrity" "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" - "version" "1.17.0" - dependencies: - "path-parse" "^1.0.6" - -"responselike@^1.0.2": - "integrity" "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==" - "resolved" "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "lowercase-keys" "^1.0.0" - -"responselike@^2.0.0": - "integrity" "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==" - "resolved" "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "lowercase-keys" "^2.0.0" - -"restore-cursor@^3.1.0": - "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" - "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "onetime" "^5.1.0" - "signal-exit" "^3.0.2" - -"retry@^0.12.0": - "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" - "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - "version" "0.12.0" - -"reusify@^1.0.4": - "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - "version" "1.0.4" - -"rfdc@^1.3.0": - "integrity" "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - "resolved" "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" - "version" "1.3.0" - -"rimraf@^2.2.8": - "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - "version" "2.7.1" - dependencies: - "glob" "^7.1.3" - -"rimraf@^3.0.0", "rimraf@^3.0.2": - "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "glob" "^7.1.3" - -"ripemd160@^2.0.0", "ripemd160@^2.0.1": - "integrity" "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==" - "resolved" "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "hash-base" "^3.0.0" - "inherits" "^2.0.1" - -"rlp@^2.0.0", "rlp@^2.2.3", "rlp@^2.2.4": - "integrity" "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==" - "resolved" "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz" - "version" "2.2.7" - dependencies: - "bn.js" "^5.2.0" - -"run-async@^2.4.0": - "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - "version" "2.4.1" - -"run-parallel-limit@^1.1.0": - "integrity" "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==" - "resolved" "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "queue-microtask" "^1.2.2" - -"run-parallel@^1.1.9": - "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" - "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "queue-microtask" "^1.2.2" - -"rustbn.js@~0.2.0": - "integrity" "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" - "resolved" "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz" - "version" "0.2.0" - -"rxjs@^7.0.0", "rxjs@^7.5.5": - "integrity" "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==" - "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz" - "version" "7.5.7" - dependencies: - "tslib" "^2.1.0" - -"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.1", "safe-buffer@~5.2.0", "safe-buffer@5.2.1": - "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - "version" "5.2.1" - -"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": - "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - "version" "5.1.2" - -"safe-event-emitter@^1.0.1": - "integrity" "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==" - "resolved" "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "events" "^3.0.0" - -"safe-regex-test@^1.0.0": - "integrity" "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==" - "resolved" "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "call-bind" "^1.0.2" - "get-intrinsic" "^1.1.3" - "is-regex" "^1.1.4" - -"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@~2.1.0": - "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - "version" "2.1.2" - -"sc-istanbul@^0.4.5": - "integrity" "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==" - "resolved" "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz" - "version" "0.4.6" - dependencies: - "abbrev" "1.0.x" - "async" "1.x" - "escodegen" "1.8.x" - "esprima" "2.7.x" - "glob" "^5.0.15" - "handlebars" "^4.0.1" - "js-yaml" "3.x" - "mkdirp" "0.5.x" - "nopt" "3.x" - "once" "1.x" - "resolve" "1.1.x" - "supports-color" "^3.1.0" - "which" "^1.1.1" - "wordwrap" "^1.0.0" - -"scrypt-js@^3.0.0", "scrypt-js@^3.0.1", "scrypt-js@3.0.1": - "integrity" "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - "resolved" "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" - "version" "3.0.1" - -"scrypt-js@2.0.4": - "integrity" "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" - "resolved" "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz" - "version" "2.0.4" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +read@1, read@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz" + integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== + dependencies: + mute-stream "~0.0.4" + +"readable-stream@1.x >=1.1.9", readable-stream@^1.0.33: + version "1.1.14" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.0.0, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@~1.0.15: + version "1.0.34" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +readdirp@~3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz" + integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== + dependencies: + picomatch "^2.0.4" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + +regenerator-runtime@^0.13.10: + version "0.13.10" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz" + integrity sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +req-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz" + integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== + dependencies: + req-from "^2.0.0" + +req-from@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz" + integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== + dependencies: + resolve-from "^3.0.0" + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.5: + version "1.0.9" + resolved "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.79.0, request@^2.85.0, request@^2.88.0: + version "2.88.2" + resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +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" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + 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" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz" + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.8.1: + version "1.22.1" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" + 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" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + 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" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +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" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +rxjs@^7.0.0, rxjs@^7.5.5: + version "7.5.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz" + integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.2.1, 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.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-event-emitter@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz" + integrity sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg== + dependencies: + events "^3.0.0" + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + 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", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sc-istanbul@^0.4.5: + version "0.4.6" + resolved "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz" + integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +scrypt-js@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz" + integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== + +scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== "scw-contracts-v1.0.0@npm:scw-contracts@1.0.0": - "integrity" "sha512-23OsUVpMZZJMb9qe8Bu0rzz47BxhOQv9QdxlHdd/GeE2cnpe5atC36rs3wquXKzfMrru+NEKhlhyR8674hrBpg==" - "resolved" "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.0.tgz" - "version" "1.0.0" + version "1.0.0" + resolved "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.0.tgz" + integrity sha512-23OsUVpMZZJMb9qe8Bu0rzz47BxhOQv9QdxlHdd/GeE2cnpe5atC36rs3wquXKzfMrru+NEKhlhyR8674hrBpg== dependencies: "@ethersproject/abstract-signer" "^5.6.2" "@ethersproject/constants" "^5.6.1" @@ -11303,26 +11260,26 @@ "@openzeppelin/contracts" "^4.2.0" "@typechain/hardhat" "^2.3.0" "@types/mocha" "^9.0.0" - "chai-as-promised" "^7.1.1" - "chai-string" "^1.5.0" - "eth-gas-reporter" "^0.2.24" - "ethereumjs-util" "^7.1.0" - "ethereumjs-wallet" "^1.0.1" - "ethers" "^5.6.8" - "ganache" "^7.1.0" - "ganache-cli" "^6.12.2" - "hardhat" "^2.9.5" - "hardhat-deploy" "^0.9.3" - "hardhat-deploy-ethers" "^0.3.0-beta.11" - "hardhat-gas-reporter" "^1.0.7" - "solc" "^0.8.15" - "source-map-support" "^0.5.19" - "typescript" "^4.3.5" + chai-as-promised "^7.1.1" + chai-string "^1.5.0" + eth-gas-reporter "^0.2.24" + ethereumjs-util "^7.1.0" + ethereumjs-wallet "^1.0.1" + ethers "^5.6.8" + ganache "^7.1.0" + ganache-cli "^6.12.2" + hardhat "^2.9.5" + hardhat-deploy "^0.9.3" + hardhat-deploy-ethers "^0.3.0-beta.11" + hardhat-gas-reporter "^1.0.7" + solc "^0.8.15" + source-map-support "^0.5.19" + typescript "^4.3.5" "scw-contracts-v1.0.1@npm:scw-contracts@1.0.9": - "integrity" "sha512-08IJMsQKJhcNwwhWXC8Ok35dF+O1z3/sHo4/MyZCUWLttFyyt4KqDLTQnwWyiLqUpbo+0x+kNIq+wO6IOb5tdg==" - "resolved" "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.9.tgz" - "version" "1.0.9" + version "1.0.9" + resolved "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.9.tgz" + integrity sha512-08IJMsQKJhcNwwhWXC8Ok35dF+O1z3/sHo4/MyZCUWLttFyyt4KqDLTQnwWyiLqUpbo+0x+kNIq+wO6IOb5tdg== dependencies: "@account-abstraction/contracts" "^0.2.0" "@chainlink/contracts" "^0.4.1" @@ -11333,2458 +11290,2321 @@ "@openzeppelin/contracts-upgradeable" "^4.7.3" "@typechain/hardhat" "^2.3.0" "@types/mocha" "^9.0.0" - "chai-as-promised" "^7.1.1" - "chai-string" "^1.5.0" - "eth-gas-reporter" "^0.2.24" - "ethereumjs-util" "^7.1.0" - "ethereumjs-wallet" "^1.0.1" - "ethers" "^5.6.8" - "ganache" "^7.1.0" - "ganache-cli" "^6.12.2" - "hardhat" "^2.9.5" - "hardhat-deploy" "^0.9.3" - "hardhat-deploy-ethers" "^0.3.0-beta.11" - "hardhat-gas-reporter" "^1.0.7" - "solc" "^0.8.15" - "solidity-bytes-utils" "^0.8.0" - "source-map-support" "^0.5.19" - "typescript" "^4.3.5" - -"secp256k1@^4.0.1", "secp256k1@4.0.3": - "integrity" "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==" - "resolved" "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "elliptic" "^6.5.4" - "node-addon-api" "^2.0.0" - "node-gyp-build" "^4.2.0" - -"semaphore@^1.0.3", "semaphore@>=1.0.1": - "integrity" "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" - "resolved" "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz" - "version" "1.1.0" - -"semver@^5.5.0": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@^5.6.0": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@^5.7.0": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@^6.0.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^6.1.1": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^6.1.2": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^6.3.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^7.0.0", "semver@^7.1.1", "semver@^7.3.4", "semver@^7.3.5", "semver@^7.3.7": - "integrity" "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" - "version" "7.3.8" - dependencies: - "lru-cache" "^6.0.0" - -"semver@~5.4.1": - "integrity" "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz" - "version" "5.4.1" - -"semver@2 || 3 || 4 || 5": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@7.3.4": - "integrity" "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" - "version" "7.3.4" - dependencies: - "lru-cache" "^6.0.0" - -"send@0.18.0": - "integrity" "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==" - "resolved" "https://registry.npmjs.org/send/-/send-0.18.0.tgz" - "version" "0.18.0" - dependencies: - "debug" "2.6.9" - "depd" "2.0.0" - "destroy" "1.2.0" - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "etag" "~1.8.1" - "fresh" "0.5.2" - "http-errors" "2.0.0" - "mime" "1.6.0" - "ms" "2.1.3" - "on-finished" "2.4.1" - "range-parser" "~1.2.1" - "statuses" "2.0.1" - -"serialize-javascript@6.0.0": - "integrity" "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==" - "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "randombytes" "^2.1.0" - -"serve-static@1.15.0": - "integrity" "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==" - "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - "version" "1.15.0" - dependencies: - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "parseurl" "~1.3.3" - "send" "0.18.0" - -"servify@^0.1.12": - "integrity" "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==" - "resolved" "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz" - "version" "0.1.12" - dependencies: - "body-parser" "^1.16.0" - "cors" "^2.8.1" - "express" "^4.14.0" - "request" "^2.79.0" - "xhr" "^2.3.3" - -"set-blocking@^2.0.0": - "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - "version" "2.0.0" - -"set-immediate-shim@^1.0.1": - "integrity" "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==" - "resolved" "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" - "version" "1.0.1" - -"setimmediate@^1.0.5": - "integrity" "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - "version" "1.0.5" - -"setimmediate@1.0.4": - "integrity" "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" - "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz" - "version" "1.0.4" - -"setprototypeof@1.2.0": - "integrity" "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - "version" "1.2.0" - -"sha.js@^2.4.0", "sha.js@^2.4.8": - "integrity" "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==" - "resolved" "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" - "version" "2.4.11" - dependencies: - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" - -"sha1@^1.1.1": - "integrity" "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==" - "resolved" "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "charenc" ">= 0.0.1" - "crypt" ">= 0.0.1" - -"shallow-clone@^3.0.0": - "integrity" "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==" - "resolved" "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "kind-of" "^6.0.2" - -"shebang-command@^1.2.0": - "integrity" "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "shebang-regex" "^1.0.0" - -"shebang-command@^2.0.0": - "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "shebang-regex" "^3.0.0" - -"shebang-regex@^1.0.0": - "integrity" "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" - "version" "1.0.0" - -"shebang-regex@^3.0.0": - "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - "version" "3.0.0" - -"shell-quote@^1.7.3": - "integrity" "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" - "resolved" "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz" - "version" "1.7.4" - -"shelljs@^0.8.3": - "integrity" "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==" - "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" - "version" "0.8.5" - dependencies: - "glob" "^7.0.0" - "interpret" "^1.0.0" - "rechoir" "^0.6.2" - -"side-channel@^1.0.4": - "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" - "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "call-bind" "^1.0.0" - "get-intrinsic" "^1.0.2" - "object-inspect" "^1.9.0" - -"signal-exit@^3.0.0": - "version" "3.0.3" - -"signal-exit@^3.0.2", "signal-exit@^3.0.3", "signal-exit@^3.0.7": - "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - "version" "3.0.7" - -"simple-concat@^1.0.0": - "integrity" "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - "resolved" "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" - "version" "1.0.1" - -"simple-get@^2.7.0": - "integrity" "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==" - "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz" - "version" "2.8.2" - dependencies: - "decompress-response" "^3.3.0" - "once" "^1.3.1" - "simple-concat" "^1.0.0" - -"sisteransi@^1.0.5": - "integrity" "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - "version" "1.0.5" - -"slash@^3.0.0": - "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - "version" "3.0.0" - -"slice-ansi@^3.0.0": - "integrity" "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "astral-regex" "^2.0.0" - "is-fullwidth-code-point" "^3.0.0" - -"slice-ansi@^4.0.0": - "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "astral-regex" "^2.0.0" - "is-fullwidth-code-point" "^3.0.0" - -"slice-ansi@^5.0.0": - "integrity" "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "ansi-styles" "^6.0.0" - "is-fullwidth-code-point" "^4.0.0" - -"smart-buffer@^4.2.0": - "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" - "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - "version" "4.2.0" - -"socks-proxy-agent@^7.0.0": - "integrity" "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==" - "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "agent-base" "^6.0.2" - "debug" "^4.3.3" - "socks" "^2.6.2" - -"socks@^2.6.2": - "integrity" "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==" - "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" - "version" "2.7.1" - dependencies: - "ip" "^2.0.0" - "smart-buffer" "^4.2.0" - -"solc@^0.8.15": - "integrity" "sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g==" - "resolved" "https://registry.npmjs.org/solc/-/solc-0.8.17.tgz" - "version" "0.8.17" - dependencies: - "command-exists" "^1.2.8" - "commander" "^8.1.0" - "follow-redirects" "^1.12.1" - "js-sha3" "0.8.0" - "memorystream" "^0.3.1" - "semver" "^5.5.0" - "tmp" "0.0.33" - -"solc@0.7.3": - "integrity" "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==" - "resolved" "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz" - "version" "0.7.3" - dependencies: - "command-exists" "^1.2.8" - "commander" "3.0.2" - "follow-redirects" "^1.12.1" - "fs-extra" "^0.30.0" - "js-sha3" "0.8.0" - "memorystream" "^0.3.1" - "require-from-string" "^2.0.0" - "semver" "^5.5.0" - "tmp" "0.0.33" - -"solidity-bytes-utils@^0.8.0": - "integrity" "sha512-r109ZHEf7zTMm1ENW6/IJFDWilFR/v0BZnGuFgDHJUV80ByobnV2k3txvwQaJ9ApL+6XAfwqsw5VFzjALbQPCw==" - "resolved" "https://registry.npmjs.org/solidity-bytes-utils/-/solidity-bytes-utils-0.8.0.tgz" - "version" "0.8.0" - dependencies: - "@truffle/hdwallet-provider" "latest" - -"solidity-coverage@^0.7.21", "solidity-coverage@^0.7.22": - "integrity" "sha512-I6Zd5tsFY+gmj1FDIp6w7OrUePx6ZpMgKQZg7dWgPaQHePLi3Jk+iJ8lwZxsWEoNy2Lcv91rMxATWHqRaFdQpw==" - "resolved" "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.7.22.tgz" - "version" "0.7.22" + chai-as-promised "^7.1.1" + chai-string "^1.5.0" + eth-gas-reporter "^0.2.24" + ethereumjs-util "^7.1.0" + ethereumjs-wallet "^1.0.1" + ethers "^5.6.8" + ganache "^7.1.0" + ganache-cli "^6.12.2" + hardhat "^2.9.5" + hardhat-deploy "^0.9.3" + hardhat-deploy-ethers "^0.3.0-beta.11" + hardhat-gas-reporter "^1.0.7" + solc "^0.8.15" + solidity-bytes-utils "^0.8.0" + source-map-support "^0.5.19" + typescript "^4.3.5" + +secp256k1@4.0.3, secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +semaphore@>=1.0.1, semaphore@^1.0.3: + version "1.1.0" + resolved "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz" + integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== + +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.3.4: + version "7.3.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@~5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz" + integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== + +send@0.18.0: + version "0.18.0" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" + integrity sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ== + +setimmediate@1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz" + integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz" + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + 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" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + 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" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3: + version "1.7.4" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz" + integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== + +shelljs@^0.8.3: + version "0.8.5" + resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, 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" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^2.7.0: + version "2.8.2" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz" + integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +solc@^0.8.15: + version "0.8.17" + resolved "https://registry.npmjs.org/solc/-/solc-0.8.17.tgz" + integrity sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g== + dependencies: + command-exists "^1.2.8" + commander "^8.1.0" + follow-redirects "^1.12.1" + js-sha3 "0.8.0" + memorystream "^0.3.1" + semver "^5.5.0" + tmp "0.0.33" + +solidity-bytes-utils@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/solidity-bytes-utils/-/solidity-bytes-utils-0.8.0.tgz" + integrity sha512-r109ZHEf7zTMm1ENW6/IJFDWilFR/v0BZnGuFgDHJUV80ByobnV2k3txvwQaJ9ApL+6XAfwqsw5VFzjALbQPCw== + dependencies: + "@truffle/hdwallet-provider" latest + +solidity-coverage@^0.7.22: + version "0.7.22" + resolved "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.7.22.tgz" + integrity sha512-I6Zd5tsFY+gmj1FDIp6w7OrUePx6ZpMgKQZg7dWgPaQHePLi3Jk+iJ8lwZxsWEoNy2Lcv91rMxATWHqRaFdQpw== dependencies: "@solidity-parser/parser" "^0.14.0" "@truffle/provider" "^0.2.24" - "chalk" "^2.4.2" - "death" "^1.1.0" - "detect-port" "^1.3.0" - "fs-extra" "^8.1.0" - "ghost-testrpc" "^0.0.2" - "global-modules" "^2.0.0" - "globby" "^10.0.1" - "jsonschema" "^1.2.4" - "lodash" "^4.17.15" - "node-emoji" "^1.10.0" - "pify" "^4.0.1" - "recursive-readdir" "^2.2.2" - "sc-istanbul" "^0.4.5" - "semver" "^7.3.4" - "shelljs" "^0.8.3" - "web3-utils" "^1.3.0" - -"sort-keys@^2.0.0": - "integrity" "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==" - "resolved" "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "is-plain-obj" "^1.0.0" - -"sort-keys@^4.0.0": - "integrity" "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==" - "resolved" "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz" - "version" "4.2.0" - dependencies: - "is-plain-obj" "^2.0.0" - -"source-map-support@^0.5.13", "source-map-support@^0.5.19": - "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" - "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - "version" "0.5.21" - dependencies: - "buffer-from" "^1.0.0" - "source-map" "^0.6.0" - -"source-map-support@0.5.12": - "integrity" "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==" - "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz" - "version" "0.5.12" - dependencies: - "buffer-from" "^1.0.0" - "source-map" "^0.6.0" - -"source-map-support@0.5.13": - "integrity" "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==" - "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" - "version" "0.5.13" - dependencies: - "buffer-from" "^1.0.0" - "source-map" "^0.6.0" - -"source-map@^0.6.0", "source-map@^0.6.1": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - -"source-map@~0.2.0": - "integrity" "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz" - "version" "0.2.0" - dependencies: - "amdefine" ">=0.0.4" - -"spawn-command@^0.0.2-1": - "integrity" "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==" - "resolved" "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz" - "version" "0.0.2-1" - -"spdx-correct@^3.0.0": - "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" - "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "spdx-expression-parse" "^3.0.0" - "spdx-license-ids" "^3.0.0" - -"spdx-exceptions@^2.1.0": - "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - "version" "2.3.0" - -"spdx-expression-parse@^3.0.0": - "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" - "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "spdx-exceptions" "^2.1.0" - "spdx-license-ids" "^3.0.0" - -"spdx-license-ids@^3.0.0": - "integrity" "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" - "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" - "version" "3.0.12" - -"split@^1.0.0": - "integrity" "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==" - "resolved" "https://registry.npmjs.org/split/-/split-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "through" "2" - -"split2@^3.0.0": - "integrity" "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==" - "resolved" "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" - "version" "3.2.2" - dependencies: - "readable-stream" "^3.0.0" - -"sprintf-js@~1.0.2": - "integrity" "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - "version" "1.0.3" - -"sshpk@^1.7.0": - "integrity" "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==" - "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" - "version" "1.17.0" - dependencies: - "asn1" "~0.2.3" - "assert-plus" "^1.0.0" - "bcrypt-pbkdf" "^1.0.0" - "dashdash" "^1.12.0" - "ecc-jsbn" "~0.1.1" - "getpass" "^0.1.1" - "jsbn" "~0.1.0" - "safer-buffer" "^2.0.2" - "tweetnacl" "~0.14.0" - -"ssri@^9.0.0", "ssri@^9.0.1": - "integrity" "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==" - "resolved" "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" - "version" "9.0.1" - dependencies: - "minipass" "^3.1.1" - -"stack-utils@^2.0.3": - "integrity" "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==" - "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" - "version" "2.0.5" - dependencies: - "escape-string-regexp" "^2.0.0" - -"stacktrace-parser@^0.1.10": - "integrity" "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==" - "resolved" "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" - "version" "0.1.10" - dependencies: - "type-fest" "^0.7.1" - -"statuses@2.0.1": - "integrity" "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - "resolved" "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - "version" "2.0.1" - -"stealthy-require@^1.1.1": - "integrity" "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==" - "resolved" "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz" - "version" "1.1.1" - -"streamsearch@^1.1.0": - "integrity" "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" - "resolved" "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" - "version" "1.1.0" - -"strict-uri-encode@^1.0.0": - "integrity" "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" - "resolved" "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" - "version" "1.1.0" - -"string_decoder@^1.1.1": - "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "safe-buffer" "~5.2.0" - -"string_decoder@~0.10.x": - "integrity" "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - "version" "0.10.31" - -"string_decoder@~1.1.1": - "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "safe-buffer" "~5.1.0" - -"string-argv@^0.3.1": - "integrity" "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" - "resolved" "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" - "version" "0.3.1" - -"string-format@^2.0.0": - "integrity" "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==" - "resolved" "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz" - "version" "2.0.0" - -"string-length@^4.0.1": - "integrity" "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==" - "resolved" "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "char-regex" "^1.0.2" - "strip-ansi" "^6.0.0" - -"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3": - "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - "version" "4.2.3" - dependencies: - "emoji-regex" "^8.0.0" - "is-fullwidth-code-point" "^3.0.0" - "strip-ansi" "^6.0.1" - -"string-width@^1.0.2 || 2": - "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "is-fullwidth-code-point" "^2.0.0" - "strip-ansi" "^4.0.0" - -"string-width@^2.1.1": - "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "is-fullwidth-code-point" "^2.0.0" - "strip-ansi" "^4.0.0" - -"string-width@^3.0.0", "string-width@^3.1.0": - "integrity" "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "emoji-regex" "^7.0.1" - "is-fullwidth-code-point" "^2.0.0" - "strip-ansi" "^5.1.0" - -"string-width@^5.0.0": - "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "eastasianwidth" "^0.2.0" - "emoji-regex" "^9.2.2" - "strip-ansi" "^7.0.1" - -"string.prototype.trimend@^1.0.5": - "integrity" "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==" - "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.19.5" - -"string.prototype.trimstart@^1.0.5": - "integrity" "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==" - "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.19.5" - -"strip-ansi@^4.0.0": - "integrity" "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-regex" "^3.0.0" - -"strip-ansi@^5.0.0", "strip-ansi@^5.1.0", "strip-ansi@^5.2.0": - "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "ansi-regex" "^4.1.0" + chalk "^2.4.2" + death "^1.1.0" + detect-port "^1.3.0" + fs-extra "^8.1.0" + ghost-testrpc "^0.0.2" + global-modules "^2.0.0" + globby "^10.0.1" + jsonschema "^1.2.4" + lodash "^4.17.15" + node-emoji "^1.10.0" + pify "^4.0.1" + recursive-readdir "^2.2.2" + sc-istanbul "^0.4.5" + semver "^7.3.4" + shelljs "^0.8.3" + web3-utils "^1.3.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz" + integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== + dependencies: + is-plain-obj "^2.0.0" + +source-map-support@0.5.12: + version "0.5.12" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.13, source-map-support@^0.5.19: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz" + integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== + dependencies: + amdefine ">=0.0.4" + +spawn-command@^0.0.2-1: + version "0.0.2-1" + resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz" + integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + 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.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + 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.12" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sshpk@^1.7.0: + version "1.17.0" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^9.0.0, ssri@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz" + integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== + +string-argv@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4", 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" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" -"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": - "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - "version" "6.0.1" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - "ansi-regex" "^5.0.1" + ansi-regex "^5.0.1" -"strip-ansi@^7.0.1": - "integrity" "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" - "version" "7.0.1" +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== dependencies: - "ansi-regex" "^6.0.1" - -"strip-bom@^3.0.0": - "integrity" "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" - "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - "version" "3.0.0" - -"strip-bom@^4.0.0": - "integrity" "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" - "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" - "version" "4.0.0" + ansi-regex "^6.0.1" -"strip-eof@^1.0.0": - "integrity" "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" - "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" - "version" "1.0.0" - -"strip-final-newline@^2.0.0": - "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - "version" "2.0.0" - -"strip-hex-prefix@1.0.0": - "integrity" "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==" - "resolved" "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-hex-prefixed" "1.0.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -"strip-indent@^3.0.0": - "integrity" "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==" - "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "min-indent" "^1.0.0" - -"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1", "strip-json-comments@3.1.1": - "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - "version" "3.1.1" - -"strip-json-comments@2.0.1": - "integrity" "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - "version" "2.0.1" - -"strong-log-transformer@^2.1.0": - "integrity" "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==" - "resolved" "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "duplexer" "^0.1.1" - "minimist" "^1.2.0" - "through" "^2.3.4" - -"supports-color@^3.1.0": - "integrity" "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" - "version" "3.2.3" - dependencies: - "has-flag" "^1.0.0" - -"supports-color@^5.3.0": - "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - "version" "5.5.0" - dependencies: - "has-flag" "^3.0.0" - -"supports-color@^7.0.0", "supports-color@^7.1.0": - "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "has-flag" "^4.0.0" - -"supports-color@^8.0.0": - "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - "version" "8.1.1" - dependencies: - "has-flag" "^4.0.0" - -"supports-color@^8.1.0": - "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - "version" "8.1.1" - dependencies: - "has-flag" "^4.0.0" - -"supports-color@^9.2.2": - "integrity" "sha512-aszYUX/DVK/ed5rFLb/dDinVJrQjG/vmU433wtqVSD800rYsJNWxh2R3USV90aLSU+UsyQkbNeffVLzc6B6foA==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-9.2.3.tgz" - "version" "9.2.3" - -"supports-color@6.0.0": - "integrity" "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "has-flag" "^3.0.0" - -"supports-color@8.1.1": - "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - "version" "8.1.1" - dependencies: - "has-flag" "^4.0.0" - -"supports-hyperlinks@^2.0.0": - "integrity" "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==" - "resolved" "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "has-flag" "^4.0.0" - "supports-color" "^7.0.0" - -"supports-preserve-symlinks-flag@^1.0.0": - "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - "version" "1.0.0" - -"swarm-js@^0.1.40": - "integrity" "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==" - "resolved" "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz" - "version" "0.1.42" - dependencies: - "bluebird" "^3.5.0" - "buffer" "^5.0.5" - "eth-lib" "^0.1.26" - "fs-extra" "^4.0.2" - "got" "^11.8.5" - "mime-types" "^2.1.16" - "mkdirp-promise" "^5.0.1" - "mock-fs" "^4.1.0" - "setimmediate" "^1.0.5" - "tar" "^4.0.2" - "xhr-request" "^1.0.1" - -"sync-request@^6.0.0": - "integrity" "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==" - "resolved" "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "http-response-object" "^3.0.1" - "sync-rpc" "^1.2.1" - "then-request" "^6.0.0" - -"sync-rpc@^1.2.1": - "integrity" "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==" - "resolved" "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz" - "version" "1.3.6" - dependencies: - "get-port" "^3.1.0" - -"table-layout@^1.0.2": - "integrity" "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==" - "resolved" "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "array-back" "^4.0.1" - "deep-extend" "~0.6.0" - "typical" "^5.2.0" - "wordwrapjs" "^4.0.0" - -"tar-stream@~2.2.0": - "integrity" "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" - "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "bl" "^4.0.3" - "end-of-stream" "^1.4.1" - "fs-constants" "^1.0.0" - "inherits" "^2.0.3" - "readable-stream" "^3.1.1" - -"tar@^4.0.2": - "integrity" "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==" - "resolved" "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" - "version" "4.4.19" - dependencies: - "chownr" "^1.1.4" - "fs-minipass" "^1.2.7" - "minipass" "^2.9.0" - "minizlib" "^1.3.3" - "mkdirp" "^0.5.5" - "safe-buffer" "^5.2.1" - "yallist" "^3.1.1" - -"tar@^6.1.0", "tar@^6.1.11", "tar@^6.1.2": - "integrity" "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==" - "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - "version" "6.1.11" - dependencies: - "chownr" "^2.0.0" - "fs-minipass" "^2.0.0" - "minipass" "^3.0.0" - "minizlib" "^2.1.1" - "mkdirp" "^1.0.3" - "yallist" "^4.0.0" - -"temp-dir@^1.0.0": - "integrity" "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==" - "resolved" "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" - "version" "1.0.0" - -"terminal-link@^2.0.0": - "integrity" "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==" - "resolved" "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "ansi-escapes" "^4.2.1" - "supports-hyperlinks" "^2.0.0" - -"test-exclude@^6.0.0": - "integrity" "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==" - "resolved" "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" - "version" "6.0.0" +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +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" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +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" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, 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" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strong-log-transformer@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +supports-color@6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz" + integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== + dependencies: + has-flag "^3.0.0" + +supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^9.2.2: + version "9.2.3" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.2.3.tgz" + integrity sha512-aszYUX/DVK/ed5rFLb/dDinVJrQjG/vmU433wtqVSD800rYsJNWxh2R3USV90aLSU+UsyQkbNeffVLzc6B6foA== + +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +swarm-js@^0.1.40: + version "0.1.42" + resolved "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz" + integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^11.8.5" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + +sync-request@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + +tar-stream@~2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^4.0.2: + version "4.4.19" + resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: + version "6.1.11" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" - "glob" "^7.1.4" - "minimatch" "^3.0.4" + glob "^7.1.4" + minimatch "^3.0.4" -"text-extensions@^1.0.0": - "integrity" "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==" - "resolved" "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" - "version" "1.9.0" +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -"text-table@^0.2.0": - "integrity" "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - "version" "0.2.0" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -"then-request@^6.0.0": - "integrity" "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==" - "resolved" "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz" - "version" "6.0.2" +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== dependencies: "@types/concat-stream" "^1.6.0" "@types/form-data" "0.0.33" "@types/node" "^8.0.0" "@types/qs" "^6.2.31" - "caseless" "~0.12.0" - "concat-stream" "^1.6.0" - "form-data" "^2.2.0" - "http-basic" "^8.1.1" - "http-response-object" "^3.0.1" - "promise" "^8.0.0" - "qs" "^6.4.0" - -"through@^2.3.4", "through@^2.3.6", "through@^2.3.8", "through@>=2.2.7 <3", "through@2": - "integrity" "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - "version" "2.3.8" - -"through2@^2.0.0": - "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" - "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - "version" "2.0.5" - dependencies: - "readable-stream" "~2.3.6" - "xtend" "~4.0.1" - -"through2@^2.0.3": - "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" - "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - "version" "2.0.5" - dependencies: - "readable-stream" "~2.3.6" - "xtend" "~4.0.1" - -"through2@^4.0.0": - "integrity" "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==" - "resolved" "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "readable-stream" "3" - -"timed-out@^4.0.1": - "integrity" "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==" - "resolved" "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" - "version" "4.0.1" - -"tmp@^0.0.33", "tmp@0.0.33": - "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" - "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - "version" "0.0.33" - dependencies: - "os-tmpdir" "~1.0.2" - -"tmp@~0.2.1": - "integrity" "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==" - "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - "version" "0.2.1" - dependencies: - "rimraf" "^3.0.0" - -"tmpl@1.0.5": - "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" - "version" "1.0.5" - -"to-fast-properties@^2.0.0": - "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - "version" "2.0.0" - -"to-readable-stream@^1.0.0": - "integrity" "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - "resolved" "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" - "version" "1.0.0" - -"to-regex-range@^5.0.1": - "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "is-number" "^7.0.0" - -"toidentifier@1.0.1": - "integrity" "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - "version" "1.0.1" - -"tough-cookie@^2.3.3", "tough-cookie@~2.5.0": - "integrity" "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==" - "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "psl" "^1.1.28" - "punycode" "^2.1.1" - -"tr46@~0.0.3": - "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - "version" "0.0.3" - -"tree-kill@^1.2.2": - "integrity" "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" - "resolved" "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" - "version" "1.2.2" - -"treeverse@^2.0.0": - "integrity" "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==" - "resolved" "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz" - "version" "2.0.0" - -"trim-newlines@^3.0.0": - "integrity" "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" - "resolved" "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" - "version" "3.0.1" - -"ts-command-line-args@^2.2.0": - "integrity" "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==" - "resolved" "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz" - "version" "2.3.1" - dependencies: - "chalk" "^4.1.0" - "command-line-args" "^5.1.1" - "command-line-usage" "^6.1.0" - "string-format" "^2.0.0" - -"ts-essentials@^1.0.0": - "integrity" "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==" - "resolved" "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz" - "version" "1.0.4" - -"ts-essentials@^7.0.1": - "integrity" "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==" - "resolved" "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz" - "version" "7.0.3" - -"ts-generator@^0.1.1": - "integrity" "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==" - "resolved" "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz" - "version" "0.1.1" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + +through2@^2.0.0, through2@^2.0.3: + version "2.0.5" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +tmp@0.0.33, tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +treeverse@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz" + integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +ts-command-line-args@^2.2.0: + version "2.3.1" + resolved "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz" + integrity sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + +ts-essentials@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz" + integrity sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ== + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + +ts-generator@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz" + integrity sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ== dependencies: "@types/mkdirp" "^0.5.2" "@types/prettier" "^2.1.1" "@types/resolve" "^0.0.8" - "chalk" "^2.4.1" - "glob" "^7.1.2" - "mkdirp" "^0.5.1" - "prettier" "^2.1.2" - "resolve" "^1.8.1" - "ts-essentials" "^1.0.0" - -"ts-node@*", "ts-node@^10.7.0", "ts-node@^10.9.1", "ts-node@>=8.0.0", "ts-node@>=9.0.0": - "integrity" "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==" - "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" - "version" "10.9.1" + chalk "^2.4.1" + glob "^7.1.2" + mkdirp "^0.5.1" + prettier "^2.1.2" + resolve "^1.8.1" + ts-essentials "^1.0.0" + +ts-node@^10.7.0, ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" "@tsconfig/node16" "^1.0.2" - "acorn" "^8.4.1" - "acorn-walk" "^8.1.1" - "arg" "^4.1.0" - "create-require" "^1.1.0" - "diff" "^4.0.1" - "make-error" "^1.1.1" - "v8-compile-cache-lib" "^3.0.1" - "yn" "3.1.1" - -"tsconfig-paths@^3.9.0": - "integrity" "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==" - "resolved" "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" - "version" "3.14.1" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== dependencies: "@types/json5" "^0.0.29" - "json5" "^1.0.1" - "minimist" "^1.2.6" - "strip-bom" "^3.0.0" - -"tslib@^1.8.1", "tslib@^1.9.3": - "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - "version" "1.14.1" - -"tslib@^2.0.0": - "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - "version" "2.4.0" - -"tslib@^2.1.0": - "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - "version" "2.4.0" - -"tslib@^2.3.0": - "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - "version" "2.4.0" - -"tslib@^2.4.0": - "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - "version" "2.4.0" - -"tsort@0.0.1": - "integrity" "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" - "resolved" "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" - "version" "0.0.1" - -"tsutils@^3.21.0": - "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" - "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - "version" "3.21.0" - dependencies: - "tslib" "^1.8.1" - -"tunnel-agent@^0.6.0": - "integrity" "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==" - "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - "version" "0.6.0" - dependencies: - "safe-buffer" "^5.0.1" - -"tweetnacl-util@^0.15.1": - "integrity" "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" - "resolved" "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz" - "version" "0.15.1" - -"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": - "integrity" "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - "version" "0.14.5" - -"tweetnacl@^1.0.3": - "integrity" "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" - "version" "1.0.3" - -"type-check@^0.4.0": - "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - "version" "0.4.0" - dependencies: - "prelude-ls" "^1.2.1" - -"type-check@~0.3.2": - "integrity" "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" - "version" "0.3.2" - dependencies: - "prelude-ls" "~1.1.2" - -"type-check@~0.4.0": - "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - "version" "0.4.0" - dependencies: - "prelude-ls" "^1.2.1" - -"type-detect@^4.0.0", "type-detect@^4.0.5", "type-detect@4.0.8": - "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" - "version" "4.0.8" - -"type-fest@^0.18.0": - "integrity" "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" - "version" "0.18.1" - -"type-fest@^0.20.2": - "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - "version" "0.20.2" - -"type-fest@^0.21.3": - "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - "version" "0.21.3" - -"type-fest@^0.4.1": - "integrity" "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz" - "version" "0.4.1" - -"type-fest@^0.6.0": - "integrity" "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" - "version" "0.6.0" - -"type-fest@^0.7.1": - "integrity" "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz" - "version" "0.7.1" - -"type-fest@^0.8.1": - "integrity" "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - "version" "0.8.1" - -"type-is@~1.6.18": - "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" - "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - "version" "1.6.18" - dependencies: - "media-typer" "0.3.0" - "mime-types" "~2.1.24" - -"type@^1.0.1": - "integrity" "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - "resolved" "https://registry.npmjs.org/type/-/type-1.2.0.tgz" - "version" "1.2.0" - -"type@^2.7.2": - "integrity" "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - "resolved" "https://registry.npmjs.org/type/-/type-2.7.2.tgz" - "version" "2.7.2" - -"typechain@^5.1.2", "typechain@^7.0.0", "typechain@^8.1.0": - "integrity" "sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ==" - "resolved" "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz" - "version" "7.0.1" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" + 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" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.7.2: + version "2.7.2" + resolved "https://registry.npmjs.org/type/-/type-2.7.2.tgz" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + +typechain@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz" + integrity sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ== dependencies: "@types/prettier" "^2.1.1" - "debug" "^4.1.1" - "fs-extra" "^7.0.0" - "glob" "^7.1.6" - "js-sha3" "^0.8.0" - "lodash" "^4.17.15" - "mkdirp" "^1.0.4" - "prettier" "^2.1.2" - "ts-command-line-args" "^2.2.0" - "ts-essentials" "^7.0.1" - -"typedarray-to-buffer@^3.1.5": - "integrity" "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==" - "resolved" "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - "version" "3.1.5" - dependencies: - "is-typedarray" "^1.0.0" - -"typedarray@^0.0.6": - "integrity" "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" - "version" "0.0.6" - -"typescript@*", "typescript@^3 || ^4", "typescript@^4.3.5", "typescript@^4.6.3", "typescript@^4.7.4", "typescript@>=2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.7.0", "typescript@>=4.0.0", "typescript@>=4.1.0", "typescript@>=4.5.0": - "integrity" "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" - "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" - "version" "4.8.4" - -"typical@^4.0.0": - "integrity" "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" - "resolved" "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz" - "version" "4.0.0" - -"typical@^5.2.0": - "integrity" "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" - "resolved" "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz" - "version" "5.2.0" - -"uglify-js@^3.1.4": - "integrity" "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==" - "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" - "version" "3.17.4" - -"ultron@~1.1.0": - "integrity" "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - "resolved" "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz" - "version" "1.1.1" - -"unbox-primitive@^1.0.2": - "integrity" "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==" - "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "call-bind" "^1.0.2" - "has-bigints" "^1.0.2" - "has-symbols" "^1.0.3" - "which-boxed-primitive" "^1.0.2" - -"undici@^5.4.0": - "integrity" "sha512-zMLamCG62PGjd9HHMpo05bSLvvwWOZgGeiWlN/vlqu3+lRo3elxktVGEyLMX+IO7c2eflLjcW74AlkhEZm15mg==" - "resolved" "https://registry.npmjs.org/undici/-/undici-5.12.0.tgz" - "version" "5.12.0" - dependencies: - "busboy" "^1.6.0" - -"unique-filename@^2.0.0": - "integrity" "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==" - "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "unique-slug" "^3.0.0" - -"unique-slug@^3.0.0": - "integrity" "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==" - "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "imurmurhash" "^0.1.4" - -"universal-user-agent@^6.0.0": - "integrity" "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - "resolved" "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" - "version" "6.0.0" - -"universalify@^0.1.0": - "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - "version" "0.1.2" - -"universalify@^2.0.0": - "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - "version" "2.0.0" - -"unpipe@~1.0.0", "unpipe@1.0.0": - "integrity" "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - "version" "1.0.0" - -"upath@^2.0.1": - "integrity" "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==" - "resolved" "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz" - "version" "2.0.1" - -"update-browserslist-db@^1.0.9": - "integrity" "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==" - "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "escalade" "^3.1.1" - "picocolors" "^1.0.0" - -"uri-js@^4.2.2": - "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" - "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - "version" "4.4.1" - dependencies: - "punycode" "^2.1.0" - -"url-parse-lax@^3.0.0": - "integrity" "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==" - "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "prepend-http" "^2.0.0" - -"url-set-query@^1.0.0": - "integrity" "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" - "resolved" "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz" - "version" "1.0.0" - -"utf-8-validate@^5.0.2", "utf-8-validate@5.0.7": - "integrity" "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==" - "resolved" "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz" - "version" "5.0.7" - dependencies: - "node-gyp-build" "^4.3.0" - -"utf8@^3.0.0", "utf8@3.0.0": - "integrity" "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - "resolved" "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz" - "version" "3.0.0" - -"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": - "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - "version" "1.0.2" - -"util@^0.12.0": - "integrity" "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==" - "resolved" "https://registry.npmjs.org/util/-/util-0.12.5.tgz" - "version" "0.12.5" - dependencies: - "inherits" "^2.0.3" - "is-arguments" "^1.0.4" - "is-generator-function" "^1.0.7" - "is-typed-array" "^1.1.3" - "which-typed-array" "^1.1.2" - -"utils-merge@1.0.1": - "integrity" "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - "version" "1.0.1" - -"uuid@^3.3.2": - "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - "version" "3.4.0" - -"uuid@^8.3.2": - "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - "version" "8.3.2" - -"uuid@2.0.1": - "integrity" "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz" - "version" "2.0.1" - -"uuid@3.3.2": - "integrity" "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz" - "version" "3.3.2" - -"v8-compile-cache-lib@^3.0.1": - "integrity" "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - "resolved" "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - "version" "3.0.1" - -"v8-compile-cache@2.3.0": - "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - "version" "2.3.0" - -"v8-to-istanbul@^9.0.1": - "integrity" "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==" - "resolved" "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz" - "version" "9.0.1" + debug "^4.1.1" + fs-extra "^7.0.0" + glob "^7.1.6" + js-sha3 "^0.8.0" + lodash "^4.17.15" + mkdirp "^1.0.4" + prettier "^2.1.2" + ts-command-line-args "^2.2.0" + ts-essentials "^7.0.1" + +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" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +"typescript@^3 || ^4", typescript@^4.3.5, typescript@^4.6.3, typescript@^4.7.4: + version "4.8.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" + integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== + +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + +uglify-js@^3.1.4: + version "3.17.4" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + 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@^5.4.0: + version "5.12.0" + resolved "https://registry.npmjs.org/undici/-/undici-5.12.0.tgz" + integrity sha512-zMLamCG62PGjd9HHMpo05bSLvvwWOZgGeiWlN/vlqu3+lRo3elxktVGEyLMX+IO7c2eflLjcW74AlkhEZm15mg== + dependencies: + busboy "^1.6.0" + +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +upath@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + +update-browserslist-db@^1.0.9: + version "1.0.10" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +url-parse@~1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz" + integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== + +utf-8-validate@5.0.7, utf-8-validate@^5.0.2: + version "5.0.7" + resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== + dependencies: + node-gyp-build "^4.3.0" + +utf8@3.0.0, utf8@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.0: + version "0.12.5" + resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz" + integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-compile-cache@2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - "convert-source-map" "^1.6.0" + convert-source-map "^1.6.0" -"validate-npm-package-license@^3.0.1", "validate-npm-package-license@^3.0.4": - "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" - "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - "version" "3.0.4" +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: - "spdx-correct" "^3.0.0" - "spdx-expression-parse" "^3.0.0" + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" -"validate-npm-package-name@^3.0.0": - "integrity" "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==" - "resolved" "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" - "version" "3.0.0" +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== dependencies: - "builtins" "^1.0.3" + builtins "^1.0.3" -"validate-npm-package-name@^4.0.0": - "integrity" "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==" - "resolved" "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz" - "version" "4.0.0" +validate-npm-package-name@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz" + integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== dependencies: - "builtins" "^5.0.0" + builtins "^5.0.0" -"varint@^5.0.0": - "integrity" "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - "resolved" "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" - "version" "5.0.2" +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== -"vary@^1", "vary@~1.1.2": - "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - "version" "1.1.2" +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -"verror@1.10.0": - "integrity" "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==" - "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - "version" "1.10.0" +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: - "assert-plus" "^1.0.0" - "core-util-is" "1.0.2" - "extsprintf" "^1.2.0" + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" -"walk-up-path@^1.0.0": - "integrity" "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==" - "resolved" "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz" - "version" "1.0.0" +walk-up-path@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz" + integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== -"walker@^1.0.8": - "integrity" "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==" - "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" - "version" "1.0.8" +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: - "makeerror" "1.0.12" + makeerror "1.0.12" -"wcwidth@^1.0.0", "wcwidth@^1.0.1": - "integrity" "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" - "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - "version" "1.0.1" +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: - "defaults" "^1.0.3" + defaults "^1.0.3" -"web3-bzz@1.7.4": - "integrity" "sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q==" - "resolved" "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.4.tgz" - "version" "1.7.4" +web3-bzz@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.4.tgz" + integrity sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q== dependencies: "@types/node" "^12.12.6" - "got" "9.6.0" - "swarm-js" "^0.1.40" + got "9.6.0" + swarm-js "^0.1.40" -"web3-bzz@1.8.0": - "integrity" "sha512-caDtdKeLi7+2Vb+y+cq2yyhkNjnxkFzVW0j1DtemarBg3dycG1iEl75CVQMLNO6Wkg+HH9tZtRnUyFIe5LIUeQ==" - "resolved" "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.0.tgz" - "version" "1.8.0" +web3-bzz@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.0.tgz" + integrity sha512-caDtdKeLi7+2Vb+y+cq2yyhkNjnxkFzVW0j1DtemarBg3dycG1iEl75CVQMLNO6Wkg+HH9tZtRnUyFIe5LIUeQ== dependencies: "@types/node" "^12.12.6" - "got" "12.1.0" - "swarm-js" "^0.1.40" + got "12.1.0" + swarm-js "^0.1.40" -"web3-core-helpers@1.7.4": - "integrity" "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==" - "resolved" "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz" - "version" "1.7.4" +web3-core-helpers@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz" + integrity sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg== dependencies: - "web3-eth-iban" "1.7.4" - "web3-utils" "1.7.4" + web3-eth-iban "1.7.4" + web3-utils "1.7.4" -"web3-core-helpers@1.8.0": - "integrity" "sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw==" - "resolved" "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz" - "version" "1.8.0" +web3-core-helpers@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz" + integrity sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw== dependencies: - "web3-eth-iban" "1.8.0" - "web3-utils" "1.8.0" + web3-eth-iban "1.8.0" + web3-utils "1.8.0" -"web3-core-method@1.7.4": - "integrity" "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==" - "resolved" "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz" - "version" "1.7.4" +web3-core-method@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz" + integrity sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ== dependencies: "@ethersproject/transactions" "^5.6.2" - "web3-core-helpers" "1.7.4" - "web3-core-promievent" "1.7.4" - "web3-core-subscriptions" "1.7.4" - "web3-utils" "1.7.4" + web3-core-helpers "1.7.4" + web3-core-promievent "1.7.4" + web3-core-subscriptions "1.7.4" + web3-utils "1.7.4" -"web3-core-method@1.8.0": - "integrity" "sha512-c94RAzo3gpXwf2rf8rL8C77jOzNWF4mXUoUfZYYsiY35cJFd46jQDPI00CB5+ZbICTiA5mlVzMj4e7jAsTqiLA==" - "resolved" "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.0.tgz" - "version" "1.8.0" +web3-core-method@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.0.tgz" + integrity sha512-c94RAzo3gpXwf2rf8rL8C77jOzNWF4mXUoUfZYYsiY35cJFd46jQDPI00CB5+ZbICTiA5mlVzMj4e7jAsTqiLA== dependencies: "@ethersproject/transactions" "^5.6.2" - "web3-core-helpers" "1.8.0" - "web3-core-promievent" "1.8.0" - "web3-core-subscriptions" "1.8.0" - "web3-utils" "1.8.0" - -"web3-core-promievent@1.7.4": - "integrity" "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==" - "resolved" "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "eventemitter3" "4.0.4" - -"web3-core-promievent@1.8.0": - "integrity" "sha512-FGLyjAuOaAQ+ZhV6iuw9tg/9WvIkSZXKHQ4mdTyQ8MxVraOtFivOCbuLLsGgapfHYX+RPxsc1j1YzQjKoupagQ==" - "resolved" "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "eventemitter3" "4.0.4" - -"web3-core-requestmanager@1.7.4": - "integrity" "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==" - "resolved" "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "util" "^0.12.0" - "web3-core-helpers" "1.7.4" - "web3-providers-http" "1.7.4" - "web3-providers-ipc" "1.7.4" - "web3-providers-ws" "1.7.4" - -"web3-core-requestmanager@1.8.0": - "integrity" "sha512-2AoYCs3Owl5foWcf4uKPONyqFygSl9T54L8b581U16nsUirjhoTUGK/PBhMDVcLCmW4QQmcY5A8oPFpkQc1TTg==" - "resolved" "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "util" "^0.12.0" - "web3-core-helpers" "1.8.0" - "web3-providers-http" "1.8.0" - "web3-providers-ipc" "1.8.0" - "web3-providers-ws" "1.8.0" - -"web3-core-subscriptions@1.7.4": - "integrity" "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==" - "resolved" "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "eventemitter3" "4.0.4" - "web3-core-helpers" "1.7.4" - -"web3-core-subscriptions@1.8.0": - "integrity" "sha512-7lHVRzDdg0+Gcog55lG6Q3D8JV+jN+4Ly6F8cSn9xFUAwOkdbgdWsjknQG7t7CDWy21DQkvdiY2BJF8S68AqOA==" - "resolved" "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "eventemitter3" "4.0.4" - "web3-core-helpers" "1.8.0" - -"web3-core@^1.7.1", "web3-core@^1.8.0", "web3-core@1.8.0": - "integrity" "sha512-9sCA+Z02ci6zoY2bAquFiDjujRwmSKHiSGi4B8IstML8okSytnzXk1izHYSynE7ahIkguhjWAuXFvX76F5rAbA==" - "resolved" "https://registry.npmjs.org/web3-core/-/web3-core-1.8.0.tgz" - "version" "1.8.0" + web3-core-helpers "1.8.0" + web3-core-promievent "1.8.0" + web3-core-subscriptions "1.8.0" + web3-utils "1.8.0" + +web3-core-promievent@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz" + integrity sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA== + dependencies: + eventemitter3 "4.0.4" + +web3-core-promievent@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.0.tgz" + integrity sha512-FGLyjAuOaAQ+ZhV6iuw9tg/9WvIkSZXKHQ4mdTyQ8MxVraOtFivOCbuLLsGgapfHYX+RPxsc1j1YzQjKoupagQ== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz" + integrity sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA== + dependencies: + util "^0.12.0" + web3-core-helpers "1.7.4" + web3-providers-http "1.7.4" + web3-providers-ipc "1.7.4" + web3-providers-ws "1.7.4" + +web3-core-requestmanager@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.0.tgz" + integrity sha512-2AoYCs3Owl5foWcf4uKPONyqFygSl9T54L8b581U16nsUirjhoTUGK/PBhMDVcLCmW4QQmcY5A8oPFpkQc1TTg== + dependencies: + util "^0.12.0" + web3-core-helpers "1.8.0" + web3-providers-http "1.8.0" + web3-providers-ipc "1.8.0" + web3-providers-ws "1.8.0" + +web3-core-subscriptions@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz" + integrity sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.7.4" + +web3-core-subscriptions@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.0.tgz" + integrity sha512-7lHVRzDdg0+Gcog55lG6Q3D8JV+jN+4Ly6F8cSn9xFUAwOkdbgdWsjknQG7t7CDWy21DQkvdiY2BJF8S68AqOA== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.8.0" + +web3-core@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz" + integrity sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q== dependencies: "@types/bn.js" "^5.1.0" "@types/node" "^12.12.6" - "bignumber.js" "^9.0.0" - "web3-core-helpers" "1.8.0" - "web3-core-method" "1.8.0" - "web3-core-requestmanager" "1.8.0" - "web3-utils" "1.8.0" + bignumber.js "^9.0.0" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-core-requestmanager "1.7.4" + web3-utils "1.7.4" -"web3-core@1.7.4": - "integrity" "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==" - "resolved" "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz" - "version" "1.7.4" +web3-core@1.8.0, web3-core@^1.7.1, web3-core@^1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-core/-/web3-core-1.8.0.tgz" + integrity sha512-9sCA+Z02ci6zoY2bAquFiDjujRwmSKHiSGi4B8IstML8okSytnzXk1izHYSynE7ahIkguhjWAuXFvX76F5rAbA== dependencies: "@types/bn.js" "^5.1.0" "@types/node" "^12.12.6" - "bignumber.js" "^9.0.0" - "web3-core-helpers" "1.7.4" - "web3-core-method" "1.7.4" - "web3-core-requestmanager" "1.7.4" - "web3-utils" "1.7.4" + bignumber.js "^9.0.0" + web3-core-helpers "1.8.0" + web3-core-method "1.8.0" + web3-core-requestmanager "1.8.0" + web3-utils "1.8.0" -"web3-eth-abi@1.7.4": - "integrity" "sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg==" - "resolved" "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz" - "version" "1.7.4" +web3-eth-abi@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz" + integrity sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg== dependencies: "@ethersproject/abi" "^5.6.3" - "web3-utils" "1.7.4" + web3-utils "1.7.4" -"web3-eth-abi@1.8.0": - "integrity" "sha512-xPeMb2hS9YLQK/Q5YZpkcmzoRGM+/R8bogSrYHhNC3hjZSSU0YRH+1ZKK0f9YF4qDZaPMI8tKWIMSCDIpjG6fg==" - "resolved" "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.0.tgz" - "version" "1.8.0" +web3-eth-abi@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.0.tgz" + integrity sha512-xPeMb2hS9YLQK/Q5YZpkcmzoRGM+/R8bogSrYHhNC3hjZSSU0YRH+1ZKK0f9YF4qDZaPMI8tKWIMSCDIpjG6fg== dependencies: "@ethersproject/abi" "^5.6.3" - "web3-utils" "1.8.0" + web3-utils "1.8.0" -"web3-eth-accounts@1.7.4": - "integrity" "sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw==" - "resolved" "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz" - "version" "1.7.4" +web3-eth-accounts@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz" + integrity sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw== dependencies: "@ethereumjs/common" "^2.5.0" "@ethereumjs/tx" "^3.3.2" - "crypto-browserify" "3.12.0" - "eth-lib" "0.2.8" - "ethereumjs-util" "^7.0.10" - "scrypt-js" "^3.0.1" - "uuid" "3.3.2" - "web3-core" "1.7.4" - "web3-core-helpers" "1.7.4" - "web3-core-method" "1.7.4" - "web3-utils" "1.7.4" - -"web3-eth-accounts@1.8.0": - "integrity" "sha512-HQ/MDSv4bexwJLvnqsM6xpGE7c2NVOqyhzOZFyMUKXbIwIq85T3TaLnM9pCN7XqMpDcfxqiZ3q43JqQVkzHdmw==" - "resolved" "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.0.tgz" - "version" "1.8.0" + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-util "^7.0.10" + scrypt-js "^3.0.1" + uuid "3.3.2" + web3-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-utils "1.7.4" + +web3-eth-accounts@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.0.tgz" + integrity sha512-HQ/MDSv4bexwJLvnqsM6xpGE7c2NVOqyhzOZFyMUKXbIwIq85T3TaLnM9pCN7XqMpDcfxqiZ3q43JqQVkzHdmw== dependencies: "@ethereumjs/common" "^2.5.0" "@ethereumjs/tx" "^3.3.2" - "crypto-browserify" "3.12.0" - "eth-lib" "0.2.8" - "ethereumjs-util" "^7.0.10" - "scrypt-js" "^3.0.1" - "uuid" "3.3.2" - "web3-core" "1.8.0" - "web3-core-helpers" "1.8.0" - "web3-core-method" "1.8.0" - "web3-utils" "1.8.0" - -"web3-eth-contract@1.7.4": - "integrity" "sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ==" - "resolved" "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz" - "version" "1.7.4" + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-util "^7.0.10" + scrypt-js "^3.0.1" + uuid "3.3.2" + web3-core "1.8.0" + web3-core-helpers "1.8.0" + web3-core-method "1.8.0" + web3-utils "1.8.0" + +web3-eth-contract@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz" + integrity sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ== dependencies: "@types/bn.js" "^5.1.0" - "web3-core" "1.7.4" - "web3-core-helpers" "1.7.4" - "web3-core-method" "1.7.4" - "web3-core-promievent" "1.7.4" - "web3-core-subscriptions" "1.7.4" - "web3-eth-abi" "1.7.4" - "web3-utils" "1.7.4" - -"web3-eth-contract@1.8.0": - "integrity" "sha512-6xeXhW2YoCrz2Ayf2Vm4srWiMOB6LawkvxWJDnUWJ8SMATg4Pgu42C/j8rz/enXbYWt2IKuj0kk8+QszxQbK+Q==" - "resolved" "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.0.tgz" - "version" "1.8.0" + web3-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-core-promievent "1.7.4" + web3-core-subscriptions "1.7.4" + web3-eth-abi "1.7.4" + web3-utils "1.7.4" + +web3-eth-contract@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.0.tgz" + integrity sha512-6xeXhW2YoCrz2Ayf2Vm4srWiMOB6LawkvxWJDnUWJ8SMATg4Pgu42C/j8rz/enXbYWt2IKuj0kk8+QszxQbK+Q== dependencies: "@types/bn.js" "^5.1.0" - "web3-core" "1.8.0" - "web3-core-helpers" "1.8.0" - "web3-core-method" "1.8.0" - "web3-core-promievent" "1.8.0" - "web3-core-subscriptions" "1.8.0" - "web3-eth-abi" "1.8.0" - "web3-utils" "1.8.0" - -"web3-eth-ens@1.7.4": - "integrity" "sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA==" - "resolved" "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "content-hash" "^2.5.2" - "eth-ens-namehash" "2.0.8" - "web3-core" "1.7.4" - "web3-core-helpers" "1.7.4" - "web3-core-promievent" "1.7.4" - "web3-eth-abi" "1.7.4" - "web3-eth-contract" "1.7.4" - "web3-utils" "1.7.4" - -"web3-eth-ens@1.8.0": - "integrity" "sha512-/eFbQEwvsMOEiOhw9/iuRXCsPkqAmHHWuFOrThQkozRgcnSTRnvxkkRC/b6koiT5/HaKeUs4yQDg+/ixsIxZxA==" - "resolved" "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "content-hash" "^2.5.2" - "eth-ens-namehash" "2.0.8" - "web3-core" "1.8.0" - "web3-core-helpers" "1.8.0" - "web3-core-promievent" "1.8.0" - "web3-eth-abi" "1.8.0" - "web3-eth-contract" "1.8.0" - "web3-utils" "1.8.0" - -"web3-eth-iban@1.7.4": - "integrity" "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==" - "resolved" "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "bn.js" "^5.2.1" - "web3-utils" "1.7.4" - -"web3-eth-iban@1.8.0": - "integrity" "sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg==" - "resolved" "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "bn.js" "^5.2.1" - "web3-utils" "1.8.0" - -"web3-eth-personal@1.7.4": - "integrity" "sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g==" - "resolved" "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz" - "version" "1.7.4" + web3-core "1.8.0" + web3-core-helpers "1.8.0" + web3-core-method "1.8.0" + web3-core-promievent "1.8.0" + web3-core-subscriptions "1.8.0" + web3-eth-abi "1.8.0" + web3-utils "1.8.0" + +web3-eth-ens@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz" + integrity sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-promievent "1.7.4" + web3-eth-abi "1.7.4" + web3-eth-contract "1.7.4" + web3-utils "1.7.4" + +web3-eth-ens@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.0.tgz" + integrity sha512-/eFbQEwvsMOEiOhw9/iuRXCsPkqAmHHWuFOrThQkozRgcnSTRnvxkkRC/b6koiT5/HaKeUs4yQDg+/ixsIxZxA== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.8.0" + web3-core-helpers "1.8.0" + web3-core-promievent "1.8.0" + web3-eth-abi "1.8.0" + web3-eth-contract "1.8.0" + web3-utils "1.8.0" + +web3-eth-iban@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz" + integrity sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w== + dependencies: + bn.js "^5.2.1" + web3-utils "1.7.4" + +web3-eth-iban@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz" + integrity sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg== + dependencies: + bn.js "^5.2.1" + web3-utils "1.8.0" + +web3-eth-personal@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz" + integrity sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g== dependencies: "@types/node" "^12.12.6" - "web3-core" "1.7.4" - "web3-core-helpers" "1.7.4" - "web3-core-method" "1.7.4" - "web3-net" "1.7.4" - "web3-utils" "1.7.4" + web3-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-net "1.7.4" + web3-utils "1.7.4" -"web3-eth-personal@1.8.0": - "integrity" "sha512-L7FT4nR3HmsfZyIAhFpEctKkYGOjRC2h6iFKs9gnFCHZga8yLcYcGaYOBIoYtaKom99MuGBoosayWt/Twh7F5A==" - "resolved" "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.0.tgz" - "version" "1.8.0" +web3-eth-personal@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.0.tgz" + integrity sha512-L7FT4nR3HmsfZyIAhFpEctKkYGOjRC2h6iFKs9gnFCHZga8yLcYcGaYOBIoYtaKom99MuGBoosayWt/Twh7F5A== dependencies: "@types/node" "^12.12.6" - "web3-core" "1.8.0" - "web3-core-helpers" "1.8.0" - "web3-core-method" "1.8.0" - "web3-net" "1.8.0" - "web3-utils" "1.8.0" - -"web3-eth@1.7.4": - "integrity" "sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug==" - "resolved" "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "web3-core" "1.7.4" - "web3-core-helpers" "1.7.4" - "web3-core-method" "1.7.4" - "web3-core-subscriptions" "1.7.4" - "web3-eth-abi" "1.7.4" - "web3-eth-accounts" "1.7.4" - "web3-eth-contract" "1.7.4" - "web3-eth-ens" "1.7.4" - "web3-eth-iban" "1.7.4" - "web3-eth-personal" "1.7.4" - "web3-net" "1.7.4" - "web3-utils" "1.7.4" - -"web3-eth@1.8.0": - "integrity" "sha512-hist52os3OT4TQFB/GxPSMxTh3995sz6LPvQpPvj7ktSbpg9RNSFaSsPlCT63wUAHA3PZb1FemkAIeQM5t72Lw==" - "resolved" "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "web3-core" "1.8.0" - "web3-core-helpers" "1.8.0" - "web3-core-method" "1.8.0" - "web3-core-subscriptions" "1.8.0" - "web3-eth-abi" "1.8.0" - "web3-eth-accounts" "1.8.0" - "web3-eth-contract" "1.8.0" - "web3-eth-ens" "1.8.0" - "web3-eth-iban" "1.8.0" - "web3-eth-personal" "1.8.0" - "web3-net" "1.8.0" - "web3-utils" "1.8.0" - -"web3-net@1.7.4": - "integrity" "sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg==" - "resolved" "https://registry.npmjs.org/web3-net/-/web3-net-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "web3-core" "1.7.4" - "web3-core-method" "1.7.4" - "web3-utils" "1.7.4" - -"web3-net@1.8.0": - "integrity" "sha512-kX6EAacK7QrOe7DOh0t5yHS5q2kxZmTCxPVwSz9io9xBeE4n4UhmzGJ/VfhP2eM3OPKYeypcR3LEO6zZ8xn2vw==" - "resolved" "https://registry.npmjs.org/web3-net/-/web3-net-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "web3-core" "1.8.0" - "web3-core-method" "1.8.0" - "web3-utils" "1.8.0" - -"web3-provider-engine@16.0.3": - "integrity" "sha512-Q3bKhGqLfMTdLvkd4TtkGYJHcoVQ82D1l8jTIwwuJp/sAp7VHnRYb9YJ14SW/69VMWoOhSpPLZV2tWb9V0WJoA==" - "resolved" "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-16.0.3.tgz" - "version" "16.0.3" + web3-core "1.8.0" + web3-core-helpers "1.8.0" + web3-core-method "1.8.0" + web3-net "1.8.0" + web3-utils "1.8.0" + +web3-eth@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.4.tgz" + integrity sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug== + dependencies: + web3-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-core-subscriptions "1.7.4" + web3-eth-abi "1.7.4" + web3-eth-accounts "1.7.4" + web3-eth-contract "1.7.4" + web3-eth-ens "1.7.4" + web3-eth-iban "1.7.4" + web3-eth-personal "1.7.4" + web3-net "1.7.4" + web3-utils "1.7.4" + +web3-eth@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.0.tgz" + integrity sha512-hist52os3OT4TQFB/GxPSMxTh3995sz6LPvQpPvj7ktSbpg9RNSFaSsPlCT63wUAHA3PZb1FemkAIeQM5t72Lw== + dependencies: + web3-core "1.8.0" + web3-core-helpers "1.8.0" + web3-core-method "1.8.0" + web3-core-subscriptions "1.8.0" + web3-eth-abi "1.8.0" + web3-eth-accounts "1.8.0" + web3-eth-contract "1.8.0" + web3-eth-ens "1.8.0" + web3-eth-iban "1.8.0" + web3-eth-personal "1.8.0" + web3-net "1.8.0" + web3-utils "1.8.0" + +web3-net@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-net/-/web3-net-1.7.4.tgz" + integrity sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg== + dependencies: + web3-core "1.7.4" + web3-core-method "1.7.4" + web3-utils "1.7.4" + +web3-net@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-net/-/web3-net-1.8.0.tgz" + integrity sha512-kX6EAacK7QrOe7DOh0t5yHS5q2kxZmTCxPVwSz9io9xBeE4n4UhmzGJ/VfhP2eM3OPKYeypcR3LEO6zZ8xn2vw== + dependencies: + web3-core "1.8.0" + web3-core-method "1.8.0" + web3-utils "1.8.0" + +web3-provider-engine@16.0.3: + version "16.0.3" + resolved "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-16.0.3.tgz" + integrity sha512-Q3bKhGqLfMTdLvkd4TtkGYJHcoVQ82D1l8jTIwwuJp/sAp7VHnRYb9YJ14SW/69VMWoOhSpPLZV2tWb9V0WJoA== dependencies: "@ethereumjs/tx" "^3.3.0" - "async" "^2.5.0" - "backoff" "^2.5.0" - "clone" "^2.0.0" - "cross-fetch" "^2.1.0" - "eth-block-tracker" "^4.4.2" - "eth-json-rpc-filters" "^4.2.1" - "eth-json-rpc-infura" "^5.1.0" - "eth-json-rpc-middleware" "^6.0.0" - "eth-rpc-errors" "^3.0.0" - "eth-sig-util" "^1.4.2" - "ethereumjs-block" "^1.2.2" - "ethereumjs-util" "^5.1.5" - "ethereumjs-vm" "^2.3.4" - "json-stable-stringify" "^1.0.1" - "promise-to-callback" "^1.0.0" - "readable-stream" "^2.2.9" - "request" "^2.85.0" - "semaphore" "^1.0.3" - "ws" "^5.1.1" - "xhr" "^2.2.0" - "xtend" "^4.0.1" - -"web3-providers-http@1.7.4": - "integrity" "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==" - "resolved" "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "web3-core-helpers" "1.7.4" - "xhr2-cookies" "1.1.0" - -"web3-providers-http@1.8.0": - "integrity" "sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw==" - "resolved" "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "abortcontroller-polyfill" "^1.7.3" - "cross-fetch" "^3.1.4" - "es6-promise" "^4.2.8" - "web3-core-helpers" "1.8.0" - -"web3-providers-ipc@1.7.4": - "integrity" "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==" - "resolved" "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "oboe" "2.1.5" - "web3-core-helpers" "1.7.4" - -"web3-providers-ipc@1.8.0": - "integrity" "sha512-tAXHtVXNUOgehaBU8pzAlB3qhjn/PRpjdzEjzHNFqtRRTwzSEKOJxFeEhaUA4FzHnTlbnrs8ujHWUitcp1elfg==" - "resolved" "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "oboe" "2.1.5" - "web3-core-helpers" "1.8.0" - -"web3-providers-ws@1.7.4": - "integrity" "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==" - "resolved" "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "eventemitter3" "4.0.4" - "web3-core-helpers" "1.7.4" - "websocket" "^1.0.32" - -"web3-providers-ws@1.8.0": - "integrity" "sha512-bcZtSifsqyJxwkfQYamfdIRp4nhj9eJd7cxHg1uUkfLJK125WP96wyJL1xbPt7qt0MpfnTFn8/UuIqIB6nFENg==" - "resolved" "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "eventemitter3" "4.0.4" - "web3-core-helpers" "1.8.0" - "websocket" "^1.0.32" - -"web3-shh@1.7.4": - "integrity" "sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A==" - "resolved" "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "web3-core" "1.7.4" - "web3-core-method" "1.7.4" - "web3-core-subscriptions" "1.7.4" - "web3-net" "1.7.4" - -"web3-shh@1.8.0": - "integrity" "sha512-DNRgSa9Jf9xYFUGKSMylrf+zt3MPjhI2qF+UWX07o0y3+uf8zalDGiJOWvIS4upAsdPiKKVJ7co+Neof47OMmg==" - "resolved" "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "web3-core" "1.8.0" - "web3-core-method" "1.8.0" - "web3-core-subscriptions" "1.8.0" - "web3-net" "1.8.0" - -"web3-utils@^1.3.0", "web3-utils@^1.7.1", "web3-utils@^1.8.0", "web3-utils@1.8.0": - "integrity" "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==" - "resolved" "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "bn.js" "^5.2.1" - "ethereum-bloom-filters" "^1.0.6" - "ethereumjs-util" "^7.1.0" - "ethjs-unit" "0.1.6" - "number-to-bn" "1.7.0" - "randombytes" "^2.1.0" - "utf8" "3.0.0" - -"web3-utils@1.7.4": - "integrity" "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==" - "resolved" "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "bn.js" "^5.2.1" - "ethereum-bloom-filters" "^1.0.6" - "ethereumjs-util" "^7.1.0" - "ethjs-unit" "0.1.6" - "number-to-bn" "1.7.0" - "randombytes" "^2.1.0" - "utf8" "3.0.0" - -"web3@*": - "integrity" "sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA==" - "resolved" "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "web3-bzz" "1.8.0" - "web3-core" "1.8.0" - "web3-eth" "1.8.0" - "web3-eth-personal" "1.8.0" - "web3-net" "1.8.0" - "web3-shh" "1.8.0" - "web3-utils" "1.8.0" - -"web3@^1.0.0-beta.36", "web3@1.7.4": - "integrity" "sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A==" - "resolved" "https://registry.npmjs.org/web3/-/web3-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "web3-bzz" "1.7.4" - "web3-core" "1.7.4" - "web3-eth" "1.7.4" - "web3-eth-personal" "1.7.4" - "web3-net" "1.7.4" - "web3-shh" "1.7.4" - "web3-utils" "1.7.4" - -"web3@^1.8.0": - "integrity" "sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA==" - "resolved" "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "web3-bzz" "1.8.0" - "web3-core" "1.8.0" - "web3-eth" "1.8.0" - "web3-eth-personal" "1.8.0" - "web3-net" "1.8.0" - "web3-shh" "1.8.0" - "web3-utils" "1.8.0" - -"webidl-conversions@^3.0.0": - "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - "version" "3.0.1" - -"websocket@^1.0.32": - "integrity" "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==" - "resolved" "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz" - "version" "1.0.34" - dependencies: - "bufferutil" "^4.0.1" - "debug" "^2.2.0" - "es5-ext" "^0.10.50" - "typedarray-to-buffer" "^3.1.5" - "utf-8-validate" "^5.0.2" - "yaeti" "^0.0.6" - -"whatwg-fetch@^2.0.4": - "integrity" "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - "resolved" "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz" - "version" "2.0.4" - -"whatwg-url@^5.0.0": - "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" - "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "tr46" "~0.0.3" - "webidl-conversions" "^3.0.0" - -"which-boxed-primitive@^1.0.2": - "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" - "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - "version" "1.0.2" - 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": - "integrity" "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" - "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" - "version" "2.0.0" - -"which-typed-array@^1.1.2": - "integrity" "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==" - "resolved" "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz" - "version" "1.1.8" - dependencies: - "available-typed-arrays" "^1.0.5" - "call-bind" "^1.0.2" - "es-abstract" "^1.20.0" - "for-each" "^0.3.3" - "has-tostringtag" "^1.0.0" - "is-typed-array" "^1.1.9" - -"which@^1.1.1": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "isexe" "^2.0.0" - -"which@^1.2.9": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "isexe" "^2.0.0" - -"which@^1.3.1": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "isexe" "^2.0.0" - -"which@^2.0.1", "which@^2.0.2", "which@2.0.2": - "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" - "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "isexe" "^2.0.0" - -"which@1.3.1": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "isexe" "^2.0.0" - -"wide-align@^1.1.5": - "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" - "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "string-width" "^1.0.2 || 2 || 3 || 4" - -"wide-align@1.1.3": - "integrity" "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==" - "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "string-width" "^1.0.2 || 2" - -"word-wrap@^1.2.3", "word-wrap@~1.2.3": - "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - "version" "1.2.3" - -"wordwrap@^1.0.0": - "integrity" "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - "resolved" "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" - "version" "1.0.0" - -"wordwrapjs@^4.0.0": - "integrity" "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==" - "resolved" "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "reduce-flatten" "^2.0.0" - "typical" "^5.2.0" - -"workerpool@6.2.0": - "integrity" "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" - "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz" - "version" "6.2.0" - -"workerpool@6.2.1": - "integrity" "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" - "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" - "version" "6.2.1" - -"wrap-ansi@^5.1.0": - "integrity" "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "ansi-styles" "^3.2.0" - "string-width" "^3.0.0" - "strip-ansi" "^5.0.0" - -"wrap-ansi@^6.2.0": - "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - "version" "6.2.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - -"wrap-ansi@^7.0.0": - "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - -"wrappy@1": - "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - "version" "1.0.2" - -"write-file-atomic@^2.4.2": - "integrity" "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==" - "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" - "version" "2.4.3" - dependencies: - "graceful-fs" "^4.1.11" - "imurmurhash" "^0.1.4" - "signal-exit" "^3.0.2" - -"write-file-atomic@^3.0.0": - "integrity" "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==" - "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "imurmurhash" "^0.1.4" - "is-typedarray" "^1.0.0" - "signal-exit" "^3.0.2" - "typedarray-to-buffer" "^3.1.5" - -"write-file-atomic@^4.0.0", "write-file-atomic@^4.0.1": - "integrity" "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==" - "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "imurmurhash" "^0.1.4" - "signal-exit" "^3.0.7" - -"write-json-file@^3.2.0": - "integrity" "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==" - "resolved" "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "detect-indent" "^5.0.0" - "graceful-fs" "^4.1.15" - "make-dir" "^2.1.0" - "pify" "^4.0.1" - "sort-keys" "^2.0.0" - "write-file-atomic" "^2.4.2" - -"write-json-file@^4.3.0": - "integrity" "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==" - "resolved" "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "detect-indent" "^6.0.0" - "graceful-fs" "^4.1.15" - "is-plain-obj" "^2.0.0" - "make-dir" "^3.0.0" - "sort-keys" "^4.0.0" - "write-file-atomic" "^3.0.0" - -"write-pkg@^4.0.0": - "integrity" "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==" - "resolved" "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "sort-keys" "^2.0.0" - "type-fest" "^0.4.1" - "write-json-file" "^3.2.0" - -"ws@^3.0.0": - "integrity" "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==" - "resolved" "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz" - "version" "3.3.3" - dependencies: - "async-limiter" "~1.0.0" - "safe-buffer" "~5.1.0" - "ultron" "~1.1.0" - -"ws@^5.1.1": - "integrity" "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==" - "resolved" "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz" - "version" "5.2.3" - dependencies: - "async-limiter" "~1.0.0" - -"ws@^7.4.6": - "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" - "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - "version" "7.5.9" - -"ws@7.4.6": - "integrity" "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" - "resolved" "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" - "version" "7.4.6" - -"xhr-request-promise@^0.1.2": - "integrity" "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==" - "resolved" "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz" - "version" "0.1.3" - dependencies: - "xhr-request" "^1.1.0" - -"xhr-request@^1.0.1", "xhr-request@^1.1.0": - "integrity" "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==" - "resolved" "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "buffer-to-arraybuffer" "^0.0.5" - "object-assign" "^4.1.1" - "query-string" "^5.0.1" - "simple-get" "^2.7.0" - "timed-out" "^4.0.1" - "url-set-query" "^1.0.0" - "xhr" "^2.0.4" - -"xhr@^2.0.4", "xhr@^2.2.0", "xhr@^2.3.3": - "integrity" "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==" - "resolved" "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz" - "version" "2.6.0" - dependencies: - "global" "~4.4.0" - "is-function" "^1.0.1" - "parse-headers" "^2.0.0" - "xtend" "^4.0.0" - -"xhr2-cookies@1.1.0": - "integrity" "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==" - "resolved" "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "cookiejar" "^2.1.1" - -"xmlhttprequest@1.8.0": - "integrity" "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==" - "resolved" "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz" - "version" "1.8.0" - -"xtend@^4.0.0", "xtend@^4.0.1", "xtend@~4.0.0", "xtend@~4.0.1": - "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - "version" "4.0.2" - -"xtend@~2.1.1": - "integrity" "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==" - "resolved" "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "object-keys" "~0.4.0" - -"y18n@^4.0.0": - "integrity" "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" - "version" "4.0.3" - -"y18n@^5.0.5": - "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - "version" "5.0.8" - -"yaeti@^0.0.6": - "integrity" "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - "resolved" "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" - "version" "0.0.6" - -"yallist@^3.0.0", "yallist@^3.1.1": - "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - "version" "3.1.1" - -"yallist@^3.0.2": - "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - "version" "3.1.1" - -"yallist@^4.0.0": - "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - "version" "4.0.0" - -"yaml@^1.10.0", "yaml@^1.10.2": - "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" - "version" "1.10.2" - -"yargs-parser@^13.1.0": - "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" - "version" "13.1.2" - dependencies: - "camelcase" "^5.0.0" - "decamelize" "^1.2.0" - -"yargs-parser@^13.1.2", "yargs-parser@13.1.2": - "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" - "version" "13.1.2" - dependencies: - "camelcase" "^5.0.0" - "decamelize" "^1.2.0" - -"yargs-parser@^20.2.2": - "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - "version" "20.2.9" - -"yargs-parser@^20.2.3": - "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - "version" "20.2.9" - -"yargs-parser@^21.0.0": - "integrity" "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" - "version" "21.1.1" - -"yargs-parser@20.2.4": - "integrity" "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" - "version" "20.2.4" - -"yargs-parser@21.0.1": - "integrity" "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" - "version" "21.0.1" - -"yargs-unparser@1.6.0": - "integrity" "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==" - "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz" - "version" "1.6.0" - dependencies: - "flat" "^4.1.0" - "lodash" "^4.17.15" - "yargs" "^13.3.0" - -"yargs-unparser@2.0.0": - "integrity" "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==" - "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "camelcase" "^6.0.0" - "decamelize" "^4.0.0" - "flat" "^5.0.2" - "is-plain-obj" "^2.1.0" - -"yargs@^13.3.0", "yargs@13.3.2": - "integrity" "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" - "version" "13.3.2" - dependencies: - "cliui" "^5.0.0" - "find-up" "^3.0.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" "^3.0.0" - "which-module" "^2.0.0" - "y18n" "^4.0.0" - "yargs-parser" "^13.1.2" - -"yargs@^16.2.0", "yargs@16.2.0": - "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - "version" "16.2.0" - dependencies: - "cliui" "^7.0.2" - "escalade" "^3.1.1" - "get-caller-file" "^2.0.5" - "require-directory" "^2.1.1" - "string-width" "^4.2.0" - "y18n" "^5.0.5" - "yargs-parser" "^20.2.2" - -"yargs@^17.3.1": - "integrity" "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz" - "version" "17.6.0" - 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.0.0" - -"yargs@^17.4.0": - "integrity" "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz" - "version" "17.6.0" - 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.0.0" - -"yargs@13.2.4": - "integrity" "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz" - "version" "13.2.4" - dependencies: - "cliui" "^5.0.0" - "find-up" "^3.0.0" - "get-caller-file" "^2.0.1" - "os-locale" "^3.1.0" - "require-directory" "^2.1.1" - "require-main-filename" "^2.0.0" - "set-blocking" "^2.0.0" - "string-width" "^3.0.0" - "which-module" "^2.0.0" - "y18n" "^4.0.0" - "yargs-parser" "^13.1.0" - -"yn@3.1.1": - "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" - "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - "version" "3.1.1" - -"yocto-queue@^0.1.0": - "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - "version" "0.1.0" + async "^2.5.0" + backoff "^2.5.0" + clone "^2.0.0" + cross-fetch "^2.1.0" + eth-block-tracker "^4.4.2" + eth-json-rpc-filters "^4.2.1" + eth-json-rpc-infura "^5.1.0" + eth-json-rpc-middleware "^6.0.0" + eth-rpc-errors "^3.0.0" + eth-sig-util "^1.4.2" + ethereumjs-block "^1.2.2" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.85.0" + semaphore "^1.0.3" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" + +web3-providers-http@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz" + integrity sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA== + dependencies: + web3-core-helpers "1.7.4" + xhr2-cookies "1.1.0" + +web3-providers-http@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.0.tgz" + integrity sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw== + dependencies: + abortcontroller-polyfill "^1.7.3" + cross-fetch "^3.1.4" + es6-promise "^4.2.8" + web3-core-helpers "1.8.0" + +web3-providers-ipc@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz" + integrity sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.7.4" + +web3-providers-ipc@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.0.tgz" + integrity sha512-tAXHtVXNUOgehaBU8pzAlB3qhjn/PRpjdzEjzHNFqtRRTwzSEKOJxFeEhaUA4FzHnTlbnrs8ujHWUitcp1elfg== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.8.0" + +web3-providers-ws@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz" + integrity sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.7.4" + websocket "^1.0.32" + +web3-providers-ws@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.0.tgz" + integrity sha512-bcZtSifsqyJxwkfQYamfdIRp4nhj9eJd7cxHg1uUkfLJK125WP96wyJL1xbPt7qt0MpfnTFn8/UuIqIB6nFENg== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.8.0" + websocket "^1.0.32" + +web3-shh@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.4.tgz" + integrity sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A== + dependencies: + web3-core "1.7.4" + web3-core-method "1.7.4" + web3-core-subscriptions "1.7.4" + web3-net "1.7.4" + +web3-shh@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.0.tgz" + integrity sha512-DNRgSa9Jf9xYFUGKSMylrf+zt3MPjhI2qF+UWX07o0y3+uf8zalDGiJOWvIS4upAsdPiKKVJ7co+Neof47OMmg== + dependencies: + web3-core "1.8.0" + web3-core-method "1.8.0" + web3-core-subscriptions "1.8.0" + web3-net "1.8.0" + +web3-utils@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz" + integrity sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA== + dependencies: + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +web3-utils@1.8.0, web3-utils@^1.3.0, web3-utils@^1.7.1, web3-utils@^1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz" + integrity sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ== + dependencies: + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +web3@*, web3@^1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz" + integrity sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA== + dependencies: + web3-bzz "1.8.0" + web3-core "1.8.0" + web3-eth "1.8.0" + web3-eth-personal "1.8.0" + web3-net "1.8.0" + web3-shh "1.8.0" + web3-utils "1.8.0" + +web3@1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/web3/-/web3-1.7.4.tgz" + integrity sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A== + dependencies: + web3-bzz "1.7.4" + web3-core "1.7.4" + web3-eth "1.7.4" + web3-eth-personal "1.7.4" + web3-net "1.7.4" + web3-shh "1.7.4" + web3-utils "1.7.4" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +websocket@^1.0.32: + version "1.0.34" + resolved "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +whatwg-fetch@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz" + integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + 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.0" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" + integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + +which-typed-array@^1.1.2: + version "1.1.8" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz" + integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.9" + +which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@2.0.2, which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + +workerpool@6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz" + integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + 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" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-json-file@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz" + integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== + dependencies: + detect-indent "^6.0.0" + graceful-fs "^4.1.15" + is-plain-obj "^2.0.0" + make-dir "^3.0.0" + sort-keys "^4.0.0" + write-file-atomic "^3.0.0" + +write-pkg@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz" + integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== + dependencies: + sort-keys "^2.0.0" + type-fest "^0.4.1" + write-json-file "^3.2.0" + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^5.1.1: + version "5.2.3" + resolved "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz" + integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== + dependencies: + async-limiter "~1.0.0" + +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.8.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.10.0.tgz#00a28c09dfb76eae4eb45c3b565f771d6951aa51" + integrity sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw== + +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr2-cookies@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz" + integrity sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g== + dependencies: + cookiejar "^2.1.1" + +xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xmlhttprequest@1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz" + integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" + integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== + dependencies: + object-keys "~0.4.0" + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" + 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" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@21.0.1: + version "21.0.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== + +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.0.0: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-unparser@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz" + integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== + dependencies: + flat "^4.1.0" + lodash "^4.17.15" + yargs "^13.3.0" + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.0" + +yargs@13.3.2, yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.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 "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@16.2.0, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.3.1, yargs@^17.4.0: + version "17.6.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz" + integrity sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g== + 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.0.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 7301f14b1f097eb356fe419f95194d57b838dc64 Mon Sep 17 00:00:00 2001 From: Kunal Chauhan Date: Mon, 31 Oct 2022 23:39:38 +0530 Subject: [PATCH 0230/1247] updated response params for rest relayer --- packages/relayer/src/rest-relayer.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index 7f157c41d..d686739fc 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -129,13 +129,15 @@ export class RestRelayer implements Relayer { } ] ) - if (response.transactionId && response.connectionUrl) { - const clientMessenger = new ClientMessenger(response.connectionUrl) + if (response.data) { + const transactionId = response.data.transactionId + const connectionUrl = response.data.connectionUrl + const clientMessenger = new ClientMessenger(connectionUrl) if (!clientMessenger.socketClient.isConnected()) { await clientMessenger.connect() } - clientMessenger.createTransactionNotifier(response.transactionId, { + clientMessenger.createTransactionNotifier(transactionId, { onMined: (tx: any) => { const txId = tx.transactionId clientMessenger.unsubscribe(txId) @@ -177,7 +179,6 @@ export class RestRelayer implements Relayer { }) } return { - transactionId: response.transactionId, error: response.error || 'transaction failed' } } From 4224e032626d6c0fff9c3bd4fa89be9ec6f1d34d Mon Sep 17 00:00:00 2001 From: Kunal Chauhan Date: Tue, 1 Nov 2022 11:44:13 +0530 Subject: [PATCH 0231/1247] transaction id made optional for error response --- packages/core-types/src/types.ts | 2 +- packages/relayer/src/rest-relayer.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 4ef25ffdd..7d11cbced 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -15,7 +15,7 @@ export type Eip3770Address = { export type RelayResponse = { code?: number message?: string - transactionId: string + transactionId?: string hash?: string error?: string connectionUrl?: string diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index d686739fc..1f70aa089 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -166,9 +166,9 @@ export class RestRelayer implements Relayer { } }, onError: async (tx: any) => { + console.log(`Error message received at client is ${tx}`) const err = tx.error const txId = tx.transactionId - console.log(`Error message received at client is ${err}`) clientMessenger.unsubscribe(txId) return { From 1c0597630acc2a3b6e3a309ea59cc973df69c52d Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 1 Nov 2022 17:00:33 +0400 Subject: [PATCH 0232/1247] temp update for stable build and testing --- packages/smart-account/src/SmartAccount.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 17f6af372..8f7bf34a4 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -566,7 +566,12 @@ class SmartAccount { relayTrx.gasLimit = gasLimit } const txn: RelayResponse = await this.relayer.relay(relayTrx) - return txn.hash + console.log('txn') + console.log(txn) + if (txn.hash) { + return txn.hash + } + return '' } // Get Fee Options from relayer and make it available for display From f7a4f47c6076fd78515131ec59b128f312687a06 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 2 Nov 2022 14:34:36 +0530 Subject: [PATCH 0233/1247] fix: ui bugs --- packages/web3-auth/src/SocialLogin.tsx | 34 +++------------- packages/web3-auth/src/UI.tsx | 54 ++++++++++---------------- 2 files changed, 25 insertions(+), 63 deletions(-) diff --git a/packages/web3-auth/src/SocialLogin.tsx b/packages/web3-auth/src/SocialLogin.tsx index 078aee221..5c6b069b1 100644 --- a/packages/web3-auth/src/SocialLogin.tsx +++ b/packages/web3-auth/src/SocialLogin.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { createRoot, hydrateRoot } from 'react-dom/client' +import { createRoot } from 'react-dom/client' import { ethers } from 'ethers' import { Web3AuthCore } from '@web3auth/core' import { WALLET_ADAPTERS, CHAIN_NAMESPACES, SafeEventEmitterProvider } from '@web3auth/base' @@ -8,13 +8,8 @@ import { OpenloginAdapter } from '@web3auth/openlogin-adapter' import UIComponent from './UI' function createLoginModal(socialLogin: SocialLogin) { - const domElement = (document as any).getElementById('web3auth-container') - if (domElement) { - hydrateRoot(domElement, ) - } else { - const root = createRoot(domElement) - root.render() - } + const root = createRoot((document as any).getElementById('web3auth-container')) + root.render() } class SocialLogin { @@ -35,7 +30,7 @@ class SocialLogin { async init(chainId: string) { try { - console.log('init') + console.log('SocialLogin init') const web3AuthCore = new Web3AuthCore({ clientId: 'BEQgHQ6oRgaJXc3uMnGIr-AY-FLTwRinuq8xfgnInrnDrQZYXxDO0e53osvXzBXC1dcUTyD2Itf-zN1VEB8xZlo', @@ -44,7 +39,6 @@ class SocialLogin { chainId: chainId } }) - console.log('web3AuthCore 1', web3AuthCore) const openloginAdapter = new OpenloginAdapter({ adapterSettings: { @@ -52,14 +46,6 @@ class SocialLogin { 'BEQgHQ6oRgaJXc3uMnGIr-AY-FLTwRinuq8xfgnInrnDrQZYXxDO0e53osvXzBXC1dcUTyD2Itf-zN1VEB8xZlo', network: 'testnet', uxMode: 'redirect', - loginConfig: { - google: { - name: 'Biconomy Social Login', - verifier: 'bico-google-test', - typeOfLogin: 'google', - clientId: '232763728538-7o7jmud0gkfojmijb603cu37konbbn96.apps.googleusercontent.com' - } - }, whiteLabel: { name: 'Biconomy SDK', logoLight: 'https://s2.coinmarketcap.com/static/img/coins/64x64/9543.png', @@ -70,9 +56,7 @@ class SocialLogin { } }) web3AuthCore.configureAdapter(openloginAdapter) - console.log('web3AuthCore 2', web3AuthCore) await web3AuthCore.init() - console.log('web3AuthCore 3', web3AuthCore) this.web3auth = web3AuthCore if (web3AuthCore && web3AuthCore.provider) { this.provider = web3AuthCore.provider @@ -95,7 +79,7 @@ class SocialLogin { } createWalletDiv() { - //create a fixed div into html but keep it hidden initially + // create a fixed div into html but keep it hidden initially const walletDiv = document.createElement('div') walletDiv.id = 'web3auth-container' walletDiv.style.display = 'none' @@ -106,8 +90,6 @@ class SocialLogin { this.walletDiv = walletDiv // insert div into top of body. document.body.insertBefore(walletDiv, document.body.firstChild) - this.walletDiv.innerHTML = - "" this._createIframe(walletDiv) } @@ -134,8 +116,6 @@ class SocialLogin { } async login() { - console.log('this', this) - console.log('this.web3auth', this.web3auth) if (!this.web3auth) { console.log('web3auth not initialized yet') return @@ -167,8 +147,4 @@ class SocialLogin { } } -const socialLoginSDK = new SocialLogin() -;(window as any).socialLoginSDK = socialLoginSDK -export { socialLoginSDK } - export default SocialLogin diff --git a/packages/web3-auth/src/UI.tsx b/packages/web3-auth/src/UI.tsx index 11b403474..449eff706 100644 --- a/packages/web3-auth/src/UI.tsx +++ b/packages/web3-auth/src/UI.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react' +import React from 'react' const googleCardStyle = { display: 'flex', @@ -14,7 +14,6 @@ const googleCardStyle = { } as React.CSSProperties const buttonTextSpan = { - fontFamily: 'Chakra Petch', fontStyle: 'normal', fontWeight: 600, fontSize: '18px', @@ -25,19 +24,15 @@ const buttonTextSpan = { color: '#FFFFFF' } as React.CSSProperties -const grid = { - display: 'flex', - alignItems: 'center', - flexDirection: 'column' -} as React.CSSProperties - const container = { position: 'fixed', float: 'left', - left: '0%', - top: '0%', - // transform: 'translate(0%, 50%)', + left: '50%', + top: '50%', + transform: 'translate(-50%, -50%)', transition: 'opacity 400ms ease-in', + border: '1px solid #181818', + boxShadow: '5px 5px 0px #181818', borderRadius: 10, padding: 30, zIndex: 100, @@ -52,7 +47,6 @@ const footer = { } as React.CSSProperties const footerNormalText = { - fontFamily: 'Chakra Petch', fontStyle: 'normal', fontWeight: '600', fontSize: '14.109px', @@ -61,7 +55,6 @@ const footerNormalText = { } as React.CSSProperties const footerBigText = { - fontFamily: 'Chakra Petch', fontStyle: 'normal', fontWeight: '700', fontSize: '16.1351px', @@ -70,54 +63,47 @@ const footerBigText = { } as React.CSSProperties const UI = (props: any) => { - const [show, setShow] = useState(true) - - useEffect(() => { - document.addEventListener('show-modal', (_e: unknown) => { - setShow(true) - }) - document.addEventListener('hide-modal', () => { - setShow(false) - }) - }, []) - - if (!show) { - return <> - } - return (
props.socialLogin.hideWallet()} />

- Create a wallet
- to continue + Biconomy Social Login

+

+ Create a wallet to continue +

-
+
+
+ +
+ +
+ +
powered by =14.8.1 < 16": - "integrity" "sha512-ZZ8lPcjH/hFdGUXJuV8E7sByxOSEBxtm84+bgiwdvViVcr55LHBfDBtcyT/e7U1omLNrvFk1rrbyhX0YSKQigQ==" - "resolved" "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.0.8.tgz" - "version" "15.0.8" + "integrity" "sha512-+1bvJ2tjqwWLDR76iEL3qdC0+hS5C/kCkvQMzD2/giPZJS2yrVhAqRxvGxiPYZLXdSZL0Lggzb01nXywJOSRGw==" + "resolved" "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.0.11.tgz" + "version" "15.0.11" dependencies: "@phenomnomnominal/tsquery" "4.1.1" "ejs" "^3.1.7" @@ -2341,12 +2418,12 @@ "semver" "7.3.4" "tslib" "^2.3.0" -"@nrwl/tao@15.0.8": - "integrity" "sha512-Xr1hq3ZCfdKS5XSf8non5eLVdGLEleKdqBhGzdOFssYaPsCDkbavX5mzySzxeLk+DM9rcOFhwwf0x7JCOiq0bQ==" - "resolved" "https://registry.npmjs.org/@nrwl/tao/-/tao-15.0.8.tgz" - "version" "15.0.8" +"@nrwl/tao@15.0.11": + "integrity" "sha512-KiQB4i7AeY6xkhGeMnPgmpnjN60In9vj9ruW2W2+WZeQN/HxwCSh0tR0oPb1e92z8ncqw6guO4QYR7CbCHF3Yg==" + "resolved" "https://registry.npmjs.org/@nrwl/tao/-/tao-15.0.11.tgz" + "version" "15.0.11" dependencies: - "nx" "15.0.8" + "nx" "15.0.11" "@octokit/auth-token@^3.0.0": "integrity" "sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==" @@ -2638,9 +2715,9 @@ "version" "4.6.0" "@sinonjs/commons@^1.7.0": - "integrity" "sha512-RpmQdHVo8hCEHDVpO39zToS9jOhR6nw+/lQAzRNq9ErrGV9IeHM71XCn68svVl/euFeVW6BWX4p35gkhbOcSIQ==" - "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.4.tgz" - "version" "1.8.4" + "integrity" "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==" + "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz" + "version" "1.8.5" dependencies: "type-detect" "4.0.8" @@ -2651,6 +2728,39 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@socket.io/component-emitter@~3.1.0": + "integrity" "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + "resolved" "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz" + "version" "3.1.0" + +"@solana/buffer-layout@^4.0.0": + "integrity" "sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ==" + "resolved" "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "buffer" "~6.0.3" + +"@solana/web3.js@^1.66.2": + "integrity" "sha512-RyaHMR2jGmaesnYP045VLeBGfR/gAW3cvZHzMFGg7bkO+WOYOYp1nEllf0/la4U4qsYGKCsO9eEevR5fhHiVHg==" + "resolved" "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.66.2.tgz" + "version" "1.66.2" + dependencies: + "@babel/runtime" "^7.12.5" + "@noble/ed25519" "^1.7.0" + "@noble/hashes" "^1.1.2" + "@noble/secp256k1" "^1.6.3" + "@solana/buffer-layout" "^4.0.0" + "bigint-buffer" "^1.1.5" + "bn.js" "^5.0.0" + "borsh" "^0.7.0" + "bs58" "^4.0.1" + "buffer" "6.0.1" + "fast-stable-stringify" "^1.0.0" + "jayson" "^3.4.4" + "node-fetch" "2" + "rpc-websockets" "^7.5.0" + "superstruct" "^0.14.2" + "@solidity-parser/parser@^0.14.0": "integrity" "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==" "resolved" "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz" @@ -2684,7 +2794,51 @@ "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" "version" "2.0.0" -"@toruslabs/http-helpers@^3.2.0": +"@toruslabs/base-controllers@^2.2.6": + "integrity" "sha512-spN4ltQv9ulzgxZIskfME4i1qSaW+eywpEJuOjRJ3vw07WPydXNzO4xAMHoE4Q5Wf/Y34rZUwJcLYjqieM+rgQ==" + "resolved" "https://registry.npmjs.org/@toruslabs/base-controllers/-/base-controllers-2.2.6.tgz" + "version" "2.2.6" + dependencies: + "@toruslabs/broadcast-channel" "^6.0.0" + "@toruslabs/http-helpers" "^3.0.0" + "@toruslabs/openlogin-jrpc" "^2.1.0" + "async-mutex" "^0.3.2" + "bignumber.js" "^9.0.2" + "bowser" "^2.11.0" + "eth-rpc-errors" "^4.0.3" + "ethereumjs-util" "^7.1.5" + "json-rpc-random-id" "^1.0.1" + "lodash" "^4.17.21" + "loglevel" "^1.8.0" + +"@toruslabs/broadcast-channel@^6.0.0": + "integrity" "sha512-FapnmyPLpqfrdbfyawlReRpluEKQ2riqCNOOZQz9KHPF8a/XsgYi/UAdrR02k6BHaZYyV6D52Oji1gM6CPj6EQ==" + "resolved" "https://registry.npmjs.org/@toruslabs/broadcast-channel/-/broadcast-channel-6.1.1.tgz" + "version" "6.1.1" + dependencies: + "@babel/runtime" "^7.19.4" + "@toruslabs/eccrypto" "^1.1.8" + "@toruslabs/metadata-helpers" "^3.0.0" + "bowser" "^2.11.0" + "keccak" "^3.0.2" + "loglevel" "^1.8.0" + "oblivious-set" "1.1.1" + "socket.io-client" "^4.5.3" + "unload" "^2.3.1" + +"@toruslabs/eccrypto@^1.1.8": + "integrity" "sha512-5dIrO2KVqvnAPOPfJ2m6bnjp9vav9GIcCZXiXRW/bJuIDRLVxJhVvRlleF4oaEZPq5yX5piHq5jVHagNNS0jOQ==" + "resolved" "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-1.1.8.tgz" + "version" "1.1.8" + dependencies: + "acorn" "^8.4.1" + "elliptic" "^6.5.4" + "es6-promise" "^4.2.8" + "nan" "^2.14.2" + optionalDependencies: + "secp256k1" "^3.8.0" + +"@toruslabs/http-helpers@^3.0.0", "@toruslabs/http-helpers@^3.1.0", "@toruslabs/http-helpers@^3.2.0": "integrity" "sha512-fCfvBHfYzd7AyOYlBo7wihh5nj6+4Ik6V5+nI7H63oiKICjMlByTXSauTUa/qm2mjZJn/OmVYeV5guPIgxoW1w==" "resolved" "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-3.2.0.tgz" "version" "3.2.0" @@ -2692,7 +2846,25 @@ "lodash.merge" "^4.6.2" "loglevel" "^1.8.0" -"@toruslabs/openlogin-jrpc@^2.6.0": +"@toruslabs/metadata-helpers@^3.0.0": + "integrity" "sha512-0eWCIbKpaBx3/z3BDyWebxUisCS37Uxb0zxOEWizSXjGH/T6TJCrBeZFPmANN3hq47GoNCsRiku9cgfij1UMTQ==" + "resolved" "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@toruslabs/eccrypto" "^1.1.8" + "@toruslabs/http-helpers" "^3.0.0" + "elliptic" "^6.5.4" + "json-stable-stringify" "^1.0.1" + "keccak" "^3.0.2" + +"@toruslabs/openlogin-ed25519@^2.0.0": + "integrity" "sha512-gz00QpMHbSVaZFKATxbsCbtO2uRyF7xIvetuzOCfbfcjkTz0Wonr/8B44uiIDe4j2ddv4Hx8HvnBikFDLQQrZA==" + "resolved" "https://registry.npmjs.org/@toruslabs/openlogin-ed25519/-/openlogin-ed25519-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "@toruslabs/tweetnacl-js" "^1.0.3" + +"@toruslabs/openlogin-jrpc@^2.1.0", "@toruslabs/openlogin-jrpc@^2.6.0": "integrity" "sha512-hX2b1HSBvC6jSVlXuhgdH8qyE83cj6SEiHjQ5VsHfRUv15wBgzj+x2Yjw5pjvbrnYXzUlFvFySs10EU7na1cuA==" "resolved" "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-2.6.0.tgz" "version" "2.6.0" @@ -2715,25 +2887,24 @@ "keccak" "^3.0.2" "randombytes" "^2.1.0" -"@toruslabs/torus-embed@^1.36.2": - "integrity" "sha512-ueoilz7mCKgZ78cdPUmeFfASQiydEWmAr1jAImZGFS6up78oOzkkzU7d/dOEd1Ka5wtJzKsRM6aHnCkRhFa0lQ==" - "resolved" "https://registry.npmjs.org/@toruslabs/torus-embed/-/torus-embed-1.36.7.tgz" - "version" "1.36.7" +"@toruslabs/openlogin@^2.7.0": + "integrity" "sha512-7ro3fnMYIXQ8jotJZoO/6KHsb9Pse3AQR4o+nT+/4KZ/j2rizcNj7vJ7BXqoDebJd1bKYu5NkKlItYdjeq+zag==" + "resolved" "https://registry.npmjs.org/@toruslabs/openlogin/-/openlogin-2.7.0.tgz" + "version" "2.7.0" dependencies: - "@metamask/obs-store" "^7.0.0" - "@toruslabs/http-helpers" "^3.2.0" + "@toruslabs/eccrypto" "^1.1.8" + "@toruslabs/http-helpers" "^3.1.0" "@toruslabs/openlogin-jrpc" "^2.6.0" - "create-hash" "^1.2.0" - "end-of-stream" "^1.4.4" - "eth-rpc-errors" "^4.0.3" - "events" "^3.3.0" - "fast-deep-equal" "^3.1.3" - "is-stream" "^2.0.1" + "@toruslabs/openlogin-utils" "^2.1.0" "lodash.merge" "^4.6.2" "loglevel" "^1.8.0" - "once" "^1.4.0" "pump" "^3.0.0" +"@toruslabs/tweetnacl-js@^1.0.3": + "integrity" "sha512-WQJYMTR/bkqvpk3DWOqRt5e24RhwJp9PXUoSj4zSthd3+fDhKYCI56YVMPNDKah1fCffOe9F3m8iZ5SgDZ+Csw==" + "resolved" "https://registry.npmjs.org/@toruslabs/tweetnacl-js/-/tweetnacl-js-1.0.3.tgz" + "version" "1.0.3" + "@truffle/error@^0.1.1": "integrity" "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==" "resolved" "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz" @@ -2837,9 +3008,9 @@ "version" "0.2.1" "@types/babel__core@^7.1.14": - "integrity" "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==" - "resolved" "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" - "version" "7.1.19" + "integrity" "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==" + "resolved" "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz" + "version" "7.1.20" dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -2913,9 +3084,9 @@ "@types/chai" "*" "@types/chai@*", "@types/chai@^4.2.0", "@types/chai@^4.3.0": - "integrity" "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" - "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz" - "version" "4.3.3" + "integrity" "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==" + "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz" + "version" "4.3.4" "@types/concat-stream@^1.6.0": "integrity" "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==" @@ -2924,6 +3095,39 @@ dependencies: "@types/node" "*" +"@types/connect@^3.4.33": + "integrity" "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==" + "resolved" "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" + "version" "3.4.35" + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + "integrity" "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==" + "resolved" "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz" + "version" "3.7.4" + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + "integrity" "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==" + "resolved" "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz" + "version" "8.4.10" + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + "integrity" "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" + "version" "1.0.0" + +"@types/estree@^0.0.51": + "integrity" "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" + "version" "0.0.51" + "@types/form-data@0.0.33": "integrity" "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==" "resolved" "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz" @@ -2978,7 +3182,7 @@ "expect" "^28.0.0" "pretty-format" "^28.0.0" -"@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": "integrity" "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" "version" "7.0.11" @@ -3062,6 +3266,11 @@ "resolved" "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" "version" "10.17.60" +"@types/node@^12.12.54": + "integrity" "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" + "version" "12.20.55" + "@types/node@^12.12.6": "integrity" "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" "resolved" "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" @@ -3099,11 +3308,32 @@ "resolved" "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz" "version" "2.7.1" +"@types/prop-types@*": + "integrity" "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "resolved" "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" + "version" "15.7.5" + "@types/qs@^6.2.31", "@types/qs@^6.9.7": "integrity" "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" "resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" "version" "6.9.7" +"@types/react-dom@^18.0.6": + "integrity" "sha512-C3GYO0HLaOkk9dDAz3Dl4sbe4AKUGTCfFIZsz3n/82dPNN8Du533HzKatDxeUYWu24wJgMP1xICqkWk1YOLOIw==" + "resolved" "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.8.tgz" + "version" "18.0.8" + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^18.0.15": + "integrity" "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==" + "resolved" "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz" + "version" "18.0.25" + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + "csstype" "^3.0.2" + "@types/resolve@^0.0.8": "integrity" "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==" "resolved" "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz" @@ -3118,6 +3348,11 @@ dependencies: "@types/node" "*" +"@types/scheduler@*": + "integrity" "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "resolved" "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" + "version" "0.16.2" + "@types/secp256k1@^4.0.1": "integrity" "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==" "resolved" "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz" @@ -3136,9 +3371,9 @@ "version" "7.3.13" "@types/sinon-chai@^3.2.3": - "integrity" "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==" - "resolved" "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz" - "version" "3.2.8" + "integrity" "sha512-/19t63pFYU0ikrdbXKBWj9PCdnKyTd0Qkz0X91Ta081cYsq90OxYdcWwK/dwEoDa6dtXgj2HJfmzgq+QZTHdmQ==" + "resolved" "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.9.tgz" + "version" "3.2.9" dependencies: "@types/chai" "*" "@types/sinon" "*" @@ -3180,6 +3415,13 @@ "@types/bn.js" "*" "@types/underscore" "*" +"@types/ws@^7.4.4": + "integrity" "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==" + "resolved" "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" + "version" "7.4.7" + dependencies: + "@types/node" "*" + "@types/ws@^8.5.3": "integrity" "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==" "resolved" "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz" @@ -3200,13 +3442,13 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.17.0": - "integrity" "sha512-5TJh2AgL6+wpL8H/GTSjNb4WrjKoR2rqvFxR/DDTqYNk6uXn8BJMEcncLSpMbf/XV1aS0jAjYwn98uvVCiAywQ==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.0.tgz" - "version" "5.42.0" + "integrity" "sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.1.tgz" + "version" "5.42.1" dependencies: - "@typescript-eslint/scope-manager" "5.42.0" - "@typescript-eslint/type-utils" "5.42.0" - "@typescript-eslint/utils" "5.42.0" + "@typescript-eslint/scope-manager" "5.42.1" + "@typescript-eslint/type-utils" "5.42.1" + "@typescript-eslint/utils" "5.42.1" "debug" "^4.3.4" "ignore" "^5.2.0" "natural-compare-lite" "^1.4.0" @@ -3215,71 +3457,71 @@ "tsutils" "^3.21.0" "@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.17.0": - "integrity" "sha512-Ixh9qrOTDRctFg3yIwrLkgf33AHyEIn6lhyf5cCfwwiGtkWhNpVKlEZApi3inGQR/barWnY7qY8FbGKBO7p3JA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.0.tgz" - "version" "5.42.0" + "integrity" "sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.1.tgz" + "version" "5.42.1" dependencies: - "@typescript-eslint/scope-manager" "5.42.0" - "@typescript-eslint/types" "5.42.0" - "@typescript-eslint/typescript-estree" "5.42.0" + "@typescript-eslint/scope-manager" "5.42.1" + "@typescript-eslint/types" "5.42.1" + "@typescript-eslint/typescript-estree" "5.42.1" "debug" "^4.3.4" -"@typescript-eslint/scope-manager@5.42.0": - "integrity" "sha512-l5/3IBHLH0Bv04y+H+zlcLiEMEMjWGaCX6WyHE5Uk2YkSGAMlgdUPsT/ywTSKgu9D1dmmKMYgYZijObfA39Wow==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.0.tgz" - "version" "5.42.0" +"@typescript-eslint/scope-manager@5.42.1": + "integrity" "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz" + "version" "5.42.1" dependencies: - "@typescript-eslint/types" "5.42.0" - "@typescript-eslint/visitor-keys" "5.42.0" + "@typescript-eslint/types" "5.42.1" + "@typescript-eslint/visitor-keys" "5.42.1" -"@typescript-eslint/type-utils@5.42.0": - "integrity" "sha512-HW14TXC45dFVZxnVW8rnUGnvYyRC0E/vxXShFCthcC9VhVTmjqOmtqj6H5rm9Zxv+ORxKA/1aLGD7vmlLsdlOg==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.42.0.tgz" - "version" "5.42.0" +"@typescript-eslint/type-utils@5.42.1": + "integrity" "sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.42.1.tgz" + "version" "5.42.1" dependencies: - "@typescript-eslint/typescript-estree" "5.42.0" - "@typescript-eslint/utils" "5.42.0" + "@typescript-eslint/typescript-estree" "5.42.1" + "@typescript-eslint/utils" "5.42.1" "debug" "^4.3.4" "tsutils" "^3.21.0" -"@typescript-eslint/types@5.42.0": - "integrity" "sha512-t4lzO9ZOAUcHY6bXQYRuu+3SSYdD9TS8ooApZft4WARt4/f2Cj/YpvbTe8A4GuhT4bNW72goDMOy7SW71mZwGw==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.0.tgz" - "version" "5.42.0" +"@typescript-eslint/types@5.42.1": + "integrity" "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz" + "version" "5.42.1" -"@typescript-eslint/typescript-estree@5.42.0": - "integrity" "sha512-2O3vSq794x3kZGtV7i4SCWZWCwjEtkWfVqX4m5fbUBomOsEOyd6OAD1qU2lbvV5S8tgy/luJnOYluNyYVeOTTg==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.0.tgz" - "version" "5.42.0" +"@typescript-eslint/typescript-estree@5.42.1": + "integrity" "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz" + "version" "5.42.1" dependencies: - "@typescript-eslint/types" "5.42.0" - "@typescript-eslint/visitor-keys" "5.42.0" + "@typescript-eslint/types" "5.42.1" + "@typescript-eslint/visitor-keys" "5.42.1" "debug" "^4.3.4" "globby" "^11.1.0" "is-glob" "^4.0.3" "semver" "^7.3.7" "tsutils" "^3.21.0" -"@typescript-eslint/utils@5.42.0": - "integrity" "sha512-JZ++3+h1vbeG1NUECXQZE3hg0kias9kOtcQr3+JVQ3whnjvKuMyktJAAIj6743OeNPnGBmjj7KEmiDL7qsdnCQ==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.0.tgz" - "version" "5.42.0" +"@typescript-eslint/utils@5.42.1": + "integrity" "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz" + "version" "5.42.1" dependencies: "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.42.0" - "@typescript-eslint/types" "5.42.0" - "@typescript-eslint/typescript-estree" "5.42.0" + "@typescript-eslint/scope-manager" "5.42.1" + "@typescript-eslint/types" "5.42.1" + "@typescript-eslint/typescript-estree" "5.42.1" "eslint-scope" "^5.1.1" "eslint-utils" "^3.0.0" "semver" "^7.3.7" -"@typescript-eslint/visitor-keys@5.42.0": - "integrity" "sha512-QHbu5Hf/2lOEOwy+IUw0GoSCuAzByTAWWrOTKzTzsotiUnWFpuKnXcAhC9YztAf2EElQ0VvIK+pHJUPkM0q7jg==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.0.tgz" - "version" "5.42.0" +"@typescript-eslint/visitor-keys@5.42.1": + "integrity" "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz" + "version" "5.42.1" dependencies: - "@typescript-eslint/types" "5.42.0" + "@typescript-eslint/types" "5.42.1" "eslint-visitor-keys" "^3.3.0" "@ungap/promise-all-settled@1.1.2": @@ -3287,6 +3529,436 @@ "resolved" "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" "version" "1.1.2" +"@walletconnect/browser-utils@^1.8.0": + "integrity" "sha512-Wcqqx+wjxIo9fv6eBUFHPsW1y/bGWWRboni5dfD8PtOmrihrEpOCmvRJe4rfl7xgJW8Ea9UqKEaq0bIRLHlK4A==" + "resolved" "https://registry.npmjs.org/@walletconnect/browser-utils/-/browser-utils-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "@walletconnect/safe-json" "1.0.0" + "@walletconnect/types" "^1.8.0" + "@walletconnect/window-getters" "1.0.0" + "@walletconnect/window-metadata" "1.0.0" + "detect-browser" "5.2.0" + +"@walletconnect/client@~1.8.0": + "integrity" "sha512-svyBQ14NHx6Cs2j4TpkQaBI/2AF4+LXz64FojTjMtV4VMMhl81jSO1vNeg+yYhQzvjcGH/GpSwixjyCW0xFBOQ==" + "resolved" "https://registry.npmjs.org/@walletconnect/client/-/client-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "@walletconnect/core" "^1.8.0" + "@walletconnect/iso-crypto" "^1.8.0" + "@walletconnect/types" "^1.8.0" + "@walletconnect/utils" "^1.8.0" + +"@walletconnect/core@^1.8.0": + "integrity" "sha512-aFTHvEEbXcZ8XdWBw6rpQDte41Rxwnuk3SgTD8/iKGSRTni50gI9S3YEzMj05jozSiOBxQci4pJDMVhIUMtarw==" + "resolved" "https://registry.npmjs.org/@walletconnect/core/-/core-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "@walletconnect/socket-transport" "^1.8.0" + "@walletconnect/types" "^1.8.0" + "@walletconnect/utils" "^1.8.0" + +"@walletconnect/crypto@^1.0.2": + "integrity" "sha512-+OlNtwieUqVcOpFTvLBvH+9J9pntEqH5evpINHfVxff1XIgwV55PpbdvkHu6r9Ib4WQDOFiD8OeeXs1vHw7xKQ==" + "resolved" "https://registry.npmjs.org/@walletconnect/crypto/-/crypto-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "@walletconnect/encoding" "^1.0.1" + "@walletconnect/environment" "^1.0.0" + "@walletconnect/randombytes" "^1.0.2" + "aes-js" "^3.1.2" + "hash.js" "^1.1.7" + +"@walletconnect/encoding@^1.0.1": + "integrity" "sha512-8opL2rs6N6E3tJfsqwS82aZQDL3gmupWUgmvuZ3CGU7z/InZs3R9jkzH8wmYtpbq0sFK3WkJkQRZFFk4BkrmFA==" + "resolved" "https://registry.npmjs.org/@walletconnect/encoding/-/encoding-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "is-typedarray" "1.0.0" + "typedarray-to-buffer" "3.1.5" + +"@walletconnect/environment@^1.0.0": + "integrity" "sha512-4BwqyWy6KpSvkocSaV7WR3BlZfrxLbJSLkg+j7Gl6pTDE+U55lLhJvQaMuDVazXYxcjBsG09k7UlH7cGiUI5vQ==" + "resolved" "https://registry.npmjs.org/@walletconnect/environment/-/environment-1.0.0.tgz" + "version" "1.0.0" + +"@walletconnect/iso-crypto@^1.8.0": + "integrity" "sha512-pWy19KCyitpfXb70hA73r9FcvklS+FvO9QUIttp3c2mfW8frxgYeRXfxLRCIQTkaYueRKvdqPjbyhPLam508XQ==" + "resolved" "https://registry.npmjs.org/@walletconnect/iso-crypto/-/iso-crypto-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "@walletconnect/crypto" "^1.0.2" + "@walletconnect/types" "^1.8.0" + "@walletconnect/utils" "^1.8.0" + +"@walletconnect/jsonrpc-types@^1.0.1": + "integrity" "sha512-+6coTtOuChCqM+AoYyi4Q83p9l/laI6NvuM2/AHaZFuf0gT0NjW7IX2+86qGyizn7Ptq4AYZmfxurAxTnhefuw==" + "resolved" "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "keyvaluestorage-interface" "^1.0.0" + +"@walletconnect/jsonrpc-utils@^1.0.3": + "integrity" "sha512-3yb49bPk16MNLk6uIIHPSHQCpD6UAo1OMOx1rM8cW/MPEAYAzrSW5hkhG7NEUwX9SokRIgnZK3QuQkiyNzBMhQ==" + "resolved" "https://registry.npmjs.org/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "@walletconnect/environment" "^1.0.0" + "@walletconnect/jsonrpc-types" "^1.0.1" + +"@walletconnect/mobile-registry@^1.4.0": + "integrity" "sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw==" + "resolved" "https://registry.npmjs.org/@walletconnect/mobile-registry/-/mobile-registry-1.4.0.tgz" + "version" "1.4.0" + +"@walletconnect/qrcode-modal@^1.8.0": + "integrity" "sha512-BueaFefaAi8mawE45eUtztg3ZFbsAH4DDXh1UNwdUlsvFMjqcYzLUG0xZvDd6z2eOpbgDg2N3bl6gF0KONj1dg==" + "resolved" "https://registry.npmjs.org/@walletconnect/qrcode-modal/-/qrcode-modal-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "@walletconnect/browser-utils" "^1.8.0" + "@walletconnect/mobile-registry" "^1.4.0" + "@walletconnect/types" "^1.8.0" + "copy-to-clipboard" "^3.3.1" + "preact" "10.4.1" + "qrcode" "1.4.4" + +"@walletconnect/randombytes@^1.0.2": + "integrity" "sha512-ivgOtAyqQnN0rLQmOFPemsgYGysd/ooLfaDA/ACQ3cyqlca56t3rZc7pXfqJOIETx/wSyoF5XbwL+BqYodw27A==" + "resolved" "https://registry.npmjs.org/@walletconnect/randombytes/-/randombytes-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "@walletconnect/encoding" "^1.0.1" + "@walletconnect/environment" "^1.0.0" + "randombytes" "^2.1.0" + +"@walletconnect/safe-json@1.0.0": + "integrity" "sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg==" + "resolved" "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.0.tgz" + "version" "1.0.0" + +"@walletconnect/socket-transport@^1.8.0": + "integrity" "sha512-5DyIyWrzHXTcVp0Vd93zJ5XMW61iDM6bcWT4p8DTRfFsOtW46JquruMhxOLeCOieM4D73kcr3U7WtyR4JUsGuQ==" + "resolved" "https://registry.npmjs.org/@walletconnect/socket-transport/-/socket-transport-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "@walletconnect/types" "^1.8.0" + "@walletconnect/utils" "^1.8.0" + "ws" "7.5.3" + +"@walletconnect/types@^1.8.0", "@walletconnect/types@~1.8.0": + "integrity" "sha512-Cn+3I0V0vT9ghMuzh1KzZvCkiAxTq+1TR2eSqw5E5AVWfmCtECFkVZBP6uUJZ8YjwLqXheI+rnjqPy7sVM4Fyg==" + "resolved" "https://registry.npmjs.org/@walletconnect/types/-/types-1.8.0.tgz" + "version" "1.8.0" + +"@walletconnect/utils@^1.8.0": + "integrity" "sha512-zExzp8Mj1YiAIBfKNm5u622oNw44WOESzo6hj+Q3apSMIb0Jph9X3GDIdbZmvVZsNPxWDL7uodKgZcCInZv2vA==" + "resolved" "https://registry.npmjs.org/@walletconnect/utils/-/utils-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "@walletconnect/browser-utils" "^1.8.0" + "@walletconnect/encoding" "^1.0.1" + "@walletconnect/jsonrpc-utils" "^1.0.3" + "@walletconnect/types" "^1.8.0" + "bn.js" "4.11.8" + "js-sha3" "0.8.0" + "query-string" "6.13.5" + +"@walletconnect/window-getters@^1.0.0", "@walletconnect/window-getters@1.0.0": + "integrity" "sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA==" + "resolved" "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.0.tgz" + "version" "1.0.0" + +"@walletconnect/window-metadata@1.0.0": + "integrity" "sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA==" + "resolved" "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "@walletconnect/window-getters" "^1.0.0" + +"@web3auth/base-evm-adapter@^3.0.0": + "integrity" "sha512-B3t5LnEnA+0EXvIudbsFGTtJ/Kg3HgQWjt6lKRT/ptTZjrq6hC1UQxdQKdsqMW1MQQs922VzaVXDdrQwtbdxMg==" + "resolved" "https://registry.npmjs.org/@web3auth/base-evm-adapter/-/base-evm-adapter-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@web3auth/base" "^3.0.0" + +"@web3auth/base-plugin@^3.0.0": + "integrity" "sha512-B4qXg56XeCzZtQOZBKeOdY2INFWF1/NEUxNo9z3hRyo+ogLHiZmK85WyPgNk2XheaUUgWEJOzTY8RucLCGXeXw==" + "resolved" "https://registry.npmjs.org/@web3auth/base-plugin/-/base-plugin-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@web3auth/base" "^3.0.0" + +"@web3auth/base-provider@^3.0.0": + "integrity" "sha512-9DlGvPySNREOKrR1tb6MueLTxUZn2L9x5+vOoPz3xsaFKawZFsHbuk1QDm96bs3d2LuUdozT9J4x6AnjfrMW6Q==" + "resolved" "https://registry.npmjs.org/@web3auth/base-provider/-/base-provider-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@toruslabs/base-controllers" "^2.2.6" + "@toruslabs/openlogin-jrpc" "^2.6.0" + "@web3auth/base" "^3.0.0" + "eth-rpc-errors" "^4.0.3" + "json-rpc-random-id" "^1.0.1" + +"@web3auth/base@^3.0.0": + "integrity" "sha512-7uYvxCgNhRpyQ3Kt6wfFYOwGY6HK++TtDwQ4s5VfI4gClEylwbR+9OWzt/XriixqxYp4n8WwX0nNsuSc7gGnNw==" + "resolved" "https://registry.npmjs.org/@web3auth/base/-/base-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@toruslabs/http-helpers" "^3.2.0" + "@toruslabs/openlogin-jrpc" "^2.6.0" + "jwt-decode" "^3.1.2" + "loglevel" "^1.8.0" + "ts-custom-error" "^3.2.2" + +"@web3auth/core@^3.0.0": + "integrity" "sha512-OCXbv0OOxl5UCIq39Fo6II1zX9UMevufGWACMd7yo9ekxiRGulj2QUUpGJAHhTOyjSFX+ZY0sWRoqRHMPB732g==" + "resolved" "https://registry.npmjs.org/@web3auth/core/-/core-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@toruslabs/openlogin-jrpc" "^2.6.0" + "@web3auth/base" "^3.0.0" + "@web3auth/base-plugin" "^3.0.0" + +"@web3auth/ethereum-provider@^3.0.3": + "integrity" "sha512-2XYPeCfBcd0R9IOzMQyEdW+3+fkHFUod+iZKWgKVNK3cmz8FvmCuP0heHnoKL8E3OIw8pjx/+M8pMIBKPD5bMQ==" + "resolved" "https://registry.npmjs.org/@web3auth/ethereum-provider/-/ethereum-provider-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "@ethereumjs/common" "^3.0.1" + "@ethereumjs/tx" "^4.0.1" + "@ethereumjs/util" "^8.0.2" + "@metamask/eth-sig-util" "^5.0.0" + "@toruslabs/base-controllers" "^2.2.6" + "@toruslabs/http-helpers" "^3.2.0" + "@toruslabs/openlogin-jrpc" "^2.6.0" + "@walletconnect/types" "~1.8.0" + "@web3auth/base" "^3.0.0" + "@web3auth/base-provider" "^3.0.0" + "assert" "^2.0.0" + "bignumber.js" "^9.1.0" + "bn.js" "^5.2.1" + "eth-rpc-errors" "^4.0.3" + "jsonschema" "^1.4.1" + +"@web3auth/metamask-adapter@^3.0.0": + "integrity" "sha512-Wd1VSFxmE4Rpji/BocL+suGJJPTIwYwuwLrKAwB0WwZO8ECbFMsrj4z8TDwEHpEsMuhGtJVHkINEv1NGeJFF+g==" + "resolved" "https://registry.npmjs.org/@web3auth/metamask-adapter/-/metamask-adapter-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@metamask/detect-provider" "^2.0.0" + "@web3auth/base" "^3.0.0" + "@web3auth/base-evm-adapter" "^3.0.0" + +"@web3auth/openlogin-adapter@^3.0.3": + "integrity" "sha512-SP+U8DiL+MWwwRBgNLQGF+eA5qmTc+0CufTQb5owAY6CtVzwcV9hdLWqXt4ota3xmUyOipTiyDVsQ+LOPWrZkw==" + "resolved" "https://registry.npmjs.org/@web3auth/openlogin-adapter/-/openlogin-adapter-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "@toruslabs/openlogin" "^2.7.0" + "@toruslabs/openlogin-ed25519" "^2.0.0" + "@web3auth/base" "^3.0.0" + "@web3auth/base-provider" "^3.0.0" + "@web3auth/ethereum-provider" "^3.0.3" + "@web3auth/solana-provider" "^3.0.3" + "lodash.merge" "^4.6.2" + +"@web3auth/solana-provider@^3.0.3": + "integrity" "sha512-VQ9rdVitmHAqQIhlRqGkyUWzm48M6dIJagld/N7E7Vlv0sxvDM9qxCFUjnf3ATbFbwnfP0KVcYVk69PAAkUcHA==" + "resolved" "https://registry.npmjs.org/@web3auth/solana-provider/-/solana-provider-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "@solana/web3.js" "^1.66.2" + "@toruslabs/base-controllers" "^2.2.6" + "@toruslabs/openlogin-jrpc" "^2.6.0" + "@toruslabs/tweetnacl-js" "^1.0.3" + "@web3auth/base" "^3.0.0" + "@web3auth/base-provider" "^3.0.0" + "bn.js" "^5.2.1" + "bs58" "^4.0.1" + "eth-rpc-errors" "^4.0.3" + "json-rpc-random-id" "^1.0.1" + +"@web3auth/ui@^3.0.3": + "integrity" "sha512-Kms0ree8+Pz+YF3kziNey46xIj86b7GNCFjP1NdQptpnyy8ytsKmY4AWqgBoPkaH1sOYtEYUOI2gdAsz6e5QWQ==" + "resolved" "https://registry.npmjs.org/@web3auth/ui/-/ui-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "@toruslabs/openlogin" "^2.7.0" + "@toruslabs/openlogin-jrpc" "^2.6.0" + "@web3auth/base" "^3.0.0" + "bowser" "^2.11.0" + "classnames" "^2.3.2" + "i18next" "^22.0.3" + "lodash.clonedeep" "^4.5.0" + "lodash.merge" "^4.6.2" + "qr.js" "^0.0.0" + "react" "^18.2.0" + "react-dom" "^18.2.0" + "react-i18next" "^12.0.0" + "react-qr-code" "^2.0.8" + +"@web3auth/wallet-connect-v1-adapter@^3.0.3": + "integrity" "sha512-GA2KKDQQ561d9k3+APRLSa++h/AJRuFqA+M/iktDO1ivyvfQpYWFiSG4lV8XZ+HNTT4ywiB3rO8/1nBZe2sJyg==" + "resolved" "https://registry.npmjs.org/@web3auth/wallet-connect-v1-adapter/-/wallet-connect-v1-adapter-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "@walletconnect/client" "~1.8.0" + "@walletconnect/types" "~1.8.0" + "@web3auth/base" "^3.0.0" + "@web3auth/base-evm-adapter" "^3.0.0" + "@web3auth/ethereum-provider" "^3.0.3" + +"@webassemblyjs/ast@1.11.1": + "integrity" "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + "integrity" "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-api-error@1.11.1": + "integrity" "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-buffer@1.11.1": + "integrity" "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-numbers@1.11.1": + "integrity" "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + "integrity" "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-wasm-section@1.11.1": + "integrity" "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + "integrity" "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + "integrity" "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + "integrity" "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/wasm-edit@1.11.1": + "integrity" "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + "integrity" "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + "integrity" "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + "integrity" "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + "integrity" "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^1.2.0": + "integrity" "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==" + "resolved" "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz" + "version" "1.2.0" + +"@webpack-cli/info@^1.5.0": + "integrity" "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==" + "resolved" "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "envinfo" "^7.7.3" + +"@webpack-cli/serve@^1.7.0": + "integrity" "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==" + "resolved" "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz" + "version" "1.7.0" + +"@xtuc/ieee754@^1.2.0": + "integrity" "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "resolved" "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + "version" "1.2.0" + +"@xtuc/long@4.2.2": + "integrity" "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + "version" "4.2.2" + "@yarnpkg/lockfile@^1.1.0": "integrity" "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" "resolved" "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" @@ -3376,6 +4048,11 @@ "mime-types" "~2.1.34" "negotiator" "0.6.3" +"acorn-import-assertions@^1.7.6": + "integrity" "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" + "resolved" "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz" + "version" "1.8.0" + "acorn-jsx@^5.3.2": "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" @@ -3386,7 +4063,7 @@ "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" "version" "8.2.0" -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.4.1", "acorn@^8.8.0": +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8", "acorn@^8.4.1", "acorn@^8.5.0", "acorn@^8.7.1", "acorn@^8.8.0": "integrity" "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" "version" "8.8.1" @@ -3440,7 +4117,12 @@ "clean-stack" "^2.0.0" "indent-string" "^4.0.0" -"ajv@^6.10.0", "ajv@^6.12.3", "ajv@^6.12.4": +"ajv-keywords@^3.5.2": + "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + "version" "3.5.2" + +"ajv@^6.10.0", "ajv@^6.12.3", "ajv@^6.12.4", "ajv@^6.12.5", "ajv@^6.9.1": "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" "version" "6.12.6" @@ -3613,14 +4295,14 @@ "version" "1.0.0" "array-includes@^3.1.4": - "integrity" "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==" - "resolved" "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz" - "version" "3.1.5" + "integrity" "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==" + "resolved" "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" + "version" "3.1.6" dependencies: "call-bind" "^1.0.2" "define-properties" "^1.1.4" - "es-abstract" "^1.19.5" - "get-intrinsic" "^1.1.1" + "es-abstract" "^1.20.4" + "get-intrinsic" "^1.1.3" "is-string" "^1.0.7" "array-union@^2.1.0": @@ -3643,7 +4325,7 @@ "es-abstract" "^1.20.4" "es-shim-unscopables" "^1.0.0" -"array.prototype.reduce@^1.0.4": +"array.prototype.reduce@^1.0.5": "integrity" "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==" "resolved" "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz" "version" "1.0.5" @@ -3691,6 +4373,16 @@ "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" "version" "1.0.0" +"assert@^2.0.0": + "integrity" "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==" + "resolved" "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "es6-object-assign" "^1.1.0" + "is-nan" "^1.2.1" + "object-is" "^1.0.1" + "util" "^0.12.0" + "assertion-error@^1.1.0": "integrity" "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" "resolved" "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" @@ -3720,6 +4412,13 @@ dependencies: "tslib" "^2.0.0" +"async-mutex@^0.3.2": + "integrity" "sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==" + "resolved" "https://registry.npmjs.org/async-mutex/-/async-mutex-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "tslib" "^2.3.1" + "async@^1.4.2": "integrity" "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" @@ -3737,6 +4436,11 @@ "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" "version" "3.2.4" +"async@^3.2.4": + "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + "version" "3.2.4" + "async@1.x": "integrity" "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" @@ -3913,6 +4617,13 @@ "resolved" "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" "version" "2.2.3" +"bigint-buffer@^1.1.5": + "integrity" "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==" + "resolved" "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "bindings" "^1.3.0" + "bigint-crypto-utils@^3.0.23": "integrity" "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==" "resolved" "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz" @@ -3925,7 +4636,7 @@ "resolved" "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz" "version" "3.1.2" -"bignumber.js@*", "bignumber.js@^9.0.0", "bignumber.js@^9.0.1": +"bignumber.js@*", "bignumber.js@^9.0.0", "bignumber.js@^9.0.1", "bignumber.js@^9.0.2", "bignumber.js@^9.1.0": "integrity" "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==" "resolved" "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz" "version" "9.1.0" @@ -3947,6 +4658,20 @@ "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" "version" "2.2.0" +"bindings@^1.3.0", "bindings@^1.5.0": + "integrity" "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==" + "resolved" "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "file-uri-to-path" "1.0.0" + +"bip66@^1.1.5": + "integrity" "sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==" + "resolved" "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "safe-buffer" "^5.0.1" + "bitsyntax@~0.1.0": "integrity" "sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q==" "resolved" "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz" @@ -3975,40 +4700,35 @@ "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" "version" "3.7.2" -"bn.js@^4.0.0", "bn.js@^4.1.0", "bn.js@^4.11.0", "bn.js@^4.11.6", "bn.js@^4.11.8", "bn.js@^4.11.9": +"bn.js@^4.0.0": "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" "version" "4.12.0" -"bn.js@^4.11.1", "bn.js@^4.4.0": - "version" "4.11.9" - -"bn.js@^5.0.0": - "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - "version" "5.2.1" +"bn.js@^4.1.0": + "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + "version" "4.12.0" -"bn.js@^5.1.1": - "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - "version" "5.2.1" +"bn.js@^4.11.0", "bn.js@^4.11.8": + "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + "version" "4.12.0" -"bn.js@^5.1.2": - "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - "version" "5.2.1" +"bn.js@^4.11.1", "bn.js@^4.4.0": + "version" "4.11.9" -"bn.js@^5.1.3": - "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - "version" "5.2.1" +"bn.js@^4.11.6": + "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + "version" "4.12.0" -"bn.js@^5.2.0": - "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - "version" "5.2.1" +"bn.js@^4.11.9": + "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + "version" "4.12.0" -"bn.js@^5.2.1": +"bn.js@^5.0.0", "bn.js@^5.1.1", "bn.js@^5.1.2", "bn.js@^5.1.3", "bn.js@^5.2.0", "bn.js@^5.2.1": "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" "version" "5.2.1" @@ -4018,6 +4738,11 @@ "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" "version" "4.11.6" +"bn.js@4.11.8": + "integrity" "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz" + "version" "4.11.8" + "body-parser@^1.16.0", "body-parser@1.20.1": "integrity" "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==" "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" @@ -4036,6 +4761,20 @@ "type-is" "~1.6.18" "unpipe" "1.0.0" +"borsh@^0.7.0": + "integrity" "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==" + "resolved" "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz" + "version" "0.7.0" + dependencies: + "bn.js" "^5.2.0" + "bs58" "^4.0.0" + "text-encoding-utf-8" "^1.0.2" + +"bowser@^2.11.0": + "integrity" "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + "resolved" "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" + "version" "2.11.0" + "brace-expansion@^1.1.7": "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -4078,7 +4817,7 @@ "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" "version" "1.3.1" -"browserify-aes@^1.0.0", "browserify-aes@^1.0.4", "browserify-aes@^1.2.0": +"browserify-aes@^1.0.0", "browserify-aes@^1.0.4", "browserify-aes@^1.0.6", "browserify-aes@^1.2.0": "integrity" "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==" "resolved" "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" "version" "1.2.0" @@ -4132,7 +4871,7 @@ "readable-stream" "^3.6.0" "safe-buffer" "^5.2.0" -"browserslist@^4.21.3", "browserslist@^4.21.4", "browserslist@>= 4.21.0": +"browserslist@^4.14.5", "browserslist@^4.21.3", "browserslist@^4.21.4", "browserslist@>= 4.21.0": "integrity" "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" "version" "4.21.4" @@ -4142,7 +4881,7 @@ "node-releases" "^2.0.6" "update-browserslist-db" "^1.0.9" -"bs58@^4.0.0": +"bs58@^4.0.0", "bs58@^4.0.1": "integrity" "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==" "resolved" "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" "version" "4.0.1" @@ -4170,12 +4909,30 @@ "resolved" "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz" "version" "1.2.1" +"buffer-alloc-unsafe@^1.1.0": + "integrity" "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + "resolved" "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" + "version" "1.1.0" + +"buffer-alloc@^1.2.0": + "integrity" "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==" + "resolved" "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "buffer-alloc-unsafe" "^1.1.0" + "buffer-fill" "^1.0.0" + "buffer-equal-constant-time@1.0.1": "integrity" "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" "resolved" "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" "version" "1.0.1" -"buffer-from@^1.0.0": +"buffer-fill@^1.0.0": + "integrity" "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" + "resolved" "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" + "version" "1.0.0" + +"buffer-from@^1.0.0", "buffer-from@^1.1.1": "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" "version" "1.1.2" @@ -4195,7 +4952,7 @@ "resolved" "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" "version" "1.0.3" -"buffer@^5.0.5", "buffer@^5.5.0", "buffer@^5.6.0": +"buffer@^5.0.5", "buffer@^5.4.3", "buffer@^5.5.0", "buffer@^5.6.0": "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" "version" "5.7.1" @@ -4211,7 +4968,30 @@ "base64-js" "^1.3.1" "ieee754" "^1.2.1" -"bufferutil@^4.0.1", "bufferutil@4.0.5": +"buffer@~6.0.3": + "integrity" "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + "version" "6.0.3" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.2.1" + +"buffer@6.0.1": + "integrity" "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.2.1" + +"bufferutil@^4.0.1": + "integrity" "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==" + "resolved" "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz" + "version" "4.0.7" + dependencies: + "node-gyp-build" "^4.3.0" + +"bufferutil@4.0.5": "integrity" "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==" "resolved" "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz" "version" "4.0.5" @@ -4223,6 +5003,11 @@ "resolved" "https://registry.npmjs.org/bufio/-/bufio-1.1.3.tgz" "version" "1.1.3" +"builtin-modules@^1.1.1": + "integrity" "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==" + "resolved" "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" + "version" "1.1.1" + "builtins@^1.0.3": "integrity" "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" "resolved" "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" @@ -4350,9 +5135,9 @@ "version" "6.3.0" "caniuse-lite@^1.0.30001400": - "integrity" "sha512-IB1BXTZKPDVPM7cnV4iaKaHxckvdr/3xtctB3f7Hmenx3qYBhGtTZ//7EllK66aKXW98Lx0+7Yr0kxBtIt3tzg==" - "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001430.tgz" - "version" "1.0.30001430" + "integrity" "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz" + "version" "1.0.30001431" "caseless@^0.12.0", "caseless@~0.12.0": "integrity" "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" @@ -4404,13 +5189,13 @@ "version" "1.5.0" "chai@^4.1.2", "chai@^4.2.0", "chai@^4.3.4", "chai@^4.3.6", "chai@>= 2.1.2 < 5": - "integrity" "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==" - "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz" - "version" "4.3.6" + "integrity" "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==" + "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz" + "version" "4.3.7" dependencies: "assertion-error" "^1.1.0" "check-error" "^1.0.2" - "deep-eql" "^3.0.1" + "deep-eql" "^4.1.2" "get-func-name" "^2.0.0" "loupe" "^2.3.1" "pathval" "^1.1.1" @@ -4425,6 +5210,15 @@ "escape-string-regexp" "^1.0.5" "supports-color" "^5.3.0" +"chalk@^2.3.0": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + "chalk@^2.4.1": "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" @@ -4526,6 +5320,11 @@ "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" "version" "2.0.0" +"chrome-trace-event@^1.0.2": + "integrity" "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + "resolved" "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + "version" "1.0.3" + "ci-info@^2.0.0": "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" @@ -4576,6 +5375,11 @@ "napi-macros" "~2.0.0" "node-gyp-build" "^4.3.0" +"classnames@^2.3.2": + "integrity" "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + "resolved" "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" + "version" "2.3.2" + "clean-stack@^2.0.0": "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" @@ -4728,7 +5532,7 @@ "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" "version" "1.1.3" -"colorette@^2.0.16": +"colorette@^2.0.14", "colorette@^2.0.16": "integrity" "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" "version" "2.0.19" @@ -4778,6 +5582,16 @@ "table-layout" "^1.0.2" "typical" "^5.2.0" +"commander@^2.12.1", "commander@^2.20.0", "commander@^2.20.3": + "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + "version" "2.20.3" + +"commander@^7.0.0": + "integrity" "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + "resolved" "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + "version" "7.2.0" + "commander@^8.1.0": "integrity" "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" "resolved" "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" @@ -4987,6 +5801,13 @@ "resolved" "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz" "version" "2.1.3" +"copy-to-clipboard@^3.3.1": + "integrity" "sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg==" + "resolved" "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.2.tgz" + "version" "3.3.2" + dependencies: + "toggle-selection" "^1.0.6" + "core-js-compat@^3.25.1": "integrity" "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==" "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz" @@ -5121,6 +5942,11 @@ "randombytes" "^2.0.0" "randomfill" "^1.0.3" +"csstype@^3.0.2": + "integrity" "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz" + "version" "3.1.1" + "d@^1.0.1", "d@1": "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==" "resolved" "https://registry.npmjs.org/d/-/d-1.0.1.tgz" @@ -5177,7 +6003,7 @@ dependencies: "ms" "^2.1.1" -"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@^4.3.2", "debug@^4.3.3", "debug@^4.3.4", "debug@4", "debug@4.3.4": +"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@^4.3.2", "debug@^4.3.3", "debug@^4.3.4", "debug@~4.3.1", "debug@~4.3.2", "debug@4", "debug@4.3.4": "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" "version" "4.3.4" @@ -5259,17 +6085,10 @@ "resolved" "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" "version" "0.7.0" -"deep-eql@^3.0.1": - "integrity" "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==" - "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "type-detect" "^4.0.0" - -"deep-eql@^4.0.1": - "integrity" "sha512-rc6HkZswtl+KMi/IODZ8k7C/P37clC2Rf1HYI11GqdbgvggIyHjsU5MdjlTlaP6eu24c0sR3mcW2SqsVZ1sXUw==" - "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.1.tgz" - "version" "4.1.1" +"deep-eql@^4.0.1", "deep-eql@^4.1.2": + "integrity" "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==" + "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz" + "version" "4.1.2" dependencies: "type-detect" "^4.0.0" @@ -5325,6 +6144,11 @@ "has-property-descriptors" "^1.0.0" "object-keys" "^1.1.1" +"delay@^5.0.0": + "integrity" "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==" + "resolved" "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz" + "version" "5.0.0" + "delayed-stream@~1.0.0": "integrity" "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" @@ -5363,6 +6187,11 @@ "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" "version" "1.2.0" +"detect-browser@5.2.0": + "integrity" "sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA==" + "resolved" "https://registry.npmjs.org/detect-browser/-/detect-browser-5.2.0.tgz" + "version" "5.2.0" + "detect-indent@^5.0.0": "integrity" "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==" "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" @@ -5378,6 +6207,11 @@ "resolved" "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" "version" "3.1.0" +"detect-node@2.1.0": + "integrity" "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + "resolved" "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + "version" "2.1.0" + "detect-port@^1.3.0": "integrity" "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==" "resolved" "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz" @@ -5423,6 +6257,11 @@ "miller-rabin" "^4.0.0" "randombytes" "^2.0.0" +"dijkstrajs@^1.0.1": + "integrity" "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" + "resolved" "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz" + "version" "1.0.2" + "dir-glob@^3.0.1": "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" @@ -5468,6 +6307,15 @@ "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" "version" "10.0.0" +"drbg.js@^1.0.1": + "integrity" "sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==" + "resolved" "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "browserify-aes" "^1.0.6" + "create-hash" "^1.1.2" + "create-hmac" "^1.1.4" + "duplexer@^0.1.1": "integrity" "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" "resolved" "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" @@ -5577,6 +6425,30 @@ dependencies: "once" "^1.4.0" +"engine.io-client@~6.2.3": + "integrity" "sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw==" + "resolved" "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.3.tgz" + "version" "6.2.3" + dependencies: + "@socket.io/component-emitter" "~3.1.0" + "debug" "~4.3.1" + "engine.io-parser" "~5.0.3" + "ws" "~8.2.3" + "xmlhttprequest-ssl" "~2.0.0" + +"engine.io-parser@~5.0.3": + "integrity" "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==" + "resolved" "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz" + "version" "5.0.4" + +"enhanced-resolve@^5.10.0": + "integrity" "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==" + "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz" + "version" "5.10.0" + dependencies: + "graceful-fs" "^4.2.4" + "tapable" "^2.2.0" + "enquirer@^2.3.0", "enquirer@^2.3.6", "enquirer@>= 2.3.0 < 3", "enquirer@~2.3.6": "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" @@ -5589,7 +6461,7 @@ "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" "version" "2.2.1" -"envinfo@^7.7.4": +"envinfo@^7.7.3", "envinfo@^7.7.4": "integrity" "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" "resolved" "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" "version" "7.8.1" @@ -5613,7 +6485,7 @@ dependencies: "is-arrayish" "^0.2.1" -"es-abstract@^1.19.0", "es-abstract@^1.19.1", "es-abstract@^1.19.5", "es-abstract@^1.20.1", "es-abstract@^1.20.4": +"es-abstract@^1.19.0", "es-abstract@^1.20.4": "integrity" "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==" "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz" "version" "1.20.4" @@ -5648,6 +6520,11 @@ "resolved" "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" "version" "1.0.0" +"es-module-lexer@^0.9.0": + "integrity" "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "resolved" "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" + "version" "0.9.3" + "es-shim-unscopables@^1.0.0": "integrity" "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==" "resolved" "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" @@ -5682,11 +6559,23 @@ "es5-ext" "^0.10.35" "es6-symbol" "^3.1.1" -"es6-promise@^4.2.8": +"es6-object-assign@^1.1.0": + "integrity" "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==" + "resolved" "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz" + "version" "1.1.0" + +"es6-promise@^4.0.3", "es6-promise@^4.2.8": "integrity" "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" "resolved" "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" "version" "4.2.8" +"es6-promisify@^5.0.0": + "integrity" "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==" + "resolved" "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "es6-promise" "^4.0.3" + "es6-symbol@^3.1.1", "es6-symbol@^3.1.3": "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==" "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" @@ -5783,7 +6672,7 @@ dependencies: "prettier-linter-helpers" "^1.0.0" -"eslint-scope@^5.1.1": +"eslint-scope@^5.1.1", "eslint-scope@5.1.1": "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" "version" "5.1.1" @@ -5817,9 +6706,9 @@ "version" "3.3.0" "eslint@*", "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^8.12.0", "eslint@>=5", "eslint@>=7.0.0", "eslint@>=7.28.0": - "integrity" "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz" - "version" "8.26.0" + "integrity" "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz" + "version" "8.27.0" dependencies: "@eslint/eslintrc" "^1.3.3" "@humanwhocodes/config-array" "^0.11.6" @@ -5862,9 +6751,9 @@ "text-table" "^0.2.0" "espree@^9.4.0": - "integrity" "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==" - "resolved" "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz" - "version" "9.4.0" + "integrity" "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==" + "resolved" "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" + "version" "9.4.1" dependencies: "acorn" "^8.8.0" "acorn-jsx" "^5.3.2" @@ -6035,14 +6924,7 @@ dependencies: "fast-safe-stringify" "^2.0.6" -"eth-rpc-errors@^4.0.2": - "integrity" "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==" - "resolved" "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "fast-safe-stringify" "^2.0.6" - -"eth-rpc-errors@^4.0.3": +"eth-rpc-errors@^4.0.2", "eth-rpc-errors@^4.0.3": "integrity" "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==" "resolved" "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz" "version" "4.0.3" @@ -6105,6 +6987,16 @@ "@scure/bip32" "1.1.0" "@scure/bip39" "1.1.0" +"ethereum-cryptography@^1.1.2": + "integrity" "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==" + "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "@noble/hashes" "1.1.2" + "@noble/secp256k1" "1.6.3" + "@scure/bip32" "1.1.0" + "@scure/bip39" "1.1.0" + "ethereum-cryptography@1.1.2": "integrity" "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==" "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" @@ -6411,12 +7303,17 @@ "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" "version" "4.0.7" +"eventemitter3@^4.0.7": + "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + "version" "4.0.7" + "eventemitter3@4.0.4": "integrity" "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" "version" "4.0.4" -"events@^3.0.0", "events@^3.3.0": +"events@^3.0.0", "events@^3.2.0", "events@^3.3.0": "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" "version" "3.3.0" @@ -6541,6 +7438,11 @@ "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" "version" "1.3.0" +"eyes@^0.1.8": + "integrity" "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==" + "resolved" "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz" + "version" "0.1.8" + "fake-merkle-patricia-tree@^1.0.1": "integrity" "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==" "resolved" "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz" @@ -6595,6 +7497,16 @@ "resolved" "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" "version" "2.1.1" +"fast-stable-stringify@^1.0.0": + "integrity" "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==" + "resolved" "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz" + "version" "1.0.0" + +"fastest-levenshtein@^1.0.12": + "integrity" "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==" + "resolved" "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" + "version" "1.0.16" + "fastq@^1.6.0": "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==" "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" @@ -6623,6 +7535,11 @@ dependencies: "flat-cache" "^3.0.4" +"file-uri-to-path@1.0.0": + "integrity" "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + "resolved" "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" + "version" "1.0.0" + "filelist@^1.0.1": "integrity" "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==" "resolved" "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" @@ -7160,6 +8077,11 @@ dependencies: "is-glob" "^4.0.3" +"glob-to-regexp@^0.4.1": + "integrity" "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + "version" "0.4.1" + "glob@^5.0.15": "integrity" "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==" "resolved" "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" @@ -7171,7 +8093,7 @@ "once" "^1.3.0" "path-is-absolute" "^1.0.0" -"glob@^7.0.0", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6": +"glob@^7.0.0", "glob@^7.1.1", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6": "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" "version" "7.2.3" @@ -7352,7 +8274,7 @@ "to-readable-stream" "^1.0.0" "url-parse-lax" "^3.0.0" -"graceful-fs@^4.1.11", "graceful-fs@^4.1.15", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.1.9", "graceful-fs@^4.2.0", "graceful-fs@^4.2.6", "graceful-fs@^4.2.9": +"graceful-fs@^4.1.11", "graceful-fs@^4.1.15", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.1.9", "graceful-fs@^4.2.0", "graceful-fs@^4.2.4", "graceful-fs@^4.2.6", "graceful-fs@^4.2.9": "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" "version" "4.2.10" @@ -7623,6 +8545,13 @@ "resolved" "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" "version" "2.0.2" +"html-parse-stringify@^3.0.1": + "integrity" "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==" + "resolved" "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "void-elements" "3.1.0" + "http-basic@^8.1.1": "integrity" "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==" "resolved" "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz" @@ -7720,6 +8649,13 @@ "resolved" "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz" "version" "7.0.4" +"i18next@^22.0.3", "i18next@>= 19.0.0": + "integrity" "sha512-TOp7BTMKDbUkOHMzDlVsCYWpyaFkKakrrO3HNXfSz4EeJaWwnBScRmgQSTaWHScXVHBUFXTvShrCW8uryBYFcg==" + "resolved" "https://registry.npmjs.org/i18next/-/i18next-22.0.4.tgz" + "version" "22.0.4" + dependencies: + "@babel/runtime" "^7.17.2" + "iconv-lite@^0.4.24", "iconv-lite@0.4.24": "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" @@ -7817,6 +8753,11 @@ "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" "version" "2.0.4" +"inherits@2.0.3": + "integrity" "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "version" "2.0.3" + "ini@^1.3.2", "ini@^1.3.4", "ini@^1.3.5": "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" @@ -7870,6 +8811,11 @@ "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" "version" "1.4.0" +"interpret@^2.2.0": + "integrity" "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" + "resolved" "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz" + "version" "2.2.0" + "invert-kv@^2.0.0": "integrity" "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" "resolved" "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz" @@ -8027,6 +8973,14 @@ "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" "version" "1.0.1" +"is-nan@^1.2.1": + "integrity" "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==" + "resolved" "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "call-bind" "^1.0.0" + "define-properties" "^1.1.3" + "is-negative-zero@^2.0.2": "integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" @@ -8108,7 +9062,7 @@ "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" "version" "1.1.0" -"is-stream@^2.0.0", "is-stream@^2.0.1": +"is-stream@^2.0.0": "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" "version" "2.0.1" @@ -8145,7 +9099,7 @@ "gopd" "^1.0.1" "has-tostringtag" "^1.0.0" -"is-typedarray@^1.0.0", "is-typedarray@~1.0.0": +"is-typedarray@^1.0.0", "is-typedarray@~1.0.0", "is-typedarray@1.0.0": "integrity" "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" "version" "1.0.0" @@ -8169,6 +9123,11 @@ dependencies: "is-docker" "^2.0.0" +"isarray@^2.0.1": + "integrity" "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + "version" "2.0.5" + "isarray@~1.0.0": "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" @@ -8189,6 +9148,11 @@ "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" "version" "3.0.1" +"isomorphic-ws@^4.0.1": + "integrity" "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" + "resolved" "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" + "version" "4.0.1" + "isomorphic-ws@^5.0.0": "integrity" "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==" "resolved" "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz" @@ -8251,6 +9215,25 @@ "filelist" "^1.0.1" "minimatch" "^3.0.4" +"jayson@^3.4.4": + "integrity" "sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==" + "resolved" "https://registry.npmjs.org/jayson/-/jayson-3.7.0.tgz" + "version" "3.7.0" + dependencies: + "@types/connect" "^3.4.33" + "@types/node" "^12.12.54" + "@types/ws" "^7.4.4" + "commander" "^2.20.3" + "delay" "^5.0.0" + "es6-promisify" "^5.0.0" + "eyes" "^0.1.8" + "isomorphic-ws" "^4.0.1" + "json-stringify-safe" "^5.0.1" + "JSONStream" "^1.3.5" + "lodash" "^4.17.20" + "uuid" "^8.3.2" + "ws" "^7.4.5" + "jest-changed-files@^28.1.3": "integrity" "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==" "resolved" "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz" @@ -8590,6 +9573,15 @@ "jest-util" "^28.1.3" "string-length" "^4.0.1" +"jest-worker@^27.4.5": + "integrity" "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + "version" "27.5.1" + dependencies: + "@types/node" "*" + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" + "jest-worker@^28.1.3": "integrity" "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==" "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" @@ -8624,7 +9616,7 @@ "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" "version" "0.5.7" -"js-tokens@^4.0.0": +"js-tokens@^3.0.0 || ^4.0.0", "js-tokens@^4.0.0": "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" "version" "4.0.0" @@ -8801,12 +9793,12 @@ "resolved" "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" "version" "1.3.1" -"jsonschema@^1.2.4": +"jsonschema@^1.2.4", "jsonschema@^1.4.1": "integrity" "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==" "resolved" "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz" "version" "1.4.1" -"JSONStream@^1.0.4": +"JSONStream@^1.0.4", "JSONStream@^1.3.5": "integrity" "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==" "resolved" "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" "version" "1.3.5" @@ -8867,6 +9859,11 @@ "jwa" "^1.4.1" "safe-buffer" "^5.0.1" +"jwt-decode@^3.1.2": + "integrity" "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + "resolved" "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz" + "version" "3.1.2" + "keccak@^3.0.0", "keccak@^3.0.2", "keccak@3.0.2": "integrity" "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==" "resolved" "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz" @@ -8877,9 +9874,9 @@ "readable-stream" "^3.6.0" "keyv@*", "keyv@^4.0.0": - "integrity" "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==" - "resolved" "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz" - "version" "4.5.0" + "integrity" "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==" + "resolved" "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz" + "version" "4.5.2" dependencies: "json-buffer" "3.0.1" @@ -8890,6 +9887,11 @@ dependencies: "json-buffer" "3.0.0" +"keyvaluestorage-interface@^1.0.0": + "integrity" "sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==" + "resolved" "https://registry.npmjs.org/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz" + "version" "1.0.0" + "kind-of@^6.0.2", "kind-of@^6.0.3": "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" @@ -9141,6 +10143,11 @@ "strip-bom" "^4.0.0" "type-fest" "^0.6.0" +"loader-runner@^4.2.0": + "integrity" "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + "version" "4.3.0" + "locate-path@^2.0.0": "integrity" "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==" "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" @@ -9176,6 +10183,11 @@ "resolved" "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" "version" "4.3.0" +"lodash.clonedeep@^4.5.0": + "integrity" "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + "resolved" "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" + "version" "4.5.0" + "lodash.debounce@^4.0.8": "integrity" "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" @@ -9226,7 +10238,7 @@ "resolved" "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" "version" "4.1.1" -"lodash@^4.17.11", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.19", "lodash@^4.17.21": +"lodash@^4.17.11", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.19", "lodash@^4.17.20", "lodash@^4.17.21": "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" "version" "4.17.21" @@ -9266,10 +10278,17 @@ "resolved" "https://registry.npmjs.org/long/-/long-4.0.0.tgz" "version" "4.0.0" +"loose-envify@^1.1.0", "loose-envify@^1.4.0": + "integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==" + "resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "js-tokens" "^3.0.0 || ^4.0.0" + "loupe@^2.3.1": - "integrity" "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==" - "resolved" "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" - "version" "2.3.4" + "integrity" "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==" + "resolved" "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz" + "version" "2.3.6" dependencies: "get-func-name" "^2.0.0" @@ -9543,7 +10562,7 @@ "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" "version" "1.52.0" -"mime-types@^2.1.12", "mime-types@^2.1.16", "mime-types@~2.1.19", "mime-types@~2.1.24", "mime-types@~2.1.34": +"mime-types@^2.1.12", "mime-types@^2.1.16", "mime-types@^2.1.27", "mime-types@~2.1.19", "mime-types@~2.1.24", "mime-types@~2.1.34": "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" "version" "2.1.35" @@ -9758,6 +10777,13 @@ dependencies: "minimist" "^1.2.6" +"mkdirp@^0.5.3": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" + dependencies: + "minimist" "^1.2.6" + "mkdirp@^0.5.5": "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" @@ -9973,6 +10999,11 @@ "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" "version" "0.0.8" +"nan@^2.14.0", "nan@^2.14.2": + "integrity" "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" + "resolved" "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz" + "version" "2.17.0" + "nano-json-stream-parser@^0.1.2": "integrity" "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" "resolved" "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz" @@ -10008,7 +11039,7 @@ "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" "version" "0.6.3" -"neo-async@^2.6.0": +"neo-async@^2.6.0", "neo-async@^2.6.2": "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" "version" "2.6.2" @@ -10058,7 +11089,7 @@ "object.getownpropertydescriptors" "^2.0.3" "semver" "^5.7.0" -"node-fetch@^2.6.0", "node-fetch@^2.6.1", "node-fetch@^2.6.6", "node-fetch@^2.6.7", "node-fetch@2.6.7": +"node-fetch@^2.6.0", "node-fetch@^2.6.1", "node-fetch@^2.6.6", "node-fetch@^2.6.7", "node-fetch@2", "node-fetch@2.6.7": "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" "version" "2.6.7" @@ -10307,13 +11338,13 @@ "bn.js" "4.11.6" "strip-hex-prefix" "1.0.0" -"nx@^15.0.8", "nx@>= 14 <= 16", "nx@>=14.8.1 < 16", "nx@15.0.8": - "integrity" "sha512-LywcMYwZ3acEoRccUq3WBYbfeX+uGm8dyQjVLFPC1caziYZTpvQCb/BtZgLVXpZKexa2wYDXDkHuhb2pcaYcYw==" - "resolved" "https://registry.npmjs.org/nx/-/nx-15.0.8.tgz" - "version" "15.0.8" +"nx@^15.0.11", "nx@>= 14 <= 16", "nx@>=14.8.1 < 16", "nx@15.0.11": + "integrity" "sha512-4qmzj6wE2RJXyy3p/X33cisl4yYgUUvXZ6yUYbt1zxWdInYYse61yqyRR91jwLeKpgxL7plkIC5rPiqg4kNJDQ==" + "resolved" "https://registry.npmjs.org/nx/-/nx-15.0.11.tgz" + "version" "15.0.11" dependencies: - "@nrwl/cli" "15.0.8" - "@nrwl/tao" "15.0.8" + "@nrwl/cli" "15.0.11" + "@nrwl/tao" "15.0.11" "@parcel/watcher" "2.0.4" "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "^3.0.0-rc.18" @@ -10345,8 +11376,8 @@ "tsconfig-paths" "^3.9.0" "tslib" "^2.3.0" "v8-compile-cache" "2.3.0" - "yargs" "^17.4.0" - "yargs-parser" "21.0.1" + "yargs" "^17.6.2" + "yargs-parser" "21.1.1" "oauth-sign@~0.9.0": "integrity" "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" @@ -10363,6 +11394,14 @@ "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" "version" "1.12.2" +"object-is@^1.0.1": + "integrity" "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==" + "resolved" "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "object-keys@^1.0.11", "object-keys@^1.1.1": "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" @@ -10394,29 +11433,34 @@ "object-keys" "^1.0.11" "object.getownpropertydescriptors@^2.0.3": - "integrity" "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==" - "resolved" "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz" - "version" "2.1.4" + "integrity" "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==" + "resolved" "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz" + "version" "2.1.5" dependencies: - "array.prototype.reduce" "^1.0.4" + "array.prototype.reduce" "^1.0.5" "call-bind" "^1.0.2" "define-properties" "^1.1.4" - "es-abstract" "^1.20.1" + "es-abstract" "^1.20.4" "object.values@^1.1.5": - "integrity" "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==" - "resolved" "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz" - "version" "1.1.5" + "integrity" "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==" + "resolved" "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" + "version" "1.1.6" dependencies: "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - "es-abstract" "^1.19.1" + "define-properties" "^1.1.4" + "es-abstract" "^1.20.4" "obliterator@^2.0.0": "integrity" "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" "resolved" "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" "version" "2.0.4" +"oblivious-set@1.1.1": + "integrity" "sha512-Oh+8fK09mgGmAshFdH6hSVco6KZmd1tTwNFWj35OvzdmJTMZtAkbn05zar2iG3v6sDs1JLEtOiBGNb6BHwkb2w==" + "resolved" "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.1.1.tgz" + "version" "1.1.1" + "oboe@2.1.5": "integrity" "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==" "resolved" "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz" @@ -10805,6 +11849,14 @@ "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" "version" "4.0.0" +"path@^0.12.7": + "integrity" "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==" + "resolved" "https://registry.npmjs.org/path/-/path-0.12.7.tgz" + "version" "0.12.7" + dependencies: + "process" "^0.11.1" + "util" "^0.10.3" + "pathval@^1.1.1": "integrity" "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" "resolved" "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" @@ -10873,6 +11925,16 @@ dependencies: "find-up" "^4.0.0" +"pngjs@^3.3.0": + "integrity" "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + "resolved" "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz" + "version" "3.4.0" + +"preact@10.4.1": + "integrity" "sha512-WKrRpCSwL2t3tpOOGhf2WfTpcmbpxaWtDbdJdKdjd0aEiTkvOmS4NBkG6kzlaAHI9AkQ3iVqbFWM3Ei7mZ4o1Q==" + "resolved" "https://registry.npmjs.org/preact/-/preact-10.4.1.tgz" + "version" "10.4.1" + "precond@0.2": "integrity" "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==" "resolved" "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz" @@ -10925,7 +11987,7 @@ "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" "version" "2.0.1" -"process@^0.11.10": +"process@^0.11.1", "process@^0.11.10": "integrity" "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" "version" "0.11.10" @@ -10983,6 +12045,15 @@ dependencies: "read" "1" +"prop-types@^15.8.1": + "integrity" "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==" + "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" + "version" "15.8.1" + dependencies: + "loose-envify" "^1.4.0" + "object-assign" "^4.1.1" + "react-is" "^16.13.1" + "propagate@^2.0.0": "integrity" "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" "resolved" "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz" @@ -11075,6 +12146,24 @@ "resolved" "https://registry.npmjs.org/q/-/q-1.5.1.tgz" "version" "1.5.1" +"qr.js@^0.0.0", "qr.js@0.0.0": + "integrity" "sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==" + "resolved" "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz" + "version" "0.0.0" + +"qrcode@1.4.4": + "integrity" "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==" + "resolved" "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz" + "version" "1.4.4" + dependencies: + "buffer" "^5.4.3" + "buffer-alloc" "^1.2.0" + "buffer-from" "^1.1.1" + "dijkstrajs" "^1.0.1" + "isarray" "^2.0.1" + "pngjs" "^3.3.0" + "yargs" "^13.2.4" + "qs@^6.4.0", "qs@^6.7.0", "qs@^6.9.4", "qs@6.11.0": "integrity" "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==" "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" @@ -11096,6 +12185,15 @@ "object-assign" "^4.1.0" "strict-uri-encode" "^1.0.0" +"query-string@6.13.5": + "integrity" "sha512-svk3xg9qHR39P3JlHuD7g3nRnyay5mHbrPctEBDUxUkHRifPHXJDhBUycdCC0NBjXoDf44Gb+IsOZL1Uwn8M/Q==" + "resolved" "https://registry.npmjs.org/query-string/-/query-string-6.13.5.tgz" + "version" "6.13.5" + dependencies: + "decode-uri-component" "^0.2.0" + "split-on-first" "^1.0.0" + "strict-uri-encode" "^2.0.0" + "querystringify@^2.1.1": "integrity" "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" "resolved" "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" @@ -11149,11 +12247,47 @@ "iconv-lite" "0.4.24" "unpipe" "1.0.0" +"react-dom@^18.2.0": + "integrity" "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==" + "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" + "version" "18.2.0" + dependencies: + "loose-envify" "^1.1.0" + "scheduler" "^0.23.0" + +"react-i18next@^12.0.0": + "integrity" "sha512-/O7N6aIEAl1FaWZBNvhdIo9itvF/MO/nRKr9pYqRc9LhuC1u21SlfwpiYQqvaeNSEW3g3qUXLREOWMt+gxrWbg==" + "resolved" "https://registry.npmjs.org/react-i18next/-/react-i18next-12.0.0.tgz" + "version" "12.0.0" + dependencies: + "@babel/runtime" "^7.14.5" + "html-parse-stringify" "^3.0.1" + +"react-is@^16.13.1": + "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + "version" "16.13.1" + "react-is@^18.0.0": "integrity" "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" "resolved" "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" "version" "18.2.0" +"react-qr-code@^2.0.8": + "integrity" "sha512-zYO9EAPQU8IIeD6c6uAle7NlKOiVKs8ji9hpbWPTGxO+FLqBN2on+XCXQvnhm91nrRd306RvNXUkUNcXXSfhWA==" + "resolved" "https://registry.npmjs.org/react-qr-code/-/react-qr-code-2.0.8.tgz" + "version" "2.0.8" + dependencies: + "prop-types" "^15.8.1" + "qr.js" "0.0.0" + +"react@^16.x || ^17.x || ^18.x", "react@^18.2.0", "react@>= 16.8.0": + "integrity" "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==" + "resolved" "https://registry.npmjs.org/react/-/react-18.2.0.tgz" + "version" "18.2.0" + dependencies: + "loose-envify" "^1.1.0" + "read-cmd-shim@^3.0.0": "integrity" "sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==" "resolved" "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz" @@ -11342,6 +12476,13 @@ dependencies: "resolve" "^1.1.6" +"rechoir@^0.7.0": + "integrity" "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==" + "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz" + "version" "0.7.1" + dependencies: + "resolve" "^1.9.0" + "recursive-readdir@^2.2.2": "integrity" "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==" "resolved" "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz" @@ -11489,7 +12630,7 @@ "resolved" "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" "version" "1.1.0" -"resolve@^1.1.6", "resolve@^1.10.0", "resolve@^1.14.2", "resolve@^1.20.0", "resolve@^1.22.0", "resolve@^1.8.1": +"resolve@^1.1.6", "resolve@^1.10.0", "resolve@^1.14.2", "resolve@^1.20.0", "resolve@^1.22.0", "resolve@^1.3.2", "resolve@^1.8.1", "resolve@^1.9.0": "integrity" "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" "version" "1.22.1" @@ -11576,6 +12717,19 @@ dependencies: "bn.js" "^5.2.0" +"rpc-websockets@^7.5.0": + "integrity" "sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ==" + "resolved" "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.0.tgz" + "version" "7.5.0" + dependencies: + "@babel/runtime" "^7.17.2" + "eventemitter3" "^4.0.7" + "uuid" "^8.3.2" + "ws" "^8.5.0" + optionalDependencies: + "bufferutil" "^4.0.1" + "utf-8-validate" "^5.0.2" + "run-async@^2.4.0": "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" @@ -11663,6 +12817,22 @@ "which" "^1.1.1" "wordwrap" "^1.0.0" +"scheduler@^0.23.0": + "integrity" "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==" + "resolved" "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" + "version" "0.23.0" + dependencies: + "loose-envify" "^1.1.0" + +"schema-utils@^3.1.0", "schema-utils@^3.1.1": + "integrity" "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "@types/json-schema" "^7.0.8" + "ajv" "^6.12.5" + "ajv-keywords" "^3.5.2" + "scrypt-js@^3.0.0", "scrypt-js@^3.0.1", "scrypt-js@3.0.1": "integrity" "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" "resolved" "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" @@ -11731,6 +12901,20 @@ "source-map-support" "^0.5.19" "typescript" "^4.3.5" +"secp256k1@^3.8.0": + "integrity" "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==" + "resolved" "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz" + "version" "3.8.0" + dependencies: + "bindings" "^1.5.0" + "bip66" "^1.1.5" + "bn.js" "^4.11.8" + "create-hash" "^1.2.0" + "drbg.js" "^1.0.1" + "elliptic" "^6.5.2" + "nan" "^2.14.0" + "safe-buffer" "^5.1.2" + "secp256k1@^4.0.1", "secp256k1@4.0.3": "integrity" "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==" "resolved" "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" @@ -11745,6 +12929,11 @@ "resolved" "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz" "version" "1.1.0" +"semver@^5.3.0": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + "semver@^5.5.0": "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" @@ -11823,7 +13012,7 @@ "range-parser" "~1.2.1" "statuses" "2.0.1" -"serialize-javascript@6.0.0": +"serialize-javascript@^6.0.0", "serialize-javascript@6.0.0": "integrity" "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==" "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" "version" "6.0.0" @@ -12009,6 +13198,24 @@ "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" "version" "4.2.0" +"socket.io-client@^4.5.3": + "integrity" "sha512-I/hqDYpQ6JKwtJOf5ikM+Qz+YujZPMEl6qBLhxiP0nX+TfXKhW4KZZG8lamrD6Y5ngjmYHreESVasVCgi5Kl3A==" + "resolved" "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.3.tgz" + "version" "4.5.3" + dependencies: + "@socket.io/component-emitter" "~3.1.0" + "debug" "~4.3.2" + "engine.io-client" "~6.2.3" + "socket.io-parser" "~4.2.0" + +"socket.io-parser@~4.2.0": + "integrity" "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==" + "resolved" "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "@socket.io/component-emitter" "~3.1.0" + "debug" "~4.3.1" + "socks-proxy-agent@^7.0.0": "integrity" "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==" "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" @@ -12099,7 +13306,7 @@ dependencies: "is-plain-obj" "^2.0.0" -"source-map-support@^0.5.13", "source-map-support@^0.5.19": +"source-map-support@^0.5.13", "source-map-support@^0.5.19", "source-map-support@~0.5.20": "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" "version" "0.5.21" @@ -12166,6 +13373,11 @@ "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" "version" "3.0.12" +"split-on-first@^1.0.0": + "integrity" "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" + "resolved" "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz" + "version" "1.1.0" + "split@^1.0.0": "integrity" "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==" "resolved" "https://registry.npmjs.org/split/-/split-1.0.1.tgz" @@ -12241,6 +13453,11 @@ "resolved" "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" "version" "1.1.0" +"strict-uri-encode@^2.0.0": + "integrity" "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==" + "resolved" "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz" + "version" "2.0.0" + "string_decoder@^1.1.1": "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" @@ -12322,22 +13539,22 @@ "strip-ansi" "^7.0.1" "string.prototype.trimend@^1.0.5": - "integrity" "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==" - "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" - "version" "1.0.5" + "integrity" "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==" + "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" + "version" "1.0.6" dependencies: "call-bind" "^1.0.2" "define-properties" "^1.1.4" - "es-abstract" "^1.19.5" + "es-abstract" "^1.20.4" "string.prototype.trimstart@^1.0.5": - "integrity" "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==" - "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" - "version" "1.0.5" + "integrity" "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==" + "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" + "version" "1.0.6" dependencies: "call-bind" "^1.0.2" "define-properties" "^1.1.4" - "es-abstract" "^1.19.5" + "es-abstract" "^1.20.4" "strip-ansi@^4.0.0": "integrity" "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==" @@ -12420,6 +13637,11 @@ "minimist" "^1.2.0" "through" "^2.3.4" +"superstruct@^0.14.2": + "integrity" "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" + "resolved" "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz" + "version" "0.14.2" + "supports-color@^3.1.0": "integrity" "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==" "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" @@ -12434,21 +13656,21 @@ dependencies: "has-flag" "^3.0.0" -"supports-color@^7.0.0", "supports-color@^7.1.0": +"supports-color@^7.0.0": "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" "version" "7.2.0" dependencies: "has-flag" "^4.0.0" -"supports-color@^8.0.0": - "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - "version" "8.1.1" +"supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" dependencies: "has-flag" "^4.0.0" -"supports-color@^8.1.0": +"supports-color@^8.0.0", "supports-color@^8.1.0", "supports-color@8.1.1": "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" "version" "8.1.1" @@ -12467,13 +13689,6 @@ dependencies: "has-flag" "^3.0.0" -"supports-color@8.1.1": - "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - "version" "8.1.1" - dependencies: - "has-flag" "^4.0.0" - "supports-hyperlinks@^2.0.0": "integrity" "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==" "resolved" "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" @@ -12530,6 +13745,11 @@ "typical" "^5.2.0" "wordwrapjs" "^4.0.0" +"tapable@^2.1.1", "tapable@^2.2.0": + "integrity" "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + "resolved" "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + "version" "2.2.1" + "tar-stream@~2.2.0": "integrity" "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" @@ -12579,6 +13799,27 @@ "ansi-escapes" "^4.2.1" "supports-hyperlinks" "^2.0.0" +"terser-webpack-plugin@^5.1.3": + "integrity" "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==" + "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz" + "version" "5.3.6" + dependencies: + "@jridgewell/trace-mapping" "^0.3.14" + "jest-worker" "^27.4.5" + "schema-utils" "^3.1.1" + "serialize-javascript" "^6.0.0" + "terser" "^5.14.1" + +"terser@^5.14.1": + "integrity" "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==" + "resolved" "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz" + "version" "5.15.1" + dependencies: + "@jridgewell/source-map" "^0.3.2" + "acorn" "^8.5.0" + "commander" "^2.20.0" + "source-map-support" "~0.5.20" + "test-exclude@^6.0.0": "integrity" "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==" "resolved" "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" @@ -12588,6 +13829,11 @@ "glob" "^7.1.4" "minimatch" "^3.0.4" +"text-encoding-utf-8@^1.0.2": + "integrity" "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" + "resolved" "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz" + "version" "1.0.2" + "text-extensions@^1.0.0": "integrity" "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==" "resolved" "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" @@ -12628,14 +13874,6 @@ "readable-stream" "~2.3.6" "xtend" "~4.0.1" -"through2@^2.0.3": - "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" - "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - "version" "2.0.5" - dependencies: - "readable-stream" "~2.3.6" - "xtend" "~4.0.1" - "through2@^4.0.0": "integrity" "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==" "resolved" "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" @@ -12684,6 +13922,11 @@ dependencies: "is-number" "^7.0.0" +"toggle-selection@^1.0.6": + "integrity" "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + "resolved" "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz" + "version" "1.0.6" + "toidentifier@1.0.1": "integrity" "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" @@ -12727,6 +13970,11 @@ "command-line-usage" "^6.1.0" "string-format" "^2.0.0" +"ts-custom-error@^3.2.2": + "integrity" "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==" + "resolved" "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.3.1.tgz" + "version" "3.3.1" + "ts-essentials@^1.0.0": "integrity" "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==" "resolved" "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz" @@ -12781,7 +14029,7 @@ "minimist" "^1.2.6" "strip-bom" "^3.0.0" -"tslib@^1.8.1", "tslib@^1.9.3": +"tslib@^1.13.0", "tslib@^1.8.1", "tslib@^1.9.3": "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" "version" "1.14.1" @@ -12801,16 +14049,52 @@ "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" "version" "2.4.1" +"tslib@^2.3.1": + "integrity" "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" + "version" "2.4.1" + "tslib@^2.4.0": "integrity" "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" "version" "2.4.1" +"tslint-config-prettier@^1.18.0": + "integrity" "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==" + "resolved" "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz" + "version" "1.18.0" + +"tslint@^6.1.3": + "integrity" "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==" + "resolved" "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz" + "version" "6.1.3" + dependencies: + "@babel/code-frame" "^7.0.0" + "builtin-modules" "^1.1.1" + "chalk" "^2.3.0" + "commander" "^2.12.1" + "diff" "^4.0.1" + "glob" "^7.1.1" + "js-yaml" "^3.13.1" + "minimatch" "^3.0.4" + "mkdirp" "^0.5.3" + "resolve" "^1.3.2" + "semver" "^5.3.0" + "tslib" "^1.13.0" + "tsutils" "^2.29.0" + "tsort@0.0.1": "integrity" "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" "resolved" "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" "version" "0.0.1" +"tsutils@^2.29.0": + "integrity" "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==" + "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz" + "version" "2.29.0" + dependencies: + "tslib" "^1.8.1" + "tsutils@^3.21.0": "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" @@ -12935,7 +14219,7 @@ "ts-command-line-args" "^2.2.0" "ts-essentials" "^7.0.1" -"typedarray-to-buffer@^3.1.5": +"typedarray-to-buffer@^3.1.5", "typedarray-to-buffer@3.1.5": "integrity" "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==" "resolved" "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" "version" "3.1.5" @@ -12947,7 +14231,7 @@ "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" "version" "0.0.6" -"typescript@*", "typescript@^3 || ^4", "typescript@^4.3.5", "typescript@^4.6.3", "typescript@^4.7.4", "typescript@>=2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.7.0", "typescript@>=4.0.0", "typescript@>=4.1.0", "typescript@>=4.5.0": +"typescript@*", "typescript@^3 || ^4", "typescript@^4.3.5", "typescript@^4.6.3", "typescript@^4.7.4", "typescript@>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev", "typescript@>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev", "typescript@>=2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.7.0", "typescript@>=4.0.0", "typescript@>=4.1.0", "typescript@>=4.5.0": "integrity" "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" "version" "4.8.4" @@ -13018,6 +14302,14 @@ "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" "version" "2.0.0" +"unload@^2.3.1": + "integrity" "sha512-MUZEiDqvAN9AIDRbbBnVYVvfcR6DrjCqeU2YQMmliFZl9uaBUjTkhuDQkBiyAy8ad5bx1TXVbqZ3gg7namsWjA==" + "resolved" "https://registry.npmjs.org/unload/-/unload-2.3.1.tgz" + "version" "2.3.1" + dependencies: + "@babel/runtime" "^7.6.2" + "detect-node" "2.1.0" + "unpipe@~1.0.0", "unpipe@1.0.0": "integrity" "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" @@ -13063,7 +14355,14 @@ "resolved" "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz" "version" "1.0.0" -"utf-8-validate@^5.0.2", "utf-8-validate@5.0.7": +"utf-8-validate@^5.0.2": + "integrity" "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==" + "resolved" "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz" + "version" "5.0.10" + dependencies: + "node-gyp-build" "^4.3.0" + +"utf-8-validate@5.0.7": "integrity" "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==" "resolved" "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz" "version" "5.0.7" @@ -13080,6 +14379,13 @@ "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" "version" "1.0.2" +"util@^0.10.3": + "integrity" "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==" + "resolved" "https://registry.npmjs.org/util/-/util-0.10.4.tgz" + "version" "0.10.4" + dependencies: + "inherits" "2.0.3" + "util@^0.12.0": "integrity" "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==" "resolved" "https://registry.npmjs.org/util/-/util-0.12.5.tgz" @@ -13176,6 +14482,11 @@ "core-util-is" "1.0.2" "extsprintf" "^1.2.0" +"void-elements@3.1.0": + "integrity" "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==" + "resolved" "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" + "version" "3.1.0" + "walk-up-path@^1.0.0": "integrity" "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==" "resolved" "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz" @@ -13188,6 +14499,14 @@ dependencies: "makeerror" "1.0.12" +"watchpack@^2.4.0": + "integrity" "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==" + "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" + "version" "2.4.0" + dependencies: + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.1.2" + "wcwidth@^1.0.0", "wcwidth@^1.0.1": "integrity" "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" @@ -13699,6 +15018,67 @@ "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" "version" "3.0.1" +"webpack-cli@^4.10.0", "webpack-cli@4.x.x": + "integrity" "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==" + "resolved" "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz" + "version" "4.10.0" + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.2.0" + "@webpack-cli/info" "^1.5.0" + "@webpack-cli/serve" "^1.7.0" + "colorette" "^2.0.14" + "commander" "^7.0.0" + "cross-spawn" "^7.0.3" + "fastest-levenshtein" "^1.0.12" + "import-local" "^3.0.2" + "interpret" "^2.2.0" + "rechoir" "^0.7.0" + "webpack-merge" "^5.7.3" + +"webpack-merge@^5.7.3": + "integrity" "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==" + "resolved" "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" + "version" "5.8.0" + dependencies: + "clone-deep" "^4.0.1" + "wildcard" "^2.0.0" + +"webpack-sources@^3.2.3": + "integrity" "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + "version" "3.2.3" + +"webpack@^5.1.0", "webpack@^5.74.0", "webpack@4.x.x || 5.x.x": + "integrity" "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==" + "resolved" "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz" + "version" "5.74.0" + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "acorn" "^8.7.1" + "acorn-import-assertions" "^1.7.6" + "browserslist" "^4.14.5" + "chrome-trace-event" "^1.0.2" + "enhanced-resolve" "^5.10.0" + "es-module-lexer" "^0.9.0" + "eslint-scope" "5.1.1" + "events" "^3.2.0" + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.2.9" + "json-parse-even-better-errors" "^2.3.1" + "loader-runner" "^4.2.0" + "mime-types" "^2.1.27" + "neo-async" "^2.6.2" + "schema-utils" "^3.1.0" + "tapable" "^2.1.1" + "terser-webpack-plugin" "^5.1.3" + "watchpack" "^2.4.0" + "webpack-sources" "^3.2.3" + "websocket@^1.0.32": "integrity" "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==" "resolved" "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz" @@ -13801,6 +15181,11 @@ dependencies: "string-width" "^1.0.2 || 2" +"wildcard@^2.0.0": + "integrity" "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + "resolved" "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz" + "version" "2.0.0" + "word-wrap@^1.2.3", "word-wrap@~1.2.3": "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" @@ -13921,7 +15306,7 @@ "type-fest" "^0.4.1" "write-json-file" "^3.2.0" -"ws@*", "ws@^7.4.6": +"ws@*", "ws@^7.4.5", "ws@^7.4.6": "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" "version" "7.5.9" @@ -13942,16 +15327,31 @@ dependencies: "async-limiter" "~1.0.0" +"ws@^8.5.0": + "integrity" "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==" + "resolved" "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz" + "version" "8.11.0" + "ws@^8.8.0": - "integrity" "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==" - "resolved" "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz" - "version" "8.10.0" + "integrity" "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==" + "resolved" "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz" + "version" "8.11.0" + +"ws@~8.2.3": + "integrity" "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==" + "resolved" "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz" + "version" "8.2.3" "ws@7.4.6": "integrity" "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" "resolved" "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" "version" "7.4.6" +"ws@7.5.3": + "integrity" "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz" + "version" "7.5.3" + "xhr-request-promise@^0.1.2": "integrity" "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==" "resolved" "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz" @@ -13989,6 +15389,11 @@ dependencies: "cookiejar" "^2.1.1" +"xmlhttprequest-ssl@~2.0.0": + "integrity" "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" + "resolved" "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz" + "version" "2.0.0" + "xmlhttprequest@1.8.0": "integrity" "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==" "resolved" "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz" @@ -14067,7 +15472,7 @@ "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" "version" "20.2.9" -"yargs-parser@^21.1.1": +"yargs-parser@^21.1.1", "yargs-parser@21.1.1": "integrity" "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" "version" "21.1.1" @@ -14077,11 +15482,6 @@ "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" "version" "20.2.4" -"yargs-parser@21.0.1": - "integrity" "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" - "version" "21.0.1" - "yargs-unparser@1.6.0": "integrity" "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==" "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz" @@ -14101,6 +15501,22 @@ "flat" "^5.0.2" "is-plain-obj" "^2.1.0" +"yargs@^13.2.4": + "integrity" "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" + "version" "13.3.2" + dependencies: + "cliui" "^5.0.0" + "find-up" "^3.0.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" "^3.0.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^13.1.2" + "yargs@^13.3.0", "yargs@13.3.2": "integrity" "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==" "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" @@ -14143,7 +15559,7 @@ "y18n" "^5.0.5" "yargs-parser" "^21.1.1" -"yargs@^17.4.0": +"yargs@^17.6.2": "integrity" "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==" "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz" "version" "17.6.2" From 33eea9e367021c370862e356ce7b4c65b647fb1f Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 8 Nov 2022 18:23:14 +0400 Subject: [PATCH 0255/1247] update version (mesging sdk + singing service + smart account config / custom paymaster) --- lerna.json | 2 +- packages/account-abstraction/package.json | 2 +- packages/common/package.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/gas-estimator/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- packages/web3-auth/package.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lerna.json b/lerna.json index 8a3120df3..0744b645e 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], "npmClient": "yarn", - "version": "1.0.19", + "version": "1.0.20", "useWorkspaces": true } \ No newline at end of file diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index a815195dd..11ce6a69f 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/account-abstraction", - "version": "1.0.19", + "version": "1.0.20", "description": "Account abstraction APIs to prepare user operations ", "keywords": [ "account-abstraction", diff --git a/packages/common/package.json b/packages/common/package.json index 3bc6287a6..b7baec5be 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/common", - "version": "1.0.19", + "version": "1.0.20", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/core-types/package.json b/packages/core-types/package.json index cf8366dfe..4b338a1ac 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.19", + "version": "1.0.20", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 25d2eac78..d72f9b241 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.19", + "version": "1.0.20", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index b92cafeca..c7595bbeb 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/gas-estimator", - "version": "1.0.19", + "version": "1.0.20", "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", "keywords": [ "gas-estimation", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index fdbc5d323..ab6d0ba21 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.19", + "version": "1.0.20", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 82061627a..8d5607b5b 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.19", + "version": "1.0.20", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 3c50438c1..d92658fd1 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.19", + "version": "1.0.20", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 8b69348b8..099d3a388 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.19", + "version": "1.0.20", "description": "utils for sending all transaction legos", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index 8cdef325e..7cf3c34eb 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/web3-auth", - "version": "1.0.19", + "version": "1.0.20", "description": "web3-auth for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From eee4652ca1383ef7b8910b5ce0c85a5c74b48f21 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 8 Nov 2022 20:45:47 +0400 Subject: [PATCH 0256/1247] update http requests with headers --- package.json | 2 +- packages/relayer/src/utils/httpRequests.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 95ad0ae26..fa04f375f 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "eslint-plugin-import": "^2.26.0", "hardhat": "^2.9.9", "lerna": "^5.5.4", - "nx": "^15.0.11", + "nx": "^15.0.12", "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1" diff --git a/packages/relayer/src/utils/httpRequests.ts b/packages/relayer/src/utils/httpRequests.ts index ed8d0684b..132da24fa 100644 --- a/packages/relayer/src/utils/httpRequests.ts +++ b/packages/relayer/src/utils/httpRequests.ts @@ -10,12 +10,14 @@ interface HttpRequest { url: string method: HttpMethod body?: Record + headers?: object } -export async function sendRequest({ url, method, body }: HttpRequest): Promise { +export async function sendRequest({ url, method, body, headers = {} }: HttpRequest): Promise { const response = await fetch(url, { method, headers: { + ...headers, Accept: 'application/json', 'Content-Type': 'application/json' }, From 6d9175826aee516fb0a09e92ee215a8b9035f0e6 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Tue, 8 Nov 2022 21:48:06 +0400 Subject: [PATCH 0257/1247] first refactor wave --- packages/account-abstraction/README.md | 7 +-- .../account-abstraction/src/BaseWalletAPI.ts | 8 ---- .../account-abstraction/src/ClientConfig.ts | 1 + .../src/ERC4337EthersProvider.ts | 7 +-- .../src/ERC4337EthersSigner.ts | 7 ++- .../account-abstraction/src/HttpRpcClient.ts | 1 + packages/account-abstraction/src/Provider.ts | 3 -- .../src/SmartAccountAPI.ts | 8 ++-- .../src/UserOperationEventListener.ts | 1 - .../src/WalletFactoryAPI.ts | 5 --- .../test/1-SmartAccountAPI.test.ts | 43 ++++++++----------- .../test/2-ERC4337EthersSigner.test.ts | 2 +- packages/common/README.md | 5 +-- .../core-types/src/smart-account.types.ts | 1 + packages/core-types/src/types.ts | 3 +- packages/gas-estimator/README.md | 4 +- packages/relayer/src/local-relayer.ts | 17 ++++---- packages/relayer/src/rest-relayer.ts | 16 +++---- packages/smart-account/src/SmartAccount.ts | 13 ++++-- 19 files changed, 63 insertions(+), 89 deletions(-) diff --git a/packages/account-abstraction/README.md b/packages/account-abstraction/README.md index 62d9bbde3..97a2e1623 100644 --- a/packages/account-abstraction/README.md +++ b/packages/account-abstraction/README.md @@ -1,11 +1,12 @@ # `@biconomy-sdk/account-abstraction` -> TODO: description +## To create and send UserOperation -## Usage +## Provides SmartAccountAPI and high-level Provider API + +### Usage ``` -const accountAbstraction = require('@biconomy-sdk/account-abstraction'); // TODO: DEMONSTRATE API ``` diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index 9e9a2aa45..d96c9e4ea 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -201,14 +201,6 @@ export abstract class BaseWalletAPI { detailsForUserOp.isDelegateCall || false ) - /*const callData = (await this._getWalletContract()).encodeFunctionData('execFromEntryPoint', [ - detailsForUserOp.target, - value, - detailsForUserOp.data, - 0, - 300000 - ])*/ - const callGasLimit = parseNumber(detailsForUserOp.gasLimit) ?? (await this.provider.estimateGas({ diff --git a/packages/account-abstraction/src/ClientConfig.ts b/packages/account-abstraction/src/ClientConfig.ts index 26360bf4d..d1a1f5032 100644 --- a/packages/account-abstraction/src/ClientConfig.ts +++ b/packages/account-abstraction/src/ClientConfig.ts @@ -2,6 +2,7 @@ import { IPaymasterAPI } from "@biconomy-sdk/core-types" export interface ClientConfig { dappAPIKey: string + socketServerUrl: string biconomySigningServiceUrl: string customPaymasterAPI?: IPaymasterAPI entryPointAddress: string diff --git a/packages/account-abstraction/src/ERC4337EthersProvider.ts b/packages/account-abstraction/src/ERC4337EthersProvider.ts index 3feb35e3c..bf36c9d04 100644 --- a/packages/account-abstraction/src/ERC4337EthersProvider.ts +++ b/packages/account-abstraction/src/ERC4337EthersProvider.ts @@ -98,7 +98,8 @@ export class ERC4337EthersProvider extends BaseProvider { }) } - // fabricate a response in a format usable by ethers users... + // fabricate a response (using UserOperation events and requestId match filter) in a format usable by ethers users... + /*async constructUserOpTransactionResponse(userOp1: UserOperation): Promise { const userOp = await resolveProperties(userOp1) const requestId = getRequestId(userOp, this.config.entryPointAddress, this.config.chainId) @@ -133,13 +134,13 @@ export class ERC4337EthersProvider extends BaseProvider { } }*/ - // fabricate a response in a format usable by ethers users... + // fabricate a response (using messaging SDK) in a format usable by ethers users... async constructUserOpTransactionResponse( userOp1: UserOperation, transactionId: string, engine?: any // EventEmitter ): Promise { - const socketServerUrl = 'wss://sdk-testing-ws.staging.biconomy.io/connection/websocket' + const socketServerUrl = this.config.socketServerUrl const clientMessenger = new ClientMessenger(socketServerUrl, WebSocket) diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index d1d419c88..2912ae185 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -59,7 +59,7 @@ export class ERC4337EthersSigner extends Signer { transaction: Deferrable, engine?: any // EventEmitter ): Promise { - const socketServerUrl = 'wss://sdk-testing-ws.staging.biconomy.io/connection/websocket' + const socketServerUrl = this.config.socketServerUrl const clientMessenger = new ClientMessenger(socketServerUrl, WebSocket) @@ -86,9 +86,9 @@ export class ERC4337EthersSigner extends Signer { console.log('gaslimit ', gasLimit) console.log('transaction.gaslimit ', transaction.gasLimit) - // temp + // TODO : //temp to avoid running into issues with populateTransaction when destination is multisend OR wallet is undeployed transaction.gasLimit = gasLimit - // TODO : if isDeployed = false || skipGasLimit = true then use provided gas limit => transaction.gasLimit = gasLimit + // TODO : If isDeployed = false || skipGasLimit = true then use provided gas limit => transaction.gasLimit = gasLimit delete transaction.customData // transaction.from = await this.smartWalletAPI.getWalletAddress() const tx: TransactionRequest = await this.populateTransaction(transaction) @@ -124,7 +124,6 @@ export class ERC4337EthersSigner extends Signer { hash: txHash })}` ) - // todo event emitter engine.emit('txHashGenerated', { id: tx.transactionId, hash: tx.transactionHash, diff --git a/packages/account-abstraction/src/HttpRpcClient.ts b/packages/account-abstraction/src/HttpRpcClient.ts index 3e13322d2..b94971c13 100644 --- a/packages/account-abstraction/src/HttpRpcClient.ts +++ b/packages/account-abstraction/src/HttpRpcClient.ts @@ -44,6 +44,7 @@ export class HttpRpcClient { const metaData = { dappAPIKey: this.dappAPIKey } + // TODO : evaluate this for other bundler clients not operating a Dapp dashboard params = [hexifiedUserOp, this.entryPointAddress, this.chainId, metaData] } else { params = [hexifiedUserOp, this.entryPointAddress, this.chainId] diff --git a/packages/account-abstraction/src/Provider.ts b/packages/account-abstraction/src/Provider.ts index 8ff1ebaea..966e0bc09 100644 --- a/packages/account-abstraction/src/Provider.ts +++ b/packages/account-abstraction/src/Provider.ts @@ -10,9 +10,6 @@ import { ERC4337EthersProvider } from './ERC4337EthersProvider' import { HttpRpcClient } from './HttpRpcClient' import { Signer } from '@ethersproject/abstract-signer' -// TODO: Update in the context of SmartAccount and WalletFactory aka deployer -// Might need smart account state for contract addresses - // To be used in SmartAccount to init 4337 provider export async function newProvider( originalProvider: JsonRpcProvider, diff --git a/packages/account-abstraction/src/SmartAccountAPI.ts b/packages/account-abstraction/src/SmartAccountAPI.ts index fc02286f1..372ea3db7 100644 --- a/packages/account-abstraction/src/SmartAccountAPI.ts +++ b/packages/account-abstraction/src/SmartAccountAPI.ts @@ -98,11 +98,11 @@ export class SmartAccountAPI extends BaseWalletAPI { target, value, data, - isDelegateCall ? 1 : 0, //temp // TODO // if multisend then delegatecall (take flag...) - 500000 //temp // TODO + isDelegateCall ? 1 : 0, + 1000000 // gasLimit for execute call on SmartWallet.sol. TODO: estimate using requiredTxGas ]) } - // TODO: May be need to move this to ERC4337EthersPrivider + async signRequestId(requestId: string): Promise { return await this.owner.signMessage(arrayify(requestId)) } @@ -142,7 +142,7 @@ export class SmartAccountAPI extends BaseWalletAPI { const partialUserOp: any = { sender: await this.getWalletAddress(), - nonce: await this.getNonce(0), // TODO: add batchid as param + nonce: await this.getNonce(0), // TODO (nice-to-have): add batchid as param initCode, callData, callGasLimit, diff --git a/packages/account-abstraction/src/UserOperationEventListener.ts b/packages/account-abstraction/src/UserOperationEventListener.ts index 0770a539d..985f738c3 100644 --- a/packages/account-abstraction/src/UserOperationEventListener.ts +++ b/packages/account-abstraction/src/UserOperationEventListener.ts @@ -59,7 +59,6 @@ export class UserOperationEventListener { console.error('got event without args', event) return } - // TODO: can this happen? we register to event by requestId.. if (event.args.requestId !== this.requestId) { console.log( `== event with wrong requestId: sender/nonce: event.${event.args.sender as string}@${ diff --git a/packages/account-abstraction/src/WalletFactoryAPI.ts b/packages/account-abstraction/src/WalletFactoryAPI.ts index 8482af09e..550e276bd 100644 --- a/packages/account-abstraction/src/WalletFactoryAPI.ts +++ b/packages/account-abstraction/src/WalletFactoryAPI.ts @@ -1,11 +1,6 @@ import { Contract } from 'ethers' export class WalletFactoryAPI { - // TODO: uncomment and enable constructor - // constructor( - // readonly factoryAddress: string - // ){} - static deployWalletTransactionCallData( factoryAddress: string, owner: string, diff --git a/packages/account-abstraction/test/1-SmartAccountAPI.test.ts b/packages/account-abstraction/test/1-SmartAccountAPI.test.ts index d963b82b9..bdd3b19b1 100644 --- a/packages/account-abstraction/test/1-SmartAccountAPI.test.ts +++ b/packages/account-abstraction/test/1-SmartAccountAPI.test.ts @@ -20,17 +20,15 @@ import { SmartWalletFactoryContractV101, EntryPointContractV101, SmartWalletContractV101 -} - from '@biconomy-sdk/ethers-lib' +} from '@biconomy-sdk/ethers-lib' import { DeterministicDeployer } from '../src/DeterministicDeployer' const provider = ethers.provider const signer = provider.getSigner() const originalSigner = provider.getSigner(1) -const fallBackHandlerAddress = "0xF05217199F1C25604c67993F11a81461Bc97F3Ab"; // temp +const fallBackHandlerAddress = '0xF05217199F1C25604c67993F11a81461Bc97F3Ab' // temp describe('SmartAccountAPI', async () => { - let owner: Wallet let api: SmartAccountAPI let entryPoint: EntryPointContractV101 @@ -45,8 +43,7 @@ describe('SmartAccountAPI', async () => { let chainId: number before('init', async () => { - - chainId = (await provider.getNetwork()).chainId; + chainId = (await provider.getNetwork()).chainId console.log(chainId) entryPoint = await new EntryPointFactoryContractV101(signer).deploy(1, 1) @@ -60,10 +57,12 @@ describe('SmartAccountAPI', async () => { baseWalletContract = await new SmartWalletFactoryV101(signer).deploy() console.log('base wallet deployed at ', baseWalletContract.address) - walletFactoryContract = await new SmartWalletFactoryFactoryContractV101(signer).deploy(baseWalletContract.address) + walletFactoryContract = await new SmartWalletFactoryFactoryContractV101(signer).deploy( + baseWalletContract.address + ) console.log('wallet factory deployed at ', walletFactoryContract.address) - expected = await walletFactoryContract.getAddressForCounterfactualWallet(owner.address, 0); + expected = await walletFactoryContract.getAddressForCounterfactualWallet(owner.address, 0) console.log('expected address ', expected) // deploy wallet @@ -73,11 +72,10 @@ describe('SmartAccountAPI', async () => { userSCW = baseWalletContract.attach(expected) // const factoryAddress = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) - const clientConfig = { dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', biconomySigningServiceUrl: 'https://us-central1-biconomy-staging.cloudfunctions.net', - paymasterAddress: '', + socketServerUrl: 'wss://sdk-testing-ws.staging.biconomy.io/connection/websocket', entryPointAddress: entryPoint.address, bundlerUrl: 'http://localhost:3000/rpc', chainId: chainId @@ -96,13 +94,9 @@ describe('SmartAccountAPI', async () => { console.log('smart account api') console.log(api.walletAddress) - - - }) it('#getRequestId should match entryPoint.getRequestId', async function () { - const userOp: UserOperation = { sender: '0x'.padEnd(42, '1'), nonce: 2, @@ -119,14 +113,12 @@ describe('SmartAccountAPI', async () => { const hash = await api.getRequestId(userOp) const epHash = await entryPoint.getRequestId(userOp) expect(hash).to.equal(epHash) - }) it('should deploy to counterfactual address', async () => { - walletAddress = await api.getWalletAddress() console.log('wallet address from api ', walletAddress) - expect(await provider.getCode(walletAddress).then(code => code.length)).to.equal(2) + expect(await provider.getCode(walletAddress).then((code) => code.length)).to.equal(2) await signer.sendTransaction({ to: walletAddress, @@ -134,9 +126,9 @@ describe('SmartAccountAPI', async () => { }) console.log('sent eth') - let op: any; + let op: any try { - op = await api.createSignedUserOp({ + op = await api.createSignedUserOp({ target: recipient.address, data: recipient.interface.encodeFunctionData('something', ['hello']) }) @@ -145,23 +137,23 @@ describe('SmartAccountAPI', async () => { console.log(err) } - await expect(entryPoint.handleOps([op], beneficiary)).to.emit(recipient, 'Sender') + await expect(entryPoint.handleOps([op], beneficiary)) + .to.emit(recipient, 'Sender') .withArgs(anyValue, walletAddress, 'hello') - + //expect(await provider.getCode(walletAddress).then(code => code.length)).to.greaterThan(1000) walletDeployed = true - }) it('should use wallet API after creation without a factory', async function () { - if (!walletDeployed) { this.skip() } + // TODO : Update with prod values const clientConfig = { dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', biconomySigningServiceUrl: 'https://us-central1-biconomy-staging.cloudfunctions.net', - paymasterAddress: '', + socketServerUrl: 'wss://sdk-testing-ws.staging.biconomy.io/connection/websocket', entryPointAddress: entryPoint.address, bundlerUrl: 'http://localhost:3000/rpc', chainId: chainId @@ -182,7 +174,8 @@ describe('SmartAccountAPI', async () => { target: recipient.address, data: recipient.interface.encodeFunctionData('something', ['world']) }) - await expect(entryPoint.handleOps([op1], beneficiary)).to.emit(recipient, 'Sender') + await expect(entryPoint.handleOps([op1], beneficiary)) + .to.emit(recipient, 'Sender') .withArgs(anyValue, walletAddress, 'world') }) }) diff --git a/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts b/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts index f84e48462..66936f4c2 100644 --- a/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts +++ b/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts @@ -60,7 +60,7 @@ describe('ERC4337EthersSigner, Provider', function () { const clientConfig: ClientConfig = { dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', biconomySigningServiceUrl: 'https://us-central1-biconomy-staging.cloudfunctions.net', - // paymasterAddress: '', + socketServerUrl: 'wss://sdk-testing-ws.staging.biconomy.io/connection/websocket', entryPointAddress: entryPoint.address, bundlerUrl: 'http://localhost:3000/rpc', chainId: await provider.getNetwork().then((net) => net.chainId) diff --git a/packages/common/README.md b/packages/common/README.md index 4f634f042..ad4c2e841 100644 --- a/packages/common/README.md +++ b/packages/common/README.md @@ -1,11 +1,8 @@ # `@biconomy-sdk/common` -> TODO: description +> TODO: ERC4337 common utils ## Usage ``` -const common = require('@biconomy-sdk/common'); - -// TODO: DEMONSTRATE API ``` diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/smart-account.types.ts index 3e620da05..ca7c68b35 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/smart-account.types.ts @@ -16,6 +16,7 @@ export interface SmartAccountConfig { supportedNetworksIds: ChainId[] backend_url: string relayer_url: string + socketServerUrl: string // specific to biconomy messaging sdk signType: SignTypeMethod networkConfig: NetworkConfig[] entryPointAddress?: string diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index e586d12f9..516fab960 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -43,13 +43,12 @@ export const DEFAULT_FEE_RECEIVER = '0x7306aC7A32eb690232De81a9FFB44Bb346026faB' export const GAS_USAGE_OFFSET = 4928 + 2360 // Few more constants can be added regarding token transfer / handle payments - export const FAKE_SIGNATURE = '0x39f5032f1cd30005aa1e35f04394cabfe7de3b6ae6d95b27edd8556064c287bf61f321fead0cf48ca4405d497cc8fc47fc7ff0b7f5c45baa14090a44f2307d8230' export type RestRelayerOptions = { url: string - // chainId: ChainId + socketServerUrl: string } export type TokenData = { diff --git a/packages/gas-estimator/README.md b/packages/gas-estimator/README.md index 4aed419e7..9f7c7b547 100644 --- a/packages/gas-estimator/README.md +++ b/packages/gas-estimator/README.md @@ -1,11 +1,11 @@ # `@biconomy-sdk/gas-estimator` -> TODO: description +> WIP: Generic gas estimator package to estimate gas on your smart contracts in many generic ways. ## Usage ``` -const gasEstimator = require('@biconomy-sdk/gas-estimator'); +import { Estimator } from '@biconomy-sdk/gas-estimator'; // TODO: DEMONSTRATE API ``` diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/local-relayer.ts index 801620b65..1fc08578a 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/local-relayer.ts @@ -10,8 +10,11 @@ import { } from '@biconomy-sdk/core-types' import { MetaTransaction, encodeMultiSend } from './utils/multisend' +// You can configure your own signer with gas held to send out test transactions or some sponsored transactions by plugging it into SmartAccount package +// Not meant to use for production environment for transaction ordering. export class LocalRelayer implements IRelayer { private signer: AbstractSigner + // TODO : review members // private txnOptions: TransactionRequest constructor(signer: AbstractSigner) { @@ -20,12 +23,10 @@ export class LocalRelayer implements IRelayer { if (!this.signer.provider) throw new Error('Signer must have a provider') } - // TODO - // Review function arguments and return values - // Defines a type that takes config, context for SCW in play along with other details + // Defines a type DeployWallet that takes config, context for SCW in this context async deployWallet(deployWallet: DeployWallet): Promise { - // Should check if already deployed - // Review for index and ownership transfer case + // checkd if already deployed + // TODO : Review for index and ownership transfer case const { config, context, index = 0 } = deployWallet const { address } = config const { walletFactory } = context @@ -41,10 +42,7 @@ export class LocalRelayer implements IRelayer { return tx } - prepareWalletDeploy( - deployWallet: DeployWallet - // context: WalletContext - ): { to: string; data: string } { + prepareWalletDeploy(deployWallet: DeployWallet): { to: string; data: string } { const { config, context, index = 0 } = deployWallet const { walletFactory } = context @@ -115,6 +113,7 @@ export class LocalRelayer implements IRelayer { async getFeeOptions(chainId: number): Promise { console.log('requested fee options for chain ', chainId) + // Mock response for local relayer to adhere with the interface! const feeOptions: FeeOptionsResponse = { msg: 'all ok', data: { diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/rest-relayer.ts index d1fbec4c7..32665eb64 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/rest-relayer.ts @@ -21,13 +21,16 @@ import WebSocket, { EventEmitter } from 'isomorphic-ws' */ export class RestRelayer implements IRelayer { #relayServiceBaseUrl: string + #socketServerUrl: string relayerNodeEthersProvider!: { [chainId: number]: JsonRpcProvider } constructor(options: RestRelayerOptions) { - const { url } = options + // TODO : Rename url to relayerServiceUrl + const { url, socketServerUrl } = options this.relayerNodeEthersProvider = {} this.#relayServiceBaseUrl = url + this.#socketServerUrl = socketServerUrl } setRelayerNodeEthersProvider(chainId: ChainId) { @@ -61,12 +64,8 @@ export class RestRelayer implements IRelayer { } } - // Make gas limit a param - // We would send manual gas limit with high targetTxGas (whenever targetTxGas can't be accurately estimated) - async relay(relayTransaction: RelayTransaction, engine: EventEmitter): Promise { - // TODO comes from own config - const socketServerUrl = 'wss://sdk-testing-ws.staging.biconomy.io/connection/websocket' + const socketServerUrl = this.#socketServerUrl const clientMessenger = new ClientMessenger(socketServerUrl, WebSocket) @@ -79,8 +78,6 @@ export class RestRelayer implements IRelayer { const { isDeployed, address } = config const chainId = signedTx.rawTx.chainId - // - // Creates an instance of relayer node ethers provider for chain not already discovered this.setRelayerNodeEthersProvider(chainId) @@ -119,9 +116,6 @@ export class RestRelayer implements IRelayer { chainId: signedTx.rawTx.chainId, value: 0 } - - // JSON RPC Call - // rawTx to becomes multiSend address and data gets prepared again } else { finalRawRx = signedTx.rawTx } diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 858f9b9c7..54698a4e2 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -154,7 +154,10 @@ class SmartAccount extends EventEmitter { this.provider = walletProvider this.signer = new SmartAccountSigner(this.provider) this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) - this.relayer = new RestRelayer({ url: this.#smartAccountConfig.relayer_url }) + this.relayer = new RestRelayer({ + url: this.#smartAccountConfig.relayer_url, + socketServerUrl: this.#smartAccountConfig.socketServerUrl + }) this.aaProvider = {} this.chainConfig = [] } @@ -237,6 +240,7 @@ class SmartAccount extends EventEmitter { { dappAPIKey: clientConfig.dappAPIKey || '', biconomySigningServiceUrl: this.#smartAccountConfig.biconomySigningServiceUrl || '', + socketServerUrl: this.#smartAccountConfig.socketServerUrl || '', entryPointAddress: this.#smartAccountConfig.entryPointAddress ? this.#smartAccountConfig.entryPointAddress : network.entryPoint[network.entryPoint.length - 1].address, @@ -833,18 +837,19 @@ class SmartAccount extends EventEmitter { } } -// Temporary default config -// TODO/NOTE : make Goerli and Mumbai as test networks and remove others +// Current default config +// TODO/NOTE : Goerli and Mumbai as test networks and remove others export const DefaultSmartAccountConfig: SmartAccountConfig = { activeNetworkId: ChainId.GOERLI, //Update later supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], signType: SignTypeMethod.EIP712_SIGN, backend_url: 'https://sdk-backend.staging.biconomy.io/v1', relayer_url: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay', + socketServerUrl: 'wss://sdk-testing-ws.staging.biconomy.io/connection/websocket', bundlerUrl: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay', biconomySigningServiceUrl: 'https://us-central1-biconomy-staging.cloudfunctions.net/signing-service', - // has to be public urls (local config / backend node) + // TODO : has to be public provider urls (local config / backend node) networkConfig: [ { chainId: ChainId.GOERLI, From 8c2aa9f424c028e276f2f74841d7ea574da4cd09 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 9 Nov 2022 01:29:09 +0400 Subject: [PATCH 0258/1247] refactor wave 2 --- ...raction-types.ts => AccountAbstractionTypes.ts} | 2 +- .../src/{chains.types.ts => ChainsTypes.ts} | 0 ...smart-account.types.ts => SmartAccountTypes.ts} | 14 +++++++------- .../{transaction.types.ts => TransactionTypes.ts} | 4 ++-- .../core-types/src/contracts/EntryPointContract.ts | 4 ++-- .../src/contracts/SmartWalletContract.ts | 4 ++-- .../src/contracts/SmartWalletFactoryContract.ts | 2 +- .../src/evm-manager/EvmNetworkManager.ts | 2 +- packages/core-types/src/index.ts | 10 +++++----- packages/core-types/src/types.ts | 2 +- packages/ethers-lib/src/index.ts | 2 +- packages/ethers-lib/src/utils/index.ts | 2 +- .../{generic-estimator.ts => GenericEstimator.ts} | 0 ...orderride-estimator.ts => OverrideEstimator.ts} | 0 ...count-estimator.ts => SmartAccountEstimator.ts} | 0 packages/node-client/src/NodeClient.ts | 2 +- .../src/{local-relayer.ts => LocalRelayer.ts} | 2 +- .../src/{rest-relayer.ts => RestRelayer.ts} | 4 ++-- packages/relayer/src/index.ts | 4 ++-- packages/smart-account/src/SmartAccount.ts | 8 ++++---- .../smart-account/tests/0-smartaccount.spec.ts | 4 ++-- .../src/{account-utils.ts => AccountUtils.ts} | 0 .../src/{contract-utils.ts => ContractUtils.ts} | 0 ...ransaction-manager.ts => TransactionManager.ts} | 12 ++++++------ packages/transactions/src/estimator.ts | 4 ++-- packages/transactions/src/index.ts | 10 +++++----- packages/transactions/src/multisend.ts | 2 +- 27 files changed, 50 insertions(+), 50 deletions(-) rename packages/core-types/src/{account-abstraction-types.ts => AccountAbstractionTypes.ts} (73%) rename packages/core-types/src/{chains.types.ts => ChainsTypes.ts} (100%) rename packages/core-types/src/{smart-account.types.ts => SmartAccountTypes.ts} (90%) rename packages/core-types/src/{transaction.types.ts => TransactionTypes.ts} (95%) rename packages/gas-estimator/src/{generic-estimator.ts => GenericEstimator.ts} (100%) rename packages/gas-estimator/src/{orderride-estimator.ts => OverrideEstimator.ts} (100%) rename packages/gas-estimator/src/{smartaccount-estimator.ts => SmartAccountEstimator.ts} (100%) rename packages/relayer/src/{local-relayer.ts => LocalRelayer.ts} (98%) rename packages/relayer/src/{rest-relayer.ts => RestRelayer.ts} (98%) rename packages/transactions/src/{account-utils.ts => AccountUtils.ts} (100%) rename packages/transactions/src/{contract-utils.ts => ContractUtils.ts} (100%) rename packages/transactions/src/{transaction-manager.ts => TransactionManager.ts} (99%) diff --git a/packages/core-types/src/account-abstraction-types.ts b/packages/core-types/src/AccountAbstractionTypes.ts similarity index 73% rename from packages/core-types/src/account-abstraction-types.ts rename to packages/core-types/src/AccountAbstractionTypes.ts index c7afe7602..b9b67772d 100644 --- a/packages/core-types/src/account-abstraction-types.ts +++ b/packages/core-types/src/AccountAbstractionTypes.ts @@ -1,4 +1,4 @@ -import { UserOperation } from 'types' +import { UserOperation } from 'Types' export interface IPaymasterAPI { getPaymasterAndData(userOp: Partial): Promise diff --git a/packages/core-types/src/chains.types.ts b/packages/core-types/src/ChainsTypes.ts similarity index 100% rename from packages/core-types/src/chains.types.ts rename to packages/core-types/src/ChainsTypes.ts diff --git a/packages/core-types/src/smart-account.types.ts b/packages/core-types/src/SmartAccountTypes.ts similarity index 90% rename from packages/core-types/src/smart-account.types.ts rename to packages/core-types/src/SmartAccountTypes.ts index ca7c68b35..0d66ce109 100644 --- a/packages/core-types/src/smart-account.types.ts +++ b/packages/core-types/src/SmartAccountTypes.ts @@ -1,21 +1,21 @@ // Smart Account Detail Param Types -import { ChainId } from './chains.types' -import { IWalletTransaction, Transaction } from './transaction.types' -import { FeeQuote } from './types' +import { ChainId } from './ChainsTypes' +import { IWalletTransaction, Transaction } from './TransactionTypes' +import { FeeQuote } from './Types' import { SmartWalletFactoryContract } from './contracts/SmartWalletFactoryContract' import { MultiSendContract } from './contracts/MultiSendContract' import { MultiSendCallOnlyContract } from './contracts/MultiSendCallOnlyContract' import { SmartWalletContract } from './contracts/SmartWalletContract' -import { GasLimit } from './transaction.types' +import { GasLimit } from './TransactionTypes' import { Signer } from 'ethers' -import { IPaymasterAPI } from 'account-abstraction-types' +import { IPaymasterAPI } from 'AccountAbstractionTypes' export interface SmartAccountConfig { activeNetworkId: ChainId supportedNetworksIds: ChainId[] - backend_url: string - relayer_url: string + backendUrl: string + relayerUrl: string socketServerUrl: string // specific to biconomy messaging sdk signType: SignTypeMethod networkConfig: NetworkConfig[] diff --git a/packages/core-types/src/transaction.types.ts b/packages/core-types/src/TransactionTypes.ts similarity index 95% rename from packages/core-types/src/transaction.types.ts rename to packages/core-types/src/TransactionTypes.ts index 62b3cfc69..26330a5ee 100644 --- a/packages/core-types/src/transaction.types.ts +++ b/packages/core-types/src/TransactionTypes.ts @@ -1,6 +1,6 @@ import { BigNumber, BigNumberish } from '@ethersproject/bignumber' -import { OperationType } from './types' -import { SmartAccountContext, SmartAccountState } from './smart-account.types' +import { OperationType } from './Types' +import { SmartAccountContext, SmartAccountState } from './SmartAccountTypes' import { PromiEvent, TransactionReceipt } from 'web3-core/types' import { ContractTransaction } from '@ethersproject/contracts' diff --git a/packages/core-types/src/contracts/EntryPointContract.ts b/packages/core-types/src/contracts/EntryPointContract.ts index a4c5217f5..dbc00ad55 100644 --- a/packages/core-types/src/contracts/EntryPointContract.ts +++ b/packages/core-types/src/contracts/EntryPointContract.ts @@ -1,5 +1,5 @@ -import { UserOperation } from '../types' -import { ITransactionResult } from '../transaction.types' +import { UserOperation } from '../Types' +import { ITransactionResult } from '../TransactionTypes' import { Contract } from '@ethersproject/contracts' import { BytesLike } from 'ethers' export interface EntryPointContract { diff --git a/packages/core-types/src/contracts/SmartWalletContract.ts b/packages/core-types/src/contracts/SmartWalletContract.ts index d4488266f..7afd85da5 100644 --- a/packages/core-types/src/contracts/SmartWalletContract.ts +++ b/packages/core-types/src/contracts/SmartWalletContract.ts @@ -3,8 +3,8 @@ import { ExecTransaction, IFeeRefundV1_0_0, IFeeRefundV1_0_1 -} from '../transaction.types' -import { SmartAccountVersion } from '../types' +} from '../TransactionTypes' +import { SmartAccountVersion } from '../Types' import { BigNumber } from '@ethersproject/bignumber' import { Interface } from '@ethersproject/abi' import { Contract } from '@ethersproject/contracts' diff --git a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts index 7cf0c06de..2db60737c 100644 --- a/packages/core-types/src/contracts/SmartWalletFactoryContract.ts +++ b/packages/core-types/src/contracts/SmartWalletFactoryContract.ts @@ -1,4 +1,4 @@ -import { ITransactionResult } from '../transaction.types' +import { ITransactionResult } from '../TransactionTypes' import { Interface } from '@ethersproject/abi' import { Contract } from '@ethersproject/contracts' export interface SmartWalletFactoryContract { diff --git a/packages/core-types/src/evm-manager/EvmNetworkManager.ts b/packages/core-types/src/evm-manager/EvmNetworkManager.ts index 845b7a18c..f14dab30b 100644 --- a/packages/core-types/src/evm-manager/EvmNetworkManager.ts +++ b/packages/core-types/src/evm-manager/EvmNetworkManager.ts @@ -3,7 +3,7 @@ import { SmartWalletContract } from 'contracts/SmartWalletContract' import { MultiSendContract } from '../contracts/MultiSendContract' import { MultiSendCallOnlyContract } from '../contracts/MultiSendCallOnlyContract' import { SmartWalletFactoryContract } from '../contracts/SmartWalletFactoryContract' -import { Eip3770Address, SmartAccountVersion } from '../types' +import { Eip3770Address, SmartAccountVersion } from '../Types' export interface IEvmNetworkManagerTransaction { to: string diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts index eabcd559d..5ab7e6b5f 100644 --- a/packages/core-types/src/index.ts +++ b/packages/core-types/src/index.ts @@ -4,8 +4,8 @@ export * from './contracts/MultiSendCallOnlyContract' export * from './contracts/SmartWalletFactoryContract' export * from './contracts/EntryPointContract' export * from './evm-manager/EvmNetworkManager' -export * from './types' -export * from './chains.types' -export * from './transaction.types' -export * from './smart-account.types' -export * from './account-abstraction-types' +export * from './Types' +export * from './ChainsTypes' +export * from './TransactionTypes' +export * from './SmartAccountTypes' +export * from './AccountAbstractionTypes' diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 516fab960..0e12835fc 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -1,4 +1,4 @@ -import { ChainId } from './chains.types' +import { ChainId } from './ChainsTypes' export type SmartAccountVersion = '1.0.1' | '1.0.0' diff --git a/packages/ethers-lib/src/index.ts b/packages/ethers-lib/src/index.ts index 40032b623..b36d82991 100644 --- a/packages/ethers-lib/src/index.ts +++ b/packages/ethers-lib/src/index.ts @@ -1,5 +1,5 @@ import EvmNetworkManager, { EthersAdapterConfig } from './EvmNetworkManager' -import { IEthersTransactionOptions, IEthersTransactionResult } from './types' +import { IEthersTransactionOptions, IEthersTransactionResult } from './Types' export { SmartWalletContractV100__factory as SmartWalletFactoryV100 } from '../typechain/src/ethers-v5/v1.0.0/factories/SmartWalletContractV100__factory' export { SmartWalletContractV101__factory as SmartWalletFactoryV101 } from '../typechain/src/ethers-v5/v1.0.1/factories/SmartWalletContractV101__factory' diff --git a/packages/ethers-lib/src/utils/index.ts b/packages/ethers-lib/src/utils/index.ts index 6f4e03721..928af710b 100644 --- a/packages/ethers-lib/src/utils/index.ts +++ b/packages/ethers-lib/src/utils/index.ts @@ -1,5 +1,5 @@ import { ContractTransaction } from '@ethersproject/contracts' -import { IEthersTransactionOptions, IEthersTransactionResult } from '../types' +import { IEthersTransactionOptions, IEthersTransactionResult } from '../Types' export function sameString(str1: string, str2: string): boolean { return str1.toLowerCase() === str2.toLowerCase() diff --git a/packages/gas-estimator/src/generic-estimator.ts b/packages/gas-estimator/src/GenericEstimator.ts similarity index 100% rename from packages/gas-estimator/src/generic-estimator.ts rename to packages/gas-estimator/src/GenericEstimator.ts diff --git a/packages/gas-estimator/src/orderride-estimator.ts b/packages/gas-estimator/src/OverrideEstimator.ts similarity index 100% rename from packages/gas-estimator/src/orderride-estimator.ts rename to packages/gas-estimator/src/OverrideEstimator.ts diff --git a/packages/gas-estimator/src/smartaccount-estimator.ts b/packages/gas-estimator/src/SmartAccountEstimator.ts similarity index 100% rename from packages/gas-estimator/src/smartaccount-estimator.ts rename to packages/gas-estimator/src/SmartAccountEstimator.ts diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts index 1f3923ac7..7bef06c5b 100644 --- a/packages/node-client/src/NodeClient.ts +++ b/packages/node-client/src/NodeClient.ts @@ -19,7 +19,7 @@ import { SCWTransactionResponse } from './types/NodeClientTypes' import { getTxServiceBaseUrl } from './utils' -import { HttpMethod, sendRequest } from './utils/httpRequests' +import { HttpMethod, sendRequest } from './utils/HttpRequests' export interface NodeClientConfig { /** txServiceUrl - Safe Transaction Service URL */ txServiceUrl: string diff --git a/packages/relayer/src/local-relayer.ts b/packages/relayer/src/LocalRelayer.ts similarity index 98% rename from packages/relayer/src/local-relayer.ts rename to packages/relayer/src/LocalRelayer.ts index 1fc08578a..792633d38 100644 --- a/packages/relayer/src/local-relayer.ts +++ b/packages/relayer/src/LocalRelayer.ts @@ -8,7 +8,7 @@ import { RelayTransaction, RelayResponse } from '@biconomy-sdk/core-types' -import { MetaTransaction, encodeMultiSend } from './utils/multisend' +import { MetaTransaction, encodeMultiSend } from './utils/MultiSend' // You can configure your own signer with gas held to send out test transactions or some sponsored transactions by plugging it into SmartAccount package // Not meant to use for production environment for transaction ordering. diff --git a/packages/relayer/src/rest-relayer.ts b/packages/relayer/src/RestRelayer.ts similarity index 98% rename from packages/relayer/src/rest-relayer.ts rename to packages/relayer/src/RestRelayer.ts index 32665eb64..9fe17cfcf 100644 --- a/packages/relayer/src/rest-relayer.ts +++ b/packages/relayer/src/RestRelayer.ts @@ -11,8 +11,8 @@ import { GasLimit, ChainId } from '@biconomy-sdk/core-types' -import { MetaTransaction, encodeMultiSend } from './utils/multisend' -import { HttpMethod, sendRequest } from './utils/httpRequests' +import { MetaTransaction, encodeMultiSend } from './utils/MultiSend' +import { HttpMethod, sendRequest } from './utils/HttpRequests' import { ClientMessenger } from 'messaging-sdk' import WebSocket, { EventEmitter } from 'isomorphic-ws' diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index 8c41c1225..a074a907d 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -11,5 +11,5 @@ export interface IRelayer { // wait(metaTxnId: string | SignedTransactions, timeout: number): Promise } -export * from './local-relayer' -export * from './rest-relayer' +export * from './LocalRelayer' +export * from './RestRelayer' diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 54698a4e2..a4beb486b 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -153,9 +153,9 @@ class SmartAccount extends EventEmitter { // Should not break if we make this wallet connected provider optional (We'd have JsonRpcProvider / JsonRpcSender) this.provider = walletProvider this.signer = new SmartAccountSigner(this.provider) - this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backend_url }) + this.nodeClient = new NodeClient({ txServiceUrl: this.#smartAccountConfig.backendUrl }) this.relayer = new RestRelayer({ - url: this.#smartAccountConfig.relayer_url, + url: this.#smartAccountConfig.relayerUrl, socketServerUrl: this.#smartAccountConfig.socketServerUrl }) this.aaProvider = {} @@ -843,8 +843,8 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { activeNetworkId: ChainId.GOERLI, //Update later supportedNetworksIds: [ChainId.GOERLI, ChainId.POLYGON_MUMBAI], signType: SignTypeMethod.EIP712_SIGN, - backend_url: 'https://sdk-backend.staging.biconomy.io/v1', - relayer_url: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay', + backendUrl: 'https://sdk-backend.staging.biconomy.io/v1', + relayerUrl: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay', socketServerUrl: 'wss://sdk-testing-ws.staging.biconomy.io/connection/websocket', bundlerUrl: 'https://sdk-relayer.staging.biconomy.io/api/v1/relay', biconomySigningServiceUrl: diff --git a/packages/smart-account/tests/0-smartaccount.spec.ts b/packages/smart-account/tests/0-smartaccount.spec.ts index fec2cb551..0767a8413 100644 --- a/packages/smart-account/tests/0-smartaccount.spec.ts +++ b/packages/smart-account/tests/0-smartaccount.spec.ts @@ -1093,7 +1093,7 @@ describe('Wallet integration', function () { activeNetworkId: ChainId.GANACHE, supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, - //backend_url: "http://localhost:3000/v1" + //backendUrl: "http://localhost:3000/v1" }) const smartAccount = await wallet.init() @@ -1127,7 +1127,7 @@ describe('Wallet integration', function () { activeNetworkId: ChainId.GANACHE, supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names // walletProvider: ethnode.provider, - //backend_url: "http://localhost:3000/v1" + //backendUrl: "http://localhost:3000/v1" }) const smartAccount = await wallet.init() diff --git a/packages/transactions/src/account-utils.ts b/packages/transactions/src/AccountUtils.ts similarity index 100% rename from packages/transactions/src/account-utils.ts rename to packages/transactions/src/AccountUtils.ts diff --git a/packages/transactions/src/contract-utils.ts b/packages/transactions/src/ContractUtils.ts similarity index 100% rename from packages/transactions/src/contract-utils.ts rename to packages/transactions/src/ContractUtils.ts diff --git a/packages/transactions/src/transaction-manager.ts b/packages/transactions/src/TransactionManager.ts similarity index 99% rename from packages/transactions/src/transaction-manager.ts rename to packages/transactions/src/TransactionManager.ts index 34763519b..49bc50d21 100644 --- a/packages/transactions/src/transaction-manager.ts +++ b/packages/transactions/src/TransactionManager.ts @@ -1,4 +1,4 @@ -import { encodeTransfer } from './account-utils' +import { encodeTransfer } from './AccountUtils' import { DEFAULT_FEE_RECEIVER, IMetaTransaction, @@ -22,9 +22,9 @@ import { TransactionBatchDto, RefundTransactionBatchDto, RefundTransactionDto -} from './types' +} from './Types' import EvmNetworkManager from '@biconomy-sdk/ethers-lib' -import { Estimator } from './estimator' +import { Estimator } from './Estimator' import NodeClient, { EstimateRequiredTxGasDto, @@ -32,8 +32,8 @@ import NodeClient, { } from '@biconomy-sdk/node-client' import { IRelayer } from '@biconomy-sdk/relayer' -import ContractUtils from './contract-utils' -import { Utils } from './utils' +import ContractUtils from './ContractUtils' +import { Utils } from './Utils' class TransactionManager { // chainId: ChainId @@ -55,7 +55,7 @@ class TransactionManager { // Note: smart account is state specific so we may end up using chain specific transaction managers as discussed. this.nodeClient = nodeClient - // this.nodeClient = new NodeClient({ txServiceUrl: config.backend_url }) + // this.nodeClient = new NodeClient({ txServiceUrl: config.backendUrl }) this.contractUtils = contractUtils diff --git a/packages/transactions/src/estimator.ts b/packages/transactions/src/estimator.ts index 69c315358..5ee628a9a 100644 --- a/packages/transactions/src/estimator.ts +++ b/packages/transactions/src/estimator.ts @@ -1,7 +1,7 @@ import { ethers } from 'ethers' import { GasEstimator } from './assets' import NodeClient, { EstimateUndeployedContractGasDto } from '@biconomy-sdk/node-client' -import ContractUtils from './contract-utils' +import ContractUtils from './ContractUtils' import { EstimateSmartAccountDeploymentDto, IWalletTransaction, @@ -10,7 +10,7 @@ import { IFeeRefundV1_0_1, SmartAccountState } from '@biconomy-sdk/core-types' -import { PrepareRefundTransactionsDto, PrepareRefundTransactionDto } from './types' +import { PrepareRefundTransactionsDto, PrepareRefundTransactionDto } from './Types' export class Estimator { nodeClient!: NodeClient diff --git a/packages/transactions/src/index.ts b/packages/transactions/src/index.ts index 7e976665c..638fd7b52 100644 --- a/packages/transactions/src/index.ts +++ b/packages/transactions/src/index.ts @@ -1,12 +1,12 @@ // Review -import TransactionManager from './transaction-manager' -import ContractUtils from './contract-utils' +import TransactionManager from './TransactionManager' +import ContractUtils from './ContractUtils' export default TransactionManager -export * from './account-utils' -export * from './execution' -export * from './multisend' +export * from './AccountUtils' +export * from './Execution' +export * from './MultiSend' export { ContractUtils } diff --git a/packages/transactions/src/multisend.ts b/packages/transactions/src/multisend.ts index 3c8408810..0239ab922 100644 --- a/packages/transactions/src/multisend.ts +++ b/packages/transactions/src/multisend.ts @@ -1,5 +1,5 @@ import { Contract, utils } from 'ethers' -import { buildContractCall } from './execution' +import { buildContractCall } from './Execution' import { IMetaTransaction, IWalletTransaction } from '@biconomy-sdk/core-types' const encodeMetaTransaction = (tx: IMetaTransaction): string => { From 5e81eb6c566f8b39672a6709e7c9833a1702eb8f Mon Sep 17 00:00:00 2001 From: talha Date: Wed, 9 Nov 2022 10:06:12 +0500 Subject: [PATCH 0259/1247] stable social login and gasless trx --- package.json | 2 +- .../src/ERC4337EthersSigner.ts | 5 +- packages/smart-account/src/SmartAccount.ts | 6 +- packages/web3-auth/src/SocialLogin.tsx | 8 +- yarn.lock | 114 +++++++++--------- 5 files changed, 73 insertions(+), 62 deletions(-) diff --git a/package.json b/package.json index fa04f375f..7a5b33545 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "eslint-plugin-import": "^2.26.0", "hardhat": "^2.9.9", "lerna": "^5.5.4", - "nx": "^15.0.12", + "nx": "^15.0.13", "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1" diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 2912ae185..4f7b60694 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -57,6 +57,7 @@ export class ERC4337EthersSigner extends Signer { // This one is called by Contract. It signs the request and passes in to Provider to be sent. async sendTransaction( transaction: Deferrable, + isDelegate: boolean = false, engine?: any // EventEmitter ): Promise { const socketServerUrl = this.config.socketServerUrl @@ -77,7 +78,7 @@ export class ERC4337EthersSigner extends Signer { // eslint-disable-next-line @typescript-eslint/no-explicit-any const customData: any = transaction.customData console.log(customData) - let gasLimit = 1000000 + let gasLimit = 2000000 if (customData && customData.appliedGasLimit) { gasLimit = customData.appliedGasLimit console.log('gaslimit applied from custom data...', gasLimit) @@ -99,7 +100,7 @@ export class ERC4337EthersSigner extends Signer { data: tx.data?.toString() ?? '', value: tx.value, gasLimit: tx.gasLimit, - isDelegateCall: true // get from customData.isBatchedToMultiSend + isDelegateCall: isDelegate // get from customData.isBatchedToMultiSend }) console.log('signed userOp ', userOperation) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 54698a4e2..3a447cb2d 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -296,7 +296,11 @@ class SmartAccount extends EventEmitter { const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() await this.initializeContractsAtChain(chainId) - const response = await aaSigner.sendTransaction(transaction, this) + const multiSendContract = this.contractUtils.multiSendContract[chainId][version].getContract() + + const isDelegate = transaction.to === multiSendContract.address ? true: false + + const response = await aaSigner.sendTransaction(transaction, isDelegate, this) return response // todo: make sense of this response and return hash to the user diff --git a/packages/web3-auth/src/SocialLogin.tsx b/packages/web3-auth/src/SocialLogin.tsx index 5bd4a178c..0dd09d0ce 100644 --- a/packages/web3-auth/src/SocialLogin.tsx +++ b/packages/web3-auth/src/SocialLogin.tsx @@ -225,14 +225,14 @@ class SocialLogin { } } - logout() { + async logout() { if (!this.web3auth) { console.log('web3auth not initialized yet') return } - this.web3auth.logout().then(() => { - this.provider = null - }) + await this.web3auth.logout() + this.web3auth.clearCache() + this.provider = null } } diff --git a/yarn.lock b/yarn.lock index 5c6eb2649..d7cd59dac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -345,9 +345,9 @@ "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" "version" "0.2.3" -"@biconomy-sdk/account-abstraction@*", "@biconomy-sdk/account-abstraction@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/account-abstraction": +"@biconomy-sdk/account-abstraction@*", "@biconomy-sdk/account-abstraction@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/account-abstraction": "resolved" "file:packages/account-abstraction" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@account-abstraction/contracts" "^0.2.0" "@biconomy-sdk/common" "*" @@ -362,9 +362,9 @@ "hardhat" "^2.9.7" "solidity-coverage" "^0.7.22" -"@biconomy-sdk/common@*", "@biconomy-sdk/common@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/common": +"@biconomy-sdk/common@*", "@biconomy-sdk/common@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/common": "resolved" "file:packages/common" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@account-abstraction/contracts" "^0.2.0" "@biconomy-sdk/core-types" "*" @@ -374,9 +374,9 @@ "@openzeppelin/contracts" "^4.7.3" "ethers" "^5.7.0" -"@biconomy-sdk/core-types@*", "@biconomy-sdk/core-types@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/core-types": +"@biconomy-sdk/core-types@*", "@biconomy-sdk/core-types@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/core-types": "resolved" "file:packages/core-types" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@ethersproject/bignumber" "^5.6.0" "@ethersproject/contracts" "^5.6.0" @@ -384,9 +384,9 @@ "@gnosis.pm/safe-deployments" "^1.16.0" "web3-core" "^1.7.1" -"@biconomy-sdk/ethers-lib@*", "@biconomy-sdk/ethers-lib@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/ethers-lib": +"@biconomy-sdk/ethers-lib@*", "@biconomy-sdk/ethers-lib@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/ethers-lib": "resolved" "file:packages/ethers-lib" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@biconomy-sdk/core-types" "*" "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" @@ -395,15 +395,15 @@ "scw-contracts-v1.0.0" "npm:scw-contracts@1.0.0" "scw-contracts-v1.0.1" "npm:scw-contracts@1.0.9" -"@biconomy-sdk/gas-estimator@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/gas-estimator": +"@biconomy-sdk/gas-estimator@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/gas-estimator": "resolved" "file:packages/gas-estimator" - "version" "1.0.19" + "version" "1.0.20" dependencies: "ethers" "^5.7.1" -"@biconomy-sdk/node-client@*", "@biconomy-sdk/node-client@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/node-client": +"@biconomy-sdk/node-client@*", "@biconomy-sdk/node-client@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/node-client": "resolved" "file:packages/node-client" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@biconomy-sdk/core-types" "*" "@ethersproject/abstract-signer" "^5.6.0" @@ -411,9 +411,9 @@ "@nomiclabs/hardhat-ethers" "^2.1.0" "node-fetch" "^2.6.6" -"@biconomy-sdk/relayer@*", "@biconomy-sdk/relayer@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/relayer": +"@biconomy-sdk/relayer@*", "@biconomy-sdk/relayer@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/relayer": "resolved" "file:packages/relayer" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@biconomy-sdk/core-types" "*" "@ethersproject/providers" "^5.6.8" @@ -421,9 +421,9 @@ "isomorphic-ws" "^5.0.0" "messaging-sdk" "^0.0.3" -"@biconomy-sdk/smart-account@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/smart-account": +"@biconomy-sdk/smart-account@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/smart-account": "resolved" "file:packages/smart-account" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@0xsequence/network" "^0.41.0" "@biconomy-sdk/account-abstraction" "*" @@ -439,10 +439,11 @@ "@nomiclabs/hardhat-ethers" "^2.1.0" "@types/mocha" "^9.1.1" "concurrently" "^7.4.0" + "lodash" "^4.17.21" -"@biconomy-sdk/transactions@*", "@biconomy-sdk/transactions@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/transactions": +"@biconomy-sdk/transactions@*", "@biconomy-sdk/transactions@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/transactions": "resolved" "file:packages/transactions" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@biconomy-sdk/core-types" "*" "@biconomy-sdk/ethers-lib" "*" @@ -453,9 +454,9 @@ "ethereumjs-util" "^7.1.5" "ethers" "^5.6.9" -"@biconomy-sdk/web3-auth@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/web3-auth": +"@biconomy-sdk/web3-auth@file:/Users/talha/Documents/Biconomy/biconomy-client-sdk/packages/web3-auth": "resolved" "file:packages/web3-auth" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@toruslabs/eccrypto" "^1.1.8" "@toruslabs/openlogin-utils" "^2.1.0" @@ -2212,9 +2213,9 @@ "resolved" "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-1.0.2.tgz" "version" "1.0.2" -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.0": - "integrity" "sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz" +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.0": + "integrity" "sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA==" + "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz" "version" "0.1.0" "@nomicfoundation/solidity-analyzer@^0.1.0": @@ -2400,17 +2401,17 @@ "read-package-json-fast" "^2.0.3" "which" "^2.0.2" -"@nrwl/cli@15.0.11": - "integrity" "sha512-neRDAhm/8HT6+UCWH3idRZZ5bxcJtYjlHmxqglxv9ygR592CirlBLYRWuudiYxnu6QGBuIzLobvq0885wJFq2g==" - "resolved" "https://registry.npmjs.org/@nrwl/cli/-/cli-15.0.11.tgz" - "version" "15.0.11" +"@nrwl/cli@15.0.13": + "integrity" "sha512-w0oOP4v176CbD34+VytiAItIH3fOeiaccq7T2Un/hhx+/Q9mdO/VWyYZOKmp85uGodx/yZ6LyGW6rX0BjM0Rsg==" + "resolved" "https://registry.npmjs.org/@nrwl/cli/-/cli-15.0.13.tgz" + "version" "15.0.13" dependencies: - "nx" "15.0.11" + "nx" "15.0.13" "@nrwl/devkit@>=14.8.1 < 16": - "integrity" "sha512-+1bvJ2tjqwWLDR76iEL3qdC0+hS5C/kCkvQMzD2/giPZJS2yrVhAqRxvGxiPYZLXdSZL0Lggzb01nXywJOSRGw==" - "resolved" "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.0.11.tgz" - "version" "15.0.11" + "integrity" "sha512-esQoF8CZpKRCnvme0sXbkbM45NfXIpQK0Ur0MIx+Y16DnieTHhpbH94ugoL/COBsoMVwJ5MTRjKGIgHALQOikA==" + "resolved" "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.0.12.tgz" + "version" "15.0.12" dependencies: "@phenomnomnominal/tsquery" "4.1.1" "ejs" "^3.1.7" @@ -2418,12 +2419,12 @@ "semver" "7.3.4" "tslib" "^2.3.0" -"@nrwl/tao@15.0.11": - "integrity" "sha512-KiQB4i7AeY6xkhGeMnPgmpnjN60In9vj9ruW2W2+WZeQN/HxwCSh0tR0oPb1e92z8ncqw6guO4QYR7CbCHF3Yg==" - "resolved" "https://registry.npmjs.org/@nrwl/tao/-/tao-15.0.11.tgz" - "version" "15.0.11" +"@nrwl/tao@15.0.13": + "integrity" "sha512-z55RKnVOYsiABKFUIj+QBf6I4fUwTlObxJpgUJp0i3E97P3BgbzhTG1EhuBxLH8fGKrbOAPs0ct38Asl+zGZfQ==" + "resolved" "https://registry.npmjs.org/@nrwl/tao/-/tao-15.0.13.tgz" + "version" "15.0.13" dependencies: - "nx" "15.0.11" + "nx" "15.0.13" "@octokit/auth-token@^3.0.0": "integrity" "sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==" @@ -2532,14 +2533,14 @@ "@octokit/openapi-types" "^14.0.0" "@openzeppelin/contracts-upgradeable@^4.7.3": - "integrity" "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" - "resolved" "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz" - "version" "4.7.3" + "integrity" "sha512-5GeFgqMiDlqGT8EdORadp1ntGF0qzWZLmEY7Wbp/yVhN7/B3NNzCxujuI77ktlyG81N3CUZP8cZe3ZAQ/cW10w==" + "resolved" "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.0.tgz" + "version" "4.8.0" "@openzeppelin/contracts@^4.2.0", "@openzeppelin/contracts@^4.6.0", "@openzeppelin/contracts@^4.7.3": - "integrity" "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" - "resolved" "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz" - "version" "4.7.3" + "integrity" "sha512-AGuwhRRL+NaKx73WKRNzeCxOCOCxpaqF+kp8TJ89QzAipSwZy/NoflkWaL9bywXFRhIzXt8j38sfF7KBKCPWLw==" + "resolved" "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.0.tgz" + "version" "4.8.0" "@parcel/watcher@2.0.4": "integrity" "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==" @@ -3206,6 +3207,11 @@ dependencies: "keyv" "*" +"@types/lodash@^4.14.188": + "integrity" "sha512-zmEmF5OIM3rb7SbLCFYoQhO4dGt2FRM9AMkxvA3LaADOF1n8in/zGJlWji9fmafLoNyz+FoL6FE0SLtGIArD7w==" + "resolved" "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.188.tgz" + "version" "4.14.188" + "@types/long@^4.0.1": "integrity" "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" "resolved" "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz" @@ -10269,9 +10275,9 @@ "wrap-ansi" "^6.2.0" "loglevel@^1.8.0": - "integrity" "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==" - "resolved" "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz" - "version" "1.8.0" + "integrity" "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==" + "resolved" "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz" + "version" "1.8.1" "long@^4.0.0": "integrity" "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" @@ -11338,13 +11344,13 @@ "bn.js" "4.11.6" "strip-hex-prefix" "1.0.0" -"nx@^15.0.11", "nx@>= 14 <= 16", "nx@>=14.8.1 < 16", "nx@15.0.11": - "integrity" "sha512-4qmzj6wE2RJXyy3p/X33cisl4yYgUUvXZ6yUYbt1zxWdInYYse61yqyRR91jwLeKpgxL7plkIC5rPiqg4kNJDQ==" - "resolved" "https://registry.npmjs.org/nx/-/nx-15.0.11.tgz" - "version" "15.0.11" +"nx@^15.0.13", "nx@>= 14 <= 16", "nx@>=14.8.1 < 16", "nx@15.0.13": + "integrity" "sha512-5mJGWz91B9/sxzLjXdD+pmZTel54NeNNxFDis8OhtGDn6eRZ25qWsZNDgzqIDtwKn3c9gThAMHU4XH2OTgWUnA==" + "resolved" "https://registry.npmjs.org/nx/-/nx-15.0.13.tgz" + "version" "15.0.13" dependencies: - "@nrwl/cli" "15.0.11" - "@nrwl/tao" "15.0.11" + "@nrwl/cli" "15.0.13" + "@nrwl/tao" "15.0.13" "@parcel/watcher" "2.0.4" "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "^3.0.0-rc.18" @@ -13420,9 +13426,9 @@ "minipass" "^3.1.1" "stack-utils@^2.0.3": - "integrity" "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==" - "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" - "version" "2.0.5" + "integrity" "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==" + "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" + "version" "2.0.6" dependencies: "escape-string-regexp" "^2.0.0" From 0be806218e93b3283139e7671480e40a2a391248 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 9 Nov 2022 11:19:00 +0400 Subject: [PATCH 0260/1247] resolve conflicts --- lerna.json | 4 ---- package.json | 4 ---- packages/account-abstraction/package.json | 4 ---- packages/common/package.json | 4 ---- packages/core-types/package.json | 4 ---- packages/ethers-lib/package.json | 4 ---- packages/gas-estimator/package.json | 4 ---- packages/node-client/package.json | 4 ---- packages/relayer/package.json | 4 ---- packages/smart-account/package.json | 4 ---- packages/transactions/package.json | 4 ---- packages/web3-auth/package.json | 4 ---- 12 files changed, 48 deletions(-) diff --git a/lerna.json b/lerna.json index 9bb7b5f43..0744b645e 100644 --- a/lerna.json +++ b/lerna.json @@ -1,10 +1,6 @@ { "packages": ["packages/*"], "npmClient": "yarn", -<<<<<<< HEAD "version": "1.0.20", -======= - "version": "1.0.18", ->>>>>>> development "useWorkspaces": true } \ No newline at end of file diff --git a/package.json b/package.json index 489914b7c..fa04f375f 100644 --- a/package.json +++ b/package.json @@ -36,11 +36,7 @@ "eslint-plugin-import": "^2.26.0", "hardhat": "^2.9.9", "lerna": "^5.5.4", -<<<<<<< HEAD "nx": "^15.0.12", -======= - "nx": "^15.0.9", ->>>>>>> development "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1" diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index 531bda2f2..11ce6a69f 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -1,10 +1,6 @@ { "name": "@biconomy-sdk/account-abstraction", -<<<<<<< HEAD "version": "1.0.20", -======= - "version": "1.0.18", ->>>>>>> development "description": "Account abstraction APIs to prepare user operations ", "keywords": [ "account-abstraction", diff --git a/packages/common/package.json b/packages/common/package.json index a23f1400e..b7baec5be 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,10 +1,6 @@ { "name": "@biconomy-sdk/common", -<<<<<<< HEAD "version": "1.0.20", -======= - "version": "1.0.18", ->>>>>>> development "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 04a06e45e..4b338a1ac 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,10 +1,6 @@ { "name": "@biconomy-sdk/core-types", -<<<<<<< HEAD "version": "1.0.20", -======= - "version": "1.0.18", ->>>>>>> development "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 717032b53..d72f9b241 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,10 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", -<<<<<<< HEAD "version": "1.0.20", -======= - "version": "1.0.18", ->>>>>>> development "description": "Ethers library adapter to be used by Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index a877060ac..c7595bbeb 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -1,10 +1,6 @@ { "name": "@biconomy-sdk/gas-estimator", -<<<<<<< HEAD "version": "1.0.20", -======= - "version": "1.0.18", ->>>>>>> development "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", "keywords": [ "gas-estimation", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 8ecfb858e..ab6d0ba21 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,10 +1,6 @@ { "name": "@biconomy-sdk/node-client", -<<<<<<< HEAD "version": "1.0.20", -======= - "version": "1.0.18", ->>>>>>> development "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 4e4c46f64..8d5607b5b 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,10 +1,6 @@ { "name": "@biconomy-sdk/relayer", -<<<<<<< HEAD "version": "1.0.20", -======= - "version": "1.0.18", ->>>>>>> development "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index c6df5a450..d92658fd1 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,10 +1,6 @@ { "name": "@biconomy-sdk/smart-account", -<<<<<<< HEAD "version": "1.0.20", -======= - "version": "1.0.18", ->>>>>>> development "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 6940e4344..099d3a388 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,10 +1,6 @@ { "name": "@biconomy-sdk/transactions", -<<<<<<< HEAD "version": "1.0.20", -======= - "version": "1.0.18", ->>>>>>> development "description": "utils for sending all transaction legos", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index cb1921bb1..70bd5c4cf 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -1,10 +1,6 @@ { "name": "@biconomy-sdk/web3-auth", -<<<<<<< HEAD "version": "1.0.20", -======= - "version": "1.0.18", ->>>>>>> development "description": "web3-auth for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From a98a399bed1d742a745d5e7c3bcdec640db953c3 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 9 Nov 2022 11:19:10 +0400 Subject: [PATCH 0261/1247] nx version update --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fa04f375f..7a5b33545 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "eslint-plugin-import": "^2.26.0", "hardhat": "^2.9.9", "lerna": "^5.5.4", - "nx": "^15.0.12", + "nx": "^15.0.13", "prettier": "2.7.1", "rimraf": "^3.0.2", "ts-node": "^10.9.1" From baaa2b8bd414dcc99cc7efc215934b4c38b6a203 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 9 Nov 2022 11:38:26 +0400 Subject: [PATCH 0262/1247] empty commit --- yarn.lock | 252 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 129 insertions(+), 123 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5c6eb2649..02863e2ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -68,9 +68,9 @@ "semver" "^6.3.0" "@babel/generator@^7.20.1", "@babel/generator@^7.20.2", "@babel/generator@^7.7.2": - "integrity" "sha512-Wl5ilw2UD1+ZYprHVprxHZJCFeBWlzZYOovE4SDYLZnqCOD11j+0QzNeEWKLLTWM7nixrZEh7vNIyb76MyJg3A==" - "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.20.3.tgz" - "version" "7.20.3" + "integrity" "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz" + "version" "7.20.4" dependencies: "@babel/types" "^7.20.2" "@jridgewell/gen-mapping" "^0.3.2" @@ -345,9 +345,9 @@ "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" "version" "0.2.3" -"@biconomy-sdk/account-abstraction@*", "@biconomy-sdk/account-abstraction@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/account-abstraction": +"@biconomy-sdk/account-abstraction@*", "@biconomy-sdk/account-abstraction@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/account-abstraction": "resolved" "file:packages/account-abstraction" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@account-abstraction/contracts" "^0.2.0" "@biconomy-sdk/common" "*" @@ -362,9 +362,9 @@ "hardhat" "^2.9.7" "solidity-coverage" "^0.7.22" -"@biconomy-sdk/common@*", "@biconomy-sdk/common@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/common": +"@biconomy-sdk/common@*", "@biconomy-sdk/common@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/common": "resolved" "file:packages/common" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@account-abstraction/contracts" "^0.2.0" "@biconomy-sdk/core-types" "*" @@ -374,9 +374,9 @@ "@openzeppelin/contracts" "^4.7.3" "ethers" "^5.7.0" -"@biconomy-sdk/core-types@*", "@biconomy-sdk/core-types@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/core-types": +"@biconomy-sdk/core-types@*", "@biconomy-sdk/core-types@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/core-types": "resolved" "file:packages/core-types" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@ethersproject/bignumber" "^5.6.0" "@ethersproject/contracts" "^5.6.0" @@ -384,9 +384,9 @@ "@gnosis.pm/safe-deployments" "^1.16.0" "web3-core" "^1.7.1" -"@biconomy-sdk/ethers-lib@*", "@biconomy-sdk/ethers-lib@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/ethers-lib": +"@biconomy-sdk/ethers-lib@*", "@biconomy-sdk/ethers-lib@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/ethers-lib": "resolved" "file:packages/ethers-lib" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@biconomy-sdk/core-types" "*" "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" @@ -395,15 +395,15 @@ "scw-contracts-v1.0.0" "npm:scw-contracts@1.0.0" "scw-contracts-v1.0.1" "npm:scw-contracts@1.0.9" -"@biconomy-sdk/gas-estimator@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/gas-estimator": +"@biconomy-sdk/gas-estimator@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/gas-estimator": "resolved" "file:packages/gas-estimator" - "version" "1.0.19" + "version" "1.0.20" dependencies: "ethers" "^5.7.1" -"@biconomy-sdk/node-client@*", "@biconomy-sdk/node-client@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/node-client": +"@biconomy-sdk/node-client@*", "@biconomy-sdk/node-client@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/node-client": "resolved" "file:packages/node-client" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@biconomy-sdk/core-types" "*" "@ethersproject/abstract-signer" "^5.6.0" @@ -411,9 +411,9 @@ "@nomiclabs/hardhat-ethers" "^2.1.0" "node-fetch" "^2.6.6" -"@biconomy-sdk/relayer@*", "@biconomy-sdk/relayer@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/relayer": +"@biconomy-sdk/relayer@*", "@biconomy-sdk/relayer@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/relayer": "resolved" "file:packages/relayer" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@biconomy-sdk/core-types" "*" "@ethersproject/providers" "^5.6.8" @@ -421,9 +421,9 @@ "isomorphic-ws" "^5.0.0" "messaging-sdk" "^0.0.3" -"@biconomy-sdk/smart-account@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/smart-account": +"@biconomy-sdk/smart-account@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/smart-account": "resolved" "file:packages/smart-account" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@0xsequence/network" "^0.41.0" "@biconomy-sdk/account-abstraction" "*" @@ -439,10 +439,11 @@ "@nomiclabs/hardhat-ethers" "^2.1.0" "@types/mocha" "^9.1.1" "concurrently" "^7.4.0" + "lodash" "^4.17.21" -"@biconomy-sdk/transactions@*", "@biconomy-sdk/transactions@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/transactions": +"@biconomy-sdk/transactions@*", "@biconomy-sdk/transactions@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/transactions": "resolved" "file:packages/transactions" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@biconomy-sdk/core-types" "*" "@biconomy-sdk/ethers-lib" "*" @@ -453,9 +454,9 @@ "ethereumjs-util" "^7.1.5" "ethers" "^5.6.9" -"@biconomy-sdk/web3-auth@file:/Users/aman/Desktop/work/bico/biconomy-client-sdk/packages/web3-auth": +"@biconomy-sdk/web3-auth@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/web3-auth": "resolved" "file:packages/web3-auth" - "version" "1.0.19" + "version" "1.0.20" dependencies: "@toruslabs/eccrypto" "^1.1.8" "@toruslabs/openlogin-utils" "^2.1.0" @@ -2400,17 +2401,17 @@ "read-package-json-fast" "^2.0.3" "which" "^2.0.2" -"@nrwl/cli@15.0.11": - "integrity" "sha512-neRDAhm/8HT6+UCWH3idRZZ5bxcJtYjlHmxqglxv9ygR592CirlBLYRWuudiYxnu6QGBuIzLobvq0885wJFq2g==" - "resolved" "https://registry.npmjs.org/@nrwl/cli/-/cli-15.0.11.tgz" - "version" "15.0.11" +"@nrwl/cli@15.0.13": + "integrity" "sha512-w0oOP4v176CbD34+VytiAItIH3fOeiaccq7T2Un/hhx+/Q9mdO/VWyYZOKmp85uGodx/yZ6LyGW6rX0BjM0Rsg==" + "resolved" "https://registry.npmjs.org/@nrwl/cli/-/cli-15.0.13.tgz" + "version" "15.0.13" dependencies: - "nx" "15.0.11" + "nx" "15.0.13" "@nrwl/devkit@>=14.8.1 < 16": - "integrity" "sha512-+1bvJ2tjqwWLDR76iEL3qdC0+hS5C/kCkvQMzD2/giPZJS2yrVhAqRxvGxiPYZLXdSZL0Lggzb01nXywJOSRGw==" - "resolved" "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.0.11.tgz" - "version" "15.0.11" + "integrity" "sha512-/8k7wbBRFf2UC+T4F+vWMy3bfSGi+uK6RwXk53moLq3nxehXaQhRiCqasC6VJFUw3zK6luu2T7xkPUlA9K9l4w==" + "resolved" "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.0.13.tgz" + "version" "15.0.13" dependencies: "@phenomnomnominal/tsquery" "4.1.1" "ejs" "^3.1.7" @@ -2418,12 +2419,12 @@ "semver" "7.3.4" "tslib" "^2.3.0" -"@nrwl/tao@15.0.11": - "integrity" "sha512-KiQB4i7AeY6xkhGeMnPgmpnjN60In9vj9ruW2W2+WZeQN/HxwCSh0tR0oPb1e92z8ncqw6guO4QYR7CbCHF3Yg==" - "resolved" "https://registry.npmjs.org/@nrwl/tao/-/tao-15.0.11.tgz" - "version" "15.0.11" +"@nrwl/tao@15.0.13": + "integrity" "sha512-z55RKnVOYsiABKFUIj+QBf6I4fUwTlObxJpgUJp0i3E97P3BgbzhTG1EhuBxLH8fGKrbOAPs0ct38Asl+zGZfQ==" + "resolved" "https://registry.npmjs.org/@nrwl/tao/-/tao-15.0.13.tgz" + "version" "15.0.13" dependencies: - "nx" "15.0.11" + "nx" "15.0.13" "@octokit/auth-token@^3.0.0": "integrity" "sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==" @@ -2532,14 +2533,14 @@ "@octokit/openapi-types" "^14.0.0" "@openzeppelin/contracts-upgradeable@^4.7.3": - "integrity" "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==" - "resolved" "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz" - "version" "4.7.3" + "integrity" "sha512-5GeFgqMiDlqGT8EdORadp1ntGF0qzWZLmEY7Wbp/yVhN7/B3NNzCxujuI77ktlyG81N3CUZP8cZe3ZAQ/cW10w==" + "resolved" "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.0.tgz" + "version" "4.8.0" "@openzeppelin/contracts@^4.2.0", "@openzeppelin/contracts@^4.6.0", "@openzeppelin/contracts@^4.7.3": - "integrity" "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" - "resolved" "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz" - "version" "4.7.3" + "integrity" "sha512-AGuwhRRL+NaKx73WKRNzeCxOCOCxpaqF+kp8TJ89QzAipSwZy/NoflkWaL9bywXFRhIzXt8j38sfF7KBKCPWLw==" + "resolved" "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.0.tgz" + "version" "4.8.0" "@parcel/watcher@2.0.4": "integrity" "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==" @@ -3206,6 +3207,11 @@ dependencies: "keyv" "*" +"@types/lodash@^4.14.188": + "integrity" "sha512-zmEmF5OIM3rb7SbLCFYoQhO4dGt2FRM9AMkxvA3LaADOF1n8in/zGJlWji9fmafLoNyz+FoL6FE0SLtGIArD7w==" + "resolved" "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.188.tgz" + "version" "4.14.188" + "@types/long@^4.0.1": "integrity" "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" "resolved" "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz" @@ -3677,55 +3683,55 @@ dependencies: "@walletconnect/window-getters" "^1.0.0" -"@web3auth/base-evm-adapter@^3.0.0": - "integrity" "sha512-B3t5LnEnA+0EXvIudbsFGTtJ/Kg3HgQWjt6lKRT/ptTZjrq6hC1UQxdQKdsqMW1MQQs922VzaVXDdrQwtbdxMg==" - "resolved" "https://registry.npmjs.org/@web3auth/base-evm-adapter/-/base-evm-adapter-3.0.0.tgz" - "version" "3.0.0" +"@web3auth/base-evm-adapter@^3.0.4": + "integrity" "sha512-6Cr8HZOzlPJRtKPW34Mp+ymxxgLy+5lgGXUQvSh0N78hWFVDHLiAe6axGMCty0ovkuYW5fw7OOnYE5pI4Kx6Ag==" + "resolved" "https://registry.npmjs.org/@web3auth/base-evm-adapter/-/base-evm-adapter-3.0.4.tgz" + "version" "3.0.4" dependencies: - "@web3auth/base" "^3.0.0" + "@web3auth/base" "^3.0.4" -"@web3auth/base-plugin@^3.0.0": - "integrity" "sha512-B4qXg56XeCzZtQOZBKeOdY2INFWF1/NEUxNo9z3hRyo+ogLHiZmK85WyPgNk2XheaUUgWEJOzTY8RucLCGXeXw==" - "resolved" "https://registry.npmjs.org/@web3auth/base-plugin/-/base-plugin-3.0.0.tgz" - "version" "3.0.0" +"@web3auth/base-plugin@^3.0.4": + "integrity" "sha512-GOpYfNYLC9VerjHR+2VZXv/3qEDeDfGbQqDmDZ1hzDpK8KxyKo21VpRp30PinFUVwrXUYPCoGCGZbb5WQPDVtw==" + "resolved" "https://registry.npmjs.org/@web3auth/base-plugin/-/base-plugin-3.0.4.tgz" + "version" "3.0.4" dependencies: - "@web3auth/base" "^3.0.0" + "@web3auth/base" "^3.0.4" -"@web3auth/base-provider@^3.0.0": - "integrity" "sha512-9DlGvPySNREOKrR1tb6MueLTxUZn2L9x5+vOoPz3xsaFKawZFsHbuk1QDm96bs3d2LuUdozT9J4x6AnjfrMW6Q==" - "resolved" "https://registry.npmjs.org/@web3auth/base-provider/-/base-provider-3.0.0.tgz" - "version" "3.0.0" +"@web3auth/base-provider@^3.0.4": + "integrity" "sha512-G7AogUkIzXJWXTRxdJu+UA0zrYhH/F/AKd/lGjsgofetwlFRO4Rb/NiUq8QJo9n99hpY9+wnBXUr7ukxBAbxMg==" + "resolved" "https://registry.npmjs.org/@web3auth/base-provider/-/base-provider-3.0.4.tgz" + "version" "3.0.4" dependencies: "@toruslabs/base-controllers" "^2.2.6" "@toruslabs/openlogin-jrpc" "^2.6.0" - "@web3auth/base" "^3.0.0" + "@web3auth/base" "^3.0.4" "eth-rpc-errors" "^4.0.3" "json-rpc-random-id" "^1.0.1" -"@web3auth/base@^3.0.0": - "integrity" "sha512-7uYvxCgNhRpyQ3Kt6wfFYOwGY6HK++TtDwQ4s5VfI4gClEylwbR+9OWzt/XriixqxYp4n8WwX0nNsuSc7gGnNw==" - "resolved" "https://registry.npmjs.org/@web3auth/base/-/base-3.0.0.tgz" - "version" "3.0.0" +"@web3auth/base@^3.0.0", "@web3auth/base@^3.0.4": + "integrity" "sha512-AAwDE7aPFrSSSpbwvSVHx1m4owY+6MfPv0BObyg695tfeIR1MJt5fhjbd4GDc72EXAOaKMacuf8yIWesFpQzMg==" + "resolved" "https://registry.npmjs.org/@web3auth/base/-/base-3.0.4.tgz" + "version" "3.0.4" dependencies: "@toruslabs/http-helpers" "^3.2.0" "@toruslabs/openlogin-jrpc" "^2.6.0" "jwt-decode" "^3.1.2" - "loglevel" "^1.8.0" - "ts-custom-error" "^3.2.2" + "loglevel" "^1.8.1" + "ts-custom-error" "^3.3.1" "@web3auth/core@^3.0.0": - "integrity" "sha512-OCXbv0OOxl5UCIq39Fo6II1zX9UMevufGWACMd7yo9ekxiRGulj2QUUpGJAHhTOyjSFX+ZY0sWRoqRHMPB732g==" - "resolved" "https://registry.npmjs.org/@web3auth/core/-/core-3.0.0.tgz" - "version" "3.0.0" + "integrity" "sha512-/f1PIWzSn+EIw70jFZlMFk1j4VXyHW8MgL+zmp4KQ1tu0EfNJKOZkAan+K75lSdl1NzXfQNXFjq5h9CZHOoFjQ==" + "resolved" "https://registry.npmjs.org/@web3auth/core/-/core-3.0.4.tgz" + "version" "3.0.4" dependencies: "@toruslabs/openlogin-jrpc" "^2.6.0" - "@web3auth/base" "^3.0.0" - "@web3auth/base-plugin" "^3.0.0" + "@web3auth/base" "^3.0.4" + "@web3auth/base-plugin" "^3.0.4" -"@web3auth/ethereum-provider@^3.0.3": - "integrity" "sha512-2XYPeCfBcd0R9IOzMQyEdW+3+fkHFUod+iZKWgKVNK3cmz8FvmCuP0heHnoKL8E3OIw8pjx/+M8pMIBKPD5bMQ==" - "resolved" "https://registry.npmjs.org/@web3auth/ethereum-provider/-/ethereum-provider-3.0.3.tgz" - "version" "3.0.3" +"@web3auth/ethereum-provider@^3.0.4": + "integrity" "sha512-rZJ7Fo9+uHQxR9EZKYNx0t8AKr+XZd9G9Gb3QakqWZ3CVd2NfPmzBgNcBufS5SRXKtBXn26mANeMcVhGoRM9fA==" + "resolved" "https://registry.npmjs.org/@web3auth/ethereum-provider/-/ethereum-provider-3.0.4.tgz" + "version" "3.0.4" dependencies: "@ethereumjs/common" "^3.0.1" "@ethereumjs/tx" "^4.0.1" @@ -3735,8 +3741,8 @@ "@toruslabs/http-helpers" "^3.2.0" "@toruslabs/openlogin-jrpc" "^2.6.0" "@walletconnect/types" "~1.8.0" - "@web3auth/base" "^3.0.0" - "@web3auth/base-provider" "^3.0.0" + "@web3auth/base" "^3.0.4" + "@web3auth/base-provider" "^3.0.4" "assert" "^2.0.0" "bignumber.js" "^9.1.0" "bn.js" "^5.2.1" @@ -3744,54 +3750,54 @@ "jsonschema" "^1.4.1" "@web3auth/metamask-adapter@^3.0.0": - "integrity" "sha512-Wd1VSFxmE4Rpji/BocL+suGJJPTIwYwuwLrKAwB0WwZO8ECbFMsrj4z8TDwEHpEsMuhGtJVHkINEv1NGeJFF+g==" - "resolved" "https://registry.npmjs.org/@web3auth/metamask-adapter/-/metamask-adapter-3.0.0.tgz" - "version" "3.0.0" + "integrity" "sha512-n5gaD6HWPMcE+pzFfGDYeeom3k0FAj/kKwBano1kvhbrbyX/mQUQpcyML/yfdy1O3bDsKag4sysOc47ypwbupg==" + "resolved" "https://registry.npmjs.org/@web3auth/metamask-adapter/-/metamask-adapter-3.0.4.tgz" + "version" "3.0.4" dependencies: "@metamask/detect-provider" "^2.0.0" - "@web3auth/base" "^3.0.0" - "@web3auth/base-evm-adapter" "^3.0.0" + "@web3auth/base" "^3.0.4" + "@web3auth/base-evm-adapter" "^3.0.4" "@web3auth/openlogin-adapter@^3.0.3": - "integrity" "sha512-SP+U8DiL+MWwwRBgNLQGF+eA5qmTc+0CufTQb5owAY6CtVzwcV9hdLWqXt4ota3xmUyOipTiyDVsQ+LOPWrZkw==" - "resolved" "https://registry.npmjs.org/@web3auth/openlogin-adapter/-/openlogin-adapter-3.0.3.tgz" - "version" "3.0.3" + "integrity" "sha512-3eg39aCK+YOfJ2dIftbf51ZxB5kxw5VcEQLZfMRKBWZHZON4EpCVXKYkmYMGBz9PB6/Z+uv52TAHnjFn8CRwPw==" + "resolved" "https://registry.npmjs.org/@web3auth/openlogin-adapter/-/openlogin-adapter-3.0.4.tgz" + "version" "3.0.4" dependencies: "@toruslabs/openlogin" "^2.7.0" "@toruslabs/openlogin-ed25519" "^2.0.0" - "@web3auth/base" "^3.0.0" - "@web3auth/base-provider" "^3.0.0" - "@web3auth/ethereum-provider" "^3.0.3" - "@web3auth/solana-provider" "^3.0.3" + "@web3auth/base" "^3.0.4" + "@web3auth/base-provider" "^3.0.4" + "@web3auth/ethereum-provider" "^3.0.4" + "@web3auth/solana-provider" "^3.0.4" "lodash.merge" "^4.6.2" -"@web3auth/solana-provider@^3.0.3": - "integrity" "sha512-VQ9rdVitmHAqQIhlRqGkyUWzm48M6dIJagld/N7E7Vlv0sxvDM9qxCFUjnf3ATbFbwnfP0KVcYVk69PAAkUcHA==" - "resolved" "https://registry.npmjs.org/@web3auth/solana-provider/-/solana-provider-3.0.3.tgz" - "version" "3.0.3" +"@web3auth/solana-provider@^3.0.4": + "integrity" "sha512-uOPxXKtdm3Wyau5Iten5J7ERLMt1UxaXk3Nm/LjioDTix2s94HUE0Tc1DXPL9R1ZQRJuMlwVpnWion2McIYvjg==" + "resolved" "https://registry.npmjs.org/@web3auth/solana-provider/-/solana-provider-3.0.4.tgz" + "version" "3.0.4" dependencies: "@solana/web3.js" "^1.66.2" "@toruslabs/base-controllers" "^2.2.6" "@toruslabs/openlogin-jrpc" "^2.6.0" "@toruslabs/tweetnacl-js" "^1.0.3" - "@web3auth/base" "^3.0.0" - "@web3auth/base-provider" "^3.0.0" + "@web3auth/base" "^3.0.4" + "@web3auth/base-provider" "^3.0.4" "bn.js" "^5.2.1" "bs58" "^4.0.1" "eth-rpc-errors" "^4.0.3" "json-rpc-random-id" "^1.0.1" "@web3auth/ui@^3.0.3": - "integrity" "sha512-Kms0ree8+Pz+YF3kziNey46xIj86b7GNCFjP1NdQptpnyy8ytsKmY4AWqgBoPkaH1sOYtEYUOI2gdAsz6e5QWQ==" - "resolved" "https://registry.npmjs.org/@web3auth/ui/-/ui-3.0.3.tgz" - "version" "3.0.3" + "integrity" "sha512-4FNQEalJKNHtG6CgGfoNTxN+Apex3R1tSV9Re9Y+DbB1PCyqbklLQw/xjMOYzfwOkkjDqRROUNaGofLkJjjnAw==" + "resolved" "https://registry.npmjs.org/@web3auth/ui/-/ui-3.0.4.tgz" + "version" "3.0.4" dependencies: "@toruslabs/openlogin" "^2.7.0" "@toruslabs/openlogin-jrpc" "^2.6.0" - "@web3auth/base" "^3.0.0" + "@web3auth/base" "^3.0.4" "bowser" "^2.11.0" "classnames" "^2.3.2" - "i18next" "^22.0.3" + "i18next" "^22.0.4" "lodash.clonedeep" "^4.5.0" "lodash.merge" "^4.6.2" "qr.js" "^0.0.0" @@ -3801,15 +3807,15 @@ "react-qr-code" "^2.0.8" "@web3auth/wallet-connect-v1-adapter@^3.0.3": - "integrity" "sha512-GA2KKDQQ561d9k3+APRLSa++h/AJRuFqA+M/iktDO1ivyvfQpYWFiSG4lV8XZ+HNTT4ywiB3rO8/1nBZe2sJyg==" - "resolved" "https://registry.npmjs.org/@web3auth/wallet-connect-v1-adapter/-/wallet-connect-v1-adapter-3.0.3.tgz" - "version" "3.0.3" + "integrity" "sha512-S+bJ5MnYzR0hyHpY1/gdgyotfKUF8+nM3TbLmRisxx52Ci40xnEKQltoA834KMuuFvlnkpBHYooeA3fNumii1Q==" + "resolved" "https://registry.npmjs.org/@web3auth/wallet-connect-v1-adapter/-/wallet-connect-v1-adapter-3.0.4.tgz" + "version" "3.0.4" dependencies: "@walletconnect/client" "~1.8.0" "@walletconnect/types" "~1.8.0" - "@web3auth/base" "^3.0.0" - "@web3auth/base-evm-adapter" "^3.0.0" - "@web3auth/ethereum-provider" "^3.0.3" + "@web3auth/base" "^3.0.4" + "@web3auth/base-evm-adapter" "^3.0.4" + "@web3auth/ethereum-provider" "^3.0.4" "@webassemblyjs/ast@1.11.1": "integrity" "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==" @@ -8649,7 +8655,7 @@ "resolved" "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz" "version" "7.0.4" -"i18next@^22.0.3", "i18next@>= 19.0.0": +"i18next@^22.0.4", "i18next@>= 19.0.0": "integrity" "sha512-TOp7BTMKDbUkOHMzDlVsCYWpyaFkKakrrO3HNXfSz4EeJaWwnBScRmgQSTaWHScXVHBUFXTvShrCW8uryBYFcg==" "resolved" "https://registry.npmjs.org/i18next/-/i18next-22.0.4.tgz" "version" "22.0.4" @@ -9727,11 +9733,11 @@ "version" "1.0.1" "json-stable-stringify@^1.0.1": - "integrity" "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==" - "resolved" "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" - "version" "1.0.1" + "integrity" "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==" + "resolved" "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz" + "version" "1.0.2" dependencies: - "jsonify" "~0.0.0" + "jsonify" "^0.0.1" "json-stringify-nice@^1.1.4": "integrity" "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==" @@ -9783,7 +9789,7 @@ optionalDependencies: "graceful-fs" "^4.1.6" -"jsonify@~0.0.0": +"jsonify@^0.0.1": "integrity" "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==" "resolved" "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz" "version" "0.0.1" @@ -10268,10 +10274,10 @@ "slice-ansi" "^4.0.0" "wrap-ansi" "^6.2.0" -"loglevel@^1.8.0": - "integrity" "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==" - "resolved" "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz" - "version" "1.8.0" +"loglevel@^1.8.0", "loglevel@^1.8.1": + "integrity" "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==" + "resolved" "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz" + "version" "1.8.1" "long@^4.0.0": "integrity" "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" @@ -11338,13 +11344,13 @@ "bn.js" "4.11.6" "strip-hex-prefix" "1.0.0" -"nx@^15.0.11", "nx@>= 14 <= 16", "nx@>=14.8.1 < 16", "nx@15.0.11": - "integrity" "sha512-4qmzj6wE2RJXyy3p/X33cisl4yYgUUvXZ6yUYbt1zxWdInYYse61yqyRR91jwLeKpgxL7plkIC5rPiqg4kNJDQ==" - "resolved" "https://registry.npmjs.org/nx/-/nx-15.0.11.tgz" - "version" "15.0.11" +"nx@^15.0.13", "nx@>= 14 <= 16", "nx@>=14.8.1 < 16", "nx@15.0.13": + "integrity" "sha512-5mJGWz91B9/sxzLjXdD+pmZTel54NeNNxFDis8OhtGDn6eRZ25qWsZNDgzqIDtwKn3c9gThAMHU4XH2OTgWUnA==" + "resolved" "https://registry.npmjs.org/nx/-/nx-15.0.13.tgz" + "version" "15.0.13" dependencies: - "@nrwl/cli" "15.0.11" - "@nrwl/tao" "15.0.11" + "@nrwl/cli" "15.0.13" + "@nrwl/tao" "15.0.13" "@parcel/watcher" "2.0.4" "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "^3.0.0-rc.18" @@ -13420,9 +13426,9 @@ "minipass" "^3.1.1" "stack-utils@^2.0.3": - "integrity" "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==" - "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" - "version" "2.0.5" + "integrity" "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==" + "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" + "version" "2.0.6" dependencies: "escape-string-regexp" "^2.0.0" @@ -13970,7 +13976,7 @@ "command-line-usage" "^6.1.0" "string-format" "^2.0.0" -"ts-custom-error@^3.2.2": +"ts-custom-error@^3.3.1": "integrity" "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==" "resolved" "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.3.1.tgz" "version" "3.3.1" From 2dc3c126575e120a31dc49392306aacbc9151e26 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 9 Nov 2022 11:39:15 +0400 Subject: [PATCH 0263/1247] remove lockfile --- yarn.lock | 15606 ---------------------------------------------------- 1 file changed, 15606 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 247ba1b88..000000000 --- a/yarn.lock +++ /dev/null @@ -1,15606 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@0xsequence/network@^0.41.0": - "integrity" "sha512-dRq0ywRKz3CA6c1OSzcD3SJXt35uPMc7OA9oj+tcpI/2FtbGkzsT5fwTDiKU86RYwiXg3GthS6a5j7LIJmVK0Q==" - "resolved" "https://registry.npmjs.org/@0xsequence/network/-/network-0.41.3.tgz" - "version" "0.41.3" - dependencies: - "@0xsequence/utils" "^0.41.3" - "@ethersproject/providers" "^5.5.1" - "ethers" "^5.5.2" - -"@0xsequence/utils@^0.41.3": - "integrity" "sha512-WY6x8Ja35eRcC69kK1MdvSYMSG8MIcSCEmJPUVYc31HsBkDCpjcroQqSl3MsxoP7YTv69XUbUdarReH9wA40lg==" - "resolved" "https://registry.npmjs.org/@0xsequence/utils/-/utils-0.41.3.tgz" - "version" "0.41.3" - dependencies: - "@ethersproject/abstract-signer" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "ethers" "^5.5.2" - "js-base64" "^3.7.2" - -"@account-abstraction/contracts@^0.2.0": - "integrity" "sha512-CbPYA7o55u1S5Fee5qIWffD/4dxJ7v+86Si8TOUOE/tAMUWP+nzU1kHKUwFrM/HT8OxAQpeXccCD4UtROLtfwA==" - "resolved" "https://registry.npmjs.org/@account-abstraction/contracts/-/contracts-0.2.0.tgz" - "version" "0.2.0" - -"@ampproject/remapping@^2.1.0": - "integrity" "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" - "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": - "integrity" "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" - "version" "7.18.6" - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.0": - "integrity" "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==" - "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz" - "version" "7.20.1" - -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.4.0-0", "@babel/core@^7.8.0": - "integrity" "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==" - "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz" - "version" "7.20.2" - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.2" - "@babel/helper-compilation-targets" "^7.20.0" - "@babel/helper-module-transforms" "^7.20.2" - "@babel/helpers" "^7.20.1" - "@babel/parser" "^7.20.2" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.1" - "@babel/types" "^7.20.2" - "convert-source-map" "^1.7.0" - "debug" "^4.1.0" - "gensync" "^1.0.0-beta.2" - "json5" "^2.2.1" - "semver" "^6.3.0" - -"@babel/generator@^7.20.1", "@babel/generator@^7.20.2", "@babel/generator@^7.7.2": - "integrity" "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==" - "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz" - "version" "7.20.4" - dependencies: - "@babel/types" "^7.20.2" - "@jridgewell/gen-mapping" "^0.3.2" - "jsesc" "^2.5.1" - -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.20.0": - "integrity" "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz" - "version" "7.20.0" - dependencies: - "@babel/compat-data" "^7.20.0" - "@babel/helper-validator-option" "^7.18.6" - "browserslist" "^4.21.3" - "semver" "^6.3.0" - -"@babel/helper-define-polyfill-provider@^0.3.3": - "integrity" "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" - "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" - "version" "0.3.3" - dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - "debug" "^4.1.1" - "lodash.debounce" "^4.0.8" - "resolve" "^1.14.2" - "semver" "^6.1.2" - -"@babel/helper-environment-visitor@^7.18.9": - "integrity" "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" - "version" "7.18.9" - -"@babel/helper-function-name@^7.19.0": - "integrity" "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==" - "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" - "version" "7.19.0" - dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" - -"@babel/helper-hoist-variables@^7.18.6": - "integrity" "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" - "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" - "version" "7.18.6" - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-imports@^7.18.6": - "integrity" "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" - "version" "7.18.6" - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.20.2": - "integrity" "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz" - "version" "7.20.2" - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.1" - "@babel/types" "^7.20.2" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0": - "integrity" "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz" - "version" "7.20.2" - -"@babel/helper-simple-access@^7.20.2": - "integrity" "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==" - "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz" - "version" "7.20.2" - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-split-export-declaration@^7.18.6": - "integrity" "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" - "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" - "version" "7.18.6" - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.19.4": - "integrity" "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz" - "version" "7.19.4" - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - "integrity" "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" - "version" "7.19.1" - -"@babel/helper-validator-option@^7.18.6": - "integrity" "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" - "version" "7.18.6" - -"@babel/helpers@^7.20.1": - "integrity" "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==" - "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz" - "version" "7.20.1" - dependencies: - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.1" - "@babel/types" "^7.20.0" - -"@babel/highlight@^7.18.6": - "integrity" "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" - "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" - "version" "7.18.6" - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - "chalk" "^2.0.0" - "js-tokens" "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.20.1", "@babel/parser@^7.20.2": - "integrity" "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==" - "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz" - "version" "7.20.3" - -"@babel/plugin-syntax-async-generators@^7.8.4": - "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - "version" "7.8.4" - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - "integrity" "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" - "version" "7.8.3" - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.8.3": - "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - "version" "7.12.13" - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-import-meta@^7.8.3": - "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" - "version" "7.10.4" - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - "version" "7.8.3" - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - "version" "7.10.4" - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - "version" "7.8.3" - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.3": - "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - "version" "7.10.4" - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - "version" "7.8.3" - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - "version" "7.8.3" - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - "version" "7.8.3" - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.7.2": - "integrity" "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz" - "version" "7.20.0" - dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - -"@babel/plugin-transform-runtime@^7.5.5": - "integrity" "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz" - "version" "7.19.6" - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - "babel-plugin-polyfill-corejs2" "^0.3.3" - "babel-plugin-polyfill-corejs3" "^0.6.0" - "babel-plugin-polyfill-regenerator" "^0.4.1" - "semver" "^6.3.0" - -"@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.19.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.x", "@babel/runtime@7.x": - "integrity" "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==" - "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz" - "version" "7.20.1" - dependencies: - "regenerator-runtime" "^0.13.10" - -"@babel/template@^7.18.10", "@babel/template@^7.3.3": - "integrity" "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==" - "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" - "version" "7.18.10" - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.10" - "@babel/types" "^7.18.10" - -"@babel/traverse@^7.20.1", "@babel/traverse@^7.7.2": - "integrity" "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==" - "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz" - "version" "7.20.1" - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.1" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.1" - "@babel/types" "^7.20.0" - "debug" "^4.1.0" - "globals" "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - "integrity" "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==" - "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz" - "version" "7.20.2" - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - "to-fast-properties" "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - "integrity" "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" - "version" "0.2.3" - -"@biconomy-sdk/account-abstraction@*", "@biconomy-sdk/account-abstraction@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/account-abstraction": - "resolved" "file:packages/account-abstraction" - "version" "1.0.20" - dependencies: - "@account-abstraction/contracts" "^0.2.0" - "@biconomy-sdk/common" "*" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/providers" "^5.7.0" - "@nomicfoundation/hardhat-network-helpers" "^1.0.6" - "@nomiclabs/hardhat-ethers" "^2.0.0" - "ethers" "^5.7.0" - "hardhat" "^2.9.7" - "solidity-coverage" "^0.7.22" - -"@biconomy-sdk/common@*", "@biconomy-sdk/common@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/common": - "resolved" "file:packages/common" - "version" "1.0.20" - dependencies: - "@account-abstraction/contracts" "^0.2.0" - "@biconomy-sdk/core-types" "*" - "@ethersproject/abi" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/providers" "^5.7.0" - "@openzeppelin/contracts" "^4.7.3" - "ethers" "^5.7.0" - -"@biconomy-sdk/core-types@*", "@biconomy-sdk/core-types@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/core-types": - "resolved" "file:packages/core-types" - "version" "1.0.20" - dependencies: - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/contracts" "^5.6.0" - "@ethersproject/providers" "^5.6.8" - "@gnosis.pm/safe-deployments" "^1.16.0" - "web3-core" "^1.7.1" - -"@biconomy-sdk/ethers-lib@*", "@biconomy-sdk/ethers-lib@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/ethers-lib": - "resolved" "file:packages/ethers-lib" - "version" "1.0.20" - dependencies: - "@biconomy-sdk/core-types" "*" - "@gnosis.pm/safe-core-sdk-utils" "^1.1.0" - "@nomiclabs/hardhat-ethers" "^2.1.0" - "@openzeppelin/contracts" "^4.6.0" - "scw-contracts-v1.0.0" "npm:scw-contracts@1.0.0" - "scw-contracts-v1.0.1" "npm:scw-contracts@1.0.9" - -"@biconomy-sdk/gas-estimator@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/gas-estimator": - "resolved" "file:packages/gas-estimator" - "version" "1.0.20" - dependencies: - "ethers" "^5.7.1" - -"@biconomy-sdk/node-client@*", "@biconomy-sdk/node-client@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/node-client": - "resolved" "file:packages/node-client" - "version" "1.0.20" - dependencies: - "@biconomy-sdk/core-types" "*" - "@ethersproject/abstract-signer" "^5.6.0" - "@gnosis.pm/safe-core-sdk" "^2.1.0" - "@nomiclabs/hardhat-ethers" "^2.1.0" - "node-fetch" "^2.6.6" - -"@biconomy-sdk/relayer@*", "@biconomy-sdk/relayer@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/relayer": - "resolved" "file:packages/relayer" - "version" "1.0.20" - dependencies: - "@biconomy-sdk/core-types" "*" - "@ethersproject/providers" "^5.6.8" - "ethers" "^5.6.9" - "isomorphic-ws" "^5.0.0" - "messaging-sdk" "^0.0.3" - -"@biconomy-sdk/smart-account@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/smart-account": - "resolved" "file:packages/smart-account" - "version" "1.0.20" - dependencies: - "@0xsequence/network" "^0.41.0" - "@biconomy-sdk/account-abstraction" "*" - "@biconomy-sdk/core-types" "*" - "@biconomy-sdk/ethers-lib" "*" - "@biconomy-sdk/node-client" "*" - "@biconomy-sdk/relayer" "*" - "@biconomy-sdk/transactions" "*" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/contracts" "^5.6.0" - "@ethersproject/providers" "^5.6.8" - "@gnosis.pm/safe-deployments" "^1.12.0" - "@nomiclabs/hardhat-ethers" "^2.1.0" - "@types/mocha" "^9.1.1" - "concurrently" "^7.4.0" - "lodash" "^4.17.21" - -"@biconomy-sdk/transactions@*", "@biconomy-sdk/transactions@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/transactions": - "resolved" "file:packages/transactions" - "version" "1.0.20" - dependencies: - "@biconomy-sdk/core-types" "*" - "@biconomy-sdk/ethers-lib" "*" - "@biconomy-sdk/node-client" "*" - "@biconomy-sdk/relayer" "*" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/constants" "^5.6.1" - "ethereumjs-util" "^7.1.5" - "ethers" "^5.6.9" - -"@biconomy-sdk/web3-auth@file:/Users/chirag/work/biconomy/scw-playground/biconomy-client-sdk/packages/web3-auth": - "resolved" "file:packages/web3-auth" - "version" "1.0.20" - dependencies: - "@toruslabs/eccrypto" "^1.1.8" - "@toruslabs/openlogin-utils" "^2.1.0" - "@walletconnect/qrcode-modal" "^1.8.0" - "@web3auth/base" "^3.0.0" - "@web3auth/core" "^3.0.0" - "@web3auth/metamask-adapter" "^3.0.0" - "@web3auth/openlogin-adapter" "^3.0.3" - "@web3auth/ui" "^3.0.3" - "@web3auth/wallet-connect-v1-adapter" "^3.0.3" - "ethers" "^5.6.8" - "process" "^0.11.10" - "react" "^18.2.0" - "react-dom" "^18.2.0" - -"@chainlink/contracts@^0.4.1": - "integrity" "sha512-wVI/KZ9nIH0iqoebVxYrZfNVWO23vwds1UrHdbF+S0JwyixtT+54xYGlot723jCrAeBeQHsDRQXnEhhbUEHpgQ==" - "resolved" "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.4.2.tgz" - "version" "0.4.2" - dependencies: - "@eth-optimism/contracts" "^0.5.21" - -"@cspotcode/source-map-support@^0.8.0": - "integrity" "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==" - "resolved" "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" - "version" "0.8.1" - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@discoveryjs/json-ext@^0.5.0": - "integrity" "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" - "resolved" "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" - "version" "0.5.7" - -"@eslint/eslintrc@^1.3.3": - "integrity" "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==" - "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz" - "version" "1.3.3" - dependencies: - "ajv" "^6.12.4" - "debug" "^4.3.2" - "espree" "^9.4.0" - "globals" "^13.15.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" - -"@eth-optimism/contracts@^0.5.21": - "integrity" "sha512-VvPvTD6AKFIPZVwGRK1eDuhRS+WyUGemIiu7h9txpKitkXKpTqb4DscR6cul5Dl+JhonX36ZvnJmDIfF+KBY5A==" - "resolved" "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.38.tgz" - "version" "0.5.38" - dependencies: - "@eth-optimism/core-utils" "0.11.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - -"@eth-optimism/core-utils@0.11.0": - "integrity" "sha512-/oTyC1sqZ/R97pRk+7cQJpZ6qwmJvqcym9coy9fZaqmIuFaZkjXQKz04lWUPL0zzh9zTN+2nMSB+kZReccmong==" - "resolved" "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.11.0.tgz" - "version" "0.11.0" - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/contracts" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/providers" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - "bufio" "^1.0.7" - "chai" "^4.3.4" - -"@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.4": - "integrity" "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==" - "resolved" "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz" - "version" "2.6.5" - dependencies: - "crc-32" "^1.2.0" - "ethereumjs-util" "^7.1.5" - -"@ethereumjs/common@^3.0.1": - "integrity" "sha512-AHsJB7ydfb7TFCT7ORGY0tRiKkAylWZd/Qt6Lmc3Oycs66bMeE1JuYHbc0U6qsAZKZMFsUmL/UJDT/w7Z0cytw==" - "resolved" "https://registry.npmjs.org/@ethereumjs/common/-/common-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "@ethereumjs/util" "^8.0.0" - "crc-32" "^1.2.0" - -"@ethereumjs/rlp@^4.0.0", "@ethereumjs/rlp@^4.0.0-beta.2": - "integrity" "sha512-LM4jS5n33bJN60fM5EC8VeyhUgga6/DjCPBV2vWjnfVtobqtOiNC4SQ1MRFqyBSmJGGdB533JZWewyvlcdJtkQ==" - "resolved" "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.0.tgz" - "version" "4.0.0" - -"@ethereumjs/tx@^3.3.0", "@ethereumjs/tx@^3.3.2": - "integrity" "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==" - "resolved" "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz" - "version" "3.5.2" - dependencies: - "@ethereumjs/common" "^2.6.4" - "ethereumjs-util" "^7.1.5" - -"@ethereumjs/tx@^4.0.1": - "integrity" "sha512-JFq66cjjwnWOdKuDNNq0Hr1j04A546ymUo/8xnPa7wAm3s+RyGVt8VbaNF71/GJqN4tuY62gxvTfZ+B62foyPw==" - "resolved" "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "@ethereumjs/common" "^3.0.1" - "@ethereumjs/rlp" "^4.0.0" - "@ethereumjs/util" "^8.0.0" - "ethereum-cryptography" "^1.1.2" - "ethers" "^5.7.1" - -"@ethereumjs/util@^8.0.0", "@ethereumjs/util@^8.0.2": - "integrity" "sha512-b1Fcxmq+ckCdoLPhVIBkTcH8szigMapPuEmD8EDakvtI5Na5rzmX1sBW73YQqaPc7iUxGCAzZP1LrFQ7aEMugA==" - "resolved" "https://registry.npmjs.org/@ethereumjs/util/-/util-8.0.2.tgz" - "version" "8.0.2" - dependencies: - "@ethereumjs/rlp" "^4.0.0-beta.2" - "async" "^3.2.4" - "ethereum-cryptography" "^1.1.2" - -"@ethersproject/abi@^5.0.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.4.7", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0", "@ethersproject/abi@5.7.0": - "integrity" "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==" - "resolved" "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@^5.7.0", "@ethersproject/abstract-provider@5.7.0": - "integrity" "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==" - "resolved" "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.5.0", "@ethersproject/abstract-signer@^5.6.0", "@ethersproject/abstract-signer@^5.6.2", "@ethersproject/abstract-signer@^5.7.0", "@ethersproject/abstract-signer@5.7.0": - "integrity" "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==" - "resolved" "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.7.0", "@ethersproject/address@5.7.0": - "integrity" "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==" - "resolved" "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@^5.7.0", "@ethersproject/base64@5.7.0": - "integrity" "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==" - "resolved" "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@^5.7.0", "@ethersproject/basex@5.7.0": - "integrity" "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==" - "resolved" "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.6.0", "@ethersproject/bignumber@^5.7.0", "@ethersproject/bignumber@5.7.0": - "integrity" "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==" - "resolved" "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "bn.js" "^5.2.1" - -"@ethersproject/bytes@^5.0.0", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.7.0", "@ethersproject/bytes@5.7.0": - "integrity" "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==" - "resolved" "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.6.1", "@ethersproject/constants@^5.7.0", "@ethersproject/constants@5.7.0": - "integrity" "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==" - "resolved" "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@^5.4.1", "@ethersproject/contracts@^5.6.0", "@ethersproject/contracts@^5.7.0", "@ethersproject/contracts@5.7.0": - "integrity" "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==" - "resolved" "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@^5.7.0", "@ethersproject/hash@5.7.0": - "integrity" "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==" - "resolved" "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@^5.7.0", "@ethersproject/hdnode@5.7.0": - "integrity" "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==" - "resolved" "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@^5.7.0", "@ethersproject/json-wallets@5.7.0": - "integrity" "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==" - "resolved" "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "aes-js" "3.0.0" - "scrypt-js" "3.0.1" - -"@ethersproject/keccak256@^5.7.0", "@ethersproject/keccak256@5.7.0": - "integrity" "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==" - "resolved" "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bytes" "^5.7.0" - "js-sha3" "0.8.0" - -"@ethersproject/logger@^5.7.0", "@ethersproject/logger@5.7.0": - "integrity" "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" - "resolved" "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" - "version" "5.7.0" - -"@ethersproject/networks@^5.7.0", "@ethersproject/networks@5.7.1": - "integrity" "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==" - "resolved" "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" - "version" "5.7.1" - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@^5.7.0", "@ethersproject/pbkdf2@5.7.0": - "integrity" "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==" - "resolved" "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@^5.5.0", "@ethersproject/properties@^5.7.0", "@ethersproject/properties@5.7.0": - "integrity" "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==" - "resolved" "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@^5.0.0", "@ethersproject/providers@^5.4.4", "@ethersproject/providers@^5.4.7", "@ethersproject/providers@^5.5.1", "@ethersproject/providers@^5.6.8", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@5.7.2": - "integrity" "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==" - "resolved" "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz" - "version" "5.7.2" - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - "bech32" "1.1.4" - "ws" "7.4.6" - -"@ethersproject/random@^5.7.0", "@ethersproject/random@5.7.0": - "integrity" "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==" - "resolved" "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@^5.7.0", "@ethersproject/rlp@5.7.0": - "integrity" "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==" - "resolved" "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@^5.7.0", "@ethersproject/sha2@5.7.0": - "integrity" "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==" - "resolved" "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "hash.js" "1.1.7" - -"@ethersproject/signing-key@^5.7.0", "@ethersproject/signing-key@5.7.0": - "integrity" "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==" - "resolved" "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "bn.js" "^5.2.1" - "elliptic" "6.5.4" - "hash.js" "1.1.7" - -"@ethersproject/solidity@^5.4.0", "@ethersproject/solidity@^5.6.0", "@ethersproject/solidity@5.7.0": - "integrity" "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==" - "resolved" "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@^5.7.0", "@ethersproject/strings@5.7.0": - "integrity" "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==" - "resolved" "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0", "@ethersproject/transactions@5.7.0": - "integrity" "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==" - "resolved" "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/units@5.7.0": - "integrity" "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==" - "resolved" "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@^5.4.0", "@ethersproject/wallet@5.7.0": - "integrity" "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==" - "resolved" "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@^5.7.0", "@ethersproject/web@5.7.1": - "integrity" "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==" - "resolved" "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" - "version" "5.7.1" - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@^5.7.0", "@ethersproject/wordlists@5.7.0": - "integrity" "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==" - "resolved" "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz" - "version" "5.7.0" - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@gar/promisify@^1.1.3": - "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" - "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" - "version" "1.1.3" - -"@gnosis.pm/safe-core-sdk-types@^1.4.0", "@gnosis.pm/safe-core-sdk-types@^1.6.1": - "integrity" "sha512-KRflubR/W2qVeRxavh2ALtXI6CyCCcyuL1olJAVn/xkZVYJJjvXn+5GxbRloJFIJrgFCNWYbHrO0sXtywP5Y1g==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-types/-/safe-core-sdk-types-1.6.1.tgz" - "version" "1.6.1" - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/contracts" "^5.7.0" - "@gnosis.pm/safe-deployments" "1.16.0" - "web3-core" "^1.8.0" - "web3-utils" "^1.8.0" - -"@gnosis.pm/safe-core-sdk-utils@^1.1.0", "@gnosis.pm/safe-core-sdk-utils@^1.4.1": - "integrity" "sha512-VrebOIw5ULOgTuV1hK4V0Wp1cg50Sw9urUYyBFnkI6kzL13f3ngGa5IUZ6O+HOOSNrO2mB+EEr09gWp5IN7ECA==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk-utils/-/safe-core-sdk-utils-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "@gnosis.pm/safe-core-sdk-types" "^1.6.1" - "semver" "^7.3.7" - "web3-utils" "^1.8.0" - -"@gnosis.pm/safe-core-sdk@^2.1.0": - "integrity" "sha512-FlpHW+jzKNtO9HMFF+R7IbdvJM5J4R4JW76jSe3MAbUA5KlmAW9BFDl/sgdQTREttIZMG2dr9A94RU9YcsljXw==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-core-sdk/-/safe-core-sdk-2.4.1.tgz" - "version" "2.4.1" - dependencies: - "@ethersproject/solidity" "^5.6.0" - "@gnosis.pm/safe-core-sdk-types" "^1.4.0" - "@gnosis.pm/safe-deployments" "1.15.0" - "ethereumjs-util" "^7.1.4" - "semver" "^7.3.5" - "web3-utils" "^1.7.1" - -"@gnosis.pm/safe-deployments@^1.12.0", "@gnosis.pm/safe-deployments@^1.16.0", "@gnosis.pm/safe-deployments@1.16.0": - "integrity" "sha512-5Wakso6SiulstuZfz3gH6yME8Q50BT5dVxIfgWz4vzOmyyqmAVstMd0VIwyw6IDee0gU4mHKZjhD3UXPKEvRCw==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.16.0.tgz" - "version" "1.16.0" - dependencies: - "semver" "^7.3.7" - -"@gnosis.pm/safe-deployments@1.15.0": - "integrity" "sha512-twfC5HNuj+TKS2gOowf6A1FGZfOLBHAV2JhYpmOCf2MKsfcG+Fe4TrSRgQg605MhWdwFiaGVpNkcwjvpxhGuew==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-deployments/-/safe-deployments-1.15.0.tgz" - "version" "1.15.0" - dependencies: - "semver" "^7.3.7" - -"@gnosis.pm/safe-ethers-lib@^1.1.0": - "integrity" "sha512-rUv2Dwi3whTmcgx6EejI5llMDnxhwyTX/8j01K6fWBfOAFaUV78gbtPcwmdr1WCVVcXSdKszyarus5fyZTKNfA==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-ethers-lib/-/safe-ethers-lib-1.6.1.tgz" - "version" "1.6.1" - dependencies: - "@gnosis.pm/safe-core-sdk-types" "^1.6.1" - "@gnosis.pm/safe-core-sdk-utils" "^1.4.1" - "ethers" "^5.7.1" - -"@gnosis.pm/safe-web3-lib@^1.1.0": - "integrity" "sha512-fOXtxjSmetky4CGapAWPTmzRLBDG+5sGbwriypy6OZ3rcPWvwRyC8p06IhpqofadJIEQP5HphPECtQNVSPEkjA==" - "resolved" "https://registry.npmjs.org/@gnosis.pm/safe-web3-lib/-/safe-web3-lib-1.6.1.tgz" - "version" "1.6.1" - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@gnosis.pm/safe-core-sdk-types" "^1.6.1" - "@gnosis.pm/safe-core-sdk-utils" "^1.4.1" - "web3" "^1.8.0" - "web3-core" "^1.8.0" - "web3-utils" "^1.8.0" - -"@humanwhocodes/config-array@^0.11.6": - "integrity" "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz" - "version" "0.11.7" - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - "debug" "^4.1.1" - "minimatch" "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - "integrity" "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - "version" "1.0.1" - -"@humanwhocodes/object-schema@^1.2.1": - "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - "version" "1.2.1" - -"@hutson/parse-repository-url@^3.0.0": - "integrity" "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==" - "resolved" "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz" - "version" "3.0.2" - -"@isaacs/string-locale-compare@^1.1.0": - "integrity" "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==" - "resolved" "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz" - "version" "1.1.0" - -"@istanbuljs/load-nyc-config@^1.0.0": - "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==" - "resolved" "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "camelcase" "^5.3.1" - "find-up" "^4.1.0" - "get-package-type" "^0.1.0" - "js-yaml" "^3.13.1" - "resolve-from" "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - "integrity" "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" - "resolved" "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" - "version" "0.1.3" - -"@jest/console@^28.1.3": - "integrity" "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==" - "resolved" "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/types" "^28.1.3" - "@types/node" "*" - "chalk" "^4.0.0" - "jest-message-util" "^28.1.3" - "jest-util" "^28.1.3" - "slash" "^3.0.0" - -"@jest/core@^28.1.3": - "integrity" "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==" - "resolved" "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/console" "^28.1.3" - "@jest/reporters" "^28.1.3" - "@jest/test-result" "^28.1.3" - "@jest/transform" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/node" "*" - "ansi-escapes" "^4.2.1" - "chalk" "^4.0.0" - "ci-info" "^3.2.0" - "exit" "^0.1.2" - "graceful-fs" "^4.2.9" - "jest-changed-files" "^28.1.3" - "jest-config" "^28.1.3" - "jest-haste-map" "^28.1.3" - "jest-message-util" "^28.1.3" - "jest-regex-util" "^28.0.2" - "jest-resolve" "^28.1.3" - "jest-resolve-dependencies" "^28.1.3" - "jest-runner" "^28.1.3" - "jest-runtime" "^28.1.3" - "jest-snapshot" "^28.1.3" - "jest-util" "^28.1.3" - "jest-validate" "^28.1.3" - "jest-watcher" "^28.1.3" - "micromatch" "^4.0.4" - "pretty-format" "^28.1.3" - "rimraf" "^3.0.0" - "slash" "^3.0.0" - "strip-ansi" "^6.0.0" - -"@jest/environment@^28.1.3": - "integrity" "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==" - "resolved" "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/fake-timers" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/node" "*" - "jest-mock" "^28.1.3" - -"@jest/expect-utils@^28.1.3": - "integrity" "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==" - "resolved" "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "jest-get-type" "^28.0.2" - -"@jest/expect@^28.1.3": - "integrity" "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==" - "resolved" "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "expect" "^28.1.3" - "jest-snapshot" "^28.1.3" - -"@jest/fake-timers@^28.1.3": - "integrity" "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==" - "resolved" "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/types" "^28.1.3" - "@sinonjs/fake-timers" "^9.1.2" - "@types/node" "*" - "jest-message-util" "^28.1.3" - "jest-mock" "^28.1.3" - "jest-util" "^28.1.3" - -"@jest/globals@^28.1.3": - "integrity" "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==" - "resolved" "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/environment" "^28.1.3" - "@jest/expect" "^28.1.3" - "@jest/types" "^28.1.3" - -"@jest/reporters@^28.1.3": - "integrity" "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==" - "resolved" "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^28.1.3" - "@jest/test-result" "^28.1.3" - "@jest/transform" "^28.1.3" - "@jest/types" "^28.1.3" - "@jridgewell/trace-mapping" "^0.3.13" - "@types/node" "*" - "chalk" "^4.0.0" - "collect-v8-coverage" "^1.0.0" - "exit" "^0.1.2" - "glob" "^7.1.3" - "graceful-fs" "^4.2.9" - "istanbul-lib-coverage" "^3.0.0" - "istanbul-lib-instrument" "^5.1.0" - "istanbul-lib-report" "^3.0.0" - "istanbul-lib-source-maps" "^4.0.0" - "istanbul-reports" "^3.1.3" - "jest-message-util" "^28.1.3" - "jest-util" "^28.1.3" - "jest-worker" "^28.1.3" - "slash" "^3.0.0" - "string-length" "^4.0.1" - "strip-ansi" "^6.0.0" - "terminal-link" "^2.0.0" - "v8-to-istanbul" "^9.0.1" - -"@jest/schemas@^28.1.3": - "integrity" "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==" - "resolved" "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@sinclair/typebox" "^0.24.1" - -"@jest/source-map@^28.1.2": - "integrity" "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==" - "resolved" "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz" - "version" "28.1.2" - dependencies: - "@jridgewell/trace-mapping" "^0.3.13" - "callsites" "^3.0.0" - "graceful-fs" "^4.2.9" - -"@jest/test-result@^28.1.3": - "integrity" "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==" - "resolved" "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/console" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "collect-v8-coverage" "^1.0.0" - -"@jest/test-sequencer@^28.1.3": - "integrity" "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==" - "resolved" "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/test-result" "^28.1.3" - "graceful-fs" "^4.2.9" - "jest-haste-map" "^28.1.3" - "slash" "^3.0.0" - -"@jest/transform@^28.1.3": - "integrity" "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==" - "resolved" "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^28.1.3" - "@jridgewell/trace-mapping" "^0.3.13" - "babel-plugin-istanbul" "^6.1.1" - "chalk" "^4.0.0" - "convert-source-map" "^1.4.0" - "fast-json-stable-stringify" "^2.0.0" - "graceful-fs" "^4.2.9" - "jest-haste-map" "^28.1.3" - "jest-regex-util" "^28.0.2" - "jest-util" "^28.1.3" - "micromatch" "^4.0.4" - "pirates" "^4.0.4" - "slash" "^3.0.0" - "write-file-atomic" "^4.0.1" - -"@jest/types@^28.1.3": - "integrity" "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==" - "resolved" "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/schemas" "^28.1.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - "chalk" "^4.0.0" - -"@jridgewell/gen-mapping@^0.1.0": - "integrity" "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" - "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" - "version" "0.1.1" - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - "integrity" "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" - "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" - "version" "0.3.2" - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": - "integrity" "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" - "version" "3.1.0" - -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - "version" "1.1.2" - -"@jridgewell/source-map@^0.3.2": - "integrity" "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==" - "resolved" "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz" - "version" "0.3.2" - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@1.4.14": - "integrity" "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" - "version" "1.4.14" - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": - "integrity" "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==" - "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz" - "version" "0.3.17" - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@jridgewell/trace-mapping@0.3.9": - "integrity" "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==" - "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - "version" "0.3.9" - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@lerna/add@5.6.2": - "integrity" "sha512-NHrm7kYiqP+EviguY7/NltJ3G9vGmJW6v2BASUOhP9FZDhYbq3O+rCDlFdoVRNtcyrSg90rZFMOWHph4KOoCQQ==" - "resolved" "https://registry.npmjs.org/@lerna/add/-/add-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/bootstrap" "5.6.2" - "@lerna/command" "5.6.2" - "@lerna/filter-options" "5.6.2" - "@lerna/npm-conf" "5.6.2" - "@lerna/validation-error" "5.6.2" - "dedent" "^0.7.0" - "npm-package-arg" "8.1.1" - "p-map" "^4.0.0" - "pacote" "^13.6.1" - "semver" "^7.3.4" - -"@lerna/bootstrap@5.6.2": - "integrity" "sha512-S2fMOEXbef7nrybQhzBywIGSLhuiQ5huPp1sU+v9Y6XEBsy/2IA+lb0gsZosvPqlRfMtiaFstL+QunaBhlWECA==" - "resolved" "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/command" "5.6.2" - "@lerna/filter-options" "5.6.2" - "@lerna/has-npm-version" "5.6.2" - "@lerna/npm-install" "5.6.2" - "@lerna/package-graph" "5.6.2" - "@lerna/pulse-till-done" "5.6.2" - "@lerna/rimraf-dir" "5.6.2" - "@lerna/run-lifecycle" "5.6.2" - "@lerna/run-topologically" "5.6.2" - "@lerna/symlink-binary" "5.6.2" - "@lerna/symlink-dependencies" "5.6.2" - "@lerna/validation-error" "5.6.2" - "@npmcli/arborist" "5.3.0" - "dedent" "^0.7.0" - "get-port" "^5.1.1" - "multimatch" "^5.0.0" - "npm-package-arg" "8.1.1" - "npmlog" "^6.0.2" - "p-map" "^4.0.0" - "p-map-series" "^2.1.0" - "p-waterfall" "^2.1.1" - "semver" "^7.3.4" - -"@lerna/changed@5.6.2": - "integrity" "sha512-uUgrkdj1eYJHQGsXXlpH5oEAfu3x0qzeTjgvpdNrxHEdQWi7zWiW59hRadmiImc14uJJYIwVK5q/QLugrsdGFQ==" - "resolved" "https://registry.npmjs.org/@lerna/changed/-/changed-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/collect-updates" "5.6.2" - "@lerna/command" "5.6.2" - "@lerna/listable" "5.6.2" - "@lerna/output" "5.6.2" - -"@lerna/check-working-tree@5.6.2": - "integrity" "sha512-6Vf3IB6p+iNIubwVgr8A/KOmGh5xb4SyRmhFtAVqe33yWl2p3yc+mU5nGoz4ET3JLF1T9MhsePj0hNt6qyOTLQ==" - "resolved" "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/collect-uncommitted" "5.6.2" - "@lerna/describe-ref" "5.6.2" - "@lerna/validation-error" "5.6.2" - -"@lerna/child-process@5.6.2": - "integrity" "sha512-QIOQ3jIbWdduHd5892fbo3u7/dQgbhzEBB7cvf+Ys/iCPP8UQrBECi1lfRgA4kcTKC2MyMz0SoyXZz/lFcXc3A==" - "resolved" "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "chalk" "^4.1.0" - "execa" "^5.0.0" - "strong-log-transformer" "^2.1.0" - -"@lerna/clean@5.6.2": - "integrity" "sha512-A7j8r0Hk2pGyLUyaCmx4keNHen1L/KdcOjb4nR6X8GtTJR5AeA47a8rRKOCz9wwdyMPlo2Dau7d3RV9viv7a5g==" - "resolved" "https://registry.npmjs.org/@lerna/clean/-/clean-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/command" "5.6.2" - "@lerna/filter-options" "5.6.2" - "@lerna/prompt" "5.6.2" - "@lerna/pulse-till-done" "5.6.2" - "@lerna/rimraf-dir" "5.6.2" - "p-map" "^4.0.0" - "p-map-series" "^2.1.0" - "p-waterfall" "^2.1.1" - -"@lerna/cli@5.6.2": - "integrity" "sha512-w0NRIEqDOmYKlA5t0iyqx0hbY7zcozvApmfvwF0lhkuhf3k6LRAFSamtimGQWicC779a7J2NXw4ASuBV47Fs1Q==" - "resolved" "https://registry.npmjs.org/@lerna/cli/-/cli-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/global-options" "5.6.2" - "dedent" "^0.7.0" - "npmlog" "^6.0.2" - "yargs" "^16.2.0" - -"@lerna/collect-uncommitted@5.6.2": - "integrity" "sha512-i0jhxpypyOsW2PpPwIw4xg6EPh7/N3YuiI6P2yL7PynZ8nOv8DkIdoyMkhUP4gALjBfckH8Bj94eIaKMviqW4w==" - "resolved" "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "chalk" "^4.1.0" - "npmlog" "^6.0.2" - -"@lerna/collect-updates@5.6.2": - "integrity" "sha512-DdTK13X6PIsh9HINiMniFeiivAizR/1FBB+hDVe6tOhsXFBfjHMw1xZhXlE+mYIoFmDm1UFK7zvQSexoaxRqFA==" - "resolved" "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "@lerna/describe-ref" "5.6.2" - "minimatch" "^3.0.4" - "npmlog" "^6.0.2" - "slash" "^3.0.0" - -"@lerna/command@5.6.2": - "integrity" "sha512-eLVGI9TmxcaGt1M7TXGhhBZoeWOtOedMiH7NuCGHtL6TMJ9k+SCExyx+KpNmE6ImyNOzws6EvYLPLjftiqmoaA==" - "resolved" "https://registry.npmjs.org/@lerna/command/-/command-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "@lerna/package-graph" "5.6.2" - "@lerna/project" "5.6.2" - "@lerna/validation-error" "5.6.2" - "@lerna/write-log-file" "5.6.2" - "clone-deep" "^4.0.1" - "dedent" "^0.7.0" - "execa" "^5.0.0" - "is-ci" "^2.0.0" - "npmlog" "^6.0.2" - -"@lerna/conventional-commits@5.6.2": - "integrity" "sha512-fPrJpYJhxCgY2uyOCTcAAC6+T6lUAtpEGxLbjWHWTb13oKKEygp9THoFpe6SbAD0fYMb3jeZCZCqNofM62rmuA==" - "resolved" "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/validation-error" "5.6.2" - "conventional-changelog-angular" "^5.0.12" - "conventional-changelog-core" "^4.2.4" - "conventional-recommended-bump" "^6.1.0" - "fs-extra" "^9.1.0" - "get-stream" "^6.0.0" - "npm-package-arg" "8.1.1" - "npmlog" "^6.0.2" - "pify" "^5.0.0" - "semver" "^7.3.4" - -"@lerna/create-symlink@5.6.2": - "integrity" "sha512-0WIs3P6ohPVh2+t5axrLZDE5Dt7fe3Kv0Auj0sBiBd6MmKZ2oS76apIl0Bspdbv8jX8+TRKGv6ib0280D0dtEw==" - "resolved" "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "cmd-shim" "^5.0.0" - "fs-extra" "^9.1.0" - "npmlog" "^6.0.2" - -"@lerna/create@5.6.2": - "integrity" "sha512-+Y5cMUxMNXjTTU9IHpgRYIwKo39w+blui1P+s+qYlZUSCUAew0xNpOBG8iN0Nc5X9op4U094oIdHxv7Dyz6tWQ==" - "resolved" "https://registry.npmjs.org/@lerna/create/-/create-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "@lerna/command" "5.6.2" - "@lerna/npm-conf" "5.6.2" - "@lerna/validation-error" "5.6.2" - "dedent" "^0.7.0" - "fs-extra" "^9.1.0" - "init-package-json" "^3.0.2" - "npm-package-arg" "8.1.1" - "p-reduce" "^2.1.0" - "pacote" "^13.6.1" - "pify" "^5.0.0" - "semver" "^7.3.4" - "slash" "^3.0.0" - "validate-npm-package-license" "^3.0.4" - "validate-npm-package-name" "^4.0.0" - "yargs-parser" "20.2.4" - -"@lerna/describe-ref@5.6.2": - "integrity" "sha512-UqU0N77aT1W8duYGir7R+Sk3jsY/c4lhcCEcnayMpFScMbAp0ETGsW04cYsHK29sgg+ZCc5zEwebBqabWhMhnA==" - "resolved" "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "npmlog" "^6.0.2" - -"@lerna/diff@5.6.2": - "integrity" "sha512-aHKzKvUvUI8vOcshC2Za/bdz+plM3r/ycqUrPqaERzp+kc1pYHyPeXezydVdEmgmmwmyKI5hx4+2QNnzOnun2A==" - "resolved" "https://registry.npmjs.org/@lerna/diff/-/diff-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "@lerna/command" "5.6.2" - "@lerna/validation-error" "5.6.2" - "npmlog" "^6.0.2" - -"@lerna/exec@5.6.2": - "integrity" "sha512-meZozok5stK7S0oAVn+kdbTmU+kHj9GTXjW7V8kgwG9ld+JJMTH3nKK1L3mEKyk9TFu9vFWyEOF7HNK6yEOoVg==" - "resolved" "https://registry.npmjs.org/@lerna/exec/-/exec-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "@lerna/command" "5.6.2" - "@lerna/filter-options" "5.6.2" - "@lerna/profiler" "5.6.2" - "@lerna/run-topologically" "5.6.2" - "@lerna/validation-error" "5.6.2" - "p-map" "^4.0.0" - -"@lerna/filter-options@5.6.2": - "integrity" "sha512-4Z0HIhPak2TabTsUqEBQaQeOqgqEt0qyskvsY0oviYvqP/nrJfJBZh4H93jIiNQF59LJCn5Ce3KJJrLExxjlzw==" - "resolved" "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/collect-updates" "5.6.2" - "@lerna/filter-packages" "5.6.2" - "dedent" "^0.7.0" - "npmlog" "^6.0.2" - -"@lerna/filter-packages@5.6.2": - "integrity" "sha512-el9V2lTEG0Bbz+Omo45hATkRVnChCTJhcTpth19cMJ6mQ4M5H4IgbWCJdFMBi/RpTnOhz9BhJxDbj95kuIvvzw==" - "resolved" "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/validation-error" "5.6.2" - "multimatch" "^5.0.0" - "npmlog" "^6.0.2" - -"@lerna/get-npm-exec-opts@5.6.2": - "integrity" "sha512-0RbSDJ+QC9D5UWZJh3DN7mBIU1NhBmdHOE289oHSkjDY+uEjdzMPkEUy+wZ8fCzMLFnnNQkAEqNaOAzZ7dmFLA==" - "resolved" "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "npmlog" "^6.0.2" - -"@lerna/get-packed@5.6.2": - "integrity" "sha512-pp5nNDmtrtd21aKHjwwOY5CS7XNIHxINzGa+Jholn1jMDYUtdskpN++ZqYbATGpW831++NJuiuBVyqAWi9xbXg==" - "resolved" "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "fs-extra" "^9.1.0" - "ssri" "^9.0.1" - "tar" "^6.1.0" - -"@lerna/github-client@5.6.2": - "integrity" "sha512-pjALazZoRZtKqfwLBwmW3HPptVhQm54PvA8s3qhCQ+3JkqrZiIFwkkxNZxs3jwzr+aaSOzfhSzCndg0urb0GXA==" - "resolved" "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "@octokit/plugin-enterprise-rest" "^6.0.1" - "@octokit/rest" "^19.0.3" - "git-url-parse" "^13.1.0" - "npmlog" "^6.0.2" - -"@lerna/gitlab-client@5.6.2": - "integrity" "sha512-TInJmbrsmYIwUyrRxytjO82KjJbRwm67F7LoZs1shAq6rMvNqi4NxSY9j+hT/939alFmEq1zssoy/caeLXHRfQ==" - "resolved" "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "node-fetch" "^2.6.1" - "npmlog" "^6.0.2" - -"@lerna/global-options@5.6.2": - "integrity" "sha512-kaKELURXTlczthNJskdOvh6GGMyt24qat0xMoJZ8plYMdofJfhz24h1OFcvB/EwCUwP/XV1+ohE5P+vdktbrEg==" - "resolved" "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.6.2.tgz" - "version" "5.6.2" - -"@lerna/has-npm-version@5.6.2": - "integrity" "sha512-kXCnSzffmTWsaK0ol30coyCfO8WH26HFbmJjRBzKv7VGkuAIcB6gX2gqRRgNLLlvI+Yrp+JSlpVNVnu15SEH2g==" - "resolved" "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "semver" "^7.3.4" - -"@lerna/import@5.6.2": - "integrity" "sha512-xQUE49mtcP0z3KUdXBsyvp8rGDz6phuYUoQbhcFRJ7WPcQKzMvtm0XYrER6c2YWEX7QOuDac6tU82P8zTrTBaA==" - "resolved" "https://registry.npmjs.org/@lerna/import/-/import-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "@lerna/command" "5.6.2" - "@lerna/prompt" "5.6.2" - "@lerna/pulse-till-done" "5.6.2" - "@lerna/validation-error" "5.6.2" - "dedent" "^0.7.0" - "fs-extra" "^9.1.0" - "p-map-series" "^2.1.0" - -"@lerna/info@5.6.2": - "integrity" "sha512-MPjY5Olj+fiZHgfEdwXUFRKamdEuLr9Ob/qut8JsB/oQSQ4ALdQfnrOcMT8lJIcC2R67EA5yav2lHPBIkezm8A==" - "resolved" "https://registry.npmjs.org/@lerna/info/-/info-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/command" "5.6.2" - "@lerna/output" "5.6.2" - "envinfo" "^7.7.4" - -"@lerna/init@5.6.2": - "integrity" "sha512-ahU3/lgF+J8kdJAQysihFJROHthkIDXfHmvhw7AYnzf94HjxGNXj7nz6i3At1/dM/1nQhR+4/uNR1/OU4tTYYQ==" - "resolved" "https://registry.npmjs.org/@lerna/init/-/init-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "@lerna/command" "5.6.2" - "@lerna/project" "5.6.2" - "fs-extra" "^9.1.0" - "p-map" "^4.0.0" - "write-json-file" "^4.3.0" - -"@lerna/link@5.6.2": - "integrity" "sha512-hXxQ4R3z6rUF1v2x62oIzLyeHL96u7ZBhxqYMJrm763D1VMSDcHKF9CjJfc6J9vH5Z2ZbL6CQg50Hw5mUpJbjg==" - "resolved" "https://registry.npmjs.org/@lerna/link/-/link-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/command" "5.6.2" - "@lerna/package-graph" "5.6.2" - "@lerna/symlink-dependencies" "5.6.2" - "@lerna/validation-error" "5.6.2" - "p-map" "^4.0.0" - "slash" "^3.0.0" - -"@lerna/list@5.6.2": - "integrity" "sha512-WjE5O2tQ3TcS+8LqXUaxi0YdldhxUhNihT5+Gg4vzGdIlrPDioO50Zjo9d8jOU7i3LMIk6EzCma0sZr2CVfEGg==" - "resolved" "https://registry.npmjs.org/@lerna/list/-/list-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/command" "5.6.2" - "@lerna/filter-options" "5.6.2" - "@lerna/listable" "5.6.2" - "@lerna/output" "5.6.2" - -"@lerna/listable@5.6.2": - "integrity" "sha512-8Yp49BwkY/5XqVru38Zko+6Wj/sgbwzJfIGEPy3Qu575r1NA/b9eI1gX22aMsEeXUeGOybR7nWT5ewnPQHjqvA==" - "resolved" "https://registry.npmjs.org/@lerna/listable/-/listable-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/query-graph" "5.6.2" - "chalk" "^4.1.0" - "columnify" "^1.6.0" - -"@lerna/log-packed@5.6.2": - "integrity" "sha512-O9GODG7tMtWk+2fufn2MOkIDBYMRoKBhYMHshO5Aw/VIsH76DIxpX1koMzWfUngM/C70R4uNAKcVWineX4qzIw==" - "resolved" "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "byte-size" "^7.0.0" - "columnify" "^1.6.0" - "has-unicode" "^2.0.1" - "npmlog" "^6.0.2" - -"@lerna/npm-conf@5.6.2": - "integrity" "sha512-gWDPhw1wjXYXphk/PAghTLexO5T6abVFhXb+KOMCeem366mY0F5bM88PiorL73aErTNUoR8n+V4X29NTZzDZpQ==" - "resolved" "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "config-chain" "^1.1.12" - "pify" "^5.0.0" - -"@lerna/npm-dist-tag@5.6.2": - "integrity" "sha512-t2RmxV6Eog4acXkUI+EzWuYVbeVVY139pANIWS9qtdajfgp4GVXZi1S8mAIb70yeHdNpCp1mhK0xpCrFH9LvGQ==" - "resolved" "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/otplease" "5.6.2" - "npm-package-arg" "8.1.1" - "npm-registry-fetch" "^13.3.0" - "npmlog" "^6.0.2" - -"@lerna/npm-install@5.6.2": - "integrity" "sha512-AT226zdEo+uGENd37jwYgdALKJAIJK4pNOfmXWZWzVb9oMOr8I2YSjPYvSYUNG7gOo2YJQU8x5Zd7OShv2924Q==" - "resolved" "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "@lerna/get-npm-exec-opts" "5.6.2" - "fs-extra" "^9.1.0" - "npm-package-arg" "8.1.1" - "npmlog" "^6.0.2" - "signal-exit" "^3.0.3" - "write-pkg" "^4.0.0" - -"@lerna/npm-publish@5.6.2": - "integrity" "sha512-ldSyewCfv9fAeC5xNjL0HKGSUxcC048EJoe/B+KRUmd+IPidvZxMEzRu08lSC/q3V9YeUv9ZvRnxATXOM8CffA==" - "resolved" "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/otplease" "5.6.2" - "@lerna/run-lifecycle" "5.6.2" - "fs-extra" "^9.1.0" - "libnpmpublish" "^6.0.4" - "npm-package-arg" "8.1.1" - "npmlog" "^6.0.2" - "pify" "^5.0.0" - "read-package-json" "^5.0.1" - -"@lerna/npm-run-script@5.6.2": - "integrity" "sha512-MOQoWNcAyJivM8SYp0zELM7vg/Dj07j4YMdxZkey+S1UO0T4/vKBxb575o16hH4WeNzC3Pd7WBlb7C8dLOfNwQ==" - "resolved" "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "@lerna/get-npm-exec-opts" "5.6.2" - "npmlog" "^6.0.2" - -"@lerna/otplease@5.6.2": - "integrity" "sha512-dGS4lzkEQVTMAgji82jp8RK6UK32wlzrBAO4P4iiVHCUTuwNLsY9oeBXvVXSMrosJnl6Hbe0NOvi43mqSucGoA==" - "resolved" "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/prompt" "5.6.2" - -"@lerna/output@5.6.2": - "integrity" "sha512-++d+bfOQwY66yo7q1XuAvRcqtRHCG45e/awP5xQomTZ6R1rhWiZ3whWdc9Z6lF7+UtBB9toSYYffKU/xc3L0yQ==" - "resolved" "https://registry.npmjs.org/@lerna/output/-/output-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "npmlog" "^6.0.2" - -"@lerna/pack-directory@5.6.2": - "integrity" "sha512-w5Jk5fo+HkN4Le7WMOudTcmAymcf0xPd302TqAQncjXpk0cb8tZbj+5bbNHsGb58GRjOIm5icQbHXooQUxbHhA==" - "resolved" "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/get-packed" "5.6.2" - "@lerna/package" "5.6.2" - "@lerna/run-lifecycle" "5.6.2" - "@lerna/temp-write" "5.6.2" - "npm-packlist" "^5.1.1" - "npmlog" "^6.0.2" - "tar" "^6.1.0" - -"@lerna/package-graph@5.6.2": - "integrity" "sha512-TmL61qBBvA3Tc4qICDirZzdFFwWOA6qicIXUruLiE2PblRowRmCO1bKrrP6XbDOspzwrkPef6N2F2/5gHQAnkQ==" - "resolved" "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/prerelease-id-from-version" "5.6.2" - "@lerna/validation-error" "5.6.2" - "npm-package-arg" "8.1.1" - "npmlog" "^6.0.2" - "semver" "^7.3.4" - -"@lerna/package@5.6.2": - "integrity" "sha512-LaOC8moyM5J9WnRiWZkedjOninSclBOJyPqhif6mHb2kCFX6jAroNYzE8KM4cphu8CunHuhI6Ixzswtv+Dultw==" - "resolved" "https://registry.npmjs.org/@lerna/package/-/package-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "load-json-file" "^6.2.0" - "npm-package-arg" "8.1.1" - "write-pkg" "^4.0.0" - -"@lerna/prerelease-id-from-version@5.6.2": - "integrity" "sha512-7gIm9fecWFVNy2kpj/KbH11bRcpyANAwpsft3X5m6J7y7A6FTUscCbEvl3ZNdpQKHNuvnHgCtkm3A5PMSCEgkA==" - "resolved" "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "semver" "^7.3.4" - -"@lerna/profiler@5.6.2": - "integrity" "sha512-okwkagP5zyRIOYTceu/9/esW7UZFt7lyL6q6ZgpSG3TYC5Ay+FXLtS6Xiha/FQdVdumFqKULDWTGovzUlxcwaw==" - "resolved" "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "fs-extra" "^9.1.0" - "npmlog" "^6.0.2" - "upath" "^2.0.1" - -"@lerna/project@5.6.2": - "integrity" "sha512-kPIMcIy/0DVWM91FPMMFmXyAnCuuLm3NdhnA8NusE//VuY9wC6QC/3OwuCY39b2dbko/fPZheqKeAZkkMH6sGg==" - "resolved" "https://registry.npmjs.org/@lerna/project/-/project-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/package" "5.6.2" - "@lerna/validation-error" "5.6.2" - "cosmiconfig" "^7.0.0" - "dedent" "^0.7.0" - "dot-prop" "^6.0.1" - "glob-parent" "^5.1.1" - "globby" "^11.0.2" - "js-yaml" "^4.1.0" - "load-json-file" "^6.2.0" - "npmlog" "^6.0.2" - "p-map" "^4.0.0" - "resolve-from" "^5.0.0" - "write-json-file" "^4.3.0" - -"@lerna/prompt@5.6.2": - "integrity" "sha512-4hTNmVYADEr0GJTMegWV+GW6n+dzKx1vN9v2ISqyle283Myv930WxuyO0PeYGqTrkneJsyPreCMovuEGCvZ0iQ==" - "resolved" "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "inquirer" "^8.2.4" - "npmlog" "^6.0.2" - -"@lerna/publish@5.6.2": - "integrity" "sha512-QaW0GjMJMuWlRNjeDCjmY/vjriGSWgkLS23yu8VKNtV5U3dt5yIKA3DNGV3HgZACuu45kQxzMDsfLzgzbGNtYA==" - "resolved" "https://registry.npmjs.org/@lerna/publish/-/publish-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/check-working-tree" "5.6.2" - "@lerna/child-process" "5.6.2" - "@lerna/collect-updates" "5.6.2" - "@lerna/command" "5.6.2" - "@lerna/describe-ref" "5.6.2" - "@lerna/log-packed" "5.6.2" - "@lerna/npm-conf" "5.6.2" - "@lerna/npm-dist-tag" "5.6.2" - "@lerna/npm-publish" "5.6.2" - "@lerna/otplease" "5.6.2" - "@lerna/output" "5.6.2" - "@lerna/pack-directory" "5.6.2" - "@lerna/prerelease-id-from-version" "5.6.2" - "@lerna/prompt" "5.6.2" - "@lerna/pulse-till-done" "5.6.2" - "@lerna/run-lifecycle" "5.6.2" - "@lerna/run-topologically" "5.6.2" - "@lerna/validation-error" "5.6.2" - "@lerna/version" "5.6.2" - "fs-extra" "^9.1.0" - "libnpmaccess" "^6.0.3" - "npm-package-arg" "8.1.1" - "npm-registry-fetch" "^13.3.0" - "npmlog" "^6.0.2" - "p-map" "^4.0.0" - "p-pipe" "^3.1.0" - "pacote" "^13.6.1" - "semver" "^7.3.4" - -"@lerna/pulse-till-done@5.6.2": - "integrity" "sha512-eA/X1RCxU5YGMNZmbgPi+Kyfx1Q3bn4P9jo/LZy+/NRRr1po3ASXP2GJZ1auBh/9A2ELDvvKTOXCVHqczKC6rA==" - "resolved" "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "npmlog" "^6.0.2" - -"@lerna/query-graph@5.6.2": - "integrity" "sha512-KRngr96yBP8XYDi9/U62fnGO+ZXqm04Qk6a2HtoTr/ha8QvO1s7Tgm0xs/G7qWXDQHZgunWIbmK/LhxM7eFQrw==" - "resolved" "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/package-graph" "5.6.2" - -"@lerna/resolve-symlink@5.6.2": - "integrity" "sha512-PDQy+7M8JEFtwIVHJgWvSxHkxJf9zXCENkvIWDB+SsoDPhw9+caewt46bTeP5iGm9pOMu3oZukaWo/TvF7sNjg==" - "resolved" "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "fs-extra" "^9.1.0" - "npmlog" "^6.0.2" - "read-cmd-shim" "^3.0.0" - -"@lerna/rimraf-dir@5.6.2": - "integrity" "sha512-jgEfzz7uBUiQKteq3G8MtJiA2D2VoKmZSSY3VSiW/tPOSXYxxSHxEsClQdCeNa6+sYrDNDT8fP6MJ3lPLjDeLA==" - "resolved" "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/child-process" "5.6.2" - "npmlog" "^6.0.2" - "path-exists" "^4.0.0" - "rimraf" "^3.0.2" - -"@lerna/run-lifecycle@5.6.2": - "integrity" "sha512-u9gGgq/50Fm8dvfcc/TSHOCAQvzLD7poVanDMhHYWOAqRDnellJEEmA1K/Yka4vZmySrzluahkry9G6jcREt+g==" - "resolved" "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/npm-conf" "5.6.2" - "@npmcli/run-script" "^4.1.7" - "npmlog" "^6.0.2" - "p-queue" "^6.6.2" - -"@lerna/run-topologically@5.6.2": - "integrity" "sha512-QQ/jGOIsVvUg3izShWsd67RlWYh9UOH2yw97Ol1zySX9+JspCMVQrn9eKq1Pk8twQOFhT87LpT/aaxbTBgREPw==" - "resolved" "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/query-graph" "5.6.2" - "p-queue" "^6.6.2" - -"@lerna/run@5.6.2": - "integrity" "sha512-c2kJxdFrNg5KOkrhmgwKKUOsfSrGNlFCe26EttufOJ3xfY0VnXlEw9rHOkTgwtu7969rfCdyaVP1qckMrF1Dgw==" - "resolved" "https://registry.npmjs.org/@lerna/run/-/run-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/command" "5.6.2" - "@lerna/filter-options" "5.6.2" - "@lerna/npm-run-script" "5.6.2" - "@lerna/output" "5.6.2" - "@lerna/profiler" "5.6.2" - "@lerna/run-topologically" "5.6.2" - "@lerna/timer" "5.6.2" - "@lerna/validation-error" "5.6.2" - "fs-extra" "^9.1.0" - "p-map" "^4.0.0" - -"@lerna/symlink-binary@5.6.2": - "integrity" "sha512-Cth+miwYyO81WAmrQbPBrLHuF+F0UUc0el5kRXLH6j5zzaRS3kMM68r40M7MmfH8m3GPi7691UARoWFEotW5jw==" - "resolved" "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/create-symlink" "5.6.2" - "@lerna/package" "5.6.2" - "fs-extra" "^9.1.0" - "p-map" "^4.0.0" - -"@lerna/symlink-dependencies@5.6.2": - "integrity" "sha512-dUVNQLEcjVOIQiT9OlSAKt0ykjyJPy8l9i4NJDe2/0XYaUjo8PWsxJ0vrutz27jzi2aZUy07ASmowQZEmnLHAw==" - "resolved" "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/create-symlink" "5.6.2" - "@lerna/resolve-symlink" "5.6.2" - "@lerna/symlink-binary" "5.6.2" - "fs-extra" "^9.1.0" - "p-map" "^4.0.0" - "p-map-series" "^2.1.0" - -"@lerna/temp-write@5.6.2": - "integrity" "sha512-S5ZNVTurSwWBmc9kh5alfSjmO3+BnRT6shYtOlmVIUYqWeYVYA5C1Htj322bbU4CSNCMFK6NQl4qGKL17HMuig==" - "resolved" "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "graceful-fs" "^4.1.15" - "is-stream" "^2.0.0" - "make-dir" "^3.0.0" - "temp-dir" "^1.0.0" - "uuid" "^8.3.2" - -"@lerna/timer@5.6.2": - "integrity" "sha512-AjMOiLc2B+5Nzdd9hNORetAdZ/WK8YNGX/+2ypzM68TMAPfIT5C40hMlSva9Yg4RsBz22REopXgM5s2zQd5ZQA==" - "resolved" "https://registry.npmjs.org/@lerna/timer/-/timer-5.6.2.tgz" - "version" "5.6.2" - -"@lerna/validation-error@5.6.2": - "integrity" "sha512-4WlDUHaa+RSJNyJRtX3gVIAPVzjZD2tle8AJ0ZYBfdZnZmG0VlB2pD1FIbOQPK8sY2h5m0cHLRvfLoLncqHvdQ==" - "resolved" "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "npmlog" "^6.0.2" - -"@lerna/version@5.6.2": - "integrity" "sha512-odNSR2rTbHW++xMZSQKu/F6Syrd/sUvwDLPaMKktoOSPKmycHt/eWcuQQyACdtc43Iqeu4uQd7PCLsniqOVFrw==" - "resolved" "https://registry.npmjs.org/@lerna/version/-/version-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/check-working-tree" "5.6.2" - "@lerna/child-process" "5.6.2" - "@lerna/collect-updates" "5.6.2" - "@lerna/command" "5.6.2" - "@lerna/conventional-commits" "5.6.2" - "@lerna/github-client" "5.6.2" - "@lerna/gitlab-client" "5.6.2" - "@lerna/output" "5.6.2" - "@lerna/prerelease-id-from-version" "5.6.2" - "@lerna/prompt" "5.6.2" - "@lerna/run-lifecycle" "5.6.2" - "@lerna/run-topologically" "5.6.2" - "@lerna/temp-write" "5.6.2" - "@lerna/validation-error" "5.6.2" - "@nrwl/devkit" ">=14.8.1 < 16" - "chalk" "^4.1.0" - "dedent" "^0.7.0" - "load-json-file" "^6.2.0" - "minimatch" "^3.0.4" - "npmlog" "^6.0.2" - "p-map" "^4.0.0" - "p-pipe" "^3.1.0" - "p-reduce" "^2.1.0" - "p-waterfall" "^2.1.1" - "semver" "^7.3.4" - "slash" "^3.0.0" - "write-json-file" "^4.3.0" - -"@lerna/write-log-file@5.6.2": - "integrity" "sha512-J09l18QnWQ3sXIRwuJkjXY3+KwPR2uO5NgbZGE3GXJK1V/LzOBRMvjGAIbuQHXw25uqe7vpLUpB8drtnFrubCQ==" - "resolved" "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "npmlog" "^6.0.2" - "write-file-atomic" "^4.0.1" - -"@metamask/detect-provider@^2.0.0": - "integrity" "sha512-sFpN+TX13E9fdBDh9lvQeZdJn4qYoRb/6QF2oZZK/Pn559IhCFacPMU1rMuqyXoFQF3JSJfii2l98B87QDPeCQ==" - "resolved" "https://registry.npmjs.org/@metamask/detect-provider/-/detect-provider-2.0.0.tgz" - "version" "2.0.0" - -"@metamask/eth-sig-util@^4.0.0", "@metamask/eth-sig-util@4.0.1": - "integrity" "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==" - "resolved" "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "ethereumjs-abi" "^0.6.8" - "ethereumjs-util" "^6.2.1" - "ethjs-util" "^0.1.6" - "tweetnacl" "^1.0.3" - "tweetnacl-util" "^0.15.1" - -"@metamask/eth-sig-util@^5.0.0": - "integrity" "sha512-wBOfkmPJoQG3c6kfxxJxQKfzxqSVtMxRjMD4C6xNtGU+TEuBacC3jIgjUUPlC5MTWu4XFo1Y8VWrmc1AlwAitA==" - "resolved" "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "@ethereumjs/util" "^8.0.0" - "bn.js" "4.11.8" - "ethereum-cryptography" "^1.1.2" - "ethjs-util" "^0.1.6" - "tweetnacl" "^1.0.3" - "tweetnacl-util" "^0.15.1" - -"@metamask/safe-event-emitter@^2.0.0": - "integrity" "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==" - "resolved" "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz" - "version" "2.0.0" - -"@noble/ed25519@^1.7.0": - "integrity" "sha512-Rk4SkJFaXZiznFyC/t77Q0NKS4FL7TLJJsVG2V2oiEq3kJVeTdxysEe/yRWSpnWMe808XRDJ+VFh5pt/FN5plw==" - "resolved" "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.1.tgz" - "version" "1.7.1" - -"@noble/hashes@^1.1.2", "@noble/hashes@~1.1.1": - "integrity" "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==" - "resolved" "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz" - "version" "1.1.3" - -"@noble/hashes@1.1.2": - "integrity" "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" - "resolved" "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz" - "version" "1.1.2" - -"@noble/secp256k1@^1.6.3": - "integrity" "sha512-kbacwGSsH/CTout0ZnZWxnW1B+jH/7r/WAAKLBtrRJ/+CUH7lgmQzl3GTrQua3SGKWNSDsS6lmjnDpIJ5Dxyaw==" - "resolved" "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.0.tgz" - "version" "1.7.0" - -"@noble/secp256k1@~1.6.0", "@noble/secp256k1@1.6.3": - "integrity" "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==" - "resolved" "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz" - "version" "1.6.3" - -"@nodelib/fs.scandir@2.1.5": - "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - "version" "2.1.5" - dependencies: - "@nodelib/fs.stat" "2.0.5" - "run-parallel" "^1.1.9" - -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - "version" "2.0.5" - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - "version" "1.2.8" - dependencies: - "@nodelib/fs.scandir" "2.1.5" - "fastq" "^1.6.0" - -"@nomicfoundation/ethereumjs-block@^4.0.0": - "integrity" "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "ethereum-cryptography" "0.1.3" - -"@nomicfoundation/ethereumjs-blockchain@^6.0.0": - "integrity" "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-ethash" "^2.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "abstract-level" "^1.0.3" - "debug" "^4.3.3" - "ethereum-cryptography" "0.1.3" - "level" "^8.0.0" - "lru-cache" "^5.1.1" - "memory-level" "^1.0.0" - -"@nomicfoundation/ethereumjs-common@^3.0.0": - "integrity" "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "crc-32" "^1.2.0" - -"@nomicfoundation/ethereumjs-ethash@^2.0.0": - "integrity" "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "abstract-level" "^1.0.3" - "bigint-crypto-utils" "^3.0.23" - "ethereum-cryptography" "0.1.3" - -"@nomicfoundation/ethereumjs-evm@^1.0.0": - "integrity" "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@types/async-eventemitter" "^0.2.1" - "async-eventemitter" "^0.2.4" - "debug" "^4.3.3" - "ethereum-cryptography" "0.1.3" - "mcl-wasm" "^0.7.1" - "rustbn.js" "~0.2.0" - -"@nomicfoundation/ethereumjs-rlp@^4.0.0", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2": - "integrity" "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz" - "version" "4.0.0" - -"@nomicfoundation/ethereumjs-statemanager@^1.0.0": - "integrity" "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "debug" "^4.3.3" - "ethereum-cryptography" "0.1.3" - "functional-red-black-tree" "^1.0.1" - -"@nomicfoundation/ethereumjs-trie@^5.0.0": - "integrity" "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "ethereum-cryptography" "0.1.3" - "readable-stream" "^3.6.0" - -"@nomicfoundation/ethereumjs-tx@^4.0.0": - "integrity" "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "ethereum-cryptography" "0.1.3" - -"@nomicfoundation/ethereumjs-util@^8.0.0": - "integrity" "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz" - "version" "8.0.0" - dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" - "ethereum-cryptography" "0.1.3" - -"@nomicfoundation/ethereumjs-vm@^6.0.0": - "integrity" "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-evm" "^1.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@types/async-eventemitter" "^0.2.1" - "async-eventemitter" "^0.2.4" - "debug" "^4.3.3" - "ethereum-cryptography" "0.1.3" - "functional-red-black-tree" "^1.0.1" - "mcl-wasm" "^0.7.1" - "rustbn.js" "~0.2.0" - -"@nomicfoundation/hardhat-chai-matchers@^1.0.0", "@nomicfoundation/hardhat-chai-matchers@^1.0.3": - "integrity" "sha512-n/5UMwGaUK2zM8ALuMChVwB1lEPeDTb5oBjQ1g7hVsUdS8x+XG9JIEp4Ze6Bwy98tghA7Y1+PCH4SNE2P3UQ2g==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "@ethersproject/abi" "^5.1.2" - "@types/chai-as-promised" "^7.1.3" - "chai-as-promised" "^7.1.1" - "chalk" "^2.4.2" - "deep-eql" "^4.0.1" - "ordinal" "^1.0.3" - -"@nomicfoundation/hardhat-network-helpers@^1.0.0", "@nomicfoundation/hardhat-network-helpers@^1.0.6": - "integrity" "sha512-a35iVD4ycF6AoTfllAnKm96IPIzzHpgKX/ep4oKc2bsUKFfMlacWdyntgC/7d5blyCTXfFssgNAvXDZfzNWVGQ==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "ethereumjs-util" "^7.1.4" - -"@nomicfoundation/hardhat-toolbox@^1.0.2": - "integrity" "sha512-8CEgWSKUK2aMit+76Sez8n7UB0Ze1lwT+LcWxj4EFP30lQWOwOws048t6MTPfThH0BlSWjC6hJRr0LncIkc1Sw==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-1.0.2.tgz" - "version" "1.0.2" - -"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.0": - "integrity" "sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz" - "version" "0.1.0" - -"@nomicfoundation/solidity-analyzer@^0.1.0": - "integrity" "sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg==" - "resolved" "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz" - "version" "0.1.0" - optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.0" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.0" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.0" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.0" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.0" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.0" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.0" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.0" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.0" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.0" - -"@nomiclabs/hardhat-ethers@^2.0.0", "@nomiclabs/hardhat-ethers@^2.1.0": - "integrity" "sha512-RHWYwnxryWR8hzRmU4Jm/q4gzvXpetUOJ4OPlwH2YARcDB+j79+yAYCwO0lN1SUOb4++oOTJEe6AWLEc42LIvg==" - "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.1.tgz" - "version" "2.2.1" - -"@nomiclabs/hardhat-etherscan@^2.1.6", "@nomiclabs/hardhat-etherscan@^3.0.0": - "integrity" "sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA==" - "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz" - "version" "2.1.8" - dependencies: - "@ethersproject/abi" "^5.1.2" - "@ethersproject/address" "^5.0.2" - "cbor" "^5.0.2" - "debug" "^4.1.1" - "fs-extra" "^7.0.1" - "node-fetch" "^2.6.0" - "semver" "^6.3.0" - -"@nomiclabs/hardhat-waffle@^2.0.3": - "integrity" "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==" - "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz" - "version" "2.0.3" - dependencies: - "@types/sinon-chai" "^3.2.3" - "@types/web3" "1.0.19" - -"@nomiclabs/hardhat-web3@^2.0.0": - "integrity" "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==" - "resolved" "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "@types/bignumber.js" "^5.0.0" - -"@npmcli/arborist@5.3.0": - "integrity" "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==" - "resolved" "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz" - "version" "5.3.0" - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.3" - "@npmcli/metavuln-calculator" "^3.0.1" - "@npmcli/move-file" "^2.0.0" - "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/package-json" "^2.0.0" - "@npmcli/run-script" "^4.1.3" - "bin-links" "^3.0.0" - "cacache" "^16.0.6" - "common-ancestor-path" "^1.0.1" - "json-parse-even-better-errors" "^2.3.1" - "json-stringify-nice" "^1.1.4" - "mkdirp" "^1.0.4" - "mkdirp-infer-owner" "^2.0.0" - "nopt" "^5.0.0" - "npm-install-checks" "^5.0.0" - "npm-package-arg" "^9.0.0" - "npm-pick-manifest" "^7.0.0" - "npm-registry-fetch" "^13.0.0" - "npmlog" "^6.0.2" - "pacote" "^13.6.1" - "parse-conflict-json" "^2.0.1" - "proc-log" "^2.0.0" - "promise-all-reject-late" "^1.0.0" - "promise-call-limit" "^1.0.1" - "read-package-json-fast" "^2.0.2" - "readdir-scoped-modules" "^1.1.0" - "rimraf" "^3.0.2" - "semver" "^7.3.7" - "ssri" "^9.0.0" - "treeverse" "^2.0.0" - "walk-up-path" "^1.0.0" - -"@npmcli/fs@^2.1.0": - "integrity" "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==" - "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "@gar/promisify" "^1.1.3" - "semver" "^7.3.5" - -"@npmcli/git@^3.0.0": - "integrity" "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==" - "resolved" "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "@npmcli/promise-spawn" "^3.0.0" - "lru-cache" "^7.4.4" - "mkdirp" "^1.0.4" - "npm-pick-manifest" "^7.0.0" - "proc-log" "^2.0.0" - "promise-inflight" "^1.0.1" - "promise-retry" "^2.0.1" - "semver" "^7.3.5" - "which" "^2.0.2" - -"@npmcli/installed-package-contents@^1.0.7": - "integrity" "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==" - "resolved" "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz" - "version" "1.0.7" - dependencies: - "npm-bundled" "^1.1.1" - "npm-normalize-package-bin" "^1.0.1" - -"@npmcli/map-workspaces@^2.0.3": - "integrity" "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==" - "resolved" "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "@npmcli/name-from-folder" "^1.0.1" - "glob" "^8.0.1" - "minimatch" "^5.0.1" - "read-package-json-fast" "^2.0.3" - -"@npmcli/metavuln-calculator@^3.0.1": - "integrity" "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==" - "resolved" "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "cacache" "^16.0.0" - "json-parse-even-better-errors" "^2.3.1" - "pacote" "^13.0.3" - "semver" "^7.3.5" - -"@npmcli/move-file@^2.0.0": - "integrity" "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==" - "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "mkdirp" "^1.0.4" - "rimraf" "^3.0.2" - -"@npmcli/name-from-folder@^1.0.1": - "integrity" "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==" - "resolved" "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz" - "version" "1.0.1" - -"@npmcli/node-gyp@^2.0.0": - "integrity" "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==" - "resolved" "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz" - "version" "2.0.0" - -"@npmcli/package-json@^2.0.0": - "integrity" "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==" - "resolved" "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "json-parse-even-better-errors" "^2.3.1" - -"@npmcli/promise-spawn@^3.0.0": - "integrity" "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==" - "resolved" "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "infer-owner" "^1.0.4" - -"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.1.7": - "integrity" "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==" - "resolved" "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" - "node-gyp" "^9.0.0" - "read-package-json-fast" "^2.0.3" - "which" "^2.0.2" - -"@nrwl/cli@15.0.13": - "integrity" "sha512-w0oOP4v176CbD34+VytiAItIH3fOeiaccq7T2Un/hhx+/Q9mdO/VWyYZOKmp85uGodx/yZ6LyGW6rX0BjM0Rsg==" - "resolved" "https://registry.npmjs.org/@nrwl/cli/-/cli-15.0.13.tgz" - "version" "15.0.13" - dependencies: - "nx" "15.0.13" - -"@nrwl/devkit@>=14.8.1 < 16": - "integrity" "sha512-/8k7wbBRFf2UC+T4F+vWMy3bfSGi+uK6RwXk53moLq3nxehXaQhRiCqasC6VJFUw3zK6luu2T7xkPUlA9K9l4w==" - "resolved" "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.0.13.tgz" - "version" "15.0.13" - dependencies: - "@phenomnomnominal/tsquery" "4.1.1" - "ejs" "^3.1.7" - "ignore" "^5.0.4" - "semver" "7.3.4" - "tslib" "^2.3.0" - -"@nrwl/tao@15.0.13": - "integrity" "sha512-z55RKnVOYsiABKFUIj+QBf6I4fUwTlObxJpgUJp0i3E97P3BgbzhTG1EhuBxLH8fGKrbOAPs0ct38Asl+zGZfQ==" - "resolved" "https://registry.npmjs.org/@nrwl/tao/-/tao-15.0.13.tgz" - "version" "15.0.13" - dependencies: - "nx" "15.0.13" - -"@octokit/auth-token@^3.0.0": - "integrity" "sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==" - "resolved" "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "@octokit/types" "^8.0.0" - -"@octokit/core@^4.1.0", "@octokit/core@>=3", "@octokit/core@>=4": - "integrity" "sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ==" - "resolved" "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^8.0.0" - "before-after-hook" "^2.2.0" - "universal-user-agent" "^6.0.0" - -"@octokit/endpoint@^7.0.0": - "integrity" "sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw==" - "resolved" "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.3.tgz" - "version" "7.0.3" - dependencies: - "@octokit/types" "^8.0.0" - "is-plain-object" "^5.0.0" - "universal-user-agent" "^6.0.0" - -"@octokit/graphql@^5.0.0": - "integrity" "sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A==" - "resolved" "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.4.tgz" - "version" "5.0.4" - dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^8.0.0" - "universal-user-agent" "^6.0.0" - -"@octokit/openapi-types@^14.0.0": - "integrity" "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" - "resolved" "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz" - "version" "14.0.0" - -"@octokit/plugin-enterprise-rest@^6.0.1": - "integrity" "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz" - "version" "6.0.1" - -"@octokit/plugin-paginate-rest@^5.0.0": - "integrity" "sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "@octokit/types" "^8.0.0" - -"@octokit/plugin-request-log@^1.0.4": - "integrity" "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" - "version" "1.0.4" - -"@octokit/plugin-rest-endpoint-methods@^6.7.0": - "integrity" "sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw==" - "resolved" "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz" - "version" "6.7.0" - dependencies: - "@octokit/types" "^8.0.0" - "deprecation" "^2.3.1" - -"@octokit/request-error@^3.0.0": - "integrity" "sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg==" - "resolved" "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "@octokit/types" "^8.0.0" - "deprecation" "^2.0.0" - "once" "^1.4.0" - -"@octokit/request@^6.0.0": - "integrity" "sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw==" - "resolved" "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz" - "version" "6.2.2" - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^8.0.0" - "is-plain-object" "^5.0.0" - "node-fetch" "^2.6.7" - "universal-user-agent" "^6.0.0" - -"@octokit/rest@^19.0.3": - "integrity" "sha512-+4qdrUFq2lk7Va+Qff3ofREQWGBeoTKNqlJO+FGjFP35ZahP+nBenhZiGdu8USSgmq4Ky3IJ/i4u0xbLqHaeow==" - "resolved" "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.5.tgz" - "version" "19.0.5" - dependencies: - "@octokit/core" "^4.1.0" - "@octokit/plugin-paginate-rest" "^5.0.0" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^6.7.0" - -"@octokit/types@^8.0.0": - "integrity" "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==" - "resolved" "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz" - "version" "8.0.0" - dependencies: - "@octokit/openapi-types" "^14.0.0" - -"@openzeppelin/contracts-upgradeable@^4.7.3": - "integrity" "sha512-5GeFgqMiDlqGT8EdORadp1ntGF0qzWZLmEY7Wbp/yVhN7/B3NNzCxujuI77ktlyG81N3CUZP8cZe3ZAQ/cW10w==" - "resolved" "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.0.tgz" - "version" "4.8.0" - -"@openzeppelin/contracts@^4.2.0", "@openzeppelin/contracts@^4.6.0", "@openzeppelin/contracts@^4.7.3": - "integrity" "sha512-AGuwhRRL+NaKx73WKRNzeCxOCOCxpaqF+kp8TJ89QzAipSwZy/NoflkWaL9bywXFRhIzXt8j38sfF7KBKCPWLw==" - "resolved" "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.0.tgz" - "version" "4.8.0" - -"@parcel/watcher@2.0.4": - "integrity" "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==" - "resolved" "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "node-addon-api" "^3.2.1" - "node-gyp-build" "^4.3.0" - -"@phenomnomnominal/tsquery@4.1.1": - "integrity" "sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ==" - "resolved" "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "esquery" "^1.0.1" - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - "integrity" "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - "resolved" "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz" - "version" "1.1.2" - -"@protobufjs/base64@^1.1.2": - "integrity" "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - "resolved" "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz" - "version" "1.1.2" - -"@protobufjs/codegen@^2.0.4": - "integrity" "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - "resolved" "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz" - "version" "2.0.4" - -"@protobufjs/eventemitter@^1.1.0": - "integrity" "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - "resolved" "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz" - "version" "1.1.0" - -"@protobufjs/fetch@^1.1.0": - "integrity" "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==" - "resolved" "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - "integrity" "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - "resolved" "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz" - "version" "1.0.2" - -"@protobufjs/inquire@^1.1.0": - "integrity" "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - "resolved" "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz" - "version" "1.1.0" - -"@protobufjs/path@^1.1.2": - "integrity" "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - "resolved" "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz" - "version" "1.1.2" - -"@protobufjs/pool@^1.1.0": - "integrity" "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - "resolved" "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz" - "version" "1.1.0" - -"@protobufjs/utf8@^1.1.0": - "integrity" "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - "resolved" "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz" - "version" "1.1.0" - -"@scure/base@~1.1.0": - "integrity" "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" - "resolved" "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" - "version" "1.1.1" - -"@scure/bip32@1.1.0": - "integrity" "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==" - "resolved" "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "@noble/hashes" "~1.1.1" - "@noble/secp256k1" "~1.6.0" - "@scure/base" "~1.1.0" - -"@scure/bip39@1.1.0": - "integrity" "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==" - "resolved" "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "@noble/hashes" "~1.1.1" - "@scure/base" "~1.1.0" - -"@sentry/core@5.30.0": - "integrity" "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==" - "resolved" "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz" - "version" "5.30.0" - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - "tslib" "^1.9.3" - -"@sentry/hub@5.30.0": - "integrity" "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==" - "resolved" "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz" - "version" "5.30.0" - dependencies: - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - "tslib" "^1.9.3" - -"@sentry/minimal@5.30.0": - "integrity" "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==" - "resolved" "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz" - "version" "5.30.0" - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/types" "5.30.0" - "tslib" "^1.9.3" - -"@sentry/node@^5.18.1": - "integrity" "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==" - "resolved" "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz" - "version" "5.30.0" - dependencies: - "@sentry/core" "5.30.0" - "@sentry/hub" "5.30.0" - "@sentry/tracing" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - "cookie" "^0.4.1" - "https-proxy-agent" "^5.0.0" - "lru_map" "^0.3.3" - "tslib" "^1.9.3" - -"@sentry/tracing@5.30.0": - "integrity" "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==" - "resolved" "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz" - "version" "5.30.0" - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - "tslib" "^1.9.3" - -"@sentry/types@^7.x", "@sentry/types@5.30.0": - "integrity" "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" - "resolved" "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" - "version" "5.30.0" - -"@sentry/utils@5.30.0": - "integrity" "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==" - "resolved" "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz" - "version" "5.30.0" - dependencies: - "@sentry/types" "5.30.0" - "tslib" "^1.9.3" - -"@sinclair/typebox@^0.24.1": - "integrity" "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" - "version" "0.24.51" - -"@sindresorhus/is@^0.14.0": - "integrity" "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" - "version" "0.14.0" - -"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": - "integrity" "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" - "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" - "version" "4.6.0" - -"@sinonjs/commons@^1.7.0": - "integrity" "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==" - "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz" - "version" "1.8.5" - dependencies: - "type-detect" "4.0.8" - -"@sinonjs/fake-timers@^9.1.2": - "integrity" "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==" - "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" - "version" "9.1.2" - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@socket.io/component-emitter@~3.1.0": - "integrity" "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" - "resolved" "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz" - "version" "3.1.0" - -"@solana/buffer-layout@^4.0.0": - "integrity" "sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ==" - "resolved" "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "buffer" "~6.0.3" - -"@solana/web3.js@^1.66.2": - "integrity" "sha512-RyaHMR2jGmaesnYP045VLeBGfR/gAW3cvZHzMFGg7bkO+WOYOYp1nEllf0/la4U4qsYGKCsO9eEevR5fhHiVHg==" - "resolved" "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.66.2.tgz" - "version" "1.66.2" - dependencies: - "@babel/runtime" "^7.12.5" - "@noble/ed25519" "^1.7.0" - "@noble/hashes" "^1.1.2" - "@noble/secp256k1" "^1.6.3" - "@solana/buffer-layout" "^4.0.0" - "bigint-buffer" "^1.1.5" - "bn.js" "^5.0.0" - "borsh" "^0.7.0" - "bs58" "^4.0.1" - "buffer" "6.0.1" - "fast-stable-stringify" "^1.0.0" - "jayson" "^3.4.4" - "node-fetch" "2" - "rpc-websockets" "^7.5.0" - "superstruct" "^0.14.2" - -"@solidity-parser/parser@^0.14.0": - "integrity" "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==" - "resolved" "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz" - "version" "0.14.5" - dependencies: - "antlr4ts" "^0.5.0-alpha.4" - -"@szmarczak/http-timer@^1.1.2": - "integrity" "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==" - "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "defer-to-connect" "^1.0.1" - -"@szmarczak/http-timer@^4.0.5": - "integrity" "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==" - "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" - "version" "4.0.6" - dependencies: - "defer-to-connect" "^2.0.0" - -"@szmarczak/http-timer@^5.0.1": - "integrity" "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==" - "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "defer-to-connect" "^2.0.1" - -"@tootallnate/once@2": - "integrity" "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" - "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" - "version" "2.0.0" - -"@toruslabs/base-controllers@^2.2.6": - "integrity" "sha512-spN4ltQv9ulzgxZIskfME4i1qSaW+eywpEJuOjRJ3vw07WPydXNzO4xAMHoE4Q5Wf/Y34rZUwJcLYjqieM+rgQ==" - "resolved" "https://registry.npmjs.org/@toruslabs/base-controllers/-/base-controllers-2.2.6.tgz" - "version" "2.2.6" - dependencies: - "@toruslabs/broadcast-channel" "^6.0.0" - "@toruslabs/http-helpers" "^3.0.0" - "@toruslabs/openlogin-jrpc" "^2.1.0" - "async-mutex" "^0.3.2" - "bignumber.js" "^9.0.2" - "bowser" "^2.11.0" - "eth-rpc-errors" "^4.0.3" - "ethereumjs-util" "^7.1.5" - "json-rpc-random-id" "^1.0.1" - "lodash" "^4.17.21" - "loglevel" "^1.8.0" - -"@toruslabs/broadcast-channel@^6.0.0": - "integrity" "sha512-FapnmyPLpqfrdbfyawlReRpluEKQ2riqCNOOZQz9KHPF8a/XsgYi/UAdrR02k6BHaZYyV6D52Oji1gM6CPj6EQ==" - "resolved" "https://registry.npmjs.org/@toruslabs/broadcast-channel/-/broadcast-channel-6.1.1.tgz" - "version" "6.1.1" - dependencies: - "@babel/runtime" "^7.19.4" - "@toruslabs/eccrypto" "^1.1.8" - "@toruslabs/metadata-helpers" "^3.0.0" - "bowser" "^2.11.0" - "keccak" "^3.0.2" - "loglevel" "^1.8.0" - "oblivious-set" "1.1.1" - "socket.io-client" "^4.5.3" - "unload" "^2.3.1" - -"@toruslabs/eccrypto@^1.1.8": - "integrity" "sha512-5dIrO2KVqvnAPOPfJ2m6bnjp9vav9GIcCZXiXRW/bJuIDRLVxJhVvRlleF4oaEZPq5yX5piHq5jVHagNNS0jOQ==" - "resolved" "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-1.1.8.tgz" - "version" "1.1.8" - dependencies: - "acorn" "^8.4.1" - "elliptic" "^6.5.4" - "es6-promise" "^4.2.8" - "nan" "^2.14.2" - optionalDependencies: - "secp256k1" "^3.8.0" - -"@toruslabs/http-helpers@^3.0.0", "@toruslabs/http-helpers@^3.1.0", "@toruslabs/http-helpers@^3.2.0": - "integrity" "sha512-fCfvBHfYzd7AyOYlBo7wihh5nj6+4Ik6V5+nI7H63oiKICjMlByTXSauTUa/qm2mjZJn/OmVYeV5guPIgxoW1w==" - "resolved" "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "lodash.merge" "^4.6.2" - "loglevel" "^1.8.0" - -"@toruslabs/metadata-helpers@^3.0.0": - "integrity" "sha512-0eWCIbKpaBx3/z3BDyWebxUisCS37Uxb0zxOEWizSXjGH/T6TJCrBeZFPmANN3hq47GoNCsRiku9cgfij1UMTQ==" - "resolved" "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "@toruslabs/eccrypto" "^1.1.8" - "@toruslabs/http-helpers" "^3.0.0" - "elliptic" "^6.5.4" - "json-stable-stringify" "^1.0.1" - "keccak" "^3.0.2" - -"@toruslabs/openlogin-ed25519@^2.0.0": - "integrity" "sha512-gz00QpMHbSVaZFKATxbsCbtO2uRyF7xIvetuzOCfbfcjkTz0Wonr/8B44uiIDe4j2ddv4Hx8HvnBikFDLQQrZA==" - "resolved" "https://registry.npmjs.org/@toruslabs/openlogin-ed25519/-/openlogin-ed25519-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "@toruslabs/tweetnacl-js" "^1.0.3" - -"@toruslabs/openlogin-jrpc@^2.1.0", "@toruslabs/openlogin-jrpc@^2.6.0": - "integrity" "sha512-hX2b1HSBvC6jSVlXuhgdH8qyE83cj6SEiHjQ5VsHfRUv15wBgzj+x2Yjw5pjvbrnYXzUlFvFySs10EU7na1cuA==" - "resolved" "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-2.6.0.tgz" - "version" "2.6.0" - dependencies: - "@toruslabs/openlogin-utils" "^2.1.0" - "end-of-stream" "^1.4.4" - "eth-rpc-errors" "^4.0.3" - "events" "^3.3.0" - "fast-safe-stringify" "^2.1.1" - "once" "^1.4.0" - "pump" "^3.0.0" - "readable-stream" "^3.6.0" - -"@toruslabs/openlogin-utils@^2.1.0": - "integrity" "sha512-UVgjco4winOn4Gj0VRTvjSZgBA84h2OIkKuxrBFjS+yWhgxQBF4hXGp83uicSgx1MujtjyUOdhJrpV2joRHt9w==" - "resolved" "https://registry.npmjs.org/@toruslabs/openlogin-utils/-/openlogin-utils-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "base64url" "^3.0.1" - "keccak" "^3.0.2" - "randombytes" "^2.1.0" - -"@toruslabs/openlogin@^2.7.0": - "integrity" "sha512-7ro3fnMYIXQ8jotJZoO/6KHsb9Pse3AQR4o+nT+/4KZ/j2rizcNj7vJ7BXqoDebJd1bKYu5NkKlItYdjeq+zag==" - "resolved" "https://registry.npmjs.org/@toruslabs/openlogin/-/openlogin-2.7.0.tgz" - "version" "2.7.0" - dependencies: - "@toruslabs/eccrypto" "^1.1.8" - "@toruslabs/http-helpers" "^3.1.0" - "@toruslabs/openlogin-jrpc" "^2.6.0" - "@toruslabs/openlogin-utils" "^2.1.0" - "lodash.merge" "^4.6.2" - "loglevel" "^1.8.0" - "pump" "^3.0.0" - -"@toruslabs/tweetnacl-js@^1.0.3": - "integrity" "sha512-WQJYMTR/bkqvpk3DWOqRt5e24RhwJp9PXUoSj4zSthd3+fDhKYCI56YVMPNDKah1fCffOe9F3m8iZ5SgDZ+Csw==" - "resolved" "https://registry.npmjs.org/@toruslabs/tweetnacl-js/-/tweetnacl-js-1.0.3.tgz" - "version" "1.0.3" - -"@truffle/error@^0.1.1": - "integrity" "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==" - "resolved" "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz" - "version" "0.1.1" - -"@truffle/hdwallet-provider@latest": - "version" "2.1.1" - dependencies: - "@ethereumjs/common" "^2.4.0" - "@ethereumjs/tx" "^3.3.0" - "@metamask/eth-sig-util" "4.0.1" - "@truffle/hdwallet" "^0.1.0" - "@types/web3" "^1.0.20" - "ethereum-cryptography" "1.1.2" - "ethereum-protocol" "^1.0.1" - "ethereumjs-util" "^7.1.5" - "web3" "1.7.4" - "web3-provider-engine" "16.0.3" - -"@truffle/hdwallet@^0.1.0": - "integrity" "sha512-tRqx7Kn5SbQoe56S5pWrIN3/aM9YMK2bFR8iD5gHGv6uXHRCL7b+PkeI1gyKk09SRWkY11YjRw+Up/V0x6tw6A==" - "resolved" "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.0.tgz" - "version" "0.1.0" - dependencies: - "ethereum-cryptography" "1.1.2" - "keccak" "3.0.2" - "secp256k1" "4.0.3" - -"@truffle/interface-adapter@^0.5.24": - "integrity" "sha512-c4nFMnzSuE//xUd16CDc7mjx1NVe5kEDoid/utsma5JPg+AxnOkD4j1QGl7xMqCwQVARLF53FfQzt4DFmZcznQ==" - "resolved" "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.24.tgz" - "version" "0.5.24" - dependencies: - "bn.js" "^5.1.3" - "ethers" "^4.0.32" - "web3" "1.7.4" - -"@truffle/provider@^0.2.24": - "integrity" "sha512-u7dUBpvWfBq3scMmqC/pTW/jFMH2714XEvqbCY7leWXrBWJjzn8cZgxeyqhSLBaZMYp3n8iugj6kvrRMnk683g==" - "resolved" "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.63.tgz" - "version" "0.2.63" - dependencies: - "@truffle/error" "^0.1.1" - "@truffle/interface-adapter" "^0.5.24" - "debug" "^4.3.1" - "web3" "1.7.4" - -"@trufflesuite/bigint-buffer@1.1.10": - "integrity" "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==" - "resolved" "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz" - "version" "1.1.10" - dependencies: - "node-gyp-build" "4.4.0" - -"@tsconfig/node10@^1.0.7": - "integrity" "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - "resolved" "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" - "version" "1.0.9" - -"@tsconfig/node12@^1.0.7": - "integrity" "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - "resolved" "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" - "version" "1.0.11" - -"@tsconfig/node14@^1.0.0": - "integrity" "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - "resolved" "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" - "version" "1.0.3" - -"@tsconfig/node16@^1.0.2": - "integrity" "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" - "resolved" "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" - "version" "1.0.3" - -"@typechain/ethers-v5@^10.1.0", "@typechain/ethers-v5@^9.0.0": - "integrity" "sha512-bAanuPl1L2itaUdMvor/QvwnIH+TM/CmG00q17Ilv3ZZMeJ2j8HcarhgJUZ9pBY1teBb85P8cC03dz3mSSx+tQ==" - "resolved" "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-9.0.0.tgz" - "version" "9.0.0" - dependencies: - "lodash" "^4.17.15" - "ts-essentials" "^7.0.1" - -"@typechain/hardhat@^2.3.0", "@typechain/hardhat@^6.1.2": - "integrity" "sha512-BQV8OKQi0KAzLXCdsPO0pZBNQQ6ra8A2ucC26uFX/kquRBtJu1yEyWnVSmtr07b5hyRoJRpzUeINLnyqz4/MAw==" - "resolved" "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-2.3.1.tgz" - "version" "2.3.1" - dependencies: - "fs-extra" "^9.1.0" - -"@types/amqplib@^0.8.2": - "integrity" "sha512-p+TFLzo52f8UanB+Nq6gyUi65yecAcRY3nYowU6MPGFtaJvEDxcnFWrxssSTkF+ts1W3zyQDvgVICLQem5WxRA==" - "resolved" "https://registry.npmjs.org/@types/amqplib/-/amqplib-0.8.2.tgz" - "version" "0.8.2" - dependencies: - "@types/bluebird" "*" - "@types/node" "*" - -"@types/async-eventemitter@^0.2.1": - "integrity" "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==" - "resolved" "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz" - "version" "0.2.1" - -"@types/babel__core@^7.1.14": - "integrity" "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==" - "resolved" "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz" - "version" "7.1.20" - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - "integrity" "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==" - "resolved" "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" - "version" "7.6.4" - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - "integrity" "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==" - "resolved" "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" - "version" "7.4.1" - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - "integrity" "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==" - "resolved" "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz" - "version" "7.18.2" - dependencies: - "@babel/types" "^7.3.0" - -"@types/bignumber.js@^5.0.0": - "integrity" "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==" - "resolved" "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "bignumber.js" "*" - -"@types/bluebird@*": - "integrity" "sha512-g2qEd+zkfkTEudA2SrMAeAvY7CrFqtbsLILm2dT2VIeKTqMqVzcdfURlvu6FU3srRgbmXN1Srm94pg34EIehww==" - "resolved" "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.37.tgz" - "version" "3.5.37" - -"@types/bn.js@*", "@types/bn.js@^5.1.0": - "integrity" "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==" - "resolved" "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "@types/node" "*" - -"@types/bn.js@^4.11.3": - "integrity" "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==" - "resolved" "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz" - "version" "4.11.6" - dependencies: - "@types/node" "*" - -"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": - "integrity" "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==" - "resolved" "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "*" - "@types/node" "*" - "@types/responselike" "*" - -"@types/chai-as-promised@^7.1.3", "@types/chai-as-promised@^7.1.5": - "integrity" "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==" - "resolved" "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz" - "version" "7.1.5" - dependencies: - "@types/chai" "*" - -"@types/chai@*", "@types/chai@^4.2.0", "@types/chai@^4.3.0": - "integrity" "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==" - "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz" - "version" "4.3.4" - -"@types/concat-stream@^1.6.0": - "integrity" "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==" - "resolved" "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz" - "version" "1.6.1" - dependencies: - "@types/node" "*" - -"@types/connect@^3.4.33": - "integrity" "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==" - "resolved" "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" - "version" "3.4.35" - dependencies: - "@types/node" "*" - -"@types/eslint-scope@^3.7.3": - "integrity" "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==" - "resolved" "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz" - "version" "3.7.4" - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - "integrity" "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==" - "resolved" "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz" - "version" "8.4.10" - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - "integrity" "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - "resolved" "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" - "version" "1.0.0" - -"@types/estree@^0.0.51": - "integrity" "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" - "version" "0.0.51" - -"@types/form-data@0.0.33": - "integrity" "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==" - "resolved" "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz" - "version" "0.0.33" - dependencies: - "@types/node" "*" - -"@types/glob@^7.1.1": - "integrity" "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==" - "resolved" "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/graceful-fs@^4.1.3": - "integrity" "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==" - "resolved" "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" - "version" "4.1.5" - dependencies: - "@types/node" "*" - -"@types/http-cache-semantics@*": - "integrity" "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" - "resolved" "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" - "version" "4.0.1" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - "integrity" "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" - "version" "2.0.4" - -"@types/istanbul-lib-report@*": - "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==" - "resolved" "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - "integrity" "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==" - "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^28.1.7": - "integrity" "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==" - "resolved" "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz" - "version" "28.1.8" - dependencies: - "expect" "^28.0.0" - "pretty-format" "^28.0.0" - -"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - "integrity" "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" - "version" "7.0.11" - -"@types/json5@^0.0.29": - "integrity" "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - "resolved" "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" - "version" "0.0.29" - -"@types/jsonwebtoken@^8.5.8": - "integrity" "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==" - "resolved" "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz" - "version" "8.5.9" - dependencies: - "@types/node" "*" - -"@types/keyv@*": - "integrity" "sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw==" - "resolved" "https://registry.npmjs.org/@types/keyv/-/keyv-4.2.0.tgz" - "version" "4.2.0" - dependencies: - "keyv" "*" - -"@types/lodash@^4.14.188": - "integrity" "sha512-zmEmF5OIM3rb7SbLCFYoQhO4dGt2FRM9AMkxvA3LaADOF1n8in/zGJlWji9fmafLoNyz+FoL6FE0SLtGIArD7w==" - "resolved" "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.188.tgz" - "version" "4.14.188" - -"@types/long@^4.0.1": - "integrity" "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - "resolved" "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz" - "version" "4.0.2" - -"@types/lru-cache@^5.1.0": - "integrity" "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - "resolved" "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" - "version" "5.1.1" - -"@types/lru-cache@5.1.1": - "integrity" "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - "resolved" "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" - "version" "5.1.1" - -"@types/minimatch@*": - "integrity" "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" - "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" - "version" "5.1.2" - -"@types/minimatch@^3.0.3": - "integrity" "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" - "version" "3.0.5" - -"@types/minimist@^1.2.0": - "integrity" "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" - "resolved" "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" - "version" "1.2.2" - -"@types/mkdirp@^0.5.2": - "integrity" "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==" - "resolved" "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz" - "version" "0.5.2" - dependencies: - "@types/node" "*" - -"@types/mocha@^9.0.0", "@types/mocha@^9.1.0", "@types/mocha@^9.1.1": - "integrity" "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" - "resolved" "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" - "version" "9.1.1" - -"@types/node-fetch@^2.6.2": - "integrity" "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==" - "resolved" "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz" - "version" "2.6.2" - dependencies: - "@types/node" "*" - "form-data" "^3.0.0" - -"@types/node@*", "@types/node@>=12.0.0", "@types/node@>=13.7.0": - "integrity" "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz" - "version" "18.11.9" - -"@types/node@^10.0.3": - "integrity" "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" - "version" "10.17.60" - -"@types/node@^12.12.54": - "integrity" "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" - "version" "12.20.55" - -"@types/node@^12.12.6": - "integrity" "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" - "version" "12.20.55" - -"@types/node@^17.0.23": - "integrity" "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" - "version" "17.0.45" - -"@types/node@^8.0.0": - "integrity" "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz" - "version" "8.10.66" - -"@types/normalize-package-data@^2.4.0": - "integrity" "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - "resolved" "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" - "version" "2.4.1" - -"@types/parse-json@^4.0.0": - "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - "resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" - "version" "4.0.0" - -"@types/pbkdf2@^3.0.0": - "integrity" "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==" - "resolved" "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "@types/node" "*" - -"@types/prettier@^2.1.1", "@types/prettier@^2.1.5": - "integrity" "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==" - "resolved" "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz" - "version" "2.7.1" - -"@types/prop-types@*": - "integrity" "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - "resolved" "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" - "version" "15.7.5" - -"@types/qs@^6.2.31", "@types/qs@^6.9.7": - "integrity" "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - "resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" - "version" "6.9.7" - -"@types/react-dom@^18.0.6": - "integrity" "sha512-C3GYO0HLaOkk9dDAz3Dl4sbe4AKUGTCfFIZsz3n/82dPNN8Du533HzKatDxeUYWu24wJgMP1xICqkWk1YOLOIw==" - "resolved" "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.8.tgz" - "version" "18.0.8" - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@^18.0.15": - "integrity" "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==" - "resolved" "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz" - "version" "18.0.25" - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - "csstype" "^3.0.2" - -"@types/resolve@^0.0.8": - "integrity" "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==" - "resolved" "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz" - "version" "0.0.8" - dependencies: - "@types/node" "*" - -"@types/responselike@*", "@types/responselike@^1.0.0": - "integrity" "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==" - "resolved" "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "@types/node" "*" - -"@types/scheduler@*": - "integrity" "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - "resolved" "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" - "version" "0.16.2" - -"@types/secp256k1@^4.0.1": - "integrity" "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==" - "resolved" "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "@types/node" "*" - -"@types/seedrandom@3.0.1": - "integrity" "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==" - "resolved" "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz" - "version" "3.0.1" - -"@types/semver@^7.3.12": - "integrity" "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==" - "resolved" "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz" - "version" "7.3.13" - -"@types/sinon-chai@^3.2.3": - "integrity" "sha512-/19t63pFYU0ikrdbXKBWj9PCdnKyTd0Qkz0X91Ta081cYsq90OxYdcWwK/dwEoDa6dtXgj2HJfmzgq+QZTHdmQ==" - "resolved" "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.9.tgz" - "version" "3.2.9" - dependencies: - "@types/chai" "*" - "@types/sinon" "*" - -"@types/sinon@*": - "integrity" "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==" - "resolved" "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz" - "version" "10.0.13" - dependencies: - "@types/sinonjs__fake-timers" "*" - -"@types/sinonjs__fake-timers@*": - "integrity" "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==" - "resolved" "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz" - "version" "8.1.2" - -"@types/stack-utils@^2.0.0": - "integrity" "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" - "resolved" "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" - "version" "2.0.1" - -"@types/underscore@*": - "integrity" "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==" - "resolved" "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz" - "version" "1.11.4" - -"@types/web3@^1.0.20": - "integrity" "sha512-eFiYJKggNrOl0nsD+9cMh2MLk4zVBfXfGnVeRFbpiZzBE20eet4KLA3fXcjSuHaBn0RnQzwLAGdgzgzdet4C0A==" - "resolved" "https://registry.npmjs.org/@types/web3/-/web3-1.2.2.tgz" - "version" "1.2.2" - dependencies: - "web3" "*" - -"@types/web3@1.0.19": - "integrity" "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==" - "resolved" "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz" - "version" "1.0.19" - dependencies: - "@types/bn.js" "*" - "@types/underscore" "*" - -"@types/ws@^7.4.4": - "integrity" "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==" - "resolved" "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" - "version" "7.4.7" - dependencies: - "@types/node" "*" - -"@types/ws@^8.5.3": - "integrity" "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==" - "resolved" "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz" - "version" "8.5.3" - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - "integrity" "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" - "version" "21.0.0" - -"@types/yargs@^17.0.8": - "integrity" "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==" - "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz" - "version" "17.0.13" - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^5.17.0": - "integrity" "sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.1.tgz" - "version" "5.42.1" - dependencies: - "@typescript-eslint/scope-manager" "5.42.1" - "@typescript-eslint/type-utils" "5.42.1" - "@typescript-eslint/utils" "5.42.1" - "debug" "^4.3.4" - "ignore" "^5.2.0" - "natural-compare-lite" "^1.4.0" - "regexpp" "^3.2.0" - "semver" "^7.3.7" - "tsutils" "^3.21.0" - -"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.17.0": - "integrity" "sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.1.tgz" - "version" "5.42.1" - dependencies: - "@typescript-eslint/scope-manager" "5.42.1" - "@typescript-eslint/types" "5.42.1" - "@typescript-eslint/typescript-estree" "5.42.1" - "debug" "^4.3.4" - -"@typescript-eslint/scope-manager@5.42.1": - "integrity" "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz" - "version" "5.42.1" - dependencies: - "@typescript-eslint/types" "5.42.1" - "@typescript-eslint/visitor-keys" "5.42.1" - -"@typescript-eslint/type-utils@5.42.1": - "integrity" "sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.42.1.tgz" - "version" "5.42.1" - dependencies: - "@typescript-eslint/typescript-estree" "5.42.1" - "@typescript-eslint/utils" "5.42.1" - "debug" "^4.3.4" - "tsutils" "^3.21.0" - -"@typescript-eslint/types@5.42.1": - "integrity" "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz" - "version" "5.42.1" - -"@typescript-eslint/typescript-estree@5.42.1": - "integrity" "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz" - "version" "5.42.1" - dependencies: - "@typescript-eslint/types" "5.42.1" - "@typescript-eslint/visitor-keys" "5.42.1" - "debug" "^4.3.4" - "globby" "^11.1.0" - "is-glob" "^4.0.3" - "semver" "^7.3.7" - "tsutils" "^3.21.0" - -"@typescript-eslint/utils@5.42.1": - "integrity" "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz" - "version" "5.42.1" - dependencies: - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.42.1" - "@typescript-eslint/types" "5.42.1" - "@typescript-eslint/typescript-estree" "5.42.1" - "eslint-scope" "^5.1.1" - "eslint-utils" "^3.0.0" - "semver" "^7.3.7" - -"@typescript-eslint/visitor-keys@5.42.1": - "integrity" "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz" - "version" "5.42.1" - dependencies: - "@typescript-eslint/types" "5.42.1" - "eslint-visitor-keys" "^3.3.0" - -"@ungap/promise-all-settled@1.1.2": - "integrity" "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" - "resolved" "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" - "version" "1.1.2" - -"@walletconnect/browser-utils@^1.8.0": - "integrity" "sha512-Wcqqx+wjxIo9fv6eBUFHPsW1y/bGWWRboni5dfD8PtOmrihrEpOCmvRJe4rfl7xgJW8Ea9UqKEaq0bIRLHlK4A==" - "resolved" "https://registry.npmjs.org/@walletconnect/browser-utils/-/browser-utils-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@walletconnect/safe-json" "1.0.0" - "@walletconnect/types" "^1.8.0" - "@walletconnect/window-getters" "1.0.0" - "@walletconnect/window-metadata" "1.0.0" - "detect-browser" "5.2.0" - -"@walletconnect/client@~1.8.0": - "integrity" "sha512-svyBQ14NHx6Cs2j4TpkQaBI/2AF4+LXz64FojTjMtV4VMMhl81jSO1vNeg+yYhQzvjcGH/GpSwixjyCW0xFBOQ==" - "resolved" "https://registry.npmjs.org/@walletconnect/client/-/client-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@walletconnect/core" "^1.8.0" - "@walletconnect/iso-crypto" "^1.8.0" - "@walletconnect/types" "^1.8.0" - "@walletconnect/utils" "^1.8.0" - -"@walletconnect/core@^1.8.0": - "integrity" "sha512-aFTHvEEbXcZ8XdWBw6rpQDte41Rxwnuk3SgTD8/iKGSRTni50gI9S3YEzMj05jozSiOBxQci4pJDMVhIUMtarw==" - "resolved" "https://registry.npmjs.org/@walletconnect/core/-/core-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@walletconnect/socket-transport" "^1.8.0" - "@walletconnect/types" "^1.8.0" - "@walletconnect/utils" "^1.8.0" - -"@walletconnect/crypto@^1.0.2": - "integrity" "sha512-+OlNtwieUqVcOpFTvLBvH+9J9pntEqH5evpINHfVxff1XIgwV55PpbdvkHu6r9Ib4WQDOFiD8OeeXs1vHw7xKQ==" - "resolved" "https://registry.npmjs.org/@walletconnect/crypto/-/crypto-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "@walletconnect/encoding" "^1.0.1" - "@walletconnect/environment" "^1.0.0" - "@walletconnect/randombytes" "^1.0.2" - "aes-js" "^3.1.2" - "hash.js" "^1.1.7" - -"@walletconnect/encoding@^1.0.1": - "integrity" "sha512-8opL2rs6N6E3tJfsqwS82aZQDL3gmupWUgmvuZ3CGU7z/InZs3R9jkzH8wmYtpbq0sFK3WkJkQRZFFk4BkrmFA==" - "resolved" "https://registry.npmjs.org/@walletconnect/encoding/-/encoding-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "is-typedarray" "1.0.0" - "typedarray-to-buffer" "3.1.5" - -"@walletconnect/environment@^1.0.0": - "integrity" "sha512-4BwqyWy6KpSvkocSaV7WR3BlZfrxLbJSLkg+j7Gl6pTDE+U55lLhJvQaMuDVazXYxcjBsG09k7UlH7cGiUI5vQ==" - "resolved" "https://registry.npmjs.org/@walletconnect/environment/-/environment-1.0.0.tgz" - "version" "1.0.0" - -"@walletconnect/iso-crypto@^1.8.0": - "integrity" "sha512-pWy19KCyitpfXb70hA73r9FcvklS+FvO9QUIttp3c2mfW8frxgYeRXfxLRCIQTkaYueRKvdqPjbyhPLam508XQ==" - "resolved" "https://registry.npmjs.org/@walletconnect/iso-crypto/-/iso-crypto-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@walletconnect/crypto" "^1.0.2" - "@walletconnect/types" "^1.8.0" - "@walletconnect/utils" "^1.8.0" - -"@walletconnect/jsonrpc-types@^1.0.1": - "integrity" "sha512-+6coTtOuChCqM+AoYyi4Q83p9l/laI6NvuM2/AHaZFuf0gT0NjW7IX2+86qGyizn7Ptq4AYZmfxurAxTnhefuw==" - "resolved" "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "keyvaluestorage-interface" "^1.0.0" - -"@walletconnect/jsonrpc-utils@^1.0.3": - "integrity" "sha512-3yb49bPk16MNLk6uIIHPSHQCpD6UAo1OMOx1rM8cW/MPEAYAzrSW5hkhG7NEUwX9SokRIgnZK3QuQkiyNzBMhQ==" - "resolved" "https://registry.npmjs.org/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "@walletconnect/environment" "^1.0.0" - "@walletconnect/jsonrpc-types" "^1.0.1" - -"@walletconnect/mobile-registry@^1.4.0": - "integrity" "sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw==" - "resolved" "https://registry.npmjs.org/@walletconnect/mobile-registry/-/mobile-registry-1.4.0.tgz" - "version" "1.4.0" - -"@walletconnect/qrcode-modal@^1.8.0": - "integrity" "sha512-BueaFefaAi8mawE45eUtztg3ZFbsAH4DDXh1UNwdUlsvFMjqcYzLUG0xZvDd6z2eOpbgDg2N3bl6gF0KONj1dg==" - "resolved" "https://registry.npmjs.org/@walletconnect/qrcode-modal/-/qrcode-modal-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@walletconnect/browser-utils" "^1.8.0" - "@walletconnect/mobile-registry" "^1.4.0" - "@walletconnect/types" "^1.8.0" - "copy-to-clipboard" "^3.3.1" - "preact" "10.4.1" - "qrcode" "1.4.4" - -"@walletconnect/randombytes@^1.0.2": - "integrity" "sha512-ivgOtAyqQnN0rLQmOFPemsgYGysd/ooLfaDA/ACQ3cyqlca56t3rZc7pXfqJOIETx/wSyoF5XbwL+BqYodw27A==" - "resolved" "https://registry.npmjs.org/@walletconnect/randombytes/-/randombytes-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "@walletconnect/encoding" "^1.0.1" - "@walletconnect/environment" "^1.0.0" - "randombytes" "^2.1.0" - -"@walletconnect/safe-json@1.0.0": - "integrity" "sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg==" - "resolved" "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.0.tgz" - "version" "1.0.0" - -"@walletconnect/socket-transport@^1.8.0": - "integrity" "sha512-5DyIyWrzHXTcVp0Vd93zJ5XMW61iDM6bcWT4p8DTRfFsOtW46JquruMhxOLeCOieM4D73kcr3U7WtyR4JUsGuQ==" - "resolved" "https://registry.npmjs.org/@walletconnect/socket-transport/-/socket-transport-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@walletconnect/types" "^1.8.0" - "@walletconnect/utils" "^1.8.0" - "ws" "7.5.3" - -"@walletconnect/types@^1.8.0", "@walletconnect/types@~1.8.0": - "integrity" "sha512-Cn+3I0V0vT9ghMuzh1KzZvCkiAxTq+1TR2eSqw5E5AVWfmCtECFkVZBP6uUJZ8YjwLqXheI+rnjqPy7sVM4Fyg==" - "resolved" "https://registry.npmjs.org/@walletconnect/types/-/types-1.8.0.tgz" - "version" "1.8.0" - -"@walletconnect/utils@^1.8.0": - "integrity" "sha512-zExzp8Mj1YiAIBfKNm5u622oNw44WOESzo6hj+Q3apSMIb0Jph9X3GDIdbZmvVZsNPxWDL7uodKgZcCInZv2vA==" - "resolved" "https://registry.npmjs.org/@walletconnect/utils/-/utils-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@walletconnect/browser-utils" "^1.8.0" - "@walletconnect/encoding" "^1.0.1" - "@walletconnect/jsonrpc-utils" "^1.0.3" - "@walletconnect/types" "^1.8.0" - "bn.js" "4.11.8" - "js-sha3" "0.8.0" - "query-string" "6.13.5" - -"@walletconnect/window-getters@^1.0.0", "@walletconnect/window-getters@1.0.0": - "integrity" "sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA==" - "resolved" "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.0.tgz" - "version" "1.0.0" - -"@walletconnect/window-metadata@1.0.0": - "integrity" "sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA==" - "resolved" "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "@walletconnect/window-getters" "^1.0.0" - -"@web3auth/base-evm-adapter@^3.0.4": - "integrity" "sha512-6Cr8HZOzlPJRtKPW34Mp+ymxxgLy+5lgGXUQvSh0N78hWFVDHLiAe6axGMCty0ovkuYW5fw7OOnYE5pI4Kx6Ag==" - "resolved" "https://registry.npmjs.org/@web3auth/base-evm-adapter/-/base-evm-adapter-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "@web3auth/base" "^3.0.4" - -"@web3auth/base-plugin@^3.0.4": - "integrity" "sha512-GOpYfNYLC9VerjHR+2VZXv/3qEDeDfGbQqDmDZ1hzDpK8KxyKo21VpRp30PinFUVwrXUYPCoGCGZbb5WQPDVtw==" - "resolved" "https://registry.npmjs.org/@web3auth/base-plugin/-/base-plugin-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "@web3auth/base" "^3.0.4" - -"@web3auth/base-provider@^3.0.4": - "integrity" "sha512-G7AogUkIzXJWXTRxdJu+UA0zrYhH/F/AKd/lGjsgofetwlFRO4Rb/NiUq8QJo9n99hpY9+wnBXUr7ukxBAbxMg==" - "resolved" "https://registry.npmjs.org/@web3auth/base-provider/-/base-provider-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "@toruslabs/base-controllers" "^2.2.6" - "@toruslabs/openlogin-jrpc" "^2.6.0" - "@web3auth/base" "^3.0.4" - "eth-rpc-errors" "^4.0.3" - "json-rpc-random-id" "^1.0.1" - -"@web3auth/base@^3.0.0", "@web3auth/base@^3.0.4": - "integrity" "sha512-AAwDE7aPFrSSSpbwvSVHx1m4owY+6MfPv0BObyg695tfeIR1MJt5fhjbd4GDc72EXAOaKMacuf8yIWesFpQzMg==" - "resolved" "https://registry.npmjs.org/@web3auth/base/-/base-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "@toruslabs/http-helpers" "^3.2.0" - "@toruslabs/openlogin-jrpc" "^2.6.0" - "jwt-decode" "^3.1.2" - "loglevel" "^1.8.1" - "ts-custom-error" "^3.3.1" - -"@web3auth/core@^3.0.0": - "integrity" "sha512-/f1PIWzSn+EIw70jFZlMFk1j4VXyHW8MgL+zmp4KQ1tu0EfNJKOZkAan+K75lSdl1NzXfQNXFjq5h9CZHOoFjQ==" - "resolved" "https://registry.npmjs.org/@web3auth/core/-/core-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "@toruslabs/openlogin-jrpc" "^2.6.0" - "@web3auth/base" "^3.0.4" - "@web3auth/base-plugin" "^3.0.4" - -"@web3auth/ethereum-provider@^3.0.4": - "integrity" "sha512-rZJ7Fo9+uHQxR9EZKYNx0t8AKr+XZd9G9Gb3QakqWZ3CVd2NfPmzBgNcBufS5SRXKtBXn26mANeMcVhGoRM9fA==" - "resolved" "https://registry.npmjs.org/@web3auth/ethereum-provider/-/ethereum-provider-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "@ethereumjs/common" "^3.0.1" - "@ethereumjs/tx" "^4.0.1" - "@ethereumjs/util" "^8.0.2" - "@metamask/eth-sig-util" "^5.0.0" - "@toruslabs/base-controllers" "^2.2.6" - "@toruslabs/http-helpers" "^3.2.0" - "@toruslabs/openlogin-jrpc" "^2.6.0" - "@walletconnect/types" "~1.8.0" - "@web3auth/base" "^3.0.4" - "@web3auth/base-provider" "^3.0.4" - "assert" "^2.0.0" - "bignumber.js" "^9.1.0" - "bn.js" "^5.2.1" - "eth-rpc-errors" "^4.0.3" - "jsonschema" "^1.4.1" - -"@web3auth/metamask-adapter@^3.0.0": - "integrity" "sha512-n5gaD6HWPMcE+pzFfGDYeeom3k0FAj/kKwBano1kvhbrbyX/mQUQpcyML/yfdy1O3bDsKag4sysOc47ypwbupg==" - "resolved" "https://registry.npmjs.org/@web3auth/metamask-adapter/-/metamask-adapter-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "@metamask/detect-provider" "^2.0.0" - "@web3auth/base" "^3.0.4" - "@web3auth/base-evm-adapter" "^3.0.4" - -"@web3auth/openlogin-adapter@^3.0.3": - "integrity" "sha512-3eg39aCK+YOfJ2dIftbf51ZxB5kxw5VcEQLZfMRKBWZHZON4EpCVXKYkmYMGBz9PB6/Z+uv52TAHnjFn8CRwPw==" - "resolved" "https://registry.npmjs.org/@web3auth/openlogin-adapter/-/openlogin-adapter-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "@toruslabs/openlogin" "^2.7.0" - "@toruslabs/openlogin-ed25519" "^2.0.0" - "@web3auth/base" "^3.0.4" - "@web3auth/base-provider" "^3.0.4" - "@web3auth/ethereum-provider" "^3.0.4" - "@web3auth/solana-provider" "^3.0.4" - "lodash.merge" "^4.6.2" - -"@web3auth/solana-provider@^3.0.4": - "integrity" "sha512-uOPxXKtdm3Wyau5Iten5J7ERLMt1UxaXk3Nm/LjioDTix2s94HUE0Tc1DXPL9R1ZQRJuMlwVpnWion2McIYvjg==" - "resolved" "https://registry.npmjs.org/@web3auth/solana-provider/-/solana-provider-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "@solana/web3.js" "^1.66.2" - "@toruslabs/base-controllers" "^2.2.6" - "@toruslabs/openlogin-jrpc" "^2.6.0" - "@toruslabs/tweetnacl-js" "^1.0.3" - "@web3auth/base" "^3.0.4" - "@web3auth/base-provider" "^3.0.4" - "bn.js" "^5.2.1" - "bs58" "^4.0.1" - "eth-rpc-errors" "^4.0.3" - "json-rpc-random-id" "^1.0.1" - -"@web3auth/ui@^3.0.3": - "integrity" "sha512-4FNQEalJKNHtG6CgGfoNTxN+Apex3R1tSV9Re9Y+DbB1PCyqbklLQw/xjMOYzfwOkkjDqRROUNaGofLkJjjnAw==" - "resolved" "https://registry.npmjs.org/@web3auth/ui/-/ui-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "@toruslabs/openlogin" "^2.7.0" - "@toruslabs/openlogin-jrpc" "^2.6.0" - "@web3auth/base" "^3.0.4" - "bowser" "^2.11.0" - "classnames" "^2.3.2" - "i18next" "^22.0.4" - "lodash.clonedeep" "^4.5.0" - "lodash.merge" "^4.6.2" - "qr.js" "^0.0.0" - "react" "^18.2.0" - "react-dom" "^18.2.0" - "react-i18next" "^12.0.0" - "react-qr-code" "^2.0.8" - -"@web3auth/wallet-connect-v1-adapter@^3.0.3": - "integrity" "sha512-S+bJ5MnYzR0hyHpY1/gdgyotfKUF8+nM3TbLmRisxx52Ci40xnEKQltoA834KMuuFvlnkpBHYooeA3fNumii1Q==" - "resolved" "https://registry.npmjs.org/@web3auth/wallet-connect-v1-adapter/-/wallet-connect-v1-adapter-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "@walletconnect/client" "~1.8.0" - "@walletconnect/types" "~1.8.0" - "@web3auth/base" "^3.0.4" - "@web3auth/base-evm-adapter" "^3.0.4" - "@web3auth/ethereum-provider" "^3.0.4" - -"@webassemblyjs/ast@1.11.1": - "integrity" "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz" - "version" "1.11.1" - dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - -"@webassemblyjs/floating-point-hex-parser@1.11.1": - "integrity" "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz" - "version" "1.11.1" - -"@webassemblyjs/helper-api-error@1.11.1": - "integrity" "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz" - "version" "1.11.1" - -"@webassemblyjs/helper-buffer@1.11.1": - "integrity" "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz" - "version" "1.11.1" - -"@webassemblyjs/helper-numbers@1.11.1": - "integrity" "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz" - "version" "1.11.1" - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - "integrity" "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz" - "version" "1.11.1" - -"@webassemblyjs/helper-wasm-section@1.11.1": - "integrity" "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz" - "version" "1.11.1" - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - -"@webassemblyjs/ieee754@1.11.1": - "integrity" "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz" - "version" "1.11.1" - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.1": - "integrity" "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz" - "version" "1.11.1" - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.1": - "integrity" "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz" - "version" "1.11.1" - -"@webassemblyjs/wasm-edit@1.11.1": - "integrity" "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz" - "version" "1.11.1" - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - -"@webassemblyjs/wasm-gen@1.11.1": - "integrity" "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz" - "version" "1.11.1" - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wasm-opt@1.11.1": - "integrity" "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz" - "version" "1.11.1" - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - -"@webassemblyjs/wasm-parser@1.11.1": - "integrity" "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz" - "version" "1.11.1" - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wast-printer@1.11.1": - "integrity" "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==" - "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz" - "version" "1.11.1" - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^1.2.0": - "integrity" "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==" - "resolved" "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz" - "version" "1.2.0" - -"@webpack-cli/info@^1.5.0": - "integrity" "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==" - "resolved" "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz" - "version" "1.5.0" - dependencies: - "envinfo" "^7.7.3" - -"@webpack-cli/serve@^1.7.0": - "integrity" "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==" - "resolved" "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz" - "version" "1.7.0" - -"@xtuc/ieee754@^1.2.0": - "integrity" "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - "resolved" "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" - "version" "1.2.0" - -"@xtuc/long@4.2.2": - "integrity" "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" - "version" "4.2.2" - -"@yarnpkg/lockfile@^1.1.0": - "integrity" "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" - "resolved" "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" - "version" "1.1.0" - -"@yarnpkg/parsers@^3.0.0-rc.18": - "integrity" "sha512-qs2wZulOYVjaOS6tYOs3SsR7m/qeHwjPrB5i4JtBJELsgWrEkyL+rJH21RA+fVwttJobAYQqw5Xj5SYLaDK/bQ==" - "resolved" "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.27.tgz" - "version" "3.0.0-rc.27" - dependencies: - "js-yaml" "^3.10.0" - "tslib" "^2.4.0" - -"@zkochan/js-yaml@0.0.6": - "integrity" "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==" - "resolved" "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz" - "version" "0.0.6" - dependencies: - "argparse" "^2.0.1" - -"abbrev@^1.0.0", "abbrev@1": - "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - "version" "1.1.1" - -"abbrev@1.0.x": - "integrity" "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==" - "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" - "version" "1.0.9" - -"abort-controller@^3.0.0": - "integrity" "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==" - "resolved" "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "event-target-shim" "^5.0.0" - -"abortcontroller-polyfill@^1.7.3": - "integrity" "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==" - "resolved" "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz" - "version" "1.7.5" - -"abstract-level@^1.0.0", "abstract-level@^1.0.2", "abstract-level@^1.0.3": - "integrity" "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==" - "resolved" "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "buffer" "^6.0.3" - "catering" "^2.1.0" - "is-buffer" "^2.0.5" - "level-supports" "^4.0.0" - "level-transcoder" "^1.0.1" - "module-error" "^1.0.1" - "queue-microtask" "^1.2.3" - -"abstract-leveldown@^7.2.0": - "integrity" "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==" - "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "buffer" "^6.0.3" - "catering" "^2.0.0" - "is-buffer" "^2.0.5" - "level-concat-iterator" "^3.0.0" - "level-supports" "^2.0.1" - "queue-microtask" "^1.2.3" - -"abstract-leveldown@~2.6.0": - "integrity" "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==" - "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz" - "version" "2.6.3" - dependencies: - "xtend" "~4.0.0" - -"abstract-leveldown@~2.7.1": - "integrity" "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==" - "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz" - "version" "2.7.2" - dependencies: - "xtend" "~4.0.0" - -"accepts@~1.3.8": - "integrity" "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==" - "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" - "version" "1.3.8" - dependencies: - "mime-types" "~2.1.34" - "negotiator" "0.6.3" - -"acorn-import-assertions@^1.7.6": - "integrity" "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" - "resolved" "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz" - "version" "1.8.0" - -"acorn-jsx@^5.3.2": - "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" - "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - "version" "5.3.2" - -"acorn-walk@^8.1.1": - "integrity" "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - "version" "8.2.0" - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8", "acorn@^8.4.1", "acorn@^8.5.0", "acorn@^8.7.1", "acorn@^8.8.0": - "integrity" "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" - "version" "8.8.1" - -"add-stream@^1.0.0": - "integrity" "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==" - "resolved" "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" - "version" "1.0.0" - -"address@^1.0.1": - "integrity" "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==" - "resolved" "https://registry.npmjs.org/address/-/address-1.2.1.tgz" - "version" "1.2.1" - -"adm-zip@^0.4.16": - "integrity" "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" - "resolved" "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" - "version" "0.4.16" - -"aes-js@^3.1.2": - "integrity" "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" - "resolved" "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz" - "version" "3.1.2" - -"aes-js@3.0.0": - "integrity" "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - "resolved" "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz" - "version" "3.0.0" - -"agent-base@^6.0.2", "agent-base@6": - "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" - "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "debug" "4" - -"agentkeepalive@^4.2.1": - "integrity" "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==" - "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "debug" "^4.1.0" - "depd" "^1.1.2" - "humanize-ms" "^1.2.1" - -"aggregate-error@^3.0.0": - "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" - "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "clean-stack" "^2.0.0" - "indent-string" "^4.0.0" - -"ajv-keywords@^3.5.2": - "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" - "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" - "version" "3.5.2" - -"ajv@^6.10.0", "ajv@^6.12.3", "ajv@^6.12.4", "ajv@^6.12.5", "ajv@^6.9.1": - "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - "version" "6.12.6" - 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" - -"amdefine@>=0.0.4": - "integrity" "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==" - "resolved" "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" - "version" "1.0.1" - -"amqplib@^0.9.0": - "integrity" "sha512-a1DP0H1LcLSMKPAnhUN2AKbVyEPqEUrUf7O+odhKGxaO+Tf0nWtuD7Zq5P9uZwZteu56OfW9EQozSCTKsAEk5w==" - "resolved" "https://registry.npmjs.org/amqplib/-/amqplib-0.9.1.tgz" - "version" "0.9.1" - dependencies: - "bitsyntax" "~0.1.0" - "bluebird" "^3.7.2" - "buffer-more-ints" "~1.0.0" - "readable-stream" "1.x >=1.1.9" - "url-parse" "~1.5.10" - -"ansi-colors@^4.1.1": - "integrity" "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" - "version" "4.1.3" - -"ansi-colors@3.2.3": - "integrity" "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz" - "version" "3.2.3" - -"ansi-colors@4.1.1": - "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - "version" "4.1.1" - -"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.0": - "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" - "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - "version" "4.3.2" - dependencies: - "type-fest" "^0.21.3" - -"ansi-regex@^3.0.0": - "integrity" "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" - "version" "3.0.1" - -"ansi-regex@^4.1.0": - "integrity" "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" - "version" "4.1.1" - -"ansi-regex@^5.0.1": - "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - "version" "5.0.1" - -"ansi-regex@^6.0.1": - "integrity" "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - "version" "6.0.1" - -"ansi-styles@^3.2.0": - "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.0" - -"ansi-styles@^3.2.1": - "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.0" - -"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": - "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "color-convert" "^2.0.1" - -"ansi-styles@^5.0.0": - "integrity" "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" - "version" "5.2.0" - -"ansi-styles@^6.0.0": - "integrity" "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - "version" "6.2.1" - -"antlr4ts@^0.5.0-alpha.4": - "integrity" "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" - "resolved" "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz" - "version" "0.5.0-alpha.4" - -"anymatch@^3.0.3", "anymatch@~3.1.1", "anymatch@~3.1.2": - "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" - "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "normalize-path" "^3.0.0" - "picomatch" "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0", "aproba@^2.0.0": - "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - "version" "2.0.0" - -"are-we-there-yet@^3.0.0": - "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "delegates" "^1.0.0" - "readable-stream" "^3.6.0" - -"arg@^4.1.0": - "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - "version" "4.1.3" - -"argparse@^1.0.7": - "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "sprintf-js" "~1.0.2" - -"argparse@^2.0.1": - "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - "version" "2.0.1" - -"array-back@^3.0.1", "array-back@^3.1.0": - "integrity" "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" - "resolved" "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz" - "version" "3.1.0" - -"array-back@^4.0.1": - "integrity" "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" - "resolved" "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" - "version" "4.0.2" - -"array-back@^4.0.2": - "integrity" "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" - "resolved" "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" - "version" "4.0.2" - -"array-differ@^3.0.0": - "integrity" "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==" - "resolved" "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" - "version" "3.0.0" - -"array-flatten@1.1.1": - "integrity" "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - "version" "1.1.1" - -"array-ify@^1.0.0": - "integrity" "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==" - "resolved" "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" - "version" "1.0.0" - -"array-includes@^3.1.4": - "integrity" "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==" - "resolved" "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" - "version" "3.1.6" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - "get-intrinsic" "^1.1.3" - "is-string" "^1.0.7" - -"array-union@^2.1.0": - "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - "version" "2.1.0" - -"array-uniq@1.0.3": - "integrity" "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - "version" "1.0.3" - -"array.prototype.flat@^1.2.5": - "integrity" "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==" - "resolved" "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - "es-shim-unscopables" "^1.0.0" - -"array.prototype.reduce@^1.0.5": - "integrity" "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==" - "resolved" "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - "es-array-method-boxes-properly" "^1.0.0" - "is-string" "^1.0.7" - -"arrify@^1.0.1": - "integrity" "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" - "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" - "version" "1.0.1" - -"arrify@^2.0.1": - "integrity" "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" - "resolved" "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" - "version" "2.0.1" - -"asap@^2.0.0", "asap@~2.0.6": - "integrity" "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - "resolved" "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" - "version" "2.0.6" - -"asn1.js@^5.2.0": - "integrity" "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==" - "resolved" "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" - "version" "5.4.1" - dependencies: - "bn.js" "^4.0.0" - "inherits" "^2.0.1" - "minimalistic-assert" "^1.0.0" - "safer-buffer" "^2.1.0" - -"asn1@~0.2.3": - "integrity" "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==" - "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" - "version" "0.2.6" - dependencies: - "safer-buffer" "~2.1.0" - -"assert-plus@^1.0.0", "assert-plus@1.0.0": - "integrity" "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - "version" "1.0.0" - -"assert@^2.0.0": - "integrity" "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==" - "resolved" "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "es6-object-assign" "^1.1.0" - "is-nan" "^1.2.1" - "object-is" "^1.0.1" - "util" "^0.12.0" - -"assertion-error@^1.1.0": - "integrity" "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - "resolved" "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" - "version" "1.1.0" - -"astral-regex@^2.0.0": - "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - "version" "2.0.0" - -"async-eventemitter@^0.2.2", "async-eventemitter@^0.2.4": - "integrity" "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==" - "resolved" "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz" - "version" "0.2.4" - dependencies: - "async" "^2.4.0" - -"async-limiter@~1.0.0": - "integrity" "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - "resolved" "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" - "version" "1.0.1" - -"async-mutex@^0.2.6": - "integrity" "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==" - "resolved" "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz" - "version" "0.2.6" - dependencies: - "tslib" "^2.0.0" - -"async-mutex@^0.3.2": - "integrity" "sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==" - "resolved" "https://registry.npmjs.org/async-mutex/-/async-mutex-0.3.2.tgz" - "version" "0.3.2" - dependencies: - "tslib" "^2.3.1" - -"async@^1.4.2": - "integrity" "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" - "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" - "version" "1.5.2" - -"async@^2.0.1", "async@^2.1.2", "async@^2.4.0", "async@^2.5.0": - "integrity" "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==" - "resolved" "https://registry.npmjs.org/async/-/async-2.6.4.tgz" - "version" "2.6.4" - dependencies: - "lodash" "^4.17.14" - -"async@^3.2.3": - "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" - "version" "3.2.4" - -"async@^3.2.4": - "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" - "version" "3.2.4" - -"async@1.x": - "integrity" "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" - "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" - "version" "1.5.2" - -"asynckit@^0.4.0": - "integrity" "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - "version" "0.4.0" - -"at-least-node@^1.0.0": - "integrity" "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - "resolved" "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" - "version" "1.0.0" - -"available-typed-arrays@^1.0.5": - "integrity" "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - "resolved" "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" - "version" "1.0.5" - -"aws-sign2@~0.7.0": - "integrity" "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" - "resolved" "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" - "version" "0.7.0" - -"aws4@^1.8.0": - "integrity" "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - "resolved" "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" - "version" "1.11.0" - -"axios@^0.21.1": - "integrity" "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==" - "resolved" "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" - "version" "0.21.4" - dependencies: - "follow-redirects" "^1.14.0" - -"axios@^1.0.0", "axios@1.1.3": - "integrity" "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==" - "resolved" "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "follow-redirects" "^1.15.0" - "form-data" "^4.0.0" - "proxy-from-env" "^1.1.0" - -"babel-jest@^28.1.3": - "integrity" "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==" - "resolved" "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/transform" "^28.1.3" - "@types/babel__core" "^7.1.14" - "babel-plugin-istanbul" "^6.1.1" - "babel-preset-jest" "^28.1.3" - "chalk" "^4.0.0" - "graceful-fs" "^4.2.9" - "slash" "^3.0.0" - -"babel-plugin-istanbul@^6.1.1": - "integrity" "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==" - "resolved" "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" - "version" "6.1.1" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - "istanbul-lib-instrument" "^5.0.4" - "test-exclude" "^6.0.0" - -"babel-plugin-jest-hoist@^28.1.3": - "integrity" "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==" - "resolved" "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -"babel-plugin-polyfill-corejs2@^0.3.3": - "integrity" "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" - "version" "0.3.3" - dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" - "semver" "^6.1.1" - -"babel-plugin-polyfill-corejs3@^0.6.0": - "integrity" "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz" - "version" "0.6.0" - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - "core-js-compat" "^3.25.1" - -"babel-plugin-polyfill-regenerator@^0.4.1": - "integrity" "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - -"babel-preset-current-node-syntax@^1.0.0": - "integrity" "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==" - "resolved" "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -"babel-preset-jest@^28.1.3": - "integrity" "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==" - "resolved" "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "babel-plugin-jest-hoist" "^28.1.3" - "babel-preset-current-node-syntax" "^1.0.0" - -"backoff@^2.5.0": - "integrity" "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==" - "resolved" "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "precond" "0.2" - -"balanced-match@^1.0.0": - "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - "version" "1.0.2" - -"base-x@^3.0.2", "base-x@^3.0.8": - "integrity" "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==" - "resolved" "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" - "version" "3.0.9" - dependencies: - "safe-buffer" "^5.0.1" - -"base64-js@^1.3.1": - "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - "version" "1.5.1" - -"base64url@^3.0.1": - "integrity" "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" - "resolved" "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz" - "version" "3.0.1" - -"bcrypt-pbkdf@^1.0.0": - "integrity" "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" - "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "tweetnacl" "^0.14.3" - -"bech32@1.1.4": - "integrity" "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - "resolved" "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" - "version" "1.1.4" - -"before-after-hook@^2.2.0": - "integrity" "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" - "resolved" "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" - "version" "2.2.3" - -"bigint-buffer@^1.1.5": - "integrity" "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==" - "resolved" "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "bindings" "^1.3.0" - -"bigint-crypto-utils@^3.0.23": - "integrity" "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==" - "resolved" "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz" - "version" "3.1.7" - dependencies: - "bigint-mod-arith" "^3.1.0" - -"bigint-mod-arith@^3.1.0": - "integrity" "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==" - "resolved" "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz" - "version" "3.1.2" - -"bignumber.js@*", "bignumber.js@^9.0.0", "bignumber.js@^9.0.1", "bignumber.js@^9.0.2", "bignumber.js@^9.1.0": - "integrity" "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==" - "resolved" "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz" - "version" "9.1.0" - -"bin-links@^3.0.0": - "integrity" "sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==" - "resolved" "https://registry.npmjs.org/bin-links/-/bin-links-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "cmd-shim" "^5.0.0" - "mkdirp-infer-owner" "^2.0.0" - "npm-normalize-package-bin" "^2.0.0" - "read-cmd-shim" "^3.0.0" - "rimraf" "^3.0.0" - "write-file-atomic" "^4.0.0" - -"binary-extensions@^2.0.0": - "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - "version" "2.2.0" - -"bindings@^1.3.0", "bindings@^1.5.0": - "integrity" "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==" - "resolved" "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" - "version" "1.5.0" - dependencies: - "file-uri-to-path" "1.0.0" - -"bip66@^1.1.5": - "integrity" "sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==" - "resolved" "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "safe-buffer" "^5.0.1" - -"bitsyntax@~0.1.0": - "integrity" "sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q==" - "resolved" "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz" - "version" "0.1.0" - dependencies: - "buffer-more-ints" "~1.0.0" - "debug" "~2.6.9" - "safe-buffer" "~5.1.2" - -"bl@^4.0.3", "bl@^4.1.0": - "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" - "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "buffer" "^5.5.0" - "inherits" "^2.0.4" - "readable-stream" "^3.4.0" - -"blakejs@^1.1.0": - "integrity" "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - "resolved" "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" - "version" "1.2.1" - -"bluebird@^3.5.0", "bluebird@^3.7.2": - "integrity" "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" - "version" "3.7.2" - -"bn.js@^4.0.0": - "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - "version" "4.12.0" - -"bn.js@^4.1.0": - "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - "version" "4.12.0" - -"bn.js@^4.11.0", "bn.js@^4.11.8": - "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - "version" "4.12.0" - -"bn.js@^4.11.1", "bn.js@^4.4.0": - "version" "4.11.9" - -"bn.js@^4.11.6": - "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - "version" "4.12.0" - -"bn.js@^4.11.9": - "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - "version" "4.12.0" - -"bn.js@^5.0.0", "bn.js@^5.1.1", "bn.js@^5.1.2", "bn.js@^5.1.3", "bn.js@^5.2.0", "bn.js@^5.2.1": - "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - "version" "5.2.1" - -"bn.js@4.11.6": - "integrity" "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" - "version" "4.11.6" - -"bn.js@4.11.8": - "integrity" "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz" - "version" "4.11.8" - -"body-parser@^1.16.0", "body-parser@1.20.1": - "integrity" "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==" - "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" - "version" "1.20.1" - dependencies: - "bytes" "3.1.2" - "content-type" "~1.0.4" - "debug" "2.6.9" - "depd" "2.0.0" - "destroy" "1.2.0" - "http-errors" "2.0.0" - "iconv-lite" "0.4.24" - "on-finished" "2.4.1" - "qs" "6.11.0" - "raw-body" "2.5.1" - "type-is" "~1.6.18" - "unpipe" "1.0.0" - -"borsh@^0.7.0": - "integrity" "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==" - "resolved" "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz" - "version" "0.7.0" - dependencies: - "bn.js" "^5.2.0" - "bs58" "^4.0.0" - "text-encoding-utf-8" "^1.0.2" - -"bowser@^2.11.0": - "integrity" "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - "resolved" "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" - "version" "2.11.0" - -"brace-expansion@^1.1.7": - "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - "version" "1.1.11" - dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" - -"brace-expansion@^2.0.1": - "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "balanced-match" "^1.0.0" - -"braces@^3.0.2", "braces@~3.0.2": - "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" - "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "fill-range" "^7.0.1" - -"brorand@^1.0.1", "brorand@^1.1.0": - "integrity" "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - "resolved" "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" - "version" "1.1.0" - -"browser-level@^1.0.1": - "integrity" "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==" - "resolved" "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "abstract-level" "^1.0.2" - "catering" "^2.1.1" - "module-error" "^1.0.2" - "run-parallel-limit" "^1.1.0" - -"browser-stdout@1.3.1": - "integrity" "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" - "version" "1.3.1" - -"browserify-aes@^1.0.0", "browserify-aes@^1.0.4", "browserify-aes@^1.0.6", "browserify-aes@^1.2.0": - "integrity" "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==" - "resolved" "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "buffer-xor" "^1.0.3" - "cipher-base" "^1.0.0" - "create-hash" "^1.1.0" - "evp_bytestokey" "^1.0.3" - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" - -"browserify-cipher@^1.0.0": - "integrity" "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==" - "resolved" "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "browserify-aes" "^1.0.4" - "browserify-des" "^1.0.0" - "evp_bytestokey" "^1.0.0" - -"browserify-des@^1.0.0": - "integrity" "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==" - "resolved" "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "cipher-base" "^1.0.1" - "des.js" "^1.0.0" - "inherits" "^2.0.1" - "safe-buffer" "^5.1.2" - -"browserify-rsa@^4.0.0", "browserify-rsa@^4.0.1": - "integrity" "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==" - "resolved" "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "bn.js" "^5.0.0" - "randombytes" "^2.0.1" - -"browserify-sign@^4.0.0": - "integrity" "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==" - "resolved" "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "bn.js" "^5.1.1" - "browserify-rsa" "^4.0.1" - "create-hash" "^1.2.0" - "create-hmac" "^1.1.7" - "elliptic" "^6.5.3" - "inherits" "^2.0.4" - "parse-asn1" "^5.1.5" - "readable-stream" "^3.6.0" - "safe-buffer" "^5.2.0" - -"browserslist@^4.14.5", "browserslist@^4.21.3", "browserslist@^4.21.4", "browserslist@>= 4.21.0": - "integrity" "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==" - "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" - "version" "4.21.4" - dependencies: - "caniuse-lite" "^1.0.30001400" - "electron-to-chromium" "^1.4.251" - "node-releases" "^2.0.6" - "update-browserslist-db" "^1.0.9" - -"bs58@^4.0.0", "bs58@^4.0.1": - "integrity" "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==" - "resolved" "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "base-x" "^3.0.2" - -"bs58check@^2.1.2": - "integrity" "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==" - "resolved" "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "bs58" "^4.0.0" - "create-hash" "^1.1.0" - "safe-buffer" "^5.1.2" - -"bser@2.1.1": - "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" - "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "node-int64" "^0.4.0" - -"btoa@^1.2.1": - "integrity" "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" - "resolved" "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz" - "version" "1.2.1" - -"buffer-alloc-unsafe@^1.1.0": - "integrity" "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - "resolved" "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" - "version" "1.1.0" - -"buffer-alloc@^1.2.0": - "integrity" "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==" - "resolved" "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "buffer-alloc-unsafe" "^1.1.0" - "buffer-fill" "^1.0.0" - -"buffer-equal-constant-time@1.0.1": - "integrity" "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - "resolved" "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" - "version" "1.0.1" - -"buffer-fill@^1.0.0": - "integrity" "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" - "resolved" "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" - "version" "1.0.0" - -"buffer-from@^1.0.0", "buffer-from@^1.1.1": - "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - "version" "1.1.2" - -"buffer-more-ints@~1.0.0": - "integrity" "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==" - "resolved" "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz" - "version" "1.0.0" - -"buffer-to-arraybuffer@^0.0.5": - "integrity" "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" - "resolved" "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz" - "version" "0.0.5" - -"buffer-xor@^1.0.3": - "integrity" "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - "resolved" "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" - "version" "1.0.3" - -"buffer@^5.0.5", "buffer@^5.4.3", "buffer@^5.5.0", "buffer@^5.6.0": - "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - "version" "5.7.1" - dependencies: - "base64-js" "^1.3.1" - "ieee754" "^1.1.13" - -"buffer@^6.0.3": - "integrity" "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - "version" "6.0.3" - dependencies: - "base64-js" "^1.3.1" - "ieee754" "^1.2.1" - -"buffer@~6.0.3": - "integrity" "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - "version" "6.0.3" - dependencies: - "base64-js" "^1.3.1" - "ieee754" "^1.2.1" - -"buffer@6.0.1": - "integrity" "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "base64-js" "^1.3.1" - "ieee754" "^1.2.1" - -"bufferutil@^4.0.1": - "integrity" "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==" - "resolved" "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz" - "version" "4.0.7" - dependencies: - "node-gyp-build" "^4.3.0" - -"bufferutil@4.0.5": - "integrity" "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==" - "resolved" "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz" - "version" "4.0.5" - dependencies: - "node-gyp-build" "^4.3.0" - -"bufio@^1.0.7": - "integrity" "sha512-W0ydG8t+ST+drUpEwl1N+dU9Ije06g8+43CLtvEIzfKo9nPFLXbKqDYE2XSg4w6RugsBcCj7pEU7jOpBC6BqrA==" - "resolved" "https://registry.npmjs.org/bufio/-/bufio-1.1.3.tgz" - "version" "1.1.3" - -"builtin-modules@^1.1.1": - "integrity" "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==" - "resolved" "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" - "version" "1.1.1" - -"builtins@^1.0.3": - "integrity" "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" - "resolved" "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" - "version" "1.0.3" - -"builtins@^5.0.0": - "integrity" "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==" - "resolved" "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "semver" "^7.0.0" - -"busboy@^1.6.0": - "integrity" "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==" - "resolved" "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" - "version" "1.6.0" - dependencies: - "streamsearch" "^1.1.0" - -"byte-size@^7.0.0": - "integrity" "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==" - "resolved" "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz" - "version" "7.0.1" - -"bytes@3.1.2": - "integrity" "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" - "version" "3.1.2" - -"cacache@^16.0.0", "cacache@^16.0.6", "cacache@^16.1.0": - "integrity" "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==" - "resolved" "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" - "version" "16.1.3" - dependencies: - "@npmcli/fs" "^2.1.0" - "@npmcli/move-file" "^2.0.0" - "chownr" "^2.0.0" - "fs-minipass" "^2.1.0" - "glob" "^8.0.1" - "infer-owner" "^1.0.4" - "lru-cache" "^7.7.1" - "minipass" "^3.1.6" - "minipass-collect" "^1.0.2" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.4" - "mkdirp" "^1.0.4" - "p-map" "^4.0.0" - "promise-inflight" "^1.0.1" - "rimraf" "^3.0.2" - "ssri" "^9.0.0" - "tar" "^6.1.11" - "unique-filename" "^2.0.0" - -"cacheable-lookup@^5.0.3": - "integrity" "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" - "resolved" "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" - "version" "5.0.4" - -"cacheable-lookup@^6.0.4": - "integrity" "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==" - "resolved" "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz" - "version" "6.1.0" - -"cacheable-request@^6.0.0": - "integrity" "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==" - "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "clone-response" "^1.0.2" - "get-stream" "^5.1.0" - "http-cache-semantics" "^4.0.0" - "keyv" "^3.0.0" - "lowercase-keys" "^2.0.0" - "normalize-url" "^4.1.0" - "responselike" "^1.0.2" - -"cacheable-request@^7.0.2": - "integrity" "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==" - "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" - "version" "7.0.2" - dependencies: - "clone-response" "^1.0.2" - "get-stream" "^5.1.0" - "http-cache-semantics" "^4.0.0" - "keyv" "^4.0.0" - "lowercase-keys" "^2.0.0" - "normalize-url" "^6.0.1" - "responselike" "^2.0.0" - -"call-bind@^1.0.0", "call-bind@^1.0.2": - "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" - "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "function-bind" "^1.1.1" - "get-intrinsic" "^1.0.2" - -"callsites@^3.0.0": - "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - "version" "3.1.0" - -"camelcase-keys@^6.2.2": - "integrity" "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==" - "resolved" "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" - "version" "6.2.2" - dependencies: - "camelcase" "^5.3.1" - "map-obj" "^4.0.0" - "quick-lru" "^4.0.1" - -"camelcase@^5.0.0", "camelcase@^5.3.1": - "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - "version" "5.3.1" - -"camelcase@^6.0.0": - "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - "version" "6.3.0" - -"camelcase@^6.2.0": - "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - "version" "6.3.0" - -"caniuse-lite@^1.0.30001400": - "integrity" "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==" - "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz" - "version" "1.0.30001431" - -"caseless@^0.12.0", "caseless@~0.12.0": - "integrity" "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - "resolved" "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" - "version" "0.12.0" - -"catering@^2.0.0": - "version" "2.1.0" - dependencies: - "queue-tick" "^1.0.0" - -"catering@^2.1.0", "catering@^2.1.1": - "integrity" "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==" - "resolved" "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz" - "version" "2.1.1" - -"cbor@^5.0.2": - "integrity" "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==" - "resolved" "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "bignumber.js" "^9.0.1" - "nofilter" "^1.0.4" - -"cent.js@^2.0.2": - "integrity" "sha512-dC36pOquM7OdOqVt3POdNA+wsO4/dj53h0P9FLUpWfF+0hyY6QKKNA+Cjcq0AFda4Cj7kYGcwSYbtU920i8B7Q==" - "resolved" "https://registry.npmjs.org/cent.js/-/cent.js-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "axios" "1.1.3" - -"centrifuge@^2.8.4": - "integrity" "sha512-t06HyieeB2k7uSJSbVM4e7xMF+mfY8xvDtTJLF95ho0ba/X4MSoZcisi2PBzdCLyxG2BhkYW1Wcg6RUiPYTIlQ==" - "resolved" "https://registry.npmjs.org/centrifuge/-/centrifuge-2.8.5.tgz" - "version" "2.8.5" - dependencies: - "protobufjs" "^6.11.2" - -"chai-as-promised@^7.1.1": - "integrity" "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==" - "resolved" "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz" - "version" "7.1.1" - dependencies: - "check-error" "^1.0.2" - -"chai-string@^1.5.0": - "integrity" "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==" - "resolved" "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz" - "version" "1.5.0" - -"chai@^4.1.2", "chai@^4.2.0", "chai@^4.3.4", "chai@^4.3.6", "chai@>= 2.1.2 < 5": - "integrity" "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==" - "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz" - "version" "4.3.7" - dependencies: - "assertion-error" "^1.1.0" - "check-error" "^1.0.2" - "deep-eql" "^4.1.2" - "get-func-name" "^2.0.0" - "loupe" "^2.3.1" - "pathval" "^1.1.1" - "type-detect" "^4.0.5" - -"chalk@^2.0.0": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^2.3.0": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^2.4.1": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^2.4.2": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^4.0.0", "chalk@^4.0.2", "chalk@^4.1.0", "chalk@^4.1.1", "chalk@^4.1.2": - "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"chalk@4.1.0": - "integrity" "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"char-regex@^1.0.2": - "integrity" "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" - "resolved" "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" - "version" "1.0.2" - -"chardet@^0.7.0": - "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - "version" "0.7.0" - -"charenc@>= 0.0.1": - "integrity" "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" - "resolved" "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" - "version" "0.0.2" - -"check-error@^1.0.2": - "integrity" "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" - "resolved" "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" - "version" "1.0.2" - -"checkpoint-store@^1.1.0": - "integrity" "sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==" - "resolved" "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "functional-red-black-tree" "^1.0.1" - -"chokidar@^3.4.0", "chokidar@^3.5.1", "chokidar@^3.5.2", "chokidar@3.5.3": - "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" - "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" - "version" "3.5.3" - dependencies: - "anymatch" "~3.1.2" - "braces" "~3.0.2" - "glob-parent" "~5.1.2" - "is-binary-path" "~2.1.0" - "is-glob" "~4.0.1" - "normalize-path" "~3.0.0" - "readdirp" "~3.6.0" - optionalDependencies: - "fsevents" "~2.3.2" - -"chokidar@3.3.0": - "integrity" "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==" - "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "anymatch" "~3.1.1" - "braces" "~3.0.2" - "glob-parent" "~5.1.0" - "is-binary-path" "~2.1.0" - "is-glob" "~4.0.1" - "normalize-path" "~3.0.0" - "readdirp" "~3.2.0" - optionalDependencies: - "fsevents" "~2.1.1" - -"chownr@^1.1.4": - "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - "resolved" "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" - "version" "1.1.4" - -"chownr@^2.0.0": - "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - "version" "2.0.0" - -"chrome-trace-event@^1.0.2": - "integrity" "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - "resolved" "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" - "version" "1.0.3" - -"ci-info@^2.0.0": - "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" - "version" "2.0.0" - -"ci-info@^3.2.0": - "integrity" "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==" - "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz" - "version" "3.5.0" - -"cids@^0.7.1": - "integrity" "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==" - "resolved" "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz" - "version" "0.7.5" - dependencies: - "buffer" "^5.5.0" - "class-is" "^1.1.0" - "multibase" "~0.6.0" - "multicodec" "^1.0.0" - "multihashes" "~0.4.15" - -"cipher-base@^1.0.0", "cipher-base@^1.0.1", "cipher-base@^1.0.3": - "integrity" "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==" - "resolved" "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" - -"cjs-module-lexer@^1.0.0": - "integrity" "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" - "resolved" "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" - "version" "1.2.2" - -"class-is@^1.1.0": - "integrity" "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" - "resolved" "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz" - "version" "1.1.0" - -"classic-level@^1.2.0": - "integrity" "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==" - "resolved" "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "abstract-level" "^1.0.2" - "catering" "^2.1.0" - "module-error" "^1.0.1" - "napi-macros" "~2.0.0" - "node-gyp-build" "^4.3.0" - -"classnames@^2.3.2": - "integrity" "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - "resolved" "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" - "version" "2.3.2" - -"clean-stack@^2.0.0": - "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - "version" "2.2.0" - -"cli-cursor@^3.1.0", "cli-cursor@3.1.0": - "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" - "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "restore-cursor" "^3.1.0" - -"cli-spinners@^2.5.0": - "integrity" "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==" - "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz" - "version" "2.7.0" - -"cli-spinners@2.6.1": - "integrity" "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" - "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" - "version" "2.6.1" - -"cli-table3@^0.5.0": - "integrity" "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==" - "resolved" "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz" - "version" "0.5.1" - dependencies: - "object-assign" "^4.1.0" - "string-width" "^2.1.1" - optionalDependencies: - "colors" "^1.1.2" - -"cli-truncate@^2.1.0": - "integrity" "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==" - "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "slice-ansi" "^3.0.0" - "string-width" "^4.2.0" - -"cli-truncate@^3.1.0": - "integrity" "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==" - "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "slice-ansi" "^5.0.0" - "string-width" "^5.0.0" - -"cli-width@^3.0.0": - "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - "version" "3.0.0" - -"cliui@^5.0.0": - "integrity" "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "string-width" "^3.1.0" - "strip-ansi" "^5.2.0" - "wrap-ansi" "^5.1.0" - -"cliui@^7.0.2": - "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - "version" "7.0.4" - dependencies: - "string-width" "^4.2.0" - "strip-ansi" "^6.0.0" - "wrap-ansi" "^7.0.0" - -"cliui@^8.0.1": - "integrity" "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" - "version" "8.0.1" - dependencies: - "string-width" "^4.2.0" - "strip-ansi" "^6.0.1" - "wrap-ansi" "^7.0.0" - -"clone-deep@^4.0.1": - "integrity" "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==" - "resolved" "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "is-plain-object" "^2.0.4" - "kind-of" "^6.0.2" - "shallow-clone" "^3.0.0" - -"clone-response@^1.0.2": - "integrity" "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==" - "resolved" "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "mimic-response" "^1.0.0" - -"clone@^1.0.2": - "integrity" "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" - "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - "version" "1.0.4" - -"clone@^2.0.0", "clone@^2.1.1": - "integrity" "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" - "resolved" "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" - "version" "2.1.2" - -"cmd-shim@^5.0.0": - "integrity" "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==" - "resolved" "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "mkdirp-infer-owner" "^2.0.0" - -"co@^4.6.0": - "integrity" "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" - "resolved" "https://registry.npmjs.org/co/-/co-4.6.0.tgz" - "version" "4.6.0" - -"collect-v8-coverage@^1.0.0": - "integrity" "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" - "resolved" "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" - "version" "1.0.1" - -"color-convert@^1.9.0": - "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - "version" "1.9.3" - dependencies: - "color-name" "1.1.3" - -"color-convert@^2.0.1": - "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "color-name" "~1.1.4" - -"color-name@~1.1.4": - "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - "version" "1.1.4" - -"color-name@1.1.3": - "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - "version" "1.1.3" - -"color-support@^1.1.3": - "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - "version" "1.1.3" - -"colorette@^2.0.14", "colorette@^2.0.16": - "integrity" "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" - "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" - "version" "2.0.19" - -"colors@^1.1.2", "colors@1.4.0": - "integrity" "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - "resolved" "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" - "version" "1.4.0" - -"columnify@^1.6.0": - "integrity" "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==" - "resolved" "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz" - "version" "1.6.0" - dependencies: - "strip-ansi" "^6.0.1" - "wcwidth" "^1.0.0" - -"combined-stream@^1.0.6", "combined-stream@^1.0.8", "combined-stream@~1.0.6": - "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" - "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - "version" "1.0.8" - dependencies: - "delayed-stream" "~1.0.0" - -"command-exists@^1.2.8": - "integrity" "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - "resolved" "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" - "version" "1.2.9" - -"command-line-args@^5.1.1": - "integrity" "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==" - "resolved" "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz" - "version" "5.2.1" - dependencies: - "array-back" "^3.1.0" - "find-replace" "^3.0.0" - "lodash.camelcase" "^4.3.0" - "typical" "^4.0.0" - -"command-line-usage@^6.1.0": - "integrity" "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==" - "resolved" "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz" - "version" "6.1.3" - dependencies: - "array-back" "^4.0.2" - "chalk" "^2.4.2" - "table-layout" "^1.0.2" - "typical" "^5.2.0" - -"commander@^2.12.1", "commander@^2.20.0", "commander@^2.20.3": - "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - "version" "2.20.3" - -"commander@^7.0.0": - "integrity" "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - "resolved" "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" - "version" "7.2.0" - -"commander@^8.1.0": - "integrity" "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - "resolved" "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" - "version" "8.3.0" - -"commander@^9.3.0": - "integrity" "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==" - "resolved" "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz" - "version" "9.4.1" - -"commander@3.0.2": - "integrity" "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" - "resolved" "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz" - "version" "3.0.2" - -"common-ancestor-path@^1.0.1": - "integrity" "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==" - "resolved" "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz" - "version" "1.0.1" - -"compare-func@^2.0.0": - "integrity" "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==" - "resolved" "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "array-ify" "^1.0.0" - "dot-prop" "^5.1.0" - -"concat-map@0.0.1": - "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - "version" "0.0.1" - -"concat-stream@^1.6.0", "concat-stream@^1.6.2": - "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==" - "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" - "version" "1.6.2" - dependencies: - "buffer-from" "^1.0.0" - "inherits" "^2.0.3" - "readable-stream" "^2.2.2" - "typedarray" "^0.0.6" - -"concat-stream@^2.0.0": - "integrity" "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==" - "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "buffer-from" "^1.0.0" - "inherits" "^2.0.3" - "readable-stream" "^3.0.2" - "typedarray" "^0.0.6" - -"concurrently@^7.4.0": - "integrity" "sha512-5E3mwiS+i2JYBzr5BpXkFxOnleZTMsG+WnE/dCG4/P+oiVXrbmrBwJ2ozn4SxwB2EZDrKR568X+puVohxz3/Mg==" - "resolved" "https://registry.npmjs.org/concurrently/-/concurrently-7.5.0.tgz" - "version" "7.5.0" - dependencies: - "chalk" "^4.1.0" - "date-fns" "^2.29.1" - "lodash" "^4.17.21" - "rxjs" "^7.0.0" - "shell-quote" "^1.7.3" - "spawn-command" "^0.0.2-1" - "supports-color" "^8.1.0" - "tree-kill" "^1.2.2" - "yargs" "^17.3.1" - -"config-chain@^1.1.12": - "integrity" "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==" - "resolved" "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" - "version" "1.1.13" - dependencies: - "ini" "^1.3.4" - "proto-list" "~1.2.1" - -"console-control-strings@^1.1.0": - "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - "version" "1.1.0" - -"content-disposition@0.5.4": - "integrity" "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==" - "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" - "version" "0.5.4" - dependencies: - "safe-buffer" "5.2.1" - -"content-hash@^2.5.2": - "integrity" "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==" - "resolved" "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz" - "version" "2.5.2" - dependencies: - "cids" "^0.7.1" - "multicodec" "^0.5.5" - "multihashes" "^0.4.15" - -"content-type@~1.0.4": - "integrity" "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" - "version" "1.0.4" - -"conventional-changelog-angular@^5.0.12": - "integrity" "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==" - "resolved" "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz" - "version" "5.0.13" - dependencies: - "compare-func" "^2.0.0" - "q" "^1.5.1" - -"conventional-changelog-core@^4.2.4": - "integrity" "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==" - "resolved" "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz" - "version" "4.2.4" - dependencies: - "add-stream" "^1.0.0" - "conventional-changelog-writer" "^5.0.0" - "conventional-commits-parser" "^3.2.0" - "dateformat" "^3.0.0" - "get-pkg-repo" "^4.0.0" - "git-raw-commits" "^2.0.8" - "git-remote-origin-url" "^2.0.0" - "git-semver-tags" "^4.1.1" - "lodash" "^4.17.15" - "normalize-package-data" "^3.0.0" - "q" "^1.5.1" - "read-pkg" "^3.0.0" - "read-pkg-up" "^3.0.0" - "through2" "^4.0.0" - -"conventional-changelog-preset-loader@^2.3.4": - "integrity" "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==" - "resolved" "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz" - "version" "2.3.4" - -"conventional-changelog-writer@^5.0.0": - "integrity" "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==" - "resolved" "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "conventional-commits-filter" "^2.0.7" - "dateformat" "^3.0.0" - "handlebars" "^4.7.7" - "json-stringify-safe" "^5.0.1" - "lodash" "^4.17.15" - "meow" "^8.0.0" - "semver" "^6.0.0" - "split" "^1.0.0" - "through2" "^4.0.0" - -"conventional-commits-filter@^2.0.7": - "integrity" "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==" - "resolved" "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz" - "version" "2.0.7" - dependencies: - "lodash.ismatch" "^4.4.0" - "modify-values" "^1.0.0" - -"conventional-commits-parser@^3.2.0": - "integrity" "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==" - "resolved" "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz" - "version" "3.2.4" - dependencies: - "is-text-path" "^1.0.1" - "JSONStream" "^1.0.4" - "lodash" "^4.17.15" - "meow" "^8.0.0" - "split2" "^3.0.0" - "through2" "^4.0.0" - -"conventional-recommended-bump@^6.1.0": - "integrity" "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==" - "resolved" "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "concat-stream" "^2.0.0" - "conventional-changelog-preset-loader" "^2.3.4" - "conventional-commits-filter" "^2.0.7" - "conventional-commits-parser" "^3.2.0" - "git-raw-commits" "^2.0.8" - "git-semver-tags" "^4.1.1" - "meow" "^8.0.0" - "q" "^1.5.1" - -"convert-source-map@^1.4.0", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0": - "integrity" "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" - "version" "1.9.0" - -"cookie-signature@1.0.6": - "integrity" "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - "version" "1.0.6" - -"cookie@^0.4.1": - "integrity" "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" - "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - "version" "0.4.2" - -"cookie@0.5.0": - "integrity" "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" - "version" "0.5.0" - -"cookiejar@^2.1.1": - "integrity" "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" - "resolved" "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz" - "version" "2.1.3" - -"copy-to-clipboard@^3.3.1": - "integrity" "sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg==" - "resolved" "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.2.tgz" - "version" "3.3.2" - dependencies: - "toggle-selection" "^1.0.6" - -"core-js-compat@^3.25.1": - "integrity" "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==" - "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz" - "version" "3.26.0" - dependencies: - "browserslist" "^4.21.4" - -"core-util-is@~1.0.0": - "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - "version" "1.0.3" - -"core-util-is@1.0.2": - "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - "version" "1.0.2" - -"cors@^2.8.1": - "integrity" "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==" - "resolved" "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" - "version" "2.8.5" - dependencies: - "object-assign" "^4" - "vary" "^1" - -"cosmiconfig@^7.0.0": - "integrity" "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==" - "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "@types/parse-json" "^4.0.0" - "import-fresh" "^3.2.1" - "parse-json" "^5.0.0" - "path-type" "^4.0.0" - "yaml" "^1.10.0" - -"crc-32@^1.2.0": - "integrity" "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" - "resolved" "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" - "version" "1.2.2" - -"create-ecdh@^4.0.0": - "integrity" "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==" - "resolved" "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" - "version" "4.0.4" - dependencies: - "bn.js" "^4.1.0" - "elliptic" "^6.5.3" - -"create-hash@^1.1.0", "create-hash@^1.1.2", "create-hash@^1.2.0": - "integrity" "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==" - "resolved" "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "cipher-base" "^1.0.1" - "inherits" "^2.0.1" - "md5.js" "^1.3.4" - "ripemd160" "^2.0.1" - "sha.js" "^2.4.0" - -"create-hmac@^1.1.0", "create-hmac@^1.1.4", "create-hmac@^1.1.7": - "integrity" "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==" - "resolved" "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" - "version" "1.1.7" - dependencies: - "cipher-base" "^1.0.3" - "create-hash" "^1.1.0" - "inherits" "^2.0.1" - "ripemd160" "^2.0.0" - "safe-buffer" "^5.0.1" - "sha.js" "^2.4.8" - -"create-require@^1.1.0": - "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - "version" "1.1.1" - -"cross-fetch@^2.1.0": - "integrity" "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==" - "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz" - "version" "2.2.6" - dependencies: - "node-fetch" "^2.6.7" - "whatwg-fetch" "^2.0.4" - -"cross-fetch@^3.1.4": - "integrity" "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==" - "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" - "version" "3.1.5" - dependencies: - "node-fetch" "2.6.7" - -"cross-spawn@^6.0.0": - "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" - "version" "6.0.5" - dependencies: - "nice-try" "^1.0.4" - "path-key" "^2.0.1" - "semver" "^5.5.0" - "shebang-command" "^1.2.0" - "which" "^1.2.9" - -"cross-spawn@^7.0.2", "cross-spawn@^7.0.3": - "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - "version" "7.0.3" - dependencies: - "path-key" "^3.1.0" - "shebang-command" "^2.0.0" - "which" "^2.0.1" - -"crypt@>= 0.0.1": - "integrity" "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" - "resolved" "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" - "version" "0.0.2" - -"crypto-browserify@3.12.0": - "integrity" "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==" - "resolved" "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" - "version" "3.12.0" - dependencies: - "browserify-cipher" "^1.0.0" - "browserify-sign" "^4.0.0" - "create-ecdh" "^4.0.0" - "create-hash" "^1.1.0" - "create-hmac" "^1.1.0" - "diffie-hellman" "^5.0.0" - "inherits" "^2.0.1" - "pbkdf2" "^3.0.3" - "public-encrypt" "^4.0.0" - "randombytes" "^2.0.0" - "randomfill" "^1.0.3" - -"csstype@^3.0.2": - "integrity" "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz" - "version" "3.1.1" - -"d@^1.0.1", "d@1": - "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==" - "resolved" "https://registry.npmjs.org/d/-/d-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "es5-ext" "^0.10.50" - "type" "^1.0.1" - -"dargs@^7.0.0": - "integrity" "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==" - "resolved" "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" - "version" "7.0.0" - -"dashdash@^1.12.0": - "integrity" "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==" - "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - "version" "1.14.1" - dependencies: - "assert-plus" "^1.0.0" - -"date-fns@^2.29.1": - "integrity" "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" - "resolved" "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" - "version" "2.29.3" - -"dateformat@^3.0.0": - "integrity" "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" - "resolved" "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" - "version" "3.0.3" - -"death@^1.1.0": - "integrity" "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==" - "resolved" "https://registry.npmjs.org/death/-/death-1.1.0.tgz" - "version" "1.1.0" - -"debug@^2.2.0": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^2.6.9": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^3.2.7": - "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - "version" "3.2.7" - dependencies: - "ms" "^2.1.1" - -"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@^4.3.2", "debug@^4.3.3", "debug@^4.3.4", "debug@~4.3.1", "debug@~4.3.2", "debug@4", "debug@4.3.4": - "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - "version" "4.3.4" - dependencies: - "ms" "2.1.2" - -"debug@~2.6.9": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@2.6.9": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@3.2.6": - "integrity" "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" - "version" "3.2.6" - dependencies: - "ms" "^2.1.1" - -"debug@4.3.3": - "integrity" "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" - "version" "4.3.3" - dependencies: - "ms" "2.1.2" - -"debuglog@^1.0.1": - "integrity" "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==" - "resolved" "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" - "version" "1.0.1" - -"decamelize-keys@^1.1.0": - "integrity" "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==" - "resolved" "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "decamelize" "^1.1.0" - "map-obj" "^1.0.0" - -"decamelize@^1.1.0", "decamelize@^1.2.0": - "integrity" "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - "version" "1.2.0" - -"decamelize@^4.0.0": - "integrity" "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" - "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" - "version" "4.0.0" - -"decode-uri-component@^0.2.0": - "integrity" "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" - "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" - "version" "0.2.0" - -"decompress-response@^3.3.0": - "integrity" "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==" - "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "mimic-response" "^1.0.0" - -"decompress-response@^6.0.0": - "integrity" "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==" - "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "mimic-response" "^3.1.0" - -"dedent@^0.7.0": - "integrity" "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - "resolved" "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" - "version" "0.7.0" - -"deep-eql@^4.0.1", "deep-eql@^4.1.2": - "integrity" "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==" - "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "type-detect" "^4.0.0" - -"deep-extend@~0.6.0": - "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - "version" "0.6.0" - -"deep-is@^0.1.3", "deep-is@~0.1.3": - "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" - "version" "0.1.4" - -"deepmerge@^4.2.2": - "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - "version" "4.2.2" - -"defaults@^1.0.3": - "integrity" "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==" - "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "clone" "^1.0.2" - -"defer-to-connect@^1.0.1": - "integrity" "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" - "version" "1.1.3" - -"defer-to-connect@^2.0.0", "defer-to-connect@^2.0.1": - "integrity" "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" - "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" - "version" "2.0.1" - -"deferred-leveldown@~1.2.1": - "integrity" "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==" - "resolved" "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz" - "version" "1.2.2" - dependencies: - "abstract-leveldown" "~2.6.0" - -"define-lazy-prop@^2.0.0": - "integrity" "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - "resolved" "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" - "version" "2.0.0" - -"define-properties@^1.1.2", "define-properties@^1.1.3", "define-properties@^1.1.4": - "integrity" "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==" - "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" - "version" "1.1.4" - dependencies: - "has-property-descriptors" "^1.0.0" - "object-keys" "^1.1.1" - -"delay@^5.0.0": - "integrity" "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==" - "resolved" "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz" - "version" "5.0.0" - -"delayed-stream@~1.0.0": - "integrity" "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - "version" "1.0.0" - -"delegates@^1.0.0": - "integrity" "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - "version" "1.0.0" - -"depd@^1.1.2": - "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - "version" "1.1.2" - -"depd@2.0.0": - "integrity" "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - "resolved" "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - "version" "2.0.0" - -"deprecation@^2.0.0", "deprecation@^2.3.1": - "integrity" "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - "resolved" "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" - "version" "2.3.1" - -"des.js@^1.0.0": - "integrity" "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==" - "resolved" "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "inherits" "^2.0.1" - "minimalistic-assert" "^1.0.0" - -"destroy@1.2.0": - "integrity" "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - "version" "1.2.0" - -"detect-browser@5.2.0": - "integrity" "sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA==" - "resolved" "https://registry.npmjs.org/detect-browser/-/detect-browser-5.2.0.tgz" - "version" "5.2.0" - -"detect-indent@^5.0.0": - "integrity" "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==" - "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" - "version" "5.0.0" - -"detect-indent@^6.0.0": - "integrity" "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==" - "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" - "version" "6.1.0" - -"detect-newline@^3.0.0": - "integrity" "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" - "resolved" "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" - "version" "3.1.0" - -"detect-node@2.1.0": - "integrity" "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - "resolved" "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" - "version" "2.1.0" - -"detect-port@^1.3.0": - "integrity" "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==" - "resolved" "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz" - "version" "1.5.1" - dependencies: - "address" "^1.0.1" - "debug" "4" - -"dezalgo@^1.0.0": - "integrity" "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==" - "resolved" "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "asap" "^2.0.0" - "wrappy" "1" - -"diff-sequences@^28.1.1": - "integrity" "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==" - "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" - "version" "28.1.1" - -"diff@^4.0.1": - "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - "version" "4.0.2" - -"diff@3.5.0": - "integrity" "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" - "resolved" "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" - "version" "3.5.0" - -"diff@5.0.0": - "integrity" "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" - "resolved" "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" - "version" "5.0.0" - -"diffie-hellman@^5.0.0": - "integrity" "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==" - "resolved" "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" - "version" "5.0.3" - dependencies: - "bn.js" "^4.1.0" - "miller-rabin" "^4.0.0" - "randombytes" "^2.0.0" - -"dijkstrajs@^1.0.1": - "integrity" "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" - "resolved" "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz" - "version" "1.0.2" - -"dir-glob@^3.0.1": - "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" - "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "path-type" "^4.0.0" - -"doctrine@^2.1.0": - "integrity" "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "esutils" "^2.0.2" - -"doctrine@^3.0.0": - "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "esutils" "^2.0.2" - -"dom-walk@^0.1.0": - "integrity" "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - "resolved" "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" - "version" "0.1.2" - -"dot-prop@^5.1.0": - "integrity" "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==" - "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" - "version" "5.3.0" - dependencies: - "is-obj" "^2.0.0" - -"dot-prop@^6.0.1": - "integrity" "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==" - "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "is-obj" "^2.0.0" - -"dotenv@~10.0.0": - "integrity" "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" - "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" - "version" "10.0.0" - -"drbg.js@^1.0.1": - "integrity" "sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==" - "resolved" "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "browserify-aes" "^1.0.6" - "create-hash" "^1.1.2" - "create-hmac" "^1.1.4" - -"duplexer@^0.1.1": - "integrity" "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - "resolved" "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" - "version" "0.1.2" - -"duplexer3@^0.1.4": - "integrity" "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" - "version" "0.1.5" - -"eastasianwidth@^0.2.0": - "integrity" "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - "resolved" "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - "version" "0.2.0" - -"ecc-jsbn@~0.1.1": - "integrity" "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==" - "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - "version" "0.1.2" - dependencies: - "jsbn" "~0.1.0" - "safer-buffer" "^2.1.0" - -"ecdsa-sig-formatter@1.0.11": - "integrity" "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==" - "resolved" "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" - "version" "1.0.11" - dependencies: - "safe-buffer" "^5.0.1" - -"ee-first@1.1.1": - "integrity" "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - "version" "1.1.1" - -"ejs@^3.1.7": - "integrity" "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==" - "resolved" "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz" - "version" "3.1.8" - dependencies: - "jake" "^10.8.5" - -"electron-to-chromium@^1.4.251": - "integrity" "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz" - "version" "1.4.284" - -"elliptic@^6.4.0", "elliptic@^6.5.2", "elliptic@^6.5.3", "elliptic@^6.5.4", "elliptic@6.5.4": - "integrity" "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==" - "resolved" "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" - "version" "6.5.4" - dependencies: - "bn.js" "^4.11.9" - "brorand" "^1.1.0" - "hash.js" "^1.0.0" - "hmac-drbg" "^1.0.1" - "inherits" "^2.0.4" - "minimalistic-assert" "^1.0.1" - "minimalistic-crypto-utils" "^1.0.1" - -"emittery@^0.10.2": - "integrity" "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" - "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" - "version" "0.10.2" - -"emittery@0.10.0": - "integrity" "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==" - "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz" - "version" "0.10.0" - -"emoji-regex@^7.0.1": - "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" - "version" "7.0.3" - -"emoji-regex@^8.0.0": - "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - "version" "8.0.0" - -"emoji-regex@^9.2.2": - "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - "version" "9.2.2" - -"encode-utf8@^1.0.2": - "integrity" "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" - "resolved" "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz" - "version" "1.0.3" - -"encodeurl@~1.0.2": - "integrity" "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - "version" "1.0.2" - -"encoding@^0.1.0", "encoding@^0.1.13": - "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" - "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - "version" "0.1.13" - dependencies: - "iconv-lite" "^0.6.2" - -"end-of-stream@^1.1.0", "end-of-stream@^1.4.1", "end-of-stream@^1.4.4": - "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" - "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - "version" "1.4.4" - dependencies: - "once" "^1.4.0" - -"engine.io-client@~6.2.3": - "integrity" "sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw==" - "resolved" "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.3.tgz" - "version" "6.2.3" - dependencies: - "@socket.io/component-emitter" "~3.1.0" - "debug" "~4.3.1" - "engine.io-parser" "~5.0.3" - "ws" "~8.2.3" - "xmlhttprequest-ssl" "~2.0.0" - -"engine.io-parser@~5.0.3": - "integrity" "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==" - "resolved" "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz" - "version" "5.0.4" - -"enhanced-resolve@^5.10.0": - "integrity" "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==" - "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz" - "version" "5.10.0" - dependencies: - "graceful-fs" "^4.2.4" - "tapable" "^2.2.0" - -"enquirer@^2.3.0", "enquirer@^2.3.6", "enquirer@>= 2.3.0 < 3", "enquirer@~2.3.6": - "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" - "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" - "version" "2.3.6" - dependencies: - "ansi-colors" "^4.1.1" - -"env-paths@^2.2.0": - "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" - "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - "version" "2.2.1" - -"envinfo@^7.7.3", "envinfo@^7.7.4": - "integrity" "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" - "resolved" "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" - "version" "7.8.1" - -"err-code@^2.0.2": - "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" - "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" - "version" "2.0.3" - -"errno@~0.1.1": - "integrity" "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==" - "resolved" "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" - "version" "0.1.8" - dependencies: - "prr" "~1.0.1" - -"error-ex@^1.3.1": - "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" - "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "is-arrayish" "^0.2.1" - -"es-abstract@^1.19.0", "es-abstract@^1.20.4": - "integrity" "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==" - "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz" - "version" "1.20.4" - dependencies: - "call-bind" "^1.0.2" - "es-to-primitive" "^1.2.1" - "function-bind" "^1.1.1" - "function.prototype.name" "^1.1.5" - "get-intrinsic" "^1.1.3" - "get-symbol-description" "^1.0.0" - "has" "^1.0.3" - "has-property-descriptors" "^1.0.0" - "has-symbols" "^1.0.3" - "internal-slot" "^1.0.3" - "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-weakref" "^1.0.2" - "object-inspect" "^1.12.2" - "object-keys" "^1.1.1" - "object.assign" "^4.1.4" - "regexp.prototype.flags" "^1.4.3" - "safe-regex-test" "^1.0.0" - "string.prototype.trimend" "^1.0.5" - "string.prototype.trimstart" "^1.0.5" - "unbox-primitive" "^1.0.2" - -"es-array-method-boxes-properly@^1.0.0": - "integrity" "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - "resolved" "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" - "version" "1.0.0" - -"es-module-lexer@^0.9.0": - "integrity" "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - "resolved" "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" - "version" "0.9.3" - -"es-shim-unscopables@^1.0.0": - "integrity" "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==" - "resolved" "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "has" "^1.0.3" - -"es-to-primitive@^1.2.1": - "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" - "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - "version" "1.2.1" - 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": - "integrity" "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==" - "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz" - "version" "0.10.62" - dependencies: - "es6-iterator" "^2.0.3" - "es6-symbol" "^3.1.3" - "next-tick" "^1.1.0" - -"es6-iterator@^2.0.3": - "integrity" "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==" - "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" - "version" "2.0.3" - dependencies: - "d" "1" - "es5-ext" "^0.10.35" - "es6-symbol" "^3.1.1" - -"es6-object-assign@^1.1.0": - "integrity" "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==" - "resolved" "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz" - "version" "1.1.0" - -"es6-promise@^4.0.3", "es6-promise@^4.2.8": - "integrity" "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - "resolved" "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" - "version" "4.2.8" - -"es6-promisify@^5.0.0": - "integrity" "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==" - "resolved" "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "es6-promise" "^4.0.3" - -"es6-symbol@^3.1.1", "es6-symbol@^3.1.3": - "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==" - "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" - "version" "3.1.3" - dependencies: - "d" "^1.0.1" - "ext" "^1.1.2" - -"escalade@^3.1.1": - "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - "version" "3.1.1" - -"escape-html@~1.0.3": - "integrity" "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - "version" "1.0.3" - -"escape-string-regexp@^1.0.5", "escape-string-regexp@1.0.5": - "integrity" "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - "version" "1.0.5" - -"escape-string-regexp@^2.0.0": - "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - "version" "2.0.0" - -"escape-string-regexp@^4.0.0": - "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - "version" "4.0.0" - -"escape-string-regexp@4.0.0": - "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - "version" "4.0.0" - -"escodegen@1.8.x": - "integrity" "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==" - "resolved" "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz" - "version" "1.8.1" - dependencies: - "esprima" "^2.7.1" - "estraverse" "^1.9.1" - "esutils" "^2.0.2" - "optionator" "^0.8.1" - optionalDependencies: - "source-map" "~0.2.0" - -"eslint-config-prettier@^8.5.0": - "integrity" "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==" - "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" - "version" "8.5.0" - -"eslint-import-resolver-node@^0.3.6": - "integrity" "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==" - "resolved" "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz" - "version" "0.3.6" - dependencies: - "debug" "^3.2.7" - "resolve" "^1.20.0" - -"eslint-module-utils@^2.7.3": - "integrity" "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==" - "resolved" "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz" - "version" "2.7.4" - dependencies: - "debug" "^3.2.7" - -"eslint-plugin-import@^2.26.0": - "integrity" "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==" - "resolved" "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz" - "version" "2.26.0" - dependencies: - "array-includes" "^3.1.4" - "array.prototype.flat" "^1.2.5" - "debug" "^2.6.9" - "doctrine" "^2.1.0" - "eslint-import-resolver-node" "^0.3.6" - "eslint-module-utils" "^2.7.3" - "has" "^1.0.3" - "is-core-module" "^2.8.1" - "is-glob" "^4.0.3" - "minimatch" "^3.1.2" - "object.values" "^1.1.5" - "resolve" "^1.22.0" - "tsconfig-paths" "^3.14.1" - -"eslint-plugin-prettier@^4.0.0": - "integrity" "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==" - "resolved" "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "prettier-linter-helpers" "^1.0.0" - -"eslint-scope@^5.1.1", "eslint-scope@5.1.1": - "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "esrecurse" "^4.3.0" - "estraverse" "^4.1.1" - -"eslint-scope@^7.1.1": - "integrity" "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - "version" "7.1.1" - dependencies: - "esrecurse" "^4.3.0" - "estraverse" "^5.2.0" - -"eslint-utils@^3.0.0": - "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" - "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "eslint-visitor-keys" "^2.0.0" - -"eslint-visitor-keys@^2.0.0": - "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - "version" "2.1.0" - -"eslint-visitor-keys@^3.3.0": - "integrity" "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" - "version" "3.3.0" - -"eslint@*", "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^8.12.0", "eslint@>=5", "eslint@>=7.0.0", "eslint@>=7.28.0": - "integrity" "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz" - "version" "8.27.0" - dependencies: - "@eslint/eslintrc" "^1.3.3" - "@humanwhocodes/config-array" "^0.11.6" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "ajv" "^6.10.0" - "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.1.1" - "eslint-utils" "^3.0.0" - "eslint-visitor-keys" "^3.3.0" - "espree" "^9.4.0" - "esquery" "^1.4.0" - "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.15.0" - "grapheme-splitter" "^1.0.4" - "ignore" "^5.2.0" - "import-fresh" "^3.0.0" - "imurmurhash" "^0.1.4" - "is-glob" "^4.0.0" - "is-path-inside" "^3.0.3" - "js-sdsl" "^4.1.4" - "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.1" - "regexpp" "^3.2.0" - "strip-ansi" "^6.0.1" - "strip-json-comments" "^3.1.0" - "text-table" "^0.2.0" - -"espree@^9.4.0": - "integrity" "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==" - "resolved" "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" - "version" "9.4.1" - dependencies: - "acorn" "^8.8.0" - "acorn-jsx" "^5.3.2" - "eslint-visitor-keys" "^3.3.0" - -"esprima@^2.7.1", "esprima@2.7.x": - "integrity" "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==" - "resolved" "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" - "version" "2.7.3" - -"esprima@^4.0.0": - "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - "version" "4.0.1" - -"esquery@^1.0.1", "esquery@^1.4.0": - "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" - "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "estraverse" "^5.1.0" - -"esrecurse@^4.3.0": - "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" - "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "estraverse" "^5.2.0" - -"estraverse@^1.9.1": - "integrity" "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz" - "version" "1.9.3" - -"estraverse@^4.1.1": - "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - "version" "4.3.0" - -"estraverse@^5.1.0", "estraverse@^5.2.0": - "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - "version" "5.3.0" - -"esutils@^2.0.2": - "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - "version" "2.0.3" - -"etag@~1.8.1": - "integrity" "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - "version" "1.8.1" - -"eth-block-tracker@^4.4.2": - "integrity" "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==" - "resolved" "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz" - "version" "4.4.3" - dependencies: - "@babel/plugin-transform-runtime" "^7.5.5" - "@babel/runtime" "^7.5.5" - "eth-query" "^2.1.0" - "json-rpc-random-id" "^1.0.1" - "pify" "^3.0.0" - "safe-event-emitter" "^1.0.1" - -"eth-ens-namehash@2.0.8": - "integrity" "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==" - "resolved" "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz" - "version" "2.0.8" - dependencies: - "idna-uts46-hx" "^2.3.1" - "js-sha3" "^0.5.7" - -"eth-gas-reporter@^0.2.24", "eth-gas-reporter@^0.2.25": - "integrity" "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==" - "resolved" "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz" - "version" "0.2.25" - dependencies: - "@ethersproject/abi" "^5.0.0-beta.146" - "@solidity-parser/parser" "^0.14.0" - "cli-table3" "^0.5.0" - "colors" "1.4.0" - "ethereum-cryptography" "^1.0.3" - "ethers" "^4.0.40" - "fs-readdir-recursive" "^1.1.0" - "lodash" "^4.17.14" - "markdown-table" "^1.1.3" - "mocha" "^7.1.1" - "req-cwd" "^2.0.0" - "request" "^2.88.0" - "request-promise-native" "^1.0.5" - "sha1" "^1.1.1" - "sync-request" "^6.0.0" - -"eth-json-rpc-filters@^4.2.1": - "integrity" "sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==" - "resolved" "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz" - "version" "4.2.2" - dependencies: - "@metamask/safe-event-emitter" "^2.0.0" - "async-mutex" "^0.2.6" - "eth-json-rpc-middleware" "^6.0.0" - "eth-query" "^2.1.2" - "json-rpc-engine" "^6.1.0" - "pify" "^5.0.0" - -"eth-json-rpc-infura@^5.1.0": - "integrity" "sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow==" - "resolved" "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "eth-json-rpc-middleware" "^6.0.0" - "eth-rpc-errors" "^3.0.0" - "json-rpc-engine" "^5.3.0" - "node-fetch" "^2.6.0" - -"eth-json-rpc-middleware@^6.0.0": - "integrity" "sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==" - "resolved" "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "btoa" "^1.2.1" - "clone" "^2.1.1" - "eth-query" "^2.1.2" - "eth-rpc-errors" "^3.0.0" - "eth-sig-util" "^1.4.2" - "ethereumjs-util" "^5.1.2" - "json-rpc-engine" "^5.3.0" - "json-stable-stringify" "^1.0.1" - "node-fetch" "^2.6.1" - "pify" "^3.0.0" - "safe-event-emitter" "^1.0.1" - -"eth-lib@^0.1.26": - "integrity" "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==" - "resolved" "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz" - "version" "0.1.29" - dependencies: - "bn.js" "^4.11.6" - "elliptic" "^6.4.0" - "nano-json-stream-parser" "^0.1.2" - "servify" "^0.1.12" - "ws" "^3.0.0" - "xhr-request-promise" "^0.1.2" - -"eth-lib@0.2.8": - "integrity" "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==" - "resolved" "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz" - "version" "0.2.8" - dependencies: - "bn.js" "^4.11.6" - "elliptic" "^6.4.0" - "xhr-request-promise" "^0.1.2" - -"eth-query@^2.1.0", "eth-query@^2.1.2": - "integrity" "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==" - "resolved" "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "json-rpc-random-id" "^1.0.0" - "xtend" "^4.0.1" - -"eth-rpc-errors@^3.0.0": - "integrity" "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==" - "resolved" "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "fast-safe-stringify" "^2.0.6" - -"eth-rpc-errors@^4.0.2", "eth-rpc-errors@^4.0.3": - "integrity" "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==" - "resolved" "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "fast-safe-stringify" "^2.0.6" - -"eth-sig-util@^1.4.2": - "integrity" "sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw==" - "resolved" "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz" - "version" "1.4.2" - dependencies: - "ethereumjs-abi" "git+https://github.com/ethereumjs/ethereumjs-abi.git" - "ethereumjs-util" "^5.1.1" - -"ethereum-bloom-filters@^1.0.6": - "integrity" "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==" - "resolved" "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "js-sha3" "^0.8.0" - -"ethereum-common@^0.0.18": - "integrity" "sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==" - "resolved" "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz" - "version" "0.0.18" - -"ethereum-common@0.2.0": - "integrity" "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" - "resolved" "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz" - "version" "0.2.0" - -"ethereum-cryptography@^0.1.3", "ethereum-cryptography@0.1.3": - "integrity" "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==" - "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz" - "version" "0.1.3" - dependencies: - "@types/pbkdf2" "^3.0.0" - "@types/secp256k1" "^4.0.1" - "blakejs" "^1.1.0" - "browserify-aes" "^1.2.0" - "bs58check" "^2.1.2" - "create-hash" "^1.2.0" - "create-hmac" "^1.1.7" - "hash.js" "^1.1.7" - "keccak" "^3.0.0" - "pbkdf2" "^3.0.17" - "randombytes" "^2.1.0" - "safe-buffer" "^5.1.2" - "scrypt-js" "^3.0.0" - "secp256k1" "^4.0.1" - "setimmediate" "^1.0.5" - -"ethereum-cryptography@^1.0.3": - "integrity" "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==" - "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "@noble/hashes" "1.1.2" - "@noble/secp256k1" "1.6.3" - "@scure/bip32" "1.1.0" - "@scure/bip39" "1.1.0" - -"ethereum-cryptography@^1.1.2": - "integrity" "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==" - "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "@noble/hashes" "1.1.2" - "@noble/secp256k1" "1.6.3" - "@scure/bip32" "1.1.0" - "@scure/bip39" "1.1.0" - -"ethereum-cryptography@1.1.2": - "integrity" "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==" - "resolved" "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "@noble/hashes" "1.1.2" - "@noble/secp256k1" "1.6.3" - "@scure/bip32" "1.1.0" - "@scure/bip39" "1.1.0" - -"ethereum-protocol@^1.0.1": - "integrity" "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==" - "resolved" "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz" - "version" "1.0.1" - -"ethereumjs-abi@^0.6.8": - "integrity" "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==" - "resolved" "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz" - "version" "0.6.8" - dependencies: - "bn.js" "^4.11.8" - "ethereumjs-util" "^6.0.0" - -"ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": - "version" "0.6.8" - dependencies: - "bn.js" "^4.11.8" - "ethereumjs-util" "^6.0.0" - -"ethereumjs-account@^2.0.3": - "integrity" "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==" - "resolved" "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz" - "version" "2.0.5" - dependencies: - "ethereumjs-util" "^5.0.0" - "rlp" "^2.0.0" - "safe-buffer" "^5.1.1" - -"ethereumjs-block@^1.2.2": - "integrity" "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==" - "resolved" "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz" - "version" "1.7.1" - dependencies: - "async" "^2.0.1" - "ethereum-common" "0.2.0" - "ethereumjs-tx" "^1.2.2" - "ethereumjs-util" "^5.0.0" - "merkle-patricia-tree" "^2.1.2" - -"ethereumjs-block@~2.2.0": - "integrity" "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==" - "resolved" "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz" - "version" "2.2.2" - dependencies: - "async" "^2.0.1" - "ethereumjs-common" "^1.5.0" - "ethereumjs-tx" "^2.1.1" - "ethereumjs-util" "^5.0.0" - "merkle-patricia-tree" "^2.1.2" - -"ethereumjs-common@^1.1.0", "ethereumjs-common@^1.5.0": - "integrity" "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==" - "resolved" "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz" - "version" "1.5.2" - -"ethereumjs-tx@^1.2.2": - "integrity" "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==" - "resolved" "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz" - "version" "1.3.7" - dependencies: - "ethereum-common" "^0.0.18" - "ethereumjs-util" "^5.0.0" - -"ethereumjs-tx@^2.1.1": - "integrity" "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==" - "resolved" "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "ethereumjs-common" "^1.5.0" - "ethereumjs-util" "^6.0.0" - -"ethereumjs-util@^5.0.0": - "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" - "version" "5.2.1" - dependencies: - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "^0.1.3" - "rlp" "^2.0.0" - "safe-buffer" "^5.1.1" - -"ethereumjs-util@^5.1.1": - "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" - "version" "5.2.1" - dependencies: - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "^0.1.3" - "rlp" "^2.0.0" - "safe-buffer" "^5.1.1" - -"ethereumjs-util@^5.1.2": - "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" - "version" "5.2.1" - dependencies: - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "^0.1.3" - "rlp" "^2.0.0" - "safe-buffer" "^5.1.1" - -"ethereumjs-util@^5.1.5": - "integrity" "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz" - "version" "5.2.1" - dependencies: - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "^0.1.3" - "rlp" "^2.0.0" - "safe-buffer" "^5.1.1" - -"ethereumjs-util@^6.0.0": - "integrity" "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" - "version" "6.2.1" - dependencies: - "@types/bn.js" "^4.11.3" - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "0.1.6" - "rlp" "^2.2.3" - -"ethereumjs-util@^6.2.1": - "integrity" "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" - "version" "6.2.1" - dependencies: - "@types/bn.js" "^4.11.3" - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "0.1.6" - "rlp" "^2.2.3" - -"ethereumjs-util@^7.0.10", "ethereumjs-util@^7.1.0", "ethereumjs-util@^7.1.2", "ethereumjs-util@^7.1.4", "ethereumjs-util@^7.1.5": - "integrity" "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz" - "version" "7.1.5" - dependencies: - "@types/bn.js" "^5.1.0" - "bn.js" "^5.1.2" - "create-hash" "^1.1.2" - "ethereum-cryptography" "^0.1.3" - "rlp" "^2.2.4" - -"ethereumjs-util@6.2.1": - "integrity" "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==" - "resolved" "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" - "version" "6.2.1" - dependencies: - "@types/bn.js" "^4.11.3" - "bn.js" "^4.11.0" - "create-hash" "^1.1.2" - "elliptic" "^6.5.2" - "ethereum-cryptography" "^0.1.3" - "ethjs-util" "0.1.6" - "rlp" "^2.2.3" - -"ethereumjs-vm@^2.3.4": - "integrity" "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==" - "resolved" "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz" - "version" "2.6.0" - dependencies: - "async" "^2.1.2" - "async-eventemitter" "^0.2.2" - "ethereumjs-account" "^2.0.3" - "ethereumjs-block" "~2.2.0" - "ethereumjs-common" "^1.1.0" - "ethereumjs-util" "^6.0.0" - "fake-merkle-patricia-tree" "^1.0.1" - "functional-red-black-tree" "^1.0.1" - "merkle-patricia-tree" "^2.3.2" - "rustbn.js" "~0.2.0" - "safe-buffer" "^5.1.1" - -"ethereumjs-wallet@^1.0.1": - "integrity" "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==" - "resolved" "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "aes-js" "^3.1.2" - "bs58check" "^2.1.2" - "ethereum-cryptography" "^0.1.3" - "ethereumjs-util" "^7.1.2" - "randombytes" "^2.1.0" - "scrypt-js" "^3.0.1" - "utf8" "^3.0.0" - "uuid" "^8.3.2" - -"ethers@^4.0.32": - "integrity" "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==" - "resolved" "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz" - "version" "4.0.49" - dependencies: - "aes-js" "3.0.0" - "bn.js" "^4.11.9" - "elliptic" "6.5.4" - "hash.js" "1.1.3" - "js-sha3" "0.5.7" - "scrypt-js" "2.0.4" - "setimmediate" "1.0.4" - "uuid" "2.0.1" - "xmlhttprequest" "1.8.0" - -"ethers@^4.0.40": - "integrity" "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==" - "resolved" "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz" - "version" "4.0.49" - dependencies: - "aes-js" "3.0.0" - "bn.js" "^4.11.9" - "elliptic" "6.5.4" - "hash.js" "1.1.3" - "js-sha3" "0.5.7" - "scrypt-js" "2.0.4" - "setimmediate" "1.0.4" - "uuid" "2.0.1" - "xmlhttprequest" "1.8.0" - -"ethers@^5", "ethers@^5.0.0", "ethers@^5.1.3", "ethers@^5.4.7", "ethers@^5.5.2", "ethers@^5.5.3", "ethers@^5.6.8", "ethers@^5.6.9", "ethers@^5.7.0", "ethers@^5.7.1": - "integrity" "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==" - "resolved" "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz" - "version" "5.7.2" - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - -"ethjs-unit@0.1.6": - "integrity" "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==" - "resolved" "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz" - "version" "0.1.6" - dependencies: - "bn.js" "4.11.6" - "number-to-bn" "1.7.0" - -"ethjs-util@^0.1.3", "ethjs-util@^0.1.6", "ethjs-util@0.1.6": - "integrity" "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==" - "resolved" "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz" - "version" "0.1.6" - dependencies: - "is-hex-prefixed" "1.0.0" - "strip-hex-prefix" "1.0.0" - -"event-target-shim@^5.0.0": - "integrity" "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - "resolved" "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" - "version" "5.0.1" - -"eventemitter3@^4.0.4": - "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" - "version" "4.0.7" - -"eventemitter3@^4.0.7": - "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" - "version" "4.0.7" - -"eventemitter3@4.0.4": - "integrity" "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" - "version" "4.0.4" - -"events@^3.0.0", "events@^3.2.0", "events@^3.3.0": - "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" - "version" "3.3.0" - -"evp_bytestokey@^1.0.0", "evp_bytestokey@^1.0.3": - "integrity" "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==" - "resolved" "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "md5.js" "^1.3.4" - "safe-buffer" "^5.1.1" - -"execa@^1.0.0": - "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" - "resolved" "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "cross-spawn" "^6.0.0" - "get-stream" "^4.0.0" - "is-stream" "^1.1.0" - "npm-run-path" "^2.0.0" - "p-finally" "^1.0.0" - "signal-exit" "^3.0.0" - "strip-eof" "^1.0.0" - -"execa@^5.0.0", "execa@^5.1.1": - "integrity" "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==" - "resolved" "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "cross-spawn" "^7.0.3" - "get-stream" "^6.0.0" - "human-signals" "^2.1.0" - "is-stream" "^2.0.0" - "merge-stream" "^2.0.0" - "npm-run-path" "^4.0.1" - "onetime" "^5.1.2" - "signal-exit" "^3.0.3" - "strip-final-newline" "^2.0.0" - -"exit@^0.1.2": - "integrity" "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" - "resolved" "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - "version" "0.1.2" - -"expect@^28.0.0", "expect@^28.1.3": - "integrity" "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==" - "resolved" "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/expect-utils" "^28.1.3" - "jest-get-type" "^28.0.2" - "jest-matcher-utils" "^28.1.3" - "jest-message-util" "^28.1.3" - "jest-util" "^28.1.3" - -"express@^4.14.0": - "integrity" "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==" - "resolved" "https://registry.npmjs.org/express/-/express-4.18.2.tgz" - "version" "4.18.2" - dependencies: - "accepts" "~1.3.8" - "array-flatten" "1.1.1" - "body-parser" "1.20.1" - "content-disposition" "0.5.4" - "content-type" "~1.0.4" - "cookie" "0.5.0" - "cookie-signature" "1.0.6" - "debug" "2.6.9" - "depd" "2.0.0" - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "etag" "~1.8.1" - "finalhandler" "1.2.0" - "fresh" "0.5.2" - "http-errors" "2.0.0" - "merge-descriptors" "1.0.1" - "methods" "~1.1.2" - "on-finished" "2.4.1" - "parseurl" "~1.3.3" - "path-to-regexp" "0.1.7" - "proxy-addr" "~2.0.7" - "qs" "6.11.0" - "range-parser" "~1.2.1" - "safe-buffer" "5.2.1" - "send" "0.18.0" - "serve-static" "1.15.0" - "setprototypeof" "1.2.0" - "statuses" "2.0.1" - "type-is" "~1.6.18" - "utils-merge" "1.0.1" - "vary" "~1.1.2" - -"ext@^1.1.2": - "integrity" "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==" - "resolved" "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" - "version" "1.7.0" - dependencies: - "type" "^2.7.2" - -"extend@~3.0.2": - "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - "version" "3.0.2" - -"external-editor@^3.0.3": - "integrity" "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==" - "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "chardet" "^0.7.0" - "iconv-lite" "^0.4.24" - "tmp" "^0.0.33" - -"extsprintf@^1.2.0": - "integrity" "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==" - "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz" - "version" "1.4.1" - -"extsprintf@1.3.0": - "integrity" "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - "version" "1.3.0" - -"eyes@^0.1.8": - "integrity" "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==" - "resolved" "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz" - "version" "0.1.8" - -"fake-merkle-patricia-tree@^1.0.1": - "integrity" "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==" - "resolved" "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "checkpoint-store" "^1.1.0" - -"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": - "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - "version" "3.1.3" - -"fast-diff@^1.1.2": - "integrity" "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" - "resolved" "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" - "version" "1.2.0" - -"fast-glob@^3.0.3", "fast-glob@^3.2.9": - "integrity" "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==" - "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" - "version" "3.2.12" - 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-glob@3.2.7": - "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==" - "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" - "version" "3.2.7" - 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": - "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - "version" "2.1.0" - -"fast-levenshtein@^2.0.6", "fast-levenshtein@~2.0.6": - "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - "version" "2.0.6" - -"fast-safe-stringify@^2.0.6", "fast-safe-stringify@^2.1.1": - "integrity" "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - "resolved" "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" - "version" "2.1.1" - -"fast-stable-stringify@^1.0.0": - "integrity" "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==" - "resolved" "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz" - "version" "1.0.0" - -"fastest-levenshtein@^1.0.12": - "integrity" "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==" - "resolved" "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" - "version" "1.0.16" - -"fastq@^1.6.0": - "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==" - "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" - "version" "1.13.0" - dependencies: - "reusify" "^1.0.4" - -"fb-watchman@^2.0.0": - "integrity" "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==" - "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "bser" "2.1.1" - -"figures@^3.0.0", "figures@3.2.0": - "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" - "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "escape-string-regexp" "^1.0.5" - -"file-entry-cache@^6.0.1": - "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" - "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "flat-cache" "^3.0.4" - -"file-uri-to-path@1.0.0": - "integrity" "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - "resolved" "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" - "version" "1.0.0" - -"filelist@^1.0.1": - "integrity" "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==" - "resolved" "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "minimatch" "^5.0.1" - -"fill-range@^7.0.1": - "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "to-regex-range" "^5.0.1" - -"finalhandler@1.2.0": - "integrity" "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==" - "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "debug" "2.6.9" - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "on-finished" "2.4.1" - "parseurl" "~1.3.3" - "statuses" "2.0.1" - "unpipe" "~1.0.0" - -"find-replace@^3.0.0": - "integrity" "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==" - "resolved" "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "array-back" "^3.0.1" - -"find-up@^2.0.0": - "integrity" "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "locate-path" "^2.0.0" - -"find-up@^2.1.0": - "integrity" "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "locate-path" "^2.0.0" - -"find-up@^3.0.0", "find-up@3.0.0": - "integrity" "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "locate-path" "^3.0.0" - -"find-up@^4.0.0": - "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "locate-path" "^5.0.0" - "path-exists" "^4.0.0" - -"find-up@^4.1.0": - "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "locate-path" "^5.0.0" - "path-exists" "^4.0.0" - -"find-up@^5.0.0": - "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "locate-path" "^6.0.0" - "path-exists" "^4.0.0" - -"find-up@5.0.0": - "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "locate-path" "^6.0.0" - "path-exists" "^4.0.0" - -"flat-cache@^3.0.4": - "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" - "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "flatted" "^3.1.0" - "rimraf" "^3.0.2" - -"flat@^4.1.0": - "integrity" "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==" - "resolved" "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "is-buffer" "~2.0.3" - -"flat@^5.0.2": - "integrity" "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" - "resolved" "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" - "version" "5.0.2" - -"flatted@^3.1.0": - "integrity" "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" - "version" "3.2.7" - -"fmix@^0.1.0": - "integrity" "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==" - "resolved" "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz" - "version" "0.1.0" - dependencies: - "imul" "^1.0.0" - -"follow-redirects@^1.12.1", "follow-redirects@^1.14.0", "follow-redirects@^1.15.0": - "integrity" "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" - "version" "1.15.2" - -"for-each@^0.3.3": - "integrity" "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==" - "resolved" "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - "version" "0.3.3" - dependencies: - "is-callable" "^1.1.3" - -"forever-agent@~0.6.1": - "integrity" "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" - "resolved" "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" - "version" "0.6.1" - -"form-data-encoder@1.7.1": - "integrity" "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" - "resolved" "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz" - "version" "1.7.1" - -"form-data@^2.2.0": - "integrity" "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==" - "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz" - "version" "2.5.1" - dependencies: - "asynckit" "^0.4.0" - "combined-stream" "^1.0.6" - "mime-types" "^2.1.12" - -"form-data@^3.0.0": - "integrity" "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==" - "resolved" "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "asynckit" "^0.4.0" - "combined-stream" "^1.0.8" - "mime-types" "^2.1.12" - -"form-data@^4.0.0": - "integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==" - "resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "asynckit" "^0.4.0" - "combined-stream" "^1.0.8" - "mime-types" "^2.1.12" - -"form-data@~2.3.2": - "integrity" "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==" - "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" - "version" "2.3.3" - dependencies: - "asynckit" "^0.4.0" - "combined-stream" "^1.0.6" - "mime-types" "^2.1.12" - -"forwarded@0.2.0": - "integrity" "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" - "version" "0.2.0" - -"fp-ts@^1.0.0": - "integrity" "sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A==" - "resolved" "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz" - "version" "1.19.5" - -"fp-ts@1.19.3": - "integrity" "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" - "resolved" "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" - "version" "1.19.3" - -"fresh@0.5.2": - "integrity" "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - "version" "0.5.2" - -"fs-constants@^1.0.0": - "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - "version" "1.0.0" - -"fs-extra@^0.30.0": - "integrity" "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz" - "version" "0.30.0" - dependencies: - "graceful-fs" "^4.1.2" - "jsonfile" "^2.1.0" - "klaw" "^1.0.0" - "path-is-absolute" "^1.0.0" - "rimraf" "^2.2.8" - -"fs-extra@^10.0.0": - "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - "version" "10.1.0" - dependencies: - "graceful-fs" "^4.2.0" - "jsonfile" "^6.0.1" - "universalify" "^2.0.0" - -"fs-extra@^10.1.0": - "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - "version" "10.1.0" - dependencies: - "graceful-fs" "^4.2.0" - "jsonfile" "^6.0.1" - "universalify" "^2.0.0" - -"fs-extra@^4.0.2": - "integrity" "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "graceful-fs" "^4.1.2" - "jsonfile" "^4.0.0" - "universalify" "^0.1.0" - -"fs-extra@^7.0.0": - "integrity" "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "graceful-fs" "^4.1.2" - "jsonfile" "^4.0.0" - "universalify" "^0.1.0" - -"fs-extra@^7.0.1": - "integrity" "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "graceful-fs" "^4.1.2" - "jsonfile" "^4.0.0" - "universalify" "^0.1.0" - -"fs-extra@^8.1.0": - "integrity" "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" - "version" "8.1.0" - dependencies: - "graceful-fs" "^4.2.0" - "jsonfile" "^4.0.0" - "universalify" "^0.1.0" - -"fs-extra@^9.1.0": - "integrity" "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - "version" "9.1.0" - dependencies: - "at-least-node" "^1.0.0" - "graceful-fs" "^4.2.0" - "jsonfile" "^6.0.1" - "universalify" "^2.0.0" - -"fs-minipass@^1.2.7": - "integrity" "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==" - "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" - "version" "1.2.7" - dependencies: - "minipass" "^2.6.0" - -"fs-minipass@^2.0.0", "fs-minipass@^2.1.0": - "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" - "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "minipass" "^3.0.0" - -"fs-readdir-recursive@^1.1.0": - "integrity" "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" - "resolved" "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz" - "version" "1.1.0" - -"fs.realpath@^1.0.0": - "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - "version" "1.0.0" - -"fsevents@^2.3.2", "fsevents@~2.3.2": - "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" - "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - "version" "2.3.2" - -"fsevents@~2.1.1": - "integrity" "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==" - "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz" - "version" "2.1.3" - -"function-bind@^1.1.1": - "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - "version" "1.1.1" - -"function.prototype.name@^1.1.5": - "integrity" "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==" - "resolved" "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - "es-abstract" "^1.19.0" - "functions-have-names" "^1.2.2" - -"functional-red-black-tree@^1.0.1": - "integrity" "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - "version" "1.0.1" - -"functions-have-names@^1.2.2": - "integrity" "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - "resolved" "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" - "version" "1.2.3" - -"ganache-cli@^6.12.2": - "integrity" "sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw==" - "resolved" "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz" - "version" "6.12.2" - dependencies: - "ethereumjs-util" "6.2.1" - "source-map-support" "0.5.12" - "yargs" "13.2.4" - -"ganache@^7.1.0": - "integrity" "sha512-afNTJYBEaFrLPRrn7eUxH39TgnrffvHn/4T6THzQrc3rpfe4DOxw2nY2XEQxfsq1t4OqKSXtxomzyo26RZiOzw==" - "resolved" "https://registry.npmjs.org/ganache/-/ganache-7.5.0.tgz" - "version" "7.5.0" - dependencies: - "@trufflesuite/bigint-buffer" "1.1.10" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "5.1.1" - "@types/seedrandom" "3.0.1" - "emittery" "0.10.0" - "keccak" "3.0.2" - "leveldown" "6.1.0" - "secp256k1" "4.0.3" - optionalDependencies: - "bufferutil" "4.0.5" - "utf-8-validate" "5.0.7" - -"gauge@^4.0.3": - "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" - "version" "4.0.4" - dependencies: - "aproba" "^1.0.3 || ^2.0.0" - "color-support" "^1.1.3" - "console-control-strings" "^1.1.0" - "has-unicode" "^2.0.1" - "signal-exit" "^3.0.7" - "string-width" "^4.2.3" - "strip-ansi" "^6.0.1" - "wide-align" "^1.1.5" - -"gensync@^1.0.0-beta.2": - "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - "version" "1.0.0-beta.2" - -"get-caller-file@^2.0.1", "get-caller-file@^2.0.5": - "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - "version" "2.0.5" - -"get-func-name@^2.0.0": - "integrity" "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" - "resolved" "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" - "version" "2.0.0" - -"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1", "get-intrinsic@^1.1.3": - "integrity" "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==" - "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "function-bind" "^1.1.1" - "has" "^1.0.3" - "has-symbols" "^1.0.3" - -"get-package-type@^0.1.0": - "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" - "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" - "version" "0.1.0" - -"get-pkg-repo@^4.0.0": - "integrity" "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==" - "resolved" "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "@hutson/parse-repository-url" "^3.0.0" - "hosted-git-info" "^4.0.0" - "through2" "^2.0.0" - "yargs" "^16.2.0" - -"get-port@^3.1.0": - "integrity" "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" - "resolved" "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz" - "version" "3.2.0" - -"get-port@^5.1.1": - "integrity" "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==" - "resolved" "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" - "version" "5.1.1" - -"get-stream@^4.0.0": - "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "pump" "^3.0.0" - -"get-stream@^4.1.0": - "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "pump" "^3.0.0" - -"get-stream@^5.1.0": - "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "pump" "^3.0.0" - -"get-stream@^6.0.0", "get-stream@^6.0.1": - "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - "version" "6.0.1" - -"get-symbol-description@^1.0.0": - "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==" - "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "call-bind" "^1.0.2" - "get-intrinsic" "^1.1.1" - -"getpass@^0.1.1": - "integrity" "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==" - "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - "version" "0.1.7" - dependencies: - "assert-plus" "^1.0.0" - -"ghost-testrpc@^0.0.2": - "integrity" "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==" - "resolved" "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz" - "version" "0.0.2" - dependencies: - "chalk" "^2.4.2" - "node-emoji" "^1.10.0" - -"git-raw-commits@^2.0.8": - "integrity" "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==" - "resolved" "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz" - "version" "2.0.11" - dependencies: - "dargs" "^7.0.0" - "lodash" "^4.17.15" - "meow" "^8.0.0" - "split2" "^3.0.0" - "through2" "^4.0.0" - -"git-remote-origin-url@^2.0.0": - "integrity" "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==" - "resolved" "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "gitconfiglocal" "^1.0.0" - "pify" "^2.3.0" - -"git-semver-tags@^4.1.1": - "integrity" "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==" - "resolved" "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "meow" "^8.0.0" - "semver" "^6.0.0" - -"git-up@^7.0.0": - "integrity" "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==" - "resolved" "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "is-ssh" "^1.4.0" - "parse-url" "^8.1.0" - -"git-url-parse@^13.1.0": - "integrity" "sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==" - "resolved" "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz" - "version" "13.1.0" - dependencies: - "git-up" "^7.0.0" - -"gitconfiglocal@^1.0.0": - "integrity" "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==" - "resolved" "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "ini" "^1.3.2" - -"glob-parent@^5.1.1", "glob-parent@^5.1.2", "glob-parent@~5.1.0", "glob-parent@~5.1.2": - "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "is-glob" "^4.0.1" - -"glob-parent@^6.0.2": - "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "is-glob" "^4.0.3" - -"glob-to-regexp@^0.4.1": - "integrity" "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" - "version" "0.4.1" - -"glob@^5.0.15": - "integrity" "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==" - "resolved" "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" - "version" "5.0.15" - dependencies: - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "2 || 3" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^7.0.0", "glob@^7.1.1", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6": - "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - "version" "7.2.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.1.1" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^8.0.1": - "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - "version" "8.0.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^5.0.1" - "once" "^1.3.0" - -"glob@7.1.3": - "integrity" "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" - "version" "7.1.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@7.1.4": - "integrity" "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" - "version" "7.1.4" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@7.2.0": - "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"global-modules@^2.0.0": - "integrity" "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==" - "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "global-prefix" "^3.0.0" - -"global-prefix@^3.0.0": - "integrity" "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==" - "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "ini" "^1.3.5" - "kind-of" "^6.0.2" - "which" "^1.3.1" - -"global@~4.4.0": - "integrity" "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==" - "resolved" "https://registry.npmjs.org/global/-/global-4.4.0.tgz" - "version" "4.4.0" - dependencies: - "min-document" "^2.19.0" - "process" "^0.11.10" - -"globals@^11.1.0": - "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - "version" "11.12.0" - -"globals@^13.15.0": - "integrity" "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==" - "resolved" "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" - "version" "13.17.0" - dependencies: - "type-fest" "^0.20.2" - -"globby@^10.0.1": - "integrity" "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==" - "resolved" "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz" - "version" "10.0.2" - dependencies: - "@types/glob" "^7.1.1" - "array-union" "^2.1.0" - "dir-glob" "^3.0.1" - "fast-glob" "^3.0.3" - "glob" "^7.1.3" - "ignore" "^5.1.1" - "merge2" "^1.2.3" - "slash" "^3.0.0" - -"globby@^11.0.2", "globby@^11.1.0": - "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==" - "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - "version" "11.1.0" - dependencies: - "array-union" "^2.1.0" - "dir-glob" "^3.0.1" - "fast-glob" "^3.2.9" - "ignore" "^5.2.0" - "merge2" "^1.4.1" - "slash" "^3.0.0" - -"gopd@^1.0.1": - "integrity" "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==" - "resolved" "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "get-intrinsic" "^1.1.3" - -"got@^11.8.5": - "integrity" "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==" - "resolved" "https://registry.npmjs.org/got/-/got-11.8.5.tgz" - "version" "11.8.5" - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - "cacheable-lookup" "^5.0.3" - "cacheable-request" "^7.0.2" - "decompress-response" "^6.0.0" - "http2-wrapper" "^1.0.0-beta.5.2" - "lowercase-keys" "^2.0.0" - "p-cancelable" "^2.0.0" - "responselike" "^2.0.0" - -"got@12.1.0": - "integrity" "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==" - "resolved" "https://registry.npmjs.org/got/-/got-12.1.0.tgz" - "version" "12.1.0" - dependencies: - "@sindresorhus/is" "^4.6.0" - "@szmarczak/http-timer" "^5.0.1" - "@types/cacheable-request" "^6.0.2" - "@types/responselike" "^1.0.0" - "cacheable-lookup" "^6.0.4" - "cacheable-request" "^7.0.2" - "decompress-response" "^6.0.0" - "form-data-encoder" "1.7.1" - "get-stream" "^6.0.1" - "http2-wrapper" "^2.1.10" - "lowercase-keys" "^3.0.0" - "p-cancelable" "^3.0.0" - "responselike" "^2.0.0" - -"got@9.6.0": - "integrity" "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==" - "resolved" "https://registry.npmjs.org/got/-/got-9.6.0.tgz" - "version" "9.6.0" - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - "cacheable-request" "^6.0.0" - "decompress-response" "^3.3.0" - "duplexer3" "^0.1.4" - "get-stream" "^4.1.0" - "lowercase-keys" "^1.0.1" - "mimic-response" "^1.0.1" - "p-cancelable" "^1.0.0" - "to-readable-stream" "^1.0.0" - "url-parse-lax" "^3.0.0" - -"graceful-fs@^4.1.11", "graceful-fs@^4.1.15", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.1.9", "graceful-fs@^4.2.0", "graceful-fs@^4.2.4", "graceful-fs@^4.2.6", "graceful-fs@^4.2.9": - "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - "version" "4.2.10" - -"grapheme-splitter@^1.0.4": - "integrity" "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - "resolved" "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" - "version" "1.0.4" - -"growl@1.10.5": - "integrity" "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" - "resolved" "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" - "version" "1.10.5" - -"handlebars@^4.0.1", "handlebars@^4.7.7": - "integrity" "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==" - "resolved" "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" - "version" "4.7.7" - dependencies: - "minimist" "^1.2.5" - "neo-async" "^2.6.0" - "source-map" "^0.6.1" - "wordwrap" "^1.0.0" - optionalDependencies: - "uglify-js" "^3.1.4" - -"har-schema@^2.0.0": - "integrity" "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" - "resolved" "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" - "version" "2.0.0" - -"har-validator@~5.1.3": - "integrity" "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==" - "resolved" "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" - "version" "5.1.5" - dependencies: - "ajv" "^6.12.3" - "har-schema" "^2.0.0" - -"hard-rejection@^2.1.0": - "integrity" "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==" - "resolved" "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" - "version" "2.1.0" - -"hardhat-deploy-ethers@^0.3.0-beta.11": - "integrity" "sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw==" - "resolved" "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz" - "version" "0.3.0-beta.13" - -"hardhat-deploy@^0.9.3": - "integrity" "sha512-8tIGszPFmOaXtyloCbASiZPvoAgLNGGL/Ubys3YW/oj4dvoPa8G6YDyaOCdsAhsENZ+QgR280NFSG9JdN7SU9Q==" - "resolved" "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.9.29.tgz" - "version" "0.9.29" - dependencies: - "@ethersproject/abi" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.1" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.1" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/contracts" "^5.4.1" - "@ethersproject/providers" "^5.4.4" - "@ethersproject/solidity" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/wallet" "^5.4.0" - "@types/qs" "^6.9.7" - "axios" "^0.21.1" - "chalk" "^4.1.2" - "chokidar" "^3.5.2" - "debug" "^4.3.2" - "enquirer" "^2.3.6" - "form-data" "^4.0.0" - "fs-extra" "^10.0.0" - "match-all" "^1.2.6" - "murmur-128" "^0.2.1" - "qs" "^6.9.4" - -"hardhat-gas-reporter@^1.0.7", "hardhat-gas-reporter@^1.0.8": - "integrity" "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==" - "resolved" "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz" - "version" "1.0.9" - dependencies: - "array-uniq" "1.0.3" - "eth-gas-reporter" "^0.2.25" - "sha1" "^1.1.1" - -"hardhat@^2.0.0", "hardhat@^2.0.10", "hardhat@^2.0.2", "hardhat@^2.0.4", "hardhat@^2.11.0", "hardhat@^2.6.8", "hardhat@^2.9.2", "hardhat@^2.9.4", "hardhat@^2.9.5", "hardhat@^2.9.7", "hardhat@^2.9.9": - "integrity" "sha512-f3ZhzXy1uyQv0UXnAQ8GCBOWjzv++WJNb7bnm10SsyC3dB7vlPpsMWBNhq7aoRxKrNhX9tCev81KFV3i5BTeMQ==" - "resolved" "https://registry.npmjs.org/hardhat/-/hardhat-2.12.2.tgz" - "version" "2.12.2" - dependencies: - "@ethersproject/abi" "^5.1.2" - "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-evm" "^1.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@nomicfoundation/ethereumjs-vm" "^6.0.0" - "@nomicfoundation/solidity-analyzer" "^0.1.0" - "@sentry/node" "^5.18.1" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "^5.1.0" - "abort-controller" "^3.0.0" - "adm-zip" "^0.4.16" - "aggregate-error" "^3.0.0" - "ansi-escapes" "^4.3.0" - "chalk" "^2.4.2" - "chokidar" "^3.4.0" - "ci-info" "^2.0.0" - "debug" "^4.1.1" - "enquirer" "^2.3.0" - "env-paths" "^2.2.0" - "ethereum-cryptography" "^1.0.3" - "ethereumjs-abi" "^0.6.8" - "find-up" "^2.1.0" - "fp-ts" "1.19.3" - "fs-extra" "^7.0.1" - "glob" "7.2.0" - "immutable" "^4.0.0-rc.12" - "io-ts" "1.10.4" - "keccak" "^3.0.2" - "lodash" "^4.17.11" - "mnemonist" "^0.38.0" - "mocha" "^10.0.0" - "p-map" "^4.0.0" - "qs" "^6.7.0" - "raw-body" "^2.4.1" - "resolve" "1.17.0" - "semver" "^6.3.0" - "solc" "0.7.3" - "source-map-support" "^0.5.13" - "stacktrace-parser" "^0.1.10" - "tsort" "0.0.1" - "undici" "^5.4.0" - "uuid" "^8.3.2" - "ws" "^7.4.6" - -"has-bigints@^1.0.1", "has-bigints@^1.0.2": - "integrity" "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" - "version" "1.0.2" - -"has-flag@^1.0.0": - "integrity" "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" - "version" "1.0.0" - -"has-flag@^3.0.0": - "integrity" "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - "version" "3.0.0" - -"has-flag@^4.0.0": - "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - "version" "4.0.0" - -"has-property-descriptors@^1.0.0": - "integrity" "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==" - "resolved" "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "get-intrinsic" "^1.1.1" - -"has-symbols@^1.0.0", "has-symbols@^1.0.2", "has-symbols@^1.0.3": - "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - "version" "1.0.3" - -"has-tostringtag@^1.0.0": - "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==" - "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "has-symbols" "^1.0.2" - -"has-unicode@^2.0.1": - "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - "version" "2.0.1" - -"has@^1.0.3": - "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" - "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "function-bind" "^1.1.1" - -"hash-base@^3.0.0": - "integrity" "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==" - "resolved" "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "inherits" "^2.0.4" - "readable-stream" "^3.6.0" - "safe-buffer" "^5.2.0" - -"hash.js@^1.0.0", "hash.js@^1.0.3", "hash.js@^1.1.7", "hash.js@1.1.7": - "integrity" "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==" - "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" - "version" "1.1.7" - dependencies: - "inherits" "^2.0.3" - "minimalistic-assert" "^1.0.1" - -"hash.js@1.1.3": - "integrity" "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==" - "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "inherits" "^2.0.3" - "minimalistic-assert" "^1.0.0" - -"he@1.2.0": - "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" - "version" "1.2.0" - -"hmac-drbg@^1.0.0": - "version" "1.0.1" - dependencies: - "hash.js" "^1.0.3" - "minimalistic-assert" "^1.0.0" - "minimalistic-crypto-utils" "^1.0.1" - -"hmac-drbg@^1.0.1": - "integrity" "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==" - "resolved" "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "hash.js" "^1.0.3" - "minimalistic-assert" "^1.0.0" - "minimalistic-crypto-utils" "^1.0.1" - -"hosted-git-info@^2.1.4": - "integrity" "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - "version" "2.8.9" - -"hosted-git-info@^3.0.6": - "integrity" "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz" - "version" "3.0.8" - dependencies: - "lru-cache" "^6.0.0" - -"hosted-git-info@^4.0.0", "hosted-git-info@^4.0.1": - "integrity" "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "lru-cache" "^6.0.0" - -"hosted-git-info@^5.0.0": - "integrity" "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz" - "version" "5.2.1" - dependencies: - "lru-cache" "^7.5.1" - -"html-escaper@^2.0.0": - "integrity" "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - "resolved" "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" - "version" "2.0.2" - -"html-parse-stringify@^3.0.1": - "integrity" "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==" - "resolved" "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "void-elements" "3.1.0" - -"http-basic@^8.1.1": - "integrity" "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==" - "resolved" "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz" - "version" "8.1.3" - dependencies: - "caseless" "^0.12.0" - "concat-stream" "^1.6.2" - "http-response-object" "^3.0.1" - "parse-cache-control" "^1.0.1" - -"http-cache-semantics@^4.0.0", "http-cache-semantics@^4.1.0": - "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - "version" "4.1.0" - -"http-errors@2.0.0": - "integrity" "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==" - "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "depd" "2.0.0" - "inherits" "2.0.4" - "setprototypeof" "1.2.0" - "statuses" "2.0.1" - "toidentifier" "1.0.1" - -"http-https@^1.0.0": - "integrity" "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - "resolved" "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz" - "version" "1.0.0" - -"http-proxy-agent@^5.0.0": - "integrity" "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==" - "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "@tootallnate/once" "2" - "agent-base" "6" - "debug" "4" - -"http-response-object@^3.0.1": - "integrity" "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==" - "resolved" "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "@types/node" "^10.0.3" - -"http-signature@~1.2.0": - "integrity" "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==" - "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "assert-plus" "^1.0.0" - "jsprim" "^1.2.2" - "sshpk" "^1.7.0" - -"http2-wrapper@^1.0.0-beta.5.2": - "integrity" "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==" - "resolved" "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "quick-lru" "^5.1.1" - "resolve-alpn" "^1.0.0" - -"http2-wrapper@^2.1.10": - "integrity" "sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ==" - "resolved" "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz" - "version" "2.1.11" - dependencies: - "quick-lru" "^5.1.1" - "resolve-alpn" "^1.2.0" - -"https-proxy-agent@^5.0.0": - "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" - "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "agent-base" "6" - "debug" "4" - -"human-signals@^2.1.0": - "integrity" "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - "version" "2.1.0" - -"humanize-ms@^1.2.1": - "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" - "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "ms" "^2.0.0" - -"husky@^7.0.4": - "integrity" "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==" - "resolved" "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz" - "version" "7.0.4" - -"i18next@^22.0.4", "i18next@>= 19.0.0": - "integrity" "sha512-TOp7BTMKDbUkOHMzDlVsCYWpyaFkKakrrO3HNXfSz4EeJaWwnBScRmgQSTaWHScXVHBUFXTvShrCW8uryBYFcg==" - "resolved" "https://registry.npmjs.org/i18next/-/i18next-22.0.4.tgz" - "version" "22.0.4" - dependencies: - "@babel/runtime" "^7.17.2" - -"iconv-lite@^0.4.24", "iconv-lite@0.4.24": - "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - "version" "0.4.24" - dependencies: - "safer-buffer" ">= 2.1.2 < 3" - -"iconv-lite@^0.6.2": - "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - "version" "0.6.3" - dependencies: - "safer-buffer" ">= 2.1.2 < 3.0.0" - -"idna-uts46-hx@^2.3.1": - "integrity" "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==" - "resolved" "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz" - "version" "2.3.1" - dependencies: - "punycode" "2.1.0" - -"ieee754@^1.1.13", "ieee754@^1.2.1": - "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - "version" "1.2.1" - -"ignore-walk@^5.0.1": - "integrity" "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==" - "resolved" "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "minimatch" "^5.0.1" - -"ignore@^5.0.4", "ignore@^5.1.1", "ignore@^5.2.0": - "integrity" "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" - "version" "5.2.0" - -"immediate@^3.2.3": - "integrity" "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz" - "version" "3.3.0" - -"immutable@^4.0.0-rc.12": - "integrity" "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" - "resolved" "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz" - "version" "4.1.0" - -"import-fresh@^3.0.0", "import-fresh@^3.2.1": - "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" - "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "parent-module" "^1.0.0" - "resolve-from" "^4.0.0" - -"import-local@^3.0.2": - "integrity" "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==" - "resolved" "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "pkg-dir" "^4.2.0" - "resolve-cwd" "^3.0.0" - -"imul@^1.0.0": - "integrity" "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==" - "resolved" "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz" - "version" "1.0.1" - -"imurmurhash@^0.1.4": - "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - "version" "0.1.4" - -"indent-string@^4.0.0": - "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - "version" "4.0.0" - -"infer-owner@^1.0.4": - "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - "version" "1.0.4" - -"inflight@^1.0.4": - "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" - "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "once" "^1.3.0" - "wrappy" "1" - -"inherits@^2.0.1", "inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.1", "inherits@~2.0.3", "inherits@2", "inherits@2.0.4": - "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - "version" "2.0.4" - -"inherits@2.0.3": - "integrity" "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - "version" "2.0.3" - -"ini@^1.3.2", "ini@^1.3.4", "ini@^1.3.5": - "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - "version" "1.3.8" - -"init-package-json@^3.0.2": - "integrity" "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==" - "resolved" "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "npm-package-arg" "^9.0.1" - "promzard" "^0.3.0" - "read" "^1.0.7" - "read-package-json" "^5.0.0" - "semver" "^7.3.5" - "validate-npm-package-license" "^3.0.4" - "validate-npm-package-name" "^4.0.0" - -"inquirer@^8.2.4": - "integrity" "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==" - "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz" - "version" "8.2.5" - dependencies: - "ansi-escapes" "^4.2.1" - "chalk" "^4.1.1" - "cli-cursor" "^3.1.0" - "cli-width" "^3.0.0" - "external-editor" "^3.0.3" - "figures" "^3.0.0" - "lodash" "^4.17.21" - "mute-stream" "0.0.8" - "ora" "^5.4.1" - "run-async" "^2.4.0" - "rxjs" "^7.5.5" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - "through" "^2.3.6" - "wrap-ansi" "^7.0.0" - -"internal-slot@^1.0.3": - "integrity" "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==" - "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "get-intrinsic" "^1.1.0" - "has" "^1.0.3" - "side-channel" "^1.0.4" - -"interpret@^1.0.0": - "integrity" "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" - "version" "1.4.0" - -"interpret@^2.2.0": - "integrity" "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" - "resolved" "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz" - "version" "2.2.0" - -"invert-kv@^2.0.0": - "integrity" "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" - "resolved" "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz" - "version" "2.0.0" - -"io-ts@1.10.4": - "integrity" "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==" - "resolved" "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz" - "version" "1.10.4" - dependencies: - "fp-ts" "^1.0.0" - -"ip@^2.0.0": - "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" - "version" "2.0.0" - -"ipaddr.js@1.9.1": - "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - "version" "1.9.1" - -"is-arguments@^1.0.4": - "integrity" "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==" - "resolved" "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "call-bind" "^1.0.2" - "has-tostringtag" "^1.0.0" - -"is-arrayish@^0.2.1": - "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - "version" "0.2.1" - -"is-bigint@^1.0.1": - "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==" - "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "has-bigints" "^1.0.1" - -"is-binary-path@~2.1.0": - "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" - "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "binary-extensions" "^2.0.0" - -"is-boolean-object@^1.1.0": - "integrity" "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==" - "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "call-bind" "^1.0.2" - "has-tostringtag" "^1.0.0" - -"is-buffer@^2.0.5", "is-buffer@~2.0.3": - "integrity" "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" - "version" "2.0.5" - -"is-callable@^1.1.3", "is-callable@^1.1.4", "is-callable@^1.2.7": - "integrity" "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" - "version" "1.2.7" - -"is-ci@^2.0.0": - "integrity" "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==" - "resolved" "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "ci-info" "^2.0.0" - -"is-core-module@^2.5.0", "is-core-module@^2.8.1", "is-core-module@^2.9.0": - "integrity" "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==" - "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" - "version" "2.11.0" - dependencies: - "has" "^1.0.3" - -"is-date-object@^1.0.1": - "integrity" "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==" - "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-docker@^2.0.0", "is-docker@^2.1.1": - "integrity" "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - "resolved" "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" - "version" "2.2.1" - -"is-extglob@^2.1.1": - "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - "version" "2.1.1" - -"is-fn@^1.0.0": - "integrity" "sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==" - "resolved" "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz" - "version" "1.0.0" - -"is-fullwidth-code-point@^2.0.0": - "integrity" "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - "version" "2.0.0" - -"is-fullwidth-code-point@^3.0.0": - "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - "version" "3.0.0" - -"is-fullwidth-code-point@^4.0.0": - "integrity" "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" - "version" "4.0.0" - -"is-function@^1.0.1": - "integrity" "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - "resolved" "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz" - "version" "1.0.2" - -"is-generator-fn@^2.0.0": - "integrity" "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" - "resolved" "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" - "version" "2.1.0" - -"is-generator-function@^1.0.7": - "integrity" "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==" - "resolved" "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1": - "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "is-extglob" "^2.1.1" - -"is-hex-prefixed@1.0.0": - "integrity" "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" - "resolved" "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" - "version" "1.0.0" - -"is-interactive@^1.0.0": - "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" - "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" - "version" "1.0.0" - -"is-lambda@^1.0.1": - "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" - "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - "version" "1.0.1" - -"is-nan@^1.2.1": - "integrity" "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==" - "resolved" "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "call-bind" "^1.0.0" - "define-properties" "^1.1.3" - -"is-negative-zero@^2.0.2": - "integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" - "version" "2.0.2" - -"is-number-object@^1.0.4": - "integrity" "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==" - "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" - "version" "1.0.7" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-number@^7.0.0": - "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - "version" "7.0.0" - -"is-obj@^2.0.0": - "integrity" "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - "version" "2.0.0" - -"is-path-inside@^3.0.3": - "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - "version" "3.0.3" - -"is-plain-obj@^1.0.0": - "integrity" "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" - "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" - "version" "1.1.0" - -"is-plain-obj@^1.1.0": - "integrity" "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" - "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" - "version" "1.1.0" - -"is-plain-obj@^2.0.0", "is-plain-obj@^2.1.0": - "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" - "version" "2.1.0" - -"is-plain-object@^2.0.4": - "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" - "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "isobject" "^3.0.1" - -"is-plain-object@^5.0.0": - "integrity" "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - "version" "5.0.0" - -"is-regex@^1.1.4": - "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==" - "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" - "version" "1.1.4" - dependencies: - "call-bind" "^1.0.2" - "has-tostringtag" "^1.0.0" - -"is-shared-array-buffer@^1.0.2": - "integrity" "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==" - "resolved" "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "call-bind" "^1.0.2" - -"is-ssh@^1.4.0": - "integrity" "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==" - "resolved" "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "protocols" "^2.0.1" - -"is-stream@^1.1.0": - "integrity" "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" - "version" "1.1.0" - -"is-stream@^2.0.0": - "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - "version" "2.0.1" - -"is-string@^1.0.5", "is-string@^1.0.7": - "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" - "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" - "version" "1.0.7" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-symbol@^1.0.2", "is-symbol@^1.0.3": - "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==" - "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "has-symbols" "^1.0.2" - -"is-text-path@^1.0.1": - "integrity" "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==" - "resolved" "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "text-extensions" "^1.0.0" - -"is-typed-array@^1.1.10", "is-typed-array@^1.1.3": - "integrity" "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==" - "resolved" "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" - "version" "1.1.10" - dependencies: - "available-typed-arrays" "^1.0.5" - "call-bind" "^1.0.2" - "for-each" "^0.3.3" - "gopd" "^1.0.1" - "has-tostringtag" "^1.0.0" - -"is-typedarray@^1.0.0", "is-typedarray@~1.0.0", "is-typedarray@1.0.0": - "integrity" "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - "version" "1.0.0" - -"is-unicode-supported@^0.1.0": - "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - "version" "0.1.0" - -"is-weakref@^1.0.2": - "integrity" "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==" - "resolved" "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "call-bind" "^1.0.2" - -"is-wsl@^2.2.0": - "integrity" "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==" - "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "is-docker" "^2.0.0" - -"isarray@^2.0.1": - "integrity" "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - "resolved" "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" - "version" "2.0.5" - -"isarray@~1.0.0": - "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - "version" "1.0.0" - -"isarray@0.0.1": - "integrity" "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - "resolved" "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - "version" "0.0.1" - -"isexe@^2.0.0": - "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - "version" "2.0.0" - -"isobject@^3.0.1": - "integrity" "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - "version" "3.0.1" - -"isomorphic-ws@^4.0.1": - "integrity" "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" - "resolved" "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" - "version" "4.0.1" - -"isomorphic-ws@^5.0.0": - "integrity" "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==" - "resolved" "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz" - "version" "5.0.0" - -"isstream@~0.1.2": - "integrity" "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - "resolved" "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - "version" "0.1.2" - -"istanbul-lib-coverage@^3.0.0", "istanbul-lib-coverage@^3.2.0": - "integrity" "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" - "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" - "version" "3.2.0" - -"istanbul-lib-instrument@^5.0.4", "istanbul-lib-instrument@^5.1.0": - "integrity" "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==" - "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" - "version" "5.2.1" - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - "istanbul-lib-coverage" "^3.2.0" - "semver" "^6.3.0" - -"istanbul-lib-report@^3.0.0": - "integrity" "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==" - "resolved" "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "istanbul-lib-coverage" "^3.0.0" - "make-dir" "^3.0.0" - "supports-color" "^7.1.0" - -"istanbul-lib-source-maps@^4.0.0": - "integrity" "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==" - "resolved" "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "debug" "^4.1.1" - "istanbul-lib-coverage" "^3.0.0" - "source-map" "^0.6.1" - -"istanbul-reports@^3.1.3": - "integrity" "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==" - "resolved" "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" - "version" "3.1.5" - dependencies: - "html-escaper" "^2.0.0" - "istanbul-lib-report" "^3.0.0" - -"jake@^10.8.5": - "integrity" "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==" - "resolved" "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz" - "version" "10.8.5" - dependencies: - "async" "^3.2.3" - "chalk" "^4.0.2" - "filelist" "^1.0.1" - "minimatch" "^3.0.4" - -"jayson@^3.4.4": - "integrity" "sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==" - "resolved" "https://registry.npmjs.org/jayson/-/jayson-3.7.0.tgz" - "version" "3.7.0" - dependencies: - "@types/connect" "^3.4.33" - "@types/node" "^12.12.54" - "@types/ws" "^7.4.4" - "commander" "^2.20.3" - "delay" "^5.0.0" - "es6-promisify" "^5.0.0" - "eyes" "^0.1.8" - "isomorphic-ws" "^4.0.1" - "json-stringify-safe" "^5.0.1" - "JSONStream" "^1.3.5" - "lodash" "^4.17.20" - "uuid" "^8.3.2" - "ws" "^7.4.5" - -"jest-changed-files@^28.1.3": - "integrity" "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==" - "resolved" "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "execa" "^5.0.0" - "p-limit" "^3.1.0" - -"jest-circus@^28.1.3": - "integrity" "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==" - "resolved" "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/environment" "^28.1.3" - "@jest/expect" "^28.1.3" - "@jest/test-result" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/node" "*" - "chalk" "^4.0.0" - "co" "^4.6.0" - "dedent" "^0.7.0" - "is-generator-fn" "^2.0.0" - "jest-each" "^28.1.3" - "jest-matcher-utils" "^28.1.3" - "jest-message-util" "^28.1.3" - "jest-runtime" "^28.1.3" - "jest-snapshot" "^28.1.3" - "jest-util" "^28.1.3" - "p-limit" "^3.1.0" - "pretty-format" "^28.1.3" - "slash" "^3.0.0" - "stack-utils" "^2.0.3" - -"jest-cli@^28.1.3": - "integrity" "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==" - "resolved" "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/core" "^28.1.3" - "@jest/test-result" "^28.1.3" - "@jest/types" "^28.1.3" - "chalk" "^4.0.0" - "exit" "^0.1.2" - "graceful-fs" "^4.2.9" - "import-local" "^3.0.2" - "jest-config" "^28.1.3" - "jest-util" "^28.1.3" - "jest-validate" "^28.1.3" - "prompts" "^2.0.1" - "yargs" "^17.3.1" - -"jest-config@^28.1.3": - "integrity" "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==" - "resolved" "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^28.1.3" - "@jest/types" "^28.1.3" - "babel-jest" "^28.1.3" - "chalk" "^4.0.0" - "ci-info" "^3.2.0" - "deepmerge" "^4.2.2" - "glob" "^7.1.3" - "graceful-fs" "^4.2.9" - "jest-circus" "^28.1.3" - "jest-environment-node" "^28.1.3" - "jest-get-type" "^28.0.2" - "jest-regex-util" "^28.0.2" - "jest-resolve" "^28.1.3" - "jest-runner" "^28.1.3" - "jest-util" "^28.1.3" - "jest-validate" "^28.1.3" - "micromatch" "^4.0.4" - "parse-json" "^5.2.0" - "pretty-format" "^28.1.3" - "slash" "^3.0.0" - "strip-json-comments" "^3.1.1" - -"jest-diff@^28.1.3": - "integrity" "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==" - "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "chalk" "^4.0.0" - "diff-sequences" "^28.1.1" - "jest-get-type" "^28.0.2" - "pretty-format" "^28.1.3" - -"jest-docblock@^28.1.1": - "integrity" "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==" - "resolved" "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz" - "version" "28.1.1" - dependencies: - "detect-newline" "^3.0.0" - -"jest-each@^28.1.3": - "integrity" "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==" - "resolved" "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/types" "^28.1.3" - "chalk" "^4.0.0" - "jest-get-type" "^28.0.2" - "jest-util" "^28.1.3" - "pretty-format" "^28.1.3" - -"jest-environment-node@^28.1.3": - "integrity" "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==" - "resolved" "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/environment" "^28.1.3" - "@jest/fake-timers" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/node" "*" - "jest-mock" "^28.1.3" - "jest-util" "^28.1.3" - -"jest-get-type@^28.0.2": - "integrity" "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==" - "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" - "version" "28.0.2" - -"jest-haste-map@^28.1.3": - "integrity" "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==" - "resolved" "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/types" "^28.1.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - "anymatch" "^3.0.3" - "fb-watchman" "^2.0.0" - "graceful-fs" "^4.2.9" - "jest-regex-util" "^28.0.2" - "jest-util" "^28.1.3" - "jest-worker" "^28.1.3" - "micromatch" "^4.0.4" - "walker" "^1.0.8" - optionalDependencies: - "fsevents" "^2.3.2" - -"jest-leak-detector@^28.1.3": - "integrity" "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==" - "resolved" "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "jest-get-type" "^28.0.2" - "pretty-format" "^28.1.3" - -"jest-matcher-utils@^28.1.3": - "integrity" "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==" - "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "chalk" "^4.0.0" - "jest-diff" "^28.1.3" - "jest-get-type" "^28.0.2" - "pretty-format" "^28.1.3" - -"jest-message-util@^28.1.3": - "integrity" "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==" - "resolved" "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^28.1.3" - "@types/stack-utils" "^2.0.0" - "chalk" "^4.0.0" - "graceful-fs" "^4.2.9" - "micromatch" "^4.0.4" - "pretty-format" "^28.1.3" - "slash" "^3.0.0" - "stack-utils" "^2.0.3" - -"jest-mock@^28.1.3": - "integrity" "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==" - "resolved" "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/types" "^28.1.3" - "@types/node" "*" - -"jest-pnp-resolver@^1.2.2": - "integrity" "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" - "resolved" "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" - "version" "1.2.2" - -"jest-regex-util@^28.0.2": - "integrity" "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==" - "resolved" "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" - "version" "28.0.2" - -"jest-resolve-dependencies@^28.1.3": - "integrity" "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==" - "resolved" "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "jest-regex-util" "^28.0.2" - "jest-snapshot" "^28.1.3" - -"jest-resolve@*", "jest-resolve@^28.1.3": - "integrity" "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==" - "resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "chalk" "^4.0.0" - "graceful-fs" "^4.2.9" - "jest-haste-map" "^28.1.3" - "jest-pnp-resolver" "^1.2.2" - "jest-util" "^28.1.3" - "jest-validate" "^28.1.3" - "resolve" "^1.20.0" - "resolve.exports" "^1.1.0" - "slash" "^3.0.0" - -"jest-runner@^28.1.3": - "integrity" "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==" - "resolved" "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/console" "^28.1.3" - "@jest/environment" "^28.1.3" - "@jest/test-result" "^28.1.3" - "@jest/transform" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/node" "*" - "chalk" "^4.0.0" - "emittery" "^0.10.2" - "graceful-fs" "^4.2.9" - "jest-docblock" "^28.1.1" - "jest-environment-node" "^28.1.3" - "jest-haste-map" "^28.1.3" - "jest-leak-detector" "^28.1.3" - "jest-message-util" "^28.1.3" - "jest-resolve" "^28.1.3" - "jest-runtime" "^28.1.3" - "jest-util" "^28.1.3" - "jest-watcher" "^28.1.3" - "jest-worker" "^28.1.3" - "p-limit" "^3.1.0" - "source-map-support" "0.5.13" - -"jest-runtime@^28.1.3": - "integrity" "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==" - "resolved" "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/environment" "^28.1.3" - "@jest/fake-timers" "^28.1.3" - "@jest/globals" "^28.1.3" - "@jest/source-map" "^28.1.2" - "@jest/test-result" "^28.1.3" - "@jest/transform" "^28.1.3" - "@jest/types" "^28.1.3" - "chalk" "^4.0.0" - "cjs-module-lexer" "^1.0.0" - "collect-v8-coverage" "^1.0.0" - "execa" "^5.0.0" - "glob" "^7.1.3" - "graceful-fs" "^4.2.9" - "jest-haste-map" "^28.1.3" - "jest-message-util" "^28.1.3" - "jest-mock" "^28.1.3" - "jest-regex-util" "^28.0.2" - "jest-resolve" "^28.1.3" - "jest-snapshot" "^28.1.3" - "jest-util" "^28.1.3" - "slash" "^3.0.0" - "strip-bom" "^4.0.0" - -"jest-snapshot@^28.1.3": - "integrity" "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==" - "resolved" "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/traverse" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^28.1.3" - "@jest/transform" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/babel__traverse" "^7.0.6" - "@types/prettier" "^2.1.5" - "babel-preset-current-node-syntax" "^1.0.0" - "chalk" "^4.0.0" - "expect" "^28.1.3" - "graceful-fs" "^4.2.9" - "jest-diff" "^28.1.3" - "jest-get-type" "^28.0.2" - "jest-haste-map" "^28.1.3" - "jest-matcher-utils" "^28.1.3" - "jest-message-util" "^28.1.3" - "jest-util" "^28.1.3" - "natural-compare" "^1.4.0" - "pretty-format" "^28.1.3" - "semver" "^7.3.5" - -"jest-util@^28.1.3": - "integrity" "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==" - "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/types" "^28.1.3" - "@types/node" "*" - "chalk" "^4.0.0" - "ci-info" "^3.2.0" - "graceful-fs" "^4.2.9" - "picomatch" "^2.2.3" - -"jest-validate@^28.1.3": - "integrity" "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==" - "resolved" "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/types" "^28.1.3" - "camelcase" "^6.2.0" - "chalk" "^4.0.0" - "jest-get-type" "^28.0.2" - "leven" "^3.1.0" - "pretty-format" "^28.1.3" - -"jest-watcher@^28.1.3": - "integrity" "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==" - "resolved" "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/test-result" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/node" "*" - "ansi-escapes" "^4.2.1" - "chalk" "^4.0.0" - "emittery" "^0.10.2" - "jest-util" "^28.1.3" - "string-length" "^4.0.1" - -"jest-worker@^27.4.5": - "integrity" "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==" - "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" - "version" "27.5.1" - dependencies: - "@types/node" "*" - "merge-stream" "^2.0.0" - "supports-color" "^8.0.0" - -"jest-worker@^28.1.3": - "integrity" "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==" - "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@types/node" "*" - "merge-stream" "^2.0.0" - "supports-color" "^8.0.0" - -"js-base64@^3.7.2": - "integrity" "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" - "resolved" "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz" - "version" "3.7.2" - -"js-sdsl@^4.1.4": - "integrity" "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==" - "resolved" "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz" - "version" "4.1.5" - -"js-sha3@^0.5.7": - "integrity" "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" - "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" - "version" "0.5.7" - -"js-sha3@^0.8.0", "js-sha3@0.8.0": - "integrity" "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" - "version" "0.8.0" - -"js-sha3@0.5.7": - "integrity" "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" - "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz" - "version" "0.5.7" - -"js-tokens@^3.0.0 || ^4.0.0", "js-tokens@^4.0.0": - "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - "version" "4.0.0" - -"js-yaml@^3.10.0": - "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - "version" "3.14.1" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"js-yaml@^3.13.1": - "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - "version" "3.14.1" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"js-yaml@^4.1.0", "js-yaml@4.1.0": - "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "argparse" "^2.0.1" - -"js-yaml@3.13.1": - "integrity" "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" - "version" "3.13.1" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"js-yaml@3.x": - "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - "version" "3.14.1" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"jsbn@~0.1.0": - "integrity" "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - "version" "0.1.1" - -"jsesc@^2.5.1": - "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - "version" "2.5.2" - -"json-buffer@3.0.0": - "integrity" "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" - "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" - "version" "3.0.0" - -"json-buffer@3.0.1": - "integrity" "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - "version" "3.0.1" - -"json-parse-better-errors@^1.0.1": - "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" - "version" "1.0.2" - -"json-parse-even-better-errors@^2.3.0", "json-parse-even-better-errors@^2.3.1": - "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - "version" "2.3.1" - -"json-rpc-engine@^5.3.0": - "integrity" "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==" - "resolved" "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz" - "version" "5.4.0" - dependencies: - "eth-rpc-errors" "^3.0.0" - "safe-event-emitter" "^1.0.1" - -"json-rpc-engine@^6.1.0": - "integrity" "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==" - "resolved" "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "@metamask/safe-event-emitter" "^2.0.0" - "eth-rpc-errors" "^4.0.2" - -"json-rpc-random-id@^1.0.0", "json-rpc-random-id@^1.0.1": - "integrity" "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" - "resolved" "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz" - "version" "1.0.1" - -"json-schema-traverse@^0.4.1": - "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - "version" "0.4.1" - -"json-schema@0.4.0": - "integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" - "version" "0.4.0" - -"json-stable-stringify-without-jsonify@^1.0.1": - "integrity" "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - "version" "1.0.1" - -"json-stable-stringify@^1.0.1": - "integrity" "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==" - "resolved" "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "jsonify" "^0.0.1" - -"json-stringify-nice@^1.1.4": - "integrity" "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==" - "resolved" "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz" - "version" "1.1.4" - -"json-stringify-safe@^5.0.1", "json-stringify-safe@~5.0.1": - "integrity" "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - "resolved" "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - "version" "5.0.1" - -"json5@^1.0.1": - "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" - "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "minimist" "^1.2.0" - -"json5@^2.2.1": - "integrity" "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" - "version" "2.2.1" - -"jsonc-parser@3.2.0": - "integrity" "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" - "resolved" "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" - "version" "3.2.0" - -"jsonfile@^2.1.0": - "integrity" "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==" - "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz" - "version" "2.4.0" - optionalDependencies: - "graceful-fs" "^4.1.6" - -"jsonfile@^4.0.0": - "integrity" "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==" - "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" - "version" "4.0.0" - optionalDependencies: - "graceful-fs" "^4.1.6" - -"jsonfile@^6.0.1": - "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==" - "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "universalify" "^2.0.0" - optionalDependencies: - "graceful-fs" "^4.1.6" - -"jsonify@^0.0.1": - "integrity" "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==" - "resolved" "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz" - "version" "0.0.1" - -"jsonparse@^1.2.0", "jsonparse@^1.3.1": - "integrity" "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" - "resolved" "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" - "version" "1.3.1" - -"jsonschema@^1.2.4", "jsonschema@^1.4.1": - "integrity" "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==" - "resolved" "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz" - "version" "1.4.1" - -"JSONStream@^1.0.4", "JSONStream@^1.3.5": - "integrity" "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==" - "resolved" "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" - "version" "1.3.5" - dependencies: - "jsonparse" "^1.2.0" - "through" ">=2.2.7 <3" - -"jsonwebtoken@^8.5.1": - "integrity" "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==" - "resolved" "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz" - "version" "8.5.1" - dependencies: - "jws" "^3.2.2" - "lodash.includes" "^4.3.0" - "lodash.isboolean" "^3.0.3" - "lodash.isinteger" "^4.0.4" - "lodash.isnumber" "^3.0.3" - "lodash.isplainobject" "^4.0.6" - "lodash.isstring" "^4.0.1" - "lodash.once" "^4.0.0" - "ms" "^2.1.1" - "semver" "^5.6.0" - -"jsprim@^1.2.2": - "integrity" "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==" - "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" - "version" "1.4.2" - dependencies: - "assert-plus" "1.0.0" - "extsprintf" "1.3.0" - "json-schema" "0.4.0" - "verror" "1.10.0" - -"just-diff-apply@^5.2.0": - "integrity" "sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g==" - "resolved" "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.4.1.tgz" - "version" "5.4.1" - -"just-diff@^5.0.1": - "integrity" "sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ==" - "resolved" "https://registry.npmjs.org/just-diff/-/just-diff-5.1.1.tgz" - "version" "5.1.1" - -"jwa@^1.4.1": - "integrity" "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==" - "resolved" "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "buffer-equal-constant-time" "1.0.1" - "ecdsa-sig-formatter" "1.0.11" - "safe-buffer" "^5.0.1" - -"jws@^3.2.2": - "integrity" "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==" - "resolved" "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" - "version" "3.2.2" - dependencies: - "jwa" "^1.4.1" - "safe-buffer" "^5.0.1" - -"jwt-decode@^3.1.2": - "integrity" "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" - "resolved" "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz" - "version" "3.1.2" - -"keccak@^3.0.0", "keccak@^3.0.2", "keccak@3.0.2": - "integrity" "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==" - "resolved" "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "node-addon-api" "^2.0.0" - "node-gyp-build" "^4.2.0" - "readable-stream" "^3.6.0" - -"keyv@*", "keyv@^4.0.0": - "integrity" "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==" - "resolved" "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz" - "version" "4.5.2" - dependencies: - "json-buffer" "3.0.1" - -"keyv@^3.0.0": - "integrity" "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==" - "resolved" "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "json-buffer" "3.0.0" - -"keyvaluestorage-interface@^1.0.0": - "integrity" "sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==" - "resolved" "https://registry.npmjs.org/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz" - "version" "1.0.0" - -"kind-of@^6.0.2", "kind-of@^6.0.3": - "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - "version" "6.0.3" - -"klaw@^1.0.0": - "integrity" "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==" - "resolved" "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz" - "version" "1.3.1" - optionalDependencies: - "graceful-fs" "^4.1.9" - -"kleur@^3.0.3": - "integrity" "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - "resolved" "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" - "version" "3.0.3" - -"lcid@^2.0.0": - "integrity" "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==" - "resolved" "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "invert-kv" "^2.0.0" - -"lerna@^5.5.4": - "integrity" "sha512-Y0yMPslvnBnTZi7Nrs/gDyYZYauNf61xWNCehISHIORxZmmpoluNkcWTfcyb47is5uJQCv5QJX5xKKubbs+a6w==" - "resolved" "https://registry.npmjs.org/lerna/-/lerna-5.6.2.tgz" - "version" "5.6.2" - dependencies: - "@lerna/add" "5.6.2" - "@lerna/bootstrap" "5.6.2" - "@lerna/changed" "5.6.2" - "@lerna/clean" "5.6.2" - "@lerna/cli" "5.6.2" - "@lerna/command" "5.6.2" - "@lerna/create" "5.6.2" - "@lerna/diff" "5.6.2" - "@lerna/exec" "5.6.2" - "@lerna/import" "5.6.2" - "@lerna/info" "5.6.2" - "@lerna/init" "5.6.2" - "@lerna/link" "5.6.2" - "@lerna/list" "5.6.2" - "@lerna/publish" "5.6.2" - "@lerna/run" "5.6.2" - "@lerna/version" "5.6.2" - "@nrwl/devkit" ">=14.8.1 < 16" - "import-local" "^3.0.2" - "inquirer" "^8.2.4" - "npmlog" "^6.0.2" - "nx" ">=14.8.1 < 16" - "typescript" "^3 || ^4" - -"level-codec@~7.0.0": - "integrity" "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" - "resolved" "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz" - "version" "7.0.1" - -"level-concat-iterator@^3.0.0": - "integrity" "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==" - "resolved" "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "catering" "^2.1.0" - -"level-errors@^1.0.3": - "integrity" "sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==" - "resolved" "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "errno" "~0.1.1" - -"level-errors@~1.0.3": - "integrity" "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==" - "resolved" "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "errno" "~0.1.1" - -"level-iterator-stream@~1.3.0": - "integrity" "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==" - "resolved" "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "inherits" "^2.0.1" - "level-errors" "^1.0.3" - "readable-stream" "^1.0.33" - "xtend" "^4.0.0" - -"level-supports@^2.0.1": - "integrity" "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==" - "resolved" "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz" - "version" "2.1.0" - -"level-supports@^4.0.0": - "integrity" "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==" - "resolved" "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz" - "version" "4.0.1" - -"level-transcoder@^1.0.1": - "integrity" "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==" - "resolved" "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "buffer" "^6.0.3" - "module-error" "^1.0.1" - -"level-ws@0.0.0": - "integrity" "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==" - "resolved" "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz" - "version" "0.0.0" - dependencies: - "readable-stream" "~1.0.15" - "xtend" "~2.1.1" - -"level@^8.0.0": - "integrity" "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==" - "resolved" "https://registry.npmjs.org/level/-/level-8.0.0.tgz" - "version" "8.0.0" - dependencies: - "browser-level" "^1.0.1" - "classic-level" "^1.2.0" - -"leveldown@6.1.0": - "integrity" "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==" - "resolved" "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "abstract-leveldown" "^7.2.0" - "napi-macros" "~2.0.0" - "node-gyp-build" "^4.3.0" - -"levelup@^1.2.1": - "integrity" "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==" - "resolved" "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz" - "version" "1.3.9" - dependencies: - "deferred-leveldown" "~1.2.1" - "level-codec" "~7.0.0" - "level-errors" "~1.0.3" - "level-iterator-stream" "~1.3.0" - "prr" "~1.0.1" - "semver" "~5.4.1" - "xtend" "~4.0.0" - -"leven@^3.1.0": - "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" - "version" "3.1.0" - -"levn@^0.4.1": - "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" - "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "prelude-ls" "^1.2.1" - "type-check" "~0.4.0" - -"levn@~0.3.0": - "integrity" "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==" - "resolved" "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" - "version" "0.3.0" - dependencies: - "prelude-ls" "~1.1.2" - "type-check" "~0.3.2" - -"libnpmaccess@^6.0.3": - "integrity" "sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag==" - "resolved" "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.4.tgz" - "version" "6.0.4" - dependencies: - "aproba" "^2.0.0" - "minipass" "^3.1.1" - "npm-package-arg" "^9.0.1" - "npm-registry-fetch" "^13.0.0" - -"libnpmpublish@^6.0.4": - "integrity" "sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg==" - "resolved" "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.5.tgz" - "version" "6.0.5" - dependencies: - "normalize-package-data" "^4.0.0" - "npm-package-arg" "^9.0.1" - "npm-registry-fetch" "^13.0.0" - "semver" "^7.3.7" - "ssri" "^9.0.0" - -"lilconfig@2.0.5": - "integrity" "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==" - "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz" - "version" "2.0.5" - -"lines-and-columns@^1.1.6": - "integrity" "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - "version" "1.2.4" - -"lint-staged@^12.3.7": - "integrity" "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==" - "resolved" "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz" - "version" "12.5.0" - dependencies: - "cli-truncate" "^3.1.0" - "colorette" "^2.0.16" - "commander" "^9.3.0" - "debug" "^4.3.4" - "execa" "^5.1.1" - "lilconfig" "2.0.5" - "listr2" "^4.0.5" - "micromatch" "^4.0.5" - "normalize-path" "^3.0.0" - "object-inspect" "^1.12.2" - "pidtree" "^0.5.0" - "string-argv" "^0.3.1" - "supports-color" "^9.2.2" - "yaml" "^1.10.2" - -"listr2@^4.0.5": - "integrity" "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==" - "resolved" "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz" - "version" "4.0.5" - dependencies: - "cli-truncate" "^2.1.0" - "colorette" "^2.0.16" - "log-update" "^4.0.0" - "p-map" "^4.0.0" - "rfdc" "^1.3.0" - "rxjs" "^7.5.5" - "through" "^2.3.8" - "wrap-ansi" "^7.0.0" - -"load-json-file@^4.0.0": - "integrity" "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==" - "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "graceful-fs" "^4.1.2" - "parse-json" "^4.0.0" - "pify" "^3.0.0" - "strip-bom" "^3.0.0" - -"load-json-file@^6.2.0": - "integrity" "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==" - "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz" - "version" "6.2.0" - dependencies: - "graceful-fs" "^4.1.15" - "parse-json" "^5.0.0" - "strip-bom" "^4.0.0" - "type-fest" "^0.6.0" - -"loader-runner@^4.2.0": - "integrity" "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" - "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" - "version" "4.3.0" - -"locate-path@^2.0.0": - "integrity" "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "p-locate" "^2.0.0" - "path-exists" "^3.0.0" - -"locate-path@^3.0.0": - "integrity" "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "p-locate" "^3.0.0" - "path-exists" "^3.0.0" - -"locate-path@^5.0.0": - "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "p-locate" "^4.1.0" - -"locate-path@^6.0.0": - "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "p-locate" "^5.0.0" - -"lodash.camelcase@^4.3.0": - "integrity" "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - "resolved" "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" - "version" "4.3.0" - -"lodash.clonedeep@^4.5.0": - "integrity" "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" - "resolved" "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" - "version" "4.5.0" - -"lodash.debounce@^4.0.8": - "integrity" "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" - "version" "4.0.8" - -"lodash.includes@^4.3.0": - "integrity" "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - "resolved" "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" - "version" "4.3.0" - -"lodash.isboolean@^3.0.3": - "integrity" "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - "resolved" "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" - "version" "3.0.3" - -"lodash.isinteger@^4.0.4": - "integrity" "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - "resolved" "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" - "version" "4.0.4" - -"lodash.ismatch@^4.4.0": - "integrity" "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==" - "resolved" "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" - "version" "4.4.0" - -"lodash.isnumber@^3.0.3": - "integrity" "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - "resolved" "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" - "version" "3.0.3" - -"lodash.isplainobject@^4.0.6": - "integrity" "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - "resolved" "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - "version" "4.0.6" - -"lodash.isstring@^4.0.1": - "integrity" "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - "resolved" "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" - "version" "4.0.1" - -"lodash.merge@^4.6.2": - "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - "version" "4.6.2" - -"lodash.once@^4.0.0": - "integrity" "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - "resolved" "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" - "version" "4.1.1" - -"lodash@^4.17.11", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.19", "lodash@^4.17.20", "lodash@^4.17.21": - "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - "version" "4.17.21" - -"log-symbols@^4.1.0", "log-symbols@4.1.0": - "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" - "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "chalk" "^4.1.0" - "is-unicode-supported" "^0.1.0" - -"log-symbols@3.0.0": - "integrity" "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==" - "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "chalk" "^2.4.2" - -"log-update@^4.0.0": - "integrity" "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==" - "resolved" "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-escapes" "^4.3.0" - "cli-cursor" "^3.1.0" - "slice-ansi" "^4.0.0" - "wrap-ansi" "^6.2.0" - -"loglevel@^1.8.0", "loglevel@^1.8.1": - "integrity" "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==" - "resolved" "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz" - "version" "1.8.1" - -"long@^4.0.0": - "integrity" "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - "resolved" "https://registry.npmjs.org/long/-/long-4.0.0.tgz" - "version" "4.0.0" - -"loose-envify@^1.1.0", "loose-envify@^1.4.0": - "integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==" - "resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "js-tokens" "^3.0.0 || ^4.0.0" - -"loupe@^2.3.1": - "integrity" "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==" - "resolved" "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz" - "version" "2.3.6" - dependencies: - "get-func-name" "^2.0.0" - -"lowercase-keys@^1.0.0", "lowercase-keys@^1.0.1": - "integrity" "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" - "version" "1.0.1" - -"lowercase-keys@^2.0.0": - "integrity" "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" - "version" "2.0.0" - -"lowercase-keys@^3.0.0": - "integrity" "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==" - "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" - "version" "3.0.0" - -"lru_map@^0.3.3": - "integrity" "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" - "resolved" "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" - "version" "0.3.3" - -"lru-cache@^5.1.1": - "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "yallist" "^3.0.2" - -"lru-cache@^6.0.0": - "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "yallist" "^4.0.0" - -"lru-cache@^7.4.4": - "integrity" "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz" - "version" "7.14.1" - -"lru-cache@^7.5.1": - "integrity" "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz" - "version" "7.14.1" - -"lru-cache@^7.7.1": - "integrity" "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz" - "version" "7.14.1" - -"ltgt@~2.2.0": - "integrity" "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" - "resolved" "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz" - "version" "2.2.1" - -"make-dir@^2.1.0": - "integrity" "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "pify" "^4.0.1" - "semver" "^5.6.0" - -"make-dir@^3.0.0": - "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "semver" "^6.0.0" - -"make-error@^1.1.1": - "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - "version" "1.3.6" - -"make-fetch-happen@^10.0.3", "make-fetch-happen@^10.0.6": - "integrity" "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==" - "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" - "version" "10.2.1" - dependencies: - "agentkeepalive" "^4.2.1" - "cacache" "^16.1.0" - "http-cache-semantics" "^4.1.0" - "http-proxy-agent" "^5.0.0" - "https-proxy-agent" "^5.0.0" - "is-lambda" "^1.0.1" - "lru-cache" "^7.7.1" - "minipass" "^3.1.6" - "minipass-collect" "^1.0.2" - "minipass-fetch" "^2.0.3" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.4" - "negotiator" "^0.6.3" - "promise-retry" "^2.0.1" - "socks-proxy-agent" "^7.0.0" - "ssri" "^9.0.0" - -"makeerror@1.0.12": - "integrity" "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==" - "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" - "version" "1.0.12" - dependencies: - "tmpl" "1.0.5" - -"map-age-cleaner@^0.1.1": - "integrity" "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==" - "resolved" "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" - "version" "0.1.3" - dependencies: - "p-defer" "^1.0.0" - -"map-obj@^1.0.0": - "integrity" "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" - "resolved" "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" - "version" "1.0.1" - -"map-obj@^4.0.0": - "integrity" "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" - "resolved" "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" - "version" "4.3.0" - -"markdown-table@^1.1.3": - "integrity" "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==" - "resolved" "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz" - "version" "1.1.3" - -"match-all@^1.2.6": - "integrity" "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==" - "resolved" "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz" - "version" "1.2.6" - -"mcl-wasm@^0.7.1": - "integrity" "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==" - "resolved" "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz" - "version" "0.7.9" - -"md5.js@^1.3.4": - "integrity" "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==" - "resolved" "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" - "version" "1.3.5" - dependencies: - "hash-base" "^3.0.0" - "inherits" "^2.0.1" - "safe-buffer" "^5.1.2" - -"media-typer@0.3.0": - "integrity" "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - "version" "0.3.0" - -"mem@^4.0.0": - "integrity" "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==" - "resolved" "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "map-age-cleaner" "^0.1.1" - "mimic-fn" "^2.0.0" - "p-is-promise" "^2.0.0" - -"memdown@^1.0.0": - "integrity" "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==" - "resolved" "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "abstract-leveldown" "~2.7.1" - "functional-red-black-tree" "^1.0.1" - "immediate" "^3.2.3" - "inherits" "~2.0.1" - "ltgt" "~2.2.0" - "safe-buffer" "~5.1.1" - -"memory-level@^1.0.0": - "integrity" "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==" - "resolved" "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "abstract-level" "^1.0.0" - "functional-red-black-tree" "^1.0.1" - "module-error" "^1.0.1" - -"memorystream@^0.3.1": - "integrity" "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==" - "resolved" "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" - "version" "0.3.1" - -"meow@^8.0.0": - "integrity" "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==" - "resolved" "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" - "version" "8.1.2" - dependencies: - "@types/minimist" "^1.2.0" - "camelcase-keys" "^6.2.2" - "decamelize-keys" "^1.1.0" - "hard-rejection" "^2.1.0" - "minimist-options" "4.1.0" - "normalize-package-data" "^3.0.0" - "read-pkg-up" "^7.0.1" - "redent" "^3.0.0" - "trim-newlines" "^3.0.0" - "type-fest" "^0.18.0" - "yargs-parser" "^20.2.3" - -"merge-descriptors@1.0.1": - "integrity" "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - "version" "1.0.1" - -"merge-stream@^2.0.0": - "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - "version" "2.0.0" - -"merge2@^1.2.3", "merge2@^1.3.0", "merge2@^1.4.1": - "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - "version" "1.4.1" - -"merkle-patricia-tree@^2.1.2", "merkle-patricia-tree@^2.3.2": - "integrity" "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==" - "resolved" "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz" - "version" "2.3.2" - dependencies: - "async" "^1.4.2" - "ethereumjs-util" "^5.0.0" - "level-ws" "0.0.0" - "levelup" "^1.2.1" - "memdown" "^1.0.0" - "readable-stream" "^2.0.0" - "rlp" "^2.0.0" - "semaphore" ">=1.0.1" - -"messaging-sdk@^0.0.3": - "integrity" "sha512-S8vBTNunvuKJRvytjhJx9m66sm+XW3rfRW/IvpcBicTrH1ikvpOpm+/OdT/VUzZQ+JeLzh705h3aJXM6OyLPSA==" - "resolved" "https://registry.npmjs.org/messaging-sdk/-/messaging-sdk-0.0.3.tgz" - "version" "0.0.3" - dependencies: - "@types/amqplib" "^0.8.2" - "@types/jsonwebtoken" "^8.5.8" - "@types/ws" "^8.5.3" - "amqplib" "^0.9.0" - "cent.js" "^2.0.2" - "centrifuge" "^2.8.4" - "jsonwebtoken" "^8.5.1" - "ws" "^8.8.0" - -"methods@~1.1.2": - "integrity" "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - "version" "1.1.2" - -"micromatch@^4.0.4", "micromatch@^4.0.5": - "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - "version" "4.0.5" - dependencies: - "braces" "^3.0.2" - "picomatch" "^2.3.1" - -"miller-rabin@^4.0.0": - "integrity" "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==" - "resolved" "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "bn.js" "^4.0.0" - "brorand" "^1.0.1" - -"mime-db@1.52.0": - "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - "version" "1.52.0" - -"mime-types@^2.1.12", "mime-types@^2.1.16", "mime-types@^2.1.27", "mime-types@~2.1.19", "mime-types@~2.1.24", "mime-types@~2.1.34": - "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" - "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - "version" "2.1.35" - dependencies: - "mime-db" "1.52.0" - -"mime@1.6.0": - "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - "version" "1.6.0" - -"mimic-fn@^2.0.0": - "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - "version" "2.1.0" - -"mimic-fn@^2.1.0": - "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - "version" "2.1.0" - -"mimic-response@^1.0.0", "mimic-response@^1.0.1": - "integrity" "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - "version" "1.0.1" - -"mimic-response@^3.1.0": - "integrity" "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" - "version" "3.1.0" - -"min-document@^2.19.0": - "integrity" "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==" - "resolved" "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" - "version" "2.19.0" - dependencies: - "dom-walk" "^0.1.0" - -"min-indent@^1.0.0": - "integrity" "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" - "resolved" "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" - "version" "1.0.1" - -"minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1": - "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" - "version" "1.0.1" - -"minimalistic-crypto-utils@^1.0.0", "minimalistic-crypto-utils@^1.0.1": - "integrity" "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - "resolved" "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" - "version" "1.0.1" - -"minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2", "minimatch@2 || 3": - "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "brace-expansion" "^1.1.7" - -"minimatch@^5.0.1": - "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "brace-expansion" "^2.0.1" - -"minimatch@3.0.4": - "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "brace-expansion" "^1.1.7" - -"minimatch@3.0.5": - "integrity" "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" - "version" "3.0.5" - dependencies: - "brace-expansion" "^1.1.7" - -"minimatch@4.2.1": - "integrity" "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "brace-expansion" "^1.1.7" - -"minimatch@5.0.1": - "integrity" "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "brace-expansion" "^2.0.1" - -"minimist-options@4.1.0": - "integrity" "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==" - "resolved" "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "arrify" "^1.0.1" - "is-plain-obj" "^1.1.0" - "kind-of" "^6.0.3" - -"minimist@^1.2.0", "minimist@^1.2.5", "minimist@^1.2.6": - "integrity" "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" - "version" "1.2.7" - -"minipass-collect@^1.0.2": - "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" - "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "minipass" "^3.0.0" - -"minipass-fetch@^2.0.3": - "integrity" "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==" - "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "minipass" "^3.1.6" - "minipass-sized" "^1.0.3" - "minizlib" "^2.1.2" - optionalDependencies: - "encoding" "^0.1.13" - -"minipass-flush@^1.0.5": - "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" - "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "minipass" "^3.0.0" - -"minipass-json-stream@^1.0.1": - "integrity" "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==" - "resolved" "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "jsonparse" "^1.3.1" - "minipass" "^3.0.0" - -"minipass-pipeline@^1.2.4": - "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" - "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - "version" "1.2.4" - dependencies: - "minipass" "^3.0.0" - -"minipass-sized@^1.0.3": - "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" - "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "minipass" "^3.0.0" - -"minipass@^2.6.0", "minipass@^2.9.0": - "integrity" "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==" - "resolved" "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" - "version" "2.9.0" - dependencies: - "safe-buffer" "^5.1.2" - "yallist" "^3.0.0" - -"minipass@^3.0.0", "minipass@^3.1.1", "minipass@^3.1.6": - "integrity" "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==" - "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" - "version" "3.3.4" - dependencies: - "yallist" "^4.0.0" - -"minizlib@^1.3.3": - "integrity" "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==" - "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" - "version" "1.3.3" - dependencies: - "minipass" "^2.9.0" - -"minizlib@^2.1.1", "minizlib@^2.1.2": - "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" - "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "minipass" "^3.0.0" - "yallist" "^4.0.0" - -"mkdirp-infer-owner@^2.0.0": - "integrity" "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==" - "resolved" "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "chownr" "^2.0.0" - "infer-owner" "^1.0.4" - "mkdirp" "^1.0.3" - -"mkdirp-promise@^5.0.1": - "integrity" "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==" - "resolved" "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "mkdirp" "*" - -"mkdirp@*", "mkdirp@^1.0.3", "mkdirp@^1.0.4": - "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - "version" "1.0.4" - -"mkdirp@^0.5.1": - "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - "version" "0.5.6" - dependencies: - "minimist" "^1.2.6" - -"mkdirp@^0.5.3": - "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - "version" "0.5.6" - dependencies: - "minimist" "^1.2.6" - -"mkdirp@^0.5.5": - "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - "version" "0.5.6" - dependencies: - "minimist" "^1.2.6" - -"mkdirp@0.5.5": - "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - "version" "0.5.5" - dependencies: - "minimist" "^1.2.5" - -"mkdirp@0.5.x": - "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - "version" "0.5.6" - dependencies: - "minimist" "^1.2.6" - -"mnemonist@^0.38.0": - "integrity" "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==" - "resolved" "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz" - "version" "0.38.5" - dependencies: - "obliterator" "^2.0.0" - -"mocha@^10.0.0": - "integrity" "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==" - "resolved" "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz" - "version" "10.1.0" - dependencies: - "ansi-colors" "4.1.1" - "browser-stdout" "1.3.1" - "chokidar" "3.5.3" - "debug" "4.3.4" - "diff" "5.0.0" - "escape-string-regexp" "4.0.0" - "find-up" "5.0.0" - "glob" "7.2.0" - "he" "1.2.0" - "js-yaml" "4.1.0" - "log-symbols" "4.1.0" - "minimatch" "5.0.1" - "ms" "2.1.3" - "nanoid" "3.3.3" - "serialize-javascript" "6.0.0" - "strip-json-comments" "3.1.1" - "supports-color" "8.1.1" - "workerpool" "6.2.1" - "yargs" "16.2.0" - "yargs-parser" "20.2.4" - "yargs-unparser" "2.0.0" - -"mocha@^7.1.1": - "integrity" "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==" - "resolved" "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "ansi-colors" "3.2.3" - "browser-stdout" "1.3.1" - "chokidar" "3.3.0" - "debug" "3.2.6" - "diff" "3.5.0" - "escape-string-regexp" "1.0.5" - "find-up" "3.0.0" - "glob" "7.1.3" - "growl" "1.10.5" - "he" "1.2.0" - "js-yaml" "3.13.1" - "log-symbols" "3.0.0" - "minimatch" "3.0.4" - "mkdirp" "0.5.5" - "ms" "2.1.1" - "node-environment-flags" "1.0.6" - "object.assign" "4.1.0" - "strip-json-comments" "2.0.1" - "supports-color" "6.0.0" - "which" "1.3.1" - "wide-align" "1.1.3" - "yargs" "13.3.2" - "yargs-parser" "13.1.2" - "yargs-unparser" "1.6.0" - -"mocha@^9.2.2": - "integrity" "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==" - "resolved" "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz" - "version" "9.2.2" - dependencies: - "@ungap/promise-all-settled" "1.1.2" - "ansi-colors" "4.1.1" - "browser-stdout" "1.3.1" - "chokidar" "3.5.3" - "debug" "4.3.3" - "diff" "5.0.0" - "escape-string-regexp" "4.0.0" - "find-up" "5.0.0" - "glob" "7.2.0" - "growl" "1.10.5" - "he" "1.2.0" - "js-yaml" "4.1.0" - "log-symbols" "4.1.0" - "minimatch" "4.2.1" - "ms" "2.1.3" - "nanoid" "3.3.1" - "serialize-javascript" "6.0.0" - "strip-json-comments" "3.1.1" - "supports-color" "8.1.1" - "which" "2.0.2" - "workerpool" "6.2.0" - "yargs" "16.2.0" - "yargs-parser" "20.2.4" - "yargs-unparser" "2.0.0" - -"mock-fs@^4.1.0": - "integrity" "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" - "resolved" "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz" - "version" "4.14.0" - -"modify-values@^1.0.0": - "integrity" "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==" - "resolved" "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" - "version" "1.0.1" - -"module-error@^1.0.1", "module-error@^1.0.2": - "integrity" "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==" - "resolved" "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz" - "version" "1.0.2" - -"ms@^2.0.0", "ms@^2.1.1", "ms@2.1.3": - "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - "version" "2.1.3" - -"ms@2.0.0": - "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - "version" "2.0.0" - -"ms@2.1.1": - "integrity" "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" - "version" "2.1.1" - -"ms@2.1.2": - "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - "version" "2.1.2" - -"multibase@^0.7.0": - "integrity" "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==" - "resolved" "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz" - "version" "0.7.0" - dependencies: - "base-x" "^3.0.8" - "buffer" "^5.5.0" - -"multibase@~0.6.0": - "integrity" "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==" - "resolved" "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz" - "version" "0.6.1" - dependencies: - "base-x" "^3.0.8" - "buffer" "^5.5.0" - -"multicodec@^0.5.5": - "integrity" "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==" - "resolved" "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz" - "version" "0.5.7" - dependencies: - "varint" "^5.0.0" - -"multicodec@^1.0.0": - "integrity" "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==" - "resolved" "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "buffer" "^5.6.0" - "varint" "^5.0.0" - -"multihashes@^0.4.15", "multihashes@~0.4.15": - "integrity" "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==" - "resolved" "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz" - "version" "0.4.21" - dependencies: - "buffer" "^5.5.0" - "multibase" "^0.7.0" - "varint" "^5.0.0" - -"multimatch@^5.0.0": - "integrity" "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==" - "resolved" "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "@types/minimatch" "^3.0.3" - "array-differ" "^3.0.0" - "array-union" "^2.1.0" - "arrify" "^2.0.1" - "minimatch" "^3.0.4" - -"murmur-128@^0.2.1": - "integrity" "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==" - "resolved" "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz" - "version" "0.2.1" - dependencies: - "encode-utf8" "^1.0.2" - "fmix" "^0.1.0" - "imul" "^1.0.0" - -"mute-stream@~0.0.4", "mute-stream@0.0.8": - "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - "version" "0.0.8" - -"nan@^2.14.0", "nan@^2.14.2": - "integrity" "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" - "resolved" "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz" - "version" "2.17.0" - -"nano-json-stream-parser@^0.1.2": - "integrity" "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" - "resolved" "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz" - "version" "0.1.2" - -"nanoid@3.3.1": - "integrity" "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" - "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" - "version" "3.3.1" - -"nanoid@3.3.3": - "integrity" "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" - "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" - "version" "3.3.3" - -"napi-macros@~2.0.0": - "integrity" "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" - "resolved" "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz" - "version" "2.0.0" - -"natural-compare-lite@^1.4.0": - "integrity" "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" - "resolved" "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" - "version" "1.4.0" - -"natural-compare@^1.4.0": - "integrity" "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - "version" "1.4.0" - -"negotiator@^0.6.3", "negotiator@0.6.3": - "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - "version" "0.6.3" - -"neo-async@^2.6.0", "neo-async@^2.6.2": - "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" - "version" "2.6.2" - -"next-tick@^1.1.0": - "integrity" "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - "resolved" "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" - "version" "1.1.0" - -"nice-try@^1.0.4": - "integrity" "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - "resolved" "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" - "version" "1.0.5" - -"nock@^13.2.9": - "integrity" "sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA==" - "resolved" "https://registry.npmjs.org/nock/-/nock-13.2.9.tgz" - "version" "13.2.9" - dependencies: - "debug" "^4.1.0" - "json-stringify-safe" "^5.0.1" - "lodash" "^4.17.21" - "propagate" "^2.0.0" - -"node-addon-api@^2.0.0": - "integrity" "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" - "version" "2.0.2" - -"node-addon-api@^3.2.1": - "integrity" "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" - "version" "3.2.1" - -"node-emoji@^1.10.0": - "integrity" "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==" - "resolved" "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" - "version" "1.11.0" - dependencies: - "lodash" "^4.17.21" - -"node-environment-flags@1.0.6": - "integrity" "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==" - "resolved" "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "object.getownpropertydescriptors" "^2.0.3" - "semver" "^5.7.0" - -"node-fetch@^2.6.0", "node-fetch@^2.6.1", "node-fetch@^2.6.6", "node-fetch@^2.6.7", "node-fetch@2", "node-fetch@2.6.7": - "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" - "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - "version" "2.6.7" - dependencies: - "whatwg-url" "^5.0.0" - -"node-gyp-build@^4.2.0", "node-gyp-build@^4.3.0": - "integrity" "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz" - "version" "4.5.0" - -"node-gyp-build@4.4.0": - "integrity" "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" - "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz" - "version" "4.4.0" - -"node-gyp@^9.0.0", "node-gyp@^9.1.0": - "integrity" "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==" - "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz" - "version" "9.3.0" - dependencies: - "env-paths" "^2.2.0" - "glob" "^7.1.4" - "graceful-fs" "^4.2.6" - "make-fetch-happen" "^10.0.3" - "nopt" "^6.0.0" - "npmlog" "^6.0.0" - "rimraf" "^3.0.2" - "semver" "^7.3.5" - "tar" "^6.1.2" - "which" "^2.0.2" - -"node-int64@^0.4.0": - "integrity" "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - "version" "0.4.0" - -"node-releases@^2.0.6": - "integrity" "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" - "version" "2.0.6" - -"nofilter@^1.0.4": - "integrity" "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==" - "resolved" "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz" - "version" "1.0.4" - -"nopt@^5.0.0": - "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" - "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "abbrev" "1" - -"nopt@^6.0.0": - "integrity" "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==" - "resolved" "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "abbrev" "^1.0.0" - -"nopt@3.x": - "integrity" "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==" - "resolved" "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" - "version" "3.0.6" - dependencies: - "abbrev" "1" - -"normalize-package-data@^2.3.2": - "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "hosted-git-info" "^2.1.4" - "resolve" "^1.10.0" - "semver" "2 || 3 || 4 || 5" - "validate-npm-package-license" "^3.0.1" - -"normalize-package-data@^2.5.0": - "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "hosted-git-info" "^2.1.4" - "resolve" "^1.10.0" - "semver" "2 || 3 || 4 || 5" - "validate-npm-package-license" "^3.0.1" - -"normalize-package-data@^3.0.0": - "integrity" "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "hosted-git-info" "^4.0.1" - "is-core-module" "^2.5.0" - "semver" "^7.3.4" - "validate-npm-package-license" "^3.0.1" - -"normalize-package-data@^4.0.0": - "integrity" "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "hosted-git-info" "^5.0.0" - "is-core-module" "^2.8.1" - "semver" "^7.3.5" - "validate-npm-package-license" "^3.0.4" - -"normalize-path@^3.0.0", "normalize-path@~3.0.0": - "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - "version" "3.0.0" - -"normalize-url@^4.1.0": - "integrity" "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" - "version" "4.5.1" - -"normalize-url@^6.0.1": - "integrity" "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" - "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" - "version" "6.1.0" - -"npm-bundled@^1.1.1": - "integrity" "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==" - "resolved" "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "npm-normalize-package-bin" "^1.0.1" - -"npm-bundled@^2.0.0": - "integrity" "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==" - "resolved" "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "npm-normalize-package-bin" "^2.0.0" - -"npm-install-checks@^5.0.0": - "integrity" "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==" - "resolved" "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "semver" "^7.1.1" - -"npm-normalize-package-bin@^1.0.1": - "integrity" "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - "resolved" "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" - "version" "1.0.1" - -"npm-normalize-package-bin@^2.0.0": - "integrity" "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==" - "resolved" "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz" - "version" "2.0.0" - -"npm-package-arg@^9.0.0": - "integrity" "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==" - "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz" - "version" "9.1.2" - dependencies: - "hosted-git-info" "^5.0.0" - "proc-log" "^2.0.1" - "semver" "^7.3.5" - "validate-npm-package-name" "^4.0.0" - -"npm-package-arg@^9.0.1": - "integrity" "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==" - "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz" - "version" "9.1.2" - dependencies: - "hosted-git-info" "^5.0.0" - "proc-log" "^2.0.1" - "semver" "^7.3.5" - "validate-npm-package-name" "^4.0.0" - -"npm-package-arg@8.1.1": - "integrity" "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==" - "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz" - "version" "8.1.1" - dependencies: - "hosted-git-info" "^3.0.6" - "semver" "^7.0.0" - "validate-npm-package-name" "^3.0.0" - -"npm-packlist@^5.1.0", "npm-packlist@^5.1.1": - "integrity" "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==" - "resolved" "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz" - "version" "5.1.3" - dependencies: - "glob" "^8.0.1" - "ignore-walk" "^5.0.1" - "npm-bundled" "^2.0.0" - "npm-normalize-package-bin" "^2.0.0" - -"npm-pick-manifest@^7.0.0": - "integrity" "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==" - "resolved" "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz" - "version" "7.0.2" - dependencies: - "npm-install-checks" "^5.0.0" - "npm-normalize-package-bin" "^2.0.0" - "npm-package-arg" "^9.0.0" - "semver" "^7.3.5" - -"npm-registry-fetch@^13.0.0", "npm-registry-fetch@^13.0.1", "npm-registry-fetch@^13.3.0": - "integrity" "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==" - "resolved" "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz" - "version" "13.3.1" - dependencies: - "make-fetch-happen" "^10.0.6" - "minipass" "^3.1.6" - "minipass-fetch" "^2.0.3" - "minipass-json-stream" "^1.0.1" - "minizlib" "^2.1.2" - "npm-package-arg" "^9.0.1" - "proc-log" "^2.0.0" - -"npm-run-path@^2.0.0": - "integrity" "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "path-key" "^2.0.0" - -"npm-run-path@^4.0.1": - "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "path-key" "^3.0.0" - -"npmlog@^6.0.0", "npmlog@^6.0.2": - "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "are-we-there-yet" "^3.0.0" - "console-control-strings" "^1.1.0" - "gauge" "^4.0.3" - "set-blocking" "^2.0.0" - -"number-to-bn@1.7.0": - "integrity" "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==" - "resolved" "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz" - "version" "1.7.0" - dependencies: - "bn.js" "4.11.6" - "strip-hex-prefix" "1.0.0" - -"nx@^15.0.13", "nx@>= 14 <= 16", "nx@>=14.8.1 < 16", "nx@15.0.13": - "integrity" "sha512-5mJGWz91B9/sxzLjXdD+pmZTel54NeNNxFDis8OhtGDn6eRZ25qWsZNDgzqIDtwKn3c9gThAMHU4XH2OTgWUnA==" - "resolved" "https://registry.npmjs.org/nx/-/nx-15.0.13.tgz" - "version" "15.0.13" - dependencies: - "@nrwl/cli" "15.0.13" - "@nrwl/tao" "15.0.13" - "@parcel/watcher" "2.0.4" - "@yarnpkg/lockfile" "^1.1.0" - "@yarnpkg/parsers" "^3.0.0-rc.18" - "@zkochan/js-yaml" "0.0.6" - "axios" "^1.0.0" - "chalk" "4.1.0" - "chokidar" "^3.5.1" - "cli-cursor" "3.1.0" - "cli-spinners" "2.6.1" - "cliui" "^7.0.2" - "dotenv" "~10.0.0" - "enquirer" "~2.3.6" - "fast-glob" "3.2.7" - "figures" "3.2.0" - "flat" "^5.0.2" - "fs-extra" "^10.1.0" - "glob" "7.1.4" - "ignore" "^5.0.4" - "js-yaml" "4.1.0" - "jsonc-parser" "3.2.0" - "minimatch" "3.0.5" - "npm-run-path" "^4.0.1" - "open" "^8.4.0" - "semver" "7.3.4" - "string-width" "^4.2.3" - "strong-log-transformer" "^2.1.0" - "tar-stream" "~2.2.0" - "tmp" "~0.2.1" - "tsconfig-paths" "^3.9.0" - "tslib" "^2.3.0" - "v8-compile-cache" "2.3.0" - "yargs" "^17.6.2" - "yargs-parser" "21.1.1" - -"oauth-sign@~0.9.0": - "integrity" "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - "resolved" "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" - "version" "0.9.0" - -"object-assign@^4", "object-assign@^4.1.0", "object-assign@^4.1.1": - "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - "version" "4.1.1" - -"object-inspect@^1.12.2", "object-inspect@^1.9.0": - "integrity" "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" - "version" "1.12.2" - -"object-is@^1.0.1": - "integrity" "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==" - "resolved" "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - -"object-keys@^1.0.11", "object-keys@^1.1.1": - "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - "version" "1.1.1" - -"object-keys@~0.4.0": - "integrity" "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" - "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" - "version" "0.4.0" - -"object.assign@^4.1.4": - "integrity" "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==" - "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" - "version" "4.1.4" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "has-symbols" "^1.0.3" - "object-keys" "^1.1.1" - -"object.assign@4.1.0": - "integrity" "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==" - "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "define-properties" "^1.1.2" - "function-bind" "^1.1.1" - "has-symbols" "^1.0.0" - "object-keys" "^1.0.11" - -"object.getownpropertydescriptors@^2.0.3": - "integrity" "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==" - "resolved" "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz" - "version" "2.1.5" - dependencies: - "array.prototype.reduce" "^1.0.5" - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - -"object.values@^1.1.5": - "integrity" "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==" - "resolved" "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" - "version" "1.1.6" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - -"obliterator@^2.0.0": - "integrity" "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" - "resolved" "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" - "version" "2.0.4" - -"oblivious-set@1.1.1": - "integrity" "sha512-Oh+8fK09mgGmAshFdH6hSVco6KZmd1tTwNFWj35OvzdmJTMZtAkbn05zar2iG3v6sDs1JLEtOiBGNb6BHwkb2w==" - "resolved" "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.1.1.tgz" - "version" "1.1.1" - -"oboe@2.1.5": - "integrity" "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==" - "resolved" "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz" - "version" "2.1.5" - dependencies: - "http-https" "^1.0.0" - -"on-finished@2.4.1": - "integrity" "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==" - "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - "version" "2.4.1" - dependencies: - "ee-first" "1.1.1" - -"once@^1.3.0", "once@^1.3.1", "once@^1.4.0", "once@1.x": - "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" - "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "wrappy" "1" - -"onetime@^5.1.0", "onetime@^5.1.2": - "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" - "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "mimic-fn" "^2.1.0" - -"open@^8.4.0": - "integrity" "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==" - "resolved" "https://registry.npmjs.org/open/-/open-8.4.0.tgz" - "version" "8.4.0" - dependencies: - "define-lazy-prop" "^2.0.0" - "is-docker" "^2.1.1" - "is-wsl" "^2.2.0" - -"optionator@^0.8.1": - "integrity" "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" - "version" "0.8.3" - dependencies: - "deep-is" "~0.1.3" - "fast-levenshtein" "~2.0.6" - "levn" "~0.3.0" - "prelude-ls" "~1.1.2" - "type-check" "~0.3.2" - "word-wrap" "~1.2.3" - -"optionator@^0.9.1": - "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - "version" "0.9.1" - dependencies: - "deep-is" "^0.1.3" - "fast-levenshtein" "^2.0.6" - "levn" "^0.4.1" - "prelude-ls" "^1.2.1" - "type-check" "^0.4.0" - "word-wrap" "^1.2.3" - -"ora@^5.4.1": - "integrity" "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==" - "resolved" "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - "version" "5.4.1" - dependencies: - "bl" "^4.1.0" - "chalk" "^4.1.0" - "cli-cursor" "^3.1.0" - "cli-spinners" "^2.5.0" - "is-interactive" "^1.0.0" - "is-unicode-supported" "^0.1.0" - "log-symbols" "^4.1.0" - "strip-ansi" "^6.0.0" - "wcwidth" "^1.0.1" - -"ordinal@^1.0.3": - "integrity" "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==" - "resolved" "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz" - "version" "1.0.3" - -"os-locale@^3.1.0": - "integrity" "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==" - "resolved" "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "execa" "^1.0.0" - "lcid" "^2.0.0" - "mem" "^4.0.0" - -"os-tmpdir@~1.0.2": - "integrity" "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - "version" "1.0.2" - -"p-cancelable@^1.0.0": - "integrity" "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" - "version" "1.1.0" - -"p-cancelable@^2.0.0": - "integrity" "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" - "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" - "version" "2.1.1" - -"p-cancelable@^3.0.0": - "integrity" "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==" - "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" - "version" "3.0.0" - -"p-defer@^1.0.0": - "integrity" "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==" - "resolved" "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" - "version" "1.0.0" - -"p-finally@^1.0.0": - "integrity" "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" - "resolved" "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" - "version" "1.0.0" - -"p-is-promise@^2.0.0": - "integrity" "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" - "resolved" "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz" - "version" "2.1.0" - -"p-limit@^1.1.0": - "integrity" "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "p-try" "^1.0.0" - -"p-limit@^2.0.0": - "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "p-try" "^2.0.0" - -"p-limit@^2.2.0": - "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "p-try" "^2.0.0" - -"p-limit@^3.0.2", "p-limit@^3.1.0": - "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "yocto-queue" "^0.1.0" - -"p-locate@^2.0.0": - "integrity" "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "p-limit" "^1.1.0" - -"p-locate@^3.0.0": - "integrity" "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "p-limit" "^2.0.0" - -"p-locate@^4.1.0": - "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "p-limit" "^2.2.0" - -"p-locate@^5.0.0": - "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "p-limit" "^3.0.2" - -"p-map-series@^2.1.0": - "integrity" "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==" - "resolved" "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz" - "version" "2.1.0" - -"p-map@^4.0.0": - "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" - "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "aggregate-error" "^3.0.0" - -"p-pipe@^3.1.0": - "integrity" "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==" - "resolved" "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz" - "version" "3.1.0" - -"p-queue@^6.6.2": - "integrity" "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==" - "resolved" "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" - "version" "6.6.2" - dependencies: - "eventemitter3" "^4.0.4" - "p-timeout" "^3.2.0" - -"p-reduce@^2.0.0", "p-reduce@^2.1.0": - "integrity" "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==" - "resolved" "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" - "version" "2.1.0" - -"p-timeout@^3.2.0": - "integrity" "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==" - "resolved" "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "p-finally" "^1.0.0" - -"p-try@^1.0.0": - "integrity" "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" - "resolved" "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" - "version" "1.0.0" - -"p-try@^2.0.0": - "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - "version" "2.2.0" - -"p-waterfall@^2.1.1": - "integrity" "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==" - "resolved" "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "p-reduce" "^2.0.0" - -"pacote@^13.0.3", "pacote@^13.6.1": - "integrity" "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==" - "resolved" "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz" - "version" "13.6.2" - dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/promise-spawn" "^3.0.0" - "@npmcli/run-script" "^4.1.0" - "cacache" "^16.0.0" - "chownr" "^2.0.0" - "fs-minipass" "^2.1.0" - "infer-owner" "^1.0.4" - "minipass" "^3.1.6" - "mkdirp" "^1.0.4" - "npm-package-arg" "^9.0.0" - "npm-packlist" "^5.1.0" - "npm-pick-manifest" "^7.0.0" - "npm-registry-fetch" "^13.0.1" - "proc-log" "^2.0.0" - "promise-retry" "^2.0.1" - "read-package-json" "^5.0.0" - "read-package-json-fast" "^2.0.3" - "rimraf" "^3.0.2" - "ssri" "^9.0.0" - "tar" "^6.1.11" - -"parent-module@^1.0.0": - "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" - "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "callsites" "^3.0.0" - -"parse-asn1@^5.0.0", "parse-asn1@^5.1.5": - "integrity" "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==" - "resolved" "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" - "version" "5.1.6" - dependencies: - "asn1.js" "^5.2.0" - "browserify-aes" "^1.0.0" - "evp_bytestokey" "^1.0.0" - "pbkdf2" "^3.0.3" - "safe-buffer" "^5.1.1" - -"parse-cache-control@^1.0.1": - "integrity" "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" - "resolved" "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz" - "version" "1.0.1" - -"parse-conflict-json@^2.0.1": - "integrity" "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==" - "resolved" "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "json-parse-even-better-errors" "^2.3.1" - "just-diff" "^5.0.1" - "just-diff-apply" "^5.2.0" - -"parse-headers@^2.0.0": - "integrity" "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" - "resolved" "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz" - "version" "2.0.5" - -"parse-json@^4.0.0": - "integrity" "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "error-ex" "^1.3.1" - "json-parse-better-errors" "^1.0.1" - -"parse-json@^5.0.0", "parse-json@^5.2.0": - "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - "version" "5.2.0" - 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" - -"parse-path@^7.0.0": - "integrity" "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==" - "resolved" "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "protocols" "^2.0.0" - -"parse-url@^8.1.0": - "integrity" "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==" - "resolved" "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz" - "version" "8.1.0" - dependencies: - "parse-path" "^7.0.0" - -"parseurl@~1.3.3": - "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - "version" "1.3.3" - -"path-exists@^3.0.0": - "integrity" "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" - "version" "3.0.0" - -"path-exists@^4.0.0": - "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - "version" "4.0.0" - -"path-is-absolute@^1.0.0": - "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - "version" "1.0.1" - -"path-key@^2.0.0", "path-key@^2.0.1": - "integrity" "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - "version" "2.0.1" - -"path-key@^3.0.0": - "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"path-key@^3.1.0": - "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"path-parse@^1.0.6", "path-parse@^1.0.7": - "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - "version" "1.0.7" - -"path-to-regexp@0.1.7": - "integrity" "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - "version" "0.1.7" - -"path-type@^3.0.0": - "integrity" "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "pify" "^3.0.0" - -"path-type@^4.0.0": - "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - "version" "4.0.0" - -"path@^0.12.7": - "integrity" "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==" - "resolved" "https://registry.npmjs.org/path/-/path-0.12.7.tgz" - "version" "0.12.7" - dependencies: - "process" "^0.11.1" - "util" "^0.10.3" - -"pathval@^1.1.1": - "integrity" "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" - "resolved" "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" - "version" "1.1.1" - -"pbkdf2@^3.0.17", "pbkdf2@^3.0.3": - "integrity" "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==" - "resolved" "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "create-hash" "^1.1.2" - "create-hmac" "^1.1.4" - "ripemd160" "^2.0.1" - "safe-buffer" "^5.0.1" - "sha.js" "^2.4.8" - -"performance-now@^2.1.0": - "integrity" "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - "resolved" "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" - "version" "2.1.0" - -"picocolors@^1.0.0": - "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - "version" "1.0.0" - -"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3", "picomatch@^2.3.1": - "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - "version" "2.3.1" - -"pidtree@^0.5.0": - "integrity" "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==" - "resolved" "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz" - "version" "0.5.0" - -"pify@^2.3.0": - "integrity" "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pify@^3.0.0": - "integrity" "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - "version" "3.0.0" - -"pify@^4.0.1": - "integrity" "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - "resolved" "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" - "version" "4.0.1" - -"pify@^5.0.0": - "integrity" "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" - "resolved" "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" - "version" "5.0.0" - -"pirates@^4.0.4": - "integrity" "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" - "resolved" "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" - "version" "4.0.5" - -"pkg-dir@^4.2.0": - "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" - "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" - "version" "4.2.0" - dependencies: - "find-up" "^4.0.0" - -"pngjs@^3.3.0": - "integrity" "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" - "resolved" "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz" - "version" "3.4.0" - -"preact@10.4.1": - "integrity" "sha512-WKrRpCSwL2t3tpOOGhf2WfTpcmbpxaWtDbdJdKdjd0aEiTkvOmS4NBkG6kzlaAHI9AkQ3iVqbFWM3Ei7mZ4o1Q==" - "resolved" "https://registry.npmjs.org/preact/-/preact-10.4.1.tgz" - "version" "10.4.1" - -"precond@0.2": - "integrity" "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==" - "resolved" "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz" - "version" "0.2.3" - -"prelude-ls@^1.2.1": - "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - "version" "1.2.1" - -"prelude-ls@~1.1.2": - "integrity" "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" - "version" "1.1.2" - -"prepend-http@^2.0.0": - "integrity" "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" - "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" - "version" "2.0.0" - -"prettier-linter-helpers@^1.0.0": - "integrity" "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==" - "resolved" "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "fast-diff" "^1.1.2" - -"prettier@^2.1.2", "prettier@^2.6.2", "prettier@>=2.0.0", "prettier@2.7.1": - "integrity" "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" - "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" - "version" "2.7.1" - -"pretty-format@^28.0.0", "pretty-format@^28.1.3": - "integrity" "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==" - "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" - "version" "28.1.3" - dependencies: - "@jest/schemas" "^28.1.3" - "ansi-regex" "^5.0.1" - "ansi-styles" "^5.0.0" - "react-is" "^18.0.0" - -"proc-log@^2.0.0", "proc-log@^2.0.1": - "integrity" "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==" - "resolved" "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz" - "version" "2.0.1" - -"process-nextick-args@~2.0.0": - "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - "version" "2.0.1" - -"process@^0.11.1", "process@^0.11.10": - "integrity" "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" - "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - "version" "0.11.10" - -"promise-all-reject-late@^1.0.0": - "integrity" "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==" - "resolved" "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz" - "version" "1.0.1" - -"promise-call-limit@^1.0.1": - "integrity" "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==" - "resolved" "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz" - "version" "1.0.1" - -"promise-inflight@^1.0.1": - "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - "version" "1.0.1" - -"promise-retry@^2.0.1": - "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" - "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "err-code" "^2.0.2" - "retry" "^0.12.0" - -"promise-to-callback@^1.0.0": - "integrity" "sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==" - "resolved" "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-fn" "^1.0.0" - "set-immediate-shim" "^1.0.1" - -"promise@^8.0.0": - "integrity" "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==" - "resolved" "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz" - "version" "8.3.0" - dependencies: - "asap" "~2.0.6" - -"prompts@^2.0.1": - "integrity" "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==" - "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "kleur" "^3.0.3" - "sisteransi" "^1.0.5" - -"promzard@^0.3.0": - "integrity" "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==" - "resolved" "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz" - "version" "0.3.0" - dependencies: - "read" "1" - -"prop-types@^15.8.1": - "integrity" "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==" - "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" - "version" "15.8.1" - dependencies: - "loose-envify" "^1.4.0" - "object-assign" "^4.1.1" - "react-is" "^16.13.1" - -"propagate@^2.0.0": - "integrity" "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" - "resolved" "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz" - "version" "2.0.1" - -"proto-list@~1.2.1": - "integrity" "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - "resolved" "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" - "version" "1.2.4" - -"protobufjs@^6.11.2": - "integrity" "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==" - "resolved" "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz" - "version" "6.11.3" - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.1" - "@types/node" ">=13.7.0" - "long" "^4.0.0" - -"protocols@^2.0.0", "protocols@^2.0.1": - "integrity" "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==" - "resolved" "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz" - "version" "2.0.1" - -"proxy-addr@~2.0.7": - "integrity" "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==" - "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" - "version" "2.0.7" - dependencies: - "forwarded" "0.2.0" - "ipaddr.js" "1.9.1" - -"proxy-from-env@^1.1.0": - "integrity" "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - "resolved" "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" - "version" "1.1.0" - -"prr@~1.0.1": - "integrity" "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" - "resolved" "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" - "version" "1.0.1" - -"psl@^1.1.28": - "integrity" "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - "resolved" "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" - "version" "1.9.0" - -"public-encrypt@^4.0.0": - "integrity" "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==" - "resolved" "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "bn.js" "^4.1.0" - "browserify-rsa" "^4.0.0" - "create-hash" "^1.1.0" - "parse-asn1" "^5.0.0" - "randombytes" "^2.0.1" - "safe-buffer" "^5.1.2" - -"pump@^3.0.0": - "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" - "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "end-of-stream" "^1.1.0" - "once" "^1.3.1" - -"punycode@^2.1.0", "punycode@^2.1.1": - "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - "version" "2.1.1" - -"punycode@2.1.0": - "integrity" "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" - "version" "2.1.0" - -"q@^1.5.1": - "integrity" "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - "resolved" "https://registry.npmjs.org/q/-/q-1.5.1.tgz" - "version" "1.5.1" - -"qr.js@^0.0.0", "qr.js@0.0.0": - "integrity" "sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==" - "resolved" "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz" - "version" "0.0.0" - -"qrcode@1.4.4": - "integrity" "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==" - "resolved" "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz" - "version" "1.4.4" - dependencies: - "buffer" "^5.4.3" - "buffer-alloc" "^1.2.0" - "buffer-from" "^1.1.1" - "dijkstrajs" "^1.0.1" - "isarray" "^2.0.1" - "pngjs" "^3.3.0" - "yargs" "^13.2.4" - -"qs@^6.4.0", "qs@^6.7.0", "qs@^6.9.4", "qs@6.11.0": - "integrity" "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==" - "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" - "version" "6.11.0" - dependencies: - "side-channel" "^1.0.4" - -"qs@~6.5.2": - "integrity" "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" - "resolved" "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" - "version" "6.5.3" - -"query-string@^5.0.1": - "integrity" "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==" - "resolved" "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "decode-uri-component" "^0.2.0" - "object-assign" "^4.1.0" - "strict-uri-encode" "^1.0.0" - -"query-string@6.13.5": - "integrity" "sha512-svk3xg9qHR39P3JlHuD7g3nRnyay5mHbrPctEBDUxUkHRifPHXJDhBUycdCC0NBjXoDf44Gb+IsOZL1Uwn8M/Q==" - "resolved" "https://registry.npmjs.org/query-string/-/query-string-6.13.5.tgz" - "version" "6.13.5" - dependencies: - "decode-uri-component" "^0.2.0" - "split-on-first" "^1.0.0" - "strict-uri-encode" "^2.0.0" - -"querystringify@^2.1.1": - "integrity" "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - "resolved" "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" - "version" "2.2.0" - -"queue-microtask@^1.2.2", "queue-microtask@^1.2.3": - "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - "version" "1.2.3" - -"queue-tick@^1.0.0": - "version" "1.0.0" - -"quick-lru@^4.0.1": - "integrity" "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" - "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" - "version" "4.0.1" - -"quick-lru@^5.1.1": - "integrity" "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" - "version" "5.1.1" - -"randombytes@^2.0.0", "randombytes@^2.0.1", "randombytes@^2.0.5", "randombytes@^2.1.0": - "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" - "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "safe-buffer" "^5.1.0" - -"randomfill@^1.0.3": - "integrity" "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==" - "resolved" "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "randombytes" "^2.0.5" - "safe-buffer" "^5.1.0" - -"range-parser@~1.2.1": - "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - "version" "1.2.1" - -"raw-body@^2.4.1", "raw-body@2.5.1": - "integrity" "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==" - "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" - "version" "2.5.1" - dependencies: - "bytes" "3.1.2" - "http-errors" "2.0.0" - "iconv-lite" "0.4.24" - "unpipe" "1.0.0" - -"react-dom@^18.2.0": - "integrity" "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==" - "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" - "version" "18.2.0" - dependencies: - "loose-envify" "^1.1.0" - "scheduler" "^0.23.0" - -"react-i18next@^12.0.0": - "integrity" "sha512-/O7N6aIEAl1FaWZBNvhdIo9itvF/MO/nRKr9pYqRc9LhuC1u21SlfwpiYQqvaeNSEW3g3qUXLREOWMt+gxrWbg==" - "resolved" "https://registry.npmjs.org/react-i18next/-/react-i18next-12.0.0.tgz" - "version" "12.0.0" - dependencies: - "@babel/runtime" "^7.14.5" - "html-parse-stringify" "^3.0.1" - -"react-is@^16.13.1": - "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - "version" "16.13.1" - -"react-is@^18.0.0": - "integrity" "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - "resolved" "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" - "version" "18.2.0" - -"react-qr-code@^2.0.8": - "integrity" "sha512-zYO9EAPQU8IIeD6c6uAle7NlKOiVKs8ji9hpbWPTGxO+FLqBN2on+XCXQvnhm91nrRd306RvNXUkUNcXXSfhWA==" - "resolved" "https://registry.npmjs.org/react-qr-code/-/react-qr-code-2.0.8.tgz" - "version" "2.0.8" - dependencies: - "prop-types" "^15.8.1" - "qr.js" "0.0.0" - -"react@^16.x || ^17.x || ^18.x", "react@^18.2.0", "react@>= 16.8.0": - "integrity" "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==" - "resolved" "https://registry.npmjs.org/react/-/react-18.2.0.tgz" - "version" "18.2.0" - dependencies: - "loose-envify" "^1.1.0" - -"read-cmd-shim@^3.0.0": - "integrity" "sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==" - "resolved" "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz" - "version" "3.0.1" - -"read-package-json-fast@^2.0.2", "read-package-json-fast@^2.0.3": - "integrity" "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==" - "resolved" "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz" - "version" "2.0.3" - dependencies: - "json-parse-even-better-errors" "^2.3.0" - "npm-normalize-package-bin" "^1.0.1" - -"read-package-json@^5.0.0", "read-package-json@^5.0.1": - "integrity" "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==" - "resolved" "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz" - "version" "5.0.2" - dependencies: - "glob" "^8.0.1" - "json-parse-even-better-errors" "^2.3.1" - "normalize-package-data" "^4.0.0" - "npm-normalize-package-bin" "^2.0.0" - -"read-pkg-up@^3.0.0": - "integrity" "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==" - "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "find-up" "^2.0.0" - "read-pkg" "^3.0.0" - -"read-pkg-up@^7.0.1": - "integrity" "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==" - "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "find-up" "^4.1.0" - "read-pkg" "^5.2.0" - "type-fest" "^0.8.1" - -"read-pkg@^3.0.0": - "integrity" "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==" - "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "load-json-file" "^4.0.0" - "normalize-package-data" "^2.3.2" - "path-type" "^3.0.0" - -"read-pkg@^5.2.0": - "integrity" "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==" - "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" - "version" "5.2.0" - 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@^1.0.7", "read@1": - "integrity" "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==" - "resolved" "https://registry.npmjs.org/read/-/read-1.0.7.tgz" - "version" "1.0.7" - dependencies: - "mute-stream" "~0.0.4" - -"readable-stream@^1.0.33": - "integrity" "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" - "version" "1.1.14" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.1" - "isarray" "0.0.1" - "string_decoder" "~0.10.x" - -"readable-stream@^2.0.0": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@^2.2.2": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@^2.2.9": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@^3.0.0", "readable-stream@^3.0.2", "readable-stream@^3.1.1", "readable-stream@^3.4.0", "readable-stream@^3.6.0", "readable-stream@3": - "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"readable-stream@~1.0.15": - "integrity" "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" - "version" "1.0.34" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.1" - "isarray" "0.0.1" - "string_decoder" "~0.10.x" - -"readable-stream@~2.3.6": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@1.x >=1.1.9": - "integrity" "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" - "version" "1.1.14" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.1" - "isarray" "0.0.1" - "string_decoder" "~0.10.x" - -"readdir-scoped-modules@^1.1.0": - "integrity" "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==" - "resolved" "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "debuglog" "^1.0.1" - "dezalgo" "^1.0.0" - "graceful-fs" "^4.1.2" - "once" "^1.3.0" - -"readdirp@~3.2.0": - "integrity" "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==" - "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "picomatch" "^2.0.4" - -"readdirp@~3.6.0": - "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" - "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "picomatch" "^2.2.1" - -"rechoir@^0.6.2": - "integrity" "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==" - "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" - "version" "0.6.2" - dependencies: - "resolve" "^1.1.6" - -"rechoir@^0.7.0": - "integrity" "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==" - "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz" - "version" "0.7.1" - dependencies: - "resolve" "^1.9.0" - -"recursive-readdir@^2.2.2": - "integrity" "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==" - "resolved" "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz" - "version" "2.2.3" - dependencies: - "minimatch" "^3.0.5" - -"redent@^3.0.0": - "integrity" "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==" - "resolved" "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "indent-string" "^4.0.0" - "strip-indent" "^3.0.0" - -"reduce-flatten@^2.0.0": - "integrity" "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==" - "resolved" "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz" - "version" "2.0.0" - -"regenerator-runtime@^0.13.10": - "integrity" "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" - "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz" - "version" "0.13.10" - -"regexp.prototype.flags@^1.4.3": - "integrity" "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==" - "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" - "version" "1.4.3" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - "functions-have-names" "^1.2.2" - -"regexpp@^3.2.0": - "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - "version" "3.2.0" - -"req-cwd@^2.0.0": - "integrity" "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==" - "resolved" "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "req-from" "^2.0.0" - -"req-from@^2.0.0": - "integrity" "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==" - "resolved" "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "resolve-from" "^3.0.0" - -"request-promise-core@1.1.4": - "integrity" "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==" - "resolved" "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz" - "version" "1.1.4" - dependencies: - "lodash" "^4.17.19" - -"request-promise-native@^1.0.5": - "integrity" "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==" - "resolved" "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz" - "version" "1.0.9" - dependencies: - "request-promise-core" "1.1.4" - "stealthy-require" "^1.1.1" - "tough-cookie" "^2.3.3" - -"request@^2.34", "request@^2.79.0", "request@^2.85.0", "request@^2.88.0": - "integrity" "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==" - "resolved" "https://registry.npmjs.org/request/-/request-2.88.2.tgz" - "version" "2.88.2" - dependencies: - "aws-sign2" "~0.7.0" - "aws4" "^1.8.0" - "caseless" "~0.12.0" - "combined-stream" "~1.0.6" - "extend" "~3.0.2" - "forever-agent" "~0.6.1" - "form-data" "~2.3.2" - "har-validator" "~5.1.3" - "http-signature" "~1.2.0" - "is-typedarray" "~1.0.0" - "isstream" "~0.1.2" - "json-stringify-safe" "~5.0.1" - "mime-types" "~2.1.19" - "oauth-sign" "~0.9.0" - "performance-now" "^2.1.0" - "qs" "~6.5.2" - "safe-buffer" "^5.1.2" - "tough-cookie" "~2.5.0" - "tunnel-agent" "^0.6.0" - "uuid" "^3.3.2" - -"require-directory@^2.1.1": - "integrity" "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - "version" "2.1.1" - -"require-from-string@^2.0.0": - "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - "version" "2.0.2" - -"require-main-filename@^2.0.0": - "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - "version" "2.0.0" - -"requires-port@^1.0.0": - "integrity" "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - "resolved" "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - "version" "1.0.0" - -"resolve-alpn@^1.0.0", "resolve-alpn@^1.2.0": - "integrity" "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - "resolved" "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" - "version" "1.2.1" - -"resolve-cwd@^3.0.0": - "integrity" "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==" - "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "resolve-from" "^5.0.0" - -"resolve-from@^3.0.0": - "integrity" "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" - "version" "3.0.0" - -"resolve-from@^4.0.0": - "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - "version" "4.0.0" - -"resolve-from@^5.0.0": - "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - "version" "5.0.0" - -"resolve.exports@^1.1.0": - "integrity" "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" - "resolved" "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" - "version" "1.1.0" - -"resolve@^1.1.6", "resolve@^1.10.0", "resolve@^1.14.2", "resolve@^1.20.0", "resolve@^1.22.0", "resolve@^1.3.2", "resolve@^1.8.1", "resolve@^1.9.0": - "integrity" "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" - "version" "1.22.1" - dependencies: - "is-core-module" "^2.9.0" - "path-parse" "^1.0.7" - "supports-preserve-symlinks-flag" "^1.0.0" - -"resolve@1.1.x": - "integrity" "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz" - "version" "1.1.7" - -"resolve@1.17.0": - "integrity" "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" - "version" "1.17.0" - dependencies: - "path-parse" "^1.0.6" - -"responselike@^1.0.2": - "integrity" "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==" - "resolved" "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "lowercase-keys" "^1.0.0" - -"responselike@^2.0.0": - "integrity" "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==" - "resolved" "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "lowercase-keys" "^2.0.0" - -"restore-cursor@^3.1.0": - "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" - "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "onetime" "^5.1.0" - "signal-exit" "^3.0.2" - -"retry@^0.12.0": - "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" - "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - "version" "0.12.0" - -"reusify@^1.0.4": - "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - "version" "1.0.4" - -"rfdc@^1.3.0": - "integrity" "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - "resolved" "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" - "version" "1.3.0" - -"rimraf@^2.2.8": - "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - "version" "2.7.1" - dependencies: - "glob" "^7.1.3" - -"rimraf@^3.0.0", "rimraf@^3.0.2": - "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "glob" "^7.1.3" - -"ripemd160@^2.0.0", "ripemd160@^2.0.1": - "integrity" "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==" - "resolved" "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "hash-base" "^3.0.0" - "inherits" "^2.0.1" - -"rlp@^2.0.0", "rlp@^2.2.3", "rlp@^2.2.4": - "integrity" "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==" - "resolved" "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz" - "version" "2.2.7" - dependencies: - "bn.js" "^5.2.0" - -"rpc-websockets@^7.5.0": - "integrity" "sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ==" - "resolved" "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.0.tgz" - "version" "7.5.0" - dependencies: - "@babel/runtime" "^7.17.2" - "eventemitter3" "^4.0.7" - "uuid" "^8.3.2" - "ws" "^8.5.0" - optionalDependencies: - "bufferutil" "^4.0.1" - "utf-8-validate" "^5.0.2" - -"run-async@^2.4.0": - "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - "version" "2.4.1" - -"run-parallel-limit@^1.1.0": - "integrity" "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==" - "resolved" "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "queue-microtask" "^1.2.2" - -"run-parallel@^1.1.9": - "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" - "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "queue-microtask" "^1.2.2" - -"rustbn.js@~0.2.0": - "integrity" "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" - "resolved" "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz" - "version" "0.2.0" - -"rxjs@^7.0.0", "rxjs@^7.5.5": - "integrity" "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==" - "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz" - "version" "7.5.7" - dependencies: - "tslib" "^2.1.0" - -"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.1", "safe-buffer@~5.2.0", "safe-buffer@5.2.1": - "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - "version" "5.2.1" - -"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": - "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - "version" "5.1.2" - -"safe-buffer@~5.1.2": - "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - "version" "5.1.2" - -"safe-event-emitter@^1.0.1": - "integrity" "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==" - "resolved" "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "events" "^3.0.0" - -"safe-regex-test@^1.0.0": - "integrity" "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==" - "resolved" "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "call-bind" "^1.0.2" - "get-intrinsic" "^1.1.3" - "is-regex" "^1.1.4" - -"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@~2.1.0": - "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - "version" "2.1.2" - -"sc-istanbul@^0.4.5": - "integrity" "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==" - "resolved" "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz" - "version" "0.4.6" - dependencies: - "abbrev" "1.0.x" - "async" "1.x" - "escodegen" "1.8.x" - "esprima" "2.7.x" - "glob" "^5.0.15" - "handlebars" "^4.0.1" - "js-yaml" "3.x" - "mkdirp" "0.5.x" - "nopt" "3.x" - "once" "1.x" - "resolve" "1.1.x" - "supports-color" "^3.1.0" - "which" "^1.1.1" - "wordwrap" "^1.0.0" - -"scheduler@^0.23.0": - "integrity" "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==" - "resolved" "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" - "version" "0.23.0" - dependencies: - "loose-envify" "^1.1.0" - -"schema-utils@^3.1.0", "schema-utils@^3.1.1": - "integrity" "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==" - "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "@types/json-schema" "^7.0.8" - "ajv" "^6.12.5" - "ajv-keywords" "^3.5.2" - -"scrypt-js@^3.0.0", "scrypt-js@^3.0.1", "scrypt-js@3.0.1": - "integrity" "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - "resolved" "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" - "version" "3.0.1" - -"scrypt-js@2.0.4": - "integrity" "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" - "resolved" "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz" - "version" "2.0.4" - -"scw-contracts-v1.0.0@npm:scw-contracts@1.0.0": - "integrity" "sha512-23OsUVpMZZJMb9qe8Bu0rzz47BxhOQv9QdxlHdd/GeE2cnpe5atC36rs3wquXKzfMrru+NEKhlhyR8674hrBpg==" - "resolved" "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/constants" "^5.6.1" - "@nomiclabs/hardhat-etherscan" "^2.1.6" - "@openzeppelin/contracts" "^4.2.0" - "@typechain/hardhat" "^2.3.0" - "@types/mocha" "^9.0.0" - "chai-as-promised" "^7.1.1" - "chai-string" "^1.5.0" - "eth-gas-reporter" "^0.2.24" - "ethereumjs-util" "^7.1.0" - "ethereumjs-wallet" "^1.0.1" - "ethers" "^5.6.8" - "ganache" "^7.1.0" - "ganache-cli" "^6.12.2" - "hardhat" "^2.9.5" - "hardhat-deploy" "^0.9.3" - "hardhat-deploy-ethers" "^0.3.0-beta.11" - "hardhat-gas-reporter" "^1.0.7" - "solc" "^0.8.15" - "source-map-support" "^0.5.19" - "typescript" "^4.3.5" - -"scw-contracts-v1.0.1@npm:scw-contracts@1.0.9": - "integrity" "sha512-08IJMsQKJhcNwwhWXC8Ok35dF+O1z3/sHo4/MyZCUWLttFyyt4KqDLTQnwWyiLqUpbo+0x+kNIq+wO6IOb5tdg==" - "resolved" "https://registry.npmjs.org/scw-contracts/-/scw-contracts-1.0.9.tgz" - "version" "1.0.9" - dependencies: - "@account-abstraction/contracts" "^0.2.0" - "@chainlink/contracts" "^0.4.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/constants" "^5.6.1" - "@nomiclabs/hardhat-etherscan" "^2.1.6" - "@openzeppelin/contracts" "^4.7.3" - "@openzeppelin/contracts-upgradeable" "^4.7.3" - "@typechain/hardhat" "^2.3.0" - "@types/mocha" "^9.0.0" - "chai-as-promised" "^7.1.1" - "chai-string" "^1.5.0" - "eth-gas-reporter" "^0.2.24" - "ethereumjs-util" "^7.1.0" - "ethereumjs-wallet" "^1.0.1" - "ethers" "^5.6.8" - "ganache" "^7.1.0" - "ganache-cli" "^6.12.2" - "hardhat" "^2.9.5" - "hardhat-deploy" "^0.9.3" - "hardhat-deploy-ethers" "^0.3.0-beta.11" - "hardhat-gas-reporter" "^1.0.7" - "solc" "^0.8.15" - "solidity-bytes-utils" "^0.8.0" - "source-map-support" "^0.5.19" - "typescript" "^4.3.5" - -"secp256k1@^3.8.0": - "integrity" "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==" - "resolved" "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz" - "version" "3.8.0" - dependencies: - "bindings" "^1.5.0" - "bip66" "^1.1.5" - "bn.js" "^4.11.8" - "create-hash" "^1.2.0" - "drbg.js" "^1.0.1" - "elliptic" "^6.5.2" - "nan" "^2.14.0" - "safe-buffer" "^5.1.2" - -"secp256k1@^4.0.1", "secp256k1@4.0.3": - "integrity" "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==" - "resolved" "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "elliptic" "^6.5.4" - "node-addon-api" "^2.0.0" - "node-gyp-build" "^4.2.0" - -"semaphore@^1.0.3", "semaphore@>=1.0.1": - "integrity" "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" - "resolved" "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz" - "version" "1.1.0" - -"semver@^5.3.0": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@^5.5.0": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@^5.6.0": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@^5.7.0": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@^6.0.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^6.1.1": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^6.1.2": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^6.3.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^7.0.0", "semver@^7.1.1", "semver@^7.3.4", "semver@^7.3.5", "semver@^7.3.7": - "integrity" "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" - "version" "7.3.8" - dependencies: - "lru-cache" "^6.0.0" - -"semver@~5.4.1": - "integrity" "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz" - "version" "5.4.1" - -"semver@2 || 3 || 4 || 5": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@7.3.4": - "integrity" "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" - "version" "7.3.4" - dependencies: - "lru-cache" "^6.0.0" - -"send@0.18.0": - "integrity" "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==" - "resolved" "https://registry.npmjs.org/send/-/send-0.18.0.tgz" - "version" "0.18.0" - dependencies: - "debug" "2.6.9" - "depd" "2.0.0" - "destroy" "1.2.0" - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "etag" "~1.8.1" - "fresh" "0.5.2" - "http-errors" "2.0.0" - "mime" "1.6.0" - "ms" "2.1.3" - "on-finished" "2.4.1" - "range-parser" "~1.2.1" - "statuses" "2.0.1" - -"serialize-javascript@^6.0.0", "serialize-javascript@6.0.0": - "integrity" "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==" - "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "randombytes" "^2.1.0" - -"serve-static@1.15.0": - "integrity" "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==" - "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - "version" "1.15.0" - dependencies: - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "parseurl" "~1.3.3" - "send" "0.18.0" - -"servify@^0.1.12": - "integrity" "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==" - "resolved" "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz" - "version" "0.1.12" - dependencies: - "body-parser" "^1.16.0" - "cors" "^2.8.1" - "express" "^4.14.0" - "request" "^2.79.0" - "xhr" "^2.3.3" - -"set-blocking@^2.0.0": - "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - "version" "2.0.0" - -"set-immediate-shim@^1.0.1": - "integrity" "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==" - "resolved" "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" - "version" "1.0.1" - -"setimmediate@^1.0.5": - "integrity" "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - "version" "1.0.5" - -"setimmediate@1.0.4": - "integrity" "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" - "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz" - "version" "1.0.4" - -"setprototypeof@1.2.0": - "integrity" "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - "version" "1.2.0" - -"sha.js@^2.4.0", "sha.js@^2.4.8": - "integrity" "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==" - "resolved" "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" - "version" "2.4.11" - dependencies: - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" - -"sha1@^1.1.1": - "integrity" "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==" - "resolved" "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "charenc" ">= 0.0.1" - "crypt" ">= 0.0.1" - -"shallow-clone@^3.0.0": - "integrity" "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==" - "resolved" "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "kind-of" "^6.0.2" - -"shebang-command@^1.2.0": - "integrity" "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "shebang-regex" "^1.0.0" - -"shebang-command@^2.0.0": - "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "shebang-regex" "^3.0.0" - -"shebang-regex@^1.0.0": - "integrity" "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" - "version" "1.0.0" - -"shebang-regex@^3.0.0": - "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - "version" "3.0.0" - -"shell-quote@^1.7.3": - "integrity" "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" - "resolved" "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz" - "version" "1.7.4" - -"shelljs@^0.8.3": - "integrity" "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==" - "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" - "version" "0.8.5" - dependencies: - "glob" "^7.0.0" - "interpret" "^1.0.0" - "rechoir" "^0.6.2" - -"side-channel@^1.0.4": - "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" - "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "call-bind" "^1.0.0" - "get-intrinsic" "^1.0.2" - "object-inspect" "^1.9.0" - -"signal-exit@^3.0.0": - "version" "3.0.3" - -"signal-exit@^3.0.2", "signal-exit@^3.0.3", "signal-exit@^3.0.7": - "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - "version" "3.0.7" - -"simple-concat@^1.0.0": - "integrity" "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - "resolved" "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" - "version" "1.0.1" - -"simple-get@^2.7.0": - "integrity" "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==" - "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz" - "version" "2.8.2" - dependencies: - "decompress-response" "^3.3.0" - "once" "^1.3.1" - "simple-concat" "^1.0.0" - -"sisteransi@^1.0.5": - "integrity" "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - "version" "1.0.5" - -"slash@^3.0.0": - "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - "version" "3.0.0" - -"slice-ansi@^3.0.0": - "integrity" "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "astral-regex" "^2.0.0" - "is-fullwidth-code-point" "^3.0.0" - -"slice-ansi@^4.0.0": - "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "astral-regex" "^2.0.0" - "is-fullwidth-code-point" "^3.0.0" - -"slice-ansi@^5.0.0": - "integrity" "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "ansi-styles" "^6.0.0" - "is-fullwidth-code-point" "^4.0.0" - -"smart-buffer@^4.2.0": - "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" - "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - "version" "4.2.0" - -"socket.io-client@^4.5.3": - "integrity" "sha512-I/hqDYpQ6JKwtJOf5ikM+Qz+YujZPMEl6qBLhxiP0nX+TfXKhW4KZZG8lamrD6Y5ngjmYHreESVasVCgi5Kl3A==" - "resolved" "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.3.tgz" - "version" "4.5.3" - dependencies: - "@socket.io/component-emitter" "~3.1.0" - "debug" "~4.3.2" - "engine.io-client" "~6.2.3" - "socket.io-parser" "~4.2.0" - -"socket.io-parser@~4.2.0": - "integrity" "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==" - "resolved" "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "@socket.io/component-emitter" "~3.1.0" - "debug" "~4.3.1" - -"socks-proxy-agent@^7.0.0": - "integrity" "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==" - "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "agent-base" "^6.0.2" - "debug" "^4.3.3" - "socks" "^2.6.2" - -"socks@^2.6.2": - "integrity" "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==" - "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" - "version" "2.7.1" - dependencies: - "ip" "^2.0.0" - "smart-buffer" "^4.2.0" - -"solc@^0.8.15": - "integrity" "sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g==" - "resolved" "https://registry.npmjs.org/solc/-/solc-0.8.17.tgz" - "version" "0.8.17" - dependencies: - "command-exists" "^1.2.8" - "commander" "^8.1.0" - "follow-redirects" "^1.12.1" - "js-sha3" "0.8.0" - "memorystream" "^0.3.1" - "semver" "^5.5.0" - "tmp" "0.0.33" - -"solc@0.7.3": - "integrity" "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==" - "resolved" "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz" - "version" "0.7.3" - dependencies: - "command-exists" "^1.2.8" - "commander" "3.0.2" - "follow-redirects" "^1.12.1" - "fs-extra" "^0.30.0" - "js-sha3" "0.8.0" - "memorystream" "^0.3.1" - "require-from-string" "^2.0.0" - "semver" "^5.5.0" - "tmp" "0.0.33" - -"solidity-bytes-utils@^0.8.0": - "integrity" "sha512-r109ZHEf7zTMm1ENW6/IJFDWilFR/v0BZnGuFgDHJUV80ByobnV2k3txvwQaJ9ApL+6XAfwqsw5VFzjALbQPCw==" - "resolved" "https://registry.npmjs.org/solidity-bytes-utils/-/solidity-bytes-utils-0.8.0.tgz" - "version" "0.8.0" - dependencies: - "@truffle/hdwallet-provider" "latest" - -"solidity-coverage@^0.7.21", "solidity-coverage@^0.7.22": - "integrity" "sha512-I6Zd5tsFY+gmj1FDIp6w7OrUePx6ZpMgKQZg7dWgPaQHePLi3Jk+iJ8lwZxsWEoNy2Lcv91rMxATWHqRaFdQpw==" - "resolved" "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.7.22.tgz" - "version" "0.7.22" - dependencies: - "@solidity-parser/parser" "^0.14.0" - "@truffle/provider" "^0.2.24" - "chalk" "^2.4.2" - "death" "^1.1.0" - "detect-port" "^1.3.0" - "fs-extra" "^8.1.0" - "ghost-testrpc" "^0.0.2" - "global-modules" "^2.0.0" - "globby" "^10.0.1" - "jsonschema" "^1.2.4" - "lodash" "^4.17.15" - "node-emoji" "^1.10.0" - "pify" "^4.0.1" - "recursive-readdir" "^2.2.2" - "sc-istanbul" "^0.4.5" - "semver" "^7.3.4" - "shelljs" "^0.8.3" - "web3-utils" "^1.3.0" - -"sort-keys@^2.0.0": - "integrity" "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==" - "resolved" "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "is-plain-obj" "^1.0.0" - -"sort-keys@^4.0.0": - "integrity" "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==" - "resolved" "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz" - "version" "4.2.0" - dependencies: - "is-plain-obj" "^2.0.0" - -"source-map-support@^0.5.13", "source-map-support@^0.5.19", "source-map-support@~0.5.20": - "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" - "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - "version" "0.5.21" - dependencies: - "buffer-from" "^1.0.0" - "source-map" "^0.6.0" - -"source-map-support@0.5.12": - "integrity" "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==" - "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz" - "version" "0.5.12" - dependencies: - "buffer-from" "^1.0.0" - "source-map" "^0.6.0" - -"source-map-support@0.5.13": - "integrity" "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==" - "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" - "version" "0.5.13" - dependencies: - "buffer-from" "^1.0.0" - "source-map" "^0.6.0" - -"source-map@^0.6.0", "source-map@^0.6.1": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - -"source-map@~0.2.0": - "integrity" "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz" - "version" "0.2.0" - dependencies: - "amdefine" ">=0.0.4" - -"spawn-command@^0.0.2-1": - "integrity" "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==" - "resolved" "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz" - "version" "0.0.2-1" - -"spdx-correct@^3.0.0": - "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" - "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "spdx-expression-parse" "^3.0.0" - "spdx-license-ids" "^3.0.0" - -"spdx-exceptions@^2.1.0": - "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - "version" "2.3.0" - -"spdx-expression-parse@^3.0.0": - "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" - "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "spdx-exceptions" "^2.1.0" - "spdx-license-ids" "^3.0.0" - -"spdx-license-ids@^3.0.0": - "integrity" "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" - "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" - "version" "3.0.12" - -"split-on-first@^1.0.0": - "integrity" "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" - "resolved" "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz" - "version" "1.1.0" - -"split@^1.0.0": - "integrity" "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==" - "resolved" "https://registry.npmjs.org/split/-/split-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "through" "2" - -"split2@^3.0.0": - "integrity" "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==" - "resolved" "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" - "version" "3.2.2" - dependencies: - "readable-stream" "^3.0.0" - -"sprintf-js@~1.0.2": - "integrity" "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - "version" "1.0.3" - -"sshpk@^1.7.0": - "integrity" "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==" - "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" - "version" "1.17.0" - dependencies: - "asn1" "~0.2.3" - "assert-plus" "^1.0.0" - "bcrypt-pbkdf" "^1.0.0" - "dashdash" "^1.12.0" - "ecc-jsbn" "~0.1.1" - "getpass" "^0.1.1" - "jsbn" "~0.1.0" - "safer-buffer" "^2.0.2" - "tweetnacl" "~0.14.0" - -"ssri@^9.0.0", "ssri@^9.0.1": - "integrity" "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==" - "resolved" "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" - "version" "9.0.1" - dependencies: - "minipass" "^3.1.1" - -"stack-utils@^2.0.3": - "integrity" "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==" - "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" - "version" "2.0.6" - dependencies: - "escape-string-regexp" "^2.0.0" - -"stacktrace-parser@^0.1.10": - "integrity" "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==" - "resolved" "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" - "version" "0.1.10" - dependencies: - "type-fest" "^0.7.1" - -"statuses@2.0.1": - "integrity" "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - "resolved" "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - "version" "2.0.1" - -"stealthy-require@^1.1.1": - "integrity" "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==" - "resolved" "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz" - "version" "1.1.1" - -"streamsearch@^1.1.0": - "integrity" "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" - "resolved" "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" - "version" "1.1.0" - -"strict-uri-encode@^1.0.0": - "integrity" "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" - "resolved" "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" - "version" "1.1.0" - -"strict-uri-encode@^2.0.0": - "integrity" "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==" - "resolved" "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz" - "version" "2.0.0" - -"string_decoder@^1.1.1": - "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "safe-buffer" "~5.2.0" - -"string_decoder@~0.10.x": - "integrity" "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - "version" "0.10.31" - -"string_decoder@~1.1.1": - "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "safe-buffer" "~5.1.0" - -"string-argv@^0.3.1": - "integrity" "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" - "resolved" "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" - "version" "0.3.1" - -"string-format@^2.0.0": - "integrity" "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==" - "resolved" "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz" - "version" "2.0.0" - -"string-length@^4.0.1": - "integrity" "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==" - "resolved" "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "char-regex" "^1.0.2" - "strip-ansi" "^6.0.0" - -"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3": - "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - "version" "4.2.3" - dependencies: - "emoji-regex" "^8.0.0" - "is-fullwidth-code-point" "^3.0.0" - "strip-ansi" "^6.0.1" - -"string-width@^1.0.2 || 2": - "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "is-fullwidth-code-point" "^2.0.0" - "strip-ansi" "^4.0.0" - -"string-width@^2.1.1": - "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "is-fullwidth-code-point" "^2.0.0" - "strip-ansi" "^4.0.0" - -"string-width@^3.0.0", "string-width@^3.1.0": - "integrity" "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "emoji-regex" "^7.0.1" - "is-fullwidth-code-point" "^2.0.0" - "strip-ansi" "^5.1.0" - -"string-width@^5.0.0": - "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "eastasianwidth" "^0.2.0" - "emoji-regex" "^9.2.2" - "strip-ansi" "^7.0.1" - -"string.prototype.trimend@^1.0.5": - "integrity" "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==" - "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - -"string.prototype.trimstart@^1.0.5": - "integrity" "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==" - "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - -"strip-ansi@^4.0.0": - "integrity" "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-regex" "^3.0.0" - -"strip-ansi@^5.0.0", "strip-ansi@^5.1.0", "strip-ansi@^5.2.0": - "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "ansi-regex" "^4.1.0" - -"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": - "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "ansi-regex" "^5.0.1" - -"strip-ansi@^7.0.1": - "integrity" "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "ansi-regex" "^6.0.1" - -"strip-bom@^3.0.0": - "integrity" "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" - "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - "version" "3.0.0" - -"strip-bom@^4.0.0": - "integrity" "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" - "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" - "version" "4.0.0" - -"strip-eof@^1.0.0": - "integrity" "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" - "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" - "version" "1.0.0" - -"strip-final-newline@^2.0.0": - "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - "version" "2.0.0" - -"strip-hex-prefix@1.0.0": - "integrity" "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==" - "resolved" "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-hex-prefixed" "1.0.0" - -"strip-indent@^3.0.0": - "integrity" "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==" - "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "min-indent" "^1.0.0" - -"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1", "strip-json-comments@3.1.1": - "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - "version" "3.1.1" - -"strip-json-comments@2.0.1": - "integrity" "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - "version" "2.0.1" - -"strong-log-transformer@^2.1.0": - "integrity" "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==" - "resolved" "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "duplexer" "^0.1.1" - "minimist" "^1.2.0" - "through" "^2.3.4" - -"superstruct@^0.14.2": - "integrity" "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" - "resolved" "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz" - "version" "0.14.2" - -"supports-color@^3.1.0": - "integrity" "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" - "version" "3.2.3" - dependencies: - "has-flag" "^1.0.0" - -"supports-color@^5.3.0": - "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - "version" "5.5.0" - dependencies: - "has-flag" "^3.0.0" - -"supports-color@^7.0.0": - "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "has-flag" "^4.0.0" - -"supports-color@^7.1.0": - "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "has-flag" "^4.0.0" - -"supports-color@^8.0.0", "supports-color@^8.1.0", "supports-color@8.1.1": - "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - "version" "8.1.1" - dependencies: - "has-flag" "^4.0.0" - -"supports-color@^9.2.2": - "integrity" "sha512-aszYUX/DVK/ed5rFLb/dDinVJrQjG/vmU433wtqVSD800rYsJNWxh2R3USV90aLSU+UsyQkbNeffVLzc6B6foA==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-9.2.3.tgz" - "version" "9.2.3" - -"supports-color@6.0.0": - "integrity" "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "has-flag" "^3.0.0" - -"supports-hyperlinks@^2.0.0": - "integrity" "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==" - "resolved" "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "has-flag" "^4.0.0" - "supports-color" "^7.0.0" - -"supports-preserve-symlinks-flag@^1.0.0": - "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - "version" "1.0.0" - -"swarm-js@^0.1.40": - "integrity" "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==" - "resolved" "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz" - "version" "0.1.42" - dependencies: - "bluebird" "^3.5.0" - "buffer" "^5.0.5" - "eth-lib" "^0.1.26" - "fs-extra" "^4.0.2" - "got" "^11.8.5" - "mime-types" "^2.1.16" - "mkdirp-promise" "^5.0.1" - "mock-fs" "^4.1.0" - "setimmediate" "^1.0.5" - "tar" "^4.0.2" - "xhr-request" "^1.0.1" - -"sync-request@^6.0.0": - "integrity" "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==" - "resolved" "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "http-response-object" "^3.0.1" - "sync-rpc" "^1.2.1" - "then-request" "^6.0.0" - -"sync-rpc@^1.2.1": - "integrity" "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==" - "resolved" "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz" - "version" "1.3.6" - dependencies: - "get-port" "^3.1.0" - -"table-layout@^1.0.2": - "integrity" "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==" - "resolved" "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "array-back" "^4.0.1" - "deep-extend" "~0.6.0" - "typical" "^5.2.0" - "wordwrapjs" "^4.0.0" - -"tapable@^2.1.1", "tapable@^2.2.0": - "integrity" "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" - "resolved" "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" - "version" "2.2.1" - -"tar-stream@~2.2.0": - "integrity" "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" - "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "bl" "^4.0.3" - "end-of-stream" "^1.4.1" - "fs-constants" "^1.0.0" - "inherits" "^2.0.3" - "readable-stream" "^3.1.1" - -"tar@^4.0.2": - "integrity" "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==" - "resolved" "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" - "version" "4.4.19" - dependencies: - "chownr" "^1.1.4" - "fs-minipass" "^1.2.7" - "minipass" "^2.9.0" - "minizlib" "^1.3.3" - "mkdirp" "^0.5.5" - "safe-buffer" "^5.2.1" - "yallist" "^3.1.1" - -"tar@^6.1.0", "tar@^6.1.11", "tar@^6.1.2": - "integrity" "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==" - "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz" - "version" "6.1.12" - dependencies: - "chownr" "^2.0.0" - "fs-minipass" "^2.0.0" - "minipass" "^3.0.0" - "minizlib" "^2.1.1" - "mkdirp" "^1.0.3" - "yallist" "^4.0.0" - -"temp-dir@^1.0.0": - "integrity" "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==" - "resolved" "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz" - "version" "1.0.0" - -"terminal-link@^2.0.0": - "integrity" "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==" - "resolved" "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "ansi-escapes" "^4.2.1" - "supports-hyperlinks" "^2.0.0" - -"terser-webpack-plugin@^5.1.3": - "integrity" "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==" - "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz" - "version" "5.3.6" - dependencies: - "@jridgewell/trace-mapping" "^0.3.14" - "jest-worker" "^27.4.5" - "schema-utils" "^3.1.1" - "serialize-javascript" "^6.0.0" - "terser" "^5.14.1" - -"terser@^5.14.1": - "integrity" "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==" - "resolved" "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz" - "version" "5.15.1" - dependencies: - "@jridgewell/source-map" "^0.3.2" - "acorn" "^8.5.0" - "commander" "^2.20.0" - "source-map-support" "~0.5.20" - -"test-exclude@^6.0.0": - "integrity" "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==" - "resolved" "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "@istanbuljs/schema" "^0.1.2" - "glob" "^7.1.4" - "minimatch" "^3.0.4" - -"text-encoding-utf-8@^1.0.2": - "integrity" "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" - "resolved" "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz" - "version" "1.0.2" - -"text-extensions@^1.0.0": - "integrity" "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==" - "resolved" "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" - "version" "1.9.0" - -"text-table@^0.2.0": - "integrity" "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - "version" "0.2.0" - -"then-request@^6.0.0": - "integrity" "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==" - "resolved" "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "@types/concat-stream" "^1.6.0" - "@types/form-data" "0.0.33" - "@types/node" "^8.0.0" - "@types/qs" "^6.2.31" - "caseless" "~0.12.0" - "concat-stream" "^1.6.0" - "form-data" "^2.2.0" - "http-basic" "^8.1.1" - "http-response-object" "^3.0.1" - "promise" "^8.0.0" - "qs" "^6.4.0" - -"through@^2.3.4", "through@^2.3.6", "through@^2.3.8", "through@>=2.2.7 <3", "through@2": - "integrity" "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - "version" "2.3.8" - -"through2@^2.0.0": - "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" - "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - "version" "2.0.5" - dependencies: - "readable-stream" "~2.3.6" - "xtend" "~4.0.1" - -"through2@^4.0.0": - "integrity" "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==" - "resolved" "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "readable-stream" "3" - -"timed-out@^4.0.1": - "integrity" "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==" - "resolved" "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" - "version" "4.0.1" - -"tmp@^0.0.33", "tmp@0.0.33": - "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" - "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - "version" "0.0.33" - dependencies: - "os-tmpdir" "~1.0.2" - -"tmp@~0.2.1": - "integrity" "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==" - "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - "version" "0.2.1" - dependencies: - "rimraf" "^3.0.0" - -"tmpl@1.0.5": - "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" - "version" "1.0.5" - -"to-fast-properties@^2.0.0": - "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - "version" "2.0.0" - -"to-readable-stream@^1.0.0": - "integrity" "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - "resolved" "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" - "version" "1.0.0" - -"to-regex-range@^5.0.1": - "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "is-number" "^7.0.0" - -"toggle-selection@^1.0.6": - "integrity" "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" - "resolved" "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz" - "version" "1.0.6" - -"toidentifier@1.0.1": - "integrity" "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - "version" "1.0.1" - -"tough-cookie@^2.3.3", "tough-cookie@~2.5.0": - "integrity" "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==" - "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "psl" "^1.1.28" - "punycode" "^2.1.1" - -"tr46@~0.0.3": - "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - "version" "0.0.3" - -"tree-kill@^1.2.2": - "integrity" "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" - "resolved" "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" - "version" "1.2.2" - -"treeverse@^2.0.0": - "integrity" "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==" - "resolved" "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz" - "version" "2.0.0" - -"trim-newlines@^3.0.0": - "integrity" "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" - "resolved" "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" - "version" "3.0.1" - -"ts-command-line-args@^2.2.0": - "integrity" "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==" - "resolved" "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz" - "version" "2.3.1" - dependencies: - "chalk" "^4.1.0" - "command-line-args" "^5.1.1" - "command-line-usage" "^6.1.0" - "string-format" "^2.0.0" - -"ts-custom-error@^3.3.1": - "integrity" "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==" - "resolved" "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.3.1.tgz" - "version" "3.3.1" - -"ts-essentials@^1.0.0": - "integrity" "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==" - "resolved" "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz" - "version" "1.0.4" - -"ts-essentials@^7.0.1": - "integrity" "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==" - "resolved" "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz" - "version" "7.0.3" - -"ts-generator@^0.1.1": - "integrity" "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==" - "resolved" "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz" - "version" "0.1.1" - dependencies: - "@types/mkdirp" "^0.5.2" - "@types/prettier" "^2.1.1" - "@types/resolve" "^0.0.8" - "chalk" "^2.4.1" - "glob" "^7.1.2" - "mkdirp" "^0.5.1" - "prettier" "^2.1.2" - "resolve" "^1.8.1" - "ts-essentials" "^1.0.0" - -"ts-node@*", "ts-node@^10.7.0", "ts-node@^10.9.1", "ts-node@>=8.0.0", "ts-node@>=9.0.0": - "integrity" "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==" - "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" - "version" "10.9.1" - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - "acorn" "^8.4.1" - "acorn-walk" "^8.1.1" - "arg" "^4.1.0" - "create-require" "^1.1.0" - "diff" "^4.0.1" - "make-error" "^1.1.1" - "v8-compile-cache-lib" "^3.0.1" - "yn" "3.1.1" - -"tsconfig-paths@^3.14.1", "tsconfig-paths@^3.9.0": - "integrity" "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==" - "resolved" "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" - "version" "3.14.1" - dependencies: - "@types/json5" "^0.0.29" - "json5" "^1.0.1" - "minimist" "^1.2.6" - "strip-bom" "^3.0.0" - -"tslib@^1.13.0", "tslib@^1.8.1", "tslib@^1.9.3": - "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - "version" "1.14.1" - -"tslib@^2.0.0": - "integrity" "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" - "version" "2.4.1" - -"tslib@^2.1.0": - "integrity" "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" - "version" "2.4.1" - -"tslib@^2.3.0": - "integrity" "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" - "version" "2.4.1" - -"tslib@^2.3.1": - "integrity" "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" - "version" "2.4.1" - -"tslib@^2.4.0": - "integrity" "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" - "version" "2.4.1" - -"tslint-config-prettier@^1.18.0": - "integrity" "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==" - "resolved" "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz" - "version" "1.18.0" - -"tslint@^6.1.3": - "integrity" "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==" - "resolved" "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz" - "version" "6.1.3" - dependencies: - "@babel/code-frame" "^7.0.0" - "builtin-modules" "^1.1.1" - "chalk" "^2.3.0" - "commander" "^2.12.1" - "diff" "^4.0.1" - "glob" "^7.1.1" - "js-yaml" "^3.13.1" - "minimatch" "^3.0.4" - "mkdirp" "^0.5.3" - "resolve" "^1.3.2" - "semver" "^5.3.0" - "tslib" "^1.13.0" - "tsutils" "^2.29.0" - -"tsort@0.0.1": - "integrity" "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" - "resolved" "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" - "version" "0.0.1" - -"tsutils@^2.29.0": - "integrity" "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==" - "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz" - "version" "2.29.0" - dependencies: - "tslib" "^1.8.1" - -"tsutils@^3.21.0": - "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" - "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - "version" "3.21.0" - dependencies: - "tslib" "^1.8.1" - -"tunnel-agent@^0.6.0": - "integrity" "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==" - "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - "version" "0.6.0" - dependencies: - "safe-buffer" "^5.0.1" - -"tweetnacl-util@^0.15.1": - "integrity" "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" - "resolved" "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz" - "version" "0.15.1" - -"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": - "integrity" "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - "version" "0.14.5" - -"tweetnacl@^1.0.3": - "integrity" "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" - "version" "1.0.3" - -"type-check@^0.4.0": - "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - "version" "0.4.0" - dependencies: - "prelude-ls" "^1.2.1" - -"type-check@~0.3.2": - "integrity" "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" - "version" "0.3.2" - dependencies: - "prelude-ls" "~1.1.2" - -"type-check@~0.4.0": - "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - "version" "0.4.0" - dependencies: - "prelude-ls" "^1.2.1" - -"type-detect@^4.0.0", "type-detect@^4.0.5", "type-detect@4.0.8": - "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" - "version" "4.0.8" - -"type-fest@^0.18.0": - "integrity" "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" - "version" "0.18.1" - -"type-fest@^0.20.2": - "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - "version" "0.20.2" - -"type-fest@^0.21.3": - "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - "version" "0.21.3" - -"type-fest@^0.4.1": - "integrity" "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz" - "version" "0.4.1" - -"type-fest@^0.6.0": - "integrity" "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" - "version" "0.6.0" - -"type-fest@^0.7.1": - "integrity" "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz" - "version" "0.7.1" - -"type-fest@^0.8.1": - "integrity" "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - "version" "0.8.1" - -"type-is@~1.6.18": - "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" - "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - "version" "1.6.18" - dependencies: - "media-typer" "0.3.0" - "mime-types" "~2.1.24" - -"type@^1.0.1": - "integrity" "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - "resolved" "https://registry.npmjs.org/type/-/type-1.2.0.tgz" - "version" "1.2.0" - -"type@^2.7.2": - "integrity" "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - "resolved" "https://registry.npmjs.org/type/-/type-2.7.2.tgz" - "version" "2.7.2" - -"typechain@^5.1.2", "typechain@^7.0.0", "typechain@^8.1.0": - "integrity" "sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ==" - "resolved" "https://registry.npmjs.org/typechain/-/typechain-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "@types/prettier" "^2.1.1" - "debug" "^4.1.1" - "fs-extra" "^7.0.0" - "glob" "^7.1.6" - "js-sha3" "^0.8.0" - "lodash" "^4.17.15" - "mkdirp" "^1.0.4" - "prettier" "^2.1.2" - "ts-command-line-args" "^2.2.0" - "ts-essentials" "^7.0.1" - -"typedarray-to-buffer@^3.1.5", "typedarray-to-buffer@3.1.5": - "integrity" "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==" - "resolved" "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - "version" "3.1.5" - dependencies: - "is-typedarray" "^1.0.0" - -"typedarray@^0.0.6": - "integrity" "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" - "version" "0.0.6" - -"typescript@*", "typescript@^3 || ^4", "typescript@^4.3.5", "typescript@^4.6.3", "typescript@^4.7.4", "typescript@>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev", "typescript@>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev", "typescript@>=2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.7.0", "typescript@>=4.0.0", "typescript@>=4.1.0", "typescript@>=4.5.0": - "integrity" "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" - "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" - "version" "4.8.4" - -"typical@^4.0.0": - "integrity" "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" - "resolved" "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz" - "version" "4.0.0" - -"typical@^5.2.0": - "integrity" "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" - "resolved" "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz" - "version" "5.2.0" - -"uglify-js@^3.1.4": - "integrity" "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==" - "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" - "version" "3.17.4" - -"ultron@~1.1.0": - "integrity" "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - "resolved" "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz" - "version" "1.1.1" - -"unbox-primitive@^1.0.2": - "integrity" "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==" - "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "call-bind" "^1.0.2" - "has-bigints" "^1.0.2" - "has-symbols" "^1.0.3" - "which-boxed-primitive" "^1.0.2" - -"undici@^5.4.0": - "integrity" "sha512-zMLamCG62PGjd9HHMpo05bSLvvwWOZgGeiWlN/vlqu3+lRo3elxktVGEyLMX+IO7c2eflLjcW74AlkhEZm15mg==" - "resolved" "https://registry.npmjs.org/undici/-/undici-5.12.0.tgz" - "version" "5.12.0" - dependencies: - "busboy" "^1.6.0" - -"unique-filename@^2.0.0": - "integrity" "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==" - "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "unique-slug" "^3.0.0" - -"unique-slug@^3.0.0": - "integrity" "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==" - "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "imurmurhash" "^0.1.4" - -"universal-user-agent@^6.0.0": - "integrity" "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - "resolved" "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" - "version" "6.0.0" - -"universalify@^0.1.0": - "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - "version" "0.1.2" - -"universalify@^2.0.0": - "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - "version" "2.0.0" - -"unload@^2.3.1": - "integrity" "sha512-MUZEiDqvAN9AIDRbbBnVYVvfcR6DrjCqeU2YQMmliFZl9uaBUjTkhuDQkBiyAy8ad5bx1TXVbqZ3gg7namsWjA==" - "resolved" "https://registry.npmjs.org/unload/-/unload-2.3.1.tgz" - "version" "2.3.1" - dependencies: - "@babel/runtime" "^7.6.2" - "detect-node" "2.1.0" - -"unpipe@~1.0.0", "unpipe@1.0.0": - "integrity" "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - "version" "1.0.0" - -"upath@^2.0.1": - "integrity" "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==" - "resolved" "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz" - "version" "2.0.1" - -"update-browserslist-db@^1.0.9": - "integrity" "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==" - "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "escalade" "^3.1.1" - "picocolors" "^1.0.0" - -"uri-js@^4.2.2": - "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" - "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - "version" "4.4.1" - dependencies: - "punycode" "^2.1.0" - -"url-parse-lax@^3.0.0": - "integrity" "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==" - "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "prepend-http" "^2.0.0" - -"url-parse@~1.5.10": - "integrity" "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==" - "resolved" "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" - "version" "1.5.10" - dependencies: - "querystringify" "^2.1.1" - "requires-port" "^1.0.0" - -"url-set-query@^1.0.0": - "integrity" "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" - "resolved" "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz" - "version" "1.0.0" - -"utf-8-validate@^5.0.2": - "integrity" "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==" - "resolved" "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz" - "version" "5.0.10" - dependencies: - "node-gyp-build" "^4.3.0" - -"utf-8-validate@5.0.7": - "integrity" "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==" - "resolved" "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz" - "version" "5.0.7" - dependencies: - "node-gyp-build" "^4.3.0" - -"utf8@^3.0.0", "utf8@3.0.0": - "integrity" "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - "resolved" "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz" - "version" "3.0.0" - -"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": - "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - "version" "1.0.2" - -"util@^0.10.3": - "integrity" "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==" - "resolved" "https://registry.npmjs.org/util/-/util-0.10.4.tgz" - "version" "0.10.4" - dependencies: - "inherits" "2.0.3" - -"util@^0.12.0": - "integrity" "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==" - "resolved" "https://registry.npmjs.org/util/-/util-0.12.5.tgz" - "version" "0.12.5" - dependencies: - "inherits" "^2.0.3" - "is-arguments" "^1.0.4" - "is-generator-function" "^1.0.7" - "is-typed-array" "^1.1.3" - "which-typed-array" "^1.1.2" - -"utils-merge@1.0.1": - "integrity" "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - "version" "1.0.1" - -"uuid@^3.3.2": - "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - "version" "3.4.0" - -"uuid@^8.3.2": - "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - "version" "8.3.2" - -"uuid@2.0.1": - "integrity" "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz" - "version" "2.0.1" - -"uuid@3.3.2": - "integrity" "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz" - "version" "3.3.2" - -"v8-compile-cache-lib@^3.0.1": - "integrity" "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - "resolved" "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - "version" "3.0.1" - -"v8-compile-cache@2.3.0": - "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - "version" "2.3.0" - -"v8-to-istanbul@^9.0.1": - "integrity" "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==" - "resolved" "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz" - "version" "9.0.1" - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - "convert-source-map" "^1.6.0" - -"validate-npm-package-license@^3.0.1", "validate-npm-package-license@^3.0.4": - "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" - "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "spdx-correct" "^3.0.0" - "spdx-expression-parse" "^3.0.0" - -"validate-npm-package-name@^3.0.0": - "integrity" "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==" - "resolved" "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "builtins" "^1.0.3" - -"validate-npm-package-name@^4.0.0": - "integrity" "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==" - "resolved" "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "builtins" "^5.0.0" - -"varint@^5.0.0": - "integrity" "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - "resolved" "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" - "version" "5.0.2" - -"vary@^1", "vary@~1.1.2": - "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - "version" "1.1.2" - -"verror@1.10.0": - "integrity" "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==" - "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - "version" "1.10.0" - dependencies: - "assert-plus" "^1.0.0" - "core-util-is" "1.0.2" - "extsprintf" "^1.2.0" - -"void-elements@3.1.0": - "integrity" "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==" - "resolved" "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" - "version" "3.1.0" - -"walk-up-path@^1.0.0": - "integrity" "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==" - "resolved" "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz" - "version" "1.0.0" - -"walker@^1.0.8": - "integrity" "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==" - "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" - "version" "1.0.8" - dependencies: - "makeerror" "1.0.12" - -"watchpack@^2.4.0": - "integrity" "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==" - "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" - "version" "2.4.0" - dependencies: - "glob-to-regexp" "^0.4.1" - "graceful-fs" "^4.1.2" - -"wcwidth@^1.0.0", "wcwidth@^1.0.1": - "integrity" "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" - "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "defaults" "^1.0.3" - -"web3-bzz@1.7.4": - "integrity" "sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q==" - "resolved" "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "@types/node" "^12.12.6" - "got" "9.6.0" - "swarm-js" "^0.1.40" - -"web3-bzz@1.8.0": - "integrity" "sha512-caDtdKeLi7+2Vb+y+cq2yyhkNjnxkFzVW0j1DtemarBg3dycG1iEl75CVQMLNO6Wkg+HH9tZtRnUyFIe5LIUeQ==" - "resolved" "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@types/node" "^12.12.6" - "got" "12.1.0" - "swarm-js" "^0.1.40" - -"web3-core-helpers@1.7.4": - "integrity" "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==" - "resolved" "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "web3-eth-iban" "1.7.4" - "web3-utils" "1.7.4" - -"web3-core-helpers@1.8.0": - "integrity" "sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw==" - "resolved" "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "web3-eth-iban" "1.8.0" - "web3-utils" "1.8.0" - -"web3-core-method@1.7.4": - "integrity" "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==" - "resolved" "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "@ethersproject/transactions" "^5.6.2" - "web3-core-helpers" "1.7.4" - "web3-core-promievent" "1.7.4" - "web3-core-subscriptions" "1.7.4" - "web3-utils" "1.7.4" - -"web3-core-method@1.8.0": - "integrity" "sha512-c94RAzo3gpXwf2rf8rL8C77jOzNWF4mXUoUfZYYsiY35cJFd46jQDPI00CB5+ZbICTiA5mlVzMj4e7jAsTqiLA==" - "resolved" "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@ethersproject/transactions" "^5.6.2" - "web3-core-helpers" "1.8.0" - "web3-core-promievent" "1.8.0" - "web3-core-subscriptions" "1.8.0" - "web3-utils" "1.8.0" - -"web3-core-promievent@1.7.4": - "integrity" "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==" - "resolved" "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "eventemitter3" "4.0.4" - -"web3-core-promievent@1.8.0": - "integrity" "sha512-FGLyjAuOaAQ+ZhV6iuw9tg/9WvIkSZXKHQ4mdTyQ8MxVraOtFivOCbuLLsGgapfHYX+RPxsc1j1YzQjKoupagQ==" - "resolved" "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "eventemitter3" "4.0.4" - -"web3-core-requestmanager@1.7.4": - "integrity" "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==" - "resolved" "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "util" "^0.12.0" - "web3-core-helpers" "1.7.4" - "web3-providers-http" "1.7.4" - "web3-providers-ipc" "1.7.4" - "web3-providers-ws" "1.7.4" - -"web3-core-requestmanager@1.8.0": - "integrity" "sha512-2AoYCs3Owl5foWcf4uKPONyqFygSl9T54L8b581U16nsUirjhoTUGK/PBhMDVcLCmW4QQmcY5A8oPFpkQc1TTg==" - "resolved" "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "util" "^0.12.0" - "web3-core-helpers" "1.8.0" - "web3-providers-http" "1.8.0" - "web3-providers-ipc" "1.8.0" - "web3-providers-ws" "1.8.0" - -"web3-core-subscriptions@1.7.4": - "integrity" "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==" - "resolved" "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "eventemitter3" "4.0.4" - "web3-core-helpers" "1.7.4" - -"web3-core-subscriptions@1.8.0": - "integrity" "sha512-7lHVRzDdg0+Gcog55lG6Q3D8JV+jN+4Ly6F8cSn9xFUAwOkdbgdWsjknQG7t7CDWy21DQkvdiY2BJF8S68AqOA==" - "resolved" "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "eventemitter3" "4.0.4" - "web3-core-helpers" "1.8.0" - -"web3-core@^1.7.1", "web3-core@^1.8.0", "web3-core@1.8.0": - "integrity" "sha512-9sCA+Z02ci6zoY2bAquFiDjujRwmSKHiSGi4B8IstML8okSytnzXk1izHYSynE7ahIkguhjWAuXFvX76F5rAbA==" - "resolved" "https://registry.npmjs.org/web3-core/-/web3-core-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@types/bn.js" "^5.1.0" - "@types/node" "^12.12.6" - "bignumber.js" "^9.0.0" - "web3-core-helpers" "1.8.0" - "web3-core-method" "1.8.0" - "web3-core-requestmanager" "1.8.0" - "web3-utils" "1.8.0" - -"web3-core@1.7.4": - "integrity" "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==" - "resolved" "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "@types/bn.js" "^5.1.0" - "@types/node" "^12.12.6" - "bignumber.js" "^9.0.0" - "web3-core-helpers" "1.7.4" - "web3-core-method" "1.7.4" - "web3-core-requestmanager" "1.7.4" - "web3-utils" "1.7.4" - -"web3-eth-abi@1.7.4": - "integrity" "sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg==" - "resolved" "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "@ethersproject/abi" "^5.6.3" - "web3-utils" "1.7.4" - -"web3-eth-abi@1.8.0": - "integrity" "sha512-xPeMb2hS9YLQK/Q5YZpkcmzoRGM+/R8bogSrYHhNC3hjZSSU0YRH+1ZKK0f9YF4qDZaPMI8tKWIMSCDIpjG6fg==" - "resolved" "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@ethersproject/abi" "^5.6.3" - "web3-utils" "1.8.0" - -"web3-eth-accounts@1.7.4": - "integrity" "sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw==" - "resolved" "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "@ethereumjs/common" "^2.5.0" - "@ethereumjs/tx" "^3.3.2" - "crypto-browserify" "3.12.0" - "eth-lib" "0.2.8" - "ethereumjs-util" "^7.0.10" - "scrypt-js" "^3.0.1" - "uuid" "3.3.2" - "web3-core" "1.7.4" - "web3-core-helpers" "1.7.4" - "web3-core-method" "1.7.4" - "web3-utils" "1.7.4" - -"web3-eth-accounts@1.8.0": - "integrity" "sha512-HQ/MDSv4bexwJLvnqsM6xpGE7c2NVOqyhzOZFyMUKXbIwIq85T3TaLnM9pCN7XqMpDcfxqiZ3q43JqQVkzHdmw==" - "resolved" "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@ethereumjs/common" "^2.5.0" - "@ethereumjs/tx" "^3.3.2" - "crypto-browserify" "3.12.0" - "eth-lib" "0.2.8" - "ethereumjs-util" "^7.0.10" - "scrypt-js" "^3.0.1" - "uuid" "3.3.2" - "web3-core" "1.8.0" - "web3-core-helpers" "1.8.0" - "web3-core-method" "1.8.0" - "web3-utils" "1.8.0" - -"web3-eth-contract@1.7.4": - "integrity" "sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ==" - "resolved" "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "@types/bn.js" "^5.1.0" - "web3-core" "1.7.4" - "web3-core-helpers" "1.7.4" - "web3-core-method" "1.7.4" - "web3-core-promievent" "1.7.4" - "web3-core-subscriptions" "1.7.4" - "web3-eth-abi" "1.7.4" - "web3-utils" "1.7.4" - -"web3-eth-contract@1.8.0": - "integrity" "sha512-6xeXhW2YoCrz2Ayf2Vm4srWiMOB6LawkvxWJDnUWJ8SMATg4Pgu42C/j8rz/enXbYWt2IKuj0kk8+QszxQbK+Q==" - "resolved" "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@types/bn.js" "^5.1.0" - "web3-core" "1.8.0" - "web3-core-helpers" "1.8.0" - "web3-core-method" "1.8.0" - "web3-core-promievent" "1.8.0" - "web3-core-subscriptions" "1.8.0" - "web3-eth-abi" "1.8.0" - "web3-utils" "1.8.0" - -"web3-eth-ens@1.7.4": - "integrity" "sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA==" - "resolved" "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "content-hash" "^2.5.2" - "eth-ens-namehash" "2.0.8" - "web3-core" "1.7.4" - "web3-core-helpers" "1.7.4" - "web3-core-promievent" "1.7.4" - "web3-eth-abi" "1.7.4" - "web3-eth-contract" "1.7.4" - "web3-utils" "1.7.4" - -"web3-eth-ens@1.8.0": - "integrity" "sha512-/eFbQEwvsMOEiOhw9/iuRXCsPkqAmHHWuFOrThQkozRgcnSTRnvxkkRC/b6koiT5/HaKeUs4yQDg+/ixsIxZxA==" - "resolved" "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "content-hash" "^2.5.2" - "eth-ens-namehash" "2.0.8" - "web3-core" "1.8.0" - "web3-core-helpers" "1.8.0" - "web3-core-promievent" "1.8.0" - "web3-eth-abi" "1.8.0" - "web3-eth-contract" "1.8.0" - "web3-utils" "1.8.0" - -"web3-eth-iban@1.7.4": - "integrity" "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==" - "resolved" "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "bn.js" "^5.2.1" - "web3-utils" "1.7.4" - -"web3-eth-iban@1.8.0": - "integrity" "sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg==" - "resolved" "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "bn.js" "^5.2.1" - "web3-utils" "1.8.0" - -"web3-eth-personal@1.7.4": - "integrity" "sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g==" - "resolved" "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "@types/node" "^12.12.6" - "web3-core" "1.7.4" - "web3-core-helpers" "1.7.4" - "web3-core-method" "1.7.4" - "web3-net" "1.7.4" - "web3-utils" "1.7.4" - -"web3-eth-personal@1.8.0": - "integrity" "sha512-L7FT4nR3HmsfZyIAhFpEctKkYGOjRC2h6iFKs9gnFCHZga8yLcYcGaYOBIoYtaKom99MuGBoosayWt/Twh7F5A==" - "resolved" "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "@types/node" "^12.12.6" - "web3-core" "1.8.0" - "web3-core-helpers" "1.8.0" - "web3-core-method" "1.8.0" - "web3-net" "1.8.0" - "web3-utils" "1.8.0" - -"web3-eth@1.7.4": - "integrity" "sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug==" - "resolved" "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "web3-core" "1.7.4" - "web3-core-helpers" "1.7.4" - "web3-core-method" "1.7.4" - "web3-core-subscriptions" "1.7.4" - "web3-eth-abi" "1.7.4" - "web3-eth-accounts" "1.7.4" - "web3-eth-contract" "1.7.4" - "web3-eth-ens" "1.7.4" - "web3-eth-iban" "1.7.4" - "web3-eth-personal" "1.7.4" - "web3-net" "1.7.4" - "web3-utils" "1.7.4" - -"web3-eth@1.8.0": - "integrity" "sha512-hist52os3OT4TQFB/GxPSMxTh3995sz6LPvQpPvj7ktSbpg9RNSFaSsPlCT63wUAHA3PZb1FemkAIeQM5t72Lw==" - "resolved" "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "web3-core" "1.8.0" - "web3-core-helpers" "1.8.0" - "web3-core-method" "1.8.0" - "web3-core-subscriptions" "1.8.0" - "web3-eth-abi" "1.8.0" - "web3-eth-accounts" "1.8.0" - "web3-eth-contract" "1.8.0" - "web3-eth-ens" "1.8.0" - "web3-eth-iban" "1.8.0" - "web3-eth-personal" "1.8.0" - "web3-net" "1.8.0" - "web3-utils" "1.8.0" - -"web3-net@1.7.4": - "integrity" "sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg==" - "resolved" "https://registry.npmjs.org/web3-net/-/web3-net-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "web3-core" "1.7.4" - "web3-core-method" "1.7.4" - "web3-utils" "1.7.4" - -"web3-net@1.8.0": - "integrity" "sha512-kX6EAacK7QrOe7DOh0t5yHS5q2kxZmTCxPVwSz9io9xBeE4n4UhmzGJ/VfhP2eM3OPKYeypcR3LEO6zZ8xn2vw==" - "resolved" "https://registry.npmjs.org/web3-net/-/web3-net-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "web3-core" "1.8.0" - "web3-core-method" "1.8.0" - "web3-utils" "1.8.0" - -"web3-provider-engine@16.0.3": - "integrity" "sha512-Q3bKhGqLfMTdLvkd4TtkGYJHcoVQ82D1l8jTIwwuJp/sAp7VHnRYb9YJ14SW/69VMWoOhSpPLZV2tWb9V0WJoA==" - "resolved" "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-16.0.3.tgz" - "version" "16.0.3" - dependencies: - "@ethereumjs/tx" "^3.3.0" - "async" "^2.5.0" - "backoff" "^2.5.0" - "clone" "^2.0.0" - "cross-fetch" "^2.1.0" - "eth-block-tracker" "^4.4.2" - "eth-json-rpc-filters" "^4.2.1" - "eth-json-rpc-infura" "^5.1.0" - "eth-json-rpc-middleware" "^6.0.0" - "eth-rpc-errors" "^3.0.0" - "eth-sig-util" "^1.4.2" - "ethereumjs-block" "^1.2.2" - "ethereumjs-util" "^5.1.5" - "ethereumjs-vm" "^2.3.4" - "json-stable-stringify" "^1.0.1" - "promise-to-callback" "^1.0.0" - "readable-stream" "^2.2.9" - "request" "^2.85.0" - "semaphore" "^1.0.3" - "ws" "^5.1.1" - "xhr" "^2.2.0" - "xtend" "^4.0.1" - -"web3-providers-http@1.7.4": - "integrity" "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==" - "resolved" "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "web3-core-helpers" "1.7.4" - "xhr2-cookies" "1.1.0" - -"web3-providers-http@1.8.0": - "integrity" "sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw==" - "resolved" "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "abortcontroller-polyfill" "^1.7.3" - "cross-fetch" "^3.1.4" - "es6-promise" "^4.2.8" - "web3-core-helpers" "1.8.0" - -"web3-providers-ipc@1.7.4": - "integrity" "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==" - "resolved" "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "oboe" "2.1.5" - "web3-core-helpers" "1.7.4" - -"web3-providers-ipc@1.8.0": - "integrity" "sha512-tAXHtVXNUOgehaBU8pzAlB3qhjn/PRpjdzEjzHNFqtRRTwzSEKOJxFeEhaUA4FzHnTlbnrs8ujHWUitcp1elfg==" - "resolved" "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "oboe" "2.1.5" - "web3-core-helpers" "1.8.0" - -"web3-providers-ws@1.7.4": - "integrity" "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==" - "resolved" "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "eventemitter3" "4.0.4" - "web3-core-helpers" "1.7.4" - "websocket" "^1.0.32" - -"web3-providers-ws@1.8.0": - "integrity" "sha512-bcZtSifsqyJxwkfQYamfdIRp4nhj9eJd7cxHg1uUkfLJK125WP96wyJL1xbPt7qt0MpfnTFn8/UuIqIB6nFENg==" - "resolved" "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "eventemitter3" "4.0.4" - "web3-core-helpers" "1.8.0" - "websocket" "^1.0.32" - -"web3-shh@1.7.4": - "integrity" "sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A==" - "resolved" "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "web3-core" "1.7.4" - "web3-core-method" "1.7.4" - "web3-core-subscriptions" "1.7.4" - "web3-net" "1.7.4" - -"web3-shh@1.8.0": - "integrity" "sha512-DNRgSa9Jf9xYFUGKSMylrf+zt3MPjhI2qF+UWX07o0y3+uf8zalDGiJOWvIS4upAsdPiKKVJ7co+Neof47OMmg==" - "resolved" "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "web3-core" "1.8.0" - "web3-core-method" "1.8.0" - "web3-core-subscriptions" "1.8.0" - "web3-net" "1.8.0" - -"web3-utils@^1.3.0", "web3-utils@^1.7.1", "web3-utils@^1.8.0", "web3-utils@1.8.0": - "integrity" "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==" - "resolved" "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "bn.js" "^5.2.1" - "ethereum-bloom-filters" "^1.0.6" - "ethereumjs-util" "^7.1.0" - "ethjs-unit" "0.1.6" - "number-to-bn" "1.7.0" - "randombytes" "^2.1.0" - "utf8" "3.0.0" - -"web3-utils@1.7.4": - "integrity" "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==" - "resolved" "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "bn.js" "^5.2.1" - "ethereum-bloom-filters" "^1.0.6" - "ethereumjs-util" "^7.1.0" - "ethjs-unit" "0.1.6" - "number-to-bn" "1.7.0" - "randombytes" "^2.1.0" - "utf8" "3.0.0" - -"web3@*": - "integrity" "sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA==" - "resolved" "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "web3-bzz" "1.8.0" - "web3-core" "1.8.0" - "web3-eth" "1.8.0" - "web3-eth-personal" "1.8.0" - "web3-net" "1.8.0" - "web3-shh" "1.8.0" - "web3-utils" "1.8.0" - -"web3@^1.0.0-beta.36", "web3@1.7.4": - "integrity" "sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A==" - "resolved" "https://registry.npmjs.org/web3/-/web3-1.7.4.tgz" - "version" "1.7.4" - dependencies: - "web3-bzz" "1.7.4" - "web3-core" "1.7.4" - "web3-eth" "1.7.4" - "web3-eth-personal" "1.7.4" - "web3-net" "1.7.4" - "web3-shh" "1.7.4" - "web3-utils" "1.7.4" - -"web3@^1.8.0": - "integrity" "sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA==" - "resolved" "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "web3-bzz" "1.8.0" - "web3-core" "1.8.0" - "web3-eth" "1.8.0" - "web3-eth-personal" "1.8.0" - "web3-net" "1.8.0" - "web3-shh" "1.8.0" - "web3-utils" "1.8.0" - -"webidl-conversions@^3.0.0": - "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - "version" "3.0.1" - -"webpack-cli@^4.10.0", "webpack-cli@4.x.x": - "integrity" "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==" - "resolved" "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz" - "version" "4.10.0" - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.2.0" - "@webpack-cli/info" "^1.5.0" - "@webpack-cli/serve" "^1.7.0" - "colorette" "^2.0.14" - "commander" "^7.0.0" - "cross-spawn" "^7.0.3" - "fastest-levenshtein" "^1.0.12" - "import-local" "^3.0.2" - "interpret" "^2.2.0" - "rechoir" "^0.7.0" - "webpack-merge" "^5.7.3" - -"webpack-merge@^5.7.3": - "integrity" "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==" - "resolved" "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" - "version" "5.8.0" - dependencies: - "clone-deep" "^4.0.1" - "wildcard" "^2.0.0" - -"webpack-sources@^3.2.3": - "integrity" "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" - "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" - "version" "3.2.3" - -"webpack@^5.1.0", "webpack@^5.74.0", "webpack@4.x.x || 5.x.x": - "integrity" "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==" - "resolved" "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz" - "version" "5.74.0" - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "acorn" "^8.7.1" - "acorn-import-assertions" "^1.7.6" - "browserslist" "^4.14.5" - "chrome-trace-event" "^1.0.2" - "enhanced-resolve" "^5.10.0" - "es-module-lexer" "^0.9.0" - "eslint-scope" "5.1.1" - "events" "^3.2.0" - "glob-to-regexp" "^0.4.1" - "graceful-fs" "^4.2.9" - "json-parse-even-better-errors" "^2.3.1" - "loader-runner" "^4.2.0" - "mime-types" "^2.1.27" - "neo-async" "^2.6.2" - "schema-utils" "^3.1.0" - "tapable" "^2.1.1" - "terser-webpack-plugin" "^5.1.3" - "watchpack" "^2.4.0" - "webpack-sources" "^3.2.3" - -"websocket@^1.0.32": - "integrity" "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==" - "resolved" "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz" - "version" "1.0.34" - dependencies: - "bufferutil" "^4.0.1" - "debug" "^2.2.0" - "es5-ext" "^0.10.50" - "typedarray-to-buffer" "^3.1.5" - "utf-8-validate" "^5.0.2" - "yaeti" "^0.0.6" - -"whatwg-fetch@^2.0.4": - "integrity" "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - "resolved" "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz" - "version" "2.0.4" - -"whatwg-url@^5.0.0": - "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" - "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "tr46" "~0.0.3" - "webidl-conversions" "^3.0.0" - -"which-boxed-primitive@^1.0.2": - "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" - "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - "version" "1.0.2" - 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": - "integrity" "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" - "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" - "version" "2.0.0" - -"which-typed-array@^1.1.2": - "integrity" "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==" - "resolved" "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" - "version" "1.1.9" - dependencies: - "available-typed-arrays" "^1.0.5" - "call-bind" "^1.0.2" - "for-each" "^0.3.3" - "gopd" "^1.0.1" - "has-tostringtag" "^1.0.0" - "is-typed-array" "^1.1.10" - -"which@^1.1.1": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "isexe" "^2.0.0" - -"which@^1.2.9": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "isexe" "^2.0.0" - -"which@^1.3.1": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "isexe" "^2.0.0" - -"which@^2.0.1", "which@^2.0.2", "which@2.0.2": - "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" - "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "isexe" "^2.0.0" - -"which@1.3.1": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "isexe" "^2.0.0" - -"wide-align@^1.1.5": - "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" - "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "string-width" "^1.0.2 || 2 || 3 || 4" - -"wide-align@1.1.3": - "integrity" "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==" - "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "string-width" "^1.0.2 || 2" - -"wildcard@^2.0.0": - "integrity" "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" - "resolved" "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz" - "version" "2.0.0" - -"word-wrap@^1.2.3", "word-wrap@~1.2.3": - "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - "version" "1.2.3" - -"wordwrap@^1.0.0": - "integrity" "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - "resolved" "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" - "version" "1.0.0" - -"wordwrapjs@^4.0.0": - "integrity" "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==" - "resolved" "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "reduce-flatten" "^2.0.0" - "typical" "^5.2.0" - -"workerpool@6.2.0": - "integrity" "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" - "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz" - "version" "6.2.0" - -"workerpool@6.2.1": - "integrity" "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" - "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" - "version" "6.2.1" - -"wrap-ansi@^5.1.0": - "integrity" "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "ansi-styles" "^3.2.0" - "string-width" "^3.0.0" - "strip-ansi" "^5.0.0" - -"wrap-ansi@^6.2.0": - "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - "version" "6.2.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - -"wrap-ansi@^7.0.0": - "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - -"wrappy@1": - "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - "version" "1.0.2" - -"write-file-atomic@^2.4.2": - "integrity" "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==" - "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" - "version" "2.4.3" - dependencies: - "graceful-fs" "^4.1.11" - "imurmurhash" "^0.1.4" - "signal-exit" "^3.0.2" - -"write-file-atomic@^3.0.0": - "integrity" "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==" - "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "imurmurhash" "^0.1.4" - "is-typedarray" "^1.0.0" - "signal-exit" "^3.0.2" - "typedarray-to-buffer" "^3.1.5" - -"write-file-atomic@^4.0.0", "write-file-atomic@^4.0.1": - "integrity" "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==" - "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "imurmurhash" "^0.1.4" - "signal-exit" "^3.0.7" - -"write-json-file@^3.2.0": - "integrity" "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==" - "resolved" "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "detect-indent" "^5.0.0" - "graceful-fs" "^4.1.15" - "make-dir" "^2.1.0" - "pify" "^4.0.1" - "sort-keys" "^2.0.0" - "write-file-atomic" "^2.4.2" - -"write-json-file@^4.3.0": - "integrity" "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==" - "resolved" "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "detect-indent" "^6.0.0" - "graceful-fs" "^4.1.15" - "is-plain-obj" "^2.0.0" - "make-dir" "^3.0.0" - "sort-keys" "^4.0.0" - "write-file-atomic" "^3.0.0" - -"write-pkg@^4.0.0": - "integrity" "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==" - "resolved" "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "sort-keys" "^2.0.0" - "type-fest" "^0.4.1" - "write-json-file" "^3.2.0" - -"ws@*", "ws@^7.4.5", "ws@^7.4.6": - "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" - "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - "version" "7.5.9" - -"ws@^3.0.0": - "integrity" "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==" - "resolved" "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz" - "version" "3.3.3" - dependencies: - "async-limiter" "~1.0.0" - "safe-buffer" "~5.1.0" - "ultron" "~1.1.0" - -"ws@^5.1.1": - "integrity" "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==" - "resolved" "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz" - "version" "5.2.3" - dependencies: - "async-limiter" "~1.0.0" - -"ws@^8.5.0": - "integrity" "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==" - "resolved" "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz" - "version" "8.11.0" - -"ws@^8.8.0": - "integrity" "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==" - "resolved" "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz" - "version" "8.11.0" - -"ws@~8.2.3": - "integrity" "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==" - "resolved" "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz" - "version" "8.2.3" - -"ws@7.4.6": - "integrity" "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" - "resolved" "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" - "version" "7.4.6" - -"ws@7.5.3": - "integrity" "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==" - "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz" - "version" "7.5.3" - -"xhr-request-promise@^0.1.2": - "integrity" "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==" - "resolved" "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz" - "version" "0.1.3" - dependencies: - "xhr-request" "^1.1.0" - -"xhr-request@^1.0.1", "xhr-request@^1.1.0": - "integrity" "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==" - "resolved" "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "buffer-to-arraybuffer" "^0.0.5" - "object-assign" "^4.1.1" - "query-string" "^5.0.1" - "simple-get" "^2.7.0" - "timed-out" "^4.0.1" - "url-set-query" "^1.0.0" - "xhr" "^2.0.4" - -"xhr@^2.0.4", "xhr@^2.2.0", "xhr@^2.3.3": - "integrity" "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==" - "resolved" "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz" - "version" "2.6.0" - dependencies: - "global" "~4.4.0" - "is-function" "^1.0.1" - "parse-headers" "^2.0.0" - "xtend" "^4.0.0" - -"xhr2-cookies@1.1.0": - "integrity" "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==" - "resolved" "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "cookiejar" "^2.1.1" - -"xmlhttprequest-ssl@~2.0.0": - "integrity" "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" - "resolved" "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz" - "version" "2.0.0" - -"xmlhttprequest@1.8.0": - "integrity" "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==" - "resolved" "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz" - "version" "1.8.0" - -"xtend@^4.0.0", "xtend@^4.0.1", "xtend@~4.0.0", "xtend@~4.0.1": - "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - "version" "4.0.2" - -"xtend@~2.1.1": - "integrity" "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==" - "resolved" "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "object-keys" "~0.4.0" - -"y18n@^4.0.0": - "integrity" "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" - "version" "4.0.3" - -"y18n@^5.0.5": - "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - "version" "5.0.8" - -"yaeti@^0.0.6": - "integrity" "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - "resolved" "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" - "version" "0.0.6" - -"yallist@^3.0.0", "yallist@^3.1.1": - "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - "version" "3.1.1" - -"yallist@^3.0.2": - "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - "version" "3.1.1" - -"yallist@^4.0.0": - "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - "version" "4.0.0" - -"yaml@^1.10.0", "yaml@^1.10.2": - "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" - "version" "1.10.2" - -"yargs-parser@^13.1.0": - "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" - "version" "13.1.2" - dependencies: - "camelcase" "^5.0.0" - "decamelize" "^1.2.0" - -"yargs-parser@^13.1.2", "yargs-parser@13.1.2": - "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" - "version" "13.1.2" - dependencies: - "camelcase" "^5.0.0" - "decamelize" "^1.2.0" - -"yargs-parser@^20.2.2": - "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - "version" "20.2.9" - -"yargs-parser@^20.2.3": - "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - "version" "20.2.9" - -"yargs-parser@^21.1.1", "yargs-parser@21.1.1": - "integrity" "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" - "version" "21.1.1" - -"yargs-parser@20.2.4": - "integrity" "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" - "version" "20.2.4" - -"yargs-unparser@1.6.0": - "integrity" "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==" - "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz" - "version" "1.6.0" - dependencies: - "flat" "^4.1.0" - "lodash" "^4.17.15" - "yargs" "^13.3.0" - -"yargs-unparser@2.0.0": - "integrity" "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==" - "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "camelcase" "^6.0.0" - "decamelize" "^4.0.0" - "flat" "^5.0.2" - "is-plain-obj" "^2.1.0" - -"yargs@^13.2.4": - "integrity" "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" - "version" "13.3.2" - dependencies: - "cliui" "^5.0.0" - "find-up" "^3.0.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" "^3.0.0" - "which-module" "^2.0.0" - "y18n" "^4.0.0" - "yargs-parser" "^13.1.2" - -"yargs@^13.3.0", "yargs@13.3.2": - "integrity" "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" - "version" "13.3.2" - dependencies: - "cliui" "^5.0.0" - "find-up" "^3.0.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" "^3.0.0" - "which-module" "^2.0.0" - "y18n" "^4.0.0" - "yargs-parser" "^13.1.2" - -"yargs@^16.2.0", "yargs@16.2.0": - "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - "version" "16.2.0" - dependencies: - "cliui" "^7.0.2" - "escalade" "^3.1.1" - "get-caller-file" "^2.0.5" - "require-directory" "^2.1.1" - "string-width" "^4.2.0" - "y18n" "^5.0.5" - "yargs-parser" "^20.2.2" - -"yargs@^17.3.1": - "integrity" "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz" - "version" "17.6.2" - 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" - -"yargs@^17.6.2": - "integrity" "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz" - "version" "17.6.2" - 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" - -"yargs@13.2.4": - "integrity" "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz" - "version" "13.2.4" - dependencies: - "cliui" "^5.0.0" - "find-up" "^3.0.0" - "get-caller-file" "^2.0.1" - "os-locale" "^3.1.0" - "require-directory" "^2.1.1" - "require-main-filename" "^2.0.0" - "set-blocking" "^2.0.0" - "string-width" "^3.0.0" - "which-module" "^2.0.0" - "y18n" "^4.0.0" - "yargs-parser" "^13.1.0" - -"yn@3.1.1": - "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" - "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - "version" "3.1.1" - -"yocto-queue@^0.1.0": - "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - "version" "0.1.0" From 316c14df2647d72266b2da39e5c948af4f972b09 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 9 Nov 2022 11:44:22 +0400 Subject: [PATCH 0264/1247] gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 6f62b2a4c..ae5f8b0f5 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ logs *.log yarn-debug.log* yarn-error.log* +yarn.lock +lockfiles # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json From 01f280e8f5c891b76007a37535346b329be61a57 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 9 Nov 2022 14:22:04 +0530 Subject: [PATCH 0265/1247] remove hardcoded chainConfig --- packages/web3-auth/src/SocialLogin.tsx | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/packages/web3-auth/src/SocialLogin.tsx b/packages/web3-auth/src/SocialLogin.tsx index 0dd09d0ce..0995496ef 100644 --- a/packages/web3-auth/src/SocialLogin.tsx +++ b/packages/web3-auth/src/SocialLogin.tsx @@ -179,13 +179,7 @@ class SocialLogin { return } try { - const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.METAMASK, { - chainConfig: { - chainNamespace: CHAIN_NAMESPACES.EIP155, - chainId: '0x1', - rpcTarget: 'https://rpc.ankr.com/eth' - } - }) + const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.METAMASK) const web3Provider = new ethers.providers.Web3Provider(web3authProvider!) const signer = web3Provider.getSigner() const gotAccount = await signer.getAddress() @@ -205,13 +199,7 @@ class SocialLogin { return } try { - const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.WALLET_CONNECT_V1, { - chainConfig: { - chainNamespace: CHAIN_NAMESPACES.EIP155, - chainId: '0x1', - rpcTarget: 'https://rpc.ankr.com/eth' - } - }) + const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.WALLET_CONNECT_V1) const web3Provider = new ethers.providers.Web3Provider(web3authProvider!) const signer = web3Provider.getSigner() const gotAccount = await signer.getAddress() From 56ca75cec053e5b8d9eba34a0da1bef33351fc4d Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 9 Nov 2022 13:53:36 +0400 Subject: [PATCH 0266/1247] minor refactor --- packages/smart-account/src/SmartAccount.ts | 2 -- packages/smart-account/src/providers/SmartAccountProvider.ts | 5 ++--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index f9b80612d..7d13674ba 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -92,8 +92,6 @@ class SmartAccount extends EventEmitter { relayer!: IRelayer // Owner of the Smart Account common between all chains - // Could be part of Smart Account state / config - // @review with Sachin owner!: string // Address of the smart contract wallet common between all chains diff --git a/packages/smart-account/src/providers/SmartAccountProvider.ts b/packages/smart-account/src/providers/SmartAccountProvider.ts index db7e6ef07..bfae40b39 100644 --- a/packages/smart-account/src/providers/SmartAccountProvider.ts +++ b/packages/smart-account/src/providers/SmartAccountProvider.ts @@ -2,10 +2,9 @@ import { Web3Provider, BaseProvider } from '@ethersproject/providers' import { SmartAccountSigner } from '../signers/SmartAccountSigner' import { Signer } from 'ethers' import { TransactionResponse } from '@ethersproject/providers' - import { ChainId, IWalletTransaction } from '@biconomy-sdk/core-types' -// import { JsonRpcSender } from '@0xsequence/network' +// Note: WIP. Not used by SmartAccount at the moment /*export class SmartAccountProvider extends Web3Provider { //implements JsonRpcHandler @@ -36,7 +35,7 @@ export class SmartAccountProvider extends BaseProvider { tempProvider: Web3Provider, chainId: ChainId, readonly originalSigner: Signer, // EOASigner - readonly originalProvider: BaseProvider // could be Web3Provider // optional? cc @sachin // readonly httpRpcClient: HttpRpcClient, // Required for relaying to rpc-relayer // readonly smartAccountAPI: SmartAccountAPI ? // Could be useful/needful + readonly originalProvider: BaseProvider // could be Web3Provider // optional? // readonly httpRpcClient: HttpRpcClient, // Required for relaying to rpc-relayer // readonly smartAccountAPI: SmartAccountAPI ? // Could be useful/needful ) { super({ name: 'Smart Account User Refund Provider', From 99135a2d2dfb18a91394247cbddac8fb996e61a1 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 9 Nov 2022 13:56:45 +0400 Subject: [PATCH 0267/1247] update version to publish latest stable build --- lerna.json | 2 +- packages/account-abstraction/package.json | 2 +- packages/common/package.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/gas-estimator/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- packages/web3-auth/package.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lerna.json b/lerna.json index 0744b645e..122e3978e 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], "npmClient": "yarn", - "version": "1.0.20", + "version": "1.0.21", "useWorkspaces": true } \ No newline at end of file diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index 11ce6a69f..12325aa19 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/account-abstraction", - "version": "1.0.20", + "version": "1.0.21", "description": "Account abstraction APIs to prepare user operations ", "keywords": [ "account-abstraction", diff --git a/packages/common/package.json b/packages/common/package.json index b7baec5be..0a3559723 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/common", - "version": "1.0.20", + "version": "1.0.21", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 4b338a1ac..c2046f950 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.20", + "version": "1.0.21", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index d72f9b241..76d2392ab 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.20", + "version": "1.0.21", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index c7595bbeb..e81319d6d 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/gas-estimator", - "version": "1.0.20", + "version": "1.0.21", "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", "keywords": [ "gas-estimation", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index ab6d0ba21..dcbbe14a7 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.20", + "version": "1.0.21", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 8d5607b5b..942f37ae6 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.20", + "version": "1.0.21", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index d92658fd1..597f027ab 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.20", + "version": "1.0.21", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 099d3a388..9b36f49b1 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.20", + "version": "1.0.21", "description": "utils for sending all transaction legos", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index 70bd5c4cf..4f459feb5 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/web3-auth", - "version": "1.0.20", + "version": "1.0.21", "description": "web3-auth for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From f1a118c88727b285937d27e827b48c34c1f25c10 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 9 Nov 2022 16:20:03 +0530 Subject: [PATCH 0268/1247] case-sensitive fix --- .gitignore | 2 - packages/common/src/Types/BaseWallet.ts | 218 +++++ packages/common/src/Types/IAggregator.ts | 234 ++++++ packages/common/src/Types/IEntryPoint.ts | 793 ++++++++++++++++++ packages/common/src/Types/IStakeManager.ts | 450 ++++++++++ packages/common/src/Types/IWallet.ts | 155 ++++ packages/common/src/Types/SampleRecipient.ts | 133 +++ packages/common/src/Types/SimpleWallet.ts | 489 +++++++++++ packages/common/src/Types/SingletonFactory.ts | 101 +++ packages/common/src/Types/common.ts | 44 + .../Types/factories/BaseWallet__factory.ts | 147 ++++ .../Types/factories/IAggregator__factory.ts | 208 +++++ .../Types/factories/IEntryPoint__factory.ts | 790 +++++++++++++++++ .../Types/factories/IStakeManager__factory.ts | 291 +++++++ .../src/Types/factories/IWallet__factory.ts | 108 +++ .../factories/SampleRecipient__factory.ts | 109 +++ .../Types/factories/SimpleWallet__factory.ts | 365 ++++++++ .../factories/SingletonFactory__factory.ts | 88 ++ packages/common/src/Types/hardhat.d.ts | 105 +++ packages/common/src/Types/index.ts | 20 + packages/core-types/src/Types.ts | 87 ++ packages/core-types/src/types.ts | 2 +- .../node-client/src/utils/HttpRequests.ts | 54 ++ packages/relayer/src/utils/HttpRequests.ts | 55 ++ packages/relayer/src/utils/MultiSend.ts | 89 ++ packages/transactions/src/Estimator.ts | 183 ++++ packages/transactions/src/Execution.ts | 284 +++++++ packages/transactions/src/MultiSend.ts | 25 + packages/transactions/src/Types.ts | 44 + packages/transactions/src/Utils.ts | 123 +++ 30 files changed, 5793 insertions(+), 3 deletions(-) create mode 100644 packages/common/src/Types/BaseWallet.ts create mode 100644 packages/common/src/Types/IAggregator.ts create mode 100644 packages/common/src/Types/IEntryPoint.ts create mode 100644 packages/common/src/Types/IStakeManager.ts create mode 100644 packages/common/src/Types/IWallet.ts create mode 100644 packages/common/src/Types/SampleRecipient.ts create mode 100644 packages/common/src/Types/SimpleWallet.ts create mode 100644 packages/common/src/Types/SingletonFactory.ts create mode 100644 packages/common/src/Types/common.ts create mode 100644 packages/common/src/Types/factories/BaseWallet__factory.ts create mode 100644 packages/common/src/Types/factories/IAggregator__factory.ts create mode 100644 packages/common/src/Types/factories/IEntryPoint__factory.ts create mode 100644 packages/common/src/Types/factories/IStakeManager__factory.ts create mode 100644 packages/common/src/Types/factories/IWallet__factory.ts create mode 100644 packages/common/src/Types/factories/SampleRecipient__factory.ts create mode 100644 packages/common/src/Types/factories/SimpleWallet__factory.ts create mode 100644 packages/common/src/Types/factories/SingletonFactory__factory.ts create mode 100644 packages/common/src/Types/hardhat.d.ts create mode 100644 packages/common/src/Types/index.ts create mode 100644 packages/core-types/src/Types.ts create mode 100644 packages/node-client/src/utils/HttpRequests.ts create mode 100644 packages/relayer/src/utils/HttpRequests.ts create mode 100644 packages/relayer/src/utils/MultiSend.ts create mode 100644 packages/transactions/src/Estimator.ts create mode 100644 packages/transactions/src/Execution.ts create mode 100644 packages/transactions/src/MultiSend.ts create mode 100644 packages/transactions/src/Types.ts create mode 100644 packages/transactions/src/Utils.ts diff --git a/.gitignore b/.gitignore index ae5f8b0f5..1e0b12c6d 100644 --- a/.gitignore +++ b/.gitignore @@ -57,8 +57,6 @@ cache artifacts deployments -packages/common/src/types/ - # lockfiles packages/core-types/package-lock.json packages/account-abstraction/package-lock.json diff --git a/packages/common/src/Types/BaseWallet.ts b/packages/common/src/Types/BaseWallet.ts new file mode 100644 index 000000000..69a2d43b5 --- /dev/null +++ b/packages/common/src/Types/BaseWallet.ts @@ -0,0 +1,218 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import { FunctionFragment, Result } from "@ethersproject/abi"; +import { Listener, Provider } from "@ethersproject/providers"; +import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; + +export type UserOperationStruct = { + sender: string; + nonce: BigNumberish; + initCode: BytesLike; + callData: BytesLike; + callGasLimit: BigNumberish; + verificationGasLimit: BigNumberish; + preVerificationGas: BigNumberish; + maxFeePerGas: BigNumberish; + maxPriorityFeePerGas: BigNumberish; + paymasterAndData: BytesLike; + signature: BytesLike; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface BaseWalletInterface extends utils.Interface { + contractName: "BaseWallet"; + functions: { + "entryPoint()": FunctionFragment; + "nonce()": FunctionFragment; + "updateEntryPoint(address)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,address,uint256)": FunctionFragment; + }; + + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "nonce", values?: undefined): string; + encodeFunctionData( + functionFragment: "updateEntryPoint", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [UserOperationStruct, BytesLike, string, BigNumberish] + ): string; + + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "updateEntryPoint", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + + events: {}; +} + +export interface BaseWallet extends BaseContract { + contractName: "BaseWallet"; + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: BaseWalletInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + + updateEntryPoint( + newEntryPoint: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + entryPoint(overrides?: CallOverrides): Promise; + + nonce(overrides?: CallOverrides): Promise; + + updateEntryPoint( + newEntryPoint: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + entryPoint(overrides?: CallOverrides): Promise; + + nonce(overrides?: CallOverrides): Promise; + + updateEntryPoint( + newEntryPoint: string, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + entryPoint(overrides?: CallOverrides): Promise; + + nonce(overrides?: CallOverrides): Promise; + + updateEntryPoint( + newEntryPoint: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + entryPoint(overrides?: CallOverrides): Promise; + + nonce(overrides?: CallOverrides): Promise; + + updateEntryPoint( + newEntryPoint: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/packages/common/src/Types/IAggregator.ts b/packages/common/src/Types/IAggregator.ts new file mode 100644 index 000000000..fd21f5490 --- /dev/null +++ b/packages/common/src/Types/IAggregator.ts @@ -0,0 +1,234 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import { FunctionFragment, Result } from "@ethersproject/abi"; +import { Listener, Provider } from "@ethersproject/providers"; +import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; + +export type UserOperationStruct = { + sender: string; + nonce: BigNumberish; + initCode: BytesLike; + callData: BytesLike; + callGasLimit: BigNumberish; + verificationGasLimit: BigNumberish; + preVerificationGas: BigNumberish; + maxFeePerGas: BigNumberish; + maxPriorityFeePerGas: BigNumberish; + paymasterAndData: BytesLike; + signature: BytesLike; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface IAggregatorInterface extends utils.Interface { + contractName: "IAggregator"; + functions: { + "aggregateSignatures(bytes[])": FunctionFragment; + "validateSignatures((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],bytes)": FunctionFragment; + "validateUserOpSignature((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bool)": FunctionFragment; + }; + + encodeFunctionData( + functionFragment: "aggregateSignatures", + values: [BytesLike[]] + ): string; + encodeFunctionData( + functionFragment: "validateSignatures", + values: [UserOperationStruct[], BytesLike] + ): string; + encodeFunctionData( + functionFragment: "validateUserOpSignature", + values: [UserOperationStruct, boolean] + ): string; + + decodeFunctionResult( + functionFragment: "aggregateSignatures", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateSignatures", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOpSignature", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IAggregator extends BaseContract { + contractName: "IAggregator"; + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IAggregatorInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + aggregateSignatures( + sigsForAggregation: BytesLike[], + overrides?: CallOverrides + ): Promise<[string] & { aggregatesSignature: string }>; + + validateSignatures( + userOps: UserOperationStruct[], + signature: BytesLike, + overrides?: CallOverrides + ): Promise<[void]>; + + validateUserOpSignature( + userOp: UserOperationStruct, + offChainSigCheck: boolean, + overrides?: CallOverrides + ): Promise< + [string, string, string] & { + sigForUserOp: string; + sigForAggregation: string; + offChainSigInfo: string; + } + >; + }; + + aggregateSignatures( + sigsForAggregation: BytesLike[], + overrides?: CallOverrides + ): Promise; + + validateSignatures( + userOps: UserOperationStruct[], + signature: BytesLike, + overrides?: CallOverrides + ): Promise; + + validateUserOpSignature( + userOp: UserOperationStruct, + offChainSigCheck: boolean, + overrides?: CallOverrides + ): Promise< + [string, string, string] & { + sigForUserOp: string; + sigForAggregation: string; + offChainSigInfo: string; + } + >; + + callStatic: { + aggregateSignatures( + sigsForAggregation: BytesLike[], + overrides?: CallOverrides + ): Promise; + + validateSignatures( + userOps: UserOperationStruct[], + signature: BytesLike, + overrides?: CallOverrides + ): Promise; + + validateUserOpSignature( + userOp: UserOperationStruct, + offChainSigCheck: boolean, + overrides?: CallOverrides + ): Promise< + [string, string, string] & { + sigForUserOp: string; + sigForAggregation: string; + offChainSigInfo: string; + } + >; + }; + + filters: {}; + + estimateGas: { + aggregateSignatures( + sigsForAggregation: BytesLike[], + overrides?: CallOverrides + ): Promise; + + validateSignatures( + userOps: UserOperationStruct[], + signature: BytesLike, + overrides?: CallOverrides + ): Promise; + + validateUserOpSignature( + userOp: UserOperationStruct, + offChainSigCheck: boolean, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + aggregateSignatures( + sigsForAggregation: BytesLike[], + overrides?: CallOverrides + ): Promise; + + validateSignatures( + userOps: UserOperationStruct[], + signature: BytesLike, + overrides?: CallOverrides + ): Promise; + + validateUserOpSignature( + userOp: UserOperationStruct, + offChainSigCheck: boolean, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/packages/common/src/Types/IEntryPoint.ts b/packages/common/src/Types/IEntryPoint.ts new file mode 100644 index 000000000..95d2c8fb6 --- /dev/null +++ b/packages/common/src/Types/IEntryPoint.ts @@ -0,0 +1,793 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; +import { Listener, Provider } from "@ethersproject/providers"; +import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; + +export type UserOperationStruct = { + sender: string; + nonce: BigNumberish; + initCode: BytesLike; + callData: BytesLike; + callGasLimit: BigNumberish; + verificationGasLimit: BigNumberish; + preVerificationGas: BigNumberish; + maxFeePerGas: BigNumberish; + maxPriorityFeePerGas: BigNumberish; + paymasterAndData: BytesLike; + signature: BytesLike; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export declare namespace IStakeManager { + export type DepositInfoStruct = { + deposit: BigNumberish; + staked: boolean; + stake: BigNumberish; + unstakeDelaySec: BigNumberish; + withdrawTime: BigNumberish; + }; + + export type DepositInfoStructOutput = [ + BigNumber, + boolean, + BigNumber, + number, + BigNumber + ] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: BigNumber; + }; +} + +export declare namespace IEntryPoint { + export type UserOpsPerAggregatorStruct = { + userOps: UserOperationStruct[]; + aggregator: string; + signature: BytesLike; + }; + + export type UserOpsPerAggregatorStructOutput = [ + UserOperationStructOutput[], + string, + string + ] & { + userOps: UserOperationStructOutput[]; + aggregator: string; + signature: string; + }; +} + +export interface IEntryPointInterface extends utils.Interface { + contractName: "IEntryPoint"; + functions: { + "addStake(uint32)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "depositTo(address)": FunctionFragment; + "getDepositInfo(address)": FunctionFragment; + "getRequestId((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + "getSenderAddress(bytes)": FunctionFragment; + "getSenderStorage(address)": FunctionFragment; + "handleAggregatedOps(((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)[],address)": FunctionFragment; + "handleOps((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address)": FunctionFragment; + "paymasterStake()": FunctionFragment; + "simulateValidation((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bool)": FunctionFragment; + "unlockStake()": FunctionFragment; + "unstakeDelaySec()": FunctionFragment; + "withdrawStake(address)": FunctionFragment; + "withdrawTo(address,uint256)": FunctionFragment; + }; + + encodeFunctionData( + functionFragment: "addStake", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; + encodeFunctionData(functionFragment: "depositTo", values: [string]): string; + encodeFunctionData( + functionFragment: "getDepositInfo", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "getRequestId", + values: [UserOperationStruct] + ): string; + encodeFunctionData( + functionFragment: "getSenderAddress", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "getSenderStorage", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "handleAggregatedOps", + values: [IEntryPoint.UserOpsPerAggregatorStruct[], string] + ): string; + encodeFunctionData( + functionFragment: "handleOps", + values: [UserOperationStruct[], string] + ): string; + encodeFunctionData( + functionFragment: "paymasterStake", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "simulateValidation", + values: [UserOperationStruct, boolean] + ): string; + encodeFunctionData( + functionFragment: "unlockStake", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "unstakeDelaySec", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "withdrawStake", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "withdrawTo", + values: [string, BigNumberish] + ): string; + + decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "depositTo", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getDepositInfo", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getRequestId", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSenderAddress", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSenderStorage", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "handleAggregatedOps", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "handleOps", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "paymasterStake", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "simulateValidation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "unlockStake", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "unstakeDelaySec", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawStake", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + + events: { + "Deposited(address,uint256)": EventFragment; + "StakeLocked(address,uint256,uint256)": EventFragment; + "StakeUnlocked(address,uint256)": EventFragment; + "StakeWithdrawn(address,address,uint256)": EventFragment; + "UserOperationEvent(bytes32,address,address,uint256,uint256,uint256,bool)": EventFragment; + "UserOperationRevertReason(bytes32,address,uint256,bytes)": EventFragment; + "Withdrawn(address,address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Deposited"): EventFragment; + getEvent(nameOrSignatureOrTopic: "StakeLocked"): EventFragment; + getEvent(nameOrSignatureOrTopic: "StakeUnlocked"): EventFragment; + getEvent(nameOrSignatureOrTopic: "StakeWithdrawn"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UserOperationEvent"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UserOperationRevertReason"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; +} + +export type DepositedEvent = TypedEvent< + [string, BigNumber], + { account: string; totalDeposit: BigNumber } +>; + +export type DepositedEventFilter = TypedEventFilter; + +export type StakeLockedEvent = TypedEvent< + [string, BigNumber, BigNumber], + { account: string; totalStaked: BigNumber; withdrawTime: BigNumber } +>; + +export type StakeLockedEventFilter = TypedEventFilter; + +export type StakeUnlockedEvent = TypedEvent< + [string, BigNumber], + { account: string; withdrawTime: BigNumber } +>; + +export type StakeUnlockedEventFilter = TypedEventFilter; + +export type StakeWithdrawnEvent = TypedEvent< + [string, string, BigNumber], + { account: string; withdrawAddress: string; amount: BigNumber } +>; + +export type StakeWithdrawnEventFilter = TypedEventFilter; + +export type UserOperationEventEvent = TypedEvent< + [string, string, string, BigNumber, BigNumber, BigNumber, boolean], + { + requestId: string; + sender: string; + paymaster: string; + nonce: BigNumber; + actualGasCost: BigNumber; + actualGasPrice: BigNumber; + success: boolean; + } +>; + +export type UserOperationEventEventFilter = + TypedEventFilter; + +export type UserOperationRevertReasonEvent = TypedEvent< + [string, string, BigNumber, string], + { requestId: string; sender: string; nonce: BigNumber; revertReason: string } +>; + +export type UserOperationRevertReasonEventFilter = + TypedEventFilter; + +export type WithdrawnEvent = TypedEvent< + [string, string, BigNumber], + { account: string; withdrawAddress: string; amount: BigNumber } +>; + +export type WithdrawnEventFilter = TypedEventFilter; + +export interface IEntryPoint extends BaseContract { + contractName: "IEntryPoint"; + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IEntryPointInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + addStake( + _unstakeDelaySec: BigNumberish, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; + + depositTo( + account: string, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + getDepositInfo( + account: string, + overrides?: CallOverrides + ): Promise< + [IStakeManager.DepositInfoStructOutput] & { + info: IStakeManager.DepositInfoStructOutput; + } + >; + + getRequestId( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise<[string]>; + + getSenderAddress( + initCode: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getSenderStorage( + sender: string, + overrides?: CallOverrides + ): Promise<[BigNumber[]] & { senderStorageCells: BigNumber[] }>; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + paymasterStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + offChainSigCheck: boolean, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unstakeDelaySec( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawStake( + withdrawAddress: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawTo( + withdrawAddress: string, + withdrawAmount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + addStake( + _unstakeDelaySec: BigNumberish, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + balanceOf(account: string, overrides?: CallOverrides): Promise; + + depositTo( + account: string, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + getDepositInfo( + account: string, + overrides?: CallOverrides + ): Promise; + + getRequestId( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + getSenderAddress( + initCode: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getSenderStorage( + sender: string, + overrides?: CallOverrides + ): Promise; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + paymasterStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + offChainSigCheck: boolean, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unstakeDelaySec( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawStake( + withdrawAddress: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawTo( + withdrawAddress: string, + withdrawAmount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + addStake( + _unstakeDelaySec: BigNumberish, + overrides?: CallOverrides + ): Promise; + + balanceOf(account: string, overrides?: CallOverrides): Promise; + + depositTo(account: string, overrides?: CallOverrides): Promise; + + getDepositInfo( + account: string, + overrides?: CallOverrides + ): Promise; + + getRequestId( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + getSenderAddress( + initCode: BytesLike, + overrides?: CallOverrides + ): Promise; + + getSenderStorage( + sender: string, + overrides?: CallOverrides + ): Promise; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: string, + overrides?: CallOverrides + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: string, + overrides?: CallOverrides + ): Promise; + + paymasterStake(overrides?: CallOverrides): Promise; + + simulateValidation( + userOp: UserOperationStruct, + offChainSigCheck: boolean, + overrides?: CallOverrides + ): Promise< + [BigNumber, BigNumber, string, string, string, string] & { + preOpGas: BigNumber; + prefund: BigNumber; + actualAggregator: string; + sigForUserOp: string; + sigForAggregation: string; + offChainSigInfo: string; + } + >; + + unlockStake(overrides?: CallOverrides): Promise; + + unstakeDelaySec(overrides?: CallOverrides): Promise; + + withdrawStake( + withdrawAddress: string, + overrides?: CallOverrides + ): Promise; + + withdrawTo( + withdrawAddress: string, + withdrawAmount: BigNumberish, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "Deposited(address,uint256)"( + account?: string | null, + totalDeposit?: null + ): DepositedEventFilter; + Deposited( + account?: string | null, + totalDeposit?: null + ): DepositedEventFilter; + + "StakeLocked(address,uint256,uint256)"( + account?: string | null, + totalStaked?: null, + withdrawTime?: null + ): StakeLockedEventFilter; + StakeLocked( + account?: string | null, + totalStaked?: null, + withdrawTime?: null + ): StakeLockedEventFilter; + + "StakeUnlocked(address,uint256)"( + account?: string | null, + withdrawTime?: null + ): StakeUnlockedEventFilter; + StakeUnlocked( + account?: string | null, + withdrawTime?: null + ): StakeUnlockedEventFilter; + + "StakeWithdrawn(address,address,uint256)"( + account?: string | null, + withdrawAddress?: null, + amount?: null + ): StakeWithdrawnEventFilter; + StakeWithdrawn( + account?: string | null, + withdrawAddress?: null, + amount?: null + ): StakeWithdrawnEventFilter; + + "UserOperationEvent(bytes32,address,address,uint256,uint256,uint256,bool)"( + requestId?: BytesLike | null, + sender?: string | null, + paymaster?: string | null, + nonce?: null, + actualGasCost?: null, + actualGasPrice?: null, + success?: null + ): UserOperationEventEventFilter; + UserOperationEvent( + requestId?: BytesLike | null, + sender?: string | null, + paymaster?: string | null, + nonce?: null, + actualGasCost?: null, + actualGasPrice?: null, + success?: null + ): UserOperationEventEventFilter; + + "UserOperationRevertReason(bytes32,address,uint256,bytes)"( + requestId?: BytesLike | null, + sender?: string | null, + nonce?: null, + revertReason?: null + ): UserOperationRevertReasonEventFilter; + UserOperationRevertReason( + requestId?: BytesLike | null, + sender?: string | null, + nonce?: null, + revertReason?: null + ): UserOperationRevertReasonEventFilter; + + "Withdrawn(address,address,uint256)"( + account?: string | null, + withdrawAddress?: null, + amount?: null + ): WithdrawnEventFilter; + Withdrawn( + account?: string | null, + withdrawAddress?: null, + amount?: null + ): WithdrawnEventFilter; + }; + + estimateGas: { + addStake( + _unstakeDelaySec: BigNumberish, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + balanceOf(account: string, overrides?: CallOverrides): Promise; + + depositTo( + account: string, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + getDepositInfo( + account: string, + overrides?: CallOverrides + ): Promise; + + getRequestId( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + getSenderAddress( + initCode: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getSenderStorage( + sender: string, + overrides?: CallOverrides + ): Promise; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + paymasterStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + offChainSigCheck: boolean, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unstakeDelaySec( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawStake( + withdrawAddress: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawTo( + withdrawAddress: string, + withdrawAmount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + addStake( + _unstakeDelaySec: BigNumberish, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + balanceOf( + account: string, + overrides?: CallOverrides + ): Promise; + + depositTo( + account: string, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + getDepositInfo( + account: string, + overrides?: CallOverrides + ): Promise; + + getRequestId( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + getSenderAddress( + initCode: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getSenderStorage( + sender: string, + overrides?: CallOverrides + ): Promise; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + paymasterStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + offChainSigCheck: boolean, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unstakeDelaySec( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawStake( + withdrawAddress: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawTo( + withdrawAddress: string, + withdrawAmount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/packages/common/src/Types/IStakeManager.ts b/packages/common/src/Types/IStakeManager.ts new file mode 100644 index 000000000..f411037ce --- /dev/null +++ b/packages/common/src/Types/IStakeManager.ts @@ -0,0 +1,450 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; +import { Listener, Provider } from "@ethersproject/providers"; +import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; + +export declare namespace IStakeManager { + export type DepositInfoStruct = { + deposit: BigNumberish; + staked: boolean; + stake: BigNumberish; + unstakeDelaySec: BigNumberish; + withdrawTime: BigNumberish; + }; + + export type DepositInfoStructOutput = [ + BigNumber, + boolean, + BigNumber, + number, + BigNumber + ] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: BigNumber; + }; +} + +export interface IStakeManagerInterface extends utils.Interface { + contractName: "IStakeManager"; + functions: { + "addStake(uint32)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "depositTo(address)": FunctionFragment; + "getDepositInfo(address)": FunctionFragment; + "paymasterStake()": FunctionFragment; + "unlockStake()": FunctionFragment; + "unstakeDelaySec()": FunctionFragment; + "withdrawStake(address)": FunctionFragment; + "withdrawTo(address,uint256)": FunctionFragment; + }; + + encodeFunctionData( + functionFragment: "addStake", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; + encodeFunctionData(functionFragment: "depositTo", values: [string]): string; + encodeFunctionData( + functionFragment: "getDepositInfo", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "paymasterStake", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "unlockStake", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "unstakeDelaySec", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "withdrawStake", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "withdrawTo", + values: [string, BigNumberish] + ): string; + + decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "depositTo", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getDepositInfo", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "paymasterStake", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "unlockStake", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "unstakeDelaySec", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawStake", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + + events: { + "Deposited(address,uint256)": EventFragment; + "StakeLocked(address,uint256,uint256)": EventFragment; + "StakeUnlocked(address,uint256)": EventFragment; + "StakeWithdrawn(address,address,uint256)": EventFragment; + "Withdrawn(address,address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Deposited"): EventFragment; + getEvent(nameOrSignatureOrTopic: "StakeLocked"): EventFragment; + getEvent(nameOrSignatureOrTopic: "StakeUnlocked"): EventFragment; + getEvent(nameOrSignatureOrTopic: "StakeWithdrawn"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; +} + +export type DepositedEvent = TypedEvent< + [string, BigNumber], + { account: string; totalDeposit: BigNumber } +>; + +export type DepositedEventFilter = TypedEventFilter; + +export type StakeLockedEvent = TypedEvent< + [string, BigNumber, BigNumber], + { account: string; totalStaked: BigNumber; withdrawTime: BigNumber } +>; + +export type StakeLockedEventFilter = TypedEventFilter; + +export type StakeUnlockedEvent = TypedEvent< + [string, BigNumber], + { account: string; withdrawTime: BigNumber } +>; + +export type StakeUnlockedEventFilter = TypedEventFilter; + +export type StakeWithdrawnEvent = TypedEvent< + [string, string, BigNumber], + { account: string; withdrawAddress: string; amount: BigNumber } +>; + +export type StakeWithdrawnEventFilter = TypedEventFilter; + +export type WithdrawnEvent = TypedEvent< + [string, string, BigNumber], + { account: string; withdrawAddress: string; amount: BigNumber } +>; + +export type WithdrawnEventFilter = TypedEventFilter; + +export interface IStakeManager extends BaseContract { + contractName: "IStakeManager"; + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IStakeManagerInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + addStake( + _unstakeDelaySec: BigNumberish, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; + + depositTo( + account: string, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + getDepositInfo( + account: string, + overrides?: CallOverrides + ): Promise< + [IStakeManager.DepositInfoStructOutput] & { + info: IStakeManager.DepositInfoStructOutput; + } + >; + + paymasterStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unstakeDelaySec( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawStake( + withdrawAddress: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawTo( + withdrawAddress: string, + withdrawAmount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + addStake( + _unstakeDelaySec: BigNumberish, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + balanceOf(account: string, overrides?: CallOverrides): Promise; + + depositTo( + account: string, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + getDepositInfo( + account: string, + overrides?: CallOverrides + ): Promise; + + paymasterStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unstakeDelaySec( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawStake( + withdrawAddress: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawTo( + withdrawAddress: string, + withdrawAmount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + addStake( + _unstakeDelaySec: BigNumberish, + overrides?: CallOverrides + ): Promise; + + balanceOf(account: string, overrides?: CallOverrides): Promise; + + depositTo(account: string, overrides?: CallOverrides): Promise; + + getDepositInfo( + account: string, + overrides?: CallOverrides + ): Promise; + + paymasterStake(overrides?: CallOverrides): Promise; + + unlockStake(overrides?: CallOverrides): Promise; + + unstakeDelaySec(overrides?: CallOverrides): Promise; + + withdrawStake( + withdrawAddress: string, + overrides?: CallOverrides + ): Promise; + + withdrawTo( + withdrawAddress: string, + withdrawAmount: BigNumberish, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "Deposited(address,uint256)"( + account?: string | null, + totalDeposit?: null + ): DepositedEventFilter; + Deposited( + account?: string | null, + totalDeposit?: null + ): DepositedEventFilter; + + "StakeLocked(address,uint256,uint256)"( + account?: string | null, + totalStaked?: null, + withdrawTime?: null + ): StakeLockedEventFilter; + StakeLocked( + account?: string | null, + totalStaked?: null, + withdrawTime?: null + ): StakeLockedEventFilter; + + "StakeUnlocked(address,uint256)"( + account?: string | null, + withdrawTime?: null + ): StakeUnlockedEventFilter; + StakeUnlocked( + account?: string | null, + withdrawTime?: null + ): StakeUnlockedEventFilter; + + "StakeWithdrawn(address,address,uint256)"( + account?: string | null, + withdrawAddress?: null, + amount?: null + ): StakeWithdrawnEventFilter; + StakeWithdrawn( + account?: string | null, + withdrawAddress?: null, + amount?: null + ): StakeWithdrawnEventFilter; + + "Withdrawn(address,address,uint256)"( + account?: string | null, + withdrawAddress?: null, + amount?: null + ): WithdrawnEventFilter; + Withdrawn( + account?: string | null, + withdrawAddress?: null, + amount?: null + ): WithdrawnEventFilter; + }; + + estimateGas: { + addStake( + _unstakeDelaySec: BigNumberish, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + balanceOf(account: string, overrides?: CallOverrides): Promise; + + depositTo( + account: string, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + getDepositInfo( + account: string, + overrides?: CallOverrides + ): Promise; + + paymasterStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unstakeDelaySec( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawStake( + withdrawAddress: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawTo( + withdrawAddress: string, + withdrawAmount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + addStake( + _unstakeDelaySec: BigNumberish, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + balanceOf( + account: string, + overrides?: CallOverrides + ): Promise; + + depositTo( + account: string, + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + getDepositInfo( + account: string, + overrides?: CallOverrides + ): Promise; + + paymasterStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + unstakeDelaySec( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawStake( + withdrawAddress: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawTo( + withdrawAddress: string, + withdrawAmount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/packages/common/src/Types/IWallet.ts b/packages/common/src/Types/IWallet.ts new file mode 100644 index 000000000..f5a99f118 --- /dev/null +++ b/packages/common/src/Types/IWallet.ts @@ -0,0 +1,155 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import { FunctionFragment, Result } from "@ethersproject/abi"; +import { Listener, Provider } from "@ethersproject/providers"; +import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; + +export type UserOperationStruct = { + sender: string; + nonce: BigNumberish; + initCode: BytesLike; + callData: BytesLike; + callGasLimit: BigNumberish; + verificationGasLimit: BigNumberish; + preVerificationGas: BigNumberish; + maxFeePerGas: BigNumberish; + maxPriorityFeePerGas: BigNumberish; + paymasterAndData: BytesLike; + signature: BytesLike; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface IWalletInterface extends utils.Interface { + contractName: "IWallet"; + functions: { + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,address,uint256)": FunctionFragment; + }; + + encodeFunctionData( + functionFragment: "validateUserOp", + values: [UserOperationStruct, BytesLike, string, BigNumberish] + ): string; + + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IWallet extends BaseContract { + contractName: "IWallet"; + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IWalletInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/packages/common/src/Types/SampleRecipient.ts b/packages/common/src/Types/SampleRecipient.ts new file mode 100644 index 000000000..eaf769008 --- /dev/null +++ b/packages/common/src/Types/SampleRecipient.ts @@ -0,0 +1,133 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; +import { Listener, Provider } from "@ethersproject/providers"; +import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; + +export interface SampleRecipientInterface extends utils.Interface { + contractName: "SampleRecipient"; + functions: { + "reverting()": FunctionFragment; + "something(string)": FunctionFragment; + }; + + encodeFunctionData(functionFragment: "reverting", values?: undefined): string; + encodeFunctionData(functionFragment: "something", values: [string]): string; + + decodeFunctionResult(functionFragment: "reverting", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "something", data: BytesLike): Result; + + events: { + "Sender(address,address,string)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Sender"): EventFragment; +} + +export type SenderEvent = TypedEvent< + [string, string, string], + { txOrigin: string; msgSender: string; message: string } +>; + +export type SenderEventFilter = TypedEventFilter; + +export interface SampleRecipient extends BaseContract { + contractName: "SampleRecipient"; + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: SampleRecipientInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + reverting( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + something( + message: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + reverting( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + something( + message: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + reverting(overrides?: CallOverrides): Promise; + + something(message: string, overrides?: CallOverrides): Promise; + }; + + filters: { + "Sender(address,address,string)"( + txOrigin?: null, + msgSender?: null, + message?: null + ): SenderEventFilter; + Sender( + txOrigin?: null, + msgSender?: null, + message?: null + ): SenderEventFilter; + }; + + estimateGas: { + reverting( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + something( + message: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + reverting( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + something( + message: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/packages/common/src/Types/SimpleWallet.ts b/packages/common/src/Types/SimpleWallet.ts new file mode 100644 index 000000000..8f4dfc7f4 --- /dev/null +++ b/packages/common/src/Types/SimpleWallet.ts @@ -0,0 +1,489 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import { FunctionFragment, Result, EventFragment } from "@ethersproject/abi"; +import { Listener, Provider } from "@ethersproject/providers"; +import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; + +export type UserOperationStruct = { + sender: string; + nonce: BigNumberish; + initCode: BytesLike; + callData: BytesLike; + callGasLimit: BigNumberish; + verificationGasLimit: BigNumberish; + preVerificationGas: BigNumberish; + maxFeePerGas: BigNumberish; + maxPriorityFeePerGas: BigNumberish; + paymasterAndData: BytesLike; + signature: BytesLike; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface SimpleWalletInterface extends utils.Interface { + contractName: "SimpleWallet"; + functions: { + "addDeposit()": FunctionFragment; + "entryPoint()": FunctionFragment; + "exec(address,uint256,bytes)": FunctionFragment; + "execBatch(address[],bytes[])": FunctionFragment; + "execFromEntryPoint(address,uint256,bytes)": FunctionFragment; + "getDeposit()": FunctionFragment; + "nonce()": FunctionFragment; + "owner()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "updateEntryPoint(address)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,address,uint256)": FunctionFragment; + "withdrawDepositTo(address,uint256)": FunctionFragment; + }; + + encodeFunctionData( + functionFragment: "addDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "exec", + values: [string, BigNumberish, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "execBatch", + values: [string[], BytesLike[]] + ): string; + encodeFunctionData( + functionFragment: "execFromEntryPoint", + values: [string, BigNumberish, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "nonce", values?: undefined): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "transfer", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "updateEntryPoint", + values: [string] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [UserOperationStruct, BytesLike, string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "withdrawDepositTo", + values: [string, BigNumberish] + ): string; + + decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "exec", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "execBatch", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "execFromEntryPoint", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "updateEntryPoint", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawDepositTo", + data: BytesLike + ): Result; + + events: { + "EntryPointChanged(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "EntryPointChanged"): EventFragment; +} + +export type EntryPointChangedEvent = TypedEvent< + [string, string], + { oldEntryPoint: string; newEntryPoint: string } +>; + +export type EntryPointChangedEventFilter = + TypedEventFilter; + +export interface SimpleWallet extends BaseContract { + contractName: "SimpleWallet"; + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: SimpleWalletInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + addDeposit( + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + exec( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + execBatch( + dest: string[], + func: BytesLike[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + execFromEntryPoint( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + transfer( + dest: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + updateEntryPoint( + newEntryPoint: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawDepositTo( + withdrawAddress: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + addDeposit( + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + exec( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + execBatch( + dest: string[], + func: BytesLike[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + execFromEntryPoint( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + nonce(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + transfer( + dest: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + updateEntryPoint( + newEntryPoint: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawDepositTo( + withdrawAddress: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + addDeposit(overrides?: CallOverrides): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + exec( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: CallOverrides + ): Promise; + + execBatch( + dest: string[], + func: BytesLike[], + overrides?: CallOverrides + ): Promise; + + execFromEntryPoint( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: CallOverrides + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + nonce(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + transfer( + dest: string, + amount: BigNumberish, + overrides?: CallOverrides + ): Promise; + + updateEntryPoint( + newEntryPoint: string, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: CallOverrides + ): Promise; + + withdrawDepositTo( + withdrawAddress: string, + amount: BigNumberish, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "EntryPointChanged(address,address)"( + oldEntryPoint?: string | null, + newEntryPoint?: string | null + ): EntryPointChangedEventFilter; + EntryPointChanged( + oldEntryPoint?: string | null, + newEntryPoint?: string | null + ): EntryPointChangedEventFilter; + }; + + estimateGas: { + addDeposit( + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + exec( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + execBatch( + dest: string[], + func: BytesLike[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + execFromEntryPoint( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + nonce(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + transfer( + dest: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + updateEntryPoint( + newEntryPoint: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawDepositTo( + withdrawAddress: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + addDeposit( + overrides?: PayableOverrides & { from?: string | Promise } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + exec( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + execBatch( + dest: string[], + func: BytesLike[], + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + execFromEntryPoint( + dest: string, + value: BigNumberish, + func: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + nonce(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + transfer( + dest: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + updateEntryPoint( + newEntryPoint: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + requestId: BytesLike, + aggregator: string, + missingWalletFunds: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + withdrawDepositTo( + withdrawAddress: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/packages/common/src/Types/SingletonFactory.ts b/packages/common/src/Types/SingletonFactory.ts new file mode 100644 index 000000000..6d6711488 --- /dev/null +++ b/packages/common/src/Types/SingletonFactory.ts @@ -0,0 +1,101 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import { FunctionFragment, Result } from "@ethersproject/abi"; +import { Listener, Provider } from "@ethersproject/providers"; +import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; + +export interface SingletonFactoryInterface extends utils.Interface { + contractName: "SingletonFactory"; + functions: { + "deploy(bytes,bytes32)": FunctionFragment; + }; + + encodeFunctionData( + functionFragment: "deploy", + values: [BytesLike, BytesLike] + ): string; + + decodeFunctionResult(functionFragment: "deploy", data: BytesLike): Result; + + events: {}; +} + +export interface SingletonFactory extends BaseContract { + contractName: "SingletonFactory"; + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: SingletonFactoryInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + deploy( + _initCode: BytesLike, + _salt: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + deploy( + _initCode: BytesLike, + _salt: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + deploy( + _initCode: BytesLike, + _salt: BytesLike, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + deploy( + _initCode: BytesLike, + _salt: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + deploy( + _initCode: BytesLike, + _salt: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/packages/common/src/Types/common.ts b/packages/common/src/Types/common.ts new file mode 100644 index 000000000..2fc40c7fb --- /dev/null +++ b/packages/common/src/Types/common.ts @@ -0,0 +1,44 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { Listener } from "@ethersproject/providers"; +import type { Event, EventFilter } from "ethers"; + +export interface TypedEvent< + TArgsArray extends Array = any, + TArgsObject = any +> extends Event { + args: TArgsArray & TArgsObject; +} + +export interface TypedEventFilter<_TEvent extends TypedEvent> + extends EventFilter {} + +export interface TypedListener { + (...listenerArg: [...__TypechainArgsArray, TEvent]): void; +} + +type __TypechainArgsArray = T extends TypedEvent ? U : never; + +export interface OnEvent { + ( + eventFilter: TypedEventFilter, + listener: TypedListener + ): TRes; + (eventName: string, listener: Listener): TRes; +} + +export type MinEthersFactory = { + deploy(...a: ARGS[]): Promise; +}; + +export type GetContractTypeFromFactory = F extends MinEthersFactory< + infer C, + any +> + ? C + : never; + +export type GetARGsTypeFromFactory = F extends MinEthersFactory + ? Parameters + : never; diff --git a/packages/common/src/Types/factories/BaseWallet__factory.ts b/packages/common/src/Types/factories/BaseWallet__factory.ts new file mode 100644 index 000000000..62dc79605 --- /dev/null +++ b/packages/common/src/Types/factories/BaseWallet__factory.ts @@ -0,0 +1,147 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { BaseWallet, BaseWalletInterface } from "../BaseWallet"; + +const _abi = [ + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newEntryPoint", + type: "address", + }, + ], + name: "updateEntryPoint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "requestId", + type: "bytes32", + }, + { + internalType: "address", + name: "aggregator", + type: "address", + }, + { + internalType: "uint256", + name: "missingWalletFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +export class BaseWallet__factory { + static readonly abi = _abi; + static createInterface(): BaseWalletInterface { + return new utils.Interface(_abi) as BaseWalletInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): BaseWallet { + return new Contract(address, _abi, signerOrProvider) as BaseWallet; + } +} diff --git a/packages/common/src/Types/factories/IAggregator__factory.ts b/packages/common/src/Types/factories/IAggregator__factory.ts new file mode 100644 index 000000000..4908de2b1 --- /dev/null +++ b/packages/common/src/Types/factories/IAggregator__factory.ts @@ -0,0 +1,208 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IAggregator, IAggregatorInterface } from "../IAggregator"; + +const _abi = [ + { + inputs: [ + { + internalType: "bytes[]", + name: "sigsForAggregation", + type: "bytes[]", + }, + ], + name: "aggregateSignatures", + outputs: [ + { + internalType: "bytes", + name: "aggregatesSignature", + type: "bytes", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation[]", + name: "userOps", + type: "tuple[]", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "validateSignatures", + outputs: [], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bool", + name: "offChainSigCheck", + type: "bool", + }, + ], + name: "validateUserOpSignature", + outputs: [ + { + internalType: "bytes", + name: "sigForUserOp", + type: "bytes", + }, + { + internalType: "bytes", + name: "sigForAggregation", + type: "bytes", + }, + { + internalType: "bytes", + name: "offChainSigInfo", + type: "bytes", + }, + ], + stateMutability: "view", + type: "function", + }, +]; + +export class IAggregator__factory { + static readonly abi = _abi; + static createInterface(): IAggregatorInterface { + return new utils.Interface(_abi) as IAggregatorInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IAggregator { + return new Contract(address, _abi, signerOrProvider) as IAggregator; + } +} diff --git a/packages/common/src/Types/factories/IEntryPoint__factory.ts b/packages/common/src/Types/factories/IEntryPoint__factory.ts new file mode 100644 index 000000000..79f6920f6 --- /dev/null +++ b/packages/common/src/Types/factories/IEntryPoint__factory.ts @@ -0,0 +1,790 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IEntryPoint, IEntryPointInterface } from "../IEntryPoint"; + +const _abi = [ + { + inputs: [ + { + internalType: "uint256", + name: "opIndex", + type: "uint256", + }, + { + internalType: "address", + name: "paymaster", + type: "address", + }, + { + internalType: "string", + name: "reason", + type: "string", + }, + ], + name: "FailedOp", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "aggregator", + type: "address", + }, + ], + name: "SignatureValidationFailed", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "totalDeposit", + type: "uint256", + }, + ], + name: "Deposited", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "totalStaked", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "withdrawTime", + type: "uint256", + }, + ], + name: "StakeLocked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "withdrawTime", + type: "uint256", + }, + ], + name: "StakeUnlocked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "withdrawAddress", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "StakeWithdrawn", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "requestId", + type: "bytes32", + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "actualGasPrice", + type: "uint256", + }, + { + indexed: false, + internalType: "bool", + name: "success", + type: "bool", + }, + ], + name: "UserOperationEvent", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "requestId", + type: "bytes32", + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "revertReason", + type: "bytes", + }, + ], + name: "UserOperationRevertReason", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "withdrawAddress", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "Withdrawn", + type: "event", + }, + { + inputs: [ + { + internalType: "uint32", + name: "_unstakeDelaySec", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "depositTo", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "getDepositInfo", + outputs: [ + { + components: [ + { + internalType: "uint112", + name: "deposit", + type: "uint112", + }, + { + internalType: "bool", + name: "staked", + type: "bool", + }, + { + internalType: "uint112", + name: "stake", + type: "uint112", + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + { + internalType: "uint64", + name: "withdrawTime", + type: "uint64", + }, + ], + internalType: "struct IStakeManager.DepositInfo", + name: "info", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "getRequestId", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + ], + name: "getSenderAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + ], + name: "getSenderStorage", + outputs: [ + { + internalType: "uint256[]", + name: "senderStorageCells", + type: "uint256[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation[]", + name: "userOps", + type: "tuple[]", + }, + { + internalType: "contract IAggregator", + name: "aggregator", + type: "address", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct IEntryPoint.UserOpsPerAggregator[]", + name: "opsPerAggregator", + type: "tuple[]", + }, + { + internalType: "address payable", + name: "beneficiary", + type: "address", + }, + ], + name: "handleAggregatedOps", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation[]", + name: "ops", + type: "tuple[]", + }, + { + internalType: "address payable", + name: "beneficiary", + type: "address", + }, + ], + name: "handleOps", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "paymasterStake", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bool", + name: "offChainSigCheck", + type: "bool", + }, + ], + name: "simulateValidation", + outputs: [ + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256", + }, + { + internalType: "address", + name: "actualAggregator", + type: "address", + }, + { + internalType: "bytes", + name: "sigForUserOp", + type: "bytes", + }, + { + internalType: "bytes", + name: "sigForAggregation", + type: "bytes", + }, + { + internalType: "bytes", + name: "offChainSigInfo", + type: "bytes", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "unstakeDelaySec", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "withdrawAmount", + type: "uint256", + }, + ], + name: "withdrawTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +export class IEntryPoint__factory { + static readonly abi = _abi; + static createInterface(): IEntryPointInterface { + return new utils.Interface(_abi) as IEntryPointInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IEntryPoint { + return new Contract(address, _abi, signerOrProvider) as IEntryPoint; + } +} diff --git a/packages/common/src/Types/factories/IStakeManager__factory.ts b/packages/common/src/Types/factories/IStakeManager__factory.ts new file mode 100644 index 000000000..a7e6b7bf1 --- /dev/null +++ b/packages/common/src/Types/factories/IStakeManager__factory.ts @@ -0,0 +1,291 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IStakeManager, IStakeManagerInterface } from "../IStakeManager"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "totalDeposit", + type: "uint256", + }, + ], + name: "Deposited", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "totalStaked", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "withdrawTime", + type: "uint256", + }, + ], + name: "StakeLocked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "withdrawTime", + type: "uint256", + }, + ], + name: "StakeUnlocked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "withdrawAddress", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "StakeWithdrawn", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "withdrawAddress", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "Withdrawn", + type: "event", + }, + { + inputs: [ + { + internalType: "uint32", + name: "_unstakeDelaySec", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "depositTo", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "getDepositInfo", + outputs: [ + { + components: [ + { + internalType: "uint112", + name: "deposit", + type: "uint112", + }, + { + internalType: "bool", + name: "staked", + type: "bool", + }, + { + internalType: "uint112", + name: "stake", + type: "uint112", + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + { + internalType: "uint64", + name: "withdrawTime", + type: "uint64", + }, + ], + internalType: "struct IStakeManager.DepositInfo", + name: "info", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "paymasterStake", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "unstakeDelaySec", + outputs: [ + { + internalType: "uint32", + name: "", + type: "uint32", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "withdrawAmount", + type: "uint256", + }, + ], + name: "withdrawTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +export class IStakeManager__factory { + static readonly abi = _abi; + static createInterface(): IStakeManagerInterface { + return new utils.Interface(_abi) as IStakeManagerInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IStakeManager { + return new Contract(address, _abi, signerOrProvider) as IStakeManager; + } +} diff --git a/packages/common/src/Types/factories/IWallet__factory.ts b/packages/common/src/Types/factories/IWallet__factory.ts new file mode 100644 index 000000000..07134c64f --- /dev/null +++ b/packages/common/src/Types/factories/IWallet__factory.ts @@ -0,0 +1,108 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import { Provider } from "@ethersproject/providers"; +import type { IWallet, IWalletInterface } from "../IWallet"; + +const _abi = [ + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "requestId", + type: "bytes32", + }, + { + internalType: "address", + name: "aggregator", + type: "address", + }, + { + internalType: "uint256", + name: "missingWalletFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +export class IWallet__factory { + static readonly abi = _abi; + static createInterface(): IWalletInterface { + return new utils.Interface(_abi) as IWalletInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IWallet { + return new Contract(address, _abi, signerOrProvider) as IWallet; + } +} diff --git a/packages/common/src/Types/factories/SampleRecipient__factory.ts b/packages/common/src/Types/factories/SampleRecipient__factory.ts new file mode 100644 index 000000000..6503256a1 --- /dev/null +++ b/packages/common/src/Types/factories/SampleRecipient__factory.ts @@ -0,0 +1,109 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + SampleRecipient, + SampleRecipientInterface, +} from "../SampleRecipient"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "txOrigin", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "msgSender", + type: "address", + }, + { + indexed: false, + internalType: "string", + name: "message", + type: "string", + }, + ], + name: "Sender", + type: "event", + }, + { + inputs: [], + name: "reverting", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "message", + type: "string", + }, + ], + name: "something", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x608060405234801561001057600080fd5b5061023e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806325d9185c1461003b578063d1f9cf0e14610045575b600080fd5b610043610058565b005b6100436100533660046100e6565b610092565b60405162461bcd60e51b815260206004820152600b60248201526a1d195cdd081c995d995c9d60aa1b604482015260640160405180910390fd5b7f603c3fe9b00ecddbd86daa6cbfe9a7f26505792913b8d1dec79052d86b5f79df3233836040516100c593929190610197565b60405180910390a150565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156100f857600080fd5b813567ffffffffffffffff8082111561011057600080fd5b818401915084601f83011261012457600080fd5b813581811115610136576101366100d0565b604051601f8201601f19908116603f0116810190838211818310171561015e5761015e6100d0565b8160405282815287602084870101111561017757600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060018060a01b038086168352602081861681850152606060408501528451915081606085015260005b828110156101de578581018201518582016080015281016101c2565b828111156101f0576000608084870101525b5050601f01601f19169190910160800194935050505056fea26469706673582212205175ec7b523886c578b5108ac8b576f78005097fd517e696632926c2a9e842fc64736f6c634300080f0033"; + +type SampleRecipientConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SampleRecipientConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SampleRecipient__factory extends ContractFactory { + constructor(...args: SampleRecipientConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + this.contractName = "SampleRecipient"; + } + + deploy( + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + getDeployTransaction( + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + attach(address: string): SampleRecipient { + return super.attach(address) as SampleRecipient; + } + connect(signer: Signer): SampleRecipient__factory { + return super.connect(signer) as SampleRecipient__factory; + } + static readonly contractName: "SampleRecipient"; + public readonly contractName: "SampleRecipient"; + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SampleRecipientInterface { + return new utils.Interface(_abi) as SampleRecipientInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): SampleRecipient { + return new Contract(address, _abi, signerOrProvider) as SampleRecipient; + } +} diff --git a/packages/common/src/Types/factories/SimpleWallet__factory.ts b/packages/common/src/Types/factories/SimpleWallet__factory.ts new file mode 100644 index 000000000..7df1c1111 --- /dev/null +++ b/packages/common/src/Types/factories/SimpleWallet__factory.ts @@ -0,0 +1,365 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { SimpleWallet, SimpleWalletInterface } from "../SimpleWallet"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + { + internalType: "address", + name: "anOwner", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "oldEntryPoint", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newEntryPoint", + type: "address", + }, + ], + name: "EntryPointChanged", + type: "event", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "exec", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "execBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execFromEntryPoint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transfer", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newEntryPoint", + type: "address", + }, + ], + name: "updateEntryPoint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "requestId", + type: "bytes32", + }, + { + internalType: "address", + name: "aggregator", + type: "address", + }, + { + internalType: "uint256", + name: "missingWalletFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +]; + +const _bytecode = + "0x608060405234801561001057600080fd5b50604051610fb4380380610fb483398101604081905261002f9161008f565b600180546001600160a01b039384166001600160a01b031990911617905560008054919092166c01000000000000000000000000026001600160601b039091161790556100c9565b6001600160a01b038116811461008c57600080fd5b50565b600080604083850312156100a257600080fd5b82516100ad81610077565b60208401519092506100be81610077565b809150509250929050565b610edc806100d86000396000f3fe6080604052600436106100ab5760003560e01c80638da5cb5b116100645780638da5cb5b14610161578063a9059cbb146101a5578063affed0e0146101c5578063b0d691fe146101ed578063c399ec881461020b578063d0cb75fa1461022057600080fd5b80630565bb67146100b75780630825d1fc146100d95780631b71bb6e146100f95780634a58db19146101195780634d44560d1461012157806380c5c7d01461014157600080fd5b366100b257005b600080fd5b3480156100c357600080fd5b506100d76100d2366004610b99565b610240565b005b3480156100e557600080fd5b506100d76100f4366004610c22565b61028f565b34801561010557600080fd5b506100d7610114366004610c89565b6102ca565b6100d76102de565b34801561012d57600080fd5b506100d761013c366004610cad565b61034f565b34801561014d57600080fd5b506100d761015c366004610b99565b6103cb565b34801561016d57600080fd5b5060005461018890600160601b90046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101b157600080fd5b506100d76101c0366004610cad565b6103d3565b3480156101d157600080fd5b506000546001600160601b03165b60405190815260200161019c565b3480156101f957600080fd5b506001546001600160a01b0316610188565b34801561021757600080fd5b506101df610416565b34801561022c57600080fd5b506100d761023b366004610d1e565b610499565b610248610599565b610289848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105f392505050565b50505050565b610297610663565b6102a28484846106bd565b6102af6040850185610d8a565b90506000036102c1576102c1846107ca565b6102898161085c565b6102d26108a9565b6102db816108b1565b50565b60006102f26001546001600160a01b031690565b6001600160a01b03163460405160006040518083038185875af1925050503d806000811461033c576040519150601f19603f3d011682016040523d82523d6000602084013e610341565b606091505b50509050806102db57600080fd5b610357610599565b6001546001600160a01b031660405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b1580156103af57600080fd5b505af11580156103c3573d6000803e3d6000fd5b505050505050565b610248610663565b6103db610599565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610411573d6000803e3d6000fd5b505050565b600061042a6001546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104949190610dd1565b905090565b6104a1610599565b8281146104eb5760405162461bcd60e51b815260206004820152601360248201527277726f6e67206172726179206c656e6774687360681b60448201526064015b60405180910390fd5b60005b838110156105925761058085858381811061050b5761050b610dea565b90506020020160208101906105209190610c89565b600085858581811061053457610534610dea565b90506020028101906105469190610d8a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105f392505050565b8061058a81610e16565b9150506104ee565b5050505050565b600054600160601b90046001600160a01b03163314806105b857503330145b6105f15760405162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b60448201526064016104e2565b565b600080846001600160a01b0316848460405161060f9190610e2f565b60006040518083038185875af1925050503d806000811461064c576040519150601f19603f3d011682016040523d82523d6000602084013e610651565b606091505b50915091508161059257805160208201fd5b6001546001600160a01b031633146105f15760405162461bcd60e51b815260206004820152601b60248201527f77616c6c65743a206e6f742066726f6d20456e747279506f696e74000000000060448201526064016104e2565b6000610716836040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050610766610729610140860186610d8a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859392505061090d9050565b600054600160601b90046001600160a01b039081169116146102895760405162461bcd60e51b815260206004820152601760248201527f77616c6c65743a2077726f6e67207369676e617475726500000000000000000060448201526064016104e2565b600080546020830135916001600160601b0390911690806107ea83610e6a565b91906101000a8154816001600160601b0302191690836001600160601b031602179055506001600160601b0316146102db5760405162461bcd60e51b815260206004820152601560248201527477616c6c65743a20696e76616c6964206e6f6e636560581b60448201526064016104e2565b80156102db57604051600090339060001990849084818181858888f193505050503d8060008114610592576040519150601f19603f3d011682016040523d82523d6000602084013e610592565b6105f1610599565b6001546040516001600160a01b038084169216907f450909c1478d09248269d4ad4fa8cba61ca3f50faed58c7aedefa51c7f62b83a90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080600061091c8585610931565b9150915061092981610976565b509392505050565b60008082516041036109675760208301516040840151606085015160001a61095b87828585610ac0565b9450945050505061096f565b506000905060025b9250929050565b600081600481111561098a5761098a610e90565b036109925750565b60018160048111156109a6576109a6610e90565b036109f35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104e2565b6002816004811115610a0757610a07610e90565b03610a545760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104e2565b6003816004811115610a6857610a68610e90565b036102db5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104e2565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610af75750600090506003610b7b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610b4b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610b7457600060019250925050610b7b565b9150600090505b94509492505050565b6001600160a01b03811681146102db57600080fd5b60008060008060608587031215610baf57600080fd5b8435610bba81610b84565b935060208501359250604085013567ffffffffffffffff80821115610bde57600080fd5b818701915087601f830112610bf257600080fd5b813581811115610c0157600080fd5b886020828501011115610c1357600080fd5b95989497505060200194505050565b60008060008060808587031215610c3857600080fd5b843567ffffffffffffffff811115610c4f57600080fd5b85016101608188031215610c6257600080fd5b9350602085013592506040850135610c7981610b84565b9396929550929360600135925050565b600060208284031215610c9b57600080fd5b8135610ca681610b84565b9392505050565b60008060408385031215610cc057600080fd5b8235610ccb81610b84565b946020939093013593505050565b60008083601f840112610ceb57600080fd5b50813567ffffffffffffffff811115610d0357600080fd5b6020830191508360208260051b850101111561096f57600080fd5b60008060008060408587031215610d3457600080fd5b843567ffffffffffffffff80821115610d4c57600080fd5b610d5888838901610cd9565b90965094506020870135915080821115610d7157600080fd5b50610d7e87828801610cd9565b95989497509550505050565b6000808335601e19843603018112610da157600080fd5b83018035915067ffffffffffffffff821115610dbc57600080fd5b60200191503681900382131561096f57600080fd5b600060208284031215610de357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610e2857610e28610e00565b5060010190565b6000825160005b81811015610e505760208186018101518583015201610e36565b81811115610e5f576000828501525b509190910192915050565b60006001600160601b03808316818103610e8657610e86610e00565b6001019392505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220a3fa7ae8e1dc12cafff9537c9c2d824ed34defbdffc76773926bfb377c18ed7664736f6c634300080f0033"; + +type SimpleWalletConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SimpleWalletConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SimpleWallet__factory extends ContractFactory { + constructor(...args: SimpleWalletConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + this.contractName = "SimpleWallet"; + } + + deploy( + anEntryPoint: string, + anOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy( + anEntryPoint, + anOwner, + overrides || {} + ) as Promise; + } + getDeployTransaction( + anEntryPoint: string, + anOwner: string, + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(anEntryPoint, anOwner, overrides || {}); + } + attach(address: string): SimpleWallet { + return super.attach(address) as SimpleWallet; + } + connect(signer: Signer): SimpleWallet__factory { + return super.connect(signer) as SimpleWallet__factory; + } + static readonly contractName: "SimpleWallet"; + public readonly contractName: "SimpleWallet"; + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SimpleWalletInterface { + return new utils.Interface(_abi) as SimpleWalletInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): SimpleWallet { + return new Contract(address, _abi, signerOrProvider) as SimpleWallet; + } +} diff --git a/packages/common/src/Types/factories/SingletonFactory__factory.ts b/packages/common/src/Types/factories/SingletonFactory__factory.ts new file mode 100644 index 000000000..41502a466 --- /dev/null +++ b/packages/common/src/Types/factories/SingletonFactory__factory.ts @@ -0,0 +1,88 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { + SingletonFactory, + SingletonFactoryInterface, +} from "../SingletonFactory"; + +const _abi = [ + { + inputs: [ + { + internalType: "bytes", + name: "_initCode", + type: "bytes", + }, + { + internalType: "bytes32", + name: "_salt", + type: "bytes32", + }, + ], + name: "deploy", + outputs: [ + { + internalType: "address payable", + name: "createdContract", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x608060405234801561001057600080fd5b50610173806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634af63f0214610030575b600080fd5b61004361003e366004610088565b61005f565b6040516001600160a01b03909116815260200160405180910390f35b6000818351602085016000f59392505050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561009b57600080fd5b823567ffffffffffffffff808211156100b357600080fd5b818501915085601f8301126100c757600080fd5b8135818111156100d9576100d9610072565b604051601f8201601f19908116603f0116810190838211818310171561010157610101610072565b8160405282815288602084870101111561011a57600080fd5b82602086016020830137600060209382018401529896909101359650505050505056fea2646970667358221220942f273f033772d703ba03c258b70c24fa13dd7248a7d6289b6f626bb6a62c5d64736f6c634300080f0033"; + +type SingletonFactoryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SingletonFactoryConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SingletonFactory__factory extends ContractFactory { + constructor(...args: SingletonFactoryConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + this.contractName = "SingletonFactory"; + } + + deploy( + overrides?: Overrides & { from?: string | Promise } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + getDeployTransaction( + overrides?: Overrides & { from?: string | Promise } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + attach(address: string): SingletonFactory { + return super.attach(address) as SingletonFactory; + } + connect(signer: Signer): SingletonFactory__factory { + return super.connect(signer) as SingletonFactory__factory; + } + static readonly contractName: "SingletonFactory"; + public readonly contractName: "SingletonFactory"; + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SingletonFactoryInterface { + return new utils.Interface(_abi) as SingletonFactoryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): SingletonFactory { + return new Contract(address, _abi, signerOrProvider) as SingletonFactory; + } +} diff --git a/packages/common/src/Types/hardhat.d.ts b/packages/common/src/Types/hardhat.d.ts new file mode 100644 index 000000000..389feaa23 --- /dev/null +++ b/packages/common/src/Types/hardhat.d.ts @@ -0,0 +1,105 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { ethers } from "ethers"; +import { + FactoryOptions, + HardhatEthersHelpers as HardhatEthersHelpersBase, +} from "@nomiclabs/hardhat-ethers/types"; + +import * as Contracts from "."; + +declare module "hardhat/types/runtime" { + interface HardhatEthersHelpers extends HardhatEthersHelpersBase { + getContractFactory( + name: "BaseWallet", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "IAggregator", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "IEntryPoint", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "IStakeManager", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "IWallet", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "SimpleWallet", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "SampleRecipient", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "SingletonFactory", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + + getContractAt( + name: "BaseWallet", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "IAggregator", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "IEntryPoint", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "IStakeManager", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "IWallet", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "SimpleWallet", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "SampleRecipient", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "SingletonFactory", + address: string, + signer?: ethers.Signer + ): Promise; + + // default types + getContractFactory( + name: string, + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + abi: any[], + bytecode: ethers.utils.BytesLike, + signer?: ethers.Signer + ): Promise; + getContractAt( + nameOrAbi: string | any[], + address: string, + signer?: ethers.Signer + ): Promise; + } +} diff --git a/packages/common/src/Types/index.ts b/packages/common/src/Types/index.ts new file mode 100644 index 000000000..55026213f --- /dev/null +++ b/packages/common/src/Types/index.ts @@ -0,0 +1,20 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { BaseWallet } from "./BaseWallet"; +export type { IAggregator } from "./IAggregator"; +export type { IEntryPoint } from "./IEntryPoint"; +export type { IStakeManager } from "./IStakeManager"; +export type { IWallet } from "./IWallet"; +export type { SimpleWallet } from "./SimpleWallet"; +export type { SampleRecipient } from "./SampleRecipient"; +export type { SingletonFactory } from "./SingletonFactory"; + +export { BaseWallet__factory } from "./factories/BaseWallet__factory"; +export { IAggregator__factory } from "./factories/IAggregator__factory"; +export { IEntryPoint__factory } from "./factories/IEntryPoint__factory"; +export { IStakeManager__factory } from "./factories/IStakeManager__factory"; +export { IWallet__factory } from "./factories/IWallet__factory"; +export { SimpleWallet__factory } from "./factories/SimpleWallet__factory"; +export { SampleRecipient__factory } from "./factories/SampleRecipient__factory"; +export { SingletonFactory__factory } from "./factories/SingletonFactory__factory"; diff --git a/packages/core-types/src/Types.ts b/packages/core-types/src/Types.ts new file mode 100644 index 000000000..89d7112d2 --- /dev/null +++ b/packages/core-types/src/Types.ts @@ -0,0 +1,87 @@ +// import { ChainId } from './ChainsTypes' + +export type SmartAccountVersion = '1.0.1' | '1.0.0' + +export enum OperationType { + Call, // 0 + DelegateCall // 1 +} + +export type Eip3770Address = { + prefix: string + address: string +} + +// review +export type RelayResponse = { + code?: number + message?: string + transactionId?: string + hash?: string + error?: string + connectionUrl?: string +} +export type UserOperation = { + sender: string + nonce: number + initCode: string + callData: string + callGasLimit: number + verificationGasLimit: number + preVerificationGas: number + maxFeePerGas: number + maxPriorityFeePerGas: number + paymasterAndData: string + signature: string +} + +export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' + +// Review +export const DEFAULT_FEE_RECEIVER = '0x7306aC7A32eb690232De81a9FFB44Bb346026faB' + +export const GAS_USAGE_OFFSET = 4928 + 2360 + +// Few more constants can be added regarding token transfer / handle payments +export const FAKE_SIGNATURE = + '0x39f5032f1cd30005aa1e35f04394cabfe7de3b6ae6d95b27edd8556064c287bf61f321fead0cf48ca4405d497cc8fc47fc7ff0b7f5c45baa14090a44f2307d8230' + +export type RestRelayerOptions = { + url: string + socketServerUrl: string +} + +export type TokenData = { + tokenGasPrice: number // review + offset?: number // review + symbol: string + address: string + decimal: number + logoUrl: string + feeTokenTransferGas: number + refundReceiver?: string +} + +export type FeeQuote = { + symbol: string + address: string + decimal: number + logoUrl: string + payment: number + tokenGasPrice: number + offset?: number + refundReceiver?: string +} + +export type FeeOptionsResponse = { + msg: string + data: { + chainId: number + response: Array + } +} +export type FeeOption = { + feeToken: string + tokenGasPrice: number | string //review + offset: number | string // review +} diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 0e12835fc..89d7112d2 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -1,4 +1,4 @@ -import { ChainId } from './ChainsTypes' +// import { ChainId } from './ChainsTypes' export type SmartAccountVersion = '1.0.1' | '1.0.0' diff --git a/packages/node-client/src/utils/HttpRequests.ts b/packages/node-client/src/utils/HttpRequests.ts new file mode 100644 index 000000000..11b2cf209 --- /dev/null +++ b/packages/node-client/src/utils/HttpRequests.ts @@ -0,0 +1,54 @@ +import fetch from 'node-fetch' + +export enum HttpMethod { + Get = 'get', + Post = 'post', + Delete = 'delete' +} + +/* eslint-disable @typescript-eslint/no-explicit-any */ +interface HttpRequest { + url: string + method: HttpMethod + body?: Record +} + +export async function sendRequest({ url, method, body }: HttpRequest): Promise { + const response = await fetch(url, { + method, + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(body) + }) + + let jsonResponse + try { + jsonResponse = await response.json() + } catch (error) { + if (!response.ok) { + throw new Error(response.statusText) + } + } + + if (response.ok) { + return jsonResponse as T + } + if (jsonResponse.data) { + throw new Error(jsonResponse.data) + } + if (jsonResponse.detail) { + throw new Error(jsonResponse.detail) + } + if (jsonResponse.message) { + throw new Error(jsonResponse.message) + } + if (jsonResponse.nonFieldErrors) { + throw new Error(jsonResponse.nonFieldErrors) + } + if (jsonResponse.delegate) { + throw new Error(jsonResponse.delegate) + } + throw new Error(response.statusText) +} diff --git a/packages/relayer/src/utils/HttpRequests.ts b/packages/relayer/src/utils/HttpRequests.ts new file mode 100644 index 000000000..132da24fa --- /dev/null +++ b/packages/relayer/src/utils/HttpRequests.ts @@ -0,0 +1,55 @@ +import fetch from 'node-fetch' + +export enum HttpMethod { + Get = 'get', + Post = 'post', + Delete = 'delete' +} +/* eslint-disable @typescript-eslint/no-explicit-any */ +interface HttpRequest { + url: string + method: HttpMethod + body?: Record + headers?: object +} + +export async function sendRequest({ url, method, body, headers = {} }: HttpRequest): Promise { + const response = await fetch(url, { + method, + headers: { + ...headers, + Accept: 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(body) + }) + + let jsonResponse + try { + jsonResponse = await response.json() + } catch (error) { + if (!response.ok) { + throw new Error(response.statusText) + } + } + + if (response.ok) { + return jsonResponse as T + } + if (jsonResponse.data) { + throw new Error(jsonResponse.data) + } + if (jsonResponse.detail) { + throw new Error(jsonResponse.detail) + } + if (jsonResponse.message) { + throw new Error(jsonResponse.message) + } + if (jsonResponse.nonFieldErrors) { + throw new Error(jsonResponse.nonFieldErrors) + } + if (jsonResponse.delegate) { + throw new Error(jsonResponse.delegate) + } + throw new Error(response.statusText) +} diff --git a/packages/relayer/src/utils/MultiSend.ts b/packages/relayer/src/utils/MultiSend.ts new file mode 100644 index 000000000..b3e920776 --- /dev/null +++ b/packages/relayer/src/utils/MultiSend.ts @@ -0,0 +1,89 @@ +import { Contract, BigNumberish, utils } from 'ethers' +import { AddressZero } from '@ethersproject/constants' + +export interface MetaTransaction { + to: string + value: BigNumberish + data: string + operation: number +} + +export interface WalletTransaction extends MetaTransaction { + targetTxGas: string | number + baseGas: string | number + gasPrice: string | number + gasToken: string + refundReceiver: string + nonce: number +} + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export const buildContractCall = ( + contract: Contract, + method: string, + params: any[], + nonce: number, + delegateCall?: boolean, + overrides?: Partial +): WalletTransaction => { + const data = contract.interface.encodeFunctionData(method, params) + return buildSmartAccountTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }, + overrides + ) + ) +} + +export const buildSmartAccountTransaction = (template: { + to: string + value?: BigNumberish + data?: string + operation?: number + targetTxGas?: number | string + baseGas?: number | string + gasPrice?: number | string + gasToken?: string + refundReceiver?: string + nonce: number +}): WalletTransaction => { + return { + to: template.to, + value: template.value || 0, + data: template.data || '0x', + operation: template.operation || 0, + targetTxGas: template.targetTxGas || 0, + baseGas: template.baseGas || 0, + gasPrice: template.gasPrice || 0, + gasToken: template.gasToken || AddressZero, + refundReceiver: template.refundReceiver || AddressZero, + nonce: template.nonce + } +} + +const encodeMetaTransaction = (tx: MetaTransaction): string => { + const data = utils.arrayify(tx.data) + const encoded = utils.solidityPack( + ['uint8', 'address', 'uint256', 'uint256', 'bytes'], + [tx.operation, tx.to, tx.value, data.length, data] + ) + return encoded.slice(2) +} + +export const encodeMultiSend = (txs: MetaTransaction[]): string => { + return '0x' + txs.map((tx) => encodeMetaTransaction(tx)).join('') +} + +export const buildMultiSendSmartAccountTx = ( + multiSend: Contract, + txs: MetaTransaction[], + nonce: number, + overrides?: Partial +): WalletTransaction => { + return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) +} diff --git a/packages/transactions/src/Estimator.ts b/packages/transactions/src/Estimator.ts new file mode 100644 index 000000000..5ee628a9a --- /dev/null +++ b/packages/transactions/src/Estimator.ts @@ -0,0 +1,183 @@ +import { ethers } from 'ethers' +import { GasEstimator } from './assets' +import NodeClient, { EstimateUndeployedContractGasDto } from '@biconomy-sdk/node-client' +import ContractUtils from './ContractUtils' +import { + EstimateSmartAccountDeploymentDto, + IWalletTransaction, + FAKE_SIGNATURE, + ExecTransaction, + IFeeRefundV1_0_1, + SmartAccountState +} from '@biconomy-sdk/core-types' +import { PrepareRefundTransactionsDto, PrepareRefundTransactionDto } from './Types' + +export class Estimator { + nodeClient!: NodeClient + + contractUtils!: ContractUtils + + // Note: Smart account state should Not be part of constructor + constructor(nodeClient: NodeClient, contractUtils: ContractUtils) { + this.nodeClient = nodeClient + this.contractUtils = contractUtils + } + + async estimateTransaction( + prepareTransactionDto: PrepareRefundTransactionDto, + createdTransaction: IWalletTransaction, + smartAccountState: SmartAccountState + ): Promise { + const { chainId, version } = prepareTransactionDto + let estimatedGasUsed = 0 + // Check if available from current state + const isDeployed = await this.contractUtils.isDeployed( + chainId, + version, + smartAccountState.address // SmartAccountState + ) + if (!isDeployed) { + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: smartAccountState.owner, // SmartAccountState + entryPointAddress: smartAccountState.entryPointAddress, // SmartAccountState + fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress // SmartAccountState + }) + console.log('estimateWalletDeployment ', estimateWalletDeployment) + + estimatedGasUsed += estimateWalletDeployment + } + + const txn: ExecTransaction = { + to: createdTransaction.to, + value: createdTransaction.value, + data: createdTransaction.data, + operation: createdTransaction.operation, + targetTxGas: createdTransaction.targetTxGas + } + + // to avoid failing eth_call override with undeployed wallet + txn.targetTxGas = 500000 + + const refundInfo: IFeeRefundV1_0_1 = { + baseGas: createdTransaction.baseGas, + gasPrice: createdTransaction.gasPrice, + tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, + gasToken: createdTransaction.gasToken, + refundReceiver: createdTransaction.refundReceiver + } + + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + version, + transaction: txn, + walletAddress: smartAccountState.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE + } + + const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas( + estimateUndeployedContractGasDto + ) + const noAuthEstimate = + Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas) + console.log('no auth no refund estimate', noAuthEstimate) + + estimatedGasUsed += noAuthEstimate + + return estimatedGasUsed + } + + async estimateTransactionBatch( + prepareRefundTransactionsDto: PrepareRefundTransactionsDto, + createdTransaction: IWalletTransaction, + smartAccountState: SmartAccountState + ): Promise { + const { chainId, version } = prepareRefundTransactionsDto + let estimatedGasUsed = 0 + // Check if available from current state + const isDeployed = await this.contractUtils.isDeployed( + chainId, + version, + smartAccountState.address + ) + if (!isDeployed) { + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: smartAccountState.owner, + entryPointAddress: smartAccountState.entryPointAddress, + fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress + }) + console.log('estimateWalletDeployment ', estimateWalletDeployment) + estimatedGasUsed += estimateWalletDeployment + } + + const txn: ExecTransaction = { + to: createdTransaction.to, + value: createdTransaction.value, + data: createdTransaction.data, + operation: createdTransaction.operation, + targetTxGas: createdTransaction.targetTxGas + } + + // to avoid failing eth_call override with undeployed wallet + txn.targetTxGas = 500000 + + const refundInfo: IFeeRefundV1_0_1 = { + baseGas: createdTransaction.baseGas, + gasPrice: createdTransaction.gasPrice, + tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, + gasToken: createdTransaction.gasToken, + refundReceiver: createdTransaction.refundReceiver + } + + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + version, + transaction: txn, + walletAddress: smartAccountState.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE + } + + const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas( + estimateUndeployedContractGasDto + ) + const noAuthEstimate = + Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas) + console.log('no auth no refund estimate', noAuthEstimate) + + estimatedGasUsed += noAuthEstimate + + return estimatedGasUsed + } + + async estimateSmartAccountDeployment( + estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto + ): Promise { + const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi) + const { chainId, version, owner, entryPointAddress, fallbackHandlerAddress } = + estimateSmartAccountDeploymentDto + const walletFactoryInterface = + this.contractUtils.smartWalletFactoryContract[chainId][version].getInterface() + const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ + this.contractUtils.smartWalletFactoryContract[chainId][version].getAddress(), + walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ + owner, + entryPointAddress, + fallbackHandlerAddress, + 0 + ]) + ]) + console.log('encodedEstimate ', encodedEstimateData) + const deployCostresponse = await this.nodeClient.estimateExternalGas({ + chainId, + encodedData: encodedEstimateData + }) + const estimateWalletDeployment = Number(deployCostresponse.data.gas) + console.log('estimateWalletDeployment ', estimateWalletDeployment) + return estimateWalletDeployment + } +} diff --git a/packages/transactions/src/Execution.ts b/packages/transactions/src/Execution.ts new file mode 100644 index 000000000..e250e5fd5 --- /dev/null +++ b/packages/transactions/src/Execution.ts @@ -0,0 +1,284 @@ +import { Contract, Wallet, utils, BigNumberish, Signer, PopulatedTransaction } from 'ethers' + +import { + ChainId, + ExecTransaction, + IFeeRefundV1_0_0, + IFeeRefundV1_0_1, + IWalletTransaction, + SmartAccountSignature +} from '@biconomy-sdk/core-types' + +import { TypedDataSigner } from '@ethersproject/abstract-signer' +import { AddressZero } from '@ethersproject/constants' + +export const EIP_DOMAIN = { + EIP712Domain: [ + { type: 'uint256', name: 'chainId' }, + { type: 'address', name: 'verifyingContract' } + ] +} + +export const EIP712_WALLET_TX_TYPE = { + // "WalletTx(address to,uint256 value,bytes data,uint8 operation,uint256 targetTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" + WalletTx: [ + { type: 'address', name: 'to' }, + { type: 'uint256', name: 'value' }, + { type: 'bytes', name: 'data' }, + { type: 'uint8', name: 'operation' }, + { type: 'uint256', name: 'targetTxGas' }, + { type: 'uint256', name: 'baseGas' }, + { type: 'uint256', name: 'gasPrice' }, + { type: 'address', name: 'gasToken' }, + { type: 'address', name: 'refundReceiver' }, + { type: 'uint256', name: 'nonce' } + ] +} + +export const EIP712_SMART_ACCOUNT_MESSAGE_TYPE = { + // "SmartAccountMessage(bytes message)" + SmartAccountMessage: [{ type: 'bytes', name: 'message' }] +} + +export const calculateSmartAccountDomainSeparator = ( + wallet: Contract, + chainId: BigNumberish +): string => { + return utils._TypedDataEncoder.hashDomain({ + verifyingContract: wallet.address, + chainId + }) +} + +export const preimageWalletTransactionHash = ( + wallet: Contract, + SmartAccountTx: IWalletTransaction, + chainId: BigNumberish +): string => { + return utils._TypedDataEncoder.encode( + { verifyingContract: wallet.address, chainId }, + EIP712_WALLET_TX_TYPE, + SmartAccountTx + ) +} + +export const calculateSmartAccountTransactionHash = ( + wallet: Contract, + SmartAccountTx: IWalletTransaction, + chainId: BigNumberish +): string => { + return utils._TypedDataEncoder.hash( + { verifyingContract: wallet.address, chainId }, + EIP712_WALLET_TX_TYPE, + SmartAccountTx + ) +} + +export const calculateSmartAccountMessageHash = ( + wallet: Contract, + message: string, + chainId: BigNumberish +): string => { + return utils._TypedDataEncoder.hash( + { verifyingContract: wallet.address, chainId }, + EIP712_SMART_ACCOUNT_MESSAGE_TYPE, + { message } + ) +} + +export const smartAccountSignTypedData = async ( + signer: Signer & TypedDataSigner, + wallet: Contract, + SmartAccountTx: IWalletTransaction, + chainId?: BigNumberish +): Promise => { + if (!chainId && !signer.provider) throw Error('Provider required to retrieve chainId') + const cid = chainId || (await signer.provider!.getNetwork()).chainId + const signerAddress = await signer.getAddress() + return { + signer: signerAddress, + data: await signer._signTypedData( + { verifyingContract: wallet.address, chainId: cid }, + EIP712_WALLET_TX_TYPE, + SmartAccountTx + ) + } +} + +export const signHash = async (signer: Signer, hash: string): Promise => { + const typedDataHash = utils.arrayify(hash) + const signerAddress = await signer.getAddress() + return { + signer: signerAddress, + data: (await signer.signMessage(typedDataHash)).replace(/1b$/, '1f').replace(/1c$/, '20') + } +} + +export const smartAccountSignMessage = async ( + signer: Signer, + wallet: Contract, + SmartAccountTx: IWalletTransaction, + chainId: ChainId +): Promise => { + const cid = chainId ? chainId : (await signer.provider!.getNetwork()).chainId + if (!cid) { + throw Error('smartAccountSignMessage: Chain Id Not Found') + } + return signHash(signer, calculateSmartAccountTransactionHash(wallet, SmartAccountTx, cid)) +} + +export const buildSignatureBytes = (signatures: SmartAccountSignature[]): string => { + signatures.sort((left, right) => + left.signer.toLowerCase().localeCompare(right.signer.toLowerCase()) + ) + let signatureBytes = '0x' + for (const sig of signatures) { + signatureBytes += sig.data.slice(2) + } + return signatureBytes +} + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export const executeTx = async ( + wallet: Contract, + SmartAccountTx: IWalletTransaction, + signatures: SmartAccountSignature[], + overrides?: any +): Promise => { + const signatureBytes = buildSignatureBytes(signatures) + const transaction: ExecTransaction = { + to: SmartAccountTx.to, + value: SmartAccountTx.value, + data: SmartAccountTx.data, + operation: SmartAccountTx.operation, + targetTxGas: SmartAccountTx.targetTxGas + } + const refundInfo: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 = { + baseGas: SmartAccountTx.baseGas, + gasPrice: SmartAccountTx.gasPrice, + tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, + gasToken: SmartAccountTx.gasToken, + refundReceiver: SmartAccountTx.refundReceiver + } + return wallet.execTransaction( + transaction, + 0, // batchId + refundInfo, + signatureBytes, + overrides || {} + ) +} + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export const populateExecuteTx = async ( + wallet: Contract, + SmartAccountTx: IWalletTransaction, + signatures: SmartAccountSignature[], + overrides?: any +): Promise => { + const signatureBytes = buildSignatureBytes(signatures) + const transaction: ExecTransaction = { + to: SmartAccountTx.to, + value: SmartAccountTx.value, + data: SmartAccountTx.data, + operation: SmartAccountTx.operation, + targetTxGas: SmartAccountTx.targetTxGas + } + const refundInfo: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 = { + baseGas: SmartAccountTx.baseGas, + gasPrice: SmartAccountTx.gasPrice, + tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, + gasToken: SmartAccountTx.gasToken, + refundReceiver: SmartAccountTx.refundReceiver + } + return wallet.populateTransaction.execTransaction( + transaction, + 0, // batchId + refundInfo, + signatureBytes, + overrides || {} + ) +} +/* eslint-disable @typescript-eslint/no-explicit-any */ +export const buildContractCall = ( + contract: Contract, + method: string, + params: any[], + nonce: number, + delegateCall?: boolean, + overrides?: Partial +): IWalletTransaction => { + const data = contract.interface.encodeFunctionData(method, params) + return buildSmartAccountTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }, + overrides + ) + ) +} + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export const executeTxWithSigners = async ( + wallet: Contract, + tx: IWalletTransaction, + signers: Wallet[], + overrides?: any +) => { + const sigs = await Promise.all( + signers.map((signer) => smartAccountSignTypedData(signer, wallet, tx)) + ) + return executeTx(wallet, tx, sigs, overrides) +} +/* eslint-disable @typescript-eslint/no-explicit-any */ +export const executeContractCallWithSigners = async ( + wallet: Contract, + contract: Contract, + method: string, + params: any[], + signers: Wallet[], + delegateCall?: boolean, + overrides?: Partial +) => { + const tx = buildContractCall( + contract, + method, + params, + await wallet.getNonce(0), //default batchId @review + delegateCall, + overrides + ) + return executeTxWithSigners(wallet, tx, signers) +} + +export const buildSmartAccountTransaction = (template: { + to: string + value?: BigNumberish + data?: string + operation?: number + targetTxGas?: number | string + baseGas?: number | string + gasPrice?: number | string + tokenGasPriceFactor?: number | string + gasToken?: string + refundReceiver?: string + nonce: number +}): IWalletTransaction => { + return { + to: template.to, + value: template.value || 0, + data: template.data || '0x', + operation: template.operation || 0, + targetTxGas: template.targetTxGas || 0, + baseGas: template.baseGas || 0, + gasPrice: template.gasPrice || 0, + tokenGasPriceFactor: template.tokenGasPriceFactor || 1, + gasToken: template.gasToken || AddressZero, + refundReceiver: template.refundReceiver || AddressZero, + nonce: template.nonce + } +} diff --git a/packages/transactions/src/MultiSend.ts b/packages/transactions/src/MultiSend.ts new file mode 100644 index 000000000..0239ab922 --- /dev/null +++ b/packages/transactions/src/MultiSend.ts @@ -0,0 +1,25 @@ +import { Contract, utils } from 'ethers' +import { buildContractCall } from './Execution' +import { IMetaTransaction, IWalletTransaction } from '@biconomy-sdk/core-types' + +const encodeMetaTransaction = (tx: IMetaTransaction): string => { + const data = utils.arrayify(tx.data) + const encoded = utils.solidityPack( + ['uint8', 'address', 'uint256', 'uint256', 'bytes'], + [tx.operation, tx.to, tx.value, data.length, data] + ) + return encoded.slice(2) +} + +export const encodeMultiSend = (txs: IMetaTransaction[]): string => { + return '0x' + txs.map((tx) => encodeMetaTransaction(tx)).join('') +} + +export const buildMultiSendSmartAccountTx = ( + multiSend: Contract, + txs: IMetaTransaction[], + nonce: number, + overrides?: Partial +): IWalletTransaction => { + return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) +} diff --git a/packages/transactions/src/Types.ts b/packages/transactions/src/Types.ts new file mode 100644 index 000000000..527c9b222 --- /dev/null +++ b/packages/transactions/src/Types.ts @@ -0,0 +1,44 @@ +import { Transaction, ChainId, FeeQuote } from '@biconomy-sdk/core-types' + +export type PrepareRefundTransactionDto = { + version: string + transaction: Transaction + batchId: number + chainId: ChainId +} + +export type PrepareRefundTransactionsDto = { + version: string + transactions: Transaction[] + batchId: number + chainId: ChainId +} + +export type RefundTransactionDto = { + version: string + transaction: Transaction + feeQuote: FeeQuote + batchId: number + chainId: ChainId +} +export type RefundTransactionBatchDto = { + version: string + transactions: Transaction[] + feeQuote: FeeQuote + batchId: number + chainId: ChainId +} + +export type TransactionDto = { + version: string + transaction: Transaction + batchId: number + chainId: ChainId +} + +export type TransactionBatchDto = { + version: string + transactions: Transaction[] + batchId: number + chainId: ChainId +} diff --git a/packages/transactions/src/Utils.ts b/packages/transactions/src/Utils.ts new file mode 100644 index 000000000..7cb72c613 --- /dev/null +++ b/packages/transactions/src/Utils.ts @@ -0,0 +1,123 @@ +import { BigNumberish, Contract, utils } from 'ethers' + +import { IMetaTransaction, IWalletTransaction, Transaction } from '@biconomy-sdk/core-types' + +import { AddressZero } from '@ethersproject/constants' + +export class Utils { + constructor() { + console.log('Utils Class Initialized') + } + + buildSmartAccountTransaction = (template: { + to: string + value?: BigNumberish + data?: string + operation?: number + targetTxGas?: number | string + baseGas?: number | string + gasPrice?: number | string + tokenGasPriceFactor?: number | string + gasToken?: string + refundReceiver?: string + nonce: number + }): IWalletTransaction => { + return { + to: template.to, + value: template.value || 0, + data: template.data || '0x', + operation: template.operation || 0, + targetTxGas: template.targetTxGas || 0, + baseGas: template.baseGas || 0, + gasPrice: template.gasPrice || 0, + tokenGasPriceFactor: template.tokenGasPriceFactor || 1, + gasToken: template.gasToken || AddressZero, + refundReceiver: template.refundReceiver || AddressZero, + nonce: template.nonce + } + } + + buildSmartAccountTransactions = (transactions: Transaction[]): IMetaTransaction[] => { + const txs: IMetaTransaction[] = [] + for (let i = 0; i < transactions.length; i++) { + const innerTx: IWalletTransaction = this.buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) + + txs.push(innerTx) + } + return txs + } + + buildMultiSendSmartAccountTx = ( + multiSend: Contract, + txs: IMetaTransaction[], + nonce: number, + overrides?: Partial + ): IWalletTransaction => { + return this.buildContractCall( + multiSend, + 'multiSend', + [this.encodeMultiSend(txs)], + nonce, + true, + overrides + ) + } + + buildMultiSendTx = ( + multiSend: Contract, + txs: IMetaTransaction[], + nonce: number, + delegateCall?: boolean + ): IMetaTransaction => { + const data = multiSend.interface.encodeFunctionData('multiSend', [this.encodeMultiSend(txs)]) + return this.buildSmartAccountTransaction( + Object.assign({ + to: multiSend.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }) + ) + } + + encodeMultiSend = (txs: IMetaTransaction[]): string => { + return '0x' + txs.map((tx) => this.encodeMetaTransaction(tx)).join('') + } + + encodeMetaTransaction = (tx: IMetaTransaction): string => { + const data = utils.arrayify(tx.data) + const encoded = utils.solidityPack( + ['uint8', 'address', 'uint256', 'uint256', 'bytes'], + [tx.operation, tx.to, tx.value, data.length, data] + ) + return encoded.slice(2) + } + + /* eslint-disable @typescript-eslint/no-explicit-any */ + buildContractCall = ( + contract: Contract, + method: string, + params: any[], + nonce: number, + delegateCall?: boolean, + overrides?: Partial + ): IWalletTransaction => { + const data = contract.interface.encodeFunctionData(method, params) + return this.buildSmartAccountTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }, + overrides + ) + ) + } +} From 1ff4af7b2a1e8781596334c3c147691408b31cd0 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 9 Nov 2022 14:56:36 +0400 Subject: [PATCH 0269/1247] case sensitive fix --- packages/ethers-lib/src/Types.ts | 13 +++++ packages/smart-account/src/Types.ts | 19 +++++++ packages/smart-account/src/providers/Types.ts | 50 +++++++++++++++++++ packages/smart-account/tests/utils/Deploy.ts | 39 +++++++++++++++ 4 files changed, 121 insertions(+) create mode 100644 packages/ethers-lib/src/Types.ts create mode 100644 packages/smart-account/src/Types.ts create mode 100644 packages/smart-account/src/providers/Types.ts create mode 100644 packages/smart-account/tests/utils/Deploy.ts diff --git a/packages/ethers-lib/src/Types.ts b/packages/ethers-lib/src/Types.ts new file mode 100644 index 000000000..6e77f252d --- /dev/null +++ b/packages/ethers-lib/src/Types.ts @@ -0,0 +1,13 @@ +import { ContractTransaction } from '@ethersproject/contracts' +import { IBaseTransactionResult } from '@biconomy-sdk/core-types' + +export interface IEthersTransactionOptions { + from?: string + gasLimit?: number | string + gasPrice?: number | string +} + +export interface IEthersTransactionResult extends IBaseTransactionResult { + transactionResponse: ContractTransaction + options?: IEthersTransactionOptions +} diff --git a/packages/smart-account/src/Types.ts b/packages/smart-account/src/Types.ts new file mode 100644 index 000000000..42605e63b --- /dev/null +++ b/packages/smart-account/src/Types.ts @@ -0,0 +1,19 @@ +import { BytesLike, Wallet } from 'ethers' +import { ChainNames } from '@biconomy-sdk/core-types' + +export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' + +// Reference +export interface WalletProvider { + readonly type?: string + readonly wallet?: Wallet + readonly address: string + readonly chainName?: ChainNames + signMessage(message: BytesLike): Promise +} + +export interface WalletLike { + privateKey: string +} + +export type WalletProviderLike = string | WalletLike | WalletProvider diff --git a/packages/smart-account/src/providers/Types.ts b/packages/smart-account/src/providers/Types.ts new file mode 100644 index 000000000..fca57e206 --- /dev/null +++ b/packages/smart-account/src/providers/Types.ts @@ -0,0 +1,50 @@ +export const JsonRpcVersion = '2.0' + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export interface JsonRpcRequest { + jsonrpc?: string + id?: number + method: string + params?: any[] +} + +export interface JsonRpcResponse { + jsonrpc: string + id: number + result: any + error?: ProviderRpcError +} + +export interface ProviderRpcError extends Error { + message: string + code?: number + data?: { + [key: string]: any + } +} + +export type JsonRpcResponseCallback = (error?: ProviderRpcError, response?: JsonRpcResponse) => void + +export type JsonRpcHandlerFunc = ( + request: JsonRpcRequest, + callback: JsonRpcResponseCallback, + chainId?: number +) => void + +export interface JsonRpcHandler { + sendAsync: JsonRpcHandlerFunc +} + +export type JsonRpcFetchFunc = (method: string, params?: any[], chainId?: number) => Promise + +// EIP-1193 function signature +export type JsonRpcRequestFunc = ( + request: { method: string; params?: any[] }, + chainId?: number +) => Promise + +export type JsonRpcMiddleware = (next: JsonRpcHandlerFunc) => JsonRpcHandlerFunc + +export interface JsonRpcMiddlewareHandler { + sendAsyncMiddleware: JsonRpcMiddleware +} diff --git a/packages/smart-account/tests/utils/Deploy.ts b/packages/smart-account/tests/utils/Deploy.ts new file mode 100644 index 000000000..575a7ec59 --- /dev/null +++ b/packages/smart-account/tests/utils/Deploy.ts @@ -0,0 +1,39 @@ +import { Contract, ethers } from 'ethers' + +// import { SmartWalletContract } from '@biconomy-sdk/core-types' +const SmartWalletArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletContract_v1_0_1.json') +const WalletFactoryArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletFactoryContract_v1_0_1.json') +const MultiSendArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendContract_v1_0_1.json') +const MultiSendCallOnlyArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendCallOnlyContract_v1_0_1.json') + +export async function deployWalletContracts( + signer: ethers.Signer +): Promise<[Contract, Contract, Contract, Contract]> { + // could get these from type chain + + const smartWallet = (await new ethers.ContractFactory( + SmartWalletArtifact.abi, + SmartWalletArtifact.bytecode, + signer + ).deploy()) as unknown as Contract + + const walletFactory = (await new ethers.ContractFactory( + WalletFactoryArtifact.abi, + WalletFactoryArtifact.bytecode, + signer + ).deploy(smartWallet.address)) as unknown as Contract + + const multiSend = (await new ethers.ContractFactory( + MultiSendArtifact.abi, + MultiSendArtifact.bytecode, + signer + ).deploy()) as unknown as Contract + + const multiSendCallOnly = (await new ethers.ContractFactory( + MultiSendCallOnlyArtifact.abi, + MultiSendCallOnlyArtifact.bytecode, + signer + ).deploy()) as unknown as Contract + + return [smartWallet, walletFactory, multiSend, multiSendCallOnly] +} From ce0c91a23d793f18d8e10b63b30050184c4af780 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 9 Nov 2022 16:35:00 +0530 Subject: [PATCH 0270/1247] types file case sensitive fix --- packages/core-types/src/types.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts index 89d7112d2..88cb22d63 100644 --- a/packages/core-types/src/types.ts +++ b/packages/core-types/src/types.ts @@ -1,5 +1,3 @@ -// import { ChainId } from './ChainsTypes' - export type SmartAccountVersion = '1.0.1' | '1.0.0' export enum OperationType { From b4f621e386e3a8a9f331deda060a4e716876f6e4 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 9 Nov 2022 16:28:58 +0400 Subject: [PATCH 0271/1247] fix file names --- packages/core-types/src/Types.ts | 87 -------------------------------- packages/core-types/src/types.ts | 85 ------------------------------- 2 files changed, 172 deletions(-) delete mode 100644 packages/core-types/src/Types.ts delete mode 100644 packages/core-types/src/types.ts diff --git a/packages/core-types/src/Types.ts b/packages/core-types/src/Types.ts deleted file mode 100644 index 89d7112d2..000000000 --- a/packages/core-types/src/Types.ts +++ /dev/null @@ -1,87 +0,0 @@ -// import { ChainId } from './ChainsTypes' - -export type SmartAccountVersion = '1.0.1' | '1.0.0' - -export enum OperationType { - Call, // 0 - DelegateCall // 1 -} - -export type Eip3770Address = { - prefix: string - address: string -} - -// review -export type RelayResponse = { - code?: number - message?: string - transactionId?: string - hash?: string - error?: string - connectionUrl?: string -} -export type UserOperation = { - sender: string - nonce: number - initCode: string - callData: string - callGasLimit: number - verificationGasLimit: number - preVerificationGas: number - maxFeePerGas: number - maxPriorityFeePerGas: number - paymasterAndData: string - signature: string -} - -export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' - -// Review -export const DEFAULT_FEE_RECEIVER = '0x7306aC7A32eb690232De81a9FFB44Bb346026faB' - -export const GAS_USAGE_OFFSET = 4928 + 2360 - -// Few more constants can be added regarding token transfer / handle payments -export const FAKE_SIGNATURE = - '0x39f5032f1cd30005aa1e35f04394cabfe7de3b6ae6d95b27edd8556064c287bf61f321fead0cf48ca4405d497cc8fc47fc7ff0b7f5c45baa14090a44f2307d8230' - -export type RestRelayerOptions = { - url: string - socketServerUrl: string -} - -export type TokenData = { - tokenGasPrice: number // review - offset?: number // review - symbol: string - address: string - decimal: number - logoUrl: string - feeTokenTransferGas: number - refundReceiver?: string -} - -export type FeeQuote = { - symbol: string - address: string - decimal: number - logoUrl: string - payment: number - tokenGasPrice: number - offset?: number - refundReceiver?: string -} - -export type FeeOptionsResponse = { - msg: string - data: { - chainId: number - response: Array - } -} -export type FeeOption = { - feeToken: string - tokenGasPrice: number | string //review - offset: number | string // review -} diff --git a/packages/core-types/src/types.ts b/packages/core-types/src/types.ts deleted file mode 100644 index 88cb22d63..000000000 --- a/packages/core-types/src/types.ts +++ /dev/null @@ -1,85 +0,0 @@ -export type SmartAccountVersion = '1.0.1' | '1.0.0' - -export enum OperationType { - Call, // 0 - DelegateCall // 1 -} - -export type Eip3770Address = { - prefix: string - address: string -} - -// review -export type RelayResponse = { - code?: number - message?: string - transactionId?: string - hash?: string - error?: string - connectionUrl?: string -} -export type UserOperation = { - sender: string - nonce: number - initCode: string - callData: string - callGasLimit: number - verificationGasLimit: number - preVerificationGas: number - maxFeePerGas: number - maxPriorityFeePerGas: number - paymasterAndData: string - signature: string -} - -export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' - -// Review -export const DEFAULT_FEE_RECEIVER = '0x7306aC7A32eb690232De81a9FFB44Bb346026faB' - -export const GAS_USAGE_OFFSET = 4928 + 2360 - -// Few more constants can be added regarding token transfer / handle payments -export const FAKE_SIGNATURE = - '0x39f5032f1cd30005aa1e35f04394cabfe7de3b6ae6d95b27edd8556064c287bf61f321fead0cf48ca4405d497cc8fc47fc7ff0b7f5c45baa14090a44f2307d8230' - -export type RestRelayerOptions = { - url: string - socketServerUrl: string -} - -export type TokenData = { - tokenGasPrice: number // review - offset?: number // review - symbol: string - address: string - decimal: number - logoUrl: string - feeTokenTransferGas: number - refundReceiver?: string -} - -export type FeeQuote = { - symbol: string - address: string - decimal: number - logoUrl: string - payment: number - tokenGasPrice: number - offset?: number - refundReceiver?: string -} - -export type FeeOptionsResponse = { - msg: string - data: { - chainId: number - response: Array - } -} -export type FeeOption = { - feeToken: string - tokenGasPrice: number | string //review - offset: number | string // review -} From d1f892c696ad4ecd0033f308a60d39fc34c66043 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 9 Nov 2022 16:29:18 +0400 Subject: [PATCH 0272/1247] final --- packages/core-types/src/Types.ts | 85 ++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 packages/core-types/src/Types.ts diff --git a/packages/core-types/src/Types.ts b/packages/core-types/src/Types.ts new file mode 100644 index 000000000..88cb22d63 --- /dev/null +++ b/packages/core-types/src/Types.ts @@ -0,0 +1,85 @@ +export type SmartAccountVersion = '1.0.1' | '1.0.0' + +export enum OperationType { + Call, // 0 + DelegateCall // 1 +} + +export type Eip3770Address = { + prefix: string + address: string +} + +// review +export type RelayResponse = { + code?: number + message?: string + transactionId?: string + hash?: string + error?: string + connectionUrl?: string +} +export type UserOperation = { + sender: string + nonce: number + initCode: string + callData: string + callGasLimit: number + verificationGasLimit: number + preVerificationGas: number + maxFeePerGas: number + maxPriorityFeePerGas: number + paymasterAndData: string + signature: string +} + +export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' + +// Review +export const DEFAULT_FEE_RECEIVER = '0x7306aC7A32eb690232De81a9FFB44Bb346026faB' + +export const GAS_USAGE_OFFSET = 4928 + 2360 + +// Few more constants can be added regarding token transfer / handle payments +export const FAKE_SIGNATURE = + '0x39f5032f1cd30005aa1e35f04394cabfe7de3b6ae6d95b27edd8556064c287bf61f321fead0cf48ca4405d497cc8fc47fc7ff0b7f5c45baa14090a44f2307d8230' + +export type RestRelayerOptions = { + url: string + socketServerUrl: string +} + +export type TokenData = { + tokenGasPrice: number // review + offset?: number // review + symbol: string + address: string + decimal: number + logoUrl: string + feeTokenTransferGas: number + refundReceiver?: string +} + +export type FeeQuote = { + symbol: string + address: string + decimal: number + logoUrl: string + payment: number + tokenGasPrice: number + offset?: number + refundReceiver?: string +} + +export type FeeOptionsResponse = { + msg: string + data: { + chainId: number + response: Array + } +} +export type FeeOption = { + feeToken: string + tokenGasPrice: number | string //review + offset: number | string // review +} From 2198ada4acef18abfed3f8277073a6dd8cb6336b Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Wed, 9 Nov 2022 16:38:37 +0400 Subject: [PATCH 0273/1247] publish for bug bash --- lerna.json | 2 +- packages/account-abstraction/package.json | 2 +- packages/common/package.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/gas-estimator/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- packages/web3-auth/package.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lerna.json b/lerna.json index 122e3978e..2fbf2d936 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], "npmClient": "yarn", - "version": "1.0.21", + "version": "1.0.22", "useWorkspaces": true } \ No newline at end of file diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index 12325aa19..eb2c7e9e4 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/account-abstraction", - "version": "1.0.21", + "version": "1.0.22", "description": "Account abstraction APIs to prepare user operations ", "keywords": [ "account-abstraction", diff --git a/packages/common/package.json b/packages/common/package.json index 0a3559723..e6f8ae11c 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/common", - "version": "1.0.21", + "version": "1.0.22", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/core-types/package.json b/packages/core-types/package.json index c2046f950..a194685d4 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.21", + "version": "1.0.22", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 76d2392ab..990feb610 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.21", + "version": "1.0.22", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index e81319d6d..514df6279 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/gas-estimator", - "version": "1.0.21", + "version": "1.0.22", "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", "keywords": [ "gas-estimation", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index dcbbe14a7..b5238ccf8 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.21", + "version": "1.0.22", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 942f37ae6..1729097cf 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.21", + "version": "1.0.22", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 597f027ab..f53c9d654 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.21", + "version": "1.0.22", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 9b36f49b1..4c7243e2f 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.21", + "version": "1.0.22", "description": "utils for sending all transaction legos", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index 4f459feb5..04845c029 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/web3-auth", - "version": "1.0.21", + "version": "1.0.22", "description": "web3-auth for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From a279f1dafc7a3cf91bf20b26bf79a5e866a83e6c Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 10 Nov 2022 00:09:38 +0400 Subject: [PATCH 0274/1247] fix duplicate files --- packages/relayer/src/utils/HttpRequests.ts | 55 ------------- packages/relayer/src/utils/MultiSend.ts | 89 ---------------------- packages/relayer/src/utils/httpRequests.ts | 55 ------------- packages/relayer/src/utils/multisend.ts | 89 ---------------------- 4 files changed, 288 deletions(-) delete mode 100644 packages/relayer/src/utils/HttpRequests.ts delete mode 100644 packages/relayer/src/utils/MultiSend.ts delete mode 100644 packages/relayer/src/utils/httpRequests.ts delete mode 100644 packages/relayer/src/utils/multisend.ts diff --git a/packages/relayer/src/utils/HttpRequests.ts b/packages/relayer/src/utils/HttpRequests.ts deleted file mode 100644 index 132da24fa..000000000 --- a/packages/relayer/src/utils/HttpRequests.ts +++ /dev/null @@ -1,55 +0,0 @@ -import fetch from 'node-fetch' - -export enum HttpMethod { - Get = 'get', - Post = 'post', - Delete = 'delete' -} -/* eslint-disable @typescript-eslint/no-explicit-any */ -interface HttpRequest { - url: string - method: HttpMethod - body?: Record - headers?: object -} - -export async function sendRequest({ url, method, body, headers = {} }: HttpRequest): Promise { - const response = await fetch(url, { - method, - headers: { - ...headers, - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(body) - }) - - let jsonResponse - try { - jsonResponse = await response.json() - } catch (error) { - if (!response.ok) { - throw new Error(response.statusText) - } - } - - if (response.ok) { - return jsonResponse as T - } - if (jsonResponse.data) { - throw new Error(jsonResponse.data) - } - if (jsonResponse.detail) { - throw new Error(jsonResponse.detail) - } - if (jsonResponse.message) { - throw new Error(jsonResponse.message) - } - if (jsonResponse.nonFieldErrors) { - throw new Error(jsonResponse.nonFieldErrors) - } - if (jsonResponse.delegate) { - throw new Error(jsonResponse.delegate) - } - throw new Error(response.statusText) -} diff --git a/packages/relayer/src/utils/MultiSend.ts b/packages/relayer/src/utils/MultiSend.ts deleted file mode 100644 index b3e920776..000000000 --- a/packages/relayer/src/utils/MultiSend.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { Contract, BigNumberish, utils } from 'ethers' -import { AddressZero } from '@ethersproject/constants' - -export interface MetaTransaction { - to: string - value: BigNumberish - data: string - operation: number -} - -export interface WalletTransaction extends MetaTransaction { - targetTxGas: string | number - baseGas: string | number - gasPrice: string | number - gasToken: string - refundReceiver: string - nonce: number -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -export const buildContractCall = ( - contract: Contract, - method: string, - params: any[], - nonce: number, - delegateCall?: boolean, - overrides?: Partial -): WalletTransaction => { - const data = contract.interface.encodeFunctionData(method, params) - return buildSmartAccountTransaction( - Object.assign( - { - to: contract.address, - data, - operation: delegateCall ? 1 : 0, - nonce - }, - overrides - ) - ) -} - -export const buildSmartAccountTransaction = (template: { - to: string - value?: BigNumberish - data?: string - operation?: number - targetTxGas?: number | string - baseGas?: number | string - gasPrice?: number | string - gasToken?: string - refundReceiver?: string - nonce: number -}): WalletTransaction => { - return { - to: template.to, - value: template.value || 0, - data: template.data || '0x', - operation: template.operation || 0, - targetTxGas: template.targetTxGas || 0, - baseGas: template.baseGas || 0, - gasPrice: template.gasPrice || 0, - gasToken: template.gasToken || AddressZero, - refundReceiver: template.refundReceiver || AddressZero, - nonce: template.nonce - } -} - -const encodeMetaTransaction = (tx: MetaTransaction): string => { - const data = utils.arrayify(tx.data) - const encoded = utils.solidityPack( - ['uint8', 'address', 'uint256', 'uint256', 'bytes'], - [tx.operation, tx.to, tx.value, data.length, data] - ) - return encoded.slice(2) -} - -export const encodeMultiSend = (txs: MetaTransaction[]): string => { - return '0x' + txs.map((tx) => encodeMetaTransaction(tx)).join('') -} - -export const buildMultiSendSmartAccountTx = ( - multiSend: Contract, - txs: MetaTransaction[], - nonce: number, - overrides?: Partial -): WalletTransaction => { - return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) -} diff --git a/packages/relayer/src/utils/httpRequests.ts b/packages/relayer/src/utils/httpRequests.ts deleted file mode 100644 index 132da24fa..000000000 --- a/packages/relayer/src/utils/httpRequests.ts +++ /dev/null @@ -1,55 +0,0 @@ -import fetch from 'node-fetch' - -export enum HttpMethod { - Get = 'get', - Post = 'post', - Delete = 'delete' -} -/* eslint-disable @typescript-eslint/no-explicit-any */ -interface HttpRequest { - url: string - method: HttpMethod - body?: Record - headers?: object -} - -export async function sendRequest({ url, method, body, headers = {} }: HttpRequest): Promise { - const response = await fetch(url, { - method, - headers: { - ...headers, - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(body) - }) - - let jsonResponse - try { - jsonResponse = await response.json() - } catch (error) { - if (!response.ok) { - throw new Error(response.statusText) - } - } - - if (response.ok) { - return jsonResponse as T - } - if (jsonResponse.data) { - throw new Error(jsonResponse.data) - } - if (jsonResponse.detail) { - throw new Error(jsonResponse.detail) - } - if (jsonResponse.message) { - throw new Error(jsonResponse.message) - } - if (jsonResponse.nonFieldErrors) { - throw new Error(jsonResponse.nonFieldErrors) - } - if (jsonResponse.delegate) { - throw new Error(jsonResponse.delegate) - } - throw new Error(response.statusText) -} diff --git a/packages/relayer/src/utils/multisend.ts b/packages/relayer/src/utils/multisend.ts deleted file mode 100644 index b3e920776..000000000 --- a/packages/relayer/src/utils/multisend.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { Contract, BigNumberish, utils } from 'ethers' -import { AddressZero } from '@ethersproject/constants' - -export interface MetaTransaction { - to: string - value: BigNumberish - data: string - operation: number -} - -export interface WalletTransaction extends MetaTransaction { - targetTxGas: string | number - baseGas: string | number - gasPrice: string | number - gasToken: string - refundReceiver: string - nonce: number -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -export const buildContractCall = ( - contract: Contract, - method: string, - params: any[], - nonce: number, - delegateCall?: boolean, - overrides?: Partial -): WalletTransaction => { - const data = contract.interface.encodeFunctionData(method, params) - return buildSmartAccountTransaction( - Object.assign( - { - to: contract.address, - data, - operation: delegateCall ? 1 : 0, - nonce - }, - overrides - ) - ) -} - -export const buildSmartAccountTransaction = (template: { - to: string - value?: BigNumberish - data?: string - operation?: number - targetTxGas?: number | string - baseGas?: number | string - gasPrice?: number | string - gasToken?: string - refundReceiver?: string - nonce: number -}): WalletTransaction => { - return { - to: template.to, - value: template.value || 0, - data: template.data || '0x', - operation: template.operation || 0, - targetTxGas: template.targetTxGas || 0, - baseGas: template.baseGas || 0, - gasPrice: template.gasPrice || 0, - gasToken: template.gasToken || AddressZero, - refundReceiver: template.refundReceiver || AddressZero, - nonce: template.nonce - } -} - -const encodeMetaTransaction = (tx: MetaTransaction): string => { - const data = utils.arrayify(tx.data) - const encoded = utils.solidityPack( - ['uint8', 'address', 'uint256', 'uint256', 'bytes'], - [tx.operation, tx.to, tx.value, data.length, data] - ) - return encoded.slice(2) -} - -export const encodeMultiSend = (txs: MetaTransaction[]): string => { - return '0x' + txs.map((tx) => encodeMetaTransaction(tx)).join('') -} - -export const buildMultiSendSmartAccountTx = ( - multiSend: Contract, - txs: MetaTransaction[], - nonce: number, - overrides?: Partial -): WalletTransaction => { - return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) -} From 324872ccba81d41057bcce5358a53ba50676444c Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 10 Nov 2022 00:10:41 +0400 Subject: [PATCH 0275/1247] fix duplicate files --- packages/relayer/src/utils/HttpRequests.ts | 55 +++++++++++++ packages/relayer/src/utils/MultiSend.ts | 89 ++++++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 packages/relayer/src/utils/HttpRequests.ts create mode 100644 packages/relayer/src/utils/MultiSend.ts diff --git a/packages/relayer/src/utils/HttpRequests.ts b/packages/relayer/src/utils/HttpRequests.ts new file mode 100644 index 000000000..ddd149738 --- /dev/null +++ b/packages/relayer/src/utils/HttpRequests.ts @@ -0,0 +1,55 @@ +import fetch from 'node-fetch' + +export enum HttpMethod { + Get = 'get', + Post = 'post', + Delete = 'delete' +} +/* eslint-disable @typescript-eslint/no-explicit-any */ +interface HttpRequest { + url: string + method: HttpMethod + body?: Record + headers?: object +} + +export async function sendRequest({ url, method, body, headers = {} }: HttpRequest): Promise { + const response = await fetch(url, { + method, + headers: { + ...headers, + Accept: 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(body) + }) + + let jsonResponse + try { + jsonResponse = await response.json() + } catch (error) { + if (!response.ok) { + throw new Error(response.statusText) + } + } + + if (response.ok) { + return jsonResponse as T + } + if (jsonResponse.data) { + throw new Error(jsonResponse.data) + } + if (jsonResponse.detail) { + throw new Error(jsonResponse.detail) + } + if (jsonResponse.message) { + throw new Error(jsonResponse.message) + } + if (jsonResponse.nonFieldErrors) { + throw new Error(jsonResponse.nonFieldErrors) + } + if (jsonResponse.delegate) { + throw new Error(jsonResponse.delegate) + } + throw new Error(response.statusText) +} \ No newline at end of file diff --git a/packages/relayer/src/utils/MultiSend.ts b/packages/relayer/src/utils/MultiSend.ts new file mode 100644 index 000000000..a0dd9a614 --- /dev/null +++ b/packages/relayer/src/utils/MultiSend.ts @@ -0,0 +1,89 @@ +import { Contract, BigNumberish, utils } from 'ethers' +import { AddressZero } from '@ethersproject/constants' + +export interface MetaTransaction { + to: string + value: BigNumberish + data: string + operation: number +} + +export interface WalletTransaction extends MetaTransaction { + targetTxGas: string | number + baseGas: string | number + gasPrice: string | number + gasToken: string + refundReceiver: string + nonce: number +} + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export const buildContractCall = ( + contract: Contract, + method: string, + params: any[], + nonce: number, + delegateCall?: boolean, + overrides?: Partial +): WalletTransaction => { + const data = contract.interface.encodeFunctionData(method, params) + return buildSmartAccountTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }, + overrides + ) + ) +} + +export const buildSmartAccountTransaction = (template: { + to: string + value?: BigNumberish + data?: string + operation?: number + targetTxGas?: number | string + baseGas?: number | string + gasPrice?: number | string + gasToken?: string + refundReceiver?: string + nonce: number +}): WalletTransaction => { + return { + to: template.to, + value: template.value || 0, + data: template.data || '0x', + operation: template.operation || 0, + targetTxGas: template.targetTxGas || 0, + baseGas: template.baseGas || 0, + gasPrice: template.gasPrice || 0, + gasToken: template.gasToken || AddressZero, + refundReceiver: template.refundReceiver || AddressZero, + nonce: template.nonce + } +} + +const encodeMetaTransaction = (tx: MetaTransaction): string => { + const data = utils.arrayify(tx.data) + const encoded = utils.solidityPack( + ['uint8', 'address', 'uint256', 'uint256', 'bytes'], + [tx.operation, tx.to, tx.value, data.length, data] + ) + return encoded.slice(2) +} + +export const encodeMultiSend = (txs: MetaTransaction[]): string => { + return '0x' + txs.map((tx) => encodeMetaTransaction(tx)).join('') +} + +export const buildMultiSendSmartAccountTx = ( + multiSend: Contract, + txs: MetaTransaction[], + nonce: number, + overrides?: Partial +): WalletTransaction => { + return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) +} \ No newline at end of file From cd1c25166a0b9132d2cf7d27de5ced2f0fc2d03e Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 10 Nov 2022 00:22:28 +0400 Subject: [PATCH 0276/1247] fix duplicate files --- packages/transactions/src/Estimator.ts | 183 ---------------- packages/transactions/src/Execution.ts | 284 ------------------------- packages/transactions/src/MultiSend.ts | 25 --- packages/transactions/src/Types.ts | 44 ---- packages/transactions/src/Utils.ts | 123 ----------- packages/transactions/src/estimator.ts | 183 ---------------- packages/transactions/src/execution.ts | 284 ------------------------- packages/transactions/src/multisend.ts | 25 --- packages/transactions/src/types.ts | 44 ---- packages/transactions/src/utils.ts | 123 ----------- 10 files changed, 1318 deletions(-) delete mode 100644 packages/transactions/src/Estimator.ts delete mode 100644 packages/transactions/src/Execution.ts delete mode 100644 packages/transactions/src/MultiSend.ts delete mode 100644 packages/transactions/src/Types.ts delete mode 100644 packages/transactions/src/Utils.ts delete mode 100644 packages/transactions/src/estimator.ts delete mode 100644 packages/transactions/src/execution.ts delete mode 100644 packages/transactions/src/multisend.ts delete mode 100644 packages/transactions/src/types.ts delete mode 100644 packages/transactions/src/utils.ts diff --git a/packages/transactions/src/Estimator.ts b/packages/transactions/src/Estimator.ts deleted file mode 100644 index 5ee628a9a..000000000 --- a/packages/transactions/src/Estimator.ts +++ /dev/null @@ -1,183 +0,0 @@ -import { ethers } from 'ethers' -import { GasEstimator } from './assets' -import NodeClient, { EstimateUndeployedContractGasDto } from '@biconomy-sdk/node-client' -import ContractUtils from './ContractUtils' -import { - EstimateSmartAccountDeploymentDto, - IWalletTransaction, - FAKE_SIGNATURE, - ExecTransaction, - IFeeRefundV1_0_1, - SmartAccountState -} from '@biconomy-sdk/core-types' -import { PrepareRefundTransactionsDto, PrepareRefundTransactionDto } from './Types' - -export class Estimator { - nodeClient!: NodeClient - - contractUtils!: ContractUtils - - // Note: Smart account state should Not be part of constructor - constructor(nodeClient: NodeClient, contractUtils: ContractUtils) { - this.nodeClient = nodeClient - this.contractUtils = contractUtils - } - - async estimateTransaction( - prepareTransactionDto: PrepareRefundTransactionDto, - createdTransaction: IWalletTransaction, - smartAccountState: SmartAccountState - ): Promise { - const { chainId, version } = prepareTransactionDto - let estimatedGasUsed = 0 - // Check if available from current state - const isDeployed = await this.contractUtils.isDeployed( - chainId, - version, - smartAccountState.address // SmartAccountState - ) - if (!isDeployed) { - const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId, - version, - owner: smartAccountState.owner, // SmartAccountState - entryPointAddress: smartAccountState.entryPointAddress, // SmartAccountState - fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress // SmartAccountState - }) - console.log('estimateWalletDeployment ', estimateWalletDeployment) - - estimatedGasUsed += estimateWalletDeployment - } - - const txn: ExecTransaction = { - to: createdTransaction.to, - value: createdTransaction.value, - data: createdTransaction.data, - operation: createdTransaction.operation, - targetTxGas: createdTransaction.targetTxGas - } - - // to avoid failing eth_call override with undeployed wallet - txn.targetTxGas = 500000 - - const refundInfo: IFeeRefundV1_0_1 = { - baseGas: createdTransaction.baseGas, - gasPrice: createdTransaction.gasPrice, - tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, - gasToken: createdTransaction.gasToken, - refundReceiver: createdTransaction.refundReceiver - } - - const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { - chainId, - version, - transaction: txn, - walletAddress: smartAccountState.address, - feeRefund: refundInfo, - signature: FAKE_SIGNATURE - } - - const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas( - estimateUndeployedContractGasDto - ) - const noAuthEstimate = - Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas) - console.log('no auth no refund estimate', noAuthEstimate) - - estimatedGasUsed += noAuthEstimate - - return estimatedGasUsed - } - - async estimateTransactionBatch( - prepareRefundTransactionsDto: PrepareRefundTransactionsDto, - createdTransaction: IWalletTransaction, - smartAccountState: SmartAccountState - ): Promise { - const { chainId, version } = prepareRefundTransactionsDto - let estimatedGasUsed = 0 - // Check if available from current state - const isDeployed = await this.contractUtils.isDeployed( - chainId, - version, - smartAccountState.address - ) - if (!isDeployed) { - const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId, - version, - owner: smartAccountState.owner, - entryPointAddress: smartAccountState.entryPointAddress, - fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress - }) - console.log('estimateWalletDeployment ', estimateWalletDeployment) - estimatedGasUsed += estimateWalletDeployment - } - - const txn: ExecTransaction = { - to: createdTransaction.to, - value: createdTransaction.value, - data: createdTransaction.data, - operation: createdTransaction.operation, - targetTxGas: createdTransaction.targetTxGas - } - - // to avoid failing eth_call override with undeployed wallet - txn.targetTxGas = 500000 - - const refundInfo: IFeeRefundV1_0_1 = { - baseGas: createdTransaction.baseGas, - gasPrice: createdTransaction.gasPrice, - tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, - gasToken: createdTransaction.gasToken, - refundReceiver: createdTransaction.refundReceiver - } - - const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { - chainId, - version, - transaction: txn, - walletAddress: smartAccountState.address, - feeRefund: refundInfo, - signature: FAKE_SIGNATURE - } - - const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas( - estimateUndeployedContractGasDto - ) - const noAuthEstimate = - Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas) - console.log('no auth no refund estimate', noAuthEstimate) - - estimatedGasUsed += noAuthEstimate - - return estimatedGasUsed - } - - async estimateSmartAccountDeployment( - estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto - ): Promise { - const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi) - const { chainId, version, owner, entryPointAddress, fallbackHandlerAddress } = - estimateSmartAccountDeploymentDto - const walletFactoryInterface = - this.contractUtils.smartWalletFactoryContract[chainId][version].getInterface() - const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ - this.contractUtils.smartWalletFactoryContract[chainId][version].getAddress(), - walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ - owner, - entryPointAddress, - fallbackHandlerAddress, - 0 - ]) - ]) - console.log('encodedEstimate ', encodedEstimateData) - const deployCostresponse = await this.nodeClient.estimateExternalGas({ - chainId, - encodedData: encodedEstimateData - }) - const estimateWalletDeployment = Number(deployCostresponse.data.gas) - console.log('estimateWalletDeployment ', estimateWalletDeployment) - return estimateWalletDeployment - } -} diff --git a/packages/transactions/src/Execution.ts b/packages/transactions/src/Execution.ts deleted file mode 100644 index e250e5fd5..000000000 --- a/packages/transactions/src/Execution.ts +++ /dev/null @@ -1,284 +0,0 @@ -import { Contract, Wallet, utils, BigNumberish, Signer, PopulatedTransaction } from 'ethers' - -import { - ChainId, - ExecTransaction, - IFeeRefundV1_0_0, - IFeeRefundV1_0_1, - IWalletTransaction, - SmartAccountSignature -} from '@biconomy-sdk/core-types' - -import { TypedDataSigner } from '@ethersproject/abstract-signer' -import { AddressZero } from '@ethersproject/constants' - -export const EIP_DOMAIN = { - EIP712Domain: [ - { type: 'uint256', name: 'chainId' }, - { type: 'address', name: 'verifyingContract' } - ] -} - -export const EIP712_WALLET_TX_TYPE = { - // "WalletTx(address to,uint256 value,bytes data,uint8 operation,uint256 targetTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" - WalletTx: [ - { type: 'address', name: 'to' }, - { type: 'uint256', name: 'value' }, - { type: 'bytes', name: 'data' }, - { type: 'uint8', name: 'operation' }, - { type: 'uint256', name: 'targetTxGas' }, - { type: 'uint256', name: 'baseGas' }, - { type: 'uint256', name: 'gasPrice' }, - { type: 'address', name: 'gasToken' }, - { type: 'address', name: 'refundReceiver' }, - { type: 'uint256', name: 'nonce' } - ] -} - -export const EIP712_SMART_ACCOUNT_MESSAGE_TYPE = { - // "SmartAccountMessage(bytes message)" - SmartAccountMessage: [{ type: 'bytes', name: 'message' }] -} - -export const calculateSmartAccountDomainSeparator = ( - wallet: Contract, - chainId: BigNumberish -): string => { - return utils._TypedDataEncoder.hashDomain({ - verifyingContract: wallet.address, - chainId - }) -} - -export const preimageWalletTransactionHash = ( - wallet: Contract, - SmartAccountTx: IWalletTransaction, - chainId: BigNumberish -): string => { - return utils._TypedDataEncoder.encode( - { verifyingContract: wallet.address, chainId }, - EIP712_WALLET_TX_TYPE, - SmartAccountTx - ) -} - -export const calculateSmartAccountTransactionHash = ( - wallet: Contract, - SmartAccountTx: IWalletTransaction, - chainId: BigNumberish -): string => { - return utils._TypedDataEncoder.hash( - { verifyingContract: wallet.address, chainId }, - EIP712_WALLET_TX_TYPE, - SmartAccountTx - ) -} - -export const calculateSmartAccountMessageHash = ( - wallet: Contract, - message: string, - chainId: BigNumberish -): string => { - return utils._TypedDataEncoder.hash( - { verifyingContract: wallet.address, chainId }, - EIP712_SMART_ACCOUNT_MESSAGE_TYPE, - { message } - ) -} - -export const smartAccountSignTypedData = async ( - signer: Signer & TypedDataSigner, - wallet: Contract, - SmartAccountTx: IWalletTransaction, - chainId?: BigNumberish -): Promise => { - if (!chainId && !signer.provider) throw Error('Provider required to retrieve chainId') - const cid = chainId || (await signer.provider!.getNetwork()).chainId - const signerAddress = await signer.getAddress() - return { - signer: signerAddress, - data: await signer._signTypedData( - { verifyingContract: wallet.address, chainId: cid }, - EIP712_WALLET_TX_TYPE, - SmartAccountTx - ) - } -} - -export const signHash = async (signer: Signer, hash: string): Promise => { - const typedDataHash = utils.arrayify(hash) - const signerAddress = await signer.getAddress() - return { - signer: signerAddress, - data: (await signer.signMessage(typedDataHash)).replace(/1b$/, '1f').replace(/1c$/, '20') - } -} - -export const smartAccountSignMessage = async ( - signer: Signer, - wallet: Contract, - SmartAccountTx: IWalletTransaction, - chainId: ChainId -): Promise => { - const cid = chainId ? chainId : (await signer.provider!.getNetwork()).chainId - if (!cid) { - throw Error('smartAccountSignMessage: Chain Id Not Found') - } - return signHash(signer, calculateSmartAccountTransactionHash(wallet, SmartAccountTx, cid)) -} - -export const buildSignatureBytes = (signatures: SmartAccountSignature[]): string => { - signatures.sort((left, right) => - left.signer.toLowerCase().localeCompare(right.signer.toLowerCase()) - ) - let signatureBytes = '0x' - for (const sig of signatures) { - signatureBytes += sig.data.slice(2) - } - return signatureBytes -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -export const executeTx = async ( - wallet: Contract, - SmartAccountTx: IWalletTransaction, - signatures: SmartAccountSignature[], - overrides?: any -): Promise => { - const signatureBytes = buildSignatureBytes(signatures) - const transaction: ExecTransaction = { - to: SmartAccountTx.to, - value: SmartAccountTx.value, - data: SmartAccountTx.data, - operation: SmartAccountTx.operation, - targetTxGas: SmartAccountTx.targetTxGas - } - const refundInfo: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 = { - baseGas: SmartAccountTx.baseGas, - gasPrice: SmartAccountTx.gasPrice, - tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, - gasToken: SmartAccountTx.gasToken, - refundReceiver: SmartAccountTx.refundReceiver - } - return wallet.execTransaction( - transaction, - 0, // batchId - refundInfo, - signatureBytes, - overrides || {} - ) -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -export const populateExecuteTx = async ( - wallet: Contract, - SmartAccountTx: IWalletTransaction, - signatures: SmartAccountSignature[], - overrides?: any -): Promise => { - const signatureBytes = buildSignatureBytes(signatures) - const transaction: ExecTransaction = { - to: SmartAccountTx.to, - value: SmartAccountTx.value, - data: SmartAccountTx.data, - operation: SmartAccountTx.operation, - targetTxGas: SmartAccountTx.targetTxGas - } - const refundInfo: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 = { - baseGas: SmartAccountTx.baseGas, - gasPrice: SmartAccountTx.gasPrice, - tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, - gasToken: SmartAccountTx.gasToken, - refundReceiver: SmartAccountTx.refundReceiver - } - return wallet.populateTransaction.execTransaction( - transaction, - 0, // batchId - refundInfo, - signatureBytes, - overrides || {} - ) -} -/* eslint-disable @typescript-eslint/no-explicit-any */ -export const buildContractCall = ( - contract: Contract, - method: string, - params: any[], - nonce: number, - delegateCall?: boolean, - overrides?: Partial -): IWalletTransaction => { - const data = contract.interface.encodeFunctionData(method, params) - return buildSmartAccountTransaction( - Object.assign( - { - to: contract.address, - data, - operation: delegateCall ? 1 : 0, - nonce - }, - overrides - ) - ) -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -export const executeTxWithSigners = async ( - wallet: Contract, - tx: IWalletTransaction, - signers: Wallet[], - overrides?: any -) => { - const sigs = await Promise.all( - signers.map((signer) => smartAccountSignTypedData(signer, wallet, tx)) - ) - return executeTx(wallet, tx, sigs, overrides) -} -/* eslint-disable @typescript-eslint/no-explicit-any */ -export const executeContractCallWithSigners = async ( - wallet: Contract, - contract: Contract, - method: string, - params: any[], - signers: Wallet[], - delegateCall?: boolean, - overrides?: Partial -) => { - const tx = buildContractCall( - contract, - method, - params, - await wallet.getNonce(0), //default batchId @review - delegateCall, - overrides - ) - return executeTxWithSigners(wallet, tx, signers) -} - -export const buildSmartAccountTransaction = (template: { - to: string - value?: BigNumberish - data?: string - operation?: number - targetTxGas?: number | string - baseGas?: number | string - gasPrice?: number | string - tokenGasPriceFactor?: number | string - gasToken?: string - refundReceiver?: string - nonce: number -}): IWalletTransaction => { - return { - to: template.to, - value: template.value || 0, - data: template.data || '0x', - operation: template.operation || 0, - targetTxGas: template.targetTxGas || 0, - baseGas: template.baseGas || 0, - gasPrice: template.gasPrice || 0, - tokenGasPriceFactor: template.tokenGasPriceFactor || 1, - gasToken: template.gasToken || AddressZero, - refundReceiver: template.refundReceiver || AddressZero, - nonce: template.nonce - } -} diff --git a/packages/transactions/src/MultiSend.ts b/packages/transactions/src/MultiSend.ts deleted file mode 100644 index 0239ab922..000000000 --- a/packages/transactions/src/MultiSend.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Contract, utils } from 'ethers' -import { buildContractCall } from './Execution' -import { IMetaTransaction, IWalletTransaction } from '@biconomy-sdk/core-types' - -const encodeMetaTransaction = (tx: IMetaTransaction): string => { - const data = utils.arrayify(tx.data) - const encoded = utils.solidityPack( - ['uint8', 'address', 'uint256', 'uint256', 'bytes'], - [tx.operation, tx.to, tx.value, data.length, data] - ) - return encoded.slice(2) -} - -export const encodeMultiSend = (txs: IMetaTransaction[]): string => { - return '0x' + txs.map((tx) => encodeMetaTransaction(tx)).join('') -} - -export const buildMultiSendSmartAccountTx = ( - multiSend: Contract, - txs: IMetaTransaction[], - nonce: number, - overrides?: Partial -): IWalletTransaction => { - return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) -} diff --git a/packages/transactions/src/Types.ts b/packages/transactions/src/Types.ts deleted file mode 100644 index 527c9b222..000000000 --- a/packages/transactions/src/Types.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Transaction, ChainId, FeeQuote } from '@biconomy-sdk/core-types' - -export type PrepareRefundTransactionDto = { - version: string - transaction: Transaction - batchId: number - chainId: ChainId -} - -export type PrepareRefundTransactionsDto = { - version: string - transactions: Transaction[] - batchId: number - chainId: ChainId -} - -export type RefundTransactionDto = { - version: string - transaction: Transaction - feeQuote: FeeQuote - batchId: number - chainId: ChainId -} -export type RefundTransactionBatchDto = { - version: string - transactions: Transaction[] - feeQuote: FeeQuote - batchId: number - chainId: ChainId -} - -export type TransactionDto = { - version: string - transaction: Transaction - batchId: number - chainId: ChainId -} - -export type TransactionBatchDto = { - version: string - transactions: Transaction[] - batchId: number - chainId: ChainId -} diff --git a/packages/transactions/src/Utils.ts b/packages/transactions/src/Utils.ts deleted file mode 100644 index 7cb72c613..000000000 --- a/packages/transactions/src/Utils.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { BigNumberish, Contract, utils } from 'ethers' - -import { IMetaTransaction, IWalletTransaction, Transaction } from '@biconomy-sdk/core-types' - -import { AddressZero } from '@ethersproject/constants' - -export class Utils { - constructor() { - console.log('Utils Class Initialized') - } - - buildSmartAccountTransaction = (template: { - to: string - value?: BigNumberish - data?: string - operation?: number - targetTxGas?: number | string - baseGas?: number | string - gasPrice?: number | string - tokenGasPriceFactor?: number | string - gasToken?: string - refundReceiver?: string - nonce: number - }): IWalletTransaction => { - return { - to: template.to, - value: template.value || 0, - data: template.data || '0x', - operation: template.operation || 0, - targetTxGas: template.targetTxGas || 0, - baseGas: template.baseGas || 0, - gasPrice: template.gasPrice || 0, - tokenGasPriceFactor: template.tokenGasPriceFactor || 1, - gasToken: template.gasToken || AddressZero, - refundReceiver: template.refundReceiver || AddressZero, - nonce: template.nonce - } - } - - buildSmartAccountTransactions = (transactions: Transaction[]): IMetaTransaction[] => { - const txs: IMetaTransaction[] = [] - for (let i = 0; i < transactions.length; i++) { - const innerTx: IWalletTransaction = this.buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) - - txs.push(innerTx) - } - return txs - } - - buildMultiSendSmartAccountTx = ( - multiSend: Contract, - txs: IMetaTransaction[], - nonce: number, - overrides?: Partial - ): IWalletTransaction => { - return this.buildContractCall( - multiSend, - 'multiSend', - [this.encodeMultiSend(txs)], - nonce, - true, - overrides - ) - } - - buildMultiSendTx = ( - multiSend: Contract, - txs: IMetaTransaction[], - nonce: number, - delegateCall?: boolean - ): IMetaTransaction => { - const data = multiSend.interface.encodeFunctionData('multiSend', [this.encodeMultiSend(txs)]) - return this.buildSmartAccountTransaction( - Object.assign({ - to: multiSend.address, - data, - operation: delegateCall ? 1 : 0, - nonce - }) - ) - } - - encodeMultiSend = (txs: IMetaTransaction[]): string => { - return '0x' + txs.map((tx) => this.encodeMetaTransaction(tx)).join('') - } - - encodeMetaTransaction = (tx: IMetaTransaction): string => { - const data = utils.arrayify(tx.data) - const encoded = utils.solidityPack( - ['uint8', 'address', 'uint256', 'uint256', 'bytes'], - [tx.operation, tx.to, tx.value, data.length, data] - ) - return encoded.slice(2) - } - - /* eslint-disable @typescript-eslint/no-explicit-any */ - buildContractCall = ( - contract: Contract, - method: string, - params: any[], - nonce: number, - delegateCall?: boolean, - overrides?: Partial - ): IWalletTransaction => { - const data = contract.interface.encodeFunctionData(method, params) - return this.buildSmartAccountTransaction( - Object.assign( - { - to: contract.address, - data, - operation: delegateCall ? 1 : 0, - nonce - }, - overrides - ) - ) - } -} diff --git a/packages/transactions/src/estimator.ts b/packages/transactions/src/estimator.ts deleted file mode 100644 index 5ee628a9a..000000000 --- a/packages/transactions/src/estimator.ts +++ /dev/null @@ -1,183 +0,0 @@ -import { ethers } from 'ethers' -import { GasEstimator } from './assets' -import NodeClient, { EstimateUndeployedContractGasDto } from '@biconomy-sdk/node-client' -import ContractUtils from './ContractUtils' -import { - EstimateSmartAccountDeploymentDto, - IWalletTransaction, - FAKE_SIGNATURE, - ExecTransaction, - IFeeRefundV1_0_1, - SmartAccountState -} from '@biconomy-sdk/core-types' -import { PrepareRefundTransactionsDto, PrepareRefundTransactionDto } from './Types' - -export class Estimator { - nodeClient!: NodeClient - - contractUtils!: ContractUtils - - // Note: Smart account state should Not be part of constructor - constructor(nodeClient: NodeClient, contractUtils: ContractUtils) { - this.nodeClient = nodeClient - this.contractUtils = contractUtils - } - - async estimateTransaction( - prepareTransactionDto: PrepareRefundTransactionDto, - createdTransaction: IWalletTransaction, - smartAccountState: SmartAccountState - ): Promise { - const { chainId, version } = prepareTransactionDto - let estimatedGasUsed = 0 - // Check if available from current state - const isDeployed = await this.contractUtils.isDeployed( - chainId, - version, - smartAccountState.address // SmartAccountState - ) - if (!isDeployed) { - const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId, - version, - owner: smartAccountState.owner, // SmartAccountState - entryPointAddress: smartAccountState.entryPointAddress, // SmartAccountState - fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress // SmartAccountState - }) - console.log('estimateWalletDeployment ', estimateWalletDeployment) - - estimatedGasUsed += estimateWalletDeployment - } - - const txn: ExecTransaction = { - to: createdTransaction.to, - value: createdTransaction.value, - data: createdTransaction.data, - operation: createdTransaction.operation, - targetTxGas: createdTransaction.targetTxGas - } - - // to avoid failing eth_call override with undeployed wallet - txn.targetTxGas = 500000 - - const refundInfo: IFeeRefundV1_0_1 = { - baseGas: createdTransaction.baseGas, - gasPrice: createdTransaction.gasPrice, - tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, - gasToken: createdTransaction.gasToken, - refundReceiver: createdTransaction.refundReceiver - } - - const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { - chainId, - version, - transaction: txn, - walletAddress: smartAccountState.address, - feeRefund: refundInfo, - signature: FAKE_SIGNATURE - } - - const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas( - estimateUndeployedContractGasDto - ) - const noAuthEstimate = - Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas) - console.log('no auth no refund estimate', noAuthEstimate) - - estimatedGasUsed += noAuthEstimate - - return estimatedGasUsed - } - - async estimateTransactionBatch( - prepareRefundTransactionsDto: PrepareRefundTransactionsDto, - createdTransaction: IWalletTransaction, - smartAccountState: SmartAccountState - ): Promise { - const { chainId, version } = prepareRefundTransactionsDto - let estimatedGasUsed = 0 - // Check if available from current state - const isDeployed = await this.contractUtils.isDeployed( - chainId, - version, - smartAccountState.address - ) - if (!isDeployed) { - const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ - chainId, - version, - owner: smartAccountState.owner, - entryPointAddress: smartAccountState.entryPointAddress, - fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress - }) - console.log('estimateWalletDeployment ', estimateWalletDeployment) - estimatedGasUsed += estimateWalletDeployment - } - - const txn: ExecTransaction = { - to: createdTransaction.to, - value: createdTransaction.value, - data: createdTransaction.data, - operation: createdTransaction.operation, - targetTxGas: createdTransaction.targetTxGas - } - - // to avoid failing eth_call override with undeployed wallet - txn.targetTxGas = 500000 - - const refundInfo: IFeeRefundV1_0_1 = { - baseGas: createdTransaction.baseGas, - gasPrice: createdTransaction.gasPrice, - tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, - gasToken: createdTransaction.gasToken, - refundReceiver: createdTransaction.refundReceiver - } - - const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { - chainId, - version, - transaction: txn, - walletAddress: smartAccountState.address, - feeRefund: refundInfo, - signature: FAKE_SIGNATURE - } - - const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas( - estimateUndeployedContractGasDto - ) - const noAuthEstimate = - Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas) - console.log('no auth no refund estimate', noAuthEstimate) - - estimatedGasUsed += noAuthEstimate - - return estimatedGasUsed - } - - async estimateSmartAccountDeployment( - estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto - ): Promise { - const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi) - const { chainId, version, owner, entryPointAddress, fallbackHandlerAddress } = - estimateSmartAccountDeploymentDto - const walletFactoryInterface = - this.contractUtils.smartWalletFactoryContract[chainId][version].getInterface() - const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ - this.contractUtils.smartWalletFactoryContract[chainId][version].getAddress(), - walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ - owner, - entryPointAddress, - fallbackHandlerAddress, - 0 - ]) - ]) - console.log('encodedEstimate ', encodedEstimateData) - const deployCostresponse = await this.nodeClient.estimateExternalGas({ - chainId, - encodedData: encodedEstimateData - }) - const estimateWalletDeployment = Number(deployCostresponse.data.gas) - console.log('estimateWalletDeployment ', estimateWalletDeployment) - return estimateWalletDeployment - } -} diff --git a/packages/transactions/src/execution.ts b/packages/transactions/src/execution.ts deleted file mode 100644 index e250e5fd5..000000000 --- a/packages/transactions/src/execution.ts +++ /dev/null @@ -1,284 +0,0 @@ -import { Contract, Wallet, utils, BigNumberish, Signer, PopulatedTransaction } from 'ethers' - -import { - ChainId, - ExecTransaction, - IFeeRefundV1_0_0, - IFeeRefundV1_0_1, - IWalletTransaction, - SmartAccountSignature -} from '@biconomy-sdk/core-types' - -import { TypedDataSigner } from '@ethersproject/abstract-signer' -import { AddressZero } from '@ethersproject/constants' - -export const EIP_DOMAIN = { - EIP712Domain: [ - { type: 'uint256', name: 'chainId' }, - { type: 'address', name: 'verifyingContract' } - ] -} - -export const EIP712_WALLET_TX_TYPE = { - // "WalletTx(address to,uint256 value,bytes data,uint8 operation,uint256 targetTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" - WalletTx: [ - { type: 'address', name: 'to' }, - { type: 'uint256', name: 'value' }, - { type: 'bytes', name: 'data' }, - { type: 'uint8', name: 'operation' }, - { type: 'uint256', name: 'targetTxGas' }, - { type: 'uint256', name: 'baseGas' }, - { type: 'uint256', name: 'gasPrice' }, - { type: 'address', name: 'gasToken' }, - { type: 'address', name: 'refundReceiver' }, - { type: 'uint256', name: 'nonce' } - ] -} - -export const EIP712_SMART_ACCOUNT_MESSAGE_TYPE = { - // "SmartAccountMessage(bytes message)" - SmartAccountMessage: [{ type: 'bytes', name: 'message' }] -} - -export const calculateSmartAccountDomainSeparator = ( - wallet: Contract, - chainId: BigNumberish -): string => { - return utils._TypedDataEncoder.hashDomain({ - verifyingContract: wallet.address, - chainId - }) -} - -export const preimageWalletTransactionHash = ( - wallet: Contract, - SmartAccountTx: IWalletTransaction, - chainId: BigNumberish -): string => { - return utils._TypedDataEncoder.encode( - { verifyingContract: wallet.address, chainId }, - EIP712_WALLET_TX_TYPE, - SmartAccountTx - ) -} - -export const calculateSmartAccountTransactionHash = ( - wallet: Contract, - SmartAccountTx: IWalletTransaction, - chainId: BigNumberish -): string => { - return utils._TypedDataEncoder.hash( - { verifyingContract: wallet.address, chainId }, - EIP712_WALLET_TX_TYPE, - SmartAccountTx - ) -} - -export const calculateSmartAccountMessageHash = ( - wallet: Contract, - message: string, - chainId: BigNumberish -): string => { - return utils._TypedDataEncoder.hash( - { verifyingContract: wallet.address, chainId }, - EIP712_SMART_ACCOUNT_MESSAGE_TYPE, - { message } - ) -} - -export const smartAccountSignTypedData = async ( - signer: Signer & TypedDataSigner, - wallet: Contract, - SmartAccountTx: IWalletTransaction, - chainId?: BigNumberish -): Promise => { - if (!chainId && !signer.provider) throw Error('Provider required to retrieve chainId') - const cid = chainId || (await signer.provider!.getNetwork()).chainId - const signerAddress = await signer.getAddress() - return { - signer: signerAddress, - data: await signer._signTypedData( - { verifyingContract: wallet.address, chainId: cid }, - EIP712_WALLET_TX_TYPE, - SmartAccountTx - ) - } -} - -export const signHash = async (signer: Signer, hash: string): Promise => { - const typedDataHash = utils.arrayify(hash) - const signerAddress = await signer.getAddress() - return { - signer: signerAddress, - data: (await signer.signMessage(typedDataHash)).replace(/1b$/, '1f').replace(/1c$/, '20') - } -} - -export const smartAccountSignMessage = async ( - signer: Signer, - wallet: Contract, - SmartAccountTx: IWalletTransaction, - chainId: ChainId -): Promise => { - const cid = chainId ? chainId : (await signer.provider!.getNetwork()).chainId - if (!cid) { - throw Error('smartAccountSignMessage: Chain Id Not Found') - } - return signHash(signer, calculateSmartAccountTransactionHash(wallet, SmartAccountTx, cid)) -} - -export const buildSignatureBytes = (signatures: SmartAccountSignature[]): string => { - signatures.sort((left, right) => - left.signer.toLowerCase().localeCompare(right.signer.toLowerCase()) - ) - let signatureBytes = '0x' - for (const sig of signatures) { - signatureBytes += sig.data.slice(2) - } - return signatureBytes -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -export const executeTx = async ( - wallet: Contract, - SmartAccountTx: IWalletTransaction, - signatures: SmartAccountSignature[], - overrides?: any -): Promise => { - const signatureBytes = buildSignatureBytes(signatures) - const transaction: ExecTransaction = { - to: SmartAccountTx.to, - value: SmartAccountTx.value, - data: SmartAccountTx.data, - operation: SmartAccountTx.operation, - targetTxGas: SmartAccountTx.targetTxGas - } - const refundInfo: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 = { - baseGas: SmartAccountTx.baseGas, - gasPrice: SmartAccountTx.gasPrice, - tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, - gasToken: SmartAccountTx.gasToken, - refundReceiver: SmartAccountTx.refundReceiver - } - return wallet.execTransaction( - transaction, - 0, // batchId - refundInfo, - signatureBytes, - overrides || {} - ) -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -export const populateExecuteTx = async ( - wallet: Contract, - SmartAccountTx: IWalletTransaction, - signatures: SmartAccountSignature[], - overrides?: any -): Promise => { - const signatureBytes = buildSignatureBytes(signatures) - const transaction: ExecTransaction = { - to: SmartAccountTx.to, - value: SmartAccountTx.value, - data: SmartAccountTx.data, - operation: SmartAccountTx.operation, - targetTxGas: SmartAccountTx.targetTxGas - } - const refundInfo: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 = { - baseGas: SmartAccountTx.baseGas, - gasPrice: SmartAccountTx.gasPrice, - tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, - gasToken: SmartAccountTx.gasToken, - refundReceiver: SmartAccountTx.refundReceiver - } - return wallet.populateTransaction.execTransaction( - transaction, - 0, // batchId - refundInfo, - signatureBytes, - overrides || {} - ) -} -/* eslint-disable @typescript-eslint/no-explicit-any */ -export const buildContractCall = ( - contract: Contract, - method: string, - params: any[], - nonce: number, - delegateCall?: boolean, - overrides?: Partial -): IWalletTransaction => { - const data = contract.interface.encodeFunctionData(method, params) - return buildSmartAccountTransaction( - Object.assign( - { - to: contract.address, - data, - operation: delegateCall ? 1 : 0, - nonce - }, - overrides - ) - ) -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -export const executeTxWithSigners = async ( - wallet: Contract, - tx: IWalletTransaction, - signers: Wallet[], - overrides?: any -) => { - const sigs = await Promise.all( - signers.map((signer) => smartAccountSignTypedData(signer, wallet, tx)) - ) - return executeTx(wallet, tx, sigs, overrides) -} -/* eslint-disable @typescript-eslint/no-explicit-any */ -export const executeContractCallWithSigners = async ( - wallet: Contract, - contract: Contract, - method: string, - params: any[], - signers: Wallet[], - delegateCall?: boolean, - overrides?: Partial -) => { - const tx = buildContractCall( - contract, - method, - params, - await wallet.getNonce(0), //default batchId @review - delegateCall, - overrides - ) - return executeTxWithSigners(wallet, tx, signers) -} - -export const buildSmartAccountTransaction = (template: { - to: string - value?: BigNumberish - data?: string - operation?: number - targetTxGas?: number | string - baseGas?: number | string - gasPrice?: number | string - tokenGasPriceFactor?: number | string - gasToken?: string - refundReceiver?: string - nonce: number -}): IWalletTransaction => { - return { - to: template.to, - value: template.value || 0, - data: template.data || '0x', - operation: template.operation || 0, - targetTxGas: template.targetTxGas || 0, - baseGas: template.baseGas || 0, - gasPrice: template.gasPrice || 0, - tokenGasPriceFactor: template.tokenGasPriceFactor || 1, - gasToken: template.gasToken || AddressZero, - refundReceiver: template.refundReceiver || AddressZero, - nonce: template.nonce - } -} diff --git a/packages/transactions/src/multisend.ts b/packages/transactions/src/multisend.ts deleted file mode 100644 index 0239ab922..000000000 --- a/packages/transactions/src/multisend.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Contract, utils } from 'ethers' -import { buildContractCall } from './Execution' -import { IMetaTransaction, IWalletTransaction } from '@biconomy-sdk/core-types' - -const encodeMetaTransaction = (tx: IMetaTransaction): string => { - const data = utils.arrayify(tx.data) - const encoded = utils.solidityPack( - ['uint8', 'address', 'uint256', 'uint256', 'bytes'], - [tx.operation, tx.to, tx.value, data.length, data] - ) - return encoded.slice(2) -} - -export const encodeMultiSend = (txs: IMetaTransaction[]): string => { - return '0x' + txs.map((tx) => encodeMetaTransaction(tx)).join('') -} - -export const buildMultiSendSmartAccountTx = ( - multiSend: Contract, - txs: IMetaTransaction[], - nonce: number, - overrides?: Partial -): IWalletTransaction => { - return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) -} diff --git a/packages/transactions/src/types.ts b/packages/transactions/src/types.ts deleted file mode 100644 index 527c9b222..000000000 --- a/packages/transactions/src/types.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Transaction, ChainId, FeeQuote } from '@biconomy-sdk/core-types' - -export type PrepareRefundTransactionDto = { - version: string - transaction: Transaction - batchId: number - chainId: ChainId -} - -export type PrepareRefundTransactionsDto = { - version: string - transactions: Transaction[] - batchId: number - chainId: ChainId -} - -export type RefundTransactionDto = { - version: string - transaction: Transaction - feeQuote: FeeQuote - batchId: number - chainId: ChainId -} -export type RefundTransactionBatchDto = { - version: string - transactions: Transaction[] - feeQuote: FeeQuote - batchId: number - chainId: ChainId -} - -export type TransactionDto = { - version: string - transaction: Transaction - batchId: number - chainId: ChainId -} - -export type TransactionBatchDto = { - version: string - transactions: Transaction[] - batchId: number - chainId: ChainId -} diff --git a/packages/transactions/src/utils.ts b/packages/transactions/src/utils.ts deleted file mode 100644 index 7cb72c613..000000000 --- a/packages/transactions/src/utils.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { BigNumberish, Contract, utils } from 'ethers' - -import { IMetaTransaction, IWalletTransaction, Transaction } from '@biconomy-sdk/core-types' - -import { AddressZero } from '@ethersproject/constants' - -export class Utils { - constructor() { - console.log('Utils Class Initialized') - } - - buildSmartAccountTransaction = (template: { - to: string - value?: BigNumberish - data?: string - operation?: number - targetTxGas?: number | string - baseGas?: number | string - gasPrice?: number | string - tokenGasPriceFactor?: number | string - gasToken?: string - refundReceiver?: string - nonce: number - }): IWalletTransaction => { - return { - to: template.to, - value: template.value || 0, - data: template.data || '0x', - operation: template.operation || 0, - targetTxGas: template.targetTxGas || 0, - baseGas: template.baseGas || 0, - gasPrice: template.gasPrice || 0, - tokenGasPriceFactor: template.tokenGasPriceFactor || 1, - gasToken: template.gasToken || AddressZero, - refundReceiver: template.refundReceiver || AddressZero, - nonce: template.nonce - } - } - - buildSmartAccountTransactions = (transactions: Transaction[]): IMetaTransaction[] => { - const txs: IMetaTransaction[] = [] - for (let i = 0; i < transactions.length; i++) { - const innerTx: IWalletTransaction = this.buildSmartAccountTransaction({ - to: transactions[i].to, - value: transactions[i].value, - data: transactions[i].data, // for token transfers use encodeTransfer - nonce: 0 - }) - - txs.push(innerTx) - } - return txs - } - - buildMultiSendSmartAccountTx = ( - multiSend: Contract, - txs: IMetaTransaction[], - nonce: number, - overrides?: Partial - ): IWalletTransaction => { - return this.buildContractCall( - multiSend, - 'multiSend', - [this.encodeMultiSend(txs)], - nonce, - true, - overrides - ) - } - - buildMultiSendTx = ( - multiSend: Contract, - txs: IMetaTransaction[], - nonce: number, - delegateCall?: boolean - ): IMetaTransaction => { - const data = multiSend.interface.encodeFunctionData('multiSend', [this.encodeMultiSend(txs)]) - return this.buildSmartAccountTransaction( - Object.assign({ - to: multiSend.address, - data, - operation: delegateCall ? 1 : 0, - nonce - }) - ) - } - - encodeMultiSend = (txs: IMetaTransaction[]): string => { - return '0x' + txs.map((tx) => this.encodeMetaTransaction(tx)).join('') - } - - encodeMetaTransaction = (tx: IMetaTransaction): string => { - const data = utils.arrayify(tx.data) - const encoded = utils.solidityPack( - ['uint8', 'address', 'uint256', 'uint256', 'bytes'], - [tx.operation, tx.to, tx.value, data.length, data] - ) - return encoded.slice(2) - } - - /* eslint-disable @typescript-eslint/no-explicit-any */ - buildContractCall = ( - contract: Contract, - method: string, - params: any[], - nonce: number, - delegateCall?: boolean, - overrides?: Partial - ): IWalletTransaction => { - const data = contract.interface.encodeFunctionData(method, params) - return this.buildSmartAccountTransaction( - Object.assign( - { - to: contract.address, - data, - operation: delegateCall ? 1 : 0, - nonce - }, - overrides - ) - ) - } -} From 76cf0bc80e7522fc8aad2fef3607a83e918ce863 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 10 Nov 2022 00:24:32 +0400 Subject: [PATCH 0277/1247] fix duplicate files --- packages/transactions/src/Estimator.ts | 183 ++++++++++++++++ packages/transactions/src/Execution.ts | 284 +++++++++++++++++++++++++ packages/transactions/src/MultiSend.ts | 25 +++ packages/transactions/src/Types.ts | 44 ++++ packages/transactions/src/Utils.ts | 123 +++++++++++ 5 files changed, 659 insertions(+) create mode 100644 packages/transactions/src/Estimator.ts create mode 100644 packages/transactions/src/Execution.ts create mode 100644 packages/transactions/src/MultiSend.ts create mode 100644 packages/transactions/src/Types.ts create mode 100644 packages/transactions/src/Utils.ts diff --git a/packages/transactions/src/Estimator.ts b/packages/transactions/src/Estimator.ts new file mode 100644 index 000000000..36439d8fa --- /dev/null +++ b/packages/transactions/src/Estimator.ts @@ -0,0 +1,183 @@ +import { ethers } from 'ethers' +import { GasEstimator } from './assets' +import NodeClient, { EstimateUndeployedContractGasDto } from '@biconomy-sdk/node-client' +import ContractUtils from './ContractUtils' +import { + EstimateSmartAccountDeploymentDto, + IWalletTransaction, + FAKE_SIGNATURE, + ExecTransaction, + IFeeRefundV1_0_1, + SmartAccountState +} from '@biconomy-sdk/core-types' +import { PrepareRefundTransactionsDto, PrepareRefundTransactionDto } from './Types' + +export class Estimator { + nodeClient!: NodeClient + + contractUtils!: ContractUtils + + // Note: Smart account state should Not be part of constructor + constructor(nodeClient: NodeClient, contractUtils: ContractUtils) { + this.nodeClient = nodeClient + this.contractUtils = contractUtils + } + + async estimateTransaction( + prepareTransactionDto: PrepareRefundTransactionDto, + createdTransaction: IWalletTransaction, + smartAccountState: SmartAccountState + ): Promise { + const { chainId, version } = prepareTransactionDto + let estimatedGasUsed = 0 + // Check if available from current state + const isDeployed = await this.contractUtils.isDeployed( + chainId, + version, + smartAccountState.address // SmartAccountState + ) + if (!isDeployed) { + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: smartAccountState.owner, // SmartAccountState + entryPointAddress: smartAccountState.entryPointAddress, // SmartAccountState + fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress // SmartAccountState + }) + console.log('estimateWalletDeployment ', estimateWalletDeployment) + + estimatedGasUsed += estimateWalletDeployment + } + + const txn: ExecTransaction = { + to: createdTransaction.to, + value: createdTransaction.value, + data: createdTransaction.data, + operation: createdTransaction.operation, + targetTxGas: createdTransaction.targetTxGas + } + + // to avoid failing eth_call override with undeployed wallet + txn.targetTxGas = 500000 + + const refundInfo: IFeeRefundV1_0_1 = { + baseGas: createdTransaction.baseGas, + gasPrice: createdTransaction.gasPrice, + tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, + gasToken: createdTransaction.gasToken, + refundReceiver: createdTransaction.refundReceiver + } + + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + version, + transaction: txn, + walletAddress: smartAccountState.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE + } + + const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas( + estimateUndeployedContractGasDto + ) + const noAuthEstimate = + Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas) + console.log('no auth no refund estimate', noAuthEstimate) + + estimatedGasUsed += noAuthEstimate + + return estimatedGasUsed + } + + async estimateTransactionBatch( + prepareRefundTransactionsDto: PrepareRefundTransactionsDto, + createdTransaction: IWalletTransaction, + smartAccountState: SmartAccountState + ): Promise { + const { chainId, version } = prepareRefundTransactionsDto + let estimatedGasUsed = 0 + // Check if available from current state + const isDeployed = await this.contractUtils.isDeployed( + chainId, + version, + smartAccountState.address + ) + if (!isDeployed) { + const estimateWalletDeployment = await this.estimateSmartAccountDeployment({ + chainId, + version, + owner: smartAccountState.owner, + entryPointAddress: smartAccountState.entryPointAddress, + fallbackHandlerAddress: smartAccountState.fallbackHandlerAddress + }) + console.log('estimateWalletDeployment ', estimateWalletDeployment) + estimatedGasUsed += estimateWalletDeployment + } + + const txn: ExecTransaction = { + to: createdTransaction.to, + value: createdTransaction.value, + data: createdTransaction.data, + operation: createdTransaction.operation, + targetTxGas: createdTransaction.targetTxGas + } + + // to avoid failing eth_call override with undeployed wallet + txn.targetTxGas = 500000 + + const refundInfo: IFeeRefundV1_0_1 = { + baseGas: createdTransaction.baseGas, + gasPrice: createdTransaction.gasPrice, + tokenGasPriceFactor: createdTransaction.tokenGasPriceFactor, + gasToken: createdTransaction.gasToken, + refundReceiver: createdTransaction.refundReceiver + } + + const estimateUndeployedContractGasDto: EstimateUndeployedContractGasDto = { + chainId, + version, + transaction: txn, + walletAddress: smartAccountState.address, + feeRefund: refundInfo, + signature: FAKE_SIGNATURE + } + + const ethCallOverrideResponse = await this.nodeClient.estimateUndeployedContractGas( + estimateUndeployedContractGasDto + ) + const noAuthEstimate = + Number(ethCallOverrideResponse.data.gas) + Number(ethCallOverrideResponse.data.txBaseGas) + console.log('no auth no refund estimate', noAuthEstimate) + + estimatedGasUsed += noAuthEstimate + + return estimatedGasUsed + } + + async estimateSmartAccountDeployment( + estimateSmartAccountDeploymentDto: EstimateSmartAccountDeploymentDto + ): Promise { + const estimatorInterface = new ethers.utils.Interface(GasEstimator.abi) + const { chainId, version, owner, entryPointAddress, fallbackHandlerAddress } = + estimateSmartAccountDeploymentDto + const walletFactoryInterface = + this.contractUtils.smartWalletFactoryContract[chainId][version].getInterface() + const encodedEstimateData = estimatorInterface.encodeFunctionData('estimate', [ + this.contractUtils.smartWalletFactoryContract[chainId][version].getAddress(), + walletFactoryInterface.encodeFunctionData('deployCounterFactualWallet', [ + owner, + entryPointAddress, + fallbackHandlerAddress, + 0 + ]) + ]) + console.log('encodedEstimate ', encodedEstimateData) + const deployCostresponse = await this.nodeClient.estimateExternalGas({ + chainId, + encodedData: encodedEstimateData + }) + const estimateWalletDeployment = Number(deployCostresponse.data.gas) + console.log('estimateWalletDeployment ', estimateWalletDeployment) + return estimateWalletDeployment + } +} \ No newline at end of file diff --git a/packages/transactions/src/Execution.ts b/packages/transactions/src/Execution.ts new file mode 100644 index 000000000..92ef7b33f --- /dev/null +++ b/packages/transactions/src/Execution.ts @@ -0,0 +1,284 @@ +import { Contract, Wallet, utils, BigNumberish, Signer, PopulatedTransaction } from 'ethers' + +import { + ChainId, + ExecTransaction, + IFeeRefundV1_0_0, + IFeeRefundV1_0_1, + IWalletTransaction, + SmartAccountSignature +} from '@biconomy-sdk/core-types' + +import { TypedDataSigner } from '@ethersproject/abstract-signer' +import { AddressZero } from '@ethersproject/constants' + +export const EIP_DOMAIN = { + EIP712Domain: [ + { type: 'uint256', name: 'chainId' }, + { type: 'address', name: 'verifyingContract' } + ] +} + +export const EIP712_WALLET_TX_TYPE = { + // "WalletTx(address to,uint256 value,bytes data,uint8 operation,uint256 targetTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)" + WalletTx: [ + { type: 'address', name: 'to' }, + { type: 'uint256', name: 'value' }, + { type: 'bytes', name: 'data' }, + { type: 'uint8', name: 'operation' }, + { type: 'uint256', name: 'targetTxGas' }, + { type: 'uint256', name: 'baseGas' }, + { type: 'uint256', name: 'gasPrice' }, + { type: 'address', name: 'gasToken' }, + { type: 'address', name: 'refundReceiver' }, + { type: 'uint256', name: 'nonce' } + ] +} + +export const EIP712_SMART_ACCOUNT_MESSAGE_TYPE = { + // "SmartAccountMessage(bytes message)" + SmartAccountMessage: [{ type: 'bytes', name: 'message' }] +} + +export const calculateSmartAccountDomainSeparator = ( + wallet: Contract, + chainId: BigNumberish +): string => { + return utils._TypedDataEncoder.hashDomain({ + verifyingContract: wallet.address, + chainId + }) +} + +export const preimageWalletTransactionHash = ( + wallet: Contract, + SmartAccountTx: IWalletTransaction, + chainId: BigNumberish +): string => { + return utils._TypedDataEncoder.encode( + { verifyingContract: wallet.address, chainId }, + EIP712_WALLET_TX_TYPE, + SmartAccountTx + ) +} + +export const calculateSmartAccountTransactionHash = ( + wallet: Contract, + SmartAccountTx: IWalletTransaction, + chainId: BigNumberish +): string => { + return utils._TypedDataEncoder.hash( + { verifyingContract: wallet.address, chainId }, + EIP712_WALLET_TX_TYPE, + SmartAccountTx + ) +} + +export const calculateSmartAccountMessageHash = ( + wallet: Contract, + message: string, + chainId: BigNumberish +): string => { + return utils._TypedDataEncoder.hash( + { verifyingContract: wallet.address, chainId }, + EIP712_SMART_ACCOUNT_MESSAGE_TYPE, + { message } + ) +} + +export const smartAccountSignTypedData = async ( + signer: Signer & TypedDataSigner, + wallet: Contract, + SmartAccountTx: IWalletTransaction, + chainId?: BigNumberish +): Promise => { + if (!chainId && !signer.provider) throw Error('Provider required to retrieve chainId') + const cid = chainId || (await signer.provider!.getNetwork()).chainId + const signerAddress = await signer.getAddress() + return { + signer: signerAddress, + data: await signer._signTypedData( + { verifyingContract: wallet.address, chainId: cid }, + EIP712_WALLET_TX_TYPE, + SmartAccountTx + ) + } +} + +export const signHash = async (signer: Signer, hash: string): Promise => { + const typedDataHash = utils.arrayify(hash) + const signerAddress = await signer.getAddress() + return { + signer: signerAddress, + data: (await signer.signMessage(typedDataHash)).replace(/1b$/, '1f').replace(/1c$/, '20') + } +} + +export const smartAccountSignMessage = async ( + signer: Signer, + wallet: Contract, + SmartAccountTx: IWalletTransaction, + chainId: ChainId +): Promise => { + const cid = chainId ? chainId : (await signer.provider!.getNetwork()).chainId + if (!cid) { + throw Error('smartAccountSignMessage: Chain Id Not Found') + } + return signHash(signer, calculateSmartAccountTransactionHash(wallet, SmartAccountTx, cid)) +} + +export const buildSignatureBytes = (signatures: SmartAccountSignature[]): string => { + signatures.sort((left, right) => + left.signer.toLowerCase().localeCompare(right.signer.toLowerCase()) + ) + let signatureBytes = '0x' + for (const sig of signatures) { + signatureBytes += sig.data.slice(2) + } + return signatureBytes +} + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export const executeTx = async ( + wallet: Contract, + SmartAccountTx: IWalletTransaction, + signatures: SmartAccountSignature[], + overrides?: any +): Promise => { + const signatureBytes = buildSignatureBytes(signatures) + const transaction: ExecTransaction = { + to: SmartAccountTx.to, + value: SmartAccountTx.value, + data: SmartAccountTx.data, + operation: SmartAccountTx.operation, + targetTxGas: SmartAccountTx.targetTxGas + } + const refundInfo: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 = { + baseGas: SmartAccountTx.baseGas, + gasPrice: SmartAccountTx.gasPrice, + tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, + gasToken: SmartAccountTx.gasToken, + refundReceiver: SmartAccountTx.refundReceiver + } + return wallet.execTransaction( + transaction, + 0, // batchId + refundInfo, + signatureBytes, + overrides || {} + ) +} + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export const populateExecuteTx = async ( + wallet: Contract, + SmartAccountTx: IWalletTransaction, + signatures: SmartAccountSignature[], + overrides?: any +): Promise => { + const signatureBytes = buildSignatureBytes(signatures) + const transaction: ExecTransaction = { + to: SmartAccountTx.to, + value: SmartAccountTx.value, + data: SmartAccountTx.data, + operation: SmartAccountTx.operation, + targetTxGas: SmartAccountTx.targetTxGas + } + const refundInfo: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 = { + baseGas: SmartAccountTx.baseGas, + gasPrice: SmartAccountTx.gasPrice, + tokenGasPriceFactor: SmartAccountTx.tokenGasPriceFactor, + gasToken: SmartAccountTx.gasToken, + refundReceiver: SmartAccountTx.refundReceiver + } + return wallet.populateTransaction.execTransaction( + transaction, + 0, // batchId + refundInfo, + signatureBytes, + overrides || {} + ) +} +/* eslint-disable @typescript-eslint/no-explicit-any */ +export const buildContractCall = ( + contract: Contract, + method: string, + params: any[], + nonce: number, + delegateCall?: boolean, + overrides?: Partial +): IWalletTransaction => { + const data = contract.interface.encodeFunctionData(method, params) + return buildSmartAccountTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }, + overrides + ) + ) +} + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export const executeTxWithSigners = async ( + wallet: Contract, + tx: IWalletTransaction, + signers: Wallet[], + overrides?: any +) => { + const sigs = await Promise.all( + signers.map((signer) => smartAccountSignTypedData(signer, wallet, tx)) + ) + return executeTx(wallet, tx, sigs, overrides) +} +/* eslint-disable @typescript-eslint/no-explicit-any */ +export const executeContractCallWithSigners = async ( + wallet: Contract, + contract: Contract, + method: string, + params: any[], + signers: Wallet[], + delegateCall?: boolean, + overrides?: Partial +) => { + const tx = buildContractCall( + contract, + method, + params, + await wallet.getNonce(0), //default batchId @review + delegateCall, + overrides + ) + return executeTxWithSigners(wallet, tx, signers) +} + +export const buildSmartAccountTransaction = (template: { + to: string + value?: BigNumberish + data?: string + operation?: number + targetTxGas?: number | string + baseGas?: number | string + gasPrice?: number | string + tokenGasPriceFactor?: number | string + gasToken?: string + refundReceiver?: string + nonce: number +}): IWalletTransaction => { + return { + to: template.to, + value: template.value || 0, + data: template.data || '0x', + operation: template.operation || 0, + targetTxGas: template.targetTxGas || 0, + baseGas: template.baseGas || 0, + gasPrice: template.gasPrice || 0, + tokenGasPriceFactor: template.tokenGasPriceFactor || 1, + gasToken: template.gasToken || AddressZero, + refundReceiver: template.refundReceiver || AddressZero, + nonce: template.nonce + } +} \ No newline at end of file diff --git a/packages/transactions/src/MultiSend.ts b/packages/transactions/src/MultiSend.ts new file mode 100644 index 000000000..285a00abf --- /dev/null +++ b/packages/transactions/src/MultiSend.ts @@ -0,0 +1,25 @@ +import { Contract, utils } from 'ethers' +import { buildContractCall } from './Execution' +import { IMetaTransaction, IWalletTransaction } from '@biconomy-sdk/core-types' + +const encodeMetaTransaction = (tx: IMetaTransaction): string => { + const data = utils.arrayify(tx.data) + const encoded = utils.solidityPack( + ['uint8', 'address', 'uint256', 'uint256', 'bytes'], + [tx.operation, tx.to, tx.value, data.length, data] + ) + return encoded.slice(2) +} + +export const encodeMultiSend = (txs: IMetaTransaction[]): string => { + return '0x' + txs.map((tx) => encodeMetaTransaction(tx)).join('') +} + +export const buildMultiSendSmartAccountTx = ( + multiSend: Contract, + txs: IMetaTransaction[], + nonce: number, + overrides?: Partial +): IWalletTransaction => { + return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) +} \ No newline at end of file diff --git a/packages/transactions/src/Types.ts b/packages/transactions/src/Types.ts new file mode 100644 index 000000000..527c9b222 --- /dev/null +++ b/packages/transactions/src/Types.ts @@ -0,0 +1,44 @@ +import { Transaction, ChainId, FeeQuote } from '@biconomy-sdk/core-types' + +export type PrepareRefundTransactionDto = { + version: string + transaction: Transaction + batchId: number + chainId: ChainId +} + +export type PrepareRefundTransactionsDto = { + version: string + transactions: Transaction[] + batchId: number + chainId: ChainId +} + +export type RefundTransactionDto = { + version: string + transaction: Transaction + feeQuote: FeeQuote + batchId: number + chainId: ChainId +} +export type RefundTransactionBatchDto = { + version: string + transactions: Transaction[] + feeQuote: FeeQuote + batchId: number + chainId: ChainId +} + +export type TransactionDto = { + version: string + transaction: Transaction + batchId: number + chainId: ChainId +} + +export type TransactionBatchDto = { + version: string + transactions: Transaction[] + batchId: number + chainId: ChainId +} diff --git a/packages/transactions/src/Utils.ts b/packages/transactions/src/Utils.ts new file mode 100644 index 000000000..b8b8f1674 --- /dev/null +++ b/packages/transactions/src/Utils.ts @@ -0,0 +1,123 @@ +import { BigNumberish, Contract, utils } from 'ethers' + +import { IMetaTransaction, IWalletTransaction, Transaction } from '@biconomy-sdk/core-types' + +import { AddressZero } from '@ethersproject/constants' + +export class Utils { + constructor() { + console.log('Utils Class Initialized') + } + + buildSmartAccountTransaction = (template: { + to: string + value?: BigNumberish + data?: string + operation?: number + targetTxGas?: number | string + baseGas?: number | string + gasPrice?: number | string + tokenGasPriceFactor?: number | string + gasToken?: string + refundReceiver?: string + nonce: number + }): IWalletTransaction => { + return { + to: template.to, + value: template.value || 0, + data: template.data || '0x', + operation: template.operation || 0, + targetTxGas: template.targetTxGas || 0, + baseGas: template.baseGas || 0, + gasPrice: template.gasPrice || 0, + tokenGasPriceFactor: template.tokenGasPriceFactor || 1, + gasToken: template.gasToken || AddressZero, + refundReceiver: template.refundReceiver || AddressZero, + nonce: template.nonce + } + } + + buildSmartAccountTransactions = (transactions: Transaction[]): IMetaTransaction[] => { + const txs: IMetaTransaction[] = [] + for (let i = 0; i < transactions.length; i++) { + const innerTx: IWalletTransaction = this.buildSmartAccountTransaction({ + to: transactions[i].to, + value: transactions[i].value, + data: transactions[i].data, // for token transfers use encodeTransfer + nonce: 0 + }) + + txs.push(innerTx) + } + return txs + } + + buildMultiSendSmartAccountTx = ( + multiSend: Contract, + txs: IMetaTransaction[], + nonce: number, + overrides?: Partial + ): IWalletTransaction => { + return this.buildContractCall( + multiSend, + 'multiSend', + [this.encodeMultiSend(txs)], + nonce, + true, + overrides + ) + } + + buildMultiSendTx = ( + multiSend: Contract, + txs: IMetaTransaction[], + nonce: number, + delegateCall?: boolean + ): IMetaTransaction => { + const data = multiSend.interface.encodeFunctionData('multiSend', [this.encodeMultiSend(txs)]) + return this.buildSmartAccountTransaction( + Object.assign({ + to: multiSend.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }) + ) + } + + encodeMultiSend = (txs: IMetaTransaction[]): string => { + return '0x' + txs.map((tx) => this.encodeMetaTransaction(tx)).join('') + } + + encodeMetaTransaction = (tx: IMetaTransaction): string => { + const data = utils.arrayify(tx.data) + const encoded = utils.solidityPack( + ['uint8', 'address', 'uint256', 'uint256', 'bytes'], + [tx.operation, tx.to, tx.value, data.length, data] + ) + return encoded.slice(2) + } + + /* eslint-disable @typescript-eslint/no-explicit-any */ + buildContractCall = ( + contract: Contract, + method: string, + params: any[], + nonce: number, + delegateCall?: boolean, + overrides?: Partial + ): IWalletTransaction => { + const data = contract.interface.encodeFunctionData(method, params) + return this.buildSmartAccountTransaction( + Object.assign( + { + to: contract.address, + data, + operation: delegateCall ? 1 : 0, + nonce + }, + overrides + ) + ) + } +} \ No newline at end of file From 063e0272875d6eff74c6d3c7610502b52e4bd24c Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 10 Nov 2022 00:25:53 +0400 Subject: [PATCH 0278/1247] fix duplicate files --- .../node-client/src/utils/HttpRequests.ts | 54 ------------------- .../node-client/src/utils/httpRequests.ts | 54 ------------------- 2 files changed, 108 deletions(-) delete mode 100644 packages/node-client/src/utils/HttpRequests.ts delete mode 100644 packages/node-client/src/utils/httpRequests.ts diff --git a/packages/node-client/src/utils/HttpRequests.ts b/packages/node-client/src/utils/HttpRequests.ts deleted file mode 100644 index 11b2cf209..000000000 --- a/packages/node-client/src/utils/HttpRequests.ts +++ /dev/null @@ -1,54 +0,0 @@ -import fetch from 'node-fetch' - -export enum HttpMethod { - Get = 'get', - Post = 'post', - Delete = 'delete' -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -interface HttpRequest { - url: string - method: HttpMethod - body?: Record -} - -export async function sendRequest({ url, method, body }: HttpRequest): Promise { - const response = await fetch(url, { - method, - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(body) - }) - - let jsonResponse - try { - jsonResponse = await response.json() - } catch (error) { - if (!response.ok) { - throw new Error(response.statusText) - } - } - - if (response.ok) { - return jsonResponse as T - } - if (jsonResponse.data) { - throw new Error(jsonResponse.data) - } - if (jsonResponse.detail) { - throw new Error(jsonResponse.detail) - } - if (jsonResponse.message) { - throw new Error(jsonResponse.message) - } - if (jsonResponse.nonFieldErrors) { - throw new Error(jsonResponse.nonFieldErrors) - } - if (jsonResponse.delegate) { - throw new Error(jsonResponse.delegate) - } - throw new Error(response.statusText) -} diff --git a/packages/node-client/src/utils/httpRequests.ts b/packages/node-client/src/utils/httpRequests.ts deleted file mode 100644 index 11b2cf209..000000000 --- a/packages/node-client/src/utils/httpRequests.ts +++ /dev/null @@ -1,54 +0,0 @@ -import fetch from 'node-fetch' - -export enum HttpMethod { - Get = 'get', - Post = 'post', - Delete = 'delete' -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -interface HttpRequest { - url: string - method: HttpMethod - body?: Record -} - -export async function sendRequest({ url, method, body }: HttpRequest): Promise { - const response = await fetch(url, { - method, - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(body) - }) - - let jsonResponse - try { - jsonResponse = await response.json() - } catch (error) { - if (!response.ok) { - throw new Error(response.statusText) - } - } - - if (response.ok) { - return jsonResponse as T - } - if (jsonResponse.data) { - throw new Error(jsonResponse.data) - } - if (jsonResponse.detail) { - throw new Error(jsonResponse.detail) - } - if (jsonResponse.message) { - throw new Error(jsonResponse.message) - } - if (jsonResponse.nonFieldErrors) { - throw new Error(jsonResponse.nonFieldErrors) - } - if (jsonResponse.delegate) { - throw new Error(jsonResponse.delegate) - } - throw new Error(response.statusText) -} From 2c46986d18de5f518034ed1e9899671f3589c52e Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 10 Nov 2022 00:26:33 +0400 Subject: [PATCH 0279/1247] fix duplicate files --- .../node-client/src/utils/HttpRequests.ts | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 packages/node-client/src/utils/HttpRequests.ts diff --git a/packages/node-client/src/utils/HttpRequests.ts b/packages/node-client/src/utils/HttpRequests.ts new file mode 100644 index 000000000..57e77c71c --- /dev/null +++ b/packages/node-client/src/utils/HttpRequests.ts @@ -0,0 +1,54 @@ +import fetch from 'node-fetch' + +export enum HttpMethod { + Get = 'get', + Post = 'post', + Delete = 'delete' +} + +/* eslint-disable @typescript-eslint/no-explicit-any */ +interface HttpRequest { + url: string + method: HttpMethod + body?: Record +} + +export async function sendRequest({ url, method, body }: HttpRequest): Promise { + const response = await fetch(url, { + method, + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(body) + }) + + let jsonResponse + try { + jsonResponse = await response.json() + } catch (error) { + if (!response.ok) { + throw new Error(response.statusText) + } + } + + if (response.ok) { + return jsonResponse as T + } + if (jsonResponse.data) { + throw new Error(jsonResponse.data) + } + if (jsonResponse.detail) { + throw new Error(jsonResponse.detail) + } + if (jsonResponse.message) { + throw new Error(jsonResponse.message) + } + if (jsonResponse.nonFieldErrors) { + throw new Error(jsonResponse.nonFieldErrors) + } + if (jsonResponse.delegate) { + throw new Error(jsonResponse.delegate) + } + throw new Error(response.statusText) +} \ No newline at end of file From 621b7f46bbc75f44def8165012ea69d4ad6e3ebf Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 10 Nov 2022 00:31:32 +0400 Subject: [PATCH 0280/1247] package version upgrade (code freeze v0) --- lerna.json | 2 +- packages/account-abstraction/package.json | 2 +- packages/common/package.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/gas-estimator/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- packages/web3-auth/package.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lerna.json b/lerna.json index 2fbf2d936..2164cf6f7 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], "npmClient": "yarn", - "version": "1.0.22", + "version": "1.0.23", "useWorkspaces": true } \ No newline at end of file diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index eb2c7e9e4..1f95807cc 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/account-abstraction", - "version": "1.0.22", + "version": "1.0.23", "description": "Account abstraction APIs to prepare user operations ", "keywords": [ "account-abstraction", diff --git a/packages/common/package.json b/packages/common/package.json index e6f8ae11c..1773bd813 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/common", - "version": "1.0.22", + "version": "1.0.23", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/core-types/package.json b/packages/core-types/package.json index a194685d4..4b629744d 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.22", + "version": "1.0.23", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 990feb610..1e642c8a3 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.22", + "version": "1.0.23", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index 514df6279..6f202b9b0 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/gas-estimator", - "version": "1.0.22", + "version": "1.0.23", "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", "keywords": [ "gas-estimation", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index b5238ccf8..5f5d65790 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.22", + "version": "1.0.23", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 1729097cf..45fc57291 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.22", + "version": "1.0.23", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index f53c9d654..2062398c0 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.22", + "version": "1.0.23", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 4c7243e2f..7e58c4ad5 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.22", + "version": "1.0.23", "description": "utils for sending all transaction legos", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index 04845c029..5139580ca 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/web3-auth", - "version": "1.0.22", + "version": "1.0.23", "description": "web3-auth for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From 2ed6cfc40d32611d3b101acb7ba14d507a95ffff Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 10 Nov 2022 15:29:27 +0400 Subject: [PATCH 0281/1247] dev comments refactor --- packages/smart-account/src/SmartAccount.ts | 29 ++++++++++------------ 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 7d13674ba..d45e09da7 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -101,18 +101,15 @@ class SmartAccount extends EventEmitter { // TODO : review from contractUtils smartAccountState!: SmartAccountState - // TODO - // Review provider type WalletProviderLike / ExternalProvider + // provider type could be WalletProviderLike / ExternalProvider // Can expose recommended provider classes through the SDK - - // review SmartAccountConfig - // TODO : EOA signer instead of { walletProvider } + // Note: If required Dapp devs can just pass on the signer in future /** - * Constrcutor for the Smart Account. If config is not provided it makes Smart Account available using default configuration + * Constructor for the Smart Account. If config is not provided it makes Smart Account available using default configuration * If you wish to use your own backend server and relayer service, pass the URLs here */ - // todo : could remove WalletProvider + // Note: Could remove WalletProvider later on constructor(walletProvider: Web3Provider, config?: Partial) { super() this.#smartAccountConfig = { ...DefaultSmartAccountConfig } @@ -296,7 +293,7 @@ class SmartAccount extends EventEmitter { await this.initializeContractsAtChain(chainId) const multiSendContract = this.contractUtils.multiSendContract[chainId][version].getContract() - const isDelegate = transaction.to === multiSendContract.address ? true: false + const isDelegate = transaction.to === multiSendContract.address ? true : false const response = await aaSigner.sendTransaction(transaction, isDelegate, this) @@ -311,12 +308,10 @@ class SmartAccount extends EventEmitter { const { transactions } = transactionBatchDto // Might get optional operation for tx - chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId version = version ? version : this.DEFAULT_VERSION batchId = batchId ? batchId : 0 - // NOTE : If the wallet is not deployed yet then nonce would be zero let walletContract = this.contractUtils.smartWalletContract[chainId][version].getContract() walletContract = walletContract.attach(this.address) @@ -361,20 +356,19 @@ class SmartAccount extends EventEmitter { // Multisend is tricky because populateTransaction expects delegateCall and we must override - // Review : Stuff before this can be moved to TransactionManager + // TODO : stuff before this can be moved to TransactionManager const response = await this.sendGasLessTransaction({ version, transaction: gaslessTx, chainId }) return response } - // Only to deploy wallet using connected paymaster (or the one corresponding to dapp api key) - // Todo - // Add return type + // Only to deploy wallet using connected paymaster + // Todo : Add return type // Review involvement of Dapp API Key public async deployWalletUsingPaymaster() { // can pass chainId const aaSigner = this.aaProvider[this.#smartAccountConfig.activeNetworkId].getSigner() await aaSigner.deployWalletOnly() - // todo: make sense of this response and return hash to the user + // Todo: make sense of this response and return hash to the user } /** @@ -634,7 +628,6 @@ class SmartAccount extends EventEmitter { } // Other helpers go here for pre build (feeOptions and quotes from relayer) , build and execution of refund type transactions - /** * Prepares compatible IWalletTransaction object based on Transaction Request * @todo Rename based on other variations to prepare transaction @@ -666,6 +659,7 @@ class SmartAccount extends EventEmitter { * @param transactionDto * @returns */ + // Todo : Marked for deletion async createTransaction(transactionDto: TransactionDto): Promise { let { version, batchId, chainId } = transactionDto const { transaction } = transactionDto @@ -685,6 +679,7 @@ class SmartAccount extends EventEmitter { * @param chainId * @returns */ + // Todo: Marked for deletion async createTransactionBatch( transactionBatchDto: TransactionBatchDto ): Promise { @@ -743,6 +738,8 @@ class SmartAccount extends EventEmitter { return txHash } + // Todo: sendSignedTransaction (only applies for Refund transaction ) + /** * * @param chainId optional chainId From 54b6df176217444a85126ac7f5d39e9696985633 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 10 Nov 2022 17:13:52 +0400 Subject: [PATCH 0282/1247] test cases updated as per latest changes --- .../src/BiconomyPaymasterAPI.ts | 57 +- .../src/ERC4337EthersSigner.ts | 53 +- .../test/1-SmartAccountAPI.test.ts | 10 +- .../test/2-ERC4337EthersSigner.test.ts | 17 +- .../tests/0-smartaccount.spec.ts | 1269 +++++++++++++++-- 5 files changed, 1194 insertions(+), 212 deletions(-) diff --git a/packages/account-abstraction/src/BiconomyPaymasterAPI.ts b/packages/account-abstraction/src/BiconomyPaymasterAPI.ts index a80b00bec..89aeacf27 100644 --- a/packages/account-abstraction/src/BiconomyPaymasterAPI.ts +++ b/packages/account-abstraction/src/BiconomyPaymasterAPI.ts @@ -13,36 +13,43 @@ export class BiconomyPaymasterAPI implements IPaymasterAPI { } async getPaymasterAndData(userOp: Partial): Promise { - if (!this.dappAPIKey || this.dappAPIKey === '') { - return '0x' - } + try { + if (!this.dappAPIKey || this.dappAPIKey === '') { + return '0x' + } - userOp = await resolveProperties(userOp) - userOp.nonce = Number(userOp.nonce) - userOp.callGasLimit = Number(userOp.callGasLimit) - userOp.verificationGasLimit = Number(userOp.verificationGasLimit) - userOp.maxFeePerGas = Number(userOp.maxFeePerGas) - userOp.maxPriorityFeePerGas = Number(userOp.maxPriorityFeePerGas) - userOp.preVerificationGas = 21000 - userOp.signature = '0x' - userOp.paymasterAndData = '0x' + userOp = await resolveProperties(userOp) + userOp.nonce = Number(userOp.nonce) + userOp.callGasLimit = Number(userOp.callGasLimit) + userOp.verificationGasLimit = Number(userOp.verificationGasLimit) + userOp.maxFeePerGas = Number(userOp.maxFeePerGas) + userOp.maxPriorityFeePerGas = Number(userOp.maxPriorityFeePerGas) + userOp.preVerificationGas = 21000 + userOp.signature = '0x' + userOp.paymasterAndData = '0x' - // move dappAPIKey in headers - const result: any = await sendRequest({ - url: `${this.signingServiceUrl}`, - method: HttpMethod.Post, - headers: { 'x-api-key': this.dappAPIKey }, - body: { userOp: userOp } - }) + // move dappAPIKey in headers + const result: any = await sendRequest({ + url: `${this.signingServiceUrl}`, + method: HttpMethod.Post, + headers: { 'x-api-key': this.dappAPIKey }, + body: { userOp: userOp } + }) - console.log('******** ||||| *********') - console.log('verifying and signing service response', result) + console.log('******** ||||| *********') + console.log('verifying and signing service response', result) - if (result && result.data && result.code === 200) { - return result.data.paymasterAndData + if (result && result.data && result.code === 200) { + return result.data.paymasterAndData + } else { + console.log('error in verifying. sending paymasterAndData 0x') + console.log(result.error) + } + } catch (err) { + console.log('error in signing service response') + console.error(err) + return '0x' } - console.log('error in verifying. sending paymasterAndData 0x') - console.log(result.error) return '0x' } } diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 4f7b60694..8c4530125 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -57,7 +57,7 @@ export class ERC4337EthersSigner extends Signer { // This one is called by Contract. It signs the request and passes in to Provider to be sent. async sendTransaction( transaction: Deferrable, - isDelegate: boolean = false, + isDelegate = false, engine?: any // EventEmitter ): Promise { const socketServerUrl = this.config.socketServerUrl @@ -108,6 +108,7 @@ export class ERC4337EthersSigner extends Signer { try { bundlerServiceResponse = await this.httpRpcClient.sendUserOpToBundler(userOperation) + console.log('bundlerServiceResponse') console.log(bundlerServiceResponse) } catch (error) { // console.error('sendUserOpToBundler failed', error) @@ -117,31 +118,35 @@ export class ERC4337EthersSigner extends Signer { if (clientMessenger && clientMessenger.socketClient.isConnected()) { clientMessenger.createTransactionNotifier(bundlerServiceResponse.transactionId, { onHashGenerated: async (tx: any) => { - const txHash = tx.transactionHash - const txId = tx.transactionId - console.log( - `Tx Hash generated message received at client ${JSON.stringify({ - transactionId: txId, - hash: txHash - })}` - ) - engine.emit('txHashGenerated', { - id: tx.transactionId, - hash: tx.transactionHash, - msg: 'txn hash generated' - }) + if (tx) { + const txHash = tx.transactionHash + const txId = tx.transactionId + console.log( + `Tx Hash generated message received at client ${JSON.stringify({ + transactionId: txId, + hash: txHash + })}` + ) + engine.emit('txHashGenerated', { + id: tx.transactionId, + hash: tx.transactionHash, + msg: 'txn hash generated' + }) + } }, onError: async (tx: any) => { - console.log(`Error message received at client is ${tx}`) - const err = tx.error - const txId = tx.transactionId - clientMessenger.unsubscribe(txId) - // event emitter - engine.emit('error', { - id: tx.transactionId, - error: err, - msg: 'txn hash generated' - }) + if (tx) { + console.log(`Error message received at client is ${tx}`) + const err = tx.error + const txId = tx.transactionId + clientMessenger.unsubscribe(txId) + // event emitter + engine.emit('error', { + id: tx.transactionId, + error: err, + msg: 'txn hash generated' + }) + } } }) } diff --git a/packages/account-abstraction/test/1-SmartAccountAPI.test.ts b/packages/account-abstraction/test/1-SmartAccountAPI.test.ts index bdd3b19b1..ca4ad5084 100644 --- a/packages/account-abstraction/test/1-SmartAccountAPI.test.ts +++ b/packages/account-abstraction/test/1-SmartAccountAPI.test.ts @@ -73,7 +73,9 @@ describe('SmartAccountAPI', async () => { // const factoryAddress = await DeterministicDeployer.deploy(SimpleWalletDeployer__factory.bytecode) const clientConfig = { - dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', + // Note: dappAPIKey will be empty in smart account config when not provided + // provide non-empty key and handle exceptions + dappAPIKey: '', biconomySigningServiceUrl: 'https://us-central1-biconomy-staging.cloudfunctions.net', socketServerUrl: 'wss://sdk-testing-ws.staging.biconomy.io/connection/websocket', entryPointAddress: entryPoint.address, @@ -128,10 +130,12 @@ describe('SmartAccountAPI', async () => { let op: any try { + console.log('recipient.address ', recipient.address) op = await api.createSignedUserOp({ target: recipient.address, data: recipient.interface.encodeFunctionData('something', ['hello']) }) + console.log('signed user op ', op) } catch (err) { console.log('error here') console.log(err) @@ -151,7 +155,9 @@ describe('SmartAccountAPI', async () => { } // TODO : Update with prod values const clientConfig = { - dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', + // Note: dappAPIKey will be empty in smart account config when not provided + // provide non-empty key and handle exceptions + dappAPIKey: '', biconomySigningServiceUrl: 'https://us-central1-biconomy-staging.cloudfunctions.net', socketServerUrl: 'wss://sdk-testing-ws.staging.biconomy.io/connection/websocket', entryPointAddress: entryPoint.address, diff --git a/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts b/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts index 66936f4c2..2a5521012 100644 --- a/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts +++ b/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts @@ -58,11 +58,13 @@ describe('ERC4337EthersSigner, Provider', function () { console.log('expected address ', expected) const clientConfig: ClientConfig = { - dappAPIKey: 'PMO3rOHIu.5eabcc5d-df35-4d37-93ff-502d6ce7a5d6', + // Note: dappAPIKey will be empty in smart account config when not provided + // provide non-empty key and handle exceptions + dappAPIKey: '', biconomySigningServiceUrl: 'https://us-central1-biconomy-staging.cloudfunctions.net', socketServerUrl: 'wss://sdk-testing-ws.staging.biconomy.io/connection/websocket', entryPointAddress: entryPoint.address, - bundlerUrl: 'http://localhost:3000/rpc', + bundlerUrl: 'http://localhost:3005/rpc', chainId: await provider.getNetwork().then((net) => net.chainId) } @@ -102,7 +104,9 @@ describe('ERC4337EthersSigner, Provider', function () { } }) - it('should use ERC-4337 Signer and Provider to send the UserOperation to the bundler', async function () { + // TODO + // Note: ERC4337 Signer and Provider are coupled with Bundler Service with transactionId subscription + /*it('should use ERC-4337 Signer and Provider to send the UserOperation to the bundler', async function () { const walletAddress = await aaProvider.getSigner().getAddress() await signer.sendTransaction({ to: walletAddress, @@ -112,13 +116,14 @@ describe('ERC4337EthersSigner, Provider', function () { expect(await recipient.something('hello')) .to.emit(recipient, 'Sender') .withArgs(anyValue, walletAddress, 'hello') - }) + })*/ - it('should revert if on-chain userOp execution reverts', async function () { + // TODO + /*it('should revert if on-chain userOp execution reverts', async function () { try { await recipient.reverting({ gasLimit: 10000 }) } catch (e: any) { expect(e.message).to.match(/test revert/) } - }) + })*/ }) diff --git a/packages/smart-account/tests/0-smartaccount.spec.ts b/packages/smart-account/tests/0-smartaccount.spec.ts index 0767a8413..e9113d394 100644 --- a/packages/smart-account/tests/0-smartaccount.spec.ts +++ b/packages/smart-account/tests/0-smartaccount.spec.ts @@ -87,7 +87,7 @@ describe('Wallet integration', function () { api: 'https://api.etherscan.io/' }, ensRegistryAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', - estimatorAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', + estimatorAddress: '0x65DB1c3c53B7e4EEa71EBA504d8F05369E63Ed34', walletFactory: [ { version: '1.0.0', @@ -102,50 +102,53 @@ describe('Wallet integration', function () { }, { version: '1.0.1', - address: '0x596387b0232540b3b620050dcd747fa7e4d21797', + address: '0xf59cda6fd211303bfb79f87269abd37f565499d8', abi: '', walletCreatedEventName: 'WalletCreated', WalletCreatedEventConfirmations: 6, walletCreatedEventTopicHash: - '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6', + '0xdccb4dfe68c3cc7c8b9bdc8577a418c2c77377328c5b1c3791069c7fa53b1128', walletCreatedAbi: - '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}]' } ], - decoderAddress: '0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18', + decoderAddress: '0x69214e26ab458fe20b7c3337530b994cd49c8686', multiSend: [ { version: '1.0.0', - address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + address: '0x2f65bed438a30827d408b7c6818ec5a22c022dd1', abi: '' }, { version: '1.0.1', - address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + address: '0x2f65bed438a30827d408b7c6818ec5a22c022dd1', abi: '' } ], multiSendCall: [ { version: '1.0.0', - address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + address: '0xa1677d8c8edb188e49ecd832236af281d6b0b20e', abi: '' }, { version: '1.0.1', - address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + address: '0xa1677d8c8edb188e49ecd832236af281d6b0b20e', abi: '' } ], walletCreatedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, + walletCreatedEventHit: true, eoaChangedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - eoaChangedEventHit: false, + eoaChangedEventHit: true, updateImplementationCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', - updateImplementationEventHit: false, + updateImplementationEventHit: true, + executionSuccessCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/transactions/', + executionSuccessEventHit: true, wallet: [ { version: '1.0.0', @@ -160,13 +163,59 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } }, { version: '1.0.1', - address: '0xc313daf8dc1e6991f15068a6ca27d372f08a5455', + address: '0x1572be4ca6ee072b3a3f82dca003ed980ff98732', abi: '', eoaChangedEventName: 'EOAChanged', eoaChangedEventConfirmations: 6, @@ -177,32 +226,114 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x31c5374dcc95d137f3c21741a151157300dc87c02ffd59e4a177713557a916b1', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } } ], entryPoint: [ { version: '1.0.0', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' }, { version: '1.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xa948dc08f217c96c687dc3bf2e6051fb906b872a', abi: '' } ], fallBackHandler: [ { version: '1.0.0', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' }, { version: '1.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' } ], @@ -233,7 +364,7 @@ describe('Wallet integration', function () { api: 'https://api.polygonscan.com/' }, ensRegistryAddress: '', - estimatorAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', + estimatorAddress: '0x65DB1c3c53B7e4EEa71EBA504d8F05369E63Ed34', walletFactory: [ { version: '1.0.0', @@ -248,50 +379,53 @@ describe('Wallet integration', function () { }, { version: '1.0.1', - address: '0x2602cf019a69f40fb7de5a0f3fdb778eee7ed722', + address: '0xf59cda6fd211303bfb79f87269abd37f565499d8', abi: '', walletCreatedEventName: 'WalletCreated', WalletCreatedEventConfirmations: 6, walletCreatedEventTopicHash: - '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6', + '0xdccb4dfe68c3cc7c8b9bdc8577a418c2c77377328c5b1c3791069c7fa53b1128', walletCreatedAbi: - '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}]' } ], - decoderAddress: '0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18', + decoderAddress: '0x69214e26ab458fe20b7c3337530b994cd49c8686', multiSend: [ { version: '1.0.0', - address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + address: '0x2f65bed438a30827d408b7c6818ec5a22c022dd1', abi: '' }, { version: '1.0.1', - address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + address: '0x2f65bed438a30827d408b7c6818ec5a22c022dd1', abi: '' } ], multiSendCall: [ { version: '1.0.0', - address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + address: '0xa1677d8c8edb188e49ecd832236af281d6b0b20e', abi: '' }, { version: '1.0.1', - address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + address: '0xa1677d8c8edb188e49ecd832236af281d6b0b20e', abi: '' } ], walletCreatedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, + walletCreatedEventHit: true, eoaChangedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - eoaChangedEventHit: false, + eoaChangedEventHit: true, updateImplementationCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', - updateImplementationEventHit: false, + updateImplementationEventHit: true, + executionSuccessCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/transactions/', + executionSuccessEventHit: true, wallet: [ { version: '1.0.0', @@ -306,13 +440,59 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } }, { version: '1.0.1', - address: '0x140a25bd5b002dceae2754cf12576a2640ddc18e', + address: '0x1572be4ca6ee072b3a3f82dca003ed980ff98732', abi: '', eoaChangedEventName: 'EOAChanged', eoaChangedEventConfirmations: 6, @@ -323,32 +503,114 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x31c5374dcc95d137f3c21741a151157300dc87c02ffd59e4a177713557a916b1', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } } ], entryPoint: [ { version: '1.0.0', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' }, { version: '1.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xa948dc08f217c96c687dc3bf2e6051fb906b872a', abi: '' } ], fallBackHandler: [ { version: '1.0.0', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' }, { version: '1.0.1', - address: '0xfc942e06c54d08502557fa40e1aa23c5258132d5', + address: '0x0bc0c08122947be919a02f9861d83060d34ea478', abi: '' } ], @@ -380,7 +642,7 @@ describe('Wallet integration', function () { api: 'https://bscscan.com/' }, ensRegistryAddress: '', - estimatorAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', + estimatorAddress: '0x65DB1c3c53B7e4EEa71EBA504d8F05369E63Ed34', walletFactory: [ { version: '1.0.0', @@ -395,50 +657,53 @@ describe('Wallet integration', function () { }, { version: '1.0.1', - address: '0x596387b0232540b3b620050dcd747fa7e4d21797', + address: '0xf59cda6fd211303bfb79f87269abd37f565499d8', abi: '', walletCreatedEventName: 'WalletCreated', WalletCreatedEventConfirmations: 6, walletCreatedEventTopicHash: - '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6', + '0xdccb4dfe68c3cc7c8b9bdc8577a418c2c77377328c5b1c3791069c7fa53b1128', walletCreatedAbi: - '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}]' } ], - decoderAddress: '0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18', + decoderAddress: '0x69214e26ab458fe20b7c3337530b994cd49c8686', multiSend: [ { version: '1.0.0', - address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + address: '0x2f65bed438a30827d408b7c6818ec5a22c022dd1', abi: '' }, { version: '1.0.1', - address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + address: '0x2f65bed438a30827d408b7c6818ec5a22c022dd1', abi: '' } ], multiSendCall: [ { version: '1.0.0', - address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + address: '0xa1677d8c8edb188e49ecd832236af281d6b0b20e', abi: '' }, { version: '1.0.1', - address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + address: '0xa1677d8c8edb188e49ecd832236af281d6b0b20e', abi: '' } ], walletCreatedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, + walletCreatedEventHit: true, eoaChangedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - eoaChangedEventHit: false, + eoaChangedEventHit: true, updateImplementationCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', - updateImplementationEventHit: false, + updateImplementationEventHit: true, + executionSuccessCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/transactions/', + executionSuccessEventHit: true, wallet: [ { version: '1.0.0', @@ -453,13 +718,59 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } }, { version: '1.0.1', - address: '0xc313daf8dc1e6991f15068a6ca27d372f08a5455', + address: '0x1572be4ca6ee072b3a3f82dca003ed980ff98732', abi: '', eoaChangedEventName: 'EOAChanged', eoaChangedEventConfirmations: 6, @@ -470,32 +781,114 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x31c5374dcc95d137f3c21741a151157300dc87c02ffd59e4a177713557a916b1', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } } ], entryPoint: [ { version: '1.0.0', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' }, { version: '1.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xa948dc08f217c96c687dc3bf2e6051fb906b872a', abi: '' } ], fallBackHandler: [ { version: '1.0.0', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' }, { version: '1.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' } ], @@ -526,7 +919,7 @@ describe('Wallet integration', function () { api: 'https://goerli.etherscan.io/' }, ensRegistryAddress: '', - estimatorAddress: '0x8caefe0d512b8e86c7c1bb59e7473d354cf864ab', + estimatorAddress: '0x65DB1c3c53B7e4EEa71EBA504d8F05369E63Ed34', walletFactory: [ { version: '1.0.0', @@ -541,50 +934,53 @@ describe('Wallet integration', function () { }, { version: '1.0.1', - address: '0x2602cf019a69f40fb7de5a0f3fdb778eee7ed722', + address: '0xf59cda6fd211303bfb79f87269abd37f565499d8', abi: '', walletCreatedEventName: 'WalletCreated', WalletCreatedEventConfirmations: 6, walletCreatedEventTopicHash: - '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6', + '0xdccb4dfe68c3cc7c8b9bdc8577a418c2c77377328c5b1c3791069c7fa53b1128', walletCreatedAbi: - '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}]' } ], - decoderAddress: '0xba63a55b7ee3334044a2100c99acdd93325fc0cb', + decoderAddress: '0x69214e26ab458fe20b7c3337530b994cd49c8686', multiSend: [ { version: '1.0.0', - address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + address: '0x2f65bed438a30827d408b7c6818ec5a22c022dd1', abi: '' }, { version: '1.0.1', - address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + address: '0x2f65bed438a30827d408b7c6818ec5a22c022dd1', abi: '' } ], multiSendCall: [ { version: '1.0.0', - address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + address: '0xa1677d8c8edb188e49ecd832236af281d6b0b20e', abi: '' }, { version: '1.0.1', - address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + address: '0xa1677d8c8edb188e49ecd832236af281d6b0b20e', abi: '' } ], walletCreatedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, + walletCreatedEventHit: true, eoaChangedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - eoaChangedEventHit: false, + eoaChangedEventHit: true, updateImplementationCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', - updateImplementationEventHit: false, + updateImplementationEventHit: true, + executionSuccessCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/transactions/', + executionSuccessEventHit: true, wallet: [ { version: '1.0.0', @@ -599,13 +995,59 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } }, { version: '1.0.1', - address: '0x140a25bd5b002dceae2754cf12576a2640ddc18e', + address: '0x1572be4ca6ee072b3a3f82dca003ed980ff98732', abi: '', eoaChangedEventName: 'EOAChanged', eoaChangedEventConfirmations: 6, @@ -616,32 +1058,114 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x31c5374dcc95d137f3c21741a151157300dc87c02ffd59e4a177713557a916b1', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } } ], entryPoint: [ { version: '1.0.0', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' }, { version: '1.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xa948dc08f217c96c687dc3bf2e6051fb906b872a', abi: '' } ], fallBackHandler: [ { version: '1.0.0', - address: '0xfc942e06c54d08502557fa40e1aa23c5258132d5', + address: '0x0bc0c08122947be919a02f9861d83060d34ea478', abi: '' }, { version: '1.0.1', - address: '0xfc942e06c54d08502557fa40e1aa23c5258132d5', + address: '0x0bc0c08122947be919a02f9861d83060d34ea478', abi: '' } ], @@ -672,7 +1196,7 @@ describe('Wallet integration', function () { api: 'https://api.mumbai.polygonscan.com/' }, ensRegistryAddress: '', - estimatorAddress: '0x8caefe0d512b8e86c7c1bb59e7473d354cf864ab', + estimatorAddress: '0x65DB1c3c53B7e4EEa71EBA504d8F05369E63Ed34', walletFactory: [ { version: '1.0.0', @@ -687,50 +1211,53 @@ describe('Wallet integration', function () { }, { version: '1.0.1', - address: '0x2602cf019a69f40fb7de5a0f3fdb778eee7ed722', + address: '0xf59cda6fd211303bfb79f87269abd37f565499d8', abi: '', walletCreatedEventName: 'WalletCreated', WalletCreatedEventConfirmations: 6, walletCreatedEventTopicHash: - '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf5', + '0xdccb4dfe68c3cc7c8b9bdc8577a418c2c77377328c5b1c3791069c7fa53b1128', walletCreatedAbi: - '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}]' } ], - decoderAddress: '0xba63a55b7ee3334044a2100c99acdd93325fc0cb', + decoderAddress: '0x69214e26ab458fe20b7c3337530b994cd49c8686', multiSend: [ { version: '1.0.0', - address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + address: '0x2f65bed438a30827d408b7c6818ec5a22c022dd1', abi: '' }, { version: '1.0.1', - address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + address: '0x2f65bed438a30827d408b7c6818ec5a22c022dd1', abi: '' } ], multiSendCall: [ { version: '1.0.0', - address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + address: '0xa1677d8c8edb188e49ecd832236af281d6b0b20e', abi: '' }, { version: '1.0.1', - address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + address: '0xa1677d8c8edb188e49ecd832236af281d6b0b20e', abi: '' } ], walletCreatedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, + walletCreatedEventHit: true, eoaChangedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - eoaChangedEventHit: false, + eoaChangedEventHit: true, updateImplementationCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', - updateImplementationEventHit: false, + updateImplementationEventHit: true, + executionSuccessCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/transactions/', + executionSuccessEventHit: true, wallet: [ { version: '1.0.0', @@ -745,13 +1272,59 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } }, { version: '1.0.1', - address: '0x140a25bd5b002dceae2754cf12576a2640ddc18e', + address: '0x1572be4ca6ee072b3a3f82dca003ed980ff98732', abi: '', eoaChangedEventName: 'EOAChanged', eoaChangedEventConfirmations: 6, @@ -762,32 +1335,114 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x31c5374dcc95d137f3c21741a151157300dc87c02ffd59e4a177713557a916b1', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } } ], entryPoint: [ { version: '1.0.0', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' }, { version: '1.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xa948dc08f217c96c687dc3bf2e6051fb906b872a', abi: '' } ], fallBackHandler: [ { version: '1.0.0', - address: '0xfc942e06c54d08502557fa40e1aa23c5258132d5', + address: '0x0bc0c08122947be919a02f9861d83060d34ea478', abi: '' }, { version: '1.0.1', - address: '0xfc942e06c54d08502557fa40e1aa23c5258132d5', + address: '0x0bc0c08122947be919a02f9861d83060d34ea478', abi: '' } ], @@ -819,7 +1474,7 @@ describe('Wallet integration', function () { api: 'https://bscscan.com/' }, ensRegistryAddress: '', - estimatorAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', + estimatorAddress: '0x65DB1c3c53B7e4EEa71EBA504d8F05369E63Ed34', walletFactory: [ { version: '1.0.0', @@ -834,50 +1489,53 @@ describe('Wallet integration', function () { }, { version: '1.0.1', - address: '0x596387b0232540b3b620050dcd747fa7e4d21797', + address: '0xf59cda6fd211303bfb79f87269abd37f565499d8', abi: '', walletCreatedEventName: 'WalletCreated', WalletCreatedEventConfirmations: 6, walletCreatedEventTopicHash: - '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6', + '0xdccb4dfe68c3cc7c8b9bdc8577a418c2c77377328c5b1c3791069c7fa53b1128', walletCreatedAbi: - '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}]' } ], - decoderAddress: '0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18', + decoderAddress: '0x69214e26ab458fe20b7c3337530b994cd49c8686', multiSend: [ { version: '1.0.0', - address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + address: '0x2f65bed438a30827d408b7c6818ec5a22c022dd1', abi: '' }, { version: '1.0.1', - address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + address: '0x2f65bed438a30827d408b7c6818ec5a22c022dd1', abi: '' } ], multiSendCall: [ { version: '1.0.0', - address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + address: '0xa1677d8c8edb188e49ecd832236af281d6b0b20e', abi: '' }, { version: '1.0.1', - address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + address: '0xa1677d8c8edb188e49ecd832236af281d6b0b20e', abi: '' } ], walletCreatedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, + walletCreatedEventHit: true, eoaChangedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - eoaChangedEventHit: false, + eoaChangedEventHit: true, updateImplementationCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', - updateImplementationEventHit: false, + updateImplementationEventHit: true, + executionSuccessCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/transactions/', + executionSuccessEventHit: true, wallet: [ { version: '1.0.0', @@ -892,13 +1550,59 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } }, { version: '1.0.1', - address: '0xc313daf8dc1e6991f15068a6ca27d372f08a5455', + address: '0x1572be4ca6ee072b3a3f82dca003ed980ff98732', abi: '', eoaChangedEventName: 'EOAChanged', eoaChangedEventConfirmations: 6, @@ -909,32 +1613,114 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x31c5374dcc95d137f3c21741a151157300dc87c02ffd59e4a177713557a916b1', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } } ], entryPoint: [ { version: '1.0.0', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' }, { version: '1.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xa948dc08f217c96c687dc3bf2e6051fb906b872a', abi: '' } ], fallBackHandler: [ { version: '1.0.0', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' }, { version: '1.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' } ], @@ -956,7 +1742,7 @@ describe('Wallet integration', function () { api: 'https://api.mumbai.polygonscan.com/' }, ensRegistryAddress: '', - estimatorAddress: '0xc6e8748a08e591250a3eed526e9455859633c6c4', + estimatorAddress: '0x65DB1c3c53B7e4EEa71EBA504d8F05369E63Ed34', walletFactory: [ { version: '1.0.0', @@ -976,16 +1762,16 @@ describe('Wallet integration', function () { walletCreatedEventName: 'WalletCreated', WalletCreatedEventConfirmations: 6, walletCreatedEventTopicHash: - '0xca0b7dde26052d34217ef1a0cee48085a07ca32da0a918609937a307d496bbf6', + '0xdccb4dfe68c3cc7c8b9bdc8577a418c2c77377328c5b1c3791069c7fa53b1128', walletCreatedAbi: - '{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}' + '[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxy","type":"address"},{"indexed":true,"internalType":"address","name":"_implementation","type":"address"},{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"}],"name":"WalletCreated","type":"event"}]' } ], - decoderAddress: '0x4C6B185b60a2b9D11d746591C8bA768dcBCF7d18', + decoderAddress: '0x69214e26ab458fe20b7c3337530b994cd49c8686', multiSend: [ { version: '1.0.0', - address: '0xf9dc4a9b8b551f693a10ecb5f931fe2e1a9156f0', + address: '0x2f65bed438a30827d408b7c6818ec5a22c022dd1', abi: '' }, { @@ -997,7 +1783,7 @@ describe('Wallet integration', function () { multiSendCall: [ { version: '1.0.0', - address: '0xa72e2c9ec14ddee494f551aae9885158105f809c', + address: '0xa1677d8c8edb188e49ecd832236af281d6b0b20e', abi: '' }, { @@ -1008,13 +1794,16 @@ describe('Wallet integration', function () { ], walletCreatedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts', - walletCreatedEventHit: false, + walletCreatedEventHit: true, eoaChangedCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/owner', - eoaChangedEventHit: false, + eoaChangedEventHit: true, updateImplementationCallBackEndpoint: 'https://sdk-backend.staging.biconomy.io/v1/smart-accounts/implementation', - updateImplementationEventHit: false, + updateImplementationEventHit: true, + executionSuccessCallBackEndpoint: + 'https://sdk-backend.staging.biconomy.io/v1/transactions/', + executionSuccessEventHit: true, wallet: [ { version: '1.0.0', @@ -1029,9 +1818,55 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'bytes32', + name: 'txHash', + type: 'bytes32' + }, + { + indexed: false, + internalType: 'uint256', + name: 'payment', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } }, { version: '1.0.1', @@ -1046,32 +1881,114 @@ describe('Wallet integration', function () { updateImplementationEventName: 'UpdateImplementation', updateImplementationEventConfirmations: 6, updateImplementationEventTopicHash: - '0xf2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd4', + '0x31c5374dcc95d137f3c21741a151157300dc87c02ffd59e4a177713557a916b1', updateImplementationEventAbi: - '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]' + '[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_scw","type":"address"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"ImplementationUpdated","type":"event"}]', + executionSuccessEventName: 'ExecutionSuccess', + executionSuccessEventConfirmations: 6, + executionSuccessEventTopicHash: + '0x81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee', + executionSuccessEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionSuccess', + type: 'event' + }, + executionFailureEventName: 'ExecutionFailure', + executionFailureEventConfirmations: 6, + executionFailureEventTopicHash: + '0x3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a', + executionFailureEventAbi: { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: 'address', + name: 'to', + type: 'address' + }, + { + indexed: false, + internalType: 'uint256', + name: 'value', + type: 'uint256' + }, + { + indexed: false, + internalType: 'bytes', + name: 'data', + type: 'bytes' + }, + { + indexed: false, + internalType: 'enum Enum.Operation', + name: 'operation', + type: 'uint8' + }, + { + indexed: false, + internalType: 'uint256', + name: 'txGas', + type: 'uint256' + } + ], + name: 'ExecutionFailure', + type: 'event' + } } ], entryPoint: [ { version: '1.0.0', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' }, { version: '1.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xa948dc08f217c96c687dc3bf2e6051fb906b872a', abi: '' } ], fallBackHandler: [ { version: '1.0.0', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' }, { version: '1.0.1', - address: '0xF05217199F1C25604c67993F11a81461Bc97F3Ab', + address: '0xf05217199f1c25604c67993f11a81461bc97f3ab', abi: '' } ], @@ -1091,9 +2008,15 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider!, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE], // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backendUrl: "http://localhost:3000/v1" + networkConfig: [ + { + chainId: ChainId.GANACHE, + providerUrl: 'http://localhost:8545' + } + ] }) const smartAccount = await wallet.init() @@ -1125,9 +2048,15 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider!, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE], // has to be consisttent providers and network names // walletProvider: ethnode.provider, //backendUrl: "http://localhost:3000/v1" + networkConfig: [ + { + chainId: ChainId.GANACHE, + providerUrl: 'http://localhost:8545' + } + ] }) const smartAccount = await wallet.init() @@ -1163,7 +2092,13 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider!, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE], // has to be consisttent providers and network names + networkConfig: [ + { + chainId: ChainId.GANACHE, + providerUrl: 'http://localhost:8545' + } + ] }) const smartAccount = await wallet.init() @@ -1192,7 +2127,12 @@ describe('Wallet integration', function () { transaction: tx }) - const signature = await smartAccount.signTransaction({ version: smartAccount.DEFAULT_VERSION, tx: smartAccountTransaction, chainId: ChainId.GANACHE, signer: smartAccount.signer }) + const signature = await smartAccount.signTransaction({ + version: smartAccount.DEFAULT_VERSION, + tx: smartAccountTransaction, + chainId: ChainId.GANACHE, + signer: smartAccount.signer + }) console.log('signature is: ', signature) }) @@ -1203,7 +2143,13 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider!, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE], // has to be consisttent providers and network names + networkConfig: [ + { + chainId: ChainId.GANACHE, + providerUrl: 'http://localhost:8545' + } + ] }) const smartAccount = await wallet.init() @@ -1226,7 +2172,7 @@ describe('Wallet integration', function () { // todo : undo and fix // const isDeployed = await smartAccount.isDeployed(ChainId.GOERLI) /// can pass chainId here - + // Check if the smart wallet is deployed or not const state = await smartAccount.getSmartAccountState(ChainId.GOERLI) console.log(state) @@ -1245,7 +2191,13 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider!, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE], // has to be consisttent providers and network names + networkConfig: [ + { + chainId: ChainId.GANACHE, + providerUrl: 'http://localhost:8545' + } + ] }) const smartAccount = await wallet.init() @@ -1302,7 +2254,13 @@ describe('Wallet integration', function () { const wallet = new SmartAccount(ethnode.provider!, { activeNetworkId: ChainId.GANACHE, - supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE] // has to be consisttent providers and network names + supportedNetworksIds: [ChainId.GOERLI, ChainId.GANACHE], // has to be consisttent providers and network names + networkConfig: [ + { + chainId: ChainId.GANACHE, + providerUrl: 'http://localhost:8545' + } + ] }) const smartAccount = await wallet.init() @@ -1346,9 +2304,11 @@ describe('Wallet integration', function () { txs.push(tx2) - const smartAccountTransaction: IWalletTransaction = await smartAccount.createTransactionBatch({ - transactions: txs - }) + const smartAccountTransaction: IWalletTransaction = await smartAccount.createTransactionBatch( + { + transactions: txs + } + ) // Attach relayer before sending a transaction @@ -1384,6 +2344,5 @@ describe('Wallet integration', function () { // connectPaymaster? // disconnectPaymaster? // connectBundler? - }) }) From 45cbf1675db65dd7da21df49a60b499a0830e652 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Thu, 10 Nov 2022 17:48:07 +0400 Subject: [PATCH 0283/1247] version upgrade --- lerna.json | 2 +- packages/account-abstraction/package.json | 2 +- packages/common/package.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/gas-estimator/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- packages/web3-auth/package.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lerna.json b/lerna.json index 2164cf6f7..8430d6006 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], "npmClient": "yarn", - "version": "1.0.23", + "version": "1.0.24", "useWorkspaces": true } \ No newline at end of file diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index 1f95807cc..e6f000130 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/account-abstraction", - "version": "1.0.23", + "version": "1.0.24", "description": "Account abstraction APIs to prepare user operations ", "keywords": [ "account-abstraction", diff --git a/packages/common/package.json b/packages/common/package.json index 1773bd813..3d0e65f5b 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/common", - "version": "1.0.23", + "version": "1.0.24", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 4b629744d..07bfc753f 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.23", + "version": "1.0.24", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 1e642c8a3..0bd045709 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.23", + "version": "1.0.24", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index 6f202b9b0..aba65b8d6 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/gas-estimator", - "version": "1.0.23", + "version": "1.0.24", "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", "keywords": [ "gas-estimation", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 5f5d65790..bd9e1100a 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.23", + "version": "1.0.24", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 45fc57291..97ecf2343 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.23", + "version": "1.0.24", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 2062398c0..26fc109f9 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.23", + "version": "1.0.24", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 7e58c4ad5..113f9fb45 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.23", + "version": "1.0.24", "description": "utils for sending all transaction legos", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index 5139580ca..3fffc37f1 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/web3-auth", - "version": "1.0.23", + "version": "1.0.24", "description": "web3-auth for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From 744bb7bb821f42ebfbcaf6f672db1f6c122434c0 Mon Sep 17 00:00:00 2001 From: Kunal Chauhan Date: Fri, 11 Nov 2022 16:00:30 +0530 Subject: [PATCH 0284/1247] added onHashChanged event --- .../src/ERC4337EthersProvider.ts | 11 ----------- .../src/ERC4337EthersSigner.ts | 17 +++++++++++++++++ packages/relayer/src/RestRelayer.ts | 17 +++++++++++++++++ 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/packages/account-abstraction/src/ERC4337EthersProvider.ts b/packages/account-abstraction/src/ERC4337EthersProvider.ts index bf36c9d04..0edfc4d2b 100644 --- a/packages/account-abstraction/src/ERC4337EthersProvider.ts +++ b/packages/account-abstraction/src/ERC4337EthersProvider.ts @@ -178,17 +178,6 @@ export class ERC4337EthersProvider extends BaseProvider { receipt: tx.receipt }) resolve(receipt) - }, - onError: async (tx: any) => { - console.log(`Error message received at client is ${tx}`) - const err = tx.error - const txId = tx.transactionId - clientMessenger.unsubscribe(txId) - engine.emit('onError', { - error: err, - transactionId: txId - }) - reject(err) } }) } diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 8c4530125..eb91a912a 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -134,6 +134,23 @@ export class ERC4337EthersSigner extends Signer { }) } }, + onHashChanged: async (tx: any) => { + if (tx) { + const txHash = tx.transactionHash + const txId = tx.transactionId + console.log( + `Tx Hash changed message received at client ${JSON.stringify({ + transactionId: txId, + hash: txHash + })}` + ) + engine.emit('txHashChanged', { + id: tx.transactionId, + hash: tx.transactionHash, + msg: 'txn hash changed' + }) + } + }, onError: async (tx: any) => { if (tx) { console.log(`Error message received at client is ${tx}`) diff --git a/packages/relayer/src/RestRelayer.ts b/packages/relayer/src/RestRelayer.ts index 9fe17cfcf..8d36a8bbc 100644 --- a/packages/relayer/src/RestRelayer.ts +++ b/packages/relayer/src/RestRelayer.ts @@ -202,6 +202,23 @@ export class RestRelayer implements IRelayer { msg: 'txn hash generated' }) }, + onHashChanged: async (tx: any) => { + if (tx) { + const txHash = tx.transactionHash + const txId = tx.transactionId + console.log( + `Tx Hash changed message received at client ${JSON.stringify({ + transactionId: txId, + hash: txHash + })}` + ) + engine.emit('txHashChanged', { + id: tx.transactionId, + hash: tx.transactionHash, + msg: 'txn hash changed' + }) + } + }, onError: async (tx: any) => { console.log(`Error message received at client is ${tx}`) const err = tx.error From 311f92a5ca2cc022d0c5dc15ab8dd0395ee66fca Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 11 Nov 2022 18:04:21 +0400 Subject: [PATCH 0285/1247] remove wiating for receipt for ethers 4337 signer response --- packages/account-abstraction/src/ERC4337EthersProvider.ts | 4 ++-- packages/account-abstraction/src/ERC4337EthersSigner.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/account-abstraction/src/ERC4337EthersProvider.ts b/packages/account-abstraction/src/ERC4337EthersProvider.ts index bf36c9d04..b75894794 100644 --- a/packages/account-abstraction/src/ERC4337EthersProvider.ts +++ b/packages/account-abstraction/src/ERC4337EthersProvider.ts @@ -174,7 +174,7 @@ export class ERC4337EthersProvider extends BaseProvider { engine.emit('txMined', { msg: 'txn mined', id: txId, - hash: tx.transactionHash, + hash: tx.transactionHash, // Note: differs from TransactionReceipt.transactionHash receipt: tx.receipt }) resolve(receipt) @@ -195,7 +195,7 @@ export class ERC4337EthersProvider extends BaseProvider { }) return { - hash: requestId, // or transactionId + hash: requestId, // or transactionId // or watcher like wait() confirmations: 0, from: userOp.sender, nonce: BigNumber.from(userOp.nonce).toNumber(), diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 8c4530125..db9f6dd9b 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -156,8 +156,8 @@ export class ERC4337EthersSigner extends Signer { bundlerServiceResponse.transactionId, engine ) - const receipt = await transactionResponse.wait() - console.log('transactionResponse in sendTransaction', receipt) + // const receipt = await transactionResponse.wait() + // console.log('transactionResponse in sendTransaction', receipt) // TODO: handle errors - transaction that is "rejected" by bundler is _not likely_ to ever resolve its "wait()" return transactionResponse From d7adba99fbb875a6a7b277ffa841ad2f1a173686 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 11 Nov 2022 19:09:27 +0400 Subject: [PATCH 0286/1247] reject on error ERC4337 provider --- packages/account-abstraction/src/ERC4337EthersProvider.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/account-abstraction/src/ERC4337EthersProvider.ts b/packages/account-abstraction/src/ERC4337EthersProvider.ts index ae998e5ee..13bc5a38d 100644 --- a/packages/account-abstraction/src/ERC4337EthersProvider.ts +++ b/packages/account-abstraction/src/ERC4337EthersProvider.ts @@ -178,6 +178,9 @@ export class ERC4337EthersProvider extends BaseProvider { receipt: tx.receipt }) resolve(receipt) + }, + onError: async (err: any) => { + reject(err) } }) } From 9dbfd6b6a303a1c9d52328f4c66db913f7b8c468 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 11 Nov 2022 19:13:54 +0400 Subject: [PATCH 0287/1247] update package version --- lerna.json | 2 +- packages/account-abstraction/package.json | 2 +- packages/common/package.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/gas-estimator/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- packages/web3-auth/package.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lerna.json b/lerna.json index 8430d6006..3cd346f54 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], "npmClient": "yarn", - "version": "1.0.24", + "version": "1.0.27", "useWorkspaces": true } \ No newline at end of file diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index e6f000130..53e8f1e33 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/account-abstraction", - "version": "1.0.24", + "version": "1.0.27", "description": "Account abstraction APIs to prepare user operations ", "keywords": [ "account-abstraction", diff --git a/packages/common/package.json b/packages/common/package.json index 3d0e65f5b..3493b8efd 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/common", - "version": "1.0.24", + "version": "1.0.27", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 07bfc753f..e4f5f305e 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/core-types", - "version": "1.0.24", + "version": "1.0.27", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 0bd045709..9bf8ae465 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/ethers-lib", - "version": "1.0.24", + "version": "1.0.27", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index aba65b8d6..d744ace0e 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/gas-estimator", - "version": "1.0.24", + "version": "1.0.27", "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", "keywords": [ "gas-estimation", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index bd9e1100a..21ba37df5 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/node-client", - "version": "1.0.24", + "version": "1.0.27", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 97ecf2343..e26124140 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/relayer", - "version": "1.0.24", + "version": "1.0.27", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 26fc109f9..6ac5edb59 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/smart-account", - "version": "1.0.24", + "version": "1.0.27", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 113f9fb45..ee65816ec 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/transactions", - "version": "1.0.24", + "version": "1.0.27", "description": "utils for sending all transaction legos", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index 3fffc37f1..b3478c76f 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy-sdk/web3-auth", - "version": "1.0.24", + "version": "1.0.27", "description": "web3-auth for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From 4fc1d24c1e53261f086b94a937920c28089abb8f Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 11 Nov 2022 19:31:57 +0400 Subject: [PATCH 0288/1247] merge ready for master and publish --- packages/account-abstraction/README.md | 2 +- packages/account-abstraction/package.json | 12 ++++++------ packages/account-abstraction/src/BaseWalletAPI.ts | 8 ++++---- .../src/BiconomyPaymasterAPI.ts | 4 ++-- packages/account-abstraction/src/ClientConfig.ts | 2 +- .../src/ERC4337EthersProvider.ts | 4 ++-- .../account-abstraction/src/ERC4337EthersSigner.ts | 2 +- packages/account-abstraction/src/HttpRpcClient.ts | 2 +- packages/account-abstraction/src/Provider.ts | 2 +- .../account-abstraction/src/SmartAccountAPI.ts | 6 +++--- .../test/0-deterministicDeployer.test.ts | 2 +- .../test/1-SmartAccountAPI.test.ts | 6 +++--- .../test/2-ERC4337EthersSigner.test.ts | 4 ++-- packages/common/README.md | 2 +- packages/common/package.json | 4 ++-- packages/common/src/ERC4337Utils.ts | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 4 ++-- packages/ethers-lib/src/EvmNetworkManager.ts | 2 +- .../v1.0.0/EntryPointEthersContract.ts | 2 +- .../v1.0.1/EntryPointEthersContract.ts | 2 +- .../MultiSend/v1.0.0/MultiSendEthersContract.ts | 2 +- .../MultiSend/v1.0.1/MultiSendEthersContract.ts | 2 +- .../v1.0.0/MultiSendCallOnlyEthersContract.ts | 2 +- .../v1.0.1/MultiSendCallOnlyEthersContract.ts | 2 +- .../v1.0.0/SmartWalletContractEthers.ts | 2 +- .../v1.0.1/SmartWalletContractEthers.ts | 2 +- .../SmartWalletProxyFactoryEthersContract.ts | 2 +- .../SmartWalletProxyFactoryEthersContract.ts | 2 +- .../src/contracts/contractInstancesEthers.ts | 2 +- packages/ethers-lib/src/types.ts | 2 +- packages/gas-estimator/README.md | 4 ++-- packages/gas-estimator/package.json | 2 +- packages/node-client/package.json | 6 +++--- packages/node-client/src/INodeClient.ts | 2 +- packages/node-client/src/types/NodeClientTypes.ts | 2 +- packages/node-client/src/utils/HttpRequests.ts | 2 +- packages/node-client/tests/0-nodeclient.spec.ts | 4 ++-- packages/relayer/package.json | 4 ++-- packages/relayer/src/LocalRelayer.ts | 2 +- packages/relayer/src/RestRelayer.ts | 2 +- packages/relayer/src/index.ts | 4 ++-- packages/relayer/src/utils/HttpRequests.ts | 2 +- packages/relayer/src/utils/MultiSend.ts | 2 +- packages/smart-account/package.json | 14 +++++++------- packages/smart-account/src/SmartAccount.ts | 10 +++++----- .../src/providers/SmartAccountProvider.ts | 2 +- packages/smart-account/src/signers/Signer.ts | 6 +++--- .../src/signers/SmartAccountSigner.ts | 4 ++-- packages/smart-account/src/types.ts | 2 +- .../smart-account/tests/0-smartaccount.spec.ts | 4 ++-- packages/smart-account/tests/utils/deploy.ts | 2 +- packages/transactions/package.json | 10 +++++----- packages/transactions/src/ContractUtils.ts | 8 ++++---- packages/transactions/src/Estimator.ts | 6 +++--- packages/transactions/src/Execution.ts | 2 +- packages/transactions/src/MultiSend.ts | 2 +- packages/transactions/src/TransactionManager.ts | 8 ++++---- packages/transactions/src/Types.ts | 2 +- packages/transactions/src/Utils.ts | 4 ++-- .../transactions/src/utils/FetchContractsInfo.ts | 8 ++++---- packages/web3-auth/README.md | 2 +- packages/web3-auth/package.json | 2 +- 63 files changed, 116 insertions(+), 116 deletions(-) diff --git a/packages/account-abstraction/README.md b/packages/account-abstraction/README.md index 97a2e1623..5bf44c454 100644 --- a/packages/account-abstraction/README.md +++ b/packages/account-abstraction/README.md @@ -1,4 +1,4 @@ -# `@biconomy-sdk/account-abstraction` +# `@biconomy/account-abstraction` ## To create and send UserOperation diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index 53e8f1e33..28a9c375a 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -1,5 +1,5 @@ { - "name": "@biconomy-sdk/account-abstraction", + "name": "@biconomy/account-abstraction", "version": "1.0.27", "description": "Account abstraction APIs to prepare user operations ", "keywords": [ @@ -37,7 +37,7 @@ }, "dependencies": { "@account-abstraction/contracts": "^0.2.0", - "@biconomy-sdk/common": "*", + "@biconomy/common": "*", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/networks": "^5.7.0", @@ -50,10 +50,10 @@ "solidity-coverage": "^0.7.22" }, "devDependencies": { - "@biconomy-sdk/common": "*", - "@biconomy-sdk/core-types": "*", - "@biconomy-sdk/ethers-lib": "*", - "@biconomy-sdk/transactions": "*", + "@biconomy/common": "*", + "@biconomy/core-types": "*", + "@biconomy/ethers-lib": "*", + "@biconomy/transactions": "*", "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", "@nomicfoundation/hardhat-toolbox": "^1.0.2", "@nomiclabs/hardhat-ethers": "^2.0.0", diff --git a/packages/account-abstraction/src/BaseWalletAPI.ts b/packages/account-abstraction/src/BaseWalletAPI.ts index d96c9e4ea..f6e7fc120 100644 --- a/packages/account-abstraction/src/BaseWalletAPI.ts +++ b/packages/account-abstraction/src/BaseWalletAPI.ts @@ -1,17 +1,17 @@ import { BigNumber, BigNumberish } from 'ethers' import { Provider } from '@ethersproject/providers' -import { UserOperation } from '@biconomy-sdk/core-types' +import { UserOperation } from '@biconomy/core-types' import { ClientConfig } from './ClientConfig' import { EntryPointContractV101, SmartWalletFactoryV101, SmartWalletContractV101 -} from '@biconomy-sdk/ethers-lib' +} from '@biconomy/ethers-lib' import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp' import { resolveProperties } from 'ethers/lib/utils' -import { IPaymasterAPI } from '@biconomy-sdk/core-types' -import { getRequestId } from '@biconomy-sdk/common' +import { IPaymasterAPI } from '@biconomy/core-types' +import { getRequestId } from '@biconomy/common' /** * Base class for all Smart Wallet ERC-4337 Clients to implement. * Subclass should inherit 5 methods to support a specific wallet contract: diff --git a/packages/account-abstraction/src/BiconomyPaymasterAPI.ts b/packages/account-abstraction/src/BiconomyPaymasterAPI.ts index 89aeacf27..4601e9727 100644 --- a/packages/account-abstraction/src/BiconomyPaymasterAPI.ts +++ b/packages/account-abstraction/src/BiconomyPaymasterAPI.ts @@ -1,7 +1,7 @@ import { resolveProperties } from '@ethersproject/properties' -import { UserOperation } from '@biconomy-sdk/core-types' +import { UserOperation } from '@biconomy/core-types' import { HttpMethod, sendRequest } from './utils/httpRequests' -import { IPaymasterAPI } from '@biconomy-sdk/core-types' +import { IPaymasterAPI } from '@biconomy/core-types' /** * Verifying Paymaster API supported via Biconomy dahsboard to enable Gasless transactions diff --git a/packages/account-abstraction/src/ClientConfig.ts b/packages/account-abstraction/src/ClientConfig.ts index d1a1f5032..4096dfddb 100644 --- a/packages/account-abstraction/src/ClientConfig.ts +++ b/packages/account-abstraction/src/ClientConfig.ts @@ -1,4 +1,4 @@ -import { IPaymasterAPI } from "@biconomy-sdk/core-types" +import { IPaymasterAPI } from '@biconomy/core-types' export interface ClientConfig { dappAPIKey: string diff --git a/packages/account-abstraction/src/ERC4337EthersProvider.ts b/packages/account-abstraction/src/ERC4337EthersProvider.ts index 13bc5a38d..ff7510970 100644 --- a/packages/account-abstraction/src/ERC4337EthersProvider.ts +++ b/packages/account-abstraction/src/ERC4337EthersProvider.ts @@ -2,13 +2,13 @@ import { BaseProvider, TransactionReceipt, TransactionResponse } from '@etherspr import { BigNumber, Signer } from 'ethers' import { Network } from '@ethersproject/networks' import { hexValue, resolveProperties } from 'ethers/lib/utils' -import { getRequestId } from '@biconomy-sdk/common' +import { getRequestId } from '@biconomy/common' import { ClientConfig } from './ClientConfig' import { ERC4337EthersSigner } from './ERC4337EthersSigner' import { UserOperationEventListener } from './UserOperationEventListener' import { HttpRpcClient } from './HttpRpcClient' import { EntryPoint } from '@account-abstraction/contracts' -import { UserOperation } from '@biconomy-sdk/core-types' +import { UserOperation } from '@biconomy/core-types' import { BaseWalletAPI } from './BaseWalletAPI' import { ClientMessenger } from 'messaging-sdk' import EventEmitter from 'events' diff --git a/packages/account-abstraction/src/ERC4337EthersSigner.ts b/packages/account-abstraction/src/ERC4337EthersSigner.ts index 13a78b781..19a7fe663 100644 --- a/packages/account-abstraction/src/ERC4337EthersSigner.ts +++ b/packages/account-abstraction/src/ERC4337EthersSigner.ts @@ -6,7 +6,7 @@ import { Bytes } from 'ethers' import { ERC4337EthersProvider } from './ERC4337EthersProvider' import { ClientConfig } from './ClientConfig' import { HttpRpcClient } from './HttpRpcClient' -import { UserOperation } from '@biconomy-sdk/core-types' +import { UserOperation } from '@biconomy/core-types' import { BaseWalletAPI } from './BaseWalletAPI' import EventEmitter from 'events' import { ClientMessenger } from 'messaging-sdk' diff --git a/packages/account-abstraction/src/HttpRpcClient.ts b/packages/account-abstraction/src/HttpRpcClient.ts index b94971c13..dd075dcfa 100644 --- a/packages/account-abstraction/src/HttpRpcClient.ts +++ b/packages/account-abstraction/src/HttpRpcClient.ts @@ -2,7 +2,7 @@ import { JsonRpcProvider } from '@ethersproject/providers' import { ethers } from 'ethers' import { hexValue, resolveProperties } from 'ethers/lib/utils' -import { UserOperation } from '@biconomy-sdk/core-types' +import { UserOperation } from '@biconomy/core-types' import { HttpMethod, sendRequest } from './utils/httpRequests' export class HttpRpcClient { private readonly userOpJsonRpcProvider: JsonRpcProvider diff --git a/packages/account-abstraction/src/Provider.ts b/packages/account-abstraction/src/Provider.ts index 966e0bc09..b4616221a 100644 --- a/packages/account-abstraction/src/Provider.ts +++ b/packages/account-abstraction/src/Provider.ts @@ -2,7 +2,7 @@ import { JsonRpcProvider } from '@ethersproject/providers' // import { EntryPoint__factory } from '@account-abstraction/contracts' -import { EntryPointFactoryContractV101 } from '@biconomy-sdk/ethers-lib' +import { EntryPointFactoryContractV101 } from '@biconomy/ethers-lib' import { ClientConfig } from './ClientConfig' import { SmartAccountAPI } from './SmartAccountAPI' diff --git a/packages/account-abstraction/src/SmartAccountAPI.ts b/packages/account-abstraction/src/SmartAccountAPI.ts index 372ea3db7..1161d0d77 100644 --- a/packages/account-abstraction/src/SmartAccountAPI.ts +++ b/packages/account-abstraction/src/SmartAccountAPI.ts @@ -1,16 +1,16 @@ import { BigNumber, BigNumberish } from 'ethers' -import { EntryPointContractV101 } from '@biconomy-sdk/ethers-lib' +import { EntryPointContractV101 } from '@biconomy/ethers-lib' import { ClientConfig } from './ClientConfig' import { arrayify, hexConcat } from 'ethers/lib/utils' import { Signer } from '@ethersproject/abstract-signer' import { TransactionDetailsForUserOp } from './TransactionDetailsForUserOp' -import { UserOperation } from '@biconomy-sdk/core-types' +import { UserOperation } from '@biconomy/core-types' import { BaseWalletAPI } from './BaseWalletAPI' import { Provider } from '@ethersproject/providers' import { WalletFactoryAPI } from './WalletFactoryAPI' import { BiconomyPaymasterAPI } from './BiconomyPaymasterAPI' -import { ZERO_ADDRESS } from '@biconomy-sdk/core-types' +import { ZERO_ADDRESS } from '@biconomy/core-types' /** * An implementation of the BaseWalletAPI using the SmartWalletContract contract. diff --git a/packages/account-abstraction/test/0-deterministicDeployer.test.ts b/packages/account-abstraction/test/0-deterministicDeployer.test.ts index 53f15d39b..5885da358 100644 --- a/packages/account-abstraction/test/0-deterministicDeployer.test.ts +++ b/packages/account-abstraction/test/0-deterministicDeployer.test.ts @@ -1,5 +1,5 @@ import { expect } from 'chai' -import { SmartWalletFactoryFactoryContractV101 } from '@biconomy-sdk/ethers-lib' +import { SmartWalletFactoryFactoryContractV101 } from '@biconomy/ethers-lib' import hardhat from 'hardhat' import { hexValue } from 'ethers/lib/utils' import { DeterministicDeployer } from '../src/DeterministicDeployer' diff --git a/packages/account-abstraction/test/1-SmartAccountAPI.test.ts b/packages/account-abstraction/test/1-SmartAccountAPI.test.ts index ca4ad5084..865a19f5d 100644 --- a/packages/account-abstraction/test/1-SmartAccountAPI.test.ts +++ b/packages/account-abstraction/test/1-SmartAccountAPI.test.ts @@ -9,9 +9,9 @@ import { parseEther } from 'ethers/lib/utils' import { expect } from 'chai' import { anyValue } from '@nomicfoundation/hardhat-chai-matchers/withArgs' import { ethers } from 'hardhat' -import { UserOperation } from '@biconomy-sdk/core-types' +import { UserOperation } from '@biconomy/core-types' import { SmartAccountAPI } from '../src' -import { SampleRecipient, SampleRecipient__factory } from '@biconomy-sdk/common/dist/src/types' +import { SampleRecipient, SampleRecipient__factory } from '@biconomy/common/dist/src/types' import { SmartWalletFactoryFactoryContractV101, @@ -20,7 +20,7 @@ import { SmartWalletFactoryContractV101, EntryPointContractV101, SmartWalletContractV101 -} from '@biconomy-sdk/ethers-lib' +} from '@biconomy/ethers-lib' import { DeterministicDeployer } from '../src/DeterministicDeployer' const provider = ethers.provider diff --git a/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts b/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts index 2a5521012..8b0c2bb0c 100644 --- a/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts +++ b/packages/account-abstraction/test/2-ERC4337EthersSigner.test.ts @@ -1,4 +1,4 @@ -import { SampleRecipient, SampleRecipient__factory } from '@biconomy-sdk/common/dist/src/types' +import { SampleRecipient, SampleRecipient__factory } from '@biconomy/common/dist/src/types' import { ethers } from 'hardhat' import { ClientConfig, ERC4337EthersProvider, newProvider } from '../src' import { EntryPoint, EntryPoint__factory } from '@account-abstraction/contracts' @@ -14,7 +14,7 @@ import { SmartWalletFactoryContractV101, EntryPointContractV101, SmartWalletContractV101 -} from '@biconomy-sdk/ethers-lib' +} from '@biconomy/ethers-lib' const provider = ethers.provider const signer = provider.getSigner() diff --git a/packages/common/README.md b/packages/common/README.md index ad4c2e841..acccc3e6e 100644 --- a/packages/common/README.md +++ b/packages/common/README.md @@ -1,4 +1,4 @@ -# `@biconomy-sdk/common` +# `@biconomy/common` > TODO: ERC4337 common utils diff --git a/packages/common/package.json b/packages/common/package.json index 3493b8efd..cfe64fea8 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,5 +1,5 @@ { - "name": "@biconomy-sdk/common", + "name": "@biconomy/common", "version": "1.0.27", "description": "common utils to be used for aa transactions", "keywords": [ @@ -37,7 +37,7 @@ "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" }, "dependencies": { - "@biconomy-sdk/core-types": "*", + "@biconomy/core-types": "*", "@account-abstraction/contracts": "^0.2.0", "@ethersproject/abi": "^5.7.0", "@ethersproject/bytes": "^5.7.0", diff --git a/packages/common/src/ERC4337Utils.ts b/packages/common/src/ERC4337Utils.ts index 9b6f6688b..83c641b0d 100644 --- a/packages/common/src/ERC4337Utils.ts +++ b/packages/common/src/ERC4337Utils.ts @@ -1,5 +1,5 @@ import { arrayify, defaultAbiCoder, keccak256 } from 'ethers/lib/utils' -import { UserOperation } from '@biconomy-sdk/core-types' +import { UserOperation } from '@biconomy/core-types' import { abi as entryPointAbi } from '@account-abstraction/contracts/artifacts/IEntryPoint.json' // UserOperation is the first parameter of simulateValidation diff --git a/packages/core-types/package.json b/packages/core-types/package.json index e4f5f305e..676aceb23 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,5 +1,5 @@ { - "name": "@biconomy-sdk/core-types", + "name": "@biconomy/core-types", "version": "1.0.27", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 9bf8ae465..a64fe43f5 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,5 +1,5 @@ { - "name": "@biconomy-sdk/ethers-lib", + "name": "@biconomy/ethers-lib", "version": "1.0.27", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "./dist/src/index.js", @@ -43,7 +43,7 @@ "access": "public" }, "dependencies": { - "@biconomy-sdk/core-types": "*", + "@biconomy/core-types": "*", "@nomiclabs/hardhat-ethers": "^2.1.0", "@gnosis.pm/safe-core-sdk-utils": "^1.1.0", "@openzeppelin/contracts": "^4.6.0", diff --git a/packages/ethers-lib/src/EvmNetworkManager.ts b/packages/ethers-lib/src/EvmNetworkManager.ts index e4a68431d..c5e0daa0f 100644 --- a/packages/ethers-lib/src/EvmNetworkManager.ts +++ b/packages/ethers-lib/src/EvmNetworkManager.ts @@ -8,7 +8,7 @@ import { IEvmNetworkManagerTransaction, SmartAccountVersion, SmartWalletContract -} from '@biconomy-sdk/core-types' +} from '@biconomy/core-types' import { validateEip3770Address } from '@gnosis.pm/safe-core-sdk-utils' import { ethers } from 'ethers' import { diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts index fc1ed5a40..8e2814876 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.0/EntryPointEthersContract.ts @@ -1,4 +1,4 @@ -import { EntryPointContract, UserOperation, ITransactionResult } from '@biconomy-sdk/core-types' +import { EntryPointContract, UserOperation, ITransactionResult } from '@biconomy/core-types' import { EntryPointContractV100 as EntryPointContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/EntryPointContractV100' import { toTxResult } from '../../../utils' import { Contract } from '@ethersproject/contracts' diff --git a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts index b3f30e0fd..dd770be26 100644 --- a/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts +++ b/packages/ethers-lib/src/contracts/EntryPointContract/v1.0.1/EntryPointEthersContract.ts @@ -1,4 +1,4 @@ -import { EntryPointContract, UserOperation, ITransactionResult } from '@biconomy-sdk/core-types' +import { EntryPointContract, UserOperation, ITransactionResult } from '@biconomy/core-types' import { EntryPointContractV101 as EntryPointContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.1/EntryPointContractV101' import { toTxResult } from '../../../utils' import { Contract } from '@ethersproject/contracts' diff --git a/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts index 788798f4e..669187ba7 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/v1.0.0/MultiSendEthersContract.ts @@ -1,4 +1,4 @@ -import { MultiSendContract } from '@biconomy-sdk/core-types' +import { MultiSendContract } from '@biconomy/core-types' import { MultiSendContractV100 as MultiSend_TypeChain, MultiSendContractV100Interface diff --git a/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts index e685638b8..7d1435814 100644 --- a/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSend/v1.0.1/MultiSendEthersContract.ts @@ -1,4 +1,4 @@ -import { MultiSendContract } from '@biconomy-sdk/core-types' +import { MultiSendContract } from '@biconomy/core-types' import { MultiSendContractV101 as MultiSend_TypeChain, MultiSendContractV101Interface diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts index 2a6099b76..c74f64cd1 100644 --- a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.0/MultiSendCallOnlyEthersContract.ts @@ -1,4 +1,4 @@ -import { MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' +import { MultiSendCallOnlyContract } from '@biconomy/core-types' import { MultiSendCallOnlyContractV100 as MultiSendCallOnly_TypeChain, MultiSendCallOnlyContractV100Interface diff --git a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts index e92ac7493..03de53d0b 100644 --- a/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts +++ b/packages/ethers-lib/src/contracts/MultiSendCallOnly/v1.0.1/MultiSendCallOnlyEthersContract.ts @@ -1,4 +1,4 @@ -import { MultiSendCallOnlyContract } from '@biconomy-sdk/core-types' +import { MultiSendCallOnlyContract } from '@biconomy/core-types' import { MultiSendCallOnlyContractV101 as MultiSendCallOnly_TypeChain, MultiSendCallOnlyContractV101Interface diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts index 47ee87678..d38d0606d 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.0/SmartWalletContractEthers.ts @@ -6,7 +6,7 @@ import { ExecTransaction, IFeeRefundV1_0_0, ITransactionResult -} from '@biconomy-sdk/core-types' +} from '@biconomy/core-types' import { toTxResult } from '../../../utils' import { SmartWalletContractV100 as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContractV100' import { SmartWalletContractV100Interface } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletContractV100' diff --git a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts index 920da93d4..a4aa0526b 100644 --- a/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts +++ b/packages/ethers-lib/src/contracts/SmartWallet/v1.0.1/SmartWalletContractEthers.ts @@ -6,7 +6,7 @@ import { ExecTransaction, IFeeRefundV1_0_1, ITransactionResult -} from '@biconomy-sdk/core-types' +} from '@biconomy/core-types' import { toTxResult } from '../../../utils' import { SmartWalletContractV101 as SmartWalletContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletContractV101' import { SmartWalletContractV101Interface } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletContractV101' diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts index d412fad88..eee87dc09 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.0/SmartWalletProxyFactoryEthersContract.ts @@ -1,4 +1,4 @@ -import { SmartWalletFactoryContract, ITransactionResult } from '@biconomy-sdk/core-types' +import { SmartWalletFactoryContract, ITransactionResult } from '@biconomy/core-types' import { toTxResult } from '../../../utils' import { SmartWalletFactoryContractV100 as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.0/SmartWalletFactoryContractV100' import { Interface } from '@ethersproject/abi' diff --git a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts index f4ce8f5f0..e3e1ccf18 100644 --- a/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts +++ b/packages/ethers-lib/src/contracts/SmartWalletFactory/v1.0.1/SmartWalletProxyFactoryEthersContract.ts @@ -1,4 +1,4 @@ -import { SmartWalletFactoryContract, ITransactionResult } from '@biconomy-sdk/core-types' +import { SmartWalletFactoryContract, ITransactionResult } from '@biconomy/core-types' import { toTxResult } from '../../../utils' import { SmartWalletFactoryContractV101 as SmartWalletFactoryContract_TypeChain } from '../../../../typechain/src/ethers-v5/v1.0.1/SmartWalletFactoryContractV101' import { Interface } from '@ethersproject/abi' diff --git a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts index ae8be2c3e..05de8e9fa 100644 --- a/packages/ethers-lib/src/contracts/contractInstancesEthers.ts +++ b/packages/ethers-lib/src/contracts/contractInstancesEthers.ts @@ -29,7 +29,7 @@ import EntryPointEthersContract_v1_0_0 from './EntryPointContract/v1.0.0/EntryPo import EntryPointEthersContract_v1_0_1 from './EntryPointContract/v1.0.1/EntryPointEthersContract' import { JsonRpcProvider } from '@ethersproject/providers' -import { SmartAccountVersion } from '@biconomy-sdk/core-types' +import { SmartAccountVersion } from '@biconomy/core-types' export function getSmartWalletContractInstance( smartAccountVersion: SmartAccountVersion, diff --git a/packages/ethers-lib/src/types.ts b/packages/ethers-lib/src/types.ts index 6e77f252d..a616431f0 100644 --- a/packages/ethers-lib/src/types.ts +++ b/packages/ethers-lib/src/types.ts @@ -1,5 +1,5 @@ import { ContractTransaction } from '@ethersproject/contracts' -import { IBaseTransactionResult } from '@biconomy-sdk/core-types' +import { IBaseTransactionResult } from '@biconomy/core-types' export interface IEthersTransactionOptions { from?: string diff --git a/packages/gas-estimator/README.md b/packages/gas-estimator/README.md index 9f7c7b547..089badc51 100644 --- a/packages/gas-estimator/README.md +++ b/packages/gas-estimator/README.md @@ -1,11 +1,11 @@ -# `@biconomy-sdk/gas-estimator` +# `@biconomy/gas-estimator` > WIP: Generic gas estimator package to estimate gas on your smart contracts in many generic ways. ## Usage ``` -import { Estimator } from '@biconomy-sdk/gas-estimator'; +import { Estimator } from '@biconomy/gas-estimator'; // TODO: DEMONSTRATE API ``` diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index d744ace0e..8ba209dcb 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -1,5 +1,5 @@ { - "name": "@biconomy-sdk/gas-estimator", + "name": "@biconomy/gas-estimator", "version": "1.0.27", "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", "keywords": [ diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 21ba37df5..8e037ede9 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,5 +1,5 @@ { - "name": "@biconomy-sdk/node-client", + "name": "@biconomy/node-client", "version": "1.0.27", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", @@ -55,7 +55,7 @@ "ts-generator": "^0.1.1", "ts-node": "^10.7.0", "typescript": "^4.6.3", - "@biconomy-sdk/core-types": "*" + "@biconomy/core-types": "*" }, "lint-staged": { "src/**/!(*test).ts": [ @@ -72,7 +72,7 @@ "access": "public" }, "dependencies": { - "@biconomy-sdk/core-types": "*", + "@biconomy/core-types": "*", "@nomiclabs/hardhat-ethers": "^2.1.0", "@ethersproject/abstract-signer": "^5.6.0", "@gnosis.pm/safe-core-sdk": "^2.1.0", diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index 550691b8f..7b26b64a8 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -1,4 +1,4 @@ -// import { FeeRefund, FeeRefundData, MetaTransactionData } from '@biconomy-sdk/core-types' +// import { FeeRefund, FeeRefundData, MetaTransactionData } from '@biconomy/core-types' import { EstimateExternalGasDto, EstimateRequiredTxGasDto, diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index 614a7dced..3b7b0216e 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -4,7 +4,7 @@ import { MetaTransactionData, IFeeRefundV1_0_0, IFeeRefundV1_0_1 -} from '@biconomy-sdk/core-types' +} from '@biconomy/core-types' export type SmartAccountInfoResponse = { readonly name: string readonly version: string diff --git a/packages/node-client/src/utils/HttpRequests.ts b/packages/node-client/src/utils/HttpRequests.ts index 57e77c71c..11b2cf209 100644 --- a/packages/node-client/src/utils/HttpRequests.ts +++ b/packages/node-client/src/utils/HttpRequests.ts @@ -51,4 +51,4 @@ export async function sendRequest({ url, method, body }: HttpRequest): Promis throw new Error(jsonResponse.delegate) } throw new Error(response.statusText) -} \ No newline at end of file +} diff --git a/packages/node-client/tests/0-nodeclient.spec.ts b/packages/node-client/tests/0-nodeclient.spec.ts index 36b32a875..364a91a1a 100644 --- a/packages/node-client/tests/0-nodeclient.spec.ts +++ b/packages/node-client/tests/0-nodeclient.spec.ts @@ -1,5 +1,5 @@ -import SmartAccount from '@biconomy-sdk/smart-account' -import { LocalRelayer } from '@biconomy-sdk/relayer' +import SmartAccount from '@biconomy/smart-account' +import { LocalRelayer } from '@biconomy/relayer' import { Contract, ethers, Signer as AbstractSigner } from 'ethers' import { JsonRpcProvider, diff --git a/packages/relayer/package.json b/packages/relayer/package.json index e26124140..dcd2d4808 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,5 +1,5 @@ { - "name": "@biconomy-sdk/relayer", + "name": "@biconomy/relayer", "version": "1.0.27", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ @@ -25,7 +25,7 @@ "lint": "tslint -p tsconfig.json" }, "dependencies": { - "@biconomy-sdk/core-types": "*", + "@biconomy/core-types": "*", "@ethersproject/providers": "^5.6.8", "ethers": "^5.6.9", "messaging-sdk": "^0.0.3", diff --git a/packages/relayer/src/LocalRelayer.ts b/packages/relayer/src/LocalRelayer.ts index 792633d38..5d9ce9b47 100644 --- a/packages/relayer/src/LocalRelayer.ts +++ b/packages/relayer/src/LocalRelayer.ts @@ -7,7 +7,7 @@ import { FeeOptionsResponse, RelayTransaction, RelayResponse -} from '@biconomy-sdk/core-types' +} from '@biconomy/core-types' import { MetaTransaction, encodeMultiSend } from './utils/MultiSend' // You can configure your own signer with gas held to send out test transactions or some sponsored transactions by plugging it into SmartAccount package diff --git a/packages/relayer/src/RestRelayer.ts b/packages/relayer/src/RestRelayer.ts index 8d36a8bbc..eed202a98 100644 --- a/packages/relayer/src/RestRelayer.ts +++ b/packages/relayer/src/RestRelayer.ts @@ -10,7 +10,7 @@ import { RelayResponse, GasLimit, ChainId -} from '@biconomy-sdk/core-types' +} from '@biconomy/core-types' import { MetaTransaction, encodeMultiSend } from './utils/MultiSend' import { HttpMethod, sendRequest } from './utils/HttpRequests' import { ClientMessenger } from 'messaging-sdk' diff --git a/packages/relayer/src/index.ts b/packages/relayer/src/index.ts index a074a907d..3d5bed2e3 100644 --- a/packages/relayer/src/index.ts +++ b/packages/relayer/src/index.ts @@ -1,5 +1,5 @@ -import { FeeOptionsResponse } from '@biconomy-sdk/core-types' -import { RelayTransaction, RelayResponse } from '@biconomy-sdk/core-types' +import { FeeOptionsResponse } from '@biconomy/core-types' +import { RelayTransaction, RelayResponse } from '@biconomy/core-types' import { EventEmitter } from 'isomorphic-ws' export interface IRelayer { // relayer will submit the transaction(s) to the network and return the transaction response. diff --git a/packages/relayer/src/utils/HttpRequests.ts b/packages/relayer/src/utils/HttpRequests.ts index ddd149738..132da24fa 100644 --- a/packages/relayer/src/utils/HttpRequests.ts +++ b/packages/relayer/src/utils/HttpRequests.ts @@ -52,4 +52,4 @@ export async function sendRequest({ url, method, body, headers = {} }: HttpRe throw new Error(jsonResponse.delegate) } throw new Error(response.statusText) -} \ No newline at end of file +} diff --git a/packages/relayer/src/utils/MultiSend.ts b/packages/relayer/src/utils/MultiSend.ts index a0dd9a614..b3e920776 100644 --- a/packages/relayer/src/utils/MultiSend.ts +++ b/packages/relayer/src/utils/MultiSend.ts @@ -86,4 +86,4 @@ export const buildMultiSendSmartAccountTx = ( overrides?: Partial ): WalletTransaction => { return buildContractCall(multiSend, 'multiSend', [encodeMultiSend(txs)], nonce, true, overrides) -} \ No newline at end of file +} diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 6ac5edb59..7cc436a40 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,5 +1,5 @@ { - "name": "@biconomy-sdk/smart-account", + "name": "@biconomy/smart-account", "version": "1.0.27", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", @@ -52,12 +52,12 @@ }, "dependencies": { "@0xsequence/network": "^0.41.0", - "@biconomy-sdk/account-abstraction": "*", - "@biconomy-sdk/core-types": "*", - "@biconomy-sdk/ethers-lib": "*", - "@biconomy-sdk/node-client": "*", - "@biconomy-sdk/relayer": "*", - "@biconomy-sdk/transactions": "*", + "@biconomy/account-abstraction": "*", + "@biconomy/core-types": "*", + "@biconomy/ethers-lib": "*", + "@biconomy/node-client": "*", + "@biconomy/relayer": "*", + "@biconomy/transactions": "*", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.6.8", diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index d45e09da7..593c3f0dc 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -28,7 +28,7 @@ import { SmartAccountConfig, IMetaTransaction, NetworkConfig -} from '@biconomy-sdk/core-types' +} from '@biconomy/core-types' import { TypedDataSigner } from '@ethersproject/abstract-signer' import NodeClient, { ChainConfig, @@ -38,21 +38,21 @@ import NodeClient, { BalancesResponse, BalancesDto, UsdBalanceResponse -} from '@biconomy-sdk/node-client' +} from '@biconomy/node-client' import { Web3Provider } from '@ethersproject/providers' -import { IRelayer, RestRelayer } from '@biconomy-sdk/relayer' +import { IRelayer, RestRelayer } from '@biconomy/relayer' import * as _ from 'lodash' import TransactionManager, { ContractUtils, smartAccountSignMessage, smartAccountSignTypedData -} from '@biconomy-sdk/transactions' +} from '@biconomy/transactions' import EventEmitter from 'events' import { TransactionResponse } from '@ethersproject/providers' import { SmartAccountSigner } from './signers/SmartAccountSigner' // AA -import { newProvider, ERC4337EthersProvider } from '@biconomy-sdk/account-abstraction' +import { newProvider, ERC4337EthersProvider } from '@biconomy/account-abstraction' import { ethers, Signer } from 'ethers' diff --git a/packages/smart-account/src/providers/SmartAccountProvider.ts b/packages/smart-account/src/providers/SmartAccountProvider.ts index bfae40b39..b10aa56e5 100644 --- a/packages/smart-account/src/providers/SmartAccountProvider.ts +++ b/packages/smart-account/src/providers/SmartAccountProvider.ts @@ -2,7 +2,7 @@ import { Web3Provider, BaseProvider } from '@ethersproject/providers' import { SmartAccountSigner } from '../signers/SmartAccountSigner' import { Signer } from 'ethers' import { TransactionResponse } from '@ethersproject/providers' -import { ChainId, IWalletTransaction } from '@biconomy-sdk/core-types' +import { ChainId, IWalletTransaction } from '@biconomy/core-types' // Note: WIP. Not used by SmartAccount at the moment diff --git a/packages/smart-account/src/signers/Signer.ts b/packages/smart-account/src/signers/Signer.ts index 2174273ed..44797a439 100644 --- a/packages/smart-account/src/signers/Signer.ts +++ b/packages/smart-account/src/signers/Signer.ts @@ -4,12 +4,12 @@ import { Signer as AbstractSigner } from '@ethersproject/abstract-signer' -// ChainId , SmartAccountContext, SmartAccountConfig, SmartAccountState from @biconomy-sdk/core-types -import { ChainId, SignTransactionDto } from '@biconomy-sdk/core-types' +// ChainId , SmartAccountContext, SmartAccountConfig, SmartAccountState from @biconomy/core-types +import { ChainId, SignTransactionDto } from '@biconomy/core-types' import { JsonRpcProvider, TransactionResponse } from '@ethersproject/providers' // Might as well be RpcRelayer -import { IRelayer } from '@biconomy-sdk/relayer' +import { IRelayer } from '@biconomy/relayer' import { BytesLike } from '@ethersproject/bytes' import { Deferrable } from 'ethers/lib/utils' import { TransactionRequest } from '@ethersproject/providers' diff --git a/packages/smart-account/src/signers/SmartAccountSigner.ts b/packages/smart-account/src/signers/SmartAccountSigner.ts index 0a28b5377..941d93ab9 100644 --- a/packages/smart-account/src/signers/SmartAccountSigner.ts +++ b/packages/smart-account/src/signers/SmartAccountSigner.ts @@ -7,10 +7,10 @@ import { TypedDataSigner, Signer as EthersSigner } from '@ethersproject/abstract-signer' -import { ChainId } from '@biconomy-sdk/core-types' +import { ChainId } from '@biconomy/core-types' // Might as well be RpcRelayer -// import { IRelayer, RestRelayer } from '@biconomy-sdk/relayer' +// import { IRelayer, RestRelayer } from '@biconomy/relayer' import { Deferrable } from 'ethers/lib/utils' import { TransactionRequest, TransactionResponse } from '@ethersproject/providers' diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts index 42605e63b..932d4b2d1 100644 --- a/packages/smart-account/src/types.ts +++ b/packages/smart-account/src/types.ts @@ -1,5 +1,5 @@ import { BytesLike, Wallet } from 'ethers' -import { ChainNames } from '@biconomy-sdk/core-types' +import { ChainNames } from '@biconomy/core-types' export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' diff --git a/packages/smart-account/tests/0-smartaccount.spec.ts b/packages/smart-account/tests/0-smartaccount.spec.ts index e9113d394..2297752de 100644 --- a/packages/smart-account/tests/0-smartaccount.spec.ts +++ b/packages/smart-account/tests/0-smartaccount.spec.ts @@ -1,5 +1,5 @@ import SmartAccount from '../src/SmartAccount' -import { LocalRelayer } from '@biconomy-sdk/relayer' +import { LocalRelayer } from '@biconomy/relayer' import { Contract, ethers, Signer as AbstractSigner } from 'ethers' import { JsonRpcProvider, @@ -17,7 +17,7 @@ const { expect } = chai.use(chaiAsPromised) import hardhat from 'hardhat' import { deployWalletContracts } from './utils/deploy' import { BytesLike, Interface } from 'ethers/lib/utils' -import { IWalletTransaction, Transaction } from '@biconomy-sdk/core-types' +import { IWalletTransaction, Transaction } from '@biconomy/core-types' import { textSpanContainsPosition } from 'typescript' type EthereumInstance = { diff --git a/packages/smart-account/tests/utils/deploy.ts b/packages/smart-account/tests/utils/deploy.ts index 575a7ec59..da75927a9 100644 --- a/packages/smart-account/tests/utils/deploy.ts +++ b/packages/smart-account/tests/utils/deploy.ts @@ -1,6 +1,6 @@ import { Contract, ethers } from 'ethers' -// import { SmartWalletContract } from '@biconomy-sdk/core-types' +// import { SmartWalletContract } from '@biconomy/core-types' const SmartWalletArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletContract_v1_0_1.json') const WalletFactoryArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletFactoryContract_v1_0_1.json') const MultiSendArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendContract_v1_0_1.json') diff --git a/packages/transactions/package.json b/packages/transactions/package.json index ee65816ec..4aaf67f71 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,5 +1,5 @@ { - "name": "@biconomy-sdk/transactions", + "name": "@biconomy/transactions", "version": "1.0.27", "description": "utils for sending all transaction legos", "main": "./dist/src/index.js", @@ -34,10 +34,10 @@ "access": "public" }, "dependencies": { - "@biconomy-sdk/core-types": "*", - "@biconomy-sdk/ethers-lib": "*", - "@biconomy-sdk/node-client": "*", - "@biconomy-sdk/relayer": "*", + "@biconomy/core-types": "*", + "@biconomy/ethers-lib": "*", + "@biconomy/node-client": "*", + "@biconomy/relayer": "*", "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/constants": "^5.6.1", "ethereumjs-util": "^7.1.5", diff --git a/packages/transactions/src/ContractUtils.ts b/packages/transactions/src/ContractUtils.ts index 517e38946..3c7d1cc9e 100644 --- a/packages/transactions/src/ContractUtils.ts +++ b/packages/transactions/src/ContractUtils.ts @@ -6,8 +6,8 @@ import { MultiSendCallOnlyContract, SmartAccountContext, SmartAccountState -} from '@biconomy-sdk/core-types' -import { ChainConfig } from '@biconomy-sdk/node-client' +} from '@biconomy/core-types' +import { ChainConfig } from '@biconomy/node-client' import { getSmartWalletFactoryContract, getMultiSendContract, @@ -16,8 +16,8 @@ import { findContractAddressesByVersion } from './utils/FetchContractsInfo' import { ethers, Signer } from 'ethers' -import EvmNetworkManager from '@biconomy-sdk/ethers-lib' -import { SmartAccountVersion } from '@biconomy-sdk/core-types' +import EvmNetworkManager from '@biconomy/ethers-lib' +import { SmartAccountVersion } from '@biconomy/core-types' class ContractUtils { ethAdapter!: { [chainId: number]: EvmNetworkManager } diff --git a/packages/transactions/src/Estimator.ts b/packages/transactions/src/Estimator.ts index 36439d8fa..0e5cb25be 100644 --- a/packages/transactions/src/Estimator.ts +++ b/packages/transactions/src/Estimator.ts @@ -1,6 +1,6 @@ import { ethers } from 'ethers' import { GasEstimator } from './assets' -import NodeClient, { EstimateUndeployedContractGasDto } from '@biconomy-sdk/node-client' +import NodeClient, { EstimateUndeployedContractGasDto } from '@biconomy/node-client' import ContractUtils from './ContractUtils' import { EstimateSmartAccountDeploymentDto, @@ -9,7 +9,7 @@ import { ExecTransaction, IFeeRefundV1_0_1, SmartAccountState -} from '@biconomy-sdk/core-types' +} from '@biconomy/core-types' import { PrepareRefundTransactionsDto, PrepareRefundTransactionDto } from './Types' export class Estimator { @@ -180,4 +180,4 @@ export class Estimator { console.log('estimateWalletDeployment ', estimateWalletDeployment) return estimateWalletDeployment } -} \ No newline at end of file +} diff --git a/packages/transactions/src/Execution.ts b/packages/transactions/src/Execution.ts index 92ef7b33f..836f8cb8c 100644 --- a/packages/transactions/src/Execution.ts +++ b/packages/transactions/src/Execution.ts @@ -7,7 +7,7 @@ import { IFeeRefundV1_0_1, IWalletTransaction, SmartAccountSignature -} from '@biconomy-sdk/core-types' +} from '@biconomy/core-types' import { TypedDataSigner } from '@ethersproject/abstract-signer' import { AddressZero } from '@ethersproject/constants' diff --git a/packages/transactions/src/MultiSend.ts b/packages/transactions/src/MultiSend.ts index 285a00abf..4f97ba430 100644 --- a/packages/transactions/src/MultiSend.ts +++ b/packages/transactions/src/MultiSend.ts @@ -1,6 +1,6 @@ import { Contract, utils } from 'ethers' import { buildContractCall } from './Execution' -import { IMetaTransaction, IWalletTransaction } from '@biconomy-sdk/core-types' +import { IMetaTransaction, IWalletTransaction } from '@biconomy/core-types' const encodeMetaTransaction = (tx: IMetaTransaction): string => { const data = utils.arrayify(tx.data) diff --git a/packages/transactions/src/TransactionManager.ts b/packages/transactions/src/TransactionManager.ts index 49bc50d21..9c2d9bf22 100644 --- a/packages/transactions/src/TransactionManager.ts +++ b/packages/transactions/src/TransactionManager.ts @@ -14,7 +14,7 @@ import { IFeeRefundHandlePayment, EstimateSmartAccountDeploymentDto, SmartAccountState -} from '@biconomy-sdk/core-types' +} from '@biconomy/core-types' import { PrepareRefundTransactionsDto, PrepareRefundTransactionDto, @@ -23,15 +23,15 @@ import { RefundTransactionBatchDto, RefundTransactionDto } from './Types' -import EvmNetworkManager from '@biconomy-sdk/ethers-lib' +import EvmNetworkManager from '@biconomy/ethers-lib' import { Estimator } from './Estimator' import NodeClient, { EstimateRequiredTxGasDto, EstimateHandlePaymentTxGasDto -} from '@biconomy-sdk/node-client' +} from '@biconomy/node-client' -import { IRelayer } from '@biconomy-sdk/relayer' +import { IRelayer } from '@biconomy/relayer' import ContractUtils from './ContractUtils' import { Utils } from './Utils' class TransactionManager { diff --git a/packages/transactions/src/Types.ts b/packages/transactions/src/Types.ts index 527c9b222..54e8ffc58 100644 --- a/packages/transactions/src/Types.ts +++ b/packages/transactions/src/Types.ts @@ -1,4 +1,4 @@ -import { Transaction, ChainId, FeeQuote } from '@biconomy-sdk/core-types' +import { Transaction, ChainId, FeeQuote } from '@biconomy/core-types' export type PrepareRefundTransactionDto = { version: string diff --git a/packages/transactions/src/Utils.ts b/packages/transactions/src/Utils.ts index b8b8f1674..66dc1e619 100644 --- a/packages/transactions/src/Utils.ts +++ b/packages/transactions/src/Utils.ts @@ -1,6 +1,6 @@ import { BigNumberish, Contract, utils } from 'ethers' -import { IMetaTransaction, IWalletTransaction, Transaction } from '@biconomy-sdk/core-types' +import { IMetaTransaction, IWalletTransaction, Transaction } from '@biconomy/core-types' import { AddressZero } from '@ethersproject/constants' @@ -120,4 +120,4 @@ export class Utils { ) ) } -} \ No newline at end of file +} diff --git a/packages/transactions/src/utils/FetchContractsInfo.ts b/packages/transactions/src/utils/FetchContractsInfo.ts index 1ca0bfa79..95122a61a 100644 --- a/packages/transactions/src/utils/FetchContractsInfo.ts +++ b/packages/transactions/src/utils/FetchContractsInfo.ts @@ -1,14 +1,14 @@ -import { ChainConfig } from '@biconomy-sdk/node-client' -import { ChainId } from '@biconomy-sdk/core-types' +import { ChainConfig } from '@biconomy/node-client' +import { ChainId } from '@biconomy/core-types' import { SmartWalletContract, SmartWalletFactoryContract, MultiSendContract, MultiSendCallOnlyContract, SmartAccountVersion -} from '@biconomy-sdk/core-types' +} from '@biconomy/core-types' -import EthersAdapter from '@biconomy-sdk/ethers-lib' +import EthersAdapter from '@biconomy/ethers-lib' export function getSmartWalletFactoryContract( smartAccountVersion: SmartAccountVersion, diff --git a/packages/web3-auth/README.md b/packages/web3-auth/README.md index 4780cf4c6..0d245b041 100644 --- a/packages/web3-auth/README.md +++ b/packages/web3-auth/README.md @@ -5,7 +5,7 @@ ## Usage ```ts -import SocialLogin from "@biconomy-sdk/web3-auth"; +import SocialLogin from "@biconomy/web3-auth"; // init wallet const socialLoginSDK = new SocialLogin(); await socialLoginSDK.init('0x5'); diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index b3478c76f..e51875404 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -1,5 +1,5 @@ { - "name": "@biconomy-sdk/web3-auth", + "name": "@biconomy/web3-auth", "version": "1.0.27", "description": "web3-auth for biconomy sdk", "main": "./dist/src/index.js", From 9f55633fab2e5834cafcfdfd657fd87ea399fbd8 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 11 Nov 2022 19:32:31 +0400 Subject: [PATCH 0289/1247] update version name --- lerna.json | 2 +- packages/account-abstraction/package.json | 2 +- packages/common/package.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/gas-estimator/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- packages/web3-auth/package.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lerna.json b/lerna.json index 3cd346f54..f40010fcc 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], "npmClient": "yarn", - "version": "1.0.27", + "version": "0.0.1-beta", "useWorkspaces": true } \ No newline at end of file diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index 28a9c375a..ba6c3d43b 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account-abstraction", - "version": "1.0.27", + "version": "0.0.1-beta", "description": "Account abstraction APIs to prepare user operations ", "keywords": [ "account-abstraction", diff --git a/packages/common/package.json b/packages/common/package.json index cfe64fea8..8b09bc9f0 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "1.0.27", + "version": "0.0.1-beta", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 676aceb23..77b6bd72e 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/core-types", - "version": "1.0.27", + "version": "0.0.1-beta", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index a64fe43f5..6700b6921 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/ethers-lib", - "version": "1.0.27", + "version": "0.0.1-beta", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index 8ba209dcb..86444b723 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/gas-estimator", - "version": "1.0.27", + "version": "0.0.1-beta", "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", "keywords": [ "gas-estimation", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 8e037ede9..a487c5982 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/node-client", - "version": "1.0.27", + "version": "0.0.1-beta", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index dcd2d4808..b59b1c026 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/relayer", - "version": "1.0.27", + "version": "0.0.1-beta", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index 7cc436a40..eb0a06183 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/smart-account", - "version": "1.0.27", + "version": "0.0.1-beta", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 4aaf67f71..3a37c9304 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/transactions", - "version": "1.0.27", + "version": "0.0.1-beta", "description": "utils for sending all transaction legos", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index e51875404..fd436c00c 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/web3-auth", - "version": "1.0.27", + "version": "0.0.1-beta", "description": "web3-auth for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From 498b7f817083ff1c60fc4df454126ae30e4dd0e8 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 11 Nov 2022 19:38:12 +0400 Subject: [PATCH 0290/1247] version update --- lerna.json | 2 +- packages/account-abstraction/package.json | 2 +- packages/common/package.json | 2 +- packages/core-types/package.json | 2 +- packages/ethers-lib/package.json | 2 +- packages/gas-estimator/package.json | 2 +- packages/node-client/package.json | 2 +- packages/relayer/package.json | 2 +- packages/smart-account/package.json | 2 +- packages/transactions/package.json | 2 +- packages/web3-auth/package.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lerna.json b/lerna.json index f40010fcc..13456b294 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], "npmClient": "yarn", - "version": "0.0.1-beta", + "version": "0.0.1", "useWorkspaces": true } \ No newline at end of file diff --git a/packages/account-abstraction/package.json b/packages/account-abstraction/package.json index ba6c3d43b..36542a45f 100644 --- a/packages/account-abstraction/package.json +++ b/packages/account-abstraction/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account-abstraction", - "version": "0.0.1-beta", + "version": "0.0.1", "description": "Account abstraction APIs to prepare user operations ", "keywords": [ "account-abstraction", diff --git a/packages/common/package.json b/packages/common/package.json index 8b09bc9f0..d38b6b557 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "0.0.1-beta", + "version": "0.0.1", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 77b6bd72e..3a554bea2 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/core-types", - "version": "0.0.1-beta", + "version": "0.0.1", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/ethers-lib/package.json b/packages/ethers-lib/package.json index 6700b6921..ef99ed31d 100644 --- a/packages/ethers-lib/package.json +++ b/packages/ethers-lib/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/ethers-lib", - "version": "0.0.1-beta", + "version": "0.0.1", "description": "Ethers library adapter to be used by Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/gas-estimator/package.json b/packages/gas-estimator/package.json index 86444b723..23793d218 100644 --- a/packages/gas-estimator/package.json +++ b/packages/gas-estimator/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/gas-estimator", - "version": "0.0.1-beta", + "version": "0.0.1", "description": "library for estimating gas for generic actions and smart account methods under different conditions. ", "keywords": [ "gas-estimation", diff --git a/packages/node-client/package.json b/packages/node-client/package.json index a487c5982..06bc5acf7 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/node-client", - "version": "0.0.1-beta", + "version": "0.0.1", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/relayer/package.json b/packages/relayer/package.json index b59b1c026..021d3c2e8 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/relayer", - "version": "0.0.1-beta", + "version": "0.0.1", "description": "relayer client to dispatach transactions on blockchain", "keywords": [ "relayer" diff --git a/packages/smart-account/package.json b/packages/smart-account/package.json index eb0a06183..9f271fc6a 100644 --- a/packages/smart-account/package.json +++ b/packages/smart-account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/smart-account", - "version": "0.0.1-beta", + "version": "0.0.1", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/transactions/package.json b/packages/transactions/package.json index 3a37c9304..3cb134d36 100644 --- a/packages/transactions/package.json +++ b/packages/transactions/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/transactions", - "version": "0.0.1-beta", + "version": "0.0.1", "description": "utils for sending all transaction legos", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index fd436c00c..03b1331c2 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/web3-auth", - "version": "0.0.1-beta", + "version": "0.0.1", "description": "web3-auth for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From a2f047fd40711abc2dd2cca131b678bafccb1d5e Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 11 Nov 2022 19:47:46 +0400 Subject: [PATCH 0291/1247] fix file names --- packages/ethers-lib/src/Types.ts | 13 ------- packages/ethers-lib/src/types.ts | 13 ------- packages/smart-account/src/Types.ts | 19 ---------- packages/smart-account/src/types.ts | 19 ---------- packages/smart-account/tests/utils/Deploy.ts | 39 -------------------- packages/smart-account/tests/utils/deploy.ts | 39 -------------------- 6 files changed, 142 deletions(-) delete mode 100644 packages/ethers-lib/src/Types.ts delete mode 100644 packages/ethers-lib/src/types.ts delete mode 100644 packages/smart-account/src/Types.ts delete mode 100644 packages/smart-account/src/types.ts delete mode 100644 packages/smart-account/tests/utils/Deploy.ts delete mode 100644 packages/smart-account/tests/utils/deploy.ts diff --git a/packages/ethers-lib/src/Types.ts b/packages/ethers-lib/src/Types.ts deleted file mode 100644 index 6e77f252d..000000000 --- a/packages/ethers-lib/src/Types.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ContractTransaction } from '@ethersproject/contracts' -import { IBaseTransactionResult } from '@biconomy-sdk/core-types' - -export interface IEthersTransactionOptions { - from?: string - gasLimit?: number | string - gasPrice?: number | string -} - -export interface IEthersTransactionResult extends IBaseTransactionResult { - transactionResponse: ContractTransaction - options?: IEthersTransactionOptions -} diff --git a/packages/ethers-lib/src/types.ts b/packages/ethers-lib/src/types.ts deleted file mode 100644 index a616431f0..000000000 --- a/packages/ethers-lib/src/types.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ContractTransaction } from '@ethersproject/contracts' -import { IBaseTransactionResult } from '@biconomy/core-types' - -export interface IEthersTransactionOptions { - from?: string - gasLimit?: number | string - gasPrice?: number | string -} - -export interface IEthersTransactionResult extends IBaseTransactionResult { - transactionResponse: ContractTransaction - options?: IEthersTransactionOptions -} diff --git a/packages/smart-account/src/Types.ts b/packages/smart-account/src/Types.ts deleted file mode 100644 index 42605e63b..000000000 --- a/packages/smart-account/src/Types.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { BytesLike, Wallet } from 'ethers' -import { ChainNames } from '@biconomy-sdk/core-types' - -export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' - -// Reference -export interface WalletProvider { - readonly type?: string - readonly wallet?: Wallet - readonly address: string - readonly chainName?: ChainNames - signMessage(message: BytesLike): Promise -} - -export interface WalletLike { - privateKey: string -} - -export type WalletProviderLike = string | WalletLike | WalletProvider diff --git a/packages/smart-account/src/types.ts b/packages/smart-account/src/types.ts deleted file mode 100644 index 932d4b2d1..000000000 --- a/packages/smart-account/src/types.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { BytesLike, Wallet } from 'ethers' -import { ChainNames } from '@biconomy/core-types' - -export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' - -// Reference -export interface WalletProvider { - readonly type?: string - readonly wallet?: Wallet - readonly address: string - readonly chainName?: ChainNames - signMessage(message: BytesLike): Promise -} - -export interface WalletLike { - privateKey: string -} - -export type WalletProviderLike = string | WalletLike | WalletProvider diff --git a/packages/smart-account/tests/utils/Deploy.ts b/packages/smart-account/tests/utils/Deploy.ts deleted file mode 100644 index 575a7ec59..000000000 --- a/packages/smart-account/tests/utils/Deploy.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Contract, ethers } from 'ethers' - -// import { SmartWalletContract } from '@biconomy-sdk/core-types' -const SmartWalletArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletContract_v1_0_1.json') -const WalletFactoryArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletFactoryContract_v1_0_1.json') -const MultiSendArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendContract_v1_0_1.json') -const MultiSendCallOnlyArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendCallOnlyContract_v1_0_1.json') - -export async function deployWalletContracts( - signer: ethers.Signer -): Promise<[Contract, Contract, Contract, Contract]> { - // could get these from type chain - - const smartWallet = (await new ethers.ContractFactory( - SmartWalletArtifact.abi, - SmartWalletArtifact.bytecode, - signer - ).deploy()) as unknown as Contract - - const walletFactory = (await new ethers.ContractFactory( - WalletFactoryArtifact.abi, - WalletFactoryArtifact.bytecode, - signer - ).deploy(smartWallet.address)) as unknown as Contract - - const multiSend = (await new ethers.ContractFactory( - MultiSendArtifact.abi, - MultiSendArtifact.bytecode, - signer - ).deploy()) as unknown as Contract - - const multiSendCallOnly = (await new ethers.ContractFactory( - MultiSendCallOnlyArtifact.abi, - MultiSendCallOnlyArtifact.bytecode, - signer - ).deploy()) as unknown as Contract - - return [smartWallet, walletFactory, multiSend, multiSendCallOnly] -} diff --git a/packages/smart-account/tests/utils/deploy.ts b/packages/smart-account/tests/utils/deploy.ts deleted file mode 100644 index da75927a9..000000000 --- a/packages/smart-account/tests/utils/deploy.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Contract, ethers } from 'ethers' - -// import { SmartWalletContract } from '@biconomy/core-types' -const SmartWalletArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletContract_v1_0_1.json') -const WalletFactoryArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletFactoryContract_v1_0_1.json') -const MultiSendArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendContract_v1_0_1.json') -const MultiSendCallOnlyArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendCallOnlyContract_v1_0_1.json') - -export async function deployWalletContracts( - signer: ethers.Signer -): Promise<[Contract, Contract, Contract, Contract]> { - // could get these from type chain - - const smartWallet = (await new ethers.ContractFactory( - SmartWalletArtifact.abi, - SmartWalletArtifact.bytecode, - signer - ).deploy()) as unknown as Contract - - const walletFactory = (await new ethers.ContractFactory( - WalletFactoryArtifact.abi, - WalletFactoryArtifact.bytecode, - signer - ).deploy(smartWallet.address)) as unknown as Contract - - const multiSend = (await new ethers.ContractFactory( - MultiSendArtifact.abi, - MultiSendArtifact.bytecode, - signer - ).deploy()) as unknown as Contract - - const multiSendCallOnly = (await new ethers.ContractFactory( - MultiSendCallOnlyArtifact.abi, - MultiSendCallOnlyArtifact.bytecode, - signer - ).deploy()) as unknown as Contract - - return [smartWallet, walletFactory, multiSend, multiSendCallOnly] -} From 79788dd707491fbb81d0304ed20fbc68490885a4 Mon Sep 17 00:00:00 2001 From: livingrockrises Date: Fri, 11 Nov 2022 19:48:58 +0400 Subject: [PATCH 0292/1247] fix file names --- packages/ethers-lib/src/Types.ts | 13 +++++++ packages/smart-account/src/Types.ts | 19 ++++++++++ packages/smart-account/tests/utils/Deploy.ts | 39 ++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 packages/ethers-lib/src/Types.ts create mode 100644 packages/smart-account/src/Types.ts create mode 100644 packages/smart-account/tests/utils/Deploy.ts diff --git a/packages/ethers-lib/src/Types.ts b/packages/ethers-lib/src/Types.ts new file mode 100644 index 000000000..a616431f0 --- /dev/null +++ b/packages/ethers-lib/src/Types.ts @@ -0,0 +1,13 @@ +import { ContractTransaction } from '@ethersproject/contracts' +import { IBaseTransactionResult } from '@biconomy/core-types' + +export interface IEthersTransactionOptions { + from?: string + gasLimit?: number | string + gasPrice?: number | string +} + +export interface IEthersTransactionResult extends IBaseTransactionResult { + transactionResponse: ContractTransaction + options?: IEthersTransactionOptions +} diff --git a/packages/smart-account/src/Types.ts b/packages/smart-account/src/Types.ts new file mode 100644 index 000000000..932d4b2d1 --- /dev/null +++ b/packages/smart-account/src/Types.ts @@ -0,0 +1,19 @@ +import { BytesLike, Wallet } from 'ethers' +import { ChainNames } from '@biconomy/core-types' + +export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' + +// Reference +export interface WalletProvider { + readonly type?: string + readonly wallet?: Wallet + readonly address: string + readonly chainName?: ChainNames + signMessage(message: BytesLike): Promise +} + +export interface WalletLike { + privateKey: string +} + +export type WalletProviderLike = string | WalletLike | WalletProvider diff --git a/packages/smart-account/tests/utils/Deploy.ts b/packages/smart-account/tests/utils/Deploy.ts new file mode 100644 index 000000000..da75927a9 --- /dev/null +++ b/packages/smart-account/tests/utils/Deploy.ts @@ -0,0 +1,39 @@ +import { Contract, ethers } from 'ethers' + +// import { SmartWalletContract } from '@biconomy/core-types' +const SmartWalletArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletContract_v1_0_1.json') +const WalletFactoryArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/SmartWalletFactoryContract_v1_0_1.json') +const MultiSendArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendContract_v1_0_1.json') +const MultiSendCallOnlyArtifact = require('../../../ethers-lib/artifacts/contracts/V1.0.1.sol/MultiSendCallOnlyContract_v1_0_1.json') + +export async function deployWalletContracts( + signer: ethers.Signer +): Promise<[Contract, Contract, Contract, Contract]> { + // could get these from type chain + + const smartWallet = (await new ethers.ContractFactory( + SmartWalletArtifact.abi, + SmartWalletArtifact.bytecode, + signer + ).deploy()) as unknown as Contract + + const walletFactory = (await new ethers.ContractFactory( + WalletFactoryArtifact.abi, + WalletFactoryArtifact.bytecode, + signer + ).deploy(smartWallet.address)) as unknown as Contract + + const multiSend = (await new ethers.ContractFactory( + MultiSendArtifact.abi, + MultiSendArtifact.bytecode, + signer + ).deploy()) as unknown as Contract + + const multiSendCallOnly = (await new ethers.ContractFactory( + MultiSendCallOnlyArtifact.abi, + MultiSendCallOnlyArtifact.bytecode, + signer + ).deploy()) as unknown as Contract + + return [smartWallet, walletFactory, multiSend, multiSendCallOnly] +} From 7b7e5104ad5b1828e083f70a185328b566e9d456 Mon Sep 17 00:00:00 2001 From: Asheer Rizvi Date: Sat, 12 Nov 2022 19:54:37 +0530 Subject: [PATCH 0293/1247] feat: web3auth modal UI --- packages/web3-auth/package.json | 4 +- packages/web3-auth/src/SocialLogin.tsx | 15 +- packages/web3-auth/src/UI.tsx | 210 +++--- packages/web3-auth/src/style.css | 876 +++++++++++++++++++++++++ 4 files changed, 986 insertions(+), 119 deletions(-) create mode 100644 packages/web3-auth/src/style.css diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index 3fffc37f1..1a765eb5a 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -24,7 +24,8 @@ }, "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "copy-files": "copyfiles -u 1 src/**/*.css dist/src", + "build": "rimraf dist && tsc && yarn copy-files", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, @@ -52,6 +53,7 @@ "devDependencies": { "@types/react": "^18.0.15", "@types/react-dom": "^18.0.6", + "copyfiles": "^2.4.1", "path": "^0.12.7", "tslint": "^6.1.3", "tslint-config-prettier": "^1.18.0", diff --git a/packages/web3-auth/src/SocialLogin.tsx b/packages/web3-auth/src/SocialLogin.tsx index 0995496ef..4764a3fac 100644 --- a/packages/web3-auth/src/SocialLogin.tsx +++ b/packages/web3-auth/src/SocialLogin.tsx @@ -11,11 +11,11 @@ import QRCodeModal from '@walletconnect/qrcode-modal' import { getPublic, sign } from '@toruslabs/eccrypto' import { base64url, keccak } from '@toruslabs/openlogin-utils' -import UIComponent from './UI' +import UI from './UI' function createLoginModal(socialLogin: SocialLogin) { - const root = createRoot((document as any).getElementById('web3auth-container')) - root.render() + const root = createRoot((document as any).getElementById('w3a-modal')) + root.render() } class SocialLogin { @@ -116,12 +116,15 @@ class SocialLogin { createWalletDiv() { // create a fixed div into html but keep it hidden initially const walletDiv = document.createElement('div') - walletDiv.id = 'web3auth-container' + walletDiv.id = 'w3a-modal' walletDiv.style.display = 'none' walletDiv.style.position = 'fixed' walletDiv.style.top = '0' walletDiv.style.right = '0' - walletDiv.style.zIndex = '2323123' + walletDiv.style.height = '100%' + walletDiv.style.width = '100%' + walletDiv.style.background = 'rgba(33, 33, 33, 0.46)' + walletDiv.style.zIndex = '100' this.walletDiv = walletDiv // insert div into top of body. document.body.insertBefore(walletDiv, document.body.firstChild) @@ -136,7 +139,7 @@ class SocialLogin { this.walletIframe.style.width = '341px' this.walletIframe.style.border = '0px' this.walletIframe.style.borderRadius = '3%' - const el = document.getElementById('web3auth-container') + const el = document.getElementById('w3a-modal') el?.dispatchEvent(new Event('show-modal')) } diff --git a/packages/web3-auth/src/UI.tsx b/packages/web3-auth/src/UI.tsx index 11fed2950..4e237ad0d 100644 --- a/packages/web3-auth/src/UI.tsx +++ b/packages/web3-auth/src/UI.tsx @@ -1,143 +1,129 @@ import React from 'react' import SocialLogin from './SocialLogin' +import './style.css' interface UIPorops { socialLogin: SocialLogin } -const googleCardStyle = { - display: 'flex', - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', - width: '319px', - height: '45px', - background: '#252525', - borderRadius: '12px', - border: 'none', - cursor: 'pointer' -} as React.CSSProperties - -const buttonTextSpan = { - fontStyle: 'normal', - fontWeight: 600, - fontSize: '18px', - lineHeight: '23px', - display: 'flex', - alignItems: 'center', - textAlign: 'center', - color: '#FFFFFF' -} as React.CSSProperties - const container = { position: 'fixed', float: 'left', left: '50%', top: '50%', + width: 'min(90vw, 375px)', transform: 'translate(-50%, -50%)', transition: 'opacity 400ms ease-in', border: '1px solid #181818', - boxShadow: '5px 5px 0px #181818', borderRadius: 10, - padding: 30, - zIndex: 100, - background: 'black' -} as React.CSSProperties - -const footer = { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - marginTop: '26.39px' -} as React.CSSProperties - -const footerNormalText = { - fontStyle: 'normal', - fontWeight: '600', - fontSize: '14.109px', - color: '#535353', - lineGeight: '18px' -} as React.CSSProperties - -const footerBigText = { - fontStyle: 'normal', - fontWeight: '700', - fontSize: '16.1351px', - lineHeight: '21px', - color: '#535353' + background: 'black', + overflow: 'hidden' } as React.CSSProperties const UI: React.FC = ({ socialLogin }) => { return (
- socialLogin.hideWallet()} - /> -
-

- Biconomy Social Login -

-

- Create a wallet to continue -

-
-
-
-
-
- + +
+
+
CONTINUE WITH
+
    +
  • + +
  • +
  • + +
  • +
+
-
- +
+
+
+
EXTERNAL WALLET
+ + +
+
-
- powered by - - Biconomy + +
+
+
+
+ Powered by Biconomy +
+
+
) diff --git a/packages/web3-auth/src/style.css b/packages/web3-auth/src/style.css new file mode 100644 index 000000000..c65487baa --- /dev/null +++ b/packages/web3-auth/src/style.css @@ -0,0 +1,876 @@ +/* devanagari */ +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z11lFd2JQEl8qw.woff2) + format('woff2'); + unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, + U+A830-A839, U+A8E0-A8FB; +} +/* latin-ext */ +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z1JlFd2JQEl8qw.woff2) + format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, + U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z1xlFd2JQEk.woff2) + format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, + U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* latin-ext */ +@font-face { + font-family: 'DM Sans'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/dmsans/v6/rP2Hp2ywxg089UriCZ2IHTWEBlwu8Q.woff2) + format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, + U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'DM Sans'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/dmsans/v6/rP2Hp2ywxg089UriCZOIHTWEBlw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, + U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* Modal */ +#w3a-modal { + --bg1: #0f1222; + --bg2: #24262e; + --text-color1: #d3d3d4; + --text-color2: #ffffff; + + --text-header: 'Poppins', Helvetica, sans-serif; + --text-body: 'DM Sans', Helvetica, sans-serif; + + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: 15px; + background: rgba(33, 33, 33, 0.46); + color: var(--text-color1); + font-family: var(--text-body); +} + +#w3a-modal.w3a-modal--hidden { + display: none; +} + +#w3a-modal p, +#w3a-modal form, +#w3a-modal button { + margin: 0; + padding: 0; +} + +#w3a-modal .w3a-modal__inner { + width: 100%; + max-width: 375px; + overflow: hidden; + border-radius: 6px; + position: relative; + max-height: 95%; + overflow-y: auto; + opacity: 0; + transition: 200ms cubic-bezier(0.25, 0.8, 0.25, 1); + transform-origin: center center; + min-height: 350px; +} + +#w3a-modal .w3a-modal__inner.w3a-modal__inner--active { + opacity: 1; + transition: 200ms cubic-bezier(0.25, 0.8, 0.25, 1); + transform-origin: center center; +} + +#w3a-modal .w3a-modal__header { + padding: 25px 34px; + background: var(--bg1); + box-shadow: 0px 4px 28px rgba(3, 100, 255, 0.05); + position: relative; +} +#w3a-modal .w3a-modal__content { + padding: 30px 34px; + background: var(--bg2); +} +#w3a-modal .w3a-modal__footer { + padding: 16px 34px; + background: var(--bg1); +} + +/* SPINNER */ +/* Loader */ +#w3a-modal .w3a-modal__loader { + background: var(--bg2); + position: absolute; + display: flex; + justify-content: center; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 10; +} + +#w3a-modal .w3a-modal__loader.w3a-modal__loader--hidden { + display: none; +} + +#w3a-modal .w3a-modal__loader-content { + text-align: center; + margin-bottom: 80px; + position: relative; + display: flex; + flex-direction: column; +} + +#w3a-modal .w3a-modal__loader-info { + flex-grow: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 0 30px; +} + +#w3a-modal .w3a-spinner-label { + margin-top: 10px; + font-size: 16px; + font-weight: 500; + color: #0364ff; +} + +#w3a-modal .w3a-spinner-message { + margin-top: 10px; + font-size: 16px; +} +#w3a-modal .w3a-spinner-message:first-letter { + text-transform: capitalize; +} +#w3a-modal .w3a-spinner-message.w3a-spinner-message--error { + color: #fb4a61; +} + +#w3a-modal button.w3a-logout { + background: none; + border: 0; + padding: 0; + display: inline-flex; + align-items: center; + margin-bottom: 30px; + cursor: pointer; + margin-top: 20px; + color: #0364ff; +} + +#w3a-modal .w3a-spinner-power { + margin-top: auto; + font-size: 12px; + line-height: 1.2em; + color: #b7b8bd; +} +#w3a-modal .w3a-spinner-power > img { + height: 32px; + width: auto; + display: inline; +} + +#w3a-modal .w3a-spinner { + display: inline-block; + position: relative; + background-color: #0364ff; + height: 60px; + width: 60px; + border-radius: 50%; + background: conic-gradient(transparent, #0364ff); + animation: rotate 1s linear infinite; +} + +#w3a-modal .w3a-spinner__mask, +#w3a-modal .w3a-spinner__head { + content: ''; + position: absolute; + border-radius: 50%; +} + +#w3a-modal .w3a-spinner__mask { + width: 50px; + height: 50px; + top: 5px; + left: 5px; + background-color: var(--bg2); +} + +#w3a-modal .w3a-spinner__head { + height: 5px; + width: 5px; + background-color: #0364ff; + top: 0; + left: 26px; +} + +@keyframes rotate { + from { + transform: rotateZ(0); + } + to { + transform: rotateZ(360deg); + } +} + +/* Header */ +#w3a-modal .w3a-header { + display: flex; + color: var(--text-color2); + align-items: center; +} +#w3a-modal .w3a-header__logo { + height: auto; + width: 40px; + margin-right: 16px; +} +#w3a-modal .w3a-header__title { + font-family: var(--text-header); + font-weight: 600; + font-size: 20px; + line-height: 1.5em; +} +#w3a-modal p.w3a-header__subtitle { + font-size: 14px; + line-height: 1.5em; + font-weight: 400; +} +#w3a-modal button.w3a-header__button { + cursor: pointer; + position: absolute; + background: none; + padding: 0; + border: 0; + top: 20px; + right: 26px; +} + +/* BODY */ +#w3a-modal .w3a-group { + margin-bottom: 24px; +} +#w3a-modal .w3a-group:last-child { + margin-bottom: 0; +} + +#w3a-modal .w3a-group.w3a-group--hidden, +#w3a-modal .w3a-group.w3a-group--social-hidden, +#w3a-modal .w3a-group.w3a-group--email-hidden, +#w3a-modal .w3a-group.w3a-group--ext-wallet-hidden { + display: none; +} + +#w3a-modal .w3a-group:not(.w3a-group--hidden):not(:last-child), +#w3a-modal .w3a-group:not(.w3a-group--social-hidden):not(:last-child), +#w3a-modal .w3a-group:not(.w3a-group--email-hidden):not(:last-child), +#w3a-modal .w3a-group:not(.w3a-group--ext-wallet-hidden):not(:last-child) { + border-bottom: 0.5px solid #5c6c7f; + padding-bottom: 24px; +} + +#w3a-modal div.w3a-group__title { + font-family: var(--text-header); + font-weight: 400; + font-size: 14px; + line-height: 1.5em; + margin-bottom: 8px; + text-transform: uppercase; +} + +/* Adapter List */ +#w3a-modal ul.w3a-adapter-list { + display: flex; + align-items: center; + padding: 0; + margin: 0; + gap: 16px; + overflow-y: hidden; + flex-wrap: wrap; + max-height: 500px; + transition: max-height 0.4s ease-in; +} + +#w3a-modal ul.w3a-adapter-list.w3a-adapter-list--shrink { + max-height: 48px; + transition: max-height 0.4s ease-out; +} + +#w3a-modal ul.w3a-adapter-list.w3a-adapter-list--hidden { + display: none; +} + +#w3a-modal li.w3a-adapter-item { + list-style: none; + margin-bottom: 0; +} + +#w3a-modal .w3a-adapter-item--hide { + display: none; +} + +#w3a-modal .w3a-adapter-item__label { + font-size: 12px; + color: #5c6c7f; + text-align: center; + margin: 8px 0 0 !important; + text-transform: capitalize; + position: absolute; + transform: translate(-6px); + width: 60px; +} + +/* Buttons */ +#w3a-modal button.w3a-button { + background-color: #2f3136; + border: 1px solid #404145; + box-sizing: border-box; + box-shadow: 2px 2px 12px rgba(3, 100, 255, 0.05); + border-radius: 24px; + height: 48px; + width: 100%; + padding: 8px; + display: flex; + align-items: center; + justify-content: center; + font-family: var(--text-body); + font-style: normal; + font-weight: 400; + font-size: 16px; + color: var(--text-color2); + cursor: pointer; +} + +#w3a-modal button.w3a-button:hover { + background: #595857; +} + +#w3a-modal button.w3a-button:active { + background: #6f717a; +} + +#w3a-modal button.w3a-button:disabled { + background: #27282d; + color: #6f717a; +} + +#w3a-modal button.w3a-button:focus-visible { + outline: 1px solid #daf0ff; + outline-offset: -1px; +} + +#w3a-modal button.w3a-button.w3ajs-external-toggle__button { + margin-bottom: 12px; +} + +#w3a-modal button.w3a-button.w3ajs-external-toggle__button:last-child { + margin-bottom: 0; +} + +#w3a-modal button.w3a-button--icon { + width: 48px; +} + +#w3a-modal button.w3a-button--left { + justify-content: start; + padding: 8px 16px; +} + +#w3a-modal button.w3a-button--left > img { + height: 30px; + width: auto; +} + +#w3a-modal button.w3a-button--left > div.w3a-button__name { + max-width: 180px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-transform: capitalize; +} + +#w3a-modal button.w3a-button--left > div.w3a-button__note { + margin-left: 8px; + color: #b7b8bd; + margin-left: auto; +} + +#w3a-modal .w3a-button__image { + max-width: 100%; + max-height: 100%; + transition: 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), visibility 0s; +} + +#w3a-modal button.w3a-button.w3a-button--rotate .w3a-button__image { + transform: rotate(180deg); +} + +#w3a-modal .w3a-button--left .w3a-button__image { + margin-right: 12px; +} + +#w3a-modal button.w3a-button-expand { + height: unset; + width: auto; + margin-left: auto; + font-size: 12px; + margin-top: 16px; + display: flex; + border: 8px; + color: var(--text-color2); + align-items: center; + cursor: pointer; + border-radius: 12px; + cursor: pointer; + padding: 0 10px 0 8px; + background: transparent; +} + +#w3a-modal button.w3a-button-expand svg { + width: 12px; + height: auto; + margin-right: 4px; +} + +#w3a-modal .w3a-external-toggle { + display: block; +} + +#w3a-modal .w3a-external-toggle.w3a-external-toggle--hidden { + display: none; +} + +#w3a-modal .w3a-external-container { + display: block; + margin-bottom: 34px; +} + +#w3a-modal .w3a-external-container.w3a-external-container--hidden { + display: none; +} + +#w3a-modal .w3a-external-group { + display: flex; + flex-wrap: wrap; + gap: 12px; + margin-bottom: 16px; +} + +#w3a-modal .w3a-external-group__left { + flex-grow: 1; +} + +#w3a-modal button.w3a-external-back { + background: none; + border: 0; + padding: 0; + display: inline-flex; + align-items: center; + margin-bottom: 30px; + cursor: pointer; + color: var(--text-color1); +} + +#w3a-modal .w3a-external-back:focus-visible { + outline: 1px solid #daf0ff; +} + +#w3a-modal .w3a-external-back .w3a-group__title { + margin-bottom: 0; + margin-left: 5px; +} + +#w3a-modal .w3a-external-loader { + display: flex; + justify-content: center; +} + +#w3a-modal .w3a-wallet-connect { + display: block; + text-align: center; + margin-bottom: 16px; +} + +#w3a-modal .w3a-wallet-connect.w3a-wallet-connect--hidden { + display: none; +} + +#w3a-modal .w3a-wallet-connect__container { + background: #ffffff; + border-radius: 10px; + color: var(--text-color1); + font-size: 10px; + width: fit-content; + margin: auto; + min-width: 250px; + padding: 16px 12px; +} + +#w3a-modal .w3a-wallet-connect__container-desktop, +#w3a-modal .w3a-wallet-connect__container-android { + margin: auto; +} + +#w3a-modal .w3a-wallet-connect__container-btn-group { + display: flex; + gap: 18px; +} + +#w3a-modal .w3a-wallet-connect__container-ios { + display: flex; + grid-gap: 30px 20px; + padding: 0 0 28px; + box-sizing: border-box; + flex-wrap: wrap; +} + +#w3a-modal .w3a-wallet-connect-qr { + margin: 16px 16px; + padding: inherit; +} + +#w3a-modal .w3a-wallet-connect__container-android a { + text-decoration: none; +} + +#w3a-modal .w3a-wallet-connect__container-android .w3a-button { + background-color: rgb(64, 153, 255) !important; + color: #ffffff !important; + height: auto; + font-size: 14px; + padding: 8px 16px; + width: auto; + margin: auto; +} + +#w3a-modal .w3a-wallet-connect__logo > img { + text-align: center; + width: 115px; + margin-bottom: 16px; +} + +/* Text Field */ +#w3a-modal .w3a-text-field { + background: #393938; + border: 1px solid #27282d; + box-sizing: border-box; + box-shadow: inset 2px 2px 10px rgba(0, 0, 0, 0.4); + border-radius: 24px; + padding: 0 28px; + height: 48px; + width: 100%; + font-family: var(--text-body); + font-size: 16px; + color: var(--text-color2); + margin-bottom: 16px; +} + +#w3a-modal .w3a-text-field:active { + background: #0f1222; +} + +#w3a-modal .w3a-text-field:focus-visible { + outline: 1px solid #daf0ff; + outline-offset: -1px; +} + +/* Footer Components */ +#w3a-modal .w3a-footer { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 10px; + line-height: 150%; + color: var(--text-color2); +} + +#w3a-modal .w3a-footer__links { + padding: 0; + margin: 0; +} + +#w3a-modal .w3a-footer__links a { + color: var(--text-color1); + text-decoration: none; +} + +#w3a-modal .w3a-footer__links a:focus-visible { + outline: 1px solid #daf0ff; +} + +#w3a-modal .w3a-footer__links span { + margin: 0 2px; +} + +#w3a-modal .w3a-footer__secured { + text-align: right; + color: #b7b8bd; +} +#w3a-modal .w3a-footer__secured > img { + height: 14px; + width: auto; +} + +/* Loader Bridge */ +#w3a-modal .w3a-modal__loader-bridge { + display: flex; + margin-bottom: 14px; +} + +#w3a-modal .w3a-modal__loader-bridge-message span { + text-transform: capitalize; +} + +#w3a-modal .w3a-modal__loader-app-logo { + display: flex; + padding: 8px; +} + +#w3a-modal .w3a-modal__loader-app-logo img { + width: 64px; + height: auto; +} + +#w3a-modal .w3a-modal__loader-adapter img { + width: 84px; + height: auto; +} + +#w3a-modal .w3a-modal__connector { + display: flex; + align-items: center; +} + +.w3a-modal__connector-beat { + display: inline-block; + position: relative; + width: 80px; + height: 80px; +} + +.w3a-modal__connector-beat div { + position: absolute; + top: 33px; + width: 13px; + height: 13px; + border-radius: 50%; + background: #808080; + animation-timing-function: cubic-bezier(0, 1, 1, 0); +} + +.w3a-modal__connector-beat div:nth-child(1) { + left: 8px; + animation: beat1 2.4s infinite; +} + +.w3a-modal__connector-beat div:nth-child(2) { + left: 8px; + animation: beat2 2.4s infinite; +} + +.w3a-modal__connector-beat div:nth-child(3) { + left: 8px; + animation: beat3 2.4s infinite; +} + +.w3a-modal__connector-beat div:nth-child(4) { + left: 32px; + animation: beat4 2.4s infinite; +} + +.w3a-modal__connector-beat div:nth-child(5) { + left: 56px; + animation: beat5 2.4s infinite; +} + +@keyframes beat1 { + 0% { + transform: scale(0); + } + + 25% { + transform: scale(0); + } + + 50% { + transform: scale(1); + } + + 75% { + transform: scale(0); + } + + 100% { + transform: scale(0); + } +} + +@keyframes beat2 { + 0% { + transform: scale(0); + } + + 25% { + transform: scale(1); + } + + 50% { + transform: translate(24px, 0); + } + + 75% { + transform: translate(0, 0); + } + + 100% { + transform: translate(0, 0) scale(0); + } +} + +@keyframes beat3 { + 0% { + transform: translate(0, 0); + } + + 25% { + transform: translate(24px, 0); + } + + 50% { + transform: translate(48px, 0); + } + + 75% { + transform: translate(24px, 0); + } + + 100% { + transform: translate(0, 0); + } +} + +@keyframes beat4 { + 0% { + transform: translate(0, 0); + } + + 25% { + transform: translate(24px, 0); + } + + 50% { + transform: translate(24px, 0) scale(0); + } + + 75% { + transform: translate(24px, 0) scale(1); + } + + 100% { + transform: translate(0, 0); + } +} + +@keyframes beat5 { + 0% { + transform: scale(1); + } + + 25% { + transform: scale(0); + } + + 50% { + transform: scale(0); + } + + 75% { + transform: scale(0); + } + + 100% { + transform: scale(1); + } +} + +/* LIGHT MODE */ +#w3a-modal.w3a-modal--light { + --bg1: #ffffff; + --bg2: #f9f9fb; + --text-color1: #a2a5b5; + --text-color2: #5c6c7f; +} + +#w3a-modal .w3a-group:not(.w3a-group--hidden):not(:last-child), +#w3a-modal .w3a-group:not(.w3a-group--social-hidden):not(:last-child), +#w3a-modal .w3a-group:not(.w3a-group--email-hidden):not(:last-child), +#w3a-modal .w3a-group:not(.w3a-group--ext-wallet-hidden):not(:last-child) { + border-bottom: 0.5px solid #b7b8bd; + padding-bottom: 24px; +} + +#w3a-modal.w3a-modal--light button.w3a-button { + background-color: #ffffff; + border: 1px solid #f3f3f4; + box-shadow: none; + color: #595857; +} + +#w3a-modal.w3a-modal--light button.w3a-button:disabled { + color: #b7b8bd; +} + +#w3a-modal.w3a-modal--light button.w3a-button:focus-visible { + outline: 1px solid #0f1222; +} + +#w3a-modal.w3a-modal--light .w3a-text-field { + background: #ffffff; + border: 1px solid #ffffff; + box-shadow: inset 2px 2px 10px rgba(0, 0, 0, 0.1); + color: #b7b8bd; +} + +#w3a-modal.w3a-modal--light .w3a-text-field:active { + color: #0f1222; + outline: 1px solid #0f1222; +} + +#w3a-modal.w3a-modal--light .w3a-text-field:focus-visible { + color: #0f1222; + outline: 1px solid #0f1222; +} + +#w3a-modal.w3a-modal--light .w3a-footer__links a:focus-visible { + outline: 1px solid #0f1222; +} + +#w3a-modal.w3a-modal--light .w3a-external-back:focus-visible { + outline: 1px solid #0f1222; +} From 3d999bf51e8e6d0f7aa10a69d675742b225a118c Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Sun, 13 Nov 2022 18:43:41 +0400 Subject: [PATCH 0294/1247] added sendSignedTransaction --- packages/core-types/src/SmartAccountTypes.ts | 8 ++ packages/smart-account/src/SmartAccount.ts | 83 ++++++++++++++++++++ 2 files changed, 91 insertions(+) diff --git a/packages/core-types/src/SmartAccountTypes.ts b/packages/core-types/src/SmartAccountTypes.ts index 0d66ce109..5cbdfcf89 100644 --- a/packages/core-types/src/SmartAccountTypes.ts +++ b/packages/core-types/src/SmartAccountTypes.ts @@ -82,6 +82,14 @@ export type SendTransactionDto = { gasLimit?: GasLimit } +export type SendSignedTransactionDto = { + tx: IWalletTransaction + batchId?: number + chainId?: ChainId + gasLimit?: GasLimit + signature: string +} + export type PrepareRefundTransactionDto = { version?: string transaction: Transaction diff --git a/packages/smart-account/src/SmartAccount.ts b/packages/smart-account/src/SmartAccount.ts index 593c3f0dc..f9d125102 100644 --- a/packages/smart-account/src/SmartAccount.ts +++ b/packages/smart-account/src/SmartAccount.ts @@ -1,6 +1,7 @@ import { SignTransactionDto, SendTransactionDto, + SendSignedTransactionDto, PrepareRefundTransactionDto, PrepareRefundTransactionsDto, RefundTransactionDto, @@ -581,6 +582,87 @@ class SmartAccount extends EventEmitter { return '' } + async sendSignedTransaction(sendSignedTransactionDto: SendSignedTransactionDto): Promise { + let { chainId } = sendSignedTransactionDto + const { tx, batchId = 0, signature } = sendSignedTransactionDto + chainId = chainId ? chainId : this.#smartAccountConfig.activeNetworkId + let { gasLimit } = sendSignedTransactionDto + const isDeployed = await this.contractUtils.isDeployed( + chainId, + this.DEFAULT_VERSION, + this.address + ) + const rawTx: RawTransactionType = { + to: tx.to, + data: tx.data, + value: 0, + chainId: chainId + } + + const transaction: ExecTransaction = { + to: tx.to, + value: tx.value, + data: tx.data, + operation: tx.operation, + targetTxGas: tx.targetTxGas + } + + const refundInfo: IFeeRefundV1_0_0 | IFeeRefundV1_0_1 = { + baseGas: tx.baseGas, + gasPrice: tx.gasPrice, + tokenGasPriceFactor: tx.tokenGasPriceFactor, + gasToken: tx.gasToken, + refundReceiver: tx.refundReceiver + } + + let walletContract = + this.contractUtils.smartWalletContract[chainId][this.DEFAULT_VERSION].getContract() + walletContract = walletContract.attach(this.address) + + const execTransaction = await walletContract.populateTransaction.execTransaction( + transaction, + batchId, + refundInfo, + signature + ) + + rawTx.to = this.address + rawTx.data = execTransaction.data + + const state = await this.contractUtils.getSmartAccountState( + this.smartAccountState, + this.DEFAULT_VERSION, + this.#smartAccountConfig.activeNetworkId + ) + + const signedTx: SignedTransaction = { + rawTx, + tx + } + const relayTrx: RelayTransaction = { + signedTx, + config: state, + context: this.getSmartAccountContext(chainId) + } + if (gasLimit) { + relayTrx.gasLimit = gasLimit + } + if (!isDeployed) { + gasLimit = { + hex: '0x1E8480', + type: 'hex' + } + relayTrx.gasLimit = gasLimit + } + const relayResponse: RelayResponse = await this.relayer.relay(relayTrx, this) + console.log('relayResponse') + console.log(relayResponse) + if (relayResponse.transactionId) { + return relayResponse.transactionId + } + return '' + } + // Get Fee Options from relayer and make it available for display // We can also show list of transactions to be processed (decodeContractCall) /** @@ -862,3 +944,4 @@ export const DefaultSmartAccountConfig: SmartAccountConfig = { } export default SmartAccount + From 21c48f1470860e6c1de7ffa8200bc4a6c1b29e93 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Sun, 13 Nov 2022 20:06:50 +0400 Subject: [PATCH 0295/1247] Create README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..7548a955c --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# biconomy-client-sdk +Biconomy SDK is a plug & play toolkit for dApps to build transaction legos that enable a highly customised one-click experience for their users + +Screenshot 2022-11-13 at 7 45 04 PM From 2a407f30c1f6aeb9e1637f804d7a76dbd1af3105 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 14 Nov 2022 01:42:53 +0530 Subject: [PATCH 0296/1247] minor fixes --- packages/web3-auth/src/SocialLogin.tsx | 49 +++++++++++++++++++++++--- packages/web3-auth/src/UI.tsx | 4 +-- packages/web3-auth/src/index.ts | 3 +- packages/web3-auth/webpack.config.js | 22 ------------ 4 files changed, 48 insertions(+), 30 deletions(-) delete mode 100644 packages/web3-auth/webpack.config.js diff --git a/packages/web3-auth/src/SocialLogin.tsx b/packages/web3-auth/src/SocialLogin.tsx index 4764a3fac..b016481a0 100644 --- a/packages/web3-auth/src/SocialLogin.tsx +++ b/packages/web3-auth/src/SocialLogin.tsx @@ -3,7 +3,12 @@ import { createRoot } from 'react-dom/client' import { ethers } from 'ethers' import { Web3AuthCore } from '@web3auth/core' import { NetworkSwitch } from '@web3auth/ui' -import { WALLET_ADAPTERS, CHAIN_NAMESPACES, SafeEventEmitterProvider } from '@web3auth/base' +import { + WALLET_ADAPTERS, + CHAIN_NAMESPACES, + SafeEventEmitterProvider, + UserInfo +} from '@web3auth/base' import { OpenloginAdapter } from '@web3auth/openlogin-adapter' import { MetamaskAdapter } from '@web3auth/metamask-adapter' import { WalletConnectV1Adapter } from '@web3auth/wallet-connect-v1-adapter' @@ -25,6 +30,7 @@ class SocialLogin { iframeInitialized = false isInit = false clientId: string + userInfo: Partial | null = null web3auth: Web3AuthCore | null = null provider: SafeEventEmitterProvider | null = null @@ -37,6 +43,7 @@ class SocialLogin { 'BEQgHQ6oRgaJXc3uMnGIr-AY-FLTwRinuq8xfgnInrnDrQZYXxDO0e53osvXzBXC1dcUTyD2Itf-zN1VEB8xZlo' } + // TODO: call NodeClient to get the whitelistUrl with single param async whitelistUrl(appKey: string, origin: string): Promise { const appKeyBuf = Buffer.from(appKey.padStart(64, '0'), 'hex') if (base64url.encode(getPublic(appKeyBuf)) !== this.clientId) throw new Error('appKey mismatch') @@ -47,7 +54,11 @@ class SocialLogin { return base64url.encode(sig) } - async init(chainId: string, whitelistUrls?: { [P in string]: string }) { + async init( + chainId: string, + whitelistUrls?: { [P in string]: string }, + network: 'mainnet' | 'testnet' = 'testnet' + ) { try { console.log('SocialLogin init') const web3AuthCore = new Web3AuthCore({ @@ -61,7 +72,7 @@ class SocialLogin { const openloginAdapter = new OpenloginAdapter({ adapterSettings: { clientId: this.clientId, - network: 'testnet', + network: network, uxMode: 'redirect', whiteLabel: { name: 'Biconomy SDK', @@ -153,14 +164,23 @@ class SocialLogin { createLoginModal(this) } - async socialLogin() { + async getUserInfo() { + if (this.web3auth) { + const userInfo = await this.web3auth.getUserInfo() + this.userInfo = userInfo + return userInfo + } + return null + } + + async socialLogin(loginProvider: string) { if (!this.web3auth) { console.log('web3auth not initialized yet') return } try { const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.OPENLOGIN, { - loginProvider: 'google' + loginProvider: loginProvider }) // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const web3Provider = new ethers.providers.Web3Provider(web3authProvider!) @@ -228,3 +248,22 @@ class SocialLogin { } export default SocialLogin + +let initializedSocialLogin: SocialLogin | null = null +const getSocialLoginSDK = async ( + chainId: string, + whitelistUrls?: { [P in string]: string }, + network: 'mainnet' | 'testnet' = 'testnet' +) => { + if (initializedSocialLogin) { + return initializedSocialLogin + } + await socialLoginSDK.init(chainId, whitelistUrls, network) + initializedSocialLogin = socialLoginSDK + return socialLoginSDK +} + +const socialLoginSDK: SocialLogin = new SocialLogin() +;(window as any).socialLoginSDK = socialLoginSDK + +export { socialLoginSDK, getSocialLoginSDK } diff --git a/packages/web3-auth/src/UI.tsx b/packages/web3-auth/src/UI.tsx index 4e237ad0d..f964b069c 100644 --- a/packages/web3-auth/src/UI.tsx +++ b/packages/web3-auth/src/UI.tsx @@ -66,7 +66,7 @@ const UI: React.FC = ({ socialLogin }) => {
-
+
CONTINUE WITH
  • @@ -92,10 +92,16 @@ const UI: React.FC = ({ socialLogin }) => {
-
- -
-
+
+
EMAIL
+
+ + +
+
+
EXTERNAL WALLET
From fd8df4fdcbb252d46fa2d1e35b1b875cf4db12bf Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 14 Nov 2022 17:05:15 +0530 Subject: [PATCH 0301/1247] small update --- packages/web3-auth/src/SocialLogin.tsx | 10 +++++----- packages/web3-auth/src/UI.tsx | 6 +++++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/web3-auth/src/SocialLogin.tsx b/packages/web3-auth/src/SocialLogin.tsx index b1d06e2c9..ccfae989b 100644 --- a/packages/web3-auth/src/SocialLogin.tsx +++ b/packages/web3-auth/src/SocialLogin.tsx @@ -200,18 +200,18 @@ class SocialLogin { } async emailLogin(email: string) { - console.log('signing in with email1', email, this.web3auth) if (!this.web3auth) { console.log('web3auth not initialized yet') return } try { - console.log('signing in with email', email) + // console.log('signing in with email', email) const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.OPENLOGIN, { loginProvider: 'email_passwordless', - extraLoginOptions: { - login_hint: email - } + login_hint: email + // extraLoginOptions: { + // login_hint: email + // } }) // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const web3Provider = new ethers.providers.Web3Provider(web3authProvider!) diff --git a/packages/web3-auth/src/UI.tsx b/packages/web3-auth/src/UI.tsx index c438f9c04..8dc6f8e42 100644 --- a/packages/web3-auth/src/UI.tsx +++ b/packages/web3-auth/src/UI.tsx @@ -98,13 +98,17 @@ const UI: React.FC = ({ socialLogin }) => {
EMAIL
socialLogin.emailLogin(email)} + onSubmit={(e) => { + e.preventDefault() + socialLogin.emailLogin(email) + }} > setEmail(e.target.value)} />
-
@@ -69,31 +54,13 @@ const UI: React.FC = ({ socialLogin }) => {
CONTINUE WITH
  • -
  • -
@@ -101,14 +68,7 @@ const UI: React.FC = ({ socialLogin }) => {
EMAIL
- + @@ -117,18 +77,10 @@ const UI: React.FC = ({ socialLogin }) => {
EXTERNAL WALLET
- -
@@ -145,7 +97,7 @@ const UI: React.FC = ({ socialLogin }) => {
- ) -} + ); +}; -export default UI +export default UI; diff --git a/packages/web3-auth/src/index.ts b/packages/web3-auth/src/index.ts index fc68c3d4a..803fefd3a 100644 --- a/packages/web3-auth/src/index.ts +++ b/packages/web3-auth/src/index.ts @@ -1,4 +1,4 @@ -import SocialLogin, { socialLoginSDK, getSocialLoginSDK } from './SocialLogin' +import SocialLogin, { socialLoginSDK, getSocialLoginSDK } from "./SocialLogin"; -export default SocialLogin -export { socialLoginSDK, getSocialLoginSDK } +export default SocialLogin; +export { socialLoginSDK, getSocialLoginSDK }; diff --git a/packages/web3-auth/src/style.css b/packages/web3-auth/src/style.css index c65487baa..70264c5c1 100644 --- a/packages/web3-auth/src/style.css +++ b/packages/web3-auth/src/style.css @@ -1,52 +1,45 @@ /* devanagari */ @font-face { - font-family: 'Poppins'; + font-family: "Poppins"; font-style: normal; font-weight: 600; - src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z11lFd2JQEl8qw.woff2) - format('woff2'); - unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, - U+A830-A839, U+A8E0-A8FB; + src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z11lFd2JQEl8qw.woff2) format("woff2"); + unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB; } /* latin-ext */ @font-face { - font-family: 'Poppins'; + font-family: "Poppins"; font-style: normal; font-weight: 600; - src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z1JlFd2JQEl8qw.woff2) - format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, - U+2C60-2C7F, U+A720-A7FF; + src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z1JlFd2JQEl8qw.woff2) format("woff2"); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @font-face { - font-family: 'Poppins'; + font-family: "Poppins"; font-style: normal; font-weight: 600; - src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z1xlFd2JQEk.woff2) - format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, - U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; + src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z1xlFd2JQEk.woff2) format("woff2"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, + U+2215, U+FEFF, U+FFFD; } /* latin-ext */ @font-face { - font-family: 'DM Sans'; + font-family: "DM Sans"; font-style: normal; font-weight: 400; - src: url(https://fonts.gstatic.com/s/dmsans/v6/rP2Hp2ywxg089UriCZ2IHTWEBlwu8Q.woff2) - format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, - U+2C60-2C7F, U+A720-A7FF; + src: url(https://fonts.gstatic.com/s/dmsans/v6/rP2Hp2ywxg089UriCZ2IHTWEBlwu8Q.woff2) format("woff2"); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @font-face { - font-family: 'DM Sans'; + font-family: "DM Sans"; font-style: normal; font-weight: 400; - src: url(https://fonts.gstatic.com/s/dmsans/v6/rP2Hp2ywxg089UriCZOIHTWEBlw.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, - U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; + src: url(https://fonts.gstatic.com/s/dmsans/v6/rP2Hp2ywxg089UriCZOIHTWEBlw.woff2) format("woff2"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, + U+2215, U+FEFF, U+FFFD; } /* Modal */ @@ -56,8 +49,8 @@ --text-color1: #d3d3d4; --text-color2: #ffffff; - --text-header: 'Poppins', Helvetica, sans-serif; - --text-body: 'DM Sans', Helvetica, sans-serif; + --text-header: "Poppins", Helvetica, sans-serif; + --text-body: "DM Sans", Helvetica, sans-serif; position: fixed; top: 0; @@ -210,7 +203,7 @@ #w3a-modal .w3a-spinner__mask, #w3a-modal .w3a-spinner__head { - content: ''; + content: ""; position: absolute; border-radius: 50%; } @@ -424,7 +417,9 @@ #w3a-modal .w3a-button__image { max-width: 100%; max-height: 100%; - transition: 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), visibility 0s; + transition: + 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), + visibility 0s; } #w3a-modal button.w3a-button.w3a-button--rotate .w3a-button__image { diff --git a/packages/web3-auth/src/types/Web3AuthConfig.ts b/packages/web3-auth/src/types/Web3AuthConfig.ts index 5d932ec45..8caee797c 100644 --- a/packages/web3-auth/src/types/Web3AuthConfig.ts +++ b/packages/web3-auth/src/types/Web3AuthConfig.ts @@ -1,15 +1,15 @@ export type DefaultSocialLoginConfig = { - backendUrl: string -} + backendUrl: string; +}; export type WhiteLabelDataType = { - name: string - logo: string -} + name: string; + logo: string; +}; export type SocialLoginDTO = { - chainId: string - whitelistUrls: { [P in string]: string } - network: 'mainnet' | 'testnet' - whteLableData: WhiteLabelDataType -} + chainId: string; + whitelistUrls: { [P in string]: string }; + network: "mainnet" | "testnet"; + whteLableData: WhiteLabelDataType; +}; diff --git a/packages/web3-auth/tests/web3-auth.spec.ts b/packages/web3-auth/tests/web3-auth.spec.ts index 22cb4d431..10bb465ec 100644 --- a/packages/web3-auth/tests/web3-auth.spec.ts +++ b/packages/web3-auth/tests/web3-auth.spec.ts @@ -1,6 +1,5 @@ -describe('Web3 Auth Tests', () => { - it('should have a basic test', () => { - expect(true).toBe(true); - }); +describe("Web3 Auth Tests", () => { + it("should have a basic test", () => { + expect(true).toBe(true); }); - \ No newline at end of file +}); diff --git a/packages/web3-auth/tsconfig.json b/packages/web3-auth/tsconfig.json index 9e65871af..eb424084f 100644 --- a/packages/web3-auth/tsconfig.json +++ b/packages/web3-auth/tsconfig.json @@ -6,10 +6,7 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true, + "esModuleInterop": true }, - "include": [ - "src", - "src/**/*.json" - ] -} \ No newline at end of file + "include": ["src", "src/**/*.json"] +} diff --git a/tsconfig.settings.json b/tsconfig.settings.json index 86f910d6f..fbd122a5e 100644 --- a/tsconfig.settings.json +++ b/tsconfig.settings.json @@ -1,27 +1,27 @@ { "compilerOptions": { - "target": "ES2019", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ - "module": "CommonJS", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ - "allowJs": false, /* Allow javascript files to be compiled. */ - "declaration": true, /* Generates corresponding '.d.ts' file. */ - "sourceMap": true, /* Generates corresponding '.map' file. */ - "strict": true, /* Enable all strict type-checking options. */ - "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - "strictNullChecks": true, /* Enable strict null checks. */ - "strictFunctionTypes": true, /* Enable strict checking of function types. */ - "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - "noUnusedParameters": true, /* Report errors on unused parameters. */ - "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - "skipLibCheck": true, /* Skip type checking of declaration files. */ - "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ + "target": "ES2019" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, + "module": "CommonJS" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, + "allowJs": false /* Allow javascript files to be compiled. */, + "declaration": true /* Generates corresponding '.d.ts' file. */, + "sourceMap": true /* Generates corresponding '.map' file. */, + "strict": true /* Enable all strict type-checking options. */, + "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, + "strictNullChecks": true /* Enable strict null checks. */, + "strictFunctionTypes": true /* Enable strict checking of function types. */, + "strictBindCallApply": true /* Enable strict 'bind', 'call', and 'apply' methods on functions. */, + "strictPropertyInitialization": true /* Enable strict checking of property initialization in classes. */, + "noImplicitThis": true /* Raise error on 'this' expressions with an implied 'any' type. */, + "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */, + "noUnusedParameters": true /* Report errors on unused parameters. */, + "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, + "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, + "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, + "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + "experimentalDecorators": true /* Enables experimental support for ES7 decorators. */, + "skipLibCheck": true /* Skip type checking of declaration files. */, + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */, "resolveJsonModule": true } } From 12ad7ce4bf71ee14d144ab164b9a0cd16d435d17 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 7 Sep 2023 23:21:55 +0530 Subject: [PATCH 0799/1247] update signature logic + current addresses constants --- packages/account/package.json | 2 +- .../modules/src/BatchedSessionRouterModule.ts | 32 +++++++++++-------- packages/modules/src/utils/Constants.ts | 8 ++--- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index 7fd4411cb..063657ff0 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -34,7 +34,7 @@ "access": "public" }, "dependencies": { - "@biconomy/account-contracts-v2": "npm:@biconomy/account-contracts-v2@^1.0.0" + "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0" }, "devDependencies": { "@biconomy/bundler": "^3.1.1-alpha.0", diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 4188fbfbe..9449a1deb 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -103,8 +103,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { throw new Error('Session parameters are not provided') } - const sessionDataArray = [] - const proofs = [] + const sessionDataTupleArray = [] // signer must be the same for all the sessions const sessionSigner = sessionParams[0].sessionSigner @@ -123,6 +122,8 @@ export class BatchedSessionRouterModule extends BaseValidationModule { throw new Error('Session signer is not provided.') } + const sessionDataTuple = [] + let sessionSignerData if (sessionParam.sessionID) { @@ -138,7 +139,10 @@ export class BatchedSessionRouterModule extends BaseValidationModule { throw new Error('sessionID or sessionValidationModule should be provided.') } - sessionDataArray.push(sessionSignerData) + sessionDataTuple.push(sessionSignerData.validUntil) + sessionDataTuple.push(sessionSignerData.validAfter) + sessionDataTuple.push(sessionSignerData.sessionValidationModule) + sessionDataTuple.push(sessionSignerData.sessionKeyData) const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), @@ -150,21 +154,21 @@ export class BatchedSessionRouterModule extends BaseValidationModule { const proof = this.sessionKeyManagerModule.merkleTree.getHexProof( ethers.utils.keccak256(leafDataHex) as unknown as Buffer ) - proofs.push(proof) + + sessionDataTuple.push(proof) + sessionDataTuple.push('0x') + + sessionDataTupleArray.push(sessionDataTuple) } // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) + + Logger.log('whole tuple ', sessionDataTupleArray) + Logger.log('signature ', signature) + const paddedSignature = defaultAbiCoder.encode( - ['address', 'uint48[]', 'uint48[]', 'address[]', 'bytes[]', 'bytes32[][]', 'bytes'], - [ - this.getSessionKeyManagerAddress(), - sessionDataArray.map((data) => data.validUntil), - sessionDataArray.map((data) => data.validAfter), - sessionDataArray.map((data) => data.sessionValidationModule), - sessionDataArray.map((data) => data.sessionKeyData), - proofs, - signature - ] + ['address', 'tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]', 'bytes'], + [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature] ) return paddedSignature diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts index 5ce9c6907..448c80b26 100644 --- a/packages/modules/src/utils/Constants.ts +++ b/packages/modules/src/utils/Constants.ts @@ -20,17 +20,17 @@ export const ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION = { V1_0_0: '0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e' } -export const DEFAULT_SESSION_KEY_MANAGER_MODULE = '0x000002FbFfedd9B33F4E7156F2DE8D48945E7489' +export const DEFAULT_SESSION_KEY_MANAGER_MODULE = '0x6E49e404BD70bcc4756F1057d2E2e6000cD38e1e' export const SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION = { V1_0_0: '0x000000456b395c4e107e0302553B90D1eF4a32e9', - V1_0_1: '0x000002FbFfedd9B33F4E7156F2DE8D48945E7489' + V1_0_1: '0x6E49e404BD70bcc4756F1057d2E2e6000cD38e1e' } -export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = '0x000008da71757c0e1d83ce56c823e25aa49bc058' +export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = '0x58464D89f5763FAea0eEc57AE6E28C9CdB03b41B' export const BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: '0x000008da71757c0e1d83ce56c823e25aa49bc058' + V1_0_0: '0x58464D89f5763FAea0eEc57AE6E28C9CdB03b41B' } export const DEFAULT_MULTICHAIN_MODULE = '0x000000824dc138db84FD9109fc154bdad332Aa8E' From 6dc7b7ba71152c50b991db1f62c0a3e088988bb0 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 7 Sep 2023 23:32:44 +0530 Subject: [PATCH 0800/1247] respond to PR comments --- packages/modules/src/BatchedSessionRouterModule.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 9449a1deb..4b0c92c06 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -163,8 +163,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) - Logger.log('whole tuple ', sessionDataTupleArray) - Logger.log('signature ', signature) + Logger.debug('signature ', signature) const paddedSignature = defaultAbiCoder.encode( ['address', 'tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]', 'bytes'], From a0f552664ab4e4488a2da1d1e1c25984deac8be5 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 7 Sep 2023 23:40:01 +0530 Subject: [PATCH 0801/1247] append additional session data --- packages/modules/src/BatchedSessionRouterModule.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 4b0c92c06..dc00d7686 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -156,7 +156,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { ) sessionDataTuple.push(proof) - sessionDataTuple.push('0x') + sessionDataTuple.push(sessionParam.additionalSessionData ?? '0x') sessionDataTupleArray.push(sessionDataTuple) } From f9a9c48794ac5b97e5dfc4bd78b8afac61152cc2 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 8 Sep 2023 01:02:22 +0530 Subject: [PATCH 0802/1247] not suing Logger.debug --- packages/modules/src/BatchedSessionRouterModule.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index dc00d7686..9d0ba676e 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -163,8 +163,6 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) - Logger.debug('signature ', signature) - const paddedSignature = defaultAbiCoder.encode( ['address', 'tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]', 'bytes'], [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature] From 4924c5c3dfcb08672ab18bc07880ebf1dec3aabc Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 8 Sep 2023 01:03:03 +0530 Subject: [PATCH 0803/1247] update comments --- packages/modules/src/BatchedSessionRouterModule.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 9d0ba676e..ade52d027 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -161,8 +161,8 @@ export class BatchedSessionRouterModule extends BaseValidationModule { sessionDataTupleArray.push(sessionDataTuple) } - // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) - + // Generate the padded signature + const paddedSignature = defaultAbiCoder.encode( ['address', 'tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]', 'bytes'], [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature] From 3772ae26f09118cc1b1acb550f0df26075ba2bb8 Mon Sep 17 00:00:00 2001 From: aboudjem Date: Fri, 8 Sep 2023 18:09:27 +0700 Subject: [PATCH 0804/1247] =?UTF-8?q?=F0=9F=94=A7=20optimize=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lerna.json | 2 +- package.json | 65 ++++++++++++++++++++++++++++++++------------------- tsconfig.json | 2 -- 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/lerna.json b/lerna.json index 519b24060..be069a470 100644 --- a/lerna.json +++ b/lerna.json @@ -7,5 +7,5 @@ "conventionalCommits": true } }, - "ignoreChanges": ["**/CHANGELOG.md", "**/node_modules/**", "**/package.json", "**/*.md", "**/perf/**"] + "ignoreChanges": ["**/CHANGELOG.md", "**/node_modules/**", "**/*.md", "**/perf/**"] } diff --git a/package.json b/package.json index 16cee71eb..e91f69d05 100644 --- a/package.json +++ b/package.json @@ -1,23 +1,43 @@ { "name": "biconomy-sdk", + "version": "1.0.0", + "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337, ERC-6900, and cross-chain functionalities.", + "keywords": [ + "biconomy", + "sdk", + "blockchain", + "integration", + "account abstraction", + "smart accounts", + "erc-4337", + "erc-6900", + "crosschain", + "cross-chain", + "metatransactions" + ], + "license": "MIT", + "homepage": "https://biconomy.io/docs", + "bugs": { + "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" + }, "repository": { "type": "git", "url": "https://github.com/bcnmy/biconomy-client-sdk" }, + "author": "Biconomy (https://biconomy.io)", "private": true, "scripts": { - "clean": "lerna clean", - "unbuild": "lerna run unbuild", - "build": "lerna run build --stream --npm-client=yarn", - "test": "npx jest --runInBand", - "test:coverage": "npx jest --coverage", - "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", + "build": "lerna run build", + "clean": "lerna clean && lerna run unbuild", "format": "lerna run format --npm-client=yarn", - "prettier": "lerna run prettier --npm-client=npm", - "diff": "lerna diff", - "new-version": "lerna version patch --no-git-tag-version --no-push --conventional-commits --yes", + "prettier": "lerna run prettier --npm-client=yarn", "lint": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}'", - "lint:fix": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}' --fix" + "lint:fix": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}' --fix", + "test": "yarn jest --runInBand", + "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", + "test:coverage": "yarn jest --coverage", + "diff": "lerna diff", + "release": "lerna version patch --no-git-tag-version --no-push --conventional-commits --yes" }, "changelog": { "labels": { @@ -30,32 +50,29 @@ "packages/*" ] }, - "author": "Biconomy (https://biconomy.io)", + "dependencies": { + "node-gyp": "^9.4.0", + "typescript": "^5.2.2" + }, "devDependencies": { "@types/jest": "^29.5.4", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "eslint": "^8.2.0", + "@typescript-eslint/eslint-plugin": "^6.6.0", + "@typescript-eslint/parser": "^6.6.0", + "eslint": "^8.48.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-airbnb-typescript": "17.1.0", "eslint-config-prettier": "^9.0.0", - "eslint-plugin-import": "^2.25.3", + "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-security": "^1.7.1", - "hardhat": "^2.9.9", + "hardhat": "^2.17.2", "jest": "^29.6.4", "lerna": "^7.2.0", "lerna-changelog": "^2.2.0", - "nx": "^15.8.3", + "nx": "^16.8.1", "prettier": "^3.0.3", - "rimraf": "^3.0.2", + "rimraf": "^5.0.1", "ts-jest": "^29.1.1", "ts-node": "^10.9.1" - }, - "dependencies": { - "chai": "^4.3.6", - "chai-as-promised": "^7.1.1", - "node-gyp": "^9.1.0", - "typescript": "^4.7.4" } } diff --git a/tsconfig.json b/tsconfig.json index 3f0596634..3ad9d22bd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,8 +4,6 @@ "module": "commonjs", "declaration": true, "sourceMap": true, - "allowSyntheticDefaultImports": true, - "strictNullChecks": false, "strict": true, "esModuleInterop": true, "lib": ["es2020"], From 23a457ac466e7508742f9406ad61e7a8cbbf3571 Mon Sep 17 00:00:00 2001 From: aboudjem Date: Fri, 8 Sep 2023 18:10:15 +0700 Subject: [PATCH 0805/1247] =?UTF-8?q?=F0=9F=93=9D=20update=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a5d221420..de8e7e5b8 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ const bundler: IBundler = new Bundler({ ### Paymaster -Acting as third-party intermediaries, Paymasters have the capability to sponsor gas fees for an account, provided specific predefined conditions are met. +Acting as third-party intermediaries, Paymasters have the capability to sponsor gas fees for an account, provided specific predefined conditions are met. Additionally, they can accept gas payments in ERC20 tokens from users' smart accounts, with the Paymaster managing the conversion to native tokens for gas payment. ```javascript const paymaster: IPaymaster = new BiconomyPaymaster({ From 5366f5c15a32ffb12df335d9e568341d488c1595 Mon Sep 17 00:00:00 2001 From: tomarsachin2271 Date: Fri, 8 Sep 2023 18:24:59 +0400 Subject: [PATCH 0806/1247] SMA-44 Add ERC20 implementation and interface for SessionValidationModule --- packages/modules/src/index.ts | 2 + .../interfaces/ISessionValidationModule.ts | 14 ++++ .../ERC20SessionValidationModule.ts | 69 +++++++++++++++++++ packages/modules/src/utils/Types.ts | 14 ++++ 4 files changed, 99 insertions(+) create mode 100644 packages/modules/src/interfaces/ISessionValidationModule.ts create mode 100644 packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts diff --git a/packages/modules/src/index.ts b/packages/modules/src/index.ts index e80d7c136..a6eba07bd 100644 --- a/packages/modules/src/index.ts +++ b/packages/modules/src/index.ts @@ -1,9 +1,11 @@ export * from './utils/Types' export * from './utils/Constants' export * from './interfaces/IValidationModule' +export * from './interfaces/ISessionValidationModule' export * from './BaseValidationModule' export * from './ECDSAOwnershipValidationModule' export * from './MultichainValidationModule' export * from './SessionKeyManagerModule' export * from './BatchedSessionRouterModule' +export * from './session-validation-modules/ERC20SessionValidationModule' // export * from './PasskeyValidationModule' diff --git a/packages/modules/src/interfaces/ISessionValidationModule.ts b/packages/modules/src/interfaces/ISessionValidationModule.ts new file mode 100644 index 000000000..e38cdb229 --- /dev/null +++ b/packages/modules/src/interfaces/ISessionValidationModule.ts @@ -0,0 +1,14 @@ +/** + * Interface for implementing a Session Validation Module. + * Session Validation Modules works along with SessionKeyManager + * and generate module specific sessionKeyData which is to be + * verified by SessionValidationModule on chain. + * + * @remarks sessionData is of generic type T which is specific to the module + * + * @author Sachin Tomar + */ +export interface ISessionValidationModule { + getSessionKeyData(sessionData: T): Promise + getAddress(): string +} diff --git a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts new file mode 100644 index 000000000..8972bea11 --- /dev/null +++ b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts @@ -0,0 +1,69 @@ +import { defaultAbiCoder } from 'ethers/lib/utils' +import { ISessionValidationModule } from 'interfaces/ISessionValidationModule' +import { ERC20SessionKeyData, SessionValidationModuleConfig } from 'utils/Types' + +/** + * Session validation module for ERC20 token transfers. + * It encodes session data into a sessionKeyData bytes to be verified by ERC20SessionValidationModule on chain. + * + * @author Sachin Tomar + */ +export class ERC20SessionValidationModule implements ISessionValidationModule { + moduleAddress!: string + version = 'V1_0_0' + + /** + * This constructor is private. Use the static create method to instantiate ERC20SessionValidationModule + * @param moduleConfig The configuration for the module + * @returns An instance of ERC20SessionValidationModule + */ + private constructor(moduleConfig: SessionValidationModuleConfig) { + if (!moduleConfig.moduleAddress) { + throw new Error('Module address is required') + } + this.moduleAddress = moduleConfig.moduleAddress + } + + /** + * Asynchronously creates and initializes an instance of ERC20SessionValidationModule + * @param moduleConfig The configuration for the module + * @returns A Promise that resolves to an instance of ERC20SessionValidationModule + */ + public static async create( + moduleConfig: SessionValidationModuleConfig + ): Promise { + const module = new ERC20SessionValidationModule(moduleConfig) + return module + } + + async getSessionKeyData(sessionData: ERC20SessionKeyData): Promise { + this._validateSessionKeyData(sessionData) + const sessionKeyData = defaultAbiCoder.encode( + ['address', 'address', 'address', 'uint256'], + [sessionData.sessionKey, sessionData.token, sessionData.recipient, sessionData.maxAmount] + ) + return sessionKeyData + } + + private _validateSessionKeyData(sessionData: ERC20SessionKeyData): void { + if (!sessionData) { + throw new Error('Session data is required') + } + if (!sessionData.sessionKey) { + throw new Error('Session key is required in sessionData') + } + if (!sessionData.token) { + throw new Error('Token address is required in sessionData') + } + if (!sessionData.recipient) { + throw new Error('Recipient address is required in sessionData') + } + if (!sessionData.maxAmount) { + throw new Error('MaxAmount is required in sessionData') + } + } + + getAddress(): string { + return this.moduleAddress + } +} diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 70f3156b5..2fc578355 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -82,3 +82,17 @@ export type MultiChainUserOpDto = { chainId: ChainId userOp: Partial } + +export interface BaseSessionKeyData { + sessionKey: string +} + +export interface ERC20SessionKeyData extends BaseSessionKeyData { + token: string + recipient: string + maxAmount: string +} + +export interface SessionValidationModuleConfig { + moduleAddress: string +} From ebc192a9975981368d8c640c25e438d5f15b8ebe Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Sat, 9 Sep 2023 12:58:32 +0400 Subject: [PATCH 0807/1247] buildUserOp: force encode for batch --- packages/account/src/BiconomySmartAccountV2.ts | 12 +++++++++--- packages/account/src/utils/Types.ts | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index d6ef37097..d3cb01150 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -312,12 +312,18 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { const data = transactions.map((element: Transaction) => element.data ?? '0x') const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from('0')) + if (transactions.length === 0) { + throw new Error('Transactions array cannot be empty') + } + let callData = '' - if (transactions.length === 1) { - callData = await this.encodeExecute(to[0], value[0], data[0]) - } else { + if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { callData = await this.encodeExecuteBatch(to, value, data) + } else { + // transactions.length must be 1 + callData = await this.encodeExecute(to[0], value[0], data[0]) } + let nonce = BigNumber.from(0) try { nonce = await this.getNonce() diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 975280662..c7e867b14 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -76,6 +76,7 @@ export type BuildUserOpOptions = { overrides?: Overrides skipBundlerGasEstimation?: boolean params?: ModuleInfo + forceEncodeForBatch?: boolean } export type Overrides = { From f953ce19ef2fb566185641c0bbe062f0d0bd6d58 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Sat, 9 Sep 2023 13:10:28 +0400 Subject: [PATCH 0808/1247] dummy sig for batched router module ready for testing --- .../modules/src/BatchedSessionRouterModule.ts | 79 +++++++++++++++++-- 1 file changed, 73 insertions(+), 6 deletions(-) diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index ade52d027..46e6d2009 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -28,6 +28,8 @@ export class BatchedSessionRouterModule extends BaseValidationModule { moduleAddress!: string sessionManagerModuleAddress!: string sessionKeyManagerModule!: SessionKeyManagerModule + readonly mockEcdsaSessionKeySig: string = + '0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b' /** * This constructor is private. Use the static create method to instantiate SessionKeyManagerModule * @param moduleConfig The configuration for the module @@ -162,7 +164,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { } // Generate the padded signature - + const paddedSignature = defaultAbiCoder.encode( ['address', 'tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]', 'bytes'], [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature] @@ -215,12 +217,77 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @returns Dummy signature */ // Review - // Will have it's own // TODO + // instead of search params it could be actual leaves info retrieved beforehand async getDummySignature(params?: ModuleInfo): Promise { - Logger.log('userful params', params) - const moduleAddress = ethers.utils.getAddress(this.getAddress()) - const dynamicPart = moduleAddress.substring(2).padEnd(40, '0') - return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000db3d753a1da5a6074a9f74f39a0a779d3300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000bfe121a6dcf92c49f6c2ebd4f306ba0ba0ab6f1c000000000000000000000000da5289fcaaf71d52a80a254da614a192b693e97700000000000000000000000042138576848e839827585a3539305774d36b96020000000000000000000000000000000000000000000000000000000002faf08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041feefc797ef9e9d8a6a41266a85ddf5f85c8f2a3d2654b10b415d348b150dabe82d34002240162ed7f6b7ffbc40162b10e62c3e35175975e43659654697caebfe1c00000000000000000000000000000000000000000000000000000000000000` + const sessionParams = params?.batchSessionParams + if (!sessionParams || sessionParams.length === 0) { + throw new Error('Session parameters are not provided') + } + + const sessionDataTupleArray = [] + + // if needed we could do mock signature over userOpHashAndModuleAddress + + // signer must be the same for all the sessions + const sessionSigner = sessionParams[0].sessionSigner + + for (const sessionParam of sessionParams) { + if (!sessionParam.sessionSigner) { + throw new Error('Session signer is not provided.') + } + + const sessionDataTuple = [] + + let sessionSignerData + + if (sessionParam.sessionID) { + sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ + sessionID: sessionParam.sessionID + }) + } else if (sessionParam.sessionValidationModule) { + sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ + sessionValidationModule: sessionParam.sessionValidationModule, + sessionPublicKey: await sessionSigner.getAddress() + }) + } else { + throw new Error('sessionID or sessionValidationModule should be provided.') + } + + sessionDataTuple.push(sessionSignerData.validUntil) + sessionDataTuple.push(sessionSignerData.validAfter) + sessionDataTuple.push(sessionSignerData.sessionValidationModule) + sessionDataTuple.push(sessionSignerData.sessionKeyData) + + const leafDataHex = hexConcat([ + hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), + hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), + hexZeroPad(sessionSignerData.sessionValidationModule, 20), + sessionSignerData.sessionKeyData + ]) + + const proof = this.sessionKeyManagerModule.merkleTree.getHexProof( + ethers.utils.keccak256(leafDataHex) as unknown as Buffer + ) + + sessionDataTuple.push(proof) + sessionDataTuple.push(sessionParam.additionalSessionData ?? '0x') + + sessionDataTupleArray.push(sessionDataTuple) + } + + // Generate the padded signature + + const paddedSignature = defaultAbiCoder.encode( + ['address', 'tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]', 'bytes'], + [this.getSessionKeyManagerAddress(), sessionDataTupleArray, this.mockEcdsaSessionKeySig] + ) + + const dummySig = ethers.utils.defaultAbiCoder.encode( + ['bytes', 'address'], + [paddedSignature, this.getAddress()] + ) + + return dummySig } /** From 561eb0019cd3b9c882bf6744c461e86cc0ff4988 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Sat, 9 Sep 2023 13:20:50 +0400 Subject: [PATCH 0809/1247] init with nonce options for account V2 --- packages/account/src/BiconomySmartAccountV2.ts | 13 ++++++++++--- packages/account/src/utils/Constants.ts | 2 ++ packages/account/src/utils/Types.ts | 6 ++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index d6ef37097..88bca7ff9 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -119,10 +119,12 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return this } - async getNonce(): Promise { + // Could call it nonce space + async getNonce(nonceKey?: number): Promise { + const nonceSpace = nonceKey ?? 0 if (await this.isAccountDeployed(await this.getAccountAddress())) { const accountContract = await this._getAccountContract() - return await accountContract.nonce() + return await accountContract.nonce(nonceSpace) } return BigNumber.from(0) } @@ -320,7 +322,12 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } let nonce = BigNumber.from(0) try { - nonce = await this.getNonce() + if (buildUseropDto?.nonceOptions?.nonceOverride) { + nonce = BigNumber.from(buildUseropDto?.nonceOptions?.nonceOverride) + } else { + const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0 + nonce = await this.getNonce(_nonceSpace) + } } catch (error) { // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account } diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index d43c5cf27..73fa9098a 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -36,11 +36,13 @@ export const ENTRYPOINT_ADDRESSES_BY_VERSION: EntryPointAddressesByVersion = { V0_0_6: '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789' } +// TODO // Update with latest factory address export const BICONOMY_FACTORY_ADDRESSES_BY_VERSION: BiconomyFactoriesByVersion = { V1_0_0: '0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c', V2_0_0: '0x00000016FD385cEE5116EF68C189733679770338' } +// TODO // Update with latest implementation address which includes 2D nonce interface export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementationsByVersion = { V1_0_0: '0x00006b7e42e01957da540dc6a8f7c30c4d816af5', V2_0_0: '0x000000988555091db5633a5Be66d563EfB48cB95' diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 975280662..6816a7450 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -76,6 +76,12 @@ export type BuildUserOpOptions = { overrides?: Overrides skipBundlerGasEstimation?: boolean params?: ModuleInfo + nonceOptions?: NonceOptions +} + +export type NonceOptions = { + nonceKey?: number + nonceOverride?: number } export type Overrides = { From 4ecc6b03ea965a4f19167c3f990bad7e5eec664a Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 11 Sep 2023 16:54:10 +0400 Subject: [PATCH 0810/1247] update abis and constants --- packages/account/src/utils/Constants.ts | 12 +- .../SmartAccountFactory_v2.0.0.json | 585 ++-- .../biconomy_v2.0.0/SmartAccount_v2.0.0.json | 2357 +++++++++-------- packages/modules/src/utils/Constants.ts | 8 +- 4 files changed, 1483 insertions(+), 1479 deletions(-) diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 73fa9098a..a749ead50 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -18,17 +18,17 @@ export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { } // will always be latest factory address -export const DEFAULT_BICONOMY_FACTORY_ADDRESS = '0x00000016FD385cEE5116EF68C189733679770338' +export const DEFAULT_BICONOMY_FACTORY_ADDRESS = '0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5' export const BICONOMY_FACTORY_ADDRESSES: BiconomyFactories = { '0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c': 'V1_0_0', - '0x00000016FD385cEE5116EF68C189733679770338': 'V2_0_0' + '0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5': 'V2_0_0' } // will always be latest implementation address -export const DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS = '0x000000988555091db5633a5Be66d563EfB48cB95' +export const DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS = '0x0000002512019Dafb59528B82CB92D3c5D2423aC' export const BICONOMY_IMPLEMENTATION_ADDRESSES: BiconomyImplementations = { '0x00006b7e42e01957da540dc6a8f7c30c4d816af5': 'V1_0_0', - '0x000000988555091db5633a5Be66d563EfB48cB95': 'V2_0_0' + '0x0000002512019Dafb59528B82CB92D3c5D2423aC': 'V2_0_0' } export const ENTRYPOINT_ADDRESSES_BY_VERSION: EntryPointAddressesByVersion = { @@ -39,13 +39,13 @@ export const ENTRYPOINT_ADDRESSES_BY_VERSION: EntryPointAddressesByVersion = { // TODO // Update with latest factory address export const BICONOMY_FACTORY_ADDRESSES_BY_VERSION: BiconomyFactoriesByVersion = { V1_0_0: '0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c', - V2_0_0: '0x00000016FD385cEE5116EF68C189733679770338' + V2_0_0: '0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5' } // TODO // Update with latest implementation address which includes 2D nonce interface export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementationsByVersion = { V1_0_0: '0x00006b7e42e01957da540dc6a8f7c30c4d816af5', - V2_0_0: '0x000000988555091db5633a5Be66d563EfB48cB95' + V2_0_0: '0x0000002512019Dafb59528B82CB92D3c5D2423aC' } export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101] diff --git a/packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json b/packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json index 4787fe7c6..317e05a87 100644 --- a/packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json +++ b/packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json @@ -1,294 +1,293 @@ { - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccountFactory", - "sourceName": "contracts/smart-account/factory/SmartAccountFactory.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_basicImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "initialAuthModule", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "initialAuthModule", - "type": "address" - } - ], - "name": "AccountCreationWithoutIndex", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "accountCreationCode", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "epAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - } - ], - "name": "addStake", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "basicImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - } - ], - "name": "deployAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "deployCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getAddressForCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimalHandler", - "outputs": [ - { - "internalType": "contract DefaultCallbackHandler", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "epAddress", - "type": "address" - } - ], - "name": "unlockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "epAddress", - "type": "address" - }, - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - } - ], - "name": "withdrawStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60c06040523480156200001157600080fd5b506040516200166538038062001665833981016040819052620000349162000170565b806200004033620000f5565b6200004b81620000f5565b506001600160a01b038216620000a75760405162461bcd60e51b815260206004820152601d60248201527f696d706c656d656e746174696f6e2063616e6e6f74206265207a65726f000000604482015260640160405180910390fd5b6001600160a01b038216608052604051620000c29062000145565b604051809103906000f080158015620000df573d6000803e3d6000fd5b506001600160a01b031660a05250620001a89050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105e6806200107f83390190565b80516001600160a01b03811681146200016b57600080fd5b919050565b600080604083850312156200018457600080fd5b6200018f8362000153565b91506200019f6020840162000153565b90509250929050565b60805160a051610e95620001ea6000396000818161013d015261097d015260008181610219015281816102c10152818161057a01526107d20152610e956000f3fe6080604052600436106100c75760003560e01c8063743b1e0311610074578063daf0dfc81161004e578063daf0dfc814610207578063df20ffbc1461023b578063f2fde38b1461025b57600080fd5b8063743b1e03146101a95780638da5cb5b146101c9578063b36f9705146101e757600080fd5b806345171159116100a5578063451711591461015f5780634a1ce59914610174578063715018a61461019457600080fd5b80632e7a1a83146100cc57806331c884df146101095780633b3cb1431461012b575b600080fd5b3480156100d857600080fd5b506100ec6100e7366004610b27565b61027b565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561011557600080fd5b5061011e6103a0565b6040516101009190610ba7565b34801561013757600080fd5b506100ec7f000000000000000000000000000000000000000000000000000000000000000081565b61017261016d366004610bda565b6103ca565b005b34801561018057600080fd5b5061017261018f366004610c1c565b610486565b3480156101a057600080fd5b5061017261052f565b3480156101b557600080fd5b506100ec6101c4366004610c40565b610543565b3480156101d557600080fd5b506000546001600160a01b03166100ec565b3480156101f357600080fd5b50610172610202366004610c95565b61069d565b34801561021357600080fd5b506100ec7f000000000000000000000000000000000000000000000000000000000000000081565b34801561024757600080fd5b506100ec610256366004610b27565b61074f565b34801561026757600080fd5b50610172610276366004610c1c565b6108e9565b600080610289868686610979565b905060006040518060200161029d90610abc565b601f1982820381018352601f9091011660408190526102ea91906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690602001610cc3565b60408051808303601f1901815282825284516020958601208584015282820196909652805180830382018152606080840183528151918601919091208751978601979097207fff0000000000000000000000000000000000000000000000000000000000000060808501523090911b6bffffffffffffffffffffffff19166081840152609583019690965260b5808301969096528051808303909601865260d59091019052508251920191909120949350505050565b6060604051806020016103b290610abc565b601f1982820381018352601f90910116604052919050565b6103d26109fa565b6001600160a01b0382166104225760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964204550206164647265737360701b60448201526064015b60405180910390fd5b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b15801561046957600080fd5b505af115801561047d573d6000803e3d6000fd5b50505050505050565b61048e6109fa565b6001600160a01b0381166104d95760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964204550206164647265737360701b6044820152606401610419565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561051457600080fd5b505af1158015610528573d6000803e3d6000fd5b5050505050565b6105376109fa565b6105416000610a54565b565b6000806040518060200161055690610abc565b601f1982820381018352601f9091011660408190526105a391906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690602001610cc3565b60405160208183030381529060405290508051816020016000f091506001600160a01b0382166106155760405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606401610419565b6000610622868686610979565b905060008082511115610653576000808351602085016000885af16040513d6000823e8161064e573d81fd5b519150505b806001600160a01b0316846001600160a01b03167f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf65760405160405180910390a35050509392505050565b6106a56109fa565b6001600160a01b0382166106f05760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964204550206164647265737360701b6044820152606401610419565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561073357600080fd5b505af1158015610747573d6000803e3d6000fd5b505050505050565b60008061075d868686610979565b90506000818051906020012084604051602001610784929190918252602082015260400190565b6040516020818303038152906040528051906020012090506000604051806020016107ae90610abc565b601f1982820381018352601f9091011660408190526107fb91906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690602001610cc3565b6040516020818303038152906040529050818151826020016000f593506001600160a01b03841661086e5760405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606401610419565b82516000901561089c576000808551602087016000895af16040513d6000823e81610897573d81fd5b519150505b85816001600160a01b0316866001600160a01b03167f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f260405160405180910390a450505050949350505050565b6108f16109fa565b6001600160a01b03811661096d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610419565b61097681610a54565b50565b60607f00000000000000000000000000000000000000000000000000000000000000008484846040516024016109b29493929190610ce5565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16631bc6fec760e11b17905290509392505050565b6000546001600160a01b031633146105415760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610419565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61012d80610d3383390190565b6001600160a01b038116811461097657600080fd5b60008083601f840112610af057600080fd5b50813567ffffffffffffffff811115610b0857600080fd5b602083019150836020828501011115610b2057600080fd5b9250929050565b60008060008060608587031215610b3d57600080fd5b8435610b4881610ac9565b9350602085013567ffffffffffffffff811115610b6457600080fd5b610b7087828801610ade565b9598909750949560400135949350505050565b60005b83811015610b9e578181015183820152602001610b86565b50506000910152565b6020815260008251806020840152610bc6816040850160208701610b83565b601f01601f19169190910160400192915050565b60008060408385031215610bed57600080fd5b8235610bf881610ac9565b9150602083013563ffffffff81168114610c1157600080fd5b809150509250929050565b600060208284031215610c2e57600080fd5b8135610c3981610ac9565b9392505050565b600080600060408486031215610c5557600080fd5b8335610c6081610ac9565b9250602084013567ffffffffffffffff811115610c7c57600080fd5b610c8886828701610ade565b9497909650939450505050565b60008060408385031215610ca857600080fd5b8235610cb381610ac9565b91506020830135610c1181610ac9565b60008351610cd5818460208801610b83565b9190910191825250602001919050565b60006001600160a01b03808716835280861660208401525060606040830152826060830152828460808401376000608084840101526080601f19601f85011683010190509594505050505056fe608060405234801561001057600080fd5b5060405161012d38038061012d83398101604081905261002f91610090565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e20616464726573730000604482015260640160405180910390fd5b30556100c0565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b605f806100ce6000396000f3fe608060405230543660008037600080366000845af43d6000803e8080156024573d6000f35b3d6000fdfea2646970667358221220197bddcaa4be7d28115df8f476b8dcefa8ba4c9dbe31f7caf1b96f809c0f9e5264736f6c63430008110033a2646970667358221220f4fd3e32727b0d5c1d67ed3cf9aa3b81178731a5e8396a4a639deb519f2d4c4e64736f6c63430008110033608060405234801561001057600080fd5b506105c6806100206000396000f3fe608060405234801561001057600080fd5b506004361061007c5760003560e01c8063a3f4df7e1161005b578063a3f4df7e146100fb578063bc197c8114610144578063f23a6e6114610166578063ffa1ad741461018657600080fd5b806223de291461008157806301ffc9a71461009b578063150b7a02146100c3575b600080fd5b61009961008f3660046102a0565b5050505050505050565b005b6100ae6100a936600461034b565b6101c2565b60405190151581526020015b60405180910390f35b6100e26100d136600461037c565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016100ba565b6101376040518060400160405280601881526020017f44656661756c742043616c6c6261636b2048616e646c6572000000000000000081525081565b6040516100ba91906103eb565b6100e261015236600461047e565b63bc197c8160e01b98975050505050505050565b6100e2610174366004610518565b63f23a6e6160e01b9695505050505050565b6101376040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60006001600160e01b03198216630271189760e51b14806101f357506001600160e01b03198216630a85bd0160e11b145b8061020d57506001600160e01b031982166223de2960e01b145b8061022857506001600160e01b031982166301ffc9a760e01b145b92915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461025257600080fd5b919050565b60008083601f84011261026957600080fd5b50813567ffffffffffffffff81111561028157600080fd5b60208301915083602082850101111561029957600080fd5b9250929050565b60008060008060008060008060c0898b0312156102bc57600080fd5b6102c58961022e565b97506102d360208a0161022e565b96506102e160408a0161022e565b955060608901359450608089013567ffffffffffffffff8082111561030557600080fd5b6103118c838d01610257565b909650945060a08b013591508082111561032a57600080fd5b506103378b828c01610257565b999c989b5096995094979396929594505050565b60006020828403121561035d57600080fd5b81356001600160e01b03198116811461037557600080fd5b9392505050565b60008060008060006080868803121561039457600080fd5b61039d8661022e565b94506103ab6020870161022e565b935060408601359250606086013567ffffffffffffffff8111156103ce57600080fd5b6103da88828901610257565b969995985093965092949392505050565b600060208083528351808285015260005b81811015610418578581018301518582016040015282016103fc565b506000604082860101526040601f19601f8301168501019250505092915050565b60008083601f84011261044b57600080fd5b50813567ffffffffffffffff81111561046357600080fd5b6020830191508360208260051b850101111561029957600080fd5b60008060008060008060008060a0898b03121561049a57600080fd5b6104a38961022e565b97506104b160208a0161022e565b9650604089013567ffffffffffffffff808211156104ce57600080fd5b6104da8c838d01610439565b909850965060608b01359150808211156104f357600080fd5b6104ff8c838d01610439565b909650945060808b013591508082111561032a57600080fd5b60008060008060008060a0878903121561053157600080fd5b61053a8761022e565b95506105486020880161022e565b94506040870135935060608701359250608087013567ffffffffffffffff81111561057257600080fd5b61057e89828a01610257565b979a969950949750929593949250505056fea26469706673582212205cd0229d5efcf14ee448f46f7f632534cd99cf6a9cf9b86f746ae9d6043c302d64736f6c63430008110033", - "deployedBytecode": "0x6080604052600436106100c75760003560e01c8063743b1e0311610074578063daf0dfc81161004e578063daf0dfc814610207578063df20ffbc1461023b578063f2fde38b1461025b57600080fd5b8063743b1e03146101a95780638da5cb5b146101c9578063b36f9705146101e757600080fd5b806345171159116100a5578063451711591461015f5780634a1ce59914610174578063715018a61461019457600080fd5b80632e7a1a83146100cc57806331c884df146101095780633b3cb1431461012b575b600080fd5b3480156100d857600080fd5b506100ec6100e7366004610b27565b61027b565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561011557600080fd5b5061011e6103a0565b6040516101009190610ba7565b34801561013757600080fd5b506100ec7f000000000000000000000000000000000000000000000000000000000000000081565b61017261016d366004610bda565b6103ca565b005b34801561018057600080fd5b5061017261018f366004610c1c565b610486565b3480156101a057600080fd5b5061017261052f565b3480156101b557600080fd5b506100ec6101c4366004610c40565b610543565b3480156101d557600080fd5b506000546001600160a01b03166100ec565b3480156101f357600080fd5b50610172610202366004610c95565b61069d565b34801561021357600080fd5b506100ec7f000000000000000000000000000000000000000000000000000000000000000081565b34801561024757600080fd5b506100ec610256366004610b27565b61074f565b34801561026757600080fd5b50610172610276366004610c1c565b6108e9565b600080610289868686610979565b905060006040518060200161029d90610abc565b601f1982820381018352601f9091011660408190526102ea91906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690602001610cc3565b60408051808303601f1901815282825284516020958601208584015282820196909652805180830382018152606080840183528151918601919091208751978601979097207fff0000000000000000000000000000000000000000000000000000000000000060808501523090911b6bffffffffffffffffffffffff19166081840152609583019690965260b5808301969096528051808303909601865260d59091019052508251920191909120949350505050565b6060604051806020016103b290610abc565b601f1982820381018352601f90910116604052919050565b6103d26109fa565b6001600160a01b0382166104225760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964204550206164647265737360701b60448201526064015b60405180910390fd5b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b15801561046957600080fd5b505af115801561047d573d6000803e3d6000fd5b50505050505050565b61048e6109fa565b6001600160a01b0381166104d95760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964204550206164647265737360701b6044820152606401610419565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561051457600080fd5b505af1158015610528573d6000803e3d6000fd5b5050505050565b6105376109fa565b6105416000610a54565b565b6000806040518060200161055690610abc565b601f1982820381018352601f9091011660408190526105a391906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690602001610cc3565b60405160208183030381529060405290508051816020016000f091506001600160a01b0382166106155760405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606401610419565b6000610622868686610979565b905060008082511115610653576000808351602085016000885af16040513d6000823e8161064e573d81fd5b519150505b806001600160a01b0316846001600160a01b03167f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf65760405160405180910390a35050509392505050565b6106a56109fa565b6001600160a01b0382166106f05760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964204550206164647265737360701b6044820152606401610419565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561073357600080fd5b505af1158015610747573d6000803e3d6000fd5b505050505050565b60008061075d868686610979565b90506000818051906020012084604051602001610784929190918252602082015260400190565b6040516020818303038152906040528051906020012090506000604051806020016107ae90610abc565b601f1982820381018352601f9091011660408190526107fb91906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690602001610cc3565b6040516020818303038152906040529050818151826020016000f593506001600160a01b03841661086e5760405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606401610419565b82516000901561089c576000808551602087016000895af16040513d6000823e81610897573d81fd5b519150505b85816001600160a01b0316866001600160a01b03167f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f260405160405180910390a450505050949350505050565b6108f16109fa565b6001600160a01b03811661096d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610419565b61097681610a54565b50565b60607f00000000000000000000000000000000000000000000000000000000000000008484846040516024016109b29493929190610ce5565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16631bc6fec760e11b17905290509392505050565b6000546001600160a01b031633146105415760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610419565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61012d80610d3383390190565b6001600160a01b038116811461097657600080fd5b60008083601f840112610af057600080fd5b50813567ffffffffffffffff811115610b0857600080fd5b602083019150836020828501011115610b2057600080fd5b9250929050565b60008060008060608587031215610b3d57600080fd5b8435610b4881610ac9565b9350602085013567ffffffffffffffff811115610b6457600080fd5b610b7087828801610ade565b9598909750949560400135949350505050565b60005b83811015610b9e578181015183820152602001610b86565b50506000910152565b6020815260008251806020840152610bc6816040850160208701610b83565b601f01601f19169190910160400192915050565b60008060408385031215610bed57600080fd5b8235610bf881610ac9565b9150602083013563ffffffff81168114610c1157600080fd5b809150509250929050565b600060208284031215610c2e57600080fd5b8135610c3981610ac9565b9392505050565b600080600060408486031215610c5557600080fd5b8335610c6081610ac9565b9250602084013567ffffffffffffffff811115610c7c57600080fd5b610c8886828701610ade565b9497909650939450505050565b60008060408385031215610ca857600080fd5b8235610cb381610ac9565b91506020830135610c1181610ac9565b60008351610cd5818460208801610b83565b9190910191825250602001919050565b60006001600160a01b03808716835280861660208401525060606040830152826060830152828460808401376000608084840101526080601f19601f85011683010190509594505050505056fe608060405234801561001057600080fd5b5060405161012d38038061012d83398101604081905261002f91610090565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e20616464726573730000604482015260640160405180910390fd5b30556100c0565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b605f806100ce6000396000f3fe608060405230543660008037600080366000845af43d6000803e8080156024573d6000f35b3d6000fdfea2646970667358221220197bddcaa4be7d28115df8f476b8dcefa8ba4c9dbe31f7caf1b96f809c0f9e5264736f6c63430008110033a2646970667358221220f4fd3e32727b0d5c1d67ed3cf9aa3b81178731a5e8396a4a639deb519f2d4c4e64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} - } - \ No newline at end of file + "_format": "hh-sol-artifact-1", + "contractName": "SmartAccountFactory", + "sourceName": "contracts/smart-account/factory/SmartAccountFactory.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_basicImplementation", + "type": "address" + }, + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "initialAuthModule", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "AccountCreation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "initialAuthModule", + "type": "address" + } + ], + "name": "AccountCreationWithoutIndex", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "accountCreationCode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "epAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "unstakeDelaySec", + "type": "uint32" + } + ], + "name": "addStake", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "basicImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleSetupContract", + "type": "address" + }, + { + "internalType": "bytes", + "name": "moduleSetupData", + "type": "bytes" + } + ], + "name": "deployAccount", + "outputs": [ + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleSetupContract", + "type": "address" + }, + { + "internalType": "bytes", + "name": "moduleSetupData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "deployCounterFactualAccount", + "outputs": [ + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleSetupContract", + "type": "address" + }, + { + "internalType": "bytes", + "name": "moduleSetupData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getAddressForCounterFactualAccount", + "outputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minimalHandler", + "outputs": [ + { + "internalType": "contract DefaultCallbackHandler", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "epAddress", + "type": "address" + } + ], + "name": "unlockStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "epAddress", + "type": "address" + }, + { + "internalType": "address payable", + "name": "withdrawAddress", + "type": "address" + } + ], + "name": "withdrawStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c0346101445761171b906001600160401b0390601f38849003908101601f1916820190838211838310176100ea57808391604096879485528339810103126101445761006861005a602061005384610149565b9301610149565b6100633361015d565b61015d565b6001600160a01b03811615610100576080528151906104e690818301908111838210176100ea578291611235833903906000f080156100df5760a0525161109090816101a582396080518181816101ed015281816105a70152818161074601526107ef015260a05181818161039e0152610b7c0152f35b50513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b825162461bcd60e51b815260206004820152601d60248201527f696d706c656d656e746174696f6e2063616e6e6f74206265207a65726f0000006044820152606490fd5b600080fd5b51906001600160a01b038216820361014457565b600080546001600160a01b039283166001600160a01b03198216811783559216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fe60806040526004361015610013575b600080fd5b60003560e01c80632e7a1a831461010357806331c884df146100fa5780633b3cb143146100f157806345171159146100e85780634a1ce599146100df578063715018a6146100d6578063743b1e03146100cd5780638da5cb5b146100c4578063b36f9705146100bb578063daf0dfc8146100b2578063df20ffbc146100a95763f2fde38b146100a157600080fd5b61000e6108a6565b5061000e61076a565b5061000e610725565b5061000e6106a1565b5061000e610679565b5061000e610533565b5061000e6104cb565b5061000e61045f565b5061000e6103c2565b5061000e61037d565b5061000e61031d565b5061000e61018c565b6001600160a01b0381160361000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020838186019501011161000e57565b90606060031983011261000e576004356101648161010c565b916024359067ffffffffffffffff821161000e576101849160040161011d565b909160443590565b503461000e576102f66102dc6102d06101b16101a73661014b565b9392919091610b54565b6102c1610120916020926101c6848201610a8e565b90808252610bdb858301396040519461024a61025687610214888201956001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087610a9e565b0394610228601f19968781018b528a610a5f565b8781519101209260405192839189830195869091604092825260208201520190565b03858101835282610a5f565b519020945190206040517fff000000000000000000000000000000000000000000000000000000000000009481019485523060601b6bffffffffffffffffffffffff191660018601526015850195909552603584015291929182605585015b03908101835282610a5f565b5190206001600160a01b031690565b6001600160a01b031690565b6040516001600160a01b0390911681529081906020820190565b0390f35b60005b83811061030d5750506000910152565b81810151838201526020016102fd565b503461000e57600036600319011261000e5761036f60406101208151906103476020820183610a5f565b8082526020820190610cfb8239825193849260208452518092816020860152858501906102fa565b601f01601f19168101030190f35b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b506000604036600319011261045c576004356103dd8161010c565b816024359163ffffffff8316809303610458576001600160a01b0390610401610991565b169161040e8315156109e9565b823b1561045857602460405180948193621cb65b60e51b8352600483015234905af1801561044b575b61043f575080f35b61044890610a35565b80f35b610453610a81565b610437565b5080fd5b80fd5b503461000e576000602036600319011261045c57806001600160a01b036004356104888161010c565b610490610991565b1661049c8115156109e9565b803b156104c857819060046040518094819363bb9fe6bf60e01b83525af1801561044b5761043f575080f35b50fd5b503461000e5760008060031936011261045c576104e6610991565b806001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461000e57604036600319011261000e576004356105518161010c565b60243567ffffffffffffffff811161000e5761057190369060040161011d565b6101209161058160208401610a8e565b92808452610e1b60208501396105fe604051926105df846105d16001600160a01b0397887f0000000000000000000000000000000000000000000000000000000000000000169060208401610a9e565b03601f198101865285610a5f565b835160009460200185f092858416966105f9881515610b08565b610b54565b805183918161064c575b50506040519485946102f69416917f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf6579080a36001600160a01b031682526020820190565b8296945090602083920182855af193604051943d82873e1561067557935191936102f638610608565b3d85fd5b503461000e57600036600319011261000e5760206001600160a01b0360005416604051908152f35b503461000e576000604036600319011261045c576004356106c18161010c565b81602435916106cf8361010c565b6106d7610991565b6001600160a01b03809116926106ee8415156109e9565b833b156107215760249083604051958694859363611d2e7560e11b85521660048401525af1801561044b5761043f575080f35b8280fd5b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461000e5761077c6101a73661014b565b9081519160208082019384209260405193846107a78385830193849091604092825260208201520190565b03946107bb601f1996878101835282610a5f565b519020610120946107cd848701610a8e565b95808752610f3b8588013961081860405191826102b56001600160a01b03998a7f00000000000000000000000000000000000000000000000000000000000000001690898401610a9e565b8051906000940184f591848316610830811515610abc565b8194518061087d575b50604051965086956102f69516917f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f29080a46001600160a01b031682526020820190565b82978380939750865af194604051953d82883e156108a2579451939485949338610839565b3d86fd5b503461000e57602036600319011261000e576004356108c48161010c565b6108cc610991565b6001600160a01b0380911680156109265760009182548273ffffffffffffffffffffffffffffffffffffffff198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608490fd5b6001600160a01b036000541633036109a557565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156109f057565b60405162461bcd60e51b815260206004820152601260248201527f496e76616c6964204550206164647265737300000000000000000000000000006044820152606490fd5b67ffffffffffffffff8111610a4957604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a4957604052565b506040513d6000823e3d90fd5b90610a9c6040519283610a5f565b565b6020929190610ab48492828151948592016102fa565b019081520190565b15610ac357565b60405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606490fd5b15610b0f57565b60405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606490fd5b60a490610bd7929380604051958693631bc6fec760e11b60208601526001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016602487015216604485015260606064850152816084850152848401376000838284010152601f80199101168101036084810184520182610a5f565b9056fe6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033a2646970667358221220cc3855215776915d9c3562b4380fe9fbf7afb53b9434cabc4802d531f12df64364736f6c6343000811003360808060405234610016576104ca908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816223de291461031b57816301ffc9a71461029457508063150b7a021461023d578063a3f4df7e146101d6578063bc197c811461014c578063f23a6e61146100f25763ffa1ad741461007157600080fd5b346100ee57816003193601126100ee578051918183019083821067ffffffffffffffff8311176100db57506100d793508152600582527f312e302e300000000000000000000000000000000000000000000000000000006020830152519182918261041a565b0390f35b634e487b7160e01b815260418552602490fd5b5080fd5b5090346101495760a03660031901126101495761010d6103a1565b506101166103c9565b506084359067ffffffffffffffff8211610149575060209261013a913691016103ec565b50505163f23a6e6160e01b8152f35b80fd5b5090346101495760a0366003190112610149576101676103a1565b506101706103c9565b5067ffffffffffffffff906044358281116100ee576101929036908601610463565b50506064358281116100ee576101ab9036908601610463565b505060843591821161014957506020926101c7913691016103ec565b50505163bc197c8160e01b8152f35b50346100ee57816003193601126100ee578051918183019083821067ffffffffffffffff8311176100db57506100d793508152601882527f44656661756c742043616c6c6261636b2048616e646c657200000000000000006020830152519182918261041a565b509034610149576080366003190112610149576102586103a1565b506102616103c9565b506064359067ffffffffffffffff82116101495750602092610285913691016103ec565b505051630a85bd0160e11b8152f35b83908534610317576020366003190112610317573563ffffffff60e01b81168091036103175760209250630271189760e51b8114908115610306575b81156102f6575b81156102e5575b5015158152f35b6301ffc9a760e01b149050836102de565b6223de2960e01b811491506102d7565b630a85bd0160e11b811491506102d0565b8280fd5b8385346100ee5760c03660031901126100ee576103366103a1565b5061033f6103c9565b5060443573ffffffffffffffffffffffffffffffffffffffff8116036100ee5767ffffffffffffffff9060843582811161039d5761038090369083016103ec565b505060a43591821161031757610398913691016103ec565b505080f35b8380fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103c457565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103c457565b9181601f840112156103c45782359167ffffffffffffffff83116103c457602083818601950101116103c457565b6020808252825181830181905290939260005b82811061044f57505060409293506000838284010152601f8019910116010190565b81810186015184820160400152850161042d565b9181601f840112156103c45782359167ffffffffffffffff83116103c4576020808501948460051b0101116103c45756fea2646970667358221220e22ad453b03efac358b2f092a996c1bf999c6cba4b1e5c7d1e917139d697fca764736f6c63430008110033", + "deployedBytecode": "0x60806040526004361015610013575b600080fd5b60003560e01c80632e7a1a831461010357806331c884df146100fa5780633b3cb143146100f157806345171159146100e85780634a1ce599146100df578063715018a6146100d6578063743b1e03146100cd5780638da5cb5b146100c4578063b36f9705146100bb578063daf0dfc8146100b2578063df20ffbc146100a95763f2fde38b146100a157600080fd5b61000e6108a6565b5061000e61076a565b5061000e610725565b5061000e6106a1565b5061000e610679565b5061000e610533565b5061000e6104cb565b5061000e61045f565b5061000e6103c2565b5061000e61037d565b5061000e61031d565b5061000e61018c565b6001600160a01b0381160361000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020838186019501011161000e57565b90606060031983011261000e576004356101648161010c565b916024359067ffffffffffffffff821161000e576101849160040161011d565b909160443590565b503461000e576102f66102dc6102d06101b16101a73661014b565b9392919091610b54565b6102c1610120916020926101c6848201610a8e565b90808252610bdb858301396040519461024a61025687610214888201956001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087610a9e565b0394610228601f19968781018b528a610a5f565b8781519101209260405192839189830195869091604092825260208201520190565b03858101835282610a5f565b519020945190206040517fff000000000000000000000000000000000000000000000000000000000000009481019485523060601b6bffffffffffffffffffffffff191660018601526015850195909552603584015291929182605585015b03908101835282610a5f565b5190206001600160a01b031690565b6001600160a01b031690565b6040516001600160a01b0390911681529081906020820190565b0390f35b60005b83811061030d5750506000910152565b81810151838201526020016102fd565b503461000e57600036600319011261000e5761036f60406101208151906103476020820183610a5f565b8082526020820190610cfb8239825193849260208452518092816020860152858501906102fa565b601f01601f19168101030190f35b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b506000604036600319011261045c576004356103dd8161010c565b816024359163ffffffff8316809303610458576001600160a01b0390610401610991565b169161040e8315156109e9565b823b1561045857602460405180948193621cb65b60e51b8352600483015234905af1801561044b575b61043f575080f35b61044890610a35565b80f35b610453610a81565b610437565b5080fd5b80fd5b503461000e576000602036600319011261045c57806001600160a01b036004356104888161010c565b610490610991565b1661049c8115156109e9565b803b156104c857819060046040518094819363bb9fe6bf60e01b83525af1801561044b5761043f575080f35b50fd5b503461000e5760008060031936011261045c576104e6610991565b806001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461000e57604036600319011261000e576004356105518161010c565b60243567ffffffffffffffff811161000e5761057190369060040161011d565b6101209161058160208401610a8e565b92808452610e1b60208501396105fe604051926105df846105d16001600160a01b0397887f0000000000000000000000000000000000000000000000000000000000000000169060208401610a9e565b03601f198101865285610a5f565b835160009460200185f092858416966105f9881515610b08565b610b54565b805183918161064c575b50506040519485946102f69416917f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf6579080a36001600160a01b031682526020820190565b8296945090602083920182855af193604051943d82873e1561067557935191936102f638610608565b3d85fd5b503461000e57600036600319011261000e5760206001600160a01b0360005416604051908152f35b503461000e576000604036600319011261045c576004356106c18161010c565b81602435916106cf8361010c565b6106d7610991565b6001600160a01b03809116926106ee8415156109e9565b833b156107215760249083604051958694859363611d2e7560e11b85521660048401525af1801561044b5761043f575080f35b8280fd5b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461000e5761077c6101a73661014b565b9081519160208082019384209260405193846107a78385830193849091604092825260208201520190565b03946107bb601f1996878101835282610a5f565b519020610120946107cd848701610a8e565b95808752610f3b8588013961081860405191826102b56001600160a01b03998a7f00000000000000000000000000000000000000000000000000000000000000001690898401610a9e565b8051906000940184f591848316610830811515610abc565b8194518061087d575b50604051965086956102f69516917f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f29080a46001600160a01b031682526020820190565b82978380939750865af194604051953d82883e156108a2579451939485949338610839565b3d86fd5b503461000e57602036600319011261000e576004356108c48161010c565b6108cc610991565b6001600160a01b0380911680156109265760009182548273ffffffffffffffffffffffffffffffffffffffff198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608490fd5b6001600160a01b036000541633036109a557565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156109f057565b60405162461bcd60e51b815260206004820152601260248201527f496e76616c6964204550206164647265737300000000000000000000000000006044820152606490fd5b67ffffffffffffffff8111610a4957604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a4957604052565b506040513d6000823e3d90fd5b90610a9c6040519283610a5f565b565b6020929190610ab48492828151948592016102fa565b019081520190565b15610ac357565b60405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606490fd5b15610b0f57565b60405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606490fd5b60a490610bd7929380604051958693631bc6fec760e11b60208601526001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016602487015216604485015260606064850152816084850152848401376000838284010152601f80199101168101036084810184520182610a5f565b9056fe6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033a2646970667358221220cc3855215776915d9c3562b4380fe9fbf7afb53b9434cabc4802d531f12df64364736f6c63430008110033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json b/packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json index 2bb53652b..ce7a7284d 100644 --- a/packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json +++ b/packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json @@ -1,1177 +1,1182 @@ { - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccount", - "sourceName": "contracts/smart-account/SmartAccount.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "anEntryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "BaseImplementationCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotAnEntryPoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPointOrOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPointOrSelf", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotSelf", - "type": "error" - }, - { - "inputs": [], - "name": "DelegateCallsOnly", - "type": "error" - }, - { - "inputs": [], - "name": "EntryPointCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "HandlerCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementationAddress", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MixedAuthFail", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleAlreadyEnabled", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "expectedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "returnedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "prevModule", - "type": "address" - } - ], - "name": "ModuleAndPrevModuleMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleCannotBeZeroOrSentinel", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleNotEnabled", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesAlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesSetupExecutionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCanNotBeSelf", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerProvidedIsSame", - "type": "error" - }, - { - "inputs": [], - "name": "TransferToZeroAddressAttempt", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "destLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "valueLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "funcLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "operationLength", - "type": "uint256" - } - ], - "name": "WrongBatchProvided", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractSignature", - "type": "bytes" - } - ], - "name": "WrongContractSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "uintS", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "contractSignatureLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "signatureLength", - "type": "uint256" - } - ], - "name": "WrongContractSignatureFormat", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleAddressProvided", - "type": "address" - } - ], - "name": "WrongValidationModule", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousHandler", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "ChangedFallbackHandler", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "DisabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "EnabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "ModuleTransaction", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "SmartAccountReceivedNativeToken", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "addDeposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevModule", - "type": "address" - }, - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "disableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "enableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "entryPoint", - "outputs": [ - { - "internalType": "contract IEntryPoint", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "to", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - }, - { - "internalType": "enum Enum.Operation[]", - "name": "operations", - "type": "uint8[]" - } - ], - "name": "execBatchTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModuleReturnData", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatch_y6U", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "execute_ncC", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFallbackHandler", - "outputs": [ - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getImplementation", - "outputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "start", - "type": "address" - }, - { - "internalType": "uint256", - "name": "pageSize", - "type": "uint256" - } - ], - "name": "getModulesPaginated", - "outputs": [ - { - "internalType": "address[]", - "name": "array", - "type": "address[]" - }, - { - "internalType": "address", - "name": "next", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - }, - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - } - ], - "name": "init", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "isModuleEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "name": "isValidSignature", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "nonces_deprecated", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner_deprecated", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "setFallbackHandler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "setupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "setupData", - "type": "bytes" - } - ], - "name": "setupAndEnableModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "updateImplementation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validateUserOp", - "outputs": [ - { - "internalType": "uint256", - "name": "validationData", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdrawDepositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162002548380380620025488339810160408190526200003491620000ae565b3060a0526001600160a01b038116620000605760405163091748f960e21b815260040160405180910390fd5b6001600160a01b0316608052600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b0319169091179055620000e0565b600060208284031215620000c157600080fd5b81516001600160a01b0381168114620000d957600080fd5b9392505050565b60805160a0516124116200013760003960006101d10152600081816105ad01528181610b9c01528181610ce301528181610d6b015281816110020152818161109f015281816111f9015261126401526124116000f3fe6080604052600436106101c25760003560e01c80635305dd27116100f7578063b0d691fe11610095578063cc2f845211610064578063cc2f845214610626578063e009cfde14610654578063f08a032314610674578063ffa1ad74146106945761023e565b8063b0d691fe1461059e578063b61d27f6146105d1578063bc673a70146105f1578063c399ec88146106115761023e565b806395851c93116100d157806395851c9314610528578063aaf10f4214610555578063acfdf50314610569578063affed0e0146105895761023e565b80635305dd27146104b4578063610b5925146104d4578063856dfd99146104f45761023e565b8063378dfd8e1161016457806347e1da2a1161013e57806347e1da2a1461044b5780634a58db191461046b5780634d44560d146104735780635229073f146104865761023e565b8063378dfd8e146103c55780633a871cdd146103fd578063468721a71461042b5761023e565b8063025b22bc116101a0578063025b22bc1461032c5780631626ba7e1461034c57806321632045146103855780632d9ad53d146103a55761023e565b8061189a146102a45780614680146102c657806301ffc9a7146102e65761023e565b3661023e576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361021057604051633c97166560e21b815260040160405180910390fd5b604051349033907ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce0290600090a3005b34801561024a57600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d480548061027557005b36600080373360601b365260008060143601600080855af190503d6000803e8061029e573d6000fd5b503d6000f35b3480156102b057600080fd5b506102c46102bf366004611971565b6106ea565b005b3480156102d257600080fd5b506102c46102e1366004611a12565b610739565b3480156102f257600080fd5b50610317610301366004611ac2565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b34801561033857600080fd5b506102c4610347366004611adf565b610851565b34801561035857600080fd5b5061036c610367366004611bc1565b610926565b6040516001600160e01b03199091168152602001610323565b34801561039157600080fd5b506103176103a0366004611c17565b610a07565b3480156103b157600080fd5b506103176103c0366004611adf565b610a71565b3480156103d157600080fd5b506103e56103e0366004611c89565b610aa9565b6040516001600160a01b039091168152602001610323565b34801561040957600080fd5b5061041d610418366004611cd6565b610b8f565b604051908152602001610323565b34801561043757600080fd5b50610317610446366004611d2a565b610cbb565b34801561045757600080fd5b506102c4610466366004611a12565b610ccb565b6102c4610ce1565b6102c4610481366004611d94565b610d61565b34801561049257600080fd5b506104a66104a1366004611d2a565b610dea565b604051610323929190611e10565b3480156104c057600080fd5b506103e56104cf366004611e2b565b610e20565b3480156104e057600080fd5b506102c46104ef366004611adf565b610e3b565b34801561050057600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4546103e5565b34801561053457600080fd5b5061041d610543366004611e65565b60326020526000908152604090205481565b34801561056157600080fd5b5030546103e5565b34801561057557600080fd5b50610317610584366004611e7e565b610e4f565b34801561059557600080fd5b5061041d610fdb565b3480156105aa57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e5565b3480156105dd57600080fd5b506102c46105ec366004611971565b611073565b3480156105fd57600080fd5b506031546103e5906001600160a01b031681565b34801561061d57600080fd5b5061041d61107f565b34801561063257600080fd5b50610646610641366004611d94565b6110ce565b604051610323929190611f42565b34801561066057600080fd5b506102c461066f366004611f9f565b6111c7565b34801561068057600080fd5b506102c461068f366004611adf565b6111dd565b3480156106a057600080fd5b506106dd6040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516103239190611fd8565b6106f26111ee565b610733848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061123b92505050565b50505050565b6107416111ee565b84158061074e5750848314155b806107595750828114155b156107945760405163470c355760e01b8152600481018690526024810184905260448101829052600060648201526084015b60405180910390fd5b60005b85811015610848576108408787838181106107b4576107b4611feb565b90506020020160208101906107c99190611adf565b8686848181106107db576107db611feb565b905060200201358585858181106107f4576107f4611feb565b90506020028101906108069190612001565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061123b92505050565b600101610797565b50505050505050565b610859611259565b6001600160a01b0381166108af5760405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f00000000000000000000604482015260640161078b565b6001600160a01b0381163b6108e257604051630c76093760e01b81526001600160a01b038216600482015260240161078b565b308054908290556040516001600160a01b0380841691908316907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a35050565b60008060008380602001905181019061093f9190612048565b6001600160a01b0380821660009081526020819052604090205492945090925016156109dd57604051630b135d3f60e11b81526001600160a01b03821690631626ba7e9061099390889086906004016120cb565b602060405180830381865afa1580156109b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d491906120e4565b92505050610a01565b6040516326cc3fab60e21b81526001600160a01b038216600482015260240161078b565b92915050565b60003360011480610a2e5750336000908152602081905260409020546001600160a01b0316155b15610a4e576040516321ac7c5f60e01b815233600482015260240161078b565b610a67868686868615610a6157866112b2565b5a6112b2565b9695505050505050565b600060016001600160a01b03831614801590610a015750506001600160a01b0390811660009081526020819052604090205416151590565b6001600090815260208190527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d546001600160a01b0316151580610b1e57506000610b127f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d45490565b6001600160a01b031614155b15610b3b5760405162dc149f60e41b815260040160405180910390fd5b610b44856113b9565b610b848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061144492505050565b90505b949350505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bdc57604051635dac3db760e11b815233600482015260240161078b565b6000610bec610140860186612001565b810190610bf99190612101565b6001600160a01b03808216600090815260208190526040902054919350161590506109dd576040517ffff35b720000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063fff35b7290610c6590889088906004016121b7565b6020604051808303816000875af1158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca891906122d0565b9150610cb383611509565b509392505050565b6000610b84858585856000610a07565b610cd9868686868686610739565b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024016000604051808303818588803b158015610d4657600080fd5b505af1158015610d5a573d6000803e3d6000fd5b5050505050565b610d69611259565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b158015610dd657600080fd5b505af1158015610cd9573d6000803e3d6000fd5b60006060610dfa86868686610cbb565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b6000610e2a611259565b610e348383611554565b9392505050565b610e43611259565b610e4c81611568565b50565b6000871580610e5e5750878614155b80610e695750858414155b80610e745750838214155b15610eaa5760405163470c355760e01b81526004810189905260248101879052604481018590526064810183905260840161078b565b3360011480610ecf5750336000908152602081905260409020546001600160a01b0316155b15610eef576040516321ac7c5f60e01b815233600482015260240161078b565b60005b88811015610fce57610fc48a8a83818110610f0f57610f0f611feb565b9050602002016020810190610f249190611adf565b898984818110610f3657610f36611feb565b90506020020135888885818110610f4f57610f4f611feb565b9050602002810190610f619190612001565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250899150879050818110610faa57610faa611feb565b9050602002016020810190610fbf91906122e9565b611693565b9150600101610ef2565b5098975050505050505050565b604051631aab3f0d60e11b8152306004820152600060248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044015b602060405180830381865afa15801561104a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106e91906122d0565b905090565b610733848484846106ea565b6040516370a0823160e01b81523060048201526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240161102d565b606060008267ffffffffffffffff8111156110eb576110eb611afc565b604051908082528060200260200182016040528015611114578160200160208202803683370190505b506001600160a01b0380861660009081526020819052604081205492945091165b6001600160a01b0381161580159061115757506001600160a01b038116600114155b801561116257508482105b156111b9578084838151811061117a5761117a611feb565b6001600160a01b0392831660209182029290920181019190915291811660009081529182905260409091205416816111b181612304565b925050611135565b908352919491935090915050565b6111cf611259565b6111d9828261174c565b5050565b6111e5611259565b610e4c816113b9565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112395760405163e6fce6a560e01b815233600482015260240161078b565b565b60008082516020840185875af16040513d6000823e81610d5a573d81fd5b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906112925750333014155b1561123957604051634776242160e01b815233600482015260240161078b565b600060018360018111156112c8576112c861232b565b036112e0576000808551602087018986f490506112f0565b600080855160208701888a87f190505b801561135557836040516113049190612341565b604051809103902085876001600160a01b03167f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee868660405161134892919061237f565b60405180910390a46113b0565b836040516113639190612341565b604051809103902085876001600160a01b03167f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a86866040516113a792919061237f565b60405180910390a45b95945050505050565b6001600160a01b0381166113e05760405163dd449f5f60e01b815260040160405180910390fd5b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d48054908290556040516001600160a01b0380841691908316907f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c90600090a35050565b6000806114518484611883565b90506001600160a01b038116158061147257506001600160a01b0381166001145b1561149b5760405163cadb248f60e01b81526001600160a01b038216600482015260240161078b565b6001600160a01b03811660008181526020819052604081208054600173ffffffffffffffffffffffffffffffffffffffff19918216811790925591527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d805490911690911790559392505050565b8015610e4c5760405133906000199083906000818181858888f193505050503d8060008114610733576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b6000806115618484611883565b9050610e34815b6001600160a01b038116158061158757506001600160a01b0381166001145b156115b05760405163cadb248f60e01b81526001600160a01b038216600482015260240161078b565b6001600160a01b0381811660009081526020819052604090205416156115f45760405163b29d459560e01b81526001600160a01b038216600482015260240161078b565b600060208181527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03858116808652604080872080549390941673ffffffffffffffffffffffffffffffffffffffff199384161790935560019095528254168417909155519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440910160405180910390a150565b60006116a2858585855a6112b2565b90508015611719577f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da33868686866040516116e195949392919061239a565b60405180910390a160405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a2610b87565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a2949350505050565b6001600160a01b038116158061176b57506001600160a01b0381166001145b156117945760405163cadb248f60e01b81526001600160a01b038216600482015260240161078b565b6001600160a01b038281166000908152602081905260409020548116908216146117fc576001600160a01b0382811660008181526020819052604090819020549051633103525b60e21b8152848416600482015292166024830152604482015260640161078b565b6001600160a01b038181166000818152602081815260408083208054888716855282852080549190971673ffffffffffffffffffffffffffffffffffffffff199182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276910160405180910390a15050565b60006001600160a01b0383166118db5760405162461bcd60e51b815260206004820152601a60248201527f57726f6e67204d6f64756c652053657475702041646472657373000000000000604482015260640161078b565b6000808351602085016000875af16040513d6000823e816118fa573d81fd5b51949350505050565b6001600160a01b0381168114610e4c57600080fd5b803561192381611903565b919050565b60008083601f84011261193a57600080fd5b50813567ffffffffffffffff81111561195257600080fd5b60208301915083602082850101111561196a57600080fd5b9250929050565b6000806000806060858703121561198757600080fd5b843561199281611903565b935060208501359250604085013567ffffffffffffffff8111156119b557600080fd5b6119c187828801611928565b95989497509550505050565b60008083601f8401126119df57600080fd5b50813567ffffffffffffffff8111156119f757600080fd5b6020830191508360208260051b850101111561196a57600080fd5b60008060008060008060608789031215611a2b57600080fd5b863567ffffffffffffffff80821115611a4357600080fd5b611a4f8a838b016119cd565b90985096506020890135915080821115611a6857600080fd5b611a748a838b016119cd565b90965094506040890135915080821115611a8d57600080fd5b50611a9a89828a016119cd565b979a9699509497509295939492505050565b6001600160e01b031981168114610e4c57600080fd5b600060208284031215611ad457600080fd5b8135610e3481611aac565b600060208284031215611af157600080fd5b8135610e3481611903565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611b3b57611b3b611afc565b604052919050565b600067ffffffffffffffff821115611b5d57611b5d611afc565b50601f01601f191660200190565b600082601f830112611b7c57600080fd5b8135611b8f611b8a82611b43565b611b12565b818152846020838601011115611ba457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215611bd457600080fd5b82359150602083013567ffffffffffffffff811115611bf257600080fd5b611bfe85828601611b6b565b9150509250929050565b80356002811061192357600080fd5b600080600080600060a08688031215611c2f57600080fd5b8535611c3a81611903565b945060208601359350604086013567ffffffffffffffff811115611c5d57600080fd5b611c6988828901611b6b565b935050611c7860608701611c08565b949793965091946080013592915050565b60008060008060608587031215611c9f57600080fd5b8435611caa81611903565b93506020850135611cba81611903565b9250604085013567ffffffffffffffff8111156119b557600080fd5b600080600060608486031215611ceb57600080fd5b833567ffffffffffffffff811115611d0257600080fd5b84016101608187031215611d1557600080fd5b95602085013595506040909401359392505050565b60008060008060808587031215611d4057600080fd5b8435611d4b81611903565b935060208501359250604085013567ffffffffffffffff811115611d6e57600080fd5b611d7a87828801611b6b565b925050611d8960608601611c08565b905092959194509250565b60008060408385031215611da757600080fd5b8235611db281611903565b946020939093013593505050565b60005b83811015611ddb578181015183820152602001611dc3565b50506000910152565b60008151808452611dfc816020860160208601611dc0565b601f01601f19169290920160200192915050565b8215158152604060208201526000610b876040830184611de4565b60008060408385031215611e3e57600080fd5b8235611e4981611903565b9150602083013567ffffffffffffffff811115611bf257600080fd5b600060208284031215611e7757600080fd5b5035919050565b6000806000806000806000806080898b031215611e9a57600080fd5b883567ffffffffffffffff80821115611eb257600080fd5b611ebe8c838d016119cd565b909a50985060208b0135915080821115611ed757600080fd5b611ee38c838d016119cd565b909850965060408b0135915080821115611efc57600080fd5b611f088c838d016119cd565b909650945060608b0135915080821115611f2157600080fd5b50611f2e8b828c016119cd565b999c989b5096995094979396929594505050565b604080825283519082018190526000906020906060840190828701845b82811015611f845781516001600160a01b031684529284019290840190600101611f5f565b5050506001600160a01b039490941692019190915250919050565b60008060408385031215611fb257600080fd5b8235611fbd81611903565b91506020830135611fcd81611903565b809150509250929050565b602081526000610e346020830184611de4565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261201857600080fd5b83018035915067ffffffffffffffff82111561203357600080fd5b60200191503681900382131561196a57600080fd5b6000806040838503121561205b57600080fd5b825167ffffffffffffffff81111561207257600080fd5b8301601f8101851361208357600080fd5b8051612091611b8a82611b43565b8181528660208385010111156120a657600080fd5b6120b7826020830160208601611dc0565b8094505050506020830151611fcd81611903565b828152604060208201526000610b876040830184611de4565b6000602082840312156120f657600080fd5b8151610e3481611aac565b6000806040838503121561211457600080fd5b823567ffffffffffffffff81111561212b57600080fd5b61213785828601611b6b565b9250506020830135611fcd81611903565b6000808335601e1984360301811261215f57600080fd5b830160208101925035905067ffffffffffffffff81111561217f57600080fd5b80360382131561196a57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526121d8604082016121cb85611918565b6001600160a01b03169052565b6020830135606082015260006121f16040850185612148565b6101608060808601526122096101a08601838561218e565b92506122186060880188612148565b9250603f19808786030160a088015261223285858461218e565b9450608089013560c088015260a089013560e0880152610100935060c089013584880152610120915060e089013582880152610140848a01358189015261227b838b018b612148565b9550925081888703018489015261229386868561218e565b95506122a1818b018b612148565b9550935050808786030161018088015250506122be83838361218e565b93505050508260208301529392505050565b6000602082840312156122e257600080fd5b5051919050565b6000602082840312156122fb57600080fd5b610e3482611c08565b60006001820161232457634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052602160045260246000fd5b60008251612353818460208701611dc0565b9190910192915050565b6002811061237b57634e487b7160e01b600052602160045260246000fd5b9052565b6040810161238d828561235d565b8260208301529392505050565b60006001600160a01b03808816835280871660208401525084604083015260a060608301526123cc60a0830185611de4565b9050610a67608083018461235d56fea2646970667358221220d009eb7658f3b56d82188a22a6cae0c796830cd84d0df5e953201c3eeafb0abf64736f6c63430008110033", - "deployedBytecode": "0x6080604052600436106101c25760003560e01c80635305dd27116100f7578063b0d691fe11610095578063cc2f845211610064578063cc2f845214610626578063e009cfde14610654578063f08a032314610674578063ffa1ad74146106945761023e565b8063b0d691fe1461059e578063b61d27f6146105d1578063bc673a70146105f1578063c399ec88146106115761023e565b806395851c93116100d157806395851c9314610528578063aaf10f4214610555578063acfdf50314610569578063affed0e0146105895761023e565b80635305dd27146104b4578063610b5925146104d4578063856dfd99146104f45761023e565b8063378dfd8e1161016457806347e1da2a1161013e57806347e1da2a1461044b5780634a58db191461046b5780634d44560d146104735780635229073f146104865761023e565b8063378dfd8e146103c55780633a871cdd146103fd578063468721a71461042b5761023e565b8063025b22bc116101a0578063025b22bc1461032c5780631626ba7e1461034c57806321632045146103855780632d9ad53d146103a55761023e565b8061189a146102a45780614680146102c657806301ffc9a7146102e65761023e565b3661023e576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361021057604051633c97166560e21b815260040160405180910390fd5b604051349033907ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce0290600090a3005b34801561024a57600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d480548061027557005b36600080373360601b365260008060143601600080855af190503d6000803e8061029e573d6000fd5b503d6000f35b3480156102b057600080fd5b506102c46102bf366004611971565b6106ea565b005b3480156102d257600080fd5b506102c46102e1366004611a12565b610739565b3480156102f257600080fd5b50610317610301366004611ac2565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b34801561033857600080fd5b506102c4610347366004611adf565b610851565b34801561035857600080fd5b5061036c610367366004611bc1565b610926565b6040516001600160e01b03199091168152602001610323565b34801561039157600080fd5b506103176103a0366004611c17565b610a07565b3480156103b157600080fd5b506103176103c0366004611adf565b610a71565b3480156103d157600080fd5b506103e56103e0366004611c89565b610aa9565b6040516001600160a01b039091168152602001610323565b34801561040957600080fd5b5061041d610418366004611cd6565b610b8f565b604051908152602001610323565b34801561043757600080fd5b50610317610446366004611d2a565b610cbb565b34801561045757600080fd5b506102c4610466366004611a12565b610ccb565b6102c4610ce1565b6102c4610481366004611d94565b610d61565b34801561049257600080fd5b506104a66104a1366004611d2a565b610dea565b604051610323929190611e10565b3480156104c057600080fd5b506103e56104cf366004611e2b565b610e20565b3480156104e057600080fd5b506102c46104ef366004611adf565b610e3b565b34801561050057600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4546103e5565b34801561053457600080fd5b5061041d610543366004611e65565b60326020526000908152604090205481565b34801561056157600080fd5b5030546103e5565b34801561057557600080fd5b50610317610584366004611e7e565b610e4f565b34801561059557600080fd5b5061041d610fdb565b3480156105aa57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e5565b3480156105dd57600080fd5b506102c46105ec366004611971565b611073565b3480156105fd57600080fd5b506031546103e5906001600160a01b031681565b34801561061d57600080fd5b5061041d61107f565b34801561063257600080fd5b50610646610641366004611d94565b6110ce565b604051610323929190611f42565b34801561066057600080fd5b506102c461066f366004611f9f565b6111c7565b34801561068057600080fd5b506102c461068f366004611adf565b6111dd565b3480156106a057600080fd5b506106dd6040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516103239190611fd8565b6106f26111ee565b610733848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061123b92505050565b50505050565b6107416111ee565b84158061074e5750848314155b806107595750828114155b156107945760405163470c355760e01b8152600481018690526024810184905260448101829052600060648201526084015b60405180910390fd5b60005b85811015610848576108408787838181106107b4576107b4611feb565b90506020020160208101906107c99190611adf565b8686848181106107db576107db611feb565b905060200201358585858181106107f4576107f4611feb565b90506020028101906108069190612001565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061123b92505050565b600101610797565b50505050505050565b610859611259565b6001600160a01b0381166108af5760405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f00000000000000000000604482015260640161078b565b6001600160a01b0381163b6108e257604051630c76093760e01b81526001600160a01b038216600482015260240161078b565b308054908290556040516001600160a01b0380841691908316907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a35050565b60008060008380602001905181019061093f9190612048565b6001600160a01b0380821660009081526020819052604090205492945090925016156109dd57604051630b135d3f60e11b81526001600160a01b03821690631626ba7e9061099390889086906004016120cb565b602060405180830381865afa1580156109b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d491906120e4565b92505050610a01565b6040516326cc3fab60e21b81526001600160a01b038216600482015260240161078b565b92915050565b60003360011480610a2e5750336000908152602081905260409020546001600160a01b0316155b15610a4e576040516321ac7c5f60e01b815233600482015260240161078b565b610a67868686868615610a6157866112b2565b5a6112b2565b9695505050505050565b600060016001600160a01b03831614801590610a015750506001600160a01b0390811660009081526020819052604090205416151590565b6001600090815260208190527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d546001600160a01b0316151580610b1e57506000610b127f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d45490565b6001600160a01b031614155b15610b3b5760405162dc149f60e41b815260040160405180910390fd5b610b44856113b9565b610b848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061144492505050565b90505b949350505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bdc57604051635dac3db760e11b815233600482015260240161078b565b6000610bec610140860186612001565b810190610bf99190612101565b6001600160a01b03808216600090815260208190526040902054919350161590506109dd576040517ffff35b720000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063fff35b7290610c6590889088906004016121b7565b6020604051808303816000875af1158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca891906122d0565b9150610cb383611509565b509392505050565b6000610b84858585856000610a07565b610cd9868686868686610739565b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024016000604051808303818588803b158015610d4657600080fd5b505af1158015610d5a573d6000803e3d6000fd5b5050505050565b610d69611259565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b158015610dd657600080fd5b505af1158015610cd9573d6000803e3d6000fd5b60006060610dfa86868686610cbb565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b6000610e2a611259565b610e348383611554565b9392505050565b610e43611259565b610e4c81611568565b50565b6000871580610e5e5750878614155b80610e695750858414155b80610e745750838214155b15610eaa5760405163470c355760e01b81526004810189905260248101879052604481018590526064810183905260840161078b565b3360011480610ecf5750336000908152602081905260409020546001600160a01b0316155b15610eef576040516321ac7c5f60e01b815233600482015260240161078b565b60005b88811015610fce57610fc48a8a83818110610f0f57610f0f611feb565b9050602002016020810190610f249190611adf565b898984818110610f3657610f36611feb565b90506020020135888885818110610f4f57610f4f611feb565b9050602002810190610f619190612001565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250899150879050818110610faa57610faa611feb565b9050602002016020810190610fbf91906122e9565b611693565b9150600101610ef2565b5098975050505050505050565b604051631aab3f0d60e11b8152306004820152600060248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044015b602060405180830381865afa15801561104a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106e91906122d0565b905090565b610733848484846106ea565b6040516370a0823160e01b81523060048201526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240161102d565b606060008267ffffffffffffffff8111156110eb576110eb611afc565b604051908082528060200260200182016040528015611114578160200160208202803683370190505b506001600160a01b0380861660009081526020819052604081205492945091165b6001600160a01b0381161580159061115757506001600160a01b038116600114155b801561116257508482105b156111b9578084838151811061117a5761117a611feb565b6001600160a01b0392831660209182029290920181019190915291811660009081529182905260409091205416816111b181612304565b925050611135565b908352919491935090915050565b6111cf611259565b6111d9828261174c565b5050565b6111e5611259565b610e4c816113b9565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112395760405163e6fce6a560e01b815233600482015260240161078b565b565b60008082516020840185875af16040513d6000823e81610d5a573d81fd5b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906112925750333014155b1561123957604051634776242160e01b815233600482015260240161078b565b600060018360018111156112c8576112c861232b565b036112e0576000808551602087018986f490506112f0565b600080855160208701888a87f190505b801561135557836040516113049190612341565b604051809103902085876001600160a01b03167f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee868660405161134892919061237f565b60405180910390a46113b0565b836040516113639190612341565b604051809103902085876001600160a01b03167f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a86866040516113a792919061237f565b60405180910390a45b95945050505050565b6001600160a01b0381166113e05760405163dd449f5f60e01b815260040160405180910390fd5b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d48054908290556040516001600160a01b0380841691908316907f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c90600090a35050565b6000806114518484611883565b90506001600160a01b038116158061147257506001600160a01b0381166001145b1561149b5760405163cadb248f60e01b81526001600160a01b038216600482015260240161078b565b6001600160a01b03811660008181526020819052604081208054600173ffffffffffffffffffffffffffffffffffffffff19918216811790925591527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d805490911690911790559392505050565b8015610e4c5760405133906000199083906000818181858888f193505050503d8060008114610733576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b6000806115618484611883565b9050610e34815b6001600160a01b038116158061158757506001600160a01b0381166001145b156115b05760405163cadb248f60e01b81526001600160a01b038216600482015260240161078b565b6001600160a01b0381811660009081526020819052604090205416156115f45760405163b29d459560e01b81526001600160a01b038216600482015260240161078b565b600060208181527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03858116808652604080872080549390941673ffffffffffffffffffffffffffffffffffffffff199384161790935560019095528254168417909155519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440910160405180910390a150565b60006116a2858585855a6112b2565b90508015611719577f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da33868686866040516116e195949392919061239a565b60405180910390a160405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a2610b87565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a2949350505050565b6001600160a01b038116158061176b57506001600160a01b0381166001145b156117945760405163cadb248f60e01b81526001600160a01b038216600482015260240161078b565b6001600160a01b038281166000908152602081905260409020548116908216146117fc576001600160a01b0382811660008181526020819052604090819020549051633103525b60e21b8152848416600482015292166024830152604482015260640161078b565b6001600160a01b038181166000818152602081815260408083208054888716855282852080549190971673ffffffffffffffffffffffffffffffffffffffff199182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276910160405180910390a15050565b60006001600160a01b0383166118db5760405162461bcd60e51b815260206004820152601a60248201527f57726f6e67204d6f64756c652053657475702041646472657373000000000000604482015260640161078b565b6000808351602085016000875af16040513d6000823e816118fa573d81fd5b51949350505050565b6001600160a01b0381168114610e4c57600080fd5b803561192381611903565b919050565b60008083601f84011261193a57600080fd5b50813567ffffffffffffffff81111561195257600080fd5b60208301915083602082850101111561196a57600080fd5b9250929050565b6000806000806060858703121561198757600080fd5b843561199281611903565b935060208501359250604085013567ffffffffffffffff8111156119b557600080fd5b6119c187828801611928565b95989497509550505050565b60008083601f8401126119df57600080fd5b50813567ffffffffffffffff8111156119f757600080fd5b6020830191508360208260051b850101111561196a57600080fd5b60008060008060008060608789031215611a2b57600080fd5b863567ffffffffffffffff80821115611a4357600080fd5b611a4f8a838b016119cd565b90985096506020890135915080821115611a6857600080fd5b611a748a838b016119cd565b90965094506040890135915080821115611a8d57600080fd5b50611a9a89828a016119cd565b979a9699509497509295939492505050565b6001600160e01b031981168114610e4c57600080fd5b600060208284031215611ad457600080fd5b8135610e3481611aac565b600060208284031215611af157600080fd5b8135610e3481611903565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611b3b57611b3b611afc565b604052919050565b600067ffffffffffffffff821115611b5d57611b5d611afc565b50601f01601f191660200190565b600082601f830112611b7c57600080fd5b8135611b8f611b8a82611b43565b611b12565b818152846020838601011115611ba457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215611bd457600080fd5b82359150602083013567ffffffffffffffff811115611bf257600080fd5b611bfe85828601611b6b565b9150509250929050565b80356002811061192357600080fd5b600080600080600060a08688031215611c2f57600080fd5b8535611c3a81611903565b945060208601359350604086013567ffffffffffffffff811115611c5d57600080fd5b611c6988828901611b6b565b935050611c7860608701611c08565b949793965091946080013592915050565b60008060008060608587031215611c9f57600080fd5b8435611caa81611903565b93506020850135611cba81611903565b9250604085013567ffffffffffffffff8111156119b557600080fd5b600080600060608486031215611ceb57600080fd5b833567ffffffffffffffff811115611d0257600080fd5b84016101608187031215611d1557600080fd5b95602085013595506040909401359392505050565b60008060008060808587031215611d4057600080fd5b8435611d4b81611903565b935060208501359250604085013567ffffffffffffffff811115611d6e57600080fd5b611d7a87828801611b6b565b925050611d8960608601611c08565b905092959194509250565b60008060408385031215611da757600080fd5b8235611db281611903565b946020939093013593505050565b60005b83811015611ddb578181015183820152602001611dc3565b50506000910152565b60008151808452611dfc816020860160208601611dc0565b601f01601f19169290920160200192915050565b8215158152604060208201526000610b876040830184611de4565b60008060408385031215611e3e57600080fd5b8235611e4981611903565b9150602083013567ffffffffffffffff811115611bf257600080fd5b600060208284031215611e7757600080fd5b5035919050565b6000806000806000806000806080898b031215611e9a57600080fd5b883567ffffffffffffffff80821115611eb257600080fd5b611ebe8c838d016119cd565b909a50985060208b0135915080821115611ed757600080fd5b611ee38c838d016119cd565b909850965060408b0135915080821115611efc57600080fd5b611f088c838d016119cd565b909650945060608b0135915080821115611f2157600080fd5b50611f2e8b828c016119cd565b999c989b5096995094979396929594505050565b604080825283519082018190526000906020906060840190828701845b82811015611f845781516001600160a01b031684529284019290840190600101611f5f565b5050506001600160a01b039490941692019190915250919050565b60008060408385031215611fb257600080fd5b8235611fbd81611903565b91506020830135611fcd81611903565b809150509250929050565b602081526000610e346020830184611de4565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261201857600080fd5b83018035915067ffffffffffffffff82111561203357600080fd5b60200191503681900382131561196a57600080fd5b6000806040838503121561205b57600080fd5b825167ffffffffffffffff81111561207257600080fd5b8301601f8101851361208357600080fd5b8051612091611b8a82611b43565b8181528660208385010111156120a657600080fd5b6120b7826020830160208601611dc0565b8094505050506020830151611fcd81611903565b828152604060208201526000610b876040830184611de4565b6000602082840312156120f657600080fd5b8151610e3481611aac565b6000806040838503121561211457600080fd5b823567ffffffffffffffff81111561212b57600080fd5b61213785828601611b6b565b9250506020830135611fcd81611903565b6000808335601e1984360301811261215f57600080fd5b830160208101925035905067ffffffffffffffff81111561217f57600080fd5b80360382131561196a57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526121d8604082016121cb85611918565b6001600160a01b03169052565b6020830135606082015260006121f16040850185612148565b6101608060808601526122096101a08601838561218e565b92506122186060880188612148565b9250603f19808786030160a088015261223285858461218e565b9450608089013560c088015260a089013560e0880152610100935060c089013584880152610120915060e089013582880152610140848a01358189015261227b838b018b612148565b9550925081888703018489015261229386868561218e565b95506122a1818b018b612148565b9550935050808786030161018088015250506122be83838361218e565b93505050508260208301529392505050565b6000602082840312156122e257600080fd5b5051919050565b6000602082840312156122fb57600080fd5b610e3482611c08565b60006001820161232457634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052602160045260246000fd5b60008251612353818460208701611dc0565b9190910192915050565b6002811061237b57634e487b7160e01b600052602160045260246000fd5b9052565b6040810161238d828561235d565b8260208301529392505050565b60006001600160a01b03808816835280871660208401525084604083015260a060608301526123cc60a0830185611de4565b9050610a67608083018461235d56fea2646970667358221220d009eb7658f3b56d82188a22a6cae0c796830cd84d0df5e953201c3eeafb0abf64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} - } - \ No newline at end of file + "_format": "hh-sol-artifact-1", + "contractName": "SmartAccount", + "sourceName": "contracts/smart-account/SmartAccount.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IEntryPoint", + "name": "anEntryPoint", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AlreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "BaseImplementationCannotBeZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "CallerIsNotAnEntryPoint", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "CallerIsNotEntryPoint", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "CallerIsNotEntryPointOrOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "CallerIsNotEntryPointOrSelf", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "CallerIsNotOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "CallerIsNotSelf", + "type": "error" + }, + { + "inputs": [], + "name": "DelegateCallsOnly", + "type": "error" + }, + { + "inputs": [], + "name": "EntryPointCannotBeZero", + "type": "error" + }, + { + "inputs": [], + "name": "HandlerCannotBeZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementationAddress", + "type": "address" + } + ], + "name": "InvalidImplementation", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MixedAuthFail", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ModuleAlreadyEnabled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "expectedModule", + "type": "address" + }, + { + "internalType": "address", + "name": "returnedModule", + "type": "address" + }, + { + "internalType": "address", + "name": "prevModule", + "type": "address" + } + ], + "name": "ModuleAndPrevModuleMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ModuleCannotBeZeroOrSentinel", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ModuleNotEnabled", + "type": "error" + }, + { + "inputs": [], + "name": "ModulesAlreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "ModulesSetupExecutionFailed", + "type": "error" + }, + { + "inputs": [], + "name": "OwnerCanNotBeSelf", + "type": "error" + }, + { + "inputs": [], + "name": "OwnerCannotBeZero", + "type": "error" + }, + { + "inputs": [], + "name": "OwnerProvidedIsSame", + "type": "error" + }, + { + "inputs": [], + "name": "TransferToZeroAddressAttempt", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "destLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "valueLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "funcLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "operationLength", + "type": "uint256" + } + ], + "name": "WrongBatchProvided", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractSignature", + "type": "bytes" + } + ], + "name": "WrongContractSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "uintS", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "contractSignatureLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signatureLength", + "type": "uint256" + } + ], + "name": "WrongContractSignatureFormat", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleAddressProvided", + "type": "address" + } + ], + "name": "WrongValidationModule", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousHandler", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "handler", + "type": "address" + } + ], + "name": "ChangedFallbackHandler", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "DisabledModule", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "EnabledModule", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "txGas", + "type": "uint256" + } + ], + "name": "ExecutionFailure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ExecutionFromModuleFailure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ExecutionFromModuleSuccess", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "txGas", + "type": "uint256" + } + ], + "name": "ExecutionSuccess", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "module", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + } + ], + "name": "ModuleTransaction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "SmartAccountReceivedNativeToken", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "addDeposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "prevModule", + "type": "address" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "disableModule", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "enableModule", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "entryPoint", + "outputs": [ + { + "internalType": "contract IEntryPoint", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "to", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "value", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + }, + { + "internalType": "enum Enum.Operation[]", + "name": "operations", + "type": "uint8[]" + } + ], + "name": "execBatchTransactionFromModule", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "txGas", + "type": "uint256" + } + ], + "name": "execTransactionFromModule", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + } + ], + "name": "execTransactionFromModule", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "operation", + "type": "uint8" + } + ], + "name": "execTransactionFromModuleReturnData", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dest", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "func", + "type": "bytes" + } + ], + "name": "execute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "dest", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "value", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "func", + "type": "bytes[]" + } + ], + "name": "executeBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "dest", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "value", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "func", + "type": "bytes[]" + } + ], + "name": "executeBatch_y6U", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dest", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "func", + "type": "bytes" + } + ], + "name": "execute_ncC", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getFallbackHandler", + "outputs": [ + { + "internalType": "address", + "name": "_handler", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getImplementation", + "outputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "start", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + } + ], + "name": "getModulesPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { + "internalType": "address", + "name": "next", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "handler", + "type": "address" + }, + { + "internalType": "address", + "name": "moduleSetupContract", + "type": "address" + }, + { + "internalType": "bytes", + "name": "moduleSetupData", + "type": "bytes" + } + ], + "name": "init", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "isModuleEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "dataHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint192", + "name": "_key", + "type": "uint192" + } + ], + "name": "nonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "noncesDeprecated", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ownerDeprecated", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "handler", + "type": "address" + } + ], + "name": "setFallbackHandler", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "setupContract", + "type": "address" + }, + { + "internalType": "bytes", + "name": "setupData", + "type": "bytes" + } + ], + "name": "setupAndEnableModule", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "updateImplementation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "callGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "verificationGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFeePerGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPriorityFeePerGas", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct UserOperation", + "name": "userOp", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "missingAccountFunds", + "type": "uint256" + } + ], + "name": "validateUserOp", + "outputs": [ + { + "internalType": "uint256", + "name": "validationData", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "withdrawAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawDepositTo", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x60c0346100fc57601f61213e38819003918201601f19168301916001600160401b03831184841017610101578084926020946040528339810103126100fc57516001600160a01b0381168082036100fc573060a052156100ea57608052600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556040516120269081610118823960805181818161096f01528181610b6201528181610c0301528181610f2101528181610f740152818161119e0152818161193b0152611996015260a051816114dd0152f35b60405163091748f960e21b8152600490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040526004361015610030575b36156100285734610023576100216119d6565b005b600080fd5b6100216114d3565b60003560e01c8061189a146101b357806146801461021657806301ffc9a71461025e578063025b22bc146102555780631626ba7e1461024c57806321632045146102435780632d9ad53d1461023a578063378dfd8e146102315780633a871cdd14610228578063468721a71461021f57806347e1da2a146102165780634a58db191461020d5780634d44560d146102045780635229073f146101fb5780635305dd27146101f2578063610b5925146101e95780636424e9fe146101e0578063856dfd99146101d7578063aaf10f42146101ce578063acfdf503146101c5578063b0d691fe146101bc578063b61d27f6146101b3578063c399ec88146101aa578063cc2f8452146101a1578063d86f2b3c14610198578063e009cfde1461018f578063f08a032314610186578063f33623b11461017d5763ffa1ad740361000e57610178611439565b61000e565b5061017861140c565b506101786113de565b5061017861120c565b5061017861113a565b50610178611038565b50610178610f45565b506101786102b3565b50610178610f00565b50610178610e5d565b50610178610e36565b50610178610def565b50610178610dc7565b50610178610d99565b50610178610d2d565b50610178610cab565b50610178610bd4565b50610178610b4a565b50610178610342565b50610178610afc565b50610178610929565b506101786107c8565b5061017861076a565b506101786106ab565b5061017861064f565b5061017861049d565b50610178610461565b6001600160a01b0381160361002357565b359061028382610267565b565b9181601f840112156100235782359167ffffffffffffffff8311610023576020838186019501011161002357565b5034610023576060366003190112610023576004356102d181610267565b6044359067ffffffffffffffff8211610023576103076102f8610021933690600401610285565b61030061198c565b36916105fa565b906024359061190d565b9181601f840112156100235782359167ffffffffffffffff8311610023576020808501948460051b01011161002357565b50346100235760603660031901126100235767ffffffffffffffff60043581811161002357610375903690600401610311565b906024358381116100235761038e903690600401610311565b93604435908111610023576103a7903690600401610311565b926103b061198c565b84158015610445575b801561043b575b61040f5760005b8581106103d057005b806104096103e96103e46001948a87611745565b611763565b6103f4838b89611745565b35610403610300858b8a61176d565b9161190d565b016103c7565b5050506084926040519263470c355760e01b845260048401526024830152604482015260006064820152fd5b50838614156103c0565b50858514156103b9565b6001600160e01b031981160361002357565b50346100235760203660031901126100235760206004356104818161044f565b6040516001600160e01b03199091166301ffc9a760e01b148152f35b5034610023576020366003190112610023576004356104bb81610267565b6104c3611931565b6001600160a01b0380821691821561053057803b15610509573054903055167faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da600080a3005b604051630c76093760e01b81526001600160a01b03919091166004820152602490fd5b0390fd5b60405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f000000000000000000006044820152606490fd5b50634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116105a057604052565b6105a8610575565b604052565b90601f8019910116810190811067ffffffffffffffff8211176105a057604052565b60209067ffffffffffffffff81116105ed575b601f01601f19160190565b6105f5610575565b6105e2565b929192610606826105cf565b9161061460405193846105ad565b829481845281830111610023578281602093846000960137010152565b9080601f830112156100235781602061064c933591016105fa565b90565b50346100235760403660031901126100235760243567ffffffffffffffff81116100235761068e6106866020923690600401610631565b600435611834565b6040516001600160e01b03199091168152f35b6002111561002357565b50346100235760a0366003190112610023576004356106c981610267565b60443567ffffffffffffffff8111610023576106e9903690600401610631565b90606435906106f7826106a1565b6084359160013314801561074b575b61073357602093610723938061072d57505a925b60243590611b5a565b6040519015158152f35b9261071a565b6040516321ac7c5f60e01b8152336004820152602490fd5b503360005260006020526001600160a01b036040600020541615610706565b503461002357602036600319011261002357602060043561078a81610267565b6001600160a01b0380911690816001141591826107ae575b50506040519015158152f35b9091506000526000825260406000205416151538806107a2565b5034610023576060366003190112610023576004356107e681610267565b602435906107f382610267565b60443567ffffffffffffffff811161002357610813903690600401610285565b91909260009360018552846020526001600160a01b0393604093858588205416158015906108fd575b6108ed5791610852916103006108589594611a24565b90611f7a565b918216801580156108e3575b6108cd578282856108b1936108c997528060205261089182822060016001600160a01b0319825416179055565b6001815220906001600160a01b03166001600160a01b0319825416179055565b516001600160a01b0390911681529081906020820190565b0390f35b602491519063cadb248f60e01b82526004820152fd5b5060018114610864565b845162dc149f60e41b8152600490fd5b50857f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d45416151561083c565b503461002357600319606036820112610023576004359067ffffffffffffffff82116100235761016082600401918336030112610023576000906001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000163303610a9b576109af6109a76101448693018461153d565b810190611570565b905016926109e06109d3856001600160a01b03166000526000602052604060002090565b546001600160a01b031690565b1615610a7a576020610a116108c9948493604051948580948193637ff9adb960e11b835260243590600484016115fa565b03925af1918215610a6d575b91610a3f575b50610a2f6044356116f1565b6040519081529081906020820190565b610a60915060203d8111610a66575b610a5881836105ad565b8101906114b7565b38610a23565b503d610a4e565b610a756114c6565b610a1d565b6040516326cc3fab60e21b81526001600160a01b0384166004820152602490fd5b604051635dac3db760e11b8152336004820152602490fd5b608060031982011261002357600435610acb81610267565b91602435916044359067ffffffffffffffff821161002357610aef91600401610631565b9060643561064c816106a1565b503461002357610b0b36610ab3565b600193919333148015610b2b575b61073357602093610723935a93611b5a565b503360005260006020526001600160a01b036040600020541615610b19565b50600080600319360112610bd1576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681813b15610bd15760405163b760faf960e01b8152306004820152918290602490829034905af18015610bc4575b610bb8575080f35b610bc19061058c565b80f35b610bcc6114c6565b610bb0565b80fd5b5060006040366003190112610bd157600435610bef81610267565b610bf7611931565b816001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001692833b15610c5f5760449083604051958694859363040b850f60e31b855216600484015260243560248401525af18015610bc457610bb8575080f35b8280fd5b60005b838110610c765750506000910152565b8181015183820152602001610c66565b90602091610c9f81518092818552858086019101610c63565b601f01601f1916010190565b503461002357610cba36610ab3565b90600193929333148015610d0e575b61073357610cd8935a93611b5a565b6040519060203d8301016040523d82523d6000602084013e6108c960405192839215158352604060208401526040830190610c86565b503360005260006020526001600160a01b036040600020541615610cc9565b503461002357604036600319011261002357600435610d4b81610267565b60243567ffffffffffffffff811161002357602091610d71610d7f923690600401610631565b90610d7a611931565b611f7a565b610d8881611d68565b6001600160a01b0360405191168152f35b503461002357602036600319011261002357610021600435610dba81610267565b610dc2611931565b611d68565b50346100235760003660031901126100235760206001600160a01b0360315416604051908152f35b50346100235760003660031901126100235760207f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4546001600160a01b0360405191168152f35b503461002357600036600319011261002357602030546001600160a01b0360405191168152f35b50346100235760803660031901126100235767ffffffffffffffff60043581811161002357610e90903690600401610311565b60249291923582811161002357610eab903690600401610311565b60449491943584811161002357610ec6903690600401610311565b91606435958611610023576108c996610ee6610eee973690600401610311565b969095611c22565b60405190151581529081906020820190565b50346100235760003660031901126100235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610023576000366003190112610023576040516370a0823160e01b815230600482015260209081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fd4575b600091610fb7575b50604051908152f35b610fce9150823d8111610a6657610a5881836105ad565b38610fae565b610fdc6114c6565b610fa6565b90929192604082016040835281518091526060830160208093019160005b8482821061101b575050506001600160a01b0391509416910152565b84516001600160a01b031684529384019390920191600101610fff565b50346100235760403660031901126100235760043561105681610267565b60243561106281611a96565b61106f60405191826105ad565b818152601f1961107e83611a96565b013660208301376110a76109d36000946001600160a01b03166000526000602052604060002090565b6001600160a01b038116801515908161112e575b5080611125575b15611112576111066109d3826110ed61110c946110df8988611ab7565b906001600160a01b03169052565b6001600160a01b03166000526000602052604060002090565b93611ad9565b926110a7565b908381526108c960405192839283610fe1565b508284106110c2565b600191501415386110bb565b50346100235760203660031901126100235760043577ffffffffffffffffffffffffffffffffffffffffffffffff8116809103610023576108c99060405190631aab3f0d60e11b825230600483015260248201526020816044816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ff575b6000916111e1575b506040519081529081906020820190565b6111f9915060203d8111610a6657610a5881836105ad565b386111d0565b6112076114c6565b6111c8565b50346100235760403660031901126100235760043561122a81610267565b60243561123681610267565b61123e611931565b6001600160a01b038116801580156113d4575b6113b3576112846112786109d3856001600160a01b03166000526000602052604060002090565b6001600160a01b031690565b03611359578061130a7faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276936112ef6112d56109d3611354966001600160a01b03166000526000602052604060002090565b916001600160a01b03166000526000602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b61133a61132a826001600160a01b03166000526000602052604060002090565b6001600160a01b03198154169055565b6040516001600160a01b0390911681529081906020820190565b0390a1005b61052c61137c6109d3846001600160a01b03166000526000602052604060002090565b604051633103525b60e21b81526001600160a01b039384166004820152908316602482015292909116604483015281906064820190565b60405163cadb248f60e01b81526001600160a01b0383166004820152602490fd5b5060018114611251565b5034610023576020366003190112610023576100216004356113ff81610267565b611407611931565b611a24565b50346100235760203660031901126100235760043560005260326020526020604060002054604051908152f35b5034610023576000366003190112610023576108c96040516040810181811067ffffffffffffffff8211176114aa575b604052600581527f322e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610c86565b6114b2610575565b611469565b90816020910312610023575190565b506040513d6000823e3d90fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301461152b5734337ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce02600080a3565b604051633c97166560e21b8152600490fd5b903590601e1981360301821215610023570180359067ffffffffffffffff82116100235760200191813603831361002357565b919060408382031261002357823567ffffffffffffffff81116100235760209161159b918501610631565b92013561064c81610267565b9035601e198236030181121561002357016020813591019167ffffffffffffffff821161002357813603831361002357565b908060209392818452848401376000828201840152601f01601f1916010190565b9291906116ec611657602092604087526116276040880161161a83610278565b6001600160a01b03169052565b8381013560608801526116dc61164060408301836115a7565b9390610160948560808c01526101a08b01916115d9565b916116d361167f61166b60608401846115a7565b603f198d8803810160a08f015296916115d9565b608083013560c08c015260a083013560e08c01528a6101009660c0850135888301526116c361012060e087013581850152610140998701358a8501528601866115a7565b92909188828603019101526115d9565b938101906115a7565b91888403016101808901526115d9565b930152565b806116f95750565b600080808093338219f1503d15610283573d611714816105cf565b9061172260405192836105ad565b8152600060203d92013e565b50634e487b7160e01b600052603260045260246000fd5b9190811015611756575b60051b0190565b61175e61172e565b61174f565b3561064c81610267565b90916117869281101561178a575b60051b81019061153d565b9091565b61179261172e565b61177b565b919060408382031261002357825167ffffffffffffffff81116100235783019080601f83011215610023578151916117ce836105cf565b916117dc60405193846105ad565b83835260208483010111610023576020926117fc91848085019101610c63565b92015161064c81610267565b90816020910312610023575161064c8161044f565b60409061064c939281528160208201520190610c86565b906118489060208082518301019101611797565b90916001600160a01b03809216916118766109d3846001600160a01b03166000526000602052604060002090565b16156118ec57916020916118a093604051809581948293630b135d3f60e11b84526004840161181d565b03915afa9081156118df575b6000916118b7575090565b61064c915060203d81116118d8575b6118d081836105ad565b810190611808565b503d6118c6565b6118e76114c6565b6118ac565b6040516326cc3fab60e21b81526001600160a01b0383166004820152602490fd5b916000928392602083519301915af1604051903d6000833e1561192d5750565b3d90fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141580611982575b61196a57565b604051634776242160e01b8152336004820152602490fd5b5030331415611964565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119be57565b60405163e6fce6a560e01b8152336004820152602490fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4548015610021576000808092368280373360601b3652818060143601925af13d82803e1561192d573d90f35b6001600160a01b03808216918215611a84577f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d49081549155167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c600080a3565b60405163dd449f5f60e01b8152600490fd5b60209067ffffffffffffffff8111611aaf5760051b0190565b61175e610575565b6020918151811015611acc575b60051b010190565b611ad461172e565b611ac4565b6000198114611ae85760010190565b634e487b7160e01b600052601160045260246000fd5b611b1690602060405192828480945193849201610c63565b810103902090565b906002821015611b2b5752565b634e487b7160e01b600052602160045260246000fd5b60209093929193611b56816040810196611b1e565b0152565b9493929091946002821015611b2b5760018203611c05576000808751602089018488f4955b8615611bcf577f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee91611bca611bbb6001600160a01b0393611afe565b96604051938493169583611b41565b0390a4565b7f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a91611bca611bbb6001600160a01b0393611afe565b600080875160208901868589f195611b7f565b3561064c816106a1565b9497969391929795909560009887158015611d5e575b8015611d54575b8015611d4a575b611d1b576001978833148015611ceb575b6107335797969594939291906000985b808a10611c7a5750505050505050505050565b9091929394959697899b50611cdb888888611cd589869f8f81611cc0818e611cb98f968f97611cb36103e483611ccd9b611cc89b611745565b9c611745565b359861176d565b989094611745565b611c18565b9436916105fa565b91611eab565b9b01989796959493929190611c67565b506001600160a01b03611d146109d3336001600160a01b03166000526000602052604060002090565b1615611c57565b60405163470c355760e01b81526004810189905260248101919091526044810182905260648101869052608490fd5b5085821415611c46565b5081811415611c3f565b5080881415611c38565b6001600160a01b0381168015908115611ea0575b50611e7d57611da46112786109d3836001600160a01b03166000526000602052604060002090565b611e5a57600160009081526020527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844090611e5590611e21611e047fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6109d3565b6112ef836001600160a01b03166000526000602052604060002090565b6001600090815260205261133a817fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6112ef565b0390a1565b60405163b29d459560e01b81526001600160a01b03919091166004820152602490fd5b60405163cadb248f60e01b81526001600160a01b03919091166004820152602490fd5b600191501438611d7c565b939293611ebb5a86858585611b5a565b948515611f4e57611f23611f187f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da956001600160a01b0395604051968796338852166020870152604086015260a0606086015260a0850190610c86565b916080840190611b1e565b0390a1337f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8600080a2565b50505050337facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375600080a2565b6001600160a01b03811615611fab5781600092918360208194519301915af1604051903d6000833e1561192d575190565b60405162461bcd60e51b815260206004820152601a60248201527f57726f6e67204d6f64756c6520536574757020416464726573730000000000006044820152606490fdfea26469706673582212205e35c32c65281399d0271586e25905b496a0e4ccfd6e3ff9ffae2c43380c16ac64736f6c63430008110033", + "deployedBytecode": "0x60806040526004361015610030575b36156100285734610023576100216119d6565b005b600080fd5b6100216114d3565b60003560e01c8061189a146101b357806146801461021657806301ffc9a71461025e578063025b22bc146102555780631626ba7e1461024c57806321632045146102435780632d9ad53d1461023a578063378dfd8e146102315780633a871cdd14610228578063468721a71461021f57806347e1da2a146102165780634a58db191461020d5780634d44560d146102045780635229073f146101fb5780635305dd27146101f2578063610b5925146101e95780636424e9fe146101e0578063856dfd99146101d7578063aaf10f42146101ce578063acfdf503146101c5578063b0d691fe146101bc578063b61d27f6146101b3578063c399ec88146101aa578063cc2f8452146101a1578063d86f2b3c14610198578063e009cfde1461018f578063f08a032314610186578063f33623b11461017d5763ffa1ad740361000e57610178611439565b61000e565b5061017861140c565b506101786113de565b5061017861120c565b5061017861113a565b50610178611038565b50610178610f45565b506101786102b3565b50610178610f00565b50610178610e5d565b50610178610e36565b50610178610def565b50610178610dc7565b50610178610d99565b50610178610d2d565b50610178610cab565b50610178610bd4565b50610178610b4a565b50610178610342565b50610178610afc565b50610178610929565b506101786107c8565b5061017861076a565b506101786106ab565b5061017861064f565b5061017861049d565b50610178610461565b6001600160a01b0381160361002357565b359061028382610267565b565b9181601f840112156100235782359167ffffffffffffffff8311610023576020838186019501011161002357565b5034610023576060366003190112610023576004356102d181610267565b6044359067ffffffffffffffff8211610023576103076102f8610021933690600401610285565b61030061198c565b36916105fa565b906024359061190d565b9181601f840112156100235782359167ffffffffffffffff8311610023576020808501948460051b01011161002357565b50346100235760603660031901126100235767ffffffffffffffff60043581811161002357610375903690600401610311565b906024358381116100235761038e903690600401610311565b93604435908111610023576103a7903690600401610311565b926103b061198c565b84158015610445575b801561043b575b61040f5760005b8581106103d057005b806104096103e96103e46001948a87611745565b611763565b6103f4838b89611745565b35610403610300858b8a61176d565b9161190d565b016103c7565b5050506084926040519263470c355760e01b845260048401526024830152604482015260006064820152fd5b50838614156103c0565b50858514156103b9565b6001600160e01b031981160361002357565b50346100235760203660031901126100235760206004356104818161044f565b6040516001600160e01b03199091166301ffc9a760e01b148152f35b5034610023576020366003190112610023576004356104bb81610267565b6104c3611931565b6001600160a01b0380821691821561053057803b15610509573054903055167faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da600080a3005b604051630c76093760e01b81526001600160a01b03919091166004820152602490fd5b0390fd5b60405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f000000000000000000006044820152606490fd5b50634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116105a057604052565b6105a8610575565b604052565b90601f8019910116810190811067ffffffffffffffff8211176105a057604052565b60209067ffffffffffffffff81116105ed575b601f01601f19160190565b6105f5610575565b6105e2565b929192610606826105cf565b9161061460405193846105ad565b829481845281830111610023578281602093846000960137010152565b9080601f830112156100235781602061064c933591016105fa565b90565b50346100235760403660031901126100235760243567ffffffffffffffff81116100235761068e6106866020923690600401610631565b600435611834565b6040516001600160e01b03199091168152f35b6002111561002357565b50346100235760a0366003190112610023576004356106c981610267565b60443567ffffffffffffffff8111610023576106e9903690600401610631565b90606435906106f7826106a1565b6084359160013314801561074b575b61073357602093610723938061072d57505a925b60243590611b5a565b6040519015158152f35b9261071a565b6040516321ac7c5f60e01b8152336004820152602490fd5b503360005260006020526001600160a01b036040600020541615610706565b503461002357602036600319011261002357602060043561078a81610267565b6001600160a01b0380911690816001141591826107ae575b50506040519015158152f35b9091506000526000825260406000205416151538806107a2565b5034610023576060366003190112610023576004356107e681610267565b602435906107f382610267565b60443567ffffffffffffffff811161002357610813903690600401610285565b91909260009360018552846020526001600160a01b0393604093858588205416158015906108fd575b6108ed5791610852916103006108589594611a24565b90611f7a565b918216801580156108e3575b6108cd578282856108b1936108c997528060205261089182822060016001600160a01b0319825416179055565b6001815220906001600160a01b03166001600160a01b0319825416179055565b516001600160a01b0390911681529081906020820190565b0390f35b602491519063cadb248f60e01b82526004820152fd5b5060018114610864565b845162dc149f60e41b8152600490fd5b50857f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d45416151561083c565b503461002357600319606036820112610023576004359067ffffffffffffffff82116100235761016082600401918336030112610023576000906001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000163303610a9b576109af6109a76101448693018461153d565b810190611570565b905016926109e06109d3856001600160a01b03166000526000602052604060002090565b546001600160a01b031690565b1615610a7a576020610a116108c9948493604051948580948193637ff9adb960e11b835260243590600484016115fa565b03925af1918215610a6d575b91610a3f575b50610a2f6044356116f1565b6040519081529081906020820190565b610a60915060203d8111610a66575b610a5881836105ad565b8101906114b7565b38610a23565b503d610a4e565b610a756114c6565b610a1d565b6040516326cc3fab60e21b81526001600160a01b0384166004820152602490fd5b604051635dac3db760e11b8152336004820152602490fd5b608060031982011261002357600435610acb81610267565b91602435916044359067ffffffffffffffff821161002357610aef91600401610631565b9060643561064c816106a1565b503461002357610b0b36610ab3565b600193919333148015610b2b575b61073357602093610723935a93611b5a565b503360005260006020526001600160a01b036040600020541615610b19565b50600080600319360112610bd1576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681813b15610bd15760405163b760faf960e01b8152306004820152918290602490829034905af18015610bc4575b610bb8575080f35b610bc19061058c565b80f35b610bcc6114c6565b610bb0565b80fd5b5060006040366003190112610bd157600435610bef81610267565b610bf7611931565b816001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001692833b15610c5f5760449083604051958694859363040b850f60e31b855216600484015260243560248401525af18015610bc457610bb8575080f35b8280fd5b60005b838110610c765750506000910152565b8181015183820152602001610c66565b90602091610c9f81518092818552858086019101610c63565b601f01601f1916010190565b503461002357610cba36610ab3565b90600193929333148015610d0e575b61073357610cd8935a93611b5a565b6040519060203d8301016040523d82523d6000602084013e6108c960405192839215158352604060208401526040830190610c86565b503360005260006020526001600160a01b036040600020541615610cc9565b503461002357604036600319011261002357600435610d4b81610267565b60243567ffffffffffffffff811161002357602091610d71610d7f923690600401610631565b90610d7a611931565b611f7a565b610d8881611d68565b6001600160a01b0360405191168152f35b503461002357602036600319011261002357610021600435610dba81610267565b610dc2611931565b611d68565b50346100235760003660031901126100235760206001600160a01b0360315416604051908152f35b50346100235760003660031901126100235760207f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4546001600160a01b0360405191168152f35b503461002357600036600319011261002357602030546001600160a01b0360405191168152f35b50346100235760803660031901126100235767ffffffffffffffff60043581811161002357610e90903690600401610311565b60249291923582811161002357610eab903690600401610311565b60449491943584811161002357610ec6903690600401610311565b91606435958611610023576108c996610ee6610eee973690600401610311565b969095611c22565b60405190151581529081906020820190565b50346100235760003660031901126100235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610023576000366003190112610023576040516370a0823160e01b815230600482015260209081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fd4575b600091610fb7575b50604051908152f35b610fce9150823d8111610a6657610a5881836105ad565b38610fae565b610fdc6114c6565b610fa6565b90929192604082016040835281518091526060830160208093019160005b8482821061101b575050506001600160a01b0391509416910152565b84516001600160a01b031684529384019390920191600101610fff565b50346100235760403660031901126100235760043561105681610267565b60243561106281611a96565b61106f60405191826105ad565b818152601f1961107e83611a96565b013660208301376110a76109d36000946001600160a01b03166000526000602052604060002090565b6001600160a01b038116801515908161112e575b5080611125575b15611112576111066109d3826110ed61110c946110df8988611ab7565b906001600160a01b03169052565b6001600160a01b03166000526000602052604060002090565b93611ad9565b926110a7565b908381526108c960405192839283610fe1565b508284106110c2565b600191501415386110bb565b50346100235760203660031901126100235760043577ffffffffffffffffffffffffffffffffffffffffffffffff8116809103610023576108c99060405190631aab3f0d60e11b825230600483015260248201526020816044816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ff575b6000916111e1575b506040519081529081906020820190565b6111f9915060203d8111610a6657610a5881836105ad565b386111d0565b6112076114c6565b6111c8565b50346100235760403660031901126100235760043561122a81610267565b60243561123681610267565b61123e611931565b6001600160a01b038116801580156113d4575b6113b3576112846112786109d3856001600160a01b03166000526000602052604060002090565b6001600160a01b031690565b03611359578061130a7faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276936112ef6112d56109d3611354966001600160a01b03166000526000602052604060002090565b916001600160a01b03166000526000602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b61133a61132a826001600160a01b03166000526000602052604060002090565b6001600160a01b03198154169055565b6040516001600160a01b0390911681529081906020820190565b0390a1005b61052c61137c6109d3846001600160a01b03166000526000602052604060002090565b604051633103525b60e21b81526001600160a01b039384166004820152908316602482015292909116604483015281906064820190565b60405163cadb248f60e01b81526001600160a01b0383166004820152602490fd5b5060018114611251565b5034610023576020366003190112610023576100216004356113ff81610267565b611407611931565b611a24565b50346100235760203660031901126100235760043560005260326020526020604060002054604051908152f35b5034610023576000366003190112610023576108c96040516040810181811067ffffffffffffffff8211176114aa575b604052600581527f322e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610c86565b6114b2610575565b611469565b90816020910312610023575190565b506040513d6000823e3d90fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301461152b5734337ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce02600080a3565b604051633c97166560e21b8152600490fd5b903590601e1981360301821215610023570180359067ffffffffffffffff82116100235760200191813603831361002357565b919060408382031261002357823567ffffffffffffffff81116100235760209161159b918501610631565b92013561064c81610267565b9035601e198236030181121561002357016020813591019167ffffffffffffffff821161002357813603831361002357565b908060209392818452848401376000828201840152601f01601f1916010190565b9291906116ec611657602092604087526116276040880161161a83610278565b6001600160a01b03169052565b8381013560608801526116dc61164060408301836115a7565b9390610160948560808c01526101a08b01916115d9565b916116d361167f61166b60608401846115a7565b603f198d8803810160a08f015296916115d9565b608083013560c08c015260a083013560e08c01528a6101009660c0850135888301526116c361012060e087013581850152610140998701358a8501528601866115a7565b92909188828603019101526115d9565b938101906115a7565b91888403016101808901526115d9565b930152565b806116f95750565b600080808093338219f1503d15610283573d611714816105cf565b9061172260405192836105ad565b8152600060203d92013e565b50634e487b7160e01b600052603260045260246000fd5b9190811015611756575b60051b0190565b61175e61172e565b61174f565b3561064c81610267565b90916117869281101561178a575b60051b81019061153d565b9091565b61179261172e565b61177b565b919060408382031261002357825167ffffffffffffffff81116100235783019080601f83011215610023578151916117ce836105cf565b916117dc60405193846105ad565b83835260208483010111610023576020926117fc91848085019101610c63565b92015161064c81610267565b90816020910312610023575161064c8161044f565b60409061064c939281528160208201520190610c86565b906118489060208082518301019101611797565b90916001600160a01b03809216916118766109d3846001600160a01b03166000526000602052604060002090565b16156118ec57916020916118a093604051809581948293630b135d3f60e11b84526004840161181d565b03915afa9081156118df575b6000916118b7575090565b61064c915060203d81116118d8575b6118d081836105ad565b810190611808565b503d6118c6565b6118e76114c6565b6118ac565b6040516326cc3fab60e21b81526001600160a01b0383166004820152602490fd5b916000928392602083519301915af1604051903d6000833e1561192d5750565b3d90fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141580611982575b61196a57565b604051634776242160e01b8152336004820152602490fd5b5030331415611964565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119be57565b60405163e6fce6a560e01b8152336004820152602490fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4548015610021576000808092368280373360601b3652818060143601925af13d82803e1561192d573d90f35b6001600160a01b03808216918215611a84577f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d49081549155167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c600080a3565b60405163dd449f5f60e01b8152600490fd5b60209067ffffffffffffffff8111611aaf5760051b0190565b61175e610575565b6020918151811015611acc575b60051b010190565b611ad461172e565b611ac4565b6000198114611ae85760010190565b634e487b7160e01b600052601160045260246000fd5b611b1690602060405192828480945193849201610c63565b810103902090565b906002821015611b2b5752565b634e487b7160e01b600052602160045260246000fd5b60209093929193611b56816040810196611b1e565b0152565b9493929091946002821015611b2b5760018203611c05576000808751602089018488f4955b8615611bcf577f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee91611bca611bbb6001600160a01b0393611afe565b96604051938493169583611b41565b0390a4565b7f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a91611bca611bbb6001600160a01b0393611afe565b600080875160208901868589f195611b7f565b3561064c816106a1565b9497969391929795909560009887158015611d5e575b8015611d54575b8015611d4a575b611d1b576001978833148015611ceb575b6107335797969594939291906000985b808a10611c7a5750505050505050505050565b9091929394959697899b50611cdb888888611cd589869f8f81611cc0818e611cb98f968f97611cb36103e483611ccd9b611cc89b611745565b9c611745565b359861176d565b989094611745565b611c18565b9436916105fa565b91611eab565b9b01989796959493929190611c67565b506001600160a01b03611d146109d3336001600160a01b03166000526000602052604060002090565b1615611c57565b60405163470c355760e01b81526004810189905260248101919091526044810182905260648101869052608490fd5b5085821415611c46565b5081811415611c3f565b5080881415611c38565b6001600160a01b0381168015908115611ea0575b50611e7d57611da46112786109d3836001600160a01b03166000526000602052604060002090565b611e5a57600160009081526020527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844090611e5590611e21611e047fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6109d3565b6112ef836001600160a01b03166000526000602052604060002090565b6001600090815260205261133a817fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6112ef565b0390a1565b60405163b29d459560e01b81526001600160a01b03919091166004820152602490fd5b60405163cadb248f60e01b81526001600160a01b03919091166004820152602490fd5b600191501438611d7c565b939293611ebb5a86858585611b5a565b948515611f4e57611f23611f187f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da956001600160a01b0395604051968796338852166020870152604086015260a0606086015260a0850190610c86565b916080840190611b1e565b0390a1337f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8600080a2565b50505050337facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375600080a2565b6001600160a01b03811615611fab5781600092918360208194519301915af1604051903d6000833e1561192d575190565b60405162461bcd60e51b815260206004820152601a60248201527f57726f6e67204d6f64756c6520536574757020416464726573730000000000006044820152606490fdfea26469706673582212205e35c32c65281399d0271586e25905b496a0e4ccfd6e3ff9ffae2c43380c16ac64736f6c63430008110033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts index 448c80b26..ebd8a3108 100644 --- a/packages/modules/src/utils/Constants.ts +++ b/packages/modules/src/utils/Constants.ts @@ -20,17 +20,17 @@ export const ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION = { V1_0_0: '0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e' } -export const DEFAULT_SESSION_KEY_MANAGER_MODULE = '0x6E49e404BD70bcc4756F1057d2E2e6000cD38e1e' +export const DEFAULT_SESSION_KEY_MANAGER_MODULE = '0x000002FbFfedd9B33F4E7156F2DE8D48945E7489' export const SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION = { V1_0_0: '0x000000456b395c4e107e0302553B90D1eF4a32e9', - V1_0_1: '0x6E49e404BD70bcc4756F1057d2E2e6000cD38e1e' + V1_0_1: '0x000002FbFfedd9B33F4E7156F2DE8D48945E7489' } -export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = '0x58464D89f5763FAea0eEc57AE6E28C9CdB03b41B' +export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = '0x000008dA71757C0E1D83CE56c823e25Aa49bC058' export const BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: '0x58464D89f5763FAea0eEc57AE6E28C9CdB03b41B' + V1_0_0: '0x000008dA71757C0E1D83CE56c823e25Aa49bC058' } export const DEFAULT_MULTICHAIN_MODULE = '0x000000824dc138db84FD9109fc154bdad332Aa8E' From e0f7e0ffbc9aae064a4445d756be6c8bdb45aba1 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 12 Sep 2023 02:05:20 +0400 Subject: [PATCH 0811/1247] remove signers package --- packages/signers/package.json | 41 ----------------------------- packages/signers/src/index.ts | 8 ------ packages/signers/src/utils/Types.ts | 0 packages/signers/tsconfig.json | 11 -------- 4 files changed, 60 deletions(-) delete mode 100644 packages/signers/package.json delete mode 100644 packages/signers/src/index.ts delete mode 100644 packages/signers/src/utils/Types.ts delete mode 100644 packages/signers/tsconfig.json diff --git a/packages/signers/package.json b/packages/signers/package.json deleted file mode 100644 index 8674431d0..000000000 --- a/packages/signers/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "@biconomy/signers", - "version": "3.1.1-alpha.0", - "description": "This package provides different signers as per different validation schemes of Biconomy Smart Account Authotization Modules", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", - "keywords": [ - "Smart Account", - "ERC-4337", - "Account Abstraction", - "Smart Contract Wallets", - "Modules", - "Validation Schemes", - "Plugins" - ], - "scripts": { - "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", - "test:file": "TS_NODE_PROJECT=../../tsconfig.json mocha -r ts-node/register --timeout 30000", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", - "test:cov": "jest --coverage", - "test:run": "yarn test:file tests/**/*.spec.ts", - "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" - }, - "author": "livingrockrises ", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "publishConfig": { - "access": "public" - }, - "devDependencies": { - "@biconomy/common": "^3.1.1-alpha.0", - "@biconomy/core-types": "^3.1.1-alpha.0", - "@biconomy/node-client": "^3.1.1-alpha.0" - } -} \ No newline at end of file diff --git a/packages/signers/src/index.ts b/packages/signers/src/index.ts deleted file mode 100644 index 2a5173fb8..000000000 --- a/packages/signers/src/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Typically this could have extension of ethers Signer class implemented in very custom way - for each validation/auth module -// examples could be PassKeySigner, ECDSASigner, SessionSigner, etc. -// they would have getAddress, custom members, signMessage etc implemented in specific way with needful helpers. - -// Another addition might be high level BiconomySmartAccountSigner and BiconomySmartAccountProvider classes which wraps everything and abstracts away initialisation based on mere config -// Then those can be used to init ethers contract instance and intercept tx methods to build and dispatch userop -// providers could come in here or separate package can be made -// Any widgets and helpers specific to session key and pass key can be added in separate package \ No newline at end of file diff --git a/packages/signers/src/utils/Types.ts b/packages/signers/src/utils/Types.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/signers/tsconfig.json b/packages/signers/tsconfig.json deleted file mode 100644 index 0228bfe7a..000000000 --- a/packages/signers/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true, - }, - "include": ["src", "src/**/*.json"] -} \ No newline at end of file From 2ebe9809a09ee1c3f0de42aeb7700124e26b5e15 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 12 Sep 2023 09:56:46 +0400 Subject: [PATCH 0812/1247] update version and dependencies for account tests --- package.json | 2 +- packages/account/hardhat.config.ts | 35 +++ packages/account/package.json | 30 ++- .../tests/SmartAccountV2.local.spec.ts | 208 ++++++++---------- packages/account/tsconfig.json | 3 +- packages/bundler/package.json | 6 +- packages/common/package.json | 2 +- packages/core-types/package.json | 2 +- packages/paymaster/package.json | 6 +- packages/web3-auth-native/.eslintignore | 1 + 10 files changed, 168 insertions(+), 127 deletions(-) create mode 100644 packages/account/hardhat.config.ts diff --git a/package.json b/package.json index e91f69d05..6910ee2b8 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-security": "^1.7.1", - "hardhat": "^2.17.2", + "hardhat": "^2.17.3", "jest": "^29.6.4", "lerna": "^7.2.0", "lerna-changelog": "^2.2.0", diff --git a/packages/account/hardhat.config.ts b/packages/account/hardhat.config.ts new file mode 100644 index 000000000..e3c6d9a11 --- /dev/null +++ b/packages/account/hardhat.config.ts @@ -0,0 +1,35 @@ +import '@nomiclabs/hardhat-ethers' +import '@nomicfoundation/hardhat-toolbox' +import "hardhat-jest-plugin" + +import { HardhatUserConfig } from 'hardhat/config' + +const config: HardhatUserConfig = { + solidity: { + version: '0.8.17', + settings: { + optimizer: { enabled: true } + } + }, + defaultNetwork: 'ganache', + networks: { + hardhat: { + chainId: 31338, + accounts: { + mnemonic: 'ripple axis someone ridge uniform wrist prosper there frog rate olympic knee' + } + }, + ganache: { + chainId: 1337, + url: 'http://localhost:8545', + accounts: { + mnemonic: 'direct buyer cliff train rice spirit census refuse glare expire innocent quote', + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20 + } + } + } +} + +export default config \ No newline at end of file diff --git a/packages/account/package.json b/packages/account/package.json index 6aac3cacc..b5a1470f6 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account", - "version": "3.0.0", + "version": "3.1.1-alpha.0", "description": "This package provides apis for ERC-4337 based smart account implementations", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -16,10 +16,11 @@ "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", "build": "rimraf dist && tsc", - "test:file": "jest --config=../../jest.config.js --runInBand", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", + "test:file": "TS_NODE_PROJECT=../../tsconfig.json mocha -r ts-node/register --timeout 30000", + "test:concurrently": "concurrently -k --success first 'yarn start:ganache' 'yarn test:hardhat'", "test:cov": "jest --coverage", - "test:run": "jest tests/**/*.spec.ts --runInBand", + "test:hardhat": "hardhat test tests/*.spec.ts", + "test": "yarn test:concurrently", "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" @@ -34,13 +35,30 @@ "access": "public" }, "dependencies": { - "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0" + "@account-abstraction/contracts": "^0.6.0", + "@account-abstraction/utils": "^0.4.0", + "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0", + "hardhat": "^2.17.3" + }, + "peerDependencies": { + "ethers": "^5.7.0" }, "devDependencies": { "@biconomy/bundler": "^3.1.1-alpha.0", "@biconomy/common": "^3.1.1-alpha.0", "@biconomy/core-types": "^3.1.1-alpha.0", + "@biconomy/modules": "^3.1.1-alpha.0", "@biconomy/node-client": "^3.1.1-alpha.0", - "@biconomy/paymaster": "^3.1.1-alpha.0" + "@biconomy/paymaster": "^3.1.1-alpha.0", + "@nomicfoundation/hardhat-chai-matchers": "^1.0.6", + "@nomicfoundation/hardhat-network-helpers": "^1.0.9", + "@nomicfoundation/hardhat-toolbox": "^1.0.2", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@nomiclabs/hardhat-etherscan": "^3.1.7", + "chai": "^4.3.6", + "hardhat": "^2.17.3", + "hardhat-jest-plugin": "^0.0.6", + "hardhat-typechain": "^0.3.5", + "solidity-coverage": "^0.7.22" } } diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 3526ef0e7..8ccb69b45 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -1,154 +1,140 @@ -import { - EntryPoint, - EntryPoint__factory, - UserOperationStruct, - SimpleAccountFactory__factory -} from '@account-abstraction/contracts' -import { Wallet } from 'ethers' -import { expect } from 'chai' -import { ethers } from 'hardhat' -import { - SampleRecipient, - SampleRecipient__factory -} from '@account-abstraction/utils/dist/src/types' +import { EntryPoint, EntryPoint__factory, UserOperationStruct, SimpleAccountFactory__factory } from "@account-abstraction/contracts"; +import { Wallet } from "ethers"; +import { expect } from "chai"; +import { ethers } from "hardhat"; +import hre from "hardhat"; +import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; import { SmartAccount_v200, SmartAccountFactory_v200, SmartAccount_v200__factory, SmartAccountFactory_v200__factory, - ECDSAOwnershipRegistryModule_v100__factory -} from '@biconomy/common' - -import { BiconomySmartAccountV2 } from '../src/BiconomySmartAccountV2' -import { BiconomySmartAccount } from '../src/BiconomySmartAccount' -import { ChainId, UserOperation } from '@biconomy/core-types' -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from '@biconomy/modules' - -const provider = ethers.provider -const signer = provider.getSigner() - -describe('BiconomySmartAccount API Specs', () => { - let owner: Wallet - let factoryOwner: Wallet - let accountAPIV1: BiconomySmartAccount - let accountAPI: BiconomySmartAccountV2 - let entryPoint: EntryPoint - let beneficiary: string - let recipient: SampleRecipient - let accountAddress: string - let accountDeployed = false - - before('init', async () => { - owner = Wallet.createRandom() - entryPoint = await new EntryPoint__factory(signer).deploy() - console.log('ep address ', entryPoint.address) - beneficiary = await signer.getAddress() - factoryOwner = Wallet.createRandom() - - const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy( - entryPoint.address - ) - - const accountFactory: SmartAccountFactory_v200 = await new SmartAccountFactory_v200__factory( - signer - ).deploy(accountImpl.address, await factoryOwner.getAddress()) - - const ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy() + ECDSAOwnershipRegistryModule_v100__factory, +} from "@biconomy/common"; + +import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; +import { BiconomySmartAccount } from "../src/BiconomySmartAccount"; +import { ChainId, UserOperation } from "@biconomy/core-types"; +import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; + +const provider = ethers.provider; +const signer = provider.getSigner(); + +describe("BiconomySmartAccount API Specs", () => { + let owner: Wallet; + let factoryOwner: Wallet; + let accountAPIV1: BiconomySmartAccount; + let accountAPI: BiconomySmartAccountV2; + let entryPoint: EntryPoint; + let beneficiary: string; + let recipient: SampleRecipient; + let accountAddress: string; + let accountDeployed = false; + + before("init", async () => { + owner = Wallet.createRandom(); + entryPoint = await new EntryPoint__factory(signer).deploy(); + console.log("ep address ", entryPoint.address); + beneficiary = await signer.getAddress(); + factoryOwner = Wallet.createRandom(); + + const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); + + const accountFactory: SmartAccountFactory_v200 = await new SmartAccountFactory_v200__factory(signer).deploy( + accountImpl.address, + await factoryOwner.getAddress(), + ); + + const ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); const module = new ECDSAOwnershipValidationModule({ signer: owner, - moduleAddress: ecdsaModule.address - }) + moduleAddress: ecdsaModule.address, + }); - console.log('provider url ', provider.connection.url) + console.log("provider url ", provider.connection.url); - recipient = await new SampleRecipient__factory(signer).deploy() + recipient = await new SampleRecipient__factory(signer).deploy(); accountAPI = new BiconomySmartAccountV2({ chainId: ChainId.GANACHE, - rpcUrl: 'http://127.0.0.1:8545', + rpcUrl: "http://127.0.0.1:8545", // paymaster: paymaster, // bundler: bundler, entryPointAddress: entryPoint.address, factoryAddress: accountFactory.address, defaultValidationModule: module, - activeValidationModule: module - }) + activeValidationModule: module, + }); // console.log('account api provider ', accountAPI.provider) - accountAPI = await accountAPI.init() - - console.log('Account address ', accountAPI.accountAddress) - - const counterFactualAddress = await accountAPI.getAccountAddress() - console.log('Counterfactual address ', counterFactualAddress) - }) - - it('Nonce should be zero', async () => { - const builtUserOp = await accountAPI.buildUserOp([ - { to: recipient.address, value: ethers.utils.parseEther('1'.toString()), data: '0x' } - ]) - console.log('builtUserOp', builtUserOp) - expect(builtUserOp?.nonce?.toString()).to.be.eq('0') - }) - it('Sender should be non zero', async () => { - const builtUserOp = await accountAPI.buildUserOp([ - { to: recipient.address, value: ethers.utils.parseEther('1'.toString()), data: '0x' } - ]) - expect(builtUserOp.sender).to.be.not.equal(ethers.constants.AddressZero) - }) - it('InitCode length should be greater then 170', async () => { - const builtUserOp = await accountAPI.buildUserOp([ - { to: recipient.address, value: ethers.utils.parseEther('1'.toString()), data: '0x' } - ]) - expect(builtUserOp?.initCode?.length).to.be.greaterThan(170) - }) - it('#getUserOpHash should match entryPoint.getUserOpHash', async function () { + accountAPI = await accountAPI.init(); + + console.log("Account address ", accountAPI.accountAddress); + + const counterFactualAddress = await accountAPI.getAccountAddress(); + console.log("Counterfactual address ", counterFactualAddress); + }); + + it("Nonce should be zero", async () => { + const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); + console.log("builtUserOp", builtUserOp); + expect(builtUserOp?.nonce?.toString()).to.be.eq("0"); + }); + it("Sender should be non zero", async () => { + const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); + expect(builtUserOp.sender).to.be.not.equal(ethers.constants.AddressZero); + }); + it("InitCode length should be greater then 170", async () => { + const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); + expect(builtUserOp?.initCode?.length).to.be.greaterThan(170); + }); + it("#getUserOpHash should match entryPoint.getUserOpHash", async function () { const userOp: UserOperation = { - sender: '0x'.padEnd(42, '1'), + sender: "0x".padEnd(42, "1"), nonce: 2, - initCode: '0x3333', - callData: '0x4444', + initCode: "0x3333", + callData: "0x4444", callGasLimit: 5, verificationGasLimit: 6, preVerificationGas: 7, maxFeePerGas: 8, maxPriorityFeePerGas: 9, - paymasterAndData: '0xaaaaaa', - signature: '0xbbbb' - } - const hash = await accountAPI.getUserOpHash(userOp) - const epHash = await entryPoint.getUserOpHash(userOp) - expect(hash).to.equal(epHash) - }) - it('should deploy to counterfactual address', async () => { - accountAddress = await accountAPI.getAccountAddress() - expect(await provider.getCode(accountAddress).then((code) => code.length)).to.equal(2) + paymasterAndData: "0xaaaaaa", + signature: "0xbbbb", + }; + const hash = await accountAPI.getUserOpHash(userOp); + const epHash = await entryPoint.getUserOpHash(userOp); + expect(hash).to.equal(epHash); + }); + it("should deploy to counterfactual address", async () => { + accountAddress = await accountAPI.getAccountAddress(); + expect(await provider.getCode(accountAddress).then((code) => code.length)).to.equal(2); await signer.sendTransaction({ to: accountAddress, - value: ethers.utils.parseEther('0.1') - }) + value: ethers.utils.parseEther("0.1"), + }); const op = await accountAPI.buildUserOp([ { to: recipient.address, - data: recipient.interface.encodeFunctionData('something', ['hello']) - } - ]) + data: recipient.interface.encodeFunctionData("something", ["hello"]), + }, + ]); - const signedUserOp = await accountAPI.signUserOp(op) + const signedUserOp = await accountAPI.signUserOp(op); - await expect(entryPoint.handleOps([signedUserOp], beneficiary)).to.emit(recipient, 'Sender') + ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - expect(await provider.getCode(accountAddress).then((code) => code.length)).to.greaterThan(0) + expect(await provider.getCode(accountAddress).then((code) => code.length)).to.greaterThan(0); - accountDeployed = true - }) + accountDeployed = true; + }); // TODO // possibly use local bundler API from image - it('should build and send userop via bundler API', async () => {}) + it("should build and send userop via bundler API", async () => {}); // TODO // 1. other getter and setters @@ -159,4 +145,4 @@ describe('BiconomySmartAccount API Specs', () => { // 6. sending userOps using a paymaster // 7. sending userOps using different active validation modules // 8. deploying account using different default validation modules -}) +}); diff --git a/packages/account/tsconfig.json b/packages/account/tsconfig.json index 3dc5293ed..9222b88b4 100644 --- a/packages/account/tsconfig.json +++ b/packages/account/tsconfig.json @@ -7,5 +7,6 @@ "resolveJsonModule": true, "esModuleInterop": true }, - "include": ["src", "src/**/*.json"] + "include": ["src", "src/**/*.json", "./scripts"], + "files": ["./hardhat.config.ts"] } diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 98072dfef..6b68f71f5 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/bundler", - "version": "3.0.0", + "version": "3.1.1-alpha.0", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -37,7 +37,7 @@ "access": "public" }, "devDependencies": { - "@biconomy/common": "^3.0.0", - "@biconomy/core-types": "^3.0.0" + "@biconomy/common": "^3.1.1-alpha.0", + "@biconomy/core-types": "^3.1.1-alpha.0" } } diff --git a/packages/common/package.json b/packages/common/package.json index 50f30f76b..a3364c834 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "3.0.0", + "version": "3.1.1-alpha.0", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 304d02f07..46de4bc01 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/core-types", - "version": "3.0.0", + "version": "3.1.1-alpha.0", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index 406ea497a..55f97c989 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/paymaster", - "version": "3.0.0", + "version": "3.1.1-alpha.0", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -37,7 +37,7 @@ "access": "public" }, "devDependencies": { - "@biconomy/common": "^3.0.0", - "@biconomy/core-types": "^3.0.0" + "@biconomy/common": "^3.1.1-alpha.0", + "@biconomy/core-types": "^3.1.1-alpha.0" } } diff --git a/packages/web3-auth-native/.eslintignore b/packages/web3-auth-native/.eslintignore index e4b7bcb14..fb2795a42 100644 --- a/packages/web3-auth-native/.eslintignore +++ b/packages/web3-auth-native/.eslintignore @@ -8,6 +8,7 @@ #production /build +/src # misc .DS_Store From 9d4177e12179ccfd8b10bbc1713b160671213bb7 Mon Sep 17 00:00:00 2001 From: aboudjem Date: Tue, 12 Sep 2023 18:22:10 +0700 Subject: [PATCH 0813/1247] =?UTF-8?q?=F0=9F=8E=A8=20lint=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 2 +- .github/ISSUE_TEMPLATE/bug_report.md | 14 +++++++++----- .github/ISSUE_TEMPLATE/feature_request.md | 7 ++++++- .github/pull_request_template.md | 4 +++- .github/workflows/mark_stale.yml | 2 +- .github/workflows/push_check.yml | 4 ++-- LICENSE.md | 2 +- README.md | 4 ++-- package.json | 2 +- packages/particle-auth/README.md | 18 +++++++++--------- packages/web3-auth/README.md | 2 +- tsconfig.eslint.json | 9 +++------ 12 files changed, 39 insertions(+), 31 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index a85bda168..e085ee07b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,7 +4,7 @@ module.exports = { parserOptions: { ecmaVersion: 2020, sourceType: "module", - project: './tsconfig.eslint.json', + project: "./tsconfig.eslint.json", }, env: { node: true, diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index eb300d9f0..77e5cc62b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -3,22 +3,25 @@ ## Description + ## Steps to Reproduce -1. -2. -3. - +1. +2. +3. ## Expected Behavior + ## Actual Behavior + ## Possible Fix (optional) + ## Environment Details @@ -28,4 +31,5 @@ - **NPM/Yarn Version**: ## Additional Context - \ No newline at end of file + + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 081373b2c..3e93355fb 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -3,20 +3,25 @@ name: Feature Request about: Propose an enhancement or new feature to improve the project title: "Feature: " labels: feature-request, needs-review -assignees: '' +assignees: "" --- **Problem You're Facing** + **Proposed Solution** + **Alternatives Considered** + ## Use Cases + **Additional Info** + diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index a50eb1130..9b66596c9 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -26,8 +26,10 @@ Related Issue: # (issue number) - [ ] Any dependent changes have been merged and published # Additional Information + # Branch Naming + - \ No newline at end of file + diff --git a/.github/workflows/mark_stale.yml b/.github/workflows/mark_stale.yml index 9e3943c78..1864296c5 100644 --- a/.github/workflows/mark_stale.yml +++ b/.github/workflows/mark_stale.yml @@ -2,7 +2,7 @@ name: Mark Inactive Issues and PRs on: schedule: - - cron: '0 0 * * *' + - cron: "0 0 * * *" jobs: stale: diff --git a/.github/workflows/push_check.yml b/.github/workflows/push_check.yml index 2e279bb11..6f63af53e 100644 --- a/.github/workflows/push_check.yml +++ b/.github/workflows/push_check.yml @@ -10,7 +10,7 @@ jobs: steps: - name: Checkout - uses: 'actions/checkout@master' + uses: "actions/checkout@master" - name: Set Node.js uses: actions/setup-node@v1 @@ -30,7 +30,7 @@ jobs: steps: - name: Checkout - uses: 'actions/checkout@master' + uses: "actions/checkout@master" - name: Set Node.js uses: actions/setup-node@v1 diff --git a/LICENSE.md b/LICENSE.md index 7aa9585dc..cf907e971 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/README.md b/README.md index de8e7e5b8..cafdc1eb2 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Unlock the full potential of **ERC4337 Account Abstraction** with methods that s ```javascript const biconomyAccount = new BiconomySmartAccount(biconomySmartAccountConfig); -const biconomySmartAccount = await biconomyAccount.init(); +const biconomySmartAccount = await biconomyAccount.init(); console.log("owner: ", biconomySmartAccount.owner); console.log("address: ", biconomySmartAccount.address); ``` @@ -68,4 +68,4 @@ Community contributions are welcome! For guidelines on contributing, please read ## 📜 License -This project is licensed under the MIT License. See the [LICENSE.md](./LICENSE.md) file for details. \ No newline at end of file +This project is licensed under the MIT License. See the [LICENSE.md](./LICENSE.md) file for details. diff --git a/package.json b/package.json index e91f69d05..cd93ee03d 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "build": "lerna run build", "clean": "lerna clean && lerna run unbuild", "format": "lerna run format --npm-client=yarn", - "prettier": "lerna run prettier --npm-client=yarn", + "prettier": "npx prettier --write .", "lint": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}'", "lint:fix": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}' --fix", "test": "yarn jest --runInBand", diff --git a/packages/particle-auth/README.md b/packages/particle-auth/README.md index f2cf214fd..fabfcc5dc 100644 --- a/packages/particle-auth/README.md +++ b/packages/particle-auth/README.md @@ -5,15 +5,15 @@ ## Usage ```ts -import { ParticleNetwork, WalletEntryPosition } from '@particle-network/auth'; -import { ParticleProvider } from '@particle-network/provider'; -import Web3 from 'web3'; +import { ParticleNetwork, WalletEntryPosition } from "@particle-network/auth"; +import { ParticleProvider } from "@particle-network/provider"; +import Web3 from "web3"; const particle = new ParticleNetwork({ - projectId: 'xx', - clientKey: 'xx', - appId: 'xx', - chainName: 'Ethereum', //optional: current chain name, default Ethereum. + projectId: "xx", + clientKey: "xx", + appId: "xx", + chainName: "Ethereum", //optional: current chain name, default Ethereum. chainId: 1, //optional: current chain id, default 1. wallet: { //optional: by default, the wallet entry is displayed in the bottom right corner of the webpage. @@ -35,7 +35,7 @@ window.web3 = new Web3(particleProvider); window.web3.currentProvider.isParticleNetwork; // => true //if you use ethers.js -import { ethers } from 'ethers'; -const ethersProvider = new ethers.providers.Web3Provider(particleProvider, 'any'); +import { ethers } from "ethers"; +const ethersProvider = new ethers.providers.Web3Provider(particleProvider, "any"); const ethersSigner = ethersProvider.getSigner(); ``` diff --git a/packages/web3-auth/README.md b/packages/web3-auth/README.md index 5ef27dc7f..1ed6c771a 100644 --- a/packages/web3-auth/README.md +++ b/packages/web3-auth/README.md @@ -5,7 +5,7 @@ ## Usage ```ts -import SocialLogin from '@biconomy/web3-auth'; +import SocialLogin from "@biconomy/web3-auth"; // init wallet const socialLoginSDK = new SocialLogin(); await socialLoginSDK.init(); diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index 92546355a..e4b76f44d 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -1,7 +1,4 @@ { - "extends": "./tsconfig.json", - "include": [ - "packages/**/*" - ] - } - \ No newline at end of file + "extends": "./tsconfig.json", + "include": ["packages/**/*"] +} From c5e23953728f008c20e017b6697271037617f4bb Mon Sep 17 00:00:00 2001 From: aboudjem Date: Tue, 12 Sep 2023 18:29:08 +0700 Subject: [PATCH 0814/1247] =?UTF-8?q?=F0=9F=9A=9A=20move=20devdep=20to=20d?= =?UTF-8?q?ep?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/account/package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index 4e86b3480..0ff98d56b 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -33,11 +33,12 @@ "publishConfig": { "access": "public" }, - "devDependencies": { + "dependencies": { "@biconomy/bundler": "^3.0.0", "@biconomy/common": "^3.0.0", "@biconomy/core-types": "^3.0.0", "@biconomy/node-client": "^3.0.0", - "@biconomy/paymaster": "^3.0.0" + "@biconomy/paymaster": "^3.0.0", + "ethers": "^6.7.1" } } From e727192a629568265bdbd8021b947c50b708cc8b Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 12 Sep 2023 16:56:57 +0400 Subject: [PATCH 0815/1247] remove hardhat dependency for test --- package.json | 2 +- packages/account/hardhat.config.ts | 35 ------------------- packages/account/package.json | 21 +++-------- .../tests/SmartAccountV2.local.spec.ts | 21 +++++------ 4 files changed, 15 insertions(+), 64 deletions(-) delete mode 100644 packages/account/hardhat.config.ts diff --git a/package.json b/package.json index 6910ee2b8..b4b9fe879 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-security": "^1.7.1", "hardhat": "^2.17.3", - "jest": "^29.6.4", + "jest": "^29.7.0", "lerna": "^7.2.0", "lerna-changelog": "^2.2.0", "nx": "^16.8.1", diff --git a/packages/account/hardhat.config.ts b/packages/account/hardhat.config.ts deleted file mode 100644 index e3c6d9a11..000000000 --- a/packages/account/hardhat.config.ts +++ /dev/null @@ -1,35 +0,0 @@ -import '@nomiclabs/hardhat-ethers' -import '@nomicfoundation/hardhat-toolbox' -import "hardhat-jest-plugin" - -import { HardhatUserConfig } from 'hardhat/config' - -const config: HardhatUserConfig = { - solidity: { - version: '0.8.17', - settings: { - optimizer: { enabled: true } - } - }, - defaultNetwork: 'ganache', - networks: { - hardhat: { - chainId: 31338, - accounts: { - mnemonic: 'ripple axis someone ridge uniform wrist prosper there frog rate olympic knee' - } - }, - ganache: { - chainId: 1337, - url: 'http://localhost:8545', - accounts: { - mnemonic: 'direct buyer cliff train rice spirit census refuse glare expire innocent quote', - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20 - } - } - } -} - -export default config \ No newline at end of file diff --git a/packages/account/package.json b/packages/account/package.json index b5a1470f6..5f2f8a142 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -16,11 +16,11 @@ "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", "build": "rimraf dist && tsc", - "test:file": "TS_NODE_PROJECT=../../tsconfig.json mocha -r ts-node/register --timeout 30000", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache' 'yarn test:hardhat'", + "test:concurrently": "concurrently -k --success first 'yarn start:ganache' 'yarn test'", "test:cov": "jest --coverage", "test:hardhat": "hardhat test tests/*.spec.ts", - "test": "yarn test:concurrently", + "test": "jest tests/**/*.spec.ts --runInBand", + "test:run": "yarn test:concurrently", "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" @@ -37,8 +37,7 @@ "dependencies": { "@account-abstraction/contracts": "^0.6.0", "@account-abstraction/utils": "^0.4.0", - "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0", - "hardhat": "^2.17.3" + "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0" }, "peerDependencies": { "ethers": "^5.7.0" @@ -49,16 +48,6 @@ "@biconomy/core-types": "^3.1.1-alpha.0", "@biconomy/modules": "^3.1.1-alpha.0", "@biconomy/node-client": "^3.1.1-alpha.0", - "@biconomy/paymaster": "^3.1.1-alpha.0", - "@nomicfoundation/hardhat-chai-matchers": "^1.0.6", - "@nomicfoundation/hardhat-network-helpers": "^1.0.9", - "@nomicfoundation/hardhat-toolbox": "^1.0.2", - "@nomiclabs/hardhat-ethers": "^2.2.3", - "@nomiclabs/hardhat-etherscan": "^3.1.7", - "chai": "^4.3.6", - "hardhat": "^2.17.3", - "hardhat-jest-plugin": "^0.0.6", - "hardhat-typechain": "^0.3.5", - "solidity-coverage": "^0.7.22" + "@biconomy/paymaster": "^3.1.1-alpha.0" } } diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 8ccb69b45..e94b1e005 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -1,8 +1,5 @@ import { EntryPoint, EntryPoint__factory, UserOperationStruct, SimpleAccountFactory__factory } from "@account-abstraction/contracts"; -import { Wallet } from "ethers"; -import { expect } from "chai"; -import { ethers } from "hardhat"; -import hre from "hardhat"; +import { Wallet, ethers } from "ethers"; import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; import { @@ -18,7 +15,7 @@ import { BiconomySmartAccount } from "../src/BiconomySmartAccount"; import { ChainId, UserOperation } from "@biconomy/core-types"; import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; -const provider = ethers.provider; +const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); describe("BiconomySmartAccount API Specs", () => { @@ -32,7 +29,7 @@ describe("BiconomySmartAccount API Specs", () => { let accountAddress: string; let accountDeployed = false; - before("init", async () => { + beforeAll(async () => { owner = Wallet.createRandom(); entryPoint = await new EntryPoint__factory(signer).deploy(); console.log("ep address ", entryPoint.address); @@ -80,15 +77,15 @@ describe("BiconomySmartAccount API Specs", () => { it("Nonce should be zero", async () => { const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); console.log("builtUserOp", builtUserOp); - expect(builtUserOp?.nonce?.toString()).to.be.eq("0"); + expect(builtUserOp?.nonce?.toString()).toBe("0"); }); it("Sender should be non zero", async () => { const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - expect(builtUserOp.sender).to.be.not.equal(ethers.constants.AddressZero); + expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); }); it("InitCode length should be greater then 170", async () => { const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - expect(builtUserOp?.initCode?.length).to.be.greaterThan(170); + expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); }); it("#getUserOpHash should match entryPoint.getUserOpHash", async function () { const userOp: UserOperation = { @@ -106,11 +103,11 @@ describe("BiconomySmartAccount API Specs", () => { }; const hash = await accountAPI.getUserOpHash(userOp); const epHash = await entryPoint.getUserOpHash(userOp); - expect(hash).to.equal(epHash); + expect(hash).toBe(epHash); }); it("should deploy to counterfactual address", async () => { accountAddress = await accountAPI.getAccountAddress(); - expect(await provider.getCode(accountAddress).then((code) => code.length)).to.equal(2); + expect(await provider.getCode(accountAddress).then((code) => code.length)).toBe(2); await signer.sendTransaction({ to: accountAddress, @@ -127,7 +124,7 @@ describe("BiconomySmartAccount API Specs", () => { ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - expect(await provider.getCode(accountAddress).then((code) => code.length)).to.greaterThan(0); + expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); accountDeployed = true; }); From e0c4a72ad9133aee2c5e4711a34aa3bbc3bb2bdc Mon Sep 17 00:00:00 2001 From: aboudjem Date: Tue, 12 Sep 2023 20:16:28 +0700 Subject: [PATCH 0816/1247] =?UTF-8?q?=F0=9F=A9=B9=20fix=20dependencies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/account/package.json | 3 ++- packages/bundler/package.json | 6 ++++-- packages/paymaster/package.json | 5 +++-- packages/web3-auth-native/package.json | 2 +- packages/web3-auth/package.json | 3 +-- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index 0ff98d56b..3a63a9855 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -39,6 +39,7 @@ "@biconomy/core-types": "^3.0.0", "@biconomy/node-client": "^3.0.0", "@biconomy/paymaster": "^3.0.0", - "ethers": "^6.7.1" + "ethers": "^5.7.0", + "@ethersproject/providers": "5.7.2" } } diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 98072dfef..e93128c0a 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -36,8 +36,10 @@ "publishConfig": { "access": "public" }, - "devDependencies": { + "dependencies": { "@biconomy/common": "^3.0.0", - "@biconomy/core-types": "^3.0.0" + "@biconomy/core-types": "^3.0.0", + "@ethersproject/providers": "^5.7.2", + "ethers": "^5.7.0" } } diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index 406ea497a..65dec8869 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -36,8 +36,9 @@ "publishConfig": { "access": "public" }, - "devDependencies": { + "dependencies": { "@biconomy/common": "^3.0.0", - "@biconomy/core-types": "^3.0.0" + "@biconomy/core-types": "^3.0.0", + "ethers": "^5.7.0" } } diff --git a/packages/web3-auth-native/package.json b/packages/web3-auth-native/package.json index 4cd4abcd8..37ecae8bf 100644 --- a/packages/web3-auth-native/package.json +++ b/packages/web3-auth-native/package.json @@ -36,6 +36,7 @@ "@biconomy/node-client": "^3.0.0", "@toruslabs/openlogin-jrpc": "^2.9.0", "@toruslabs/openlogin-utils": "^2.1.0", + "@toruslabs/openlogin": "^2.8.0", "base64url": "^3.0.1", "buffer": "^6.0.3", "loglevel": "^1.8.1", @@ -48,7 +49,6 @@ "devDependencies": { "@babel/runtime": "^7.20.1", "@toruslabs/eslint-config-typescript": "1.2.0", - "@toruslabs/openlogin": "^2.8.0", "@toruslabs/torus-scripts": "^1.3.0", "@types/node": "^16", "@types/react-native": "^0.69.3", diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index f2841e6e3..98b0a5cd9 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -43,13 +43,12 @@ "@web3auth/metamask-adapter": "^3.0.0", "@web3auth/openlogin-adapter": "^3.0.3", "@web3auth/wallet-connect-v1-adapter": "^3.0.3", - "ethers": "^5.6.8", + "ethers": "^5.7.0", "process": "^0.11.10", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { - "@biconomy/node-client": "^3.0.0-alpha.0", "@types/react": "^18.0.15", "@types/react-dom": "^18.0.6", "path": "^0.12.7", From 7b7c04b8bdf59da9fb213716c0ee873af697b83d Mon Sep 17 00:00:00 2001 From: aboudjem Date: Tue, 12 Sep 2023 20:16:44 +0700 Subject: [PATCH 0817/1247] =?UTF-8?q?=F0=9F=92=9A=20fix=20github=20action?= =?UTF-8?q?=20for=20branch=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/check_branch_name.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/workflows/check_branch_name.yml b/.github/workflows/check_branch_name.yml index 58690154a..9c4cf9a67 100644 --- a/.github/workflows/check_branch_name.yml +++ b/.github/workflows/check_branch_name.yml @@ -1,18 +1,21 @@ name: Check Branch Name + on: create: + types: [branch] jobs: check-branch-name: runs-on: ubuntu-latest - if: | - github.event.ref_type == 'branch' && - !contains(['main', 'master', 'development', 'dev', 'develop'], github.ref) # ref_type check ensures the job only runs for branch creation, not tags + if: github.event.ref_type == 'branch' steps: - - name: Check Branch Name + - name: Ensure branch name follows GitFlow conventions run: | - BRANCH_NAME=${GITHUB_REF#refs/heads/} + BRANCH_NAME="${{ github.ref#refs/heads/ }}" + echo "Created branch: $BRANCH_NAME" + + # Checking against GitFlow naming conventions for branches if [[ ! $BRANCH_NAME =~ ^(features/|fixes/|releases/) ]]; then - echo "Invalid branch name. Must start with 'features/', 'fixes/', or 'releases/'." + echo "error: Branch names should follow GitFlow naming convention (features/, fixes/, releases/)." exit 1 - fi + fi \ No newline at end of file From c996dff6f148b6823c5d5d361aef752f45c51e55 Mon Sep 17 00:00:00 2001 From: aboudjem Date: Tue, 12 Sep 2023 20:52:08 +0700 Subject: [PATCH 0818/1247] =?UTF-8?q?=F0=9F=92=A9=20remove=20temporarily?= =?UTF-8?q?=20lint=20rules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index e085ee07b..8511d52f7 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -15,13 +15,16 @@ module.exports = { "prettier/prettier": "error", "no-var": "error", "prefer-const": "error", - "no-unused-vars": ["error", { argsIgnorePattern: "^_" }], + "no-unused-vars": ["warn", { argsIgnorePattern: "^_" }], // needs to be set to "error" later "no-console": "warn", + "@typescript-eslint/naming-convention": "off", // needs to be removed later "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }], "security/detect-object-injection": "warn", "security/detect-unsafe-regex": "error", + "import/extensions": "off", + "@typescript-eslint/no-throw-literal": "off", // temp deactivated needs to be removed once fixed }, settings: {}, overrides: [ From de30076952f610605b78722d87ba30246a6bb4a3 Mon Sep 17 00:00:00 2001 From: aboudjem Date: Tue, 12 Sep 2023 20:53:05 +0700 Subject: [PATCH 0819/1247] =?UTF-8?q?=F0=9F=93=A6=20fix=20packages=20on=20?= =?UTF-8?q?package.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/common/package.json | 1 + packages/core-types/package.json | 1 + packages/paymaster/package.json | 2 ++ 3 files changed, 4 insertions(+) diff --git a/packages/common/package.json b/packages/common/package.json index ba6236934..549eebd1e 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -51,6 +51,7 @@ "concurrently": "^7.4.0", "debug": "^4.3.4", "ethers": "^5.7.0", + "node-fetch": "^3.3.2", "typechain": "^8.1.1" }, "devDependencies": { diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 304d02f07..881184de9 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -39,6 +39,7 @@ "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.7.0", + "ethers": "^6.7.1", "web3-core": "^1.7.1" } } diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index 65dec8869..aac0c3e71 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -39,6 +39,8 @@ "dependencies": { "@biconomy/common": "^3.0.0", "@biconomy/core-types": "^3.0.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/properties": "^5.7.0", "ethers": "^5.7.0" } } From af4fcca65696e922fb82529f0d0564c187e87761 Mon Sep 17 00:00:00 2001 From: aboudjem Date: Tue, 12 Sep 2023 20:53:24 +0700 Subject: [PATCH 0820/1247] =?UTF-8?q?=F0=9F=9A=A8=20fix=20lint=20issues?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/account/src/SmartAccount.ts | 9 ++------- packages/bundler/src/Bundler.ts | 2 +- packages/common/src/httpRequests.ts | 2 +- packages/web3-auth/src/SocialLogin.tsx | 12 ++++++------ 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index 8cdd7448d..154a77748 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -140,13 +140,8 @@ export abstract class SmartAccount implements ISmartAccount { async isAccountDeployed(address: string): Promise { this.isProviderDefined(); - let contractCode; - try { - contractCode = await this.provider.getCode(address); - return contractCode !== "0x"; - } catch (error) { - throw error; - } + const contractCode = await this.provider.getCode(address); + return contractCode !== "0x"; } // Would only be used if paymaster is attached diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index ea5a96952..0fc8668a5 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -98,7 +98,7 @@ export class Bundler implements IBundler { userOpHash: sendUserOperationResponse.result, wait: (confirmations?: number): Promise => { const provider = new JsonRpcProvider(RPC_PROVIDER_URLS[chainId]); - return new Promise(async (resolve, reject) => { + return new Promise((resolve, reject) => { const intervalId = setInterval(async () => { try { const userOpResponse = await this.getUserOpReceipt(sendUserOperationResponse.result); diff --git a/packages/common/src/httpRequests.ts b/packages/common/src/httpRequests.ts index b2d81b1b3..99bb0366a 100644 --- a/packages/common/src/httpRequests.ts +++ b/packages/common/src/httpRequests.ts @@ -38,7 +38,7 @@ export async function sendRequest({ url, method, body, headers = {} }: HttpRe Logger.log("jsonRpc response ", jsonResponse); if (response.ok) { - if (jsonResponse && jsonResponse.hasOwnProperty("result")) { + if (jsonResponse && Object.prototype.hasOwnProperty.call(jsonResponse, "result")) { return jsonResponse as T; } // else diff --git a/packages/web3-auth/src/SocialLogin.tsx b/packages/web3-auth/src/SocialLogin.tsx index 336c8a8fa..8d0cdab6e 100644 --- a/packages/web3-auth/src/SocialLogin.tsx +++ b/packages/web3-auth/src/SocialLogin.tsx @@ -18,6 +18,10 @@ function createLoginModal(socialLogin: SocialLogin) { root.render(); } +const defaultSocialLoginConfig: DefaultSocialLoginConfig = { + backendUrl: "https://sdk-backend.prod.biconomy.io/v1", +}; + class SocialLogin { /* eslint-disable @typescript-eslint/no-explicit-any */ walletDiv: any; @@ -312,9 +316,8 @@ class SocialLogin { } } -const defaultSocialLoginConfig: DefaultSocialLoginConfig = { - backendUrl: "https://sdk-backend.prod.biconomy.io/v1", -}; +const socialLoginSDK: SocialLogin = new SocialLogin(); +(window as any).socialLoginSDK = socialLoginSDK; export default SocialLogin; @@ -327,8 +330,5 @@ const getSocialLoginSDK = async (socialLoginDTO?: Partial) => { initializedSocialLogin = socialLoginSDK; return socialLoginSDK; }; -/* eslint-disable @typescript-eslint/no-explicit-any */ -const socialLoginSDK: SocialLogin = new SocialLogin(); -(window as any).socialLoginSDK = socialLoginSDK; export { socialLoginSDK, getSocialLoginSDK }; From 8424160cef1ccd25dac6b4766917d559e6d75474 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 12 Sep 2023 20:19:25 +0400 Subject: [PATCH 0821/1247] update tsconfig for account --- packages/account/tsconfig.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/account/tsconfig.json b/packages/account/tsconfig.json index 9222b88b4..d4bee29bb 100644 --- a/packages/account/tsconfig.json +++ b/packages/account/tsconfig.json @@ -7,6 +7,5 @@ "resolveJsonModule": true, "esModuleInterop": true }, - "include": ["src", "src/**/*.json", "./scripts"], - "files": ["./hardhat.config.ts"] + "include": ["src", "src/**/*.json"], } From 3e68f7b06dd19d71403fe243f4762632dd06d79b Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 13 Sep 2023 10:00:20 +0400 Subject: [PATCH 0822/1247] review dev notes + account added api specs + updated jest config --- package.json | 4 +- packages/account/package.json | 1 - .../account/src/BiconomySmartAccountV2.ts | 543 +++++++++--------- .../tests/SmartAccountV2.local.spec.ts | 253 +++++++- .../MultiChainValidationModule_v1.0.0.json | 298 ++++++++++ 5 files changed, 804 insertions(+), 295 deletions(-) create mode 100644 packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json diff --git a/package.json b/package.json index 6d86b7828..80c19155a 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,9 @@ "prettier": "npx prettier --write .", "lint": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}'", "lint:fix": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}' --fix", - "test": "yarn jest --runInBand", + "test:run": "yarn jest --runInBand", + "test": "concurrently -k --success first 'yarn start:ganache' 'yarn test:run'", + "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", "test:coverage": "yarn jest --coverage", "diff": "lerna diff", diff --git a/packages/account/package.json b/packages/account/package.json index 5f2f8a142..386d7943d 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -18,7 +18,6 @@ "build": "rimraf dist && tsc", "test:concurrently": "concurrently -k --success first 'yarn start:ganache' 'yarn test'", "test:cov": "jest --coverage", - "test:hardhat": "hardhat test tests/*.spec.ts", "test": "jest tests/**/*.spec.ts --runInBand", "test:run": "yarn test:concurrently", "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index e0121a9da..aeec757ec 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1,31 +1,26 @@ -import { JsonRpcProvider } from '@ethersproject/providers' -import { Signer } from 'ethers' -import { ethers, BigNumberish, BytesLike, BigNumber } from 'ethers' -import { BaseSmartAccount } from './BaseSmartAccount' -import { keccak256, Bytes, arrayify, hexConcat } from 'ethers/lib/utils' -import { Logger, NODE_CLIENT_URL, RPC_PROVIDER_URLS } from '@biconomy/common' +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Signer } from "ethers"; +import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; +import { BaseSmartAccount } from "./BaseSmartAccount"; +import { keccak256, Bytes, arrayify, hexConcat } from "ethers/lib/utils"; +import { Logger, NODE_CLIENT_URL, RPC_PROVIDER_URLS } from "@biconomy/common"; // Review failure reason for import from '@biconomy/account-contracts-v2/typechain' -import { - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory -} from '@biconomy/common' +import { SmartAccount_v200, SmartAccountFactory_v200, SmartAccount_v200__factory, SmartAccountFactory_v200__factory } from "@biconomy/common"; import { Overrides, BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, CounterFactualAddressParam, - BuildUserOpOptions -} from './utils/Types' -import { BaseValidationModule, ModuleInfo } from '@biconomy/modules' -import { UserOperation, Transaction, SmartAccountType } from '@biconomy/core-types' -import NodeClient from '@biconomy/node-client' -import INodeClient from '@biconomy/node-client' -import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from '@biconomy/paymaster' + BuildUserOpOptions, +} from "./utils/Types"; +import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; +import { UserOperation, Transaction, SmartAccountType } from "@biconomy/core-types"; +import NodeClient from "@biconomy/node-client"; +import INodeClient from "@biconomy/node-client"; +import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; import { SupportedChainsResponse, BalancesResponse, @@ -33,100 +28,96 @@ import { UsdBalanceResponse, SmartAccountByOwnerDto, SmartAccountsResponse, - SCWTransactionResponse -} from '@biconomy/node-client' -import { UserOpResponse } from '@biconomy/bundler' -import { DEFAULT_BICONOMY_FACTORY_ADDRESS } from './utils/Constants' + SCWTransactionResponse, +} from "@biconomy/node-client"; +import { UserOpResponse } from "@biconomy/bundler"; +import { DEFAULT_BICONOMY_FACTORY_ADDRESS } from "./utils/Constants"; -type UserOperationKey = keyof UserOperation +type UserOperationKey = keyof UserOperation; export class BiconomySmartAccountV2 extends BaseSmartAccount { - private nodeClient: INodeClient + private nodeClient: INodeClient; + + private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; // Review: Marked for deletion // private smartAccountInfo!: ISmartAccount // private _isInitialised!: boolean - factoryAddress?: string + factoryAddress?: string; /** * our account contract. * should support the "execFromEntryPoint" and "nonce" methods */ - accountContract?: SmartAccount_v200 + accountContract?: SmartAccount_v200; // TODO: both should be V2 - factory?: SmartAccountFactory_v200 + factory?: SmartAccountFactory_v200; // Validation module responsible for account deployment initCode. This acts as a default authorization module. - defaultValidationModule: BaseValidationModule + defaultValidationModule: BaseValidationModule; + // Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature. - activeValidationModule: BaseValidationModule + activeValidationModule: BaseValidationModule; constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) { - super(biconomySmartAccountConfig) + super(biconomySmartAccountConfig); // Review: if it's really needed to supply factory address - this.factoryAddress = - biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS // This would be fetched from V2 + this.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule + this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.activeValidationModule = - biconomySmartAccountConfig.activeValidationModule ?? this.defaultValidationModule + this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? this.defaultValidationModule; - const { rpcUrl, nodeClientUrl } = biconomySmartAccountConfig + const { rpcUrl, nodeClientUrl } = biconomySmartAccountConfig; if (rpcUrl) { - this.provider = new JsonRpcProvider(rpcUrl) + this.provider = new JsonRpcProvider(rpcUrl); } - this.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }) + this.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); } async _getAccountContract(): Promise { if (this.accountContract == null) { - this.accountContract = SmartAccount_v200__factory.connect( - await this.getAccountAddress(), - this.provider - ) + this.accountContract = SmartAccount_v200__factory.connect(await this.getAccountAddress(), this.provider); } - return this.accountContract + return this.accountContract; } isActiveValidationModuleDefined(): boolean { - if (!this.activeValidationModule) - throw new Error('Must provide an instance of active validation module.') - return true + if (!this.activeValidationModule) throw new Error("Must provide an instance of active validation module."); + return true; } isDefaultValidationModuleDefined(): boolean { - if (!this.defaultValidationModule) - throw new Error('Must provide an instance of default validation module.') - return true + if (!this.defaultValidationModule) throw new Error("Must provide an instance of default validation module."); + return true; } setActiveValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { if (validationModule instanceof BaseValidationModule) { - this.activeValidationModule = validationModule + this.activeValidationModule = validationModule; } - return this + return this; } setDefaultValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { if (validationModule instanceof BaseValidationModule) { - this.defaultValidationModule = validationModule + this.defaultValidationModule = validationModule; } - return this + return this; } // Could call it nonce space async getNonce(nonceKey?: number): Promise { - const nonceSpace = nonceKey ?? 0 + const nonceSpace = nonceKey ?? 0; if (await this.isAccountDeployed(await this.getAccountAddress())) { - const accountContract = await this._getAccountContract() - return await accountContract.nonce(nonceSpace) + const accountContract = await this._getAccountContract(); + return accountContract.nonce(nonceSpace); } - return BigNumber.from(0) + return BigNumber.from(0); } // Review @@ -140,23 +131,23 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // use Factory method instead if (this.factory == null) { - if (this.factoryAddress != null && this.factoryAddress !== '') { - this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider) + if (this.factoryAddress != null && this.factoryAddress !== "") { + this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); } else { - throw new Error('no factory to get initCode') + throw new Error("no factory to get initCode"); } } - const _defaultAuthModule = params?.validationModule ?? this.defaultValidationModule - const _index = params?.index ?? this.index + const _defaultAuthModule = params?.validationModule ?? this.defaultValidationModule; + const _index = params?.index ?? this.index; const counterFactualAddress = await this.factory.getAddressForCounterFactualAccount( await _defaultAuthModule.getAddress(), await _defaultAuthModule.getInitData(), - _index - ) + _index, + ); - return counterFactualAddress + return counterFactualAddress; } /** @@ -165,31 +156,31 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { */ async getAccountInitCode(): Promise { if (this.factory == null) { - if (this.factoryAddress != null && this.factoryAddress !== '') { - this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider) + if (this.factoryAddress != null && this.factoryAddress !== "") { + this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); } else { - throw new Error('no factory to get initCode') + throw new Error("no factory to get initCode"); } } - this.isDefaultValidationModuleDefined() + this.isDefaultValidationModuleDefined(); const populatedTransaction = await this.factory.populateTransaction.deployCounterFactualAccount( await this.defaultValidationModule.getAddress(), await this.defaultValidationModule.getInitData(), - this.index - ) + this.index, + ); // TODO: interface should work. return hexConcat([ this.factory.address, - populatedTransaction.data as string + populatedTransaction.data as string, /*this.factory.interface.encodeFunctionData('deployCounterFactualAccount', [ await this.defaultValidationModule.getAddress(), await this.defaultValidationModule.getInitData(), this.index ])*/ - ]) + ]); } /** @@ -202,13 +193,9 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { async encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise { // this.isInitialized() // this.isProxyDefined() - const accountContract = await this._getAccountContract() + const accountContract = await this._getAccountContract(); - const populatedTransaction = await accountContract.populateTransaction.execute_ncC( - to, - value, - data - ) + const populatedTransaction = await accountContract.populateTransaction.execute_ncC(to, value, data); /*const executeCallData = accountContract.interface.encodeFunctionData('execute_ncC', [ to, @@ -216,8 +203,9 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { data ])*/ - return populatedTransaction.data as string + return populatedTransaction.data as string; } + /** * * @param to { target } array of addresses in transaction @@ -225,65 +213,62 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @param data represent array of data associated with each transaction * @returns */ - async encodeExecuteBatch( - to: Array, - value: Array, - data: Array - ): Promise { + async encodeExecuteBatch(to: Array, value: Array, data: Array): Promise { // this.isInitialized() // this.isProxyDefined() - const accountContract = await this._getAccountContract() - const populatedTransaction = await accountContract.populateTransaction.executeBatch_y6U( - to, - value, - data - ) + const accountContract = await this._getAccountContract(); + const populatedTransaction = await accountContract.populateTransaction.executeBatch_y6U(to, value, data); /*const executeBatchCallData = accountContract.interface.encodeFunctionData('executeBatch_y6U', [ to, value, data ])*/ - return populatedTransaction.data as string + return populatedTransaction.data as string; } // dummy signature depends on the validation module supplied. async getDummySignature(params?: ModuleInfo): Promise { - this.isActiveValidationModuleDefined() - return await this.activeValidationModule.getDummySignature(params) + this.isActiveValidationModuleDefined(); + return this.activeValidationModule.getDummySignature(params); } // Review: // Might use provided paymaster instance to get dummy data (from pm service) getDummyPaymasterData(): string { - return '0x' + return "0x"; } async signUserOp(userOp: Partial, params?: ModuleInfo): Promise { - this.isActiveValidationModuleDefined() + this.isActiveValidationModuleDefined(); const requiredFields: UserOperationKey[] = [ - 'sender', - 'nonce', - 'initCode', - 'callData', - 'callGasLimit', - 'verificationGasLimit', - 'preVerificationGas', - 'maxFeePerGas', - 'maxPriorityFeePerGas', - 'paymasterAndData' - ] - super.validateUserOp(userOp, requiredFields) - const userOpHash = await this.getUserOpHash(userOp) - - const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params) + "sender", + "nonce", + "initCode", + "callData", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "paymasterAndData", + ]; + super.validateUserOp(userOp, requiredFields); + const userOpHash = await this.getUserOpHash(userOp); + + const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); const signatureWithModuleAddress = ethers.utils.defaultAbiCoder.encode( - ['bytes', 'address'], - [moduleSig, this.activeValidationModule.getAddress()] - ) + ["bytes", "address"], + [moduleSig, this.activeValidationModule.getAddress()], + ); + + userOp.signature = signatureWithModuleAddress; + return userOp as UserOperation; + } - userOp.signature = signatureWithModuleAddress - return userOp as UserOperation + getSignatureWithModuleAddress(moduleSignature: string, moduleAddress?: string): string { + const moduleAddressToUse = moduleAddress ?? this.activeValidationModule.getAddress(); + return ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [moduleSignature, moduleAddressToUse]); } /** @@ -294,45 +279,42 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @returns Promise */ async sendUserOp(userOp: Partial, params?: ModuleInfo): Promise { - Logger.log('userOp received in base account ', userOp) - delete userOp.signature - const userOperation = await this.signUserOp(userOp, params) - const bundlerResponse = await this.sendSignedUserOp(userOperation) - return bundlerResponse + Logger.log("userOp received in base account ", userOp); + delete userOp.signature; + const userOperation = await this.signUserOp(userOp, params); + const bundlerResponse = await this.sendSignedUserOp(userOperation); + return bundlerResponse; } - async buildUserOp( - transactions: Transaction[], - buildUseropDto?: BuildUserOpOptions - ): Promise> { + async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { // Review: may not need at all // this.isInitialized() // TODO: validate to, value and data fields // TODO: validate overrides if supplied - const to = transactions.map((element: Transaction) => element.to) - const data = transactions.map((element: Transaction) => element.data ?? '0x') - const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from('0')) + const to = transactions.map((element: Transaction) => element.to); + const data = transactions.map((element: Transaction) => element.data ?? "0x"); + const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); if (transactions.length === 0) { - throw new Error('Transactions array cannot be empty') + throw new Error("Transactions array cannot be empty"); } - let callData = '' + let callData = ""; if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { - callData = await this.encodeExecuteBatch(to, value, data) + callData = await this.encodeExecuteBatch(to, value, data); } else { // transactions.length must be 1 - callData = await this.encodeExecute(to[0], value[0], data[0]) + callData = await this.encodeExecute(to[0], value[0], data[0]); } - let nonce = BigNumber.from(0) + let nonce = BigNumber.from(0); try { if (buildUseropDto?.nonceOptions?.nonceOverride) { - nonce = BigNumber.from(buildUseropDto?.nonceOptions?.nonceOverride) + nonce = BigNumber.from(buildUseropDto?.nonceOptions?.nonceOverride); } else { - const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0 - nonce = await this.getNonce(_nonceSpace) + const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0; + nonce = await this.getNonce(_nonceSpace); } } catch (error) { // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account @@ -348,49 +330,38 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { sender: this.accountAddress, nonce, initCode: await this.getInitCode(), - callData: callData - } + callData: callData, + }; // for this Smart Account current validation module dummy signature will be used to estimate gas - userOp.signature = await this.getDummySignature(buildUseropDto?.params) + userOp.signature = await this.getDummySignature(buildUseropDto?.params); - userOp = await this.estimateUserOpGas( - userOp, - buildUseropDto?.overrides, - buildUseropDto?.skipBundlerGasEstimation - ) - Logger.log('UserOp after estimation ', userOp) + userOp = await this.estimateUserOpGas(userOp, buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation); + Logger.log("UserOp after estimation ", userOp); // Do not populate paymasterAndData as part of buildUserOp as it may not have all necessary details - userOp.paymasterAndData = '0x' // await this.getPaymasterAndData(userOp) + userOp.paymasterAndData = "0x"; // await this.getPaymasterAndData(userOp) - return userOp + return userOp; } - private validateUserOpAndPaymasterRequest( - userOp: Partial, - tokenPaymasterRequest: BiconomyTokenPaymasterRequest - ): void { + private validateUserOpAndPaymasterRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { if (!userOp.callData) { - throw new Error('UserOp callData cannot be undefined') + throw new Error("UserOp callData cannot be undefined"); } - const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress - Logger.log('Requested fee token is ', feeTokenAddress) + const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress; + Logger.log("Requested fee token is ", feeTokenAddress); if (!feeTokenAddress || feeTokenAddress == ethers.constants.AddressZero) { - throw new Error( - 'Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest' - ) + throw new Error("Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest"); } - const spender = tokenPaymasterRequest?.spender - Logger.log('Spender address is ', spender) + const spender = tokenPaymasterRequest?.spender; + Logger.log("Spender address is ", spender); if (!spender || spender == ethers.constants.AddressZero) { - throw new Error( - 'Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest' - ) + throw new Error("Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest"); } } @@ -405,133 +376,124 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { */ async buildTokenPaymasterUserOp( userOp: Partial, - tokenPaymasterRequest: BiconomyTokenPaymasterRequest + tokenPaymasterRequest: BiconomyTokenPaymasterRequest, ): Promise> { - this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest) + this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest); try { - let batchTo: Array = [] - let batchValue: Array = [] - let batchData: Array = [] + let batchTo: Array = []; + let batchValue: Array = []; + let batchData: Array = []; - let newCallData = userOp.callData - Logger.log('Received information about fee token address and quote ', tokenPaymasterRequest) + let newCallData = userOp.callData; + Logger.log("Received information about fee token address and quote ", tokenPaymasterRequest); if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details // Review: might request this form of an array of Transaction - const approvalRequest: Transaction = await ( - this.paymaster as IHybridPaymaster - ).buildTokenApprovalTransaction(tokenPaymasterRequest, this.provider) - Logger.log('ApprovalRequest is for erc20 token ', approvalRequest.to) - - if (approvalRequest.data == '0x' || approvalRequest.to == ethers.constants.AddressZero) { - return userOp + const approvalRequest: Transaction = await (this.paymaster as IHybridPaymaster).buildTokenApprovalTransaction( + tokenPaymasterRequest, + this.provider, + ); + Logger.log("ApprovalRequest is for erc20 token ", approvalRequest.to); + + if (approvalRequest.data == "0x" || approvalRequest.to == ethers.constants.AddressZero) { + return userOp; } if (!userOp.callData) { - throw new Error('UserOp callData cannot be undefined') + throw new Error("UserOp callData cannot be undefined"); } - const account = await this._getAccountContract() + const account = await this._getAccountContract(); const decodedSmartAccountData = account.interface.parseTransaction({ - data: userOp.callData.toString() - }) + data: userOp.callData.toString(), + }); if (!decodedSmartAccountData) { - throw new Error('Could not parse userOp call data for this smart account') + throw new Error("Could not parse userOp call data for this smart account"); } - const smartAccountExecFunctionName = decodedSmartAccountData.name - - Logger.log( - `Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2` - ) - if ( - smartAccountExecFunctionName === 'execute' || - smartAccountExecFunctionName === 'execute_ncC' - ) { - const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args - const toOriginal = methodArgsSmartWalletExecuteCall[0] - const valueOriginal = methodArgsSmartWalletExecuteCall[1] - const dataOriginal = methodArgsSmartWalletExecuteCall[2] - - batchTo.push(toOriginal) - batchValue.push(valueOriginal) - batchData.push(dataOriginal) - } else if ( - smartAccountExecFunctionName === 'executeBatch' || - smartAccountExecFunctionName === 'executeBatch_y6U' - ) { - const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args - batchTo = methodArgsSmartWalletExecuteCall[0] - batchValue = methodArgsSmartWalletExecuteCall[1] - batchData = methodArgsSmartWalletExecuteCall[2] + const smartAccountExecFunctionName = decodedSmartAccountData.name; + + Logger.log(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); + if (smartAccountExecFunctionName === "execute" || smartAccountExecFunctionName === "execute_ncC") { + const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; + const toOriginal = methodArgsSmartWalletExecuteCall[0]; + const valueOriginal = methodArgsSmartWalletExecuteCall[1]; + const dataOriginal = methodArgsSmartWalletExecuteCall[2]; + + batchTo.push(toOriginal); + batchValue.push(valueOriginal); + batchData.push(dataOriginal); + } else if (smartAccountExecFunctionName === "executeBatch" || smartAccountExecFunctionName === "executeBatch_y6U") { + const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; + batchTo = methodArgsSmartWalletExecuteCall[0]; + batchValue = methodArgsSmartWalletExecuteCall[1]; + batchData = methodArgsSmartWalletExecuteCall[2]; } if (approvalRequest.to && approvalRequest.data && approvalRequest.value) { - batchTo = [approvalRequest.to, ...batchTo] - batchValue = [approvalRequest.value, ...batchValue] - batchData = [approvalRequest.data, ...batchData] + batchTo = [approvalRequest.to, ...batchTo]; + batchValue = [approvalRequest.value, ...batchValue]; + batchData = [approvalRequest.data, ...batchData]; - newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData) + newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData); } let finalUserOp: Partial = { ...userOp, - callData: newCallData - } + callData: newCallData, + }; // Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) try { - finalUserOp = await this.estimateUserOpGas(finalUserOp) - const callGasLimit = ethers.BigNumber.from(finalUserOp.callGasLimit) - if (finalUserOp.callGasLimit && callGasLimit.lt(ethers.BigNumber.from('21000'))) { + finalUserOp = await this.estimateUserOpGas(finalUserOp); + const callGasLimit = ethers.BigNumber.from(finalUserOp.callGasLimit); + if (finalUserOp.callGasLimit && callGasLimit.lt(ethers.BigNumber.from("21000"))) { return { ...userOp, - callData: newCallData - } + callData: newCallData, + }; } - Logger.log('UserOp after estimation ', finalUserOp) + Logger.log("UserOp after estimation ", finalUserOp); } catch (error) { - Logger.error('Failed to estimate gas for userOp with updated callData ', error) - Logger.log( - 'Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit' - ) + Logger.error("Failed to estimate gas for userOp with updated callData ", error); + Logger.log("Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); } - return finalUserOp + return finalUserOp; } } catch (error) { - Logger.log('Failed to update userOp. Sending back original op') - Logger.error('Failed to update callData with error', error) - return userOp + Logger.log("Failed to update userOp. Sending back original op"); + Logger.error("Failed to update callData with error", error); + return userOp; } - return userOp + return userOp; } async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { - this.isActiveValidationModuleDefined() - const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params) + this.isActiveValidationModuleDefined(); + const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); const signatureWithModuleAddress = ethers.utils.defaultAbiCoder.encode( - ['bytes', 'address'], - [moduleSig, this.activeValidationModule.getAddress()] - ) + ["bytes", "address"], + [moduleSig, this.activeValidationModule.getAddress()], + ); - return signatureWithModuleAddress + return signatureWithModuleAddress; } async signMessage(message: Bytes | string): Promise { - this.isActiveValidationModuleDefined() - const dataHash = ethers.utils.arrayify(ethers.utils.hashMessage(message)) - let signature = await this.activeValidationModule.signMessage(dataHash) + this.isActiveValidationModuleDefined(); + const dataHash = ethers.utils.arrayify(ethers.utils.hashMessage(message)); + let signature = await this.activeValidationModule.signMessage(dataHash); - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16) + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27 - signature = signature.slice(0, -2) + correctV.toString(16) + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); } - if (signature.slice(0, 2) !== '0x') { - signature = '0x' + signature + if (signature.slice(0, 2) !== "0x") { + signature = "0x" + signature; } // TODO @@ -546,63 +508,100 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { [, , sig] ) + '6492649264926492649264926492649264926492649264926492649264926492' // magic suffix }*/ - return signature + return signature; } async getAllTokenBalances(balancesDto: BalancesDto): Promise { - return this.nodeClient.getAllTokenBalances(balancesDto) + return this.nodeClient.getAllTokenBalances(balancesDto); } async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { - return this.nodeClient.getTotalBalanceInUsd(balancesDto) + return this.nodeClient.getTotalBalanceInUsd(balancesDto); } - async getSmartAccountsByOwner( - smartAccountByOwnerDto: SmartAccountByOwnerDto - ): Promise { - return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto) + async getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise { + return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto); } - async getTransactionsByAddress( - chainId: number, - address: string - ): Promise { - return this.nodeClient.getTransactionByAddress(chainId, address) + async getTransactionsByAddress(chainId: number, address: string): Promise { + return this.nodeClient.getTransactionByAddress(chainId, address); } async getTransactionByHash(txHash: string): Promise { - return this.nodeClient.getTransactionByHash(txHash) + return this.nodeClient.getTransactionByHash(txHash); } async getAllSupportedChains(): Promise { - return this.nodeClient.getAllSupportedChains() + return this.nodeClient.getAllSupportedChains(); } - // async isModuleEnabled(moduleName: string): boolean { - async enableModule(moduleAddress: string): Promise { - const tx: Transaction = await this.getEnableModuleData(moduleAddress) - const partialUserOp = await this.buildUserOp([tx]) - return this.sendUserOp(partialUserOp) + const tx: Transaction = await this.getEnableModuleData(moduleAddress); + const partialUserOp = await this.buildUserOp([tx]); + return this.sendUserOp(partialUserOp); + } + + // Review + // Note: moduleSetupData can be queried from validation module instance + async setupAndEnableModule(moduleAddress: string, moduleSetupData: string): Promise { + const tx: Transaction = await this.getSetupAndEnableModuleData(moduleAddress, moduleSetupData); + const partialUserOp = await this.buildUserOp([tx]); + return this.sendUserOp(partialUserOp); } async getEnableModuleData(moduleAddress: string): Promise { - const accountContract = await this._getAccountContract() - const populatedTransaction = await accountContract.populateTransaction.enableModule( - moduleAddress - ) + const accountContract = await this._getAccountContract(); + // TODO: using encodeFunctionData + const populatedTransaction = await accountContract.populateTransaction.enableModule(moduleAddress); const tx: Transaction = { to: await this.getAccountAddress(), - value: '0', - data: populatedTransaction.data as string - } - return tx + value: "0", + data: populatedTransaction.data as string, + }; + return tx; + } + + async getSetupAndEnableModuleData(moduleAddress: string, moduleSetupData: string): Promise { + const accountContract = await this._getAccountContract(); + // TODO: using encodeFunctionData + const populatedTransaction = await accountContract.populateTransaction.setupAndEnableModule(moduleAddress, moduleSetupData); + const tx: Transaction = { + to: await this.getAccountAddress(), + value: "0", + data: populatedTransaction.data as string, + }; + return tx; + } + + async disableModule(preModule: string, moduleAddress: string): Promise { + const tx: Transaction = await this.getDisableModuleData(preModule, moduleAddress); + const partialUserOp = await this.buildUserOp([tx]); + return this.sendUserOp(partialUserOp); + } + + async getDisableModuleData(prevModule: string, moduleAddress: string): Promise { + const accountContract = await this._getAccountContract(); + // TODO: using encodeFunctionData + const populatedTransaction = await accountContract.populateTransaction.disableModule(prevModule, moduleAddress); + const tx: Transaction = { + to: await this.getAccountAddress(), + value: "0", + data: populatedTransaction.data as string, + }; + return tx; } async isModuleEnabled(moduleName: string): Promise { - const accountContract = await this._getAccountContract() - return await accountContract.isModuleEnabled(moduleName) + const accountContract = await this._getAccountContract(); + return accountContract.isModuleEnabled(moduleName); } - // async getEnableModuleData(moduleName: string): Promise { + // Review + async getAllModules(pageSize?: number): Promise> { + pageSize = pageSize ?? 100; + const accountContract = await this._getAccountContract(); + const result: Array> = await accountContract.getModulesPaginated(this.SENTINEL_MODULE, pageSize); + const modules: Array = result[0] as Array; + return modules; + } } diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index e94b1e005..529d2e5aa 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -8,26 +8,36 @@ import { SmartAccount_v200__factory, SmartAccountFactory_v200__factory, ECDSAOwnershipRegistryModule_v100__factory, + MultiChainValidationModule_v100__factory, } from "@biconomy/common"; import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; import { BiconomySmartAccount } from "../src/BiconomySmartAccount"; import { ChainId, UserOperation } from "@biconomy/core-types"; import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; +import { MultiChainValidationModule } from "@biconomy/modules"; +import { BaseValidationModule } from "@biconomy/modules"; +import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; +import { MultiChainValidationModule_v100 } from "@biconomy/common"; const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); +const SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; describe("BiconomySmartAccount API Specs", () => { let owner: Wallet; let factoryOwner: Wallet; - let accountAPIV1: BiconomySmartAccount; let accountAPI: BiconomySmartAccountV2; let entryPoint: EntryPoint; let beneficiary: string; let recipient: SampleRecipient; + let accountFactory: SmartAccountFactory_v200; + let ecdsaModule: ECDSAOwnershipRegistryModule_v100; + let multiChainModule: MultiChainValidationModule_v100; let accountAddress: string; - let accountDeployed = false; + + let module1: BaseValidationModule; + let module2: BaseValidationModule; beforeAll(async () => { owner = Wallet.createRandom(); @@ -38,18 +48,22 @@ describe("BiconomySmartAccount API Specs", () => { const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - const accountFactory: SmartAccountFactory_v200 = await new SmartAccountFactory_v200__factory(signer).deploy( - accountImpl.address, - await factoryOwner.getAddress(), - ); + accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - const ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); + ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - const module = new ECDSAOwnershipValidationModule({ + module1 = new ECDSAOwnershipValidationModule({ signer: owner, moduleAddress: ecdsaModule.address, }); + multiChainModule = await new MultiChainValidationModule_v100__factory(signer).deploy(); + + module2 = new MultiChainValidationModule({ + signer: owner, + moduleAddress: multiChainModule.address, + }); + console.log("provider url ", provider.connection.url); recipient = await new SampleRecipient__factory(signer).deploy(); @@ -60,8 +74,8 @@ describe("BiconomySmartAccount API Specs", () => { // bundler: bundler, entryPointAddress: entryPoint.address, factoryAddress: accountFactory.address, - defaultValidationModule: module, - activeValidationModule: module, + defaultValidationModule: module1, + activeValidationModule: module1, }); // console.log('account api provider ', accountAPI.provider) @@ -122,24 +136,221 @@ describe("BiconomySmartAccount API Specs", () => { const signedUserOp = await accountAPI.signUserOp(op); - ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + await entryPoint.handleOps([signedUserOp], beneficiary); - expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); + // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - accountDeployed = true; + expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); }); // TODO // possibly use local bundler API from image it("should build and send userop via bundler API", async () => {}); + it("should deploy another account using different validation module", async () => { + let accountAPI2 = new BiconomySmartAccountV2({ + chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", + // paymaster: paymaster, + // bundler: bundler, + entryPointAddress: entryPoint.address, + factoryAddress: accountFactory.address, + defaultValidationModule: module2, + activeValidationModule: module2, + }); + + // TODO + // Review: Just setting different default validation module and querying account address is not working + // accountAPI.setDefaultValidationModule(module2); + + // accountAPI.setActiveValidationModule(module2); + + // Review + accountAPI2 = await accountAPI2.init(); + + const accountAddress2 = await accountAPI2.getAccountAddress(); + expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBe(2); + + await signer.sendTransaction({ + to: accountAddress2, + value: ethers.utils.parseEther("0.1"), + }); + const op = await accountAPI2.buildUserOp([ + { + to: recipient.address, + data: recipient.interface.encodeFunctionData("something", ["hello"]), + }, + ]); + + const signedUserOp = await accountAPI2.signUserOp(op); + + await entryPoint.handleOps([signedUserOp], beneficiary); + + // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + + expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBeGreaterThan(0); + }); + + it("should check if module is enabled", async () => { + // Review + const isEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module1 as any).moduleAddress); + + expect(isEcdsaModuleEnabled).toBe(true); + + const isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + + expect(isMultichainEcdsaModuleEnabled).toBe(false); + }); + + it("should list all enabled modules", async () => { + const paginatedModules = await accountAPI.getAllModules(); + console.log("enabled modules ", paginatedModules); + }); + + it("should enable a new module", async () => { + let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + expect(isMultichainEcdsaModuleEnabled).toBe(false); + + // Review: this actually skips whole paymaster stuff and also sends to connected bundler + // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); + + const enableModuleData = await accountAPI.getEnableModuleData((module2 as any).moduleAddress); + + await signer.sendTransaction({ + to: accountAddress, + value: ethers.utils.parseEther("0.1"), + }); + + console.log("accountAPI.accountAddress", accountAPI.accountAddress); + + // TODO + // Note: this is a MUST currently otherwise account deployed state does not get updated and returns wrong initcode + accountAPI = await accountAPI.init(); + + /*const initCode = await accountAPI.getInitCode(); + console.log("initCode ", initCode); + + console.log("isDeployed", accountAPI.isAccountDeployed(accountAddress));*/ + + const op = await accountAPI.buildUserOp([enableModuleData], { + // skipBundlerGasEstimation: true, + // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, + }); + + console.log("op ", op); + + const signedUserOp = await accountAPI.signUserOp(op); + + await entryPoint.handleOps([signedUserOp], beneficiary); + + // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + + isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + + expect(isMultichainEcdsaModuleEnabled).toBe(true); + }); + + it("signs the userOp using active validation module", async () => { + const op = await accountAPI.buildUserOp([ + { + to: recipient.address, + data: recipient.interface.encodeFunctionData("something", ["hello"]), + }, + ]); + + const signedUserOp = await accountAPI.signUserOp(op); + + expect(signedUserOp.signature).toBeDefined(); + + const userOpHash = await accountAPI.getUserOpHash(op); + + const signature = await accountAPI.signUserOpHash(userOpHash); + + console.log("signature ", signature); + + expect(signature).toBeDefined(); + }); + + it("disables requested module", async () => { + let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + expect(isMultichainEcdsaModuleEnabled).toBe(true); + + const disableModuleData = await accountAPI.getDisableModuleData(SENTINEL_MODULE, (module2 as any).moduleAddress); + + await signer.sendTransaction({ + to: accountAddress, + value: ethers.utils.parseEther("0.1"), + }); + + const op = await accountAPI.buildUserOp([disableModuleData], { + // skipBundlerGasEstimation: true, + // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, + }); + + const signedUserOp = await accountAPI.signUserOp(op); + + await entryPoint.handleOps([signedUserOp], beneficiary); + + // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + + isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + expect(isMultichainEcdsaModuleEnabled).toBe(false); + + const modulesAfter = await accountAPI.getAllModules(); + expect(modulesAfter[0]).toBe((module1 as any).moduleAddress); + }); + + it("sends userop using multichain (different) validation module after enabling and setting it up", async () => { + let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + expect(isMultichainEcdsaModuleEnabled).toBe(false); + + // Review: this actually skips whole paymaster stuff and also sends to connected bundler + // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); + + const accountOwnerAddress = await owner.getAddress(); + + const multichainEcdsaOwnershipSetupData = multiChainModule.interface.encodeFunctionData("initForSmartAccount", [accountOwnerAddress]); + + const setupAndEnableModuleData = await accountAPI.getSetupAndEnableModuleData((module2 as any).moduleAddress, multichainEcdsaOwnershipSetupData); + + await signer.sendTransaction({ + to: accountAddress, + value: ethers.utils.parseEther("0.1"), + }); + + const op1 = await accountAPI.buildUserOp([setupAndEnableModuleData], { + // skipBundlerGasEstimation: true, + // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, + }); + + console.log("op1 ", op1); + + const signedUserOp1 = await accountAPI.signUserOp(op1); + + await entryPoint.handleOps([signedUserOp1], beneficiary); + + isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + expect(isMultichainEcdsaModuleEnabled).toBe(true); + + // Setting it as active validation module now + accountAPI = accountAPI.setActiveValidationModule(module2); + + const op = await accountAPI.buildUserOp([ + { + to: recipient.address, + data: recipient.interface.encodeFunctionData("something", ["hello"]), + }, + ]); + + const signedUserOp = await accountAPI.signUserOp(op); + + await entryPoint.handleOps([signedUserOp], beneficiary); + + // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + }); + // TODO - // 1. other getter and setters - // 2. sendSignedUserOp() - // 3. sendUserOp() - // 4. getUserOpHash() - // 5. signUserOp() // using different validation modules - // 6. sending userOps using a paymaster - // 7. sending userOps using different active validation modules - // 8. deploying account using different default validation modules + // 1. sendSignedUserOp() + // 2. sendUserOp() + // 3. sending userOps using a paymaster }); diff --git a/packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json b/packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json new file mode 100644 index 000000000..10709b249 --- /dev/null +++ b/packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json @@ -0,0 +1,298 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "MultichainECDSAValidator", + "sourceName": "contracts/smart-account/modules/MultichainECDSAValidator.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "name": "AlreadyInitedForSmartAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "name": "NoOwnerRegisteredForSmartAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "NotEOA", + "type": "error" + }, + { + "inputs": [], + "name": "WrongSignatureLength", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddressNotAllowedAsOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "smartAccount", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "NAME", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "eoaOwner", + "type": "address" + } + ], + "name": "initForSmartAccount", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "dataHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "moduleSignature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "dataHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "moduleSignature", + "type": "bytes" + }, + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "name": "isValidSignatureForAddress", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "callGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "verificationGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFeePerGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPriorityFeePerGas", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct UserOperation", + "name": "userOp", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + } + ], + "name": "validateUserOp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6080806040523461001657610b9b908161001c8239f35b600080fdfe6040608081526004908136101561001557600080fd5b6000803560e01c80631626ba7e1461040a5780632ede3bc014610388578063715018a614610318578063a3f4df7e146102c3578063f2fde38b1461020d578063f44c339d14610185578063fa5441611461012d578063ffa1ad74146100d45763fff35b721461008357600080fd5b346100cd576003199082823601126100cd5783359167ffffffffffffffff83116100d0576101609083360301126100cd57506020926100c691602435910161085d565b9051908152f35b80fd5b5080fd5b5090346100d057816003193601126100d0578051610129916100f58261044a565b600582527f302e322e300000000000000000000000000000000000000000000000000000006020830152519182918261053f565b0390f35b5082346100d05760203660031901126100d0576001600160a01b038381610152610506565b16938481528060205220541691821561016f576020838551908152f35b8351633d3fff5360e21b81529182015260249150fd5b5091346102095760603660031901126102095760243567ffffffffffffffff8111610205576101b790369083016104ba565b90604435936001600160a01b03851685036100cd5750926101db916020943561056b565b90517fffffffff000000000000000000000000000000000000000000000000000000009091168152f35b8380fd5b8280fd5b5091903461020957602036600319011261020957610229610506565b803b6102a4576001600160a01b0380911692831561029657503384528360205281842054169083208273ffffffffffffffffffffffffffffffffffffffff19825416179055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8480a480f35b82516307e179e960e31b8152fd5b826001600160a01b0360249351926377817ac360e01b84521690820152fd5b5090346100d057816003193601126100d0578051610129916102e48261044a565b601f82527f4543445341204f776e657273686970205265676973747279204d6f64756c65006020830152519182918261053f565b50809134610385578160031936011261038557338252816020526001600160a01b03818320541690822073ffffffffffffffffffffffffffffffffffffffff198154169055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a480f35b50fd5b509134610209576020366003190112610209576103a3610506565b338452836020526001600160a01b03908184862054166103f45716908115610296575081602093338152808552209073ffffffffffffffffffffffffffffffffffffffff1982541617905551308152f35b8351632c4dfb7d60e21b81523381850152602490fd5b50346100cd57816003193601126100cd576024359067ffffffffffffffff82116100cd57506020926104426101db92369083016104ba565b33913561056b565b6040810190811067ffffffffffffffff82111761046657604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761046657604052565b67ffffffffffffffff811161046657601f01601f191660200190565b81601f82011215610501578035906104d18261049e565b926104df604051948561047c565b8284526020838301011161050157816000926020809301838601378301015290565b600080fd5b600435906001600160a01b038216820361050157565b60005b83811061052f5750506000910152565b818101518382015260200161051f565b6040916020825261055f815180928160208601526020868601910161051c565b601f01601f1916010190565b9061057692916105a9565b61059e577fffffffff0000000000000000000000000000000000000000000000000000000090565b630b135d3f60e11b90565b916001600160a01b0380911691600093838552846020528260408620541693841561065757506041825110610645577f19457468657265756d205369676e6564204d6573736167653a0a333200000000855280601c528261061861061084603c8920610789565b91909161066f565b16841461063b5761062c9161061091610789565b16146106355790565b50600190565b5050505050600190565b604051632bb1a9c560e11b8152600490fd5b60249060405190633d3fff5360e21b82526004820152fd5b600581101561077357806106805750565b600181036106cd5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b6002810361071a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b60031461072357565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b634e487b7160e01b600052602160045260246000fd5b9060418151146000146107b7576107b3916020820151906060604084015193015160001a906107c1565b9091565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831161083e5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156108315781516001600160a01b03811615610635579190565b50604051903d90823e3d90fd5b50505050600090600390565b519065ffffffffffff8216820361050157565b919091610140810135601e19823603018112156105015781019182359267ffffffffffffffff9081851161050157602092838201958036038713610501578201604096878483031261050157359084821161050157879186806108c49301918601016104ba565b920135946001600160a01b0395868116036105015735966041835114610b43578251830160a0848783019203126105015761090086850161084a565b9061090c89860161084a565b9060608601519160808701518881116105015787019782603f8a011215610501578989015197818911610466578a998d9960059a818c1b9161095482519e8f9085019061047c565b8d528d8d019183010191868311610501578f8e9101915b838310610b33575050505060a081015190828211610501570183603f8201121561050157808b01518d9461099e8261049e565b956109ab8151978861047c565b8287528284010111610501576109c6918e8d8701910161051c565b8b51908a8201927fffffffffffff000000000000000000000000000000000000000000000000000090818860d01b16855260d01b1696876026840152602c830152602c8252606082019082821090821117610466578c52519020986000995b88518b1015610a84578a881b89018a0151908c600083831015610a7757505060005289528a6000205b996000198114610a615760010199610a25565b634e487b7160e01b600052601160045260246000fd5b91909282528b5220610a4e565b91965094999a93985081965096919603610af05750610aa8949596975016916105a9565b15610ae95779ffffffffffff00000000000000000000000000000000000000009065ffffffffffff90818116610ae257505b60a01b161790565b9050610ada565b5050600190565b60649089519062461bcd60e51b82526004820152600e60248201527f496e76616c696420557365724f700000000000000000000000000000000000006044820152fd5b82518152918101918e910161096b565b94925095909250610b56945016916105a9565b15610b6057600090565b60019056fea26469706673582212202a3242d73a2c92fd929c32924b5f964b80434c765985e101142ea4635452e6a664736f6c63430008110033", + "deployedBytecode": "0x6040608081526004908136101561001557600080fd5b6000803560e01c80631626ba7e1461040a5780632ede3bc014610388578063715018a614610318578063a3f4df7e146102c3578063f2fde38b1461020d578063f44c339d14610185578063fa5441611461012d578063ffa1ad74146100d45763fff35b721461008357600080fd5b346100cd576003199082823601126100cd5783359167ffffffffffffffff83116100d0576101609083360301126100cd57506020926100c691602435910161085d565b9051908152f35b80fd5b5080fd5b5090346100d057816003193601126100d0578051610129916100f58261044a565b600582527f302e322e300000000000000000000000000000000000000000000000000000006020830152519182918261053f565b0390f35b5082346100d05760203660031901126100d0576001600160a01b038381610152610506565b16938481528060205220541691821561016f576020838551908152f35b8351633d3fff5360e21b81529182015260249150fd5b5091346102095760603660031901126102095760243567ffffffffffffffff8111610205576101b790369083016104ba565b90604435936001600160a01b03851685036100cd5750926101db916020943561056b565b90517fffffffff000000000000000000000000000000000000000000000000000000009091168152f35b8380fd5b8280fd5b5091903461020957602036600319011261020957610229610506565b803b6102a4576001600160a01b0380911692831561029657503384528360205281842054169083208273ffffffffffffffffffffffffffffffffffffffff19825416179055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8480a480f35b82516307e179e960e31b8152fd5b826001600160a01b0360249351926377817ac360e01b84521690820152fd5b5090346100d057816003193601126100d0578051610129916102e48261044a565b601f82527f4543445341204f776e657273686970205265676973747279204d6f64756c65006020830152519182918261053f565b50809134610385578160031936011261038557338252816020526001600160a01b03818320541690822073ffffffffffffffffffffffffffffffffffffffff198154169055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a480f35b50fd5b509134610209576020366003190112610209576103a3610506565b338452836020526001600160a01b03908184862054166103f45716908115610296575081602093338152808552209073ffffffffffffffffffffffffffffffffffffffff1982541617905551308152f35b8351632c4dfb7d60e21b81523381850152602490fd5b50346100cd57816003193601126100cd576024359067ffffffffffffffff82116100cd57506020926104426101db92369083016104ba565b33913561056b565b6040810190811067ffffffffffffffff82111761046657604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761046657604052565b67ffffffffffffffff811161046657601f01601f191660200190565b81601f82011215610501578035906104d18261049e565b926104df604051948561047c565b8284526020838301011161050157816000926020809301838601378301015290565b600080fd5b600435906001600160a01b038216820361050157565b60005b83811061052f5750506000910152565b818101518382015260200161051f565b6040916020825261055f815180928160208601526020868601910161051c565b601f01601f1916010190565b9061057692916105a9565b61059e577fffffffff0000000000000000000000000000000000000000000000000000000090565b630b135d3f60e11b90565b916001600160a01b0380911691600093838552846020528260408620541693841561065757506041825110610645577f19457468657265756d205369676e6564204d6573736167653a0a333200000000855280601c528261061861061084603c8920610789565b91909161066f565b16841461063b5761062c9161061091610789565b16146106355790565b50600190565b5050505050600190565b604051632bb1a9c560e11b8152600490fd5b60249060405190633d3fff5360e21b82526004820152fd5b600581101561077357806106805750565b600181036106cd5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b6002810361071a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b60031461072357565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b634e487b7160e01b600052602160045260246000fd5b9060418151146000146107b7576107b3916020820151906060604084015193015160001a906107c1565b9091565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831161083e5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156108315781516001600160a01b03811615610635579190565b50604051903d90823e3d90fd5b50505050600090600390565b519065ffffffffffff8216820361050157565b919091610140810135601e19823603018112156105015781019182359267ffffffffffffffff9081851161050157602092838201958036038713610501578201604096878483031261050157359084821161050157879186806108c49301918601016104ba565b920135946001600160a01b0395868116036105015735966041835114610b43578251830160a0848783019203126105015761090086850161084a565b9061090c89860161084a565b9060608601519160808701518881116105015787019782603f8a011215610501578989015197818911610466578a998d9960059a818c1b9161095482519e8f9085019061047c565b8d528d8d019183010191868311610501578f8e9101915b838310610b33575050505060a081015190828211610501570183603f8201121561050157808b01518d9461099e8261049e565b956109ab8151978861047c565b8287528284010111610501576109c6918e8d8701910161051c565b8b51908a8201927fffffffffffff000000000000000000000000000000000000000000000000000090818860d01b16855260d01b1696876026840152602c830152602c8252606082019082821090821117610466578c52519020986000995b88518b1015610a84578a881b89018a0151908c600083831015610a7757505060005289528a6000205b996000198114610a615760010199610a25565b634e487b7160e01b600052601160045260246000fd5b91909282528b5220610a4e565b91965094999a93985081965096919603610af05750610aa8949596975016916105a9565b15610ae95779ffffffffffff00000000000000000000000000000000000000009065ffffffffffff90818116610ae257505b60a01b161790565b9050610ada565b5050600190565b60649089519062461bcd60e51b82526004820152600e60248201527f496e76616c696420557365724f700000000000000000000000000000000000006044820152fd5b82518152918101918e910161096b565b94925095909250610b56945016916105a9565b15610b6057600090565b60019056fea26469706673582212202a3242d73a2c92fd929c32924b5f964b80434c765985e101142ea4635452e6a664736f6c63430008110033", + "linkReferences": {}, + "deployedLinkReferences": {} + } + \ No newline at end of file From 5300fde3abe43ef1572e0f5a34702fb3faca4a33 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 13 Sep 2023 12:33:48 +0400 Subject: [PATCH 0823/1247] accept and return session id - createSession --- package.json | 2 +- .../modules/src/BatchedSessionRouterModule.ts | 9 ++--- .../modules/src/SessionKeyManagerModule.ts | 36 +++++++++++-------- packages/modules/src/utils/Types.ts | 6 ++++ 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 6d86b7828..fbaffcedb 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ }, "devDependencies": { "@types/jest": "^29.5.4", - "@typescript-eslint/eslint-plugin": "^6.6.0", + "@typescript-eslint/eslint-plugin": "^6.7.0", "@typescript-eslint/parser": "^6.6.0", "eslint": "^8.48.0", "eslint-config-airbnb-base": "15.0.0", diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 46e6d2009..8f6797ce5 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -9,7 +9,8 @@ import { StorageType, SessionParams, BatchedSessionRouterModuleConfig, - ModuleInfo + ModuleInfo, + CreateSessionDataResponse } from './utils/Types' import { BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION, @@ -89,9 +90,9 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @param leavesData The data of one or more leaves to be used to create session data * @returns The session data */ - createSessionData = async (leavesData: CreateSessionDataParams[]): Promise => { - return this.sessionKeyManagerModule.createSessionData(leavesData) - } + createSessionData = async (leavesData: CreateSessionDataParams[]): Promise => { + return this.sessionKeyManagerModule.createSessionData(leavesData); + }; /** * This method is used to sign the user operation using the session signer diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index d24736d5d..ee85a53e2 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -8,7 +8,8 @@ import { ModuleVersion, CreateSessionDataParams, StorageType, - ModuleInfo + ModuleInfo, + CreateSessionDataResponse } from './utils/Types' import NodeClient from '@biconomy/node-client' import INodeClient from '@biconomy/node-client' @@ -101,28 +102,30 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @param leavesData The data of one or more leaves to be used to create session data * @returns The session data */ - createSessionData = async (leavesData: CreateSessionDataParams[]): Promise => { - const sessionKeyManagerModuleABI = 'function setMerkleRoot(bytes32 _merkleRoot)' - const sessionKeyManagerModuleInterface = new ethers.utils.Interface([ - sessionKeyManagerModuleABI - ]) - const leavesToAdd: Buffer[] = [] + createSessionData = async (leavesData: CreateSessionDataParams[]): Promise => { + const sessionKeyManagerModuleABI = "function setMerkleRoot(bytes32 _merkleRoot)"; + const sessionKeyManagerModuleInterface = new ethers.utils.Interface([sessionKeyManagerModuleABI]); + const leavesToAdd: Buffer[] = []; + const sessionIDInfo: string[] = []; for (const leafData of leavesData) { const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(leafData.validUntil), 6), hexZeroPad(ethers.utils.hexlify(leafData.validAfter), 6), hexZeroPad(leafData.sessionValidationModule, 20), - leafData.sessionKeyData - ]) + leafData.sessionKeyData, + ]); + + const generatedSessionId = leafData.preferredSessionId ?? generateRandomHex(); - leavesToAdd.push(ethers.utils.keccak256(leafDataHex) as unknown as Buffer) + leavesToAdd.push(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); + sessionIDInfo.push(generatedSessionId); const sessionLeafNode = { ...leafData, - sessionID: generateRandomHex(), - status: 'PENDING' as SessionStatus - } + sessionID: generatedSessionId, + status: "PENDING" as SessionStatus, + }; await this.sessionStorageClient.addSessionData(sessionLeafNode) } @@ -144,8 +147,11 @@ export class SessionKeyManagerModule extends BaseValidationModule { await this.sessionStorageClient.setMerkleRoot(this.merkleTree.getHexRoot()) // TODO: create a signer if sessionPubKey if not given - return setMerkleRootData - } + return { + data: setMerkleRootData, + sessionIDInfo: sessionIDInfo, + }; + }; /** * This method is used to sign the user operation using the session signer diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 2fc578355..43d334dc0 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -62,12 +62,18 @@ export type ModuleInfo = { batchSessionParams?: SessionParams[] } +export type CreateSessionDataResponse = { + data: string + sessionIDInfo: Array +} + export interface CreateSessionDataParams { validUntil: number validAfter: number sessionValidationModule: string sessionPublicKey: string sessionKeyData: string + preferredSessionId?: string } export interface MultiChainValidationModuleConfig extends BaseValidationModuleConfig { From f69e75ef534a4ddefd452f3adbaf4f528e2af429 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 13 Sep 2023 12:41:09 +0400 Subject: [PATCH 0824/1247] lint fixes --- package.json | 2 +- packages/account/src/BaseSmartAccount.ts | 446 ++++++++-------- packages/account/src/BiconomySmartAccount.ts | 6 +- .../account/src/BiconomySmartAccountV2.ts | 486 ++++++++---------- packages/account/src/SmartAccount.ts | 39 +- packages/account/src/index.ts | 16 +- .../src/interfaces/IBaseSmartAccount.ts | 28 +- .../account/src/interfaces/ISmartAccount.ts | 8 +- packages/account/src/utils/Constants.ts | 48 +- packages/account/src/utils/Preverificaiton.ts | 12 +- packages/account/src/utils/Types.ts | 110 ++-- packages/common/src/ContractsInstances.ts | 54 +- packages/modules/src/BaseValidationModule.ts | 30 +- .../modules/src/BatchedSessionRouterModule.ts | 224 ++++---- .../src/ECDSAOwnershipValidationModule.ts | 67 ++- .../modules/src/MultichainValidationModule.ts | 132 +++-- .../modules/src/SessionKeyManagerModule.ts | 224 ++++---- packages/modules/src/index.ts | 20 +- .../modules/src/interfaces/ISessionStorage.ts | 50 +- .../interfaces/ISessionValidationModule.ts | 4 +- .../src/interfaces/IValidationModule.ts | 16 +- .../session-storage/SessionLocalStorage.ts | 127 +++-- .../ERC20SessionValidationModule.ts | 45 +- packages/modules/src/utils/Constants.ts | 56 +- packages/modules/src/utils/Types.ts | 100 ++-- packages/modules/src/utils/Uid.ts | 12 +- 26 files changed, 1111 insertions(+), 1251 deletions(-) diff --git a/package.json b/package.json index 6d86b7828..fbaffcedb 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ }, "devDependencies": { "@types/jest": "^29.5.4", - "@typescript-eslint/eslint-plugin": "^6.6.0", + "@typescript-eslint/eslint-plugin": "^6.7.0", "@typescript-eslint/parser": "^6.6.0", "eslint": "^8.48.0", "eslint-config-airbnb-base": "15.0.0", diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 6da119390..1ba5900f2 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -1,105 +1,108 @@ -import { JsonRpcProvider, Provider } from '@ethersproject/providers' -import { BigNumber, BigNumberish, Signer, BytesLike, ethers, Bytes } from 'ethers' -import { IBaseSmartAccount } from './interfaces/IBaseSmartAccount' -import { defaultAbiCoder, keccak256, arrayify, Result } from 'ethers/lib/utils' -import { UserOperation, ChainId } from '@biconomy/core-types' -import { calcPreVerificationGas, DefaultGasLimits } from './utils/Preverificaiton' -import { NotPromise, packUserOp } from '@biconomy/common' -import { IBundler, UserOpResponse } from '@biconomy/bundler' -import { IPaymaster, PaymasterAndDataResponse } from '@biconomy/paymaster' -import { EntryPoint_v005, Logger } from '@biconomy/common' -import { BaseSmartAccountConfig, Overrides, TransactionDetailsForUserOp } from './utils/Types' -import { GasOverheads } from './utils/Preverificaiton' -import { EntryPoint, EntryPoint__factory } from '@account-abstraction/contracts' -import { DEFAULT_ENTRYPOINT_ADDRESS } from './utils/Constants' -import { RPC_PROVIDER_URLS } from '@biconomy/common' - -type UserOperationKey = keyof UserOperation +import { JsonRpcProvider, Provider } from "@ethersproject/providers"; +import { BigNumber, BigNumberish, Signer, BytesLike, ethers, Bytes } from "ethers"; +import { IBaseSmartAccount } from "./interfaces/IBaseSmartAccount"; +import { defaultAbiCoder, keccak256, arrayify, Result } from "ethers/lib/utils"; +import { UserOperation, ChainId } from "@biconomy/core-types"; +import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; +import { NotPromise, packUserOp } from "@biconomy/common"; +import { IBundler, UserOpResponse } from "@biconomy/bundler"; +import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; +import { EntryPoint_v005, Logger } from "@biconomy/common"; +import { BaseSmartAccountConfig, Overrides, TransactionDetailsForUserOp } from "./utils/Types"; +import { GasOverheads } from "./utils/Preverificaiton"; +import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; +import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; +import { RPC_PROVIDER_URLS } from "@biconomy/common"; + +type UserOperationKey = keyof UserOperation; export abstract class BaseSmartAccount implements IBaseSmartAccount { // Review : compare with BaseAccountAPI // private senderAddress!: string - private isDeployed = false - bundler?: IBundler // httpRpcClient - paymaster?: IPaymaster // paymasterAPI - overheads?: Partial - entryPointAddress!: string - accountAddress?: string + private isDeployed = false; + + bundler?: IBundler; // httpRpcClient + + paymaster?: IPaymaster; // paymasterAPI + + overheads?: Partial; + + entryPointAddress!: string; + + accountAddress?: string; + // owner?: Signer // owner is not mandatory for some account implementations - index: number - chainId?: ChainId - provider: Provider // Review + index: number; + + chainId?: ChainId; + + provider: Provider; // Review // entryPoint connected to "zero" address. allowed to make static calls (e.g. to getSenderAddress) - private readonly entryPoint!: EntryPoint + private readonly entryPoint!: EntryPoint; constructor(_smartAccountConfig: BaseSmartAccountConfig) { - this.index = _smartAccountConfig.index ?? 0 - this.overheads = _smartAccountConfig.overheads - this.entryPointAddress = _smartAccountConfig.entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS - this.accountAddress = _smartAccountConfig.accountAddress - this.paymaster = _smartAccountConfig.paymaster - this.bundler = _smartAccountConfig.bundler - this.chainId = _smartAccountConfig.chainId + this.index = _smartAccountConfig.index ?? 0; + this.overheads = _smartAccountConfig.overheads; + this.entryPointAddress = _smartAccountConfig.entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS; + this.accountAddress = _smartAccountConfig.accountAddress; + this.paymaster = _smartAccountConfig.paymaster; + this.bundler = _smartAccountConfig.bundler; + this.chainId = _smartAccountConfig.chainId; - this.provider = - _smartAccountConfig.provider ?? new JsonRpcProvider(RPC_PROVIDER_URLS[this.chainId]) + this.provider = _smartAccountConfig.provider ?? new JsonRpcProvider(RPC_PROVIDER_URLS[this.chainId]); // Create an instance of the EntryPoint contract using the provided address and provider (facory "connect" contract address) // Then, set the transaction's sender ("from" address) to the zero address (AddressZero). (contract "connect" from address) - this.entryPoint = EntryPoint__factory.connect(this.entryPointAddress, this.provider).connect( - ethers.constants.AddressZero - ) + this.entryPoint = EntryPoint__factory.connect(this.entryPointAddress, this.provider).connect(ethers.constants.AddressZero); } async init(): Promise { - if ((await this.provider.getCode(this.entryPointAddress)) === '0x') { - throw new Error( - `EntryPoint not deployed at ${this.entryPointAddress} at chainId ${this.chainId}}` - ) + if ((await this.provider.getCode(this.entryPointAddress)) === "0x") { + throw new Error(`EntryPoint not deployed at ${this.entryPointAddress} at chainId ${this.chainId}}`); } // Note: Review // on Init itself since we're already getting account address, mark isDeployed as well! - if ((await this.provider.getCode(await this.getAccountAddress())) === '0x') { - this.isDeployed = false + if ((await this.provider.getCode(await this.getAccountAddress())) === "0x") { + this.isDeployed = false; } else { - this.isDeployed = true + this.isDeployed = true; } - return this + return this; } setEntryPointAddress(entryPointAddress: string) { - this.entryPointAddress = entryPointAddress + this.entryPointAddress = entryPointAddress; } validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { if (!userOp[field]) { - throw new Error(`${field} is missing`) + throw new Error(`${field} is missing`); } } - return true + return true; } isProviderDefined(): boolean { - if (!this.provider) throw new Error('Provider is undefined') + if (!this.provider) throw new Error("Provider is undefined"); - return true + return true; } /** * return the value to put into the "initCode" field, if the contract is not yet deployed. * this value holds the "factory" address, followed by this account's information */ - abstract getAccountInitCode(): Promise + abstract getAccountInitCode(): Promise; /** * return current account's nonce. */ - abstract getNonce(): Promise + abstract getNonce(): Promise; /** * encode the call from entryPoint through our account to the target contract. @@ -107,7 +110,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @param value * @param data */ - abstract encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise + abstract encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise; /** * encode the batch call from entryPoint through our account to the target contract. @@ -115,24 +118,20 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @param value * @param data */ - abstract encodeExecuteBatch( - to: Array, - value: Array, - data: Array - ): Promise + abstract encodeExecuteBatch(to: Array, value: Array, data: Array): Promise; /** * sign a userOp's hash (userOpHash). * @param userOpHash */ - abstract signUserOpHash(userOpHash: string): Promise + abstract signUserOpHash(userOpHash: string): Promise; - abstract signMessage(message: Bytes | string): Promise + abstract signMessage(message: Bytes | string): Promise; /** * get dummy signature for userOp */ - abstract getDummySignature(): Promise + abstract getDummySignature(): Promise; /** * Sign the filled userOp. @@ -140,33 +139,33 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { */ async signUserOp(userOp: Partial): Promise { const requiredFields: UserOperationKey[] = [ - 'sender', - 'nonce', - 'initCode', - 'callData', - 'callGasLimit', - 'verificationGasLimit', - 'preVerificationGas', - 'maxFeePerGas', - 'maxPriorityFeePerGas', - 'paymasterAndData' - ] - this.validateUserOp(userOp, requiredFields) - const userOpHash = await this.getUserOpHash(userOp) - let signature = await this.signUserOpHash(userOpHash) + "sender", + "nonce", + "initCode", + "callData", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "paymasterAndData", + ]; + this.validateUserOp(userOp, requiredFields); + const userOpHash = await this.getUserOpHash(userOp); + let signature = await this.signUserOpHash(userOpHash); // Some signers do not return signed data with 0x prefix. make sure the v value is 27/28 instead of 0/1 // Review: Make sure if it's valid hexString otherwise append 0x. // Also split sig and add +27 to v is v is only 0/1. then stitch it back - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16) + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27 - signature = signature.slice(0, -2) + correctV.toString(16) + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); } - if (signature.slice(0, 2) !== '0x') { - signature = '0x' + signature + if (signature.slice(0, 2) !== "0x") { + signature = "0x" + signature; } // TODO @@ -181,8 +180,8 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { ) + '6492649264926492649264926492649264926492649264926492649264926492' // magic suffix }*/ - userOp.signature = signature // sig - return userOp as UserOperation + userOp.signature = signature; // sig + return userOp as UserOperation; } /** @@ -192,11 +191,11 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @returns Promise */ async sendUserOp(userOp: Partial): Promise { - Logger.log('userOp received in base account ', userOp) - delete userOp.signature - const userOperation = await this.signUserOp(userOp) - const bundlerResponse = await this.sendSignedUserOp(userOperation) - return bundlerResponse + Logger.log("userOp received in base account ", userOp); + delete userOp.signature; + const userOperation = await this.signUserOp(userOp); + const bundlerResponse = await this.sendSignedUserOp(userOperation); + return bundlerResponse; } /** @@ -207,136 +206,114 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { */ async sendSignedUserOp(userOp: UserOperation): Promise { const requiredFields: UserOperationKey[] = [ - 'sender', - 'nonce', - 'initCode', - 'callData', - 'callGasLimit', - 'verificationGasLimit', - 'preVerificationGas', - 'maxFeePerGas', - 'maxPriorityFeePerGas', - 'paymasterAndData', - 'signature' - ] - this.validateUserOp(userOp, requiredFields) - Logger.log('userOp validated') - if (!this.bundler) throw new Error('Bundler is not provided') - Logger.log('userOp being sent to the bundler', userOp) - const bundlerResponse = await this.bundler.sendUserOp(userOp) - return bundlerResponse + "sender", + "nonce", + "initCode", + "callData", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "paymasterAndData", + "signature", + ]; + this.validateUserOp(userOp, requiredFields); + Logger.log("userOp validated"); + if (!this.bundler) throw new Error("Bundler is not provided"); + Logger.log("userOp being sent to the bundler", userOp); + const bundlerResponse = await this.bundler.sendUserOp(userOp); + return bundlerResponse; } async calculateUserOpGasValues(userOp: Partial): Promise> { - if (!this.provider) throw new Error('Provider is not present for making rpc calls') - const feeData = await this.provider.getFeeData() - userOp.maxFeePerGas = - userOp.maxFeePerGas ?? - feeData.maxFeePerGas ?? - feeData.gasPrice ?? - (await this.provider.getGasPrice()) + if (!this.provider) throw new Error("Provider is not present for making rpc calls"); + const feeData = await this.provider.getFeeData(); + userOp.maxFeePerGas = userOp.maxFeePerGas ?? feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); userOp.maxPriorityFeePerGas = - userOp.maxPriorityFeePerGas ?? - feeData.maxPriorityFeePerGas ?? - feeData.gasPrice ?? - (await this.provider.getGasPrice()) - if (userOp.initCode) - userOp.verificationGasLimit = - userOp.verificationGasLimit ?? (await this.getVerificationGasLimit(userOp.initCode)) + userOp.maxPriorityFeePerGas ?? feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); + if (userOp.initCode) userOp.verificationGasLimit = userOp.verificationGasLimit ?? (await this.getVerificationGasLimit(userOp.initCode)); userOp.callGasLimit = userOp.callGasLimit ?? (await this.provider.estimateGas({ from: this.entryPointAddress, to: userOp.sender, - data: userOp.callData - })) - userOp.preVerificationGas = - userOp.preVerificationGas ?? (await this.getPreVerificationGas(userOp)) - return userOp + data: userOp.callData, + })); + userOp.preVerificationGas = userOp.preVerificationGas ?? (await this.getPreVerificationGas(userOp)); + return userOp; } async estimateUserOpGas( userOp: Partial, overrides?: Overrides, - skipBundlerGasEstimation?: boolean + skipBundlerGasEstimation?: boolean, ): Promise> { - const requiredFields: UserOperationKey[] = ['sender', 'nonce', 'initCode', 'callData'] - this.validateUserOp(userOp, requiredFields) + const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; + this.validateUserOp(userOp, requiredFields); - let finalUserOp = userOp - const skipBundlerCall = skipBundlerGasEstimation ?? false + let finalUserOp = userOp; + const skipBundlerCall = skipBundlerGasEstimation ?? false; // Override gas values in userOp if provided in overrides params if (overrides) { - userOp = { ...userOp, ...overrides } + userOp = { ...userOp, ...overrides }; } - Logger.log('userOp in estimation', userOp) + Logger.log("userOp in estimation", userOp); if (!this.bundler || skipBundlerCall) { - if (!this.provider) throw new Error('Provider is not present for making rpc calls') + if (!this.provider) throw new Error("Provider is not present for making rpc calls"); // if no bundler url is provided run offchain logic to assign following values of UserOp // maxFeePerGas, maxPriorityFeePerGas, verificationGasLimit, callGasLimit, preVerificationGas - finalUserOp = await this.calculateUserOpGasValues(userOp) + finalUserOp = await this.calculateUserOpGasValues(userOp); } else { - delete userOp.maxFeePerGas - delete userOp.maxPriorityFeePerGas + delete userOp.maxFeePerGas; + delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp - const { - callGasLimit, - verificationGasLimit, - preVerificationGas, - maxFeePerGas, - maxPriorityFeePerGas - } = await this.bundler.estimateUserOpGas(userOp) - if ( - !userOp.maxFeePerGas && - !userOp.maxPriorityFeePerGas && - (!maxFeePerGas || !maxPriorityFeePerGas) - ) { - const feeData = await this.provider.getFeeData() - finalUserOp.maxFeePerGas = - feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()) - finalUserOp.maxPriorityFeePerGas = - feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()) + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = + await this.bundler.estimateUserOpGas(userOp); + if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { + const feeData = await this.provider.getFeeData(); + finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); + finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); } else { - finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas - finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas + finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; + finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas + finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; } - return finalUserOp + return finalUserOp; } // Would only be used if paymaster is attached async getPaymasterAndData(userOp: Partial): Promise { if (this.paymaster) { - const paymasterAndDataResponse: PaymasterAndDataResponse = - await this.paymaster.getPaymasterAndData(userOp) - return paymasterAndDataResponse.paymasterAndData + const paymasterAndDataResponse: PaymasterAndDataResponse = await this.paymaster.getPaymasterAndData(userOp); + return paymasterAndDataResponse.paymasterAndData; } - return '0x' + return "0x"; } // Review : usage trace of this method. in the order of init and methods called on the Account async isAccountDeployed(address: string): Promise { - this.isProviderDefined() - let contractCode + this.isProviderDefined(); + let contractCode; if (this.isDeployed !== undefined || this.isDeployed !== null) { // already deployed. no need to check anymore. - return this.isDeployed + return this.isDeployed; } try { - contractCode = await this.provider.getCode(address) + contractCode = await this.provider.getCode(address); if (contractCode.length > 2) { - this.isDeployed = true + this.isDeployed = true; } else { - this.isDeployed = false + this.isDeployed = false; } - return this.isDeployed + return this.isDeployed; } catch (error) { - throw error + throw error; } } @@ -344,18 +321,18 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * calculate the account address even before it is deployed */ async getCounterFactualAddress(): Promise { - const initCode = this.getAccountInitCode() + const initCode = this.getAccountInitCode(); // use entryPoint to query account address (factory can provide a helper method to do the same, but // this method attempts to be generic try { - await this.entryPoint.callStatic.getSenderAddress(initCode) + await this.entryPoint.callStatic.getSenderAddress(initCode); } catch (e: any) { if (e.errorArgs == null) { - throw e + throw e; } - return e.errorArgs.sender + return e.errorArgs.sender; } - throw new Error('must handle revert') + throw new Error("must handle revert"); } /** @@ -364,30 +341,28 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { */ async getInitCode(): Promise { if (await this.isAccountDeployed(await this.getAccountAddress())) { - return '0x' + return "0x"; } - return await this.getAccountInitCode() + return this.getAccountInitCode(); } async getPreVerificationGas(userOp: Partial): Promise { - return calcPreVerificationGas(userOp) + return calcPreVerificationGas(userOp); } async getVerificationGasLimit(initCode: BytesLike): Promise { // Verification gas should be max(initGas(wallet deployment) + validateUserOp + validatePaymasterUserOp , postOp) - const initGas = await this.estimateCreationGas(initCode as string) - const validateUserOpGas = BigNumber.from( - DefaultGasLimits.validatePaymasterUserOpGas + DefaultGasLimits.validateUserOpGas - ) - const postOpGas = BigNumber.from(DefaultGasLimits.postOpGas) + const initGas = await this.estimateCreationGas(initCode as string); + const validateUserOpGas = BigNumber.from(DefaultGasLimits.validatePaymasterUserOpGas + DefaultGasLimits.validateUserOpGas); + const postOpGas = BigNumber.from(DefaultGasLimits.postOpGas); - let verificationGasLimit = BigNumber.from(validateUserOpGas).add(initGas) + let verificationGasLimit = BigNumber.from(validateUserOpGas).add(initGas); if (BigNumber.from(postOpGas).gt(verificationGasLimit)) { - verificationGasLimit = postOpGas + verificationGasLimit = postOpGas; } - return verificationGasLimit + return verificationGasLimit; } /** @@ -398,16 +373,16 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { async getAccountAddress(): Promise { if (this.accountAddress == null) { // means it needs deployment - this.accountAddress = await this.getCounterFactualAddress() + this.accountAddress = await this.getCounterFactualAddress(); } - return this.accountAddress + return this.accountAddress; } async estimateCreationGas(initCode?: string): Promise { - if (initCode == null || initCode === '0x') return 0 - const deployerAddress = initCode.substring(0, 42) - const deployerCallData = '0x' + initCode.substring(42) - return await this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }) + if (initCode == null || initCode === "0x") return 0; + const deployerAddress = initCode.substring(0, 42); + const deployerCallData = "0x" + initCode.substring(42); + return this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }); } /** @@ -417,63 +392,52 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @param interval time to wait between polls. * @return the transactionHash this userOp was mined, or null if not found. */ - async getUserOpReceipt( - userOpHash: string, - timeout = 30000, - interval = 5000 - ): Promise { - const endtime = Date.now() + timeout + async getUserOpReceipt(userOpHash: string, timeout = 30000, interval = 5000): Promise { + const endtime = Date.now() + timeout; while (Date.now() < endtime) { - const events = await this.entryPoint.queryFilter( - this.entryPoint.filters.UserOperationEvent(userOpHash) - ) + const events = await this.entryPoint.queryFilter(this.entryPoint.filters.UserOperationEvent(userOpHash)); if (events.length > 0) { - return events[0].transactionHash + return events[0].transactionHash; } - await new Promise((resolve) => setTimeout(resolve, interval)) + await new Promise((resolve) => setTimeout(resolve, interval)); } - return null + return null; } async getUserOpHash(userOp: Partial): Promise { - const userOpHash = keccak256(packUserOp(userOp, true)) - const enc = defaultAbiCoder.encode( - ['bytes32', 'address', 'uint256'], - [userOpHash, this.entryPoint.address, this.chainId] - ) - return keccak256(enc) + const userOpHash = keccak256(packUserOp(userOp, true)); + const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, this.entryPoint.address, this.chainId]); + return keccak256(enc); } /** * ABI-encode a user operation. used for calldata cost estimation */ packUserOp(userOp: NotPromise): string { - return packUserOp(userOp, false) + return packUserOp(userOp, false); } - async encodeUserOpCallDataAndGasLimit( - detailsForUserOp: TransactionDetailsForUserOp - ): Promise<{ callData: string; callGasLimit: BigNumber }> { + async encodeUserOpCallDataAndGasLimit(detailsForUserOp: TransactionDetailsForUserOp): Promise<{ callData: string; callGasLimit: BigNumber }> { function parseNumber(a: any): BigNumber | null { - if (a == null || a === '') return null - return BigNumber.from(a.toString()) + if (a == null || a === "") return null; + return BigNumber.from(a.toString()); } - const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0) - const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data) + const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0); + const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data); const callGasLimit = parseNumber(detailsForUserOp.gasLimit) ?? (await this.provider.estimateGas({ from: this.entryPointAddress, to: this.getAccountAddress(), - data: callData - })) + data: callData, + })); return { callData, - callGasLimit - } + callGasLimit, + }; } // TODO: allow this for batch. Review previous sdk versions @@ -485,19 +449,19 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @param info */ async createUnsignedUserOp(info: TransactionDetailsForUserOp): Promise { - const { callData, callGasLimit } = await this.encodeUserOpCallDataAndGasLimit(info) - const initCode = await this.getInitCode() + const { callData, callGasLimit } = await this.encodeUserOpCallDataAndGasLimit(info); + const initCode = await this.getInitCode(); - const verificationGasLimit = BigNumber.from(await this.getVerificationGasLimit(initCode)) + const verificationGasLimit = BigNumber.from(await this.getVerificationGasLimit(initCode)); - let { maxFeePerGas, maxPriorityFeePerGas } = info + let { maxFeePerGas, maxPriorityFeePerGas } = info; if (maxFeePerGas == null || maxPriorityFeePerGas == null) { - const feeData = await this.provider.getFeeData() + const feeData = await this.provider.getFeeData(); if (maxFeePerGas == null) { - maxFeePerGas = feeData.maxFeePerGas ?? undefined + maxFeePerGas = feeData.maxFeePerGas ?? undefined; } if (maxPriorityFeePerGas == null) { - maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? undefined + maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? undefined; } } @@ -510,24 +474,24 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { verificationGasLimit, maxFeePerGas, maxPriorityFeePerGas, - paymasterAndData: '0x' - } + paymasterAndData: "0x", + }; - let paymasterAndData: string | undefined + let paymasterAndData: string | undefined; if (this.paymaster != null) { // fill (partial) preVerificationGas (all except the cost of the generated paymasterAndData) const userOpForPm = { ...partialUserOp, - preVerificationGas: await this.getPreVerificationGas(partialUserOp) - } - paymasterAndData = (await this.paymaster.getPaymasterAndData(userOpForPm)).paymasterAndData + preVerificationGas: await this.getPreVerificationGas(partialUserOp), + }; + paymasterAndData = (await this.paymaster.getPaymasterAndData(userOpForPm)).paymasterAndData; } - partialUserOp.paymasterAndData = paymasterAndData ?? '0x' + partialUserOp.paymasterAndData = paymasterAndData ?? "0x"; return { ...partialUserOp, preVerificationGas: this.getPreVerificationGas(partialUserOp), - signature: '' - } + signature: "", + }; } /** @@ -535,6 +499,6 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @param info transaction details for the userOp */ async createSignedUserOp(info: TransactionDetailsForUserOp): Promise { - return await this.signUserOp(await this.createUnsignedUserOp(info)) + return this.signUserOp(await this.createUnsignedUserOp(info)); } } diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 271ac43d9..0aa971b07 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -156,9 +156,9 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart smartAccountType: SmartAccountType.BICONOMY, version: BICONOMY_FACTORY_ADDRESSES[_factoryAddress], contractAddress: _factoryAddress, - provider: this.provider - } - this.factory = getSAFactoryContract(factoryInstanceDto) as SmartAccountFactory_v100 + provider: this.provider, + }; + this.factory = getSAFactoryContract(factoryInstanceDto) as SmartAccountFactory_v100; } private async setContractsState() { diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index e0121a9da..e81ab9fc9 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1,31 +1,26 @@ -import { JsonRpcProvider } from '@ethersproject/providers' -import { Signer } from 'ethers' -import { ethers, BigNumberish, BytesLike, BigNumber } from 'ethers' -import { BaseSmartAccount } from './BaseSmartAccount' -import { keccak256, Bytes, arrayify, hexConcat } from 'ethers/lib/utils' -import { Logger, NODE_CLIENT_URL, RPC_PROVIDER_URLS } from '@biconomy/common' +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Signer } from "ethers"; +import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; +import { BaseSmartAccount } from "./BaseSmartAccount"; +import { keccak256, Bytes, arrayify, hexConcat } from "ethers/lib/utils"; +import { Logger, NODE_CLIENT_URL, RPC_PROVIDER_URLS } from "@biconomy/common"; // Review failure reason for import from '@biconomy/account-contracts-v2/typechain' -import { - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory -} from '@biconomy/common' +import { SmartAccount_v200, SmartAccountFactory_v200, SmartAccount_v200__factory, SmartAccountFactory_v200__factory } from "@biconomy/common"; import { Overrides, BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, CounterFactualAddressParam, - BuildUserOpOptions -} from './utils/Types' -import { BaseValidationModule, ModuleInfo } from '@biconomy/modules' -import { UserOperation, Transaction, SmartAccountType } from '@biconomy/core-types' -import NodeClient from '@biconomy/node-client' -import INodeClient from '@biconomy/node-client' -import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from '@biconomy/paymaster' + BuildUserOpOptions, +} from "./utils/Types"; +import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; +import { UserOperation, Transaction, SmartAccountType } from "@biconomy/core-types"; +import NodeClient from "@biconomy/node-client"; +import INodeClient from "@biconomy/node-client"; +import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; import { SupportedChainsResponse, BalancesResponse, @@ -33,100 +28,94 @@ import { UsdBalanceResponse, SmartAccountByOwnerDto, SmartAccountsResponse, - SCWTransactionResponse -} from '@biconomy/node-client' -import { UserOpResponse } from '@biconomy/bundler' -import { DEFAULT_BICONOMY_FACTORY_ADDRESS } from './utils/Constants' + SCWTransactionResponse, +} from "@biconomy/node-client"; +import { UserOpResponse } from "@biconomy/bundler"; +import { DEFAULT_BICONOMY_FACTORY_ADDRESS } from "./utils/Constants"; -type UserOperationKey = keyof UserOperation +type UserOperationKey = keyof UserOperation; export class BiconomySmartAccountV2 extends BaseSmartAccount { - private nodeClient: INodeClient + private nodeClient: INodeClient; // Review: Marked for deletion // private smartAccountInfo!: ISmartAccount // private _isInitialised!: boolean - factoryAddress?: string + factoryAddress?: string; /** * our account contract. * should support the "execFromEntryPoint" and "nonce" methods */ - accountContract?: SmartAccount_v200 + accountContract?: SmartAccount_v200; // TODO: both should be V2 - factory?: SmartAccountFactory_v200 + factory?: SmartAccountFactory_v200; // Validation module responsible for account deployment initCode. This acts as a default authorization module. - defaultValidationModule: BaseValidationModule + defaultValidationModule: BaseValidationModule; + // Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature. - activeValidationModule: BaseValidationModule + activeValidationModule: BaseValidationModule; constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) { - super(biconomySmartAccountConfig) + super(biconomySmartAccountConfig); // Review: if it's really needed to supply factory address - this.factoryAddress = - biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS // This would be fetched from V2 + this.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule + this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.activeValidationModule = - biconomySmartAccountConfig.activeValidationModule ?? this.defaultValidationModule + this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? this.defaultValidationModule; - const { rpcUrl, nodeClientUrl } = biconomySmartAccountConfig + const { rpcUrl, nodeClientUrl } = biconomySmartAccountConfig; if (rpcUrl) { - this.provider = new JsonRpcProvider(rpcUrl) + this.provider = new JsonRpcProvider(rpcUrl); } - this.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }) + this.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); } async _getAccountContract(): Promise { if (this.accountContract == null) { - this.accountContract = SmartAccount_v200__factory.connect( - await this.getAccountAddress(), - this.provider - ) + this.accountContract = SmartAccount_v200__factory.connect(await this.getAccountAddress(), this.provider); } - return this.accountContract + return this.accountContract; } isActiveValidationModuleDefined(): boolean { - if (!this.activeValidationModule) - throw new Error('Must provide an instance of active validation module.') - return true + if (!this.activeValidationModule) throw new Error("Must provide an instance of active validation module."); + return true; } isDefaultValidationModuleDefined(): boolean { - if (!this.defaultValidationModule) - throw new Error('Must provide an instance of default validation module.') - return true + if (!this.defaultValidationModule) throw new Error("Must provide an instance of default validation module."); + return true; } setActiveValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { if (validationModule instanceof BaseValidationModule) { - this.activeValidationModule = validationModule + this.activeValidationModule = validationModule; } - return this + return this; } setDefaultValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { if (validationModule instanceof BaseValidationModule) { - this.defaultValidationModule = validationModule + this.defaultValidationModule = validationModule; } - return this + return this; } // Could call it nonce space async getNonce(nonceKey?: number): Promise { - const nonceSpace = nonceKey ?? 0 + const nonceSpace = nonceKey ?? 0; if (await this.isAccountDeployed(await this.getAccountAddress())) { - const accountContract = await this._getAccountContract() - return await accountContract.nonce(nonceSpace) + const accountContract = await this._getAccountContract(); + return accountContract.nonce(nonceSpace); } - return BigNumber.from(0) + return BigNumber.from(0); } // Review @@ -140,23 +129,23 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // use Factory method instead if (this.factory == null) { - if (this.factoryAddress != null && this.factoryAddress !== '') { - this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider) + if (this.factoryAddress != null && this.factoryAddress !== "") { + this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); } else { - throw new Error('no factory to get initCode') + throw new Error("no factory to get initCode"); } } - const _defaultAuthModule = params?.validationModule ?? this.defaultValidationModule - const _index = params?.index ?? this.index + const _defaultAuthModule = params?.validationModule ?? this.defaultValidationModule; + const _index = params?.index ?? this.index; const counterFactualAddress = await this.factory.getAddressForCounterFactualAccount( await _defaultAuthModule.getAddress(), await _defaultAuthModule.getInitData(), - _index - ) + _index, + ); - return counterFactualAddress + return counterFactualAddress; } /** @@ -165,31 +154,31 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { */ async getAccountInitCode(): Promise { if (this.factory == null) { - if (this.factoryAddress != null && this.factoryAddress !== '') { - this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider) + if (this.factoryAddress != null && this.factoryAddress !== "") { + this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); } else { - throw new Error('no factory to get initCode') + throw new Error("no factory to get initCode"); } } - this.isDefaultValidationModuleDefined() + this.isDefaultValidationModuleDefined(); const populatedTransaction = await this.factory.populateTransaction.deployCounterFactualAccount( await this.defaultValidationModule.getAddress(), await this.defaultValidationModule.getInitData(), - this.index - ) + this.index, + ); // TODO: interface should work. return hexConcat([ this.factory.address, - populatedTransaction.data as string + populatedTransaction.data as string, /*this.factory.interface.encodeFunctionData('deployCounterFactualAccount', [ await this.defaultValidationModule.getAddress(), await this.defaultValidationModule.getInitData(), this.index ])*/ - ]) + ]); } /** @@ -202,13 +191,9 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { async encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise { // this.isInitialized() // this.isProxyDefined() - const accountContract = await this._getAccountContract() + const accountContract = await this._getAccountContract(); - const populatedTransaction = await accountContract.populateTransaction.execute_ncC( - to, - value, - data - ) + const populatedTransaction = await accountContract.populateTransaction.execute_ncC(to, value, data); /*const executeCallData = accountContract.interface.encodeFunctionData('execute_ncC', [ to, @@ -216,8 +201,9 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { data ])*/ - return populatedTransaction.data as string + return populatedTransaction.data as string; } + /** * * @param to { target } array of addresses in transaction @@ -225,65 +211,57 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @param data represent array of data associated with each transaction * @returns */ - async encodeExecuteBatch( - to: Array, - value: Array, - data: Array - ): Promise { + async encodeExecuteBatch(to: Array, value: Array, data: Array): Promise { // this.isInitialized() // this.isProxyDefined() - const accountContract = await this._getAccountContract() - const populatedTransaction = await accountContract.populateTransaction.executeBatch_y6U( - to, - value, - data - ) + const accountContract = await this._getAccountContract(); + const populatedTransaction = await accountContract.populateTransaction.executeBatch_y6U(to, value, data); /*const executeBatchCallData = accountContract.interface.encodeFunctionData('executeBatch_y6U', [ to, value, data ])*/ - return populatedTransaction.data as string + return populatedTransaction.data as string; } // dummy signature depends on the validation module supplied. async getDummySignature(params?: ModuleInfo): Promise { - this.isActiveValidationModuleDefined() - return await this.activeValidationModule.getDummySignature(params) + this.isActiveValidationModuleDefined(); + return this.activeValidationModule.getDummySignature(params); } // Review: // Might use provided paymaster instance to get dummy data (from pm service) getDummyPaymasterData(): string { - return '0x' + return "0x"; } async signUserOp(userOp: Partial, params?: ModuleInfo): Promise { - this.isActiveValidationModuleDefined() + this.isActiveValidationModuleDefined(); const requiredFields: UserOperationKey[] = [ - 'sender', - 'nonce', - 'initCode', - 'callData', - 'callGasLimit', - 'verificationGasLimit', - 'preVerificationGas', - 'maxFeePerGas', - 'maxPriorityFeePerGas', - 'paymasterAndData' - ] - super.validateUserOp(userOp, requiredFields) - const userOpHash = await this.getUserOpHash(userOp) - - const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params) + "sender", + "nonce", + "initCode", + "callData", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "paymasterAndData", + ]; + super.validateUserOp(userOp, requiredFields); + const userOpHash = await this.getUserOpHash(userOp); + + const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); const signatureWithModuleAddress = ethers.utils.defaultAbiCoder.encode( - ['bytes', 'address'], - [moduleSig, this.activeValidationModule.getAddress()] - ) + ["bytes", "address"], + [moduleSig, this.activeValidationModule.getAddress()], + ); - userOp.signature = signatureWithModuleAddress - return userOp as UserOperation + userOp.signature = signatureWithModuleAddress; + return userOp as UserOperation; } /** @@ -294,45 +272,42 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @returns Promise */ async sendUserOp(userOp: Partial, params?: ModuleInfo): Promise { - Logger.log('userOp received in base account ', userOp) - delete userOp.signature - const userOperation = await this.signUserOp(userOp, params) - const bundlerResponse = await this.sendSignedUserOp(userOperation) - return bundlerResponse + Logger.log("userOp received in base account ", userOp); + delete userOp.signature; + const userOperation = await this.signUserOp(userOp, params); + const bundlerResponse = await this.sendSignedUserOp(userOperation); + return bundlerResponse; } - async buildUserOp( - transactions: Transaction[], - buildUseropDto?: BuildUserOpOptions - ): Promise> { + async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { // Review: may not need at all // this.isInitialized() // TODO: validate to, value and data fields // TODO: validate overrides if supplied - const to = transactions.map((element: Transaction) => element.to) - const data = transactions.map((element: Transaction) => element.data ?? '0x') - const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from('0')) + const to = transactions.map((element: Transaction) => element.to); + const data = transactions.map((element: Transaction) => element.data ?? "0x"); + const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); if (transactions.length === 0) { - throw new Error('Transactions array cannot be empty') + throw new Error("Transactions array cannot be empty"); } - let callData = '' + let callData = ""; if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { - callData = await this.encodeExecuteBatch(to, value, data) + callData = await this.encodeExecuteBatch(to, value, data); } else { // transactions.length must be 1 - callData = await this.encodeExecute(to[0], value[0], data[0]) + callData = await this.encodeExecute(to[0], value[0], data[0]); } - let nonce = BigNumber.from(0) + let nonce = BigNumber.from(0); try { if (buildUseropDto?.nonceOptions?.nonceOverride) { - nonce = BigNumber.from(buildUseropDto?.nonceOptions?.nonceOverride) + nonce = BigNumber.from(buildUseropDto?.nonceOptions?.nonceOverride); } else { - const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0 - nonce = await this.getNonce(_nonceSpace) + const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0; + nonce = await this.getNonce(_nonceSpace); } } catch (error) { // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account @@ -348,49 +323,38 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { sender: this.accountAddress, nonce, initCode: await this.getInitCode(), - callData: callData - } + callData: callData, + }; // for this Smart Account current validation module dummy signature will be used to estimate gas - userOp.signature = await this.getDummySignature(buildUseropDto?.params) + userOp.signature = await this.getDummySignature(buildUseropDto?.params); - userOp = await this.estimateUserOpGas( - userOp, - buildUseropDto?.overrides, - buildUseropDto?.skipBundlerGasEstimation - ) - Logger.log('UserOp after estimation ', userOp) + userOp = await this.estimateUserOpGas(userOp, buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation); + Logger.log("UserOp after estimation ", userOp); // Do not populate paymasterAndData as part of buildUserOp as it may not have all necessary details - userOp.paymasterAndData = '0x' // await this.getPaymasterAndData(userOp) + userOp.paymasterAndData = "0x"; // await this.getPaymasterAndData(userOp) - return userOp + return userOp; } - private validateUserOpAndPaymasterRequest( - userOp: Partial, - tokenPaymasterRequest: BiconomyTokenPaymasterRequest - ): void { + private validateUserOpAndPaymasterRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { if (!userOp.callData) { - throw new Error('UserOp callData cannot be undefined') + throw new Error("UserOp callData cannot be undefined"); } - const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress - Logger.log('Requested fee token is ', feeTokenAddress) + const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress; + Logger.log("Requested fee token is ", feeTokenAddress); if (!feeTokenAddress || feeTokenAddress == ethers.constants.AddressZero) { - throw new Error( - 'Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest' - ) + throw new Error("Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest"); } - const spender = tokenPaymasterRequest?.spender - Logger.log('Spender address is ', spender) + const spender = tokenPaymasterRequest?.spender; + Logger.log("Spender address is ", spender); if (!spender || spender == ethers.constants.AddressZero) { - throw new Error( - 'Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest' - ) + throw new Error("Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest"); } } @@ -405,133 +369,124 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { */ async buildTokenPaymasterUserOp( userOp: Partial, - tokenPaymasterRequest: BiconomyTokenPaymasterRequest + tokenPaymasterRequest: BiconomyTokenPaymasterRequest, ): Promise> { - this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest) + this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest); try { - let batchTo: Array = [] - let batchValue: Array = [] - let batchData: Array = [] + let batchTo: Array = []; + let batchValue: Array = []; + let batchData: Array = []; - let newCallData = userOp.callData - Logger.log('Received information about fee token address and quote ', tokenPaymasterRequest) + let newCallData = userOp.callData; + Logger.log("Received information about fee token address and quote ", tokenPaymasterRequest); if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details // Review: might request this form of an array of Transaction - const approvalRequest: Transaction = await ( - this.paymaster as IHybridPaymaster - ).buildTokenApprovalTransaction(tokenPaymasterRequest, this.provider) - Logger.log('ApprovalRequest is for erc20 token ', approvalRequest.to) - - if (approvalRequest.data == '0x' || approvalRequest.to == ethers.constants.AddressZero) { - return userOp + const approvalRequest: Transaction = await (this.paymaster as IHybridPaymaster).buildTokenApprovalTransaction( + tokenPaymasterRequest, + this.provider, + ); + Logger.log("ApprovalRequest is for erc20 token ", approvalRequest.to); + + if (approvalRequest.data == "0x" || approvalRequest.to == ethers.constants.AddressZero) { + return userOp; } if (!userOp.callData) { - throw new Error('UserOp callData cannot be undefined') + throw new Error("UserOp callData cannot be undefined"); } - const account = await this._getAccountContract() + const account = await this._getAccountContract(); const decodedSmartAccountData = account.interface.parseTransaction({ - data: userOp.callData.toString() - }) + data: userOp.callData.toString(), + }); if (!decodedSmartAccountData) { - throw new Error('Could not parse userOp call data for this smart account') + throw new Error("Could not parse userOp call data for this smart account"); } - const smartAccountExecFunctionName = decodedSmartAccountData.name - - Logger.log( - `Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2` - ) - if ( - smartAccountExecFunctionName === 'execute' || - smartAccountExecFunctionName === 'execute_ncC' - ) { - const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args - const toOriginal = methodArgsSmartWalletExecuteCall[0] - const valueOriginal = methodArgsSmartWalletExecuteCall[1] - const dataOriginal = methodArgsSmartWalletExecuteCall[2] - - batchTo.push(toOriginal) - batchValue.push(valueOriginal) - batchData.push(dataOriginal) - } else if ( - smartAccountExecFunctionName === 'executeBatch' || - smartAccountExecFunctionName === 'executeBatch_y6U' - ) { - const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args - batchTo = methodArgsSmartWalletExecuteCall[0] - batchValue = methodArgsSmartWalletExecuteCall[1] - batchData = methodArgsSmartWalletExecuteCall[2] + const smartAccountExecFunctionName = decodedSmartAccountData.name; + + Logger.log(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); + if (smartAccountExecFunctionName === "execute" || smartAccountExecFunctionName === "execute_ncC") { + const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; + const toOriginal = methodArgsSmartWalletExecuteCall[0]; + const valueOriginal = methodArgsSmartWalletExecuteCall[1]; + const dataOriginal = methodArgsSmartWalletExecuteCall[2]; + + batchTo.push(toOriginal); + batchValue.push(valueOriginal); + batchData.push(dataOriginal); + } else if (smartAccountExecFunctionName === "executeBatch" || smartAccountExecFunctionName === "executeBatch_y6U") { + const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; + batchTo = methodArgsSmartWalletExecuteCall[0]; + batchValue = methodArgsSmartWalletExecuteCall[1]; + batchData = methodArgsSmartWalletExecuteCall[2]; } if (approvalRequest.to && approvalRequest.data && approvalRequest.value) { - batchTo = [approvalRequest.to, ...batchTo] - batchValue = [approvalRequest.value, ...batchValue] - batchData = [approvalRequest.data, ...batchData] + batchTo = [approvalRequest.to, ...batchTo]; + batchValue = [approvalRequest.value, ...batchValue]; + batchData = [approvalRequest.data, ...batchData]; - newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData) + newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData); } let finalUserOp: Partial = { ...userOp, - callData: newCallData - } + callData: newCallData, + }; // Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) try { - finalUserOp = await this.estimateUserOpGas(finalUserOp) - const callGasLimit = ethers.BigNumber.from(finalUserOp.callGasLimit) - if (finalUserOp.callGasLimit && callGasLimit.lt(ethers.BigNumber.from('21000'))) { + finalUserOp = await this.estimateUserOpGas(finalUserOp); + const callGasLimit = ethers.BigNumber.from(finalUserOp.callGasLimit); + if (finalUserOp.callGasLimit && callGasLimit.lt(ethers.BigNumber.from("21000"))) { return { ...userOp, - callData: newCallData - } + callData: newCallData, + }; } - Logger.log('UserOp after estimation ', finalUserOp) + Logger.log("UserOp after estimation ", finalUserOp); } catch (error) { - Logger.error('Failed to estimate gas for userOp with updated callData ', error) - Logger.log( - 'Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit' - ) + Logger.error("Failed to estimate gas for userOp with updated callData ", error); + Logger.log("Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); } - return finalUserOp + return finalUserOp; } } catch (error) { - Logger.log('Failed to update userOp. Sending back original op') - Logger.error('Failed to update callData with error', error) - return userOp + Logger.log("Failed to update userOp. Sending back original op"); + Logger.error("Failed to update callData with error", error); + return userOp; } - return userOp + return userOp; } async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { - this.isActiveValidationModuleDefined() - const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params) + this.isActiveValidationModuleDefined(); + const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); const signatureWithModuleAddress = ethers.utils.defaultAbiCoder.encode( - ['bytes', 'address'], - [moduleSig, this.activeValidationModule.getAddress()] - ) + ["bytes", "address"], + [moduleSig, this.activeValidationModule.getAddress()], + ); - return signatureWithModuleAddress + return signatureWithModuleAddress; } async signMessage(message: Bytes | string): Promise { - this.isActiveValidationModuleDefined() - const dataHash = ethers.utils.arrayify(ethers.utils.hashMessage(message)) - let signature = await this.activeValidationModule.signMessage(dataHash) + this.isActiveValidationModuleDefined(); + const dataHash = ethers.utils.arrayify(ethers.utils.hashMessage(message)); + let signature = await this.activeValidationModule.signMessage(dataHash); - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16) + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27 - signature = signature.slice(0, -2) + correctV.toString(16) + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); } - if (signature.slice(0, 2) !== '0x') { - signature = '0x' + signature + if (signature.slice(0, 2) !== "0x") { + signature = "0x" + signature; } // TODO @@ -546,62 +501,55 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { [, , sig] ) + '6492649264926492649264926492649264926492649264926492649264926492' // magic suffix }*/ - return signature + return signature; } async getAllTokenBalances(balancesDto: BalancesDto): Promise { - return this.nodeClient.getAllTokenBalances(balancesDto) + return this.nodeClient.getAllTokenBalances(balancesDto); } async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { - return this.nodeClient.getTotalBalanceInUsd(balancesDto) + return this.nodeClient.getTotalBalanceInUsd(balancesDto); } - async getSmartAccountsByOwner( - smartAccountByOwnerDto: SmartAccountByOwnerDto - ): Promise { - return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto) + async getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise { + return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto); } - async getTransactionsByAddress( - chainId: number, - address: string - ): Promise { - return this.nodeClient.getTransactionByAddress(chainId, address) + async getTransactionsByAddress(chainId: number, address: string): Promise { + return this.nodeClient.getTransactionByAddress(chainId, address); } async getTransactionByHash(txHash: string): Promise { - return this.nodeClient.getTransactionByHash(txHash) + return this.nodeClient.getTransactionByHash(txHash); } async getAllSupportedChains(): Promise { - return this.nodeClient.getAllSupportedChains() + return this.nodeClient.getAllSupportedChains(); } // async isModuleEnabled(moduleName: string): boolean { async enableModule(moduleAddress: string): Promise { - const tx: Transaction = await this.getEnableModuleData(moduleAddress) - const partialUserOp = await this.buildUserOp([tx]) - return this.sendUserOp(partialUserOp) + const tx: Transaction = await this.getEnableModuleData(moduleAddress); + const partialUserOp = await this.buildUserOp([tx]); + return this.sendUserOp(partialUserOp); } async getEnableModuleData(moduleAddress: string): Promise { - const accountContract = await this._getAccountContract() - const populatedTransaction = await accountContract.populateTransaction.enableModule( - moduleAddress - ) + const accountContract = await this._getAccountContract(); + const populatedTransaction = await accountContract.populateTransaction.enableModule(moduleAddress); const tx: Transaction = { to: await this.getAccountAddress(), - value: '0', - data: populatedTransaction.data as string - } - return tx + value: "0", + data: populatedTransaction.data as string, + }; + return tx; } async isModuleEnabled(moduleName: string): Promise { - const accountContract = await this._getAccountContract() - return await accountContract.isModuleEnabled(moduleName) + const accountContract = await this._getAccountContract(); + return accountContract.isModuleEnabled(moduleName); } // async getEnableModuleData(moduleName: string): Promise { diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index daee86a47..56609109b 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -6,27 +6,36 @@ import { UserOperation, ChainId } from "@biconomy/core-types"; import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; import { packUserOp } from "@biconomy/common"; -import { IBundler, UserOpResponse } from '@biconomy/bundler' -import { IPaymaster, PaymasterAndDataResponse } from '@biconomy/paymaster' -import { Logger } from '@biconomy/common' -import { IEntryPoint } from '@account-abstraction/contracts' -import { SmartAccountConfig, Overrides } from './utils/Types' +import { IBundler, UserOpResponse } from "@biconomy/bundler"; +import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; +import { Logger } from "@biconomy/common"; +import { IEntryPoint } from "@account-abstraction/contracts"; +import { SmartAccountConfig, Overrides } from "./utils/Types"; type UserOperationKey = keyof UserOperation; // Notice: only to be used as base class for child class BiconomySmartAccount(V1) export abstract class SmartAccount implements ISmartAccount { - bundler!: IBundler - paymaster!: IPaymaster - initCode = '0x' + bundler!: IBundler; + + paymaster!: IPaymaster; + + initCode = "0x"; + // Ideally proxy should be defined in child class, if it's meant to be of type Biconomy SmartAccount - proxy!: any - owner!: string - provider!: JsonRpcProvider - entryPoint!: IEntryPoint - chainId!: ChainId - signer!: Signer - smartAccountConfig: SmartAccountConfig + proxy!: any; + + owner!: string; + + provider!: JsonRpcProvider; + + entryPoint!: IEntryPoint; + + chainId!: ChainId; + + signer!: Signer; + + smartAccountConfig: SmartAccountConfig; constructor(_smartAccountConfig: SmartAccountConfig) { this.smartAccountConfig = _smartAccountConfig; diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index bcb146b6d..784f36f10 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -1,8 +1,8 @@ -export * from './interfaces/ISmartAccount' -export * from './interfaces/IBaseSmartAccount' -export * from './interfaces/IBiconomySmartAccount' -export * from './utils/Types' -export * from './SmartAccount' -export * from './BiconomySmartAccount' -export * from './utils/Constants' -export * from './BiconomySmartAccountV2' +export * from "./interfaces/ISmartAccount"; +export * from "./interfaces/IBaseSmartAccount"; +export * from "./interfaces/IBiconomySmartAccount"; +export * from "./utils/Types"; +export * from "./SmartAccount"; +export * from "./BiconomySmartAccount"; +export * from "./utils/Constants"; +export * from "./BiconomySmartAccountV2"; diff --git a/packages/account/src/interfaces/IBaseSmartAccount.ts b/packages/account/src/interfaces/IBaseSmartAccount.ts index 2c8e27b9a..797af5536 100644 --- a/packages/account/src/interfaces/IBaseSmartAccount.ts +++ b/packages/account/src/interfaces/IBaseSmartAccount.ts @@ -1,23 +1,23 @@ -import { UserOperation } from '@biconomy/core-types' -import { UserOpResponse } from '@biconomy/bundler' -import { BigNumberish, Bytes, BytesLike, BigNumber } from 'ethers' +import { UserOperation } from "@biconomy/core-types"; +import { UserOpResponse } from "@biconomy/bundler"; +import { BigNumberish, Bytes, BytesLike, BigNumber } from "ethers"; /** * Interface for Smart Contract Wallet aka Smart Account. * This SA does not have to implement ERC4337 interfaces */ export interface INon4337Account { - estimateCreationGas(initCode: string): Promise - getNonce(): Promise - signMessage(message: Bytes | string): Promise - getAccountAddress(accountIndex?: number): Promise + estimateCreationGas(initCode: string): Promise; + getNonce(): Promise; + signMessage(message: Bytes | string): Promise; + getAccountAddress(accountIndex?: number): Promise; } export interface IBaseSmartAccount extends INon4337Account { - getVerificationGasLimit(initCode: BytesLike): Promise - getPreVerificationGas(userOp: Partial): Promise - signUserOp(userOp: UserOperation): Promise - signUserOpHash(userOpHash: string): Promise - getUserOpHash(userOp: Partial): Promise - getAccountInitCode(): Promise - getDummySignature(): Promise + getVerificationGasLimit(initCode: BytesLike): Promise; + getPreVerificationGas(userOp: Partial): Promise; + signUserOp(userOp: UserOperation): Promise; + signUserOpHash(userOpHash: string): Promise; + getUserOpHash(userOp: Partial): Promise; + getAccountInitCode(): Promise; + getDummySignature(): Promise; } diff --git a/packages/account/src/interfaces/ISmartAccount.ts b/packages/account/src/interfaces/ISmartAccount.ts index 68d6b51f9..ffbe93587 100644 --- a/packages/account/src/interfaces/ISmartAccount.ts +++ b/packages/account/src/interfaces/ISmartAccount.ts @@ -1,8 +1,8 @@ import { UserOperation } from "@biconomy/core-types"; import { UserOpResponse } from "@biconomy/bundler"; export interface ISmartAccount { - getSmartAccountAddress(accountIndex: number): Promise - signUserOp(userOp: UserOperation): Promise - sendUserOp(userOp: UserOperation): Promise - sendSignedUserOp(userOp: UserOperation): Promise + getSmartAccountAddress(accountIndex: number): Promise; + signUserOp(userOp: UserOperation): Promise; + sendUserOp(userOp: UserOperation): Promise; + sendSignedUserOp(userOp: UserOperation): Promise; } diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 44282ca72..630c7b793 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -1,51 +1,51 @@ -import { ChainId } from '@biconomy/core-types' +import { ChainId } from "@biconomy/core-types"; import { EntryPointAddresses, BiconomyFactories, BiconomyImplementations, EntryPointAddressesByVersion, BiconomyFactoriesByVersion, - BiconomyImplementationsByVersion -} from './Types' + BiconomyImplementationsByVersion, +} from "./Types"; // Review: Note: Might be a good idea to keep reverse mapping for below and also default constants for latest versioned addresses*/ // will always be latest entrypoint address -export const DEFAULT_ENTRYPOINT_ADDRESS = '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789' +export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { - '0x27a4db290b89ae3373ce4313cbeae72112ae7da9': 'V0_0_5', - '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789': 'V0_0_6' -} + "0x27a4db290b89ae3373ce4313cbeae72112ae7da9": "V0_0_5", + "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789": "V0_0_6", +}; // will always be latest factory address -export const DEFAULT_BICONOMY_FACTORY_ADDRESS = '0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5' +export const DEFAULT_BICONOMY_FACTORY_ADDRESS = "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5"; export const BICONOMY_FACTORY_ADDRESSES: BiconomyFactories = { - '0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c': 'V1_0_0', - '0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5': 'V2_0_0' -} + "0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c": "V1_0_0", + "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5": "V2_0_0", +}; // will always be latest implementation address -export const DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS = '0x0000002512019Dafb59528B82CB92D3c5D2423aC' +export const DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS = "0x0000002512019Dafb59528B82CB92D3c5D2423aC"; export const BICONOMY_IMPLEMENTATION_ADDRESSES: BiconomyImplementations = { - '0x00006b7e42e01957da540dc6a8f7c30c4d816af5': 'V1_0_0', - '0x0000002512019Dafb59528B82CB92D3c5D2423aC': 'V2_0_0' -} + "0x00006b7e42e01957da540dc6a8f7c30c4d816af5": "V1_0_0", + "0x0000002512019Dafb59528B82CB92D3c5D2423aC": "V2_0_0", +}; export const ENTRYPOINT_ADDRESSES_BY_VERSION: EntryPointAddressesByVersion = { - V0_0_5: '0x27a4db290b89ae3373ce4313cbeae72112ae7da9', - V0_0_6: '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789' -} + V0_0_5: "0x27a4db290b89ae3373ce4313cbeae72112ae7da9", + V0_0_6: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", +}; // TODO // Update with latest factory address export const BICONOMY_FACTORY_ADDRESSES_BY_VERSION: BiconomyFactoriesByVersion = { - V1_0_0: '0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c', - V2_0_0: '0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5' -} + V1_0_0: "0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c", + V2_0_0: "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5", +}; // TODO // Update with latest implementation address which includes 2D nonce interface export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementationsByVersion = { - V1_0_0: '0x00006b7e42e01957da540dc6a8f7c30c4d816af5', - V2_0_0: '0x0000002512019Dafb59528B82CB92D3c5D2423aC' -} + V1_0_0: "0x00006b7e42e01957da540dc6a8f7c30c4d816af5", + V2_0_0: "0x0000002512019Dafb59528B82CB92D3c5D2423aC", +}; export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101]; diff --git a/packages/account/src/utils/Preverificaiton.ts b/packages/account/src/utils/Preverificaiton.ts index 02b003f05..5b32b0054 100644 --- a/packages/account/src/utils/Preverificaiton.ts +++ b/packages/account/src/utils/Preverificaiton.ts @@ -108,15 +108,11 @@ export function calcPreVerificationGas(userOp: Partial * plus any gas overhead that can't be tracked on-chain * (if bundler needs to charge the premium one way is to increase this value for ops to sign) */ - const callDataCost = packed - .map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte)) - .reduce((sum, x) => sum + x) - const ret = Math.round( - callDataCost + ov.fixed / ov.bundleSize + ov.perUserOp + ov.perUserOpWord * lengthInWord - ) + const callDataCost = packed.map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte)).reduce((sum, x) => sum + x); + const ret = Math.round(callDataCost + ov.fixed / ov.bundleSize + ov.perUserOp + ov.perUserOpWord * lengthInWord); if (ret) { - return BigNumber.from(ret) + return BigNumber.from(ret); } else { - throw new Error("can't calculate preVerificationGas") + throw new Error("can't calculate preVerificationGas"); } } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index f06f475b8..6c0898f95 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -1,35 +1,35 @@ -import { Signer } from 'ethers' -import { ChainId } from '@biconomy/core-types' -import { BigNumberish } from 'ethers' -import { IBundler } from '@biconomy/bundler' -import { IPaymaster, PaymasterFeeQuote } from '@biconomy/paymaster' -import { BaseValidationModule, ModuleInfo } from '@biconomy/modules' -import { JsonRpcProvider, Provider } from '@ethersproject/providers' -import { GasOverheads } from './Preverificaiton' +import { Signer } from "ethers"; +import { ChainId } from "@biconomy/core-types"; +import { BigNumberish } from "ethers"; +import { IBundler } from "@biconomy/bundler"; +import { IPaymaster, PaymasterFeeQuote } from "@biconomy/paymaster"; +import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; +import { JsonRpcProvider, Provider } from "@ethersproject/providers"; +import { GasOverheads } from "./Preverificaiton"; export type EntryPointAddresses = { - [address: string]: string -} + [address: string]: string; +}; export type BiconomyFactories = { [address: string]: string; }; export type BiconomyImplementations = { - [address: string]: string -} + [address: string]: string; +}; export type EntryPointAddressesByVersion = { - [version: string]: string -} + [version: string]: string; +}; export type BiconomyFactoriesByVersion = { - [version: string]: string -} + [version: string]: string; +}; export type BiconomyImplementationsByVersion = { - [version: string]: string -} + [version: string]: string; +}; export type SmartAccountConfig = { entryPointAddress: string; @@ -38,14 +38,14 @@ export type SmartAccountConfig = { export interface BaseSmartAccountConfig { // owner?: Signer // can be in child classes - index?: number - provider?: Provider - entryPointAddress: string - accountAddress?: string - overheads?: Partial - paymaster?: IPaymaster // PaymasterAPI - bundler?: IBundler // like HttpRpcClient - chainId: ChainId + index?: number; + provider?: Provider; + entryPointAddress: string; + accountAddress?: string; + overheads?: Partial; + paymaster?: IPaymaster; // PaymasterAPI + bundler?: IBundler; // like HttpRpcClient + chainId: ChainId; } export type BiconomyTokenPaymasterRequest = { @@ -65,25 +65,25 @@ export type BiconomySmartAccountConfig = { }; export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { - factoryAddress?: string - rpcUrl?: string // as good as Provider - nodeClientUrl?: string // very specific to Biconomy - defaultValidationModule: BaseValidationModule - activeValidationModule?: BaseValidationModule + factoryAddress?: string; + rpcUrl?: string; // as good as Provider + nodeClientUrl?: string; // very specific to Biconomy + defaultValidationModule: BaseValidationModule; + activeValidationModule?: BaseValidationModule; } export type BuildUserOpOptions = { - overrides?: Overrides - skipBundlerGasEstimation?: boolean - params?: ModuleInfo - nonceOptions?: NonceOptions - forceEncodeForBatch?: boolean -} + overrides?: Overrides; + skipBundlerGasEstimation?: boolean; + params?: ModuleInfo; + nonceOptions?: NonceOptions; + forceEncodeForBatch?: boolean; +}; export type NonceOptions = { - nonceKey?: number - nonceOverride?: number -} + nonceKey?: number; + nonceOverride?: number; +}; export type Overrides = { callGasLimit?: BigNumberish; @@ -96,25 +96,25 @@ export type Overrides = { }; export type InitilizationData = { - accountIndex?: number - signerAddress?: string -} + accountIndex?: number; + signerAddress?: string; +}; export type InitializeV2Data = { - accountIndex?: number -} + accountIndex?: number; +}; export interface TransactionDetailsForUserOp { - target: string - data: string - value?: BigNumberish - gasLimit?: BigNumberish - maxFeePerGas?: BigNumberish - maxPriorityFeePerGas?: BigNumberish - nonce?: BigNumberish + target: string; + data: string; + value?: BigNumberish; + gasLimit?: BigNumberish; + maxFeePerGas?: BigNumberish; + maxPriorityFeePerGas?: BigNumberish; + nonce?: BigNumberish; } export type CounterFactualAddressParam = { - index?: number - validationModule?: BaseValidationModule -} + index?: number; + validationModule?: BaseValidationModule; +}; diff --git a/packages/common/src/ContractsInstances.ts b/packages/common/src/ContractsInstances.ts index 9f238e860..99198db56 100644 --- a/packages/common/src/ContractsInstances.ts +++ b/packages/common/src/ContractsInstances.ts @@ -1,6 +1,6 @@ -import { SmartAccountType } from '@biconomy/core-types' -import { JsonRpcProvider } from '@ethersproject/providers' -import { EntryPoint, IEntryPoint, EntryPoint__factory } from '@account-abstraction/contracts' +import { SmartAccountType } from "@biconomy/core-types"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { EntryPoint, IEntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { EntryPoint_v005__factory, EntryPoint_v006__factory, @@ -11,8 +11,8 @@ import { SmartAccountFactory_v100__factory, SmartAccountFactory_v200__factory, SmartAccount_v100__factory, - SmartAccount_v200__factory -} from './typechain' + SmartAccount_v200__factory, +} from "./typechain"; export type GetContractInstanceDto = { smartAccountType: SmartAccountType; @@ -22,66 +22,62 @@ export type GetContractInstanceDto = { }; // TODO // Review return types -export function getSAProxyContract( - contractInstanceDto: GetContractInstanceDto -): SmartAccount_v100 | SmartAccount_v200 { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto +export function getSAProxyContract(contractInstanceDto: GetContractInstanceDto): SmartAccount_v100 | SmartAccount_v200 { + const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; switch (version) { case "V1_0_0": if (smartAccountType === SmartAccountType.BICONOMY) { return SmartAccount_v100__factory.connect(contractAddress, provider); } - break - case 'V2_0_0': + break; + case "V2_0_0": if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccount_v200__factory.connect(contractAddress, provider) + return SmartAccount_v200__factory.connect(contractAddress, provider); } - break + break; default: - return SmartAccount_v200__factory.connect(contractAddress, provider) + return SmartAccount_v200__factory.connect(contractAddress, provider); } throw new Error("Invalid version or smartAccountType provided for proxy contract instance"); } // TODO // Review return types -export function getSAFactoryContract( - contractInstanceDto: GetContractInstanceDto -): SmartAccountFactory_v100 | SmartAccountFactory_v200 { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto +export function getSAFactoryContract(contractInstanceDto: GetContractInstanceDto): SmartAccountFactory_v100 | SmartAccountFactory_v200 { + const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; switch (version) { case "V1_0_0": if (smartAccountType === SmartAccountType.BICONOMY) { return SmartAccountFactory_v100__factory.connect(contractAddress, provider); } - break - case 'V2_0_0': + break; + case "V2_0_0": if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccountFactory_v200__factory.connect(contractAddress, provider) + return SmartAccountFactory_v200__factory.connect(contractAddress, provider); } - break + break; default: - return SmartAccountFactory_v200__factory.connect(contractAddress, provider) + return SmartAccountFactory_v200__factory.connect(contractAddress, provider); } throw new Error("Invalid version or smartAccountType provided for factory contract instance"); } export function getEntryPointContract(contractInstanceDto: GetContractInstanceDto): IEntryPoint { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto + const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; switch (version) { case "V0_0_5": if (smartAccountType === SmartAccountType.BICONOMY) { - return EntryPoint_v005__factory.connect(contractAddress, provider) + return EntryPoint_v005__factory.connect(contractAddress, provider); } - break - case 'V0_0_6': + break; + case "V0_0_6": if (smartAccountType === SmartAccountType.BICONOMY) { - return EntryPoint_v006__factory.connect(contractAddress, provider) + return EntryPoint_v006__factory.connect(contractAddress, provider); } break; default: - return EntryPoint_v006__factory.connect(contractAddress, provider) + return EntryPoint_v006__factory.connect(contractAddress, provider); } throw new Error("Invalid version or smartAccountType provided for entrypoint contract instance"); } diff --git a/packages/modules/src/BaseValidationModule.ts b/packages/modules/src/BaseValidationModule.ts index cf9f19482..d61c16751 100644 --- a/packages/modules/src/BaseValidationModule.ts +++ b/packages/modules/src/BaseValidationModule.ts @@ -1,36 +1,36 @@ -import { Signer } from 'ethers' -import { Bytes } from 'ethers/lib/utils' -import { BaseValidationModuleConfig, ModuleInfo } from './utils/Types' -import { DEFAULT_ENTRYPOINT_ADDRESS } from './utils/Constants' -import { IValidationModule } from './interfaces/IValidationModule' +import { Signer } from "ethers"; +import { Bytes } from "ethers/lib/utils"; +import { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types"; +import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; +import { IValidationModule } from "./interfaces/IValidationModule"; // TODO: Review try using generic types // Need to solve it in SmartAccountV2 and it's config because for any module BaseValidationModule is used as type export abstract class BaseValidationModule implements IValidationModule { - entryPointAddress: string + entryPointAddress: string; constructor(moduleConfig: BaseValidationModuleConfig) { - const { entryPointAddress } = moduleConfig + const { entryPointAddress } = moduleConfig; - this.entryPointAddress = entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS + this.entryPointAddress = entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS; } - abstract getAddress(): string + abstract getAddress(): string; setEntryPointAddress(entryPointAddress: string) { - this.entryPointAddress = entryPointAddress + this.entryPointAddress = entryPointAddress; } - abstract getInitData(): Promise + abstract getInitData(): Promise; // Anything required to get dummy signature can be passed as params - abstract getDummySignature(params?: ModuleInfo): Promise + abstract getDummySignature(params?: ModuleInfo): Promise; // Review naming convention for getter - abstract getSigner(): Promise + abstract getSigner(): Promise; // Signer specific or any other additional information can be passed as params - abstract signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise + abstract signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise; - abstract signMessage(message: Bytes | string): Promise + abstract signMessage(message: Bytes | string): Promise; } diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 46e6d2009..bbe4cf014 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -1,42 +1,40 @@ -import { Signer, ethers } from 'ethers' -import MerkleTree from 'merkletreejs' -import { NODE_CLIENT_URL, Logger } from '@biconomy/common' -import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from 'ethers/lib/utils' -import { keccak256 } from 'ethereumjs-util' -import { - ModuleVersion, - CreateSessionDataParams, - StorageType, - SessionParams, - BatchedSessionRouterModuleConfig, - ModuleInfo -} from './utils/Types' +import { Signer, ethers } from "ethers"; +import MerkleTree from "merkletreejs"; +import { NODE_CLIENT_URL, Logger } from "@biconomy/common"; +import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from "ethers/lib/utils"; +import { keccak256 } from "ethereumjs-util"; +import { ModuleVersion, CreateSessionDataParams, StorageType, SessionParams, BatchedSessionRouterModuleConfig, ModuleInfo } from "./utils/Types"; import { BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION, SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE, - DEFAULT_BATCHED_SESSION_ROUTER_MODULE -} from './utils/Constants' -import { generateRandomHex } from './utils/Uid' -import { BaseValidationModule } from './BaseValidationModule' -import { SessionLocalStorage } from './session-storage/SessionLocalStorage' -import { ISessionStorage, SessionSearchParam, SessionStatus } from './interfaces/ISessionStorage' -import { SessionKeyManagerModule } from './SessionKeyManagerModule' + DEFAULT_BATCHED_SESSION_ROUTER_MODULE, +} from "./utils/Constants"; +import { generateRandomHex } from "./utils/Uid"; +import { BaseValidationModule } from "./BaseValidationModule"; +import { SessionLocalStorage } from "./session-storage/SessionLocalStorage"; +import { ISessionStorage, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; +import { SessionKeyManagerModule } from "./SessionKeyManagerModule"; export class BatchedSessionRouterModule extends BaseValidationModule { - version: ModuleVersion = 'V1_0_0' - moduleAddress!: string - sessionManagerModuleAddress!: string - sessionKeyManagerModule!: SessionKeyManagerModule + version: ModuleVersion = "V1_0_0"; + + moduleAddress!: string; + + sessionManagerModuleAddress!: string; + + sessionKeyManagerModule!: SessionKeyManagerModule; + readonly mockEcdsaSessionKeySig: string = - '0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b' + "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; + /** * This constructor is private. Use the static create method to instantiate SessionKeyManagerModule * @param moduleConfig The configuration for the module * @returns An instance of SessionKeyManagerModule */ private constructor(moduleConfig: BatchedSessionRouterModuleConfig) { - super(moduleConfig) + super(moduleConfig); } /** @@ -44,27 +42,24 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @param moduleConfig The configuration for the module * @returns A Promise that resolves to an instance of SessionKeyManagerModule */ - public static async create( - moduleConfig: BatchedSessionRouterModuleConfig - ): Promise { - const instance = new BatchedSessionRouterModule(moduleConfig) + public static async create(moduleConfig: BatchedSessionRouterModuleConfig): Promise { + const instance = new BatchedSessionRouterModule(moduleConfig); if (moduleConfig.moduleAddress) { - instance.moduleAddress = moduleConfig.moduleAddress + instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] + const moduleAddr = BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`) + throw new Error(`Invalid version ${moduleConfig.version}`); } - instance.moduleAddress = moduleAddr - instance.version = moduleConfig.version as ModuleVersion + instance.moduleAddress = moduleAddr; + instance.version = moduleConfig.version as ModuleVersion; } else { - instance.moduleAddress = DEFAULT_BATCHED_SESSION_ROUTER_MODULE + instance.moduleAddress = DEFAULT_BATCHED_SESSION_ROUTER_MODULE; // Note: in this case Version remains the default one } - instance.sessionManagerModuleAddress = - moduleConfig.sessionManagerModuleAddress ?? DEFAULT_SESSION_KEY_MANAGER_MODULE + instance.sessionManagerModuleAddress = moduleConfig.sessionManagerModuleAddress ?? DEFAULT_SESSION_KEY_MANAGER_MODULE; if (!moduleConfig.sessionKeyManagerModule) { // generate sessionModule @@ -72,16 +67,16 @@ export class BatchedSessionRouterModule extends BaseValidationModule { moduleAddress: instance.sessionManagerModuleAddress, smartAccountAddress: moduleConfig.smartAccountAddress, nodeClientUrl: moduleConfig.nodeClientUrl, - storageType: moduleConfig.storageType - }) + storageType: moduleConfig.storageType, + }); - instance.sessionKeyManagerModule = sessionModule + instance.sessionKeyManagerModule = sessionModule; } else { - instance.sessionKeyManagerModule = moduleConfig.sessionKeyManagerModule - instance.sessionManagerModuleAddress = moduleConfig.sessionKeyManagerModule.getAddress() + instance.sessionKeyManagerModule = moduleConfig.sessionKeyManagerModule; + instance.sessionManagerModuleAddress = moduleConfig.sessionKeyManagerModule.getAddress(); } - return instance + return instance; } /** @@ -90,8 +85,8 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @returns The session data */ createSessionData = async (leavesData: CreateSessionDataParams[]): Promise => { - return this.sessionKeyManagerModule.createSessionData(leavesData) - } + return this.sessionKeyManagerModule.createSessionData(leavesData); + }; /** * This method is used to sign the user operation using the session signer @@ -100,77 +95,75 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @returns The signature of the user operation */ async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { - const sessionParams = params?.batchSessionParams + const sessionParams = params?.batchSessionParams; if (!sessionParams || sessionParams.length === 0) { - throw new Error('Session parameters are not provided') + throw new Error("Session parameters are not provided"); } - const sessionDataTupleArray = [] + const sessionDataTupleArray = []; // signer must be the same for all the sessions - const sessionSigner = sessionParams[0].sessionSigner + const sessionSigner = sessionParams[0].sessionSigner; const userOpHashAndModuleAddress = ethers.utils.hexConcat([ ethers.utils.hexZeroPad(userOpHash, 32), - ethers.utils.hexZeroPad(this.getSessionKeyManagerAddress(), 20) - ]) + ethers.utils.hexZeroPad(this.getSessionKeyManagerAddress(), 20), + ]); - const resultingHash = ethers.utils.keccak256(userOpHashAndModuleAddress) + const resultingHash = ethers.utils.keccak256(userOpHashAndModuleAddress); - const signature = await sessionSigner.signMessage(arrayify(resultingHash)) + const signature = await sessionSigner.signMessage(arrayify(resultingHash)); for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { - throw new Error('Session signer is not provided.') + throw new Error("Session signer is not provided."); } - const sessionDataTuple = [] + const sessionDataTuple = []; - let sessionSignerData + let sessionSignerData; if (sessionParam.sessionID) { sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ - sessionID: sessionParam.sessionID - }) + sessionID: sessionParam.sessionID, + }); } else if (sessionParam.sessionValidationModule) { sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ sessionValidationModule: sessionParam.sessionValidationModule, - sessionPublicKey: await sessionSigner.getAddress() - }) + sessionPublicKey: await sessionSigner.getAddress(), + }); } else { - throw new Error('sessionID or sessionValidationModule should be provided.') + throw new Error("sessionID or sessionValidationModule should be provided."); } - sessionDataTuple.push(sessionSignerData.validUntil) - sessionDataTuple.push(sessionSignerData.validAfter) - sessionDataTuple.push(sessionSignerData.sessionValidationModule) - sessionDataTuple.push(sessionSignerData.sessionKeyData) + sessionDataTuple.push(sessionSignerData.validUntil); + sessionDataTuple.push(sessionSignerData.validAfter); + sessionDataTuple.push(sessionSignerData.sessionValidationModule); + sessionDataTuple.push(sessionSignerData.sessionKeyData); const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), hexZeroPad(sessionSignerData.sessionValidationModule, 20), - sessionSignerData.sessionKeyData - ]) + sessionSignerData.sessionKeyData, + ]); - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof( - ethers.utils.keccak256(leafDataHex) as unknown as Buffer - ) + const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); - sessionDataTuple.push(proof) - sessionDataTuple.push(sessionParam.additionalSessionData ?? '0x') + sessionDataTuple.push(proof); + sessionDataTuple.push(sessionParam.additionalSessionData ?? "0x"); - sessionDataTupleArray.push(sessionDataTuple) + sessionDataTupleArray.push(sessionDataTuple); } // Generate the padded signature const paddedSignature = defaultAbiCoder.encode( - ['address', 'tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]', 'bytes'], - [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature] - ) + ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], + [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature], + ); - return paddedSignature + return paddedSignature; } /** @@ -180,7 +173,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @returns */ async updateSessionStatus(param: SessionSearchParam, status: SessionStatus) { - this.sessionKeyManagerModule.sessionStorageClient.updateSessionStatus(param, status) + this.sessionKeyManagerModule.sessionStorageClient.updateSessionStatus(param, status); } /** @@ -188,28 +181,28 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @returns */ async clearPendingSessions() { - this.sessionKeyManagerModule.sessionStorageClient.clearPendingSessions() + this.sessionKeyManagerModule.sessionStorageClient.clearPendingSessions(); } /** * @returns SessionKeyManagerModule address */ getAddress(): string { - return this.moduleAddress + return this.moduleAddress; } /** * @returns SessionKeyManagerModule address */ getSessionKeyManagerAddress(): string { - return this.sessionManagerModuleAddress + return this.sessionManagerModuleAddress; } /** * @remarks This is the version of the module contract */ async getSigner(): Promise { - throw new Error('Method not implemented.') + throw new Error("Method not implemented."); } /** @@ -219,89 +212,84 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // Review // instead of search params it could be actual leaves info retrieved beforehand async getDummySignature(params?: ModuleInfo): Promise { - const sessionParams = params?.batchSessionParams + const sessionParams = params?.batchSessionParams; if (!sessionParams || sessionParams.length === 0) { - throw new Error('Session parameters are not provided') + throw new Error("Session parameters are not provided"); } - const sessionDataTupleArray = [] + const sessionDataTupleArray = []; // if needed we could do mock signature over userOpHashAndModuleAddress // signer must be the same for all the sessions - const sessionSigner = sessionParams[0].sessionSigner + const sessionSigner = sessionParams[0].sessionSigner; for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { - throw new Error('Session signer is not provided.') + throw new Error("Session signer is not provided."); } - const sessionDataTuple = [] + const sessionDataTuple = []; - let sessionSignerData + let sessionSignerData; if (sessionParam.sessionID) { sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ - sessionID: sessionParam.sessionID - }) + sessionID: sessionParam.sessionID, + }); } else if (sessionParam.sessionValidationModule) { sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ sessionValidationModule: sessionParam.sessionValidationModule, - sessionPublicKey: await sessionSigner.getAddress() - }) + sessionPublicKey: await sessionSigner.getAddress(), + }); } else { - throw new Error('sessionID or sessionValidationModule should be provided.') + throw new Error("sessionID or sessionValidationModule should be provided."); } - sessionDataTuple.push(sessionSignerData.validUntil) - sessionDataTuple.push(sessionSignerData.validAfter) - sessionDataTuple.push(sessionSignerData.sessionValidationModule) - sessionDataTuple.push(sessionSignerData.sessionKeyData) + sessionDataTuple.push(sessionSignerData.validUntil); + sessionDataTuple.push(sessionSignerData.validAfter); + sessionDataTuple.push(sessionSignerData.sessionValidationModule); + sessionDataTuple.push(sessionSignerData.sessionKeyData); const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), hexZeroPad(sessionSignerData.sessionValidationModule, 20), - sessionSignerData.sessionKeyData - ]) + sessionSignerData.sessionKeyData, + ]); - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof( - ethers.utils.keccak256(leafDataHex) as unknown as Buffer - ) + const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); - sessionDataTuple.push(proof) - sessionDataTuple.push(sessionParam.additionalSessionData ?? '0x') + sessionDataTuple.push(proof); + sessionDataTuple.push(sessionParam.additionalSessionData ?? "0x"); - sessionDataTupleArray.push(sessionDataTuple) + sessionDataTupleArray.push(sessionDataTuple); } // Generate the padded signature const paddedSignature = defaultAbiCoder.encode( - ['address', 'tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]', 'bytes'], - [this.getSessionKeyManagerAddress(), sessionDataTupleArray, this.mockEcdsaSessionKeySig] - ) + ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], + [this.getSessionKeyManagerAddress(), sessionDataTupleArray, this.mockEcdsaSessionKeySig], + ); - const dummySig = ethers.utils.defaultAbiCoder.encode( - ['bytes', 'address'], - [paddedSignature, this.getAddress()] - ) + const dummySig = ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [paddedSignature, this.getAddress()]); - return dummySig + return dummySig; } /** * @remarks Other modules may need additional attributes to build init data */ async getInitData(): Promise { - throw new Error('Method not implemented.') + throw new Error("Method not implemented."); } /** * @remarks This Module dont have knowledge of signer. So, this method is not implemented */ async signMessage(message: Bytes | string): Promise { - Logger.log('message', message) - throw new Error('Method not implemented.') + Logger.log("message", message); + throw new Error("Method not implemented."); } } diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index d57191ea5..299baa0ff 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -1,69 +1,68 @@ -import { Logger } from '@biconomy/common' -import { Signer, ethers } from 'ethers' -import { Bytes, arrayify } from 'ethers/lib/utils' -import { ECDSAOwnershipValidationModuleConfig, ModuleVersion } from './utils/Types' -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from './utils/Constants' -import { BaseValidationModule } from './BaseValidationModule' +import { Logger } from "@biconomy/common"; +import { Signer, ethers } from "ethers"; +import { Bytes, arrayify } from "ethers/lib/utils"; +import { ECDSAOwnershipValidationModuleConfig, ModuleVersion } from "./utils/Types"; +import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; +import { BaseValidationModule } from "./BaseValidationModule"; // Could be renamed with suffix API export class ECDSAOwnershipValidationModule extends BaseValidationModule { - signer: Signer - moduleAddress!: string - version: ModuleVersion = 'V1_0_0' + signer: Signer; + + moduleAddress!: string; + + version: ModuleVersion = "V1_0_0"; constructor(moduleConfig: ECDSAOwnershipValidationModuleConfig) { - super(moduleConfig) + super(moduleConfig); if (moduleConfig.moduleAddress) { - this.moduleAddress = moduleConfig.moduleAddress + this.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] + const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`) + throw new Error(`Invalid version ${moduleConfig.version}`); } - this.moduleAddress = moduleAddr - this.version = moduleConfig.version as ModuleVersion + this.moduleAddress = moduleAddr; + this.version = moduleConfig.version as ModuleVersion; } else { - this.moduleAddress = DEFAULT_ECDSA_OWNERSHIP_MODULE + this.moduleAddress = DEFAULT_ECDSA_OWNERSHIP_MODULE; // Note: in this case Version remains the default one } - this.signer = moduleConfig.signer + this.signer = moduleConfig.signer; } getAddress(): string { - return this.moduleAddress + return this.moduleAddress; } async getSigner(): Promise { - return await Promise.resolve(this.signer) + return Promise.resolve(this.signer); } async getDummySignature(): Promise { - const moduleAddress = ethers.utils.getAddress(this.getAddress()) - const dynamicPart = moduleAddress.substring(2).padEnd(40, '0') - return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000` + const moduleAddress = ethers.utils.getAddress(this.getAddress()); + const dynamicPart = moduleAddress.substring(2).padEnd(40, "0"); + return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000`; } // Note: other modules may need additional attributes to build init data async getInitData(): Promise { - const ecdsaOwnerAddress = await this.signer.getAddress() - const moduleRegistryAbi = 'function initForSmartAccount(address owner)' - const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]) - const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData( - 'initForSmartAccount', - [ecdsaOwnerAddress] - ) - return ecdsaOwnershipInitData + const ecdsaOwnerAddress = await this.signer.getAddress(); + const moduleRegistryAbi = "function initForSmartAccount(address owner)"; + const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]); + const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData("initForSmartAccount", [ecdsaOwnerAddress]); + return ecdsaOwnershipInitData; } async signUserOpHash(userOpHash: string): Promise { - const sig = await this.signer.signMessage(arrayify(userOpHash)) + const sig = await this.signer.signMessage(arrayify(userOpHash)); - Logger.log('ecdsa signature ', sig) + Logger.log("ecdsa signature ", sig); - return sig + return sig; } async signMessage(message: Bytes | string): Promise { - return await this.signer.signMessage(message) + return this.signer.signMessage(message); } } diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index ab37e658c..2ee24a561 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -1,142 +1,128 @@ -import { UserOperation } from '@biconomy/core-types' -import { Logger, getUserOpHash } from '@biconomy/common' -import { Signer, ethers } from 'ethers' -import MerkleTree from 'merkletreejs' -import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from './utils/Constants' -import { - keccak256, - arrayify, - defaultAbiCoder, - hexConcat, - hexZeroPad, - Bytes -} from 'ethers/lib/utils' -import { ModuleVersion, MultiChainUserOpDto, MultiChainValidationModuleConfig } from './utils/Types' -import { BaseValidationModule } from './BaseValidationModule' +import { UserOperation } from "@biconomy/core-types"; +import { Logger, getUserOpHash } from "@biconomy/common"; +import { Signer, ethers } from "ethers"; +import MerkleTree from "merkletreejs"; +import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; +import { keccak256, arrayify, defaultAbiCoder, hexConcat, hexZeroPad, Bytes } from "ethers/lib/utils"; +import { ModuleVersion, MultiChainUserOpDto, MultiChainValidationModuleConfig } from "./utils/Types"; +import { BaseValidationModule } from "./BaseValidationModule"; export class MultiChainValidationModule extends BaseValidationModule { - signer: Signer - moduleAddress!: string - version: ModuleVersion = 'V1_0_0' + signer: Signer; + + moduleAddress!: string; + + version: ModuleVersion = "V1_0_0"; constructor(moduleConfig: MultiChainValidationModuleConfig) { - super(moduleConfig) + super(moduleConfig); if (moduleConfig.moduleAddress) { - this.moduleAddress = moduleConfig.moduleAddress + this.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] + const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`) + throw new Error(`Invalid version ${moduleConfig.version}`); } - this.moduleAddress = moduleAddr - this.version = moduleConfig.version as ModuleVersion + this.moduleAddress = moduleAddr; + this.version = moduleConfig.version as ModuleVersion; } else { - this.moduleAddress = DEFAULT_MULTICHAIN_MODULE + this.moduleAddress = DEFAULT_MULTICHAIN_MODULE; // Note: in this case Version remains the default one } - this.signer = moduleConfig.signer + this.signer = moduleConfig.signer; } getAddress(): string { - return this.moduleAddress + return this.moduleAddress; } async getSigner(): Promise { - return await Promise.resolve(this.signer) + return Promise.resolve(this.signer); } async getDummySignature(): Promise { - const moduleAddress = ethers.utils.getAddress(this.getAddress()) - const dynamicPart = moduleAddress.substring(2).padEnd(40, '0') - return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000` + const moduleAddress = ethers.utils.getAddress(this.getAddress()); + const dynamicPart = moduleAddress.substring(2).padEnd(40, "0"); + return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000`; } // Note: other modules may need additional attributes to build init data async getInitData(): Promise { - const ecdsaOwnerAddress = await this.signer.getAddress() - const moduleRegistryAbi = 'function initForSmartAccount(address owner)' - const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]) - const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData( - 'initForSmartAccount', - [ecdsaOwnerAddress] - ) - return ecdsaOwnershipInitData + const ecdsaOwnerAddress = await this.signer.getAddress(); + const moduleRegistryAbi = "function initForSmartAccount(address owner)"; + const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]); + const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData("initForSmartAccount", [ecdsaOwnerAddress]); + return ecdsaOwnershipInitData; } async signUserOpHash(userOpHash: string): Promise { - const sig = await this.signer.signMessage(arrayify(userOpHash)) + const sig = await this.signer.signMessage(arrayify(userOpHash)); - Logger.log('ecdsa signature ', sig) + Logger.log("ecdsa signature ", sig); - return sig + return sig; } async signMessage(message: Bytes | string): Promise { - return await this.signer.signMessage(message) + return this.signer.signMessage(message); } async signUserOps(multiChainUserOps: MultiChainUserOpDto[]): Promise { try { - const leaves: string[] = [] + const leaves: string[] = []; // Iterate over each userOp and process them for (const multiChainOp of multiChainUserOps) { - const validUntil = multiChainOp.validUntil ?? 0 - const validAfter = multiChainOp.validAfter ?? 0 + const validUntil = multiChainOp.validUntil ?? 0; + const validAfter = multiChainOp.validAfter ?? 0; const leaf = hexConcat([ hexZeroPad(ethers.utils.hexlify(validUntil), 6), hexZeroPad(ethers.utils.hexlify(validAfter), 6), - hexZeroPad( - getUserOpHash(multiChainOp.userOp, this.entryPointAddress, multiChainOp.chainId), - 32 - ) - ]) + hexZeroPad(getUserOpHash(multiChainOp.userOp, this.entryPointAddress, multiChainOp.chainId), 32), + ]); - leaves.push(keccak256(leaf)) + leaves.push(keccak256(leaf)); } // Create a new Merkle tree using the leaves array - const merkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true }) + const merkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true }); - const multichainSignature = await this.signer.signMessage(arrayify(merkleTree.getHexRoot())) + const multichainSignature = await this.signer.signMessage(arrayify(merkleTree.getHexRoot())); // Create an array to store updated userOps - const updatedUserOps: UserOperation[] = [] + const updatedUserOps: UserOperation[] = []; - Logger.log('merkle root ', merkleTree.getHexRoot()) + Logger.log("merkle root ", merkleTree.getHexRoot()); for (let i = 0; i < leaves.length; i++) { - const merkleProof = merkleTree.getHexProof(leaves[i]) + const merkleProof = merkleTree.getHexProof(leaves[i]); - Logger.log('merkle proof ', merkleProof) + Logger.log("merkle proof ", merkleProof); - const validUntil = multiChainUserOps[i].validUntil ?? 0 - const validAfter = multiChainUserOps[i].validAfter ?? 0 + const validUntil = multiChainUserOps[i].validUntil ?? 0; + const validAfter = multiChainUserOps[i].validAfter ?? 0; // Create the moduleSignature const moduleSignature = defaultAbiCoder.encode( - ['uint48', 'uint48', 'bytes32', 'bytes32[]', 'bytes'], - [validUntil, validAfter, merkleTree.getHexRoot(), merkleProof, multichainSignature] - ) + ["uint48", "uint48", "bytes32", "bytes32[]", "bytes"], + [validUntil, validAfter, merkleTree.getHexRoot(), merkleProof, multichainSignature], + ); // add validation module address to the signature // Note: because accountV2 does not directly call this method. - const signatureWithModuleAddress = defaultAbiCoder.encode( - ['bytes', 'address'], - [moduleSignature, this.getAddress()] - ) + const signatureWithModuleAddress = defaultAbiCoder.encode(["bytes", "address"], [moduleSignature, this.getAddress()]); // Update userOp with the final signature const updatedUserOp: UserOperation = { ...(multiChainUserOps[i].userOp as UserOperation), - signature: signatureWithModuleAddress - } + signature: signatureWithModuleAddress, + }; - updatedUserOps.push(updatedUserOp) + updatedUserOps.push(updatedUserOp); } - return updatedUserOps + return updatedUserOps; } catch (error) { - Logger.error('Error in signing multi chain userops', error) - throw new Error(JSON.stringify(error)) + Logger.error("Error in signing multi chain userops", error); + throw new Error(JSON.stringify(error)); } } } diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index d24736d5d..922bfb944 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -1,39 +1,30 @@ -import { Signer, ethers } from 'ethers' -import MerkleTree from 'merkletreejs' -import { NODE_CLIENT_URL, Logger } from '@biconomy/common' -import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from 'ethers/lib/utils' -import { keccak256 } from 'ethereumjs-util' -import { - SessionKeyManagerModuleConfig, - ModuleVersion, - CreateSessionDataParams, - StorageType, - ModuleInfo -} from './utils/Types' -import NodeClient from '@biconomy/node-client' -import INodeClient from '@biconomy/node-client' -import { - SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, - DEFAULT_SESSION_KEY_MANAGER_MODULE -} from './utils/Constants' -import { generateRandomHex } from './utils/Uid' -import { BaseValidationModule } from './BaseValidationModule' -import { SessionLocalStorage } from './session-storage/SessionLocalStorage' -import { - ISessionStorage, - SessionLeafNode, - SessionSearchParam, - SessionStatus -} from './interfaces/ISessionStorage' +import { Signer, ethers } from "ethers"; +import MerkleTree from "merkletreejs"; +import { NODE_CLIENT_URL, Logger } from "@biconomy/common"; +import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from "ethers/lib/utils"; +import { keccak256 } from "ethereumjs-util"; +import { SessionKeyManagerModuleConfig, ModuleVersion, CreateSessionDataParams, StorageType, ModuleInfo } from "./utils/Types"; +import NodeClient from "@biconomy/node-client"; +import INodeClient from "@biconomy/node-client"; +import { SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "./utils/Constants"; +import { generateRandomHex } from "./utils/Uid"; +import { BaseValidationModule } from "./BaseValidationModule"; +import { SessionLocalStorage } from "./session-storage/SessionLocalStorage"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; export class SessionKeyManagerModule extends BaseValidationModule { - version: ModuleVersion = 'V1_0_0' - moduleAddress!: string - nodeClient!: INodeClient - merkleTree!: MerkleTree - sessionStorageClient!: ISessionStorage + version: ModuleVersion = "V1_0_0"; + + moduleAddress!: string; + + nodeClient!: INodeClient; + + merkleTree!: MerkleTree; + + sessionStorageClient!: ISessionStorage; + readonly mockEcdsaSessionKeySig: string = - '0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b' + "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; /** * This constructor is private. Use the static create method to instantiate SessionKeyManagerModule @@ -41,7 +32,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns An instance of SessionKeyManagerModule */ private constructor(moduleConfig: SessionKeyManagerModuleConfig) { - super(moduleConfig) + super(moduleConfig); } /** @@ -49,51 +40,49 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @param moduleConfig The configuration for the module * @returns A Promise that resolves to an instance of SessionKeyManagerModule */ - public static async create( - moduleConfig: SessionKeyManagerModuleConfig - ): Promise { - const instance = new SessionKeyManagerModule(moduleConfig) + public static async create(moduleConfig: SessionKeyManagerModuleConfig): Promise { + const instance = new SessionKeyManagerModule(moduleConfig); if (moduleConfig.moduleAddress) { - instance.moduleAddress = moduleConfig.moduleAddress + instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] + const moduleAddr = SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`) + throw new Error(`Invalid version ${moduleConfig.version}`); } - instance.moduleAddress = moduleAddr - instance.version = moduleConfig.version as ModuleVersion + instance.moduleAddress = moduleAddr; + instance.version = moduleConfig.version as ModuleVersion; } else { - instance.moduleAddress = DEFAULT_SESSION_KEY_MANAGER_MODULE + instance.moduleAddress = DEFAULT_SESSION_KEY_MANAGER_MODULE; // Note: in this case Version remains the default one } instance.nodeClient = new NodeClient({ - txServiceUrl: moduleConfig.nodeClientUrl ?? NODE_CLIENT_URL - }) + txServiceUrl: moduleConfig.nodeClientUrl ?? NODE_CLIENT_URL, + }); if (!moduleConfig.storageType || moduleConfig.storageType === StorageType.LOCAL_STORAGE) { - instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress) + instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); } else { - throw new Error('Invalid storage type') + throw new Error("Invalid storage type"); } - const existingSessionData = await instance.sessionStorageClient.getAllSessionData() + const existingSessionData = await instance.sessionStorageClient.getAllSessionData(); const existingSessionDataLeafs = existingSessionData.map((sessionData) => { const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(sessionData.validUntil), 6), hexZeroPad(ethers.utils.hexlify(sessionData.validAfter), 6), hexZeroPad(sessionData.sessionValidationModule, 20), - sessionData.sessionKeyData - ]) - return ethers.utils.keccak256(leafDataHex) - }) + sessionData.sessionKeyData, + ]); + return ethers.utils.keccak256(leafDataHex); + }); instance.merkleTree = new MerkleTree(existingSessionDataLeafs, keccak256, { sortPairs: true, - hashLeaves: false - }) + hashLeaves: false, + }); - return instance + return instance; } /** @@ -102,50 +91,46 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns The session data */ createSessionData = async (leavesData: CreateSessionDataParams[]): Promise => { - const sessionKeyManagerModuleABI = 'function setMerkleRoot(bytes32 _merkleRoot)' - const sessionKeyManagerModuleInterface = new ethers.utils.Interface([ - sessionKeyManagerModuleABI - ]) - const leavesToAdd: Buffer[] = [] + const sessionKeyManagerModuleABI = "function setMerkleRoot(bytes32 _merkleRoot)"; + const sessionKeyManagerModuleInterface = new ethers.utils.Interface([sessionKeyManagerModuleABI]); + const leavesToAdd: Buffer[] = []; for (const leafData of leavesData) { const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(leafData.validUntil), 6), hexZeroPad(ethers.utils.hexlify(leafData.validAfter), 6), hexZeroPad(leafData.sessionValidationModule, 20), - leafData.sessionKeyData - ]) + leafData.sessionKeyData, + ]); - leavesToAdd.push(ethers.utils.keccak256(leafDataHex) as unknown as Buffer) + leavesToAdd.push(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); const sessionLeafNode = { ...leafData, sessionID: generateRandomHex(), - status: 'PENDING' as SessionStatus - } + status: "PENDING" as SessionStatus, + }; - await this.sessionStorageClient.addSessionData(sessionLeafNode) + await this.sessionStorageClient.addSessionData(sessionLeafNode); } - this.merkleTree.addLeaves(leavesToAdd) + this.merkleTree.addLeaves(leavesToAdd); - const leaves = this.merkleTree.getLeaves() + const leaves = this.merkleTree.getLeaves(); const newMerkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true, - hashLeaves: false - }) + hashLeaves: false, + }); - this.merkleTree = newMerkleTree + this.merkleTree = newMerkleTree; - const setMerkleRootData = sessionKeyManagerModuleInterface.encodeFunctionData('setMerkleRoot', [ - this.merkleTree.getHexRoot() - ]) + const setMerkleRootData = sessionKeyManagerModuleInterface.encodeFunctionData("setMerkleRoot", [this.merkleTree.getHexRoot()]); - await this.sessionStorageClient.setMerkleRoot(this.merkleTree.getHexRoot()) + await this.sessionStorageClient.setMerkleRoot(this.merkleTree.getHexRoot()); // TODO: create a signer if sessionPubKey if not given - return setMerkleRootData - } + return setMerkleRootData; + }; /** * This method is used to sign the user operation using the session signer @@ -155,61 +140,61 @@ export class SessionKeyManagerModule extends BaseValidationModule { */ async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { if (!(params && params.sessionSigner)) { - throw new Error('Session signer is not provided.') + throw new Error("Session signer is not provided."); } - const sessionSigner = params.sessionSigner + const sessionSigner = params.sessionSigner; // Use the sessionSigner to sign the user operation - const signature = await sessionSigner.signMessage(arrayify(userOpHash)) + const signature = await sessionSigner.signMessage(arrayify(userOpHash)); - const sessionSignerData = await this.getLeafInfo(params) + const sessionSignerData = await this.getLeafInfo(params); const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), hexZeroPad(sessionSignerData.sessionValidationModule, 20), - sessionSignerData.sessionKeyData - ]) + sessionSignerData.sessionKeyData, + ]); // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) let paddedSignature = defaultAbiCoder.encode( - ['uint48', 'uint48', 'address', 'bytes', 'bytes32[]', 'bytes'], + ["uint48", "uint48", "address", "bytes", "bytes32[]", "bytes"], [ sessionSignerData.validUntil, sessionSignerData.validAfter, sessionSignerData.sessionValidationModule, sessionSignerData.sessionKeyData, this.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer), - signature - ] - ) + signature, + ], + ); if (params?.additionalSessionData) { - paddedSignature += params.additionalSessionData + paddedSignature += params.additionalSessionData; } - return paddedSignature + return paddedSignature; } private async getLeafInfo(params: ModuleInfo): Promise { if (!(params && params.sessionSigner)) { - throw new Error('Session signer is not provided.') + throw new Error("Session signer is not provided."); } - const sessionSigner = params.sessionSigner - let sessionSignerData + const sessionSigner = params.sessionSigner; + let sessionSignerData; if (params?.sessionID) { sessionSignerData = await this.sessionStorageClient.getSessionData({ - sessionID: params.sessionID - }) + sessionID: params.sessionID, + }); } else if (params?.sessionValidationModule) { sessionSignerData = await this.sessionStorageClient.getSessionData({ sessionValidationModule: params.sessionValidationModule, - sessionPublicKey: await sessionSigner.getAddress() - }) + sessionPublicKey: await sessionSigner.getAddress(), + }); } else { - throw new Error('sessionID or sessionValidationModule should be provided.') + throw new Error("sessionID or sessionValidationModule should be provided."); } - return sessionSignerData + return sessionSignerData; } /** @@ -219,7 +204,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns */ async updateSessionStatus(param: SessionSearchParam, status: SessionStatus) { - this.sessionStorageClient.updateSessionStatus(param, status) + this.sessionStorageClient.updateSessionStatus(param, status); } /** @@ -227,21 +212,21 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns */ async clearPendingSessions() { - this.sessionStorageClient.clearPendingSessions() + this.sessionStorageClient.clearPendingSessions(); } /** * @returns SessionKeyManagerModule address */ getAddress(): string { - return this.moduleAddress + return this.moduleAddress; } /** * @remarks This is the version of the module contract */ async getSigner(): Promise { - throw new Error('Method not implemented.') + throw new Error("Method not implemented."); } /** @@ -251,55 +236,52 @@ export class SessionKeyManagerModule extends BaseValidationModule { // Review // instead of search params it could be actual leaf info retrieved beforehand async getDummySignature(params?: ModuleInfo): Promise { - Logger.log('moduleInfo ', params) + Logger.log("moduleInfo ", params); if (!params) { - throw new Error('Session signer is not provided.') + throw new Error("Session signer is not provided."); } - const sessionSignerData = await this.getLeafInfo(params) + const sessionSignerData = await this.getLeafInfo(params); const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), hexZeroPad(sessionSignerData.sessionValidationModule, 20), - sessionSignerData.sessionKeyData - ]) + sessionSignerData.sessionKeyData, + ]); // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) let paddedSignature = defaultAbiCoder.encode( - ['uint48', 'uint48', 'address', 'bytes', 'bytes32[]', 'bytes'], + ["uint48", "uint48", "address", "bytes", "bytes32[]", "bytes"], [ sessionSignerData.validUntil, sessionSignerData.validAfter, sessionSignerData.sessionValidationModule, sessionSignerData.sessionKeyData, this.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer), - this.mockEcdsaSessionKeySig - ] - ) + this.mockEcdsaSessionKeySig, + ], + ); if (params?.additionalSessionData) { - paddedSignature += params.additionalSessionData + paddedSignature += params.additionalSessionData; } - const dummySig = ethers.utils.defaultAbiCoder.encode( - ['bytes', 'address'], - [paddedSignature, this.getAddress()] - ) + const dummySig = ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [paddedSignature, this.getAddress()]); - return dummySig + return dummySig; } /** * @remarks Other modules may need additional attributes to build init data */ async getInitData(): Promise { - throw new Error('Method not implemented.') + throw new Error("Method not implemented."); } /** * @remarks This Module dont have knowledge of signer. So, this method is not implemented */ async signMessage(message: Bytes | string): Promise { - Logger.log('message', message) - throw new Error('Method not implemented.') + Logger.log("message", message); + throw new Error("Method not implemented."); } } diff --git a/packages/modules/src/index.ts b/packages/modules/src/index.ts index a6eba07bd..f51916377 100644 --- a/packages/modules/src/index.ts +++ b/packages/modules/src/index.ts @@ -1,11 +1,11 @@ -export * from './utils/Types' -export * from './utils/Constants' -export * from './interfaces/IValidationModule' -export * from './interfaces/ISessionValidationModule' -export * from './BaseValidationModule' -export * from './ECDSAOwnershipValidationModule' -export * from './MultichainValidationModule' -export * from './SessionKeyManagerModule' -export * from './BatchedSessionRouterModule' -export * from './session-validation-modules/ERC20SessionValidationModule' +export * from "./utils/Types"; +export * from "./utils/Constants"; +export * from "./interfaces/IValidationModule"; +export * from "./interfaces/ISessionValidationModule"; +export * from "./BaseValidationModule"; +export * from "./ECDSAOwnershipValidationModule"; +export * from "./MultichainValidationModule"; +export * from "./SessionKeyManagerModule"; +export * from "./BatchedSessionRouterModule"; +export * from "./session-validation-modules/ERC20SessionValidationModule"; // export * from './PasskeyValidationModule' diff --git a/packages/modules/src/interfaces/ISessionStorage.ts b/packages/modules/src/interfaces/ISessionStorage.ts index 756b25073..69eb31225 100644 --- a/packages/modules/src/interfaces/ISessionStorage.ts +++ b/packages/modules/src/interfaces/ISessionStorage.ts @@ -1,83 +1,83 @@ -import { Wallet, Signer } from 'ethers' +import { Wallet, Signer } from "ethers"; -export type SessionStatus = 'PENDING' | 'ACTIVE' | 'INACTIVE' | 'EXPIRED' +export type SessionStatus = "PENDING" | "ACTIVE" | "INACTIVE" | "EXPIRED"; export type SessionLeafNode = { - validUntil: number - validAfter: number - sessionValidationModule: string - sessionKeyData: string - sessionPublicKey: string - sessionID?: string - status: SessionStatus -} + validUntil: number; + validAfter: number; + sessionValidationModule: string; + sessionKeyData: string; + sessionPublicKey: string; + sessionID?: string; + status: SessionStatus; +}; export type SessionSearchParam = { - sessionID?: string - sessionPublicKey?: string - sessionValidationModule?: string - status?: SessionStatus -} + sessionID?: string; + sessionPublicKey?: string; + sessionValidationModule?: string; + status?: SessionStatus; +}; export interface ISessionStorage { /** * Adds a session leaf node to the session storage * @param leaf SessionLeafNode to be added to the session storage */ - addSessionData(leaf: SessionLeafNode): Promise + addSessionData(leaf: SessionLeafNode): Promise; /** * Fetch a session leaf node from the session storage * @param param SessionSearchParam to be used to fetch the session leaf node */ - getSessionData(param: SessionSearchParam): Promise + getSessionData(param: SessionSearchParam): Promise; /** * Updates the session status of a session leaf node in the session storage * @param param SessionSearchParam to be used to fetch the session leaf node * @param status New session status to be updated */ - updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise + updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise; /** * Clears all the pending sessions from the session storage */ - clearPendingSessions(): Promise + clearPendingSessions(): Promise; /** * If a signer object is passed, it will be added to the session storage * If no signer object is passed, it'll create a random signer and add it to the session storage * @param signer Optional signer to be added to the session storage */ - addSigner(signer?: Wallet): Promise + addSigner(signer?: Wallet): Promise; /** * Fetch a signer from the session storage * @param signerPublicKey Public key of the signer to be fetched */ - getSignerByKey(signerPublicKey: string): Promise + getSignerByKey(signerPublicKey: string): Promise; /** * Fetch a signer from the session storage based on the session search param * @param param SessionSearchParam to be used to fetch the signer */ - getSignerBySession(param: SessionSearchParam): Promise + getSignerBySession(param: SessionSearchParam): Promise; /** * Fetch all the session leaf nodes from the session storage based on the session search param. * If no param is passed, it'll fetch all the session leaf nodes from the session storage * @param param SessionSearchParam to be used to fetch the session leaf nodes */ - getAllSessionData(param?: SessionSearchParam): Promise + getAllSessionData(param?: SessionSearchParam): Promise; /** * Fetch merkle root from the session storage */ - getMerkleRoot(): Promise + getMerkleRoot(): Promise; /** * Set merkle root in the session storage * @param merkleRoot Merkle root to be set in the session storage */ - setMerkleRoot(merkleRoot: string): Promise + setMerkleRoot(merkleRoot: string): Promise; } diff --git a/packages/modules/src/interfaces/ISessionValidationModule.ts b/packages/modules/src/interfaces/ISessionValidationModule.ts index e38cdb229..0aa488013 100644 --- a/packages/modules/src/interfaces/ISessionValidationModule.ts +++ b/packages/modules/src/interfaces/ISessionValidationModule.ts @@ -9,6 +9,6 @@ * @author Sachin Tomar */ export interface ISessionValidationModule { - getSessionKeyData(sessionData: T): Promise - getAddress(): string + getSessionKeyData(sessionData: T): Promise; + getAddress(): string; } diff --git a/packages/modules/src/interfaces/IValidationModule.ts b/packages/modules/src/interfaces/IValidationModule.ts index 1192ce8cd..cc94e4187 100644 --- a/packages/modules/src/interfaces/IValidationModule.ts +++ b/packages/modules/src/interfaces/IValidationModule.ts @@ -1,11 +1,11 @@ -import { Signer } from 'ethers' -import { Bytes } from 'ethers/lib/utils' +import { Signer } from "ethers"; +import { Bytes } from "ethers/lib/utils"; export interface IValidationModule { - getAddress(): string - getInitData(): Promise - getSigner(): Promise - signUserOpHash(userOpHash: string): Promise - signMessage(message: Bytes | string): Promise - getDummySignature(): Promise + getAddress(): string; + getInitData(): Promise; + getSigner(): Promise; + signUserOpHash(userOpHash: string): Promise; + signMessage(message: Bytes | string): Promise; + getDummySignature(): Promise; } diff --git a/packages/modules/src/session-storage/SessionLocalStorage.ts b/packages/modules/src/session-storage/SessionLocalStorage.ts index dfd1438c7..a81fdeea0 100644 --- a/packages/modules/src/session-storage/SessionLocalStorage.ts +++ b/packages/modules/src/session-storage/SessionLocalStorage.ts @@ -1,155 +1,148 @@ -import { Wallet, Signer } from 'ethers' -import { - ISessionStorage, - SessionLeafNode, - SessionSearchParam, - SessionStatus -} from 'interfaces/ISessionStorage' +import { Wallet, Signer } from "ethers"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "interfaces/ISessionStorage"; export class SessionLocalStorage implements ISessionStorage { - private smartAccountAddress: string + private smartAccountAddress: string; constructor(smartAccountAddress: string) { - this.smartAccountAddress = smartAccountAddress.toLowerCase() + this.smartAccountAddress = smartAccountAddress.toLowerCase(); } private validateSearchParam(param: SessionSearchParam): void { if (param.sessionID) { - return + return; } else if (!param.sessionID && param.sessionPublicKey && param.sessionValidationModule) { - return + return; } else { - throw new Error( - 'Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address.' - ) + throw new Error("Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address."); } } private getSessionStore(): any { - const data = localStorage.getItem(this.getStorageKey('sessions')) - return data ? JSON.parse(data) : { merkleRoot: '', leafNodes: [] } + const data = localStorage.getItem(this.getStorageKey("sessions")); + return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] }; } private getSignerStore(): any { - const data = localStorage.getItem(this.getStorageKey('signers')) - return data ? JSON.parse(data) : {} + const data = localStorage.getItem(this.getStorageKey("signers")); + return data ? JSON.parse(data) : {}; } - private getStorageKey(type: 'sessions' | 'signers'): string { - return `${this.smartAccountAddress}_${type}` + private getStorageKey(type: "sessions" | "signers"): string { + return `${this.smartAccountAddress}_${type}`; } private toLowercaseAddress(address: string): string { - return address.toLowerCase() + return address.toLowerCase(); } async addSessionData(leaf: SessionLeafNode): Promise { - const data = this.getSessionStore() - leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule) - leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey) - data.leafNodes.push(leaf) - localStorage.setItem(this.getStorageKey('sessions'), JSON.stringify(data)) + const data = this.getSessionStore(); + leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule); + leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey); + data.leafNodes.push(leaf); + localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } async getSessionData(param: SessionSearchParam): Promise { - this.validateSearchParam(param) + this.validateSearchParam(param); - const sessions = this.getSessionStore().leafNodes + const sessions = this.getSessionStore().leafNodes; const session = sessions.find((s: SessionLeafNode) => { if (param.sessionID) { - return s.sessionID === param.sessionID && (!param.status || s.status === param.status) + return s.sessionID === param.sessionID && (!param.status || s.status === param.status); } else if (param.sessionPublicKey && param.sessionValidationModule) { return ( s.sessionPublicKey === this.toLowercaseAddress(param.sessionPublicKey) && s.sessionValidationModule === this.toLowercaseAddress(param.sessionValidationModule) && (!param.status || s.status === param.status) - ) + ); } else { - return undefined + return undefined; } - }) + }); if (!session) { - throw new Error('Session not found.') + throw new Error("Session not found."); } - return session + return session; } async updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise { - this.validateSearchParam(param) + this.validateSearchParam(param); - const data = this.getSessionStore() + const data = this.getSessionStore(); const session = data.leafNodes.find((s: SessionLeafNode) => { if (param.sessionID) { - return s.sessionID === param.sessionID + return s.sessionID === param.sessionID; } else if (param.sessionPublicKey && param.sessionValidationModule) { return ( s.sessionPublicKey === this.toLowercaseAddress(param.sessionPublicKey) && s.sessionValidationModule === this.toLowercaseAddress(param.sessionValidationModule) - ) + ); } else { - return undefined + return undefined; } - }) + }); if (!session) { - throw new Error('Session not found.') + throw new Error("Session not found."); } - session.status = status - localStorage.setItem(this.getStorageKey('sessions'), JSON.stringify(data)) + session.status = status; + localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } async clearPendingSessions(): Promise { - const data = this.getSessionStore() - data.leafNodes = data.leafNodes.filter((s: SessionLeafNode) => s.status !== 'PENDING') - localStorage.setItem(this.getStorageKey('sessions'), JSON.stringify(data)) + const data = this.getSessionStore(); + data.leafNodes = data.leafNodes.filter((s: SessionLeafNode) => s.status !== "PENDING"); + localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } async addSigner(signer?: Wallet): Promise { - const signers = this.getSignerStore() + const signers = this.getSignerStore(); if (!signer) { - signer = Wallet.createRandom() + signer = Wallet.createRandom(); } signers[this.toLowercaseAddress(signer.publicKey)] = { privateKey: signer.privateKey, - publicKey: signer.publicKey - } - localStorage.setItem(this.getStorageKey('signers'), JSON.stringify(signers)) - return signer + publicKey: signer.publicKey, + }; + localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)); + return signer; } async getSignerByKey(sessionPublicKey: string): Promise { - const signers = this.getSignerStore() - const signerData = signers[this.toLowercaseAddress(sessionPublicKey)] + const signers = this.getSignerStore(); + const signerData = signers[this.toLowercaseAddress(sessionPublicKey)]; if (!signerData) { - throw new Error('Signer not found.') + throw new Error("Signer not found."); } - const signer = new Wallet(signerData.privateKey) - return signer + const signer = new Wallet(signerData.privateKey); + return signer; } async getSignerBySession(param: SessionSearchParam): Promise { - const session = await this.getSessionData(param) - return this.getSignerByKey(session.sessionPublicKey) + const session = await this.getSessionData(param); + return this.getSignerByKey(session.sessionPublicKey); } async getAllSessionData(param?: SessionSearchParam): Promise { - const sessions = this.getSessionStore().leafNodes + const sessions = this.getSessionStore().leafNodes; if (!param || !param.status) { - return sessions + return sessions; } - return sessions.filter((s: SessionLeafNode) => s.status === param.status) + return sessions.filter((s: SessionLeafNode) => s.status === param.status); } async getMerkleRoot(): Promise { - return this.getSessionStore().merkleRoot + return this.getSessionStore().merkleRoot; } setMerkleRoot(merkleRoot: string): Promise { - const data = this.getSessionStore() - data.merkleRoot = merkleRoot - localStorage.setItem(this.getStorageKey('sessions'), JSON.stringify(data)) - return Promise.resolve() + const data = this.getSessionStore(); + data.merkleRoot = merkleRoot; + localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); + return Promise.resolve(); } } diff --git a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts index 8972bea11..eee1c6a1e 100644 --- a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts +++ b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts @@ -1,6 +1,6 @@ -import { defaultAbiCoder } from 'ethers/lib/utils' -import { ISessionValidationModule } from 'interfaces/ISessionValidationModule' -import { ERC20SessionKeyData, SessionValidationModuleConfig } from 'utils/Types' +import { defaultAbiCoder } from "ethers/lib/utils"; +import { ISessionValidationModule } from "interfaces/ISessionValidationModule"; +import { ERC20SessionKeyData, SessionValidationModuleConfig } from "utils/Types"; /** * Session validation module for ERC20 token transfers. @@ -9,8 +9,9 @@ import { ERC20SessionKeyData, SessionValidationModuleConfig } from 'utils/Types' * @author Sachin Tomar */ export class ERC20SessionValidationModule implements ISessionValidationModule { - moduleAddress!: string - version = 'V1_0_0' + moduleAddress!: string; + + version = "V1_0_0"; /** * This constructor is private. Use the static create method to instantiate ERC20SessionValidationModule @@ -19,9 +20,9 @@ export class ERC20SessionValidationModule implements ISessionValidationModule { - const module = new ERC20SessionValidationModule(moduleConfig) - return module + public static async create(moduleConfig: SessionValidationModuleConfig): Promise { + const module = new ERC20SessionValidationModule(moduleConfig); + return module; } async getSessionKeyData(sessionData: ERC20SessionKeyData): Promise { - this._validateSessionKeyData(sessionData) + this._validateSessionKeyData(sessionData); const sessionKeyData = defaultAbiCoder.encode( - ['address', 'address', 'address', 'uint256'], - [sessionData.sessionKey, sessionData.token, sessionData.recipient, sessionData.maxAmount] - ) - return sessionKeyData + ["address", "address", "address", "uint256"], + [sessionData.sessionKey, sessionData.token, sessionData.recipient, sessionData.maxAmount], + ); + return sessionKeyData; } private _validateSessionKeyData(sessionData: ERC20SessionKeyData): void { if (!sessionData) { - throw new Error('Session data is required') + throw new Error("Session data is required"); } if (!sessionData.sessionKey) { - throw new Error('Session key is required in sessionData') + throw new Error("Session key is required in sessionData"); } if (!sessionData.token) { - throw new Error('Token address is required in sessionData') + throw new Error("Token address is required in sessionData"); } if (!sessionData.recipient) { - throw new Error('Recipient address is required in sessionData') + throw new Error("Recipient address is required in sessionData"); } if (!sessionData.maxAmount) { - throw new Error('MaxAmount is required in sessionData') + throw new Error("MaxAmount is required in sessionData"); } } getAddress(): string { - return this.moduleAddress + return this.moduleAddress; } } diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts index ebd8a3108..dcab3cc0a 100644 --- a/packages/modules/src/utils/Constants.ts +++ b/packages/modules/src/utils/Constants.ts @@ -1,51 +1,51 @@ -import { ModuleVersion } from './Types' +import { ModuleVersion } from "./Types"; -export const DEFAULT_MODULE_VERSION: ModuleVersion = 'V1_0_0' +export const DEFAULT_MODULE_VERSION: ModuleVersion = "V1_0_0"; -export const DEFAULT_ENTRYPOINT_ADDRESS = '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789' +export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; export const ENTRYPOINT_ADDRESSES = { - '0x27a4db290b89ae3373ce4313cbeae72112ae7da9': 'V0_0_5', - '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789': 'V0_0_6' -} + "0x27a4db290b89ae3373ce4313cbeae72112ae7da9": "V0_0_5", + "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789": "V0_0_6", +}; export const ENTRYPOINT_ADDRESSES_BY_VERSION = { - V0_0_5: '0x27a4db290b89ae3373ce4313cbeae72112ae7da9', - V0_0_6: '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789' -} + V0_0_5: "0x27a4db290b89ae3373ce4313cbeae72112ae7da9", + V0_0_6: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", +}; // Review: If we should append these defaults with ADDRESS suffix -export const DEFAULT_ECDSA_OWNERSHIP_MODULE = '0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e' +export const DEFAULT_ECDSA_OWNERSHIP_MODULE = "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e"; export const ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: '0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e' -} + V1_0_0: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e", +}; -export const DEFAULT_SESSION_KEY_MANAGER_MODULE = '0x000002FbFfedd9B33F4E7156F2DE8D48945E7489' +export const DEFAULT_SESSION_KEY_MANAGER_MODULE = "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489"; export const SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: '0x000000456b395c4e107e0302553B90D1eF4a32e9', - V1_0_1: '0x000002FbFfedd9B33F4E7156F2DE8D48945E7489' -} + V1_0_0: "0x000000456b395c4e107e0302553B90D1eF4a32e9", + V1_0_1: "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489", +}; -export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = '0x000008dA71757C0E1D83CE56c823e25Aa49bC058' +export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = "0x000008dA71757C0E1D83CE56c823e25Aa49bC058"; export const BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: '0x000008dA71757C0E1D83CE56c823e25Aa49bC058' -} + V1_0_0: "0x000008dA71757C0E1D83CE56c823e25Aa49bC058", +}; -export const DEFAULT_MULTICHAIN_MODULE = '0x000000824dc138db84FD9109fc154bdad332Aa8E' +export const DEFAULT_MULTICHAIN_MODULE = "0x000000824dc138db84FD9109fc154bdad332Aa8E"; export const MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: '0x000000824dc138db84FD9109fc154bdad332Aa8E' -} + V1_0_0: "0x000000824dc138db84FD9109fc154bdad332Aa8E", +}; // similarly others here or in module / signer classes // Mapping / Reverse mapping of version -> module address can be kept here export const ERC20_ABI = [ - 'function transfer(address to, uint256 value) external returns (bool)', - 'function transferFrom(address from, address to, uint256 value) external returns (bool)', - 'function approve(address spender, uint256 value) external returns (bool)', - 'function allowance(address owner, address spender) external view returns (uint256)', - 'function balanceOf(address owner) external view returns (uint256)' -] + "function transfer(address to, uint256 value) external returns (bool)", + "function transferFrom(address from, address to, uint256 value) external returns (bool)", + "function approve(address spender, uint256 value) external returns (bool)", + "function allowance(address owner, address spender) external view returns (uint256)", + "function balanceOf(address owner) external view returns (uint256)", +]; diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 2fc578355..0637fdd8a 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,40 +1,40 @@ -import { ChainId, UserOperation } from '@biconomy/core-types' -import { Signer } from 'ethers' -import { SessionKeyManagerModule } from '../SessionKeyManagerModule' +import { ChainId, UserOperation } from "@biconomy/core-types"; +import { Signer } from "ethers"; +import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; -export type ModuleVersion = 'V1_0_0' // | 'V1_0_1' +export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' export interface BaseValidationModuleConfig { - entryPointAddress?: string + entryPointAddress?: string; } export interface ECDSAOwnershipValidationModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string - version?: ModuleVersion - signer: Signer + moduleAddress?: string; + version?: ModuleVersion; + signer: Signer; } export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string - version?: ModuleVersion + moduleAddress?: string; + version?: ModuleVersion; // Review // sessionSigner?: Signer // sessionPubKey?: string - nodeClientUrl?: string - smartAccountAddress: string - storageType?: StorageType + nodeClientUrl?: string; + smartAccountAddress: string; + storageType?: StorageType; } export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string - version?: ModuleVersion + moduleAddress?: string; + version?: ModuleVersion; - sessionKeyManagerModule?: SessionKeyManagerModule // could be BaseValidationModule + sessionKeyManagerModule?: SessionKeyManagerModule; // could be BaseValidationModule - sessionManagerModuleAddress?: string - nodeClientUrl?: string - smartAccountAddress: string - storageType?: StorageType + sessionManagerModuleAddress?: string; + nodeClientUrl?: string; + smartAccountAddress: string; + storageType?: StorageType; // sessionSigner?: Signer // sessionPubKey?: string @@ -42,57 +42,57 @@ export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleCo } export enum StorageType { - LOCAL_STORAGE + LOCAL_STORAGE, } export type SessionParams = { - sessionID?: string - sessionSigner: Signer - sessionValidationModule?: string - additionalSessionData?: string -} + sessionID?: string; + sessionSigner: Signer; + sessionValidationModule?: string; + additionalSessionData?: string; +}; export type ModuleInfo = { // Could be a full object of below params and that way it can be an array too! // sessionParams?: SessionParams[] // where SessionParams is below four - sessionID?: string - sessionSigner?: Signer - sessionValidationModule?: string - additionalSessionData?: string - batchSessionParams?: SessionParams[] -} + sessionID?: string; + sessionSigner?: Signer; + sessionValidationModule?: string; + additionalSessionData?: string; + batchSessionParams?: SessionParams[]; +}; export interface CreateSessionDataParams { - validUntil: number - validAfter: number - sessionValidationModule: string - sessionPublicKey: string - sessionKeyData: string + validUntil: number; + validAfter: number; + sessionValidationModule: string; + sessionPublicKey: string; + sessionKeyData: string; } export interface MultiChainValidationModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string - version?: ModuleVersion - signer: Signer + moduleAddress?: string; + version?: ModuleVersion; + signer: Signer; } export type MultiChainUserOpDto = { - validUntil?: number - validAfter?: number - chainId: ChainId - userOp: Partial -} + validUntil?: number; + validAfter?: number; + chainId: ChainId; + userOp: Partial; +}; export interface BaseSessionKeyData { - sessionKey: string + sessionKey: string; } export interface ERC20SessionKeyData extends BaseSessionKeyData { - token: string - recipient: string - maxAmount: string + token: string; + recipient: string; + maxAmount: string; } export interface SessionValidationModuleConfig { - moduleAddress: string + moduleAddress: string; } diff --git a/packages/modules/src/utils/Uid.ts b/packages/modules/src/utils/Uid.ts index 2b1a3ac39..db4ff03ab 100644 --- a/packages/modules/src/utils/Uid.ts +++ b/packages/modules/src/utils/Uid.ts @@ -1,12 +1,12 @@ // small uid generator, hex: 0-9, a-f (10 chars) export const generateRandomHex = () => { - const hexChars = '0123456789abcdef' - let result = '' + const hexChars = "0123456789abcdef"; + let result = ""; for (let i = 0; i < 10; i++) { - const randomIndex = Math.floor(Math.random() * hexChars.length) - result += hexChars[randomIndex] + const randomIndex = Math.floor(Math.random() * hexChars.length); + result += hexChars[randomIndex]; } - return result -} + return result; +}; From f87cca042c950e325db29ac708dd7c8157b35409 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 13 Sep 2023 12:52:44 +0400 Subject: [PATCH 0825/1247] lint fixes --- package.json | 2 +- packages/account/src/BaseSmartAccount.ts | 446 ++++++++---------- packages/account/src/BiconomySmartAccount.ts | 6 +- packages/account/src/SmartAccount.ts | 39 +- packages/account/src/index.ts | 16 +- .../src/interfaces/IBaseSmartAccount.ts | 28 +- .../account/src/interfaces/ISmartAccount.ts | 8 +- packages/account/src/utils/Constants.ts | 48 +- packages/account/src/utils/Preverificaiton.ts | 12 +- packages/account/src/utils/Types.ts | 110 ++--- packages/common/src/ContractsInstances.ts | 54 +-- packages/modules/src/BaseValidationModule.ts | 30 +- .../modules/src/BatchedSessionRouterModule.ts | 224 +++++---- .../src/ECDSAOwnershipValidationModule.ts | 67 ++- .../modules/src/MultichainValidationModule.ts | 132 +++--- .../modules/src/SessionKeyManagerModule.ts | 224 ++++----- packages/modules/src/index.ts | 20 +- .../modules/src/interfaces/ISessionStorage.ts | 50 +- .../interfaces/ISessionValidationModule.ts | 4 +- .../src/interfaces/IValidationModule.ts | 16 +- .../session-storage/SessionLocalStorage.ts | 127 +++-- .../ERC20SessionValidationModule.ts | 45 +- packages/modules/src/utils/Constants.ts | 56 +-- packages/modules/src/utils/Types.ts | 100 ++-- packages/modules/src/utils/Uid.ts | 12 +- 25 files changed, 894 insertions(+), 982 deletions(-) diff --git a/package.json b/package.json index 80c19155a..6b6de2028 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ }, "devDependencies": { "@types/jest": "^29.5.4", - "@typescript-eslint/eslint-plugin": "^6.6.0", + "@typescript-eslint/eslint-plugin": "^6.7.0", "@typescript-eslint/parser": "^6.6.0", "eslint": "^8.48.0", "eslint-config-airbnb-base": "15.0.0", diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 6da119390..1ba5900f2 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -1,105 +1,108 @@ -import { JsonRpcProvider, Provider } from '@ethersproject/providers' -import { BigNumber, BigNumberish, Signer, BytesLike, ethers, Bytes } from 'ethers' -import { IBaseSmartAccount } from './interfaces/IBaseSmartAccount' -import { defaultAbiCoder, keccak256, arrayify, Result } from 'ethers/lib/utils' -import { UserOperation, ChainId } from '@biconomy/core-types' -import { calcPreVerificationGas, DefaultGasLimits } from './utils/Preverificaiton' -import { NotPromise, packUserOp } from '@biconomy/common' -import { IBundler, UserOpResponse } from '@biconomy/bundler' -import { IPaymaster, PaymasterAndDataResponse } from '@biconomy/paymaster' -import { EntryPoint_v005, Logger } from '@biconomy/common' -import { BaseSmartAccountConfig, Overrides, TransactionDetailsForUserOp } from './utils/Types' -import { GasOverheads } from './utils/Preverificaiton' -import { EntryPoint, EntryPoint__factory } from '@account-abstraction/contracts' -import { DEFAULT_ENTRYPOINT_ADDRESS } from './utils/Constants' -import { RPC_PROVIDER_URLS } from '@biconomy/common' - -type UserOperationKey = keyof UserOperation +import { JsonRpcProvider, Provider } from "@ethersproject/providers"; +import { BigNumber, BigNumberish, Signer, BytesLike, ethers, Bytes } from "ethers"; +import { IBaseSmartAccount } from "./interfaces/IBaseSmartAccount"; +import { defaultAbiCoder, keccak256, arrayify, Result } from "ethers/lib/utils"; +import { UserOperation, ChainId } from "@biconomy/core-types"; +import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; +import { NotPromise, packUserOp } from "@biconomy/common"; +import { IBundler, UserOpResponse } from "@biconomy/bundler"; +import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; +import { EntryPoint_v005, Logger } from "@biconomy/common"; +import { BaseSmartAccountConfig, Overrides, TransactionDetailsForUserOp } from "./utils/Types"; +import { GasOverheads } from "./utils/Preverificaiton"; +import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; +import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; +import { RPC_PROVIDER_URLS } from "@biconomy/common"; + +type UserOperationKey = keyof UserOperation; export abstract class BaseSmartAccount implements IBaseSmartAccount { // Review : compare with BaseAccountAPI // private senderAddress!: string - private isDeployed = false - bundler?: IBundler // httpRpcClient - paymaster?: IPaymaster // paymasterAPI - overheads?: Partial - entryPointAddress!: string - accountAddress?: string + private isDeployed = false; + + bundler?: IBundler; // httpRpcClient + + paymaster?: IPaymaster; // paymasterAPI + + overheads?: Partial; + + entryPointAddress!: string; + + accountAddress?: string; + // owner?: Signer // owner is not mandatory for some account implementations - index: number - chainId?: ChainId - provider: Provider // Review + index: number; + + chainId?: ChainId; + + provider: Provider; // Review // entryPoint connected to "zero" address. allowed to make static calls (e.g. to getSenderAddress) - private readonly entryPoint!: EntryPoint + private readonly entryPoint!: EntryPoint; constructor(_smartAccountConfig: BaseSmartAccountConfig) { - this.index = _smartAccountConfig.index ?? 0 - this.overheads = _smartAccountConfig.overheads - this.entryPointAddress = _smartAccountConfig.entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS - this.accountAddress = _smartAccountConfig.accountAddress - this.paymaster = _smartAccountConfig.paymaster - this.bundler = _smartAccountConfig.bundler - this.chainId = _smartAccountConfig.chainId + this.index = _smartAccountConfig.index ?? 0; + this.overheads = _smartAccountConfig.overheads; + this.entryPointAddress = _smartAccountConfig.entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS; + this.accountAddress = _smartAccountConfig.accountAddress; + this.paymaster = _smartAccountConfig.paymaster; + this.bundler = _smartAccountConfig.bundler; + this.chainId = _smartAccountConfig.chainId; - this.provider = - _smartAccountConfig.provider ?? new JsonRpcProvider(RPC_PROVIDER_URLS[this.chainId]) + this.provider = _smartAccountConfig.provider ?? new JsonRpcProvider(RPC_PROVIDER_URLS[this.chainId]); // Create an instance of the EntryPoint contract using the provided address and provider (facory "connect" contract address) // Then, set the transaction's sender ("from" address) to the zero address (AddressZero). (contract "connect" from address) - this.entryPoint = EntryPoint__factory.connect(this.entryPointAddress, this.provider).connect( - ethers.constants.AddressZero - ) + this.entryPoint = EntryPoint__factory.connect(this.entryPointAddress, this.provider).connect(ethers.constants.AddressZero); } async init(): Promise { - if ((await this.provider.getCode(this.entryPointAddress)) === '0x') { - throw new Error( - `EntryPoint not deployed at ${this.entryPointAddress} at chainId ${this.chainId}}` - ) + if ((await this.provider.getCode(this.entryPointAddress)) === "0x") { + throw new Error(`EntryPoint not deployed at ${this.entryPointAddress} at chainId ${this.chainId}}`); } // Note: Review // on Init itself since we're already getting account address, mark isDeployed as well! - if ((await this.provider.getCode(await this.getAccountAddress())) === '0x') { - this.isDeployed = false + if ((await this.provider.getCode(await this.getAccountAddress())) === "0x") { + this.isDeployed = false; } else { - this.isDeployed = true + this.isDeployed = true; } - return this + return this; } setEntryPointAddress(entryPointAddress: string) { - this.entryPointAddress = entryPointAddress + this.entryPointAddress = entryPointAddress; } validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { if (!userOp[field]) { - throw new Error(`${field} is missing`) + throw new Error(`${field} is missing`); } } - return true + return true; } isProviderDefined(): boolean { - if (!this.provider) throw new Error('Provider is undefined') + if (!this.provider) throw new Error("Provider is undefined"); - return true + return true; } /** * return the value to put into the "initCode" field, if the contract is not yet deployed. * this value holds the "factory" address, followed by this account's information */ - abstract getAccountInitCode(): Promise + abstract getAccountInitCode(): Promise; /** * return current account's nonce. */ - abstract getNonce(): Promise + abstract getNonce(): Promise; /** * encode the call from entryPoint through our account to the target contract. @@ -107,7 +110,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @param value * @param data */ - abstract encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise + abstract encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise; /** * encode the batch call from entryPoint through our account to the target contract. @@ -115,24 +118,20 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @param value * @param data */ - abstract encodeExecuteBatch( - to: Array, - value: Array, - data: Array - ): Promise + abstract encodeExecuteBatch(to: Array, value: Array, data: Array): Promise; /** * sign a userOp's hash (userOpHash). * @param userOpHash */ - abstract signUserOpHash(userOpHash: string): Promise + abstract signUserOpHash(userOpHash: string): Promise; - abstract signMessage(message: Bytes | string): Promise + abstract signMessage(message: Bytes | string): Promise; /** * get dummy signature for userOp */ - abstract getDummySignature(): Promise + abstract getDummySignature(): Promise; /** * Sign the filled userOp. @@ -140,33 +139,33 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { */ async signUserOp(userOp: Partial): Promise { const requiredFields: UserOperationKey[] = [ - 'sender', - 'nonce', - 'initCode', - 'callData', - 'callGasLimit', - 'verificationGasLimit', - 'preVerificationGas', - 'maxFeePerGas', - 'maxPriorityFeePerGas', - 'paymasterAndData' - ] - this.validateUserOp(userOp, requiredFields) - const userOpHash = await this.getUserOpHash(userOp) - let signature = await this.signUserOpHash(userOpHash) + "sender", + "nonce", + "initCode", + "callData", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "paymasterAndData", + ]; + this.validateUserOp(userOp, requiredFields); + const userOpHash = await this.getUserOpHash(userOp); + let signature = await this.signUserOpHash(userOpHash); // Some signers do not return signed data with 0x prefix. make sure the v value is 27/28 instead of 0/1 // Review: Make sure if it's valid hexString otherwise append 0x. // Also split sig and add +27 to v is v is only 0/1. then stitch it back - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16) + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27 - signature = signature.slice(0, -2) + correctV.toString(16) + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); } - if (signature.slice(0, 2) !== '0x') { - signature = '0x' + signature + if (signature.slice(0, 2) !== "0x") { + signature = "0x" + signature; } // TODO @@ -181,8 +180,8 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { ) + '6492649264926492649264926492649264926492649264926492649264926492' // magic suffix }*/ - userOp.signature = signature // sig - return userOp as UserOperation + userOp.signature = signature; // sig + return userOp as UserOperation; } /** @@ -192,11 +191,11 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @returns Promise */ async sendUserOp(userOp: Partial): Promise { - Logger.log('userOp received in base account ', userOp) - delete userOp.signature - const userOperation = await this.signUserOp(userOp) - const bundlerResponse = await this.sendSignedUserOp(userOperation) - return bundlerResponse + Logger.log("userOp received in base account ", userOp); + delete userOp.signature; + const userOperation = await this.signUserOp(userOp); + const bundlerResponse = await this.sendSignedUserOp(userOperation); + return bundlerResponse; } /** @@ -207,136 +206,114 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { */ async sendSignedUserOp(userOp: UserOperation): Promise { const requiredFields: UserOperationKey[] = [ - 'sender', - 'nonce', - 'initCode', - 'callData', - 'callGasLimit', - 'verificationGasLimit', - 'preVerificationGas', - 'maxFeePerGas', - 'maxPriorityFeePerGas', - 'paymasterAndData', - 'signature' - ] - this.validateUserOp(userOp, requiredFields) - Logger.log('userOp validated') - if (!this.bundler) throw new Error('Bundler is not provided') - Logger.log('userOp being sent to the bundler', userOp) - const bundlerResponse = await this.bundler.sendUserOp(userOp) - return bundlerResponse + "sender", + "nonce", + "initCode", + "callData", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "paymasterAndData", + "signature", + ]; + this.validateUserOp(userOp, requiredFields); + Logger.log("userOp validated"); + if (!this.bundler) throw new Error("Bundler is not provided"); + Logger.log("userOp being sent to the bundler", userOp); + const bundlerResponse = await this.bundler.sendUserOp(userOp); + return bundlerResponse; } async calculateUserOpGasValues(userOp: Partial): Promise> { - if (!this.provider) throw new Error('Provider is not present for making rpc calls') - const feeData = await this.provider.getFeeData() - userOp.maxFeePerGas = - userOp.maxFeePerGas ?? - feeData.maxFeePerGas ?? - feeData.gasPrice ?? - (await this.provider.getGasPrice()) + if (!this.provider) throw new Error("Provider is not present for making rpc calls"); + const feeData = await this.provider.getFeeData(); + userOp.maxFeePerGas = userOp.maxFeePerGas ?? feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); userOp.maxPriorityFeePerGas = - userOp.maxPriorityFeePerGas ?? - feeData.maxPriorityFeePerGas ?? - feeData.gasPrice ?? - (await this.provider.getGasPrice()) - if (userOp.initCode) - userOp.verificationGasLimit = - userOp.verificationGasLimit ?? (await this.getVerificationGasLimit(userOp.initCode)) + userOp.maxPriorityFeePerGas ?? feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); + if (userOp.initCode) userOp.verificationGasLimit = userOp.verificationGasLimit ?? (await this.getVerificationGasLimit(userOp.initCode)); userOp.callGasLimit = userOp.callGasLimit ?? (await this.provider.estimateGas({ from: this.entryPointAddress, to: userOp.sender, - data: userOp.callData - })) - userOp.preVerificationGas = - userOp.preVerificationGas ?? (await this.getPreVerificationGas(userOp)) - return userOp + data: userOp.callData, + })); + userOp.preVerificationGas = userOp.preVerificationGas ?? (await this.getPreVerificationGas(userOp)); + return userOp; } async estimateUserOpGas( userOp: Partial, overrides?: Overrides, - skipBundlerGasEstimation?: boolean + skipBundlerGasEstimation?: boolean, ): Promise> { - const requiredFields: UserOperationKey[] = ['sender', 'nonce', 'initCode', 'callData'] - this.validateUserOp(userOp, requiredFields) + const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; + this.validateUserOp(userOp, requiredFields); - let finalUserOp = userOp - const skipBundlerCall = skipBundlerGasEstimation ?? false + let finalUserOp = userOp; + const skipBundlerCall = skipBundlerGasEstimation ?? false; // Override gas values in userOp if provided in overrides params if (overrides) { - userOp = { ...userOp, ...overrides } + userOp = { ...userOp, ...overrides }; } - Logger.log('userOp in estimation', userOp) + Logger.log("userOp in estimation", userOp); if (!this.bundler || skipBundlerCall) { - if (!this.provider) throw new Error('Provider is not present for making rpc calls') + if (!this.provider) throw new Error("Provider is not present for making rpc calls"); // if no bundler url is provided run offchain logic to assign following values of UserOp // maxFeePerGas, maxPriorityFeePerGas, verificationGasLimit, callGasLimit, preVerificationGas - finalUserOp = await this.calculateUserOpGasValues(userOp) + finalUserOp = await this.calculateUserOpGasValues(userOp); } else { - delete userOp.maxFeePerGas - delete userOp.maxPriorityFeePerGas + delete userOp.maxFeePerGas; + delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp - const { - callGasLimit, - verificationGasLimit, - preVerificationGas, - maxFeePerGas, - maxPriorityFeePerGas - } = await this.bundler.estimateUserOpGas(userOp) - if ( - !userOp.maxFeePerGas && - !userOp.maxPriorityFeePerGas && - (!maxFeePerGas || !maxPriorityFeePerGas) - ) { - const feeData = await this.provider.getFeeData() - finalUserOp.maxFeePerGas = - feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()) - finalUserOp.maxPriorityFeePerGas = - feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()) + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = + await this.bundler.estimateUserOpGas(userOp); + if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { + const feeData = await this.provider.getFeeData(); + finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); + finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); } else { - finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas - finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas + finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; + finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas + finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; } - return finalUserOp + return finalUserOp; } // Would only be used if paymaster is attached async getPaymasterAndData(userOp: Partial): Promise { if (this.paymaster) { - const paymasterAndDataResponse: PaymasterAndDataResponse = - await this.paymaster.getPaymasterAndData(userOp) - return paymasterAndDataResponse.paymasterAndData + const paymasterAndDataResponse: PaymasterAndDataResponse = await this.paymaster.getPaymasterAndData(userOp); + return paymasterAndDataResponse.paymasterAndData; } - return '0x' + return "0x"; } // Review : usage trace of this method. in the order of init and methods called on the Account async isAccountDeployed(address: string): Promise { - this.isProviderDefined() - let contractCode + this.isProviderDefined(); + let contractCode; if (this.isDeployed !== undefined || this.isDeployed !== null) { // already deployed. no need to check anymore. - return this.isDeployed + return this.isDeployed; } try { - contractCode = await this.provider.getCode(address) + contractCode = await this.provider.getCode(address); if (contractCode.length > 2) { - this.isDeployed = true + this.isDeployed = true; } else { - this.isDeployed = false + this.isDeployed = false; } - return this.isDeployed + return this.isDeployed; } catch (error) { - throw error + throw error; } } @@ -344,18 +321,18 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * calculate the account address even before it is deployed */ async getCounterFactualAddress(): Promise { - const initCode = this.getAccountInitCode() + const initCode = this.getAccountInitCode(); // use entryPoint to query account address (factory can provide a helper method to do the same, but // this method attempts to be generic try { - await this.entryPoint.callStatic.getSenderAddress(initCode) + await this.entryPoint.callStatic.getSenderAddress(initCode); } catch (e: any) { if (e.errorArgs == null) { - throw e + throw e; } - return e.errorArgs.sender + return e.errorArgs.sender; } - throw new Error('must handle revert') + throw new Error("must handle revert"); } /** @@ -364,30 +341,28 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { */ async getInitCode(): Promise { if (await this.isAccountDeployed(await this.getAccountAddress())) { - return '0x' + return "0x"; } - return await this.getAccountInitCode() + return this.getAccountInitCode(); } async getPreVerificationGas(userOp: Partial): Promise { - return calcPreVerificationGas(userOp) + return calcPreVerificationGas(userOp); } async getVerificationGasLimit(initCode: BytesLike): Promise { // Verification gas should be max(initGas(wallet deployment) + validateUserOp + validatePaymasterUserOp , postOp) - const initGas = await this.estimateCreationGas(initCode as string) - const validateUserOpGas = BigNumber.from( - DefaultGasLimits.validatePaymasterUserOpGas + DefaultGasLimits.validateUserOpGas - ) - const postOpGas = BigNumber.from(DefaultGasLimits.postOpGas) + const initGas = await this.estimateCreationGas(initCode as string); + const validateUserOpGas = BigNumber.from(DefaultGasLimits.validatePaymasterUserOpGas + DefaultGasLimits.validateUserOpGas); + const postOpGas = BigNumber.from(DefaultGasLimits.postOpGas); - let verificationGasLimit = BigNumber.from(validateUserOpGas).add(initGas) + let verificationGasLimit = BigNumber.from(validateUserOpGas).add(initGas); if (BigNumber.from(postOpGas).gt(verificationGasLimit)) { - verificationGasLimit = postOpGas + verificationGasLimit = postOpGas; } - return verificationGasLimit + return verificationGasLimit; } /** @@ -398,16 +373,16 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { async getAccountAddress(): Promise { if (this.accountAddress == null) { // means it needs deployment - this.accountAddress = await this.getCounterFactualAddress() + this.accountAddress = await this.getCounterFactualAddress(); } - return this.accountAddress + return this.accountAddress; } async estimateCreationGas(initCode?: string): Promise { - if (initCode == null || initCode === '0x') return 0 - const deployerAddress = initCode.substring(0, 42) - const deployerCallData = '0x' + initCode.substring(42) - return await this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }) + if (initCode == null || initCode === "0x") return 0; + const deployerAddress = initCode.substring(0, 42); + const deployerCallData = "0x" + initCode.substring(42); + return this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }); } /** @@ -417,63 +392,52 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @param interval time to wait between polls. * @return the transactionHash this userOp was mined, or null if not found. */ - async getUserOpReceipt( - userOpHash: string, - timeout = 30000, - interval = 5000 - ): Promise { - const endtime = Date.now() + timeout + async getUserOpReceipt(userOpHash: string, timeout = 30000, interval = 5000): Promise { + const endtime = Date.now() + timeout; while (Date.now() < endtime) { - const events = await this.entryPoint.queryFilter( - this.entryPoint.filters.UserOperationEvent(userOpHash) - ) + const events = await this.entryPoint.queryFilter(this.entryPoint.filters.UserOperationEvent(userOpHash)); if (events.length > 0) { - return events[0].transactionHash + return events[0].transactionHash; } - await new Promise((resolve) => setTimeout(resolve, interval)) + await new Promise((resolve) => setTimeout(resolve, interval)); } - return null + return null; } async getUserOpHash(userOp: Partial): Promise { - const userOpHash = keccak256(packUserOp(userOp, true)) - const enc = defaultAbiCoder.encode( - ['bytes32', 'address', 'uint256'], - [userOpHash, this.entryPoint.address, this.chainId] - ) - return keccak256(enc) + const userOpHash = keccak256(packUserOp(userOp, true)); + const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, this.entryPoint.address, this.chainId]); + return keccak256(enc); } /** * ABI-encode a user operation. used for calldata cost estimation */ packUserOp(userOp: NotPromise): string { - return packUserOp(userOp, false) + return packUserOp(userOp, false); } - async encodeUserOpCallDataAndGasLimit( - detailsForUserOp: TransactionDetailsForUserOp - ): Promise<{ callData: string; callGasLimit: BigNumber }> { + async encodeUserOpCallDataAndGasLimit(detailsForUserOp: TransactionDetailsForUserOp): Promise<{ callData: string; callGasLimit: BigNumber }> { function parseNumber(a: any): BigNumber | null { - if (a == null || a === '') return null - return BigNumber.from(a.toString()) + if (a == null || a === "") return null; + return BigNumber.from(a.toString()); } - const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0) - const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data) + const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0); + const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data); const callGasLimit = parseNumber(detailsForUserOp.gasLimit) ?? (await this.provider.estimateGas({ from: this.entryPointAddress, to: this.getAccountAddress(), - data: callData - })) + data: callData, + })); return { callData, - callGasLimit - } + callGasLimit, + }; } // TODO: allow this for batch. Review previous sdk versions @@ -485,19 +449,19 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @param info */ async createUnsignedUserOp(info: TransactionDetailsForUserOp): Promise { - const { callData, callGasLimit } = await this.encodeUserOpCallDataAndGasLimit(info) - const initCode = await this.getInitCode() + const { callData, callGasLimit } = await this.encodeUserOpCallDataAndGasLimit(info); + const initCode = await this.getInitCode(); - const verificationGasLimit = BigNumber.from(await this.getVerificationGasLimit(initCode)) + const verificationGasLimit = BigNumber.from(await this.getVerificationGasLimit(initCode)); - let { maxFeePerGas, maxPriorityFeePerGas } = info + let { maxFeePerGas, maxPriorityFeePerGas } = info; if (maxFeePerGas == null || maxPriorityFeePerGas == null) { - const feeData = await this.provider.getFeeData() + const feeData = await this.provider.getFeeData(); if (maxFeePerGas == null) { - maxFeePerGas = feeData.maxFeePerGas ?? undefined + maxFeePerGas = feeData.maxFeePerGas ?? undefined; } if (maxPriorityFeePerGas == null) { - maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? undefined + maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? undefined; } } @@ -510,24 +474,24 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { verificationGasLimit, maxFeePerGas, maxPriorityFeePerGas, - paymasterAndData: '0x' - } + paymasterAndData: "0x", + }; - let paymasterAndData: string | undefined + let paymasterAndData: string | undefined; if (this.paymaster != null) { // fill (partial) preVerificationGas (all except the cost of the generated paymasterAndData) const userOpForPm = { ...partialUserOp, - preVerificationGas: await this.getPreVerificationGas(partialUserOp) - } - paymasterAndData = (await this.paymaster.getPaymasterAndData(userOpForPm)).paymasterAndData + preVerificationGas: await this.getPreVerificationGas(partialUserOp), + }; + paymasterAndData = (await this.paymaster.getPaymasterAndData(userOpForPm)).paymasterAndData; } - partialUserOp.paymasterAndData = paymasterAndData ?? '0x' + partialUserOp.paymasterAndData = paymasterAndData ?? "0x"; return { ...partialUserOp, preVerificationGas: this.getPreVerificationGas(partialUserOp), - signature: '' - } + signature: "", + }; } /** @@ -535,6 +499,6 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @param info transaction details for the userOp */ async createSignedUserOp(info: TransactionDetailsForUserOp): Promise { - return await this.signUserOp(await this.createUnsignedUserOp(info)) + return this.signUserOp(await this.createUnsignedUserOp(info)); } } diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 271ac43d9..0aa971b07 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -156,9 +156,9 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart smartAccountType: SmartAccountType.BICONOMY, version: BICONOMY_FACTORY_ADDRESSES[_factoryAddress], contractAddress: _factoryAddress, - provider: this.provider - } - this.factory = getSAFactoryContract(factoryInstanceDto) as SmartAccountFactory_v100 + provider: this.provider, + }; + this.factory = getSAFactoryContract(factoryInstanceDto) as SmartAccountFactory_v100; } private async setContractsState() { diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index daee86a47..56609109b 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -6,27 +6,36 @@ import { UserOperation, ChainId } from "@biconomy/core-types"; import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; import { packUserOp } from "@biconomy/common"; -import { IBundler, UserOpResponse } from '@biconomy/bundler' -import { IPaymaster, PaymasterAndDataResponse } from '@biconomy/paymaster' -import { Logger } from '@biconomy/common' -import { IEntryPoint } from '@account-abstraction/contracts' -import { SmartAccountConfig, Overrides } from './utils/Types' +import { IBundler, UserOpResponse } from "@biconomy/bundler"; +import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; +import { Logger } from "@biconomy/common"; +import { IEntryPoint } from "@account-abstraction/contracts"; +import { SmartAccountConfig, Overrides } from "./utils/Types"; type UserOperationKey = keyof UserOperation; // Notice: only to be used as base class for child class BiconomySmartAccount(V1) export abstract class SmartAccount implements ISmartAccount { - bundler!: IBundler - paymaster!: IPaymaster - initCode = '0x' + bundler!: IBundler; + + paymaster!: IPaymaster; + + initCode = "0x"; + // Ideally proxy should be defined in child class, if it's meant to be of type Biconomy SmartAccount - proxy!: any - owner!: string - provider!: JsonRpcProvider - entryPoint!: IEntryPoint - chainId!: ChainId - signer!: Signer - smartAccountConfig: SmartAccountConfig + proxy!: any; + + owner!: string; + + provider!: JsonRpcProvider; + + entryPoint!: IEntryPoint; + + chainId!: ChainId; + + signer!: Signer; + + smartAccountConfig: SmartAccountConfig; constructor(_smartAccountConfig: SmartAccountConfig) { this.smartAccountConfig = _smartAccountConfig; diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index bcb146b6d..784f36f10 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -1,8 +1,8 @@ -export * from './interfaces/ISmartAccount' -export * from './interfaces/IBaseSmartAccount' -export * from './interfaces/IBiconomySmartAccount' -export * from './utils/Types' -export * from './SmartAccount' -export * from './BiconomySmartAccount' -export * from './utils/Constants' -export * from './BiconomySmartAccountV2' +export * from "./interfaces/ISmartAccount"; +export * from "./interfaces/IBaseSmartAccount"; +export * from "./interfaces/IBiconomySmartAccount"; +export * from "./utils/Types"; +export * from "./SmartAccount"; +export * from "./BiconomySmartAccount"; +export * from "./utils/Constants"; +export * from "./BiconomySmartAccountV2"; diff --git a/packages/account/src/interfaces/IBaseSmartAccount.ts b/packages/account/src/interfaces/IBaseSmartAccount.ts index 2c8e27b9a..797af5536 100644 --- a/packages/account/src/interfaces/IBaseSmartAccount.ts +++ b/packages/account/src/interfaces/IBaseSmartAccount.ts @@ -1,23 +1,23 @@ -import { UserOperation } from '@biconomy/core-types' -import { UserOpResponse } from '@biconomy/bundler' -import { BigNumberish, Bytes, BytesLike, BigNumber } from 'ethers' +import { UserOperation } from "@biconomy/core-types"; +import { UserOpResponse } from "@biconomy/bundler"; +import { BigNumberish, Bytes, BytesLike, BigNumber } from "ethers"; /** * Interface for Smart Contract Wallet aka Smart Account. * This SA does not have to implement ERC4337 interfaces */ export interface INon4337Account { - estimateCreationGas(initCode: string): Promise - getNonce(): Promise - signMessage(message: Bytes | string): Promise - getAccountAddress(accountIndex?: number): Promise + estimateCreationGas(initCode: string): Promise; + getNonce(): Promise; + signMessage(message: Bytes | string): Promise; + getAccountAddress(accountIndex?: number): Promise; } export interface IBaseSmartAccount extends INon4337Account { - getVerificationGasLimit(initCode: BytesLike): Promise - getPreVerificationGas(userOp: Partial): Promise - signUserOp(userOp: UserOperation): Promise - signUserOpHash(userOpHash: string): Promise - getUserOpHash(userOp: Partial): Promise - getAccountInitCode(): Promise - getDummySignature(): Promise + getVerificationGasLimit(initCode: BytesLike): Promise; + getPreVerificationGas(userOp: Partial): Promise; + signUserOp(userOp: UserOperation): Promise; + signUserOpHash(userOpHash: string): Promise; + getUserOpHash(userOp: Partial): Promise; + getAccountInitCode(): Promise; + getDummySignature(): Promise; } diff --git a/packages/account/src/interfaces/ISmartAccount.ts b/packages/account/src/interfaces/ISmartAccount.ts index 68d6b51f9..ffbe93587 100644 --- a/packages/account/src/interfaces/ISmartAccount.ts +++ b/packages/account/src/interfaces/ISmartAccount.ts @@ -1,8 +1,8 @@ import { UserOperation } from "@biconomy/core-types"; import { UserOpResponse } from "@biconomy/bundler"; export interface ISmartAccount { - getSmartAccountAddress(accountIndex: number): Promise - signUserOp(userOp: UserOperation): Promise - sendUserOp(userOp: UserOperation): Promise - sendSignedUserOp(userOp: UserOperation): Promise + getSmartAccountAddress(accountIndex: number): Promise; + signUserOp(userOp: UserOperation): Promise; + sendUserOp(userOp: UserOperation): Promise; + sendSignedUserOp(userOp: UserOperation): Promise; } diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 44282ca72..630c7b793 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -1,51 +1,51 @@ -import { ChainId } from '@biconomy/core-types' +import { ChainId } from "@biconomy/core-types"; import { EntryPointAddresses, BiconomyFactories, BiconomyImplementations, EntryPointAddressesByVersion, BiconomyFactoriesByVersion, - BiconomyImplementationsByVersion -} from './Types' + BiconomyImplementationsByVersion, +} from "./Types"; // Review: Note: Might be a good idea to keep reverse mapping for below and also default constants for latest versioned addresses*/ // will always be latest entrypoint address -export const DEFAULT_ENTRYPOINT_ADDRESS = '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789' +export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { - '0x27a4db290b89ae3373ce4313cbeae72112ae7da9': 'V0_0_5', - '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789': 'V0_0_6' -} + "0x27a4db290b89ae3373ce4313cbeae72112ae7da9": "V0_0_5", + "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789": "V0_0_6", +}; // will always be latest factory address -export const DEFAULT_BICONOMY_FACTORY_ADDRESS = '0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5' +export const DEFAULT_BICONOMY_FACTORY_ADDRESS = "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5"; export const BICONOMY_FACTORY_ADDRESSES: BiconomyFactories = { - '0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c': 'V1_0_0', - '0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5': 'V2_0_0' -} + "0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c": "V1_0_0", + "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5": "V2_0_0", +}; // will always be latest implementation address -export const DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS = '0x0000002512019Dafb59528B82CB92D3c5D2423aC' +export const DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS = "0x0000002512019Dafb59528B82CB92D3c5D2423aC"; export const BICONOMY_IMPLEMENTATION_ADDRESSES: BiconomyImplementations = { - '0x00006b7e42e01957da540dc6a8f7c30c4d816af5': 'V1_0_0', - '0x0000002512019Dafb59528B82CB92D3c5D2423aC': 'V2_0_0' -} + "0x00006b7e42e01957da540dc6a8f7c30c4d816af5": "V1_0_0", + "0x0000002512019Dafb59528B82CB92D3c5D2423aC": "V2_0_0", +}; export const ENTRYPOINT_ADDRESSES_BY_VERSION: EntryPointAddressesByVersion = { - V0_0_5: '0x27a4db290b89ae3373ce4313cbeae72112ae7da9', - V0_0_6: '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789' -} + V0_0_5: "0x27a4db290b89ae3373ce4313cbeae72112ae7da9", + V0_0_6: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", +}; // TODO // Update with latest factory address export const BICONOMY_FACTORY_ADDRESSES_BY_VERSION: BiconomyFactoriesByVersion = { - V1_0_0: '0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c', - V2_0_0: '0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5' -} + V1_0_0: "0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c", + V2_0_0: "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5", +}; // TODO // Update with latest implementation address which includes 2D nonce interface export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementationsByVersion = { - V1_0_0: '0x00006b7e42e01957da540dc6a8f7c30c4d816af5', - V2_0_0: '0x0000002512019Dafb59528B82CB92D3c5D2423aC' -} + V1_0_0: "0x00006b7e42e01957da540dc6a8f7c30c4d816af5", + V2_0_0: "0x0000002512019Dafb59528B82CB92D3c5D2423aC", +}; export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101]; diff --git a/packages/account/src/utils/Preverificaiton.ts b/packages/account/src/utils/Preverificaiton.ts index 02b003f05..5b32b0054 100644 --- a/packages/account/src/utils/Preverificaiton.ts +++ b/packages/account/src/utils/Preverificaiton.ts @@ -108,15 +108,11 @@ export function calcPreVerificationGas(userOp: Partial * plus any gas overhead that can't be tracked on-chain * (if bundler needs to charge the premium one way is to increase this value for ops to sign) */ - const callDataCost = packed - .map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte)) - .reduce((sum, x) => sum + x) - const ret = Math.round( - callDataCost + ov.fixed / ov.bundleSize + ov.perUserOp + ov.perUserOpWord * lengthInWord - ) + const callDataCost = packed.map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte)).reduce((sum, x) => sum + x); + const ret = Math.round(callDataCost + ov.fixed / ov.bundleSize + ov.perUserOp + ov.perUserOpWord * lengthInWord); if (ret) { - return BigNumber.from(ret) + return BigNumber.from(ret); } else { - throw new Error("can't calculate preVerificationGas") + throw new Error("can't calculate preVerificationGas"); } } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index f06f475b8..6c0898f95 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -1,35 +1,35 @@ -import { Signer } from 'ethers' -import { ChainId } from '@biconomy/core-types' -import { BigNumberish } from 'ethers' -import { IBundler } from '@biconomy/bundler' -import { IPaymaster, PaymasterFeeQuote } from '@biconomy/paymaster' -import { BaseValidationModule, ModuleInfo } from '@biconomy/modules' -import { JsonRpcProvider, Provider } from '@ethersproject/providers' -import { GasOverheads } from './Preverificaiton' +import { Signer } from "ethers"; +import { ChainId } from "@biconomy/core-types"; +import { BigNumberish } from "ethers"; +import { IBundler } from "@biconomy/bundler"; +import { IPaymaster, PaymasterFeeQuote } from "@biconomy/paymaster"; +import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; +import { JsonRpcProvider, Provider } from "@ethersproject/providers"; +import { GasOverheads } from "./Preverificaiton"; export type EntryPointAddresses = { - [address: string]: string -} + [address: string]: string; +}; export type BiconomyFactories = { [address: string]: string; }; export type BiconomyImplementations = { - [address: string]: string -} + [address: string]: string; +}; export type EntryPointAddressesByVersion = { - [version: string]: string -} + [version: string]: string; +}; export type BiconomyFactoriesByVersion = { - [version: string]: string -} + [version: string]: string; +}; export type BiconomyImplementationsByVersion = { - [version: string]: string -} + [version: string]: string; +}; export type SmartAccountConfig = { entryPointAddress: string; @@ -38,14 +38,14 @@ export type SmartAccountConfig = { export interface BaseSmartAccountConfig { // owner?: Signer // can be in child classes - index?: number - provider?: Provider - entryPointAddress: string - accountAddress?: string - overheads?: Partial - paymaster?: IPaymaster // PaymasterAPI - bundler?: IBundler // like HttpRpcClient - chainId: ChainId + index?: number; + provider?: Provider; + entryPointAddress: string; + accountAddress?: string; + overheads?: Partial; + paymaster?: IPaymaster; // PaymasterAPI + bundler?: IBundler; // like HttpRpcClient + chainId: ChainId; } export type BiconomyTokenPaymasterRequest = { @@ -65,25 +65,25 @@ export type BiconomySmartAccountConfig = { }; export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { - factoryAddress?: string - rpcUrl?: string // as good as Provider - nodeClientUrl?: string // very specific to Biconomy - defaultValidationModule: BaseValidationModule - activeValidationModule?: BaseValidationModule + factoryAddress?: string; + rpcUrl?: string; // as good as Provider + nodeClientUrl?: string; // very specific to Biconomy + defaultValidationModule: BaseValidationModule; + activeValidationModule?: BaseValidationModule; } export type BuildUserOpOptions = { - overrides?: Overrides - skipBundlerGasEstimation?: boolean - params?: ModuleInfo - nonceOptions?: NonceOptions - forceEncodeForBatch?: boolean -} + overrides?: Overrides; + skipBundlerGasEstimation?: boolean; + params?: ModuleInfo; + nonceOptions?: NonceOptions; + forceEncodeForBatch?: boolean; +}; export type NonceOptions = { - nonceKey?: number - nonceOverride?: number -} + nonceKey?: number; + nonceOverride?: number; +}; export type Overrides = { callGasLimit?: BigNumberish; @@ -96,25 +96,25 @@ export type Overrides = { }; export type InitilizationData = { - accountIndex?: number - signerAddress?: string -} + accountIndex?: number; + signerAddress?: string; +}; export type InitializeV2Data = { - accountIndex?: number -} + accountIndex?: number; +}; export interface TransactionDetailsForUserOp { - target: string - data: string - value?: BigNumberish - gasLimit?: BigNumberish - maxFeePerGas?: BigNumberish - maxPriorityFeePerGas?: BigNumberish - nonce?: BigNumberish + target: string; + data: string; + value?: BigNumberish; + gasLimit?: BigNumberish; + maxFeePerGas?: BigNumberish; + maxPriorityFeePerGas?: BigNumberish; + nonce?: BigNumberish; } export type CounterFactualAddressParam = { - index?: number - validationModule?: BaseValidationModule -} + index?: number; + validationModule?: BaseValidationModule; +}; diff --git a/packages/common/src/ContractsInstances.ts b/packages/common/src/ContractsInstances.ts index 9f238e860..99198db56 100644 --- a/packages/common/src/ContractsInstances.ts +++ b/packages/common/src/ContractsInstances.ts @@ -1,6 +1,6 @@ -import { SmartAccountType } from '@biconomy/core-types' -import { JsonRpcProvider } from '@ethersproject/providers' -import { EntryPoint, IEntryPoint, EntryPoint__factory } from '@account-abstraction/contracts' +import { SmartAccountType } from "@biconomy/core-types"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { EntryPoint, IEntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { EntryPoint_v005__factory, EntryPoint_v006__factory, @@ -11,8 +11,8 @@ import { SmartAccountFactory_v100__factory, SmartAccountFactory_v200__factory, SmartAccount_v100__factory, - SmartAccount_v200__factory -} from './typechain' + SmartAccount_v200__factory, +} from "./typechain"; export type GetContractInstanceDto = { smartAccountType: SmartAccountType; @@ -22,66 +22,62 @@ export type GetContractInstanceDto = { }; // TODO // Review return types -export function getSAProxyContract( - contractInstanceDto: GetContractInstanceDto -): SmartAccount_v100 | SmartAccount_v200 { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto +export function getSAProxyContract(contractInstanceDto: GetContractInstanceDto): SmartAccount_v100 | SmartAccount_v200 { + const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; switch (version) { case "V1_0_0": if (smartAccountType === SmartAccountType.BICONOMY) { return SmartAccount_v100__factory.connect(contractAddress, provider); } - break - case 'V2_0_0': + break; + case "V2_0_0": if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccount_v200__factory.connect(contractAddress, provider) + return SmartAccount_v200__factory.connect(contractAddress, provider); } - break + break; default: - return SmartAccount_v200__factory.connect(contractAddress, provider) + return SmartAccount_v200__factory.connect(contractAddress, provider); } throw new Error("Invalid version or smartAccountType provided for proxy contract instance"); } // TODO // Review return types -export function getSAFactoryContract( - contractInstanceDto: GetContractInstanceDto -): SmartAccountFactory_v100 | SmartAccountFactory_v200 { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto +export function getSAFactoryContract(contractInstanceDto: GetContractInstanceDto): SmartAccountFactory_v100 | SmartAccountFactory_v200 { + const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; switch (version) { case "V1_0_0": if (smartAccountType === SmartAccountType.BICONOMY) { return SmartAccountFactory_v100__factory.connect(contractAddress, provider); } - break - case 'V2_0_0': + break; + case "V2_0_0": if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccountFactory_v200__factory.connect(contractAddress, provider) + return SmartAccountFactory_v200__factory.connect(contractAddress, provider); } - break + break; default: - return SmartAccountFactory_v200__factory.connect(contractAddress, provider) + return SmartAccountFactory_v200__factory.connect(contractAddress, provider); } throw new Error("Invalid version or smartAccountType provided for factory contract instance"); } export function getEntryPointContract(contractInstanceDto: GetContractInstanceDto): IEntryPoint { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto + const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; switch (version) { case "V0_0_5": if (smartAccountType === SmartAccountType.BICONOMY) { - return EntryPoint_v005__factory.connect(contractAddress, provider) + return EntryPoint_v005__factory.connect(contractAddress, provider); } - break - case 'V0_0_6': + break; + case "V0_0_6": if (smartAccountType === SmartAccountType.BICONOMY) { - return EntryPoint_v006__factory.connect(contractAddress, provider) + return EntryPoint_v006__factory.connect(contractAddress, provider); } break; default: - return EntryPoint_v006__factory.connect(contractAddress, provider) + return EntryPoint_v006__factory.connect(contractAddress, provider); } throw new Error("Invalid version or smartAccountType provided for entrypoint contract instance"); } diff --git a/packages/modules/src/BaseValidationModule.ts b/packages/modules/src/BaseValidationModule.ts index cf9f19482..d61c16751 100644 --- a/packages/modules/src/BaseValidationModule.ts +++ b/packages/modules/src/BaseValidationModule.ts @@ -1,36 +1,36 @@ -import { Signer } from 'ethers' -import { Bytes } from 'ethers/lib/utils' -import { BaseValidationModuleConfig, ModuleInfo } from './utils/Types' -import { DEFAULT_ENTRYPOINT_ADDRESS } from './utils/Constants' -import { IValidationModule } from './interfaces/IValidationModule' +import { Signer } from "ethers"; +import { Bytes } from "ethers/lib/utils"; +import { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types"; +import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; +import { IValidationModule } from "./interfaces/IValidationModule"; // TODO: Review try using generic types // Need to solve it in SmartAccountV2 and it's config because for any module BaseValidationModule is used as type export abstract class BaseValidationModule implements IValidationModule { - entryPointAddress: string + entryPointAddress: string; constructor(moduleConfig: BaseValidationModuleConfig) { - const { entryPointAddress } = moduleConfig + const { entryPointAddress } = moduleConfig; - this.entryPointAddress = entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS + this.entryPointAddress = entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS; } - abstract getAddress(): string + abstract getAddress(): string; setEntryPointAddress(entryPointAddress: string) { - this.entryPointAddress = entryPointAddress + this.entryPointAddress = entryPointAddress; } - abstract getInitData(): Promise + abstract getInitData(): Promise; // Anything required to get dummy signature can be passed as params - abstract getDummySignature(params?: ModuleInfo): Promise + abstract getDummySignature(params?: ModuleInfo): Promise; // Review naming convention for getter - abstract getSigner(): Promise + abstract getSigner(): Promise; // Signer specific or any other additional information can be passed as params - abstract signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise + abstract signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise; - abstract signMessage(message: Bytes | string): Promise + abstract signMessage(message: Bytes | string): Promise; } diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 46e6d2009..bbe4cf014 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -1,42 +1,40 @@ -import { Signer, ethers } from 'ethers' -import MerkleTree from 'merkletreejs' -import { NODE_CLIENT_URL, Logger } from '@biconomy/common' -import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from 'ethers/lib/utils' -import { keccak256 } from 'ethereumjs-util' -import { - ModuleVersion, - CreateSessionDataParams, - StorageType, - SessionParams, - BatchedSessionRouterModuleConfig, - ModuleInfo -} from './utils/Types' +import { Signer, ethers } from "ethers"; +import MerkleTree from "merkletreejs"; +import { NODE_CLIENT_URL, Logger } from "@biconomy/common"; +import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from "ethers/lib/utils"; +import { keccak256 } from "ethereumjs-util"; +import { ModuleVersion, CreateSessionDataParams, StorageType, SessionParams, BatchedSessionRouterModuleConfig, ModuleInfo } from "./utils/Types"; import { BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION, SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE, - DEFAULT_BATCHED_SESSION_ROUTER_MODULE -} from './utils/Constants' -import { generateRandomHex } from './utils/Uid' -import { BaseValidationModule } from './BaseValidationModule' -import { SessionLocalStorage } from './session-storage/SessionLocalStorage' -import { ISessionStorage, SessionSearchParam, SessionStatus } from './interfaces/ISessionStorage' -import { SessionKeyManagerModule } from './SessionKeyManagerModule' + DEFAULT_BATCHED_SESSION_ROUTER_MODULE, +} from "./utils/Constants"; +import { generateRandomHex } from "./utils/Uid"; +import { BaseValidationModule } from "./BaseValidationModule"; +import { SessionLocalStorage } from "./session-storage/SessionLocalStorage"; +import { ISessionStorage, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; +import { SessionKeyManagerModule } from "./SessionKeyManagerModule"; export class BatchedSessionRouterModule extends BaseValidationModule { - version: ModuleVersion = 'V1_0_0' - moduleAddress!: string - sessionManagerModuleAddress!: string - sessionKeyManagerModule!: SessionKeyManagerModule + version: ModuleVersion = "V1_0_0"; + + moduleAddress!: string; + + sessionManagerModuleAddress!: string; + + sessionKeyManagerModule!: SessionKeyManagerModule; + readonly mockEcdsaSessionKeySig: string = - '0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b' + "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; + /** * This constructor is private. Use the static create method to instantiate SessionKeyManagerModule * @param moduleConfig The configuration for the module * @returns An instance of SessionKeyManagerModule */ private constructor(moduleConfig: BatchedSessionRouterModuleConfig) { - super(moduleConfig) + super(moduleConfig); } /** @@ -44,27 +42,24 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @param moduleConfig The configuration for the module * @returns A Promise that resolves to an instance of SessionKeyManagerModule */ - public static async create( - moduleConfig: BatchedSessionRouterModuleConfig - ): Promise { - const instance = new BatchedSessionRouterModule(moduleConfig) + public static async create(moduleConfig: BatchedSessionRouterModuleConfig): Promise { + const instance = new BatchedSessionRouterModule(moduleConfig); if (moduleConfig.moduleAddress) { - instance.moduleAddress = moduleConfig.moduleAddress + instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] + const moduleAddr = BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`) + throw new Error(`Invalid version ${moduleConfig.version}`); } - instance.moduleAddress = moduleAddr - instance.version = moduleConfig.version as ModuleVersion + instance.moduleAddress = moduleAddr; + instance.version = moduleConfig.version as ModuleVersion; } else { - instance.moduleAddress = DEFAULT_BATCHED_SESSION_ROUTER_MODULE + instance.moduleAddress = DEFAULT_BATCHED_SESSION_ROUTER_MODULE; // Note: in this case Version remains the default one } - instance.sessionManagerModuleAddress = - moduleConfig.sessionManagerModuleAddress ?? DEFAULT_SESSION_KEY_MANAGER_MODULE + instance.sessionManagerModuleAddress = moduleConfig.sessionManagerModuleAddress ?? DEFAULT_SESSION_KEY_MANAGER_MODULE; if (!moduleConfig.sessionKeyManagerModule) { // generate sessionModule @@ -72,16 +67,16 @@ export class BatchedSessionRouterModule extends BaseValidationModule { moduleAddress: instance.sessionManagerModuleAddress, smartAccountAddress: moduleConfig.smartAccountAddress, nodeClientUrl: moduleConfig.nodeClientUrl, - storageType: moduleConfig.storageType - }) + storageType: moduleConfig.storageType, + }); - instance.sessionKeyManagerModule = sessionModule + instance.sessionKeyManagerModule = sessionModule; } else { - instance.sessionKeyManagerModule = moduleConfig.sessionKeyManagerModule - instance.sessionManagerModuleAddress = moduleConfig.sessionKeyManagerModule.getAddress() + instance.sessionKeyManagerModule = moduleConfig.sessionKeyManagerModule; + instance.sessionManagerModuleAddress = moduleConfig.sessionKeyManagerModule.getAddress(); } - return instance + return instance; } /** @@ -90,8 +85,8 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @returns The session data */ createSessionData = async (leavesData: CreateSessionDataParams[]): Promise => { - return this.sessionKeyManagerModule.createSessionData(leavesData) - } + return this.sessionKeyManagerModule.createSessionData(leavesData); + }; /** * This method is used to sign the user operation using the session signer @@ -100,77 +95,75 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @returns The signature of the user operation */ async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { - const sessionParams = params?.batchSessionParams + const sessionParams = params?.batchSessionParams; if (!sessionParams || sessionParams.length === 0) { - throw new Error('Session parameters are not provided') + throw new Error("Session parameters are not provided"); } - const sessionDataTupleArray = [] + const sessionDataTupleArray = []; // signer must be the same for all the sessions - const sessionSigner = sessionParams[0].sessionSigner + const sessionSigner = sessionParams[0].sessionSigner; const userOpHashAndModuleAddress = ethers.utils.hexConcat([ ethers.utils.hexZeroPad(userOpHash, 32), - ethers.utils.hexZeroPad(this.getSessionKeyManagerAddress(), 20) - ]) + ethers.utils.hexZeroPad(this.getSessionKeyManagerAddress(), 20), + ]); - const resultingHash = ethers.utils.keccak256(userOpHashAndModuleAddress) + const resultingHash = ethers.utils.keccak256(userOpHashAndModuleAddress); - const signature = await sessionSigner.signMessage(arrayify(resultingHash)) + const signature = await sessionSigner.signMessage(arrayify(resultingHash)); for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { - throw new Error('Session signer is not provided.') + throw new Error("Session signer is not provided."); } - const sessionDataTuple = [] + const sessionDataTuple = []; - let sessionSignerData + let sessionSignerData; if (sessionParam.sessionID) { sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ - sessionID: sessionParam.sessionID - }) + sessionID: sessionParam.sessionID, + }); } else if (sessionParam.sessionValidationModule) { sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ sessionValidationModule: sessionParam.sessionValidationModule, - sessionPublicKey: await sessionSigner.getAddress() - }) + sessionPublicKey: await sessionSigner.getAddress(), + }); } else { - throw new Error('sessionID or sessionValidationModule should be provided.') + throw new Error("sessionID or sessionValidationModule should be provided."); } - sessionDataTuple.push(sessionSignerData.validUntil) - sessionDataTuple.push(sessionSignerData.validAfter) - sessionDataTuple.push(sessionSignerData.sessionValidationModule) - sessionDataTuple.push(sessionSignerData.sessionKeyData) + sessionDataTuple.push(sessionSignerData.validUntil); + sessionDataTuple.push(sessionSignerData.validAfter); + sessionDataTuple.push(sessionSignerData.sessionValidationModule); + sessionDataTuple.push(sessionSignerData.sessionKeyData); const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), hexZeroPad(sessionSignerData.sessionValidationModule, 20), - sessionSignerData.sessionKeyData - ]) + sessionSignerData.sessionKeyData, + ]); - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof( - ethers.utils.keccak256(leafDataHex) as unknown as Buffer - ) + const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); - sessionDataTuple.push(proof) - sessionDataTuple.push(sessionParam.additionalSessionData ?? '0x') + sessionDataTuple.push(proof); + sessionDataTuple.push(sessionParam.additionalSessionData ?? "0x"); - sessionDataTupleArray.push(sessionDataTuple) + sessionDataTupleArray.push(sessionDataTuple); } // Generate the padded signature const paddedSignature = defaultAbiCoder.encode( - ['address', 'tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]', 'bytes'], - [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature] - ) + ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], + [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature], + ); - return paddedSignature + return paddedSignature; } /** @@ -180,7 +173,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @returns */ async updateSessionStatus(param: SessionSearchParam, status: SessionStatus) { - this.sessionKeyManagerModule.sessionStorageClient.updateSessionStatus(param, status) + this.sessionKeyManagerModule.sessionStorageClient.updateSessionStatus(param, status); } /** @@ -188,28 +181,28 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @returns */ async clearPendingSessions() { - this.sessionKeyManagerModule.sessionStorageClient.clearPendingSessions() + this.sessionKeyManagerModule.sessionStorageClient.clearPendingSessions(); } /** * @returns SessionKeyManagerModule address */ getAddress(): string { - return this.moduleAddress + return this.moduleAddress; } /** * @returns SessionKeyManagerModule address */ getSessionKeyManagerAddress(): string { - return this.sessionManagerModuleAddress + return this.sessionManagerModuleAddress; } /** * @remarks This is the version of the module contract */ async getSigner(): Promise { - throw new Error('Method not implemented.') + throw new Error("Method not implemented."); } /** @@ -219,89 +212,84 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // Review // instead of search params it could be actual leaves info retrieved beforehand async getDummySignature(params?: ModuleInfo): Promise { - const sessionParams = params?.batchSessionParams + const sessionParams = params?.batchSessionParams; if (!sessionParams || sessionParams.length === 0) { - throw new Error('Session parameters are not provided') + throw new Error("Session parameters are not provided"); } - const sessionDataTupleArray = [] + const sessionDataTupleArray = []; // if needed we could do mock signature over userOpHashAndModuleAddress // signer must be the same for all the sessions - const sessionSigner = sessionParams[0].sessionSigner + const sessionSigner = sessionParams[0].sessionSigner; for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { - throw new Error('Session signer is not provided.') + throw new Error("Session signer is not provided."); } - const sessionDataTuple = [] + const sessionDataTuple = []; - let sessionSignerData + let sessionSignerData; if (sessionParam.sessionID) { sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ - sessionID: sessionParam.sessionID - }) + sessionID: sessionParam.sessionID, + }); } else if (sessionParam.sessionValidationModule) { sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ sessionValidationModule: sessionParam.sessionValidationModule, - sessionPublicKey: await sessionSigner.getAddress() - }) + sessionPublicKey: await sessionSigner.getAddress(), + }); } else { - throw new Error('sessionID or sessionValidationModule should be provided.') + throw new Error("sessionID or sessionValidationModule should be provided."); } - sessionDataTuple.push(sessionSignerData.validUntil) - sessionDataTuple.push(sessionSignerData.validAfter) - sessionDataTuple.push(sessionSignerData.sessionValidationModule) - sessionDataTuple.push(sessionSignerData.sessionKeyData) + sessionDataTuple.push(sessionSignerData.validUntil); + sessionDataTuple.push(sessionSignerData.validAfter); + sessionDataTuple.push(sessionSignerData.sessionValidationModule); + sessionDataTuple.push(sessionSignerData.sessionKeyData); const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), hexZeroPad(sessionSignerData.sessionValidationModule, 20), - sessionSignerData.sessionKeyData - ]) + sessionSignerData.sessionKeyData, + ]); - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof( - ethers.utils.keccak256(leafDataHex) as unknown as Buffer - ) + const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); - sessionDataTuple.push(proof) - sessionDataTuple.push(sessionParam.additionalSessionData ?? '0x') + sessionDataTuple.push(proof); + sessionDataTuple.push(sessionParam.additionalSessionData ?? "0x"); - sessionDataTupleArray.push(sessionDataTuple) + sessionDataTupleArray.push(sessionDataTuple); } // Generate the padded signature const paddedSignature = defaultAbiCoder.encode( - ['address', 'tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]', 'bytes'], - [this.getSessionKeyManagerAddress(), sessionDataTupleArray, this.mockEcdsaSessionKeySig] - ) + ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], + [this.getSessionKeyManagerAddress(), sessionDataTupleArray, this.mockEcdsaSessionKeySig], + ); - const dummySig = ethers.utils.defaultAbiCoder.encode( - ['bytes', 'address'], - [paddedSignature, this.getAddress()] - ) + const dummySig = ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [paddedSignature, this.getAddress()]); - return dummySig + return dummySig; } /** * @remarks Other modules may need additional attributes to build init data */ async getInitData(): Promise { - throw new Error('Method not implemented.') + throw new Error("Method not implemented."); } /** * @remarks This Module dont have knowledge of signer. So, this method is not implemented */ async signMessage(message: Bytes | string): Promise { - Logger.log('message', message) - throw new Error('Method not implemented.') + Logger.log("message", message); + throw new Error("Method not implemented."); } } diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index d57191ea5..299baa0ff 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -1,69 +1,68 @@ -import { Logger } from '@biconomy/common' -import { Signer, ethers } from 'ethers' -import { Bytes, arrayify } from 'ethers/lib/utils' -import { ECDSAOwnershipValidationModuleConfig, ModuleVersion } from './utils/Types' -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from './utils/Constants' -import { BaseValidationModule } from './BaseValidationModule' +import { Logger } from "@biconomy/common"; +import { Signer, ethers } from "ethers"; +import { Bytes, arrayify } from "ethers/lib/utils"; +import { ECDSAOwnershipValidationModuleConfig, ModuleVersion } from "./utils/Types"; +import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; +import { BaseValidationModule } from "./BaseValidationModule"; // Could be renamed with suffix API export class ECDSAOwnershipValidationModule extends BaseValidationModule { - signer: Signer - moduleAddress!: string - version: ModuleVersion = 'V1_0_0' + signer: Signer; + + moduleAddress!: string; + + version: ModuleVersion = "V1_0_0"; constructor(moduleConfig: ECDSAOwnershipValidationModuleConfig) { - super(moduleConfig) + super(moduleConfig); if (moduleConfig.moduleAddress) { - this.moduleAddress = moduleConfig.moduleAddress + this.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] + const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`) + throw new Error(`Invalid version ${moduleConfig.version}`); } - this.moduleAddress = moduleAddr - this.version = moduleConfig.version as ModuleVersion + this.moduleAddress = moduleAddr; + this.version = moduleConfig.version as ModuleVersion; } else { - this.moduleAddress = DEFAULT_ECDSA_OWNERSHIP_MODULE + this.moduleAddress = DEFAULT_ECDSA_OWNERSHIP_MODULE; // Note: in this case Version remains the default one } - this.signer = moduleConfig.signer + this.signer = moduleConfig.signer; } getAddress(): string { - return this.moduleAddress + return this.moduleAddress; } async getSigner(): Promise { - return await Promise.resolve(this.signer) + return Promise.resolve(this.signer); } async getDummySignature(): Promise { - const moduleAddress = ethers.utils.getAddress(this.getAddress()) - const dynamicPart = moduleAddress.substring(2).padEnd(40, '0') - return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000` + const moduleAddress = ethers.utils.getAddress(this.getAddress()); + const dynamicPart = moduleAddress.substring(2).padEnd(40, "0"); + return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000`; } // Note: other modules may need additional attributes to build init data async getInitData(): Promise { - const ecdsaOwnerAddress = await this.signer.getAddress() - const moduleRegistryAbi = 'function initForSmartAccount(address owner)' - const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]) - const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData( - 'initForSmartAccount', - [ecdsaOwnerAddress] - ) - return ecdsaOwnershipInitData + const ecdsaOwnerAddress = await this.signer.getAddress(); + const moduleRegistryAbi = "function initForSmartAccount(address owner)"; + const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]); + const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData("initForSmartAccount", [ecdsaOwnerAddress]); + return ecdsaOwnershipInitData; } async signUserOpHash(userOpHash: string): Promise { - const sig = await this.signer.signMessage(arrayify(userOpHash)) + const sig = await this.signer.signMessage(arrayify(userOpHash)); - Logger.log('ecdsa signature ', sig) + Logger.log("ecdsa signature ", sig); - return sig + return sig; } async signMessage(message: Bytes | string): Promise { - return await this.signer.signMessage(message) + return this.signer.signMessage(message); } } diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index ab37e658c..2ee24a561 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -1,142 +1,128 @@ -import { UserOperation } from '@biconomy/core-types' -import { Logger, getUserOpHash } from '@biconomy/common' -import { Signer, ethers } from 'ethers' -import MerkleTree from 'merkletreejs' -import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from './utils/Constants' -import { - keccak256, - arrayify, - defaultAbiCoder, - hexConcat, - hexZeroPad, - Bytes -} from 'ethers/lib/utils' -import { ModuleVersion, MultiChainUserOpDto, MultiChainValidationModuleConfig } from './utils/Types' -import { BaseValidationModule } from './BaseValidationModule' +import { UserOperation } from "@biconomy/core-types"; +import { Logger, getUserOpHash } from "@biconomy/common"; +import { Signer, ethers } from "ethers"; +import MerkleTree from "merkletreejs"; +import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; +import { keccak256, arrayify, defaultAbiCoder, hexConcat, hexZeroPad, Bytes } from "ethers/lib/utils"; +import { ModuleVersion, MultiChainUserOpDto, MultiChainValidationModuleConfig } from "./utils/Types"; +import { BaseValidationModule } from "./BaseValidationModule"; export class MultiChainValidationModule extends BaseValidationModule { - signer: Signer - moduleAddress!: string - version: ModuleVersion = 'V1_0_0' + signer: Signer; + + moduleAddress!: string; + + version: ModuleVersion = "V1_0_0"; constructor(moduleConfig: MultiChainValidationModuleConfig) { - super(moduleConfig) + super(moduleConfig); if (moduleConfig.moduleAddress) { - this.moduleAddress = moduleConfig.moduleAddress + this.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] + const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`) + throw new Error(`Invalid version ${moduleConfig.version}`); } - this.moduleAddress = moduleAddr - this.version = moduleConfig.version as ModuleVersion + this.moduleAddress = moduleAddr; + this.version = moduleConfig.version as ModuleVersion; } else { - this.moduleAddress = DEFAULT_MULTICHAIN_MODULE + this.moduleAddress = DEFAULT_MULTICHAIN_MODULE; // Note: in this case Version remains the default one } - this.signer = moduleConfig.signer + this.signer = moduleConfig.signer; } getAddress(): string { - return this.moduleAddress + return this.moduleAddress; } async getSigner(): Promise { - return await Promise.resolve(this.signer) + return Promise.resolve(this.signer); } async getDummySignature(): Promise { - const moduleAddress = ethers.utils.getAddress(this.getAddress()) - const dynamicPart = moduleAddress.substring(2).padEnd(40, '0') - return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000` + const moduleAddress = ethers.utils.getAddress(this.getAddress()); + const dynamicPart = moduleAddress.substring(2).padEnd(40, "0"); + return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000`; } // Note: other modules may need additional attributes to build init data async getInitData(): Promise { - const ecdsaOwnerAddress = await this.signer.getAddress() - const moduleRegistryAbi = 'function initForSmartAccount(address owner)' - const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]) - const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData( - 'initForSmartAccount', - [ecdsaOwnerAddress] - ) - return ecdsaOwnershipInitData + const ecdsaOwnerAddress = await this.signer.getAddress(); + const moduleRegistryAbi = "function initForSmartAccount(address owner)"; + const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]); + const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData("initForSmartAccount", [ecdsaOwnerAddress]); + return ecdsaOwnershipInitData; } async signUserOpHash(userOpHash: string): Promise { - const sig = await this.signer.signMessage(arrayify(userOpHash)) + const sig = await this.signer.signMessage(arrayify(userOpHash)); - Logger.log('ecdsa signature ', sig) + Logger.log("ecdsa signature ", sig); - return sig + return sig; } async signMessage(message: Bytes | string): Promise { - return await this.signer.signMessage(message) + return this.signer.signMessage(message); } async signUserOps(multiChainUserOps: MultiChainUserOpDto[]): Promise { try { - const leaves: string[] = [] + const leaves: string[] = []; // Iterate over each userOp and process them for (const multiChainOp of multiChainUserOps) { - const validUntil = multiChainOp.validUntil ?? 0 - const validAfter = multiChainOp.validAfter ?? 0 + const validUntil = multiChainOp.validUntil ?? 0; + const validAfter = multiChainOp.validAfter ?? 0; const leaf = hexConcat([ hexZeroPad(ethers.utils.hexlify(validUntil), 6), hexZeroPad(ethers.utils.hexlify(validAfter), 6), - hexZeroPad( - getUserOpHash(multiChainOp.userOp, this.entryPointAddress, multiChainOp.chainId), - 32 - ) - ]) + hexZeroPad(getUserOpHash(multiChainOp.userOp, this.entryPointAddress, multiChainOp.chainId), 32), + ]); - leaves.push(keccak256(leaf)) + leaves.push(keccak256(leaf)); } // Create a new Merkle tree using the leaves array - const merkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true }) + const merkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true }); - const multichainSignature = await this.signer.signMessage(arrayify(merkleTree.getHexRoot())) + const multichainSignature = await this.signer.signMessage(arrayify(merkleTree.getHexRoot())); // Create an array to store updated userOps - const updatedUserOps: UserOperation[] = [] + const updatedUserOps: UserOperation[] = []; - Logger.log('merkle root ', merkleTree.getHexRoot()) + Logger.log("merkle root ", merkleTree.getHexRoot()); for (let i = 0; i < leaves.length; i++) { - const merkleProof = merkleTree.getHexProof(leaves[i]) + const merkleProof = merkleTree.getHexProof(leaves[i]); - Logger.log('merkle proof ', merkleProof) + Logger.log("merkle proof ", merkleProof); - const validUntil = multiChainUserOps[i].validUntil ?? 0 - const validAfter = multiChainUserOps[i].validAfter ?? 0 + const validUntil = multiChainUserOps[i].validUntil ?? 0; + const validAfter = multiChainUserOps[i].validAfter ?? 0; // Create the moduleSignature const moduleSignature = defaultAbiCoder.encode( - ['uint48', 'uint48', 'bytes32', 'bytes32[]', 'bytes'], - [validUntil, validAfter, merkleTree.getHexRoot(), merkleProof, multichainSignature] - ) + ["uint48", "uint48", "bytes32", "bytes32[]", "bytes"], + [validUntil, validAfter, merkleTree.getHexRoot(), merkleProof, multichainSignature], + ); // add validation module address to the signature // Note: because accountV2 does not directly call this method. - const signatureWithModuleAddress = defaultAbiCoder.encode( - ['bytes', 'address'], - [moduleSignature, this.getAddress()] - ) + const signatureWithModuleAddress = defaultAbiCoder.encode(["bytes", "address"], [moduleSignature, this.getAddress()]); // Update userOp with the final signature const updatedUserOp: UserOperation = { ...(multiChainUserOps[i].userOp as UserOperation), - signature: signatureWithModuleAddress - } + signature: signatureWithModuleAddress, + }; - updatedUserOps.push(updatedUserOp) + updatedUserOps.push(updatedUserOp); } - return updatedUserOps + return updatedUserOps; } catch (error) { - Logger.error('Error in signing multi chain userops', error) - throw new Error(JSON.stringify(error)) + Logger.error("Error in signing multi chain userops", error); + throw new Error(JSON.stringify(error)); } } } diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index d24736d5d..922bfb944 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -1,39 +1,30 @@ -import { Signer, ethers } from 'ethers' -import MerkleTree from 'merkletreejs' -import { NODE_CLIENT_URL, Logger } from '@biconomy/common' -import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from 'ethers/lib/utils' -import { keccak256 } from 'ethereumjs-util' -import { - SessionKeyManagerModuleConfig, - ModuleVersion, - CreateSessionDataParams, - StorageType, - ModuleInfo -} from './utils/Types' -import NodeClient from '@biconomy/node-client' -import INodeClient from '@biconomy/node-client' -import { - SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, - DEFAULT_SESSION_KEY_MANAGER_MODULE -} from './utils/Constants' -import { generateRandomHex } from './utils/Uid' -import { BaseValidationModule } from './BaseValidationModule' -import { SessionLocalStorage } from './session-storage/SessionLocalStorage' -import { - ISessionStorage, - SessionLeafNode, - SessionSearchParam, - SessionStatus -} from './interfaces/ISessionStorage' +import { Signer, ethers } from "ethers"; +import MerkleTree from "merkletreejs"; +import { NODE_CLIENT_URL, Logger } from "@biconomy/common"; +import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from "ethers/lib/utils"; +import { keccak256 } from "ethereumjs-util"; +import { SessionKeyManagerModuleConfig, ModuleVersion, CreateSessionDataParams, StorageType, ModuleInfo } from "./utils/Types"; +import NodeClient from "@biconomy/node-client"; +import INodeClient from "@biconomy/node-client"; +import { SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "./utils/Constants"; +import { generateRandomHex } from "./utils/Uid"; +import { BaseValidationModule } from "./BaseValidationModule"; +import { SessionLocalStorage } from "./session-storage/SessionLocalStorage"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; export class SessionKeyManagerModule extends BaseValidationModule { - version: ModuleVersion = 'V1_0_0' - moduleAddress!: string - nodeClient!: INodeClient - merkleTree!: MerkleTree - sessionStorageClient!: ISessionStorage + version: ModuleVersion = "V1_0_0"; + + moduleAddress!: string; + + nodeClient!: INodeClient; + + merkleTree!: MerkleTree; + + sessionStorageClient!: ISessionStorage; + readonly mockEcdsaSessionKeySig: string = - '0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b' + "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; /** * This constructor is private. Use the static create method to instantiate SessionKeyManagerModule @@ -41,7 +32,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns An instance of SessionKeyManagerModule */ private constructor(moduleConfig: SessionKeyManagerModuleConfig) { - super(moduleConfig) + super(moduleConfig); } /** @@ -49,51 +40,49 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @param moduleConfig The configuration for the module * @returns A Promise that resolves to an instance of SessionKeyManagerModule */ - public static async create( - moduleConfig: SessionKeyManagerModuleConfig - ): Promise { - const instance = new SessionKeyManagerModule(moduleConfig) + public static async create(moduleConfig: SessionKeyManagerModuleConfig): Promise { + const instance = new SessionKeyManagerModule(moduleConfig); if (moduleConfig.moduleAddress) { - instance.moduleAddress = moduleConfig.moduleAddress + instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] + const moduleAddr = SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`) + throw new Error(`Invalid version ${moduleConfig.version}`); } - instance.moduleAddress = moduleAddr - instance.version = moduleConfig.version as ModuleVersion + instance.moduleAddress = moduleAddr; + instance.version = moduleConfig.version as ModuleVersion; } else { - instance.moduleAddress = DEFAULT_SESSION_KEY_MANAGER_MODULE + instance.moduleAddress = DEFAULT_SESSION_KEY_MANAGER_MODULE; // Note: in this case Version remains the default one } instance.nodeClient = new NodeClient({ - txServiceUrl: moduleConfig.nodeClientUrl ?? NODE_CLIENT_URL - }) + txServiceUrl: moduleConfig.nodeClientUrl ?? NODE_CLIENT_URL, + }); if (!moduleConfig.storageType || moduleConfig.storageType === StorageType.LOCAL_STORAGE) { - instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress) + instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); } else { - throw new Error('Invalid storage type') + throw new Error("Invalid storage type"); } - const existingSessionData = await instance.sessionStorageClient.getAllSessionData() + const existingSessionData = await instance.sessionStorageClient.getAllSessionData(); const existingSessionDataLeafs = existingSessionData.map((sessionData) => { const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(sessionData.validUntil), 6), hexZeroPad(ethers.utils.hexlify(sessionData.validAfter), 6), hexZeroPad(sessionData.sessionValidationModule, 20), - sessionData.sessionKeyData - ]) - return ethers.utils.keccak256(leafDataHex) - }) + sessionData.sessionKeyData, + ]); + return ethers.utils.keccak256(leafDataHex); + }); instance.merkleTree = new MerkleTree(existingSessionDataLeafs, keccak256, { sortPairs: true, - hashLeaves: false - }) + hashLeaves: false, + }); - return instance + return instance; } /** @@ -102,50 +91,46 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns The session data */ createSessionData = async (leavesData: CreateSessionDataParams[]): Promise => { - const sessionKeyManagerModuleABI = 'function setMerkleRoot(bytes32 _merkleRoot)' - const sessionKeyManagerModuleInterface = new ethers.utils.Interface([ - sessionKeyManagerModuleABI - ]) - const leavesToAdd: Buffer[] = [] + const sessionKeyManagerModuleABI = "function setMerkleRoot(bytes32 _merkleRoot)"; + const sessionKeyManagerModuleInterface = new ethers.utils.Interface([sessionKeyManagerModuleABI]); + const leavesToAdd: Buffer[] = []; for (const leafData of leavesData) { const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(leafData.validUntil), 6), hexZeroPad(ethers.utils.hexlify(leafData.validAfter), 6), hexZeroPad(leafData.sessionValidationModule, 20), - leafData.sessionKeyData - ]) + leafData.sessionKeyData, + ]); - leavesToAdd.push(ethers.utils.keccak256(leafDataHex) as unknown as Buffer) + leavesToAdd.push(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); const sessionLeafNode = { ...leafData, sessionID: generateRandomHex(), - status: 'PENDING' as SessionStatus - } + status: "PENDING" as SessionStatus, + }; - await this.sessionStorageClient.addSessionData(sessionLeafNode) + await this.sessionStorageClient.addSessionData(sessionLeafNode); } - this.merkleTree.addLeaves(leavesToAdd) + this.merkleTree.addLeaves(leavesToAdd); - const leaves = this.merkleTree.getLeaves() + const leaves = this.merkleTree.getLeaves(); const newMerkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true, - hashLeaves: false - }) + hashLeaves: false, + }); - this.merkleTree = newMerkleTree + this.merkleTree = newMerkleTree; - const setMerkleRootData = sessionKeyManagerModuleInterface.encodeFunctionData('setMerkleRoot', [ - this.merkleTree.getHexRoot() - ]) + const setMerkleRootData = sessionKeyManagerModuleInterface.encodeFunctionData("setMerkleRoot", [this.merkleTree.getHexRoot()]); - await this.sessionStorageClient.setMerkleRoot(this.merkleTree.getHexRoot()) + await this.sessionStorageClient.setMerkleRoot(this.merkleTree.getHexRoot()); // TODO: create a signer if sessionPubKey if not given - return setMerkleRootData - } + return setMerkleRootData; + }; /** * This method is used to sign the user operation using the session signer @@ -155,61 +140,61 @@ export class SessionKeyManagerModule extends BaseValidationModule { */ async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { if (!(params && params.sessionSigner)) { - throw new Error('Session signer is not provided.') + throw new Error("Session signer is not provided."); } - const sessionSigner = params.sessionSigner + const sessionSigner = params.sessionSigner; // Use the sessionSigner to sign the user operation - const signature = await sessionSigner.signMessage(arrayify(userOpHash)) + const signature = await sessionSigner.signMessage(arrayify(userOpHash)); - const sessionSignerData = await this.getLeafInfo(params) + const sessionSignerData = await this.getLeafInfo(params); const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), hexZeroPad(sessionSignerData.sessionValidationModule, 20), - sessionSignerData.sessionKeyData - ]) + sessionSignerData.sessionKeyData, + ]); // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) let paddedSignature = defaultAbiCoder.encode( - ['uint48', 'uint48', 'address', 'bytes', 'bytes32[]', 'bytes'], + ["uint48", "uint48", "address", "bytes", "bytes32[]", "bytes"], [ sessionSignerData.validUntil, sessionSignerData.validAfter, sessionSignerData.sessionValidationModule, sessionSignerData.sessionKeyData, this.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer), - signature - ] - ) + signature, + ], + ); if (params?.additionalSessionData) { - paddedSignature += params.additionalSessionData + paddedSignature += params.additionalSessionData; } - return paddedSignature + return paddedSignature; } private async getLeafInfo(params: ModuleInfo): Promise { if (!(params && params.sessionSigner)) { - throw new Error('Session signer is not provided.') + throw new Error("Session signer is not provided."); } - const sessionSigner = params.sessionSigner - let sessionSignerData + const sessionSigner = params.sessionSigner; + let sessionSignerData; if (params?.sessionID) { sessionSignerData = await this.sessionStorageClient.getSessionData({ - sessionID: params.sessionID - }) + sessionID: params.sessionID, + }); } else if (params?.sessionValidationModule) { sessionSignerData = await this.sessionStorageClient.getSessionData({ sessionValidationModule: params.sessionValidationModule, - sessionPublicKey: await sessionSigner.getAddress() - }) + sessionPublicKey: await sessionSigner.getAddress(), + }); } else { - throw new Error('sessionID or sessionValidationModule should be provided.') + throw new Error("sessionID or sessionValidationModule should be provided."); } - return sessionSignerData + return sessionSignerData; } /** @@ -219,7 +204,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns */ async updateSessionStatus(param: SessionSearchParam, status: SessionStatus) { - this.sessionStorageClient.updateSessionStatus(param, status) + this.sessionStorageClient.updateSessionStatus(param, status); } /** @@ -227,21 +212,21 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns */ async clearPendingSessions() { - this.sessionStorageClient.clearPendingSessions() + this.sessionStorageClient.clearPendingSessions(); } /** * @returns SessionKeyManagerModule address */ getAddress(): string { - return this.moduleAddress + return this.moduleAddress; } /** * @remarks This is the version of the module contract */ async getSigner(): Promise { - throw new Error('Method not implemented.') + throw new Error("Method not implemented."); } /** @@ -251,55 +236,52 @@ export class SessionKeyManagerModule extends BaseValidationModule { // Review // instead of search params it could be actual leaf info retrieved beforehand async getDummySignature(params?: ModuleInfo): Promise { - Logger.log('moduleInfo ', params) + Logger.log("moduleInfo ", params); if (!params) { - throw new Error('Session signer is not provided.') + throw new Error("Session signer is not provided."); } - const sessionSignerData = await this.getLeafInfo(params) + const sessionSignerData = await this.getLeafInfo(params); const leafDataHex = hexConcat([ hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), hexZeroPad(sessionSignerData.sessionValidationModule, 20), - sessionSignerData.sessionKeyData - ]) + sessionSignerData.sessionKeyData, + ]); // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) let paddedSignature = defaultAbiCoder.encode( - ['uint48', 'uint48', 'address', 'bytes', 'bytes32[]', 'bytes'], + ["uint48", "uint48", "address", "bytes", "bytes32[]", "bytes"], [ sessionSignerData.validUntil, sessionSignerData.validAfter, sessionSignerData.sessionValidationModule, sessionSignerData.sessionKeyData, this.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer), - this.mockEcdsaSessionKeySig - ] - ) + this.mockEcdsaSessionKeySig, + ], + ); if (params?.additionalSessionData) { - paddedSignature += params.additionalSessionData + paddedSignature += params.additionalSessionData; } - const dummySig = ethers.utils.defaultAbiCoder.encode( - ['bytes', 'address'], - [paddedSignature, this.getAddress()] - ) + const dummySig = ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [paddedSignature, this.getAddress()]); - return dummySig + return dummySig; } /** * @remarks Other modules may need additional attributes to build init data */ async getInitData(): Promise { - throw new Error('Method not implemented.') + throw new Error("Method not implemented."); } /** * @remarks This Module dont have knowledge of signer. So, this method is not implemented */ async signMessage(message: Bytes | string): Promise { - Logger.log('message', message) - throw new Error('Method not implemented.') + Logger.log("message", message); + throw new Error("Method not implemented."); } } diff --git a/packages/modules/src/index.ts b/packages/modules/src/index.ts index a6eba07bd..f51916377 100644 --- a/packages/modules/src/index.ts +++ b/packages/modules/src/index.ts @@ -1,11 +1,11 @@ -export * from './utils/Types' -export * from './utils/Constants' -export * from './interfaces/IValidationModule' -export * from './interfaces/ISessionValidationModule' -export * from './BaseValidationModule' -export * from './ECDSAOwnershipValidationModule' -export * from './MultichainValidationModule' -export * from './SessionKeyManagerModule' -export * from './BatchedSessionRouterModule' -export * from './session-validation-modules/ERC20SessionValidationModule' +export * from "./utils/Types"; +export * from "./utils/Constants"; +export * from "./interfaces/IValidationModule"; +export * from "./interfaces/ISessionValidationModule"; +export * from "./BaseValidationModule"; +export * from "./ECDSAOwnershipValidationModule"; +export * from "./MultichainValidationModule"; +export * from "./SessionKeyManagerModule"; +export * from "./BatchedSessionRouterModule"; +export * from "./session-validation-modules/ERC20SessionValidationModule"; // export * from './PasskeyValidationModule' diff --git a/packages/modules/src/interfaces/ISessionStorage.ts b/packages/modules/src/interfaces/ISessionStorage.ts index 756b25073..69eb31225 100644 --- a/packages/modules/src/interfaces/ISessionStorage.ts +++ b/packages/modules/src/interfaces/ISessionStorage.ts @@ -1,83 +1,83 @@ -import { Wallet, Signer } from 'ethers' +import { Wallet, Signer } from "ethers"; -export type SessionStatus = 'PENDING' | 'ACTIVE' | 'INACTIVE' | 'EXPIRED' +export type SessionStatus = "PENDING" | "ACTIVE" | "INACTIVE" | "EXPIRED"; export type SessionLeafNode = { - validUntil: number - validAfter: number - sessionValidationModule: string - sessionKeyData: string - sessionPublicKey: string - sessionID?: string - status: SessionStatus -} + validUntil: number; + validAfter: number; + sessionValidationModule: string; + sessionKeyData: string; + sessionPublicKey: string; + sessionID?: string; + status: SessionStatus; +}; export type SessionSearchParam = { - sessionID?: string - sessionPublicKey?: string - sessionValidationModule?: string - status?: SessionStatus -} + sessionID?: string; + sessionPublicKey?: string; + sessionValidationModule?: string; + status?: SessionStatus; +}; export interface ISessionStorage { /** * Adds a session leaf node to the session storage * @param leaf SessionLeafNode to be added to the session storage */ - addSessionData(leaf: SessionLeafNode): Promise + addSessionData(leaf: SessionLeafNode): Promise; /** * Fetch a session leaf node from the session storage * @param param SessionSearchParam to be used to fetch the session leaf node */ - getSessionData(param: SessionSearchParam): Promise + getSessionData(param: SessionSearchParam): Promise; /** * Updates the session status of a session leaf node in the session storage * @param param SessionSearchParam to be used to fetch the session leaf node * @param status New session status to be updated */ - updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise + updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise; /** * Clears all the pending sessions from the session storage */ - clearPendingSessions(): Promise + clearPendingSessions(): Promise; /** * If a signer object is passed, it will be added to the session storage * If no signer object is passed, it'll create a random signer and add it to the session storage * @param signer Optional signer to be added to the session storage */ - addSigner(signer?: Wallet): Promise + addSigner(signer?: Wallet): Promise; /** * Fetch a signer from the session storage * @param signerPublicKey Public key of the signer to be fetched */ - getSignerByKey(signerPublicKey: string): Promise + getSignerByKey(signerPublicKey: string): Promise; /** * Fetch a signer from the session storage based on the session search param * @param param SessionSearchParam to be used to fetch the signer */ - getSignerBySession(param: SessionSearchParam): Promise + getSignerBySession(param: SessionSearchParam): Promise; /** * Fetch all the session leaf nodes from the session storage based on the session search param. * If no param is passed, it'll fetch all the session leaf nodes from the session storage * @param param SessionSearchParam to be used to fetch the session leaf nodes */ - getAllSessionData(param?: SessionSearchParam): Promise + getAllSessionData(param?: SessionSearchParam): Promise; /** * Fetch merkle root from the session storage */ - getMerkleRoot(): Promise + getMerkleRoot(): Promise; /** * Set merkle root in the session storage * @param merkleRoot Merkle root to be set in the session storage */ - setMerkleRoot(merkleRoot: string): Promise + setMerkleRoot(merkleRoot: string): Promise; } diff --git a/packages/modules/src/interfaces/ISessionValidationModule.ts b/packages/modules/src/interfaces/ISessionValidationModule.ts index e38cdb229..0aa488013 100644 --- a/packages/modules/src/interfaces/ISessionValidationModule.ts +++ b/packages/modules/src/interfaces/ISessionValidationModule.ts @@ -9,6 +9,6 @@ * @author Sachin Tomar */ export interface ISessionValidationModule { - getSessionKeyData(sessionData: T): Promise - getAddress(): string + getSessionKeyData(sessionData: T): Promise; + getAddress(): string; } diff --git a/packages/modules/src/interfaces/IValidationModule.ts b/packages/modules/src/interfaces/IValidationModule.ts index 1192ce8cd..cc94e4187 100644 --- a/packages/modules/src/interfaces/IValidationModule.ts +++ b/packages/modules/src/interfaces/IValidationModule.ts @@ -1,11 +1,11 @@ -import { Signer } from 'ethers' -import { Bytes } from 'ethers/lib/utils' +import { Signer } from "ethers"; +import { Bytes } from "ethers/lib/utils"; export interface IValidationModule { - getAddress(): string - getInitData(): Promise - getSigner(): Promise - signUserOpHash(userOpHash: string): Promise - signMessage(message: Bytes | string): Promise - getDummySignature(): Promise + getAddress(): string; + getInitData(): Promise; + getSigner(): Promise; + signUserOpHash(userOpHash: string): Promise; + signMessage(message: Bytes | string): Promise; + getDummySignature(): Promise; } diff --git a/packages/modules/src/session-storage/SessionLocalStorage.ts b/packages/modules/src/session-storage/SessionLocalStorage.ts index dfd1438c7..a81fdeea0 100644 --- a/packages/modules/src/session-storage/SessionLocalStorage.ts +++ b/packages/modules/src/session-storage/SessionLocalStorage.ts @@ -1,155 +1,148 @@ -import { Wallet, Signer } from 'ethers' -import { - ISessionStorage, - SessionLeafNode, - SessionSearchParam, - SessionStatus -} from 'interfaces/ISessionStorage' +import { Wallet, Signer } from "ethers"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "interfaces/ISessionStorage"; export class SessionLocalStorage implements ISessionStorage { - private smartAccountAddress: string + private smartAccountAddress: string; constructor(smartAccountAddress: string) { - this.smartAccountAddress = smartAccountAddress.toLowerCase() + this.smartAccountAddress = smartAccountAddress.toLowerCase(); } private validateSearchParam(param: SessionSearchParam): void { if (param.sessionID) { - return + return; } else if (!param.sessionID && param.sessionPublicKey && param.sessionValidationModule) { - return + return; } else { - throw new Error( - 'Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address.' - ) + throw new Error("Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address."); } } private getSessionStore(): any { - const data = localStorage.getItem(this.getStorageKey('sessions')) - return data ? JSON.parse(data) : { merkleRoot: '', leafNodes: [] } + const data = localStorage.getItem(this.getStorageKey("sessions")); + return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] }; } private getSignerStore(): any { - const data = localStorage.getItem(this.getStorageKey('signers')) - return data ? JSON.parse(data) : {} + const data = localStorage.getItem(this.getStorageKey("signers")); + return data ? JSON.parse(data) : {}; } - private getStorageKey(type: 'sessions' | 'signers'): string { - return `${this.smartAccountAddress}_${type}` + private getStorageKey(type: "sessions" | "signers"): string { + return `${this.smartAccountAddress}_${type}`; } private toLowercaseAddress(address: string): string { - return address.toLowerCase() + return address.toLowerCase(); } async addSessionData(leaf: SessionLeafNode): Promise { - const data = this.getSessionStore() - leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule) - leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey) - data.leafNodes.push(leaf) - localStorage.setItem(this.getStorageKey('sessions'), JSON.stringify(data)) + const data = this.getSessionStore(); + leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule); + leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey); + data.leafNodes.push(leaf); + localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } async getSessionData(param: SessionSearchParam): Promise { - this.validateSearchParam(param) + this.validateSearchParam(param); - const sessions = this.getSessionStore().leafNodes + const sessions = this.getSessionStore().leafNodes; const session = sessions.find((s: SessionLeafNode) => { if (param.sessionID) { - return s.sessionID === param.sessionID && (!param.status || s.status === param.status) + return s.sessionID === param.sessionID && (!param.status || s.status === param.status); } else if (param.sessionPublicKey && param.sessionValidationModule) { return ( s.sessionPublicKey === this.toLowercaseAddress(param.sessionPublicKey) && s.sessionValidationModule === this.toLowercaseAddress(param.sessionValidationModule) && (!param.status || s.status === param.status) - ) + ); } else { - return undefined + return undefined; } - }) + }); if (!session) { - throw new Error('Session not found.') + throw new Error("Session not found."); } - return session + return session; } async updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise { - this.validateSearchParam(param) + this.validateSearchParam(param); - const data = this.getSessionStore() + const data = this.getSessionStore(); const session = data.leafNodes.find((s: SessionLeafNode) => { if (param.sessionID) { - return s.sessionID === param.sessionID + return s.sessionID === param.sessionID; } else if (param.sessionPublicKey && param.sessionValidationModule) { return ( s.sessionPublicKey === this.toLowercaseAddress(param.sessionPublicKey) && s.sessionValidationModule === this.toLowercaseAddress(param.sessionValidationModule) - ) + ); } else { - return undefined + return undefined; } - }) + }); if (!session) { - throw new Error('Session not found.') + throw new Error("Session not found."); } - session.status = status - localStorage.setItem(this.getStorageKey('sessions'), JSON.stringify(data)) + session.status = status; + localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } async clearPendingSessions(): Promise { - const data = this.getSessionStore() - data.leafNodes = data.leafNodes.filter((s: SessionLeafNode) => s.status !== 'PENDING') - localStorage.setItem(this.getStorageKey('sessions'), JSON.stringify(data)) + const data = this.getSessionStore(); + data.leafNodes = data.leafNodes.filter((s: SessionLeafNode) => s.status !== "PENDING"); + localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } async addSigner(signer?: Wallet): Promise { - const signers = this.getSignerStore() + const signers = this.getSignerStore(); if (!signer) { - signer = Wallet.createRandom() + signer = Wallet.createRandom(); } signers[this.toLowercaseAddress(signer.publicKey)] = { privateKey: signer.privateKey, - publicKey: signer.publicKey - } - localStorage.setItem(this.getStorageKey('signers'), JSON.stringify(signers)) - return signer + publicKey: signer.publicKey, + }; + localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)); + return signer; } async getSignerByKey(sessionPublicKey: string): Promise { - const signers = this.getSignerStore() - const signerData = signers[this.toLowercaseAddress(sessionPublicKey)] + const signers = this.getSignerStore(); + const signerData = signers[this.toLowercaseAddress(sessionPublicKey)]; if (!signerData) { - throw new Error('Signer not found.') + throw new Error("Signer not found."); } - const signer = new Wallet(signerData.privateKey) - return signer + const signer = new Wallet(signerData.privateKey); + return signer; } async getSignerBySession(param: SessionSearchParam): Promise { - const session = await this.getSessionData(param) - return this.getSignerByKey(session.sessionPublicKey) + const session = await this.getSessionData(param); + return this.getSignerByKey(session.sessionPublicKey); } async getAllSessionData(param?: SessionSearchParam): Promise { - const sessions = this.getSessionStore().leafNodes + const sessions = this.getSessionStore().leafNodes; if (!param || !param.status) { - return sessions + return sessions; } - return sessions.filter((s: SessionLeafNode) => s.status === param.status) + return sessions.filter((s: SessionLeafNode) => s.status === param.status); } async getMerkleRoot(): Promise { - return this.getSessionStore().merkleRoot + return this.getSessionStore().merkleRoot; } setMerkleRoot(merkleRoot: string): Promise { - const data = this.getSessionStore() - data.merkleRoot = merkleRoot - localStorage.setItem(this.getStorageKey('sessions'), JSON.stringify(data)) - return Promise.resolve() + const data = this.getSessionStore(); + data.merkleRoot = merkleRoot; + localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); + return Promise.resolve(); } } diff --git a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts index 8972bea11..eee1c6a1e 100644 --- a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts +++ b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts @@ -1,6 +1,6 @@ -import { defaultAbiCoder } from 'ethers/lib/utils' -import { ISessionValidationModule } from 'interfaces/ISessionValidationModule' -import { ERC20SessionKeyData, SessionValidationModuleConfig } from 'utils/Types' +import { defaultAbiCoder } from "ethers/lib/utils"; +import { ISessionValidationModule } from "interfaces/ISessionValidationModule"; +import { ERC20SessionKeyData, SessionValidationModuleConfig } from "utils/Types"; /** * Session validation module for ERC20 token transfers. @@ -9,8 +9,9 @@ import { ERC20SessionKeyData, SessionValidationModuleConfig } from 'utils/Types' * @author Sachin Tomar */ export class ERC20SessionValidationModule implements ISessionValidationModule { - moduleAddress!: string - version = 'V1_0_0' + moduleAddress!: string; + + version = "V1_0_0"; /** * This constructor is private. Use the static create method to instantiate ERC20SessionValidationModule @@ -19,9 +20,9 @@ export class ERC20SessionValidationModule implements ISessionValidationModule { - const module = new ERC20SessionValidationModule(moduleConfig) - return module + public static async create(moduleConfig: SessionValidationModuleConfig): Promise { + const module = new ERC20SessionValidationModule(moduleConfig); + return module; } async getSessionKeyData(sessionData: ERC20SessionKeyData): Promise { - this._validateSessionKeyData(sessionData) + this._validateSessionKeyData(sessionData); const sessionKeyData = defaultAbiCoder.encode( - ['address', 'address', 'address', 'uint256'], - [sessionData.sessionKey, sessionData.token, sessionData.recipient, sessionData.maxAmount] - ) - return sessionKeyData + ["address", "address", "address", "uint256"], + [sessionData.sessionKey, sessionData.token, sessionData.recipient, sessionData.maxAmount], + ); + return sessionKeyData; } private _validateSessionKeyData(sessionData: ERC20SessionKeyData): void { if (!sessionData) { - throw new Error('Session data is required') + throw new Error("Session data is required"); } if (!sessionData.sessionKey) { - throw new Error('Session key is required in sessionData') + throw new Error("Session key is required in sessionData"); } if (!sessionData.token) { - throw new Error('Token address is required in sessionData') + throw new Error("Token address is required in sessionData"); } if (!sessionData.recipient) { - throw new Error('Recipient address is required in sessionData') + throw new Error("Recipient address is required in sessionData"); } if (!sessionData.maxAmount) { - throw new Error('MaxAmount is required in sessionData') + throw new Error("MaxAmount is required in sessionData"); } } getAddress(): string { - return this.moduleAddress + return this.moduleAddress; } } diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts index ebd8a3108..dcab3cc0a 100644 --- a/packages/modules/src/utils/Constants.ts +++ b/packages/modules/src/utils/Constants.ts @@ -1,51 +1,51 @@ -import { ModuleVersion } from './Types' +import { ModuleVersion } from "./Types"; -export const DEFAULT_MODULE_VERSION: ModuleVersion = 'V1_0_0' +export const DEFAULT_MODULE_VERSION: ModuleVersion = "V1_0_0"; -export const DEFAULT_ENTRYPOINT_ADDRESS = '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789' +export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; export const ENTRYPOINT_ADDRESSES = { - '0x27a4db290b89ae3373ce4313cbeae72112ae7da9': 'V0_0_5', - '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789': 'V0_0_6' -} + "0x27a4db290b89ae3373ce4313cbeae72112ae7da9": "V0_0_5", + "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789": "V0_0_6", +}; export const ENTRYPOINT_ADDRESSES_BY_VERSION = { - V0_0_5: '0x27a4db290b89ae3373ce4313cbeae72112ae7da9', - V0_0_6: '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789' -} + V0_0_5: "0x27a4db290b89ae3373ce4313cbeae72112ae7da9", + V0_0_6: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", +}; // Review: If we should append these defaults with ADDRESS suffix -export const DEFAULT_ECDSA_OWNERSHIP_MODULE = '0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e' +export const DEFAULT_ECDSA_OWNERSHIP_MODULE = "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e"; export const ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: '0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e' -} + V1_0_0: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e", +}; -export const DEFAULT_SESSION_KEY_MANAGER_MODULE = '0x000002FbFfedd9B33F4E7156F2DE8D48945E7489' +export const DEFAULT_SESSION_KEY_MANAGER_MODULE = "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489"; export const SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: '0x000000456b395c4e107e0302553B90D1eF4a32e9', - V1_0_1: '0x000002FbFfedd9B33F4E7156F2DE8D48945E7489' -} + V1_0_0: "0x000000456b395c4e107e0302553B90D1eF4a32e9", + V1_0_1: "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489", +}; -export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = '0x000008dA71757C0E1D83CE56c823e25Aa49bC058' +export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = "0x000008dA71757C0E1D83CE56c823e25Aa49bC058"; export const BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: '0x000008dA71757C0E1D83CE56c823e25Aa49bC058' -} + V1_0_0: "0x000008dA71757C0E1D83CE56c823e25Aa49bC058", +}; -export const DEFAULT_MULTICHAIN_MODULE = '0x000000824dc138db84FD9109fc154bdad332Aa8E' +export const DEFAULT_MULTICHAIN_MODULE = "0x000000824dc138db84FD9109fc154bdad332Aa8E"; export const MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: '0x000000824dc138db84FD9109fc154bdad332Aa8E' -} + V1_0_0: "0x000000824dc138db84FD9109fc154bdad332Aa8E", +}; // similarly others here or in module / signer classes // Mapping / Reverse mapping of version -> module address can be kept here export const ERC20_ABI = [ - 'function transfer(address to, uint256 value) external returns (bool)', - 'function transferFrom(address from, address to, uint256 value) external returns (bool)', - 'function approve(address spender, uint256 value) external returns (bool)', - 'function allowance(address owner, address spender) external view returns (uint256)', - 'function balanceOf(address owner) external view returns (uint256)' -] + "function transfer(address to, uint256 value) external returns (bool)", + "function transferFrom(address from, address to, uint256 value) external returns (bool)", + "function approve(address spender, uint256 value) external returns (bool)", + "function allowance(address owner, address spender) external view returns (uint256)", + "function balanceOf(address owner) external view returns (uint256)", +]; diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 2fc578355..0637fdd8a 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,40 +1,40 @@ -import { ChainId, UserOperation } from '@biconomy/core-types' -import { Signer } from 'ethers' -import { SessionKeyManagerModule } from '../SessionKeyManagerModule' +import { ChainId, UserOperation } from "@biconomy/core-types"; +import { Signer } from "ethers"; +import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; -export type ModuleVersion = 'V1_0_0' // | 'V1_0_1' +export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' export interface BaseValidationModuleConfig { - entryPointAddress?: string + entryPointAddress?: string; } export interface ECDSAOwnershipValidationModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string - version?: ModuleVersion - signer: Signer + moduleAddress?: string; + version?: ModuleVersion; + signer: Signer; } export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string - version?: ModuleVersion + moduleAddress?: string; + version?: ModuleVersion; // Review // sessionSigner?: Signer // sessionPubKey?: string - nodeClientUrl?: string - smartAccountAddress: string - storageType?: StorageType + nodeClientUrl?: string; + smartAccountAddress: string; + storageType?: StorageType; } export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string - version?: ModuleVersion + moduleAddress?: string; + version?: ModuleVersion; - sessionKeyManagerModule?: SessionKeyManagerModule // could be BaseValidationModule + sessionKeyManagerModule?: SessionKeyManagerModule; // could be BaseValidationModule - sessionManagerModuleAddress?: string - nodeClientUrl?: string - smartAccountAddress: string - storageType?: StorageType + sessionManagerModuleAddress?: string; + nodeClientUrl?: string; + smartAccountAddress: string; + storageType?: StorageType; // sessionSigner?: Signer // sessionPubKey?: string @@ -42,57 +42,57 @@ export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleCo } export enum StorageType { - LOCAL_STORAGE + LOCAL_STORAGE, } export type SessionParams = { - sessionID?: string - sessionSigner: Signer - sessionValidationModule?: string - additionalSessionData?: string -} + sessionID?: string; + sessionSigner: Signer; + sessionValidationModule?: string; + additionalSessionData?: string; +}; export type ModuleInfo = { // Could be a full object of below params and that way it can be an array too! // sessionParams?: SessionParams[] // where SessionParams is below four - sessionID?: string - sessionSigner?: Signer - sessionValidationModule?: string - additionalSessionData?: string - batchSessionParams?: SessionParams[] -} + sessionID?: string; + sessionSigner?: Signer; + sessionValidationModule?: string; + additionalSessionData?: string; + batchSessionParams?: SessionParams[]; +}; export interface CreateSessionDataParams { - validUntil: number - validAfter: number - sessionValidationModule: string - sessionPublicKey: string - sessionKeyData: string + validUntil: number; + validAfter: number; + sessionValidationModule: string; + sessionPublicKey: string; + sessionKeyData: string; } export interface MultiChainValidationModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string - version?: ModuleVersion - signer: Signer + moduleAddress?: string; + version?: ModuleVersion; + signer: Signer; } export type MultiChainUserOpDto = { - validUntil?: number - validAfter?: number - chainId: ChainId - userOp: Partial -} + validUntil?: number; + validAfter?: number; + chainId: ChainId; + userOp: Partial; +}; export interface BaseSessionKeyData { - sessionKey: string + sessionKey: string; } export interface ERC20SessionKeyData extends BaseSessionKeyData { - token: string - recipient: string - maxAmount: string + token: string; + recipient: string; + maxAmount: string; } export interface SessionValidationModuleConfig { - moduleAddress: string + moduleAddress: string; } diff --git a/packages/modules/src/utils/Uid.ts b/packages/modules/src/utils/Uid.ts index 2b1a3ac39..db4ff03ab 100644 --- a/packages/modules/src/utils/Uid.ts +++ b/packages/modules/src/utils/Uid.ts @@ -1,12 +1,12 @@ // small uid generator, hex: 0-9, a-f (10 chars) export const generateRandomHex = () => { - const hexChars = '0123456789abcdef' - let result = '' + const hexChars = "0123456789abcdef"; + let result = ""; for (let i = 0; i < 10; i++) { - const randomIndex = Math.floor(Math.random() * hexChars.length) - result += hexChars[randomIndex] + const randomIndex = Math.floor(Math.random() * hexChars.length); + result += hexChars[randomIndex]; } - return result -} + return result; +}; From c93600c316cceefda867ec4745132d1bdf55a3b6 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:00:20 +0400 Subject: [PATCH 0826/1247] lint fixes --- .../modules/src/BatchedSessionRouterModule.ts | 14 ++++---- .../modules/src/SessionKeyManagerModule.ts | 36 ++++++++----------- packages/modules/src/utils/Types.ts | 18 +++++----- 3 files changed, 30 insertions(+), 38 deletions(-) diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 5938a61be..bb7c37fb6 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -1,8 +1,8 @@ -import { Signer, ethers } from 'ethers' -import MerkleTree from 'merkletreejs' -import { NODE_CLIENT_URL, Logger } from '@biconomy/common' -import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from 'ethers/lib/utils' -import { keccak256 } from 'ethereumjs-util' +import { Signer, ethers } from "ethers"; +import MerkleTree from "merkletreejs"; +import { NODE_CLIENT_URL, Logger } from "@biconomy/common"; +import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from "ethers/lib/utils"; +import { keccak256 } from "ethereumjs-util"; import { ModuleVersion, CreateSessionDataParams, @@ -10,8 +10,8 @@ import { SessionParams, BatchedSessionRouterModuleConfig, ModuleInfo, - CreateSessionDataResponse -} from './utils/Types' + CreateSessionDataResponse, +} from "./utils/Types"; import { BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION, SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index 7606ee2b0..776d6bbb9 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -1,31 +1,23 @@ -import { Signer, ethers } from 'ethers' -import MerkleTree from 'merkletreejs' -import { NODE_CLIENT_URL, Logger } from '@biconomy/common' -import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from 'ethers/lib/utils' -import { keccak256 } from 'ethereumjs-util' +import { Signer, ethers } from "ethers"; +import MerkleTree from "merkletreejs"; +import { NODE_CLIENT_URL, Logger } from "@biconomy/common"; +import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from "ethers/lib/utils"; +import { keccak256 } from "ethereumjs-util"; import { SessionKeyManagerModuleConfig, ModuleVersion, CreateSessionDataParams, StorageType, ModuleInfo, - CreateSessionDataResponse -} from './utils/Types' -import NodeClient from '@biconomy/node-client' -import INodeClient from '@biconomy/node-client' -import { - SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, - DEFAULT_SESSION_KEY_MANAGER_MODULE -} from './utils/Constants' -import { generateRandomHex } from './utils/Uid' -import { BaseValidationModule } from './BaseValidationModule' -import { SessionLocalStorage } from './session-storage/SessionLocalStorage' -import { - ISessionStorage, - SessionLeafNode, - SessionSearchParam, - SessionStatus -} from './interfaces/ISessionStorage' + CreateSessionDataResponse, +} from "./utils/Types"; +import NodeClient from "@biconomy/node-client"; +import INodeClient from "@biconomy/node-client"; +import { SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "./utils/Constants"; +import { generateRandomHex } from "./utils/Uid"; +import { BaseValidationModule } from "./BaseValidationModule"; +import { SessionLocalStorage } from "./session-storage/SessionLocalStorage"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; export class SessionKeyManagerModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 8b2ee3e99..3b930b6ff 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -63,17 +63,17 @@ export type ModuleInfo = { }; export type CreateSessionDataResponse = { - data: string - sessionIDInfo: Array -} + data: string; + sessionIDInfo: Array; +}; export interface CreateSessionDataParams { - validUntil: number - validAfter: number - sessionValidationModule: string - sessionPublicKey: string - sessionKeyData: string - preferredSessionId?: string + validUntil: number; + validAfter: number; + sessionValidationModule: string; + sessionPublicKey: string; + sessionKeyData: string; + preferredSessionId?: string; } export interface MultiChainValidationModuleConfig extends BaseValidationModuleConfig { From e0e7d1919b51c77c31bab3626913e58d99561d10 Mon Sep 17 00:00:00 2001 From: aboudjem Date: Wed, 13 Sep 2023 17:49:56 +0700 Subject: [PATCH 0827/1247] =?UTF-8?q?=F0=9F=90=9B=20fix=20issues=20on=20ht?= =?UTF-8?q?tpRequests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/common/src/httpRequests.ts | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/common/src/httpRequests.ts b/packages/common/src/httpRequests.ts index 99bb0366a..784f80919 100644 --- a/packages/common/src/httpRequests.ts +++ b/packages/common/src/httpRequests.ts @@ -15,6 +15,13 @@ interface HttpRequest { headers?: object; } +interface JsonResponse { + result?: any; + error?: string | { code?: number; message?: string; handleOpsCallData?: any }; + message?: string; + msg?: string; +} + export async function sendRequest({ url, method, body, headers = {} }: HttpRequest): Promise { Logger.log("jsonRpc request body ", JSON.stringify(body)); const response = await fetch(url, { @@ -27,14 +34,21 @@ export async function sendRequest({ url, method, body, headers = {} }: HttpRe body: JSON.stringify(body), }); - let jsonResponse; + let jsonResponse: JsonResponse | undefined; try { - jsonResponse = await response.json(); + jsonResponse = await response.json() as JsonResponse; } catch (error) { if (!response.ok) { throw new Error(response.statusText); } } + + + if (!jsonResponse) { + // Handle the case where jsonResponse is undefined + throw new Error("No response received."); + } + Logger.log("jsonRpc response ", jsonResponse); if (response.ok) { @@ -54,8 +68,8 @@ export async function sendRequest({ url, method, body, headers = {} }: HttpRe throw errorObject; } else if (typeof jsonResponse.error === "object") { const error = jsonResponse.error; - errorObject.code = error?.code; - errorObject.message = error?.message; + errorObject.code = error?.code || 0; + errorObject.message = error?.message || "Unknown Error"; errorObject.data = error?.handleOpsCallData; throw errorObject; } From fff2225ce24743d5054471b78efe94e3f408d2e4 Mon Sep 17 00:00:00 2001 From: aboudjem Date: Wed, 13 Sep 2023 19:15:35 +0700 Subject: [PATCH 0828/1247] =?UTF-8?q?=F0=9F=91=B7=20fix=20issues=20on=20bu?= =?UTF-8?q?ild?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/account/src/BiconomySmartAccount.ts | 2 ++ packages/account/src/SmartAccount.ts | 2 ++ packages/common/src/httpRequests.ts | 3 +-- packages/paymaster/src/BiconomyPaymaster.ts | 4 +++- packages/web3-auth-native/src/SocialLogin.ts | 4 +++- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index ff09de4ea..24306927a 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -1,3 +1,5 @@ +// @ts-nocheck + import { JsonRpcProvider } from "@ethersproject/providers"; import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; import { SmartAccount } from "./SmartAccount"; diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index 154a77748..f4120d189 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -1,3 +1,5 @@ +// @ts-nocheck + import { JsonRpcProvider } from "@ethersproject/providers"; import { BigNumber, Signer, BytesLike } from "ethers"; import { ISmartAccount } from "./interfaces/ISmartAccount"; diff --git a/packages/common/src/httpRequests.ts b/packages/common/src/httpRequests.ts index 784f80919..d4923d2b6 100644 --- a/packages/common/src/httpRequests.ts +++ b/packages/common/src/httpRequests.ts @@ -36,14 +36,13 @@ export async function sendRequest({ url, method, body, headers = {} }: HttpRe let jsonResponse: JsonResponse | undefined; try { - jsonResponse = await response.json() as JsonResponse; + jsonResponse = (await response.json()) as JsonResponse; } catch (error) { if (!response.ok) { throw new Error(response.statusText); } } - if (!jsonResponse) { // Handle the case where jsonResponse is undefined throw new Error("No response received."); diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index cb361bb0a..699167301 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -108,9 +108,11 @@ export class BiconomyPaymaster implements IHybridPaymaster { - const result = await this.request('logout', options.redirectUrl, options) + const redirectUrl = options.redirectUrl || '/' + const result = await this.request('logout', redirectUrl, options) + if (result.type !== 'success' || !result.url) { log.error(`[Web3Auth] logout flow failed with error type ${result.type}`) throw new Error(`logout flow failed with error type ${result.type}`) From ec184bfeb8d344e28fb27231bd5b5adfcedf1beb Mon Sep 17 00:00:00 2001 From: aboudjem Date: Wed, 13 Sep 2023 19:15:56 +0700 Subject: [PATCH 0829/1247] =?UTF-8?q?=F0=9F=94=A5=20remove=20unused=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/web3-auth-native/.eslintignore | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 packages/web3-auth-native/.eslintignore diff --git a/packages/web3-auth-native/.eslintignore b/packages/web3-auth-native/.eslintignore deleted file mode 100644 index e4b7bcb14..000000000 --- a/packages/web3-auth-native/.eslintignore +++ /dev/null @@ -1,23 +0,0 @@ -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# dependencies -/node_modules - -# testing -/coverage - -#production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* -src/types -dist/ \ No newline at end of file From 3e030b0d71c3b1a62090dbf21017934fcdddd4a7 Mon Sep 17 00:00:00 2001 From: aboudjem Date: Wed, 13 Sep 2023 19:16:13 +0700 Subject: [PATCH 0830/1247] =?UTF-8?q?=F0=9F=94=A7=20fix=20ts=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/web3-auth-native/tsconfig.json | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/packages/web3-auth-native/tsconfig.json b/packages/web3-auth-native/tsconfig.json index 86fa58e80..eb424084f 100644 --- a/packages/web3-auth-native/tsconfig.json +++ b/packages/web3-auth-native/tsconfig.json @@ -1,21 +1,12 @@ { + "extends": "../../tsconfig.settings.json", "compilerOptions": { - "rootDir": "src", - "moduleResolution": "node", - "strict": false, - "module": "es6", - "target": "es6", - "lib": ["ES2020", "DOM"], - "sourceMap": true, - "esModuleInterop": true, - "noImplicitThis": true, - "declaration": true, - "declarationDir": "./types", - "outDir": "./dist", - "allowSyntheticDefaultImports": true, - "skipLibCheck": true, - "resolveJsonModule": true + "jsx": "react", + "composite": true, + "outDir": "dist", + "baseUrl": "src", + "resolveJsonModule": true, + "esModuleInterop": true }, - "include": ["./src/**/*"], - "exclude": ["node_modules", "dist"] + "include": ["src", "src/**/*.json"] } From 9c9c37f33c5d08fd889cab190c921a7b3ad001ab Mon Sep 17 00:00:00 2001 From: aboudjem Date: Wed, 13 Sep 2023 19:16:29 +0700 Subject: [PATCH 0831/1247] =?UTF-8?q?=F0=9F=93=A6=20update=20packages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/web3-auth-native/package.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/web3-auth-native/package.json b/packages/web3-auth-native/package.json index 37ecae8bf..077619aa1 100644 --- a/packages/web3-auth-native/package.json +++ b/packages/web3-auth-native/package.json @@ -40,7 +40,7 @@ "base64url": "^3.0.1", "buffer": "^6.0.3", "loglevel": "^1.8.1", - "react-native-url-polyfill": "^1.3.0" + "react-native-url-polyfill": "^2.0.0" }, "peerDependencies": { "@babel/runtime": "^7.x", @@ -59,13 +59,13 @@ "eslint-plugin-n": "^15.5.1", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-simple-import-sort": "^8.0.0", + "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-tsdoc": "^0.2.17", - "husky": "^8.0.2", - "lint-staged": "^13.0.3", - "prettier": "^2.8.0", - "react-native": "~0.68.2", - "rimraf": "^3.0.2", - "typescript": "^4.9.3" + "husky": "^8.0.3", + "lint-staged": "^14.0.1", + "prettier": "^3.0.3", + "react-native": "~0.72.4", + "rimraf": "^5.0.1", + "typescript": "^5.2.2" } } From f667ebb03a963a7de2cbbbbb51f7701ac62e1370 Mon Sep 17 00:00:00 2001 From: aboudjem Date: Wed, 13 Sep 2023 19:51:45 +0700 Subject: [PATCH 0832/1247] =?UTF-8?q?=F0=9F=92=A9=20disable=20eslint=20for?= =?UTF-8?q?=20specific=20lines?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/account/src/BiconomySmartAccount.ts | 1 + packages/account/src/SmartAccount.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 24306927a..40634e236 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck import { JsonRpcProvider } from "@ethersproject/providers"; diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index f4120d189..34433c345 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck import { JsonRpcProvider } from "@ethersproject/providers"; From d4278bfb1d4b45a1d91f0116e7b8963a0040ad3f Mon Sep 17 00:00:00 2001 From: aboudjem Date: Wed, 13 Sep 2023 20:02:49 +0700 Subject: [PATCH 0833/1247] =?UTF-8?q?=F0=9F=9A=A8=20add=20tsconfig.eslint.?= =?UTF-8?q?json=20to=20web3-auth-native?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/web3-auth-native/tsconfig.eslint.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 packages/web3-auth-native/tsconfig.eslint.json diff --git a/packages/web3-auth-native/tsconfig.eslint.json b/packages/web3-auth-native/tsconfig.eslint.json new file mode 100644 index 000000000..eced3c6c6 --- /dev/null +++ b/packages/web3-auth-native/tsconfig.eslint.json @@ -0,0 +1,3 @@ +{ + "extends": ["../../tsconfig.eslint.json"] +} From f1360106dd87034e8d18e2e689907bb8cecff0c6 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 13 Sep 2023 19:11:33 +0400 Subject: [PATCH 0834/1247] fix build --- packages/account/src/BaseSmartAccount.ts | 3 +++ packages/account/src/BiconomySmartAccountV2.ts | 3 +++ packages/account/tests/SmartAccountV2.local.spec.ts | 3 +++ packages/common/package.json | 1 - 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 1ba5900f2..77c2e3d08 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -1,3 +1,6 @@ +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-nocheck + import { JsonRpcProvider, Provider } from "@ethersproject/providers"; import { BigNumber, BigNumberish, Signer, BytesLike, ethers, Bytes } from "ethers"; import { IBaseSmartAccount } from "./interfaces/IBaseSmartAccount"; diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 2c8540f52..fc48e0db7 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1,3 +1,6 @@ +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-nocheck + import { JsonRpcProvider } from "@ethersproject/providers"; import { Signer } from "ethers"; import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 529d2e5aa..4e20f1fb4 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -1,3 +1,6 @@ +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-nocheck + import { EntryPoint, EntryPoint__factory, UserOperationStruct, SimpleAccountFactory__factory } from "@account-abstraction/contracts"; import { Wallet, ethers } from "ethers"; import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; diff --git a/packages/common/package.json b/packages/common/package.json index 137f8e901..a3364c834 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -51,7 +51,6 @@ "concurrently": "^7.4.0", "debug": "^4.3.4", "ethers": "^5.7.0", - "node-fetch": "^3.3.2", "typechain": "^8.1.1" }, "devDependencies": { From 9fb047534935b0600bd08a4de7e68fd91a8a089a Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 13 Sep 2023 13:53:02 -0400 Subject: [PATCH 0835/1247] fix: build errors --- packages/account/package.json | 3 ++- packages/account/src/BaseSmartAccount.ts | 29 ++++++++---------------- packages/core-types/package.json | 2 +- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index d959ab3d8..55a5f7252 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -43,6 +43,7 @@ "@biconomy/modules": "^3.1.1-alpha.0", "@biconomy/node-client": "^3.1.1-alpha.0", "@biconomy/paymaster": "^3.1.1-alpha.0", - "ethers": "^5.7.0" + "ethers": "^5.7.0", + "@ethersproject/providers": "^5.7.2" } } diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 77c2e3d08..dcec3f76f 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -1,21 +1,16 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck - import { JsonRpcProvider, Provider } from "@ethersproject/providers"; -import { BigNumber, BigNumberish, Signer, BytesLike, ethers, Bytes } from "ethers"; +import { BigNumber, BigNumberish, BytesLike, ethers, Bytes } from "ethers"; import { IBaseSmartAccount } from "./interfaces/IBaseSmartAccount"; -import { defaultAbiCoder, keccak256, arrayify, Result } from "ethers/lib/utils"; +import { defaultAbiCoder, keccak256 } from "ethers/lib/utils"; import { UserOperation, ChainId } from "@biconomy/core-types"; import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; -import { NotPromise, packUserOp } from "@biconomy/common"; +import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; -import { EntryPoint_v005, Logger } from "@biconomy/common"; import { BaseSmartAccountConfig, Overrides, TransactionDetailsForUserOp } from "./utils/Types"; import { GasOverheads } from "./utils/Preverificaiton"; import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; -import { RPC_PROVIDER_URLS } from "@biconomy/common"; type UserOperationKey = keyof UserOperation; @@ -275,6 +270,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { // Making call to bundler to get gas estimations for userOp const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas(userOp); + // if neither user sent gas fee nor the bundler, estimate gas from provider if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { const feeData = await this.provider.getFeeData(); finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); @@ -302,22 +298,17 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { // Review : usage trace of this method. in the order of init and methods called on the Account async isAccountDeployed(address: string): Promise { this.isProviderDefined(); - let contractCode; if (this.isDeployed !== undefined || this.isDeployed !== null) { // already deployed. no need to check anymore. return this.isDeployed; } - try { - contractCode = await this.provider.getCode(address); - if (contractCode.length > 2) { - this.isDeployed = true; - } else { - this.isDeployed = false; - } - return this.isDeployed; - } catch (error) { - throw error; + const contractCode = await this.provider.getCode(address); + if (contractCode.length > 2) { + this.isDeployed = true; + } else { + this.isDeployed = false; } + return this.isDeployed; } /** diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 6f0a60c9e..048d14207 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -39,7 +39,7 @@ "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.7.0", - "ethers": "^6.7.1", + "ethers": "^5.7.2", "web3-core": "^1.7.1" } } From 2135498896beb54d25add820c1521ffa22d5db7c Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 13 Sep 2023 14:28:50 -0400 Subject: [PATCH 0836/1247] fix: lint warning and errors --- packages/account/src/BaseSmartAccount.ts | 10 +++---- packages/account/src/BiconomySmartAccount.ts | 8 +++--- .../account/src/BiconomySmartAccountV2.ts | 27 +++++++------------ packages/account/src/SmartAccount.ts | 4 +-- .../src/interfaces/IBaseSmartAccount.ts | 17 ++++++------ .../src/interfaces/IBiconomySmartAccount.ts | 22 +++++++-------- .../account/src/interfaces/ISmartAccount.ts | 8 +++--- packages/account/src/utils/Types.ts | 2 +- packages/bundler/src/interfaces/IBundler.ts | 8 +++--- packages/bundler/src/utils/HelperFunction.ts | 3 +-- packages/bundler/src/utils/Types.ts | 2 +- packages/common/src/ContractsInstances.ts | 2 +- packages/common/src/Logger.ts | 1 + packages/common/src/httpRequests.ts | 1 - packages/modules/package.json | 8 +++--- packages/modules/src/BaseValidationModule.ts | 8 +++--- .../modules/src/BatchedSessionRouterModule.ts | 23 ++++------------ .../modules/src/interfaces/ISessionStorage.ts | 16 +++++------ .../interfaces/ISessionValidationModule.ts | 2 +- packages/node-client/src/INodeClient.ts | 20 +++++++------- .../src/interfaces/IHybridPaymaster.ts | 8 +++--- .../paymaster/src/interfaces/IPaymaster.ts | 4 +-- packages/transak/src/index.ts | 7 +++-- 23 files changed, 94 insertions(+), 117 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index dcec3f76f..113a1d486 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -72,7 +72,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { return this; } - setEntryPointAddress(entryPointAddress: string) { + setEntryPointAddress(entryPointAddress: string): void { this.entryPointAddress = entryPointAddress; } @@ -108,7 +108,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @param value * @param data */ - abstract encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise; + abstract encodeExecute(_to: string, _value: BigNumberish, _data: BytesLike): Promise; /** * encode the batch call from entryPoint through our account to the target contract. @@ -116,15 +116,15 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @param value * @param data */ - abstract encodeExecuteBatch(to: Array, value: Array, data: Array): Promise; + abstract encodeExecuteBatch(_to: Array, _value: Array, _data: Array): Promise; /** * sign a userOp's hash (userOpHash). * @param userOpHash */ - abstract signUserOpHash(userOpHash: string): Promise; + abstract signUserOpHash(_userOpHash: string): Promise; - abstract signMessage(message: Bytes | string): Promise; + abstract signMessage(_message: Bytes | string): Promise; /** * get dummy signature for userOp diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 6868528e1..2987224aa 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -119,7 +119,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart return true; } - private setProxyContractState() { + private setProxyContractState(): void { if (!BICONOMY_IMPLEMENTATION_ADDRESSES[this.smartAccountInfo.implementationAddress]) throw new Error( "Could not find attached implementation address against your smart account. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", @@ -133,7 +133,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart this.proxy = getSAProxyContract(proxyInstanceDto); } - private setEntryPointContractState() { + private setEntryPointContractState(): void { const _entryPointAddress = this.smartAccountInfo.entryPointAddress; this.setEntryPointAddress(_entryPointAddress); if (!ENTRYPOINT_ADDRESSES[_entryPointAddress]) @@ -149,7 +149,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart this.entryPoint = getEntryPointContract(entryPointInstanceDto); } - private setFactoryContractState() { + private setFactoryContractState(): void { const _factoryAddress = this.smartAccountInfo.factoryAddress; if (!BICONOMY_FACTORY_ADDRESSES[_factoryAddress]) throw new Error( @@ -164,7 +164,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart this.factory = getSAFactoryContract(factoryInstanceDto) as SmartAccountFactory_v100; } - private async setContractsState() { + private async setContractsState(): Promise { this.setProxyContractState(); this.setEntryPointContractState(); this.setFactoryContractState(); diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index fc48e0db7..3f58dd218 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1,26 +1,19 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck - import { JsonRpcProvider } from "@ethersproject/providers"; -import { Signer } from "ethers"; import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; import { BaseSmartAccount } from "./BaseSmartAccount"; -import { keccak256, Bytes, arrayify, hexConcat } from "ethers/lib/utils"; -import { Logger, NODE_CLIENT_URL, RPC_PROVIDER_URLS } from "@biconomy/common"; - +import { Bytes, hexConcat } from "ethers/lib/utils"; // Review failure reason for import from '@biconomy/account-contracts-v2/typechain' - -import { SmartAccount_v200, SmartAccountFactory_v200, SmartAccount_v200__factory, SmartAccountFactory_v200__factory } from "@biconomy/common"; - import { - Overrides, - BiconomyTokenPaymasterRequest, - BiconomySmartAccountV2Config, - CounterFactualAddressParam, - BuildUserOpOptions, -} from "./utils/Types"; + Logger, + NODE_CLIENT_URL, + SmartAccount_v200, + SmartAccountFactory_v200, + SmartAccount_v200__factory, + SmartAccountFactory_v200__factory, +} from "@biconomy/common"; +import { BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, CounterFactualAddressParam, BuildUserOpOptions } from "./utils/Types"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; -import { UserOperation, Transaction, SmartAccountType } from "@biconomy/core-types"; +import { UserOperation, Transaction } from "@biconomy/core-types"; import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index 1e261d5e0..7dcfec0f3 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -44,7 +44,7 @@ export abstract class SmartAccount implements ISmartAccount { this.smartAccountConfig = _smartAccountConfig; } - setEntryPointAddress(entryPointAddress: string) { + setEntryPointAddress(entryPointAddress: string): void { this.smartAccountConfig.entryPointAddress = entryPointAddress; } @@ -199,7 +199,7 @@ export abstract class SmartAccount implements ISmartAccount { return keccak256(enc); } - abstract getSmartAccountAddress(accountIndex: number): Promise; + abstract getSmartAccountAddress(_accountIndex: number): Promise; async estimateCreationGas(initCode: string): Promise { if (initCode == null || initCode === "0x") return BigNumber.from("0"); diff --git a/packages/account/src/interfaces/IBaseSmartAccount.ts b/packages/account/src/interfaces/IBaseSmartAccount.ts index 797af5536..64cc5fc92 100644 --- a/packages/account/src/interfaces/IBaseSmartAccount.ts +++ b/packages/account/src/interfaces/IBaseSmartAccount.ts @@ -1,23 +1,22 @@ import { UserOperation } from "@biconomy/core-types"; -import { UserOpResponse } from "@biconomy/bundler"; import { BigNumberish, Bytes, BytesLike, BigNumber } from "ethers"; /** * Interface for Smart Contract Wallet aka Smart Account. * This SA does not have to implement ERC4337 interfaces */ export interface INon4337Account { - estimateCreationGas(initCode: string): Promise; + estimateCreationGas(_initCode: string): Promise; getNonce(): Promise; - signMessage(message: Bytes | string): Promise; - getAccountAddress(accountIndex?: number): Promise; + signMessage(_message: Bytes | string): Promise; + getAccountAddress(_accountIndex?: number): Promise; } export interface IBaseSmartAccount extends INon4337Account { - getVerificationGasLimit(initCode: BytesLike): Promise; - getPreVerificationGas(userOp: Partial): Promise; - signUserOp(userOp: UserOperation): Promise; - signUserOpHash(userOpHash: string): Promise; - getUserOpHash(userOp: Partial): Promise; + getVerificationGasLimit(_initCode: BytesLike): Promise; + getPreVerificationGas(_userOp: Partial): Promise; + signUserOp(_userOp: UserOperation): Promise; + signUserOpHash(_userOpHash: string): Promise; + getUserOpHash(_userOp: Partial): Promise; getAccountInitCode(): Promise; getDummySignature(): Promise; } diff --git a/packages/account/src/interfaces/IBiconomySmartAccount.ts b/packages/account/src/interfaces/IBiconomySmartAccount.ts index 7ee5c0c49..2534ae461 100644 --- a/packages/account/src/interfaces/IBiconomySmartAccount.ts +++ b/packages/account/src/interfaces/IBiconomySmartAccount.ts @@ -14,16 +14,16 @@ import { ISmartAccount } from "./ISmartAccount"; import { Signer } from "ethers"; export interface IBiconomySmartAccount extends ISmartAccount { - init(initilizationData?: InitilizationData): Promise; - initializeAccountAtIndex(accountIndex: number): void; - getExecuteCallData(to: string, value: BigNumberish, data: BytesLike): string; - getExecuteBatchCallData(to: Array, value: Array, data: Array): string; - buildUserOp(transactions: Transaction[], overrides?: Overrides): Promise>; - getAllTokenBalances(balancesDto: BalancesDto): Promise; - getTotalBalanceInUsd(balancesDto: BalancesDto): Promise; - getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise; - getTransactionsByAddress(chainId: number, address: string): Promise; - getTransactionByHash(txHash: string): Promise; + init(_initilizationData?: InitilizationData): Promise; + initializeAccountAtIndex(_accountIndex: number): void; + getExecuteCallData(_to: string, _value: BigNumberish, _data: BytesLike): string; + getExecuteBatchCallData(_to: Array, _value: Array, _data: Array): string; + buildUserOp(_transactions: Transaction[], _overrides?: Overrides): Promise>; + getAllTokenBalances(_balancesDto: BalancesDto): Promise; + getTotalBalanceInUsd(_balancesDto: BalancesDto): Promise; + getSmartAccountsByOwner(_smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise; + getTransactionsByAddress(_chainId: number, _address: string): Promise; + getTransactionByHash(_txHash: string): Promise; getAllSupportedChains(): Promise; - attachSigner(signer: Signer): Promise; + attachSigner(_signer: Signer): Promise; } diff --git a/packages/account/src/interfaces/ISmartAccount.ts b/packages/account/src/interfaces/ISmartAccount.ts index ffbe93587..fce4a8f8c 100644 --- a/packages/account/src/interfaces/ISmartAccount.ts +++ b/packages/account/src/interfaces/ISmartAccount.ts @@ -1,8 +1,8 @@ import { UserOperation } from "@biconomy/core-types"; import { UserOpResponse } from "@biconomy/bundler"; export interface ISmartAccount { - getSmartAccountAddress(accountIndex: number): Promise; - signUserOp(userOp: UserOperation): Promise; - sendUserOp(userOp: UserOperation): Promise; - sendSignedUserOp(userOp: UserOperation): Promise; + getSmartAccountAddress(_accountIndex: number): Promise; + signUserOp(_userOp: UserOperation): Promise; + sendUserOp(_userOp: UserOperation): Promise; + sendSignedUserOp(_userOp: UserOperation): Promise; } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 6c0898f95..003378316 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -4,7 +4,7 @@ import { BigNumberish } from "ethers"; import { IBundler } from "@biconomy/bundler"; import { IPaymaster, PaymasterFeeQuote } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; -import { JsonRpcProvider, Provider } from "@ethersproject/providers"; +import { Provider } from "@ethersproject/providers"; import { GasOverheads } from "./Preverificaiton"; export type EntryPointAddresses = { diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts index 5178f4113..a64c1151d 100644 --- a/packages/bundler/src/interfaces/IBundler.ts +++ b/packages/bundler/src/interfaces/IBundler.ts @@ -2,8 +2,8 @@ import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse import { UserOperation } from "@biconomy/core-types"; export interface IBundler { - estimateUserOpGas(userOp: Partial): Promise; - sendUserOp(userOp: UserOperation): Promise; - getUserOpReceipt(userOpHash: string): Promise; - getUserOpByHash(userOpHash: string): Promise; + estimateUserOpGas(_userOp: Partial): Promise; + sendUserOp(_userOp: UserOperation): Promise; + getUserOpReceipt(_userOpHash: string): Promise; + getUserOpByHash(_userOpHash: string): Promise; } diff --git a/packages/bundler/src/utils/HelperFunction.ts b/packages/bundler/src/utils/HelperFunction.ts index bd76158ed..a0d0240e4 100644 --- a/packages/bundler/src/utils/HelperFunction.ts +++ b/packages/bundler/src/utils/HelperFunction.ts @@ -19,7 +19,6 @@ export const transformUserOP = (userOp: UserOperation): UserOperation => { } return userOperation; } catch (error) { - console.error(`Failed to transform user operation: ${error}`); - throw error; + throw `Failed to transform user operation: ${error}`; } }; diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index 329c16838..f3bad34e1 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -40,7 +40,7 @@ export type SendUserOpResponse = { export type UserOpResponse = { userOpHash: string; - wait(confirmations?: number): Promise; + wait(_confirmations?: number): Promise; }; // Converted to JsonRpcResponse with strict type diff --git a/packages/common/src/ContractsInstances.ts b/packages/common/src/ContractsInstances.ts index 99198db56..0aa159e5a 100644 --- a/packages/common/src/ContractsInstances.ts +++ b/packages/common/src/ContractsInstances.ts @@ -1,6 +1,6 @@ import { SmartAccountType } from "@biconomy/core-types"; import { JsonRpcProvider } from "@ethersproject/providers"; -import { EntryPoint, IEntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; +import { IEntryPoint } from "@account-abstraction/contracts"; import { EntryPoint_v005__factory, EntryPoint_v006__factory, diff --git a/packages/common/src/Logger.ts b/packages/common/src/Logger.ts index c2489d631..0bdcae373 100644 --- a/packages/common/src/Logger.ts +++ b/packages/common/src/Logger.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ /** * Single class to be used for logging purpose. * diff --git a/packages/common/src/httpRequests.ts b/packages/common/src/httpRequests.ts index d4923d2b6..40f414ad7 100644 --- a/packages/common/src/httpRequests.ts +++ b/packages/common/src/httpRequests.ts @@ -1,4 +1,3 @@ -import fetch from "node-fetch"; import { Logger } from "./Logger"; export enum HttpMethod { diff --git a/packages/modules/package.json b/packages/modules/package.json index ddeac21f7..27496fd87 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -35,11 +35,11 @@ "access": "public" }, "dependencies": { - "merkletreejs": "^0.3.9" - }, - "devDependencies": { "@biconomy/common": "^3.1.1-alpha.0", "@biconomy/core-types": "^3.1.1-alpha.0", - "@biconomy/node-client": "^3.1.1-alpha.0" + "@biconomy/node-client": "^3.1.1-alpha.0", + "merkletreejs": "^0.3.9", + "ethers": "^5.7.2", + "ethereumjs-util": "^7.1.5" } } \ No newline at end of file diff --git a/packages/modules/src/BaseValidationModule.ts b/packages/modules/src/BaseValidationModule.ts index d61c16751..d3f50f5c6 100644 --- a/packages/modules/src/BaseValidationModule.ts +++ b/packages/modules/src/BaseValidationModule.ts @@ -17,20 +17,20 @@ export abstract class BaseValidationModule implements IValidationModule { abstract getAddress(): string; - setEntryPointAddress(entryPointAddress: string) { + setEntryPointAddress(entryPointAddress: string): void { this.entryPointAddress = entryPointAddress; } abstract getInitData(): Promise; // Anything required to get dummy signature can be passed as params - abstract getDummySignature(params?: ModuleInfo): Promise; + abstract getDummySignature(_params?: ModuleInfo): Promise; // Review naming convention for getter abstract getSigner(): Promise; // Signer specific or any other additional information can be passed as params - abstract signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise; + abstract signUserOpHash(_userOpHash: string, _params?: ModuleInfo): Promise; - abstract signMessage(message: Bytes | string): Promise; + abstract signMessage(_message: Bytes | string): Promise; } diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index bb7c37fb6..75c0c25be 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -1,28 +1,15 @@ import { Signer, ethers } from "ethers"; -import MerkleTree from "merkletreejs"; -import { NODE_CLIENT_URL, Logger } from "@biconomy/common"; +import { Logger } from "@biconomy/common"; import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from "ethers/lib/utils"; -import { keccak256 } from "ethereumjs-util"; -import { - ModuleVersion, - CreateSessionDataParams, - StorageType, - SessionParams, - BatchedSessionRouterModuleConfig, - ModuleInfo, - CreateSessionDataResponse, -} from "./utils/Types"; +import { ModuleVersion, CreateSessionDataParams, BatchedSessionRouterModuleConfig, ModuleInfo, CreateSessionDataResponse } from "./utils/Types"; import { BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION, - SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE, DEFAULT_BATCHED_SESSION_ROUTER_MODULE, } from "./utils/Constants"; -import { generateRandomHex } from "./utils/Uid"; import { BaseValidationModule } from "./BaseValidationModule"; -import { SessionLocalStorage } from "./session-storage/SessionLocalStorage"; -import { ISessionStorage, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; import { SessionKeyManagerModule } from "./SessionKeyManagerModule"; +import { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; export class BatchedSessionRouterModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; @@ -180,7 +167,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @param status The status to be updated * @returns */ - async updateSessionStatus(param: SessionSearchParam, status: SessionStatus) { + async updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise { this.sessionKeyManagerModule.sessionStorageClient.updateSessionStatus(param, status); } @@ -188,7 +175,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @remarks This method is used to clear all the pending sessions * @returns */ - async clearPendingSessions() { + async clearPendingSessions(): Promise { this.sessionKeyManagerModule.sessionStorageClient.clearPendingSessions(); } diff --git a/packages/modules/src/interfaces/ISessionStorage.ts b/packages/modules/src/interfaces/ISessionStorage.ts index 69eb31225..eb1fb1078 100644 --- a/packages/modules/src/interfaces/ISessionStorage.ts +++ b/packages/modules/src/interfaces/ISessionStorage.ts @@ -24,20 +24,20 @@ export interface ISessionStorage { * Adds a session leaf node to the session storage * @param leaf SessionLeafNode to be added to the session storage */ - addSessionData(leaf: SessionLeafNode): Promise; + addSessionData(_leaf: SessionLeafNode): Promise; /** * Fetch a session leaf node from the session storage * @param param SessionSearchParam to be used to fetch the session leaf node */ - getSessionData(param: SessionSearchParam): Promise; + getSessionData(_param: SessionSearchParam): Promise; /** * Updates the session status of a session leaf node in the session storage * @param param SessionSearchParam to be used to fetch the session leaf node * @param status New session status to be updated */ - updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise; + updateSessionStatus(_param: SessionSearchParam, _status: SessionStatus): Promise; /** * Clears all the pending sessions from the session storage @@ -49,26 +49,26 @@ export interface ISessionStorage { * If no signer object is passed, it'll create a random signer and add it to the session storage * @param signer Optional signer to be added to the session storage */ - addSigner(signer?: Wallet): Promise; + addSigner(_signer?: Wallet): Promise; /** * Fetch a signer from the session storage * @param signerPublicKey Public key of the signer to be fetched */ - getSignerByKey(signerPublicKey: string): Promise; + getSignerByKey(_signerPublicKey: string): Promise; /** * Fetch a signer from the session storage based on the session search param * @param param SessionSearchParam to be used to fetch the signer */ - getSignerBySession(param: SessionSearchParam): Promise; + getSignerBySession(_param: SessionSearchParam): Promise; /** * Fetch all the session leaf nodes from the session storage based on the session search param. * If no param is passed, it'll fetch all the session leaf nodes from the session storage * @param param SessionSearchParam to be used to fetch the session leaf nodes */ - getAllSessionData(param?: SessionSearchParam): Promise; + getAllSessionData(_param?: SessionSearchParam): Promise; /** * Fetch merkle root from the session storage @@ -79,5 +79,5 @@ export interface ISessionStorage { * Set merkle root in the session storage * @param merkleRoot Merkle root to be set in the session storage */ - setMerkleRoot(merkleRoot: string): Promise; + setMerkleRoot(_merkleRoot: string): Promise; } diff --git a/packages/modules/src/interfaces/ISessionValidationModule.ts b/packages/modules/src/interfaces/ISessionValidationModule.ts index 0aa488013..ee1c3abef 100644 --- a/packages/modules/src/interfaces/ISessionValidationModule.ts +++ b/packages/modules/src/interfaces/ISessionValidationModule.ts @@ -9,6 +9,6 @@ * @author Sachin Tomar */ export interface ISessionValidationModule { - getSessionKeyData(sessionData: T): Promise; + getSessionKeyData(_sessionData: T): Promise; getAddress(): string; } diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index cdf0d9214..0b6910e01 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -27,7 +27,7 @@ interface INodeClient { * Get ChainConfig for requested chainId * @param chainId */ - getChainById(chainId: number): Promise; + getChainById(_chainId: number): Promise; // 2. Token APIs @@ -35,7 +35,7 @@ interface INodeClient { * Get prices for configured tokens from backend node API * @param chainId */ - getTokenPricesByChainId(chainId: number): Promise; + getTokenPricesByChainId(_chainId: number): Promise; /** * Get all supported tokens @@ -47,13 +47,13 @@ interface INodeClient { * Get TokenInfo for requested chainId * @param chainId */ - getTokensByChainId(chainId: number): Promise; + getTokensByChainId(_chainId: number): Promise; /** * Get TokenInfo by address and chainId * @param tokenByChainIdAndAddressDto */ - getTokenByChainIdAndAddress(tokenByChainIdAndAddressDto: TokenByChainIdAndAddressDto): Promise; + getTokenByChainIdAndAddress(_tokenByChainIdAndAddressDto: TokenByChainIdAndAddressDto): Promise; // 3. Smart Account Endpoints @@ -61,7 +61,7 @@ interface INodeClient { * Get information of all smart accounts deployed for particular eoa owner for any version and index * @param smartAccountByOwnerDto */ - getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise; + getSmartAccountsByOwner(_smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise; // 4. Balances Endpoints @@ -70,13 +70,13 @@ interface INodeClient { * address could be EOA or SmartAccount * @param balancesDto */ - getAllTokenBalances(balancesDto: BalancesDto): Promise; + getAllTokenBalances(_balancesDto: BalancesDto): Promise; /** * * @param balancesDto Get total USD balance */ - getTotalBalanceInUsd(balancesDto: BalancesDto): Promise; + getTotalBalanceInUsd(_balancesDto: BalancesDto): Promise; /** * @@ -84,11 +84,11 @@ interface INodeClient { * About: Whitelist domain by passing the origin domain * Purpose: Returns the signature used in init */ - whitelistUrl(origin: string): Promise; + whitelistUrl(_origin: string): Promise; - getTransactionByHash(txHash: string): Promise; + getTransactionByHash(_txHash: string): Promise; - getTransactionByAddress(chainId: number, address: string): Promise; + getTransactionByAddress(_chainId: number, _address: string): Promise; } export default INodeClient; diff --git a/packages/paymaster/src/interfaces/IHybridPaymaster.ts b/packages/paymaster/src/interfaces/IHybridPaymaster.ts index 886741ef4..aa1b51ebe 100644 --- a/packages/paymaster/src/interfaces/IHybridPaymaster.ts +++ b/packages/paymaster/src/interfaces/IHybridPaymaster.ts @@ -5,8 +5,8 @@ import { Provider } from "@ethersproject/abstract-provider"; import { IPaymaster } from "./IPaymaster"; export interface IHybridPaymaster extends IPaymaster { - getPaymasterAndData(userOp: Partial, paymasterServiceData?: T): Promise; - getDummyPaymasterAndData(userOp: Partial, paymasterServiceData?: T): Promise; - buildTokenApprovalTransaction(tokenPaymasterRequest: BiconomyTokenPaymasterRequest, provider: Provider): Promise; - getPaymasterFeeQuotesOrData(userOp: Partial, paymasterServiceData: FeeQuotesOrDataDto): Promise; + getPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; + getDummyPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; + buildTokenApprovalTransaction(_tokenPaymasterRequest: BiconomyTokenPaymasterRequest, _provider: Provider): Promise; + getPaymasterFeeQuotesOrData(_userOp: Partial, _paymasterServiceData: FeeQuotesOrDataDto): Promise; } diff --git a/packages/paymaster/src/interfaces/IPaymaster.ts b/packages/paymaster/src/interfaces/IPaymaster.ts index 354409fb7..935392402 100644 --- a/packages/paymaster/src/interfaces/IPaymaster.ts +++ b/packages/paymaster/src/interfaces/IPaymaster.ts @@ -3,6 +3,6 @@ import { PaymasterAndDataResponse } from "../utils/Types"; export interface IPaymaster { // Implementing class may add extra parameter (for example paymasterServiceData with it's own type) in below function signature - getPaymasterAndData(userOp: Partial): Promise; - getDummyPaymasterAndData(userOp: Partial): Promise; + getPaymasterAndData(_userOp: Partial): Promise; + getDummyPaymasterAndData(_userOp: Partial): Promise; } diff --git a/packages/transak/src/index.ts b/packages/transak/src/index.ts index db7346e29..6792b304a 100644 --- a/packages/transak/src/index.ts +++ b/packages/transak/src/index.ts @@ -25,17 +25,16 @@ class TransakSDK { this.transak = transak; } - init() { + init(): void { try { this.transak.init(); /* eslint-disable @typescript-eslint/no-explicit-any */ } catch (err: any) { - console.error(err); - throw new Error("Error while init transakSDK"); + throw new Error(`Error while init transakSDK ${err}`); } } - getTransak() { + getTransak(): any { return this.transak; } } From e502def9b93a854f3fe8a933a42d06e80d3cad5d Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 13 Sep 2023 23:04:15 +0400 Subject: [PATCH 0837/1247] remove ts-nocheck --- packages/account/src/BiconomySmartAccount.ts | 3 --- packages/account/src/BiconomySmartAccountV2.ts | 3 --- packages/account/src/SmartAccount.ts | 3 --- packages/account/tests/SmartAccountV2.local.spec.ts | 3 --- 4 files changed, 12 deletions(-) diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 6868528e1..0aa971b07 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -1,6 +1,3 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck - import { JsonRpcProvider } from "@ethersproject/providers"; import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; import { SmartAccount } from "./SmartAccount"; diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index fc48e0db7..2c8540f52 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1,6 +1,3 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck - import { JsonRpcProvider } from "@ethersproject/providers"; import { Signer } from "ethers"; import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index 1e261d5e0..ac6877071 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -1,6 +1,3 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck - import { JsonRpcProvider } from "@ethersproject/providers"; import { BigNumber, Signer, BytesLike } from "ethers"; import { ISmartAccount } from "./interfaces/ISmartAccount"; diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 4e20f1fb4..529d2e5aa 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -1,6 +1,3 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck - import { EntryPoint, EntryPoint__factory, UserOperationStruct, SimpleAccountFactory__factory } from "@account-abstraction/contracts"; import { Wallet, ethers } from "ethers"; import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; From 5d12fe7d4b32e5c4628b971d22f6fc9cfcc6b414 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 13 Sep 2023 18:28:29 -0400 Subject: [PATCH 0838/1247] fix: add 10sec timeout limit for a test --- packages/account/tests/SmartAccountV2.local.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 529d2e5aa..b73b47007 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -347,7 +347,7 @@ describe("BiconomySmartAccount API Specs", () => { await entryPoint.handleOps([signedUserOp], beneficiary); // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - }); + }, 10000); // on github runner it takes more time than 5000ms // TODO // 1. sendSignedUserOp() From 10df90821b473fd668907cf3e447dfe3825317fc Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 13 Sep 2023 19:56:23 -0400 Subject: [PATCH 0839/1247] fix: more lint issues --- .eslintrc.js | 1 + packages/bundler/src/Bundler.ts | 1 + packages/bundler/src/utils/Constants.ts | 1 + packages/bundler/src/utils/Types.ts | 1 + packages/common/src/Constants.ts | 1 + .../modules/src/SessionKeyManagerModule.ts | 4 +- .../src/interfaces/IValidationModule.ts | 4 +- packages/modules/src/utils/Uid.ts | 2 +- packages/web3-auth-native/src/SocialLogin.ts | 8 ++- .../web3-auth-native/src/types/IWebBrowser.ts | 6 +-- packages/web3-auth-native/src/types/sdk.ts | 2 +- packages/web3-auth/src/SocialLogin.tsx | 52 +++++++++---------- packages/web3-auth/src/UI.tsx | 4 +- .../web3-auth/src/types/Web3AuthConfig.ts | 2 +- 14 files changed, 48 insertions(+), 41 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 8511d52f7..78d998dfd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -24,6 +24,7 @@ module.exports = { "security/detect-object-injection": "warn", "security/detect-unsafe-regex": "error", "import/extensions": "off", + "security/detect-object-injection": "off", // turning off Injection Sink rule "@typescript-eslint/no-throw-literal": "off", // temp deactivated needs to be removed once fixed }, settings: {}, diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 0fc8668a5..24399febf 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -23,6 +23,7 @@ import { JsonRpcProvider } from "@ethersproject/providers"; * Checkout the proposal for more details on Bundlers. */ export class Bundler implements IBundler { + // eslint-disable-next-line no-unused-vars UserOpReceiptIntervals: { [key in ChainId]?: number }; constructor(readonly bundlerConfig: Bundlerconfig) { diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index 5f4c74c7a..92e95cd1f 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -1,5 +1,6 @@ import { ChainId } from "@biconomy/core-types"; +// eslint-disable-next-line no-unused-vars export const UserOpReceiptIntervals: { [key in ChainId]?: number } = { [ChainId.MAINNET]: 10000, [ChainId.GOERLI]: 5000, diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index f3bad34e1..7fbda2c18 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -5,6 +5,7 @@ export type Bundlerconfig = { bundlerUrl: string; entryPointAddress?: string; chainId: ChainId; + // eslint-disable-next-line no-unused-vars userOpReceiptIntervals?: { [key in ChainId]?: number }; }; diff --git a/packages/common/src/Constants.ts b/packages/common/src/Constants.ts index 17745f6cd..1be9c427f 100644 --- a/packages/common/src/Constants.ts +++ b/packages/common/src/Constants.ts @@ -2,6 +2,7 @@ import { ChainId } from "@biconomy/core-types"; export const NODE_CLIENT_URL = "https://sdk-backend.prod.biconomy.io/v1"; +// eslint-disable-next-line no-unused-vars export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { [ChainId.MAINNET]: "https://rpc.ankr.com/eth", [ChainId.GOERLI]: "https://rpc.ankr.com/eth_goerli", diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index 776d6bbb9..6ee8ca2bb 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -217,7 +217,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @param status The status to be updated * @returns */ - async updateSessionStatus(param: SessionSearchParam, status: SessionStatus) { + async updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise { this.sessionStorageClient.updateSessionStatus(param, status); } @@ -225,7 +225,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @remarks This method is used to clear all the pending sessions * @returns */ - async clearPendingSessions() { + async clearPendingSessions(): Promise { this.sessionStorageClient.clearPendingSessions(); } diff --git a/packages/modules/src/interfaces/IValidationModule.ts b/packages/modules/src/interfaces/IValidationModule.ts index cc94e4187..150b08cc7 100644 --- a/packages/modules/src/interfaces/IValidationModule.ts +++ b/packages/modules/src/interfaces/IValidationModule.ts @@ -5,7 +5,7 @@ export interface IValidationModule { getAddress(): string; getInitData(): Promise; getSigner(): Promise; - signUserOpHash(userOpHash: string): Promise; - signMessage(message: Bytes | string): Promise; + signUserOpHash(_userOpHash: string): Promise; + signMessage(_message: Bytes | string): Promise; getDummySignature(): Promise; } diff --git a/packages/modules/src/utils/Uid.ts b/packages/modules/src/utils/Uid.ts index db4ff03ab..5cf4a6cca 100644 --- a/packages/modules/src/utils/Uid.ts +++ b/packages/modules/src/utils/Uid.ts @@ -1,5 +1,5 @@ // small uid generator, hex: 0-9, a-f (10 chars) -export const generateRandomHex = () => { +export const generateRandomHex = (): string => { const hexChars = "0123456789abcdef"; let result = ""; diff --git a/packages/web3-auth-native/src/SocialLogin.ts b/packages/web3-auth-native/src/SocialLogin.ts index 79288fc3d..a85530f1e 100644 --- a/packages/web3-auth-native/src/SocialLogin.ts +++ b/packages/web3-auth-native/src/SocialLogin.ts @@ -3,7 +3,7 @@ import base64url from 'base64url' import log from 'loglevel' import { URL } from 'react-native-url-polyfill' -import { IWebBrowser } from './types/IWebBrowser' +import { IWebBrowser, WebBrowserAuthSessionResult } from './types/IWebBrowser' import { SdkInitParams, SdkLoginParams, SdkLogoutParams, SocialLoginDto } from './types/sdk' import { State } from './types/State' @@ -59,7 +59,11 @@ class SocialLogin { } } - private async request(path: string, redirectUrl: string, params: Record = {}) { + private async request( + path: string, + redirectUrl: string, + params: Record = {} + ): Promise { const initParams = { ...this.initParams, clientId: this.clientId, diff --git a/packages/web3-auth-native/src/types/IWebBrowser.ts b/packages/web3-auth-native/src/types/IWebBrowser.ts index 45676d8d6..fcc51728c 100644 --- a/packages/web3-auth-native/src/types/IWebBrowser.ts +++ b/packages/web3-auth-native/src/types/IWebBrowser.ts @@ -271,9 +271,9 @@ export interface IWebBrowser { * the Promise fulfills with `{ type: 'dismiss' }` object. */ openAuthSessionAsync( - url: string, - redirectUrl: string, - browserParams?: WebBrowserOpenOptions + _url: string, + _redirectUrl: string, + _browserParams?: WebBrowserOpenOptions ): Promise // dismissAuthSession(): void; /** diff --git a/packages/web3-auth-native/src/types/sdk.ts b/packages/web3-auth-native/src/types/sdk.ts index 24b285b27..4f6bc16cb 100644 --- a/packages/web3-auth-native/src/types/sdk.ts +++ b/packages/web3-auth-native/src/types/sdk.ts @@ -16,7 +16,7 @@ export type SocialLoginDto = { } export type IOriginData = { - [P in string]: string + [P: string]: string } export type SdkInitParams = Omit< diff --git a/packages/web3-auth/src/SocialLogin.tsx b/packages/web3-auth/src/SocialLogin.tsx index 8d0cdab6e..306bdc95c 100644 --- a/packages/web3-auth/src/SocialLogin.tsx +++ b/packages/web3-auth/src/SocialLogin.tsx @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import React from "react"; import { createRoot } from "react-dom/client"; import { ethers } from "ethers"; @@ -12,7 +13,7 @@ import NodeClient, { WhiteListSignatureResponse } from "@biconomy/node-client"; import UI from "./UI"; import { DefaultSocialLoginConfig, SocialLoginDTO, WhiteLabelDataType } from "./types/Web3AuthConfig"; -function createLoginModal(socialLogin: SocialLogin) { +function createLoginModal(socialLogin: SocialLogin): void { /* eslint-disable @typescript-eslint/no-explicit-any */ const root = createRoot((document as any).getElementById("w3a-modal")); root.render(); @@ -66,11 +67,10 @@ class SocialLogin { async whitelistUrl(origin: string): Promise { const whiteListUrlResponse: WhiteListSignatureResponse = await this.nodeClient.whitelistUrl(origin); - console.log(whiteListUrlResponse.data); return whiteListUrlResponse.data; } - async init(socialLoginDTO?: Partial) { + async init(socialLoginDTO?: Partial): Promise { const finalDTO: SocialLoginDTO = { chainId: "0x1", whitelistUrls: {}, @@ -84,7 +84,6 @@ class SocialLogin { if (socialLoginDTO.whteLableData) this.whiteLabel = socialLoginDTO.whteLableData; } try { - console.log("SocialLogin init"); const web3AuthCore = new Web3AuthCore({ clientId: this.clientId, chainConfig: { @@ -132,12 +131,12 @@ class SocialLogin { } } - getProvider() { + getProvider(): SafeEventEmitterProvider | null { return this.provider; } /* eslint-disable @typescript-eslint/no-explicit-any */ - private _createIframe(iframeContainerDiv: any) { + private _createIframe(iframeContainerDiv: any): void { this.walletIframe = document.createElement("iframe"); this.walletIframe.style.display = "none"; this.walletIframe.style.display = "relative"; @@ -148,7 +147,7 @@ class SocialLogin { iframeContainerDiv.appendChild(this.walletIframe); } - private createWalletDiv() { + private createWalletDiv(): void { // create a fixed div into html but keep it hidden initially const walletDiv = document.createElement("div"); walletDiv.id = "w3a-modal"; @@ -167,7 +166,7 @@ class SocialLogin { this._createIframe(walletDiv); } - showWallet() { + showWallet(): void { this.walletDiv.style.display = "block"; this.walletIframe.style.display = "block"; // Set height and width of the iframe to 600x341 @@ -179,13 +178,12 @@ class SocialLogin { el?.dispatchEvent(new Event("show-modal")); } - hideWallet() { - console.log("hide wallet"); + hideWallet(): void { this.walletDiv.style.display = "none"; this.walletIframe.style.display = "none"; } - async getUserInfo() { + async getUserInfo(): Promise | null> { if (this.web3auth) { const userInfo = await this.web3auth.getUserInfo(); this.userInfo = userInfo; @@ -194,20 +192,20 @@ class SocialLogin { return null; } - async getPrivateKey() { + async getPrivateKey(): Promise { if (this.web3auth && this.web3auth.provider) { const privateKey = await this.web3auth.provider.request({ method: "eth_private_key", }); - return privateKey; + return privateKey as string; } return null; } - async socialLogin(loginProvider: string) { + async socialLogin(loginProvider: string): Promise { if (!this.web3auth) { console.info("web3auth not initialized yet"); - return; + return null; } try { const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.OPENLOGIN, { @@ -226,14 +224,14 @@ class SocialLogin { return web3authProvider; } catch (error) { console.error(error); - return error; + return null; } } - async emailLogin(email: string) { + async emailLogin(email: string): Promise { if (!this.web3auth) { console.info("web3auth not initialized yet"); - return; + return null; } try { const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.OPENLOGIN, { @@ -253,14 +251,14 @@ class SocialLogin { return web3authProvider; } catch (error) { console.error(error); - return error; + return null; } } - async metamaskLogin() { + async metamaskLogin(): Promise { if (!this.web3auth) { console.log("web3auth not initialized yet"); - return; + return null; } try { const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.METAMASK); @@ -277,14 +275,14 @@ class SocialLogin { return web3authProvider; } catch (error) { console.error(error); - return error; + return null; } } - async walletConnectLogin() { + async walletConnectLogin(): Promise { if (!this.web3auth) { console.log("web3auth not initialized yet"); - return; + return null; } try { const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.WALLET_CONNECT_V1); @@ -301,11 +299,11 @@ class SocialLogin { return web3authProvider; } catch (error) { console.error(error); - return error; + return null; } } - async logout() { + async logout(): Promise { if (!this.web3auth) { console.log("web3auth not initialized yet"); return; @@ -322,7 +320,7 @@ const socialLoginSDK: SocialLogin = new SocialLogin(); export default SocialLogin; let initializedSocialLogin: SocialLogin | null = null; -const getSocialLoginSDK = async (socialLoginDTO?: Partial) => { +const getSocialLoginSDK = async (socialLoginDTO?: Partial): Promise => { if (initializedSocialLogin) { return initializedSocialLogin; } diff --git a/packages/web3-auth/src/UI.tsx b/packages/web3-auth/src/UI.tsx index ee8c30df2..2fd8e5187 100644 --- a/packages/web3-auth/src/UI.tsx +++ b/packages/web3-auth/src/UI.tsx @@ -22,12 +22,12 @@ const container = { const UI: React.FC = ({ socialLogin }) => { const [email, setEmail] = useState(""); - function handleEmailSubmit(event: React.SyntheticEvent) { + function handleEmailSubmit(event: React.SyntheticEvent): void { event.preventDefault(); socialLogin.emailLogin(email); } - function handleEmailChange(event: React.FormEvent) { + function handleEmailChange(event: React.FormEvent): void { setEmail(event.currentTarget.value); } diff --git a/packages/web3-auth/src/types/Web3AuthConfig.ts b/packages/web3-auth/src/types/Web3AuthConfig.ts index 8caee797c..404c7ef6e 100644 --- a/packages/web3-auth/src/types/Web3AuthConfig.ts +++ b/packages/web3-auth/src/types/Web3AuthConfig.ts @@ -9,7 +9,7 @@ export type WhiteLabelDataType = { export type SocialLoginDTO = { chainId: string; - whitelistUrls: { [P in string]: string }; + whitelistUrls: { [P: string]: string }; network: "mainnet" | "testnet"; whteLableData: WhiteLabelDataType; }; From f507d1987e93ebc1032210e4fbeab8cc1bfd4b11 Mon Sep 17 00:00:00 2001 From: aboudjem Date: Thu, 14 Sep 2023 18:12:32 +0700 Subject: [PATCH 0840/1247] =?UTF-8?q?=F0=9F=93=9D=20add=20contributing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTING.md | 67 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e69de29bb..226ea3b55 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -0,0 +1,67 @@ +# Contributing to Biconomy Projects 🚀 + +First off, thank you for considering contributing to Biconomy! We truly appreciate your effort and contributions from the community are what make Biconomy awesome. 🙌 + +Your contributions are valued and will help in driving the decentralized web forward. + +> If you're passionate about our mission but can't contribute directly, there are other ways to support: +> - ⭐ Star our projects on GitHub +> - 🐦 [Tweet about Biconomy](https://twitter.com/biconomy/) +> - 📌 Reference Biconomy in your project's readme +> - 🗣️ Share about Biconomy at meetups or with peers + +## Table of Contents + +- [Contributing to Biconomy Projects 🚀](#contributing-to-biconomy-projects-) + - [Table of Contents](#table-of-contents) + - [Have a Question?](#have-a-question) + - [Ready to Contribute?](#ready-to-contribute) + - [Legal Notice 📜](#legal-notice-) + - [Reporting Bugs 🐛](#reporting-bugs-) + - [Suggesting Enhancements 💡](#suggesting-enhancements-) + - [First Time Contributing? 🌱](#first-time-contributing-) + - [Improving Documentation 📚](#improving-documentation-) + - [Style Guides 🎨](#style-guides-) + - [Commit Messages 📝](#commit-messages-) + - [Join Biconomy's Team! 🚀](#join-biconomys-team-) + +## Have a Question? + +Before reaching out, please ensure you've gone through our [Documentation](https://docs.biconomy.io/). If you still have questions: + +1. Search for existing [Issues](https://github.com/bcnmy/scw-contracts/issues) that might answer your question. +2. Check out our [Forum](https://forum.biconomy.io/). +3. Join our [Discord](https://discord.com/invite/biconomy) or [Telegram](https://t.me/biconomy) communities. + +If you still need assistance, feel free to open an [Issue](https://github.com/bcnmy/scw-contracts/issues/new) with your question. + +## Ready to Contribute? + +### Legal Notice 📜 +By contributing, you agree that you've authored your contribution and that it can be provided under the project's license. + +### Reporting Bugs 🐛 + +Before submitting a bug report, ensure you're using the latest version and that you've read our [documentation](https://docs.biconomy.io/). If you've identified a bug that hasn't been reported, open a new [Issue](https://github.com/bcnmy/scw-contracts/issues/new) detailing the bug. + +### Suggesting Enhancements 💡 + +Have a feature in mind? First, ensure it aligns with Biconomy's mission and hasn't been suggested before. Then, open an [Issue](https://github.com/bcnmy/scw-contracts/issues/new) to discuss your enhancement. + +### First Time Contributing? 🌱 + +Welcome! We're thrilled to have you. If you're unsure where to start, look for issues labeled `good first issue`. + +### Improving Documentation 📚 + +Good documentation is key! If you spot areas for improvement or errors in our documentation, we'd love your input. + +## Style Guides 🎨 + +### Commit Messages 📝 + +Ensure your commit messages are clear and descriptive. + +## Join Biconomy's Team! 🚀 + +Interested in joining our mission full-time? Check out our [current job openings](https://jobs.lever.co/biconomy). \ No newline at end of file From 325f5efe0e175369ed57d51bb39c0c1e1897e33b Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 14 Sep 2023 17:08:49 +0400 Subject: [PATCH 0841/1247] minr changes + placeholder for more tests --- packages/account/package.json | 3 + packages/account/src/BiconomySmartAccount.ts | 2 +- .../tests/SmartAccountV1.testnet.spec.ts | 72 +++++++++++++++++++ .../tests/SmartAccountV2.local.spec.ts | 2 +- 4 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 packages/account/tests/SmartAccountV1.testnet.spec.ts diff --git a/packages/account/package.json b/packages/account/package.json index 55a5f7252..cac615408 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -33,6 +33,9 @@ "publishConfig": { "access": "public" }, + "devDependencies": { + "nock": "^13.2.9" + }, "dependencies": { "@account-abstraction/contracts": "^0.6.0", "@account-abstraction/utils": "^0.4.0", diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 30e9a5f3b..dce98c29d 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -15,7 +15,7 @@ import { UserOperation, Transaction, SmartAccountType } from "@biconomy/core-typ import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { IBiconomySmartAccount } from "interfaces/IBiconomySmartAccount"; +import { IBiconomySmartAccount } from "./interfaces/IBiconomySmartAccount"; import { ISmartAccount, SupportedChainsResponse, diff --git a/packages/account/tests/SmartAccountV1.testnet.spec.ts b/packages/account/tests/SmartAccountV1.testnet.spec.ts new file mode 100644 index 000000000..f6ef197af --- /dev/null +++ b/packages/account/tests/SmartAccountV1.testnet.spec.ts @@ -0,0 +1,72 @@ +import { Wallet, ethers } from "ethers"; +import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; +import { BiconomySmartAccount } from "../src/BiconomySmartAccount"; +import { ChainId, UserOperation } from "@biconomy/core-types"; +import { calcPreVerificationGas } from "../src/utils/Preverificaiton"; + +describe("calcPreVerificationGas", () => { + const userOp = { + sender: "0x".padEnd(42, "1"), + nonce: 0, + initCode: "0x3333", + callData: "0x4444", + callGasLimit: 5, + verificationGasLimit: 6, + maxFeePerGas: 8, + maxPriorityFeePerGas: 9, + paymasterAndData: "0xaaaaaa", + }; + it("returns a gas value proportional to sigSize", async () => { + const pvg1 = calcPreVerificationGas(userOp, { sigSize: 0 }); + const pvg2 = calcPreVerificationGas(userOp, { sigSize: 65 }); + expect(pvg2.toNumber()).toBeGreaterThan(pvg1.toNumber()); + }); +}); + +describe("BiconomySmartAccount API Specs", () => { + let owner: Wallet; + let target: string; + let accountAPI: BiconomySmartAccount; + let beneficiary: string; + let recipient: SampleRecipient; + let accountAddress: string; + + beforeAll(async () => { + owner = Wallet.createRandom(); + + target = await Wallet.createRandom().getAddress(); + + // recipient = await new SampleRecipient__factory(owner).deploy(); + accountAPI = new BiconomySmartAccount({ + chainId: ChainId.POLYGON_MUMBAI, + signer: owner, + // paymaster: paymaster, + // bundler: bundler, + }); + + // console.log('account api provider ', accountAPI.provider) + + accountAPI = await accountAPI.init(); + console.log("Account EOA owner ", accountAPI.owner); + + const counterFactualAddress = await accountAPI.getSmartAccountAddress(0); + console.log("Counterfactual address ", counterFactualAddress); + }, 20000); + + // on Mumbai testnet some tests should be performed to make sure nothing breaks in AccountV1 + + /*it("Nonce should be zero", async () => { + const builtUserOp = await accountAPI.buildUserOp([{ to: target, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); + console.log("builtUserOp", builtUserOp); + expect(builtUserOp?.nonce?.toString()).toBe("0"); + }); + it("Sender should be non zero", async () => { + const builtUserOp = await accountAPI.buildUserOp([{ to: target, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); + expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); + }); + it("InitCode length should be greater then 170", async () => { + const builtUserOp = await accountAPI.buildUserOp([{ to: target, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); + expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); + });*/ + it("estimateUserOperationGas for native token transfer using local estimation logic", async () => {}); +}); diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index b73b47007..adf4102a6 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -24,7 +24,7 @@ const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); const SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; -describe("BiconomySmartAccount API Specs", () => { +describe("BiconomySmartAccountV2 API Specs", () => { let owner: Wallet; let factoryOwner: Wallet; let accountAPI: BiconomySmartAccountV2; From dad7656e9115a4af3af5f092f51e3329ab570daa Mon Sep 17 00:00:00 2001 From: aboudjem Date: Fri, 15 Sep 2023 08:55:38 +0700 Subject: [PATCH 0842/1247] =?UTF-8?q?=F0=9F=93=9D=20add=20link=20to=20doc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 226ea3b55..a01209c7e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -54,7 +54,7 @@ Welcome! We're thrilled to have you. If you're unsure where to start, look for i ### Improving Documentation 📚 -Good documentation is key! If you spot areas for improvement or errors in our documentation, we'd love your input. +Good documentation is key! If you spot areas for improvement or errors in our documentation, we'd love your input. If you wish to suggest changes, feel free to raise a PR on our [documentation repository](https://github.com/bcnmy/docs). ## Style Guides 🎨 From 4df3502204e3c6c0c6faa90ba2c8aa0d6e826e48 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Fri, 15 Sep 2023 03:30:34 -0400 Subject: [PATCH 0843/1247] fix: gitInitCode cache issue --- packages/account/src/BaseSmartAccount.ts | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 113a1d486..d969714bf 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -18,8 +18,6 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { // Review : compare with BaseAccountAPI // private senderAddress!: string - private isDeployed = false; - bundler?: IBundler; // httpRpcClient paymaster?: IPaymaster; // paymasterAPI @@ -61,14 +59,6 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { throw new Error(`EntryPoint not deployed at ${this.entryPointAddress} at chainId ${this.chainId}}`); } - // Note: Review - // on Init itself since we're already getting account address, mark isDeployed as well! - - if ((await this.provider.getCode(await this.getAccountAddress())) === "0x") { - this.isDeployed = false; - } else { - this.isDeployed = true; - } return this; } @@ -298,17 +288,14 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { // Review : usage trace of this method. in the order of init and methods called on the Account async isAccountDeployed(address: string): Promise { this.isProviderDefined(); - if (this.isDeployed !== undefined || this.isDeployed !== null) { - // already deployed. no need to check anymore. - return this.isDeployed; - } + let isDeployed = false; const contractCode = await this.provider.getCode(address); if (contractCode.length > 2) { - this.isDeployed = true; + isDeployed = true; } else { - this.isDeployed = false; + isDeployed = false; } - return this.isDeployed; + return isDeployed; } /** From ddc5d91d5df10a10266f4500644d24e0bc1ea684 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Fri, 15 Sep 2023 03:52:43 -0400 Subject: [PATCH 0844/1247] feat: chain integration --- packages/bundler/src/utils/Constants.ts | 4 ++++ packages/common/src/Constants.ts | 4 ++++ packages/core-types/src/ChainsTypes.ts | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index 92e95cd1f..13f89d7b3 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -21,4 +21,8 @@ export const UserOpReceiptIntervals: { [key in ChainId]?: number } = { [ChainId.BASE_GOERLI_TESTNET]: 5000, [ChainId.BASE_MAINNET]: 5000, [ChainId.LINEA_TESTNET]: 5000, + [ChainId.MANTLE_MAINNET]: 5000, + [ChainId.MANTLE_TESTNET]: 5000, + [ChainId.OPBNB_MAINNET]: 5000, + [ChainId.OPBNB_TESTNET]: 5000, }; diff --git a/packages/common/src/Constants.ts b/packages/common/src/Constants.ts index 1be9c427f..73c4a506b 100644 --- a/packages/common/src/Constants.ts +++ b/packages/common/src/Constants.ts @@ -23,4 +23,8 @@ export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { [ChainId.BASE_GOERLI_TESTNET]: "https://goerli.base.org", [ChainId.BASE_MAINNET]: "https://developer-access-mainnet.base.org", [ChainId.LINEA_TESTNET]: "https://rpc.goerli.linea.build", + [ChainId.MANTLE_MAINNET]: "https://rpc.mantle.xyz", + [ChainId.MANTLE_TESTNET]: "https://rpc.testnet.mantle.xyz", + [ChainId.OPBNB_MAINNET]: "https://opbnb-mainnet-rpc.bnbchain.org", + [ChainId.OPBNB_TESTNET]: "https://opbnb-testnet-rpc.bnbchain.org", }; diff --git a/packages/core-types/src/ChainsTypes.ts b/packages/core-types/src/ChainsTypes.ts index f8d931af3..b0491fcb8 100644 --- a/packages/core-types/src/ChainsTypes.ts +++ b/packages/core-types/src/ChainsTypes.ts @@ -47,5 +47,9 @@ export enum ChainId { BASE_GOERLI_TESTNET = 84531, BASE_MAINNET = 8453, LINEA_TESTNET = 59140, + MANTLE_MAINNET = 5000, + MANTLE_TESTNET = 5001, + OPBNB_MAINNET = 204, + OPBNB_TESTNET = 5611, GANACHE = 1337, //Temp } From 649b39416860cfc1f7799f64a99a378c2b75f2ae Mon Sep 17 00:00:00 2001 From: aboudjem Date: Fri, 15 Sep 2023 20:09:35 +0700 Subject: [PATCH 0845/1247] =?UTF-8?q?=F0=9F=8E=A8=20remove=20style=20secti?= =?UTF-8?q?on?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTING.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a01209c7e..a0c7d7050 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,7 +21,6 @@ Your contributions are valued and will help in driving the decentralized web for - [Suggesting Enhancements 💡](#suggesting-enhancements-) - [First Time Contributing? 🌱](#first-time-contributing-) - [Improving Documentation 📚](#improving-documentation-) - - [Style Guides 🎨](#style-guides-) - [Commit Messages 📝](#commit-messages-) - [Join Biconomy's Team! 🚀](#join-biconomys-team-) @@ -56,8 +55,6 @@ Welcome! We're thrilled to have you. If you're unsure where to start, look for i Good documentation is key! If you spot areas for improvement or errors in our documentation, we'd love your input. If you wish to suggest changes, feel free to raise a PR on our [documentation repository](https://github.com/bcnmy/docs). -## Style Guides 🎨 - ### Commit Messages 📝 Ensure your commit messages are clear and descriptive. From 48b6531158e00b93b1fe73223608da95f04b06aa Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Sun, 17 Sep 2023 09:02:24 -0400 Subject: [PATCH 0846/1247] update test cases --- .../account/tests/SmartAccountV2.local.spec.ts | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index adf4102a6..6b2caabb5 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -12,7 +12,6 @@ import { } from "@biconomy/common"; import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -import { BiconomySmartAccount } from "../src/BiconomySmartAccount"; import { ChainId, UserOperation } from "@biconomy/core-types"; import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { MultiChainValidationModule } from "@biconomy/modules"; @@ -163,9 +162,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { // Review: Just setting different default validation module and querying account address is not working // accountAPI.setDefaultValidationModule(module2); - // accountAPI.setActiveValidationModule(module2); - - // Review + // Review with setting different validation module other than provided in config accountAPI2 = await accountAPI2.init(); const accountAddress2 = await accountAPI2.getAccountAddress(); @@ -221,24 +218,11 @@ describe("BiconomySmartAccountV2 API Specs", () => { value: ethers.utils.parseEther("0.1"), }); - console.log("accountAPI.accountAddress", accountAPI.accountAddress); - - // TODO - // Note: this is a MUST currently otherwise account deployed state does not get updated and returns wrong initcode - accountAPI = await accountAPI.init(); - - /*const initCode = await accountAPI.getInitCode(); - console.log("initCode ", initCode); - - console.log("isDeployed", accountAPI.isAccountDeployed(accountAddress));*/ - const op = await accountAPI.buildUserOp([enableModuleData], { // skipBundlerGasEstimation: true, // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, }); - console.log("op ", op); - const signedUserOp = await accountAPI.signUserOp(op); await entryPoint.handleOps([signedUserOp], beneficiary); From 3e37424db03f245740f591b2151f29fad08c21e8 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 18 Sep 2023 09:51:14 -0400 Subject: [PATCH 0847/1247] use encode function data instead of populate transaction --- packages/account/src/BaseSmartAccount.ts | 1 + packages/account/src/BiconomySmartAccount.ts | 2 +- .../account/src/BiconomySmartAccountV2.ts | 40 ++++++++++--------- packages/account/src/utils/Constants.ts | 1 + 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index d969714bf..06d776214 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -54,6 +54,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { this.entryPoint = EntryPoint__factory.connect(this.entryPointAddress, this.provider).connect(ethers.constants.AddressZero); } + // TODO async init(): Promise { if ((await this.provider.getCode(this.entryPointAddress)) === "0x") { throw new Error(`EntryPoint not deployed at ${this.entryPointAddress} at chainId ${this.chainId}}`); diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index dce98c29d..8000d428b 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -123,7 +123,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart ); const proxyInstanceDto = { smartAccountType: SmartAccountType.BICONOMY, - version: BICONOMY_IMPLEMENTATION_ADDRESSES[this.address], + version: BICONOMY_IMPLEMENTATION_ADDRESSES[this.smartAccountInfo.implementationAddress], contractAddress: this.address, provider: this.provider, }; diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 3f58dd218..65f56a2df 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -138,7 +138,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { const _index = params?.index ?? this.index; const counterFactualAddress = await this.factory.getAddressForCounterFactualAccount( - await _defaultAuthModule.getAddress(), + _defaultAuthModule.getAddress(), await _defaultAuthModule.getInitData(), _index, ); @@ -161,21 +161,21 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { this.isDefaultValidationModuleDefined(); - const populatedTransaction = await this.factory.populateTransaction.deployCounterFactualAccount( + /*const populatedTransaction = await this.factory.populateTransaction.deployCounterFactualAccount( await this.defaultValidationModule.getAddress(), await this.defaultValidationModule.getInitData(), this.index, - ); + );*/ // TODO: interface should work. return hexConcat([ this.factory.address, - populatedTransaction.data as string, - /*this.factory.interface.encodeFunctionData('deployCounterFactualAccount', [ + // populatedTransaction.data as string, + this.factory.interface.encodeFunctionData('deployCounterFactualAccount', [ await this.defaultValidationModule.getAddress(), await this.defaultValidationModule.getInitData(), this.index - ])*/ + ]) ]); } @@ -191,15 +191,17 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // this.isProxyDefined() const accountContract = await this._getAccountContract(); - const populatedTransaction = await accountContract.populateTransaction.execute_ncC(to, value, data); + // const populatedTransaction = await accountContract.populateTransaction.execute_ncC(to, value, data); - /*const executeCallData = accountContract.interface.encodeFunctionData('execute_ncC', [ + const executeCallData = accountContract.interface.encodeFunctionData('execute_ncC', [ to, value, data - ])*/ + ]) + + return executeCallData - return populatedTransaction.data as string; + // return populatedTransaction.data as string; } /** @@ -213,13 +215,14 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // this.isInitialized() // this.isProxyDefined() const accountContract = await this._getAccountContract(); - const populatedTransaction = await accountContract.populateTransaction.executeBatch_y6U(to, value, data); - /*const executeBatchCallData = accountContract.interface.encodeFunctionData('executeBatch_y6U', [ + // const populatedTransaction = await accountContract.populateTransaction.executeBatch_y6U(to, value, data); + const executeBatchCallData = accountContract.interface.encodeFunctionData('executeBatch_y6U', [ to, value, data - ])*/ - return populatedTransaction.data as string; + ]) + return executeBatchCallData + // return populatedTransaction.data as string; } // dummy signature depends on the validation module supplied. @@ -539,11 +542,11 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { async getEnableModuleData(moduleAddress: string): Promise { const accountContract = await this._getAccountContract(); - const populatedTransaction = await accountContract.populateTransaction.enableModule(moduleAddress); + const data = accountContract.interface.encodeFunctionData("enableModule", [moduleAddress]); const tx: Transaction = { to: await this.getAccountAddress(), value: "0", - data: populatedTransaction.data as string, + data: data as string, }; return tx; } @@ -551,11 +554,12 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { async getSetupAndEnableModuleData(moduleAddress: string, moduleSetupData: string): Promise { const accountContract = await this._getAccountContract(); // TODO: using encodeFunctionData - const populatedTransaction = await accountContract.populateTransaction.setupAndEnableModule(moduleAddress, moduleSetupData); + // const populatedTransaction = await accountContract.populateTransaction.setupAndEnableModule(moduleAddress, moduleSetupData); + const data = accountContract.interface.encodeFunctionData("setupAndEnableModule", [moduleAddress, moduleSetupData]); const tx: Transaction = { to: await this.getAccountAddress(), value: "0", - data: populatedTransaction.data as string, + data: data as string, }; return tx; } diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 630c7b793..4a62c4c1a 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -37,6 +37,7 @@ export const ENTRYPOINT_ADDRESSES_BY_VERSION: EntryPointAddressesByVersion = { }; // TODO // Update with latest factory address +// make use of BICONOMY_FACTORY_ADDRESSES to create reverse mapping here export const BICONOMY_FACTORY_ADDRESSES_BY_VERSION: BiconomyFactoriesByVersion = { V1_0_0: "0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c", V2_0_0: "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5", From 8d804c0b0149d14a4dd40314bc8e1915b93ecbe0 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 18 Sep 2023 11:59:28 -0400 Subject: [PATCH 0848/1247] refactor and add dev notes --- packages/account/src/BaseSmartAccount.ts | 3 +- .../account/src/BiconomySmartAccountV2.ts | 60 +++++-------------- 2 files changed, 15 insertions(+), 48 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 06d776214..35e8d9cb5 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -54,12 +54,11 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { this.entryPoint = EntryPoint__factory.connect(this.entryPointAddress, this.provider).connect(ethers.constants.AddressZero); } - // TODO async init(): Promise { + if (this.entryPointAddress === DEFAULT_ENTRYPOINT_ADDRESS) return this; if ((await this.provider.getCode(this.entryPointAddress)) === "0x") { throw new Error(`EntryPoint not deployed at ${this.entryPointAddress} at chainId ${this.chainId}}`); } - return this; } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 65f56a2df..3c1a5d468 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -137,6 +137,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { const _defaultAuthModule = params?.validationModule ?? this.defaultValidationModule; const _index = params?.index ?? this.index; + // TODO // use off-chain ts util functions const counterFactualAddress = await this.factory.getAddressForCounterFactualAccount( _defaultAuthModule.getAddress(), await _defaultAuthModule.getInitData(), @@ -161,21 +162,13 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { this.isDefaultValidationModuleDefined(); - /*const populatedTransaction = await this.factory.populateTransaction.deployCounterFactualAccount( - await this.defaultValidationModule.getAddress(), - await this.defaultValidationModule.getInitData(), - this.index, - );*/ - - // TODO: interface should work. return hexConcat([ this.factory.address, - // populatedTransaction.data as string, - this.factory.interface.encodeFunctionData('deployCounterFactualAccount', [ - await this.defaultValidationModule.getAddress(), + this.factory.interface.encodeFunctionData("deployCounterFactualAccount", [ + this.defaultValidationModule.getAddress(), await this.defaultValidationModule.getInitData(), - this.index - ]) + this.index, + ]), ]); } @@ -187,21 +180,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @returns */ async encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise { - // this.isInitialized() - // this.isProxyDefined() const accountContract = await this._getAccountContract(); - - // const populatedTransaction = await accountContract.populateTransaction.execute_ncC(to, value, data); - - const executeCallData = accountContract.interface.encodeFunctionData('execute_ncC', [ - to, - value, - data - ]) - - return executeCallData - - // return populatedTransaction.data as string; + return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]); } /** @@ -212,17 +192,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @returns */ async encodeExecuteBatch(to: Array, value: Array, data: Array): Promise { - // this.isInitialized() - // this.isProxyDefined() const accountContract = await this._getAccountContract(); - // const populatedTransaction = await accountContract.populateTransaction.executeBatch_y6U(to, value, data); - const executeBatchCallData = accountContract.interface.encodeFunctionData('executeBatch_y6U', [ - to, - value, - data - ]) - return executeBatchCallData - // return populatedTransaction.data as string; + return accountContract.interface.encodeFunctionData("executeBatch_y6U", [to, value, data]); } // dummy signature depends on the validation module supplied. @@ -499,7 +470,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // Review if need to be added in signUserOpHash methods in validationModule as well // If the account is undeployed, use ERC-6492 // Extend in child classes - /*if (!(await this.isAccountDeployed(this.getSmartAccountAddress()))) { + /*if (!(await this.isAccountDeployed(this.getAccountAddress()))) { const coder = new ethers.utils.AbiCoder() sig = coder.encode( @@ -553,31 +524,28 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { async getSetupAndEnableModuleData(moduleAddress: string, moduleSetupData: string): Promise { const accountContract = await this._getAccountContract(); - // TODO: using encodeFunctionData - // const populatedTransaction = await accountContract.populateTransaction.setupAndEnableModule(moduleAddress, moduleSetupData); const data = accountContract.interface.encodeFunctionData("setupAndEnableModule", [moduleAddress, moduleSetupData]); const tx: Transaction = { to: await this.getAccountAddress(), value: "0", - data: data as string, + data: data, }; return tx; } - async disableModule(preModule: string, moduleAddress: string): Promise { - const tx: Transaction = await this.getDisableModuleData(preModule, moduleAddress); + async disableModule(prevModule: string, moduleAddress: string): Promise { + const tx: Transaction = await this.getDisableModuleData(prevModule, moduleAddress); const partialUserOp = await this.buildUserOp([tx]); return this.sendUserOp(partialUserOp); } async getDisableModuleData(prevModule: string, moduleAddress: string): Promise { const accountContract = await this._getAccountContract(); - // TODO: using encodeFunctionData - const populatedTransaction = await accountContract.populateTransaction.disableModule(prevModule, moduleAddress); + const data = accountContract.interface.encodeFunctionData("disableModule", [prevModule, moduleAddress]); const tx: Transaction = { to: await this.getAccountAddress(), value: "0", - data: populatedTransaction.data as string, + data: data, }; return tx; } @@ -587,10 +555,10 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return accountContract.isModuleEnabled(moduleName); } - // Review async getAllModules(pageSize?: number): Promise> { pageSize = pageSize ?? 100; const accountContract = await this._getAccountContract(); + // Note: If page size is lower then on the next page start module would be module at the end of first page and not SENTINEL_MODULE const result: Array> = await accountContract.getModulesPaginated(this.SENTINEL_MODULE, pageSize); const modules: Array = result[0] as Array; return modules; From d13fe025737e1bd1bdbebc099ed523ce002b99c0 Mon Sep 17 00:00:00 2001 From: Ankur Dubey Date: Wed, 20 Sep 2023 02:02:33 +0530 Subject: [PATCH 0849/1247] opt: fetch nonce, initcode and dummy signature parallely in buildUserOp --- packages/account/src/BiconomySmartAccountV2.ts | 17 +++++++++++++---- packages/account/src/utils/Constants.ts | 14 ++++++-------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 3c1a5d468..bdeaa9491 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -266,6 +266,15 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { const data = transactions.map((element: Transaction) => element.data ?? "0x"); const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); + // Queue promises to fetch independent data. + const nonceFetchPromise = (async () => { + const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0; + const nonce = await this.getNonce(_nonceSpace); + return nonce; + })(); + const initCodeFetchPromise = this.getInitCode(); + const dummySignatureFetchPromise = this.getDummySignature(buildUseropDto?.params); + if (transactions.length === 0) { throw new Error("Transactions array cannot be empty"); } @@ -283,8 +292,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { if (buildUseropDto?.nonceOptions?.nonceOverride) { nonce = BigNumber.from(buildUseropDto?.nonceOptions?.nonceOverride); } else { - const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0; - nonce = await this.getNonce(_nonceSpace); + nonce = await nonceFetchPromise; } } catch (error) { // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account @@ -299,13 +307,14 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { let userOp: Partial = { sender: this.accountAddress, nonce, - initCode: await this.getInitCode(), + initCode: await initCodeFetchPromise, callData: callData, }; // for this Smart Account current validation module dummy signature will be used to estimate gas - userOp.signature = await this.getDummySignature(buildUseropDto?.params); + userOp.signature = await dummySignatureFetchPromise; + // TODO: @AmanRaj1608 this will be removed? userOp = await this.estimateUserOpGas(userOp, buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation); Logger.log("UserOp after estimation ", userOp); diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 4a62c4c1a..109e8c0f9 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -38,15 +38,13 @@ export const ENTRYPOINT_ADDRESSES_BY_VERSION: EntryPointAddressesByVersion = { // TODO // Update with latest factory address // make use of BICONOMY_FACTORY_ADDRESSES to create reverse mapping here -export const BICONOMY_FACTORY_ADDRESSES_BY_VERSION: BiconomyFactoriesByVersion = { - V1_0_0: "0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c", - V2_0_0: "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5", -}; +export const BICONOMY_FACTORY_ADDRESSES_BY_VERSION: BiconomyFactoriesByVersion = Object.fromEntries( + Object.entries(BICONOMY_FACTORY_ADDRESSES).map(([k, v]) => [v, k]), +); // TODO // Update with latest implementation address which includes 2D nonce interface -export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementationsByVersion = { - V1_0_0: "0x00006b7e42e01957da540dc6a8f7c30c4d816af5", - V2_0_0: "0x0000002512019Dafb59528B82CB92D3c5D2423aC", -}; +export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementationsByVersion = Object.fromEntries( + Object.entries(BICONOMY_IMPLEMENTATION_ADDRESSES).map(([k, v]) => [v, k]), +); export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101]; From cc653f33d67bfb60b4395fcef492d572470f14a0 Mon Sep 17 00:00:00 2001 From: Ankur Dubey Date: Wed, 20 Sep 2023 03:39:36 +0530 Subject: [PATCH 0850/1247] opt: calculate address locally in getCounterFactualAddress --- .../account/src/BiconomySmartAccountV2.ts | 49 +++++++++++++------ packages/account/src/utils/Constants.ts | 4 ++ packages/account/src/utils/Types.ts | 1 + 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index bdeaa9491..cc31dc535 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1,7 +1,7 @@ import { JsonRpcProvider } from "@ethersproject/providers"; import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; import { BaseSmartAccount } from "./BaseSmartAccount"; -import { Bytes, hexConcat } from "ethers/lib/utils"; +import { Bytes, getCreate2Address, hexConcat, keccak256, solidityKeccak256 } from "ethers/lib/utils"; // Review failure reason for import from '@biconomy/account-contracts-v2/typechain' import { Logger, @@ -27,7 +27,12 @@ import { SCWTransactionResponse, } from "@biconomy/node-client"; import { UserOpResponse } from "@biconomy/bundler"; -import { DEFAULT_BICONOMY_FACTORY_ADDRESS } from "./utils/Constants"; +import { + BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, + DEFAULT_BICONOMY_FACTORY_ADDRESS, + DEFAULT_MINIMAL_HANDLER_ADDRESS, + PROXY_CREATION_CODE, +} from "./utils/Constants"; type UserOperationKey = keyof UserOperation; export class BiconomySmartAccountV2 extends BaseSmartAccount { @@ -51,6 +56,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { factory?: SmartAccountFactory_v200; + minimalHandlerAddress: string; + // Validation module responsible for account deployment initCode. This acts as a default authorization module. defaultValidationModule: BaseValidationModule; @@ -61,6 +68,13 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { super(biconomySmartAccountConfig); // Review: if it's really needed to supply factory address this.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 + const minimalHandlerAddress = + this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_MINIMAL_HANDLER_ADDRESS : biconomySmartAccountConfig.minimalHandlerAddress; + if (!minimalHandlerAddress) { + throw new Error("Minimal handler address is not provided"); + } + this.minimalHandlerAddress = minimalHandlerAddress; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion @@ -124,8 +138,6 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * calculate the account address even before it is deployed */ async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise { - // use Factory method instead - if (this.factory == null) { if (this.factoryAddress != null && this.factoryAddress !== "") { this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); @@ -134,17 +146,26 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } } - const _defaultAuthModule = params?.validationModule ?? this.defaultValidationModule; - const _index = params?.index ?? this.index; + const validationModule = params?.validationModule ?? this.defaultValidationModule; + const index = params?.index ?? this.index; - // TODO // use off-chain ts util functions - const counterFactualAddress = await this.factory.getAddressForCounterFactualAccount( - _defaultAuthModule.getAddress(), - await _defaultAuthModule.getInitData(), - _index, - ); - - return counterFactualAddress; + try { + const initCalldata = SmartAccount_v200__factory.createInterface().encodeFunctionData("init", [ + this.minimalHandlerAddress, + validationModule.getAddress(), + await validationModule.getInitData(), + ]); + const proxyCreationCodeHash = solidityKeccak256( + ["bytes", "uint256"], + [PROXY_CREATION_CODE, BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0], + ); + const salt = solidityKeccak256(["bytes32", "uint256"], [keccak256(initCalldata), index]); + const counterFactualAddress = getCreate2Address(this.factory.address, salt, proxyCreationCodeHash); + + return counterFactualAddress; + } catch (e) { + throw new Error(`Failed to get counterfactual address, ${e}`); + } } /** diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 109e8c0f9..26e1b7b29 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -19,6 +19,7 @@ export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { // will always be latest factory address export const DEFAULT_BICONOMY_FACTORY_ADDRESS = "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5"; +export const DEFAULT_MINIMAL_HANDLER_ADDRESS = "0x0bBa6d96BD616BedC6BFaa341742FD43c60b83C1"; export const BICONOMY_FACTORY_ADDRESSES: BiconomyFactories = { "0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c": "V1_0_0", "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5": "V2_0_0", @@ -48,3 +49,6 @@ export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementatio ); export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101]; + +export const PROXY_CREATION_CODE = + "0x6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033"; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 003378316..f8bcc5268 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -66,6 +66,7 @@ export type BiconomySmartAccountConfig = { export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { factoryAddress?: string; + minimalHandlerAddress?: string; rpcUrl?: string; // as good as Provider nodeClientUrl?: string; // very specific to Biconomy defaultValidationModule: BaseValidationModule; From 69a580ea9e309141b500274aa95e20e24365b522 Mon Sep 17 00:00:00 2001 From: Ankur Dubey Date: Wed, 20 Sep 2023 04:04:43 +0530 Subject: [PATCH 0851/1247] fix: BiconomySmartAccountV2 API Specs --- packages/account/src/BiconomySmartAccountV2.ts | 10 ++++++---- packages/account/src/utils/Types.ts | 1 + packages/account/tests/SmartAccountV2.local.spec.ts | 4 ++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index cc31dc535..d27c423a3 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -58,6 +58,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { minimalHandlerAddress: string; + implementationAddress: string; + // Validation module responsible for account deployment initCode. This acts as a default authorization module. defaultValidationModule: BaseValidationModule; @@ -68,6 +70,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { super(biconomySmartAccountConfig); // Review: if it's really needed to supply factory address this.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 + const minimalHandlerAddress = this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_MINIMAL_HANDLER_ADDRESS : biconomySmartAccountConfig.minimalHandlerAddress; if (!minimalHandlerAddress) { @@ -75,6 +78,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } this.minimalHandlerAddress = minimalHandlerAddress; + this.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion @@ -155,10 +160,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { validationModule.getAddress(), await validationModule.getInitData(), ]); - const proxyCreationCodeHash = solidityKeccak256( - ["bytes", "uint256"], - [PROXY_CREATION_CODE, BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0], - ); + const proxyCreationCodeHash = solidityKeccak256(["bytes", "uint256"], [PROXY_CREATION_CODE, this.implementationAddress]); const salt = solidityKeccak256(["bytes32", "uint256"], [keccak256(initCalldata), index]); const counterFactualAddress = getCreate2Address(this.factory.address, salt, proxyCreationCodeHash); diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index f8bcc5268..b6806f934 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -66,6 +66,7 @@ export type BiconomySmartAccountConfig = { export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { factoryAddress?: string; + implementationAddress?: string; minimalHandlerAddress?: string; rpcUrl?: string; // as good as Provider nodeClientUrl?: string; // very specific to Biconomy diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 6b2caabb5..be2b179e1 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -73,6 +73,8 @@ describe("BiconomySmartAccountV2 API Specs", () => { // bundler: bundler, entryPointAddress: entryPoint.address, factoryAddress: accountFactory.address, + implementationAddress: accountImpl.address, + minimalHandlerAddress: await accountFactory.minimalHandler(), defaultValidationModule: module1, activeValidationModule: module1, }); @@ -154,6 +156,8 @@ describe("BiconomySmartAccountV2 API Specs", () => { // bundler: bundler, entryPointAddress: entryPoint.address, factoryAddress: accountFactory.address, + implementationAddress: accountAPI.implementationAddress, + minimalHandlerAddress: await accountFactory.minimalHandler(), defaultValidationModule: module2, activeValidationModule: module2, }); From 55b7376336886226967b5bec5f11ba3ab750c5b6 Mon Sep 17 00:00:00 2001 From: Ankur Dubey Date: Wed, 20 Sep 2023 19:18:29 +0530 Subject: [PATCH 0852/1247] fix: comments #296 --- .../account/src/BiconomySmartAccountV2.ts | 22 +++++++++++-------- packages/account/src/utils/Constants.ts | 2 +- packages/account/src/utils/Types.ts | 2 +- .../tests/SmartAccountV2.local.spec.ts | 6 ++--- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index d27c423a3..079b046a1 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -30,7 +30,7 @@ import { UserOpResponse } from "@biconomy/bundler"; import { BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, DEFAULT_BICONOMY_FACTORY_ADDRESS, - DEFAULT_MINIMAL_HANDLER_ADDRESS, + DEFAULT_FALLBACK_HANDLER_ADDRESS, PROXY_CREATION_CODE, } from "./utils/Constants"; @@ -56,9 +56,9 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { factory?: SmartAccountFactory_v200; - minimalHandlerAddress: string; + private defaultFallbackHandlerAddress: string; - implementationAddress: string; + private implementationAddress: string; // Validation module responsible for account deployment initCode. This acts as a default authorization module. defaultValidationModule: BaseValidationModule; @@ -71,12 +71,12 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // Review: if it's really needed to supply factory address this.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 - const minimalHandlerAddress = - this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_MINIMAL_HANDLER_ADDRESS : biconomySmartAccountConfig.minimalHandlerAddress; - if (!minimalHandlerAddress) { - throw new Error("Minimal handler address is not provided"); + const defaultFallbackHandlerAddress = + this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_FALLBACK_HANDLER_ADDRESS : biconomySmartAccountConfig.defaultFallbackHandler; + if (!defaultFallbackHandlerAddress) { + throw new Error("Default Fallback Handler address is not provided"); } - this.minimalHandlerAddress = minimalHandlerAddress; + this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; this.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0; @@ -156,7 +156,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { try { const initCalldata = SmartAccount_v200__factory.createInterface().encodeFunctionData("init", [ - this.minimalHandlerAddress, + this.defaultFallbackHandlerAddress, validationModule.getAddress(), await validationModule.getInitData(), ]); @@ -537,6 +537,10 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return this.nodeClient.getAllSupportedChains(); } + getImplementationAddress(): string { + return this.implementationAddress; + } + async enableModule(moduleAddress: string): Promise { const tx: Transaction = await this.getEnableModuleData(moduleAddress); const partialUserOp = await this.buildUserOp([tx]); diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 26e1b7b29..f10f7bd60 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -19,7 +19,7 @@ export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { // will always be latest factory address export const DEFAULT_BICONOMY_FACTORY_ADDRESS = "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5"; -export const DEFAULT_MINIMAL_HANDLER_ADDRESS = "0x0bBa6d96BD616BedC6BFaa341742FD43c60b83C1"; +export const DEFAULT_FALLBACK_HANDLER_ADDRESS = "0x0bBa6d96BD616BedC6BFaa341742FD43c60b83C1"; export const BICONOMY_FACTORY_ADDRESSES: BiconomyFactories = { "0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c": "V1_0_0", "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5": "V2_0_0", diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index b6806f934..5e4c578e7 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -67,7 +67,7 @@ export type BiconomySmartAccountConfig = { export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { factoryAddress?: string; implementationAddress?: string; - minimalHandlerAddress?: string; + defaultFallbackHandler?: string; rpcUrl?: string; // as good as Provider nodeClientUrl?: string; // very specific to Biconomy defaultValidationModule: BaseValidationModule; diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index be2b179e1..0f2786f6c 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -74,7 +74,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { entryPointAddress: entryPoint.address, factoryAddress: accountFactory.address, implementationAddress: accountImpl.address, - minimalHandlerAddress: await accountFactory.minimalHandler(), + defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: module1, activeValidationModule: module1, }); @@ -156,8 +156,8 @@ describe("BiconomySmartAccountV2 API Specs", () => { // bundler: bundler, entryPointAddress: entryPoint.address, factoryAddress: accountFactory.address, - implementationAddress: accountAPI.implementationAddress, - minimalHandlerAddress: await accountFactory.minimalHandler(), + implementationAddress: accountAPI.getImplementationAddress(), + defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: module2, activeValidationModule: module2, }); From 62a5d0387db4fd2ae01f126347205a9e72c6018e Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 20 Sep 2023 12:28:40 -0400 Subject: [PATCH 0853/1247] all instances use create pattern --- .../account/src/BiconomySmartAccountV2.ts | 37 ++++++++++--------- .../tests/SmartAccountV2.local.spec.ts | 8 ++-- .../src/ECDSAOwnershipValidationModule.ts | 19 ++++++---- .../modules/src/MultichainValidationModule.ts | 19 ++++++---- 4 files changed, 48 insertions(+), 35 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 079b046a1..b8982d93e 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -36,7 +36,7 @@ import { type UserOperationKey = keyof UserOperation; export class BiconomySmartAccountV2 extends BaseSmartAccount { - private nodeClient: INodeClient; + private nodeClient!: INodeClient; private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; @@ -52,46 +52,49 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { */ accountContract?: SmartAccount_v200; - // TODO: both should be V2 - factory?: SmartAccountFactory_v200; - private defaultFallbackHandlerAddress: string; + private defaultFallbackHandlerAddress!: string; - private implementationAddress: string; + private implementationAddress!: string; // Validation module responsible for account deployment initCode. This acts as a default authorization module. - defaultValidationModule: BaseValidationModule; + defaultValidationModule!: BaseValidationModule; // Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature. - activeValidationModule: BaseValidationModule; + activeValidationModule!: BaseValidationModule; - constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) { + private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) { super(biconomySmartAccountConfig); - // Review: if it's really needed to supply factory address - this.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 + } + + public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { + const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); + instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 const defaultFallbackHandlerAddress = - this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_FALLBACK_HANDLER_ADDRESS : biconomySmartAccountConfig.defaultFallbackHandler; + instance.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_FALLBACK_HANDLER_ADDRESS : biconomySmartAccountConfig.defaultFallbackHandler; if (!defaultFallbackHandlerAddress) { throw new Error("Default Fallback Handler address is not provided"); } - this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; + instance.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; - this.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0; + instance.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; + instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? this.defaultValidationModule; + instance.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? instance.defaultValidationModule; const { rpcUrl, nodeClientUrl } = biconomySmartAccountConfig; if (rpcUrl) { - this.provider = new JsonRpcProvider(rpcUrl); + instance.provider = new JsonRpcProvider(rpcUrl); } - this.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); + instance.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); + + return instance } async _getAccountContract(): Promise { diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 0f2786f6c..60eaf9677 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -51,14 +51,14 @@ describe("BiconomySmartAccountV2 API Specs", () => { ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - module1 = new ECDSAOwnershipValidationModule({ + module1 = await ECDSAOwnershipValidationModule.create({ signer: owner, moduleAddress: ecdsaModule.address, }); multiChainModule = await new MultiChainValidationModule_v100__factory(signer).deploy(); - module2 = new MultiChainValidationModule({ + module2 = await MultiChainValidationModule.create({ signer: owner, moduleAddress: multiChainModule.address, }); @@ -66,7 +66,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { console.log("provider url ", provider.connection.url); recipient = await new SampleRecipient__factory(signer).deploy(); - accountAPI = new BiconomySmartAccountV2({ + accountAPI = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, rpcUrl: "http://127.0.0.1:8545", // paymaster: paymaster, @@ -149,7 +149,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { it("should build and send userop via bundler API", async () => {}); it("should deploy another account using different validation module", async () => { - let accountAPI2 = new BiconomySmartAccountV2({ + let accountAPI2 = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, rpcUrl: "http://127.0.0.1:8545", // paymaster: paymaster, diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index 299baa0ff..d5e9ef8fc 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -7,28 +7,33 @@ import { BaseValidationModule } from "./BaseValidationModule"; // Could be renamed with suffix API export class ECDSAOwnershipValidationModule extends BaseValidationModule { - signer: Signer; + signer!: Signer; moduleAddress!: string; version: ModuleVersion = "V1_0_0"; - constructor(moduleConfig: ECDSAOwnershipValidationModuleConfig) { + private constructor(moduleConfig: ECDSAOwnershipValidationModuleConfig) { super(moduleConfig); + } + + public static async create(moduleConfig: ECDSAOwnershipValidationModuleConfig): Promise { + const instance = new ECDSAOwnershipValidationModule(moduleConfig); if (moduleConfig.moduleAddress) { - this.moduleAddress = moduleConfig.moduleAddress; + instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } - this.moduleAddress = moduleAddr; - this.version = moduleConfig.version as ModuleVersion; + instance.moduleAddress = moduleAddr; + instance.version = moduleConfig.version as ModuleVersion; } else { - this.moduleAddress = DEFAULT_ECDSA_OWNERSHIP_MODULE; + instance.moduleAddress = DEFAULT_ECDSA_OWNERSHIP_MODULE; // Note: in this case Version remains the default one } - this.signer = moduleConfig.signer; + instance.signer = moduleConfig.signer; + return instance } getAddress(): string { diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index 2ee24a561..3abf74bf7 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -7,28 +7,33 @@ import { keccak256, arrayify, defaultAbiCoder, hexConcat, hexZeroPad, Bytes } fr import { ModuleVersion, MultiChainUserOpDto, MultiChainValidationModuleConfig } from "./utils/Types"; import { BaseValidationModule } from "./BaseValidationModule"; export class MultiChainValidationModule extends BaseValidationModule { - signer: Signer; + signer!: Signer; moduleAddress!: string; version: ModuleVersion = "V1_0_0"; - constructor(moduleConfig: MultiChainValidationModuleConfig) { + private constructor(moduleConfig: MultiChainValidationModuleConfig) { super(moduleConfig); + } + + public static async create(moduleConfig: MultiChainValidationModuleConfig): Promise { + const instance = new MultiChainValidationModule(moduleConfig); if (moduleConfig.moduleAddress) { - this.moduleAddress = moduleConfig.moduleAddress; + instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } - this.moduleAddress = moduleAddr; - this.version = moduleConfig.version as ModuleVersion; + instance.moduleAddress = moduleAddr; + instance.version = moduleConfig.version as ModuleVersion; } else { - this.moduleAddress = DEFAULT_MULTICHAIN_MODULE; + instance.moduleAddress = DEFAULT_MULTICHAIN_MODULE; // Note: in this case Version remains the default one } - this.signer = moduleConfig.signer; + instance.signer = moduleConfig.signer; + return instance } getAddress(): string { From 74e1c87e7c3e165c834c67b47ff07145c45501e5 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 20 Sep 2023 12:34:24 -0400 Subject: [PATCH 0854/1247] lint fix --- packages/account/src/BiconomySmartAccountV2.ts | 8 +++++--- packages/modules/src/ECDSAOwnershipValidationModule.ts | 2 +- packages/modules/src/MultichainValidationModule.ts | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index b8982d93e..ab54d6b84 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -73,7 +73,9 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 const defaultFallbackHandlerAddress = - instance.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_FALLBACK_HANDLER_ADDRESS : biconomySmartAccountConfig.defaultFallbackHandler; + instance.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS + ? DEFAULT_FALLBACK_HANDLER_ADDRESS + : biconomySmartAccountConfig.defaultFallbackHandler; if (!defaultFallbackHandlerAddress) { throw new Error("Default Fallback Handler address is not provided"); } @@ -93,8 +95,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } instance.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); - - return instance + + return instance; } async _getAccountContract(): Promise { diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index d5e9ef8fc..b2b62294e 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -33,7 +33,7 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { // Note: in this case Version remains the default one } instance.signer = moduleConfig.signer; - return instance + return instance; } getAddress(): string { diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index 3abf74bf7..420597ffb 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -33,7 +33,7 @@ export class MultiChainValidationModule extends BaseValidationModule { // Note: in this case Version remains the default one } instance.signer = moduleConfig.signer; - return instance + return instance; } getAddress(): string { From 8b35af71a05470a96a0b41d8c341cafc0a46070c Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 20 Sep 2023 13:49:43 -0400 Subject: [PATCH 0855/1247] keeping init in use --- packages/account/src/BiconomySmartAccountV2.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index ab54d6b84..9ecdac68e 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -70,6 +70,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); + await instance.init() instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 const defaultFallbackHandlerAddress = From d56a281d61e5e0c40d6c8755e3cffa3585f8ee84 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 20 Sep 2023 14:30:21 -0400 Subject: [PATCH 0856/1247] address todo and review comments --- packages/account/src/BaseSmartAccount.ts | 77 ++----------------- packages/account/src/BiconomySmartAccount.ts | 2 - .../account/src/BiconomySmartAccountV2.ts | 62 +++++++-------- packages/account/src/utils/Constants.ts | 4 - .../tests/SmartAccountV2.local.spec.ts | 2 - packages/bundler/src/utils/Types.ts | 1 - packages/common/src/ContractsInstances.ts | 3 +- packages/modules/src/BaseValidationModule.ts | 3 - .../modules/src/BatchedSessionRouterModule.ts | 2 - .../src/ECDSAOwnershipValidationModule.ts | 10 ++- .../modules/src/MultichainValidationModule.ts | 18 ++++- .../modules/src/SessionKeyManagerModule.ts | 3 - packages/modules/src/utils/Constants.ts | 2 +- packages/modules/src/utils/Types.ts | 3 - packages/node-client/src/INodeClient.ts | 1 - .../node-client/src/types/NodeClientTypes.ts | 8 +- packages/paymaster/src/BiconomyPaymaster.ts | 1 - packages/paymaster/src/utils/Types.ts | 4 - 18 files changed, 61 insertions(+), 145 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 35e8d9cb5..743e76462 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -33,7 +33,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { chainId?: ChainId; - provider: Provider; // Review + provider: Provider; // entryPoint connected to "zero" address. allowed to make static calls (e.g. to getSenderAddress) private readonly entryPoint!: EntryPoint; @@ -143,10 +143,9 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { let signature = await this.signUserOpHash(userOpHash); // Some signers do not return signed data with 0x prefix. make sure the v value is 27/28 instead of 0/1 - // Review: Make sure if it's valid hexString otherwise append 0x. - // Also split sig and add +27 to v is v is only 0/1. then stitch it back + // Note: Should only be applied for ECDSA k1 signatures const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); if (![27, 28].includes(potentiallyIncorrectV)) { const correctV = potentiallyIncorrectV + 27; @@ -156,19 +155,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { signature = "0x" + signature; } - // TODO - // If the account is undeployed, use ERC-6492 - // Extend in child classes - /*if (!(await this.isAccountDeployed(this.getSmartAccountAddress()))) { - const coder = new ethers.utils.AbiCoder() - sig = - coder.encode( - ['address', 'bytes', 'bytes'], - [, , sig] - ) + '6492649264926492649264926492649264926492649264926492649264926492' // magic suffix - }*/ - - userOp.signature = signature; // sig + userOp.signature = signature; return userOp as UserOperation; } @@ -285,7 +272,6 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { return "0x"; } - // Review : usage trace of this method. in the order of init and methods called on the Account async isAccountDeployed(address: string): Promise { this.isProviderDefined(); let isDeployed = false; @@ -421,65 +407,12 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { }; } - // TODO: allow this for batch. Review previous sdk versions - - /** - * create a UserOperation, filling all details (except signature) - * - if account is not yet created, add initCode to deploy it. - * - if gas or nonce are missing, read them from the chain (note that we can't fill gaslimit before the account is created) - * @param info - */ - async createUnsignedUserOp(info: TransactionDetailsForUserOp): Promise { - const { callData, callGasLimit } = await this.encodeUserOpCallDataAndGasLimit(info); - const initCode = await this.getInitCode(); - - const verificationGasLimit = BigNumber.from(await this.getVerificationGasLimit(initCode)); - - let { maxFeePerGas, maxPriorityFeePerGas } = info; - if (maxFeePerGas == null || maxPriorityFeePerGas == null) { - const feeData = await this.provider.getFeeData(); - if (maxFeePerGas == null) { - maxFeePerGas = feeData.maxFeePerGas ?? undefined; - } - if (maxPriorityFeePerGas == null) { - maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? undefined; - } - } - - const partialUserOp: any = { - sender: this.getAccountAddress(), - nonce: info.nonce ?? this.getNonce(), - initCode, - callData, - callGasLimit, - verificationGasLimit, - maxFeePerGas, - maxPriorityFeePerGas, - paymasterAndData: "0x", - }; - - let paymasterAndData: string | undefined; - if (this.paymaster != null) { - // fill (partial) preVerificationGas (all except the cost of the generated paymasterAndData) - const userOpForPm = { - ...partialUserOp, - preVerificationGas: await this.getPreVerificationGas(partialUserOp), - }; - paymasterAndData = (await this.paymaster.getPaymasterAndData(userOpForPm)).paymasterAndData; - } - partialUserOp.paymasterAndData = paymasterAndData ?? "0x"; - return { - ...partialUserOp, - preVerificationGas: this.getPreVerificationGas(partialUserOp), - signature: "", - }; - } - /** * helper method: create and sign a user operation. * @param info transaction details for the userOp */ async createSignedUserOp(info: TransactionDetailsForUserOp): Promise { - return this.signUserOp(await this.createUnsignedUserOp(info)); + Logger.log("createSignedUserOp called with info", info); + throw new Error("Not implemented. Please use buildUserOp/buildUserOperation in account implementation"); } } diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 8000d428b..2420f9017 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -258,8 +258,6 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart async buildUserOp(transactions: Transaction[], overrides?: Overrides, skipBundlerGasEstimation?: boolean): Promise> { this.isInitialized(); - // TODO: validate to, value and data fields - // TODO: validate overrides if supplied const to = transactions.map((element: Transaction) => element.to); const data = transactions.map((element: Transaction) => element.data ?? "0x"); const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 9ecdac68e..6ee1c8b46 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -2,7 +2,6 @@ import { JsonRpcProvider } from "@ethersproject/providers"; import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; import { BaseSmartAccount } from "./BaseSmartAccount"; import { Bytes, getCreate2Address, hexConcat, keccak256, solidityKeccak256 } from "ethers/lib/utils"; -// Review failure reason for import from '@biconomy/account-contracts-v2/typechain' import { Logger, NODE_CLIENT_URL, @@ -40,10 +39,6 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; - // Review: Marked for deletion - // private smartAccountInfo!: ISmartAccount - // private _isInitialised!: boolean - factoryAddress?: string; /** @@ -231,7 +226,6 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return this.activeValidationModule.getDummySignature(params); } - // Review: // Might use provided paymaster instance to get dummy data (from pm service) getDummyPaymasterData(): string { return "0x"; @@ -254,7 +248,23 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { super.validateUserOp(userOp, requiredFields); const userOpHash = await this.getUserOpHash(userOp); - const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); + let moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); + + // Note: If the account is undeployed, use ERC-6492 + // Review: Should only be needed for signMessage + /*if (!(await this.isAccountDeployed(await this.getAccountAddress()))) { + const coder = new ethers.utils.AbiCoder(); + const populatedTransaction = await this.factory?.populateTransaction.deployCounterFactualAccount( + await this.defaultValidationModule.getAddress(), + await this.defaultValidationModule.getInitData(), + this.index, + ); + moduleSig = + coder.encode(["address", "bytes", "bytes"], [this.factoryAddress, populatedTransaction?.data, moduleSig]) + + "6492649264926492649264926492649264926492649264926492649264926492"; // magic suffix + userOp.signature = moduleSig; + return userOp as UserOperation; + }*/ const signatureWithModuleAddress = ethers.utils.defaultAbiCoder.encode( ["bytes", "address"], @@ -286,11 +296,6 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { - // Review: may not need at all - // this.isInitialized() - - // TODO: validate to, value and data fields - // TODO: validate overrides if supplied const to = transactions.map((element: Transaction) => element.to); const data = transactions.map((element: Transaction) => element.data ?? "0x"); const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); @@ -327,12 +332,6 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account } - // let isDeployed = false - - /*if (nonce.eq(0) && this.accountAddress) { - isDeployed = await this.isAccountDeployed(this.accountAddress) - }*/ - let userOp: Partial = { sender: this.accountAddress, nonce, @@ -495,27 +494,22 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { const dataHash = ethers.utils.arrayify(ethers.utils.hashMessage(message)); let signature = await this.activeValidationModule.signMessage(dataHash); - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); - } if (signature.slice(0, 2) !== "0x") { signature = "0x" + signature; } - // TODO - // Review if need to be added in signUserOpHash methods in validationModule as well // If the account is undeployed, use ERC-6492 - // Extend in child classes - /*if (!(await this.isAccountDeployed(this.getAccountAddress()))) { - const coder = new ethers.utils.AbiCoder() - sig = - coder.encode( - ['address', 'bytes', 'bytes'], - [, , sig] - ) + '6492649264926492649264926492649264926492649264926492649264926492' // magic suffix - }*/ + if (!(await this.isAccountDeployed(await this.getAccountAddress()))) { + const coder = new ethers.utils.AbiCoder(); + const populatedTransaction = await this.factory?.populateTransaction.deployCounterFactualAccount( + await this.defaultValidationModule.getAddress(), + await this.defaultValidationModule.getInitData(), + this.index, + ); + signature = + coder.encode(["address", "bytes", "bytes"], [this.factoryAddress, populatedTransaction?.data, signature]) + + "6492649264926492649264926492649264926492649264926492649264926492"; // magic suffix + } return signature; } diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index f10f7bd60..0293af956 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -8,7 +8,6 @@ import { BiconomyImplementationsByVersion, } from "./Types"; -// Review: Note: Might be a good idea to keep reverse mapping for below and also default constants for latest versioned addresses*/ // will always be latest entrypoint address export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; @@ -37,13 +36,10 @@ export const ENTRYPOINT_ADDRESSES_BY_VERSION: EntryPointAddressesByVersion = { V0_0_6: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", }; -// TODO // Update with latest factory address -// make use of BICONOMY_FACTORY_ADDRESSES to create reverse mapping here export const BICONOMY_FACTORY_ADDRESSES_BY_VERSION: BiconomyFactoriesByVersion = Object.fromEntries( Object.entries(BICONOMY_FACTORY_ADDRESSES).map(([k, v]) => [v, k]), ); -// TODO // Update with latest implementation address which includes 2D nonce interface export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementationsByVersion = Object.fromEntries( Object.entries(BICONOMY_IMPLEMENTATION_ADDRESSES).map(([k, v]) => [v, k]), ); diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 60eaf9677..303dcbb3f 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -166,7 +166,6 @@ describe("BiconomySmartAccountV2 API Specs", () => { // Review: Just setting different default validation module and querying account address is not working // accountAPI.setDefaultValidationModule(module2); - // Review with setting different validation module other than provided in config accountAPI2 = await accountAPI2.init(); const accountAddress2 = await accountAPI2.getAccountAddress(); @@ -193,7 +192,6 @@ describe("BiconomySmartAccountV2 API Specs", () => { }); it("should check if module is enabled", async () => { - // Review const isEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module1 as any).moduleAddress); expect(isEcdsaModuleEnabled).toBe(true); diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index 7fbda2c18..17e1e8def 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -68,7 +68,6 @@ export type GetUserOpByHashResponse = { error?: JsonRpcError; }; -// TODO: need to verify this type from infinitism bundler, stackup export type UserOpByHashResponse = UserOperation & { transactionHash: string; blockNumber: number; diff --git a/packages/common/src/ContractsInstances.ts b/packages/common/src/ContractsInstances.ts index 0aa159e5a..e50294353 100644 --- a/packages/common/src/ContractsInstances.ts +++ b/packages/common/src/ContractsInstances.ts @@ -21,7 +21,7 @@ export type GetContractInstanceDto = { provider: JsonRpcProvider; }; -// TODO // Review return types +// Note: Review return types while adding new implementations export function getSAProxyContract(contractInstanceDto: GetContractInstanceDto): SmartAccount_v100 | SmartAccount_v200 { const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; switch (version) { @@ -41,7 +41,6 @@ export function getSAProxyContract(contractInstanceDto: GetContractInstanceDto): throw new Error("Invalid version or smartAccountType provided for proxy contract instance"); } -// TODO // Review return types export function getSAFactoryContract(contractInstanceDto: GetContractInstanceDto): SmartAccountFactory_v100 | SmartAccountFactory_v200 { const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; diff --git a/packages/modules/src/BaseValidationModule.ts b/packages/modules/src/BaseValidationModule.ts index d3f50f5c6..1a1e8cbeb 100644 --- a/packages/modules/src/BaseValidationModule.ts +++ b/packages/modules/src/BaseValidationModule.ts @@ -4,8 +4,6 @@ import { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types"; import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; import { IValidationModule } from "./interfaces/IValidationModule"; -// TODO: Review try using generic types -// Need to solve it in SmartAccountV2 and it's config because for any module BaseValidationModule is used as type export abstract class BaseValidationModule implements IValidationModule { entryPointAddress: string; @@ -26,7 +24,6 @@ export abstract class BaseValidationModule implements IValidationModule { // Anything required to get dummy signature can be passed as params abstract getDummySignature(_params?: ModuleInfo): Promise; - // Review naming convention for getter abstract getSigner(): Promise; // Signer specific or any other additional information can be passed as params diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 75c0c25be..a41a2a6a9 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -204,8 +204,6 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @remarks This is the dummy signature for the module, used in buildUserOp for bundler estimation * @returns Dummy signature */ - // Review - // instead of search params it could be actual leaves info retrieved beforehand async getDummySignature(params?: ModuleInfo): Promise { const sessionParams = params?.batchSessionParams; if (!sessionParams || sessionParams.length === 0) { diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index b2b62294e..3aabefe63 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -68,6 +68,14 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { } async signMessage(message: Bytes | string): Promise { - return this.signer.signMessage(message); + let signature = await this.signer.signMessage(message); + + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); + } + + return signature } } diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index 420597ffb..e20a42cb6 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -68,7 +68,15 @@ export class MultiChainValidationModule extends BaseValidationModule { } async signMessage(message: Bytes | string): Promise { - return this.signer.signMessage(message); + let signature = await this.signer.signMessage(message); + + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); + } + + return signature } async signUserOps(multiChainUserOps: MultiChainUserOpDto[]): Promise { @@ -91,7 +99,13 @@ export class MultiChainValidationModule extends BaseValidationModule { // Create a new Merkle tree using the leaves array const merkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true }); - const multichainSignature = await this.signer.signMessage(arrayify(merkleTree.getHexRoot())); + let multichainSignature = await this.signer.signMessage(arrayify(merkleTree.getHexRoot())); + + const potentiallyIncorrectV = parseInt(multichainSignature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + multichainSignature = multichainSignature.slice(0, -2) + correctV.toString(16); + } // Create an array to store updated userOps const updatedUserOps: UserOperation[] = []; diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index 6ee8ca2bb..92ff6c5b3 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -139,7 +139,6 @@ export class SessionKeyManagerModule extends BaseValidationModule { const setMerkleRootData = sessionKeyManagerModuleInterface.encodeFunctionData("setMerkleRoot", [this.merkleTree.getHexRoot()]); await this.sessionStorageClient.setMerkleRoot(this.merkleTree.getHexRoot()); - // TODO: create a signer if sessionPubKey if not given return { data: setMerkleRootData, sessionIDInfo: sessionIDInfo, @@ -247,8 +246,6 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @remarks This is the dummy signature for the module, used in buildUserOp for bundler estimation * @returns Dummy signature */ - // Review - // instead of search params it could be actual leaf info retrieved beforehand async getDummySignature(params?: ModuleInfo): Promise { Logger.log("moduleInfo ", params); if (!params) { diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts index dcab3cc0a..59b31e147 100644 --- a/packages/modules/src/utils/Constants.ts +++ b/packages/modules/src/utils/Constants.ts @@ -13,7 +13,7 @@ export const ENTRYPOINT_ADDRESSES_BY_VERSION = { V0_0_6: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", }; -// Review: If we should append these defaults with ADDRESS suffix +// Note: we could append these defaults with ADDRESS suffix export const DEFAULT_ECDSA_OWNERSHIP_MODULE = "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e"; export const ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION = { diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 3b930b6ff..1c4e65b01 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -17,9 +17,6 @@ export interface ECDSAOwnershipValidationModuleConfig extends BaseValidationModu export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfig { moduleAddress?: string; version?: ModuleVersion; - // Review - // sessionSigner?: Signer - // sessionPubKey?: string nodeClientUrl?: string; smartAccountAddress: string; storageType?: StorageType; diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts index 0b6910e01..a36c8bc37 100644 --- a/packages/node-client/src/INodeClient.ts +++ b/packages/node-client/src/INodeClient.ts @@ -40,7 +40,6 @@ interface INodeClient { /** * Get all supported tokens */ - // review getAllTokens(): Promise; /** diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index cf7ef89a7..2f74b240c 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -17,7 +17,6 @@ export type SmartAccountInfoResponse = { }; }; -// Review export type SCWTransactionResponse = { symbol: string; tokenAddress: string; @@ -136,12 +135,7 @@ export type TokenInfo = { updatedAt: Date; }; -// Review -// Info received from sdk backend -// As it seems currently it seems thought only for ECDSA validation module -// We should only need to obtain necessary info from backend -// Adding new modules will require changes here and sdk updates - +// Note: Applies for Account V1 export type ISmartAccount = { version: SmartAccountVersion; smartAccountAddress: string; diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 699167301..12f50338d 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -256,7 +256,6 @@ export class BiconomyPaymaster implements IHybridPaymaster, paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying ): Promise { - // TODO try { userOp = await this.prepareUserOperation(userOp); } catch (err) { diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index b73a80c13..4e2bd9669 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -27,8 +27,6 @@ export type PaymasterConfig = { strictMode?: boolean; }; -// review types and naming convention -// meant for pm_sponsorUserOperation export type SponsorUserOperationDto = { mode: PaymasterMode; calculateGasLimits?: boolean; @@ -41,8 +39,6 @@ export type SponsorUserOperationDto = { feeTokenAddress?: string; }; -// review types and naming convention -// meant for pm_getFeeQuoteOrData export type FeeQuotesOrDataDto = { mode?: PaymasterMode; expiryDuration?: number; From ca08b3168a5e67772f8fe135fdab0569758b828b Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 20 Sep 2023 15:15:23 -0400 Subject: [PATCH 0857/1247] lint fixes --- packages/account/src/BiconomySmartAccountV2.ts | 4 ++-- packages/account/src/utils/Constants.ts | 1 - packages/modules/src/ECDSAOwnershipValidationModule.ts | 2 +- packages/modules/src/MultichainValidationModule.ts | 6 +++--- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 6ee1c8b46..d3700c83d 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -65,7 +65,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); - await instance.init() + await instance.init(); instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 const defaultFallbackHandlerAddress = @@ -248,7 +248,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { super.validateUserOp(userOp, requiredFields); const userOpHash = await this.getUserOpHash(userOp); - let moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); + const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); // Note: If the account is undeployed, use ERC-6492 // Review: Should only be needed for signMessage diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 0293af956..4b3f257da 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -8,7 +8,6 @@ import { BiconomyImplementationsByVersion, } from "./Types"; - // will always be latest entrypoint address export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index 3aabefe63..9f8d80339 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -76,6 +76,6 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { signature = signature.slice(0, -2) + correctV.toString(16); } - return signature + return signature; } } diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index e20a42cb6..e00c06422 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -76,7 +76,7 @@ export class MultiChainValidationModule extends BaseValidationModule { signature = signature.slice(0, -2) + correctV.toString(16); } - return signature + return signature; } async signUserOps(multiChainUserOps: MultiChainUserOpDto[]): Promise { @@ -103,8 +103,8 @@ export class MultiChainValidationModule extends BaseValidationModule { const potentiallyIncorrectV = parseInt(multichainSignature.slice(-2), 16); if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - multichainSignature = multichainSignature.slice(0, -2) + correctV.toString(16); + const correctV = potentiallyIncorrectV + 27; + multichainSignature = multichainSignature.slice(0, -2) + correctV.toString(16); } // Create an array to store updated userOps From 5fac72942fac2d08c25d2cc714bb29a96c3b2b96 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 20 Sep 2023 15:41:08 -0400 Subject: [PATCH 0858/1247] address review comments --- packages/account/src/BaseSmartAccount.ts | 4 ---- .../account/src/BiconomySmartAccountV2.ts | 19 ++++++++++++++----- .../modules/src/MultichainValidationModule.ts | 3 +-- packages/paymaster/src/BiconomyPaymaster.ts | 1 - 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 743e76462..918f6befa 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -15,9 +15,6 @@ import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; type UserOperationKey = keyof UserOperation; export abstract class BaseSmartAccount implements IBaseSmartAccount { - // Review : compare with BaseAccountAPI - // private senderAddress!: string - bundler?: IBundler; // httpRpcClient paymaster?: IPaymaster; // paymasterAPI @@ -336,7 +333,6 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * return the account's address. * this value is valid even before deploying the contract. */ - // Review: Probably should accept index as well as we rely on factory! async getAccountAddress(): Promise { if (this.accountAddress == null) { // means it needs deployment diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index d3700c83d..6e2df9b71 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -122,6 +122,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { setDefaultValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { if (validationModule instanceof BaseValidationModule) { this.defaultValidationModule = validationModule; + this.accountAddress = undefined; } return this; } @@ -136,9 +137,17 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return BigNumber.from(0); } - // Review - // Overridden this method because entryPoint.callStatic.getSenderAddress() based on initCode doesnt always work - // in case of account is deployed you would get AA13 or AA10 + /** + * return the account's address. + * this value is valid even before deploying the contract. + */ + async getAccountAddress(params?: CounterFactualAddressParam): Promise { + if (this.accountAddress == null) { + // means it needs deployment + this.accountAddress = await this.getCounterFactualAddress(params); + } + return this.accountAddress; + } /** * calculate the account address even before it is deployed @@ -333,7 +342,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } let userOp: Partial = { - sender: this.accountAddress, + sender: await this.getAccountAddress(), nonce, initCode: await initCodeFetchPromise, callData: callData, @@ -342,7 +351,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // for this Smart Account current validation module dummy signature will be used to estimate gas userOp.signature = await dummySignatureFetchPromise; - // TODO: @AmanRaj1608 this will be removed? + // Note: Can change the default behaviour of calling estimations using bundler/local userOp = await this.estimateUserOpGas(userOp, buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation); Logger.log("UserOp after estimation ", userOp); diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index e00c06422..082b6185d 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -126,8 +126,7 @@ export class MultiChainValidationModule extends BaseValidationModule { [validUntil, validAfter, merkleTree.getHexRoot(), merkleProof, multichainSignature], ); - // add validation module address to the signature - // Note: because accountV2 does not directly call this method. + // Note: Because accountV2 does not directly call this method. hence we need to add validation module address to the signature const signatureWithModuleAddress = defaultAbiCoder.encode(["bytes", "address"], [moduleSignature, this.getAddress()]); // Update userOp with the final signature diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 12f50338d..405a0e50b 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -41,7 +41,6 @@ export class BiconomyPaymaster implements IHybridPaymaster): Promise> { - // Review userOp = await resolveProperties(userOp); if (userOp.nonce !== null || userOp.nonce !== undefined) { userOp.nonce = BigNumber.from(userOp.nonce).toHexString(); From 8d5bb888847e289576702f40b8077b98cd406d6c Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 20 Sep 2023 18:23:54 -0400 Subject: [PATCH 0859/1247] package version bump --- packages/account/package.json | 14 +++++++------- packages/bundler/package.json | 6 +++--- packages/common/package.json | 6 +++--- packages/core-types/package.json | 2 +- packages/modules/package.json | 8 ++++---- packages/node-client/package.json | 6 +++--- packages/particle-auth/package.json | 2 +- packages/paymaster/package.json | 6 +++--- packages/transak/package.json | 2 +- packages/web3-auth-native/package.json | 4 ++-- packages/web3-auth/package.json | 6 +++--- 11 files changed, 31 insertions(+), 31 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index cac615408..54bab6ccf 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account", - "version": "3.1.1-alpha.0", + "version": "3.1.0", "description": "This package provides apis for ERC-4337 based smart account implementations", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -40,12 +40,12 @@ "@account-abstraction/contracts": "^0.6.0", "@account-abstraction/utils": "^0.4.0", "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0", - "@biconomy/bundler": "^3.1.1-alpha.0", - "@biconomy/common": "^3.1.1-alpha.0", - "@biconomy/core-types": "^3.1.1-alpha.0", - "@biconomy/modules": "^3.1.1-alpha.0", - "@biconomy/node-client": "^3.1.1-alpha.0", - "@biconomy/paymaster": "^3.1.1-alpha.0", + "@biconomy/bundler": "^3.1.0", + "@biconomy/common": "^3.1.0", + "@biconomy/core-types": "^3.1.0", + "@biconomy/modules": "^3.1.0", + "@biconomy/node-client": "^3.1.0", + "@biconomy/paymaster": "^3.1.0", "ethers": "^5.7.0", "@ethersproject/providers": "^5.7.2" } diff --git a/packages/bundler/package.json b/packages/bundler/package.json index bb11f17c5..821fb6b63 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/bundler", - "version": "3.1.1-alpha.0", + "version": "3.1.0", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -37,8 +37,8 @@ "access": "public" }, "dependencies": { - "@biconomy/common": "^3.1.1-alpha.0", - "@biconomy/core-types": "^3.1.1-alpha.0", + "@biconomy/common": "^3.1.0", + "@biconomy/core-types": "^3.1.0", "@ethersproject/providers": "^5.7.2", "ethers": "^5.7.0" } diff --git a/packages/common/package.json b/packages/common/package.json index a3364c834..1890c8719 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "3.1.1-alpha.0", + "version": "3.1.0", "description": "common utils to be used for aa transactions", "keywords": [ "utils" @@ -41,8 +41,8 @@ }, "dependencies": { "@account-abstraction/contracts": "^0.6.0", - "@biconomy/core-types": "^3.1.1-alpha.0", - "@biconomy/node-client": "^3.1.1-alpha.0", + "@biconomy/core-types": "^3.1.0", + "@biconomy/node-client": "^3.1.0", "@ethersproject/abi": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/providers": "^5.7.0", diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 048d14207..20b22ef66 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/core-types", - "version": "3.1.1-alpha.0", + "version": "3.1.0", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/modules/package.json b/packages/modules/package.json index 27496fd87..7aaf0c62b 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/modules", - "version": "3.1.1-alpha.0", + "version": "3.1.0", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -35,9 +35,9 @@ "access": "public" }, "dependencies": { - "@biconomy/common": "^3.1.1-alpha.0", - "@biconomy/core-types": "^3.1.1-alpha.0", - "@biconomy/node-client": "^3.1.1-alpha.0", + "@biconomy/common": "^3.1.0", + "@biconomy/core-types": "^3.1.0", + "@biconomy/node-client": "^3.1.0", "merkletreejs": "^0.3.9", "ethers": "^5.7.2", "ethereumjs-util": "^7.1.5" diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 9a6f02074..bcdb1bc82 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/node-client", - "version": "3.1.1-alpha.0", + "version": "3.1.0", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -27,7 +27,7 @@ "README.md" ], "devDependencies": { - "@biconomy/core-types": "^3.1.1-alpha.0", + "@biconomy/core-types": "^3.1.0", "@nomiclabs/hardhat-ethers": "^2.1.0", "@nomiclabs/hardhat-waffle": "^2.0.3", "@nomiclabs/hardhat-web3": "^2.0.0", @@ -66,7 +66,7 @@ "access": "public" }, "dependencies": { - "@biconomy/core-types": "^3.1.1-alpha.0", + "@biconomy/core-types": "^3.1.0", "@ethersproject/abstract-signer": "^5.6.0", "@nomiclabs/hardhat-ethers": "^2.1.0", "node-fetch": "^2.6.6" diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 60727c8ee..fd108f3bf 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/particle-auth", - "version": "3.1.1-alpha.0", + "version": "3.1.0", "description": "Particle auth for Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index 0a5586a26..acf5bcc4d 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/paymaster", - "version": "3.1.1-alpha.0", + "version": "3.1.0", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -37,8 +37,8 @@ "access": "public" }, "dependencies": { - "@biconomy/common": "^3.1.1-alpha.0", - "@biconomy/core-types": "^3.1.1-alpha.0", + "@biconomy/common": "^3.1.0", + "@biconomy/core-types": "^3.1.0", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/properties": "^5.7.0", "ethers": "^5.7.0" diff --git a/packages/transak/package.json b/packages/transak/package.json index 022766c82..8cae753a0 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/transak", - "version": "3.1.1-alpha.0", + "version": "3.1.0", "description": "transak for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/web3-auth-native/package.json b/packages/web3-auth-native/package.json index 170c934c3..1487cf8ad 100644 --- a/packages/web3-auth-native/package.json +++ b/packages/web3-auth-native/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/web3-auth-native", - "version": "3.1.1-alpha.0", + "version": "3.1.0", "description": "web3-auth expo react-native for biconomy sdk.", "main": "dist/web3AuthNative.cjs.js", "module": "dist/web3AuthNative.esm.js", @@ -33,7 +33,7 @@ "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" }, "dependencies": { - "@biconomy/node-client": "^3.1.1-alpha.0", + "@biconomy/node-client": "^3.1.0", "@toruslabs/openlogin-jrpc": "^2.9.0", "@toruslabs/openlogin-utils": "^2.1.0", "@toruslabs/openlogin": "^2.8.0", diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json index 19e4791a7..cbbd149be 100644 --- a/packages/web3-auth/package.json +++ b/packages/web3-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/web3-auth", - "version": "3.1.1-alpha.0", + "version": "3.1.0", "description": "web3-auth for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -36,7 +36,7 @@ "access": "public" }, "dependencies": { - "@biconomy/node-client": "^3.1.1-alpha.0", + "@biconomy/node-client": "^3.1.0", "@walletconnect/qrcode-modal": "^1.8.0", "@web3auth/base": "^3.0.0", "@web3auth/core": "^3.0.0", @@ -49,7 +49,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@biconomy/node-client": "^3.1.1-alpha.0", + "@biconomy/node-client": "^3.1.0", "@types/react": "^18.0.15", "@types/react-dom": "^18.0.6", "path": "^0.12.7", From be8dd241c2cb4657713621831f5b8b6c980b6a88 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 20 Sep 2023 18:34:15 -0400 Subject: [PATCH 0860/1247] changelog --- packages/account/CHANGELOG.md | 55 +++++++++++++--- packages/account/package.json | 4 +- packages/bundler/CHANGELOG.md | 44 +++++++++++-- packages/common/CHANGELOG.md | 88 ++++++++++++++++++++------ packages/core-types/CHANGELOG.md | 29 ++++++++- packages/modules/CHANGELOG.md | 22 +++++++ packages/modules/package.json | 88 +++++++++++++------------- packages/node-client/CHANGELOG.md | 40 ++++++++++-- packages/particle-auth/CHANGELOG.md | 24 +++++-- packages/paymaster/CHANGELOG.md | 36 +++++++---- packages/transak/CHANGELOG.md | 20 +++++- packages/web3-auth-native/CHANGELOG.md | 19 ++++-- packages/web3-auth-native/package.json | 2 +- packages/web3-auth/CHANGELOG.md | 85 ++++++++++++++++++------- 14 files changed, 423 insertions(+), 133 deletions(-) diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index 9b6c41043..e39b2c8d5 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -3,33 +3,72 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.0 (2023-09-20) +Modular Account Abstraction is here. Contains BiconomySmartAccountV2 - an API for modular smart account. + +### Bug Fixes + +* add 10sec timeout limit for a test ([5d12fe7](https://github.com/bcnmy/biconomy-client-sdk/commit/5d12fe7d4b32e5c4628b971d22f6fc9cfcc6b414)) +* avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) +* BiconomySmartAccountV2 API Specs ([69a580e](https://github.com/bcnmy/biconomy-client-sdk/commit/69a580ea9e309141b500274aa95e20e24365b522)) +* build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) +* comments [#296](https://github.com/bcnmy/biconomy-client-sdk/issues/296) ([55b7376](https://github.com/bcnmy/biconomy-client-sdk/commit/55b7376336886226967b5bec5f11ba3ab750c5b6)) +* estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) +* gitInitCode cache issue ([4df3502](https://github.com/bcnmy/biconomy-client-sdk/commit/4df3502204e3c6c0c6faa90ba2c8aa0d6e826e48)) +* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +* unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) + + +### Features + +* get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +* update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) + + + + + ## 3.0.0 (2023-08-28) VERSION bump only Modular SDK - consists stable version of below updates done in Alphas. + + ## 3.1.1-alpha.0 (2023-08-02) + ### Bug Fixes VERSION bump only -# 3.1.1-alpha.0 (2023-07-24) + + + + +# 3.1.0-alpha.0 (2023-07-24) + ### Bug Fixes -- avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) +* avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) + + + + +## 3.0.0-alpha.0 (2023-07-12) -## 3.1.1-alpha.0 (2023-07-12) ### Bug Fixes -- estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) -- unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) +* estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) +* unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) + ### Features -- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) +* get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +* update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) \ No newline at end of file diff --git a/packages/account/package.json b/packages/account/package.json index 54bab6ccf..41d8c2a54 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -46,7 +46,7 @@ "@biconomy/modules": "^3.1.0", "@biconomy/node-client": "^3.1.0", "@biconomy/paymaster": "^3.1.0", - "ethers": "^5.7.0", - "@ethersproject/providers": "^5.7.2" + "@ethersproject/providers": "^5.7.2", + "ethers": "^5.7.0" } } diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index b1b245ca5..41c5e0eaa 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -3,26 +3,60 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.0 (2023-09-20) + +Modular Account Abstraction is here. + +### Bug Fixes + +* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) +* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) + + +### Features + +* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) +* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) +* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) + + + + + ## 3.0.0 (2023-08-28) Modular SDK - consists stable version of below updates done in Alphas. ### Features -- base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) +* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) + + + + ## 3.0.0-alpha.0 (2023-08-02) -# 3.1.1-alpha.0 (2023-07-24) +VERSION bump only + + + # 3.1.0-alpha.0 (2023-07-24) + ### Features -- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) +* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) + + + + + +## 3.0.0-alpha.0 (2023-07-12) -## 3.1.1-alpha.0 (2023-07-12) ### Bug Fixes -- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) +* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index 6b098bb29..6b9a5ff10 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -3,56 +3,106 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.0 (2023-09-20) + + +### Bug Fixes + +* comment out hardcoded gas limit in any case + fix value for estimate smart-account deployment + dev notes ([df48ec3](https://github.com/bcnmy/biconomy-client-sdk/commit/df48ec3c04cf44a8f64eb302217655076c6304a4)) +* error handling ([637bb67](https://github.com/bcnmy/biconomy-client-sdk/commit/637bb67b9390e39b4571374108bc70447a531963)) +* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) +* linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) +* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) +* undefined log issue ([42f3f70](https://github.com/bcnmy/biconomy-client-sdk/commit/42f3f7040c96ff5ac57459224b09a25f95d2cd8c)) + + +### Features + +* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) +* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) +* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) +* improve logs ([fb15af3](https://github.com/bcnmy/biconomy-client-sdk/commit/fb15af3af48ccf50101fedd7f9bb44ee97c747c4)) +* sdk test spec improvement ([fd80048](https://github.com/bcnmy/biconomy-client-sdk/commit/fd80048db7a60d34412dcb00f6dd8bb202f41ad3)) + + + + + ## 3.0.0 (2023-08-28) + ### Features -- base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) +* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) + + ## 3.0.0-alpha.0 (2023-08-02) -### Features +VERSION bump only + + + +# 3.1.0-alpha.0 (2023-07-24) -- Add logger for jsonRpc request([0c40641])(https://github.com/bcnmy/biconomy-client-sdk/commit/39a92fde78033e8dd850596a8a2ae7fc7bda0040) -# 3.1.1-alpha.0 (2023-07-24) ### Features -- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) +* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) + + + +## 3.0.0-alpha.0 (2023-07-12) -## 3.1.1-alpha.0 (2023-07-12) ### Bug Fixes -- comment out hardcoded gas limit in any case + fix value for estimate smart-account deployment + dev notes ([df48ec3](https://github.com/bcnmy/biconomy-client-sdk/commit/df48ec3c04cf44a8f64eb302217655076c6304a4)) -- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) -- linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) +* bundler sync changes ([eb9b30d](https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e)) + ## 2.0.2 (2023-06-10) -### Bug Fixes +* smart account state types to have factory address added -- update Types ([df48ec3](https://github.com/bcnmy/biconomy-client-sdk/commit/df48ec3c04cf44a8f64eb302217655076c6304a4)) ## 2.0.1 (2023-05-18) + ### Bug Fixes -- build changes related to scw changes ([940d464](https://github.com/bcnmy/biconomy-client-sdk/commit/940d464ee2693cb6478d785564a141441e8e3676)) +* logic update ([41c4aec](https://github.com/bcnmy/biconomy-client-sdk/commit/41c4aec8ab5012b7ad362b2870966bd607e38636)) +* fix build issue in angular for relative path (https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e) + + +### Features + +* chain integrations ([9af2da0](https://github.com/bcnmy/biconomy-client-sdk/commit/9af2da03820a26ac7d21301c32de041ced6c5e43)) +* Type added for PaymasterServiceData + reordering of params ([fae8b3a](https://github.com/bcnmy/biconomy-client-sdk/commit/fae8b3a02a5e810a9a40674d27f389b89199bb62)) +* logic changed to accept paymasterServiceData ([6daaf37](https://github.com/bcnmy/biconomy-client-sdk/commit/6daaf37855a13fa6e12fdbab16a7e980b4631475)) +* UserOpGasFields for fetching gas and gas prices from bundler (https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1) +* skipEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) +* fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) + + + + + ## 2.0.0 (2023-04-07) -### Bug Fixes -- error handling ([637bb67](https://github.com/bcnmy/biconomy-client-sdk/commit/637bb67b9390e39b4571374108bc70447a531963)) -- undefined log issue ([42f3f70](https://github.com/bcnmy/biconomy-client-sdk/commit/42f3f7040c96ff5ac57459224b09a25f95d2cd8c)) +### Bug Fixes -### Features +* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) +* multisend bundle ([5f55587](https://github.com/bcnmy/biconomy-client-sdk/commit/5f55587b63c82a30652843fe619d8b891e495399)) +* optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) -- improve logs ([fb15af3](https://github.com/bcnmy/biconomy-client-sdk/commit/fb15af3af48ccf50101fedd7f9bb44ee97c747c4)) -- sdk test spec improvement ([fd80048](https://github.com/bcnmy/biconomy-client-sdk/commit/fd80048db7a60d34412dcb00f6dd8bb202f41ad3)) ## 1.0.0 (2023-01-03) -**Note:** Version bump only for package @biconomy/common + +### Bug Fixes + +* optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) diff --git a/packages/core-types/CHANGELOG.md b/packages/core-types/CHANGELOG.md index 22baf6371..59ab27456 100644 --- a/packages/core-types/CHANGELOG.md +++ b/packages/core-types/CHANGELOG.md @@ -3,13 +3,38 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.0 (2023-09-20) + + +### Bug Fixes + +* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) +* build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) +* bundler sync changes ([eb9b30d](https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e)) +* logic update ([41c4aec](https://github.com/bcnmy/biconomy-client-sdk/commit/41c4aec8ab5012b7ad362b2870966bd607e38636)) +* multisend bundle ([5f55587](https://github.com/bcnmy/biconomy-client-sdk/commit/5f55587b63c82a30652843fe619d8b891e495399)) +* optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) + + +### Features + +* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) +* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) +* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) +* chain integrations ([9af2da0](https://github.com/bcnmy/biconomy-client-sdk/commit/9af2da03820a26ac7d21301c32de041ced6c5e43)) +* fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) + + + + + ## 3.0.0 (2023-08-28) ### Features - base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) -# 3.1.1-alpha.0 (2023-07-24) +# 3.1.0-alpha.0 (2023-07-24) VERSION bump only @@ -19,7 +44,7 @@ VERSION bump only - chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) -## 3.1.1-alpha.0 (2023-07-12) +## 3.1.0-alpha.0 (2023-07-12) ### Bug Fixes diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md index e69de29bb..410aa56d8 100644 --- a/packages/modules/CHANGELOG.md +++ b/packages/modules/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## 3.1.0 (2023-09-20) +Modular Account Abstraction is here. + +### Bug Fixes + +* incorrect data merkleRoot length ([2e9d2dd](https://github.com/bcnmy/biconomy-client-sdk/commit/2e9d2dd5876a4de61af390d6595e1ab2cf8c137c)) +* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) +* signing issue ([f67e339](https://github.com/bcnmy/biconomy-client-sdk/commit/f67e339bcff8d9712df8406b4d123affcd4d4aa4)) +* sorting leaves always ([1fb908c](https://github.com/bcnmy/biconomy-client-sdk/commit/1fb908cb3b90abe4588c3a162ecf45c8afc80d81)) +* use hexZeroPad in leaf ([b3da05f](https://github.com/bcnmy/biconomy-client-sdk/commit/b3da05f2e9c56973e96d0a7a3bc065aef23f9c18)) +* use proof instead of root ([3a40a9d](https://github.com/bcnmy/biconomy-client-sdk/commit/3a40a9d8b9fb1fba8f660e5eab1fae1369f9f289)) + + +### Features + +* add session key manager ([af41480](https://github.com/bcnmy/biconomy-client-sdk/commit/af41480ff1c88e2a4d0ee8605f2f01b3a958a1d9)) diff --git a/packages/modules/package.json b/packages/modules/package.json index 7aaf0c62b..6e92b6012 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,45 +1,45 @@ { - "name": "@biconomy/modules", - "version": "3.1.0", - "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", - "keywords": [ - "Smart Account", - "ERC-4337", - "Account Abstraction", - "Smart Contract Wallets", - "Biconomy", - "Modules", - "Plugins", - "EIP-6900" - ], - "scripts": { - "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", - "test:file": "TS_NODE_PROJECT=../../tsconfig.json mocha -r ts-node/register --timeout 30000", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", - "test:cov": "jest --coverage", - "test:run": "yarn test:file tests/**/*.spec.ts", - "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" - }, - "author": "livingrockrises ", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@biconomy/common": "^3.1.0", - "@biconomy/core-types": "^3.1.0", - "@biconomy/node-client": "^3.1.0", - "merkletreejs": "^0.3.9", - "ethers": "^5.7.2", - "ethereumjs-util": "^7.1.5" - } -} \ No newline at end of file + "name": "@biconomy/modules", + "version": "3.1.0", + "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", + "main": "./dist/src/index.js", + "typings": "./dist/src/index.d.ts", + "keywords": [ + "Smart Account", + "ERC-4337", + "Account Abstraction", + "Smart Contract Wallets", + "Biconomy", + "Modules", + "Plugins", + "EIP-6900" + ], + "scripts": { + "unbuild": "rimraf dist *.tsbuildinfo", + "build": "rimraf dist && tsc", + "test:file": "TS_NODE_PROJECT=../../tsconfig.json mocha -r ts-node/register --timeout 30000", + "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", + "test:cov": "jest --coverage", + "test:run": "yarn test:file tests/**/*.spec.ts", + "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", + "format": "prettier --write \"{src,tests}/**/*.ts\"", + "lint": "tslint -p tsconfig.json" + }, + "author": "livingrockrises ", + "license": "MIT", + "files": [ + "dist/*", + "README.md" + ], + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@biconomy/common": "^3.1.0", + "@biconomy/core-types": "^3.1.0", + "@biconomy/node-client": "^3.1.0", + "ethereumjs-util": "^7.1.5", + "ethers": "^5.7.2", + "merkletreejs": "^0.3.9" + } +} diff --git a/packages/node-client/CHANGELOG.md b/packages/node-client/CHANGELOG.md index e2bca4cd7..479c1cffd 100644 --- a/packages/node-client/CHANGELOG.md +++ b/packages/node-client/CHANGELOG.md @@ -3,28 +3,58 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -## 3.1.1-alpha.0 (2023-07-12) +## 3.1.0 (2023-09-20) +Version Bump Only. + +### Bug Fixes + +* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) +* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +* smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) + + + + + + + + + + +## 3.0.0 (2023-08-28) ## 3.0.0-alpha.0 (2023-07-12) + + + + ## 2.0.1 (2023-05-18) + ### Features -- skipEstimation flag for gas ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) +* skipEstimation flag for gas ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) + + ## 2.0.0 (2023-04-07) + ### Bug Fixes -- backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -- smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) +* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) +* smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) + + ## 1.0.0 (2023-01-03) + ### Bug Fixes -- smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) +* smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) + diff --git a/packages/particle-auth/CHANGELOG.md b/packages/particle-auth/CHANGELOG.md index 0b1ab4a2a..d57e34708 100644 --- a/packages/particle-auth/CHANGELOG.md +++ b/packages/particle-auth/CHANGELOG.md @@ -3,23 +3,37 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -## 3.1.1-alpha.0 (2023-07-12) +## 3.1.0 (2023-09-20) +Version Bump Only. + + + +# 3.0.0 (2023-08-28) ### Features -- particle auth integration ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) +* particle auth integration ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) + + + + ## 3.0.0-alpha.0 (2023-07-12) + + + + ## 2.0.1 (2023-06-10) + ### Bug Fixes -- typo ([0a63ff1](https://github.com/bcnmy/biconomy-client-sdk/commit/0a63ff17bb38b1bc2fd68669b74c2efd5a959d31)) +* typo ([0a63ff1](https://github.com/bcnmy/biconomy-client-sdk/commit/0a63ff17bb38b1bc2fd68669b74c2efd5a959d31)) + ## 2.0.0 (2023-30-05) ### Features - -- particle-auth ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) +* particle-auth ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) diff --git a/packages/paymaster/CHANGELOG.md b/packages/paymaster/CHANGELOG.md index f692d52e0..f45d42cc2 100644 --- a/packages/paymaster/CHANGELOG.md +++ b/packages/paymaster/CHANGELOG.md @@ -3,35 +3,45 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.0 (2023-09-20) +Version Bump Only. + + ## 3.0.0 (2023-08-28) Modular SDK - consists stable version of below updates done in Alphas. + + ## 3.0.0-alpha.0 (2023-08-02) ### Features -- letting maxFee and maxPriority not be undefined([46b985c](https://github.com/bcnmy/biconomy-client-sdk/commit/46b985c75fd135f151c9ac4380a65438cccc6f39)) -- passing on paymasterAndData([ae267f1])(https://github.com/bcnmy/biconomy-client-sdk/commit/ae267f1a103f37856eb233a38db7063bfcc4cb45) -- handle undefined values([e53d4a7])(https://github.com/bcnmy/biconomy-client-sdk/commit/e53d4a78aded8c8802786173daf12b27d445d4a0) -- handling userOp null values([c89ac42])(https://github.com/bcnmy/biconomy-client-sdk/commit/c89ac42ae1d7fd985ef2396d925cc63ec5cf926b) -- using signature provided by userop([0c40641])(https://github.com/bcnmy/biconomy-client-sdk/commit/0c40641e4cd6133f7348bb3e3022f8ab78fe299b) +* letting maxFee and maxPriority not be undefined([46b985c](https://github.com/bcnmy/biconomy-client-sdk/commit/46b985c75fd135f151c9ac4380a65438cccc6f39)) +* passing on paymasterAndData([ae267f1])(https://github.com/bcnmy/biconomy-client-sdk/commit/ae267f1a103f37856eb233a38db7063bfcc4cb45) +* handle undefined values([e53d4a7])(https://github.com/bcnmy/biconomy-client-sdk/commit/e53d4a78aded8c8802786173daf12b27d445d4a0) +* handling userOp null values([c89ac42])(https://github.com/bcnmy/biconomy-client-sdk/commit/c89ac42ae1d7fd985ef2396d925cc63ec5cf926b) +* using signature provided by userop([0c40641])(https://github.com/bcnmy/biconomy-client-sdk/commit/0c40641e4cd6133f7348bb3e3022f8ab78fe299b) -# 3.1.1-alpha.0 (2023-07-24) + + +# 3.1.0-alpha.0 (2023-07-24) VERSION bump only -## 3.1.1-alpha.0 (2023-07-12) +## 3.0.0-alpha.0 (2023-07-12) + ### Bug Fixes -- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) -- linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) +* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) +* linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) + ### Features -- covert gas limits to numbers for making pm service call ([b1fe96f](https://github.com/bcnmy/biconomy-client-sdk/commit/b1fe96f7a312ceaf7aa689939b7c69718c710dd1)) -- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) +* covert gas limits to numbers for making pm service call ([b1fe96f](https://github.com/bcnmy/biconomy-client-sdk/commit/b1fe96f7a312ceaf7aa689939b7c69718c710dd1)) +* get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +* update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) diff --git a/packages/transak/CHANGELOG.md b/packages/transak/CHANGELOG.md index b0a6115a9..4adbb2d26 100644 --- a/packages/transak/CHANGELOG.md +++ b/packages/transak/CHANGELOG.md @@ -3,18 +3,34 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.0 (2023-09-20) +### Bug Fixes + +* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) + + + + # 3.0.0 (2023-08-28) VERSION bump only + + ## 2.0.0 (2023-04-07) + ### Features -- transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) +* transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) + + + + ## 1.0.0 (2023-01-03) + ### Features -- transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) +* transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) diff --git a/packages/web3-auth-native/CHANGELOG.md b/packages/web3-auth-native/CHANGELOG.md index 65997a841..014e9548d 100644 --- a/packages/web3-auth-native/CHANGELOG.md +++ b/packages/web3-auth-native/CHANGELOG.md @@ -3,22 +3,31 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -## 3.1.1-alpha.0 (2023-07-12) +## 3.1.0 (2023-09-20) +Version Bump Only. -### Bug Fixes + +# 3.0.0 (2023-08-28) VERSION bump only + + ## 3.0.0-alpha.0 (2023-07-12) + ### Bug Fixes -- clean web3-auth-native ([8cd1fab](https://github.com/bcnmy/biconomy-client-sdk/commit/8cd1fab6bc4864b87b0ef33ce505c2e4e28b63d4)) -- linting issue in social login ([334276b](https://github.com/bcnmy/biconomy-client-sdk/commit/334276b70e66bac576b83c1910a9890a8a451b42)) +* clean web3-auth-native ([8cd1fab](https://github.com/bcnmy/biconomy-client-sdk/commit/8cd1fab6bc4864b87b0ef33ce505c2e4e28b63d4)) +* linting issue in social login ([334276b](https://github.com/bcnmy/biconomy-client-sdk/commit/334276b70e66bac576b83c1910a9890a8a451b42)) + + + ## 2.0.0 (2023-04-07) + ### Features -- web3-auth-native ([111bf66](https://github.com/bcnmy/biconomy-client-sdk/commit/111bf66134b8519b934895fe51082d22c8805e65)) +* web3-auth-native ([111bf66](https://github.com/bcnmy/biconomy-client-sdk/commit/111bf66134b8519b934895fe51082d22c8805e65)) diff --git a/packages/web3-auth-native/package.json b/packages/web3-auth-native/package.json index 1487cf8ad..5fc0def8d 100644 --- a/packages/web3-auth-native/package.json +++ b/packages/web3-auth-native/package.json @@ -34,9 +34,9 @@ }, "dependencies": { "@biconomy/node-client": "^3.1.0", + "@toruslabs/openlogin": "^2.8.0", "@toruslabs/openlogin-jrpc": "^2.9.0", "@toruslabs/openlogin-utils": "^2.1.0", - "@toruslabs/openlogin": "^2.8.0", "base64url": "^3.0.1", "buffer": "^6.0.3", "loglevel": "^1.8.1", diff --git a/packages/web3-auth/CHANGELOG.md b/packages/web3-auth/CHANGELOG.md index dbe07b147..074458c88 100644 --- a/packages/web3-auth/CHANGELOG.md +++ b/packages/web3-auth/CHANGELOG.md @@ -3,47 +3,88 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -## 3.1.1-alpha.0 (2023-07-12) +## 3.1.0 (2023-09-20) +### Bug Fixes + +* build ([6fb012a](https://github.com/bcnmy/biconomy-client-sdk/commit/6fb012a7d2004d5a5bad616a0ed025f1ee0a93b8)) +* css file not found ([d6cbd0b](https://github.com/bcnmy/biconomy-client-sdk/commit/d6cbd0bf88bc119c69778776df7c9bf6cd1efdb9)) +* error handling ([637bb67](https://github.com/bcnmy/biconomy-client-sdk/commit/637bb67b9390e39b4571374108bc70447a531963)) +* error handling ([7ebae72](https://github.com/bcnmy/biconomy-client-sdk/commit/7ebae72c5cfbe847bee8b2652cf88dd27a3934d9)) +* init param ([6bbccfb](https://github.com/bcnmy/biconomy-client-sdk/commit/6bbccfbff8834fa96160685f80bab7d64ec0f135)) +* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) +* ui bugs ([f7a4f47](https://github.com/bcnmy/biconomy-client-sdk/commit/f7a4f47c6076fd78515131ec59b128f312687a06)) + + +### Features + +* added email input and light mode ([741301a](https://github.com/bcnmy/biconomy-client-sdk/commit/741301a526774ed45805e477fac461b1d6afd8ac)) +* increased bg opacity ([aabbb2f](https://github.com/bcnmy/biconomy-client-sdk/commit/aabbb2fc7bab637de7a6c29fead0636979e6f6d0)) +* social login ui added ([4772065](https://github.com/bcnmy/biconomy-client-sdk/commit/477206546e0518af5a1d835f7370d70d586420c0)) +* web3-auth-native ([111bf66](https://github.com/bcnmy/biconomy-client-sdk/commit/111bf66134b8519b934895fe51082d22c8805e65)) +* web3auth modal UI ([7b7e510](https://github.com/bcnmy/biconomy-client-sdk/commit/7b7e5104ad5b1828e083f70a185328b566e9d456)) +* whitelist logic added ([53c2140](https://github.com/bcnmy/biconomy-client-sdk/commit/53c2140ef9b9d79d9d9c0e0c2c80e82b1df7f8b9)) + + + + + +# 3.0.0 (2023-08-28) VERSION bump only + + + + ## 3.0.0-alpha.0 (2023-07-12) + + + + ## 2.0.0 (2023-04-07) + ### Bug Fixes -- build ([6fb012a](https://github.com/bcnmy/biconomy-client-sdk/commit/6fb012a7d2004d5a5bad616a0ed025f1ee0a93b8)) -- css file not found ([d6cbd0b](https://github.com/bcnmy/biconomy-client-sdk/commit/d6cbd0bf88bc119c69778776df7c9bf6cd1efdb9)) -- error handling ([637bb67](https://github.com/bcnmy/biconomy-client-sdk/commit/637bb67b9390e39b4571374108bc70447a531963)) -- error handling ([7ebae72](https://github.com/bcnmy/biconomy-client-sdk/commit/7ebae72c5cfbe847bee8b2652cf88dd27a3934d9)) -- init param ([6bbccfb](https://github.com/bcnmy/biconomy-client-sdk/commit/6bbccfbff8834fa96160685f80bab7d64ec0f135)) -- ui bugs ([f7a4f47](https://github.com/bcnmy/biconomy-client-sdk/commit/f7a4f47c6076fd78515131ec59b128f312687a06)) +* build ([6fb012a](https://github.com/bcnmy/biconomy-client-sdk/commit/6fb012a7d2004d5a5bad616a0ed025f1ee0a93b8)) +* css file not found ([d6cbd0b](https://github.com/bcnmy/biconomy-client-sdk/commit/d6cbd0bf88bc119c69778776df7c9bf6cd1efdb9)) +* error handling ([637bb67](https://github.com/bcnmy/biconomy-client-sdk/commit/637bb67b9390e39b4571374108bc70447a531963)) +* error handling ([7ebae72](https://github.com/bcnmy/biconomy-client-sdk/commit/7ebae72c5cfbe847bee8b2652cf88dd27a3934d9)) +* init param ([6bbccfb](https://github.com/bcnmy/biconomy-client-sdk/commit/6bbccfbff8834fa96160685f80bab7d64ec0f135)) +* ui bugs ([f7a4f47](https://github.com/bcnmy/biconomy-client-sdk/commit/f7a4f47c6076fd78515131ec59b128f312687a06)) + ### Features -- added email input and light mode ([741301a](https://github.com/bcnmy/biconomy-client-sdk/commit/741301a526774ed45805e477fac461b1d6afd8ac)) -- increased bg opacity ([aabbb2f](https://github.com/bcnmy/biconomy-client-sdk/commit/aabbb2fc7bab637de7a6c29fead0636979e6f6d0)) -- social login ui added ([4772065](https://github.com/bcnmy/biconomy-client-sdk/commit/477206546e0518af5a1d835f7370d70d586420c0)) -- web3-auth-native ([111bf66](https://github.com/bcnmy/biconomy-client-sdk/commit/111bf66134b8519b934895fe51082d22c8805e65)) -- web3auth modal UI ([7b7e510](https://github.com/bcnmy/biconomy-client-sdk/commit/7b7e5104ad5b1828e083f70a185328b566e9d456)) -- whitelist logic added ([53c2140](https://github.com/bcnmy/biconomy-client-sdk/commit/53c2140ef9b9d79d9d9c0e0c2c80e82b1df7f8b9)) +* added email input and light mode ([741301a](https://github.com/bcnmy/biconomy-client-sdk/commit/741301a526774ed45805e477fac461b1d6afd8ac)) +* increased bg opacity ([aabbb2f](https://github.com/bcnmy/biconomy-client-sdk/commit/aabbb2fc7bab637de7a6c29fead0636979e6f6d0)) +* social login ui added ([4772065](https://github.com/bcnmy/biconomy-client-sdk/commit/477206546e0518af5a1d835f7370d70d586420c0)) +* web3-auth-native ([111bf66](https://github.com/bcnmy/biconomy-client-sdk/commit/111bf66134b8519b934895fe51082d22c8805e65)) +* web3auth modal UI ([7b7e510](https://github.com/bcnmy/biconomy-client-sdk/commit/7b7e5104ad5b1828e083f70a185328b566e9d456)) +* whitelist logic added ([53c2140](https://github.com/bcnmy/biconomy-client-sdk/commit/53c2140ef9b9d79d9d9c0e0c2c80e82b1df7f8b9)) + + + + ## 1.0.0 (2023-01-03) + ### Bug Fixes -- build ([6fb012a](https://github.com/bcnmy/biconomy-client-sdk/commit/6fb012a7d2004d5a5bad616a0ed025f1ee0a93b8)) -- css file not found ([d6cbd0b](https://github.com/bcnmy/biconomy-client-sdk/commit/d6cbd0bf88bc119c69778776df7c9bf6cd1efdb9)) -- init param ([6bbccfb](https://github.com/bcnmy/biconomy-client-sdk/commit/6bbccfbff8834fa96160685f80bab7d64ec0f135)) -- ui bugs ([f7a4f47](https://github.com/bcnmy/biconomy-client-sdk/commit/f7a4f47c6076fd78515131ec59b128f312687a06)) +* build ([6fb012a](https://github.com/bcnmy/biconomy-client-sdk/commit/6fb012a7d2004d5a5bad616a0ed025f1ee0a93b8)) +* css file not found ([d6cbd0b](https://github.com/bcnmy/biconomy-client-sdk/commit/d6cbd0bf88bc119c69778776df7c9bf6cd1efdb9)) +* init param ([6bbccfb](https://github.com/bcnmy/biconomy-client-sdk/commit/6bbccfbff8834fa96160685f80bab7d64ec0f135)) +* ui bugs ([f7a4f47](https://github.com/bcnmy/biconomy-client-sdk/commit/f7a4f47c6076fd78515131ec59b128f312687a06)) + ### Features -- added email input and light mode ([741301a](https://github.com/bcnmy/biconomy-client-sdk/commit/741301a526774ed45805e477fac461b1d6afd8ac)) -- increased bg opacity ([aabbb2f](https://github.com/bcnmy/biconomy-client-sdk/commit/aabbb2fc7bab637de7a6c29fead0636979e6f6d0)) -- social login ui added ([4772065](https://github.com/bcnmy/biconomy-client-sdk/commit/477206546e0518af5a1d835f7370d70d586420c0)) -- web3auth modal UI ([7b7e510](https://github.com/bcnmy/biconomy-client-sdk/commit/7b7e5104ad5b1828e083f70a185328b566e9d456)) -- whitelist logic added ([53c2140](https://github.com/bcnmy/biconomy-client-sdk/commit/53c2140ef9b9d79d9d9c0e0c2c80e82b1df7f8b9)) +* added email input and light mode ([741301a](https://github.com/bcnmy/biconomy-client-sdk/commit/741301a526774ed45805e477fac461b1d6afd8ac)) +* increased bg opacity ([aabbb2f](https://github.com/bcnmy/biconomy-client-sdk/commit/aabbb2fc7bab637de7a6c29fead0636979e6f6d0)) +* social login ui added ([4772065](https://github.com/bcnmy/biconomy-client-sdk/commit/477206546e0518af5a1d835f7370d70d586420c0)) +* web3auth modal UI ([7b7e510](https://github.com/bcnmy/biconomy-client-sdk/commit/7b7e5104ad5b1828e083f70a185328b566e9d456)) +* whitelist logic added ([53c2140](https://github.com/bcnmy/biconomy-client-sdk/commit/53c2140ef9b9d79d9d9c0e0c2c80e82b1df7f8b9)) From 37be34ebc396a74d7a4180bf2f515b5d97318f89 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 21 Sep 2023 02:43:47 -0400 Subject: [PATCH 0861/1247] add delay in/after beforeAll --- packages/account/tests/SmartAccountV2.local.spec.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 303dcbb3f..0ebc9da2a 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -87,7 +87,9 @@ describe("BiconomySmartAccountV2 API Specs", () => { const counterFactualAddress = await accountAPI.getAccountAddress(); console.log("Counterfactual address ", counterFactualAddress); - }); + + await new Promise((resolve) => setTimeout(resolve, 10000)); + }, 30000); it("Nonce should be zero", async () => { const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); From a950e1eb50a359b50cd0668850e477fa8803ccdf Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Tue, 26 Sep 2023 23:46:58 -0400 Subject: [PATCH 0862/1247] add simulateion type param --- packages/account/src/BaseSmartAccount.ts | 6 +++--- packages/account/src/BiconomySmartAccountV2.ts | 8 ++++---- packages/account/src/SmartAccount.ts | 10 +++++----- packages/account/src/utils/Types.ts | 7 +++++++ packages/bundler/src/Bundler.ts | 10 ++++++++-- packages/bundler/src/interfaces/IBundler.ts | 4 ++-- packages/bundler/src/utils/Types.ts | 6 ++++++ packages/modules/src/utils/Types.ts | 6 ++++++ 8 files changed, 41 insertions(+), 16 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 918f6befa..a43901513 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -7,7 +7,7 @@ import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaito import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; -import { BaseSmartAccountConfig, Overrides, TransactionDetailsForUserOp } from "./utils/Types"; +import { BaseSmartAccountConfig, Overrides, SendUserOpOptions, TransactionDetailsForUserOp } from "./utils/Types"; import { GasOverheads } from "./utils/Preverificaiton"; import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; @@ -176,7 +176,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @description This function call will take 'signedUserOp' as input and send it to the bundler * @returns */ - async sendSignedUserOp(userOp: UserOperation): Promise { + async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpOptions): Promise { const requiredFields: UserOperationKey[] = [ "sender", "nonce", @@ -194,7 +194,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { Logger.log("userOp validated"); if (!this.bundler) throw new Error("Bundler is not provided"); Logger.log("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp); + const bundlerResponse = await this.bundler.sendUserOp(userOp, params); return bundlerResponse; } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 6e2df9b71..777151102 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -11,7 +11,7 @@ import { SmartAccountFactory_v200__factory, } from "@biconomy/common"; import { BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, CounterFactualAddressParam, BuildUserOpOptions } from "./utils/Types"; -import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; +import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; @@ -240,7 +240,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return "0x"; } - async signUserOp(userOp: Partial, params?: ModuleInfo): Promise { + async signUserOp(userOp: Partial, params?: SendUserOpParams): Promise { this.isActiveValidationModuleDefined(); const requiredFields: UserOperationKey[] = [ "sender", @@ -296,7 +296,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. * @returns Promise */ - async sendUserOp(userOp: Partial, params?: ModuleInfo): Promise { + async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { Logger.log("userOp received in base account ", userOp); delete userOp.signature; const userOperation = await this.signUserOp(userOp, params); @@ -486,7 +486,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return userOp; } - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { + async signUserOpHash(userOpHash: string, params?: SendUserOpParams): Promise { this.isActiveValidationModuleDefined(); const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index fcc57a242..ad4ec560f 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -10,7 +10,7 @@ import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; import { Logger } from "@biconomy/common"; import { IEntryPoint } from "@account-abstraction/contracts"; -import { SmartAccountConfig, Overrides } from "./utils/Types"; +import { SmartAccountConfig, Overrides, SendUserOpOptions } from "./utils/Types"; type UserOperationKey = keyof UserOperation; @@ -239,11 +239,11 @@ export abstract class SmartAccount implements ISmartAccount { * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. * @returns Promise */ - async sendUserOp(userOp: Partial): Promise { + async sendUserOp(userOp: Partial, params?: SendUserOpOptions): Promise { Logger.log("userOp received in base account ", userOp); delete userOp.signature; const userOperation = await this.signUserOp(userOp); - const bundlerResponse = await this.sendSignedUserOp(userOperation); + const bundlerResponse = await this.sendSignedUserOp(userOperation, params); return bundlerResponse; } @@ -253,7 +253,7 @@ export abstract class SmartAccount implements ISmartAccount { * @description This function call will take 'signedUserOp' as input and send it to the bundler * @returns */ - async sendSignedUserOp(userOp: UserOperation): Promise { + async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpOptions): Promise { const requiredFields: UserOperationKey[] = [ "sender", "nonce", @@ -271,7 +271,7 @@ export abstract class SmartAccount implements ISmartAccount { Logger.log("userOp validated"); if (!this.bundler) throw new Error("Bundler is not provided"); Logger.log("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp); + const bundlerResponse = await this.bundler.sendUserOp(userOp, params); return bundlerResponse; } } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 5e4c578e7..3e3c50b63 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -87,6 +87,13 @@ export type NonceOptions = { nonceOverride?: number; }; +export type SendUserOpOptions = { + signer?: Signer; + simulationType?: SimulationType; +}; + +export type SimulationType = "validation" | "validation_and_execution"; + export type Overrides = { callGasLimit?: BigNumberish; verificationGasLimit?: BigNumberish; diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 24399febf..2cc834744 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -10,6 +10,7 @@ import { SendUserOpResponse, UserOpGasResponse, UserOpByHashResponse, + SendUserOpOptions, } from "./utils/Types"; import { resolveProperties } from "ethers/lib/utils"; import { deepHexlify, sendRequest, getTimestampInSeconds, HttpMethod, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; @@ -78,12 +79,17 @@ export class Bundler implements IBundler { * @description This function will send signed userOp to bundler to get mined on chain * @returns Promise */ - async sendUserOp(userOp: UserOperation): Promise { + async sendUserOp(userOp: UserOperation, simulationParam?: SendUserOpOptions): Promise { const chainId = this.bundlerConfig.chainId; // transformUserOP will convert all bigNumber values to string userOp = transformUserOP(userOp); const hexifiedUserOp = deepHexlify(await resolveProperties(userOp)); - const params = [hexifiedUserOp, this.bundlerConfig.entryPointAddress]; + const simType = { + simulation_type: simulationParam?.simulationType || "validation", + }; + // const params = [hexifiedUserOp, this.bundlerConfig.entryPointAddress, validationSimulation]; + // const params = [hexifiedUserOp, this.bundlerConfig.entryPointAddress, validationAndExecutionSimulation]; + const params = [hexifiedUserOp, this.bundlerConfig.entryPointAddress, simType]; const bundlerUrl = this.getBundlerUrl(); const sendUserOperationResponse: SendUserOpResponse = await sendRequest({ url: bundlerUrl, diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts index a64c1151d..4430f9ae3 100644 --- a/packages/bundler/src/interfaces/IBundler.ts +++ b/packages/bundler/src/interfaces/IBundler.ts @@ -1,9 +1,9 @@ -import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse } from "../utils/Types"; +import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse, SendUserOpOptions } from "../utils/Types"; import { UserOperation } from "@biconomy/core-types"; export interface IBundler { estimateUserOpGas(_userOp: Partial): Promise; - sendUserOp(_userOp: UserOperation): Promise; + sendUserOp(_userOp: UserOperation, _params?: SendUserOpOptions): Promise; getUserOpReceipt(_userOpHash: string): Promise; getUserOpByHash(_userOpHash: string): Promise; } diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index 17e1e8def..2cd6c4e91 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -23,6 +23,12 @@ export type UserOpReceipt = { receipt: ethers.providers.TransactionReceipt; }; +export type SendUserOpOptions = { + simulationType?: SimulationType; +}; + +export type SimulationType = "validation" | "validation_and_execution"; + // Converted to JsonRpcResponse with strict type export type GetUserOperationResponse = { jsonrpc: string; diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 1c4e65b01..1c239ef0f 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -59,6 +59,12 @@ export type ModuleInfo = { batchSessionParams?: SessionParams[]; }; +export interface SendUserOpParams extends ModuleInfo { + simulationType: SimulationType; +} + +export type SimulationType = "validation" | "validation_and_execution"; + export type CreateSessionDataResponse = { data: string; sessionIDInfo: Array; From e55f2ae51e695342f1fc5943eb2a87bc738c3411 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 27 Sep 2023 00:25:41 -0400 Subject: [PATCH 0863/1247] add paymaster call for buildUserOp --- packages/account/src/BaseSmartAccount.ts | 7 ++-- packages/paymaster/src/BiconomyPaymaster.ts | 33 ++++++++++++++++++- .../paymaster/src/interfaces/IPaymaster.ts | 3 +- .../paymaster/src/utils/HelperFunction.ts | 24 ++++++++++++++ packages/paymaster/src/utils/Types.ts | 17 ++++++++++ 5 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 packages/paymaster/src/utils/HelperFunction.ts diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 918f6befa..d29d76c0a 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -233,7 +233,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { Logger.log("userOp in estimation", userOp); - if (!this.bundler || skipBundlerCall) { + if (!this.paymaster || skipBundlerCall) { if (!this.provider) throw new Error("Provider is not present for making rpc calls"); // if no bundler url is provided run offchain logic to assign following values of UserOp // maxFeePerGas, maxPriorityFeePerGas, verificationGasLimit, callGasLimit, preVerificationGas @@ -242,8 +242,8 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { delete userOp.maxFeePerGas; delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = - await this.bundler.estimateUserOpGas(userOp); + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas, paymasterAndData } = + await this.paymaster.estimateUserOpGas(userOp); // if neither user sent gas fee nor the bundler, estimate gas from provider if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { const feeData = await this.provider.getFeeData(); @@ -256,6 +256,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; } return finalUserOp; } diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 405a0e50b..5d9b4edf5 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -12,9 +12,12 @@ import { BiconomyTokenPaymasterRequest, PaymasterMode, PaymasterAndDataResponse, + UserOpGasResponse, + EstimateUserOpGasResponse, } from "./utils/Types"; import { BigNumberish, BigNumber, ethers } from "ethers"; -import { ERC20_ABI } from "./constants"; +import { transformUserOP } from "./utils/HelperFunction"; +import { ENTRYPOINT_ADDRESS, ERC20_ABI } from "./constants"; import { IHybridPaymaster } from "./interfaces/IHybridPaymaster"; const defaultPaymasterConfig: PaymasterConfig = { @@ -35,6 +38,34 @@ export class BiconomyPaymaster implements IHybridPaymaster { + userOp = transformUserOP(userOp); + Logger.log("userOp sending for fee estimate ", userOp); + + const response: EstimateUserOpGasResponse = await sendRequest({ + url: `${this.paymasterConfig.paymasterUrl}`, + method: HttpMethod.Post, + body: { + method: "pm_sponsorship", + params: [userOp, ENTRYPOINT_ADDRESS], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, + }); + + const userOpGasResponse = response.result; + for (const key in userOpGasResponse) { + if (key === "maxFeePerGas" || key === "maxPriorityFeePerGas") continue; + if (!userOpGasResponse[key as keyof UserOpGasResponse]) { + throw new Error(`Got undefined ${key} from bundler`); + } + } + return userOpGasResponse; + } + /** * @dev Prepares the user operation by resolving properties and converting certain values to hexadecimal format. * @param userOp The partial user operation. diff --git a/packages/paymaster/src/interfaces/IPaymaster.ts b/packages/paymaster/src/interfaces/IPaymaster.ts index 935392402..eb4e43304 100644 --- a/packages/paymaster/src/interfaces/IPaymaster.ts +++ b/packages/paymaster/src/interfaces/IPaymaster.ts @@ -1,8 +1,9 @@ import { UserOperation } from "@biconomy/core-types"; -import { PaymasterAndDataResponse } from "../utils/Types"; +import { PaymasterAndDataResponse, UserOpGasResponse } from "../utils/Types"; export interface IPaymaster { // Implementing class may add extra parameter (for example paymasterServiceData with it's own type) in below function signature + estimateUserOpGas(_userOp: Partial): Promise; getPaymasterAndData(_userOp: Partial): Promise; getDummyPaymasterAndData(_userOp: Partial): Promise; } diff --git a/packages/paymaster/src/utils/HelperFunction.ts b/packages/paymaster/src/utils/HelperFunction.ts new file mode 100644 index 000000000..a0d0240e4 --- /dev/null +++ b/packages/paymaster/src/utils/HelperFunction.ts @@ -0,0 +1,24 @@ +import { UserOperation } from "@biconomy/core-types"; +import { BigNumber } from "ethers"; + +export const transformUserOP = (userOp: UserOperation): UserOperation => { + try { + const userOperation = { ...userOp }; + const keys: (keyof UserOperation)[] = [ + "nonce", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + ]; + for (const key of keys) { + if (userOperation[key] && userOperation[key] !== "0") { + userOperation[key] = BigNumber.from(userOp[key]).toHexString(); + } + } + return userOperation; + } catch (error) { + throw `Failed to transform user operation: ${error}`; + } +}; diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index 4e2bd9669..5e45204ae 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -112,3 +112,20 @@ export enum PaymasterMode { ERC20 = "ERC20", SPONSORED = "SPONSORED", } + +// Converted to JsonRpcResponse with strict type +export type EstimateUserOpGasResponse = { + jsonrpc: string; + id: number; + result: UserOpGasResponse; + error?: JsonRpcError; +}; + +export type UserOpGasResponse = { + paymasterAndData: string; + preVerificationGas: string; + maxPriorityFeePerGas: string; + maxFeePerGas: string; + verificationGasLimit: string; + callGasLimit: string; +}; From 24d2d2018ca4a1f1af6374eaf176ea6765f761b4 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 27 Sep 2023 10:29:24 -0400 Subject: [PATCH 0864/1247] make SimulationType optional --- packages/modules/src/utils/Types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 1c239ef0f..64b9bb940 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -60,7 +60,7 @@ export type ModuleInfo = { }; export interface SendUserOpParams extends ModuleInfo { - simulationType: SimulationType; + simulationType?: SimulationType; } export type SimulationType = "validation" | "validation_and_execution"; From 04d49412bfc06e90d03d21d0bc8ec87447352e85 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 27 Sep 2023 11:19:09 -0400 Subject: [PATCH 0865/1247] minor fixes --- packages/account/src/BiconomySmartAccountV2.ts | 2 +- packages/bundler/src/Bundler.ts | 2 -- packages/bundler/src/interfaces/IBundler.ts | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 777151102..f3782e3ef 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -300,7 +300,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { Logger.log("userOp received in base account ", userOp); delete userOp.signature; const userOperation = await this.signUserOp(userOp, params); - const bundlerResponse = await this.sendSignedUserOp(userOperation); + const bundlerResponse = await this.sendSignedUserOp(userOperation, params); return bundlerResponse; } diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 2cc834744..37a48d8e5 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -87,8 +87,6 @@ export class Bundler implements IBundler { const simType = { simulation_type: simulationParam?.simulationType || "validation", }; - // const params = [hexifiedUserOp, this.bundlerConfig.entryPointAddress, validationSimulation]; - // const params = [hexifiedUserOp, this.bundlerConfig.entryPointAddress, validationAndExecutionSimulation]; const params = [hexifiedUserOp, this.bundlerConfig.entryPointAddress, simType]; const bundlerUrl = this.getBundlerUrl(); const sendUserOperationResponse: SendUserOpResponse = await sendRequest({ diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts index 4430f9ae3..d34c1321a 100644 --- a/packages/bundler/src/interfaces/IBundler.ts +++ b/packages/bundler/src/interfaces/IBundler.ts @@ -3,7 +3,7 @@ import { UserOperation } from "@biconomy/core-types"; export interface IBundler { estimateUserOpGas(_userOp: Partial): Promise; - sendUserOp(_userOp: UserOperation, _params?: SendUserOpOptions): Promise; + sendUserOp(_userOp: UserOperation, _simulationParam?: SendUserOpOptions): Promise; getUserOpReceipt(_userOpHash: string): Promise; getUserOpByHash(_userOpHash: string): Promise; } From 5f280fa271a6385b494b4ee5a73b23311390e741 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 27 Sep 2023 13:03:47 -0400 Subject: [PATCH 0866/1247] update type naming --- packages/account/src/BiconomySmartAccountV2.ts | 10 ++++++++-- packages/account/src/SmartAccount.ts | 6 +++--- packages/account/src/utils/Types.ts | 6 +++++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index f3782e3ef..7c0a70d55 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -10,7 +10,13 @@ import { SmartAccount_v200__factory, SmartAccountFactory_v200__factory, } from "@biconomy/common"; -import { BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, CounterFactualAddressParam, BuildUserOpOptions } from "./utils/Types"; +import { + BiconomyTokenPaymasterRequest, + BiconomySmartAccountV2Config, + CounterFactualAddressParam, + BuildUserOpOptions, + SendUserOpOptions, +} from "./utils/Types"; import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; import NodeClient from "@biconomy/node-client"; @@ -296,7 +302,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. * @returns Promise */ - async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { + async sendUserOp(userOp: Partial, params?: SendUserOpOptions): Promise { Logger.log("userOp received in base account ", userOp); delete userOp.signature; const userOperation = await this.signUserOp(userOp, params); diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index ad4ec560f..065d1f52e 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -10,7 +10,7 @@ import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; import { Logger } from "@biconomy/common"; import { IEntryPoint } from "@account-abstraction/contracts"; -import { SmartAccountConfig, Overrides, SendUserOpOptions } from "./utils/Types"; +import { SmartAccountConfig, Overrides, SendUserOpDto } from "./utils/Types"; type UserOperationKey = keyof UserOperation; @@ -239,7 +239,7 @@ export abstract class SmartAccount implements ISmartAccount { * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. * @returns Promise */ - async sendUserOp(userOp: Partial, params?: SendUserOpOptions): Promise { + async sendUserOp(userOp: Partial, params?: SendUserOpDto): Promise { Logger.log("userOp received in base account ", userOp); delete userOp.signature; const userOperation = await this.signUserOp(userOp); @@ -253,7 +253,7 @@ export abstract class SmartAccount implements ISmartAccount { * @description This function call will take 'signedUserOp' as input and send it to the bundler * @returns */ - async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpOptions): Promise { + async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpDto): Promise { const requiredFields: UserOperationKey[] = [ "sender", "nonce", diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 3e3c50b63..c4faa1c32 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -87,11 +87,15 @@ export type NonceOptions = { nonceOverride?: number; }; -export type SendUserOpOptions = { +export type SendUserOpDto = { signer?: Signer; simulationType?: SimulationType; }; +export type SendUserOpOptions = { + simulationType?: SimulationType; +}; + export type SimulationType = "validation" | "validation_and_execution"; export type Overrides = { From 1090b7cac6be3fed0fa815674382b25204b7cf3d Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 27 Sep 2023 14:01:46 -0400 Subject: [PATCH 0867/1247] minor refactor --- packages/account/src/utils/Types.ts | 2 ++ packages/node-client/README.md | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index c4faa1c32..9bd96981b 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -87,11 +87,13 @@ export type NonceOptions = { nonceOverride?: number; }; +// Used in AccountV1 export type SendUserOpDto = { signer?: Signer; simulationType?: SimulationType; }; +// Generic options in AccountV2 export type SendUserOpOptions = { simulationType?: SimulationType; }; diff --git a/packages/node-client/README.md b/packages/node-client/README.md index f77c33226..d9aedb44f 100644 --- a/packages/node-client/README.md +++ b/packages/node-client/README.md @@ -69,7 +69,7 @@ const balanceParams: BalancesDto = tokenAddresses: [], }; -const balFromSdk = await nodeClient.getAlltokenBalances(balanceParams); +const balFromSdk = await nodeClient.getAllTokenBalances(balanceParams); console.info("balFromSdk ", balFromSdk); const usdBalFromSdk = await nodeClient.getTotalBalanceInUsd(balanceParams); From 886d99089936743f15e5baaf4451eae460ab6ae7 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 27 Sep 2023 14:40:00 -0400 Subject: [PATCH 0868/1247] Merge branch 'development' into m_SMA-73_development --- packages/account/src/BiconomySmartAccount.ts | 86 +++++++++----------- 1 file changed, 38 insertions(+), 48 deletions(-) diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index c50625b9e..29567efc9 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -27,8 +27,15 @@ import { SmartAccountsResponse, SCWTransactionResponse, } from "@biconomy/node-client"; -import { ENTRYPOINT_ADDRESSES, BICONOMY_FACTORY_ADDRESSES, BICONOMY_IMPLEMENTATION_ADDRESSES, DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; +import { + ENTRYPOINT_ADDRESSES, + BICONOMY_FACTORY_ADDRESSES, + BICONOMY_IMPLEMENTATION_ADDRESSES, + DEFAULT_ENTRYPOINT_ADDRESS, + DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS, +} from "./utils/Constants"; import { Signer } from "ethers"; +import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; export class BiconomySmartAccount extends SmartAccount implements IBiconomySmartAccount { private factory!: SmartAccountFactory_v100; @@ -462,78 +469,61 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart async getUpdateImplementationData(newImplementationAddress?: string): Promise { // probably like V2 address or latest implemenbtation version // If needed we can fetch this from backend config - const latestImplementationAddress = - newImplementationAddress ?? DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS // latest - Logger.log('Recommended implementation address to upgrade to', latestImplementationAddress) + const latestImplementationAddress = newImplementationAddress ?? DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS; // latest + Logger.log("Recommended implementation address to upgrade to", latestImplementationAddress); // by querying the proxy contract - const currentImplementationAddress = await this.proxy.implementation() - Logger.log( - 'Current implementation address for this Smart Account', - currentImplementationAddress - ) - - if ( - ethers.utils.getAddress(currentImplementationAddress) !== - ethers.utils.getAddress(latestImplementationAddress) - ) { - const impInterface = new ethers.utils.Interface([ - 'function updateImplementation(address _implementation)' - ]) - const encodedData = impInterface.encodeFunctionData('updateImplementation', [ - latestImplementationAddress - ]) - return { to: this.address, value: BigNumber.from(0), data: encodedData } + const currentImplementationAddress = await this.proxy.implementation(); + Logger.log("Current implementation address for this Smart Account", currentImplementationAddress); + + if (ethers.utils.getAddress(currentImplementationAddress) !== ethers.utils.getAddress(latestImplementationAddress)) { + const impInterface = new ethers.utils.Interface(["function updateImplementation(address _implementation)"]); + const encodedData = impInterface.encodeFunctionData("updateImplementation", [latestImplementationAddress]); + return { to: this.address, value: BigNumber.from(0), data: encodedData }; } - return { to: this.address, value: 0, data: '0x' } + return { to: this.address, value: 0, data: "0x" }; } async getModuleSetupData(ecdsaModuleAddress?: string): Promise { try { - const moduleAddress = ecdsaModuleAddress ?? DEFAULT_ECDSA_OWNERSHIP_MODULE - const ecdsaModule = new ECDSAOwnershipValidationModule({ + const moduleAddress = ecdsaModuleAddress ?? DEFAULT_ECDSA_OWNERSHIP_MODULE; + const ecdsaModule = await ECDSAOwnershipValidationModule.create({ signer: this.signer, - moduleAddress: moduleAddress - }) + moduleAddress: moduleAddress, + }); // initForSmartAccount - const ecdsaOwnershipSetupData = await ecdsaModule.getInitData() + const ecdsaOwnershipSetupData = await ecdsaModule.getInitData(); const proxyInstanceDto = { smartAccountType: SmartAccountType.BICONOMY, - version: 'V2_0_0', // Review + version: "V2_0_0", // Review contractAddress: this.address, - provider: this.provider - } - const accountV2: SmartAccount_v200 = getSAProxyContract(proxyInstanceDto) as SmartAccount_v200 + provider: this.provider, + }; + const accountV2: SmartAccount_v200 = getSAProxyContract(proxyInstanceDto) as SmartAccount_v200; - const populatedTransaction = await accountV2.populateTransaction.setupAndEnableModule( - moduleAddress, - ecdsaOwnershipSetupData - ) + const populatedTransaction = await accountV2.populateTransaction.setupAndEnableModule(moduleAddress, ecdsaOwnershipSetupData); - return { to: this.address, value: 0, data: populatedTransaction.data } + return { to: this.address, value: 0, data: populatedTransaction.data }; } catch (error) { - Logger.error('Failed to get module setup data', error) + Logger.error("Failed to get module setup data", error); // throw error - return { to: this.address, value: 0, data: '0x' } + return { to: this.address, value: 0, data: "0x" }; } } // Once this userOp is sent (batch: a. updateImplementation and b. setupModule on upgraded proxy) // You can start using BiconomySmartAccountV2 - async updateImplementationUserOp( - newImplementationAddress?: string, - ecdsaModuleAddress?: string - ): Promise> { - const tx1 = await this.getUpdateImplementationData(newImplementationAddress) - const tx2 = await this.getModuleSetupData(ecdsaModuleAddress) + async updateImplementationUserOp(newImplementationAddress?: string, ecdsaModuleAddress?: string): Promise> { + const tx1 = await this.getUpdateImplementationData(newImplementationAddress); + const tx2 = await this.getModuleSetupData(ecdsaModuleAddress); - if (tx1.data !== '0x' && tx2.data !== '0x') { - const partialUserOp: Partial = await this.buildUserOp([tx1, tx2]) - return partialUserOp + if (tx1.data !== "0x" && tx2.data !== "0x") { + const partialUserOp: Partial = await this.buildUserOp([tx1, tx2]); + return partialUserOp; } else { - throw new Error('Not eligible for upgrade') + throw new Error("Not eligible for upgrade"); } } } From b0b0c4959464465a3de90b0ca305f447d49763e4 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Thu, 28 Sep 2023 00:37:53 -0400 Subject: [PATCH 0869/1247] code refactor --- packages/account/src/BaseSmartAccount.ts | 37 +++++++++------- .../account/src/BiconomySmartAccountV2.ts | 2 +- packages/account/src/utils/Types.ts | 5 ++- packages/paymaster/src/BiconomyPaymaster.ts | 42 +++++++++++-------- .../src/interfaces/IHybridPaymaster.ts | 4 +- .../paymaster/src/interfaces/IPaymaster.ts | 3 +- packages/paymaster/src/utils/Types.ts | 8 ++++ 7 files changed, 62 insertions(+), 39 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index d29d76c0a..7ade544af 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -6,7 +6,7 @@ import { UserOperation, ChainId } from "@biconomy/core-types"; import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; import { IBundler, UserOpResponse } from "@biconomy/bundler"; -import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; +import { IHybridPaymaster, IPaymaster, PaymasterAndDataResponse, PmServiceDto, SponsorUserOperationDto } from "@biconomy/paymaster"; import { BaseSmartAccountConfig, Overrides, TransactionDetailsForUserOp } from "./utils/Types"; import { GasOverheads } from "./utils/Preverificaiton"; import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; @@ -66,7 +66,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { if (!userOp[field]) { - throw new Error(`${field} is missing`); + throw new Error(`${String(field)} is missing`); } } return true; @@ -219,13 +219,14 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { async estimateUserOpGas( userOp: Partial, overrides?: Overrides, - skipBundlerGasEstimation?: boolean, + skipEstimation?: boolean, + pmServiceData?: PmServiceDto, ): Promise> { const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; this.validateUserOp(userOp, requiredFields); - let finalUserOp = userOp; - const skipBundlerCall = skipBundlerGasEstimation ?? false; + const finalUserOp = userOp; + const skipBundlerCall = skipEstimation ?? true; // Override gas values in userOp if provided in overrides params if (overrides) { userOp = { ...userOp, ...overrides }; @@ -233,17 +234,24 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { Logger.log("userOp in estimation", userOp); - if (!this.paymaster || skipBundlerCall) { - if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - // if no bundler url is provided run offchain logic to assign following values of UserOp - // maxFeePerGas, maxPriorityFeePerGas, verificationGasLimit, callGasLimit, preVerificationGas - finalUserOp = await this.calculateUserOpGasValues(userOp); + delete userOp.maxFeePerGas; + delete userOp.maxPriorityFeePerGas; + if (skipBundlerCall && this.paymaster) { + userOp.maxFeePerGas = userOp.maxFeePerGas ?? (await this.provider.getGasPrice()); + userOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas ?? (await this.provider.getGasPrice()); + // Making call to paymaster to get gas estimations for userOp + const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( + this.paymaster as IHybridPaymaster + ).estimateUserOpGas(userOp, pmServiceData); + finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; } else { - delete userOp.maxFeePerGas; - delete userOp.maxPriorityFeePerGas; + if (!this.bundler) throw new Error("Bundler is not provided"); // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas, paymasterAndData } = - await this.paymaster.estimateUserOpGas(userOp); + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = + await this.bundler.estimateUserOpGas(userOp); // if neither user sent gas fee nor the bundler, estimate gas from provider if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { const feeData = await this.provider.getFeeData(); @@ -256,7 +264,6 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; } return finalUserOp; } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 6e2df9b71..e7d476635 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -352,7 +352,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { userOp.signature = await dummySignatureFetchPromise; // Note: Can change the default behaviour of calling estimations using bundler/local - userOp = await this.estimateUserOpGas(userOp, buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation); + userOp = await this.estimateUserOpGas(userOp, buildUseropDto?.overrides, buildUseropDto?.skipEstimation, buildUseropDto?.pmServiceData); Logger.log("UserOp after estimation ", userOp); // Do not populate paymasterAndData as part of buildUserOp as it may not have all necessary details diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 5e4c578e7..035ac6c3a 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -2,7 +2,7 @@ import { Signer } from "ethers"; import { ChainId } from "@biconomy/core-types"; import { BigNumberish } from "ethers"; import { IBundler } from "@biconomy/bundler"; -import { IPaymaster, PaymasterFeeQuote } from "@biconomy/paymaster"; +import { IPaymaster, PaymasterFeeQuote, PmServiceDto } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Provider } from "@ethersproject/providers"; import { GasOverheads } from "./Preverificaiton"; @@ -76,10 +76,11 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { export type BuildUserOpOptions = { overrides?: Overrides; - skipBundlerGasEstimation?: boolean; + skipEstimation?: boolean; params?: ModuleInfo; nonceOptions?: NonceOptions; forceEncodeForBatch?: boolean; + pmServiceData?: PmServiceDto; }; export type NonceOptions = { diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 5d9b4edf5..5962c75a0 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -14,10 +14,11 @@ import { PaymasterAndDataResponse, UserOpGasResponse, EstimateUserOpGasResponse, + PmServiceDto, } from "./utils/Types"; import { BigNumberish, BigNumber, ethers } from "ethers"; import { transformUserOP } from "./utils/HelperFunction"; -import { ENTRYPOINT_ADDRESS, ERC20_ABI } from "./constants"; +import { ERC20_ABI } from "./constants"; import { IHybridPaymaster } from "./interfaces/IHybridPaymaster"; const defaultPaymasterConfig: PaymasterConfig = { @@ -41,28 +42,33 @@ export class BiconomyPaymaster implements IHybridPaymaster { + async estimateUserOpGas(userOp: UserOperation, paymasterServiceData?: PmServiceDto): Promise { userOp = transformUserOP(userOp); Logger.log("userOp sending for fee estimate ", userOp); - const response: EstimateUserOpGasResponse = await sendRequest({ - url: `${this.paymasterConfig.paymasterUrl}`, - method: HttpMethod.Post, - body: { - method: "pm_sponsorship", - params: [userOp, ENTRYPOINT_ADDRESS], - id: getTimestampInSeconds(), - jsonrpc: "2.0", - }, - }); + if (paymasterServiceData?.mode === undefined) { + throw new Error("mode is required in paymasterServiceData"); + } + paymasterServiceData.calculateGasLimits = true; - const userOpGasResponse = response.result; - for (const key in userOpGasResponse) { - if (key === "maxFeePerGas" || key === "maxPriorityFeePerGas") continue; - if (!userOpGasResponse[key as keyof UserOpGasResponse]) { - throw new Error(`Got undefined ${key} from bundler`); - } + let response: EstimateUserOpGasResponse; + try { + response = await sendRequest({ + url: `${this.paymasterConfig.paymasterUrl}`, + method: HttpMethod.Post, + body: { + method: "pm_sponsorUserOperation", + params: [userOp, paymasterServiceData], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, + }); + } catch (error: any) { + Logger.error("Failed to fetch data - reason: ", JSON.stringify(error)); + throw error; } + + const userOpGasResponse = response.result; return userOpGasResponse; } diff --git a/packages/paymaster/src/interfaces/IHybridPaymaster.ts b/packages/paymaster/src/interfaces/IHybridPaymaster.ts index aa1b51ebe..2fbe04ba0 100644 --- a/packages/paymaster/src/interfaces/IHybridPaymaster.ts +++ b/packages/paymaster/src/interfaces/IHybridPaymaster.ts @@ -1,5 +1,6 @@ import { UserOperation } from "@biconomy/core-types"; -import { FeeQuotesOrDataResponse, BiconomyTokenPaymasterRequest, FeeQuotesOrDataDto, PaymasterAndDataResponse } from "../utils/Types"; +import { FeeQuotesOrDataResponse, BiconomyTokenPaymasterRequest, FeeQuotesOrDataDto } from "../utils/Types"; +import { PaymasterAndDataResponse, PmServiceDto, UserOpGasResponse } from "../utils/Types"; import { Transaction } from "@biconomy/core-types"; import { Provider } from "@ethersproject/abstract-provider"; import { IPaymaster } from "./IPaymaster"; @@ -7,6 +8,7 @@ import { IPaymaster } from "./IPaymaster"; export interface IHybridPaymaster extends IPaymaster { getPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; getDummyPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; + estimateUserOpGas(_userOp: Partial, _paymasterServiceData?: PmServiceDto): Promise; buildTokenApprovalTransaction(_tokenPaymasterRequest: BiconomyTokenPaymasterRequest, _provider: Provider): Promise; getPaymasterFeeQuotesOrData(_userOp: Partial, _paymasterServiceData: FeeQuotesOrDataDto): Promise; } diff --git a/packages/paymaster/src/interfaces/IPaymaster.ts b/packages/paymaster/src/interfaces/IPaymaster.ts index eb4e43304..935392402 100644 --- a/packages/paymaster/src/interfaces/IPaymaster.ts +++ b/packages/paymaster/src/interfaces/IPaymaster.ts @@ -1,9 +1,8 @@ import { UserOperation } from "@biconomy/core-types"; -import { PaymasterAndDataResponse, UserOpGasResponse } from "../utils/Types"; +import { PaymasterAndDataResponse } from "../utils/Types"; export interface IPaymaster { // Implementing class may add extra parameter (for example paymasterServiceData with it's own type) in below function signature - estimateUserOpGas(_userOp: Partial): Promise; getPaymasterAndData(_userOp: Partial): Promise; getDummyPaymasterAndData(_userOp: Partial): Promise; } diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index 5e45204ae..72dbbf1f4 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -129,3 +129,11 @@ export type UserOpGasResponse = { verificationGasLimit: string; callGasLimit: string; }; + +export type PmServiceDto = { + expiryDuration?: number; + mode: PaymasterMode; + calculateGasLimits?: boolean; + tokenInfo?: FeeTokenInfo; + sponsorshipInfo?: SponsorpshipInfo; +}; From 5b1d4bfd7b5062d05bbb97286b833d879cd972b0 Mon Sep 17 00:00:00 2001 From: Ankur Dubey Date: Thu, 28 Sep 2023 16:59:18 +0530 Subject: [PATCH 0870/1247] fix: optimistic implementation for getNonce() and cache for isAccountDeployed --- packages/account/package.json | 4 +++- packages/account/src/BaseSmartAccount.ts | 15 +++++++++++++-- packages/account/src/BiconomySmartAccountV2.ts | 10 +++++++--- packages/account/src/SmartAccount.ts | 5 +++-- packages/web3-auth-native/src/SocialLogin.ts | 5 +++-- 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index 41d8c2a54..018d66a6d 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -47,6 +47,8 @@ "@biconomy/node-client": "^3.1.0", "@biconomy/paymaster": "^3.1.0", "@ethersproject/providers": "^5.7.2", - "ethers": "^5.7.0" + "ethers": "^5.7.0", + "loglevel": "^1.8.1", + "lru-cache": "^10.0.1" } } diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 918f6befa..e98bbcef2 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -11,6 +11,7 @@ import { BaseSmartAccountConfig, Overrides, TransactionDetailsForUserOp } from " import { GasOverheads } from "./utils/Preverificaiton"; import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; +import LRUCache = require("lru-cache"); type UserOperationKey = keyof UserOperation; @@ -35,6 +36,10 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { // entryPoint connected to "zero" address. allowed to make static calls (e.g. to getSenderAddress) private readonly entryPoint!: EntryPoint; + private isContractDeployedCache = new LRUCache({ + max: 500, + }); + constructor(_smartAccountConfig: BaseSmartAccountConfig) { this.index = _smartAccountConfig.index ?? 0; this.overheads = _smartAccountConfig.overheads; @@ -242,8 +247,9 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { delete userOp.maxFeePerGas; delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = - await this.bundler.estimateUserOpGas(userOp); + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas( + userOp, + ); // if neither user sent gas fee nor the bundler, estimate gas from provider if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { const feeData = await this.provider.getFeeData(); @@ -270,10 +276,15 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { } async isAccountDeployed(address: string): Promise { + if (this.isContractDeployedCache.get(address)) { + return true; + } + this.isProviderDefined(); let isDeployed = false; const contractCode = await this.provider.getCode(address); if (contractCode.length > 2) { + this.isContractDeployedCache.set(address, true); isDeployed = true; } else { isDeployed = false; diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 6e2df9b71..0edc34842 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -32,6 +32,7 @@ import { DEFAULT_FALLBACK_HANDLER_ADDRESS, PROXY_CREATION_CODE, } from "./utils/Constants"; +import log from "loglevel"; type UserOperationKey = keyof UserOperation; export class BiconomySmartAccountV2 extends BaseSmartAccount { @@ -130,11 +131,14 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // Could call it nonce space async getNonce(nonceKey?: number): Promise { const nonceSpace = nonceKey ?? 0; - if (await this.isAccountDeployed(await this.getAccountAddress())) { + try { const accountContract = await this._getAccountContract(); - return accountContract.nonce(nonceSpace); + const nonce = await accountContract.nonce(nonceSpace); + return nonce; + } catch (e) { + log.debug("Failed to get nonce from deployed account. Returning 0 as nonce"); + return BigNumber.from(0); } - return BigNumber.from(0); } /** diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index fcc57a242..88ab3fcbe 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -124,8 +124,9 @@ export abstract class SmartAccount implements ISmartAccount { delete userOp.maxFeePerGas; delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = - await this.bundler.estimateUserOpGas(userOp); + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas( + userOp, + ); if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { const feeData = await this.provider.getFeeData(); finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); diff --git a/packages/web3-auth-native/src/SocialLogin.ts b/packages/web3-auth-native/src/SocialLogin.ts index a85530f1e..4222b3b00 100644 --- a/packages/web3-auth-native/src/SocialLogin.ts +++ b/packages/web3-auth-native/src/SocialLogin.ts @@ -31,8 +31,9 @@ class SocialLogin { } async whitelistUrl(origin: string): Promise { - const whiteListUrlResponse: WhiteListSignatureResponse = - await this.nodeClient.whitelistUrl(origin) + const whiteListUrlResponse: WhiteListSignatureResponse = await this.nodeClient.whitelistUrl( + origin + ) return whiteListUrlResponse.data } From a77f0dcecdc15b79aa8f1bc7174d69af2aba0bca Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 28 Sep 2023 11:57:07 -0400 Subject: [PATCH 0871/1247] fix linting --- packages/account/src/BaseSmartAccount.ts | 5 ++--- packages/account/src/SmartAccount.ts | 5 ++--- packages/web3-auth-native/src/SocialLogin.ts | 5 ++--- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index e98bbcef2..3369572a9 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -247,9 +247,8 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { delete userOp.maxFeePerGas; delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas( - userOp, - ); + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = + await this.bundler.estimateUserOpGas(userOp); // if neither user sent gas fee nor the bundler, estimate gas from provider if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { const feeData = await this.provider.getFeeData(); diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index 88ab3fcbe..fcc57a242 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -124,9 +124,8 @@ export abstract class SmartAccount implements ISmartAccount { delete userOp.maxFeePerGas; delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas( - userOp, - ); + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = + await this.bundler.estimateUserOpGas(userOp); if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { const feeData = await this.provider.getFeeData(); finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); diff --git a/packages/web3-auth-native/src/SocialLogin.ts b/packages/web3-auth-native/src/SocialLogin.ts index 4222b3b00..a85530f1e 100644 --- a/packages/web3-auth-native/src/SocialLogin.ts +++ b/packages/web3-auth-native/src/SocialLogin.ts @@ -31,9 +31,8 @@ class SocialLogin { } async whitelistUrl(origin: string): Promise { - const whiteListUrlResponse: WhiteListSignatureResponse = await this.nodeClient.whitelistUrl( - origin - ) + const whiteListUrlResponse: WhiteListSignatureResponse = + await this.nodeClient.whitelistUrl(origin) return whiteListUrlResponse.data } From 2a3e8c36cdf9d79b1994d48e6e579ffa6be66b51 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 28 Sep 2023 12:15:23 -0400 Subject: [PATCH 0872/1247] update import for lru cache --- packages/account/src/BaseSmartAccount.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 3369572a9..7030daa1c 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -11,7 +11,7 @@ import { BaseSmartAccountConfig, Overrides, TransactionDetailsForUserOp } from " import { GasOverheads } from "./utils/Preverificaiton"; import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; -import LRUCache = require("lru-cache"); +import { LRUCache } from 'lru-cache' type UserOperationKey = keyof UserOperation; From 320c4c3d27686b5500174efa16cd8ecd13d0d3fc Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Thu, 28 Sep 2023 12:32:26 -0400 Subject: [PATCH 0873/1247] minor fixes --- packages/account/src/BaseSmartAccount.ts | 1 + packages/account/src/BiconomySmartAccountV2.ts | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 7ade544af..7119f9262 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -264,6 +264,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.paymasterAndData = "0x"; } return finalUserOp; } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index e7d476635..7e0b687a7 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -355,9 +355,6 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { userOp = await this.estimateUserOpGas(userOp, buildUseropDto?.overrides, buildUseropDto?.skipEstimation, buildUseropDto?.pmServiceData); Logger.log("UserOp after estimation ", userOp); - // Do not populate paymasterAndData as part of buildUserOp as it may not have all necessary details - userOp.paymasterAndData = "0x"; // await this.getPaymasterAndData(userOp) - return userOp; } From 076ceba6e5bb3dacd3027997ad2e9ce06694c9af Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Thu, 28 Sep 2023 19:28:36 -0400 Subject: [PATCH 0874/1247] chore: paymaster code changes --- packages/account/src/BaseSmartAccount.ts | 47 +++++++----- packages/account/src/BiconomySmartAccount.ts | 42 +++-------- .../account/src/BiconomySmartAccountV2.ts | 24 ++---- packages/account/src/SmartAccount.ts | 39 ++++++++-- packages/account/src/utils/Types.ts | 6 +- packages/common/CHANGELOG.md | 2 +- packages/core-types/CHANGELOG.md | 2 +- packages/node-client/CHANGELOG.md | 2 +- packages/paymaster/src/BiconomyPaymaster.ts | 75 +++++++------------ .../src/interfaces/IHybridPaymaster.ts | 3 +- .../paymaster/src/utils/HelperFunction.ts | 24 ------ packages/paymaster/src/utils/Types.ts | 10 +-- 12 files changed, 112 insertions(+), 164 deletions(-) delete mode 100644 packages/paymaster/src/utils/HelperFunction.ts diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 7119f9262..4777d1ff5 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -6,11 +6,12 @@ import { UserOperation, ChainId } from "@biconomy/core-types"; import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; import { IBundler, UserOpResponse } from "@biconomy/bundler"; -import { IHybridPaymaster, IPaymaster, PaymasterAndDataResponse, PmServiceDto, SponsorUserOperationDto } from "@biconomy/paymaster"; +import { IHybridPaymaster, IPaymaster, PaymasterAndDataResponse, SponsorUserOperationDto } from "@biconomy/paymaster"; import { BaseSmartAccountConfig, Overrides, TransactionDetailsForUserOp } from "./utils/Types"; import { GasOverheads } from "./utils/Preverificaiton"; import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; +import { BiconomyPaymaster, PaymasterMode } from "@biconomy/paymaster"; type UserOperationKey = keyof UserOperation; @@ -219,14 +220,14 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { async estimateUserOpGas( userOp: Partial, overrides?: Overrides, - skipEstimation?: boolean, - pmServiceData?: PmServiceDto, + skipBundlerGasEstimation?: boolean, + paymasterServiceData?: SponsorUserOperationDto, ): Promise> { const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; this.validateUserOp(userOp, requiredFields); const finalUserOp = userOp; - const skipBundlerCall = skipEstimation ?? true; + const skipBundlerCall = skipBundlerGasEstimation ?? true; // Override gas values in userOp if provided in overrides params if (overrides) { userOp = { ...userOp, ...overrides }; @@ -234,21 +235,33 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { Logger.log("userOp in estimation", userOp); - delete userOp.maxFeePerGas; - delete userOp.maxPriorityFeePerGas; - if (skipBundlerCall && this.paymaster) { - userOp.maxFeePerGas = userOp.maxFeePerGas ?? (await this.provider.getGasPrice()); - userOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas ?? (await this.provider.getGasPrice()); - // Making call to paymaster to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( - this.paymaster as IHybridPaymaster - ).estimateUserOpGas(userOp, pmServiceData); - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + if (skipBundlerCall) { + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { + // TODO: delete these lines REVIEW + userOp.maxFeePerGas = userOp.maxFeePerGas ?? (await this.provider.getGasPrice()); + userOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas ?? (await this.provider.getGasPrice()); + // Making call to paymaster to get gas estimations for userOp + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas, paymasterAndData } = await ( + this.paymaster as IHybridPaymaster + ).getPaymasterAndData(userOp, paymasterServiceData); + finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; + finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; + finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + } else { + // TODO: delete these lines REVIEW + userOp.maxFeePerGas = userOp.maxFeePerGas ?? (await this.provider.getGasPrice()); + userOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas ?? (await this.provider.getGasPrice()); + Logger.log("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); + } + return finalUserOp; } else { if (!this.bundler) throw new Error("Bundler is not provided"); + // TODO: is this still needed to delete? + delete userOp.maxFeePerGas; + delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas(userOp); diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 2420f9017..81f317079 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -256,7 +256,12 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart return "0x"; } - async buildUserOp(transactions: Transaction[], overrides?: Overrides, skipBundlerGasEstimation?: boolean): Promise> { + async buildUserOp( + transactions: Transaction[], + overrides?: Overrides, + skipBundlerGasEstimation?: boolean, + paymasterServiceData?: SponsorUserOperationDto, + ): Promise> { this.isInitialized(); const to = transactions.map((element: Transaction) => element.to); const data = transactions.map((element: Transaction) => element.data ?? "0x"); @@ -291,11 +296,9 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart // for this Smart Account dummy ECDSA signature will be used to estimate gas userOp.signature = this.getDummySignature(); - userOp = await this.estimateUserOpGas(userOp, overrides, skipBundlerGasEstimation); - Logger.log("userOp after estimation ", userOp); - - // Do not populate paymasterAndData as part of buildUserOp as it may not have all necessary details - userOp.paymasterAndData = "0x"; // await this.getPaymasterAndData(userOp) + // Note: Can change the default behaviour of calling estimations using bundler/local + userOp = await this.estimateUserOpGas(userOp, overrides, skipBundlerGasEstimation, paymasterServiceData); + Logger.log("UserOp after estimation ", userOp); return userOp; } @@ -394,36 +397,11 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart newCallData = this.getExecuteBatchCallData(batchTo, batchValue, batchData); } - let finalUserOp: Partial = { + const finalUserOp: Partial = { ...userOp, callData: newCallData, }; - // Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) - try { - delete finalUserOp.callGasLimit; - delete finalUserOp.verificationGasLimit; - delete finalUserOp.preVerificationGas; - - // Maybe send paymasterAndData since we know it's for Token paymaster - /*finalUserOp.paymasterAndData = - '0x00000f7365ca6c59a2c93719ad53d567ed49c14c000000000000000000000000000000000000000000000000000000000064e3d3890000000000000000000000000000000000000000000000000000000064e3cc81000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e583100000000000000000000000000000f7748595e46527413574a9327942e744e910000000000000000000000000000000000000000000000000000000063ac7f6c000000000000000000000000000000000000000000000000000000000010c8e07bf61410b71700f943499adfd23e50fb16040d587acb0a5e60ac8576cdbb4c8044f00579a1fc3f294e7dc4a5eb557a7193008343aa36225bddcfbd4fd15646031c'*/ - - // Review: and handle the case when mock pnd fails with AA31 during simulation. - - finalUserOp = await this.estimateUserOpGas(finalUserOp); - const cgl = ethers.BigNumber.from(finalUserOp.callGasLimit); - if (finalUserOp.callGasLimit && cgl.lt(ethers.BigNumber.from("21000"))) { - return { - ...userOp, - callData: newCallData, - }; - } - Logger.log("userOp after estimation ", finalUserOp); - } catch (error) { - Logger.error("Failed to estimate gas for userOp with updated callData ", error); - Logger.log("sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); - } return finalUserOp; } } catch (error) { diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 7e0b687a7..8e45e89fa 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -352,7 +352,12 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { userOp.signature = await dummySignatureFetchPromise; // Note: Can change the default behaviour of calling estimations using bundler/local - userOp = await this.estimateUserOpGas(userOp, buildUseropDto?.overrides, buildUseropDto?.skipEstimation, buildUseropDto?.pmServiceData); + userOp = await this.estimateUserOpGas( + userOp, + buildUseropDto?.overrides, + buildUseropDto?.skipBundlerGasEstimation, + buildUseropDto?.paymasterServiceData, + ); Logger.log("UserOp after estimation ", userOp); return userOp; @@ -453,26 +458,11 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData); } - let finalUserOp: Partial = { + const finalUserOp: Partial = { ...userOp, callData: newCallData, }; - // Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) - try { - finalUserOp = await this.estimateUserOpGas(finalUserOp); - const callGasLimit = ethers.BigNumber.from(finalUserOp.callGasLimit); - if (finalUserOp.callGasLimit && callGasLimit.lt(ethers.BigNumber.from("21000"))) { - return { - ...userOp, - callData: newCallData, - }; - } - Logger.log("UserOp after estimation ", finalUserOp); - } catch (error) { - Logger.error("Failed to estimate gas for userOp with updated callData ", error); - Logger.log("Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); - } return finalUserOp; } } catch (error) { diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index fcc57a242..3132fd56a 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -11,6 +11,7 @@ import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; import { Logger } from "@biconomy/common"; import { IEntryPoint } from "@account-abstraction/contracts"; import { SmartAccountConfig, Overrides } from "./utils/Types"; +import { SponsorUserOperationDto, BiconomyPaymaster, IHybridPaymaster, PaymasterMode } from "@biconomy/paymaster"; type UserOperationKey = keyof UserOperation; @@ -48,7 +49,7 @@ export abstract class SmartAccount implements ISmartAccount { private validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { if (!userOp[field]) { - throw new Error(`${field} is missing`); + throw new Error(`${String(field)} is missing`); } } return true; @@ -102,12 +103,13 @@ export abstract class SmartAccount implements ISmartAccount { userOp: Partial, overrides?: Overrides, skipBundlerGasEstimation?: boolean, + paymasterServiceData?: SponsorUserOperationDto, ): Promise> { const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; this.validateUserOp(userOp, requiredFields); - let finalUserOp = userOp; - const skipBundlerCall = skipBundlerGasEstimation ?? false; + const finalUserOp = userOp; + const skipBundlerCall = skipBundlerGasEstimation ?? true; // Override gas values in userOp if provided in overrides params if (overrides) { userOp = { ...userOp, ...overrides }; @@ -115,17 +117,37 @@ export abstract class SmartAccount implements ISmartAccount { Logger.log("userOp in estimation", userOp); - if (!this.bundler || skipBundlerCall) { - if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - // if no bundler url is provided run offchain logic to assign following values of UserOp - // maxFeePerGas, maxPriorityFeePerGas, verificationGasLimit, callGasLimit, preVerificationGas - finalUserOp = await this.calculateUserOpGasValues(userOp); + if (skipBundlerCall) { + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { + // TODO: delete these lines REVIEW + userOp.maxFeePerGas = userOp.maxFeePerGas ?? (await this.provider.getGasPrice()); + userOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas ?? (await this.provider.getGasPrice()); + // Making call to paymaster to get gas estimations for userOp + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas, paymasterAndData } = await ( + this.paymaster as IHybridPaymaster + ).getPaymasterAndData(userOp, paymasterServiceData); + finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; + finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; + finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + } else { + // TODO: delete these lines REVIEW + userOp.maxFeePerGas = userOp.maxFeePerGas ?? (await this.provider.getGasPrice()); + userOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas ?? (await this.provider.getGasPrice()); + Logger.log("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); + } + return finalUserOp; } else { + if (!this.bundler) throw new Error("Bundler is not provided"); + // TODO: is this still needed to delete? delete userOp.maxFeePerGas; delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas(userOp); + // if neither user sent gas fee nor the bundler, estimate gas from provider if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { const feeData = await this.provider.getFeeData(); finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); @@ -137,6 +159,7 @@ export abstract class SmartAccount implements ISmartAccount { finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.paymasterAndData = "0x"; } return finalUserOp; } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 035ac6c3a..c4ca17d75 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -2,7 +2,7 @@ import { Signer } from "ethers"; import { ChainId } from "@biconomy/core-types"; import { BigNumberish } from "ethers"; import { IBundler } from "@biconomy/bundler"; -import { IPaymaster, PaymasterFeeQuote, PmServiceDto } from "@biconomy/paymaster"; +import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Provider } from "@ethersproject/providers"; import { GasOverheads } from "./Preverificaiton"; @@ -76,11 +76,11 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { export type BuildUserOpOptions = { overrides?: Overrides; - skipEstimation?: boolean; + skipBundlerGasEstimation?: boolean; params?: ModuleInfo; nonceOptions?: NonceOptions; forceEncodeForBatch?: boolean; - pmServiceData?: PmServiceDto; + paymasterServiceData?: SponsorUserOperationDto; }; export type NonceOptions = { diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index 6b9a5ff10..704bd526f 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -82,7 +82,7 @@ VERSION bump only * Type added for PaymasterServiceData + reordering of params ([fae8b3a](https://github.com/bcnmy/biconomy-client-sdk/commit/fae8b3a02a5e810a9a40674d27f389b89199bb62)) * logic changed to accept paymasterServiceData ([6daaf37](https://github.com/bcnmy/biconomy-client-sdk/commit/6daaf37855a13fa6e12fdbab16a7e980b4631475)) * UserOpGasFields for fetching gas and gas prices from bundler (https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1) -* skipEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) +* skipBundlerGasEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) * fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) diff --git a/packages/core-types/CHANGELOG.md b/packages/core-types/CHANGELOG.md index 59ab27456..3eca80798 100644 --- a/packages/core-types/CHANGELOG.md +++ b/packages/core-types/CHANGELOG.md @@ -67,7 +67,7 @@ VERSION bump only - Type added for PaymasterServiceData + reordering of params ([fae8b3a](https://github.com/bcnmy/biconomy-client-sdk/commit/fae8b3a02a5e810a9a40674d27f389b89199bb62)) - logic changed to accept paymasterServiceData ([6daaf37](https://github.com/bcnmy/biconomy-client-sdk/commit/6daaf37855a13fa6e12fdbab16a7e980b4631475)) - UserOpGasFields for fetching gas and gas prices from bundler (https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1) -- skipEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) +- skipBundlerGasEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) - fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) ## 2.0.0 (2023-04-07) diff --git a/packages/node-client/CHANGELOG.md b/packages/node-client/CHANGELOG.md index 479c1cffd..b2f9ab90e 100644 --- a/packages/node-client/CHANGELOG.md +++ b/packages/node-client/CHANGELOG.md @@ -37,7 +37,7 @@ Version Bump Only. ### Features -* skipEstimation flag for gas ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) +* skipBundlerGasEstimation flag for gas ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 5962c75a0..d2fc63953 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -12,18 +12,14 @@ import { BiconomyTokenPaymasterRequest, PaymasterMode, PaymasterAndDataResponse, - UserOpGasResponse, - EstimateUserOpGasResponse, - PmServiceDto, } from "./utils/Types"; import { BigNumberish, BigNumber, ethers } from "ethers"; -import { transformUserOP } from "./utils/HelperFunction"; import { ERC20_ABI } from "./constants"; import { IHybridPaymaster } from "./interfaces/IHybridPaymaster"; const defaultPaymasterConfig: PaymasterConfig = { paymasterUrl: "", - strictMode: true, // Set your desired default value for strictMode here + strictMode: false, // Set your desired default value for strictMode here }; /** * @dev Hybrid - Generic Gas Abstraction paymaster @@ -39,39 +35,6 @@ export class BiconomyPaymaster implements IHybridPaymaster { - userOp = transformUserOP(userOp); - Logger.log("userOp sending for fee estimate ", userOp); - - if (paymasterServiceData?.mode === undefined) { - throw new Error("mode is required in paymasterServiceData"); - } - paymasterServiceData.calculateGasLimits = true; - - let response: EstimateUserOpGasResponse; - try { - response = await sendRequest({ - url: `${this.paymasterConfig.paymasterUrl}`, - method: HttpMethod.Post, - body: { - method: "pm_sponsorUserOperation", - params: [userOp, paymasterServiceData], - id: getTimestampInSeconds(), - jsonrpc: "2.0", - }, - }); - } catch (error: any) { - Logger.error("Failed to fetch data - reason: ", JSON.stringify(error)); - throw error; - } - - const userOpGasResponse = response.result; - return userOpGasResponse; - } - /** * @dev Prepares the user operation by resolving properties and converting certain values to hexadecimal format. * @param userOp The partial user operation. @@ -79,20 +42,24 @@ export class BiconomyPaymaster implements IHybridPaymaster): Promise> { userOp = await resolveProperties(userOp); - if (userOp.nonce !== null || userOp.nonce !== undefined) { + if (userOp.nonce !== null && userOp.nonce !== undefined) { userOp.nonce = BigNumber.from(userOp.nonce).toHexString(); } - if (userOp.callGasLimit !== null || userOp.callGasLimit !== undefined) { + if (userOp.callGasLimit !== null && userOp.callGasLimit !== undefined) { userOp.callGasLimit = BigNumber.from(userOp.callGasLimit).toString(); } - if (userOp.verificationGasLimit !== null || userOp.verificationGasLimit !== undefined) { + if (userOp.verificationGasLimit !== null && userOp.verificationGasLimit !== undefined) { userOp.verificationGasLimit = BigNumber.from(userOp.verificationGasLimit).toString(); } - if (userOp.preVerificationGas !== null || userOp.preVerificationGas !== undefined) { + if (userOp.preVerificationGas !== null && userOp.preVerificationGas !== undefined) { userOp.preVerificationGas = BigNumber.from(userOp.preVerificationGas).toString(); } - userOp.maxFeePerGas = BigNumber.from(userOp.maxFeePerGas).toHexString(); - userOp.maxPriorityFeePerGas = BigNumber.from(userOp.maxPriorityFeePerGas).toHexString(); + if (userOp.maxFeePerGas !== null && userOp.maxFeePerGas !== undefined) { + userOp.maxFeePerGas = BigNumber.from(userOp.maxFeePerGas).toString(); + } + if (userOp.maxPriorityFeePerGas !== null && userOp.maxPriorityFeePerGas !== undefined) { + userOp.maxPriorityFeePerGas = BigNumber.from(userOp.maxPriorityFeePerGas).toString(); + } userOp.signature = userOp.signature || "0x"; userOp.paymasterAndData = userOp.paymasterAndData || "0x"; return userOp; @@ -173,14 +140,14 @@ export class BiconomyPaymaster implements IHybridPaymaster extends IPaymaster { getPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; getDummyPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; - estimateUserOpGas(_userOp: Partial, _paymasterServiceData?: PmServiceDto): Promise; buildTokenApprovalTransaction(_tokenPaymasterRequest: BiconomyTokenPaymasterRequest, _provider: Provider): Promise; getPaymasterFeeQuotesOrData(_userOp: Partial, _paymasterServiceData: FeeQuotesOrDataDto): Promise; } diff --git a/packages/paymaster/src/utils/HelperFunction.ts b/packages/paymaster/src/utils/HelperFunction.ts deleted file mode 100644 index a0d0240e4..000000000 --- a/packages/paymaster/src/utils/HelperFunction.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { UserOperation } from "@biconomy/core-types"; -import { BigNumber } from "ethers"; - -export const transformUserOP = (userOp: UserOperation): UserOperation => { - try { - const userOperation = { ...userOp }; - const keys: (keyof UserOperation)[] = [ - "nonce", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - ]; - for (const key of keys) { - if (userOperation[key] && userOperation[key] !== "0") { - userOperation[key] = BigNumber.from(userOp[key]).toHexString(); - } - } - return userOperation; - } catch (error) { - throw `Failed to transform user operation: ${error}`; - } -}; diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index 72dbbf1f4..10f783ba5 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -106,6 +106,8 @@ export type PaymasterAndDataResponse = { preVerificationGas?: BigNumberish; verificationGasLimit?: BigNumberish; callGasLimit?: BigNumberish; + maxPriorityFeePerGas?: BigNumberish; + maxFeePerGas?: BigNumberish; }; export enum PaymasterMode { @@ -129,11 +131,3 @@ export type UserOpGasResponse = { verificationGasLimit: string; callGasLimit: string; }; - -export type PmServiceDto = { - expiryDuration?: number; - mode: PaymasterMode; - calculateGasLimits?: boolean; - tokenInfo?: FeeTokenInfo; - sponsorshipInfo?: SponsorpshipInfo; -}; From 44ca56cca05994809ede38dd6b2369d376cf272d Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Thu, 28 Sep 2023 19:50:57 -0400 Subject: [PATCH 0875/1247] compute userOp locally --- packages/account/src/BaseSmartAccount.ts | 10 ++++------ packages/account/src/SmartAccount.ts | 10 ++++------ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 9980c08a5..66a9ef1c7 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -231,7 +231,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; this.validateUserOp(userOp, requiredFields); - const finalUserOp = userOp; + let finalUserOp = userOp; const skipBundlerCall = skipBundlerGasEstimation ?? true; // Override gas values in userOp if provided in overrides params if (overrides) { @@ -256,12 +256,10 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; } else { - // TODO: delete these lines REVIEW - userOp.maxFeePerGas = userOp.maxFeePerGas ?? (await this.provider.getGasPrice()); - userOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas ?? (await this.provider.getGasPrice()); - Logger.log("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); + Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); + finalUserOp = await this.calculateUserOpGasValues(userOp); + finalUserOp.paymasterAndData = "0x"; } - return finalUserOp; } else { if (!this.bundler) throw new Error("Bundler is not provided"); // TODO: is this still needed to delete? diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index 4eb25b88f..fa5347cc3 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -108,7 +108,7 @@ export abstract class SmartAccount implements ISmartAccount { const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; this.validateUserOp(userOp, requiredFields); - const finalUserOp = userOp; + let finalUserOp = userOp; const skipBundlerCall = skipBundlerGasEstimation ?? true; // Override gas values in userOp if provided in overrides params if (overrides) { @@ -133,12 +133,10 @@ export abstract class SmartAccount implements ISmartAccount { finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; } else { - // TODO: delete these lines REVIEW - userOp.maxFeePerGas = userOp.maxFeePerGas ?? (await this.provider.getGasPrice()); - userOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas ?? (await this.provider.getGasPrice()); - Logger.log("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); + Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); + finalUserOp = await this.calculateUserOpGasValues(userOp); + finalUserOp.paymasterAndData = "0x"; } - return finalUserOp; } else { if (!this.bundler) throw new Error("Bundler is not provided"); // TODO: is this still needed to delete? From 2352218d3d92abd3576e64c60251d580d2cc78af Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 28 Sep 2023 21:41:15 -0400 Subject: [PATCH 0876/1247] fix test case for workflow --- packages/account/src/BiconomySmartAccountV2.ts | 3 ++- packages/account/tests/SmartAccountV2.local.spec.ts | 5 +---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 75db50438..1d6ae53aa 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -72,7 +72,6 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); - await instance.init(); instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 const defaultFallbackHandlerAddress = @@ -99,6 +98,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { instance.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); + await instance.init(); + return instance; } diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 0ebc9da2a..0775fd5ec 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -79,11 +79,8 @@ describe("BiconomySmartAccountV2 API Specs", () => { activeValidationModule: module1, }); - // console.log('account api provider ', accountAPI.provider) + // console.log('account api provider ', accountAPI.provider) - accountAPI = await accountAPI.init(); - - console.log("Account address ", accountAPI.accountAddress); const counterFactualAddress = await accountAPI.getAccountAddress(); console.log("Counterfactual address ", counterFactualAddress); From 5abea614645b72fba3b0a31875918954672ee3aa Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 28 Sep 2023 23:25:48 -0400 Subject: [PATCH 0877/1247] refactor + self review --- packages/account/src/BiconomySmartAccount.ts | 28 +++++++++++++------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 29567efc9..ea7b92a3f 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -16,6 +16,7 @@ import { UserOperation, Transaction, SmartAccountType } from "@biconomy/core-typ import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; +import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { IBiconomySmartAccount } from "./interfaces/IBiconomySmartAccount"; import { ISmartAccount, @@ -33,9 +34,12 @@ import { BICONOMY_IMPLEMENTATION_ADDRESSES, DEFAULT_ENTRYPOINT_ADDRESS, DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS, + BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, + BICONOMY_FACTORY_ADDRESSES_BY_VERSION, + DEFAULT_BICONOMY_FACTORY_ADDRESS, + DEFAULT_FALLBACK_HANDLER_ADDRESS, } from "./utils/Constants"; import { Signer } from "ethers"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; export class BiconomySmartAccount extends SmartAccount implements IBiconomySmartAccount { private factory!: SmartAccountFactory_v100; @@ -467,10 +471,13 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart } async getUpdateImplementationData(newImplementationAddress?: string): Promise { - // probably like V2 address or latest implemenbtation version + // V2 address or latest implementation if possible to jump from V1 -> Vn without upgrading to V2 // If needed we can fetch this from backend config - const latestImplementationAddress = newImplementationAddress ?? DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS; // latest - Logger.log("Recommended implementation address to upgrade to", latestImplementationAddress); + + Logger.log("Recommended implementation address to upgrade to", BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0); + + const latestImplementationAddress = newImplementationAddress ?? DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS; // BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 // 2.0 + Logger.log("Requested implementation address to upgrade to", latestImplementationAddress); // by querying the proxy contract const currentImplementationAddress = await this.proxy.implementation(); @@ -480,8 +487,11 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart const impInterface = new ethers.utils.Interface(["function updateImplementation(address _implementation)"]); const encodedData = impInterface.encodeFunctionData("updateImplementation", [latestImplementationAddress]); return { to: this.address, value: BigNumber.from(0), data: encodedData }; + } else { + // Could throw error instead + // throw new Error("Not eligible for upgrade"); + return { to: this.address, value: 0, data: "0x" }; } - return { to: this.address, value: 0, data: "0x" }; } async getModuleSetupData(ecdsaModuleAddress?: string): Promise { @@ -503,18 +513,18 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart }; const accountV2: SmartAccount_v200 = getSAProxyContract(proxyInstanceDto) as SmartAccount_v200; - const populatedTransaction = await accountV2.populateTransaction.setupAndEnableModule(moduleAddress, ecdsaOwnershipSetupData); + const data = accountV2.interface.encodeFunctionData("setupAndEnableModule", [moduleAddress, ecdsaOwnershipSetupData]); - return { to: this.address, value: 0, data: populatedTransaction.data }; + return { to: this.address, value: 0, data: data }; } catch (error) { Logger.error("Failed to get module setup data", error); - // throw error + // Could throw error return { to: this.address, value: 0, data: "0x" }; } } // Once this userOp is sent (batch: a. updateImplementation and b. setupModule on upgraded proxy) - // You can start using BiconomySmartAccountV2 + // Afterwards you can start using BiconomySmartAccountV2 async updateImplementationUserOp(newImplementationAddress?: string, ecdsaModuleAddress?: string): Promise> { const tx1 = await this.getUpdateImplementationData(newImplementationAddress); const tx2 = await this.getModuleSetupData(ecdsaModuleAddress); From 84ce182ab972e5ed7e9a310c1e66b432135f0dd9 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 29 Sep 2023 00:52:39 -0400 Subject: [PATCH 0878/1247] dev notes + sender override feat --- packages/account/src/BiconomySmartAccount.ts | 3 ++- packages/account/src/BiconomySmartAccountV2.ts | 4 ++-- packages/account/src/utils/Types.ts | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index ea7b92a3f..6d35b5e33 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -480,7 +480,8 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart Logger.log("Requested implementation address to upgrade to", latestImplementationAddress); // by querying the proxy contract - const currentImplementationAddress = await this.proxy.implementation(); + // TODO: add isDeployed checks before reading below + const currentImplementationAddress = await this.proxy.getImplementation(); Logger.log("Current implementation address for this Smart Account", currentImplementationAddress); if (ethers.utils.getAddress(currentImplementationAddress) !== ethers.utils.getAddress(latestImplementationAddress)) { diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 8e3d23ddb..7d5aacb0f 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -82,6 +82,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { if (!defaultFallbackHandlerAddress) { throw new Error("Default Fallback Handler address is not provided"); } + instance.accountAddress = biconomySmartAccountConfig.senderAddress ?? undefined; instance.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; instance.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0; @@ -152,8 +153,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * this value is valid even before deploying the contract. */ async getAccountAddress(params?: CounterFactualAddressParam): Promise { - if (this.accountAddress == null) { - // means it needs deployment + if (this.accountAddress == null || this.accountAddress == undefined) { this.accountAddress = await this.getCounterFactualAddress(params); } return this.accountAddress; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 9bd96981b..053792623 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -66,6 +66,7 @@ export type BiconomySmartAccountConfig = { export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { factoryAddress?: string; + senderAddress?: string; implementationAddress?: string; defaultFallbackHandler?: string; rpcUrl?: string; // as good as Provider From 1ab946bc740c7b456635ca821961b47f9025aabe Mon Sep 17 00:00:00 2001 From: innovation-stack Date: Fri, 29 Sep 2023 10:23:21 +0530 Subject: [PATCH 0879/1247] feat(sessionStorage): enable custom session storage client --- packages/modules/src/BatchedSessionRouterModule.ts | 3 +-- packages/modules/src/SessionKeyManagerModule.ts | 9 ++++----- packages/modules/src/utils/Types.ts | 8 ++------ 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index a41a2a6a9..80885953f 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -61,8 +61,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { const sessionModule = await SessionKeyManagerModule.create({ moduleAddress: instance.sessionManagerModuleAddress, smartAccountAddress: moduleConfig.smartAccountAddress, - nodeClientUrl: moduleConfig.nodeClientUrl, - storageType: moduleConfig.storageType, + nodeClientUrl: moduleConfig.nodeClientUrl }); instance.sessionKeyManagerModule = sessionModule; diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index 92ff6c5b3..1e41b3d88 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -7,7 +7,6 @@ import { SessionKeyManagerModuleConfig, ModuleVersion, CreateSessionDataParams, - StorageType, ModuleInfo, CreateSessionDataResponse, } from "./utils/Types"; @@ -66,11 +65,11 @@ export class SessionKeyManagerModule extends BaseValidationModule { instance.nodeClient = new NodeClient({ txServiceUrl: moduleConfig.nodeClientUrl ?? NODE_CLIENT_URL, }); - - if (!moduleConfig.storageType || moduleConfig.storageType === StorageType.LOCAL_STORAGE) { - instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); + + if (moduleConfig.sessionStorageClient) { + instance.sessionStorageClient = moduleConfig.sessionStorageClient; } else { - throw new Error("Invalid storage type"); + instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); } const existingSessionData = await instance.sessionStorageClient.getAllSessionData(); diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 1c4e65b01..7ff2bdd42 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,6 +1,7 @@ import { ChainId, UserOperation } from "@biconomy/core-types"; import { Signer } from "ethers"; import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; +import { ISessionStorage } from "../interfaces/ISessionStorage"; export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' @@ -19,7 +20,7 @@ export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfi version?: ModuleVersion; nodeClientUrl?: string; smartAccountAddress: string; - storageType?: StorageType; + sessionStorageClient?: ISessionStorage; } export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleConfig { @@ -31,17 +32,12 @@ export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleCo sessionManagerModuleAddress?: string; nodeClientUrl?: string; smartAccountAddress: string; - storageType?: StorageType; // sessionSigner?: Signer // sessionPubKey?: string // nodeClientUrl?: string } -export enum StorageType { - LOCAL_STORAGE, -} - export type SessionParams = { sessionID?: string; sessionSigner: Signer; From 7cec9e75099dfad05a2b8a22ff0e23009cb68079 Mon Sep 17 00:00:00 2001 From: innovation-stack Date: Fri, 29 Sep 2023 10:45:08 +0530 Subject: [PATCH 0880/1247] fix(review): Fix review comments --- packages/modules/src/BatchedSessionRouterModule.ts | 3 ++- packages/modules/src/SessionKeyManagerModule.ts | 13 ++++++++++--- packages/modules/src/utils/Types.ts | 10 ++++++++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 80885953f..a41a2a6a9 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -61,7 +61,8 @@ export class BatchedSessionRouterModule extends BaseValidationModule { const sessionModule = await SessionKeyManagerModule.create({ moduleAddress: instance.sessionManagerModuleAddress, smartAccountAddress: moduleConfig.smartAccountAddress, - nodeClientUrl: moduleConfig.nodeClientUrl + nodeClientUrl: moduleConfig.nodeClientUrl, + storageType: moduleConfig.storageType, }); instance.sessionKeyManagerModule = sessionModule; diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index 1e41b3d88..25ee394ef 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -9,6 +9,7 @@ import { CreateSessionDataParams, ModuleInfo, CreateSessionDataResponse, + StorageType, } from "./utils/Types"; import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; @@ -65,9 +66,15 @@ export class SessionKeyManagerModule extends BaseValidationModule { instance.nodeClient = new NodeClient({ txServiceUrl: moduleConfig.nodeClientUrl ?? NODE_CLIENT_URL, }); - - if (moduleConfig.sessionStorageClient) { - instance.sessionStorageClient = moduleConfig.sessionStorageClient; + + if (!moduleConfig.storageType || moduleConfig.storageType === StorageType.LOCAL_STORAGE) { + instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); + } else { + throw new Error("Invalid storage type"); + } + + if (moduleConfig.customSessionStorageClient) { + instance.sessionStorageClient = moduleConfig.customSessionStorageClient; } else { instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); } diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 7ff2bdd42..17c461795 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,7 +1,7 @@ import { ChainId, UserOperation } from "@biconomy/core-types"; import { Signer } from "ethers"; import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; -import { ISessionStorage } from "../interfaces/ISessionStorage"; +import { ISessionStorage } from "interfaces/ISessionStorage"; export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' @@ -20,7 +20,8 @@ export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfi version?: ModuleVersion; nodeClientUrl?: string; smartAccountAddress: string; - sessionStorageClient?: ISessionStorage; + storageType?: StorageType; + customSessionStorageClient?: ISessionStorage; } export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleConfig { @@ -32,12 +33,17 @@ export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleCo sessionManagerModuleAddress?: string; nodeClientUrl?: string; smartAccountAddress: string; + storageType?: StorageType; // sessionSigner?: Signer // sessionPubKey?: string // nodeClientUrl?: string } +export enum StorageType { + LOCAL_STORAGE, +} + export type SessionParams = { sessionID?: string; sessionSigner: Signer; From f9264471937f6840a659564e8253d5ded9a7d90b Mon Sep 17 00:00:00 2001 From: innovation-stack Date: Fri, 29 Sep 2023 10:46:16 +0530 Subject: [PATCH 0881/1247] fix(storageClient): remove else condition --- packages/modules/src/SessionKeyManagerModule.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index 25ee394ef..719993117 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -75,8 +75,6 @@ export class SessionKeyManagerModule extends BaseValidationModule { if (moduleConfig.customSessionStorageClient) { instance.sessionStorageClient = moduleConfig.customSessionStorageClient; - } else { - instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); } const existingSessionData = await instance.sessionStorageClient.getAllSessionData(); From 5ab12493e5cafe4cf82fa546fffe13488a353e1d Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 29 Sep 2023 01:24:04 -0400 Subject: [PATCH 0882/1247] remove web3auth packages --- packages/web3-auth-native/.gitignore | 584 ------------ packages/web3-auth-native/.prettierignore | 21 - packages/web3-auth-native/.prettierrc.yaml | 5 - packages/web3-auth-native/CHANGELOG.md | 33 - packages/web3-auth-native/README.md | 9 - packages/web3-auth-native/package.json | 71 -- packages/web3-auth-native/src/SocialLogin.ts | 101 -- packages/web3-auth-native/src/index.ts | 6 - .../web3-auth-native/src/types/IWebBrowser.ts | 310 ------- packages/web3-auth-native/src/types/State.ts | 10 - packages/web3-auth-native/src/types/sdk.ts | 90 -- .../tests/web3-auth-native.spec.ts | 5 - packages/web3-auth-native/torus.config.js | 3 - .../web3-auth-native/tsconfig.eslint.json | 3 - packages/web3-auth-native/tsconfig.json | 12 - packages/web3-auth/CHANGELOG.md | 90 -- packages/web3-auth/README.md | 14 - packages/web3-auth/package.json | 62 -- packages/web3-auth/src/SocialLogin.tsx | 332 ------- packages/web3-auth/src/UI.tsx | 103 --- packages/web3-auth/src/index.ts | 4 - packages/web3-auth/src/style.css | 871 ------------------ .../web3-auth/src/types/Web3AuthConfig.ts | 15 - packages/web3-auth/tests/web3-auth.spec.ts | 5 - packages/web3-auth/tsconfig.json | 12 - 25 files changed, 2771 deletions(-) delete mode 100644 packages/web3-auth-native/.gitignore delete mode 100644 packages/web3-auth-native/.prettierignore delete mode 100644 packages/web3-auth-native/.prettierrc.yaml delete mode 100644 packages/web3-auth-native/CHANGELOG.md delete mode 100644 packages/web3-auth-native/README.md delete mode 100644 packages/web3-auth-native/package.json delete mode 100644 packages/web3-auth-native/src/SocialLogin.ts delete mode 100644 packages/web3-auth-native/src/index.ts delete mode 100644 packages/web3-auth-native/src/types/IWebBrowser.ts delete mode 100644 packages/web3-auth-native/src/types/State.ts delete mode 100644 packages/web3-auth-native/src/types/sdk.ts delete mode 100644 packages/web3-auth-native/tests/web3-auth-native.spec.ts delete mode 100644 packages/web3-auth-native/torus.config.js delete mode 100644 packages/web3-auth-native/tsconfig.eslint.json delete mode 100644 packages/web3-auth-native/tsconfig.json delete mode 100644 packages/web3-auth/CHANGELOG.md delete mode 100644 packages/web3-auth/README.md delete mode 100644 packages/web3-auth/package.json delete mode 100644 packages/web3-auth/src/SocialLogin.tsx delete mode 100644 packages/web3-auth/src/UI.tsx delete mode 100644 packages/web3-auth/src/index.ts delete mode 100644 packages/web3-auth/src/style.css delete mode 100644 packages/web3-auth/src/types/Web3AuthConfig.ts delete mode 100644 packages/web3-auth/tests/web3-auth.spec.ts delete mode 100644 packages/web3-auth/tsconfig.json diff --git a/packages/web3-auth-native/.gitignore b/packages/web3-auth-native/.gitignore deleted file mode 100644 index d0efe385f..000000000 --- a/packages/web3-auth-native/.gitignore +++ /dev/null @@ -1,584 +0,0 @@ -# Created by https://www.toptal.com/developers/gitignore/api/android,androidstudio,xcode,reactnative,node,yarn -# Edit at https://www.toptal.com/developers/gitignore?templates=android,androidstudio,xcode,reactnative,node,yarn - -### Android ### -# Built application files -*.apk -*.aar -*.ap_ -*.aab - -# Files for the ART/Dalvik VM -*.dex - -# Java class files -*.class - -# Generated files -bin/ -gen/ -out/ -# Uncomment the following line in case you need and you don't have the release build type files in your app -# release/ - -# Gradle files -.gradle/ -build/ - -# Local configuration file (sdk path, etc) -local.properties - -# Proguard folder generated by Eclipse -proguard/ - -# Log Files -*.log - -# Android Studio Navigation editor temp files -.navigation/ - -# Android Studio captures folder -captures/ - -# IntelliJ -*.iml -.idea/workspace.xml -.idea/tasks.xml -.idea/gradle.xml -.idea/assetWizardSettings.xml -.idea/dictionaries -.idea/libraries -.idea/jarRepositories.xml -# Android Studio 3 in .gitignore file. -.idea/caches -.idea/modules.xml -# Comment next line if keeping position of elements in Navigation Editor is relevant for you -.idea/navEditor.xml - -# Keystore files -# Uncomment the following lines if you do not want to check your keystore files in. -#*.jks -#*.keystore - -# External native build folder generated in Android Studio 2.2 and later -.externalNativeBuild -.cxx/ - -# Google Services (e.g. APIs or Firebase) -# google-services.json - -# Freeline -freeline.py -freeline/ -freeline_project_description.json - -# fastlane -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots -fastlane/test_output -fastlane/readme.md - -# Version control -vcs.xml - -# lint -lint/intermediates/ -lint/generated/ -lint/outputs/ -lint/tmp/ -# lint/reports/ - -# Android Profiling -*.hprof - -### Android Patch ### -gen-external-apklibs -output.json - -# Replacement of .externalNativeBuild directories introduced -# with Android Studio 3.5. - -### Node ### -# Logs -logs -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-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/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# 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 -.env.production - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# 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 - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - -### Node Patch ### -# Serverless Webpack directories -.webpack/ - -# Optional stylelint cache -.stylelintcache - -# SvelteKit build / generate output -.svelte-kit - -### ReactNative ### -# React Native Stack Base - -.expo -__generated__ - -### ReactNative.Android Stack ### -# Built application files - -# Files for the ART/Dalvik VM - -# Java class files - -# Generated files -# Uncomment the following line in case you need and you don't have the release build type files in your app -# release/ - -# Gradle files - -# Local configuration file (sdk path, etc) - -# Proguard folder generated by Eclipse - -# Log Files - -# Android Studio Navigation editor temp files - -# Android Studio captures folder - -# IntelliJ -# Android Studio 3 in .gitignore file. -# Comment next line if keeping position of elements in Navigation Editor is relevant for you - -# Keystore files -# Uncomment the following lines if you do not want to check your keystore files in. - -# External native build folder generated in Android Studio 2.2 and later - -# Google Services (e.g. APIs or Firebase) -# google-services.json - -# Freeline - -# fastlane - -# Version control - -# lint -# lint/reports/ - -# Android Profiling - -### ReactNative.Buck Stack ### -buck-out/ -.buckconfig.local -.buckd/ -.buckversion -.fakebuckversion - -### ReactNative.Gradle Stack ### -.gradle - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -### ReactNative.Linux Stack ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### ReactNative.Node Stack ### -# Logs - -# Diagnostic reports (https://nodejs.org/api/report.html) - -# Runtime data - -# Directory for instrumented libs generated by jscoverage/JSCover - -# Coverage directory used by tools like istanbul - -# nyc test coverage - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) - -# Bower dependency directory (https://bower.io/) - -# node-waf configuration - -# Compiled binary addons (https://nodejs.org/api/addons.html) - -# Dependency directories - -# Snowpack dependency directory (https://snowpack.dev/) - -# TypeScript cache - -# Optional npm cache directory - -# Optional eslint cache - -# Microbundle cache - -# Optional REPL history - -# Output of 'npm pack' - -# Yarn Integrity file - -# dotenv environment variables file - -# parcel-bundler cache (https://parceljs.org/) - -# Next.js build output - -# Nuxt.js build / generate output - -# Gatsby files -# 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 - -# Serverless directories - -# FuseBox cache - -# DynamoDB Local files - -# TernJS port file - -# Stores VSCode versions used for testing VSCode extensions - -# yarn v2 - -### ReactNative.Xcode Stack ### -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) -*.xcscmblueprint -*.xccheckout - -## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) -DerivedData/ -*.moved-aside -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 - -## Gcc Patch -/*.gcno - -### ReactNative.macOS Stack ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### Xcode ### -# Xcode -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - - - - - -### Xcode Patch ### -*.xcodeproj/* -!*.xcodeproj/project.pbxproj -!*.xcodeproj/xcshareddata/ -!*.xcworkspace/contents.xcworkspacedata -**/xcshareddata/WorkspaceSettings.xcsettings - -### yarn ### -# https://yarnpkg.com/advanced/qa#which-files-should-be-gitignored - -.yarn/* -!.yarn/releases -!.yarn/plugins -!.yarn/sdks -!.yarn/versions - -# if you are NOT using Zero-installs, then: -# comment the following lines -!.yarn/cache - -# and uncomment the following lines -# .pnp.* - -### AndroidStudio ### -# Covers files to be ignored for android development using Android Studio. - -# Built application files - -# Files for the ART/Dalvik VM - -# Java class files - -# Generated files - -# Gradle files - -# Signing files -.signing/ - -# Local configuration file (sdk path, etc) - -# Proguard folder generated by Eclipse - -# Log Files - -# Android Studio -/*/build/ -/*/local.properties -/*/out -/*/*/build -/*/*/production -*.ipr -*.swp - -# Keystore files -*.jks -*.keystore - -# Google Services (e.g. APIs or Firebase) -# google-services.json - -# Android Patch - -# External native build folder generated in Android Studio 2.2 and later - -# NDK -obj/ - -# IntelliJ IDEA -*.iws -/out/ - -# User-specific configurations -.idea/caches/ -.idea/libraries/ -.idea/shelf/ -.idea/.name -.idea/compiler.xml -.idea/copyright/profiles_settings.xml -.idea/encodings.xml -.idea/misc.xml -.idea/scopes/scope_settings.xml -.idea/vcs.xml -.idea/jsLibraryMappings.xml -.idea/datasources.xml -.idea/dataSources.ids -.idea/sqlDataSources.xml -.idea/dynamic.xml -.idea/uiDesigner.xml - -# OS-specific files -.DS_Store? -ehthumbs.db -Thumbs.db - -# Legacy Eclipse project files -.classpath -.project -.cproject -.settings/ - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.war -*.ear - -# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml) -hs_err_pid* - -## Plugin-specific files: - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Mongo Explorer plugin -.idea/mongoSettings.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -### AndroidStudio Patch ### - -!/gradle/wrapper/gradle-wrapper.jar - -# End of https://www.toptal.com/developers/gitignore/api/android,androidstudio,xcode,reactnative,node,yarn - -/.yalc/ diff --git a/packages/web3-auth-native/.prettierignore b/packages/web3-auth-native/.prettierignore deleted file mode 100644 index 6cd9e9bf6..000000000 --- a/packages/web3-auth-native/.prettierignore +++ /dev/null @@ -1,21 +0,0 @@ -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# dependencies -/node_modules - -# testing -/coverage - -#production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* \ No newline at end of file diff --git a/packages/web3-auth-native/.prettierrc.yaml b/packages/web3-auth-native/.prettierrc.yaml deleted file mode 100644 index ad7dfaff6..000000000 --- a/packages/web3-auth-native/.prettierrc.yaml +++ /dev/null @@ -1,5 +0,0 @@ -# .prettierrc or .prettierrc.yaml -printWidth: 100 -semi: false -singleQuote: true -trailingComma: none diff --git a/packages/web3-auth-native/CHANGELOG.md b/packages/web3-auth-native/CHANGELOG.md deleted file mode 100644 index 014e9548d..000000000 --- a/packages/web3-auth-native/CHANGELOG.md +++ /dev/null @@ -1,33 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 3.1.0 (2023-09-20) -Version Bump Only. - - - -# 3.0.0 (2023-08-28) - -VERSION bump only - - - -## 3.0.0-alpha.0 (2023-07-12) - - -### Bug Fixes - -* clean web3-auth-native ([8cd1fab](https://github.com/bcnmy/biconomy-client-sdk/commit/8cd1fab6bc4864b87b0ef33ce505c2e4e28b63d4)) -* linting issue in social login ([334276b](https://github.com/bcnmy/biconomy-client-sdk/commit/334276b70e66bac576b83c1910a9890a8a451b42)) - - - - -## 2.0.0 (2023-04-07) - - -### Features - -* web3-auth-native ([111bf66](https://github.com/bcnmy/biconomy-client-sdk/commit/111bf66134b8519b934895fe51082d22c8805e65)) diff --git a/packages/web3-auth-native/README.md b/packages/web3-auth-native/README.md deleted file mode 100644 index d559771d2..000000000 --- a/packages/web3-auth-native/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# `web3-auth-native` - -> A library to import the web3 social auth directly from Biconomy Sdk. - -## Usage - -```ts - -``` diff --git a/packages/web3-auth-native/package.json b/packages/web3-auth-native/package.json deleted file mode 100644 index 5fc0def8d..000000000 --- a/packages/web3-auth-native/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "name": "@biconomy/web3-auth-native", - "version": "3.1.0", - "description": "web3-auth expo react-native for biconomy sdk.", - "main": "dist/web3AuthNative.cjs.js", - "module": "dist/web3AuthNative.esm.js", - "source": "src/index.ts", - "types": "dist/types/index.d.ts", - "keywords": [ - "legos", - "batching", - "one-click", - "cross-chain", - "web3auth", - "react-native" - ], - "author": "livingrockrises ", - "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", - "license": "MIT", - "files": [ - "dist", - "src", - "README.md" - ], - "scripts": { - "start": "torus-scripts start", - "build": "torus-scripts build", - "lint:ts": "eslint --fix 'src/**/*.ts'", - "prepack": "npm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" - }, - "dependencies": { - "@biconomy/node-client": "^3.1.0", - "@toruslabs/openlogin": "^2.8.0", - "@toruslabs/openlogin-jrpc": "^2.9.0", - "@toruslabs/openlogin-utils": "^2.1.0", - "base64url": "^3.0.1", - "buffer": "^6.0.3", - "loglevel": "^1.8.1", - "react-native-url-polyfill": "^2.0.0" - }, - "peerDependencies": { - "@babel/runtime": "^7.x", - "react-native": "~0.68.2" - }, - "devDependencies": { - "@babel/runtime": "^7.20.1", - "@toruslabs/eslint-config-typescript": "1.2.0", - "@toruslabs/torus-scripts": "^1.3.0", - "@types/node": "^16", - "@types/react-native": "^0.69.3", - "@typescript-eslint/eslint-plugin": "^5.44.0", - "@typescript-eslint/parser": "^5.44.0", - "eslint": "^8.28.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-n": "^15.5.1", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-simple-import-sort": "^10.0.0", - "eslint-plugin-tsdoc": "^0.2.17", - "husky": "^8.0.3", - "lint-staged": "^14.0.1", - "prettier": "^3.0.3", - "react-native": "~0.72.4", - "rimraf": "^5.0.1", - "typescript": "^5.2.2" - } -} diff --git a/packages/web3-auth-native/src/SocialLogin.ts b/packages/web3-auth-native/src/SocialLogin.ts deleted file mode 100644 index a85530f1e..000000000 --- a/packages/web3-auth-native/src/SocialLogin.ts +++ /dev/null @@ -1,101 +0,0 @@ -import NodeClient, { WhiteListSignatureResponse } from '@biconomy/node-client' -import base64url from 'base64url' -import log from 'loglevel' -import { URL } from 'react-native-url-polyfill' - -import { IWebBrowser, WebBrowserAuthSessionResult } from './types/IWebBrowser' -import { SdkInitParams, SdkLoginParams, SdkLogoutParams, SocialLoginDto } from './types/sdk' -import { State } from './types/State' - -class SocialLogin { - initParams: SdkInitParams - - webBrowser: IWebBrowser - - nodeClient!: NodeClient - - private backendUrl: string - - private clientId: string - - constructor(socialLoginDto: SocialLoginDto) { - this.initParams = socialLoginDto.initParams - if (!this.initParams.sdkUrl) { - this.initParams.sdkUrl = 'https://sdk.openlogin.com' - } - this.webBrowser = socialLoginDto.webBrowser - this.clientId = - 'BDtxlmCXNAWQFGiiaiVY3Qb1aN-d7DQ82OhT6B-RBr5j_rGnrKAqbIkvLJlf-ofYlJRiNSHbnkeHlsh8j3ueuYY' - this.backendUrl = 'https://sdk-backend.prod.biconomy.io/v1' - this.nodeClient = new NodeClient({ txServiceUrl: this.backendUrl }) - } - - async whitelistUrl(origin: string): Promise { - const whiteListUrlResponse: WhiteListSignatureResponse = - await this.nodeClient.whitelistUrl(origin) - return whiteListUrlResponse.data - } - - async login(options: SdkLoginParams): Promise { - const result = await this.request('login', options.redirectUrl, options) - if (result.type !== 'success' || !result.url) { - log.error(`[Web3Auth] login flow failed with error type ${result.type}`) - throw new Error(`login flow failed with error type ${result.type}`) - } - - const fragment = new URL(result.url).hash - const decodedPayload = base64url.decode(fragment) - const state = JSON.parse(decodedPayload) - return state - } - - async logout(options: SdkLogoutParams): Promise { - const redirectUrl = options.redirectUrl || '/' - const result = await this.request('logout', redirectUrl, options) - - if (result.type !== 'success' || !result.url) { - log.error(`[Web3Auth] logout flow failed with error type ${result.type}`) - throw new Error(`logout flow failed with error type ${result.type}`) - } - } - - private async request( - path: string, - redirectUrl: string, - params: Record = {} - ): Promise { - const initParams = { - ...this.initParams, - clientId: this.clientId, - originData: params.originData, - network: this.initParams.network || 'mainnet', - ...(!!this.initParams.redirectUrl && { - redirectUrl: this.initParams.redirectUrl - }) - } - - const mergedParams = { - init: initParams, - params: { - ...params, - ...(!params.redirectUrl && { redirectUrl }) - } - } - - log.debug(`[Web3Auth] params passed to Web3Auth: ${mergedParams}`) - - const hash = base64url.encode(JSON.stringify(mergedParams)) - - const url = new URL(this.initParams.sdkUrl || '') - url.pathname = `${url.pathname}${path}` - url.hash = hash - - log.info( - `[Web3Auth] opening login screen in browser at ${url.href}, will redirect to ${redirectUrl}` - ) - - return this.webBrowser.openAuthSessionAsync(url.href, redirectUrl) - } -} - -export default SocialLogin diff --git a/packages/web3-auth-native/src/index.ts b/packages/web3-auth-native/src/index.ts deleted file mode 100644 index baf5608e1..000000000 --- a/packages/web3-auth-native/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import SocialLogin from './SocialLogin' - -export default SocialLogin -export * from './types/IWebBrowser' -export * from './types/sdk' -export * from './types/State' diff --git a/packages/web3-auth-native/src/types/IWebBrowser.ts b/packages/web3-auth-native/src/types/IWebBrowser.ts deleted file mode 100644 index fcc51728c..000000000 --- a/packages/web3-auth-native/src/types/IWebBrowser.ts +++ /dev/null @@ -1,310 +0,0 @@ -export declare type RedirectEvent = { - url: string -} -export declare type WebBrowserWindowFeatures = Record -export declare type WebBrowserOpenOptions = { - /** - * Color of the toolbar in either `#AARRGGBB` or `#RRGGBB` format. - */ - toolbarColor?: string - /** - * Package name of a browser to be used to handle Custom Tabs. List of - * available packages is to be queried by [`getCustomTabsSupportingBrowsers`](#webbrowsergetcustomtabssupportingbrowsersasync) method. - * @platform android - */ - browserPackage?: string - /** - * A boolean determining whether the toolbar should be hiding when a user scrolls the website. - */ - enableBarCollapsing?: boolean - /** - * Color of the secondary toolbar in either `#AARRGGBB` or `#RRGGBB` format. - * @platform android - */ - secondaryToolbarColor?: string - /** - * A boolean determining whether the browser should show the title of website on the toolbar. - * @platform android - */ - showTitle?: boolean - /** - * A boolean determining whether a default share item should be added to the menu. - * @platform android - */ - enableDefaultShareMenuItem?: boolean - /** - * A boolean determining whether browsed website should be shown as separate - * entry in Android recents/multitasking view. Requires `createTask` to be `true` (default). - * @default false - * @platform android - */ - showInRecents?: boolean - /** - * A boolean determining whether the browser should open in a new task or in - * the same task as your app. - * @default true - * @platform android - */ - createTask?: boolean - /** - * Tint color for controls in SKSafariViewController in `#AARRGGBB` or `#RRGGBB` format. - * @platform ios - */ - controlsColor?: string - /** - * The style of the dismiss button. Should be one of: `done`, `close`, or `cancel`. - * @platform ios - */ - dismissButtonStyle?: 'done' | 'close' | 'cancel' - /** - * A boolean determining whether Safari should enter Reader mode, if it is available. - * @platform ios - */ - readerMode?: boolean - /** - * Name to assign to the popup window. - * @platform web - */ - windowName?: string - /** - * Features to use with `window.open()`. - * @platform web - */ - windowFeatures?: string | WebBrowserWindowFeatures -} -export declare type WebBrowserAuthSessionResult = WebBrowserRedirectResult | WebBrowserResult -export declare type WebBrowserCustomTabsResults = { - /** - * Default package chosen by user, `null` if there is no such packages. Also `null` usually means, - * that user will be prompted to choose from available packages. - */ - defaultBrowserPackage?: string - /** - * Package preferred by `CustomTabsClient` to be used to handle Custom Tabs. It favors browser - * chosen by user as default, as long as it is present on both `browserPackages` and - * `servicePackages` lists. Only such browsers are considered as fully supporting Custom Tabs. - * It might be `null` when there is no such browser installed or when default browser is not in - * `servicePackages` list. - */ - preferredBrowserPackage?: string - /** - * All packages recognized by `PackageManager` as capable of handling Custom Tabs. Empty array - * means there is no supporting browsers on device. - */ - browserPackages: string[] - /** - * All packages recognized by `PackageManager` as capable of handling Custom Tabs Service. - * This service is used by [`warmUpAsync`](#webbrowserwarmupasyncbrowserpackage), [`mayInitWithUrlAsync`](#webbrowsermayinitwithurlasyncurl-browserpackage) - * and [`coolDownAsync`](#webbrowsercooldownasyncbrowserpackage). - */ - servicePackages: string[] -} -export declare enum WebBrowserResultType { - /** - * @platform ios - */ - CANCEL = 'cancel', - /** - * @platform ios - */ - DISMISS = 'dismiss', - /** - * @platform android - */ - OPENED = 'opened', - LOCKED = 'locked' -} -export declare type WebBrowserResult = { - /** - * Type of the result. - */ - type: WebBrowserResultType -} -export declare type WebBrowserRedirectResult = { - /** - * Type of the result. - */ - type: 'success' - url: string -} -export declare type ServiceActionResult = { - servicePackage?: string -} -export declare type WebBrowserMayInitWithUrlResult = ServiceActionResult -export declare type WebBrowserWarmUpResult = ServiceActionResult -export declare type WebBrowserCoolDownResult = ServiceActionResult -export declare type WebBrowserCompleteAuthSessionOptions = { - /** - * Attempt to close the window without checking to see if the auth redirect matches the cached redirect URL. - */ - skipRedirectCheck?: boolean -} -export declare type WebBrowserCompleteAuthSessionResult = { - /** - * Type of the result. - */ - type: 'success' | 'failed' - /** - * Additional description or reasoning of the result. - */ - message: string -} - -export interface IWebBrowser { - /** - * Returns a list of applications package names supporting Custom Tabs, Custom Tabs - * service, user chosen and preferred one. This may not be fully reliable, since it uses - * `PackageManager.getResolvingActivities` under the hood. (For example, some browsers might not be - * present in browserPackages list once another browser is set to default.) - * - * @return The promise which fulfils with [`WebBrowserCustomTabsResults`](#webbrowsercustomtabsresults) object. - * @platform android - */ - // getCustomTabsSupportingBrowsersAsync(): Promise; - /** - * This method calls `warmUp` method on [CustomTabsClient](https://developer.android.com/reference/android/support/customtabs/CustomTabsClient.html#warmup(long)) - * for specified package. - * - * @param browserPackage Package of browser to be warmed up. If not set, preferred browser will be warmed. - * - * @return A promise which fulfils with `WebBrowserWarmUpResult` object. - * @platform android - */ - // warmUpAsync(browserPackage?: string): Promise; - /** - * This method initiates (if needed) [CustomTabsSession](https://developer.android.com/reference/android/support/customtabs/CustomTabsSession.html#maylaunchurl) - * and calls its `mayLaunchUrl` method for browser specified by the package. - * - * @param url The url of page that is likely to be loaded first when opening browser. - * @param browserPackage Package of browser to be informed. If not set, preferred - * browser will be used. - * - * @return A promise which fulfils with `WebBrowserMayInitWithUrlResult` object. - * @platform android - */ - // mayInitWithUrlAsync( - // url: string, - // browserPackage?: string - // ): Promise; - /** - * This methods removes all bindings to services created by [`warmUpAsync`](#webbrowserwarmupasyncbrowserpackage) - * or [`mayInitWithUrlAsync`](#webbrowsermayinitwithurlasyncurl-browserpackage). You should call - * this method once you don't need them to avoid potential memory leaks. However, those binding - * would be cleared once your application is destroyed, which might be sufficient in most cases. - * - * @param browserPackage Package of browser to be cooled. If not set, preferred browser will be used. - * - * @return The promise which fulfils with ` WebBrowserCoolDownResult` when cooling is performed, or - * an empty object when there was no connection to be dismissed. - * @platform android - */ - // coolDownAsync(browserPackage?: string): Promise; - /** - * Opens the url with Safari in a modal on iOS using [`SFSafariViewController`](https://developer.apple.com/documentation/safariservices/sfsafariviewcontroller), - * and Chrome in a new [custom tab](https://developer.chrome.com/multidevice/android/customtabs) - * on Android. On iOS, the modal Safari will not share cookies with the system Safari. If you need - * this, use [`openAuthSessionAsync`](#webbrowseropenauthsessionasyncurl-redirecturl-browserparams). - * - * @param url The url to open in the web browser. - * @param browserParams A dictionary of key-value pairs. - * - * @return The promise behaves differently based on the platform. - * On Android promise resolves with `{type: 'opened'}` if we were able to open browser. - * On iOS: - * - If the user closed the web browser, the Promise resolves with `{ type: 'cancel' }`. - * - If the browser is closed using [`dismissBrowser`](#webbrowserdismissbrowser), the Promise resolves with `{ type: 'dismiss' }`. - */ - // openBrowserAsync( - // url: string, - // browserParams?: WebBrowserOpenOptions - // ): Promise; - /** - * Dismisses the presented web browser. - * - * @return The `void` on successful attempt, or throws error, if dismiss functionality is not avaiable. - * @platform ios - */ - // dismissBrowser(): void; - /** - * # On iOS: - * Opens the url with Safari in a modal using `SFAuthenticationSession` on iOS 11 and greater, - * and falling back on a `SFSafariViewController`. The user will be asked whether to allow the app - * to authenticate using the given url. - * - * # On Android: - * This will be done using a "custom Chrome tabs" browser, [AppState](../react-native/appstate/), - * and [Linking](./linking/) APIs. - * - * # On web: - * > This API can only be used in a secure environment (`https`). You can use expo `start:web --https` - * to test this. Otherwise, an error with code [`ERR_WEB_BROWSER_CRYPTO`](#errwebbrowsercrypto) will be thrown. - * This will use the browser's [`window.open()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) API. - * - _Desktop_: This will create a new web popup window in the browser that can be closed later using `WebBrowser.maybeCompleteAuthSession()`. - * - _Mobile_: This will open a new tab in the browser which can be closed using `WebBrowser.maybeCompleteAuthSession()`. - * - * How this works on web: - * - A crypto state will be created for verifying the redirect. - * - This means you need to run with `expo start:web --https` - * - The state will be added to the window's `localstorage`. This ensures that auth cannot complete - * unless it's done from a page running with the same origin as it was started. - * Ex: if `openAuthSessionAsync` is invoked on `https://localhost:19006`, then `maybeCompleteAuthSession` - * must be invoked on a page hosted from the origin `https://localhost:19006`. Using a different - * website, or even a different host like `https://128.0.0.*:19006` for example will not work. - * - A timer will be started to check for every 1000 milliseconds (1 second) to detect if the window - * has been closed by the user. If this happens then a promise will resolve with `{ type: 'dismiss' }`. - * - * > On mobile web, Chrome and Safari will block any call to [`window.open()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) - * which takes too long to fire after a user interaction. This method must be invoked immediately - * after a user interaction. If the event is blocked, an error with code [`ERR_WEB_BROWSER_BLOCKED`](#errwebbrowserblocked) will be thrown. - * - * @param url The url to open in the web browser. This should be a login page. - * @param redirectUrl _Optional_ - The url to deep link back into your app. By default, this will be [`Constants.linkingUrl`](./constants/#expoconstantslinkinguri). - * @param browserParams _Optional_ - An object with the same keys as [`WebBrowserOpenOptions`](#webbrowseropenoptions). - * If there is no native AuthSession implementation available (which is the case on Android) - * these params will be used in the browser polyfill. If there is a native AuthSession implementation, - * these params will be ignored. - * - * @return - * - If the user does not permit the application to authenticate with the given url, the Promise fulfills with `{ type: 'cancel' }` object. - * - If the user closed the web browser, the Promise fulfills with `{ type: 'cancel' }` object. - * - If the browser is closed using [`dismissBrowser`](#webbrowserdismissbrowser), - * the Promise fulfills with `{ type: 'dismiss' }` object. - */ - openAuthSessionAsync( - _url: string, - _redirectUrl: string, - _browserParams?: WebBrowserOpenOptions - ): Promise - // dismissAuthSession(): void; - /** - * Possibly completes an authentication session on web in a window popup. The method - * should be invoked on the page that the window redirects to. - * - * @param options - * - * @return Returns an object with message about why the redirect failed or succeeded: - * - * If `type` is set to `failed`, the reason depends on the message: - * - `Not supported on this platform`: If the platform doesn't support this method (iOS, Android). - * - `Cannot use expo-web-browser in a non-browser environment`: If the code was executed in an SSR - * or node environment. - * - `No auth session is currently in progress`: (the cached state wasn't found in local storage). - * This can happen if the window redirects to an origin (website) that is different to the initial - * website origin. If this happens in development, it may be because the auth started on localhost - * and finished on your computer port (Ex: `128.0.0.*`). This is controlled by the `redirectUrl` - * and `returnUrl`. - * - `Current URL "" and original redirect URL "" do not match`: This can occur when the - * redirect URL doesn't match what was initial defined as the `returnUrl`. You can skip this test - * in development by passing `{ skipRedirectCheck: true }` to the function. - * - * If `type` is set to `success`, the parent window will attempt to close the child window immediately. - * - * If the error `ERR_WEB_BROWSER_REDIRECT` was thrown, it may mean that the parent window was - * reloaded before the auth was completed. In this case you'll need to close the child window manually. - * - * @platform web - */ - // maybeCompleteAuthSession( - // options?: WebBrowserCompleteAuthSessionOptions - // ): WebBrowserCompleteAuthSessionResult; -} diff --git a/packages/web3-auth-native/src/types/State.ts b/packages/web3-auth-native/src/types/State.ts deleted file mode 100644 index 403e0eda6..000000000 --- a/packages/web3-auth-native/src/types/State.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { OpenloginUserInfo } from '@toruslabs/openlogin' - -interface State { - privKey?: string - ed25519PrivKey?: string - userInfo?: OpenloginUserInfo - sessionId?: string -} - -export type { State } diff --git a/packages/web3-auth-native/src/types/sdk.ts b/packages/web3-auth-native/src/types/sdk.ts deleted file mode 100644 index 4f6bc16cb..000000000 --- a/packages/web3-auth-native/src/types/sdk.ts +++ /dev/null @@ -1,90 +0,0 @@ -import type { - BaseLogoutParams, - BaseRedirectParams, - LoginParams, - OpenLoginOptions -} from '@toruslabs/openlogin' -import { IWebBrowser } from './IWebBrowser' - -type SdkSpecificInitParams = { - sdkUrl?: string -} - -export type SocialLoginDto = { - initParams: SdkInitParams - webBrowser: IWebBrowser -} - -export type IOriginData = { - [P: string]: string -} - -export type SdkInitParams = Omit< - OpenLoginOptions & SdkSpecificInitParams, - | 'no3PC' - | 'uxMode' - | 'replaceUrlOnRedirect' - | 'originData' - | '_iframeUrl' - | '_startUrl' - | '_popupUrl' - | '_storageServerUrl' - | 'clientId' -> - -export type SdkLoginParams = Omit< - LoginParams & IOriginData, - 'fastLogin' | 'skipTKey' | 'getWalletKey' -> - -export type SdkLogoutParams = Partial & Partial - -export const OPENLOGIN_NETWORK = { - MAINNET: 'mainnet', - TESTNET: 'testnet', - CYAN: 'cyan', - AQUA: 'aqua', - CELESTE: 'celeste' -} as const - -export const SUPPORTED_KEY_CURVES = { - SECP256K1: 'secp256k1', - ED25519: 'ed25519' -} - -export const LOGIN_PROVIDER = { - GOOGLE: 'google', - FACEBOOK: 'facebook', - REDDIT: 'reddit', - DISCORD: 'discord', - TWITCH: 'twitch', - APPLE: 'apple', - LINE: 'line', - GITHUB: 'github', - KAKAO: 'kakao', - LINKEDIN: 'linkedin', - TWITTER: 'twitter', - WEIBO: 'weibo', - WECHAT: 'wechat', - EMAIL_PASSWORDLESS: 'email_passwordless', - JWT: 'jwt' -} as const - -export const MFA_LEVELS = { - DEFAULT: 'default', - OPTIONAL: 'optional', - MANDATORY: 'mandatory', - NONE: 'none' -} - -export type { - ALLOWED_INTERACTIONS_TYPE, - LOGIN_PROVIDER_TYPE, - LoginParams, - MfaLevelType, - OPENLOGIN_NETWORK_TYPE, - OpenloginUserInfo, - SUPPORTED_KEY_CURVES_TYPE -} from '@toruslabs/openlogin' -export type { TypeOfLogin, WhiteLabelData } from '@toruslabs/openlogin-jrpc' -export type { ExtraLoginOptions } from '@toruslabs/openlogin-utils' diff --git a/packages/web3-auth-native/tests/web3-auth-native.spec.ts b/packages/web3-auth-native/tests/web3-auth-native.spec.ts deleted file mode 100644 index de58b27e6..000000000 --- a/packages/web3-auth-native/tests/web3-auth-native.spec.ts +++ /dev/null @@ -1,5 +0,0 @@ -describe('Web3 Auth Native Tests', () => { - it('should have a basic test', () => { - expect(true).toBe(true) - }) -}) diff --git a/packages/web3-auth-native/torus.config.js b/packages/web3-auth-native/torus.config.js deleted file mode 100644 index e41d0b5b8..000000000 --- a/packages/web3-auth-native/torus.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - umd: false -} diff --git a/packages/web3-auth-native/tsconfig.eslint.json b/packages/web3-auth-native/tsconfig.eslint.json deleted file mode 100644 index eced3c6c6..000000000 --- a/packages/web3-auth-native/tsconfig.eslint.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["../../tsconfig.eslint.json"] -} diff --git a/packages/web3-auth-native/tsconfig.json b/packages/web3-auth-native/tsconfig.json deleted file mode 100644 index eb424084f..000000000 --- a/packages/web3-auth-native/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "jsx": "react", - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true - }, - "include": ["src", "src/**/*.json"] -} diff --git a/packages/web3-auth/CHANGELOG.md b/packages/web3-auth/CHANGELOG.md deleted file mode 100644 index 074458c88..000000000 --- a/packages/web3-auth/CHANGELOG.md +++ /dev/null @@ -1,90 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 3.1.0 (2023-09-20) - - -### Bug Fixes - -* build ([6fb012a](https://github.com/bcnmy/biconomy-client-sdk/commit/6fb012a7d2004d5a5bad616a0ed025f1ee0a93b8)) -* css file not found ([d6cbd0b](https://github.com/bcnmy/biconomy-client-sdk/commit/d6cbd0bf88bc119c69778776df7c9bf6cd1efdb9)) -* error handling ([637bb67](https://github.com/bcnmy/biconomy-client-sdk/commit/637bb67b9390e39b4571374108bc70447a531963)) -* error handling ([7ebae72](https://github.com/bcnmy/biconomy-client-sdk/commit/7ebae72c5cfbe847bee8b2652cf88dd27a3934d9)) -* init param ([6bbccfb](https://github.com/bcnmy/biconomy-client-sdk/commit/6bbccfbff8834fa96160685f80bab7d64ec0f135)) -* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) -* ui bugs ([f7a4f47](https://github.com/bcnmy/biconomy-client-sdk/commit/f7a4f47c6076fd78515131ec59b128f312687a06)) - - -### Features - -* added email input and light mode ([741301a](https://github.com/bcnmy/biconomy-client-sdk/commit/741301a526774ed45805e477fac461b1d6afd8ac)) -* increased bg opacity ([aabbb2f](https://github.com/bcnmy/biconomy-client-sdk/commit/aabbb2fc7bab637de7a6c29fead0636979e6f6d0)) -* social login ui added ([4772065](https://github.com/bcnmy/biconomy-client-sdk/commit/477206546e0518af5a1d835f7370d70d586420c0)) -* web3-auth-native ([111bf66](https://github.com/bcnmy/biconomy-client-sdk/commit/111bf66134b8519b934895fe51082d22c8805e65)) -* web3auth modal UI ([7b7e510](https://github.com/bcnmy/biconomy-client-sdk/commit/7b7e5104ad5b1828e083f70a185328b566e9d456)) -* whitelist logic added ([53c2140](https://github.com/bcnmy/biconomy-client-sdk/commit/53c2140ef9b9d79d9d9c0e0c2c80e82b1df7f8b9)) - - - - - -# 3.0.0 (2023-08-28) - -VERSION bump only - - - - - -## 3.0.0-alpha.0 (2023-07-12) - - - - - -## 2.0.0 (2023-04-07) - - -### Bug Fixes - -* build ([6fb012a](https://github.com/bcnmy/biconomy-client-sdk/commit/6fb012a7d2004d5a5bad616a0ed025f1ee0a93b8)) -* css file not found ([d6cbd0b](https://github.com/bcnmy/biconomy-client-sdk/commit/d6cbd0bf88bc119c69778776df7c9bf6cd1efdb9)) -* error handling ([637bb67](https://github.com/bcnmy/biconomy-client-sdk/commit/637bb67b9390e39b4571374108bc70447a531963)) -* error handling ([7ebae72](https://github.com/bcnmy/biconomy-client-sdk/commit/7ebae72c5cfbe847bee8b2652cf88dd27a3934d9)) -* init param ([6bbccfb](https://github.com/bcnmy/biconomy-client-sdk/commit/6bbccfbff8834fa96160685f80bab7d64ec0f135)) -* ui bugs ([f7a4f47](https://github.com/bcnmy/biconomy-client-sdk/commit/f7a4f47c6076fd78515131ec59b128f312687a06)) - - -### Features - -* added email input and light mode ([741301a](https://github.com/bcnmy/biconomy-client-sdk/commit/741301a526774ed45805e477fac461b1d6afd8ac)) -* increased bg opacity ([aabbb2f](https://github.com/bcnmy/biconomy-client-sdk/commit/aabbb2fc7bab637de7a6c29fead0636979e6f6d0)) -* social login ui added ([4772065](https://github.com/bcnmy/biconomy-client-sdk/commit/477206546e0518af5a1d835f7370d70d586420c0)) -* web3-auth-native ([111bf66](https://github.com/bcnmy/biconomy-client-sdk/commit/111bf66134b8519b934895fe51082d22c8805e65)) -* web3auth modal UI ([7b7e510](https://github.com/bcnmy/biconomy-client-sdk/commit/7b7e5104ad5b1828e083f70a185328b566e9d456)) -* whitelist logic added ([53c2140](https://github.com/bcnmy/biconomy-client-sdk/commit/53c2140ef9b9d79d9d9c0e0c2c80e82b1df7f8b9)) - - - - - -## 1.0.0 (2023-01-03) - - -### Bug Fixes - -* build ([6fb012a](https://github.com/bcnmy/biconomy-client-sdk/commit/6fb012a7d2004d5a5bad616a0ed025f1ee0a93b8)) -* css file not found ([d6cbd0b](https://github.com/bcnmy/biconomy-client-sdk/commit/d6cbd0bf88bc119c69778776df7c9bf6cd1efdb9)) -* init param ([6bbccfb](https://github.com/bcnmy/biconomy-client-sdk/commit/6bbccfbff8834fa96160685f80bab7d64ec0f135)) -* ui bugs ([f7a4f47](https://github.com/bcnmy/biconomy-client-sdk/commit/f7a4f47c6076fd78515131ec59b128f312687a06)) - - -### Features - -* added email input and light mode ([741301a](https://github.com/bcnmy/biconomy-client-sdk/commit/741301a526774ed45805e477fac461b1d6afd8ac)) -* increased bg opacity ([aabbb2f](https://github.com/bcnmy/biconomy-client-sdk/commit/aabbb2fc7bab637de7a6c29fead0636979e6f6d0)) -* social login ui added ([4772065](https://github.com/bcnmy/biconomy-client-sdk/commit/477206546e0518af5a1d835f7370d70d586420c0)) -* web3auth modal UI ([7b7e510](https://github.com/bcnmy/biconomy-client-sdk/commit/7b7e5104ad5b1828e083f70a185328b566e9d456)) -* whitelist logic added ([53c2140](https://github.com/bcnmy/biconomy-client-sdk/commit/53c2140ef9b9d79d9d9c0e0c2c80e82b1df7f8b9)) diff --git a/packages/web3-auth/README.md b/packages/web3-auth/README.md deleted file mode 100644 index 1ed6c771a..000000000 --- a/packages/web3-auth/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# `@biconomy/web3-auth` - -> A library to import the torus web3 social auth directly from [Biconomy SDK](https://github.com/bcnmy/biconomy-client-sdk) - -## Usage - -```ts -import SocialLogin from "@biconomy/web3-auth"; -// init wallet -const socialLoginSDK = new SocialLogin(); -await socialLoginSDK.init(); -// show connect modal -socialLoginSDK.showWallet(); -``` diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json deleted file mode 100644 index cbbd149be..000000000 --- a/packages/web3-auth/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "@biconomy/web3-auth", - "version": "3.1.0", - "description": "web3-auth for biconomy sdk", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", - "keywords": [ - "legos", - "batching", - "one-click", - "cross-chain", - "web3auth" - ], - "author": "livingrockrises ", - "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" - }, - "scripts": { - "unbuild": "rimraf dist *.tsbuildinfo", - "copy-files": "npx copyfiles -u 1 src/**/*.css dist/src", - "build": "rimraf dist && tsc && yarn copy-files", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" - }, - "bugs": { - "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@biconomy/node-client": "^3.1.0", - "@walletconnect/qrcode-modal": "^1.8.0", - "@web3auth/base": "^3.0.0", - "@web3auth/core": "^3.0.0", - "@web3auth/metamask-adapter": "^3.0.0", - "@web3auth/openlogin-adapter": "^3.0.3", - "@web3auth/wallet-connect-v1-adapter": "^3.0.3", - "ethers": "^5.7.0", - "process": "^0.11.10", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@biconomy/node-client": "^3.1.0", - "@types/react": "^18.0.15", - "@types/react-dom": "^18.0.6", - "path": "^0.12.7", - "tslint": "^6.1.3", - "tslint-config-prettier": "^1.18.0", - "typescript": "^4.7.4", - "webpack": "^5.74.0", - "webpack-cli": "^4.10.0" - } -} diff --git a/packages/web3-auth/src/SocialLogin.tsx b/packages/web3-auth/src/SocialLogin.tsx deleted file mode 100644 index 306bdc95c..000000000 --- a/packages/web3-auth/src/SocialLogin.tsx +++ /dev/null @@ -1,332 +0,0 @@ -/* eslint-disable no-console */ -import React from "react"; -import { createRoot } from "react-dom/client"; -import { ethers } from "ethers"; -import { Web3AuthCore } from "@web3auth/core"; -import { WALLET_ADAPTERS, CHAIN_NAMESPACES, SafeEventEmitterProvider, UserInfo } from "@web3auth/base"; -import { OpenloginAdapter } from "@web3auth/openlogin-adapter"; -import { MetamaskAdapter } from "@web3auth/metamask-adapter"; -import { WalletConnectV1Adapter } from "@web3auth/wallet-connect-v1-adapter"; -import QRCodeModal from "@walletconnect/qrcode-modal"; -import NodeClient, { WhiteListSignatureResponse } from "@biconomy/node-client"; - -import UI from "./UI"; -import { DefaultSocialLoginConfig, SocialLoginDTO, WhiteLabelDataType } from "./types/Web3AuthConfig"; - -function createLoginModal(socialLogin: SocialLogin): void { - /* eslint-disable @typescript-eslint/no-explicit-any */ - const root = createRoot((document as any).getElementById("w3a-modal")); - root.render(); -} - -const defaultSocialLoginConfig: DefaultSocialLoginConfig = { - backendUrl: "https://sdk-backend.prod.biconomy.io/v1", -}; - -class SocialLogin { - /* eslint-disable @typescript-eslint/no-explicit-any */ - walletDiv: any; - - /* eslint-disable @typescript-eslint/no-explicit-any */ - walletIframe: any; - - /* eslint-disable @typescript-eslint/no-explicit-any */ - iWin: any = false; - - iframeInitialized = false; - - isInit = false; - - clientId: string; - - whiteLabel: WhiteLabelDataType; - - userInfo: Partial | null = null; - - web3auth: Web3AuthCore | null = null; - - provider: SafeEventEmitterProvider | null = null; - - backendUrl!: string; - - nodeClient!: NodeClient; - - constructor(backendUrl: string = defaultSocialLoginConfig.backendUrl) { - this.createWalletDiv(); - this.isInit = false; - this.web3auth = null; - this.provider = null; - this.clientId = "BDtxlmCXNAWQFGiiaiVY3Qb1aN-d7DQ82OhT6B-RBr5j_rGnrKAqbIkvLJlf-ofYlJRiNSHbnkeHlsh8j3ueuYY"; - this.backendUrl = backendUrl; - this.nodeClient = new NodeClient({ txServiceUrl: this.backendUrl }); - this.whiteLabel = { - name: "Biconomy SDK", - logo: "https://s2.coinmarketcap.com/static/img/coins/64x64/9543.png", - }; - } - - async whitelistUrl(origin: string): Promise { - const whiteListUrlResponse: WhiteListSignatureResponse = await this.nodeClient.whitelistUrl(origin); - return whiteListUrlResponse.data; - } - - async init(socialLoginDTO?: Partial): Promise { - const finalDTO: SocialLoginDTO = { - chainId: "0x1", - whitelistUrls: {}, - network: "mainnet", - whteLableData: this.whiteLabel, - }; - if (socialLoginDTO) { - if (socialLoginDTO.chainId) finalDTO.chainId = socialLoginDTO.chainId; - if (socialLoginDTO.network) finalDTO.network = socialLoginDTO.network; - if (socialLoginDTO.whitelistUrls) finalDTO.whitelistUrls = socialLoginDTO.whitelistUrls; - if (socialLoginDTO.whteLableData) this.whiteLabel = socialLoginDTO.whteLableData; - } - try { - const web3AuthCore = new Web3AuthCore({ - clientId: this.clientId, - chainConfig: { - chainNamespace: CHAIN_NAMESPACES.EIP155, - chainId: finalDTO.chainId, - }, - }); - - const openloginAdapter = new OpenloginAdapter({ - adapterSettings: { - clientId: this.clientId, - network: finalDTO.network, - uxMode: "popup", - whiteLabel: { - name: this.whiteLabel.name, - logoLight: this.whiteLabel.logo, - logoDark: this.whiteLabel.logo, - defaultLanguage: "en", - dark: true, - }, - originData: finalDTO.whitelistUrls, - }, - }); - const metamaskAdapter = new MetamaskAdapter({ - clientId: this.clientId, - }); - const wcAdapter = new WalletConnectV1Adapter({ - adapterSettings: { - qrcodeModal: QRCodeModal, - }, - }); - - web3AuthCore.configureAdapter(openloginAdapter); - web3AuthCore.configureAdapter(metamaskAdapter); - web3AuthCore.configureAdapter(wcAdapter); - await web3AuthCore.init(); - this.web3auth = web3AuthCore; - if (web3AuthCore && web3AuthCore.provider) { - this.provider = web3AuthCore.provider; - } - createLoginModal(this); - this.isInit = true; - } catch (error) { - console.error(error); - } - } - - getProvider(): SafeEventEmitterProvider | null { - return this.provider; - } - - /* eslint-disable @typescript-eslint/no-explicit-any */ - private _createIframe(iframeContainerDiv: any): void { - this.walletIframe = document.createElement("iframe"); - this.walletIframe.style.display = "none"; - this.walletIframe.style.display = "relative"; - this.walletIframe.onload = () => { - this.iWin = this.walletIframe.contentWindow || this.walletIframe; - this.iframeInitialized = true; - }; - iframeContainerDiv.appendChild(this.walletIframe); - } - - private createWalletDiv(): void { - // create a fixed div into html but keep it hidden initially - const walletDiv = document.createElement("div"); - walletDiv.id = "w3a-modal"; - walletDiv.className = "w3a-modal w3a-modal--light"; - walletDiv.style.display = "none"; - walletDiv.style.position = "fixed"; - walletDiv.style.top = "0"; - walletDiv.style.right = "0"; - walletDiv.style.height = "100%"; - walletDiv.style.width = "100%"; - walletDiv.style.background = "rgba(33, 33, 33, 0.75)"; - walletDiv.style.zIndex = "100"; - this.walletDiv = walletDiv; - // insert div into top of body. - document.body.insertBefore(walletDiv, document.body.firstChild); - this._createIframe(walletDiv); - } - - showWallet(): void { - this.walletDiv.style.display = "block"; - this.walletIframe.style.display = "block"; - // Set height and width of the iframe to 600x341 - this.walletIframe.style.height = "600px"; - this.walletIframe.style.width = "341px"; - this.walletIframe.style.border = "0px"; - this.walletIframe.style.borderRadius = "3%"; - const el = document.getElementById("w3a-modal"); - el?.dispatchEvent(new Event("show-modal")); - } - - hideWallet(): void { - this.walletDiv.style.display = "none"; - this.walletIframe.style.display = "none"; - } - - async getUserInfo(): Promise | null> { - if (this.web3auth) { - const userInfo = await this.web3auth.getUserInfo(); - this.userInfo = userInfo; - return userInfo; - } - return null; - } - - async getPrivateKey(): Promise { - if (this.web3auth && this.web3auth.provider) { - const privateKey = await this.web3auth.provider.request({ - method: "eth_private_key", - }); - return privateKey as string; - } - return null; - } - - async socialLogin(loginProvider: string): Promise { - if (!this.web3auth) { - console.info("web3auth not initialized yet"); - return null; - } - try { - const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.OPENLOGIN, { - loginProvider: loginProvider, - }); - if (!web3authProvider) { - console.error("web3authProvider is null"); - return null; - } - const web3Provider = new ethers.providers.Web3Provider(web3authProvider); - const signer = web3Provider.getSigner(); - const gotAccount = await signer.getAddress(); - const network = await web3Provider.getNetwork(); - console.info(`EOA Address ${gotAccount}\nNetwork: ${network}`); - this.provider = web3authProvider; - return web3authProvider; - } catch (error) { - console.error(error); - return null; - } - } - - async emailLogin(email: string): Promise { - if (!this.web3auth) { - console.info("web3auth not initialized yet"); - return null; - } - try { - const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.OPENLOGIN, { - loginProvider: "email_passwordless", - login_hint: email, - }); - if (!web3authProvider) { - console.error("web3authProvider is null"); - return null; - } - const web3Provider = new ethers.providers.Web3Provider(web3authProvider); - const signer = web3Provider.getSigner(); - const gotAccount = await signer.getAddress(); - const network = await web3Provider.getNetwork(); - console.info(`EOA Address ${gotAccount}\nNetwork: ${network}`); - this.provider = web3authProvider; - return web3authProvider; - } catch (error) { - console.error(error); - return null; - } - } - - async metamaskLogin(): Promise { - if (!this.web3auth) { - console.log("web3auth not initialized yet"); - return null; - } - try { - const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.METAMASK); - if (!web3authProvider) { - console.log("web3authProvider is null"); - return null; - } - const web3Provider = new ethers.providers.Web3Provider(web3authProvider); - const signer = web3Provider.getSigner(); - const gotAccount = await signer.getAddress(); - const network = await web3Provider.getNetwork(); - console.info(`EOA Address ${gotAccount}\nNetwork: ${network}`); - this.provider = web3authProvider; - return web3authProvider; - } catch (error) { - console.error(error); - return null; - } - } - - async walletConnectLogin(): Promise { - if (!this.web3auth) { - console.log("web3auth not initialized yet"); - return null; - } - try { - const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.WALLET_CONNECT_V1); - if (!web3authProvider) { - console.log("web3authProvider is null"); - return null; - } - const web3Provider = new ethers.providers.Web3Provider(web3authProvider); - const signer = web3Provider.getSigner(); - const gotAccount = await signer.getAddress(); - const network = await web3Provider.getNetwork(); - console.info(`EOA Address ${gotAccount}\nNetwork: ${network}`); - this.provider = web3authProvider; - return web3authProvider; - } catch (error) { - console.error(error); - return null; - } - } - - async logout(): Promise { - if (!this.web3auth) { - console.log("web3auth not initialized yet"); - return; - } - await this.web3auth.logout(); - this.web3auth.clearCache(); - this.provider = null; - } -} - -const socialLoginSDK: SocialLogin = new SocialLogin(); -(window as any).socialLoginSDK = socialLoginSDK; - -export default SocialLogin; - -let initializedSocialLogin: SocialLogin | null = null; -const getSocialLoginSDK = async (socialLoginDTO?: Partial): Promise => { - if (initializedSocialLogin) { - return initializedSocialLogin; - } - await socialLoginSDK.init(socialLoginDTO); - initializedSocialLogin = socialLoginSDK; - return socialLoginSDK; -}; - -export { socialLoginSDK, getSocialLoginSDK }; diff --git a/packages/web3-auth/src/UI.tsx b/packages/web3-auth/src/UI.tsx deleted file mode 100644 index 2fd8e5187..000000000 --- a/packages/web3-auth/src/UI.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import React, { useState } from "react"; -import SocialLogin from "./SocialLogin"; - -interface UIPorops { - socialLogin: SocialLogin; -} - -const container = { - position: "fixed", - float: "left", - left: "50%", - top: "50%", - width: "min(90vw, 375px)", - transform: "translate(-50%, -50%)", - transition: "opacity 400ms ease-in", - border: "1px solid #181818", - borderRadius: 10, - background: "black", - overflow: "hidden", -} as React.CSSProperties; - -const UI: React.FC = ({ socialLogin }) => { - const [email, setEmail] = useState(""); - - function handleEmailSubmit(event: React.SyntheticEvent): void { - event.preventDefault(); - socialLogin.emailLogin(email); - } - - function handleEmailChange(event: React.FormEvent): void { - setEmail(event.currentTarget.value); - } - - return ( - - ); -}; - -export default UI; diff --git a/packages/web3-auth/src/index.ts b/packages/web3-auth/src/index.ts deleted file mode 100644 index 803fefd3a..000000000 --- a/packages/web3-auth/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import SocialLogin, { socialLoginSDK, getSocialLoginSDK } from "./SocialLogin"; - -export default SocialLogin; -export { socialLoginSDK, getSocialLoginSDK }; diff --git a/packages/web3-auth/src/style.css b/packages/web3-auth/src/style.css deleted file mode 100644 index 70264c5c1..000000000 --- a/packages/web3-auth/src/style.css +++ /dev/null @@ -1,871 +0,0 @@ -/* devanagari */ -@font-face { - font-family: "Poppins"; - font-style: normal; - font-weight: 600; - src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z11lFd2JQEl8qw.woff2) format("woff2"); - unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB; -} -/* latin-ext */ -@font-face { - font-family: "Poppins"; - font-style: normal; - font-weight: 600; - src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z1JlFd2JQEl8qw.woff2) format("woff2"); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: "Poppins"; - font-style: normal; - font-weight: 600; - src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z1xlFd2JQEk.woff2) format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, - U+2215, U+FEFF, U+FFFD; -} - -/* latin-ext */ -@font-face { - font-family: "DM Sans"; - font-style: normal; - font-weight: 400; - src: url(https://fonts.gstatic.com/s/dmsans/v6/rP2Hp2ywxg089UriCZ2IHTWEBlwu8Q.woff2) format("woff2"); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: "DM Sans"; - font-style: normal; - font-weight: 400; - src: url(https://fonts.gstatic.com/s/dmsans/v6/rP2Hp2ywxg089UriCZOIHTWEBlw.woff2) format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, - U+2215, U+FEFF, U+FFFD; -} - -/* Modal */ -#w3a-modal { - --bg1: #0f1222; - --bg2: #24262e; - --text-color1: #d3d3d4; - --text-color2: #ffffff; - - --text-header: "Poppins", Helvetica, sans-serif; - --text-body: "DM Sans", Helvetica, sans-serif; - - position: fixed; - top: 0; - left: 0; - width: 100vw; - height: 100vh; - display: flex; - align-items: center; - justify-content: center; - box-sizing: border-box; - padding: 15px; - background: rgba(33, 33, 33, 0.46); - color: var(--text-color1); - font-family: var(--text-body); -} - -#w3a-modal.w3a-modal--hidden { - display: none; -} - -#w3a-modal p, -#w3a-modal form, -#w3a-modal button { - margin: 0; - padding: 0; -} - -#w3a-modal .w3a-modal__inner { - width: 100%; - max-width: 375px; - overflow: hidden; - border-radius: 6px; - position: relative; - max-height: 95%; - overflow-y: auto; - opacity: 0; - transition: 200ms cubic-bezier(0.25, 0.8, 0.25, 1); - transform-origin: center center; - min-height: 350px; -} - -#w3a-modal .w3a-modal__inner.w3a-modal__inner--active { - opacity: 1; - transition: 200ms cubic-bezier(0.25, 0.8, 0.25, 1); - transform-origin: center center; -} - -#w3a-modal .w3a-modal__header { - padding: 25px 34px; - background: var(--bg1); - box-shadow: 0px 4px 28px rgba(3, 100, 255, 0.05); - position: relative; -} -#w3a-modal .w3a-modal__content { - padding: 30px 34px; - background: var(--bg2); -} -#w3a-modal .w3a-modal__footer { - padding: 16px 34px; - background: var(--bg1); -} - -/* SPINNER */ -/* Loader */ -#w3a-modal .w3a-modal__loader { - background: var(--bg2); - position: absolute; - display: flex; - justify-content: center; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 10; -} - -#w3a-modal .w3a-modal__loader.w3a-modal__loader--hidden { - display: none; -} - -#w3a-modal .w3a-modal__loader-content { - text-align: center; - margin-bottom: 80px; - position: relative; - display: flex; - flex-direction: column; -} - -#w3a-modal .w3a-modal__loader-info { - flex-grow: 1; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - padding: 0 30px; -} - -#w3a-modal .w3a-spinner-label { - margin-top: 10px; - font-size: 16px; - font-weight: 500; - color: #0364ff; -} - -#w3a-modal .w3a-spinner-message { - margin-top: 10px; - font-size: 16px; -} -#w3a-modal .w3a-spinner-message:first-letter { - text-transform: capitalize; -} -#w3a-modal .w3a-spinner-message.w3a-spinner-message--error { - color: #fb4a61; -} - -#w3a-modal button.w3a-logout { - background: none; - border: 0; - padding: 0; - display: inline-flex; - align-items: center; - margin-bottom: 30px; - cursor: pointer; - margin-top: 20px; - color: #0364ff; -} - -#w3a-modal .w3a-spinner-power { - margin-top: auto; - font-size: 12px; - line-height: 1.2em; - color: #b7b8bd; -} -#w3a-modal .w3a-spinner-power > img { - height: 32px; - width: auto; - display: inline; -} - -#w3a-modal .w3a-spinner { - display: inline-block; - position: relative; - background-color: #0364ff; - height: 60px; - width: 60px; - border-radius: 50%; - background: conic-gradient(transparent, #0364ff); - animation: rotate 1s linear infinite; -} - -#w3a-modal .w3a-spinner__mask, -#w3a-modal .w3a-spinner__head { - content: ""; - position: absolute; - border-radius: 50%; -} - -#w3a-modal .w3a-spinner__mask { - width: 50px; - height: 50px; - top: 5px; - left: 5px; - background-color: var(--bg2); -} - -#w3a-modal .w3a-spinner__head { - height: 5px; - width: 5px; - background-color: #0364ff; - top: 0; - left: 26px; -} - -@keyframes rotate { - from { - transform: rotateZ(0); - } - to { - transform: rotateZ(360deg); - } -} - -/* Header */ -#w3a-modal .w3a-header { - display: flex; - color: var(--text-color2); - align-items: center; -} -#w3a-modal .w3a-header__logo { - height: auto; - width: 40px; - margin-right: 16px; -} -#w3a-modal .w3a-header__title { - font-family: var(--text-header); - font-weight: 600; - font-size: 20px; - line-height: 1.5em; -} -#w3a-modal p.w3a-header__subtitle { - font-size: 14px; - line-height: 1.5em; - font-weight: 400; -} -#w3a-modal button.w3a-header__button { - cursor: pointer; - position: absolute; - background: none; - padding: 0; - border: 0; - top: 20px; - right: 26px; -} - -/* BODY */ -#w3a-modal .w3a-group { - margin-bottom: 24px; -} -#w3a-modal .w3a-group:last-child { - margin-bottom: 0; -} - -#w3a-modal .w3a-group.w3a-group--hidden, -#w3a-modal .w3a-group.w3a-group--social-hidden, -#w3a-modal .w3a-group.w3a-group--email-hidden, -#w3a-modal .w3a-group.w3a-group--ext-wallet-hidden { - display: none; -} - -#w3a-modal .w3a-group:not(.w3a-group--hidden):not(:last-child), -#w3a-modal .w3a-group:not(.w3a-group--social-hidden):not(:last-child), -#w3a-modal .w3a-group:not(.w3a-group--email-hidden):not(:last-child), -#w3a-modal .w3a-group:not(.w3a-group--ext-wallet-hidden):not(:last-child) { - border-bottom: 0.5px solid #5c6c7f; - padding-bottom: 24px; -} - -#w3a-modal div.w3a-group__title { - font-family: var(--text-header); - font-weight: 400; - font-size: 14px; - line-height: 1.5em; - margin-bottom: 8px; - text-transform: uppercase; -} - -/* Adapter List */ -#w3a-modal ul.w3a-adapter-list { - display: flex; - align-items: center; - padding: 0; - margin: 0; - gap: 16px; - overflow-y: hidden; - flex-wrap: wrap; - max-height: 500px; - transition: max-height 0.4s ease-in; -} - -#w3a-modal ul.w3a-adapter-list.w3a-adapter-list--shrink { - max-height: 48px; - transition: max-height 0.4s ease-out; -} - -#w3a-modal ul.w3a-adapter-list.w3a-adapter-list--hidden { - display: none; -} - -#w3a-modal li.w3a-adapter-item { - list-style: none; - margin-bottom: 0; -} - -#w3a-modal .w3a-adapter-item--hide { - display: none; -} - -#w3a-modal .w3a-adapter-item__label { - font-size: 12px; - color: #5c6c7f; - text-align: center; - margin: 8px 0 0 !important; - text-transform: capitalize; - position: absolute; - transform: translate(-6px); - width: 60px; -} - -/* Buttons */ -#w3a-modal button.w3a-button { - background-color: #2f3136; - border: 1px solid #404145; - box-sizing: border-box; - box-shadow: 2px 2px 12px rgba(3, 100, 255, 0.05); - border-radius: 24px; - height: 48px; - width: 100%; - padding: 8px; - display: flex; - align-items: center; - justify-content: center; - font-family: var(--text-body); - font-style: normal; - font-weight: 400; - font-size: 16px; - color: var(--text-color2); - cursor: pointer; -} - -#w3a-modal button.w3a-button:hover { - background: #595857; -} - -#w3a-modal button.w3a-button:active { - background: #6f717a; -} - -#w3a-modal button.w3a-button:disabled { - background: #27282d; - color: #6f717a; -} - -#w3a-modal button.w3a-button:focus-visible { - outline: 1px solid #daf0ff; - outline-offset: -1px; -} - -#w3a-modal button.w3a-button.w3ajs-external-toggle__button { - margin-bottom: 12px; -} - -#w3a-modal button.w3a-button.w3ajs-external-toggle__button:last-child { - margin-bottom: 0; -} - -#w3a-modal button.w3a-button--icon { - width: 48px; -} - -#w3a-modal button.w3a-button--left { - justify-content: start; - padding: 8px 16px; -} - -#w3a-modal button.w3a-button--left > img { - height: 30px; - width: auto; -} - -#w3a-modal button.w3a-button--left > div.w3a-button__name { - max-width: 180px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - text-transform: capitalize; -} - -#w3a-modal button.w3a-button--left > div.w3a-button__note { - margin-left: 8px; - color: #b7b8bd; - margin-left: auto; -} - -#w3a-modal .w3a-button__image { - max-width: 100%; - max-height: 100%; - transition: - 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), - visibility 0s; -} - -#w3a-modal button.w3a-button.w3a-button--rotate .w3a-button__image { - transform: rotate(180deg); -} - -#w3a-modal .w3a-button--left .w3a-button__image { - margin-right: 12px; -} - -#w3a-modal button.w3a-button-expand { - height: unset; - width: auto; - margin-left: auto; - font-size: 12px; - margin-top: 16px; - display: flex; - border: 8px; - color: var(--text-color2); - align-items: center; - cursor: pointer; - border-radius: 12px; - cursor: pointer; - padding: 0 10px 0 8px; - background: transparent; -} - -#w3a-modal button.w3a-button-expand svg { - width: 12px; - height: auto; - margin-right: 4px; -} - -#w3a-modal .w3a-external-toggle { - display: block; -} - -#w3a-modal .w3a-external-toggle.w3a-external-toggle--hidden { - display: none; -} - -#w3a-modal .w3a-external-container { - display: block; - margin-bottom: 34px; -} - -#w3a-modal .w3a-external-container.w3a-external-container--hidden { - display: none; -} - -#w3a-modal .w3a-external-group { - display: flex; - flex-wrap: wrap; - gap: 12px; - margin-bottom: 16px; -} - -#w3a-modal .w3a-external-group__left { - flex-grow: 1; -} - -#w3a-modal button.w3a-external-back { - background: none; - border: 0; - padding: 0; - display: inline-flex; - align-items: center; - margin-bottom: 30px; - cursor: pointer; - color: var(--text-color1); -} - -#w3a-modal .w3a-external-back:focus-visible { - outline: 1px solid #daf0ff; -} - -#w3a-modal .w3a-external-back .w3a-group__title { - margin-bottom: 0; - margin-left: 5px; -} - -#w3a-modal .w3a-external-loader { - display: flex; - justify-content: center; -} - -#w3a-modal .w3a-wallet-connect { - display: block; - text-align: center; - margin-bottom: 16px; -} - -#w3a-modal .w3a-wallet-connect.w3a-wallet-connect--hidden { - display: none; -} - -#w3a-modal .w3a-wallet-connect__container { - background: #ffffff; - border-radius: 10px; - color: var(--text-color1); - font-size: 10px; - width: fit-content; - margin: auto; - min-width: 250px; - padding: 16px 12px; -} - -#w3a-modal .w3a-wallet-connect__container-desktop, -#w3a-modal .w3a-wallet-connect__container-android { - margin: auto; -} - -#w3a-modal .w3a-wallet-connect__container-btn-group { - display: flex; - gap: 18px; -} - -#w3a-modal .w3a-wallet-connect__container-ios { - display: flex; - grid-gap: 30px 20px; - padding: 0 0 28px; - box-sizing: border-box; - flex-wrap: wrap; -} - -#w3a-modal .w3a-wallet-connect-qr { - margin: 16px 16px; - padding: inherit; -} - -#w3a-modal .w3a-wallet-connect__container-android a { - text-decoration: none; -} - -#w3a-modal .w3a-wallet-connect__container-android .w3a-button { - background-color: rgb(64, 153, 255) !important; - color: #ffffff !important; - height: auto; - font-size: 14px; - padding: 8px 16px; - width: auto; - margin: auto; -} - -#w3a-modal .w3a-wallet-connect__logo > img { - text-align: center; - width: 115px; - margin-bottom: 16px; -} - -/* Text Field */ -#w3a-modal .w3a-text-field { - background: #393938; - border: 1px solid #27282d; - box-sizing: border-box; - box-shadow: inset 2px 2px 10px rgba(0, 0, 0, 0.4); - border-radius: 24px; - padding: 0 28px; - height: 48px; - width: 100%; - font-family: var(--text-body); - font-size: 16px; - color: var(--text-color2); - margin-bottom: 16px; -} - -#w3a-modal .w3a-text-field:active { - background: #0f1222; -} - -#w3a-modal .w3a-text-field:focus-visible { - outline: 1px solid #daf0ff; - outline-offset: -1px; -} - -/* Footer Components */ -#w3a-modal .w3a-footer { - display: flex; - justify-content: space-between; - align-items: center; - font-size: 10px; - line-height: 150%; - color: var(--text-color2); -} - -#w3a-modal .w3a-footer__links { - padding: 0; - margin: 0; -} - -#w3a-modal .w3a-footer__links a { - color: var(--text-color1); - text-decoration: none; -} - -#w3a-modal .w3a-footer__links a:focus-visible { - outline: 1px solid #daf0ff; -} - -#w3a-modal .w3a-footer__links span { - margin: 0 2px; -} - -#w3a-modal .w3a-footer__secured { - text-align: right; - color: #b7b8bd; -} -#w3a-modal .w3a-footer__secured > img { - height: 14px; - width: auto; -} - -/* Loader Bridge */ -#w3a-modal .w3a-modal__loader-bridge { - display: flex; - margin-bottom: 14px; -} - -#w3a-modal .w3a-modal__loader-bridge-message span { - text-transform: capitalize; -} - -#w3a-modal .w3a-modal__loader-app-logo { - display: flex; - padding: 8px; -} - -#w3a-modal .w3a-modal__loader-app-logo img { - width: 64px; - height: auto; -} - -#w3a-modal .w3a-modal__loader-adapter img { - width: 84px; - height: auto; -} - -#w3a-modal .w3a-modal__connector { - display: flex; - align-items: center; -} - -.w3a-modal__connector-beat { - display: inline-block; - position: relative; - width: 80px; - height: 80px; -} - -.w3a-modal__connector-beat div { - position: absolute; - top: 33px; - width: 13px; - height: 13px; - border-radius: 50%; - background: #808080; - animation-timing-function: cubic-bezier(0, 1, 1, 0); -} - -.w3a-modal__connector-beat div:nth-child(1) { - left: 8px; - animation: beat1 2.4s infinite; -} - -.w3a-modal__connector-beat div:nth-child(2) { - left: 8px; - animation: beat2 2.4s infinite; -} - -.w3a-modal__connector-beat div:nth-child(3) { - left: 8px; - animation: beat3 2.4s infinite; -} - -.w3a-modal__connector-beat div:nth-child(4) { - left: 32px; - animation: beat4 2.4s infinite; -} - -.w3a-modal__connector-beat div:nth-child(5) { - left: 56px; - animation: beat5 2.4s infinite; -} - -@keyframes beat1 { - 0% { - transform: scale(0); - } - - 25% { - transform: scale(0); - } - - 50% { - transform: scale(1); - } - - 75% { - transform: scale(0); - } - - 100% { - transform: scale(0); - } -} - -@keyframes beat2 { - 0% { - transform: scale(0); - } - - 25% { - transform: scale(1); - } - - 50% { - transform: translate(24px, 0); - } - - 75% { - transform: translate(0, 0); - } - - 100% { - transform: translate(0, 0) scale(0); - } -} - -@keyframes beat3 { - 0% { - transform: translate(0, 0); - } - - 25% { - transform: translate(24px, 0); - } - - 50% { - transform: translate(48px, 0); - } - - 75% { - transform: translate(24px, 0); - } - - 100% { - transform: translate(0, 0); - } -} - -@keyframes beat4 { - 0% { - transform: translate(0, 0); - } - - 25% { - transform: translate(24px, 0); - } - - 50% { - transform: translate(24px, 0) scale(0); - } - - 75% { - transform: translate(24px, 0) scale(1); - } - - 100% { - transform: translate(0, 0); - } -} - -@keyframes beat5 { - 0% { - transform: scale(1); - } - - 25% { - transform: scale(0); - } - - 50% { - transform: scale(0); - } - - 75% { - transform: scale(0); - } - - 100% { - transform: scale(1); - } -} - -/* LIGHT MODE */ -#w3a-modal.w3a-modal--light { - --bg1: #ffffff; - --bg2: #f9f9fb; - --text-color1: #a2a5b5; - --text-color2: #5c6c7f; -} - -#w3a-modal .w3a-group:not(.w3a-group--hidden):not(:last-child), -#w3a-modal .w3a-group:not(.w3a-group--social-hidden):not(:last-child), -#w3a-modal .w3a-group:not(.w3a-group--email-hidden):not(:last-child), -#w3a-modal .w3a-group:not(.w3a-group--ext-wallet-hidden):not(:last-child) { - border-bottom: 0.5px solid #b7b8bd; - padding-bottom: 24px; -} - -#w3a-modal.w3a-modal--light button.w3a-button { - background-color: #ffffff; - border: 1px solid #f3f3f4; - box-shadow: none; - color: #595857; -} - -#w3a-modal.w3a-modal--light button.w3a-button:disabled { - color: #b7b8bd; -} - -#w3a-modal.w3a-modal--light button.w3a-button:focus-visible { - outline: 1px solid #0f1222; -} - -#w3a-modal.w3a-modal--light .w3a-text-field { - background: #ffffff; - border: 1px solid #ffffff; - box-shadow: inset 2px 2px 10px rgba(0, 0, 0, 0.1); - color: #b7b8bd; -} - -#w3a-modal.w3a-modal--light .w3a-text-field:active { - color: #0f1222; - outline: 1px solid #0f1222; -} - -#w3a-modal.w3a-modal--light .w3a-text-field:focus-visible { - color: #0f1222; - outline: 1px solid #0f1222; -} - -#w3a-modal.w3a-modal--light .w3a-footer__links a:focus-visible { - outline: 1px solid #0f1222; -} - -#w3a-modal.w3a-modal--light .w3a-external-back:focus-visible { - outline: 1px solid #0f1222; -} diff --git a/packages/web3-auth/src/types/Web3AuthConfig.ts b/packages/web3-auth/src/types/Web3AuthConfig.ts deleted file mode 100644 index 404c7ef6e..000000000 --- a/packages/web3-auth/src/types/Web3AuthConfig.ts +++ /dev/null @@ -1,15 +0,0 @@ -export type DefaultSocialLoginConfig = { - backendUrl: string; -}; - -export type WhiteLabelDataType = { - name: string; - logo: string; -}; - -export type SocialLoginDTO = { - chainId: string; - whitelistUrls: { [P: string]: string }; - network: "mainnet" | "testnet"; - whteLableData: WhiteLabelDataType; -}; diff --git a/packages/web3-auth/tests/web3-auth.spec.ts b/packages/web3-auth/tests/web3-auth.spec.ts deleted file mode 100644 index 10bb465ec..000000000 --- a/packages/web3-auth/tests/web3-auth.spec.ts +++ /dev/null @@ -1,5 +0,0 @@ -describe("Web3 Auth Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); - }); -}); diff --git a/packages/web3-auth/tsconfig.json b/packages/web3-auth/tsconfig.json deleted file mode 100644 index eb424084f..000000000 --- a/packages/web3-auth/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "jsx": "react", - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true - }, - "include": ["src", "src/**/*.json"] -} From a5c66ffe84a116fb64a3bd073fbc64b9421bdd6e Mon Sep 17 00:00:00 2001 From: innovation-stack Date: Fri, 29 Sep 2023 11:17:36 +0530 Subject: [PATCH 0883/1247] fix(review): fix review comments --- .eslintrc.js | 6 ++++++ packages/modules/src/SessionKeyManagerModule.ts | 16 +++++++++------- packages/modules/src/utils/Types.ts | 2 +- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 78d998dfd..b10264bf2 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -33,6 +33,12 @@ module.exports = { files: ["*.ts", "*.tsx"], rules: { "@typescript-eslint/explicit-function-return-type": ["warn", { allowExpressions: true }], + "prettier/prettier": [ + "error", + { + endOfLine: "auto", + }, + ], }, }, ], diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index 719993117..fcae0f383 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -67,14 +67,16 @@ export class SessionKeyManagerModule extends BaseValidationModule { txServiceUrl: moduleConfig.nodeClientUrl ?? NODE_CLIENT_URL, }); - if (!moduleConfig.storageType || moduleConfig.storageType === StorageType.LOCAL_STORAGE) { - instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); + if (moduleConfig.sessionStorageClient) { + instance.sessionStorageClient = moduleConfig.sessionStorageClient; } else { - throw new Error("Invalid storage type"); - } - - if (moduleConfig.customSessionStorageClient) { - instance.sessionStorageClient = moduleConfig.customSessionStorageClient; + switch (moduleConfig.storageType) { + case StorageType.LOCAL_STORAGE: + instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); + break; + default: + throw new Error("Invalid storage type"); + } } const existingSessionData = await instance.sessionStorageClient.getAllSessionData(); diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 17c461795..179e294c0 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -21,7 +21,7 @@ export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfi nodeClientUrl?: string; smartAccountAddress: string; storageType?: StorageType; - customSessionStorageClient?: ISessionStorage; + sessionStorageClient?: ISessionStorage; } export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleConfig { From 032f17b278e35f2f166f90b779084899130c0f0b Mon Sep 17 00:00:00 2001 From: innovation-stack Date: Fri, 29 Sep 2023 11:18:14 +0530 Subject: [PATCH 0884/1247] fix(review): fix review comments --- .eslintrc.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index b10264bf2..78d998dfd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -33,12 +33,6 @@ module.exports = { files: ["*.ts", "*.tsx"], rules: { "@typescript-eslint/explicit-function-return-type": ["warn", { allowExpressions: true }], - "prettier/prettier": [ - "error", - { - endOfLine: "auto", - }, - ], }, }, ], From dbaeeb0ebf2a5350e0439158b0aa5eeaa61ac696 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 29 Sep 2023 15:52:33 -0400 Subject: [PATCH 0885/1247] add VoidSigner from utils and add example in test case + fix init to rebase later --- packages/account/package.json | 1 + .../account/src/BiconomySmartAccountV2.ts | 2 +- packages/account/src/index.ts | 1 + packages/account/src/utils/VoidSigner.ts | 57 +++++++++++++++++++ .../tests/SmartAccountV2.local.spec.ts | 28 ++++++++- 5 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 packages/account/src/utils/VoidSigner.ts diff --git a/packages/account/package.json b/packages/account/package.json index 018d66a6d..7d89691ec 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -46,6 +46,7 @@ "@biconomy/modules": "^3.1.0", "@biconomy/node-client": "^3.1.0", "@biconomy/paymaster": "^3.1.0", + "@ethersproject/logger": "^5.7.0", "@ethersproject/providers": "^5.7.2", "ethers": "^5.7.0", "loglevel": "^1.8.1", diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 8e3d23ddb..5a8889c6b 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -72,7 +72,6 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); - await instance.init(); instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 const defaultFallbackHandlerAddress = @@ -99,6 +98,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { instance.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); + await instance.init(); return instance; } diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index 784f36f10..d43249476 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -6,3 +6,4 @@ export * from "./SmartAccount"; export * from "./BiconomySmartAccount"; export * from "./utils/Constants"; export * from "./BiconomySmartAccountV2"; +export * from "./utils/VoidSigner"; diff --git a/packages/account/src/utils/VoidSigner.ts b/packages/account/src/utils/VoidSigner.ts new file mode 100644 index 000000000..d028c56ad --- /dev/null +++ b/packages/account/src/utils/VoidSigner.ts @@ -0,0 +1,57 @@ +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import { BigNumberish, BytesLike, Bytes, Signer } from "ethers"; +import { LogLevel, Logger } from "@ethersproject/logger"; +const logger = new Logger("signer"); + +export interface TypedDataDomain { + name?: string; + version?: string; + chainId?: BigNumberish; + verifyingContract?: string; + salt?: BytesLike; +} + +export interface TypedDataField { + name: string; + type: string; +} + +export type Deferrable = { + [K in keyof T]: T[K] | Promise; +}; + +export class VoidSigner extends Signer { + readonly address: string; + + readonly provider?: Provider; + + constructor(_address: string, _provider?: Provider) { + super(); + this.address = _address; + this.provider = _provider; + } + + getAddress(): Promise { + return Promise.resolve(this.address); + } + + _fail(message: string, operation: string): Promise { + return Promise.resolve().then(() => { + logger.throwError(message, Logger.errors.UNSUPPORTED_OPERATION, { operation: operation }); + }); + } + + signMessage(message: Bytes | string): Promise { + logger._log(LogLevel.INFO, [message]); + return this._fail("VoidSigner cannot sign messages", "signMessage"); + } + + signTransaction(transaction: Deferrable): Promise { + logger._log(LogLevel.INFO, [transaction]); + return this._fail("VoidSigner cannot sign transactions", "signTransaction"); + } + + connect(provider: Provider): VoidSigner { + return new VoidSigner(this.address, provider); + } +} diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 0ebc9da2a..99e0b5caa 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -1,5 +1,5 @@ import { EntryPoint, EntryPoint__factory, UserOperationStruct, SimpleAccountFactory__factory } from "@account-abstraction/contracts"; -import { Wallet, ethers } from "ethers"; +import { VoidSigner, Wallet, ethers } from "ethers"; import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; import { @@ -337,6 +337,32 @@ describe("BiconomySmartAccountV2 API Specs", () => { // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); }, 10000); // on github runner it takes more time than 5000ms + it("Creates another replicated instance using void signer", async () => { + + let newmodule = await ECDSAOwnershipValidationModule.create({ + signer: new VoidSigner(await owner.getAddress()), + moduleAddress: ecdsaModule.address, + }); + + let accountAPI2 = await BiconomySmartAccountV2.create({ + chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", + // paymaster: paymaster, + // bundler: bundler, + entryPointAddress: entryPoint.address, + factoryAddress: accountFactory.address, + implementationAddress: accountAPI.getImplementationAddress(), + defaultFallbackHandler: await accountFactory.minimalHandler(), + defaultValidationModule: newmodule, + activeValidationModule: newmodule, + }); + + const address = await accountAPI2.getAccountAddress(); + console.log('account address ', address); + + expect(address).toBe(accountAPI.accountAddress); + }, 10000); + // TODO // 1. sendSignedUserOp() // 2. sendUserOp() From 974e5467ec7729c158ab2ded2ac7513983b789f6 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 29 Sep 2023 23:35:23 -0400 Subject: [PATCH 0886/1247] calcGasLimits check fix for undefined/true/false --- packages/paymaster/src/BiconomyPaymaster.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index d2fc63953..10eb71221 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -140,7 +140,7 @@ export class BiconomyPaymaster implements IHybridPaymaster Date: Fri, 29 Sep 2023 23:47:11 -0400 Subject: [PATCH 0887/1247] dev notes --- packages/account/src/BaseSmartAccount.ts | 7 +++++++ packages/paymaster/src/BiconomyPaymaster.ts | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 66a9ef1c7..7bad6f100 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -241,10 +241,17 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { Logger.log("userOp in estimation", userOp); if (skipBundlerCall) { + // Review: instead of checking mode it could be assumed or just pass gasless flag and use it + // make pmService data locally and pass the object with default values if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { // TODO: delete these lines REVIEW userOp.maxFeePerGas = userOp.maxFeePerGas ?? (await this.provider.getGasPrice()); userOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas ?? (await this.provider.getGasPrice()); + + // TODO // Review and add try catch + // in try if gas values are undefined and pnd is 0x then estimate locally + // in catch make pnd 0x and calc values or just rethrow + // Making call to paymaster to get gas estimations for userOp const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas, paymasterAndData } = await ( this.paymaster as IHybridPaymaster diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 10eb71221..1cbf555b7 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -147,7 +147,7 @@ export class BiconomyPaymaster implements IHybridPaymaster Date: Sat, 30 Sep 2023 11:44:50 -0400 Subject: [PATCH 0888/1247] refactor --- packages/paymaster/src/interfaces/IHybridPaymaster.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/paymaster/src/interfaces/IHybridPaymaster.ts b/packages/paymaster/src/interfaces/IHybridPaymaster.ts index 7ad10aaf3..aa1b51ebe 100644 --- a/packages/paymaster/src/interfaces/IHybridPaymaster.ts +++ b/packages/paymaster/src/interfaces/IHybridPaymaster.ts @@ -1,6 +1,5 @@ import { UserOperation } from "@biconomy/core-types"; -import { FeeQuotesOrDataResponse, BiconomyTokenPaymasterRequest, FeeQuotesOrDataDto } from "../utils/Types"; -import { PaymasterAndDataResponse } from "../utils/Types"; +import { FeeQuotesOrDataResponse, BiconomyTokenPaymasterRequest, FeeQuotesOrDataDto, PaymasterAndDataResponse } from "../utils/Types"; import { Transaction } from "@biconomy/core-types"; import { Provider } from "@ethersproject/abstract-provider"; import { IPaymaster } from "./IPaymaster"; From c6e5570fad582f6d16510857021b3c535bdb2d7a Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Sat, 30 Sep 2023 12:31:21 -0400 Subject: [PATCH 0889/1247] add gasless flag + make 2.0.0 default + dont make provider feeData call if already available + handle response from paymaster in case pnd 0x and pouplate fields --- packages/account/src/BaseSmartAccount.ts | 67 ++++++++++++++----- .../account/src/BiconomySmartAccountV2.ts | 3 + packages/account/src/utils/Types.ts | 1 + packages/paymaster/src/BiconomyPaymaster.ts | 4 +- 4 files changed, 58 insertions(+), 17 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 7bad6f100..3fc97a131 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -206,10 +206,24 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { async calculateUserOpGasValues(userOp: Partial): Promise> { if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - const feeData = await this.provider.getFeeData(); - userOp.maxFeePerGas = userOp.maxFeePerGas ?? feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - userOp.maxPriorityFeePerGas = - userOp.maxPriorityFeePerGas ?? feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); + let feeData = null; + + if ( + userOp.maxFeePerGas === undefined || + userOp.maxFeePerGas === null || + userOp.maxPriorityFeePerGas === undefined || + userOp.maxPriorityFeePerGas === null + ) { + feeData = await this.provider.getFeeData(); + } + + if (userOp.maxFeePerGas === undefined || userOp.maxFeePerGas === null) { + userOp.maxFeePerGas = feeData?.maxFeePerGas ?? feeData?.gasPrice ?? (await this.provider.getGasPrice()); + } + + if (userOp.maxPriorityFeePerGas === undefined || userOp.maxPriorityFeePerGas === null) { + userOp.maxPriorityFeePerGas = feeData?.maxPriorityFeePerGas ?? feeData?.gasPrice ?? (await this.provider.getGasPrice()); + } if (userOp.initCode) userOp.verificationGasLimit = userOp.verificationGasLimit ?? (await this.getVerificationGasLimit(userOp.initCode)); userOp.callGasLimit = userOp.callGasLimit ?? @@ -222,8 +236,10 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { return userOp; } + // TODO // Should make this a Dto async estimateUserOpGas( userOp: Partial, + gasless: boolean, overrides?: Overrides, skipBundlerGasEstimation?: boolean, paymasterServiceData?: SponsorUserOperationDto, @@ -243,25 +259,46 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { if (skipBundlerCall) { // Review: instead of checking mode it could be assumed or just pass gasless flag and use it // make pmService data locally and pass the object with default values - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && gasless === true) { // TODO: delete these lines REVIEW userOp.maxFeePerGas = userOp.maxFeePerGas ?? (await this.provider.getGasPrice()); userOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas ?? (await this.provider.getGasPrice()); - // TODO // Review and add try catch - // in try if gas values are undefined and pnd is 0x then estimate locally - // in catch make pnd 0x and calc values or just rethrow + let paymasterServiceDataRequest: SponsorUserOperationDto = { + mode: PaymasterMode.SPONSORED, + smartAccountInfo: { + name: "BICONOMY", + version: "2.0.0", + }, + }; + + paymasterServiceDataRequest = { ...paymasterServiceDataRequest, ...paymasterServiceData }; // Making call to paymaster to get gas estimations for userOp const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas, paymasterAndData } = await ( this.paymaster as IHybridPaymaster - ).getPaymasterAndData(userOp, paymasterServiceData); - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; - finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; - finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + ).getPaymasterAndData(userOp, paymasterServiceDataRequest); + + // if gas values are undefined and pnd is 0x then estimate locally + if (paymasterAndData === "0x") { + const op: Partial = { + callGasLimit: callGasLimit, + verificationGasLimit: verificationGasLimit, + preVerificationGas: preVerificationGas, + maxFeePerGas: maxFeePerGas, + maxPriorityFeePerGas: maxPriorityFeePerGas, + }; + // Review + finalUserOp = await this.calculateUserOpGasValues(op); + finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + } else { + finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; + finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; + finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + } } else { Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); finalUserOp = await this.calculateUserOpGasValues(userOp); diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 1d6ae53aa..45e7542ef 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -320,6 +320,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { const data = transactions.map((element: Transaction) => element.data ?? "0x"); const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); + const gaslessTx = buildUseropDto?.gasless ?? false; + // Queue promises to fetch independent data. const nonceFetchPromise = (async () => { const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0; @@ -365,6 +367,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // Note: Can change the default behaviour of calling estimations using bundler/local userOp = await this.estimateUserOpGas( userOp, + gaslessTx, buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation, buildUseropDto?.paymasterServiceData, diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 250d69c47..eeb555b65 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -76,6 +76,7 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { export type BuildUserOpOptions = { overrides?: Overrides; + gasless?: boolean; skipBundlerGasEstimation?: boolean; params?: ModuleInfo; nonceOptions?: NonceOptions; diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 1cbf555b7..0210871cc 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -147,7 +147,7 @@ export class BiconomyPaymaster implements IHybridPaymaster Date: Mon, 2 Oct 2023 13:41:07 -0400 Subject: [PATCH 0890/1247] revert gasless flag from current feat branch --- packages/account/src/BaseSmartAccount.ts | 30 ++----------------- .../account/src/BiconomySmartAccountV2.ts | 3 -- packages/account/src/utils/Types.ts | 1 - 3 files changed, 2 insertions(+), 32 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 3fc97a131..478995dd4 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -239,7 +239,6 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { // TODO // Should make this a Dto async estimateUserOpGas( userOp: Partial, - gasless: boolean, overrides?: Overrides, skipBundlerGasEstimation?: boolean, paymasterServiceData?: SponsorUserOperationDto, @@ -259,46 +258,21 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { if (skipBundlerCall) { // Review: instead of checking mode it could be assumed or just pass gasless flag and use it // make pmService data locally and pass the object with default values - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && gasless === true) { + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { // TODO: delete these lines REVIEW userOp.maxFeePerGas = userOp.maxFeePerGas ?? (await this.provider.getGasPrice()); userOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas ?? (await this.provider.getGasPrice()); - let paymasterServiceDataRequest: SponsorUserOperationDto = { - mode: PaymasterMode.SPONSORED, - smartAccountInfo: { - name: "BICONOMY", - version: "2.0.0", - }, - }; - - paymasterServiceDataRequest = { ...paymasterServiceDataRequest, ...paymasterServiceData }; - // Making call to paymaster to get gas estimations for userOp const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas, paymasterAndData } = await ( this.paymaster as IHybridPaymaster - ).getPaymasterAndData(userOp, paymasterServiceDataRequest); - - // if gas values are undefined and pnd is 0x then estimate locally - if (paymasterAndData === "0x") { - const op: Partial = { - callGasLimit: callGasLimit, - verificationGasLimit: verificationGasLimit, - preVerificationGas: preVerificationGas, - maxFeePerGas: maxFeePerGas, - maxPriorityFeePerGas: maxPriorityFeePerGas, - }; - // Review - finalUserOp = await this.calculateUserOpGasValues(op); - finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; - } else { + ).getPaymasterAndData(userOp, paymasterServiceData); finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; - } } else { Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); finalUserOp = await this.calculateUserOpGasValues(userOp); diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index b53c6bb31..5b3790ebf 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -320,8 +320,6 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { const data = transactions.map((element: Transaction) => element.data ?? "0x"); const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); - const gaslessTx = buildUseropDto?.gasless ?? false; - // Queue promises to fetch independent data. const nonceFetchPromise = (async () => { const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0; @@ -367,7 +365,6 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // Note: Can change the default behaviour of calling estimations using bundler/local userOp = await this.estimateUserOpGas( userOp, - gaslessTx, buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation, buildUseropDto?.paymasterServiceData, diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index eeb555b65..250d69c47 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -76,7 +76,6 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { export type BuildUserOpOptions = { overrides?: Overrides; - gasless?: boolean; skipBundlerGasEstimation?: boolean; params?: ModuleInfo; nonceOptions?: NonceOptions; From d6fc21a487e0dfd60386379a3d97dea730866ba5 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 2 Oct 2023 14:00:08 -0400 Subject: [PATCH 0891/1247] lint fixes --- packages/account/src/BaseSmartAccount.ts | 14 +++++++------- packages/account/src/BiconomySmartAccountV2.ts | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 478995dd4..f211aeef5 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -266,13 +266,13 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { // Making call to paymaster to get gas estimations for userOp const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas, paymasterAndData } = await ( this.paymaster as IHybridPaymaster - ).getPaymasterAndData(userOp, paymasterServiceData); - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; - finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; - finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + ).getPaymasterAndData(userOp, paymasterServiceData); + finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; + finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; + finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; } else { Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); finalUserOp = await this.calculateUserOpGasValues(userOp); diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 5b3790ebf..1d6ae53aa 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -99,7 +99,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { instance.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); await instance.init(); - + return instance; } From af90122e261a165d3213d1cedda20eabe8d8db17 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:23:45 -0400 Subject: [PATCH 0892/1247] add dependency --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 6b6de2028..3b4d5a270 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "typescript": "^5.2.2" }, "devDependencies": { + "@types/debug": "^4.1.9", "@types/jest": "^29.5.4", "@typescript-eslint/eslint-plugin": "^6.7.0", "@typescript-eslint/parser": "^6.6.0", From 55e75777f6ee7312cf26e72a9a016e3c0466b166 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:25:16 -0400 Subject: [PATCH 0893/1247] add dependency --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 3b4d5a270..afdb67ec9 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ ] }, "dependencies": { + "ganache": "^7.9.1", "node-gyp": "^9.4.0", "typescript": "^5.2.2" }, From 303e3161ed38169113c89cafb73e187311dc8a1a Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:49:17 -0400 Subject: [PATCH 0894/1247] coverage script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index afdb67ec9..3d0a83295 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "test": "concurrently -k --success first 'yarn start:ganache' 'yarn test:run'", "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", - "test:coverage": "yarn jest --coverage", + "test:coverage": "concurrently -k --success first 'yarn start:ganache' 'yarn jest --runInBand --coverage'", "diff": "lerna diff", "release": "lerna version patch --no-git-tag-version --no-push --conventional-commits --yes" }, From a85490fc6ffaaed26488c4c2a11c346976bed8c8 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 4 Oct 2023 18:31:54 -0400 Subject: [PATCH 0895/1247] updated bundler getGasFeeValues --- packages/account/src/BaseSmartAccount.ts | 11 ++-- .../account/src/BiconomySmartAccountV2.ts | 59 +++++++++++++------ packages/bundler/src/Bundler.ts | 20 +++++++ packages/bundler/src/interfaces/IBundler.ts | 3 +- packages/bundler/src/utils/Types.ts | 11 ++++ packages/common/package.json | 1 + packages/common/src/httpRequests.ts | 1 + 7 files changed, 81 insertions(+), 25 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index f211aeef5..91d150b1b 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -259,19 +259,16 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { // Review: instead of checking mode it could be assumed or just pass gasless flag and use it // make pmService data locally and pass the object with default values if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { - // TODO: delete these lines REVIEW - userOp.maxFeePerGas = userOp.maxFeePerGas ?? (await this.provider.getGasPrice()); - userOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas ?? (await this.provider.getGasPrice()); - + if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { + throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); + } // Making call to paymaster to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas, paymasterAndData } = await ( + const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( this.paymaster as IHybridPaymaster ).getPaymasterAndData(userOp, paymasterServiceData); finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; - finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; } else { Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 1d6ae53aa..80c63aa54 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -322,17 +322,51 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // Queue promises to fetch independent data. const nonceFetchPromise = (async () => { - const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0; - const nonce = await this.getNonce(_nonceSpace); + let nonce = BigNumber.from(0); + try { + if (buildUseropDto?.nonceOptions?.nonceOverride) { + nonce = BigNumber.from(buildUseropDto?.nonceOptions?.nonceOverride); + } else { + const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0; + nonce = await this.getNonce(_nonceSpace); + } + } catch (error) { + // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account + } return nonce; })(); const initCodeFetchPromise = this.getInitCode(); const dummySignatureFetchPromise = this.getDummySignature(buildUseropDto?.params); + const gasFeeValues = { + maxFeePerGas: buildUseropDto?.overrides?.maxFeePerGas, + maxPriorityFeePerGas: buildUseropDto?.overrides?.maxPriorityFeePerGas, + }; + // Estimate max fee per gas and max priority fee per gas + const getGasFeeValues = (async () => { + try { + if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && !buildUseropDto?.skipBundlerGasEstimation) { + const gasFeeEstimation = await this.bundler.getGasFeeValues(); + gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; + gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; + } + return gasFeeValues; + } catch (error: any) { + Logger.error("Provided bundler might not have this endpoint", error); + return gasFeeValues; + } + })(); + + const [nonceFromFetch, initCode, signature, finalGasFeeValue] = await Promise.all([ + nonceFetchPromise, + initCodeFetchPromise, + dummySignatureFetchPromise, + getGasFeeValues, + ]); + if (transactions.length === 0) { throw new Error("Transactions array cannot be empty"); } - let callData = ""; if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { callData = await this.encodeExecuteBatch(to, value, data); @@ -341,26 +375,17 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { callData = await this.encodeExecute(to[0], value[0], data[0]); } - let nonce = BigNumber.from(0); - try { - if (buildUseropDto?.nonceOptions?.nonceOverride) { - nonce = BigNumber.from(buildUseropDto?.nonceOptions?.nonceOverride); - } else { - nonce = await nonceFetchPromise; - } - } catch (error) { - // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account - } - let userOp: Partial = { sender: await this.getAccountAddress(), - nonce, - initCode: await initCodeFetchPromise, + nonce: nonceFromFetch, + initCode, callData: callData, + maxFeePerGas: finalGasFeeValue.maxFeePerGas || undefined, + maxPriorityFeePerGas: finalGasFeeValue.maxPriorityFeePerGas || undefined, }; // for this Smart Account current validation module dummy signature will be used to estimate gas - userOp.signature = await dummySignatureFetchPromise; + userOp.signature = signature; // Note: Can change the default behaviour of calling estimations using bundler/local userOp = await this.estimateUserOpGas( diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 37a48d8e5..99e72fd04 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -11,6 +11,8 @@ import { UserOpGasResponse, UserOpByHashResponse, SendUserOpOptions, + GetGasFeeValuesResponse, + GasFeeValues, } from "./utils/Types"; import { resolveProperties } from "ethers/lib/utils"; import { deepHexlify, sendRequest, getTimestampInSeconds, HttpMethod, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; @@ -174,4 +176,22 @@ export class Bundler implements IBundler { const userOpByHashResponse: UserOpByHashResponse = response.result; return userOpByHashResponse; } + + /** + * @description This function will return the gas fee values + */ + async getGasFeeValues(): Promise { + const bundlerUrl = this.getBundlerUrl(); + const response: GetGasFeeValuesResponse = await sendRequest({ + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "biconomy_getGasFeeValues", + params: [], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, + }); + return response.result; + } } diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts index d34c1321a..5fb00a2a7 100644 --- a/packages/bundler/src/interfaces/IBundler.ts +++ b/packages/bundler/src/interfaces/IBundler.ts @@ -1,4 +1,4 @@ -import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse, SendUserOpOptions } from "../utils/Types"; +import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse, SendUserOpOptions, GasFeeValues } from "../utils/Types"; import { UserOperation } from "@biconomy/core-types"; export interface IBundler { @@ -6,4 +6,5 @@ export interface IBundler { sendUserOp(_userOp: UserOperation, _simulationParam?: SendUserOpOptions): Promise; getUserOpReceipt(_userOpHash: string): Promise; getUserOpByHash(_userOpHash: string): Promise; + getGasFeeValues(): Promise; } diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index 2cd6c4e91..b9e1ffe5f 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -86,3 +86,14 @@ export type JsonRpcError = { message: string; data: any; }; + +export type GetGasFeeValuesResponse = { + jsonrpc: string; + id: number; + result: GasFeeValues; + error?: JsonRpcError; +}; +export type GasFeeValues = { + maxPriorityFeePerGas: string; + maxFeePerGas: string; +}; diff --git a/packages/common/package.json b/packages/common/package.json index 1890c8719..5ce64628d 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -51,6 +51,7 @@ "concurrently": "^7.4.0", "debug": "^4.3.4", "ethers": "^5.7.0", + "node-fetch": "^2.7.0", "typechain": "^8.1.1" }, "devDependencies": { diff --git a/packages/common/src/httpRequests.ts b/packages/common/src/httpRequests.ts index 40f414ad7..d4923d2b6 100644 --- a/packages/common/src/httpRequests.ts +++ b/packages/common/src/httpRequests.ts @@ -1,3 +1,4 @@ +import fetch from "node-fetch"; import { Logger } from "./Logger"; export enum HttpMethod { From 321e0872bd6c1265e87900ee4de0877b250d2ce5 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 9 Oct 2023 08:42:41 -0400 Subject: [PATCH 0896/1247] update changes for v1 accounts --- packages/account/src/BiconomySmartAccount.ts | 45 ++++++++++++++++---- packages/account/src/SmartAccount.ts | 12 +++--- 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 81f317079..901b645fe 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -268,18 +268,45 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); this.isProxyDefined(); + // Queue promises to fetch independent data. + const nonceFetchPromise = (async () => { + let nonce = BigNumber.from(0); + try { + nonce = await this.nonce(); + } catch (error) { + // Not throwing this error as nonce would be 0 if this.nonce() throw exception, which is expected flow for undeployed account + } + return nonce; + })(); + + const gasFeeValues = { + maxFeePerGas: overrides?.maxFeePerGas, + maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas, + }; + // Estimate max fee per gas and max priority fee per gas + const getGasFeeValues = (async () => { + try { + if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && skipBundlerGasEstimation) { + const gasFeeEstimation = await this.bundler.getGasFeeValues(); + gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; + gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; + } + return gasFeeValues; + } catch (error: any) { + Logger.error("Provided bundler might not have this endpoint", error); + return gasFeeValues; + } + })(); + + const [nonce, finalGasFeeValue] = await Promise.all([nonceFetchPromise, getGasFeeValues]); + let callData = ""; if (transactions.length === 1) { callData = this.getExecuteCallData(to[0], value[0], data[0]); } else { callData = this.getExecuteBatchCallData(to, value, data); } - let nonce = BigNumber.from(0); - try { - nonce = await this.nonce(); - } catch (error) { - // Not throwing this error as nonce would be 0 if this.nonce() throw exception, which is expected flow for undeployed account - } + let isDeployed = true; if (nonce.eq(0)) { @@ -291,11 +318,11 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart nonce, initCode: !isDeployed ? this.initCode : "0x", callData: callData, + maxFeePerGas: finalGasFeeValue.maxFeePerGas || undefined, + maxPriorityFeePerGas: finalGasFeeValue.maxPriorityFeePerGas || undefined, + signature: this.getDummySignature(), }; - // for this Smart Account dummy ECDSA signature will be used to estimate gas - userOp.signature = this.getDummySignature(); - // Note: Can change the default behaviour of calling estimations using bundler/local userOp = await this.estimateUserOpGas(userOp, overrides, skipBundlerGasEstimation, paymasterServiceData); Logger.log("UserOp after estimation ", userOp); diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index fa5347cc3..609b423b1 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -118,19 +118,19 @@ export abstract class SmartAccount implements ISmartAccount { Logger.log("userOp in estimation", userOp); if (skipBundlerCall) { + // Review: instead of checking mode it could be assumed or just pass gasless flag and use it + // make pmService data locally and pass the object with default values if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { - // TODO: delete these lines REVIEW - userOp.maxFeePerGas = userOp.maxFeePerGas ?? (await this.provider.getGasPrice()); - userOp.maxPriorityFeePerGas = userOp.maxPriorityFeePerGas ?? (await this.provider.getGasPrice()); + if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { + throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); + } // Making call to paymaster to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas, paymasterAndData } = await ( + const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( this.paymaster as IHybridPaymaster ).getPaymasterAndData(userOp, paymasterServiceData); finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; - finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; } else { Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); From 9a816a50aacc666d827f2d005d59a28435034621 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 9 Oct 2023 09:21:40 -0400 Subject: [PATCH 0897/1247] flag logic update incase of undefined --- packages/account/src/BiconomySmartAccount.ts | 2 +- packages/account/src/BiconomySmartAccountV2.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 901b645fe..5ecbcf1c3 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -286,7 +286,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart // Estimate max fee per gas and max priority fee per gas const getGasFeeValues = (async () => { try { - if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && skipBundlerGasEstimation) { + if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (skipBundlerGasEstimation ?? true)) { const gasFeeEstimation = await this.bundler.getGasFeeValues(); gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 80c63aa54..a6eee0e5e 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -345,7 +345,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // Estimate max fee per gas and max priority fee per gas const getGasFeeValues = (async () => { try { - if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && !buildUseropDto?.skipBundlerGasEstimation) { + if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (buildUseropDto?.skipBundlerGasEstimation ?? true)) { const gasFeeEstimation = await this.bundler.getGasFeeValues(); gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; From 0d965b9461b3fc2800e0b53c767e580e133d2026 Mon Sep 17 00:00:00 2001 From: tomarsachin2271 Date: Mon, 9 Oct 2023 17:45:35 +0400 Subject: [PATCH 0898/1247] Sending better error message --- packages/account/src/BaseSmartAccount.ts | 2 +- packages/account/src/SmartAccount.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 91d150b1b..eb0974031 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -72,7 +72,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { if (!userOp[field]) { - throw new Error(`${String(field)} is missing`); + throw new Error(`${String(field)} is missing in the UserOp`); } } return true; diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index 609b423b1..6b52b2539 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -49,7 +49,7 @@ export abstract class SmartAccount implements ISmartAccount { private validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { if (!userOp[field]) { - throw new Error(`${String(field)} is missing`); + throw new Error(`${String(field)} is missing in the UserOp`); } } return true; From f1518d88af3b40d6b493abd9e20775437897daee Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 9 Oct 2023 10:35:40 -0400 Subject: [PATCH 0899/1247] comments resolve --- packages/account/src/BiconomySmartAccount.ts | 67 ++++++++-------- .../account/src/BiconomySmartAccountV2.ts | 76 ++++++++++--------- 2 files changed, 74 insertions(+), 69 deletions(-) diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 5ecbcf1c3..789c36cd9 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -256,6 +256,37 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart return "0x"; } + private async getNonce(): Promise { + let nonce = BigNumber.from(0); + try { + nonce = await this.nonce(); + } catch (error) { + // Not throwing this error as nonce would be 0 if this.nonce() throw exception, which is expected flow for undeployed account + } + return nonce; + } + + private async getGasFeeValues( + overrides: Overrides | undefined, + skipBundlerGasEstimation: boolean | undefined, + ): Promise<{ maxFeePerGas?: BigNumberish | undefined; maxPriorityFeePerGas?: BigNumberish | undefined }> { + const gasFeeValues = { + maxFeePerGas: overrides?.maxFeePerGas, + maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas, + }; + try { + if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (skipBundlerGasEstimation ?? true)) { + const gasFeeEstimation = await this.bundler.getGasFeeValues(); + gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; + gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; + } + return gasFeeValues; + } catch (error: any) { + Logger.error("Provided bundler might not have this endpoint", error); + return gasFeeValues; + } + } + async buildUserOp( transactions: Transaction[], overrides?: Overrides, @@ -268,37 +299,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); this.isProxyDefined(); - // Queue promises to fetch independent data. - const nonceFetchPromise = (async () => { - let nonce = BigNumber.from(0); - try { - nonce = await this.nonce(); - } catch (error) { - // Not throwing this error as nonce would be 0 if this.nonce() throw exception, which is expected flow for undeployed account - } - return nonce; - })(); - - const gasFeeValues = { - maxFeePerGas: overrides?.maxFeePerGas, - maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas, - }; - // Estimate max fee per gas and max priority fee per gas - const getGasFeeValues = (async () => { - try { - if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (skipBundlerGasEstimation ?? true)) { - const gasFeeEstimation = await this.bundler.getGasFeeValues(); - gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; - gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; - } - return gasFeeValues; - } catch (error: any) { - Logger.error("Provided bundler might not have this endpoint", error); - return gasFeeValues; - } - })(); - - const [nonce, finalGasFeeValue] = await Promise.all([nonceFetchPromise, getGasFeeValues]); + const [nonce, gasFeeValues] = await Promise.all([this.getNonce(), this.getGasFeeValues(overrides, skipBundlerGasEstimation)]); let callData = ""; if (transactions.length === 1) { @@ -318,8 +319,8 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart nonce, initCode: !isDeployed ? this.initCode : "0x", callData: callData, - maxFeePerGas: finalGasFeeValue.maxFeePerGas || undefined, - maxPriorityFeePerGas: finalGasFeeValue.maxPriorityFeePerGas || undefined, + maxFeePerGas: gasFeeValues.maxFeePerGas || undefined, + maxPriorityFeePerGas: gasFeeValues.maxPriorityFeePerGas || undefined, signature: this.getDummySignature(), }; diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index a6eee0e5e..36e6b91dc 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -16,6 +16,8 @@ import { CounterFactualAddressParam, BuildUserOpOptions, SendUserOpOptions, + Overrides, + NonceOptions, } from "./utils/Types"; import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; @@ -315,53 +317,55 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return bundlerResponse; } + private async getBuildUserOpNonce(nonceOptions: NonceOptions | undefined): Promise { + let nonce = BigNumber.from(0); + try { + if (nonceOptions?.nonceOverride) { + nonce = BigNumber.from(nonceOptions?.nonceOverride); + } else { + const _nonceSpace = nonceOptions?.nonceKey ?? 0; + nonce = await this.getNonce(_nonceSpace); + } + } catch (error) { + // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account + } + return nonce; + } + + private async getGasFeeValues( + overrides: Overrides | undefined, + skipBundlerGasEstimation: boolean | undefined, + ): Promise<{ maxFeePerGas?: BigNumberish | undefined; maxPriorityFeePerGas?: BigNumberish | undefined }> { + const gasFeeValues = { + maxFeePerGas: overrides?.maxFeePerGas, + maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas, + }; + try { + if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (skipBundlerGasEstimation ?? true)) { + const gasFeeEstimation = await this.bundler.getGasFeeValues(); + gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; + gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; + } + return gasFeeValues; + } catch (error: any) { + Logger.error("Provided bundler might not have this endpoint", error); + return gasFeeValues; + } + } + async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { const to = transactions.map((element: Transaction) => element.to); const data = transactions.map((element: Transaction) => element.data ?? "0x"); const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); - // Queue promises to fetch independent data. - const nonceFetchPromise = (async () => { - let nonce = BigNumber.from(0); - try { - if (buildUseropDto?.nonceOptions?.nonceOverride) { - nonce = BigNumber.from(buildUseropDto?.nonceOptions?.nonceOverride); - } else { - const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0; - nonce = await this.getNonce(_nonceSpace); - } - } catch (error) { - // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account - } - return nonce; - })(); const initCodeFetchPromise = this.getInitCode(); const dummySignatureFetchPromise = this.getDummySignature(buildUseropDto?.params); - const gasFeeValues = { - maxFeePerGas: buildUseropDto?.overrides?.maxFeePerGas, - maxPriorityFeePerGas: buildUseropDto?.overrides?.maxPriorityFeePerGas, - }; - // Estimate max fee per gas and max priority fee per gas - const getGasFeeValues = (async () => { - try { - if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (buildUseropDto?.skipBundlerGasEstimation ?? true)) { - const gasFeeEstimation = await this.bundler.getGasFeeValues(); - gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; - gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; - } - return gasFeeValues; - } catch (error: any) { - Logger.error("Provided bundler might not have this endpoint", error); - return gasFeeValues; - } - })(); - const [nonceFromFetch, initCode, signature, finalGasFeeValue] = await Promise.all([ - nonceFetchPromise, + this.getBuildUserOpNonce(buildUseropDto?.nonceOptions), initCodeFetchPromise, dummySignatureFetchPromise, - getGasFeeValues, + this.getGasFeeValues(buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation), ]); if (transactions.length === 0) { From 57a6600825589556c71a56a162771e745c2c27ba Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 9 Oct 2023 10:48:22 -0400 Subject: [PATCH 0900/1247] test fix --- packages/account/tests/SmartAccountV2.local.spec.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 35040e215..cea9f406c 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -79,8 +79,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { activeValidationModule: module1, }); - // console.log('account api provider ', accountAPI.provider) - + // console.log('account api provider ', accountAPI.provider) const counterFactualAddress = await accountAPI.getAccountAddress(); console.log("Counterfactual address ", counterFactualAddress); @@ -141,7 +140,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); - }); + }, 10000); // on github runner it takes more time than 5000ms // TODO // possibly use local bundler API from image @@ -335,13 +334,12 @@ describe("BiconomySmartAccountV2 API Specs", () => { }, 10000); // on github runner it takes more time than 5000ms it("Creates another replicated instance using void signer", async () => { - - let newmodule = await ECDSAOwnershipValidationModule.create({ + const newmodule = await ECDSAOwnershipValidationModule.create({ signer: new VoidSigner(await owner.getAddress()), moduleAddress: ecdsaModule.address, }); - let accountAPI2 = await BiconomySmartAccountV2.create({ + const accountAPI2 = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, rpcUrl: "http://127.0.0.1:8545", // paymaster: paymaster, @@ -355,7 +353,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { }); const address = await accountAPI2.getAccountAddress(); - console.log('account address ', address); + console.log("account address ", address); expect(address).toBe(accountAPI.accountAddress); }, 10000); From 8ba5d9cb671a901f29c05a13be3146916cf6f9fc Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 9 Oct 2023 10:50:01 -0400 Subject: [PATCH 0901/1247] remove max fee values from paymaster response --- packages/paymaster/src/BiconomyPaymaster.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 0210871cc..3413f1100 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -331,15 +331,11 @@ export class BiconomyPaymaster implements IHybridPaymaster Date: Mon, 9 Oct 2023 11:35:50 -0400 Subject: [PATCH 0902/1247] update error logs --- packages/account/src/BiconomySmartAccount.ts | 3 ++- packages/account/src/BiconomySmartAccountV2.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 789c36cd9..40504b2b6 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -262,6 +262,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart nonce = await this.nonce(); } catch (error) { // Not throwing this error as nonce would be 0 if this.nonce() throw exception, which is expected flow for undeployed account + Logger.log("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); } return nonce; } @@ -282,7 +283,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart } return gasFeeValues; } catch (error: any) { - Logger.error("Provided bundler might not have this endpoint", error); + Logger.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); return gasFeeValues; } } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 36e6b91dc..ed2a6143e 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -328,6 +328,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } } catch (error) { // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account + Logger.log("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); } return nonce; } @@ -348,7 +349,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } return gasFeeValues; } catch (error: any) { - Logger.error("Provided bundler might not have this endpoint", error); + Logger.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); return gasFeeValues; } } From 13b4543fc2c7a0fc6899f92f4d10a0be46b44594 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 11 Oct 2023 15:22:52 +0400 Subject: [PATCH 0903/1247] setup: devs can optionally just rely on biconomy_getUserOpStatus --- packages/bundler/src/Bundler.ts | 30 +++++++++++++++++++++++++++-- packages/bundler/src/utils/Types.ts | 17 +++++++++++++++- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 99e72fd04..b96d339f0 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -1,7 +1,7 @@ import { IBundler } from "./interfaces/IBundler"; import { UserOperation, ChainId } from "@biconomy/core-types"; import { - GetUserOperationResponse, + GetUserOperationReceiptResponse, GetUserOpByHashResponse, Bundlerconfig, UserOpResponse, @@ -13,6 +13,8 @@ import { SendUserOpOptions, GetGasFeeValuesResponse, GasFeeValues, + UserOpStatus, + GetUserOperationStatusResponse, } from "./utils/Types"; import { resolveProperties } from "ethers/lib/utils"; import { deepHexlify, sendRequest, getTimestampInSeconds, HttpMethod, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; @@ -128,6 +130,8 @@ export class Bundler implements IBundler { }, this.UserOpReceiptIntervals[chainId]); }); }, + // TODO + // waitTxHashGenerated: (): Promise => {}, }; return response; } @@ -140,7 +144,7 @@ export class Bundler implements IBundler { */ async getUserOpReceipt(userOpHash: string): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetUserOperationResponse = await sendRequest({ + const response: GetUserOperationReceiptResponse = await sendRequest({ url: bundlerUrl, method: HttpMethod.Post, body: { @@ -154,6 +158,28 @@ export class Bundler implements IBundler { return userOpReceipt; } + /** + * + * @param userOpHash + * @description This function will return userOpReceipt for a given userOpHash + * @returns Promise + */ + async getUserOpStatus(userOpHash: string): Promise { + const bundlerUrl = this.getBundlerUrl(); + const response: GetUserOperationStatusResponse = await sendRequest({ + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "biconomy_getUserOperationStatus", + params: [userOpHash], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, + }); + const userOpStatus: UserOpStatus = response.result; + return userOpStatus; + } + /** * * @param userOpHash diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index b9e1ffe5f..b2daa427f 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -23,6 +23,13 @@ export type UserOpReceipt = { receipt: ethers.providers.TransactionReceipt; }; +// review +export type UserOpStatus = { + state: string; // for now // could be an enum + transactionHash?: string; + userOperationReceipt?: UserOpReceipt; +}; + export type SendUserOpOptions = { simulationType?: SimulationType; }; @@ -30,13 +37,20 @@ export type SendUserOpOptions = { export type SimulationType = "validation" | "validation_and_execution"; // Converted to JsonRpcResponse with strict type -export type GetUserOperationResponse = { +export type GetUserOperationReceiptResponse = { jsonrpc: string; id: number; result: UserOpReceipt; error?: JsonRpcError; }; +export type GetUserOperationStatusResponse = { + jsonrpc: string; + id: number; + result: UserOpStatus; + error?: JsonRpcError; +}; + // Converted to JsonRpcResponse with strict type export type SendUserOpResponse = { jsonrpc: string; @@ -48,6 +62,7 @@ export type SendUserOpResponse = { export type UserOpResponse = { userOpHash: string; wait(_confirmations?: number): Promise; + // waitTxHashGenerated?(): Promise; }; // Converted to JsonRpcResponse with strict type From 1a9026abe536f649b38daa4a76459bb4d17d6eb3 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 12 Oct 2023 14:14:59 +0400 Subject: [PATCH 0904/1247] feat:added waitForTxHash in userOpResponse --- package.json | 2 +- packages/bundler/src/Bundler.ts | 18 ++++++++++++++++-- packages/bundler/src/utils/Types.ts | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 3d0a83295..0736ca29f 100644 --- a/package.json +++ b/package.json @@ -53,11 +53,11 @@ ] }, "dependencies": { - "ganache": "^7.9.1", "node-gyp": "^9.4.0", "typescript": "^5.2.2" }, "devDependencies": { + "ganache": "^7.9.1", "@types/debug": "^4.1.9", "@types/jest": "^29.5.4", "@typescript-eslint/eslint-plugin": "^6.7.0", diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index b96d339f0..8d88acb14 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -130,8 +130,22 @@ export class Bundler implements IBundler { }, this.UserOpReceiptIntervals[chainId]); }); }, - // TODO - // waitTxHashGenerated: (): Promise => {}, + waitForTxHash: (): Promise => { + return new Promise((resolve, reject) => { + const intervalId = setInterval(async () => { + try { + const userOpStatus = await this.getUserOpStatus(sendUserOperationResponse.result); + if (userOpStatus && userOpStatus.state && (userOpStatus.transactionHash || userOpStatus.state === "SUBMITTED")) { + clearInterval(intervalId); + resolve(userOpStatus); + } + } catch (error) { + clearInterval(intervalId); + reject(error); + } + }, this.UserOpReceiptIntervals[chainId]); // Review: If we should use different intervals here + }); + }, }; return response; } diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index b2daa427f..f53a28295 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -62,7 +62,7 @@ export type SendUserOpResponse = { export type UserOpResponse = { userOpHash: string; wait(_confirmations?: number): Promise; - // waitTxHashGenerated?(): Promise; + waitForTxHash?(): Promise; }; // Converted to JsonRpcResponse with strict type From df628afeeee34db5f46af51a6d624b93b6c62da1 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 12 Oct 2023 16:10:18 +0400 Subject: [PATCH 0905/1247] refactor + dev notes + add max wait duration --- packages/bundler/src/Bundler.ts | 116 +++++++++++++++++++----- packages/bundler/src/utils/Constants.ts | 79 ++++++++++++++++ packages/bundler/src/utils/Types.ts | 6 +- 3 files changed, 175 insertions(+), 26 deletions(-) diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 8d88acb14..a00244cdf 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -19,7 +19,12 @@ import { import { resolveProperties } from "ethers/lib/utils"; import { deepHexlify, sendRequest, getTimestampInSeconds, HttpMethod, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; import { transformUserOP } from "./utils/HelperFunction"; -import { UserOpReceiptIntervals } from "./utils/Constants"; +import { + UserOpReceiptIntervals, + UserOpWaitForTxHashIntervals, + UserOpWaitForTxHashMaxDurationIntervals, + UserOpReceiptMaxDurationIntervals, +} from "./utils/Constants"; import { JsonRpcProvider } from "@ethersproject/providers"; /** @@ -29,13 +34,34 @@ import { JsonRpcProvider } from "@ethersproject/providers"; */ export class Bundler implements IBundler { // eslint-disable-next-line no-unused-vars - UserOpReceiptIntervals: { [key in ChainId]?: number }; + UserOpReceiptIntervals!: { [key in ChainId]?: number }; + + UserOpWaitForTxHashIntervals!: { [key in ChainId]?: number }; + + UserOpReceiptMaxDurationIntervals!: { [key in ChainId]?: number }; + + UserOpWaitForTxHashMaxDurationIntervals!: { [key in ChainId]?: number }; constructor(readonly bundlerConfig: Bundlerconfig) { this.UserOpReceiptIntervals = { ...UserOpReceiptIntervals, ...bundlerConfig.userOpReceiptIntervals, }; + + this.UserOpWaitForTxHashIntervals = { + ...UserOpWaitForTxHashIntervals, + ...bundlerConfig.userOpWaitForTxHashIntervals, + }; + + this.UserOpReceiptMaxDurationIntervals = { + ...UserOpReceiptMaxDurationIntervals, + ...bundlerConfig.userOpReceiptMaxDurationIntervals, + }; + + this.UserOpWaitForTxHashMaxDurationIntervals = { + ...UserOpWaitForTxHashMaxDurationIntervals, + ...bundlerConfig.userOpWaitForTxHashMaxDurationIntervals, + }; } private getBundlerUrl(): string { @@ -107,43 +133,83 @@ export class Bundler implements IBundler { userOpHash: sendUserOperationResponse.result, wait: (confirmations?: number): Promise => { const provider = new JsonRpcProvider(RPC_PROVIDER_URLS[chainId]); + // Note: maxDuration can be defined per chainId + const maxDuration = this.UserOpReceiptMaxDurationIntervals[chainId] || 30000; // default 30 seconds + let totalDuration = 0; + return new Promise((resolve, reject) => { - const intervalId = setInterval(async () => { - try { - const userOpResponse = await this.getUserOpReceipt(sendUserOperationResponse.result); - if (userOpResponse && userOpResponse.receipt && userOpResponse.receipt.blockNumber) { - if (confirmations) { - const latestBlock = await provider.getBlockNumber(); - const confirmedBlocks = latestBlock - userOpResponse.receipt.blockNumber; - if (confirmations >= confirmedBlocks) { + if (this.UserOpReceiptIntervals && chainId in this.UserOpReceiptIntervals) { + const intervalValue = this.UserOpReceiptIntervals[chainId]; + if (intervalValue !== undefined) { + const intervalId = setInterval(async () => { + try { + const userOpResponse = await this.getUserOpReceipt(sendUserOperationResponse.result); + if (userOpResponse && userOpResponse.receipt && userOpResponse.receipt.blockNumber) { + if (confirmations) { + const latestBlock = await provider.getBlockNumber(); + const confirmedBlocks = latestBlock - userOpResponse.receipt.blockNumber; + if (confirmations >= confirmedBlocks) { + clearInterval(intervalId); + resolve(userOpResponse); + } + } clearInterval(intervalId); resolve(userOpResponse); } + } catch (error) { + clearInterval(intervalId); + reject(error); } - clearInterval(intervalId); - resolve(userOpResponse); - } - } catch (error) { - clearInterval(intervalId); - reject(error); + + totalDuration += intervalValue; + if (totalDuration >= maxDuration) { + clearInterval(intervalId); + reject(new Error("Exceeded maximum duration")); + } + }, intervalValue); + } else { + reject(new Error("Invalid interval value")); } - }, this.UserOpReceiptIntervals[chainId]); + } else { + reject(new Error("Interval not defined for chainId")); + } }); }, waitForTxHash: (): Promise => { + const maxDuration = this.UserOpWaitForTxHashMaxDurationIntervals[chainId] || 20000; // default 20 seconds + let totalDuration = 0; + return new Promise((resolve, reject) => { - const intervalId = setInterval(async () => { - try { - const userOpStatus = await this.getUserOpStatus(sendUserOperationResponse.result); - if (userOpStatus && userOpStatus.state && (userOpStatus.transactionHash || userOpStatus.state === "SUBMITTED")) { + const intervalId = setInterval(() => { + if (this.UserOpWaitForTxHashIntervals && chainId in this.UserOpWaitForTxHashIntervals) { + const intervalValue = this.UserOpWaitForTxHashIntervals[chainId]; + if (intervalValue !== undefined) { + this.getUserOpStatus(sendUserOperationResponse.result) + .then((userOpStatus) => { + if (userOpStatus && userOpStatus.state && userOpStatus.transactionHash) { + clearInterval(intervalId); + resolve(userOpStatus); + } + }) + .catch((error) => { + clearInterval(intervalId); + reject(error); + }); + + totalDuration += intervalValue; + if (totalDuration >= maxDuration) { + clearInterval(intervalId); + reject(new Error("Exceeded maximum duration")); + } + } else { clearInterval(intervalId); - resolve(userOpStatus); + reject(new Error("Invalid interval value")); } - } catch (error) { + } else { clearInterval(intervalId); - reject(error); + reject(new Error("Interval not defined for chainId")); } - }, this.UserOpReceiptIntervals[chainId]); // Review: If we should use different intervals here + }, this.UserOpWaitForTxHashIntervals[chainId]); }); }, }; diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index 13f89d7b3..f8a850475 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -26,3 +26,82 @@ export const UserOpReceiptIntervals: { [key in ChainId]?: number } = { [ChainId.OPBNB_MAINNET]: 5000, [ChainId.OPBNB_TESTNET]: 5000, }; + +// Note: Reduced by 1/10th.. can reduce more +export const UserOpWaitForTxHashIntervals: { [key in ChainId]?: number } = { + [ChainId.MAINNET]: 1000, + [ChainId.GOERLI]: 500, + [ChainId.POLYGON_MUMBAI]: 500, + [ChainId.POLYGON_MAINNET]: 500, + [ChainId.BSC_TESTNET]: 500, + [ChainId.BSC_MAINNET]: 500, + [ChainId.POLYGON_ZKEVM_TESTNET]: 500, + [ChainId.POLYGON_ZKEVM_MAINNET]: 500, + [ChainId.ARBITRUM_GOERLI_TESTNET]: 500, + [ChainId.ARBITRUM_ONE_MAINNET]: 500, + [ChainId.ARBITRUM_NOVA_MAINNET]: 500, + [ChainId.OPTIMISM_MAINNET]: 500, + [ChainId.OPTIMISM_GOERLI_TESTNET]: 500, + [ChainId.AVALANCHE_MAINNET]: 500, + [ChainId.AVALANCHE_TESTNET]: 500, + [ChainId.MOONBEAM_MAINNET]: 500, + [ChainId.BASE_GOERLI_TESTNET]: 500, + [ChainId.BASE_MAINNET]: 500, + [ChainId.LINEA_TESTNET]: 500, + [ChainId.MANTLE_MAINNET]: 500, + [ChainId.MANTLE_TESTNET]: 500, + [ChainId.OPBNB_MAINNET]: 500, + [ChainId.OPBNB_TESTNET]: 500, +}; + +export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = { + [ChainId.MAINNET]: 30000, + [ChainId.GOERLI]: 30000, + [ChainId.POLYGON_MUMBAI]: 30000, + [ChainId.POLYGON_MAINNET]: 30000, + [ChainId.BSC_TESTNET]: 30000, + [ChainId.BSC_MAINNET]: 30000, + [ChainId.POLYGON_ZKEVM_TESTNET]: 30000, + [ChainId.POLYGON_ZKEVM_MAINNET]: 30000, + [ChainId.ARBITRUM_GOERLI_TESTNET]: 30000, + [ChainId.ARBITRUM_ONE_MAINNET]: 30000, + [ChainId.ARBITRUM_NOVA_MAINNET]: 30000, + [ChainId.OPTIMISM_MAINNET]: 30000, + [ChainId.OPTIMISM_GOERLI_TESTNET]: 30000, + [ChainId.AVALANCHE_MAINNET]: 30000, + [ChainId.AVALANCHE_TESTNET]: 30000, + [ChainId.MOONBEAM_MAINNET]: 30000, + [ChainId.BASE_GOERLI_TESTNET]: 30000, + [ChainId.BASE_MAINNET]: 30000, + [ChainId.LINEA_TESTNET]: 30000, + [ChainId.MANTLE_MAINNET]: 30000, + [ChainId.MANTLE_TESTNET]: 30000, + [ChainId.OPBNB_MAINNET]: 30000, + [ChainId.OPBNB_TESTNET]: 30000, +}; + +export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: number } = { + [ChainId.MAINNET]: 20000, + [ChainId.GOERLI]: 20000, + [ChainId.POLYGON_MUMBAI]: 20000, + [ChainId.POLYGON_MAINNET]: 20000, + [ChainId.BSC_TESTNET]: 20000, + [ChainId.BSC_MAINNET]: 20000, + [ChainId.POLYGON_ZKEVM_TESTNET]: 20000, + [ChainId.POLYGON_ZKEVM_MAINNET]: 20000, + [ChainId.ARBITRUM_GOERLI_TESTNET]: 20000, + [ChainId.ARBITRUM_ONE_MAINNET]: 20000, + [ChainId.ARBITRUM_NOVA_MAINNET]: 20000, + [ChainId.OPTIMISM_MAINNET]: 20000, + [ChainId.OPTIMISM_GOERLI_TESTNET]: 20000, + [ChainId.AVALANCHE_MAINNET]: 20000, + [ChainId.AVALANCHE_TESTNET]: 20000, + [ChainId.MOONBEAM_MAINNET]: 20000, + [ChainId.BASE_GOERLI_TESTNET]: 20000, + [ChainId.BASE_MAINNET]: 20000, + [ChainId.LINEA_TESTNET]: 20000, + [ChainId.MANTLE_MAINNET]: 20000, + [ChainId.MANTLE_TESTNET]: 20000, + [ChainId.OPBNB_MAINNET]: 20000, + [ChainId.OPBNB_TESTNET]: 20000, +}; diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index f53a28295..c1af046ed 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -7,6 +7,9 @@ export type Bundlerconfig = { chainId: ChainId; // eslint-disable-next-line no-unused-vars userOpReceiptIntervals?: { [key in ChainId]?: number }; + userOpWaitForTxHashIntervals?: { [key in ChainId]?: number }; + userOpReceiptMaxDurationIntervals?: { [key in ChainId]?: number }; + userOpWaitForTxHashMaxDurationIntervals?: { [key in ChainId]?: number }; }; export type UserOpReceipt = { @@ -62,7 +65,8 @@ export type SendUserOpResponse = { export type UserOpResponse = { userOpHash: string; wait(_confirmations?: number): Promise; - waitForTxHash?(): Promise; + // Review: waitForTxHash(): vs waitForTxHash?(): + waitForTxHash(): Promise; }; // Converted to JsonRpcResponse with strict type From be827327fafa858b1551ade0c8389293034cacbb Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Fri, 13 Oct 2023 01:27:01 -0400 Subject: [PATCH 0906/1247] feat: accounts update --- packages/account/package.json | 4 +- packages/account/src/account.ts | 701 ++++++++++++++++++++++++++++ packages/account/src/utils/Types.ts | 7 +- 3 files changed, 708 insertions(+), 4 deletions(-) create mode 100644 packages/account/src/account.ts diff --git a/packages/account/package.json b/packages/account/package.json index 7d89691ec..b581b9d76 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -39,6 +39,7 @@ "dependencies": { "@account-abstraction/contracts": "^0.6.0", "@account-abstraction/utils": "^0.4.0", + "@alchemy/aa-core": "^0.1.0", "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0", "@biconomy/bundler": "^3.1.0", "@biconomy/common": "^3.1.0", @@ -50,6 +51,7 @@ "@ethersproject/providers": "^5.7.2", "ethers": "^5.7.0", "loglevel": "^1.8.1", - "lru-cache": "^10.0.1" + "lru-cache": "^10.0.1", + "viem": "^1.16.3" } } diff --git a/packages/account/src/account.ts b/packages/account/src/account.ts new file mode 100644 index 000000000..9331a20da --- /dev/null +++ b/packages/account/src/account.ts @@ -0,0 +1,701 @@ +import { JsonRpcProvider, Provider } from "@ethersproject/providers"; +import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; +import { defaultAbiCoder } from "ethers/lib/utils"; +import { BaseSmartContractAccount, getChain } from "@alchemy/aa-core"; +import { Bytes, hexConcat } from "ethers/lib/utils"; +import { Hex, isHex, keccak256, encodePacked, toHex, getCreate2Address, concat, encodeAbiParameters, parseAbiParameters } from "viem"; +import { + Logger, + SmartAccount_v200, + SmartAccountFactory_v200, + SmartAccount_v200__factory, + SmartAccountFactory_v200__factory, + RPC_PROVIDER_URLS, + packUserOp, + NODE_CLIENT_URL, +} from "@biconomy/common"; +import { + BiconomyTokenPaymasterRequest, + BiconomySmartAccountV2Config, + CounterFactualAddressParam, + BuildUserOpOptions, + Overrides, +} from "./utils/Types"; +import { + BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, + DEFAULT_BICONOMY_FACTORY_ADDRESS, + DEFAULT_FALLBACK_HANDLER_ADDRESS, + PROXY_CREATION_CODE, +} from "./utils/Constants"; +import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; +import { UserOperation, Transaction } from "@biconomy/core-types"; +import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; +import { IBundler, UserOpResponse } from "@biconomy/bundler"; +import NodeClient from "@biconomy/node-client"; +import INodeClient from "@biconomy/node-client"; + +type UserOperationKey = keyof UserOperation; + +export class BiconomySmartAccountV2 extends BaseSmartContractAccount { + private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; + + private index: number; + + private nodeClient: INodeClient; + + private provider: Provider; + + private paymaster?: BiconomyPaymaster; + + private bundler?: IBundler; + + private accountContract?: SmartAccount_v200; + + private factory?: SmartAccountFactory_v200; + + private defaultFallbackHandlerAddress: Hex; + + private implementationAddress: Hex; + + // Validation module responsible for account deployment initCode. This acts as a default authorization module. + defaultValidationModule: BaseValidationModule; + + // Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature. + activeValidationModule: BaseValidationModule; + + private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) { + super({ + ...biconomySmartAccountConfig, + chain: getChain(biconomySmartAccountConfig.chainId), + rpcClient: biconomySmartAccountConfig.rpcUrl || (RPC_PROVIDER_URLS[biconomySmartAccountConfig.chainId] as string), + entryPointAddress: biconomySmartAccountConfig.entryPointAddress as Hex, + accountAddress: biconomySmartAccountConfig.accountAddress as Hex, + factoryAddress: biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS, + }); + this.index = biconomySmartAccountConfig.index ?? 0; + this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; + this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? this.defaultValidationModule; + this.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex); + const defaultFallbackHandlerAddress = + this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_FALLBACK_HANDLER_ADDRESS : biconomySmartAccountConfig.defaultFallbackHandler; + if (!defaultFallbackHandlerAddress) { + throw new Error("Default Fallback Handler address is not provided"); + } + this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; + + // TODO: use rpcProvider generated in base class? + const { rpcUrl, nodeClientUrl } = biconomySmartAccountConfig; + if (rpcUrl) { + this.provider = new JsonRpcProvider(rpcUrl); + } else { + this.provider = new JsonRpcProvider(RPC_PROVIDER_URLS[biconomySmartAccountConfig.chainId]); + } + + this.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); + } + + public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { + const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); + // Can do async init stuff here + return instance; + } + + // Calls the getCounterFactualAddress + async getAddress(params?: CounterFactualAddressParam): Promise { + if (this.accountAddress == null) { + // means it needs deployment + this.accountAddress = await this.getCounterFactualAddress(params); + } + return this.accountAddress; + } + + // Calls the getCounterFactualAddress + async getAccountAddress(params?: CounterFactualAddressParam): Promise { + if (this.accountAddress == null) { + // means it needs deployment + this.accountAddress = await this.getCounterFactualAddress(params); + } + return this.accountAddress; + } + + /** + * Return the account's address. This value is valid even before deploying the contract. + */ + async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise { + if (this.factory == null) { + if (isHex(this.factoryAddress)) { + this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); + } else { + throw new Error("no factory to get initCode"); + } + } + + const validationModule = params?.validationModule ?? this.defaultValidationModule; + const index = params?.index ?? this.index; + + try { + const initCalldata = SmartAccount_v200__factory.createInterface().encodeFunctionData("init", [ + this.defaultFallbackHandlerAddress, + validationModule.getAddress(), + await validationModule.getInitData(), + ]) as Hex; + + const proxyCreationCodeHash = keccak256(encodePacked(["bytes", "uint256"], [PROXY_CREATION_CODE, BigInt(this.implementationAddress)])); + + const salt = keccak256(encodePacked(["bytes32", "uint256"], [keccak256(initCalldata), BigInt(index)])); + + const counterFactualAddress = getCreate2Address({ + from: this.factory.address as Hex, + salt: salt, + bytecodeHash: proxyCreationCodeHash, + }); + + return counterFactualAddress; + } catch (e) { + throw new Error(`Failed to get counterfactual address, ${e}`); + } + } + + async _getAccountContract(): Promise { + if (this.accountContract == null) { + this.accountContract = SmartAccount_v200__factory.connect(await this.getAccountAddress(), this.provider); + } + return this.accountContract; + } + + isActiveValidationModuleDefined(): boolean { + if (!this.activeValidationModule) throw new Error("Must provide an instance of active validation module."); + return true; + } + + isDefaultValidationModuleDefined(): boolean { + if (!this.defaultValidationModule) throw new Error("Must provide an instance of default validation module."); + return true; + } + + setActiveValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { + if (validationModule instanceof BaseValidationModule) { + this.activeValidationModule = validationModule; + } + return this; + } + + setDefaultValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { + if (validationModule instanceof BaseValidationModule) { + this.defaultValidationModule = validationModule; + } + return this; + } + + /** + * Return the value to put into the "initCode" field, if the account is not yet deployed. + * This value holds the "factory" address, followed by this account's information + */ + async getAccountInitCode(): Promise { + if (this.factory == null) { + if (isHex(this.factoryAddress)) { + this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); + } else { + throw new Error("no factory to get initCode"); + } + } + + this.isDefaultValidationModuleDefined(); + + return concat([ + this.factory.address as Hex, + this.factory.interface.encodeFunctionData("deployCounterFactualAccount", [ + this.defaultValidationModule.getAddress(), + await this.defaultValidationModule.getInitData(), + this.index, + ]) as Hex, + ]); + } + + /** + * + * @param to { target } address of transaction + * @param value represents amount of native tokens + * @param data represent data associated with transaction + * @returns encoded data for execute function + */ + async encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise { + const accountContract = await this._getAccountContract(); + return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; + } + + /** + * + * @param to { target } array of addresses in transaction + * @param value represents array of amount of native tokens associated with each transaction + * @param data represent array of data associated with each transaction + * @returns encoded data for executeBatch function + */ + async encodeExecuteBatch(to: Array, value: Array, data: Array): Promise { + const accountContract = await this._getAccountContract(); + return accountContract.interface.encodeFunctionData("executeBatch_y6U", [to, value, data]) as Hex; + } + + // dummy signature depends on the validation module supplied. + async getDummySignatures(params?: ModuleInfo): Promise { + this.isActiveValidationModuleDefined(); + return (await this.activeValidationModule.getDummySignature(params)) as Hex; + } + + // TODO: review this + getDummySignature(): Hex { + throw new Error("Method not implemented! Call getDummySignatures instead."); + } + + // Might use provided paymaster instance to get dummy data (from pm service) + getDummyPaymasterData(): string { + return "0x"; + } + + validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { + for (const field of requiredFields) { + if (!userOp[field]) { + throw new Error(`${String(field)} is missing in the UserOp`); + } + } + return true; + } + + async signUserOp(userOp: Partial, params?: SendUserOpParams): Promise { + this.isActiveValidationModuleDefined(); + const requiredFields: UserOperationKey[] = [ + "sender", + "nonce", + "initCode", + "callData", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "paymasterAndData", + ]; + this.validateUserOp(userOp, requiredFields); + const userOpHash = await this.getUserOpHash(userOp); + + const moduleSig = (await this.activeValidationModule.signUserOpHash(userOpHash, params)) as Hex; + + // Note: If the account is undeployed, use ERC-6492 + // Review: Should only be needed for signMessage + // if (!(await this.isAccountDeployed(await this.getAccountAddress()))) { + // const coder = new ethers.utils.AbiCoder(); + // const populatedTransaction = await this.factory?.populateTransaction.deployCounterFactualAccount( + // await this.defaultValidationModule.getAddress(), + // await this.defaultValidationModule.getInitData(), + // this.index, + // ); + // moduleSig = + // coder.encode(["address", "bytes", "bytes"], [this.factoryAddress, populatedTransaction?.data, moduleSig]) + + // "6492649264926492649264926492649264926492649264926492649264926492"; // magic suffix + // userOp.signature = moduleSig; + // return userOp as UserOperation; + // } + + const signatureWithModuleAddress = encodeAbiParameters(parseAbiParameters("bytes, address"), [ + moduleSig, + this.activeValidationModule.getAddress() as Hex, + ]); + + userOp.signature = signatureWithModuleAddress; + return userOp as UserOperation; + } + + getSignatureWithModuleAddress(moduleSignature: Hex, moduleAddress?: Hex): Hex { + const moduleAddressToUse = moduleAddress ?? (this.activeValidationModule.getAddress() as Hex); + return encodeAbiParameters(parseAbiParameters("bytes, address"), [moduleSignature, moduleAddressToUse]); + } + + /** + * + * @param userOp + * @param params + * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. + * @returns Promise + */ + async sendUserOp(userOp: Partial, params?: ModuleInfo): Promise { + Logger.log("userOp received in base account ", userOp); + delete userOp.signature; + const userOperation = await this.signUserOp(userOp, params); + const bundlerResponse = await this.sendSignedUserOp(userOperation); + return bundlerResponse; + } + + /** + * + * @param userOp + * @description This function call will take 'signedUserOp' as input and send it to the bundler + * @returns + */ + async sendSignedUserOp(userOp: UserOperation): Promise { + const requiredFields: UserOperationKey[] = [ + "sender", + "nonce", + "initCode", + "callData", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "paymasterAndData", + "signature", + ]; + this.validateUserOp(userOp, requiredFields); + Logger.log("userOp validated"); + if (!this.bundler) throw new Error("Bundler is not provided"); + Logger.log("userOp being sent to the bundler", userOp); + const bundlerResponse = await this.bundler.sendUserOp(userOp); + return bundlerResponse; + } + + async getUserOpHash(userOp: Partial): Promise { + const userOpHash = keccak256(packUserOp(userOp, true)); + const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, this.entryPoint.address, this.chainId]); + return keccak256(enc); + } + + async estimateCreationGas(initCode?: string): Promise { + if (initCode == null || initCode === "0x") return 0; + const deployerAddress = initCode.substring(0, 42); + const deployerCallData = "0x" + initCode.substring(42); + return this.provider.estimateGas({ + to: deployerAddress, + data: deployerCallData, + }); + } + + async calculateUserOpGasValues(userOp: Partial): Promise> { + if (!this.provider) throw new Error("Provider is not present for making rpc calls"); + const feeData = await this.provider.getFeeData(); + userOp.maxFeePerGas = userOp.maxFeePerGas ?? feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); + userOp.maxPriorityFeePerGas = + userOp.maxPriorityFeePerGas ?? feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); + if (userOp.initCode) userOp.verificationGasLimit = userOp.verificationGasLimit ?? (await this.getVerificationGasLimit(userOp.initCode)); + userOp.callGasLimit = + userOp.callGasLimit ?? + (await this.provider.estimateGas({ + from: this.entryPointAddress, + to: userOp.sender, + data: userOp.callData, + })); + userOp.preVerificationGas = userOp.preVerificationGas ?? (await this.getPreVerificationGas(userOp)); + return userOp; + } + + async estimateUserOpGas( + userOp: Partial, + overrides?: Overrides, + skipBundlerGasEstimation?: boolean, + ): Promise> { + const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; + this.validateUserOp(userOp, requiredFields); + + let finalUserOp = userOp; + const skipBundlerCall = skipBundlerGasEstimation ?? false; + // Override gas values in userOp if provided in overrides params + if (overrides) { + userOp = { ...userOp, ...overrides }; + } + + Logger.log("userOp in estimation", userOp); + + if (!this.bundler || skipBundlerCall) { + if (!this.provider) throw new Error("Provider is not present for making rpc calls"); + // if no bundler url is provided run offchain logic to assign following values of UserOp + // maxFeePerGas, maxPriorityFeePerGas, verificationGasLimit, callGasLimit, preVerificationGas + finalUserOp = await this.calculateUserOpGasValues(userOp); + } else { + delete userOp.maxFeePerGas; + delete userOp.maxPriorityFeePerGas; + // Making call to bundler to get gas estimations for userOp + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = + await this.bundler.estimateUserOpGas(userOp); + // if neither user sent gas fee nor the bundler, estimate gas from provider + if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { + const feeData = await this.provider.getFeeData(); + finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); + finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); + } else { + finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; + finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; + } + finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + } + return finalUserOp; + } + + async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { + // Review: may not need at all + // this.isInitialized() + + // TODO: validate to, value and data fields + // TODO: validate overrides if supplied + const to = transactions.map((element: Transaction) => element.to); + const data = transactions.map((element: Transaction) => element.data ?? "0x"); + const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); + + if (transactions.length === 0) { + throw new Error("Transactions array cannot be empty"); + } + + let callData = ""; + if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { + callData = await this.encodeExecuteBatch(to, value, data); + } else { + // transactions.length must be 1 + callData = await this.encodeExecute(to[0], value[0], data[0]); + } + + let nonce = BigNumber.from(0); + try { + if (buildUseropDto?.nonceOptions?.nonceOverride) { + nonce = BigNumber.from(buildUseropDto?.nonceOptions?.nonceOverride); + } else { + const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0; + // TODO: check if this is correct + nonce = BigNumber.from(await this.getNonce()).add(_nonceSpace); + } + } catch (error) { + // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account + } + + let userOp: Partial = { + sender: this.accountAddress, + nonce, + initCode: await this.getInitCode(), + callData: callData, + }; + + // for this Smart Account current validation module dummy signature will be used to estimate gas + userOp.signature = await this.getDummySignatures(buildUseropDto?.params); + + userOp = await this.estimateUserOpGas(userOp, buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation); + Logger.log("UserOp after estimation ", userOp); + + // Do not populate paymasterAndData as part of buildUserOp as it may not have all necessary details + userOp.paymasterAndData = "0x"; // await this.getPaymasterAndData(userOp) + + return userOp; + } + + private validateUserOpAndPaymasterRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { + if (!userOp.callData) { + throw new Error("UserOp callData cannot be undefined"); + } + + const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress; + Logger.log("Requested fee token is ", feeTokenAddress); + + if (!feeTokenAddress || feeTokenAddress === ethers.constants.AddressZero) { + throw new Error("Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest"); + } + + const spender = tokenPaymasterRequest?.spender; + Logger.log("Spender address is ", spender); + + if (!spender || spender === ethers.constants.AddressZero) { + throw new Error("Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest"); + } + } + + /** + * + * @param userOp partial user operation without signature and paymasterAndData + * @param tokenPaymasterRequest This dto provides information about fee quote. Fee quote is received from earlier request getFeeQuotesOrData() to the Biconomy paymaster. + * maxFee and token decimals from the quote, along with the spender is required to append approval transaction. + * @notice This method should be called when gas is paid in ERC20 token using TokenPaymaster + * @description Optional method to update the userOp.calldata with batched transaction which approves the paymaster spender with necessary amount(if required) + * @returns updated userOp with new callData, callGasLimit + */ + async buildTokenPaymasterUserOp( + userOp: Partial, + tokenPaymasterRequest: BiconomyTokenPaymasterRequest, + ): Promise> { + this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest); + try { + let batchTo: Array = []; + let batchValue: Array = []; + let batchData: Array = []; + + let newCallData = userOp.callData; + Logger.log("Received information about fee token address and quote ", tokenPaymasterRequest); + + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { + // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details + + // Review: might request this form of an array of Transaction + const approvalRequest: Transaction = await (this.paymaster as IHybridPaymaster).buildTokenApprovalTransaction( + tokenPaymasterRequest, + this.provider, + ); + Logger.log("ApprovalRequest is for erc20 token ", approvalRequest.to); + + if (approvalRequest.data === "0x" || approvalRequest.to === ethers.constants.AddressZero) { + return userOp; + } + + if (!userOp.callData) { + throw new Error("UserOp callData cannot be undefined"); + } + + const account = await this._getAccountContract(); + + const decodedSmartAccountData = account.interface.parseTransaction({ + data: userOp.callData.toString(), + }); + if (!decodedSmartAccountData) { + throw new Error("Could not parse userOp call data for this smart account"); + } + + const smartAccountExecFunctionName = decodedSmartAccountData.name; + + Logger.log(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); + if (smartAccountExecFunctionName === "execute" || smartAccountExecFunctionName === "execute_ncC") { + const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; + const toOriginal = methodArgsSmartWalletExecuteCall[0]; + const valueOriginal = methodArgsSmartWalletExecuteCall[1]; + const dataOriginal = methodArgsSmartWalletExecuteCall[2]; + + batchTo.push(toOriginal); + batchValue.push(valueOriginal); + batchData.push(dataOriginal); + } else if (smartAccountExecFunctionName === "executeBatch" || smartAccountExecFunctionName === "executeBatch_y6U") { + const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; + batchTo = methodArgsSmartWalletExecuteCall[0]; + batchValue = methodArgsSmartWalletExecuteCall[1]; + batchData = methodArgsSmartWalletExecuteCall[2]; + } + + if (approvalRequest.to && approvalRequest.data && approvalRequest.value) { + batchTo = [approvalRequest.to, ...batchTo]; + batchValue = [approvalRequest.value, ...batchValue]; + batchData = [approvalRequest.data, ...batchData]; + + newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData); + } + let finalUserOp: Partial = { + ...userOp, + callData: newCallData, + }; + + // Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) + try { + finalUserOp = await this.estimateUserOpGas(finalUserOp); + const callGasLimit = ethers.BigNumber.from(finalUserOp.callGasLimit); + if (finalUserOp.callGasLimit && callGasLimit.lt(ethers.BigNumber.from("21000"))) { + return { + ...userOp, + callData: newCallData, + }; + } + Logger.log("UserOp after estimation ", finalUserOp); + } catch (error) { + Logger.error("Failed to estimate gas for userOp with updated callData ", error); + Logger.log("Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); + } + return finalUserOp; + } + } catch (error) { + Logger.log("Failed to update userOp. Sending back original op"); + Logger.error("Failed to update callData with error", error); + return userOp; + } + return userOp; + } + + async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { + this.isActiveValidationModuleDefined(); + const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); + + const signatureWithModuleAddress = ethers.utils.defaultAbiCoder.encode( + ["bytes", "address"], + [moduleSig, this.activeValidationModule.getAddress()], + ); + + return signatureWithModuleAddress; + } + + async signMessage(message: Bytes | string): Promise { + this.isActiveValidationModuleDefined(); + const dataHash = ethers.utils.arrayify(ethers.utils.hashMessage(message)); + let signature = await this.activeValidationModule.signMessage(dataHash); + + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); + } + if (signature.slice(0, 2) !== "0x") { + signature = "0x" + signature; + } + return signature as Hex; + } + + async enableModule(moduleAddress: string): Promise { + const tx: Transaction = await this.getEnableModuleData(moduleAddress); + const partialUserOp = await this.buildUserOp([tx]); + return this.sendUserOp(partialUserOp); + } + + async getEnableModuleData(moduleAddress: string): Promise { + const accountContract = await this._getAccountContract(); + const populatedTransaction = await accountContract.populateTransaction.enableModule(moduleAddress); + const tx: Transaction = { + to: await this.getAddress(), + value: "0", + data: populatedTransaction.data as string, + }; + return tx; + } + + async getSetupAndEnableModuleData(moduleAddress: string, moduleSetupData: string): Promise { + const accountContract = await this._getAccountContract(); + // TODO: using encodeFunctionData + const populatedTransaction = await accountContract.populateTransaction.setupAndEnableModule(moduleAddress, moduleSetupData); + const tx: Transaction = { + to: await this.getAddress(), + value: "0", + data: populatedTransaction.data as string, + }; + return tx; + } + + async disableModule(preModule: string, moduleAddress: string): Promise { + const tx: Transaction = await this.getDisableModuleData(preModule, moduleAddress); + const partialUserOp = await this.buildUserOp([tx]); + return this.sendUserOp(partialUserOp); + } + + async getDisableModuleData(prevModule: string, moduleAddress: string): Promise { + const accountContract = await this._getAccountContract(); + // TODO: using encodeFunctionData + const populatedTransaction = await accountContract.populateTransaction.disableModule(prevModule, moduleAddress); + const tx: Transaction = { + to: await this.getAddress(), + value: "0", + data: populatedTransaction.data as string, + }; + return tx; + } + + async isModuleEnabled(moduleName: string): Promise { + const accountContract = await this._getAccountContract(); + return accountContract.isModuleEnabled(moduleName); + } + + // Review + async getAllModules(pageSize?: number): Promise> { + pageSize = pageSize ?? 100; + const accountContract = await this._getAccountContract(); + const result: Array> = await accountContract.getModulesPaginated(this.SENTINEL_MODULE, pageSize); + const modules: Array = result[0] as Array; + return modules; + } +} diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 250d69c47..add0f67a7 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -6,6 +6,7 @@ import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconom import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Provider } from "@ethersproject/providers"; import { GasOverheads } from "./Preverificaiton"; +import { Hex } from "viem"; export type EntryPointAddresses = { [address: string]: string; @@ -65,9 +66,9 @@ export type BiconomySmartAccountConfig = { }; export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { - factoryAddress?: string; - implementationAddress?: string; - defaultFallbackHandler?: string; + factoryAddress?: Hex; + implementationAddress?: Hex; + defaultFallbackHandler?: Hex; rpcUrl?: string; // as good as Provider nodeClientUrl?: string; // very specific to Biconomy defaultValidationModule: BaseValidationModule; From 83aec3c6a62679fb8dcdf1030d1bfc593ad32bcf Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 16 Oct 2023 01:15:12 -0400 Subject: [PATCH 0907/1247] throw error for invalid funding id --- packages/paymaster/src/BiconomyPaymaster.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 3413f1100..1734e23e6 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -342,9 +342,8 @@ export class BiconomyPaymaster implements IHybridPaymaster Date: Mon, 16 Oct 2023 15:17:56 +0400 Subject: [PATCH 0908/1247] init update readme and keywords in packages --- README.md | 41 +++++++++++++++++++++++++++-------- package.json | 3 +-- packages/account/Readme.md | 9 ++++++-- packages/modules/package.json | 3 +-- 4 files changed, 41 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index cafdc1eb2..cb9f12e42 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,14 @@ ## Introduction -The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. This SDK is designed for seamless user experiences and offers non-custodial solutions for **ERC6900 compliant** user onboarding, transaction management, and gas abstraction. +The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. This SDK is designed for seamless user experiences and offers non-custodial solutions for user onboarding, transaction management, and gas abstraction.

Biconomy SDK Diagram

## 🌟 Features - **ERC4337 Account Abstraction**: Simplify user operations and gas payments. -- **Smart Accounts**: Enhance user experience with ERC6900 compliant accounts. +- **Smart Accounts**: Enhance user experience with modular smart accounts. - **Paymaster Service**: Enable third-party gas sponsorship. - **Bundler Infrastructure**: Ensure efficient and reliable transaction bundling. - **Backend Node**: Manage chain configurations and gas estimations. @@ -25,10 +25,29 @@ The Biconomy SDK is your all-in-one toolkit for building decentralized applicati Unlock the full potential of **ERC4337 Account Abstraction** with methods that simplify the creation and dispatch of UserOperations, streamlining dApp development and management. ```javascript -const biconomyAccount = new BiconomySmartAccount(biconomySmartAccountConfig); -const biconomySmartAccount = await biconomyAccount.init(); -console.log("owner: ", biconomySmartAccount.owner); -console.log("address: ", biconomySmartAccount.address); + +import { ECDSAOwnershipValidationModule, DEFAULT_ECDSA_OWNERSHIP_MODULE } from "@biconomy/modules"; +import { IBundler, Bundler } from '@biconomy/bundler' +import { DEFAULT_ENTRYPOINT_ADDRESS } from "@biconomy/account" +import { providers } from 'ethers' +import { ChainId } from "@biconomy/core-types" + + +const module = await ECDSAOwnershipValidationModule.create({ + signer: wallet, + moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE + }) + + let biconomySmartAccount = await BiconomySmartAccountV2.create({ + chainId: ChainId.POLYGON_MUMBAI, + bundler: bundler, + paymaster: paymaster, + entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + defaultValidationModule: module, + activeValidationModule: module +}) + +console.log("address: ", await biconomySmartAccount.getAccountAddress()); ``` ### Bundler @@ -36,11 +55,15 @@ console.log("address: ", biconomySmartAccount.address); Leverage standardized bundler infrastructure for efficient operation of account abstraction across EVM networks. ```javascript + +import { IBundler, Bundler } from '@biconomy/bundler' + + const bundler: IBundler = new Bundler({ - bundlerUrl: '', // From Biconomy Dashboard + bundlerUrl: 'https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44', chainId: ChainId.POLYGON_MUMBAI, entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, -}); + }) ``` ### Paymaster @@ -55,7 +78,7 @@ const paymaster: IPaymaster = new BiconomyPaymaster({ ## 🛠️ Quickstart -For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). +For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick explore here https://docs.biconomy.io/docs/category/quick-explore ## 📚 Resources diff --git a/package.json b/package.json index 6b6de2028..34230c01b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "biconomy-sdk", "version": "1.0.0", - "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337, ERC-6900, and cross-chain functionalities.", + "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ "biconomy", "sdk", @@ -10,7 +10,6 @@ "account abstraction", "smart accounts", "erc-4337", - "erc-6900", "crosschain", "cross-chain", "metatransactions" diff --git a/packages/account/Readme.md b/packages/account/Readme.md index 6fcd0157a..b283c50ad 100644 --- a/packages/account/Readme.md +++ b/packages/account/Readme.md @@ -16,12 +16,14 @@ yarn add @biconomy/account ### Account -Building and sending UserOperations is a key offering of any toolkit designed for ERC4337. The Biconomy account package stands as an exemplary toolkit in this regard. Meticulously crafted with developers' needs in mind, this package seamlessly integrates the essential features associated with ERC-4337. It simplifies the process of creating and sending UserOperations, thus optimizing the development and management of decentralized applications (dApps). +Integrating and deploying Smart Accounts, building and sending user operations is a key offering of any toolkit designed for ERC4337. This package seamlessly integrates the essential features associated with ERC-4337 and simplifies the development of your Dapp's account and transaction rails with added usability features. -The Biconomy account package achieves this by providing a comprehensive set of methods that enable developers to effortlessly create UserOperations. Combined with the sophisticated backend infrastructure of the Biconomy platform, it ensures efficient and reliable transmission of these operations across EVM networks. +Account package achieves this by providing a comprehensive set of methods that enable developers to effortlessly create UserOperations. Combined with the sophisticated, developer friendly and scalable infrastructure of Biconomy, it ensures efficient and reliable transmission of these operations across multiple EVM chains. ## Smart Account instance configuration +#### BiconomySmartAccount (V1 Smart Account) + | Key | Description | | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | signer | This signer will be used for signing userOps for any transactions you build. You can supply your your EOA wallet signer | @@ -78,3 +80,6 @@ const transactionDetails = await userOpResponse.wait(); console.log("transaction details below"); console.log(transactionDetails); ``` + +#### BiconomySmartAccount (V2 Smart Account aka Modular Smart Account) + diff --git a/packages/modules/package.json b/packages/modules/package.json index 6e92b6012..16e4f9f15 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -11,8 +11,7 @@ "Smart Contract Wallets", "Biconomy", "Modules", - "Plugins", - "EIP-6900" + "Plugins" ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", From 4216ccd7e021eaba5f37fa011866322bccbc2b52 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 16 Oct 2023 18:00:18 +0400 Subject: [PATCH 0909/1247] respond to PR comments --- README.md | 2 +- packages/account/Readme.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cb9f12e42..b606d98ea 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ const module = await ECDSAOwnershipValidationModule.create({ moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE }) - let biconomySmartAccount = await BiconomySmartAccountV2.create({ +const biconomySmartAccount = await BiconomySmartAccountV2.create({ chainId: ChainId.POLYGON_MUMBAI, bundler: bundler, paymaster: paymaster, diff --git a/packages/account/Readme.md b/packages/account/Readme.md index b283c50ad..fb8fc3959 100644 --- a/packages/account/Readme.md +++ b/packages/account/Readme.md @@ -18,7 +18,7 @@ yarn add @biconomy/account Integrating and deploying Smart Accounts, building and sending user operations is a key offering of any toolkit designed for ERC4337. This package seamlessly integrates the essential features associated with ERC-4337 and simplifies the development of your Dapp's account and transaction rails with added usability features. -Account package achieves this by providing a comprehensive set of methods that enable developers to effortlessly create UserOperations. Combined with the sophisticated, developer friendly and scalable infrastructure of Biconomy, it ensures efficient and reliable transmission of these operations across multiple EVM chains. +The account package achieves this by providing a comprehensive set of methods that enable developers to effortlessly create UserOperations. Combined with the sophisticated, developer friendly and scalable infrastructure of Biconomy, it ensures efficient and reliable transmission of these operations across multiple EVM chains. ## Smart Account instance configuration From 7917c67ef50a325f69c86f701cd561c8d8a4f155 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Tue, 17 Oct 2023 01:35:26 -0400 Subject: [PATCH 0910/1247] update other packages with viem types --- packages/account/src/BaseSmartAccount.ts | 459 ------------ packages/account/src/BiconomySmartAccount.ts | 467 ------------ .../account/src/BiconomySmartAccountV2.ts | 575 ++++++++------ packages/account/src/SmartAccount.ts | 298 -------- packages/account/src/account.ts | 701 ------------------ packages/account/src/index.ts | 2 - packages/account/src/utils/Constants.ts | 2 + packages/account/src/utils/Types.ts | 16 +- .../tests/SmartAccountV1.testnet.spec.ts | 72 -- .../tests/SmartAccountV2.local.spec.ts | 43 +- packages/bundler/src/utils/HelperFunction.ts | 4 +- packages/common/package.json | 3 +- packages/common/tests/ERC4337Utils.spec.ts | 45 +- packages/core-types/package.json | 1 + packages/core-types/src/Types.ts | 40 +- .../modules/src/MultichainValidationModule.ts | 2 +- packages/paymaster/src/BiconomyPaymaster.ts | 14 +- packages/paymaster/src/utils/Types.ts | 11 +- 18 files changed, 443 insertions(+), 2312 deletions(-) delete mode 100644 packages/account/src/BaseSmartAccount.ts delete mode 100644 packages/account/src/BiconomySmartAccount.ts delete mode 100644 packages/account/src/SmartAccount.ts delete mode 100644 packages/account/src/account.ts delete mode 100644 packages/account/tests/SmartAccountV1.testnet.spec.ts diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts deleted file mode 100644 index eb0974031..000000000 --- a/packages/account/src/BaseSmartAccount.ts +++ /dev/null @@ -1,459 +0,0 @@ -import { JsonRpcProvider, Provider } from "@ethersproject/providers"; -import { BigNumber, BigNumberish, BytesLike, ethers, Bytes } from "ethers"; -import { IBaseSmartAccount } from "./interfaces/IBaseSmartAccount"; -import { defaultAbiCoder, keccak256 } from "ethers/lib/utils"; -import { UserOperation, ChainId } from "@biconomy/core-types"; -import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; -import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; -import { IBundler, UserOpResponse } from "@biconomy/bundler"; -import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; -import { SponsorUserOperationDto, BiconomyPaymaster, PaymasterMode, IHybridPaymaster } from "@biconomy/paymaster"; -import { BaseSmartAccountConfig, Overrides, SendUserOpOptions, TransactionDetailsForUserOp } from "./utils/Types"; -import { GasOverheads } from "./utils/Preverificaiton"; -import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; -import { LRUCache } from "lru-cache"; - -type UserOperationKey = keyof UserOperation; - -export abstract class BaseSmartAccount implements IBaseSmartAccount { - bundler?: IBundler; // httpRpcClient - - paymaster?: IPaymaster; // paymasterAPI - - overheads?: Partial; - - entryPointAddress!: string; - - accountAddress?: string; - - // owner?: Signer // owner is not mandatory for some account implementations - index: number; - - chainId?: ChainId; - - provider: Provider; - - // entryPoint connected to "zero" address. allowed to make static calls (e.g. to getSenderAddress) - private readonly entryPoint!: EntryPoint; - - private isContractDeployedCache = new LRUCache({ - max: 500, - }); - - constructor(_smartAccountConfig: BaseSmartAccountConfig) { - this.index = _smartAccountConfig.index ?? 0; - this.overheads = _smartAccountConfig.overheads; - this.entryPointAddress = _smartAccountConfig.entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS; - this.accountAddress = _smartAccountConfig.accountAddress; - this.paymaster = _smartAccountConfig.paymaster; - this.bundler = _smartAccountConfig.bundler; - this.chainId = _smartAccountConfig.chainId; - - this.provider = _smartAccountConfig.provider ?? new JsonRpcProvider(RPC_PROVIDER_URLS[this.chainId]); - - // Create an instance of the EntryPoint contract using the provided address and provider (facory "connect" contract address) - // Then, set the transaction's sender ("from" address) to the zero address (AddressZero). (contract "connect" from address) - this.entryPoint = EntryPoint__factory.connect(this.entryPointAddress, this.provider).connect(ethers.constants.AddressZero); - } - - async init(): Promise { - if (this.entryPointAddress === DEFAULT_ENTRYPOINT_ADDRESS) return this; - if ((await this.provider.getCode(this.entryPointAddress)) === "0x") { - throw new Error(`EntryPoint not deployed at ${this.entryPointAddress} at chainId ${this.chainId}}`); - } - return this; - } - - setEntryPointAddress(entryPointAddress: string): void { - this.entryPointAddress = entryPointAddress; - } - - validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { - for (const field of requiredFields) { - if (!userOp[field]) { - throw new Error(`${String(field)} is missing in the UserOp`); - } - } - return true; - } - - isProviderDefined(): boolean { - if (!this.provider) throw new Error("Provider is undefined"); - - return true; - } - - /** - * return the value to put into the "initCode" field, if the contract is not yet deployed. - * this value holds the "factory" address, followed by this account's information - */ - abstract getAccountInitCode(): Promise; - - /** - * return current account's nonce. - */ - abstract getNonce(): Promise; - - /** - * encode the call from entryPoint through our account to the target contract. - * @param to - * @param value - * @param data - */ - abstract encodeExecute(_to: string, _value: BigNumberish, _data: BytesLike): Promise; - - /** - * encode the batch call from entryPoint through our account to the target contract. - * @param to - * @param value - * @param data - */ - abstract encodeExecuteBatch(_to: Array, _value: Array, _data: Array): Promise; - - /** - * sign a userOp's hash (userOpHash). - * @param userOpHash - */ - abstract signUserOpHash(_userOpHash: string): Promise; - - abstract signMessage(_message: Bytes | string): Promise; - - /** - * get dummy signature for userOp - */ - abstract getDummySignature(): Promise; - - /** - * Sign the filled userOp. - * @param userOp the UserOperation to sign (with signature field ignored) - */ - async signUserOp(userOp: Partial): Promise { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - ]; - this.validateUserOp(userOp, requiredFields); - const userOpHash = await this.getUserOpHash(userOp); - let signature = await this.signUserOpHash(userOpHash); - - // Some signers do not return signed data with 0x prefix. make sure the v value is 27/28 instead of 0/1 - // Also split sig and add +27 to v is v is only 0/1. then stitch it back - - // Note: Should only be applied for ECDSA k1 signatures - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); - } - if (signature.slice(0, 2) !== "0x") { - signature = "0x" + signature; - } - - userOp.signature = signature; - return userOp as UserOperation; - } - - /** - * - * @param userOp - * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. - * @returns Promise - */ - async sendUserOp(userOp: Partial): Promise { - Logger.log("userOp received in base account ", userOp); - delete userOp.signature; - const userOperation = await this.signUserOp(userOp); - const bundlerResponse = await this.sendSignedUserOp(userOperation); - return bundlerResponse; - } - - /** - * - * @param userOp - * @description This function call will take 'signedUserOp' as input and send it to the bundler - * @returns - */ - async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpOptions): Promise { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - "signature", - ]; - this.validateUserOp(userOp, requiredFields); - Logger.log("userOp validated"); - if (!this.bundler) throw new Error("Bundler is not provided"); - Logger.log("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp, params); - return bundlerResponse; - } - - async calculateUserOpGasValues(userOp: Partial): Promise> { - if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - let feeData = null; - - if ( - userOp.maxFeePerGas === undefined || - userOp.maxFeePerGas === null || - userOp.maxPriorityFeePerGas === undefined || - userOp.maxPriorityFeePerGas === null - ) { - feeData = await this.provider.getFeeData(); - } - - if (userOp.maxFeePerGas === undefined || userOp.maxFeePerGas === null) { - userOp.maxFeePerGas = feeData?.maxFeePerGas ?? feeData?.gasPrice ?? (await this.provider.getGasPrice()); - } - - if (userOp.maxPriorityFeePerGas === undefined || userOp.maxPriorityFeePerGas === null) { - userOp.maxPriorityFeePerGas = feeData?.maxPriorityFeePerGas ?? feeData?.gasPrice ?? (await this.provider.getGasPrice()); - } - if (userOp.initCode) userOp.verificationGasLimit = userOp.verificationGasLimit ?? (await this.getVerificationGasLimit(userOp.initCode)); - userOp.callGasLimit = - userOp.callGasLimit ?? - (await this.provider.estimateGas({ - from: this.entryPointAddress, - to: userOp.sender, - data: userOp.callData, - })); - userOp.preVerificationGas = userOp.preVerificationGas ?? (await this.getPreVerificationGas(userOp)); - return userOp; - } - - // TODO // Should make this a Dto - async estimateUserOpGas( - userOp: Partial, - overrides?: Overrides, - skipBundlerGasEstimation?: boolean, - paymasterServiceData?: SponsorUserOperationDto, - ): Promise> { - const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; - this.validateUserOp(userOp, requiredFields); - - let finalUserOp = userOp; - const skipBundlerCall = skipBundlerGasEstimation ?? true; - // Override gas values in userOp if provided in overrides params - if (overrides) { - userOp = { ...userOp, ...overrides }; - } - - Logger.log("userOp in estimation", userOp); - - if (skipBundlerCall) { - // Review: instead of checking mode it could be assumed or just pass gasless flag and use it - // make pmService data locally and pass the object with default values - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { - if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { - throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); - } - // Making call to paymaster to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( - this.paymaster as IHybridPaymaster - ).getPaymasterAndData(userOp, paymasterServiceData); - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; - } else { - Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); - finalUserOp = await this.calculateUserOpGasValues(userOp); - finalUserOp.paymasterAndData = "0x"; - } - } else { - if (!this.bundler) throw new Error("Bundler is not provided"); - // TODO: is this still needed to delete? - delete userOp.maxFeePerGas; - delete userOp.maxPriorityFeePerGas; - // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = - await this.bundler.estimateUserOpGas(userOp); - // if neither user sent gas fee nor the bundler, estimate gas from provider - if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { - const feeData = await this.provider.getFeeData(); - finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - } else { - finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; - finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; - } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = "0x"; - } - return finalUserOp; - } - - // Would only be used if paymaster is attached - async getPaymasterAndData(userOp: Partial): Promise { - if (this.paymaster) { - const paymasterAndDataResponse: PaymasterAndDataResponse = await this.paymaster.getPaymasterAndData(userOp); - return paymasterAndDataResponse.paymasterAndData; - } - return "0x"; - } - - async isAccountDeployed(address: string): Promise { - if (this.isContractDeployedCache.get(address)) { - return true; - } - - this.isProviderDefined(); - let isDeployed = false; - const contractCode = await this.provider.getCode(address); - if (contractCode.length > 2) { - this.isContractDeployedCache.set(address, true); - isDeployed = true; - } else { - isDeployed = false; - } - return isDeployed; - } - - /** - * calculate the account address even before it is deployed - */ - async getCounterFactualAddress(): Promise { - const initCode = this.getAccountInitCode(); - // use entryPoint to query account address (factory can provide a helper method to do the same, but - // this method attempts to be generic - try { - await this.entryPoint.callStatic.getSenderAddress(initCode); - } catch (e: any) { - if (e.errorArgs == null) { - throw e; - } - return e.errorArgs.sender; - } - throw new Error("must handle revert"); - } - - /** - * return initCode value to into the UserOp. - * (either deployment code, or empty hex if contract already deployed) - */ - async getInitCode(): Promise { - if (await this.isAccountDeployed(await this.getAccountAddress())) { - return "0x"; - } - return this.getAccountInitCode(); - } - - async getPreVerificationGas(userOp: Partial): Promise { - return calcPreVerificationGas(userOp); - } - - async getVerificationGasLimit(initCode: BytesLike): Promise { - // Verification gas should be max(initGas(wallet deployment) + validateUserOp + validatePaymasterUserOp , postOp) - - const initGas = await this.estimateCreationGas(initCode as string); - const validateUserOpGas = BigNumber.from(DefaultGasLimits.validatePaymasterUserOpGas + DefaultGasLimits.validateUserOpGas); - const postOpGas = BigNumber.from(DefaultGasLimits.postOpGas); - - let verificationGasLimit = BigNumber.from(validateUserOpGas).add(initGas); - - if (BigNumber.from(postOpGas).gt(verificationGasLimit)) { - verificationGasLimit = postOpGas; - } - return verificationGasLimit; - } - - /** - * return the account's address. - * this value is valid even before deploying the contract. - */ - async getAccountAddress(): Promise { - if (this.accountAddress == null) { - // means it needs deployment - this.accountAddress = await this.getCounterFactualAddress(); - } - return this.accountAddress; - } - - async estimateCreationGas(initCode?: string): Promise { - if (initCode == null || initCode === "0x") return 0; - const deployerAddress = initCode.substring(0, 42); - const deployerCallData = "0x" + initCode.substring(42); - return this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }); - } - - /** - * get the transaction that has this userOpHash mined, or null if not found - * @param userOpHash returned by sendUserOpToBundler (or by getUserOpHash..) - * @param timeout stop waiting after this timeout - * @param interval time to wait between polls. - * @return the transactionHash this userOp was mined, or null if not found. - */ - async getUserOpReceipt(userOpHash: string, timeout = 30000, interval = 5000): Promise { - const endtime = Date.now() + timeout; - while (Date.now() < endtime) { - const events = await this.entryPoint.queryFilter(this.entryPoint.filters.UserOperationEvent(userOpHash)); - if (events.length > 0) { - return events[0].transactionHash; - } - await new Promise((resolve) => setTimeout(resolve, interval)); - } - return null; - } - - async getUserOpHash(userOp: Partial): Promise { - const userOpHash = keccak256(packUserOp(userOp, true)); - const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, this.entryPoint.address, this.chainId]); - return keccak256(enc); - } - - /** - * ABI-encode a user operation. used for calldata cost estimation - */ - packUserOp(userOp: NotPromise): string { - return packUserOp(userOp, false); - } - - async encodeUserOpCallDataAndGasLimit(detailsForUserOp: TransactionDetailsForUserOp): Promise<{ callData: string; callGasLimit: BigNumber }> { - function parseNumber(a: any): BigNumber | null { - if (a == null || a === "") return null; - return BigNumber.from(a.toString()); - } - - const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0); - const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data); - - const callGasLimit = - parseNumber(detailsForUserOp.gasLimit) ?? - (await this.provider.estimateGas({ - from: this.entryPointAddress, - to: this.getAccountAddress(), - data: callData, - })); - - return { - callData, - callGasLimit, - }; - } - - /** - * helper method: create and sign a user operation. - * @param info transaction details for the userOp - */ - async createSignedUserOp(info: TransactionDetailsForUserOp): Promise { - Logger.log("createSignedUserOp called with info", info); - throw new Error("Not implemented. Please use buildUserOp/buildUserOperation in account implementation"); - } -} diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts deleted file mode 100644 index 40504b2b6..000000000 --- a/packages/account/src/BiconomySmartAccount.ts +++ /dev/null @@ -1,467 +0,0 @@ -import { JsonRpcProvider } from "@ethersproject/providers"; -import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; -import { SmartAccount } from "./SmartAccount"; -import { - Logger, - NODE_CLIENT_URL, - RPC_PROVIDER_URLS, - SmartAccountFactory_v100, - getEntryPointContract, - getSAFactoryContract, - getSAProxyContract, -} from "@biconomy/common"; -import { BiconomySmartAccountConfig, Overrides, BiconomyTokenPaymasterRequest, InitilizationData } from "./utils/Types"; -import { UserOperation, Transaction, SmartAccountType } from "@biconomy/core-types"; -import NodeClient from "@biconomy/node-client"; -import INodeClient from "@biconomy/node-client"; -import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { IBiconomySmartAccount } from "./interfaces/IBiconomySmartAccount"; -import { - ISmartAccount, - SupportedChainsResponse, - BalancesResponse, - BalancesDto, - UsdBalanceResponse, - SmartAccountByOwnerDto, - SmartAccountsResponse, - SCWTransactionResponse, -} from "@biconomy/node-client"; -import { ENTRYPOINT_ADDRESSES, BICONOMY_FACTORY_ADDRESSES, BICONOMY_IMPLEMENTATION_ADDRESSES, DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; -import { Signer } from "ethers"; - -export class BiconomySmartAccount extends SmartAccount implements IBiconomySmartAccount { - private factory!: SmartAccountFactory_v100; - - private nodeClient: INodeClient; - - private accountIndex!: number; - - private address!: string; - - private smartAccountInfo!: ISmartAccount; - - private _isInitialised!: boolean; - - constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountConfig) { - const { signer, rpcUrl, entryPointAddress, bundler, paymaster, chainId, nodeClientUrl } = biconomySmartAccountConfig; - - const _entryPointAddress = entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS; - super({ - bundler, - entryPointAddress: _entryPointAddress, - }); - const _rpcUrl = rpcUrl ?? RPC_PROVIDER_URLS[chainId]; - - if (!_rpcUrl) { - throw new Error( - `Chain Id ${chainId} is not supported. Please refer to the following link for supported chains list https://docs.biconomy.io/build-with-biconomy-sdk/gasless-transactions#supported-chains`, - ); - } - this.provider = new JsonRpcProvider(_rpcUrl); - this.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); - this.signer = signer; - - if (paymaster) { - this.paymaster = paymaster; - } - if (bundler) this.bundler = bundler; - } - - /** - * @description This function will initialise BiconomyAccount class state - * @returns Promise - */ - async init(initilizationData?: InitilizationData): Promise { - try { - let _accountIndex, signerAddress; - if (initilizationData) { - _accountIndex = initilizationData.accountIndex; - signerAddress = initilizationData.signerAddress; - } - - if (!_accountIndex) _accountIndex = 0; - this.isProviderDefined(); - this.isSignerDefined(); - - if (signerAddress) { - this.owner = signerAddress; - } else { - this.owner = await this.signer.getAddress(); - } - this.chainId = await this.provider.getNetwork().then((net) => net.chainId); - await this.initializeAccountAtIndex(_accountIndex); - this._isInitialised = true; - } catch (error) { - Logger.error(`Failed to call init: ${error}`); - throw error; - } - - return this; - } - - async attachSigner(_signer: Signer): Promise { - try { - this.signer = _signer; - this.owner = await this.signer.getAddress(); - } catch (error) { - throw new Error(`Failed to get signer address`); - } - } - - private isInitialized(): boolean { - if (!this._isInitialised) - throw new Error( - "BiconomySmartAccount is not initialized. Please call init() on BiconomySmartAccount instance before interacting with any other function", - ); - return true; - } - - private setProxyContractState(): void { - if (!BICONOMY_IMPLEMENTATION_ADDRESSES[this.smartAccountInfo.implementationAddress]) - throw new Error( - "Could not find attached implementation address against your smart account. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - const proxyInstanceDto = { - smartAccountType: SmartAccountType.BICONOMY, - version: BICONOMY_IMPLEMENTATION_ADDRESSES[this.smartAccountInfo.implementationAddress], - contractAddress: this.address, - provider: this.provider, - }; - this.proxy = getSAProxyContract(proxyInstanceDto); - } - - private setEntryPointContractState(): void { - const _entryPointAddress = this.smartAccountInfo.entryPointAddress; - this.setEntryPointAddress(_entryPointAddress); - if (!ENTRYPOINT_ADDRESSES[_entryPointAddress]) - throw new Error( - "Could not find attached entrypoint address against your smart account. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - const entryPointInstanceDto = { - smartAccountType: SmartAccountType.BICONOMY, - version: ENTRYPOINT_ADDRESSES[_entryPointAddress], - contractAddress: _entryPointAddress, - provider: this.provider, - }; - this.entryPoint = getEntryPointContract(entryPointInstanceDto); - } - - private setFactoryContractState(): void { - const _factoryAddress = this.smartAccountInfo.factoryAddress; - if (!BICONOMY_FACTORY_ADDRESSES[_factoryAddress]) - throw new Error( - "Could not find attached factory address against your smart account. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - const factoryInstanceDto = { - smartAccountType: SmartAccountType.BICONOMY, - version: BICONOMY_FACTORY_ADDRESSES[_factoryAddress], - contractAddress: _factoryAddress, - provider: this.provider, - }; - this.factory = getSAFactoryContract(factoryInstanceDto) as SmartAccountFactory_v100; - } - - private async setContractsState(): Promise { - this.setProxyContractState(); - this.setEntryPointContractState(); - this.setFactoryContractState(); - } - - async initializeAccountAtIndex(accountIndex: number): Promise { - this.accountIndex = accountIndex; - this.address = await this.getSmartAccountAddress(accountIndex); - await this.setContractsState(); - await this.setInitCode(this.accountIndex); - } - - async getSmartAccountAddress(accountIndex = 0): Promise { - try { - this.isSignerDefined(); - let smartAccountsList: ISmartAccount[] = ( - await this.getSmartAccountsByOwner({ - chainId: this.chainId, - owner: this.owner, - index: accountIndex, - }) - ).data; - if (!smartAccountsList) - throw new Error( - "Failed to get smart account address. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - smartAccountsList = smartAccountsList.filter((smartAccount: ISmartAccount) => { - return accountIndex === smartAccount.index; - }); - if (smartAccountsList.length === 0) - throw new Error( - "Failed to get smart account address. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - this.smartAccountInfo = smartAccountsList[0]; - return this.smartAccountInfo.smartAccountAddress; - } catch (error) { - Logger.error(`Failed to get smart account address: ${error}`); - throw error; - } - } - - private async setInitCode(accountIndex = 0): Promise { - this.initCode = ethers.utils.hexConcat([ - this.factory.address, - this.factory.interface.encodeFunctionData("deployCounterFactualAccount", [this.owner, ethers.BigNumber.from(accountIndex)]), - ]); - return this.initCode; - } - - /** - * @description an overrided function to showcase overriding example - * @returns - */ - nonce(): Promise { - this.isProxyDefined(); - return this.proxy.nonce(); - } - - /** - * - * @param to { target } address of transaction - * @param value represents amount of native tokens - * @param data represent data associated with transaction - * @returns - */ - getExecuteCallData(to: string, value: BigNumberish, data: BytesLike): string { - this.isInitialized(); - this.isProxyDefined(); - const executeCallData = this.proxy.interface.encodeFunctionData("executeCall", [to, value, data]); - return executeCallData; - } - - /** - * - * @param to { target } array of addresses in transaction - * @param value represents array of amount of native tokens associated with each transaction - * @param data represent array of data associated with each transaction - * @returns - */ - getExecuteBatchCallData(to: Array, value: Array, data: Array): string { - this.isInitialized(); - this.isProxyDefined(); - const executeBatchCallData = this.proxy.interface.encodeFunctionData("executeBatchCall", [to, value, data]); - return executeBatchCallData; - } - - getDummySignature(): string { - return "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; - } - - getDummyPaymasterData(): string { - return "0x"; - } - - private async getNonce(): Promise { - let nonce = BigNumber.from(0); - try { - nonce = await this.nonce(); - } catch (error) { - // Not throwing this error as nonce would be 0 if this.nonce() throw exception, which is expected flow for undeployed account - Logger.log("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); - } - return nonce; - } - - private async getGasFeeValues( - overrides: Overrides | undefined, - skipBundlerGasEstimation: boolean | undefined, - ): Promise<{ maxFeePerGas?: BigNumberish | undefined; maxPriorityFeePerGas?: BigNumberish | undefined }> { - const gasFeeValues = { - maxFeePerGas: overrides?.maxFeePerGas, - maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas, - }; - try { - if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (skipBundlerGasEstimation ?? true)) { - const gasFeeEstimation = await this.bundler.getGasFeeValues(); - gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; - gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; - } - return gasFeeValues; - } catch (error: any) { - Logger.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); - return gasFeeValues; - } - } - - async buildUserOp( - transactions: Transaction[], - overrides?: Overrides, - skipBundlerGasEstimation?: boolean, - paymasterServiceData?: SponsorUserOperationDto, - ): Promise> { - this.isInitialized(); - const to = transactions.map((element: Transaction) => element.to); - const data = transactions.map((element: Transaction) => element.data ?? "0x"); - const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); - this.isProxyDefined(); - - const [nonce, gasFeeValues] = await Promise.all([this.getNonce(), this.getGasFeeValues(overrides, skipBundlerGasEstimation)]); - - let callData = ""; - if (transactions.length === 1) { - callData = this.getExecuteCallData(to[0], value[0], data[0]); - } else { - callData = this.getExecuteBatchCallData(to, value, data); - } - - let isDeployed = true; - - if (nonce.eq(0)) { - isDeployed = await this.isAccountDeployed(this.address); - } - - let userOp: Partial = { - sender: this.address, - nonce, - initCode: !isDeployed ? this.initCode : "0x", - callData: callData, - maxFeePerGas: gasFeeValues.maxFeePerGas || undefined, - maxPriorityFeePerGas: gasFeeValues.maxPriorityFeePerGas || undefined, - signature: this.getDummySignature(), - }; - - // Note: Can change the default behaviour of calling estimations using bundler/local - userOp = await this.estimateUserOpGas(userOp, overrides, skipBundlerGasEstimation, paymasterServiceData); - Logger.log("UserOp after estimation ", userOp); - - return userOp; - } - - private validateUserOpAndRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { - if (!userOp.callData) { - throw new Error("Userop callData cannot be undefined"); - } - - const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress; - Logger.log("requested fee token is ", feeTokenAddress); - - if (!feeTokenAddress || feeTokenAddress == ethers.constants.AddressZero) { - throw new Error("Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest"); - } - - const spender = tokenPaymasterRequest?.spender; - Logger.log("fee token approval to be checked and added for spender: ", spender); - - if (!spender || spender == ethers.constants.AddressZero) { - throw new Error("Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest"); - } - } - - /** - * - * @param userOp partial user operation without signature and paymasterAndData - * @param tokenPaymasterRequest This dto provides information about fee quote. Fee quote is received from earlier request getFeeQuotesOrData() to the Biconomy paymaster. - * maxFee and token decimals from the quote, along with the spender is required to append approval transaction. - * @notice This method should be called when gas is paid in ERC20 token using TokenPaymaster - * @description Optional method to update the userOp.calldata with batched transaction which approves the paymaster spender with necessary amount(if required) - * @returns updated userOp with new callData, callGasLimit - */ - async buildTokenPaymasterUserOp( - userOp: Partial, - tokenPaymasterRequest: BiconomyTokenPaymasterRequest, - ): Promise> { - this.validateUserOpAndRequest(userOp, tokenPaymasterRequest); - try { - let batchTo: Array = []; - let batchValue: Array = []; - let batchData: Array = []; - - let newCallData = userOp.callData; - Logger.log("received information about fee token address and quote ", tokenPaymasterRequest); - - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { - // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details - - // Review: might request this form of an array of Transaction - const approvalRequest: Transaction = await (this.paymaster as IHybridPaymaster).buildTokenApprovalTransaction( - tokenPaymasterRequest, - this.provider, - ); - Logger.log("approvalRequest is for erc20 token ", approvalRequest.to); - - if (approvalRequest.data == "0x" || approvalRequest.to == ethers.constants.AddressZero) { - return userOp; - } - - if (!userOp.callData) { - throw new Error("Userop callData cannot be undefined"); - } - - const decodedDataSmartWallet = this.proxy.interface.parseTransaction({ - data: userOp.callData.toString(), - }); - if (!decodedDataSmartWallet) { - throw new Error("Could not parse call data of smart wallet for userOp"); - } - - const smartWalletExecFunctionName = decodedDataSmartWallet.name; - - if (smartWalletExecFunctionName === "executeCall") { - Logger.log("originally an executeCall for Biconomy Account"); - const methodArgsSmartWalletExecuteCall = decodedDataSmartWallet.args; - const toOriginal = methodArgsSmartWalletExecuteCall[0]; - const valueOriginal = methodArgsSmartWalletExecuteCall[1]; - const dataOriginal = methodArgsSmartWalletExecuteCall[2]; - - batchTo.push(toOriginal); - batchValue.push(valueOriginal); - batchData.push(dataOriginal); - } else if (smartWalletExecFunctionName === "executeBatchCall") { - Logger.log("originally an executeBatchCall for Biconomy Account"); - const methodArgsSmartWalletExecuteCall = decodedDataSmartWallet.args; - batchTo = methodArgsSmartWalletExecuteCall[0]; - batchValue = methodArgsSmartWalletExecuteCall[1]; - batchData = methodArgsSmartWalletExecuteCall[2]; - } - - if (approvalRequest.to && approvalRequest.data && approvalRequest.value) { - batchTo = [approvalRequest.to, ...batchTo]; - batchValue = [approvalRequest.value, ...batchValue]; - batchData = [approvalRequest.data, ...batchData]; - - newCallData = this.getExecuteBatchCallData(batchTo, batchValue, batchData); - } - const finalUserOp: Partial = { - ...userOp, - callData: newCallData, - }; - - return finalUserOp; - } - } catch (error) { - Logger.log("Failed to update userOp. sending back original op"); - Logger.error("Failed to update callData with error", error); - return userOp; - } - return userOp; - } - - async getAllTokenBalances(balancesDto: BalancesDto): Promise { - return this.nodeClient.getAllTokenBalances(balancesDto); - } - - async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { - return this.nodeClient.getTotalBalanceInUsd(balancesDto); - } - - async getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise { - return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto); - } - - async getTransactionsByAddress(chainId: number, address: string): Promise { - return this.nodeClient.getTransactionByAddress(chainId, address); - } - - async getTransactionByHash(txHash: string): Promise { - return this.nodeClient.getTransactionByHash(txHash); - } - - async getAllSupportedChains(): Promise { - return this.nodeClient.getAllSupportedChains(); - } -} diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index ed2a6143e..34d363a58 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1,159 +1,129 @@ -import { JsonRpcProvider } from "@ethersproject/providers"; -import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; -import { BaseSmartAccount } from "./BaseSmartAccount"; -import { Bytes, getCreate2Address, hexConcat, keccak256, solidityKeccak256 } from "ethers/lib/utils"; +import { JsonRpcProvider, Provider } from "@ethersproject/providers"; +import { defaultAbiCoder } from "ethers/lib/utils"; +import { + Hex, + isHex, + keccak256, + encodePacked, + getCreate2Address, + concat, + encodeAbiParameters, + parseAbiParameters, + toHex, + hexToNumber, + toBytes, +} from "viem"; +import { BaseSmartContractAccount, getChain } from "@alchemy/aa-core"; +import type { BigNumberish, BytesLike } from "@alchemy/aa-core"; import { Logger, - NODE_CLIENT_URL, SmartAccount_v200, SmartAccountFactory_v200, SmartAccount_v200__factory, SmartAccountFactory_v200__factory, + RPC_PROVIDER_URLS, + packUserOp, } from "@biconomy/common"; import { BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, CounterFactualAddressParam, BuildUserOpOptions, - SendUserOpOptions, Overrides, NonceOptions, } from "./utils/Types"; -import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; -import { UserOperation, Transaction } from "@biconomy/core-types"; -import NodeClient from "@biconomy/node-client"; -import INodeClient from "@biconomy/node-client"; -import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { - SupportedChainsResponse, - BalancesResponse, - BalancesDto, - UsdBalanceResponse, - SmartAccountByOwnerDto, - SmartAccountsResponse, - SCWTransactionResponse, -} from "@biconomy/node-client"; -import { UserOpResponse } from "@biconomy/bundler"; import { BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, DEFAULT_BICONOMY_FACTORY_ADDRESS, DEFAULT_FALLBACK_HANDLER_ADDRESS, PROXY_CREATION_CODE, + ADDRESS_ZERO, } from "./utils/Constants"; -import log from "loglevel"; +import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; +import { UserOperation, Transaction } from "@biconomy/core-types"; +import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, SponsorUserOperationDto, PaymasterMode } from "@biconomy/paymaster"; +import { IBundler, UserOpResponse } from "@biconomy/bundler"; type UserOperationKey = keyof UserOperation; -export class BiconomySmartAccountV2 extends BaseSmartAccount { - private nodeClient!: INodeClient; +export class BiconomySmartAccountV2 extends BaseSmartContractAccount { private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; - factoryAddress?: string; + private index: number; - /** - * our account contract. - * should support the "execFromEntryPoint" and "nonce" methods - */ - accountContract?: SmartAccount_v200; + private chainId: number; + + private provider: Provider; + + private paymaster?: IPaymaster; + + private bundler?: IBundler; + + private accountContract?: SmartAccount_v200; - factory?: SmartAccountFactory_v200; + private factory?: SmartAccountFactory_v200; - private defaultFallbackHandlerAddress!: string; + private defaultFallbackHandlerAddress: Hex; - private implementationAddress!: string; + private implementationAddress: Hex; // Validation module responsible for account deployment initCode. This acts as a default authorization module. - defaultValidationModule!: BaseValidationModule; + defaultValidationModule: BaseValidationModule; // Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature. - activeValidationModule!: BaseValidationModule; + activeValidationModule: BaseValidationModule; private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) { - super(biconomySmartAccountConfig); - } - - public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { - const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); - instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 - + super({ + ...biconomySmartAccountConfig, + chain: getChain(biconomySmartAccountConfig.chainId), + rpcClient: biconomySmartAccountConfig.rpcUrl || (RPC_PROVIDER_URLS[biconomySmartAccountConfig.chainId] as string), + entryPointAddress: biconomySmartAccountConfig.entryPointAddress as Hex, + accountAddress: biconomySmartAccountConfig.accountAddress as Hex, + factoryAddress: biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS, + }); + this.index = biconomySmartAccountConfig.index ?? 0; + this.chainId = biconomySmartAccountConfig.chainId; + this.paymaster = biconomySmartAccountConfig.paymaster; + this.bundler = biconomySmartAccountConfig.bundler; + this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; + this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? this.defaultValidationModule; + this.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex); const defaultFallbackHandlerAddress = - instance.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS - ? DEFAULT_FALLBACK_HANDLER_ADDRESS - : biconomySmartAccountConfig.defaultFallbackHandler; + this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_FALLBACK_HANDLER_ADDRESS : biconomySmartAccountConfig.defaultFallbackHandler; if (!defaultFallbackHandlerAddress) { throw new Error("Default Fallback Handler address is not provided"); } - instance.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; - - instance.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0; - - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - instance.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? instance.defaultValidationModule; - - const { rpcUrl, nodeClientUrl } = biconomySmartAccountConfig; + this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; + // TODO: use rpcProvider generated in base class? + const { rpcUrl } = biconomySmartAccountConfig; if (rpcUrl) { - instance.provider = new JsonRpcProvider(rpcUrl); - } - - instance.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); - - await instance.init(); - - return instance; - } - - async _getAccountContract(): Promise { - if (this.accountContract == null) { - this.accountContract = SmartAccount_v200__factory.connect(await this.getAccountAddress(), this.provider); + this.provider = new JsonRpcProvider(rpcUrl); + } else { + this.provider = new JsonRpcProvider(RPC_PROVIDER_URLS[biconomySmartAccountConfig.chainId]); } - return this.accountContract; - } - - isActiveValidationModuleDefined(): boolean { - if (!this.activeValidationModule) throw new Error("Must provide an instance of active validation module."); - return true; - } - - isDefaultValidationModuleDefined(): boolean { - if (!this.defaultValidationModule) throw new Error("Must provide an instance of default validation module."); - return true; - } - setActiveValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { - if (validationModule instanceof BaseValidationModule) { - this.activeValidationModule = validationModule; - } - return this; + // REVIEW: removed the node client + // this.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); } - setDefaultValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { - if (validationModule instanceof BaseValidationModule) { - this.defaultValidationModule = validationModule; - this.accountAddress = undefined; - } - return this; + public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { + const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); + // Can do async init stuff here + return instance; } - // Could call it nonce space - async getNonce(nonceKey?: number): Promise { - const nonceSpace = nonceKey ?? 0; - try { - const accountContract = await this._getAccountContract(); - const nonce = await accountContract.nonce(nonceSpace); - return nonce; - } catch (e) { - log.debug("Failed to get nonce from deployed account. Returning 0 as nonce"); - return BigNumber.from(0); + // Calls the getCounterFactualAddress + async getAddress(params?: CounterFactualAddressParam): Promise { + if (this.accountAddress == null) { + // means it needs deployment + this.accountAddress = await this.getCounterFactualAddress(params); } + return this.accountAddress; } - /** - * return the account's address. - * this value is valid even before deploying the contract. - */ + // Calls the getCounterFactualAddress async getAccountAddress(params?: CounterFactualAddressParam): Promise { if (this.accountAddress == null) { // means it needs deployment @@ -163,11 +133,11 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } /** - * calculate the account address even before it is deployed + * Return the account's address. This value is valid even before deploying the contract. */ - async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise { + async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise { if (this.factory == null) { - if (this.factoryAddress != null && this.factoryAddress !== "") { + if (isHex(this.factoryAddress)) { this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); } else { throw new Error("no factory to get initCode"); @@ -182,10 +152,17 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { this.defaultFallbackHandlerAddress, validationModule.getAddress(), await validationModule.getInitData(), - ]); - const proxyCreationCodeHash = solidityKeccak256(["bytes", "uint256"], [PROXY_CREATION_CODE, this.implementationAddress]); - const salt = solidityKeccak256(["bytes32", "uint256"], [keccak256(initCalldata), index]); - const counterFactualAddress = getCreate2Address(this.factory.address, salt, proxyCreationCodeHash); + ]) as Hex; + + const proxyCreationCodeHash = keccak256(encodePacked(["bytes", "uint256"], [PROXY_CREATION_CODE, BigInt(this.implementationAddress)])); + + const salt = keccak256(encodePacked(["bytes32", "uint256"], [keccak256(initCalldata), BigInt(index)])); + + const counterFactualAddress = getCreate2Address({ + from: this.factory.address as Hex, + salt: salt, + bytecodeHash: proxyCreationCodeHash, + }); return counterFactualAddress; } catch (e) { @@ -193,13 +170,44 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } } + async _getAccountContract(): Promise { + if (this.accountContract == null) { + this.accountContract = SmartAccount_v200__factory.connect(await this.getAccountAddress(), this.provider); + } + return this.accountContract; + } + + isActiveValidationModuleDefined(): boolean { + if (!this.activeValidationModule) throw new Error("Must provide an instance of active validation module."); + return true; + } + + isDefaultValidationModuleDefined(): boolean { + if (!this.defaultValidationModule) throw new Error("Must provide an instance of default validation module."); + return true; + } + + setActiveValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { + if (validationModule instanceof BaseValidationModule) { + this.activeValidationModule = validationModule; + } + return this; + } + + setDefaultValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { + if (validationModule instanceof BaseValidationModule) { + this.defaultValidationModule = validationModule; + } + return this; + } + /** - * return the value to put into the "initCode" field, if the account is not yet deployed. - * this value holds the "factory" address, followed by this account's information + * Return the value to put into the "initCode" field, if the account is not yet deployed. + * This value holds the "factory" address, followed by this account's information */ - async getAccountInitCode(): Promise { + async getAccountInitCode(): Promise { if (this.factory == null) { - if (this.factoryAddress != null && this.factoryAddress !== "") { + if (isHex(this.factoryAddress)) { this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); } else { throw new Error("no factory to get initCode"); @@ -208,13 +216,13 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { this.isDefaultValidationModuleDefined(); - return hexConcat([ - this.factory.address, + return concat([ + this.factory.address as Hex, this.factory.interface.encodeFunctionData("deployCounterFactualAccount", [ this.defaultValidationModule.getAddress(), await this.defaultValidationModule.getInitData(), this.index, - ]), + ]) as Hex, ]); } @@ -223,11 +231,11 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @param to { target } address of transaction * @param value represents amount of native tokens * @param data represent data associated with transaction - * @returns + * @returns encoded data for execute function */ - async encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise { + async encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise { const accountContract = await this._getAccountContract(); - return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]); + return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; } /** @@ -235,17 +243,22 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @param to { target } array of addresses in transaction * @param value represents array of amount of native tokens associated with each transaction * @param data represent array of data associated with each transaction - * @returns + * @returns encoded data for executeBatch function */ - async encodeExecuteBatch(to: Array, value: Array, data: Array): Promise { + async encodeExecuteBatch(to: Array, value: Array, data: Array): Promise { const accountContract = await this._getAccountContract(); - return accountContract.interface.encodeFunctionData("executeBatch_y6U", [to, value, data]); + return accountContract.interface.encodeFunctionData("executeBatch_y6U", [to, value, data]) as Hex; } // dummy signature depends on the validation module supplied. - async getDummySignature(params?: ModuleInfo): Promise { + async getDummySignatures(params?: ModuleInfo): Promise { this.isActiveValidationModuleDefined(); - return this.activeValidationModule.getDummySignature(params); + return (await this.activeValidationModule.getDummySignature(params)) as Hex; + } + + // TODO: review this + getDummySignature(): Hex { + throw new Error("Method not implemented! Call getDummySignatures instead."); } // Might use provided paymaster instance to get dummy data (from pm service) @@ -253,6 +266,15 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return "0x"; } + validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { + for (const field of requiredFields) { + if (!userOp[field]) { + throw new Error(`${String(field)} is missing in the UserOp`); + } + } + return true; + } + async signUserOp(userOp: Partial, params?: SendUserOpParams): Promise { this.isActiveValidationModuleDefined(); const requiredFields: UserOperationKey[] = [ @@ -267,39 +289,20 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { "maxPriorityFeePerGas", "paymasterAndData", ]; - super.validateUserOp(userOp, requiredFields); + this.validateUserOp(userOp, requiredFields); const userOpHash = await this.getUserOpHash(userOp); - const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); + const moduleSig = (await this.activeValidationModule.signUserOpHash(userOpHash, params)) as Hex; - // Note: If the account is undeployed, use ERC-6492 - // Review: Should only be needed for signMessage - /*if (!(await this.isAccountDeployed(await this.getAccountAddress()))) { - const coder = new ethers.utils.AbiCoder(); - const populatedTransaction = await this.factory?.populateTransaction.deployCounterFactualAccount( - await this.defaultValidationModule.getAddress(), - await this.defaultValidationModule.getInitData(), - this.index, - ); - moduleSig = - coder.encode(["address", "bytes", "bytes"], [this.factoryAddress, populatedTransaction?.data, moduleSig]) + - "6492649264926492649264926492649264926492649264926492649264926492"; // magic suffix - userOp.signature = moduleSig; - return userOp as UserOperation; - }*/ - - const signatureWithModuleAddress = ethers.utils.defaultAbiCoder.encode( - ["bytes", "address"], - [moduleSig, this.activeValidationModule.getAddress()], - ); + const signatureWithModuleAddress = this.getSignatureWithModuleAddress(moduleSig, this.activeValidationModule.getAddress() as Hex); userOp.signature = signatureWithModuleAddress; return userOp as UserOperation; } - getSignatureWithModuleAddress(moduleSignature: string, moduleAddress?: string): string { - const moduleAddressToUse = moduleAddress ?? this.activeValidationModule.getAddress(); - return ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [moduleSignature, moduleAddressToUse]); + getSignatureWithModuleAddress(moduleSignature: Hex, moduleAddress?: Hex): Hex { + const moduleAddressToUse = moduleAddress ?? (this.activeValidationModule.getAddress() as Hex); + return encodeAbiParameters(parseAbiParameters("bytes, address"), [moduleSignature, moduleAddressToUse]); } /** @@ -309,19 +312,143 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. * @returns Promise */ - async sendUserOp(userOp: Partial, params?: SendUserOpOptions): Promise { + async sendUserOp(userOp: Partial, params?: ModuleInfo): Promise { Logger.log("userOp received in base account ", userOp); delete userOp.signature; const userOperation = await this.signUserOp(userOp, params); - const bundlerResponse = await this.sendSignedUserOp(userOperation, params); + const bundlerResponse = await this.sendSignedUserOp(userOperation); + return bundlerResponse; + } + + /** + * + * @param userOp + * @description This function call will take 'signedUserOp' as input and send it to the bundler + * @returns + */ + async sendSignedUserOp(userOp: UserOperation): Promise { + const requiredFields: UserOperationKey[] = [ + "sender", + "nonce", + "initCode", + "callData", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "paymasterAndData", + "signature", + ]; + this.validateUserOp(userOp, requiredFields); + Logger.log("userOp validated"); + if (!this.bundler) throw new Error("Bundler is not provided"); + Logger.log("userOp being sent to the bundler", userOp); + const bundlerResponse = await this.bundler.sendUserOp(userOp); return bundlerResponse; } - private async getBuildUserOpNonce(nonceOptions: NonceOptions | undefined): Promise { - let nonce = BigNumber.from(0); + async getUserOpHash(userOp: Partial): Promise { + const userOpHash = keccak256(packUserOp(userOp, true) as Hex); + const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, this.entryPoint.address, this.chainId]); + return keccak256(enc as Hex); + } + + // TODO // Should make this a Dto + async estimateUserOpGas( + userOp: Partial, + overrides?: Overrides, + skipBundlerGasEstimation?: boolean, + paymasterServiceData?: SponsorUserOperationDto, + ): Promise> { + const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; + this.validateUserOp(userOp, requiredFields); + + const finalUserOp = userOp; + const skipBundlerCall = skipBundlerGasEstimation ?? true; + // Override gas values in userOp if provided in overrides params + if (overrides) { + userOp = { ...userOp, ...overrides }; + } + + Logger.log("userOp in estimation", userOp); + + if (skipBundlerCall) { + // Review: instead of checking mode it could be assumed or just pass gasless flag and use it + // make pmService data locally and pass the object with default values + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { + if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { + throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); + } + // Making call to paymaster to get gas estimations for userOp + const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( + this.paymaster as IHybridPaymaster + ).getPaymasterAndData(userOp, paymasterServiceData); + finalUserOp.verificationGasLimit = toHex(Number(verificationGasLimit)) ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = toHex(Number(callGasLimit)) ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = toHex(Number(preVerificationGas)) ?? userOp.preVerificationGas; + finalUserOp.paymasterAndData = (paymasterAndData as Hex) ?? userOp.paymasterAndData; + } else { + Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); + // finalUserOp = await this.calculateUserOpGasValues(userOp); + finalUserOp.paymasterAndData = "0x"; + } + } else { + if (!this.bundler) throw new Error("Bundler is not provided"); + // TODO: is this still needed to delete? + delete userOp.maxFeePerGas; + delete userOp.maxPriorityFeePerGas; + // Making call to bundler to get gas estimations for userOp + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas( + userOp, + ); + // if neither user sent gas fee nor the bundler, estimate gas from provider + if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { + const feeData = await this.provider.getFeeData(); + if (feeData.maxFeePerGas?.toString()) { + finalUserOp.maxFeePerGas = feeData.maxFeePerGas?.toHexString() as Hex; + } else if (feeData.gasPrice?.toString()) { + finalUserOp.maxFeePerGas = feeData.gasPrice?.toHexString() as Hex; + } else { + finalUserOp.maxFeePerGas = (await this.provider.getGasPrice()).toHexString() as Hex; + } + + if (feeData.maxPriorityFeePerGas?.toString()) { + finalUserOp.maxPriorityFeePerGas = toHex(Number(feeData.maxPriorityFeePerGas?.toString())); + } else if (feeData.gasPrice?.toString()) { + finalUserOp.maxPriorityFeePerGas = toHex(Number(feeData.gasPrice?.toString())); + } else { + finalUserOp.maxPriorityFeePerGas = (await this.provider.getGasPrice()).toHexString() as Hex; + } + } else { + finalUserOp.maxFeePerGas = toHex(Number(maxFeePerGas)) ?? userOp.maxFeePerGas; + finalUserOp.maxPriorityFeePerGas = toHex(Number(maxPriorityFeePerGas)) ?? userOp.maxPriorityFeePerGas; + } + finalUserOp.verificationGasLimit = toHex(Number(verificationGasLimit)) ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = toHex(Number(callGasLimit)) ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = toHex(Number(preVerificationGas)) ?? userOp.preVerificationGas; + finalUserOp.paymasterAndData = "0x"; + } + return finalUserOp; + } + + // Could call it nonce space + async getNonce(nonceKey?: number): Promise { + const nonceSpace = nonceKey ?? 0; + try { + const accountContract = await this._getAccountContract(); + const nonce = await accountContract.nonce(nonceSpace); + return nonce.toBigInt(); + } catch (e) { + return BigInt(0); + } + } + + private async getBuildUserOpNonce(nonceOptions: NonceOptions | undefined): Promise { + let nonce = BigInt(0); try { if (nonceOptions?.nonceOverride) { - nonce = BigNumber.from(nonceOptions?.nonceOverride); + nonce = BigInt(nonceOptions?.nonceOverride); } else { const _nonceSpace = nonceOptions?.nonceKey ?? 0; nonce = await this.getNonce(_nonceSpace); @@ -336,10 +463,10 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { private async getGasFeeValues( overrides: Overrides | undefined, skipBundlerGasEstimation: boolean | undefined, - ): Promise<{ maxFeePerGas?: BigNumberish | undefined; maxPriorityFeePerGas?: BigNumberish | undefined }> { + ): Promise<{ maxFeePerGas?: string; maxPriorityFeePerGas?: string }> { const gasFeeValues = { - maxFeePerGas: overrides?.maxFeePerGas, - maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas, + maxFeePerGas: overrides?.maxFeePerGas as string, + maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas as string, }; try { if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (skipBundlerGasEstimation ?? true)) { @@ -349,6 +476,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } return gasFeeValues; } catch (error: any) { + // TODO: should throw error here? Logger.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); return gasFeeValues; } @@ -357,10 +485,10 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { const to = transactions.map((element: Transaction) => element.to); const data = transactions.map((element: Transaction) => element.data ?? "0x"); - const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); + const value = transactions.map((element: Transaction) => element.value ?? BigInt(0)); const initCodeFetchPromise = this.getInitCode(); - const dummySignatureFetchPromise = this.getDummySignature(buildUseropDto?.params); + const dummySignatureFetchPromise = this.getDummySignatures(buildUseropDto?.params); const [nonceFromFetch, initCode, signature, finalGasFeeValue] = await Promise.all([ this.getBuildUserOpNonce(buildUseropDto?.nonceOptions), @@ -372,7 +500,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { if (transactions.length === 0) { throw new Error("Transactions array cannot be empty"); } - let callData = ""; + let callData: Hex = "0x"; if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { callData = await this.encodeExecuteBatch(to, value, data); } else { @@ -381,14 +509,19 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } let userOp: Partial = { - sender: await this.getAccountAddress(), - nonce: nonceFromFetch, + sender: (await this.getAccountAddress()) as Hex, + nonce: toHex(nonceFromFetch), initCode, callData: callData, - maxFeePerGas: finalGasFeeValue.maxFeePerGas || undefined, - maxPriorityFeePerGas: finalGasFeeValue.maxPriorityFeePerGas || undefined, }; + if (finalGasFeeValue.maxFeePerGas) { + userOp.maxFeePerGas = toHex(Number(finalGasFeeValue.maxFeePerGas)); + } + if (finalGasFeeValue.maxPriorityFeePerGas) { + userOp.maxPriorityFeePerGas = toHex(Number(finalGasFeeValue.maxPriorityFeePerGas)); + } + // for this Smart Account current validation module dummy signature will be used to estimate gas userOp.signature = signature; @@ -412,14 +545,14 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress; Logger.log("Requested fee token is ", feeTokenAddress); - if (!feeTokenAddress || feeTokenAddress == ethers.constants.AddressZero) { + if (!feeTokenAddress || feeTokenAddress === ADDRESS_ZERO) { throw new Error("Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest"); } const spender = tokenPaymasterRequest?.spender; Logger.log("Spender address is ", spender); - if (!spender || spender == ethers.constants.AddressZero) { + if (!spender || spender === ADDRESS_ZERO) { throw new Error("Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest"); } } @@ -456,7 +589,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { ); Logger.log("ApprovalRequest is for erc20 token ", approvalRequest.to); - if (approvalRequest.data == "0x" || approvalRequest.to == ethers.constants.AddressZero) { + if (approvalRequest.data === "0x" || approvalRequest.to === ADDRESS_ZERO) { return userOp; } @@ -499,11 +632,26 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData); } - const finalUserOp: Partial = { + let finalUserOp: Partial = { ...userOp, callData: newCallData, }; + // Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) + try { + finalUserOp = await this.estimateUserOpGas(finalUserOp); + const callGasLimit = finalUserOp.callGasLimit; + if (callGasLimit && hexToNumber(callGasLimit) < 21000) { + return { + ...userOp, + callData: newCallData, + }; + } + Logger.log("UserOp after estimation ", finalUserOp); + } catch (error) { + Logger.error("Failed to estimate gas for userOp with updated callData ", error); + Logger.log("Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); + } return finalUserOp; } } catch (error) { @@ -514,68 +662,29 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return userOp; } - async signUserOpHash(userOpHash: string, params?: SendUserOpParams): Promise { + async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { this.isActiveValidationModuleDefined(); const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); - const signatureWithModuleAddress = ethers.utils.defaultAbiCoder.encode( - ["bytes", "address"], - [moduleSig, this.activeValidationModule.getAddress()], - ); + const signatureWithModuleAddress = defaultAbiCoder.encode(["bytes", "address"], [moduleSig, this.activeValidationModule.getAddress()]); return signatureWithModuleAddress; } - async signMessage(message: Bytes | string): Promise { + async signMessage(message: string | Uint8Array): Promise { this.isActiveValidationModuleDefined(); - const dataHash = ethers.utils.arrayify(ethers.utils.hashMessage(message)); + const dataHash = typeof message === "string" ? toBytes(message) : message; let signature = await this.activeValidationModule.signMessage(dataHash); + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); + } if (signature.slice(0, 2) !== "0x") { signature = "0x" + signature; } - - // If the account is undeployed, use ERC-6492 - if (!(await this.isAccountDeployed(await this.getAccountAddress()))) { - const coder = new ethers.utils.AbiCoder(); - const populatedTransaction = await this.factory?.populateTransaction.deployCounterFactualAccount( - await this.defaultValidationModule.getAddress(), - await this.defaultValidationModule.getInitData(), - this.index, - ); - signature = - coder.encode(["address", "bytes", "bytes"], [this.factoryAddress, populatedTransaction?.data, signature]) + - "6492649264926492649264926492649264926492649264926492649264926492"; // magic suffix - } - return signature; - } - - async getAllTokenBalances(balancesDto: BalancesDto): Promise { - return this.nodeClient.getAllTokenBalances(balancesDto); - } - - async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { - return this.nodeClient.getTotalBalanceInUsd(balancesDto); - } - - async getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise { - return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto); - } - - async getTransactionsByAddress(chainId: number, address: string): Promise { - return this.nodeClient.getTransactionByAddress(chainId, address); - } - - async getTransactionByHash(txHash: string): Promise { - return this.nodeClient.getTransactionByHash(txHash); - } - - async getAllSupportedChains(): Promise { - return this.nodeClient.getAllSupportedChains(); - } - - getImplementationAddress(): string { - return this.implementationAddress; + return signature as Hex; } async enableModule(moduleAddress: string): Promise { @@ -586,39 +695,41 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { async getEnableModuleData(moduleAddress: string): Promise { const accountContract = await this._getAccountContract(); - const data = accountContract.interface.encodeFunctionData("enableModule", [moduleAddress]); + const populatedTransaction = await accountContract.populateTransaction.enableModule(moduleAddress); const tx: Transaction = { - to: await this.getAccountAddress(), + to: await this.getAddress(), value: "0", - data: data as string, + data: populatedTransaction.data as string, }; return tx; } async getSetupAndEnableModuleData(moduleAddress: string, moduleSetupData: string): Promise { const accountContract = await this._getAccountContract(); - const data = accountContract.interface.encodeFunctionData("setupAndEnableModule", [moduleAddress, moduleSetupData]); + // TODO: using encodeFunctionData + const populatedTransaction = await accountContract.populateTransaction.setupAndEnableModule(moduleAddress, moduleSetupData); const tx: Transaction = { - to: await this.getAccountAddress(), + to: await this.getAddress(), value: "0", - data: data, + data: populatedTransaction.data as string, }; return tx; } - async disableModule(prevModule: string, moduleAddress: string): Promise { - const tx: Transaction = await this.getDisableModuleData(prevModule, moduleAddress); + async disableModule(preModule: string, moduleAddress: string): Promise { + const tx: Transaction = await this.getDisableModuleData(preModule, moduleAddress); const partialUserOp = await this.buildUserOp([tx]); return this.sendUserOp(partialUserOp); } async getDisableModuleData(prevModule: string, moduleAddress: string): Promise { const accountContract = await this._getAccountContract(); - const data = accountContract.interface.encodeFunctionData("disableModule", [prevModule, moduleAddress]); + // TODO: using encodeFunctionData + const populatedTransaction = await accountContract.populateTransaction.disableModule(prevModule, moduleAddress); const tx: Transaction = { - to: await this.getAccountAddress(), + to: await this.getAddress(), value: "0", - data: data, + data: populatedTransaction.data as string, }; return tx; } @@ -628,10 +739,10 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return accountContract.isModuleEnabled(moduleName); } + // Review async getAllModules(pageSize?: number): Promise> { pageSize = pageSize ?? 100; const accountContract = await this._getAccountContract(); - // Note: If page size is lower then on the next page start module would be module at the end of first page and not SENTINEL_MODULE const result: Array> = await accountContract.getModulesPaginated(this.SENTINEL_MODULE, pageSize); const modules: Array = result[0] as Array; return modules; diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts deleted file mode 100644 index 6b52b2539..000000000 --- a/packages/account/src/SmartAccount.ts +++ /dev/null @@ -1,298 +0,0 @@ -import { JsonRpcProvider } from "@ethersproject/providers"; -import { BigNumber, Signer, BytesLike } from "ethers"; -import { ISmartAccount } from "./interfaces/ISmartAccount"; -import { defaultAbiCoder, keccak256, arrayify } from "ethers/lib/utils"; -import { UserOperation, ChainId } from "@biconomy/core-types"; -import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; -import { packUserOp } from "@biconomy/common"; - -import { IBundler, UserOpResponse } from "@biconomy/bundler"; -import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; -import { Logger } from "@biconomy/common"; -import { IEntryPoint } from "@account-abstraction/contracts"; -import { SponsorUserOperationDto, BiconomyPaymaster, IHybridPaymaster, PaymasterMode } from "@biconomy/paymaster"; -import { SmartAccountConfig, Overrides, SendUserOpDto } from "./utils/Types"; - -type UserOperationKey = keyof UserOperation; - -// Notice: only to be used as base class for child class BiconomySmartAccount(V1) -export abstract class SmartAccount implements ISmartAccount { - bundler!: IBundler; - - paymaster!: IPaymaster; - - initCode = "0x"; - - // Ideally proxy should be defined in child class, if it's meant to be of type Biconomy SmartAccount - proxy!: any; - - owner!: string; - - provider!: JsonRpcProvider; - - entryPoint!: IEntryPoint; - - chainId!: ChainId; - - signer!: Signer; - - smartAccountConfig: SmartAccountConfig; - - constructor(_smartAccountConfig: SmartAccountConfig) { - this.smartAccountConfig = _smartAccountConfig; - } - - setEntryPointAddress(entryPointAddress: string): void { - this.smartAccountConfig.entryPointAddress = entryPointAddress; - } - - private validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { - for (const field of requiredFields) { - if (!userOp[field]) { - throw new Error(`${String(field)} is missing in the UserOp`); - } - } - return true; - } - - isProxyDefined(): boolean { - if (!this.proxy) throw new Error("Proxy is undefined"); - - return true; - } - - isSignerDefined(): boolean { - if (!this.signer) throw new Error("Signer is undefined"); - - return true; - } - - isProviderDefined(): boolean { - if (!this.provider) throw new Error("Provider is undefined"); - - return true; - } - - abstract getDummySignature(): string; - - async calculateUserOpGasValues(userOp: Partial): Promise> { - if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - const feeData = await this.provider.getFeeData(); - userOp.maxFeePerGas = userOp.maxFeePerGas ?? feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - userOp.maxPriorityFeePerGas = - userOp.maxPriorityFeePerGas ?? feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - if (userOp.initCode) - userOp.verificationGasLimit = - userOp.verificationGasLimit !== null || userOp.verificationGasLimit !== undefined - ? userOp.verificationGasLimit - : await this.getVerificationGasLimit(userOp.initCode); - userOp.callGasLimit = - userOp.callGasLimit !== null || userOp.callGasLimit !== undefined - ? userOp.callGasLimit - : await this.provider.estimateGas({ - from: this.smartAccountConfig.entryPointAddress, - to: userOp.sender, - data: userOp.callData, - }); - userOp.preVerificationGas = - userOp.preVerificationGas !== null || userOp.preVerificationGas !== undefined ? userOp.preVerificationGas : this.getPreVerificationGas(userOp); - return userOp; - } - - async estimateUserOpGas( - userOp: Partial, - overrides?: Overrides, - skipBundlerGasEstimation?: boolean, - paymasterServiceData?: SponsorUserOperationDto, - ): Promise> { - const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; - this.validateUserOp(userOp, requiredFields); - - let finalUserOp = userOp; - const skipBundlerCall = skipBundlerGasEstimation ?? true; - // Override gas values in userOp if provided in overrides params - if (overrides) { - userOp = { ...userOp, ...overrides }; - } - - Logger.log("userOp in estimation", userOp); - - if (skipBundlerCall) { - // Review: instead of checking mode it could be assumed or just pass gasless flag and use it - // make pmService data locally and pass the object with default values - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { - if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { - throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); - } - // Making call to paymaster to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( - this.paymaster as IHybridPaymaster - ).getPaymasterAndData(userOp, paymasterServiceData); - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; - } else { - Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); - finalUserOp = await this.calculateUserOpGasValues(userOp); - finalUserOp.paymasterAndData = "0x"; - } - } else { - if (!this.bundler) throw new Error("Bundler is not provided"); - // TODO: is this still needed to delete? - delete userOp.maxFeePerGas; - delete userOp.maxPriorityFeePerGas; - // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = - await this.bundler.estimateUserOpGas(userOp); - // if neither user sent gas fee nor the bundler, estimate gas from provider - if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { - const feeData = await this.provider.getFeeData(); - finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - } else { - finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; - finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; - } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = "0x"; - } - return finalUserOp; - } - - async isAccountDeployed(address: string): Promise { - this.isProviderDefined(); - const contractCode = await this.provider.getCode(address); - return contractCode !== "0x"; - } - - // Would only be used if paymaster is attached - async getPaymasterAndData(userOp: Partial): Promise { - if (this.paymaster) { - const paymasterAndDataResponse: PaymasterAndDataResponse = await this.paymaster.getPaymasterAndData(userOp); - return paymasterAndDataResponse.paymasterAndData; - } - return "0x"; - } - - nonce(): Promise { - this.isProxyDefined(); - return this.proxy.nonce(); - } - - async signUserOpHash(userOpHash: string, signer?: Signer): Promise { - if (signer) { - return signer.signMessage(arrayify(userOpHash)); - } - if (this.signer) { - return this.signer.signMessage(arrayify(userOpHash)); - } - throw new Error("No signer provided to sign userOp"); - } - - getPreVerificationGas(userOp: Partial): BigNumber { - return calcPreVerificationGas(userOp); - } - - async getVerificationGasLimit(initCode: BytesLike): Promise { - // Verification gas should be max(initGas(wallet deployment) + validateUserOp + validatePaymasterUserOp , postOp) - - const initGas = await this.estimateCreationGas(initCode as string); - const validateUserOpGas = BigNumber.from(DefaultGasLimits.validatePaymasterUserOpGas + DefaultGasLimits.validateUserOpGas); - const postOpGas = BigNumber.from(DefaultGasLimits.postOpGas); - - let verificationGasLimit = BigNumber.from(validateUserOpGas).add(initGas); - - if (BigNumber.from(postOpGas).gt(verificationGasLimit)) { - verificationGasLimit = postOpGas; - } - return verificationGasLimit; - } - - async getUserOpHash(userOp: Partial): Promise { - const userOpHash = keccak256(packUserOp(userOp, true)); - const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, this.entryPoint.address, this.chainId]); - return keccak256(enc); - } - - abstract getSmartAccountAddress(_accountIndex: number): Promise; - - async estimateCreationGas(initCode: string): Promise { - if (initCode == null || initCode === "0x") return BigNumber.from("0"); - const deployerAddress = initCode.substring(0, 42); - const deployerCallData = "0x" + initCode.substring(42); - return this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }); - } - - async signUserOp(userOp: Partial): Promise { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - ]; - this.validateUserOp(userOp, requiredFields); - const userOpHash = await this.getUserOpHash(userOp); - let signature = await this.signUserOpHash(userOpHash, this.signer); - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); - } - if (signature.slice(0, 2) !== "0x") { - signature = "0x" + signature; - } - userOp.signature = signature; - return userOp as UserOperation; - } - - /** - * - * @param userOp - * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. - * @returns Promise - */ - async sendUserOp(userOp: Partial, params?: SendUserOpDto): Promise { - Logger.log("userOp received in base account ", userOp); - delete userOp.signature; - const userOperation = await this.signUserOp(userOp); - const bundlerResponse = await this.sendSignedUserOp(userOperation, params); - return bundlerResponse; - } - - /** - * - * @param userOp - * @description This function call will take 'signedUserOp' as input and send it to the bundler - * @returns - */ - async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpDto): Promise { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - "signature", - ]; - this.validateUserOp(userOp, requiredFields); - Logger.log("userOp validated"); - if (!this.bundler) throw new Error("Bundler is not provided"); - Logger.log("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp, params); - return bundlerResponse; - } -} diff --git a/packages/account/src/account.ts b/packages/account/src/account.ts deleted file mode 100644 index 9331a20da..000000000 --- a/packages/account/src/account.ts +++ /dev/null @@ -1,701 +0,0 @@ -import { JsonRpcProvider, Provider } from "@ethersproject/providers"; -import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; -import { defaultAbiCoder } from "ethers/lib/utils"; -import { BaseSmartContractAccount, getChain } from "@alchemy/aa-core"; -import { Bytes, hexConcat } from "ethers/lib/utils"; -import { Hex, isHex, keccak256, encodePacked, toHex, getCreate2Address, concat, encodeAbiParameters, parseAbiParameters } from "viem"; -import { - Logger, - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - RPC_PROVIDER_URLS, - packUserOp, - NODE_CLIENT_URL, -} from "@biconomy/common"; -import { - BiconomyTokenPaymasterRequest, - BiconomySmartAccountV2Config, - CounterFactualAddressParam, - BuildUserOpOptions, - Overrides, -} from "./utils/Types"; -import { - BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, - DEFAULT_BICONOMY_FACTORY_ADDRESS, - DEFAULT_FALLBACK_HANDLER_ADDRESS, - PROXY_CREATION_CODE, -} from "./utils/Constants"; -import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; -import { UserOperation, Transaction } from "@biconomy/core-types"; -import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { IBundler, UserOpResponse } from "@biconomy/bundler"; -import NodeClient from "@biconomy/node-client"; -import INodeClient from "@biconomy/node-client"; - -type UserOperationKey = keyof UserOperation; - -export class BiconomySmartAccountV2 extends BaseSmartContractAccount { - private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; - - private index: number; - - private nodeClient: INodeClient; - - private provider: Provider; - - private paymaster?: BiconomyPaymaster; - - private bundler?: IBundler; - - private accountContract?: SmartAccount_v200; - - private factory?: SmartAccountFactory_v200; - - private defaultFallbackHandlerAddress: Hex; - - private implementationAddress: Hex; - - // Validation module responsible for account deployment initCode. This acts as a default authorization module. - defaultValidationModule: BaseValidationModule; - - // Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature. - activeValidationModule: BaseValidationModule; - - private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) { - super({ - ...biconomySmartAccountConfig, - chain: getChain(biconomySmartAccountConfig.chainId), - rpcClient: biconomySmartAccountConfig.rpcUrl || (RPC_PROVIDER_URLS[biconomySmartAccountConfig.chainId] as string), - entryPointAddress: biconomySmartAccountConfig.entryPointAddress as Hex, - accountAddress: biconomySmartAccountConfig.accountAddress as Hex, - factoryAddress: biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS, - }); - this.index = biconomySmartAccountConfig.index ?? 0; - this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? this.defaultValidationModule; - this.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex); - const defaultFallbackHandlerAddress = - this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_FALLBACK_HANDLER_ADDRESS : biconomySmartAccountConfig.defaultFallbackHandler; - if (!defaultFallbackHandlerAddress) { - throw new Error("Default Fallback Handler address is not provided"); - } - this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; - - // TODO: use rpcProvider generated in base class? - const { rpcUrl, nodeClientUrl } = biconomySmartAccountConfig; - if (rpcUrl) { - this.provider = new JsonRpcProvider(rpcUrl); - } else { - this.provider = new JsonRpcProvider(RPC_PROVIDER_URLS[biconomySmartAccountConfig.chainId]); - } - - this.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); - } - - public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { - const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); - // Can do async init stuff here - return instance; - } - - // Calls the getCounterFactualAddress - async getAddress(params?: CounterFactualAddressParam): Promise { - if (this.accountAddress == null) { - // means it needs deployment - this.accountAddress = await this.getCounterFactualAddress(params); - } - return this.accountAddress; - } - - // Calls the getCounterFactualAddress - async getAccountAddress(params?: CounterFactualAddressParam): Promise { - if (this.accountAddress == null) { - // means it needs deployment - this.accountAddress = await this.getCounterFactualAddress(params); - } - return this.accountAddress; - } - - /** - * Return the account's address. This value is valid even before deploying the contract. - */ - async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise { - if (this.factory == null) { - if (isHex(this.factoryAddress)) { - this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); - } else { - throw new Error("no factory to get initCode"); - } - } - - const validationModule = params?.validationModule ?? this.defaultValidationModule; - const index = params?.index ?? this.index; - - try { - const initCalldata = SmartAccount_v200__factory.createInterface().encodeFunctionData("init", [ - this.defaultFallbackHandlerAddress, - validationModule.getAddress(), - await validationModule.getInitData(), - ]) as Hex; - - const proxyCreationCodeHash = keccak256(encodePacked(["bytes", "uint256"], [PROXY_CREATION_CODE, BigInt(this.implementationAddress)])); - - const salt = keccak256(encodePacked(["bytes32", "uint256"], [keccak256(initCalldata), BigInt(index)])); - - const counterFactualAddress = getCreate2Address({ - from: this.factory.address as Hex, - salt: salt, - bytecodeHash: proxyCreationCodeHash, - }); - - return counterFactualAddress; - } catch (e) { - throw new Error(`Failed to get counterfactual address, ${e}`); - } - } - - async _getAccountContract(): Promise { - if (this.accountContract == null) { - this.accountContract = SmartAccount_v200__factory.connect(await this.getAccountAddress(), this.provider); - } - return this.accountContract; - } - - isActiveValidationModuleDefined(): boolean { - if (!this.activeValidationModule) throw new Error("Must provide an instance of active validation module."); - return true; - } - - isDefaultValidationModuleDefined(): boolean { - if (!this.defaultValidationModule) throw new Error("Must provide an instance of default validation module."); - return true; - } - - setActiveValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { - if (validationModule instanceof BaseValidationModule) { - this.activeValidationModule = validationModule; - } - return this; - } - - setDefaultValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { - if (validationModule instanceof BaseValidationModule) { - this.defaultValidationModule = validationModule; - } - return this; - } - - /** - * Return the value to put into the "initCode" field, if the account is not yet deployed. - * This value holds the "factory" address, followed by this account's information - */ - async getAccountInitCode(): Promise { - if (this.factory == null) { - if (isHex(this.factoryAddress)) { - this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); - } else { - throw new Error("no factory to get initCode"); - } - } - - this.isDefaultValidationModuleDefined(); - - return concat([ - this.factory.address as Hex, - this.factory.interface.encodeFunctionData("deployCounterFactualAccount", [ - this.defaultValidationModule.getAddress(), - await this.defaultValidationModule.getInitData(), - this.index, - ]) as Hex, - ]); - } - - /** - * - * @param to { target } address of transaction - * @param value represents amount of native tokens - * @param data represent data associated with transaction - * @returns encoded data for execute function - */ - async encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise { - const accountContract = await this._getAccountContract(); - return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; - } - - /** - * - * @param to { target } array of addresses in transaction - * @param value represents array of amount of native tokens associated with each transaction - * @param data represent array of data associated with each transaction - * @returns encoded data for executeBatch function - */ - async encodeExecuteBatch(to: Array, value: Array, data: Array): Promise { - const accountContract = await this._getAccountContract(); - return accountContract.interface.encodeFunctionData("executeBatch_y6U", [to, value, data]) as Hex; - } - - // dummy signature depends on the validation module supplied. - async getDummySignatures(params?: ModuleInfo): Promise { - this.isActiveValidationModuleDefined(); - return (await this.activeValidationModule.getDummySignature(params)) as Hex; - } - - // TODO: review this - getDummySignature(): Hex { - throw new Error("Method not implemented! Call getDummySignatures instead."); - } - - // Might use provided paymaster instance to get dummy data (from pm service) - getDummyPaymasterData(): string { - return "0x"; - } - - validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { - for (const field of requiredFields) { - if (!userOp[field]) { - throw new Error(`${String(field)} is missing in the UserOp`); - } - } - return true; - } - - async signUserOp(userOp: Partial, params?: SendUserOpParams): Promise { - this.isActiveValidationModuleDefined(); - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - ]; - this.validateUserOp(userOp, requiredFields); - const userOpHash = await this.getUserOpHash(userOp); - - const moduleSig = (await this.activeValidationModule.signUserOpHash(userOpHash, params)) as Hex; - - // Note: If the account is undeployed, use ERC-6492 - // Review: Should only be needed for signMessage - // if (!(await this.isAccountDeployed(await this.getAccountAddress()))) { - // const coder = new ethers.utils.AbiCoder(); - // const populatedTransaction = await this.factory?.populateTransaction.deployCounterFactualAccount( - // await this.defaultValidationModule.getAddress(), - // await this.defaultValidationModule.getInitData(), - // this.index, - // ); - // moduleSig = - // coder.encode(["address", "bytes", "bytes"], [this.factoryAddress, populatedTransaction?.data, moduleSig]) + - // "6492649264926492649264926492649264926492649264926492649264926492"; // magic suffix - // userOp.signature = moduleSig; - // return userOp as UserOperation; - // } - - const signatureWithModuleAddress = encodeAbiParameters(parseAbiParameters("bytes, address"), [ - moduleSig, - this.activeValidationModule.getAddress() as Hex, - ]); - - userOp.signature = signatureWithModuleAddress; - return userOp as UserOperation; - } - - getSignatureWithModuleAddress(moduleSignature: Hex, moduleAddress?: Hex): Hex { - const moduleAddressToUse = moduleAddress ?? (this.activeValidationModule.getAddress() as Hex); - return encodeAbiParameters(parseAbiParameters("bytes, address"), [moduleSignature, moduleAddressToUse]); - } - - /** - * - * @param userOp - * @param params - * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. - * @returns Promise - */ - async sendUserOp(userOp: Partial, params?: ModuleInfo): Promise { - Logger.log("userOp received in base account ", userOp); - delete userOp.signature; - const userOperation = await this.signUserOp(userOp, params); - const bundlerResponse = await this.sendSignedUserOp(userOperation); - return bundlerResponse; - } - - /** - * - * @param userOp - * @description This function call will take 'signedUserOp' as input and send it to the bundler - * @returns - */ - async sendSignedUserOp(userOp: UserOperation): Promise { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - "signature", - ]; - this.validateUserOp(userOp, requiredFields); - Logger.log("userOp validated"); - if (!this.bundler) throw new Error("Bundler is not provided"); - Logger.log("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp); - return bundlerResponse; - } - - async getUserOpHash(userOp: Partial): Promise { - const userOpHash = keccak256(packUserOp(userOp, true)); - const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, this.entryPoint.address, this.chainId]); - return keccak256(enc); - } - - async estimateCreationGas(initCode?: string): Promise { - if (initCode == null || initCode === "0x") return 0; - const deployerAddress = initCode.substring(0, 42); - const deployerCallData = "0x" + initCode.substring(42); - return this.provider.estimateGas({ - to: deployerAddress, - data: deployerCallData, - }); - } - - async calculateUserOpGasValues(userOp: Partial): Promise> { - if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - const feeData = await this.provider.getFeeData(); - userOp.maxFeePerGas = userOp.maxFeePerGas ?? feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - userOp.maxPriorityFeePerGas = - userOp.maxPriorityFeePerGas ?? feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - if (userOp.initCode) userOp.verificationGasLimit = userOp.verificationGasLimit ?? (await this.getVerificationGasLimit(userOp.initCode)); - userOp.callGasLimit = - userOp.callGasLimit ?? - (await this.provider.estimateGas({ - from: this.entryPointAddress, - to: userOp.sender, - data: userOp.callData, - })); - userOp.preVerificationGas = userOp.preVerificationGas ?? (await this.getPreVerificationGas(userOp)); - return userOp; - } - - async estimateUserOpGas( - userOp: Partial, - overrides?: Overrides, - skipBundlerGasEstimation?: boolean, - ): Promise> { - const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; - this.validateUserOp(userOp, requiredFields); - - let finalUserOp = userOp; - const skipBundlerCall = skipBundlerGasEstimation ?? false; - // Override gas values in userOp if provided in overrides params - if (overrides) { - userOp = { ...userOp, ...overrides }; - } - - Logger.log("userOp in estimation", userOp); - - if (!this.bundler || skipBundlerCall) { - if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - // if no bundler url is provided run offchain logic to assign following values of UserOp - // maxFeePerGas, maxPriorityFeePerGas, verificationGasLimit, callGasLimit, preVerificationGas - finalUserOp = await this.calculateUserOpGasValues(userOp); - } else { - delete userOp.maxFeePerGas; - delete userOp.maxPriorityFeePerGas; - // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = - await this.bundler.estimateUserOpGas(userOp); - // if neither user sent gas fee nor the bundler, estimate gas from provider - if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { - const feeData = await this.provider.getFeeData(); - finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - } else { - finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; - finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; - } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - } - return finalUserOp; - } - - async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { - // Review: may not need at all - // this.isInitialized() - - // TODO: validate to, value and data fields - // TODO: validate overrides if supplied - const to = transactions.map((element: Transaction) => element.to); - const data = transactions.map((element: Transaction) => element.data ?? "0x"); - const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); - - if (transactions.length === 0) { - throw new Error("Transactions array cannot be empty"); - } - - let callData = ""; - if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { - callData = await this.encodeExecuteBatch(to, value, data); - } else { - // transactions.length must be 1 - callData = await this.encodeExecute(to[0], value[0], data[0]); - } - - let nonce = BigNumber.from(0); - try { - if (buildUseropDto?.nonceOptions?.nonceOverride) { - nonce = BigNumber.from(buildUseropDto?.nonceOptions?.nonceOverride); - } else { - const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0; - // TODO: check if this is correct - nonce = BigNumber.from(await this.getNonce()).add(_nonceSpace); - } - } catch (error) { - // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account - } - - let userOp: Partial = { - sender: this.accountAddress, - nonce, - initCode: await this.getInitCode(), - callData: callData, - }; - - // for this Smart Account current validation module dummy signature will be used to estimate gas - userOp.signature = await this.getDummySignatures(buildUseropDto?.params); - - userOp = await this.estimateUserOpGas(userOp, buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation); - Logger.log("UserOp after estimation ", userOp); - - // Do not populate paymasterAndData as part of buildUserOp as it may not have all necessary details - userOp.paymasterAndData = "0x"; // await this.getPaymasterAndData(userOp) - - return userOp; - } - - private validateUserOpAndPaymasterRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { - if (!userOp.callData) { - throw new Error("UserOp callData cannot be undefined"); - } - - const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress; - Logger.log("Requested fee token is ", feeTokenAddress); - - if (!feeTokenAddress || feeTokenAddress === ethers.constants.AddressZero) { - throw new Error("Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest"); - } - - const spender = tokenPaymasterRequest?.spender; - Logger.log("Spender address is ", spender); - - if (!spender || spender === ethers.constants.AddressZero) { - throw new Error("Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest"); - } - } - - /** - * - * @param userOp partial user operation without signature and paymasterAndData - * @param tokenPaymasterRequest This dto provides information about fee quote. Fee quote is received from earlier request getFeeQuotesOrData() to the Biconomy paymaster. - * maxFee and token decimals from the quote, along with the spender is required to append approval transaction. - * @notice This method should be called when gas is paid in ERC20 token using TokenPaymaster - * @description Optional method to update the userOp.calldata with batched transaction which approves the paymaster spender with necessary amount(if required) - * @returns updated userOp with new callData, callGasLimit - */ - async buildTokenPaymasterUserOp( - userOp: Partial, - tokenPaymasterRequest: BiconomyTokenPaymasterRequest, - ): Promise> { - this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest); - try { - let batchTo: Array = []; - let batchValue: Array = []; - let batchData: Array = []; - - let newCallData = userOp.callData; - Logger.log("Received information about fee token address and quote ", tokenPaymasterRequest); - - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { - // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details - - // Review: might request this form of an array of Transaction - const approvalRequest: Transaction = await (this.paymaster as IHybridPaymaster).buildTokenApprovalTransaction( - tokenPaymasterRequest, - this.provider, - ); - Logger.log("ApprovalRequest is for erc20 token ", approvalRequest.to); - - if (approvalRequest.data === "0x" || approvalRequest.to === ethers.constants.AddressZero) { - return userOp; - } - - if (!userOp.callData) { - throw new Error("UserOp callData cannot be undefined"); - } - - const account = await this._getAccountContract(); - - const decodedSmartAccountData = account.interface.parseTransaction({ - data: userOp.callData.toString(), - }); - if (!decodedSmartAccountData) { - throw new Error("Could not parse userOp call data for this smart account"); - } - - const smartAccountExecFunctionName = decodedSmartAccountData.name; - - Logger.log(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); - if (smartAccountExecFunctionName === "execute" || smartAccountExecFunctionName === "execute_ncC") { - const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; - const toOriginal = methodArgsSmartWalletExecuteCall[0]; - const valueOriginal = methodArgsSmartWalletExecuteCall[1]; - const dataOriginal = methodArgsSmartWalletExecuteCall[2]; - - batchTo.push(toOriginal); - batchValue.push(valueOriginal); - batchData.push(dataOriginal); - } else if (smartAccountExecFunctionName === "executeBatch" || smartAccountExecFunctionName === "executeBatch_y6U") { - const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; - batchTo = methodArgsSmartWalletExecuteCall[0]; - batchValue = methodArgsSmartWalletExecuteCall[1]; - batchData = methodArgsSmartWalletExecuteCall[2]; - } - - if (approvalRequest.to && approvalRequest.data && approvalRequest.value) { - batchTo = [approvalRequest.to, ...batchTo]; - batchValue = [approvalRequest.value, ...batchValue]; - batchData = [approvalRequest.data, ...batchData]; - - newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData); - } - let finalUserOp: Partial = { - ...userOp, - callData: newCallData, - }; - - // Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) - try { - finalUserOp = await this.estimateUserOpGas(finalUserOp); - const callGasLimit = ethers.BigNumber.from(finalUserOp.callGasLimit); - if (finalUserOp.callGasLimit && callGasLimit.lt(ethers.BigNumber.from("21000"))) { - return { - ...userOp, - callData: newCallData, - }; - } - Logger.log("UserOp after estimation ", finalUserOp); - } catch (error) { - Logger.error("Failed to estimate gas for userOp with updated callData ", error); - Logger.log("Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); - } - return finalUserOp; - } - } catch (error) { - Logger.log("Failed to update userOp. Sending back original op"); - Logger.error("Failed to update callData with error", error); - return userOp; - } - return userOp; - } - - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { - this.isActiveValidationModuleDefined(); - const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); - - const signatureWithModuleAddress = ethers.utils.defaultAbiCoder.encode( - ["bytes", "address"], - [moduleSig, this.activeValidationModule.getAddress()], - ); - - return signatureWithModuleAddress; - } - - async signMessage(message: Bytes | string): Promise { - this.isActiveValidationModuleDefined(); - const dataHash = ethers.utils.arrayify(ethers.utils.hashMessage(message)); - let signature = await this.activeValidationModule.signMessage(dataHash); - - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); - } - if (signature.slice(0, 2) !== "0x") { - signature = "0x" + signature; - } - return signature as Hex; - } - - async enableModule(moduleAddress: string): Promise { - const tx: Transaction = await this.getEnableModuleData(moduleAddress); - const partialUserOp = await this.buildUserOp([tx]); - return this.sendUserOp(partialUserOp); - } - - async getEnableModuleData(moduleAddress: string): Promise { - const accountContract = await this._getAccountContract(); - const populatedTransaction = await accountContract.populateTransaction.enableModule(moduleAddress); - const tx: Transaction = { - to: await this.getAddress(), - value: "0", - data: populatedTransaction.data as string, - }; - return tx; - } - - async getSetupAndEnableModuleData(moduleAddress: string, moduleSetupData: string): Promise { - const accountContract = await this._getAccountContract(); - // TODO: using encodeFunctionData - const populatedTransaction = await accountContract.populateTransaction.setupAndEnableModule(moduleAddress, moduleSetupData); - const tx: Transaction = { - to: await this.getAddress(), - value: "0", - data: populatedTransaction.data as string, - }; - return tx; - } - - async disableModule(preModule: string, moduleAddress: string): Promise { - const tx: Transaction = await this.getDisableModuleData(preModule, moduleAddress); - const partialUserOp = await this.buildUserOp([tx]); - return this.sendUserOp(partialUserOp); - } - - async getDisableModuleData(prevModule: string, moduleAddress: string): Promise { - const accountContract = await this._getAccountContract(); - // TODO: using encodeFunctionData - const populatedTransaction = await accountContract.populateTransaction.disableModule(prevModule, moduleAddress); - const tx: Transaction = { - to: await this.getAddress(), - value: "0", - data: populatedTransaction.data as string, - }; - return tx; - } - - async isModuleEnabled(moduleName: string): Promise { - const accountContract = await this._getAccountContract(); - return accountContract.isModuleEnabled(moduleName); - } - - // Review - async getAllModules(pageSize?: number): Promise> { - pageSize = pageSize ?? 100; - const accountContract = await this._getAccountContract(); - const result: Array> = await accountContract.getModulesPaginated(this.SENTINEL_MODULE, pageSize); - const modules: Array = result[0] as Array; - return modules; - } -} diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index d43249476..cc9bbb7f1 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -2,8 +2,6 @@ export * from "./interfaces/ISmartAccount"; export * from "./interfaces/IBaseSmartAccount"; export * from "./interfaces/IBiconomySmartAccount"; export * from "./utils/Types"; -export * from "./SmartAccount"; -export * from "./BiconomySmartAccount"; export * from "./utils/Constants"; export * from "./BiconomySmartAccountV2"; export * from "./utils/VoidSigner"; diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 4b3f257da..b70d02937 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -8,6 +8,8 @@ import { BiconomyImplementationsByVersion, } from "./Types"; +export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000"; + // will always be latest entrypoint address export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index add0f67a7..48e6d23de 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -1,6 +1,6 @@ import { Signer } from "ethers"; import { ChainId } from "@biconomy/core-types"; -import { BigNumberish } from "ethers"; +import { BigNumberish } from "@alchemy/aa-core"; import { IBundler } from "@biconomy/bundler"; import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; @@ -103,13 +103,13 @@ export type SendUserOpOptions = { export type SimulationType = "validation" | "validation_and_execution"; export type Overrides = { - callGasLimit?: BigNumberish; - verificationGasLimit?: BigNumberish; - preVerificationGas?: BigNumberish; - maxFeePerGas?: BigNumberish; - maxPriorityFeePerGas?: BigNumberish; - paymasterData?: string; - signature?: string; + callGasLimit?: Hex; + verificationGasLimit?: Hex; + preVerificationGas?: Hex; + maxFeePerGas?: Hex; + maxPriorityFeePerGas?: Hex; + paymasterData?: Hex; + signature?: Hex; }; export type InitilizationData = { diff --git a/packages/account/tests/SmartAccountV1.testnet.spec.ts b/packages/account/tests/SmartAccountV1.testnet.spec.ts deleted file mode 100644 index f6ef197af..000000000 --- a/packages/account/tests/SmartAccountV1.testnet.spec.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Wallet, ethers } from "ethers"; -import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; -import { BiconomySmartAccount } from "../src/BiconomySmartAccount"; -import { ChainId, UserOperation } from "@biconomy/core-types"; -import { calcPreVerificationGas } from "../src/utils/Preverificaiton"; - -describe("calcPreVerificationGas", () => { - const userOp = { - sender: "0x".padEnd(42, "1"), - nonce: 0, - initCode: "0x3333", - callData: "0x4444", - callGasLimit: 5, - verificationGasLimit: 6, - maxFeePerGas: 8, - maxPriorityFeePerGas: 9, - paymasterAndData: "0xaaaaaa", - }; - it("returns a gas value proportional to sigSize", async () => { - const pvg1 = calcPreVerificationGas(userOp, { sigSize: 0 }); - const pvg2 = calcPreVerificationGas(userOp, { sigSize: 65 }); - expect(pvg2.toNumber()).toBeGreaterThan(pvg1.toNumber()); - }); -}); - -describe("BiconomySmartAccount API Specs", () => { - let owner: Wallet; - let target: string; - let accountAPI: BiconomySmartAccount; - let beneficiary: string; - let recipient: SampleRecipient; - let accountAddress: string; - - beforeAll(async () => { - owner = Wallet.createRandom(); - - target = await Wallet.createRandom().getAddress(); - - // recipient = await new SampleRecipient__factory(owner).deploy(); - accountAPI = new BiconomySmartAccount({ - chainId: ChainId.POLYGON_MUMBAI, - signer: owner, - // paymaster: paymaster, - // bundler: bundler, - }); - - // console.log('account api provider ', accountAPI.provider) - - accountAPI = await accountAPI.init(); - console.log("Account EOA owner ", accountAPI.owner); - - const counterFactualAddress = await accountAPI.getSmartAccountAddress(0); - console.log("Counterfactual address ", counterFactualAddress); - }, 20000); - - // on Mumbai testnet some tests should be performed to make sure nothing breaks in AccountV1 - - /*it("Nonce should be zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: target, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - console.log("builtUserOp", builtUserOp); - expect(builtUserOp?.nonce?.toString()).toBe("0"); - }); - it("Sender should be non zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: target, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); - }); - it("InitCode length should be greater then 170", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: target, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); - });*/ - it("estimateUserOperationGas for native token transfer using local estimation logic", async () => {}); -}); diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index cea9f406c..df8901d0b 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -18,6 +18,7 @@ import { MultiChainValidationModule } from "@biconomy/modules"; import { BaseValidationModule } from "@biconomy/modules"; import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; import { MultiChainValidationModule_v100 } from "@biconomy/common"; +import { Hex } from "viem"; const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); @@ -72,9 +73,9 @@ describe("BiconomySmartAccountV2 API Specs", () => { // paymaster: paymaster, // bundler: bundler, entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address, - implementationAddress: accountImpl.address, - defaultFallbackHandler: await accountFactory.minimalHandler(), + factoryAddress: accountFactory.address as Hex, + implementationAddress: accountImpl.address as Hex, + defaultFallbackHandler: await accountFactory.minimalHandler() as Hex, defaultValidationModule: module1, activeValidationModule: module1, }); @@ -88,29 +89,29 @@ describe("BiconomySmartAccountV2 API Specs", () => { }, 30000); it("Nonce should be zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); + const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()).toString(), data: "0x" }]); console.log("builtUserOp", builtUserOp); expect(builtUserOp?.nonce?.toString()).toBe("0"); }); it("Sender should be non zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); + const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()).toString(), data: "0x" }]); expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); }); it("InitCode length should be greater then 170", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); + const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()).toString(), data: "0x" }]); expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); }); it("#getUserOpHash should match entryPoint.getUserOpHash", async function () { const userOp: UserOperation = { - sender: "0x".padEnd(42, "1"), - nonce: 2, + sender: "0x".padEnd(42, "1") as Hex, + nonce: "0x02", initCode: "0x3333", callData: "0x4444", - callGasLimit: 5, - verificationGasLimit: 6, - preVerificationGas: 7, - maxFeePerGas: 8, - maxPriorityFeePerGas: 9, + callGasLimit: "0x05", + verificationGasLimit: "0x06", + preVerificationGas: "0x07", + maxFeePerGas: "0x08", + maxPriorityFeePerGas: "0x09", paymasterAndData: "0xaaaaaa", signature: "0xbbbb", }; @@ -153,9 +154,9 @@ describe("BiconomySmartAccountV2 API Specs", () => { // paymaster: paymaster, // bundler: bundler, entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address, - implementationAddress: accountAPI.getImplementationAddress(), - defaultFallbackHandler: await accountFactory.minimalHandler(), + factoryAddress: accountFactory.address as Hex, + // implementationAddress: accountAPI.getImplementationAddress(), + defaultFallbackHandler: await accountFactory.minimalHandler() as Hex, defaultValidationModule: module2, activeValidationModule: module2, }); @@ -164,7 +165,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { // Review: Just setting different default validation module and querying account address is not working // accountAPI.setDefaultValidationModule(module2); - accountAPI2 = await accountAPI2.init(); + // accountAPI2 = await accountAPI2.init(); const accountAddress2 = await accountAPI2.getAccountAddress(); expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBe(2); @@ -345,9 +346,9 @@ describe("BiconomySmartAccountV2 API Specs", () => { // paymaster: paymaster, // bundler: bundler, entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address, - implementationAddress: accountAPI.getImplementationAddress(), - defaultFallbackHandler: await accountFactory.minimalHandler(), + factoryAddress: accountFactory.address as Hex, + // implementationAddress: accountAPI.getImplementationAddress(), + defaultFallbackHandler: await accountFactory.minimalHandler() as Hex, defaultValidationModule: newmodule, activeValidationModule: newmodule, }); @@ -355,7 +356,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { const address = await accountAPI2.getAccountAddress(); console.log("account address ", address); - expect(address).toBe(accountAPI.accountAddress); + expect(address).toBe(accountAPI.getAccountAddress()); }, 10000); // TODO diff --git a/packages/bundler/src/utils/HelperFunction.ts b/packages/bundler/src/utils/HelperFunction.ts index a0d0240e4..ec117327b 100644 --- a/packages/bundler/src/utils/HelperFunction.ts +++ b/packages/bundler/src/utils/HelperFunction.ts @@ -13,8 +13,8 @@ export const transformUserOP = (userOp: UserOperation): UserOperation => { "maxPriorityFeePerGas", ]; for (const key of keys) { - if (userOperation[key] && userOperation[key] !== "0") { - userOperation[key] = BigNumber.from(userOp[key]).toHexString(); + if (userOperation[key] && userOperation[key] !== "0x") { + userOperation[key] = BigNumber.from(userOp[key]).toHexString() as `0x${string}`; } } return userOperation; diff --git a/packages/common/package.json b/packages/common/package.json index 5ce64628d..a6760de21 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -52,7 +52,8 @@ "debug": "^4.3.4", "ethers": "^5.7.0", "node-fetch": "^2.7.0", - "typechain": "^8.1.1" + "typechain": "^8.1.1", + "viem": "^1.16.5" }, "devDependencies": { "@nomicfoundation/hardhat-toolbox": "^1.0.2", diff --git a/packages/common/tests/ERC4337Utils.spec.ts b/packages/common/tests/ERC4337Utils.spec.ts index b7a6af546..0290b3042 100644 --- a/packages/common/tests/ERC4337Utils.spec.ts +++ b/packages/common/tests/ERC4337Utils.spec.ts @@ -1,20 +1,21 @@ import { expect } from "chai"; +import { Hex, toHex } from "viem"; import { packUserOp } from "../src/ERC4337Utils"; describe("packUserOp", () => { it("should pack a UserOperationStruct object", () => { const userOp = { - sender: "0x1234567890123456789012345678901234567890", - nonce: 1, - initCode: "0x0987654321098765432109876543210987654321", - callData: "0x", - callGasLimit: 1000000, - verificationGasLimit: 1000000, - preVerificationGas: 1000000, - maxFeePerGas: 10, - maxPriorityFeePerGas: 1, - paymasterAndData: "0x0987654321098765432109876543210987654321", - signature: "0x", + sender: "0x1234567890123456789012345678901234567890" as Hex, + nonce: `0x1` as Hex, + initCode: "0x0987654321098765432109876543210987654321" as Hex, + callData: "0x" as Hex, + callGasLimit: toHex(1000000), + verificationGasLimit: toHex(1000000), + preVerificationGas: toHex(1000000), + maxFeePerGas: toHex(10), + maxPriorityFeePerGas: toHex(1), + paymasterAndData: "0x0987654321098765432109876543210987654321" as Hex, + signature: "0x" as Hex, }; const packedUserOp = packUserOp(userOp, false); expect(packedUserOp).to.equal( @@ -24,17 +25,17 @@ describe("packUserOp", () => { it("should pack a UserOperationStruct object for signature", () => { const userOp = { - sender: "0x1234567890123456789012345678901234567890", - nonce: 1, - initCode: "0x0987654321098765432109876543210987654321", - callData: "0x", - callGasLimit: 1000000, - verificationGasLimit: 1000000, - preVerificationGas: 1000000, - maxFeePerGas: 10, - maxPriorityFeePerGas: 1, - paymasterAndData: "0x0987654321098765432109876543210987654321", - signature: "0x", + sender: "0x1234567890123456789012345678901234567890" as Hex, + nonce: `0x1` as Hex, + initCode: "0x0987654321098765432109876543210987654321" as Hex, + callData: "0x" as Hex, + callGasLimit: toHex(1000000), + verificationGasLimit: toHex(1000000), + preVerificationGas: toHex(1000000), + maxFeePerGas: toHex(10), + maxPriorityFeePerGas: toHex(1), + paymasterAndData: "0x0987654321098765432109876543210987654321" as Hex, + signature: "0x" as Hex, }; const packedUserOp = packUserOp(userOp, true); expect(packedUserOp).to.equal( diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 20b22ef66..85fbdb6e4 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -36,6 +36,7 @@ "access": "public" }, "dependencies": { + "@alchemy/aa-core": "^0.1.0", "@ethersproject/bignumber": "^5.6.0", "@ethersproject/contracts": "^5.6.0", "@ethersproject/providers": "^5.7.0", diff --git a/packages/core-types/src/Types.ts b/packages/core-types/src/Types.ts index 529102c99..b4c67cd45 100644 --- a/packages/core-types/src/Types.ts +++ b/packages/core-types/src/Types.ts @@ -1,4 +1,9 @@ -import { BigNumberish, BytesLike } from "ethers"; +// import type { Address } from "viem"; +export type Hex = `0x${string}`; +export type EmptyHex = `0x`; +// based on @account-abstraction/common +export type BigNumberish = string | bigint | number; +export type BytesLike = Uint8Array | string; export type SmartAccountVersion = "1.0.1" | "1.0.0" | "1.0.2"; @@ -9,17 +14,28 @@ export type Transaction = { }; export type UserOperation = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; + /* the origin of the request */ + sender: Hex; // TODO: Address + /* nonce (as hex) of the transaction, returned from the entrypoint for this Address */ + nonce: Hex; + /* the initCode for creating the sender if it does not exist yet, otherwise "0x" */ + initCode: Hex | EmptyHex; + /* the callData passed to the target */ + callData: Hex; + /* Gas value (as hex) used by inner account execution */ + callGasLimit: Hex; + /* Actual gas (as hex) used by the validation of this UserOperation */ + verificationGasLimit: Hex; + /* Gas overhead (as hex) of this UserOperation */ + preVerificationGas: Hex; + /* Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) (as hex)*/ + maxFeePerGas: Hex; + /* Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) (as hex)*/ + maxPriorityFeePerGas: Hex; + /* Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster ("0x" for self-sponsored transaction) */ + paymasterAndData: Hex | EmptyHex; + /* Data passed into the account along with the nonce during the verification step */ + signature: Hex; }; export enum SmartAccountType { diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index 082b6185d..837398f25 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -132,7 +132,7 @@ export class MultiChainValidationModule extends BaseValidationModule { // Update userOp with the final signature const updatedUserOp: UserOperation = { ...(multiChainUserOps[i].userOp as UserOperation), - signature: signatureWithModuleAddress, + signature: signatureWithModuleAddress as `0x${string}`, }; updatedUserOps.push(updatedUserOp); diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 3413f1100..cc36334a2 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -43,22 +43,22 @@ export class BiconomyPaymaster implements IHybridPaymaster): Promise> { userOp = await resolveProperties(userOp); if (userOp.nonce !== null && userOp.nonce !== undefined) { - userOp.nonce = BigNumber.from(userOp.nonce).toHexString(); + userOp.nonce = BigNumber.from(userOp.nonce).toHexString() as `0x${string}`; } if (userOp.callGasLimit !== null && userOp.callGasLimit !== undefined) { - userOp.callGasLimit = BigNumber.from(userOp.callGasLimit).toString(); + userOp.callGasLimit = BigNumber.from(userOp.callGasLimit).toString() as `0x${string}` } if (userOp.verificationGasLimit !== null && userOp.verificationGasLimit !== undefined) { - userOp.verificationGasLimit = BigNumber.from(userOp.verificationGasLimit).toString(); + userOp.verificationGasLimit = BigNumber.from(userOp.verificationGasLimit).toString() as `0x${string}` } if (userOp.preVerificationGas !== null && userOp.preVerificationGas !== undefined) { - userOp.preVerificationGas = BigNumber.from(userOp.preVerificationGas).toString(); + userOp.preVerificationGas = BigNumber.from(userOp.preVerificationGas).toString() as `0x${string}` } if (userOp.maxFeePerGas !== null && userOp.maxFeePerGas !== undefined) { - userOp.maxFeePerGas = BigNumber.from(userOp.maxFeePerGas).toString(); + userOp.maxFeePerGas = BigNumber.from(userOp.maxFeePerGas).toString() as `0x${string}` } if (userOp.maxPriorityFeePerGas !== null && userOp.maxPriorityFeePerGas !== undefined) { - userOp.maxPriorityFeePerGas = BigNumber.from(userOp.maxPriorityFeePerGas).toString(); + userOp.maxPriorityFeePerGas = BigNumber.from(userOp.maxPriorityFeePerGas).toString() as `0x${string}` } userOp.signature = userOp.signature || "0x"; userOp.paymasterAndData = userOp.paymasterAndData || "0x"; @@ -354,8 +354,6 @@ export class BiconomyPaymaster implements IHybridPaymaster Date: Wed, 18 Oct 2023 01:33:14 -0400 Subject: [PATCH 0911/1247] feat: add linea mainnet --- packages/bundler/src/utils/Constants.ts | 4 ++++ packages/common/src/Constants.ts | 1 + packages/core-types/src/ChainsTypes.ts | 1 + 3 files changed, 6 insertions(+) diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index f8a850475..57238ba61 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -21,6 +21,7 @@ export const UserOpReceiptIntervals: { [key in ChainId]?: number } = { [ChainId.BASE_GOERLI_TESTNET]: 5000, [ChainId.BASE_MAINNET]: 5000, [ChainId.LINEA_TESTNET]: 5000, + [ChainId.LINEA_MAINNET]: 5000, [ChainId.MANTLE_MAINNET]: 5000, [ChainId.MANTLE_TESTNET]: 5000, [ChainId.OPBNB_MAINNET]: 5000, @@ -48,6 +49,7 @@ export const UserOpWaitForTxHashIntervals: { [key in ChainId]?: number } = { [ChainId.BASE_GOERLI_TESTNET]: 500, [ChainId.BASE_MAINNET]: 500, [ChainId.LINEA_TESTNET]: 500, + [ChainId.LINEA_MAINNET]: 500, [ChainId.MANTLE_MAINNET]: 500, [ChainId.MANTLE_TESTNET]: 500, [ChainId.OPBNB_MAINNET]: 500, @@ -74,6 +76,7 @@ export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = [ChainId.BASE_GOERLI_TESTNET]: 30000, [ChainId.BASE_MAINNET]: 30000, [ChainId.LINEA_TESTNET]: 30000, + [ChainId.LINEA_MAINNET]: 30000, [ChainId.MANTLE_MAINNET]: 30000, [ChainId.MANTLE_TESTNET]: 30000, [ChainId.OPBNB_MAINNET]: 30000, @@ -100,6 +103,7 @@ export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: numbe [ChainId.BASE_GOERLI_TESTNET]: 20000, [ChainId.BASE_MAINNET]: 20000, [ChainId.LINEA_TESTNET]: 20000, + [ChainId.LINEA_MAINNET]: 20000, [ChainId.MANTLE_MAINNET]: 20000, [ChainId.MANTLE_TESTNET]: 20000, [ChainId.OPBNB_MAINNET]: 20000, diff --git a/packages/common/src/Constants.ts b/packages/common/src/Constants.ts index 73c4a506b..64a8f5ffa 100644 --- a/packages/common/src/Constants.ts +++ b/packages/common/src/Constants.ts @@ -23,6 +23,7 @@ export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { [ChainId.BASE_GOERLI_TESTNET]: "https://goerli.base.org", [ChainId.BASE_MAINNET]: "https://developer-access-mainnet.base.org", [ChainId.LINEA_TESTNET]: "https://rpc.goerli.linea.build", + [ChainId.LINEA_MAINNET]: "https://rpc.linea.build", [ChainId.MANTLE_MAINNET]: "https://rpc.mantle.xyz", [ChainId.MANTLE_TESTNET]: "https://rpc.testnet.mantle.xyz", [ChainId.OPBNB_MAINNET]: "https://opbnb-mainnet-rpc.bnbchain.org", diff --git a/packages/core-types/src/ChainsTypes.ts b/packages/core-types/src/ChainsTypes.ts index b0491fcb8..997cc498a 100644 --- a/packages/core-types/src/ChainsTypes.ts +++ b/packages/core-types/src/ChainsTypes.ts @@ -47,6 +47,7 @@ export enum ChainId { BASE_GOERLI_TESTNET = 84531, BASE_MAINNET = 8453, LINEA_TESTNET = 59140, + LINEA_MAINNET = 59144, MANTLE_MAINNET = 5000, MANTLE_TESTNET = 5001, OPBNB_MAINNET = 204, From 34fd6a308805061d9faf408f1ce6da9cac0ee819 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 18 Oct 2023 18:57:13 -0400 Subject: [PATCH 0912/1247] fix: resolve comments --- packages/bundler/src/Bundler.ts | 100 +++++++++----------- packages/bundler/src/interfaces/IBundler.ts | 11 ++- packages/bundler/src/utils/Constants.ts | 48 +++++----- 3 files changed, 81 insertions(+), 78 deletions(-) diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index a00244cdf..43668d25e 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -138,41 +138,39 @@ export class Bundler implements IBundler { let totalDuration = 0; return new Promise((resolve, reject) => { - if (this.UserOpReceiptIntervals && chainId in this.UserOpReceiptIntervals) { - const intervalValue = this.UserOpReceiptIntervals[chainId]; - if (intervalValue !== undefined) { - const intervalId = setInterval(async () => { - try { - const userOpResponse = await this.getUserOpReceipt(sendUserOperationResponse.result); - if (userOpResponse && userOpResponse.receipt && userOpResponse.receipt.blockNumber) { - if (confirmations) { - const latestBlock = await provider.getBlockNumber(); - const confirmedBlocks = latestBlock - userOpResponse.receipt.blockNumber; - if (confirmations >= confirmedBlocks) { - clearInterval(intervalId); - resolve(userOpResponse); - } - } + const intervalValue = this.UserOpReceiptIntervals[chainId] || 5000; // default 5 seconds + const intervalId = setInterval(async () => { + try { + const userOpResponse = await this.getUserOpReceipt(sendUserOperationResponse.result); + if (userOpResponse && userOpResponse.receipt && userOpResponse.receipt.blockNumber) { + if (confirmations) { + const latestBlock = await provider.getBlockNumber(); + const confirmedBlocks = latestBlock - userOpResponse.receipt.blockNumber; + if (confirmations >= confirmedBlocks) { clearInterval(intervalId); resolve(userOpResponse); } - } catch (error) { - clearInterval(intervalId); - reject(error); } + clearInterval(intervalId); + resolve(userOpResponse); + } + } catch (error) { + clearInterval(intervalId); + reject(error); + } - totalDuration += intervalValue; - if (totalDuration >= maxDuration) { - clearInterval(intervalId); - reject(new Error("Exceeded maximum duration")); - } - }, intervalValue); - } else { - reject(new Error("Invalid interval value")); + totalDuration += intervalValue; + if (totalDuration >= maxDuration) { + clearInterval(intervalId); + reject( + new Error( + `Exceeded maximum duration (${maxDuration / 1000} sec) waiting to get receipt for userOpHash ${ + sendUserOperationResponse.result + }. Try getting the receipt manually using eth_getUserOperationReceipt rpc method on bundler`, + ), + ); } - } else { - reject(new Error("Interval not defined for chainId")); - } + }, intervalValue); }); }, waitForTxHash: (): Promise => { @@ -180,36 +178,32 @@ export class Bundler implements IBundler { let totalDuration = 0; return new Promise((resolve, reject) => { + const intervalValue = this.UserOpWaitForTxHashIntervals[chainId] || 500; // default 0.5 seconds const intervalId = setInterval(() => { - if (this.UserOpWaitForTxHashIntervals && chainId in this.UserOpWaitForTxHashIntervals) { - const intervalValue = this.UserOpWaitForTxHashIntervals[chainId]; - if (intervalValue !== undefined) { - this.getUserOpStatus(sendUserOperationResponse.result) - .then((userOpStatus) => { - if (userOpStatus && userOpStatus.state && userOpStatus.transactionHash) { - clearInterval(intervalId); - resolve(userOpStatus); - } - }) - .catch((error) => { - clearInterval(intervalId); - reject(error); - }); - - totalDuration += intervalValue; - if (totalDuration >= maxDuration) { + this.getUserOpStatus(sendUserOperationResponse.result) + .then((userOpStatus) => { + if (userOpStatus && userOpStatus.state && userOpStatus.transactionHash) { clearInterval(intervalId); - reject(new Error("Exceeded maximum duration")); + resolve(userOpStatus); } - } else { + }) + .catch((error) => { clearInterval(intervalId); - reject(new Error("Invalid interval value")); - } - } else { + reject(error); + }); + + totalDuration += intervalValue; + if (totalDuration >= maxDuration) { clearInterval(intervalId); - reject(new Error("Interval not defined for chainId")); + reject( + new Error( + `Exceeded maximum duration (${maxDuration / 1000} sec) waiting to get receipt for userOpHash ${ + sendUserOperationResponse.result + }. Try getting the receipt manually using eth_getUserOperationReceipt rpc method on bundler`, + ), + ); } - }, this.UserOpWaitForTxHashIntervals[chainId]); + }, intervalValue); }); }, }; diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts index 5fb00a2a7..bf98a39e5 100644 --- a/packages/bundler/src/interfaces/IBundler.ts +++ b/packages/bundler/src/interfaces/IBundler.ts @@ -1,4 +1,12 @@ -import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse, SendUserOpOptions, GasFeeValues } from "../utils/Types"; +import { + UserOpResponse, + UserOpGasResponse, + UserOpReceipt, + UserOpByHashResponse, + SendUserOpOptions, + GasFeeValues, + UserOpStatus, +} from "../utils/Types"; import { UserOperation } from "@biconomy/core-types"; export interface IBundler { @@ -7,4 +15,5 @@ export interface IBundler { getUserOpReceipt(_userOpHash: string): Promise; getUserOpByHash(_userOpHash: string): Promise; getGasFeeValues(): Promise; + getUserOpStatus(_userOpHash: string): Promise; } diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index 57238ba61..29ceadb00 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -3,29 +3,29 @@ import { ChainId } from "@biconomy/core-types"; // eslint-disable-next-line no-unused-vars export const UserOpReceiptIntervals: { [key in ChainId]?: number } = { [ChainId.MAINNET]: 10000, - [ChainId.GOERLI]: 5000, - [ChainId.POLYGON_MUMBAI]: 5000, - [ChainId.POLYGON_MAINNET]: 5000, - [ChainId.BSC_TESTNET]: 5000, - [ChainId.BSC_MAINNET]: 5000, - [ChainId.POLYGON_ZKEVM_TESTNET]: 5000, - [ChainId.POLYGON_ZKEVM_MAINNET]: 5000, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 5000, - [ChainId.ARBITRUM_ONE_MAINNET]: 5000, - [ChainId.ARBITRUM_NOVA_MAINNET]: 5000, - [ChainId.OPTIMISM_MAINNET]: 5000, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 5000, - [ChainId.AVALANCHE_MAINNET]: 5000, - [ChainId.AVALANCHE_TESTNET]: 5000, - [ChainId.MOONBEAM_MAINNET]: 5000, - [ChainId.BASE_GOERLI_TESTNET]: 5000, - [ChainId.BASE_MAINNET]: 5000, - [ChainId.LINEA_TESTNET]: 5000, - [ChainId.LINEA_MAINNET]: 5000, - [ChainId.MANTLE_MAINNET]: 5000, - [ChainId.MANTLE_TESTNET]: 5000, - [ChainId.OPBNB_MAINNET]: 5000, - [ChainId.OPBNB_TESTNET]: 5000, + [ChainId.GOERLI]: 2000, + [ChainId.POLYGON_MUMBAI]: 2000, + [ChainId.POLYGON_MAINNET]: 2000, + [ChainId.BSC_TESTNET]: 2000, + [ChainId.BSC_MAINNET]: 2000, + [ChainId.POLYGON_ZKEVM_TESTNET]: 2000, + [ChainId.POLYGON_ZKEVM_MAINNET]: 2000, + [ChainId.ARBITRUM_GOERLI_TESTNET]: 2000, + [ChainId.ARBITRUM_ONE_MAINNET]: 2000, + [ChainId.ARBITRUM_NOVA_MAINNET]: 2000, + [ChainId.OPTIMISM_MAINNET]: 2000, + [ChainId.OPTIMISM_GOERLI_TESTNET]: 2000, + [ChainId.AVALANCHE_MAINNET]: 2000, + [ChainId.AVALANCHE_TESTNET]: 2000, + [ChainId.MOONBEAM_MAINNET]: 2000, + [ChainId.BASE_GOERLI_TESTNET]: 2000, + [ChainId.BASE_MAINNET]: 2000, + [ChainId.LINEA_TESTNET]: 2000, + [ChainId.LINEA_MAINNET]: 2000, + [ChainId.MANTLE_MAINNET]: 2000, + [ChainId.MANTLE_TESTNET]: 2000, + [ChainId.OPBNB_MAINNET]: 2000, + [ChainId.OPBNB_TESTNET]: 2000, }; // Note: Reduced by 1/10th.. can reduce more @@ -57,7 +57,7 @@ export const UserOpWaitForTxHashIntervals: { [key in ChainId]?: number } = { }; export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = { - [ChainId.MAINNET]: 30000, + [ChainId.MAINNET]: 300000, [ChainId.GOERLI]: 30000, [ChainId.POLYGON_MUMBAI]: 30000, [ChainId.POLYGON_MAINNET]: 30000, From 285f872b81a25dbf61da5a7cbb8507b1484a55eb Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 18 Oct 2023 21:50:05 -0400 Subject: [PATCH 0913/1247] update paymaster check in estimateUserOpGas --- packages/account/src/BaseSmartAccount.ts | 7 ++++--- packages/account/src/SmartAccount.ts | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index eb0974031..8d4bd0e55 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -256,9 +256,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { Logger.log("userOp in estimation", userOp); if (skipBundlerCall) { - // Review: instead of checking mode it could be assumed or just pass gasless flag and use it - // make pmService data locally and pass the object with default values - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); } @@ -270,6 +268,9 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + if (paymasterServiceData?.mode === PaymasterMode.ERC20) { + finalUserOp.paymasterAndData = "0x"; + } } else { Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); finalUserOp = await this.calculateUserOpGasValues(userOp); diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index 6b52b2539..055da2e9a 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -118,9 +118,7 @@ export abstract class SmartAccount implements ISmartAccount { Logger.log("userOp in estimation", userOp); if (skipBundlerCall) { - // Review: instead of checking mode it could be assumed or just pass gasless flag and use it - // make pmService data locally and pass the object with default values - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); } @@ -132,6 +130,9 @@ export abstract class SmartAccount implements ISmartAccount { finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + if (paymasterServiceData?.mode === PaymasterMode.ERC20) { + finalUserOp.paymasterAndData = "0x"; + } } else { Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); finalUserOp = await this.calculateUserOpGasValues(userOp); From 2eb0237b37425da3558801bbe9d0ce5d6fd696c9 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Fri, 20 Oct 2023 03:06:07 -0400 Subject: [PATCH 0914/1247] revert: update paymaster check in estimateUserOpGas --- packages/account/src/BaseSmartAccount.ts | 5 +---- packages/account/src/SmartAccount.ts | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 8d4bd0e55..bab69361c 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -256,7 +256,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { Logger.log("userOp in estimation", userOp); if (skipBundlerCall) { - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); } @@ -268,9 +268,6 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; - if (paymasterServiceData?.mode === PaymasterMode.ERC20) { - finalUserOp.paymasterAndData = "0x"; - } } else { Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); finalUserOp = await this.calculateUserOpGasValues(userOp); diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index 055da2e9a..b23420398 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -118,7 +118,7 @@ export abstract class SmartAccount implements ISmartAccount { Logger.log("userOp in estimation", userOp); if (skipBundlerCall) { - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); } @@ -130,9 +130,6 @@ export abstract class SmartAccount implements ISmartAccount { finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; - if (paymasterServiceData?.mode === PaymasterMode.ERC20) { - finalUserOp.paymasterAndData = "0x"; - } } else { Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); finalUserOp = await this.calculateUserOpGasValues(userOp); From 851ce32679c45458d55ca3810373337c284030c4 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Sat, 28 Oct 2023 04:52:40 -0700 Subject: [PATCH 0915/1247] features/chain-integration --- packages/bundler/src/utils/Constants.ts | 16 +++++++++++++ packages/common/src/Constants.ts | 4 ++++ packages/core-types/src/ChainsTypes.ts | 32 ++++--------------------- 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index 29ceadb00..5f3625a0c 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -26,6 +26,10 @@ export const UserOpReceiptIntervals: { [key in ChainId]?: number } = { [ChainId.MANTLE_TESTNET]: 2000, [ChainId.OPBNB_MAINNET]: 2000, [ChainId.OPBNB_TESTNET]: 2000, + [ChainId.ASTAR_MAINNET]: 2000, + [ChainId.ASTAR_TESTNET]: 2000, + [ChainId.CHILLIZ_MAINNET]: 2000, + [ChainId.CHILLIZ_TESTNET]: 2000, }; // Note: Reduced by 1/10th.. can reduce more @@ -54,6 +58,10 @@ export const UserOpWaitForTxHashIntervals: { [key in ChainId]?: number } = { [ChainId.MANTLE_TESTNET]: 500, [ChainId.OPBNB_MAINNET]: 500, [ChainId.OPBNB_TESTNET]: 500, + [ChainId.ASTAR_MAINNET]: 500, + [ChainId.ASTAR_TESTNET]: 500, + [ChainId.CHILLIZ_MAINNET]: 500, + [ChainId.CHILLIZ_TESTNET]: 500, }; export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = { @@ -81,6 +89,10 @@ export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = [ChainId.MANTLE_TESTNET]: 30000, [ChainId.OPBNB_MAINNET]: 30000, [ChainId.OPBNB_TESTNET]: 30000, + [ChainId.ASTAR_MAINNET]: 30000, + [ChainId.ASTAR_TESTNET]: 30000, + [ChainId.CHILLIZ_MAINNET]: 30000, + [ChainId.CHILLIZ_TESTNET]: 30000, }; export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: number } = { @@ -108,4 +120,8 @@ export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: numbe [ChainId.MANTLE_TESTNET]: 20000, [ChainId.OPBNB_MAINNET]: 20000, [ChainId.OPBNB_TESTNET]: 20000, + [ChainId.ASTAR_MAINNET]: 20000, + [ChainId.ASTAR_TESTNET]: 20000, + [ChainId.CHILLIZ_MAINNET]: 20000, + [ChainId.CHILLIZ_TESTNET]: 20000, }; diff --git a/packages/common/src/Constants.ts b/packages/common/src/Constants.ts index 64a8f5ffa..cea2d882a 100644 --- a/packages/common/src/Constants.ts +++ b/packages/common/src/Constants.ts @@ -28,4 +28,8 @@ export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { [ChainId.MANTLE_TESTNET]: "https://rpc.testnet.mantle.xyz", [ChainId.OPBNB_MAINNET]: "https://opbnb-mainnet-rpc.bnbchain.org", [ChainId.OPBNB_TESTNET]: "https://opbnb-testnet-rpc.bnbchain.org", + [ChainId.ASTAR_MAINNET]: "https://evm.astar.network", + [ChainId.ASTAR_TESTNET]: "https://evm.shibuya.astar.network", + [ChainId.CHILLIZ_MAINNET]: "https://rpc.ankr.com/chiliz", + [ChainId.CHILLIZ_TESTNET]: "https://spicy-rpc.chiliz.com", }; diff --git a/packages/core-types/src/ChainsTypes.ts b/packages/core-types/src/ChainsTypes.ts index 997cc498a..960db1f24 100644 --- a/packages/core-types/src/ChainsTypes.ts +++ b/packages/core-types/src/ChainsTypes.ts @@ -1,31 +1,3 @@ -export enum ChainNames { - Mainnet = "mainnet", - Ropsten = "ropsten", - Rinkeby = "rinkeby", - Goerli = "goerli", - Kovan = "kovan", - Xdai = "xdai", - Bsc = "bsc", - BscTest = "bscTest", - Fantom = "fantom", - FantomTest = "fantomTest", - Matic = "matic", - Mumbai = "mumbai", - Aurora = "aurora", - AuroraTest = "auroraTest", - Avalanche = "avalanche", - Fuji = "fuji", - Optimism = "optimism", - OptimismKovan = "optimismKovan", - Arbitrum = "arbitrum", - ArbitrumTest = "arbitrumTest", - Moonbeam = "moonbeam", - Moonbase = "moonbase", - Celo = "celo", - CeloTest = "celoTest", -} - -// NOTE: Update chainId for networks we're planning to support export enum ChainId { // Ethereum MAINNET = 1, @@ -52,5 +24,9 @@ export enum ChainId { MANTLE_TESTNET = 5001, OPBNB_MAINNET = 204, OPBNB_TESTNET = 5611, + ASTAR_MAINNET = 592, + ASTAR_TESTNET = 81, + CHILLIZ_MAINNET = 88888, + CHILLIZ_TESTNET = 88882, GANACHE = 1337, //Temp } From 611f84e058408e12fd0941acd2de65a8acf50055 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 30 Oct 2023 13:47:36 +0530 Subject: [PATCH 0916/1247] update eoaAddress -> address in Balances Dto --- packages/node-client/README.md | 2 +- packages/node-client/src/types/NodeClientTypes.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/node-client/README.md b/packages/node-client/README.md index d9aedb44f..b14934051 100644 --- a/packages/node-client/README.md +++ b/packages/node-client/README.md @@ -62,7 +62,7 @@ const balanceParams: BalancesDto = // is being supplied for initialization chainId: ChainId.MAINNET, // chainId of your choice - eoaAddress: address, + address: address, // If empty string you receive balances of all tokens watched by Indexer // you can only whitelist token addresses that are listed in token respository // specified above ^ diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index 2f74b240c..c94937936 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -39,7 +39,7 @@ export type SCWTransactionResponse = { export type BalancesDto = { chainId: number; - eoaAddress: string; + address: string; tokenAddresses: string[]; }; From 560c2344591881a4e358d71883ba426eb0a4be7e Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 30 Oct 2023 21:42:54 +0530 Subject: [PATCH 0917/1247] typo fix --- packages/bundler/src/utils/Constants.ts | 16 ++++++++-------- packages/common/src/Constants.ts | 4 ++-- packages/core-types/src/ChainsTypes.ts | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index 5f3625a0c..7892814a1 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -28,8 +28,8 @@ export const UserOpReceiptIntervals: { [key in ChainId]?: number } = { [ChainId.OPBNB_TESTNET]: 2000, [ChainId.ASTAR_MAINNET]: 2000, [ChainId.ASTAR_TESTNET]: 2000, - [ChainId.CHILLIZ_MAINNET]: 2000, - [ChainId.CHILLIZ_TESTNET]: 2000, + [ChainId.CHILIZ_MAINNET]: 2000, + [ChainId.CHILIZ_TESTNET]: 2000, }; // Note: Reduced by 1/10th.. can reduce more @@ -60,8 +60,8 @@ export const UserOpWaitForTxHashIntervals: { [key in ChainId]?: number } = { [ChainId.OPBNB_TESTNET]: 500, [ChainId.ASTAR_MAINNET]: 500, [ChainId.ASTAR_TESTNET]: 500, - [ChainId.CHILLIZ_MAINNET]: 500, - [ChainId.CHILLIZ_TESTNET]: 500, + [ChainId.CHILIZ_MAINNET]: 500, + [ChainId.CHILIZ_TESTNET]: 500, }; export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = { @@ -91,8 +91,8 @@ export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = [ChainId.OPBNB_TESTNET]: 30000, [ChainId.ASTAR_MAINNET]: 30000, [ChainId.ASTAR_TESTNET]: 30000, - [ChainId.CHILLIZ_MAINNET]: 30000, - [ChainId.CHILLIZ_TESTNET]: 30000, + [ChainId.CHILIZ_MAINNET]: 30000, + [ChainId.CHILIZ_TESTNET]: 30000, }; export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: number } = { @@ -122,6 +122,6 @@ export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: numbe [ChainId.OPBNB_TESTNET]: 20000, [ChainId.ASTAR_MAINNET]: 20000, [ChainId.ASTAR_TESTNET]: 20000, - [ChainId.CHILLIZ_MAINNET]: 20000, - [ChainId.CHILLIZ_TESTNET]: 20000, + [ChainId.CHILIZ_MAINNET]: 20000, + [ChainId.CHILIZ_TESTNET]: 20000, }; diff --git a/packages/common/src/Constants.ts b/packages/common/src/Constants.ts index cea2d882a..4c291a810 100644 --- a/packages/common/src/Constants.ts +++ b/packages/common/src/Constants.ts @@ -30,6 +30,6 @@ export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { [ChainId.OPBNB_TESTNET]: "https://opbnb-testnet-rpc.bnbchain.org", [ChainId.ASTAR_MAINNET]: "https://evm.astar.network", [ChainId.ASTAR_TESTNET]: "https://evm.shibuya.astar.network", - [ChainId.CHILLIZ_MAINNET]: "https://rpc.ankr.com/chiliz", - [ChainId.CHILLIZ_TESTNET]: "https://spicy-rpc.chiliz.com", + [ChainId.CHILIZ_MAINNET]: "https://rpc.ankr.com/chiliz", + [ChainId.CHILIZ_TESTNET]: "https://spicy-rpc.chiliz.com", }; diff --git a/packages/core-types/src/ChainsTypes.ts b/packages/core-types/src/ChainsTypes.ts index 960db1f24..6ab988d6f 100644 --- a/packages/core-types/src/ChainsTypes.ts +++ b/packages/core-types/src/ChainsTypes.ts @@ -26,7 +26,7 @@ export enum ChainId { OPBNB_TESTNET = 5611, ASTAR_MAINNET = 592, ASTAR_TESTNET = 81, - CHILLIZ_MAINNET = 88888, - CHILLIZ_TESTNET = 88882, + CHILIZ_MAINNET = 88888, + CHILIZ_TESTNET = 88882, GANACHE = 1337, //Temp } From c5bad6225b158053c879a5b59d17d6674c9c92e1 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Tue, 31 Oct 2023 12:00:20 +0530 Subject: [PATCH 0918/1247] fix: account compatibility --- .../account/src/BiconomySmartAccountV2.ts | 223 ++--- packages/account/src/abi/Factory.ts | 141 +++ packages/account/src/abi/SmartAccount.ts | 944 ++++++++++++++++++ packages/account/src/provider.ts | 31 + packages/paymaster/Readme.md | 2 +- packages/paymaster/src/BiconomyPaymaster.ts | 15 +- .../src/interfaces/IHybridPaymaster.ts | 3 +- 7 files changed, 1233 insertions(+), 126 deletions(-) create mode 100644 packages/account/src/abi/Factory.ts create mode 100644 packages/account/src/abi/SmartAccount.ts create mode 100644 packages/account/src/provider.ts diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 34d363a58..48bc608fd 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1,29 +1,30 @@ -import { JsonRpcProvider, Provider } from "@ethersproject/providers"; import { defaultAbiCoder } from "ethers/lib/utils"; import { Hex, - isHex, keccak256, encodePacked, getCreate2Address, - concat, encodeAbiParameters, parseAbiParameters, toHex, hexToNumber, toBytes, + encodeFunctionData, + PublicClient, + createPublicClient, + http, + concatHex, + GetContractReturnType, + Chain, + getContract, + decodeFunctionData, } from "viem"; -import { BaseSmartContractAccount, getChain } from "@alchemy/aa-core"; -import type { BigNumberish, BytesLike } from "@alchemy/aa-core"; -import { - Logger, - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - RPC_PROVIDER_URLS, - packUserOp, -} from "@biconomy/common"; +import { BaseSmartContractAccount, getChain, type BigNumberish } from "@alchemy/aa-core"; +import { Logger, RPC_PROVIDER_URLS, packUserOp } from "@biconomy/common"; +import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; +import { UserOperation, Transaction } from "@biconomy/core-types"; +import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, SponsorUserOperationDto, PaymasterMode } from "@biconomy/paymaster"; +import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, @@ -39,10 +40,8 @@ import { PROXY_CREATION_CODE, ADDRESS_ZERO, } from "./utils/Constants"; -import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; -import { UserOperation, Transaction } from "@biconomy/core-types"; -import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, SponsorUserOperationDto, PaymasterMode } from "@biconomy/paymaster"; -import { IBundler, UserOpResponse } from "@biconomy/bundler"; +import { BiconomyFactoryAbi } from "./abi/Factory"; +import { BiconomyAccountAbi } from "./abi/SmartAccount"; type UserOperationKey = keyof UserOperation; @@ -53,15 +52,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { private chainId: number; - private provider: Provider; + private provider: PublicClient; private paymaster?: IPaymaster; private bundler?: IBundler; - private accountContract?: SmartAccount_v200; - - private factory?: SmartAccountFactory_v200; + private accountContract?: GetContractReturnType; private defaultFallbackHandlerAddress: Hex; @@ -96,13 +93,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; - // TODO: use rpcProvider generated in base class? - const { rpcUrl } = biconomySmartAccountConfig; - if (rpcUrl) { - this.provider = new JsonRpcProvider(rpcUrl); - } else { - this.provider = new JsonRpcProvider(RPC_PROVIDER_URLS[biconomySmartAccountConfig.chainId]); - } + this.provider = createPublicClient({ + chain: getChain(biconomySmartAccountConfig.chainId), + transport: http(biconomySmartAccountConfig.rpcUrl || (RPC_PROVIDER_URLS[biconomySmartAccountConfig.chainId] as string)), + }); // REVIEW: removed the node client // this.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); @@ -136,30 +130,22 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * Return the account's address. This value is valid even before deploying the contract. */ async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise { - if (this.factory == null) { - if (isHex(this.factoryAddress)) { - this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); - } else { - throw new Error("no factory to get initCode"); - } - } - const validationModule = params?.validationModule ?? this.defaultValidationModule; const index = params?.index ?? this.index; try { - const initCalldata = SmartAccount_v200__factory.createInterface().encodeFunctionData("init", [ - this.defaultFallbackHandlerAddress, - validationModule.getAddress(), - await validationModule.getInitData(), - ]) as Hex; + const initCalldata = encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "init", + args: [this.defaultFallbackHandlerAddress, validationModule.getAddress() as Hex, (await validationModule.getInitData()) as Hex], + }); const proxyCreationCodeHash = keccak256(encodePacked(["bytes", "uint256"], [PROXY_CREATION_CODE, BigInt(this.implementationAddress)])); const salt = keccak256(encodePacked(["bytes32", "uint256"], [keccak256(initCalldata), BigInt(index)])); const counterFactualAddress = getCreate2Address({ - from: this.factory.address as Hex, + from: this.factoryAddress, salt: salt, bytecodeHash: proxyCreationCodeHash, }); @@ -170,9 +156,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } } - async _getAccountContract(): Promise { + async _getAccountContract(): Promise> { if (this.accountContract == null) { - this.accountContract = SmartAccount_v200__factory.connect(await this.getAccountAddress(), this.provider); + this.accountContract = getContract({ + address: await this.getAddress(), + abi: BiconomyAccountAbi, + publicClient: this.provider as PublicClient, + }); } return this.accountContract; } @@ -206,23 +196,15 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * This value holds the "factory" address, followed by this account's information */ async getAccountInitCode(): Promise { - if (this.factory == null) { - if (isHex(this.factoryAddress)) { - this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); - } else { - throw new Error("no factory to get initCode"); - } - } - this.isDefaultValidationModuleDefined(); - return concat([ - this.factory.address as Hex, - this.factory.interface.encodeFunctionData("deployCounterFactualAccount", [ - this.defaultValidationModule.getAddress(), - await this.defaultValidationModule.getInitData(), - this.index, - ]) as Hex, + return concatHex([ + this.factoryAddress as Hex, + encodeFunctionData({ + abi: BiconomyFactoryAbi, + functionName: "deployCounterFactualAccount", + args: [this.defaultValidationModule.getAddress() as Hex, (await this.defaultValidationModule.getInitData()) as Hex, BigInt(this.index)], + }), ]); } @@ -233,9 +215,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param data represent data associated with transaction * @returns encoded data for execute function */ - async encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise { - const accountContract = await this._getAccountContract(); - return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; + async encodeExecute(to: Hex, value: bigint, data: Hex): Promise { + // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; + return encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "execute_ncC", + args: [to, value, data], + }); } /** @@ -245,9 +231,12 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param data represent array of data associated with each transaction * @returns encoded data for executeBatch function */ - async encodeExecuteBatch(to: Array, value: Array, data: Array): Promise { - const accountContract = await this._getAccountContract(); - return accountContract.interface.encodeFunctionData("executeBatch_y6U", [to, value, data]) as Hex; + async encodeExecuteBatch(to: Array, value: Array, data: Array): Promise { + return encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "executeBatch_y6U", + args: [to, value, data], + }); } // dummy signature depends on the validation module supplied. @@ -399,26 +388,25 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { delete userOp.maxFeePerGas; delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas( - userOp, - ); + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = + await this.bundler.estimateUserOpGas(userOp); // if neither user sent gas fee nor the bundler, estimate gas from provider if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { - const feeData = await this.provider.getFeeData(); + const feeData = await this.provider.estimateFeesPerGas(); if (feeData.maxFeePerGas?.toString()) { - finalUserOp.maxFeePerGas = feeData.maxFeePerGas?.toHexString() as Hex; + finalUserOp.maxFeePerGas = ("0x" + feeData.maxFeePerGas.toString(16)) as Hex; } else if (feeData.gasPrice?.toString()) { - finalUserOp.maxFeePerGas = feeData.gasPrice?.toHexString() as Hex; + finalUserOp.maxFeePerGas = ("0x" + feeData.gasPrice.toString(16)) as Hex; } else { - finalUserOp.maxFeePerGas = (await this.provider.getGasPrice()).toHexString() as Hex; + finalUserOp.maxFeePerGas = ("0x" + (await this.provider.getGasPrice()).toString(16)) as Hex; } if (feeData.maxPriorityFeePerGas?.toString()) { - finalUserOp.maxPriorityFeePerGas = toHex(Number(feeData.maxPriorityFeePerGas?.toString())); + finalUserOp.maxPriorityFeePerGas = ("0x" + feeData.maxPriorityFeePerGas?.toString()) as Hex; } else if (feeData.gasPrice?.toString()) { finalUserOp.maxPriorityFeePerGas = toHex(Number(feeData.gasPrice?.toString())); } else { - finalUserOp.maxPriorityFeePerGas = (await this.provider.getGasPrice()).toHexString() as Hex; + finalUserOp.maxPriorityFeePerGas = ("0x" + (await this.provider.getGasPrice()).toString(16)) as Hex; } } else { finalUserOp.maxFeePerGas = toHex(Number(maxFeePerGas)) ?? userOp.maxFeePerGas; @@ -436,9 +424,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async getNonce(nonceKey?: number): Promise { const nonceSpace = nonceKey ?? 0; try { - const accountContract = await this._getAccountContract(); - const nonce = await accountContract.nonce(nonceSpace); - return nonce.toBigInt(); + const address = await this.getAddress(); + return await this.entryPoint.read.getNonce([address, BigInt(nonceSpace)]); } catch (e) { return BigInt(0); } @@ -483,9 +470,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { - const to = transactions.map((element: Transaction) => element.to); - const data = transactions.map((element: Transaction) => element.data ?? "0x"); - const value = transactions.map((element: Transaction) => element.value ?? BigInt(0)); + const to = transactions.map((element: Transaction) => element.to as Hex); + const data = transactions.map((element: Transaction) => (element.data as Hex) ?? "0x"); + const value = transactions.map((element: Transaction) => (element.value as bigint) ?? BigInt(0)); const initCodeFetchPromise = this.getInitCode(); const dummySignatureFetchPromise = this.getDummySignatures(buildUseropDto?.params); @@ -572,9 +559,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ): Promise> { this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest); try { - let batchTo: Array = []; - let batchValue: Array = []; - let batchData: Array = []; + let batchTo: Array = []; + let batchValue: Array = []; + let batchData: Array = []; let newCallData = userOp.callData; Logger.log("Received information about fee token address and quote ", tokenPaymasterRequest); @@ -585,7 +572,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Review: might request this form of an array of Transaction const approvalRequest: Transaction = await (this.paymaster as IHybridPaymaster).buildTokenApprovalTransaction( tokenPaymasterRequest, - this.provider, ); Logger.log("ApprovalRequest is for erc20 token ", approvalRequest.to); @@ -597,16 +583,16 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { throw new Error("UserOp callData cannot be undefined"); } - const account = await this._getAccountContract(); - - const decodedSmartAccountData = account.interface.parseTransaction({ - data: userOp.callData.toString(), + const decodedSmartAccountData = decodeFunctionData({ + abi: BiconomyAccountAbi, + data: userOp.callData, }); + if (!decodedSmartAccountData) { throw new Error("Could not parse userOp call data for this smart account"); } - const smartAccountExecFunctionName = decodedSmartAccountData.name; + const smartAccountExecFunctionName = decodedSmartAccountData.functionName; Logger.log(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); if (smartAccountExecFunctionName === "execute" || smartAccountExecFunctionName === "execute_ncC") { @@ -620,15 +606,15 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { batchData.push(dataOriginal); } else if (smartAccountExecFunctionName === "executeBatch" || smartAccountExecFunctionName === "executeBatch_y6U") { const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; - batchTo = methodArgsSmartWalletExecuteCall[0]; - batchValue = methodArgsSmartWalletExecuteCall[1]; - batchData = methodArgsSmartWalletExecuteCall[2]; + batchTo = [...methodArgsSmartWalletExecuteCall[0]]; + batchValue = [...methodArgsSmartWalletExecuteCall[1]]; + batchData = [...methodArgsSmartWalletExecuteCall[2]]; } if (approvalRequest.to && approvalRequest.data && approvalRequest.value) { - batchTo = [approvalRequest.to, ...batchTo]; - batchValue = [approvalRequest.value, ...batchValue]; - batchData = [approvalRequest.data, ...batchData]; + batchTo = [approvalRequest.to as Hex, ...batchTo]; + batchValue = [BigInt(Number(approvalRequest.value.toString())), ...batchValue]; + batchData = [approvalRequest.data as Hex, ...batchData]; newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData); } @@ -687,63 +673,70 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return signature as Hex; } - async enableModule(moduleAddress: string): Promise { + async enableModule(moduleAddress: Hex): Promise { const tx: Transaction = await this.getEnableModuleData(moduleAddress); const partialUserOp = await this.buildUserOp([tx]); return this.sendUserOp(partialUserOp); } - async getEnableModuleData(moduleAddress: string): Promise { - const accountContract = await this._getAccountContract(); - const populatedTransaction = await accountContract.populateTransaction.enableModule(moduleAddress); + async getEnableModuleData(moduleAddress: Hex): Promise { + const callData = encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "enableModule", + args: [moduleAddress], + }); const tx: Transaction = { to: await this.getAddress(), value: "0", - data: populatedTransaction.data as string, + data: callData, }; return tx; } - async getSetupAndEnableModuleData(moduleAddress: string, moduleSetupData: string): Promise { - const accountContract = await this._getAccountContract(); - // TODO: using encodeFunctionData - const populatedTransaction = await accountContract.populateTransaction.setupAndEnableModule(moduleAddress, moduleSetupData); + async getSetupAndEnableModuleData(moduleAddress: Hex, moduleSetupData: Hex): Promise { + const callData = encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "setupAndEnableModule", + args: [moduleAddress, moduleSetupData], + }); const tx: Transaction = { to: await this.getAddress(), value: "0", - data: populatedTransaction.data as string, + data: callData, }; return tx; } - async disableModule(preModule: string, moduleAddress: string): Promise { + async disableModule(preModule: Hex, moduleAddress: Hex): Promise { const tx: Transaction = await this.getDisableModuleData(preModule, moduleAddress); const partialUserOp = await this.buildUserOp([tx]); return this.sendUserOp(partialUserOp); } - async getDisableModuleData(prevModule: string, moduleAddress: string): Promise { - const accountContract = await this._getAccountContract(); - // TODO: using encodeFunctionData - const populatedTransaction = await accountContract.populateTransaction.disableModule(prevModule, moduleAddress); + async getDisableModuleData(prevModule: Hex, moduleAddress: Hex): Promise { + const callData = encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "disableModule", + args: [prevModule, moduleAddress], + }); const tx: Transaction = { to: await this.getAddress(), value: "0", - data: populatedTransaction.data as string, + data: callData, }; return tx; } - async isModuleEnabled(moduleName: string): Promise { + async isModuleEnabled(moduleName: Hex): Promise { const accountContract = await this._getAccountContract(); - return accountContract.isModuleEnabled(moduleName); + return accountContract.read.isModuleEnabled([moduleName]); } // Review async getAllModules(pageSize?: number): Promise> { pageSize = pageSize ?? 100; const accountContract = await this._getAccountContract(); - const result: Array> = await accountContract.getModulesPaginated(this.SENTINEL_MODULE, pageSize); + const result = await accountContract.read.getModulesPaginated([this.SENTINEL_MODULE as Hex, BigInt(pageSize)]); const modules: Array = result[0] as Array; return modules; } diff --git a/packages/account/src/abi/Factory.ts b/packages/account/src/abi/Factory.ts new file mode 100644 index 000000000..3498dd958 --- /dev/null +++ b/packages/account/src/abi/Factory.ts @@ -0,0 +1,141 @@ +export const BiconomyFactoryAbi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "initialAuthModule", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "AccountCreation", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "initialAuthModule", + type: "address", + }, + ], + name: "AccountCreationWithoutIndex", + type: "event", + }, + { + inputs: [], + name: "accountCreationCode", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + ], + name: "deployAccount", + outputs: [ + { + internalType: "address", + name: "proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "deployCounterFactualAccount", + outputs: [ + { + internalType: "address", + name: "proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "getAddressForCounterFactualAccount", + outputs: [ + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; diff --git a/packages/account/src/abi/SmartAccount.ts b/packages/account/src/abi/SmartAccount.ts new file mode 100644 index 000000000..3542c17d1 --- /dev/null +++ b/packages/account/src/abi/SmartAccount.ts @@ -0,0 +1,944 @@ +export const BiconomyAccountAbi = [ + { + inputs: [], + name: "AlreadyInitialized", + type: "error", + }, + { + inputs: [], + name: "BaseImplementationCannotBeZero", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotAnEntryPoint", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotEntryPoint", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotEntryPointOrOwner", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotEntryPointOrSelf", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotOwner", + type: "error", + }, + { + inputs: [], + name: "DelegateCallsOnly", + type: "error", + }, + { + inputs: [], + name: "EntryPointCannotBeZero", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "implementationAddress", + type: "address", + }, + ], + name: "InvalidImplementation", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "MixedAuthFail", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleAlreadyEnabled", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "expectedModule", + type: "address", + }, + { + internalType: "address", + name: "returnedModule", + type: "address", + }, + { + internalType: "address", + name: "prevModule", + type: "address", + }, + ], + name: "ModuleAndPrevModuleMismatch", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleCannotBeZeroOrSentinel", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleNotEnabled", + type: "error", + }, + { + inputs: [], + name: "ModulesAlreadyInitialized", + type: "error", + }, + { + inputs: [], + name: "ModulesSetupExecutionFailed", + type: "error", + }, + { + inputs: [], + name: "OwnerCanNotBeSelf", + type: "error", + }, + { + inputs: [], + name: "OwnerCannotBeZero", + type: "error", + }, + { + inputs: [], + name: "OwnerProvidedIsSame", + type: "error", + }, + { + inputs: [], + name: "TransferToZeroAddressAttempt", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "destLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "valueLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "funcLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "operationLength", + type: "uint256", + }, + ], + name: "WrongBatchProvided", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes", + name: "contractSignature", + type: "bytes", + }, + ], + name: "WrongContractSignature", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "uintS", + type: "uint256", + }, + { + internalType: "uint256", + name: "contractSignatureLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "signatureLength", + type: "uint256", + }, + ], + name: "WrongContractSignatureFormat", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleAddressProvided", + type: "address", + }, + ], + name: "WrongValidationModule", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "DisabledModule", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "EnabledModule", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ExecutionFromModuleFailure", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ExecutionFromModuleSuccess", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "oldImplementation", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "ImplementationUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "ModuleTransaction", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "SmartAccountReceivedNativeToken", + type: "event", + }, + { + inputs: [], + name: "VERSION", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "prevModule", + type: "address", + }, + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "disableModule", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "enableModule", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "to", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "data", + type: "bytes[]", + }, + { + internalType: "enum Enum.Operation[]", + name: "operations", + type: "uint8[]", + }, + ], + name: "execBatchTransactionFromModule", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + { + internalType: "uint256", + name: "txGas", + type: "uint256", + }, + ], + name: "execTransactionFromModule", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "execTransactionFromModule", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "execTransactionFromModuleReturnData", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + { + internalType: "bytes", + name: "returnData", + type: "bytes", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch_y6U", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute_ncC", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getImplementation", + outputs: [ + { + internalType: "address", + name: "_implementation", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "start", + type: "address", + }, + { + internalType: "uint256", + name: "pageSize", + type: "uint256", + }, + ], + name: "getModulesPaginated", + outputs: [ + { + internalType: "address[]", + name: "array", + type: "address[]", + }, + { + internalType: "address", + name: "next", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "handler", + type: "address", + }, + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + ], + name: "init", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "isModuleEnabled", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint192", + name: "_key", + type: "uint192", + }, + ], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "setupContract", + type: "address", + }, + { + internalType: "bytes", + name: "setupData", + type: "bytes", + }, + ], + name: "setupAndEnableModule", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_implementation", + type: "address", + }, + ], + name: "updateImplementation", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "payable", + type: "function", + }, +] as const; diff --git a/packages/account/src/provider.ts b/packages/account/src/provider.ts new file mode 100644 index 000000000..2df41669b --- /dev/null +++ b/packages/account/src/provider.ts @@ -0,0 +1,31 @@ +import { BatchUserOperationCallData, SendUserOperationResult, SmartAccountProvider, UserOperationCallData } from "@alchemy/aa-core"; +import type { Hex, HttpTransport } from "viem"; +import { BiconomySmartAccountV2 } from "./BiconomySmartAccountV2"; + +export class BiconomyAccountProvider extends SmartAccountProvider { + sendUserOperation = async (data: UserOperationCallData | BatchUserOperationCallData): Promise => { + if (!this.account) { + throw new Error("account not connected"); + } + + // create ethers tx from data + if (!Array.isArray(data)) { + data = [data]; + } + const tx = data.map((d) => { + return { + to: d.target, + data: d.data, + value: d.value, + }; + }); + const userOp = await (this.account as BiconomySmartAccountV2).buildUserOp(tx); + + const userOpResponse = await (this.account as BiconomySmartAccountV2).sendUserOp(userOp); + + return { + hash: userOpResponse.userOpHash as Hex, + request: userOp as any, + }; + }; +} diff --git a/packages/paymaster/Readme.md b/packages/paymaster/Readme.md index 8b91b80a7..fce6d8384 100644 --- a/packages/paymaster/Readme.md +++ b/packages/paymaster/Readme.md @@ -38,7 +38,7 @@ Following are the methods that can be called on paymaster instance ```typescript export interface IHybridPaymaster extends IPaymaster { getPaymasterAndData(userOp: Partial, paymasterServiceData?: T): Promise; - buildTokenApprovalTransaction(tokenPaymasterRequest: BiconomyTokenPaymasterRequest, provider: Provider): Promise; + buildTokenApprovalTransaction(tokenPaymasterRequest: BiconomyTokenPaymasterRequest): Promise; getPaymasterFeeQuotesOrData(userOp: Partial, paymasterServiceData: FeeQuotesOrDataDto): Promise; } ``` diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index cc36334a2..cf7c8409b 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -1,7 +1,6 @@ import { Logger, sendRequest, HttpMethod, getTimestampInSeconds } from "@biconomy/common"; import { resolveProperties } from "@ethersproject/properties"; import { UserOperation, Transaction } from "@biconomy/core-types"; -import { Provider } from "@ethersproject/abstract-provider"; import { PaymasterFeeQuote, PaymasterConfig, @@ -46,19 +45,19 @@ export class BiconomyPaymaster implements IHybridPaymaster { + async buildTokenApprovalTransaction(tokenPaymasterRequest: BiconomyTokenPaymasterRequest): Promise { const feeTokenAddress: string = tokenPaymasterRequest.feeQuote.tokenAddress; Logger.log("erc20 fee token address ", feeTokenAddress); @@ -79,7 +78,7 @@ export class BiconomyPaymaster implements IHybridPaymaster extends IPaymaster { getPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; getDummyPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; - buildTokenApprovalTransaction(_tokenPaymasterRequest: BiconomyTokenPaymasterRequest, _provider: Provider): Promise; + buildTokenApprovalTransaction(_tokenPaymasterRequest: BiconomyTokenPaymasterRequest): Promise; getPaymasterFeeQuotesOrData(_userOp: Partial, _paymasterServiceData: FeeQuotesOrDataDto): Promise; } From 73b0d296358732de3db4cf44059964426637ca9f Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Tue, 31 Oct 2023 12:33:23 +0530 Subject: [PATCH 0919/1247] minor fix --- packages/account/src/BiconomySmartAccountV2.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 48bc608fd..f8c7b06e6 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -339,8 +339,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async getUserOpHash(userOp: Partial): Promise { const userOpHash = keccak256(packUserOp(userOp, true) as Hex); - const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, this.entryPoint.address, this.chainId]); - return keccak256(enc as Hex); + const enc = encodeAbiParameters(parseAbiParameters("bytes32, address, uint256"), [userOpHash, this.entryPoint.address, BigInt(this.chainId)]); + return keccak256(enc); } // TODO // Should make this a Dto From 5601c68866ef3d0abd8db7cd4a622b68a2b7a6c4 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 1 Nov 2023 18:10:07 +0530 Subject: [PATCH 0920/1247] fix/update batched session router address and signing loigc --- packages/modules/src/BatchedSessionRouterModule.ts | 9 +-------- packages/modules/src/utils/Constants.ts | 4 ++-- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index a41a2a6a9..ffd273223 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -100,14 +100,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // signer must be the same for all the sessions const sessionSigner = sessionParams[0].sessionSigner; - const userOpHashAndModuleAddress = ethers.utils.hexConcat([ - ethers.utils.hexZeroPad(userOpHash, 32), - ethers.utils.hexZeroPad(this.getSessionKeyManagerAddress(), 20), - ]); - - const resultingHash = ethers.utils.keccak256(userOpHashAndModuleAddress); - - const signature = await sessionSigner.signMessage(arrayify(resultingHash)); + const signature = await sessionSigner.signMessage(arrayify(userOpHash)); for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts index 59b31e147..cab7efbef 100644 --- a/packages/modules/src/utils/Constants.ts +++ b/packages/modules/src/utils/Constants.ts @@ -27,10 +27,10 @@ export const SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION = { V1_0_1: "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489", }; -export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = "0x000008dA71757C0E1D83CE56c823e25Aa49bC058"; +export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = "0x00000D09967410f8C76752A104c9848b57ebba55"; export const BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: "0x000008dA71757C0E1D83CE56c823e25Aa49bC058", + V1_0_0: "0x00000D09967410f8C76752A104c9848b57ebba55", }; export const DEFAULT_MULTICHAIN_MODULE = "0x000000824dc138db84FD9109fc154bdad332Aa8E"; From 9049306dd610fdb7f3efc476bd000560682ae684 Mon Sep 17 00:00:00 2001 From: Aman Raj <42104907+AmanRaj1608@users.noreply.github.com> Date: Thu, 2 Nov 2023 15:59:54 +0530 Subject: [PATCH 0921/1247] Update push_check.yml --- .github/workflows/push_check.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/push_check.yml b/.github/workflows/push_check.yml index 6f63af53e..6cfca05c1 100644 --- a/.github/workflows/push_check.yml +++ b/.github/workflows/push_check.yml @@ -10,7 +10,7 @@ jobs: steps: - name: Checkout - uses: "actions/checkout@master" + uses: "actions/checkout@main" - name: Set Node.js uses: actions/setup-node@v1 @@ -30,7 +30,7 @@ jobs: steps: - name: Checkout - uses: "actions/checkout@master" + uses: "actions/checkout@main" - name: Set Node.js uses: actions/setup-node@v1 From 383a91337f1cc3ecaa5c697c396c452cdb9cca56 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 3 Nov 2023 02:49:11 +0530 Subject: [PATCH 0922/1247] use SendUserOpParams --- packages/account/src/BaseSmartAccount.ts | 3 ++- packages/account/src/BiconomySmartAccountV2.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index bab69361c..08feedf47 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -7,6 +7,7 @@ import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaito import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; +import { SendUserOpParams } from "@biconomy/modules"; import { SponsorUserOperationDto, BiconomyPaymaster, PaymasterMode, IHybridPaymaster } from "@biconomy/paymaster"; import { BaseSmartAccountConfig, Overrides, SendUserOpOptions, TransactionDetailsForUserOp } from "./utils/Types"; import { GasOverheads } from "./utils/Preverificaiton"; @@ -182,7 +183,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @description This function call will take 'signedUserOp' as input and send it to the bundler * @returns */ - async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpOptions): Promise { + async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpParams): Promise { const requiredFields: UserOperationKey[] = [ "sender", "nonce", diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index ed2a6143e..c28355df9 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -309,7 +309,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. * @returns Promise */ - async sendUserOp(userOp: Partial, params?: SendUserOpOptions): Promise { + async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { Logger.log("userOp received in base account ", userOp); delete userOp.signature; const userOperation = await this.signUserOp(userOp, params); From b74eb88bc1b18c8fe98484425e9beb5b245ff1cf Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 3 Nov 2023 02:57:46 +0530 Subject: [PATCH 0923/1247] lint fixes --- packages/account/src/BaseSmartAccount.ts | 2 +- packages/account/src/BiconomySmartAccountV2.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 08feedf47..f0ef1146f 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -9,7 +9,7 @@ import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; import { SendUserOpParams } from "@biconomy/modules"; import { SponsorUserOperationDto, BiconomyPaymaster, PaymasterMode, IHybridPaymaster } from "@biconomy/paymaster"; -import { BaseSmartAccountConfig, Overrides, SendUserOpOptions, TransactionDetailsForUserOp } from "./utils/Types"; +import { BaseSmartAccountConfig, Overrides, TransactionDetailsForUserOp } from "./utils/Types"; import { GasOverheads } from "./utils/Preverificaiton"; import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index c28355df9..72ce7723b 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -15,7 +15,6 @@ import { BiconomySmartAccountV2Config, CounterFactualAddressParam, BuildUserOpOptions, - SendUserOpOptions, Overrides, NonceOptions, } from "./utils/Types"; From 46bfa32432696b2d0a1c7066f1beb14a0ba62b28 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 6 Nov 2023 18:33:04 +0530 Subject: [PATCH 0924/1247] rebase with development --- package.json | 4 +- packages/account/package.json | 1 + packages/account/src/BaseSmartAccount.ts | 62 +- packages/account/src/BiconomySmartAccount.ts | 89 +- .../account/src/BiconomySmartAccountV2.ts | 119 ++- packages/account/src/SmartAccount.ts | 43 +- packages/account/src/index.ts | 1 + packages/account/src/utils/Types.ts | 16 +- packages/account/src/utils/VoidSigner.ts | 57 ++ .../tests/SmartAccountV2.local.spec.ts | 33 +- packages/bundler/src/Bundler.ts | 138 ++- packages/bundler/src/interfaces/IBundler.ts | 14 +- packages/bundler/src/utils/Constants.ts | 143 ++- packages/bundler/src/utils/Types.ts | 38 +- packages/common/CHANGELOG.md | 2 +- packages/common/package.json | 1 + packages/common/src/Constants.ts | 5 + packages/common/src/httpRequests.ts | 1 + packages/core-types/CHANGELOG.md | 2 +- packages/core-types/src/ChainsTypes.ts | 33 +- .../modules/src/BatchedSessionRouterModule.ts | 9 +- .../modules/src/SessionKeyManagerModule.ts | 14 +- packages/modules/src/utils/Constants.ts | 4 +- packages/modules/src/utils/Types.ts | 8 + packages/node-client/CHANGELOG.md | 2 +- packages/node-client/README.md | 4 +- .../node-client/src/types/NodeClientTypes.ts | 2 +- packages/paymaster/src/BiconomyPaymaster.ts | 29 +- packages/paymaster/src/utils/Types.ts | 19 + packages/web3-auth-native/.gitignore | 584 ------------ packages/web3-auth-native/.prettierignore | 21 - packages/web3-auth-native/.prettierrc.yaml | 5 - packages/web3-auth-native/CHANGELOG.md | 33 - packages/web3-auth-native/README.md | 9 - packages/web3-auth-native/package.json | 71 -- packages/web3-auth-native/src/SocialLogin.ts | 101 -- packages/web3-auth-native/src/index.ts | 6 - .../web3-auth-native/src/types/IWebBrowser.ts | 310 ------- packages/web3-auth-native/src/types/State.ts | 10 - packages/web3-auth-native/src/types/sdk.ts | 90 -- .../tests/web3-auth-native.spec.ts | 5 - packages/web3-auth-native/torus.config.js | 3 - .../web3-auth-native/tsconfig.eslint.json | 3 - packages/web3-auth-native/tsconfig.json | 12 - packages/web3-auth/CHANGELOG.md | 90 -- packages/web3-auth/README.md | 14 - packages/web3-auth/package.json | 62 -- packages/web3-auth/src/SocialLogin.tsx | 332 ------- packages/web3-auth/src/UI.tsx | 103 --- packages/web3-auth/src/index.ts | 4 - packages/web3-auth/src/style.css | 871 ------------------ .../web3-auth/src/types/Web3AuthConfig.ts | 15 - packages/web3-auth/tests/web3-auth.spec.ts | 5 - packages/web3-auth/tsconfig.json | 12 - 54 files changed, 679 insertions(+), 2985 deletions(-) create mode 100644 packages/account/src/utils/VoidSigner.ts delete mode 100644 packages/web3-auth-native/.gitignore delete mode 100644 packages/web3-auth-native/.prettierignore delete mode 100644 packages/web3-auth-native/.prettierrc.yaml delete mode 100644 packages/web3-auth-native/CHANGELOG.md delete mode 100644 packages/web3-auth-native/README.md delete mode 100644 packages/web3-auth-native/package.json delete mode 100644 packages/web3-auth-native/src/SocialLogin.ts delete mode 100644 packages/web3-auth-native/src/index.ts delete mode 100644 packages/web3-auth-native/src/types/IWebBrowser.ts delete mode 100644 packages/web3-auth-native/src/types/State.ts delete mode 100644 packages/web3-auth-native/src/types/sdk.ts delete mode 100644 packages/web3-auth-native/tests/web3-auth-native.spec.ts delete mode 100644 packages/web3-auth-native/torus.config.js delete mode 100644 packages/web3-auth-native/tsconfig.eslint.json delete mode 100644 packages/web3-auth-native/tsconfig.json delete mode 100644 packages/web3-auth/CHANGELOG.md delete mode 100644 packages/web3-auth/README.md delete mode 100644 packages/web3-auth/package.json delete mode 100644 packages/web3-auth/src/SocialLogin.tsx delete mode 100644 packages/web3-auth/src/UI.tsx delete mode 100644 packages/web3-auth/src/index.ts delete mode 100644 packages/web3-auth/src/style.css delete mode 100644 packages/web3-auth/src/types/Web3AuthConfig.ts delete mode 100644 packages/web3-auth/tests/web3-auth.spec.ts delete mode 100644 packages/web3-auth/tsconfig.json diff --git a/package.json b/package.json index 34230c01b..35f668de6 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "test": "concurrently -k --success first 'yarn start:ganache' 'yarn test:run'", "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", - "test:coverage": "yarn jest --coverage", + "test:coverage": "concurrently -k --success first 'yarn start:ganache' 'yarn jest --runInBand --coverage'", "diff": "lerna diff", "release": "lerna version patch --no-git-tag-version --no-push --conventional-commits --yes" }, @@ -56,6 +56,8 @@ "typescript": "^5.2.2" }, "devDependencies": { + "ganache": "^7.9.1", + "@types/debug": "^4.1.9", "@types/jest": "^29.5.4", "@typescript-eslint/eslint-plugin": "^6.7.0", "@typescript-eslint/parser": "^6.6.0", diff --git a/packages/account/package.json b/packages/account/package.json index 018d66a6d..7d89691ec 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -46,6 +46,7 @@ "@biconomy/modules": "^3.1.0", "@biconomy/node-client": "^3.1.0", "@biconomy/paymaster": "^3.1.0", + "@ethersproject/logger": "^5.7.0", "@ethersproject/providers": "^5.7.2", "ethers": "^5.7.0", "loglevel": "^1.8.1", diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 7030daa1c..f0ef1146f 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -7,11 +7,13 @@ import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaito import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; +import { SendUserOpParams } from "@biconomy/modules"; +import { SponsorUserOperationDto, BiconomyPaymaster, PaymasterMode, IHybridPaymaster } from "@biconomy/paymaster"; import { BaseSmartAccountConfig, Overrides, TransactionDetailsForUserOp } from "./utils/Types"; import { GasOverheads } from "./utils/Preverificaiton"; import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; -import { LRUCache } from 'lru-cache' +import { LRUCache } from "lru-cache"; type UserOperationKey = keyof UserOperation; @@ -71,7 +73,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { if (!userOp[field]) { - throw new Error(`${field} is missing`); + throw new Error(`${String(field)} is missing in the UserOp`); } } return true; @@ -181,7 +183,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { * @description This function call will take 'signedUserOp' as input and send it to the bundler * @returns */ - async sendSignedUserOp(userOp: UserOperation): Promise { + async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpParams): Promise { const requiredFields: UserOperationKey[] = [ "sender", "nonce", @@ -199,16 +201,30 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { Logger.log("userOp validated"); if (!this.bundler) throw new Error("Bundler is not provided"); Logger.log("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp); + const bundlerResponse = await this.bundler.sendUserOp(userOp, params); return bundlerResponse; } async calculateUserOpGasValues(userOp: Partial): Promise> { if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - const feeData = await this.provider.getFeeData(); - userOp.maxFeePerGas = userOp.maxFeePerGas ?? feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - userOp.maxPriorityFeePerGas = - userOp.maxPriorityFeePerGas ?? feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); + let feeData = null; + + if ( + userOp.maxFeePerGas === undefined || + userOp.maxFeePerGas === null || + userOp.maxPriorityFeePerGas === undefined || + userOp.maxPriorityFeePerGas === null + ) { + feeData = await this.provider.getFeeData(); + } + + if (userOp.maxFeePerGas === undefined || userOp.maxFeePerGas === null) { + userOp.maxFeePerGas = feeData?.maxFeePerGas ?? feeData?.gasPrice ?? (await this.provider.getGasPrice()); + } + + if (userOp.maxPriorityFeePerGas === undefined || userOp.maxPriorityFeePerGas === null) { + userOp.maxPriorityFeePerGas = feeData?.maxPriorityFeePerGas ?? feeData?.gasPrice ?? (await this.provider.getGasPrice()); + } if (userOp.initCode) userOp.verificationGasLimit = userOp.verificationGasLimit ?? (await this.getVerificationGasLimit(userOp.initCode)); userOp.callGasLimit = userOp.callGasLimit ?? @@ -221,16 +237,18 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { return userOp; } + // TODO // Should make this a Dto async estimateUserOpGas( userOp: Partial, overrides?: Overrides, skipBundlerGasEstimation?: boolean, + paymasterServiceData?: SponsorUserOperationDto, ): Promise> { const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; this.validateUserOp(userOp, requiredFields); let finalUserOp = userOp; - const skipBundlerCall = skipBundlerGasEstimation ?? false; + const skipBundlerCall = skipBundlerGasEstimation ?? true; // Override gas values in userOp if provided in overrides params if (overrides) { userOp = { ...userOp, ...overrides }; @@ -238,12 +256,27 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { Logger.log("userOp in estimation", userOp); - if (!this.bundler || skipBundlerCall) { - if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - // if no bundler url is provided run offchain logic to assign following values of UserOp - // maxFeePerGas, maxPriorityFeePerGas, verificationGasLimit, callGasLimit, preVerificationGas - finalUserOp = await this.calculateUserOpGasValues(userOp); + if (skipBundlerCall) { + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { + if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { + throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); + } + // Making call to paymaster to get gas estimations for userOp + const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( + this.paymaster as IHybridPaymaster + ).getPaymasterAndData(userOp, paymasterServiceData); + finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + } else { + Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); + finalUserOp = await this.calculateUserOpGasValues(userOp); + finalUserOp.paymasterAndData = "0x"; + } } else { + if (!this.bundler) throw new Error("Bundler is not provided"); + // TODO: is this still needed to delete? delete userOp.maxFeePerGas; delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp @@ -261,6 +294,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.paymasterAndData = "0x"; } return finalUserOp; } diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 2420f9017..40504b2b6 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -256,25 +256,59 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart return "0x"; } - async buildUserOp(transactions: Transaction[], overrides?: Overrides, skipBundlerGasEstimation?: boolean): Promise> { + private async getNonce(): Promise { + let nonce = BigNumber.from(0); + try { + nonce = await this.nonce(); + } catch (error) { + // Not throwing this error as nonce would be 0 if this.nonce() throw exception, which is expected flow for undeployed account + Logger.log("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); + } + return nonce; + } + + private async getGasFeeValues( + overrides: Overrides | undefined, + skipBundlerGasEstimation: boolean | undefined, + ): Promise<{ maxFeePerGas?: BigNumberish | undefined; maxPriorityFeePerGas?: BigNumberish | undefined }> { + const gasFeeValues = { + maxFeePerGas: overrides?.maxFeePerGas, + maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas, + }; + try { + if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (skipBundlerGasEstimation ?? true)) { + const gasFeeEstimation = await this.bundler.getGasFeeValues(); + gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; + gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; + } + return gasFeeValues; + } catch (error: any) { + Logger.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); + return gasFeeValues; + } + } + + async buildUserOp( + transactions: Transaction[], + overrides?: Overrides, + skipBundlerGasEstimation?: boolean, + paymasterServiceData?: SponsorUserOperationDto, + ): Promise> { this.isInitialized(); const to = transactions.map((element: Transaction) => element.to); const data = transactions.map((element: Transaction) => element.data ?? "0x"); const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); this.isProxyDefined(); + const [nonce, gasFeeValues] = await Promise.all([this.getNonce(), this.getGasFeeValues(overrides, skipBundlerGasEstimation)]); + let callData = ""; if (transactions.length === 1) { callData = this.getExecuteCallData(to[0], value[0], data[0]); } else { callData = this.getExecuteBatchCallData(to, value, data); } - let nonce = BigNumber.from(0); - try { - nonce = await this.nonce(); - } catch (error) { - // Not throwing this error as nonce would be 0 if this.nonce() throw exception, which is expected flow for undeployed account - } + let isDeployed = true; if (nonce.eq(0)) { @@ -286,16 +320,14 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart nonce, initCode: !isDeployed ? this.initCode : "0x", callData: callData, + maxFeePerGas: gasFeeValues.maxFeePerGas || undefined, + maxPriorityFeePerGas: gasFeeValues.maxPriorityFeePerGas || undefined, + signature: this.getDummySignature(), }; - // for this Smart Account dummy ECDSA signature will be used to estimate gas - userOp.signature = this.getDummySignature(); - - userOp = await this.estimateUserOpGas(userOp, overrides, skipBundlerGasEstimation); - Logger.log("userOp after estimation ", userOp); - - // Do not populate paymasterAndData as part of buildUserOp as it may not have all necessary details - userOp.paymasterAndData = "0x"; // await this.getPaymasterAndData(userOp) + // Note: Can change the default behaviour of calling estimations using bundler/local + userOp = await this.estimateUserOpGas(userOp, overrides, skipBundlerGasEstimation, paymasterServiceData); + Logger.log("UserOp after estimation ", userOp); return userOp; } @@ -394,36 +426,11 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart newCallData = this.getExecuteBatchCallData(batchTo, batchValue, batchData); } - let finalUserOp: Partial = { + const finalUserOp: Partial = { ...userOp, callData: newCallData, }; - // Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) - try { - delete finalUserOp.callGasLimit; - delete finalUserOp.verificationGasLimit; - delete finalUserOp.preVerificationGas; - - // Maybe send paymasterAndData since we know it's for Token paymaster - /*finalUserOp.paymasterAndData = - '0x00000f7365ca6c59a2c93719ad53d567ed49c14c000000000000000000000000000000000000000000000000000000000064e3d3890000000000000000000000000000000000000000000000000000000064e3cc81000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e583100000000000000000000000000000f7748595e46527413574a9327942e744e910000000000000000000000000000000000000000000000000000000063ac7f6c000000000000000000000000000000000000000000000000000000000010c8e07bf61410b71700f943499adfd23e50fb16040d587acb0a5e60ac8576cdbb4c8044f00579a1fc3f294e7dc4a5eb557a7193008343aa36225bddcfbd4fd15646031c'*/ - - // Review: and handle the case when mock pnd fails with AA31 during simulation. - - finalUserOp = await this.estimateUserOpGas(finalUserOp); - const cgl = ethers.BigNumber.from(finalUserOp.callGasLimit); - if (finalUserOp.callGasLimit && cgl.lt(ethers.BigNumber.from("21000"))) { - return { - ...userOp, - callData: newCallData, - }; - } - Logger.log("userOp after estimation ", finalUserOp); - } catch (error) { - Logger.error("Failed to estimate gas for userOp with updated callData ", error); - Logger.log("sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); - } return finalUserOp; } } catch (error) { diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 0edc34842..72ce7723b 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -10,8 +10,15 @@ import { SmartAccount_v200__factory, SmartAccountFactory_v200__factory, } from "@biconomy/common"; -import { BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, CounterFactualAddressParam, BuildUserOpOptions } from "./utils/Types"; -import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; +import { + BiconomyTokenPaymasterRequest, + BiconomySmartAccountV2Config, + CounterFactualAddressParam, + BuildUserOpOptions, + Overrides, + NonceOptions, +} from "./utils/Types"; +import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; @@ -66,7 +73,6 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); - await instance.init(); instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 const defaultFallbackHandlerAddress = @@ -93,6 +99,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { instance.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); + await instance.init(); + return instance; } @@ -244,7 +252,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return "0x"; } - async signUserOp(userOp: Partial, params?: ModuleInfo): Promise { + async signUserOp(userOp: Partial, params?: SendUserOpParams): Promise { this.isActiveValidationModuleDefined(); const requiredFields: UserOperationKey[] = [ "sender", @@ -300,32 +308,69 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. * @returns Promise */ - async sendUserOp(userOp: Partial, params?: ModuleInfo): Promise { + async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { Logger.log("userOp received in base account ", userOp); delete userOp.signature; const userOperation = await this.signUserOp(userOp, params); - const bundlerResponse = await this.sendSignedUserOp(userOperation); + const bundlerResponse = await this.sendSignedUserOp(userOperation, params); return bundlerResponse; } + private async getBuildUserOpNonce(nonceOptions: NonceOptions | undefined): Promise { + let nonce = BigNumber.from(0); + try { + if (nonceOptions?.nonceOverride) { + nonce = BigNumber.from(nonceOptions?.nonceOverride); + } else { + const _nonceSpace = nonceOptions?.nonceKey ?? 0; + nonce = await this.getNonce(_nonceSpace); + } + } catch (error) { + // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account + Logger.log("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); + } + return nonce; + } + + private async getGasFeeValues( + overrides: Overrides | undefined, + skipBundlerGasEstimation: boolean | undefined, + ): Promise<{ maxFeePerGas?: BigNumberish | undefined; maxPriorityFeePerGas?: BigNumberish | undefined }> { + const gasFeeValues = { + maxFeePerGas: overrides?.maxFeePerGas, + maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas, + }; + try { + if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (skipBundlerGasEstimation ?? true)) { + const gasFeeEstimation = await this.bundler.getGasFeeValues(); + gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; + gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; + } + return gasFeeValues; + } catch (error: any) { + Logger.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); + return gasFeeValues; + } + } + async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { const to = transactions.map((element: Transaction) => element.to); const data = transactions.map((element: Transaction) => element.data ?? "0x"); const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); - // Queue promises to fetch independent data. - const nonceFetchPromise = (async () => { - const _nonceSpace = buildUseropDto?.nonceOptions?.nonceKey ?? 0; - const nonce = await this.getNonce(_nonceSpace); - return nonce; - })(); const initCodeFetchPromise = this.getInitCode(); const dummySignatureFetchPromise = this.getDummySignature(buildUseropDto?.params); + const [nonceFromFetch, initCode, signature, finalGasFeeValue] = await Promise.all([ + this.getBuildUserOpNonce(buildUseropDto?.nonceOptions), + initCodeFetchPromise, + dummySignatureFetchPromise, + this.getGasFeeValues(buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation), + ]); + if (transactions.length === 0) { throw new Error("Transactions array cannot be empty"); } - let callData = ""; if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { callData = await this.encodeExecuteBatch(to, value, data); @@ -334,34 +379,27 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { callData = await this.encodeExecute(to[0], value[0], data[0]); } - let nonce = BigNumber.from(0); - try { - if (buildUseropDto?.nonceOptions?.nonceOverride) { - nonce = BigNumber.from(buildUseropDto?.nonceOptions?.nonceOverride); - } else { - nonce = await nonceFetchPromise; - } - } catch (error) { - // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account - } - let userOp: Partial = { sender: await this.getAccountAddress(), - nonce, - initCode: await initCodeFetchPromise, + nonce: nonceFromFetch, + initCode, callData: callData, + maxFeePerGas: finalGasFeeValue.maxFeePerGas || undefined, + maxPriorityFeePerGas: finalGasFeeValue.maxPriorityFeePerGas || undefined, }; // for this Smart Account current validation module dummy signature will be used to estimate gas - userOp.signature = await dummySignatureFetchPromise; + userOp.signature = signature; // Note: Can change the default behaviour of calling estimations using bundler/local - userOp = await this.estimateUserOpGas(userOp, buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation); + userOp = await this.estimateUserOpGas( + userOp, + buildUseropDto?.overrides, + buildUseropDto?.skipBundlerGasEstimation, + buildUseropDto?.paymasterServiceData, + ); Logger.log("UserOp after estimation ", userOp); - // Do not populate paymasterAndData as part of buildUserOp as it may not have all necessary details - userOp.paymasterAndData = "0x"; // await this.getPaymasterAndData(userOp) - return userOp; } @@ -460,26 +498,11 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData); } - let finalUserOp: Partial = { + const finalUserOp: Partial = { ...userOp, callData: newCallData, }; - // Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) - try { - finalUserOp = await this.estimateUserOpGas(finalUserOp); - const callGasLimit = ethers.BigNumber.from(finalUserOp.callGasLimit); - if (finalUserOp.callGasLimit && callGasLimit.lt(ethers.BigNumber.from("21000"))) { - return { - ...userOp, - callData: newCallData, - }; - } - Logger.log("UserOp after estimation ", finalUserOp); - } catch (error) { - Logger.error("Failed to estimate gas for userOp with updated callData ", error); - Logger.log("Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); - } return finalUserOp; } } catch (error) { @@ -490,7 +513,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return userOp; } - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { + async signUserOpHash(userOpHash: string, params?: SendUserOpParams): Promise { this.isActiveValidationModuleDefined(); const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index fcc57a242..b23420398 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -10,7 +10,8 @@ import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; import { Logger } from "@biconomy/common"; import { IEntryPoint } from "@account-abstraction/contracts"; -import { SmartAccountConfig, Overrides } from "./utils/Types"; +import { SponsorUserOperationDto, BiconomyPaymaster, IHybridPaymaster, PaymasterMode } from "@biconomy/paymaster"; +import { SmartAccountConfig, Overrides, SendUserOpDto } from "./utils/Types"; type UserOperationKey = keyof UserOperation; @@ -48,7 +49,7 @@ export abstract class SmartAccount implements ISmartAccount { private validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { if (!userOp[field]) { - throw new Error(`${field} is missing`); + throw new Error(`${String(field)} is missing in the UserOp`); } } return true; @@ -102,12 +103,13 @@ export abstract class SmartAccount implements ISmartAccount { userOp: Partial, overrides?: Overrides, skipBundlerGasEstimation?: boolean, + paymasterServiceData?: SponsorUserOperationDto, ): Promise> { const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; this.validateUserOp(userOp, requiredFields); let finalUserOp = userOp; - const skipBundlerCall = skipBundlerGasEstimation ?? false; + const skipBundlerCall = skipBundlerGasEstimation ?? true; // Override gas values in userOp if provided in overrides params if (overrides) { userOp = { ...userOp, ...overrides }; @@ -115,17 +117,33 @@ export abstract class SmartAccount implements ISmartAccount { Logger.log("userOp in estimation", userOp); - if (!this.bundler || skipBundlerCall) { - if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - // if no bundler url is provided run offchain logic to assign following values of UserOp - // maxFeePerGas, maxPriorityFeePerGas, verificationGasLimit, callGasLimit, preVerificationGas - finalUserOp = await this.calculateUserOpGasValues(userOp); + if (skipBundlerCall) { + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { + if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { + throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); + } + // Making call to paymaster to get gas estimations for userOp + const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( + this.paymaster as IHybridPaymaster + ).getPaymasterAndData(userOp, paymasterServiceData); + finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + } else { + Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); + finalUserOp = await this.calculateUserOpGasValues(userOp); + finalUserOp.paymasterAndData = "0x"; + } } else { + if (!this.bundler) throw new Error("Bundler is not provided"); + // TODO: is this still needed to delete? delete userOp.maxFeePerGas; delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas(userOp); + // if neither user sent gas fee nor the bundler, estimate gas from provider if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { const feeData = await this.provider.getFeeData(); finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); @@ -137,6 +155,7 @@ export abstract class SmartAccount implements ISmartAccount { finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.paymasterAndData = "0x"; } return finalUserOp; } @@ -239,11 +258,11 @@ export abstract class SmartAccount implements ISmartAccount { * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. * @returns Promise */ - async sendUserOp(userOp: Partial): Promise { + async sendUserOp(userOp: Partial, params?: SendUserOpDto): Promise { Logger.log("userOp received in base account ", userOp); delete userOp.signature; const userOperation = await this.signUserOp(userOp); - const bundlerResponse = await this.sendSignedUserOp(userOperation); + const bundlerResponse = await this.sendSignedUserOp(userOperation, params); return bundlerResponse; } @@ -253,7 +272,7 @@ export abstract class SmartAccount implements ISmartAccount { * @description This function call will take 'signedUserOp' as input and send it to the bundler * @returns */ - async sendSignedUserOp(userOp: UserOperation): Promise { + async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpDto): Promise { const requiredFields: UserOperationKey[] = [ "sender", "nonce", @@ -271,7 +290,7 @@ export abstract class SmartAccount implements ISmartAccount { Logger.log("userOp validated"); if (!this.bundler) throw new Error("Bundler is not provided"); Logger.log("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp); + const bundlerResponse = await this.bundler.sendUserOp(userOp, params); return bundlerResponse; } } diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index 784f36f10..d43249476 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -6,3 +6,4 @@ export * from "./SmartAccount"; export * from "./BiconomySmartAccount"; export * from "./utils/Constants"; export * from "./BiconomySmartAccountV2"; +export * from "./utils/VoidSigner"; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 5e4c578e7..250d69c47 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -2,7 +2,7 @@ import { Signer } from "ethers"; import { ChainId } from "@biconomy/core-types"; import { BigNumberish } from "ethers"; import { IBundler } from "@biconomy/bundler"; -import { IPaymaster, PaymasterFeeQuote } from "@biconomy/paymaster"; +import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Provider } from "@ethersproject/providers"; import { GasOverheads } from "./Preverificaiton"; @@ -80,6 +80,7 @@ export type BuildUserOpOptions = { params?: ModuleInfo; nonceOptions?: NonceOptions; forceEncodeForBatch?: boolean; + paymasterServiceData?: SponsorUserOperationDto; }; export type NonceOptions = { @@ -87,6 +88,19 @@ export type NonceOptions = { nonceOverride?: number; }; +// Used in AccountV1 +export type SendUserOpDto = { + signer?: Signer; + simulationType?: SimulationType; +}; + +// Generic options in AccountV2 +export type SendUserOpOptions = { + simulationType?: SimulationType; +}; + +export type SimulationType = "validation" | "validation_and_execution"; + export type Overrides = { callGasLimit?: BigNumberish; verificationGasLimit?: BigNumberish; diff --git a/packages/account/src/utils/VoidSigner.ts b/packages/account/src/utils/VoidSigner.ts new file mode 100644 index 000000000..d028c56ad --- /dev/null +++ b/packages/account/src/utils/VoidSigner.ts @@ -0,0 +1,57 @@ +import { Provider, TransactionRequest } from "@ethersproject/providers"; +import { BigNumberish, BytesLike, Bytes, Signer } from "ethers"; +import { LogLevel, Logger } from "@ethersproject/logger"; +const logger = new Logger("signer"); + +export interface TypedDataDomain { + name?: string; + version?: string; + chainId?: BigNumberish; + verifyingContract?: string; + salt?: BytesLike; +} + +export interface TypedDataField { + name: string; + type: string; +} + +export type Deferrable = { + [K in keyof T]: T[K] | Promise; +}; + +export class VoidSigner extends Signer { + readonly address: string; + + readonly provider?: Provider; + + constructor(_address: string, _provider?: Provider) { + super(); + this.address = _address; + this.provider = _provider; + } + + getAddress(): Promise { + return Promise.resolve(this.address); + } + + _fail(message: string, operation: string): Promise { + return Promise.resolve().then(() => { + logger.throwError(message, Logger.errors.UNSUPPORTED_OPERATION, { operation: operation }); + }); + } + + signMessage(message: Bytes | string): Promise { + logger._log(LogLevel.INFO, [message]); + return this._fail("VoidSigner cannot sign messages", "signMessage"); + } + + signTransaction(transaction: Deferrable): Promise { + logger._log(LogLevel.INFO, [transaction]); + return this._fail("VoidSigner cannot sign transactions", "signTransaction"); + } + + connect(provider: Provider): VoidSigner { + return new VoidSigner(this.address, provider); + } +} diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 0ebc9da2a..cea9f406c 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -1,5 +1,5 @@ import { EntryPoint, EntryPoint__factory, UserOperationStruct, SimpleAccountFactory__factory } from "@account-abstraction/contracts"; -import { Wallet, ethers } from "ethers"; +import { VoidSigner, Wallet, ethers } from "ethers"; import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; import { @@ -81,10 +81,6 @@ describe("BiconomySmartAccountV2 API Specs", () => { // console.log('account api provider ', accountAPI.provider) - accountAPI = await accountAPI.init(); - - console.log("Account address ", accountAPI.accountAddress); - const counterFactualAddress = await accountAPI.getAccountAddress(); console.log("Counterfactual address ", counterFactualAddress); @@ -144,7 +140,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); - }); + }, 10000); // on github runner it takes more time than 5000ms // TODO // possibly use local bundler API from image @@ -337,6 +333,31 @@ describe("BiconomySmartAccountV2 API Specs", () => { // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); }, 10000); // on github runner it takes more time than 5000ms + it("Creates another replicated instance using void signer", async () => { + const newmodule = await ECDSAOwnershipValidationModule.create({ + signer: new VoidSigner(await owner.getAddress()), + moduleAddress: ecdsaModule.address, + }); + + const accountAPI2 = await BiconomySmartAccountV2.create({ + chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", + // paymaster: paymaster, + // bundler: bundler, + entryPointAddress: entryPoint.address, + factoryAddress: accountFactory.address, + implementationAddress: accountAPI.getImplementationAddress(), + defaultFallbackHandler: await accountFactory.minimalHandler(), + defaultValidationModule: newmodule, + activeValidationModule: newmodule, + }); + + const address = await accountAPI2.getAccountAddress(); + console.log("account address ", address); + + expect(address).toBe(accountAPI.accountAddress); + }, 10000); + // TODO // 1. sendSignedUserOp() // 2. sendUserOp() diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 24399febf..43668d25e 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -1,7 +1,7 @@ import { IBundler } from "./interfaces/IBundler"; import { UserOperation, ChainId } from "@biconomy/core-types"; import { - GetUserOperationResponse, + GetUserOperationReceiptResponse, GetUserOpByHashResponse, Bundlerconfig, UserOpResponse, @@ -10,11 +10,21 @@ import { SendUserOpResponse, UserOpGasResponse, UserOpByHashResponse, + SendUserOpOptions, + GetGasFeeValuesResponse, + GasFeeValues, + UserOpStatus, + GetUserOperationStatusResponse, } from "./utils/Types"; import { resolveProperties } from "ethers/lib/utils"; import { deepHexlify, sendRequest, getTimestampInSeconds, HttpMethod, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; import { transformUserOP } from "./utils/HelperFunction"; -import { UserOpReceiptIntervals } from "./utils/Constants"; +import { + UserOpReceiptIntervals, + UserOpWaitForTxHashIntervals, + UserOpWaitForTxHashMaxDurationIntervals, + UserOpReceiptMaxDurationIntervals, +} from "./utils/Constants"; import { JsonRpcProvider } from "@ethersproject/providers"; /** @@ -24,13 +34,34 @@ import { JsonRpcProvider } from "@ethersproject/providers"; */ export class Bundler implements IBundler { // eslint-disable-next-line no-unused-vars - UserOpReceiptIntervals: { [key in ChainId]?: number }; + UserOpReceiptIntervals!: { [key in ChainId]?: number }; + + UserOpWaitForTxHashIntervals!: { [key in ChainId]?: number }; + + UserOpReceiptMaxDurationIntervals!: { [key in ChainId]?: number }; + + UserOpWaitForTxHashMaxDurationIntervals!: { [key in ChainId]?: number }; constructor(readonly bundlerConfig: Bundlerconfig) { this.UserOpReceiptIntervals = { ...UserOpReceiptIntervals, ...bundlerConfig.userOpReceiptIntervals, }; + + this.UserOpWaitForTxHashIntervals = { + ...UserOpWaitForTxHashIntervals, + ...bundlerConfig.userOpWaitForTxHashIntervals, + }; + + this.UserOpReceiptMaxDurationIntervals = { + ...UserOpReceiptMaxDurationIntervals, + ...bundlerConfig.userOpReceiptMaxDurationIntervals, + }; + + this.UserOpWaitForTxHashMaxDurationIntervals = { + ...UserOpWaitForTxHashMaxDurationIntervals, + ...bundlerConfig.userOpWaitForTxHashMaxDurationIntervals, + }; } private getBundlerUrl(): string { @@ -78,12 +109,15 @@ export class Bundler implements IBundler { * @description This function will send signed userOp to bundler to get mined on chain * @returns Promise */ - async sendUserOp(userOp: UserOperation): Promise { + async sendUserOp(userOp: UserOperation, simulationParam?: SendUserOpOptions): Promise { const chainId = this.bundlerConfig.chainId; // transformUserOP will convert all bigNumber values to string userOp = transformUserOP(userOp); const hexifiedUserOp = deepHexlify(await resolveProperties(userOp)); - const params = [hexifiedUserOp, this.bundlerConfig.entryPointAddress]; + const simType = { + simulation_type: simulationParam?.simulationType || "validation", + }; + const params = [hexifiedUserOp, this.bundlerConfig.entryPointAddress, simType]; const bundlerUrl = this.getBundlerUrl(); const sendUserOperationResponse: SendUserOpResponse = await sendRequest({ url: bundlerUrl, @@ -99,7 +133,12 @@ export class Bundler implements IBundler { userOpHash: sendUserOperationResponse.result, wait: (confirmations?: number): Promise => { const provider = new JsonRpcProvider(RPC_PROVIDER_URLS[chainId]); + // Note: maxDuration can be defined per chainId + const maxDuration = this.UserOpReceiptMaxDurationIntervals[chainId] || 30000; // default 30 seconds + let totalDuration = 0; + return new Promise((resolve, reject) => { + const intervalValue = this.UserOpReceiptIntervals[chainId] || 5000; // default 5 seconds const intervalId = setInterval(async () => { try { const userOpResponse = await this.getUserOpReceipt(sendUserOperationResponse.result); @@ -119,7 +158,52 @@ export class Bundler implements IBundler { clearInterval(intervalId); reject(error); } - }, this.UserOpReceiptIntervals[chainId]); + + totalDuration += intervalValue; + if (totalDuration >= maxDuration) { + clearInterval(intervalId); + reject( + new Error( + `Exceeded maximum duration (${maxDuration / 1000} sec) waiting to get receipt for userOpHash ${ + sendUserOperationResponse.result + }. Try getting the receipt manually using eth_getUserOperationReceipt rpc method on bundler`, + ), + ); + } + }, intervalValue); + }); + }, + waitForTxHash: (): Promise => { + const maxDuration = this.UserOpWaitForTxHashMaxDurationIntervals[chainId] || 20000; // default 20 seconds + let totalDuration = 0; + + return new Promise((resolve, reject) => { + const intervalValue = this.UserOpWaitForTxHashIntervals[chainId] || 500; // default 0.5 seconds + const intervalId = setInterval(() => { + this.getUserOpStatus(sendUserOperationResponse.result) + .then((userOpStatus) => { + if (userOpStatus && userOpStatus.state && userOpStatus.transactionHash) { + clearInterval(intervalId); + resolve(userOpStatus); + } + }) + .catch((error) => { + clearInterval(intervalId); + reject(error); + }); + + totalDuration += intervalValue; + if (totalDuration >= maxDuration) { + clearInterval(intervalId); + reject( + new Error( + `Exceeded maximum duration (${maxDuration / 1000} sec) waiting to get receipt for userOpHash ${ + sendUserOperationResponse.result + }. Try getting the receipt manually using eth_getUserOperationReceipt rpc method on bundler`, + ), + ); + } + }, intervalValue); }); }, }; @@ -134,7 +218,7 @@ export class Bundler implements IBundler { */ async getUserOpReceipt(userOpHash: string): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetUserOperationResponse = await sendRequest({ + const response: GetUserOperationReceiptResponse = await sendRequest({ url: bundlerUrl, method: HttpMethod.Post, body: { @@ -148,6 +232,28 @@ export class Bundler implements IBundler { return userOpReceipt; } + /** + * + * @param userOpHash + * @description This function will return userOpReceipt for a given userOpHash + * @returns Promise + */ + async getUserOpStatus(userOpHash: string): Promise { + const bundlerUrl = this.getBundlerUrl(); + const response: GetUserOperationStatusResponse = await sendRequest({ + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "biconomy_getUserOperationStatus", + params: [userOpHash], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, + }); + const userOpStatus: UserOpStatus = response.result; + return userOpStatus; + } + /** * * @param userOpHash @@ -170,4 +276,22 @@ export class Bundler implements IBundler { const userOpByHashResponse: UserOpByHashResponse = response.result; return userOpByHashResponse; } + + /** + * @description This function will return the gas fee values + */ + async getGasFeeValues(): Promise { + const bundlerUrl = this.getBundlerUrl(); + const response: GetGasFeeValuesResponse = await sendRequest({ + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "biconomy_getGasFeeValues", + params: [], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, + }); + return response.result; + } } diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts index a64c1151d..bf98a39e5 100644 --- a/packages/bundler/src/interfaces/IBundler.ts +++ b/packages/bundler/src/interfaces/IBundler.ts @@ -1,9 +1,19 @@ -import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse } from "../utils/Types"; +import { + UserOpResponse, + UserOpGasResponse, + UserOpReceipt, + UserOpByHashResponse, + SendUserOpOptions, + GasFeeValues, + UserOpStatus, +} from "../utils/Types"; import { UserOperation } from "@biconomy/core-types"; export interface IBundler { estimateUserOpGas(_userOp: Partial): Promise; - sendUserOp(_userOp: UserOperation): Promise; + sendUserOp(_userOp: UserOperation, _simulationParam?: SendUserOpOptions): Promise; getUserOpReceipt(_userOpHash: string): Promise; getUserOpByHash(_userOpHash: string): Promise; + getGasFeeValues(): Promise; + getUserOpStatus(_userOpHash: string): Promise; } diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index 13f89d7b3..7892814a1 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -3,26 +3,125 @@ import { ChainId } from "@biconomy/core-types"; // eslint-disable-next-line no-unused-vars export const UserOpReceiptIntervals: { [key in ChainId]?: number } = { [ChainId.MAINNET]: 10000, - [ChainId.GOERLI]: 5000, - [ChainId.POLYGON_MUMBAI]: 5000, - [ChainId.POLYGON_MAINNET]: 5000, - [ChainId.BSC_TESTNET]: 5000, - [ChainId.BSC_MAINNET]: 5000, - [ChainId.POLYGON_ZKEVM_TESTNET]: 5000, - [ChainId.POLYGON_ZKEVM_MAINNET]: 5000, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 5000, - [ChainId.ARBITRUM_ONE_MAINNET]: 5000, - [ChainId.ARBITRUM_NOVA_MAINNET]: 5000, - [ChainId.OPTIMISM_MAINNET]: 5000, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 5000, - [ChainId.AVALANCHE_MAINNET]: 5000, - [ChainId.AVALANCHE_TESTNET]: 5000, - [ChainId.MOONBEAM_MAINNET]: 5000, - [ChainId.BASE_GOERLI_TESTNET]: 5000, - [ChainId.BASE_MAINNET]: 5000, - [ChainId.LINEA_TESTNET]: 5000, - [ChainId.MANTLE_MAINNET]: 5000, - [ChainId.MANTLE_TESTNET]: 5000, - [ChainId.OPBNB_MAINNET]: 5000, - [ChainId.OPBNB_TESTNET]: 5000, + [ChainId.GOERLI]: 2000, + [ChainId.POLYGON_MUMBAI]: 2000, + [ChainId.POLYGON_MAINNET]: 2000, + [ChainId.BSC_TESTNET]: 2000, + [ChainId.BSC_MAINNET]: 2000, + [ChainId.POLYGON_ZKEVM_TESTNET]: 2000, + [ChainId.POLYGON_ZKEVM_MAINNET]: 2000, + [ChainId.ARBITRUM_GOERLI_TESTNET]: 2000, + [ChainId.ARBITRUM_ONE_MAINNET]: 2000, + [ChainId.ARBITRUM_NOVA_MAINNET]: 2000, + [ChainId.OPTIMISM_MAINNET]: 2000, + [ChainId.OPTIMISM_GOERLI_TESTNET]: 2000, + [ChainId.AVALANCHE_MAINNET]: 2000, + [ChainId.AVALANCHE_TESTNET]: 2000, + [ChainId.MOONBEAM_MAINNET]: 2000, + [ChainId.BASE_GOERLI_TESTNET]: 2000, + [ChainId.BASE_MAINNET]: 2000, + [ChainId.LINEA_TESTNET]: 2000, + [ChainId.LINEA_MAINNET]: 2000, + [ChainId.MANTLE_MAINNET]: 2000, + [ChainId.MANTLE_TESTNET]: 2000, + [ChainId.OPBNB_MAINNET]: 2000, + [ChainId.OPBNB_TESTNET]: 2000, + [ChainId.ASTAR_MAINNET]: 2000, + [ChainId.ASTAR_TESTNET]: 2000, + [ChainId.CHILIZ_MAINNET]: 2000, + [ChainId.CHILIZ_TESTNET]: 2000, +}; + +// Note: Reduced by 1/10th.. can reduce more +export const UserOpWaitForTxHashIntervals: { [key in ChainId]?: number } = { + [ChainId.MAINNET]: 1000, + [ChainId.GOERLI]: 500, + [ChainId.POLYGON_MUMBAI]: 500, + [ChainId.POLYGON_MAINNET]: 500, + [ChainId.BSC_TESTNET]: 500, + [ChainId.BSC_MAINNET]: 500, + [ChainId.POLYGON_ZKEVM_TESTNET]: 500, + [ChainId.POLYGON_ZKEVM_MAINNET]: 500, + [ChainId.ARBITRUM_GOERLI_TESTNET]: 500, + [ChainId.ARBITRUM_ONE_MAINNET]: 500, + [ChainId.ARBITRUM_NOVA_MAINNET]: 500, + [ChainId.OPTIMISM_MAINNET]: 500, + [ChainId.OPTIMISM_GOERLI_TESTNET]: 500, + [ChainId.AVALANCHE_MAINNET]: 500, + [ChainId.AVALANCHE_TESTNET]: 500, + [ChainId.MOONBEAM_MAINNET]: 500, + [ChainId.BASE_GOERLI_TESTNET]: 500, + [ChainId.BASE_MAINNET]: 500, + [ChainId.LINEA_TESTNET]: 500, + [ChainId.LINEA_MAINNET]: 500, + [ChainId.MANTLE_MAINNET]: 500, + [ChainId.MANTLE_TESTNET]: 500, + [ChainId.OPBNB_MAINNET]: 500, + [ChainId.OPBNB_TESTNET]: 500, + [ChainId.ASTAR_MAINNET]: 500, + [ChainId.ASTAR_TESTNET]: 500, + [ChainId.CHILIZ_MAINNET]: 500, + [ChainId.CHILIZ_TESTNET]: 500, +}; + +export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = { + [ChainId.MAINNET]: 300000, + [ChainId.GOERLI]: 30000, + [ChainId.POLYGON_MUMBAI]: 30000, + [ChainId.POLYGON_MAINNET]: 30000, + [ChainId.BSC_TESTNET]: 30000, + [ChainId.BSC_MAINNET]: 30000, + [ChainId.POLYGON_ZKEVM_TESTNET]: 30000, + [ChainId.POLYGON_ZKEVM_MAINNET]: 30000, + [ChainId.ARBITRUM_GOERLI_TESTNET]: 30000, + [ChainId.ARBITRUM_ONE_MAINNET]: 30000, + [ChainId.ARBITRUM_NOVA_MAINNET]: 30000, + [ChainId.OPTIMISM_MAINNET]: 30000, + [ChainId.OPTIMISM_GOERLI_TESTNET]: 30000, + [ChainId.AVALANCHE_MAINNET]: 30000, + [ChainId.AVALANCHE_TESTNET]: 30000, + [ChainId.MOONBEAM_MAINNET]: 30000, + [ChainId.BASE_GOERLI_TESTNET]: 30000, + [ChainId.BASE_MAINNET]: 30000, + [ChainId.LINEA_TESTNET]: 30000, + [ChainId.LINEA_MAINNET]: 30000, + [ChainId.MANTLE_MAINNET]: 30000, + [ChainId.MANTLE_TESTNET]: 30000, + [ChainId.OPBNB_MAINNET]: 30000, + [ChainId.OPBNB_TESTNET]: 30000, + [ChainId.ASTAR_MAINNET]: 30000, + [ChainId.ASTAR_TESTNET]: 30000, + [ChainId.CHILIZ_MAINNET]: 30000, + [ChainId.CHILIZ_TESTNET]: 30000, +}; + +export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: number } = { + [ChainId.MAINNET]: 20000, + [ChainId.GOERLI]: 20000, + [ChainId.POLYGON_MUMBAI]: 20000, + [ChainId.POLYGON_MAINNET]: 20000, + [ChainId.BSC_TESTNET]: 20000, + [ChainId.BSC_MAINNET]: 20000, + [ChainId.POLYGON_ZKEVM_TESTNET]: 20000, + [ChainId.POLYGON_ZKEVM_MAINNET]: 20000, + [ChainId.ARBITRUM_GOERLI_TESTNET]: 20000, + [ChainId.ARBITRUM_ONE_MAINNET]: 20000, + [ChainId.ARBITRUM_NOVA_MAINNET]: 20000, + [ChainId.OPTIMISM_MAINNET]: 20000, + [ChainId.OPTIMISM_GOERLI_TESTNET]: 20000, + [ChainId.AVALANCHE_MAINNET]: 20000, + [ChainId.AVALANCHE_TESTNET]: 20000, + [ChainId.MOONBEAM_MAINNET]: 20000, + [ChainId.BASE_GOERLI_TESTNET]: 20000, + [ChainId.BASE_MAINNET]: 20000, + [ChainId.LINEA_TESTNET]: 20000, + [ChainId.LINEA_MAINNET]: 20000, + [ChainId.MANTLE_MAINNET]: 20000, + [ChainId.MANTLE_TESTNET]: 20000, + [ChainId.OPBNB_MAINNET]: 20000, + [ChainId.OPBNB_TESTNET]: 20000, + [ChainId.ASTAR_MAINNET]: 20000, + [ChainId.ASTAR_TESTNET]: 20000, + [ChainId.CHILIZ_MAINNET]: 20000, + [ChainId.CHILIZ_TESTNET]: 20000, }; diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index 17e1e8def..c1af046ed 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -7,6 +7,9 @@ export type Bundlerconfig = { chainId: ChainId; // eslint-disable-next-line no-unused-vars userOpReceiptIntervals?: { [key in ChainId]?: number }; + userOpWaitForTxHashIntervals?: { [key in ChainId]?: number }; + userOpReceiptMaxDurationIntervals?: { [key in ChainId]?: number }; + userOpWaitForTxHashMaxDurationIntervals?: { [key in ChainId]?: number }; }; export type UserOpReceipt = { @@ -23,14 +26,34 @@ export type UserOpReceipt = { receipt: ethers.providers.TransactionReceipt; }; +// review +export type UserOpStatus = { + state: string; // for now // could be an enum + transactionHash?: string; + userOperationReceipt?: UserOpReceipt; +}; + +export type SendUserOpOptions = { + simulationType?: SimulationType; +}; + +export type SimulationType = "validation" | "validation_and_execution"; + // Converted to JsonRpcResponse with strict type -export type GetUserOperationResponse = { +export type GetUserOperationReceiptResponse = { jsonrpc: string; id: number; result: UserOpReceipt; error?: JsonRpcError; }; +export type GetUserOperationStatusResponse = { + jsonrpc: string; + id: number; + result: UserOpStatus; + error?: JsonRpcError; +}; + // Converted to JsonRpcResponse with strict type export type SendUserOpResponse = { jsonrpc: string; @@ -42,6 +65,8 @@ export type SendUserOpResponse = { export type UserOpResponse = { userOpHash: string; wait(_confirmations?: number): Promise; + // Review: waitForTxHash(): vs waitForTxHash?(): + waitForTxHash(): Promise; }; // Converted to JsonRpcResponse with strict type @@ -80,3 +105,14 @@ export type JsonRpcError = { message: string; data: any; }; + +export type GetGasFeeValuesResponse = { + jsonrpc: string; + id: number; + result: GasFeeValues; + error?: JsonRpcError; +}; +export type GasFeeValues = { + maxPriorityFeePerGas: string; + maxFeePerGas: string; +}; diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index 6b9a5ff10..704bd526f 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -82,7 +82,7 @@ VERSION bump only * Type added for PaymasterServiceData + reordering of params ([fae8b3a](https://github.com/bcnmy/biconomy-client-sdk/commit/fae8b3a02a5e810a9a40674d27f389b89199bb62)) * logic changed to accept paymasterServiceData ([6daaf37](https://github.com/bcnmy/biconomy-client-sdk/commit/6daaf37855a13fa6e12fdbab16a7e980b4631475)) * UserOpGasFields for fetching gas and gas prices from bundler (https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1) -* skipEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) +* skipBundlerGasEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) * fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) diff --git a/packages/common/package.json b/packages/common/package.json index 1890c8719..5ce64628d 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -51,6 +51,7 @@ "concurrently": "^7.4.0", "debug": "^4.3.4", "ethers": "^5.7.0", + "node-fetch": "^2.7.0", "typechain": "^8.1.1" }, "devDependencies": { diff --git a/packages/common/src/Constants.ts b/packages/common/src/Constants.ts index 73c4a506b..4c291a810 100644 --- a/packages/common/src/Constants.ts +++ b/packages/common/src/Constants.ts @@ -23,8 +23,13 @@ export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { [ChainId.BASE_GOERLI_TESTNET]: "https://goerli.base.org", [ChainId.BASE_MAINNET]: "https://developer-access-mainnet.base.org", [ChainId.LINEA_TESTNET]: "https://rpc.goerli.linea.build", + [ChainId.LINEA_MAINNET]: "https://rpc.linea.build", [ChainId.MANTLE_MAINNET]: "https://rpc.mantle.xyz", [ChainId.MANTLE_TESTNET]: "https://rpc.testnet.mantle.xyz", [ChainId.OPBNB_MAINNET]: "https://opbnb-mainnet-rpc.bnbchain.org", [ChainId.OPBNB_TESTNET]: "https://opbnb-testnet-rpc.bnbchain.org", + [ChainId.ASTAR_MAINNET]: "https://evm.astar.network", + [ChainId.ASTAR_TESTNET]: "https://evm.shibuya.astar.network", + [ChainId.CHILIZ_MAINNET]: "https://rpc.ankr.com/chiliz", + [ChainId.CHILIZ_TESTNET]: "https://spicy-rpc.chiliz.com", }; diff --git a/packages/common/src/httpRequests.ts b/packages/common/src/httpRequests.ts index 40f414ad7..d4923d2b6 100644 --- a/packages/common/src/httpRequests.ts +++ b/packages/common/src/httpRequests.ts @@ -1,3 +1,4 @@ +import fetch from "node-fetch"; import { Logger } from "./Logger"; export enum HttpMethod { diff --git a/packages/core-types/CHANGELOG.md b/packages/core-types/CHANGELOG.md index 59ab27456..3eca80798 100644 --- a/packages/core-types/CHANGELOG.md +++ b/packages/core-types/CHANGELOG.md @@ -67,7 +67,7 @@ VERSION bump only - Type added for PaymasterServiceData + reordering of params ([fae8b3a](https://github.com/bcnmy/biconomy-client-sdk/commit/fae8b3a02a5e810a9a40674d27f389b89199bb62)) - logic changed to accept paymasterServiceData ([6daaf37](https://github.com/bcnmy/biconomy-client-sdk/commit/6daaf37855a13fa6e12fdbab16a7e980b4631475)) - UserOpGasFields for fetching gas and gas prices from bundler (https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1) -- skipEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) +- skipBundlerGasEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) - fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) ## 2.0.0 (2023-04-07) diff --git a/packages/core-types/src/ChainsTypes.ts b/packages/core-types/src/ChainsTypes.ts index b0491fcb8..6ab988d6f 100644 --- a/packages/core-types/src/ChainsTypes.ts +++ b/packages/core-types/src/ChainsTypes.ts @@ -1,31 +1,3 @@ -export enum ChainNames { - Mainnet = "mainnet", - Ropsten = "ropsten", - Rinkeby = "rinkeby", - Goerli = "goerli", - Kovan = "kovan", - Xdai = "xdai", - Bsc = "bsc", - BscTest = "bscTest", - Fantom = "fantom", - FantomTest = "fantomTest", - Matic = "matic", - Mumbai = "mumbai", - Aurora = "aurora", - AuroraTest = "auroraTest", - Avalanche = "avalanche", - Fuji = "fuji", - Optimism = "optimism", - OptimismKovan = "optimismKovan", - Arbitrum = "arbitrum", - ArbitrumTest = "arbitrumTest", - Moonbeam = "moonbeam", - Moonbase = "moonbase", - Celo = "celo", - CeloTest = "celoTest", -} - -// NOTE: Update chainId for networks we're planning to support export enum ChainId { // Ethereum MAINNET = 1, @@ -47,9 +19,14 @@ export enum ChainId { BASE_GOERLI_TESTNET = 84531, BASE_MAINNET = 8453, LINEA_TESTNET = 59140, + LINEA_MAINNET = 59144, MANTLE_MAINNET = 5000, MANTLE_TESTNET = 5001, OPBNB_MAINNET = 204, OPBNB_TESTNET = 5611, + ASTAR_MAINNET = 592, + ASTAR_TESTNET = 81, + CHILIZ_MAINNET = 88888, + CHILIZ_TESTNET = 88882, GANACHE = 1337, //Temp } diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index a41a2a6a9..ffd273223 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -100,14 +100,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // signer must be the same for all the sessions const sessionSigner = sessionParams[0].sessionSigner; - const userOpHashAndModuleAddress = ethers.utils.hexConcat([ - ethers.utils.hexZeroPad(userOpHash, 32), - ethers.utils.hexZeroPad(this.getSessionKeyManagerAddress(), 20), - ]); - - const resultingHash = ethers.utils.keccak256(userOpHashAndModuleAddress); - - const signature = await sessionSigner.signMessage(arrayify(resultingHash)); + const signature = await sessionSigner.signMessage(arrayify(userOpHash)); for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index 92ff6c5b3..fcae0f383 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -7,9 +7,9 @@ import { SessionKeyManagerModuleConfig, ModuleVersion, CreateSessionDataParams, - StorageType, ModuleInfo, CreateSessionDataResponse, + StorageType, } from "./utils/Types"; import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; @@ -67,10 +67,16 @@ export class SessionKeyManagerModule extends BaseValidationModule { txServiceUrl: moduleConfig.nodeClientUrl ?? NODE_CLIENT_URL, }); - if (!moduleConfig.storageType || moduleConfig.storageType === StorageType.LOCAL_STORAGE) { - instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); + if (moduleConfig.sessionStorageClient) { + instance.sessionStorageClient = moduleConfig.sessionStorageClient; } else { - throw new Error("Invalid storage type"); + switch (moduleConfig.storageType) { + case StorageType.LOCAL_STORAGE: + instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); + break; + default: + throw new Error("Invalid storage type"); + } } const existingSessionData = await instance.sessionStorageClient.getAllSessionData(); diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts index 59b31e147..cab7efbef 100644 --- a/packages/modules/src/utils/Constants.ts +++ b/packages/modules/src/utils/Constants.ts @@ -27,10 +27,10 @@ export const SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION = { V1_0_1: "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489", }; -export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = "0x000008dA71757C0E1D83CE56c823e25Aa49bC058"; +export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = "0x00000D09967410f8C76752A104c9848b57ebba55"; export const BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: "0x000008dA71757C0E1D83CE56c823e25Aa49bC058", + V1_0_0: "0x00000D09967410f8C76752A104c9848b57ebba55", }; export const DEFAULT_MULTICHAIN_MODULE = "0x000000824dc138db84FD9109fc154bdad332Aa8E"; diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 1c4e65b01..34c7e8f04 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,6 +1,7 @@ import { ChainId, UserOperation } from "@biconomy/core-types"; import { Signer } from "ethers"; import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; +import { ISessionStorage } from "interfaces/ISessionStorage"; export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' @@ -20,6 +21,7 @@ export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfi nodeClientUrl?: string; smartAccountAddress: string; storageType?: StorageType; + sessionStorageClient?: ISessionStorage; } export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleConfig { @@ -59,6 +61,12 @@ export type ModuleInfo = { batchSessionParams?: SessionParams[]; }; +export interface SendUserOpParams extends ModuleInfo { + simulationType?: SimulationType; +} + +export type SimulationType = "validation" | "validation_and_execution"; + export type CreateSessionDataResponse = { data: string; sessionIDInfo: Array; diff --git a/packages/node-client/CHANGELOG.md b/packages/node-client/CHANGELOG.md index 479c1cffd..b2f9ab90e 100644 --- a/packages/node-client/CHANGELOG.md +++ b/packages/node-client/CHANGELOG.md @@ -37,7 +37,7 @@ Version Bump Only. ### Features -* skipEstimation flag for gas ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) +* skipBundlerGasEstimation flag for gas ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) diff --git a/packages/node-client/README.md b/packages/node-client/README.md index f77c33226..b14934051 100644 --- a/packages/node-client/README.md +++ b/packages/node-client/README.md @@ -62,14 +62,14 @@ const balanceParams: BalancesDto = // is being supplied for initialization chainId: ChainId.MAINNET, // chainId of your choice - eoaAddress: address, + address: address, // If empty string you receive balances of all tokens watched by Indexer // you can only whitelist token addresses that are listed in token respository // specified above ^ tokenAddresses: [], }; -const balFromSdk = await nodeClient.getAlltokenBalances(balanceParams); +const balFromSdk = await nodeClient.getAllTokenBalances(balanceParams); console.info("balFromSdk ", balFromSdk); const usdBalFromSdk = await nodeClient.getTotalBalanceInUsd(balanceParams); diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts index 2f74b240c..c94937936 100644 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ b/packages/node-client/src/types/NodeClientTypes.ts @@ -39,7 +39,7 @@ export type SCWTransactionResponse = { export type BalancesDto = { chainId: number; - eoaAddress: string; + address: string; tokenAddresses: string[]; }; diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 405a0e50b..1734e23e6 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -19,7 +19,7 @@ import { IHybridPaymaster } from "./interfaces/IHybridPaymaster"; const defaultPaymasterConfig: PaymasterConfig = { paymasterUrl: "", - strictMode: true, // Set your desired default value for strictMode here + strictMode: false, // Set your desired default value for strictMode here }; /** * @dev Hybrid - Generic Gas Abstraction paymaster @@ -42,20 +42,24 @@ export class BiconomyPaymaster implements IHybridPaymaster): Promise> { userOp = await resolveProperties(userOp); - if (userOp.nonce !== null || userOp.nonce !== undefined) { + if (userOp.nonce !== null && userOp.nonce !== undefined) { userOp.nonce = BigNumber.from(userOp.nonce).toHexString(); } - if (userOp.callGasLimit !== null || userOp.callGasLimit !== undefined) { + if (userOp.callGasLimit !== null && userOp.callGasLimit !== undefined) { userOp.callGasLimit = BigNumber.from(userOp.callGasLimit).toString(); } - if (userOp.verificationGasLimit !== null || userOp.verificationGasLimit !== undefined) { + if (userOp.verificationGasLimit !== null && userOp.verificationGasLimit !== undefined) { userOp.verificationGasLimit = BigNumber.from(userOp.verificationGasLimit).toString(); } - if (userOp.preVerificationGas !== null || userOp.preVerificationGas !== undefined) { + if (userOp.preVerificationGas !== null && userOp.preVerificationGas !== undefined) { userOp.preVerificationGas = BigNumber.from(userOp.preVerificationGas).toString(); } - userOp.maxFeePerGas = BigNumber.from(userOp.maxFeePerGas).toHexString(); - userOp.maxPriorityFeePerGas = BigNumber.from(userOp.maxPriorityFeePerGas).toHexString(); + if (userOp.maxFeePerGas !== null && userOp.maxFeePerGas !== undefined) { + userOp.maxFeePerGas = BigNumber.from(userOp.maxFeePerGas).toString(); + } + if (userOp.maxPriorityFeePerGas !== null && userOp.maxPriorityFeePerGas !== undefined) { + userOp.maxPriorityFeePerGas = BigNumber.from(userOp.maxPriorityFeePerGas).toString(); + } userOp.signature = userOp.signature || "0x"; userOp.paymasterAndData = userOp.paymasterAndData || "0x"; return userOp; @@ -136,14 +140,14 @@ export class BiconomyPaymaster implements IHybridPaymaster A library to import the web3 social auth directly from Biconomy Sdk. - -## Usage - -```ts - -``` diff --git a/packages/web3-auth-native/package.json b/packages/web3-auth-native/package.json deleted file mode 100644 index 5fc0def8d..000000000 --- a/packages/web3-auth-native/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "name": "@biconomy/web3-auth-native", - "version": "3.1.0", - "description": "web3-auth expo react-native for biconomy sdk.", - "main": "dist/web3AuthNative.cjs.js", - "module": "dist/web3AuthNative.esm.js", - "source": "src/index.ts", - "types": "dist/types/index.d.ts", - "keywords": [ - "legos", - "batching", - "one-click", - "cross-chain", - "web3auth", - "react-native" - ], - "author": "livingrockrises ", - "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", - "license": "MIT", - "files": [ - "dist", - "src", - "README.md" - ], - "scripts": { - "start": "torus-scripts start", - "build": "torus-scripts build", - "lint:ts": "eslint --fix 'src/**/*.ts'", - "prepack": "npm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" - }, - "dependencies": { - "@biconomy/node-client": "^3.1.0", - "@toruslabs/openlogin": "^2.8.0", - "@toruslabs/openlogin-jrpc": "^2.9.0", - "@toruslabs/openlogin-utils": "^2.1.0", - "base64url": "^3.0.1", - "buffer": "^6.0.3", - "loglevel": "^1.8.1", - "react-native-url-polyfill": "^2.0.0" - }, - "peerDependencies": { - "@babel/runtime": "^7.x", - "react-native": "~0.68.2" - }, - "devDependencies": { - "@babel/runtime": "^7.20.1", - "@toruslabs/eslint-config-typescript": "1.2.0", - "@toruslabs/torus-scripts": "^1.3.0", - "@types/node": "^16", - "@types/react-native": "^0.69.3", - "@typescript-eslint/eslint-plugin": "^5.44.0", - "@typescript-eslint/parser": "^5.44.0", - "eslint": "^8.28.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-n": "^15.5.1", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-simple-import-sort": "^10.0.0", - "eslint-plugin-tsdoc": "^0.2.17", - "husky": "^8.0.3", - "lint-staged": "^14.0.1", - "prettier": "^3.0.3", - "react-native": "~0.72.4", - "rimraf": "^5.0.1", - "typescript": "^5.2.2" - } -} diff --git a/packages/web3-auth-native/src/SocialLogin.ts b/packages/web3-auth-native/src/SocialLogin.ts deleted file mode 100644 index a85530f1e..000000000 --- a/packages/web3-auth-native/src/SocialLogin.ts +++ /dev/null @@ -1,101 +0,0 @@ -import NodeClient, { WhiteListSignatureResponse } from '@biconomy/node-client' -import base64url from 'base64url' -import log from 'loglevel' -import { URL } from 'react-native-url-polyfill' - -import { IWebBrowser, WebBrowserAuthSessionResult } from './types/IWebBrowser' -import { SdkInitParams, SdkLoginParams, SdkLogoutParams, SocialLoginDto } from './types/sdk' -import { State } from './types/State' - -class SocialLogin { - initParams: SdkInitParams - - webBrowser: IWebBrowser - - nodeClient!: NodeClient - - private backendUrl: string - - private clientId: string - - constructor(socialLoginDto: SocialLoginDto) { - this.initParams = socialLoginDto.initParams - if (!this.initParams.sdkUrl) { - this.initParams.sdkUrl = 'https://sdk.openlogin.com' - } - this.webBrowser = socialLoginDto.webBrowser - this.clientId = - 'BDtxlmCXNAWQFGiiaiVY3Qb1aN-d7DQ82OhT6B-RBr5j_rGnrKAqbIkvLJlf-ofYlJRiNSHbnkeHlsh8j3ueuYY' - this.backendUrl = 'https://sdk-backend.prod.biconomy.io/v1' - this.nodeClient = new NodeClient({ txServiceUrl: this.backendUrl }) - } - - async whitelistUrl(origin: string): Promise { - const whiteListUrlResponse: WhiteListSignatureResponse = - await this.nodeClient.whitelistUrl(origin) - return whiteListUrlResponse.data - } - - async login(options: SdkLoginParams): Promise { - const result = await this.request('login', options.redirectUrl, options) - if (result.type !== 'success' || !result.url) { - log.error(`[Web3Auth] login flow failed with error type ${result.type}`) - throw new Error(`login flow failed with error type ${result.type}`) - } - - const fragment = new URL(result.url).hash - const decodedPayload = base64url.decode(fragment) - const state = JSON.parse(decodedPayload) - return state - } - - async logout(options: SdkLogoutParams): Promise { - const redirectUrl = options.redirectUrl || '/' - const result = await this.request('logout', redirectUrl, options) - - if (result.type !== 'success' || !result.url) { - log.error(`[Web3Auth] logout flow failed with error type ${result.type}`) - throw new Error(`logout flow failed with error type ${result.type}`) - } - } - - private async request( - path: string, - redirectUrl: string, - params: Record = {} - ): Promise { - const initParams = { - ...this.initParams, - clientId: this.clientId, - originData: params.originData, - network: this.initParams.network || 'mainnet', - ...(!!this.initParams.redirectUrl && { - redirectUrl: this.initParams.redirectUrl - }) - } - - const mergedParams = { - init: initParams, - params: { - ...params, - ...(!params.redirectUrl && { redirectUrl }) - } - } - - log.debug(`[Web3Auth] params passed to Web3Auth: ${mergedParams}`) - - const hash = base64url.encode(JSON.stringify(mergedParams)) - - const url = new URL(this.initParams.sdkUrl || '') - url.pathname = `${url.pathname}${path}` - url.hash = hash - - log.info( - `[Web3Auth] opening login screen in browser at ${url.href}, will redirect to ${redirectUrl}` - ) - - return this.webBrowser.openAuthSessionAsync(url.href, redirectUrl) - } -} - -export default SocialLogin diff --git a/packages/web3-auth-native/src/index.ts b/packages/web3-auth-native/src/index.ts deleted file mode 100644 index baf5608e1..000000000 --- a/packages/web3-auth-native/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import SocialLogin from './SocialLogin' - -export default SocialLogin -export * from './types/IWebBrowser' -export * from './types/sdk' -export * from './types/State' diff --git a/packages/web3-auth-native/src/types/IWebBrowser.ts b/packages/web3-auth-native/src/types/IWebBrowser.ts deleted file mode 100644 index fcc51728c..000000000 --- a/packages/web3-auth-native/src/types/IWebBrowser.ts +++ /dev/null @@ -1,310 +0,0 @@ -export declare type RedirectEvent = { - url: string -} -export declare type WebBrowserWindowFeatures = Record -export declare type WebBrowserOpenOptions = { - /** - * Color of the toolbar in either `#AARRGGBB` or `#RRGGBB` format. - */ - toolbarColor?: string - /** - * Package name of a browser to be used to handle Custom Tabs. List of - * available packages is to be queried by [`getCustomTabsSupportingBrowsers`](#webbrowsergetcustomtabssupportingbrowsersasync) method. - * @platform android - */ - browserPackage?: string - /** - * A boolean determining whether the toolbar should be hiding when a user scrolls the website. - */ - enableBarCollapsing?: boolean - /** - * Color of the secondary toolbar in either `#AARRGGBB` or `#RRGGBB` format. - * @platform android - */ - secondaryToolbarColor?: string - /** - * A boolean determining whether the browser should show the title of website on the toolbar. - * @platform android - */ - showTitle?: boolean - /** - * A boolean determining whether a default share item should be added to the menu. - * @platform android - */ - enableDefaultShareMenuItem?: boolean - /** - * A boolean determining whether browsed website should be shown as separate - * entry in Android recents/multitasking view. Requires `createTask` to be `true` (default). - * @default false - * @platform android - */ - showInRecents?: boolean - /** - * A boolean determining whether the browser should open in a new task or in - * the same task as your app. - * @default true - * @platform android - */ - createTask?: boolean - /** - * Tint color for controls in SKSafariViewController in `#AARRGGBB` or `#RRGGBB` format. - * @platform ios - */ - controlsColor?: string - /** - * The style of the dismiss button. Should be one of: `done`, `close`, or `cancel`. - * @platform ios - */ - dismissButtonStyle?: 'done' | 'close' | 'cancel' - /** - * A boolean determining whether Safari should enter Reader mode, if it is available. - * @platform ios - */ - readerMode?: boolean - /** - * Name to assign to the popup window. - * @platform web - */ - windowName?: string - /** - * Features to use with `window.open()`. - * @platform web - */ - windowFeatures?: string | WebBrowserWindowFeatures -} -export declare type WebBrowserAuthSessionResult = WebBrowserRedirectResult | WebBrowserResult -export declare type WebBrowserCustomTabsResults = { - /** - * Default package chosen by user, `null` if there is no such packages. Also `null` usually means, - * that user will be prompted to choose from available packages. - */ - defaultBrowserPackage?: string - /** - * Package preferred by `CustomTabsClient` to be used to handle Custom Tabs. It favors browser - * chosen by user as default, as long as it is present on both `browserPackages` and - * `servicePackages` lists. Only such browsers are considered as fully supporting Custom Tabs. - * It might be `null` when there is no such browser installed or when default browser is not in - * `servicePackages` list. - */ - preferredBrowserPackage?: string - /** - * All packages recognized by `PackageManager` as capable of handling Custom Tabs. Empty array - * means there is no supporting browsers on device. - */ - browserPackages: string[] - /** - * All packages recognized by `PackageManager` as capable of handling Custom Tabs Service. - * This service is used by [`warmUpAsync`](#webbrowserwarmupasyncbrowserpackage), [`mayInitWithUrlAsync`](#webbrowsermayinitwithurlasyncurl-browserpackage) - * and [`coolDownAsync`](#webbrowsercooldownasyncbrowserpackage). - */ - servicePackages: string[] -} -export declare enum WebBrowserResultType { - /** - * @platform ios - */ - CANCEL = 'cancel', - /** - * @platform ios - */ - DISMISS = 'dismiss', - /** - * @platform android - */ - OPENED = 'opened', - LOCKED = 'locked' -} -export declare type WebBrowserResult = { - /** - * Type of the result. - */ - type: WebBrowserResultType -} -export declare type WebBrowserRedirectResult = { - /** - * Type of the result. - */ - type: 'success' - url: string -} -export declare type ServiceActionResult = { - servicePackage?: string -} -export declare type WebBrowserMayInitWithUrlResult = ServiceActionResult -export declare type WebBrowserWarmUpResult = ServiceActionResult -export declare type WebBrowserCoolDownResult = ServiceActionResult -export declare type WebBrowserCompleteAuthSessionOptions = { - /** - * Attempt to close the window without checking to see if the auth redirect matches the cached redirect URL. - */ - skipRedirectCheck?: boolean -} -export declare type WebBrowserCompleteAuthSessionResult = { - /** - * Type of the result. - */ - type: 'success' | 'failed' - /** - * Additional description or reasoning of the result. - */ - message: string -} - -export interface IWebBrowser { - /** - * Returns a list of applications package names supporting Custom Tabs, Custom Tabs - * service, user chosen and preferred one. This may not be fully reliable, since it uses - * `PackageManager.getResolvingActivities` under the hood. (For example, some browsers might not be - * present in browserPackages list once another browser is set to default.) - * - * @return The promise which fulfils with [`WebBrowserCustomTabsResults`](#webbrowsercustomtabsresults) object. - * @platform android - */ - // getCustomTabsSupportingBrowsersAsync(): Promise; - /** - * This method calls `warmUp` method on [CustomTabsClient](https://developer.android.com/reference/android/support/customtabs/CustomTabsClient.html#warmup(long)) - * for specified package. - * - * @param browserPackage Package of browser to be warmed up. If not set, preferred browser will be warmed. - * - * @return A promise which fulfils with `WebBrowserWarmUpResult` object. - * @platform android - */ - // warmUpAsync(browserPackage?: string): Promise; - /** - * This method initiates (if needed) [CustomTabsSession](https://developer.android.com/reference/android/support/customtabs/CustomTabsSession.html#maylaunchurl) - * and calls its `mayLaunchUrl` method for browser specified by the package. - * - * @param url The url of page that is likely to be loaded first when opening browser. - * @param browserPackage Package of browser to be informed. If not set, preferred - * browser will be used. - * - * @return A promise which fulfils with `WebBrowserMayInitWithUrlResult` object. - * @platform android - */ - // mayInitWithUrlAsync( - // url: string, - // browserPackage?: string - // ): Promise; - /** - * This methods removes all bindings to services created by [`warmUpAsync`](#webbrowserwarmupasyncbrowserpackage) - * or [`mayInitWithUrlAsync`](#webbrowsermayinitwithurlasyncurl-browserpackage). You should call - * this method once you don't need them to avoid potential memory leaks. However, those binding - * would be cleared once your application is destroyed, which might be sufficient in most cases. - * - * @param browserPackage Package of browser to be cooled. If not set, preferred browser will be used. - * - * @return The promise which fulfils with ` WebBrowserCoolDownResult` when cooling is performed, or - * an empty object when there was no connection to be dismissed. - * @platform android - */ - // coolDownAsync(browserPackage?: string): Promise; - /** - * Opens the url with Safari in a modal on iOS using [`SFSafariViewController`](https://developer.apple.com/documentation/safariservices/sfsafariviewcontroller), - * and Chrome in a new [custom tab](https://developer.chrome.com/multidevice/android/customtabs) - * on Android. On iOS, the modal Safari will not share cookies with the system Safari. If you need - * this, use [`openAuthSessionAsync`](#webbrowseropenauthsessionasyncurl-redirecturl-browserparams). - * - * @param url The url to open in the web browser. - * @param browserParams A dictionary of key-value pairs. - * - * @return The promise behaves differently based on the platform. - * On Android promise resolves with `{type: 'opened'}` if we were able to open browser. - * On iOS: - * - If the user closed the web browser, the Promise resolves with `{ type: 'cancel' }`. - * - If the browser is closed using [`dismissBrowser`](#webbrowserdismissbrowser), the Promise resolves with `{ type: 'dismiss' }`. - */ - // openBrowserAsync( - // url: string, - // browserParams?: WebBrowserOpenOptions - // ): Promise; - /** - * Dismisses the presented web browser. - * - * @return The `void` on successful attempt, or throws error, if dismiss functionality is not avaiable. - * @platform ios - */ - // dismissBrowser(): void; - /** - * # On iOS: - * Opens the url with Safari in a modal using `SFAuthenticationSession` on iOS 11 and greater, - * and falling back on a `SFSafariViewController`. The user will be asked whether to allow the app - * to authenticate using the given url. - * - * # On Android: - * This will be done using a "custom Chrome tabs" browser, [AppState](../react-native/appstate/), - * and [Linking](./linking/) APIs. - * - * # On web: - * > This API can only be used in a secure environment (`https`). You can use expo `start:web --https` - * to test this. Otherwise, an error with code [`ERR_WEB_BROWSER_CRYPTO`](#errwebbrowsercrypto) will be thrown. - * This will use the browser's [`window.open()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) API. - * - _Desktop_: This will create a new web popup window in the browser that can be closed later using `WebBrowser.maybeCompleteAuthSession()`. - * - _Mobile_: This will open a new tab in the browser which can be closed using `WebBrowser.maybeCompleteAuthSession()`. - * - * How this works on web: - * - A crypto state will be created for verifying the redirect. - * - This means you need to run with `expo start:web --https` - * - The state will be added to the window's `localstorage`. This ensures that auth cannot complete - * unless it's done from a page running with the same origin as it was started. - * Ex: if `openAuthSessionAsync` is invoked on `https://localhost:19006`, then `maybeCompleteAuthSession` - * must be invoked on a page hosted from the origin `https://localhost:19006`. Using a different - * website, or even a different host like `https://128.0.0.*:19006` for example will not work. - * - A timer will be started to check for every 1000 milliseconds (1 second) to detect if the window - * has been closed by the user. If this happens then a promise will resolve with `{ type: 'dismiss' }`. - * - * > On mobile web, Chrome and Safari will block any call to [`window.open()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) - * which takes too long to fire after a user interaction. This method must be invoked immediately - * after a user interaction. If the event is blocked, an error with code [`ERR_WEB_BROWSER_BLOCKED`](#errwebbrowserblocked) will be thrown. - * - * @param url The url to open in the web browser. This should be a login page. - * @param redirectUrl _Optional_ - The url to deep link back into your app. By default, this will be [`Constants.linkingUrl`](./constants/#expoconstantslinkinguri). - * @param browserParams _Optional_ - An object with the same keys as [`WebBrowserOpenOptions`](#webbrowseropenoptions). - * If there is no native AuthSession implementation available (which is the case on Android) - * these params will be used in the browser polyfill. If there is a native AuthSession implementation, - * these params will be ignored. - * - * @return - * - If the user does not permit the application to authenticate with the given url, the Promise fulfills with `{ type: 'cancel' }` object. - * - If the user closed the web browser, the Promise fulfills with `{ type: 'cancel' }` object. - * - If the browser is closed using [`dismissBrowser`](#webbrowserdismissbrowser), - * the Promise fulfills with `{ type: 'dismiss' }` object. - */ - openAuthSessionAsync( - _url: string, - _redirectUrl: string, - _browserParams?: WebBrowserOpenOptions - ): Promise - // dismissAuthSession(): void; - /** - * Possibly completes an authentication session on web in a window popup. The method - * should be invoked on the page that the window redirects to. - * - * @param options - * - * @return Returns an object with message about why the redirect failed or succeeded: - * - * If `type` is set to `failed`, the reason depends on the message: - * - `Not supported on this platform`: If the platform doesn't support this method (iOS, Android). - * - `Cannot use expo-web-browser in a non-browser environment`: If the code was executed in an SSR - * or node environment. - * - `No auth session is currently in progress`: (the cached state wasn't found in local storage). - * This can happen if the window redirects to an origin (website) that is different to the initial - * website origin. If this happens in development, it may be because the auth started on localhost - * and finished on your computer port (Ex: `128.0.0.*`). This is controlled by the `redirectUrl` - * and `returnUrl`. - * - `Current URL "" and original redirect URL "" do not match`: This can occur when the - * redirect URL doesn't match what was initial defined as the `returnUrl`. You can skip this test - * in development by passing `{ skipRedirectCheck: true }` to the function. - * - * If `type` is set to `success`, the parent window will attempt to close the child window immediately. - * - * If the error `ERR_WEB_BROWSER_REDIRECT` was thrown, it may mean that the parent window was - * reloaded before the auth was completed. In this case you'll need to close the child window manually. - * - * @platform web - */ - // maybeCompleteAuthSession( - // options?: WebBrowserCompleteAuthSessionOptions - // ): WebBrowserCompleteAuthSessionResult; -} diff --git a/packages/web3-auth-native/src/types/State.ts b/packages/web3-auth-native/src/types/State.ts deleted file mode 100644 index 403e0eda6..000000000 --- a/packages/web3-auth-native/src/types/State.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { OpenloginUserInfo } from '@toruslabs/openlogin' - -interface State { - privKey?: string - ed25519PrivKey?: string - userInfo?: OpenloginUserInfo - sessionId?: string -} - -export type { State } diff --git a/packages/web3-auth-native/src/types/sdk.ts b/packages/web3-auth-native/src/types/sdk.ts deleted file mode 100644 index 4f6bc16cb..000000000 --- a/packages/web3-auth-native/src/types/sdk.ts +++ /dev/null @@ -1,90 +0,0 @@ -import type { - BaseLogoutParams, - BaseRedirectParams, - LoginParams, - OpenLoginOptions -} from '@toruslabs/openlogin' -import { IWebBrowser } from './IWebBrowser' - -type SdkSpecificInitParams = { - sdkUrl?: string -} - -export type SocialLoginDto = { - initParams: SdkInitParams - webBrowser: IWebBrowser -} - -export type IOriginData = { - [P: string]: string -} - -export type SdkInitParams = Omit< - OpenLoginOptions & SdkSpecificInitParams, - | 'no3PC' - | 'uxMode' - | 'replaceUrlOnRedirect' - | 'originData' - | '_iframeUrl' - | '_startUrl' - | '_popupUrl' - | '_storageServerUrl' - | 'clientId' -> - -export type SdkLoginParams = Omit< - LoginParams & IOriginData, - 'fastLogin' | 'skipTKey' | 'getWalletKey' -> - -export type SdkLogoutParams = Partial & Partial - -export const OPENLOGIN_NETWORK = { - MAINNET: 'mainnet', - TESTNET: 'testnet', - CYAN: 'cyan', - AQUA: 'aqua', - CELESTE: 'celeste' -} as const - -export const SUPPORTED_KEY_CURVES = { - SECP256K1: 'secp256k1', - ED25519: 'ed25519' -} - -export const LOGIN_PROVIDER = { - GOOGLE: 'google', - FACEBOOK: 'facebook', - REDDIT: 'reddit', - DISCORD: 'discord', - TWITCH: 'twitch', - APPLE: 'apple', - LINE: 'line', - GITHUB: 'github', - KAKAO: 'kakao', - LINKEDIN: 'linkedin', - TWITTER: 'twitter', - WEIBO: 'weibo', - WECHAT: 'wechat', - EMAIL_PASSWORDLESS: 'email_passwordless', - JWT: 'jwt' -} as const - -export const MFA_LEVELS = { - DEFAULT: 'default', - OPTIONAL: 'optional', - MANDATORY: 'mandatory', - NONE: 'none' -} - -export type { - ALLOWED_INTERACTIONS_TYPE, - LOGIN_PROVIDER_TYPE, - LoginParams, - MfaLevelType, - OPENLOGIN_NETWORK_TYPE, - OpenloginUserInfo, - SUPPORTED_KEY_CURVES_TYPE -} from '@toruslabs/openlogin' -export type { TypeOfLogin, WhiteLabelData } from '@toruslabs/openlogin-jrpc' -export type { ExtraLoginOptions } from '@toruslabs/openlogin-utils' diff --git a/packages/web3-auth-native/tests/web3-auth-native.spec.ts b/packages/web3-auth-native/tests/web3-auth-native.spec.ts deleted file mode 100644 index de58b27e6..000000000 --- a/packages/web3-auth-native/tests/web3-auth-native.spec.ts +++ /dev/null @@ -1,5 +0,0 @@ -describe('Web3 Auth Native Tests', () => { - it('should have a basic test', () => { - expect(true).toBe(true) - }) -}) diff --git a/packages/web3-auth-native/torus.config.js b/packages/web3-auth-native/torus.config.js deleted file mode 100644 index e41d0b5b8..000000000 --- a/packages/web3-auth-native/torus.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - umd: false -} diff --git a/packages/web3-auth-native/tsconfig.eslint.json b/packages/web3-auth-native/tsconfig.eslint.json deleted file mode 100644 index eced3c6c6..000000000 --- a/packages/web3-auth-native/tsconfig.eslint.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["../../tsconfig.eslint.json"] -} diff --git a/packages/web3-auth-native/tsconfig.json b/packages/web3-auth-native/tsconfig.json deleted file mode 100644 index eb424084f..000000000 --- a/packages/web3-auth-native/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "jsx": "react", - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true - }, - "include": ["src", "src/**/*.json"] -} diff --git a/packages/web3-auth/CHANGELOG.md b/packages/web3-auth/CHANGELOG.md deleted file mode 100644 index 074458c88..000000000 --- a/packages/web3-auth/CHANGELOG.md +++ /dev/null @@ -1,90 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 3.1.0 (2023-09-20) - - -### Bug Fixes - -* build ([6fb012a](https://github.com/bcnmy/biconomy-client-sdk/commit/6fb012a7d2004d5a5bad616a0ed025f1ee0a93b8)) -* css file not found ([d6cbd0b](https://github.com/bcnmy/biconomy-client-sdk/commit/d6cbd0bf88bc119c69778776df7c9bf6cd1efdb9)) -* error handling ([637bb67](https://github.com/bcnmy/biconomy-client-sdk/commit/637bb67b9390e39b4571374108bc70447a531963)) -* error handling ([7ebae72](https://github.com/bcnmy/biconomy-client-sdk/commit/7ebae72c5cfbe847bee8b2652cf88dd27a3934d9)) -* init param ([6bbccfb](https://github.com/bcnmy/biconomy-client-sdk/commit/6bbccfbff8834fa96160685f80bab7d64ec0f135)) -* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) -* ui bugs ([f7a4f47](https://github.com/bcnmy/biconomy-client-sdk/commit/f7a4f47c6076fd78515131ec59b128f312687a06)) - - -### Features - -* added email input and light mode ([741301a](https://github.com/bcnmy/biconomy-client-sdk/commit/741301a526774ed45805e477fac461b1d6afd8ac)) -* increased bg opacity ([aabbb2f](https://github.com/bcnmy/biconomy-client-sdk/commit/aabbb2fc7bab637de7a6c29fead0636979e6f6d0)) -* social login ui added ([4772065](https://github.com/bcnmy/biconomy-client-sdk/commit/477206546e0518af5a1d835f7370d70d586420c0)) -* web3-auth-native ([111bf66](https://github.com/bcnmy/biconomy-client-sdk/commit/111bf66134b8519b934895fe51082d22c8805e65)) -* web3auth modal UI ([7b7e510](https://github.com/bcnmy/biconomy-client-sdk/commit/7b7e5104ad5b1828e083f70a185328b566e9d456)) -* whitelist logic added ([53c2140](https://github.com/bcnmy/biconomy-client-sdk/commit/53c2140ef9b9d79d9d9c0e0c2c80e82b1df7f8b9)) - - - - - -# 3.0.0 (2023-08-28) - -VERSION bump only - - - - - -## 3.0.0-alpha.0 (2023-07-12) - - - - - -## 2.0.0 (2023-04-07) - - -### Bug Fixes - -* build ([6fb012a](https://github.com/bcnmy/biconomy-client-sdk/commit/6fb012a7d2004d5a5bad616a0ed025f1ee0a93b8)) -* css file not found ([d6cbd0b](https://github.com/bcnmy/biconomy-client-sdk/commit/d6cbd0bf88bc119c69778776df7c9bf6cd1efdb9)) -* error handling ([637bb67](https://github.com/bcnmy/biconomy-client-sdk/commit/637bb67b9390e39b4571374108bc70447a531963)) -* error handling ([7ebae72](https://github.com/bcnmy/biconomy-client-sdk/commit/7ebae72c5cfbe847bee8b2652cf88dd27a3934d9)) -* init param ([6bbccfb](https://github.com/bcnmy/biconomy-client-sdk/commit/6bbccfbff8834fa96160685f80bab7d64ec0f135)) -* ui bugs ([f7a4f47](https://github.com/bcnmy/biconomy-client-sdk/commit/f7a4f47c6076fd78515131ec59b128f312687a06)) - - -### Features - -* added email input and light mode ([741301a](https://github.com/bcnmy/biconomy-client-sdk/commit/741301a526774ed45805e477fac461b1d6afd8ac)) -* increased bg opacity ([aabbb2f](https://github.com/bcnmy/biconomy-client-sdk/commit/aabbb2fc7bab637de7a6c29fead0636979e6f6d0)) -* social login ui added ([4772065](https://github.com/bcnmy/biconomy-client-sdk/commit/477206546e0518af5a1d835f7370d70d586420c0)) -* web3-auth-native ([111bf66](https://github.com/bcnmy/biconomy-client-sdk/commit/111bf66134b8519b934895fe51082d22c8805e65)) -* web3auth modal UI ([7b7e510](https://github.com/bcnmy/biconomy-client-sdk/commit/7b7e5104ad5b1828e083f70a185328b566e9d456)) -* whitelist logic added ([53c2140](https://github.com/bcnmy/biconomy-client-sdk/commit/53c2140ef9b9d79d9d9c0e0c2c80e82b1df7f8b9)) - - - - - -## 1.0.0 (2023-01-03) - - -### Bug Fixes - -* build ([6fb012a](https://github.com/bcnmy/biconomy-client-sdk/commit/6fb012a7d2004d5a5bad616a0ed025f1ee0a93b8)) -* css file not found ([d6cbd0b](https://github.com/bcnmy/biconomy-client-sdk/commit/d6cbd0bf88bc119c69778776df7c9bf6cd1efdb9)) -* init param ([6bbccfb](https://github.com/bcnmy/biconomy-client-sdk/commit/6bbccfbff8834fa96160685f80bab7d64ec0f135)) -* ui bugs ([f7a4f47](https://github.com/bcnmy/biconomy-client-sdk/commit/f7a4f47c6076fd78515131ec59b128f312687a06)) - - -### Features - -* added email input and light mode ([741301a](https://github.com/bcnmy/biconomy-client-sdk/commit/741301a526774ed45805e477fac461b1d6afd8ac)) -* increased bg opacity ([aabbb2f](https://github.com/bcnmy/biconomy-client-sdk/commit/aabbb2fc7bab637de7a6c29fead0636979e6f6d0)) -* social login ui added ([4772065](https://github.com/bcnmy/biconomy-client-sdk/commit/477206546e0518af5a1d835f7370d70d586420c0)) -* web3auth modal UI ([7b7e510](https://github.com/bcnmy/biconomy-client-sdk/commit/7b7e5104ad5b1828e083f70a185328b566e9d456)) -* whitelist logic added ([53c2140](https://github.com/bcnmy/biconomy-client-sdk/commit/53c2140ef9b9d79d9d9c0e0c2c80e82b1df7f8b9)) diff --git a/packages/web3-auth/README.md b/packages/web3-auth/README.md deleted file mode 100644 index 1ed6c771a..000000000 --- a/packages/web3-auth/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# `@biconomy/web3-auth` - -> A library to import the torus web3 social auth directly from [Biconomy SDK](https://github.com/bcnmy/biconomy-client-sdk) - -## Usage - -```ts -import SocialLogin from "@biconomy/web3-auth"; -// init wallet -const socialLoginSDK = new SocialLogin(); -await socialLoginSDK.init(); -// show connect modal -socialLoginSDK.showWallet(); -``` diff --git a/packages/web3-auth/package.json b/packages/web3-auth/package.json deleted file mode 100644 index cbbd149be..000000000 --- a/packages/web3-auth/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "@biconomy/web3-auth", - "version": "3.1.0", - "description": "web3-auth for biconomy sdk", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", - "keywords": [ - "legos", - "batching", - "one-click", - "cross-chain", - "web3auth" - ], - "author": "livingrockrises ", - "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" - }, - "scripts": { - "unbuild": "rimraf dist *.tsbuildinfo", - "copy-files": "npx copyfiles -u 1 src/**/*.css dist/src", - "build": "rimraf dist && tsc && yarn copy-files", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" - }, - "bugs": { - "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@biconomy/node-client": "^3.1.0", - "@walletconnect/qrcode-modal": "^1.8.0", - "@web3auth/base": "^3.0.0", - "@web3auth/core": "^3.0.0", - "@web3auth/metamask-adapter": "^3.0.0", - "@web3auth/openlogin-adapter": "^3.0.3", - "@web3auth/wallet-connect-v1-adapter": "^3.0.3", - "ethers": "^5.7.0", - "process": "^0.11.10", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@biconomy/node-client": "^3.1.0", - "@types/react": "^18.0.15", - "@types/react-dom": "^18.0.6", - "path": "^0.12.7", - "tslint": "^6.1.3", - "tslint-config-prettier": "^1.18.0", - "typescript": "^4.7.4", - "webpack": "^5.74.0", - "webpack-cli": "^4.10.0" - } -} diff --git a/packages/web3-auth/src/SocialLogin.tsx b/packages/web3-auth/src/SocialLogin.tsx deleted file mode 100644 index 306bdc95c..000000000 --- a/packages/web3-auth/src/SocialLogin.tsx +++ /dev/null @@ -1,332 +0,0 @@ -/* eslint-disable no-console */ -import React from "react"; -import { createRoot } from "react-dom/client"; -import { ethers } from "ethers"; -import { Web3AuthCore } from "@web3auth/core"; -import { WALLET_ADAPTERS, CHAIN_NAMESPACES, SafeEventEmitterProvider, UserInfo } from "@web3auth/base"; -import { OpenloginAdapter } from "@web3auth/openlogin-adapter"; -import { MetamaskAdapter } from "@web3auth/metamask-adapter"; -import { WalletConnectV1Adapter } from "@web3auth/wallet-connect-v1-adapter"; -import QRCodeModal from "@walletconnect/qrcode-modal"; -import NodeClient, { WhiteListSignatureResponse } from "@biconomy/node-client"; - -import UI from "./UI"; -import { DefaultSocialLoginConfig, SocialLoginDTO, WhiteLabelDataType } from "./types/Web3AuthConfig"; - -function createLoginModal(socialLogin: SocialLogin): void { - /* eslint-disable @typescript-eslint/no-explicit-any */ - const root = createRoot((document as any).getElementById("w3a-modal")); - root.render(); -} - -const defaultSocialLoginConfig: DefaultSocialLoginConfig = { - backendUrl: "https://sdk-backend.prod.biconomy.io/v1", -}; - -class SocialLogin { - /* eslint-disable @typescript-eslint/no-explicit-any */ - walletDiv: any; - - /* eslint-disable @typescript-eslint/no-explicit-any */ - walletIframe: any; - - /* eslint-disable @typescript-eslint/no-explicit-any */ - iWin: any = false; - - iframeInitialized = false; - - isInit = false; - - clientId: string; - - whiteLabel: WhiteLabelDataType; - - userInfo: Partial | null = null; - - web3auth: Web3AuthCore | null = null; - - provider: SafeEventEmitterProvider | null = null; - - backendUrl!: string; - - nodeClient!: NodeClient; - - constructor(backendUrl: string = defaultSocialLoginConfig.backendUrl) { - this.createWalletDiv(); - this.isInit = false; - this.web3auth = null; - this.provider = null; - this.clientId = "BDtxlmCXNAWQFGiiaiVY3Qb1aN-d7DQ82OhT6B-RBr5j_rGnrKAqbIkvLJlf-ofYlJRiNSHbnkeHlsh8j3ueuYY"; - this.backendUrl = backendUrl; - this.nodeClient = new NodeClient({ txServiceUrl: this.backendUrl }); - this.whiteLabel = { - name: "Biconomy SDK", - logo: "https://s2.coinmarketcap.com/static/img/coins/64x64/9543.png", - }; - } - - async whitelistUrl(origin: string): Promise { - const whiteListUrlResponse: WhiteListSignatureResponse = await this.nodeClient.whitelistUrl(origin); - return whiteListUrlResponse.data; - } - - async init(socialLoginDTO?: Partial): Promise { - const finalDTO: SocialLoginDTO = { - chainId: "0x1", - whitelistUrls: {}, - network: "mainnet", - whteLableData: this.whiteLabel, - }; - if (socialLoginDTO) { - if (socialLoginDTO.chainId) finalDTO.chainId = socialLoginDTO.chainId; - if (socialLoginDTO.network) finalDTO.network = socialLoginDTO.network; - if (socialLoginDTO.whitelistUrls) finalDTO.whitelistUrls = socialLoginDTO.whitelistUrls; - if (socialLoginDTO.whteLableData) this.whiteLabel = socialLoginDTO.whteLableData; - } - try { - const web3AuthCore = new Web3AuthCore({ - clientId: this.clientId, - chainConfig: { - chainNamespace: CHAIN_NAMESPACES.EIP155, - chainId: finalDTO.chainId, - }, - }); - - const openloginAdapter = new OpenloginAdapter({ - adapterSettings: { - clientId: this.clientId, - network: finalDTO.network, - uxMode: "popup", - whiteLabel: { - name: this.whiteLabel.name, - logoLight: this.whiteLabel.logo, - logoDark: this.whiteLabel.logo, - defaultLanguage: "en", - dark: true, - }, - originData: finalDTO.whitelistUrls, - }, - }); - const metamaskAdapter = new MetamaskAdapter({ - clientId: this.clientId, - }); - const wcAdapter = new WalletConnectV1Adapter({ - adapterSettings: { - qrcodeModal: QRCodeModal, - }, - }); - - web3AuthCore.configureAdapter(openloginAdapter); - web3AuthCore.configureAdapter(metamaskAdapter); - web3AuthCore.configureAdapter(wcAdapter); - await web3AuthCore.init(); - this.web3auth = web3AuthCore; - if (web3AuthCore && web3AuthCore.provider) { - this.provider = web3AuthCore.provider; - } - createLoginModal(this); - this.isInit = true; - } catch (error) { - console.error(error); - } - } - - getProvider(): SafeEventEmitterProvider | null { - return this.provider; - } - - /* eslint-disable @typescript-eslint/no-explicit-any */ - private _createIframe(iframeContainerDiv: any): void { - this.walletIframe = document.createElement("iframe"); - this.walletIframe.style.display = "none"; - this.walletIframe.style.display = "relative"; - this.walletIframe.onload = () => { - this.iWin = this.walletIframe.contentWindow || this.walletIframe; - this.iframeInitialized = true; - }; - iframeContainerDiv.appendChild(this.walletIframe); - } - - private createWalletDiv(): void { - // create a fixed div into html but keep it hidden initially - const walletDiv = document.createElement("div"); - walletDiv.id = "w3a-modal"; - walletDiv.className = "w3a-modal w3a-modal--light"; - walletDiv.style.display = "none"; - walletDiv.style.position = "fixed"; - walletDiv.style.top = "0"; - walletDiv.style.right = "0"; - walletDiv.style.height = "100%"; - walletDiv.style.width = "100%"; - walletDiv.style.background = "rgba(33, 33, 33, 0.75)"; - walletDiv.style.zIndex = "100"; - this.walletDiv = walletDiv; - // insert div into top of body. - document.body.insertBefore(walletDiv, document.body.firstChild); - this._createIframe(walletDiv); - } - - showWallet(): void { - this.walletDiv.style.display = "block"; - this.walletIframe.style.display = "block"; - // Set height and width of the iframe to 600x341 - this.walletIframe.style.height = "600px"; - this.walletIframe.style.width = "341px"; - this.walletIframe.style.border = "0px"; - this.walletIframe.style.borderRadius = "3%"; - const el = document.getElementById("w3a-modal"); - el?.dispatchEvent(new Event("show-modal")); - } - - hideWallet(): void { - this.walletDiv.style.display = "none"; - this.walletIframe.style.display = "none"; - } - - async getUserInfo(): Promise | null> { - if (this.web3auth) { - const userInfo = await this.web3auth.getUserInfo(); - this.userInfo = userInfo; - return userInfo; - } - return null; - } - - async getPrivateKey(): Promise { - if (this.web3auth && this.web3auth.provider) { - const privateKey = await this.web3auth.provider.request({ - method: "eth_private_key", - }); - return privateKey as string; - } - return null; - } - - async socialLogin(loginProvider: string): Promise { - if (!this.web3auth) { - console.info("web3auth not initialized yet"); - return null; - } - try { - const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.OPENLOGIN, { - loginProvider: loginProvider, - }); - if (!web3authProvider) { - console.error("web3authProvider is null"); - return null; - } - const web3Provider = new ethers.providers.Web3Provider(web3authProvider); - const signer = web3Provider.getSigner(); - const gotAccount = await signer.getAddress(); - const network = await web3Provider.getNetwork(); - console.info(`EOA Address ${gotAccount}\nNetwork: ${network}`); - this.provider = web3authProvider; - return web3authProvider; - } catch (error) { - console.error(error); - return null; - } - } - - async emailLogin(email: string): Promise { - if (!this.web3auth) { - console.info("web3auth not initialized yet"); - return null; - } - try { - const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.OPENLOGIN, { - loginProvider: "email_passwordless", - login_hint: email, - }); - if (!web3authProvider) { - console.error("web3authProvider is null"); - return null; - } - const web3Provider = new ethers.providers.Web3Provider(web3authProvider); - const signer = web3Provider.getSigner(); - const gotAccount = await signer.getAddress(); - const network = await web3Provider.getNetwork(); - console.info(`EOA Address ${gotAccount}\nNetwork: ${network}`); - this.provider = web3authProvider; - return web3authProvider; - } catch (error) { - console.error(error); - return null; - } - } - - async metamaskLogin(): Promise { - if (!this.web3auth) { - console.log("web3auth not initialized yet"); - return null; - } - try { - const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.METAMASK); - if (!web3authProvider) { - console.log("web3authProvider is null"); - return null; - } - const web3Provider = new ethers.providers.Web3Provider(web3authProvider); - const signer = web3Provider.getSigner(); - const gotAccount = await signer.getAddress(); - const network = await web3Provider.getNetwork(); - console.info(`EOA Address ${gotAccount}\nNetwork: ${network}`); - this.provider = web3authProvider; - return web3authProvider; - } catch (error) { - console.error(error); - return null; - } - } - - async walletConnectLogin(): Promise { - if (!this.web3auth) { - console.log("web3auth not initialized yet"); - return null; - } - try { - const web3authProvider = await this.web3auth.connectTo(WALLET_ADAPTERS.WALLET_CONNECT_V1); - if (!web3authProvider) { - console.log("web3authProvider is null"); - return null; - } - const web3Provider = new ethers.providers.Web3Provider(web3authProvider); - const signer = web3Provider.getSigner(); - const gotAccount = await signer.getAddress(); - const network = await web3Provider.getNetwork(); - console.info(`EOA Address ${gotAccount}\nNetwork: ${network}`); - this.provider = web3authProvider; - return web3authProvider; - } catch (error) { - console.error(error); - return null; - } - } - - async logout(): Promise { - if (!this.web3auth) { - console.log("web3auth not initialized yet"); - return; - } - await this.web3auth.logout(); - this.web3auth.clearCache(); - this.provider = null; - } -} - -const socialLoginSDK: SocialLogin = new SocialLogin(); -(window as any).socialLoginSDK = socialLoginSDK; - -export default SocialLogin; - -let initializedSocialLogin: SocialLogin | null = null; -const getSocialLoginSDK = async (socialLoginDTO?: Partial): Promise => { - if (initializedSocialLogin) { - return initializedSocialLogin; - } - await socialLoginSDK.init(socialLoginDTO); - initializedSocialLogin = socialLoginSDK; - return socialLoginSDK; -}; - -export { socialLoginSDK, getSocialLoginSDK }; diff --git a/packages/web3-auth/src/UI.tsx b/packages/web3-auth/src/UI.tsx deleted file mode 100644 index 2fd8e5187..000000000 --- a/packages/web3-auth/src/UI.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import React, { useState } from "react"; -import SocialLogin from "./SocialLogin"; - -interface UIPorops { - socialLogin: SocialLogin; -} - -const container = { - position: "fixed", - float: "left", - left: "50%", - top: "50%", - width: "min(90vw, 375px)", - transform: "translate(-50%, -50%)", - transition: "opacity 400ms ease-in", - border: "1px solid #181818", - borderRadius: 10, - background: "black", - overflow: "hidden", -} as React.CSSProperties; - -const UI: React.FC = ({ socialLogin }) => { - const [email, setEmail] = useState(""); - - function handleEmailSubmit(event: React.SyntheticEvent): void { - event.preventDefault(); - socialLogin.emailLogin(email); - } - - function handleEmailChange(event: React.FormEvent): void { - setEmail(event.currentTarget.value); - } - - return ( -
-
-
- logo -
-
Sign in
-

Select one of the following to continue

-
-
- -
- -
-
-
CONTINUE WITH
-
    -
  • - -
  • -
  • - -
  • -
-
-
-
EMAIL
-
- - -
-
-
-
-
EXTERNAL WALLET
- - -
-
-
- -
-
-
-
- Powered by Biconomy -
-
-
-
-
- ); -}; - -export default UI; diff --git a/packages/web3-auth/src/index.ts b/packages/web3-auth/src/index.ts deleted file mode 100644 index 803fefd3a..000000000 --- a/packages/web3-auth/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import SocialLogin, { socialLoginSDK, getSocialLoginSDK } from "./SocialLogin"; - -export default SocialLogin; -export { socialLoginSDK, getSocialLoginSDK }; diff --git a/packages/web3-auth/src/style.css b/packages/web3-auth/src/style.css deleted file mode 100644 index 70264c5c1..000000000 --- a/packages/web3-auth/src/style.css +++ /dev/null @@ -1,871 +0,0 @@ -/* devanagari */ -@font-face { - font-family: "Poppins"; - font-style: normal; - font-weight: 600; - src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z11lFd2JQEl8qw.woff2) format("woff2"); - unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB; -} -/* latin-ext */ -@font-face { - font-family: "Poppins"; - font-style: normal; - font-weight: 600; - src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z1JlFd2JQEl8qw.woff2) format("woff2"); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: "Poppins"; - font-style: normal; - font-weight: 600; - src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z1xlFd2JQEk.woff2) format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, - U+2215, U+FEFF, U+FFFD; -} - -/* latin-ext */ -@font-face { - font-family: "DM Sans"; - font-style: normal; - font-weight: 400; - src: url(https://fonts.gstatic.com/s/dmsans/v6/rP2Hp2ywxg089UriCZ2IHTWEBlwu8Q.woff2) format("woff2"); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: "DM Sans"; - font-style: normal; - font-weight: 400; - src: url(https://fonts.gstatic.com/s/dmsans/v6/rP2Hp2ywxg089UriCZOIHTWEBlw.woff2) format("woff2"); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, - U+2215, U+FEFF, U+FFFD; -} - -/* Modal */ -#w3a-modal { - --bg1: #0f1222; - --bg2: #24262e; - --text-color1: #d3d3d4; - --text-color2: #ffffff; - - --text-header: "Poppins", Helvetica, sans-serif; - --text-body: "DM Sans", Helvetica, sans-serif; - - position: fixed; - top: 0; - left: 0; - width: 100vw; - height: 100vh; - display: flex; - align-items: center; - justify-content: center; - box-sizing: border-box; - padding: 15px; - background: rgba(33, 33, 33, 0.46); - color: var(--text-color1); - font-family: var(--text-body); -} - -#w3a-modal.w3a-modal--hidden { - display: none; -} - -#w3a-modal p, -#w3a-modal form, -#w3a-modal button { - margin: 0; - padding: 0; -} - -#w3a-modal .w3a-modal__inner { - width: 100%; - max-width: 375px; - overflow: hidden; - border-radius: 6px; - position: relative; - max-height: 95%; - overflow-y: auto; - opacity: 0; - transition: 200ms cubic-bezier(0.25, 0.8, 0.25, 1); - transform-origin: center center; - min-height: 350px; -} - -#w3a-modal .w3a-modal__inner.w3a-modal__inner--active { - opacity: 1; - transition: 200ms cubic-bezier(0.25, 0.8, 0.25, 1); - transform-origin: center center; -} - -#w3a-modal .w3a-modal__header { - padding: 25px 34px; - background: var(--bg1); - box-shadow: 0px 4px 28px rgba(3, 100, 255, 0.05); - position: relative; -} -#w3a-modal .w3a-modal__content { - padding: 30px 34px; - background: var(--bg2); -} -#w3a-modal .w3a-modal__footer { - padding: 16px 34px; - background: var(--bg1); -} - -/* SPINNER */ -/* Loader */ -#w3a-modal .w3a-modal__loader { - background: var(--bg2); - position: absolute; - display: flex; - justify-content: center; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 10; -} - -#w3a-modal .w3a-modal__loader.w3a-modal__loader--hidden { - display: none; -} - -#w3a-modal .w3a-modal__loader-content { - text-align: center; - margin-bottom: 80px; - position: relative; - display: flex; - flex-direction: column; -} - -#w3a-modal .w3a-modal__loader-info { - flex-grow: 1; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - padding: 0 30px; -} - -#w3a-modal .w3a-spinner-label { - margin-top: 10px; - font-size: 16px; - font-weight: 500; - color: #0364ff; -} - -#w3a-modal .w3a-spinner-message { - margin-top: 10px; - font-size: 16px; -} -#w3a-modal .w3a-spinner-message:first-letter { - text-transform: capitalize; -} -#w3a-modal .w3a-spinner-message.w3a-spinner-message--error { - color: #fb4a61; -} - -#w3a-modal button.w3a-logout { - background: none; - border: 0; - padding: 0; - display: inline-flex; - align-items: center; - margin-bottom: 30px; - cursor: pointer; - margin-top: 20px; - color: #0364ff; -} - -#w3a-modal .w3a-spinner-power { - margin-top: auto; - font-size: 12px; - line-height: 1.2em; - color: #b7b8bd; -} -#w3a-modal .w3a-spinner-power > img { - height: 32px; - width: auto; - display: inline; -} - -#w3a-modal .w3a-spinner { - display: inline-block; - position: relative; - background-color: #0364ff; - height: 60px; - width: 60px; - border-radius: 50%; - background: conic-gradient(transparent, #0364ff); - animation: rotate 1s linear infinite; -} - -#w3a-modal .w3a-spinner__mask, -#w3a-modal .w3a-spinner__head { - content: ""; - position: absolute; - border-radius: 50%; -} - -#w3a-modal .w3a-spinner__mask { - width: 50px; - height: 50px; - top: 5px; - left: 5px; - background-color: var(--bg2); -} - -#w3a-modal .w3a-spinner__head { - height: 5px; - width: 5px; - background-color: #0364ff; - top: 0; - left: 26px; -} - -@keyframes rotate { - from { - transform: rotateZ(0); - } - to { - transform: rotateZ(360deg); - } -} - -/* Header */ -#w3a-modal .w3a-header { - display: flex; - color: var(--text-color2); - align-items: center; -} -#w3a-modal .w3a-header__logo { - height: auto; - width: 40px; - margin-right: 16px; -} -#w3a-modal .w3a-header__title { - font-family: var(--text-header); - font-weight: 600; - font-size: 20px; - line-height: 1.5em; -} -#w3a-modal p.w3a-header__subtitle { - font-size: 14px; - line-height: 1.5em; - font-weight: 400; -} -#w3a-modal button.w3a-header__button { - cursor: pointer; - position: absolute; - background: none; - padding: 0; - border: 0; - top: 20px; - right: 26px; -} - -/* BODY */ -#w3a-modal .w3a-group { - margin-bottom: 24px; -} -#w3a-modal .w3a-group:last-child { - margin-bottom: 0; -} - -#w3a-modal .w3a-group.w3a-group--hidden, -#w3a-modal .w3a-group.w3a-group--social-hidden, -#w3a-modal .w3a-group.w3a-group--email-hidden, -#w3a-modal .w3a-group.w3a-group--ext-wallet-hidden { - display: none; -} - -#w3a-modal .w3a-group:not(.w3a-group--hidden):not(:last-child), -#w3a-modal .w3a-group:not(.w3a-group--social-hidden):not(:last-child), -#w3a-modal .w3a-group:not(.w3a-group--email-hidden):not(:last-child), -#w3a-modal .w3a-group:not(.w3a-group--ext-wallet-hidden):not(:last-child) { - border-bottom: 0.5px solid #5c6c7f; - padding-bottom: 24px; -} - -#w3a-modal div.w3a-group__title { - font-family: var(--text-header); - font-weight: 400; - font-size: 14px; - line-height: 1.5em; - margin-bottom: 8px; - text-transform: uppercase; -} - -/* Adapter List */ -#w3a-modal ul.w3a-adapter-list { - display: flex; - align-items: center; - padding: 0; - margin: 0; - gap: 16px; - overflow-y: hidden; - flex-wrap: wrap; - max-height: 500px; - transition: max-height 0.4s ease-in; -} - -#w3a-modal ul.w3a-adapter-list.w3a-adapter-list--shrink { - max-height: 48px; - transition: max-height 0.4s ease-out; -} - -#w3a-modal ul.w3a-adapter-list.w3a-adapter-list--hidden { - display: none; -} - -#w3a-modal li.w3a-adapter-item { - list-style: none; - margin-bottom: 0; -} - -#w3a-modal .w3a-adapter-item--hide { - display: none; -} - -#w3a-modal .w3a-adapter-item__label { - font-size: 12px; - color: #5c6c7f; - text-align: center; - margin: 8px 0 0 !important; - text-transform: capitalize; - position: absolute; - transform: translate(-6px); - width: 60px; -} - -/* Buttons */ -#w3a-modal button.w3a-button { - background-color: #2f3136; - border: 1px solid #404145; - box-sizing: border-box; - box-shadow: 2px 2px 12px rgba(3, 100, 255, 0.05); - border-radius: 24px; - height: 48px; - width: 100%; - padding: 8px; - display: flex; - align-items: center; - justify-content: center; - font-family: var(--text-body); - font-style: normal; - font-weight: 400; - font-size: 16px; - color: var(--text-color2); - cursor: pointer; -} - -#w3a-modal button.w3a-button:hover { - background: #595857; -} - -#w3a-modal button.w3a-button:active { - background: #6f717a; -} - -#w3a-modal button.w3a-button:disabled { - background: #27282d; - color: #6f717a; -} - -#w3a-modal button.w3a-button:focus-visible { - outline: 1px solid #daf0ff; - outline-offset: -1px; -} - -#w3a-modal button.w3a-button.w3ajs-external-toggle__button { - margin-bottom: 12px; -} - -#w3a-modal button.w3a-button.w3ajs-external-toggle__button:last-child { - margin-bottom: 0; -} - -#w3a-modal button.w3a-button--icon { - width: 48px; -} - -#w3a-modal button.w3a-button--left { - justify-content: start; - padding: 8px 16px; -} - -#w3a-modal button.w3a-button--left > img { - height: 30px; - width: auto; -} - -#w3a-modal button.w3a-button--left > div.w3a-button__name { - max-width: 180px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - text-transform: capitalize; -} - -#w3a-modal button.w3a-button--left > div.w3a-button__note { - margin-left: 8px; - color: #b7b8bd; - margin-left: auto; -} - -#w3a-modal .w3a-button__image { - max-width: 100%; - max-height: 100%; - transition: - 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), - visibility 0s; -} - -#w3a-modal button.w3a-button.w3a-button--rotate .w3a-button__image { - transform: rotate(180deg); -} - -#w3a-modal .w3a-button--left .w3a-button__image { - margin-right: 12px; -} - -#w3a-modal button.w3a-button-expand { - height: unset; - width: auto; - margin-left: auto; - font-size: 12px; - margin-top: 16px; - display: flex; - border: 8px; - color: var(--text-color2); - align-items: center; - cursor: pointer; - border-radius: 12px; - cursor: pointer; - padding: 0 10px 0 8px; - background: transparent; -} - -#w3a-modal button.w3a-button-expand svg { - width: 12px; - height: auto; - margin-right: 4px; -} - -#w3a-modal .w3a-external-toggle { - display: block; -} - -#w3a-modal .w3a-external-toggle.w3a-external-toggle--hidden { - display: none; -} - -#w3a-modal .w3a-external-container { - display: block; - margin-bottom: 34px; -} - -#w3a-modal .w3a-external-container.w3a-external-container--hidden { - display: none; -} - -#w3a-modal .w3a-external-group { - display: flex; - flex-wrap: wrap; - gap: 12px; - margin-bottom: 16px; -} - -#w3a-modal .w3a-external-group__left { - flex-grow: 1; -} - -#w3a-modal button.w3a-external-back { - background: none; - border: 0; - padding: 0; - display: inline-flex; - align-items: center; - margin-bottom: 30px; - cursor: pointer; - color: var(--text-color1); -} - -#w3a-modal .w3a-external-back:focus-visible { - outline: 1px solid #daf0ff; -} - -#w3a-modal .w3a-external-back .w3a-group__title { - margin-bottom: 0; - margin-left: 5px; -} - -#w3a-modal .w3a-external-loader { - display: flex; - justify-content: center; -} - -#w3a-modal .w3a-wallet-connect { - display: block; - text-align: center; - margin-bottom: 16px; -} - -#w3a-modal .w3a-wallet-connect.w3a-wallet-connect--hidden { - display: none; -} - -#w3a-modal .w3a-wallet-connect__container { - background: #ffffff; - border-radius: 10px; - color: var(--text-color1); - font-size: 10px; - width: fit-content; - margin: auto; - min-width: 250px; - padding: 16px 12px; -} - -#w3a-modal .w3a-wallet-connect__container-desktop, -#w3a-modal .w3a-wallet-connect__container-android { - margin: auto; -} - -#w3a-modal .w3a-wallet-connect__container-btn-group { - display: flex; - gap: 18px; -} - -#w3a-modal .w3a-wallet-connect__container-ios { - display: flex; - grid-gap: 30px 20px; - padding: 0 0 28px; - box-sizing: border-box; - flex-wrap: wrap; -} - -#w3a-modal .w3a-wallet-connect-qr { - margin: 16px 16px; - padding: inherit; -} - -#w3a-modal .w3a-wallet-connect__container-android a { - text-decoration: none; -} - -#w3a-modal .w3a-wallet-connect__container-android .w3a-button { - background-color: rgb(64, 153, 255) !important; - color: #ffffff !important; - height: auto; - font-size: 14px; - padding: 8px 16px; - width: auto; - margin: auto; -} - -#w3a-modal .w3a-wallet-connect__logo > img { - text-align: center; - width: 115px; - margin-bottom: 16px; -} - -/* Text Field */ -#w3a-modal .w3a-text-field { - background: #393938; - border: 1px solid #27282d; - box-sizing: border-box; - box-shadow: inset 2px 2px 10px rgba(0, 0, 0, 0.4); - border-radius: 24px; - padding: 0 28px; - height: 48px; - width: 100%; - font-family: var(--text-body); - font-size: 16px; - color: var(--text-color2); - margin-bottom: 16px; -} - -#w3a-modal .w3a-text-field:active { - background: #0f1222; -} - -#w3a-modal .w3a-text-field:focus-visible { - outline: 1px solid #daf0ff; - outline-offset: -1px; -} - -/* Footer Components */ -#w3a-modal .w3a-footer { - display: flex; - justify-content: space-between; - align-items: center; - font-size: 10px; - line-height: 150%; - color: var(--text-color2); -} - -#w3a-modal .w3a-footer__links { - padding: 0; - margin: 0; -} - -#w3a-modal .w3a-footer__links a { - color: var(--text-color1); - text-decoration: none; -} - -#w3a-modal .w3a-footer__links a:focus-visible { - outline: 1px solid #daf0ff; -} - -#w3a-modal .w3a-footer__links span { - margin: 0 2px; -} - -#w3a-modal .w3a-footer__secured { - text-align: right; - color: #b7b8bd; -} -#w3a-modal .w3a-footer__secured > img { - height: 14px; - width: auto; -} - -/* Loader Bridge */ -#w3a-modal .w3a-modal__loader-bridge { - display: flex; - margin-bottom: 14px; -} - -#w3a-modal .w3a-modal__loader-bridge-message span { - text-transform: capitalize; -} - -#w3a-modal .w3a-modal__loader-app-logo { - display: flex; - padding: 8px; -} - -#w3a-modal .w3a-modal__loader-app-logo img { - width: 64px; - height: auto; -} - -#w3a-modal .w3a-modal__loader-adapter img { - width: 84px; - height: auto; -} - -#w3a-modal .w3a-modal__connector { - display: flex; - align-items: center; -} - -.w3a-modal__connector-beat { - display: inline-block; - position: relative; - width: 80px; - height: 80px; -} - -.w3a-modal__connector-beat div { - position: absolute; - top: 33px; - width: 13px; - height: 13px; - border-radius: 50%; - background: #808080; - animation-timing-function: cubic-bezier(0, 1, 1, 0); -} - -.w3a-modal__connector-beat div:nth-child(1) { - left: 8px; - animation: beat1 2.4s infinite; -} - -.w3a-modal__connector-beat div:nth-child(2) { - left: 8px; - animation: beat2 2.4s infinite; -} - -.w3a-modal__connector-beat div:nth-child(3) { - left: 8px; - animation: beat3 2.4s infinite; -} - -.w3a-modal__connector-beat div:nth-child(4) { - left: 32px; - animation: beat4 2.4s infinite; -} - -.w3a-modal__connector-beat div:nth-child(5) { - left: 56px; - animation: beat5 2.4s infinite; -} - -@keyframes beat1 { - 0% { - transform: scale(0); - } - - 25% { - transform: scale(0); - } - - 50% { - transform: scale(1); - } - - 75% { - transform: scale(0); - } - - 100% { - transform: scale(0); - } -} - -@keyframes beat2 { - 0% { - transform: scale(0); - } - - 25% { - transform: scale(1); - } - - 50% { - transform: translate(24px, 0); - } - - 75% { - transform: translate(0, 0); - } - - 100% { - transform: translate(0, 0) scale(0); - } -} - -@keyframes beat3 { - 0% { - transform: translate(0, 0); - } - - 25% { - transform: translate(24px, 0); - } - - 50% { - transform: translate(48px, 0); - } - - 75% { - transform: translate(24px, 0); - } - - 100% { - transform: translate(0, 0); - } -} - -@keyframes beat4 { - 0% { - transform: translate(0, 0); - } - - 25% { - transform: translate(24px, 0); - } - - 50% { - transform: translate(24px, 0) scale(0); - } - - 75% { - transform: translate(24px, 0) scale(1); - } - - 100% { - transform: translate(0, 0); - } -} - -@keyframes beat5 { - 0% { - transform: scale(1); - } - - 25% { - transform: scale(0); - } - - 50% { - transform: scale(0); - } - - 75% { - transform: scale(0); - } - - 100% { - transform: scale(1); - } -} - -/* LIGHT MODE */ -#w3a-modal.w3a-modal--light { - --bg1: #ffffff; - --bg2: #f9f9fb; - --text-color1: #a2a5b5; - --text-color2: #5c6c7f; -} - -#w3a-modal .w3a-group:not(.w3a-group--hidden):not(:last-child), -#w3a-modal .w3a-group:not(.w3a-group--social-hidden):not(:last-child), -#w3a-modal .w3a-group:not(.w3a-group--email-hidden):not(:last-child), -#w3a-modal .w3a-group:not(.w3a-group--ext-wallet-hidden):not(:last-child) { - border-bottom: 0.5px solid #b7b8bd; - padding-bottom: 24px; -} - -#w3a-modal.w3a-modal--light button.w3a-button { - background-color: #ffffff; - border: 1px solid #f3f3f4; - box-shadow: none; - color: #595857; -} - -#w3a-modal.w3a-modal--light button.w3a-button:disabled { - color: #b7b8bd; -} - -#w3a-modal.w3a-modal--light button.w3a-button:focus-visible { - outline: 1px solid #0f1222; -} - -#w3a-modal.w3a-modal--light .w3a-text-field { - background: #ffffff; - border: 1px solid #ffffff; - box-shadow: inset 2px 2px 10px rgba(0, 0, 0, 0.1); - color: #b7b8bd; -} - -#w3a-modal.w3a-modal--light .w3a-text-field:active { - color: #0f1222; - outline: 1px solid #0f1222; -} - -#w3a-modal.w3a-modal--light .w3a-text-field:focus-visible { - color: #0f1222; - outline: 1px solid #0f1222; -} - -#w3a-modal.w3a-modal--light .w3a-footer__links a:focus-visible { - outline: 1px solid #0f1222; -} - -#w3a-modal.w3a-modal--light .w3a-external-back:focus-visible { - outline: 1px solid #0f1222; -} diff --git a/packages/web3-auth/src/types/Web3AuthConfig.ts b/packages/web3-auth/src/types/Web3AuthConfig.ts deleted file mode 100644 index 404c7ef6e..000000000 --- a/packages/web3-auth/src/types/Web3AuthConfig.ts +++ /dev/null @@ -1,15 +0,0 @@ -export type DefaultSocialLoginConfig = { - backendUrl: string; -}; - -export type WhiteLabelDataType = { - name: string; - logo: string; -}; - -export type SocialLoginDTO = { - chainId: string; - whitelistUrls: { [P: string]: string }; - network: "mainnet" | "testnet"; - whteLableData: WhiteLabelDataType; -}; diff --git a/packages/web3-auth/tests/web3-auth.spec.ts b/packages/web3-auth/tests/web3-auth.spec.ts deleted file mode 100644 index 10bb465ec..000000000 --- a/packages/web3-auth/tests/web3-auth.spec.ts +++ /dev/null @@ -1,5 +0,0 @@ -describe("Web3 Auth Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); - }); -}); diff --git a/packages/web3-auth/tsconfig.json b/packages/web3-auth/tsconfig.json deleted file mode 100644 index eb424084f..000000000 --- a/packages/web3-auth/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "jsx": "react", - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true - }, - "include": ["src", "src/**/*.json"] -} From 93c948a47766923cb4ad52b33c7ffc17daa90bb5 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 6 Nov 2023 19:28:31 +0530 Subject: [PATCH 0925/1247] respond to PR comments --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b606d98ea..096b1e7f2 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,8 @@ import { IBundler, Bundler } from '@biconomy/bundler' const bundler: IBundler = new Bundler({ - bundlerUrl: 'https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44', + bundlerUrl: 'https://bundler.biconomy.io/api/v2/80001/', + // Please go to https://dashboard.biconomy.io and generate bundler url chainId: ChainId.POLYGON_MUMBAI, entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, }) From ce7968825880fc1556750e0a0f96e1b296f2b602 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 7 Nov 2023 01:23:12 +0530 Subject: [PATCH 0926/1247] address resolver info --- packages/account/src/utils/Constants.ts | 3 + packages/common/abis/AddressResolver.json | 172 ++++++++++++++++++++++ 2 files changed, 175 insertions(+) create mode 100644 packages/common/abis/AddressResolver.json diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 4b3f257da..524bdd759 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -47,3 +47,6 @@ export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101] export const PROXY_CREATION_CODE = "0x6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033"; + +export const ADDRESS_RESOLVER_ADDRESS = "0xdE34Cd70C79824f166d71300a7D79c3Cde286542"; + diff --git a/packages/common/abis/AddressResolver.json b/packages/common/abis/AddressResolver.json new file mode 100644 index 000000000..8ca11ff16 --- /dev/null +++ b/packages/common/abis/AddressResolver.json @@ -0,0 +1,172 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "AddressResolver", + "sourceName": "contracts/smart-account/utils/AddressResolver.sol", + "abi": [ + { + "inputs": [], + "name": "ECDSA_REGISTRY_MODULE_ADDRESS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SA_V1_FACTORY", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SA_V2_FACTORY", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_eoa", + "type": "address" + }, + { + "internalType": "uint8", + "name": "_maxIndex", + "type": "uint8" + } + ], + "name": "resolveAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "accountAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "factoryAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "currentImplementation", + "type": "address" + }, + { + "internalType": "string", + "name": "currentVersion", + "type": "string" + }, + { + "internalType": "string", + "name": "factoryVersion", + "type": "string" + }, + { + "internalType": "uint256", + "name": "deploymentIndex", + "type": "uint256" + } + ], + "internalType": "struct AddressResolver.SmartAccountResult[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_eoa", + "type": "address" + }, + { + "internalType": "uint8", + "name": "_maxIndex", + "type": "uint8" + }, + { + "internalType": "address", + "name": "_moduleAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_moduleSetupData", + "type": "bytes" + } + ], + "name": "resolveAddressesFlexibleForV2", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "accountAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "factoryAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "currentImplementation", + "type": "address" + }, + { + "internalType": "string", + "name": "currentVersion", + "type": "string" + }, + { + "internalType": "string", + "name": "factoryVersion", + "type": "string" + }, + { + "internalType": "uint256", + "name": "deploymentIndex", + "type": "uint256" + } + ], + "internalType": "struct AddressResolver.SmartAccountResult[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6080806040523461001657610d55908161001c8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816317adb487146109915750806326bbd86c14610563578063315f3c03146100b3578063bfc5bb62146100875763c35e6aea1461005657600080fd5b3461008257600036600319011261008257602060405170f9ee1842bb72f6bbdd75e6d3d4e3e9594c8152f35b600080fd5b34610082576000366003190112610082576020604051701c5b32f37f5bea87bdd5374eb2ac54ea8e8152f35b34610082576080366003190112610082576100cc6109bb565b6100d46109d1565b90604435916001600160a01b0383168303610082576064359067ffffffffffffffff8211610082573660238301121561008257816004013561011581610b51565b926101236040519485610b2f565b81845236602483830101116100825781600092602460209301838701378401015261015860ff61015283610b6d565b16610bb0565b9360009360005b60ff841681106101c057868661017481610bb0565b9160005b828110610191576040518061018d8682610a29565b0390f35b8061019f6101bb9284610cd7565b516101aa8287610cd7565b526101b58186610cd7565b50610c29565b610178565b604051631acd17f560e31b81526001600160a01b03831660048201526024810182905260208160448170f9ee1842bb72f6bbdd75e6d3d4e3e9594c5afa9081156103b957600091610544575b506001600160a01b03811615158061053a575b61041f575b50604051632e7a1a8360e01b81526001600160a01b03841660048201526060602482015260208180610259606482018a610a04565b856044830152038170a56aaca3e9a4c479ea6b6cd0dbcb6634f55afa9081156103b957600091610400575b506001600160a01b0381161515806103f6575b6102af575b506102a860ff91610c29565b905061015f565b90956040519063557887a160e11b82526020826004816001600160a01b0387165afa9182156103b9576000926103c5575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa9384156103b95760ff946102a8946103839460009261038b575b506001600160a01b0390816040519461033686610ae1565b16845270a56aaca3e9a4c479ea6b6cd0dbcb6634f560208501521660408301526060820152610363610d01565b60808201528960a0820152610378828c610cd7565b526101b5818b610cd7565b96915061029c565b6001600160a01b039192506103b2903d806000833e6103aa8183610b2f565b810190610c57565b919061031e565b6040513d6000823e3d90fd5b6103e891925060203d6020116103ef575b6103e08183610b2f565b810190610c38565b90896102e0565b503d6103d6565b50803b1515610297565b610419915060203d6020116103ef576103e08183610b2f565b88610284565b60405163557887a160e11b81529196906020836004816001600160a01b0385165afa9283156103b957600093610519575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa9081156103b9576104ec946000926104f3575b506001600160a01b0390816040519461049f86610ae1565b16845270f9ee1842bb72f6bbdd75e6d3d4e3e9594c602085015216604083015260608201526104cc610cb9565b60808201528760a08201526104e1828a610cd7565b526101b58189610cd7565b9487610224565b6001600160a01b03919250610512903d806000833e6103aa8183610b2f565b9190610487565b61053391935060203d6020116103ef576103e08183610b2f565b9189610450565b50803b151561021f565b61055d915060203d6020116103ef576103e08183610b2f565b8861020c565b346100825760403660031901126100825761057c6109bb565b6105846109d1565b61059260ff61015283610b6d565b9160009160005b60ff821681106105db575050506105af81610bb0565b9160005b8281106105c8576040518061018d8682610a29565b8061019f6105d69284610cd7565b6105b3565b604051631acd17f560e31b81526001600160a01b03841660048201526024810182905270f9ee1842bb72f6bbdd75e6d3d4e3e9594c90602081604481855afa9081156103b957600091610972575b506001600160a01b038116908115159081610967575b50610872575b505060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff83111761085e57506040819052632e7a1a8360e01b8152701c5b32f37f5bea87bdd5374eb2ac54ea8e6064830152606060848301526020816106bf60c4850185610a04565b8560a486015284605f199103018170a56aaca3e9a4c479ea6b6cd0dbcb6634f55afa9182156103b957600092610829575b50506001600160a01b03811615158061081f575b61071c575b5061071560ff91610c29565b9050610599565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa9182156103b9576000926107fe575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa9384156103b95760ff94610715946107d0946000926107d8575b506001600160a01b039081604051946107a386610ae1565b16845270a56aaca3e9a4c479ea6b6cd0dbcb6634f5602085015216604083015260608201526104cc610d01565b949150610709565b6001600160a01b039192506107f7903d806000833e6103aa8183610b2f565b919061078b565b61081891925060203d6020116103ef576103e08183610b2f565b908761074d565b50803b1515610704565b61084f92506060906020903d602011610856575b6108478285610b2f565b010190610c38565b86806106f0565b3d915061083d565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b8152929591602084600481855afa9384156103b957600094610946575b506040516001621794a360e21b0319815293600085600481865afa9081156103b95761091a95600092610922575b506001600160a01b039192604051946108e086610ae1565b8552602085015216604083015260608201526108fa610cb9565b60808201528560a082015261090f8288610cd7565b526101b58187610cd7565b928580610645565b6001600160a01b039250610940903d806000833e6103aa8183610b2f565b916108c8565b61096091945060203d6020116103ef576103e08183610b2f565b928861089a565b90503b15158861063f565b61098b915060203d6020116103ef576103e08183610b2f565b87610629565b34610082576000366003190112610082578070a56aaca3e9a4c479ea6b6cd0dbcb6634f560209252f35b600435906001600160a01b038216820361008257565b6024359060ff8216820361008257565b60005b8381106109f45750506000910152565b81810151838201526020016109e4565b90602091610a1d815180928185528580860191016109e1565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610a5e575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610ac6610ab36060808501519060c08091860152840190610a04565b6080808501519084830390850152610a04565b9160a080910151910152990194019401929594939190610a4d565b60c0810190811067ffffffffffffffff821117610afd57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610afd57604052565b90601f8019910116810190811067ffffffffffffffff821117610afd57604052565b67ffffffffffffffff8111610afd57601f01601f191660200190565b60011b906101fe60fe831692168203610b8257565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8111610afd5760051b60200190565b90610bba82610b98565b604090610bc982519182610b2f565b8381528093610bda601f1991610b98565b019160005b838110610bec5750505050565b6020908251610bfa81610ae1565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610bdf565b6000198114610b825760010190565b9081602091031261008257516001600160a01b03811681036100825790565b6020818303126100825780519067ffffffffffffffff8211610082570181601f82011215610082578051610c8a81610b51565b92610c986040519485610b2f565b8184526020828401011161008257610cb691602080850191016109e1565b90565b60405190610cc682610b13565b6002825261763160f01b6020830152565b8051821015610ceb5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60405190610d0e82610b13565b60028252613b1960f11b602083015256fea26469706673582212202e74d4ac8d69f6237e2db0a7c441e442c914cbb8dde18a8d65d69a9d041ea03164736f6c63430008110033", + "deployedBytecode": "0x608080604052600436101561001357600080fd5b60003560e01c90816317adb487146109915750806326bbd86c14610563578063315f3c03146100b3578063bfc5bb62146100875763c35e6aea1461005657600080fd5b3461008257600036600319011261008257602060405170f9ee1842bb72f6bbdd75e6d3d4e3e9594c8152f35b600080fd5b34610082576000366003190112610082576020604051701c5b32f37f5bea87bdd5374eb2ac54ea8e8152f35b34610082576080366003190112610082576100cc6109bb565b6100d46109d1565b90604435916001600160a01b0383168303610082576064359067ffffffffffffffff8211610082573660238301121561008257816004013561011581610b51565b926101236040519485610b2f565b81845236602483830101116100825781600092602460209301838701378401015261015860ff61015283610b6d565b16610bb0565b9360009360005b60ff841681106101c057868661017481610bb0565b9160005b828110610191576040518061018d8682610a29565b0390f35b8061019f6101bb9284610cd7565b516101aa8287610cd7565b526101b58186610cd7565b50610c29565b610178565b604051631acd17f560e31b81526001600160a01b03831660048201526024810182905260208160448170f9ee1842bb72f6bbdd75e6d3d4e3e9594c5afa9081156103b957600091610544575b506001600160a01b03811615158061053a575b61041f575b50604051632e7a1a8360e01b81526001600160a01b03841660048201526060602482015260208180610259606482018a610a04565b856044830152038170a56aaca3e9a4c479ea6b6cd0dbcb6634f55afa9081156103b957600091610400575b506001600160a01b0381161515806103f6575b6102af575b506102a860ff91610c29565b905061015f565b90956040519063557887a160e11b82526020826004816001600160a01b0387165afa9182156103b9576000926103c5575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa9384156103b95760ff946102a8946103839460009261038b575b506001600160a01b0390816040519461033686610ae1565b16845270a56aaca3e9a4c479ea6b6cd0dbcb6634f560208501521660408301526060820152610363610d01565b60808201528960a0820152610378828c610cd7565b526101b5818b610cd7565b96915061029c565b6001600160a01b039192506103b2903d806000833e6103aa8183610b2f565b810190610c57565b919061031e565b6040513d6000823e3d90fd5b6103e891925060203d6020116103ef575b6103e08183610b2f565b810190610c38565b90896102e0565b503d6103d6565b50803b1515610297565b610419915060203d6020116103ef576103e08183610b2f565b88610284565b60405163557887a160e11b81529196906020836004816001600160a01b0385165afa9283156103b957600093610519575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa9081156103b9576104ec946000926104f3575b506001600160a01b0390816040519461049f86610ae1565b16845270f9ee1842bb72f6bbdd75e6d3d4e3e9594c602085015216604083015260608201526104cc610cb9565b60808201528760a08201526104e1828a610cd7565b526101b58189610cd7565b9487610224565b6001600160a01b03919250610512903d806000833e6103aa8183610b2f565b9190610487565b61053391935060203d6020116103ef576103e08183610b2f565b9189610450565b50803b151561021f565b61055d915060203d6020116103ef576103e08183610b2f565b8861020c565b346100825760403660031901126100825761057c6109bb565b6105846109d1565b61059260ff61015283610b6d565b9160009160005b60ff821681106105db575050506105af81610bb0565b9160005b8281106105c8576040518061018d8682610a29565b8061019f6105d69284610cd7565b6105b3565b604051631acd17f560e31b81526001600160a01b03841660048201526024810182905270f9ee1842bb72f6bbdd75e6d3d4e3e9594c90602081604481855afa9081156103b957600091610972575b506001600160a01b038116908115159081610967575b50610872575b505060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff83111761085e57506040819052632e7a1a8360e01b8152701c5b32f37f5bea87bdd5374eb2ac54ea8e6064830152606060848301526020816106bf60c4850185610a04565b8560a486015284605f199103018170a56aaca3e9a4c479ea6b6cd0dbcb6634f55afa9182156103b957600092610829575b50506001600160a01b03811615158061081f575b61071c575b5061071560ff91610c29565b9050610599565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa9182156103b9576000926107fe575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa9384156103b95760ff94610715946107d0946000926107d8575b506001600160a01b039081604051946107a386610ae1565b16845270a56aaca3e9a4c479ea6b6cd0dbcb6634f5602085015216604083015260608201526104cc610d01565b949150610709565b6001600160a01b039192506107f7903d806000833e6103aa8183610b2f565b919061078b565b61081891925060203d6020116103ef576103e08183610b2f565b908761074d565b50803b1515610704565b61084f92506060906020903d602011610856575b6108478285610b2f565b010190610c38565b86806106f0565b3d915061083d565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b8152929591602084600481855afa9384156103b957600094610946575b506040516001621794a360e21b0319815293600085600481865afa9081156103b95761091a95600092610922575b506001600160a01b039192604051946108e086610ae1565b8552602085015216604083015260608201526108fa610cb9565b60808201528560a082015261090f8288610cd7565b526101b58187610cd7565b928580610645565b6001600160a01b039250610940903d806000833e6103aa8183610b2f565b916108c8565b61096091945060203d6020116103ef576103e08183610b2f565b928861089a565b90503b15158861063f565b61098b915060203d6020116103ef576103e08183610b2f565b87610629565b34610082576000366003190112610082578070a56aaca3e9a4c479ea6b6cd0dbcb6634f560209252f35b600435906001600160a01b038216820361008257565b6024359060ff8216820361008257565b60005b8381106109f45750506000910152565b81810151838201526020016109e4565b90602091610a1d815180928185528580860191016109e1565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610a5e575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610ac6610ab36060808501519060c08091860152840190610a04565b6080808501519084830390850152610a04565b9160a080910151910152990194019401929594939190610a4d565b60c0810190811067ffffffffffffffff821117610afd57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610afd57604052565b90601f8019910116810190811067ffffffffffffffff821117610afd57604052565b67ffffffffffffffff8111610afd57601f01601f191660200190565b60011b906101fe60fe831692168203610b8257565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8111610afd5760051b60200190565b90610bba82610b98565b604090610bc982519182610b2f565b8381528093610bda601f1991610b98565b019160005b838110610bec5750505050565b6020908251610bfa81610ae1565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610bdf565b6000198114610b825760010190565b9081602091031261008257516001600160a01b03811681036100825790565b6020818303126100825780519067ffffffffffffffff8211610082570181601f82011215610082578051610c8a81610b51565b92610c986040519485610b2f565b8184526020828401011161008257610cb691602080850191016109e1565b90565b60405190610cc682610b13565b6002825261763160f01b6020830152565b8051821015610ceb5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60405190610d0e82610b13565b60028252613b1960f11b602083015256fea26469706673582212202e74d4ac8d69f6237e2db0a7c441e442c914cbb8dde18a8d65d69a9d041ea03164736f6c63430008110033", + "linkReferences": {}, + "deployedLinkReferences": {} +} From 92ba565710e3cf97b830b2c4fce3988558c5857a Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 7 Nov 2023 03:23:18 +0530 Subject: [PATCH 0927/1247] add dev notes + helpers to detect v1 addesses (getCounterFactualAddress) --- .../account/src/BiconomySmartAccountV2.ts | 55 ++++++++++++++++++- packages/account/src/utils/Types.ts | 11 +++- .../abis/{ => misc}/AddressResolver.json | 0 3 files changed, 64 insertions(+), 2 deletions(-) rename packages/common/abis/{ => misc}/AddressResolver.json (100%) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 46e8f856c..253659637 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -9,6 +9,8 @@ import { SmartAccountFactory_v200, SmartAccount_v200__factory, SmartAccountFactory_v200__factory, + AddressResolver, + AddressResolver__factory, } from "@biconomy/common"; import { BiconomyTokenPaymasterRequest, @@ -17,8 +19,9 @@ import { BuildUserOpOptions, Overrides, NonceOptions, + SmartAccountInfo, } from "./utils/Types"; -import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; +import { BaseValidationModule, ModuleInfo, SendUserOpParams, DEFAULT_ECDSA_OWNERSHIP_MODULE } from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; @@ -34,6 +37,7 @@ import { } from "@biconomy/node-client"; import { UserOpResponse } from "@biconomy/bundler"; import { + ADDRESS_RESOLVER_ADDRESS, BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, DEFAULT_BICONOMY_FACTORY_ADDRESS, DEFAULT_FALLBACK_HANDLER_ADDRESS, @@ -165,6 +169,32 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * calculate the account address even before it is deployed */ async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise { + const validationModule = params?.validationModule ?? this.defaultValidationModule; + const index = params?.index ?? this.index; + + // Note: Review + // the fact that below flow (AddressResolver) is Always called can be avoided by passing a flag in smart account config + // (if it's intended to detect V1 upgraded accounts) + + // is instanceOf ECDSAOwnershipValidationModule or address matches ECDSA module address + if (validationModule.getAddress() === DEFAULT_ECDSA_OWNERSHIP_MODULE) { + const eoaSigner = await validationModule.getSigner(); + const eoaAddress = await eoaSigner.getAddress(); + const accountAddress = await this.getV1AccountsUpgradedToV2(eoaAddress, index); + Logger.log("account address from V1 ", accountAddress); + if (accountAddress !== ethers.constants.AddressZero) { + return accountAddress; + } + } else { + // can check using module.getAddress() and module.getInitData() for some other auth module + } + // Review: above control flow + + const counterFactualAddressV2 = await this.getCounterFactualAddressV2({ validationModule, index }); + return counterFactualAddressV2; + } + + private async getCounterFactualAddressV2(params?: CounterFactualAddressParam): Promise { if (this.factory == null) { if (this.factoryAddress != null && this.factoryAddress !== "") { this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); @@ -192,6 +222,29 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } } + async getV1AccountsUpgradedToV2(eoaAddress: string, index: number): Promise { + Logger.log("index to filter ", index); + // Review: Could be taken as parameter from config. + const maxIndex = 10; + const addressResolver: AddressResolver = AddressResolver__factory.connect(ADDRESS_RESOLVER_ADDRESS, this.provider); + const result: SmartAccountInfo[] = await addressResolver.resolveAddresses(eoaAddress, maxIndex); + Logger.log("result of address resolver ", result); + + const desiredV1Account = result.find( + (smartAccountInfo) => + smartAccountInfo.factoryVersion === "v1" && + smartAccountInfo.currentVersion === "2.0.0" && + smartAccountInfo.deploymentIndex.toNumber() === index, + ); + + if (desiredV1Account) { + const smartAccountAddress = desiredV1Account.accountAddress; + return smartAccountAddress; + } else { + return ethers.constants.AddressZero; + } + } + /** * return the value to put into the "initCode" field, if the account is not yet deployed. * this value holds the "factory" address, followed by this account's information diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 741b1a8cc..8c668fd16 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -1,6 +1,6 @@ import { Signer } from "ethers"; import { ChainId } from "@biconomy/core-types"; -import { BigNumberish } from "ethers"; +import { BigNumberish, BigNumber } from "ethers"; import { IBundler } from "@biconomy/bundler"; import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; @@ -135,3 +135,12 @@ export type CounterFactualAddressParam = { index?: number; validationModule?: BaseValidationModule; }; + +export type SmartAccountInfo = { + accountAddress: string; + factoryAddress: string; + currentImplementation: string; + currentVersion: string; + factoryVersion: string; + deploymentIndex: BigNumber; +}; diff --git a/packages/common/abis/AddressResolver.json b/packages/common/abis/misc/AddressResolver.json similarity index 100% rename from packages/common/abis/AddressResolver.json rename to packages/common/abis/misc/AddressResolver.json From 53ed28b3e5fbb5ba3e357b5f763d938c9bc79003 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 7 Nov 2023 03:50:25 +0530 Subject: [PATCH 0928/1247] lint fixes --- packages/account/src/BiconomySmartAccount.ts | 3 --- packages/account/src/BiconomySmartAccountV2.ts | 2 +- packages/account/src/utils/Constants.ts | 3 +-- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 6a8ab762a..3d16734e6 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -35,9 +35,6 @@ import { DEFAULT_ENTRYPOINT_ADDRESS, DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS, BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, - BICONOMY_FACTORY_ADDRESSES_BY_VERSION, - DEFAULT_BICONOMY_FACTORY_ADDRESS, - DEFAULT_FALLBACK_HANDLER_ADDRESS, } from "./utils/Constants"; import { Signer } from "ethers"; diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 253659637..612739a13 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -173,7 +173,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { const index = params?.index ?? this.index; // Note: Review - // the fact that below flow (AddressResolver) is Always called can be avoided by passing a flag in smart account config + // the fact that below flow (AddressResolver) is Always called can be avoided by passing a flag in smart account config // (if it's intended to detect V1 upgraded accounts) // is instanceOf ECDSAOwnershipValidationModule or address matches ECDSA module address diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 524bdd759..1253886c2 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -48,5 +48,4 @@ export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101] export const PROXY_CREATION_CODE = "0x6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033"; -export const ADDRESS_RESOLVER_ADDRESS = "0xdE34Cd70C79824f166d71300a7D79c3Cde286542"; - +export const ADDRESS_RESOLVER_ADDRESS = "0xdE34Cd70C79824f166d71300a7D79c3Cde286542"; From aace8b867167f0bbbd852dab1715aebf3db0864c Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 8 Nov 2023 02:39:44 +0530 Subject: [PATCH 0929/1247] respond to PR comments + add a flag --- packages/account/src/BiconomySmartAccount.ts | 2 -- .../account/src/BiconomySmartAccountV2.ts | 30 +++++++++++-------- packages/account/src/utils/Types.ts | 2 ++ 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 3d16734e6..46558eac5 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -493,8 +493,6 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart const encodedData = impInterface.encodeFunctionData("updateImplementation", [latestImplementationAddress]); return { to: this.address, value: BigNumber.from(0), data: encodedData }; } else { - // Could throw error instead - // throw new Error("Not eligible for upgrade"); return { to: this.address, value: 0, data: "0x" }; } } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 612739a13..88c98ccb4 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -65,6 +65,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { private implementationAddress!: string; + private scanForUpgradedAccountsFromV1!: boolean; + // Validation module responsible for account deployment initCode. This acts as a default authorization module. defaultValidationModule!: BaseValidationModule; @@ -104,6 +106,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { instance.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); + instance.scanForUpgradedAccountsFromV1 = biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false; + await instance.init(); return instance; @@ -171,25 +175,26 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise { const validationModule = params?.validationModule ?? this.defaultValidationModule; const index = params?.index ?? this.index; + // Review: default behavior + const scanForUpgradedAccountsFromV1 = params?.scanForUpgradedAccountsFromV1 ?? this.scanForUpgradedAccountsFromV1; - // Note: Review - // the fact that below flow (AddressResolver) is Always called can be avoided by passing a flag in smart account config - // (if it's intended to detect V1 upgraded accounts) + // if it's intended to detect V1 upgraded accounts + if (scanForUpgradedAccountsFromV1) { + // Review + // is instanceOf ECDSAOwnershipValidationModule or address matches ECDSA module address + // if (validationModule.getAddress() === DEFAULT_ECDSA_OWNERSHIP_MODULE) { + // then we only need to call resolveAddress - // is instanceOf ECDSAOwnershipValidationModule or address matches ECDSA module address - if (validationModule.getAddress() === DEFAULT_ECDSA_OWNERSHIP_MODULE) { const eoaSigner = await validationModule.getSigner(); const eoaAddress = await eoaSigner.getAddress(); - const accountAddress = await this.getV1AccountsUpgradedToV2(eoaAddress, index); + const moduleAddress = validationModule.getAddress(); + const moduleSetupData = await validationModule.getInitData(); + const accountAddress = await this.getV1AccountsUpgradedToV2(eoaAddress, index, moduleAddress, moduleSetupData); Logger.log("account address from V1 ", accountAddress); if (accountAddress !== ethers.constants.AddressZero) { return accountAddress; } - } else { - // can check using module.getAddress() and module.getInitData() for some other auth module } - // Review: above control flow - const counterFactualAddressV2 = await this.getCounterFactualAddressV2({ validationModule, index }); return counterFactualAddressV2; } @@ -222,12 +227,13 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } } - async getV1AccountsUpgradedToV2(eoaAddress: string, index: number): Promise { + async getV1AccountsUpgradedToV2(eoaAddress: string, index: number, moduleAddress: string, moduleSetupData: string): Promise { Logger.log("index to filter ", index); // Review: Could be taken as parameter from config. const maxIndex = 10; const addressResolver: AddressResolver = AddressResolver__factory.connect(ADDRESS_RESOLVER_ADDRESS, this.provider); - const result: SmartAccountInfo[] = await addressResolver.resolveAddresses(eoaAddress, maxIndex); + // Note: depending on moduleAddress and moduleSetupData passed call this. otherwise call call resolveAddresses() + const result: SmartAccountInfo[] = await addressResolver.resolveAddressesFlexibleForV2(eoaAddress, maxIndex, moduleAddress, moduleSetupData); Logger.log("result of address resolver ", result); const desiredV1Account = result.find( diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 8c668fd16..49be40691 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -73,6 +73,7 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { nodeClientUrl?: string; // very specific to Biconomy defaultValidationModule: BaseValidationModule; activeValidationModule?: BaseValidationModule; + scanForUpgradedAccountsFromV1?: boolean; } export type BuildUserOpOptions = { @@ -134,6 +135,7 @@ export interface TransactionDetailsForUserOp { export type CounterFactualAddressParam = { index?: number; validationModule?: BaseValidationModule; + scanForUpgradedAccountsFromV1?: boolean; }; export type SmartAccountInfo = { From f2dedf011cfce9273beebb47d281006b6f31035b Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 8 Nov 2023 03:04:44 +0530 Subject: [PATCH 0930/1247] fix/bump particle auth packages --- packages/particle-auth/package.json | 5 ++--- packages/particle-auth/src/index.ts | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index fd108f3bf..4a510117c 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -36,8 +36,7 @@ "access": "public" }, "dependencies": { - "@particle-network/auth": "^0.13.1", - "@particle-network/biconomy": "^0.1.0", - "@particle-network/provider": "^0.13.1" + "@particle-network/auth": "^1.2.1", + "@particle-network/provider": "^1.2.0" } } diff --git a/packages/particle-auth/src/index.ts b/packages/particle-auth/src/index.ts index 1d3b6a0ff..9345658a4 100644 --- a/packages/particle-auth/src/index.ts +++ b/packages/particle-auth/src/index.ts @@ -1,5 +1,4 @@ import * as ParticleAuth from "@particle-network/auth"; -import * as BiconomyAccount from "@particle-network/biconomy"; import { ParticleProvider, ParticleDelegateProvider } from "@particle-network/provider"; -export { ParticleAuth as ParticleAuthModule, BiconomyAccount as BiconomyAccountModule, ParticleProvider, ParticleDelegateProvider }; +export { ParticleAuth as ParticleAuthModule, ParticleProvider, ParticleDelegateProvider }; From 1a7d2bd3b38b3ea3f92df9920ee72f5b77492fb3 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 8 Nov 2023 14:30:23 +0530 Subject: [PATCH 0931/1247] minor fix --- packages/particle-auth/README.md | 4 ++-- packages/particle-auth/package.json | 3 ++- packages/particle-auth/src/index.ts | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/particle-auth/README.md b/packages/particle-auth/README.md index fabfcc5dc..8d3a34187 100644 --- a/packages/particle-auth/README.md +++ b/packages/particle-auth/README.md @@ -5,8 +5,8 @@ ## Usage ```ts -import { ParticleNetwork, WalletEntryPosition } from "@particle-network/auth"; -import { ParticleProvider } from "@particle-network/provider"; +import { ParticleNetwork, WalletEntryPosition } from "@biconomy/particle-auth"; +import { ParticleProvider } from "@biconomy/particle-auth"; import Web3 from "web3"; const particle = new ParticleNetwork({ diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 4a510117c..ca96bcebb 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -37,6 +37,7 @@ }, "dependencies": { "@particle-network/auth": "^1.2.1", - "@particle-network/provider": "^1.2.0" + "@particle-network/provider": "^1.2.0", + "@particle-network/biconomy": "^1.0.0" } } diff --git a/packages/particle-auth/src/index.ts b/packages/particle-auth/src/index.ts index 9345658a4..1d3b6a0ff 100644 --- a/packages/particle-auth/src/index.ts +++ b/packages/particle-auth/src/index.ts @@ -1,4 +1,5 @@ import * as ParticleAuth from "@particle-network/auth"; +import * as BiconomyAccount from "@particle-network/biconomy"; import { ParticleProvider, ParticleDelegateProvider } from "@particle-network/provider"; -export { ParticleAuth as ParticleAuthModule, ParticleProvider, ParticleDelegateProvider }; +export { ParticleAuth as ParticleAuthModule, BiconomyAccount as BiconomyAccountModule, ParticleProvider, ParticleDelegateProvider }; From 8bcb6dff36a7ea2fd19fc9cb7e8983bf7c66d5aa Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 9 Nov 2023 19:10:37 +0530 Subject: [PATCH 0932/1247] update address resolver + add dto for address resolver query --- .../account/src/BiconomySmartAccountV2.ts | 62 +++++---- packages/account/src/utils/Constants.ts | 2 +- packages/account/src/utils/Types.ts | 10 ++ .../common/abis/misc/AddressResolver.json | 119 ++++++++++++++---- 4 files changed, 148 insertions(+), 45 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 88c98ccb4..5f636b06a 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -20,6 +20,7 @@ import { Overrides, NonceOptions, SmartAccountInfo, + QueryParamsForAddressResolver, } from "./utils/Types"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, DEFAULT_ECDSA_OWNERSHIP_MODULE } from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; @@ -67,6 +68,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { private scanForUpgradedAccountsFromV1!: boolean; + private maxIndexForScan!: number; + // Validation module responsible for account deployment initCode. This acts as a default authorization module. defaultValidationModule!: BaseValidationModule; @@ -108,6 +111,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { instance.scanForUpgradedAccountsFromV1 = biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false; + instance.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10; + await instance.init(); return instance; @@ -175,21 +180,24 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise { const validationModule = params?.validationModule ?? this.defaultValidationModule; const index = params?.index ?? this.index; + const maxIndexForScan = params?.maxIndexForScan ?? this.maxIndexForScan; // Review: default behavior const scanForUpgradedAccountsFromV1 = params?.scanForUpgradedAccountsFromV1 ?? this.scanForUpgradedAccountsFromV1; // if it's intended to detect V1 upgraded accounts if (scanForUpgradedAccountsFromV1) { - // Review - // is instanceOf ECDSAOwnershipValidationModule or address matches ECDSA module address - // if (validationModule.getAddress() === DEFAULT_ECDSA_OWNERSHIP_MODULE) { - // then we only need to call resolveAddress - const eoaSigner = await validationModule.getSigner(); const eoaAddress = await eoaSigner.getAddress(); const moduleAddress = validationModule.getAddress(); const moduleSetupData = await validationModule.getInitData(); - const accountAddress = await this.getV1AccountsUpgradedToV2(eoaAddress, index, moduleAddress, moduleSetupData); + const params = { + eoaAddress, + index, + moduleAddress, + moduleSetupData, + maxIndexForScan, + }; + const accountAddress = await this.getV1AccountsUpgradedToV2(params); Logger.log("account address from V1 ", accountAddress); if (accountAddress !== ethers.constants.AddressZero) { return accountAddress; @@ -227,25 +235,33 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } } - async getV1AccountsUpgradedToV2(eoaAddress: string, index: number, moduleAddress: string, moduleSetupData: string): Promise { - Logger.log("index to filter ", index); - // Review: Could be taken as parameter from config. - const maxIndex = 10; + async getV1AccountsUpgradedToV2(params: QueryParamsForAddressResolver): Promise { + Logger.log("index to filter ", params.index); + const maxIndexForScan = params.maxIndexForScan ?? this.maxIndexForScan; const addressResolver: AddressResolver = AddressResolver__factory.connect(ADDRESS_RESOLVER_ADDRESS, this.provider); - // Note: depending on moduleAddress and moduleSetupData passed call this. otherwise call call resolveAddresses() - const result: SmartAccountInfo[] = await addressResolver.resolveAddressesFlexibleForV2(eoaAddress, maxIndex, moduleAddress, moduleSetupData); - Logger.log("result of address resolver ", result); - - const desiredV1Account = result.find( - (smartAccountInfo) => - smartAccountInfo.factoryVersion === "v1" && - smartAccountInfo.currentVersion === "2.0.0" && - smartAccountInfo.deploymentIndex.toNumber() === index, - ); + // Note: depending on moduleAddress and moduleSetupData passed call this. otherwise could call resolveAddresses() + + if (params.moduleAddress && params.moduleSetupData) { + const result: SmartAccountInfo[] = await addressResolver.resolveAddressesFlexibleForV2( + params.eoaAddress, + maxIndexForScan, + params.moduleAddress, + params.moduleSetupData, + ); - if (desiredV1Account) { - const smartAccountAddress = desiredV1Account.accountAddress; - return smartAccountAddress; + const desiredV1Account = result.find( + (smartAccountInfo) => + smartAccountInfo.factoryVersion === "v1" && + smartAccountInfo.currentVersion === "2.0.0" && + smartAccountInfo.deploymentIndex.toNumber() === params.index, + ); + + if (desiredV1Account) { + const smartAccountAddress = desiredV1Account.accountAddress; + return smartAccountAddress; + } else { + return ethers.constants.AddressZero; + } } else { return ethers.constants.AddressZero; } diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 1253886c2..fbf741c48 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -48,4 +48,4 @@ export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101] export const PROXY_CREATION_CODE = "0x6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033"; -export const ADDRESS_RESOLVER_ADDRESS = "0xdE34Cd70C79824f166d71300a7D79c3Cde286542"; +export const ADDRESS_RESOLVER_ADDRESS = "0x00000E81673606e07fC79CE5F1b3B26957844468"; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 49be40691..a83c2d3e1 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -74,6 +74,7 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { defaultValidationModule: BaseValidationModule; activeValidationModule?: BaseValidationModule; scanForUpgradedAccountsFromV1?: boolean; + maxIndexForScan?: number; } export type BuildUserOpOptions = { @@ -136,8 +137,17 @@ export type CounterFactualAddressParam = { index?: number; validationModule?: BaseValidationModule; scanForUpgradedAccountsFromV1?: boolean; + maxIndexForScan?: number; }; +export type QueryParamsForAddressResolver = { + eoaAddress: string; + index: number; + moduleAddress: string; + moduleSetupData: string; + maxIndexForScan?: number; +} + export type SmartAccountInfo = { accountAddress: string; factoryAddress: string; diff --git a/packages/common/abis/misc/AddressResolver.json b/packages/common/abis/misc/AddressResolver.json index 8ca11ff16..899d2623f 100644 --- a/packages/common/abis/misc/AddressResolver.json +++ b/packages/common/abis/misc/AddressResolver.json @@ -4,34 +4,29 @@ "sourceName": "contracts/smart-account/utils/AddressResolver.sol", "abi": [ { - "inputs": [], - "name": "ECDSA_REGISTRY_MODULE_ADDRESS", - "outputs": [ + "inputs": [ { "internalType": "address", - "name": "", + "name": "_v1Factory", "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SA_V1_FACTORY", - "outputs": [ + }, { "internalType": "address", - "name": "", + "name": "_v2Factory", + "type": "address" + }, + { + "internalType": "address", + "name": "_ecdsaModule", "type": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "nonpayable", + "type": "constructor" }, { "inputs": [], - "name": "SA_V2_FACTORY", + "name": "ecdsaOwnershipModule", "outputs": [ { "internalType": "address", @@ -90,7 +85,7 @@ "type": "uint256" } ], - "internalType": "struct AddressResolver.SmartAccountResult[]", + "internalType": "struct IAddressResolver.SmartAccountResult[]", "name": "", "type": "tuple[]" } @@ -156,17 +151,99 @@ "type": "uint256" } ], - "internalType": "struct AddressResolver.SmartAccountResult[]", + "internalType": "struct IAddressResolver.SmartAccountResult[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_eoa", + "type": "address" + }, + { + "internalType": "uint8", + "name": "_maxIndex", + "type": "uint8" + } + ], + "name": "resolveAddressesV1", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "accountAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "factoryAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "currentImplementation", + "type": "address" + }, + { + "internalType": "string", + "name": "currentVersion", + "type": "string" + }, + { + "internalType": "string", + "name": "factoryVersion", + "type": "string" + }, + { + "internalType": "uint256", + "name": "deploymentIndex", + "type": "uint256" + } + ], + "internalType": "struct IAddressResolver.SmartAccountResult[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" + }, + { + "inputs": [], + "name": "smartAccountFactoryV1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "smartAccountFactoryV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" } ], - "bytecode": "0x6080806040523461001657610d55908161001c8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816317adb487146109915750806326bbd86c14610563578063315f3c03146100b3578063bfc5bb62146100875763c35e6aea1461005657600080fd5b3461008257600036600319011261008257602060405170f9ee1842bb72f6bbdd75e6d3d4e3e9594c8152f35b600080fd5b34610082576000366003190112610082576020604051701c5b32f37f5bea87bdd5374eb2ac54ea8e8152f35b34610082576080366003190112610082576100cc6109bb565b6100d46109d1565b90604435916001600160a01b0383168303610082576064359067ffffffffffffffff8211610082573660238301121561008257816004013561011581610b51565b926101236040519485610b2f565b81845236602483830101116100825781600092602460209301838701378401015261015860ff61015283610b6d565b16610bb0565b9360009360005b60ff841681106101c057868661017481610bb0565b9160005b828110610191576040518061018d8682610a29565b0390f35b8061019f6101bb9284610cd7565b516101aa8287610cd7565b526101b58186610cd7565b50610c29565b610178565b604051631acd17f560e31b81526001600160a01b03831660048201526024810182905260208160448170f9ee1842bb72f6bbdd75e6d3d4e3e9594c5afa9081156103b957600091610544575b506001600160a01b03811615158061053a575b61041f575b50604051632e7a1a8360e01b81526001600160a01b03841660048201526060602482015260208180610259606482018a610a04565b856044830152038170a56aaca3e9a4c479ea6b6cd0dbcb6634f55afa9081156103b957600091610400575b506001600160a01b0381161515806103f6575b6102af575b506102a860ff91610c29565b905061015f565b90956040519063557887a160e11b82526020826004816001600160a01b0387165afa9182156103b9576000926103c5575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa9384156103b95760ff946102a8946103839460009261038b575b506001600160a01b0390816040519461033686610ae1565b16845270a56aaca3e9a4c479ea6b6cd0dbcb6634f560208501521660408301526060820152610363610d01565b60808201528960a0820152610378828c610cd7565b526101b5818b610cd7565b96915061029c565b6001600160a01b039192506103b2903d806000833e6103aa8183610b2f565b810190610c57565b919061031e565b6040513d6000823e3d90fd5b6103e891925060203d6020116103ef575b6103e08183610b2f565b810190610c38565b90896102e0565b503d6103d6565b50803b1515610297565b610419915060203d6020116103ef576103e08183610b2f565b88610284565b60405163557887a160e11b81529196906020836004816001600160a01b0385165afa9283156103b957600093610519575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa9081156103b9576104ec946000926104f3575b506001600160a01b0390816040519461049f86610ae1565b16845270f9ee1842bb72f6bbdd75e6d3d4e3e9594c602085015216604083015260608201526104cc610cb9565b60808201528760a08201526104e1828a610cd7565b526101b58189610cd7565b9487610224565b6001600160a01b03919250610512903d806000833e6103aa8183610b2f565b9190610487565b61053391935060203d6020116103ef576103e08183610b2f565b9189610450565b50803b151561021f565b61055d915060203d6020116103ef576103e08183610b2f565b8861020c565b346100825760403660031901126100825761057c6109bb565b6105846109d1565b61059260ff61015283610b6d565b9160009160005b60ff821681106105db575050506105af81610bb0565b9160005b8281106105c8576040518061018d8682610a29565b8061019f6105d69284610cd7565b6105b3565b604051631acd17f560e31b81526001600160a01b03841660048201526024810182905270f9ee1842bb72f6bbdd75e6d3d4e3e9594c90602081604481855afa9081156103b957600091610972575b506001600160a01b038116908115159081610967575b50610872575b505060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff83111761085e57506040819052632e7a1a8360e01b8152701c5b32f37f5bea87bdd5374eb2ac54ea8e6064830152606060848301526020816106bf60c4850185610a04565b8560a486015284605f199103018170a56aaca3e9a4c479ea6b6cd0dbcb6634f55afa9182156103b957600092610829575b50506001600160a01b03811615158061081f575b61071c575b5061071560ff91610c29565b9050610599565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa9182156103b9576000926107fe575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa9384156103b95760ff94610715946107d0946000926107d8575b506001600160a01b039081604051946107a386610ae1565b16845270a56aaca3e9a4c479ea6b6cd0dbcb6634f5602085015216604083015260608201526104cc610d01565b949150610709565b6001600160a01b039192506107f7903d806000833e6103aa8183610b2f565b919061078b565b61081891925060203d6020116103ef576103e08183610b2f565b908761074d565b50803b1515610704565b61084f92506060906020903d602011610856575b6108478285610b2f565b010190610c38565b86806106f0565b3d915061083d565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b8152929591602084600481855afa9384156103b957600094610946575b506040516001621794a360e21b0319815293600085600481865afa9081156103b95761091a95600092610922575b506001600160a01b039192604051946108e086610ae1565b8552602085015216604083015260608201526108fa610cb9565b60808201528560a082015261090f8288610cd7565b526101b58187610cd7565b928580610645565b6001600160a01b039250610940903d806000833e6103aa8183610b2f565b916108c8565b61096091945060203d6020116103ef576103e08183610b2f565b928861089a565b90503b15158861063f565b61098b915060203d6020116103ef576103e08183610b2f565b87610629565b34610082576000366003190112610082578070a56aaca3e9a4c479ea6b6cd0dbcb6634f560209252f35b600435906001600160a01b038216820361008257565b6024359060ff8216820361008257565b60005b8381106109f45750506000910152565b81810151838201526020016109e4565b90602091610a1d815180928185528580860191016109e1565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610a5e575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610ac6610ab36060808501519060c08091860152840190610a04565b6080808501519084830390850152610a04565b9160a080910151910152990194019401929594939190610a4d565b60c0810190811067ffffffffffffffff821117610afd57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610afd57604052565b90601f8019910116810190811067ffffffffffffffff821117610afd57604052565b67ffffffffffffffff8111610afd57601f01601f191660200190565b60011b906101fe60fe831692168203610b8257565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8111610afd5760051b60200190565b90610bba82610b98565b604090610bc982519182610b2f565b8381528093610bda601f1991610b98565b019160005b838110610bec5750505050565b6020908251610bfa81610ae1565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610bdf565b6000198114610b825760010190565b9081602091031261008257516001600160a01b03811681036100825790565b6020818303126100825780519067ffffffffffffffff8211610082570181601f82011215610082578051610c8a81610b51565b92610c986040519485610b2f565b8184526020828401011161008257610cb691602080850191016109e1565b90565b60405190610cc682610b13565b6002825261763160f01b6020830152565b8051821015610ceb5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60405190610d0e82610b13565b60028252613b1960f11b602083015256fea26469706673582212202e74d4ac8d69f6237e2db0a7c441e442c914cbb8dde18a8d65d69a9d041ea03164736f6c63430008110033", - "deployedBytecode": "0x608080604052600436101561001357600080fd5b60003560e01c90816317adb487146109915750806326bbd86c14610563578063315f3c03146100b3578063bfc5bb62146100875763c35e6aea1461005657600080fd5b3461008257600036600319011261008257602060405170f9ee1842bb72f6bbdd75e6d3d4e3e9594c8152f35b600080fd5b34610082576000366003190112610082576020604051701c5b32f37f5bea87bdd5374eb2ac54ea8e8152f35b34610082576080366003190112610082576100cc6109bb565b6100d46109d1565b90604435916001600160a01b0383168303610082576064359067ffffffffffffffff8211610082573660238301121561008257816004013561011581610b51565b926101236040519485610b2f565b81845236602483830101116100825781600092602460209301838701378401015261015860ff61015283610b6d565b16610bb0565b9360009360005b60ff841681106101c057868661017481610bb0565b9160005b828110610191576040518061018d8682610a29565b0390f35b8061019f6101bb9284610cd7565b516101aa8287610cd7565b526101b58186610cd7565b50610c29565b610178565b604051631acd17f560e31b81526001600160a01b03831660048201526024810182905260208160448170f9ee1842bb72f6bbdd75e6d3d4e3e9594c5afa9081156103b957600091610544575b506001600160a01b03811615158061053a575b61041f575b50604051632e7a1a8360e01b81526001600160a01b03841660048201526060602482015260208180610259606482018a610a04565b856044830152038170a56aaca3e9a4c479ea6b6cd0dbcb6634f55afa9081156103b957600091610400575b506001600160a01b0381161515806103f6575b6102af575b506102a860ff91610c29565b905061015f565b90956040519063557887a160e11b82526020826004816001600160a01b0387165afa9182156103b9576000926103c5575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa9384156103b95760ff946102a8946103839460009261038b575b506001600160a01b0390816040519461033686610ae1565b16845270a56aaca3e9a4c479ea6b6cd0dbcb6634f560208501521660408301526060820152610363610d01565b60808201528960a0820152610378828c610cd7565b526101b5818b610cd7565b96915061029c565b6001600160a01b039192506103b2903d806000833e6103aa8183610b2f565b810190610c57565b919061031e565b6040513d6000823e3d90fd5b6103e891925060203d6020116103ef575b6103e08183610b2f565b810190610c38565b90896102e0565b503d6103d6565b50803b1515610297565b610419915060203d6020116103ef576103e08183610b2f565b88610284565b60405163557887a160e11b81529196906020836004816001600160a01b0385165afa9283156103b957600093610519575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa9081156103b9576104ec946000926104f3575b506001600160a01b0390816040519461049f86610ae1565b16845270f9ee1842bb72f6bbdd75e6d3d4e3e9594c602085015216604083015260608201526104cc610cb9565b60808201528760a08201526104e1828a610cd7565b526101b58189610cd7565b9487610224565b6001600160a01b03919250610512903d806000833e6103aa8183610b2f565b9190610487565b61053391935060203d6020116103ef576103e08183610b2f565b9189610450565b50803b151561021f565b61055d915060203d6020116103ef576103e08183610b2f565b8861020c565b346100825760403660031901126100825761057c6109bb565b6105846109d1565b61059260ff61015283610b6d565b9160009160005b60ff821681106105db575050506105af81610bb0565b9160005b8281106105c8576040518061018d8682610a29565b8061019f6105d69284610cd7565b6105b3565b604051631acd17f560e31b81526001600160a01b03841660048201526024810182905270f9ee1842bb72f6bbdd75e6d3d4e3e9594c90602081604481855afa9081156103b957600091610972575b506001600160a01b038116908115159081610967575b50610872575b505060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff83111761085e57506040819052632e7a1a8360e01b8152701c5b32f37f5bea87bdd5374eb2ac54ea8e6064830152606060848301526020816106bf60c4850185610a04565b8560a486015284605f199103018170a56aaca3e9a4c479ea6b6cd0dbcb6634f55afa9182156103b957600092610829575b50506001600160a01b03811615158061081f575b61071c575b5061071560ff91610c29565b9050610599565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa9182156103b9576000926107fe575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa9384156103b95760ff94610715946107d0946000926107d8575b506001600160a01b039081604051946107a386610ae1565b16845270a56aaca3e9a4c479ea6b6cd0dbcb6634f5602085015216604083015260608201526104cc610d01565b949150610709565b6001600160a01b039192506107f7903d806000833e6103aa8183610b2f565b919061078b565b61081891925060203d6020116103ef576103e08183610b2f565b908761074d565b50803b1515610704565b61084f92506060906020903d602011610856575b6108478285610b2f565b010190610c38565b86806106f0565b3d915061083d565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b8152929591602084600481855afa9384156103b957600094610946575b506040516001621794a360e21b0319815293600085600481865afa9081156103b95761091a95600092610922575b506001600160a01b039192604051946108e086610ae1565b8552602085015216604083015260608201526108fa610cb9565b60808201528560a082015261090f8288610cd7565b526101b58187610cd7565b928580610645565b6001600160a01b039250610940903d806000833e6103aa8183610b2f565b916108c8565b61096091945060203d6020116103ef576103e08183610b2f565b928861089a565b90503b15158861063f565b61098b915060203d6020116103ef576103e08183610b2f565b87610629565b34610082576000366003190112610082578070a56aaca3e9a4c479ea6b6cd0dbcb6634f560209252f35b600435906001600160a01b038216820361008257565b6024359060ff8216820361008257565b60005b8381106109f45750506000910152565b81810151838201526020016109e4565b90602091610a1d815180928185528580860191016109e1565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610a5e575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610ac6610ab36060808501519060c08091860152840190610a04565b6080808501519084830390850152610a04565b9160a080910151910152990194019401929594939190610a4d565b60c0810190811067ffffffffffffffff821117610afd57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610afd57604052565b90601f8019910116810190811067ffffffffffffffff821117610afd57604052565b67ffffffffffffffff8111610afd57601f01601f191660200190565b60011b906101fe60fe831692168203610b8257565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8111610afd5760051b60200190565b90610bba82610b98565b604090610bc982519182610b2f565b8381528093610bda601f1991610b98565b019160005b838110610bec5750505050565b6020908251610bfa81610ae1565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610bdf565b6000198114610b825760010190565b9081602091031261008257516001600160a01b03811681036100825790565b6020818303126100825780519067ffffffffffffffff8211610082570181601f82011215610082578051610c8a81610b51565b92610c986040519485610b2f565b8184526020828401011161008257610cb691602080850191016109e1565b90565b60405190610cc682610b13565b6002825261763160f01b6020830152565b8051821015610ceb5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60405190610d0e82610b13565b60028252613b1960f11b602083015256fea26469706673582212202e74d4ac8d69f6237e2db0a7c441e442c914cbb8dde18a8d65d69a9d041ea03164736f6c63430008110033", + "bytecode": "0x60e0346200011757601f6200124738819003918201601f19168301916001600160401b038311848410176200011c5780849260609460405283398101031262000117576200004d8162000132565b906200006a6040620000626020840162000132565b920162000132565b916200009f6001600160a01b0362000086818416151562000147565b62000095818516151562000147565b8416151562000147565b60805260a05260c0526040516110b2908162000195823960805181818160e601528181610311015281816104700152818161071b015281816108f60152610c2b015260a0518181816104e8015281816105c40152818161080c015281816109cd0152610aaa015260c051818181607e01526109980152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200011757565b156200014f57565b60405162461bcd60e51b815260206004820152601960248201527f5265717569726564206e6f6e2d7a65726f2061646472657373000000000000006044820152606490fdfe6080604052600436101561001257600080fd5b60003560e01c806326bbd86c146108305780632819f31c146107ec578063315f3c03146103355780635acdcdc6146102f15780638d440ec2146100a75763c866cae31461005e57600080fd5b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100a25760403660031901126100a2576100c0610cfc565b60ff6100ca610d12565b166100d481610ec6565b9160009160006001600160a01b0392837f000000000000000000000000000000000000000000000000000000000000000016915b83811061016157868661011a81610ec6565b9160005b82811061013757604051806101338682610d6a565b0390f35b8061014460019284610fde565b5161014f8287610fde565b5261015a8186610fde565b500161011e565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081604481875afa90811561028b576000916102d2575b508581161515806102c8575b6101b6575b50600101610108565b90956040519063557887a160e11b82526020826004818a87165afa91821561028b57600092610297575b506040516001621794a360e21b03198152926000846004818b85165afa801561028b5788600195948695600093610266575b50816040519461022186610e22565b168452886020850152166040830152606082015261023d610fc0565b60808201528860a0820152610252828b610fde565b5261025d818a610fde565b500195906101ad565b6102849193503d806000833e61027c8183610e70565b810190610f5e565b918d610212565b6040513d6000823e3d90fd5b6102ba91925060203d6020116102c1575b6102b28183610e70565b810190610f3f565b90896101e0565b503d6102a8565b50803b15156101a8565b6102eb915060203d6020116102c1576102b28183610e70565b8861019c565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760803660031901126100a25761034e610cfc565b610356610d12565b906001600160a01b0360443516604435036100a2576064359167ffffffffffffffff83116100a257366023840112156100a257826004013561039781610e92565b936103a56040519586610e70565b81855236602483830101116100a2578160009260246020930183880137850101526103da60ff6103d483611008565b16610ec6565b9260009260005b60ff841681106104395785856103f681610ec6565b9160005b82811061040f57604051806101338682610d6a565b8061041c60019284610fde565b516104278287610fde565b526104328186610fde565b50016103fa565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b576000916107cd575b506001600160a01b0381161515806107c3575b610696575b50604051632e7a1a8360e01b8152602081806104dc858860443560048501611033565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610677575b506001600160a01b03811615158061066d575b61053a575b506001016103e1565b90946040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b5760009261064c575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610626575b506001600160a01b039081604051946105be86610e22565b168452817f000000000000000000000000000000000000000000000000000000000000000016602085015216604083015260608201526105fc61105e565b60808201528860a0820152610611828b610fde565b5261061c818a610fde565b5001959150610531565b6001600160a01b03919250610645903d806000833e61027c8183610e70565b91906105a6565b61066691925060203d6020116102c1576102b28183610e70565b908861056b565b50803b151561052c565b610690915060203d6020116102c1576102b28183610e70565b87610519565b60405163557887a160e11b81529195906020836004816001600160a01b0385165afa92831561028b576000936107a2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b5760019460009261077c575b506001600160a01b0390816040519461071586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610753610fc0565b60808201528660a08201526107688289610fde565b526107738188610fde565b500193866104b9565b6001600160a01b0391925061079b903d806000833e61027c8183610e70565b91906106fd565b6107bc91935060203d6020116102c1576102b28183610e70565b91886106c7565b50803b15156104b4565b6107e6915060203d6020116102c1576102b28183610e70565b876104a1565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760403660031901126100a257610849610cfc565b610851610d12565b61085f60ff6103d483611008565b9160009160005b60ff821681106108bf5750505061087c81610ec6565b9160005b82811061089557604051806101338682610d6a565b806108a260019284610fde565b516108ad8287610fde565b526108b88186610fde565b5001610880565b604051631acd17f560e31b81526001600160a01b038416600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610cdd575b506001600160a01b038116151580610cd3575b610ba6575b5060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff831117610b9257506040819052632e7a1a8360e01b8152602081605f19846109c087827f000000000000000000000000000000000000000000000000000000000000000060648201611033565b0301816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa91821561028b57600092610b5d575b50506001600160a01b038116151580610b53575b610a20575b50600101610866565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b57600092610b32575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610b0c575b506001600160a01b03908160405194610aa486610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610ae261105e565b60808201528760a0820152610af7828a610fde565b52610b028189610fde565b5001949150610a17565b6001600160a01b03919250610b2b903d806000833e61027c8183610e70565b9190610a8c565b610b4c91925060203d6020116102c1576102b28183610e70565b9087610a51565b50803b1515610a12565b610b8392506060906020903d602011610b8a575b610b7b8285610e70565b010190610f3f565b86806109fe565b3d9150610b71565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b81529194906020836004816001600160a01b0385165afa92831561028b57600093610cb2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b57600194600092610c8c575b506001600160a01b03908160405194610c2586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610c63610fc0565b60808201528560a0820152610c788288610fde565b52610c838187610fde565b5001928561093f565b6001600160a01b03919250610cab903d806000833e61027c8183610e70565b9190610c0d565b610ccc91935060203d6020116102c1576102b28183610e70565b9187610bd7565b50803b151561093a565b610cf6915060203d6020116102c1576102b28183610e70565b86610927565b600435906001600160a01b03821682036100a257565b6024359060ff821682036100a257565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b90602091610d5e81518092818552858086019101610d22565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610d9f575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610e07610df46060808501519060c08091860152840190610d45565b6080808501519084830390850152610d45565b9160a080910151910152990194019401929594939190610d8e565b60c0810190811067ffffffffffffffff821117610e3e57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610e3e57604052565b90601f8019910116810190811067ffffffffffffffff821117610e3e57604052565b67ffffffffffffffff8111610e3e57601f01601f191660200190565b67ffffffffffffffff8111610e3e5760051b60200190565b90610ed082610eae565b604090610edf82519182610e70565b8381528093610ef0601f1991610eae565b019160005b838110610f025750505050565b6020908251610f1081610e22565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610ef5565b908160209103126100a257516001600160a01b03811681036100a25790565b6020818303126100a25780519067ffffffffffffffff82116100a2570181601f820112156100a2578051610f9181610e92565b92610f9f6040519485610e70565b818452602082840101116100a257610fbd9160208085019101610d22565b90565b60405190610fcd82610e54565b6002825261763160f01b6020830152565b8051821015610ff25760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60011b906101fe60fe83169216820361101d57565b634e487b7160e01b600052601160045260246000fd5b939291611059906001600160a01b03604093168652606060208701526060860190610d45565b930152565b6040519061106b82610e54565b60028252613b1960f11b602083015256fea264697066735822122083951a990433399478b293d1c860c5b725a11f7db47b61e057d189f59c9adeeb64736f6c63430008110033", + "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c806326bbd86c146108305780632819f31c146107ec578063315f3c03146103355780635acdcdc6146102f15780638d440ec2146100a75763c866cae31461005e57600080fd5b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100a25760403660031901126100a2576100c0610cfc565b60ff6100ca610d12565b166100d481610ec6565b9160009160006001600160a01b0392837f000000000000000000000000000000000000000000000000000000000000000016915b83811061016157868661011a81610ec6565b9160005b82811061013757604051806101338682610d6a565b0390f35b8061014460019284610fde565b5161014f8287610fde565b5261015a8186610fde565b500161011e565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081604481875afa90811561028b576000916102d2575b508581161515806102c8575b6101b6575b50600101610108565b90956040519063557887a160e11b82526020826004818a87165afa91821561028b57600092610297575b506040516001621794a360e21b03198152926000846004818b85165afa801561028b5788600195948695600093610266575b50816040519461022186610e22565b168452886020850152166040830152606082015261023d610fc0565b60808201528860a0820152610252828b610fde565b5261025d818a610fde565b500195906101ad565b6102849193503d806000833e61027c8183610e70565b810190610f5e565b918d610212565b6040513d6000823e3d90fd5b6102ba91925060203d6020116102c1575b6102b28183610e70565b810190610f3f565b90896101e0565b503d6102a8565b50803b15156101a8565b6102eb915060203d6020116102c1576102b28183610e70565b8861019c565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760803660031901126100a25761034e610cfc565b610356610d12565b906001600160a01b0360443516604435036100a2576064359167ffffffffffffffff83116100a257366023840112156100a257826004013561039781610e92565b936103a56040519586610e70565b81855236602483830101116100a2578160009260246020930183880137850101526103da60ff6103d483611008565b16610ec6565b9260009260005b60ff841681106104395785856103f681610ec6565b9160005b82811061040f57604051806101338682610d6a565b8061041c60019284610fde565b516104278287610fde565b526104328186610fde565b50016103fa565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b576000916107cd575b506001600160a01b0381161515806107c3575b610696575b50604051632e7a1a8360e01b8152602081806104dc858860443560048501611033565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610677575b506001600160a01b03811615158061066d575b61053a575b506001016103e1565b90946040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b5760009261064c575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610626575b506001600160a01b039081604051946105be86610e22565b168452817f000000000000000000000000000000000000000000000000000000000000000016602085015216604083015260608201526105fc61105e565b60808201528860a0820152610611828b610fde565b5261061c818a610fde565b5001959150610531565b6001600160a01b03919250610645903d806000833e61027c8183610e70565b91906105a6565b61066691925060203d6020116102c1576102b28183610e70565b908861056b565b50803b151561052c565b610690915060203d6020116102c1576102b28183610e70565b87610519565b60405163557887a160e11b81529195906020836004816001600160a01b0385165afa92831561028b576000936107a2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b5760019460009261077c575b506001600160a01b0390816040519461071586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610753610fc0565b60808201528660a08201526107688289610fde565b526107738188610fde565b500193866104b9565b6001600160a01b0391925061079b903d806000833e61027c8183610e70565b91906106fd565b6107bc91935060203d6020116102c1576102b28183610e70565b91886106c7565b50803b15156104b4565b6107e6915060203d6020116102c1576102b28183610e70565b876104a1565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760403660031901126100a257610849610cfc565b610851610d12565b61085f60ff6103d483611008565b9160009160005b60ff821681106108bf5750505061087c81610ec6565b9160005b82811061089557604051806101338682610d6a565b806108a260019284610fde565b516108ad8287610fde565b526108b88186610fde565b5001610880565b604051631acd17f560e31b81526001600160a01b038416600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610cdd575b506001600160a01b038116151580610cd3575b610ba6575b5060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff831117610b9257506040819052632e7a1a8360e01b8152602081605f19846109c087827f000000000000000000000000000000000000000000000000000000000000000060648201611033565b0301816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa91821561028b57600092610b5d575b50506001600160a01b038116151580610b53575b610a20575b50600101610866565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b57600092610b32575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610b0c575b506001600160a01b03908160405194610aa486610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610ae261105e565b60808201528760a0820152610af7828a610fde565b52610b028189610fde565b5001949150610a17565b6001600160a01b03919250610b2b903d806000833e61027c8183610e70565b9190610a8c565b610b4c91925060203d6020116102c1576102b28183610e70565b9087610a51565b50803b1515610a12565b610b8392506060906020903d602011610b8a575b610b7b8285610e70565b010190610f3f565b86806109fe565b3d9150610b71565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b81529194906020836004816001600160a01b0385165afa92831561028b57600093610cb2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b57600194600092610c8c575b506001600160a01b03908160405194610c2586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610c63610fc0565b60808201528560a0820152610c788288610fde565b52610c838187610fde565b5001928561093f565b6001600160a01b03919250610cab903d806000833e61027c8183610e70565b9190610c0d565b610ccc91935060203d6020116102c1576102b28183610e70565b9187610bd7565b50803b151561093a565b610cf6915060203d6020116102c1576102b28183610e70565b86610927565b600435906001600160a01b03821682036100a257565b6024359060ff821682036100a257565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b90602091610d5e81518092818552858086019101610d22565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610d9f575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610e07610df46060808501519060c08091860152840190610d45565b6080808501519084830390850152610d45565b9160a080910151910152990194019401929594939190610d8e565b60c0810190811067ffffffffffffffff821117610e3e57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610e3e57604052565b90601f8019910116810190811067ffffffffffffffff821117610e3e57604052565b67ffffffffffffffff8111610e3e57601f01601f191660200190565b67ffffffffffffffff8111610e3e5760051b60200190565b90610ed082610eae565b604090610edf82519182610e70565b8381528093610ef0601f1991610eae565b019160005b838110610f025750505050565b6020908251610f1081610e22565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610ef5565b908160209103126100a257516001600160a01b03811681036100a25790565b6020818303126100a25780519067ffffffffffffffff82116100a2570181601f820112156100a2578051610f9181610e92565b92610f9f6040519485610e70565b818452602082840101116100a257610fbd9160208085019101610d22565b90565b60405190610fcd82610e54565b6002825261763160f01b6020830152565b8051821015610ff25760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60011b906101fe60fe83169216820361101d57565b634e487b7160e01b600052601160045260246000fd5b939291611059906001600160a01b03604093168652606060208701526060860190610d45565b930152565b6040519061106b82610e54565b60028252613b1960f11b602083015256fea264697066735822122083951a990433399478b293d1c860c5b725a11f7db47b61e057d189f59c9adeeb64736f6c63430008110033", "linkReferences": {}, "deployedLinkReferences": {} } From d482694f05344349de48430f6bd0f3f2bb027776 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 9 Nov 2023 19:12:36 +0530 Subject: [PATCH 0933/1247] lint fixes --- packages/account/src/BiconomySmartAccountV2.ts | 6 +++--- packages/account/src/utils/Types.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 5f636b06a..52a10d417 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -22,7 +22,7 @@ import { SmartAccountInfo, QueryParamsForAddressResolver, } from "./utils/Types"; -import { BaseValidationModule, ModuleInfo, SendUserOpParams, DEFAULT_ECDSA_OWNERSHIP_MODULE } from "@biconomy/modules"; +import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; @@ -190,14 +190,14 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { const eoaAddress = await eoaSigner.getAddress(); const moduleAddress = validationModule.getAddress(); const moduleSetupData = await validationModule.getInitData(); - const params = { + const queryParams = { eoaAddress, index, moduleAddress, moduleSetupData, maxIndexForScan, }; - const accountAddress = await this.getV1AccountsUpgradedToV2(params); + const accountAddress = await this.getV1AccountsUpgradedToV2(queryParams); Logger.log("account address from V1 ", accountAddress); if (accountAddress !== ethers.constants.AddressZero) { return accountAddress; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index a83c2d3e1..d1a286e89 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -146,7 +146,7 @@ export type QueryParamsForAddressResolver = { moduleAddress: string; moduleSetupData: string; maxIndexForScan?: number; -} +}; export type SmartAccountInfo = { accountAddress: string; From 7ce9fe33556401a424e6f327d827cea90618c81c Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 9 Nov 2023 23:53:37 +0530 Subject: [PATCH 0934/1247] version bump and changelog --- packages/account/CHANGELOG.md | 18 +++++++++++++++++- packages/account/package.json | 14 +++++++------- packages/bundler/CHANGELOG.md | 18 ++++++++++++++++++ packages/bundler/package.json | 6 +++--- packages/common/CHANGELOG.md | 9 +++++++++ packages/common/package.json | 6 +++--- packages/core-types/CHANGELOG.md | 9 +++++++++ packages/core-types/package.json | 2 +- packages/modules/CHANGELOG.md | 9 +++++++++ packages/modules/package.json | 8 ++++---- packages/node-client/CHANGELOG.md | 7 ++++++- packages/node-client/package.json | 4 ++-- packages/particle-auth/CHANGELOG.md | 8 ++++++++ packages/particle-auth/package.json | 6 +++--- packages/paymaster/CHANGELOG.md | 9 +++++++++ packages/paymaster/package.json | 6 +++--- packages/transak/CHANGELOG.md | 9 +++++++++ packages/transak/package.json | 2 +- 18 files changed, 121 insertions(+), 29 deletions(-) diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index e39b2c8d5..f85934702 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.1 (2023-11-09) + + +### Bug Fixes + +* optimistic implementation for getNonce() and cache for isAccountDeployed ([5b1d4bf](https://github.com/bcnmy/biconomy-client-sdk/commit/5b1d4bfd7b5062d05bbb97286b833d879cd972b0)) + + +### Reverts + +* update paymaster check in estimateUserOpGas ([2eb0237](https://github.com/bcnmy/biconomy-client-sdk/commit/2eb0237b37425da3558801bbe9d0ce5d6fd696c9)) + + + + + ## 3.1.0 (2023-09-20) Modular Account Abstraction is here. Contains BiconomySmartAccountV2 - an API for modular smart account. @@ -71,4 +87,4 @@ VERSION bump only * get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) * update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) \ No newline at end of file +* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) diff --git a/packages/account/package.json b/packages/account/package.json index 7d89691ec..7002d2e3a 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account", - "version": "3.1.0", + "version": "3.1.1", "description": "This package provides apis for ERC-4337 based smart account implementations", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -40,12 +40,12 @@ "@account-abstraction/contracts": "^0.6.0", "@account-abstraction/utils": "^0.4.0", "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0", - "@biconomy/bundler": "^3.1.0", - "@biconomy/common": "^3.1.0", - "@biconomy/core-types": "^3.1.0", - "@biconomy/modules": "^3.1.0", - "@biconomy/node-client": "^3.1.0", - "@biconomy/paymaster": "^3.1.0", + "@biconomy/bundler": "^3.1.1", + "@biconomy/common": "^3.1.1", + "@biconomy/core-types": "^3.1.1", + "@biconomy/modules": "^3.1.1", + "@biconomy/node-client": "^3.1.1", + "@biconomy/paymaster": "^3.1.1", "@ethersproject/logger": "^5.7.0", "@ethersproject/providers": "^5.7.2", "ethers": "^5.7.0", diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index 41c5e0eaa..8540b690b 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -3,6 +3,24 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.1 (2023-11-09) + + +### Bug Fixes + +* resolve comments ([34fd6a3](https://github.com/bcnmy/biconomy-client-sdk/commit/34fd6a308805061d9faf408f1ce6da9cac0ee819)) + + +### Features + +* add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) +* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) +* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) + + + + + ## 3.1.0 (2023-09-20) Modular Account Abstraction is here. diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 821fb6b63..a0a96dcff 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/bundler", - "version": "3.1.0", + "version": "3.1.1", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -37,8 +37,8 @@ "access": "public" }, "dependencies": { - "@biconomy/common": "^3.1.0", - "@biconomy/core-types": "^3.1.0", + "@biconomy/common": "^3.1.1", + "@biconomy/core-types": "^3.1.1", "@ethersproject/providers": "^5.7.2", "ethers": "^5.7.0" } diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index 704bd526f..2eb65d5c6 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -3,6 +3,15 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.1 (2023-11-09) + + +### Features + +* add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) + + + ## 3.1.0 (2023-09-20) diff --git a/packages/common/package.json b/packages/common/package.json index 5ce64628d..a908815d9 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "3.1.0", + "version": "3.1.1", "description": "common utils to be used for aa transactions", "keywords": [ "utils" @@ -41,8 +41,8 @@ }, "dependencies": { "@account-abstraction/contracts": "^0.6.0", - "@biconomy/core-types": "^3.1.0", - "@biconomy/node-client": "^3.1.0", + "@biconomy/core-types": "^3.1.1", + "@biconomy/node-client": "^3.1.1", "@ethersproject/abi": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/providers": "^5.7.0", diff --git a/packages/core-types/CHANGELOG.md b/packages/core-types/CHANGELOG.md index 3eca80798..5679c227a 100644 --- a/packages/core-types/CHANGELOG.md +++ b/packages/core-types/CHANGELOG.md @@ -3,6 +3,15 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.1 (2023-11-09) + + +### Features + +* add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) + + + ## 3.1.0 (2023-09-20) diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 20b22ef66..bb3de3795 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/core-types", - "version": "3.1.0", + "version": "3.1.1", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md index 410aa56d8..d46927c84 100644 --- a/packages/modules/CHANGELOG.md +++ b/packages/modules/CHANGELOG.md @@ -3,6 +3,15 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.1 (2023-11-09) + + +### Bug Fixes + +* Fix update batched session router address and signing logic ([107b881](https://github.com/bcnmy/biconomy-client-sdk/commit/107b881da4b1a6da1f9db22ac54eda62f8c05b59)) + + + ## 3.1.0 (2023-09-20) Modular Account Abstraction is here. diff --git a/packages/modules/package.json b/packages/modules/package.json index 16e4f9f15..47550c536 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/modules", - "version": "3.1.0", + "version": "3.1.1", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -34,9 +34,9 @@ "access": "public" }, "dependencies": { - "@biconomy/common": "^3.1.0", - "@biconomy/core-types": "^3.1.0", - "@biconomy/node-client": "^3.1.0", + "@biconomy/common": "^3.1.1", + "@biconomy/core-types": "^3.1.1", + "@biconomy/node-client": "^3.1.1", "ethereumjs-util": "^7.1.5", "ethers": "^5.7.2", "merkletreejs": "^0.3.9" diff --git a/packages/node-client/CHANGELOG.md b/packages/node-client/CHANGELOG.md index b2f9ab90e..e1114f85a 100644 --- a/packages/node-client/CHANGELOG.md +++ b/packages/node-client/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.1 (2023-11-09) +Version Bump Only. + + + + ## 3.1.0 (2023-09-20) Version Bump Only. @@ -57,4 +63,3 @@ Version Bump Only. ### Bug Fixes * smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) - diff --git a/packages/node-client/package.json b/packages/node-client/package.json index bcdb1bc82..2c25f0103 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/node-client", - "version": "3.1.0", + "version": "3.1.1", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -66,7 +66,7 @@ "access": "public" }, "dependencies": { - "@biconomy/core-types": "^3.1.0", + "@biconomy/core-types": "^3.1.1", "@ethersproject/abstract-signer": "^5.6.0", "@nomiclabs/hardhat-ethers": "^2.1.0", "node-fetch": "^2.6.6" diff --git a/packages/particle-auth/CHANGELOG.md b/packages/particle-auth/CHANGELOG.md index d57e34708..1ed5215bf 100644 --- a/packages/particle-auth/CHANGELOG.md +++ b/packages/particle-auth/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.1 (2023-11-09) + + +### Features + +* Upgrade package version ([])(https://github.com/bcnmy/biconomy-client-sdk/commit/d467b85) + + ## 3.1.0 (2023-09-20) Version Bump Only. diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index ca96bcebb..684c6889b 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/particle-auth", - "version": "3.1.0", + "version": "3.1.1", "description": "Particle auth for Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -37,7 +37,7 @@ }, "dependencies": { "@particle-network/auth": "^1.2.1", - "@particle-network/provider": "^1.2.0", - "@particle-network/biconomy": "^1.0.0" + "@particle-network/biconomy": "^1.0.0", + "@particle-network/provider": "^1.2.0" } } diff --git a/packages/paymaster/CHANGELOG.md b/packages/paymaster/CHANGELOG.md index f45d42cc2..048cc2c64 100644 --- a/packages/paymaster/CHANGELOG.md +++ b/packages/paymaster/CHANGELOG.md @@ -3,6 +3,15 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.1 (2023-11-09) + + +### Bug Fixes + +* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) + + + ## 3.1.0 (2023-09-20) Version Bump Only. diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index acf5bcc4d..bceb3fac8 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/paymaster", - "version": "3.1.0", + "version": "3.1.1", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -37,8 +37,8 @@ "access": "public" }, "dependencies": { - "@biconomy/common": "^3.1.0", - "@biconomy/core-types": "^3.1.0", + "@biconomy/common": "^3.1.1", + "@biconomy/core-types": "^3.1.1", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/properties": "^5.7.0", "ethers": "^5.7.0" diff --git a/packages/transak/CHANGELOG.md b/packages/transak/CHANGELOG.md index 4adbb2d26..a1f18fd46 100644 --- a/packages/transak/CHANGELOG.md +++ b/packages/transak/CHANGELOG.md @@ -3,6 +3,15 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.1 (2023-11-09) + +VERSION bump only + + + + + + ## 3.1.0 (2023-09-20) ### Bug Fixes diff --git a/packages/transak/package.json b/packages/transak/package.json index 8cae753a0..2337ddc92 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/transak", - "version": "3.1.0", + "version": "3.1.1", "description": "transak for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From 2a3997ed2f6d531b286518eeed9c761047d3a8f2 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 10 Nov 2023 00:15:56 +0530 Subject: [PATCH 0935/1247] version bump and changelog --- packages/modules/src/SessionKeyManagerModule.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index fcae0f383..23e0b8770 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -75,7 +75,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); break; default: - throw new Error("Invalid storage type"); + instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); } } From 7382030d5c6ededb71cf0eabfa856473c6c3d615 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:17:48 +0530 Subject: [PATCH 0936/1247] chore/update simulation types and names for bundler --- packages/account/src/BaseSmartAccount.ts | 2 +- packages/account/src/SmartAccount.ts | 2 +- packages/bundler/src/Bundler.ts | 6 +++--- packages/bundler/src/interfaces/IBundler.ts | 13 +++---------- packages/bundler/src/utils/Types.ts | 4 ---- 5 files changed, 8 insertions(+), 19 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index f0ef1146f..12cef856e 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -201,7 +201,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { Logger.log("userOp validated"); if (!this.bundler) throw new Error("Bundler is not provided"); Logger.log("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp, params); + const bundlerResponse = await this.bundler.sendUserOp(userOp, params?.simulationType); return bundlerResponse; } diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index b23420398..a64ebcdb7 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -290,7 +290,7 @@ export abstract class SmartAccount implements ISmartAccount { Logger.log("userOp validated"); if (!this.bundler) throw new Error("Bundler is not provided"); Logger.log("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp, params); + const bundlerResponse = await this.bundler.sendUserOp(userOp, params?.simulationType); return bundlerResponse; } } diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 43668d25e..3083b15ec 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -10,11 +10,11 @@ import { SendUserOpResponse, UserOpGasResponse, UserOpByHashResponse, - SendUserOpOptions, GetGasFeeValuesResponse, GasFeeValues, UserOpStatus, GetUserOperationStatusResponse, + SimulationType, } from "./utils/Types"; import { resolveProperties } from "ethers/lib/utils"; import { deepHexlify, sendRequest, getTimestampInSeconds, HttpMethod, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; @@ -109,13 +109,13 @@ export class Bundler implements IBundler { * @description This function will send signed userOp to bundler to get mined on chain * @returns Promise */ - async sendUserOp(userOp: UserOperation, simulationParam?: SendUserOpOptions): Promise { + async sendUserOp(userOp: UserOperation, simulationType?: SimulationType): Promise { const chainId = this.bundlerConfig.chainId; // transformUserOP will convert all bigNumber values to string userOp = transformUserOP(userOp); const hexifiedUserOp = deepHexlify(await resolveProperties(userOp)); const simType = { - simulation_type: simulationParam?.simulationType || "validation", + simulation_type: simulationType || "validation", }; const params = [hexifiedUserOp, this.bundlerConfig.entryPointAddress, simType]; const bundlerUrl = this.getBundlerUrl(); diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts index bf98a39e5..f6d38164d 100644 --- a/packages/bundler/src/interfaces/IBundler.ts +++ b/packages/bundler/src/interfaces/IBundler.ts @@ -1,17 +1,10 @@ -import { - UserOpResponse, - UserOpGasResponse, - UserOpReceipt, - UserOpByHashResponse, - SendUserOpOptions, - GasFeeValues, - UserOpStatus, -} from "../utils/Types"; +import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse, GasFeeValues, UserOpStatus, SimulationType } from "../utils/Types"; import { UserOperation } from "@biconomy/core-types"; export interface IBundler { estimateUserOpGas(_userOp: Partial): Promise; - sendUserOp(_userOp: UserOperation, _simulationParam?: SendUserOpOptions): Promise; + // could have second arg object called options + sendUserOp(_userOp: UserOperation, _simulationType?: SimulationType): Promise; getUserOpReceipt(_userOpHash: string): Promise; getUserOpByHash(_userOpHash: string): Promise; getGasFeeValues(): Promise; diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index c1af046ed..92763b483 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -33,10 +33,6 @@ export type UserOpStatus = { userOperationReceipt?: UserOpReceipt; }; -export type SendUserOpOptions = { - simulationType?: SimulationType; -}; - export type SimulationType = "validation" | "validation_and_execution"; // Converted to JsonRpcResponse with strict type From bf74e60d40d7ad356b36d7914b80849168065577 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 13 Nov 2023 22:13:41 +0530 Subject: [PATCH 0937/1247] refactor as per discussion --- packages/account/src/BaseSmartAccount.ts | 35 +++++++++++++++--------- packages/account/src/SmartAccount.ts | 27 +++++++++++------- 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 12cef856e..b04098024 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -257,26 +257,35 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { Logger.log("userOp in estimation", userOp); if (skipBundlerCall) { - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); } - // Making call to paymaster to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( - this.paymaster as IHybridPaymaster - ).getPaymasterAndData(userOp, paymasterServiceData); - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + if (paymasterServiceData?.mode === PaymasterMode.SPONSORED) { + // Making call to paymaster to get gas estimations for userOp + const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( + this.paymaster as IHybridPaymaster + ).getPaymasterAndData(userOp, paymasterServiceData); + finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + } else { + // do we explicitly check for mode = TOKEN? + // use dummy values for gas limits as fee quote call will ignore this later. + finalUserOp.callGasLimit = 800000; + finalUserOp.verificationGasLimit = 1000000; + finalUserOp.preVerificationGas = 100000; + } } else { - Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); - finalUserOp = await this.calculateUserOpGasValues(userOp); - finalUserOp.paymasterAndData = "0x"; + { + Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); + finalUserOp = await this.calculateUserOpGasValues(userOp); + finalUserOp.paymasterAndData = "0x"; + } } } else { if (!this.bundler) throw new Error("Bundler is not provided"); - // TODO: is this still needed to delete? delete userOp.maxFeePerGas; delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index a64ebcdb7..b6932e6ad 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -118,18 +118,26 @@ export abstract class SmartAccount implements ISmartAccount { Logger.log("userOp in estimation", userOp); if (skipBundlerCall) { - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { + if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); } - // Making call to paymaster to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( - this.paymaster as IHybridPaymaster - ).getPaymasterAndData(userOp, paymasterServiceData); - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + if (paymasterServiceData?.mode === PaymasterMode.SPONSORED) { + // Making call to paymaster to get gas estimations for userOp + const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( + this.paymaster as IHybridPaymaster + ).getPaymasterAndData(userOp, paymasterServiceData); + finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; + finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; + } else { + // do we explicitly check for mode = TOKEN? + // use dummy values for gas limits as fee quote call will ignore this later. + finalUserOp.callGasLimit = 800000; + finalUserOp.verificationGasLimit = 1000000; + finalUserOp.preVerificationGas = 100000; + } } else { Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); finalUserOp = await this.calculateUserOpGasValues(userOp); @@ -137,7 +145,6 @@ export abstract class SmartAccount implements ISmartAccount { } } else { if (!this.bundler) throw new Error("Bundler is not provided"); - // TODO: is this still needed to delete? delete userOp.maxFeePerGas; delete userOp.maxPriorityFeePerGas; // Making call to bundler to get gas estimations for userOp From 804e8a839359d3af6930ad4a7d103903f7f66e0a Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 13 Nov 2023 22:21:10 +0530 Subject: [PATCH 0938/1247] estimate userop gas params --- packages/account/src/BaseSmartAccount.ts | 12 ++++-------- packages/account/src/BiconomySmartAccount.ts | 2 +- packages/account/src/BiconomySmartAccountV2.ts | 10 +++++----- packages/account/src/SmartAccount.ts | 11 ++++------- packages/account/src/utils/Types.ts | 9 ++++++++- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index b04098024..db1f34e19 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -9,7 +9,7 @@ import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; import { SendUserOpParams } from "@biconomy/modules"; import { SponsorUserOperationDto, BiconomyPaymaster, PaymasterMode, IHybridPaymaster } from "@biconomy/paymaster"; -import { BaseSmartAccountConfig, Overrides, TransactionDetailsForUserOp } from "./utils/Types"; +import { BaseSmartAccountConfig, EstimateUserOpGasParams, Overrides, TransactionDetailsForUserOp } from "./utils/Types"; import { GasOverheads } from "./utils/Preverificaiton"; import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; @@ -237,13 +237,9 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { return userOp; } - // TODO // Should make this a Dto - async estimateUserOpGas( - userOp: Partial, - overrides?: Overrides, - skipBundlerGasEstimation?: boolean, - paymasterServiceData?: SponsorUserOperationDto, - ): Promise> { + async estimateUserOpGas(params: EstimateUserOpGasParams): Promise> { + let userOp = params.userOp; + const { overrides, skipBundlerGasEstimation, paymasterServiceData } = params; const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; this.validateUserOp(userOp, requiredFields); diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 46558eac5..fb12a68b6 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -335,7 +335,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart }; // Note: Can change the default behaviour of calling estimations using bundler/local - userOp = await this.estimateUserOpGas(userOp, overrides, skipBundlerGasEstimation, paymasterServiceData); + userOp = await this.estimateUserOpGas({ userOp, overrides, skipBundlerGasEstimation, paymasterServiceData }); Logger.log("UserOp after estimation ", userOp); return userOp; diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 52a10d417..cc81e27b5 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -467,12 +467,12 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { userOp.signature = signature; // Note: Can change the default behaviour of calling estimations using bundler/local - userOp = await this.estimateUserOpGas( + userOp = await this.estimateUserOpGas({ userOp, - buildUseropDto?.overrides, - buildUseropDto?.skipBundlerGasEstimation, - buildUseropDto?.paymasterServiceData, - ); + overrides: buildUseropDto?.overrides, + skipBundlerGasEstimation: buildUseropDto?.skipBundlerGasEstimation, + paymasterServiceData: buildUseropDto?.paymasterServiceData, + }); Logger.log("UserOp after estimation ", userOp); return userOp; diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index b6932e6ad..1ae849de8 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -11,7 +11,7 @@ import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; import { Logger } from "@biconomy/common"; import { IEntryPoint } from "@account-abstraction/contracts"; import { SponsorUserOperationDto, BiconomyPaymaster, IHybridPaymaster, PaymasterMode } from "@biconomy/paymaster"; -import { SmartAccountConfig, Overrides, SendUserOpDto } from "./utils/Types"; +import { SmartAccountConfig, Overrides, SendUserOpDto, EstimateUserOpGasParams } from "./utils/Types"; type UserOperationKey = keyof UserOperation; @@ -99,12 +99,9 @@ export abstract class SmartAccount implements ISmartAccount { return userOp; } - async estimateUserOpGas( - userOp: Partial, - overrides?: Overrides, - skipBundlerGasEstimation?: boolean, - paymasterServiceData?: SponsorUserOperationDto, - ): Promise> { + async estimateUserOpGas(params: EstimateUserOpGasParams): Promise> { + let userOp = params.userOp; + const { overrides, skipBundlerGasEstimation, paymasterServiceData } = params; const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; this.validateUserOp(userOp, requiredFields); diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index d1a286e89..b3a2cf448 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -1,11 +1,11 @@ import { Signer } from "ethers"; -import { ChainId } from "@biconomy/core-types"; import { BigNumberish, BigNumber } from "ethers"; import { IBundler } from "@biconomy/bundler"; import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Provider } from "@ethersproject/providers"; import { GasOverheads } from "./Preverificaiton"; +import { UserOperation, ChainId } from "@biconomy/core-types"; export type EntryPointAddresses = { [address: string]: string; @@ -123,6 +123,13 @@ export type InitializeV2Data = { accountIndex?: number; }; +export type EstimateUserOpGasParams = { + userOp: Partial; + overrides?: Overrides; + skipBundlerGasEstimation?: boolean; + paymasterServiceData?: SponsorUserOperationDto; +}; + export interface TransactionDetailsForUserOp { target: string; data: string; From 0d8b7bdae329f6370c7914632da861506c96b2bb Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 13 Nov 2023 22:35:30 +0530 Subject: [PATCH 0939/1247] lint fixes --- packages/account/src/BaseSmartAccount.ts | 2 +- packages/account/src/SmartAccount.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index db1f34e19..df120b667 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -9,7 +9,7 @@ import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; import { SendUserOpParams } from "@biconomy/modules"; import { SponsorUserOperationDto, BiconomyPaymaster, PaymasterMode, IHybridPaymaster } from "@biconomy/paymaster"; -import { BaseSmartAccountConfig, EstimateUserOpGasParams, Overrides, TransactionDetailsForUserOp } from "./utils/Types"; +import { BaseSmartAccountConfig, EstimateUserOpGasParams, TransactionDetailsForUserOp } from "./utils/Types"; import { GasOverheads } from "./utils/Preverificaiton"; import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index 1ae849de8..644a0aad9 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -11,7 +11,7 @@ import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; import { Logger } from "@biconomy/common"; import { IEntryPoint } from "@account-abstraction/contracts"; import { SponsorUserOperationDto, BiconomyPaymaster, IHybridPaymaster, PaymasterMode } from "@biconomy/paymaster"; -import { SmartAccountConfig, Overrides, SendUserOpDto, EstimateUserOpGasParams } from "./utils/Types"; +import { SmartAccountConfig, SendUserOpDto, EstimateUserOpGasParams } from "./utils/Types"; type UserOperationKey = keyof UserOperation; From 44278c7d3c65e24d4698c4d73b69931b95423113 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 15 Nov 2023 11:20:12 +0530 Subject: [PATCH 0940/1247] default to using 1.0.0 for V1 account --- packages/account/src/SmartAccount.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index 644a0aad9..cfdc6875b 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -120,6 +120,13 @@ export abstract class SmartAccount implements ISmartAccount { throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); } if (paymasterServiceData?.mode === PaymasterMode.SPONSORED) { + const v1BiconomyInfo = { + name: "BICONOMY", + version: "1.0.0", + }; + const smartAccountInfo = paymasterServiceData?.smartAccountInfo ?? v1BiconomyInfo; + paymasterServiceData.smartAccountInfo = smartAccountInfo; + // Making call to paymaster to get gas estimations for userOp const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( this.paymaster as IHybridPaymaster From 5d17b7ab9e73ffc107fb130399d096d0e0042d60 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 15 Nov 2023 11:25:18 +0530 Subject: [PATCH 0941/1247] update receipt max wait interval --- packages/bundler/src/utils/Constants.ts | 52 ++++++++++++------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index 7892814a1..9deecacad 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -66,33 +66,33 @@ export const UserOpWaitForTxHashIntervals: { [key in ChainId]?: number } = { export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = { [ChainId.MAINNET]: 300000, - [ChainId.GOERLI]: 30000, - [ChainId.POLYGON_MUMBAI]: 30000, - [ChainId.POLYGON_MAINNET]: 30000, - [ChainId.BSC_TESTNET]: 30000, - [ChainId.BSC_MAINNET]: 30000, - [ChainId.POLYGON_ZKEVM_TESTNET]: 30000, - [ChainId.POLYGON_ZKEVM_MAINNET]: 30000, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 30000, - [ChainId.ARBITRUM_ONE_MAINNET]: 30000, + [ChainId.GOERLI]: 50000, + [ChainId.POLYGON_MUMBAI]: 50000, + [ChainId.POLYGON_MAINNET]: 60000, + [ChainId.BSC_TESTNET]: 50000, + [ChainId.BSC_MAINNET]: 50000, + [ChainId.POLYGON_ZKEVM_TESTNET]: 40000, + [ChainId.POLYGON_ZKEVM_MAINNET]: 40000, + [ChainId.ARBITRUM_GOERLI_TESTNET]: 50000, + [ChainId.ARBITRUM_ONE_MAINNET]: 50000, [ChainId.ARBITRUM_NOVA_MAINNET]: 30000, - [ChainId.OPTIMISM_MAINNET]: 30000, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 30000, - [ChainId.AVALANCHE_MAINNET]: 30000, - [ChainId.AVALANCHE_TESTNET]: 30000, - [ChainId.MOONBEAM_MAINNET]: 30000, - [ChainId.BASE_GOERLI_TESTNET]: 30000, - [ChainId.BASE_MAINNET]: 30000, - [ChainId.LINEA_TESTNET]: 30000, - [ChainId.LINEA_MAINNET]: 30000, - [ChainId.MANTLE_MAINNET]: 30000, - [ChainId.MANTLE_TESTNET]: 30000, - [ChainId.OPBNB_MAINNET]: 30000, - [ChainId.OPBNB_TESTNET]: 30000, - [ChainId.ASTAR_MAINNET]: 30000, - [ChainId.ASTAR_TESTNET]: 30000, - [ChainId.CHILIZ_MAINNET]: 30000, - [ChainId.CHILIZ_TESTNET]: 30000, + [ChainId.OPTIMISM_MAINNET]: 40000, + [ChainId.OPTIMISM_GOERLI_TESTNET]: 40000, + [ChainId.AVALANCHE_MAINNET]: 40000, + [ChainId.AVALANCHE_TESTNET]: 40000, + [ChainId.MOONBEAM_MAINNET]: 40000, + [ChainId.BASE_GOERLI_TESTNET]: 40000, + [ChainId.BASE_MAINNET]: 40000, + [ChainId.LINEA_TESTNET]: 50000, + [ChainId.LINEA_MAINNET]: 50000, + [ChainId.MANTLE_MAINNET]: 40000, + [ChainId.MANTLE_TESTNET]: 40000, + [ChainId.OPBNB_MAINNET]: 40000, + [ChainId.OPBNB_TESTNET]: 40000, + [ChainId.ASTAR_MAINNET]: 40000, + [ChainId.ASTAR_TESTNET]: 40000, + [ChainId.CHILIZ_MAINNET]: 40000, + [ChainId.CHILIZ_TESTNET]: 40000, }; export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: number } = { From af7052c49f7ba9d6a1a007f15dab0dc36c9417af Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 15 Nov 2023 11:42:57 +0530 Subject: [PATCH 0942/1247] Update gas limit constants in BaseSmartAccount and SmartAccount --- packages/account/src/BaseSmartAccount.ts | 9 ++++----- packages/account/src/SmartAccount.ts | 8 ++++---- packages/account/src/utils/Constants.ts | 6 ++++++ 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index df120b667..36b997526 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -12,7 +12,7 @@ import { SponsorUserOperationDto, BiconomyPaymaster, PaymasterMode, IHybridPayma import { BaseSmartAccountConfig, EstimateUserOpGasParams, TransactionDetailsForUserOp } from "./utils/Types"; import { GasOverheads } from "./utils/Preverificaiton"; import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; +import { DEFAULT_ENTRYPOINT_ADDRESS, DefaultGasLimit } from "./utils/Constants"; import { LRUCache } from "lru-cache"; type UserOperationKey = keyof UserOperation; @@ -267,11 +267,10 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; } else { - // do we explicitly check for mode = TOKEN? // use dummy values for gas limits as fee quote call will ignore this later. - finalUserOp.callGasLimit = 800000; - finalUserOp.verificationGasLimit = 1000000; - finalUserOp.preVerificationGas = 100000; + finalUserOp.callGasLimit = DefaultGasLimit.callGasLimit; + finalUserOp.verificationGasLimit = DefaultGasLimit.verificationGasLimit; + finalUserOp.preVerificationGas = DefaultGasLimit.preVerificationGas; } } else { { diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index cfdc6875b..66efbbeae 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -12,6 +12,7 @@ import { Logger } from "@biconomy/common"; import { IEntryPoint } from "@account-abstraction/contracts"; import { SponsorUserOperationDto, BiconomyPaymaster, IHybridPaymaster, PaymasterMode } from "@biconomy/paymaster"; import { SmartAccountConfig, SendUserOpDto, EstimateUserOpGasParams } from "./utils/Types"; +import { DefaultGasLimit } from "./utils/Constants"; type UserOperationKey = keyof UserOperation; @@ -136,11 +137,10 @@ export abstract class SmartAccount implements ISmartAccount { finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; } else { - // do we explicitly check for mode = TOKEN? // use dummy values for gas limits as fee quote call will ignore this later. - finalUserOp.callGasLimit = 800000; - finalUserOp.verificationGasLimit = 1000000; - finalUserOp.preVerificationGas = 100000; + finalUserOp.callGasLimit = DefaultGasLimit.callGasLimit; + finalUserOp.verificationGasLimit = DefaultGasLimit.verificationGasLimit; + finalUserOp.preVerificationGas = DefaultGasLimit.preVerificationGas; } } else { Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index fbf741c48..40a5c053e 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -49,3 +49,9 @@ export const PROXY_CREATION_CODE = "0x6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033"; export const ADDRESS_RESOLVER_ADDRESS = "0x00000E81673606e07fC79CE5F1b3B26957844468"; + +export const DefaultGasLimit = { + callGasLimit: 800000, + verificationGasLimit: 1000000, + preVerificationGas: 100000, +}; From b62c50681ad5297a5f9a4264312c3ebc4d14eaa8 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 15 Nov 2023 12:08:44 +0530 Subject: [PATCH 0943/1247] Fix import paths in ERC20SessionValidationModule.ts --- .../ERC20SessionValidationModule.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts index eee1c6a1e..4a9f416ee 100644 --- a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts +++ b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts @@ -1,6 +1,6 @@ import { defaultAbiCoder } from "ethers/lib/utils"; -import { ISessionValidationModule } from "interfaces/ISessionValidationModule"; -import { ERC20SessionKeyData, SessionValidationModuleConfig } from "utils/Types"; +import { ISessionValidationModule } from "../interfaces/ISessionValidationModule"; +import { ERC20SessionKeyData, SessionValidationModuleConfig } from "../utils/Types"; /** * Session validation module for ERC20 token transfers. From 950e4d6eaa9d4d5aa901c4feaaf789dd3dc85067 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Wed, 15 Nov 2023 12:49:17 +0530 Subject: [PATCH 0944/1247] default pnd 0x --- packages/account/src/BiconomySmartAccount.ts | 1 + packages/account/src/BiconomySmartAccountV2.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index fb12a68b6..e5dba89bf 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -336,6 +336,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart // Note: Can change the default behaviour of calling estimations using bundler/local userOp = await this.estimateUserOpGas({ userOp, overrides, skipBundlerGasEstimation, paymasterServiceData }); + userOp.paymasterAndData = userOp.paymasterAndData ?? "0x"; Logger.log("UserOp after estimation ", userOp); return userOp; diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index cc81e27b5..aec1a11fb 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -473,6 +473,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { skipBundlerGasEstimation: buildUseropDto?.skipBundlerGasEstimation, paymasterServiceData: buildUseropDto?.paymasterServiceData, }); + userOp.paymasterAndData = userOp.paymasterAndData ?? "0x"; Logger.log("UserOp after estimation ", userOp); return userOp; From ec5c3a352e8caab6e94234264f4cd5cb32e5af3f Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 22 Nov 2023 11:46:56 +0530 Subject: [PATCH 0945/1247] Update import paths in SessionLocalStorage and Types modules --- packages/modules/src/session-storage/SessionLocalStorage.ts | 2 +- packages/modules/src/utils/Types.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/modules/src/session-storage/SessionLocalStorage.ts b/packages/modules/src/session-storage/SessionLocalStorage.ts index a81fdeea0..3f9ada1c4 100644 --- a/packages/modules/src/session-storage/SessionLocalStorage.ts +++ b/packages/modules/src/session-storage/SessionLocalStorage.ts @@ -1,5 +1,5 @@ import { Wallet, Signer } from "ethers"; -import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "interfaces/ISessionStorage"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage"; export class SessionLocalStorage implements ISessionStorage { private smartAccountAddress: string; diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 34c7e8f04..71f45e8c9 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,7 +1,7 @@ import { ChainId, UserOperation } from "@biconomy/core-types"; import { Signer } from "ethers"; import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; -import { ISessionStorage } from "interfaces/ISessionStorage"; +import { ISessionStorage } from "../interfaces/ISessionStorage"; export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' From 056ada54401ac3673e41b81c88e194044e01e953 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Mon, 4 Dec 2023 13:03:40 +0200 Subject: [PATCH 0946/1247] Abstract paymaster through "apiKey" param --- package.json | 3 +- packages/account/src/BaseSmartAccount.ts | 5 +- packages/account/src/utils/Types.ts | 1 + .../tests/SmartAccountV3.local.spec.ts | 138 ++++++++++++++++++ 4 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 packages/account/tests/SmartAccountV3.local.spec.ts diff --git a/package.json b/package.json index 35f668de6..4ad68a0d8 100644 --- a/package.json +++ b/package.json @@ -52,11 +52,11 @@ ] }, "dependencies": { + "dotenv": "^16.3.1", "node-gyp": "^9.4.0", "typescript": "^5.2.2" }, "devDependencies": { - "ganache": "^7.9.1", "@types/debug": "^4.1.9", "@types/jest": "^29.5.4", "@typescript-eslint/eslint-plugin": "^6.7.0", @@ -68,6 +68,7 @@ "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-security": "^1.7.1", + "ganache": "^7.9.1", "hardhat": "^2.17.3", "jest": "^29.7.0", "lerna": "^7.2.0", diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 36b997526..511f2a824 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -47,12 +47,15 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { this.overheads = _smartAccountConfig.overheads; this.entryPointAddress = _smartAccountConfig.entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS; this.accountAddress = _smartAccountConfig.accountAddress; - this.paymaster = _smartAccountConfig.paymaster; this.bundler = _smartAccountConfig.bundler; this.chainId = _smartAccountConfig.chainId; this.provider = _smartAccountConfig.provider ?? new JsonRpcProvider(RPC_PROVIDER_URLS[this.chainId]); + if(_smartAccountConfig.apiKey) { + this.paymaster = new BiconomyPaymaster({paymasterUrl: `https://paymaster.biconomy.io/api/v1/${_smartAccountConfig.chainId}/${_smartAccountConfig.apiKey}`}); + } + // Create an instance of the EntryPoint contract using the provided address and provider (facory "connect" contract address) // Then, set the transaction's sender ("from" address) to the zero address (AddressZero). (contract "connect" from address) this.entryPoint = EntryPoint__factory.connect(this.entryPointAddress, this.provider).connect(ethers.constants.AddressZero); diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index b3a2cf448..945a836df 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -44,6 +44,7 @@ export interface BaseSmartAccountConfig { accountAddress?: string; overheads?: Partial; paymaster?: IPaymaster; // PaymasterAPI + apiKey?: string; bundler?: IBundler; // like HttpRpcClient chainId: ChainId; } diff --git a/packages/account/tests/SmartAccountV3.local.spec.ts b/packages/account/tests/SmartAccountV3.local.spec.ts new file mode 100644 index 000000000..08f321b4c --- /dev/null +++ b/packages/account/tests/SmartAccountV3.local.spec.ts @@ -0,0 +1,138 @@ +import { EntryPoint, EntryPoint__factory, UserOperationStruct, SimpleAccountFactory__factory } from "@account-abstraction/contracts"; +import { Wallet, ethers } from "ethers"; +import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; + +import { + SmartAccount_v200, + SmartAccountFactory_v200, + SmartAccount_v200__factory, + SmartAccountFactory_v200__factory, + ECDSAOwnershipRegistryModule_v100__factory, +} from "@biconomy/common"; + +import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; +import { ChainId } from "@biconomy/core-types"; +import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; +import { BaseValidationModule } from "@biconomy/modules"; +import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; +import { IHybridPaymaster, PaymasterMode, SponsorUserOperationDto } from "@biconomy/paymaster"; +import { DEFAULT_ENTRYPOINT_ADDRESS } from "../src/utils/Constants"; +import { Bundler, IBundler } from "@biconomy/bundler"; + +require('dotenv').config(); + +const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); +const signer = provider.getSigner(); + +describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { + let owner: Wallet; + let factoryOwner: Wallet; + let account: BiconomySmartAccountV2; + let entryPoint: EntryPoint; + let bundler: IBundler; + let beneficiary: string; + let recipient: SampleRecipient; + let accountFactory: SmartAccountFactory_v200; + let ecdsaModule: ECDSAOwnershipRegistryModule_v100; + + let module1: BaseValidationModule; + + beforeAll(async () => { + owner = Wallet.createRandom(); + entryPoint = await new EntryPoint__factory(signer).deploy(); + console.log("ep address ", entryPoint.address); + beneficiary = await signer.getAddress(); + factoryOwner = Wallet.createRandom(); + + const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); + + accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); + + ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); + + module1 = await ECDSAOwnershipValidationModule.create({ + signer: owner, + moduleAddress: ecdsaModule.address, + }); + + console.log("provider url ", provider.connection.url); + + recipient = await new SampleRecipient__factory(signer).deploy(); + await new Promise((resolve) => setTimeout(resolve, 10000)); + }, 30000); + + it("Create a smart account with paymaster through api key", async () => { + + account = await BiconomySmartAccountV2.create({ + chainId: ChainId.GANACHE, + entryPointAddress: entryPoint.address, + apiKey: process.env.API_KEY, + factoryAddress: accountFactory.address, + defaultFallbackHandler: await accountFactory.minimalHandler(), + defaultValidationModule: module1, + activeValidationModule: module1, + }); + + const address = await account.getAccountAddress(); + console.log("account address ", address); + + const paymaster = account.paymaster; + + expect(paymaster).not.toBeNull() + expect(paymaster).not.toBeUndefined() + + expect(address).toBe(account.accountAddress); + }, 10000); + + // it("Create a smart account with paymaster through api key and send gasless tx", async () => { + + // account = await BiconomySmartAccountV2.create({ + // chainId: ChainId.GANACHE, + // entryPointAddress: entryPoint.address, + // apiKey: process.env.API_KEY, + // factoryAddress: accountFactory.address, + // defaultFallbackHandler: await accountFactory.minimalHandler(), + // defaultValidationModule: module1, + // activeValidationModule: module1, + // }); + + // const address = await account.getAccountAddress(); + // console.log("account address ", address); + + // const paymaster = account.paymaster; + + // expect(paymaster).not.toBeNull() + // expect(paymaster).not.toBeUndefined() + + // expect(address).toBe(account.accountAddress); + + // const randomWallet = ethers.Wallet.createRandom(); + + // const emptyTx = { + // to: randomWallet.address, + // data: "0x", + // }; + + // let userOp = await account.buildUserOp([emptyTx]); + + // const biconomyPaymaster = account.paymaster as IHybridPaymaster; + + // let paymasterServiceData: SponsorUserOperationDto = { + // mode: PaymasterMode.SPONSORED, + // smartAccountInfo: { + // name: 'BICONOMY', + // version: '2.0.0' + // }, + // }; + + // const paymasterAndDataResponse = await biconomyPaymaster.getPaymasterAndData(userOp, paymasterServiceData); + // userOp.paymasterAndData = paymasterAndDataResponse.paymasterAndData; + + // const userOpResponse = await account.sendUserOp(userOp); + + // console.log(userOpResponse.userOpHash, 'USER OP HASH'); + // expect(userOpResponse.userOpHash).not.toBeUndefined(); + + // }, 10000); + +}); From 51bd978351c6da758ad74ae5acbc6e4603bb30b1 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Mon, 4 Dec 2023 15:46:15 +0200 Subject: [PATCH 0947/1247] Abstract module instance from SCW create() method config. --- .../account/src/BiconomySmartAccountV2.ts | 18 +++-- packages/account/src/utils/Types.ts | 3 +- ...AccountV2-Module-Abstraction.local.spec.ts | 66 +++++++++++++++++++ 3 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index aec1a11fb..835a9788f 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -22,7 +22,7 @@ import { SmartAccountInfo, QueryParamsForAddressResolver, } from "./utils/Types"; -import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; +import { BaseValidationModule, DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; @@ -95,9 +95,19 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { instance.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; instance.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0; - - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; + + if(biconomySmartAccountConfig.defaultValidationModule){ + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; + } else if(biconomySmartAccountConfig.signer) { + instance.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ + signer: biconomySmartAccountConfig.signer, + moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE, + }); + } else { + throw new Error("'signer' param is required if no 'defaultValidationModule' is present"); + } + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion instance.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? instance.defaultValidationModule; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index b3a2cf448..7c5692b48 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -70,8 +70,9 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { implementationAddress?: string; defaultFallbackHandler?: string; rpcUrl?: string; // as good as Provider + signer?: Signer; nodeClientUrl?: string; // very specific to Biconomy - defaultValidationModule: BaseValidationModule; + defaultValidationModule?: BaseValidationModule; activeValidationModule?: BaseValidationModule; scanForUpgradedAccountsFromV1?: boolean; maxIndexForScan?: number; diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts new file mode 100644 index 000000000..8dbd41204 --- /dev/null +++ b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts @@ -0,0 +1,66 @@ +import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; +import { VoidSigner, Wallet, ethers } from "ethers"; +import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; + +import { + SmartAccount_v200, + SmartAccountFactory_v200, + SmartAccount_v200__factory, + SmartAccountFactory_v200__factory, + ECDSAOwnershipRegistryModule_v100__factory, +} from "@biconomy/common"; + +import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; +import { ChainId } from "@biconomy/core-types"; +import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; +import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; + +const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); +const signer = provider.getSigner(); + +describe("BiconomySmartAccountV2 Module Abstraction", () => { + let owner: Wallet; + let factoryOwner: Wallet; + let entryPoint: EntryPoint; + let beneficiary: string; + let recipient: SampleRecipient; + let accountFactory: SmartAccountFactory_v200; + let ecdsaModule: ECDSAOwnershipRegistryModule_v100; + + beforeAll(async () => { + owner = Wallet.createRandom(); + entryPoint = await new EntryPoint__factory(signer).deploy(); + console.log("ep address ", entryPoint.address); + beneficiary = await signer.getAddress(); + factoryOwner = Wallet.createRandom(); + + const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); + + accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); + + ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); + + recipient = await new SampleRecipient__factory(signer).deploy(); + + await new Promise((resolve) => setTimeout(resolve, 10000)); + }, 30000); + + it("Create smart account without providing module", async () => { + + const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ + chainId: ChainId.GANACHE, + entryPointAddress: entryPoint.address, + signer + }); + + const address = await account.getAccountAddress(); + console.log("Module Abstraction Test - Account address ", address); + + expect(address).toBe(account.accountAddress); + + const module = account.activeValidationModule; + console.log(`ACTIVE MODULE - ${module.getAddress()}`); + + }, 10000); + +}); From 49c0e75c251940038c5fcaac95fa6a772e4858cd Mon Sep 17 00:00:00 2001 From: GabiDev Date: Mon, 4 Dec 2023 21:05:01 +0200 Subject: [PATCH 0948/1247] Fixed lint and renamed test file --- packages/account/src/BaseSmartAccount.ts | 6 +- packages/account/src/utils/Types.ts | 2 +- ...ccountV2-Abstract-Paymaster.local.spec.ts} | 59 +------------------ 3 files changed, 8 insertions(+), 59 deletions(-) rename packages/account/tests/{SmartAccountV3.local.spec.ts => SmartAccountV2-Abstract-Paymaster.local.spec.ts} (58%) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 511f2a824..1843af893 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -52,8 +52,10 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { this.provider = _smartAccountConfig.provider ?? new JsonRpcProvider(RPC_PROVIDER_URLS[this.chainId]); - if(_smartAccountConfig.apiKey) { - this.paymaster = new BiconomyPaymaster({paymasterUrl: `https://paymaster.biconomy.io/api/v1/${_smartAccountConfig.chainId}/${_smartAccountConfig.apiKey}`}); + if (_smartAccountConfig.apiKey) { + this.paymaster = new BiconomyPaymaster({ + paymasterUrl: `https://paymaster.biconomy.io/api/v1/${_smartAccountConfig.chainId}/${_smartAccountConfig.apiKey}`, + }); } // Create an instance of the EntryPoint contract using the provided address and provider (facory "connect" contract address) diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 945a836df..6bedb9bf0 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -44,7 +44,7 @@ export interface BaseSmartAccountConfig { accountAddress?: string; overheads?: Partial; paymaster?: IPaymaster; // PaymasterAPI - apiKey?: string; + apiKey?: string; bundler?: IBundler; // like HttpRpcClient chainId: ChainId; } diff --git a/packages/account/tests/SmartAccountV3.local.spec.ts b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts similarity index 58% rename from packages/account/tests/SmartAccountV3.local.spec.ts rename to packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts index 08f321b4c..09ed514a0 100644 --- a/packages/account/tests/SmartAccountV3.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts @@ -1,4 +1,4 @@ -import { EntryPoint, EntryPoint__factory, UserOperationStruct, SimpleAccountFactory__factory } from "@account-abstraction/contracts"; +import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { Wallet, ethers } from "ethers"; import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; @@ -15,9 +15,7 @@ import { ChainId } from "@biconomy/core-types"; import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { BaseValidationModule } from "@biconomy/modules"; import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { IHybridPaymaster, PaymasterMode, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { DEFAULT_ENTRYPOINT_ADDRESS } from "../src/utils/Constants"; -import { Bundler, IBundler } from "@biconomy/bundler"; +import { IBundler } from "@biconomy/bundler"; require('dotenv').config(); @@ -84,55 +82,4 @@ describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { expect(address).toBe(account.accountAddress); }, 10000); - // it("Create a smart account with paymaster through api key and send gasless tx", async () => { - - // account = await BiconomySmartAccountV2.create({ - // chainId: ChainId.GANACHE, - // entryPointAddress: entryPoint.address, - // apiKey: process.env.API_KEY, - // factoryAddress: accountFactory.address, - // defaultFallbackHandler: await accountFactory.minimalHandler(), - // defaultValidationModule: module1, - // activeValidationModule: module1, - // }); - - // const address = await account.getAccountAddress(); - // console.log("account address ", address); - - // const paymaster = account.paymaster; - - // expect(paymaster).not.toBeNull() - // expect(paymaster).not.toBeUndefined() - - // expect(address).toBe(account.accountAddress); - - // const randomWallet = ethers.Wallet.createRandom(); - - // const emptyTx = { - // to: randomWallet.address, - // data: "0x", - // }; - - // let userOp = await account.buildUserOp([emptyTx]); - - // const biconomyPaymaster = account.paymaster as IHybridPaymaster; - - // let paymasterServiceData: SponsorUserOperationDto = { - // mode: PaymasterMode.SPONSORED, - // smartAccountInfo: { - // name: 'BICONOMY', - // version: '2.0.0' - // }, - // }; - - // const paymasterAndDataResponse = await biconomyPaymaster.getPaymasterAndData(userOp, paymasterServiceData); - // userOp.paymasterAndData = paymasterAndDataResponse.paymasterAndData; - - // const userOpResponse = await account.sendUserOp(userOp); - - // console.log(userOpResponse.userOpHash, 'USER OP HASH'); - // expect(userOpResponse.userOpHash).not.toBeUndefined(); - - // }, 10000); - -}); +}); \ No newline at end of file From 3c74fe3d521f5bea81fbb178b42148860f9f338e Mon Sep 17 00:00:00 2001 From: GabiDev Date: Mon, 4 Dec 2023 21:05:44 +0200 Subject: [PATCH 0949/1247] Fixed lint --- packages/account/src/BiconomySmartAccountV2.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 835a9788f..e2c47a5ab 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -22,7 +22,13 @@ import { SmartAccountInfo, QueryParamsForAddressResolver, } from "./utils/Types"; -import { BaseValidationModule, DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; +import { + BaseValidationModule, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + ECDSAOwnershipValidationModule, + ModuleInfo, + SendUserOpParams, +} from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; @@ -95,11 +101,11 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { instance.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; instance.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0; - - if(biconomySmartAccountConfig.defaultValidationModule){ + + if (biconomySmartAccountConfig.defaultValidationModule) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - } else if(biconomySmartAccountConfig.signer) { + } else if (biconomySmartAccountConfig.signer) { instance.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ signer: biconomySmartAccountConfig.signer, moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE, @@ -107,7 +113,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } else { throw new Error("'signer' param is required if no 'defaultValidationModule' is present"); } - + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion instance.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? instance.defaultValidationModule; From cc5c30ab9b5c29f3ca16c3e08448a4ccd7dfd52c Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 5 Dec 2023 00:07:45 +0200 Subject: [PATCH 0950/1247] Abstract module instance from SDK developer | default to ECDSA | make signer required | add module type --- .../account/src/BiconomySmartAccountV2.ts | 47 +++++++++++++++---- packages/account/src/utils/Types.ts | 18 ++++++- ...AccountV2-Module-Abstraction.local.spec.ts | 45 ++++++++++++++++-- .../tests/SmartAccountV2.local.spec.ts | 3 ++ 4 files changed, 98 insertions(+), 15 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index e2c47a5ab..44f400d5c 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -21,12 +21,13 @@ import { NonceOptions, SmartAccountInfo, QueryParamsForAddressResolver, + ValidationModule, } from "./utils/Types"; import { BaseValidationModule, - DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule, ModuleInfo, + MultiChainValidationModule, SendUserOpParams, } from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; @@ -85,7 +86,18 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) { super(biconomySmartAccountConfig); } - + + /** + * Creates a new instance of BiconomySmartAccountV2. + * + * This method will create a BiconomySmartAccountV2 instance but will not deploy the Smart Account. + * + * Deployment of the Smart Account will be done when you call the first sendUserOp method. + * + * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance. + * @returns A promise that resolves to a new instance of BiconomySmartAccountV2. + * @throws An error if something is wrong with the smart account instance creation. + */ public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 @@ -102,16 +114,15 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { instance.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0; - if (biconomySmartAccountConfig.defaultValidationModule) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + if(biconomySmartAccountConfig.defaultValidationModule) { instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - } else if (biconomySmartAccountConfig.signer) { + } else if(biconomySmartAccountConfig.module) { + instance.defaultValidationModule = await instance.checkAndCreateModule(biconomySmartAccountConfig, instance); + } else { instance.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ signer: biconomySmartAccountConfig.signer, - moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE, + moduleAddress: biconomySmartAccountConfig.module, }); - } else { - throw new Error("'signer' param is required if no 'defaultValidationModule' is present"); } // eslint-disable-next-line @typescript-eslint/no-non-null-assertion @@ -134,6 +145,26 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return instance; } + async checkAndCreateModule(biconomySmartAccountConfig: BiconomySmartAccountV2Config, instance: BiconomySmartAccountV2): Promise { + switch (biconomySmartAccountConfig.module) { + case ValidationModule.ECDSA_OWNERSHIP: + return await ECDSAOwnershipValidationModule.create({ + signer: biconomySmartAccountConfig.signer, + moduleAddress: biconomySmartAccountConfig.module, + }); + case ValidationModule.MULTICHAIN: + return await MultiChainValidationModule.create({ + signer: biconomySmartAccountConfig.signer, + moduleAddress: biconomySmartAccountConfig.module, + }); + default: + return await ECDSAOwnershipValidationModule.create({ + signer: biconomySmartAccountConfig.signer, + moduleAddress: biconomySmartAccountConfig.module, + }); + } + } + async _getAccountContract(): Promise { if (this.accountContract == null) { this.accountContract = SmartAccount_v200__factory.connect(await this.getAccountAddress(), this.provider); diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 7c5692b48..8fce1d1bc 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -2,7 +2,7 @@ import { Signer } from "ethers"; import { BigNumberish, BigNumber } from "ethers"; import { IBundler } from "@biconomy/bundler"; import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; +import { BaseValidationModule, DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_MULTICHAIN_MODULE, ModuleInfo } from "@biconomy/modules"; import { Provider } from "@ethersproject/providers"; import { GasOverheads } from "./Preverificaiton"; import { UserOperation, ChainId } from "@biconomy/core-types"; @@ -36,6 +36,19 @@ export type SmartAccountConfig = { bundler?: IBundler; }; +/** + * Enum representing available validation modules. + * + * - `ECDSA_OWNERSHIP`: Default module for ECDSA ownership validation. + * - `MULTICHAIN`: Default module for multi-chain validation. + * - For SESSION MODULE or BATCHED SESSION please provide the module with "defaultValidationModule" in the config + * - If you don't provide any module, ECDSA_OWNERSHIP will be used as default + */ +export enum ValidationModule { + ECDSA_OWNERSHIP = DEFAULT_ECDSA_OWNERSHIP_MODULE, + MULTICHAIN = DEFAULT_MULTICHAIN_MODULE, +} + export interface BaseSmartAccountConfig { // owner?: Signer // can be in child classes index?: number; @@ -70,8 +83,9 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { implementationAddress?: string; defaultFallbackHandler?: string; rpcUrl?: string; // as good as Provider - signer?: Signer; + signer: Signer; nodeClientUrl?: string; // very specific to Biconomy + module?: ValidationModule, defaultValidationModule?: BaseValidationModule; activeValidationModule?: BaseValidationModule; scanForUpgradedAccountsFromV1?: boolean; diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts index 8dbd41204..e66e50a0f 100644 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts @@ -1,5 +1,5 @@ import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { VoidSigner, Wallet, ethers } from "ethers"; +import { Wallet, ethers } from "ethers"; import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; import { @@ -13,7 +13,7 @@ import { import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; import { ChainId } from "@biconomy/core-types"; import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; +import { ValidationModule } from "../src"; const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); @@ -45,12 +45,31 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { await new Promise((resolve) => setTimeout(resolve, 10000)); }, 30000); - it("Create smart account without providing module", async () => { + it("Create smart account with default module (ECDSA)", async () => { const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, entryPointAddress: entryPoint.address, - signer + signer, + }); + + const address = await account.getAccountAddress(); + console.log("Module Abstraction Test - Account address ", address); + + expect(address).toBe(account.accountAddress); + + const module = account.activeValidationModule; + console.log(`ACTIVE MODULE - ${module.getAddress()}`); + + }, 10000); + + it("Create smart account with ECDSA module", async () => { + + const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ + chainId: ChainId.GANACHE, + entryPointAddress: entryPoint.address, + signer, + module: ValidationModule.ECDSA_OWNERSHIP, }); const address = await account.getAccountAddress(); @@ -60,7 +79,23 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { const module = account.activeValidationModule; console.log(`ACTIVE MODULE - ${module.getAddress()}`); - }, 10000); + it("Create smart account with multichain module", async () => { + + const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ + chainId: ChainId.GANACHE, + entryPointAddress: entryPoint.address, + signer, + }); + + const address = await account.getAccountAddress(); + console.log("Module Abstraction Test - Account address ", address); + + expect(address).toBe(account.accountAddress); + + const module = account.activeValidationModule; + console.log(`ACTIVE MODULE - ${module.getAddress()}`); + + }, 10000); }); diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index cea9f406c..99d64bb42 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -77,6 +77,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: module1, activeValidationModule: module1, + signer }); // console.log('account api provider ', accountAPI.provider) @@ -158,6 +159,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: module2, activeValidationModule: module2, + signer }); // TODO @@ -350,6 +352,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: newmodule, activeValidationModule: newmodule, + signer }); const address = await accountAPI2.getAccountAddress(); From 58a6f46e2e1c648c8b32ff0edb901e58448da428 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 5 Dec 2023 00:08:40 +0200 Subject: [PATCH 0951/1247] Fixed lint --- .../account/src/BiconomySmartAccountV2.ts | 32 ++++++++----------- packages/account/src/utils/Types.ts | 2 +- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 44f400d5c..e7ed3afa3 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -23,13 +23,7 @@ import { QueryParamsForAddressResolver, ValidationModule, } from "./utils/Types"; -import { - BaseValidationModule, - ECDSAOwnershipValidationModule, - ModuleInfo, - MultiChainValidationModule, - SendUserOpParams, -} from "@biconomy/modules"; +import { BaseValidationModule, ECDSAOwnershipValidationModule, ModuleInfo, MultiChainValidationModule, SendUserOpParams } from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; @@ -86,18 +80,18 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) { super(biconomySmartAccountConfig); } - - /** + + /** * Creates a new instance of BiconomySmartAccountV2. - * + * * This method will create a BiconomySmartAccountV2 instance but will not deploy the Smart Account. - * + * * Deployment of the Smart Account will be done when you call the first sendUserOp method. * * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance. * @returns A promise that resolves to a new instance of BiconomySmartAccountV2. * @throws An error if something is wrong with the smart account instance creation. - */ + */ public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 @@ -114,10 +108,10 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { instance.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0; - if(biconomySmartAccountConfig.defaultValidationModule) { + if (biconomySmartAccountConfig.defaultValidationModule) { instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - } else if(biconomySmartAccountConfig.module) { - instance.defaultValidationModule = await instance.checkAndCreateModule(biconomySmartAccountConfig, instance); + } else if (biconomySmartAccountConfig.module) { + instance.defaultValidationModule = await instance.checkAndCreateModule(biconomySmartAccountConfig); } else { instance.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ signer: biconomySmartAccountConfig.signer, @@ -145,20 +139,20 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return instance; } - async checkAndCreateModule(biconomySmartAccountConfig: BiconomySmartAccountV2Config, instance: BiconomySmartAccountV2): Promise { + async checkAndCreateModule(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { switch (biconomySmartAccountConfig.module) { case ValidationModule.ECDSA_OWNERSHIP: - return await ECDSAOwnershipValidationModule.create({ + return ECDSAOwnershipValidationModule.create({ signer: biconomySmartAccountConfig.signer, moduleAddress: biconomySmartAccountConfig.module, }); case ValidationModule.MULTICHAIN: - return await MultiChainValidationModule.create({ + return MultiChainValidationModule.create({ signer: biconomySmartAccountConfig.signer, moduleAddress: biconomySmartAccountConfig.module, }); default: - return await ECDSAOwnershipValidationModule.create({ + return ECDSAOwnershipValidationModule.create({ signer: biconomySmartAccountConfig.signer, moduleAddress: biconomySmartAccountConfig.module, }); diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 8fce1d1bc..527687c7d 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -85,7 +85,7 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { rpcUrl?: string; // as good as Provider signer: Signer; nodeClientUrl?: string; // very specific to Biconomy - module?: ValidationModule, + module?: ValidationModule; defaultValidationModule?: BaseValidationModule; activeValidationModule?: BaseValidationModule; scanForUpgradedAccountsFromV1?: boolean; From 4943d01b9fcabc7f3589977383323ea6565e6d9c Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 5 Dec 2023 00:15:19 +0200 Subject: [PATCH 0952/1247] Moved paymaster instance logic and apiKey from Base to Biconomy smart account --- packages/account/src/BaseSmartAccount.ts | 6 ------ packages/account/src/BiconomySmartAccountV2.ts | 6 ++++++ packages/account/src/utils/Types.ts | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 1843af893..42b898973 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -52,12 +52,6 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { this.provider = _smartAccountConfig.provider ?? new JsonRpcProvider(RPC_PROVIDER_URLS[this.chainId]); - if (_smartAccountConfig.apiKey) { - this.paymaster = new BiconomyPaymaster({ - paymasterUrl: `https://paymaster.biconomy.io/api/v1/${_smartAccountConfig.chainId}/${_smartAccountConfig.apiKey}`, - }); - } - // Create an instance of the EntryPoint contract using the provided address and provider (facory "connect" contract address) // Then, set the transaction's sender ("from" address) to the zero address (AddressZero). (contract "connect" from address) this.entryPoint = EntryPoint__factory.connect(this.entryPointAddress, this.provider).connect(ethers.constants.AddressZero); diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index aec1a11fb..e79c766fa 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -84,6 +84,12 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 + if (biconomySmartAccountConfig.apiKey) { + instance.paymaster = new BiconomyPaymaster({ + paymasterUrl: `https://paymaster.biconomy.io/api/v1/${biconomySmartAccountConfig.chainId}/${biconomySmartAccountConfig.apiKey}`, + }); + } + const defaultFallbackHandlerAddress = instance.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_FALLBACK_HANDLER_ADDRESS diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 6bedb9bf0..5291e1aad 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -44,7 +44,6 @@ export interface BaseSmartAccountConfig { accountAddress?: string; overheads?: Partial; paymaster?: IPaymaster; // PaymasterAPI - apiKey?: string; bundler?: IBundler; // like HttpRpcClient chainId: ChainId; } @@ -70,6 +69,7 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { senderAddress?: string; implementationAddress?: string; defaultFallbackHandler?: string; + apiKey?: string; rpcUrl?: string; // as good as Provider nodeClientUrl?: string; // very specific to Biconomy defaultValidationModule: BaseValidationModule; From 419670f4bdd9d9b50304a7d200c29af160b56b8b Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 5 Dec 2023 14:54:19 +0200 Subject: [PATCH 0953/1247] Fixed things realted to paymaster abstraction due to review --- packages/account/src/BaseSmartAccount.ts | 4 ++ .../account/src/BiconomySmartAccountV2.ts | 4 +- packages/account/src/utils/Types.ts | 2 +- ...AccountV2-Abstract-Paymaster.local.spec.ts | 37 +++++++++++++++---- 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 42b898973..516c3852e 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -50,6 +50,10 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { this.bundler = _smartAccountConfig.bundler; this.chainId = _smartAccountConfig.chainId; + if (_smartAccountConfig.paymaster) { + this.paymaster = _smartAccountConfig.paymaster; + } + this.provider = _smartAccountConfig.provider ?? new JsonRpcProvider(RPC_PROVIDER_URLS[this.chainId]); // Create an instance of the EntryPoint contract using the provided address and provider (facory "connect" contract address) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index e79c766fa..9b782b5f3 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -84,9 +84,9 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 - if (biconomySmartAccountConfig.apiKey) { + if (biconomySmartAccountConfig.biconomyPaymasterApiKey) { instance.paymaster = new BiconomyPaymaster({ - paymasterUrl: `https://paymaster.biconomy.io/api/v1/${biconomySmartAccountConfig.chainId}/${biconomySmartAccountConfig.apiKey}`, + paymasterUrl: `https://paymaster.biconomy.io/api/v1/${biconomySmartAccountConfig.chainId}/${biconomySmartAccountConfig.biconomyPaymasterApiKey}`, }); } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 5291e1aad..c1db6c5e1 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -69,7 +69,7 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { senderAddress?: string; implementationAddress?: string; defaultFallbackHandler?: string; - apiKey?: string; + biconomyPaymasterApiKey?: string; rpcUrl?: string; // as good as Provider nodeClientUrl?: string; // very specific to Biconomy defaultValidationModule: BaseValidationModule; diff --git a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts index 09ed514a0..28001d14a 100644 --- a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts @@ -1,6 +1,5 @@ import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { Wallet, ethers } from "ethers"; -import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; import { SmartAccount_v200, @@ -15,7 +14,7 @@ import { ChainId } from "@biconomy/core-types"; import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { BaseValidationModule } from "@biconomy/modules"; import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { IBundler } from "@biconomy/bundler"; +import { BiconomyPaymaster } from "@biconomy/paymaster"; require('dotenv').config(); @@ -27,9 +26,6 @@ describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { let factoryOwner: Wallet; let account: BiconomySmartAccountV2; let entryPoint: EntryPoint; - let bundler: IBundler; - let beneficiary: string; - let recipient: SampleRecipient; let accountFactory: SmartAccountFactory_v200; let ecdsaModule: ECDSAOwnershipRegistryModule_v100; @@ -39,7 +35,6 @@ describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { owner = Wallet.createRandom(); entryPoint = await new EntryPoint__factory(signer).deploy(); console.log("ep address ", entryPoint.address); - beneficiary = await signer.getAddress(); factoryOwner = Wallet.createRandom(); const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); @@ -55,7 +50,6 @@ describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { console.log("provider url ", provider.connection.url); - recipient = await new SampleRecipient__factory(signer).deploy(); await new Promise((resolve) => setTimeout(resolve, 10000)); }, 30000); @@ -63,8 +57,9 @@ describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { account = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, - apiKey: process.env.API_KEY, + biconomyPaymasterApiKey: process.env.API_KEY, factoryAddress: accountFactory.address, defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: module1, @@ -82,4 +77,30 @@ describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { expect(address).toBe(account.accountAddress); }, 10000); + it("Create a smart account with paymaster by creating instance", async () => { + + const paymaster = new BiconomyPaymaster({ + paymasterUrl: process.env.PAYMASTER_URL || "", + }) + + account = await BiconomySmartAccountV2.create({ + chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", + entryPointAddress: entryPoint.address, + factoryAddress: accountFactory.address, + defaultFallbackHandler: await accountFactory.minimalHandler(), + defaultValidationModule: module1, + activeValidationModule: module1, + paymaster: paymaster + }); + + const address = await account.getAccountAddress(); + console.log("account address ", address); + + expect(account.paymaster).not.toBeNull() + expect(account.paymaster).not.toBeUndefined() + + expect(address).toBe(account.accountAddress); + }, 10000); + }); \ No newline at end of file From 0376901b7aec8c268a6a3c654d147335974d78f3 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 5 Dec 2023 17:02:25 +0400 Subject: [PATCH 0954/1247] fix: use undefined in place of ! + check on limits returned by paymaster and throw --- packages/account/src/BaseSmartAccount.ts | 17 ++++++++++------- packages/account/src/BiconomySmartAccount.ts | 4 ++-- packages/account/src/BiconomySmartAccountV2.ts | 4 ++-- packages/account/src/SmartAccount.ts | 9 ++++++--- packages/bundler/src/Bundler.ts | 2 +- 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 36b997526..acfdc82e5 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -72,7 +72,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { - if (!userOp[field]) { + if (userOp[field] === null || userOp[field] === undefined) { throw new Error(`${String(field)} is missing in the UserOp`); } } @@ -254,7 +254,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { if (skipBundlerCall) { if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { - if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { + if (userOp.maxFeePerGas === undefined || userOp.maxPriorityFeePerGas === undefined) { throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); } if (paymasterServiceData?.mode === PaymasterMode.SPONSORED) { @@ -262,15 +262,18 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( this.paymaster as IHybridPaymaster ).getPaymasterAndData(userOp, paymasterServiceData); + if(paymasterAndData === "0x" && (callGasLimit === undefined || verificationGasLimit === undefined || preVerificationGas === undefined)) { + throw new Error("Since you intend to use sponsorship paymaster, please check and make sure policies are set on the dashboard"); + } finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; } else { - // use dummy values for gas limits as fee quote call will ignore this later. - finalUserOp.callGasLimit = DefaultGasLimit.callGasLimit; - finalUserOp.verificationGasLimit = DefaultGasLimit.verificationGasLimit; - finalUserOp.preVerificationGas = DefaultGasLimit.preVerificationGas; + // use dummy values for gas limits as fee quote call will ignore this later. + finalUserOp.callGasLimit = DefaultGasLimit.callGasLimit; + finalUserOp.verificationGasLimit = DefaultGasLimit.verificationGasLimit; + finalUserOp.preVerificationGas = DefaultGasLimit.preVerificationGas; } } else { { @@ -287,7 +290,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas(userOp); // if neither user sent gas fee nor the bundler, estimate gas from provider - if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { + if (userOp.maxFeePerGas === undefined && userOp.maxPriorityFeePerGas === undefined && (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined)) { const feeData = await this.provider.getFeeData(); finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index e5dba89bf..d5ae26955 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -343,7 +343,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart } private validateUserOpAndRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { - if (!userOp.callData) { + if (userOp.callData === undefined) { throw new Error("Userop callData cannot be undefined"); } @@ -398,7 +398,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart return userOp; } - if (!userOp.callData) { + if (userOp.callData === undefined) { throw new Error("Userop callData cannot be undefined"); } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index aec1a11fb..04ab99f5c 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -480,7 +480,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } private validateUserOpAndPaymasterRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { - if (!userOp.callData) { + if (userOp.callData === undefined) { throw new Error("UserOp callData cannot be undefined"); } @@ -535,7 +535,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return userOp; } - if (!userOp.callData) { + if (userOp.callData === undefined) { throw new Error("UserOp callData cannot be undefined"); } diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index 66efbbeae..dd93905d4 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -49,7 +49,7 @@ export abstract class SmartAccount implements ISmartAccount { private validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { - if (!userOp[field]) { + if (userOp[field] === undefined || userOp[field] === null) { throw new Error(`${String(field)} is missing in the UserOp`); } } @@ -117,7 +117,7 @@ export abstract class SmartAccount implements ISmartAccount { if (skipBundlerCall) { if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { - if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { + if (userOp.maxFeePerGas === undefined || userOp.maxPriorityFeePerGas === undefined) { throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); } if (paymasterServiceData?.mode === PaymasterMode.SPONSORED) { @@ -132,6 +132,9 @@ export abstract class SmartAccount implements ISmartAccount { const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( this.paymaster as IHybridPaymaster ).getPaymasterAndData(userOp, paymasterServiceData); + if(paymasterAndData === "0x" && (callGasLimit === undefined || verificationGasLimit === undefined || preVerificationGas === undefined)) { + throw new Error("Since you intend to use sponsorship paymaster, please check and make sure policies are set on the dashboard"); + } finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; @@ -155,7 +158,7 @@ export abstract class SmartAccount implements ISmartAccount { const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas(userOp); // if neither user sent gas fee nor the bundler, estimate gas from provider - if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { + if (userOp.maxFeePerGas === undefined && userOp.maxPriorityFeePerGas === undefined && (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined)) { const feeData = await this.provider.getFeeData(); finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 3083b15ec..2321f6b45 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -96,7 +96,7 @@ export class Bundler implements IBundler { const userOpGasResponse = response.result; for (const key in userOpGasResponse) { if (key === "maxFeePerGas" || key === "maxPriorityFeePerGas") continue; - if (!userOpGasResponse[key as keyof UserOpGasResponse]) { + if (userOpGasResponse[key as keyof UserOpGasResponse] === undefined || userOpGasResponse[key as keyof UserOpGasResponse] === null) { throw new Error(`Got undefined ${key} from bundler`); } } From 964abe71176afcaf725ba0d280505f45784293ac Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 5 Dec 2023 17:13:06 +0400 Subject: [PATCH 0955/1247] lint fixes --- packages/account/src/BaseSmartAccount.ts | 16 ++++++++++------ packages/account/src/SmartAccount.ts | 8 ++++++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index acfdc82e5..c6cd23325 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -262,7 +262,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( this.paymaster as IHybridPaymaster ).getPaymasterAndData(userOp, paymasterServiceData); - if(paymasterAndData === "0x" && (callGasLimit === undefined || verificationGasLimit === undefined || preVerificationGas === undefined)) { + if (paymasterAndData === "0x" && (callGasLimit === undefined || verificationGasLimit === undefined || preVerificationGas === undefined)) { throw new Error("Since you intend to use sponsorship paymaster, please check and make sure policies are set on the dashboard"); } finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; @@ -270,10 +270,10 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; } else { - // use dummy values for gas limits as fee quote call will ignore this later. - finalUserOp.callGasLimit = DefaultGasLimit.callGasLimit; - finalUserOp.verificationGasLimit = DefaultGasLimit.verificationGasLimit; - finalUserOp.preVerificationGas = DefaultGasLimit.preVerificationGas; + // use dummy values for gas limits as fee quote call will ignore this later. + finalUserOp.callGasLimit = DefaultGasLimit.callGasLimit; + finalUserOp.verificationGasLimit = DefaultGasLimit.verificationGasLimit; + finalUserOp.preVerificationGas = DefaultGasLimit.preVerificationGas; } } else { { @@ -290,7 +290,11 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas(userOp); // if neither user sent gas fee nor the bundler, estimate gas from provider - if (userOp.maxFeePerGas === undefined && userOp.maxPriorityFeePerGas === undefined && (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined)) { + if ( + userOp.maxFeePerGas === undefined && + userOp.maxPriorityFeePerGas === undefined && + (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) + ) { const feeData = await this.provider.getFeeData(); finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index dd93905d4..f4e2597b9 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -132,7 +132,7 @@ export abstract class SmartAccount implements ISmartAccount { const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( this.paymaster as IHybridPaymaster ).getPaymasterAndData(userOp, paymasterServiceData); - if(paymasterAndData === "0x" && (callGasLimit === undefined || verificationGasLimit === undefined || preVerificationGas === undefined)) { + if (paymasterAndData === "0x" && (callGasLimit === undefined || verificationGasLimit === undefined || preVerificationGas === undefined)) { throw new Error("Since you intend to use sponsorship paymaster, please check and make sure policies are set on the dashboard"); } finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; @@ -158,7 +158,11 @@ export abstract class SmartAccount implements ISmartAccount { const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas(userOp); // if neither user sent gas fee nor the bundler, estimate gas from provider - if (userOp.maxFeePerGas === undefined && userOp.maxPriorityFeePerGas === undefined && (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined)) { + if ( + userOp.maxFeePerGas === undefined && + userOp.maxPriorityFeePerGas === undefined && + (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) + ) { const feeData = await this.provider.getFeeData(); finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); From a1cf163c53173f180603ff2289b3763ec1c3db96 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 5 Dec 2023 17:33:27 +0200 Subject: [PATCH 0956/1247] Removed dotenv --- package.json | 1 - .../tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts | 6 ++---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4ad68a0d8..f825ee708 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,6 @@ ] }, "dependencies": { - "dotenv": "^16.3.1", "node-gyp": "^9.4.0", "typescript": "^5.2.2" }, diff --git a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts index 28001d14a..1da02d8a4 100644 --- a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts @@ -16,8 +16,6 @@ import { BaseValidationModule } from "@biconomy/modules"; import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; import { BiconomyPaymaster } from "@biconomy/paymaster"; -require('dotenv').config(); - const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); @@ -59,7 +57,7 @@ describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { chainId: ChainId.GANACHE, rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, - biconomyPaymasterApiKey: process.env.API_KEY, + biconomyPaymasterApiKey: "7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", factoryAddress: accountFactory.address, defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: module1, @@ -80,7 +78,7 @@ describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { it("Create a smart account with paymaster by creating instance", async () => { const paymaster = new BiconomyPaymaster({ - paymasterUrl: process.env.PAYMASTER_URL || "", + paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", }) account = await BiconomySmartAccountV2.create({ From 287734580126a52a8ff61d55d6b07822d848391e Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 5 Dec 2023 19:05:56 +0200 Subject: [PATCH 0957/1247] Added rpcUrl and module in test --- .../tests/SmartAccountV2-Module-Abstraction.local.spec.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts index e66e50a0f..bf584343c 100644 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts @@ -49,6 +49,7 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, signer, }); @@ -67,6 +68,7 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, signer, module: ValidationModule.ECDSA_OWNERSHIP, @@ -85,8 +87,10 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, signer, + module: ValidationModule.MULTICHAIN, }); const address = await account.getAccountAddress(); From 8d4e9197b56425a40febfa90e0b59d8dec172904 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Thu, 7 Dec 2023 19:00:22 +0200 Subject: [PATCH 0958/1247] [DRAFT] Added WalletClientSigner support --- packages/account/package.json | 4 +- packages/account/src/utils/Types.ts | 3 +- ...AccountV2-Module-Abstraction.local.spec.ts | 105 ------- .../tests/SmartAccountV2.local.spec.ts | 258 +++++++++++++++++- packages/modules/package.json | 1 + packages/modules/src/BaseValidationModule.ts | 29 +- .../src/ECDSAOwnershipValidationModule.ts | 28 +- .../modules/src/MultichainValidationModule.ts | 28 +- .../src/interfaces/IValidationModule.ts | 3 +- packages/modules/src/utils/Types.ts | 5 +- 10 files changed, 324 insertions(+), 140 deletions(-) delete mode 100644 packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts diff --git a/packages/account/package.json b/packages/account/package.json index 7002d2e3a..d27b91bac 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -39,6 +39,7 @@ "dependencies": { "@account-abstraction/contracts": "^0.6.0", "@account-abstraction/utils": "^0.4.0", + "@alchemy/aa-core": "^1.2.0", "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0", "@biconomy/bundler": "^3.1.1", "@biconomy/common": "^3.1.1", @@ -50,6 +51,7 @@ "@ethersproject/providers": "^5.7.2", "ethers": "^5.7.0", "loglevel": "^1.8.1", - "lru-cache": "^10.0.1" + "lru-cache": "^10.0.1", + "viem": "^1.19.11" } } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 527687c7d..3fb677b4d 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -6,6 +6,7 @@ import { BaseValidationModule, DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_MULTICHAI import { Provider } from "@ethersproject/providers"; import { GasOverheads } from "./Preverificaiton"; import { UserOperation, ChainId } from "@biconomy/core-types"; +import { WalletClientSigner } from "@alchemy/aa-core"; export type EntryPointAddresses = { [address: string]: string; @@ -83,7 +84,7 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { implementationAddress?: string; defaultFallbackHandler?: string; rpcUrl?: string; // as good as Provider - signer: Signer; + signer: Signer | WalletClientSigner; nodeClientUrl?: string; // very specific to Biconomy module?: ValidationModule; defaultValidationModule?: BaseValidationModule; diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts deleted file mode 100644 index bf584343c..000000000 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { Wallet, ethers } from "ethers"; -import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; - -import { - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - ECDSAOwnershipRegistryModule_v100__factory, -} from "@biconomy/common"; - -import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -import { ChainId } from "@biconomy/core-types"; -import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { ValidationModule } from "../src"; - -const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); -const signer = provider.getSigner(); - -describe("BiconomySmartAccountV2 Module Abstraction", () => { - let owner: Wallet; - let factoryOwner: Wallet; - let entryPoint: EntryPoint; - let beneficiary: string; - let recipient: SampleRecipient; - let accountFactory: SmartAccountFactory_v200; - let ecdsaModule: ECDSAOwnershipRegistryModule_v100; - - beforeAll(async () => { - owner = Wallet.createRandom(); - entryPoint = await new EntryPoint__factory(signer).deploy(); - console.log("ep address ", entryPoint.address); - beneficiary = await signer.getAddress(); - factoryOwner = Wallet.createRandom(); - - const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - - accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - - ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - - recipient = await new SampleRecipient__factory(signer).deploy(); - - await new Promise((resolve) => setTimeout(resolve, 10000)); - }, 30000); - - it("Create smart account with default module (ECDSA)", async () => { - - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - - }, 10000); - - it("Create smart account with ECDSA module", async () => { - - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - module: ValidationModule.ECDSA_OWNERSHIP, - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - }, 10000); - - it("Create smart account with multichain module", async () => { - - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - module: ValidationModule.MULTICHAIN, - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - - }, 10000); -}); diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 99d64bb42..f3d328a44 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -1,5 +1,5 @@ import { EntryPoint, EntryPoint__factory, UserOperationStruct, SimpleAccountFactory__factory } from "@account-abstraction/contracts"; -import { VoidSigner, Wallet, ethers } from "ethers"; +import { Signer, VoidSigner, Wallet, ethers } from "ethers"; import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; import { @@ -13,16 +13,25 @@ import { import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; import { ChainId, UserOperation } from "@biconomy/core-types"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; +import { DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_ENTRYPOINT_ADDRESS, ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { MultiChainValidationModule } from "@biconomy/modules"; import { BaseValidationModule } from "@biconomy/modules"; import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; import { MultiChainValidationModule_v100 } from "@biconomy/common"; +import { privateKeyToAccount } from "viem/accounts"; +import { createWalletClient, http } from "viem"; +import { localhost, polygonMumbai } from "viem/chains"; +import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; +import { Bundler, IBundler } from "@biconomy/bundler"; +import { ValidationModule } from "../src"; const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); const SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; +const MUMBAI = "https://rpc-mumbai.maticvigil.com"; +const testPrivKey = ""; + describe("BiconomySmartAccountV2 API Specs", () => { let owner: Wallet; let factoryOwner: Wallet; @@ -361,8 +370,245 @@ describe("BiconomySmartAccountV2 API Specs", () => { expect(address).toBe(accountAPI.accountAddress); }, 10000); - // TODO - // 1. sendSignedUserOp() - // 2. sendUserOp() - // 3. sending userOps using a paymaster + it("Create and setup ECDSA module with WalletClientSigner", async () => { + + const wallet = privateKeyToAccount(`0x${testPrivKey}`) + + const walletClient = createWalletClient({ + account: wallet, + chain: polygonMumbai, + transport: http(MUMBAI), + }); + + let owner = new WalletClientSigner( + walletClient, + "json-rpc" + ); + + let account = await BiconomySmartAccountV2.create({ + chainId: ChainId.POLYGON_MUMBAI, + entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + signer: owner, + }); + + const counterFactualAddress = await account.getAccountAddress(); + console.log("Counterfactual address ", counterFactualAddress); + + const module = await ECDSAOwnershipValidationModule.create({ + signer: owner, + moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE + }) + + account.setActiveValidationModule(module); + + }); + + it("Create and setup ECDSA module with ethersV5 Signer", async () => { + + const provider = new ethers.providers.JsonRpcProvider(MUMBAI); + const owner: Signer = new ethers.Wallet(testPrivKey, provider); + + const module = await ECDSAOwnershipValidationModule.create({ + signer: owner, + moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE + }) + + let account = await BiconomySmartAccountV2.create({ + chainId: ChainId.POLYGON_MUMBAI, + entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + signer: owner, + defaultValidationModule: module, + activeValidationModule: module + }); + + const counterFactualAddress = await account.getAccountAddress(); + console.log("Counterfactual address ", counterFactualAddress); + + expect(counterFactualAddress).toBeDefined(); + + expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); + + }); + + it("Send user op with ethersV5 signer", async () => { + + const provider = new ethers.providers.JsonRpcProvider(MUMBAI); + const owner: Signer = new ethers.Wallet(testPrivKey, provider); + + const bundler: IBundler = new Bundler({ + bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", + chainId: ChainId.POLYGON_MUMBAI, + entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + }) + + const module = await ECDSAOwnershipValidationModule.create({ + signer: owner, + moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE + }) + + const newAccount = await BiconomySmartAccountV2.create({ + chainId: ChainId.POLYGON_MUMBAI, + entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + signer: owner, + bundler, + defaultValidationModule: module, + activeValidationModule: module + }); + + const tx = { + to: await Wallet.createRandom().getAddress(), + data: "0x" + } + + const userOp = await newAccount.buildUserOp([tx]); + const res = await newAccount.sendUserOp(userOp); + const txhash = await res.waitForTxHash(); + + console.log("txhash ", txhash); + + expect(txhash).toBeDefined(); + + }); + + it("Send user op with WalletClientSigner signer", async () => { + + const wallet = privateKeyToAccount(`0x${testPrivKey}`) + + const walletClient = createWalletClient({ + account: wallet, + transport: http("https://rpc-mumbai.maticvigil.com"), + }); + + let owner = new WalletClientSigner( + walletClient, + "json-rpc" + ); + + const bundler: IBundler = new Bundler({ + bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", + chainId: ChainId.POLYGON_MUMBAI, + entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + }) + + const module = await ECDSAOwnershipValidationModule.create({ + signer: owner, + moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE + }) + + const newAccount = await BiconomySmartAccountV2.create({ + chainId: ChainId.POLYGON_MUMBAI, + entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + signer: owner, + bundler, + defaultValidationModule: module, + activeValidationModule: module + }); + + const tx = { + to: await Wallet.createRandom().getAddress(), + data: "0x" + } + + const userOp = await newAccount.buildUserOp([tx]); + const res = await newAccount.sendUserOp(userOp); + const txhash = await res.waitForTxHash(); + + console.log("txhash ", txhash); + + expect(txhash).toBeDefined(); + }); + + it("Create smart account with default module (ECDSA) without creating instance or providing module name", async () => { + + const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ + chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", + entryPointAddress: entryPoint.address, + signer, + }); + + const address = await account.getAccountAddress(); + console.log("Module Abstraction Test - Account address ", address); + + expect(address).toBe(account.accountAddress); + + const module = account.activeValidationModule; + console.log(`ACTIVE MODULE - ${module.getAddress()}`); + + expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); + + }, 10000); + + it("Create smart account with ECDSA module without creating instance", async () => { + + const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ + chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", + entryPointAddress: entryPoint.address, + signer, + module: ValidationModule.ECDSA_OWNERSHIP, + }); + + const address = await account.getAccountAddress(); + console.log("Module Abstraction Test - Account address ", address); + + expect(address).toBe(account.accountAddress); + + const module = account.activeValidationModule as ECDSAOwnershipValidationModule; + + console.log(`ACTIVE MODULE - ${module.getAddress()}`); + + expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); + }, 10000); + + it("Create smart account with multichain module without creating instance", async () => { + + const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ + chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", + entryPointAddress: entryPoint.address, + signer, + module: ValidationModule.MULTICHAIN, + }); + + const address = await account.getAccountAddress(); + console.log("Module Abstraction Test - Account address ", address); + + expect(address).toBe(account.accountAddress); + + const module = account.activeValidationModule; + console.log(`ACTIVE MODULE - ${module.getAddress()}`); + + }, 10000); + + it("Create smart account with default module using WalletClientSigner as signer", async () => { + + const walletClient = createWalletClient({ + chain: localhost, + transport: http("http://127.0.0.1:8545"), + }); + + const smartAccountSigner: SmartAccountSigner = new WalletClientSigner( + walletClient, + "json-rpc" + ); + + const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ + chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", + entryPointAddress: entryPoint.address, + signer: smartAccountSigner, + }); + + const address = await account.getAccountAddress(); + console.log("Module Abstraction Test - Account address ", address); + + expect(address).toBe(account.accountAddress); + + const module = account.activeValidationModule; + console.log(`ACTIVE MODULE - ${module.getAddress()}`); + + expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); + + }, 10000); }); diff --git a/packages/modules/package.json b/packages/modules/package.json index 47550c536..b5995e457 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -34,6 +34,7 @@ "access": "public" }, "dependencies": { + "@alchemy/aa-core": "^1.2.0", "@biconomy/common": "^3.1.1", "@biconomy/core-types": "^3.1.1", "@biconomy/node-client": "^3.1.1", diff --git a/packages/modules/src/BaseValidationModule.ts b/packages/modules/src/BaseValidationModule.ts index 1a1e8cbeb..1fc777e70 100644 --- a/packages/modules/src/BaseValidationModule.ts +++ b/packages/modules/src/BaseValidationModule.ts @@ -3,6 +3,7 @@ import { Bytes } from "ethers/lib/utils"; import { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types"; import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; import { IValidationModule } from "./interfaces/IValidationModule"; +import { WalletClientSigner } from "@alchemy/aa-core"; export abstract class BaseValidationModule implements IValidationModule { entryPointAddress: string; @@ -24,10 +25,34 @@ export abstract class BaseValidationModule implements IValidationModule { // Anything required to get dummy signature can be passed as params abstract getDummySignature(_params?: ModuleInfo): Promise; - abstract getSigner(): Promise; + abstract getSigner(): Promise; // Signer specific or any other additional information can be passed as params abstract signUserOpHash(_userOpHash: string, _params?: ModuleInfo): Promise; - abstract signMessage(_message: Bytes | string): Promise; + abstract signMessage(_message: Bytes | string | Uint8Array): Promise; + + async signMessageWalletClientSigner(message: string | Uint8Array, signer: WalletClientSigner): Promise { + let signature: `0x${string}` = await signer.signMessage(message); + + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = `0x${signature.slice(0, -2) + correctV.toString(16)}`; + } + + return signature; + } + + async signMessageSigner(message: Bytes | string, signer: Signer): Promise { + let signature = await signer.signMessage(message); + + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); + } + + return signature; + } } diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index 9f8d80339..613623560 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -4,10 +4,11 @@ import { Bytes, arrayify } from "ethers/lib/utils"; import { ECDSAOwnershipValidationModuleConfig, ModuleVersion } from "./utils/Types"; import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; import { BaseValidationModule } from "./BaseValidationModule"; +import { WalletClientSigner } from "@alchemy/aa-core"; // Could be renamed with suffix API export class ECDSAOwnershipValidationModule extends BaseValidationModule { - signer!: Signer; + signer!: Signer | WalletClientSigner; moduleAddress!: string; @@ -40,7 +41,7 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { return this.moduleAddress; } - async getSigner(): Promise { + async getSigner(): Promise { return Promise.resolve(this.signer); } @@ -67,15 +68,20 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { return sig; } - async signMessage(message: Bytes | string): Promise { - let signature = await this.signer.signMessage(message); - - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); + /** + * Signs a message using the appropriate method based on the type of signer. + * + * @param {Bytes | string | Uint8Array} message - The message to be signed. + * @returns {Promise} A promise resolving to the signature or error message. + * @throws {Error} If the signer type is invalid or unsupported. + */ + async signMessage(message: Bytes | string | Uint8Array): Promise { + if (this.signer instanceof WalletClientSigner) { + return super.signMessageWalletClientSigner(message as Uint8Array | string, this.signer as WalletClientSigner); + } else if (this.signer instanceof Signer) { + return super.signMessageSigner(message as Bytes | string, this.signer as Signer); + } else { + throw new Error("Invalid signer type"); } - - return signature; } } diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index 082b6185d..3398fdc1c 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -6,8 +6,9 @@ import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VE import { keccak256, arrayify, defaultAbiCoder, hexConcat, hexZeroPad, Bytes } from "ethers/lib/utils"; import { ModuleVersion, MultiChainUserOpDto, MultiChainValidationModuleConfig } from "./utils/Types"; import { BaseValidationModule } from "./BaseValidationModule"; +import { WalletClientSigner } from "@alchemy/aa-core"; export class MultiChainValidationModule extends BaseValidationModule { - signer!: Signer; + signer!: Signer | WalletClientSigner; moduleAddress!: string; @@ -40,7 +41,7 @@ export class MultiChainValidationModule extends BaseValidationModule { return this.moduleAddress; } - async getSigner(): Promise { + async getSigner(): Promise { return Promise.resolve(this.signer); } @@ -67,16 +68,21 @@ export class MultiChainValidationModule extends BaseValidationModule { return sig; } - async signMessage(message: Bytes | string): Promise { - let signature = await this.signer.signMessage(message); - - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); + /** + * Signs a message using the appropriate method based on the type of signer. + * + * @param {Bytes | string | Uint8Array} message - The message to be signed. + * @returns {Promise} A promise resolving to the signature or error message. + * @throws {Error} If the signer type is invalid or unsupported. + */ + async signMessage(message: Bytes | string | Uint8Array): Promise { + if (this.signer instanceof WalletClientSigner) { + return super.signMessageWalletClientSigner(message as Uint8Array | string, this.signer as WalletClientSigner); + } else if (this.signer instanceof Signer) { + return super.signMessageSigner(message as Bytes | string, this.signer as Signer); + } else { + throw new Error("Invalid signer type"); } - - return signature; } async signUserOps(multiChainUserOps: MultiChainUserOpDto[]): Promise { diff --git a/packages/modules/src/interfaces/IValidationModule.ts b/packages/modules/src/interfaces/IValidationModule.ts index 150b08cc7..4b8269674 100644 --- a/packages/modules/src/interfaces/IValidationModule.ts +++ b/packages/modules/src/interfaces/IValidationModule.ts @@ -1,10 +1,11 @@ +import { WalletClientSigner } from "@alchemy/aa-core"; import { Signer } from "ethers"; import { Bytes } from "ethers/lib/utils"; export interface IValidationModule { getAddress(): string; getInitData(): Promise; - getSigner(): Promise; + getSigner(): Promise; signUserOpHash(_userOpHash: string): Promise; signMessage(_message: Bytes | string): Promise; getDummySignature(): Promise; diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 71f45e8c9..267de2d3a 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -2,6 +2,7 @@ import { ChainId, UserOperation } from "@biconomy/core-types"; import { Signer } from "ethers"; import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; import { ISessionStorage } from "../interfaces/ISessionStorage"; +import { WalletClientSigner } from "@alchemy/aa-core"; export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' @@ -12,7 +13,7 @@ export interface BaseValidationModuleConfig { export interface ECDSAOwnershipValidationModuleConfig extends BaseValidationModuleConfig { moduleAddress?: string; version?: ModuleVersion; - signer: Signer; + signer: Signer | WalletClientSigner; } export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfig { @@ -84,7 +85,7 @@ export interface CreateSessionDataParams { export interface MultiChainValidationModuleConfig extends BaseValidationModuleConfig { moduleAddress?: string; version?: ModuleVersion; - signer: Signer; + signer: Signer | WalletClientSigner; } export type MultiChainUserOpDto = { From 9309e28381d6633a4abc32eb801a134289eff6e1 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 8 Dec 2023 00:25:43 +0400 Subject: [PATCH 0959/1247] add util method + respond to PR comments --- packages/account/src/BaseSmartAccount.ts | 12 ++++++------ packages/account/src/BiconomySmartAccount.ts | 5 +++-- packages/account/src/BiconomySmartAccountV2.ts | 5 +++-- packages/account/src/SmartAccount.ts | 10 +++++----- packages/common/src/Utils.ts | 6 ++++++ 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index c6cd23325..b292554e3 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -4,7 +4,7 @@ import { IBaseSmartAccount } from "./interfaces/IBaseSmartAccount"; import { defaultAbiCoder, keccak256 } from "ethers/lib/utils"; import { UserOperation, ChainId } from "@biconomy/core-types"; import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; -import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; +import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS, checkNullOrUndefined } from "@biconomy/common"; import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; import { SendUserOpParams } from "@biconomy/modules"; @@ -72,7 +72,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { - if (userOp[field] === null || userOp[field] === undefined) { + if (checkNullOrUndefined(userOp[field])) { throw new Error(`${String(field)} is missing in the UserOp`); } } @@ -254,7 +254,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { if (skipBundlerCall) { if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { - if (userOp.maxFeePerGas === undefined || userOp.maxPriorityFeePerGas === undefined) { + if (checkNullOrUndefined(userOp.maxFeePerGas) || checkNullOrUndefined(userOp.maxPriorityFeePerGas)) { throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); } if (paymasterServiceData?.mode === PaymasterMode.SPONSORED) { @@ -291,9 +291,9 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { await this.bundler.estimateUserOpGas(userOp); // if neither user sent gas fee nor the bundler, estimate gas from provider if ( - userOp.maxFeePerGas === undefined && - userOp.maxPriorityFeePerGas === undefined && - (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) + checkNullOrUndefined(userOp.maxFeePerGas) && + checkNullOrUndefined(userOp.maxPriorityFeePerGas) && + (checkNullOrUndefined(maxFeePerGas) || checkNullOrUndefined(maxPriorityFeePerGas)) ) { const feeData = await this.provider.getFeeData(); finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index d5ae26955..3e47c6ea0 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -10,6 +10,7 @@ import { getEntryPointContract, getSAFactoryContract, getSAProxyContract, + checkNullOrUndefined, } from "@biconomy/common"; import { BiconomySmartAccountConfig, Overrides, BiconomyTokenPaymasterRequest, InitilizationData } from "./utils/Types"; import { UserOperation, Transaction, SmartAccountType } from "@biconomy/core-types"; @@ -343,7 +344,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart } private validateUserOpAndRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { - if (userOp.callData === undefined) { + if (checkNullOrUndefined(userOp.callData)) { throw new Error("Userop callData cannot be undefined"); } @@ -398,7 +399,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart return userOp; } - if (userOp.callData === undefined) { + if (userOp.callData === undefined || userOp.callData === null) { throw new Error("Userop callData cannot be undefined"); } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 04ab99f5c..a62b962c9 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -11,6 +11,7 @@ import { SmartAccountFactory_v200__factory, AddressResolver, AddressResolver__factory, + checkNullOrUndefined, } from "@biconomy/common"; import { BiconomyTokenPaymasterRequest, @@ -480,7 +481,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } private validateUserOpAndPaymasterRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { - if (userOp.callData === undefined) { + if (checkNullOrUndefined(userOp.callData)) { throw new Error("UserOp callData cannot be undefined"); } @@ -535,7 +536,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return userOp; } - if (userOp.callData === undefined) { + if (userOp.callData === undefined || userOp.callData === null) { throw new Error("UserOp callData cannot be undefined"); } diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index f4e2597b9..18c1fc3fb 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -4,7 +4,7 @@ import { ISmartAccount } from "./interfaces/ISmartAccount"; import { defaultAbiCoder, keccak256, arrayify } from "ethers/lib/utils"; import { UserOperation, ChainId } from "@biconomy/core-types"; import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; -import { packUserOp } from "@biconomy/common"; +import { packUserOp, checkNullOrUndefined } from "@biconomy/common"; import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; @@ -49,7 +49,7 @@ export abstract class SmartAccount implements ISmartAccount { private validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { - if (userOp[field] === undefined || userOp[field] === null) { + if (checkNullOrUndefined(userOp[field])) { throw new Error(`${String(field)} is missing in the UserOp`); } } @@ -159,9 +159,9 @@ export abstract class SmartAccount implements ISmartAccount { await this.bundler.estimateUserOpGas(userOp); // if neither user sent gas fee nor the bundler, estimate gas from provider if ( - userOp.maxFeePerGas === undefined && - userOp.maxPriorityFeePerGas === undefined && - (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) + checkNullOrUndefined(userOp.maxFeePerGas) && + checkNullOrUndefined(userOp.maxPriorityFeePerGas) && + (checkNullOrUndefined(maxFeePerGas) || checkNullOrUndefined(maxPriorityFeePerGas)) ) { const feeData = await this.provider.getFeeData(); finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); diff --git a/packages/common/src/Utils.ts b/packages/common/src/Utils.ts index b6f5568d2..e5602a42e 100644 --- a/packages/common/src/Utils.ts +++ b/packages/common/src/Utils.ts @@ -1,3 +1,5 @@ +import { BigNumber, BigNumberish, Bytes } from "ethers"; + /** * @description this function will return current timestamp in seconds * @returns Number @@ -5,3 +7,7 @@ export const getTimestampInSeconds = (): number => { return Math.floor(Date.now() / 1000); }; + +export const checkNullOrUndefined = (value: string | number | bigint | BigNumber | Bytes | undefined): boolean => { + return value === null || value === undefined; +} From cda03378a3e59377653187bc886f0d2f5b766e4e Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 8 Dec 2023 16:02:58 +0400 Subject: [PATCH 0960/1247] respond to PR comments --- packages/account/src/BaseSmartAccount.ts | 12 ++++++------ packages/account/src/BiconomySmartAccount.ts | 8 ++++---- packages/account/src/BiconomySmartAccountV2.ts | 8 ++++---- packages/account/src/SmartAccount.ts | 12 ++++++------ packages/common/src/Utils.ts | 6 +++--- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index b292554e3..6090870ed 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -4,7 +4,7 @@ import { IBaseSmartAccount } from "./interfaces/IBaseSmartAccount"; import { defaultAbiCoder, keccak256 } from "ethers/lib/utils"; import { UserOperation, ChainId } from "@biconomy/core-types"; import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; -import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS, checkNullOrUndefined } from "@biconomy/common"; +import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS, isNullOrUndefined } from "@biconomy/common"; import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; import { SendUserOpParams } from "@biconomy/modules"; @@ -72,7 +72,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { - if (checkNullOrUndefined(userOp[field])) { + if (isNullOrUndefined(userOp[field])) { throw new Error(`${String(field)} is missing in the UserOp`); } } @@ -254,7 +254,7 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { if (skipBundlerCall) { if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { - if (checkNullOrUndefined(userOp.maxFeePerGas) || checkNullOrUndefined(userOp.maxPriorityFeePerGas)) { + if (isNullOrUndefined(userOp.maxFeePerGas) || isNullOrUndefined(userOp.maxPriorityFeePerGas)) { throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); } if (paymasterServiceData?.mode === PaymasterMode.SPONSORED) { @@ -291,9 +291,9 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { await this.bundler.estimateUserOpGas(userOp); // if neither user sent gas fee nor the bundler, estimate gas from provider if ( - checkNullOrUndefined(userOp.maxFeePerGas) && - checkNullOrUndefined(userOp.maxPriorityFeePerGas) && - (checkNullOrUndefined(maxFeePerGas) || checkNullOrUndefined(maxPriorityFeePerGas)) + isNullOrUndefined(userOp.maxFeePerGas) && + isNullOrUndefined(userOp.maxPriorityFeePerGas) && + (isNullOrUndefined(maxFeePerGas) || isNullOrUndefined(maxPriorityFeePerGas)) ) { const feeData = await this.provider.getFeeData(); finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts index 3e47c6ea0..3307856b7 100644 --- a/packages/account/src/BiconomySmartAccount.ts +++ b/packages/account/src/BiconomySmartAccount.ts @@ -10,7 +10,7 @@ import { getEntryPointContract, getSAFactoryContract, getSAProxyContract, - checkNullOrUndefined, + isNullOrUndefined, } from "@biconomy/common"; import { BiconomySmartAccountConfig, Overrides, BiconomyTokenPaymasterRequest, InitilizationData } from "./utils/Types"; import { UserOperation, Transaction, SmartAccountType } from "@biconomy/core-types"; @@ -344,7 +344,7 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart } private validateUserOpAndRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { - if (checkNullOrUndefined(userOp.callData)) { + if (isNullOrUndefined(userOp.callData)) { throw new Error("Userop callData cannot be undefined"); } @@ -399,12 +399,12 @@ export class BiconomySmartAccount extends SmartAccount implements IBiconomySmart return userOp; } - if (userOp.callData === undefined || userOp.callData === null) { + if (isNullOrUndefined(userOp.callData)) { throw new Error("Userop callData cannot be undefined"); } const decodedDataSmartWallet = this.proxy.interface.parseTransaction({ - data: userOp.callData.toString(), + data: userOp.callData!.toString(), }); if (!decodedDataSmartWallet) { throw new Error("Could not parse call data of smart wallet for userOp"); diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index a62b962c9..c0605c799 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -11,7 +11,7 @@ import { SmartAccountFactory_v200__factory, AddressResolver, AddressResolver__factory, - checkNullOrUndefined, + isNullOrUndefined, } from "@biconomy/common"; import { BiconomyTokenPaymasterRequest, @@ -481,7 +481,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } private validateUserOpAndPaymasterRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { - if (checkNullOrUndefined(userOp.callData)) { + if (isNullOrUndefined(userOp.callData)) { throw new Error("UserOp callData cannot be undefined"); } @@ -536,14 +536,14 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return userOp; } - if (userOp.callData === undefined || userOp.callData === null) { + if (isNullOrUndefined(userOp.callData)) { throw new Error("UserOp callData cannot be undefined"); } const account = await this._getAccountContract(); const decodedSmartAccountData = account.interface.parseTransaction({ - data: userOp.callData.toString(), + data: userOp.callData!.toString(), }); if (!decodedSmartAccountData) { throw new Error("Could not parse userOp call data for this smart account"); diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts index 18c1fc3fb..7ca709e97 100644 --- a/packages/account/src/SmartAccount.ts +++ b/packages/account/src/SmartAccount.ts @@ -4,7 +4,7 @@ import { ISmartAccount } from "./interfaces/ISmartAccount"; import { defaultAbiCoder, keccak256, arrayify } from "ethers/lib/utils"; import { UserOperation, ChainId } from "@biconomy/core-types"; import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; -import { packUserOp, checkNullOrUndefined } from "@biconomy/common"; +import { packUserOp, isNullOrUndefined } from "@biconomy/common"; import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; @@ -49,7 +49,7 @@ export abstract class SmartAccount implements ISmartAccount { private validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { - if (checkNullOrUndefined(userOp[field])) { + if (isNullOrUndefined(userOp[field])) { throw new Error(`${String(field)} is missing in the UserOp`); } } @@ -117,7 +117,7 @@ export abstract class SmartAccount implements ISmartAccount { if (skipBundlerCall) { if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { - if (userOp.maxFeePerGas === undefined || userOp.maxPriorityFeePerGas === undefined) { + if (isNullOrUndefined(userOp.maxFeePerGas) || isNullOrUndefined(userOp.maxPriorityFeePerGas)) { throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); } if (paymasterServiceData?.mode === PaymasterMode.SPONSORED) { @@ -159,9 +159,9 @@ export abstract class SmartAccount implements ISmartAccount { await this.bundler.estimateUserOpGas(userOp); // if neither user sent gas fee nor the bundler, estimate gas from provider if ( - checkNullOrUndefined(userOp.maxFeePerGas) && - checkNullOrUndefined(userOp.maxPriorityFeePerGas) && - (checkNullOrUndefined(maxFeePerGas) || checkNullOrUndefined(maxPriorityFeePerGas)) + isNullOrUndefined(userOp.maxFeePerGas) && + isNullOrUndefined(userOp.maxPriorityFeePerGas) && + (isNullOrUndefined(maxFeePerGas) || isNullOrUndefined(maxPriorityFeePerGas)) ) { const feeData = await this.provider.getFeeData(); finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); diff --git a/packages/common/src/Utils.ts b/packages/common/src/Utils.ts index e5602a42e..c97c7bc41 100644 --- a/packages/common/src/Utils.ts +++ b/packages/common/src/Utils.ts @@ -1,4 +1,4 @@ -import { BigNumber, BigNumberish, Bytes } from "ethers"; +import { BigNumber, Bytes } from "ethers"; /** * @description this function will return current timestamp in seconds @@ -8,6 +8,6 @@ export const getTimestampInSeconds = (): number => { return Math.floor(Date.now() / 1000); }; -export const checkNullOrUndefined = (value: string | number | bigint | BigNumber | Bytes | undefined): boolean => { +export const isNullOrUndefined = (value: string | number | bigint | BigNumber | Bytes | undefined): value is undefined => { return value === null || value === undefined; -} +}; From cf35c4a8266d27648035d8c9d63f1b9157553128 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 8 Dec 2023 14:48:08 +0200 Subject: [PATCH 0961/1247] Made entryPointAddress optional --- packages/account/src/utils/Types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index b3a2cf448..4ebd30953 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -40,7 +40,7 @@ export interface BaseSmartAccountConfig { // owner?: Signer // can be in child classes index?: number; provider?: Provider; - entryPointAddress: string; + entryPointAddress?: string; accountAddress?: string; overheads?: Partial; paymaster?: IPaymaster; // PaymasterAPI From 547724a15366ee1e63aee80fdee0edc128a84c41 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 8 Dec 2023 17:06:12 +0200 Subject: [PATCH 0962/1247] Added check for entryPointAddress field --- packages/bundler/src/Bundler.ts | 7 +++++++ packages/bundler/src/utils/Constants.ts | 2 ++ 2 files changed, 9 insertions(+) diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 3083b15ec..3e36b68ef 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -24,6 +24,7 @@ import { UserOpWaitForTxHashIntervals, UserOpWaitForTxHashMaxDurationIntervals, UserOpReceiptMaxDurationIntervals, + DEFAULT_ENTRYPOINT_ADDRESS, } from "./utils/Constants"; import { JsonRpcProvider } from "@ethersproject/providers"; @@ -62,6 +63,12 @@ export class Bundler implements IBundler { ...UserOpWaitForTxHashMaxDurationIntervals, ...bundlerConfig.userOpWaitForTxHashMaxDurationIntervals, }; + + if(!bundlerConfig.entryPointAddress) { + this.bundlerConfig.entryPointAddress = DEFAULT_ENTRYPOINT_ADDRESS; + } else { + this.bundlerConfig.entryPointAddress = bundlerConfig.entryPointAddress; + } } private getBundlerUrl(): string { diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index 9deecacad..be373789a 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -125,3 +125,5 @@ export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: numbe [ChainId.CHILIZ_MAINNET]: 20000, [ChainId.CHILIZ_TESTNET]: 20000, }; + +export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; From bfbd065fae5c427c34a06aa98853247a2afc7e42 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Mon, 11 Dec 2023 11:38:09 +0200 Subject: [PATCH 0963/1247] Added SESSION and BATCHED SESSION ROUTER support + refactor --- .../account/src/BiconomySmartAccountV2.ts | 55 ++++++++++++------- packages/account/src/utils/Types.ts | 10 +++- ...AccountV2-Module-Abstraction.local.spec.ts | 34 +++++++++++- 3 files changed, 74 insertions(+), 25 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index e7ed3afa3..50af4c31c 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1,5 +1,5 @@ import { JsonRpcProvider } from "@ethersproject/providers"; -import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; +import { ethers, BigNumberish, BytesLike, BigNumber, Signer } from "ethers"; import { BaseSmartAccount } from "./BaseSmartAccount"; import { Bytes, getCreate2Address, hexConcat, keccak256, solidityKeccak256 } from "ethers/lib/utils"; import { @@ -21,9 +21,9 @@ import { NonceOptions, SmartAccountInfo, QueryParamsForAddressResolver, - ValidationModule, + AuthorizationModuleType, } from "./utils/Types"; -import { BaseValidationModule, ECDSAOwnershipValidationModule, ModuleInfo, MultiChainValidationModule, SendUserOpParams } from "@biconomy/modules"; +import { BaseValidationModule, BatchedSessionRouterModule, ECDSAOwnershipValidationModule, ModuleInfo, MultiChainValidationModule, SendUserOpParams, SessionKeyManagerModule } from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; @@ -86,7 +86,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * * This method will create a BiconomySmartAccountV2 instance but will not deploy the Smart Account. * - * Deployment of the Smart Account will be done when you call the first sendUserOp method. + * Deployment of the Smart Account will be donewith the first user operation. * * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance. * @returns A promise that resolves to a new instance of BiconomySmartAccountV2. @@ -108,14 +108,14 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { instance.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0; + // Note: if no module is provided, we will use ECDSA_OWNERSHIP as default if (biconomySmartAccountConfig.defaultValidationModule) { instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - } else if (biconomySmartAccountConfig.module) { - instance.defaultValidationModule = await instance.checkAndCreateModule(biconomySmartAccountConfig); + } else if (biconomySmartAccountConfig.authorizationModuleType) { + instance.defaultValidationModule = await instance.checkAndCreateModule(biconomySmartAccountConfig.signer, biconomySmartAccountConfig.authorizationModuleType); } else { instance.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ signer: biconomySmartAccountConfig.signer, - moduleAddress: biconomySmartAccountConfig.module, }); } @@ -139,22 +139,39 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return instance; } - async checkAndCreateModule(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { - switch (biconomySmartAccountConfig.module) { - case ValidationModule.ECDSA_OWNERSHIP: + + /** + * Checks and creates an authorization module based on the provided authorization module type. + * + * @param {Signer} signer - The signer object used for module creation. + * @param {AuthorizationModuleType} authorizationModuleType - The type of authorization module to create. + * @returns {Promise} A promise that resolves to the created authorization module. + */ + async checkAndCreateModule(signer: Signer, authorizationModuleType: AuthorizationModuleType): Promise { + switch (authorizationModuleType) { + case AuthorizationModuleType.ECDSA_OWNERSHIP: return ECDSAOwnershipValidationModule.create({ - signer: biconomySmartAccountConfig.signer, - moduleAddress: biconomySmartAccountConfig.module, + signer, + moduleAddress: authorizationModuleType, }); - case ValidationModule.MULTICHAIN: + case AuthorizationModuleType.MULTICHAIN: return MultiChainValidationModule.create({ - signer: biconomySmartAccountConfig.signer, - moduleAddress: biconomySmartAccountConfig.module, + signer, }); - default: - return ECDSAOwnershipValidationModule.create({ - signer: biconomySmartAccountConfig.signer, - moduleAddress: biconomySmartAccountConfig.module, + case AuthorizationModuleType.SESSION: + this.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ + signer: signer, + }); + this.getEnableModuleData(AuthorizationModuleType.SESSION); + return SessionKeyManagerModule.create({ + smartAccountAddress: await this.getCounterFactualAddress() + }); + case AuthorizationModuleType.BATCHED_SESSION_ROUTER: + this.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ + signer: signer, + }); + return BatchedSessionRouterModule.create({ + smartAccountAddress: await this.getCounterFactualAddress() }); } } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 527687c7d..b9037eb1f 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -2,7 +2,7 @@ import { Signer } from "ethers"; import { BigNumberish, BigNumber } from "ethers"; import { IBundler } from "@biconomy/bundler"; import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { BaseValidationModule, DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_MULTICHAIN_MODULE, ModuleInfo } from "@biconomy/modules"; +import { BaseValidationModule, DEFAULT_BATCHED_SESSION_ROUTER_MODULE, DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_MULTICHAIN_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE, ModuleInfo } from "@biconomy/modules"; import { Provider } from "@ethersproject/providers"; import { GasOverheads } from "./Preverificaiton"; import { UserOperation, ChainId } from "@biconomy/core-types"; @@ -41,12 +41,16 @@ export type SmartAccountConfig = { * * - `ECDSA_OWNERSHIP`: Default module for ECDSA ownership validation. * - `MULTICHAIN`: Default module for multi-chain validation. + * - `SESSION`: Default module for session validation. + * - `BATCHED_SESSION_ROUTER`: Default module for batched session router validation. * - For SESSION MODULE or BATCHED SESSION please provide the module with "defaultValidationModule" in the config * - If you don't provide any module, ECDSA_OWNERSHIP will be used as default */ -export enum ValidationModule { +export enum AuthorizationModuleType { ECDSA_OWNERSHIP = DEFAULT_ECDSA_OWNERSHIP_MODULE, MULTICHAIN = DEFAULT_MULTICHAIN_MODULE, + SESSION = DEFAULT_SESSION_KEY_MANAGER_MODULE, + BATCHED_SESSION_ROUTER = DEFAULT_BATCHED_SESSION_ROUTER_MODULE } export interface BaseSmartAccountConfig { @@ -85,7 +89,7 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { rpcUrl?: string; // as good as Provider signer: Signer; nodeClientUrl?: string; // very specific to Biconomy - module?: ValidationModule; + authorizationModuleType?: AuthorizationModuleType; defaultValidationModule?: BaseValidationModule; activeValidationModule?: BaseValidationModule; scanForUpgradedAccountsFromV1?: boolean; diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts index bf584343c..0488136a1 100644 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts @@ -13,7 +13,7 @@ import { import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; import { ChainId } from "@biconomy/core-types"; import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { ValidationModule } from "../src"; +import { AuthorizationModuleType } from "../src"; const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); @@ -71,7 +71,7 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, signer, - module: ValidationModule.ECDSA_OWNERSHIP, + authorizationModuleType: AuthorizationModuleType.ECDSA_OWNERSHIP, }); const address = await account.getAccountAddress(); @@ -90,7 +90,7 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, signer, - module: ValidationModule.MULTICHAIN, + authorizationModuleType: AuthorizationModuleType.MULTICHAIN, }); const address = await account.getAccountAddress(); @@ -102,4 +102,32 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { console.log(`ACTIVE MODULE - ${module.getAddress()}`); }, 10000); + + it("Should fail to create SESSION due to no localStorage", async () => { + + const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ + chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", + entryPointAddress: entryPoint.address, + signer, + authorizationModuleType: AuthorizationModuleType.SESSION, + }); + + expect(account).rejects.toThrow("localStorage is not defined"); + + }, 10000); + + it("Should fail to create BATCHED_SESSION_ROUTER due to no localStorage", async () => { + + const account = BiconomySmartAccountV2.create({ + chainId: ChainId.GANACHE, + rpcUrl: "http://127.0.0.1:8545", + entryPointAddress: entryPoint.address, + signer, + authorizationModuleType: AuthorizationModuleType.BATCHED_SESSION_ROUTER, + }); + + expect(account).rejects.toThrow("localStorage is not defined"); + + }, 10000); }); From 4c264ff26e13dd83aff89f8420514d3dc6d6a0ea Mon Sep 17 00:00:00 2001 From: GabiDev Date: Mon, 11 Dec 2023 11:51:26 +0200 Subject: [PATCH 0964/1247] Fix lint and pass tests --- .../account/src/BiconomySmartAccountV2.ts | 22 ++++++++++++++----- packages/account/src/utils/Types.ts | 11 ++++++++-- ...AccountV2-Module-Abstraction.local.spec.ts | 2 +- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 50af4c31c..2898dafb7 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -23,7 +23,15 @@ import { QueryParamsForAddressResolver, AuthorizationModuleType, } from "./utils/Types"; -import { BaseValidationModule, BatchedSessionRouterModule, ECDSAOwnershipValidationModule, ModuleInfo, MultiChainValidationModule, SendUserOpParams, SessionKeyManagerModule } from "@biconomy/modules"; +import { + BaseValidationModule, + BatchedSessionRouterModule, + ECDSAOwnershipValidationModule, + ModuleInfo, + MultiChainValidationModule, + SendUserOpParams, + SessionKeyManagerModule, +} from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; @@ -112,7 +120,10 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { if (biconomySmartAccountConfig.defaultValidationModule) { instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; } else if (biconomySmartAccountConfig.authorizationModuleType) { - instance.defaultValidationModule = await instance.checkAndCreateModule(biconomySmartAccountConfig.signer, biconomySmartAccountConfig.authorizationModuleType); + instance.defaultValidationModule = await instance.checkAndCreateModule( + biconomySmartAccountConfig.signer, + biconomySmartAccountConfig.authorizationModuleType, + ); } else { instance.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ signer: biconomySmartAccountConfig.signer, @@ -139,14 +150,13 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return instance; } - /** * Checks and creates an authorization module based on the provided authorization module type. * * @param {Signer} signer - The signer object used for module creation. * @param {AuthorizationModuleType} authorizationModuleType - The type of authorization module to create. * @returns {Promise} A promise that resolves to the created authorization module. - */ + */ async checkAndCreateModule(signer: Signer, authorizationModuleType: AuthorizationModuleType): Promise { switch (authorizationModuleType) { case AuthorizationModuleType.ECDSA_OWNERSHIP: @@ -164,14 +174,14 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { }); this.getEnableModuleData(AuthorizationModuleType.SESSION); return SessionKeyManagerModule.create({ - smartAccountAddress: await this.getCounterFactualAddress() + smartAccountAddress: await this.getCounterFactualAddress(), }); case AuthorizationModuleType.BATCHED_SESSION_ROUTER: this.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ signer: signer, }); return BatchedSessionRouterModule.create({ - smartAccountAddress: await this.getCounterFactualAddress() + smartAccountAddress: await this.getCounterFactualAddress(), }); } } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index b9037eb1f..6e6cf0090 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -2,7 +2,14 @@ import { Signer } from "ethers"; import { BigNumberish, BigNumber } from "ethers"; import { IBundler } from "@biconomy/bundler"; import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { BaseValidationModule, DEFAULT_BATCHED_SESSION_ROUTER_MODULE, DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_MULTICHAIN_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE, ModuleInfo } from "@biconomy/modules"; +import { + BaseValidationModule, + DEFAULT_BATCHED_SESSION_ROUTER_MODULE, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + DEFAULT_MULTICHAIN_MODULE, + DEFAULT_SESSION_KEY_MANAGER_MODULE, + ModuleInfo, +} from "@biconomy/modules"; import { Provider } from "@ethersproject/providers"; import { GasOverheads } from "./Preverificaiton"; import { UserOperation, ChainId } from "@biconomy/core-types"; @@ -50,7 +57,7 @@ export enum AuthorizationModuleType { ECDSA_OWNERSHIP = DEFAULT_ECDSA_OWNERSHIP_MODULE, MULTICHAIN = DEFAULT_MULTICHAIN_MODULE, SESSION = DEFAULT_SESSION_KEY_MANAGER_MODULE, - BATCHED_SESSION_ROUTER = DEFAULT_BATCHED_SESSION_ROUTER_MODULE + BATCHED_SESSION_ROUTER = DEFAULT_BATCHED_SESSION_ROUTER_MODULE, } export interface BaseSmartAccountConfig { diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts index 0488136a1..80f41f7bf 100644 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts @@ -105,7 +105,7 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { it("Should fail to create SESSION due to no localStorage", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ + const account = BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, From 9e87dadaf520b10b03eee48efd2468bcb33cd66d Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:00:59 +0400 Subject: [PATCH 0965/1247] lint fixes --- packages/bundler/src/Bundler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 3e36b68ef..e8a7b8b9f 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -64,7 +64,7 @@ export class Bundler implements IBundler { ...bundlerConfig.userOpWaitForTxHashMaxDurationIntervals, }; - if(!bundlerConfig.entryPointAddress) { + if (!bundlerConfig.entryPointAddress) { this.bundlerConfig.entryPointAddress = DEFAULT_ENTRYPOINT_ADDRESS; } else { this.bundlerConfig.entryPointAddress = bundlerConfig.entryPointAddress; From 17dc1ec9d2191cf480dcd0aad5f7675b5b303791 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 12 Dec 2023 12:24:00 +0200 Subject: [PATCH 0966/1247] Refactor --- .../account/src/BiconomySmartAccountV2.ts | 46 +----------------- packages/account/src/utils/Types.ts | 7 ++- ...AccountV2-Module-Abstraction.local.spec.ts | 48 ------------------- .../tests/SmartAccountV2.local.spec.ts | 4 +- 4 files changed, 6 insertions(+), 99 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 2898dafb7..ac39d1cc2 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1,5 +1,5 @@ import { JsonRpcProvider } from "@ethersproject/providers"; -import { ethers, BigNumberish, BytesLike, BigNumber, Signer } from "ethers"; +import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; import { BaseSmartAccount } from "./BaseSmartAccount"; import { Bytes, getCreate2Address, hexConcat, keccak256, solidityKeccak256 } from "ethers/lib/utils"; import { @@ -25,12 +25,9 @@ import { } from "./utils/Types"; import { BaseValidationModule, - BatchedSessionRouterModule, ECDSAOwnershipValidationModule, ModuleInfo, - MultiChainValidationModule, SendUserOpParams, - SessionKeyManagerModule, } from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; import NodeClient from "@biconomy/node-client"; @@ -119,11 +116,6 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // Note: if no module is provided, we will use ECDSA_OWNERSHIP as default if (biconomySmartAccountConfig.defaultValidationModule) { instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - } else if (biconomySmartAccountConfig.authorizationModuleType) { - instance.defaultValidationModule = await instance.checkAndCreateModule( - biconomySmartAccountConfig.signer, - biconomySmartAccountConfig.authorizationModuleType, - ); } else { instance.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ signer: biconomySmartAccountConfig.signer, @@ -150,42 +142,6 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return instance; } - /** - * Checks and creates an authorization module based on the provided authorization module type. - * - * @param {Signer} signer - The signer object used for module creation. - * @param {AuthorizationModuleType} authorizationModuleType - The type of authorization module to create. - * @returns {Promise} A promise that resolves to the created authorization module. - */ - async checkAndCreateModule(signer: Signer, authorizationModuleType: AuthorizationModuleType): Promise { - switch (authorizationModuleType) { - case AuthorizationModuleType.ECDSA_OWNERSHIP: - return ECDSAOwnershipValidationModule.create({ - signer, - moduleAddress: authorizationModuleType, - }); - case AuthorizationModuleType.MULTICHAIN: - return MultiChainValidationModule.create({ - signer, - }); - case AuthorizationModuleType.SESSION: - this.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ - signer: signer, - }); - this.getEnableModuleData(AuthorizationModuleType.SESSION); - return SessionKeyManagerModule.create({ - smartAccountAddress: await this.getCounterFactualAddress(), - }); - case AuthorizationModuleType.BATCHED_SESSION_ROUTER: - this.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ - signer: signer, - }); - return BatchedSessionRouterModule.create({ - smartAccountAddress: await this.getCounterFactualAddress(), - }); - } - } - async _getAccountContract(): Promise { if (this.accountContract == null) { this.accountContract = SmartAccount_v200__factory.connect(await this.getAccountAddress(), this.provider); diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 6e6cf0090..cfc4c3f60 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -50,14 +50,13 @@ export type SmartAccountConfig = { * - `MULTICHAIN`: Default module for multi-chain validation. * - `SESSION`: Default module for session validation. * - `BATCHED_SESSION_ROUTER`: Default module for batched session router validation. - * - For SESSION MODULE or BATCHED SESSION please provide the module with "defaultValidationModule" in the config * - If you don't provide any module, ECDSA_OWNERSHIP will be used as default */ export enum AuthorizationModuleType { ECDSA_OWNERSHIP = DEFAULT_ECDSA_OWNERSHIP_MODULE, - MULTICHAIN = DEFAULT_MULTICHAIN_MODULE, - SESSION = DEFAULT_SESSION_KEY_MANAGER_MODULE, - BATCHED_SESSION_ROUTER = DEFAULT_BATCHED_SESSION_ROUTER_MODULE, + // MULTICHAIN = DEFAULT_MULTICHAIN_MODULE, + // SESSION = DEFAULT_SESSION_KEY_MANAGER_MODULE, + // BATCHED_SESSION_ROUTER = DEFAULT_BATCHED_SESSION_ROUTER_MODULE, } export interface BaseSmartAccountConfig { diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts index 80f41f7bf..f8a037c9d 100644 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts @@ -82,52 +82,4 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { const module = account.activeValidationModule; console.log(`ACTIVE MODULE - ${module.getAddress()}`); }, 10000); - - it("Create smart account with multichain module", async () => { - - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - authorizationModuleType: AuthorizationModuleType.MULTICHAIN, - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - - }, 10000); - - it("Should fail to create SESSION due to no localStorage", async () => { - - const account = BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - authorizationModuleType: AuthorizationModuleType.SESSION, - }); - - expect(account).rejects.toThrow("localStorage is not defined"); - - }, 10000); - - it("Should fail to create BATCHED_SESSION_ROUTER due to no localStorage", async () => { - - const account = BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - authorizationModuleType: AuthorizationModuleType.BATCHED_SESSION_ROUTER, - }); - - expect(account).rejects.toThrow("localStorage is not defined"); - - }, 10000); }); diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 99d64bb42..8a6883660 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -1,4 +1,4 @@ -import { EntryPoint, EntryPoint__factory, UserOperationStruct, SimpleAccountFactory__factory } from "@account-abstraction/contracts"; +import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { VoidSigner, Wallet, ethers } from "ethers"; import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; @@ -13,7 +13,7 @@ import { import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; import { ChainId, UserOperation } from "@biconomy/core-types"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; +import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { MultiChainValidationModule } from "@biconomy/modules"; import { BaseValidationModule } from "@biconomy/modules"; import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; From 76fa5af0d2ef03e6ba0027a8f5fac91fba2ddc24 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 12 Dec 2023 12:27:50 +0200 Subject: [PATCH 0967/1247] Fixed lint --- packages/account/src/BiconomySmartAccountV2.ts | 8 +------- packages/account/src/utils/Types.ts | 9 +-------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index ac39d1cc2..f93d67060 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -21,14 +21,8 @@ import { NonceOptions, SmartAccountInfo, QueryParamsForAddressResolver, - AuthorizationModuleType, } from "./utils/Types"; -import { - BaseValidationModule, - ECDSAOwnershipValidationModule, - ModuleInfo, - SendUserOpParams, -} from "@biconomy/modules"; +import { BaseValidationModule, ECDSAOwnershipValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; import { UserOperation, Transaction } from "@biconomy/core-types"; import NodeClient from "@biconomy/node-client"; import INodeClient from "@biconomy/node-client"; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index cfc4c3f60..d7f6c5d5f 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -2,14 +2,7 @@ import { Signer } from "ethers"; import { BigNumberish, BigNumber } from "ethers"; import { IBundler } from "@biconomy/bundler"; import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { - BaseValidationModule, - DEFAULT_BATCHED_SESSION_ROUTER_MODULE, - DEFAULT_ECDSA_OWNERSHIP_MODULE, - DEFAULT_MULTICHAIN_MODULE, - DEFAULT_SESSION_KEY_MANAGER_MODULE, - ModuleInfo, -} from "@biconomy/modules"; +import { BaseValidationModule, DEFAULT_ECDSA_OWNERSHIP_MODULE, ModuleInfo } from "@biconomy/modules"; import { Provider } from "@ethersproject/providers"; import { GasOverheads } from "./Preverificaiton"; import { UserOperation, ChainId } from "@biconomy/core-types"; From a06c12071f02cae8ceddffd8708646b4d49abd7e Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 14 Dec 2023 01:58:51 +0400 Subject: [PATCH 0968/1247] feat:conditional types instead of interface + refactor --- .../account/src/BiconomySmartAccountV2.ts | 2 +- packages/account/src/utils/Types.ts | 51 +++++++++++-------- ...AccountV2-Module-Abstraction.local.spec.ts | 10 ++-- 3 files changed, 35 insertions(+), 28 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index f93d67060..4917702f7 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -112,7 +112,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; } else { instance.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ - signer: biconomySmartAccountConfig.signer, + signer: biconomySmartAccountConfig.signer!, }); } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index d7f6c5d5f..49dd434cb 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -41,18 +41,14 @@ export type SmartAccountConfig = { * * - `ECDSA_OWNERSHIP`: Default module for ECDSA ownership validation. * - `MULTICHAIN`: Default module for multi-chain validation. - * - `SESSION`: Default module for session validation. - * - `BATCHED_SESSION_ROUTER`: Default module for batched session router validation. * - If you don't provide any module, ECDSA_OWNERSHIP will be used as default */ -export enum AuthorizationModuleType { +/*export enum AuthorizationModuleType { ECDSA_OWNERSHIP = DEFAULT_ECDSA_OWNERSHIP_MODULE, // MULTICHAIN = DEFAULT_MULTICHAIN_MODULE, - // SESSION = DEFAULT_SESSION_KEY_MANAGER_MODULE, - // BATCHED_SESSION_ROUTER = DEFAULT_BATCHED_SESSION_ROUTER_MODULE, -} +}*/ -export interface BaseSmartAccountConfig { +export type BaseSmartAccountConfig = { // owner?: Signer // can be in child classes index?: number; provider?: Provider; @@ -62,7 +58,7 @@ export interface BaseSmartAccountConfig { paymaster?: IPaymaster; // PaymasterAPI bundler?: IBundler; // like HttpRpcClient chainId: ChainId; -} +}; export type BiconomyTokenPaymasterRequest = { feeQuote: PaymasterFeeQuote; @@ -80,20 +76,31 @@ export type BiconomySmartAccountConfig = { nodeClientUrl?: string; }; -export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig { - factoryAddress?: string; - senderAddress?: string; - implementationAddress?: string; - defaultFallbackHandler?: string; - rpcUrl?: string; // as good as Provider - signer: Signer; - nodeClientUrl?: string; // very specific to Biconomy - authorizationModuleType?: AuthorizationModuleType; - defaultValidationModule?: BaseValidationModule; - activeValidationModule?: BaseValidationModule; - scanForUpgradedAccountsFromV1?: boolean; - maxIndexForScan?: number; -} +type RequireAtLeastOne = Pick> & + { + [K in Keys]-?: Required> & Partial>>; + }[Keys]; + +type ConditionalValidationProps = RequireAtLeastOne< + { + defaultValidationModule: BaseValidationModule; + signer: Signer; + }, + "defaultValidationModule" | "signer" +>; + +export type BiconomySmartAccountV2Config = BaseSmartAccountConfig & + ConditionalValidationProps & { + factoryAddress?: string; + senderAddress?: string; + implementationAddress?: string; + defaultFallbackHandler?: string; + rpcUrl?: string; + nodeClientUrl?: string; + activeValidationModule?: BaseValidationModule; + scanForUpgradedAccountsFromV1?: boolean; + maxIndexForScan?: number; + }; export type BuildUserOpOptions = { overrides?: Overrides; diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts index f8a037c9d..2121c681b 100644 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts @@ -13,7 +13,7 @@ import { import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; import { ChainId } from "@biconomy/core-types"; import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { AuthorizationModuleType } from "../src"; +import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); @@ -46,12 +46,15 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { }, 30000); it("Create smart account with default module (ECDSA)", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, signer, + /*defaultValidationModule: await ECDSAOwnershipValidationModule.create({ + signer: signer, + moduleAddress: ecdsaModule.address, + }),*/ }); const address = await account.getAccountAddress(); @@ -61,17 +64,14 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { const module = account.activeValidationModule; console.log(`ACTIVE MODULE - ${module.getAddress()}`); - }, 10000); it("Create smart account with ECDSA module", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, signer, - authorizationModuleType: AuthorizationModuleType.ECDSA_OWNERSHIP, }); const address = await account.getAccountAddress(); From feaf330cc0f659d77bad98e4d338fc14ccb56118 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 14 Dec 2023 01:59:28 +0400 Subject: [PATCH 0969/1247] lint fixes --- packages/account/src/utils/Types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 49dd434cb..81974620d 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -2,7 +2,7 @@ import { Signer } from "ethers"; import { BigNumberish, BigNumber } from "ethers"; import { IBundler } from "@biconomy/bundler"; import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { BaseValidationModule, DEFAULT_ECDSA_OWNERSHIP_MODULE, ModuleInfo } from "@biconomy/modules"; +import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Provider } from "@ethersproject/providers"; import { GasOverheads } from "./Preverificaiton"; import { UserOperation, ChainId } from "@biconomy/core-types"; From 316f675ea2875234298164a703c181fca080fb08 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 15 Dec 2023 12:34:26 +0200 Subject: [PATCH 0970/1247] Updated Alchemy Core package and commented testnet dependent tests --- packages/account/package.json | 2 +- .../tests/SmartAccountV2.local.spec.ts | 249 ++++++++++-------- packages/modules/package.json | 2 +- 3 files changed, 136 insertions(+), 117 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index d27b91bac..96a22ea93 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -39,7 +39,7 @@ "dependencies": { "@account-abstraction/contracts": "^0.6.0", "@account-abstraction/utils": "^0.4.0", - "@alchemy/aa-core": "^1.2.0", + "@alchemy/aa-core": "^1.2.2", "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0", "@biconomy/bundler": "^3.1.1", "@biconomy/common": "^3.1.1", diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index f3d328a44..74cdbbf00 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -370,153 +370,172 @@ describe("BiconomySmartAccountV2 API Specs", () => { expect(address).toBe(accountAPI.accountAddress); }, 10000); - it("Create and setup ECDSA module with WalletClientSigner", async () => { + // it("Create and setup ECDSA module with WalletClientSigner", async () => { - const wallet = privateKeyToAccount(`0x${testPrivKey}`) + // const wallet = privateKeyToAccount(`0x${testPrivKey}`) - const walletClient = createWalletClient({ - account: wallet, - chain: polygonMumbai, - transport: http(MUMBAI), - }); + // const walletClient = createWalletClient({ + // account: wallet, + // chain: polygonMumbai, + // transport: http(MUMBAI), + // }); - let owner = new WalletClientSigner( - walletClient, - "json-rpc" - ); - - let account = await BiconomySmartAccountV2.create({ - chainId: ChainId.POLYGON_MUMBAI, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - signer: owner, - }); - - const counterFactualAddress = await account.getAccountAddress(); - console.log("Counterfactual address ", counterFactualAddress); + // let owner = new WalletClientSigner( + // walletClient, + // "json-rpc" + // ); + + // let account = await BiconomySmartAccountV2.create({ + // chainId: ChainId.POLYGON_MUMBAI, + // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + // signer: owner, + // }); + + // const counterFactualAddress = await account.getAccountAddress(); + // console.log("Counterfactual address ", counterFactualAddress); - const module = await ECDSAOwnershipValidationModule.create({ - signer: owner, - moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - }) + // const module = await ECDSAOwnershipValidationModule.create({ + // signer: owner, + // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE + // }) - account.setActiveValidationModule(module); + // account.setActiveValidationModule(module); - }); + // }); - it("Create and setup ECDSA module with ethersV5 Signer", async () => { + // it("Create and setup ECDSA module with ethersV5 Signer", async () => { - const provider = new ethers.providers.JsonRpcProvider(MUMBAI); - const owner: Signer = new ethers.Wallet(testPrivKey, provider); + // const provider = new ethers.providers.JsonRpcProvider(MUMBAI); + // const owner: Signer = new ethers.Wallet(testPrivKey, provider); - const module = await ECDSAOwnershipValidationModule.create({ - signer: owner, - moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - }) - - let account = await BiconomySmartAccountV2.create({ - chainId: ChainId.POLYGON_MUMBAI, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - signer: owner, - defaultValidationModule: module, - activeValidationModule: module - }); + // const module = await ECDSAOwnershipValidationModule.create({ + // signer: owner, + // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE + // }) - const counterFactualAddress = await account.getAccountAddress(); - console.log("Counterfactual address ", counterFactualAddress); + // let account = await BiconomySmartAccountV2.create({ + // chainId: ChainId.POLYGON_MUMBAI, + // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + // signer: owner, + // defaultValidationModule: module, + // activeValidationModule: module + // }); - expect(counterFactualAddress).toBeDefined(); + // const counterFactualAddress = await account.getAccountAddress(); + // console.log("Counterfactual address ", counterFactualAddress); - expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); + // expect(counterFactualAddress).toBeDefined(); - }); + // expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - it("Send user op with ethersV5 signer", async () => { + // }); - const provider = new ethers.providers.JsonRpcProvider(MUMBAI); - const owner: Signer = new ethers.Wallet(testPrivKey, provider); + // it("Send user op with ethersV5 signer", async () => { - const bundler: IBundler = new Bundler({ - bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", - chainId: ChainId.POLYGON_MUMBAI, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - }) + // const provider = new ethers.providers.JsonRpcProvider(MUMBAI); + // const owner: Signer = new ethers.Wallet(testPrivKey, provider); - const module = await ECDSAOwnershipValidationModule.create({ - signer: owner, - moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - }) + // const bundler: IBundler = new Bundler({ + // bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", + // chainId: ChainId.POLYGON_MUMBAI, + // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + // }) - const newAccount = await BiconomySmartAccountV2.create({ - chainId: ChainId.POLYGON_MUMBAI, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - signer: owner, - bundler, - defaultValidationModule: module, - activeValidationModule: module - }); + // const module = await ECDSAOwnershipValidationModule.create({ + // signer: owner, + // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE + // }) - const tx = { - to: await Wallet.createRandom().getAddress(), - data: "0x" - } + // const newAccount = await BiconomySmartAccountV2.create({ + // chainId: ChainId.POLYGON_MUMBAI, + // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + // signer: owner, + // bundler, + // defaultValidationModule: module, + // activeValidationModule: module + // }); - const userOp = await newAccount.buildUserOp([tx]); - const res = await newAccount.sendUserOp(userOp); - const txhash = await res.waitForTxHash(); + // const accountAddress = await newAccount.getAccountAddress(); - console.log("txhash ", txhash); + // const prefund = { + // to: accountAddress, + // value: ethers.utils.parseEther("0.1"), + // } - expect(txhash).toBeDefined(); + // const prefundResp = await owner.sendTransaction(prefund); + // prefundResp.wait(); - }); + // const tx = { + // to: await Wallet.createRandom().getAddress(), + // data: "0x" + // } - it("Send user op with WalletClientSigner signer", async () => { + // const userOp = await newAccount.buildUserOp([tx]); + // const res = await newAccount.sendUserOp(userOp); + // const txhash = await res.waitForTxHash(); - const wallet = privateKeyToAccount(`0x${testPrivKey}`) + // console.log("txhash ", txhash); - const walletClient = createWalletClient({ - account: wallet, - transport: http("https://rpc-mumbai.maticvigil.com"), - }); - - let owner = new WalletClientSigner( - walletClient, - "json-rpc" - ); + // expect(txhash).toBeDefined(); - const bundler: IBundler = new Bundler({ - bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", - chainId: ChainId.POLYGON_MUMBAI, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - }) + // }); - const module = await ECDSAOwnershipValidationModule.create({ - signer: owner, - moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - }) - - const newAccount = await BiconomySmartAccountV2.create({ - chainId: ChainId.POLYGON_MUMBAI, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - signer: owner, - bundler, - defaultValidationModule: module, - activeValidationModule: module - }); + // it("Send user op with WalletClientSigner signer", async () => { + + // const wallet = privateKeyToAccount(`0x${testPrivKey}`) + + // const walletClient = createWalletClient({ + // account: wallet, + // transport: http("https://rpc-mumbai.maticvigil.com"), + // }); + + // let owner = new WalletClientSigner( + // walletClient, + // "json-rpc" + // ); + + // const bundler: IBundler = new Bundler({ + // bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", + // chainId: ChainId.POLYGON_MUMBAI, + // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + // }) + + // const module = await ECDSAOwnershipValidationModule.create({ + // signer: owner, + // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE + // }) + + // const newAccount = await BiconomySmartAccountV2.create({ + // chainId: ChainId.POLYGON_MUMBAI, + // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + // signer: owner, + // bundler, + // defaultValidationModule: module, + // activeValidationModule: module + // }); + + // const accountAddress: `0x${string}` = await newAccount.getAccountAddress() as `0x${string}`; + + // const prefundResp = await walletClient.sendTransaction({ + // account: wallet, + // to: accountAddress, + // value: 100000000000000000n, + // chain: polygonMumbai + // }); - const tx = { - to: await Wallet.createRandom().getAddress(), - data: "0x" - } + // const tx = { + // to: await Wallet.createRandom().getAddress(), + // data: "0x" + // } - const userOp = await newAccount.buildUserOp([tx]); - const res = await newAccount.sendUserOp(userOp); - const txhash = await res.waitForTxHash(); + // const userOp = await newAccount.buildUserOp([tx]); + // const res = await newAccount.sendUserOp(userOp); + // const txhash = await res.waitForTxHash(); - console.log("txhash ", txhash); + // console.log("txhash ", txhash); - expect(txhash).toBeDefined(); - }); + // expect(txhash).toBeDefined(); + // }); it("Create smart account with default module (ECDSA) without creating instance or providing module name", async () => { diff --git a/packages/modules/package.json b/packages/modules/package.json index b5995e457..4f31a07cc 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -34,7 +34,7 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "^1.2.0", + "@alchemy/aa-core": "^1.2.2", "@biconomy/common": "^3.1.1", "@biconomy/core-types": "^3.1.1", "@biconomy/node-client": "^3.1.1", From 252eaaa0df67a9ed419dd5e4f647d338b86f4581 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 15 Dec 2023 13:15:07 +0200 Subject: [PATCH 0971/1247] Fixed conflicts --- packages/account/src/utils/Types.ts | 2 +- packages/account/tests/SmartAccountV2.local.spec.ts | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index d575f6ee5..cf04df762 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -85,7 +85,7 @@ type RequireAtLeastOne = Pick; diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 5e5a677c5..e3896efaf 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -13,15 +13,14 @@ import { import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; import { ChainId, UserOperation } from "@biconomy/core-types"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE ECDSAOwnershipValidationModule } from "@biconomy/modules"; +import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { MultiChainValidationModule } from "@biconomy/modules"; import { BaseValidationModule } from "@biconomy/modules"; import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; import { MultiChainValidationModule_v100 } from "@biconomy/common"; import { createWalletClient, http } from "viem"; -import { localhost, polygonMumbai } from "viem/chains"; +import { localhost } from "viem/chains"; import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; -import { ValidationModule } from "../src"; const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); From 7816c6b559b073d1bfe35d0912bd0f35127c7257 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 18 Dec 2023 00:39:31 +0530 Subject: [PATCH 0972/1247] code refactor with latest releases --- packages/account/package.json | 4 +- .../account/src/BiconomySmartAccountV2.ts | 141 +++++++----------- packages/account/src/index.ts | 5 +- .../src/interfaces/IBaseSmartAccount.ts | 22 --- .../src/interfaces/IBiconomySmartAccount.ts | 29 ---- .../account/src/interfaces/ISmartAccount.ts | 8 - packages/account/src/provider.ts | 49 ++++-- packages/account/src/utils/Constants.ts | 3 +- packages/account/src/utils/Preverificaiton.ts | 118 --------------- packages/account/src/utils/Types.ts | 17 ++- packages/account/src/utils/Utils.ts | 41 +++++ packages/account/src/utils/VoidSigner.ts | 57 ------- packages/bundler/package.json | 2 +- packages/bundler/src/Bundler.ts | 8 +- packages/bundler/src/interfaces/IBundler.ts | 6 +- packages/bundler/src/utils/HelperFunction.ts | 6 +- packages/paymaster/package.json | 1 + packages/paymaster/src/BiconomyPaymaster.ts | 20 +-- .../src/interfaces/IHybridPaymaster.ts | 17 ++- .../paymaster/src/interfaces/IPaymaster.ts | 6 +- packages/paymaster/src/utils/Types.ts | 8 +- 21 files changed, 189 insertions(+), 379 deletions(-) delete mode 100644 packages/account/src/interfaces/IBaseSmartAccount.ts delete mode 100644 packages/account/src/interfaces/IBiconomySmartAccount.ts delete mode 100644 packages/account/src/interfaces/ISmartAccount.ts delete mode 100644 packages/account/src/utils/Preverificaiton.ts create mode 100644 packages/account/src/utils/Utils.ts delete mode 100644 packages/account/src/utils/VoidSigner.ts diff --git a/packages/account/package.json b/packages/account/package.json index b581b9d76..ca26aede5 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -39,7 +39,7 @@ "dependencies": { "@account-abstraction/contracts": "^0.6.0", "@account-abstraction/utils": "^0.4.0", - "@alchemy/aa-core": "^0.1.0", + "@alchemy/aa-core": "^1.2.2", "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0", "@biconomy/bundler": "^3.1.0", "@biconomy/common": "^3.1.0", @@ -52,6 +52,6 @@ "ethers": "^5.7.0", "loglevel": "^1.8.1", "lru-cache": "^10.0.1", - "viem": "^1.16.3" + "viem": "^1.2.0" } } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index f8c7b06e6..2ea8857cb 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -19,11 +19,11 @@ import { getContract, decodeFunctionData, } from "viem"; -import { BaseSmartContractAccount, getChain, type BigNumberish } from "@alchemy/aa-core"; -import { Logger, RPC_PROVIDER_URLS, packUserOp } from "@biconomy/common"; +import { BaseSmartContractAccount, getChain, type BigNumberish, type UserOperationStruct } from "@alchemy/aa-core"; +import { packUserOp } from "./utils/Utils"; +import { Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; import { BaseValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; -import { UserOperation, Transaction } from "@biconomy/core-types"; -import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, SponsorUserOperationDto, PaymasterMode } from "@biconomy/paymaster"; +import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; import { IBundler, UserOpResponse } from "@biconomy/bundler"; import { BiconomyTokenPaymasterRequest, @@ -32,6 +32,7 @@ import { BuildUserOpOptions, Overrides, NonceOptions, + Transaction, } from "./utils/Types"; import { BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, @@ -43,7 +44,7 @@ import { import { BiconomyFactoryAbi } from "./abi/Factory"; import { BiconomyAccountAbi } from "./abi/SmartAccount"; -type UserOperationKey = keyof UserOperation; +type UserOperationKey = keyof UserOperationStruct; export class BiconomySmartAccountV2 extends BaseSmartContractAccount { private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; @@ -255,7 +256,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return "0x"; } - validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { + validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { if (!userOp[field]) { throw new Error(`${String(field)} is missing in the UserOp`); @@ -264,7 +265,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return true; } - async signUserOp(userOp: Partial, params?: SendUserOpParams): Promise { + async signUserOp(userOp: Partial, params?: SendUserOpParams): Promise { this.isActiveValidationModuleDefined(); const requiredFields: UserOperationKey[] = [ "sender", @@ -286,7 +287,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const signatureWithModuleAddress = this.getSignatureWithModuleAddress(moduleSig, this.activeValidationModule.getAddress() as Hex); userOp.signature = signatureWithModuleAddress; - return userOp as UserOperation; + return userOp as UserOperationStruct; } getSignatureWithModuleAddress(moduleSignature: Hex, moduleAddress?: Hex): Hex { @@ -301,7 +302,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. * @returns Promise */ - async sendUserOp(userOp: Partial, params?: ModuleInfo): Promise { + async sendUserOp(userOp: Partial, params?: ModuleInfo): Promise { Logger.log("userOp received in base account ", userOp); delete userOp.signature; const userOperation = await this.signUserOp(userOp, params); @@ -315,7 +316,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @description This function call will take 'signedUserOp' as input and send it to the bundler * @returns */ - async sendSignedUserOp(userOp: UserOperation): Promise { + async sendSignedUserOp(userOp: UserOperationStruct): Promise { const requiredFields: UserOperationKey[] = [ "sender", "nonce", @@ -337,86 +338,49 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return bundlerResponse; } - async getUserOpHash(userOp: Partial): Promise { + async getUserOpHash(userOp: Partial): Promise { const userOpHash = keccak256(packUserOp(userOp, true) as Hex); const enc = encodeAbiParameters(parseAbiParameters("bytes32, address, uint256"), [userOpHash, this.entryPoint.address, BigInt(this.chainId)]); return keccak256(enc); } - // TODO // Should make this a Dto - async estimateUserOpGas( - userOp: Partial, - overrides?: Overrides, - skipBundlerGasEstimation?: boolean, - paymasterServiceData?: SponsorUserOperationDto, - ): Promise> { + async estimateUserOpGas(userOp: Partial): Promise> { + if (!this.bundler) throw new Error("Bundler is not provided"); const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; this.validateUserOp(userOp, requiredFields); const finalUserOp = userOp; - const skipBundlerCall = skipBundlerGasEstimation ?? true; - // Override gas values in userOp if provided in overrides params - if (overrides) { - userOp = { ...userOp, ...overrides }; - } - - Logger.log("userOp in estimation", userOp); - if (skipBundlerCall) { - // Review: instead of checking mode it could be assumed or just pass gasless flag and use it - // make pmService data locally and pass the object with default values - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster && paymasterServiceData?.mode === PaymasterMode.SPONSORED) { - if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { - throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); - } - // Making call to paymaster to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( - this.paymaster as IHybridPaymaster - ).getPaymasterAndData(userOp, paymasterServiceData); - finalUserOp.verificationGasLimit = toHex(Number(verificationGasLimit)) ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = toHex(Number(callGasLimit)) ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = toHex(Number(preVerificationGas)) ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = (paymasterAndData as Hex) ?? userOp.paymasterAndData; + // Making call to bundler to get gas estimations for userOp + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = + await this.bundler.estimateUserOpGas(userOp); + // if neither user sent gas fee nor the bundler, estimate gas from provider + if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { + const feeData = await this.provider.estimateFeesPerGas(); + if (feeData.maxFeePerGas?.toString()) { + finalUserOp.maxFeePerGas = ("0x" + feeData.maxFeePerGas.toString(16)) as Hex; + } else if (feeData.gasPrice?.toString()) { + finalUserOp.maxFeePerGas = ("0x" + feeData.gasPrice.toString(16)) as Hex; } else { - Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); - // finalUserOp = await this.calculateUserOpGasValues(userOp); - finalUserOp.paymasterAndData = "0x"; + finalUserOp.maxFeePerGas = ("0x" + (await this.provider.getGasPrice()).toString(16)) as Hex; } - } else { - if (!this.bundler) throw new Error("Bundler is not provided"); - // TODO: is this still needed to delete? - delete userOp.maxFeePerGas; - delete userOp.maxPriorityFeePerGas; - // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = - await this.bundler.estimateUserOpGas(userOp); - // if neither user sent gas fee nor the bundler, estimate gas from provider - if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { - const feeData = await this.provider.estimateFeesPerGas(); - if (feeData.maxFeePerGas?.toString()) { - finalUserOp.maxFeePerGas = ("0x" + feeData.maxFeePerGas.toString(16)) as Hex; - } else if (feeData.gasPrice?.toString()) { - finalUserOp.maxFeePerGas = ("0x" + feeData.gasPrice.toString(16)) as Hex; - } else { - finalUserOp.maxFeePerGas = ("0x" + (await this.provider.getGasPrice()).toString(16)) as Hex; - } - if (feeData.maxPriorityFeePerGas?.toString()) { - finalUserOp.maxPriorityFeePerGas = ("0x" + feeData.maxPriorityFeePerGas?.toString()) as Hex; - } else if (feeData.gasPrice?.toString()) { - finalUserOp.maxPriorityFeePerGas = toHex(Number(feeData.gasPrice?.toString())); - } else { - finalUserOp.maxPriorityFeePerGas = ("0x" + (await this.provider.getGasPrice()).toString(16)) as Hex; - } + if (feeData.maxPriorityFeePerGas?.toString()) { + finalUserOp.maxPriorityFeePerGas = ("0x" + feeData.maxPriorityFeePerGas?.toString()) as Hex; + } else if (feeData.gasPrice?.toString()) { + finalUserOp.maxPriorityFeePerGas = toHex(Number(feeData.gasPrice?.toString())); } else { - finalUserOp.maxFeePerGas = toHex(Number(maxFeePerGas)) ?? userOp.maxFeePerGas; - finalUserOp.maxPriorityFeePerGas = toHex(Number(maxPriorityFeePerGas)) ?? userOp.maxPriorityFeePerGas; + finalUserOp.maxPriorityFeePerGas = ("0x" + (await this.provider.getGasPrice()).toString(16)) as Hex; } - finalUserOp.verificationGasLimit = toHex(Number(verificationGasLimit)) ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = toHex(Number(callGasLimit)) ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = toHex(Number(preVerificationGas)) ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = "0x"; + } else { + finalUserOp.maxFeePerGas = toHex(Number(maxFeePerGas)) ?? userOp.maxFeePerGas; + finalUserOp.maxPriorityFeePerGas = toHex(Number(maxPriorityFeePerGas)) ?? userOp.maxPriorityFeePerGas; } + finalUserOp.verificationGasLimit = toHex(Number(verificationGasLimit)) ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = toHex(Number(callGasLimit)) ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = toHex(Number(preVerificationGas)) ?? userOp.preVerificationGas; + finalUserOp.paymasterAndData = "0x"; + return finalUserOp; } @@ -469,7 +433,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } } - async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { + async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { const to = transactions.map((element: Transaction) => element.to as Hex); const data = transactions.map((element: Transaction) => (element.data as Hex) ?? "0x"); const value = transactions.map((element: Transaction) => (element.value as bigint) ?? BigInt(0)); @@ -495,7 +459,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { callData = await this.encodeExecute(to[0], value[0], data[0]); } - let userOp: Partial = { + let userOp: Partial = { sender: (await this.getAccountAddress()) as Hex, nonce: toHex(nonceFromFetch), initCode, @@ -513,18 +477,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { userOp.signature = signature; // Note: Can change the default behaviour of calling estimations using bundler/local - userOp = await this.estimateUserOpGas( - userOp, - buildUseropDto?.overrides, - buildUseropDto?.skipBundlerGasEstimation, - buildUseropDto?.paymasterServiceData, - ); + userOp = await this.estimateUserOpGas(userOp); Logger.log("UserOp after estimation ", userOp); return userOp; } - private validateUserOpAndPaymasterRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { + private validateUserOpAndPaymasterRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { if (!userOp.callData) { throw new Error("UserOp callData cannot be undefined"); } @@ -554,9 +513,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @returns updated userOp with new callData, callGasLimit */ async buildTokenPaymasterUserOp( - userOp: Partial, + userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest, - ): Promise> { + ): Promise> { this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest); try { let batchTo: Array = []; @@ -585,7 +544,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const decodedSmartAccountData = decodeFunctionData({ abi: BiconomyAccountAbi, - data: userOp.callData, + data: userOp.callData as Hex, }); if (!decodedSmartAccountData) { @@ -618,7 +577,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData); } - let finalUserOp: Partial = { + let finalUserOp: Partial = { ...userOp, callData: newCallData, }; @@ -627,7 +586,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { try { finalUserOp = await this.estimateUserOpGas(finalUserOp); const callGasLimit = finalUserOp.callGasLimit; - if (callGasLimit && hexToNumber(callGasLimit) < 21000) { + if (callGasLimit && hexToNumber(callGasLimit as Hex) < 21000) { return { ...userOp, callData: newCallData, @@ -687,7 +646,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { }); const tx: Transaction = { to: await this.getAddress(), - value: "0", + value: "0x00", data: callData, }; return tx; @@ -701,7 +660,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { }); const tx: Transaction = { to: await this.getAddress(), - value: "0", + value: "0x00", data: callData, }; return tx; @@ -721,7 +680,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { }); const tx: Transaction = { to: await this.getAddress(), - value: "0", + value: "0x00", data: callData, }; return tx; diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index cc9bbb7f1..242cd2529 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -1,7 +1,4 @@ -export * from "./interfaces/ISmartAccount"; -export * from "./interfaces/IBaseSmartAccount"; -export * from "./interfaces/IBiconomySmartAccount"; export * from "./utils/Types"; export * from "./utils/Constants"; export * from "./BiconomySmartAccountV2"; -export * from "./utils/VoidSigner"; +export * from "./provider"; diff --git a/packages/account/src/interfaces/IBaseSmartAccount.ts b/packages/account/src/interfaces/IBaseSmartAccount.ts deleted file mode 100644 index 64cc5fc92..000000000 --- a/packages/account/src/interfaces/IBaseSmartAccount.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { UserOperation } from "@biconomy/core-types"; -import { BigNumberish, Bytes, BytesLike, BigNumber } from "ethers"; -/** - * Interface for Smart Contract Wallet aka Smart Account. - * This SA does not have to implement ERC4337 interfaces - */ -export interface INon4337Account { - estimateCreationGas(_initCode: string): Promise; - getNonce(): Promise; - signMessage(_message: Bytes | string): Promise; - getAccountAddress(_accountIndex?: number): Promise; -} - -export interface IBaseSmartAccount extends INon4337Account { - getVerificationGasLimit(_initCode: BytesLike): Promise; - getPreVerificationGas(_userOp: Partial): Promise; - signUserOp(_userOp: UserOperation): Promise; - signUserOpHash(_userOpHash: string): Promise; - getUserOpHash(_userOp: Partial): Promise; - getAccountInitCode(): Promise; - getDummySignature(): Promise; -} diff --git a/packages/account/src/interfaces/IBiconomySmartAccount.ts b/packages/account/src/interfaces/IBiconomySmartAccount.ts deleted file mode 100644 index 2534ae461..000000000 --- a/packages/account/src/interfaces/IBiconomySmartAccount.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { UserOperation, Transaction } from "@biconomy/core-types"; -import { - SupportedChainsResponse, - BalancesResponse, - BalancesDto, - UsdBalanceResponse, - SmartAccountByOwnerDto, - SmartAccountsResponse, - SCWTransactionResponse, -} from "@biconomy/node-client"; -import { Overrides, InitilizationData } from "../utils/Types"; -import { BigNumberish, BytesLike } from "ethers"; -import { ISmartAccount } from "./ISmartAccount"; -import { Signer } from "ethers"; - -export interface IBiconomySmartAccount extends ISmartAccount { - init(_initilizationData?: InitilizationData): Promise; - initializeAccountAtIndex(_accountIndex: number): void; - getExecuteCallData(_to: string, _value: BigNumberish, _data: BytesLike): string; - getExecuteBatchCallData(_to: Array, _value: Array, _data: Array): string; - buildUserOp(_transactions: Transaction[], _overrides?: Overrides): Promise>; - getAllTokenBalances(_balancesDto: BalancesDto): Promise; - getTotalBalanceInUsd(_balancesDto: BalancesDto): Promise; - getSmartAccountsByOwner(_smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise; - getTransactionsByAddress(_chainId: number, _address: string): Promise; - getTransactionByHash(_txHash: string): Promise; - getAllSupportedChains(): Promise; - attachSigner(_signer: Signer): Promise; -} diff --git a/packages/account/src/interfaces/ISmartAccount.ts b/packages/account/src/interfaces/ISmartAccount.ts deleted file mode 100644 index fce4a8f8c..000000000 --- a/packages/account/src/interfaces/ISmartAccount.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { UserOperation } from "@biconomy/core-types"; -import { UserOpResponse } from "@biconomy/bundler"; -export interface ISmartAccount { - getSmartAccountAddress(_accountIndex: number): Promise; - signUserOp(_userOp: UserOperation): Promise; - sendUserOp(_userOp: UserOperation): Promise; - sendSignedUserOp(_userOp: UserOperation): Promise; -} diff --git a/packages/account/src/provider.ts b/packages/account/src/provider.ts index 2df41669b..9d6cecb0a 100644 --- a/packages/account/src/provider.ts +++ b/packages/account/src/provider.ts @@ -1,28 +1,49 @@ -import { BatchUserOperationCallData, SendUserOperationResult, SmartAccountProvider, UserOperationCallData } from "@alchemy/aa-core"; +import { + BatchUserOperationCallData, + SendUserOperationResult, + SmartAccountProvider, + UserOperationCallData, + UserOperationOverrides, + UserOperationStruct, +} from "@alchemy/aa-core"; import type { Hex, HttpTransport } from "viem"; import { BiconomySmartAccountV2 } from "./BiconomySmartAccountV2"; export class BiconomyAccountProvider extends SmartAccountProvider { - sendUserOperation = async (data: UserOperationCallData | BatchUserOperationCallData): Promise => { + buildUserOperation = async ( + data: UserOperationCallData | BatchUserOperationCallData, + _overrides?: UserOperationOverrides, + ): Promise => { if (!this.account) { - throw new Error("account not connected"); + throw new Error("account not connected!"); } - // create ethers tx from data - if (!Array.isArray(data)) { - data = [data]; + let callData: Hex; + if (Array.isArray(data)) { + callData = await this.account.encodeBatchExecute(data); + } else if (typeof data === "string") { + callData = data; + } else { + callData = await this.account.encodeExecute(data.target, data.value ?? BigInt(0), data.data); } - const tx = data.map((d) => { - return { - to: d.target, - data: d.data, - value: d.value, - }; + const userOp = await (this.account as BiconomySmartAccountV2).estimateUserOpGas({ + sender: await this.getAddress(), + nonce: await this.account.getNonce(), + initCode: await this.account.getInitCode(), + signature: await (this.account as BiconomySmartAccountV2).getDummySignatures(), + callData: callData, }); - const userOp = await (this.account as BiconomySmartAccountV2).buildUserOp(tx); - const userOpResponse = await (this.account as BiconomySmartAccountV2).sendUserOp(userOp); + return userOp as UserOperationStruct; + }; + + sendUserOperation = async (data: UserOperationCallData | BatchUserOperationCallData): Promise => { + if (!this.account) { + throw new Error("account not connected"); + } + const userOp = await this.buildUserOperation(data); + const userOpResponse = await (this.account as BiconomySmartAccountV2).sendUserOp(userOp); return { hash: userOpResponse.userOpHash as Hex, request: userOp as any, diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index b70d02937..45f1f3f8f 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -1,4 +1,3 @@ -import { ChainId } from "@biconomy/core-types"; import { EntryPointAddresses, BiconomyFactories, @@ -45,7 +44,7 @@ export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementatio Object.entries(BICONOMY_IMPLEMENTATION_ADDRESSES).map(([k, v]) => [v, k]), ); -export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101]; +export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101]; export const PROXY_CREATION_CODE = "0x6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033"; diff --git a/packages/account/src/utils/Preverificaiton.ts b/packages/account/src/utils/Preverificaiton.ts deleted file mode 100644 index 5b32b0054..000000000 --- a/packages/account/src/utils/Preverificaiton.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { UserOperation } from "@biconomy/core-types"; -import { NotPromise, packUserOp } from "@biconomy/common"; // '@account-abstraction/utils' -import { arrayify, hexlify } from "ethers/lib/utils"; -import { BigNumber } from "ethers"; -export interface GasOverheads { - /** - * fixed overhead for entire handleOp bundle. - */ - fixed: number; - - /** - * per userOp overhead, added on top of the above fixed per-bundle. - */ - perUserOp: number; - - /** - * overhead for userOp word (32 bytes) block - */ - perUserOpWord: number; - - // perCallDataWord: number - - /** - * zero byte cost, for calldata gas cost calculations - */ - zeroByte: number; - - /** - * non-zero byte cost, for calldata gas cost calculations - */ - nonZeroByte: number; - - /** - * expected bundle size, to split per-bundle overhead between all ops. - */ - bundleSize: number; - - /** - * expected length of the userOp signature. - */ - sigSize: number; -} - -export interface VerificationGasLimits { - /** - * per userOp gasLimit for validateUserOp() - * called from entrypoint to the account - * should consider max execution - */ - validateUserOpGas: number; - - /** - * per userOp gasLimit for validatePaymasterUserOp() - * called from entrypoint to the paymaster - * should consider max execution - */ - validatePaymasterUserOpGas: number; - - /** - * per userOp gasLimit for postOp() - * called from entrypoint to the paymaster - * should consider max execution for paymaster/s this account may use - */ - postOpGas: number; -} - -export const DefaultGasOverheads: GasOverheads = { - fixed: 21000, - perUserOp: 18300, - perUserOpWord: 4, - zeroByte: 4, - nonZeroByte: 16, - bundleSize: 1, - sigSize: 65, -}; - -export const DefaultGasLimits: VerificationGasLimits = { - validateUserOpGas: 100000, - validatePaymasterUserOpGas: 100000, - postOpGas: 10877, -}; - -/** - * calculate the preVerificationGas of the given UserOperation - * preVerificationGas (by definition) is the cost overhead that can't be calculated on-chain. - * it is based on parameters that are defined by the Ethereum protocol for external transactions. - * @param userOp filled userOp to calculate. The only possible missing fields can be the signature and preVerificationGas itself - * @param overheads gas overheads to use, to override the default values - */ -export function calcPreVerificationGas(userOp: Partial>, overheads?: Partial): BigNumber { - const ov = { ...DefaultGasOverheads, ...(overheads ?? {}) }; - /* eslint-disable @typescript-eslint/no-explicit-any */ - const p: NotPromise = { - // dummy values, in case the UserOp is incomplete. - paymasterAndData: "0x", - preVerificationGas: BigNumber.from(21000), // dummy value, just for calldata cost - signature: hexlify(Buffer.alloc(ov.sigSize, 1)), // dummy signature - ...userOp, - } as any; - - const packed = arrayify(packUserOp(p, false)); - const lengthInWord = (packed.length + 31) / 32; - /** - * general explanation - * 21000 base gas - * ~ 18300 gas per userOp : corresponds to _validateAccountAndPaymasterValidationData() method, - * Some lines in _handlePostOp() after actualGasCost calculation and compensate() method called in handleOps() method - * plus any gas overhead that can't be tracked on-chain - * (if bundler needs to charge the premium one way is to increase this value for ops to sign) - */ - const callDataCost = packed.map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte)).reduce((sum, x) => sum + x); - const ret = Math.round(callDataCost + ov.fixed / ov.bundleSize + ov.perUserOp + ov.perUserOpWord * lengthInWord); - if (ret) { - return BigNumber.from(ret); - } else { - throw new Error("can't calculate preVerificationGas"); - } -} diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 48e6d23de..2e9ecbf75 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -5,7 +5,6 @@ import { IBundler } from "@biconomy/bundler"; import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Provider } from "@ethersproject/providers"; -import { GasOverheads } from "./Preverificaiton"; import { Hex } from "viem"; export type EntryPointAddresses = { @@ -37,6 +36,16 @@ export type SmartAccountConfig = { bundler?: IBundler; }; +export interface GasOverheads { + fixed: number; + perUserOp: number; + perUserOpWord: number; + zeroByte: number; + nonZeroByte: number; + bundleSize: number; + sigSize: number; +} + export interface BaseSmartAccountConfig { // owner?: Signer // can be in child classes index?: number; @@ -135,3 +144,9 @@ export type CounterFactualAddressParam = { index?: number; validationModule?: BaseValidationModule; }; + +export type Transaction = { + to: string; + value: BigNumberish; + data: string; +}; diff --git a/packages/account/src/utils/Utils.ts b/packages/account/src/utils/Utils.ts new file mode 100644 index 000000000..4a4e8947c --- /dev/null +++ b/packages/account/src/utils/Utils.ts @@ -0,0 +1,41 @@ +import { encodeAbiParameters, parseAbiParameters, keccak256, Hex } from "viem"; +import { type UserOperationStruct } from "@alchemy/aa-core"; + +/** + * pack the userOperation + * @param op + * @param forSignature "true" if the hash is needed to calculate the getUserOpHash() + * "false" to pack entire UserOp, for calculating the calldata cost of putting it on-chain. + */ +export function packUserOp(op: Partial, forSignature = true): string { + if (!op.initCode || !op.callData || !op.paymasterAndData) throw new Error("Missing userOp properties"); + if (forSignature) { + return encodeAbiParameters(parseAbiParameters("address, uint256, bytes32, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32"), [ + op.sender as Hex, + BigInt(op.nonce as Hex), + keccak256(op.initCode as Hex), + keccak256(op.callData as Hex), + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + keccak256(op.paymasterAndData as Hex), + ]); + } else { + // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) + return encodeAbiParameters(parseAbiParameters("address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes, bytes"), [ + op.sender as Hex, + BigInt(op.nonce as Hex), + op.initCode as Hex, + op.callData as Hex, + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + op.paymasterAndData as Hex, + op.signature as Hex, + ]); + } +} diff --git a/packages/account/src/utils/VoidSigner.ts b/packages/account/src/utils/VoidSigner.ts deleted file mode 100644 index d028c56ad..000000000 --- a/packages/account/src/utils/VoidSigner.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import { BigNumberish, BytesLike, Bytes, Signer } from "ethers"; -import { LogLevel, Logger } from "@ethersproject/logger"; -const logger = new Logger("signer"); - -export interface TypedDataDomain { - name?: string; - version?: string; - chainId?: BigNumberish; - verifyingContract?: string; - salt?: BytesLike; -} - -export interface TypedDataField { - name: string; - type: string; -} - -export type Deferrable = { - [K in keyof T]: T[K] | Promise; -}; - -export class VoidSigner extends Signer { - readonly address: string; - - readonly provider?: Provider; - - constructor(_address: string, _provider?: Provider) { - super(); - this.address = _address; - this.provider = _provider; - } - - getAddress(): Promise { - return Promise.resolve(this.address); - } - - _fail(message: string, operation: string): Promise { - return Promise.resolve().then(() => { - logger.throwError(message, Logger.errors.UNSUPPORTED_OPERATION, { operation: operation }); - }); - } - - signMessage(message: Bytes | string): Promise { - logger._log(LogLevel.INFO, [message]); - return this._fail("VoidSigner cannot sign messages", "signMessage"); - } - - signTransaction(transaction: Deferrable): Promise { - logger._log(LogLevel.INFO, [transaction]); - return this._fail("VoidSigner cannot sign transactions", "signTransaction"); - } - - connect(provider: Provider): VoidSigner { - return new VoidSigner(this.address, provider); - } -} diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 821fb6b63..3182a99f1 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -37,8 +37,8 @@ "access": "public" }, "dependencies": { + "@alchemy/aa-core": "^1.2.0", "@biconomy/common": "^3.1.0", - "@biconomy/core-types": "^3.1.0", "@ethersproject/providers": "^5.7.2", "ethers": "^5.7.0" } diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 99e72fd04..ebede8215 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -1,5 +1,4 @@ import { IBundler } from "./interfaces/IBundler"; -import { UserOperation, ChainId } from "@biconomy/core-types"; import { GetUserOperationResponse, GetUserOpByHashResponse, @@ -19,6 +18,7 @@ import { deepHexlify, sendRequest, getTimestampInSeconds, HttpMethod, Logger, RP import { transformUserOP } from "./utils/HelperFunction"; import { UserOpReceiptIntervals } from "./utils/Constants"; import { JsonRpcProvider } from "@ethersproject/providers"; +import { type UserOperationStruct } from "@alchemy/aa-core"; /** * This class implements IBundler interface. @@ -27,7 +27,7 @@ import { JsonRpcProvider } from "@ethersproject/providers"; */ export class Bundler implements IBundler { // eslint-disable-next-line no-unused-vars - UserOpReceiptIntervals: { [key in ChainId]?: number }; + UserOpReceiptIntervals: { [key in number]?: number }; constructor(readonly bundlerConfig: Bundlerconfig) { this.UserOpReceiptIntervals = { @@ -46,7 +46,7 @@ export class Bundler implements IBundler { * @description This function will fetch gasPrices from bundler * @returns Promise */ - async estimateUserOpGas(userOp: UserOperation): Promise { + async estimateUserOpGas(userOp: UserOperationStruct): Promise { // expected dummySig and possibly dummmy paymasterAndData should be provided by the caller // bundler doesn't know account and paymaster implementation userOp = transformUserOP(userOp); @@ -81,7 +81,7 @@ export class Bundler implements IBundler { * @description This function will send signed userOp to bundler to get mined on chain * @returns Promise */ - async sendUserOp(userOp: UserOperation, simulationParam?: SendUserOpOptions): Promise { + async sendUserOp(userOp: UserOperationStruct, simulationParam?: SendUserOpOptions): Promise { const chainId = this.bundlerConfig.chainId; // transformUserOP will convert all bigNumber values to string userOp = transformUserOP(userOp); diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts index 5fb00a2a7..6e7940aad 100644 --- a/packages/bundler/src/interfaces/IBundler.ts +++ b/packages/bundler/src/interfaces/IBundler.ts @@ -1,9 +1,9 @@ import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse, SendUserOpOptions, GasFeeValues } from "../utils/Types"; -import { UserOperation } from "@biconomy/core-types"; +import { UserOperationStruct } from "@alchemy/aa-core"; export interface IBundler { - estimateUserOpGas(_userOp: Partial): Promise; - sendUserOp(_userOp: UserOperation, _simulationParam?: SendUserOpOptions): Promise; + estimateUserOpGas(_userOp: Partial): Promise; + sendUserOp(_userOp: UserOperationStruct, _simulationParam?: SendUserOpOptions): Promise; getUserOpReceipt(_userOpHash: string): Promise; getUserOpByHash(_userOpHash: string): Promise; getGasFeeValues(): Promise; diff --git a/packages/bundler/src/utils/HelperFunction.ts b/packages/bundler/src/utils/HelperFunction.ts index ec117327b..f0ecaa870 100644 --- a/packages/bundler/src/utils/HelperFunction.ts +++ b/packages/bundler/src/utils/HelperFunction.ts @@ -1,10 +1,10 @@ -import { UserOperation } from "@biconomy/core-types"; +import { type UserOperationStruct } from "@alchemy/aa-core"; import { BigNumber } from "ethers"; -export const transformUserOP = (userOp: UserOperation): UserOperation => { +export const transformUserOP = (userOp: UserOperationStruct): UserOperationStruct => { try { const userOperation = { ...userOp }; - const keys: (keyof UserOperation)[] = [ + const keys: (keyof UserOperationStruct)[] = [ "nonce", "callGasLimit", "verificationGasLimit", diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index acf5bcc4d..415b96a2a 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -37,6 +37,7 @@ "access": "public" }, "dependencies": { + "@alchemy/aa-core": "^1.2.2", "@biconomy/common": "^3.1.0", "@biconomy/core-types": "^3.1.0", "@ethersproject/abstract-provider": "^5.7.0", diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index cf7c8409b..18af4fc70 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -1,6 +1,6 @@ import { Logger, sendRequest, HttpMethod, getTimestampInSeconds } from "@biconomy/common"; import { resolveProperties } from "@ethersproject/properties"; -import { UserOperation, Transaction } from "@biconomy/core-types"; +import { type UserOperationStruct } from "@alchemy/aa-core"; import { PaymasterFeeQuote, PaymasterConfig, @@ -11,6 +11,7 @@ import { BiconomyTokenPaymasterRequest, PaymasterMode, PaymasterAndDataResponse, + Transaction, } from "./utils/Types"; import { BigNumberish, BigNumber, ethers } from "ethers"; import { ERC20_ABI } from "./constants"; @@ -39,7 +40,7 @@ export class BiconomyPaymaster implements IHybridPaymaster): Promise> { + private async prepareUserOperation(userOp: Partial): Promise> { userOp = await resolveProperties(userOp); if (userOp.nonce !== null && userOp.nonce !== undefined) { userOp.nonce = BigNumber.from(userOp.nonce).toHexString() as `0x${string}`; @@ -114,7 +115,7 @@ export class BiconomyPaymaster implements IHybridPaymaster, paymasterServiceData: FeeQuotesOrDataDto): Promise { + async getPaymasterFeeQuotesOrData( + userOp: Partial, + paymasterServiceData: FeeQuotesOrDataDto, + ): Promise { try { userOp = await this.prepareUserOperation(userOp); } catch (err) { @@ -255,7 +259,7 @@ export class BiconomyPaymaster implements IHybridPaymaster, + userOp: Partial, paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying ): Promise { try { @@ -349,10 +353,6 @@ export class BiconomyPaymaster implements IHybridPaymaster, + userOp: Partial, paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying ): Promise { Logger.log("userOp is ", userOp); diff --git a/packages/paymaster/src/interfaces/IHybridPaymaster.ts b/packages/paymaster/src/interfaces/IHybridPaymaster.ts index 533bd0746..d93d27508 100644 --- a/packages/paymaster/src/interfaces/IHybridPaymaster.ts +++ b/packages/paymaster/src/interfaces/IHybridPaymaster.ts @@ -1,11 +1,16 @@ -import { UserOperation } from "@biconomy/core-types"; -import { FeeQuotesOrDataResponse, BiconomyTokenPaymasterRequest, FeeQuotesOrDataDto, PaymasterAndDataResponse } from "../utils/Types"; -import { Transaction } from "@biconomy/core-types"; +import { type UserOperationStruct } from "@alchemy/aa-core"; +import { + FeeQuotesOrDataResponse, + BiconomyTokenPaymasterRequest, + FeeQuotesOrDataDto, + PaymasterAndDataResponse, + type Transaction, +} from "../utils/Types"; import { IPaymaster } from "./IPaymaster"; export interface IHybridPaymaster extends IPaymaster { - getPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; - getDummyPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; + getPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; + getDummyPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; buildTokenApprovalTransaction(_tokenPaymasterRequest: BiconomyTokenPaymasterRequest): Promise; - getPaymasterFeeQuotesOrData(_userOp: Partial, _paymasterServiceData: FeeQuotesOrDataDto): Promise; + getPaymasterFeeQuotesOrData(_userOp: Partial, _paymasterServiceData: FeeQuotesOrDataDto): Promise; } diff --git a/packages/paymaster/src/interfaces/IPaymaster.ts b/packages/paymaster/src/interfaces/IPaymaster.ts index 935392402..0d95801a5 100644 --- a/packages/paymaster/src/interfaces/IPaymaster.ts +++ b/packages/paymaster/src/interfaces/IPaymaster.ts @@ -1,8 +1,8 @@ -import { UserOperation } from "@biconomy/core-types"; +import { type UserOperationStruct } from "@alchemy/aa-core"; import { PaymasterAndDataResponse } from "../utils/Types"; export interface IPaymaster { // Implementing class may add extra parameter (for example paymasterServiceData with it's own type) in below function signature - getPaymasterAndData(_userOp: Partial): Promise; - getDummyPaymasterAndData(_userOp: Partial): Promise; + getPaymasterAndData(_userOp: Partial): Promise; + getDummyPaymasterAndData(_userOp: Partial): Promise; } diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index b97f2faee..b180dcb0e 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -1,4 +1,4 @@ -export type BigNumberish = string | bigint | number; +import { BigNumberish } from "@alchemy/aa-core"; export type Hex = `0x${string}`; export type PaymasterServiceErrorResponse = { @@ -130,3 +130,9 @@ export type UserOpGasResponse = { verificationGasLimit: string; callGasLimit: string; }; + +export type Transaction = { + to: string; + value: BigNumberish; + data: string; +}; From 576e9d801086736a6d374f44cfae1ec3bd307a9a Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 18 Dec 2023 18:19:36 +0530 Subject: [PATCH 0973/1247] fix: resolve build --- packages/account/src/abi/AccountResolver.ts | 106 ++++++++++++++++++++ packages/account/src/utils/Types.ts | 6 +- 2 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 packages/account/src/abi/AccountResolver.ts diff --git a/packages/account/src/abi/AccountResolver.ts b/packages/account/src/abi/AccountResolver.ts new file mode 100644 index 000000000..0cbffc749 --- /dev/null +++ b/packages/account/src/abi/AccountResolver.ts @@ -0,0 +1,106 @@ +export const AccountResolverAbi = [ + { + inputs: [ + { internalType: "address", name: "_v1Factory", type: "address" }, + { internalType: "address", name: "_v2Factory", type: "address" }, + { internalType: "address", name: "_ecdsaModule", type: "address" }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "ecdsaOwnershipModule", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "_eoa", type: "address" }, + { internalType: "uint8", name: "_maxIndex", type: "uint8" }, + ], + name: "resolveAddresses", + outputs: [ + { + components: [ + { internalType: "address", name: "accountAddress", type: "address" }, + { internalType: "address", name: "factoryAddress", type: "address" }, + { internalType: "address", name: "currentImplementation", type: "address" }, + { internalType: "string", name: "currentVersion", type: "string" }, + { internalType: "string", name: "factoryVersion", type: "string" }, + { internalType: "uint256", name: "deploymentIndex", type: "uint256" }, + ], + internalType: "struct IAddressResolver.SmartAccountResult[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "_eoa", type: "address" }, + { internalType: "uint8", name: "_maxIndex", type: "uint8" }, + { internalType: "address", name: "_moduleAddress", type: "address" }, + { internalType: "bytes", name: "_moduleSetupData", type: "bytes" }, + ], + name: "resolveAddressesFlexibleForV2", + outputs: [ + { + components: [ + { internalType: "address", name: "accountAddress", type: "address" }, + { internalType: "address", name: "factoryAddress", type: "address" }, + { internalType: "address", name: "currentImplementation", type: "address" }, + { internalType: "string", name: "currentVersion", type: "string" }, + { internalType: "string", name: "factoryVersion", type: "string" }, + { internalType: "uint256", name: "deploymentIndex", type: "uint256" }, + ], + internalType: "struct IAddressResolver.SmartAccountResult[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "_eoa", type: "address" }, + { internalType: "uint8", name: "_maxIndex", type: "uint8" }, + ], + name: "resolveAddressesV1", + outputs: [ + { + components: [ + { internalType: "address", name: "accountAddress", type: "address" }, + { internalType: "address", name: "factoryAddress", type: "address" }, + { internalType: "address", name: "currentImplementation", type: "address" }, + { internalType: "string", name: "currentVersion", type: "string" }, + { internalType: "string", name: "factoryVersion", type: "string" }, + { internalType: "uint256", name: "deploymentIndex", type: "uint256" }, + ], + internalType: "struct IAddressResolver.SmartAccountResult[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "smartAccountFactoryV1", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "smartAccountFactoryV2", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, +] as const; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 11e5aba9c..e0c5805a0 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -158,10 +158,10 @@ export type CounterFactualAddressParam = { }; export type QueryParamsForAddressResolver = { - eoaAddress: string; + eoaAddress: Hex; index: number; - moduleAddress: string; - moduleSetupData: string; + moduleAddress: Hex; + moduleSetupData: Hex; maxIndexForScan?: number; }; From 4c93c5d9d3206271ade080f418178e48ebba0050 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 18 Dec 2023 18:39:56 +0530 Subject: [PATCH 0974/1247] turned off bundler tests --- .../tests/SmartAccountV2.local.spec.ts | 455 +++++++++--------- 1 file changed, 233 insertions(+), 222 deletions(-) diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index df8901d0b..10501ff34 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -1,4 +1,4 @@ -import { EntryPoint, EntryPoint__factory, UserOperationStruct, SimpleAccountFactory__factory } from "@account-abstraction/contracts"; +import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; import { VoidSigner, Wallet, ethers } from "ethers"; import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; @@ -13,7 +13,7 @@ import { import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; import { ChainId, UserOperation } from "@biconomy/core-types"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; +import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { MultiChainValidationModule } from "@biconomy/modules"; import { BaseValidationModule } from "@biconomy/modules"; import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; @@ -75,7 +75,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { entryPointAddress: entryPoint.address, factoryAddress: accountFactory.address as Hex, implementationAddress: accountImpl.address as Hex, - defaultFallbackHandler: await accountFactory.minimalHandler() as Hex, + defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, defaultValidationModule: module1, activeValidationModule: module1, }); @@ -88,276 +88,287 @@ describe("BiconomySmartAccountV2 API Specs", () => { await new Promise((resolve) => setTimeout(resolve, 10000)); }, 30000); - it("Nonce should be zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()).toString(), data: "0x" }]); - console.log("builtUserOp", builtUserOp); - expect(builtUserOp?.nonce?.toString()).toBe("0"); + it("Can fetch counterfactual address", async () => { + await accountAPI.getAccountAddress(); }); - it("Sender should be non zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()).toString(), data: "0x" }]); - expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); - }); - it("InitCode length should be greater then 170", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()).toString(), data: "0x" }]); - expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); - }); - it("#getUserOpHash should match entryPoint.getUserOpHash", async function () { - const userOp: UserOperation = { - sender: "0x".padEnd(42, "1") as Hex, - nonce: "0x02", - initCode: "0x3333", - callData: "0x4444", - callGasLimit: "0x05", - verificationGasLimit: "0x06", - preVerificationGas: "0x07", - maxFeePerGas: "0x08", - maxPriorityFeePerGas: "0x09", - paymasterAndData: "0xaaaaaa", - signature: "0xbbbb", - }; - const hash = await accountAPI.getUserOpHash(userOp); - const epHash = await entryPoint.getUserOpHash(userOp); - expect(hash).toBe(epHash); - }); - it("should deploy to counterfactual address", async () => { - accountAddress = await accountAPI.getAccountAddress(); - expect(await provider.getCode(accountAddress).then((code) => code.length)).toBe(2); - - await signer.sendTransaction({ - to: accountAddress, - value: ethers.utils.parseEther("0.1"), - }); - const op = await accountAPI.buildUserOp([ - { - to: recipient.address, - data: recipient.interface.encodeFunctionData("something", ["hello"]), - }, - ]); - - const signedUserOp = await accountAPI.signUserOp(op); - - await entryPoint.handleOps([signedUserOp], beneficiary); - - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - - expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); - }, 10000); // on github runner it takes more time than 5000ms - - // TODO - // possibly use local bundler API from image - it("should build and send userop via bundler API", async () => {}); - - it("should deploy another account using different validation module", async () => { - let accountAPI2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - // paymaster: paymaster, - // bundler: bundler, - entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address as Hex, - // implementationAddress: accountAPI.getImplementationAddress(), - defaultFallbackHandler: await accountFactory.minimalHandler() as Hex, - defaultValidationModule: module2, - activeValidationModule: module2, - }); - - // TODO - // Review: Just setting different default validation module and querying account address is not working - // accountAPI.setDefaultValidationModule(module2); - - // accountAPI2 = await accountAPI2.init(); - - const accountAddress2 = await accountAPI2.getAccountAddress(); - expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBe(2); - - await signer.sendTransaction({ - to: accountAddress2, - value: ethers.utils.parseEther("0.1"), - }); - const op = await accountAPI2.buildUserOp([ - { - to: recipient.address, - data: recipient.interface.encodeFunctionData("something", ["hello"]), - }, - ]); - - const signedUserOp = await accountAPI2.signUserOp(op); - await entryPoint.handleOps([signedUserOp], beneficiary); + // it("Nonce should be zero", async () => { + // const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); + // console.log("builtUserOp", builtUserOp); + // expect(builtUserOp?.nonce?.toString()).toBe("0"); + // }); + // it("Sender should be non zero", async () => { + // const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); + // expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); + // }); + // it("InitCode length should be greater then 170", async () => { + // const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); + // expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); + // }); + // it("#getUserOpHash should match entryPoint.getUserOpHash", async function () { + // const userOp: UserOperation = { + // sender: "0x".padEnd(42, "1") as Hex, + // nonce: "0x02", + // initCode: "0x3333", + // callData: "0x4444", + // callGasLimit: "0x05", + // verificationGasLimit: "0x06", + // preVerificationGas: "0x07", + // maxFeePerGas: "0x08", + // maxPriorityFeePerGas: "0x09", + // paymasterAndData: "0xaaaaaa", + // signature: "0xbbbb", + // }; + // const hash = await accountAPI.getUserOpHash(userOp); + // const epHash = await entryPoint.getUserOpHash(userOp); + // expect(hash).toBe(epHash); + // }); + // it("should deploy to counterfactual address", async () => { + // accountAddress = await accountAPI.getAccountAddress(); + // expect(await provider.getCode(accountAddress).then((code) => code.length)).toBe(2); + + // await signer.sendTransaction({ + // to: accountAddress, + // value: ethers.utils.parseEther("0.1"), + // }); + // const op = await accountAPI.buildUserOp([ + // { + // to: recipient.address, + // value: 100000000000000000n, + // data: recipient.interface.encodeFunctionData("something", ["hello"]), + // }, + // ]); + + // const signedUserOp = (await accountAPI.signUserOp(op)) as any; + + // await entryPoint.handleOps([signedUserOp], beneficiary); + + // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + + // expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); + // }, 10000); // on github runner it takes more time than 5000ms + + // // TODO + // // possibly use local bundler API from image + // it("should build and send userop via bundler API", async () => {}); + + // it("should deploy another account using different validation module", async () => { + // const accountAPI2 = await BiconomySmartAccountV2.create({ + // chainId: ChainId.GANACHE, + // rpcUrl: "http://127.0.0.1:8545", + // // paymaster: paymaster, + // // bundler: bundler, + // entryPointAddress: entryPoint.address, + // factoryAddress: accountFactory.address as Hex, + // // implementationAddress: accountAPI.getImplementationAddress(), + // defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, + // defaultValidationModule: module2, + // activeValidationModule: module2, + // }); + + // // TODO + // // Review: Just setting different default validation module and querying account address is not working + // // accountAPI.setDefaultValidationModule(module2); + + // // accountAPI2 = await accountAPI2.init(); + + // const accountAddress2 = await accountAPI2.getAccountAddress(); + // expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBe(2); + + // await signer.sendTransaction({ + // to: accountAddress2, + // value: ethers.utils.parseEther("0.1"), + // }); + // const op = await accountAPI2.buildUserOp([ + // { + // to: recipient.address, + // value: 0n, + // data: recipient.interface.encodeFunctionData("something", ["hello"]), + // }, + // ]); + + // const signedUserOp = (await accountAPI2.signUserOp(op)) as any; + + // await entryPoint.handleOps([signedUserOp], beneficiary); + + // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + + // expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBeGreaterThan(0); + // }); + + // it("should check if module is enabled", async () => { + // const isEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module1 as any).moduleAddress); + + // expect(isEcdsaModuleEnabled).toBe(true); - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + // const isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBeGreaterThan(0); - }); + // expect(isMultichainEcdsaModuleEnabled).toBe(false); + // }); - it("should check if module is enabled", async () => { - const isEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module1 as any).moduleAddress); + // it("should list all enabled modules", async () => { + // const paginatedModules = await accountAPI.getAllModules(); + // console.log("enabled modules ", paginatedModules); + // }); - expect(isEcdsaModuleEnabled).toBe(true); + // it("should enable a new module", async () => { + // let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // expect(isMultichainEcdsaModuleEnabled).toBe(false); - const isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // // Review: this actually skips whole paymaster stuff and also sends to connected bundler + // // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(false); - }); + // const enableModuleData = await accountAPI.getEnableModuleData((module2 as any).moduleAddress); - it("should list all enabled modules", async () => { - const paginatedModules = await accountAPI.getAllModules(); - console.log("enabled modules ", paginatedModules); - }); + // await signer.sendTransaction({ + // to: accountAddress, + // value: ethers.utils.parseEther("0.1"), + // }); - it("should enable a new module", async () => { - let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(false); + // const op = await accountAPI.buildUserOp([enableModuleData], { + // // skipBundlerGasEstimation: true, + // // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, + // }); - // Review: this actually skips whole paymaster stuff and also sends to connected bundler - // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); + // const signedUserOp = (await accountAPI.signUserOp(op)) as any; - const enableModuleData = await accountAPI.getEnableModuleData((module2 as any).moduleAddress); + // await entryPoint.handleOps([signedUserOp], beneficiary); - await signer.sendTransaction({ - to: accountAddress, - value: ethers.utils.parseEther("0.1"), - }); + // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - const op = await accountAPI.buildUserOp([enableModuleData], { - // skipBundlerGasEstimation: true, - // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - }); + // isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - const signedUserOp = await accountAPI.signUserOp(op); + // expect(isMultichainEcdsaModuleEnabled).toBe(true); + // }); - await entryPoint.handleOps([signedUserOp], beneficiary); + // it("signs the userOp using active validation module", async () => { + // const op = await accountAPI.buildUserOp([ + // { + // to: recipient.address, + // value: 0n, + // data: recipient.interface.encodeFunctionData("something", ["hello"]), + // }, + // ]); - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + // const signedUserOp = await accountAPI.signUserOp(op); - isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // expect(signedUserOp.signature).toBeDefined(); - expect(isMultichainEcdsaModuleEnabled).toBe(true); - }); + // const userOpHash = await accountAPI.getUserOpHash(op); - it("signs the userOp using active validation module", async () => { - const op = await accountAPI.buildUserOp([ - { - to: recipient.address, - data: recipient.interface.encodeFunctionData("something", ["hello"]), - }, - ]); + // const signature = await accountAPI.signUserOpHash(userOpHash); - const signedUserOp = await accountAPI.signUserOp(op); + // console.log("signature ", signature); - expect(signedUserOp.signature).toBeDefined(); + // expect(signature).toBeDefined(); + // }); - const userOpHash = await accountAPI.getUserOpHash(op); + // it("disables requested module", async () => { + // let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // expect(isMultichainEcdsaModuleEnabled).toBe(true); - const signature = await accountAPI.signUserOpHash(userOpHash); + // const disableModuleData = await accountAPI.getDisableModuleData(SENTINEL_MODULE, (module2 as any).moduleAddress); - console.log("signature ", signature); + // await signer.sendTransaction({ + // to: accountAddress, + // value: ethers.utils.parseEther("0.1"), + // }); - expect(signature).toBeDefined(); - }); + // const op = await accountAPI.buildUserOp([disableModuleData], { + // // skipBundlerGasEstimation: true, + // // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, + // }); - it("disables requested module", async () => { - let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(true); + // const signedUserOp = (await accountAPI.signUserOp(op)) as any; - const disableModuleData = await accountAPI.getDisableModuleData(SENTINEL_MODULE, (module2 as any).moduleAddress); + // await entryPoint.handleOps([signedUserOp], beneficiary); - await signer.sendTransaction({ - to: accountAddress, - value: ethers.utils.parseEther("0.1"), - }); - - const op = await accountAPI.buildUserOp([disableModuleData], { - // skipBundlerGasEstimation: true, - // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - }); + // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - const signedUserOp = await accountAPI.signUserOp(op); + // isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // expect(isMultichainEcdsaModuleEnabled).toBe(false); - await entryPoint.handleOps([signedUserOp], beneficiary); + // const modulesAfter = await accountAPI.getAllModules(); + // expect(modulesAfter[0]).toBe((module1 as any).moduleAddress); + // }); - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + // it("sends userop using multichain (different) validation module after enabling and setting it up", async () => { + // let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // expect(isMultichainEcdsaModuleEnabled).toBe(false); - isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(false); + // // Review: this actually skips whole paymaster stuff and also sends to connected bundler + // // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); - const modulesAfter = await accountAPI.getAllModules(); - expect(modulesAfter[0]).toBe((module1 as any).moduleAddress); - }); + // const accountOwnerAddress = await owner.getAddress(); - it("sends userop using multichain (different) validation module after enabling and setting it up", async () => { - let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(false); + // const multichainEcdsaOwnershipSetupData = multiChainModule.interface.encodeFunctionData("initForSmartAccount", [accountOwnerAddress]); - // Review: this actually skips whole paymaster stuff and also sends to connected bundler - // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); + // const setupAndEnableModuleData = await accountAPI.getSetupAndEnableModuleData( + // (module2 as any).moduleAddress, + // multichainEcdsaOwnershipSetupData as Hex, + // ); - const accountOwnerAddress = await owner.getAddress(); + // await signer.sendTransaction({ + // to: accountAddress, + // value: ethers.utils.parseEther("0.1"), + // }); - const multichainEcdsaOwnershipSetupData = multiChainModule.interface.encodeFunctionData("initForSmartAccount", [accountOwnerAddress]); + // const op1 = await accountAPI.buildUserOp([setupAndEnableModuleData], { + // // skipBundlerGasEstimation: true, + // // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, + // }); - const setupAndEnableModuleData = await accountAPI.getSetupAndEnableModuleData((module2 as any).moduleAddress, multichainEcdsaOwnershipSetupData); + // console.log("op1 ", op1); - await signer.sendTransaction({ - to: accountAddress, - value: ethers.utils.parseEther("0.1"), - }); + // const signedUserOp1 = (await accountAPI.signUserOp(op1)) as any; - const op1 = await accountAPI.buildUserOp([setupAndEnableModuleData], { - // skipBundlerGasEstimation: true, - // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - }); + // await entryPoint.handleOps([signedUserOp1], beneficiary); - console.log("op1 ", op1); + // isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // expect(isMultichainEcdsaModuleEnabled).toBe(true); - const signedUserOp1 = await accountAPI.signUserOp(op1); + // // Setting it as active validation module now + // accountAPI = accountAPI.setActiveValidationModule(module2); - await entryPoint.handleOps([signedUserOp1], beneficiary); + // const op = await accountAPI.buildUserOp([ + // { + // to: recipient.address, + // value: 0n, + // data: recipient.interface.encodeFunctionData("something", ["hello"]), + // }, + // ]); - isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(true); + // const signedUserOp = (await accountAPI.signUserOp(op)) as any; - // Setting it as active validation module now - accountAPI = accountAPI.setActiveValidationModule(module2); + // await entryPoint.handleOps([signedUserOp], beneficiary); - const op = await accountAPI.buildUserOp([ - { - to: recipient.address, - data: recipient.interface.encodeFunctionData("something", ["hello"]), - }, - ]); + // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + // }, 10000); // on github runner it takes more time than 5000ms - const signedUserOp = await accountAPI.signUserOp(op); + // it("Creates another replicated instance using void signer", async () => { + // const newmodule = await ECDSAOwnershipValidationModule.create({ + // signer: new VoidSigner(await owner.getAddress()), + // moduleAddress: ecdsaModule.address, + // }); - await entryPoint.handleOps([signedUserOp], beneficiary); - - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - }, 10000); // on github runner it takes more time than 5000ms - - it("Creates another replicated instance using void signer", async () => { - const newmodule = await ECDSAOwnershipValidationModule.create({ - signer: new VoidSigner(await owner.getAddress()), - moduleAddress: ecdsaModule.address, - }); - - const accountAPI2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - // paymaster: paymaster, - // bundler: bundler, - entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address as Hex, - // implementationAddress: accountAPI.getImplementationAddress(), - defaultFallbackHandler: await accountFactory.minimalHandler() as Hex, - defaultValidationModule: newmodule, - activeValidationModule: newmodule, - }); + // const accountAPI2 = await BiconomySmartAccountV2.create({ + // chainId: ChainId.GANACHE, + // rpcUrl: "http://127.0.0.1:8545", + // // paymaster: paymaster, + // // bundler: bundler, + // entryPointAddress: entryPoint.address, + // factoryAddress: accountFactory.address as Hex, + // // implementationAddress: accountAPI.getImplementationAddress(), + // defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, + // defaultValidationModule: newmodule, + // activeValidationModule: newmodule, + // }); - const address = await accountAPI2.getAccountAddress(); - console.log("account address ", address); + // const address = await accountAPI2.getAccountAddress(); + // console.log("account address ", address); - expect(address).toBe(accountAPI.getAccountAddress()); - }, 10000); + // expect(address).toBe(accountAPI.getAccountAddress()); + // }, 10000); // TODO // 1. sendSignedUserOp() From a6a0e7268b05bd77f0a4139e57d8a71ae7220e44 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 18 Dec 2023 21:18:18 +0530 Subject: [PATCH 0975/1247] fix: default validation params --- packages/account/src/BiconomySmartAccountV2.ts | 6 ++---- packages/account/src/utils/Types.ts | 1 - 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 2f7c4cf1c..58a6edd92 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -73,10 +73,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { private maxIndexForScan!: number; // Validation module responsible for account deployment initCode. This acts as a default authorization module. - defaultValidationModule: BaseValidationModule; + defaultValidationModule!: BaseValidationModule; // Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature. - activeValidationModule: BaseValidationModule; + activeValidationModule!: BaseValidationModule; private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) { super({ @@ -90,8 +90,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.index = biconomySmartAccountConfig.index ?? 0; this.chainId = biconomySmartAccountConfig.chainId; this.bundler = biconomySmartAccountConfig.bundler; - this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? this.defaultValidationModule; this.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex); if (biconomySmartAccountConfig.biconomyPaymasterApiKey) { diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 7e97bbb59..2dfef3967 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -108,7 +108,6 @@ export type BiconomySmartAccountV2Config = BaseSmartAccountConfig & rpcUrl?: string; // as good as Provider nodeClientUrl?: string; // very specific to Biconomy biconomyPaymasterApiKey?: string; - defaultValidationModule: BaseValidationModule; activeValidationModule?: BaseValidationModule; scanForUpgradedAccountsFromV1?: boolean; maxIndexForScan?: number; From 2d3fcfa5dfe57f9877c95cf8e015a7704d8f1088 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Mon, 18 Dec 2023 21:35:05 +0530 Subject: [PATCH 0976/1247] fix!: make bundler and paymaster public --- .../account/src/BiconomySmartAccountV2.ts | 14 ++++---- ...AccountV2-Abstract-Paymaster.local.spec.ts | 30 ++++++++-------- ...AccountV2-Module-Abstraction.local.spec.ts | 35 ++----------------- 3 files changed, 25 insertions(+), 54 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 58a6edd92..17e4d7b80 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1,4 +1,3 @@ -import { defaultAbiCoder } from "ethers/lib/utils"; import { Hex, keccak256, @@ -58,9 +57,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { private provider: PublicClient; - private paymaster?: IPaymaster; + paymaster?: IPaymaster; - private bundler?: IBundler; + bundler?: IBundler; private accountContract?: GetContractReturnType; @@ -712,11 +711,14 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return userOp; } - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { + async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { this.isActiveValidationModuleDefined(); - const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); + const moduleSig = (await this.activeValidationModule.signUserOpHash(userOpHash, params)) as Hex; - const signatureWithModuleAddress = defaultAbiCoder.encode(["bytes", "address"], [moduleSig, this.activeValidationModule.getAddress()]); + const signatureWithModuleAddress = encodeAbiParameters(parseAbiParameters("bytes, address"), [ + moduleSig, + this.activeValidationModule.getAddress() as Hex, + ]); return signatureWithModuleAddress; } diff --git a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts index 1da02d8a4..74f83dcf1 100644 --- a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts @@ -15,6 +15,7 @@ import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { BaseValidationModule } from "@biconomy/modules"; import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; import { BiconomyPaymaster } from "@biconomy/paymaster"; +import { Hex } from "viem"; const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); @@ -52,14 +53,13 @@ describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { }, 30000); it("Create a smart account with paymaster through api key", async () => { - account = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, biconomyPaymasterApiKey: "7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", - factoryAddress: accountFactory.address, - defaultFallbackHandler: await accountFactory.minimalHandler(), + factoryAddress: accountFactory.address as Hex, + defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, defaultValidationModule: module1, activeValidationModule: module1, }); @@ -69,36 +69,34 @@ describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { const paymaster = account.paymaster; - expect(paymaster).not.toBeNull() - expect(paymaster).not.toBeUndefined() + expect(paymaster).not.toBeNull(); + expect(paymaster).not.toBeUndefined(); - expect(address).toBe(account.accountAddress); + expect(address).toBe(await account.getAccountAddress()); }, 10000); it("Create a smart account with paymaster by creating instance", async () => { - const paymaster = new BiconomyPaymaster({ paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", - }) + }); account = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address, - defaultFallbackHandler: await accountFactory.minimalHandler(), + factoryAddress: accountFactory.address as Hex, + defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, defaultValidationModule: module1, activeValidationModule: module1, - paymaster: paymaster + paymaster: paymaster, }); const address = await account.getAccountAddress(); console.log("account address ", address); - expect(account.paymaster).not.toBeNull() - expect(account.paymaster).not.toBeUndefined() + expect(account.paymaster).not.toBeNull(); + expect(account.paymaster).not.toBeUndefined(); - expect(address).toBe(account.accountAddress); + expect(address).toBe(await account.getAccountAddress()); }, 10000); - -}); \ No newline at end of file +}); diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts index 2121c681b..96d19ab2a 100644 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts @@ -1,47 +1,18 @@ import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { Wallet, ethers } from "ethers"; -import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; - -import { - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - ECDSAOwnershipRegistryModule_v100__factory, -} from "@biconomy/common"; +import { ethers } from "ethers"; import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; import { ChainId } from "@biconomy/core-types"; -import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); describe("BiconomySmartAccountV2 Module Abstraction", () => { - let owner: Wallet; - let factoryOwner: Wallet; let entryPoint: EntryPoint; - let beneficiary: string; - let recipient: SampleRecipient; - let accountFactory: SmartAccountFactory_v200; - let ecdsaModule: ECDSAOwnershipRegistryModule_v100; beforeAll(async () => { - owner = Wallet.createRandom(); entryPoint = await new EntryPoint__factory(signer).deploy(); console.log("ep address ", entryPoint.address); - beneficiary = await signer.getAddress(); - factoryOwner = Wallet.createRandom(); - - const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - - accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - - ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - - recipient = await new SampleRecipient__factory(signer).deploy(); - await new Promise((resolve) => setTimeout(resolve, 10000)); }, 30000); @@ -60,7 +31,7 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { const address = await account.getAccountAddress(); console.log("Module Abstraction Test - Account address ", address); - expect(address).toBe(account.accountAddress); + expect(address).toBe(await account.getAccountAddress()); const module = account.activeValidationModule; console.log(`ACTIVE MODULE - ${module.getAddress()}`); @@ -77,7 +48,7 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { const address = await account.getAccountAddress(); console.log("Module Abstraction Test - Account address ", address); - expect(address).toBe(account.accountAddress); + expect(address).toBe(await account.getAccountAddress()); const module = account.activeValidationModule; console.log(`ACTIVE MODULE - ${module.getAddress()}`); From 702ab5d1bb58f55c7fa296538555b435b4c71ccf Mon Sep 17 00:00:00 2001 From: GabiDev Date: Thu, 21 Dec 2023 17:51:48 +0200 Subject: [PATCH 0977/1247] Bundler abstraction --- package.json | 1 + packages/account/src/BaseSmartAccount.ts | 13 ++++++-- packages/account/src/utils/Types.ts | 30 ++++++++++++------- ...AccountV2-Abstract-Paymaster.local.spec.ts | 4 ++- ...AccountV2-Module-Abstraction.local.spec.ts | 2 ++ .../tests/SmartAccountV2.local.spec.ts | 9 ++++-- 6 files changed, 42 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index f825ee708..6722d7b67 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ ] }, "dependencies": { + "lru-cache": "^10.1.0", "node-gyp": "^9.4.0", "typescript": "^5.2.2" }, diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 5fdc440bb..2d78554ea 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -5,7 +5,7 @@ import { defaultAbiCoder, keccak256 } from "ethers/lib/utils"; import { UserOperation, ChainId } from "@biconomy/core-types"; import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS, isNullOrUndefined } from "@biconomy/common"; -import { IBundler, UserOpResponse } from "@biconomy/bundler"; +import { Bundler, IBundler, UserOpResponse } from "@biconomy/bundler"; import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; import { SendUserOpParams } from "@biconomy/modules"; import { SponsorUserOperationDto, BiconomyPaymaster, PaymasterMode, IHybridPaymaster } from "@biconomy/paymaster"; @@ -47,9 +47,18 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { this.overheads = _smartAccountConfig.overheads; this.entryPointAddress = _smartAccountConfig.entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS; this.accountAddress = _smartAccountConfig.accountAddress; - this.bundler = _smartAccountConfig.bundler; + this.chainId = _smartAccountConfig.chainId; + if(_smartAccountConfig.bundlerUrl) { + this.bundler = new Bundler({ + bundlerUrl: _smartAccountConfig.bundlerUrl, + chainId: _smartAccountConfig.chainId, + }) + } else { + this.bundler = _smartAccountConfig.bundler; + } + if (_smartAccountConfig.paymaster) { this.paymaster = _smartAccountConfig.paymaster; } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index dd27baf49..7c857954a 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -48,17 +48,17 @@ export type SmartAccountConfig = { // MULTICHAIN = DEFAULT_MULTICHAIN_MODULE, }*/ -export type BaseSmartAccountConfig = { - // owner?: Signer // can be in child classes - index?: number; - provider?: Provider; - entryPointAddress?: string; - accountAddress?: string; - overheads?: Partial; - paymaster?: IPaymaster; // PaymasterAPI - bundler?: IBundler; // like HttpRpcClient - chainId: ChainId; -}; +export type BaseSmartAccountConfig = + ConditionalBundlerProps & { + // owner?: Signer // can be in child classes + index?: number; + provider?: Provider; + entryPointAddress?: string; + accountAddress?: string; + overheads?: Partial; + paymaster?: IPaymaster; // PaymasterAPI + chainId: ChainId; + } export type BiconomyTokenPaymasterRequest = { feeQuote: PaymasterFeeQuote; @@ -89,6 +89,14 @@ type ConditionalValidationProps = RequireAtLeastOne< "defaultValidationModule" | "signer" >; +type ConditionalBundlerProps = RequireAtLeastOne< + { + bundler: IBundler; + bundlerUrl: string; + }, + "bundler" | "bundlerUrl" +>; + export type BiconomySmartAccountV2Config = BaseSmartAccountConfig & ConditionalValidationProps & { factoryAddress?: string; diff --git a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts index 1da02d8a4..f4c847b00 100644 --- a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts @@ -62,6 +62,7 @@ describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: module1, activeValidationModule: module1, + bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." }); const address = await account.getAccountAddress(); @@ -89,7 +90,8 @@ describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: module1, activeValidationModule: module1, - paymaster: paymaster + paymaster: paymaster, + bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." }); const address = await account.getAccountAddress(); diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts index 2121c681b..53d468752 100644 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts @@ -51,6 +51,7 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, signer, + bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." /*defaultValidationModule: await ECDSAOwnershipValidationModule.create({ signer: signer, moduleAddress: ecdsaModule.address, @@ -72,6 +73,7 @@ describe("BiconomySmartAccountV2 Module Abstraction", () => { rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, signer, + bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." }); const address = await account.getAccountAddress(); diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 8a6883660..acf5f953a 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -77,7 +77,8 @@ describe("BiconomySmartAccountV2 API Specs", () => { defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: module1, activeValidationModule: module1, - signer + signer, + bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." }); // console.log('account api provider ', accountAPI.provider) @@ -159,7 +160,8 @@ describe("BiconomySmartAccountV2 API Specs", () => { defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: module2, activeValidationModule: module2, - signer + signer, + bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." }); // TODO @@ -352,7 +354,8 @@ describe("BiconomySmartAccountV2 API Specs", () => { defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: newmodule, activeValidationModule: newmodule, - signer + signer, + bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." }); const address = await accountAPI2.getAccountAddress(); From 765a3e337fb9ad8f1f8dc92b5edcb1ed0940f94d Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Thu, 21 Dec 2023 21:25:07 +0530 Subject: [PATCH 0978/1247] feat: reduce the bundle size --- .nvmrc | 2 +- packages/account/package.json | 13 +- .../account/src/BiconomySmartAccountV2.ts | 55 +- packages/account/src/utils/Types.ts | 22 +- ...AccountV2-Abstract-Paymaster.local.spec.ts | 185 +- ...AccountV2-Module-Abstraction.local.spec.ts | 102 +- .../tests/SmartAccountV2.local.spec.ts | 656 +++---- packages/bundler/package.json | 8 +- packages/bundler/src/Bundler.ts | 23 +- packages/bundler/src/utils/Constants.ts | 138 +- packages/bundler/src/utils/HelperFunction.ts | 14 +- .../src/utils/HttpRequests.ts | 2 - packages/bundler/src/utils/Types.ts | 24 +- packages/common/.depcheckrc | 1 - packages/common/CHANGELOG.md | 117 -- packages/common/README.md | 11 - .../SmartAccountFactory_v1.0.0.json | 172 -- .../biconomy_v1.0.0/SmartAccount_v1.0.0.json | 1682 ----------------- .../ECDSAOwnershipRegistryModule_v1.0.0.json | 298 --- .../MultiChainValidationModule_v1.0.0.json | 298 --- .../SmartAccountFactory_v2.0.0.json | 293 --- .../biconomy_v2.0.0/SmartAccount_v2.0.0.json | 1182 ------------ .../abis/entrypoint/EntryPoint_v0.0.5.json | 1318 ------------- .../abis/entrypoint/EntryPoint_v0.0.6.json | 1318 ------------- .../common/abis/misc/AddressResolver.json | 249 --- packages/common/package.json | 63 - packages/common/src/Constants.ts | 35 - packages/common/src/ContractsInstances.ts | 82 - packages/common/src/ERC4337Utils.ts | 178 -- packages/common/src/Logger.ts | 49 - packages/common/src/Utils.ts | 13 - packages/common/src/httpRequests.ts | 86 - packages/common/src/index.ts | 7 - packages/common/tests/ERC4337Utils.spec.ts | 45 - packages/common/tsconfig.json | 9 - packages/core-types/CHANGELOG.md | 94 - packages/core-types/README.md | 13 - packages/core-types/package.json | 46 - packages/core-types/src/BundlerTypes.ts | 8 - packages/core-types/src/ChainsTypes.ts | 32 - .../core-types/src/PaymasterServiceTypes.ts | 6 - packages/core-types/src/Types.ts | 43 - packages/core-types/src/index.ts | 2 - packages/core-types/tests/core-types.spec.ts | 5 - packages/core-types/tsconfig.json | 9 - packages/modules/package.json | 11 +- packages/modules/src/BaseValidationModule.ts | 20 +- .../modules/src/BatchedSessionRouterModule.ts | 71 +- .../src/ECDSAOwnershipValidationModule.ts | 39 +- .../modules/src/MultichainValidationModule.ts | 79 +- .../modules/src/SessionKeyManagerModule.ts | 125 +- .../modules/src/interfaces/ISessionStorage.ts | 19 +- .../src/interfaces/IValidationModule.ts | 16 +- .../session-storage/SessionLocalStorage.ts | 45 +- .../ERC20SessionValidationModule.ts | 12 +- packages/modules/src/utils/Helper.ts | 41 + packages/modules/src/utils/Types.ts | 46 +- packages/node-client/CHANGELOG.md | 65 - packages/node-client/README.md | 77 - packages/node-client/package.json | 74 - packages/node-client/src/INodeClient.ts | 93 - packages/node-client/src/NodeClient.ts | 145 -- packages/node-client/src/index.ts | 5 - .../node-client/src/types/NodeClientTypes.ts | 225 --- packages/node-client/src/utils/index.ts | 3 - .../node-client/tests/node-client.spec.ts | 22 - packages/node-client/tsconfig.json | 9 - packages/particle-auth/package.json | 2 +- packages/paymaster/package.json | 13 +- packages/paymaster/src/BiconomyPaymaster.ts | 115 +- .../src/{constants.ts => utils/Constants.ts} | 5 +- packages/paymaster/src/utils/Helpers.ts | 7 + packages/paymaster/src/utils/HttpRequests.ts | 61 + packages/paymaster/src/utils/Types.ts | 2 +- packages/transak/package.json | 2 +- rebuild.sh | 31 - tsconfig.json | 4 - 77 files changed, 948 insertions(+), 9544 deletions(-) rename packages/{node-client => bundler}/src/utils/HttpRequests.ts (97%) delete mode 100644 packages/common/.depcheckrc delete mode 100644 packages/common/CHANGELOG.md delete mode 100644 packages/common/README.md delete mode 100644 packages/common/abis/biconomy_v1.0.0/SmartAccountFactory_v1.0.0.json delete mode 100644 packages/common/abis/biconomy_v1.0.0/SmartAccount_v1.0.0.json delete mode 100644 packages/common/abis/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v1.0.0.json delete mode 100644 packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json delete mode 100644 packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json delete mode 100644 packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json delete mode 100644 packages/common/abis/entrypoint/EntryPoint_v0.0.5.json delete mode 100644 packages/common/abis/entrypoint/EntryPoint_v0.0.6.json delete mode 100644 packages/common/abis/misc/AddressResolver.json delete mode 100644 packages/common/package.json delete mode 100644 packages/common/src/Constants.ts delete mode 100644 packages/common/src/ContractsInstances.ts delete mode 100644 packages/common/src/ERC4337Utils.ts delete mode 100644 packages/common/src/Logger.ts delete mode 100644 packages/common/src/Utils.ts delete mode 100644 packages/common/src/httpRequests.ts delete mode 100644 packages/common/src/index.ts delete mode 100644 packages/common/tests/ERC4337Utils.spec.ts delete mode 100644 packages/common/tsconfig.json delete mode 100644 packages/core-types/CHANGELOG.md delete mode 100644 packages/core-types/README.md delete mode 100644 packages/core-types/package.json delete mode 100644 packages/core-types/src/BundlerTypes.ts delete mode 100644 packages/core-types/src/ChainsTypes.ts delete mode 100644 packages/core-types/src/PaymasterServiceTypes.ts delete mode 100644 packages/core-types/src/Types.ts delete mode 100644 packages/core-types/src/index.ts delete mode 100644 packages/core-types/tests/core-types.spec.ts delete mode 100644 packages/core-types/tsconfig.json create mode 100644 packages/modules/src/utils/Helper.ts delete mode 100644 packages/node-client/CHANGELOG.md delete mode 100644 packages/node-client/README.md delete mode 100644 packages/node-client/package.json delete mode 100644 packages/node-client/src/INodeClient.ts delete mode 100644 packages/node-client/src/NodeClient.ts delete mode 100644 packages/node-client/src/index.ts delete mode 100644 packages/node-client/src/types/NodeClientTypes.ts delete mode 100644 packages/node-client/src/utils/index.ts delete mode 100644 packages/node-client/tests/node-client.spec.ts delete mode 100644 packages/node-client/tsconfig.json rename packages/paymaster/src/{constants.ts => utils/Constants.ts} (78%) create mode 100644 packages/paymaster/src/utils/Helpers.ts create mode 100644 packages/paymaster/src/utils/HttpRequests.ts diff --git a/.nvmrc b/.nvmrc index c9d82507f..b1215e876 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v14.17.0 \ No newline at end of file +v18.16.0 \ No newline at end of file diff --git a/packages/account/package.json b/packages/account/package.json index ab6d386a5..0b7c4ed8a 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -24,7 +24,7 @@ "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, - "author": "talhamalik883 ", + "author": "Biconomy", "license": "MIT", "files": [ "dist/*", @@ -37,21 +37,12 @@ "nock": "^13.2.9" }, "dependencies": { - "@account-abstraction/contracts": "^0.6.0", - "@account-abstraction/utils": "^0.4.0", "@alchemy/aa-core": "^1.2.2", - "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0", "@biconomy/bundler": "^3.1.1", - "@biconomy/common": "^3.1.1", - "@biconomy/core-types": "^3.1.1", "@biconomy/modules": "^3.1.1", - "@biconomy/node-client": "^3.1.1", "@biconomy/paymaster": "^3.1.1", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "ethers": "^5.7.0", "loglevel": "^1.8.1", "lru-cache": "^10.0.1", - "viem": "^1.2.0" + "viem": "^1.20.3" } } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 17e4d7b80..22f1aabd8 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -20,7 +20,6 @@ import { } from "viem"; import { BaseSmartContractAccount, getChain, type BigNumberish, type UserOperationStruct } from "@alchemy/aa-core"; import { isNullOrUndefined, packUserOp } from "./utils/Utils"; -import { Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; import { IBundler, UserOpResponse } from "@biconomy/bundler"; @@ -41,6 +40,7 @@ import { DEFAULT_FALLBACK_HANDLER_ADDRESS, PROXY_CREATION_CODE, ADDRESS_ZERO, + DEFAULT_ENTRYPOINT_ADDRESS, } from "./utils/Constants"; import { BiconomyFactoryAbi } from "./abi/Factory"; import { BiconomyAccountAbi } from "./abi/SmartAccount"; @@ -81,8 +81,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { super({ ...biconomySmartAccountConfig, chain: getChain(biconomySmartAccountConfig.chainId), - rpcClient: biconomySmartAccountConfig.rpcUrl || (RPC_PROVIDER_URLS[biconomySmartAccountConfig.chainId] as string), - entryPointAddress: biconomySmartAccountConfig.entryPointAddress as Hex, + rpcClient: biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.public.http[0], + entryPointAddress: (biconomySmartAccountConfig.entryPointAddress as Hex) ?? DEFAULT_ENTRYPOINT_ADDRESS, accountAddress: (biconomySmartAccountConfig.accountAddress as Hex) ?? undefined, factoryAddress: biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS, }); @@ -108,12 +108,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.provider = createPublicClient({ chain: getChain(biconomySmartAccountConfig.chainId), - transport: http(biconomySmartAccountConfig.rpcUrl || (RPC_PROVIDER_URLS[biconomySmartAccountConfig.chainId] as string)), + transport: http(biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.public.http[0]), }); this.scanForUpgradedAccountsFromV1 = biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false; this.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10; - // REVIEW: removed the node client } /** @@ -186,7 +185,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { maxIndexForScan, }; const accountAddress = await this.getV1AccountsUpgradedToV2(queryParams); - Logger.log("account address from V1 ", accountAddress); if (accountAddress !== ADDRESS_ZERO) { return accountAddress; } @@ -259,7 +257,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } async getV1AccountsUpgradedToV2(params: QueryParamsForAddressResolver): Promise { - Logger.log("index to filter ", params.index); const maxIndexForScan = params.maxIndexForScan ?? this.maxIndexForScan; const addressResolver = getContract({ @@ -406,7 +403,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @returns Promise */ async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { - Logger.log("userOp received in base account ", userOp); delete userOp.signature; const userOperation = await this.signUserOp(userOp, params); const bundlerResponse = await this.sendSignedUserOp(userOperation); @@ -434,9 +430,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { "signature", ]; this.validateUserOp(userOp, requiredFields); - Logger.log("userOp validated"); if (!this.bundler) throw new Error("Bundler is not provided"); - Logger.log("userOp being sent to the bundler", userOp); + console.info("userOp being sent to the bundler", userOp); const bundlerResponse = await this.bundler.sendUserOp(userOp); return bundlerResponse; } @@ -509,7 +504,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } } catch (error) { // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account - Logger.log("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); + console.info("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); } return nonce; } @@ -531,7 +526,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return gasFeeValues; } catch (error: any) { // TODO: should throw error here? - Logger.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); + console.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); return gasFeeValues; } } @@ -544,11 +539,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const initCodeFetchPromise = this.getInitCode(); const dummySignatureFetchPromise = this.getDummySignatures(buildUseropDto?.params); - const [nonceFromFetch, initCode, signature, finalGasFeeValue] = await Promise.all([ + const [nonceFromFetch, initCode, signature] = await Promise.all([ this.getBuildUserOpNonce(buildUseropDto?.nonceOptions), initCodeFetchPromise, dummySignatureFetchPromise, - this.getGasFeeValues(buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation), ]); if (transactions.length === 0) { @@ -569,20 +563,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { callData: callData, }; - if (finalGasFeeValue.maxFeePerGas) { - userOp.maxFeePerGas = toHex(Number(finalGasFeeValue.maxFeePerGas)); - } - if (finalGasFeeValue.maxPriorityFeePerGas) { - userOp.maxPriorityFeePerGas = toHex(Number(finalGasFeeValue.maxPriorityFeePerGas)); - } - // for this Smart Account current validation module dummy signature will be used to estimate gas userOp.signature = signature; // Note: Can change the default behaviour of calling estimations using bundler/local userOp = await this.estimateUserOpGas(userOp); userOp.paymasterAndData = userOp.paymasterAndData ?? "0x"; - Logger.log("UserOp after estimation ", userOp); + console.log("UserOp after estimation ", userOp); return userOp; } @@ -593,14 +580,14 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress; - Logger.log("Requested fee token is ", feeTokenAddress); + console.info("Requested fee token is ", feeTokenAddress); if (!feeTokenAddress || feeTokenAddress === ADDRESS_ZERO) { throw new Error("Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest"); } const spender = tokenPaymasterRequest?.spender; - Logger.log("Spender address is ", spender); + console.info("Spender address is ", spender); if (!spender || spender === ADDRESS_ZERO) { throw new Error("Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest"); @@ -627,7 +614,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { let batchData: Array = []; let newCallData = userOp.callData; - Logger.log("Received information about fee token address and quote ", tokenPaymasterRequest); + console.info("Received information about fee token address and quote ", tokenPaymasterRequest); if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details @@ -636,7 +623,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const approvalRequest: Transaction = await (this.paymaster as IHybridPaymaster).buildTokenApprovalTransaction( tokenPaymasterRequest, ); - Logger.log("ApprovalRequest is for erc20 token ", approvalRequest.to); + console.info("ApprovalRequest is for erc20 token ", approvalRequest.to); if (approvalRequest.data === "0x" || approvalRequest.to === ADDRESS_ZERO) { return userOp; @@ -657,7 +644,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const smartAccountExecFunctionName = decodedSmartAccountData.functionName; - Logger.log(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); + console.info(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); if (smartAccountExecFunctionName === "execute" || smartAccountExecFunctionName === "execute_ncC") { const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; const toOriginal = methodArgsSmartWalletExecuteCall[0]; @@ -696,16 +683,16 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { callData: newCallData, }; } - Logger.log("UserOp after estimation ", finalUserOp); + console.info("UserOp after estimation ", finalUserOp); } catch (error) { - Logger.error("Failed to estimate gas for userOp with updated callData ", error); - Logger.log("Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); + console.error("Failed to estimate gas for userOp with updated callData ", error); + console.log("Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); } return finalUserOp; } } catch (error) { - Logger.log("Failed to update userOp. Sending back original op"); - Logger.error("Failed to update callData with error", error); + console.log("Failed to update userOp. Sending back original op"); + console.error("Failed to update callData with error", error); return userOp; } return userOp; @@ -773,8 +760,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return tx; } - async disableModule(preModule: Hex, moduleAddress: Hex): Promise { - const tx: Transaction = await this.getDisableModuleData(preModule, moduleAddress); + async disableModule(prevModule: Hex, moduleAddress: Hex): Promise { + const tx: Transaction = await this.getDisableModuleData(prevModule, moduleAddress); const partialUserOp = await this.buildUserOp([tx]); return this.sendUserOp(partialUserOp); } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 2dfef3967..01b7cc8db 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -1,11 +1,8 @@ -import { Signer } from "ethers"; -import { ChainId } from "@biconomy/core-types"; -import { BigNumberish, UserOperationStruct } from "@alchemy/aa-core"; +import { BigNumberish, UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; import { IBundler } from "@biconomy/bundler"; import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; -import { Provider } from "@ethersproject/providers"; -import { Hex } from "viem"; +import { Hex, WalletClient } from "viem"; export type EntryPointAddresses = { [address: string]: string; @@ -59,27 +56,26 @@ export interface GasOverheads { }*/ export type BaseSmartAccountConfig = { - // owner?: Signer // can be in child classes index?: number; - provider?: Provider; + provider?: WalletClient; entryPointAddress?: string; accountAddress?: string; overheads?: Partial; paymaster?: IPaymaster; // PaymasterAPI bundler?: IBundler; // like HttpRpcClient - chainId: ChainId; + chainId: number; }; export type BiconomyTokenPaymasterRequest = { feeQuote: PaymasterFeeQuote; - spender: string; + spender: Hex; maxApproval?: boolean; }; export type BiconomySmartAccountConfig = { - signer: Signer; + signer: WalletClientSigner; rpcUrl?: string; - chainId: ChainId; + chainId: number; entryPointAddress?: string; bundler?: IBundler; paymaster?: IPaymaster; @@ -94,7 +90,7 @@ type RequireAtLeastOne = Pick; @@ -129,7 +125,7 @@ export type NonceOptions = { // Used in AccountV1 export type SendUserOpDto = { - signer?: Signer; + signer?: WalletClientSigner; simulationType?: SimulationType; }; diff --git a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts index 74f83dcf1..35b091fc5 100644 --- a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts @@ -1,102 +1,83 @@ -import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { Wallet, ethers } from "ethers"; - -import { - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - ECDSAOwnershipRegistryModule_v100__factory, -} from "@biconomy/common"; - -import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -import { ChainId } from "@biconomy/core-types"; -import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; -import { BaseValidationModule } from "@biconomy/modules"; -import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { BiconomyPaymaster } from "@biconomy/paymaster"; -import { Hex } from "viem"; - -const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); -const signer = provider.getSigner(); - -describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { - let owner: Wallet; - let factoryOwner: Wallet; - let account: BiconomySmartAccountV2; - let entryPoint: EntryPoint; - let accountFactory: SmartAccountFactory_v200; - let ecdsaModule: ECDSAOwnershipRegistryModule_v100; - - let module1: BaseValidationModule; - - beforeAll(async () => { - owner = Wallet.createRandom(); - entryPoint = await new EntryPoint__factory(signer).deploy(); - console.log("ep address ", entryPoint.address); - factoryOwner = Wallet.createRandom(); - - const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - - accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - - ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - - module1 = await ECDSAOwnershipValidationModule.create({ - signer: owner, - moduleAddress: ecdsaModule.address, - }); - - console.log("provider url ", provider.connection.url); - - await new Promise((resolve) => setTimeout(resolve, 10000)); - }, 30000); - - it("Create a smart account with paymaster through api key", async () => { - account = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - biconomyPaymasterApiKey: "7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", - factoryAddress: accountFactory.address as Hex, - defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, - defaultValidationModule: module1, - activeValidationModule: module1, - }); - - const address = await account.getAccountAddress(); - console.log("account address ", address); - - const paymaster = account.paymaster; - - expect(paymaster).not.toBeNull(); - expect(paymaster).not.toBeUndefined(); - - expect(address).toBe(await account.getAccountAddress()); - }, 10000); - - it("Create a smart account with paymaster by creating instance", async () => { - const paymaster = new BiconomyPaymaster({ - paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", - }); - - account = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address as Hex, - defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, - defaultValidationModule: module1, - activeValidationModule: module1, - paymaster: paymaster, - }); - - const address = await account.getAccountAddress(); - console.log("account address ", address); - - expect(account.paymaster).not.toBeNull(); - expect(account.paymaster).not.toBeUndefined(); - - expect(address).toBe(await account.getAccountAddress()); - }, 10000); -}); +// import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; + +// import { +// SmartAccount_v200, +// SmartAccountFactory_v200, +// SmartAccount_v200__factory, +// SmartAccountFactory_v200__factory, +// ECDSAOwnershipRegistryModule_v100__factory, +// } from "@biconomy/common"; + +// import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; +// import { ChainId } from "@biconomy/core-types"; +// import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; +// import { BaseValidationModule } from "@biconomy/modules"; +// import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; +// import { BiconomyPaymaster } from "@biconomy/paymaster"; +// import { Hex } from "viem"; + +// const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); +// const signer = provider.getSigner(); + +// describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { +// let owner: Wallet; +// let factoryOwner: Wallet; +// let account: BiconomySmartAccountV2; +// let entryPoint: EntryPoint; +// let accountFactory: SmartAccountFactory_v200; +// let ecdsaModule: ECDSAOwnershipRegistryModule_v100; +// let module1: BaseValidationModule; +// beforeAll(async () => { +// owner = Wallet.createRandom(); +// entryPoint = await new EntryPoint__factory(signer).deploy(); +// console.log("ep address ", entryPoint.address); +// factoryOwner = Wallet.createRandom(); +// const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); +// accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); +// ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); +// module1 = await ECDSAOwnershipValidationModule.create({ +// signer: owner, +// moduleAddress: ecdsaModule.address, +// }); +// console.log("provider url ", provider.connection.url); +// await new Promise((resolve) => setTimeout(resolve, 10000)); +// }, 30000); +// it("Create a smart account with paymaster through api key", async () => { +// account = await BiconomySmartAccountV2.create({ +// chainId: ChainId.GANACHE, +// rpcUrl: "http://127.0.0.1:8545", +// entryPointAddress: entryPoint.address, +// biconomyPaymasterApiKey: "7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", +// factoryAddress: accountFactory.address as Hex, +// defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, +// defaultValidationModule: module1, +// activeValidationModule: module1, +// }); +// const address = await account.getAccountAddress(); +// console.log("account address ", address); +// const paymaster = account.paymaster; +// expect(paymaster).not.toBeNull(); +// expect(paymaster).not.toBeUndefined(); +// expect(address).toBe(await account.getAccountAddress()); +// }, 10000); +// it("Create a smart account with paymaster by creating instance", async () => { +// const paymaster = new BiconomyPaymaster({ +// paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", +// }); +// account = await BiconomySmartAccountV2.create({ +// chainId: ChainId.GANACHE, +// rpcUrl: "http://127.0.0.1:8545", +// entryPointAddress: entryPoint.address, +// factoryAddress: accountFactory.address as Hex, +// defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, +// defaultValidationModule: module1, +// activeValidationModule: module1, +// paymaster: paymaster, +// }); +// const address = await account.getAccountAddress(); +// console.log("account address ", address); +// expect(account.paymaster).not.toBeNull(); +// expect(account.paymaster).not.toBeUndefined(); +// expect(address).toBe(await account.getAccountAddress()); +// }, 10000); +// }); diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts index 96d19ab2a..54fef9d80 100644 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts @@ -1,56 +1,46 @@ -import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { ethers } from "ethers"; - -import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -import { ChainId } from "@biconomy/core-types"; - -const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); -const signer = provider.getSigner(); - -describe("BiconomySmartAccountV2 Module Abstraction", () => { - let entryPoint: EntryPoint; - - beforeAll(async () => { - entryPoint = await new EntryPoint__factory(signer).deploy(); - console.log("ep address ", entryPoint.address); - await new Promise((resolve) => setTimeout(resolve, 10000)); - }, 30000); - - it("Create smart account with default module (ECDSA)", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - /*defaultValidationModule: await ECDSAOwnershipValidationModule.create({ - signer: signer, - moduleAddress: ecdsaModule.address, - }),*/ - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(await account.getAccountAddress()); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - }, 10000); - - it("Create smart account with ECDSA module", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(await account.getAccountAddress()); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - }, 10000); -}); +// import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; + +// import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; +// import { ChainId } from "@biconomy/core-types"; + +// const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); +// const signer = provider.getSigner(); + +// describe("BiconomySmartAccountV2 Module Abstraction", () => { +// let entryPoint: EntryPoint; +// beforeAll(async () => { +// entryPoint = await new EntryPoint__factory(signer).deploy(); +// console.log("ep address ", entryPoint.address); +// await new Promise((resolve) => setTimeout(resolve, 10000)); +// }, 30000); +// it("Create smart account with default module (ECDSA)", async () => { +// const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ +// chainId: ChainId.GANACHE, +// rpcUrl: "http://127.0.0.1:8545", +// entryPointAddress: entryPoint.address, +// signer, +// /*defaultValidationModule: await ECDSAOwnershipValidationModule.create({ +// signer: signer, +// moduleAddress: ecdsaModule.address, +// }),*/ +// }); +// const address = await account.getAccountAddress(); +// console.log("Module Abstraction Test - Account address ", address); +// expect(address).toBe(await account.getAccountAddress()); +// const module = account.activeValidationModule; +// console.log(`ACTIVE MODULE - ${module.getAddress()}`); +// }, 10000); +// it("Create smart account with ECDSA module", async () => { +// const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ +// chainId: ChainId.GANACHE, +// rpcUrl: "http://127.0.0.1:8545", +// entryPointAddress: entryPoint.address, +// signer, +// }); +// const address = await account.getAccountAddress(); +// console.log("Module Abstraction Test - Account address ", address); +// expect(address).toBe(await account.getAccountAddress()); +// const module = account.activeValidationModule; +// console.log(`ACTIVE MODULE - ${module.getAddress()}`); +// }, 10000); +// }); diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index fcf1122fb..01cb710ce 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -1,378 +1,378 @@ -import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { VoidSigner, Wallet, ethers } from "ethers"; -import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; - -import { - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - ECDSAOwnershipRegistryModule_v100__factory, - MultiChainValidationModule_v100__factory, -} from "@biconomy/common"; - -import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -import { ChainId, UserOperation } from "@biconomy/core-types"; -import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; -import { MultiChainValidationModule } from "@biconomy/modules"; -import { BaseValidationModule } from "@biconomy/modules"; -import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { MultiChainValidationModule_v100 } from "@biconomy/common"; -import { Hex } from "viem"; - -const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); -const signer = provider.getSigner(); -const SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; - -describe("BiconomySmartAccountV2 API Specs", () => { - let owner: Wallet; - let factoryOwner: Wallet; - let accountAPI: BiconomySmartAccountV2; - let entryPoint: EntryPoint; - let beneficiary: string; - let recipient: SampleRecipient; - let accountFactory: SmartAccountFactory_v200; - let ecdsaModule: ECDSAOwnershipRegistryModule_v100; - let multiChainModule: MultiChainValidationModule_v100; - let accountAddress: string; - - let module1: BaseValidationModule; - let module2: BaseValidationModule; - - beforeAll(async () => { - owner = Wallet.createRandom(); - entryPoint = await new EntryPoint__factory(signer).deploy(); - console.log("ep address ", entryPoint.address); - beneficiary = await signer.getAddress(); - factoryOwner = Wallet.createRandom(); - - const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - - accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - - ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - - module1 = await ECDSAOwnershipValidationModule.create({ - signer: owner, - moduleAddress: ecdsaModule.address, - }); - - multiChainModule = await new MultiChainValidationModule_v100__factory(signer).deploy(); - - module2 = await MultiChainValidationModule.create({ - signer: owner, - moduleAddress: multiChainModule.address, - }); - - console.log("provider url ", provider.connection.url); - - recipient = await new SampleRecipient__factory(signer).deploy(); - accountAPI = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - // paymaster: paymaster, - // bundler: bundler, - entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address as Hex, - implementationAddress: accountImpl.address as Hex, - defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, - defaultValidationModule: module1, - activeValidationModule: module1, - signer, - }); - - // console.log('account api provider ', accountAPI.provider) - - const counterFactualAddress = await accountAPI.getAccountAddress(); - console.log("Counterfactual address ", counterFactualAddress); - - await new Promise((resolve) => setTimeout(resolve, 10000)); - }, 30000); - - it("Can fetch counterfactual address", async () => { - await accountAPI.getAccountAddress(); - }); - - // it("Nonce should be zero", async () => { - // const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); - // console.log("builtUserOp", builtUserOp); - // expect(builtUserOp?.nonce?.toString()).toBe("0"); - // }); - // it("Sender should be non zero", async () => { - // const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); - // expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); - // }); - // it("InitCode length should be greater then 170", async () => { - // const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); - // expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); - // }); - // it("#getUserOpHash should match entryPoint.getUserOpHash", async function () { - // const userOp: UserOperation = { - // sender: "0x".padEnd(42, "1") as Hex, - // nonce: "0x02", - // initCode: "0x3333", - // callData: "0x4444", - // callGasLimit: "0x05", - // verificationGasLimit: "0x06", - // preVerificationGas: "0x07", - // maxFeePerGas: "0x08", - // maxPriorityFeePerGas: "0x09", - // paymasterAndData: "0xaaaaaa", - // signature: "0xbbbb", - // }; - // const hash = await accountAPI.getUserOpHash(userOp); - // const epHash = await entryPoint.getUserOpHash(userOp); - // expect(hash).toBe(epHash); - // }); - // it("should deploy to counterfactual address", async () => { - // accountAddress = await accountAPI.getAccountAddress(); - // expect(await provider.getCode(accountAddress).then((code) => code.length)).toBe(2); - - // await signer.sendTransaction({ - // to: accountAddress, - // value: ethers.utils.parseEther("0.1"), - // }); - // const op = await accountAPI.buildUserOp([ - // { - // to: recipient.address, - // value: 100000000000000000n, - // data: recipient.interface.encodeFunctionData("something", ["hello"]), - // }, - // ]); - - // const signedUserOp = (await accountAPI.signUserOp(op)) as any; - - // await entryPoint.handleOps([signedUserOp], beneficiary); - - // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - - // expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); - // }, 10000); // on github runner it takes more time than 5000ms - - // // TODO - // // possibly use local bundler API from image - // it("should build and send userop via bundler API", async () => {}); - - // it("should deploy another account using different validation module", async () => { - // const accountAPI2 = await BiconomySmartAccountV2.create({ - // chainId: ChainId.GANACHE, - // rpcUrl: "http://127.0.0.1:8545", - // // paymaster: paymaster, - // // bundler: bundler, - // entryPointAddress: entryPoint.address, - // factoryAddress: accountFactory.address as Hex, - // // implementationAddress: accountAPI.getImplementationAddress(), - // defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, - // defaultValidationModule: module2, - // activeValidationModule: module2, - // }); - - // // TODO - // // Review: Just setting different default validation module and querying account address is not working - // // accountAPI.setDefaultValidationModule(module2); - - // // accountAPI2 = await accountAPI2.init(); - - // const accountAddress2 = await accountAPI2.getAccountAddress(); - // expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBe(2); - - // await signer.sendTransaction({ - // to: accountAddress2, - // value: ethers.utils.parseEther("0.1"), - // }); - // const op = await accountAPI2.buildUserOp([ - // { - // to: recipient.address, - // value: 0n, - // data: recipient.interface.encodeFunctionData("something", ["hello"]), - // }, - // ]); - - // const signedUserOp = (await accountAPI2.signUserOp(op)) as any; - - // await entryPoint.handleOps([signedUserOp], beneficiary); - - // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - - // expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBeGreaterThan(0); - // }); - - // it("should check if module is enabled", async () => { - // const isEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module1 as any).moduleAddress); - - // expect(isEcdsaModuleEnabled).toBe(true); +// import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; +// import { VoidSigner, Wallet, ethers } from "ethers"; +// import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; + +// import { +// SmartAccount_v200, +// SmartAccountFactory_v200, +// SmartAccount_v200__factory, +// SmartAccountFactory_v200__factory, +// ECDSAOwnershipRegistryModule_v100__factory, +// MultiChainValidationModule_v100__factory, +// } from "@biconomy/common"; + +// import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; +// import { ChainId, UserOperation } from "@biconomy/core-types"; +// import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; +// import { MultiChainValidationModule } from "@biconomy/modules"; +// import { BaseValidationModule } from "@biconomy/modules"; +// import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; +// import { MultiChainValidationModule_v100 } from "@biconomy/common"; +// import { Hex } from "viem"; + +// const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); +// const signer = provider.getSigner(); +// const SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; + +// describe("BiconomySmartAccountV2 API Specs", () => { +// let owner: Wallet; +// let factoryOwner: Wallet; +// let accountAPI: BiconomySmartAccountV2; +// let entryPoint: EntryPoint; +// let beneficiary: string; +// let recipient: SampleRecipient; +// let accountFactory: SmartAccountFactory_v200; +// let ecdsaModule: ECDSAOwnershipRegistryModule_v100; +// let multiChainModule: MultiChainValidationModule_v100; +// let accountAddress: string; + +// let module1: BaseValidationModule; +// let module2: BaseValidationModule; + +// beforeAll(async () => { +// owner = Wallet.createRandom(); +// entryPoint = await new EntryPoint__factory(signer).deploy(); +// console.log("ep address ", entryPoint.address); +// beneficiary = await signer.getAddress(); +// factoryOwner = Wallet.createRandom(); + +// const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); + +// accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); + +// ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); + +// module1 = await ECDSAOwnershipValidationModule.create({ +// signer: owner, +// moduleAddress: ecdsaModule.address, +// }); + +// multiChainModule = await new MultiChainValidationModule_v100__factory(signer).deploy(); + +// module2 = await MultiChainValidationModule.create({ +// signer: owner, +// moduleAddress: multiChainModule.address, +// }); + +// console.log("provider url ", provider.connection.url); + +// recipient = await new SampleRecipient__factory(signer).deploy(); +// accountAPI = await BiconomySmartAccountV2.create({ +// chainId: ChainId.GANACHE, +// rpcUrl: "http://127.0.0.1:8545", +// // paymaster: paymaster, +// // bundler: bundler, +// entryPointAddress: entryPoint.address, +// factoryAddress: accountFactory.address as Hex, +// implementationAddress: accountImpl.address as Hex, +// defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, +// defaultValidationModule: module1, +// activeValidationModule: module1, +// signer, +// }); + +// // console.log('account api provider ', accountAPI.provider) + +// const counterFactualAddress = await accountAPI.getAccountAddress(); +// console.log("Counterfactual address ", counterFactualAddress); + +// await new Promise((resolve) => setTimeout(resolve, 10000)); +// }, 30000); + +// it("Can fetch counterfactual address", async () => { +// await accountAPI.getAccountAddress(); +// }); + +// it("Nonce should be zero", async () => { +// const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); +// console.log("builtUserOp", builtUserOp); +// expect(builtUserOp?.nonce?.toString()).toBe("0"); +// }); +// it("Sender should be non zero", async () => { +// const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); +// expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); +// }); +// it("InitCode length should be greater then 170", async () => { +// const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); +// expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); +// }); +// it("#getUserOpHash should match entryPoint.getUserOpHash", async function () { +// const userOp: UserOperation = { +// sender: "0x".padEnd(42, "1") as Hex, +// nonce: "0x02", +// initCode: "0x3333", +// callData: "0x4444", +// callGasLimit: "0x05", +// verificationGasLimit: "0x06", +// preVerificationGas: "0x07", +// maxFeePerGas: "0x08", +// maxPriorityFeePerGas: "0x09", +// paymasterAndData: "0xaaaaaa", +// signature: "0xbbbb", +// }; +// const hash = await accountAPI.getUserOpHash(userOp); +// const epHash = await entryPoint.getUserOpHash(userOp); +// expect(hash).toBe(epHash); +// }); +// it("should deploy to counterfactual address", async () => { +// accountAddress = await accountAPI.getAccountAddress(); +// expect(await provider.getCode(accountAddress).then((code) => code.length)).toBe(2); + +// await signer.sendTransaction({ +// to: accountAddress, +// value: ethers.utils.parseEther("0.1"), +// }); +// const op = await accountAPI.buildUserOp([ +// { +// to: recipient.address, +// value: 100000000000000000n, +// data: recipient.interface.encodeFunctionData("something", ["hello"]), +// }, +// ]); + +// const signedUserOp = (await accountAPI.signUserOp(op)) as any; + +// await entryPoint.handleOps([signedUserOp], beneficiary); + +// // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + +// expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); +// }, 10000); // on github runner it takes more time than 5000ms + +// // TODO +// // possibly use local bundler API from image +// it("should build and send userop via bundler API", async () => {}); + +// it("should deploy another account using different validation module", async () => { +// const accountAPI2 = await BiconomySmartAccountV2.create({ +// chainId: ChainId.GANACHE, +// rpcUrl: "http://127.0.0.1:8545", +// // paymaster: paymaster, +// // bundler: bundler, +// entryPointAddress: entryPoint.address, +// factoryAddress: accountFactory.address as Hex, +// // implementationAddress: accountAPI.getImplementationAddress(), +// defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, +// defaultValidationModule: module2, +// activeValidationModule: module2, +// }); + +// // TODO +// // Review: Just setting different default validation module and querying account address is not working +// // accountAPI.setDefaultValidationModule(module2); + +// // accountAPI2 = await accountAPI2.init(); + +// const accountAddress2 = await accountAPI2.getAccountAddress(); +// expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBe(2); + +// await signer.sendTransaction({ +// to: accountAddress2, +// value: ethers.utils.parseEther("0.1"), +// }); +// const op = await accountAPI2.buildUserOp([ +// { +// to: recipient.address, +// value: 0n, +// data: recipient.interface.encodeFunctionData("something", ["hello"]), +// }, +// ]); + +// const signedUserOp = (await accountAPI2.signUserOp(op)) as any; + +// await entryPoint.handleOps([signedUserOp], beneficiary); + +// // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + +// expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBeGreaterThan(0); +// }); + +// it("should check if module is enabled", async () => { +// const isEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module1 as any).moduleAddress); + +// expect(isEcdsaModuleEnabled).toBe(true); - // const isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); +// const isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(false); - // }); +// expect(isMultichainEcdsaModuleEnabled).toBe(false); +// }); - // it("should list all enabled modules", async () => { - // const paginatedModules = await accountAPI.getAllModules(); - // console.log("enabled modules ", paginatedModules); - // }); +// it("should list all enabled modules", async () => { +// const paginatedModules = await accountAPI.getAllModules(); +// console.log("enabled modules ", paginatedModules); +// }); - // it("should enable a new module", async () => { - // let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(false); +// it("should enable a new module", async () => { +// let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); +// expect(isMultichainEcdsaModuleEnabled).toBe(false); - // // Review: this actually skips whole paymaster stuff and also sends to connected bundler - // // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); +// // Review: this actually skips whole paymaster stuff and also sends to connected bundler +// // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); - // const enableModuleData = await accountAPI.getEnableModuleData((module2 as any).moduleAddress); +// const enableModuleData = await accountAPI.getEnableModuleData((module2 as any).moduleAddress); - // await signer.sendTransaction({ - // to: accountAddress, - // value: ethers.utils.parseEther("0.1"), - // }); +// await signer.sendTransaction({ +// to: accountAddress, +// value: ethers.utils.parseEther("0.1"), +// }); - // const op = await accountAPI.buildUserOp([enableModuleData], { - // // skipBundlerGasEstimation: true, - // // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - // }); +// const op = await accountAPI.buildUserOp([enableModuleData], { +// // skipBundlerGasEstimation: true, +// // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, +// }); - // const signedUserOp = (await accountAPI.signUserOp(op)) as any; +// const signedUserOp = (await accountAPI.signUserOp(op)) as any; - // await entryPoint.handleOps([signedUserOp], beneficiary); +// await entryPoint.handleOps([signedUserOp], beneficiary); - // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); +// // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - // isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); +// isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(true); - // }); +// expect(isMultichainEcdsaModuleEnabled).toBe(true); +// }); - // it("signs the userOp using active validation module", async () => { - // const op = await accountAPI.buildUserOp([ - // { - // to: recipient.address, - // value: 0n, - // data: recipient.interface.encodeFunctionData("something", ["hello"]), - // }, - // ]); +// it("signs the userOp using active validation module", async () => { +// const op = await accountAPI.buildUserOp([ +// { +// to: recipient.address, +// value: 0n, +// data: recipient.interface.encodeFunctionData("something", ["hello"]), +// }, +// ]); - // const signedUserOp = await accountAPI.signUserOp(op); +// const signedUserOp = await accountAPI.signUserOp(op); - // expect(signedUserOp.signature).toBeDefined(); +// expect(signedUserOp.signature).toBeDefined(); - // const userOpHash = await accountAPI.getUserOpHash(op); +// const userOpHash = await accountAPI.getUserOpHash(op); - // const signature = await accountAPI.signUserOpHash(userOpHash); +// const signature = await accountAPI.signUserOpHash(userOpHash); - // console.log("signature ", signature); +// console.log("signature ", signature); - // expect(signature).toBeDefined(); - // }); +// expect(signature).toBeDefined(); +// }); - // it("disables requested module", async () => { - // let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(true); +// it("disables requested module", async () => { +// let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); +// expect(isMultichainEcdsaModuleEnabled).toBe(true); - // const disableModuleData = await accountAPI.getDisableModuleData(SENTINEL_MODULE, (module2 as any).moduleAddress); +// const disableModuleData = await accountAPI.getDisableModuleData(SENTINEL_MODULE, (module2 as any).moduleAddress); - // await signer.sendTransaction({ - // to: accountAddress, - // value: ethers.utils.parseEther("0.1"), - // }); +// await signer.sendTransaction({ +// to: accountAddress, +// value: ethers.utils.parseEther("0.1"), +// }); - // const op = await accountAPI.buildUserOp([disableModuleData], { - // // skipBundlerGasEstimation: true, - // // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - // }); +// const op = await accountAPI.buildUserOp([disableModuleData], { +// // skipBundlerGasEstimation: true, +// // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, +// }); - // const signedUserOp = (await accountAPI.signUserOp(op)) as any; +// const signedUserOp = (await accountAPI.signUserOp(op)) as any; - // await entryPoint.handleOps([signedUserOp], beneficiary); +// await entryPoint.handleOps([signedUserOp], beneficiary); - // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); +// // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - // isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(false); +// isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); +// expect(isMultichainEcdsaModuleEnabled).toBe(false); - // const modulesAfter = await accountAPI.getAllModules(); - // expect(modulesAfter[0]).toBe((module1 as any).moduleAddress); - // }); +// const modulesAfter = await accountAPI.getAllModules(); +// expect(modulesAfter[0]).toBe((module1 as any).moduleAddress); +// }); - // it("sends userop using multichain (different) validation module after enabling and setting it up", async () => { - // let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(false); +// it("sends userop using multichain (different) validation module after enabling and setting it up", async () => { +// let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); +// expect(isMultichainEcdsaModuleEnabled).toBe(false); - // // Review: this actually skips whole paymaster stuff and also sends to connected bundler - // // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); +// // Review: this actually skips whole paymaster stuff and also sends to connected bundler +// // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); - // const accountOwnerAddress = await owner.getAddress(); +// const accountOwnerAddress = await owner.getAddress(); - // const multichainEcdsaOwnershipSetupData = multiChainModule.interface.encodeFunctionData("initForSmartAccount", [accountOwnerAddress]); +// const multichainEcdsaOwnershipSetupData = multiChainModule.interface.encodeFunctionData("initForSmartAccount", [accountOwnerAddress]); - // const setupAndEnableModuleData = await accountAPI.getSetupAndEnableModuleData( - // (module2 as any).moduleAddress, - // multichainEcdsaOwnershipSetupData as Hex, - // ); +// const setupAndEnableModuleData = await accountAPI.getSetupAndEnableModuleData( +// (module2 as any).moduleAddress, +// multichainEcdsaOwnershipSetupData as Hex, +// ); - // await signer.sendTransaction({ - // to: accountAddress, - // value: ethers.utils.parseEther("0.1"), - // }); +// await signer.sendTransaction({ +// to: accountAddress, +// value: ethers.utils.parseEther("0.1"), +// }); - // const op1 = await accountAPI.buildUserOp([setupAndEnableModuleData], { - // // skipBundlerGasEstimation: true, - // // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - // }); +// const op1 = await accountAPI.buildUserOp([setupAndEnableModuleData], { +// // skipBundlerGasEstimation: true, +// // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, +// }); - // console.log("op1 ", op1); +// console.log("op1 ", op1); - // const signedUserOp1 = (await accountAPI.signUserOp(op1)) as any; +// const signedUserOp1 = (await accountAPI.signUserOp(op1)) as any; - // await entryPoint.handleOps([signedUserOp1], beneficiary); +// await entryPoint.handleOps([signedUserOp1], beneficiary); - // isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(true); +// isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); +// expect(isMultichainEcdsaModuleEnabled).toBe(true); - // // Setting it as active validation module now - // accountAPI = accountAPI.setActiveValidationModule(module2); +// // Setting it as active validation module now +// accountAPI = accountAPI.setActiveValidationModule(module2); - // const op = await accountAPI.buildUserOp([ - // { - // to: recipient.address, - // value: 0n, - // data: recipient.interface.encodeFunctionData("something", ["hello"]), - // }, - // ]); +// const op = await accountAPI.buildUserOp([ +// { +// to: recipient.address, +// value: 0n, +// data: recipient.interface.encodeFunctionData("something", ["hello"]), +// }, +// ]); - // const signedUserOp = (await accountAPI.signUserOp(op)) as any; +// const signedUserOp = (await accountAPI.signUserOp(op)) as any; - // await entryPoint.handleOps([signedUserOp], beneficiary); +// await entryPoint.handleOps([signedUserOp], beneficiary); - // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - // }, 10000); // on github runner it takes more time than 5000ms +// // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); +// }, 10000); // on github runner it takes more time than 5000ms - // it("Creates another replicated instance using void signer", async () => { - // const newmodule = await ECDSAOwnershipValidationModule.create({ - // signer: new VoidSigner(await owner.getAddress()), - // moduleAddress: ecdsaModule.address, - // }); +// it("Creates another replicated instance using void signer", async () => { +// const newmodule = await ECDSAOwnershipValidationModule.create({ +// signer: new VoidSigner(await owner.getAddress()), +// moduleAddress: ecdsaModule.address, +// }); - // const accountAPI2 = await BiconomySmartAccountV2.create({ - // chainId: ChainId.GANACHE, - // rpcUrl: "http://127.0.0.1:8545", - // // paymaster: paymaster, - // // bundler: bundler, - // entryPointAddress: entryPoint.address, - // factoryAddress: accountFactory.address as Hex, - // // implementationAddress: accountAPI.getImplementationAddress(), - // defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, - // defaultValidationModule: newmodule, - // activeValidationModule: newmodule, - // }); +// const accountAPI2 = await BiconomySmartAccountV2.create({ +// chainId: ChainId.GANACHE, +// rpcUrl: "http://127.0.0.1:8545", +// // paymaster: paymaster, +// // bundler: bundler, +// entryPointAddress: entryPoint.address, +// factoryAddress: accountFactory.address as Hex, +// // implementationAddress: accountAPI.getImplementationAddress(), +// defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, +// defaultValidationModule: newmodule, +// activeValidationModule: newmodule, +// }); - // const address = await accountAPI2.getAccountAddress(); - // console.log("account address ", address); +// const address = await accountAPI2.getAccountAddress(); +// console.log("account address ", address); - // expect(address).toBe(accountAPI.getAccountAddress()); - // }, 10000); +// expect(address).toBe(accountAPI.getAccountAddress()); +// }, 10000); - // TODO - // 1. sendSignedUserOp() - // 2. sendUserOp() - // 3. sending userOps using a paymaster -}); +// TODO +// 1. sendSignedUserOp() +// 2. sendUserOp() +// 3. sending userOps using a paymaster +// }); diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 98d82aa67..94f0bff91 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -23,7 +23,7 @@ "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, - "author": "talhamalik883 ", + "author": "Biconomy", "repository": { "type": "git", "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" @@ -37,9 +37,7 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "^1.2.0", - "@biconomy/common": "^3.1.1", - "@ethersproject/providers": "^5.7.2", - "ethers": "^5.7.0" + "@alchemy/aa-core": "^1.2.2", + "viem": "^1.20.3" } } diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 127944772..db1214fc7 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -1,3 +1,6 @@ +import { getChain, type UserOperationStruct } from "@alchemy/aa-core"; +import { createPublicClient, http } from "viem"; +import { mainnet } from "viem/chains"; import { IBundler } from "./interfaces/IBundler"; import { GetUserOperationReceiptResponse, @@ -15,9 +18,7 @@ import { GetUserOperationStatusResponse, SimulationType, } from "./utils/Types"; -import { resolveProperties } from "ethers/lib/utils"; -import { deepHexlify, sendRequest, getTimestampInSeconds, HttpMethod, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; -import { transformUserOP } from "./utils/HelperFunction"; +import { transformUserOP, getTimestampInSeconds } from "./utils/HelperFunction"; import { UserOpReceiptIntervals, UserOpWaitForTxHashIntervals, @@ -25,8 +26,7 @@ import { UserOpReceiptMaxDurationIntervals, DEFAULT_ENTRYPOINT_ADDRESS, } from "./utils/Constants"; -import { JsonRpcProvider } from "@ethersproject/providers"; -import { type UserOperationStruct } from "@alchemy/aa-core"; +import { sendRequest, HttpMethod } from "./utils/HttpRequests"; /** * This class implements IBundler interface. @@ -85,7 +85,6 @@ export class Bundler implements IBundler { // expected dummySig and possibly dummmy paymasterAndData should be provided by the caller // bundler doesn't know account and paymaster implementation userOp = transformUserOP(userOp); - Logger.log("userOp sending for fee estimate ", userOp); const bundlerUrl = this.getBundlerUrl(); @@ -120,11 +119,10 @@ export class Bundler implements IBundler { const chainId = this.bundlerConfig.chainId; // transformUserOP will convert all bigNumber values to string userOp = transformUserOP(userOp); - const hexifiedUserOp = deepHexlify(await resolveProperties(userOp)); const simType = { simulation_type: simulationParam || "validation", }; - const params = [hexifiedUserOp, this.bundlerConfig.entryPointAddress, simType]; + const params = [userOp, this.bundlerConfig.entryPointAddress, simType]; const bundlerUrl = this.getBundlerUrl(); const sendUserOperationResponse: SendUserOpResponse = await sendRequest({ url: bundlerUrl, @@ -139,7 +137,10 @@ export class Bundler implements IBundler { const response: UserOpResponse = { userOpHash: sendUserOperationResponse.result, wait: (confirmations?: number): Promise => { - const provider = new JsonRpcProvider(RPC_PROVIDER_URLS[chainId]); + const providerClient = createPublicClient({ + chain: getChain(chainId) || mainnet, + transport: http(), + }); // Note: maxDuration can be defined per chainId const maxDuration = this.UserOpReceiptMaxDurationIntervals[chainId] || 30000; // default 30 seconds let totalDuration = 0; @@ -151,8 +152,8 @@ export class Bundler implements IBundler { const userOpResponse = await this.getUserOpReceipt(sendUserOperationResponse.result); if (userOpResponse && userOpResponse.receipt && userOpResponse.receipt.blockNumber) { if (confirmations) { - const latestBlock = await provider.getBlockNumber(); - const confirmedBlocks = latestBlock - userOpResponse.receipt.blockNumber; + const latestBlock = await providerClient.getBlockNumber(); + const confirmedBlocks = Number(latestBlock) - userOpResponse.receipt.blockNumber; if (confirmations >= confirmedBlocks) { clearInterval(intervalId); resolve(userOpResponse); diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index be373789a..8ffd436a5 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -1,129 +1,27 @@ -import { ChainId } from "@biconomy/core-types"; - -// eslint-disable-next-line no-unused-vars -export const UserOpReceiptIntervals: { [key in ChainId]?: number } = { - [ChainId.MAINNET]: 10000, - [ChainId.GOERLI]: 2000, - [ChainId.POLYGON_MUMBAI]: 2000, - [ChainId.POLYGON_MAINNET]: 2000, - [ChainId.BSC_TESTNET]: 2000, - [ChainId.BSC_MAINNET]: 2000, - [ChainId.POLYGON_ZKEVM_TESTNET]: 2000, - [ChainId.POLYGON_ZKEVM_MAINNET]: 2000, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 2000, - [ChainId.ARBITRUM_ONE_MAINNET]: 2000, - [ChainId.ARBITRUM_NOVA_MAINNET]: 2000, - [ChainId.OPTIMISM_MAINNET]: 2000, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 2000, - [ChainId.AVALANCHE_MAINNET]: 2000, - [ChainId.AVALANCHE_TESTNET]: 2000, - [ChainId.MOONBEAM_MAINNET]: 2000, - [ChainId.BASE_GOERLI_TESTNET]: 2000, - [ChainId.BASE_MAINNET]: 2000, - [ChainId.LINEA_TESTNET]: 2000, - [ChainId.LINEA_MAINNET]: 2000, - [ChainId.MANTLE_MAINNET]: 2000, - [ChainId.MANTLE_TESTNET]: 2000, - [ChainId.OPBNB_MAINNET]: 2000, - [ChainId.OPBNB_TESTNET]: 2000, - [ChainId.ASTAR_MAINNET]: 2000, - [ChainId.ASTAR_TESTNET]: 2000, - [ChainId.CHILIZ_MAINNET]: 2000, - [ChainId.CHILIZ_TESTNET]: 2000, +export const UserOpReceiptIntervals: { [key in number]?: number } = { + [1]: 10000, }; -// Note: Reduced by 1/10th.. can reduce more -export const UserOpWaitForTxHashIntervals: { [key in ChainId]?: number } = { - [ChainId.MAINNET]: 1000, - [ChainId.GOERLI]: 500, - [ChainId.POLYGON_MUMBAI]: 500, - [ChainId.POLYGON_MAINNET]: 500, - [ChainId.BSC_TESTNET]: 500, - [ChainId.BSC_MAINNET]: 500, - [ChainId.POLYGON_ZKEVM_TESTNET]: 500, - [ChainId.POLYGON_ZKEVM_MAINNET]: 500, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 500, - [ChainId.ARBITRUM_ONE_MAINNET]: 500, - [ChainId.ARBITRUM_NOVA_MAINNET]: 500, - [ChainId.OPTIMISM_MAINNET]: 500, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 500, - [ChainId.AVALANCHE_MAINNET]: 500, - [ChainId.AVALANCHE_TESTNET]: 500, - [ChainId.MOONBEAM_MAINNET]: 500, - [ChainId.BASE_GOERLI_TESTNET]: 500, - [ChainId.BASE_MAINNET]: 500, - [ChainId.LINEA_TESTNET]: 500, - [ChainId.LINEA_MAINNET]: 500, - [ChainId.MANTLE_MAINNET]: 500, - [ChainId.MANTLE_TESTNET]: 500, - [ChainId.OPBNB_MAINNET]: 500, - [ChainId.OPBNB_TESTNET]: 500, - [ChainId.ASTAR_MAINNET]: 500, - [ChainId.ASTAR_TESTNET]: 500, - [ChainId.CHILIZ_MAINNET]: 500, - [ChainId.CHILIZ_TESTNET]: 500, +// Note: Default value is 500(0.5sec) +export const UserOpWaitForTxHashIntervals: { [key in number]?: number } = { + [1]: 1000, }; -export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = { - [ChainId.MAINNET]: 300000, - [ChainId.GOERLI]: 50000, - [ChainId.POLYGON_MUMBAI]: 50000, - [ChainId.POLYGON_MAINNET]: 60000, - [ChainId.BSC_TESTNET]: 50000, - [ChainId.BSC_MAINNET]: 50000, - [ChainId.POLYGON_ZKEVM_TESTNET]: 40000, - [ChainId.POLYGON_ZKEVM_MAINNET]: 40000, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 50000, - [ChainId.ARBITRUM_ONE_MAINNET]: 50000, - [ChainId.ARBITRUM_NOVA_MAINNET]: 30000, - [ChainId.OPTIMISM_MAINNET]: 40000, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 40000, - [ChainId.AVALANCHE_MAINNET]: 40000, - [ChainId.AVALANCHE_TESTNET]: 40000, - [ChainId.MOONBEAM_MAINNET]: 40000, - [ChainId.BASE_GOERLI_TESTNET]: 40000, - [ChainId.BASE_MAINNET]: 40000, - [ChainId.LINEA_TESTNET]: 50000, - [ChainId.LINEA_MAINNET]: 50000, - [ChainId.MANTLE_MAINNET]: 40000, - [ChainId.MANTLE_TESTNET]: 40000, - [ChainId.OPBNB_MAINNET]: 40000, - [ChainId.OPBNB_TESTNET]: 40000, - [ChainId.ASTAR_MAINNET]: 40000, - [ChainId.ASTAR_TESTNET]: 40000, - [ChainId.CHILIZ_MAINNET]: 40000, - [ChainId.CHILIZ_TESTNET]: 40000, +// Note: Default value is 30000 (30sec) +export const UserOpReceiptMaxDurationIntervals: { [key in number]?: number } = { + [1]: 300000, + [80001]: 50000, + [137]: 60000, + [56]: 50000, + [97]: 50000, + [421613]: 50000, + [42161]: 50000, + [59140]: 50000, // linea testnet }; -export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: number } = { - [ChainId.MAINNET]: 20000, - [ChainId.GOERLI]: 20000, - [ChainId.POLYGON_MUMBAI]: 20000, - [ChainId.POLYGON_MAINNET]: 20000, - [ChainId.BSC_TESTNET]: 20000, - [ChainId.BSC_MAINNET]: 20000, - [ChainId.POLYGON_ZKEVM_TESTNET]: 20000, - [ChainId.POLYGON_ZKEVM_MAINNET]: 20000, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 20000, - [ChainId.ARBITRUM_ONE_MAINNET]: 20000, - [ChainId.ARBITRUM_NOVA_MAINNET]: 20000, - [ChainId.OPTIMISM_MAINNET]: 20000, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 20000, - [ChainId.AVALANCHE_MAINNET]: 20000, - [ChainId.AVALANCHE_TESTNET]: 20000, - [ChainId.MOONBEAM_MAINNET]: 20000, - [ChainId.BASE_GOERLI_TESTNET]: 20000, - [ChainId.BASE_MAINNET]: 20000, - [ChainId.LINEA_TESTNET]: 20000, - [ChainId.LINEA_MAINNET]: 20000, - [ChainId.MANTLE_MAINNET]: 20000, - [ChainId.MANTLE_TESTNET]: 20000, - [ChainId.OPBNB_MAINNET]: 20000, - [ChainId.OPBNB_TESTNET]: 20000, - [ChainId.ASTAR_MAINNET]: 20000, - [ChainId.ASTAR_TESTNET]: 20000, - [ChainId.CHILIZ_MAINNET]: 20000, - [ChainId.CHILIZ_TESTNET]: 20000, +// Note: Default value is 20000 (20sec) +export const UserOpWaitForTxHashMaxDurationIntervals: { [key in number]?: number } = { + [1]: 20000, }; export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; diff --git a/packages/bundler/src/utils/HelperFunction.ts b/packages/bundler/src/utils/HelperFunction.ts index f0ecaa870..670e04d31 100644 --- a/packages/bundler/src/utils/HelperFunction.ts +++ b/packages/bundler/src/utils/HelperFunction.ts @@ -1,6 +1,6 @@ -import { type UserOperationStruct } from "@alchemy/aa-core"; -import { BigNumber } from "ethers"; +import type { BigNumberish, UserOperationStruct } from "@alchemy/aa-core"; +// Will convert the userOp hex, bigInt and number values to hex strings export const transformUserOP = (userOp: UserOperationStruct): UserOperationStruct => { try { const userOperation = { ...userOp }; @@ -14,7 +14,7 @@ export const transformUserOP = (userOp: UserOperationStruct): UserOperationStruc ]; for (const key of keys) { if (userOperation[key] && userOperation[key] !== "0x") { - userOperation[key] = BigNumber.from(userOp[key]).toHexString() as `0x${string}`; + userOperation[key] = ("0x" + BigInt(userOp[key] as BigNumberish).toString(16)) as `0x${string}`; } } return userOperation; @@ -22,3 +22,11 @@ export const transformUserOP = (userOp: UserOperationStruct): UserOperationStruc throw `Failed to transform user operation: ${error}`; } }; + +/** + * @description this function will return current timestamp in seconds + * @returns Number + */ +export const getTimestampInSeconds = (): number => { + return Math.floor(Date.now() / 1000); +}; diff --git a/packages/node-client/src/utils/HttpRequests.ts b/packages/bundler/src/utils/HttpRequests.ts similarity index 97% rename from packages/node-client/src/utils/HttpRequests.ts rename to packages/bundler/src/utils/HttpRequests.ts index 49cbb7340..0a646fb42 100644 --- a/packages/node-client/src/utils/HttpRequests.ts +++ b/packages/bundler/src/utils/HttpRequests.ts @@ -1,5 +1,3 @@ -import fetch from "node-fetch"; - export enum HttpMethod { Get = "get", Post = "post", diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index 92763b483..b22a1f04e 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -1,15 +1,15 @@ -import { ethers, BigNumber } from "ethers"; -import { ChainId, UserOperation } from "@biconomy/core-types"; +import { UserOperationStruct } from "@alchemy/aa-core"; +import { Hex } from "viem"; export type Bundlerconfig = { bundlerUrl: string; entryPointAddress?: string; - chainId: ChainId; + chainId: number; // eslint-disable-next-line no-unused-vars - userOpReceiptIntervals?: { [key in ChainId]?: number }; - userOpWaitForTxHashIntervals?: { [key in ChainId]?: number }; - userOpReceiptMaxDurationIntervals?: { [key in ChainId]?: number }; - userOpWaitForTxHashMaxDurationIntervals?: { [key in ChainId]?: number }; + userOpReceiptIntervals?: { [key in number]?: number }; + userOpWaitForTxHashIntervals?: { [key in number]?: number }; + userOpReceiptMaxDurationIntervals?: { [key in number]?: number }; + userOpWaitForTxHashMaxDurationIntervals?: { [key in number]?: number }; }; export type UserOpReceipt = { @@ -18,12 +18,12 @@ export type UserOpReceipt = { sender: string; nonce: number; paymaster: string; - actualGasCost: BigNumber; - actualGasUsed: BigNumber; + actualGasCost: Hex; + actualGasUsed: Hex; success: boolean; reason: string; - logs: Array; // The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle) - receipt: ethers.providers.TransactionReceipt; + logs: Array; // The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle) + receipt: any; // TODO: define receipt type }; // review @@ -89,7 +89,7 @@ export type GetUserOpByHashResponse = { error?: JsonRpcError; }; -export type UserOpByHashResponse = UserOperation & { +export type UserOpByHashResponse = UserOperationStruct & { transactionHash: string; blockNumber: number; blockHash: string; diff --git a/packages/common/.depcheckrc b/packages/common/.depcheckrc deleted file mode 100644 index c0d8d09e2..000000000 --- a/packages/common/.depcheckrc +++ /dev/null @@ -1 +0,0 @@ -ignores: ["@openzeppelin/contracts"] diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md deleted file mode 100644 index 2eb65d5c6..000000000 --- a/packages/common/CHANGELOG.md +++ /dev/null @@ -1,117 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 3.1.1 (2023-11-09) - - -### Features - -* add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) - - - -## 3.1.0 (2023-09-20) - - -### Bug Fixes - -* comment out hardcoded gas limit in any case + fix value for estimate smart-account deployment + dev notes ([df48ec3](https://github.com/bcnmy/biconomy-client-sdk/commit/df48ec3c04cf44a8f64eb302217655076c6304a4)) -* error handling ([637bb67](https://github.com/bcnmy/biconomy-client-sdk/commit/637bb67b9390e39b4571374108bc70447a531963)) -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) -* linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) -* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) -* undefined log issue ([42f3f70](https://github.com/bcnmy/biconomy-client-sdk/commit/42f3f7040c96ff5ac57459224b09a25f95d2cd8c)) - - -### Features - -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) -* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) -* improve logs ([fb15af3](https://github.com/bcnmy/biconomy-client-sdk/commit/fb15af3af48ccf50101fedd7f9bb44ee97c747c4)) -* sdk test spec improvement ([fd80048](https://github.com/bcnmy/biconomy-client-sdk/commit/fd80048db7a60d34412dcb00f6dd8bb202f41ad3)) - - - - - -## 3.0.0 (2023-08-28) - - -### Features - -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) - - - -## 3.0.0-alpha.0 (2023-08-02) - -VERSION bump only - - - -# 3.1.0-alpha.0 (2023-07-24) - - - -### Features - -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - - - -## 3.0.0-alpha.0 (2023-07-12) - - -### Bug Fixes - -* bundler sync changes ([eb9b30d](https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e)) - - -## 2.0.2 (2023-06-10) - -* smart account state types to have factory address added - - -## 2.0.1 (2023-05-18) - - -### Bug Fixes - -* logic update ([41c4aec](https://github.com/bcnmy/biconomy-client-sdk/commit/41c4aec8ab5012b7ad362b2870966bd607e38636)) -* fix build issue in angular for relative path (https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e) - - -### Features - -* chain integrations ([9af2da0](https://github.com/bcnmy/biconomy-client-sdk/commit/9af2da03820a26ac7d21301c32de041ced6c5e43)) -* Type added for PaymasterServiceData + reordering of params ([fae8b3a](https://github.com/bcnmy/biconomy-client-sdk/commit/fae8b3a02a5e810a9a40674d27f389b89199bb62)) -* logic changed to accept paymasterServiceData ([6daaf37](https://github.com/bcnmy/biconomy-client-sdk/commit/6daaf37855a13fa6e12fdbab16a7e980b4631475)) -* UserOpGasFields for fetching gas and gas prices from bundler (https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1) -* skipBundlerGasEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) -* fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) - - - - - - -## 2.0.0 (2023-04-07) - - -### Bug Fixes - -* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -* multisend bundle ([5f55587](https://github.com/bcnmy/biconomy-client-sdk/commit/5f55587b63c82a30652843fe619d8b891e495399)) -* optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) - - -## 1.0.0 (2023-01-03) - - -### Bug Fixes - -* optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) diff --git a/packages/common/README.md b/packages/common/README.md deleted file mode 100644 index 8876292b9..000000000 --- a/packages/common/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# `@biconomy/common` - -common utils - -methods for processing UserOperations - -## Usage - -``` -no direct usage of this package -``` diff --git a/packages/common/abis/biconomy_v1.0.0/SmartAccountFactory_v1.0.0.json b/packages/common/abis/biconomy_v1.0.0/SmartAccountFactory_v1.0.0.json deleted file mode 100644 index 6fe41a20a..000000000 --- a/packages/common/abis/biconomy_v1.0.0/SmartAccountFactory_v1.0.0.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccountFactory", - "sourceName": "contracts/smart-contract-wallet/SmartAccountFactory.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_basicImplementation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "AccountCreationWithoutIndex", - "type": "event" - }, - { - "inputs": [], - "name": "accountCreationCode", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "basicImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "deployAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "deployCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAddressForCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimalHandler", - "outputs": [ - { - "internalType": "contract DefaultCallbackHandler", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60c060405234801561001057600080fd5b50604051610f5a380380610f5a83398101604081905261002f916100de565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601d60248201527f696d706c656d656e746174696f6e2063616e6e6f74206265207a65726f000000604482015260640160405180910390fd5b6001600160a01b0381166080526040516100a2906100d1565b604051809103906000f0801580156100be573d6000803e3d6000fd5b506001600160a01b031660a0525061010e565b6105e68061097483390190565b6000602082840312156100f057600080fd5b81516001600160a01b038116811461010757600080fd5b9392505050565b60805160a05161082661014e6000396000818160c1015261056501526000818161010e015281816101b10152818161032b015261043f01526108266000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063d668bfa811610050578063d668bfa8146100e3578063da9fc1ae146100f6578063daf0dfc81461010957600080fd5b8063088924ef1461007757806331c884df146100a75780633b3cb143146100bc575b600080fd5b61008a6100853660046105fe565b610130565b6040516001600160a01b0390911681526020015b60405180910390f35b6100af6102bd565b60405161009e919061064c565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b61008a6100f13660046105fe565b6102e7565b61008a61010436600461067f565b610408565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b60008061013c84610550565b90506000818051906020012084604051602001610163929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006040518060200161018d906105d5565b601f1982820381018352601f9091011660408190526101da91906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b6040516020818303038152906040529050818151826020016000f593506001600160a01b0384166102525760405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c65640000000000000000000000000060448201526064015b60405180910390fd5b8251156102735760008060008551602087016000895af10361027357600080fd5b84866001600160a01b0316856001600160a01b03167f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f260405160405180910390a450505092915050565b6060604051806020016102cf906105d5565b601f1982820381018352601f90910116604052919050565b6000806102f384610550565b9050600060405180602001610307906105d5565b601f1982820381018352601f90910116604081905261035491906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60408051808303601f1901815282825284516020958601208584015282820196909652805180830382018152606080840183528151918601919091208751978601979097207fff0000000000000000000000000000000000000000000000000000000000000060808501523090911b6bffffffffffffffffffffffff19166081840152609583019690965260b5808301969096528051808303909601865260d5909101905250825192019190912092915050565b6000806040518060200161041b906105d5565b601f1982820381018352601f90910116604081905261046891906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60405160208183030381529060405290508051816020016000f091506001600160a01b0382166104da5760405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606401610249565b60006104e584610550565b8051909150156105095760008060008351602085016000885af10361050957600080fd5b836001600160a01b0316836001600160a01b03167f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf65760405160405180910390a35050919050565b6040516001600160a01b0380831660248301527f000000000000000000000000000000000000000000000000000000000000000016604482015260609060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663784d200b60e11b17905292915050565b61012d806106c483390190565b80356001600160a01b03811681146105f957600080fd5b919050565b6000806040838503121561061157600080fd5b61061a836105e2565b946020939093013593505050565b60005b8381101561064357818101518382015260200161062b565b50506000910152565b602081526000825180602084015261066b816040850160208701610628565b601f01601f19169190910160400192915050565b60006020828403121561069157600080fd5b61069a826105e2565b9392505050565b600083516106b3818460208801610628565b919091019182525060200191905056fe608060405234801561001057600080fd5b5060405161012d38038061012d83398101604081905261002f91610090565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e20616464726573730000604482015260640160405180910390fd5b30556100c0565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b605f806100ce6000396000f3fe608060405230543660008037600080366000845af43d6000803e8080156024573d6000f35b3d6000fdfea2646970667358221220a7977748230fa5c96134083773f708cfbe78723c07e58051ac6bd8c4877a4d5a64736f6c63430008110033a26469706673582212201fec0df9ef9e79bf19660229f5fa1cf6bbf67a01bd022c1b6866ccb255550e5764736f6c63430008110033608060405234801561001057600080fd5b506105c6806100206000396000f3fe608060405234801561001057600080fd5b506004361061007c5760003560e01c8063a3f4df7e1161005b578063a3f4df7e146100fb578063bc197c8114610144578063f23a6e6114610166578063ffa1ad741461018657600080fd5b806223de291461008157806301ffc9a71461009b578063150b7a02146100c3575b600080fd5b61009961008f3660046102a0565b5050505050505050565b005b6100ae6100a936600461034b565b6101c2565b60405190151581526020015b60405180910390f35b6100e26100d136600461037c565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016100ba565b6101376040518060400160405280601881526020017f44656661756c742043616c6c6261636b2048616e646c6572000000000000000081525081565b6040516100ba91906103eb565b6100e261015236600461047e565b63bc197c8160e01b98975050505050505050565b6100e2610174366004610518565b63f23a6e6160e01b9695505050505050565b6101376040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60006001600160e01b03198216630271189760e51b14806101f357506001600160e01b03198216630a85bd0160e11b145b8061020d57506001600160e01b031982166223de2960e01b145b8061022857506001600160e01b031982166301ffc9a760e01b145b92915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461025257600080fd5b919050565b60008083601f84011261026957600080fd5b50813567ffffffffffffffff81111561028157600080fd5b60208301915083602082850101111561029957600080fd5b9250929050565b60008060008060008060008060c0898b0312156102bc57600080fd5b6102c58961022e565b97506102d360208a0161022e565b96506102e160408a0161022e565b955060608901359450608089013567ffffffffffffffff8082111561030557600080fd5b6103118c838d01610257565b909650945060a08b013591508082111561032a57600080fd5b506103378b828c01610257565b999c989b5096995094979396929594505050565b60006020828403121561035d57600080fd5b81356001600160e01b03198116811461037557600080fd5b9392505050565b60008060008060006080868803121561039457600080fd5b61039d8661022e565b94506103ab6020870161022e565b935060408601359250606086013567ffffffffffffffff8111156103ce57600080fd5b6103da88828901610257565b969995985093965092949392505050565b600060208083528351808285015260005b81811015610418578581018301518582016040015282016103fc565b506000604082860101526040601f19601f8301168501019250505092915050565b60008083601f84011261044b57600080fd5b50813567ffffffffffffffff81111561046357600080fd5b6020830191508360208260051b850101111561029957600080fd5b60008060008060008060008060a0898b03121561049a57600080fd5b6104a38961022e565b97506104b160208a0161022e565b9650604089013567ffffffffffffffff808211156104ce57600080fd5b6104da8c838d01610439565b909850965060608b01359150808211156104f357600080fd5b6104ff8c838d01610439565b909650945060808b013591508082111561032a57600080fd5b60008060008060008060a0878903121561053157600080fd5b61053a8761022e565b95506105486020880161022e565b94506040870135935060608701359250608087013567ffffffffffffffff81111561057257600080fd5b61057e89828a01610257565b979a969950949750929593949250505056fea2646970667358221220f9bf68273e40153fec1c25026a3e3145e43e4e63c519d4413921bbc86925381c64736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c8063d668bfa811610050578063d668bfa8146100e3578063da9fc1ae146100f6578063daf0dfc81461010957600080fd5b8063088924ef1461007757806331c884df146100a75780633b3cb143146100bc575b600080fd5b61008a6100853660046105fe565b610130565b6040516001600160a01b0390911681526020015b60405180910390f35b6100af6102bd565b60405161009e919061064c565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b61008a6100f13660046105fe565b6102e7565b61008a61010436600461067f565b610408565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b60008061013c84610550565b90506000818051906020012084604051602001610163929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006040518060200161018d906105d5565b601f1982820381018352601f9091011660408190526101da91906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b6040516020818303038152906040529050818151826020016000f593506001600160a01b0384166102525760405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c65640000000000000000000000000060448201526064015b60405180910390fd5b8251156102735760008060008551602087016000895af10361027357600080fd5b84866001600160a01b0316856001600160a01b03167f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f260405160405180910390a450505092915050565b6060604051806020016102cf906105d5565b601f1982820381018352601f90910116604052919050565b6000806102f384610550565b9050600060405180602001610307906105d5565b601f1982820381018352601f90910116604081905261035491906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60408051808303601f1901815282825284516020958601208584015282820196909652805180830382018152606080840183528151918601919091208751978601979097207fff0000000000000000000000000000000000000000000000000000000000000060808501523090911b6bffffffffffffffffffffffff19166081840152609583019690965260b5808301969096528051808303909601865260d5909101905250825192019190912092915050565b6000806040518060200161041b906105d5565b601f1982820381018352601f90910116604081905261046891906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60405160208183030381529060405290508051816020016000f091506001600160a01b0382166104da5760405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606401610249565b60006104e584610550565b8051909150156105095760008060008351602085016000885af10361050957600080fd5b836001600160a01b0316836001600160a01b03167f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf65760405160405180910390a35050919050565b6040516001600160a01b0380831660248301527f000000000000000000000000000000000000000000000000000000000000000016604482015260609060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663784d200b60e11b17905292915050565b61012d806106c483390190565b80356001600160a01b03811681146105f957600080fd5b919050565b6000806040838503121561061157600080fd5b61061a836105e2565b946020939093013593505050565b60005b8381101561064357818101518382015260200161062b565b50506000910152565b602081526000825180602084015261066b816040850160208701610628565b601f01601f19169190910160400192915050565b60006020828403121561069157600080fd5b61069a826105e2565b9392505050565b600083516106b3818460208801610628565b919091019182525060200191905056fe608060405234801561001057600080fd5b5060405161012d38038061012d83398101604081905261002f91610090565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e20616464726573730000604482015260640160405180910390fd5b30556100c0565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b605f806100ce6000396000f3fe608060405230543660008037600080366000845af43d6000803e8080156024573d6000f35b3d6000fdfea2646970667358221220a7977748230fa5c96134083773f708cfbe78723c07e58051ac6bd8c4877a4d5a64736f6c63430008110033a26469706673582212201fec0df9ef9e79bf19660229f5fa1cf6bbf67a01bd022c1b6866ccb255550e5764736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/biconomy_v1.0.0/SmartAccount_v1.0.0.json b/packages/common/abis/biconomy_v1.0.0/SmartAccount_v1.0.0.json deleted file mode 100644 index 541727bee..000000000 --- a/packages/common/abis/biconomy_v1.0.0/SmartAccount_v1.0.0.json +++ /dev/null @@ -1,1682 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccount", - "sourceName": "contracts/smart-contract-wallet/SmartAccount.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "anEntryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "BaseImplementationCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotAnEntryPoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPointOrOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotSelf", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "name": "CanNotEstimateGas", - "type": "error" - }, - { - "inputs": [], - "name": "DelegateCallsOnly", - "type": "error" - }, - { - "inputs": [], - "name": "EntryPointCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "ExecutionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "HandlerCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementationAddress", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "restoredSigner", - "type": "address" - }, - { - "internalType": "address", - "name": "expectedSigner", - "type": "address" - } - ], - "name": "InvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MixedAuthFail", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleAlreadyEnabled", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "expectedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "returnedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "prevModule", - "type": "address" - } - ], - "name": "ModuleAndPrevModuleMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleCannotBeZeroOrSentinel", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleNotEnabled", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesAlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesSetupExecutionFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "gasLeft", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasRequired", - "type": "uint256" - } - ], - "name": "NotEnoughGasLeft", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCanNotBeSelf", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerProvidedIsSame", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyProtectionActivated", - "type": "error" - }, - { - "inputs": [], - "name": "TokenGasPriceFactorCanNotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TokenTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TransferToZeroAddressAttempt", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "destLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "valueLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "funcLength", - "type": "uint256" - } - ], - "name": "WrongBatchProvided", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractSignature", - "type": "bytes" - } - ], - "name": "WrongContractSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "uintS", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "contractSignatureLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "signatureLength", - "type": "uint256" - } - ], - "name": "WrongContractSignatureFormat", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "payment", - "type": "uint256" - } - ], - "name": "AccountHandlePayment", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousHandler", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "ChangedFallbackHandler", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "DisabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_scw", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_oldEOA", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_newEOA", - "type": "address" - } - ], - "name": "EOAChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "EnabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "ModuleTransaction", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "SmartAccountReceivedNativeToken", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "addDeposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "checkSignatures", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevModule", - "type": "address" - }, - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "disableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domainSeparator", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "enableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - } - ], - "internalType": "struct Transaction", - "name": "_tx", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "internalType": "struct FeeRefund", - "name": "refundInfo", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "encodeTransactionData", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "entryPoint", - "outputs": [ - { - "internalType": "contract IEntryPoint", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - } - ], - "internalType": "struct Transaction", - "name": "_tx", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "internalType": "struct FeeRefund", - "name": "refundInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "execTransaction", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModuleReturnData", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - } - ], - "internalType": "struct Transaction", - "name": "_tx", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "internalType": "struct FeeRefund", - "name": "refundInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "execTransaction_S6W", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatchCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatchCall_4by", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "executeCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "executeCall_s1m", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getChainId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFallbackHandler", - "outputs": [ - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getImplementation", - "outputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "start", - "type": "address" - }, - { - "internalType": "uint256", - "name": "pageSize", - "type": "uint256" - } - ], - "name": "getModulesPaginated", - "outputs": [ - { - "internalType": "address[]", - "name": "array", - "type": "address[]" - }, - { - "internalType": "address", - "name": "next", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "batchId", - "type": "uint256" - } - ], - "name": "getNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "getTransactionHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "gasUsed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "name": "handlePaymentRevert", - "outputs": [ - { - "internalType": "uint256", - "name": "requiredGas", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "isModuleEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - } - ], - "name": "isValidSignature", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "pullTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "requiredTxGas", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "setFallbackHandler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "setOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "updateImplementation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validateUserOp", - "outputs": [ - { - "internalType": "uint256", - "name": "validationData", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdrawDepositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60e06040523480156200001157600080fd5b5060405162003915380380620039158339810160408190526200003491620000a1565b60016031553060c052603280546001600160a01b03191673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1790556001600160a01b0381166200008b5760405163091748f960e21b815260040160405180910390fd5b6001600160a01b03166080524660a052620000d3565b600060208284031215620000b457600080fd5b81516001600160a01b0381168114620000cc57600080fd5b9392505050565b60805160a05160c0516137e86200012d60003960006102af015260006104ed01526000818161078701528181610dcf01528181610f2c01528181610fd901528181611935015281816119c6015261204f01526137e86000f3fe6080604052600436106102a05760003560e01c80638da5cb5b1161016e578063c399ec88116100cb578063f08a03231161007f578063f698da2511610064578063f698da251461088e578063fc7d3d79146108f7578063ffa1ad741461090a5761031c565b8063f08a03231461084e578063f09a40161461086e5761031c565b8063cc2f8452116100b0578063cc2f8452146107e0578063e009cfde1461080e578063ed516d511461082e5761031c565b8063c399ec88146107ab578063c4ca3a9c146107c05761031c565b8063aaf10f4211610122578063ac85dca711610107578063ac85dca714610743578063affed0e014610763578063b0d691fe146107785761031c565b8063aaf10f421461070f578063abc1b745146107235761031c565b80639e5d4c49116101535780639e5d4c49146106af578063a18f51e5146106cf578063a9059cbb146106ef5761031c565b80638da5cb5b1461066f578063912ccaa31461068f5761031c565b80633a871cdd1161021c5780635229073f116101d0578063610b5925116101b5578063610b5925146105f45780637455ce3c14610614578063856dfd99146106275761031c565b80635229073f146105995780635c0ba299146105c75761031c565b8063468721a711610201578063468721a71461055e5780634a58db191461057e5780634d44560d146105865761031c565b80633a871cdd146105115780633d46b819146105315761031c565b806313af4035116102735780631626ba7e116102585780631626ba7e146104855780632d9ad53d146104be5780633408e470146104de5761031c565b806313af40351461042a578063141a468c1461044a5761031c565b80610772146103825780618f2d146103a457806301ffc9a7146103c4578063025b22bc1461040a5761031c565b3661031c576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102ee57604051633c97166560e21b815260040160405180910390fd5b604051349033907ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce0290600090a3005b34801561032857600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d480548061035357005b36600080373360601b365260008060143601600080855af190503d6000803e8061037c573d6000fd5b503d6000f35b34801561038e57600080fd5b506103a261039d366004612ab2565b610953565b005b3480156103b057600080fd5b506103a26103bf366004612b53565b6109a2565b3480156103d057600080fd5b506103f56103df366004612c03565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b34801561041657600080fd5b506103a2610425366004612c20565b610ab3565b34801561043657600080fd5b506103a2610445366004612c20565b610bbb565b34801561045657600080fd5b50610477610465366004612c3d565b60336020526000908152604090205481565b604051908152602001610401565b34801561049157600080fd5b506104a56104a0366004612d22565b610cbd565b6040516001600160e01b03199091168152602001610401565b3480156104ca57600080fd5b506103f56104d9366004612c20565b610d8a565b3480156104ea57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610477565b34801561051d57600080fd5b5061047761052c366004612d69565b610dc2565b34801561053d57600080fd5b5061047761054c366004612c3d565b60009081526033602052604090205490565b34801561056a57600080fd5b506103f5610579366004612dcc565b610e2b565b6103a2610f2a565b6103a2610594366004612e36565b610faa565b3480156105a557600080fd5b506105b96105b4366004612dcc565b611060565b604051610401929190612eb2565b3480156105d357600080fd5b506105e76105e2366004612fad565b611096565b6040516104019190613005565b34801561060057600080fd5b506103a261060f366004612c20565b6111f0565b6103f5610622366004613018565b611316565b34801561063357600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4545b6040516001600160a01b039091168152602001610401565b34801561067b57600080fd5b50603254610657906001600160a01b031681565b34801561069b57600080fd5b506103a26106aa366004612b53565b611554565b3480156106bb57600080fd5b506103a26106ca366004612ab2565b611562565b3480156106db57600080fd5b506104776106ea36600461308d565b61156e565b3480156106fb57600080fd5b506103a261070a366004612e36565b611707565b34801561071b57600080fd5b503054610657565b34801561072f57600080fd5b5061047761073e3660046130eb565b6117a5565b34801561074f57600080fd5b506103a261075e3660046131b3565b611878565b34801561076f57600080fd5b5061047761190e565b34801561078457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610657565b3480156107b757600080fd5b506104776119a6565b3480156107cc57600080fd5b506104776107db3660046131f4565b6119f5565b3480156107ec57600080fd5b506108006107fb366004612e36565b611a6e565b604051610401929190613265565b34801561081a57600080fd5b506103a26108293660046132c2565b611b67565b34801561083a57600080fd5b506103a2610849366004612d22565b611c99565b34801561085a57600080fd5b506103a2610869366004612c20565b611f2b565b34801561087a57600080fd5b506103a26108893660046132c2565b611fa2565b34801561089a57600080fd5b50610477604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6103f5610905366004613018565b612037565b34801561091657600080fd5b506105e76040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b61095b612044565b61099c848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b50505050565b6109aa612044565b8415806109b75750848314155b806109c25750828114155b156109f657604051630a0c0a9160e31b81526004810186905260248101849052604481018290526064015b60405180910390fd5b60005b85811015610aaa57610aa2878783818110610a1657610a166132fb565b9050602002016020810190610a2b9190612c20565b868684818110610a3d57610a3d6132fb565b90506020020135858585818110610a5657610a566132fb565b9050602002810190610a689190613311565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b6001016109f9565b50505050505050565b6032546001600160a01b03163314801590610ace5750333014155b15610aee576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610b445760405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f0000000000000000000060448201526064016109ed565b6001600160a01b0381163b610b7757604051630c76093760e01b81526001600160a01b03821660048201526024016109ed565b308054908290556040516001600160a01b0380841691908316907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a35050565b6032546001600160a01b03163314801590610bd65750333014155b15610bf6576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610c1d57604051639b15e16f60e01b815260040160405180910390fd5b306001600160a01b03821603610c46576040516375b4d24760e01b815260040160405180910390fd5b6032546001600160a01b0390811690821603610c7557604051638a95d3fb60e01b815260040160405180910390fd5b60328054908290556040516001600160a01b0391821691831690829030907ff2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd490600090a45050565b6032546000906001600160a01b03163b15610d4c57603254604051630b135d3f60e11b81526001600160a01b0390911690631626ba7e90610d049086908690600401613358565b602060405180830381865afa158015610d21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d459190613371565b9050610d84565b610d5683836120c8565b6032546001600160a01b03918216911603610d795750630b135d3f60e11b610d84565b506001600160e01b03195b92915050565b600060016001600160a01b03831614801590610d845750506001600160a01b0390811660009081526020819052604090205416151590565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e0f57604051635dac3db760e11b81523360048201526024016109ed565b610e1984846120ec565b9050610e24826122dd565b9392505050565b60003360011480610e525750336000908152602081905260409020546001600160a01b0316155b15610e72576040516321ac7c5f60e01b81523360048201526024016109ed565b610e7f858585855a612328565b90508015610ef6577f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da3386868686604051610ebe9594939291906133c6565b60405180910390a160405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a2610f22565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024016000604051808303818588803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b5050505050565b6032546001600160a01b03163314610fd75760405163d4ed9a1760e01b81523360048201526024016109ed565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050505050565b6000606061107086868686610e2b565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060007fda033865d68bf4a40a5a7cb4159a99e33dba8569e65ea3e38222eb12d9e66eee60001b856000015186604001518760600151805190602001208860200151896080015189600001518a602001518b604001518c606001518d608001518d6040516020016111139c9b9a99989796959493929190613411565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b611193604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040517fff0000000000000000000000000000000000000000000000000000000000000093841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509392505050565b6111f861242f565b6001600160a01b038116158061121757506001600160a01b0381166001145b156112405760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b0381811660009081526020819052604090205416156112845760405163b29d459560e01b81526001600160a01b03821660048201526024016109ed565b600060208181527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b0385811680865260408087208054939094166001600160a01b03199384161790935560019095528254168417909155519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440910160405180910390a150565b600060026031540361133b57604051637465d9d160e01b815260040160405180910390fd5b600260315560005a6001600090815260336020527f10f6f77027d502f219862b0303542eb5dd005b06fa23ff4d1775aaa45bbf94778054929350909182916113959189918991908561138c836134a0565b91905055611096565b80516020820120925090506113aa8286611c99565b506113d9603f60068860800151901b6113c391906134b9565b60808801516113d4906109c46134db565b612451565b6113e5906101f46134db565b5a1015611444575a611416603f60068960800151901b61140591906134b9565b60808901516113d4906109c46134db565b611422906101f46134db565b604051633b4daac960e01b8152600481019290925260248201526044016109ed565b61148486600001518760400151886060015189602001518960200151600014611471578a60800151612328565b6109c45a61147f91906134ee565b612328565b92508215801561149657506080860151155b80156114a457506020850151155b156114dd5760808601516020860151604051631061f87f60e31b81526004810192909252602482015283151560448201526064016109ed565b60008560200151600014611545576115145a6114f990856134ee565b8751602089015160408a015160608b015160808c0151612467565b905080827f3fd74c38c9f1b6f0499c6d0128fbf77a796dbacc7eda0369b13006dc977bb56b60405160405180910390a35b50506001603155509392505050565b6110588686868686866109a2565b61099c84848484610953565b6000836000036115c05760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420746f6b656e4761735072696365466163746f72000000000060448201526064016109ed565b60005a905060006001600160a01b038416156115dc57836115de565b325b90506001600160a01b0385166116615760003a88106115fd573a6115ff565b875b6116098a8c6134db565b6116139190613501565b9050600080600080600085875af190508061165a5760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b50506116c9565b6000868861166f8b8d6134db565b6116799190613501565b61168391906134b9565b9050611690868383612592565b6116c75760405163190eecf360e31b81526001600160a01b03808816600483015283166024820152604481018290526064016109ed565b505b5a82039250826040516020016116e191815260200190565b60408051601f198184030181529082905262461bcd60e51b82526109ed91600401613005565b6032546001600160a01b031633146117345760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b03821661175b576040516309293b1960e41b815260040160405180910390fd5b600080600080600085875af19050806117a05760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b505050565b6000806040518060a001604052808f6001600160a01b031681526020018b60018111156117d4576117d461338e565b81526020018e81526020018d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081018b90526040805160a0810182528b81529182018a905281018890526001600160a01b0380881660608301528616608082015290915061185d828286611096565b80519060200120925050509c9b505050505050505050505050565b6032546001600160a01b031633146118a55760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b0382166118cc576040516309293b1960e41b815260040160405180910390fd5b6118d7838383612592565b6117a05760405163190eecf360e31b81526001600160a01b03808516600483015283166024820152604481018290526064016109ed565b604051631aab3f0d60e11b8152306004820152600060248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044015b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190613518565b905090565b6040516370a0823160e01b81523060048201526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401611960565b6000805a9050611a3e878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050505a612328565b611a5b57604051632b3f6d1160e21b815260040160405180910390fd5b5a604080519183036020830152016116e1565b606060008267ffffffffffffffff811115611a8b57611a8b612c56565b604051908082528060200260200182016040528015611ab4578160200160208202803683370190505b506001600160a01b0380861660009081526020819052604081205492945091165b6001600160a01b03811615801590611af757506001600160a01b038116600114155b8015611b0257508482105b15611b595780848381518110611b1a57611b1a6132fb565b6001600160a01b039283166020918202929092018101919091529181166000908152918290526040909120541681611b51816134a0565b925050611ad5565b908352919491935090915050565b611b6f61242f565b6001600160a01b0381161580611b8e57506001600160a01b0381166001145b15611bb75760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b03828116600090815260208190526040902054811690821614611c1f576001600160a01b0382811660008181526020819052604090819020549051633103525b60e21b815284841660048201529216602483015260448201526064016109ed565b6001600160a01b03818116600081815260208181526040808320805488871685528285208054919097166001600160a01b03199182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276910160405180910390a15050565b604181511015611ceb5760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207369676e617475726573206c656e6774680000000000000060448201526064016109ed565b600080600080611d0e856020810151604082015160419092015160ff1692909190565b9195509350915060ff8416600003611e535750816041821015611d55576040516338a245ff60e11b81526004810183905260006024820181905260448201526064016109ed565b6020828601810151865190918290611d6e9086906134db565b611d7891906134db565b1115611dab5785516040516338a245ff60e11b8152600481018590526024810183905260448101919091526064016109ed565b604051630b135d3f60e11b808252878501602001916001600160a01b03851690631626ba7e90611de1908c908690600401613358565b602060405180830381865afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e229190613371565b6001600160e01b03191614611e4c578060405163605d348960e01b81526004016109ed9190613005565b5050611ee6565b601e8460ff161115611ed657611ece611e6d600486613531565b8484611ec68a6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9291906126e3565b509050611ee6565b611ee2868585856126e3565b5090505b6032546001600160a01b03828116911614611058576032546040516310b5d43760e21b81526001600160a01b03808416600483015290911660248201526044016109ed565b611f3361242f565b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d454611f5e826127a7565b816001600160a01b0316816001600160a01b03167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c60405160405180910390a35050565b6032546001600160a01b031615611fce576040516393360fbf60e01b81523060048201526024016109ed565b6001600160a01b038216611ff557604051639b15e16f60e01b815260040160405180910390fd5b603280546001600160a01b0319166001600160a01b038416179055612019816127a7565b6120336000604051806020016040528060008152506127f2565b5050565b6000610f22848484611316565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061208857506032546001600160a01b03163314155b156120a8576040516332dbd3c760e11b81523360048201526024016109ed565b565b60008082516020840185875af16040513d6000823e81610fa3573d81fd5b60008060006120d785856128bc565b915091506120e481612901565b509392505050565b600036816120fd6060860186613311565b90925090508015612204576000612117600482848661354a565b61212091613574565b90506361a2b3b760e01b6001600160e01b0319821601612202576000808061214b856004818961354a565b81019061215891906135a4565b6001600160a01b03808416600090815260208190526040902054939650919450925016156121fe57604051631179c1f560e11b81526001600160a01b038416906322f383ea906121ae908c908c90600401613662565b6020604051808303816000875af11580156121cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f19190613518565b9650505050505050610d84565b5050505b505b600061225d856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506122ad612270610140880188613311565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085939250506120c89050565b6032546001600160a01b039081169116146122ce5760019350505050610d84565b50600095945050505050565b50565b80156122da5760405133906000199083906000818181858888f193505050503d806000811461099c576040519150601f19603f3d011682016040523d82523d6000602084013e61099c565b6000600183600181111561233e5761233e61338e565b03612356576000808551602087018986f49050612366565b600080855160208701888a87f190505b80156123cb578360405161237a919061377b565b604051809103902085876001600160a01b03167f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee86866040516123be929190613797565b60405180910390a4612426565b836040516123d9919061377b565b604051809103902085876001600160a01b03167f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a868660405161241d929190613797565b60405180910390a45b95945050505050565b3330146120a8576040516301478e3360e21b81523360048201526024016109ed565b60008183116124605781610e24565b5090919050565b60008360000361248a5760405163653f35a360e01b815260040160405180910390fd5b60006001600160a01b038316156124a157826124a3565b325b90506001600160a01b038416612523573a86106124c0573a6124c2565b855b6124cc888a6134db565b6124d69190613501565b9150600080600080600086865af190508061251d5760405163190eecf360e31b8152600060048201526001600160a01b0383166024820152604481018490526064016109ed565b50612587565b848661252f898b6134db565b6125399190613501565b61254391906134b9565b9150612550848284612592565b6125875760405163190eecf360e31b81526001600160a01b03808616600483015282166024820152604481018390526064016109ed565b509695505050505050565b60006001600160a01b0384166125ea5760405162461bcd60e51b815260206004820152601d60248201527f746f6b656e2063616e206e6f74206265207a65726f206164647265737300000060448201526064016109ed565b6000846001600160a01b03163b116126445760405162461bcd60e51b815260206004820152601c60248201527f746f6b656e20636f6e747261637420646f65736e27742065786973740000000060448201526064016109ed565b604080516001600160a01b03851660248201526044808201859052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b178152825160009182896127105a03f13d80156126c657602081146126ce57600093506126d9565b8193506126d9565b600051158215171593505b5050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561271a575060009050600361279e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561276e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127975760006001925092505061279e565b9150600090505b94509492505050565b6001600160a01b0381166127ce5760405163dd449f5f60e01b815260040160405180910390fd5b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d455565b600160009081526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d546001600160a01b0316156128455760405163df8cc4e360e01b815260040160405180910390fd5b600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556001600160a01b038216156120335761289f8260008360015a612328565b6120335760405163032e3a3960e51b815260040160405180910390fd5b60008082516041036128f25760208301516040840151606085015160001a6128e6878285856126e3565b945094505050506128fa565b506000905060025b9250929050565b60008160048111156129155761291561338e565b0361291d5750565b60018160048111156129315761293161338e565b0361297e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109ed565b60028160048111156129925761299261338e565b036129df5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109ed565b60038160048111156129f3576129f361338e565b036122da5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109ed565b6001600160a01b03811681146122da57600080fd5b8035612a6b81612a4b565b919050565b60008083601f840112612a8257600080fd5b50813567ffffffffffffffff811115612a9a57600080fd5b6020830191508360208285010111156128fa57600080fd5b60008060008060608587031215612ac857600080fd5b8435612ad381612a4b565b935060208501359250604085013567ffffffffffffffff811115612af657600080fd5b612b0287828801612a70565b95989497509550505050565b60008083601f840112612b2057600080fd5b50813567ffffffffffffffff811115612b3857600080fd5b6020830191508360208260051b85010111156128fa57600080fd5b60008060008060008060608789031215612b6c57600080fd5b863567ffffffffffffffff80821115612b8457600080fd5b612b908a838b01612b0e565b90985096506020890135915080821115612ba957600080fd5b612bb58a838b01612b0e565b90965094506040890135915080821115612bce57600080fd5b50612bdb89828a01612b0e565b979a9699509497509295939492505050565b6001600160e01b0319811681146122da57600080fd5b600060208284031215612c1557600080fd5b8135610e2481612bed565b600060208284031215612c3257600080fd5b8135610e2481612a4b565b600060208284031215612c4f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612c8f57612c8f612c56565b60405290565b600082601f830112612ca657600080fd5b813567ffffffffffffffff80821115612cc157612cc1612c56565b604051601f8301601f19908116603f01168101908282118183101715612ce957612ce9612c56565b81604052838152866020858801011115612d0257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612d3557600080fd5b82359150602083013567ffffffffffffffff811115612d5357600080fd5b612d5f85828601612c95565b9150509250929050565b600080600060608486031215612d7e57600080fd5b833567ffffffffffffffff811115612d9557600080fd5b84016101608187031215612da857600080fd5b95602085013595506040909401359392505050565b803560028110612a6b57600080fd5b60008060008060808587031215612de257600080fd5b8435612ded81612a4b565b935060208501359250604085013567ffffffffffffffff811115612e1057600080fd5b612e1c87828801612c95565b925050612e2b60608601612dbd565b905092959194509250565b60008060408385031215612e4957600080fd5b8235612e5481612a4b565b946020939093013593505050565b60005b83811015612e7d578181015183820152602001612e65565b50506000910152565b60008151808452612e9e816020860160208601612e62565b601f01601f19169290920160200192915050565b8215158152604060208201526000610f226040830184612e86565b600060a08284031215612edf57600080fd5b612ee7612c6c565b90508135612ef481612a4b565b8152612f0260208301612dbd565b602082015260408201356040820152606082013567ffffffffffffffff811115612f2b57600080fd5b612f3784828501612c95565b6060830152506080820135608082015292915050565b600060a08284031215612f5f57600080fd5b612f67612c6c565b90508135815260208201356020820152604082013560408201526060820135612f8f81612a4b565b60608201526080820135612fa281612a4b565b608082015292915050565b600080600060e08486031215612fc257600080fd5b833567ffffffffffffffff811115612fd957600080fd5b612fe586828701612ecd565b935050612ff58560208601612f4d565b915060c084013590509250925092565b602081526000610e246020830184612e86565b600080600060e0848603121561302d57600080fd5b833567ffffffffffffffff8082111561304557600080fd5b61305187838801612ecd565b94506130608760208801612f4d565b935060c086013591508082111561307657600080fd5b5061308386828701612c95565b9150509250925092565b60008060008060008060c087890312156130a657600080fd5b8635955060208701359450604087013593506060870135925060808701356130cd81612a4b565b915060a08701356130dd81612a4b565b809150509295509295509295565b6000806000806000806000806000806000806101608d8f03121561310e57600080fd5b6131188d35612a4b565b8c359b5060208d01359a5067ffffffffffffffff60408e0135111561313c57600080fd5b61314c8e60408f01358f01612a70565b909a50985061315d60608e01612dbd565b975060808d0135965060a08d0135955060c08d0135945060e08d013593506101008d013561318a81612a4b565b92506131996101208e01612a60565b91506101408d013590509295989b509295989b509295989b565b6000806000606084860312156131c857600080fd5b83356131d381612a4b565b925060208401356131e381612a4b565b929592945050506040919091013590565b60008060008060006080868803121561320c57600080fd5b853561321781612a4b565b945060208601359350604086013567ffffffffffffffff81111561323a57600080fd5b61324688828901612a70565b9094509250613259905060608701612dbd565b90509295509295909350565b604080825283519082018190526000906020906060840190828701845b828110156132a75781516001600160a01b031684529284019290840190600101613282565b5050506001600160a01b039490941692019190915250919050565b600080604083850312156132d557600080fd5b82356132e081612a4b565b915060208301356132f081612a4b565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332857600080fd5b83018035915067ffffffffffffffff82111561334357600080fd5b6020019150368190038213156128fa57600080fd5b828152604060208201526000610f226040830184612e86565b60006020828403121561338357600080fd5b8151610e2481612bed565b634e487b7160e01b600052602160045260246000fd5b600281106133c257634e487b7160e01b600052602160045260246000fd5b9052565b60006001600160a01b03808816835280871660208401525084604083015260a060608301526133f860a0830185612e86565b905061340760808301846133a4565b9695505050505050565b6000610180820190508d82526001600160a01b03808e1660208401528c60408401528b6060840152613446608084018c6133a4565b8960a08401528860c08401528760e08401528661010084015280861661012084015280851661014084015250826101608301529d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016134b2576134b261348a565b5060010190565b6000826134d657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d8457610d8461348a565b81810381811115610d8457610d8461348a565b8082028115828204841417610d8457610d8461348a565b60006020828403121561352a57600080fd5b5051919050565b60ff8281168282160390811115610d8457610d8461348a565b6000808585111561355a57600080fd5b8386111561356757600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561359c5780818660040360031b1b83161692505b505092915050565b6000806000606084860312156135b957600080fd5b83356135c481612a4b565b925060208401359150604084013567ffffffffffffffff8111156135e757600080fd5b61308386828701612c95565b6000808335601e1984360301811261360a57600080fd5b830160208101925035905067ffffffffffffffff81111561362a57600080fd5b8036038213156128fa57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526136836040820161367685612a60565b6001600160a01b03169052565b60208301356060820152600061369c60408501856135f3565b6101608060808601526136b46101a086018385613639565b92506136c360608801886135f3565b9250603f19808786030160a08801526136dd858584613639565b9450608089013560c088015260a089013560e0880152610100935060c089013584880152610120915060e089013582880152610140848a013581890152613726838b018b6135f3565b9550925081888703018489015261373e868685613639565b955061374c818b018b6135f3565b955093505080878603016101808801525050613769838383613639565b93505050508260208301529392505050565b6000825161378d818460208701612e62565b9190910192915050565b604081016137a582856133a4565b826020830152939250505056fea26469706673582212206d38de10695d463253620f7bec76e681851e44f22392d864735b57ecaf843b1d64736f6c63430008110033", - "deployedBytecode": "0x6080604052600436106102a05760003560e01c80638da5cb5b1161016e578063c399ec88116100cb578063f08a03231161007f578063f698da2511610064578063f698da251461088e578063fc7d3d79146108f7578063ffa1ad741461090a5761031c565b8063f08a03231461084e578063f09a40161461086e5761031c565b8063cc2f8452116100b0578063cc2f8452146107e0578063e009cfde1461080e578063ed516d511461082e5761031c565b8063c399ec88146107ab578063c4ca3a9c146107c05761031c565b8063aaf10f4211610122578063ac85dca711610107578063ac85dca714610743578063affed0e014610763578063b0d691fe146107785761031c565b8063aaf10f421461070f578063abc1b745146107235761031c565b80639e5d4c49116101535780639e5d4c49146106af578063a18f51e5146106cf578063a9059cbb146106ef5761031c565b80638da5cb5b1461066f578063912ccaa31461068f5761031c565b80633a871cdd1161021c5780635229073f116101d0578063610b5925116101b5578063610b5925146105f45780637455ce3c14610614578063856dfd99146106275761031c565b80635229073f146105995780635c0ba299146105c75761031c565b8063468721a711610201578063468721a71461055e5780634a58db191461057e5780634d44560d146105865761031c565b80633a871cdd146105115780633d46b819146105315761031c565b806313af4035116102735780631626ba7e116102585780631626ba7e146104855780632d9ad53d146104be5780633408e470146104de5761031c565b806313af40351461042a578063141a468c1461044a5761031c565b80610772146103825780618f2d146103a457806301ffc9a7146103c4578063025b22bc1461040a5761031c565b3661031c576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102ee57604051633c97166560e21b815260040160405180910390fd5b604051349033907ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce0290600090a3005b34801561032857600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d480548061035357005b36600080373360601b365260008060143601600080855af190503d6000803e8061037c573d6000fd5b503d6000f35b34801561038e57600080fd5b506103a261039d366004612ab2565b610953565b005b3480156103b057600080fd5b506103a26103bf366004612b53565b6109a2565b3480156103d057600080fd5b506103f56103df366004612c03565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b34801561041657600080fd5b506103a2610425366004612c20565b610ab3565b34801561043657600080fd5b506103a2610445366004612c20565b610bbb565b34801561045657600080fd5b50610477610465366004612c3d565b60336020526000908152604090205481565b604051908152602001610401565b34801561049157600080fd5b506104a56104a0366004612d22565b610cbd565b6040516001600160e01b03199091168152602001610401565b3480156104ca57600080fd5b506103f56104d9366004612c20565b610d8a565b3480156104ea57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610477565b34801561051d57600080fd5b5061047761052c366004612d69565b610dc2565b34801561053d57600080fd5b5061047761054c366004612c3d565b60009081526033602052604090205490565b34801561056a57600080fd5b506103f5610579366004612dcc565b610e2b565b6103a2610f2a565b6103a2610594366004612e36565b610faa565b3480156105a557600080fd5b506105b96105b4366004612dcc565b611060565b604051610401929190612eb2565b3480156105d357600080fd5b506105e76105e2366004612fad565b611096565b6040516104019190613005565b34801561060057600080fd5b506103a261060f366004612c20565b6111f0565b6103f5610622366004613018565b611316565b34801561063357600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4545b6040516001600160a01b039091168152602001610401565b34801561067b57600080fd5b50603254610657906001600160a01b031681565b34801561069b57600080fd5b506103a26106aa366004612b53565b611554565b3480156106bb57600080fd5b506103a26106ca366004612ab2565b611562565b3480156106db57600080fd5b506104776106ea36600461308d565b61156e565b3480156106fb57600080fd5b506103a261070a366004612e36565b611707565b34801561071b57600080fd5b503054610657565b34801561072f57600080fd5b5061047761073e3660046130eb565b6117a5565b34801561074f57600080fd5b506103a261075e3660046131b3565b611878565b34801561076f57600080fd5b5061047761190e565b34801561078457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610657565b3480156107b757600080fd5b506104776119a6565b3480156107cc57600080fd5b506104776107db3660046131f4565b6119f5565b3480156107ec57600080fd5b506108006107fb366004612e36565b611a6e565b604051610401929190613265565b34801561081a57600080fd5b506103a26108293660046132c2565b611b67565b34801561083a57600080fd5b506103a2610849366004612d22565b611c99565b34801561085a57600080fd5b506103a2610869366004612c20565b611f2b565b34801561087a57600080fd5b506103a26108893660046132c2565b611fa2565b34801561089a57600080fd5b50610477604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6103f5610905366004613018565b612037565b34801561091657600080fd5b506105e76040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b61095b612044565b61099c848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b50505050565b6109aa612044565b8415806109b75750848314155b806109c25750828114155b156109f657604051630a0c0a9160e31b81526004810186905260248101849052604481018290526064015b60405180910390fd5b60005b85811015610aaa57610aa2878783818110610a1657610a166132fb565b9050602002016020810190610a2b9190612c20565b868684818110610a3d57610a3d6132fb565b90506020020135858585818110610a5657610a566132fb565b9050602002810190610a689190613311565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b6001016109f9565b50505050505050565b6032546001600160a01b03163314801590610ace5750333014155b15610aee576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610b445760405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f0000000000000000000060448201526064016109ed565b6001600160a01b0381163b610b7757604051630c76093760e01b81526001600160a01b03821660048201526024016109ed565b308054908290556040516001600160a01b0380841691908316907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a35050565b6032546001600160a01b03163314801590610bd65750333014155b15610bf6576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610c1d57604051639b15e16f60e01b815260040160405180910390fd5b306001600160a01b03821603610c46576040516375b4d24760e01b815260040160405180910390fd5b6032546001600160a01b0390811690821603610c7557604051638a95d3fb60e01b815260040160405180910390fd5b60328054908290556040516001600160a01b0391821691831690829030907ff2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd490600090a45050565b6032546000906001600160a01b03163b15610d4c57603254604051630b135d3f60e11b81526001600160a01b0390911690631626ba7e90610d049086908690600401613358565b602060405180830381865afa158015610d21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d459190613371565b9050610d84565b610d5683836120c8565b6032546001600160a01b03918216911603610d795750630b135d3f60e11b610d84565b506001600160e01b03195b92915050565b600060016001600160a01b03831614801590610d845750506001600160a01b0390811660009081526020819052604090205416151590565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e0f57604051635dac3db760e11b81523360048201526024016109ed565b610e1984846120ec565b9050610e24826122dd565b9392505050565b60003360011480610e525750336000908152602081905260409020546001600160a01b0316155b15610e72576040516321ac7c5f60e01b81523360048201526024016109ed565b610e7f858585855a612328565b90508015610ef6577f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da3386868686604051610ebe9594939291906133c6565b60405180910390a160405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a2610f22565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024016000604051808303818588803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b5050505050565b6032546001600160a01b03163314610fd75760405163d4ed9a1760e01b81523360048201526024016109ed565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050505050565b6000606061107086868686610e2b565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060007fda033865d68bf4a40a5a7cb4159a99e33dba8569e65ea3e38222eb12d9e66eee60001b856000015186604001518760600151805190602001208860200151896080015189600001518a602001518b604001518c606001518d608001518d6040516020016111139c9b9a99989796959493929190613411565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b611193604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040517fff0000000000000000000000000000000000000000000000000000000000000093841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509392505050565b6111f861242f565b6001600160a01b038116158061121757506001600160a01b0381166001145b156112405760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b0381811660009081526020819052604090205416156112845760405163b29d459560e01b81526001600160a01b03821660048201526024016109ed565b600060208181527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b0385811680865260408087208054939094166001600160a01b03199384161790935560019095528254168417909155519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440910160405180910390a150565b600060026031540361133b57604051637465d9d160e01b815260040160405180910390fd5b600260315560005a6001600090815260336020527f10f6f77027d502f219862b0303542eb5dd005b06fa23ff4d1775aaa45bbf94778054929350909182916113959189918991908561138c836134a0565b91905055611096565b80516020820120925090506113aa8286611c99565b506113d9603f60068860800151901b6113c391906134b9565b60808801516113d4906109c46134db565b612451565b6113e5906101f46134db565b5a1015611444575a611416603f60068960800151901b61140591906134b9565b60808901516113d4906109c46134db565b611422906101f46134db565b604051633b4daac960e01b8152600481019290925260248201526044016109ed565b61148486600001518760400151886060015189602001518960200151600014611471578a60800151612328565b6109c45a61147f91906134ee565b612328565b92508215801561149657506080860151155b80156114a457506020850151155b156114dd5760808601516020860151604051631061f87f60e31b81526004810192909252602482015283151560448201526064016109ed565b60008560200151600014611545576115145a6114f990856134ee565b8751602089015160408a015160608b015160808c0151612467565b905080827f3fd74c38c9f1b6f0499c6d0128fbf77a796dbacc7eda0369b13006dc977bb56b60405160405180910390a35b50506001603155509392505050565b6110588686868686866109a2565b61099c84848484610953565b6000836000036115c05760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420746f6b656e4761735072696365466163746f72000000000060448201526064016109ed565b60005a905060006001600160a01b038416156115dc57836115de565b325b90506001600160a01b0385166116615760003a88106115fd573a6115ff565b875b6116098a8c6134db565b6116139190613501565b9050600080600080600085875af190508061165a5760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b50506116c9565b6000868861166f8b8d6134db565b6116799190613501565b61168391906134b9565b9050611690868383612592565b6116c75760405163190eecf360e31b81526001600160a01b03808816600483015283166024820152604481018290526064016109ed565b505b5a82039250826040516020016116e191815260200190565b60408051601f198184030181529082905262461bcd60e51b82526109ed91600401613005565b6032546001600160a01b031633146117345760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b03821661175b576040516309293b1960e41b815260040160405180910390fd5b600080600080600085875af19050806117a05760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b505050565b6000806040518060a001604052808f6001600160a01b031681526020018b60018111156117d4576117d461338e565b81526020018e81526020018d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081018b90526040805160a0810182528b81529182018a905281018890526001600160a01b0380881660608301528616608082015290915061185d828286611096565b80519060200120925050509c9b505050505050505050505050565b6032546001600160a01b031633146118a55760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b0382166118cc576040516309293b1960e41b815260040160405180910390fd5b6118d7838383612592565b6117a05760405163190eecf360e31b81526001600160a01b03808516600483015283166024820152604481018290526064016109ed565b604051631aab3f0d60e11b8152306004820152600060248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044015b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190613518565b905090565b6040516370a0823160e01b81523060048201526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401611960565b6000805a9050611a3e878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050505a612328565b611a5b57604051632b3f6d1160e21b815260040160405180910390fd5b5a604080519183036020830152016116e1565b606060008267ffffffffffffffff811115611a8b57611a8b612c56565b604051908082528060200260200182016040528015611ab4578160200160208202803683370190505b506001600160a01b0380861660009081526020819052604081205492945091165b6001600160a01b03811615801590611af757506001600160a01b038116600114155b8015611b0257508482105b15611b595780848381518110611b1a57611b1a6132fb565b6001600160a01b039283166020918202929092018101919091529181166000908152918290526040909120541681611b51816134a0565b925050611ad5565b908352919491935090915050565b611b6f61242f565b6001600160a01b0381161580611b8e57506001600160a01b0381166001145b15611bb75760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b03828116600090815260208190526040902054811690821614611c1f576001600160a01b0382811660008181526020819052604090819020549051633103525b60e21b815284841660048201529216602483015260448201526064016109ed565b6001600160a01b03818116600081815260208181526040808320805488871685528285208054919097166001600160a01b03199182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276910160405180910390a15050565b604181511015611ceb5760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207369676e617475726573206c656e6774680000000000000060448201526064016109ed565b600080600080611d0e856020810151604082015160419092015160ff1692909190565b9195509350915060ff8416600003611e535750816041821015611d55576040516338a245ff60e11b81526004810183905260006024820181905260448201526064016109ed565b6020828601810151865190918290611d6e9086906134db565b611d7891906134db565b1115611dab5785516040516338a245ff60e11b8152600481018590526024810183905260448101919091526064016109ed565b604051630b135d3f60e11b808252878501602001916001600160a01b03851690631626ba7e90611de1908c908690600401613358565b602060405180830381865afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e229190613371565b6001600160e01b03191614611e4c578060405163605d348960e01b81526004016109ed9190613005565b5050611ee6565b601e8460ff161115611ed657611ece611e6d600486613531565b8484611ec68a6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9291906126e3565b509050611ee6565b611ee2868585856126e3565b5090505b6032546001600160a01b03828116911614611058576032546040516310b5d43760e21b81526001600160a01b03808416600483015290911660248201526044016109ed565b611f3361242f565b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d454611f5e826127a7565b816001600160a01b0316816001600160a01b03167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c60405160405180910390a35050565b6032546001600160a01b031615611fce576040516393360fbf60e01b81523060048201526024016109ed565b6001600160a01b038216611ff557604051639b15e16f60e01b815260040160405180910390fd5b603280546001600160a01b0319166001600160a01b038416179055612019816127a7565b6120336000604051806020016040528060008152506127f2565b5050565b6000610f22848484611316565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061208857506032546001600160a01b03163314155b156120a8576040516332dbd3c760e11b81523360048201526024016109ed565b565b60008082516020840185875af16040513d6000823e81610fa3573d81fd5b60008060006120d785856128bc565b915091506120e481612901565b509392505050565b600036816120fd6060860186613311565b90925090508015612204576000612117600482848661354a565b61212091613574565b90506361a2b3b760e01b6001600160e01b0319821601612202576000808061214b856004818961354a565b81019061215891906135a4565b6001600160a01b03808416600090815260208190526040902054939650919450925016156121fe57604051631179c1f560e11b81526001600160a01b038416906322f383ea906121ae908c908c90600401613662565b6020604051808303816000875af11580156121cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f19190613518565b9650505050505050610d84565b5050505b505b600061225d856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506122ad612270610140880188613311565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085939250506120c89050565b6032546001600160a01b039081169116146122ce5760019350505050610d84565b50600095945050505050565b50565b80156122da5760405133906000199083906000818181858888f193505050503d806000811461099c576040519150601f19603f3d011682016040523d82523d6000602084013e61099c565b6000600183600181111561233e5761233e61338e565b03612356576000808551602087018986f49050612366565b600080855160208701888a87f190505b80156123cb578360405161237a919061377b565b604051809103902085876001600160a01b03167f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee86866040516123be929190613797565b60405180910390a4612426565b836040516123d9919061377b565b604051809103902085876001600160a01b03167f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a868660405161241d929190613797565b60405180910390a45b95945050505050565b3330146120a8576040516301478e3360e21b81523360048201526024016109ed565b60008183116124605781610e24565b5090919050565b60008360000361248a5760405163653f35a360e01b815260040160405180910390fd5b60006001600160a01b038316156124a157826124a3565b325b90506001600160a01b038416612523573a86106124c0573a6124c2565b855b6124cc888a6134db565b6124d69190613501565b9150600080600080600086865af190508061251d5760405163190eecf360e31b8152600060048201526001600160a01b0383166024820152604481018490526064016109ed565b50612587565b848661252f898b6134db565b6125399190613501565b61254391906134b9565b9150612550848284612592565b6125875760405163190eecf360e31b81526001600160a01b03808616600483015282166024820152604481018390526064016109ed565b509695505050505050565b60006001600160a01b0384166125ea5760405162461bcd60e51b815260206004820152601d60248201527f746f6b656e2063616e206e6f74206265207a65726f206164647265737300000060448201526064016109ed565b6000846001600160a01b03163b116126445760405162461bcd60e51b815260206004820152601c60248201527f746f6b656e20636f6e747261637420646f65736e27742065786973740000000060448201526064016109ed565b604080516001600160a01b03851660248201526044808201859052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b178152825160009182896127105a03f13d80156126c657602081146126ce57600093506126d9565b8193506126d9565b600051158215171593505b5050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561271a575060009050600361279e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561276e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127975760006001925092505061279e565b9150600090505b94509492505050565b6001600160a01b0381166127ce5760405163dd449f5f60e01b815260040160405180910390fd5b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d455565b600160009081526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d546001600160a01b0316156128455760405163df8cc4e360e01b815260040160405180910390fd5b600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556001600160a01b038216156120335761289f8260008360015a612328565b6120335760405163032e3a3960e51b815260040160405180910390fd5b60008082516041036128f25760208301516040840151606085015160001a6128e6878285856126e3565b945094505050506128fa565b506000905060025b9250929050565b60008160048111156129155761291561338e565b0361291d5750565b60018160048111156129315761293161338e565b0361297e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109ed565b60028160048111156129925761299261338e565b036129df5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109ed565b60038160048111156129f3576129f361338e565b036122da5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109ed565b6001600160a01b03811681146122da57600080fd5b8035612a6b81612a4b565b919050565b60008083601f840112612a8257600080fd5b50813567ffffffffffffffff811115612a9a57600080fd5b6020830191508360208285010111156128fa57600080fd5b60008060008060608587031215612ac857600080fd5b8435612ad381612a4b565b935060208501359250604085013567ffffffffffffffff811115612af657600080fd5b612b0287828801612a70565b95989497509550505050565b60008083601f840112612b2057600080fd5b50813567ffffffffffffffff811115612b3857600080fd5b6020830191508360208260051b85010111156128fa57600080fd5b60008060008060008060608789031215612b6c57600080fd5b863567ffffffffffffffff80821115612b8457600080fd5b612b908a838b01612b0e565b90985096506020890135915080821115612ba957600080fd5b612bb58a838b01612b0e565b90965094506040890135915080821115612bce57600080fd5b50612bdb89828a01612b0e565b979a9699509497509295939492505050565b6001600160e01b0319811681146122da57600080fd5b600060208284031215612c1557600080fd5b8135610e2481612bed565b600060208284031215612c3257600080fd5b8135610e2481612a4b565b600060208284031215612c4f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612c8f57612c8f612c56565b60405290565b600082601f830112612ca657600080fd5b813567ffffffffffffffff80821115612cc157612cc1612c56565b604051601f8301601f19908116603f01168101908282118183101715612ce957612ce9612c56565b81604052838152866020858801011115612d0257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612d3557600080fd5b82359150602083013567ffffffffffffffff811115612d5357600080fd5b612d5f85828601612c95565b9150509250929050565b600080600060608486031215612d7e57600080fd5b833567ffffffffffffffff811115612d9557600080fd5b84016101608187031215612da857600080fd5b95602085013595506040909401359392505050565b803560028110612a6b57600080fd5b60008060008060808587031215612de257600080fd5b8435612ded81612a4b565b935060208501359250604085013567ffffffffffffffff811115612e1057600080fd5b612e1c87828801612c95565b925050612e2b60608601612dbd565b905092959194509250565b60008060408385031215612e4957600080fd5b8235612e5481612a4b565b946020939093013593505050565b60005b83811015612e7d578181015183820152602001612e65565b50506000910152565b60008151808452612e9e816020860160208601612e62565b601f01601f19169290920160200192915050565b8215158152604060208201526000610f226040830184612e86565b600060a08284031215612edf57600080fd5b612ee7612c6c565b90508135612ef481612a4b565b8152612f0260208301612dbd565b602082015260408201356040820152606082013567ffffffffffffffff811115612f2b57600080fd5b612f3784828501612c95565b6060830152506080820135608082015292915050565b600060a08284031215612f5f57600080fd5b612f67612c6c565b90508135815260208201356020820152604082013560408201526060820135612f8f81612a4b565b60608201526080820135612fa281612a4b565b608082015292915050565b600080600060e08486031215612fc257600080fd5b833567ffffffffffffffff811115612fd957600080fd5b612fe586828701612ecd565b935050612ff58560208601612f4d565b915060c084013590509250925092565b602081526000610e246020830184612e86565b600080600060e0848603121561302d57600080fd5b833567ffffffffffffffff8082111561304557600080fd5b61305187838801612ecd565b94506130608760208801612f4d565b935060c086013591508082111561307657600080fd5b5061308386828701612c95565b9150509250925092565b60008060008060008060c087890312156130a657600080fd5b8635955060208701359450604087013593506060870135925060808701356130cd81612a4b565b915060a08701356130dd81612a4b565b809150509295509295509295565b6000806000806000806000806000806000806101608d8f03121561310e57600080fd5b6131188d35612a4b565b8c359b5060208d01359a5067ffffffffffffffff60408e0135111561313c57600080fd5b61314c8e60408f01358f01612a70565b909a50985061315d60608e01612dbd565b975060808d0135965060a08d0135955060c08d0135945060e08d013593506101008d013561318a81612a4b565b92506131996101208e01612a60565b91506101408d013590509295989b509295989b509295989b565b6000806000606084860312156131c857600080fd5b83356131d381612a4b565b925060208401356131e381612a4b565b929592945050506040919091013590565b60008060008060006080868803121561320c57600080fd5b853561321781612a4b565b945060208601359350604086013567ffffffffffffffff81111561323a57600080fd5b61324688828901612a70565b9094509250613259905060608701612dbd565b90509295509295909350565b604080825283519082018190526000906020906060840190828701845b828110156132a75781516001600160a01b031684529284019290840190600101613282565b5050506001600160a01b039490941692019190915250919050565b600080604083850312156132d557600080fd5b82356132e081612a4b565b915060208301356132f081612a4b565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332857600080fd5b83018035915067ffffffffffffffff82111561334357600080fd5b6020019150368190038213156128fa57600080fd5b828152604060208201526000610f226040830184612e86565b60006020828403121561338357600080fd5b8151610e2481612bed565b634e487b7160e01b600052602160045260246000fd5b600281106133c257634e487b7160e01b600052602160045260246000fd5b9052565b60006001600160a01b03808816835280871660208401525084604083015260a060608301526133f860a0830185612e86565b905061340760808301846133a4565b9695505050505050565b6000610180820190508d82526001600160a01b03808e1660208401528c60408401528b6060840152613446608084018c6133a4565b8960a08401528860c08401528760e08401528661010084015280861661012084015280851661014084015250826101608301529d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016134b2576134b261348a565b5060010190565b6000826134d657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d8457610d8461348a565b81810381811115610d8457610d8461348a565b8082028115828204841417610d8457610d8461348a565b60006020828403121561352a57600080fd5b5051919050565b60ff8281168282160390811115610d8457610d8461348a565b6000808585111561355a57600080fd5b8386111561356757600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561359c5780818660040360031b1b83161692505b505092915050565b6000806000606084860312156135b957600080fd5b83356135c481612a4b565b925060208401359150604084013567ffffffffffffffff8111156135e757600080fd5b61308386828701612c95565b6000808335601e1984360301811261360a57600080fd5b830160208101925035905067ffffffffffffffff81111561362a57600080fd5b8036038213156128fa57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526136836040820161367685612a60565b6001600160a01b03169052565b60208301356060820152600061369c60408501856135f3565b6101608060808601526136b46101a086018385613639565b92506136c360608801886135f3565b9250603f19808786030160a08801526136dd858584613639565b9450608089013560c088015260a089013560e0880152610100935060c089013584880152610120915060e089013582880152610140848a013581890152613726838b018b6135f3565b9550925081888703018489015261373e868685613639565b955061374c818b018b6135f3565b955093505080878603016101808801525050613769838383613639565b93505050508260208301529392505050565b6000825161378d818460208701612e62565b9190910192915050565b604081016137a582856133a4565b826020830152939250505056fea26469706673582212206d38de10695d463253620f7bec76e681851e44f22392d864735b57ecaf843b1d64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v1.0.0.json b/packages/common/abis/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v1.0.0.json deleted file mode 100644 index 454215192..000000000 --- a/packages/common/abis/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v1.0.0.json +++ /dev/null @@ -1,298 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "EcdsaOwnershipRegistryModule", - "sourceName": "contracts/smart-account/modules/EcdsaOwnershipRegistryModule.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "AlreadyInitedForSmartAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "NoOwnerRegisteredForSmartAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NotEOA", - "type": "error" - }, - { - "inputs": [], - "name": "WrongSignatureLength", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressNotAllowedAsOwner", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "smartAccount", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "oldOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "NAME", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "getOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "eoaOwner", - "type": "address" - } - ], - "name": "initForSmartAccount", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "moduleSignature", - "type": "bytes" - } - ], - "name": "isValidSignature", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "moduleSignature", - "type": "bytes" - }, - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "isValidSignatureForAddress", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - } - ], - "name": "validateUserOp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50610aed806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063f2fde38b11610076578063fa5441611161005b578063fa54416114610195578063ffa1ad74146101a8578063fff35b72146101e457600080fd5b8063f2fde38b1461016f578063f44c339d1461018257600080fd5b80631626ba7e146100a85780632ede3bc0146100f1578063715018a61461011c578063a3f4df7e14610126575b600080fd5b6100bb6100b636600461089b565b610205565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b6101046100ff3660046108f7565b61021b565b6040516001600160a01b0390911681526020016100e8565b6101246102bf565b005b6101626040518060400160405280601f81526020017f4543445341204f776e657273686970205265676973747279204d6f64756c650081525081565b6040516100e89190610914565b61012461017d3660046108f7565b6102cc565b6100bb610190366004610962565b61032b565b6101046101a33660046108f7565b610375565b6101626040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6101f76101f23660046109bd565b6103bb565b6040519081526020016100e8565b600061021283833361032b565b90505b92915050565b336000908152602081905260408120546001600160a01b03161561025957604051632c4dfb7d60e21b81523360048201526024015b60405180910390fd5b6001600160a01b038216610280576040516307e179e960e31b815260040160405180910390fd5b50336000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790553090565b6102ca33600061040c565b565b803b156102f7576040516377817ac360e01b81526001600160a01b0382166004820152602401610250565b6001600160a01b03811661031e576040516307e179e960e31b815260040160405180910390fd5b610328338261040c565b50565b600061033884848461047d565b1561034b5750630b135d3f60e11b61036e565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b6001600160a01b038082166000908152602081905260408120549091168061021557604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6000806103cc610140850185610a08565b8101906103d99190610a4f565b5090506103f383826103ee60208801886108f7565b61047d565b15610402576000915050610215565b5060019392505050565b6001600160a01b03808316600081815260208190526040808220805486861673ffffffffffffffffffffffffffffffffffffffff19821681179092559151919094169392849290917fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec9190a4505050565b6001600160a01b03808216600090815260208190526040812054909116806104c357604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6041845110156104e657604051632bb1a9c560e11b815260040160405180910390fd5b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c869052603c812061051f9086610581565b9050806001600160a01b0316826001600160a01b0316036105455760019250505061036e565b61054f8686610581565b9050806001600160a01b0316826001600160a01b0316036105755760019250505061036e565b50600095945050505050565b600080600061059085856105a5565b9150915061059d816105ea565b509392505050565b60008082516041036105db5760208301516040840151606085015160001a6105cf87828585610734565b945094505050506105e3565b506000905060025b9250929050565b60008160048111156105fe576105fe610aa1565b036106065750565b600181600481111561061a5761061a610aa1565b036106675760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610250565b600281600481111561067b5761067b610aa1565b036106c85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610250565b60038160048111156106dc576106dc610aa1565b036103285760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610250565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561076b57506000905060036107ef565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156107bf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166107e8576000600192509250506107ef565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261081f57600080fd5b813567ffffffffffffffff8082111561083a5761083a6107f8565b604051601f8301601f19908116603f01168101908282118183101715610862576108626107f8565b8160405283815286602085880101111561087b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156108ae57600080fd5b82359150602083013567ffffffffffffffff8111156108cc57600080fd5b6108d88582860161080e565b9150509250929050565b6001600160a01b038116811461032857600080fd5b60006020828403121561090957600080fd5b813561036e816108e2565b600060208083528351808285015260005b8181101561094157858101830151858201604001528201610925565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060006060848603121561097757600080fd5b83359250602084013567ffffffffffffffff81111561099557600080fd5b6109a18682870161080e565b92505060408401356109b2816108e2565b809150509250925092565b600080604083850312156109d057600080fd5b823567ffffffffffffffff8111156109e757600080fd5b830161016081860312156109fa57600080fd5b946020939093013593505050565b6000808335601e19843603018112610a1f57600080fd5b83018035915067ffffffffffffffff821115610a3a57600080fd5b6020019150368190038213156105e357600080fd5b60008060408385031215610a6257600080fd5b823567ffffffffffffffff811115610a7957600080fd5b610a858582860161080e565b9250506020830135610a96816108e2565b809150509250929050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212200f64d9f85c9789441febe939ee2ec56eca850156ea304b5eabd0856fee5e186e64736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c8063f2fde38b11610076578063fa5441611161005b578063fa54416114610195578063ffa1ad74146101a8578063fff35b72146101e457600080fd5b8063f2fde38b1461016f578063f44c339d1461018257600080fd5b80631626ba7e146100a85780632ede3bc0146100f1578063715018a61461011c578063a3f4df7e14610126575b600080fd5b6100bb6100b636600461089b565b610205565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b6101046100ff3660046108f7565b61021b565b6040516001600160a01b0390911681526020016100e8565b6101246102bf565b005b6101626040518060400160405280601f81526020017f4543445341204f776e657273686970205265676973747279204d6f64756c650081525081565b6040516100e89190610914565b61012461017d3660046108f7565b6102cc565b6100bb610190366004610962565b61032b565b6101046101a33660046108f7565b610375565b6101626040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6101f76101f23660046109bd565b6103bb565b6040519081526020016100e8565b600061021283833361032b565b90505b92915050565b336000908152602081905260408120546001600160a01b03161561025957604051632c4dfb7d60e21b81523360048201526024015b60405180910390fd5b6001600160a01b038216610280576040516307e179e960e31b815260040160405180910390fd5b50336000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790553090565b6102ca33600061040c565b565b803b156102f7576040516377817ac360e01b81526001600160a01b0382166004820152602401610250565b6001600160a01b03811661031e576040516307e179e960e31b815260040160405180910390fd5b610328338261040c565b50565b600061033884848461047d565b1561034b5750630b135d3f60e11b61036e565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b6001600160a01b038082166000908152602081905260408120549091168061021557604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6000806103cc610140850185610a08565b8101906103d99190610a4f565b5090506103f383826103ee60208801886108f7565b61047d565b15610402576000915050610215565b5060019392505050565b6001600160a01b03808316600081815260208190526040808220805486861673ffffffffffffffffffffffffffffffffffffffff19821681179092559151919094169392849290917fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec9190a4505050565b6001600160a01b03808216600090815260208190526040812054909116806104c357604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6041845110156104e657604051632bb1a9c560e11b815260040160405180910390fd5b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c869052603c812061051f9086610581565b9050806001600160a01b0316826001600160a01b0316036105455760019250505061036e565b61054f8686610581565b9050806001600160a01b0316826001600160a01b0316036105755760019250505061036e565b50600095945050505050565b600080600061059085856105a5565b9150915061059d816105ea565b509392505050565b60008082516041036105db5760208301516040840151606085015160001a6105cf87828585610734565b945094505050506105e3565b506000905060025b9250929050565b60008160048111156105fe576105fe610aa1565b036106065750565b600181600481111561061a5761061a610aa1565b036106675760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610250565b600281600481111561067b5761067b610aa1565b036106c85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610250565b60038160048111156106dc576106dc610aa1565b036103285760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610250565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561076b57506000905060036107ef565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156107bf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166107e8576000600192509250506107ef565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261081f57600080fd5b813567ffffffffffffffff8082111561083a5761083a6107f8565b604051601f8301601f19908116603f01168101908282118183101715610862576108626107f8565b8160405283815286602085880101111561087b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156108ae57600080fd5b82359150602083013567ffffffffffffffff8111156108cc57600080fd5b6108d88582860161080e565b9150509250929050565b6001600160a01b038116811461032857600080fd5b60006020828403121561090957600080fd5b813561036e816108e2565b600060208083528351808285015260005b8181101561094157858101830151858201604001528201610925565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060006060848603121561097757600080fd5b83359250602084013567ffffffffffffffff81111561099557600080fd5b6109a18682870161080e565b92505060408401356109b2816108e2565b809150509250925092565b600080604083850312156109d057600080fd5b823567ffffffffffffffff8111156109e757600080fd5b830161016081860312156109fa57600080fd5b946020939093013593505050565b6000808335601e19843603018112610a1f57600080fd5b83018035915067ffffffffffffffff821115610a3a57600080fd5b6020019150368190038213156105e357600080fd5b60008060408385031215610a6257600080fd5b823567ffffffffffffffff811115610a7957600080fd5b610a858582860161080e565b9250506020830135610a96816108e2565b809150509250929050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212200f64d9f85c9789441febe939ee2ec56eca850156ea304b5eabd0856fee5e186e64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} - } - \ No newline at end of file diff --git a/packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json b/packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json deleted file mode 100644 index 10709b249..000000000 --- a/packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json +++ /dev/null @@ -1,298 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "MultichainECDSAValidator", - "sourceName": "contracts/smart-account/modules/MultichainECDSAValidator.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "AlreadyInitedForSmartAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "NoOwnerRegisteredForSmartAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NotEOA", - "type": "error" - }, - { - "inputs": [], - "name": "WrongSignatureLength", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressNotAllowedAsOwner", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "smartAccount", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "oldOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "NAME", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "getOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "eoaOwner", - "type": "address" - } - ], - "name": "initForSmartAccount", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "moduleSignature", - "type": "bytes" - } - ], - "name": "isValidSignature", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "moduleSignature", - "type": "bytes" - }, - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "isValidSignatureForAddress", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - } - ], - "name": "validateUserOp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x6080806040523461001657610b9b908161001c8239f35b600080fdfe6040608081526004908136101561001557600080fd5b6000803560e01c80631626ba7e1461040a5780632ede3bc014610388578063715018a614610318578063a3f4df7e146102c3578063f2fde38b1461020d578063f44c339d14610185578063fa5441611461012d578063ffa1ad74146100d45763fff35b721461008357600080fd5b346100cd576003199082823601126100cd5783359167ffffffffffffffff83116100d0576101609083360301126100cd57506020926100c691602435910161085d565b9051908152f35b80fd5b5080fd5b5090346100d057816003193601126100d0578051610129916100f58261044a565b600582527f302e322e300000000000000000000000000000000000000000000000000000006020830152519182918261053f565b0390f35b5082346100d05760203660031901126100d0576001600160a01b038381610152610506565b16938481528060205220541691821561016f576020838551908152f35b8351633d3fff5360e21b81529182015260249150fd5b5091346102095760603660031901126102095760243567ffffffffffffffff8111610205576101b790369083016104ba565b90604435936001600160a01b03851685036100cd5750926101db916020943561056b565b90517fffffffff000000000000000000000000000000000000000000000000000000009091168152f35b8380fd5b8280fd5b5091903461020957602036600319011261020957610229610506565b803b6102a4576001600160a01b0380911692831561029657503384528360205281842054169083208273ffffffffffffffffffffffffffffffffffffffff19825416179055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8480a480f35b82516307e179e960e31b8152fd5b826001600160a01b0360249351926377817ac360e01b84521690820152fd5b5090346100d057816003193601126100d0578051610129916102e48261044a565b601f82527f4543445341204f776e657273686970205265676973747279204d6f64756c65006020830152519182918261053f565b50809134610385578160031936011261038557338252816020526001600160a01b03818320541690822073ffffffffffffffffffffffffffffffffffffffff198154169055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a480f35b50fd5b509134610209576020366003190112610209576103a3610506565b338452836020526001600160a01b03908184862054166103f45716908115610296575081602093338152808552209073ffffffffffffffffffffffffffffffffffffffff1982541617905551308152f35b8351632c4dfb7d60e21b81523381850152602490fd5b50346100cd57816003193601126100cd576024359067ffffffffffffffff82116100cd57506020926104426101db92369083016104ba565b33913561056b565b6040810190811067ffffffffffffffff82111761046657604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761046657604052565b67ffffffffffffffff811161046657601f01601f191660200190565b81601f82011215610501578035906104d18261049e565b926104df604051948561047c565b8284526020838301011161050157816000926020809301838601378301015290565b600080fd5b600435906001600160a01b038216820361050157565b60005b83811061052f5750506000910152565b818101518382015260200161051f565b6040916020825261055f815180928160208601526020868601910161051c565b601f01601f1916010190565b9061057692916105a9565b61059e577fffffffff0000000000000000000000000000000000000000000000000000000090565b630b135d3f60e11b90565b916001600160a01b0380911691600093838552846020528260408620541693841561065757506041825110610645577f19457468657265756d205369676e6564204d6573736167653a0a333200000000855280601c528261061861061084603c8920610789565b91909161066f565b16841461063b5761062c9161061091610789565b16146106355790565b50600190565b5050505050600190565b604051632bb1a9c560e11b8152600490fd5b60249060405190633d3fff5360e21b82526004820152fd5b600581101561077357806106805750565b600181036106cd5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b6002810361071a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b60031461072357565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b634e487b7160e01b600052602160045260246000fd5b9060418151146000146107b7576107b3916020820151906060604084015193015160001a906107c1565b9091565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831161083e5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156108315781516001600160a01b03811615610635579190565b50604051903d90823e3d90fd5b50505050600090600390565b519065ffffffffffff8216820361050157565b919091610140810135601e19823603018112156105015781019182359267ffffffffffffffff9081851161050157602092838201958036038713610501578201604096878483031261050157359084821161050157879186806108c49301918601016104ba565b920135946001600160a01b0395868116036105015735966041835114610b43578251830160a0848783019203126105015761090086850161084a565b9061090c89860161084a565b9060608601519160808701518881116105015787019782603f8a011215610501578989015197818911610466578a998d9960059a818c1b9161095482519e8f9085019061047c565b8d528d8d019183010191868311610501578f8e9101915b838310610b33575050505060a081015190828211610501570183603f8201121561050157808b01518d9461099e8261049e565b956109ab8151978861047c565b8287528284010111610501576109c6918e8d8701910161051c565b8b51908a8201927fffffffffffff000000000000000000000000000000000000000000000000000090818860d01b16855260d01b1696876026840152602c830152602c8252606082019082821090821117610466578c52519020986000995b88518b1015610a84578a881b89018a0151908c600083831015610a7757505060005289528a6000205b996000198114610a615760010199610a25565b634e487b7160e01b600052601160045260246000fd5b91909282528b5220610a4e565b91965094999a93985081965096919603610af05750610aa8949596975016916105a9565b15610ae95779ffffffffffff00000000000000000000000000000000000000009065ffffffffffff90818116610ae257505b60a01b161790565b9050610ada565b5050600190565b60649089519062461bcd60e51b82526004820152600e60248201527f496e76616c696420557365724f700000000000000000000000000000000000006044820152fd5b82518152918101918e910161096b565b94925095909250610b56945016916105a9565b15610b6057600090565b60019056fea26469706673582212202a3242d73a2c92fd929c32924b5f964b80434c765985e101142ea4635452e6a664736f6c63430008110033", - "deployedBytecode": "0x6040608081526004908136101561001557600080fd5b6000803560e01c80631626ba7e1461040a5780632ede3bc014610388578063715018a614610318578063a3f4df7e146102c3578063f2fde38b1461020d578063f44c339d14610185578063fa5441611461012d578063ffa1ad74146100d45763fff35b721461008357600080fd5b346100cd576003199082823601126100cd5783359167ffffffffffffffff83116100d0576101609083360301126100cd57506020926100c691602435910161085d565b9051908152f35b80fd5b5080fd5b5090346100d057816003193601126100d0578051610129916100f58261044a565b600582527f302e322e300000000000000000000000000000000000000000000000000000006020830152519182918261053f565b0390f35b5082346100d05760203660031901126100d0576001600160a01b038381610152610506565b16938481528060205220541691821561016f576020838551908152f35b8351633d3fff5360e21b81529182015260249150fd5b5091346102095760603660031901126102095760243567ffffffffffffffff8111610205576101b790369083016104ba565b90604435936001600160a01b03851685036100cd5750926101db916020943561056b565b90517fffffffff000000000000000000000000000000000000000000000000000000009091168152f35b8380fd5b8280fd5b5091903461020957602036600319011261020957610229610506565b803b6102a4576001600160a01b0380911692831561029657503384528360205281842054169083208273ffffffffffffffffffffffffffffffffffffffff19825416179055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8480a480f35b82516307e179e960e31b8152fd5b826001600160a01b0360249351926377817ac360e01b84521690820152fd5b5090346100d057816003193601126100d0578051610129916102e48261044a565b601f82527f4543445341204f776e657273686970205265676973747279204d6f64756c65006020830152519182918261053f565b50809134610385578160031936011261038557338252816020526001600160a01b03818320541690822073ffffffffffffffffffffffffffffffffffffffff198154169055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a480f35b50fd5b509134610209576020366003190112610209576103a3610506565b338452836020526001600160a01b03908184862054166103f45716908115610296575081602093338152808552209073ffffffffffffffffffffffffffffffffffffffff1982541617905551308152f35b8351632c4dfb7d60e21b81523381850152602490fd5b50346100cd57816003193601126100cd576024359067ffffffffffffffff82116100cd57506020926104426101db92369083016104ba565b33913561056b565b6040810190811067ffffffffffffffff82111761046657604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761046657604052565b67ffffffffffffffff811161046657601f01601f191660200190565b81601f82011215610501578035906104d18261049e565b926104df604051948561047c565b8284526020838301011161050157816000926020809301838601378301015290565b600080fd5b600435906001600160a01b038216820361050157565b60005b83811061052f5750506000910152565b818101518382015260200161051f565b6040916020825261055f815180928160208601526020868601910161051c565b601f01601f1916010190565b9061057692916105a9565b61059e577fffffffff0000000000000000000000000000000000000000000000000000000090565b630b135d3f60e11b90565b916001600160a01b0380911691600093838552846020528260408620541693841561065757506041825110610645577f19457468657265756d205369676e6564204d6573736167653a0a333200000000855280601c528261061861061084603c8920610789565b91909161066f565b16841461063b5761062c9161061091610789565b16146106355790565b50600190565b5050505050600190565b604051632bb1a9c560e11b8152600490fd5b60249060405190633d3fff5360e21b82526004820152fd5b600581101561077357806106805750565b600181036106cd5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b6002810361071a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b60031461072357565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b634e487b7160e01b600052602160045260246000fd5b9060418151146000146107b7576107b3916020820151906060604084015193015160001a906107c1565b9091565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831161083e5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156108315781516001600160a01b03811615610635579190565b50604051903d90823e3d90fd5b50505050600090600390565b519065ffffffffffff8216820361050157565b919091610140810135601e19823603018112156105015781019182359267ffffffffffffffff9081851161050157602092838201958036038713610501578201604096878483031261050157359084821161050157879186806108c49301918601016104ba565b920135946001600160a01b0395868116036105015735966041835114610b43578251830160a0848783019203126105015761090086850161084a565b9061090c89860161084a565b9060608601519160808701518881116105015787019782603f8a011215610501578989015197818911610466578a998d9960059a818c1b9161095482519e8f9085019061047c565b8d528d8d019183010191868311610501578f8e9101915b838310610b33575050505060a081015190828211610501570183603f8201121561050157808b01518d9461099e8261049e565b956109ab8151978861047c565b8287528284010111610501576109c6918e8d8701910161051c565b8b51908a8201927fffffffffffff000000000000000000000000000000000000000000000000000090818860d01b16855260d01b1696876026840152602c830152602c8252606082019082821090821117610466578c52519020986000995b88518b1015610a84578a881b89018a0151908c600083831015610a7757505060005289528a6000205b996000198114610a615760010199610a25565b634e487b7160e01b600052601160045260246000fd5b91909282528b5220610a4e565b91965094999a93985081965096919603610af05750610aa8949596975016916105a9565b15610ae95779ffffffffffff00000000000000000000000000000000000000009065ffffffffffff90818116610ae257505b60a01b161790565b9050610ada565b5050600190565b60649089519062461bcd60e51b82526004820152600e60248201527f496e76616c696420557365724f700000000000000000000000000000000000006044820152fd5b82518152918101918e910161096b565b94925095909250610b56945016916105a9565b15610b6057600090565b60019056fea26469706673582212202a3242d73a2c92fd929c32924b5f964b80434c765985e101142ea4635452e6a664736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} - } - \ No newline at end of file diff --git a/packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json b/packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json deleted file mode 100644 index 317e05a87..000000000 --- a/packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccountFactory", - "sourceName": "contracts/smart-account/factory/SmartAccountFactory.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_basicImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "initialAuthModule", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "initialAuthModule", - "type": "address" - } - ], - "name": "AccountCreationWithoutIndex", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "accountCreationCode", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "epAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - } - ], - "name": "addStake", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "basicImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - } - ], - "name": "deployAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "deployCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getAddressForCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimalHandler", - "outputs": [ - { - "internalType": "contract DefaultCallbackHandler", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "epAddress", - "type": "address" - } - ], - "name": "unlockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "epAddress", - "type": "address" - }, - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - } - ], - "name": "withdrawStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60c0346101445761171b906001600160401b0390601f38849003908101601f1916820190838211838310176100ea57808391604096879485528339810103126101445761006861005a602061005384610149565b9301610149565b6100633361015d565b61015d565b6001600160a01b03811615610100576080528151906104e690818301908111838210176100ea578291611235833903906000f080156100df5760a0525161109090816101a582396080518181816101ed015281816105a70152818161074601526107ef015260a05181818161039e0152610b7c0152f35b50513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b825162461bcd60e51b815260206004820152601d60248201527f696d706c656d656e746174696f6e2063616e6e6f74206265207a65726f0000006044820152606490fd5b600080fd5b51906001600160a01b038216820361014457565b600080546001600160a01b039283166001600160a01b03198216811783559216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fe60806040526004361015610013575b600080fd5b60003560e01c80632e7a1a831461010357806331c884df146100fa5780633b3cb143146100f157806345171159146100e85780634a1ce599146100df578063715018a6146100d6578063743b1e03146100cd5780638da5cb5b146100c4578063b36f9705146100bb578063daf0dfc8146100b2578063df20ffbc146100a95763f2fde38b146100a157600080fd5b61000e6108a6565b5061000e61076a565b5061000e610725565b5061000e6106a1565b5061000e610679565b5061000e610533565b5061000e6104cb565b5061000e61045f565b5061000e6103c2565b5061000e61037d565b5061000e61031d565b5061000e61018c565b6001600160a01b0381160361000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020838186019501011161000e57565b90606060031983011261000e576004356101648161010c565b916024359067ffffffffffffffff821161000e576101849160040161011d565b909160443590565b503461000e576102f66102dc6102d06101b16101a73661014b565b9392919091610b54565b6102c1610120916020926101c6848201610a8e565b90808252610bdb858301396040519461024a61025687610214888201956001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087610a9e565b0394610228601f19968781018b528a610a5f565b8781519101209260405192839189830195869091604092825260208201520190565b03858101835282610a5f565b519020945190206040517fff000000000000000000000000000000000000000000000000000000000000009481019485523060601b6bffffffffffffffffffffffff191660018601526015850195909552603584015291929182605585015b03908101835282610a5f565b5190206001600160a01b031690565b6001600160a01b031690565b6040516001600160a01b0390911681529081906020820190565b0390f35b60005b83811061030d5750506000910152565b81810151838201526020016102fd565b503461000e57600036600319011261000e5761036f60406101208151906103476020820183610a5f565b8082526020820190610cfb8239825193849260208452518092816020860152858501906102fa565b601f01601f19168101030190f35b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b506000604036600319011261045c576004356103dd8161010c565b816024359163ffffffff8316809303610458576001600160a01b0390610401610991565b169161040e8315156109e9565b823b1561045857602460405180948193621cb65b60e51b8352600483015234905af1801561044b575b61043f575080f35b61044890610a35565b80f35b610453610a81565b610437565b5080fd5b80fd5b503461000e576000602036600319011261045c57806001600160a01b036004356104888161010c565b610490610991565b1661049c8115156109e9565b803b156104c857819060046040518094819363bb9fe6bf60e01b83525af1801561044b5761043f575080f35b50fd5b503461000e5760008060031936011261045c576104e6610991565b806001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461000e57604036600319011261000e576004356105518161010c565b60243567ffffffffffffffff811161000e5761057190369060040161011d565b6101209161058160208401610a8e565b92808452610e1b60208501396105fe604051926105df846105d16001600160a01b0397887f0000000000000000000000000000000000000000000000000000000000000000169060208401610a9e565b03601f198101865285610a5f565b835160009460200185f092858416966105f9881515610b08565b610b54565b805183918161064c575b50506040519485946102f69416917f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf6579080a36001600160a01b031682526020820190565b8296945090602083920182855af193604051943d82873e1561067557935191936102f638610608565b3d85fd5b503461000e57600036600319011261000e5760206001600160a01b0360005416604051908152f35b503461000e576000604036600319011261045c576004356106c18161010c565b81602435916106cf8361010c565b6106d7610991565b6001600160a01b03809116926106ee8415156109e9565b833b156107215760249083604051958694859363611d2e7560e11b85521660048401525af1801561044b5761043f575080f35b8280fd5b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461000e5761077c6101a73661014b565b9081519160208082019384209260405193846107a78385830193849091604092825260208201520190565b03946107bb601f1996878101835282610a5f565b519020610120946107cd848701610a8e565b95808752610f3b8588013961081860405191826102b56001600160a01b03998a7f00000000000000000000000000000000000000000000000000000000000000001690898401610a9e565b8051906000940184f591848316610830811515610abc565b8194518061087d575b50604051965086956102f69516917f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f29080a46001600160a01b031682526020820190565b82978380939750865af194604051953d82883e156108a2579451939485949338610839565b3d86fd5b503461000e57602036600319011261000e576004356108c48161010c565b6108cc610991565b6001600160a01b0380911680156109265760009182548273ffffffffffffffffffffffffffffffffffffffff198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608490fd5b6001600160a01b036000541633036109a557565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156109f057565b60405162461bcd60e51b815260206004820152601260248201527f496e76616c6964204550206164647265737300000000000000000000000000006044820152606490fd5b67ffffffffffffffff8111610a4957604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a4957604052565b506040513d6000823e3d90fd5b90610a9c6040519283610a5f565b565b6020929190610ab48492828151948592016102fa565b019081520190565b15610ac357565b60405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606490fd5b15610b0f57565b60405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606490fd5b60a490610bd7929380604051958693631bc6fec760e11b60208601526001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016602487015216604485015260606064850152816084850152848401376000838284010152601f80199101168101036084810184520182610a5f565b9056fe6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033a2646970667358221220cc3855215776915d9c3562b4380fe9fbf7afb53b9434cabc4802d531f12df64364736f6c6343000811003360808060405234610016576104ca908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816223de291461031b57816301ffc9a71461029457508063150b7a021461023d578063a3f4df7e146101d6578063bc197c811461014c578063f23a6e61146100f25763ffa1ad741461007157600080fd5b346100ee57816003193601126100ee578051918183019083821067ffffffffffffffff8311176100db57506100d793508152600582527f312e302e300000000000000000000000000000000000000000000000000000006020830152519182918261041a565b0390f35b634e487b7160e01b815260418552602490fd5b5080fd5b5090346101495760a03660031901126101495761010d6103a1565b506101166103c9565b506084359067ffffffffffffffff8211610149575060209261013a913691016103ec565b50505163f23a6e6160e01b8152f35b80fd5b5090346101495760a0366003190112610149576101676103a1565b506101706103c9565b5067ffffffffffffffff906044358281116100ee576101929036908601610463565b50506064358281116100ee576101ab9036908601610463565b505060843591821161014957506020926101c7913691016103ec565b50505163bc197c8160e01b8152f35b50346100ee57816003193601126100ee578051918183019083821067ffffffffffffffff8311176100db57506100d793508152601882527f44656661756c742043616c6c6261636b2048616e646c657200000000000000006020830152519182918261041a565b509034610149576080366003190112610149576102586103a1565b506102616103c9565b506064359067ffffffffffffffff82116101495750602092610285913691016103ec565b505051630a85bd0160e11b8152f35b83908534610317576020366003190112610317573563ffffffff60e01b81168091036103175760209250630271189760e51b8114908115610306575b81156102f6575b81156102e5575b5015158152f35b6301ffc9a760e01b149050836102de565b6223de2960e01b811491506102d7565b630a85bd0160e11b811491506102d0565b8280fd5b8385346100ee5760c03660031901126100ee576103366103a1565b5061033f6103c9565b5060443573ffffffffffffffffffffffffffffffffffffffff8116036100ee5767ffffffffffffffff9060843582811161039d5761038090369083016103ec565b505060a43591821161031757610398913691016103ec565b505080f35b8380fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103c457565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103c457565b9181601f840112156103c45782359167ffffffffffffffff83116103c457602083818601950101116103c457565b6020808252825181830181905290939260005b82811061044f57505060409293506000838284010152601f8019910116010190565b81810186015184820160400152850161042d565b9181601f840112156103c45782359167ffffffffffffffff83116103c4576020808501948460051b0101116103c45756fea2646970667358221220e22ad453b03efac358b2f092a996c1bf999c6cba4b1e5c7d1e917139d697fca764736f6c63430008110033", - "deployedBytecode": "0x60806040526004361015610013575b600080fd5b60003560e01c80632e7a1a831461010357806331c884df146100fa5780633b3cb143146100f157806345171159146100e85780634a1ce599146100df578063715018a6146100d6578063743b1e03146100cd5780638da5cb5b146100c4578063b36f9705146100bb578063daf0dfc8146100b2578063df20ffbc146100a95763f2fde38b146100a157600080fd5b61000e6108a6565b5061000e61076a565b5061000e610725565b5061000e6106a1565b5061000e610679565b5061000e610533565b5061000e6104cb565b5061000e61045f565b5061000e6103c2565b5061000e61037d565b5061000e61031d565b5061000e61018c565b6001600160a01b0381160361000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020838186019501011161000e57565b90606060031983011261000e576004356101648161010c565b916024359067ffffffffffffffff821161000e576101849160040161011d565b909160443590565b503461000e576102f66102dc6102d06101b16101a73661014b565b9392919091610b54565b6102c1610120916020926101c6848201610a8e565b90808252610bdb858301396040519461024a61025687610214888201956001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087610a9e565b0394610228601f19968781018b528a610a5f565b8781519101209260405192839189830195869091604092825260208201520190565b03858101835282610a5f565b519020945190206040517fff000000000000000000000000000000000000000000000000000000000000009481019485523060601b6bffffffffffffffffffffffff191660018601526015850195909552603584015291929182605585015b03908101835282610a5f565b5190206001600160a01b031690565b6001600160a01b031690565b6040516001600160a01b0390911681529081906020820190565b0390f35b60005b83811061030d5750506000910152565b81810151838201526020016102fd565b503461000e57600036600319011261000e5761036f60406101208151906103476020820183610a5f565b8082526020820190610cfb8239825193849260208452518092816020860152858501906102fa565b601f01601f19168101030190f35b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b506000604036600319011261045c576004356103dd8161010c565b816024359163ffffffff8316809303610458576001600160a01b0390610401610991565b169161040e8315156109e9565b823b1561045857602460405180948193621cb65b60e51b8352600483015234905af1801561044b575b61043f575080f35b61044890610a35565b80f35b610453610a81565b610437565b5080fd5b80fd5b503461000e576000602036600319011261045c57806001600160a01b036004356104888161010c565b610490610991565b1661049c8115156109e9565b803b156104c857819060046040518094819363bb9fe6bf60e01b83525af1801561044b5761043f575080f35b50fd5b503461000e5760008060031936011261045c576104e6610991565b806001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461000e57604036600319011261000e576004356105518161010c565b60243567ffffffffffffffff811161000e5761057190369060040161011d565b6101209161058160208401610a8e565b92808452610e1b60208501396105fe604051926105df846105d16001600160a01b0397887f0000000000000000000000000000000000000000000000000000000000000000169060208401610a9e565b03601f198101865285610a5f565b835160009460200185f092858416966105f9881515610b08565b610b54565b805183918161064c575b50506040519485946102f69416917f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf6579080a36001600160a01b031682526020820190565b8296945090602083920182855af193604051943d82873e1561067557935191936102f638610608565b3d85fd5b503461000e57600036600319011261000e5760206001600160a01b0360005416604051908152f35b503461000e576000604036600319011261045c576004356106c18161010c565b81602435916106cf8361010c565b6106d7610991565b6001600160a01b03809116926106ee8415156109e9565b833b156107215760249083604051958694859363611d2e7560e11b85521660048401525af1801561044b5761043f575080f35b8280fd5b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461000e5761077c6101a73661014b565b9081519160208082019384209260405193846107a78385830193849091604092825260208201520190565b03946107bb601f1996878101835282610a5f565b519020610120946107cd848701610a8e565b95808752610f3b8588013961081860405191826102b56001600160a01b03998a7f00000000000000000000000000000000000000000000000000000000000000001690898401610a9e565b8051906000940184f591848316610830811515610abc565b8194518061087d575b50604051965086956102f69516917f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f29080a46001600160a01b031682526020820190565b82978380939750865af194604051953d82883e156108a2579451939485949338610839565b3d86fd5b503461000e57602036600319011261000e576004356108c48161010c565b6108cc610991565b6001600160a01b0380911680156109265760009182548273ffffffffffffffffffffffffffffffffffffffff198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608490fd5b6001600160a01b036000541633036109a557565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156109f057565b60405162461bcd60e51b815260206004820152601260248201527f496e76616c6964204550206164647265737300000000000000000000000000006044820152606490fd5b67ffffffffffffffff8111610a4957604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a4957604052565b506040513d6000823e3d90fd5b90610a9c6040519283610a5f565b565b6020929190610ab48492828151948592016102fa565b019081520190565b15610ac357565b60405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606490fd5b15610b0f57565b60405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606490fd5b60a490610bd7929380604051958693631bc6fec760e11b60208601526001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016602487015216604485015260606064850152816084850152848401376000838284010152601f80199101168101036084810184520182610a5f565b9056fe6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033a2646970667358221220cc3855215776915d9c3562b4380fe9fbf7afb53b9434cabc4802d531f12df64364736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json b/packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json deleted file mode 100644 index ce7a7284d..000000000 --- a/packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json +++ /dev/null @@ -1,1182 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccount", - "sourceName": "contracts/smart-account/SmartAccount.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "anEntryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "BaseImplementationCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotAnEntryPoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPointOrOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPointOrSelf", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotSelf", - "type": "error" - }, - { - "inputs": [], - "name": "DelegateCallsOnly", - "type": "error" - }, - { - "inputs": [], - "name": "EntryPointCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "HandlerCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementationAddress", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MixedAuthFail", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleAlreadyEnabled", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "expectedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "returnedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "prevModule", - "type": "address" - } - ], - "name": "ModuleAndPrevModuleMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleCannotBeZeroOrSentinel", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleNotEnabled", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesAlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesSetupExecutionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCanNotBeSelf", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerProvidedIsSame", - "type": "error" - }, - { - "inputs": [], - "name": "TransferToZeroAddressAttempt", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "destLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "valueLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "funcLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "operationLength", - "type": "uint256" - } - ], - "name": "WrongBatchProvided", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractSignature", - "type": "bytes" - } - ], - "name": "WrongContractSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "uintS", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "contractSignatureLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "signatureLength", - "type": "uint256" - } - ], - "name": "WrongContractSignatureFormat", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleAddressProvided", - "type": "address" - } - ], - "name": "WrongValidationModule", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousHandler", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "ChangedFallbackHandler", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "DisabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "EnabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "ModuleTransaction", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "SmartAccountReceivedNativeToken", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "addDeposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevModule", - "type": "address" - }, - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "disableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "enableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "entryPoint", - "outputs": [ - { - "internalType": "contract IEntryPoint", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "to", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - }, - { - "internalType": "enum Enum.Operation[]", - "name": "operations", - "type": "uint8[]" - } - ], - "name": "execBatchTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModuleReturnData", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatch_y6U", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "execute_ncC", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFallbackHandler", - "outputs": [ - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getImplementation", - "outputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "start", - "type": "address" - }, - { - "internalType": "uint256", - "name": "pageSize", - "type": "uint256" - } - ], - "name": "getModulesPaginated", - "outputs": [ - { - "internalType": "address[]", - "name": "array", - "type": "address[]" - }, - { - "internalType": "address", - "name": "next", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - }, - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - } - ], - "name": "init", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "isModuleEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "name": "isValidSignature", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint192", - "name": "_key", - "type": "uint192" - } - ], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "noncesDeprecated", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ownerDeprecated", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "setFallbackHandler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "setupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "setupData", - "type": "bytes" - } - ], - "name": "setupAndEnableModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "updateImplementation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validateUserOp", - "outputs": [ - { - "internalType": "uint256", - "name": "validationData", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdrawDepositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60c0346100fc57601f61213e38819003918201601f19168301916001600160401b03831184841017610101578084926020946040528339810103126100fc57516001600160a01b0381168082036100fc573060a052156100ea57608052600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556040516120269081610118823960805181818161096f01528181610b6201528181610c0301528181610f2101528181610f740152818161119e0152818161193b0152611996015260a051816114dd0152f35b60405163091748f960e21b8152600490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040526004361015610030575b36156100285734610023576100216119d6565b005b600080fd5b6100216114d3565b60003560e01c8061189a146101b357806146801461021657806301ffc9a71461025e578063025b22bc146102555780631626ba7e1461024c57806321632045146102435780632d9ad53d1461023a578063378dfd8e146102315780633a871cdd14610228578063468721a71461021f57806347e1da2a146102165780634a58db191461020d5780634d44560d146102045780635229073f146101fb5780635305dd27146101f2578063610b5925146101e95780636424e9fe146101e0578063856dfd99146101d7578063aaf10f42146101ce578063acfdf503146101c5578063b0d691fe146101bc578063b61d27f6146101b3578063c399ec88146101aa578063cc2f8452146101a1578063d86f2b3c14610198578063e009cfde1461018f578063f08a032314610186578063f33623b11461017d5763ffa1ad740361000e57610178611439565b61000e565b5061017861140c565b506101786113de565b5061017861120c565b5061017861113a565b50610178611038565b50610178610f45565b506101786102b3565b50610178610f00565b50610178610e5d565b50610178610e36565b50610178610def565b50610178610dc7565b50610178610d99565b50610178610d2d565b50610178610cab565b50610178610bd4565b50610178610b4a565b50610178610342565b50610178610afc565b50610178610929565b506101786107c8565b5061017861076a565b506101786106ab565b5061017861064f565b5061017861049d565b50610178610461565b6001600160a01b0381160361002357565b359061028382610267565b565b9181601f840112156100235782359167ffffffffffffffff8311610023576020838186019501011161002357565b5034610023576060366003190112610023576004356102d181610267565b6044359067ffffffffffffffff8211610023576103076102f8610021933690600401610285565b61030061198c565b36916105fa565b906024359061190d565b9181601f840112156100235782359167ffffffffffffffff8311610023576020808501948460051b01011161002357565b50346100235760603660031901126100235767ffffffffffffffff60043581811161002357610375903690600401610311565b906024358381116100235761038e903690600401610311565b93604435908111610023576103a7903690600401610311565b926103b061198c565b84158015610445575b801561043b575b61040f5760005b8581106103d057005b806104096103e96103e46001948a87611745565b611763565b6103f4838b89611745565b35610403610300858b8a61176d565b9161190d565b016103c7565b5050506084926040519263470c355760e01b845260048401526024830152604482015260006064820152fd5b50838614156103c0565b50858514156103b9565b6001600160e01b031981160361002357565b50346100235760203660031901126100235760206004356104818161044f565b6040516001600160e01b03199091166301ffc9a760e01b148152f35b5034610023576020366003190112610023576004356104bb81610267565b6104c3611931565b6001600160a01b0380821691821561053057803b15610509573054903055167faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da600080a3005b604051630c76093760e01b81526001600160a01b03919091166004820152602490fd5b0390fd5b60405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f000000000000000000006044820152606490fd5b50634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116105a057604052565b6105a8610575565b604052565b90601f8019910116810190811067ffffffffffffffff8211176105a057604052565b60209067ffffffffffffffff81116105ed575b601f01601f19160190565b6105f5610575565b6105e2565b929192610606826105cf565b9161061460405193846105ad565b829481845281830111610023578281602093846000960137010152565b9080601f830112156100235781602061064c933591016105fa565b90565b50346100235760403660031901126100235760243567ffffffffffffffff81116100235761068e6106866020923690600401610631565b600435611834565b6040516001600160e01b03199091168152f35b6002111561002357565b50346100235760a0366003190112610023576004356106c981610267565b60443567ffffffffffffffff8111610023576106e9903690600401610631565b90606435906106f7826106a1565b6084359160013314801561074b575b61073357602093610723938061072d57505a925b60243590611b5a565b6040519015158152f35b9261071a565b6040516321ac7c5f60e01b8152336004820152602490fd5b503360005260006020526001600160a01b036040600020541615610706565b503461002357602036600319011261002357602060043561078a81610267565b6001600160a01b0380911690816001141591826107ae575b50506040519015158152f35b9091506000526000825260406000205416151538806107a2565b5034610023576060366003190112610023576004356107e681610267565b602435906107f382610267565b60443567ffffffffffffffff811161002357610813903690600401610285565b91909260009360018552846020526001600160a01b0393604093858588205416158015906108fd575b6108ed5791610852916103006108589594611a24565b90611f7a565b918216801580156108e3575b6108cd578282856108b1936108c997528060205261089182822060016001600160a01b0319825416179055565b6001815220906001600160a01b03166001600160a01b0319825416179055565b516001600160a01b0390911681529081906020820190565b0390f35b602491519063cadb248f60e01b82526004820152fd5b5060018114610864565b845162dc149f60e41b8152600490fd5b50857f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d45416151561083c565b503461002357600319606036820112610023576004359067ffffffffffffffff82116100235761016082600401918336030112610023576000906001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000163303610a9b576109af6109a76101448693018461153d565b810190611570565b905016926109e06109d3856001600160a01b03166000526000602052604060002090565b546001600160a01b031690565b1615610a7a576020610a116108c9948493604051948580948193637ff9adb960e11b835260243590600484016115fa565b03925af1918215610a6d575b91610a3f575b50610a2f6044356116f1565b6040519081529081906020820190565b610a60915060203d8111610a66575b610a5881836105ad565b8101906114b7565b38610a23565b503d610a4e565b610a756114c6565b610a1d565b6040516326cc3fab60e21b81526001600160a01b0384166004820152602490fd5b604051635dac3db760e11b8152336004820152602490fd5b608060031982011261002357600435610acb81610267565b91602435916044359067ffffffffffffffff821161002357610aef91600401610631565b9060643561064c816106a1565b503461002357610b0b36610ab3565b600193919333148015610b2b575b61073357602093610723935a93611b5a565b503360005260006020526001600160a01b036040600020541615610b19565b50600080600319360112610bd1576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681813b15610bd15760405163b760faf960e01b8152306004820152918290602490829034905af18015610bc4575b610bb8575080f35b610bc19061058c565b80f35b610bcc6114c6565b610bb0565b80fd5b5060006040366003190112610bd157600435610bef81610267565b610bf7611931565b816001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001692833b15610c5f5760449083604051958694859363040b850f60e31b855216600484015260243560248401525af18015610bc457610bb8575080f35b8280fd5b60005b838110610c765750506000910152565b8181015183820152602001610c66565b90602091610c9f81518092818552858086019101610c63565b601f01601f1916010190565b503461002357610cba36610ab3565b90600193929333148015610d0e575b61073357610cd8935a93611b5a565b6040519060203d8301016040523d82523d6000602084013e6108c960405192839215158352604060208401526040830190610c86565b503360005260006020526001600160a01b036040600020541615610cc9565b503461002357604036600319011261002357600435610d4b81610267565b60243567ffffffffffffffff811161002357602091610d71610d7f923690600401610631565b90610d7a611931565b611f7a565b610d8881611d68565b6001600160a01b0360405191168152f35b503461002357602036600319011261002357610021600435610dba81610267565b610dc2611931565b611d68565b50346100235760003660031901126100235760206001600160a01b0360315416604051908152f35b50346100235760003660031901126100235760207f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4546001600160a01b0360405191168152f35b503461002357600036600319011261002357602030546001600160a01b0360405191168152f35b50346100235760803660031901126100235767ffffffffffffffff60043581811161002357610e90903690600401610311565b60249291923582811161002357610eab903690600401610311565b60449491943584811161002357610ec6903690600401610311565b91606435958611610023576108c996610ee6610eee973690600401610311565b969095611c22565b60405190151581529081906020820190565b50346100235760003660031901126100235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610023576000366003190112610023576040516370a0823160e01b815230600482015260209081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fd4575b600091610fb7575b50604051908152f35b610fce9150823d8111610a6657610a5881836105ad565b38610fae565b610fdc6114c6565b610fa6565b90929192604082016040835281518091526060830160208093019160005b8482821061101b575050506001600160a01b0391509416910152565b84516001600160a01b031684529384019390920191600101610fff565b50346100235760403660031901126100235760043561105681610267565b60243561106281611a96565b61106f60405191826105ad565b818152601f1961107e83611a96565b013660208301376110a76109d36000946001600160a01b03166000526000602052604060002090565b6001600160a01b038116801515908161112e575b5080611125575b15611112576111066109d3826110ed61110c946110df8988611ab7565b906001600160a01b03169052565b6001600160a01b03166000526000602052604060002090565b93611ad9565b926110a7565b908381526108c960405192839283610fe1565b508284106110c2565b600191501415386110bb565b50346100235760203660031901126100235760043577ffffffffffffffffffffffffffffffffffffffffffffffff8116809103610023576108c99060405190631aab3f0d60e11b825230600483015260248201526020816044816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ff575b6000916111e1575b506040519081529081906020820190565b6111f9915060203d8111610a6657610a5881836105ad565b386111d0565b6112076114c6565b6111c8565b50346100235760403660031901126100235760043561122a81610267565b60243561123681610267565b61123e611931565b6001600160a01b038116801580156113d4575b6113b3576112846112786109d3856001600160a01b03166000526000602052604060002090565b6001600160a01b031690565b03611359578061130a7faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276936112ef6112d56109d3611354966001600160a01b03166000526000602052604060002090565b916001600160a01b03166000526000602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b61133a61132a826001600160a01b03166000526000602052604060002090565b6001600160a01b03198154169055565b6040516001600160a01b0390911681529081906020820190565b0390a1005b61052c61137c6109d3846001600160a01b03166000526000602052604060002090565b604051633103525b60e21b81526001600160a01b039384166004820152908316602482015292909116604483015281906064820190565b60405163cadb248f60e01b81526001600160a01b0383166004820152602490fd5b5060018114611251565b5034610023576020366003190112610023576100216004356113ff81610267565b611407611931565b611a24565b50346100235760203660031901126100235760043560005260326020526020604060002054604051908152f35b5034610023576000366003190112610023576108c96040516040810181811067ffffffffffffffff8211176114aa575b604052600581527f322e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610c86565b6114b2610575565b611469565b90816020910312610023575190565b506040513d6000823e3d90fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301461152b5734337ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce02600080a3565b604051633c97166560e21b8152600490fd5b903590601e1981360301821215610023570180359067ffffffffffffffff82116100235760200191813603831361002357565b919060408382031261002357823567ffffffffffffffff81116100235760209161159b918501610631565b92013561064c81610267565b9035601e198236030181121561002357016020813591019167ffffffffffffffff821161002357813603831361002357565b908060209392818452848401376000828201840152601f01601f1916010190565b9291906116ec611657602092604087526116276040880161161a83610278565b6001600160a01b03169052565b8381013560608801526116dc61164060408301836115a7565b9390610160948560808c01526101a08b01916115d9565b916116d361167f61166b60608401846115a7565b603f198d8803810160a08f015296916115d9565b608083013560c08c015260a083013560e08c01528a6101009660c0850135888301526116c361012060e087013581850152610140998701358a8501528601866115a7565b92909188828603019101526115d9565b938101906115a7565b91888403016101808901526115d9565b930152565b806116f95750565b600080808093338219f1503d15610283573d611714816105cf565b9061172260405192836105ad565b8152600060203d92013e565b50634e487b7160e01b600052603260045260246000fd5b9190811015611756575b60051b0190565b61175e61172e565b61174f565b3561064c81610267565b90916117869281101561178a575b60051b81019061153d565b9091565b61179261172e565b61177b565b919060408382031261002357825167ffffffffffffffff81116100235783019080601f83011215610023578151916117ce836105cf565b916117dc60405193846105ad565b83835260208483010111610023576020926117fc91848085019101610c63565b92015161064c81610267565b90816020910312610023575161064c8161044f565b60409061064c939281528160208201520190610c86565b906118489060208082518301019101611797565b90916001600160a01b03809216916118766109d3846001600160a01b03166000526000602052604060002090565b16156118ec57916020916118a093604051809581948293630b135d3f60e11b84526004840161181d565b03915afa9081156118df575b6000916118b7575090565b61064c915060203d81116118d8575b6118d081836105ad565b810190611808565b503d6118c6565b6118e76114c6565b6118ac565b6040516326cc3fab60e21b81526001600160a01b0383166004820152602490fd5b916000928392602083519301915af1604051903d6000833e1561192d5750565b3d90fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141580611982575b61196a57565b604051634776242160e01b8152336004820152602490fd5b5030331415611964565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119be57565b60405163e6fce6a560e01b8152336004820152602490fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4548015610021576000808092368280373360601b3652818060143601925af13d82803e1561192d573d90f35b6001600160a01b03808216918215611a84577f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d49081549155167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c600080a3565b60405163dd449f5f60e01b8152600490fd5b60209067ffffffffffffffff8111611aaf5760051b0190565b61175e610575565b6020918151811015611acc575b60051b010190565b611ad461172e565b611ac4565b6000198114611ae85760010190565b634e487b7160e01b600052601160045260246000fd5b611b1690602060405192828480945193849201610c63565b810103902090565b906002821015611b2b5752565b634e487b7160e01b600052602160045260246000fd5b60209093929193611b56816040810196611b1e565b0152565b9493929091946002821015611b2b5760018203611c05576000808751602089018488f4955b8615611bcf577f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee91611bca611bbb6001600160a01b0393611afe565b96604051938493169583611b41565b0390a4565b7f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a91611bca611bbb6001600160a01b0393611afe565b600080875160208901868589f195611b7f565b3561064c816106a1565b9497969391929795909560009887158015611d5e575b8015611d54575b8015611d4a575b611d1b576001978833148015611ceb575b6107335797969594939291906000985b808a10611c7a5750505050505050505050565b9091929394959697899b50611cdb888888611cd589869f8f81611cc0818e611cb98f968f97611cb36103e483611ccd9b611cc89b611745565b9c611745565b359861176d565b989094611745565b611c18565b9436916105fa565b91611eab565b9b01989796959493929190611c67565b506001600160a01b03611d146109d3336001600160a01b03166000526000602052604060002090565b1615611c57565b60405163470c355760e01b81526004810189905260248101919091526044810182905260648101869052608490fd5b5085821415611c46565b5081811415611c3f565b5080881415611c38565b6001600160a01b0381168015908115611ea0575b50611e7d57611da46112786109d3836001600160a01b03166000526000602052604060002090565b611e5a57600160009081526020527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844090611e5590611e21611e047fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6109d3565b6112ef836001600160a01b03166000526000602052604060002090565b6001600090815260205261133a817fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6112ef565b0390a1565b60405163b29d459560e01b81526001600160a01b03919091166004820152602490fd5b60405163cadb248f60e01b81526001600160a01b03919091166004820152602490fd5b600191501438611d7c565b939293611ebb5a86858585611b5a565b948515611f4e57611f23611f187f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da956001600160a01b0395604051968796338852166020870152604086015260a0606086015260a0850190610c86565b916080840190611b1e565b0390a1337f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8600080a2565b50505050337facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375600080a2565b6001600160a01b03811615611fab5781600092918360208194519301915af1604051903d6000833e1561192d575190565b60405162461bcd60e51b815260206004820152601a60248201527f57726f6e67204d6f64756c6520536574757020416464726573730000000000006044820152606490fdfea26469706673582212205e35c32c65281399d0271586e25905b496a0e4ccfd6e3ff9ffae2c43380c16ac64736f6c63430008110033", - "deployedBytecode": "0x60806040526004361015610030575b36156100285734610023576100216119d6565b005b600080fd5b6100216114d3565b60003560e01c8061189a146101b357806146801461021657806301ffc9a71461025e578063025b22bc146102555780631626ba7e1461024c57806321632045146102435780632d9ad53d1461023a578063378dfd8e146102315780633a871cdd14610228578063468721a71461021f57806347e1da2a146102165780634a58db191461020d5780634d44560d146102045780635229073f146101fb5780635305dd27146101f2578063610b5925146101e95780636424e9fe146101e0578063856dfd99146101d7578063aaf10f42146101ce578063acfdf503146101c5578063b0d691fe146101bc578063b61d27f6146101b3578063c399ec88146101aa578063cc2f8452146101a1578063d86f2b3c14610198578063e009cfde1461018f578063f08a032314610186578063f33623b11461017d5763ffa1ad740361000e57610178611439565b61000e565b5061017861140c565b506101786113de565b5061017861120c565b5061017861113a565b50610178611038565b50610178610f45565b506101786102b3565b50610178610f00565b50610178610e5d565b50610178610e36565b50610178610def565b50610178610dc7565b50610178610d99565b50610178610d2d565b50610178610cab565b50610178610bd4565b50610178610b4a565b50610178610342565b50610178610afc565b50610178610929565b506101786107c8565b5061017861076a565b506101786106ab565b5061017861064f565b5061017861049d565b50610178610461565b6001600160a01b0381160361002357565b359061028382610267565b565b9181601f840112156100235782359167ffffffffffffffff8311610023576020838186019501011161002357565b5034610023576060366003190112610023576004356102d181610267565b6044359067ffffffffffffffff8211610023576103076102f8610021933690600401610285565b61030061198c565b36916105fa565b906024359061190d565b9181601f840112156100235782359167ffffffffffffffff8311610023576020808501948460051b01011161002357565b50346100235760603660031901126100235767ffffffffffffffff60043581811161002357610375903690600401610311565b906024358381116100235761038e903690600401610311565b93604435908111610023576103a7903690600401610311565b926103b061198c565b84158015610445575b801561043b575b61040f5760005b8581106103d057005b806104096103e96103e46001948a87611745565b611763565b6103f4838b89611745565b35610403610300858b8a61176d565b9161190d565b016103c7565b5050506084926040519263470c355760e01b845260048401526024830152604482015260006064820152fd5b50838614156103c0565b50858514156103b9565b6001600160e01b031981160361002357565b50346100235760203660031901126100235760206004356104818161044f565b6040516001600160e01b03199091166301ffc9a760e01b148152f35b5034610023576020366003190112610023576004356104bb81610267565b6104c3611931565b6001600160a01b0380821691821561053057803b15610509573054903055167faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da600080a3005b604051630c76093760e01b81526001600160a01b03919091166004820152602490fd5b0390fd5b60405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f000000000000000000006044820152606490fd5b50634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116105a057604052565b6105a8610575565b604052565b90601f8019910116810190811067ffffffffffffffff8211176105a057604052565b60209067ffffffffffffffff81116105ed575b601f01601f19160190565b6105f5610575565b6105e2565b929192610606826105cf565b9161061460405193846105ad565b829481845281830111610023578281602093846000960137010152565b9080601f830112156100235781602061064c933591016105fa565b90565b50346100235760403660031901126100235760243567ffffffffffffffff81116100235761068e6106866020923690600401610631565b600435611834565b6040516001600160e01b03199091168152f35b6002111561002357565b50346100235760a0366003190112610023576004356106c981610267565b60443567ffffffffffffffff8111610023576106e9903690600401610631565b90606435906106f7826106a1565b6084359160013314801561074b575b61073357602093610723938061072d57505a925b60243590611b5a565b6040519015158152f35b9261071a565b6040516321ac7c5f60e01b8152336004820152602490fd5b503360005260006020526001600160a01b036040600020541615610706565b503461002357602036600319011261002357602060043561078a81610267565b6001600160a01b0380911690816001141591826107ae575b50506040519015158152f35b9091506000526000825260406000205416151538806107a2565b5034610023576060366003190112610023576004356107e681610267565b602435906107f382610267565b60443567ffffffffffffffff811161002357610813903690600401610285565b91909260009360018552846020526001600160a01b0393604093858588205416158015906108fd575b6108ed5791610852916103006108589594611a24565b90611f7a565b918216801580156108e3575b6108cd578282856108b1936108c997528060205261089182822060016001600160a01b0319825416179055565b6001815220906001600160a01b03166001600160a01b0319825416179055565b516001600160a01b0390911681529081906020820190565b0390f35b602491519063cadb248f60e01b82526004820152fd5b5060018114610864565b845162dc149f60e41b8152600490fd5b50857f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d45416151561083c565b503461002357600319606036820112610023576004359067ffffffffffffffff82116100235761016082600401918336030112610023576000906001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000163303610a9b576109af6109a76101448693018461153d565b810190611570565b905016926109e06109d3856001600160a01b03166000526000602052604060002090565b546001600160a01b031690565b1615610a7a576020610a116108c9948493604051948580948193637ff9adb960e11b835260243590600484016115fa565b03925af1918215610a6d575b91610a3f575b50610a2f6044356116f1565b6040519081529081906020820190565b610a60915060203d8111610a66575b610a5881836105ad565b8101906114b7565b38610a23565b503d610a4e565b610a756114c6565b610a1d565b6040516326cc3fab60e21b81526001600160a01b0384166004820152602490fd5b604051635dac3db760e11b8152336004820152602490fd5b608060031982011261002357600435610acb81610267565b91602435916044359067ffffffffffffffff821161002357610aef91600401610631565b9060643561064c816106a1565b503461002357610b0b36610ab3565b600193919333148015610b2b575b61073357602093610723935a93611b5a565b503360005260006020526001600160a01b036040600020541615610b19565b50600080600319360112610bd1576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681813b15610bd15760405163b760faf960e01b8152306004820152918290602490829034905af18015610bc4575b610bb8575080f35b610bc19061058c565b80f35b610bcc6114c6565b610bb0565b80fd5b5060006040366003190112610bd157600435610bef81610267565b610bf7611931565b816001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001692833b15610c5f5760449083604051958694859363040b850f60e31b855216600484015260243560248401525af18015610bc457610bb8575080f35b8280fd5b60005b838110610c765750506000910152565b8181015183820152602001610c66565b90602091610c9f81518092818552858086019101610c63565b601f01601f1916010190565b503461002357610cba36610ab3565b90600193929333148015610d0e575b61073357610cd8935a93611b5a565b6040519060203d8301016040523d82523d6000602084013e6108c960405192839215158352604060208401526040830190610c86565b503360005260006020526001600160a01b036040600020541615610cc9565b503461002357604036600319011261002357600435610d4b81610267565b60243567ffffffffffffffff811161002357602091610d71610d7f923690600401610631565b90610d7a611931565b611f7a565b610d8881611d68565b6001600160a01b0360405191168152f35b503461002357602036600319011261002357610021600435610dba81610267565b610dc2611931565b611d68565b50346100235760003660031901126100235760206001600160a01b0360315416604051908152f35b50346100235760003660031901126100235760207f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4546001600160a01b0360405191168152f35b503461002357600036600319011261002357602030546001600160a01b0360405191168152f35b50346100235760803660031901126100235767ffffffffffffffff60043581811161002357610e90903690600401610311565b60249291923582811161002357610eab903690600401610311565b60449491943584811161002357610ec6903690600401610311565b91606435958611610023576108c996610ee6610eee973690600401610311565b969095611c22565b60405190151581529081906020820190565b50346100235760003660031901126100235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610023576000366003190112610023576040516370a0823160e01b815230600482015260209081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fd4575b600091610fb7575b50604051908152f35b610fce9150823d8111610a6657610a5881836105ad565b38610fae565b610fdc6114c6565b610fa6565b90929192604082016040835281518091526060830160208093019160005b8482821061101b575050506001600160a01b0391509416910152565b84516001600160a01b031684529384019390920191600101610fff565b50346100235760403660031901126100235760043561105681610267565b60243561106281611a96565b61106f60405191826105ad565b818152601f1961107e83611a96565b013660208301376110a76109d36000946001600160a01b03166000526000602052604060002090565b6001600160a01b038116801515908161112e575b5080611125575b15611112576111066109d3826110ed61110c946110df8988611ab7565b906001600160a01b03169052565b6001600160a01b03166000526000602052604060002090565b93611ad9565b926110a7565b908381526108c960405192839283610fe1565b508284106110c2565b600191501415386110bb565b50346100235760203660031901126100235760043577ffffffffffffffffffffffffffffffffffffffffffffffff8116809103610023576108c99060405190631aab3f0d60e11b825230600483015260248201526020816044816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ff575b6000916111e1575b506040519081529081906020820190565b6111f9915060203d8111610a6657610a5881836105ad565b386111d0565b6112076114c6565b6111c8565b50346100235760403660031901126100235760043561122a81610267565b60243561123681610267565b61123e611931565b6001600160a01b038116801580156113d4575b6113b3576112846112786109d3856001600160a01b03166000526000602052604060002090565b6001600160a01b031690565b03611359578061130a7faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276936112ef6112d56109d3611354966001600160a01b03166000526000602052604060002090565b916001600160a01b03166000526000602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b61133a61132a826001600160a01b03166000526000602052604060002090565b6001600160a01b03198154169055565b6040516001600160a01b0390911681529081906020820190565b0390a1005b61052c61137c6109d3846001600160a01b03166000526000602052604060002090565b604051633103525b60e21b81526001600160a01b039384166004820152908316602482015292909116604483015281906064820190565b60405163cadb248f60e01b81526001600160a01b0383166004820152602490fd5b5060018114611251565b5034610023576020366003190112610023576100216004356113ff81610267565b611407611931565b611a24565b50346100235760203660031901126100235760043560005260326020526020604060002054604051908152f35b5034610023576000366003190112610023576108c96040516040810181811067ffffffffffffffff8211176114aa575b604052600581527f322e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610c86565b6114b2610575565b611469565b90816020910312610023575190565b506040513d6000823e3d90fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301461152b5734337ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce02600080a3565b604051633c97166560e21b8152600490fd5b903590601e1981360301821215610023570180359067ffffffffffffffff82116100235760200191813603831361002357565b919060408382031261002357823567ffffffffffffffff81116100235760209161159b918501610631565b92013561064c81610267565b9035601e198236030181121561002357016020813591019167ffffffffffffffff821161002357813603831361002357565b908060209392818452848401376000828201840152601f01601f1916010190565b9291906116ec611657602092604087526116276040880161161a83610278565b6001600160a01b03169052565b8381013560608801526116dc61164060408301836115a7565b9390610160948560808c01526101a08b01916115d9565b916116d361167f61166b60608401846115a7565b603f198d8803810160a08f015296916115d9565b608083013560c08c015260a083013560e08c01528a6101009660c0850135888301526116c361012060e087013581850152610140998701358a8501528601866115a7565b92909188828603019101526115d9565b938101906115a7565b91888403016101808901526115d9565b930152565b806116f95750565b600080808093338219f1503d15610283573d611714816105cf565b9061172260405192836105ad565b8152600060203d92013e565b50634e487b7160e01b600052603260045260246000fd5b9190811015611756575b60051b0190565b61175e61172e565b61174f565b3561064c81610267565b90916117869281101561178a575b60051b81019061153d565b9091565b61179261172e565b61177b565b919060408382031261002357825167ffffffffffffffff81116100235783019080601f83011215610023578151916117ce836105cf565b916117dc60405193846105ad565b83835260208483010111610023576020926117fc91848085019101610c63565b92015161064c81610267565b90816020910312610023575161064c8161044f565b60409061064c939281528160208201520190610c86565b906118489060208082518301019101611797565b90916001600160a01b03809216916118766109d3846001600160a01b03166000526000602052604060002090565b16156118ec57916020916118a093604051809581948293630b135d3f60e11b84526004840161181d565b03915afa9081156118df575b6000916118b7575090565b61064c915060203d81116118d8575b6118d081836105ad565b810190611808565b503d6118c6565b6118e76114c6565b6118ac565b6040516326cc3fab60e21b81526001600160a01b0383166004820152602490fd5b916000928392602083519301915af1604051903d6000833e1561192d5750565b3d90fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141580611982575b61196a57565b604051634776242160e01b8152336004820152602490fd5b5030331415611964565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119be57565b60405163e6fce6a560e01b8152336004820152602490fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4548015610021576000808092368280373360601b3652818060143601925af13d82803e1561192d573d90f35b6001600160a01b03808216918215611a84577f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d49081549155167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c600080a3565b60405163dd449f5f60e01b8152600490fd5b60209067ffffffffffffffff8111611aaf5760051b0190565b61175e610575565b6020918151811015611acc575b60051b010190565b611ad461172e565b611ac4565b6000198114611ae85760010190565b634e487b7160e01b600052601160045260246000fd5b611b1690602060405192828480945193849201610c63565b810103902090565b906002821015611b2b5752565b634e487b7160e01b600052602160045260246000fd5b60209093929193611b56816040810196611b1e565b0152565b9493929091946002821015611b2b5760018203611c05576000808751602089018488f4955b8615611bcf577f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee91611bca611bbb6001600160a01b0393611afe565b96604051938493169583611b41565b0390a4565b7f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a91611bca611bbb6001600160a01b0393611afe565b600080875160208901868589f195611b7f565b3561064c816106a1565b9497969391929795909560009887158015611d5e575b8015611d54575b8015611d4a575b611d1b576001978833148015611ceb575b6107335797969594939291906000985b808a10611c7a5750505050505050505050565b9091929394959697899b50611cdb888888611cd589869f8f81611cc0818e611cb98f968f97611cb36103e483611ccd9b611cc89b611745565b9c611745565b359861176d565b989094611745565b611c18565b9436916105fa565b91611eab565b9b01989796959493929190611c67565b506001600160a01b03611d146109d3336001600160a01b03166000526000602052604060002090565b1615611c57565b60405163470c355760e01b81526004810189905260248101919091526044810182905260648101869052608490fd5b5085821415611c46565b5081811415611c3f565b5080881415611c38565b6001600160a01b0381168015908115611ea0575b50611e7d57611da46112786109d3836001600160a01b03166000526000602052604060002090565b611e5a57600160009081526020527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844090611e5590611e21611e047fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6109d3565b6112ef836001600160a01b03166000526000602052604060002090565b6001600090815260205261133a817fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6112ef565b0390a1565b60405163b29d459560e01b81526001600160a01b03919091166004820152602490fd5b60405163cadb248f60e01b81526001600160a01b03919091166004820152602490fd5b600191501438611d7c565b939293611ebb5a86858585611b5a565b948515611f4e57611f23611f187f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da956001600160a01b0395604051968796338852166020870152604086015260a0606086015260a0850190610c86565b916080840190611b1e565b0390a1337f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8600080a2565b50505050337facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375600080a2565b6001600160a01b03811615611fab5781600092918360208194519301915af1604051903d6000833e1561192d575190565b60405162461bcd60e51b815260206004820152601a60248201527f57726f6e67204d6f64756c6520536574757020416464726573730000000000006044820152606490fdfea26469706673582212205e35c32c65281399d0271586e25905b496a0e4ccfd6e3ff9ffae2c43380c16ac64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/entrypoint/EntryPoint_v0.0.5.json b/packages/common/abis/entrypoint/EntryPoint_v0.0.5.json deleted file mode 100644 index 270d5ded1..000000000 --- a/packages/common/abis/entrypoint/EntryPoint_v0.0.5.json +++ /dev/null @@ -1,1318 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "EntryPoint", - "sourceName": "contracts/core/EntryPoint.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "paid", - "type": "uint256" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bool", - "name": "targetSuccess", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "targetResult", - "type": "bytes" - } - ], - "name": "ExecutionResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "opIndex", - "type": "uint256" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "name": "FailedOp", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAddressResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "SignatureValidationFailed", - "type": "error" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "sigFailed", - "type": "bool" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bytes", - "name": "paymasterContext", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.ReturnInfo", - "name": "returnInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "senderInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "factoryInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "paymasterInfo", - "type": "tuple" - } - ], - "name": "ValidationResult", - "type": "error" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "sigFailed", - "type": "bool" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bytes", - "name": "paymasterContext", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.ReturnInfo", - "name": "returnInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "senderInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "factoryInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "paymasterInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "aggregator", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "stakeInfo", - "type": "tuple" - } - ], - "internalType": "struct IEntryPoint.AggregatorStakeInfo", - "name": "aggregatorInfo", - "type": "tuple" - } - ], - "name": "ValidationResultWithAggregation", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "factory", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "paymaster", - "type": "address" - } - ], - "name": "AccountDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "BeforeExecution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalDeposit", - "type": "uint256" - } - ], - "name": "Deposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "SignatureAggregatorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "withdrawTime", - "type": "uint256" - } - ], - "name": "StakeUnlocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "withdrawAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "StakeWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "actualGasCost", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "actualGasUsed", - "type": "uint256" - } - ], - "name": "UserOperationEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "revertReason", - "type": "bytes" - } - ], - "name": "UserOperationRevertReason", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "withdrawAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrawn", - "type": "event" - }, - { - "inputs": [], - "name": "SIG_VALIDATION_FAILED", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - } - ], - "name": "_validateSenderAndPaymaster", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - } - ], - "name": "addStake", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "depositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "deposits", - "outputs": [ - { - "internalType": "uint112", - "name": "deposit", - "type": "uint112" - }, - { - "internalType": "bool", - "name": "staked", - "type": "bool" - }, - { - "internalType": "uint112", - "name": "stake", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - }, - { - "internalType": "uint48", - "name": "withdrawTime", - "type": "uint48" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getDepositInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint112", - "name": "deposit", - "type": "uint112" - }, - { - "internalType": "bool", - "name": "staked", - "type": "bool" - }, - { - "internalType": "uint112", - "name": "stake", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - }, - { - "internalType": "uint48", - "name": "withdrawTime", - "type": "uint48" - } - ], - "internalType": "struct IStakeManager.DepositInfo", - "name": "info", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint192", - "name": "key", - "type": "uint192" - } - ], - "name": "getNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - } - ], - "name": "getSenderAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - } - ], - "name": "getUserOpHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation[]", - "name": "userOps", - "type": "tuple[]" - }, - { - "internalType": "contract IAggregator", - "name": "aggregator", - "type": "address" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.UserOpsPerAggregator[]", - "name": "opsPerAggregator", - "type": "tuple[]" - }, - { - "internalType": "address payable", - "name": "beneficiary", - "type": "address" - } - ], - "name": "handleAggregatedOps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation[]", - "name": "ops", - "type": "tuple[]" - }, - { - "internalType": "address payable", - "name": "beneficiary", - "type": "address" - } - ], - "name": "handleOps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint192", - "name": "key", - "type": "uint192" - } - ], - "name": "incrementNonce", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - } - ], - "internalType": "struct EntryPoint.MemoryUserOp", - "name": "mUserOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "contextOffset", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - } - ], - "internalType": "struct EntryPoint.UserOpInfo", - "name": "opInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "context", - "type": "bytes" - } - ], - "name": "innerHandleOp", - "outputs": [ - { - "internalType": "uint256", - "name": "actualGasCost", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint192", - "name": "", - "type": "uint192" - } - ], - "name": "nonceSequenceNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "op", - "type": "tuple" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "targetCallData", - "type": "bytes" - } - ], - "name": "simulateHandleOp", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - } - ], - "name": "simulateValidation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unlockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - } - ], - "name": "withdrawStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "withdrawAmount", - "type": "uint256" - } - ], - "name": "withdrawTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60a080604052346200008957600160025561022c8181016001600160401b038111838210176200007357829162005d18833903906000f080156200006757608052604051615c8990816200008f82396080518181816113df01528181613e9501526141b60152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080806040523461001657610210908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033", - "deployedBytecode": "0x60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/entrypoint/EntryPoint_v0.0.6.json b/packages/common/abis/entrypoint/EntryPoint_v0.0.6.json deleted file mode 100644 index 270d5ded1..000000000 --- a/packages/common/abis/entrypoint/EntryPoint_v0.0.6.json +++ /dev/null @@ -1,1318 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "EntryPoint", - "sourceName": "contracts/core/EntryPoint.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "paid", - "type": "uint256" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bool", - "name": "targetSuccess", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "targetResult", - "type": "bytes" - } - ], - "name": "ExecutionResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "opIndex", - "type": "uint256" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "name": "FailedOp", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAddressResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "SignatureValidationFailed", - "type": "error" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "sigFailed", - "type": "bool" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bytes", - "name": "paymasterContext", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.ReturnInfo", - "name": "returnInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "senderInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "factoryInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "paymasterInfo", - "type": "tuple" - } - ], - "name": "ValidationResult", - "type": "error" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "sigFailed", - "type": "bool" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bytes", - "name": "paymasterContext", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.ReturnInfo", - "name": "returnInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "senderInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "factoryInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "paymasterInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "aggregator", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "stakeInfo", - "type": "tuple" - } - ], - "internalType": "struct IEntryPoint.AggregatorStakeInfo", - "name": "aggregatorInfo", - "type": "tuple" - } - ], - "name": "ValidationResultWithAggregation", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "factory", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "paymaster", - "type": "address" - } - ], - "name": "AccountDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "BeforeExecution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalDeposit", - "type": "uint256" - } - ], - "name": "Deposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "SignatureAggregatorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "withdrawTime", - "type": "uint256" - } - ], - "name": "StakeUnlocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "withdrawAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "StakeWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "actualGasCost", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "actualGasUsed", - "type": "uint256" - } - ], - "name": "UserOperationEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "revertReason", - "type": "bytes" - } - ], - "name": "UserOperationRevertReason", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "withdrawAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrawn", - "type": "event" - }, - { - "inputs": [], - "name": "SIG_VALIDATION_FAILED", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - } - ], - "name": "_validateSenderAndPaymaster", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - } - ], - "name": "addStake", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "depositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "deposits", - "outputs": [ - { - "internalType": "uint112", - "name": "deposit", - "type": "uint112" - }, - { - "internalType": "bool", - "name": "staked", - "type": "bool" - }, - { - "internalType": "uint112", - "name": "stake", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - }, - { - "internalType": "uint48", - "name": "withdrawTime", - "type": "uint48" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getDepositInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint112", - "name": "deposit", - "type": "uint112" - }, - { - "internalType": "bool", - "name": "staked", - "type": "bool" - }, - { - "internalType": "uint112", - "name": "stake", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - }, - { - "internalType": "uint48", - "name": "withdrawTime", - "type": "uint48" - } - ], - "internalType": "struct IStakeManager.DepositInfo", - "name": "info", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint192", - "name": "key", - "type": "uint192" - } - ], - "name": "getNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - } - ], - "name": "getSenderAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - } - ], - "name": "getUserOpHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation[]", - "name": "userOps", - "type": "tuple[]" - }, - { - "internalType": "contract IAggregator", - "name": "aggregator", - "type": "address" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.UserOpsPerAggregator[]", - "name": "opsPerAggregator", - "type": "tuple[]" - }, - { - "internalType": "address payable", - "name": "beneficiary", - "type": "address" - } - ], - "name": "handleAggregatedOps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation[]", - "name": "ops", - "type": "tuple[]" - }, - { - "internalType": "address payable", - "name": "beneficiary", - "type": "address" - } - ], - "name": "handleOps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint192", - "name": "key", - "type": "uint192" - } - ], - "name": "incrementNonce", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - } - ], - "internalType": "struct EntryPoint.MemoryUserOp", - "name": "mUserOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "contextOffset", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - } - ], - "internalType": "struct EntryPoint.UserOpInfo", - "name": "opInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "context", - "type": "bytes" - } - ], - "name": "innerHandleOp", - "outputs": [ - { - "internalType": "uint256", - "name": "actualGasCost", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint192", - "name": "", - "type": "uint192" - } - ], - "name": "nonceSequenceNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "op", - "type": "tuple" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "targetCallData", - "type": "bytes" - } - ], - "name": "simulateHandleOp", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - } - ], - "name": "simulateValidation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unlockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - } - ], - "name": "withdrawStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "withdrawAmount", - "type": "uint256" - } - ], - "name": "withdrawTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60a080604052346200008957600160025561022c8181016001600160401b038111838210176200007357829162005d18833903906000f080156200006757608052604051615c8990816200008f82396080518181816113df01528181613e9501526141b60152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080806040523461001657610210908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033", - "deployedBytecode": "0x60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/misc/AddressResolver.json b/packages/common/abis/misc/AddressResolver.json deleted file mode 100644 index 899d2623f..000000000 --- a/packages/common/abis/misc/AddressResolver.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "AddressResolver", - "sourceName": "contracts/smart-account/utils/AddressResolver.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_v1Factory", - "type": "address" - }, - { - "internalType": "address", - "name": "_v2Factory", - "type": "address" - }, - { - "internalType": "address", - "name": "_ecdsaModule", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ecdsaOwnershipModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_eoa", - "type": "address" - }, - { - "internalType": "uint8", - "name": "_maxIndex", - "type": "uint8" - } - ], - "name": "resolveAddresses", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "accountAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "factoryAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "currentImplementation", - "type": "address" - }, - { - "internalType": "string", - "name": "currentVersion", - "type": "string" - }, - { - "internalType": "string", - "name": "factoryVersion", - "type": "string" - }, - { - "internalType": "uint256", - "name": "deploymentIndex", - "type": "uint256" - } - ], - "internalType": "struct IAddressResolver.SmartAccountResult[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_eoa", - "type": "address" - }, - { - "internalType": "uint8", - "name": "_maxIndex", - "type": "uint8" - }, - { - "internalType": "address", - "name": "_moduleAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_moduleSetupData", - "type": "bytes" - } - ], - "name": "resolveAddressesFlexibleForV2", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "accountAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "factoryAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "currentImplementation", - "type": "address" - }, - { - "internalType": "string", - "name": "currentVersion", - "type": "string" - }, - { - "internalType": "string", - "name": "factoryVersion", - "type": "string" - }, - { - "internalType": "uint256", - "name": "deploymentIndex", - "type": "uint256" - } - ], - "internalType": "struct IAddressResolver.SmartAccountResult[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_eoa", - "type": "address" - }, - { - "internalType": "uint8", - "name": "_maxIndex", - "type": "uint8" - } - ], - "name": "resolveAddressesV1", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "accountAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "factoryAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "currentImplementation", - "type": "address" - }, - { - "internalType": "string", - "name": "currentVersion", - "type": "string" - }, - { - "internalType": "string", - "name": "factoryVersion", - "type": "string" - }, - { - "internalType": "uint256", - "name": "deploymentIndex", - "type": "uint256" - } - ], - "internalType": "struct IAddressResolver.SmartAccountResult[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "smartAccountFactoryV1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "smartAccountFactoryV2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60e0346200011757601f6200124738819003918201601f19168301916001600160401b038311848410176200011c5780849260609460405283398101031262000117576200004d8162000132565b906200006a6040620000626020840162000132565b920162000132565b916200009f6001600160a01b0362000086818416151562000147565b62000095818516151562000147565b8416151562000147565b60805260a05260c0526040516110b2908162000195823960805181818160e601528181610311015281816104700152818161071b015281816108f60152610c2b015260a0518181816104e8015281816105c40152818161080c015281816109cd0152610aaa015260c051818181607e01526109980152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200011757565b156200014f57565b60405162461bcd60e51b815260206004820152601960248201527f5265717569726564206e6f6e2d7a65726f2061646472657373000000000000006044820152606490fdfe6080604052600436101561001257600080fd5b60003560e01c806326bbd86c146108305780632819f31c146107ec578063315f3c03146103355780635acdcdc6146102f15780638d440ec2146100a75763c866cae31461005e57600080fd5b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100a25760403660031901126100a2576100c0610cfc565b60ff6100ca610d12565b166100d481610ec6565b9160009160006001600160a01b0392837f000000000000000000000000000000000000000000000000000000000000000016915b83811061016157868661011a81610ec6565b9160005b82811061013757604051806101338682610d6a565b0390f35b8061014460019284610fde565b5161014f8287610fde565b5261015a8186610fde565b500161011e565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081604481875afa90811561028b576000916102d2575b508581161515806102c8575b6101b6575b50600101610108565b90956040519063557887a160e11b82526020826004818a87165afa91821561028b57600092610297575b506040516001621794a360e21b03198152926000846004818b85165afa801561028b5788600195948695600093610266575b50816040519461022186610e22565b168452886020850152166040830152606082015261023d610fc0565b60808201528860a0820152610252828b610fde565b5261025d818a610fde565b500195906101ad565b6102849193503d806000833e61027c8183610e70565b810190610f5e565b918d610212565b6040513d6000823e3d90fd5b6102ba91925060203d6020116102c1575b6102b28183610e70565b810190610f3f565b90896101e0565b503d6102a8565b50803b15156101a8565b6102eb915060203d6020116102c1576102b28183610e70565b8861019c565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760803660031901126100a25761034e610cfc565b610356610d12565b906001600160a01b0360443516604435036100a2576064359167ffffffffffffffff83116100a257366023840112156100a257826004013561039781610e92565b936103a56040519586610e70565b81855236602483830101116100a2578160009260246020930183880137850101526103da60ff6103d483611008565b16610ec6565b9260009260005b60ff841681106104395785856103f681610ec6565b9160005b82811061040f57604051806101338682610d6a565b8061041c60019284610fde565b516104278287610fde565b526104328186610fde565b50016103fa565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b576000916107cd575b506001600160a01b0381161515806107c3575b610696575b50604051632e7a1a8360e01b8152602081806104dc858860443560048501611033565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610677575b506001600160a01b03811615158061066d575b61053a575b506001016103e1565b90946040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b5760009261064c575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610626575b506001600160a01b039081604051946105be86610e22565b168452817f000000000000000000000000000000000000000000000000000000000000000016602085015216604083015260608201526105fc61105e565b60808201528860a0820152610611828b610fde565b5261061c818a610fde565b5001959150610531565b6001600160a01b03919250610645903d806000833e61027c8183610e70565b91906105a6565b61066691925060203d6020116102c1576102b28183610e70565b908861056b565b50803b151561052c565b610690915060203d6020116102c1576102b28183610e70565b87610519565b60405163557887a160e11b81529195906020836004816001600160a01b0385165afa92831561028b576000936107a2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b5760019460009261077c575b506001600160a01b0390816040519461071586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610753610fc0565b60808201528660a08201526107688289610fde565b526107738188610fde565b500193866104b9565b6001600160a01b0391925061079b903d806000833e61027c8183610e70565b91906106fd565b6107bc91935060203d6020116102c1576102b28183610e70565b91886106c7565b50803b15156104b4565b6107e6915060203d6020116102c1576102b28183610e70565b876104a1565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760403660031901126100a257610849610cfc565b610851610d12565b61085f60ff6103d483611008565b9160009160005b60ff821681106108bf5750505061087c81610ec6565b9160005b82811061089557604051806101338682610d6a565b806108a260019284610fde565b516108ad8287610fde565b526108b88186610fde565b5001610880565b604051631acd17f560e31b81526001600160a01b038416600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610cdd575b506001600160a01b038116151580610cd3575b610ba6575b5060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff831117610b9257506040819052632e7a1a8360e01b8152602081605f19846109c087827f000000000000000000000000000000000000000000000000000000000000000060648201611033565b0301816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa91821561028b57600092610b5d575b50506001600160a01b038116151580610b53575b610a20575b50600101610866565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b57600092610b32575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610b0c575b506001600160a01b03908160405194610aa486610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610ae261105e565b60808201528760a0820152610af7828a610fde565b52610b028189610fde565b5001949150610a17565b6001600160a01b03919250610b2b903d806000833e61027c8183610e70565b9190610a8c565b610b4c91925060203d6020116102c1576102b28183610e70565b9087610a51565b50803b1515610a12565b610b8392506060906020903d602011610b8a575b610b7b8285610e70565b010190610f3f565b86806109fe565b3d9150610b71565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b81529194906020836004816001600160a01b0385165afa92831561028b57600093610cb2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b57600194600092610c8c575b506001600160a01b03908160405194610c2586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610c63610fc0565b60808201528560a0820152610c788288610fde565b52610c838187610fde565b5001928561093f565b6001600160a01b03919250610cab903d806000833e61027c8183610e70565b9190610c0d565b610ccc91935060203d6020116102c1576102b28183610e70565b9187610bd7565b50803b151561093a565b610cf6915060203d6020116102c1576102b28183610e70565b86610927565b600435906001600160a01b03821682036100a257565b6024359060ff821682036100a257565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b90602091610d5e81518092818552858086019101610d22565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610d9f575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610e07610df46060808501519060c08091860152840190610d45565b6080808501519084830390850152610d45565b9160a080910151910152990194019401929594939190610d8e565b60c0810190811067ffffffffffffffff821117610e3e57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610e3e57604052565b90601f8019910116810190811067ffffffffffffffff821117610e3e57604052565b67ffffffffffffffff8111610e3e57601f01601f191660200190565b67ffffffffffffffff8111610e3e5760051b60200190565b90610ed082610eae565b604090610edf82519182610e70565b8381528093610ef0601f1991610eae565b019160005b838110610f025750505050565b6020908251610f1081610e22565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610ef5565b908160209103126100a257516001600160a01b03811681036100a25790565b6020818303126100a25780519067ffffffffffffffff82116100a2570181601f820112156100a2578051610f9181610e92565b92610f9f6040519485610e70565b818452602082840101116100a257610fbd9160208085019101610d22565b90565b60405190610fcd82610e54565b6002825261763160f01b6020830152565b8051821015610ff25760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60011b906101fe60fe83169216820361101d57565b634e487b7160e01b600052601160045260246000fd5b939291611059906001600160a01b03604093168652606060208701526060860190610d45565b930152565b6040519061106b82610e54565b60028252613b1960f11b602083015256fea264697066735822122083951a990433399478b293d1c860c5b725a11f7db47b61e057d189f59c9adeeb64736f6c63430008110033", - "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c806326bbd86c146108305780632819f31c146107ec578063315f3c03146103355780635acdcdc6146102f15780638d440ec2146100a75763c866cae31461005e57600080fd5b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100a25760403660031901126100a2576100c0610cfc565b60ff6100ca610d12565b166100d481610ec6565b9160009160006001600160a01b0392837f000000000000000000000000000000000000000000000000000000000000000016915b83811061016157868661011a81610ec6565b9160005b82811061013757604051806101338682610d6a565b0390f35b8061014460019284610fde565b5161014f8287610fde565b5261015a8186610fde565b500161011e565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081604481875afa90811561028b576000916102d2575b508581161515806102c8575b6101b6575b50600101610108565b90956040519063557887a160e11b82526020826004818a87165afa91821561028b57600092610297575b506040516001621794a360e21b03198152926000846004818b85165afa801561028b5788600195948695600093610266575b50816040519461022186610e22565b168452886020850152166040830152606082015261023d610fc0565b60808201528860a0820152610252828b610fde565b5261025d818a610fde565b500195906101ad565b6102849193503d806000833e61027c8183610e70565b810190610f5e565b918d610212565b6040513d6000823e3d90fd5b6102ba91925060203d6020116102c1575b6102b28183610e70565b810190610f3f565b90896101e0565b503d6102a8565b50803b15156101a8565b6102eb915060203d6020116102c1576102b28183610e70565b8861019c565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760803660031901126100a25761034e610cfc565b610356610d12565b906001600160a01b0360443516604435036100a2576064359167ffffffffffffffff83116100a257366023840112156100a257826004013561039781610e92565b936103a56040519586610e70565b81855236602483830101116100a2578160009260246020930183880137850101526103da60ff6103d483611008565b16610ec6565b9260009260005b60ff841681106104395785856103f681610ec6565b9160005b82811061040f57604051806101338682610d6a565b8061041c60019284610fde565b516104278287610fde565b526104328186610fde565b50016103fa565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b576000916107cd575b506001600160a01b0381161515806107c3575b610696575b50604051632e7a1a8360e01b8152602081806104dc858860443560048501611033565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610677575b506001600160a01b03811615158061066d575b61053a575b506001016103e1565b90946040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b5760009261064c575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610626575b506001600160a01b039081604051946105be86610e22565b168452817f000000000000000000000000000000000000000000000000000000000000000016602085015216604083015260608201526105fc61105e565b60808201528860a0820152610611828b610fde565b5261061c818a610fde565b5001959150610531565b6001600160a01b03919250610645903d806000833e61027c8183610e70565b91906105a6565b61066691925060203d6020116102c1576102b28183610e70565b908861056b565b50803b151561052c565b610690915060203d6020116102c1576102b28183610e70565b87610519565b60405163557887a160e11b81529195906020836004816001600160a01b0385165afa92831561028b576000936107a2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b5760019460009261077c575b506001600160a01b0390816040519461071586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610753610fc0565b60808201528660a08201526107688289610fde565b526107738188610fde565b500193866104b9565b6001600160a01b0391925061079b903d806000833e61027c8183610e70565b91906106fd565b6107bc91935060203d6020116102c1576102b28183610e70565b91886106c7565b50803b15156104b4565b6107e6915060203d6020116102c1576102b28183610e70565b876104a1565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760403660031901126100a257610849610cfc565b610851610d12565b61085f60ff6103d483611008565b9160009160005b60ff821681106108bf5750505061087c81610ec6565b9160005b82811061089557604051806101338682610d6a565b806108a260019284610fde565b516108ad8287610fde565b526108b88186610fde565b5001610880565b604051631acd17f560e31b81526001600160a01b038416600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610cdd575b506001600160a01b038116151580610cd3575b610ba6575b5060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff831117610b9257506040819052632e7a1a8360e01b8152602081605f19846109c087827f000000000000000000000000000000000000000000000000000000000000000060648201611033565b0301816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa91821561028b57600092610b5d575b50506001600160a01b038116151580610b53575b610a20575b50600101610866565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b57600092610b32575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610b0c575b506001600160a01b03908160405194610aa486610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610ae261105e565b60808201528760a0820152610af7828a610fde565b52610b028189610fde565b5001949150610a17565b6001600160a01b03919250610b2b903d806000833e61027c8183610e70565b9190610a8c565b610b4c91925060203d6020116102c1576102b28183610e70565b9087610a51565b50803b1515610a12565b610b8392506060906020903d602011610b8a575b610b7b8285610e70565b010190610f3f565b86806109fe565b3d9150610b71565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b81529194906020836004816001600160a01b0385165afa92831561028b57600093610cb2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b57600194600092610c8c575b506001600160a01b03908160405194610c2586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610c63610fc0565b60808201528560a0820152610c788288610fde565b52610c838187610fde565b5001928561093f565b6001600160a01b03919250610cab903d806000833e61027c8183610e70565b9190610c0d565b610ccc91935060203d6020116102c1576102b28183610e70565b9187610bd7565b50803b151561093a565b610cf6915060203d6020116102c1576102b28183610e70565b86610927565b600435906001600160a01b03821682036100a257565b6024359060ff821682036100a257565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b90602091610d5e81518092818552858086019101610d22565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610d9f575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610e07610df46060808501519060c08091860152840190610d45565b6080808501519084830390850152610d45565b9160a080910151910152990194019401929594939190610d8e565b60c0810190811067ffffffffffffffff821117610e3e57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610e3e57604052565b90601f8019910116810190811067ffffffffffffffff821117610e3e57604052565b67ffffffffffffffff8111610e3e57601f01601f191660200190565b67ffffffffffffffff8111610e3e5760051b60200190565b90610ed082610eae565b604090610edf82519182610e70565b8381528093610ef0601f1991610eae565b019160005b838110610f025750505050565b6020908251610f1081610e22565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610ef5565b908160209103126100a257516001600160a01b03811681036100a25790565b6020818303126100a25780519067ffffffffffffffff82116100a2570181601f820112156100a2578051610f9181610e92565b92610f9f6040519485610e70565b818452602082840101116100a257610fbd9160208085019101610d22565b90565b60405190610fcd82610e54565b6002825261763160f01b6020830152565b8051821015610ff25760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60011b906101fe60fe83169216820361101d57565b634e487b7160e01b600052601160045260246000fd5b939291611059906001600160a01b03604093168652606060208701526060860190610d45565b930152565b6040519061106b82610e54565b60028252613b1960f11b602083015256fea264697066735822122083951a990433399478b293d1c860c5b725a11f7db47b61e057d189f59c9adeeb64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/package.json b/packages/common/package.json deleted file mode 100644 index e11b71443..000000000 --- a/packages/common/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "@biconomy/common", - "version": "3.1.1", - "description": "common utils to be used for aa transactions", - "keywords": [ - "utils" - ], - "author": "livingrockrises ", - "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", - "license": "MIT", - "main": "dist/src/index.js", - "files": [ - "dist/*", - "README.md" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" - }, - "scripts": { - "clear": "rm -rf dist artifacts cache src/typechain", - "hardhat-deploy": "hardhat deploy", - "hardhat-node": "hardhat node", - "lint-fix": "eslint -f unix . --fix", - "watch-tsc": "tsc -w --preserveWatchOutput", - "gen:types": "typechain --target=ethers-v5 --out-dir=src/typechain 'abis/*/*.json'", - "tsc": "tsc", - "test": "jest tests/**/*.spec.ts --runInBand", - "test:file": "jest --config=../../jest.config.js --runInBand", - "test:run": "jest tests/**/*.spec.ts --runInBand", - "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && npm run gen:types && tsc", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" - }, - "bugs": { - "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" - }, - "dependencies": { - "@account-abstraction/contracts": "^0.6.0", - "@biconomy/core-types": "^3.1.1", - "@biconomy/node-client": "^3.1.1", - "@ethersproject/abi": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/providers": "^5.7.0", - "@openzeppelin/contracts": "^4.7.3", - "@typechain/ethers-v5": "^10.2.0", - "concurrently": "^7.4.0", - "debug": "^4.3.4", - "ethers": "^5.7.0", - "node-fetch": "^2.7.0", - "typechain": "^8.1.1", - "viem": "^1.16.5" - }, - "devDependencies": { - "@nomicfoundation/hardhat-toolbox": "^1.0.2", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "hardhat": "^2.11.0" - } -} diff --git a/packages/common/src/Constants.ts b/packages/common/src/Constants.ts deleted file mode 100644 index 4c291a810..000000000 --- a/packages/common/src/Constants.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { ChainId } from "@biconomy/core-types"; - -export const NODE_CLIENT_URL = "https://sdk-backend.prod.biconomy.io/v1"; - -// eslint-disable-next-line no-unused-vars -export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { - [ChainId.MAINNET]: "https://rpc.ankr.com/eth", - [ChainId.GOERLI]: "https://rpc.ankr.com/eth_goerli", - [ChainId.POLYGON_MUMBAI]: "https://rpc.ankr.com/polygon_mumbai", - [ChainId.POLYGON_MAINNET]: "https://rpc.ankr.com/polygon", - [ChainId.BSC_TESTNET]: "https://endpoints.omniatech.io/v1/bsc/testnet/public", - [ChainId.BSC_MAINNET]: "https://rpc.ankr.com/bsc", - [ChainId.POLYGON_ZKEVM_TESTNET]: "https://rpc.public.zkevm-test.net", - [ChainId.POLYGON_ZKEVM_MAINNET]: "https://rpc.ankr.com/polygon_zkevm", - [ChainId.ARBITRUM_GOERLI_TESTNET]: "https://goerli-rollup.arbitrum.io/rpc", - [ChainId.ARBITRUM_ONE_MAINNET]: "https://rpc.ankr.com/arbitrum", - [ChainId.ARBITRUM_NOVA_MAINNET]: "https://nova.arbitrum.io/rpc", - [ChainId.OPTIMISM_MAINNET]: "https://mainnet.optimism.io", - [ChainId.OPTIMISM_GOERLI_TESTNET]: "https://goerli.optimism.io", - [ChainId.AVALANCHE_MAINNET]: "https://api.avax.network/ext/bc/C/rpc", - [ChainId.AVALANCHE_TESTNET]: "https://api.avax-test.network/ext/bc/C/rpc", - [ChainId.MOONBEAM_MAINNET]: "https://rpc.api.moonbeam.network", - [ChainId.BASE_GOERLI_TESTNET]: "https://goerli.base.org", - [ChainId.BASE_MAINNET]: "https://developer-access-mainnet.base.org", - [ChainId.LINEA_TESTNET]: "https://rpc.goerli.linea.build", - [ChainId.LINEA_MAINNET]: "https://rpc.linea.build", - [ChainId.MANTLE_MAINNET]: "https://rpc.mantle.xyz", - [ChainId.MANTLE_TESTNET]: "https://rpc.testnet.mantle.xyz", - [ChainId.OPBNB_MAINNET]: "https://opbnb-mainnet-rpc.bnbchain.org", - [ChainId.OPBNB_TESTNET]: "https://opbnb-testnet-rpc.bnbchain.org", - [ChainId.ASTAR_MAINNET]: "https://evm.astar.network", - [ChainId.ASTAR_TESTNET]: "https://evm.shibuya.astar.network", - [ChainId.CHILIZ_MAINNET]: "https://rpc.ankr.com/chiliz", - [ChainId.CHILIZ_TESTNET]: "https://spicy-rpc.chiliz.com", -}; diff --git a/packages/common/src/ContractsInstances.ts b/packages/common/src/ContractsInstances.ts deleted file mode 100644 index e50294353..000000000 --- a/packages/common/src/ContractsInstances.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { SmartAccountType } from "@biconomy/core-types"; -import { JsonRpcProvider } from "@ethersproject/providers"; -import { IEntryPoint } from "@account-abstraction/contracts"; -import { - EntryPoint_v005__factory, - EntryPoint_v006__factory, - SmartAccount_v100, - SmartAccount_v200, - SmartAccountFactory_v100, - SmartAccountFactory_v200, - SmartAccountFactory_v100__factory, - SmartAccountFactory_v200__factory, - SmartAccount_v100__factory, - SmartAccount_v200__factory, -} from "./typechain"; - -export type GetContractInstanceDto = { - smartAccountType: SmartAccountType; - version: string; - contractAddress: string; - provider: JsonRpcProvider; -}; - -// Note: Review return types while adding new implementations -export function getSAProxyContract(contractInstanceDto: GetContractInstanceDto): SmartAccount_v100 | SmartAccount_v200 { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; - switch (version) { - case "V1_0_0": - if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccount_v100__factory.connect(contractAddress, provider); - } - break; - case "V2_0_0": - if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccount_v200__factory.connect(contractAddress, provider); - } - break; - default: - return SmartAccount_v200__factory.connect(contractAddress, provider); - } - throw new Error("Invalid version or smartAccountType provided for proxy contract instance"); -} - -export function getSAFactoryContract(contractInstanceDto: GetContractInstanceDto): SmartAccountFactory_v100 | SmartAccountFactory_v200 { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; - - switch (version) { - case "V1_0_0": - if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccountFactory_v100__factory.connect(contractAddress, provider); - } - break; - case "V2_0_0": - if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccountFactory_v200__factory.connect(contractAddress, provider); - } - break; - default: - return SmartAccountFactory_v200__factory.connect(contractAddress, provider); - } - throw new Error("Invalid version or smartAccountType provided for factory contract instance"); -} - -export function getEntryPointContract(contractInstanceDto: GetContractInstanceDto): IEntryPoint { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; - - switch (version) { - case "V0_0_5": - if (smartAccountType === SmartAccountType.BICONOMY) { - return EntryPoint_v005__factory.connect(contractAddress, provider); - } - break; - case "V0_0_6": - if (smartAccountType === SmartAccountType.BICONOMY) { - return EntryPoint_v006__factory.connect(contractAddress, provider); - } - break; - default: - return EntryPoint_v006__factory.connect(contractAddress, provider); - } - throw new Error("Invalid version or smartAccountType provided for entrypoint contract instance"); -} diff --git a/packages/common/src/ERC4337Utils.ts b/packages/common/src/ERC4337Utils.ts deleted file mode 100644 index 435e82746..000000000 --- a/packages/common/src/ERC4337Utils.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { defaultAbiCoder, hexConcat, hexlify, keccak256 } from "ethers/lib/utils"; -import { ethers } from "ethers"; -import Debug from "debug"; -import { ChainId, UserOperation } from "@biconomy/core-types"; - -const debug = Debug("aa.utils"); - -export const AddressZero = ethers.constants.AddressZero; - -export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101]; - -// reverse "Deferrable" or "PromiseOrValue" fields -/* eslint-disable @typescript-eslint/no-explicit-any */ -export type NotPromise = { - [P in keyof T]: Exclude>; -}; - -// function encode(typevalues: Array<{ type: string; val: any }>, forSignature: boolean): string { -// const types = typevalues.map((typevalue) => -// typevalue.type === 'bytes' && forSignature ? 'bytes32' : typevalue.type -// ) -// const values = typevalues.map((typevalue) => -// typevalue.type === 'bytes' && forSignature ? keccak256(typevalue.val) : typevalue.val -// ) -// return defaultAbiCoder.encode(types, values) -// } - -/** - * pack the userOperation - * @param op - * @param forSignature "true" if the hash is needed to calculate the getUserOpHash() - * "false" to pack entire UserOp, for calculating the calldata cost of putting it on-chain. - */ -export function packUserOp(op: Partial, forSignature = true): string { - if (!op.initCode || !op.callData || !op.paymasterAndData) throw new Error("Missing userOp properties"); - - if (forSignature) { - return defaultAbiCoder.encode( - ["address", "uint256", "bytes32", "bytes32", "uint256", "uint256", "uint256", "uint256", "uint256", "bytes32"], - [ - op.sender, - op.nonce, - keccak256(op.initCode), - keccak256(op.callData), - op.callGasLimit, - op.verificationGasLimit, - op.preVerificationGas, - op.maxFeePerGas, - op.maxPriorityFeePerGas, - keccak256(op.paymasterAndData), - ], - ); - } else { - // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) - return defaultAbiCoder.encode( - ["address", "uint256", "bytes", "bytes", "uint256", "uint256", "uint256", "uint256", "uint256", "bytes", "bytes"], - [ - op.sender, - op.nonce, - op.initCode, - op.callData, - op.callGasLimit, - op.verificationGasLimit, - op.preVerificationGas, - op.maxFeePerGas, - op.maxPriorityFeePerGas, - op.paymasterAndData, - op.signature, - ], - ); - } -} - -/** - * calculate the userOpHash of a given userOperation. - * The userOpHash is a hash of all UserOperation fields, except the "signature" field. - * The entryPoint uses this value in the emitted UserOperationEvent. - * A wallet may use this value as the hash to sign (the SampleWallet uses this method) - * @param op - * @param entryPoint - * @param chainId - */ -export function getUserOpHash(op: Partial, entryPoint: string, chainId: number): string { - const userOpHash = keccak256(packUserOp(op, true)); - const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, entryPoint, chainId]); - return keccak256(enc); -} - -const ErrorSig = keccak256(Buffer.from("Error(string)")).slice(0, 10); // 0x08c379a0 -const FailedOpSig = keccak256(Buffer.from("FailedOp(uint256,address,string)")).slice(0, 10); // 0x00fa072b - -interface DecodedError { - message: string; - opIndex?: number; - paymaster?: string; -} - -/** - * decode bytes thrown by revert as Error(message) or FailedOp(opIndex,paymaster,message) - */ -export function decodeErrorReason(error: string): DecodedError | undefined { - debug("decoding", error); - if (error.startsWith(ErrorSig)) { - const [message] = defaultAbiCoder.decode(["string"], "0x" + error.substring(10)); - return { message }; - } else if (error.startsWith(FailedOpSig)) { - const resultSet = defaultAbiCoder.decode(["uint256", "address", "string"], "0x" + error.substring(10)); - let [paymaster, message] = resultSet; - const [opIndex] = resultSet; - message = `FailedOp: ${message as string}`; - if (paymaster.toString() !== ethers.constants.AddressZero) { - message = `${message as string} (paymaster ${paymaster as string})`; - } else { - paymaster = undefined; - } - return { - message, - opIndex, - paymaster, - }; - } - return undefined; -} - -/** - * update thrown Error object with our custom FailedOp message, and re-throw it. - * updated both "message" and inner encoded "data" - * tested on geth, hardhat-node - * usage: entryPoint.handleOps().catch(decodeError) - */ -export function rethrowError(e: any): any { - let error = e; - let parent = e; - if (error?.error != null) { - error = error.error; - } - while (error?.data != null) { - parent = error; - error = error.data; - } - const decoded = typeof error === "string" && error.length > 2 ? decodeErrorReason(error) : undefined; - if (decoded != null) { - e.message = decoded.message; - - if (decoded.opIndex != null) { - // helper for chai: convert our FailedOp error into "Error(msg)" - const errorWithMsg = hexConcat([ErrorSig, defaultAbiCoder.encode(["string"], [decoded.message])]); - // modify in-place the error object: - parent.data = errorWithMsg; - } - } - throw e; -} - -/** - * hexlify all members of object, recursively - * @param obj - */ -export function deepHexlify(obj: any): any { - if (typeof obj === "function") { - return undefined; - } - if (obj == null || typeof obj === "string" || typeof obj === "boolean") { - return obj; - } else if (obj._isBigNumber != null || typeof obj !== "object") { - return hexlify(obj).replace(/^0x0/, "0x"); - } - if (Array.isArray(obj)) { - return obj.map((member) => deepHexlify(member)); - } - return Object.keys(obj).reduce( - (set, key) => ({ - ...set, - [key]: deepHexlify(obj[key]), - }), - {}, - ); -} diff --git a/packages/common/src/Logger.ts b/packages/common/src/Logger.ts deleted file mode 100644 index 0bdcae373..000000000 --- a/packages/common/src/Logger.ts +++ /dev/null @@ -1,49 +0,0 @@ -/* eslint-disable no-console */ -/** - * Single class to be used for logging purpose. - * - * @param {any} message Message to be logged - */ -class Logger { - // By default, the logger is not in debug mode. - static isDebug: boolean = process.env.BICONOMY_SDK_DEBUG === "true" ? true : process.env.REACT_APP_BICONOMY_SDK_DEBUG === "true" ? true : false; - - /** - * \x1b[0m is an escape sequence to reset the color of the text - * All color codes used - 31 - Red, 33 - Yellow, 34 - Blue, 35 - Magenta, 36 - Cyan - * log - Magenta[time] Cyan[message]: [value] - * warn - Magenta[time] Yellow[WARN]: Cyan[message]: [value] - * error - Magenta[time] Red[ERROR]: Cyan[message]: [value] - */ - /* eslint-disable @typescript-eslint/no-explicit-any */ - static log(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const logMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[36m${message}\x1b[0m:`; - - if (Logger.isDebug) { - console.log(logMessage, value === undefined ? "" : value); - } - } - - /* eslint-disable @typescript-eslint/no-explicit-any */ - static warn(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const warnMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[33mWARN\x1b[0m: \x1b[36m${message}\x1b[0m`; - - if (Logger.isDebug) { - console.warn(warnMessage, value === undefined ? "" : value); - } - } - - /* eslint-disable @typescript-eslint/no-explicit-any */ - static error(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const errorMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[31mERROR\x1b[0m: \x1b[36m${message}\x1b[0m`; - - if (Logger.isDebug) { - console.error(errorMessage, value === undefined ? "" : value); - } - } -} - -export { Logger }; diff --git a/packages/common/src/Utils.ts b/packages/common/src/Utils.ts deleted file mode 100644 index c97c7bc41..000000000 --- a/packages/common/src/Utils.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { BigNumber, Bytes } from "ethers"; - -/** - * @description this function will return current timestamp in seconds - * @returns Number - */ -export const getTimestampInSeconds = (): number => { - return Math.floor(Date.now() / 1000); -}; - -export const isNullOrUndefined = (value: string | number | bigint | BigNumber | Bytes | undefined): value is undefined => { - return value === null || value === undefined; -}; diff --git a/packages/common/src/httpRequests.ts b/packages/common/src/httpRequests.ts deleted file mode 100644 index d4923d2b6..000000000 --- a/packages/common/src/httpRequests.ts +++ /dev/null @@ -1,86 +0,0 @@ -import fetch from "node-fetch"; -import { Logger } from "./Logger"; - -export enum HttpMethod { - Get = "get", - Post = "post", - Delete = "delete", -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -interface HttpRequest { - url: string; - method: HttpMethod; - body?: Record; - headers?: object; -} - -interface JsonResponse { - result?: any; - error?: string | { code?: number; message?: string; handleOpsCallData?: any }; - message?: string; - msg?: string; -} - -export async function sendRequest({ url, method, body, headers = {} }: HttpRequest): Promise { - Logger.log("jsonRpc request body ", JSON.stringify(body)); - const response = await fetch(url, { - method, - headers: { - ...headers, - Accept: "application/json", - "Content-Type": "application/json", - }, - body: JSON.stringify(body), - }); - - let jsonResponse: JsonResponse | undefined; - try { - jsonResponse = (await response.json()) as JsonResponse; - } catch (error) { - if (!response.ok) { - throw new Error(response.statusText); - } - } - - if (!jsonResponse) { - // Handle the case where jsonResponse is undefined - throw new Error("No response received."); - } - - Logger.log("jsonRpc response ", jsonResponse); - - if (response.ok) { - if (jsonResponse && Object.prototype.hasOwnProperty.call(jsonResponse, "result")) { - return jsonResponse as T; - } - // else - } - const errorObject = { code: response.status, message: response.statusText, data: undefined }; - - if (jsonResponse?.error) { - if (typeof jsonResponse.error === "string") { - const error = jsonResponse.error; - errorObject.code = response.status; - errorObject.message = error; - delete errorObject.data; - throw errorObject; - } else if (typeof jsonResponse.error === "object") { - const error = jsonResponse.error; - errorObject.code = error?.code || 0; - errorObject.message = error?.message || "Unknown Error"; - errorObject.data = error?.handleOpsCallData; - throw errorObject; - } - } - if (jsonResponse?.message) { - errorObject.message = jsonResponse.message; - throw errorObject; - } - if (jsonResponse?.msg) { - errorObject.message = jsonResponse.msg; - throw errorObject; - } - - throw new Error("Unknown Error: Raise an issue here https://github.com/bcnmy/biconomy-client-sdk/issues with reproduction steps"); -} diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts deleted file mode 100644 index a23afa8c6..000000000 --- a/packages/common/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from "./ERC4337Utils"; -export * from "./Logger"; -export * from "./httpRequests"; -export * from "./typechain/index"; -export * from "./Utils"; -export * from "./Constants"; -export * from "./ContractsInstances"; diff --git a/packages/common/tests/ERC4337Utils.spec.ts b/packages/common/tests/ERC4337Utils.spec.ts deleted file mode 100644 index 0290b3042..000000000 --- a/packages/common/tests/ERC4337Utils.spec.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { expect } from "chai"; -import { Hex, toHex } from "viem"; -import { packUserOp } from "../src/ERC4337Utils"; - -describe("packUserOp", () => { - it("should pack a UserOperationStruct object", () => { - const userOp = { - sender: "0x1234567890123456789012345678901234567890" as Hex, - nonce: `0x1` as Hex, - initCode: "0x0987654321098765432109876543210987654321" as Hex, - callData: "0x" as Hex, - callGasLimit: toHex(1000000), - verificationGasLimit: toHex(1000000), - preVerificationGas: toHex(1000000), - maxFeePerGas: toHex(10), - maxPriorityFeePerGas: toHex(1), - paymasterAndData: "0x0987654321098765432109876543210987654321" as Hex, - signature: "0x" as Hex, - }; - const packedUserOp = packUserOp(userOp, false); - expect(packedUserOp).to.equal( - "0x00000000000000000000000012345678901234567890123456789012345678900000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001409876543210987654321098765432109876543210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001409876543210987654321098765432109876543210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - ); - }); - - it("should pack a UserOperationStruct object for signature", () => { - const userOp = { - sender: "0x1234567890123456789012345678901234567890" as Hex, - nonce: `0x1` as Hex, - initCode: "0x0987654321098765432109876543210987654321" as Hex, - callData: "0x" as Hex, - callGasLimit: toHex(1000000), - verificationGasLimit: toHex(1000000), - preVerificationGas: toHex(1000000), - maxFeePerGas: toHex(10), - maxPriorityFeePerGas: toHex(1), - paymasterAndData: "0x0987654321098765432109876543210987654321" as Hex, - signature: "0x" as Hex, - }; - const packedUserOp = packUserOp(userOp, true); - expect(packedUserOp).to.equal( - "0x00000000000000000000000012345678901234567890123456789012345678900000000000000000000000000000000000000000000000000000000000000001a04121637443bf141af4dc01872f24d6933dd1e67581bd12f805a945888da6b0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001a04121637443bf141af4dc01872f24d6933dd1e67581bd12f805a945888da6b0", - ); - }); -}); diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json deleted file mode 100644 index 7584e7676..000000000 --- a/packages/common/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src" - }, - "include": ["./**/*.ts"] -} diff --git a/packages/core-types/CHANGELOG.md b/packages/core-types/CHANGELOG.md deleted file mode 100644 index 5679c227a..000000000 --- a/packages/core-types/CHANGELOG.md +++ /dev/null @@ -1,94 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 3.1.1 (2023-11-09) - - -### Features - -* add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) - - - -## 3.1.0 (2023-09-20) - - -### Bug Fixes - -* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -* build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) -* bundler sync changes ([eb9b30d](https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e)) -* logic update ([41c4aec](https://github.com/bcnmy/biconomy-client-sdk/commit/41c4aec8ab5012b7ad362b2870966bd607e38636)) -* multisend bundle ([5f55587](https://github.com/bcnmy/biconomy-client-sdk/commit/5f55587b63c82a30652843fe619d8b891e495399)) -* optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) - - -### Features - -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) -* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) -* chain integrations ([9af2da0](https://github.com/bcnmy/biconomy-client-sdk/commit/9af2da03820a26ac7d21301c32de041ced6c5e43)) -* fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) - - - - - -## 3.0.0 (2023-08-28) - -### Features - -- base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) - -# 3.1.0-alpha.0 (2023-07-24) - -VERSION bump only - -# 3.1.0-alpha.0 (2023-07-24) - -### Features - -- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - -## 3.1.0-alpha.0 (2023-07-12) - -### Bug Fixes - -- bundler sync changes ([eb9b30d](https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e)) - -## 2.0.2 (2023-06-10) - -- smart account state types to have factory address added - -## 2.0.1 (2023-05-18) - -### Bug Fixes - -- logic update ([41c4aec](https://github.com/bcnmy/biconomy-client-sdk/commit/41c4aec8ab5012b7ad362b2870966bd607e38636)) -- fix build issue in angular for relative path (https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e) - -### Features - -- chain integrations ([9af2da0](https://github.com/bcnmy/biconomy-client-sdk/commit/9af2da03820a26ac7d21301c32de041ced6c5e43)) -- Type added for PaymasterServiceData + reordering of params ([fae8b3a](https://github.com/bcnmy/biconomy-client-sdk/commit/fae8b3a02a5e810a9a40674d27f389b89199bb62)) -- logic changed to accept paymasterServiceData ([6daaf37](https://github.com/bcnmy/biconomy-client-sdk/commit/6daaf37855a13fa6e12fdbab16a7e980b4631475)) -- UserOpGasFields for fetching gas and gas prices from bundler (https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1) -- skipBundlerGasEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) -- fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) - -## 2.0.0 (2023-04-07) - -### Bug Fixes - -- backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -- multisend bundle ([5f55587](https://github.com/bcnmy/biconomy-client-sdk/commit/5f55587b63c82a30652843fe619d8b891e495399)) -- optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) - -## 1.0.0 (2023-01-03) - -### Bug Fixes - -- optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) diff --git a/packages/core-types/README.md b/packages/core-types/README.md deleted file mode 100644 index 4fcf8c7bf..000000000 --- a/packages/core-types/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# `@biconomy/core-types` - -# Biconomy SDK Types - -Common types in the [Biconomy SDK](https://github.com/bcnmy/biconomy-client-sdk) - -### Usage - -for example - -```typescript -import { SmartAccountState, SmartAccountVersion, GasLimit, ChainId } from "@biconomy/core-types"; -``` diff --git a/packages/core-types/package.json b/packages/core-types/package.json deleted file mode 100644 index 61c4da2a8..000000000 --- a/packages/core-types/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "@biconomy/core-types", - "version": "3.1.1", - "description": "Biconomy Client SDK types", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", - "keywords": [ - "Ethereum", - "Gnosis", - "Biconomy", - "SDK" - ], - "scripts": { - "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" - }, - "author": "Biconomy (https://biconomy.io)", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "devDependencies": { - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "prettier": "^2.6.2", - "typescript": "^4.6.3" - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@alchemy/aa-core": "^0.1.0", - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@ethersproject/providers": "^5.7.0", - "ethers": "^5.7.2", - "web3-core": "^1.7.1" - } -} diff --git a/packages/core-types/src/BundlerTypes.ts b/packages/core-types/src/BundlerTypes.ts deleted file mode 100644 index 9397dc7fd..000000000 --- a/packages/core-types/src/BundlerTypes.ts +++ /dev/null @@ -1,8 +0,0 @@ -export type UserOpGasFields = { - maxPriorityFeePerGas: string | null; - maxFeePerGas: string | null; - gasPrice: string | null; - callGasLimit: number; - verificationGasLimit: number; - preVerificationGas: number; -}; diff --git a/packages/core-types/src/ChainsTypes.ts b/packages/core-types/src/ChainsTypes.ts deleted file mode 100644 index 6ab988d6f..000000000 --- a/packages/core-types/src/ChainsTypes.ts +++ /dev/null @@ -1,32 +0,0 @@ -export enum ChainId { - // Ethereum - MAINNET = 1, - GOERLI = 5, - POLYGON_MUMBAI = 80001, - POLYGON_MAINNET = 137, - BSC_TESTNET = 97, - BSC_MAINNET = 56, - POLYGON_ZKEVM_TESTNET = 1442, - POLYGON_ZKEVM_MAINNET = 1101, - ARBITRUM_GOERLI_TESTNET = 421613, - ARBITRUM_ONE_MAINNET = 42161, - ARBITRUM_NOVA_MAINNET = 42170, - OPTIMISM_MAINNET = 10, - OPTIMISM_GOERLI_TESTNET = 420, - AVALANCHE_MAINNET = 43114, - AVALANCHE_TESTNET = 43113, - MOONBEAM_MAINNET = 1284, - BASE_GOERLI_TESTNET = 84531, - BASE_MAINNET = 8453, - LINEA_TESTNET = 59140, - LINEA_MAINNET = 59144, - MANTLE_MAINNET = 5000, - MANTLE_TESTNET = 5001, - OPBNB_MAINNET = 204, - OPBNB_TESTNET = 5611, - ASTAR_MAINNET = 592, - ASTAR_TESTNET = 81, - CHILIZ_MAINNET = 88888, - CHILIZ_TESTNET = 88882, - GANACHE = 1337, //Temp -} diff --git a/packages/core-types/src/PaymasterServiceTypes.ts b/packages/core-types/src/PaymasterServiceTypes.ts deleted file mode 100644 index c5d3f4bb5..000000000 --- a/packages/core-types/src/PaymasterServiceTypes.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type PaymasterServiceDataType = { - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }; -}; diff --git a/packages/core-types/src/Types.ts b/packages/core-types/src/Types.ts deleted file mode 100644 index b4c67cd45..000000000 --- a/packages/core-types/src/Types.ts +++ /dev/null @@ -1,43 +0,0 @@ -// import type { Address } from "viem"; -export type Hex = `0x${string}`; -export type EmptyHex = `0x`; -// based on @account-abstraction/common -export type BigNumberish = string | bigint | number; -export type BytesLike = Uint8Array | string; - -export type SmartAccountVersion = "1.0.1" | "1.0.0" | "1.0.2"; - -export type Transaction = { - to: string; - value?: BigNumberish; - data?: string; -}; - -export type UserOperation = { - /* the origin of the request */ - sender: Hex; // TODO: Address - /* nonce (as hex) of the transaction, returned from the entrypoint for this Address */ - nonce: Hex; - /* the initCode for creating the sender if it does not exist yet, otherwise "0x" */ - initCode: Hex | EmptyHex; - /* the callData passed to the target */ - callData: Hex; - /* Gas value (as hex) used by inner account execution */ - callGasLimit: Hex; - /* Actual gas (as hex) used by the validation of this UserOperation */ - verificationGasLimit: Hex; - /* Gas overhead (as hex) of this UserOperation */ - preVerificationGas: Hex; - /* Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) (as hex)*/ - maxFeePerGas: Hex; - /* Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) (as hex)*/ - maxPriorityFeePerGas: Hex; - /* Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster ("0x" for self-sponsored transaction) */ - paymasterAndData: Hex | EmptyHex; - /* Data passed into the account along with the nonce during the verification step */ - signature: Hex; -}; - -export enum SmartAccountType { - BICONOMY, -} diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts deleted file mode 100644 index dffce0c18..000000000 --- a/packages/core-types/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./Types"; -export * from "./ChainsTypes"; diff --git a/packages/core-types/tests/core-types.spec.ts b/packages/core-types/tests/core-types.spec.ts deleted file mode 100644 index 3f9a6a4bb..000000000 --- a/packages/core-types/tests/core-types.spec.ts +++ /dev/null @@ -1,5 +0,0 @@ -describe("Core Types Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); - }); -}); diff --git a/packages/core-types/tsconfig.json b/packages/core-types/tsconfig.json deleted file mode 100644 index c7ff8535e..000000000 --- a/packages/core-types/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src" - }, - "include": ["src"] -} diff --git a/packages/modules/package.json b/packages/modules/package.json index 47550c536..b82a5eec5 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -24,7 +24,7 @@ "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, - "author": "livingrockrises ", + "author": "Biconomy", "license": "MIT", "files": [ "dist/*", @@ -34,11 +34,8 @@ "access": "public" }, "dependencies": { - "@biconomy/common": "^3.1.1", - "@biconomy/core-types": "^3.1.1", - "@biconomy/node-client": "^3.1.1", - "ethereumjs-util": "^7.1.5", - "ethers": "^5.7.2", - "merkletreejs": "^0.3.9" + "@alchemy/aa-core": "^1.2.2", + "merkletreejs": "^0.3.9", + "viem": "^1.20.3" } } diff --git a/packages/modules/src/BaseValidationModule.ts b/packages/modules/src/BaseValidationModule.ts index 1a1e8cbeb..e6393df4a 100644 --- a/packages/modules/src/BaseValidationModule.ts +++ b/packages/modules/src/BaseValidationModule.ts @@ -1,11 +1,11 @@ -import { Signer } from "ethers"; -import { Bytes } from "ethers/lib/utils"; +import { Hex } from "viem"; +import { WalletClientSigner } from "@alchemy/aa-core"; import { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types"; import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; import { IValidationModule } from "./interfaces/IValidationModule"; export abstract class BaseValidationModule implements IValidationModule { - entryPointAddress: string; + entryPointAddress: Hex; constructor(moduleConfig: BaseValidationModuleConfig) { const { entryPointAddress } = moduleConfig; @@ -13,21 +13,21 @@ export abstract class BaseValidationModule implements IValidationModule { this.entryPointAddress = entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS; } - abstract getAddress(): string; + abstract getAddress(): Hex; - setEntryPointAddress(entryPointAddress: string): void { + setEntryPointAddress(entryPointAddress: Hex): void { this.entryPointAddress = entryPointAddress; } - abstract getInitData(): Promise; + abstract getInitData(): Promise; // Anything required to get dummy signature can be passed as params - abstract getDummySignature(_params?: ModuleInfo): Promise; + abstract getDummySignature(_params?: ModuleInfo): Promise; - abstract getSigner(): Promise; + abstract getSigner(): Promise; // Signer specific or any other additional information can be passed as params - abstract signUserOpHash(_userOpHash: string, _params?: ModuleInfo): Promise; + abstract signUserOpHash(_userOpHash: string, _params?: ModuleInfo): Promise; - abstract signMessage(_message: Bytes | string): Promise; + abstract signMessage(_message: Uint8Array | string): Promise; } diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index ffd273223..562444869 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -1,6 +1,3 @@ -import { Signer, ethers } from "ethers"; -import { Logger } from "@biconomy/common"; -import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from "ethers/lib/utils"; import { ModuleVersion, CreateSessionDataParams, BatchedSessionRouterModuleConfig, ModuleInfo, CreateSessionDataResponse } from "./utils/Types"; import { BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION, @@ -10,17 +7,19 @@ import { import { BaseValidationModule } from "./BaseValidationModule"; import { SessionKeyManagerModule } from "./SessionKeyManagerModule"; import { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; +import { Hex, concat, encodeAbiParameters, keccak256, pad, parseAbiParameters, toBytes, toHex } from "viem"; +import { WalletClientSigner } from "@alchemy/aa-core"; export class BatchedSessionRouterModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; - moduleAddress!: string; + moduleAddress!: Hex; - sessionManagerModuleAddress!: string; + sessionManagerModuleAddress!: Hex; sessionKeyManagerModule!: SessionKeyManagerModule; - readonly mockEcdsaSessionKeySig: string = + readonly mockEcdsaSessionKeySig: Hex = "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; /** @@ -43,7 +42,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; + const moduleAddr = BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } @@ -89,7 +88,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @param sessionParams Information about all the sessions to be used to sign the user operation which has a batch execution * @returns The signature of the user operation */ - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { + async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { const sessionParams = params?.batchSessionParams; if (!sessionParams || sessionParams.length === 0) { throw new Error("Session parameters are not provided"); @@ -100,7 +99,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // signer must be the same for all the sessions const sessionSigner = sessionParams[0].sessionSigner; - const signature = await sessionSigner.signMessage(arrayify(userOpHash)); + const signature = await sessionSigner.signMessage(toBytes(userOpHash)); for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { @@ -129,14 +128,14 @@ export class BatchedSessionRouterModule extends BaseValidationModule { sessionDataTuple.push(sessionSignerData.sessionValidationModule); sessionDataTuple.push(sessionSignerData.sessionKeyData); - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), - hexZeroPad(sessionSignerData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), sessionSignerData.sessionKeyData, ]); - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); + const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(keccak256(leafDataHex)); sessionDataTuple.push(proof); sessionDataTuple.push(sessionParam.additionalSessionData ?? "0x"); @@ -146,10 +145,11 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // Generate the padded signature - const paddedSignature = defaultAbiCoder.encode( - ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], - [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature], - ); + const paddedSignature = encodeAbiParameters(parseAbiParameters("address, tuple(uint48,uint48,address,bytes,bytes32[],bytes)[], bytes"), [ + this.getSessionKeyManagerAddress(), + sessionDataTupleArray, + signature, + ]); return paddedSignature; } @@ -175,21 +175,21 @@ export class BatchedSessionRouterModule extends BaseValidationModule { /** * @returns SessionKeyManagerModule address */ - getAddress(): string { + getAddress(): Hex { return this.moduleAddress; } /** * @returns SessionKeyManagerModule address */ - getSessionKeyManagerAddress(): string { + getSessionKeyManagerAddress(): Hex { return this.sessionManagerModuleAddress; } /** * @remarks This is the version of the module contract */ - async getSigner(): Promise { + async getSigner(): Promise { throw new Error("Method not implemented."); } @@ -197,7 +197,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @remarks This is the dummy signature for the module, used in buildUserOp for bundler estimation * @returns Dummy signature */ - async getDummySignature(params?: ModuleInfo): Promise { + async getDummySignature(params?: ModuleInfo): Promise { const sessionParams = params?.batchSessionParams; if (!sessionParams || sessionParams.length === 0) { throw new Error("Session parameters are not provided"); @@ -237,14 +237,14 @@ export class BatchedSessionRouterModule extends BaseValidationModule { sessionDataTuple.push(sessionSignerData.sessionValidationModule); sessionDataTuple.push(sessionSignerData.sessionKeyData); - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), - hexZeroPad(sessionSignerData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), sessionSignerData.sessionKeyData, ]); - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); + const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(keccak256(leafDataHex)); sessionDataTuple.push(proof); sessionDataTuple.push(sessionParam.additionalSessionData ?? "0x"); @@ -254,28 +254,27 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // Generate the padded signature - const paddedSignature = defaultAbiCoder.encode( - ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], - [this.getSessionKeyManagerAddress(), sessionDataTupleArray, this.mockEcdsaSessionKeySig], - ); - - const dummySig = ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [paddedSignature, this.getAddress()]); + const paddedSignature = encodeAbiParameters(parseAbiParameters("address, tuple(uint48,uint48,address,bytes,bytes32[],bytes)[], bytes"), [ + this.getSessionKeyManagerAddress(), + sessionDataTupleArray, + this.mockEcdsaSessionKeySig, + ]); + const dummySig = encodeAbiParameters(parseAbiParameters("bytes, address"), [paddedSignature, this.getAddress()]); return dummySig; } /** * @remarks Other modules may need additional attributes to build init data */ - async getInitData(): Promise { + async getInitData(): Promise { throw new Error("Method not implemented."); } /** * @remarks This Module dont have knowledge of signer. So, this method is not implemented */ - async signMessage(message: Bytes | string): Promise { - Logger.log("message", message); + async signMessage(_message: Uint8Array | string): Promise { throw new Error("Method not implemented."); } } diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index 9f8d80339..7a2460136 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -1,15 +1,14 @@ -import { Logger } from "@biconomy/common"; -import { Signer, ethers } from "ethers"; -import { Bytes, arrayify } from "ethers/lib/utils"; +import { Hex, encodeFunctionData, getAddress, parseAbi, toBytes } from "viem"; +import { WalletClientSigner } from "@alchemy/aa-core"; import { ECDSAOwnershipValidationModuleConfig, ModuleVersion } from "./utils/Types"; import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; import { BaseValidationModule } from "./BaseValidationModule"; // Could be renamed with suffix API export class ECDSAOwnershipValidationModule extends BaseValidationModule { - signer!: Signer; + signer!: WalletClientSigner; - moduleAddress!: string; + moduleAddress!: Hex; version: ModuleVersion = "V1_0_0"; @@ -22,7 +21,7 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; + const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } @@ -36,38 +35,38 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { return instance; } - getAddress(): string { + getAddress(): Hex { return this.moduleAddress; } - async getSigner(): Promise { + async getSigner(): Promise { return Promise.resolve(this.signer); } - async getDummySignature(): Promise { - const moduleAddress = ethers.utils.getAddress(this.getAddress()); + async getDummySignature(): Promise { + const moduleAddress = getAddress(this.getAddress()); const dynamicPart = moduleAddress.substring(2).padEnd(40, "0"); return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000`; } // Note: other modules may need additional attributes to build init data - async getInitData(): Promise { + async getInitData(): Promise { const ecdsaOwnerAddress = await this.signer.getAddress(); - const moduleRegistryAbi = "function initForSmartAccount(address owner)"; - const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]); - const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData("initForSmartAccount", [ecdsaOwnerAddress]); + const moduleRegistryParsedAbi = parseAbi(["function initForSmartAccount(address owner)"]); + const ecdsaOwnershipInitData = encodeFunctionData({ + abi: moduleRegistryParsedAbi, + functionName: "initForSmartAccount", + args: [ecdsaOwnerAddress], + }); return ecdsaOwnershipInitData; } - async signUserOpHash(userOpHash: string): Promise { - const sig = await this.signer.signMessage(arrayify(userOpHash)); - - Logger.log("ecdsa signature ", sig); - + async signUserOpHash(userOpHash: string): Promise { + const sig = await this.signer.signMessage(toBytes(userOpHash)); return sig; } - async signMessage(message: Bytes | string): Promise { + async signMessage(message: Uint8Array | string): Promise { let signature = await this.signer.signMessage(message); const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index 837398f25..e0fb35b2d 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -1,15 +1,15 @@ -import { UserOperation } from "@biconomy/core-types"; -import { Logger, getUserOpHash } from "@biconomy/common"; -import { Signer, ethers } from "ethers"; +import { Hex, concat, encodeAbiParameters, encodeFunctionData, getAddress, keccak256, pad, parseAbi, parseAbiParameters, toBytes, toHex } from "viem"; +import { UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; import MerkleTree from "merkletreejs"; import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; -import { keccak256, arrayify, defaultAbiCoder, hexConcat, hexZeroPad, Bytes } from "ethers/lib/utils"; import { ModuleVersion, MultiChainUserOpDto, MultiChainValidationModuleConfig } from "./utils/Types"; import { BaseValidationModule } from "./BaseValidationModule"; +import { getUserOpHash } from "./utils/Helper"; + export class MultiChainValidationModule extends BaseValidationModule { - signer!: Signer; + signer!: WalletClientSigner; - moduleAddress!: string; + moduleAddress!: Hex; version: ModuleVersion = "V1_0_0"; @@ -22,7 +22,7 @@ export class MultiChainValidationModule extends BaseValidationModule { if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; + const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } @@ -36,38 +36,38 @@ export class MultiChainValidationModule extends BaseValidationModule { return instance; } - getAddress(): string { + getAddress(): Hex { return this.moduleAddress; } - async getSigner(): Promise { + async getSigner(): Promise { return Promise.resolve(this.signer); } - async getDummySignature(): Promise { - const moduleAddress = ethers.utils.getAddress(this.getAddress()); + async getDummySignature(): Promise { + const moduleAddress = getAddress(this.getAddress()); const dynamicPart = moduleAddress.substring(2).padEnd(40, "0"); return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000`; } // Note: other modules may need additional attributes to build init data - async getInitData(): Promise { + async getInitData(): Promise { const ecdsaOwnerAddress = await this.signer.getAddress(); - const moduleRegistryAbi = "function initForSmartAccount(address owner)"; - const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]); - const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData("initForSmartAccount", [ecdsaOwnerAddress]); + const moduleRegistryParsedAbi = parseAbi(["function initForSmartAccount(address owner)"]); + const ecdsaOwnershipInitData = encodeFunctionData({ + abi: moduleRegistryParsedAbi, + functionName: "initForSmartAccount", + args: [ecdsaOwnerAddress], + }); return ecdsaOwnershipInitData; } - async signUserOpHash(userOpHash: string): Promise { - const sig = await this.signer.signMessage(arrayify(userOpHash)); - - Logger.log("ecdsa signature ", sig); - + async signUserOpHash(userOpHash: string): Promise { + const sig = await this.signer.signMessage(toBytes(userOpHash)); return sig; } - async signMessage(message: Bytes | string): Promise { + async signMessage(message: Uint8Array | string): Promise { let signature = await this.signer.signMessage(message); const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); @@ -79,7 +79,7 @@ export class MultiChainValidationModule extends BaseValidationModule { return signature; } - async signUserOps(multiChainUserOps: MultiChainUserOpDto[]): Promise { + async signUserOps(multiChainUserOps: MultiChainUserOpDto[]): Promise { try { const leaves: string[] = []; @@ -87,10 +87,10 @@ export class MultiChainValidationModule extends BaseValidationModule { for (const multiChainOp of multiChainUserOps) { const validUntil = multiChainOp.validUntil ?? 0; const validAfter = multiChainOp.validAfter ?? 0; - const leaf = hexConcat([ - hexZeroPad(ethers.utils.hexlify(validUntil), 6), - hexZeroPad(ethers.utils.hexlify(validAfter), 6), - hexZeroPad(getUserOpHash(multiChainOp.userOp, this.entryPointAddress, multiChainOp.chainId), 32), + const leaf = concat([ + pad(toHex(validUntil), { size: 6 }), + pad(toHex(validAfter), { size: 6 }), + pad(getUserOpHash(multiChainOp.userOp, this.entryPointAddress, multiChainOp.chainId), { size: 32 }), ]); leaves.push(keccak256(leaf)); @@ -99,7 +99,7 @@ export class MultiChainValidationModule extends BaseValidationModule { // Create a new Merkle tree using the leaves array const merkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true }); - let multichainSignature = await this.signer.signMessage(arrayify(merkleTree.getHexRoot())); + let multichainSignature = await this.signer.signMessage(toBytes(merkleTree.getHexRoot())); const potentiallyIncorrectV = parseInt(multichainSignature.slice(-2), 16); if (![27, 28].includes(potentiallyIncorrectV)) { @@ -108,30 +108,29 @@ export class MultiChainValidationModule extends BaseValidationModule { } // Create an array to store updated userOps - const updatedUserOps: UserOperation[] = []; - - Logger.log("merkle root ", merkleTree.getHexRoot()); + const updatedUserOps: UserOperationStruct[] = []; for (let i = 0; i < leaves.length; i++) { const merkleProof = merkleTree.getHexProof(leaves[i]); - Logger.log("merkle proof ", merkleProof); - const validUntil = multiChainUserOps[i].validUntil ?? 0; const validAfter = multiChainUserOps[i].validAfter ?? 0; // Create the moduleSignature - const moduleSignature = defaultAbiCoder.encode( - ["uint48", "uint48", "bytes32", "bytes32[]", "bytes"], - [validUntil, validAfter, merkleTree.getHexRoot(), merkleProof, multichainSignature], - ); + const moduleSignature = encodeAbiParameters(parseAbiParameters(["uint48, uint48, bytes32, bytes32[], bytes"]), [ + validUntil, + validAfter, + merkleTree.getHexRoot() as Hex, + merkleProof as Hex[], + multichainSignature as Hex, + ]); // Note: Because accountV2 does not directly call this method. hence we need to add validation module address to the signature - const signatureWithModuleAddress = defaultAbiCoder.encode(["bytes", "address"], [moduleSignature, this.getAddress()]); + const signatureWithModuleAddress = encodeAbiParameters(parseAbiParameters(["bytes, address"]), [moduleSignature, this.getAddress()]); // Update userOp with the final signature - const updatedUserOp: UserOperation = { - ...(multiChainUserOps[i].userOp as UserOperation), + const updatedUserOp: UserOperationStruct = { + ...(multiChainUserOps[i].userOp as UserOperationStruct), signature: signatureWithModuleAddress as `0x${string}`, }; @@ -139,7 +138,7 @@ export class MultiChainValidationModule extends BaseValidationModule { } return updatedUserOps; } catch (error) { - Logger.error("Error in signing multi chain userops", error); + console.error("Error in signing multi chain userops"); throw new Error(JSON.stringify(error)); } } diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index 23e0b8770..b74bb91df 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -1,8 +1,6 @@ -import { Signer, ethers } from "ethers"; +import { Hex, concat, encodeAbiParameters, encodeFunctionData, keccak256, pad, parseAbi, parseAbiParameters, toBytes, toHex } from "viem"; import MerkleTree from "merkletreejs"; -import { NODE_CLIENT_URL, Logger } from "@biconomy/common"; -import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from "ethers/lib/utils"; -import { keccak256 } from "ethereumjs-util"; +import { WalletClientSigner } from "@alchemy/aa-core"; import { SessionKeyManagerModuleConfig, ModuleVersion, @@ -11,8 +9,6 @@ import { CreateSessionDataResponse, StorageType, } from "./utils/Types"; -import NodeClient from "@biconomy/node-client"; -import INodeClient from "@biconomy/node-client"; import { SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "./utils/Constants"; import { generateRandomHex } from "./utils/Uid"; import { BaseValidationModule } from "./BaseValidationModule"; @@ -22,15 +18,13 @@ import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } f export class SessionKeyManagerModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; - moduleAddress!: string; - - nodeClient!: INodeClient; + moduleAddress!: Hex; merkleTree!: MerkleTree; sessionStorageClient!: ISessionStorage; - readonly mockEcdsaSessionKeySig: string = + readonly mockEcdsaSessionKeySig: Hex = "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; /** @@ -53,7 +47,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; + const moduleAddr = SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } @@ -63,9 +57,6 @@ export class SessionKeyManagerModule extends BaseValidationModule { instance.moduleAddress = DEFAULT_SESSION_KEY_MANAGER_MODULE; // Note: in this case Version remains the default one } - instance.nodeClient = new NodeClient({ - txServiceUrl: moduleConfig.nodeClientUrl ?? NODE_CLIENT_URL, - }); if (moduleConfig.sessionStorageClient) { instance.sessionStorageClient = moduleConfig.sessionStorageClient; @@ -81,13 +72,13 @@ export class SessionKeyManagerModule extends BaseValidationModule { const existingSessionData = await instance.sessionStorageClient.getAllSessionData(); const existingSessionDataLeafs = existingSessionData.map((sessionData) => { - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionData.validAfter), 6), - hexZeroPad(sessionData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionData.validUntil), { size: 6 }), + pad(toHex(sessionData.validAfter), { size: 6 }), + pad(sessionData.sessionValidationModule, { size: 20 }), sessionData.sessionKeyData, ]); - return ethers.utils.keccak256(leafDataHex); + return keccak256(leafDataHex); }); instance.merkleTree = new MerkleTree(existingSessionDataLeafs, keccak256, { @@ -104,22 +95,23 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns The session data */ createSessionData = async (leavesData: CreateSessionDataParams[]): Promise => { - const sessionKeyManagerModuleABI = "function setMerkleRoot(bytes32 _merkleRoot)"; - const sessionKeyManagerModuleInterface = new ethers.utils.Interface([sessionKeyManagerModuleABI]); + const sessionKeyManagerModuleABI = parseAbi(["function setMerkleRoot(bytes32 _merkleRoot)"]); + const leavesToAdd: Buffer[] = []; const sessionIDInfo: string[] = []; for (const leafData of leavesData) { - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(leafData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(leafData.validAfter), 6), - hexZeroPad(leafData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(leafData.validUntil), { size: 6 }), + pad(toHex(leafData.validAfter), { size: 6 }), + pad(leafData.sessionValidationModule, { size: 20 }), leafData.sessionKeyData, ]); const generatedSessionId = leafData.preferredSessionId ?? generateRandomHex(); - leavesToAdd.push(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); + // TODO: verify this, might not be buffer + leavesToAdd.push(keccak256(leafDataHex) as unknown as Buffer); sessionIDInfo.push(generatedSessionId); const sessionLeafNode = { @@ -142,7 +134,11 @@ export class SessionKeyManagerModule extends BaseValidationModule { this.merkleTree = newMerkleTree; - const setMerkleRootData = sessionKeyManagerModuleInterface.encodeFunctionData("setMerkleRoot", [this.merkleTree.getHexRoot()]); + const setMerkleRootData = encodeFunctionData({ + abi: sessionKeyManagerModuleABI, + functionName: "setMerkleRoot", + args: [this.merkleTree.getHexRoot() as Hex], + }); await this.sessionStorageClient.setMerkleRoot(this.merkleTree.getHexRoot()); return { @@ -157,41 +153,38 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @param sessionSigner The signer to be used to sign the user operation * @returns The signature of the user operation */ - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { + async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { if (!(params && params.sessionSigner)) { throw new Error("Session signer is not provided."); } const sessionSigner = params.sessionSigner; // Use the sessionSigner to sign the user operation - const signature = await sessionSigner.signMessage(arrayify(userOpHash)); + const signature = await sessionSigner.signMessage(toBytes(userOpHash)); const sessionSignerData = await this.getLeafInfo(params); - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), - hexZeroPad(sessionSignerData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), sessionSignerData.sessionKeyData, ]); // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) - let paddedSignature = defaultAbiCoder.encode( - ["uint48", "uint48", "address", "bytes", "bytes32[]", "bytes"], - [ - sessionSignerData.validUntil, - sessionSignerData.validAfter, - sessionSignerData.sessionValidationModule, - sessionSignerData.sessionKeyData, - this.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer), - signature, - ], - ); + let paddedSignature: Hex = encodeAbiParameters(parseAbiParameters("uint48, uint48, address, bytes, bytes32[], bytes"), [ + sessionSignerData.validUntil, + sessionSignerData.validAfter, + sessionSignerData.sessionValidationModule, + sessionSignerData.sessionKeyData, + this.merkleTree.getHexProof(keccak256(leafDataHex)) as Hex[], + signature, + ]); if (params?.additionalSessionData) { paddedSignature += params.additionalSessionData; } - return paddedSignature; + return paddedSignature as Hex; } private async getLeafInfo(params: ModuleInfo): Promise { @@ -237,14 +230,14 @@ export class SessionKeyManagerModule extends BaseValidationModule { /** * @returns SessionKeyManagerModule address */ - getAddress(): string { + getAddress(): Hex { return this.moduleAddress; } /** * @remarks This is the version of the module contract */ - async getSigner(): Promise { + async getSigner(): Promise { throw new Error("Method not implemented."); } @@ -252,37 +245,32 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @remarks This is the dummy signature for the module, used in buildUserOp for bundler estimation * @returns Dummy signature */ - async getDummySignature(params?: ModuleInfo): Promise { - Logger.log("moduleInfo ", params); + async getDummySignature(params?: ModuleInfo): Promise { if (!params) { throw new Error("Session signer is not provided."); } const sessionSignerData = await this.getLeafInfo(params); - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), - hexZeroPad(sessionSignerData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), sessionSignerData.sessionKeyData, ]); // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) - let paddedSignature = defaultAbiCoder.encode( - ["uint48", "uint48", "address", "bytes", "bytes32[]", "bytes"], - [ - sessionSignerData.validUntil, - sessionSignerData.validAfter, - sessionSignerData.sessionValidationModule, - sessionSignerData.sessionKeyData, - this.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer), - this.mockEcdsaSessionKeySig, - ], - ); - + let paddedSignature: Hex = encodeAbiParameters(parseAbiParameters("uint48, uint48, address, bytes, bytes32[], bytes"), [ + sessionSignerData.validUntil, + sessionSignerData.validAfter, + sessionSignerData.sessionValidationModule, + sessionSignerData.sessionKeyData, + this.merkleTree.getHexProof(keccak256(leafDataHex)) as Hex[], + this.mockEcdsaSessionKeySig, + ]); if (params?.additionalSessionData) { paddedSignature += params.additionalSessionData; } - const dummySig = ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [paddedSignature, this.getAddress()]); + const dummySig = encodeAbiParameters(parseAbiParameters(["bytes, address"]), [paddedSignature as Hex, this.getAddress()]); return dummySig; } @@ -290,15 +278,14 @@ export class SessionKeyManagerModule extends BaseValidationModule { /** * @remarks Other modules may need additional attributes to build init data */ - async getInitData(): Promise { + async getInitData(): Promise { throw new Error("Method not implemented."); } /** * @remarks This Module dont have knowledge of signer. So, this method is not implemented */ - async signMessage(message: Bytes | string): Promise { - Logger.log("message", message); + async signMessage(_message: Uint8Array | string): Promise { throw new Error("Method not implemented."); } } diff --git a/packages/modules/src/interfaces/ISessionStorage.ts b/packages/modules/src/interfaces/ISessionStorage.ts index eb1fb1078..25fce9010 100644 --- a/packages/modules/src/interfaces/ISessionStorage.ts +++ b/packages/modules/src/interfaces/ISessionStorage.ts @@ -1,21 +1,22 @@ -import { Wallet, Signer } from "ethers"; +import { Hex } from "viem"; +import { WalletClientSigner } from "@alchemy/aa-core"; export type SessionStatus = "PENDING" | "ACTIVE" | "INACTIVE" | "EXPIRED"; export type SessionLeafNode = { validUntil: number; validAfter: number; - sessionValidationModule: string; - sessionKeyData: string; - sessionPublicKey: string; + sessionValidationModule: Hex; + sessionKeyData: Hex; + sessionPublicKey: Hex; sessionID?: string; status: SessionStatus; }; export type SessionSearchParam = { sessionID?: string; - sessionPublicKey?: string; - sessionValidationModule?: string; + sessionPublicKey?: Hex; + sessionValidationModule?: Hex; status?: SessionStatus; }; @@ -49,19 +50,19 @@ export interface ISessionStorage { * If no signer object is passed, it'll create a random signer and add it to the session storage * @param signer Optional signer to be added to the session storage */ - addSigner(_signer?: Wallet): Promise; + addSigner(_signer?: WalletClientSigner): Promise; /** * Fetch a signer from the session storage * @param signerPublicKey Public key of the signer to be fetched */ - getSignerByKey(_signerPublicKey: string): Promise; + getSignerByKey(_signerPublicKey: string): Promise; /** * Fetch a signer from the session storage based on the session search param * @param param SessionSearchParam to be used to fetch the signer */ - getSignerBySession(_param: SessionSearchParam): Promise; + getSignerBySession(_param: SessionSearchParam): Promise; /** * Fetch all the session leaf nodes from the session storage based on the session search param. diff --git a/packages/modules/src/interfaces/IValidationModule.ts b/packages/modules/src/interfaces/IValidationModule.ts index 150b08cc7..ec38b4c50 100644 --- a/packages/modules/src/interfaces/IValidationModule.ts +++ b/packages/modules/src/interfaces/IValidationModule.ts @@ -1,11 +1,11 @@ -import { Signer } from "ethers"; -import { Bytes } from "ethers/lib/utils"; +import { WalletClientSigner } from "@alchemy/aa-core"; +import { Hex } from "viem"; export interface IValidationModule { - getAddress(): string; - getInitData(): Promise; - getSigner(): Promise; - signUserOpHash(_userOpHash: string): Promise; - signMessage(_message: Bytes | string): Promise; - getDummySignature(): Promise; + getAddress(): Hex; + getInitData(): Promise; + getSigner(): Promise; + signUserOpHash(_userOpHash: string): Promise; + signMessage(_message: string | Uint8Array): Promise; + getDummySignature(): Promise; } diff --git a/packages/modules/src/session-storage/SessionLocalStorage.ts b/packages/modules/src/session-storage/SessionLocalStorage.ts index 3f9ada1c4..6f8102c55 100644 --- a/packages/modules/src/session-storage/SessionLocalStorage.ts +++ b/packages/modules/src/session-storage/SessionLocalStorage.ts @@ -1,5 +1,8 @@ -import { Wallet, Signer } from "ethers"; +import { Hex, createWalletClient, http } from "viem"; +import { WalletClientSigner } from "@alchemy/aa-core"; import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage"; +import { mainnet } from "viem/chains"; +import { privateKeyToAccount } from "viem/accounts"; export class SessionLocalStorage implements ISessionStorage { private smartAccountAddress: string; @@ -38,8 +41,8 @@ export class SessionLocalStorage implements ISessionStorage { async addSessionData(leaf: SessionLeafNode): Promise { const data = this.getSessionStore(); - leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule); - leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey); + leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule) as Hex; + leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey) as Hex; data.leafNodes.push(leaf); localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } @@ -99,30 +102,40 @@ export class SessionLocalStorage implements ISessionStorage { localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } - async addSigner(signer?: Wallet): Promise { - const signers = this.getSignerStore(); - if (!signer) { - signer = Wallet.createRandom(); - } - signers[this.toLowercaseAddress(signer.publicKey)] = { - privateKey: signer.privateKey, - publicKey: signer.publicKey, - }; - localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)); + async addSigner(signer: WalletClientSigner): Promise { + // const signers = this.getSignerStore(); + // if (!signer) { + // const pkey = generatePrivateKey() + // signer = { + // privateKey: pkey, + // publicKey: pkey.publicKey, + // }; + // } + // signers[this.toLowercaseAddress(signer?.inner.)] = { + // privateKey: signer.privateKey, + // publicKey: signer.publicKey, + // }; + // localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)); return signer; } - async getSignerByKey(sessionPublicKey: string): Promise { + async getSignerByKey(sessionPublicKey: string): Promise { const signers = this.getSignerStore(); const signerData = signers[this.toLowercaseAddress(sessionPublicKey)]; if (!signerData) { throw new Error("Signer not found."); } - const signer = new Wallet(signerData.privateKey); + const account = privateKeyToAccount(signerData.privateKey); + const client = createWalletClient({ + account, + chain: mainnet, + transport: http(), + }); + const signer = new WalletClientSigner(client, "viem"); return signer; } - async getSignerBySession(param: SessionSearchParam): Promise { + async getSignerBySession(param: SessionSearchParam): Promise { const session = await this.getSessionData(param); return this.getSignerByKey(session.sessionPublicKey); } diff --git a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts index 4a9f416ee..17e14a23d 100644 --- a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts +++ b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts @@ -1,6 +1,6 @@ -import { defaultAbiCoder } from "ethers/lib/utils"; import { ISessionValidationModule } from "../interfaces/ISessionValidationModule"; import { ERC20SessionKeyData, SessionValidationModuleConfig } from "../utils/Types"; +import { encodeAbiParameters, parseAbiParameters } from "viem"; /** * Session validation module for ERC20 token transfers. @@ -37,10 +37,12 @@ export class ERC20SessionValidationModule implements ISessionValidationModule { this._validateSessionKeyData(sessionData); - const sessionKeyData = defaultAbiCoder.encode( - ["address", "address", "address", "uint256"], - [sessionData.sessionKey, sessionData.token, sessionData.recipient, sessionData.maxAmount], - ); + const sessionKeyData = encodeAbiParameters(parseAbiParameters("address, address, address, uint256"), [ + sessionData.sessionKey, + sessionData.token, + sessionData.recipient, + sessionData.maxAmount, + ]); return sessionKeyData; } diff --git a/packages/modules/src/utils/Helper.ts b/packages/modules/src/utils/Helper.ts new file mode 100644 index 000000000..0754a9f30 --- /dev/null +++ b/packages/modules/src/utils/Helper.ts @@ -0,0 +1,41 @@ +import { UserOperationStruct } from "@alchemy/aa-core"; +import { Hex, encodeAbiParameters, keccak256, parseAbiParameters } from "viem"; + +function packUserOp(op: Partial, forSignature = true): string { + if (!op.initCode || !op.callData || !op.paymasterAndData) throw new Error("Missing userOp properties"); + if (forSignature) { + return encodeAbiParameters(parseAbiParameters("address, uint256, bytes32, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32"), [ + op.sender as Hex, + BigInt(op.nonce as Hex), + keccak256(op.initCode as Hex), + keccak256(op.callData as Hex), + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + keccak256(op.paymasterAndData as Hex), + ]); + } else { + // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) + return encodeAbiParameters(parseAbiParameters("address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes, bytes"), [ + op.sender as Hex, + BigInt(op.nonce as Hex), + op.initCode as Hex, + op.callData as Hex, + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + op.paymasterAndData as Hex, + op.signature as Hex, + ]); + } +} + +export const getUserOpHash = (userOp: Partial, entryPointAddress: Hex, chainId: number): Hex => { + const userOpHash = keccak256(packUserOp(userOp, true) as Hex); + const enc = encodeAbiParameters(parseAbiParameters("bytes32, address, uint256"), [userOpHash, entryPointAddress, BigInt(chainId)]); + return keccak256(enc); +}; diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 71f45e8c9..1546aa862 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,22 +1,22 @@ -import { ChainId, UserOperation } from "@biconomy/core-types"; -import { Signer } from "ethers"; +import { Hex } from "viem"; +import { UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; import { ISessionStorage } from "../interfaces/ISessionStorage"; export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' export interface BaseValidationModuleConfig { - entryPointAddress?: string; + entryPointAddress?: Hex; } export interface ECDSAOwnershipValidationModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string; + moduleAddress?: Hex; version?: ModuleVersion; - signer: Signer; + signer: WalletClientSigner; } export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string; + moduleAddress?: Hex; version?: ModuleVersion; nodeClientUrl?: string; smartAccountAddress: string; @@ -25,12 +25,12 @@ export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfi } export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string; + moduleAddress?: Hex; version?: ModuleVersion; sessionKeyManagerModule?: SessionKeyManagerModule; // could be BaseValidationModule - sessionManagerModuleAddress?: string; + sessionManagerModuleAddress?: Hex; nodeClientUrl?: string; smartAccountAddress: string; storageType?: StorageType; @@ -46,8 +46,8 @@ export enum StorageType { export type SessionParams = { sessionID?: string; - sessionSigner: Signer; - sessionValidationModule?: string; + sessionSigner: WalletClientSigner; + sessionValidationModule?: Hex; additionalSessionData?: string; }; @@ -55,8 +55,8 @@ export type ModuleInfo = { // Could be a full object of below params and that way it can be an array too! // sessionParams?: SessionParams[] // where SessionParams is below four sessionID?: string; - sessionSigner?: Signer; - sessionValidationModule?: string; + sessionSigner?: WalletClientSigner; + sessionValidationModule?: Hex; additionalSessionData?: string; batchSessionParams?: SessionParams[]; }; @@ -75,33 +75,33 @@ export type CreateSessionDataResponse = { export interface CreateSessionDataParams { validUntil: number; validAfter: number; - sessionValidationModule: string; - sessionPublicKey: string; - sessionKeyData: string; + sessionValidationModule: Hex; + sessionPublicKey: Hex; + sessionKeyData: Hex; preferredSessionId?: string; } export interface MultiChainValidationModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string; + moduleAddress?: Hex; version?: ModuleVersion; - signer: Signer; + signer: WalletClientSigner; } export type MultiChainUserOpDto = { validUntil?: number; validAfter?: number; - chainId: ChainId; - userOp: Partial; + chainId: number; + userOp: Partial; }; export interface BaseSessionKeyData { - sessionKey: string; + sessionKey: Hex; } export interface ERC20SessionKeyData extends BaseSessionKeyData { - token: string; - recipient: string; - maxAmount: string; + token: Hex; + recipient: Hex; + maxAmount: bigint; } export interface SessionValidationModuleConfig { diff --git a/packages/node-client/CHANGELOG.md b/packages/node-client/CHANGELOG.md deleted file mode 100644 index e1114f85a..000000000 --- a/packages/node-client/CHANGELOG.md +++ /dev/null @@ -1,65 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 3.1.1 (2023-11-09) -Version Bump Only. - - - - -## 3.1.0 (2023-09-20) -Version Bump Only. - -### Bug Fixes - -* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) - - - - - - - - - - -## 3.0.0 (2023-08-28) - - - - -## 3.0.0-alpha.0 (2023-07-12) - - - - - -## 2.0.1 (2023-05-18) - - -### Features - -* skipBundlerGasEstimation flag for gas ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) - - - -## 2.0.0 (2023-04-07) - - -### Bug Fixes - -* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -* smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) - - - -## 1.0.0 (2023-01-03) - - -### Bug Fixes - -* smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) diff --git a/packages/node-client/README.md b/packages/node-client/README.md deleted file mode 100644 index b14934051..000000000 --- a/packages/node-client/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# `@biconomy/node-client` - -# Biconomy SDK Node Client - -Node Client is the api client package that communicate with [Biconomy SDK](https://github.com/bcnmy/biconomy-client-sdk) backend node to fetch needed smart contract wallet data i.e supported chains list, transaction history, balances e.t.c - -## Installation - -`yarn add @biconomy/node-client` - -OR - -`npm install @biconomy/node-client ` - -## Usage - -``` -// import package -import NodeClient from '@biconomy/node-client' - -// initialisation - -const nodeClient = new NodeClient({ txServiceUrl: 'https://sdk-backend.staging.biconomy.io/v1' }) -``` - -# Fetch Supported Chains List - -``` -const supportedChainsList = await nodeClient.getAllSupportedChains() -console.log('supportedChainsList ', supportedChainsList) -``` - -# Fetch Transactions By Address - -``` -const chainId = 80001 -const address = '0xabc......' -const trxHistory = await nodeClient.getTransactionByAddress(chainId, address) -console.log('trxHistory ', trxHistory) -``` - -# Get Transaction By Hash - -``` -const txHash = '0x........' -const trxDetail = await nodeClient.getTransactionByHash(txHash) -console.log('trxDetail ', trxDetail) -``` - -# Get Smart Contract Wallet Balances - -``` -import { BalancesDto } from '@biconomy/node-client' - -import { ChainId } from '@biconomy/core-types' - -const address = '0xabc......' - -const balanceParams: BalancesDto = - { - // if no chainId is supplied, SDK will automatically pick active one that - // is being supplied for initialization - - chainId: ChainId.MAINNET, // chainId of your choice - address: address, - // If empty string you receive balances of all tokens watched by Indexer - // you can only whitelist token addresses that are listed in token respository - // specified above ^ - tokenAddresses: [], - }; - -const balFromSdk = await nodeClient.getAllTokenBalances(balanceParams); -console.info("balFromSdk ", balFromSdk); - -const usdBalFromSdk = await nodeClient.getTotalBalanceInUsd(balanceParams); -console.info("usdBalFromSdk ", usdBalFromSdk) -``` diff --git a/packages/node-client/package.json b/packages/node-client/package.json deleted file mode 100644 index 2c25f0103..000000000 --- a/packages/node-client/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "@biconomy/node-client", - "version": "3.1.1", - "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", - "keywords": [ - "Ethereum", - "Gnosis", - "Biconomy", - "Backend Node" - ], - "scripts": { - "unbuild": "rimraf dist", - "build": "rimraf dist && tsc", - "format": "prettier --write \"{src,tests,e2e}/**/*.ts\"", - "lint": "tslint -p tsconfig.json", - "test": "jest tests/**/*.spec.ts --runInBand", - "test:file": "jest --config=../../jest.config.js --runInBand", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", - "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'" - }, - "author": "Biconomy (https://biconomy.io)", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "devDependencies": { - "@biconomy/core-types": "^3.1.0", - "@nomiclabs/hardhat-ethers": "^2.1.0", - "@nomiclabs/hardhat-waffle": "^2.0.3", - "@nomiclabs/hardhat-web3": "^2.0.0", - "@types/chai": "^4.3.0", - "@types/chai-as-promised": "^7.1.5", - "@types/node": "^17.0.23", - "@types/node-fetch": "^2.6.2", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "chai": "^4.3.6", - "chai-as-promised": "^7.1.1", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "hardhat": "^2.9.2", - "husky": "^7.0.4", - "lint-staged": "^12.3.7", - "prettier": "^2.6.2", - "rimraf": "^3.0.2", - "ts-generator": "^0.1.1", - "ts-node": "^10.7.0", - "typescript": "^4.6.3" - }, - "lint-staged": { - "src/**/!(*test).ts": [ - "yarn lint", - "prettier --write" - ] - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@biconomy/core-types": "^3.1.1", - "@ethersproject/abstract-signer": "^5.6.0", - "@nomiclabs/hardhat-ethers": "^2.1.0", - "node-fetch": "^2.6.6" - } -} diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts deleted file mode 100644 index a36c8bc37..000000000 --- a/packages/node-client/src/INodeClient.ts +++ /dev/null @@ -1,93 +0,0 @@ -// import { FeeRefund, FeeRefundData, MetaTransactionData } from '@biconomy/core-types' -import { - SmartAccountByOwnerDto, - TokenByChainIdAndAddressDto, - TokenPriceResponse, - SupportedChainsResponse, - IndividualChainResponse, - SupportedTokensResponse, - IndividualTokenResponse, - SmartAccountsResponse, - BalancesResponse, - BalancesDto, - UsdBalanceResponse, - SCWTransactionResponse, - WhiteListSignatureResponse, -} from "./types/NodeClientTypes"; - -interface INodeClient { - // 1. Chain Apis - - /** - * Get all supported chains by backend node configuration - */ - getAllSupportedChains(): Promise; - - /** - * Get ChainConfig for requested chainId - * @param chainId - */ - getChainById(_chainId: number): Promise; - - // 2. Token APIs - - /** - * Get prices for configured tokens from backend node API - * @param chainId - */ - getTokenPricesByChainId(_chainId: number): Promise; - - /** - * Get all supported tokens - */ - getAllTokens(): Promise; - - /** - * Get TokenInfo for requested chainId - * @param chainId - */ - getTokensByChainId(_chainId: number): Promise; - - /** - * Get TokenInfo by address and chainId - * @param tokenByChainIdAndAddressDto - */ - getTokenByChainIdAndAddress(_tokenByChainIdAndAddressDto: TokenByChainIdAndAddressDto): Promise; - - // 3. Smart Account Endpoints - - /** - * Get information of all smart accounts deployed for particular eoa owner for any version and index - * @param smartAccountByOwnerDto - */ - getSmartAccountsByOwner(_smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise; - - // 4. Balances Endpoints - - /** - * Get token balances for requested chainId and address - * address could be EOA or SmartAccount - * @param balancesDto - */ - getAllTokenBalances(_balancesDto: BalancesDto): Promise; - - /** - * - * @param balancesDto Get total USD balance - */ - getTotalBalanceInUsd(_balancesDto: BalancesDto): Promise; - - /** - * - * @param origin - * About: Whitelist domain by passing the origin domain - * Purpose: Returns the signature used in init - */ - whitelistUrl(_origin: string): Promise; - - getTransactionByHash(_txHash: string): Promise; - - getTransactionByAddress(_chainId: number, _address: string): Promise; -} - -export default INodeClient; diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts deleted file mode 100644 index a2df00662..000000000 --- a/packages/node-client/src/NodeClient.ts +++ /dev/null @@ -1,145 +0,0 @@ -import INodeClient from "./INodeClient"; -import { - SmartAccountByOwnerDto, - TokenByChainIdAndAddressDto, - TokenPriceResponse, - SupportedChainsResponse, - IndividualChainResponse, - SupportedTokensResponse, - IndividualTokenResponse, - SmartAccountsResponse, - BalancesDto, - BalancesResponse, - UsdBalanceResponse, - SCWTransactionResponse, - WhiteListSignatureResponse, -} from "./types/NodeClientTypes"; -import { getTxServiceBaseUrl } from "./utils"; -import { HttpMethod, sendRequest } from "./utils/HttpRequests"; -export interface NodeClientConfig { - /** txServiceUrl - Safe Transaction Service URL */ - txServiceUrl: string; -} - -class NodeClient implements INodeClient { - #txServiceBaseUrl: string; - - constructor({ txServiceUrl }: NodeClientConfig) { - this.#txServiceBaseUrl = getTxServiceBaseUrl(txServiceUrl); - } - - /** - * - * @returns The list of Network info - */ - async getAllSupportedChains(): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/chains/`, - method: HttpMethod.Get, - }); - } - - /** - * - * @param chainId - * @description thie function will return the chain detail base on supplied { chainId } - * @returns - */ - async getChainById(chainId: number): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/chains/${chainId}`, - method: HttpMethod.Get, - }); - } - - /** - * - * @param chainId - * @description this function will return token price base on supplied {chainId} - * @returns - */ - async getTokenPricesByChainId(chainId: number): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/chains/chainId/${chainId}/price`, - method: HttpMethod.Get, - }); - } - - async getAllTokens(): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/tokens/`, - method: HttpMethod.Get, - }); - } - - async getTokensByChainId(chainId: number): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/tokens/chainId/${chainId}`, - method: HttpMethod.Get, - }); - } - - async getTokenByChainIdAndAddress(tokenByChainIdAndAddressDto: TokenByChainIdAndAddressDto): Promise { - const { chainId, tokenAddress } = tokenByChainIdAndAddressDto; - return sendRequest({ - url: `${this.#txServiceBaseUrl}/tokens/chainId/${chainId}/address/${tokenAddress}`, - method: HttpMethod.Get, - }); - } - - async getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise { - const { chainId, owner, index } = smartAccountByOwnerDto; - return sendRequest({ - url: `${this.#txServiceBaseUrl}/smart-accounts/chainId/${chainId}/owner/${owner}/index/${index}`, - method: HttpMethod.Get, - }); - } - - async getAllTokenBalances(balancesDto: BalancesDto): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/smart-accounts/balances`, - method: HttpMethod.Post, - body: balancesDto, - }); - } - - async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/smart-accounts/balance`, - method: HttpMethod.Post, - body: balancesDto, - }); - } - - /** - * - * @param origin - * @description this function will return the signature for your domain - * @returns - */ - async whitelistUrl(origin: string): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/whitelist`, - method: HttpMethod.Post, - body: { - origin, - }, - }); - } - - getTransactionByAddress(chainId: number, address: string): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/transactions/chainId/${chainId}/address/${address}`, - method: HttpMethod.Get, - }); - } - - getTransactionByHash(txHash: string): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/transactions/txHash/${txHash}`, - method: HttpMethod.Get, - }); - } -} - -export default NodeClient; diff --git a/packages/node-client/src/index.ts b/packages/node-client/src/index.ts deleted file mode 100644 index 708fd7c83..000000000 --- a/packages/node-client/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import NodeClient, { NodeClientConfig } from "./NodeClient"; - -export * from "./types/NodeClientTypes"; -export default NodeClient; -export { NodeClientConfig }; diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts deleted file mode 100644 index c94937936..000000000 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ /dev/null @@ -1,225 +0,0 @@ -import { ChainId, SmartAccountVersion } from "@biconomy/core-types"; -export type SmartAccountInfoResponse = { - readonly name: string; - readonly version: string; - readonly api_version: string; - readonly secure: boolean; - readonly settings: { - readonly AWS_CONFIGURED: boolean; - readonly AWS_S3_CUSTOM_DOMAIN: string; - readonly ETHEREUM_NODE_URL: string; - readonly ETHEREUM_TRACING_NODE_URL: string; - readonly ETH_INTERNAL_TXS_BLOCK_PROCESS_LIMIT: number; - readonly ETH_INTERNAL_NO_FILTER: boolean; - readonly ETH_REORG_BLOCKS: number; - readonly TOKENS_LOGO_BASE_URI: string; - readonly TOKENS_LOGO_EXTENSION: string; - }; -}; - -export type SCWTransactionResponse = { - symbol: string; - tokenAddress: string; - scwAddress: string; - txHash: string; - blockNumber: number; - payment: number; - gasLimit: number; - gasUsage: number; - gasPrice: number; - chainId: number; - fromAddress: string; - toAddress: string; - amount: number; - type: string; - txStatus: string; - createdAt: number; - updatedAt: number; -}; - -export type BalancesDto = { - chainId: number; - address: string; - tokenAddresses: string[]; -}; - -export type WhiteListSignatureResponse = { - code: number; - message: string; - data: string; -}; - -export type SmartAccountByOwnerDto = { - chainId: number; - owner: string; - index: number; -}; - -export type TokenByChainIdAndAddressDto = { - chainId: number; - tokenAddress: string; -}; - -export type ContractDetails = { - version: SmartAccountVersion; - - address: string; - - abi: string; -}; - -export type ChainConfig = { - chainId: ChainId; - name: string; - symbol: string; - isL2: boolean; - isMainnet: boolean; - description: string; - blockExplorerUriTemplate: BlockExplorerConfig; - ensRegistryAddress: string; - walletFactory: ContractDetails[]; - multiSend: ContractDetails[]; - multiSendCall: ContractDetails[]; - wallet: ContractDetails[]; // base wallet - entryPoint: ContractDetails[]; //should make this address var - fallBackHandler: ContractDetails[]; //should make this address var - fallBackGasTankAddress: string; - relayerURL: string; - providerUrl: string; - indexerUrl: string; - backendNodeUrl: string; - createdAt: Date; - updatedAt: Date; - token: TokenInfo; -}; - -export type MasterCopyResponse = { - address: string; - version: string; - deployer: string; - deployedBlockNumber: number; - lastIndexedBlockNumber: number; -}; - -export type SafeInfoResponse = { - readonly address: string; - readonly nonce: number; - readonly threshold: number; - readonly owners: string[]; - readonly masterCopy: string; - readonly modules: string[]; - readonly fallbackHandler: string; - readonly version: string; -}; - -export type BlockExplorerConfig = { - address: string; - txHash: string; - api: string; -}; - -export type TokenInfo = { - id: number; - name: string; - symbol: string; - blockChain: number; - ercType?: string; - decimals: number; - logoUri: string; - address: string; - isNativeToken: boolean; - isEnabled: boolean; - cmcId: number; //Verify - price: number; //Verify - createdAt: Date; - updatedAt: Date; -}; - -// Note: Applies for Account V1 -export type ISmartAccount = { - version: SmartAccountVersion; - smartAccountAddress: string; - isDeployed: boolean; - chainId: ChainId; - eoaAddress: string; - entryPointAddress: string; - handlerAddress: string; - index: number; - implementationAddress: string; - fallBackHandlerAddress: string; - owner: string; - factoryAddress: string; - createdAt: number; - updatedAt: number; -}; - -export type IBalances = { - contract_decimals: number; - contract_name: string; - contract_ticker_symbol: string; - contract_address: string; - supports_erc: string | null; - logo_url: string | null; - last_transferred_at: string | null; - type: string; - balance: number; - balance_24h: number; - quote_rate: number; - quote_rate_24h: number; - nft_data: string | null; -}; - -export type SupportedChainsResponse = { - message: string; - code: number; - data: ChainConfig[]; -}; - -export type IndividualChainResponse = { - message: string; - code: number; - data: ChainConfig; -}; - -export type TokenPriceResponse = { - price: number; -}; - -export type SupportedTokensResponse = { - message: string; - code: number; - data: TokenInfo[]; -}; - -export type IndividualTokenResponse = { - message: string; - code: number; - data: TokenInfo; -}; -export type SmartAccountsResponse = { - message: string; - code: number; - data: ISmartAccount[]; -}; -export type BalancesResponse = { - message: string; - code: number; - data: IBalances[]; -}; - -export type UsdBalanceResponse = { - message: string; - code: number; - data: { - totalBalance: number; - }; -}; - -export type EstimateGasResponse = { - message: string; - code: number; - data: { - gas: number; - txBaseGas?: number; - }; -}; diff --git a/packages/node-client/src/utils/index.ts b/packages/node-client/src/utils/index.ts deleted file mode 100644 index 94b8829fe..000000000 --- a/packages/node-client/src/utils/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function getTxServiceBaseUrl(txServiceUrl: string): string { - return `${txServiceUrl}`; -} diff --git a/packages/node-client/tests/node-client.spec.ts b/packages/node-client/tests/node-client.spec.ts deleted file mode 100644 index 90c46ea23..000000000 --- a/packages/node-client/tests/node-client.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer as AbstractSigner } from "ethers"; -import { Web3Provider } from "@ethersproject/providers"; -import NodeClient from "../dist/src"; - -type EthereumInstance = { - chainId?: number; - provider?: Web3Provider; - signer?: AbstractSigner; -}; - -describe("Node Client tests", function () { - let nodeClient: NodeClient; - let gasUsed: number; - - beforeAll(async () => { - nodeClient = new NodeClient({ txServiceUrl: "https://sdk-backend.staging.biconomy.io/v1" }); - }); - - describe("Gas Estimation Endpoints", () => { - it("Empty test to remove warning", () => {}); - }); -}); diff --git a/packages/node-client/tsconfig.json b/packages/node-client/tsconfig.json deleted file mode 100644 index c7ff8535e..000000000 --- a/packages/node-client/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src" - }, - "include": ["src"] -} diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 684c6889b..cf3301f92 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -12,7 +12,7 @@ "particle", "particle-auth" ], - "author": "livingrockrises ", + "author": "Biconomy", "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", "license": "MIT", "files": [ diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index c7fcbdf50..4c54c8115 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -18,12 +18,9 @@ "build": "rimraf dist && tsc", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json", - "test": "jest tests/**/*.spec.ts --runInBand", - "test:file": "jest --config=../../jest.config.js --runInBand", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", - "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'" + "test": "jest tests/**/*.spec.ts --runInBand" }, - "author": "talhamalik883 ", + "author": "Biconomy", "repository": { "type": "git", "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" @@ -38,10 +35,6 @@ }, "dependencies": { "@alchemy/aa-core": "^1.2.2", - "@biconomy/common": "^3.1.1", - "@biconomy/core-types": "^3.1.1", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "ethers": "^5.7.0" + "viem": "^1.20.3" } } diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index aff9eaa5f..05ad6fddb 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -1,6 +1,5 @@ -import { Logger, sendRequest, HttpMethod, getTimestampInSeconds } from "@biconomy/common"; -import { resolveProperties } from "@ethersproject/properties"; -import { type UserOperationStruct } from "@alchemy/aa-core"; +import { encodeFunctionData, parseAbi } from "viem"; +import type { BigNumberish, UserOperationStruct } from "@alchemy/aa-core"; import { PaymasterFeeQuote, PaymasterConfig, @@ -13,9 +12,10 @@ import { PaymasterAndDataResponse, Transaction, } from "./utils/Types"; -import { BigNumberish, BigNumber, ethers } from "ethers"; -import { ERC20_ABI } from "./constants"; import { IHybridPaymaster } from "./interfaces/IHybridPaymaster"; +import { MAX_UINT256, ERC20_ABI, ADDRESS_ZERO } from "./utils/Constants"; +import { sendRequest, HttpMethod } from "./utils/HttpRequests"; +import { getTimestampInSeconds } from "./utils/Helpers"; const defaultPaymasterConfig: PaymasterConfig = { paymasterUrl: "", @@ -41,28 +41,27 @@ export class BiconomyPaymaster implements IHybridPaymaster): Promise> { - userOp = await resolveProperties(userOp); - if (userOp.nonce !== null && userOp.nonce !== undefined) { - userOp.nonce = BigNumber.from(userOp.nonce).toHexString() as `0x${string}`; - } - if (userOp.callGasLimit !== null && userOp.callGasLimit !== undefined) { - userOp.callGasLimit = BigNumber.from(userOp.callGasLimit).toString() as `0x${string}`; - } - if (userOp.verificationGasLimit !== null && userOp.verificationGasLimit !== undefined) { - userOp.verificationGasLimit = BigNumber.from(userOp.verificationGasLimit).toString() as `0x${string}`; - } - if (userOp.preVerificationGas !== null && userOp.preVerificationGas !== undefined) { - userOp.preVerificationGas = BigNumber.from(userOp.preVerificationGas).toString() as `0x${string}`; - } - if (userOp.maxFeePerGas !== null && userOp.maxFeePerGas !== undefined) { - userOp.maxFeePerGas = BigNumber.from(userOp.maxFeePerGas).toString() as `0x${string}`; - } - if (userOp.maxPriorityFeePerGas !== null && userOp.maxPriorityFeePerGas !== undefined) { - userOp.maxPriorityFeePerGas = BigNumber.from(userOp.maxPriorityFeePerGas).toString() as `0x${string}`; + const userOperation = { ...userOp }; + try { + const keys: (keyof UserOperationStruct)[] = [ + "nonce", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + ]; + for (const key of keys) { + if (userOperation[key] && userOperation[key] !== "0x") { + userOperation[key] = ("0x" + BigInt(userOp[key] as BigNumberish).toString(16)) as `0x${string}`; + } + } + } catch (error) { + throw `Failed to transform user operation: ${error}`; } - userOp.signature = userOp.signature || "0x"; - userOp.paymasterAndData = userOp.paymasterAndData || "0x"; - return userOp; + userOperation.signature = userOp.signature || "0x"; + userOperation.paymasterAndData = userOp.paymasterAndData || "0x"; + return userOperation; } /** @@ -73,10 +72,8 @@ export class BiconomyPaymaster implements IHybridPaymaster { const feeTokenAddress: string = tokenPaymasterRequest.feeQuote.tokenAddress; - Logger.log("erc20 fee token address ", feeTokenAddress); const spender = tokenPaymasterRequest.spender; - Logger.log("spender address ", spender); // logging provider object isProvider // Logger.log("provider object passed - is provider", provider?._isProvider); @@ -85,20 +82,21 @@ export class BiconomyPaymaster implements IHybridPaymaster, paymasterServiceData: FeeQuotesOrDataDto, ): Promise { - try { - userOp = await this.prepareUserOperation(userOp); - } catch (err) { - Logger.log("Error in prepareUserOperation ", err); - throw err; - } + userOp = await this.prepareUserOperation(userOp); let mode = null; let expiryDuration = null; const calculateGasLimits = paymasterServiceData.calculateGasLimits ?? true; - Logger.log("calculateGasLimits is ", calculateGasLimits); let preferredToken = null; let feeTokensArray: string[] = []; // could make below null @@ -155,20 +146,16 @@ export class BiconomyPaymaster implements IHybridPaymaster = response.result.feeQuotes; const paymasterAddress: string = response.result.paymasterAddress; @@ -229,8 +215,7 @@ export class BiconomyPaymaster implements IHybridPaymaster, paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying ): Promise { - try { - userOp = await this.prepareUserOperation(userOp); - } catch (err) { - Logger.log("Error in prepareUserOperation ", err); - throw err; - } + userOp = await this.prepareUserOperation(userOp); if (paymasterServiceData?.mode === undefined) { throw new Error("mode is required in paymasterServiceData"); } const mode = paymasterServiceData.mode; - Logger.log("requested mode is ", mode); const calculateGasLimits = paymasterServiceData.calculateGasLimits ?? true; - Logger.log("calculateGasLimits is ", calculateGasLimits); let tokenInfo = null; let expiryDuration = null; @@ -289,7 +267,7 @@ export class BiconomyPaymaster implements IHybridPaymaster, - paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying + _userOp: Partial, + _paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying ): Promise { - Logger.log("userOp is ", userOp); - Logger.log("paymasterServiceData is ", paymasterServiceData); return "0x"; } } diff --git a/packages/paymaster/src/constants.ts b/packages/paymaster/src/utils/Constants.ts similarity index 78% rename from packages/paymaster/src/constants.ts rename to packages/paymaster/src/utils/Constants.ts index d0efbcfe2..6a68014be 100644 --- a/packages/paymaster/src/constants.ts +++ b/packages/paymaster/src/utils/Constants.ts @@ -1,5 +1,6 @@ +export const MAX_UINT256 = "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; export const ENTRYPOINT_ADDRESS = "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"; - +export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000"; // export const ERC20_PAYMASTER_ADDRESS = '0xE9f6Ffc87cac92bc94f704AE017e85cB83DBe4EC' // likely to be same address on all chains export const ERC20_ABI = [ @@ -8,4 +9,4 @@ export const ERC20_ABI = [ "function approve(address spender, uint256 value) external returns (bool)", "function allowance(address owner, address spender) external view returns (uint256)", "function balanceOf(address owner) external view returns (uint256)", -]; +]; \ No newline at end of file diff --git a/packages/paymaster/src/utils/Helpers.ts b/packages/paymaster/src/utils/Helpers.ts new file mode 100644 index 000000000..b6f5568d2 --- /dev/null +++ b/packages/paymaster/src/utils/Helpers.ts @@ -0,0 +1,7 @@ +/** + * @description this function will return current timestamp in seconds + * @returns Number + */ +export const getTimestampInSeconds = (): number => { + return Math.floor(Date.now() / 1000); +}; diff --git a/packages/paymaster/src/utils/HttpRequests.ts b/packages/paymaster/src/utils/HttpRequests.ts new file mode 100644 index 000000000..0a646fb42 --- /dev/null +++ b/packages/paymaster/src/utils/HttpRequests.ts @@ -0,0 +1,61 @@ +export enum HttpMethod { + Get = "get", + Post = "post", + Delete = "delete", +} + +/* eslint-disable @typescript-eslint/no-explicit-any */ +interface HttpRequest { + url: string; + method: HttpMethod; + body?: Record; +} + +export async function sendRequest({ url, method, body }: HttpRequest): Promise { + const response = await fetch(url, { + method, + headers: { + Accept: "application/json", + "Content-Type": "application/json", + }, + body: JSON.stringify(body), + }); + + let jsonResponse; + try { + jsonResponse = await response.json(); + } catch (error) { + if (!response.ok) { + throw new Error(response.statusText); + } + } + + if (response.ok) { + return jsonResponse as T; + } + if (jsonResponse.error) { + throw new Error(jsonResponse.error); + } + if (jsonResponse.message) { + throw new Error(jsonResponse.message); + } + if (jsonResponse.msg) { + throw new Error(jsonResponse.msg); + } + if (jsonResponse.data) { + throw new Error(jsonResponse.data); + } + if (jsonResponse.detail) { + throw new Error(jsonResponse.detail); + } + if (jsonResponse.message) { + throw new Error(jsonResponse.message); + } + if (jsonResponse.nonFieldErrors) { + throw new Error(jsonResponse.nonFieldErrors); + } + if (jsonResponse.delegate) { + throw new Error(jsonResponse.delegate); + } + throw new Error(response.statusText); +} diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index b180dcb0e..ea724817c 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -89,7 +89,7 @@ export type PaymasterFeeQuote = { export type BiconomyTokenPaymasterRequest = { feeQuote: PaymasterFeeQuote; - spender: string; + spender: Hex; maxApproval?: boolean; }; diff --git a/packages/transak/package.json b/packages/transak/package.json index 2337ddc92..f99a54c12 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -11,7 +11,7 @@ "cross-chain", "transak" ], - "author": "livingrockrises ", + "author": "Biconomy", "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", "license": "MIT", "files": [ diff --git a/rebuild.sh b/rebuild.sh index 8d555308d..26eef9318 100755 --- a/rebuild.sh +++ b/rebuild.sh @@ -15,41 +15,10 @@ rm -rf packages/paymaster/node_modules rm -rf packages/paymaster/package-lock.json rm -rf packages/paymaster/dist - rm -rf packages/modules/node_modules rm -rf packages/modules/package-lock.json rm -rf packages/modules/dist - -rm -rf packages/signers/node_modules -rm -rf packages/signers/package-lock.json -rm -rf packages/signers/dist - - -rm -rf packages/common/node_modules -rm -rf packages/common/package-lock.json -rm -rf packages/common/dist -rm -rf packages/common/src/typechain - -rm -rf packages/core-types/node_modules -rm -rf packages/core-types/package-lock.json -rm -rf packages/core-types/dist - -rm -rf packages/node-client/node_modules -rm -rf packages/node-client/package-lock.json -rm -rf packages/node-client/dist - - -rm -rf packages/web3-auth/node_modules -rm -rf packages/web3-auth/yarn.lock -rm -rf packages/web3-auth/package-lock.json -rm -rf packages/web3-auth/dist - -rm -rf packages/web3-auth-native/node_modules -rm -rf packages/web3-auth-native/yarn.lock -rm -rf packages/web3-auth-native/package-lock.json -rm -rf packages/web3-auth-native/dist - rm -rf packages/transak/node_modules rm -rf packages/transak/yarn.lock rm -rf packages/transak/package-lock.json diff --git a/tsconfig.json b/tsconfig.json index 3ad9d22bd..ed7d126a8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,10 +12,6 @@ "include": ["packages/**/*"], "references": [ { "path": "./packages/common" }, - { "path": "./packages/core-types" }, - { "path": "./packages/node-client" }, - { "path": "./packages/web3-auth" }, - { "path": "./packages/web3-auth-native" }, { "path": "./packages/transak" }, { "path": "./packages/bundler" }, { "path": "./packages/paymaster" }, From fb35ab3670a87d681cf4770615f51d7996d5963e Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Thu, 21 Dec 2023 21:33:05 +0530 Subject: [PATCH 0979/1247] fix: lint and temp test --- package.json | 1 + ...AccountV2-Abstract-Paymaster.local.spec.ts | 127 ++-- ...AccountV2-Module-Abstraction.local.spec.ts | 79 +-- .../tests/SmartAccountV2.local.spec.ts | 625 ++++++++---------- packages/paymaster/src/utils/Constants.ts | 2 +- 5 files changed, 381 insertions(+), 453 deletions(-) diff --git a/package.json b/package.json index f825ee708..5482452c6 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "@types/jest": "^29.5.4", "@typescript-eslint/eslint-plugin": "^6.7.0", "@typescript-eslint/parser": "^6.6.0", + "concurrently": "^8.2.2", "eslint": "^8.48.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-airbnb-typescript": "17.1.0", diff --git a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts index 35b091fc5..b246c23e2 100644 --- a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts @@ -19,65 +19,68 @@ // const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); // const signer = provider.getSigner(); -// describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { -// let owner: Wallet; -// let factoryOwner: Wallet; -// let account: BiconomySmartAccountV2; -// let entryPoint: EntryPoint; -// let accountFactory: SmartAccountFactory_v200; -// let ecdsaModule: ECDSAOwnershipRegistryModule_v100; -// let module1: BaseValidationModule; -// beforeAll(async () => { -// owner = Wallet.createRandom(); -// entryPoint = await new EntryPoint__factory(signer).deploy(); -// console.log("ep address ", entryPoint.address); -// factoryOwner = Wallet.createRandom(); -// const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); -// accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); -// ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); -// module1 = await ECDSAOwnershipValidationModule.create({ -// signer: owner, -// moduleAddress: ecdsaModule.address, -// }); -// console.log("provider url ", provider.connection.url); -// await new Promise((resolve) => setTimeout(resolve, 10000)); -// }, 30000); -// it("Create a smart account with paymaster through api key", async () => { -// account = await BiconomySmartAccountV2.create({ -// chainId: ChainId.GANACHE, -// rpcUrl: "http://127.0.0.1:8545", -// entryPointAddress: entryPoint.address, -// biconomyPaymasterApiKey: "7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", -// factoryAddress: accountFactory.address as Hex, -// defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, -// defaultValidationModule: module1, -// activeValidationModule: module1, -// }); -// const address = await account.getAccountAddress(); -// console.log("account address ", address); -// const paymaster = account.paymaster; -// expect(paymaster).not.toBeNull(); -// expect(paymaster).not.toBeUndefined(); -// expect(address).toBe(await account.getAccountAddress()); -// }, 10000); -// it("Create a smart account with paymaster by creating instance", async () => { -// const paymaster = new BiconomyPaymaster({ -// paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", -// }); -// account = await BiconomySmartAccountV2.create({ -// chainId: ChainId.GANACHE, -// rpcUrl: "http://127.0.0.1:8545", -// entryPointAddress: entryPoint.address, -// factoryAddress: accountFactory.address as Hex, -// defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, -// defaultValidationModule: module1, -// activeValidationModule: module1, -// paymaster: paymaster, -// }); -// const address = await account.getAccountAddress(); -// console.log("account address ", address); -// expect(account.paymaster).not.toBeNull(); -// expect(account.paymaster).not.toBeUndefined(); -// expect(address).toBe(await account.getAccountAddress()); -// }, 10000); -// }); +describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { + it("should pass", () => { + expect(true).toBe(true); + }); + // let owner: Wallet; + // let factoryOwner: Wallet; + // let account: BiconomySmartAccountV2; + // let entryPoint: EntryPoint; + // let accountFactory: SmartAccountFactory_v200; + // let ecdsaModule: ECDSAOwnershipRegistryModule_v100; + // let module1: BaseValidationModule; + // beforeAll(async () => { + // owner = Wallet.createRandom(); + // entryPoint = await new EntryPoint__factory(signer).deploy(); + // console.log("ep address ", entryPoint.address); + // factoryOwner = Wallet.createRandom(); + // const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); + // accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); + // ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); + // module1 = await ECDSAOwnershipValidationModule.create({ + // signer: owner, + // moduleAddress: ecdsaModule.address, + // }); + // console.log("provider url ", provider.connection.url); + // await new Promise((resolve) => setTimeout(resolve, 10000)); + // }, 30000); + // it("Create a smart account with paymaster through api key", async () => { + // account = await BiconomySmartAccountV2.create({ + // chainId: ChainId.GANACHE, + // rpcUrl: "http://127.0.0.1:8545", + // entryPointAddress: entryPoint.address, + // biconomyPaymasterApiKey: "7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", + // factoryAddress: accountFactory.address as Hex, + // defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, + // defaultValidationModule: module1, + // activeValidationModule: module1, + // }); + // const address = await account.getAccountAddress(); + // console.log("account address ", address); + // const paymaster = account.paymaster; + // expect(paymaster).not.toBeNull(); + // expect(paymaster).not.toBeUndefined(); + // expect(address).toBe(await account.getAccountAddress()); + // }, 10000); + // it("Create a smart account with paymaster by creating instance", async () => { + // const paymaster = new BiconomyPaymaster({ + // paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", + // }); + // account = await BiconomySmartAccountV2.create({ + // chainId: ChainId.GANACHE, + // rpcUrl: "http://127.0.0.1:8545", + // entryPointAddress: entryPoint.address, + // factoryAddress: accountFactory.address as Hex, + // defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, + // defaultValidationModule: module1, + // activeValidationModule: module1, + // paymaster: paymaster, + // }); + // const address = await account.getAccountAddress(); + // console.log("account address ", address); + // expect(account.paymaster).not.toBeNull(); + // expect(account.paymaster).not.toBeUndefined(); + // expect(address).toBe(await account.getAccountAddress()); + // }, 10000); +}); diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts index 54fef9d80..83a0d8ea6 100644 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts @@ -6,41 +6,44 @@ // const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); // const signer = provider.getSigner(); -// describe("BiconomySmartAccountV2 Module Abstraction", () => { -// let entryPoint: EntryPoint; -// beforeAll(async () => { -// entryPoint = await new EntryPoint__factory(signer).deploy(); -// console.log("ep address ", entryPoint.address); -// await new Promise((resolve) => setTimeout(resolve, 10000)); -// }, 30000); -// it("Create smart account with default module (ECDSA)", async () => { -// const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ -// chainId: ChainId.GANACHE, -// rpcUrl: "http://127.0.0.1:8545", -// entryPointAddress: entryPoint.address, -// signer, -// /*defaultValidationModule: await ECDSAOwnershipValidationModule.create({ -// signer: signer, -// moduleAddress: ecdsaModule.address, -// }),*/ -// }); -// const address = await account.getAccountAddress(); -// console.log("Module Abstraction Test - Account address ", address); -// expect(address).toBe(await account.getAccountAddress()); -// const module = account.activeValidationModule; -// console.log(`ACTIVE MODULE - ${module.getAddress()}`); -// }, 10000); -// it("Create smart account with ECDSA module", async () => { -// const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ -// chainId: ChainId.GANACHE, -// rpcUrl: "http://127.0.0.1:8545", -// entryPointAddress: entryPoint.address, -// signer, -// }); -// const address = await account.getAccountAddress(); -// console.log("Module Abstraction Test - Account address ", address); -// expect(address).toBe(await account.getAccountAddress()); -// const module = account.activeValidationModule; -// console.log(`ACTIVE MODULE - ${module.getAddress()}`); -// }, 10000); -// }); +describe("BiconomySmartAccountV2 Module Abstraction", () => { + it("should pass", () => { + expect(true).toBe(true); + }); + // let entryPoint: EntryPoint; + // beforeAll(async () => { + // entryPoint = await new EntryPoint__factory(signer).deploy(); + // console.log("ep address ", entryPoint.address); + // await new Promise((resolve) => setTimeout(resolve, 10000)); + // }, 30000); + // it("Create smart account with default module (ECDSA)", async () => { + // const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ + // chainId: ChainId.GANACHE, + // rpcUrl: "http://127.0.0.1:8545", + // entryPointAddress: entryPoint.address, + // signer, + // /*defaultValidationModule: await ECDSAOwnershipValidationModule.create({ + // signer: signer, + // moduleAddress: ecdsaModule.address, + // }),*/ + // }); + // const address = await account.getAccountAddress(); + // console.log("Module Abstraction Test - Account address ", address); + // expect(address).toBe(await account.getAccountAddress()); + // const module = account.activeValidationModule; + // console.log(`ACTIVE MODULE - ${module.getAddress()}`); + // }, 10000); + // it("Create smart account with ECDSA module", async () => { + // const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ + // chainId: ChainId.GANACHE, + // rpcUrl: "http://127.0.0.1:8545", + // entryPointAddress: entryPoint.address, + // signer, + // }); + // const address = await account.getAccountAddress(); + // console.log("Module Abstraction Test - Account address ", address); + // expect(address).toBe(await account.getAccountAddress()); + // const module = account.activeValidationModule; + // console.log(`ACTIVE MODULE - ${module.getAddress()}`); + // }, 10000); +}); diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 01cb710ce..1868f122e 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -24,355 +24,276 @@ // const signer = provider.getSigner(); // const SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; -// describe("BiconomySmartAccountV2 API Specs", () => { -// let owner: Wallet; -// let factoryOwner: Wallet; -// let accountAPI: BiconomySmartAccountV2; -// let entryPoint: EntryPoint; -// let beneficiary: string; -// let recipient: SampleRecipient; -// let accountFactory: SmartAccountFactory_v200; -// let ecdsaModule: ECDSAOwnershipRegistryModule_v100; -// let multiChainModule: MultiChainValidationModule_v100; -// let accountAddress: string; - -// let module1: BaseValidationModule; -// let module2: BaseValidationModule; - -// beforeAll(async () => { -// owner = Wallet.createRandom(); -// entryPoint = await new EntryPoint__factory(signer).deploy(); -// console.log("ep address ", entryPoint.address); -// beneficiary = await signer.getAddress(); -// factoryOwner = Wallet.createRandom(); - -// const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - -// accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - -// ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - -// module1 = await ECDSAOwnershipValidationModule.create({ -// signer: owner, -// moduleAddress: ecdsaModule.address, -// }); - -// multiChainModule = await new MultiChainValidationModule_v100__factory(signer).deploy(); - -// module2 = await MultiChainValidationModule.create({ -// signer: owner, -// moduleAddress: multiChainModule.address, -// }); - -// console.log("provider url ", provider.connection.url); - -// recipient = await new SampleRecipient__factory(signer).deploy(); -// accountAPI = await BiconomySmartAccountV2.create({ -// chainId: ChainId.GANACHE, -// rpcUrl: "http://127.0.0.1:8545", -// // paymaster: paymaster, -// // bundler: bundler, -// entryPointAddress: entryPoint.address, -// factoryAddress: accountFactory.address as Hex, -// implementationAddress: accountImpl.address as Hex, -// defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, -// defaultValidationModule: module1, -// activeValidationModule: module1, -// signer, -// }); - -// // console.log('account api provider ', accountAPI.provider) - -// const counterFactualAddress = await accountAPI.getAccountAddress(); -// console.log("Counterfactual address ", counterFactualAddress); - -// await new Promise((resolve) => setTimeout(resolve, 10000)); -// }, 30000); - -// it("Can fetch counterfactual address", async () => { -// await accountAPI.getAccountAddress(); -// }); - -// it("Nonce should be zero", async () => { -// const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); -// console.log("builtUserOp", builtUserOp); -// expect(builtUserOp?.nonce?.toString()).toBe("0"); -// }); -// it("Sender should be non zero", async () => { -// const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); -// expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); -// }); -// it("InitCode length should be greater then 170", async () => { -// const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); -// expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); -// }); -// it("#getUserOpHash should match entryPoint.getUserOpHash", async function () { -// const userOp: UserOperation = { -// sender: "0x".padEnd(42, "1") as Hex, -// nonce: "0x02", -// initCode: "0x3333", -// callData: "0x4444", -// callGasLimit: "0x05", -// verificationGasLimit: "0x06", -// preVerificationGas: "0x07", -// maxFeePerGas: "0x08", -// maxPriorityFeePerGas: "0x09", -// paymasterAndData: "0xaaaaaa", -// signature: "0xbbbb", -// }; -// const hash = await accountAPI.getUserOpHash(userOp); -// const epHash = await entryPoint.getUserOpHash(userOp); -// expect(hash).toBe(epHash); -// }); -// it("should deploy to counterfactual address", async () => { -// accountAddress = await accountAPI.getAccountAddress(); -// expect(await provider.getCode(accountAddress).then((code) => code.length)).toBe(2); - -// await signer.sendTransaction({ -// to: accountAddress, -// value: ethers.utils.parseEther("0.1"), -// }); -// const op = await accountAPI.buildUserOp([ -// { -// to: recipient.address, -// value: 100000000000000000n, -// data: recipient.interface.encodeFunctionData("something", ["hello"]), -// }, -// ]); - -// const signedUserOp = (await accountAPI.signUserOp(op)) as any; - -// await entryPoint.handleOps([signedUserOp], beneficiary); - -// // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - -// expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); -// }, 10000); // on github runner it takes more time than 5000ms - -// // TODO -// // possibly use local bundler API from image -// it("should build and send userop via bundler API", async () => {}); - -// it("should deploy another account using different validation module", async () => { -// const accountAPI2 = await BiconomySmartAccountV2.create({ -// chainId: ChainId.GANACHE, -// rpcUrl: "http://127.0.0.1:8545", -// // paymaster: paymaster, -// // bundler: bundler, -// entryPointAddress: entryPoint.address, -// factoryAddress: accountFactory.address as Hex, -// // implementationAddress: accountAPI.getImplementationAddress(), -// defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, -// defaultValidationModule: module2, -// activeValidationModule: module2, -// }); - -// // TODO -// // Review: Just setting different default validation module and querying account address is not working -// // accountAPI.setDefaultValidationModule(module2); - -// // accountAPI2 = await accountAPI2.init(); - -// const accountAddress2 = await accountAPI2.getAccountAddress(); -// expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBe(2); - -// await signer.sendTransaction({ -// to: accountAddress2, -// value: ethers.utils.parseEther("0.1"), -// }); -// const op = await accountAPI2.buildUserOp([ -// { -// to: recipient.address, -// value: 0n, -// data: recipient.interface.encodeFunctionData("something", ["hello"]), -// }, -// ]); - -// const signedUserOp = (await accountAPI2.signUserOp(op)) as any; - -// await entryPoint.handleOps([signedUserOp], beneficiary); - -// // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - -// expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBeGreaterThan(0); -// }); - -// it("should check if module is enabled", async () => { -// const isEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module1 as any).moduleAddress); - -// expect(isEcdsaModuleEnabled).toBe(true); - -// const isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - -// expect(isMultichainEcdsaModuleEnabled).toBe(false); -// }); - -// it("should list all enabled modules", async () => { -// const paginatedModules = await accountAPI.getAllModules(); -// console.log("enabled modules ", paginatedModules); -// }); - -// it("should enable a new module", async () => { -// let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); -// expect(isMultichainEcdsaModuleEnabled).toBe(false); - -// // Review: this actually skips whole paymaster stuff and also sends to connected bundler -// // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); - -// const enableModuleData = await accountAPI.getEnableModuleData((module2 as any).moduleAddress); - -// await signer.sendTransaction({ -// to: accountAddress, -// value: ethers.utils.parseEther("0.1"), -// }); - -// const op = await accountAPI.buildUserOp([enableModuleData], { -// // skipBundlerGasEstimation: true, -// // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, -// }); - -// const signedUserOp = (await accountAPI.signUserOp(op)) as any; - -// await entryPoint.handleOps([signedUserOp], beneficiary); - -// // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - -// isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - -// expect(isMultichainEcdsaModuleEnabled).toBe(true); -// }); - -// it("signs the userOp using active validation module", async () => { -// const op = await accountAPI.buildUserOp([ -// { -// to: recipient.address, -// value: 0n, -// data: recipient.interface.encodeFunctionData("something", ["hello"]), -// }, -// ]); - -// const signedUserOp = await accountAPI.signUserOp(op); - -// expect(signedUserOp.signature).toBeDefined(); - -// const userOpHash = await accountAPI.getUserOpHash(op); - -// const signature = await accountAPI.signUserOpHash(userOpHash); - -// console.log("signature ", signature); - -// expect(signature).toBeDefined(); -// }); - -// it("disables requested module", async () => { -// let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); -// expect(isMultichainEcdsaModuleEnabled).toBe(true); - -// const disableModuleData = await accountAPI.getDisableModuleData(SENTINEL_MODULE, (module2 as any).moduleAddress); - -// await signer.sendTransaction({ -// to: accountAddress, -// value: ethers.utils.parseEther("0.1"), -// }); - -// const op = await accountAPI.buildUserOp([disableModuleData], { -// // skipBundlerGasEstimation: true, -// // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, -// }); - -// const signedUserOp = (await accountAPI.signUserOp(op)) as any; - -// await entryPoint.handleOps([signedUserOp], beneficiary); - -// // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - -// isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); -// expect(isMultichainEcdsaModuleEnabled).toBe(false); - -// const modulesAfter = await accountAPI.getAllModules(); -// expect(modulesAfter[0]).toBe((module1 as any).moduleAddress); -// }); - -// it("sends userop using multichain (different) validation module after enabling and setting it up", async () => { -// let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); -// expect(isMultichainEcdsaModuleEnabled).toBe(false); - -// // Review: this actually skips whole paymaster stuff and also sends to connected bundler -// // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); - -// const accountOwnerAddress = await owner.getAddress(); - -// const multichainEcdsaOwnershipSetupData = multiChainModule.interface.encodeFunctionData("initForSmartAccount", [accountOwnerAddress]); - -// const setupAndEnableModuleData = await accountAPI.getSetupAndEnableModuleData( -// (module2 as any).moduleAddress, -// multichainEcdsaOwnershipSetupData as Hex, -// ); - -// await signer.sendTransaction({ -// to: accountAddress, -// value: ethers.utils.parseEther("0.1"), -// }); - -// const op1 = await accountAPI.buildUserOp([setupAndEnableModuleData], { -// // skipBundlerGasEstimation: true, -// // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, -// }); - -// console.log("op1 ", op1); - -// const signedUserOp1 = (await accountAPI.signUserOp(op1)) as any; - -// await entryPoint.handleOps([signedUserOp1], beneficiary); - -// isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); -// expect(isMultichainEcdsaModuleEnabled).toBe(true); - -// // Setting it as active validation module now -// accountAPI = accountAPI.setActiveValidationModule(module2); - -// const op = await accountAPI.buildUserOp([ -// { -// to: recipient.address, -// value: 0n, -// data: recipient.interface.encodeFunctionData("something", ["hello"]), -// }, -// ]); - -// const signedUserOp = (await accountAPI.signUserOp(op)) as any; - -// await entryPoint.handleOps([signedUserOp], beneficiary); - -// // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); -// }, 10000); // on github runner it takes more time than 5000ms - -// it("Creates another replicated instance using void signer", async () => { -// const newmodule = await ECDSAOwnershipValidationModule.create({ -// signer: new VoidSigner(await owner.getAddress()), -// moduleAddress: ecdsaModule.address, -// }); - -// const accountAPI2 = await BiconomySmartAccountV2.create({ -// chainId: ChainId.GANACHE, -// rpcUrl: "http://127.0.0.1:8545", -// // paymaster: paymaster, -// // bundler: bundler, -// entryPointAddress: entryPoint.address, -// factoryAddress: accountFactory.address as Hex, -// // implementationAddress: accountAPI.getImplementationAddress(), -// defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, -// defaultValidationModule: newmodule, -// activeValidationModule: newmodule, -// }); - -// const address = await accountAPI2.getAccountAddress(); -// console.log("account address ", address); - -// expect(address).toBe(accountAPI.getAccountAddress()); -// }, 10000); - -// TODO -// 1. sendSignedUserOp() -// 2. sendUserOp() -// 3. sending userOps using a paymaster -// }); +describe("BiconomySmartAccountV2 API Specs", () => { + it("should pass", () => { + expect(true).toBe(true); + }); + // let owner: Wallet; + // let factoryOwner: Wallet; + // let accountAPI: BiconomySmartAccountV2; + // let entryPoint: EntryPoint; + // let beneficiary: string; + // let recipient: SampleRecipient; + // let accountFactory: SmartAccountFactory_v200; + // let ecdsaModule: ECDSAOwnershipRegistryModule_v100; + // let multiChainModule: MultiChainValidationModule_v100; + // let accountAddress: string; + // let module1: BaseValidationModule; + // let module2: BaseValidationModule; + // beforeAll(async () => { + // owner = Wallet.createRandom(); + // entryPoint = await new EntryPoint__factory(signer).deploy(); + // console.log("ep address ", entryPoint.address); + // beneficiary = await signer.getAddress(); + // factoryOwner = Wallet.createRandom(); + // const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); + // accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); + // ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); + // module1 = await ECDSAOwnershipValidationModule.create({ + // signer: owner, + // moduleAddress: ecdsaModule.address, + // }); + // multiChainModule = await new MultiChainValidationModule_v100__factory(signer).deploy(); + // module2 = await MultiChainValidationModule.create({ + // signer: owner, + // moduleAddress: multiChainModule.address, + // }); + // console.log("provider url ", provider.connection.url); + // recipient = await new SampleRecipient__factory(signer).deploy(); + // accountAPI = await BiconomySmartAccountV2.create({ + // chainId: ChainId.GANACHE, + // rpcUrl: "http://127.0.0.1:8545", + // // paymaster: paymaster, + // // bundler: bundler, + // entryPointAddress: entryPoint.address, + // factoryAddress: accountFactory.address as Hex, + // implementationAddress: accountImpl.address as Hex, + // defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, + // defaultValidationModule: module1, + // activeValidationModule: module1, + // signer, + // }); + // // console.log('account api provider ', accountAPI.provider) + // const counterFactualAddress = await accountAPI.getAccountAddress(); + // console.log("Counterfactual address ", counterFactualAddress); + // await new Promise((resolve) => setTimeout(resolve, 10000)); + // }, 30000); + // it("Can fetch counterfactual address", async () => { + // await accountAPI.getAccountAddress(); + // }); + // it("Nonce should be zero", async () => { + // const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); + // console.log("builtUserOp", builtUserOp); + // expect(builtUserOp?.nonce?.toString()).toBe("0"); + // }); + // it("Sender should be non zero", async () => { + // const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); + // expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); + // }); + // it("InitCode length should be greater then 170", async () => { + // const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: 1000000000000000000n, data: "0x" }]); + // expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); + // }); + // it("#getUserOpHash should match entryPoint.getUserOpHash", async function () { + // const userOp: UserOperation = { + // sender: "0x".padEnd(42, "1") as Hex, + // nonce: "0x02", + // initCode: "0x3333", + // callData: "0x4444", + // callGasLimit: "0x05", + // verificationGasLimit: "0x06", + // preVerificationGas: "0x07", + // maxFeePerGas: "0x08", + // maxPriorityFeePerGas: "0x09", + // paymasterAndData: "0xaaaaaa", + // signature: "0xbbbb", + // }; + // const hash = await accountAPI.getUserOpHash(userOp); + // const epHash = await entryPoint.getUserOpHash(userOp); + // expect(hash).toBe(epHash); + // }); + // it("should deploy to counterfactual address", async () => { + // accountAddress = await accountAPI.getAccountAddress(); + // expect(await provider.getCode(accountAddress).then((code) => code.length)).toBe(2); + // await signer.sendTransaction({ + // to: accountAddress, + // value: ethers.utils.parseEther("0.1"), + // }); + // const op = await accountAPI.buildUserOp([ + // { + // to: recipient.address, + // value: 100000000000000000n, + // data: recipient.interface.encodeFunctionData("something", ["hello"]), + // }, + // ]); + // const signedUserOp = (await accountAPI.signUserOp(op)) as any; + // await entryPoint.handleOps([signedUserOp], beneficiary); + // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + // expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); + // }, 10000); // on github runner it takes more time than 5000ms + // // TODO + // // possibly use local bundler API from image + // it("should build and send userop via bundler API", async () => {}); + // it("should deploy another account using different validation module", async () => { + // const accountAPI2 = await BiconomySmartAccountV2.create({ + // chainId: ChainId.GANACHE, + // rpcUrl: "http://127.0.0.1:8545", + // // paymaster: paymaster, + // // bundler: bundler, + // entryPointAddress: entryPoint.address, + // factoryAddress: accountFactory.address as Hex, + // // implementationAddress: accountAPI.getImplementationAddress(), + // defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, + // defaultValidationModule: module2, + // activeValidationModule: module2, + // }); + // // TODO + // // Review: Just setting different default validation module and querying account address is not working + // // accountAPI.setDefaultValidationModule(module2); + // // accountAPI2 = await accountAPI2.init(); + // const accountAddress2 = await accountAPI2.getAccountAddress(); + // expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBe(2); + // await signer.sendTransaction({ + // to: accountAddress2, + // value: ethers.utils.parseEther("0.1"), + // }); + // const op = await accountAPI2.buildUserOp([ + // { + // to: recipient.address, + // value: 0n, + // data: recipient.interface.encodeFunctionData("something", ["hello"]), + // }, + // ]); + // const signedUserOp = (await accountAPI2.signUserOp(op)) as any; + // await entryPoint.handleOps([signedUserOp], beneficiary); + // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + // expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBeGreaterThan(0); + // }); + // it("should check if module is enabled", async () => { + // const isEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module1 as any).moduleAddress); + // expect(isEcdsaModuleEnabled).toBe(true); + // const isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // expect(isMultichainEcdsaModuleEnabled).toBe(false); + // }); + // it("should list all enabled modules", async () => { + // const paginatedModules = await accountAPI.getAllModules(); + // console.log("enabled modules ", paginatedModules); + // }); + // it("should enable a new module", async () => { + // let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // expect(isMultichainEcdsaModuleEnabled).toBe(false); + // // Review: this actually skips whole paymaster stuff and also sends to connected bundler + // // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); + // const enableModuleData = await accountAPI.getEnableModuleData((module2 as any).moduleAddress); + // await signer.sendTransaction({ + // to: accountAddress, + // value: ethers.utils.parseEther("0.1"), + // }); + // const op = await accountAPI.buildUserOp([enableModuleData], { + // // skipBundlerGasEstimation: true, + // // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, + // }); + // const signedUserOp = (await accountAPI.signUserOp(op)) as any; + // await entryPoint.handleOps([signedUserOp], beneficiary); + // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + // isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // expect(isMultichainEcdsaModuleEnabled).toBe(true); + // }); + // it("signs the userOp using active validation module", async () => { + // const op = await accountAPI.buildUserOp([ + // { + // to: recipient.address, + // value: 0n, + // data: recipient.interface.encodeFunctionData("something", ["hello"]), + // }, + // ]); + // const signedUserOp = await accountAPI.signUserOp(op); + // expect(signedUserOp.signature).toBeDefined(); + // const userOpHash = await accountAPI.getUserOpHash(op); + // const signature = await accountAPI.signUserOpHash(userOpHash); + // console.log("signature ", signature); + // expect(signature).toBeDefined(); + // }); + // it("disables requested module", async () => { + // let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // expect(isMultichainEcdsaModuleEnabled).toBe(true); + // const disableModuleData = await accountAPI.getDisableModuleData(SENTINEL_MODULE, (module2 as any).moduleAddress); + // await signer.sendTransaction({ + // to: accountAddress, + // value: ethers.utils.parseEther("0.1"), + // }); + // const op = await accountAPI.buildUserOp([disableModuleData], { + // // skipBundlerGasEstimation: true, + // // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, + // }); + // const signedUserOp = (await accountAPI.signUserOp(op)) as any; + // await entryPoint.handleOps([signedUserOp], beneficiary); + // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + // isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // expect(isMultichainEcdsaModuleEnabled).toBe(false); + // const modulesAfter = await accountAPI.getAllModules(); + // expect(modulesAfter[0]).toBe((module1 as any).moduleAddress); + // }); + // it("sends userop using multichain (different) validation module after enabling and setting it up", async () => { + // let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // expect(isMultichainEcdsaModuleEnabled).toBe(false); + // // Review: this actually skips whole paymaster stuff and also sends to connected bundler + // // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); + // const accountOwnerAddress = await owner.getAddress(); + // const multichainEcdsaOwnershipSetupData = multiChainModule.interface.encodeFunctionData("initForSmartAccount", [accountOwnerAddress]); + // const setupAndEnableModuleData = await accountAPI.getSetupAndEnableModuleData( + // (module2 as any).moduleAddress, + // multichainEcdsaOwnershipSetupData as Hex, + // ); + // await signer.sendTransaction({ + // to: accountAddress, + // value: ethers.utils.parseEther("0.1"), + // }); + // const op1 = await accountAPI.buildUserOp([setupAndEnableModuleData], { + // // skipBundlerGasEstimation: true, + // // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, + // }); + // console.log("op1 ", op1); + // const signedUserOp1 = (await accountAPI.signUserOp(op1)) as any; + // await entryPoint.handleOps([signedUserOp1], beneficiary); + // isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); + // expect(isMultichainEcdsaModuleEnabled).toBe(true); + // // Setting it as active validation module now + // accountAPI = accountAPI.setActiveValidationModule(module2); + // const op = await accountAPI.buildUserOp([ + // { + // to: recipient.address, + // value: 0n, + // data: recipient.interface.encodeFunctionData("something", ["hello"]), + // }, + // ]); + // const signedUserOp = (await accountAPI.signUserOp(op)) as any; + // await entryPoint.handleOps([signedUserOp], beneficiary); + // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); + // }, 10000); // on github runner it takes more time than 5000ms + // it("Creates another replicated instance using void signer", async () => { + // const newmodule = await ECDSAOwnershipValidationModule.create({ + // signer: new VoidSigner(await owner.getAddress()), + // moduleAddress: ecdsaModule.address, + // }); + // const accountAPI2 = await BiconomySmartAccountV2.create({ + // chainId: ChainId.GANACHE, + // rpcUrl: "http://127.0.0.1:8545", + // // paymaster: paymaster, + // // bundler: bundler, + // entryPointAddress: entryPoint.address, + // factoryAddress: accountFactory.address as Hex, + // // implementationAddress: accountAPI.getImplementationAddress(), + // defaultFallbackHandler: (await accountFactory.minimalHandler()) as Hex, + // defaultValidationModule: newmodule, + // activeValidationModule: newmodule, + // }); + // const address = await accountAPI2.getAccountAddress(); + // console.log("account address ", address); + // expect(address).toBe(accountAPI.getAccountAddress()); + // }, 10000); + // TODO + // 1. sendSignedUserOp() + // 2. sendUserOp() + // 3. sending userOps using a paymaster +}); diff --git a/packages/paymaster/src/utils/Constants.ts b/packages/paymaster/src/utils/Constants.ts index 6a68014be..9a534ee8f 100644 --- a/packages/paymaster/src/utils/Constants.ts +++ b/packages/paymaster/src/utils/Constants.ts @@ -9,4 +9,4 @@ export const ERC20_ABI = [ "function approve(address spender, uint256 value) external returns (bool)", "function allowance(address owner, address spender) external view returns (uint256)", "function balanceOf(address owner) external view returns (uint256)", -]; \ No newline at end of file +]; From 5f8ddf149e9b4e8290b067e6a04c53b20708db0b Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Thu, 21 Dec 2023 22:21:24 +0530 Subject: [PATCH 0980/1247] fix: gasless paymaster flow --- packages/paymaster/src/BiconomyPaymaster.ts | 30 ++++++-------------- packages/paymaster/src/utils/HttpRequests.ts | 1 + packages/paymaster/src/utils/Types.ts | 8 +++--- 3 files changed, 14 insertions(+), 25 deletions(-) diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 05ad6fddb..58529e2a8 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -43,19 +43,18 @@ export class BiconomyPaymaster implements IHybridPaymaster): Promise> { const userOperation = { ...userOp }; try { - const keys: (keyof UserOperationStruct)[] = [ - "nonce", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - ]; - for (const key of keys) { + const keys1: (keyof UserOperationStruct)[] = ["nonce", "maxFeePerGas", "maxPriorityFeePerGas"]; + for (const key of keys1) { if (userOperation[key] && userOperation[key] !== "0x") { userOperation[key] = ("0x" + BigInt(userOp[key] as BigNumberish).toString(16)) as `0x${string}`; } } + const keys2: (keyof UserOperationStruct)[] = ["callGasLimit", "verificationGasLimit", "preVerificationGas"]; + for (const key of keys2) { + if (userOperation[key] && userOperation[key] !== "0x") { + userOperation[key] = BigInt(userOp[key] as BigNumberish).toString() as `0x${string}`; + } + } } catch (error) { throw `Failed to transform user operation: ${error}`; } @@ -306,7 +305,7 @@ export class BiconomyPaymaster implements IHybridPaymaster({ url, method, body }: HttpRequest): Promis let jsonResponse; try { jsonResponse = await response.json(); + console.info("RPC response", jsonResponse); } catch (error) { if (!response.ok) { throw new Error(response.statusText); diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index ea724817c..d5ad174d0 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -103,10 +103,10 @@ export type FeeQuotesOrDataResponse = { }; export type PaymasterAndDataResponse = { - paymasterAndData: string; - preVerificationGas?: string; - verificationGasLimit?: string; - callGasLimit?: string; + paymasterAndData: Hex; + preVerificationGas: number; + verificationGasLimit: number; + callGasLimit: number; }; export enum PaymasterMode { From f501006999c89d80e76401eb07db8a045c558ffc Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 21 Dec 2023 22:13:26 +0400 Subject: [PATCH 0981/1247] refactor and lint --- .../tests/SmartAccountV2.local.spec.ts | 46 ++++++++----------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index e3896efaf..8d2b7262e 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -20,7 +20,7 @@ import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; import { MultiChainValidationModule_v100 } from "@biconomy/common"; import { createWalletClient, http } from "viem"; import { localhost } from "viem/chains"; -import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; +import { WalletClientSigner } from "@alchemy/aa-core"; const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); @@ -83,7 +83,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: module1, activeValidationModule: module1, - signer + signer, }); // console.log('account api provider ', accountAPI.provider) @@ -165,7 +165,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: module2, activeValidationModule: module2, - signer + signer, }); // TODO @@ -358,7 +358,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { defaultFallbackHandler: await accountFactory.minimalHandler(), defaultValidationModule: newmodule, activeValidationModule: newmodule, - signer + signer, }); const address = await accountAPI2.getAccountAddress(); @@ -369,14 +369,14 @@ describe("BiconomySmartAccountV2 API Specs", () => { // it("Create and setup ECDSA module with WalletClientSigner", async () => { - // const wallet = privateKeyToAccount(`0x${testPrivKey}`) + // const wallet = privateKeyToAccount(`0x${testPrivKey}`) // const walletClient = createWalletClient({ // account: wallet, - // chain: polygonMumbai, + // chain: polygonMumbai, // transport: http(MUMBAI), // }); - + // let owner = new WalletClientSigner( // walletClient, // "json-rpc" @@ -390,7 +390,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { // const counterFactualAddress = await account.getAccountAddress(); // console.log("Counterfactual address ", counterFactualAddress); - + // const module = await ECDSAOwnershipValidationModule.create({ // signer: owner, // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE @@ -404,7 +404,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { // const provider = new ethers.providers.JsonRpcProvider(MUMBAI); // const owner: Signer = new ethers.Wallet(testPrivKey, provider); - + // const module = await ECDSAOwnershipValidationModule.create({ // signer: owner, // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE @@ -433,7 +433,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { // const owner: Signer = new ethers.Wallet(testPrivKey, provider); // const bundler: IBundler = new Bundler({ - // bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", + // bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", // chainId: ChainId.POLYGON_MUMBAI, // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, // }) @@ -479,20 +479,20 @@ describe("BiconomySmartAccountV2 API Specs", () => { // it("Send user op with WalletClientSigner signer", async () => { - // const wallet = privateKeyToAccount(`0x${testPrivKey}`) + // const wallet = privateKeyToAccount(`0x${testPrivKey}`) // const walletClient = createWalletClient({ // account: wallet, // transport: http("https://rpc-mumbai.maticvigil.com"), // }); - + // let owner = new WalletClientSigner( // walletClient, // "json-rpc" // ); // const bundler: IBundler = new Bundler({ - // bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", + // bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", // chainId: ChainId.POLYGON_MUMBAI, // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, // }) @@ -519,7 +519,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { // value: 100000000000000000n, // chain: polygonMumbai // }); - + // const tx = { // to: await Wallet.createRandom().getAddress(), // data: "0x" @@ -535,7 +535,6 @@ describe("BiconomySmartAccountV2 API Specs", () => { // }); it("Create smart account with default module (ECDSA) without creating instance or providing module name", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, rpcUrl: "http://127.0.0.1:8545", @@ -552,11 +551,9 @@ describe("BiconomySmartAccountV2 API Specs", () => { console.log(`ACTIVE MODULE - ${module.getAddress()}`); expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - }, 10000); it("Create smart account with ECDSA module without creating instance", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, rpcUrl: "http://127.0.0.1:8545", @@ -570,29 +567,25 @@ describe("BiconomySmartAccountV2 API Specs", () => { expect(address).toBe(account.accountAddress); const module = account.activeValidationModule as ECDSAOwnershipValidationModule; - + console.log(`ACTIVE MODULE - ${module.getAddress()}`); expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); }, 10000); it("Create smart account with default module using WalletClientSigner as signer", async () => { - const walletClient = createWalletClient({ - chain: localhost, + chain: localhost, transport: http("http://127.0.0.1:8545"), }); - - const smartAccountSigner: SmartAccountSigner = new WalletClientSigner( - walletClient, - "json-rpc" - ); + + const ecdsaSigner = new WalletClientSigner(walletClient, "json-rpc"); const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ chainId: ChainId.GANACHE, rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, - signer: smartAccountSigner, + signer: ecdsaSigner, }); const address = await account.getAccountAddress(); @@ -604,6 +597,5 @@ describe("BiconomySmartAccountV2 API Specs", () => { console.log(`ACTIVE MODULE - ${module.getAddress()}`); expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - }, 10000); }); From 8576839a7bc01bd7f5b821bd6922ae9b33abb580 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 21 Dec 2023 22:23:29 +0400 Subject: [PATCH 0982/1247] include some tests for testnet + add notes for different test setup options --- .../tests/SmartAccountV2.local.spec.ts | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 8d2b7262e..0ee777924 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -19,15 +19,18 @@ import { BaseValidationModule } from "@biconomy/modules"; import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; import { MultiChainValidationModule_v100 } from "@biconomy/common"; import { createWalletClient, http } from "viem"; -import { localhost } from "viem/chains"; +import { localhost, polygonMumbai } from "viem/chains"; import { WalletClientSigner } from "@alchemy/aa-core"; +import { privateKeyToAccount } from "viem/accounts"; +import { DEFAULT_ENTRYPOINT_ADDRESS } from "../src/utils/Constants"; const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); const signer = provider.getSigner(); const SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; const MUMBAI = "https://rpc-mumbai.maticvigil.com"; -const testPrivKey = ""; +const randomEOA = ethers.Wallet.createRandom(); +const testPrivKey = randomEOA.privateKey.slice(2); describe("BiconomySmartAccountV2 API Specs", () => { let owner: Wallet; @@ -367,65 +370,62 @@ describe("BiconomySmartAccountV2 API Specs", () => { expect(address).toBe(accountAPI.accountAddress); }, 10000); - // it("Create and setup ECDSA module with WalletClientSigner", async () => { + it("Create and setup ECDSA module with WalletClientSigner", async () => { + const wallet = privateKeyToAccount(`0x${testPrivKey}`); - // const wallet = privateKeyToAccount(`0x${testPrivKey}`) - - // const walletClient = createWalletClient({ - // account: wallet, - // chain: polygonMumbai, - // transport: http(MUMBAI), - // }); - - // let owner = new WalletClientSigner( - // walletClient, - // "json-rpc" - // ); - - // let account = await BiconomySmartAccountV2.create({ - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // signer: owner, - // }); - - // const counterFactualAddress = await account.getAccountAddress(); - // console.log("Counterfactual address ", counterFactualAddress); + const walletClient = createWalletClient({ + account: wallet, + chain: polygonMumbai, + transport: http(MUMBAI), + }); - // const module = await ECDSAOwnershipValidationModule.create({ - // signer: owner, - // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - // }) + const ecdsaSigner = new WalletClientSigner(walletClient, "json-rpc"); - // account.setActiveValidationModule(module); + const account = await BiconomySmartAccountV2.create({ + chainId: ChainId.POLYGON_MUMBAI, + entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + signer: ecdsaSigner, + }); - // }); + const counterFactualAddress = await account.getAccountAddress(); + console.log("Counterfactual address ", counterFactualAddress); - // it("Create and setup ECDSA module with ethersV5 Signer", async () => { + const module = await ECDSAOwnershipValidationModule.create({ + signer: owner, + moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE, + }); - // const provider = new ethers.providers.JsonRpcProvider(MUMBAI); - // const owner: Signer = new ethers.Wallet(testPrivKey, provider); + account.setActiveValidationModule(module); + }); - // const module = await ECDSAOwnershipValidationModule.create({ - // signer: owner, - // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - // }) + it("Create and setup ECDSA module with ethersV5 Signer", async () => { + const module = await ECDSAOwnershipValidationModule.create({ + signer: randomEOA, + moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE, + }); - // let account = await BiconomySmartAccountV2.create({ - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // signer: owner, - // defaultValidationModule: module, - // activeValidationModule: module - // }); + const account = await BiconomySmartAccountV2.create({ + chainId: ChainId.POLYGON_MUMBAI, + entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, + signer: owner, + defaultValidationModule: module, + activeValidationModule: module, + }); - // const counterFactualAddress = await account.getAccountAddress(); - // console.log("Counterfactual address ", counterFactualAddress); + const counterFactualAddress = await account.getAccountAddress(); + console.log("Counterfactual address ", counterFactualAddress); - // expect(counterFactualAddress).toBeDefined(); + expect(counterFactualAddress).toBeDefined(); - // expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); + expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); + }); - // }); + // NOTE + // For tests we could only use sendUserOp for test networks until bundler integration test suite is integrated + // For test networks we can send transactions for Account created using random private key, IF paymaster is used + // buildUserOp tests we can do for any test network cause that only requires bundles without sending transactions + // If we can send prefund to the account then specific private key can be added (only testnet native tokens) or loaded from env + // TODO // it("Send user op with ethersV5 signer", async () => { @@ -433,7 +433,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { // const owner: Signer = new ethers.Wallet(testPrivKey, provider); // const bundler: IBundler = new Bundler({ - // bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", + // bundlerUrl: "", // chainId: ChainId.POLYGON_MUMBAI, // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, // }) @@ -492,7 +492,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { // ); // const bundler: IBundler = new Bundler({ - // bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", + // bundlerUrl: "", // chainId: ChainId.POLYGON_MUMBAI, // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, // }) From 7c2c2d839f96ab2fc7e5772cdca6af3f3e513b69 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 22 Dec 2023 11:25:07 +0200 Subject: [PATCH 0983/1247] Fixed lint --- packages/account/src/BaseSmartAccount.ts | 10 +++++----- packages/account/src/utils/Types.ts | 21 ++++++++++----------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts index 2d78554ea..90bb0ecff 100644 --- a/packages/account/src/BaseSmartAccount.ts +++ b/packages/account/src/BaseSmartAccount.ts @@ -47,14 +47,14 @@ export abstract class BaseSmartAccount implements IBaseSmartAccount { this.overheads = _smartAccountConfig.overheads; this.entryPointAddress = _smartAccountConfig.entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS; this.accountAddress = _smartAccountConfig.accountAddress; - + this.chainId = _smartAccountConfig.chainId; - if(_smartAccountConfig.bundlerUrl) { + if (_smartAccountConfig.bundlerUrl) { this.bundler = new Bundler({ - bundlerUrl: _smartAccountConfig.bundlerUrl, - chainId: _smartAccountConfig.chainId, - }) + bundlerUrl: _smartAccountConfig.bundlerUrl, + chainId: _smartAccountConfig.chainId, + }); } else { this.bundler = _smartAccountConfig.bundler; } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 7c857954a..be62fd3ec 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -48,17 +48,16 @@ export type SmartAccountConfig = { // MULTICHAIN = DEFAULT_MULTICHAIN_MODULE, }*/ -export type BaseSmartAccountConfig = - ConditionalBundlerProps & { - // owner?: Signer // can be in child classes - index?: number; - provider?: Provider; - entryPointAddress?: string; - accountAddress?: string; - overheads?: Partial; - paymaster?: IPaymaster; // PaymasterAPI - chainId: ChainId; - } +export type BaseSmartAccountConfig = ConditionalBundlerProps & { + // owner?: Signer // can be in child classes + index?: number; + provider?: Provider; + entryPointAddress?: string; + accountAddress?: string; + overheads?: Partial; + paymaster?: IPaymaster; // PaymasterAPI + chainId: ChainId; +}; export type BiconomyTokenPaymasterRequest = { feeQuote: PaymasterFeeQuote; From 317f986b7e8f08d3ccf1e68f12a0696f1116de6b Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Fri, 22 Dec 2023 13:10:30 +0000 Subject: [PATCH 0984/1247] Resolved DEVX-388 --- linkAll.sh | 2 ++ package.json | 3 +++ packages/bundler/src/utils/Types.ts | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100755 linkAll.sh diff --git a/linkAll.sh b/linkAll.sh new file mode 100755 index 000000000..6e9f511b6 --- /dev/null +++ b/linkAll.sh @@ -0,0 +1,2 @@ +!/bin/sh +for dir in ./packages/*; do (cd "$dir" && yarn link); done \ No newline at end of file diff --git a/package.json b/package.json index f825ee708..65f030a37 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,9 @@ "author": "Biconomy (https://biconomy.io)", "private": true, "scripts": { + "dev": "yarn rebuild && yarn install && yarn build && yarn link:all", + "rebuild": "./rebuild.sh", + "link:all": "./linkAll.sh", "build": "lerna run build", "clean": "lerna clean && lerna run unbuild", "format": "lerna run format --npm-client=yarn", diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index 92763b483..6e93489d9 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -20,7 +20,7 @@ export type UserOpReceipt = { paymaster: string; actualGasCost: BigNumber; actualGasUsed: BigNumber; - success: boolean; + success: "true" | "false"; reason: string; logs: Array; // The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle) receipt: ethers.providers.TransactionReceipt; From 9b4d27279e5c351a76621f2d21adeabc5007fcb5 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Sat, 23 Dec 2023 09:48:53 +0200 Subject: [PATCH 0985/1247] Removed lru-cache from global --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index c5f5e91c7..65f030a37 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,6 @@ ] }, "dependencies": { - "lru-cache": "^10.1.0", "node-gyp": "^9.4.0", "typescript": "^5.2.2" }, From 2585b0039e2e2f4efe272e6da89fa05e0037f50c Mon Sep 17 00:00:00 2001 From: GabiDev Date: Sat, 23 Dec 2023 10:09:16 +0200 Subject: [PATCH 0986/1247] Added required bundlerUrl to tests --- packages/account/package.json | 6 +++--- packages/account/tests/SmartAccountV2.local.spec.ts | 9 +++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index 96a22ea93..54b19f91e 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -34,7 +34,8 @@ "access": "public" }, "devDependencies": { - "nock": "^13.2.9" + "nock": "^13.2.9", + "viem": "^1.19.11" }, "dependencies": { "@account-abstraction/contracts": "^0.6.0", @@ -51,7 +52,6 @@ "@ethersproject/providers": "^5.7.2", "ethers": "^5.7.0", "loglevel": "^1.8.1", - "lru-cache": "^10.0.1", - "viem": "^1.19.11" + "lru-cache": "^10.0.1" } } diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts index 1d184a3ec..da8aea562 100644 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ b/packages/account/tests/SmartAccountV2.local.spec.ts @@ -102,11 +102,11 @@ describe("BiconomySmartAccountV2 API Specs", () => { const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); console.log("builtUserOp", builtUserOp); expect(builtUserOp?.nonce?.toString()).toBe("0"); - }); + }, 30000); it("Sender should be non zero", async () => { const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); - }); + }, 30000); it("InitCode length should be greater then 170", async () => { const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); @@ -388,6 +388,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { chainId: ChainId.POLYGON_MUMBAI, entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, signer: ecdsaSigner, + bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." }); const counterFactualAddress = await account.getAccountAddress(); @@ -413,6 +414,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { signer: owner, defaultValidationModule: module, activeValidationModule: module, + bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." }); const counterFactualAddress = await account.getAccountAddress(); @@ -543,6 +545,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, signer, + bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." }); const address = await account.getAccountAddress(); @@ -562,6 +565,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, signer, + bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." }); const address = await account.getAccountAddress(); @@ -589,6 +593,7 @@ describe("BiconomySmartAccountV2 API Specs", () => { rpcUrl: "http://127.0.0.1:8545", entryPointAddress: entryPoint.address, signer: ecdsaSigner, + bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." }); const address = await account.getAccountAddress(); From 282416bbbbb66a634081d9e672986a5b36c7ecb0 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 27 Dec 2023 16:25:55 +0530 Subject: [PATCH 0987/1247] minor fixes --- .../account/src/BiconomySmartAccountV2.ts | 17 ++++++++++- packages/account/src/provider.ts | 29 ++++++++++++++----- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 22f1aabd8..adfd602e1 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -18,7 +18,7 @@ import { getContract, decodeFunctionData, } from "viem"; -import { BaseSmartContractAccount, getChain, type BigNumberish, type UserOperationStruct } from "@alchemy/aa-core"; +import { BaseSmartContractAccount, getChain, type BigNumberish, type UserOperationStruct, BatchUserOperationCallData } from "@alchemy/aa-core"; import { isNullOrUndefined, packUserOp } from "./utils/Utils"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; @@ -340,6 +340,21 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { }); } + override async encodeBatchExecute(txs: BatchUserOperationCallData): Promise { + const [targets, datas, value] = txs.reduce( + (accum, curr) => { + accum[0].push(curr.target); + accum[1].push(curr.data); + accum[2].push(curr.value || BigInt(0)); + + return accum; + }, + [[], [], []] as [Hex[], Hex[], bigint[]], + ); + + return this.encodeExecuteBatch(targets, value, datas); + } + // dummy signature depends on the validation module supplied. async getDummySignatures(params?: ModuleInfo): Promise { this.isActiveValidationModuleDefined(); diff --git a/packages/account/src/provider.ts b/packages/account/src/provider.ts index 9d6cecb0a..6a2cac2d2 100644 --- a/packages/account/src/provider.ts +++ b/packages/account/src/provider.ts @@ -1,15 +1,17 @@ import { BatchUserOperationCallData, - SendUserOperationResult, SmartAccountProvider, UserOperationCallData, UserOperationOverrides, UserOperationStruct, } from "@alchemy/aa-core"; import type { Hex, HttpTransport } from "viem"; +import type { UserOpResponse } from "@biconomy/bundler"; +import { IHybridPaymaster, SponsorUserOperationDto, PaymasterMode } from "@biconomy/paymaster"; import { BiconomySmartAccountV2 } from "./BiconomySmartAccountV2"; export class BiconomyAccountProvider extends SmartAccountProvider { + // Note: Not using the customMiddleware as it is the last stack happens but we need to update the signatures before the request is sent buildUserOperation = async ( data: UserOperationCallData | BatchUserOperationCallData, _overrides?: UserOperationOverrides, @@ -37,16 +39,29 @@ export class BiconomyAccountProvider extends SmartAccountProvider return userOp as UserOperationStruct; }; - sendUserOperation = async (data: UserOperationCallData | BatchUserOperationCallData): Promise => { + sendUserOperations = async (data: UserOperationCallData | BatchUserOperationCallData): Promise => { if (!this.account) { throw new Error("account not connected"); } const userOp = await this.buildUserOperation(data); - const userOpResponse = await (this.account as BiconomySmartAccountV2).sendUserOp(userOp); - return { - hash: userOpResponse.userOpHash as Hex, - request: userOp as any, - }; + + const biconomyAccount = this.account as BiconomySmartAccountV2; + if (biconomyAccount.paymaster !== undefined) { + try { + const paymasterData = await (biconomyAccount.paymaster as IHybridPaymaster).getPaymasterAndData(userOp, { + mode: PaymasterMode.SPONSORED, + }); + userOp.paymasterAndData = paymasterData.paymasterAndData; + userOp.callGasLimit = paymasterData.callGasLimit; + userOp.verificationGasLimit = paymasterData.verificationGasLimit; + userOp.preVerificationGas = paymasterData.preVerificationGas; + } catch (e: any) { + console.error("Error while fetching paymaster data", e); + } + } + + const userOpResponse = await biconomyAccount.sendUserOp(userOp); + return userOpResponse; }; } From 715c8787f89d905cfdf0febdc37f62dfa4c85e75 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 27 Dec 2023 16:27:07 +0530 Subject: [PATCH 0988/1247] remove the default chain --- packages/bundler/src/Bundler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index db1214fc7..cd63bc5c1 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -138,7 +138,7 @@ export class Bundler implements IBundler { userOpHash: sendUserOperationResponse.result, wait: (confirmations?: number): Promise => { const providerClient = createPublicClient({ - chain: getChain(chainId) || mainnet, + chain: getChain(chainId), transport: http(), }); // Note: maxDuration can be defined per chainId From b377feab80b8e3fa71c564433de4d7a1a614e11e Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 27 Dec 2023 16:31:37 +0530 Subject: [PATCH 0989/1247] fix: lint --- packages/bundler/src/Bundler.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index cd63bc5c1..df7ddac70 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -1,6 +1,5 @@ import { getChain, type UserOperationStruct } from "@alchemy/aa-core"; import { createPublicClient, http } from "viem"; -import { mainnet } from "viem/chains"; import { IBundler } from "./interfaces/IBundler"; import { GetUserOperationReceiptResponse, From 7baa9f4b9db40b4b1a63dd0840be94a3e9664dd0 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Wed, 27 Dec 2023 17:46:02 +0530 Subject: [PATCH 0990/1247] fix: method comment --- packages/modules/src/MultichainValidationModule.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index bed292e06..e3ec386bc 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -70,7 +70,7 @@ export class MultiChainValidationModule extends BaseValidationModule { /** * Signs a message using the appropriate method based on the type of signer. * - * @param {Bytes | string | Uint8Array} message - The message to be signed. + * @param {Uint8Array | string} message - The message to be signed. * @returns {Promise} A promise resolving to the signature or error message. * @throws {Error} If the signer type is invalid or unsupported. */ From 5853e99cc255c462b3fecef3af09e0ea681b5c7e Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 28 Dec 2023 18:08:25 +0400 Subject: [PATCH 0991/1247] changelog and version bump --- packages/account/CHANGELOG.md | 11 +++++++++-- packages/account/package.json | 14 +++++++------- packages/bundler/CHANGELOG.md | 9 ++++++++- packages/bundler/package.json | 6 +++--- packages/common/CHANGELOG.md | 7 ++++++- packages/common/package.json | 6 +++--- packages/core-types/CHANGELOG.md | 6 +++++- packages/core-types/package.json | 2 +- packages/modules/CHANGELOG.md | 4 ++++ packages/modules/package.json | 8 ++++---- packages/node-client/CHANGELOG.md | 4 ++++ packages/node-client/package.json | 4 ++-- packages/particle-auth/CHANGELOG.md | 4 ++++ packages/particle-auth/package.json | 2 +- packages/paymaster/CHANGELOG.md | 6 +++++- packages/paymaster/package.json | 6 +++--- packages/transak/CHANGELOG.md | 8 ++++++-- packages/transak/package.json | 2 +- 18 files changed, 76 insertions(+), 33 deletions(-) diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index f85934702..21323b58e 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.2 (2023-12-28) + + +### Bug Fixes + +* use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) + ## 3.1.1 (2023-11-09) @@ -47,7 +54,7 @@ Modular Account Abstraction is here. Contains BiconomySmartAccountV2 - an API fo ## 3.0.0 (2023-08-28) -VERSION bump only +VERSION Bump Only. Modular SDK - consists stable version of below updates done in Alphas. @@ -58,7 +65,7 @@ Modular SDK - consists stable version of below updates done in Alphas. ### Bug Fixes -VERSION bump only +VERSION Bump Only. diff --git a/packages/account/package.json b/packages/account/package.json index 54b19f91e..68ba8dfcf 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account", - "version": "3.1.1", + "version": "3.1.2", "description": "This package provides apis for ERC-4337 based smart account implementations", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -42,12 +42,12 @@ "@account-abstraction/utils": "^0.4.0", "@alchemy/aa-core": "^1.2.2", "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0", - "@biconomy/bundler": "^3.1.1", - "@biconomy/common": "^3.1.1", - "@biconomy/core-types": "^3.1.1", - "@biconomy/modules": "^3.1.1", - "@biconomy/node-client": "^3.1.1", - "@biconomy/paymaster": "^3.1.1", + "@biconomy/bundler": "^3.1.2", + "@biconomy/common": "^3.1.2", + "@biconomy/core-types": "^3.1.2", + "@biconomy/modules": "^3.1.2", + "@biconomy/node-client": "^3.1.2", + "@biconomy/paymaster": "^3.1.2", "@ethersproject/logger": "^5.7.0", "@ethersproject/providers": "^5.7.2", "ethers": "^5.7.0", diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index 8540b690b..506ee1731 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.2 (2023-12-28) + + +### Bug Fixes + +* use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) + ## 3.1.1 (2023-11-09) @@ -56,7 +63,7 @@ Modular SDK - consists stable version of below updates done in Alphas. ## 3.0.0-alpha.0 (2023-08-02) -VERSION bump only +VERSION Bump Only. diff --git a/packages/bundler/package.json b/packages/bundler/package.json index a0a96dcff..15069a0a8 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/bundler", - "version": "3.1.1", + "version": "3.1.2", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -37,8 +37,8 @@ "access": "public" }, "dependencies": { - "@biconomy/common": "^3.1.1", - "@biconomy/core-types": "^3.1.1", + "@biconomy/common": "^3.1.2", + "@biconomy/core-types": "^3.1.2", "@ethersproject/providers": "^5.7.2", "ethers": "^5.7.0" } diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index 2eb65d5c6..03907bc7c 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.2 (2023-12-28) + +VERSION Bump Only. + + ## 3.1.1 (2023-11-09) @@ -49,7 +54,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ## 3.0.0-alpha.0 (2023-08-02) -VERSION bump only +VERSION Bump Only. diff --git a/packages/common/package.json b/packages/common/package.json index a908815d9..0e49aa11a 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "3.1.1", + "version": "3.1.2", "description": "common utils to be used for aa transactions", "keywords": [ "utils" @@ -41,8 +41,8 @@ }, "dependencies": { "@account-abstraction/contracts": "^0.6.0", - "@biconomy/core-types": "^3.1.1", - "@biconomy/node-client": "^3.1.1", + "@biconomy/core-types": "^3.1.2", + "@biconomy/node-client": "^3.1.2", "@ethersproject/abi": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/providers": "^5.7.0", diff --git a/packages/core-types/CHANGELOG.md b/packages/core-types/CHANGELOG.md index 5679c227a..f8aa18f1e 100644 --- a/packages/core-types/CHANGELOG.md +++ b/packages/core-types/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.2 (2023-12-28) + +VERSION Bump Only. + ## 3.1.1 (2023-11-09) @@ -45,7 +49,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline # 3.1.0-alpha.0 (2023-07-24) -VERSION bump only +VERSION Bump Only. # 3.1.0-alpha.0 (2023-07-24) diff --git a/packages/core-types/package.json b/packages/core-types/package.json index bb3de3795..57494be26 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/core-types", - "version": "3.1.1", + "version": "3.1.2", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md index d46927c84..dba296105 100644 --- a/packages/modules/CHANGELOG.md +++ b/packages/modules/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.2 (2023-12-28) + +VERSION Bump Only. + ## 3.1.1 (2023-11-09) diff --git a/packages/modules/package.json b/packages/modules/package.json index 4f31a07cc..87d27f38d 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/modules", - "version": "3.1.1", + "version": "3.1.2", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -35,9 +35,9 @@ }, "dependencies": { "@alchemy/aa-core": "^1.2.2", - "@biconomy/common": "^3.1.1", - "@biconomy/core-types": "^3.1.1", - "@biconomy/node-client": "^3.1.1", + "@biconomy/common": "^3.1.2", + "@biconomy/core-types": "^3.1.2", + "@biconomy/node-client": "^3.1.2", "ethereumjs-util": "^7.1.5", "ethers": "^5.7.2", "merkletreejs": "^0.3.9" diff --git a/packages/node-client/CHANGELOG.md b/packages/node-client/CHANGELOG.md index e1114f85a..f1cd56de1 100644 --- a/packages/node-client/CHANGELOG.md +++ b/packages/node-client/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.2 (2023-12-28) + +VERSION Bump Only. + ## 3.1.1 (2023-11-09) Version Bump Only. diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 2c25f0103..156073163 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/node-client", - "version": "3.1.1", + "version": "3.1.2", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -66,7 +66,7 @@ "access": "public" }, "dependencies": { - "@biconomy/core-types": "^3.1.1", + "@biconomy/core-types": "^3.1.2", "@ethersproject/abstract-signer": "^5.6.0", "@nomiclabs/hardhat-ethers": "^2.1.0", "node-fetch": "^2.6.6" diff --git a/packages/particle-auth/CHANGELOG.md b/packages/particle-auth/CHANGELOG.md index 1ed5215bf..702d37b7d 100644 --- a/packages/particle-auth/CHANGELOG.md +++ b/packages/particle-auth/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.2 (2023-12-28) + +VERSION Bump Only. + ## 3.1.1 (2023-11-09) diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 684c6889b..fa17d2f83 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/particle-auth", - "version": "3.1.1", + "version": "3.1.2", "description": "Particle auth for Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/paymaster/CHANGELOG.md b/packages/paymaster/CHANGELOG.md index 048cc2c64..b39368473 100644 --- a/packages/paymaster/CHANGELOG.md +++ b/packages/paymaster/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.2 (2023-12-28) + +VERSION Bump Only. + ## 3.1.1 (2023-11-09) @@ -36,7 +40,7 @@ Modular SDK - consists stable version of below updates done in Alphas. # 3.1.0-alpha.0 (2023-07-24) -VERSION bump only +VERSION Bump Only. ## 3.0.0-alpha.0 (2023-07-12) diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index bceb3fac8..25cba76c6 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/paymaster", - "version": "3.1.1", + "version": "3.1.2", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -37,8 +37,8 @@ "access": "public" }, "dependencies": { - "@biconomy/common": "^3.1.1", - "@biconomy/core-types": "^3.1.1", + "@biconomy/common": "^3.1.2", + "@biconomy/core-types": "^3.1.2", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/properties": "^5.7.0", "ethers": "^5.7.0" diff --git a/packages/transak/CHANGELOG.md b/packages/transak/CHANGELOG.md index a1f18fd46..a217242e3 100644 --- a/packages/transak/CHANGELOG.md +++ b/packages/transak/CHANGELOG.md @@ -3,9 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.2 (2023-12-28) + +VERSION Bump Only. + ## 3.1.1 (2023-11-09) -VERSION bump only +VERSION Bump Only. @@ -22,7 +26,7 @@ VERSION bump only # 3.0.0 (2023-08-28) -VERSION bump only +VERSION Bump Only. diff --git a/packages/transak/package.json b/packages/transak/package.json index 2337ddc92..3ecdfea33 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/transak", - "version": "3.1.1", + "version": "3.1.2", "description": "transak for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From 1868d71158f79c84cf97d09fdbbf22b455eecb7c Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 2 Jan 2024 05:44:56 +0400 Subject: [PATCH 0992/1247] update changelog for missing PRs --- packages/account/CHANGELOG.md | 4 ++++ packages/bundler/CHANGELOG.md | 3 +++ packages/modules/CHANGELOG.md | 4 +++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index 21323b58e..5d86ed497 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -5,10 +5,14 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ## 3.1.2 (2023-12-28) +### Features + +* Make entryPointAddress optional in config([cf35c4a](https://github.com/bcnmy/biconomy-client-sdk/pull/336/commits/cf35c4a8266d27648035d8c9d63f1b9157553128)) ### Bug Fixes * use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) +* change receipt status type from boolean to string to be compatible with bundler response. ([317f986](https://github.com/bcnmy/biconomy-client-sdk/pull/342/commits/317f986b7e8f08d3ccf1e68f12a0696f1116de6b)) ## 3.1.1 (2023-11-09) diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index 506ee1731..731675d74 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -5,6 +5,9 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ## 3.1.2 (2023-12-28) +### Features + +* Make entrypoint address optional in bundler config ([547724a](https://github.com/bcnmy/biconomy-client-sdk/pull/337/commits/547724a15366ee1e63aee80fdee0edc128a84c41)) ### Bug Fixes diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md index dba296105..370078868 100644 --- a/packages/modules/CHANGELOG.md +++ b/packages/modules/CHANGELOG.md @@ -5,7 +5,9 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ## 3.1.2 (2023-12-28) -VERSION Bump Only. +### Bug Fixes + +* Update import paths for consistency and fixing build issues ([ec5c3a3](https://github.com/bcnmy/biconomy-client-sdk/pull/332/commits/ec5c3a352e8caab6e94234264f4cd5cb32e5af3f)) ## 3.1.1 (2023-11-09) From df22619d1b607e84d250aa962843aa6fccef24ed Mon Sep 17 00:00:00 2001 From: GabiDev Date: Thu, 4 Jan 2024 12:57:09 +0200 Subject: [PATCH 0993/1247] Added SEPOLIA and ARBITRUM_SEPOLIA --- packages/common/src/Constants.ts | 2 ++ packages/core-types/src/ChainsTypes.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/common/src/Constants.ts b/packages/common/src/Constants.ts index 4c291a810..ae3a9ba7d 100644 --- a/packages/common/src/Constants.ts +++ b/packages/common/src/Constants.ts @@ -6,6 +6,7 @@ export const NODE_CLIENT_URL = "https://sdk-backend.prod.biconomy.io/v1"; export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { [ChainId.MAINNET]: "https://rpc.ankr.com/eth", [ChainId.GOERLI]: "https://rpc.ankr.com/eth_goerli", + [ChainId.SEPOLIA]: "https://rpc.ankr.com/eth_sepolia", [ChainId.POLYGON_MUMBAI]: "https://rpc.ankr.com/polygon_mumbai", [ChainId.POLYGON_MAINNET]: "https://rpc.ankr.com/polygon", [ChainId.BSC_TESTNET]: "https://endpoints.omniatech.io/v1/bsc/testnet/public", @@ -13,6 +14,7 @@ export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { [ChainId.POLYGON_ZKEVM_TESTNET]: "https://rpc.public.zkevm-test.net", [ChainId.POLYGON_ZKEVM_MAINNET]: "https://rpc.ankr.com/polygon_zkevm", [ChainId.ARBITRUM_GOERLI_TESTNET]: "https://goerli-rollup.arbitrum.io/rpc", + [ChainId.ARBITRUM_SEPOLIA]: "https://arbitrum-sepolia.blockpi.network/v1/rpc/public", [ChainId.ARBITRUM_ONE_MAINNET]: "https://rpc.ankr.com/arbitrum", [ChainId.ARBITRUM_NOVA_MAINNET]: "https://nova.arbitrum.io/rpc", [ChainId.OPTIMISM_MAINNET]: "https://mainnet.optimism.io", diff --git a/packages/core-types/src/ChainsTypes.ts b/packages/core-types/src/ChainsTypes.ts index 6ab988d6f..2d2d9f376 100644 --- a/packages/core-types/src/ChainsTypes.ts +++ b/packages/core-types/src/ChainsTypes.ts @@ -2,6 +2,7 @@ export enum ChainId { // Ethereum MAINNET = 1, GOERLI = 5, + SEPOLIA=11155111, POLYGON_MUMBAI = 80001, POLYGON_MAINNET = 137, BSC_TESTNET = 97, @@ -9,6 +10,7 @@ export enum ChainId { POLYGON_ZKEVM_TESTNET = 1442, POLYGON_ZKEVM_MAINNET = 1101, ARBITRUM_GOERLI_TESTNET = 421613, + ARBITRUM_SEPOLIA = 421614, ARBITRUM_ONE_MAINNET = 42161, ARBITRUM_NOVA_MAINNET = 42170, OPTIMISM_MAINNET = 10, From 4474d0f51fb127519628c5e520e57095fdcd029a Mon Sep 17 00:00:00 2001 From: GabiDev Date: Thu, 4 Jan 2024 12:59:24 +0200 Subject: [PATCH 0994/1247] Fix lint --- packages/core-types/src/ChainsTypes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core-types/src/ChainsTypes.ts b/packages/core-types/src/ChainsTypes.ts index 2d2d9f376..220a04eed 100644 --- a/packages/core-types/src/ChainsTypes.ts +++ b/packages/core-types/src/ChainsTypes.ts @@ -2,7 +2,7 @@ export enum ChainId { // Ethereum MAINNET = 1, GOERLI = 5, - SEPOLIA=11155111, + SEPOLIA = 11155111, POLYGON_MUMBAI = 80001, POLYGON_MAINNET = 137, BSC_TESTNET = 97, From 23c3c8ea41f77204309e6142b58d5a825a8db518 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Thu, 4 Jan 2024 14:36:05 +0200 Subject: [PATCH 0995/1247] Added more missing rpc urls & chain ids --- packages/common/src/Constants.ts | 5 +++++ packages/core-types/src/ChainsTypes.ts | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/packages/common/src/Constants.ts b/packages/common/src/Constants.ts index ae3a9ba7d..314a7a756 100644 --- a/packages/common/src/Constants.ts +++ b/packages/common/src/Constants.ts @@ -34,4 +34,9 @@ export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { [ChainId.ASTAR_TESTNET]: "https://evm.shibuya.astar.network", [ChainId.CHILIZ_MAINNET]: "https://rpc.ankr.com/chiliz", [ChainId.CHILIZ_TESTNET]: "https://spicy-rpc.chiliz.com", + [ChainId.CORE_MAINNET]: "https://rpc.core.chain.com", + [ChainId.CORE_TESTNET]: "https://rpc.testnet.core.chain.com", + [ChainId.MANTA_PACIFIC_MAINNET]: "https://pacific-rpc.manta.network/http", + [ChainId.MANTA_PACIFIC_TESTNET]: "https://pacific-rpc.testnet.manta.network/http", + [ChainId.CAPX_TESTNET]: "http://13.234.72.203:8124", }; diff --git a/packages/core-types/src/ChainsTypes.ts b/packages/core-types/src/ChainsTypes.ts index 220a04eed..451b25dda 100644 --- a/packages/core-types/src/ChainsTypes.ts +++ b/packages/core-types/src/ChainsTypes.ts @@ -30,5 +30,10 @@ export enum ChainId { ASTAR_TESTNET = 81, CHILIZ_MAINNET = 88888, CHILIZ_TESTNET = 88882, + CORE_MAINNET = 1116, + CORE_TESTNET = 1115, + MANTA_PACIFIC_MAINNET = 169, + MANTA_PACIFIC_TESTNET = 3441005, + CAPX_TESTNET = 7116, GANACHE = 1337, //Temp } From e38a9e461ee3ede8f882336146cb1012d8128438 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Thu, 4 Jan 2024 14:38:43 +0200 Subject: [PATCH 0996/1247] Fixed lint --- packages/core-types/src/ChainsTypes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core-types/src/ChainsTypes.ts b/packages/core-types/src/ChainsTypes.ts index 451b25dda..fa6c238a4 100644 --- a/packages/core-types/src/ChainsTypes.ts +++ b/packages/core-types/src/ChainsTypes.ts @@ -30,7 +30,7 @@ export enum ChainId { ASTAR_TESTNET = 81, CHILIZ_MAINNET = 88888, CHILIZ_TESTNET = 88882, - CORE_MAINNET = 1116, + CORE_MAINNET = 1116, CORE_TESTNET = 1115, MANTA_PACIFIC_MAINNET = 169, MANTA_PACIFIC_TESTNET = 3441005, From fef1ae68e5342170567f64f8206aeb3b1a03654c Mon Sep 17 00:00:00 2001 From: GabiDev Date: Thu, 4 Jan 2024 15:19:52 +0200 Subject: [PATCH 0997/1247] Updated bundler constants for new rpcs --- packages/bundler/src/utils/Constants.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index be373789a..5a0a2ae3b 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -30,6 +30,11 @@ export const UserOpReceiptIntervals: { [key in ChainId]?: number } = { [ChainId.ASTAR_TESTNET]: 2000, [ChainId.CHILIZ_MAINNET]: 2000, [ChainId.CHILIZ_TESTNET]: 2000, + [ChainId.CORE_MAINNET]: 2000, + [ChainId.CORE_TESTNET]: 2000, + [ChainId.MANTA_PACIFIC_MAINNET]: 2000, + [ChainId.MANTA_PACIFIC_TESTNET]: 2000, + [ChainId.CAPX_TESTNET]: 2000, }; // Note: Reduced by 1/10th.. can reduce more @@ -62,6 +67,11 @@ export const UserOpWaitForTxHashIntervals: { [key in ChainId]?: number } = { [ChainId.ASTAR_TESTNET]: 500, [ChainId.CHILIZ_MAINNET]: 500, [ChainId.CHILIZ_TESTNET]: 500, + [ChainId.CORE_MAINNET]: 500, + [ChainId.CORE_TESTNET]: 500, + [ChainId.MANTA_PACIFIC_MAINNET]: 500, + [ChainId.MANTA_PACIFIC_TESTNET]: 500, + [ChainId.CAPX_TESTNET]: 500, }; export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = { @@ -93,6 +103,11 @@ export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = [ChainId.ASTAR_TESTNET]: 40000, [ChainId.CHILIZ_MAINNET]: 40000, [ChainId.CHILIZ_TESTNET]: 40000, + [ChainId.CORE_MAINNET]: 40000, + [ChainId.CORE_TESTNET]: 40000, + [ChainId.MANTA_PACIFIC_MAINNET]: 40000, + [ChainId.MANTA_PACIFIC_TESTNET]: 40000, + [ChainId.CAPX_TESTNET]: 40000, }; export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: number } = { @@ -124,6 +139,11 @@ export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: numbe [ChainId.ASTAR_TESTNET]: 20000, [ChainId.CHILIZ_MAINNET]: 20000, [ChainId.CHILIZ_TESTNET]: 20000, + [ChainId.CORE_MAINNET]: 20000, + [ChainId.CORE_TESTNET]: 20000, + [ChainId.MANTA_PACIFIC_MAINNET]: 20000, + [ChainId.MANTA_PACIFIC_TESTNET]: 20000, + [ChainId.CAPX_TESTNET]: 20000, }; export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; From b3d4598c077032277acef378f8b2a5b1b1bc5468 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 4 Jan 2024 18:13:48 +0400 Subject: [PATCH 0998/1247] Merge branch 'develop' of https://github.com/bcnmy/biconomy-client-sdk into develop --- packages/bundler/src/utils/Constants.ts | 20 ++++++++++++++++++++ packages/common/src/Constants.ts | 7 +++++++ packages/core-types/src/ChainsTypes.ts | 7 +++++++ 3 files changed, 34 insertions(+) diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index be373789a..5a0a2ae3b 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -30,6 +30,11 @@ export const UserOpReceiptIntervals: { [key in ChainId]?: number } = { [ChainId.ASTAR_TESTNET]: 2000, [ChainId.CHILIZ_MAINNET]: 2000, [ChainId.CHILIZ_TESTNET]: 2000, + [ChainId.CORE_MAINNET]: 2000, + [ChainId.CORE_TESTNET]: 2000, + [ChainId.MANTA_PACIFIC_MAINNET]: 2000, + [ChainId.MANTA_PACIFIC_TESTNET]: 2000, + [ChainId.CAPX_TESTNET]: 2000, }; // Note: Reduced by 1/10th.. can reduce more @@ -62,6 +67,11 @@ export const UserOpWaitForTxHashIntervals: { [key in ChainId]?: number } = { [ChainId.ASTAR_TESTNET]: 500, [ChainId.CHILIZ_MAINNET]: 500, [ChainId.CHILIZ_TESTNET]: 500, + [ChainId.CORE_MAINNET]: 500, + [ChainId.CORE_TESTNET]: 500, + [ChainId.MANTA_PACIFIC_MAINNET]: 500, + [ChainId.MANTA_PACIFIC_TESTNET]: 500, + [ChainId.CAPX_TESTNET]: 500, }; export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = { @@ -93,6 +103,11 @@ export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = [ChainId.ASTAR_TESTNET]: 40000, [ChainId.CHILIZ_MAINNET]: 40000, [ChainId.CHILIZ_TESTNET]: 40000, + [ChainId.CORE_MAINNET]: 40000, + [ChainId.CORE_TESTNET]: 40000, + [ChainId.MANTA_PACIFIC_MAINNET]: 40000, + [ChainId.MANTA_PACIFIC_TESTNET]: 40000, + [ChainId.CAPX_TESTNET]: 40000, }; export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: number } = { @@ -124,6 +139,11 @@ export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: numbe [ChainId.ASTAR_TESTNET]: 20000, [ChainId.CHILIZ_MAINNET]: 20000, [ChainId.CHILIZ_TESTNET]: 20000, + [ChainId.CORE_MAINNET]: 20000, + [ChainId.CORE_TESTNET]: 20000, + [ChainId.MANTA_PACIFIC_MAINNET]: 20000, + [ChainId.MANTA_PACIFIC_TESTNET]: 20000, + [ChainId.CAPX_TESTNET]: 20000, }; export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; diff --git a/packages/common/src/Constants.ts b/packages/common/src/Constants.ts index 4c291a810..314a7a756 100644 --- a/packages/common/src/Constants.ts +++ b/packages/common/src/Constants.ts @@ -6,6 +6,7 @@ export const NODE_CLIENT_URL = "https://sdk-backend.prod.biconomy.io/v1"; export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { [ChainId.MAINNET]: "https://rpc.ankr.com/eth", [ChainId.GOERLI]: "https://rpc.ankr.com/eth_goerli", + [ChainId.SEPOLIA]: "https://rpc.ankr.com/eth_sepolia", [ChainId.POLYGON_MUMBAI]: "https://rpc.ankr.com/polygon_mumbai", [ChainId.POLYGON_MAINNET]: "https://rpc.ankr.com/polygon", [ChainId.BSC_TESTNET]: "https://endpoints.omniatech.io/v1/bsc/testnet/public", @@ -13,6 +14,7 @@ export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { [ChainId.POLYGON_ZKEVM_TESTNET]: "https://rpc.public.zkevm-test.net", [ChainId.POLYGON_ZKEVM_MAINNET]: "https://rpc.ankr.com/polygon_zkevm", [ChainId.ARBITRUM_GOERLI_TESTNET]: "https://goerli-rollup.arbitrum.io/rpc", + [ChainId.ARBITRUM_SEPOLIA]: "https://arbitrum-sepolia.blockpi.network/v1/rpc/public", [ChainId.ARBITRUM_ONE_MAINNET]: "https://rpc.ankr.com/arbitrum", [ChainId.ARBITRUM_NOVA_MAINNET]: "https://nova.arbitrum.io/rpc", [ChainId.OPTIMISM_MAINNET]: "https://mainnet.optimism.io", @@ -32,4 +34,9 @@ export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { [ChainId.ASTAR_TESTNET]: "https://evm.shibuya.astar.network", [ChainId.CHILIZ_MAINNET]: "https://rpc.ankr.com/chiliz", [ChainId.CHILIZ_TESTNET]: "https://spicy-rpc.chiliz.com", + [ChainId.CORE_MAINNET]: "https://rpc.core.chain.com", + [ChainId.CORE_TESTNET]: "https://rpc.testnet.core.chain.com", + [ChainId.MANTA_PACIFIC_MAINNET]: "https://pacific-rpc.manta.network/http", + [ChainId.MANTA_PACIFIC_TESTNET]: "https://pacific-rpc.testnet.manta.network/http", + [ChainId.CAPX_TESTNET]: "http://13.234.72.203:8124", }; diff --git a/packages/core-types/src/ChainsTypes.ts b/packages/core-types/src/ChainsTypes.ts index 6ab988d6f..fa6c238a4 100644 --- a/packages/core-types/src/ChainsTypes.ts +++ b/packages/core-types/src/ChainsTypes.ts @@ -2,6 +2,7 @@ export enum ChainId { // Ethereum MAINNET = 1, GOERLI = 5, + SEPOLIA = 11155111, POLYGON_MUMBAI = 80001, POLYGON_MAINNET = 137, BSC_TESTNET = 97, @@ -9,6 +10,7 @@ export enum ChainId { POLYGON_ZKEVM_TESTNET = 1442, POLYGON_ZKEVM_MAINNET = 1101, ARBITRUM_GOERLI_TESTNET = 421613, + ARBITRUM_SEPOLIA = 421614, ARBITRUM_ONE_MAINNET = 42161, ARBITRUM_NOVA_MAINNET = 42170, OPTIMISM_MAINNET = 10, @@ -28,5 +30,10 @@ export enum ChainId { ASTAR_TESTNET = 81, CHILIZ_MAINNET = 88888, CHILIZ_TESTNET = 88882, + CORE_MAINNET = 1116, + CORE_TESTNET = 1115, + MANTA_PACIFIC_MAINNET = 169, + MANTA_PACIFIC_TESTNET = 3441005, + CAPX_TESTNET = 7116, GANACHE = 1337, //Temp } From 591bbb4e37774b16cbe801d583d31b3a14608bc1 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Fri, 5 Jan 2024 01:16:38 +0530 Subject: [PATCH 0999/1247] fix: bundler abstraction in v4 --- .gitignore | 6 +----- packages/account/src/BiconomySmartAccountV2.ts | 11 ++++++++++- packages/paymaster/src/BiconomyPaymaster.ts | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 3ac2e3158..b7856aac4 100644 --- a/.gitignore +++ b/.gitignore @@ -58,15 +58,11 @@ artifacts deployments # lockfiles -packages/core-types/package-lock.json packages/account/package-lock.json -packages/common/package-lock.json +packages/modules/package-lock.json packages/bundler/package-lock.json -packages/node-client/package-lock.json packages/paymaster/package-lock.json packages/particle-auth/package-lock.json -packages/web3-auth/package-lock.json -packages/web3-auth-native/package-lock.json packages/transak/package-lock.json package-lock.json yarn.lock diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index adfd602e1..765b32efa 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -22,7 +22,7 @@ import { BaseSmartContractAccount, getChain, type BigNumberish, type UserOperati import { isNullOrUndefined, packUserOp } from "./utils/Utils"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { IBundler, UserOpResponse } from "@biconomy/bundler"; +import { Bundler, IBundler, UserOpResponse } from "@biconomy/bundler"; import { BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, @@ -99,6 +99,15 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.paymaster = biconomySmartAccountConfig.paymaster; } + if (biconomySmartAccountConfig.bundlerUrl) { + this.bundler = new Bundler({ + bundlerUrl: biconomySmartAccountConfig.bundlerUrl, + chainId: biconomySmartAccountConfig.chainId, + }); + } else { + this.bundler = biconomySmartAccountConfig.bundler; + } + const defaultFallbackHandlerAddress = this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_FALLBACK_HANDLER_ADDRESS : biconomySmartAccountConfig.defaultFallbackHandler; if (!defaultFallbackHandlerAddress) { diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 58529e2a8..592c86aa3 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -112,7 +112,7 @@ export class BiconomyPaymaster implements IHybridPaymaster Date: Fri, 5 Jan 2024 18:30:35 +0530 Subject: [PATCH 1000/1247] feat: add Logger class to v4 --- .../account/src/BiconomySmartAccountV2.ts | 29 +++++------ packages/account/src/provider.ts | 3 +- packages/account/src/utils/Logger.ts | 49 +++++++++++++++++++ packages/bundler/src/utils/HttpRequests.ts | 3 ++ packages/bundler/src/utils/Logger.ts | 49 +++++++++++++++++++ .../modules/src/MultichainValidationModule.ts | 3 +- packages/modules/src/utils/Logger.ts | 49 +++++++++++++++++++ packages/paymaster/src/BiconomyPaymaster.ts | 7 +-- packages/paymaster/src/utils/HttpRequests.ts | 4 +- packages/paymaster/src/utils/Logger.ts | 49 +++++++++++++++++++ 10 files changed, 225 insertions(+), 20 deletions(-) create mode 100644 packages/account/src/utils/Logger.ts create mode 100644 packages/bundler/src/utils/Logger.ts create mode 100644 packages/modules/src/utils/Logger.ts create mode 100644 packages/paymaster/src/utils/Logger.ts diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index adfd602e1..67eb52473 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -45,6 +45,7 @@ import { import { BiconomyFactoryAbi } from "./abi/Factory"; import { BiconomyAccountAbi } from "./abi/SmartAccount"; import { AccountResolverAbi } from "./abi/AccountResolver"; +import { Logger } from "./utils/Logger"; type UserOperationKey = keyof UserOperationStruct; @@ -446,7 +447,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ]; this.validateUserOp(userOp, requiredFields); if (!this.bundler) throw new Error("Bundler is not provided"); - console.info("userOp being sent to the bundler", userOp); + Logger.warn("userOp being sent to the bundler", userOp); const bundlerResponse = await this.bundler.sendUserOp(userOp); return bundlerResponse; } @@ -519,7 +520,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } } catch (error) { // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account - console.info("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); + Logger.warn("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); } return nonce; } @@ -541,7 +542,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return gasFeeValues; } catch (error: any) { // TODO: should throw error here? - console.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); + Logger.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); return gasFeeValues; } } @@ -584,7 +585,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Note: Can change the default behaviour of calling estimations using bundler/local userOp = await this.estimateUserOpGas(userOp); userOp.paymasterAndData = userOp.paymasterAndData ?? "0x"; - console.log("UserOp after estimation ", userOp); + Logger.log("UserOp after estimation ", userOp); return userOp; } @@ -595,14 +596,14 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress; - console.info("Requested fee token is ", feeTokenAddress); + Logger.warn("Requested fee token is ", feeTokenAddress); if (!feeTokenAddress || feeTokenAddress === ADDRESS_ZERO) { throw new Error("Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest"); } const spender = tokenPaymasterRequest?.spender; - console.info("Spender address is ", spender); + Logger.warn("Spender address is ", spender); if (!spender || spender === ADDRESS_ZERO) { throw new Error("Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest"); @@ -629,7 +630,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { let batchData: Array = []; let newCallData = userOp.callData; - console.info("Received information about fee token address and quote ", tokenPaymasterRequest); + Logger.warn("Received information about fee token address and quote ", tokenPaymasterRequest); if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details @@ -638,7 +639,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const approvalRequest: Transaction = await (this.paymaster as IHybridPaymaster).buildTokenApprovalTransaction( tokenPaymasterRequest, ); - console.info("ApprovalRequest is for erc20 token ", approvalRequest.to); + Logger.warn("ApprovalRequest is for erc20 token ", approvalRequest.to); if (approvalRequest.data === "0x" || approvalRequest.to === ADDRESS_ZERO) { return userOp; @@ -659,7 +660,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const smartAccountExecFunctionName = decodedSmartAccountData.functionName; - console.info(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); + Logger.warn(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); if (smartAccountExecFunctionName === "execute" || smartAccountExecFunctionName === "execute_ncC") { const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; const toOriginal = methodArgsSmartWalletExecuteCall[0]; @@ -698,16 +699,16 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { callData: newCallData, }; } - console.info("UserOp after estimation ", finalUserOp); + Logger.warn("UserOp after estimation ", finalUserOp); } catch (error) { - console.error("Failed to estimate gas for userOp with updated callData ", error); - console.log("Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); + Logger.error("Failed to estimate gas for userOp with updated callData ", error); + Logger.log("Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); } return finalUserOp; } } catch (error) { - console.log("Failed to update userOp. Sending back original op"); - console.error("Failed to update callData with error", error); + Logger.log("Failed to update userOp. Sending back original op"); + Logger.error("Failed to update callData with error", error); return userOp; } return userOp; diff --git a/packages/account/src/provider.ts b/packages/account/src/provider.ts index 6a2cac2d2..39c9d134b 100644 --- a/packages/account/src/provider.ts +++ b/packages/account/src/provider.ts @@ -9,6 +9,7 @@ import type { Hex, HttpTransport } from "viem"; import type { UserOpResponse } from "@biconomy/bundler"; import { IHybridPaymaster, SponsorUserOperationDto, PaymasterMode } from "@biconomy/paymaster"; import { BiconomySmartAccountV2 } from "./BiconomySmartAccountV2"; +import { Logger } from "./utils/Logger"; export class BiconomyAccountProvider extends SmartAccountProvider { // Note: Not using the customMiddleware as it is the last stack happens but we need to update the signatures before the request is sent @@ -57,7 +58,7 @@ export class BiconomyAccountProvider extends SmartAccountProvider userOp.verificationGasLimit = paymasterData.verificationGasLimit; userOp.preVerificationGas = paymasterData.preVerificationGas; } catch (e: any) { - console.error("Error while fetching paymaster data", e); + Logger.error("Error while fetching paymaster data", e); } } diff --git a/packages/account/src/utils/Logger.ts b/packages/account/src/utils/Logger.ts new file mode 100644 index 000000000..0bdcae373 --- /dev/null +++ b/packages/account/src/utils/Logger.ts @@ -0,0 +1,49 @@ +/* eslint-disable no-console */ +/** + * Single class to be used for logging purpose. + * + * @param {any} message Message to be logged + */ +class Logger { + // By default, the logger is not in debug mode. + static isDebug: boolean = process.env.BICONOMY_SDK_DEBUG === "true" ? true : process.env.REACT_APP_BICONOMY_SDK_DEBUG === "true" ? true : false; + + /** + * \x1b[0m is an escape sequence to reset the color of the text + * All color codes used - 31 - Red, 33 - Yellow, 34 - Blue, 35 - Magenta, 36 - Cyan + * log - Magenta[time] Cyan[message]: [value] + * warn - Magenta[time] Yellow[WARN]: Cyan[message]: [value] + * error - Magenta[time] Red[ERROR]: Cyan[message]: [value] + */ + /* eslint-disable @typescript-eslint/no-explicit-any */ + static log(message: string, value?: any): void { + const timestamp = new Date().toISOString(); + const logMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[36m${message}\x1b[0m:`; + + if (Logger.isDebug) { + console.log(logMessage, value === undefined ? "" : value); + } + } + + /* eslint-disable @typescript-eslint/no-explicit-any */ + static warn(message: string, value?: any): void { + const timestamp = new Date().toISOString(); + const warnMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[33mWARN\x1b[0m: \x1b[36m${message}\x1b[0m`; + + if (Logger.isDebug) { + console.warn(warnMessage, value === undefined ? "" : value); + } + } + + /* eslint-disable @typescript-eslint/no-explicit-any */ + static error(message: string, value?: any): void { + const timestamp = new Date().toISOString(); + const errorMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[31mERROR\x1b[0m: \x1b[36m${message}\x1b[0m`; + + if (Logger.isDebug) { + console.error(errorMessage, value === undefined ? "" : value); + } + } +} + +export { Logger }; diff --git a/packages/bundler/src/utils/HttpRequests.ts b/packages/bundler/src/utils/HttpRequests.ts index 0a646fb42..24978c9a7 100644 --- a/packages/bundler/src/utils/HttpRequests.ts +++ b/packages/bundler/src/utils/HttpRequests.ts @@ -1,3 +1,5 @@ +import { Logger } from "./Logger"; + export enum HttpMethod { Get = "get", Post = "post", @@ -24,6 +26,7 @@ export async function sendRequest({ url, method, body }: HttpRequest): Promis let jsonResponse; try { jsonResponse = await response.json(); + Logger.log("Bundler RPC Response", jsonResponse); } catch (error) { if (!response.ok) { throw new Error(response.statusText); diff --git a/packages/bundler/src/utils/Logger.ts b/packages/bundler/src/utils/Logger.ts new file mode 100644 index 000000000..0bdcae373 --- /dev/null +++ b/packages/bundler/src/utils/Logger.ts @@ -0,0 +1,49 @@ +/* eslint-disable no-console */ +/** + * Single class to be used for logging purpose. + * + * @param {any} message Message to be logged + */ +class Logger { + // By default, the logger is not in debug mode. + static isDebug: boolean = process.env.BICONOMY_SDK_DEBUG === "true" ? true : process.env.REACT_APP_BICONOMY_SDK_DEBUG === "true" ? true : false; + + /** + * \x1b[0m is an escape sequence to reset the color of the text + * All color codes used - 31 - Red, 33 - Yellow, 34 - Blue, 35 - Magenta, 36 - Cyan + * log - Magenta[time] Cyan[message]: [value] + * warn - Magenta[time] Yellow[WARN]: Cyan[message]: [value] + * error - Magenta[time] Red[ERROR]: Cyan[message]: [value] + */ + /* eslint-disable @typescript-eslint/no-explicit-any */ + static log(message: string, value?: any): void { + const timestamp = new Date().toISOString(); + const logMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[36m${message}\x1b[0m:`; + + if (Logger.isDebug) { + console.log(logMessage, value === undefined ? "" : value); + } + } + + /* eslint-disable @typescript-eslint/no-explicit-any */ + static warn(message: string, value?: any): void { + const timestamp = new Date().toISOString(); + const warnMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[33mWARN\x1b[0m: \x1b[36m${message}\x1b[0m`; + + if (Logger.isDebug) { + console.warn(warnMessage, value === undefined ? "" : value); + } + } + + /* eslint-disable @typescript-eslint/no-explicit-any */ + static error(message: string, value?: any): void { + const timestamp = new Date().toISOString(); + const errorMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[31mERROR\x1b[0m: \x1b[36m${message}\x1b[0m`; + + if (Logger.isDebug) { + console.error(errorMessage, value === undefined ? "" : value); + } + } +} + +export { Logger }; diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index e3ec386bc..c47d0eb66 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -5,6 +5,7 @@ import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VE import { ModuleVersion, MultiChainUserOpDto, MultiChainValidationModuleConfig } from "./utils/Types"; import { BaseValidationModule } from "./BaseValidationModule"; import { getUserOpHash } from "./utils/Helper"; +import { Logger } from "./utils/Logger"; export class MultiChainValidationModule extends BaseValidationModule { signer!: WalletClientSigner; @@ -144,7 +145,7 @@ export class MultiChainValidationModule extends BaseValidationModule { } return updatedUserOps; } catch (error) { - console.error("Error in signing multi chain userops"); + Logger.error("Error in signing multi chain userops"); throw new Error(JSON.stringify(error)); } } diff --git a/packages/modules/src/utils/Logger.ts b/packages/modules/src/utils/Logger.ts new file mode 100644 index 000000000..0bdcae373 --- /dev/null +++ b/packages/modules/src/utils/Logger.ts @@ -0,0 +1,49 @@ +/* eslint-disable no-console */ +/** + * Single class to be used for logging purpose. + * + * @param {any} message Message to be logged + */ +class Logger { + // By default, the logger is not in debug mode. + static isDebug: boolean = process.env.BICONOMY_SDK_DEBUG === "true" ? true : process.env.REACT_APP_BICONOMY_SDK_DEBUG === "true" ? true : false; + + /** + * \x1b[0m is an escape sequence to reset the color of the text + * All color codes used - 31 - Red, 33 - Yellow, 34 - Blue, 35 - Magenta, 36 - Cyan + * log - Magenta[time] Cyan[message]: [value] + * warn - Magenta[time] Yellow[WARN]: Cyan[message]: [value] + * error - Magenta[time] Red[ERROR]: Cyan[message]: [value] + */ + /* eslint-disable @typescript-eslint/no-explicit-any */ + static log(message: string, value?: any): void { + const timestamp = new Date().toISOString(); + const logMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[36m${message}\x1b[0m:`; + + if (Logger.isDebug) { + console.log(logMessage, value === undefined ? "" : value); + } + } + + /* eslint-disable @typescript-eslint/no-explicit-any */ + static warn(message: string, value?: any): void { + const timestamp = new Date().toISOString(); + const warnMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[33mWARN\x1b[0m: \x1b[36m${message}\x1b[0m`; + + if (Logger.isDebug) { + console.warn(warnMessage, value === undefined ? "" : value); + } + } + + /* eslint-disable @typescript-eslint/no-explicit-any */ + static error(message: string, value?: any): void { + const timestamp = new Date().toISOString(); + const errorMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[31mERROR\x1b[0m: \x1b[36m${message}\x1b[0m`; + + if (Logger.isDebug) { + console.error(errorMessage, value === undefined ? "" : value); + } + } +} + +export { Logger }; diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 58529e2a8..87bc298f6 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -16,6 +16,7 @@ import { IHybridPaymaster } from "./interfaces/IHybridPaymaster"; import { MAX_UINT256, ERC20_ABI, ADDRESS_ZERO } from "./utils/Constants"; import { sendRequest, HttpMethod } from "./utils/HttpRequests"; import { getTimestampInSeconds } from "./utils/Helpers"; +import { Logger } from "./utils/Logger"; const defaultPaymasterConfig: PaymasterConfig = { paymasterUrl: "", @@ -214,7 +215,7 @@ export class BiconomyPaymaster implements IHybridPaymaster({ url, method, body }: HttpRequest): Promis let jsonResponse; try { jsonResponse = await response.json(); - console.info("RPC response", jsonResponse); + Logger.log("Paymaster RPC Response", jsonResponse); } catch (error) { if (!response.ok) { throw new Error(response.statusText); diff --git a/packages/paymaster/src/utils/Logger.ts b/packages/paymaster/src/utils/Logger.ts new file mode 100644 index 000000000..0bdcae373 --- /dev/null +++ b/packages/paymaster/src/utils/Logger.ts @@ -0,0 +1,49 @@ +/* eslint-disable no-console */ +/** + * Single class to be used for logging purpose. + * + * @param {any} message Message to be logged + */ +class Logger { + // By default, the logger is not in debug mode. + static isDebug: boolean = process.env.BICONOMY_SDK_DEBUG === "true" ? true : process.env.REACT_APP_BICONOMY_SDK_DEBUG === "true" ? true : false; + + /** + * \x1b[0m is an escape sequence to reset the color of the text + * All color codes used - 31 - Red, 33 - Yellow, 34 - Blue, 35 - Magenta, 36 - Cyan + * log - Magenta[time] Cyan[message]: [value] + * warn - Magenta[time] Yellow[WARN]: Cyan[message]: [value] + * error - Magenta[time] Red[ERROR]: Cyan[message]: [value] + */ + /* eslint-disable @typescript-eslint/no-explicit-any */ + static log(message: string, value?: any): void { + const timestamp = new Date().toISOString(); + const logMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[36m${message}\x1b[0m:`; + + if (Logger.isDebug) { + console.log(logMessage, value === undefined ? "" : value); + } + } + + /* eslint-disable @typescript-eslint/no-explicit-any */ + static warn(message: string, value?: any): void { + const timestamp = new Date().toISOString(); + const warnMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[33mWARN\x1b[0m: \x1b[36m${message}\x1b[0m`; + + if (Logger.isDebug) { + console.warn(warnMessage, value === undefined ? "" : value); + } + } + + /* eslint-disable @typescript-eslint/no-explicit-any */ + static error(message: string, value?: any): void { + const timestamp = new Date().toISOString(); + const errorMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[31mERROR\x1b[0m: \x1b[36m${message}\x1b[0m`; + + if (Logger.isDebug) { + console.error(errorMessage, value === undefined ? "" : value); + } + } +} + +export { Logger }; From dfe31af5170730d796ce9f2c0de9e69cfa438659 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Fri, 5 Jan 2024 18:38:14 +0530 Subject: [PATCH 1001/1247] Feedback by @joepegler #352 --- packages/account/src/BiconomySmartAccountV2.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 67eb52473..d82a45d3a 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -128,19 +128,20 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @throws An error if something is wrong with the smart account instance creation. */ public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { - const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); + const config = { + ...biconomySmartAccountConfig, + }; // Note: If no module is provided, we will use ECDSA_OWNERSHIP as default - if (biconomySmartAccountConfig.defaultValidationModule) { - instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - } else { - instance.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ + if (!biconomySmartAccountConfig?.defaultValidationModule) { + const newModule = await ECDSAOwnershipValidationModule.create({ signer: biconomySmartAccountConfig.signer!, }); + config.defaultValidationModule = newModule; + config.activeValidationModule = newModule; } - instance.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? instance.defaultValidationModule; - return instance; + return new BiconomySmartAccountV2(config); } // Calls the getCounterFactualAddress From 6abc41b0558050a628b5c58e7d889010494470e2 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Fri, 5 Jan 2024 20:02:29 +0530 Subject: [PATCH 1002/1247] fix: logic error --- packages/account/src/BiconomySmartAccountV2.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index d82a45d3a..1ba6b6530 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -133,13 +133,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { }; // Note: If no module is provided, we will use ECDSA_OWNERSHIP as default - if (!biconomySmartAccountConfig?.defaultValidationModule) { + if (!config?.defaultValidationModule) { const newModule = await ECDSAOwnershipValidationModule.create({ signer: biconomySmartAccountConfig.signer!, }); config.defaultValidationModule = newModule; - config.activeValidationModule = newModule; } + config.activeValidationModule = config?.activeValidationModule ?? config.defaultValidationModule; return new BiconomySmartAccountV2(config); } From 4b4a53aabdf9e22485599872332b3d63e8ddd87a Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Fri, 5 Jan 2024 15:48:17 +0000 Subject: [PATCH 1003/1247] Feat(DEVX-410): Reinclude tests --- .env.example | 3 + .github/workflows/check_branch_name.yml | 2 +- .github/workflows/pull_request_approved.yml | 35 ++ .github/workflows/push_check.yml | 3 +- jest.config.e2e.ts | 6 + jest.config.ts | 10 +- package.json | 3 +- packages/account/Readme.md | 57 +-- packages/account/package.json | 3 +- .../account/src/BiconomySmartAccountV2.ts | 10 + packages/account/src/index.ts | 9 + ...AccountV2-Abstract-Paymaster.local.spec.ts | 88 ---- ...AccountV2-Module-Abstraction.local.spec.ts | 64 --- .../tests/SmartAccountV2.local.spec.ts | 475 ------------------ packages/account/tests/account.e2e.spec.ts | 192 +++++++ packages/account/tests/account.spec.ts | 111 +++- packages/account/tests/index.d.ts | 21 + packages/account/tests/utils.ts | 45 ++ packages/bundler/src/utils/HttpRequests.ts | 1 - packages/bundler/tests/bundler.e2e.spec.ts | 14 + packages/bundler/tests/bundler.spec.ts | 15 +- packages/bundler/tests/index.d.ts | 21 + packages/paymaster/tests/index.d.ts | 21 + .../paymaster/tests/paymaster.e2e.spec.ts | 14 + packages/paymaster/tests/paymaster.spec.ts | 15 +- setup-e2e-tests.ts | 127 +++++ setup-unit-tests.ts | 66 +++ tsconfig.json | 1 - 28 files changed, 745 insertions(+), 687 deletions(-) create mode 100644 .env.example create mode 100644 .github/workflows/pull_request_approved.yml create mode 100644 jest.config.e2e.ts delete mode 100644 packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts delete mode 100644 packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts delete mode 100644 packages/account/tests/SmartAccountV2.local.spec.ts create mode 100644 packages/account/tests/account.e2e.spec.ts create mode 100644 packages/account/tests/index.d.ts create mode 100644 packages/account/tests/utils.ts create mode 100644 packages/bundler/tests/bundler.e2e.spec.ts create mode 100644 packages/bundler/tests/index.d.ts create mode 100644 packages/paymaster/tests/index.d.ts create mode 100644 packages/paymaster/tests/paymaster.e2e.spec.ts create mode 100644 setup-e2e-tests.ts create mode 100644 setup-unit-tests.ts diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..915f7980c --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +E2E_PRIVATE_KEY_ONE= +E2E_PRIVATE_KEY_TWO= +E2E_BICO_PAYMASTER_KEY_MUMBAI= \ No newline at end of file diff --git a/.github/workflows/check_branch_name.yml b/.github/workflows/check_branch_name.yml index 9c4cf9a67..39422432d 100644 --- a/.github/workflows/check_branch_name.yml +++ b/.github/workflows/check_branch_name.yml @@ -18,4 +18,4 @@ jobs: if [[ ! $BRANCH_NAME =~ ^(features/|fixes/|releases/) ]]; then echo "error: Branch names should follow GitFlow naming convention (features/, fixes/, releases/)." exit 1 - fi \ No newline at end of file + fi diff --git a/.github/workflows/pull_request_approved.yml b/.github/workflows/pull_request_approved.yml new file mode 100644 index 000000000..791e9ed02 --- /dev/null +++ b/.github/workflows/pull_request_approved.yml @@ -0,0 +1,35 @@ +name: E2E Test workflow +on: + pull_request_review: + types: [submitted] +jobs: + e2e_test: + if: github.event.review.state == 'approved' + name: E2E tests + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18.x] + + steps: + - name: Checkout + uses: "actions/checkout@main" + + - name: Set Node.js + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: yarn install --frozen-lockfile && yarn build + + - name: Run tests + uses: nick-fields/retry@v2 + env: + E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} + E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} + E2E_BICO_PAYMASTER_KEY_MUMBAI: ${{ secrets.E2E_BICO_PAYMASTER_KEY_MUMBAI }} + with: + timeout_minutes: 2 + max_attempts: 3 + command: yarn test:e2e diff --git a/.github/workflows/push_check.yml b/.github/workflows/push_check.yml index 6cfca05c1..35705a430 100644 --- a/.github/workflows/push_check.yml +++ b/.github/workflows/push_check.yml @@ -1,5 +1,6 @@ name: Test workflow -on: push +on: [push, workflow_dispatch] + jobs: lint: name: Lint sources diff --git a/jest.config.e2e.ts b/jest.config.e2e.ts new file mode 100644 index 000000000..b6fedd042 --- /dev/null +++ b/jest.config.e2e.ts @@ -0,0 +1,6 @@ +import config from "./jest.config"; +const e2eConfig = { ...config }; +e2eConfig.testMatch = ["**/*.e2e.spec.ts"]; +e2eConfig.setupFilesAfterEnv = ["/setup-e2e-tests.ts"]; + +export default e2eConfig; diff --git a/jest.config.ts b/jest.config.ts index a968e1995..e2c320a1c 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -123,7 +123,7 @@ const config: Config = { // setupFiles: [], // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], + setupFilesAfterEnv: ["/setup-unit-tests.ts"], // The number of seconds after which a test is considered as slow and reported as such in the results. // slowTestThreshold: 5, @@ -141,7 +141,7 @@ const config: Config = { // testLocationInResults: false, // The glob patterns Jest uses to detect test files - testMatch: ["**/*.spec.ts"], + testMatch: ["**/*.spec.ts", "!**/*.e2e.spec.ts"], // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped // testPathIgnorePatterns: [ @@ -179,6 +179,10 @@ const config: Config = { // Whether to use watchman for file crawling // watchman: true, + + globals: { + testDataPerChain: [] + } }; -export default config; +export default config; \ No newline at end of file diff --git a/package.json b/package.json index d429eb1c3..c28cc9191 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", "test:coverage": "concurrently -k --success first 'yarn start:ganache' 'yarn jest --runInBand --coverage'", + "test:e2e": "yarn test:run --config=jest.config.e2e.ts", "diff": "lerna diff", "release": "lerna version patch --no-git-tag-version --no-push --conventional-commits --yes" }, @@ -71,7 +72,7 @@ "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-security": "^1.7.1", - "ganache": "^7.9.1", + "ganache": "^7.9.2", "hardhat": "^2.17.3", "jest": "^29.7.0", "lerna": "^7.2.0", diff --git a/packages/account/Readme.md b/packages/account/Readme.md index fb8fc3959..3209e6a74 100644 --- a/packages/account/Readme.md +++ b/packages/account/Readme.md @@ -16,7 +16,7 @@ yarn add @biconomy/account ### Account -Integrating and deploying Smart Accounts, building and sending user operations is a key offering of any toolkit designed for ERC4337. This package seamlessly integrates the essential features associated with ERC-4337 and simplifies the development of your Dapp's account and transaction rails with added usability features. +Integrating and deploying Smart Accounts, building and sending user operations is a key offering of any toolkit designed for ERC4337. This package seamlessly integrates the essential features associated with ERC-4337 and simplifies the development of your Dapp's account and transaction rails with added usability features. The account package achieves this by providing a comprehensive set of methods that enable developers to effortlessly create UserOperations. Combined with the sophisticated, developer friendly and scalable infrastructure of Biconomy, it ensures efficient and reliable transmission of these operations across multiple EVM chains. @@ -36,50 +36,23 @@ The account package achieves this by providing a comprehensive set of methods th ## Example Usage ```typescript -// This is how you create BiconomySmartAccount instance in your dapp's +// This is how you create a smartWallet in your dapp +import { Bundler, createSmartWalletClient } from "@biconomy/account"; -import { BiconomySmartAccount, BiconomySmartAccountConfig } from "@biconomy/account"; +const smartWallet = await createSmartWalletClient({ + chainId: 1, + signer, // viem's WalletClientSigner + bundlerUrl, +}); -// Note that paymaster and bundler are optional. You can choose to create new instances of this later and make account API use -const biconomySmartAccountConfig: BiconomySmartAccountConfig = { - signer: wallet.getSigner(), - chainId: ChainId.POLYGON_MAINNET, - rpcUrl: "", - // paymaster: paymaster, // check the README.md section of Paymaster package - // bundler: bundler, // check the README.md section of Bundler package -}; - -const biconomyAccount = new BiconomySmartAccount(biconomySmartAccountConfig); -const biconomySmartAccount = await biconomyAccount.init(); - -// native token transfer -// you can create any sort of transaction following same structure -const transaction = { +// Send some ETH +const { wait } = await smartWallet.sendTransaction({ to: "0x85B51B068bF0fefFEFD817882a14f6F5BDF7fF2E", + value: 1, data: "0x", - value: ethers.utils.parseEther("0.1"), -}; - -// building partialUserOp -const partialUserOp = await biconomySmartAccount.buildUserOp([transaction]); - -// using the paymaster package one can populate paymasterAndData to partial userOp. by default it is '0x' -``` - -```typescript -const userOpResponse = await smartAccount.sendUserOp(partialUserOp); -const transactionDetails = await userOpResponse.wait(); -console.log("transaction details below"); -console.log(transactionDetails); -``` - -Finally we send the userOp and save the value to a variable named userOpResponse and get the transactionDetails after calling `typescript userOpResponse.wait()` +}); -```typescript -const transactionDetails = await userOpResponse.wait(); -console.log("transaction details below"); -console.log(transactionDetails); +const { + receipt: { transactionHash }, +} = await wait(); ``` - -#### BiconomySmartAccount (V2 Smart Account aka Modular Smart Account) - diff --git a/packages/account/package.json b/packages/account/package.json index 783002366..3e56fef31 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -34,8 +34,7 @@ "access": "public" }, "devDependencies": { - "nock": "^13.2.9", - "viem": "^1.19.11" + "nock": "^13.2.9" }, "dependencies": { "@alchemy/aa-core": "^1.2.2", diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 765b32efa..ffdde0707 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -555,6 +555,16 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } } + /** + * @param manyOrOneTransactions list of transactions, or single transaction for execution + * @param buildUseropDto options for building the userOp + * @returns Promise + */ + async sendTransaction(manyOrOneTransactions: Transaction | Transaction[], buildUseropDto?: BuildUserOpOptions) { + const userOp = await this.buildUserOp(Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions : [manyOrOneTransactions], buildUseropDto); + return this.sendUserOp(userOp); + } + async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { const to = transactions.map((element: Transaction) => element.to as Hex); const data = transactions.map((element: Transaction) => (element.data as Hex) ?? "0x"); diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index 242cd2529..57663eb55 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -1,4 +1,13 @@ +import { BiconomySmartAccountV2 } from "./BiconomySmartAccountV2"; +import { BiconomySmartAccountV2Config } from "./utils/Types"; + export * from "./utils/Types"; export * from "./utils/Constants"; export * from "./BiconomySmartAccountV2"; export * from "./provider"; + +export { WalletClientSigner } from "@alchemy/aa-core"; +export { BiconomyPaymaster as Paymaster, IPaymaster } from "@biconomy/paymaster"; +export { Bundler, IBundler } from "@biconomy/bundler"; +export const createSmartWalletClient = BiconomySmartAccountV2.create; +export type SmartWalletConfig = BiconomySmartAccountV2Config; diff --git a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts deleted file mode 100644 index b9ba6b23c..000000000 --- a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts +++ /dev/null @@ -1,88 +0,0 @@ -// import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; - -// import { -// SmartAccount_v200, -// SmartAccountFactory_v200, -// SmartAccount_v200__factory, -// SmartAccountFactory_v200__factory, -// ECDSAOwnershipRegistryModule_v100__factory, -// } from "@biconomy/common"; - -// import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -// import { ChainId } from "@biconomy/core-types"; -// import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; -// import { BaseValidationModule } from "@biconomy/modules"; -// import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -// import { BiconomyPaymaster } from "@biconomy/paymaster"; -// import { Hex } from "viem"; - -// const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); -// const signer = provider.getSigner(); - -describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { - it("should pass", () => { - expect(true).toBe(true); - }); - // let owner: Wallet; - // let factoryOwner: Wallet; - // let account: BiconomySmartAccountV2; - // let entryPoint: EntryPoint; - // let accountFactory: SmartAccountFactory_v200; - // let ecdsaModule: ECDSAOwnershipRegistryModule_v100; - // let module1: BaseValidationModule; - // beforeAll(async () => { - // owner = Wallet.createRandom(); - // entryPoint = await new EntryPoint__factory(signer).deploy(); - // console.log("ep address ", entryPoint.address); - // factoryOwner = Wallet.createRandom(); - // const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - // accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - // ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - // module1 = await ECDSAOwnershipValidationModule.create({ - // signer: owner, - // moduleAddress: ecdsaModule.address, - // }); - // console.log("provider url ", provider.connection.url); - // await new Promise((resolve) => setTimeout(resolve, 10000)); - // }, 30000); - // it("Create a smart account with paymaster through api key", async () => { - // account = await BiconomySmartAccountV2.create({ - // chainId: ChainId.GANACHE, - // rpcUrl: "http://127.0.0.1:8545", - // entryPointAddress: entryPoint.address, - // biconomyPaymasterApiKey: "7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", - // factoryAddress: accountFactory.address, - // defaultFallbackHandler: await accountFactory.minimalHandler(), - // defaultValidationModule: module1, - // activeValidationModule: module1, - // bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/...", - // }); - // const address = await account.getAccountAddress(); - // console.log("account address ", address); - // const paymaster = account.paymaster; - // expect(paymaster).not.toBeNull(); - // expect(paymaster).not.toBeUndefined(); - // expect(address).toBe(account.accountAddress); - // }, 10000); - // it("Create a smart account with paymaster by creating instance", async () => { - // const paymaster = new BiconomyPaymaster({ - // paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", - // }); - // account = await BiconomySmartAccountV2.create({ - // chainId: ChainId.GANACHE, - // rpcUrl: "http://127.0.0.1:8545", - // entryPointAddress: entryPoint.address, - // factoryAddress: accountFactory.address, - // defaultFallbackHandler: await accountFactory.minimalHandler(), - // defaultValidationModule: module1, - // activeValidationModule: module1, - // paymaster: paymaster, - // bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/...", - // }); - // const address = await account.getAccountAddress(); - // console.log("account address ", address); - // expect(account.paymaster).not.toBeNull(); - // expect(account.paymaster).not.toBeUndefined(); - // expect(address).toBe(account.accountAddress); - // }, 10000); -}); diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts deleted file mode 100644 index f018da992..000000000 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ /dev/null @@ -1,64 +0,0 @@ -// import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; - -// import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -// import { ChainId } from "@biconomy/core-types"; - -// const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); -// const signer = provider.getSigner(); - -describe("BiconomySmartAccountV2 Module Abstraction", () => { - it("should pass", () => { - expect(true).toBe(true); - }); - // let owner: Wallet; - // let factoryOwner: Wallet; - // let entryPoint: EntryPoint; - // let beneficiary: string; - // let recipient: SampleRecipient; - // let accountFactory: SmartAccountFactory_v200; - // let ecdsaModule: ECDSAOwnershipRegistryModule_v100; - // beforeAll(async () => { - // owner = Wallet.createRandom(); - // entryPoint = await new EntryPoint__factory(signer).deploy(); - // console.log("ep address ", entryPoint.address); - // beneficiary = await signer.getAddress(); - // factoryOwner = Wallet.createRandom(); - // const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - // accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - // ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - // recipient = await new SampleRecipient__factory(signer).deploy(); - // await new Promise((resolve) => setTimeout(resolve, 10000)); - // }, 30000); - // it("Create smart account with default module (ECDSA)", async () => { - // const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - // chainId: ChainId.GANACHE, - // rpcUrl: "http://127.0.0.1:8545", - // entryPointAddress: entryPoint.address, - // signer, - // bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/...", - // /*defaultValidationModule: await ECDSAOwnershipValidationModule.create({ - // signer: signer, - // moduleAddress: ecdsaModule.address, - // }),*/ - // }); - // const address = await account.getAccountAddress(); - // console.log("Module Abstraction Test - Account address ", address); - // expect(address).toBe(account.accountAddress); - // const module = account.activeValidationModule; - // console.log(`ACTIVE MODULE - ${module.getAddress()}`); - // }, 10000); - // it("Create smart account with ECDSA module", async () => { - // const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - // chainId: ChainId.GANACHE, - // rpcUrl: "http://127.0.0.1:8545", - // entryPointAddress: entryPoint.address, - // signer, - // bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/...", - // }); - // const address = await account.getAccountAddress(); - // console.log("Module Abstraction Test - Account address ", address); - // expect(address).toBe(account.accountAddress); - // const module = account.activeValidationModule; - // console.log(`ACTIVE MODULE - ${module.getAddress()}`); - // }, 10000); -}); diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts deleted file mode 100644 index 018b5061b..000000000 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ /dev/null @@ -1,475 +0,0 @@ -// import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -// import { VoidSigner, Wallet, ethers } from "ethers"; -// import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; - -// import { -// SmartAccount_v200, -// SmartAccountFactory_v200, -// SmartAccount_v200__factory, -// SmartAccountFactory_v200__factory, -// ECDSAOwnershipRegistryModule_v100__factory, -// MultiChainValidationModule_v100__factory, -// } from "@biconomy/common"; - -// import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -// import { ChainId, UserOperation } from "@biconomy/core-types"; -// import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; -// import { MultiChainValidationModule } from "@biconomy/modules"; -// import { BaseValidationModule } from "@biconomy/modules"; -// import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -// import { MultiChainValidationModule_v100 } from "@biconomy/common"; -// import { createWalletClient, http } from "viem"; -// import { localhost, polygonMumbai } from "viem/chains"; -// import { WalletClientSigner } from "@alchemy/aa-core"; -// import { privateKeyToAccount } from "viem/accounts"; -// import { DEFAULT_ENTRYPOINT_ADDRESS } from "../src/utils/Constants"; - -// const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); -// const signer = provider.getSigner(); -// const SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; - -// const MUMBAI = "https://rpc-mumbai.maticvigil.com"; -// const randomEOA = ethers.Wallet.createRandom(); -// const testPrivKey = randomEOA.privateKey.slice(2); - -describe("BiconomySmartAccountV2 API Specs", () => { - it("should pass", () => { - expect(true).toBe(true); - }); - // let owner: Wallet; - // let factoryOwner: Wallet; - // let accountAPI: BiconomySmartAccountV2; - // let entryPoint: EntryPoint; - // let beneficiary: string; - // let recipient: SampleRecipient; - // let accountFactory: SmartAccountFactory_v200; - // let ecdsaModule: ECDSAOwnershipRegistryModule_v100; - // let multiChainModule: MultiChainValidationModule_v100; - // let accountAddress: string; - // let module1: BaseValidationModule; - // let module2: BaseValidationModule; - // beforeAll(async () => { - // owner = Wallet.createRandom(); - // entryPoint = await new EntryPoint__factory(signer).deploy(); - // console.log("ep address ", entryPoint.address); - // beneficiary = await signer.getAddress(); - // factoryOwner = Wallet.createRandom(); - // const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - // accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - // ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - // module1 = await ECDSAOwnershipValidationModule.create({ - // signer: owner, - // moduleAddress: ecdsaModule.address, - // }); - // multiChainModule = await new MultiChainValidationModule_v100__factory(signer).deploy(); - // module2 = await MultiChainValidationModule.create({ - // signer: owner, - // moduleAddress: multiChainModule.address, - // }); - // console.log("provider url ", provider.connection.url); - // recipient = await new SampleRecipient__factory(signer).deploy(); - // accountAPI = await BiconomySmartAccountV2.create({ - // chainId: ChainId.GANACHE, - // rpcUrl: "http://127.0.0.1:8545", - // // paymaster: paymaster, - // // bundler: bundler, - // entryPointAddress: entryPoint.address, - // factoryAddress: accountFactory.address, - // implementationAddress: accountImpl.address, - // defaultFallbackHandler: await accountFactory.minimalHandler(), - // defaultValidationModule: module1, - // activeValidationModule: module1, - // signer, - // bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - // }); - // // console.log('account api provider ', accountAPI.provider) - // const counterFactualAddress = await accountAPI.getAccountAddress(); - // console.log("Counterfactual address ", counterFactualAddress); - // await new Promise((resolve) => setTimeout(resolve, 10000)); - // }, 30000); - // it("Nonce should be zero", async () => { - // const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - // console.log("builtUserOp", builtUserOp); - // expect(builtUserOp?.nonce?.toString()).toBe("0"); - // }, 30000); - // it("Sender should be non zero", async () => { - // const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - // expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); - // }, 30000); - // it("InitCode length should be greater then 170", async () => { - // const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - // expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); - // }); - // it("#getUserOpHash should match entryPoint.getUserOpHash", async function () { - // const userOp: UserOperation = { - // sender: "0x".padEnd(42, "1"), - // nonce: 2, - // initCode: "0x3333", - // callData: "0x4444", - // callGasLimit: 5, - // verificationGasLimit: 6, - // preVerificationGas: 7, - // maxFeePerGas: 8, - // maxPriorityFeePerGas: 9, - // paymasterAndData: "0xaaaaaa", - // signature: "0xbbbb", - // }; - // const hash = await accountAPI.getUserOpHash(userOp); - // const epHash = await entryPoint.getUserOpHash(userOp); - // expect(hash).toBe(epHash); - // }); - // it("should deploy to counterfactual address", async () => { - // accountAddress = await accountAPI.getAccountAddress(); - // expect(await provider.getCode(accountAddress).then((code) => code.length)).toBe(2); - // await signer.sendTransaction({ - // to: accountAddress, - // value: ethers.utils.parseEther("0.1"), - // }); - // const op = await accountAPI.buildUserOp([ - // { - // to: recipient.address, - // data: recipient.interface.encodeFunctionData("something", ["hello"]), - // }, - // ]); - // const signedUserOp = await accountAPI.signUserOp(op); - // await entryPoint.handleOps([signedUserOp], beneficiary); - // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - // expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); - // }, 10000); // on github runner it takes more time than 5000ms - // // TODO - // // possibly use local bundler API from image - // it("should build and send userop via bundler API", async () => {}); - // it("should deploy another account using different validation module", async () => { - // let accountAPI2 = await BiconomySmartAccountV2.create({ - // chainId: ChainId.GANACHE, - // rpcUrl: "http://127.0.0.1:8545", - // // paymaster: paymaster, - // // bundler: bundler, - // entryPointAddress: entryPoint.address, - // factoryAddress: accountFactory.address, - // implementationAddress: accountAPI.getImplementationAddress(), - // defaultFallbackHandler: await accountFactory.minimalHandler(), - // defaultValidationModule: module2, - // activeValidationModule: module2, - // signer, - // bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - // }); - // // TODO - // // Review: Just setting different default validation module and querying account address is not working - // // accountAPI.setDefaultValidationModule(module2); - // accountAPI2 = await accountAPI2.init(); - // const accountAddress2 = await accountAPI2.getAccountAddress(); - // expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBe(2); - // await signer.sendTransaction({ - // to: accountAddress2, - // value: ethers.utils.parseEther("0.1"), - // }); - // const op = await accountAPI2.buildUserOp([ - // { - // to: recipient.address, - // data: recipient.interface.encodeFunctionData("something", ["hello"]), - // }, - // ]); - // const signedUserOp = await accountAPI2.signUserOp(op); - // await entryPoint.handleOps([signedUserOp], beneficiary); - // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - // expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBeGreaterThan(0); - // }); - // it("should check if module is enabled", async () => { - // const isEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module1 as any).moduleAddress); - // expect(isEcdsaModuleEnabled).toBe(true); - // const isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(false); - // }); - // it("should list all enabled modules", async () => { - // const paginatedModules = await accountAPI.getAllModules(); - // console.log("enabled modules ", paginatedModules); - // }); - // it("should enable a new module", async () => { - // let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(false); - // // Review: this actually skips whole paymaster stuff and also sends to connected bundler - // // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); - // const enableModuleData = await accountAPI.getEnableModuleData((module2 as any).moduleAddress); - // await signer.sendTransaction({ - // to: accountAddress, - // value: ethers.utils.parseEther("0.1"), - // }); - // const op = await accountAPI.buildUserOp([enableModuleData], { - // // skipBundlerGasEstimation: true, - // // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - // }); - // const signedUserOp = await accountAPI.signUserOp(op); - // await entryPoint.handleOps([signedUserOp], beneficiary); - // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - // isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(true); - // }); - // it("signs the userOp using active validation module", async () => { - // const op = await accountAPI.buildUserOp([ - // { - // to: recipient.address, - // data: recipient.interface.encodeFunctionData("something", ["hello"]), - // }, - // ]); - // const signedUserOp = await accountAPI.signUserOp(op); - // expect(signedUserOp.signature).toBeDefined(); - // const userOpHash = await accountAPI.getUserOpHash(op); - // const signature = await accountAPI.signUserOpHash(userOpHash); - // console.log("signature ", signature); - // expect(signature).toBeDefined(); - // }); - // it("disables requested module", async () => { - // let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(true); - // const disableModuleData = await accountAPI.getDisableModuleData(SENTINEL_MODULE, (module2 as any).moduleAddress); - // await signer.sendTransaction({ - // to: accountAddress, - // value: ethers.utils.parseEther("0.1"), - // }); - // const op = await accountAPI.buildUserOp([disableModuleData], { - // // skipBundlerGasEstimation: true, - // // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - // }); - // const signedUserOp = await accountAPI.signUserOp(op); - // await entryPoint.handleOps([signedUserOp], beneficiary); - // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - // isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(false); - // const modulesAfter = await accountAPI.getAllModules(); - // expect(modulesAfter[0]).toBe((module1 as any).moduleAddress); - // }); - // it("sends userop using multichain (different) validation module after enabling and setting it up", async () => { - // let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(false); - // // Review: this actually skips whole paymaster stuff and also sends to connected bundler - // // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); - // const accountOwnerAddress = await owner.getAddress(); - // const multichainEcdsaOwnershipSetupData = multiChainModule.interface.encodeFunctionData("initForSmartAccount", [accountOwnerAddress]); - // const setupAndEnableModuleData = await accountAPI.getSetupAndEnableModuleData((module2 as any).moduleAddress, multichainEcdsaOwnershipSetupData); - // await signer.sendTransaction({ - // to: accountAddress, - // value: ethers.utils.parseEther("0.1"), - // }); - // const op1 = await accountAPI.buildUserOp([setupAndEnableModuleData], { - // // skipBundlerGasEstimation: true, - // // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - // }); - // console.log("op1 ", op1); - // const signedUserOp1 = await accountAPI.signUserOp(op1); - // await entryPoint.handleOps([signedUserOp1], beneficiary); - // isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - // expect(isMultichainEcdsaModuleEnabled).toBe(true); - // // Setting it as active validation module now - // accountAPI = accountAPI.setActiveValidationModule(module2); - // const op = await accountAPI.buildUserOp([ - // { - // to: recipient.address, - // data: recipient.interface.encodeFunctionData("something", ["hello"]), - // }, - // ]); - // const signedUserOp = await accountAPI.signUserOp(op); - // await entryPoint.handleOps([signedUserOp], beneficiary); - // // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - // }, 10000); // on github runner it takes more time than 5000ms - // it("Creates another replicated instance using void signer", async () => { - // const newmodule = await ECDSAOwnershipValidationModule.create({ - // signer: new VoidSigner(await owner.getAddress()), - // moduleAddress: ecdsaModule.address, - // }); - // const accountAPI2 = await BiconomySmartAccountV2.create({ - // chainId: ChainId.GANACHE, - // rpcUrl: "http://127.0.0.1:8545", - // // paymaster: paymaster, - // // bundler: bundler, - // entryPointAddress: entryPoint.address, - // factoryAddress: accountFactory.address, - // implementationAddress: accountAPI.getImplementationAddress(), - // defaultFallbackHandler: await accountFactory.minimalHandler(), - // defaultValidationModule: newmodule, - // activeValidationModule: newmodule, - // signer, - // bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - // }); - // const address = await accountAPI2.getAccountAddress(); - // console.log("account address ", address); - // expect(address).toBe(accountAPI.accountAddress); - // }, 10000); - // it("Create and setup ECDSA module with WalletClientSigner", async () => { - // const wallet = privateKeyToAccount(`0x${testPrivKey}`); - // const walletClient = createWalletClient({ - // account: wallet, - // chain: polygonMumbai, - // transport: http(MUMBAI), - // }); - // const ecdsaSigner = new WalletClientSigner(walletClient, "json-rpc"); - // const account = await BiconomySmartAccountV2.create({ - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // signer: ecdsaSigner, - // bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - // }); - // const counterFactualAddress = await account.getAccountAddress(); - // console.log("Counterfactual address ", counterFactualAddress); - // const module = await ECDSAOwnershipValidationModule.create({ - // signer: owner, - // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE, - // }); - // account.setActiveValidationModule(module); - // }); - // it("Create and setup ECDSA module with ethersV5 Signer", async () => { - // const module = await ECDSAOwnershipValidationModule.create({ - // signer: randomEOA, - // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE, - // }); - // const account = await BiconomySmartAccountV2.create({ - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // signer: owner, - // defaultValidationModule: module, - // activeValidationModule: module, - // bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - // }); - // const counterFactualAddress = await account.getAccountAddress(); - // console.log("Counterfactual address ", counterFactualAddress); - // expect(counterFactualAddress).toBeDefined(); - // expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - // }); - // NOTE - // For tests we could only use sendUserOp for test networks until bundler integration test suite is integrated - // For test networks we can send transactions for Account created using random private key, IF paymaster is used - // buildUserOp tests we can do for any test network cause that only requires bundles without sending transactions - // If we can send prefund to the account then specific private key can be added (only testnet native tokens) or loaded from env - // TODO - // it("Send user op with ethersV5 signer", async () => { - // const provider = new ethers.providers.JsonRpcProvider(MUMBAI); - // const owner: Signer = new ethers.Wallet(testPrivKey, provider); - // const bundler: IBundler = new Bundler({ - // bundlerUrl: "", - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // }) - // const module = await ECDSAOwnershipValidationModule.create({ - // signer: owner, - // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - // }) - // const newAccount = await BiconomySmartAccountV2.create({ - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // signer: owner, - // bundler, - // defaultValidationModule: module, - // activeValidationModule: module - // }); - // const accountAddress = await newAccount.getAccountAddress(); - // const prefund = { - // to: accountAddress, - // value: ethers.utils.parseEther("0.1"), - // } - // const prefundResp = await owner.sendTransaction(prefund); - // prefundResp.wait(); - // const tx = { - // to: await Wallet.createRandom().getAddress(), - // data: "0x" - // } - // const userOp = await newAccount.buildUserOp([tx]); - // const res = await newAccount.sendUserOp(userOp); - // const txhash = await res.waitForTxHash(); - // console.log("txhash ", txhash); - // expect(txhash).toBeDefined(); - // }); - // it("Send user op with WalletClientSigner signer", async () => { - // const wallet = privateKeyToAccount(`0x${testPrivKey}`) - // const walletClient = createWalletClient({ - // account: wallet, - // transport: http("https://rpc-mumbai.maticvigil.com"), - // }); - // let owner = new WalletClientSigner( - // walletClient, - // "json-rpc" - // ); - // const bundler: IBundler = new Bundler({ - // bundlerUrl: "", - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // }) - // const module = await ECDSAOwnershipValidationModule.create({ - // signer: owner, - // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - // }) - // const newAccount = await BiconomySmartAccountV2.create({ - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // signer: owner, - // bundler, - // defaultValidationModule: module, - // activeValidationModule: module - // }); - // const accountAddress: `0x${string}` = await newAccount.getAccountAddress() as `0x${string}`; - // const prefundResp = await walletClient.sendTransaction({ - // account: wallet, - // to: accountAddress, - // value: 100000000000000000n, - // chain: polygonMumbai - // }); - // const tx = { - // to: await Wallet.createRandom().getAddress(), - // data: "0x" - // } - // const userOp = await newAccount.buildUserOp([tx]); - // const res = await newAccount.sendUserOp(userOp); - // const txhash = await res.waitForTxHash(); - // console.log("txhash ", txhash); - // expect(txhash).toBeDefined(); - // }); - // it("Create smart account with default module (ECDSA) without creating instance or providing module name", async () => { - // const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - // chainId: ChainId.GANACHE, - // rpcUrl: "http://127.0.0.1:8545", - // entryPointAddress: entryPoint.address, - // signer, - // bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - // }); - // const address = await account.getAccountAddress(); - // console.log("Module Abstraction Test - Account address ", address); - // expect(address).toBe(account.accountAddress); - // const module = account.activeValidationModule; - // console.log(`ACTIVE MODULE - ${module.getAddress()}`); - // expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - // }, 10000); - // it("Create smart account with ECDSA module without creating instance", async () => { - // const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - // chainId: ChainId.GANACHE, - // rpcUrl: "http://127.0.0.1:8545", - // entryPointAddress: entryPoint.address, - // signer, - // bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - // }); - // const address = await account.getAccountAddress(); - // console.log("Module Abstraction Test - Account address ", address); - // expect(address).toBe(account.accountAddress); - // const module = account.activeValidationModule as ECDSAOwnershipValidationModule; - // console.log(`ACTIVE MODULE - ${module.getAddress()}`); - // expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - // }, 10000); - // it("Create smart account with default module using WalletClientSigner as signer", async () => { - // const walletClient = createWalletClient({ - // chain: localhost, - // transport: http("http://127.0.0.1:8545"), - // }); - // const ecdsaSigner = new WalletClientSigner(walletClient, "json-rpc"); - // const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - // chainId: ChainId.GANACHE, - // rpcUrl: "http://127.0.0.1:8545", - // entryPointAddress: entryPoint.address, - // signer: ecdsaSigner, - // bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - // }); - // const address = await account.getAccountAddress(); - // console.log("Module Abstraction Test - Account address ", address); - // expect(address).toBe(account.accountAddress); - // const module = account.activeValidationModule; - // console.log(`ACTIVE MODULE - ${module.getAddress()}`); - // expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - // }, 10000); -}); diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts new file mode 100644 index 000000000..38fbeb96a --- /dev/null +++ b/packages/account/tests/account.e2e.spec.ts @@ -0,0 +1,192 @@ +import { PaymasterMode } from "@biconomy/paymaster"; +import { TestData } from "."; +import { createSmartWalletClient } from "../src/index"; +import { Hex, encodeFunctionData, parseAbi } from "viem"; +import { UserOperationStruct } from "@alchemy/aa-core"; +import { checkBalance, entryPointABI } from "./utils"; + +describe("Account Tests", () => { + let chainData: TestData; + + beforeEach(() => { + // @ts-ignore + chainData = testDataPerChain[0]; + }); + + it("should send some native token to a recipient", async () => { + const { + chainId, + whale: { signer, publicAddress: sender }, + minnow: { publicAddress: recipient }, + bundlerUrl, + entryPointAddress, + publicClient, + } = chainData; + + const smartWallet = await createSmartWalletClient({ + chainId, + signer, + bundlerUrl, + }); + + const balance = (await checkBalance(publicClient, recipient)) as bigint; + const { wait } = await smartWallet.sendTransaction({ + to: recipient, + value: 1, + data: "0x", + }); + + const result = await wait(); + const newBalance = (await checkBalance(publicClient, recipient)) as bigint; + + expect(result?.receipt?.transactionHash).toBeTruthy(); + expect(newBalance - balance).toBe(1n); + }, 30000); + + it("Create a smart account with paymaster with an api key", async () => { + const { + chainId, + whale: { signer }, + bundlerUrl, + entryPointAddress, + biconomyPaymasterApiKey, + } = chainData; + + const smartWallet = await createSmartWalletClient({ + chainId, + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const paymaster = smartWallet.paymaster; + expect(paymaster).not.toBeNull(); + expect(paymaster).not.toBeUndefined(); + }); + + it("Should gaslessly mint an NFT", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const { + chainId, + whale: { signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + publicClient, + } = chainData; + + const smartWallet = await createSmartWalletClient({ + chainId, + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address owner) view returns (uint balance)"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + value: 0, + }; + const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + const { wait } = await smartWallet.sendTransaction(transaction, { + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + }, + }); + + const result = await wait(); + const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + + expect(newBalance - balance).toBe(1n); + expect(result?.receipt?.transactionHash).toBeTruthy(); + }, 60000); + + it("#getUserOpHash should match entryPoint.getUserOpHash", async () => { + const { + chainId, + whale: { signer }, + bundlerUrl, + entryPointAddress, + publicClient, + biconomyPaymasterApiKey, + } = chainData; + + const smartWallet = await createSmartWalletClient({ + chainId, + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const userOp: UserOperationStruct = { + sender: "0x".padEnd(42, "1") as string, + nonce: 2, + initCode: "0x3333", + callData: "0x4444", + callGasLimit: 5, + verificationGasLimit: 6, + preVerificationGas: 7, + maxFeePerGas: 8, + maxPriorityFeePerGas: 9, + paymasterAndData: "0xaaaaaa", + signature: "0xbbbb", + }; + + const epHash = await publicClient.readContract({ + address: entryPointAddress as Hex, + abi: entryPointABI, + functionName: "getUserOpHash", + // @ts-ignore + args: [userOp], + }); + + const hash = await smartWallet.getUserOpHash(userOp); + expect(hash).toBe(epHash); + }, 30000); + + it("should be deployed to counterfactual address", async () => { + const { + chainId, + whale: { signer }, + bundlerUrl, + publicClient, + biconomyPaymasterApiKey, + } = chainData; + + const smartWallet = await createSmartWalletClient({ + chainId, + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const accountAddress = await smartWallet.getAccountAddress(); + const byteCode = await publicClient.getBytecode({ address: accountAddress as Hex }); + + expect(byteCode?.length).toBeGreaterThan(2); + }, 10000); // on github runner it takes more time than 5000ms + + it("should check if ecdsaOwnershipModule is enabled", async () => { + const ecdsaOwnershipModule = "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e"; + + const { + chainId, + whale: { signer }, + bundlerUrl, + } = chainData; + + const smartWallet = await createSmartWalletClient({ + chainId, + signer, + bundlerUrl, + }); + + const module = (await smartWallet.getAllModules())[0]; + expect(ecdsaOwnershipModule).toBe(module); + }); +}); diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index d86ce1ff7..5e8403ce3 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -1,5 +1,112 @@ +import { Paymaster, createSmartWalletClient } from "../"; +import { TestData } from "."; + describe("Account Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); + let chainData: TestData; + + beforeEach(() => { + // @ts-ignore + chainData = testDataPerChain[0]; }); + + it("should provide an account address", async () => { + const { + entryPointAddress, + bundlerUrl, + chainId, + whale: { signer }, + } = chainData; + + const smartWallet = await createSmartWalletClient({ + chainId, + entryPointAddress, + signer, + bundlerUrl, + }); + const address = await smartWallet.getAccountAddress(); + expect(address).toBeTruthy(); + }); + + it("Nonce should be zero", async () => { + const { + entryPointAddress, + bundlerUrl, + chainId, + whale: { signer }, + minnow: { publicAddress: recipient }, + } = chainData; + + const smartWallet = await createSmartWalletClient({ + chainId, + entryPointAddress, + signer, + bundlerUrl, + }); + const address = await smartWallet.getAccountAddress(); + expect(address).toBeTruthy(); + + const builtUserOp = await smartWallet.buildUserOp([{ to: recipient, value: 1, data: "0x" }]); + console.log("builtUserOp", builtUserOp); + expect(builtUserOp?.nonce?.toString()).toBe("0x0"); + }); + + it("should have an active validation module", async () => { + const { + entryPointAddress, + bundlerUrl, + chainId, + whale: { signer }, + } = chainData; + + const smartWallet = await createSmartWalletClient({ + chainId, + entryPointAddress, + signer, + bundlerUrl, + }); + + const module = smartWallet.activeValidationModule; + expect(module).toBeTruthy(); + }); + + it("Sender should be non zero", async () => { + const { + chainId, + whale: { signer }, + minnow: { publicAddress: recipient }, + bundlerUrl, + entryPointAddress, + } = chainData; + + const smartWallet = await createSmartWalletClient({ + chainId, + signer, + bundlerUrl, + }); + + const builtUserOp = await smartWallet.buildUserOp([{ to: recipient, value: 1000, data: "0x" }]); + expect(builtUserOp.sender).not.toBe("0x0000000000000000000000000000000000000000"); + }, 30000); + + it("Create a smart account with paymaster by creating instance", async () => { + const { + chainId, + whale: { signer }, + bundlerUrl, + entryPointAddress, + biconomyPaymasterApiKey, + } = chainData; + + const paymasterUrl = "https://paymaster.biconomy.io/api/v1/80001/" + biconomyPaymasterApiKey; + const paymaster = new Paymaster({ paymasterUrl }); + + const smartWallet = await createSmartWalletClient({ + chainId, + signer, + bundlerUrl, + paymaster, + }); + expect(smartWallet.paymaster).not.toBeNull(); + expect(smartWallet.paymaster).not.toBeUndefined(); + }, 10000); }); diff --git a/packages/account/tests/index.d.ts b/packages/account/tests/index.d.ts new file mode 100644 index 000000000..2bb5239ab --- /dev/null +++ b/packages/account/tests/index.d.ts @@ -0,0 +1,21 @@ +import { Chain, Hex, PrivateKeyAccount, PublicClient, WalletClient } from "viem"; +import { WalletClientSigner } from "@alchemy/aa-core"; + +interface WalletProps { + signer: WalletClientSigner; + walletClient: WalletClient; + balance: BigInt; + publicAddress: Hex; + account: PrivateKeyAccount; +} + +export type TestData = { + whale: WalletProps; + minnow: WalletProps; + publicClient: PublicClient; + chainId: number; + bundlerUrl: string; + entryPointAddress: string; + viemChain: Chain; + biconomyPaymasterApiKey: string; +}; diff --git a/packages/account/tests/utils.ts b/packages/account/tests/utils.ts new file mode 100644 index 000000000..c010435f6 --- /dev/null +++ b/packages/account/tests/utils.ts @@ -0,0 +1,45 @@ +import { Hex, PublicClient, parseAbi } from "viem"; + +export const checkBalance = (publicClient: PublicClient, address: Hex, tokenAddress?: Hex) => { + if (!tokenAddress) { + return publicClient.getBalance({ address }); + } else { + return publicClient.readContract({ + address: tokenAddress, + abi: parseAbi(["function balanceOf(address owner) view returns (uint balance)"]), + functionName: "balanceOf", + // @ts-ignore + args: [address], + }); + } +}; + +// TODO(Joe): Make human readable +export const entryPointABI = [ + { + inputs: [ + { + components: [ + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, + { internalType: "uint256", name: "callGasLimit", type: "uint256" }, + { internalType: "uint256", name: "verificationGasLimit", type: "uint256" }, + { internalType: "uint256", name: "preVerificationGas", type: "uint256" }, + { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, + { internalType: "uint256", name: "maxPriorityFeePerGas", type: "uint256" }, + { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, + { internalType: "bytes", name: "signature", type: "bytes" }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "getUserOpHash", + outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], + stateMutability: "view", + type: "function", + }, +]; diff --git a/packages/bundler/src/utils/HttpRequests.ts b/packages/bundler/src/utils/HttpRequests.ts index 0a646fb42..e7974c880 100644 --- a/packages/bundler/src/utils/HttpRequests.ts +++ b/packages/bundler/src/utils/HttpRequests.ts @@ -29,7 +29,6 @@ export async function sendRequest({ url, method, body }: HttpRequest): Promis throw new Error(response.statusText); } } - if (response.ok) { return jsonResponse as T; } diff --git a/packages/bundler/tests/bundler.e2e.spec.ts b/packages/bundler/tests/bundler.e2e.spec.ts new file mode 100644 index 000000000..e7c2d171b --- /dev/null +++ b/packages/bundler/tests/bundler.e2e.spec.ts @@ -0,0 +1,14 @@ +import { TestData } from "."; + +describe("Bundler E2E Tests", () => { + let chainData: TestData; + + beforeEach(() => { + // @ts-ignore + chainData = testDataPerChain[0]; + }); + + it("should have chain data", () => { + expect(chainData).toHaveProperty("chainId"); + }); +}); diff --git a/packages/bundler/tests/bundler.spec.ts b/packages/bundler/tests/bundler.spec.ts index 3c8a14354..5286d4bc9 100644 --- a/packages/bundler/tests/bundler.spec.ts +++ b/packages/bundler/tests/bundler.spec.ts @@ -1,5 +1,14 @@ -describe("Bundler Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); +import { TestData } from "."; + +describe("Bundler Unit Tests", () => { + let chainData: TestData; + + beforeEach(() => { + // @ts-ignore + chainData = testDataPerChain[0]; + }); + + it("should have chain data", () => { + expect(chainData).toHaveProperty("chainId"); }); }); diff --git a/packages/bundler/tests/index.d.ts b/packages/bundler/tests/index.d.ts new file mode 100644 index 000000000..2bb5239ab --- /dev/null +++ b/packages/bundler/tests/index.d.ts @@ -0,0 +1,21 @@ +import { Chain, Hex, PrivateKeyAccount, PublicClient, WalletClient } from "viem"; +import { WalletClientSigner } from "@alchemy/aa-core"; + +interface WalletProps { + signer: WalletClientSigner; + walletClient: WalletClient; + balance: BigInt; + publicAddress: Hex; + account: PrivateKeyAccount; +} + +export type TestData = { + whale: WalletProps; + minnow: WalletProps; + publicClient: PublicClient; + chainId: number; + bundlerUrl: string; + entryPointAddress: string; + viemChain: Chain; + biconomyPaymasterApiKey: string; +}; diff --git a/packages/paymaster/tests/index.d.ts b/packages/paymaster/tests/index.d.ts new file mode 100644 index 000000000..2bb5239ab --- /dev/null +++ b/packages/paymaster/tests/index.d.ts @@ -0,0 +1,21 @@ +import { Chain, Hex, PrivateKeyAccount, PublicClient, WalletClient } from "viem"; +import { WalletClientSigner } from "@alchemy/aa-core"; + +interface WalletProps { + signer: WalletClientSigner; + walletClient: WalletClient; + balance: BigInt; + publicAddress: Hex; + account: PrivateKeyAccount; +} + +export type TestData = { + whale: WalletProps; + minnow: WalletProps; + publicClient: PublicClient; + chainId: number; + bundlerUrl: string; + entryPointAddress: string; + viemChain: Chain; + biconomyPaymasterApiKey: string; +}; diff --git a/packages/paymaster/tests/paymaster.e2e.spec.ts b/packages/paymaster/tests/paymaster.e2e.spec.ts new file mode 100644 index 000000000..ed3ef8dd9 --- /dev/null +++ b/packages/paymaster/tests/paymaster.e2e.spec.ts @@ -0,0 +1,14 @@ +import { TestData } from "."; + +describe("Paymaster E2E Tests", () => { + let chainData: TestData; + + beforeEach(() => { + // @ts-ignore + chainData = testDataPerChain[0]; + }); + + it("should have chain data", () => { + expect(chainData).toHaveProperty("chainId"); + }); +}); diff --git a/packages/paymaster/tests/paymaster.spec.ts b/packages/paymaster/tests/paymaster.spec.ts index 54e655580..8cc97d948 100644 --- a/packages/paymaster/tests/paymaster.spec.ts +++ b/packages/paymaster/tests/paymaster.spec.ts @@ -1,5 +1,14 @@ -describe("Paymaster Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); +import { TestData } from "."; + +describe("Paymaster Unit Tests", () => { + let chainData: TestData; + + beforeEach(() => { + // @ts-ignore + chainData = testDataPerChain[0]; + }); + + it("should have chain data", () => { + expect(chainData).toHaveProperty("chainId"); }); }); diff --git a/setup-e2e-tests.ts b/setup-e2e-tests.ts new file mode 100644 index 000000000..3a0a0dd43 --- /dev/null +++ b/setup-e2e-tests.ts @@ -0,0 +1,127 @@ +import { createWalletClient, http, createPublicClient } from "viem"; +import { privateKeyToAccount } from "viem/accounts"; +import { polygonMumbai } from "viem/chains"; +import { WalletClientSigner } from "@alchemy/aa-core"; +import { config } from "dotenv"; + +config(); + +const TEST_CHAINS = [ + { + chainId: 80001, + entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/-2BFRwRlJ.8afbc010-edcf-46b3-8713-77639655f2dd", + viemChain: polygonMumbai, + biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, + }, +]; + +beforeAll(async () => { + envVarCheck(); + + const walletOne = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_ONE}`); + const walletTwo = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_TWO}`); + + const promises = TEST_CHAINS.map((chain) => { + const publicClient = createPublicClient({ + chain: chain.viemChain, + transport: http(), + }); + const walletOneClient = createWalletClient({ + account: walletOne, + chain: chain.viemChain, + transport: http(chain.viemChain.rpcUrls.public.http[0]), + }); + const walletTwoClient = createWalletClient({ + account: walletTwo, + chain: chain.viemChain, + transport: http(chain.viemChain.rpcUrls.public.http[0]), + }); + const signerOne = new WalletClientSigner(walletOneClient, "json-rpc"); + const signerTwo = new WalletClientSigner(walletTwoClient, "json-rpc"); + + return Promise.all([ + Promise.all([ + { + ...chain, + publicClient, + account: walletOne, + publicAddress: walletOne.address, + signer: signerOne, + walletClient: walletOneClient, + }, + publicClient.getBalance({ + address: walletOne.address, + }), + ]), + Promise.all([ + { + ...chain, + publicClient, + account: walletTwo, + publicAddress: walletTwo.address, + signer: signerTwo, + walletClient: walletTwoClient, + }, + publicClient.getBalance({ + address: walletTwo.address, + }), + ]), + ]); + }); + const balancesPerChain = await Promise.all(promises); + + // @ts-ignore + testDataPerChain = balancesPerChain.map((dataAndBalanceArray) => { + const sortedBalances = dataAndBalanceArray + .map(([datum, balance]) => ({ + ...datum, + balance, + })) + .sort((a, b) => { + if (a.balance > b.balance) { + return 1; + } else if (a.balance > b.balance) { + return -1; + } else { + return 0; + } + }); + + const whaleBalance = sortedBalances[0]; + const minnowBalance = sortedBalances[1]; + const datum = { + publicClient: whaleBalance.publicClient, + chainId: whaleBalance.chainId, + bundlerUrl: whaleBalance.bundlerUrl, + entryPointAddress: whaleBalance.entryPointAddress, + viemChain: whaleBalance.viemChain, + biconomyPaymasterApiKey: whaleBalance.biconomyPaymasterApiKey, + whale: { + balance: whaleBalance.balance, + signer: whaleBalance.signer, + walletClient: whaleBalance.walletClient, + publicAddress: whaleBalance.publicAddress, + account: whaleBalance.account, + }, + minnow: { + balance: minnowBalance.balance, + signer: minnowBalance.signer, + walletClient: minnowBalance.walletClient, + publicAddress: minnowBalance.publicAddress, + account: minnowBalance.account, + }, + }; + return datum; + }); +}); + +const envVarCheck = () => { + const REQUIRED_FIELDS = ["E2E_PRIVATE_KEY_ONE", "E2E_PRIVATE_KEY_TWO", "E2E_BICO_PAYMASTER_KEY_MUMBAI"]; + const hasFields = REQUIRED_FIELDS.every((field) => !!process.env[field]); + if (!hasFields) { + console.error("Missing env var"); + process.exit(0); + } +}; diff --git a/setup-unit-tests.ts b/setup-unit-tests.ts new file mode 100644 index 000000000..87b16e0b7 --- /dev/null +++ b/setup-unit-tests.ts @@ -0,0 +1,66 @@ +import { createWalletClient, http, createPublicClient } from "viem"; +import { privateKeyToAccount, generatePrivateKey, mnemonicToAccount } from "viem/accounts"; +import { localhost } from "viem/chains"; +import { WalletClientSigner } from "@alchemy/aa-core"; + +const TEST_CHAIN = { + chainId: 1337, + entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + bundlerUrl: "https://bundler.biconomy.io/api/v2/1/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + viemChain: localhost, +}; + +const MNEMONIC = "direct buyer cliff train rice spirit census refuse glare expire innocent quote"; + +beforeAll(() => { + const chain = TEST_CHAIN; + const { chainId, bundlerUrl, viemChain, entryPointAddress } = chain; + const accountOne = mnemonicToAccount(MNEMONIC); + const walletClientOne = createWalletClient({ + account: accountOne, + chain: viemChain, + transport: http(viemChain.rpcUrls.public.http[0]), + }); + const signerOne = new WalletClientSigner(walletClientOne, "json-rpc"); + const publicAddressOne = accountOne.address; + const publicClient = createPublicClient({ + chain: viemChain, + transport: http(), + }); + + const accountTwo = privateKeyToAccount(generatePrivateKey()); + const walletClientTwo = createWalletClient({ + account: accountTwo, + chain: viemChain, + transport: http(viemChain.rpcUrls.public.http[0]), + }); + const signerTwo = new WalletClientSigner(walletClientTwo, "json-rpc"); + const publicAddressTwo = accountTwo.address; + + const whale = { + signer: signerOne, + walletClient: walletClientOne, + balance: 0, + publicAddress: publicAddressOne, + }; + + const minnow = { + signer: signerTwo, + walletClient: walletClientTwo, + balance: 0, + publicAddress: publicAddressTwo, + }; + + // @ts-ignore + testDataPerChain = [ + { + whale, + minnow, + publicClient, + chainId, + bundlerUrl, + entryPointAddress, + viemChain, + }, + ]; +}); diff --git a/tsconfig.json b/tsconfig.json index ed7d126a8..f5557a831 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,6 @@ }, "include": ["packages/**/*"], "references": [ - { "path": "./packages/common" }, { "path": "./packages/transak" }, { "path": "./packages/bundler" }, { "path": "./packages/paymaster" }, From b0b693265b98a2caab1d2df52f0db4281c8da7b5 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Fri, 5 Jan 2024 23:00:41 +0530 Subject: [PATCH 1004/1247] remove unused package --- packages/account/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/account/package.json b/packages/account/package.json index 783002366..026763dab 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -42,7 +42,6 @@ "@biconomy/bundler": "^3.1.2", "@biconomy/modules": "^3.1.2", "@biconomy/paymaster": "^3.1.2", - "loglevel": "^1.8.1", "lru-cache": "^10.0.1", "viem": "^1.20.3" } From 9833340b40bf3c4f0e7546b974ae75b001de14ab Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Fri, 5 Jan 2024 23:03:37 +0530 Subject: [PATCH 1005/1247] fix: constructor validation initialisation --- packages/account/src/BiconomySmartAccountV2.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 1ba6b6530..cb4372daf 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -107,6 +107,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; + this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; + this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule; + this.provider = createPublicClient({ chain: getChain(biconomySmartAccountConfig.chainId), transport: http(biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.public.http[0]), From 8ae4c5f405e5865b6e0107fa84fc437469c337a9 Mon Sep 17 00:00:00 2001 From: amanraj1608 Date: Fri, 5 Jan 2024 23:11:55 +0530 Subject: [PATCH 1006/1247] fix: build issue --- packages/account/src/BiconomySmartAccountV2.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index cb4372daf..6f9911179 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -107,8 +107,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; - this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule; + // Added bang operator to avoid null check as the constructor have these params as optional + this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule!; + this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule!; this.provider = createPublicClient({ chain: getChain(biconomySmartAccountConfig.chainId), From 8e4b2c86b871130befbf3b733cf503d24f7226a5 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Mon, 8 Jan 2024 23:07:34 +0000 Subject: [PATCH 1007/1247] Resolved DEVX-405 --- packages/account/Readme.md | 13 +++- .../account/src/BiconomySmartAccountV2.ts | 61 ++++++++++++++++--- packages/account/src/utils/Types.ts | 57 ++++++++++------- packages/account/tests/account.e2e.spec.ts | 26 ++------ packages/account/tests/account.spec.ts | 56 ++++++++++------- packages/account/tests/index.d.ts | 4 +- packages/bundler/tests/index.d.ts | 4 +- packages/paymaster/tests/index.d.ts | 4 +- setup-e2e-tests.ts | 25 ++++---- setup-unit-tests.ts | 16 ++--- 10 files changed, 165 insertions(+), 101 deletions(-) diff --git a/packages/account/Readme.md b/packages/account/Readme.md index 3209e6a74..ff9a721da 100644 --- a/packages/account/Readme.md +++ b/packages/account/Readme.md @@ -38,10 +38,19 @@ The account package achieves this by providing a comprehensive set of methods th ```typescript // This is how you create a smartWallet in your dapp import { Bundler, createSmartWalletClient } from "@biconomy/account"; +import { createWalletClient, http, createPublicClient } from "viem"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { mainnet as chain } from "viem/chains"; + +const account = privateKeyToAccount(generatePrivateKey()); +const signer = createWalletClient({ + account, + chain, + transport: http(), +}); const smartWallet = await createSmartWalletClient({ - chainId: 1, - signer, // viem's WalletClientSigner + signer, bundlerUrl, }); diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index ffdde0707..9bc260fe3 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -17,8 +17,16 @@ import { Chain, getContract, decodeFunctionData, + WalletClient, } from "viem"; -import { BaseSmartContractAccount, getChain, type BigNumberish, type UserOperationStruct, BatchUserOperationCallData } from "@alchemy/aa-core"; +import { + BaseSmartContractAccount, + getChain, + type BigNumberish, + type UserOperationStruct, + BatchUserOperationCallData, + WalletClientSigner, +} from "@alchemy/aa-core"; import { isNullOrUndefined, packUserOp } from "./utils/Utils"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; @@ -32,6 +40,7 @@ import { NonceOptions, Transaction, QueryParamsForAddressResolver, + BiconomySmartAccountV2ConfigConstructorProps, } from "./utils/Types"; import { ADDRESS_RESOLVER_ADDRESS, @@ -77,7 +86,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature. activeValidationModule!: BaseValidationModule; - private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) { + private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2ConfigConstructorProps) { super({ ...biconomySmartAccountConfig, chain: getChain(biconomySmartAccountConfig.chainId), @@ -86,6 +95,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { accountAddress: (biconomySmartAccountConfig.accountAddress as Hex) ?? undefined, factoryAddress: biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS, }); + + this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; + this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule; + this.index = biconomySmartAccountConfig.index ?? 0; this.chainId = biconomySmartAccountConfig.chainId; this.bundler = biconomySmartAccountConfig.bundler; @@ -136,19 +149,49 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @throws An error if something is wrong with the smart account instance creation. */ public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { - const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); + let chainId = biconomySmartAccountConfig.chainId; + + // Signer needs to be initialised here before defaultValidationModule is set + if (biconomySmartAccountConfig.signer) { + const signer = biconomySmartAccountConfig.signer; + const isViemWalletClient = !(signer instanceof WalletClientSigner); + if (isViemWalletClient) { + const walletClient = signer as WalletClient; + if (!walletClient.account) { + throw new Error("Cannot consume a viem wallet without an account"); + } + if (!walletClient.chain) { + throw new Error("Cannot consume a viem wallet without a chainId"); + } + chainId = walletClient.chain.id; + biconomySmartAccountConfig.signer = new WalletClientSigner(walletClient, "viem"); + } + } + + if (!chainId) { + // Chain ID still not found + throw new Error("chainId required"); + } + + let defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; // Note: If no module is provided, we will use ECDSA_OWNERSHIP as default - if (biconomySmartAccountConfig.defaultValidationModule) { - instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - } else { - instance.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ + if (!defaultValidationModule) { + const newModule = await ECDSAOwnershipValidationModule.create({ + // @ts-expect-error: Signer always present if no defaultValidationModule signer: biconomySmartAccountConfig.signer!, }); + defaultValidationModule = newModule; } - instance.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? instance.defaultValidationModule; + const activeValidationModule = biconomySmartAccountConfig?.activeValidationModule ?? defaultValidationModule; + const config = { + ...biconomySmartAccountConfig, + defaultValidationModule, + activeValidationModule, + chainId, + }; - return instance; + return new BiconomySmartAccountV2(config); } // Calls the getCounterFactualAddress diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 67265433e..bc3c229dd 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -55,7 +55,15 @@ export interface GasOverheads { // MULTICHAIN = DEFAULT_MULTICHAIN_MODULE, }*/ -export type BaseSmartAccountConfig = ConditionalBundlerProps & { +type ConditionalBundlerProps = RequireAtLeastOne< + { + bundler: IBundler; + bundlerUrl: string; + }, + "bundler" | "bundlerUrl" +>; + +export type BaseSmartAccountConfig = { // owner?: Signer // can be in child classes index?: number; provider?: WalletClient; @@ -63,7 +71,7 @@ export type BaseSmartAccountConfig = ConditionalBundlerProps & { accountAddress?: string; overheads?: Partial; paymaster?: IPaymaster; // PaymasterAPI - chainId: number; + chainId?: number; }; export type BiconomyTokenPaymasterRequest = { @@ -90,32 +98,35 @@ type RequireAtLeastOne = Pick; -type ConditionalBundlerProps = RequireAtLeastOne< - { - bundler: IBundler; - bundlerUrl: string; - }, - "bundler" | "bundlerUrl" ->; +type BiconomySmartAccountV2ConfigBaseProps = { + factoryAddress?: Hex; + senderAddress?: Hex; + implementationAddress?: Hex; + defaultFallbackHandler?: Hex; + rpcUrl?: string; // as good as Provider + nodeClientUrl?: string; // very specific to Biconomy + biconomyPaymasterApiKey?: string; + activeValidationModule?: BaseValidationModule; + scanForUpgradedAccountsFromV1?: boolean; + maxIndexForScan?: number; +}; +export type BiconomySmartAccountV2Config = BiconomySmartAccountV2ConfigBaseProps & + BaseSmartAccountConfig & + ConditionalBundlerProps & + ConditionalValidationProps; + +type BiconomySmartAccountV2ConfigResolvedConstructorProps = { + defaultValidationModule: BaseValidationModule; + activeValidationModule: BaseValidationModule; + chainId: number; +}; -export type BiconomySmartAccountV2Config = BaseSmartAccountConfig & - ConditionalValidationProps & { - factoryAddress?: Hex; - senderAddress?: Hex; - implementationAddress?: Hex; - defaultFallbackHandler?: Hex; - rpcUrl?: string; // as good as Provider - nodeClientUrl?: string; // very specific to Biconomy - biconomyPaymasterApiKey?: string; - activeValidationModule?: BaseValidationModule; - scanForUpgradedAccountsFromV1?: boolean; - maxIndexForScan?: number; - }; +export type BiconomySmartAccountV2ConfigConstructorProps = BiconomySmartAccountV2Config & BiconomySmartAccountV2ConfigResolvedConstructorProps; export type BuildUserOpOptions = { overrides?: Overrides; diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 38fbeb96a..0675993f8 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -15,16 +15,13 @@ describe("Account Tests", () => { it("should send some native token to a recipient", async () => { const { - chainId, - whale: { signer, publicAddress: sender }, + whale: { viemWallet: signer }, minnow: { publicAddress: recipient }, bundlerUrl, - entryPointAddress, publicClient, } = chainData; const smartWallet = await createSmartWalletClient({ - chainId, signer, bundlerUrl, }); @@ -45,15 +42,12 @@ describe("Account Tests", () => { it("Create a smart account with paymaster with an api key", async () => { const { - chainId, - whale: { signer }, + whale: { viemWallet: signer }, bundlerUrl, - entryPointAddress, biconomyPaymasterApiKey, } = chainData; const smartWallet = await createSmartWalletClient({ - chainId, signer, biconomyPaymasterApiKey, bundlerUrl, @@ -67,15 +61,13 @@ describe("Account Tests", () => { it("Should gaslessly mint an NFT", async () => { const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; const { - chainId, - whale: { signer, publicAddress: recipient }, + whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, biconomyPaymasterApiKey, publicClient, } = chainData; const smartWallet = await createSmartWalletClient({ - chainId, signer, biconomyPaymasterApiKey, bundlerUrl, @@ -108,8 +100,7 @@ describe("Account Tests", () => { it("#getUserOpHash should match entryPoint.getUserOpHash", async () => { const { - chainId, - whale: { signer }, + whale: { viemWallet: signer }, bundlerUrl, entryPointAddress, publicClient, @@ -117,7 +108,6 @@ describe("Account Tests", () => { } = chainData; const smartWallet = await createSmartWalletClient({ - chainId, signer, biconomyPaymasterApiKey, bundlerUrl, @@ -151,15 +141,13 @@ describe("Account Tests", () => { it("should be deployed to counterfactual address", async () => { const { - chainId, - whale: { signer }, + whale: { viemWallet: signer }, bundlerUrl, publicClient, biconomyPaymasterApiKey, } = chainData; const smartWallet = await createSmartWalletClient({ - chainId, signer, biconomyPaymasterApiKey, bundlerUrl, @@ -175,13 +163,11 @@ describe("Account Tests", () => { const ecdsaOwnershipModule = "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e"; const { - chainId, - whale: { signer }, + whale: { viemWallet: signer }, bundlerUrl, } = chainData; const smartWallet = await createSmartWalletClient({ - chainId, signer, bundlerUrl, }); diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 5e8403ce3..54cd86395 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -1,4 +1,4 @@ -import { Paymaster, createSmartWalletClient } from "../"; +import { Paymaster, createSmartWalletClient } from "../src"; import { TestData } from "."; describe("Account Tests", () => { @@ -9,17 +9,43 @@ describe("Account Tests", () => { chainData = testDataPerChain[0]; }); - it("should provide an account address", async () => { + it("should create a smartWalletClient from a walletClient", async () => { const { - entryPointAddress, + whale: { viemWallet: signer }, + bundlerUrl, + } = chainData; + + const smartWallet = await createSmartWalletClient({ + signer, bundlerUrl, + }); + const address = await smartWallet.getAccountAddress(); + expect(address).toBeTruthy(); + }); + + it("should create a smartWalletClient from a signer and chainId", async () => { + const { chainId, - whale: { signer }, + whale: { alchemyWalletClientSigner: signer }, + bundlerUrl, } = chainData; const smartWallet = await createSmartWalletClient({ chainId, - entryPointAddress, + signer, + bundlerUrl, + }); + const address = await smartWallet.getAccountAddress(); + expect(address).toBeTruthy(); + }); + + it("should provide an account address", async () => { + const { + bundlerUrl, + whale: { viemWallet: signer }, + } = chainData; + + const smartWallet = await createSmartWalletClient({ signer, bundlerUrl, }); @@ -31,13 +57,11 @@ describe("Account Tests", () => { const { entryPointAddress, bundlerUrl, - chainId, - whale: { signer }, + whale: { viemWallet: signer }, minnow: { publicAddress: recipient }, } = chainData; const smartWallet = await createSmartWalletClient({ - chainId, entryPointAddress, signer, bundlerUrl, @@ -52,15 +76,11 @@ describe("Account Tests", () => { it("should have an active validation module", async () => { const { - entryPointAddress, bundlerUrl, - chainId, - whale: { signer }, + whale: { viemWallet: signer }, } = chainData; const smartWallet = await createSmartWalletClient({ - chainId, - entryPointAddress, signer, bundlerUrl, }); @@ -71,15 +91,12 @@ describe("Account Tests", () => { it("Sender should be non zero", async () => { const { - chainId, - whale: { signer }, + whale: { viemWallet: signer }, minnow: { publicAddress: recipient }, bundlerUrl, - entryPointAddress, } = chainData; const smartWallet = await createSmartWalletClient({ - chainId, signer, bundlerUrl, }); @@ -90,10 +107,8 @@ describe("Account Tests", () => { it("Create a smart account with paymaster by creating instance", async () => { const { - chainId, - whale: { signer }, + whale: { viemWallet: signer }, bundlerUrl, - entryPointAddress, biconomyPaymasterApiKey, } = chainData; @@ -101,7 +116,6 @@ describe("Account Tests", () => { const paymaster = new Paymaster({ paymasterUrl }); const smartWallet = await createSmartWalletClient({ - chainId, signer, bundlerUrl, paymaster, diff --git a/packages/account/tests/index.d.ts b/packages/account/tests/index.d.ts index 2bb5239ab..6d0e6cd22 100644 --- a/packages/account/tests/index.d.ts +++ b/packages/account/tests/index.d.ts @@ -2,8 +2,8 @@ import { Chain, Hex, PrivateKeyAccount, PublicClient, WalletClient } from "viem" import { WalletClientSigner } from "@alchemy/aa-core"; interface WalletProps { - signer: WalletClientSigner; - walletClient: WalletClient; + alchemyWalletClientSigner: WalletClientSigner; + viemWallet: WalletClient; balance: BigInt; publicAddress: Hex; account: PrivateKeyAccount; diff --git a/packages/bundler/tests/index.d.ts b/packages/bundler/tests/index.d.ts index 2bb5239ab..6d0e6cd22 100644 --- a/packages/bundler/tests/index.d.ts +++ b/packages/bundler/tests/index.d.ts @@ -2,8 +2,8 @@ import { Chain, Hex, PrivateKeyAccount, PublicClient, WalletClient } from "viem" import { WalletClientSigner } from "@alchemy/aa-core"; interface WalletProps { - signer: WalletClientSigner; - walletClient: WalletClient; + alchemyWalletClientSigner: WalletClientSigner; + viemWallet: WalletClient; balance: BigInt; publicAddress: Hex; account: PrivateKeyAccount; diff --git a/packages/paymaster/tests/index.d.ts b/packages/paymaster/tests/index.d.ts index 2bb5239ab..6d0e6cd22 100644 --- a/packages/paymaster/tests/index.d.ts +++ b/packages/paymaster/tests/index.d.ts @@ -2,8 +2,8 @@ import { Chain, Hex, PrivateKeyAccount, PublicClient, WalletClient } from "viem" import { WalletClientSigner } from "@alchemy/aa-core"; interface WalletProps { - signer: WalletClientSigner; - walletClient: WalletClient; + alchemyWalletClientSigner: WalletClientSigner; + viemWallet: WalletClient; balance: BigInt; publicAddress: Hex; account: PrivateKeyAccount; diff --git a/setup-e2e-tests.ts b/setup-e2e-tests.ts index 3a0a0dd43..a954c334a 100644 --- a/setup-e2e-tests.ts +++ b/setup-e2e-tests.ts @@ -28,18 +28,19 @@ beforeAll(async () => { chain: chain.viemChain, transport: http(), }); - const walletOneClient = createWalletClient({ + + const viemWalletClientOne = createWalletClient({ account: walletOne, chain: chain.viemChain, transport: http(chain.viemChain.rpcUrls.public.http[0]), }); - const walletTwoClient = createWalletClient({ + const viemWalletClientTwo = createWalletClient({ account: walletTwo, chain: chain.viemChain, transport: http(chain.viemChain.rpcUrls.public.http[0]), }); - const signerOne = new WalletClientSigner(walletOneClient, "json-rpc"); - const signerTwo = new WalletClientSigner(walletTwoClient, "json-rpc"); + const walletClientSignerOne = new WalletClientSigner(viemWalletClientOne, "viem"); + const walletClientSignerTwo = new WalletClientSigner(viemWalletClientTwo, "viem"); return Promise.all([ Promise.all([ @@ -48,8 +49,8 @@ beforeAll(async () => { publicClient, account: walletOne, publicAddress: walletOne.address, - signer: signerOne, - walletClient: walletOneClient, + viemWallet: viemWalletClientOne, + alchemyWalletClientSigner: walletClientSignerOne, }, publicClient.getBalance({ address: walletOne.address, @@ -61,8 +62,8 @@ beforeAll(async () => { publicClient, account: walletTwo, publicAddress: walletTwo.address, - signer: signerTwo, - walletClient: walletTwoClient, + viemWallet: viemWalletClientTwo, + alchemyWalletClientSigner: walletClientSignerTwo, }, publicClient.getBalance({ address: walletTwo.address, @@ -100,15 +101,15 @@ beforeAll(async () => { biconomyPaymasterApiKey: whaleBalance.biconomyPaymasterApiKey, whale: { balance: whaleBalance.balance, - signer: whaleBalance.signer, - walletClient: whaleBalance.walletClient, + viemWallet: whaleBalance.viemWallet, + alchemyWalletClientSigner: whaleBalance.alchemyWalletClientSigner, publicAddress: whaleBalance.publicAddress, account: whaleBalance.account, }, minnow: { balance: minnowBalance.balance, - signer: minnowBalance.signer, - walletClient: minnowBalance.walletClient, + viemWallet: minnowBalance.viemWallet, + alchemyWalletClientSigner: minnowBalance.alchemyWalletClientSigner, publicAddress: minnowBalance.publicAddress, account: minnowBalance.account, }, diff --git a/setup-unit-tests.ts b/setup-unit-tests.ts index 87b16e0b7..57ed7ac00 100644 --- a/setup-unit-tests.ts +++ b/setup-unit-tests.ts @@ -16,12 +16,12 @@ beforeAll(() => { const chain = TEST_CHAIN; const { chainId, bundlerUrl, viemChain, entryPointAddress } = chain; const accountOne = mnemonicToAccount(MNEMONIC); - const walletClientOne = createWalletClient({ + const viemWalletClientOne = createWalletClient({ account: accountOne, chain: viemChain, transport: http(viemChain.rpcUrls.public.http[0]), }); - const signerOne = new WalletClientSigner(walletClientOne, "json-rpc"); + const walletClientSignerOne = new WalletClientSigner(viemWalletClientOne, "viem"); const publicAddressOne = accountOne.address; const publicClient = createPublicClient({ chain: viemChain, @@ -29,24 +29,24 @@ beforeAll(() => { }); const accountTwo = privateKeyToAccount(generatePrivateKey()); - const walletClientTwo = createWalletClient({ + const viemWalletClientTwo = createWalletClient({ account: accountTwo, chain: viemChain, transport: http(viemChain.rpcUrls.public.http[0]), }); - const signerTwo = new WalletClientSigner(walletClientTwo, "json-rpc"); + const walletClientSignerTwo = new WalletClientSigner(viemWalletClientTwo, "viem"); const publicAddressTwo = accountTwo.address; const whale = { - signer: signerOne, - walletClient: walletClientOne, + viemWallet: viemWalletClientOne, + alchemyWalletClientSigner: walletClientSignerOne, balance: 0, publicAddress: publicAddressOne, }; const minnow = { - signer: signerTwo, - walletClient: walletClientTwo, + viemWallet: viemWalletClientTwo, + alchemyWalletClientSigner: walletClientSignerTwo, balance: 0, publicAddress: publicAddressTwo, }; From 9711706d39ca202254ca8b0aa7ff28084e0eb1f9 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 9 Jan 2024 18:13:31 +0200 Subject: [PATCH 1008/1247] Added e2e test for multiChain module --- .../multiChainValidationModule.e2e.spec.ts | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts diff --git a/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts b/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts new file mode 100644 index 000000000..2348f03ad --- /dev/null +++ b/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts @@ -0,0 +1,94 @@ +import { BiconomyPaymaster, PaymasterMode, SponsorUserOperationDto } from "@biconomy/paymaster"; +import { TestData } from ".."; +import { BiconomySmartAccountV2, createSmartWalletClient } from "../../src/index"; +import { Hex, encodeFunctionData, parseAbi } from "viem"; +import { UserOperationStruct } from "@alchemy/aa-core"; +import { checkBalance, entryPointABI } from "../utils"; +import { DEFAULT_MULTICHAIN_MODULE, MultiChainValidationModule } from "@biconomy/modules"; + +describe("Account with MultiChainValidation Module Tests", () => { + let chainData: TestData; + + beforeEach(() => { + // @ts-ignore + chainData = testDataPerChain[0]; + }); + + it("Should create a multi chain user op", async () => { + const { + whale: { signer, publicAddress: recipient }, + biconomyPaymasterApiKey, + bundlerUrl, + } = chainData; + + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + + const multiChainModule: MultiChainValidationModule = await MultiChainValidationModule.create({ + signer: signer, + moduleAddress: DEFAULT_MULTICHAIN_MODULE, + }); + + const polygonAccount = await createSmartWalletClient({ + chainId: 80001, + signer, + bundlerUrl, + defaultValidationModule: multiChainModule, + activeValidationModule: multiChainModule, + biconomyPaymasterApiKey + }); + + const goerliAccount = await createSmartWalletClient({ + chainId: 5, + signer, + bundlerUrl: "https://bundler.biconomy.io/api/v2/5/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + defaultValidationModule: multiChainModule, + activeValidationModule: multiChainModule, + biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_GOERLI!, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address owner) view returns (uint balance)"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + value: 0, + }; + + let partialUserOp1 = await goerliAccount.buildUserOp([transaction], + { + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + } + } + ); + + let partialUserOp2 = await polygonAccount.buildUserOp([transaction], + { + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + } + } + ); + + const signedUserOps = await multiChainModule.signUserOps([{userOp: partialUserOp1, chainId: 5}, {userOp: partialUserOp2, chainId: 80001}]); + + const userOpResponse1 = await goerliAccount.sendSignedUserOp(signedUserOps[0]); + const userOpResponse2 = await goerliAccount.sendSignedUserOp(signedUserOps[1]); + + // const returnedOp1 = await goerliAccount.signUserOp(partialUserOp1); + // const returnedOp2 = await polygonAccount.signUserOp(partialUserOp2); + + // const userOpResponse1 = await goerliAccount.sendSignedUserOp(returnedOp1 as any); + // const transactionDetails1 = await userOpResponse1.wait(); + // console.log(transactionDetails1); + // const userOpResponse2 = await polygonAccount.sendSignedUserOp(returnedOp2 as any); + // const transactionDetails2 = await userOpResponse2.wait(); + // console.log(transactionDetails2); + + + }, 30000); +}); From 225042feed9139474808aa5cb1930f805f2c6245 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 9 Jan 2024 18:58:02 +0200 Subject: [PATCH 1009/1247] Updated the "addSigner" method --- .../modules/src/interfaces/ISessionStorage.ts | 3 +- .../session-storage/SessionLocalStorage.ts | 47 ++++++++++++------- packages/modules/src/utils/Types.ts | 8 +++- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/packages/modules/src/interfaces/ISessionStorage.ts b/packages/modules/src/interfaces/ISessionStorage.ts index 25fce9010..4be01635d 100644 --- a/packages/modules/src/interfaces/ISessionStorage.ts +++ b/packages/modules/src/interfaces/ISessionStorage.ts @@ -1,5 +1,6 @@ import { Hex } from "viem"; import { WalletClientSigner } from "@alchemy/aa-core"; +import { SignerData } from "utils/Types"; export type SessionStatus = "PENDING" | "ACTIVE" | "INACTIVE" | "EXPIRED"; @@ -50,7 +51,7 @@ export interface ISessionStorage { * If no signer object is passed, it'll create a random signer and add it to the session storage * @param signer Optional signer to be added to the session storage */ - addSigner(_signer?: WalletClientSigner): Promise; + addSigner(_signer?: SignerData): Promise; /** * Fetch a signer from the session storage diff --git a/packages/modules/src/session-storage/SessionLocalStorage.ts b/packages/modules/src/session-storage/SessionLocalStorage.ts index 6f8102c55..d85625d8d 100644 --- a/packages/modules/src/session-storage/SessionLocalStorage.ts +++ b/packages/modules/src/session-storage/SessionLocalStorage.ts @@ -1,8 +1,9 @@ -import { Hex, createWalletClient, http } from "viem"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { Hex, createWalletClient, http, toHex } from "viem"; +import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage"; import { mainnet } from "viem/chains"; -import { privateKeyToAccount } from "viem/accounts"; +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; +import { SignerData } from "utils/Types"; export class SessionLocalStorage implements ISessionStorage { private smartAccountAddress: string; @@ -102,21 +103,31 @@ export class SessionLocalStorage implements ISessionStorage { localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } - async addSigner(signer: WalletClientSigner): Promise { - // const signers = this.getSignerStore(); - // if (!signer) { - // const pkey = generatePrivateKey() - // signer = { - // privateKey: pkey, - // publicKey: pkey.publicKey, - // }; - // } - // signers[this.toLowercaseAddress(signer?.inner.)] = { - // privateKey: signer.privateKey, - // publicKey: signer.publicKey, - // }; - // localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)); - return signer; + async addSigner(signerData: SignerData): Promise { + const signers = this.getSignerStore(); + let signer: SignerData; + if (!signerData) { + const pkey = generatePrivateKey() + signer = { + pvKey: pkey, + pbKey: privateKeyToAccount(pkey).publicKey + }; + } else { + signer = signerData; + } + const accountSigner = privateKeyToAccount(toHex(signer.pvKey)); + const client = createWalletClient({ + account: accountSigner, + chain: signerData.chainId, + transport: http(), + }); + const walletClientSigner: SmartAccountSigner = new WalletClientSigner( + client, + "json-rpc" // signerType + ); + signers[this.toLowercaseAddress(accountSigner.address)] = signerData + localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)); + return walletClientSigner; } async getSignerByKey(sessionPublicKey: string): Promise { diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 1546aa862..7b36f20c5 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,4 +1,4 @@ -import { Hex } from "viem"; +import { Chain, Hex } from "viem"; import { UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; import { ISessionStorage } from "../interfaces/ISessionStorage"; @@ -67,6 +67,12 @@ export interface SendUserOpParams extends ModuleInfo { export type SimulationType = "validation" | "validation_and_execution"; +export type SignerData = { + pbKey: string; + pvKey: string; + chainId?: Chain; +} + export type CreateSessionDataResponse = { data: string; sessionIDInfo: Array; From 20e32ce78004b5ef921bca0cacbab9e6e37a97b2 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 9 Jan 2024 18:59:15 +0200 Subject: [PATCH 1010/1247] Fixed lint --- .../modules/src/session-storage/SessionLocalStorage.ts | 8 ++++---- packages/modules/src/utils/Types.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/modules/src/session-storage/SessionLocalStorage.ts b/packages/modules/src/session-storage/SessionLocalStorage.ts index d85625d8d..1731cb39c 100644 --- a/packages/modules/src/session-storage/SessionLocalStorage.ts +++ b/packages/modules/src/session-storage/SessionLocalStorage.ts @@ -107,10 +107,10 @@ export class SessionLocalStorage implements ISessionStorage { const signers = this.getSignerStore(); let signer: SignerData; if (!signerData) { - const pkey = generatePrivateKey() + const pkey = generatePrivateKey(); signer = { pvKey: pkey, - pbKey: privateKeyToAccount(pkey).publicKey + pbKey: privateKeyToAccount(pkey).publicKey, }; } else { signer = signerData; @@ -123,9 +123,9 @@ export class SessionLocalStorage implements ISessionStorage { }); const walletClientSigner: SmartAccountSigner = new WalletClientSigner( client, - "json-rpc" // signerType + "json-rpc", // signerType ); - signers[this.toLowercaseAddress(accountSigner.address)] = signerData + signers[this.toLowercaseAddress(accountSigner.address)] = signerData; localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)); return walletClientSigner; } diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 7b36f20c5..75f58944b 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -71,7 +71,7 @@ export type SignerData = { pbKey: string; pvKey: string; chainId?: Chain; -} +}; export type CreateSessionDataResponse = { data: string; From be99ac6adec771deac7af734dfa21d69e851bbcf Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Tue, 9 Jan 2024 17:00:08 +0000 Subject: [PATCH 1011/1247] Resolved DEVX-402 Added esbuild --- packages/account/.esbuild.js | 58 ++++++++++++++++++++++++++ packages/account/package.json | 13 +++++- packages/account/tests/account.spec.ts | 2 +- packages/bundler/.esbuild.js | 58 ++++++++++++++++++++++++++ packages/bundler/package.json | 7 ++++ packages/bundler/tests/utils.ts | 45 ++++++++++++++++++++ packages/modules/.esbuild.js | 58 ++++++++++++++++++++++++++ packages/modules/package.json | 12 +++++- packages/particle-auth/.esbuild.js | 58 ++++++++++++++++++++++++++ packages/particle-auth/package.json | 12 +++++- packages/paymaster/.esbuild.js | 58 ++++++++++++++++++++++++++ packages/paymaster/package.json | 12 +++++- packages/transak/.esbuild.js | 58 ++++++++++++++++++++++++++ packages/transak/package.json | 13 +++++- 14 files changed, 457 insertions(+), 7 deletions(-) create mode 100644 packages/account/.esbuild.js create mode 100644 packages/bundler/.esbuild.js create mode 100644 packages/bundler/tests/utils.ts create mode 100644 packages/modules/.esbuild.js create mode 100644 packages/particle-auth/.esbuild.js create mode 100644 packages/paymaster/.esbuild.js create mode 100644 packages/transak/.esbuild.js diff --git a/packages/account/.esbuild.js b/packages/account/.esbuild.js new file mode 100644 index 000000000..6be406cce --- /dev/null +++ b/packages/account/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require('./package.json') +const { Generator } = require('npm-dts'); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), +} + +const buildForESM = async () => + await esbuild.build({ + ...COMMON_SETTINGS, + outfile: "dist/esm/index.js", + platform: "neutral", + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ] + }); + +const buildForCJS = async () => + await esbuild.build({ + ...COMMON_SETTINGS, + format: 'cjs', + outfile: "dist/src/index.js", + sourcemap: true, + platform: "node", + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ], + }); + +const buildForTYP = async () => new Generator({ + entry: 'src/index.ts', + output: 'dist/src/index.d.ts', +}).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + await buildForCJS(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/account/package.json b/packages/account/package.json index c49d57108..d1994e484 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -3,6 +3,8 @@ "version": "3.1.2", "description": "This package provides apis for ERC-4337 based smart account implementations", "main": "./dist/src/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/src/index.d.ts", "typings": "./dist/src/index.d.ts", "keywords": [ "Ethereum", @@ -15,7 +17,11 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", + "build:cjs": "node .esbuild.js CJS", + "build:esm": "node .esbuild.js ESM", + "build:typ": "tsc -noEmit && node .esbuild.js TYP", + "build:tsc": "rimraf dist && tsc", "test:concurrently": "concurrently -k --success first 'yarn start:ganache' 'yarn test'", "test:cov": "jest --coverage", "test": "jest tests/**/*.spec.ts --runInBand", @@ -34,7 +40,10 @@ "access": "public" }, "devDependencies": { - "nock": "^13.2.9" + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "nock": "^13.2.9", + "npm-dts": "^1.3.12" }, "dependencies": { "@alchemy/aa-core": "^1.2.2", diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 5e8403ce3..56c6a2187 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -1,4 +1,4 @@ -import { Paymaster, createSmartWalletClient } from "../"; +import { Paymaster, createSmartWalletClient } from "../src"; import { TestData } from "."; describe("Account Tests", () => { diff --git a/packages/bundler/.esbuild.js b/packages/bundler/.esbuild.js new file mode 100644 index 000000000..6be406cce --- /dev/null +++ b/packages/bundler/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require('./package.json') +const { Generator } = require('npm-dts'); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), +} + +const buildForESM = async () => + await esbuild.build({ + ...COMMON_SETTINGS, + outfile: "dist/esm/index.js", + platform: "neutral", + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ] + }); + +const buildForCJS = async () => + await esbuild.build({ + ...COMMON_SETTINGS, + format: 'cjs', + outfile: "dist/src/index.js", + sourcemap: true, + platform: "node", + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ], + }); + +const buildForTYP = async () => new Generator({ + entry: 'src/index.ts', + output: 'dist/src/index.d.ts', +}).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + await buildForCJS(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 99fa88413..3c0828cb3 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -3,6 +3,8 @@ "version": "3.1.2", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", "main": "./dist/src/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/src/index.d.ts", "typings": "./dist/src/index.d.ts", "keywords": [ "Ethereum", @@ -39,5 +41,10 @@ "dependencies": { "@alchemy/aa-core": "^1.2.2", "viem": "^1.20.3" + }, + "devDependencies": { + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/bundler/tests/utils.ts b/packages/bundler/tests/utils.ts new file mode 100644 index 000000000..c010435f6 --- /dev/null +++ b/packages/bundler/tests/utils.ts @@ -0,0 +1,45 @@ +import { Hex, PublicClient, parseAbi } from "viem"; + +export const checkBalance = (publicClient: PublicClient, address: Hex, tokenAddress?: Hex) => { + if (!tokenAddress) { + return publicClient.getBalance({ address }); + } else { + return publicClient.readContract({ + address: tokenAddress, + abi: parseAbi(["function balanceOf(address owner) view returns (uint balance)"]), + functionName: "balanceOf", + // @ts-ignore + args: [address], + }); + } +}; + +// TODO(Joe): Make human readable +export const entryPointABI = [ + { + inputs: [ + { + components: [ + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, + { internalType: "uint256", name: "callGasLimit", type: "uint256" }, + { internalType: "uint256", name: "verificationGasLimit", type: "uint256" }, + { internalType: "uint256", name: "preVerificationGas", type: "uint256" }, + { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, + { internalType: "uint256", name: "maxPriorityFeePerGas", type: "uint256" }, + { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, + { internalType: "bytes", name: "signature", type: "bytes" }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "getUserOpHash", + outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], + stateMutability: "view", + type: "function", + }, +]; diff --git a/packages/modules/.esbuild.js b/packages/modules/.esbuild.js new file mode 100644 index 000000000..6be406cce --- /dev/null +++ b/packages/modules/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require('./package.json') +const { Generator } = require('npm-dts'); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), +} + +const buildForESM = async () => + await esbuild.build({ + ...COMMON_SETTINGS, + outfile: "dist/esm/index.js", + platform: "neutral", + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ] + }); + +const buildForCJS = async () => + await esbuild.build({ + ...COMMON_SETTINGS, + format: 'cjs', + outfile: "dist/src/index.js", + sourcemap: true, + platform: "node", + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ], + }); + +const buildForTYP = async () => new Generator({ + entry: 'src/index.ts', + output: 'dist/src/index.d.ts', +}).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + await buildForCJS(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/modules/package.json b/packages/modules/package.json index 95a03f2ec..2b321e60d 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -3,6 +3,8 @@ "version": "3.1.2", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", "main": "./dist/src/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/src/index.d.ts", "typings": "./dist/src/index.d.ts", "keywords": [ "Smart Account", @@ -15,7 +17,10 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", + "build:cjs": "node .esbuild.js CJS", + "build:esm": "node .esbuild.js ESM", + "build:typ": "tsc -noEmit && node .esbuild.js TYP", "test:file": "TS_NODE_PROJECT=../../tsconfig.json mocha -r ts-node/register --timeout 30000", "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:cov": "jest --coverage", @@ -37,5 +42,10 @@ "@alchemy/aa-core": "^1.2.2", "merkletreejs": "^0.3.9", "viem": "^1.20.3" + }, + "devDependencies": { + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/particle-auth/.esbuild.js b/packages/particle-auth/.esbuild.js new file mode 100644 index 000000000..6be406cce --- /dev/null +++ b/packages/particle-auth/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require('./package.json') +const { Generator } = require('npm-dts'); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), +} + +const buildForESM = async () => + await esbuild.build({ + ...COMMON_SETTINGS, + outfile: "dist/esm/index.js", + platform: "neutral", + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ] + }); + +const buildForCJS = async () => + await esbuild.build({ + ...COMMON_SETTINGS, + format: 'cjs', + outfile: "dist/src/index.js", + sourcemap: true, + platform: "node", + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ], + }); + +const buildForTYP = async () => new Generator({ + entry: 'src/index.ts', + output: 'dist/src/index.d.ts', +}).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + await buildForCJS(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 22fee52d4..511e67f64 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -3,6 +3,8 @@ "version": "3.1.2", "description": "Particle auth for Biconomy SDK", "main": "./dist/src/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/src/index.d.ts", "typings": "./dist/src/index.d.ts", "keywords": [ "legos", @@ -25,7 +27,10 @@ }, "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", + "build:cjs": "node .esbuild.js CJS", + "build:esm": "node .esbuild.js ESM", + "build:typ": "tsc -noEmit && node .esbuild.js TYP", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, @@ -39,5 +44,10 @@ "@particle-network/auth": "^1.2.1", "@particle-network/biconomy": "^1.0.0", "@particle-network/provider": "^1.2.0" + }, + "devDependencies": { + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/paymaster/.esbuild.js b/packages/paymaster/.esbuild.js new file mode 100644 index 000000000..6be406cce --- /dev/null +++ b/packages/paymaster/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require('./package.json') +const { Generator } = require('npm-dts'); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), +} + +const buildForESM = async () => + await esbuild.build({ + ...COMMON_SETTINGS, + outfile: "dist/esm/index.js", + platform: "neutral", + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ] + }); + +const buildForCJS = async () => + await esbuild.build({ + ...COMMON_SETTINGS, + format: 'cjs', + outfile: "dist/src/index.js", + sourcemap: true, + platform: "node", + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ], + }); + +const buildForTYP = async () => new Generator({ + entry: 'src/index.ts', + output: 'dist/src/index.d.ts', +}).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + await buildForCJS(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index ad12cd7b3..6d2d15236 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -3,6 +3,8 @@ "version": "3.1.2", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", "main": "./dist/src/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/src/index.d.ts", "typings": "./dist/src/index.d.ts", "keywords": [ "Ethereum", @@ -15,7 +17,10 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", + "build:cjs": "node .esbuild.js CJS", + "build:esm": "node .esbuild.js ESM", + "build:typ": "tsc -noEmit && node .esbuild.js TYP", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json", "test": "jest tests/**/*.spec.ts --runInBand" @@ -36,5 +41,10 @@ "dependencies": { "@alchemy/aa-core": "^1.2.2", "viem": "^1.20.3" + }, + "devDependencies": { + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/transak/.esbuild.js b/packages/transak/.esbuild.js new file mode 100644 index 000000000..6be406cce --- /dev/null +++ b/packages/transak/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require('./package.json') +const { Generator } = require('npm-dts'); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), +} + +const buildForESM = async () => + await esbuild.build({ + ...COMMON_SETTINGS, + outfile: "dist/esm/index.js", + platform: "neutral", + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ] + }); + +const buildForCJS = async () => + await esbuild.build({ + ...COMMON_SETTINGS, + format: 'cjs', + outfile: "dist/src/index.js", + sourcemap: true, + platform: "node", + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ], + }); + +const buildForTYP = async () => new Generator({ + entry: 'src/index.ts', + output: 'dist/src/index.d.ts', +}).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + await buildForCJS(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/transak/package.json b/packages/transak/package.json index ebf9accdf..3e2d5b900 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -3,6 +3,8 @@ "version": "3.1.2", "description": "transak for biconomy sdk", "main": "./dist/src/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/src/index.d.ts", "typings": "./dist/src/index.d.ts", "keywords": [ "legos", @@ -24,7 +26,11 @@ }, "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", + "build:cjs": "node .esbuild.js CJS", + "build:esm": "node .esbuild.js ESM", + "build:typ": "tsc -noEmit && node .esbuild.js TYP", + "build:tsc": "rimraf dist && tsc", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, @@ -36,5 +42,10 @@ }, "dependencies": { "@transak/transak-sdk": "^1.2.3" + }, + "devDependencies": { + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } From e17eae984d6411a85bc98bf150c73bdd7d8ff573 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Tue, 9 Jan 2024 17:04:11 +0000 Subject: [PATCH 1012/1247] Remove unused file --- packages/bundler/tests/utils.ts | 45 --------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 packages/bundler/tests/utils.ts diff --git a/packages/bundler/tests/utils.ts b/packages/bundler/tests/utils.ts deleted file mode 100644 index c010435f6..000000000 --- a/packages/bundler/tests/utils.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Hex, PublicClient, parseAbi } from "viem"; - -export const checkBalance = (publicClient: PublicClient, address: Hex, tokenAddress?: Hex) => { - if (!tokenAddress) { - return publicClient.getBalance({ address }); - } else { - return publicClient.readContract({ - address: tokenAddress, - abi: parseAbi(["function balanceOf(address owner) view returns (uint balance)"]), - functionName: "balanceOf", - // @ts-ignore - args: [address], - }); - } -}; - -// TODO(Joe): Make human readable -export const entryPointABI = [ - { - inputs: [ - { - components: [ - { internalType: "address", name: "sender", type: "address" }, - { internalType: "uint256", name: "nonce", type: "uint256" }, - { internalType: "bytes", name: "initCode", type: "bytes" }, - { internalType: "bytes", name: "callData", type: "bytes" }, - { internalType: "uint256", name: "callGasLimit", type: "uint256" }, - { internalType: "uint256", name: "verificationGasLimit", type: "uint256" }, - { internalType: "uint256", name: "preVerificationGas", type: "uint256" }, - { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, - { internalType: "uint256", name: "maxPriorityFeePerGas", type: "uint256" }, - { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, - { internalType: "bytes", name: "signature", type: "bytes" }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - ], - name: "getUserOpHash", - outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], - stateMutability: "view", - type: "function", - }, -]; From af6675f3a8bedc98934a5187360874b2fb33f91d Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 10 Jan 2024 11:04:26 +0000 Subject: [PATCH 1013/1247] Added negative tests --- .../account/src/BiconomySmartAccountV2.ts | 3 +- packages/account/tests/account.spec.ts | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index f84cefaac..6c488e6ef 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -159,7 +159,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Signer needs to be initialised here before defaultValidationModule is set if (biconomySmartAccountConfig.signer) { const signer = biconomySmartAccountConfig.signer; - const isViemWalletClient = !(signer instanceof WalletClientSigner); + // AA's WalletClientSigner has a signerType, viems' walletClient does not: + const isViemWalletClient = !(signer as WalletClientSigner)?.signerType; if (isViemWalletClient) { const walletClient = signer as WalletClient; if (!walletClient.account) { diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 54cd86395..012bef218 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -1,4 +1,7 @@ import { Paymaster, createSmartWalletClient } from "../src"; +import { createWalletClient, http } from "viem"; +import { localhost } from "viem/chains"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; import { TestData } from "."; describe("Account Tests", () => { @@ -123,4 +126,38 @@ describe("Account Tests", () => { expect(smartWallet.paymaster).not.toBeNull(); expect(smartWallet.paymaster).not.toBeUndefined(); }, 10000); + + it("should fail to create a smartWalletClient from a walletClient without a chainId", async () => { + const { bundlerUrl } = chainData; + + const account = privateKeyToAccount(generatePrivateKey()); + const viemWalletClientNoChainId = createWalletClient({ + account, + transport: http(localhost.rpcUrls.public.http[0]), + }); + + expect( + async () => + await createSmartWalletClient({ + signer: viemWalletClientNoChainId, + bundlerUrl, + }), + ).rejects.toThrow("Cannot consume a viem wallet without a chainId"); + }); + + it("should fail to create a smartWalletClient from a walletClient without an account", async () => { + const { bundlerUrl } = chainData; + + const viemWalletNoAccount = createWalletClient({ + transport: http(localhost.rpcUrls.public.http[0]), + }); + + expect( + async () => + await createSmartWalletClient({ + signer: viemWalletNoAccount, + bundlerUrl, + }), + ).rejects.toThrow("Cannot consume a viem wallet without an account"); + }); }); From dcf96fc7219ad13e9d41539b5fbd859eff6d67e0 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 12 Jan 2024 15:01:05 +0200 Subject: [PATCH 1014/1247] Added multichainValidation tests --- packages/account/tests/account.e2e.spec.ts | 99 ++++++++++++++--- .../multiChainValidationModule.e2e.spec.ts | 104 ++++++++++-------- 2 files changed, 144 insertions(+), 59 deletions(-) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 38fbeb96a..b4b290608 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,9 +1,11 @@ -import { PaymasterMode } from "@biconomy/paymaster"; +import { BiconomyPaymaster, PaymasterMode } from "@biconomy/paymaster"; import { TestData } from "."; -import { createSmartWalletClient } from "../src/index"; -import { Hex, encodeFunctionData, parseAbi } from "viem"; -import { UserOperationStruct } from "@alchemy/aa-core"; +import { BiconomyAccountProvider, BiconomySmartAccountV2, createSmartWalletClient } from "../src/index"; +import { Hex, createWalletClient, encodeFunctionData, http, parseAbi } from "viem"; +import { UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "./utils"; +import { privateKeyToAccount } from "viem/accounts"; +import { base, baseGoerli } from "viem/chains"; describe("Account Tests", () => { let chainData: TestData; @@ -41,7 +43,7 @@ describe("Account Tests", () => { expect(result?.receipt?.transactionHash).toBeTruthy(); expect(newBalance - balance).toBe(1n); - }, 30000); + }, 50000); it("Create a smart account with paymaster with an api key", async () => { const { @@ -64,7 +66,7 @@ describe("Account Tests", () => { expect(paymaster).not.toBeUndefined(); }); - it("Should gaslessly mint an NFT", async () => { + it("Should gaslessly mint an NFT on Mumbai", async () => { const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; const { chainId, @@ -74,15 +76,17 @@ describe("Account Tests", () => { publicClient, } = chainData; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await BiconomySmartAccountV2.create({ chainId, signer, - biconomyPaymasterApiKey, bundlerUrl, + biconomyPaymasterApiKey }); + const paymaster: BiconomyPaymaster = smartWallet.paymaster as BiconomyPaymaster; + const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address owner) view returns (uint balance)"]), + abi: parseAbi(["function safeMint(address to) public"]), functionName: "safeMint", args: [recipient], }); @@ -92,18 +96,81 @@ describe("Account Tests", () => { data: encodedCall, value: 0, }; + const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const { wait } = await smartWallet.sendTransaction(transaction, { - paymasterServiceData: { - mode: PaymasterMode.SPONSORED, - }, + const partialUserOp = await smartWallet.buildUserOp([transaction]); + + const paymasterData = await paymaster.getPaymasterAndData(partialUserOp, { + mode: PaymasterMode.SPONSORED, }); - const result = await wait(); + partialUserOp.paymasterAndData = paymasterData.paymasterAndData; + partialUserOp.callGasLimit = paymasterData.callGasLimit; + partialUserOp.verificationGasLimit = paymasterData.verificationGasLimit; + partialUserOp.preVerificationGas = paymasterData.preVerificationGas; + + const result = smartWallet.sendUserOp(partialUserOp) + console.log(result); + const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - expect(newBalance - balance).toBe(1n); - expect(result?.receipt?.transactionHash).toBeTruthy(); + expect(newBalance).toEqual(balance); + }, 60000); + + it("Should gaslessly mint an NFT on Base Goerli", async () => { + + const { + whale: { publicAddress: recipient }, + } = chainData; + + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const baseWallet = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_ONE}`); + + const baseClient = createWalletClient({ + account: baseWallet, + chain: baseGoerli, + transport: http(baseGoerli.rpcUrls.public.http[0]), + }); + + const baseSigner = new WalletClientSigner(baseClient, "json-rpc"); + + const baseAccount = await createSmartWalletClient({ + chainId: 84531, + signer: baseSigner, + bundlerUrl: "https://bundler.biconomy.io/api/v2/84531/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", + biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_BASE + }); + + expect(process.env.E2E_BICO_PAYMASTER_KEY_BASE).toBeTruthy(); + + const paymaster: BiconomyPaymaster = baseAccount.paymaster as BiconomyPaymaster; + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + value: 0, + }; + + const partialUserOp = await baseAccount.buildUserOp([transaction]); + + const paymasterData = await paymaster.getPaymasterAndData(partialUserOp, { + mode: PaymasterMode.SPONSORED, + }); + + partialUserOp.paymasterAndData = paymasterData.paymasterAndData; + partialUserOp.callGasLimit = paymasterData.callGasLimit; + partialUserOp.verificationGasLimit = paymasterData.verificationGasLimit; + partialUserOp.preVerificationGas = paymasterData.preVerificationGas; + + baseAccount.sendUserOp(partialUserOp); + + expect(partialUserOp).toBeTruthy(); }, 60000); it("#getUserOpHash should match entryPoint.getUserOpHash", async () => { diff --git a/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts b/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts index 2348f03ad..dc809ce21 100644 --- a/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts +++ b/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts @@ -1,10 +1,12 @@ import { BiconomyPaymaster, PaymasterMode, SponsorUserOperationDto } from "@biconomy/paymaster"; import { TestData } from ".."; import { BiconomySmartAccountV2, createSmartWalletClient } from "../../src/index"; -import { Hex, encodeFunctionData, parseAbi } from "viem"; -import { UserOperationStruct } from "@alchemy/aa-core"; +import { Hex, createWalletClient, encodeFunctionData, http, parseAbi } from "viem"; +import { UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "../utils"; import { DEFAULT_MULTICHAIN_MODULE, MultiChainValidationModule } from "@biconomy/modules"; +import { privateKeyToAccount } from "viem/accounts"; +import { base, baseGoerli } from "viem/chains"; describe("Account with MultiChainValidation Module Tests", () => { let chainData: TestData; @@ -14,7 +16,7 @@ describe("Account with MultiChainValidation Module Tests", () => { chainData = testDataPerChain[0]; }); - it("Should create a multi chain user op", async () => { + it("Should mint an NFT gasless on Base Goerli and Polygon Mumbai", async () => { const { whale: { signer, publicAddress: recipient }, biconomyPaymasterApiKey, @@ -22,8 +24,8 @@ describe("Account with MultiChainValidation Module Tests", () => { } = chainData; const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; - - const multiChainModule: MultiChainValidationModule = await MultiChainValidationModule.create({ + + const multiChainModule = await MultiChainValidationModule.create({ signer: signer, moduleAddress: DEFAULT_MULTICHAIN_MODULE, }); @@ -37,15 +39,27 @@ describe("Account with MultiChainValidation Module Tests", () => { biconomyPaymasterApiKey }); - const goerliAccount = await createSmartWalletClient({ - chainId: 5, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/5/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + const polygonPaymaster: BiconomyPaymaster = polygonAccount.paymaster as BiconomyPaymaster; + + const baseWallet = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_ONE}`); + const baseClient = createWalletClient({ + account: baseWallet, + chain: baseGoerli, + transport: http(baseGoerli.rpcUrls.public.http[0]), + }); + const baseSigner = new WalletClientSigner(baseClient, "json-rpc"); + + const baseAccount = await createSmartWalletClient({ + chainId: 84531, + signer: baseSigner, + bundlerUrl: "https://bundler.biconomy.io/api/v2/84531/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", defaultValidationModule: multiChainModule, activeValidationModule: multiChainModule, - biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_GOERLI!, + biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_BASE }); + const basePaymaster: BiconomyPaymaster = baseAccount.paymaster as BiconomyPaymaster; + const encodedCall = encodeFunctionData({ abi: parseAbi(["function safeMint(address owner) view returns (uint balance)"]), functionName: "safeMint", @@ -53,42 +67,46 @@ describe("Account with MultiChainValidation Module Tests", () => { }); const transaction = { - to: nftAddress, // NFT address + to: nftAddress, data: encodedCall, value: 0, }; - let partialUserOp1 = await goerliAccount.buildUserOp([transaction], - { - paymasterServiceData: { - mode: PaymasterMode.SPONSORED, - } - } - ); - - let partialUserOp2 = await polygonAccount.buildUserOp([transaction], - { - paymasterServiceData: { - mode: PaymasterMode.SPONSORED, - } - } - ); - - const signedUserOps = await multiChainModule.signUserOps([{userOp: partialUserOp1, chainId: 5}, {userOp: partialUserOp2, chainId: 80001}]); - - const userOpResponse1 = await goerliAccount.sendSignedUserOp(signedUserOps[0]); - const userOpResponse2 = await goerliAccount.sendSignedUserOp(signedUserOps[1]); - - // const returnedOp1 = await goerliAccount.signUserOp(partialUserOp1); - // const returnedOp2 = await polygonAccount.signUserOp(partialUserOp2); - - // const userOpResponse1 = await goerliAccount.sendSignedUserOp(returnedOp1 as any); - // const transactionDetails1 = await userOpResponse1.wait(); - // console.log(transactionDetails1); - // const userOpResponse2 = await polygonAccount.sendSignedUserOp(returnedOp2 as any); - // const transactionDetails2 = await userOpResponse2.wait(); - // console.log(transactionDetails2); - + let partialUserOp1 = await baseAccount.buildUserOp([transaction]); + let partialUserOp2 = await polygonAccount.buildUserOp([transaction]); + + // Setup paymaster and data for base account + const basePaymasterData = await basePaymaster.getPaymasterAndData(partialUserOp1, { + mode: PaymasterMode.SPONSORED, + }); + + partialUserOp1.paymasterAndData = basePaymasterData.paymasterAndData; + partialUserOp1.callGasLimit = basePaymasterData.callGasLimit; + partialUserOp1.verificationGasLimit = basePaymasterData.verificationGasLimit; + partialUserOp1.preVerificationGas = basePaymasterData.preVerificationGas; + + // Setup paymaster and data for polygon account + const polygonPaymasterData = await polygonPaymaster.getPaymasterAndData(partialUserOp2, { + mode: PaymasterMode.SPONSORED, + }); + + partialUserOp2.paymasterAndData = polygonPaymasterData.paymasterAndData; + partialUserOp2.callGasLimit = polygonPaymasterData.callGasLimit; + partialUserOp2.verificationGasLimit = polygonPaymasterData.verificationGasLimit; + partialUserOp2.preVerificationGas = polygonPaymasterData.preVerificationGas; + + // Sign the user ops using multiChainModule + const returnedOps = await multiChainModule.signUserOps([{userOp: partialUserOp1, chainId: 84531}, {userOp: partialUserOp2, chainId: 80001}]); + + // Send the signed user ops on both chains + const userOpResponse1 = await baseAccount.sendSignedUserOp(returnedOps[0] as any) + const userOpResponse2 = await polygonAccount.sendSignedUserOp(returnedOps[1] as any) + + console.log(userOpResponse1.userOpHash, 'BASE USER OP HASH'); + console.log(userOpResponse2.userOpHash, 'POLYGON USER OP HASH'); + + expect(userOpResponse1.userOpHash).toBeTruthy(); + expect(userOpResponse2.userOpHash).toBeTruthy(); }, 30000); -}); +}); \ No newline at end of file From f8222b6007b04d395378e13f3c0aa4b6dd01acbc Mon Sep 17 00:00:00 2001 From: GabiDev Date: Sun, 14 Jan 2024 16:02:31 +0200 Subject: [PATCH 1015/1247] Fix import --- packages/account/tests/account.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 5e8403ce3..56c6a2187 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -1,4 +1,4 @@ -import { Paymaster, createSmartWalletClient } from "../"; +import { Paymaster, createSmartWalletClient } from "../src"; import { TestData } from "."; describe("Account Tests", () => { From ecc86e2c7146046a981c3b6fd4bb29e4828b278b Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Mon, 15 Jan 2024 14:55:09 +0000 Subject: [PATCH 1016/1247] Multichain testing support --- .env.example | 3 +- jest.config.e2e.ts | 2 +- jest.config.ts | 2 +- packages/account/tests/account.e2e.spec.ts | 28 +++++++----- packages/account/tests/account.spec.ts | 26 +++++------ packages/bundler/tests/bundler.e2e.spec.ts | 19 +++++--- packages/bundler/tests/bundler.spec.ts | 12 +++--- packages/bundler/tests/index.d.ts | 21 --------- packages/paymaster/tests/index.d.ts | 21 --------- .../paymaster/tests/paymaster.e2e.spec.ts | 19 +++++--- packages/paymaster/tests/paymaster.spec.ts | 12 +++--- tests/chains.config.ts | 43 +++++++++++++++++++ {packages/account/tests => tests}/index.d.ts | 0 .../setup-e2e-tests.ts | 25 +++++------ .../setup-unit-tests.ts | 12 +----- {packages/account/tests => tests}/utils.ts | 0 16 files changed, 125 insertions(+), 120 deletions(-) delete mode 100644 packages/bundler/tests/index.d.ts delete mode 100644 packages/paymaster/tests/index.d.ts create mode 100644 tests/chains.config.ts rename {packages/account/tests => tests}/index.d.ts (100%) rename setup-e2e-tests.ts => tests/setup-e2e-tests.ts (85%) rename setup-unit-tests.ts => tests/setup-unit-tests.ts (84%) rename {packages/account/tests => tests}/utils.ts (100%) diff --git a/.env.example b/.env.example index 915f7980c..3dfa799c5 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ E2E_PRIVATE_KEY_ONE= E2E_PRIVATE_KEY_TWO= -E2E_BICO_PAYMASTER_KEY_MUMBAI= \ No newline at end of file +E2E_BICO_PAYMASTER_KEY_MUMBAI= +E2E_BICO_PAYMASTER_KEY_GOERLI= \ No newline at end of file diff --git a/jest.config.e2e.ts b/jest.config.e2e.ts index b6fedd042..2fff1ca6d 100644 --- a/jest.config.e2e.ts +++ b/jest.config.e2e.ts @@ -1,6 +1,6 @@ import config from "./jest.config"; const e2eConfig = { ...config }; e2eConfig.testMatch = ["**/*.e2e.spec.ts"]; -e2eConfig.setupFilesAfterEnv = ["/setup-e2e-tests.ts"]; +e2eConfig.setupFilesAfterEnv = ["/tests/setup-e2e-tests.ts"]; export default e2eConfig; diff --git a/jest.config.ts b/jest.config.ts index e2c320a1c..93489a795 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -123,7 +123,7 @@ const config: Config = { // setupFiles: [], // A list of paths to modules that run some code to configure or set up the testing framework before each test - setupFilesAfterEnv: ["/setup-unit-tests.ts"], + setupFilesAfterEnv: ["/tests/setup-unit-tests.ts"], // The number of seconds after which a test is considered as slow and reported as such in the results. // slowTestThreshold: 5, diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 0675993f8..d8681a4cf 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,16 +1,17 @@ import { PaymasterMode } from "@biconomy/paymaster"; -import { TestData } from "."; +import { TestData } from "../../../tests"; import { createSmartWalletClient } from "../src/index"; import { Hex, encodeFunctionData, parseAbi } from "viem"; import { UserOperationStruct } from "@alchemy/aa-core"; -import { checkBalance, entryPointABI } from "./utils"; +import { checkBalance, entryPointABI } from "../../../tests/utils"; describe("Account Tests", () => { - let chainData: TestData; + let mumbai: TestData; + let goerli: TestData; beforeEach(() => { - // @ts-ignore - chainData = testDataPerChain[0]; + // @ts-ignore: Comes from setup-e2e-tests + [mumbai, goerli] = testDataPerChain; }); it("should send some native token to a recipient", async () => { @@ -19,7 +20,7 @@ describe("Account Tests", () => { minnow: { publicAddress: recipient }, bundlerUrl, publicClient, - } = chainData; + } = mumbai; const smartWallet = await createSmartWalletClient({ signer, @@ -45,7 +46,8 @@ describe("Account Tests", () => { whale: { viemWallet: signer }, bundlerUrl, biconomyPaymasterApiKey, - } = chainData; + chainId, + } = mumbai; const smartWallet = await createSmartWalletClient({ signer, @@ -65,7 +67,7 @@ describe("Account Tests", () => { bundlerUrl, biconomyPaymasterApiKey, publicClient, - } = chainData; + } = mumbai; const smartWallet = await createSmartWalletClient({ signer, @@ -105,7 +107,7 @@ describe("Account Tests", () => { entryPointAddress, publicClient, biconomyPaymasterApiKey, - } = chainData; + } = mumbai; const smartWallet = await createSmartWalletClient({ signer, @@ -145,7 +147,7 @@ describe("Account Tests", () => { bundlerUrl, publicClient, biconomyPaymasterApiKey, - } = chainData; + } = mumbai; const smartWallet = await createSmartWalletClient({ signer, @@ -165,7 +167,7 @@ describe("Account Tests", () => { const { whale: { viemWallet: signer }, bundlerUrl, - } = chainData; + } = mumbai; const smartWallet = await createSmartWalletClient({ signer, @@ -175,4 +177,8 @@ describe("Account Tests", () => { const module = (await smartWallet.getAllModules())[0]; expect(ecdsaOwnershipModule).toBe(module); }); + + it("should also have chain data for goerli", () => { + expect(goerli).toHaveProperty("chainId"); + }); }); diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 012bef218..ae7fab293 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -2,21 +2,21 @@ import { Paymaster, createSmartWalletClient } from "../src"; import { createWalletClient, http } from "viem"; import { localhost } from "viem/chains"; import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; -import { TestData } from "."; +import { TestData } from "../../../tests"; describe("Account Tests", () => { - let chainData: TestData; + let ganache: TestData; beforeEach(() => { - // @ts-ignore - chainData = testDataPerChain[0]; + // @ts-ignore: Comes from setup-unit-tests + [ganache] = testDataPerChain; }); it("should create a smartWalletClient from a walletClient", async () => { const { whale: { viemWallet: signer }, bundlerUrl, - } = chainData; + } = ganache; const smartWallet = await createSmartWalletClient({ signer, @@ -31,7 +31,7 @@ describe("Account Tests", () => { chainId, whale: { alchemyWalletClientSigner: signer }, bundlerUrl, - } = chainData; + } = ganache; const smartWallet = await createSmartWalletClient({ chainId, @@ -46,7 +46,7 @@ describe("Account Tests", () => { const { bundlerUrl, whale: { viemWallet: signer }, - } = chainData; + } = ganache; const smartWallet = await createSmartWalletClient({ signer, @@ -62,7 +62,7 @@ describe("Account Tests", () => { bundlerUrl, whale: { viemWallet: signer }, minnow: { publicAddress: recipient }, - } = chainData; + } = ganache; const smartWallet = await createSmartWalletClient({ entryPointAddress, @@ -81,7 +81,7 @@ describe("Account Tests", () => { const { bundlerUrl, whale: { viemWallet: signer }, - } = chainData; + } = ganache; const smartWallet = await createSmartWalletClient({ signer, @@ -97,7 +97,7 @@ describe("Account Tests", () => { whale: { viemWallet: signer }, minnow: { publicAddress: recipient }, bundlerUrl, - } = chainData; + } = ganache; const smartWallet = await createSmartWalletClient({ signer, @@ -113,7 +113,7 @@ describe("Account Tests", () => { whale: { viemWallet: signer }, bundlerUrl, biconomyPaymasterApiKey, - } = chainData; + } = ganache; const paymasterUrl = "https://paymaster.biconomy.io/api/v1/80001/" + biconomyPaymasterApiKey; const paymaster = new Paymaster({ paymasterUrl }); @@ -128,7 +128,7 @@ describe("Account Tests", () => { }, 10000); it("should fail to create a smartWalletClient from a walletClient without a chainId", async () => { - const { bundlerUrl } = chainData; + const { bundlerUrl } = ganache; const account = privateKeyToAccount(generatePrivateKey()); const viemWalletClientNoChainId = createWalletClient({ @@ -146,7 +146,7 @@ describe("Account Tests", () => { }); it("should fail to create a smartWalletClient from a walletClient without an account", async () => { - const { bundlerUrl } = chainData; + const { bundlerUrl } = ganache; const viemWalletNoAccount = createWalletClient({ transport: http(localhost.rpcUrls.public.http[0]), diff --git a/packages/bundler/tests/bundler.e2e.spec.ts b/packages/bundler/tests/bundler.e2e.spec.ts index e7c2d171b..32f21d515 100644 --- a/packages/bundler/tests/bundler.e2e.spec.ts +++ b/packages/bundler/tests/bundler.e2e.spec.ts @@ -1,14 +1,19 @@ -import { TestData } from "."; +import { TestData } from "../../../tests"; -describe("Bundler E2E Tests", () => { - let chainData: TestData; +describe("Bundler Unit Tests", () => { + let mumbai: TestData; + let goerli: TestData; beforeEach(() => { - // @ts-ignore - chainData = testDataPerChain[0]; + // @ts-ignore: Comes from setup-e2e-tests + [mumbai, goerli] = testDataPerChain; }); - it("should have chain data", () => { - expect(chainData).toHaveProperty("chainId"); + it("should have chain data for mumbai", () => { + expect(mumbai).toHaveProperty("chainId"); + }); + + it("should also have chain data for goerli", () => { + expect(goerli).toHaveProperty("chainId"); }); }); diff --git a/packages/bundler/tests/bundler.spec.ts b/packages/bundler/tests/bundler.spec.ts index 5286d4bc9..e663dafb4 100644 --- a/packages/bundler/tests/bundler.spec.ts +++ b/packages/bundler/tests/bundler.spec.ts @@ -1,14 +1,14 @@ -import { TestData } from "."; +import { TestData } from "../../../tests"; describe("Bundler Unit Tests", () => { - let chainData: TestData; + let ganache: TestData; beforeEach(() => { - // @ts-ignore - chainData = testDataPerChain[0]; + // @ts-ignore: Comes from setup-unit-tests + [ganache] = testDataPerChain; }); - it("should have chain data", () => { - expect(chainData).toHaveProperty("chainId"); + it("should have chain data for ganache", () => { + expect(ganache).toHaveProperty("chainId"); }); }); diff --git a/packages/bundler/tests/index.d.ts b/packages/bundler/tests/index.d.ts deleted file mode 100644 index 6d0e6cd22..000000000 --- a/packages/bundler/tests/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Chain, Hex, PrivateKeyAccount, PublicClient, WalletClient } from "viem"; -import { WalletClientSigner } from "@alchemy/aa-core"; - -interface WalletProps { - alchemyWalletClientSigner: WalletClientSigner; - viemWallet: WalletClient; - balance: BigInt; - publicAddress: Hex; - account: PrivateKeyAccount; -} - -export type TestData = { - whale: WalletProps; - minnow: WalletProps; - publicClient: PublicClient; - chainId: number; - bundlerUrl: string; - entryPointAddress: string; - viemChain: Chain; - biconomyPaymasterApiKey: string; -}; diff --git a/packages/paymaster/tests/index.d.ts b/packages/paymaster/tests/index.d.ts deleted file mode 100644 index 6d0e6cd22..000000000 --- a/packages/paymaster/tests/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Chain, Hex, PrivateKeyAccount, PublicClient, WalletClient } from "viem"; -import { WalletClientSigner } from "@alchemy/aa-core"; - -interface WalletProps { - alchemyWalletClientSigner: WalletClientSigner; - viemWallet: WalletClient; - balance: BigInt; - publicAddress: Hex; - account: PrivateKeyAccount; -} - -export type TestData = { - whale: WalletProps; - minnow: WalletProps; - publicClient: PublicClient; - chainId: number; - bundlerUrl: string; - entryPointAddress: string; - viemChain: Chain; - biconomyPaymasterApiKey: string; -}; diff --git a/packages/paymaster/tests/paymaster.e2e.spec.ts b/packages/paymaster/tests/paymaster.e2e.spec.ts index ed3ef8dd9..40496df07 100644 --- a/packages/paymaster/tests/paymaster.e2e.spec.ts +++ b/packages/paymaster/tests/paymaster.e2e.spec.ts @@ -1,14 +1,19 @@ -import { TestData } from "."; +import { TestData } from "../../../tests"; -describe("Paymaster E2E Tests", () => { - let chainData: TestData; +describe("Paymaster Unit Tests", () => { + let mumbai: TestData; + let goerli: TestData; beforeEach(() => { - // @ts-ignore - chainData = testDataPerChain[0]; + // @ts-ignore: Comes from setup-e2e-tests + [mumbai, goerli] = testDataPerChain; }); - it("should have chain data", () => { - expect(chainData).toHaveProperty("chainId"); + it("should have chain data for mumbai", () => { + expect(mumbai).toHaveProperty("chainId"); + }); + + it("should also have chain data for goerli", () => { + expect(goerli).toHaveProperty("chainId"); }); }); diff --git a/packages/paymaster/tests/paymaster.spec.ts b/packages/paymaster/tests/paymaster.spec.ts index 8cc97d948..0b3508a6b 100644 --- a/packages/paymaster/tests/paymaster.spec.ts +++ b/packages/paymaster/tests/paymaster.spec.ts @@ -1,14 +1,14 @@ -import { TestData } from "."; +import { TestData } from "../../../tests"; describe("Paymaster Unit Tests", () => { - let chainData: TestData; + let ganache: TestData; beforeEach(() => { - // @ts-ignore - chainData = testDataPerChain[0]; + // @ts-ignore: Comes from setup-unit-tests + [ganache] = testDataPerChain; }); - it("should have chain data", () => { - expect(chainData).toHaveProperty("chainId"); + it("should have chain data for mumbai", () => { + expect(ganache).toHaveProperty("chainId"); }); }); diff --git a/tests/chains.config.ts b/tests/chains.config.ts new file mode 100644 index 000000000..60cf24ac5 --- /dev/null +++ b/tests/chains.config.ts @@ -0,0 +1,43 @@ +import { localhost, Chain } from "viem/chains"; +import { polygonMumbai, goerli } from "viem/chains"; +import { config } from "dotenv"; + +config(); + +type SupportedTestChain = "ganache" | "goerli" | "mumbai"; +type BaseChainConfig = { + chainId: number; + entryPointAddress: string; + bundlerUrl: string; + paymasterUrl?: string; + viemChain: Chain; + biconomyPaymasterApiKey?: string; +}; +export const CHAIN_CONFIG: Record = { + ganache: { // No useful bundler or paymaster tests for ganache + chainId: 1337, + entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + bundlerUrl: "https://bundler.biconomy.io/api/v2/1/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + viemChain: localhost, + }, + goerli: { + chainId: 5, + entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + bundlerUrl: "https://bundler.biconomy.io/api/v2/5/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + paymasterUrl: "https://paymaster.biconomy.io/api/v1/5/" + process.env.E2E_BICO_PAYMASTER_KEY_GOERLI!, + viemChain: goerli, + biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_GOERLI!, + }, + mumbai: { + chainId: 80001, + entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/" + process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, + viemChain: polygonMumbai, + biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, + }, +}; +export const E2E_TEST_CHAINS = [CHAIN_CONFIG.mumbai, CHAIN_CONFIG.goerli]; +export const UNIT_TEST_CHAIN = CHAIN_CONFIG.ganache; + +export default CHAIN_CONFIG; \ No newline at end of file diff --git a/packages/account/tests/index.d.ts b/tests/index.d.ts similarity index 100% rename from packages/account/tests/index.d.ts rename to tests/index.d.ts diff --git a/setup-e2e-tests.ts b/tests/setup-e2e-tests.ts similarity index 85% rename from setup-e2e-tests.ts rename to tests/setup-e2e-tests.ts index a954c334a..370171542 100644 --- a/setup-e2e-tests.ts +++ b/tests/setup-e2e-tests.ts @@ -1,29 +1,18 @@ import { createWalletClient, http, createPublicClient } from "viem"; import { privateKeyToAccount } from "viem/accounts"; -import { polygonMumbai } from "viem/chains"; import { WalletClientSigner } from "@alchemy/aa-core"; import { config } from "dotenv"; +import { E2E_TEST_CHAINS } from "./chains.config"; config(); -const TEST_CHAINS = [ - { - chainId: 80001, - entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", - bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", - paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/-2BFRwRlJ.8afbc010-edcf-46b3-8713-77639655f2dd", - viemChain: polygonMumbai, - biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, - }, -]; - beforeAll(async () => { envVarCheck(); const walletOne = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_ONE}`); const walletTwo = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_TWO}`); - const promises = TEST_CHAINS.map((chain) => { + const promises = E2E_TEST_CHAINS.map((chain) => { const publicClient = createPublicClient({ chain: chain.viemChain, transport: http(), @@ -92,13 +81,19 @@ beforeAll(async () => { const whaleBalance = sortedBalances[0]; const minnowBalance = sortedBalances[1]; - const datum = { + + const commonData = { publicClient: whaleBalance.publicClient, chainId: whaleBalance.chainId, bundlerUrl: whaleBalance.bundlerUrl, entryPointAddress: whaleBalance.entryPointAddress, viemChain: whaleBalance.viemChain, biconomyPaymasterApiKey: whaleBalance.biconomyPaymasterApiKey, + paymasterUrl: whaleBalance.paymasterUrl, + }; + + const datum = { + ...commonData, whale: { balance: whaleBalance.balance, viemWallet: whaleBalance.viemWallet, @@ -119,7 +114,7 @@ beforeAll(async () => { }); const envVarCheck = () => { - const REQUIRED_FIELDS = ["E2E_PRIVATE_KEY_ONE", "E2E_PRIVATE_KEY_TWO", "E2E_BICO_PAYMASTER_KEY_MUMBAI"]; + const REQUIRED_FIELDS = ["E2E_PRIVATE_KEY_ONE", "E2E_PRIVATE_KEY_TWO", "E2E_BICO_PAYMASTER_KEY_MUMBAI", "E2E_BICO_PAYMASTER_KEY_GOERLI"]; const hasFields = REQUIRED_FIELDS.every((field) => !!process.env[field]); if (!hasFields) { console.error("Missing env var"); diff --git a/setup-unit-tests.ts b/tests/setup-unit-tests.ts similarity index 84% rename from setup-unit-tests.ts rename to tests/setup-unit-tests.ts index 57ed7ac00..06d9634f3 100644 --- a/setup-unit-tests.ts +++ b/tests/setup-unit-tests.ts @@ -1,20 +1,12 @@ import { createWalletClient, http, createPublicClient } from "viem"; import { privateKeyToAccount, generatePrivateKey, mnemonicToAccount } from "viem/accounts"; -import { localhost } from "viem/chains"; import { WalletClientSigner } from "@alchemy/aa-core"; - -const TEST_CHAIN = { - chainId: 1337, - entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", - bundlerUrl: "https://bundler.biconomy.io/api/v2/1/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", - viemChain: localhost, -}; +import { UNIT_TEST_CHAIN } from "./chains.config"; const MNEMONIC = "direct buyer cliff train rice spirit census refuse glare expire innocent quote"; beforeAll(() => { - const chain = TEST_CHAIN; - const { chainId, bundlerUrl, viemChain, entryPointAddress } = chain; + const { chainId, bundlerUrl, viemChain, entryPointAddress } = UNIT_TEST_CHAIN; const accountOne = mnemonicToAccount(MNEMONIC); const viemWalletClientOne = createWalletClient({ account: accountOne, diff --git a/packages/account/tests/utils.ts b/tests/utils.ts similarity index 100% rename from packages/account/tests/utils.ts rename to tests/utils.ts From 4ad7ea7f8eb6a28854dcce83834b2b7ff9ad3287 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Mon, 15 Jan 2024 17:16:31 +0200 Subject: [PATCH 1017/1247] Added session validation module tests --- .../multiChainValidationModule.e2e.spec.ts | 6 +- .../sessionValidationModule.e2e.spec.ts | 185 +++++++++++++++ .../tests/modules/utils/customSession.ts | 217 ++++++++++++++++++ packages/modules/src/utils/Types.ts | 2 +- 4 files changed, 406 insertions(+), 4 deletions(-) create mode 100644 packages/account/tests/modules/sessionValidationModule.e2e.spec.ts create mode 100644 packages/account/tests/modules/utils/customSession.ts diff --git a/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts b/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts index dc809ce21..99d95c6f3 100644 --- a/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts +++ b/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts @@ -18,7 +18,7 @@ describe("Account with MultiChainValidation Module Tests", () => { it("Should mint an NFT gasless on Base Goerli and Polygon Mumbai", async () => { const { - whale: { signer, publicAddress: recipient }, + whale: { alchemyWalletClientSigner, publicAddress: recipient }, biconomyPaymasterApiKey, bundlerUrl, } = chainData; @@ -26,13 +26,13 @@ describe("Account with MultiChainValidation Module Tests", () => { const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; const multiChainModule = await MultiChainValidationModule.create({ - signer: signer, + signer: alchemyWalletClientSigner, moduleAddress: DEFAULT_MULTICHAIN_MODULE, }); const polygonAccount = await createSmartWalletClient({ chainId: 80001, - signer, + signer: alchemyWalletClientSigner, bundlerUrl, defaultValidationModule: multiChainModule, activeValidationModule: multiChainModule, diff --git a/packages/account/tests/modules/sessionValidationModule.e2e.spec.ts b/packages/account/tests/modules/sessionValidationModule.e2e.spec.ts new file mode 100644 index 000000000..904c617cb --- /dev/null +++ b/packages/account/tests/modules/sessionValidationModule.e2e.spec.ts @@ -0,0 +1,185 @@ +import { DEFAULT_SESSION_KEY_MANAGER_MODULE, SessionKeyManagerModule } from "@biconomy/modules"; +import { SessionFileStorage } from "./utils/customSession"; +import { privateKeyToAccount } from "viem/accounts"; +import { createSmartWalletClient } from "../../src/index"; +import { Hex, createWalletClient, encodeAbiParameters, encodeFunctionData, getContract, http, parseAbi, parseUnits, toHex } from "viem"; +import { PaymasterMode } from "@biconomy/paymaster"; + +describe("Account Tests", () => { + const sessionFileStorage: SessionFileStorage = new SessionFileStorage(DEFAULT_SESSION_KEY_MANAGER_MODULE); + + // it("Should create custom session storage", async () => { + // const wallet = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_ONE}`); + // const sessionKeyEOA = wallet.address; + + // await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey: "0x2e5d78c6f2e6dca5fcbb22cca841d6c43465c483f59cbd6839a24d4ec89b977b" }); + + // const addedSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); + + // expect(addedSigner).toBeTruthy(); + // }); + + // it("Should create and setup Session Module", async () => { + // try { + // const wallet = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_ONE}`); + // const sessionKeyEOA = wallet.address; + + // await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey: `0x${process.env.E2E_PRIVATE_KEY_ONE}` }); + + // const addedSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); + + // expect(addedSigner).toBeTruthy(); + + // const smartWallet = await createSmartWalletClient({ + // chainId: 80001, + // signer: addedSigner, + // bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", + // biconomyPaymasterApiKey: "nxPxZluSF.aeacea05-e564-4bd2-b8d8-94a8167fb192", + // }); + + // const sessionModule = await SessionKeyManagerModule.create({ + // moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, + // smartAccountAddress: await smartWallet.getAddress(), + // sessionStorageClient: sessionFileStorage, + // }); + + // const sessionKeyData = encodeAbiParameters([{ name: "owner", type: "address" }], ["0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549"]); + + // const sessionTxData = await sessionModule.createSessionData([ + // { + // validUntil: 0, + // validAfter: 0, + // sessionValidationModule: DEFAULT_SESSION_KEY_MANAGER_MODULE, + // sessionPublicKey: sessionKeyEOA, + // sessionKeyData: sessionKeyData, + // }, + // ]); + + // const setSessionAllowedTrx = { + // to: DEFAULT_SESSION_KEY_MANAGER_MODULE, + // data: sessionTxData.data, + // value: 0, + // }; + + // const txArray: any = []; + + // const isEnabled = await smartWallet.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); + // if (!isEnabled) { + // console.log("MODULE NOT ENABLED"); + // const enableModuleTrx = await smartWallet.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); + // txArray.push(enableModuleTrx); + // } else { + // console.log("MODULE ALREADY ENABLED"); + // } + + // txArray.push(setSessionAllowedTrx); + + // const partialUserOp = await smartWallet.buildUserOp(txArray, { + // paymasterServiceData: { + // mode: PaymasterMode.SPONSORED, + // }, + // }); + + // const userOpResponse = await smartWallet.sendUserOp(partialUserOp); + // console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse.userOpHash}?network=mumbai`); + + // const transactionDetails = await userOpResponse.wait(); + // console.log("txHash", transactionDetails.receipt.transactionHash); + // } catch (error) { + // console.log(error); + // } + // }, 50000); + + it("Should send a user op using Session Validation Module", async () => { + try { + const wallet = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_ONE}`); + const sessionKeyEOA = wallet.address; + + await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey: `0x${process.env.E2E_PRIVATE_KEY_ONE}` }); + + const addedSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); + + expect(addedSigner).toBeTruthy(); + + const smartWallet = await createSmartWalletClient({ + chainId: 80001, + signer: addedSigner, + bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", + biconomyPaymasterApiKey: "nxPxZluSF.aeacea05-e564-4bd2-b8d8-94a8167fb192", + }); + + const sessionModule = await SessionKeyManagerModule.create({ + moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, + smartAccountAddress: await smartWallet.getAddress(), + sessionStorageClient: sessionFileStorage, + }); + + smartWallet.setActiveValidationModule(sessionModule); + + smartWallet.activeValidationModule = sessionModule; + + const txArray: any = []; + + const sessionKeyData = encodeAbiParameters( + [{ type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }], + [ + sessionKeyEOA, + "0xdA5289fCAAF71d52a80A254da614a192b693e977", // erc20 token address + "0xfCF6Eb210E5Fd84D679b14fe170f9aB05C9B21e7", // receiver address + parseUnits("1", 6), + ], + ); // 1 usdc amount]) + + const erc20ModuleAddr = "0x000000D50C68705bd6897B2d17c7de32FB519fDA"; + + const sessionTxData = await sessionModule.createSessionData([ + { + validUntil: 0, + validAfter: 0, + sessionValidationModule: erc20ModuleAddr, + sessionPublicKey: sessionKeyEOA, + sessionKeyData: sessionKeyData, + }, + ]); + + const setSessionAllowedTrx = { + to: DEFAULT_SESSION_KEY_MANAGER_MODULE, + data: sessionTxData.data, + value: 0, + }; + + txArray.push(setSessionAllowedTrx); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function transfer(address receiver)"]), + functionName: "transfer", + args: ["0xfCF6Eb210E5Fd84D679b14fe170f9aB05C9B21e7"], + }); + + const tx1 = { + to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", //erc20 token address + data: encodedCall, + value: 0, + }; + + txArray.push(tx1); + + const mintUserOp = await smartWallet.buildUserOp(txArray, { + skipBundlerGasEstimation: false, + params: { + sessionSigner: addedSigner, + sessionValidationModule: erc20ModuleAddr, + }, + }); + + const mintUserOpResponse = await smartWallet.sendUserOp(mintUserOp, { + sessionSigner: addedSigner, + sessionValidationModule: erc20ModuleAddr, + }); + console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${mintUserOpResponse.userOpHash}?network=mumbai`); + } catch (error) { + console.log(error); + } + }, 50000); +}); + diff --git a/packages/account/tests/modules/utils/customSession.ts b/packages/account/tests/modules/utils/customSession.ts new file mode 100644 index 000000000..d688701be --- /dev/null +++ b/packages/account/tests/modules/utils/customSession.ts @@ -0,0 +1,217 @@ +import * as fs from "fs"; +import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; +import { SignerData } from "@biconomy/modules/src"; +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; +import { createWalletClient, http } from "viem"; +import { polygonMumbai } from "viem/chains"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "@biconomy/modules/src/interfaces/ISessionStorage"; + +export class SessionFileStorage implements ISessionStorage { + private smartAccountAddress: string; + + constructor(smartAccountAddress: string) { + this.smartAccountAddress = smartAccountAddress.toLowerCase(); + } + + // This method reads data from the file and returns it in the JSON format + private async readDataFromFile(type: "sessions" | "signers"): Promise { + return new Promise((resolve) => { + fs.readFile(this.getStorageFilePath(type), "utf8", (err, data) => { + if (err) { + // Handle errors appropriately + resolve(undefined); + } else { + if (!data) { + resolve(null); + } else { + resolve(JSON.parse(data)); + } + // resolve(JSON.parse(data)); + } + }); + }); + } + + private getStorageFilePath(type: "sessions" | "signers"): string { + return `./packages/account/tests/modules/utils/sessionStorageData/${this.smartAccountAddress}_${type}.json`; + } + + private async writeDataToFile(data: any, type: "sessions" | "signers"): Promise { + return new Promise((resolve, reject) => { + const filePath = this.getStorageFilePath(type); + fs.writeFile(filePath, JSON.stringify(data), "utf8", (err) => { + if (err) { + // Handle errors appropriately + reject(err); + } else { + resolve(); + } + }); + }); + } + + private validateSearchParam(param: SessionSearchParam): void { + if (param.sessionID) { + return; + } else if (!param.sessionID && param.sessionPublicKey && param.sessionValidationModule) { + return; + } else { + throw new Error("Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address."); + } + } + + // Session store is in the form of mekrleRoot and leafnodes, each object will have a root and an array of leafNodes. + private async getSessionStore(): Promise { + // eslint-disable-next-line no-useless-catch + try { + const data = await this.readDataFromFile("sessions"); + return data || { merkleRoot: "", leafNodes: [] }; + } catch (error) { + // Handle errors appropriately + throw error; + } + } + + private async getSignerStore(): Promise { + // eslint-disable-next-line no-useless-catch + try { + const data = await this.readDataFromFile("signers"); + return data || {}; + } catch (error) { + // Handle errors appropriately + throw error; + } + } + + private getStorageKey(type: "sessions" | "signers"): string { + return `${this.smartAccountAddress}_${type}`; + } + + private toLowercaseAddress(address: string): `0x${string}` { + return `0x${address.toLowerCase()}`; + } + + async getSessionData(): Promise { + const sessions = (await this.getSessionStore()).leafNodes; + console.log("Got sessions", sessions); + const session = sessions[0]; + + if (!session) { + throw new Error("Session not found."); + } + return session; + } + + async addSessionData(leaf: SessionLeafNode): Promise { + console.log("Add session Data", leaf); + const data = await this.getSessionStore(); + leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule); + leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey); + data.leafNodes.push(leaf); + await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type + } + + async updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise { + this.validateSearchParam(param); + + const data = await this.getSessionStore(); + const session = data.leafNodes.find((s: SessionLeafNode) => { + if (param.sessionID) { + return s.sessionID === param.sessionID; + } else if (param.sessionPublicKey && param.sessionValidationModule) { + return ( + s.sessionPublicKey === this.toLowercaseAddress(param.sessionPublicKey) && + s.sessionValidationModule === this.toLowercaseAddress(param.sessionValidationModule) + ); + } else { + return undefined; + } + }); + + if (!session) { + throw new Error("Session not found."); + } + + session.status = status; + await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type + } + + async clearPendingSessions(): Promise { + const data = await this.getSessionStore(); + data.leafNodes = data.leafNodes.filter((s: SessionLeafNode) => s.status !== "PENDING"); + await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type + } + + async addSigner(signerData: SignerData): Promise { + const signers = await this.getSignerStore(); + let signer: SignerData; + if (!signerData) { + const pkey = generatePrivateKey(); + signer = { + pvKey: pkey, + pbKey: privateKeyToAccount(pkey).publicKey, + }; + } else { + signer = signerData; + } + const accountSigner = privateKeyToAccount(signer.pvKey); + const client = createWalletClient({ + account: accountSigner, + chain: signerData.chainId, + transport: http(polygonMumbai.rpcUrls.public.http[0]), + }); + const walletClientSigner: SmartAccountSigner = new WalletClientSigner( + client, + "json-rpc", // signerType + ); + signers[this.toLowercaseAddress(accountSigner.address)] = { + pvKey: signer.pvKey, + pbKey: signer.pbKey, + }; + await this.writeDataToFile(signers, "signers"); // Use 'signers' as the type + return walletClientSigner; + } + + async getSignerByKey(sessionPublicKey: string): Promise { + const signers = await this.getSignerStore(); + console.log("Got signers", signers); + + const signerData: SignerData = signers[this.toLowercaseAddress(sessionPublicKey)]; + if (!signerData) { + throw new Error("Signer not found."); + } + console.log(signerData.pvKey, "PVKEY"); + + const signer = privateKeyToAccount(signerData.pvKey); + const walletClient = createWalletClient({ + account: signer, + transport: http(polygonMumbai.rpcUrls.public.http[0]), + }); + return new WalletClientSigner(walletClient, "json-rpc"); + } + + async getSignerBySession(): Promise { + const session = await this.getSessionData(); + console.log("got session", session); + const walletClientSinger = await this.getSignerByKey(session.sessionPublicKey); + return walletClientSinger; + } + + async getAllSessionData(param?: SessionSearchParam): Promise { + const sessions = (await this.getSessionStore()).leafNodes; + if (!param || !param.status) { + return sessions; + } + return sessions.filter((s: SessionLeafNode) => s.status === param.status); + } + + async getMerkleRoot(): Promise { + return (await this.getSessionStore()).merkleRoot; + } + + async setMerkleRoot(merkleRoot: string): Promise { + const data = await this.getSessionStore(); + data.merkleRoot = merkleRoot; + await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type + } +} \ No newline at end of file diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 75f58944b..cd7bb8166 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -69,7 +69,7 @@ export type SimulationType = "validation" | "validation_and_execution"; export type SignerData = { pbKey: string; - pvKey: string; + pvKey: `0x${string}`; chainId?: Chain; }; From 92c1ef0fcfeafbd89a6872b1e2689eea7c722bc3 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 15 Jan 2024 19:17:32 +0400 Subject: [PATCH 1018/1247] capx rpc url update --- packages/common/src/Constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/common/src/Constants.ts b/packages/common/src/Constants.ts index 314a7a756..7770b372c 100644 --- a/packages/common/src/Constants.ts +++ b/packages/common/src/Constants.ts @@ -38,5 +38,5 @@ export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { [ChainId.CORE_TESTNET]: "https://rpc.testnet.core.chain.com", [ChainId.MANTA_PACIFIC_MAINNET]: "https://pacific-rpc.manta.network/http", [ChainId.MANTA_PACIFIC_TESTNET]: "https://pacific-rpc.testnet.manta.network/http", - [ChainId.CAPX_TESTNET]: "http://13.234.72.203:8124", + [ChainId.CAPX_TESTNET]: "https://capx-zk-rpc.lgns.me/sequencer-api", }; From 3f06bc5e38b3c989823d1a16c656c9a40742c86d Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 15 Jan 2024 20:42:15 +0400 Subject: [PATCH 1019/1247] update changelog --- packages/account/CHANGELOG.md | 4 ++++ packages/bundler/CHANGELOG.md | 4 ++++ packages/common/CHANGELOG.md | 4 ++++ packages/core-types/CHANGELOG.md | 4 ++++ packages/modules/CHANGELOG.md | 4 ++++ packages/node-client/CHANGELOG.md | 4 ++++ packages/particle-auth/CHANGELOG.md | 4 ++++ packages/paymaster/CHANGELOG.md | 4 ++++ packages/transak/CHANGELOG.md | 4 ++++ 9 files changed, 36 insertions(+) diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index 5d86ed497..f2f70fe1f 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.3 (2023-12-28) + +VERSION Bump Only. + ## 3.1.2 (2023-12-28) ### Features diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index 731675d74..8e768924c 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.3 (2023-12-28) + +VERSION Bump Only. + ## 3.1.2 (2023-12-28) ### Features diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index 03907bc7c..19b8a3b6d 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.3 (2023-12-28) + +* update capx url and rebase ([92c1ef0](https://github.com/bcnmy/biconomy-client-sdk/pull/360/commits/92c1ef0fcfeafbd89a6872b1e2689eea7c722bc3)) + ## 3.1.2 (2023-12-28) VERSION Bump Only. diff --git a/packages/core-types/CHANGELOG.md b/packages/core-types/CHANGELOG.md index f8aa18f1e..0301480be 100644 --- a/packages/core-types/CHANGELOG.md +++ b/packages/core-types/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.3 (2023-12-28) + +VERSION Bump Only. + ## 3.1.2 (2023-12-28) VERSION Bump Only. diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md index 370078868..3f5fcdb40 100644 --- a/packages/modules/CHANGELOG.md +++ b/packages/modules/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.3 (2023-12-28) + +VERSION Bump Only. + ## 3.1.2 (2023-12-28) ### Bug Fixes diff --git a/packages/node-client/CHANGELOG.md b/packages/node-client/CHANGELOG.md index f1cd56de1..f5196ec43 100644 --- a/packages/node-client/CHANGELOG.md +++ b/packages/node-client/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.3 (2023-12-28) + +VERSION Bump Only. + ## 3.1.2 (2023-12-28) VERSION Bump Only. diff --git a/packages/particle-auth/CHANGELOG.md b/packages/particle-auth/CHANGELOG.md index 702d37b7d..706af8966 100644 --- a/packages/particle-auth/CHANGELOG.md +++ b/packages/particle-auth/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.3 (2023-12-28) + +VERSION Bump Only. + ## 3.1.2 (2023-12-28) VERSION Bump Only. diff --git a/packages/paymaster/CHANGELOG.md b/packages/paymaster/CHANGELOG.md index b39368473..27767c9bf 100644 --- a/packages/paymaster/CHANGELOG.md +++ b/packages/paymaster/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.3 (2023-12-28) + +VERSION Bump Only. + ## 3.1.2 (2023-12-28) VERSION Bump Only. diff --git a/packages/transak/CHANGELOG.md b/packages/transak/CHANGELOG.md index a217242e3..ed5d38a5a 100644 --- a/packages/transak/CHANGELOG.md +++ b/packages/transak/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.1.3 (2023-12-28) + +VERSION Bump Only. + ## 3.1.2 (2023-12-28) VERSION Bump Only. From b3803351aedd74b37f2706bc0e5a5d75678d9169 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 16 Jan 2024 12:21:21 +0400 Subject: [PATCH 1020/1247] chore: bump package versions --- packages/account/package.json | 14 +++++++------- packages/bundler/package.json | 6 +++--- packages/common/package.json | 6 +++--- packages/core-types/package.json | 2 +- packages/modules/package.json | 8 ++++---- packages/node-client/package.json | 4 ++-- packages/particle-auth/package.json | 2 +- packages/paymaster/package.json | 6 +++--- packages/transak/package.json | 2 +- 9 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index 68ba8dfcf..1dfa29482 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account", - "version": "3.1.2", + "version": "3.1.3", "description": "This package provides apis for ERC-4337 based smart account implementations", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -42,12 +42,12 @@ "@account-abstraction/utils": "^0.4.0", "@alchemy/aa-core": "^1.2.2", "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0", - "@biconomy/bundler": "^3.1.2", - "@biconomy/common": "^3.1.2", - "@biconomy/core-types": "^3.1.2", - "@biconomy/modules": "^3.1.2", - "@biconomy/node-client": "^3.1.2", - "@biconomy/paymaster": "^3.1.2", + "@biconomy/bundler": "^3.1.3", + "@biconomy/common": "^3.1.3", + "@biconomy/core-types": "^3.1.3", + "@biconomy/modules": "^3.1.3", + "@biconomy/node-client": "^3.1.3", + "@biconomy/paymaster": "^3.1.3", "@ethersproject/logger": "^5.7.0", "@ethersproject/providers": "^5.7.2", "ethers": "^5.7.0", diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 15069a0a8..45252d1b8 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/bundler", - "version": "3.1.2", + "version": "3.1.3", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -37,8 +37,8 @@ "access": "public" }, "dependencies": { - "@biconomy/common": "^3.1.2", - "@biconomy/core-types": "^3.1.2", + "@biconomy/common": "^3.1.3", + "@biconomy/core-types": "^3.1.3", "@ethersproject/providers": "^5.7.2", "ethers": "^5.7.0" } diff --git a/packages/common/package.json b/packages/common/package.json index 0e49aa11a..d17dddfc6 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "3.1.2", + "version": "3.1.3", "description": "common utils to be used for aa transactions", "keywords": [ "utils" @@ -41,8 +41,8 @@ }, "dependencies": { "@account-abstraction/contracts": "^0.6.0", - "@biconomy/core-types": "^3.1.2", - "@biconomy/node-client": "^3.1.2", + "@biconomy/core-types": "^3.1.3", + "@biconomy/node-client": "^3.1.3", "@ethersproject/abi": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/providers": "^5.7.0", diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 57494be26..42d74006e 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/core-types", - "version": "3.1.2", + "version": "3.1.3", "description": "Biconomy Client SDK types", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/modules/package.json b/packages/modules/package.json index 87d27f38d..68b5ff7c8 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/modules", - "version": "3.1.2", + "version": "3.1.3", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -35,9 +35,9 @@ }, "dependencies": { "@alchemy/aa-core": "^1.2.2", - "@biconomy/common": "^3.1.2", - "@biconomy/core-types": "^3.1.2", - "@biconomy/node-client": "^3.1.2", + "@biconomy/common": "^3.1.3", + "@biconomy/core-types": "^3.1.3", + "@biconomy/node-client": "^3.1.3", "ethereumjs-util": "^7.1.5", "ethers": "^5.7.2", "merkletreejs": "^0.3.9" diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 156073163..df7bfc0d9 100644 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/node-client", - "version": "3.1.2", + "version": "3.1.3", "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -66,7 +66,7 @@ "access": "public" }, "dependencies": { - "@biconomy/core-types": "^3.1.2", + "@biconomy/core-types": "^3.1.3", "@ethersproject/abstract-signer": "^5.6.0", "@nomiclabs/hardhat-ethers": "^2.1.0", "node-fetch": "^2.6.6" diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index fa17d2f83..af925f88a 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/particle-auth", - "version": "3.1.2", + "version": "3.1.3", "description": "Particle auth for Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index 25cba76c6..2ffd27699 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/paymaster", - "version": "3.1.2", + "version": "3.1.3", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", @@ -37,8 +37,8 @@ "access": "public" }, "dependencies": { - "@biconomy/common": "^3.1.2", - "@biconomy/core-types": "^3.1.2", + "@biconomy/common": "^3.1.3", + "@biconomy/core-types": "^3.1.3", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/properties": "^5.7.0", "ethers": "^5.7.0" diff --git a/packages/transak/package.json b/packages/transak/package.json index 3ecdfea33..4e523be85 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/transak", - "version": "3.1.2", + "version": "3.1.3", "description": "transak for biconomy sdk", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", From 492bb74022013e05f6eed1ccf8ae8a7700c42ff5 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 16 Jan 2024 14:06:16 +0400 Subject: [PATCH 1021/1247] fix issues with address and update gitignore --- .gitignore | 3 +++ packages/account/tests/modules/utils/customSession.ts | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index b7856aac4..b336b0e80 100644 --- a/.gitignore +++ b/.gitignore @@ -67,6 +67,9 @@ packages/transak/package-lock.json package-lock.json yarn.lock +#session storage files +packages/account/tests/modules/utils/sessionStorageData + # Typechain typechain diff --git a/packages/account/tests/modules/utils/customSession.ts b/packages/account/tests/modules/utils/customSession.ts index d688701be..c2d1230bc 100644 --- a/packages/account/tests/modules/utils/customSession.ts +++ b/packages/account/tests/modules/utils/customSession.ts @@ -2,7 +2,7 @@ import * as fs from "fs"; import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; import { SignerData } from "@biconomy/modules/src"; import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; -import { createWalletClient, http } from "viem"; +import { Hex, createWalletClient, http } from "viem"; import { polygonMumbai } from "viem/chains"; import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "@biconomy/modules/src/interfaces/ISessionStorage"; @@ -87,8 +87,8 @@ export class SessionFileStorage implements ISessionStorage { return `${this.smartAccountAddress}_${type}`; } - private toLowercaseAddress(address: string): `0x${string}` { - return `0x${address.toLowerCase()}`; + private toLowercaseAddress(address: string): Hex { + return address.toLowerCase() as Hex; } async getSessionData(): Promise { From 91353fbf7615dcdf91a549cdfc18727ab69ca6dd Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Tue, 16 Jan 2024 12:06:48 +0000 Subject: [PATCH 1022/1247] linkAll improvement --- linkAll.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/linkAll.sh b/linkAll.sh index 6e9f511b6..6c808abef 100755 --- a/linkAll.sh +++ b/linkAll.sh @@ -1,2 +1,3 @@ !/bin/sh -for dir in ./packages/*; do (cd "$dir" && yarn link); done \ No newline at end of file +for dir in ./packages/*; do (cd "$dir" && yarn link); done +cd ./packages/account && yarn link '@biconomy/bundler' '@biconomy/modules' '@biconomy/paymaster' \ No newline at end of file From 1443c49df85385db4e3e79ff330d3648d48909f0 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Tue, 16 Jan 2024 12:09:01 +0000 Subject: [PATCH 1023/1247] watch package builds cont --- packages/account/.esbuild.js | 65 +++++++++++++++-------------- packages/account/package.json | 1 + packages/bundler/.esbuild.js | 65 +++++++++++++++-------------- packages/bundler/package.json | 7 +++- packages/modules/.esbuild.js | 65 +++++++++++++++-------------- packages/modules/package.json | 2 + packages/particle-auth/.esbuild.js | 65 +++++++++++++++-------------- packages/particle-auth/package.json | 2 + packages/paymaster/.esbuild.js | 65 +++++++++++++++-------------- packages/paymaster/package.json | 2 + packages/transak/.esbuild.js | 65 +++++++++++++++-------------- packages/transak/package.json | 1 + 12 files changed, 212 insertions(+), 193 deletions(-) diff --git a/packages/account/.esbuild.js b/packages/account/.esbuild.js index 6be406cce..124f56671 100644 --- a/packages/account/.esbuild.js +++ b/packages/account/.esbuild.js @@ -1,48 +1,48 @@ const esbuildPluginTsc = require("esbuild-plugin-tsc"); const esbuild = require("esbuild"); -const { dependencies, peerDependencies = {} } = require('./package.json') -const { Generator } = require('npm-dts'); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); const COMMON_SETTINGS = { entryPoints: ["src/index.ts"], minify: true, bundle: true, external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), -} + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ], +}; -const buildForESM = async () => - await esbuild.build({ - ...COMMON_SETTINGS, - outfile: "dist/esm/index.js", - platform: "neutral", - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ] - }); +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + outfile: "dist/esm/index.js", + platform: "neutral", +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); -const buildForCJS = async () => - await esbuild.build({ - ...COMMON_SETTINGS, - format: 'cjs', - outfile: "dist/src/index.js", - sourcemap: true, - platform: "node", - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ], - }); +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + outfile: "dist/src/index.js", + sourcemap: true, + platform: "node", +}; -const buildForTYP = async () => new Generator({ - entry: 'src/index.ts', - output: 'dist/src/index.d.ts', -}).generate(); +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); (async () => { const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; if (!buildType) { console.log("No build type provided"); process.exit(1); @@ -51,7 +51,8 @@ const buildForTYP = async () => new Generator({ if (buildType === "ESM") { await buildForESM(); } else if (buildType === "CJS") { - await buildForCJS(); + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); } else if (buildType === "TYP") { await buildForTYP(); } diff --git a/packages/account/package.json b/packages/account/package.json index d1994e484..b9bc171d6 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -17,6 +17,7 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", + "build:watch": "node .esbuild.js CJS --watch", "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", "build:cjs": "node .esbuild.js CJS", "build:esm": "node .esbuild.js ESM", diff --git a/packages/bundler/.esbuild.js b/packages/bundler/.esbuild.js index 6be406cce..124f56671 100644 --- a/packages/bundler/.esbuild.js +++ b/packages/bundler/.esbuild.js @@ -1,48 +1,48 @@ const esbuildPluginTsc = require("esbuild-plugin-tsc"); const esbuild = require("esbuild"); -const { dependencies, peerDependencies = {} } = require('./package.json') -const { Generator } = require('npm-dts'); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); const COMMON_SETTINGS = { entryPoints: ["src/index.ts"], minify: true, bundle: true, external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), -} + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ], +}; -const buildForESM = async () => - await esbuild.build({ - ...COMMON_SETTINGS, - outfile: "dist/esm/index.js", - platform: "neutral", - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ] - }); +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + outfile: "dist/esm/index.js", + platform: "neutral", +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); -const buildForCJS = async () => - await esbuild.build({ - ...COMMON_SETTINGS, - format: 'cjs', - outfile: "dist/src/index.js", - sourcemap: true, - platform: "node", - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ], - }); +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + outfile: "dist/src/index.js", + sourcemap: true, + platform: "node", +}; -const buildForTYP = async () => new Generator({ - entry: 'src/index.ts', - output: 'dist/src/index.d.ts', -}).generate(); +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); (async () => { const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; if (!buildType) { console.log("No build type provided"); process.exit(1); @@ -51,7 +51,8 @@ const buildForTYP = async () => new Generator({ if (buildType === "ESM") { await buildForESM(); } else if (buildType === "CJS") { - await buildForCJS(); + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); } else if (buildType === "TYP") { await buildForTYP(); } diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 3c0828cb3..f5fa283e2 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -17,7 +17,12 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build:watch": "node .esbuild.js CJS --watch", + "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", + "build:cjs": "node .esbuild.js CJS", + "build:esm": "node .esbuild.js ESM", + "build:typ": "tsc -noEmit && node .esbuild.js TYP", + "build:tsc": "rimraf dist && tsc", "test:file": "jest --config=../../jest.config.js --runInBand", "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:run": "jest tests/**/*.spec.ts --runInBand", diff --git a/packages/modules/.esbuild.js b/packages/modules/.esbuild.js index 6be406cce..124f56671 100644 --- a/packages/modules/.esbuild.js +++ b/packages/modules/.esbuild.js @@ -1,48 +1,48 @@ const esbuildPluginTsc = require("esbuild-plugin-tsc"); const esbuild = require("esbuild"); -const { dependencies, peerDependencies = {} } = require('./package.json') -const { Generator } = require('npm-dts'); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); const COMMON_SETTINGS = { entryPoints: ["src/index.ts"], minify: true, bundle: true, external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), -} + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ], +}; -const buildForESM = async () => - await esbuild.build({ - ...COMMON_SETTINGS, - outfile: "dist/esm/index.js", - platform: "neutral", - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ] - }); +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + outfile: "dist/esm/index.js", + platform: "neutral", +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); -const buildForCJS = async () => - await esbuild.build({ - ...COMMON_SETTINGS, - format: 'cjs', - outfile: "dist/src/index.js", - sourcemap: true, - platform: "node", - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ], - }); +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + outfile: "dist/src/index.js", + sourcemap: true, + platform: "node", +}; -const buildForTYP = async () => new Generator({ - entry: 'src/index.ts', - output: 'dist/src/index.d.ts', -}).generate(); +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); (async () => { const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; if (!buildType) { console.log("No build type provided"); process.exit(1); @@ -51,7 +51,8 @@ const buildForTYP = async () => new Generator({ if (buildType === "ESM") { await buildForESM(); } else if (buildType === "CJS") { - await buildForCJS(); + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); } else if (buildType === "TYP") { await buildForTYP(); } diff --git a/packages/modules/package.json b/packages/modules/package.json index 2b321e60d..ab7759c46 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -17,10 +17,12 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", + "build:watch": "node .esbuild.js CJS --watch", "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", "build:cjs": "node .esbuild.js CJS", "build:esm": "node .esbuild.js ESM", "build:typ": "tsc -noEmit && node .esbuild.js TYP", + "build:tsc": "rimraf dist && tsc", "test:file": "TS_NODE_PROJECT=../../tsconfig.json mocha -r ts-node/register --timeout 30000", "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:cov": "jest --coverage", diff --git a/packages/particle-auth/.esbuild.js b/packages/particle-auth/.esbuild.js index 6be406cce..124f56671 100644 --- a/packages/particle-auth/.esbuild.js +++ b/packages/particle-auth/.esbuild.js @@ -1,48 +1,48 @@ const esbuildPluginTsc = require("esbuild-plugin-tsc"); const esbuild = require("esbuild"); -const { dependencies, peerDependencies = {} } = require('./package.json') -const { Generator } = require('npm-dts'); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); const COMMON_SETTINGS = { entryPoints: ["src/index.ts"], minify: true, bundle: true, external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), -} + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ], +}; -const buildForESM = async () => - await esbuild.build({ - ...COMMON_SETTINGS, - outfile: "dist/esm/index.js", - platform: "neutral", - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ] - }); +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + outfile: "dist/esm/index.js", + platform: "neutral", +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); -const buildForCJS = async () => - await esbuild.build({ - ...COMMON_SETTINGS, - format: 'cjs', - outfile: "dist/src/index.js", - sourcemap: true, - platform: "node", - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ], - }); +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + outfile: "dist/src/index.js", + sourcemap: true, + platform: "node", +}; -const buildForTYP = async () => new Generator({ - entry: 'src/index.ts', - output: 'dist/src/index.d.ts', -}).generate(); +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); (async () => { const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; if (!buildType) { console.log("No build type provided"); process.exit(1); @@ -51,7 +51,8 @@ const buildForTYP = async () => new Generator({ if (buildType === "ESM") { await buildForESM(); } else if (buildType === "CJS") { - await buildForCJS(); + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); } else if (buildType === "TYP") { await buildForTYP(); } diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 511e67f64..008073b5b 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -27,10 +27,12 @@ }, "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", + "build:watch": "node .esbuild.js CJS --watch", "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", "build:cjs": "node .esbuild.js CJS", "build:esm": "node .esbuild.js ESM", "build:typ": "tsc -noEmit && node .esbuild.js TYP", + "build:tsc": "rimraf dist && tsc", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, diff --git a/packages/paymaster/.esbuild.js b/packages/paymaster/.esbuild.js index 6be406cce..124f56671 100644 --- a/packages/paymaster/.esbuild.js +++ b/packages/paymaster/.esbuild.js @@ -1,48 +1,48 @@ const esbuildPluginTsc = require("esbuild-plugin-tsc"); const esbuild = require("esbuild"); -const { dependencies, peerDependencies = {} } = require('./package.json') -const { Generator } = require('npm-dts'); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); const COMMON_SETTINGS = { entryPoints: ["src/index.ts"], minify: true, bundle: true, external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), -} + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ], +}; -const buildForESM = async () => - await esbuild.build({ - ...COMMON_SETTINGS, - outfile: "dist/esm/index.js", - platform: "neutral", - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ] - }); +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + outfile: "dist/esm/index.js", + platform: "neutral", +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); -const buildForCJS = async () => - await esbuild.build({ - ...COMMON_SETTINGS, - format: 'cjs', - outfile: "dist/src/index.js", - sourcemap: true, - platform: "node", - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ], - }); +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + outfile: "dist/src/index.js", + sourcemap: true, + platform: "node", +}; -const buildForTYP = async () => new Generator({ - entry: 'src/index.ts', - output: 'dist/src/index.d.ts', -}).generate(); +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); (async () => { const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; if (!buildType) { console.log("No build type provided"); process.exit(1); @@ -51,7 +51,8 @@ const buildForTYP = async () => new Generator({ if (buildType === "ESM") { await buildForESM(); } else if (buildType === "CJS") { - await buildForCJS(); + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); } else if (buildType === "TYP") { await buildForTYP(); } diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index 6d2d15236..d919b9877 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -17,10 +17,12 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", + "build:watch": "node .esbuild.js CJS --watch", "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", "build:cjs": "node .esbuild.js CJS", "build:esm": "node .esbuild.js ESM", "build:typ": "tsc -noEmit && node .esbuild.js TYP", + "build:tsc": "rimraf dist && tsc", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json", "test": "jest tests/**/*.spec.ts --runInBand" diff --git a/packages/transak/.esbuild.js b/packages/transak/.esbuild.js index 6be406cce..124f56671 100644 --- a/packages/transak/.esbuild.js +++ b/packages/transak/.esbuild.js @@ -1,48 +1,48 @@ const esbuildPluginTsc = require("esbuild-plugin-tsc"); const esbuild = require("esbuild"); -const { dependencies, peerDependencies = {} } = require('./package.json') -const { Generator } = require('npm-dts'); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); const COMMON_SETTINGS = { entryPoints: ["src/index.ts"], minify: true, bundle: true, external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), -} + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ], +}; -const buildForESM = async () => - await esbuild.build({ - ...COMMON_SETTINGS, - outfile: "dist/esm/index.js", - platform: "neutral", - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ] - }); +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + outfile: "dist/esm/index.js", + platform: "neutral", +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); -const buildForCJS = async () => - await esbuild.build({ - ...COMMON_SETTINGS, - format: 'cjs', - outfile: "dist/src/index.js", - sourcemap: true, - platform: "node", - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ], - }); +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + outfile: "dist/src/index.js", + sourcemap: true, + platform: "node", +}; -const buildForTYP = async () => new Generator({ - entry: 'src/index.ts', - output: 'dist/src/index.d.ts', -}).generate(); +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); (async () => { const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; if (!buildType) { console.log("No build type provided"); process.exit(1); @@ -51,7 +51,8 @@ const buildForTYP = async () => new Generator({ if (buildType === "ESM") { await buildForESM(); } else if (buildType === "CJS") { - await buildForCJS(); + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); } else if (buildType === "TYP") { await buildForTYP(); } diff --git a/packages/transak/package.json b/packages/transak/package.json index 3e2d5b900..03efb0c5d 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -26,6 +26,7 @@ }, "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", + "build:watch": "node .esbuild.js CJS --watch", "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", "build:cjs": "node .esbuild.js CJS", "build:esm": "node .esbuild.js ESM", From 946426441174c8453f0f06f7b3134dde0dde12f4 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 16 Jan 2024 16:30:28 +0200 Subject: [PATCH 1024/1247] WIP Session module --- .../sessionValidationModule.e2e.spec.ts | 61 ++++++++++++------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/packages/account/tests/modules/sessionValidationModule.e2e.spec.ts b/packages/account/tests/modules/sessionValidationModule.e2e.spec.ts index 904c617cb..d398671eb 100644 --- a/packages/account/tests/modules/sessionValidationModule.e2e.spec.ts +++ b/packages/account/tests/modules/sessionValidationModule.e2e.spec.ts @@ -1,7 +1,7 @@ import { DEFAULT_SESSION_KEY_MANAGER_MODULE, SessionKeyManagerModule } from "@biconomy/modules"; import { SessionFileStorage } from "./utils/customSession"; import { privateKeyToAccount } from "viem/accounts"; -import { createSmartWalletClient } from "../../src/index"; +import { WalletClientSigner, createSmartWalletClient } from "../../src/index"; import { Hex, createWalletClient, encodeAbiParameters, encodeFunctionData, getContract, http, parseAbi, parseUnits, toHex } from "viem"; import { PaymasterMode } from "@biconomy/paymaster"; @@ -92,34 +92,37 @@ describe("Account Tests", () => { it("Should send a user op using Session Validation Module", async () => { try { + // Creating wallet and session const wallet = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_ONE}`); const sessionKeyEOA = wallet.address; + let sessionSigner: WalletClientSigner; - await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey: `0x${process.env.E2E_PRIVATE_KEY_ONE}` }); + try { + sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); + } catch (error) { + sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey: `0x${process.env.E2E_PRIVATE_KEY_ONE}` }); + } - const addedSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); + expect(sessionSigner).toBeTruthy(); - expect(addedSigner).toBeTruthy(); - - const smartWallet = await createSmartWalletClient({ + // Create smart account + let smartWallet = await createSmartWalletClient({ chainId: 80001, - signer: addedSigner, + signer: sessionSigner, bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", biconomyPaymasterApiKey: "nxPxZluSF.aeacea05-e564-4bd2-b8d8-94a8167fb192", }); + // Create session module const sessionModule = await SessionKeyManagerModule.create({ moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, smartAccountAddress: await smartWallet.getAddress(), sessionStorageClient: sessionFileStorage, }); - smartWallet.setActiveValidationModule(sessionModule); - - smartWallet.activeValidationModule = sessionModule; - - const txArray: any = []; + smartWallet = smartWallet.setActiveValidationModule(sessionModule); + // Set enabled call on session const sessionKeyData = encodeAbiParameters( [{ type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }], [ @@ -128,7 +131,7 @@ describe("Account Tests", () => { "0xfCF6Eb210E5Fd84D679b14fe170f9aB05C9B21e7", // receiver address parseUnits("1", 6), ], - ); // 1 usdc amount]) + ); const erc20ModuleAddr = "0x000000D50C68705bd6897B2d17c7de32FB519fDA"; @@ -148,7 +151,21 @@ describe("Account Tests", () => { value: 0, }; - txArray.push(setSessionAllowedTrx); + // Check if module is enabled + const isEnabled = await smartWallet.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); + if (!isEnabled) { + const txArray: any = []; + const enableModuleTrx = await smartWallet.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); + txArray.push(enableModuleTrx); + txArray.push(setSessionAllowedTrx); + + const userOp = await smartWallet.buildUserOp(txArray, { + skipBundlerGasEstimation: false, + }); + await smartWallet.sendUserOp(userOp); + } else { + console.log("MODULE ALREADY ENABLED"); + } const encodedCall = encodeFunctionData({ abi: parseAbi(["function transfer(address receiver)"]), @@ -156,27 +173,27 @@ describe("Account Tests", () => { args: ["0xfCF6Eb210E5Fd84D679b14fe170f9aB05C9B21e7"], }); - const tx1 = { + const transferTx = { to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", //erc20 token address data: encodedCall, value: 0, }; - txArray.push(tx1); - - const mintUserOp = await smartWallet.buildUserOp(txArray, { + console.log("BEFORE Transfer tx"); + const transferUserOp = await smartWallet.buildUserOp([transferTx], { skipBundlerGasEstimation: false, params: { - sessionSigner: addedSigner, + sessionSigner: sessionSigner, sessionValidationModule: erc20ModuleAddr, }, }); + console.log("AFTER Transfer tx"); - const mintUserOpResponse = await smartWallet.sendUserOp(mintUserOp, { - sessionSigner: addedSigner, + const userOpResponse = await smartWallet.sendUserOp(transferUserOp, { + sessionSigner: sessionSigner, sessionValidationModule: erc20ModuleAddr, }); - console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${mintUserOpResponse.userOpHash}?network=mumbai`); + console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse.userOpHash}?network=mumbai`); } catch (error) { console.log(error); } From 35fc3d38bb24b6d0d2e6ed6d0304d5337e6a7717 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 16 Jan 2024 19:46:02 +0200 Subject: [PATCH 1025/1247] Added tests for multi-chain validation and session validation --- .env.example | 3 +- packages/account/tests/account.e2e.spec.ts | 72 +--------- .../multiChainValidationModule.e2e.spec.ts | 39 +++--- .../sessionValidationModule.e2e.spec.ts | 132 ++++-------------- 4 files changed, 56 insertions(+), 190 deletions(-) diff --git a/.env.example b/.env.example index 915f7980c..4c3d5bb12 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ E2E_PRIVATE_KEY_ONE= E2E_PRIVATE_KEY_TWO= -E2E_BICO_PAYMASTER_KEY_MUMBAI= \ No newline at end of file +E2E_BICO_PAYMASTER_KEY_MUMBAI= +E2E_BICO_PAYMASTER_KEY_BASE= \ No newline at end of file diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 4d5d83a15..b98591c5d 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,11 +1,9 @@ import { BiconomyPaymaster, PaymasterMode } from "@biconomy/paymaster"; import { TestData } from "."; -import { BiconomyAccountProvider, BiconomySmartAccountV2, createSmartWalletClient } from "../src/index"; -import { Hex, createWalletClient, encodeFunctionData, http, parseAbi } from "viem"; -import { UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; +import { createSmartWalletClient } from "../src/index"; +import { Hex, encodeFunctionData, parseAbi } from "viem"; +import { UserOperationStruct} from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "./utils"; -import { privateKeyToAccount } from "viem/accounts"; -import { base, baseGoerli } from "viem/chains"; describe("Account Tests", () => { let chainData: TestData; @@ -72,7 +70,7 @@ describe("Account Tests", () => { const smartWallet = await createSmartWalletClient({ signer, bundlerUrl, - biconomyPaymasterApiKey + biconomyPaymasterApiKey, }); const paymaster: BiconomyPaymaster = smartWallet.paymaster as BiconomyPaymaster; @@ -101,70 +99,11 @@ describe("Account Tests", () => { partialUserOp.verificationGasLimit = paymasterData.verificationGasLimit; partialUserOp.preVerificationGas = paymasterData.preVerificationGas; - const result = smartWallet.sendUserOp(partialUserOp) - console.log(result); - const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; expect(newBalance).toEqual(balance); }, 60000); - it("Should gaslessly mint an NFT on Base Goerli", async () => { - - const { - whale: { publicAddress: recipient }, - } = chainData; - - const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; - const baseWallet = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_ONE}`); - - const baseClient = createWalletClient({ - account: baseWallet, - chain: baseGoerli, - transport: http(baseGoerli.rpcUrls.public.http[0]), - }); - - const baseSigner = new WalletClientSigner(baseClient, "json-rpc"); - - const baseAccount = await createSmartWalletClient({ - chainId: 84531, - signer: baseSigner, - bundlerUrl: "https://bundler.biconomy.io/api/v2/84531/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", - biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_BASE - }); - - expect(process.env.E2E_BICO_PAYMASTER_KEY_BASE).toBeTruthy(); - - const paymaster: BiconomyPaymaster = baseAccount.paymaster as BiconomyPaymaster; - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address to) public"]), - functionName: "safeMint", - args: [recipient], - }); - - const transaction = { - to: nftAddress, // NFT address - data: encodedCall, - value: 0, - }; - - const partialUserOp = await baseAccount.buildUserOp([transaction]); - - const paymasterData = await paymaster.getPaymasterAndData(partialUserOp, { - mode: PaymasterMode.SPONSORED, - }); - - partialUserOp.paymasterAndData = paymasterData.paymasterAndData; - partialUserOp.callGasLimit = paymasterData.callGasLimit; - partialUserOp.verificationGasLimit = paymasterData.verificationGasLimit; - partialUserOp.preVerificationGas = paymasterData.preVerificationGas; - - baseAccount.sendUserOp(partialUserOp); - - expect(partialUserOp).toBeTruthy(); - }, 60000); - it("#getUserOpHash should match entryPoint.getUserOpHash", async () => { const { whale: { viemWallet: signer }, @@ -239,7 +178,6 @@ describe("Account Tests", () => { bundlerUrl, }); - const module = (await smartWallet.getAllModules())[0]; - expect(ecdsaOwnershipModule).toBe(module); + expect(ecdsaOwnershipModule).toBe(smartWallet.activeValidationModule.getAddress()); }); }); diff --git a/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts b/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts index 99d95c6f3..673695e96 100644 --- a/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts +++ b/packages/account/tests/modules/multiChainValidationModule.e2e.spec.ts @@ -1,12 +1,11 @@ -import { BiconomyPaymaster, PaymasterMode, SponsorUserOperationDto } from "@biconomy/paymaster"; +import { BiconomyPaymaster, PaymasterMode } from "@biconomy/paymaster"; import { TestData } from ".."; -import { BiconomySmartAccountV2, createSmartWalletClient } from "../../src/index"; +import { createSmartWalletClient } from "../../src/index"; import { Hex, createWalletClient, encodeFunctionData, http, parseAbi } from "viem"; -import { UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; -import { checkBalance, entryPointABI } from "../utils"; +import { WalletClientSigner } from "@alchemy/aa-core"; import { DEFAULT_MULTICHAIN_MODULE, MultiChainValidationModule } from "@biconomy/modules"; import { privateKeyToAccount } from "viem/accounts"; -import { base, baseGoerli } from "viem/chains"; +import { baseGoerli } from "viem/chains"; describe("Account with MultiChainValidation Module Tests", () => { let chainData: TestData; @@ -26,8 +25,8 @@ describe("Account with MultiChainValidation Module Tests", () => { const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; const multiChainModule = await MultiChainValidationModule.create({ - signer: alchemyWalletClientSigner, - moduleAddress: DEFAULT_MULTICHAIN_MODULE, + signer: alchemyWalletClientSigner, + moduleAddress: DEFAULT_MULTICHAIN_MODULE, }); const polygonAccount = await createSmartWalletClient({ @@ -36,7 +35,7 @@ describe("Account with MultiChainValidation Module Tests", () => { bundlerUrl, defaultValidationModule: multiChainModule, activeValidationModule: multiChainModule, - biconomyPaymasterApiKey + biconomyPaymasterApiKey, }); const polygonPaymaster: BiconomyPaymaster = polygonAccount.paymaster as BiconomyPaymaster; @@ -55,7 +54,7 @@ describe("Account with MultiChainValidation Module Tests", () => { bundlerUrl: "https://bundler.biconomy.io/api/v2/84531/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", defaultValidationModule: multiChainModule, activeValidationModule: multiChainModule, - biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_BASE + biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_BASE, }); const basePaymaster: BiconomyPaymaster = baseAccount.paymaster as BiconomyPaymaster; @@ -67,13 +66,13 @@ describe("Account with MultiChainValidation Module Tests", () => { }); const transaction = { - to: nftAddress, + to: nftAddress, data: encodedCall, value: 0, }; - let partialUserOp1 = await baseAccount.buildUserOp([transaction]); - let partialUserOp2 = await polygonAccount.buildUserOp([transaction]); + const partialUserOp1 = await baseAccount.buildUserOp([transaction]); + const partialUserOp2 = await polygonAccount.buildUserOp([transaction]); // Setup paymaster and data for base account const basePaymasterData = await basePaymaster.getPaymasterAndData(partialUserOp1, { @@ -96,17 +95,19 @@ describe("Account with MultiChainValidation Module Tests", () => { partialUserOp2.preVerificationGas = polygonPaymasterData.preVerificationGas; // Sign the user ops using multiChainModule - const returnedOps = await multiChainModule.signUserOps([{userOp: partialUserOp1, chainId: 84531}, {userOp: partialUserOp2, chainId: 80001}]); + const returnedOps = await multiChainModule.signUserOps([ + { userOp: partialUserOp1, chainId: 84531 }, + { userOp: partialUserOp2, chainId: 80001 }, + ]); // Send the signed user ops on both chains - const userOpResponse1 = await baseAccount.sendSignedUserOp(returnedOps[0] as any) - const userOpResponse2 = await polygonAccount.sendSignedUserOp(returnedOps[1] as any) + const userOpResponse1 = await baseAccount.sendSignedUserOp(returnedOps[0] as any); + const userOpResponse2 = await polygonAccount.sendSignedUserOp(returnedOps[1] as any); - console.log(userOpResponse1.userOpHash, 'BASE USER OP HASH'); - console.log(userOpResponse2.userOpHash, 'POLYGON USER OP HASH'); + console.log(userOpResponse1.userOpHash, "MULTICHAIN BASE USER OP HASH"); + console.log(userOpResponse2.userOpHash, "MULTICHAIN POLYGON USER OP HASH"); expect(userOpResponse1.userOpHash).toBeTruthy(); expect(userOpResponse2.userOpHash).toBeTruthy(); - }, 30000); -}); \ No newline at end of file +}); diff --git a/packages/account/tests/modules/sessionValidationModule.e2e.spec.ts b/packages/account/tests/modules/sessionValidationModule.e2e.spec.ts index d398671eb..aa3a9f786 100644 --- a/packages/account/tests/modules/sessionValidationModule.e2e.spec.ts +++ b/packages/account/tests/modules/sessionValidationModule.e2e.spec.ts @@ -2,98 +2,16 @@ import { DEFAULT_SESSION_KEY_MANAGER_MODULE, SessionKeyManagerModule } from "@bi import { SessionFileStorage } from "./utils/customSession"; import { privateKeyToAccount } from "viem/accounts"; import { WalletClientSigner, createSmartWalletClient } from "../../src/index"; -import { Hex, createWalletClient, encodeAbiParameters, encodeFunctionData, getContract, http, parseAbi, parseUnits, toHex } from "viem"; -import { PaymasterMode } from "@biconomy/paymaster"; +import { Hex, encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "viem"; describe("Account Tests", () => { const sessionFileStorage: SessionFileStorage = new SessionFileStorage(DEFAULT_SESSION_KEY_MANAGER_MODULE); - // it("Should create custom session storage", async () => { - // const wallet = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_ONE}`); - // const sessionKeyEOA = wallet.address; - - // await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey: "0x2e5d78c6f2e6dca5fcbb22cca841d6c43465c483f59cbd6839a24d4ec89b977b" }); - - // const addedSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); - - // expect(addedSigner).toBeTruthy(); - // }); - - // it("Should create and setup Session Module", async () => { - // try { - // const wallet = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_ONE}`); - // const sessionKeyEOA = wallet.address; - - // await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey: `0x${process.env.E2E_PRIVATE_KEY_ONE}` }); - - // const addedSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); - - // expect(addedSigner).toBeTruthy(); - - // const smartWallet = await createSmartWalletClient({ - // chainId: 80001, - // signer: addedSigner, - // bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", - // biconomyPaymasterApiKey: "nxPxZluSF.aeacea05-e564-4bd2-b8d8-94a8167fb192", - // }); - - // const sessionModule = await SessionKeyManagerModule.create({ - // moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, - // smartAccountAddress: await smartWallet.getAddress(), - // sessionStorageClient: sessionFileStorage, - // }); - - // const sessionKeyData = encodeAbiParameters([{ name: "owner", type: "address" }], ["0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549"]); - - // const sessionTxData = await sessionModule.createSessionData([ - // { - // validUntil: 0, - // validAfter: 0, - // sessionValidationModule: DEFAULT_SESSION_KEY_MANAGER_MODULE, - // sessionPublicKey: sessionKeyEOA, - // sessionKeyData: sessionKeyData, - // }, - // ]); - - // const setSessionAllowedTrx = { - // to: DEFAULT_SESSION_KEY_MANAGER_MODULE, - // data: sessionTxData.data, - // value: 0, - // }; - - // const txArray: any = []; - - // const isEnabled = await smartWallet.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); - // if (!isEnabled) { - // console.log("MODULE NOT ENABLED"); - // const enableModuleTrx = await smartWallet.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); - // txArray.push(enableModuleTrx); - // } else { - // console.log("MODULE ALREADY ENABLED"); - // } - - // txArray.push(setSessionAllowedTrx); - - // const partialUserOp = await smartWallet.buildUserOp(txArray, { - // paymasterServiceData: { - // mode: PaymasterMode.SPONSORED, - // }, - // }); - - // const userOpResponse = await smartWallet.sendUserOp(partialUserOp); - // console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse.userOpHash}?network=mumbai`); - - // const transactionDetails = await userOpResponse.wait(); - // console.log("txHash", transactionDetails.receipt.transactionHash); - // } catch (error) { - // console.log(error); - // } - // }, 50000); - it("Should send a user op using Session Validation Module", async () => { try { - // Creating wallet and session + // Creating wallet and session const wallet = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_ONE}`); + const recipient = privateKeyToAccount(`0x${process.env.E2E_PRIVATE_KEY_TWO}`); const sessionKeyEOA = wallet.address; let sessionSigner: WalletClientSigner; @@ -111,6 +29,7 @@ describe("Account Tests", () => { signer: sessionSigner, bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", biconomyPaymasterApiKey: "nxPxZluSF.aeacea05-e564-4bd2-b8d8-94a8167fb192", + index: 1, // Increasing index to not conflict with other test cases and use a new smart account }); // Create session module @@ -120,16 +39,14 @@ describe("Account Tests", () => { sessionStorageClient: sessionFileStorage, }); - smartWallet = smartWallet.setActiveValidationModule(sessionModule); - // Set enabled call on session const sessionKeyData = encodeAbiParameters( [{ type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }], [ sessionKeyEOA, "0xdA5289fCAAF71d52a80A254da614a192b693e977", // erc20 token address - "0xfCF6Eb210E5Fd84D679b14fe170f9aB05C9B21e7", // receiver address - parseUnits("1", 6), + recipient.address, // receiver address + parseUnits("10", 6), ], ); @@ -151,26 +68,32 @@ describe("Account Tests", () => { value: 0, }; + const txArray: any = []; + // Check if module is enabled + const isEnabled = await smartWallet.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); if (!isEnabled) { - const txArray: any = []; const enableModuleTrx = await smartWallet.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); txArray.push(enableModuleTrx); txArray.push(setSessionAllowedTrx); - - const userOp = await smartWallet.buildUserOp(txArray, { - skipBundlerGasEstimation: false, - }); - await smartWallet.sendUserOp(userOp); } else { console.log("MODULE ALREADY ENABLED"); + txArray.push(setSessionAllowedTrx); } + const userOp = await smartWallet.buildUserOp(txArray, { + skipBundlerGasEstimation: false, + }); + + const userOpResponse1 = await smartWallet.sendUserOp(userOp); + const transactionDetails = await userOpResponse1.wait(); + console.log("Tx Hash: ", transactionDetails.receipt.transactionHash); + const encodedCall = encodeFunctionData({ - abi: parseAbi(["function transfer(address receiver)"]), + abi: parseAbi(["function transfer(address _to, uint256 _value)"]), functionName: "transfer", - args: ["0xfCF6Eb210E5Fd84D679b14fe170f9aB05C9B21e7"], + args: [recipient.address, parseUnits("0.01", 6)], }); const transferTx = { @@ -179,24 +102,27 @@ describe("Account Tests", () => { value: 0, }; - console.log("BEFORE Transfer tx"); + smartWallet = smartWallet.setActiveValidationModule(sessionModule); + const transferUserOp = await smartWallet.buildUserOp([transferTx], { skipBundlerGasEstimation: false, params: { sessionSigner: sessionSigner, - sessionValidationModule: erc20ModuleAddr, + sessionValidationModule: erc20ModuleAddr.toLowerCase() as Hex, }, }); - console.log("AFTER Transfer tx"); - const userOpResponse = await smartWallet.sendUserOp(transferUserOp, { + const userOpResponse2 = await smartWallet.sendUserOp(transferUserOp, { sessionSigner: sessionSigner, sessionValidationModule: erc20ModuleAddr, }); - console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse.userOpHash}?network=mumbai`); + + expect(userOpResponse2.userOpHash).toBeTruthy(); + expect(userOpResponse2.userOpHash).not.toBeNull(); + + console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); } catch (error) { console.log(error); } }, 50000); }); - From 24e6f805338e4b2882fd1acd64a656452a9b2986 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 17 Jan 2024 10:33:40 +0000 Subject: [PATCH 1026/1247] unit tests fix --- tests/setup-unit-tests.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/setup-unit-tests.ts b/tests/setup-unit-tests.ts index 08f2789d9..b7bd7b66b 100644 --- a/tests/setup-unit-tests.ts +++ b/tests/setup-unit-tests.ts @@ -1,12 +1,12 @@ import { createWalletClient, http, createPublicClient } from "viem"; -import { privateKeyToAccount, generatePrivateKey, mnemonicToAccount } from "viem/accounts"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; import { WalletClientSigner } from "@alchemy/aa-core"; import { UNIT_TEST_CHAIN } from "./chains.config"; beforeAll(() => { const { chainId, bundlerUrl, viemChain, entryPointAddress } = UNIT_TEST_CHAIN; const privateKeyOne = generatePrivateKey(); - const accountOne = mnemonicToAccount(privateKeyOne); + const accountOne = privateKeyToAccount(privateKeyOne); const viemWalletClientOne = createWalletClient({ account: accountOne, chain: viemChain, From 8391697a1420dcc5a439e08c22c2938158a95be4 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 17 Jan 2024 10:36:42 +0000 Subject: [PATCH 1027/1247] Remove duplicate test --- packages/account/tests/account.e2e.spec.ts | 45 ---------------------- 1 file changed, 45 deletions(-) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 1b6aef3ce..a27f52727 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -106,51 +106,6 @@ describe("Account Tests", () => { expect(newBalance).toEqual(balance); }, 60000); - it("Should gaslessly mint an NFT on Base base", async () => { - const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; - - const { - whale: { viemWallet: signer, publicAddress: recipient }, - bundlerUrl, - biconomyPaymasterApiKey, - } = baseGoerli; - - const smartWallet = await createSmartWalletClient({ - signer, - bundlerUrl, - biconomyPaymasterApiKey, - }); - - const paymaster: BiconomyPaymaster = smartWallet.paymaster as BiconomyPaymaster; - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address to) public"]), - functionName: "safeMint", - args: [recipient], - }); - - const transaction = { - to: nftAddress, // NFT address - data: encodedCall, - value: 0, - }; - - const partialUserOp = await smartWallet.buildUserOp([transaction]); - - const paymasterData = await paymaster.getPaymasterAndData(partialUserOp, { - mode: PaymasterMode.SPONSORED, - }); - - partialUserOp.paymasterAndData = paymasterData.paymasterAndData; - partialUserOp.callGasLimit = paymasterData.callGasLimit; - partialUserOp.verificationGasLimit = paymasterData.verificationGasLimit; - partialUserOp.preVerificationGas = paymasterData.preVerificationGas; - - smartWallet.sendUserOp(partialUserOp); - - expect(partialUserOp).toBeTruthy(); - }, 60000); - it("#getUserOpHash should match entryPoint.getUserOpHash", async () => { const { whale: { viemWallet: signer }, From a02bf15b791be89e02afccdf09ad006806665feb Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 17 Jan 2024 10:38:12 +0000 Subject: [PATCH 1028/1247] revert tsconfig change --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index eb4e89598..f5557a831 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,7 +9,7 @@ "lib": ["es2020"], "types": ["node", "jest"] }, - "include": ["packages/**/*", "packages/modules/tests/utils", "packages/modules/tests/multiChainValidationModule.e2e.spec.ts", "packages/modules/tests/sessionValidationModule.e2e.spec.ts", "tests/index.d.ts"], + "include": ["packages/**/*"], "references": [ { "path": "./packages/transak" }, { "path": "./packages/bundler" }, From 335c6e7bfc5ca1ad240e7cbfd678d905c7f16812 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Wed, 17 Jan 2024 13:35:15 +0200 Subject: [PATCH 1029/1247] Added check for paymaster in BiconomySmartAccountV2 class --- .../account/src/BiconomySmartAccountV2.ts | 19 +++++- packages/account/src/index.ts | 1 - packages/account/src/provider.ts | 68 ------------------- packages/account/tests/account.e2e.spec.ts | 3 +- 4 files changed, 17 insertions(+), 74 deletions(-) delete mode 100644 packages/account/src/provider.ts diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index a4ef8238c..c13316928 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -21,7 +21,7 @@ import { import { BaseSmartContractAccount, getChain, type BigNumberish, type UserOperationStruct, BatchUserOperationCallData } from "@alchemy/aa-core"; import { isNullOrUndefined, packUserOp } from "./utils/Utils"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, ECDSAOwnershipValidationModule } from "@biconomy/modules"; -import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; +import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, SponsorUserOperationDto, PaymasterMode } from "@biconomy/paymaster"; import { Bundler, IBundler, UserOpResponse } from "@biconomy/bundler"; import { BiconomyTokenPaymasterRequest, @@ -429,10 +429,23 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * @param userOp * @param params - * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. + * @description This function call will setup paymaster values (if paymaster is used), take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. * @returns Promise */ async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { + if (this.paymaster !== undefined) { + try { + const paymasterData = await (this.paymaster as IHybridPaymaster).getPaymasterAndData(userOp, { + mode: PaymasterMode.SPONSORED, + }); + userOp.paymasterAndData = paymasterData.paymasterAndData; + userOp.callGasLimit = paymasterData.callGasLimit; + userOp.verificationGasLimit = paymasterData.verificationGasLimit; + userOp.preVerificationGas = paymasterData.preVerificationGas; + } catch (e: any) { + Logger.error("Error while fetching paymaster data", e); + } + } delete userOp.signature; const userOperation = await this.signUserOp(userOp, params); const bundlerResponse = await this.sendSignedUserOp(userOperation); @@ -566,7 +579,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param buildUseropDto options for building the userOp * @returns Promise */ - async sendTransaction(manyOrOneTransactions: Transaction | Transaction[], buildUseropDto?: BuildUserOpOptions) { + async sendTransaction(manyOrOneTransactions: Transaction | Transaction[], buildUseropDto?: BuildUserOpOptions): Promise { const userOp = await this.buildUserOp(Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions : [manyOrOneTransactions], buildUseropDto); return this.sendUserOp(userOp); } diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index 57663eb55..d22b98f67 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -4,7 +4,6 @@ import { BiconomySmartAccountV2Config } from "./utils/Types"; export * from "./utils/Types"; export * from "./utils/Constants"; export * from "./BiconomySmartAccountV2"; -export * from "./provider"; export { WalletClientSigner } from "@alchemy/aa-core"; export { BiconomyPaymaster as Paymaster, IPaymaster } from "@biconomy/paymaster"; diff --git a/packages/account/src/provider.ts b/packages/account/src/provider.ts deleted file mode 100644 index 39c9d134b..000000000 --- a/packages/account/src/provider.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { - BatchUserOperationCallData, - SmartAccountProvider, - UserOperationCallData, - UserOperationOverrides, - UserOperationStruct, -} from "@alchemy/aa-core"; -import type { Hex, HttpTransport } from "viem"; -import type { UserOpResponse } from "@biconomy/bundler"; -import { IHybridPaymaster, SponsorUserOperationDto, PaymasterMode } from "@biconomy/paymaster"; -import { BiconomySmartAccountV2 } from "./BiconomySmartAccountV2"; -import { Logger } from "./utils/Logger"; - -export class BiconomyAccountProvider extends SmartAccountProvider { - // Note: Not using the customMiddleware as it is the last stack happens but we need to update the signatures before the request is sent - buildUserOperation = async ( - data: UserOperationCallData | BatchUserOperationCallData, - _overrides?: UserOperationOverrides, - ): Promise => { - if (!this.account) { - throw new Error("account not connected!"); - } - - let callData: Hex; - if (Array.isArray(data)) { - callData = await this.account.encodeBatchExecute(data); - } else if (typeof data === "string") { - callData = data; - } else { - callData = await this.account.encodeExecute(data.target, data.value ?? BigInt(0), data.data); - } - const userOp = await (this.account as BiconomySmartAccountV2).estimateUserOpGas({ - sender: await this.getAddress(), - nonce: await this.account.getNonce(), - initCode: await this.account.getInitCode(), - signature: await (this.account as BiconomySmartAccountV2).getDummySignatures(), - callData: callData, - }); - - return userOp as UserOperationStruct; - }; - - sendUserOperations = async (data: UserOperationCallData | BatchUserOperationCallData): Promise => { - if (!this.account) { - throw new Error("account not connected"); - } - - const userOp = await this.buildUserOperation(data); - - const biconomyAccount = this.account as BiconomySmartAccountV2; - if (biconomyAccount.paymaster !== undefined) { - try { - const paymasterData = await (biconomyAccount.paymaster as IHybridPaymaster).getPaymasterAndData(userOp, { - mode: PaymasterMode.SPONSORED, - }); - userOp.paymasterAndData = paymasterData.paymasterAndData; - userOp.callGasLimit = paymasterData.callGasLimit; - userOp.verificationGasLimit = paymasterData.verificationGasLimit; - userOp.preVerificationGas = paymasterData.preVerificationGas; - } catch (e: any) { - Logger.error("Error while fetching paymaster data", e); - } - } - - const userOpResponse = await biconomyAccount.sendUserOp(userOp); - return userOpResponse; - }; -} diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 38fbeb96a..cccca65c5 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -186,7 +186,6 @@ describe("Account Tests", () => { bundlerUrl, }); - const module = (await smartWallet.getAllModules())[0]; - expect(ecdsaOwnershipModule).toBe(module); + expect(ecdsaOwnershipModule).toBe(smartWallet.activeValidationModule.getAddress()); }); }); From f803c3d76f0d1084fc686fa226e27455f3d71d99 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Wed, 17 Jan 2024 13:46:17 +0200 Subject: [PATCH 1030/1247] Fixed session file storage path and gitignore --- .gitignore | 2 +- packages/modules/tests/utils/customSession.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index b336b0e80..ef1ec2394 100644 --- a/.gitignore +++ b/.gitignore @@ -68,7 +68,7 @@ package-lock.json yarn.lock #session storage files -packages/account/tests/modules/utils/sessionStorageData +packages/modules/tests/utils/sessionStorageData/* # Typechain typechain diff --git a/packages/modules/tests/utils/customSession.ts b/packages/modules/tests/utils/customSession.ts index f1cd9080d..00259536c 100644 --- a/packages/modules/tests/utils/customSession.ts +++ b/packages/modules/tests/utils/customSession.ts @@ -33,7 +33,7 @@ export class SessionFileStorage implements ISessionStorage { } private getStorageFilePath(type: "sessions" | "signers"): string { - return `./packages/account/tests/modules/utils/sessionStorageData/${this.smartAccountAddress}_${type}.json`; + return `./packages/modules/tests/utils/sessionStorageData/${this.smartAccountAddress}_${type}.json`; } private async writeDataToFile(data: any, type: "sessions" | "signers"): Promise { From 10d56307632d14603ef022711a5631e58ce4c7e7 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Wed, 17 Jan 2024 14:03:03 +0200 Subject: [PATCH 1031/1247] Fixed e2e nft mint test --- packages/account/tests/account.e2e.spec.ts | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index a27f52727..afd0a8129 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -90,20 +90,13 @@ describe("Account Tests", () => { }; const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const partialUserOp = await smartWallet.buildUserOp([transaction]); - const paymasterData = await paymaster.getPaymasterAndData(partialUserOp, { - mode: PaymasterMode.SPONSORED, - }); - - partialUserOp.paymasterAndData = paymasterData.paymasterAndData; - partialUserOp.callGasLimit = paymasterData.callGasLimit; - partialUserOp.verificationGasLimit = paymasterData.verificationGasLimit; - partialUserOp.preVerificationGas = paymasterData.preVerificationGas; + const { userOpHash } = await smartWallet.sendTransaction(transaction); + expect(userOpHash).toBeTruthy(); const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - expect(newBalance).toEqual(balance); + expect(newBalance - balance).toBe(1n); }, 60000); it("#getUserOpHash should match entryPoint.getUserOpHash", async () => { From d68003621bc4f39f880c3075fda66c32a4569354 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Wed, 17 Jan 2024 14:08:17 +0200 Subject: [PATCH 1032/1247] Added wait for tx before checking balance in test --- packages/account/tests/account.e2e.spec.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index afd0a8129..65e1a7aff 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -91,8 +91,10 @@ describe("Account Tests", () => { const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const { userOpHash } = await smartWallet.sendTransaction(transaction); - expect(userOpHash).toBeTruthy(); + const response = await smartWallet.sendTransaction(transaction); + const userOpReceipt = await response.wait(3); + expect(userOpReceipt.userOpHash).toBeTruthy(); + expect(userOpReceipt.success).toBe("true"); const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; From d94b791ca00deb2550d039d8800bf54b149fbcd0 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 17 Jan 2024 13:47:31 +0000 Subject: [PATCH 1033/1247] Resolved SMA-526 --- .github/workflows/docs.yml | 20 ++++++++++++++++++++ .gitignore | 3 +++ packages/account/package.json | 4 +++- packages/account/typedoc.json | 8 ++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/docs.yml create mode 100644 packages/account/typedoc.json diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000..d0648185e --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,20 @@ +name: Build and Deploy Documentation +on: workflow_dispatch +permissions: + contents: write +jobs: + build-docs-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v3 + + - name: Install and Build + run: | + yarn + yarn docs:build + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: docs diff --git a/.gitignore b/.gitignore index ef1ec2394..c398c2170 100644 --- a/.gitignore +++ b/.gitignore @@ -74,3 +74,6 @@ packages/modules/tests/utils/sessionStorageData/* typechain openapi/ + +# docs +packages/account/docs/* \ No newline at end of file diff --git a/packages/account/package.json b/packages/account/package.json index b9bc171d6..df185c1e2 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -16,6 +16,7 @@ "SDK" ], "scripts": { + "docs": "typedoc", "unbuild": "rimraf dist *.tsbuildinfo", "build:watch": "node .esbuild.js CJS --watch", "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", @@ -44,7 +45,8 @@ "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "nock": "^13.2.9", - "npm-dts": "^1.3.12" + "npm-dts": "^1.3.12", + "typedoc": "^0.25.7" }, "dependencies": { "@alchemy/aa-core": "^1.2.2", diff --git a/packages/account/typedoc.json b/packages/account/typedoc.json new file mode 100644 index 000000000..6a717b22a --- /dev/null +++ b/packages/account/typedoc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "entryPoints": ["src/index.ts"], + "basePath": "src", + "includes": "src", + "out": "docs", + "gitRevision": "main" +} From c0cc8d9e5c3842f8ddf60c68cf646a62c9d66514 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 17 Jan 2024 13:51:24 +0000 Subject: [PATCH 1034/1247] test workflow --- .github/workflows/docs.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index d0648185e..7523e30e0 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,5 +1,9 @@ name: Build and Deploy Documentation -on: workflow_dispatch +on: + push: + branches: + - feature/SMA-526_add-tsdoc + permissions: contents: write jobs: From af9b25ac64bae5cf649c773c1fdcbb5fad331f84 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 17 Jan 2024 13:52:55 +0000 Subject: [PATCH 1035/1247] test again --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 7523e30e0..e58a64e8c 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -16,7 +16,7 @@ jobs: - name: Install and Build run: | yarn - yarn docs:build + yarn docs - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4 From 17a9ae538e2a76182bdeca996f28dc2ecd292b23 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 17 Jan 2024 13:54:39 +0000 Subject: [PATCH 1036/1247] fix command --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index e58a64e8c..77465d98d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -16,7 +16,7 @@ jobs: - name: Install and Build run: | yarn - yarn docs + yarn --cwd ./packages/account docs - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4 From 6f9b2eee656d208be39d21b353f639cc2a422c62 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 17 Jan 2024 13:56:09 +0000 Subject: [PATCH 1037/1247] fix again --- .github/workflows/docs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 77465d98d..ce6779b04 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -16,6 +16,7 @@ jobs: - name: Install and Build run: | yarn + yarn build yarn --cwd ./packages/account docs - name: Deploy 🚀 From afee688ccdf5d50e23f481856cb4875afa04990d Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 17 Jan 2024 13:58:43 +0000 Subject: [PATCH 1038/1247] test again --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index ce6779b04..c4676407a 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -22,4 +22,4 @@ jobs: - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4 with: - folder: docs + folder: ./packages/account/docs From 5801c59fbe06bf752bdc2df88074a86ed4fa486c Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 17 Jan 2024 17:42:47 +0000 Subject: [PATCH 1039/1247] cont. --- packages/account/package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/account/package.json b/packages/account/package.json index df185c1e2..daeb2e487 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -30,7 +30,8 @@ "test:run": "yarn test:concurrently", "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" + "lint": "tslint -p tsconfig.json", + "docs:deploy": "yarn docs && gh-pages -d docs" }, "author": "Biconomy", "license": "MIT", @@ -44,6 +45,7 @@ "devDependencies": { "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", + "gh-pages": "^6.1.1", "nock": "^13.2.9", "npm-dts": "^1.3.12", "typedoc": "^0.25.7" From 83ac10f82e2a816914a70e8d59b0a56d6a4939c3 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Thu, 18 Jan 2024 13:10:07 +0200 Subject: [PATCH 1040/1247] Added SPONSORED and ERC20 paymaster check logic in SDK + tests --- .../account/src/BiconomySmartAccountV2.ts | 90 +++++++++++++++---- packages/account/src/utils/Types.ts | 18 +++- packages/account/tests/account.e2e.spec.ts | 68 ++++++++++++-- packages/account/tests/account.spec.ts | 22 +++-- .../multiChainValidationModule.e2e.spec.ts | 29 +----- packages/paymaster/src/BiconomyPaymaster.ts | 2 +- 6 files changed, 165 insertions(+), 64 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 90ef5c580..1aeb6e2bc 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -29,7 +29,7 @@ import { } from "@alchemy/aa-core"; import { isNullOrUndefined, packUserOp } from "./utils/Utils"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, ECDSAOwnershipValidationModule } from "@biconomy/modules"; -import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, SponsorUserOperationDto, PaymasterMode } from "@biconomy/paymaster"; +import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, PaymasterMode, SponsorUserOperationDto, FeeQuotesOrDataResponse } from "@biconomy/paymaster"; import { Bundler, IBundler, UserOpResponse } from "@biconomy/bundler"; import { BiconomyTokenPaymasterRequest, @@ -41,6 +41,7 @@ import { Transaction, QueryParamsForAddressResolver, BiconomySmartAccountV2ConfigConstructorProps, + PaymasterUserOperationDto, } from "./utils/Types"; import { ADDRESS_RESOLVER_ADDRESS, @@ -210,7 +211,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } // Calls the getCounterFactualAddress - async getAccountAddress(params?: CounterFactualAddressParam): Promise { + async getAccountAddress(params?: CounterFactualAddressParam): Promise<`0x${string}`> { if (this.accountAddress == null || this.accountAddress == undefined) { // means it needs deployment this.accountAddress = await this.getCounterFactualAddress(params); @@ -469,26 +470,75 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } /** + * Sets paymaster-related fields in the provided user operation based on the specified paymaster service data. * - * @param userOp - * @param params - * @description This function call will setup paymaster values (if paymaster is used), take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. - * @returns Promise - */ - async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { + * @param {Partial} userOp - The partial user operation structure to be modified. + * @param {PaymasterUserOperationDto} paymasterServiceData - The paymaster service data containing mode and additional information. + * @returns {Promise>} A promise that resolves to the modified user operation structure. + */ + async setPaymasterFields( + userOp: Partial, + paymasterServiceData: PaymasterUserOperationDto, + ): Promise> { if (this.paymaster !== undefined) { try { - const paymasterData = await (this.paymaster as IHybridPaymaster).getPaymasterAndData(userOp, { - mode: PaymasterMode.SPONSORED, - }); - userOp.paymasterAndData = paymasterData.paymasterAndData; - userOp.callGasLimit = paymasterData.callGasLimit; - userOp.verificationGasLimit = paymasterData.verificationGasLimit; - userOp.preVerificationGas = paymasterData.preVerificationGas; + if (paymasterServiceData.mode === PaymasterMode.SPONSORED) { + const paymasterData = await (this.paymaster as IHybridPaymaster).getPaymasterAndData(userOp, { + mode: paymasterServiceData.mode, + }); + userOp.paymasterAndData = paymasterData.paymasterAndData; + userOp.callGasLimit = paymasterData.callGasLimit; + userOp.verificationGasLimit = paymasterData.verificationGasLimit; + userOp.preVerificationGas = paymasterData.preVerificationGas; + return userOp; + } else if (paymasterServiceData.mode === PaymasterMode.ERC20) { + const feeQuotesResponse: FeeQuotesOrDataResponse = await (this.paymaster as IHybridPaymaster).getPaymasterFeeQuotesOrData(userOp, { + mode: PaymasterMode.ERC20, + tokenList: paymasterServiceData.tokenList, + preferredToken: paymasterServiceData.preferredToken, + }); + const finalUserOp = await this.buildTokenPaymasterUserOp(userOp, { + // @ts-ignore + feeQuote: feeQuotesResponse.feeQuotes[0], + spender: feeQuotesResponse.tokenPaymasterAddress as Hex || "", + maxApproval: true, + }); + const newPaymasterServiceData = { + mode: PaymasterMode.ERC20, + // @ts-ignore + feeTokenAddress: feeQuotesResponse.feeQuotes[0].tokenAddress, // TODO: check if this is correct + calculateGasLimits: true, // Always recommended and especially when using token paymaster + }; + const paymasterAndDataWithLimits = await (this.paymaster as IHybridPaymaster).getPaymasterAndData( + finalUserOp, + newPaymasterServiceData, + ); + finalUserOp.paymasterAndData = paymasterAndDataWithLimits.paymasterAndData; + finalUserOp.callGasLimit = paymasterAndDataWithLimits.callGasLimit; + finalUserOp.verificationGasLimit = paymasterAndDataWithLimits.verificationGasLimit; + finalUserOp.preVerificationGas = paymasterAndDataWithLimits.preVerificationGas; + return finalUserOp; + } else { + return userOp; + } } catch (e: any) { Logger.error("Error while fetching paymaster data", e); + return userOp; } + } else { + Logger.error("Paymaster is not provided"); + return userOp; } + } + + /** + * + * @param userOp + * @param params + * @description This function call will setup paymaster values (if paymaster is used), take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. + * @returns Promise + */ + async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { delete userOp.signature; const userOperation = await this.signUserOp(userOp, params); const bundlerResponse = await this.sendSignedUserOp(userOperation); @@ -563,7 +613,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { finalUserOp.verificationGasLimit = toHex(Number(verificationGasLimit)) ?? userOp.verificationGasLimit; finalUserOp.callGasLimit = toHex(Number(callGasLimit)) ?? userOp.callGasLimit; finalUserOp.preVerificationGas = toHex(Number(preVerificationGas)) ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = "0x"; + if(!finalUserOp.paymasterAndData){ + finalUserOp.paymasterAndData = "0x"; + } return finalUserOp; } @@ -664,7 +716,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Note: Can change the default behaviour of calling estimations using bundler/local userOp = await this.estimateUserOpGas(userOp); - userOp.paymasterAndData = userOp.paymasterAndData ?? "0x"; + + if (buildUseropDto?.paymasterServiceData) { + userOp = await this.setPaymasterFields(userOp, buildUseropDto?.paymasterServiceData); + } + Logger.log("UserOp after estimation ", userOp); return userOp; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index bc3c229dd..6033afe70 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -1,6 +1,6 @@ import { BigNumberish, UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; import { IBundler } from "@biconomy/bundler"; -import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; +import { IPaymaster, PaymasterFeeQuote, PaymasterMode, SmartAccountData, SponsorUserOperationDto } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Hex, WalletClient } from "viem"; @@ -134,7 +134,7 @@ export type BuildUserOpOptions = { params?: ModuleInfo; nonceOptions?: NonceOptions; forceEncodeForBatch?: boolean; - paymasterServiceData?: SponsorUserOperationDto; + paymasterServiceData?: PaymasterUserOperationDto; }; export type NonceOptions = { @@ -170,6 +170,20 @@ export type InitilizationData = { signerAddress?: string; }; +export type PaymasterUserOperationDto = { + mode: PaymasterMode; + calculateGasLimits?: boolean; + expiryDuration?: number; + webhookData?: { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [key: string]: any; + }; + smartAccountInfo?: SmartAccountData; + feeTokenAddress?: string; + tokenList?: string[]; + preferredToken?: string; +}; + export type InitializeV2Data = { accountIndex?: number; }; diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 65e1a7aff..87a8fa2ec 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,17 +1,16 @@ import { TestData } from "../../../tests"; -import { BiconomyPaymaster, PaymasterMode } from "@biconomy/paymaster"; import { createSmartWalletClient } from "../src/index"; import { Hex, encodeFunctionData, parseAbi } from "viem"; import { UserOperationStruct } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "../../../tests/utils"; +import { PaymasterMode } from "@biconomy/paymaster"; describe("Account Tests", () => { let mumbai: TestData; - let baseGoerli: TestData; beforeEach(() => { // @ts-ignore: Comes from setup-e2e-tests - [mumbai, baseGoerli] = testDataPerChain; + [mumbai] = testDataPerChain; }); it("should send some native token to a recipient", async () => { @@ -46,7 +45,6 @@ describe("Account Tests", () => { whale: { viemWallet: signer }, bundlerUrl, biconomyPaymasterApiKey, - chainId, } = mumbai; const smartWallet = await createSmartWalletClient({ @@ -75,8 +73,6 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, }); - const paymaster: BiconomyPaymaster = smartWallet.paymaster as BiconomyPaymaster; - const encodedCall = encodeFunctionData({ abi: parseAbi(["function safeMint(address to) public"]), functionName: "safeMint", @@ -91,11 +87,69 @@ describe("Account Tests", () => { const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const response = await smartWallet.sendTransaction(transaction); + const maticBalanceBefore = publicClient.getBalance({ address: await smartWallet.getAddress() }); + + const response = await smartWallet.sendTransaction(transaction, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); + + const userOpReceipt = await response.wait(3); + expect(userOpReceipt.userOpHash).toBeTruthy(); + expect(userOpReceipt.success).toBe("true"); + + const maticBalanceAfter = publicClient.getBalance({ address: await smartWallet.getAddress() }); + + expect((await maticBalanceAfter).toString()).toEqual((await maticBalanceBefore).toString()); + + const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + + expect(newBalance - balance).toBe(1n); + }, 60000); + + it("Should mint an NFT on Mumbai and pay with ERC20", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + publicClient, + } = mumbai; + + const smartWallet = await createSmartWalletClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + value: 0, + }; + + const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + + const maticBalanceBefore = publicClient.getBalance({ address: await smartWallet.getAddress() }); + + const response = await smartWallet.sendTransaction(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + }, + }); + const userOpReceipt = await response.wait(3); expect(userOpReceipt.userOpHash).toBeTruthy(); expect(userOpReceipt.success).toBe("true"); + const maticBalanceAfter = publicClient.getBalance({ address: await smartWallet.getAddress() }); + + expect((await maticBalanceAfter).toString()).toEqual((await maticBalanceBefore).toString()); + const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; expect(newBalance - balance).toBe(1n); diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index ae7fab293..ce9ac085b 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -136,12 +136,11 @@ describe("Account Tests", () => { transport: http(localhost.rpcUrls.public.http[0]), }); - expect( - async () => - await createSmartWalletClient({ - signer: viemWalletClientNoChainId, - bundlerUrl, - }), + expect(async () => + createSmartWalletClient({ + signer: viemWalletClientNoChainId, + bundlerUrl, + }), ).rejects.toThrow("Cannot consume a viem wallet without a chainId"); }); @@ -152,12 +151,11 @@ describe("Account Tests", () => { transport: http(localhost.rpcUrls.public.http[0]), }); - expect( - async () => - await createSmartWalletClient({ - signer: viemWalletNoAccount, - bundlerUrl, - }), + expect(async () => + createSmartWalletClient({ + signer: viemWalletNoAccount, + bundlerUrl, + }), ).rejects.toThrow("Cannot consume a viem wallet without an account"); }); }); diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts index 22a6ce344..2682dafc1 100644 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -23,7 +23,6 @@ describe("Account with MultiChainValidation Module Tests", () => { const { whale: { alchemyWalletClientSigner: signerBase }, biconomyPaymasterApiKey: biconomyPaymasterApiKeyBase, - bundlerUrl: bundlerUrlBase, } = baseGoerli; const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; @@ -52,9 +51,6 @@ describe("Account with MultiChainValidation Module Tests", () => { }), ]); - const polygonPaymaster: BiconomyPaymaster = polygonAccount.paymaster as BiconomyPaymaster; - const basePaymaster: BiconomyPaymaster = baseAccount.paymaster as BiconomyPaymaster; - const encodedCall = encodeFunctionData({ abi: parseAbi(["function safeMint(address owner) view returns (uint balance)"]), functionName: "safeMint", @@ -67,27 +63,10 @@ describe("Account with MultiChainValidation Module Tests", () => { value: 0, }; - const [partialUserOp1, partialUserOp2] = await Promise.all([baseAccount.buildUserOp([transaction]), polygonAccount.buildUserOp([transaction])]); - - // Setup paymaster and data for base account - const basePaymasterData = await basePaymaster.getPaymasterAndData(partialUserOp1, { - mode: PaymasterMode.SPONSORED, - }); - - partialUserOp1.paymasterAndData = basePaymasterData.paymasterAndData; - partialUserOp1.callGasLimit = basePaymasterData.callGasLimit; - partialUserOp1.verificationGasLimit = basePaymasterData.verificationGasLimit; - partialUserOp1.preVerificationGas = basePaymasterData.preVerificationGas; - - // Setup paymaster and data for polygon account - const polygonPaymasterData = await polygonPaymaster.getPaymasterAndData(partialUserOp2, { - mode: PaymasterMode.SPONSORED, - }); - - partialUserOp2.paymasterAndData = polygonPaymasterData.paymasterAndData; - partialUserOp2.callGasLimit = polygonPaymasterData.callGasLimit; - partialUserOp2.verificationGasLimit = polygonPaymasterData.verificationGasLimit; - partialUserOp2.preVerificationGas = polygonPaymasterData.preVerificationGas; + const [partialUserOp1, partialUserOp2] = await Promise.all([ + baseAccount.buildUserOp([transaction], { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }), + polygonAccount.buildUserOp([transaction], { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }), + ]); // Sign the user ops using multiChainModule const returnedOps = await multiChainModule.signUserOps([ diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 122d14b10..725c5cf35 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -192,7 +192,7 @@ export class BiconomyPaymaster implements IHybridPaymaster = response.result.feeQuotes; - const paymasterAddress: string = response.result.paymasterAddress; + const paymasterAddress = response.result.paymasterAddress as `0x${string}`; // check all objects iterate and populate below calculation for all tokens return { feeQuotes: feeQuotesResponse, tokenPaymasterAddress: paymasterAddress }; } else if (response.result.mode == PaymasterMode.SPONSORED) { From 29ed88d3068695fea91484a275afeb72bb1f7d51 Mon Sep 17 00:00:00 2001 From: joepegler Date: Thu, 18 Jan 2024 11:12:11 +0000 Subject: [PATCH 1041/1247] Feat(DEVX-425): Support ethers (#370) Resolved DEVX-425: Support ethers --- .github/workflows/pull_request_approved.yml | 7 +- packages/account/package.json | 5 +- .../account/src/BiconomySmartAccountV2.ts | 83 +++++++++++++------ packages/account/src/index.ts | 5 +- packages/account/src/utils/Constants.ts | 7 ++ packages/account/src/utils/EthersSigner.ts | 38 +++++++++ packages/account/src/utils/Types.ts | 52 +++++++----- packages/account/tests/account.spec.ts | 14 ++++ packages/modules/src/BaseValidationModule.ts | 6 +- .../modules/src/BatchedSessionRouterModule.ts | 4 +- .../src/ECDSAOwnershipValidationModule.ts | 6 +- .../modules/src/MultichainValidationModule.ts | 6 +- .../modules/src/SessionKeyManagerModule.ts | 4 +- .../modules/src/interfaces/ISessionStorage.ts | 8 +- .../src/interfaces/IValidationModule.ts | 4 +- .../session-storage/SessionLocalStorage.ts | 8 +- packages/modules/src/utils/Types.ts | 10 +-- .../multiChainValidationModule.e2e.spec.ts | 2 +- packages/paymaster/src/BiconomyPaymaster.ts | 5 +- packages/paymaster/src/utils/Types.ts | 4 +- tests/index.d.ts | 4 + tests/setup-e2e-tests.ts | 13 +++ tests/setup-unit-tests.ts | 18 +++- 23 files changed, 223 insertions(+), 90 deletions(-) create mode 100644 packages/account/src/utils/EthersSigner.ts diff --git a/.github/workflows/pull_request_approved.yml b/.github/workflows/pull_request_approved.yml index 791e9ed02..15f24433a 100644 --- a/.github/workflows/pull_request_approved.yml +++ b/.github/workflows/pull_request_approved.yml @@ -24,12 +24,9 @@ jobs: run: yarn install --frozen-lockfile && yarn build - name: Run tests - uses: nick-fields/retry@v2 env: E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} E2E_BICO_PAYMASTER_KEY_MUMBAI: ${{ secrets.E2E_BICO_PAYMASTER_KEY_MUMBAI }} - with: - timeout_minutes: 2 - max_attempts: 3 - command: yarn test:e2e + E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} + run: yarn test:e2e \ No newline at end of file diff --git a/packages/account/package.json b/packages/account/package.json index b9bc171d6..4ede0451f 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -44,13 +44,16 @@ "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "nock": "^13.2.9", - "npm-dts": "^1.3.12" + "npm-dts": "^1.3.12", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/wallet": "^5.7.0" }, "dependencies": { "@alchemy/aa-core": "^1.2.2", "@biconomy/bundler": "^3.1.2", "@biconomy/modules": "^3.1.2", "@biconomy/paymaster": "^3.1.2", + "@ethersproject/abstract-signer": "^5.7.0", "lru-cache": "^10.0.1", "viem": "^1.20.3" } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 6c488e6ef..cdaf93ad6 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -26,11 +26,12 @@ import { type UserOperationStruct, BatchUserOperationCallData, WalletClientSigner, + SmartAccountSigner, } from "@alchemy/aa-core"; import { isNullOrUndefined, packUserOp } from "./utils/Utils"; +import { Bundler, IBundler, UserOpResponse } from "@biconomy/bundler"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { Bundler, IBundler, UserOpResponse } from "@biconomy/bundler"; import { BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, @@ -50,11 +51,14 @@ import { PROXY_CREATION_CODE, ADDRESS_ZERO, DEFAULT_ENTRYPOINT_ADDRESS, + UNIQUE_PROPERTIES_PER_SIGNER, } from "./utils/Constants"; import { BiconomyFactoryAbi } from "./abi/Factory"; import { BiconomyAccountAbi } from "./abi/SmartAccount"; import { AccountResolverAbi } from "./abi/AccountResolver"; import { Logger } from "./utils/Logger"; +import { Signer } from "@ethersproject/abstract-signer"; +import EthersSigner from "./utils/EthersSigner"; type UserOperationKey = keyof UserOperationStruct; @@ -113,14 +117,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.paymaster = biconomySmartAccountConfig.paymaster; } - if (biconomySmartAccountConfig.bundlerUrl) { - this.bundler = new Bundler({ - bundlerUrl: biconomySmartAccountConfig.bundlerUrl, - chainId: biconomySmartAccountConfig.chainId, - }); - } else { - this.bundler = biconomySmartAccountConfig.bundler; - } + this.bundler = biconomySmartAccountConfig.bundler; const defaultFallbackHandlerAddress = this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_FALLBACK_HANDLER_ADDRESS : biconomySmartAccountConfig.defaultFallbackHandler; @@ -155,22 +152,51 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { */ public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { let chainId = biconomySmartAccountConfig.chainId; + let resolvedSmartAccountSigner!: SmartAccountSigner; // Signer needs to be initialised here before defaultValidationModule is set if (biconomySmartAccountConfig.signer) { const signer = biconomySmartAccountConfig.signer; - // AA's WalletClientSigner has a signerType, viems' walletClient does not: - const isViemWalletClient = !(signer as WalletClientSigner)?.signerType; - if (isViemWalletClient) { - const walletClient = signer as WalletClient; - if (!walletClient.account) { - throw new Error("Cannot consume a viem wallet without an account"); - } - if (!walletClient.chain) { - throw new Error("Cannot consume a viem wallet without a chainId"); + + // Alchemy currently only provides two signer types: LocalAccountSigner and WalletClientSigner. + // Futureproof support for other signers by checking if signerType exists + const isAnAlchemySigner = UNIQUE_PROPERTIES_PER_SIGNER.alchemy in signer; + const isAnEthersSigner = UNIQUE_PROPERTIES_PER_SIGNER.ethers in signer; + const isAViemSigner = UNIQUE_PROPERTIES_PER_SIGNER.viem in signer; + + if (!isAnAlchemySigner) { + if (isAnEthersSigner) { + const ethersSigner = signer as Signer; + if (!chainId) { + // If chainId not provided, get it from walletClient + if (!ethersSigner.provider) { + throw new Error("Cannot consume an ethers Wallet without a provider"); + } + const chainIdFromProvider = await ethersSigner.provider.getNetwork(); + if (!chainIdFromProvider?.chainId) { + throw new Error("Cannot consume an ethers Wallet without a chainId"); + } + chainId = Number(chainIdFromProvider.chainId); + } + // convert ethers Wallet to alchemy's SmartAccountSigner under the hood + resolvedSmartAccountSigner = new EthersSigner(ethersSigner, "ethers"); + } else if (isAViemSigner) { + const walletClient = signer as WalletClient; + if (!walletClient.account) { + throw new Error("Cannot consume a viem wallet without an account"); + } + if (!chainId) { + // If chainId not provided, get it from walletClient + if (!walletClient.chain) { + throw new Error("Cannot consume a viem wallet without a chainId"); + } + chainId = walletClient.chain.id; + } + // convert viems walletClient to alchemy's SmartAccountSigner under the hood + resolvedSmartAccountSigner = new WalletClientSigner(walletClient, "viem"); } - chainId = walletClient.chain.id; - biconomySmartAccountConfig.signer = new WalletClientSigner(walletClient, "viem"); + } else { + resolvedSmartAccountSigner = signer as SmartAccountSigner; } } @@ -178,23 +204,28 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Chain ID still not found throw new Error("chainId required"); } - + const bundler: IBundler = biconomySmartAccountConfig.bundler ?? new Bundler({ bundlerUrl: biconomySmartAccountConfig.bundlerUrl!, chainId }); let defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; // Note: If no module is provided, we will use ECDSA_OWNERSHIP as default if (!defaultValidationModule) { - const newModule = await ECDSAOwnershipValidationModule.create({ - // @ts-expect-error: Signer always present if no defaultValidationModule - signer: biconomySmartAccountConfig.signer!, - }); + const newModule = await ECDSAOwnershipValidationModule.create({ signer: resolvedSmartAccountSigner! }); defaultValidationModule = newModule; } const activeValidationModule = biconomySmartAccountConfig?.activeValidationModule ?? defaultValidationModule; - const config = { + if (!resolvedSmartAccountSigner) { + resolvedSmartAccountSigner = await activeValidationModule.getSigner(); + } + if (!resolvedSmartAccountSigner) { + throw new Error("signer required"); + } + const config: BiconomySmartAccountV2ConfigConstructorProps = { ...biconomySmartAccountConfig, defaultValidationModule, activeValidationModule, chainId, + bundler, + signer: resolvedSmartAccountSigner, }; return new BiconomySmartAccountV2(config); diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index 57663eb55..06b3db494 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -6,8 +6,9 @@ export * from "./utils/Constants"; export * from "./BiconomySmartAccountV2"; export * from "./provider"; -export { WalletClientSigner } from "@alchemy/aa-core"; -export { BiconomyPaymaster as Paymaster, IPaymaster } from "@biconomy/paymaster"; +export { WalletClientSigner, LocalAccountSigner, SmartAccountSigner } from "@alchemy/aa-core"; +export { EthersSigner } from "./utils/EthersSigner"; +export { BiconomyPaymaster as Paymaster, IPaymaster, PaymasterMode } from "@biconomy/paymaster"; export { Bundler, IBundler } from "@biconomy/bundler"; export const createSmartWalletClient = BiconomySmartAccountV2.create; export type SmartWalletConfig = BiconomySmartAccountV2Config; diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index b9f3b66ff..ec2a8869d 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -56,3 +56,10 @@ export const DefaultGasLimit = { verificationGasLimit: 1000000, preVerificationGas: 100000, }; + +export type SupportedSigner = "alchemy" | "ethers" | "viem"; +export const UNIQUE_PROPERTIES_PER_SIGNER: Record = { + alchemy: "signerType", + ethers: "provider", + viem: "transport", +}; diff --git a/packages/account/src/utils/EthersSigner.ts b/packages/account/src/utils/EthersSigner.ts new file mode 100644 index 000000000..d0ea3e85c --- /dev/null +++ b/packages/account/src/utils/EthersSigner.ts @@ -0,0 +1,38 @@ +import { SignTypedDataParams, SmartAccountSigner } from "@alchemy/aa-core"; +import { Hex } from "viem"; +import { Signer } from "@ethersproject/abstract-signer"; + +export class EthersSigner implements SmartAccountSigner { + signerType: string = "ethers"; + + inner: T; + + constructor(inner: T, signerType: string) { + this.inner = inner; + this.signerType = signerType; + } + + async getAddress() { + return (await this.inner.getAddress()) as Hex; + } + + async signMessage(message: string | Uint8Array): Promise { + const signature = await this.inner?.signMessage(message); + return this.#correctSignature(signature as Hex); + } + + async signTypedData(_notUsed: SignTypedDataParams): Promise { + throw new Error("signTypedData is not supported for Ethers Signer"); + } + + #correctSignature = (signature: Hex): Hex => { + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); + } + return signature; + }; +} + +export default EthersSigner; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index bc3c229dd..da21995b5 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -1,8 +1,9 @@ -import { BigNumberish, UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; +import { BigNumberish, SmartAccountSigner, UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; import { IBundler } from "@biconomy/bundler"; import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Hex, WalletClient } from "viem"; +import { Signer } from "@ethersproject/abstract-signer"; export type EntryPointAddresses = { [address: string]: string; @@ -55,14 +56,6 @@ export interface GasOverheads { // MULTICHAIN = DEFAULT_MULTICHAIN_MODULE, }*/ -type ConditionalBundlerProps = RequireAtLeastOne< - { - bundler: IBundler; - bundlerUrl: string; - }, - "bundler" | "bundlerUrl" ->; - export type BaseSmartAccountConfig = { // owner?: Signer // can be in child classes index?: number; @@ -95,14 +88,31 @@ type RequireAtLeastOne = Pick> & Partial>>; }[Keys]; +type ConditionalBundlerProps = RequireAtLeastOne< + { + bundler: IBundler; + bundlerUrl: string; + }, + "bundler" | "bundlerUrl" +>; +type ResolvedBundlerProps = { + bundler: IBundler; +}; type ConditionalValidationProps = RequireAtLeastOne< { defaultValidationModule: BaseValidationModule; - signer: WalletClientSigner | WalletClient; + signer: SmartAccountSigner | WalletClient | Signer; }, "defaultValidationModule" | "signer" >; +type ResolvedValidationProps = { + defaultValidationModule: BaseValidationModule; + activeValidationModule: BaseValidationModule; + signer: SmartAccountSigner; + chainId: number; +}; + type BiconomySmartAccountV2ConfigBaseProps = { factoryAddress?: Hex; senderAddress?: Hex; @@ -120,13 +130,10 @@ export type BiconomySmartAccountV2Config = BiconomySmartAccountV2ConfigBaseProps ConditionalBundlerProps & ConditionalValidationProps; -type BiconomySmartAccountV2ConfigResolvedConstructorProps = { - defaultValidationModule: BaseValidationModule; - activeValidationModule: BaseValidationModule; - chainId: number; -}; - -export type BiconomySmartAccountV2ConfigConstructorProps = BiconomySmartAccountV2Config & BiconomySmartAccountV2ConfigResolvedConstructorProps; +export type BiconomySmartAccountV2ConfigConstructorProps = BiconomySmartAccountV2ConfigBaseProps & + BaseSmartAccountConfig & + ResolvedBundlerProps & + ResolvedValidationProps; export type BuildUserOpOptions = { overrides?: Overrides; @@ -215,8 +222,13 @@ export type SmartAccountInfo = { deploymentIndex: BigNumberish; }; +type ValueOrData = RequireAtLeastOne< + { + value: BigNumberish; + data: string; + }, + "value" | "data" +>; export type Transaction = { to: string; - value: BigNumberish; - data: string; -}; +} & ValueOrData; diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index ae7fab293..13f3aa9ea 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -12,6 +12,20 @@ describe("Account Tests", () => { [ganache] = testDataPerChain; }); + it("should create a smartWalletClient from an ethers signer", async () => { + const { + bundlerUrl, + minnow: { ethersSigner: signer }, + } = ganache; + + const smartWallet = await createSmartWalletClient({ + signer, + bundlerUrl, + }); + const address = await smartWallet.getAccountAddress(); + expect(address).toBeTruthy(); + }); + it("should create a smartWalletClient from a walletClient", async () => { const { whale: { viemWallet: signer }, diff --git a/packages/modules/src/BaseValidationModule.ts b/packages/modules/src/BaseValidationModule.ts index be9f710c0..8c98e5abf 100644 --- a/packages/modules/src/BaseValidationModule.ts +++ b/packages/modules/src/BaseValidationModule.ts @@ -1,5 +1,5 @@ import { Hex } from "viem"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { SmartAccountSigner } from "@alchemy/aa-core"; import { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types"; import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; import { IValidationModule } from "./interfaces/IValidationModule"; @@ -24,14 +24,14 @@ export abstract class BaseValidationModule implements IValidationModule { // Anything required to get dummy signature can be passed as params abstract getDummySignature(_params?: ModuleInfo): Promise; - abstract getSigner(): Promise; + abstract getSigner(): Promise; // Signer specific or any other additional information can be passed as params abstract signUserOpHash(_userOpHash: string, _params?: ModuleInfo): Promise; abstract signMessage(_message: Uint8Array | string): Promise; - async signMessageWalletClientSigner(message: string | Uint8Array, signer: WalletClientSigner): Promise { + async signMessageSmartAccountSigner(message: string | Uint8Array, signer: SmartAccountSigner): Promise { let signature: `0x${string}` = await signer.signMessage(message); const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 562444869..f998234f2 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -8,7 +8,7 @@ import { BaseValidationModule } from "./BaseValidationModule"; import { SessionKeyManagerModule } from "./SessionKeyManagerModule"; import { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; import { Hex, concat, encodeAbiParameters, keccak256, pad, parseAbiParameters, toBytes, toHex } from "viem"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { SmartAccountSigner } from "@alchemy/aa-core"; export class BatchedSessionRouterModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; @@ -189,7 +189,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { /** * @remarks This is the version of the module contract */ - async getSigner(): Promise { + async getSigner(): Promise { throw new Error("Method not implemented."); } diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index 44e0dba42..22f9a3bf5 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -1,12 +1,12 @@ import { Hex, encodeFunctionData, getAddress, parseAbi, toBytes } from "viem"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { SmartAccountSigner } from "@alchemy/aa-core"; import { ECDSAOwnershipValidationModuleConfig, ModuleVersion } from "./utils/Types"; import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; import { BaseValidationModule } from "./BaseValidationModule"; // Could be renamed with suffix API export class ECDSAOwnershipValidationModule extends BaseValidationModule { - signer!: WalletClientSigner; + signer!: SmartAccountSigner; moduleAddress!: Hex; @@ -39,7 +39,7 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { return this.moduleAddress; } - async getSigner(): Promise { + async getSigner(): Promise { return Promise.resolve(this.signer); } diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index c47d0eb66..34e901502 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -1,5 +1,5 @@ import { Hex, concat, encodeAbiParameters, encodeFunctionData, getAddress, keccak256, pad, parseAbi, parseAbiParameters, toBytes, toHex } from "viem"; -import { UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; +import { UserOperationStruct, SmartAccountSigner } from "@alchemy/aa-core"; import MerkleTree from "merkletreejs"; import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; import { ModuleVersion, MultiChainUserOpDto, MultiChainValidationModuleConfig } from "./utils/Types"; @@ -8,7 +8,7 @@ import { getUserOpHash } from "./utils/Helper"; import { Logger } from "./utils/Logger"; export class MultiChainValidationModule extends BaseValidationModule { - signer!: WalletClientSigner; + signer!: SmartAccountSigner; moduleAddress!: Hex; @@ -41,7 +41,7 @@ export class MultiChainValidationModule extends BaseValidationModule { return this.moduleAddress; } - async getSigner(): Promise { + async getSigner(): Promise { return Promise.resolve(this.signer); } diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index b74bb91df..adb6d78ea 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -1,6 +1,6 @@ import { Hex, concat, encodeAbiParameters, encodeFunctionData, keccak256, pad, parseAbi, parseAbiParameters, toBytes, toHex } from "viem"; import MerkleTree from "merkletreejs"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { SmartAccountSigner } from "@alchemy/aa-core"; import { SessionKeyManagerModuleConfig, ModuleVersion, @@ -237,7 +237,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { /** * @remarks This is the version of the module contract */ - async getSigner(): Promise { + async getSigner(): Promise { throw new Error("Method not implemented."); } diff --git a/packages/modules/src/interfaces/ISessionStorage.ts b/packages/modules/src/interfaces/ISessionStorage.ts index 4be01635d..12f704ea2 100644 --- a/packages/modules/src/interfaces/ISessionStorage.ts +++ b/packages/modules/src/interfaces/ISessionStorage.ts @@ -1,5 +1,5 @@ import { Hex } from "viem"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { SmartAccountSigner } from "@alchemy/aa-core"; import { SignerData } from "utils/Types"; export type SessionStatus = "PENDING" | "ACTIVE" | "INACTIVE" | "EXPIRED"; @@ -51,19 +51,19 @@ export interface ISessionStorage { * If no signer object is passed, it'll create a random signer and add it to the session storage * @param signer Optional signer to be added to the session storage */ - addSigner(_signer?: SignerData): Promise; + addSigner(_signer?: SignerData): Promise; /** * Fetch a signer from the session storage * @param signerPublicKey Public key of the signer to be fetched */ - getSignerByKey(_signerPublicKey: string): Promise; + getSignerByKey(_signerPublicKey: string): Promise; /** * Fetch a signer from the session storage based on the session search param * @param param SessionSearchParam to be used to fetch the signer */ - getSignerBySession(_param: SessionSearchParam): Promise; + getSignerBySession(_param: SessionSearchParam): Promise; /** * Fetch all the session leaf nodes from the session storage based on the session search param. diff --git a/packages/modules/src/interfaces/IValidationModule.ts b/packages/modules/src/interfaces/IValidationModule.ts index ec38b4c50..ee3da28a9 100644 --- a/packages/modules/src/interfaces/IValidationModule.ts +++ b/packages/modules/src/interfaces/IValidationModule.ts @@ -1,10 +1,10 @@ -import { WalletClientSigner } from "@alchemy/aa-core"; +import { SmartAccountSigner } from "@alchemy/aa-core"; import { Hex } from "viem"; export interface IValidationModule { getAddress(): Hex; getInitData(): Promise; - getSigner(): Promise; + getSigner(): Promise; signUserOpHash(_userOpHash: string): Promise; signMessage(_message: string | Uint8Array): Promise; getDummySignature(): Promise; diff --git a/packages/modules/src/session-storage/SessionLocalStorage.ts b/packages/modules/src/session-storage/SessionLocalStorage.ts index 1731cb39c..1010b9806 100644 --- a/packages/modules/src/session-storage/SessionLocalStorage.ts +++ b/packages/modules/src/session-storage/SessionLocalStorage.ts @@ -103,7 +103,7 @@ export class SessionLocalStorage implements ISessionStorage { localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } - async addSigner(signerData: SignerData): Promise { + async addSigner(signerData: SignerData): Promise { const signers = this.getSignerStore(); let signer: SignerData; if (!signerData) { @@ -121,7 +121,7 @@ export class SessionLocalStorage implements ISessionStorage { chain: signerData.chainId, transport: http(), }); - const walletClientSigner: SmartAccountSigner = new WalletClientSigner( + const walletClientSigner = new WalletClientSigner( client, "json-rpc", // signerType ); @@ -130,7 +130,7 @@ export class SessionLocalStorage implements ISessionStorage { return walletClientSigner; } - async getSignerByKey(sessionPublicKey: string): Promise { + async getSignerByKey(sessionPublicKey: string): Promise { const signers = this.getSignerStore(); const signerData = signers[this.toLowercaseAddress(sessionPublicKey)]; if (!signerData) { @@ -146,7 +146,7 @@ export class SessionLocalStorage implements ISessionStorage { return signer; } - async getSignerBySession(param: SessionSearchParam): Promise { + async getSignerBySession(param: SessionSearchParam): Promise { const session = await this.getSessionData(param); return this.getSignerByKey(session.sessionPublicKey); } diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index cd7bb8166..4726314aa 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,5 +1,5 @@ import { Chain, Hex } from "viem"; -import { UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; +import { UserOperationStruct, SmartAccountSigner } from "@alchemy/aa-core"; import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; import { ISessionStorage } from "../interfaces/ISessionStorage"; @@ -12,7 +12,7 @@ export interface BaseValidationModuleConfig { export interface ECDSAOwnershipValidationModuleConfig extends BaseValidationModuleConfig { moduleAddress?: Hex; version?: ModuleVersion; - signer: WalletClientSigner; + signer: SmartAccountSigner; } export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfig { @@ -46,7 +46,7 @@ export enum StorageType { export type SessionParams = { sessionID?: string; - sessionSigner: WalletClientSigner; + sessionSigner: SmartAccountSigner; sessionValidationModule?: Hex; additionalSessionData?: string; }; @@ -55,7 +55,7 @@ export type ModuleInfo = { // Could be a full object of below params and that way it can be an array too! // sessionParams?: SessionParams[] // where SessionParams is below four sessionID?: string; - sessionSigner?: WalletClientSigner; + sessionSigner?: SmartAccountSigner; sessionValidationModule?: Hex; additionalSessionData?: string; batchSessionParams?: SessionParams[]; @@ -90,7 +90,7 @@ export interface CreateSessionDataParams { export interface MultiChainValidationModuleConfig extends BaseValidationModuleConfig { moduleAddress?: Hex; version?: ModuleVersion; - signer: WalletClientSigner; + signer: SmartAccountSigner; } export type MultiChainUserOpDto = { diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts index 22a6ce344..000ca128e 100644 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -45,7 +45,7 @@ describe("Account with MultiChainValidation Module Tests", () => { createSmartWalletClient({ chainId: 84531, signer: signerBase, - bundlerUrl: "https://bundler.biconomy.io/api/v2/84531/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", + bundlerUrl: bundlerUrlBase, defaultValidationModule: multiChainModule, activeValidationModule: multiChainModule, biconomyPaymasterApiKey: biconomyPaymasterApiKeyBase, diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 122d14b10..1f8c3dccb 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -11,6 +11,7 @@ import { PaymasterMode, PaymasterAndDataResponse, Transaction, + Hex, } from "./utils/Types"; import { IHybridPaymaster } from "./interfaces/IHybridPaymaster"; import { MAX_UINT256, ERC20_ABI, ADDRESS_ZERO } from "./utils/Constants"; @@ -192,11 +193,11 @@ export class BiconomyPaymaster implements IHybridPaymaster = response.result.feeQuotes; - const paymasterAddress: string = response.result.paymasterAddress; + const paymasterAddress: Hex = response.result.paymasterAddress; // check all objects iterate and populate below calculation for all tokens return { feeQuotes: feeQuotesResponse, tokenPaymasterAddress: paymasterAddress }; } else if (response.result.mode == PaymasterMode.SPONSORED) { - const paymasterAndData: string = response.result.paymasterAndData; + const paymasterAndData: Hex = response.result.paymasterAndData; const preVerificationGas = response.result.preVerificationGas; const verificationGasLimit = response.result.verificationGasLimit; const callGasLimit = response.result.callGasLimit; diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index d5ad174d0..670602daf 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -95,8 +95,8 @@ export type BiconomyTokenPaymasterRequest = { export type FeeQuotesOrDataResponse = { feeQuotes?: PaymasterFeeQuote[]; - tokenPaymasterAddress?: string; // spender - paymasterAndData?: string; + tokenPaymasterAddress?: Hex; + paymasterAndData?: Uint8Array | Hex; preVerificationGas?: BigNumberish; verificationGasLimit?: BigNumberish; callGasLimit?: BigNumberish; diff --git a/tests/index.d.ts b/tests/index.d.ts index ac9657461..d3093f47a 100644 --- a/tests/index.d.ts +++ b/tests/index.d.ts @@ -1,5 +1,7 @@ import { Chain, Hex, PrivateKeyAccount, PublicClient, WalletClient } from "viem"; import { WalletClientSigner } from "@alchemy/aa-core"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Signer } from "@ethersproject/abstract-signer"; interface WalletProps { alchemyWalletClientSigner: WalletClientSigner; @@ -8,6 +10,7 @@ interface WalletProps { publicAddress: Hex; account: PrivateKeyAccount; privateKey: Hex; + ethersSigner: Signer; } export type TestData = { @@ -19,4 +22,5 @@ export type TestData = { entryPointAddress: string; viemChain: Chain; biconomyPaymasterApiKey: string; + ethersProvider: JsonRpcProvider; }; diff --git a/tests/setup-e2e-tests.ts b/tests/setup-e2e-tests.ts index ce248ee6f..417d278a4 100644 --- a/tests/setup-e2e-tests.ts +++ b/tests/setup-e2e-tests.ts @@ -1,4 +1,6 @@ import { createWalletClient, http, createPublicClient } from "viem"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Wallet } from "@ethersproject/wallet"; import { privateKeyToAccount } from "viem/accounts"; import { WalletClientSigner } from "@alchemy/aa-core"; import { config } from "dotenv"; @@ -15,6 +17,10 @@ beforeAll(async () => { const walletTwo = privateKeyToAccount(privateKeyTwo); const promises = E2E_TEST_CHAINS.map((chain) => { + const ethersProvider = new JsonRpcProvider(chain.viemChain.rpcUrls.public.http[0]); + const ethersSignerOne = new Wallet(privateKeyOne, ethersProvider); + const ethersSignerTwo = new Wallet(privateKeyTwo, ethersProvider); + const publicClient = createPublicClient({ chain: chain.viemChain, transport: http(), @@ -42,6 +48,8 @@ beforeAll(async () => { publicAddress: walletOne.address, viemWallet: viemWalletClientOne, alchemyWalletClientSigner: walletClientSignerOne, + ethersProvider, + ethersSigner: ethersSignerOne, privateKey: privateKeyOne, }, publicClient.getBalance({ @@ -56,6 +64,8 @@ beforeAll(async () => { publicAddress: walletTwo.address, viemWallet: viemWalletClientTwo, alchemyWalletClientSigner: walletClientSignerTwo, + ethersProvider, + ethersSigner: ethersSignerTwo, privateKey: privateKeyTwo, }, publicClient.getBalance({ @@ -93,6 +103,7 @@ beforeAll(async () => { entryPointAddress: whaleBalance.entryPointAddress, viemChain: whaleBalance.viemChain, biconomyPaymasterApiKey: whaleBalance.biconomyPaymasterApiKey, + ethersProvider: whaleBalance.ethersProvider, paymasterUrl: whaleBalance.paymasterUrl, }; @@ -104,6 +115,7 @@ beforeAll(async () => { alchemyWalletClientSigner: whaleBalance.alchemyWalletClientSigner, publicAddress: whaleBalance.publicAddress, account: whaleBalance.account, + ethersSigner: whaleBalance.ethersSigner, privateKey: whaleBalance.privateKey, }, minnow: { @@ -112,6 +124,7 @@ beforeAll(async () => { alchemyWalletClientSigner: minnowBalance.alchemyWalletClientSigner, publicAddress: minnowBalance.publicAddress, account: minnowBalance.account, + ethersSigner: whaleBalance.ethersSigner, privateKey: minnowBalance.privateKey, }, }; diff --git a/tests/setup-unit-tests.ts b/tests/setup-unit-tests.ts index b7bd7b66b..2cc8c34e3 100644 --- a/tests/setup-unit-tests.ts +++ b/tests/setup-unit-tests.ts @@ -1,12 +1,18 @@ import { createWalletClient, http, createPublicClient } from "viem"; -import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; import { WalletClientSigner } from "@alchemy/aa-core"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Wallet } from "@ethersproject/wallet"; import { UNIT_TEST_CHAIN } from "./chains.config"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; beforeAll(() => { const { chainId, bundlerUrl, viemChain, entryPointAddress } = UNIT_TEST_CHAIN; const privateKeyOne = generatePrivateKey(); const accountOne = privateKeyToAccount(privateKeyOne); + + const ethersProvider = new JsonRpcProvider(viemChain.rpcUrls.public.http[0]); + const ethersSignerOne = new Wallet(privateKeyOne, ethersProvider); + const viemWalletClientOne = createWalletClient({ account: accountOne, chain: viemChain, @@ -21,6 +27,9 @@ beforeAll(() => { const privateKeyTwo = generatePrivateKey(); const accountTwo = privateKeyToAccount(privateKeyTwo); + + const ethersSignerTwo = new Wallet(privateKeyTwo, ethersProvider); + const viemWalletClientTwo = createWalletClient({ account: accountTwo, chain: viemChain, @@ -34,8 +43,9 @@ beforeAll(() => { alchemyWalletClientSigner: walletClientSignerOne, balance: 0, publicAddress: publicAddressOne, + ethersSigner: ethersSignerOne, account: accountOne, - prvateKey: privateKeyOne, + privateKey: privateKeyOne, }; const minnow = { @@ -43,8 +53,9 @@ beforeAll(() => { alchemyWalletClientSigner: walletClientSignerTwo, balance: 0, publicAddress: publicAddressTwo, + ethersSigner: ethersSignerTwo, account: accountTwo, - prvateKey: privateKeyTwo, + privateKey: privateKeyTwo, }; // @ts-ignore @@ -57,6 +68,7 @@ beforeAll(() => { bundlerUrl, entryPointAddress, viemChain, + ethersProvider, }, ]; }); From 17e6fc83ca0481b83f50a6ac4b658548b4fd3047 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Thu, 18 Jan 2024 13:17:36 +0200 Subject: [PATCH 1042/1247] Fixed lint --- .../account/src/BiconomySmartAccountV2.ts | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 1aeb6e2bc..de77d6bcf 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -29,7 +29,14 @@ import { } from "@alchemy/aa-core"; import { isNullOrUndefined, packUserOp } from "./utils/Utils"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, ECDSAOwnershipValidationModule } from "@biconomy/modules"; -import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, PaymasterMode, SponsorUserOperationDto, FeeQuotesOrDataResponse } from "@biconomy/paymaster"; +import { + IHybridPaymaster, + IPaymaster, + BiconomyPaymaster, + PaymasterMode, + SponsorUserOperationDto, + FeeQuotesOrDataResponse, +} from "@biconomy/paymaster"; import { Bundler, IBundler, UserOpResponse } from "@biconomy/bundler"; import { BiconomyTokenPaymasterRequest, @@ -475,7 +482,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param {Partial} userOp - The partial user operation structure to be modified. * @param {PaymasterUserOperationDto} paymasterServiceData - The paymaster service data containing mode and additional information. * @returns {Promise>} A promise that resolves to the modified user operation structure. - */ + */ async setPaymasterFields( userOp: Partial, paymasterServiceData: PaymasterUserOperationDto, @@ -492,21 +499,23 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { userOp.preVerificationGas = paymasterData.preVerificationGas; return userOp; } else if (paymasterServiceData.mode === PaymasterMode.ERC20) { - const feeQuotesResponse: FeeQuotesOrDataResponse = await (this.paymaster as IHybridPaymaster).getPaymasterFeeQuotesOrData(userOp, { + const feeQuotesResponse: FeeQuotesOrDataResponse = await ( + this.paymaster as IHybridPaymaster + ).getPaymasterFeeQuotesOrData(userOp, { mode: PaymasterMode.ERC20, tokenList: paymasterServiceData.tokenList, preferredToken: paymasterServiceData.preferredToken, }); const finalUserOp = await this.buildTokenPaymasterUserOp(userOp, { - // @ts-ignore - feeQuote: feeQuotesResponse.feeQuotes[0], - spender: feeQuotesResponse.tokenPaymasterAddress as Hex || "", + // @ts-expect-error There should always be a fee quote + feeQuote: feeQuotesResponse.feeQuotes[0]!, + spender: (feeQuotesResponse.tokenPaymasterAddress as Hex) || "", maxApproval: true, }); const newPaymasterServiceData = { mode: PaymasterMode.ERC20, - // @ts-ignore - feeTokenAddress: feeQuotesResponse.feeQuotes[0].tokenAddress, // TODO: check if this is correct + // @ts-expect-error There should always be a fee quote tokenAddress + feeTokenAddress: feeQuotesResponse.feeQuotes[0].tokenAddress!, // TODO: check if this is correct calculateGasLimits: true, // Always recommended and especially when using token paymaster }; const paymasterAndDataWithLimits = await (this.paymaster as IHybridPaymaster).getPaymasterAndData( @@ -613,7 +622,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { finalUserOp.verificationGasLimit = toHex(Number(verificationGasLimit)) ?? userOp.verificationGasLimit; finalUserOp.callGasLimit = toHex(Number(callGasLimit)) ?? userOp.callGasLimit; finalUserOp.preVerificationGas = toHex(Number(preVerificationGas)) ?? userOp.preVerificationGas; - if(!finalUserOp.paymasterAndData){ + if (!finalUserOp.paymasterAndData) { finalUserOp.paymasterAndData = "0x"; } @@ -716,7 +725,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Note: Can change the default behaviour of calling estimations using bundler/local userOp = await this.estimateUserOpGas(userOp); - + if (buildUseropDto?.paymasterServiceData) { userOp = await this.setPaymasterFields(userOp, buildUseropDto?.paymasterServiceData); } From 3712117bcd337069ecb5e18b978b9e1499c05263 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Thu, 18 Jan 2024 13:27:35 +0200 Subject: [PATCH 1043/1247] Merged with v4 --- packages/account/src/BiconomySmartAccountV2.ts | 1 - .../modules/tests/multiChainValidationModule.e2e.spec.ts | 1 + packages/paymaster/src/utils/Types.ts | 8 ++++---- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 8f00d790b..cc31a9efd 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -29,7 +29,6 @@ import { SmartAccountSigner, } from "@alchemy/aa-core"; import { isNullOrUndefined, packUserOp } from "./utils/Utils"; -import { Bundler, IBundler, UserOpResponse } from "@biconomy/bundler"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, ECDSAOwnershipValidationModule } from "@biconomy/modules"; import { IHybridPaymaster, diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts index 37c9d7a14..c5ae4207b 100644 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -23,6 +23,7 @@ describe("Account with MultiChainValidation Module Tests", () => { const { whale: { alchemyWalletClientSigner: signerBase }, biconomyPaymasterApiKey: biconomyPaymasterApiKeyBase, + bundlerUrl: bundlerUrlBase, } = baseGoerli; const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index 670602daf..8dd67b23b 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -109,10 +109,10 @@ export type PaymasterAndDataResponse = { callGasLimit: number; }; -export enum PaymasterMode { - ERC20 = "ERC20", - SPONSORED = "SPONSORED", -} +// export enum PaymasterMode { +// ERC20 = "ERC20", +// SPONSORED = "SPONSORED", +// } // Converted to JsonRpcResponse with strict type export type EstimateUserOpGasResponse = { From 2987dbadc554584ebac22104acc754c42c1c729e Mon Sep 17 00:00:00 2001 From: GabiDev Date: Thu, 18 Jan 2024 14:01:50 +0200 Subject: [PATCH 1044/1247] Changed parameter name --- packages/account/src/BiconomySmartAccountV2.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index cdaf93ad6..71ee4f18d 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -894,9 +894,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return tx; } - async isModuleEnabled(moduleName: Hex): Promise { + async isModuleEnabled(moduleAddress: Hex): Promise { const accountContract = await this._getAccountContract(); - return accountContract.read.isModuleEnabled([moduleName]); + return accountContract.read.isModuleEnabled([moduleAddress]); } // Review From 7f741b38b2358016e1d2d1c49bb0d1906535a88f Mon Sep 17 00:00:00 2001 From: GabiDev Date: Thu, 18 Jan 2024 15:57:06 +0200 Subject: [PATCH 1045/1247] Uncomment PaymasterMode --- packages/paymaster/src/utils/Types.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index 8dd67b23b..670602daf 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -109,10 +109,10 @@ export type PaymasterAndDataResponse = { callGasLimit: number; }; -// export enum PaymasterMode { -// ERC20 = "ERC20", -// SPONSORED = "SPONSORED", -// } +export enum PaymasterMode { + ERC20 = "ERC20", + SPONSORED = "SPONSORED", +} // Converted to JsonRpcResponse with strict type export type EstimateUserOpGasResponse = { From 28988119a3c1413786c6dd457c6f3c8f282da86a Mon Sep 17 00:00:00 2001 From: GabiDev Date: Thu, 18 Jan 2024 17:58:52 +0200 Subject: [PATCH 1046/1247] Added fix for selected quote case ERC20 paymaster --- .../account/src/BiconomySmartAccountV2.ts | 32 ++++------------ packages/account/src/utils/Types.ts | 6 +-- packages/account/tests/account.e2e.spec.ts | 38 +++++++++++++++---- .../tests/sessionValidationModule.e2e.spec.ts | 14 ++++++- 4 files changed, 55 insertions(+), 35 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index cc31a9efd..d0011fa5a 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -30,14 +30,7 @@ import { } from "@alchemy/aa-core"; import { isNullOrUndefined, packUserOp } from "./utils/Utils"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, ECDSAOwnershipValidationModule } from "@biconomy/modules"; -import { - IHybridPaymaster, - IPaymaster, - BiconomyPaymaster, - PaymasterMode, - SponsorUserOperationDto, - FeeQuotesOrDataResponse, -} from "@biconomy/paymaster"; +import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, PaymasterMode, SponsorUserOperationDto } from "@biconomy/paymaster"; import { Bundler, IBundler, UserOpResponse } from "@biconomy/bundler"; import { BiconomyTokenPaymasterRequest, @@ -514,7 +507,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param {PaymasterUserOperationDto} paymasterServiceData - The paymaster service data containing mode and additional information. * @returns {Promise>} A promise that resolves to the modified user operation structure. */ - async setPaymasterFields( + async setPaymasterUserOp( userOp: Partial, paymasterServiceData: PaymasterUserOperationDto, ): Promise> { @@ -529,24 +522,15 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { userOp.verificationGasLimit = paymasterData.verificationGasLimit; userOp.preVerificationGas = paymasterData.preVerificationGas; return userOp; - } else if (paymasterServiceData.mode === PaymasterMode.ERC20) { - const feeQuotesResponse: FeeQuotesOrDataResponse = await ( - this.paymaster as IHybridPaymaster - ).getPaymasterFeeQuotesOrData(userOp, { - mode: PaymasterMode.ERC20, - tokenList: paymasterServiceData.tokenList, - preferredToken: paymasterServiceData.preferredToken, - }); + } else if (paymasterServiceData.mode === PaymasterMode.ERC20 && paymasterServiceData.feeQuote !== undefined) { const finalUserOp = await this.buildTokenPaymasterUserOp(userOp, { - // @ts-expect-error There should always be a fee quote - feeQuote: feeQuotesResponse.feeQuotes[0]!, - spender: (feeQuotesResponse.tokenPaymasterAddress as Hex) || "", - maxApproval: true, + feeQuote: paymasterServiceData.feeQuote, + spender: (paymasterServiceData.spender as Hex) || "", + maxApproval: paymasterServiceData.maxApproval, }); const newPaymasterServiceData = { mode: PaymasterMode.ERC20, - // @ts-expect-error There should always be a fee quote tokenAddress - feeTokenAddress: feeQuotesResponse.feeQuotes[0].tokenAddress!, // TODO: check if this is correct + feeTokenAddress: paymasterServiceData.feeQuote.tokenAddress, calculateGasLimits: true, // Always recommended and especially when using token paymaster }; const paymasterAndDataWithLimits = await (this.paymaster as IHybridPaymaster).getPaymasterAndData( @@ -758,7 +742,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { userOp = await this.estimateUserOpGas(userOp); if (buildUseropDto?.paymasterServiceData) { - userOp = await this.setPaymasterFields(userOp, buildUseropDto?.paymasterServiceData); + userOp = await this.setPaymasterUserOp(userOp, buildUseropDto?.paymasterServiceData); } Logger.log("UserOp after estimation ", userOp); diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index c4e82d0cb..eee169413 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -186,9 +186,9 @@ export type PaymasterUserOperationDto = { [key: string]: any; }; smartAccountInfo?: SmartAccountData; - feeTokenAddress?: string; - tokenList?: string[]; - preferredToken?: string; + feeQuote?: PaymasterFeeQuote; + spender?: Hex; + maxApproval?: boolean; }; export type InitializeV2Data = { diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 87a8fa2ec..38058baae 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,9 +1,9 @@ import { TestData } from "../../../tests"; -import { createSmartWalletClient } from "../src/index"; +import { PaymasterUserOperationDto, createSmartWalletClient } from "../src/index"; import { Hex, encodeFunctionData, parseAbi } from "viem"; import { UserOperationStruct } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "../../../tests/utils"; -import { PaymasterMode } from "@biconomy/paymaster"; +import { FeeQuotesOrDataResponse, IHybridPaymaster, PaymasterFeeQuote, PaymasterMode } from "@biconomy/paymaster"; describe("Account Tests", () => { let mumbai: TestData; @@ -133,12 +133,35 @@ describe("Account Tests", () => { const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const maticBalanceBefore = publicClient.getBalance({ address: await smartWallet.getAddress() }); + const maticBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress()); + const usdcBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); + + const userOp = await smartWallet.buildUserOp([transaction]); + + const feeQuotesResponse: FeeQuotesOrDataResponse = await ( + smartWallet.paymaster as IHybridPaymaster + ).getPaymasterFeeQuotesOrData(userOp, { + mode: PaymasterMode.ERC20, + tokenList: ["0xda5289fcaaf71d52a80a254da614a192b693e977"], + preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + }); + + const feeQuotes = feeQuotesResponse.feeQuotes as PaymasterFeeQuote[]; + const spender = feeQuotesResponse.tokenPaymasterAddress as Hex; + const selectedFeeQuote = feeQuotes[0]; + + // userOp = await smartWallet.buildUserOp([transaction], { + // paymasterServiceData: { mode: PaymasterMode.ERC20, feeQuote: selectedFeeQuote, spender }, + // }); + + // const response = await smartWallet.sendUserOp(userOp); const response = await smartWallet.sendTransaction(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20, - preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + feeQuote: selectedFeeQuote, + spender, + maxApproval: true, }, }); @@ -146,12 +169,13 @@ describe("Account Tests", () => { expect(userOpReceipt.userOpHash).toBeTruthy(); expect(userOpReceipt.success).toBe("true"); - const maticBalanceAfter = publicClient.getBalance({ address: await smartWallet.getAddress() }); + const maticBalanceAfter = await checkBalance(publicClient, await smartWallet.getAddress()); + expect(maticBalanceAfter).toEqual(maticBalanceBefore); - expect((await maticBalanceAfter).toString()).toEqual((await maticBalanceBefore).toString()); + const usdcBalanceAfter = await checkBalance(publicClient, await smartWallet.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); + expect(usdcBalanceAfter).toBeLessThan(usdcBalanceBefore); const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - expect(newBalance - balance).toBe(1n); }, 60000); diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index 07c8262e5..028015a75 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -1,8 +1,10 @@ import { DEFAULT_SESSION_KEY_MANAGER_MODULE, SessionKeyManagerModule } from "@biconomy/modules"; import { SessionFileStorage } from "@biconomy/modules/tests/utils/customSession"; -import { WalletClientSigner, createSmartWalletClient } from "../../account/src/index"; +import { PaymasterUserOperationDto, WalletClientSigner, createSmartWalletClient } from "../../account/src/index"; import { Hex, encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "viem"; import { TestData } from "../../../tests"; +import { FeeQuotesOrDataResponse, IHybridPaymaster, PaymasterMode } from "@biconomy/paymaster"; +import { checkBalance } from "../../../tests/utils"; describe("Account Tests", () => { let mumbai: TestData; @@ -25,6 +27,7 @@ describe("Account Tests", () => { privateKey: pvKey, }, minnow: { publicAddress: recipient }, + publicClient, } = mumbai; try { @@ -116,12 +119,17 @@ describe("Account Tests", () => { smartWallet = smartWallet.setActiveValidationModule(sessionModule); + const maticBalanceBefore = await checkBalance(publicClient, await smartWallet.getAccountAddress()); + const transferUserOp = await smartWallet.buildUserOp([transferTx], { skipBundlerGasEstimation: false, params: { sessionSigner: sessionSigner, sessionValidationModule: erc20ModuleAddr.toLowerCase() as Hex, }, + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + }, }); const userOpResponse2 = await smartWallet.sendUserOp(transferUserOp, { @@ -132,6 +140,10 @@ describe("Account Tests", () => { expect(userOpResponse2.userOpHash).toBeTruthy(); expect(userOpResponse2.userOpHash).not.toBeNull(); + const maticBalanceAfter = await checkBalance(publicClient, await smartWallet.getAccountAddress()); + + expect(maticBalanceAfter).toEqual(maticBalanceBefore); + console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); } catch (error) { console.log(error); From 68cce44a5c8e2f2a616f099b8a75e4db6a517676 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 19 Jan 2024 16:34:37 +0200 Subject: [PATCH 1047/1247] Changed send user op approach in ERC20 paymaster test --- packages/account/tests/account.e2e.spec.ts | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 38058baae..5ef81a045 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -136,7 +136,7 @@ describe("Account Tests", () => { const maticBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress()); const usdcBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); - const userOp = await smartWallet.buildUserOp([transaction]); + let userOp = await smartWallet.buildUserOp([transaction]); const feeQuotesResponse: FeeQuotesOrDataResponse = await ( smartWallet.paymaster as IHybridPaymaster @@ -150,22 +150,11 @@ describe("Account Tests", () => { const spender = feeQuotesResponse.tokenPaymasterAddress as Hex; const selectedFeeQuote = feeQuotes[0]; - // userOp = await smartWallet.buildUserOp([transaction], { - // paymasterServiceData: { mode: PaymasterMode.ERC20, feeQuote: selectedFeeQuote, spender }, - // }); + userOp = await smartWallet.setPaymasterUserOp(userOp, { mode: PaymasterMode.ERC20, feeQuote: selectedFeeQuote, spender, maxApproval: true }); - // const response = await smartWallet.sendUserOp(userOp); + const response = await smartWallet.sendUserOp(userOp); - const response = await smartWallet.sendTransaction(transaction, { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - feeQuote: selectedFeeQuote, - spender, - maxApproval: true, - }, - }); - - const userOpReceipt = await response.wait(3); + const userOpReceipt = await response.wait(); expect(userOpReceipt.userOpHash).toBeTruthy(); expect(userOpReceipt.success).toBe("true"); From 56424b56be2f02b68e858fb146714958f5d4f3a4 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 19 Jan 2024 16:37:27 +0200 Subject: [PATCH 1048/1247] Modify sendUserOp function description --- packages/account/src/BiconomySmartAccountV2.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index d0011fa5a..cc39b1a5b 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -559,7 +559,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * @param userOp * @param params - * @description This function call will setup paymaster values (if paymaster is used), take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. + * @description This function will take a user op as an input, sign it with the owner key, and send it to the bundler. * @returns Promise */ async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { From 693bf08591427c03e317d64d0491e23b1c96ea30 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 19 Jan 2024 16:58:00 +0200 Subject: [PATCH 1049/1247] Added throw instead of return user op --- packages/account/src/BiconomySmartAccountV2.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index cc39b1a5b..70327888e 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -546,12 +546,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return userOp; } } catch (e: any) { - Logger.error("Error while fetching paymaster data", e); - return userOp; + throw new Error("Error while fetching paymaster data"); } } else { - Logger.error("Paymaster is not provided"); - return userOp; + throw new Error("Paymaster is not provided"); } } From 25f77ee0848a15ee206b985e3b7cbba45c221c30 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Fri, 19 Jan 2024 16:39:23 +0000 Subject: [PATCH 1050/1247] continued --- .github/workflows/docs.yml | 9 +- .../account/src/BiconomySmartAccountV2.ts | 142 ++++++++++++++++-- 2 files changed, 137 insertions(+), 14 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index c4676407a..aa43373ec 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,9 +1,10 @@ name: Build and Deploy Documentation on: - push: - branches: - - feature/SMA-526_add-tsdoc - + push: + branches: + - feature/SMA-526_add-tsdoc + - master + permissions: contents: write jobs: diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 71ee4f18d..edf91447c 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -140,15 +140,37 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } /** - * Creates a new instance of BiconomySmartAccountV2. - * - * This method will create a BiconomySmartAccountV2 instance but will not deploy the Smart Account. + * Creates a new instance of BiconomySmartAccountV2 * + * This method will create a BiconomySmartAccountV2 instance but will not deploy the Smart Account * Deployment of the Smart Account will be donewith the first user operation. * + * - Docs: https://docs.biconomy.io/Account/integration#integration-1 + * * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance. * @returns A promise that resolves to a new instance of BiconomySmartAccountV2. * @throws An error if something is wrong with the smart account instance creation. + * + * @example + * import { createClient } from "viem" + * import { createSmartWalletClient, BiconomySmartAccountV2 } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const bundlerUrl = "" // Retrieve bundler url from dasboard + * + * const smartWalletFromStaticCreate = await BiconomySmartAccountV2.create({ signer, bundlerUrl }); + * + * // Is the same as... + * + * const smartWallet = await createSmartWalletClient({ signer, bundlerUrl }); + * */ public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { let chainId = biconomySmartAccountConfig.chainId; @@ -500,11 +522,43 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } /** + * Sends a user operation + * + * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#send-useroperation + * + * @param userOp Partial<{@link UserOperationStruct}> the userOp params to be sent. + * @param params {@link SendUserOpParams}. + * @returns Promise<{@link UserOpResponse}> that you can use to track user operation. + * + * @example + * import { createClient } from "viem" + * import { createSmartWalletClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartWallet = await createSmartWalletClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * const userOp = await smartWallet.buildUserOp([transaction]); + * + * const { wait } = await smartWallet.sendUserOp(userOp); + * const { receipt } = await wait(); * - * @param userOp - * @param params - * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. - * @returns Promise */ async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { delete userOp.signature; @@ -636,15 +690,83 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } /** - * @param manyOrOneTransactions list of transactions, or single transaction for execution - * @param buildUseropDto options for building the userOp - * @returns Promise + * Sends a transaction (builds and sends a user op in sequence) + * + * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#send-transaction + * + * @param manyOrOneTransactions Array of {@link Transaction} to be batched and sent. Can also be a single {@link Transaction}. + * @param buildUseropDto {@link BuildUserOpOptions}. + * @returns Promise<{@link UserOpResponse}> that you can use to track user operation. + * + * @example + * import { createClient } from "viem" + * import { createSmartWalletClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartWallet = await createSmartWalletClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * const { waitForTxHash } = await smartWallet.sendTransaction(transaction); + * const { transactionHash, userOperationReceipt } = await wait(); + * */ async sendTransaction(manyOrOneTransactions: Transaction | Transaction[], buildUseropDto?: BuildUserOpOptions) { const userOp = await this.buildUserOp(Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions : [manyOrOneTransactions], buildUseropDto); return this.sendUserOp(userOp); } + /** + * Builds a user operation + * + * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#build-useroperation + * + * @param transactions Array of {@link Transaction} to be sent. + * @param buildUseropDto {@link BuildUserOpOptions}. + * @returns Promise> the built user operation to be sent. + * + * @example + * import { createClient } from "viem" + * import { createSmartWalletClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartWallet = await createSmartWalletClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * const userOp = await smartWallet.buildUserOp([{ to: "0x...", data: encodedCall }]); + * + */ async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { const to = transactions.map((element: Transaction) => element.to as Hex); const data = transactions.map((element: Transaction) => (element.data as Hex) ?? "0x"); From 290cede67ece979af224fda0af38ac8cf4e6c6df Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Fri, 19 Jan 2024 16:54:47 +0000 Subject: [PATCH 1051/1247] Fix branch for deployment of docs --- .github/workflows/docs.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index aa43373ec..5cd857fa5 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -2,8 +2,7 @@ name: Build and Deploy Documentation on: push: branches: - - feature/SMA-526_add-tsdoc - - master + - develop permissions: contents: write From fa09e4d848b7000f535df4d0888572dcc3ffb23b Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 19 Jan 2024 20:15:37 +0200 Subject: [PATCH 1052/1247] Removed try catch --- .../account/src/BiconomySmartAccountV2.ts | 66 +++++++++---------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 70327888e..42250fa2f 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -512,41 +512,37 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { paymasterServiceData: PaymasterUserOperationDto, ): Promise> { if (this.paymaster !== undefined) { - try { - if (paymasterServiceData.mode === PaymasterMode.SPONSORED) { - const paymasterData = await (this.paymaster as IHybridPaymaster).getPaymasterAndData(userOp, { - mode: paymasterServiceData.mode, - }); - userOp.paymasterAndData = paymasterData.paymasterAndData; - userOp.callGasLimit = paymasterData.callGasLimit; - userOp.verificationGasLimit = paymasterData.verificationGasLimit; - userOp.preVerificationGas = paymasterData.preVerificationGas; - return userOp; - } else if (paymasterServiceData.mode === PaymasterMode.ERC20 && paymasterServiceData.feeQuote !== undefined) { - const finalUserOp = await this.buildTokenPaymasterUserOp(userOp, { - feeQuote: paymasterServiceData.feeQuote, - spender: (paymasterServiceData.spender as Hex) || "", - maxApproval: paymasterServiceData.maxApproval, - }); - const newPaymasterServiceData = { - mode: PaymasterMode.ERC20, - feeTokenAddress: paymasterServiceData.feeQuote.tokenAddress, - calculateGasLimits: true, // Always recommended and especially when using token paymaster - }; - const paymasterAndDataWithLimits = await (this.paymaster as IHybridPaymaster).getPaymasterAndData( - finalUserOp, - newPaymasterServiceData, - ); - finalUserOp.paymasterAndData = paymasterAndDataWithLimits.paymasterAndData; - finalUserOp.callGasLimit = paymasterAndDataWithLimits.callGasLimit; - finalUserOp.verificationGasLimit = paymasterAndDataWithLimits.verificationGasLimit; - finalUserOp.preVerificationGas = paymasterAndDataWithLimits.preVerificationGas; - return finalUserOp; - } else { - return userOp; - } - } catch (e: any) { - throw new Error("Error while fetching paymaster data"); + if (paymasterServiceData.mode === PaymasterMode.SPONSORED) { + const paymasterData = await (this.paymaster as IHybridPaymaster).getPaymasterAndData(userOp, { + mode: paymasterServiceData.mode, + }); + userOp.paymasterAndData = paymasterData.paymasterAndData; + userOp.callGasLimit = paymasterData.callGasLimit; + userOp.verificationGasLimit = paymasterData.verificationGasLimit; + userOp.preVerificationGas = paymasterData.preVerificationGas; + return userOp; + } else if (paymasterServiceData.mode === PaymasterMode.ERC20 && paymasterServiceData.feeQuote !== undefined) { + const finalUserOp = await this.buildTokenPaymasterUserOp(userOp, { + feeQuote: paymasterServiceData.feeQuote, + spender: (paymasterServiceData.spender as Hex) || "", + maxApproval: paymasterServiceData.maxApproval, + }); + const newPaymasterServiceData = { + mode: PaymasterMode.ERC20, + feeTokenAddress: paymasterServiceData.feeQuote.tokenAddress, + calculateGasLimits: true, // Always recommended and especially when using token paymaster + }; + const paymasterAndDataWithLimits = await (this.paymaster as IHybridPaymaster).getPaymasterAndData( + finalUserOp, + newPaymasterServiceData, + ); + finalUserOp.paymasterAndData = paymasterAndDataWithLimits.paymasterAndData; + finalUserOp.callGasLimit = paymasterAndDataWithLimits.callGasLimit; + finalUserOp.verificationGasLimit = paymasterAndDataWithLimits.verificationGasLimit; + finalUserOp.preVerificationGas = paymasterAndDataWithLimits.preVerificationGas; + return finalUserOp; + } else { + return userOp; } } else { throw new Error("Paymaster is not provided"); From 41a50c6271788523dcae88332cbb863fb438eba9 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 19 Jan 2024 20:18:25 +0200 Subject: [PATCH 1053/1247] Added utility func to get balance in tests --- packages/account/tests/account.e2e.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 5ef81a045..4133fa570 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -87,7 +87,7 @@ describe("Account Tests", () => { const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const maticBalanceBefore = publicClient.getBalance({ address: await smartWallet.getAddress() }); + const maticBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress()); const response = await smartWallet.sendTransaction(transaction, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); @@ -95,9 +95,9 @@ describe("Account Tests", () => { expect(userOpReceipt.userOpHash).toBeTruthy(); expect(userOpReceipt.success).toBe("true"); - const maticBalanceAfter = publicClient.getBalance({ address: await smartWallet.getAddress() }); + const maticBalanceAfter = await checkBalance(publicClient, await smartWallet.getAddress()); - expect((await maticBalanceAfter).toString()).toEqual((await maticBalanceBefore).toString()); + expect(maticBalanceAfter).toEqual(maticBalanceBefore); const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; From b1e5b5e02ab3a7fb99faa1d45b55e3cbe8d6bc93 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Mon, 22 Jan 2024 09:49:44 +0200 Subject: [PATCH 1054/1247] Removed unused value param from tx obj --- packages/account/tests/account.e2e.spec.ts | 2 -- packages/modules/tests/multiChainValidationModule.e2e.spec.ts | 1 - packages/modules/tests/sessionValidationModule.e2e.spec.ts | 2 -- 3 files changed, 5 deletions(-) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 4133fa570..a92fbb2cd 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -82,7 +82,6 @@ describe("Account Tests", () => { const transaction = { to: nftAddress, // NFT address data: encodedCall, - value: 0, }; const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; @@ -128,7 +127,6 @@ describe("Account Tests", () => { const transaction = { to: nftAddress, // NFT address data: encodedCall, - value: 0, }; const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts index c5ae4207b..f4847f882 100644 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -61,7 +61,6 @@ describe("Account with MultiChainValidation Module Tests", () => { const transaction = { to: nftAddress, data: encodedCall, - value: 0, }; const [partialUserOp1, partialUserOp2] = await Promise.all([ diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index 028015a75..91c66b1c6 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -80,7 +80,6 @@ describe("Account Tests", () => { const setSessionAllowedTrx = { to: DEFAULT_SESSION_KEY_MANAGER_MODULE, data: sessionTxData.data, - value: 0, }; const txArray: any = []; @@ -114,7 +113,6 @@ describe("Account Tests", () => { const transferTx = { to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", //erc20 token address data: encodedCall, - value: 0, }; smartWallet = smartWallet.setActiveValidationModule(sessionModule); From 8c8e983608e88df1019206c00576874fe946deb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien?= Date: Thu, 18 Jan 2024 15:09:13 +0000 Subject: [PATCH 1055/1247] Fix UserOpResponse wait confirmations --- packages/bundler/src/Bundler.ts | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 5c78befbe..fbc2a7915 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -153,17 +153,21 @@ export class Bundler implements IBundler { if (confirmations) { const latestBlock = await provider.getBlockNumber(); const confirmedBlocks = latestBlock - userOpResponse.receipt.blockNumber; - if (confirmations >= confirmedBlocks) { + if (confirmedBlocks >= confirmations) { clearInterval(intervalId); resolve(userOpResponse); + return; } + } else { + clearInterval(intervalId); + resolve(userOpResponse); + return; } - clearInterval(intervalId); - resolve(userOpResponse); } } catch (error) { clearInterval(intervalId); reject(error); + return; } totalDuration += intervalValue; @@ -186,18 +190,19 @@ export class Bundler implements IBundler { return new Promise((resolve, reject) => { const intervalValue = this.UserOpWaitForTxHashIntervals[chainId] || 500; // default 0.5 seconds - const intervalId = setInterval(() => { - this.getUserOpStatus(sendUserOperationResponse.result) - .then((userOpStatus) => { - if (userOpStatus && userOpStatus.state && userOpStatus.transactionHash) { - clearInterval(intervalId); - resolve(userOpStatus); - } - }) - .catch((error) => { + const intervalId = setInterval(async () => { + try { + const userOpStatus = await this.getUserOpStatus(sendUserOperationResponse.result); + if (userOpStatus && userOpStatus.state && userOpStatus.transactionHash) { clearInterval(intervalId); - reject(error); - }); + resolve(userOpStatus); + return; + } + } catch (error) { + clearInterval(intervalId); + reject(error); + return; + } totalDuration += intervalValue; if (totalDuration >= maxDuration) { From 1d1f9dafddf11bde0e1a75383bc935b22448bedd Mon Sep 17 00:00:00 2001 From: joepegler Date: Mon, 22 Jan 2024 13:52:14 +0000 Subject: [PATCH 1056/1247] Apply Signer Abstraction to modules (#375) * Added Signer Abstraction --- .eslintrc.js | 2 + README.md | 63 ++++++--------- linkAll.sh | 2 +- packages/account/package.json | 8 +- .../account/src/BiconomySmartAccountV2.ts | 79 +++++++------------ packages/account/src/index.ts | 15 +++- packages/account/src/utils/Constants.ts | 7 -- packages/account/src/utils/Types.ts | 4 +- packages/bundler/src/Bundler.ts | 17 ++-- packages/bundler/src/index.ts | 1 + packages/bundler/src/interfaces/IBundler.ts | 1 + packages/bundler/src/utils/Types.ts | 3 +- packages/bundler/src/utils/Utils.ts | 9 +++ packages/common/.esbuild.js | 59 ++++++++++++++ packages/common/README.md | 11 +++ packages/common/package.json | 51 ++++++++++++ packages/common/src/index.ts | 4 + packages/common/src/utils/Constants.ts | 7 ++ .../src/utils/EthersSigner.ts | 0 .../common/src/utils/Helpers/convertSigner.ts | 57 +++++++++++++ packages/common/src/utils/Helpers/index.ts | 1 + packages/common/src/utils/Types.ts | 6 ++ packages/common/tsconfig.json | 9 +++ packages/modules/package.json | 2 + .../src/ECDSAOwnershipValidationModule.ts | 16 ++-- .../modules/src/MultichainValidationModule.ts | 21 +++-- .../modules/src/SessionKeyManagerModule.ts | 1 + packages/modules/src/index.ts | 15 ++++ .../session-storage/SessionLocalStorage.ts | 9 ++- packages/modules/src/utils/Types.ts | 13 ++- packages/modules/tests/modules.spec.ts | 45 +++++++++++ tsconfig.json | 3 +- 32 files changed, 409 insertions(+), 132 deletions(-) create mode 100644 packages/bundler/src/utils/Utils.ts create mode 100644 packages/common/.esbuild.js create mode 100644 packages/common/README.md create mode 100644 packages/common/package.json create mode 100644 packages/common/src/index.ts create mode 100644 packages/common/src/utils/Constants.ts rename packages/{account => common}/src/utils/EthersSigner.ts (100%) create mode 100644 packages/common/src/utils/Helpers/convertSigner.ts create mode 100644 packages/common/src/utils/Helpers/index.ts create mode 100644 packages/common/src/utils/Types.ts create mode 100644 packages/common/tsconfig.json create mode 100644 packages/modules/tests/modules.spec.ts diff --git a/.eslintrc.js b/.eslintrc.js index 78d998dfd..c8c285b0a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -26,6 +26,8 @@ module.exports = { "import/extensions": "off", "security/detect-object-injection": "off", // turning off Injection Sink rule "@typescript-eslint/no-throw-literal": "off", // temp deactivated needs to be removed once fixed + "@typescript-eslint/ban-ts-ignore": "off", + "@typescript-eslint/ban-ts-comment": "off", }, settings: {}, overrides: [ diff --git a/README.md b/README.md index 096b1e7f2..e13d095d4 100644 --- a/README.md +++ b/README.md @@ -26,45 +26,23 @@ Unlock the full potential of **ERC4337 Account Abstraction** with methods that s ```javascript -import { ECDSAOwnershipValidationModule, DEFAULT_ECDSA_OWNERSHIP_MODULE } from "@biconomy/modules"; -import { IBundler, Bundler } from '@biconomy/bundler' -import { DEFAULT_ENTRYPOINT_ADDRESS } from "@biconomy/account" -import { providers } from 'ethers' -import { ChainId } from "@biconomy/core-types" - - -const module = await ECDSAOwnershipValidationModule.create({ - signer: wallet, - moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - }) - -const biconomySmartAccount = await BiconomySmartAccountV2.create({ - chainId: ChainId.POLYGON_MUMBAI, - bundler: bundler, - paymaster: paymaster, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - defaultValidationModule: module, - activeValidationModule: module -}) - -console.log("address: ", await biconomySmartAccount.getAccountAddress()); -``` - -### Bundler - -Leverage standardized bundler infrastructure for efficient operation of account abstraction across EVM networks. - -```javascript - -import { IBundler, Bundler } from '@biconomy/bundler' +import { createSmartWalletClient } from "@biconomy/account"; +import { createWalletClient, http } from "viem"; +import { privateKeyToAccount } from "viem/accounts"; +import { polygonMumbai } from "viem/chains"; + +const account = privateKeyToAccount(config.privateKey as Hex); +const signer = createWalletClient({ + account, + chain: polygonMumbai, + transport: http(), +}); +const bundlerUrl = 'https://bundler.biconomy.io/api/v2/80001/' +// Please go to https://dashboard.biconomy.io and generate bundler url -const bundler: IBundler = new Bundler({ - bundlerUrl: 'https://bundler.biconomy.io/api/v2/80001/', - // Please go to https://dashboard.biconomy.io and generate bundler url - chainId: ChainId.POLYGON_MUMBAI, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - }) +const biconomySmartAccount = await createSmartWalletClient({ bundlerUrl, signer }); +console.log("address: ", await biconomySmartAccount.getAccountAddress()); ``` ### Paymaster @@ -72,19 +50,22 @@ const bundler: IBundler = new Bundler({ Acting as third-party intermediaries, Paymasters have the capability to sponsor gas fees for an account, provided specific predefined conditions are met. Additionally, they can accept gas payments in ERC20 tokens from users' smart accounts, with the Paymaster managing the conversion to native tokens for gas payment. ```javascript -const paymaster: IPaymaster = new BiconomyPaymaster({ - paymasterUrl: '' // From Biconomy Dashboard -}); +import { Paymaster, IPaymaster } from "@biconomy/account"; +const paymasterUrl = ""; +// Please go to https://dashboard.biconomy.io to setup a paymasterUrl +// ... +const biconomySmartAccount = await createSmartWalletClient({ bundlerUrl, signer, paymasterUrl }); ``` ## 🛠️ Quickstart -For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick explore here https://docs.biconomy.io/docs/category/quick-explore +For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick explore here https://docs.biconomy.io/docs/category/quick-explore ## 📚 Resources - [Biconomy Documentation](https://docs.biconomy.io/docs/overview) - [Biconomy Dashboard](https://dashboard.biconomy.io/) +- [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) ## 🤝 Contributing diff --git a/linkAll.sh b/linkAll.sh index 6c808abef..215ab64c8 100755 --- a/linkAll.sh +++ b/linkAll.sh @@ -1,3 +1,3 @@ !/bin/sh for dir in ./packages/*; do (cd "$dir" && yarn link); done -cd ./packages/account && yarn link '@biconomy/bundler' '@biconomy/modules' '@biconomy/paymaster' \ No newline at end of file +cd ./packages/account && yarn link '@biconomy/bundler' '@biconomy/modules' '@biconomy/paymaster' '@biconomy/common' \ No newline at end of file diff --git a/packages/account/package.json b/packages/account/package.json index 4461c8c8f..8280b1013 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -48,16 +48,14 @@ "gh-pages": "^6.1.1", "nock": "^13.2.9", "npm-dts": "^1.3.12", - "typedoc": "^0.25.7", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/wallet": "^5.7.0" + "typedoc": "^0.25.7" }, "dependencies": { - "@alchemy/aa-core": "^1.2.2", + "@alchemy/aa-core": "^2.0.0", "@biconomy/bundler": "^3.1.2", "@biconomy/modules": "^3.1.2", "@biconomy/paymaster": "^3.1.2", - "@ethersproject/abstract-signer": "^5.7.0", + "@biconomy/common": "^3.1.2", "lru-cache": "^10.0.1", "viem": "^1.20.3" } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index eea22d4ea..0278c2cc9 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -17,7 +17,6 @@ import { Chain, getContract, decodeFunctionData, - WalletClient, } from "viem"; import { BaseSmartContractAccount, @@ -25,13 +24,21 @@ import { type BigNumberish, type UserOperationStruct, BatchUserOperationCallData, - WalletClientSigner, SmartAccountSigner, } from "@alchemy/aa-core"; import { isNullOrUndefined, packUserOp } from "./utils/Utils"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, ECDSAOwnershipValidationModule } from "@biconomy/modules"; -import { IHybridPaymaster, IPaymaster, BiconomyPaymaster, PaymasterMode, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { Bundler, IBundler, UserOpResponse } from "@biconomy/bundler"; +import { + IHybridPaymaster, + IPaymaster, + Paymaster, + PaymasterMode, + SponsorUserOperationDto, + Bundler, + IBundler, + UserOpResponse, + extractChainIdFromBundlerUrl, +} from "../src/index"; import { BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, @@ -52,14 +59,12 @@ import { PROXY_CREATION_CODE, ADDRESS_ZERO, DEFAULT_ENTRYPOINT_ADDRESS, - UNIQUE_PROPERTIES_PER_SIGNER, } from "./utils/Constants"; import { BiconomyFactoryAbi } from "./abi/Factory"; import { BiconomyAccountAbi } from "./abi/SmartAccount"; import { AccountResolverAbi } from "./abi/AccountResolver"; import { Logger } from "./utils/Logger"; -import { Signer } from "@ethersproject/abstract-signer"; -import EthersSigner from "./utils/EthersSigner"; +import { convertSigner } from "./"; type UserOperationKey = keyof UserOperationStruct; @@ -111,7 +116,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex); if (biconomySmartAccountConfig.biconomyPaymasterApiKey) { - this.paymaster = new BiconomyPaymaster({ + this.paymaster = new Paymaster({ paymasterUrl: `https://paymaster.biconomy.io/api/v1/${biconomySmartAccountConfig.chainId}/${biconomySmartAccountConfig.biconomyPaymasterApiKey}`, }); } else { @@ -179,52 +184,22 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Signer needs to be initialised here before defaultValidationModule is set if (biconomySmartAccountConfig.signer) { - const signer = biconomySmartAccountConfig.signer; - - // Alchemy currently only provides two signer types: LocalAccountSigner and WalletClientSigner. - // Futureproof support for other signers by checking if signerType exists - const isAnAlchemySigner = UNIQUE_PROPERTIES_PER_SIGNER.alchemy in signer; - const isAnEthersSigner = UNIQUE_PROPERTIES_PER_SIGNER.ethers in signer; - const isAViemSigner = UNIQUE_PROPERTIES_PER_SIGNER.viem in signer; - - if (!isAnAlchemySigner) { - if (isAnEthersSigner) { - const ethersSigner = signer as Signer; - if (!chainId) { - // If chainId not provided, get it from walletClient - if (!ethersSigner.provider) { - throw new Error("Cannot consume an ethers Wallet without a provider"); - } - const chainIdFromProvider = await ethersSigner.provider.getNetwork(); - if (!chainIdFromProvider?.chainId) { - throw new Error("Cannot consume an ethers Wallet without a chainId"); - } - chainId = Number(chainIdFromProvider.chainId); - } - // convert ethers Wallet to alchemy's SmartAccountSigner under the hood - resolvedSmartAccountSigner = new EthersSigner(ethersSigner, "ethers"); - } else if (isAViemSigner) { - const walletClient = signer as WalletClient; - if (!walletClient.account) { - throw new Error("Cannot consume a viem wallet without an account"); - } - if (!chainId) { - // If chainId not provided, get it from walletClient - if (!walletClient.chain) { - throw new Error("Cannot consume a viem wallet without a chainId"); - } - chainId = walletClient.chain.id; - } - // convert viems walletClient to alchemy's SmartAccountSigner under the hood - resolvedSmartAccountSigner = new WalletClientSigner(walletClient, "viem"); - } - } else { - resolvedSmartAccountSigner = signer as SmartAccountSigner; + const signerResult = await convertSigner(biconomySmartAccountConfig.signer, !!chainId); + if (signerResult.chainId) { + chainId = chainId || signerResult.chainId; + } + resolvedSmartAccountSigner = signerResult.signer; + } + if (!chainId) { + // Get it from bundler + if (biconomySmartAccountConfig.bundlerUrl) { + chainId = extractChainIdFromBundlerUrl(biconomySmartAccountConfig.bundlerUrl); + } else if (biconomySmartAccountConfig.bundler) { + const bundlerUrlFromBundler = biconomySmartAccountConfig.bundler.getBundlerUrl(); + chainId = extractChainIdFromBundlerUrl(bundlerUrlFromBundler); } } - if (!chainId) { - // Chain ID still not found throw new Error("chainId required"); } const bundler: IBundler = biconomySmartAccountConfig.bundler ?? new Bundler({ bundlerUrl: biconomySmartAccountConfig.bundlerUrl!, chainId }); @@ -913,7 +888,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { let newCallData = userOp.callData; Logger.warn("Received information about fee token address and quote ", tokenPaymasterRequest); - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { + if (this.paymaster && this.paymaster instanceof Paymaster) { // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details // Review: might request this form of an array of Transaction diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index bb827cfae..0786c22bc 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -6,8 +6,17 @@ export * from "./utils/Constants"; export * from "./BiconomySmartAccountV2"; export { WalletClientSigner, LocalAccountSigner, SmartAccountSigner } from "@alchemy/aa-core"; -export { EthersSigner } from "./utils/EthersSigner"; -export { BiconomyPaymaster as Paymaster, IPaymaster, PaymasterMode } from "@biconomy/paymaster"; -export { Bundler, IBundler } from "@biconomy/bundler"; +export { + BiconomyPaymaster as Paymaster, + IPaymaster, + PaymasterMode, + IHybridPaymaster, + PaymasterFeeQuote, + SponsorUserOperationDto, +} from "@biconomy/paymaster"; +export { EthersSigner, convertSigner } from "@biconomy/common"; +export { Bundler, IBundler, extractChainIdFromBundlerUrl, UserOpResponse } from "@biconomy/bundler"; + export const createSmartWalletClient = BiconomySmartAccountV2.create; + export type SmartWalletConfig = BiconomySmartAccountV2Config; diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index ec2a8869d..b9f3b66ff 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -56,10 +56,3 @@ export const DefaultGasLimit = { verificationGasLimit: 1000000, preVerificationGas: 100000, }; - -export type SupportedSigner = "alchemy" | "ethers" | "viem"; -export const UNIQUE_PROPERTIES_PER_SIGNER: Record = { - alchemy: "signerType", - ethers: "provider", - viem: "transport", -}; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index eee169413..da0db1935 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -3,7 +3,7 @@ import { IBundler } from "@biconomy/bundler"; import { IPaymaster, PaymasterFeeQuote, PaymasterMode, SmartAccountData, SponsorUserOperationDto } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Hex, WalletClient } from "viem"; -import { Signer } from "@ethersproject/abstract-signer"; +import { SupportedSigner } from "@biconomy/common"; export type EntryPointAddresses = { [address: string]: string; @@ -101,7 +101,7 @@ type ResolvedBundlerProps = { type ConditionalValidationProps = RequireAtLeastOne< { defaultValidationModule: BaseValidationModule; - signer: SmartAccountSigner | WalletClient | Signer; + signer: SupportedSigner; }, "defaultValidationModule" | "signer" >; diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index df7ddac70..aada56dc2 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -16,6 +16,7 @@ import { UserOpStatus, GetUserOperationStatusResponse, SimulationType, + BunderConfigWithChainId, } from "./utils/Types"; import { transformUserOP, getTimestampInSeconds } from "./utils/HelperFunction"; import { @@ -26,6 +27,7 @@ import { DEFAULT_ENTRYPOINT_ADDRESS, } from "./utils/Constants"; import { sendRequest, HttpMethod } from "./utils/HttpRequests"; +import { extractChainIdFromBundlerUrl } from "utils/Utils"; /** * This class implements IBundler interface. @@ -33,6 +35,8 @@ import { sendRequest, HttpMethod } from "./utils/HttpRequests"; * Checkout the proposal for more details on Bundlers. */ export class Bundler implements IBundler { + private bundlerConfig: BunderConfigWithChainId; + // eslint-disable-next-line no-unused-vars UserOpReceiptIntervals!: { [key in number]?: number }; @@ -42,7 +46,10 @@ export class Bundler implements IBundler { UserOpWaitForTxHashMaxDurationIntervals!: { [key in number]?: number }; - constructor(readonly bundlerConfig: Bundlerconfig) { + constructor(bundlerConfig: Bundlerconfig) { + const parsedChainId: number = bundlerConfig?.chainId || extractChainIdFromBundlerUrl(bundlerConfig.bundlerUrl); + this.bundlerConfig = { ...bundlerConfig, chainId: parsedChainId }; + this.UserOpReceiptIntervals = { ...UserOpReceiptIntervals, ...bundlerConfig.userOpReceiptIntervals, @@ -63,14 +70,10 @@ export class Bundler implements IBundler { ...bundlerConfig.userOpWaitForTxHashMaxDurationIntervals, }; - if (!bundlerConfig.entryPointAddress) { - this.bundlerConfig.entryPointAddress = DEFAULT_ENTRYPOINT_ADDRESS; - } else { - this.bundlerConfig.entryPointAddress = bundlerConfig.entryPointAddress; - } + this.bundlerConfig.entryPointAddress = bundlerConfig.entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS; } - private getBundlerUrl(): string { + public getBundlerUrl(): string { return `${this.bundlerConfig.bundlerUrl}`; } diff --git a/packages/bundler/src/index.ts b/packages/bundler/src/index.ts index 2cb31e82e..b7185747d 100644 --- a/packages/bundler/src/index.ts +++ b/packages/bundler/src/index.ts @@ -1,3 +1,4 @@ export * from "./interfaces/IBundler"; export * from "./Bundler"; export * from "./utils/Types"; +export * from "./utils/Utils"; diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts index d9a6361cb..8ba7ccb50 100644 --- a/packages/bundler/src/interfaces/IBundler.ts +++ b/packages/bundler/src/interfaces/IBundler.ts @@ -8,4 +8,5 @@ export interface IBundler { getUserOpByHash(_userOpHash: string): Promise; getGasFeeValues(): Promise; getUserOpStatus(_userOpHash: string): Promise; + getBundlerUrl(): string; } diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index 6c02cbde5..c23697293 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -4,13 +4,14 @@ import { Hex } from "viem"; export type Bundlerconfig = { bundlerUrl: string; entryPointAddress?: string; - chainId: number; + chainId?: number; // eslint-disable-next-line no-unused-vars userOpReceiptIntervals?: { [key in number]?: number }; userOpWaitForTxHashIntervals?: { [key in number]?: number }; userOpReceiptMaxDurationIntervals?: { [key in number]?: number }; userOpWaitForTxHashMaxDurationIntervals?: { [key in number]?: number }; }; +export type BunderConfigWithChainId = Bundlerconfig & { chainId: number }; export type UserOpReceipt = { userOpHash: string; diff --git a/packages/bundler/src/utils/Utils.ts b/packages/bundler/src/utils/Utils.ts new file mode 100644 index 000000000..a64420100 --- /dev/null +++ b/packages/bundler/src/utils/Utils.ts @@ -0,0 +1,9 @@ +export const extractChainIdFromBundlerUrl = (url: string): number => { + try { + const regex = /\/api\/v2\/(\d+)\/[a-zA-Z0-9.-]+$/; + const match = regex.exec(url)!; + return parseInt(match[1]); + } catch (error) { + throw new Error("Invalid chain id"); + } +}; diff --git a/packages/common/.esbuild.js b/packages/common/.esbuild.js new file mode 100644 index 000000000..124f56671 --- /dev/null +++ b/packages/common/.esbuild.js @@ -0,0 +1,59 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), + plugins: [ + esbuildPluginTsc({ + force: true, + }), + ], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + outfile: "dist/esm/index.js", + platform: "neutral", +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + outfile: "dist/src/index.js", + sourcemap: true, + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/common/README.md b/packages/common/README.md new file mode 100644 index 000000000..db4c4a8c7 --- /dev/null +++ b/packages/common/README.md @@ -0,0 +1,11 @@ +# `@biconomy/common` + +common utils + +common methods for other biconomy packages + +## Usage + +``` +no direct usage of this package +``` diff --git a/packages/common/package.json b/packages/common/package.json new file mode 100644 index 000000000..02db6f7e5 --- /dev/null +++ b/packages/common/package.json @@ -0,0 +1,51 @@ +{ + "name": "@biconomy/common", + "version": "3.1.2", + "description": "common utils to be used for aa transactions", + "keywords": [ + "utils" + ], + "author": "livingrockrises ", + "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", + "license": "MIT", + "main": "dist/src/index.js", + "files": [ + "dist/*", + "README.md" + ], + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" + }, + "scripts": { + "unbuild": "rimraf dist *.tsbuildinfo", + "build:watch": "node .esbuild.js CJS --watch", + "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", + "build:cjs": "node .esbuild.js CJS", + "build:esm": "node .esbuild.js ESM", + "build:typ": "tsc -noEmit && node .esbuild.js TYP", + "build:tsc": "rimraf dist && tsc", + "test:file": "jest --config=../../jest.config.js --runInBand", + "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", + "test:run": "jest tests/**/*.spec.ts --runInBand", + "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", + "format": "prettier --write \"{src,tests}/**/*.ts\"", + "lint": "tslint -p tsconfig.json" + }, + "bugs": { + "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" + }, + "dependencies": { + "@alchemy/aa-core": "^1.2.2", + "viem": "^1.20.3", + "@ethersproject/abstract-signer": "^5.7.0" + }, + "devDependencies": { + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" + } +} diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts new file mode 100644 index 000000000..31b6de882 --- /dev/null +++ b/packages/common/src/index.ts @@ -0,0 +1,4 @@ +export * from "./utils/Helpers"; +export * from "./utils/Types"; +export * from "./utils/Constants"; +export { EthersSigner } from "./utils/EthersSigner"; diff --git a/packages/common/src/utils/Constants.ts b/packages/common/src/utils/Constants.ts new file mode 100644 index 000000000..c21055d7f --- /dev/null +++ b/packages/common/src/utils/Constants.ts @@ -0,0 +1,7 @@ +import { SupportedSignerName } from "./Types"; + +export const UNIQUE_PROPERTIES_PER_SIGNER: Record = { + alchemy: "signerType", + ethers: "provider", + viem: "transport", +}; diff --git a/packages/account/src/utils/EthersSigner.ts b/packages/common/src/utils/EthersSigner.ts similarity index 100% rename from packages/account/src/utils/EthersSigner.ts rename to packages/common/src/utils/EthersSigner.ts diff --git a/packages/common/src/utils/Helpers/convertSigner.ts b/packages/common/src/utils/Helpers/convertSigner.ts new file mode 100644 index 000000000..0efce9f48 --- /dev/null +++ b/packages/common/src/utils/Helpers/convertSigner.ts @@ -0,0 +1,57 @@ +import { EthersSigner } from "../EthersSigner"; +import { SupportedSigner } from "../Types"; +import { WalletClient } from "viem"; +import { WalletClientSigner, SmartAccountSigner } from "@alchemy/aa-core"; +import { UNIQUE_PROPERTIES_PER_SIGNER } from "../Constants"; +import { Signer } from "@ethersproject/abstract-signer"; + +interface SmartAccountResult { + signer: SmartAccountSigner; + chainId: number | undefined; +} + +export const convertSigner = async (signer: SupportedSigner, skipChainIdCalls: boolean = false): Promise => { + let resolvedSmartAccountSigner: SmartAccountSigner; + let chainId: number | undefined; + const isAnAlchemySigner = UNIQUE_PROPERTIES_PER_SIGNER.alchemy in signer; + const isAnEthersSigner = UNIQUE_PROPERTIES_PER_SIGNER.ethers in signer; + const isAViemSigner = UNIQUE_PROPERTIES_PER_SIGNER.viem in signer; + + if (!isAnAlchemySigner) { + if (isAnEthersSigner) { + const ethersSigner = signer as Signer; + if (!skipChainIdCalls) { + // If chainId not provided, get it from walletClient + if (!ethersSigner.provider) { + throw new Error("Cannot consume an ethers Wallet without a provider"); + } + const chainIdFromProvider = await ethersSigner.provider.getNetwork(); + if (!chainIdFromProvider?.chainId) { + throw new Error("Cannot consume an ethers Wallet without a chainId"); + } + chainId = Number(chainIdFromProvider.chainId); + } + // convert ethers Wallet to alchemy's SmartAccountSigner under the hood + resolvedSmartAccountSigner = new EthersSigner(ethersSigner, "ethers"); + } else if (isAViemSigner) { + const walletClient = signer as WalletClient; + if (!walletClient.account) { + throw new Error("Cannot consume a viem wallet without an account"); + } + if (!skipChainIdCalls) { + // If chainId not provided, get it from walletClient + if (!walletClient.chain) { + throw new Error("Cannot consume a viem wallet without a chainId"); + } + chainId = walletClient.chain.id; + } + // convert viems walletClient to alchemy's SmartAccountSigner under the hood + resolvedSmartAccountSigner = new WalletClientSigner(walletClient, "viem"); + } else { + throw new Error("Unsupported signer"); + } + } else { + resolvedSmartAccountSigner = signer as SmartAccountSigner; + } + return { signer: resolvedSmartAccountSigner, chainId }; +}; diff --git a/packages/common/src/utils/Helpers/index.ts b/packages/common/src/utils/Helpers/index.ts new file mode 100644 index 000000000..5567b8185 --- /dev/null +++ b/packages/common/src/utils/Helpers/index.ts @@ -0,0 +1 @@ +export * from "./convertSigner"; diff --git a/packages/common/src/utils/Types.ts b/packages/common/src/utils/Types.ts new file mode 100644 index 000000000..11006b97c --- /dev/null +++ b/packages/common/src/utils/Types.ts @@ -0,0 +1,6 @@ +import { SmartAccountSigner } from "@alchemy/aa-core"; +import { WalletClient } from "viem"; +import { Signer } from "@ethersproject/abstract-signer"; + +export type SupportedSignerName = "alchemy" | "ethers" | "viem"; +export type SupportedSigner = SmartAccountSigner | WalletClient | Signer; diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json new file mode 100644 index 000000000..7584e7676 --- /dev/null +++ b/packages/common/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src" + }, + "include": ["./**/*.ts"] +} diff --git a/packages/modules/package.json b/packages/modules/package.json index ab7759c46..6bcf43ccf 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -42,10 +42,12 @@ }, "dependencies": { "@alchemy/aa-core": "^1.2.2", + "@biconomy/common": "^3.1.2", "merkletreejs": "^0.3.9", "viem": "^1.20.3" }, "devDependencies": { + "@biconomy/account": "^3.1.2", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12" diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index 22f9a3bf5..a80b5e8da 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -1,23 +1,30 @@ import { Hex, encodeFunctionData, getAddress, parseAbi, toBytes } from "viem"; import { SmartAccountSigner } from "@alchemy/aa-core"; -import { ECDSAOwnershipValidationModuleConfig, ModuleVersion } from "./utils/Types"; +import { ECDSAOwnershipValidationModuleConfig, ECDSAOwnershipValidationModuleConfigConstructorProps, ModuleVersion } from "./utils/Types"; import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; import { BaseValidationModule } from "./BaseValidationModule"; +import { convertSigner } from "@biconomy/common"; // Could be renamed with suffix API export class ECDSAOwnershipValidationModule extends BaseValidationModule { - signer!: SmartAccountSigner; + signer: SmartAccountSigner; moduleAddress!: Hex; version: ModuleVersion = "V1_0_0"; - private constructor(moduleConfig: ECDSAOwnershipValidationModuleConfig) { + private constructor(moduleConfig: ECDSAOwnershipValidationModuleConfigConstructorProps) { super(moduleConfig); + this.signer = moduleConfig.signer; } public static async create(moduleConfig: ECDSAOwnershipValidationModuleConfig): Promise { - const instance = new ECDSAOwnershipValidationModule(moduleConfig); + // Signer needs to be initialised here before defaultValidationModule is set + const { signer } = await convertSigner(moduleConfig.signer, true); + const configForConstructor: ECDSAOwnershipValidationModuleConfigConstructorProps = { ...moduleConfig, signer }; + + // TODO: (Joe) stop doing things in a 'create' call after the instance has been created + const instance = new ECDSAOwnershipValidationModule(configForConstructor); if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { @@ -31,7 +38,6 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { instance.moduleAddress = DEFAULT_ECDSA_OWNERSHIP_MODULE; // Note: in this case Version remains the default one } - instance.signer = moduleConfig.signer; return instance; } diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index 34e901502..d4db799c7 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -2,24 +2,36 @@ import { Hex, concat, encodeAbiParameters, encodeFunctionData, getAddress, kecca import { UserOperationStruct, SmartAccountSigner } from "@alchemy/aa-core"; import MerkleTree from "merkletreejs"; import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; -import { ModuleVersion, MultiChainUserOpDto, MultiChainValidationModuleConfig } from "./utils/Types"; +import { + ModuleVersion, + MultiChainUserOpDto, + MultiChainValidationModuleConfig, + MultiChainValidationModuleConfigConstructorProps, +} from "./utils/Types"; import { BaseValidationModule } from "./BaseValidationModule"; import { getUserOpHash } from "./utils/Helper"; import { Logger } from "./utils/Logger"; +import { convertSigner } from "@biconomy/common"; export class MultiChainValidationModule extends BaseValidationModule { - signer!: SmartAccountSigner; + signer: SmartAccountSigner; moduleAddress!: Hex; version: ModuleVersion = "V1_0_0"; - private constructor(moduleConfig: MultiChainValidationModuleConfig) { + private constructor(moduleConfig: MultiChainValidationModuleConfigConstructorProps) { super(moduleConfig); + this.signer = moduleConfig.signer; } public static async create(moduleConfig: MultiChainValidationModuleConfig): Promise { - const instance = new MultiChainValidationModule(moduleConfig); + // Signer needs to be initialised here before defaultValidationModule is set + const { signer } = await convertSigner(moduleConfig.signer, true); + const configForConstructor: MultiChainValidationModuleConfigConstructorProps = { ...moduleConfig, signer }; + + // TODO: (Joe) stop doing things in a 'create' call after the instance has been created + const instance = new MultiChainValidationModule(configForConstructor); if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { @@ -33,7 +45,6 @@ export class MultiChainValidationModule extends BaseValidationModule { instance.moduleAddress = DEFAULT_MULTICHAIN_MODULE; // Note: in this case Version remains the default one } - instance.signer = moduleConfig.signer; return instance; } diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index adb6d78ea..99e2bda29 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -42,6 +42,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns A Promise that resolves to an instance of SessionKeyManagerModule */ public static async create(moduleConfig: SessionKeyManagerModuleConfig): Promise { + // TODO: (Joe) stop doing things in a 'create' call after the instance has been created const instance = new SessionKeyManagerModule(moduleConfig); if (moduleConfig.moduleAddress) { diff --git a/packages/modules/src/index.ts b/packages/modules/src/index.ts index f51916377..db68854f7 100644 --- a/packages/modules/src/index.ts +++ b/packages/modules/src/index.ts @@ -8,4 +8,19 @@ export * from "./MultichainValidationModule"; export * from "./SessionKeyManagerModule"; export * from "./BatchedSessionRouterModule"; export * from "./session-validation-modules/ERC20SessionValidationModule"; + +import { + BatchedSessionRouterModule, + ECDSAOwnershipValidationModule, + MultiChainValidationModule, + SessionKeyManagerModule, + ERC20SessionValidationModule, +} from "./"; + +export const createBatchedSessionRouterModule = BatchedSessionRouterModule.create; +export const createMultiChainValidationModule = MultiChainValidationModule.create; +export const createECDSAOwnershipValidationModule = ECDSAOwnershipValidationModule.create; +export const createSessionKeyManagerModule = SessionKeyManagerModule.create; +export const createERC20SessionValidationModule = ERC20SessionValidationModule.create; + // export * from './PasskeyValidationModule' diff --git a/packages/modules/src/session-storage/SessionLocalStorage.ts b/packages/modules/src/session-storage/SessionLocalStorage.ts index 1010b9806..14775fa96 100644 --- a/packages/modules/src/session-storage/SessionLocalStorage.ts +++ b/packages/modules/src/session-storage/SessionLocalStorage.ts @@ -3,7 +3,7 @@ import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage"; import { mainnet } from "viem/chains"; import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; -import { SignerData } from "utils/Types"; +import { SignerData } from "../utils/Types"; export class SessionLocalStorage implements ISessionStorage { private smartAccountAddress: string; @@ -23,11 +23,13 @@ export class SessionLocalStorage implements ISessionStorage { } private getSessionStore(): any { + // @ts-ignore: LocalStorage is not available in node const data = localStorage.getItem(this.getStorageKey("sessions")); return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] }; } private getSignerStore(): any { + // @ts-ignore: LocalStorage is not available in node const data = localStorage.getItem(this.getStorageKey("signers")); return data ? JSON.parse(data) : {}; } @@ -45,6 +47,7 @@ export class SessionLocalStorage implements ISessionStorage { leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule) as Hex; leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey) as Hex; data.leafNodes.push(leaf); + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } @@ -94,12 +97,14 @@ export class SessionLocalStorage implements ISessionStorage { } session.status = status; + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } async clearPendingSessions(): Promise { const data = this.getSessionStore(); data.leafNodes = data.leafNodes.filter((s: SessionLeafNode) => s.status !== "PENDING"); + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } @@ -126,6 +131,7 @@ export class SessionLocalStorage implements ISessionStorage { "json-rpc", // signerType ); signers[this.toLowercaseAddress(accountSigner.address)] = signerData; + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)); return walletClientSigner; } @@ -166,6 +172,7 @@ export class SessionLocalStorage implements ISessionStorage { setMerkleRoot(merkleRoot: string): Promise { const data = this.getSessionStore(); data.merkleRoot = merkleRoot; + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); return Promise.resolve(); } diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 4726314aa..099f4dc98 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -2,7 +2,7 @@ import { Chain, Hex } from "viem"; import { UserOperationStruct, SmartAccountSigner } from "@alchemy/aa-core"; import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; import { ISessionStorage } from "../interfaces/ISessionStorage"; - +import { SupportedSigner } from "@biconomy/common"; export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' export interface BaseValidationModuleConfig { @@ -10,6 +10,12 @@ export interface BaseValidationModuleConfig { } export interface ECDSAOwnershipValidationModuleConfig extends BaseValidationModuleConfig { + moduleAddress?: Hex; + version?: ModuleVersion; + signer: SupportedSigner; +} + +export interface ECDSAOwnershipValidationModuleConfigConstructorProps extends BaseValidationModuleConfig { moduleAddress?: Hex; version?: ModuleVersion; signer: SmartAccountSigner; @@ -88,6 +94,11 @@ export interface CreateSessionDataParams { } export interface MultiChainValidationModuleConfig extends BaseValidationModuleConfig { + moduleAddress?: Hex; + version?: ModuleVersion; + signer: SupportedSigner; +} +export interface MultiChainValidationModuleConfigConstructorProps extends BaseValidationModuleConfig { moduleAddress?: Hex; version?: ModuleVersion; signer: SmartAccountSigner; diff --git a/packages/modules/tests/modules.spec.ts b/packages/modules/tests/modules.spec.ts new file mode 100644 index 000000000..fe6f10346 --- /dev/null +++ b/packages/modules/tests/modules.spec.ts @@ -0,0 +1,45 @@ +import { TestData } from "../../../tests"; +import { createSmartWalletClient } from "@biconomy/account"; +import { createECDSAOwnershipValidationModule, createMultiChainValidationModule } from "../src"; + +describe("Account Tests", () => { + let ganache: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-unit-tests + [ganache] = testDataPerChain; + }); + + it("should create a MultiChainValidationModule from an ethers signer using convertSigner", async () => { + const { + bundlerUrl, + whale: { ethersSigner: signer }, + } = ganache; + + const defaultValidationModule = await createMultiChainValidationModule({ signer }); + // Should not require a signer or chainId + const smartWallet = await createSmartWalletClient({ bundlerUrl, defaultValidationModule }); + const address = await smartWallet.getAccountAddress(); + expect(address).toBeTruthy(); + // expect the relevant module to be set + expect(smartWallet.activeValidationModule).toEqual(defaultValidationModule); + }); + + it("should create a ECDSAOwnershipValidationModule from a viem signer using convertSigner", async () => { + const { + bundlerUrl, + whale: { viemWallet: signer }, + } = ganache; + + const defaultValidationModule = await createECDSAOwnershipValidationModule({ signer }); + // Should not require a signer or chainId + const smartWallet = await createSmartWalletClient({ + bundlerUrl, + defaultValidationModule, + }); + const address = await smartWallet.getAccountAddress(); + expect(address).toBeTruthy(); + // expect the relevant module to be set + expect(smartWallet.activeValidationModule).toEqual(defaultValidationModule); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index f5557a831..75a671002 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,6 +14,7 @@ { "path": "./packages/transak" }, { "path": "./packages/bundler" }, { "path": "./packages/paymaster" }, - { "path": "./packages/account" } + { "path": "./packages/account" }, + { "path": "./packages/common" } ] } From 68a59d69a90f29bc609e86b77024b2d212d0a7d7 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Mon, 22 Jan 2024 14:40:34 +0000 Subject: [PATCH 1057/1247] fix:circular_dependency --- packages/modules/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/modules/package.json b/packages/modules/package.json index 6bcf43ccf..5360f16f1 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -47,7 +47,6 @@ "viem": "^1.20.3" }, "devDependencies": { - "@biconomy/account": "^3.1.2", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12" From 5dce50733c065525b22b93ecc31556ce877148d6 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Mon, 22 Jan 2024 15:57:25 +0000 Subject: [PATCH 1058/1247] Resolved SM-547 --- .husky/.gitignore | 1 + .husky/pre-commit | 4 ++ .lintstagedrc.json | 0 package.json | 8 ++- .../account/src/BiconomySmartAccountV2.ts | 2 +- packages/account/src/utils/index.ts | 3 + packages/bundler/package.json | 3 +- packages/bundler/src/Bundler.ts | 2 +- packages/bundler/src/utils/HttpRequests.ts | 63 ------------------- packages/bundler/src/utils/Logger.ts | 49 --------------- packages/common/src/index.ts | 2 + .../src/utils/HttpRequests.ts | 2 +- .../{account => common}/src/utils/Logger.ts | 0 packages/modules/package.json | 1 - .../modules/src/MultichainValidationModule.ts | 3 +- packages/modules/src/utils/Logger.ts | 49 --------------- packages/paymaster/package.json | 3 +- packages/paymaster/src/BiconomyPaymaster.ts | 3 +- packages/paymaster/src/utils/Logger.ts | 49 --------------- 19 files changed, 26 insertions(+), 221 deletions(-) create mode 100644 .husky/.gitignore create mode 100755 .husky/pre-commit create mode 100644 .lintstagedrc.json create mode 100644 packages/account/src/utils/index.ts delete mode 100644 packages/bundler/src/utils/HttpRequests.ts delete mode 100644 packages/bundler/src/utils/Logger.ts rename packages/{paymaster => common}/src/utils/HttpRequests.ts (97%) rename packages/{account => common}/src/utils/Logger.ts (100%) delete mode 100644 packages/modules/src/utils/Logger.ts delete mode 100644 packages/paymaster/src/utils/Logger.ts diff --git a/.husky/.gitignore b/.husky/.gitignore new file mode 100644 index 000000000..31354ec13 --- /dev/null +++ b/.husky/.gitignore @@ -0,0 +1 @@ +_ diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 000000000..0312b7602 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx lint-staged \ No newline at end of file diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 000000000..e69de29bb diff --git a/package.json b/package.json index c28cc9191..e64a10fd2 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,8 @@ "test:coverage": "concurrently -k --success first 'yarn start:ganache' 'yarn jest --runInBand --coverage'", "test:e2e": "yarn test:run --config=jest.config.e2e.ts", "diff": "lerna diff", - "release": "lerna version patch --no-git-tag-version --no-push --conventional-commits --yes" + "release": "lerna version patch --no-git-tag-version --no-push --conventional-commits --yes", + "prepare": "husky install" }, "changelog": { "labels": { @@ -74,13 +75,18 @@ "eslint-plugin-security": "^1.7.1", "ganache": "^7.9.2", "hardhat": "^2.17.3", + "husky": "^8.0.0", "jest": "^29.7.0", "lerna": "^7.2.0", "lerna-changelog": "^2.2.0", + "lint-staged": "^15.2.0", "nx": "^16.8.1", "prettier": "^3.0.3", "rimraf": "^5.0.1", "ts-jest": "^29.1.1", "ts-node": "^10.9.1" + }, + "lint-staged": { + "*.ts": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}' --fix --cache" } } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 0278c2cc9..c4eed8006 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -63,7 +63,7 @@ import { import { BiconomyFactoryAbi } from "./abi/Factory"; import { BiconomyAccountAbi } from "./abi/SmartAccount"; import { AccountResolverAbi } from "./abi/AccountResolver"; -import { Logger } from "./utils/Logger"; +import { Logger } from "@biconomy/common"; import { convertSigner } from "./"; type UserOperationKey = keyof UserOperationStruct; diff --git a/packages/account/src/utils/index.ts b/packages/account/src/utils/index.ts new file mode 100644 index 000000000..c5bd1c933 --- /dev/null +++ b/packages/account/src/utils/index.ts @@ -0,0 +1,3 @@ +export * from "./Types"; +export * from "./Utils" +export * from "./Constants"; \ No newline at end of file diff --git a/packages/bundler/package.json b/packages/bundler/package.json index f5fa283e2..aac86046f 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -45,7 +45,8 @@ }, "dependencies": { "@alchemy/aa-core": "^1.2.2", - "viem": "^1.20.3" + "viem": "^1.20.3", + "@biconomy/common": "^3.1.2" }, "devDependencies": { "esbuild": "^0.19.11", diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index aada56dc2..3b92965a7 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -26,7 +26,7 @@ import { UserOpReceiptMaxDurationIntervals, DEFAULT_ENTRYPOINT_ADDRESS, } from "./utils/Constants"; -import { sendRequest, HttpMethod } from "./utils/HttpRequests"; +import { sendRequest, HttpMethod } from "@biconomy/common"; import { extractChainIdFromBundlerUrl } from "utils/Utils"; /** diff --git a/packages/bundler/src/utils/HttpRequests.ts b/packages/bundler/src/utils/HttpRequests.ts deleted file mode 100644 index 26783c1e1..000000000 --- a/packages/bundler/src/utils/HttpRequests.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Logger } from "./Logger"; - -export enum HttpMethod { - Get = "get", - Post = "post", - Delete = "delete", -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -interface HttpRequest { - url: string; - method: HttpMethod; - body?: Record; -} - -export async function sendRequest({ url, method, body }: HttpRequest): Promise { - const response = await fetch(url, { - method, - headers: { - Accept: "application/json", - "Content-Type": "application/json", - }, - body: JSON.stringify(body), - }); - - let jsonResponse; - try { - jsonResponse = await response.json(); - Logger.log("Bundler RPC Response", jsonResponse); - } catch (error) { - if (!response.ok) { - throw new Error(response.statusText); - } - } - if (response.ok) { - return jsonResponse as T; - } - if (jsonResponse.error) { - throw new Error(jsonResponse.error); - } - if (jsonResponse.message) { - throw new Error(jsonResponse.message); - } - if (jsonResponse.msg) { - throw new Error(jsonResponse.msg); - } - if (jsonResponse.data) { - throw new Error(jsonResponse.data); - } - if (jsonResponse.detail) { - throw new Error(jsonResponse.detail); - } - if (jsonResponse.message) { - throw new Error(jsonResponse.message); - } - if (jsonResponse.nonFieldErrors) { - throw new Error(jsonResponse.nonFieldErrors); - } - if (jsonResponse.delegate) { - throw new Error(jsonResponse.delegate); - } - throw new Error(response.statusText); -} diff --git a/packages/bundler/src/utils/Logger.ts b/packages/bundler/src/utils/Logger.ts deleted file mode 100644 index 0bdcae373..000000000 --- a/packages/bundler/src/utils/Logger.ts +++ /dev/null @@ -1,49 +0,0 @@ -/* eslint-disable no-console */ -/** - * Single class to be used for logging purpose. - * - * @param {any} message Message to be logged - */ -class Logger { - // By default, the logger is not in debug mode. - static isDebug: boolean = process.env.BICONOMY_SDK_DEBUG === "true" ? true : process.env.REACT_APP_BICONOMY_SDK_DEBUG === "true" ? true : false; - - /** - * \x1b[0m is an escape sequence to reset the color of the text - * All color codes used - 31 - Red, 33 - Yellow, 34 - Blue, 35 - Magenta, 36 - Cyan - * log - Magenta[time] Cyan[message]: [value] - * warn - Magenta[time] Yellow[WARN]: Cyan[message]: [value] - * error - Magenta[time] Red[ERROR]: Cyan[message]: [value] - */ - /* eslint-disable @typescript-eslint/no-explicit-any */ - static log(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const logMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[36m${message}\x1b[0m:`; - - if (Logger.isDebug) { - console.log(logMessage, value === undefined ? "" : value); - } - } - - /* eslint-disable @typescript-eslint/no-explicit-any */ - static warn(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const warnMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[33mWARN\x1b[0m: \x1b[36m${message}\x1b[0m`; - - if (Logger.isDebug) { - console.warn(warnMessage, value === undefined ? "" : value); - } - } - - /* eslint-disable @typescript-eslint/no-explicit-any */ - static error(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const errorMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[31mERROR\x1b[0m: \x1b[36m${message}\x1b[0m`; - - if (Logger.isDebug) { - console.error(errorMessage, value === undefined ? "" : value); - } - } -} - -export { Logger }; diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 31b6de882..5b548d5a3 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -1,4 +1,6 @@ export * from "./utils/Helpers"; export * from "./utils/Types"; export * from "./utils/Constants"; +export * from "./utils/Logger"; +export * from "./utils/HttpRequests"; export { EthersSigner } from "./utils/EthersSigner"; diff --git a/packages/paymaster/src/utils/HttpRequests.ts b/packages/common/src/utils/HttpRequests.ts similarity index 97% rename from packages/paymaster/src/utils/HttpRequests.ts rename to packages/common/src/utils/HttpRequests.ts index 4d8d8c081..8524d2726 100644 --- a/packages/paymaster/src/utils/HttpRequests.ts +++ b/packages/common/src/utils/HttpRequests.ts @@ -7,7 +7,7 @@ export enum HttpMethod { } /* eslint-disable @typescript-eslint/no-explicit-any */ -interface HttpRequest { +export interface HttpRequest { url: string; method: HttpMethod; body?: Record; diff --git a/packages/account/src/utils/Logger.ts b/packages/common/src/utils/Logger.ts similarity index 100% rename from packages/account/src/utils/Logger.ts rename to packages/common/src/utils/Logger.ts diff --git a/packages/modules/package.json b/packages/modules/package.json index 6bcf43ccf..5360f16f1 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -47,7 +47,6 @@ "viem": "^1.20.3" }, "devDependencies": { - "@biconomy/account": "^3.1.2", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12" diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index d4db799c7..957e27635 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -10,8 +10,7 @@ import { } from "./utils/Types"; import { BaseValidationModule } from "./BaseValidationModule"; import { getUserOpHash } from "./utils/Helper"; -import { Logger } from "./utils/Logger"; -import { convertSigner } from "@biconomy/common"; +import { convertSigner, Logger } from "@biconomy/common"; export class MultiChainValidationModule extends BaseValidationModule { signer: SmartAccountSigner; diff --git a/packages/modules/src/utils/Logger.ts b/packages/modules/src/utils/Logger.ts deleted file mode 100644 index 0bdcae373..000000000 --- a/packages/modules/src/utils/Logger.ts +++ /dev/null @@ -1,49 +0,0 @@ -/* eslint-disable no-console */ -/** - * Single class to be used for logging purpose. - * - * @param {any} message Message to be logged - */ -class Logger { - // By default, the logger is not in debug mode. - static isDebug: boolean = process.env.BICONOMY_SDK_DEBUG === "true" ? true : process.env.REACT_APP_BICONOMY_SDK_DEBUG === "true" ? true : false; - - /** - * \x1b[0m is an escape sequence to reset the color of the text - * All color codes used - 31 - Red, 33 - Yellow, 34 - Blue, 35 - Magenta, 36 - Cyan - * log - Magenta[time] Cyan[message]: [value] - * warn - Magenta[time] Yellow[WARN]: Cyan[message]: [value] - * error - Magenta[time] Red[ERROR]: Cyan[message]: [value] - */ - /* eslint-disable @typescript-eslint/no-explicit-any */ - static log(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const logMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[36m${message}\x1b[0m:`; - - if (Logger.isDebug) { - console.log(logMessage, value === undefined ? "" : value); - } - } - - /* eslint-disable @typescript-eslint/no-explicit-any */ - static warn(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const warnMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[33mWARN\x1b[0m: \x1b[36m${message}\x1b[0m`; - - if (Logger.isDebug) { - console.warn(warnMessage, value === undefined ? "" : value); - } - } - - /* eslint-disable @typescript-eslint/no-explicit-any */ - static error(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const errorMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[31mERROR\x1b[0m: \x1b[36m${message}\x1b[0m`; - - if (Logger.isDebug) { - console.error(errorMessage, value === undefined ? "" : value); - } - } -} - -export { Logger }; diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index d919b9877..a6d4ecae1 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -42,7 +42,8 @@ }, "dependencies": { "@alchemy/aa-core": "^1.2.2", - "viem": "^1.20.3" + "viem": "^1.20.3", + "@biconomy/common": "^3.1.2" }, "devDependencies": { "esbuild": "^0.19.11", diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 1f8c3dccb..fd57e2422 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -15,9 +15,8 @@ import { } from "./utils/Types"; import { IHybridPaymaster } from "./interfaces/IHybridPaymaster"; import { MAX_UINT256, ERC20_ABI, ADDRESS_ZERO } from "./utils/Constants"; -import { sendRequest, HttpMethod } from "./utils/HttpRequests"; +import { sendRequest, HttpMethod, Logger } from "@biconomy/common"; import { getTimestampInSeconds } from "./utils/Helpers"; -import { Logger } from "./utils/Logger"; const defaultPaymasterConfig: PaymasterConfig = { paymasterUrl: "", diff --git a/packages/paymaster/src/utils/Logger.ts b/packages/paymaster/src/utils/Logger.ts deleted file mode 100644 index 0bdcae373..000000000 --- a/packages/paymaster/src/utils/Logger.ts +++ /dev/null @@ -1,49 +0,0 @@ -/* eslint-disable no-console */ -/** - * Single class to be used for logging purpose. - * - * @param {any} message Message to be logged - */ -class Logger { - // By default, the logger is not in debug mode. - static isDebug: boolean = process.env.BICONOMY_SDK_DEBUG === "true" ? true : process.env.REACT_APP_BICONOMY_SDK_DEBUG === "true" ? true : false; - - /** - * \x1b[0m is an escape sequence to reset the color of the text - * All color codes used - 31 - Red, 33 - Yellow, 34 - Blue, 35 - Magenta, 36 - Cyan - * log - Magenta[time] Cyan[message]: [value] - * warn - Magenta[time] Yellow[WARN]: Cyan[message]: [value] - * error - Magenta[time] Red[ERROR]: Cyan[message]: [value] - */ - /* eslint-disable @typescript-eslint/no-explicit-any */ - static log(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const logMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[36m${message}\x1b[0m:`; - - if (Logger.isDebug) { - console.log(logMessage, value === undefined ? "" : value); - } - } - - /* eslint-disable @typescript-eslint/no-explicit-any */ - static warn(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const warnMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[33mWARN\x1b[0m: \x1b[36m${message}\x1b[0m`; - - if (Logger.isDebug) { - console.warn(warnMessage, value === undefined ? "" : value); - } - } - - /* eslint-disable @typescript-eslint/no-explicit-any */ - static error(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const errorMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[31mERROR\x1b[0m: \x1b[36m${message}\x1b[0m`; - - if (Logger.isDebug) { - console.error(errorMessage, value === undefined ? "" : value); - } - } -} - -export { Logger }; From 965e44cda71527ac61ce559ef7e0f34b51bd9fb2 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Mon, 22 Jan 2024 16:15:18 +0000 Subject: [PATCH 1059/1247] lint:fix --- .lintstagedrc.json | 0 packages/account/src/utils/index.ts | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 .lintstagedrc.json diff --git a/.lintstagedrc.json b/.lintstagedrc.json deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/account/src/utils/index.ts b/packages/account/src/utils/index.ts index c5bd1c933..8d298755a 100644 --- a/packages/account/src/utils/index.ts +++ b/packages/account/src/utils/index.ts @@ -1,3 +1,3 @@ export * from "./Types"; -export * from "./Utils" -export * from "./Constants"; \ No newline at end of file +export * from "./Utils"; +export * from "./Constants"; From 2a625cb685e0e39948d7a2f7e999debeacb62d6c Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Tue, 23 Jan 2024 14:17:44 +0200 Subject: [PATCH 1060/1247] Removed lint-staged (#382) Co-authored-by: GabiDev --- .husky/pre-commit | 4 ---- package.json | 4 ---- 2 files changed, 8 deletions(-) delete mode 100755 .husky/pre-commit diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index 0312b7602..000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -npx lint-staged \ No newline at end of file diff --git a/package.json b/package.json index e64a10fd2..ec955cd72 100644 --- a/package.json +++ b/package.json @@ -79,14 +79,10 @@ "jest": "^29.7.0", "lerna": "^7.2.0", "lerna-changelog": "^2.2.0", - "lint-staged": "^15.2.0", "nx": "^16.8.1", "prettier": "^3.0.3", "rimraf": "^5.0.1", "ts-jest": "^29.1.1", "ts-node": "^10.9.1" - }, - "lint-staged": { - "*.ts": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}' --fix --cache" } } From 56c87c6fecb4933db48ca8b416f536314668e2de Mon Sep 17 00:00:00 2001 From: joepegler Date: Wed, 24 Jan 2024 10:21:15 +0000 Subject: [PATCH 1061/1247] README tweaks (#377) * Update README.md --- .husky/.gitignore | 1 - package.json | 4 +--- packages/account/Readme.md | 37 +++++++++++-------------------------- 3 files changed, 12 insertions(+), 30 deletions(-) delete mode 100644 .husky/.gitignore diff --git a/.husky/.gitignore b/.husky/.gitignore deleted file mode 100644 index 31354ec13..000000000 --- a/.husky/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_ diff --git a/package.json b/package.json index ec955cd72..c28cc9191 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,7 @@ "test:coverage": "concurrently -k --success first 'yarn start:ganache' 'yarn jest --runInBand --coverage'", "test:e2e": "yarn test:run --config=jest.config.e2e.ts", "diff": "lerna diff", - "release": "lerna version patch --no-git-tag-version --no-push --conventional-commits --yes", - "prepare": "husky install" + "release": "lerna version patch --no-git-tag-version --no-push --conventional-commits --yes" }, "changelog": { "labels": { @@ -75,7 +74,6 @@ "eslint-plugin-security": "^1.7.1", "ganache": "^7.9.2", "hardhat": "^2.17.3", - "husky": "^8.0.0", "jest": "^29.7.0", "lerna": "^7.2.0", "lerna-changelog": "^2.2.0", diff --git a/packages/account/Readme.md b/packages/account/Readme.md index ff9a721da..6ec9b3737 100644 --- a/packages/account/Readme.md +++ b/packages/account/Readme.md @@ -22,16 +22,14 @@ The account package achieves this by providing a comprehensive set of methods th ## Smart Account instance configuration -#### BiconomySmartAccount (V1 Smart Account) +#### BiconomySmartAccount (V2 Smart Account) -| Key | Description | -| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| signer | This signer will be used for signing userOps for any transactions you build. You can supply your your EOA wallet signer | -| chainId | This represents the network your smart wallet transactions will be conducted on. Take a look following Link for supported chain id's | -| rpcUrl | This represents the EVM node RPC URL you'll interact with, adjustable according to your needs. We recommend to use some private node url for efficient userOp building | -| paymaster | you can pass same paymaster instance that you have build in previous step. Alternatively, you can skip this if you are not interested in sponsoring transaction using paymaster | -| | Note: if you don't pass the paymaster instance, your smart account will need funds to pay for transaction fees. | -| bundler | You can pass same bundler instance that you have build in previous step. Alternatively, you can skip this if you are only interested in building userOP | +| Key | Description | +| ----------------------- | ----------------------------------------------------------------------------------------------------------------------- | +| signer | This signer will be used for signing userOps for any transactions you build. You can supply your your EOA wallet signer | +| biconomyPaymasterApiKey | You can pass in a paymaster url necessary for sponsoring transactions (retrieved from the biconomy dashboard) | +| | Note: If you don't pass the paymaster instance, your smart account will need funds to pay for transaction fees. | +| bundlerUrl | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | ## Example Usage @@ -43,25 +41,12 @@ import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; import { mainnet as chain } from "viem/chains"; const account = privateKeyToAccount(generatePrivateKey()); -const signer = createWalletClient({ - account, - chain, - transport: http(), -}); - -const smartWallet = await createSmartWalletClient({ - signer, - bundlerUrl, -}); +const signer = createWalletClient({ account, chain, transport: http() }); +const smartWallet = await createSmartWalletClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); // Send some ETH -const { wait } = await smartWallet.sendTransaction({ - to: "0x85B51B068bF0fefFEFD817882a14f6F5BDF7fF2E", - value: 1, - data: "0x", -}); - +const { waitForTxHash } = await smartWallet.sendTransaction({ to: "0x...", value: 1 }); const { receipt: { transactionHash }, -} = await wait(); +} = await waitForTxHash(); ``` From 232472c788bed0619cf6295ade076b6ec3a9e0f8 Mon Sep 17 00:00:00 2001 From: joepegler Date: Wed, 24 Jan 2024 12:14:00 +0000 Subject: [PATCH 1062/1247] createSmartAccountClient (#385) --- README.md | 6 ++--- packages/account/Readme.md | 4 ++-- .../account/src/BiconomySmartAccountV2.ts | 16 +++++++------- packages/account/src/index.ts | 2 +- packages/account/tests/account.e2e.spec.ts | 16 +++++++------- packages/account/tests/account.spec.ts | 22 +++++++++---------- packages/modules/tests/modules.spec.ts | 6 ++--- .../multiChainValidationModule.e2e.spec.ts | 6 ++--- .../tests/sessionValidationModule.e2e.spec.ts | 4 ++-- 9 files changed, 41 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index e13d095d4..20aaa63af 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Unlock the full potential of **ERC4337 Account Abstraction** with methods that s ```javascript -import { createSmartWalletClient } from "@biconomy/account"; +import { createSmartAccountClient } from "@biconomy/account"; import { createWalletClient, http } from "viem"; import { privateKeyToAccount } from "viem/accounts"; import { polygonMumbai } from "viem/chains"; @@ -41,7 +41,7 @@ const signer = createWalletClient({ const bundlerUrl = 'https://bundler.biconomy.io/api/v2/80001/' // Please go to https://dashboard.biconomy.io and generate bundler url -const biconomySmartAccount = await createSmartWalletClient({ bundlerUrl, signer }); +const biconomySmartAccount = await createSmartAccountClient({ bundlerUrl, signer }); console.log("address: ", await biconomySmartAccount.getAccountAddress()); ``` @@ -54,7 +54,7 @@ import { Paymaster, IPaymaster } from "@biconomy/account"; const paymasterUrl = ""; // Please go to https://dashboard.biconomy.io to setup a paymasterUrl // ... -const biconomySmartAccount = await createSmartWalletClient({ bundlerUrl, signer, paymasterUrl }); +const biconomySmartAccount = await createSmartAccountClient({ bundlerUrl, signer, paymasterUrl }); ``` ## 🛠️ Quickstart diff --git a/packages/account/Readme.md b/packages/account/Readme.md index 6ec9b3737..69ab94d58 100644 --- a/packages/account/Readme.md +++ b/packages/account/Readme.md @@ -35,14 +35,14 @@ The account package achieves this by providing a comprehensive set of methods th ```typescript // This is how you create a smartWallet in your dapp -import { Bundler, createSmartWalletClient } from "@biconomy/account"; +import { Bundler, createSmartAccountClient } from "@biconomy/account"; import { createWalletClient, http, createPublicClient } from "viem"; import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; import { mainnet as chain } from "viem/chains"; const account = privateKeyToAccount(generatePrivateKey()); const signer = createWalletClient({ account, chain, transport: http() }); -const smartWallet = await createSmartWalletClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); +const smartWallet = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); // Send some ETH const { waitForTxHash } = await smartWallet.sendTransaction({ to: "0x...", value: 1 }); diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index c4eed8006..ce6222e9c 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -159,7 +159,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * @example * import { createClient } from "viem" - * import { createSmartWalletClient, BiconomySmartAccountV2 } from "@biconomy/account" + * import { createSmartAccountClient, BiconomySmartAccountV2 } from "@biconomy/account" * import { createWalletClient, http } from "viem"; * import { polygonMumbai } from "viem/chains"; * @@ -175,7 +175,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * // Is the same as... * - * const smartWallet = await createSmartWalletClient({ signer, bundlerUrl }); + * const smartWallet = await createSmartAccountClient({ signer, bundlerUrl }); * */ public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { @@ -562,7 +562,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * @example * import { createClient } from "viem" - * import { createSmartWalletClient } from "@biconomy/account" + * import { createSmartAccountClient } from "@biconomy/account" * import { createWalletClient, http } from "viem"; * import { polygonMumbai } from "viem/chains"; * @@ -572,7 +572,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * transport: http(), * }); * - * const smartWallet = await createSmartWalletClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const smartWallet = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard * const encodedCall = encodeFunctionData({ * abi: parseAbi(["function safeMint(address to) public"]), * functionName: "safeMint", @@ -732,7 +732,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * @example * import { createClient } from "viem" - * import { createSmartWalletClient } from "@biconomy/account" + * import { createSmartAccountClient } from "@biconomy/account" * import { createWalletClient, http } from "viem"; * import { polygonMumbai } from "viem/chains"; * @@ -742,7 +742,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * transport: http(), * }); * - * const smartWallet = await createSmartWalletClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const smartWallet = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard * const encodedCall = encodeFunctionData({ * abi: parseAbi(["function safeMint(address to) public"]), * functionName: "safeMint", @@ -774,7 +774,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * @example * import { createClient } from "viem" - * import { createSmartWalletClient } from "@biconomy/account" + * import { createSmartAccountClient } from "@biconomy/account" * import { createWalletClient, http } from "viem"; * import { polygonMumbai } from "viem/chains"; * @@ -784,7 +784,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * transport: http(), * }); * - * const smartWallet = await createSmartWalletClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const smartWallet = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard * const encodedCall = encodeFunctionData({ * abi: parseAbi(["function safeMint(address to) public"]), * functionName: "safeMint", diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index 0786c22bc..ad8f01fac 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -17,6 +17,6 @@ export { export { EthersSigner, convertSigner } from "@biconomy/common"; export { Bundler, IBundler, extractChainIdFromBundlerUrl, UserOpResponse } from "@biconomy/bundler"; -export const createSmartWalletClient = BiconomySmartAccountV2.create; +export const createSmartAccountClient = BiconomySmartAccountV2.create; export type SmartWalletConfig = BiconomySmartAccountV2Config; diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index a92fbb2cd..3cddced88 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,5 +1,5 @@ import { TestData } from "../../../tests"; -import { PaymasterUserOperationDto, createSmartWalletClient } from "../src/index"; +import { PaymasterUserOperationDto, createSmartAccountClient } from "../src/index"; import { Hex, encodeFunctionData, parseAbi } from "viem"; import { UserOperationStruct } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "../../../tests/utils"; @@ -21,7 +21,7 @@ describe("Account Tests", () => { publicClient, } = mumbai; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ signer, bundlerUrl, }); @@ -47,7 +47,7 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, } = mumbai; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ signer, biconomyPaymasterApiKey, bundlerUrl, @@ -67,7 +67,7 @@ describe("Account Tests", () => { publicClient, } = mumbai; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey, @@ -112,7 +112,7 @@ describe("Account Tests", () => { publicClient, } = mumbai; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey, @@ -175,7 +175,7 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, } = mumbai; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ signer, biconomyPaymasterApiKey, bundlerUrl, @@ -215,7 +215,7 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, } = mumbai; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ signer, biconomyPaymasterApiKey, bundlerUrl, @@ -235,7 +235,7 @@ describe("Account Tests", () => { bundlerUrl, } = mumbai; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ signer, bundlerUrl, }); diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 982ee8eca..2e58cba0d 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -1,4 +1,4 @@ -import { Paymaster, createSmartWalletClient } from "../src"; +import { Paymaster, createSmartAccountClient } from "../src"; import { createWalletClient, http } from "viem"; import { localhost } from "viem/chains"; import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; @@ -18,7 +18,7 @@ describe("Account Tests", () => { minnow: { ethersSigner: signer }, } = ganache; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ signer, bundlerUrl, }); @@ -32,7 +32,7 @@ describe("Account Tests", () => { bundlerUrl, } = ganache; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ signer, bundlerUrl, }); @@ -47,7 +47,7 @@ describe("Account Tests", () => { bundlerUrl, } = ganache; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ chainId, signer, bundlerUrl, @@ -62,7 +62,7 @@ describe("Account Tests", () => { whale: { viemWallet: signer }, } = ganache; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ signer, bundlerUrl, }); @@ -78,7 +78,7 @@ describe("Account Tests", () => { minnow: { publicAddress: recipient }, } = ganache; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ entryPointAddress, signer, bundlerUrl, @@ -97,7 +97,7 @@ describe("Account Tests", () => { whale: { viemWallet: signer }, } = ganache; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ signer, bundlerUrl, }); @@ -113,7 +113,7 @@ describe("Account Tests", () => { bundlerUrl, } = ganache; - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ signer, bundlerUrl, }); @@ -132,7 +132,7 @@ describe("Account Tests", () => { const paymasterUrl = "https://paymaster.biconomy.io/api/v1/80001/" + biconomyPaymasterApiKey; const paymaster = new Paymaster({ paymasterUrl }); - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ signer, bundlerUrl, paymaster, @@ -151,7 +151,7 @@ describe("Account Tests", () => { }); expect(async () => - createSmartWalletClient({ + createSmartAccountClient({ signer: viemWalletClientNoChainId, bundlerUrl, }), @@ -166,7 +166,7 @@ describe("Account Tests", () => { }); expect(async () => - createSmartWalletClient({ + createSmartAccountClient({ signer: viemWalletNoAccount, bundlerUrl, }), diff --git a/packages/modules/tests/modules.spec.ts b/packages/modules/tests/modules.spec.ts index fe6f10346..ef1967365 100644 --- a/packages/modules/tests/modules.spec.ts +++ b/packages/modules/tests/modules.spec.ts @@ -1,5 +1,5 @@ import { TestData } from "../../../tests"; -import { createSmartWalletClient } from "@biconomy/account"; +import { createSmartAccountClient } from "@biconomy/account"; import { createECDSAOwnershipValidationModule, createMultiChainValidationModule } from "../src"; describe("Account Tests", () => { @@ -18,7 +18,7 @@ describe("Account Tests", () => { const defaultValidationModule = await createMultiChainValidationModule({ signer }); // Should not require a signer or chainId - const smartWallet = await createSmartWalletClient({ bundlerUrl, defaultValidationModule }); + const smartWallet = await createSmartAccountClient({ bundlerUrl, defaultValidationModule }); const address = await smartWallet.getAccountAddress(); expect(address).toBeTruthy(); // expect the relevant module to be set @@ -33,7 +33,7 @@ describe("Account Tests", () => { const defaultValidationModule = await createECDSAOwnershipValidationModule({ signer }); // Should not require a signer or chainId - const smartWallet = await createSmartWalletClient({ + const smartWallet = await createSmartAccountClient({ bundlerUrl, defaultValidationModule, }); diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts index f4847f882..77491cc9e 100644 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -1,6 +1,6 @@ import { BiconomyPaymaster, PaymasterMode } from "@biconomy/paymaster"; import { TestData } from "../../../tests"; -import { createSmartWalletClient } from "../../account/src/index"; +import { createSmartAccountClient } from "../../account/src/index"; import { Hex, encodeFunctionData, parseAbi } from "viem"; import { DEFAULT_MULTICHAIN_MODULE, MultiChainValidationModule } from "@biconomy/modules"; @@ -34,7 +34,7 @@ describe("Account with MultiChainValidation Module Tests", () => { }); const [polygonAccount, baseAccount] = await Promise.all([ - createSmartWalletClient({ + createSmartAccountClient({ chainId: 80001, signer: signerMumbai, bundlerUrl: bundlerUrlMumbai, @@ -42,7 +42,7 @@ describe("Account with MultiChainValidation Module Tests", () => { activeValidationModule: multiChainModule, biconomyPaymasterApiKey: biconomyPaymasterApiKeyMumbai, }), - createSmartWalletClient({ + createSmartAccountClient({ chainId: 84531, signer: signerBase, bundlerUrl: bundlerUrlBase, diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index 91c66b1c6..ff25ba27a 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -1,6 +1,6 @@ import { DEFAULT_SESSION_KEY_MANAGER_MODULE, SessionKeyManagerModule } from "@biconomy/modules"; import { SessionFileStorage } from "@biconomy/modules/tests/utils/customSession"; -import { PaymasterUserOperationDto, WalletClientSigner, createSmartWalletClient } from "../../account/src/index"; +import { PaymasterUserOperationDto, WalletClientSigner, createSmartAccountClient } from "../../account/src/index"; import { Hex, encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "viem"; import { TestData } from "../../../tests"; import { FeeQuotesOrDataResponse, IHybridPaymaster, PaymasterMode } from "@biconomy/paymaster"; @@ -39,7 +39,7 @@ describe("Account Tests", () => { expect(sessionSigner).toBeTruthy(); // Create smart account - let smartWallet = await createSmartWalletClient({ + let smartWallet = await createSmartAccountClient({ chainId: 80001, signer: sessionSigner, bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", From ff28ebda095a00ac099330809014171c089f9d61 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Wed, 24 Jan 2024 18:35:30 +0200 Subject: [PATCH 1063/1247] Add paymasterAndData validation in e2e tests (#381) * Add paymasterAndData validation in e2e tests * Use config values instead of hardcoded in tests --------- Co-authored-by: GabiDev --- packages/account/tests/account.e2e.spec.ts | 2 + .../multiChainValidationModule.e2e.spec.ts | 11 +- .../tests/sessionValidationModule.e2e.spec.ts | 251 +++++++++--------- 3 files changed, 135 insertions(+), 129 deletions(-) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 3cddced88..538154d47 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -150,6 +150,8 @@ describe("Account Tests", () => { userOp = await smartWallet.setPaymasterUserOp(userOp, { mode: PaymasterMode.ERC20, feeQuote: selectedFeeQuote, spender, maxApproval: true }); + expect(userOp.paymasterAndData).not.toBe("0x"); + const response = await smartWallet.sendUserOp(userOp); const userOpReceipt = await response.wait(); diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts index 77491cc9e..e9dfc830e 100644 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -1,4 +1,4 @@ -import { BiconomyPaymaster, PaymasterMode } from "@biconomy/paymaster"; +import { PaymasterMode } from "@biconomy/paymaster"; import { TestData } from "../../../tests"; import { createSmartAccountClient } from "../../account/src/index"; import { Hex, encodeFunctionData, parseAbi } from "viem"; @@ -18,12 +18,14 @@ describe("Account with MultiChainValidation Module Tests", () => { whale: { alchemyWalletClientSigner: signerMumbai, publicAddress: recipientForBothChains }, biconomyPaymasterApiKey: biconomyPaymasterApiKeyMumbai, bundlerUrl: bundlerUrlMumbai, + chainId: chainIdMumbai, } = mumbai; const { whale: { alchemyWalletClientSigner: signerBase }, biconomyPaymasterApiKey: biconomyPaymasterApiKeyBase, bundlerUrl: bundlerUrlBase, + chainId: chainIdBase, } = baseGoerli; const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; @@ -68,10 +70,13 @@ describe("Account with MultiChainValidation Module Tests", () => { polygonAccount.buildUserOp([transaction], { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }), ]); + expect(partialUserOp1.paymasterAndData).not.toBe("0x"); + expect(partialUserOp2.paymasterAndData).not.toBe("0x"); + // Sign the user ops using multiChainModule const returnedOps = await multiChainModule.signUserOps([ - { userOp: partialUserOp1, chainId: 84531 }, - { userOp: partialUserOp2, chainId: 80001 }, + { userOp: partialUserOp1, chainId: chainIdBase }, + { userOp: partialUserOp2, chainId: chainIdMumbai }, ]); // Send the signed user ops on both chains diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index ff25ba27a..073266edc 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -1,150 +1,149 @@ import { DEFAULT_SESSION_KEY_MANAGER_MODULE, SessionKeyManagerModule } from "@biconomy/modules"; import { SessionFileStorage } from "@biconomy/modules/tests/utils/customSession"; -import { PaymasterUserOperationDto, WalletClientSigner, createSmartAccountClient } from "../../account/src/index"; +import { WalletClientSigner, createSmartAccountClient } from "../../account/src/index"; import { Hex, encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "viem"; import { TestData } from "../../../tests"; -import { FeeQuotesOrDataResponse, IHybridPaymaster, PaymasterMode } from "@biconomy/paymaster"; import { checkBalance } from "../../../tests/utils"; +import { PaymasterMode } from "@biconomy/paymaster"; describe("Account Tests", () => { let mumbai: TestData; - let baseGoerli: TestData; beforeEach(() => { // @ts-ignore: Comes from setup-e2e-tests - [mumbai, baseGoerli] = testDataPerChain; + [mumbai] = testDataPerChain; }); const sessionFileStorage: SessionFileStorage = new SessionFileStorage(DEFAULT_SESSION_KEY_MANAGER_MODULE); it("Should send a user op using Session Validation Module", async () => { + let sessionSigner: WalletClientSigner; + + const { + whale: { + account: { address: sessionKeyEOA }, + privateKey: pvKey, + }, + minnow: { publicAddress: recipient }, + publicClient, + chainId, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + try { - let sessionSigner: WalletClientSigner; - - const { - whale: { - account: { address: sessionKeyEOA }, - privateKey: pvKey, - }, - minnow: { publicAddress: recipient }, - publicClient, - } = mumbai; - - try { - sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); - } catch (error) { - sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey }); - } - - expect(sessionSigner).toBeTruthy(); - - // Create smart account - let smartWallet = await createSmartAccountClient({ - chainId: 80001, - signer: sessionSigner, - bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", - biconomyPaymasterApiKey: "nxPxZluSF.aeacea05-e564-4bd2-b8d8-94a8167fb192", - index: 1, // Increasing index to not conflict with other test cases and use a new smart account - }); - - // Create session module - const sessionModule = await SessionKeyManagerModule.create({ - moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, - smartAccountAddress: await smartWallet.getAddress(), - sessionStorageClient: sessionFileStorage, - }); - - // Set enabled call on session - const sessionKeyData = encodeAbiParameters( - [{ type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }], - [ - sessionKeyEOA, - "0xdA5289fCAAF71d52a80A254da614a192b693e977", // erc20 token address - recipient, // receiver address - parseUnits("10", 6), - ], - ); - - const erc20ModuleAddr = "0x000000D50C68705bd6897B2d17c7de32FB519fDA"; - - const sessionTxData = await sessionModule.createSessionData([ - { - validUntil: 0, - validAfter: 0, - sessionValidationModule: erc20ModuleAddr, - sessionPublicKey: sessionKeyEOA, - sessionKeyData: sessionKeyData, - }, - ]); - - const setSessionAllowedTrx = { - to: DEFAULT_SESSION_KEY_MANAGER_MODULE, - data: sessionTxData.data, - }; - - const txArray: any = []; - - // Check if module is enabled - - const isEnabled = await smartWallet.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); - if (!isEnabled) { - const enableModuleTrx = await smartWallet.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); - txArray.push(enableModuleTrx); - txArray.push(setSessionAllowedTrx); - } else { - console.log("MODULE ALREADY ENABLED"); - txArray.push(setSessionAllowedTrx); - } - - const userOp = await smartWallet.buildUserOp(txArray, { - skipBundlerGasEstimation: false, - }); - - const userOpResponse1 = await smartWallet.sendUserOp(userOp); - const transactionDetails = await userOpResponse1.wait(); - console.log("Tx Hash: ", transactionDetails.receipt.transactionHash); - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function transfer(address _to, uint256 _value)"]), - functionName: "transfer", - args: [recipient, parseUnits("0.01", 6)], - }); - - const transferTx = { - to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", //erc20 token address - data: encodedCall, - }; - - smartWallet = smartWallet.setActiveValidationModule(sessionModule); - - const maticBalanceBefore = await checkBalance(publicClient, await smartWallet.getAccountAddress()); - - const transferUserOp = await smartWallet.buildUserOp([transferTx], { - skipBundlerGasEstimation: false, - params: { - sessionSigner: sessionSigner, - sessionValidationModule: erc20ModuleAddr.toLowerCase() as Hex, - }, - paymasterServiceData: { - mode: PaymasterMode.SPONSORED, - }, - }); - - const userOpResponse2 = await smartWallet.sendUserOp(transferUserOp, { - sessionSigner: sessionSigner, + sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); + } catch (error) { + sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey }); + } + + expect(sessionSigner).toBeTruthy(); + + // Create smart account + let smartWallet = await createSmartAccountClient({ + chainId, + signer: sessionSigner, + bundlerUrl, + biconomyPaymasterApiKey, + index: 1, // Increasing index to not conflict with other test cases and use a new smart account + }); + + // Create session module + const sessionModule = await SessionKeyManagerModule.create({ + moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, + smartAccountAddress: await smartWallet.getAddress(), + sessionStorageClient: sessionFileStorage, + }); + + // Set enabled call on session + const sessionKeyData = encodeAbiParameters( + [{ type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }], + [ + sessionKeyEOA, + "0xdA5289fCAAF71d52a80A254da614a192b693e977", // erc20 token address + recipient, // receiver address + parseUnits("10", 6), + ], + ); + + const erc20ModuleAddr = "0x000000D50C68705bd6897B2d17c7de32FB519fDA"; + + const sessionTxData = await sessionModule.createSessionData([ + { + validUntil: 0, + validAfter: 0, sessionValidationModule: erc20ModuleAddr, - }); + sessionPublicKey: sessionKeyEOA, + sessionKeyData: sessionKeyData, + }, + ]); + + const setSessionAllowedTrx = { + to: DEFAULT_SESSION_KEY_MANAGER_MODULE, + data: sessionTxData.data, + }; + + const txArray: any = []; + + // Check if module is enabled + + const isEnabled = await smartWallet.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); + if (!isEnabled) { + const enableModuleTrx = await smartWallet.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); + txArray.push(enableModuleTrx); + txArray.push(setSessionAllowedTrx); + } else { + console.log("MODULE ALREADY ENABLED"); + txArray.push(setSessionAllowedTrx); + } - expect(userOpResponse2.userOpHash).toBeTruthy(); - expect(userOpResponse2.userOpHash).not.toBeNull(); + const userOp = await smartWallet.buildUserOp(txArray); - const maticBalanceAfter = await checkBalance(publicClient, await smartWallet.getAccountAddress()); + const userOpResponse1 = await smartWallet.sendUserOp(userOp); + const transactionDetails = await userOpResponse1.wait(); + console.log("Tx Hash: ", transactionDetails.receipt.transactionHash); - expect(maticBalanceAfter).toEqual(maticBalanceBefore); + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function transfer(address _to, uint256 _value)"]), + functionName: "transfer", + args: [recipient, parseUnits("0.01", 6)], + }); - console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); - } catch (error) { - console.log(error); - } + const transferTx = { + to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", //erc20 token address + data: encodedCall, + }; + + smartWallet = smartWallet.setActiveValidationModule(sessionModule); + + const maticBalanceBefore = await checkBalance(publicClient, await smartWallet.getAccountAddress()); + + const transferUserOp = await smartWallet.buildUserOp([transferTx], { + params: { + sessionSigner: sessionSigner, + sessionValidationModule: erc20ModuleAddr.toLowerCase() as Hex, + }, + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + }, + }); + + expect(transferUserOp.paymasterAndData).toBeDefined(); + expect(transferUserOp.paymasterAndData).not.toBeNull(); + expect(transferUserOp.paymasterAndData).not.toBe("0x"); + + const userOpResponse2 = await smartWallet.sendUserOp(transferUserOp, { + sessionSigner: sessionSigner, + sessionValidationModule: erc20ModuleAddr, + }); + + expect(userOpResponse2.userOpHash).toBeTruthy(); + expect(userOpResponse2.userOpHash).not.toBeNull(); + + const maticBalanceAfter = await checkBalance(publicClient, await smartWallet.getAccountAddress()); + + expect(maticBalanceAfter).toEqual(maticBalanceBefore); + + console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); }, 50000); }); From f56b4da08f47af577c01a641b81a3ef9e354cf97 Mon Sep 17 00:00:00 2001 From: joepegler Date: Wed, 24 Jan 2024 16:50:39 +0000 Subject: [PATCH 1064/1247] Use RpcUrl from provider (#379) * Resolved SMA-549 lint:fix log * continued * continued * continued * Remove e2e test from unit test commit lockfile * rpc test * fix tests --- .github/workflows/docs.yml | 1 + .github/workflows/pull_request_approved.yml | 3 +- .gitignore | 3 - .../account/src/BiconomySmartAccountV2.ts | 9 +- packages/account/tests/account.spec.ts | 90 +- .../common/src/utils/Helpers/convertSigner.ts | 11 +- tests/setup-unit-tests.ts | 1 + yarn.lock | 9815 +++++++++++++++++ 8 files changed, 9908 insertions(+), 25 deletions(-) create mode 100644 yarn.lock diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 5cd857fa5..c37747b21 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,5 +1,6 @@ name: Build and Deploy Documentation on: + workflow_dispatch: push: branches: - develop diff --git a/.github/workflows/pull_request_approved.yml b/.github/workflows/pull_request_approved.yml index 15f24433a..d4f142659 100644 --- a/.github/workflows/pull_request_approved.yml +++ b/.github/workflows/pull_request_approved.yml @@ -2,6 +2,7 @@ name: E2E Test workflow on: pull_request_review: types: [submitted] + workflow_dispatch: jobs: e2e_test: if: github.event.review.state == 'approved' @@ -29,4 +30,4 @@ jobs: E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} E2E_BICO_PAYMASTER_KEY_MUMBAI: ${{ secrets.E2E_BICO_PAYMASTER_KEY_MUMBAI }} E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} - run: yarn test:e2e \ No newline at end of file + run: yarn test:e2e diff --git a/.gitignore b/.gitignore index c398c2170..d04e1144c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ logs *.log yarn-debug.log* yarn-error.log* -yarn.lock lockfiles # Diagnostic reports (https://nodejs.org/api/report.html) @@ -47,7 +46,6 @@ node_modules/ .yarn/build-state.yml .yarn/install-state.gz .pnp.* -yarn.lock # macOS .DS_Store @@ -65,7 +63,6 @@ packages/paymaster/package-lock.json packages/particle-auth/package-lock.json packages/transak/package-lock.json package-lock.json -yarn.lock #session storage files packages/modules/tests/utils/sessionStorageData/* diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index ce6222e9c..c0acbe760 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -181,12 +181,16 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { let chainId = biconomySmartAccountConfig.chainId; let resolvedSmartAccountSigner!: SmartAccountSigner; + let rpcUrl = biconomySmartAccountConfig.rpcUrl; // Signer needs to be initialised here before defaultValidationModule is set if (biconomySmartAccountConfig.signer) { const signerResult = await convertSigner(biconomySmartAccountConfig.signer, !!chainId); - if (signerResult.chainId) { - chainId = chainId || signerResult.chainId; + if (!chainId && !!signerResult.chainId) { + chainId = signerResult.chainId; + } + if (!rpcUrl && !!signerResult.rpcUrl) { + rpcUrl = signerResult.rpcUrl; } resolvedSmartAccountSigner = signerResult.signer; } @@ -224,6 +228,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { chainId, bundler, signer: resolvedSmartAccountSigner, + rpcUrl, }; return new BiconomySmartAccountV2(config); diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 2e58cba0d..cd510861e 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -3,6 +3,8 @@ import { createWalletClient, http } from "viem"; import { localhost } from "viem/chains"; import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; import { TestData } from "../../../tests"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Wallet } from "@ethersproject/wallet"; describe("Account Tests", () => { let ganache: TestData; @@ -40,6 +42,78 @@ describe("Account Tests", () => { expect(address).toBeTruthy(); }); + it("should pickup the rpcUrl from viem wallet and ethers", async () => { + const { + chainId, + bundlerUrl, + viemChain, + whale: { privateKey, viemWallet: originalViemSigner, ethersSigner: originalEthersSigner }, + } = ganache; + + const newRpcUrl = "http://localhost:8545"; + const defaultRpcUrl = viemChain.rpcUrls.public.http[0]; //http://127.0.0.1:8545" + + const ethersProvider = new JsonRpcProvider(newRpcUrl); + const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider); + + const accountOne = privateKeyToAccount(privateKey); + const walletClientWithNewRpcUrl = createWalletClient({ + account: accountOne, + chain: viemChain, + transport: http(newRpcUrl), + }); + + const [smartWalletFromEthersWithNewRpc, smartWalletFromViemWithNewRpc, smartWalletFromEthersWithOldRpc, smartWalletFromViemWithOldRpc] = + await Promise.all([ + createSmartAccountClient({ + chainId, + signer: ethersSignerWithNewRpcUrl, + bundlerUrl, + }), + createSmartAccountClient({ + chainId, + signer: walletClientWithNewRpcUrl, + bundlerUrl, + }), + createSmartAccountClient({ + chainId, + signer: originalEthersSigner, + bundlerUrl, + }), + createSmartAccountClient({ + chainId, + signer: originalViemSigner, + bundlerUrl, + }), + ]); + + const [ + smartWalletFromEthersWithNewRpcAddress, + smartWalletFromViemWithNewRpcAddress, + smartWalletFromEthersWithOldRpcAddress, + smartWalletFromViemWithOldRpcAddress, + ] = await Promise.all([ + smartWalletFromEthersWithNewRpc.getAccountAddress(), + smartWalletFromViemWithNewRpc.getAccountAddress(), + smartWalletFromEthersWithOldRpc.getAccountAddress(), + smartWalletFromViemWithOldRpc.getAccountAddress(), + ]); + + expect( + [ + smartWalletFromEthersWithNewRpcAddress, + smartWalletFromViemWithNewRpcAddress, + smartWalletFromEthersWithOldRpcAddress, + smartWalletFromViemWithOldRpcAddress, + ].every(Boolean), + ).toBeTruthy(); + + expect(smartWalletFromEthersWithNewRpc.rpcProvider.transport.url).toBe(newRpcUrl); + expect(smartWalletFromViemWithNewRpc.rpcProvider.transport.url).toBe(newRpcUrl); + expect(smartWalletFromEthersWithOldRpc.rpcProvider.transport.url).toBe(defaultRpcUrl); + expect(smartWalletFromViemWithOldRpc.rpcProvider.transport.url).toBe(defaultRpcUrl); + }); + it("should create a smartWalletClient from a signer and chainId", async () => { const { chainId, @@ -106,22 +180,6 @@ describe("Account Tests", () => { expect(module).toBeTruthy(); }); - it("Sender should be non zero", async () => { - const { - whale: { viemWallet: signer }, - minnow: { publicAddress: recipient }, - bundlerUrl, - } = ganache; - - const smartWallet = await createSmartAccountClient({ - signer, - bundlerUrl, - }); - - const builtUserOp = await smartWallet.buildUserOp([{ to: recipient, value: 1000, data: "0x" }]); - expect(builtUserOp.sender).not.toBe("0x0000000000000000000000000000000000000000"); - }, 30000); - it("Create a smart account with paymaster by creating instance", async () => { const { whale: { viemWallet: signer }, diff --git a/packages/common/src/utils/Helpers/convertSigner.ts b/packages/common/src/utils/Helpers/convertSigner.ts index 0efce9f48..ae7371505 100644 --- a/packages/common/src/utils/Helpers/convertSigner.ts +++ b/packages/common/src/utils/Helpers/convertSigner.ts @@ -7,12 +7,14 @@ import { Signer } from "@ethersproject/abstract-signer"; interface SmartAccountResult { signer: SmartAccountSigner; - chainId: number | undefined; + chainId: number | null; + rpcUrl: string | null; } export const convertSigner = async (signer: SupportedSigner, skipChainIdCalls: boolean = false): Promise => { let resolvedSmartAccountSigner: SmartAccountSigner; - let chainId: number | undefined; + let rpcUrl: string | null = null; + let chainId: number | null = null; const isAnAlchemySigner = UNIQUE_PROPERTIES_PER_SIGNER.alchemy in signer; const isAnEthersSigner = UNIQUE_PROPERTIES_PER_SIGNER.ethers in signer; const isAViemSigner = UNIQUE_PROPERTIES_PER_SIGNER.viem in signer; @@ -33,6 +35,8 @@ export const convertSigner = async (signer: SupportedSigner, skipChainIdCalls: b } // convert ethers Wallet to alchemy's SmartAccountSigner under the hood resolvedSmartAccountSigner = new EthersSigner(ethersSigner, "ethers"); + // @ts-ignore + rpcUrl = ethersSigner.provider?.connection?.url ?? null; } else if (isAViemSigner) { const walletClient = signer as WalletClient; if (!walletClient.account) { @@ -47,11 +51,12 @@ export const convertSigner = async (signer: SupportedSigner, skipChainIdCalls: b } // convert viems walletClient to alchemy's SmartAccountSigner under the hood resolvedSmartAccountSigner = new WalletClientSigner(walletClient, "viem"); + rpcUrl = walletClient?.transport?.url ?? null; } else { throw new Error("Unsupported signer"); } } else { resolvedSmartAccountSigner = signer as SmartAccountSigner; } - return { signer: resolvedSmartAccountSigner, chainId }; + return { signer: resolvedSmartAccountSigner, rpcUrl, chainId }; }; diff --git a/tests/setup-unit-tests.ts b/tests/setup-unit-tests.ts index 2cc8c34e3..655fa53cd 100644 --- a/tests/setup-unit-tests.ts +++ b/tests/setup-unit-tests.ts @@ -18,6 +18,7 @@ beforeAll(() => { chain: viemChain, transport: http(viemChain.rpcUrls.public.http[0]), }); + const walletClientSignerOne = new WalletClientSigner(viemWalletClientOne, "viem"); const publicAddressOne = accountOne.address; const publicClient = createPublicClient({ diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..1b1bcbfbb --- /dev/null +++ b/yarn.lock @@ -0,0 +1,9815 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# 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== + +"@adraffy/ens-normalize@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" + integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== + +"@alchemy/aa-core@^1.2.2": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-1.2.4.tgz#a224b04d82a51c4a3ccd258caf4433dfc6079420" + integrity sha512-Qj9N1V+X3LvFWAgdMV1FoLV+ZNqy8v5j/pjbNecvloDVadNSm4R//3YPjmfYOvSARjvubWzw+BGVRtyUvunKDQ== + dependencies: + abitype "^0.8.3" + eventemitter3 "^5.0.1" + viem "^1.21.4" + zod "^3.22.4" + +"@alchemy/aa-core@^2.0.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-2.2.0.tgz#162964a167ec05ccdfdaf11e598ecf391a991483" + integrity sha512-2QT2tA5A53aEWzW4+5IncdGFLxtXfc/giRjEGKbJ+UPKx3fXHh+lV/aEjGuzAj8sdB0m1so6QqL7md06/hGwPA== + dependencies: + abitype "^0.8.3" + eventemitter3 "^5.0.1" + viem "^1.21.4" + zod "^3.22.4" + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" + integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.7" + "@babel/parser" "^7.23.6" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== + dependencies: + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + +"@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/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helpers@^7.23.7": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" + integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/runtime@^7.21.0": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.8.tgz#8ee6fe1ac47add7122902f257b8ddf55c898f650" + integrity sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.22.15", "@babel/template@^7.3.3": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" + integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@chainsafe/as-sha256@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" + integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== + +"@chainsafe/persistent-merkle-tree@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" + integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/persistent-merkle-tree@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" + integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/ssz@^0.10.0": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" + integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.5.0" + +"@chainsafe/ssz@^0.9.2": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" + integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.4.2" + case "^1.6.3" + +"@colors/colors@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" + integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@dabh/diagnostics@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + +"@esbuild/aix-ppc64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" + integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== + +"@esbuild/android-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" + integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== + +"@esbuild/android-arm@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" + integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== + +"@esbuild/android-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" + integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== + +"@esbuild/darwin-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" + integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== + +"@esbuild/darwin-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" + integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== + +"@esbuild/freebsd-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" + integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== + +"@esbuild/freebsd-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" + integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== + +"@esbuild/linux-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" + integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== + +"@esbuild/linux-arm@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" + integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== + +"@esbuild/linux-ia32@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" + integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== + +"@esbuild/linux-loong64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" + integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== + +"@esbuild/linux-mips64el@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" + integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== + +"@esbuild/linux-ppc64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" + integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== + +"@esbuild/linux-riscv64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" + integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== + +"@esbuild/linux-s390x@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" + integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== + +"@esbuild/linux-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" + integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== + +"@esbuild/netbsd-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" + integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== + +"@esbuild/openbsd-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" + integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== + +"@esbuild/sunos-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" + integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== + +"@esbuild/win32-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" + integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== + +"@esbuild/win32-ia32@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" + integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== + +"@esbuild/win32-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" + integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== + +"@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.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + 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.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@fastify/busboy@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" + integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== + +"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@humanwhocodes/config-array@^0.11.13": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.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.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.22" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@lerna/child-process@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-7.4.2.tgz#a2fd013ac2150dc288270d3e0d0b850c06bec511" + integrity sha512-je+kkrfcvPcwL5Tg8JRENRqlbzjdlZXyaR88UcnCdNW0AJ1jX9IfHRys1X7AwSroU2ug8ESNC+suoBw1vX833Q== + dependencies: + chalk "^4.1.0" + execa "^5.0.0" + strong-log-transformer "^2.1.0" + +"@lerna/create@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-7.4.2.tgz#f845fad1480e46555af98bd39af29571605dddc9" + integrity sha512-1wplFbQ52K8E/unnqB0Tq39Z4e+NEoNrpovEnl6GpsTUrC6WDp8+w0Le2uCBV0hXyemxChduCkLz4/y1H1wTeg== + dependencies: + "@lerna/child-process" "7.4.2" + "@npmcli/run-script" "6.0.2" + "@nx/devkit" ">=16.5.1 < 17" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "19.0.11" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.1" + columnify "1.6.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "^8.2.0" + dedent "0.7.0" + execa "5.0.0" + fs-extra "^11.1.1" + get-stream "6.0.0" + git-url-parse "13.1.0" + glob-parent "5.1.2" + globby "11.1.0" + graceful-fs "4.2.11" + has-unicode "2.0.1" + ini "^1.3.8" + init-package-json "5.0.0" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + js-yaml "4.1.0" + libnpmpublish "7.3.0" + load-json-file "6.2.0" + lodash "^4.17.21" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "8.1.1" + npm-packlist "5.1.1" + npm-registry-fetch "^14.0.5" + npmlog "^6.0.2" + nx ">=16.5.1 < 17" + p-map "4.0.0" + p-map-series "2.1.0" + p-queue "6.6.2" + p-reduce "^2.1.0" + pacote "^15.2.0" + pify "5.0.0" + read-cmd-shim "4.0.0" + read-package-json "6.0.4" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.4" + signal-exit "3.0.7" + slash "^3.0.0" + ssri "^9.0.1" + strong-log-transformer "2.1.0" + tar "6.1.11" + temp-dir "1.0.0" + upath "2.0.1" + uuid "^9.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "5.0.0" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "16.2.0" + yargs-parser "20.2.4" + +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@noble/curves@1.2.0", "@noble/curves@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/curves@1.3.0", "@noble/curves@~1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== + dependencies: + "@noble/hashes" "1.3.3" + +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/hashes@1.3.3", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@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.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nomicfoundation/ethereumjs-block@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" + integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + +"@nomicfoundation/ethereumjs-blockchain@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" + integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-ethash" "3.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + level "^8.0.0" + lru-cache "^5.1.1" + memory-level "^1.0.0" + +"@nomicfoundation/ethereumjs-common@4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" + integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.2" + crc-32 "^1.2.0" + +"@nomicfoundation/ethereumjs-ethash@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" + integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + bigint-crypto-utils "^3.0.23" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-evm@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" + integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== + dependencies: + "@ethersproject/providers" "^5.7.1" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/ethereumjs-rlp@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" + integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== + +"@nomicfoundation/ethereumjs-statemanager@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" + integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + js-sdsl "^4.1.4" + +"@nomicfoundation/ethereumjs-trie@6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" + integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@types/readable-stream" "^2.3.13" + ethereum-cryptography "0.1.3" + readable-stream "^3.6.0" + +"@nomicfoundation/ethereumjs-tx@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" + integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== + dependencies: + "@chainsafe/ssz" "^0.9.2" + "@ethersproject/providers" "^5.7.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@9.0.2": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" + integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== + dependencies: + "@chainsafe/ssz" "^0.10.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-vm@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" + integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" + integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" + integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" + integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" + integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" + integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" + integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" + integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" + integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" + integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" + +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/fs@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== + dependencies: + semver "^7.3.5" + +"@npmcli/git@^4.0.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.1.0.tgz#ab0ad3fd82bc4d8c1351b6c62f0fa56e8fe6afa6" + integrity sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ== + dependencies: + "@npmcli/promise-spawn" "^6.0.0" + lru-cache "^7.4.4" + npm-pick-manifest "^8.0.0" + proc-log "^3.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^3.0.0" + +"@npmcli/installed-package-contents@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" + integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== + dependencies: + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/node-gyp@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" + integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== + +"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" + integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== + dependencies: + which "^3.0.0" + +"@npmcli/run-script@6.0.2", "@npmcli/run-script@^6.0.0": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885" + integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/promise-spawn" "^6.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^3.0.0" + which "^3.0.0" + +"@nrwl/devkit@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-16.10.0.tgz#ac8c5b4db00f12c4b817c937be2f7c4eb8f2593c" + integrity sha512-fRloARtsDQoQgQ7HKEy0RJiusg/HSygnmg4gX/0n/Z+SUS+4KoZzvHjXc6T5ZdEiSjvLypJ+HBM8dQzIcVACPQ== + dependencies: + "@nx/devkit" "16.10.0" + +"@nrwl/tao@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-16.10.0.tgz#94642a0380709b8e387e1e33705a5a9624933375" + integrity sha512-QNAanpINbr+Pod6e1xNgFbzK1x5wmZl+jMocgiEFXZ67KHvmbD6MAQQr0MMz+GPhIu7EE4QCTLTyCEMlAG+K5Q== + dependencies: + nx "16.10.0" + tslib "^2.3.0" + +"@nx/devkit@16.10.0", "@nx/devkit@>=16.5.1 < 17": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-16.10.0.tgz#7e466be2dee2dcb1ccaf286786ca2a0a639aa007" + integrity sha512-IvKQqRJFDDiaj33SPfGd3ckNHhHi6ceEoqCbAP4UuMXOPPVOX6H0KVk+9tknkPb48B7jWIw6/AgOeWkBxPRO5w== + dependencies: + "@nrwl/devkit" "16.10.0" + ejs "^3.1.7" + enquirer "~2.3.6" + ignore "^5.0.4" + semver "7.5.3" + tmp "~0.2.1" + tslib "^2.3.0" + +"@nx/nx-darwin-arm64@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.10.0.tgz#0c73010cac7a502549483b12bad347da9014e6f1" + integrity sha512-YF+MIpeuwFkyvM5OwgY/rTNRpgVAI/YiR0yTYCZR+X3AAvP775IVlusNgQ3oedTBRUzyRnI4Tknj1WniENFsvQ== + +"@nx/nx-darwin-x64@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-16.10.0.tgz#2ccf270418d552fd0a8e0d6089aee4944315adaa" + integrity sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg== + +"@nx/nx-freebsd-x64@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.10.0.tgz#c3ee6914256e69493fed9355b0d6661d0e86da44" + integrity sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw== + +"@nx/nx-linux-arm-gnueabihf@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.10.0.tgz#a961eccbb38acb2da7fc125b29d1fead0b39152f" + integrity sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA== + +"@nx/nx-linux-arm64-gnu@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.10.0.tgz#795f20072549d03822b5c4639ef438e473dbb541" + integrity sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g== + +"@nx/nx-linux-arm64-musl@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.10.0.tgz#f2428ee6dbe2b2c326e8973f76c97666def33607" + integrity sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ== + +"@nx/nx-linux-x64-gnu@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.10.0.tgz#d36c2bcf94d49eaa24e3880ddaf6f1f617de539b" + integrity sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA== + +"@nx/nx-linux-x64-musl@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.10.0.tgz#78bd2ab97a583b3d4ea3387b67fd7b136907493c" + integrity sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q== + +"@nx/nx-win32-arm64-msvc@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.10.0.tgz#ef20ec8d0c83d66e73e20df12d2c788b8f866396" + integrity sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA== + +"@nx/nx-win32-x64-msvc@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.10.0.tgz#7410a51d0f8be631eec9552f01b2e5946285927c" + integrity sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA== + +"@octokit/auth-token@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" + integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== + +"@octokit/core@^4.2.1": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" + integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== + dependencies: + "@octokit/auth-token" "^3.0.0" + "@octokit/graphql" "^5.0.0" + "@octokit/request" "^6.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^9.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^7.0.0": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" + integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== + dependencies: + "@octokit/types" "^9.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^5.0.0": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" + integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== + dependencies: + "@octokit/request" "^6.0.0" + "@octokit/types" "^9.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^18.0.0": + version "18.1.1" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz#09bdfdabfd8e16d16324326da5148010d765f009" + integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== + +"@octokit/plugin-enterprise-rest@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + +"@octokit/plugin-paginate-rest@^6.1.2": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" + integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== + dependencies: + "@octokit/tsconfig" "^1.0.2" + "@octokit/types" "^9.2.3" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@^7.1.2": + version "7.2.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz#37a84b171a6cb6658816c82c4082ac3512021797" + integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== + dependencies: + "@octokit/types" "^10.0.0" + +"@octokit/request-error@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" + integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== + dependencies: + "@octokit/types" "^9.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^6.0.0": + version "6.2.8" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" + integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== + dependencies: + "@octokit/endpoint" "^7.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^9.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + +"@octokit/rest@19.0.11": + version "19.0.11" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.11.tgz#2ae01634fed4bd1fca5b642767205ed3fd36177c" + integrity sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw== + dependencies: + "@octokit/core" "^4.2.1" + "@octokit/plugin-paginate-rest" "^6.1.2" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^7.1.2" + +"@octokit/tsconfig@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" + integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== + +"@octokit/types@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" + integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== + dependencies: + "@octokit/openapi-types" "^18.0.0" + +"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": + version "9.3.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" + integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== + dependencies: + "@octokit/openapi-types" "^18.0.0" + +"@parcel/watcher@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" + integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== + dependencies: + node-addon-api "^3.2.1" + node-gyp-build "^4.3.0" + +"@particle-network/analytics@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@particle-network/analytics/-/analytics-1.0.1.tgz#b3657cf7aaea57f90a7ac2c03f72b8786c298012" + integrity sha512-ApcSMo1BXQlywO+lvOpG3Y2/SVGNCpJzXO/4e3zHzE/9j+uMehsilDzPwWQwLhrCXZYwVm7mmE71Gs36yobiNw== + dependencies: + hash.js "^1.1.7" + uuidv4 "^6.2.13" + +"@particle-network/auth@^1.2.1": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@particle-network/auth/-/auth-1.3.0.tgz#34b08e639104f7bd114a3e46d19904b19e7c6795" + integrity sha512-iCBiOAo/yrK7wLbZXCF1Z+eOOUc1OQwZCFt+HFCNtNjkM1t0Uj9+ugffuHJipSqtgzjzvw8y9IYE5dTGj89DlA== + dependencies: + "@particle-network/analytics" "^1.0.1" + "@particle-network/chains" "*" + "@particle-network/crypto" "^1.0.1" + buffer "^6.0.3" + draggabilly "^3.0.0" + +"@particle-network/biconomy@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@particle-network/biconomy/-/biconomy-1.0.0.tgz#91f79c6341db0fc9b23d3ed9c61fbb08df727c31" + integrity sha512-MvYdTGT48WJB72SqkmZbx3NI8HdjWb8EZNKIkbddcusws/Uqy4dHV2+tP7UWup+vGltCXK/55KAdvgcwFTsZrQ== + dependencies: + axios "^1.3.6" + uuid "^8.3.2" + +"@particle-network/chains@*": + version "1.3.8" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.8.tgz#61f1847ac31eb7ae358a51e5f11ebda4d5bbb7cb" + integrity sha512-hDygYWHxkKYkKUZsbA8KIlauejiLYfPA944jCAJj5JjGcfx9sMVhahGFUj6MnJOxh/7uhJHzlQfK9PvuCxXUlw== + +"@particle-network/crypto@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@particle-network/crypto/-/crypto-1.0.1.tgz#26afef622a3eb906dca5c810fef8001ffee29029" + integrity sha512-GgvHmHcFiNkCLZdcJOgctSbgvs251yp+EAdUydOE3gSoIxN6KEr/Snu9DebENhd/nFb7FDk5ap0Hg49P7pj1fg== + dependencies: + crypto-js "^4.1.1" + uuidv4 "^6.2.13" + +"@particle-network/provider@^1.2.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@particle-network/provider/-/provider-1.3.0.tgz#9f0f3ce7695eed53a6521fe6701330ee6dc79d00" + integrity sha512-9Nja6CYvkjHtkCuafoxP/QQrBYoUfmJZmAUkzsk8xBr/I6ByThER4SCtGTW6gGndWFtHSJuLJtnustlq3FKgeA== + dependencies: + "@particle-network/chains" "*" + axios "^1.3.6" + uuid "^8.3.2" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + +"@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" + integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== + +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== + dependencies: + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" + +"@scure/bip32@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.2.tgz#90e78c027d5e30f0b22c1f8d50ff12f3fb7559f8" + integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== + dependencies: + "@noble/curves" "~1.2.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.2" + +"@scure/bip32@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" + integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== + dependencies: + "@noble/curves" "~1.3.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" + integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== + dependencies: + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sigstore/bundle@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-1.1.0.tgz#17f8d813b09348b16eeed66a8cf1c3d6bd3d04f1" + integrity sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + +"@sigstore/protobuf-specs@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b" + integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== + +"@sigstore/sign@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-1.0.0.tgz#6b08ebc2f6c92aa5acb07a49784cb6738796f7b4" + integrity sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA== + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + make-fetch-happen "^11.0.1" + +"@sigstore/tuf@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.3.tgz#2a65986772ede996485728f027b0514c0b70b160" + integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + tuf-js "^1.1.7" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@transak/transak-sdk@^1.2.3": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@transak/transak-sdk/-/transak-sdk-1.4.1.tgz#90dee041b772c71c35cfb22df9ef51970b780db4" + integrity sha512-/BKzb9orz1xDxa41oOPW+4KpjSHNEXgtaFazX/aIjQbr7LLbRqfXC/IHzpPmjR9OmFm8pFhV2Y86Rg0aZt5ZUA== + dependencies: + events "^3.3.0" + query-string "^8.1.0" + +"@trufflesuite/bigint-buffer@1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" + integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== + dependencies: + node-gyp-build "4.4.0" + +"@trufflesuite/uws-js-unofficial@20.30.0-unofficial.0": + version "20.30.0-unofficial.0" + resolved "https://registry.yarnpkg.com/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz#2fbc2f8ef7e82fbeea6abaf7e8a9d42a02b479d3" + integrity sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA== + dependencies: + ws "8.13.0" + optionalDependencies: + bufferutil "4.0.7" + utf-8-validate "6.0.3" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@tufjs/canonical-json@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" + integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== + +"@tufjs/models@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" + integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== + dependencies: + "@tufjs/canonical-json" "1.0.0" + minimatch "^9.0.0" + +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + dependencies: + "@babel/types" "^7.20.7" + +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== + dependencies: + "@types/node" "*" + +"@types/debug@^4.1.9": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^29.5.4": + version "29.5.11" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.11.tgz#0c13aa0da7d0929f078ab080ae5d4ced80fa2f2c" + integrity sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.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.1", "@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@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/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/node@*": + version "20.11.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.5.tgz#be10c622ca7fcaa3cf226cf80166abc31389d86e" + integrity sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w== + 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.2" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== + dependencies: + "@types/node" "*" + +"@types/readable-stream@^2.3.13": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + +"@types/secp256k1@^4.0.1": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== + dependencies: + "@types/node" "*" + +"@types/seedrandom@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" + integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== + +"@types/semver@^7.5.0": + version "7.5.6" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" + integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/triple-beam@^1.3.2": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== + +"@types/uuid@8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^6.7.0": + version "6.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.1.tgz#bb0676af940bc23bf299ca58dbdc6589c2548c2e" + integrity sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.19.1" + "@typescript-eslint/type-utils" "6.19.1" + "@typescript-eslint/utils" "6.19.1" + "@typescript-eslint/visitor-keys" "6.19.1" + 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.6.0": + version "6.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.19.1.tgz#68a87bb21afaf0b1689e9cdce0e6e75bc91ada78" + integrity sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ== + dependencies: + "@typescript-eslint/scope-manager" "6.19.1" + "@typescript-eslint/types" "6.19.1" + "@typescript-eslint/typescript-estree" "6.19.1" + "@typescript-eslint/visitor-keys" "6.19.1" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.19.1": + version "6.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz#2f527ee30703a6169a52b31d42a1103d80acd51b" + integrity sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w== + dependencies: + "@typescript-eslint/types" "6.19.1" + "@typescript-eslint/visitor-keys" "6.19.1" + +"@typescript-eslint/type-utils@6.19.1": + version "6.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.19.1.tgz#6a130e3afe605a4898e043fa9f72e96309b54935" + integrity sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg== + dependencies: + "@typescript-eslint/typescript-estree" "6.19.1" + "@typescript-eslint/utils" "6.19.1" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.19.1": + version "6.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.19.1.tgz#2d4c9d492a63ede15e7ba7d129bdf7714b77f771" + integrity sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg== + +"@typescript-eslint/typescript-estree@6.19.1": + version "6.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz#796d88d88882f12e85bb33d6d82d39e1aea54ed1" + integrity sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA== + dependencies: + "@typescript-eslint/types" "6.19.1" + "@typescript-eslint/visitor-keys" "6.19.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.19.1": + version "6.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.19.1.tgz#df93497f9cfddde2bcc2a591da80536e68acd151" + integrity sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.19.1" + "@typescript-eslint/types" "6.19.1" + "@typescript-eslint/typescript-estree" "6.19.1" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.19.1": + version "6.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz#2164073ed4fc34a5ff3b5e25bb5a442100454c4c" + integrity sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ== + dependencies: + "@typescript-eslint/types" "6.19.1" + 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== + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +"@yarnpkg/parsers@3.0.0-rc.46": + version "3.0.0-rc.46" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01" + integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@zkochan/js-yaml@0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" + integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== + dependencies: + argparse "^2.0.1" + +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abitype@0.9.8: + version "0.9.8" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.9.8.tgz#1f120b6b717459deafd213dfbf3a3dd1bf10ae8c" + integrity sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ== + +abitype@^0.8.3: + version "0.8.11" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.8.11.tgz#66e1cf2cbf46f48d0e57132d7c1c392447536cc1" + integrity sha512-bM4v2dKvX08sZ9IU38IN5BKmN+ZkOSd2oI4a9f0ejHYZQYV6cDr7j+d95ga0z2XHG36Y4jzoG5Z7qDqxp7fi/A== + +abstract-level@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" + integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +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.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + 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.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/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-sequence-parser@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" + integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +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== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +args@5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/args/-/args-5.0.3.tgz#943256db85021a85684be2f0882f25d796278702" + integrity sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA== + dependencies: + camelcase "5.0.0" + chalk "2.4.2" + leven "2.1.0" + mri "1.1.4" + +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-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +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@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +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.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== + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +async-eventemitter@0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async@^2.4.0: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +async@^3.2.3, async@^3.2.4: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axios@^1.0.0, axios@^1.3.6: + version "1.6.5" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.5.tgz#2c090da14aeeab3770ad30c3a1461bc970fb0cd8" + integrity sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +bigint-crypto-utils@^3.0.23: + version "3.3.0" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" + integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== + +bignumber.js@^9.0.1: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== + dependencies: + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-reverse@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" + integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bufferutil@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== + dependencies: + node-gyp-build "^4.3.0" + +bufferutil@4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" + integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + dependencies: + node-gyp-build "^4.3.0" + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +byte-size@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" + integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + +cacache@^17.0.0: + version "17.1.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" + integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^7.7.1" + minipass "^7.0.3" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + +call-bind@^1.0.0, call-bind@^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: + version "5.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" + integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + +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, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001565: + version "1.0.30001579" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz#45c065216110f46d6274311a4b3fcf6278e0852a" + integrity sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA== + +case@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + +catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +chalk@2.4.2, chalk@^2.4.2: + version "2.4.2" + 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" + +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +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: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0, ci-info@^3.6.1: + 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.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cjs-module-lexer@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + +classic-level@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" + integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "^2.2.2" + node-gyp-build "^4.3.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@3.1.0, cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cli-spinners@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + 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-deep@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.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== + +cmd-shim@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" + integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +color-convert@^1.9.0, color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + +columnify@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +commander@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + +commander@^2.9.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +concurrently@^8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.2.tgz#353141985c198cfa5e4a3ef90082c336b5851784" + integrity sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg== + dependencies: + chalk "^4.1.2" + date-fns "^2.30.0" + lodash "^4.17.21" + rxjs "^7.8.1" + shell-quote "^1.8.1" + spawn-command "0.0.2" + supports-color "^8.1.1" + tree-kill "^1.2.2" + yargs "^17.7.2" + +confusing-browser-globals@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +conventional-changelog-angular@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" + integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== + dependencies: + compare-func "^2.0.0" + +conventional-changelog-core@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz#3c331b155d5b9850f47b4760aeddfc983a92ad49" + integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^6.0.0" + conventional-commits-parser "^4.0.0" + dateformat "^3.0.3" + get-pkg-repo "^4.2.1" + git-raw-commits "^3.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^5.0.0" + normalize-package-data "^3.0.3" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + +conventional-changelog-preset-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" + integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== + +conventional-changelog-writer@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" + integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== + dependencies: + conventional-commits-filter "^3.0.0" + dateformat "^3.0.3" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + meow "^8.1.2" + semver "^7.0.0" + split "^1.0.1" + +conventional-commits-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" + integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.1" + +conventional-commits-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" + integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== + dependencies: + JSONStream "^1.3.5" + is-text-path "^1.0.1" + meow "^8.1.2" + split2 "^3.2.2" + +conventional-recommended-bump@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" + integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^3.0.0" + conventional-commits-filter "^3.0.0" + conventional-commits-parser "^4.0.0" + git-raw-commits "^3.0.0" + git-semver-tags "^5.0.0" + meow "^8.1.2" + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^8.2.0: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + 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" + +crypto-js@^4.1.1, crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +date-fns@^2.30.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + +dateformat@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +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: + 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.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decode-uri-component@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.4.1.tgz#2ac4859663c704be22bf7db760a1494a49ab2cc5" + integrity sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ== + +dedent@0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + +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== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +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@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + 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.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +deprecation@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + 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" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@~10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" + integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== + +dotenv@~16.3.1: + version "16.3.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" + integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== + +draggabilly@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/draggabilly/-/draggabilly-3.0.0.tgz#48defe10a67f346a0338caaa40c0765c4d3912d6" + integrity sha512-aEs+B6prbMZQMxc9lgTpCBfyCUhRur/VFucHhIOvlvvdARTj7TcDmX/cdOUtqbjJJUh7+agyJXR5Z6IFe1MxwQ== + dependencies: + get-size "^3.0.0" + unidragger "^3.0.0" + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +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.7: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.601: + version "1.4.642" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.642.tgz#eb380fa8b58e515c641d642ba452fa2c453c2e4f" + integrity sha512-M4+u22ZJGpk4RY7tne6W+APkZhnnhmAH48FNl8iEFK2lEgob+U5rUQsIqQhvAwCXYpfd3H20pHK/ENsCvwTbsA== + +elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +email-addresses@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-5.0.0.tgz#7ae9e7f58eef7d5e3e2c2c2d3ea49b78dc854fa6" + integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw== + +emittery@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" + integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/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== + +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + +encoding@^0.1.12, encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +envinfo@7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +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" + +esbuild-plugin-tsc@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/esbuild-plugin-tsc/-/esbuild-plugin-tsc-0.4.0.tgz#d7d516fda0e0b05c8e0b442152deebdee01ddc61" + integrity sha512-q9gWIovt1nkwchMLc2zhyksaiHOv3kDK4b0AUol8lkMCRhJ1zavgfb2fad6BKp7FT9rh/OHmEBXVjczLoi/0yw== + dependencies: + strip-comments "^2.0.1" + +esbuild@^0.19.11: + version "0.19.11" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96" + integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== + optionalDependencies: + "@esbuild/aix-ppc64" "0.19.11" + "@esbuild/android-arm" "0.19.11" + "@esbuild/android-arm64" "0.19.11" + "@esbuild/android-x64" "0.19.11" + "@esbuild/darwin-arm64" "0.19.11" + "@esbuild/darwin-x64" "0.19.11" + "@esbuild/freebsd-arm64" "0.19.11" + "@esbuild/freebsd-x64" "0.19.11" + "@esbuild/linux-arm" "0.19.11" + "@esbuild/linux-arm64" "0.19.11" + "@esbuild/linux-ia32" "0.19.11" + "@esbuild/linux-loong64" "0.19.11" + "@esbuild/linux-mips64el" "0.19.11" + "@esbuild/linux-ppc64" "0.19.11" + "@esbuild/linux-riscv64" "0.19.11" + "@esbuild/linux-s390x" "0.19.11" + "@esbuild/linux-x64" "0.19.11" + "@esbuild/netbsd-x64" "0.19.11" + "@esbuild/openbsd-x64" "0.19.11" + "@esbuild/sunos-x64" "0.19.11" + "@esbuild/win32-arm64" "0.19.11" + "@esbuild/win32-ia32" "0.19.11" + "@esbuild/win32-x64" "0.19.11" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +eslint-config-airbnb-base@15.0.0, eslint-config-airbnb-base@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" + integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.5" + semver "^6.3.0" + +eslint-config-airbnb-typescript@17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz#fda960eee4a510f092a9a1c139035ac588937ddc" + integrity sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig== + dependencies: + eslint-config-airbnb-base "^15.0.0" + +eslint-config-prettier@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + +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: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +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: + debug "^3.2.7" + +eslint-plugin-import@^2.28.1: + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== + 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.15.0" + +eslint-plugin-prettier@^5.0.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" + integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.8.6" + +eslint-plugin-security@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz#0e9c4a471f6e4d3ca16413c7a4a51f3966ba16e4" + integrity sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ== + dependencies: + safe-regex "^2.1.1" + +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-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.48.0: + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.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: + version "4.0.1" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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.yarnpkg.com/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" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" + integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== + dependencies: + "@noble/curves" "1.3.0" + "@noble/hashes" "1.3.3" + "@scure/bip32" "1.3.3" + "@scure/bip39" "1.2.2" + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethers@^5.7.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +ev-emitter@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ev-emitter/-/ev-emitter-2.1.2.tgz#91737a2deae9fa95453e7e86cfae976f8c3ced38" + integrity sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q== + +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== + dependencies: + homedir-polyfill "^1.0.1" + +expect@^29.0.0, expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + +external-editor@^3.0.3: + 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" + +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.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.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.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.16.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" + integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + +figures@3.2.0, figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +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.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== + +filenamify@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" + integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.1" + trim-repeated "^1.0.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +filter-obj@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-5.1.0.tgz#5bd89676000a713d7db2e197f660274428e524ed" + integrity sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng== + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-node-modules@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44" + integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== + dependencies: + findup-sync "^4.0.0" + merge "^2.1.1" + +find-up@5.0.0, find-up@^5.0.0: + version "5.0.0" + 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" + path-exists "^4.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + 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" + +findup-sync@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^4.0.2" + resolve-dir "^1.0.1" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/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== + +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + +follow-redirects@^1.12.1, follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^11.1.0, fs-extra@^11.1.1: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +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== + +ganache@^7.9.2: + version "7.9.2" + resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.9.2.tgz#77f506ad2735dd9109696ffa1834a9dd2f806449" + integrity sha512-7gsVVDpO9AhrFyDMWWl7SpMsPpqGcnAzjxz3k32LheIPNd64p2XsY9GYRdhWmKuryb60W1iaWPZWDkFKlbRWHA== + dependencies: + "@trufflesuite/bigint-buffer" "1.1.10" + "@trufflesuite/uws-js-unofficial" "20.30.0-unofficial.0" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "5.1.1" + "@types/seedrandom" "3.0.1" + abstract-level "1.0.3" + abstract-leveldown "7.2.0" + async-eventemitter "0.2.4" + emittery "0.10.0" + keccak "3.0.2" + leveldown "6.1.0" + secp256k1 "4.0.3" + optionalDependencies: + bufferutil "4.0.5" + utf-8-validate "5.0.7" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, 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.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-pkg-repo@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-port@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-size/-/get-size-3.0.0.tgz#00e39a8042a3de237b2fcf288eaf55d3f472417c" + integrity sha512-Y8aiXLq4leR7807UY0yuKEwif5s3kbVp1nTv+i4jBeoUzByTLKkLWu/HorS6/pB+7gsB0o7OTogC8AoOOeT0Hw== + +get-stream@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +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" + +gh-pages@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-6.1.1.tgz#e80af927a081cb480657fde5a0b87ea2e77d6c74" + integrity sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw== + dependencies: + async "^3.2.4" + commander "^11.0.0" + email-addresses "^5.0.0" + filenamify "^4.3.0" + find-cache-dir "^3.3.1" + fs-extra "^11.1.1" + globby "^6.1.0" + +git-raw-commits@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" + integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== + dependencies: + dargs "^7.0.0" + meow "^8.1.2" + split2 "^3.2.2" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" + integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== + dependencies: + meow "^8.1.2" + semver "^7.0.0" + +git-up@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" + integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== + dependencies: + is-ssh "^1.4.0" + parse-url "^8.1.0" + +git-url-parse@13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" + integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== + dependencies: + git-up "^7.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + dependencies: + ini "^1.3.2" + +glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + 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.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^10.2.2, glob@^10.3.7: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + +glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^9.2.0: + version "9.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + 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.1.0, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +handlebars@^4.7.7: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +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@^2.17.3: + version "2.19.4" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.4.tgz#5112c30295d8be2e18e55d847373c50483ed1902" + integrity sha512-fTQJpqSt3Xo9Mn/WrdblNGAfcANM6XC3tAEi6YogB4s02DmTf93A8QsGb8uR0KR8TFcpcS8lgiW4ugAIYpnbrQ== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@nomicfoundation/ethereumjs-vm" "7.0.2" + "@nomicfoundation/solidity-analyzer" "^0.1.0" + "@sentry/node" "^5.18.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + keccak "^3.0.2" + lodash "^4.17.11" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + tsort "0.0.1" + undici "^5.14.0" + 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.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: + 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.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-unicode@2.0.1, has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + 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.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +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== + +hosted-git-info@^3.0.6: + version "3.0.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" + integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== + dependencies: + lru-cache "^7.5.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +husky@^8.0.0: + version "8.0.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + 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" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== + dependencies: + minimatch "^5.0.1" + +ignore-walk@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.4.tgz#89950be94b4f522225eb63a13c56badb639190e9" + integrity sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw== + dependencies: + minimatch "^9.0.0" + +ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + +immutable@^4.0.0-rc.12: + version "4.3.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + 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" + +import-local@3.1.0, import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +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.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.2, ini@^1.3.4, ini@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +init-package-json@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" + integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== + dependencies: + npm-package-arg "^10.0.0" + promzard "^1.0.0" + read "^2.0.0" + read-package-json "^6.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^5.0.0" + +inquirer@^8.2.4: + version "8.2.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + +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.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +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-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +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.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + 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.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + 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, is-core-module@^2.5.0, is-core-module@^2.8.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, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +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.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +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.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +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.0.0, 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.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +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-ssh@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" + integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== + dependencies: + protocols "^2.0.1" + +is-stream@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +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-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-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + 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" + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/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.1: + 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.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + 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== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isows@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" + integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1, jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.0.0, jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + +js-sdsl@^4.1.4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +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.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.10.0, js-yaml@^3.13.1: + version "3.14.1" + 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" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +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-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +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-parse-even-better-errors@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz#02bb29fb5da90b5444581749c22cedd3597c6cb0" + integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg== + +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== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +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" + +json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonc-parser@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +keccak@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +keccak@^3.0.0, keccak@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + 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.2, 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.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + optionalDependencies: + graceful-fs "^4.1.9" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + +lerna-changelog@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/lerna-changelog/-/lerna-changelog-2.2.0.tgz#c43813bba81e30cdeb20aabaef4da390f0f38e41" + integrity sha512-yjYNAHrbnw8xYFKmYWJEP52Tk4xSdlNmzpYr26+3glbSGDmpe8UMo8f9DlEntjGufL+opup421oVTXcLshwAaQ== + dependencies: + chalk "^4.0.0" + cli-highlight "^2.1.11" + execa "^5.0.0" + hosted-git-info "^4.0.0" + make-fetch-happen "^9.0.0" + p-map "^3.0.0" + progress "^2.0.0" + yargs "^17.1.0" + +lerna@^7.2.0: + version "7.4.2" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-7.4.2.tgz#03497125d7b7c8d463eebfe17a701b16bde2ad09" + integrity sha512-gxavfzHfJ4JL30OvMunmlm4Anw7d7Tq6tdVHzUukLdS9nWnxCN/QB21qR+VJYp5tcyXogHKbdUEGh6qmeyzxSA== + dependencies: + "@lerna/child-process" "7.4.2" + "@lerna/create" "7.4.2" + "@npmcli/run-script" "6.0.2" + "@nx/devkit" ">=16.5.1 < 17" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "19.0.11" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.1" + columnify "1.6.0" + conventional-changelog-angular "7.0.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "^8.2.0" + dedent "0.7.0" + envinfo "7.8.1" + execa "5.0.0" + fs-extra "^11.1.1" + get-port "5.1.1" + get-stream "6.0.0" + git-url-parse "13.1.0" + glob-parent "5.1.2" + globby "11.1.0" + graceful-fs "4.2.11" + has-unicode "2.0.1" + import-local "3.1.0" + ini "^1.3.8" + init-package-json "5.0.0" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + jest-diff ">=29.4.3 < 30" + js-yaml "4.1.0" + libnpmaccess "7.0.2" + libnpmpublish "7.3.0" + load-json-file "6.2.0" + lodash "^4.17.21" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "8.1.1" + npm-packlist "5.1.1" + npm-registry-fetch "^14.0.5" + npmlog "^6.0.2" + nx ">=16.5.1 < 17" + p-map "4.0.0" + p-map-series "2.1.0" + p-pipe "3.1.0" + p-queue "6.6.2" + p-reduce "2.1.0" + p-waterfall "2.1.1" + pacote "^15.2.0" + pify "5.0.0" + read-cmd-shim "4.0.0" + read-package-json "6.0.4" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.8" + signal-exit "3.0.7" + slash "3.0.0" + ssri "^9.0.1" + strong-log-transformer "2.1.0" + tar "6.1.11" + temp-dir "1.0.0" + typescript ">=3 < 6" + upath "2.0.1" + uuid "^9.0.0" + validate-npm-package-license "3.0.4" + validate-npm-package-name "5.0.0" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "16.2.0" + yargs-parser "20.2.4" + +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-transcoder@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== + dependencies: + buffer "^6.0.3" + module-error "^1.0.1" + +level@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" + integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== + dependencies: + browser-level "^1.0.1" + classic-level "^1.2.0" + +leveldown@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" + integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +leven@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +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" + +libnpmaccess@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-7.0.2.tgz#7f056c8c933dd9c8ba771fa6493556b53c5aac52" + integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw== + dependencies: + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + +libnpmpublish@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.3.0.tgz#2ceb2b36866d75a6cd7b4aa748808169f4d17e37" + integrity sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg== + dependencies: + ci-info "^3.6.1" + normalize-package-data "^5.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + proc-log "^3.0.0" + semver "^7.3.7" + sigstore "^1.4.0" + ssri "^10.0.1" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lines-and-columns@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" + integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== + +load-json-file@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== + dependencies: + graceful-fs "^4.1.15" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + 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.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +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@^4.17.11, lodash@^4.17.14, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.1.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +logform@^2.3.2, logform@^2.4.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" + integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== + dependencies: + "@colors/colors" "1.6.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + +lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" + integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +lunr@^2.3.9: + version "2.3.9" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" + integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== + +make-dir@4.0.0, make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^10.0.3: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + +make-fetch-happen@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +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== + +marked@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== + +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +memory-level@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" + integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== + dependencies: + abstract-level "^1.0.0" + functional-red-black-tree "^1.0.1" + module-error "^1.0.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +meow@^8.1.2: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merge@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" + integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== + +merkletreejs@^0.3.9: + version "0.3.11" + resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.11.tgz#e0de05c3ca1fd368de05a12cb8efb954ef6fc04f" + integrity sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ== + dependencies: + bignumber.js "^9.0.1" + buffer-reverse "^1.0.1" + crypto-js "^4.2.0" + treeify "^1.1.0" + web3-utils "^1.3.4" + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +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.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + 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.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-fetch@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" + integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@1.0.4, mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +modify-values@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + +mri@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" + integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multimatch@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mute-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== + +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + +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== + +negotiator@^0.6.2, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nock@^13.2.9: + version "13.5.0" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.0.tgz#82cd33b0dba6095d3f5a28d0ff2edac970fa05ec" + integrity sha512-9hc1eCS2HtOz+sE9W7JQw/tXJktg0zoPSu48s/pYe73e25JW9ywiowbqnUSd7iZPeVawLcVpPZeZS312fwSY+g== + dependencies: + debug "^4.1.0" + json-stringify-safe "^5.0.1" + propagate "^2.0.0" + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-addon-api@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" + integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== + +node-gyp@^9.0.0, node-gyp@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" + integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-machine-id@1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" + integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + +normalize-package-data@^2.3.2, 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-package-data@^3.0.0, normalize-package-data@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" + integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== + dependencies: + hosted-git-info "^6.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-bundled@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-bundled@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" + integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== + dependencies: + npm-normalize-package-bin "^3.0.0" + +npm-dts@^1.3.12: + version "1.3.12" + resolved "https://registry.yarnpkg.com/npm-dts/-/npm-dts-1.3.12.tgz#e422b1188fb616f41fe5c566c3d636c1aafb2ed8" + integrity sha512-3pFsz7Gf1u0cyQE2czXt8Y0hKe6kczHxlFbVrr74xWweNUit2tCDbOcL4n6KaWxyimGNJ4gzOa8KkShFA8hrdA== + dependencies: + args "5.0.3" + find-node-modules "2.1.3" + mkdirp "1.0.4" + npm-run "5.0.1" + rimraf "3.0.2" + tmp "0.2.1" + winston "3.7.2" + +npm-install-checks@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" + integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-normalize-package-bin@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== + +npm-package-arg@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" + integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== + dependencies: + hosted-git-info "^3.0.6" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" + integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== + dependencies: + hosted-git-info "^6.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +npm-packlist@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" + integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== + dependencies: + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^1.1.2" + npm-normalize-package-bin "^1.0.1" + +npm-packlist@^7.0.0: + version "7.0.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" + integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== + dependencies: + ignore-walk "^6.0.0" + +npm-path@^2.0.2, npm-path@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== + dependencies: + which "^1.2.10" + +npm-pick-manifest@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz#2159778d9c7360420c925c1a2287b5a884c713aa" + integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg== + dependencies: + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^10.0.0" + semver "^7.3.5" + +npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: + version "14.0.5" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" + integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== + dependencies: + make-fetch-happen "^11.0.0" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^10.0.0" + proc-log "^3.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npm-run/-/npm-run-5.0.1.tgz#1baea93389b50ae25a32382c8ca322398e50cd16" + integrity sha512-s7FyRpHUgaJfzkRgOnevX8rAWWsv1dofY1XS7hliWCF6LSQh+HtDfBvpigPS1krLvXw+Fi17CYMY8mUtblnyWw== + dependencies: + minimist "^1.2.0" + npm-path "^2.0.4" + npm-which "^3.0.1" + serializerr "^1.0.3" + +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + integrity sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A== + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + +npmlog@^6.0.0, npmlog@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +nx@16.10.0, "nx@>=16.5.1 < 17", nx@^16.8.1: + version "16.10.0" + resolved "https://registry.yarnpkg.com/nx/-/nx-16.10.0.tgz#b070461f7de0a3d7988bd78558ea84cda3543ace" + integrity sha512-gZl4iCC0Hx0Qe1VWmO4Bkeul2nttuXdPpfnlcDKSACGu3ZIo+uySqwOF8yBAxSTIf8xe2JRhgzJN1aFkuezEBg== + dependencies: + "@nrwl/tao" "16.10.0" + "@parcel/watcher" "2.0.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "3.0.0-rc.46" + "@zkochan/js-yaml" "0.0.6" + axios "^1.0.0" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^8.0.1" + dotenv "~16.3.1" + dotenv-expand "~10.0.0" + enquirer "~2.3.6" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^11.1.0" + glob "7.1.4" + ignore "^5.0.4" + jest-diff "^29.4.1" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + lines-and-columns "~2.0.3" + minimatch "3.0.5" + node-machine-id "1.1.12" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.5.3" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nx/nx-darwin-arm64" "16.10.0" + "@nx/nx-darwin-x64" "16.10.0" + "@nx/nx-freebsd-x64" "16.10.0" + "@nx/nx-linux-arm-gnueabihf" "16.10.0" + "@nx/nx-linux-arm64-gnu" "16.10.0" + "@nx/nx-linux-arm64-musl" "16.10.0" + "@nx/nx-linux-x64-gnu" "16.10.0" + "@nx/nx-linux-x64-musl" "16.10.0" + "@nx/nx-win32-arm64-msvc" "16.10.0" + "@nx/nx-win32-x64-msvc" "16.10.0" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +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.assign@^4.1.2, object.assign@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.5: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" + integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.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.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + 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" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + 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, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + 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.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map-series@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" + integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== + +p-map@4.0.0, p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-pipe@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== + +p-queue@6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/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== + +p-waterfall@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" + integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== + dependencies: + p-reduce "^2.0.0" + +pacote@^15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" + integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== + dependencies: + "@npmcli/git" "^4.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^6.0.1" + "@npmcli/run-script" "^6.0.0" + cacache "^17.0.0" + fs-minipass "^3.0.0" + minipass "^5.0.0" + npm-package-arg "^10.0.0" + npm-packlist "^7.0.0" + npm-pick-manifest "^8.0.0" + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" + promise-retry "^2.0.1" + read-package-json "^6.0.0" + read-package-json-fast "^3.0.0" + sigstore "^1.3.0" + ssri "^10.0.0" + tar "^6.1.11" + +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@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0, parse-json@^5.2.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" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== + +parse-path@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" + integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== + dependencies: + protocols "^2.0.0" + +parse-url@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" + integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== + dependencies: + parse-path "^7.0.0" + +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.10.1, path-scurry@^1.6.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + 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.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +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== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +pirates@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^4.1.0, 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" + +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@^3.0.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.4.tgz#4723cadeac2ce7c9227de758e5ff9b14e075f283" + integrity sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ== + +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +proc-log@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +promzard@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" + integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== + dependencies: + read "^2.0.0" + +propagate@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" + integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== + +protochain@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/protochain/-/protochain-1.0.5.tgz#991c407e99de264aadf8f81504b5e7faf7bfa260" + integrity sha512-4hDwFSX50C4NE6f/6zg8EPr/WLPTkFPUtG0ulWZu6bwzV2hmb50fpdQLr0HiKBAUehapaFpItzWoCLjraLJhUA== + +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" + integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== + +query-string@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-8.1.0.tgz#e7f95367737219544cd360a11a4f4ca03836e115" + integrity sha512-BFQeWxJOZxZGix7y+SByG3F36dA0AbTy9o6pSmKFcFz7DAj0re9Frkty3saBn3nHo3D0oZJ/+rx3r8H8r8Jbpw== + dependencies: + decode-uri-component "^0.4.1" + filter-obj "^5.1.0" + split-on-first "^3.0.0" + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/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== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +raw-body@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +read-cmd-shim@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== + +read-package-json-fast@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== + dependencies: + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +read-package-json@6.0.4, read-package-json@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" + integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== + dependencies: + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^5.0.0" + npm-normalize-package-bin "^3.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.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@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +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@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" + integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== + dependencies: + mute-stream "~1.0.0" + +readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + 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" + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regexp-tree@~0.1.1: + version "0.1.27" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" + integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== + +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" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.0: + version "2.0.2" + 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== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +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.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.20.0, 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@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@3.0.2, rimraf@^3.0.0, 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" + +rimraf@^2.2.8: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" + integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== + dependencies: + glob "^9.2.0" + +rimraf@^5.0.1: + version "5.0.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf" + integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== + dependencies: + glob "^10.3.7" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.3: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +rxjs@^7.5.5, rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-array-concat@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + 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.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.2.tgz#3ba32bdb3ea35f940ee87e5087c60ee786c3f6c5" + integrity sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + is-regex "^1.1.4" + +safe-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" + integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== + dependencies: + regexp-tree "~0.1.1" + +safe-stable-stringify@^2.3.1: + version "2.4.3" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@3.0.1, scrypt-js@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@4.0.3, secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@7.5.3: + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, 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.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serializerr@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/serializerr/-/serializerr-1.0.3.tgz#12d4c5aa1c3ffb8f6d1dc5f395aa9455569c3f91" + integrity sha512-yXUlHj0fjbndhACj2XWtIH5eJv7b/uadyl7CJA8b9wL5mIKm+g0/sL7rDzEmjC+k5y8ggcaP8i049F4FxA0U9Q== + dependencies: + protochain "^1.0.5" + +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.2.0" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" + integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== + dependencies: + define-data-property "^1.1.1" + function-bind "^1.1.2" + get-intrinsic "^1.2.2" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +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.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +shiki@^0.14.7: + version "0.14.7" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" + integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== + dependencies: + ansi-sequence-parser "^1.1.0" + jsonc-parser "^3.2.0" + vscode-oniguruma "^1.7.0" + vscode-textmate "^8.0.0" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@3.0.7, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sigstore@^1.3.0, sigstore@^1.4.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.9.0.tgz#1e7ad8933aa99b75c6898ddd0eeebc3eb0d59875" + integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A== + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + "@sigstore/sign" "^1.0.0" + "@sigstore/tuf" "^1.0.3" + make-fetch-happen "^11.0.1" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@3.0.0, slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + dependencies: + is-plain-obj "^1.0.0" + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.13: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spawn-command@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" + integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== + +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== + +split-on-first@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-3.0.0.tgz#f04959c9ea8101b9b0bbf35a61b9ebea784a23e7" + integrity sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA== + +split2@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +ssri@^10.0.0, ssri@^10.0.1: + version "10.0.5" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" + integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== + dependencies: + minipass "^7.0.3" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +ssri@^9.0.0, ssri@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + 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.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + 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-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +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.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-outer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.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.6: + version "0.8.8" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" + integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +tar-stream@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@6.1.11: + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + +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.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tmp@0.0.33, tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@0.2.1, tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +treeify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" + integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== + +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== + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== + dependencies: + escape-string-regexp "^1.0.2" + +triple-beam@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== + +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-jest@^29.1.1: + version "29.1.2" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.2.tgz#7613d8c81c43c8cb312c6904027257e814c40e09" + integrity sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" + make-error "1.x" + semver "^7.5.3" + yargs-parser "^21.0.1" + +ts-node@^10.9.1: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tuf-js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" + integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== + dependencies: + "@tufjs/models" "1.0.4" + debug "^4.3.4" + make-fetch-happen "^11.1.1" + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/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-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +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.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + +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.yarnpkg.com/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== + +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@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typedoc@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.7.tgz#11e3f527ca80ca3c029cb8e15f362e6d9f715e25" + integrity sha512-m6A6JjQRg39p2ZVRIN3NKXgrN8vzlHhOS+r9ymUYtcUP/TIQPvWSq7YgE5ZjASfv5Vd5BW5xrir6Gm2XNNcOow== + dependencies: + lunr "^2.3.9" + marked "^4.3.0" + minimatch "^9.0.3" + shiki "^0.14.7" + +"typescript@>=3 < 6", typescript@^5.2.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +uglify-js@^3.1.4: + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +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.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.14.0: + version "5.28.2" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.2.tgz#fea200eac65fc7ecaff80a023d1a0543423b4c91" + integrity sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w== + dependencies: + "@fastify/busboy" "^2.0.0" + +unidragger@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/unidragger/-/unidragger-3.0.1.tgz#72b2e63f2571ca6e95a884b139dfec764e08c7f3" + integrity sha512-RngbGSwBFmqGBWjkaH+yB677uzR95blSQyxq6hYbrQCejH3Mx1nm8DVOuh3M9k2fQyTstWUG5qlgCnNqV/9jVw== + dependencies: + ev-emitter "^2.0.0" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +upath@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +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.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== + dependencies: + node-gyp-build "^4.3.0" + +utf-8-validate@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.3.tgz#7d8c936d854e86b24d1d655f138ee27d2636d777" + integrity sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA== + dependencies: + node-gyp-build "^4.3.0" + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@8.3.2, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +uuidv4@^6.2.13: + version "6.2.13" + resolved "https://registry.yarnpkg.com/uuidv4/-/uuidv4-6.2.13.tgz#8f95ec5ef22d1f92c8e5d4c70b735d1c89572cb7" + integrity sha512-AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ== + dependencies: + "@types/uuid" "8.3.4" + uuid "8.3.2" + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-compile-cache@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + 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" + +validate-npm-package-name@5.0.0, validate-npm-package-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" + integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== + dependencies: + builtins "^5.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" + +viem@^1.20.3, viem@^1.21.4: + version "1.21.4" + resolved "https://registry.yarnpkg.com/viem/-/viem-1.21.4.tgz#883760e9222540a5a7e0339809202b45fe6a842d" + integrity sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "0.9.8" + isows "1.0.3" + ws "8.13.0" + +vscode-oniguruma@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" + integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== + +vscode-textmate@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" + integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +wcwidth@^1.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-utils@^1.3.4: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.3.tgz#f1db99c82549c7d9f8348f04ffe4e0188b449714" + integrity sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +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-typed-array@^1.1.11, 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.10, which@^1.2.14: + 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, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" + integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +winston-transport@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.6.0.tgz#f1c1a665ad1b366df72199e27892721832a19e1b" + integrity sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg== + dependencies: + logform "^2.3.2" + readable-stream "^3.6.0" + triple-beam "^1.3.0" + +winston@3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.7.2.tgz#95b4eeddbec902b3db1424932ac634f887c400b1" + integrity sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng== + dependencies: + "@dabh/diagnostics" "^2.0.2" + async "^3.2.3" + is-stream "^2.0.0" + logform "^2.4.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.5.0" + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.0.1: + 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@^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.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + +write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-pkg@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" + integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== + dependencies: + sort-keys "^2.0.0" + type-fest "^0.4.1" + write-json-file "^3.2.0" + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@21.1.1, yargs-parser@^21.0.1, 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-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.0.0, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.1.0, yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.2: + 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.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^3.22.4: + version "3.22.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== From bb548884e76a94a20329e49b18994503de9e3888 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Thu, 25 Jan 2024 12:00:56 +0200 Subject: [PATCH 1065/1247] Feat/sma 540 check paymaster userop (#384) * Refactor paymasterServiceData validation logic for ERC20 mode * Add assertions and test case for ERC20 Paymaster user op * Changed isNullOrUndefined function param to any type * Update createSmartWalletClient to createSmartAccountClient * Added ts-doc for setPaymasterUserOp * Export FeeQuotesOrDataResponse from @account and update import path in test * Refactor setPaymasterUserOp --> getPaymasterUserOp --------- Co-authored-by: GabiDev --- .../account/src/BiconomySmartAccountV2.ts | 68 ++++++++++++++++--- packages/account/src/index.ts | 1 + packages/account/src/utils/Utils.ts | 4 +- packages/account/tests/account.e2e.spec.ts | 62 ++++++++++++++++- 4 files changed, 122 insertions(+), 13 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index c0acbe760..3c5d6b165 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -503,13 +503,60 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } /** - * Sets paymaster-related fields in the provided user operation based on the specified paymaster service data. * - * @param {Partial} userOp - The partial user operation structure to be modified. - * @param {PaymasterUserOperationDto} paymasterServiceData - The paymaster service data containing mode and additional information. - * @returns {Promise>} A promise that resolves to the modified user operation structure. + * @param userOp + * @param params + * @description This function will setup required fields for paymaster user ops + * Configures a sponsored or ERC20 paymaster user op with required fields + * + * @param userOp Partial<{@link UserOperationStruct}> the userOp params to be sent. + * @param paymasterServiceData PaymasterUserOperationDto + * @returns Promise> + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartWallet = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * let userOp = await smartWallet.buildUserOp([transaction]); + * + * // for SPONSORED mode + * userOp = await smartWallet.getPaymasterUserOp(userOp, { mode: PaymasterMode.SPONSORED }); + * + * // for ERC20 mode + * const feeQuotesResponse: FeeQuotesOrDataResponse = await ( + smartWallet.paymaster as IHybridPaymaster + ).getPaymasterFeeQuotesOrData(userOp, { + mode: PaymasterMode.ERC20, + preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + }); + const feeQuotes = feeQuotesResponse.feeQuotes as PaymasterFeeQuote[]; + const selectedFeeQuote = feeQuotes[0]; + const spender = feeQuotesResponse.tokenPaymasterAddress; + * + * userOp = await smartWallet.getPaymasterUserOp(userOp, { mode: PaymasterMode.ERC20, feeQuote: selectedFeeQuote, spender, maxApproval: true }); + * const tx = await smartWallet.sendUserOp(userOp); */ - async setPaymasterUserOp( + async getPaymasterUserOp( userOp: Partial, paymasterServiceData: PaymasterUserOperationDto, ): Promise> { @@ -523,7 +570,12 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { userOp.verificationGasLimit = paymasterData.verificationGasLimit; userOp.preVerificationGas = paymasterData.preVerificationGas; return userOp; - } else if (paymasterServiceData.mode === PaymasterMode.ERC20 && paymasterServiceData.feeQuote !== undefined) { + } else if ( + paymasterServiceData.mode === PaymasterMode.ERC20 && + !isNullOrUndefined(paymasterServiceData.feeQuote) && + !isNullOrUndefined(paymasterServiceData.spender) && + !isNullOrUndefined(paymasterServiceData.maxApproval) + ) { const finalUserOp = await this.buildTokenPaymasterUserOp(userOp, { feeQuote: paymasterServiceData.feeQuote, spender: (paymasterServiceData.spender as Hex) || "", @@ -544,7 +596,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { finalUserOp.preVerificationGas = paymasterAndDataWithLimits.preVerificationGas; return finalUserOp; } else { - return userOp; + throw new Error("One or more fields are missing (mode, feeQuote, spender, maxApproval)"); } } else { throw new Error("Paymaster is not provided"); @@ -843,7 +895,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { userOp = await this.estimateUserOpGas(userOp); if (buildUseropDto?.paymasterServiceData) { - userOp = await this.setPaymasterUserOp(userOp, buildUseropDto?.paymasterServiceData); + userOp = await this.getPaymasterUserOp(userOp, buildUseropDto?.paymasterServiceData); } Logger.log("UserOp after estimation ", userOp); diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index ad8f01fac..5df5a4203 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -13,6 +13,7 @@ export { IHybridPaymaster, PaymasterFeeQuote, SponsorUserOperationDto, + FeeQuotesOrDataResponse, } from "@biconomy/paymaster"; export { EthersSigner, convertSigner } from "@biconomy/common"; export { Bundler, IBundler, extractChainIdFromBundlerUrl, UserOpResponse } from "@biconomy/bundler"; diff --git a/packages/account/src/utils/Utils.ts b/packages/account/src/utils/Utils.ts index 598cc37c1..d905506c9 100644 --- a/packages/account/src/utils/Utils.ts +++ b/packages/account/src/utils/Utils.ts @@ -1,5 +1,5 @@ import { encodeAbiParameters, parseAbiParameters, keccak256, Hex } from "viem"; -import type { UserOperationStruct, BigNumberish, BytesLike } from "@alchemy/aa-core"; +import type { UserOperationStruct } from "@alchemy/aa-core"; /** * pack the userOperation @@ -40,6 +40,6 @@ export function packUserOp(op: Partial, forSignature = true } } -export const isNullOrUndefined = (value: string | number | bigint | BigNumberish | undefined | BytesLike): value is undefined => { +export const isNullOrUndefined = (value: any): value is undefined => { return value === null || value === undefined; }; diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 538154d47..db4dccbb6 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,9 +1,15 @@ import { TestData } from "../../../tests"; -import { PaymasterUserOperationDto, createSmartAccountClient } from "../src/index"; +import { + PaymasterUserOperationDto, + createSmartAccountClient, + FeeQuotesOrDataResponse, + IHybridPaymaster, + PaymasterFeeQuote, + PaymasterMode, +} from "../src/index"; import { Hex, encodeFunctionData, parseAbi } from "viem"; import { UserOperationStruct } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "../../../tests/utils"; -import { FeeQuotesOrDataResponse, IHybridPaymaster, PaymasterFeeQuote, PaymasterMode } from "@biconomy/paymaster"; describe("Account Tests", () => { let mumbai: TestData; @@ -148,7 +154,13 @@ describe("Account Tests", () => { const spender = feeQuotesResponse.tokenPaymasterAddress as Hex; const selectedFeeQuote = feeQuotes[0]; - userOp = await smartWallet.setPaymasterUserOp(userOp, { mode: PaymasterMode.ERC20, feeQuote: selectedFeeQuote, spender, maxApproval: true }); + userOp = await smartWallet.getPaymasterUserOp(userOp, { mode: PaymasterMode.ERC20, feeQuote: selectedFeeQuote, spender, maxApproval: true }); + + expect(userOp.paymasterAndData).toBeTruthy(); + expect(userOp.verificationGasLimit).toBeTruthy(); + expect(userOp.preVerificationGas).toBeTruthy(); + expect(userOp.maxFeePerGas).toBeTruthy(); + expect(userOp.maxPriorityFeePerGas).toBeTruthy(); expect(userOp.paymasterAndData).not.toBe("0x"); @@ -168,6 +180,50 @@ describe("Account Tests", () => { expect(newBalance - balance).toBe(1n); }, 60000); + it("Should throw and error if missing field for ERC20 Paymaster user op", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartWallet = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; + + const userOp = await smartWallet.buildUserOp([transaction]); + + const feeQuotesResponse: FeeQuotesOrDataResponse = await ( + smartWallet.paymaster as IHybridPaymaster + ).getPaymasterFeeQuotesOrData(userOp, { + mode: PaymasterMode.ERC20, + tokenList: ["0xda5289fcaaf71d52a80a254da614a192b693e977"], + preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + }); + + const feeQuotes = feeQuotesResponse.feeQuotes as PaymasterFeeQuote[]; + const selectedFeeQuote = feeQuotes[0]; + + // maxApproval and spender are missing + await expect(smartWallet.getPaymasterUserOp(userOp, { mode: PaymasterMode.ERC20, feeQuote: selectedFeeQuote })).rejects.toThrow( + "One or more fields are missing (mode, feeQuote, spender, maxApproval)", + ); + }, 60000); + it("#getUserOpHash should match entryPoint.getUserOpHash", async () => { const { whale: { viemWallet: signer }, From c2100eeef24d1154f5e20c5b0dbf30a704433fad Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 25 Jan 2024 17:26:36 +0400 Subject: [PATCH 1066/1247] update lockfile --- yarn.lock | 339 +++++++++++++++++++++++++++--------------------------- 1 file changed, 167 insertions(+), 172 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1b1bcbfbb..e052ddab0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,9 +23,9 @@ zod "^3.22.4" "@alchemy/aa-core@^2.0.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-2.2.0.tgz#162964a167ec05ccdfdaf11e598ecf391a991483" - integrity sha512-2QT2tA5A53aEWzW4+5IncdGFLxtXfc/giRjEGKbJ+UPKx3fXHh+lV/aEjGuzAj8sdB0m1so6QqL7md06/hGwPA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-2.3.0.tgz#07e4e77a895cd18153f71b6531cbac5202c740d9" + integrity sha512-GIQEVG4tO4qh4YzTUaqKSB39v1Oyg1SmXFZNWCWnt+Qsqov+8OHs6YrcbqDJ/0tFAf3ZcSFMmagJPfn4SAxeOg== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" @@ -391,120 +391,120 @@ enabled "2.0.x" kuler "^2.0.0" -"@esbuild/aix-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" - integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== - -"@esbuild/android-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" - integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== - -"@esbuild/android-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" - integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== - -"@esbuild/android-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" - integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== - -"@esbuild/darwin-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" - integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== - -"@esbuild/darwin-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" - integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== - -"@esbuild/freebsd-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" - integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== - -"@esbuild/freebsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" - integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== - -"@esbuild/linux-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" - integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== - -"@esbuild/linux-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" - integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== - -"@esbuild/linux-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" - integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== - -"@esbuild/linux-loong64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" - integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== - -"@esbuild/linux-mips64el@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" - integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== - -"@esbuild/linux-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" - integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== - -"@esbuild/linux-riscv64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" - integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== - -"@esbuild/linux-s390x@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" - integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== - -"@esbuild/linux-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" - integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== - -"@esbuild/netbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" - integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== - -"@esbuild/openbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" - integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== - -"@esbuild/sunos-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" - integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== - -"@esbuild/win32-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" - integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== - -"@esbuild/win32-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" - integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== - -"@esbuild/win32-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" - integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== + +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== + +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== + +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== + +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== + +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== + +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== + +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== + +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== + +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== + +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== + +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== + +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== + +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== + +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== + +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== + +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== + +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== + +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== + +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== + +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== + +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -1829,9 +1829,9 @@ uuidv4 "^6.2.13" "@particle-network/auth@^1.2.1": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@particle-network/auth/-/auth-1.3.0.tgz#34b08e639104f7bd114a3e46d19904b19e7c6795" - integrity sha512-iCBiOAo/yrK7wLbZXCF1Z+eOOUc1OQwZCFt+HFCNtNjkM1t0Uj9+ugffuHJipSqtgzjzvw8y9IYE5dTGj89DlA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/@particle-network/auth/-/auth-1.3.1.tgz#f9ee51749e3b10e700e0d8c51a8c0769ab0b9851" + integrity sha512-hu6ie5RjjN4X+6y/vfjyCsSX3pQuS8k8ZoMb61QWwhWsnZXKzpBUVeAEk55aGfxxXY+KfBkSmZosyaZHGoHnfw== dependencies: "@particle-network/analytics" "^1.0.1" "@particle-network/chains" "*" @@ -1848,9 +1848,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.8" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.8.tgz#61f1847ac31eb7ae358a51e5f11ebda4d5bbb7cb" - integrity sha512-hDygYWHxkKYkKUZsbA8KIlauejiLYfPA944jCAJj5JjGcfx9sMVhahGFUj6MnJOxh/7uhJHzlQfK9PvuCxXUlw== + version "1.3.10" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.10.tgz#a7c7c8c01efd40c14b6905edf4d70300c8033862" + integrity sha512-6bsgV6z2Ens10Kn96xDhuaut0eWlYcR5Tb1yclyWt5eiRQeWh3oBB/ZJAx66po0ybnJgCeTVoe6tFy8wjClPVw== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -1861,9 +1861,9 @@ uuidv4 "^6.2.13" "@particle-network/provider@^1.2.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@particle-network/provider/-/provider-1.3.0.tgz#9f0f3ce7695eed53a6521fe6701330ee6dc79d00" - integrity sha512-9Nja6CYvkjHtkCuafoxP/QQrBYoUfmJZmAUkzsk8xBr/I6ByThER4SCtGTW6gGndWFtHSJuLJtnustlq3FKgeA== + version "1.3.2" + resolved "https://registry.yarnpkg.com/@particle-network/provider/-/provider-1.3.2.tgz#68ae98cca471c7612206cb43c915719cd321fb25" + integrity sha512-3XAUMCISTMYE57LZik7PrVanLIUyyU1ufb5eHtsoQw5ORfH0IeX3E5o6x5mxtfOXKfxVQ0tsIoLRMw0jMmSDpA== dependencies: "@particle-network/chains" "*" axios "^1.3.6" @@ -2238,9 +2238,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*": - version "20.11.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.5.tgz#be10c622ca7fcaa3cf226cf80166abc31389d86e" - integrity sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w== + version "20.11.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.6.tgz#6adf4241460e28be53836529c033a41985f85b6e" + integrity sha512-+EOokTnksGVgip2PbYbr3xnR7kZigh4LbybAfBAw5BpnQ+FqBYUsvCEjYd70IXKlbohQ64mzEYmMtlWUY8q//Q== dependencies: undici-types "~5.26.4" @@ -2781,9 +2781,9 @@ available-typed-arrays@^1.0.5: integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== axios@^1.0.0, axios@^1.3.6: - version "1.6.5" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.5.tgz#2c090da14aeeab3770ad30c3a1461bc970fb0cd8" - integrity sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg== + version "1.6.6" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.6.tgz#878db45401d91fe9e53aed8ac962ed93bde8dd1c" + integrity sha512-XZLZDFfXKM9U/Y/B4nNynfCRUqNyVZ4sBC/n9GDRCkq9vd2mIvKjKKsbIh1WPmHmNbg6ND7cTBY3Y2+u1G3/2Q== dependencies: follow-redirects "^1.15.4" form-data "^4.0.0" @@ -3186,9 +3186,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001565: - version "1.0.30001579" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz#45c065216110f46d6274311a4b3fcf6278e0852a" - integrity sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA== + version "1.0.30001580" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001580.tgz#e3c76bc6fe020d9007647044278954ff8cd17d1e" + integrity sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA== case@^1.6.3: version "1.6.3" @@ -3892,9 +3892,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.601: - version "1.4.642" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.642.tgz#eb380fa8b58e515c641d642ba452fa2c453c2e4f" - integrity sha512-M4+u22ZJGpk4RY7tne6W+APkZhnnhmAH48FNl8iEFK2lEgob+U5rUQsIqQhvAwCXYpfd3H20pHK/ENsCvwTbsA== + version "1.4.645" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.645.tgz#117f964252eb2f0ff00fc7360cb3080e2cf66e3c" + integrity sha512-EeS1oQDCmnYsRDRy2zTeC336a/4LZ6WKqvSaM1jLocEk5ZuyszkQtCpsqvuvaIXGOUjwtvF6LTcS8WueibXvSw== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -4068,33 +4068,33 @@ esbuild-plugin-tsc@^0.4.0: strip-comments "^2.0.1" esbuild@^0.19.11: - version "0.19.11" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96" - integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== optionalDependencies: - "@esbuild/aix-ppc64" "0.19.11" - "@esbuild/android-arm" "0.19.11" - "@esbuild/android-arm64" "0.19.11" - "@esbuild/android-x64" "0.19.11" - "@esbuild/darwin-arm64" "0.19.11" - "@esbuild/darwin-x64" "0.19.11" - "@esbuild/freebsd-arm64" "0.19.11" - "@esbuild/freebsd-x64" "0.19.11" - "@esbuild/linux-arm" "0.19.11" - "@esbuild/linux-arm64" "0.19.11" - "@esbuild/linux-ia32" "0.19.11" - "@esbuild/linux-loong64" "0.19.11" - "@esbuild/linux-mips64el" "0.19.11" - "@esbuild/linux-ppc64" "0.19.11" - "@esbuild/linux-riscv64" "0.19.11" - "@esbuild/linux-s390x" "0.19.11" - "@esbuild/linux-x64" "0.19.11" - "@esbuild/netbsd-x64" "0.19.11" - "@esbuild/openbsd-x64" "0.19.11" - "@esbuild/sunos-x64" "0.19.11" - "@esbuild/win32-arm64" "0.19.11" - "@esbuild/win32-ia32" "0.19.11" - "@esbuild/win32-x64" "0.19.11" + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" escalade@^3.1.1: version "3.1.1" @@ -5365,11 +5365,6 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -husky@^8.0.0: - version "8.0.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" - integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== - iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -8674,9 +8669,9 @@ spdx-correct@^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== + version "2.4.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" + integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== spdx-expression-parse@^3.0.0: version "3.0.1" From 9727fd51e47d62904399d17d48f5c9d6b9e591e5 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Thu, 25 Jan 2024 17:51:58 +0200 Subject: [PATCH 1067/1247] Add ethersV6 compatibility (#387) * Fix for etherv6 signer compatibility * Refactor name --------- Co-authored-by: GabiDev --- packages/common/src/utils/Types.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/common/src/utils/Types.ts b/packages/common/src/utils/Types.ts index 11006b97c..c5f7161bd 100644 --- a/packages/common/src/utils/Types.ts +++ b/packages/common/src/utils/Types.ts @@ -1,6 +1,11 @@ -import { SmartAccountSigner } from "@alchemy/aa-core"; import { WalletClient } from "viem"; import { Signer } from "@ethersproject/abstract-signer"; +import { SmartAccountSigner } from "@alchemy/aa-core"; export type SupportedSignerName = "alchemy" | "ethers" | "viem"; -export type SupportedSigner = SmartAccountSigner | WalletClient | Signer; +export type SupportedSigner = SmartAccountSigner | WalletClient | Signer | EthersV6Signer; + +export interface EthersV6Signer { + getAddress(): Promise; + signMessage(message: string | Uint8Array): Promise; +} From 741806da68457eba262e1a49be77fcc24360ba36 Mon Sep 17 00:00:00 2001 From: joepegler Date: Fri, 26 Jan 2024 11:50:09 +0000 Subject: [PATCH 1068/1247] Feat(SMA-559): Improved dx for erc20 paymaster calls (#388) * Resolved SMA-559 * Fix await * Fix tests * Update docs * remove unused import * Fix broken tests * Fix rpc url * buildTokenPaymasterUserOp * lint:fix * Fix spender * Abstract tokenlist away * fix test * fix await * lint:fix * Make getPaymasterUserOp public * remove log --- .env.example | 3 +- .github/workflows/docs.yml | 1 + .../account/src/BiconomySmartAccountV2.ts | 160 ++++++++++-------- packages/account/src/utils/Types.ts | 27 +-- packages/account/tests/account.e2e.spec.ts | 139 ++++++++++----- packages/account/tests/account.spec.ts | 22 +-- .../multiChainValidationModule.e2e.spec.ts | 4 +- packages/modules/tests/utils/customSession.ts | 11 +- yarn.lock | 116 ++++++------- 9 files changed, 277 insertions(+), 206 deletions(-) diff --git a/.env.example b/.env.example index 4c3d5bb12..a293b6aaf 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,5 @@ E2E_PRIVATE_KEY_ONE= E2E_PRIVATE_KEY_TWO= E2E_BICO_PAYMASTER_KEY_MUMBAI= -E2E_BICO_PAYMASTER_KEY_BASE= \ No newline at end of file +E2E_BICO_PAYMASTER_KEY_BASE= +BICONOMY_SDK_DEBUG=true \ No newline at end of file diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index c37747b21..5b5dd6522 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -4,6 +4,7 @@ on: push: branches: - develop + - v4 permissions: contents: write diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 3c5d6b165..607c79056 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -65,6 +65,7 @@ import { BiconomyAccountAbi } from "./abi/SmartAccount"; import { AccountResolverAbi } from "./abi/AccountResolver"; import { Logger } from "@biconomy/common"; import { convertSigner } from "./"; +import { FeeQuotesOrDataDto, FeeQuotesOrDataResponse } from "@biconomy/paymaster"; type UserOperationKey = keyof UserOperationStruct; @@ -502,16 +503,69 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return encodeAbiParameters(parseAbiParameters("bytes, address"), [moduleSignature, moduleAddressToUse]); } + public async getPaymasterUserOp( + userOp: Partial, + paymasterServiceData: PaymasterUserOperationDto, + ): Promise> { + if (paymasterServiceData.mode === PaymasterMode.SPONSORED) { + return this.getPaymasterAndData(userOp, paymasterServiceData); + } else if (paymasterServiceData.mode === PaymasterMode.ERC20) { + if (paymasterServiceData?.feeQuote) { + Logger.log("there is a feeQuote: ", paymasterServiceData.feeQuote); + if (!paymasterServiceData.spender || !paymasterServiceData.maxApproval) { + throw new Error("spender and maxApproval are required for ERC20 mode"); + } + const finalUserOp = await this.buildTokenPaymasterUserOp(userOp, paymasterServiceData as BiconomyTokenPaymasterRequest); + const fromPayMaster = await this.getPaymasterAndData(userOp, { + ...paymasterServiceData, + feeTokenAddress: paymasterServiceData.feeQuote.tokenAddress, + calculateGasLimits: true, // Always recommended and especially when using token paymaster + }); + return { ...finalUserOp, ...fromPayMaster }; + } else if (paymasterServiceData.preferredToken) { + Logger.log("there is a preferred token: ", paymasterServiceData.preferredToken); + const preferredToken = paymasterServiceData.preferredToken; + const feeQuotesResponse = await this.getPaymasterFeeQuotesOrData(userOp, { + ...paymasterServiceData, + tokenList: paymasterServiceData?.tokenList ?? [preferredToken], + }); + const spender = feeQuotesResponse.tokenPaymasterAddress; + const feeQuote = feeQuotesResponse.feeQuotes?.[0]; + if (!feeQuote) { + throw new Error("Error while getting feeQuote"); + } + return this.getPaymasterAndData(userOp, { ...paymasterServiceData, feeQuote, spender, feeTokenAddress: preferredToken }); + } else { + throw new Error("FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote"); + } + } + throw new Error("Invalid paymaster mode"); + } + + private async getPaymasterAndData( + userOp: Partial, + paymasterServiceData: PaymasterUserOperationDto, + ): Promise> { + const paymaster = this.paymaster as IHybridPaymaster; + const paymasterData = await paymaster.getPaymasterAndData(userOp, paymasterServiceData); + return { ...userOp, ...paymasterData }; + } + + private async getPaymasterFeeQuotesOrData( + userOp: Partial, + feeQuotesOrData: FeeQuotesOrDataDto, + ): Promise { + const paymaster = this.paymaster as IHybridPaymaster; + return paymaster.getPaymasterFeeQuotesOrData(userOp, feeQuotesOrData); + } + /** * - * @param userOp - * @param params - * @description This function will setup required fields for paymaster user ops - * Configures a sponsored or ERC20 paymaster user op with required fields + * @description This function will retrieve fees from the paymaster in erc20 mode * - * @param userOp Partial<{@link UserOperationStruct}> the userOp params to be sent. - * @param paymasterServiceData PaymasterUserOperationDto - * @returns Promise> + * @param manyOrOneTransactions Array of {@link Transaction} to be batched and sent. Can also be a single {@link Transaction}. + * @param buildUseropDto {@link BuildUserOpOptions}. + * @returns Promise * * @example * import { createClient } from "viem" @@ -537,70 +591,36 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * data: encodedCall * } * - * let userOp = await smartWallet.buildUserOp([transaction]); + * const feeQuotesResponse: FeeQuotesOrDataResponse = await smartWallet.getTokenFees(transaction, { + * paymasterServiceData: { + * mode: PaymasterMode.ERC20, + * tokenList: ["0xda5289fcaaf71d52a80a254da614a192b693e977"], + * preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977" + * } + * }); + * + * const userSeletedFeeQuote = feeQuotesResponse.feeQuotes?.[0]; + * + * const { wait } = await smartWallet.sendTransaction(transaction, { + * paymasterServiceData: { + * mode: PaymasterMode.ERC20, + * feeQuote: userSeletedFeeQuote, + * maxApproval: true, + * spender: "0x...", + * }, + * }); + * + * const { receipt } = await wait(); * - * // for SPONSORED mode - * userOp = await smartWallet.getPaymasterUserOp(userOp, { mode: PaymasterMode.SPONSORED }); - * - * // for ERC20 mode - * const feeQuotesResponse: FeeQuotesOrDataResponse = await ( - smartWallet.paymaster as IHybridPaymaster - ).getPaymasterFeeQuotesOrData(userOp, { - mode: PaymasterMode.ERC20, - preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", - }); - const feeQuotes = feeQuotesResponse.feeQuotes as PaymasterFeeQuote[]; - const selectedFeeQuote = feeQuotes[0]; - const spender = feeQuotesResponse.tokenPaymasterAddress; - * - * userOp = await smartWallet.getPaymasterUserOp(userOp, { mode: PaymasterMode.ERC20, feeQuote: selectedFeeQuote, spender, maxApproval: true }); - * const tx = await smartWallet.sendUserOp(userOp); */ - async getPaymasterUserOp( - userOp: Partial, - paymasterServiceData: PaymasterUserOperationDto, - ): Promise> { - if (this.paymaster !== undefined) { - if (paymasterServiceData.mode === PaymasterMode.SPONSORED) { - const paymasterData = await (this.paymaster as IHybridPaymaster).getPaymasterAndData(userOp, { - mode: paymasterServiceData.mode, - }); - userOp.paymasterAndData = paymasterData.paymasterAndData; - userOp.callGasLimit = paymasterData.callGasLimit; - userOp.verificationGasLimit = paymasterData.verificationGasLimit; - userOp.preVerificationGas = paymasterData.preVerificationGas; - return userOp; - } else if ( - paymasterServiceData.mode === PaymasterMode.ERC20 && - !isNullOrUndefined(paymasterServiceData.feeQuote) && - !isNullOrUndefined(paymasterServiceData.spender) && - !isNullOrUndefined(paymasterServiceData.maxApproval) - ) { - const finalUserOp = await this.buildTokenPaymasterUserOp(userOp, { - feeQuote: paymasterServiceData.feeQuote, - spender: (paymasterServiceData.spender as Hex) || "", - maxApproval: paymasterServiceData.maxApproval, - }); - const newPaymasterServiceData = { - mode: PaymasterMode.ERC20, - feeTokenAddress: paymasterServiceData.feeQuote.tokenAddress, - calculateGasLimits: true, // Always recommended and especially when using token paymaster - }; - const paymasterAndDataWithLimits = await (this.paymaster as IHybridPaymaster).getPaymasterAndData( - finalUserOp, - newPaymasterServiceData, - ); - finalUserOp.paymasterAndData = paymasterAndDataWithLimits.paymasterAndData; - finalUserOp.callGasLimit = paymasterAndDataWithLimits.callGasLimit; - finalUserOp.verificationGasLimit = paymasterAndDataWithLimits.verificationGasLimit; - finalUserOp.preVerificationGas = paymasterAndDataWithLimits.preVerificationGas; - return finalUserOp; - } else { - throw new Error("One or more fields are missing (mode, feeQuote, spender, maxApproval)"); - } - } else { - throw new Error("Paymaster is not provided"); - } + public async getTokenFees( + manyOrOneTransactions: Transaction | Transaction[], + buildUseropDto: BuildUserOpOptions, + ): Promise { + const txs = Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions : [manyOrOneTransactions]; + const userOp = await this.buildUserOp(txs, buildUseropDto); + if (!buildUseropDto.paymasterServiceData) throw new Error("paymasterServiceData was not provided"); + return this.getPaymasterFeeQuotesOrData(userOp, buildUseropDto.paymasterServiceData); } /** @@ -895,7 +915,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { userOp = await this.estimateUserOpGas(userOp); if (buildUseropDto?.paymasterServiceData) { - userOp = await this.getPaymasterUserOp(userOp, buildUseropDto?.paymasterServiceData); + userOp = await this.getPaymasterUserOp(userOp, buildUseropDto.paymasterServiceData); } Logger.log("UserOp after estimation ", userOp); diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index da0db1935..0ace19a00 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -1,6 +1,6 @@ import { BigNumberish, SmartAccountSigner, UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; import { IBundler } from "@biconomy/bundler"; -import { IPaymaster, PaymasterFeeQuote, PaymasterMode, SmartAccountData, SponsorUserOperationDto } from "@biconomy/paymaster"; +import { FeeQuotesOrDataDto, IPaymaster, PaymasterFeeQuote, PaymasterMode, SmartAccountData, SponsorUserOperationDto } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Hex, WalletClient } from "viem"; import { SupportedSigner } from "@biconomy/common"; @@ -177,19 +177,20 @@ export type InitilizationData = { signerAddress?: string; }; -export type PaymasterUserOperationDto = { - mode: PaymasterMode; - calculateGasLimits?: boolean; - expiryDuration?: number; - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; +export type PaymasterUserOperationDto = SponsorUserOperationDto & + FeeQuotesOrDataDto & { + mode: PaymasterMode; + calculateGasLimits?: boolean; + expiryDuration?: number; + webhookData?: { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [key: string]: any; + }; + smartAccountInfo?: SmartAccountData; + feeQuote?: PaymasterFeeQuote; + spender?: Hex; + maxApproval?: boolean; }; - smartAccountInfo?: SmartAccountData; - feeQuote?: PaymasterFeeQuote; - spender?: Hex; - maxApproval?: boolean; -}; export type InitializeV2Data = { accountIndex?: number; diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index db4dccbb6..5c20280c9 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,12 +1,5 @@ import { TestData } from "../../../tests"; -import { - PaymasterUserOperationDto, - createSmartAccountClient, - FeeQuotesOrDataResponse, - IHybridPaymaster, - PaymasterFeeQuote, - PaymasterMode, -} from "../src/index"; +import { createSmartAccountClient, FeeQuotesOrDataResponse, PaymasterMode } from "../src/index"; import { Hex, encodeFunctionData, parseAbi } from "viem"; import { UserOperationStruct } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "../../../tests/utils"; @@ -109,13 +102,13 @@ describe("Account Tests", () => { expect(newBalance - balance).toBe(1n); }, 60000); - it("Should mint an NFT on Mumbai and pay with ERC20", async () => { + it("Should mint an NFT on Mumbai and pay with ERC20 - with preferredToken", async () => { const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; const { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, - biconomyPaymasterApiKey, publicClient, + biconomyPaymasterApiKey, } = mumbai; const smartWallet = await createSmartAccountClient({ @@ -136,39 +129,91 @@ describe("Account Tests", () => { }; const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const maticBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress()); const usdcBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); - let userOp = await smartWallet.buildUserOp([transaction]); + const { wait } = await smartWallet.sendTransaction([transaction], { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + }, + }); + + const { + receipt: { transactionHash }, + userOpHash, + success, + } = await wait(); + + expect(transactionHash).toBeTruthy(); + expect(userOpHash).toBeTruthy(); + expect(success).toBe("true"); + + const maticBalanceAfter = await checkBalance(publicClient, await smartWallet.getAddress()); + expect(maticBalanceAfter).toEqual(maticBalanceBefore); + + const usdcBalanceAfter = await checkBalance(publicClient, await smartWallet.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); + expect(usdcBalanceAfter).toBeLessThan(usdcBalanceBefore); + + const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + expect(newBalance - balance).toBe(1n); + }, 60000); + + it("Should mint an NFT on Mumbai and pay with ERC20 - with token selection", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + publicClient, + } = mumbai; + + const smartWallet = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); - const feeQuotesResponse: FeeQuotesOrDataResponse = await ( - smartWallet.paymaster as IHybridPaymaster - ).getPaymasterFeeQuotesOrData(userOp, { - mode: PaymasterMode.ERC20, - tokenList: ["0xda5289fcaaf71d52a80a254da614a192b693e977"], - preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient], }); - const feeQuotes = feeQuotesResponse.feeQuotes as PaymasterFeeQuote[]; - const spender = feeQuotesResponse.tokenPaymasterAddress as Hex; - const selectedFeeQuote = feeQuotes[0]; + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; - userOp = await smartWallet.getPaymasterUserOp(userOp, { mode: PaymasterMode.ERC20, feeQuote: selectedFeeQuote, spender, maxApproval: true }); + const feeQuotesResponse = await smartWallet.getTokenFees(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + }, + }); - expect(userOp.paymasterAndData).toBeTruthy(); - expect(userOp.verificationGasLimit).toBeTruthy(); - expect(userOp.preVerificationGas).toBeTruthy(); - expect(userOp.maxFeePerGas).toBeTruthy(); - expect(userOp.maxPriorityFeePerGas).toBeTruthy(); + const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + const maticBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress()); + const usdcBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); - expect(userOp.paymasterAndData).not.toBe("0x"); + const { wait } = await smartWallet.sendTransaction(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + feeQuote: feeQuotesResponse.feeQuotes?.[0], + spender: feeQuotesResponse.tokenPaymasterAddress, + maxApproval: true, + }, + }); - const response = await smartWallet.sendUserOp(userOp); + const { + receipt: { transactionHash }, + userOpHash, + success, + } = await wait(); - const userOpReceipt = await response.wait(); - expect(userOpReceipt.userOpHash).toBeTruthy(); - expect(userOpReceipt.success).toBe("true"); + expect(userOpHash).toBeTruthy(); + expect(success).toBe("true"); + expect(transactionHash).toBeTruthy(); const maticBalanceAfter = await checkBalance(publicClient, await smartWallet.getAddress()); expect(maticBalanceAfter).toEqual(maticBalanceBefore); @@ -186,6 +231,7 @@ describe("Account Tests", () => { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, biconomyPaymasterApiKey, + publicClient, } = mumbai; const smartWallet = await createSmartAccountClient({ @@ -205,23 +251,22 @@ describe("Account Tests", () => { data: encodedCall, }; - const userOp = await smartWallet.buildUserOp([transaction]); - - const feeQuotesResponse: FeeQuotesOrDataResponse = await ( - smartWallet.paymaster as IHybridPaymaster - ).getPaymasterFeeQuotesOrData(userOp, { - mode: PaymasterMode.ERC20, - tokenList: ["0xda5289fcaaf71d52a80a254da614a192b693e977"], - preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + const feeQuotesResponse: FeeQuotesOrDataResponse = await smartWallet.getTokenFees(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + }, }); - const feeQuotes = feeQuotesResponse.feeQuotes as PaymasterFeeQuote[]; - const selectedFeeQuote = feeQuotes[0]; - - // maxApproval and spender are missing - await expect(smartWallet.getPaymasterUserOp(userOp, { mode: PaymasterMode.ERC20, feeQuote: selectedFeeQuote })).rejects.toThrow( - "One or more fields are missing (mode, feeQuote, spender, maxApproval)", - ); + expect( + async () => + await smartWallet.sendTransaction(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + feeQuote: feeQuotesResponse.feeQuotes?.[0], + }, + }), + ).rejects.toThrow("spender and maxApproval are required for ERC20 mode"); }, 60000); it("#getUserOpHash should match entryPoint.getUserOpHash", async () => { diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index cd510861e..42c68bf34 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -208,11 +208,12 @@ describe("Account Tests", () => { transport: http(localhost.rpcUrls.public.http[0]), }); - expect(async () => - createSmartAccountClient({ - signer: viemWalletClientNoChainId, - bundlerUrl, - }), + expect( + async () => + await createSmartAccountClient({ + signer: viemWalletClientNoChainId, + bundlerUrl, + }), ).rejects.toThrow("Cannot consume a viem wallet without a chainId"); }); @@ -223,11 +224,12 @@ describe("Account Tests", () => { transport: http(localhost.rpcUrls.public.http[0]), }); - expect(async () => - createSmartAccountClient({ - signer: viemWalletNoAccount, - bundlerUrl, - }), + expect( + async () => + await createSmartAccountClient({ + signer: viemWalletNoAccount, + bundlerUrl, + }), ).rejects.toThrow("Cannot consume a viem wallet without an account"); }); }); diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts index e9dfc830e..7adac93de 100644 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -37,7 +37,7 @@ describe("Account with MultiChainValidation Module Tests", () => { const [polygonAccount, baseAccount] = await Promise.all([ createSmartAccountClient({ - chainId: 80001, + chainId: chainIdMumbai, signer: signerMumbai, bundlerUrl: bundlerUrlMumbai, defaultValidationModule: multiChainModule, @@ -45,7 +45,7 @@ describe("Account with MultiChainValidation Module Tests", () => { biconomyPaymasterApiKey: biconomyPaymasterApiKeyMumbai, }), createSmartAccountClient({ - chainId: 84531, + chainId: chainIdBase, signer: signerBase, bundlerUrl: bundlerUrlBase, defaultValidationModule: multiChainModule, diff --git a/packages/modules/tests/utils/customSession.ts b/packages/modules/tests/utils/customSession.ts index 00259536c..741eaf9c5 100644 --- a/packages/modules/tests/utils/customSession.ts +++ b/packages/modules/tests/utils/customSession.ts @@ -5,6 +5,7 @@ import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; import { Hex, createWalletClient, http } from "viem"; import { polygonMumbai } from "viem/chains"; import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "@biconomy/modules/src/interfaces/ISessionStorage"; +import { Logger } from "@biconomy/common"; export class SessionFileStorage implements ISessionStorage { private smartAccountAddress: string; @@ -93,7 +94,7 @@ export class SessionFileStorage implements ISessionStorage { async getSessionData(): Promise { const sessions = (await this.getSessionStore()).leafNodes; - console.log("Got sessions", sessions); + Logger.log("Got sessions", sessions); const session = sessions[0]; if (!session) { @@ -103,7 +104,7 @@ export class SessionFileStorage implements ISessionStorage { } async addSessionData(leaf: SessionLeafNode): Promise { - console.log("Add session Data", leaf); + Logger.log("Add session Data", leaf); const data = await this.getSessionStore(); leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule); leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey); @@ -174,13 +175,13 @@ export class SessionFileStorage implements ISessionStorage { async getSignerByKey(sessionPublicKey: string): Promise { const signers = await this.getSignerStore(); - console.log("Got signers", signers); + Logger.log("Got signers", signers); const signerData: SignerData = signers[this.toLowercaseAddress(sessionPublicKey)]; if (!signerData) { throw new Error("Signer not found."); } - console.log(signerData.pvKey, "PVKEY"); + Logger.log(signerData.pvKey, "PVKEY"); const signer = privateKeyToAccount(signerData.pvKey); const walletClient = createWalletClient({ @@ -192,7 +193,7 @@ export class SessionFileStorage implements ISessionStorage { async getSignerBySession(): Promise { const session = await this.getSessionData(); - console.log("got session", session); + Logger.log("got session", session); const walletClientSinger = await this.getSignerByKey(session.sessionPublicKey); return walletClientSinger; } diff --git a/yarn.lock b/yarn.lock index e052ddab0..c26ff64a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,9 +23,9 @@ zod "^3.22.4" "@alchemy/aa-core@^2.0.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-2.3.0.tgz#07e4e77a895cd18153f71b6531cbac5202c740d9" - integrity sha512-GIQEVG4tO4qh4YzTUaqKSB39v1Oyg1SmXFZNWCWnt+Qsqov+8OHs6YrcbqDJ/0tFAf3ZcSFMmagJPfn4SAxeOg== + version "2.3.1" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-2.3.1.tgz#ebd0abc2a71d1e5803cbbd0b0584a62a681c9a27" + integrity sha512-iADsVGbhm4rbvFwcauKwD8u5AbzoE+8d8iQpagGHkPDpcNVzFP/FHv48jvdg9M52kf4h2XGdrQviT02bdJFTKw== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" @@ -40,7 +40,7 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -54,20 +54,20 @@ integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" - integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" + integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.7" - "@babel/parser" "^7.23.6" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" + "@babel/helpers" "^7.23.9" + "@babel/parser" "^7.23.9" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -167,14 +167,14 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.23.7": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" - integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== +"@babel/helpers@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" + integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" "@babel/highlight@^7.23.4": version "7.23.4" @@ -185,10 +185,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" - integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" + integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -289,25 +289,25 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/runtime@^7.21.0": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.8.tgz#8ee6fe1ac47add7122902f257b8ddf55c898f650" - integrity sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw== + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" + integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" -"@babel/traverse@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" - integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== +"@babel/traverse@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" + integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== dependencies: "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" @@ -315,15 +315,15 @@ "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.6" - "@babel/types" "^7.23.6" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" - integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" + integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -2238,9 +2238,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*": - version "20.11.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.6.tgz#6adf4241460e28be53836529c033a41985f85b6e" - integrity sha512-+EOokTnksGVgip2PbYbr3xnR7kZigh4LbybAfBAw5BpnQ+FqBYUsvCEjYd70IXKlbohQ64mzEYmMtlWUY8q//Q== + version "20.11.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.7.tgz#cb49aedd758c978c30806d0c38b520ed2a3df6e0" + integrity sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A== dependencies: undici-types "~5.26.4" @@ -2781,9 +2781,9 @@ available-typed-arrays@^1.0.5: integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== axios@^1.0.0, axios@^1.3.6: - version "1.6.6" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.6.tgz#878db45401d91fe9e53aed8ac962ed93bde8dd1c" - integrity sha512-XZLZDFfXKM9U/Y/B4nNynfCRUqNyVZ4sBC/n9GDRCkq9vd2mIvKjKKsbIh1WPmHmNbg6ND7cTBY3Y2+u1G3/2Q== + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== dependencies: follow-redirects "^1.15.4" form-data "^4.0.0" @@ -3892,9 +3892,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.601: - version "1.4.645" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.645.tgz#117f964252eb2f0ff00fc7360cb3080e2cf66e3c" - integrity sha512-EeS1oQDCmnYsRDRy2zTeC336a/4LZ6WKqvSaM1jLocEk5ZuyszkQtCpsqvuvaIXGOUjwtvF6LTcS8WueibXvSw== + version "1.4.647" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.647.tgz#3c8d4815e5ed2fbdd37f4ab7333cd9f8fc56d53a" + integrity sha512-Z/fTNGwc45WrYQhPaEcz5tAJuZZ8G7S/DBnhS6Kgp4BxnS40Z/HqlJ0hHg3Z79IGVzuVartIlTcjw/cQbPLgOw== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -5404,9 +5404,9 @@ ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4: integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== immutable@^4.0.0-rc.12: - version "4.3.4" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" - integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + version "4.3.5" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" + integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" @@ -6651,9 +6651,9 @@ logform@^2.3.2, logform@^2.4.0: triple-beam "^1.3.0" lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": - version "10.1.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" - integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== lru-cache@^5.1.1: version "5.1.1" From 203391b70af55c017f7a872538382069461dbca7 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 26 Jan 2024 13:59:38 +0200 Subject: [PATCH 1069/1247] Added more tests and checks --- packages/account/tests/account.e2e.spec.ts | 24 ++++ .../account/tests/account.read.e2e.spec.ts | 103 ++++++++++++++++ .../multiChainValidationModule.e2e.spec.ts | 10 ++ yarn.lock | 110 +++++++++--------- 4 files changed, 192 insertions(+), 55 deletions(-) create mode 100644 packages/account/tests/account.read.e2e.spec.ts diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index db4dccbb6..e44a962b1 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -10,6 +10,7 @@ import { import { Hex, encodeFunctionData, parseAbi } from "viem"; import { UserOperationStruct } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "../../../tests/utils"; +import { DEFAULT_ECDSA_OWNERSHIP_MODULE } from "@biconomy/modules"; describe("Account Tests", () => { let mumbai: TestData; @@ -300,4 +301,27 @@ describe("Account Tests", () => { expect(ecdsaOwnershipModule).toBe(smartWallet.activeValidationModule.getAddress()); }); + + it("should get enable module data tx and send it as user op", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + } = mumbai; + + const smartWallet = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const enabledModuleData = await smartWallet.getEnableModuleData(DEFAULT_ECDSA_OWNERSHIP_MODULE); + + expect(enabledModuleData.data).toBeTruthy(); + expect(enabledModuleData.to).toBeTruthy(); + expect(enabledModuleData.value).toBe("0x00"); + + const response = await smartWallet.sendTransaction([{ to: await smartWallet.getAddress(), value: 1, data: "0x" }, enabledModuleData]); + await response.wait(); + expect(response).toBeTruthy(); + expect(response.userOpHash).toBeTruthy(); + }, 50000); }); diff --git a/packages/account/tests/account.read.e2e.spec.ts b/packages/account/tests/account.read.e2e.spec.ts new file mode 100644 index 000000000..778fd5db9 --- /dev/null +++ b/packages/account/tests/account.read.e2e.spec.ts @@ -0,0 +1,103 @@ +import { TestData } from "../../../tests"; +import { createSmartAccountClient } from "../src/index"; +import { DEFAULT_ECDSA_OWNERSHIP_MODULE, createECDSAOwnershipValidationModule } from "@biconomy/modules"; + +describe("Account Tests", () => { + let mumbai: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [mumbai] = testDataPerChain; + }); + + it("should check if module is enabled on the smart account", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + } = mumbai; + + const smartWallet = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const isEnabled = await smartWallet.isModuleEnabled(DEFAULT_ECDSA_OWNERSHIP_MODULE); + expect(isEnabled).toBeTruthy(); + }); + + it("should get all modules", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + } = mumbai; + + const smartWallet = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const modules = await smartWallet.getAllModules(); + expect(modules).toContain("0x000000D50C68705bd6897B2d17c7de32FB519fDA"); // erc20 module + expect(modules).toContain("0x000002FbFfedd9B33F4E7156F2DE8D48945E7489"); // session manager module + expect(modules).toContain("0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e"); // ecdsa ownership module + }); + + it("should disabled module data", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + } = mumbai; + + const smartWallet = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const disableModuleData = await smartWallet.getDisableModuleData(DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_ECDSA_OWNERSHIP_MODULE); + expect(disableModuleData).toBeTruthy(); + }); + + it("should get setup and enable module data", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + } = mumbai; + + const smartWallet = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const module = await createECDSAOwnershipValidationModule({ signer }); + const initData = await module.getInitData(); + const setupAndEnableModuleData = await smartWallet.getSetupAndEnableModuleData(DEFAULT_ECDSA_OWNERSHIP_MODULE, initData); + expect(setupAndEnableModuleData).toBeTruthy(); + }); + + it("should read estimated user op gas values", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + } = mumbai; + + const smartWallet = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const tx = { + to: "0x000000D50C68705bd6897B2d17c7de32FB519fDA", + data: "0x", + }; + + const userOp = await smartWallet.buildUserOp([tx]); + + const estimatedGas = await smartWallet.estimateUserOpGas(userOp); + expect(estimatedGas.maxFeePerGas).toBeTruthy(); + expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy(); + expect(estimatedGas.verificationGasLimit).toBeTruthy(); + expect(estimatedGas.callGasLimit).toBeTruthy(); + expect(estimatedGas.preVerificationGas).toBeTruthy(); + expect(estimatedGas).toHaveProperty("paymasterAndData", "0x"); + }); +}); diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts index e9dfc830e..8c02d175c 100644 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -54,6 +54,16 @@ describe("Account with MultiChainValidation Module Tests", () => { }), ]); + const moduleEnabled1 = await polygonAccount.isModuleEnabled(DEFAULT_MULTICHAIN_MODULE); + const moduleActive1 = polygonAccount.activeValidationModule; + expect(moduleEnabled1).toBeTruthy(); + expect(moduleActive1.getAddress()).toBe(DEFAULT_MULTICHAIN_MODULE); + + const moduleEnabled2 = await baseAccount.isModuleEnabled(DEFAULT_MULTICHAIN_MODULE); + const moduleActive2 = polygonAccount.activeValidationModule; + expect(moduleEnabled2).toBeTruthy(); + expect(moduleActive2.getAddress()).toBe(DEFAULT_MULTICHAIN_MODULE); + const encodedCall = encodeFunctionData({ abi: parseAbi(["function safeMint(address owner) view returns (uint balance)"]), functionName: "safeMint", diff --git a/yarn.lock b/yarn.lock index e052ddab0..652add44c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,9 +23,9 @@ zod "^3.22.4" "@alchemy/aa-core@^2.0.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-2.3.0.tgz#07e4e77a895cd18153f71b6531cbac5202c740d9" - integrity sha512-GIQEVG4tO4qh4YzTUaqKSB39v1Oyg1SmXFZNWCWnt+Qsqov+8OHs6YrcbqDJ/0tFAf3ZcSFMmagJPfn4SAxeOg== + version "2.3.1" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-2.3.1.tgz#ebd0abc2a71d1e5803cbbd0b0584a62a681c9a27" + integrity sha512-iADsVGbhm4rbvFwcauKwD8u5AbzoE+8d8iQpagGHkPDpcNVzFP/FHv48jvdg9M52kf4h2XGdrQviT02bdJFTKw== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" @@ -40,7 +40,7 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -54,20 +54,20 @@ integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" - integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" + integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.7" - "@babel/parser" "^7.23.6" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" + "@babel/helpers" "^7.23.9" + "@babel/parser" "^7.23.9" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -167,14 +167,14 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.23.7": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" - integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== +"@babel/helpers@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" + integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" "@babel/highlight@^7.23.4": version "7.23.4" @@ -185,10 +185,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" - integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" + integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -289,25 +289,25 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/runtime@^7.21.0": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.8.tgz#8ee6fe1ac47add7122902f257b8ddf55c898f650" - integrity sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw== + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" + integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" -"@babel/traverse@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" - integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== +"@babel/traverse@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" + integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== dependencies: "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" @@ -315,15 +315,15 @@ "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.6" - "@babel/types" "^7.23.6" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" - integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" + integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -2238,9 +2238,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*": - version "20.11.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.6.tgz#6adf4241460e28be53836529c033a41985f85b6e" - integrity sha512-+EOokTnksGVgip2PbYbr3xnR7kZigh4LbybAfBAw5BpnQ+FqBYUsvCEjYd70IXKlbohQ64mzEYmMtlWUY8q//Q== + version "20.11.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.7.tgz#cb49aedd758c978c30806d0c38b520ed2a3df6e0" + integrity sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A== dependencies: undici-types "~5.26.4" @@ -2781,9 +2781,9 @@ available-typed-arrays@^1.0.5: integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== axios@^1.0.0, axios@^1.3.6: - version "1.6.6" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.6.tgz#878db45401d91fe9e53aed8ac962ed93bde8dd1c" - integrity sha512-XZLZDFfXKM9U/Y/B4nNynfCRUqNyVZ4sBC/n9GDRCkq9vd2mIvKjKKsbIh1WPmHmNbg6ND7cTBY3Y2+u1G3/2Q== + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== dependencies: follow-redirects "^1.15.4" form-data "^4.0.0" @@ -3892,9 +3892,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.601: - version "1.4.645" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.645.tgz#117f964252eb2f0ff00fc7360cb3080e2cf66e3c" - integrity sha512-EeS1oQDCmnYsRDRy2zTeC336a/4LZ6WKqvSaM1jLocEk5ZuyszkQtCpsqvuvaIXGOUjwtvF6LTcS8WueibXvSw== + version "1.4.647" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.647.tgz#3c8d4815e5ed2fbdd37f4ab7333cd9f8fc56d53a" + integrity sha512-Z/fTNGwc45WrYQhPaEcz5tAJuZZ8G7S/DBnhS6Kgp4BxnS40Z/HqlJ0hHg3Z79IGVzuVartIlTcjw/cQbPLgOw== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -6651,9 +6651,9 @@ logform@^2.3.2, logform@^2.4.0: triple-beam "^1.3.0" lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": - version "10.1.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" - integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== lru-cache@^5.1.1: version "5.1.1" From c5aa4f679923d72d3147d494de11184961e85f59 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Fri, 26 Jan 2024 14:31:20 +0200 Subject: [PATCH 1070/1247] Except sessionStorageData folder from gitignore but not files (#389) Co-authored-by: GabiDev --- .gitignore | 4 +++- packages/modules/tests/utils/sessionStorageData/.gitkeep | 0 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 packages/modules/tests/utils/sessionStorageData/.gitkeep diff --git a/.gitignore b/.gitignore index d04e1144c..cc1d5d78c 100644 --- a/.gitignore +++ b/.gitignore @@ -64,8 +64,10 @@ packages/particle-auth/package-lock.json packages/transak/package-lock.json package-lock.json -#session storage files +#ignore sessionStorageData files packages/modules/tests/utils/sessionStorageData/* +#except sessionStorageData folder +!packages/modules/tests/utils/sessionStorageData/.gitkeep # Typechain typechain diff --git a/packages/modules/tests/utils/sessionStorageData/.gitkeep b/packages/modules/tests/utils/sessionStorageData/.gitkeep new file mode 100644 index 000000000..e69de29bb From efc811bce40ddb6a4acd6939a574e44732e01337 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 30 Jan 2024 16:31:04 +0400 Subject: [PATCH 1071/1247] fixes in v4 for front end frameworks (#392) * fixes in v4 for front end frameworks * revert build scripts --- packages/bundler/src/Bundler.ts | 2 +- yarn.lock | 59 +++++++++++++++++---------------- 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 3b92965a7..98bb096ef 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -27,7 +27,7 @@ import { DEFAULT_ENTRYPOINT_ADDRESS, } from "./utils/Constants"; import { sendRequest, HttpMethod } from "@biconomy/common"; -import { extractChainIdFromBundlerUrl } from "utils/Utils"; +import { extractChainIdFromBundlerUrl } from "./utils/Utils"; /** * This class implements IBundler interface. diff --git a/yarn.lock b/yarn.lock index c26ff64a8..d211d65b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1848,9 +1848,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.10" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.10.tgz#a7c7c8c01efd40c14b6905edf4d70300c8033862" - integrity sha512-6bsgV6z2Ens10Kn96xDhuaut0eWlYcR5Tb1yclyWt5eiRQeWh3oBB/ZJAx66po0ybnJgCeTVoe6tFy8wjClPVw== + version "1.3.12" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.12.tgz#4e109c646a00e02de0a3701ea899e4c805b010e3" + integrity sha512-bYD9R+YjKkgubvLvDBrAavIHqK3AvleHHz5X5Y36EpuyeTgb/uqUc/MSkM7s4KGD26voOui5swrshLGRLrfqvw== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -2238,9 +2238,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*": - version "20.11.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.7.tgz#cb49aedd758c978c30806d0c38b520ed2a3df6e0" - integrity sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A== + version "20.11.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.10.tgz#6c3de8974d65c362f82ee29db6b5adf4205462f9" + integrity sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg== dependencies: undici-types "~5.26.4" @@ -2455,7 +2455,7 @@ abstract-level@1.0.3: module-error "^1.0.1" queue-microtask "^1.2.3" -abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== @@ -2975,12 +2975,12 @@ browserify-aes@^1.2.0: safe-buffer "^5.0.1" browserslist@^4.22.2: - version "4.22.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" - integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== + version "4.22.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" + integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== dependencies: - caniuse-lite "^1.0.30001565" - electron-to-chromium "^1.4.601" + caniuse-lite "^1.0.30001580" + electron-to-chromium "^1.4.648" node-releases "^2.0.14" update-browserslist-db "^1.0.13" @@ -3185,10 +3185,10 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001565: - version "1.0.30001580" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001580.tgz#e3c76bc6fe020d9007647044278954ff8cd17d1e" - integrity sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA== +caniuse-lite@^1.0.30001580: + version "1.0.30001581" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz#0dfd4db9e94edbdca67d57348ebc070dece279f4" + integrity sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ== case@^1.6.3: version "1.6.3" @@ -3891,10 +3891,10 @@ ejs@^3.1.7: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.601: - version "1.4.647" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.647.tgz#3c8d4815e5ed2fbdd37f4ab7333cd9f8fc56d53a" - integrity sha512-Z/fTNGwc45WrYQhPaEcz5tAJuZZ8G7S/DBnhS6Kgp4BxnS40Z/HqlJ0hHg3Z79IGVzuVartIlTcjw/cQbPLgOw== +electron-to-chromium@^1.4.648: + version "1.4.648" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.648.tgz#c7b46c9010752c37bb4322739d6d2dd82354fbe4" + integrity sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -4535,9 +4535,9 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" - integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + version "1.17.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.0.tgz#ca5e1a90b5e68f97fc8b61330d5819b82f5fab03" + integrity sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w== dependencies: reusify "^1.0.4" @@ -6502,10 +6502,11 @@ level-transcoder@^1.0.1: module-error "^1.0.1" level@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" - integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== + version "8.0.1" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" + integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== dependencies: + abstract-level "^1.0.4" browser-level "^1.0.1" classic-level "^1.2.0" @@ -7194,9 +7195,9 @@ neo-async@^2.6.2: integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nock@^13.2.9: - version "13.5.0" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.0.tgz#82cd33b0dba6095d3f5a28d0ff2edac970fa05ec" - integrity sha512-9hc1eCS2HtOz+sE9W7JQw/tXJktg0zoPSu48s/pYe73e25JW9ywiowbqnUSd7iZPeVawLcVpPZeZS312fwSY+g== + version "13.5.1" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.1.tgz#4e40f9877ad0d43b7cdb474261c190f3715dd806" + integrity sha512-+s7b73fzj5KnxbKH4Oaqz07tQ8degcMilU4rrmnKvI//b0JMBU4wEXFQ8zqr+3+L4eWSfU3H/UoIVGUV0tue1Q== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" From 25d2bee339afd9d8c143fe6dad1898e28034be17 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Tue, 30 Jan 2024 17:29:40 +0200 Subject: [PATCH 1072/1247] Added simulationType flag (#390) * Added simulationType flag * Change params for sendTransaction * Modified sendTransaction params for simulationType + moduleInfo params --------- Co-authored-by: GabiDev --- .../account/src/BiconomySmartAccountV2.ts | 12 +- packages/account/src/utils/Types.ts | 12 +- packages/account/tests/account.e2e.spec.ts | 37 ++++--- packages/account/tests/account.spec.ts | 18 +-- .../tests/sessionValidationModule.e2e.spec.ts | 11 +- yarn.lock | 104 +++++++++--------- 6 files changed, 99 insertions(+), 95 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 607c79056..1a6f193f5 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -50,6 +50,7 @@ import { QueryParamsForAddressResolver, BiconomySmartAccountV2ConfigConstructorProps, PaymasterUserOperationDto, + SimulationType, } from "./utils/Types"; import { ADDRESS_RESOLVER_ADDRESS, @@ -670,17 +671,18 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { delete userOp.signature; const userOperation = await this.signUserOp(userOp, params); - const bundlerResponse = await this.sendSignedUserOp(userOperation); + const bundlerResponse = await this.sendSignedUserOp(userOperation, params?.simulationType); return bundlerResponse; } /** * - * @param userOp + * @param userOp - The signed user operation to send + * @param simulationType - The type of simulation to perform ("validation" | "validation_and_execution") * @description This function call will take 'signedUserOp' as input and send it to the bundler * @returns */ - async sendSignedUserOp(userOp: UserOperationStruct): Promise { + async sendSignedUserOp(userOp: UserOperationStruct, simulationType?: SimulationType): Promise { const requiredFields: UserOperationKey[] = [ "sender", "nonce", @@ -697,7 +699,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.validateUserOp(userOp, requiredFields); if (!this.bundler) throw new Error("Bundler is not provided"); Logger.warn("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp); + const bundlerResponse = await this.bundler.sendUserOp(userOp, simulationType); return bundlerResponse; } @@ -837,7 +839,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { */ async sendTransaction(manyOrOneTransactions: Transaction | Transaction[], buildUseropDto?: BuildUserOpOptions): Promise { const userOp = await this.buildUserOp(Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions : [manyOrOneTransactions], buildUseropDto); - return this.sendUserOp(userOp); + return this.sendUserOp(userOp, { simulationType: buildUseropDto?.simulationType, ...buildUseropDto?.params }); } /** diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 0ace19a00..578636bd2 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -142,6 +142,7 @@ export type BuildUserOpOptions = { nonceOptions?: NonceOptions; forceEncodeForBatch?: boolean; paymasterServiceData?: PaymasterUserOperationDto; + simulationType?: SimulationType; }; export type NonceOptions = { @@ -149,17 +150,6 @@ export type NonceOptions = { nonceOverride?: number; }; -// Used in AccountV1 -export type SendUserOpDto = { - signer?: WalletClientSigner; - simulationType?: SimulationType; -}; - -// Generic options in AccountV2 -export type SendUserOpOptions = { - simulationType?: SimulationType; -}; - export type SimulationType = "validation" | "validation_and_execution"; export type Overrides = { diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 5c20280c9..23b6a2e4d 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -26,11 +26,16 @@ describe("Account Tests", () => { }); const balance = (await checkBalance(publicClient, recipient)) as bigint; - const { wait } = await smartWallet.sendTransaction({ - to: recipient, - value: 1, - data: "0x", - }); + const { wait } = await smartWallet.sendTransaction( + { + to: recipient, + value: 1, + data: "0x", + }, + { + simulationType: "validation_and_execution", + }, + ); const result = await wait(); const newBalance = (await checkBalance(publicClient, recipient)) as bigint; @@ -87,7 +92,10 @@ describe("Account Tests", () => { const maticBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress()); - const response = await smartWallet.sendTransaction(transaction, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); + const response = await smartWallet.sendTransaction(transaction, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + simulationType: "validation", + }); const userOpReceipt = await response.wait(3); expect(userOpReceipt.userOpHash).toBeTruthy(); @@ -231,7 +239,6 @@ describe("Account Tests", () => { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, biconomyPaymasterApiKey, - publicClient, } = mumbai; const smartWallet = await createSmartAccountClient({ @@ -258,14 +265,14 @@ describe("Account Tests", () => { }, }); - expect( - async () => - await smartWallet.sendTransaction(transaction, { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - feeQuote: feeQuotesResponse.feeQuotes?.[0], - }, - }), + expect(async () => + smartWallet.sendTransaction(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + feeQuote: feeQuotesResponse.feeQuotes?.[0], + }, + simulationType: "validation", + }), ).rejects.toThrow("spender and maxApproval are required for ERC20 mode"); }, 60000); diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 42c68bf34..4d74c1450 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -209,12 +209,13 @@ describe("Account Tests", () => { }); expect( - async () => - await createSmartAccountClient({ + await expect( + createSmartAccountClient({ signer: viemWalletClientNoChainId, bundlerUrl, }), - ).rejects.toThrow("Cannot consume a viem wallet without a chainId"); + ).rejects.toThrow("Cannot consume a viem wallet without a chainId"), + ); }); it("should fail to create a smartWalletClient from a walletClient without an account", async () => { @@ -224,12 +225,11 @@ describe("Account Tests", () => { transport: http(localhost.rpcUrls.public.http[0]), }); - expect( - async () => - await createSmartAccountClient({ - signer: viemWalletNoAccount, - bundlerUrl, - }), + expect(async () => + createSmartAccountClient({ + signer: viemWalletNoAccount, + bundlerUrl, + }), ).rejects.toThrow("Cannot consume a viem wallet without an account"); }); }); diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index 073266edc..f291b23b4 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -132,9 +132,14 @@ describe("Account Tests", () => { expect(transferUserOp.paymasterAndData).not.toBeNull(); expect(transferUserOp.paymasterAndData).not.toBe("0x"); - const userOpResponse2 = await smartWallet.sendUserOp(transferUserOp, { - sessionSigner: sessionSigner, - sessionValidationModule: erc20ModuleAddr, + const userOpResponse2 = await smartWallet.sendTransaction(transferTx, { + params: { + sessionSigner: sessionSigner, + sessionValidationModule: erc20ModuleAddr.toLowerCase() as Hex, + }, + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + }, }); expect(userOpResponse2.userOpHash).toBeTruthy(); diff --git a/yarn.lock b/yarn.lock index d211d65b1..fdb4481c1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2309,15 +2309,15 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^6.7.0": - version "6.19.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.1.tgz#bb0676af940bc23bf299ca58dbdc6589c2548c2e" - integrity sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg== + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz#9cf31546d2d5e884602626d89b0e0d2168ac25ed" + integrity sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.19.1" - "@typescript-eslint/type-utils" "6.19.1" - "@typescript-eslint/utils" "6.19.1" - "@typescript-eslint/visitor-keys" "6.19.1" + "@typescript-eslint/scope-manager" "6.20.0" + "@typescript-eslint/type-utils" "6.20.0" + "@typescript-eslint/utils" "6.20.0" + "@typescript-eslint/visitor-keys" "6.20.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -2326,46 +2326,46 @@ ts-api-utils "^1.0.1" "@typescript-eslint/parser@^6.6.0": - version "6.19.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.19.1.tgz#68a87bb21afaf0b1689e9cdce0e6e75bc91ada78" - integrity sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ== - dependencies: - "@typescript-eslint/scope-manager" "6.19.1" - "@typescript-eslint/types" "6.19.1" - "@typescript-eslint/typescript-estree" "6.19.1" - "@typescript-eslint/visitor-keys" "6.19.1" + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.20.0.tgz#17e314177304bdf498527e3c4b112e41287b7416" + integrity sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w== + dependencies: + "@typescript-eslint/scope-manager" "6.20.0" + "@typescript-eslint/types" "6.20.0" + "@typescript-eslint/typescript-estree" "6.20.0" + "@typescript-eslint/visitor-keys" "6.20.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.19.1": - version "6.19.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz#2f527ee30703a6169a52b31d42a1103d80acd51b" - integrity sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w== +"@typescript-eslint/scope-manager@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz#8a926e60f6c47feb5bab878246dc2ae465730151" + integrity sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA== dependencies: - "@typescript-eslint/types" "6.19.1" - "@typescript-eslint/visitor-keys" "6.19.1" + "@typescript-eslint/types" "6.20.0" + "@typescript-eslint/visitor-keys" "6.20.0" -"@typescript-eslint/type-utils@6.19.1": - version "6.19.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.19.1.tgz#6a130e3afe605a4898e043fa9f72e96309b54935" - integrity sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg== +"@typescript-eslint/type-utils@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz#d395475cd0f3610dd80c7d8716fa0db767da3831" + integrity sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g== dependencies: - "@typescript-eslint/typescript-estree" "6.19.1" - "@typescript-eslint/utils" "6.19.1" + "@typescript-eslint/typescript-estree" "6.20.0" + "@typescript-eslint/utils" "6.20.0" debug "^4.3.4" ts-api-utils "^1.0.1" -"@typescript-eslint/types@6.19.1": - version "6.19.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.19.1.tgz#2d4c9d492a63ede15e7ba7d129bdf7714b77f771" - integrity sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg== +"@typescript-eslint/types@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.20.0.tgz#5ccd74c29011ae7714ae6973e4ec0c634708b448" + integrity sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ== -"@typescript-eslint/typescript-estree@6.19.1": - version "6.19.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz#796d88d88882f12e85bb33d6d82d39e1aea54ed1" - integrity sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA== +"@typescript-eslint/typescript-estree@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz#5b2d0975949e6bdd8d45ee1471461ef5fadc5542" + integrity sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g== dependencies: - "@typescript-eslint/types" "6.19.1" - "@typescript-eslint/visitor-keys" "6.19.1" + "@typescript-eslint/types" "6.20.0" + "@typescript-eslint/visitor-keys" "6.20.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -2373,25 +2373,25 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.19.1": - version "6.19.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.19.1.tgz#df93497f9cfddde2bcc2a591da80536e68acd151" - integrity sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w== +"@typescript-eslint/utils@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.20.0.tgz#0e52afcfaa51af5656490ba4b7437cc3aa28633d" + integrity sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.19.1" - "@typescript-eslint/types" "6.19.1" - "@typescript-eslint/typescript-estree" "6.19.1" + "@typescript-eslint/scope-manager" "6.20.0" + "@typescript-eslint/types" "6.20.0" + "@typescript-eslint/typescript-estree" "6.20.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@6.19.1": - version "6.19.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz#2164073ed4fc34a5ff3b5e25bb5a442100454c4c" - integrity sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ== +"@typescript-eslint/visitor-keys@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz#f7ada27f2803de89df0edd9fd7be22c05ce6a498" + integrity sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw== dependencies: - "@typescript-eslint/types" "6.19.1" + "@typescript-eslint/types" "6.20.0" eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.2.0": @@ -3892,9 +3892,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.648: - version "1.4.648" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.648.tgz#c7b46c9010752c37bb4322739d6d2dd82354fbe4" - integrity sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg== + version "1.4.650" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.650.tgz#b38ef9de16991b9f7b924246770576ab91ab3d64" + integrity sha512-sYSQhJCJa4aGA1wYol5cMQgekDBlbVfTRavlGZVr3WZpDdOPcp6a6xUnFfrt8TqZhsBYYbDxJZCjGfHuGupCRQ== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" From d6205c4d76ab846ecdc10843c65e0277f3ceab00 Mon Sep 17 00:00:00 2001 From: joepegler Date: Tue, 30 Jan 2024 18:48:27 +0000 Subject: [PATCH 1073/1247] Fix(SMA-574): ESM builds (#393) * es build fixes Resolved SMA-574 * Include both builds * Default build with tsc * minify_tsc_build --- .eslintrc.js | 2 +- jest.config.ts | 10 ++-- package.json | 6 +-- packages/account/.esbuild.js | 19 ++++---- packages/account/package.json | 47 ++++++++++++------- .../account/src/BiconomySmartAccountV2.ts | 43 ++++------------- packages/account/src/index.ts | 31 +++++++----- packages/account/src/utils/Types.ts | 9 +++- packages/account/tsconfig.build.json | 32 +++++++++++++ packages/account/tsconfig.json | 4 +- packages/bundler/.esbuild.js | 19 ++++---- packages/bundler/package.json | 37 ++++++++++----- packages/bundler/src/Bundler.ts | 10 ++-- packages/bundler/src/index.ts | 8 ++-- packages/bundler/tsconfig.build.json | 32 +++++++++++++ packages/bundler/tsconfig.json | 4 +- packages/common/.esbuild.js | 19 ++++---- packages/common/package.json | 36 ++++++++++---- packages/common/src/index.ts | 12 ++--- packages/common/src/utils/Constants.ts | 2 +- .../common/src/utils/Helpers/convertSigner.ts | 4 +- packages/common/src/utils/Helpers/index.ts | 2 +- packages/common/src/utils/HttpRequests.ts | 2 +- packages/common/tsconfig.build.json | 32 +++++++++++++ packages/common/tsconfig.json | 8 +++- packages/modules/.esbuild.js | 19 ++++---- packages/modules/package.json | 37 ++++++++++----- packages/modules/src/BaseValidationModule.ts | 6 +-- .../modules/src/BatchedSessionRouterModule.ts | 10 ++-- .../src/ECDSAOwnershipValidationModule.ts | 6 +-- .../modules/src/MultichainValidationModule.ts | 8 ++-- .../modules/src/SessionKeyManagerModule.ts | 12 ++--- packages/modules/src/index.ts | 22 ++++----- .../modules/src/interfaces/ISessionStorage.ts | 2 +- .../session-storage/SessionLocalStorage.ts | 2 +- .../ERC20SessionValidationModule.ts | 2 +- packages/modules/src/utils/Constants.ts | 2 +- packages/modules/src/utils/Types.ts | 2 +- .../tests/sessionValidationModule.e2e.spec.ts | 2 +- packages/modules/tests/utils/customSession.ts | 2 +- packages/modules/tsconfig.build.json | 32 +++++++++++++ packages/modules/tsconfig.json | 22 +++++---- packages/particle-auth/.esbuild.js | 19 ++++---- packages/particle-auth/package.json | 31 ++++++++---- packages/particle-auth/tsconfig.build.json | 32 +++++++++++++ packages/particle-auth/tsconfig.json | 3 +- packages/paymaster/.esbuild.js | 19 ++++---- packages/paymaster/package.json | 37 ++++++++++----- packages/paymaster/src/BiconomyPaymaster.ts | 8 ++-- packages/paymaster/src/index.ts | 8 ++-- .../src/interfaces/IHybridPaymaster.ts | 4 +- packages/paymaster/tsconfig.build.json | 32 +++++++++++++ packages/paymaster/tsconfig.json | 3 +- packages/transak/.esbuild.js | 19 ++++---- packages/transak/package.json | 31 ++++++++---- packages/transak/src/index.ts | 2 +- packages/transak/tsconfig.build.json | 32 +++++++++++++ packages/transak/tsconfig.json | 5 +- rebuild.sh | 9 ++++ tsconfig.json | 4 +- yarn.lock | 18 ++----- 61 files changed, 627 insertions(+), 307 deletions(-) create mode 100644 packages/account/tsconfig.build.json create mode 100644 packages/bundler/tsconfig.build.json create mode 100644 packages/common/tsconfig.build.json create mode 100644 packages/modules/tsconfig.build.json create mode 100644 packages/particle-auth/tsconfig.build.json create mode 100644 packages/paymaster/tsconfig.build.json create mode 100644 packages/transak/tsconfig.build.json diff --git a/.eslintrc.js b/.eslintrc.js index c8c285b0a..eb97a48dc 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -23,7 +23,7 @@ module.exports = { "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }], "security/detect-object-injection": "warn", "security/detect-unsafe-regex": "error", - "import/extensions": "off", + "import/extensions": "error", // Now we need to specify extensions for imports for esm builds "security/detect-object-injection": "off", // turning off Injection Sink rule "@typescript-eslint/no-throw-literal": "off", // temp deactivated needs to be removed once fixed "@typescript-eslint/ban-ts-ignore": "off", diff --git a/jest.config.ts b/jest.config.ts index 93489a795..7cc8b4123 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -78,7 +78,11 @@ const config: Config = { moduleFileExtensions: ["js", "mjs", "cjs", "jsx", "ts", "tsx", "json", "node"], // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - // moduleNameMapper: {}, + moduleNameMapper: { + '^(?!bn\.js$|hash\.js$)(.+)\\.js$': '$1' + }, + + extensionsToTreatAsEsm: ['.ts'], // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader // modulePathIgnorePatterns: [], @@ -159,7 +163,7 @@ const config: Config = { // A map from regular expressions to paths to transformers transform: { - "^.+\\.tsx?$": "ts-jest", + "^.+\\.tsx?$": ["ts-jest", { useESM: true }], }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation @@ -181,7 +185,7 @@ const config: Config = { // watchman: true, globals: { - testDataPerChain: [] + testDataPerChain: [], } }; diff --git a/package.json b/package.json index c28cc9191..0939192fb 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,10 @@ "author": "Biconomy (https://biconomy.io)", "private": true, "scripts": { - "dev": "yarn rebuild && yarn install && yarn build && yarn link:all", + "dev": "yarn rebuild && yarn install && lerna run build && yarn link:all", "rebuild": "./rebuild.sh", "link:all": "./linkAll.sh", - "build": "lerna run build", + "build": "yarn rebuild && yarn install && lerna run build", "clean": "lerna clean && lerna run unbuild", "format": "lerna run format --npm-client=yarn", "prettier": "npx prettier --write .", @@ -57,7 +57,7 @@ }, "dependencies": { "node-gyp": "^9.4.0", - "typescript": "^5.2.2" + "typescript": "^5.3.3" }, "devDependencies": { "@types/debug": "^4.1.9", diff --git a/packages/account/.esbuild.js b/packages/account/.esbuild.js index 124f56671..ca355e346 100644 --- a/packages/account/.esbuild.js +++ b/packages/account/.esbuild.js @@ -7,26 +7,25 @@ const COMMON_SETTINGS = { entryPoints: ["src/index.ts"], minify: true, bundle: true, - external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ], + plugins: [esbuildPluginTsc({ force: true })], }; const ESM_SETTINGS = { ...COMMON_SETTINGS, + sourcemap: true, outfile: "dist/esm/index.js", - platform: "neutral", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], }; const buildForESM = async () => await esbuild.build(ESM_SETTINGS); const CJS_SETTINGS = { ...COMMON_SETTINGS, format: "cjs", - outfile: "dist/src/index.js", - sourcemap: true, + sourcemap: false, + outfile: "dist/cjs/index.js", platform: "node", }; @@ -38,7 +37,7 @@ const watchForCJS = async () => { }; const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); (async () => { const buildType = process.argv.slice(2)[0]; diff --git a/packages/account/package.json b/packages/account/package.json index 8280b1013..427caeafd 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,11 +1,19 @@ { "name": "@biconomy/account", - "version": "3.1.2", + "version": "3.1.3", "description": "This package provides apis for ERC-4337 based smart account implementations", - "main": "./dist/src/index.js", + "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", - "types": "./dist/src/index.d.ts", - "typings": "./dist/src/index.d.ts", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "default": "./dist/cjs/index.js", + "types": "./dist/types/index.d.ts" + }, + "./package.json": "./package.json" + }, "keywords": [ "Ethereum", "Smart Account", @@ -19,11 +27,15 @@ "docs": "typedoc", "unbuild": "rimraf dist *.tsbuildinfo", "build:watch": "node .esbuild.js CJS --watch", - "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", - "build:cjs": "node .esbuild.js CJS", - "build:esm": "node .esbuild.js ESM", - "build:typ": "tsc -noEmit && node .esbuild.js TYP", - "build:tsc": "rimraf dist && tsc", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "test:concurrently": "concurrently -k --success first 'yarn start:ganache' 'yarn test'", "test:cov": "jest --coverage", "test": "jest tests/**/*.spec.ts --runInBand", @@ -43,20 +55,21 @@ "access": "public" }, "devDependencies": { + "@types/node": "^20.11.10", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "gh-pages": "^6.1.1", "nock": "^13.2.9", "npm-dts": "^1.3.12", - "typedoc": "^0.25.7" + "typedoc": "^0.25.7", + "lru-cache": "^10.0.1" }, "dependencies": { - "@alchemy/aa-core": "^2.0.0", - "@biconomy/bundler": "^3.1.2", - "@biconomy/modules": "^3.1.2", - "@biconomy/paymaster": "^3.1.2", - "@biconomy/common": "^3.1.2", - "lru-cache": "^10.0.1", - "viem": "^1.20.3" + "@alchemy/aa-core": "^2.3.1", + "@biconomy/bundler": "^3.1.3", + "@biconomy/common": "^3.1.3", + "@biconomy/modules": "^3.1.3", + "@biconomy/paymaster": "^3.1.3", + "viem": "^1.21.4" } } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 1a6f193f5..22005fba7 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -26,8 +26,8 @@ import { BatchUserOperationCallData, SmartAccountSigner, } from "@alchemy/aa-core"; -import { isNullOrUndefined, packUserOp } from "./utils/Utils"; -import { BaseValidationModule, ModuleInfo, SendUserOpParams, ECDSAOwnershipValidationModule } from "@biconomy/modules"; +import { isNullOrUndefined, packUserOp } from "./utils/Utils.js"; +import { BaseValidationModule, ModuleInfo, SendUserOpParams, createECDSAOwnershipValidationModule } from "@biconomy/modules"; import { IHybridPaymaster, IPaymaster, @@ -38,20 +38,20 @@ import { IBundler, UserOpResponse, extractChainIdFromBundlerUrl, -} from "../src/index"; + convertSigner, +} from "./index.js"; import { BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, CounterFactualAddressParam, BuildUserOpOptions, - Overrides, NonceOptions, Transaction, QueryParamsForAddressResolver, BiconomySmartAccountV2ConfigConstructorProps, PaymasterUserOperationDto, SimulationType, -} from "./utils/Types"; +} from "./utils/Types.js"; import { ADDRESS_RESOLVER_ADDRESS, BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, @@ -60,12 +60,11 @@ import { PROXY_CREATION_CODE, ADDRESS_ZERO, DEFAULT_ENTRYPOINT_ADDRESS, -} from "./utils/Constants"; -import { BiconomyFactoryAbi } from "./abi/Factory"; -import { BiconomyAccountAbi } from "./abi/SmartAccount"; -import { AccountResolverAbi } from "./abi/AccountResolver"; +} from "./utils/Constants.js"; +import { BiconomyFactoryAbi } from "./abi/Factory.js"; +import { BiconomyAccountAbi } from "./abi/SmartAccount.js"; +import { AccountResolverAbi } from "./abi/AccountResolver.js"; import { Logger } from "@biconomy/common"; -import { convertSigner } from "./"; import { FeeQuotesOrDataDto, FeeQuotesOrDataResponse } from "@biconomy/paymaster"; type UserOperationKey = keyof UserOperationStruct; @@ -213,7 +212,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Note: If no module is provided, we will use ECDSA_OWNERSHIP as default if (!defaultValidationModule) { - const newModule = await ECDSAOwnershipValidationModule.create({ signer: resolvedSmartAccountSigner! }); + const newModule = await createECDSAOwnershipValidationModule({ signer: resolvedSmartAccountSigner! }); defaultValidationModule = newModule; } const activeValidationModule = biconomySmartAccountConfig?.activeValidationModule ?? defaultValidationModule; @@ -778,28 +777,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return nonce; } - private async getGasFeeValues( - overrides: Overrides | undefined, - skipBundlerGasEstimation: boolean | undefined, - ): Promise<{ maxFeePerGas?: string; maxPriorityFeePerGas?: string }> { - const gasFeeValues = { - maxFeePerGas: overrides?.maxFeePerGas as string, - maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas as string, - }; - try { - if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (skipBundlerGasEstimation ?? true)) { - const gasFeeEstimation = await this.bundler.getGasFeeValues(); - gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; - gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; - } - return gasFeeValues; - } catch (error: any) { - // TODO: should throw error here? - Logger.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); - return gasFeeValues; - } - } - /** * Sends a transaction (builds and sends a user op in sequence) * diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index 5df5a4203..c1bd7363b 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -1,22 +1,29 @@ -import { BiconomySmartAccountV2 } from "./BiconomySmartAccountV2"; -import { BiconomySmartAccountV2Config } from "./utils/Types"; +import { BiconomySmartAccountV2 } from "./BiconomySmartAccountV2.js"; +import { type BiconomySmartAccountV2Config } from "./utils/Types.js"; -export * from "./utils/Types"; -export * from "./utils/Constants"; -export * from "./BiconomySmartAccountV2"; +export * from "./utils/Types.js"; +export * from "./utils/Constants.js"; +export * from "./BiconomySmartAccountV2.js"; -export { WalletClientSigner, LocalAccountSigner, SmartAccountSigner } from "@alchemy/aa-core"; +export { WalletClientSigner, LocalAccountSigner, type SmartAccountSigner } from "@alchemy/aa-core"; export { BiconomyPaymaster as Paymaster, - IPaymaster, + type IPaymaster, PaymasterMode, - IHybridPaymaster, - PaymasterFeeQuote, - SponsorUserOperationDto, - FeeQuotesOrDataResponse, + type IHybridPaymaster, + type PaymasterFeeQuote, + type SponsorUserOperationDto, + type FeeQuotesOrDataResponse, } from "@biconomy/paymaster"; export { EthersSigner, convertSigner } from "@biconomy/common"; -export { Bundler, IBundler, extractChainIdFromBundlerUrl, UserOpResponse } from "@biconomy/bundler"; +export { Bundler, type IBundler, extractChainIdFromBundlerUrl, type UserOpResponse } from "@biconomy/bundler"; +export { + createECDSAOwnershipValidationModule, + createERC20SessionValidationModule, + createBatchedSessionRouterModule, + createSessionKeyManagerModule, + createMultiChainValidationModule, +} from "@biconomy/modules"; export const createSmartAccountClient = BiconomySmartAccountV2.create; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 578636bd2..0395134f3 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -1,6 +1,13 @@ import { BigNumberish, SmartAccountSigner, UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; import { IBundler } from "@biconomy/bundler"; -import { FeeQuotesOrDataDto, IPaymaster, PaymasterFeeQuote, PaymasterMode, SmartAccountData, SponsorUserOperationDto } from "@biconomy/paymaster"; +import { + type FeeQuotesOrDataDto, + type IPaymaster, + type PaymasterFeeQuote, + PaymasterMode, + type SmartAccountData, + type SponsorUserOperationDto, +} from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Hex, WalletClient } from "viem"; import { SupportedSigner } from "@biconomy/common"; diff --git a/packages/account/tsconfig.build.json b/packages/account/tsconfig.build.json new file mode 100644 index 000000000..42d88a236 --- /dev/null +++ b/packages/account/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests", "tests/**/*"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/account/tsconfig.json b/packages/account/tsconfig.json index d4bee29bb..53677da37 100644 --- a/packages/account/tsconfig.json +++ b/packages/account/tsconfig.json @@ -5,7 +5,9 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"] }, "include": ["src", "src/**/*.json"], } diff --git a/packages/bundler/.esbuild.js b/packages/bundler/.esbuild.js index 124f56671..ca355e346 100644 --- a/packages/bundler/.esbuild.js +++ b/packages/bundler/.esbuild.js @@ -7,26 +7,25 @@ const COMMON_SETTINGS = { entryPoints: ["src/index.ts"], minify: true, bundle: true, - external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ], + plugins: [esbuildPluginTsc({ force: true })], }; const ESM_SETTINGS = { ...COMMON_SETTINGS, + sourcemap: true, outfile: "dist/esm/index.js", - platform: "neutral", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], }; const buildForESM = async () => await esbuild.build(ESM_SETTINGS); const CJS_SETTINGS = { ...COMMON_SETTINGS, format: "cjs", - outfile: "dist/src/index.js", - sourcemap: true, + sourcemap: false, + outfile: "dist/cjs/index.js", platform: "node", }; @@ -38,7 +37,7 @@ const watchForCJS = async () => { }; const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); (async () => { const buildType = process.argv.slice(2)[0]; diff --git a/packages/bundler/package.json b/packages/bundler/package.json index aac86046f..2058ff3a6 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,11 +1,19 @@ { "name": "@biconomy/bundler", - "version": "3.1.2", + "version": "3.1.3", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", - "main": "./dist/src/index.js", + "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", - "types": "./dist/src/index.d.ts", - "typings": "./dist/src/index.d.ts", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "default": "./dist/cjs/index.js", + "types": "./dist/types/index.d.ts" + }, + "./package.json": "./package.json" + }, "keywords": [ "Ethereum", "Bundler", @@ -18,11 +26,15 @@ "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", "build:watch": "node .esbuild.js CJS --watch", - "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", - "build:cjs": "node .esbuild.js CJS", - "build:esm": "node .esbuild.js ESM", - "build:typ": "tsc -noEmit && node .esbuild.js TYP", - "build:tsc": "rimraf dist && tsc", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "test:file": "jest --config=../../jest.config.js --runInBand", "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:run": "jest tests/**/*.spec.ts --runInBand", @@ -44,11 +56,12 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "^1.2.2", - "viem": "^1.20.3", - "@biconomy/common": "^3.1.2" + "@alchemy/aa-core": "^2.3.1", + "@biconomy/common": "^3.1.3", + "viem": "^1.21.4" }, "devDependencies": { + "@types/node": "^20.11.10", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12" diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 98bb096ef..93be7cadd 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -1,6 +1,6 @@ import { getChain, type UserOperationStruct } from "@alchemy/aa-core"; import { createPublicClient, http } from "viem"; -import { IBundler } from "./interfaces/IBundler"; +import { IBundler } from "./interfaces/IBundler.js"; import { GetUserOperationReceiptResponse, GetUserOpByHashResponse, @@ -17,17 +17,17 @@ import { GetUserOperationStatusResponse, SimulationType, BunderConfigWithChainId, -} from "./utils/Types"; -import { transformUserOP, getTimestampInSeconds } from "./utils/HelperFunction"; +} from "./utils/Types.js"; +import { transformUserOP, getTimestampInSeconds } from "./utils/HelperFunction.js"; import { UserOpReceiptIntervals, UserOpWaitForTxHashIntervals, UserOpWaitForTxHashMaxDurationIntervals, UserOpReceiptMaxDurationIntervals, DEFAULT_ENTRYPOINT_ADDRESS, -} from "./utils/Constants"; +} from "./utils/Constants.js"; +import { extractChainIdFromBundlerUrl } from "./utils/Utils.js"; import { sendRequest, HttpMethod } from "@biconomy/common"; -import { extractChainIdFromBundlerUrl } from "./utils/Utils"; /** * This class implements IBundler interface. diff --git a/packages/bundler/src/index.ts b/packages/bundler/src/index.ts index b7185747d..785c6050e 100644 --- a/packages/bundler/src/index.ts +++ b/packages/bundler/src/index.ts @@ -1,4 +1,4 @@ -export * from "./interfaces/IBundler"; -export * from "./Bundler"; -export * from "./utils/Types"; -export * from "./utils/Utils"; +export * from "./interfaces/IBundler.js"; +export * from "./Bundler.js"; +export * from "./utils/Types.js"; +export * from "./utils/Utils.js"; diff --git a/packages/bundler/tsconfig.build.json b/packages/bundler/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/bundler/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/bundler/tsconfig.json b/packages/bundler/tsconfig.json index 3dc5293ed..d9b305a9a 100644 --- a/packages/bundler/tsconfig.json +++ b/packages/bundler/tsconfig.json @@ -5,7 +5,9 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"] }, "include": ["src", "src/**/*.json"] } diff --git a/packages/common/.esbuild.js b/packages/common/.esbuild.js index 124f56671..ca355e346 100644 --- a/packages/common/.esbuild.js +++ b/packages/common/.esbuild.js @@ -7,26 +7,25 @@ const COMMON_SETTINGS = { entryPoints: ["src/index.ts"], minify: true, bundle: true, - external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ], + plugins: [esbuildPluginTsc({ force: true })], }; const ESM_SETTINGS = { ...COMMON_SETTINGS, + sourcemap: true, outfile: "dist/esm/index.js", - platform: "neutral", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], }; const buildForESM = async () => await esbuild.build(ESM_SETTINGS); const CJS_SETTINGS = { ...COMMON_SETTINGS, format: "cjs", - outfile: "dist/src/index.js", - sourcemap: true, + sourcemap: false, + outfile: "dist/cjs/index.js", platform: "node", }; @@ -38,7 +37,7 @@ const watchForCJS = async () => { }; const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); (async () => { const buildType = process.argv.slice(2)[0]; diff --git a/packages/common/package.json b/packages/common/package.json index 02db6f7e5..e6f3a8fdf 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "3.1.2", + "version": "3.1.3", "description": "common utils to be used for aa transactions", "keywords": [ "utils" @@ -8,7 +8,18 @@ "author": "livingrockrises ", "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", "license": "MIT", - "main": "dist/src/index.js", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "default": "./dist/cjs/index.js", + "types": "./dist/types/index.d.ts" + }, + "./package.json": "./package.json" + }, "files": [ "dist/*", "README.md" @@ -23,11 +34,15 @@ "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", "build:watch": "node .esbuild.js CJS --watch", - "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", - "build:cjs": "node .esbuild.js CJS", - "build:esm": "node .esbuild.js ESM", - "build:typ": "tsc -noEmit && node .esbuild.js TYP", - "build:tsc": "rimraf dist && tsc", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "test:file": "jest --config=../../jest.config.js --runInBand", "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:run": "jest tests/**/*.spec.ts --runInBand", @@ -39,11 +54,12 @@ "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" }, "dependencies": { - "@alchemy/aa-core": "^1.2.2", - "viem": "^1.20.3", - "@ethersproject/abstract-signer": "^5.7.0" + "@alchemy/aa-core": "^2.3.1", + "@ethersproject/abstract-signer": "^5.7.0", + "viem": "^1.21.4" }, "devDependencies": { + "@types/node": "^20.11.10", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12" diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 5b548d5a3..cca231168 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -1,6 +1,6 @@ -export * from "./utils/Helpers"; -export * from "./utils/Types"; -export * from "./utils/Constants"; -export * from "./utils/Logger"; -export * from "./utils/HttpRequests"; -export { EthersSigner } from "./utils/EthersSigner"; +export * from "./utils/Helpers/convertSigner.js"; +export * from "./utils/Types.js"; +export * from "./utils/Constants.js"; +export * from "./utils/Logger.js"; +export * from "./utils/HttpRequests.js"; +export { EthersSigner } from "./utils/EthersSigner.js"; diff --git a/packages/common/src/utils/Constants.ts b/packages/common/src/utils/Constants.ts index c21055d7f..4e3292cb5 100644 --- a/packages/common/src/utils/Constants.ts +++ b/packages/common/src/utils/Constants.ts @@ -1,4 +1,4 @@ -import { SupportedSignerName } from "./Types"; +import { SupportedSignerName } from "./Types.js"; export const UNIQUE_PROPERTIES_PER_SIGNER: Record = { alchemy: "signerType", diff --git a/packages/common/src/utils/Helpers/convertSigner.ts b/packages/common/src/utils/Helpers/convertSigner.ts index ae7371505..23e9691dd 100644 --- a/packages/common/src/utils/Helpers/convertSigner.ts +++ b/packages/common/src/utils/Helpers/convertSigner.ts @@ -1,8 +1,8 @@ -import { EthersSigner } from "../EthersSigner"; +import { EthersSigner } from "../EthersSigner.js"; import { SupportedSigner } from "../Types"; import { WalletClient } from "viem"; import { WalletClientSigner, SmartAccountSigner } from "@alchemy/aa-core"; -import { UNIQUE_PROPERTIES_PER_SIGNER } from "../Constants"; +import { UNIQUE_PROPERTIES_PER_SIGNER } from "../Constants.js"; import { Signer } from "@ethersproject/abstract-signer"; interface SmartAccountResult { diff --git a/packages/common/src/utils/Helpers/index.ts b/packages/common/src/utils/Helpers/index.ts index 5567b8185..235336dc3 100644 --- a/packages/common/src/utils/Helpers/index.ts +++ b/packages/common/src/utils/Helpers/index.ts @@ -1 +1 @@ -export * from "./convertSigner"; +export * from "./convertSigner.js"; diff --git a/packages/common/src/utils/HttpRequests.ts b/packages/common/src/utils/HttpRequests.ts index 8524d2726..bf13ce849 100644 --- a/packages/common/src/utils/HttpRequests.ts +++ b/packages/common/src/utils/HttpRequests.ts @@ -1,4 +1,4 @@ -import { Logger } from "./Logger"; +import { Logger } from "./Logger.js"; export enum HttpMethod { Get = "get", diff --git a/packages/common/tsconfig.build.json b/packages/common/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/common/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index 7584e7676..d9b305a9a 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -3,7 +3,11 @@ "compilerOptions": { "composite": true, "outDir": "dist", - "baseUrl": "src" + "baseUrl": "src", + "resolveJsonModule": true, + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"] }, - "include": ["./**/*.ts"] + "include": ["src", "src/**/*.json"] } diff --git a/packages/modules/.esbuild.js b/packages/modules/.esbuild.js index 124f56671..ca355e346 100644 --- a/packages/modules/.esbuild.js +++ b/packages/modules/.esbuild.js @@ -7,26 +7,25 @@ const COMMON_SETTINGS = { entryPoints: ["src/index.ts"], minify: true, bundle: true, - external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ], + plugins: [esbuildPluginTsc({ force: true })], }; const ESM_SETTINGS = { ...COMMON_SETTINGS, + sourcemap: true, outfile: "dist/esm/index.js", - platform: "neutral", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], }; const buildForESM = async () => await esbuild.build(ESM_SETTINGS); const CJS_SETTINGS = { ...COMMON_SETTINGS, format: "cjs", - outfile: "dist/src/index.js", - sourcemap: true, + sourcemap: false, + outfile: "dist/cjs/index.js", platform: "node", }; @@ -38,7 +37,7 @@ const watchForCJS = async () => { }; const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); (async () => { const buildType = process.argv.slice(2)[0]; diff --git a/packages/modules/package.json b/packages/modules/package.json index 5360f16f1..e18028668 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,11 +1,19 @@ { "name": "@biconomy/modules", - "version": "3.1.2", + "version": "3.1.3", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", - "main": "./dist/src/index.js", + "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", - "types": "./dist/src/index.d.ts", - "typings": "./dist/src/index.d.ts", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "default": "./dist/cjs/index.js", + "types": "./dist/types/index.d.ts" + }, + "./package.json": "./package.json" + }, "keywords": [ "Smart Account", "ERC-4337", @@ -18,11 +26,15 @@ "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", "build:watch": "node .esbuild.js CJS --watch", - "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", - "build:cjs": "node .esbuild.js CJS", - "build:esm": "node .esbuild.js ESM", - "build:typ": "tsc -noEmit && node .esbuild.js TYP", - "build:tsc": "rimraf dist && tsc", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "test:file": "TS_NODE_PROJECT=../../tsconfig.json mocha -r ts-node/register --timeout 30000", "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:cov": "jest --coverage", @@ -41,12 +53,13 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "^1.2.2", - "@biconomy/common": "^3.1.2", + "@alchemy/aa-core": "^2.3.1", + "@biconomy/common": "^3.1.3", "merkletreejs": "^0.3.9", - "viem": "^1.20.3" + "viem": "^1.21.4" }, "devDependencies": { + "@types/node": "^20.11.10", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12" diff --git a/packages/modules/src/BaseValidationModule.ts b/packages/modules/src/BaseValidationModule.ts index 8c98e5abf..525fe122d 100644 --- a/packages/modules/src/BaseValidationModule.ts +++ b/packages/modules/src/BaseValidationModule.ts @@ -1,8 +1,8 @@ import { Hex } from "viem"; import { SmartAccountSigner } from "@alchemy/aa-core"; -import { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types"; -import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; -import { IValidationModule } from "./interfaces/IValidationModule"; +import { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types.js"; +import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants.js"; +import { IValidationModule } from "./interfaces/IValidationModule.js"; export abstract class BaseValidationModule implements IValidationModule { entryPointAddress: Hex; diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index f998234f2..2083ed85f 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -1,12 +1,12 @@ -import { ModuleVersion, CreateSessionDataParams, BatchedSessionRouterModuleConfig, ModuleInfo, CreateSessionDataResponse } from "./utils/Types"; +import { ModuleVersion, CreateSessionDataParams, BatchedSessionRouterModuleConfig, ModuleInfo, CreateSessionDataResponse } from "./utils/Types.js"; import { BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE, DEFAULT_BATCHED_SESSION_ROUTER_MODULE, -} from "./utils/Constants"; -import { BaseValidationModule } from "./BaseValidationModule"; -import { SessionKeyManagerModule } from "./SessionKeyManagerModule"; -import { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; +} from "./utils/Constants.js"; +import { BaseValidationModule } from "./BaseValidationModule.js"; +import { SessionKeyManagerModule } from "./SessionKeyManagerModule.js"; +import { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage.js"; import { Hex, concat, encodeAbiParameters, keccak256, pad, parseAbiParameters, toBytes, toHex } from "viem"; import { SmartAccountSigner } from "@alchemy/aa-core"; diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index a80b5e8da..737a43d07 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -1,9 +1,9 @@ import { Hex, encodeFunctionData, getAddress, parseAbi, toBytes } from "viem"; import { SmartAccountSigner } from "@alchemy/aa-core"; -import { ECDSAOwnershipValidationModuleConfig, ECDSAOwnershipValidationModuleConfigConstructorProps, ModuleVersion } from "./utils/Types"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; -import { BaseValidationModule } from "./BaseValidationModule"; +import { ECDSAOwnershipValidationModuleConfig, ECDSAOwnershipValidationModuleConfigConstructorProps, ModuleVersion } from "./utils/Types.js"; +import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants.js"; import { convertSigner } from "@biconomy/common"; +import { BaseValidationModule } from "./BaseValidationModule.js"; // Could be renamed with suffix API export class ECDSAOwnershipValidationModule extends BaseValidationModule { diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index 957e27635..026976b5b 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -1,15 +1,15 @@ import { Hex, concat, encodeAbiParameters, encodeFunctionData, getAddress, keccak256, pad, parseAbi, parseAbiParameters, toBytes, toHex } from "viem"; import { UserOperationStruct, SmartAccountSigner } from "@alchemy/aa-core"; import MerkleTree from "merkletreejs"; -import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; +import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants.js"; import { ModuleVersion, MultiChainUserOpDto, MultiChainValidationModuleConfig, MultiChainValidationModuleConfigConstructorProps, -} from "./utils/Types"; -import { BaseValidationModule } from "./BaseValidationModule"; -import { getUserOpHash } from "./utils/Helper"; +} from "./utils/Types.js"; +import { BaseValidationModule } from "./BaseValidationModule.js"; +import { getUserOpHash } from "./utils/Helper.js"; import { convertSigner, Logger } from "@biconomy/common"; export class MultiChainValidationModule extends BaseValidationModule { diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index 99e2bda29..bf53243b8 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -8,12 +8,12 @@ import { ModuleInfo, CreateSessionDataResponse, StorageType, -} from "./utils/Types"; -import { SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "./utils/Constants"; -import { generateRandomHex } from "./utils/Uid"; -import { BaseValidationModule } from "./BaseValidationModule"; -import { SessionLocalStorage } from "./session-storage/SessionLocalStorage"; -import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; +} from "./utils/Types.js"; +import { SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "./utils/Constants.js"; +import { generateRandomHex } from "./utils/Uid.js"; +import { BaseValidationModule } from "./BaseValidationModule.js"; +import { SessionLocalStorage } from "./session-storage/SessionLocalStorage.js"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage.js"; export class SessionKeyManagerModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; diff --git a/packages/modules/src/index.ts b/packages/modules/src/index.ts index db68854f7..ca954778b 100644 --- a/packages/modules/src/index.ts +++ b/packages/modules/src/index.ts @@ -1,13 +1,13 @@ -export * from "./utils/Types"; -export * from "./utils/Constants"; -export * from "./interfaces/IValidationModule"; -export * from "./interfaces/ISessionValidationModule"; -export * from "./BaseValidationModule"; -export * from "./ECDSAOwnershipValidationModule"; -export * from "./MultichainValidationModule"; -export * from "./SessionKeyManagerModule"; -export * from "./BatchedSessionRouterModule"; -export * from "./session-validation-modules/ERC20SessionValidationModule"; +export * from "./utils/Types.js"; +export * from "./utils/Constants.js"; +export * from "./interfaces/IValidationModule.js"; +export * from "./interfaces/ISessionValidationModule.js"; +export * from "./BaseValidationModule.js"; +export * from "./ECDSAOwnershipValidationModule.js"; +export * from "./MultichainValidationModule.js"; +export * from "./SessionKeyManagerModule.js"; +export * from "./BatchedSessionRouterModule.js"; +export * from "./session-validation-modules/ERC20SessionValidationModule.js"; import { BatchedSessionRouterModule, @@ -15,7 +15,7 @@ import { MultiChainValidationModule, SessionKeyManagerModule, ERC20SessionValidationModule, -} from "./"; +} from "./index.js"; export const createBatchedSessionRouterModule = BatchedSessionRouterModule.create; export const createMultiChainValidationModule = MultiChainValidationModule.create; diff --git a/packages/modules/src/interfaces/ISessionStorage.ts b/packages/modules/src/interfaces/ISessionStorage.ts index 12f704ea2..da2f8e13e 100644 --- a/packages/modules/src/interfaces/ISessionStorage.ts +++ b/packages/modules/src/interfaces/ISessionStorage.ts @@ -1,6 +1,6 @@ import { Hex } from "viem"; import { SmartAccountSigner } from "@alchemy/aa-core"; -import { SignerData } from "utils/Types"; +import { SignerData } from "../utils/Types"; export type SessionStatus = "PENDING" | "ACTIVE" | "INACTIVE" | "EXPIRED"; diff --git a/packages/modules/src/session-storage/SessionLocalStorage.ts b/packages/modules/src/session-storage/SessionLocalStorage.ts index 14775fa96..28f3133a6 100644 --- a/packages/modules/src/session-storage/SessionLocalStorage.ts +++ b/packages/modules/src/session-storage/SessionLocalStorage.ts @@ -1,6 +1,6 @@ import { Hex, createWalletClient, http, toHex } from "viem"; import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; -import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage.js"; import { mainnet } from "viem/chains"; import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; import { SignerData } from "../utils/Types"; diff --git a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts index 17e14a23d..131746a38 100644 --- a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts +++ b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts @@ -1,4 +1,4 @@ -import { ISessionValidationModule } from "../interfaces/ISessionValidationModule"; +import { ISessionValidationModule } from "../interfaces/ISessionValidationModule.js"; import { ERC20SessionKeyData, SessionValidationModuleConfig } from "../utils/Types"; import { encodeAbiParameters, parseAbiParameters } from "viem"; diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts index cab7efbef..407e374d0 100644 --- a/packages/modules/src/utils/Constants.ts +++ b/packages/modules/src/utils/Constants.ts @@ -1,4 +1,4 @@ -import { ModuleVersion } from "./Types"; +import { ModuleVersion } from "./Types.js"; export const DEFAULT_MODULE_VERSION: ModuleVersion = "V1_0_0"; diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 099f4dc98..f7135a1d8 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,7 +1,7 @@ import { Chain, Hex } from "viem"; import { UserOperationStruct, SmartAccountSigner } from "@alchemy/aa-core"; import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; -import { ISessionStorage } from "../interfaces/ISessionStorage"; +import { ISessionStorage } from "../interfaces/ISessionStorage.js"; import { SupportedSigner } from "@biconomy/common"; export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index f291b23b4..656c32ec0 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -1,5 +1,5 @@ import { DEFAULT_SESSION_KEY_MANAGER_MODULE, SessionKeyManagerModule } from "@biconomy/modules"; -import { SessionFileStorage } from "@biconomy/modules/tests/utils/customSession"; +import { SessionFileStorage } from "./utils/customSession"; import { WalletClientSigner, createSmartAccountClient } from "../../account/src/index"; import { Hex, encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "viem"; import { TestData } from "../../../tests"; diff --git a/packages/modules/tests/utils/customSession.ts b/packages/modules/tests/utils/customSession.ts index 741eaf9c5..d7be68807 100644 --- a/packages/modules/tests/utils/customSession.ts +++ b/packages/modules/tests/utils/customSession.ts @@ -4,7 +4,7 @@ import { SignerData } from "@biconomy/modules/src"; import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; import { Hex, createWalletClient, http } from "viem"; import { polygonMumbai } from "viem/chains"; -import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "@biconomy/modules/src/interfaces/ISessionStorage"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "@biconomy/modules/src/interfaces/ISessionStorage.js"; import { Logger } from "@biconomy/common"; export class SessionFileStorage implements ISessionStorage { diff --git a/packages/modules/tsconfig.build.json b/packages/modules/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/modules/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/modules/tsconfig.json b/packages/modules/tsconfig.json index 0228bfe7a..adc19ded0 100644 --- a/packages/modules/tsconfig.json +++ b/packages/modules/tsconfig.json @@ -1,11 +1,13 @@ { - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true, - }, - "include": ["src", "src/**/*.json"] -} \ No newline at end of file + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src", + "resolveJsonModule": true, + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"], + }, + "include": ["src", "src/**/*.json"] +} diff --git a/packages/particle-auth/.esbuild.js b/packages/particle-auth/.esbuild.js index 124f56671..ca355e346 100644 --- a/packages/particle-auth/.esbuild.js +++ b/packages/particle-auth/.esbuild.js @@ -7,26 +7,25 @@ const COMMON_SETTINGS = { entryPoints: ["src/index.ts"], minify: true, bundle: true, - external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ], + plugins: [esbuildPluginTsc({ force: true })], }; const ESM_SETTINGS = { ...COMMON_SETTINGS, + sourcemap: true, outfile: "dist/esm/index.js", - platform: "neutral", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], }; const buildForESM = async () => await esbuild.build(ESM_SETTINGS); const CJS_SETTINGS = { ...COMMON_SETTINGS, format: "cjs", - outfile: "dist/src/index.js", - sourcemap: true, + sourcemap: false, + outfile: "dist/cjs/index.js", platform: "node", }; @@ -38,7 +37,7 @@ const watchForCJS = async () => { }; const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); (async () => { const buildType = process.argv.slice(2)[0]; diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 008073b5b..7b541b482 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -1,11 +1,19 @@ { "name": "@biconomy/particle-auth", - "version": "3.1.2", + "version": "3.1.3", "description": "Particle auth for Biconomy SDK", - "main": "./dist/src/index.js", + "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", - "types": "./dist/src/index.d.ts", - "typings": "./dist/src/index.d.ts", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "default": "./dist/cjs/index.js", + "types": "./dist/types/index.d.ts" + }, + "./package.json": "./package.json" + }, "keywords": [ "legos", "batching", @@ -28,11 +36,15 @@ "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", "build:watch": "node .esbuild.js CJS --watch", - "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", - "build:cjs": "node .esbuild.js CJS", - "build:esm": "node .esbuild.js ESM", - "build:typ": "tsc -noEmit && node .esbuild.js TYP", - "build:tsc": "rimraf dist && tsc", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, @@ -48,6 +60,7 @@ "@particle-network/provider": "^1.2.0" }, "devDependencies": { + "@types/node": "^20.11.10", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12" diff --git a/packages/particle-auth/tsconfig.build.json b/packages/particle-auth/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/particle-auth/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/particle-auth/tsconfig.json b/packages/particle-auth/tsconfig.json index 3dc5293ed..cda17a184 100644 --- a/packages/particle-auth/tsconfig.json +++ b/packages/particle-auth/tsconfig.json @@ -5,7 +5,8 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "lib": ["es2020"], }, "include": ["src", "src/**/*.json"] } diff --git a/packages/paymaster/.esbuild.js b/packages/paymaster/.esbuild.js index 124f56671..ca355e346 100644 --- a/packages/paymaster/.esbuild.js +++ b/packages/paymaster/.esbuild.js @@ -7,26 +7,25 @@ const COMMON_SETTINGS = { entryPoints: ["src/index.ts"], minify: true, bundle: true, - external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ], + plugins: [esbuildPluginTsc({ force: true })], }; const ESM_SETTINGS = { ...COMMON_SETTINGS, + sourcemap: true, outfile: "dist/esm/index.js", - platform: "neutral", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], }; const buildForESM = async () => await esbuild.build(ESM_SETTINGS); const CJS_SETTINGS = { ...COMMON_SETTINGS, format: "cjs", - outfile: "dist/src/index.js", - sourcemap: true, + sourcemap: false, + outfile: "dist/cjs/index.js", platform: "node", }; @@ -38,7 +37,7 @@ const watchForCJS = async () => { }; const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); (async () => { const buildType = process.argv.slice(2)[0]; diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index a6d4ecae1..d07e4c563 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,11 +1,19 @@ { "name": "@biconomy/paymaster", - "version": "3.1.2", + "version": "3.1.3", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", - "main": "./dist/src/index.js", + "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", - "types": "./dist/src/index.d.ts", - "typings": "./dist/src/index.d.ts", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "default": "./dist/cjs/index.js", + "types": "./dist/types/index.d.ts" + }, + "./package.json": "./package.json" + }, "keywords": [ "Ethereum", "Veriying Paymaster", @@ -18,11 +26,15 @@ "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", "build:watch": "node .esbuild.js CJS --watch", - "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", - "build:cjs": "node .esbuild.js CJS", - "build:esm": "node .esbuild.js ESM", - "build:typ": "tsc -noEmit && node .esbuild.js TYP", - "build:tsc": "rimraf dist && tsc", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json", "test": "jest tests/**/*.spec.ts --runInBand" @@ -41,11 +53,12 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "^1.2.2", - "viem": "^1.20.3", - "@biconomy/common": "^3.1.2" + "@alchemy/aa-core": "^2.3.1", + "@biconomy/common": "^3.1.3", + "viem": "^1.21.4" }, "devDependencies": { + "@types/node": "^20.11.10", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12" diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index fd57e2422..64ba5c99f 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -12,11 +12,11 @@ import { PaymasterAndDataResponse, Transaction, Hex, -} from "./utils/Types"; -import { IHybridPaymaster } from "./interfaces/IHybridPaymaster"; -import { MAX_UINT256, ERC20_ABI, ADDRESS_ZERO } from "./utils/Constants"; +} from "./utils/Types.js"; +import { IHybridPaymaster } from "./interfaces/IHybridPaymaster.js"; +import { MAX_UINT256, ERC20_ABI, ADDRESS_ZERO } from "./utils/Constants.js"; import { sendRequest, HttpMethod, Logger } from "@biconomy/common"; -import { getTimestampInSeconds } from "./utils/Helpers"; +import { getTimestampInSeconds } from "./utils/Helpers.js"; const defaultPaymasterConfig: PaymasterConfig = { paymasterUrl: "", diff --git a/packages/paymaster/src/index.ts b/packages/paymaster/src/index.ts index fc7dd0950..da98ace55 100644 --- a/packages/paymaster/src/index.ts +++ b/packages/paymaster/src/index.ts @@ -1,4 +1,4 @@ -export * from "./interfaces/IPaymaster"; -export * from "./interfaces/IHybridPaymaster"; -export * from "./utils/Types"; -export * from "./BiconomyPaymaster"; +export * from "./interfaces/IPaymaster.js"; +export * from "./interfaces/IHybridPaymaster.js"; +export * from "./utils/Types.js"; +export * from "./BiconomyPaymaster.js"; diff --git a/packages/paymaster/src/interfaces/IHybridPaymaster.ts b/packages/paymaster/src/interfaces/IHybridPaymaster.ts index d93d27508..5b73bfd5e 100644 --- a/packages/paymaster/src/interfaces/IHybridPaymaster.ts +++ b/packages/paymaster/src/interfaces/IHybridPaymaster.ts @@ -5,8 +5,8 @@ import { FeeQuotesOrDataDto, PaymasterAndDataResponse, type Transaction, -} from "../utils/Types"; -import { IPaymaster } from "./IPaymaster"; +} from "../utils/Types.js"; +import { IPaymaster } from "./IPaymaster.js"; export interface IHybridPaymaster extends IPaymaster { getPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; diff --git a/packages/paymaster/tsconfig.build.json b/packages/paymaster/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/paymaster/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/paymaster/tsconfig.json b/packages/paymaster/tsconfig.json index 3dc5293ed..d6269c535 100644 --- a/packages/paymaster/tsconfig.json +++ b/packages/paymaster/tsconfig.json @@ -5,7 +5,8 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "types": ["node"] }, "include": ["src", "src/**/*.json"] } diff --git a/packages/transak/.esbuild.js b/packages/transak/.esbuild.js index 124f56671..ca355e346 100644 --- a/packages/transak/.esbuild.js +++ b/packages/transak/.esbuild.js @@ -7,26 +7,25 @@ const COMMON_SETTINGS = { entryPoints: ["src/index.ts"], minify: true, bundle: true, - external: Object.keys(dependencies).concat(Object.keys(peerDependencies)), - plugins: [ - esbuildPluginTsc({ - force: true, - }), - ], + plugins: [esbuildPluginTsc({ force: true })], }; const ESM_SETTINGS = { ...COMMON_SETTINGS, + sourcemap: true, outfile: "dist/esm/index.js", - platform: "neutral", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], }; const buildForESM = async () => await esbuild.build(ESM_SETTINGS); const CJS_SETTINGS = { ...COMMON_SETTINGS, format: "cjs", - outfile: "dist/src/index.js", - sourcemap: true, + sourcemap: false, + outfile: "dist/cjs/index.js", platform: "node", }; @@ -38,7 +37,7 @@ const watchForCJS = async () => { }; const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/src/index.d.ts" }).generate(); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); (async () => { const buildType = process.argv.slice(2)[0]; diff --git a/packages/transak/package.json b/packages/transak/package.json index 03efb0c5d..21ef938c3 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -1,11 +1,19 @@ { "name": "@biconomy/transak", - "version": "3.1.2", + "version": "3.1.3", "description": "transak for biconomy sdk", - "main": "./dist/src/index.js", + "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", - "types": "./dist/src/index.d.ts", - "typings": "./dist/src/index.d.ts", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "default": "./dist/cjs/index.js", + "types": "./dist/types/index.d.ts" + }, + "./package.json": "./package.json" + }, "keywords": [ "legos", "batching", @@ -27,11 +35,15 @@ "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", "build:watch": "node .esbuild.js CJS --watch", - "build": "yarn unbuild && yarn build:cjs && yarn build:esm && yarn build:typ", - "build:cjs": "node .esbuild.js CJS", - "build:esm": "node .esbuild.js ESM", - "build:typ": "tsc -noEmit && node .esbuild.js TYP", - "build:tsc": "rimraf dist && tsc", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, @@ -45,6 +57,7 @@ "@transak/transak-sdk": "^1.2.3" }, "devDependencies": { + "@types/node": "^20.11.10", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12" diff --git a/packages/transak/src/index.ts b/packages/transak/src/index.ts index 6792b304a..36f5dcfd9 100644 --- a/packages/transak/src/index.ts +++ b/packages/transak/src/index.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ // @ts-ignore import transakSDK from "@transak/transak-sdk"; -import { ITransakDto, environments } from "interface"; +import { ITransakDto, environments } from "./interface.js"; class TransakSDK { apiKey: string; diff --git a/packages/transak/tsconfig.build.json b/packages/transak/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/transak/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/transak/tsconfig.json b/packages/transak/tsconfig.json index eb424084f..d9b305a9a 100644 --- a/packages/transak/tsconfig.json +++ b/packages/transak/tsconfig.json @@ -1,12 +1,13 @@ { "extends": "../../tsconfig.settings.json", "compilerOptions": { - "jsx": "react", "composite": true, "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"] }, "include": ["src", "src/**/*.json"] } diff --git a/rebuild.sh b/rebuild.sh index 26eef9318..39c4c1a94 100755 --- a/rebuild.sh +++ b/rebuild.sh @@ -4,18 +4,27 @@ rm -rf yarn.lock rm -rf node_modules rm -rf packages/account/node_modules +rm -rf packages/account/yarn.lock rm -rf packages/account/package-lock.json rm -rf packages/account/dist rm -rf packages/bundler/node_modules +rm -rf packages/bundler/yarn.lock rm -rf packages/bundler/package-lock.json rm -rf packages/bundler/dist +rm -rf packages/common/node_modules +rm -rf packages/common/yarn.lock +rm -rf packages/common/package-lock.json +rm -rf packages/common/dist + rm -rf packages/paymaster/node_modules +rm -rf packages/paymaster/yarn.lock rm -rf packages/paymaster/package-lock.json rm -rf packages/paymaster/dist rm -rf packages/modules/node_modules +rm -rf packages/modules/yarn.lock rm -rf packages/modules/package-lock.json rm -rf packages/modules/dist diff --git a/tsconfig.json b/tsconfig.json index 75a671002..8172cdac6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,8 +13,10 @@ "references": [ { "path": "./packages/transak" }, { "path": "./packages/bundler" }, + { "path": "./packages/particle-auth" }, { "path": "./packages/paymaster" }, { "path": "./packages/account" }, - { "path": "./packages/common" } + { "path": "./packages/common" }, + { "path": "./packages/modules" }, ] } diff --git a/yarn.lock b/yarn.lock index fdb4481c1..013668691 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,17 +12,7 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== -"@alchemy/aa-core@^1.2.2": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-1.2.4.tgz#a224b04d82a51c4a3ccd258caf4433dfc6079420" - integrity sha512-Qj9N1V+X3LvFWAgdMV1FoLV+ZNqy8v5j/pjbNecvloDVadNSm4R//3YPjmfYOvSARjvubWzw+BGVRtyUvunKDQ== - dependencies: - abitype "^0.8.3" - eventemitter3 "^5.0.1" - viem "^1.21.4" - zod "^3.22.4" - -"@alchemy/aa-core@^2.0.0": +"@alchemy/aa-core@^2.3.1": version "2.3.1" resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-2.3.1.tgz#ebd0abc2a71d1e5803cbbd0b0584a62a681c9a27" integrity sha512-iADsVGbhm4rbvFwcauKwD8u5AbzoE+8d8iQpagGHkPDpcNVzFP/FHv48jvdg9M52kf4h2XGdrQviT02bdJFTKw== @@ -2237,7 +2227,7 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== -"@types/node@*": +"@types/node@*", "@types/node@^20.11.10": version "20.11.10" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.10.tgz#6c3de8974d65c362f82ee29db6b5adf4205462f9" integrity sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg== @@ -9277,7 +9267,7 @@ typedoc@^0.25.7: minimatch "^9.0.3" shiki "^0.14.7" -"typescript@>=3 < 6", typescript@^5.2.2: +"typescript@>=3 < 6", typescript@^5.3.3: version "5.3.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== @@ -9481,7 +9471,7 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -viem@^1.20.3, viem@^1.21.4: +viem@^1.21.4: version "1.21.4" resolved "https://registry.yarnpkg.com/viem/-/viem-1.21.4.tgz#883760e9222540a5a7e0339809202b45fe6a842d" integrity sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ== From 20a4d570a4f3ee20cf6c321690bd4f5928305e29 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Wed, 31 Jan 2024 12:44:51 +0200 Subject: [PATCH 1074/1247] Fix check for maxApproval in BiconomySmartAccountV2 (#395) Co-authored-by: GabiDev --- .../account/src/BiconomySmartAccountV2.ts | 2 +- yarn.lock | 54 +++++++++++++++---- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 22005fba7..05fbb1fa7 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -512,7 +512,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } else if (paymasterServiceData.mode === PaymasterMode.ERC20) { if (paymasterServiceData?.feeQuote) { Logger.log("there is a feeQuote: ", paymasterServiceData.feeQuote); - if (!paymasterServiceData.spender || !paymasterServiceData.maxApproval) { + if (!paymasterServiceData.spender || isNullOrUndefined(paymasterServiceData.maxApproval)) { throw new Error("spender and maxApproval are required for ERC20 mode"); } const finalUserOp = await this.buildTokenPaymasterUserOp(userOp, paymasterServiceData as BiconomyTokenPaymasterRequest); diff --git a/yarn.lock b/yarn.lock index 013668691..f052c286b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2228,9 +2228,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.10.tgz#6c3de8974d65c362f82ee29db6b5adf4205462f9" - integrity sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg== + version "20.11.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.13.tgz#188263ee2c8d590e181d3f5bfa7e485a932957cb" + integrity sha512-5G4zQwdiQBSWYTDAH1ctw2eidqdhMJaNsiIDKHFr55ihz5Trl2qqR8fdrT732yPBho5gkNxXm67OxWFBqX9aPg== dependencies: undici-types "~5.26.4" @@ -2532,6 +2532,13 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -2910,6 +2917,20 @@ bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3284,6 +3305,11 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + cli-cursor@3.1.0, cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -3882,9 +3908,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.648: - version "1.4.650" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.650.tgz#b38ef9de16991b9f7b924246770576ab91ab3d64" - integrity sha512-sYSQhJCJa4aGA1wYol5cMQgekDBlbVfTRavlGZVr3WZpDdOPcp6a6xUnFfrt8TqZhsBYYbDxJZCjGfHuGupCRQ== + version "1.4.651" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.651.tgz#ef1e822233c6fc953df3caf943f78c21b254a080" + integrity sha512-jjks7Xx+4I7dslwsbaFocSwqBbGHQmuXBJUK9QBZTIrzPq3pzn6Uf2szFSP728FtLYE3ldiccmlkOM/zhGKCpA== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -5123,9 +5149,9 @@ hard-rejection@^2.1.0: integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== hardhat@^2.17.3: - version "2.19.4" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.4.tgz#5112c30295d8be2e18e55d847373c50483ed1902" - integrity sha512-fTQJpqSt3Xo9Mn/WrdblNGAfcANM6XC3tAEi6YogB4s02DmTf93A8QsGb8uR0KR8TFcpcS8lgiW4ugAIYpnbrQ== + version "2.19.5" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.5.tgz#6017c35ae2844b669e9bcc84c3d05346d4ef031c" + integrity sha512-vx8R7zWCYVgM56vA6o0Wqx2bIIptkN4TMs9QwDqZVNGRhMzBfzqUeEYbp+69gxWp1neg2V2nYQUaaUv7aom1kw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" @@ -5146,6 +5172,7 @@ hardhat@^2.17.3: adm-zip "^0.4.16" aggregate-error "^3.0.0" ansi-escapes "^4.3.0" + boxen "^5.1.2" chalk "^2.4.2" chokidar "^3.4.0" ci-info "^2.0.0" @@ -8754,7 +8781,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9586,6 +9613,13 @@ wide-align@^1.1.5: dependencies: string-width "^1.0.2 || 2 || 3 || 4" +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + winston-transport@^4.5.0: version "4.6.0" resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.6.0.tgz#f1c1a665ad1b366df72199e27892721832a19e1b" From 99715b0fad6626f7c60e1245de228b1f03fd9d9f Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Wed, 31 Jan 2024 13:53:35 +0200 Subject: [PATCH 1075/1247] Bugfix/api error message (#396) * Fix check for maxApproval in BiconomySmartAccountV2 * Fixed api error response + increment time for test --------- Co-authored-by: GabiDev --- packages/common/src/utils/HttpRequests.ts | 2 +- packages/modules/tests/sessionValidationModule.e2e.spec.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/common/src/utils/HttpRequests.ts b/packages/common/src/utils/HttpRequests.ts index bf13ce849..06b85ccaf 100644 --- a/packages/common/src/utils/HttpRequests.ts +++ b/packages/common/src/utils/HttpRequests.ts @@ -37,7 +37,7 @@ export async function sendRequest({ url, method, body }: HttpRequest): Promis return jsonResponse as T; } if (jsonResponse.error) { - throw new Error(jsonResponse.error); + throw new Error(jsonResponse.error.message); } if (jsonResponse.message) { throw new Error(jsonResponse.message); diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index 656c32ec0..cabc783a7 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -150,5 +150,5 @@ describe("Account Tests", () => { expect(maticBalanceAfter).toEqual(maticBalanceBefore); console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); - }, 50000); + }, 60000); }); From 5b8698326c3897276a484c1c1de2b236451547e1 Mon Sep 17 00:00:00 2001 From: joepegler Date: Wed, 31 Jan 2024 16:01:46 +0000 Subject: [PATCH 1076/1247] Change type: sessionSigner: SupportedSigner (#397) --- packages/modules/src/BatchedSessionRouterModule.ts | 5 +++-- packages/modules/src/SessionKeyManagerModule.ts | 6 ++++-- packages/modules/src/utils/Types.ts | 4 ++-- packages/modules/tests/sessionValidationModule.e2e.spec.ts | 4 ++-- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 2083ed85f..8108f97ef 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -9,6 +9,7 @@ import { SessionKeyManagerModule } from "./SessionKeyManagerModule.js"; import { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage.js"; import { Hex, concat, encodeAbiParameters, keccak256, pad, parseAbiParameters, toBytes, toHex } from "viem"; import { SmartAccountSigner } from "@alchemy/aa-core"; +import { convertSigner } from "@biconomy/common"; export class BatchedSessionRouterModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; @@ -97,7 +98,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { const sessionDataTupleArray = []; // signer must be the same for all the sessions - const sessionSigner = sessionParams[0].sessionSigner; + const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner); const signature = await sessionSigner.signMessage(toBytes(userOpHash)); @@ -208,7 +209,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // if needed we could do mock signature over userOpHashAndModuleAddress // signer must be the same for all the sessions - const sessionSigner = sessionParams[0].sessionSigner; + const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner); for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index bf53243b8..54ac41071 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -14,6 +14,7 @@ import { generateRandomHex } from "./utils/Uid.js"; import { BaseValidationModule } from "./BaseValidationModule.js"; import { SessionLocalStorage } from "./session-storage/SessionLocalStorage.js"; import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage.js"; +import { convertSigner } from "@biconomy/common"; export class SessionKeyManagerModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; @@ -158,7 +159,8 @@ export class SessionKeyManagerModule extends BaseValidationModule { if (!(params && params.sessionSigner)) { throw new Error("Session signer is not provided."); } - const sessionSigner = params.sessionSigner; + const { signer: sessionSigner } = await convertSigner(params.sessionSigner); + // Use the sessionSigner to sign the user operation const signature = await sessionSigner.signMessage(toBytes(userOpHash)); @@ -192,7 +194,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { if (!(params && params.sessionSigner)) { throw new Error("Session signer is not provided."); } - const sessionSigner = params.sessionSigner; + const { signer: sessionSigner } = await convertSigner(params.sessionSigner); let sessionSignerData; if (params?.sessionID) { sessionSignerData = await this.sessionStorageClient.getSessionData({ diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index f7135a1d8..187039f50 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -52,7 +52,7 @@ export enum StorageType { export type SessionParams = { sessionID?: string; - sessionSigner: SmartAccountSigner; + sessionSigner: SupportedSigner; sessionValidationModule?: Hex; additionalSessionData?: string; }; @@ -61,7 +61,7 @@ export type ModuleInfo = { // Could be a full object of below params and that way it can be an array too! // sessionParams?: SessionParams[] // where SessionParams is below four sessionID?: string; - sessionSigner?: SmartAccountSigner; + sessionSigner?: SupportedSigner; sessionValidationModule?: Hex; additionalSessionData?: string; batchSessionParams?: SessionParams[]; diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index cabc783a7..ad0467cd2 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -1,4 +1,4 @@ -import { DEFAULT_SESSION_KEY_MANAGER_MODULE, SessionKeyManagerModule } from "@biconomy/modules"; +import { DEFAULT_SESSION_KEY_MANAGER_MODULE, createSessionKeyManagerModule } from "@biconomy/modules"; import { SessionFileStorage } from "./utils/customSession"; import { WalletClientSigner, createSmartAccountClient } from "../../account/src/index"; import { Hex, encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "viem"; @@ -49,7 +49,7 @@ describe("Account Tests", () => { }); // Create session module - const sessionModule = await SessionKeyManagerModule.create({ + const sessionModule = await createSessionKeyManagerModule({ moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, smartAccountAddress: await smartWallet.getAddress(), sessionStorageClient: sessionFileStorage, From dce4a0c21993662b1c718db7992cc3c05123e023 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Thu, 1 Feb 2024 11:35:04 +0200 Subject: [PATCH 1077/1247] Fixed merkletreejs import (#400) * Fixed merkletreejs import * Removed console log --------- Co-authored-by: GabiDev --- packages/modules/package.json | 2 +- .../modules/src/MultichainValidationModule.ts | 2 +- .../modules/src/SessionKeyManagerModule.ts | 2 +- yarn.lock | 32 +++++++++---------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/modules/package.json b/packages/modules/package.json index e18028668..d16407270 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -55,7 +55,7 @@ "dependencies": { "@alchemy/aa-core": "^2.3.1", "@biconomy/common": "^3.1.3", - "merkletreejs": "^0.3.9", + "merkletreejs": "^0.3.11", "viem": "^1.21.4" }, "devDependencies": { diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index 026976b5b..e51aae190 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -1,6 +1,6 @@ import { Hex, concat, encodeAbiParameters, encodeFunctionData, getAddress, keccak256, pad, parseAbi, parseAbiParameters, toBytes, toHex } from "viem"; import { UserOperationStruct, SmartAccountSigner } from "@alchemy/aa-core"; -import MerkleTree from "merkletreejs"; +import { MerkleTree } from "merkletreejs"; import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants.js"; import { ModuleVersion, diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index 54ac41071..f8e49d859 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -1,5 +1,5 @@ import { Hex, concat, encodeAbiParameters, encodeFunctionData, keccak256, pad, parseAbi, parseAbiParameters, toBytes, toHex } from "viem"; -import MerkleTree from "merkletreejs"; +import { MerkleTree } from "merkletreejs"; import { SmartAccountSigner } from "@alchemy/aa-core"; import { SessionKeyManagerModuleConfig, diff --git a/yarn.lock b/yarn.lock index f052c286b..4d8cb2209 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2228,9 +2228,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.13.tgz#188263ee2c8d590e181d3f5bfa7e485a932957cb" - integrity sha512-5G4zQwdiQBSWYTDAH1ctw2eidqdhMJaNsiIDKHFr55ihz5Trl2qqR8fdrT732yPBho5gkNxXm67OxWFBqX9aPg== + version "20.11.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.15.tgz#b853a86cfedbc768360c552b4653302b4e7417bf" + integrity sha512-gscmuADZfvNULx1eyirVbr3kVOVZtpQtzKMCZpeSZcN6MfbkRXAR4s9/gsQ4CzxLHw6EStDtKLNtSDL3vbq05A== dependencies: undici-types "~5.26.4" @@ -2773,9 +2773,9 @@ asynckit@^0.4.0: integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" + integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== axios@^1.0.0, axios@^1.3.6: version "1.6.7" @@ -3197,9 +3197,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001580: - version "1.0.30001581" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz#0dfd4db9e94edbdca67d57348ebc070dece279f4" - integrity sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ== + version "1.0.30001582" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001582.tgz#db3070547ce0b48d9f44a509b86c4a02ba5d9055" + integrity sha512-vsJG3V5vgfduaQGVxL53uSX/HUzxyr2eA8xCo36OLal7sRcSZbibJtLeh0qja4sFOr/QQGt4opB4tOy+eOgAxg== case@^1.6.3: version "1.6.3" @@ -3908,9 +3908,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.648: - version "1.4.651" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.651.tgz#ef1e822233c6fc953df3caf943f78c21b254a080" - integrity sha512-jjks7Xx+4I7dslwsbaFocSwqBbGHQmuXBJUK9QBZTIrzPq3pzn6Uf2szFSP728FtLYE3ldiccmlkOM/zhGKCpA== + version "1.4.653" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.653.tgz#832ab25e80ad698ac09c1ca547bd9ee6cce7df10" + integrity sha512-wA2A2LQCqnEwQAvwADQq3KpMpNwgAUBnRmrFgRzHnPhbQUFArTR32Ab46f4p0MovDLcg4uqd4nCsN2hTltslpA== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -5416,9 +5416,9 @@ ignore-walk@^6.0.0: minimatch "^9.0.0" ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immutable@^4.0.0-rc.12: version "4.3.5" @@ -6876,7 +6876,7 @@ merge@^2.1.1: resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== -merkletreejs@^0.3.9: +merkletreejs@^0.3.11: version "0.3.11" resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.11.tgz#e0de05c3ca1fd368de05a12cb8efb954ef6fc04f" integrity sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ== From 82464838c55955d340071f9bb035e94843463ee5 Mon Sep 17 00:00:00 2001 From: joepegler Date: Thu, 1 Feb 2024 17:49:03 +0000 Subject: [PATCH 1078/1247] Feat(SMA-579): Allow empty tokenInfo fields during getTokenFees (#399) * Resolved SMA-579 * added e2e tests * lint:fix & update docs * fix: token paymaster approval flows * continued * test fix * Remove max approval from tests --------- Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> --- linkAll.sh | 2 +- packages/account/package.json | 2 +- .../account/src/BiconomySmartAccountV2.ts | 76 ++++++++---------- packages/account/src/utils/Constants.ts | 6 ++ packages/account/tests/account.e2e.spec.ts | 79 ++++++++++++++++--- packages/bundler/package.json | 2 +- packages/common/package.json | 2 +- packages/modules/package.json | 2 +- packages/particle-auth/package.json | 2 +- packages/paymaster/package.json | 2 +- packages/transak/package.json | 2 +- 11 files changed, 113 insertions(+), 64 deletions(-) diff --git a/linkAll.sh b/linkAll.sh index 215ab64c8..3597ec1c0 100755 --- a/linkAll.sh +++ b/linkAll.sh @@ -1,3 +1,3 @@ !/bin/sh for dir in ./packages/*; do (cd "$dir" && yarn link); done -cd ./packages/account && yarn link '@biconomy/bundler' '@biconomy/modules' '@biconomy/paymaster' '@biconomy/common' \ No newline at end of file +cd ./packages/account && yarn link '@biconomy/bundler' '@biconomy/modules' '@biconomy/paymaster' '@biconomy/common' \ No newline at end of file diff --git a/packages/account/package.json b/packages/account/package.json index 427caeafd..97a78f450 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -26,7 +26,7 @@ "scripts": { "docs": "typedoc", "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "node .esbuild.js CJS --watch", + "build:watch": "yarn build:tsc --watch", "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", "build": "yarn unbuild && yarn build:tsc", "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 05fbb1fa7..7f4138b1e 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -6,7 +6,6 @@ import { encodeAbiParameters, parseAbiParameters, toHex, - hexToNumber, toBytes, encodeFunctionData, PublicClient, @@ -60,6 +59,7 @@ import { PROXY_CREATION_CODE, ADDRESS_ZERO, DEFAULT_ENTRYPOINT_ADDRESS, + ERROR_MESSAGES, } from "./utils/Constants.js"; import { BiconomyFactoryAbi } from "./abi/Factory.js"; import { BiconomyAccountAbi } from "./abi/SmartAccount.js"; @@ -511,32 +511,33 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return this.getPaymasterAndData(userOp, paymasterServiceData); } else if (paymasterServiceData.mode === PaymasterMode.ERC20) { if (paymasterServiceData?.feeQuote) { - Logger.log("there is a feeQuote: ", paymasterServiceData.feeQuote); - if (!paymasterServiceData.spender || isNullOrUndefined(paymasterServiceData.maxApproval)) { - throw new Error("spender and maxApproval are required for ERC20 mode"); - } - const finalUserOp = await this.buildTokenPaymasterUserOp(userOp, paymasterServiceData as BiconomyTokenPaymasterRequest); - const fromPayMaster = await this.getPaymasterAndData(userOp, { + const { feeQuote, spender, maxApproval = false } = paymasterServiceData; + Logger.log("there is a feeQuote: ", feeQuote); + if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED); + if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH); + const partialUserOp = await this.buildTokenPaymasterUserOp(userOp, { ...paymasterServiceData, - feeTokenAddress: paymasterServiceData.feeQuote.tokenAddress, - calculateGasLimits: true, // Always recommended and especially when using token paymaster + spender, + maxApproval, + feeQuote, }); - return { ...finalUserOp, ...fromPayMaster }; - } else if (paymasterServiceData.preferredToken) { - Logger.log("there is a preferred token: ", paymasterServiceData.preferredToken); - const preferredToken = paymasterServiceData.preferredToken; - const feeQuotesResponse = await this.getPaymasterFeeQuotesOrData(userOp, { + return this.getPaymasterAndData(partialUserOp, { ...paymasterServiceData, - tokenList: paymasterServiceData?.tokenList ?? [preferredToken], + feeTokenAddress: feeQuote.tokenAddress, + calculateGasLimits: true, // Always recommended and especially when using token paymaster }); + } else if (paymasterServiceData?.preferredToken) { + const { preferredToken } = paymasterServiceData; + Logger.log("there is a preferred token: ", preferredToken); + const feeQuotesResponse = await this.getPaymasterFeeQuotesOrData(userOp, paymasterServiceData); const spender = feeQuotesResponse.tokenPaymasterAddress; const feeQuote = feeQuotesResponse.feeQuotes?.[0]; - if (!feeQuote) { - throw new Error("Error while getting feeQuote"); - } - return this.getPaymasterAndData(userOp, { ...paymasterServiceData, feeQuote, spender, feeTokenAddress: preferredToken }); + if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED); + if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH); + return this.getPaymasterUserOp(userOp, { ...paymasterServiceData, feeQuote, spender }); // Recursively call getPaymasterUserOp with the feeQuote } else { - throw new Error("FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote"); + Logger.log("ERC20 mode without feeQuote or preferredToken provided. Passing through unchanged."); + return userOp; } } throw new Error("Invalid paymaster mode"); @@ -556,7 +557,12 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { feeQuotesOrData: FeeQuotesOrDataDto, ): Promise { const paymaster = this.paymaster as IHybridPaymaster; - return paymaster.getPaymasterFeeQuotesOrData(userOp, feeQuotesOrData); + const tokenList = feeQuotesOrData?.preferredToken + ? [feeQuotesOrData?.preferredToken] + : feeQuotesOrData?.tokenList?.length + ? feeQuotesOrData?.tokenList + : []; + return paymaster.getPaymasterFeeQuotesOrData(userOp, { ...feeQuotesOrData, tokenList }); } /** @@ -591,13 +597,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * data: encodedCall * } * - * const feeQuotesResponse: FeeQuotesOrDataResponse = await smartWallet.getTokenFees(transaction, { - * paymasterServiceData: { - * mode: PaymasterMode.ERC20, - * tokenList: ["0xda5289fcaaf71d52a80a254da614a192b693e977"], - * preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977" - * } - * }); + * const feeQuotesResponse: FeeQuotesOrDataResponse = await smartWallet.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20 } }); * * const userSeletedFeeQuote = feeQuotesResponse.feeQuotes?.[0]; * @@ -605,7 +605,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * paymasterServiceData: { * mode: PaymasterMode.ERC20, * feeQuote: userSeletedFeeQuote, - * maxApproval: true, * spender: "0x...", * }, * }); @@ -996,26 +995,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData); } - let finalUserOp: Partial = { + const finalUserOp: Partial = { ...userOp, callData: newCallData, }; - // Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) - try { - finalUserOp = await this.estimateUserOpGas(finalUserOp); - const callGasLimit = finalUserOp.callGasLimit; - if (callGasLimit && hexToNumber(callGasLimit as Hex) < 21000) { - return { - ...userOp, - callData: newCallData, - }; - } - Logger.warn("UserOp after estimation ", finalUserOp); - } catch (error) { - Logger.error("Failed to estimate gas for userOp with updated callData ", error); - Logger.log("Sending updated userOp. calculateGasLimit flag should be sent to the paymaster to be able to update callGasLimit"); - } + // Optionally Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) + return finalUserOp; } } catch (error) { diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index b9f3b66ff..d6f52fc7a 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -56,3 +56,9 @@ export const DefaultGasLimit = { verificationGasLimit: 1000000, preVerificationGas: 100000, }; + +export const ERROR_MESSAGES = { + SPENDER_REQUIRED: "spender is required for ERC20 mode", + NO_FEE_QUOTE: "FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote", + FAILED_FEE_QUOTE_FETCH: "Failed to fetch fee quote", +}; diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 23b6a2e4d..c4cce04fc 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,8 +1,9 @@ import { TestData } from "../../../tests"; -import { createSmartAccountClient, FeeQuotesOrDataResponse, PaymasterMode } from "../src/index"; -import { Hex, encodeFunctionData, parseAbi } from "viem"; +import { createSmartAccountClient, ERROR_MESSAGES, FeeQuotesOrDataResponse, IHybridPaymaster, PaymasterMode } from "../src/index"; +import { Hex, encodeFunctionData, getContract, parseAbi } from "viem"; import { UserOperationStruct } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "../../../tests/utils"; +import { ERC20_ABI } from "@biconomy/modules"; describe("Account Tests", () => { let mumbai: TestData; @@ -167,8 +168,38 @@ describe("Account Tests", () => { expect(newBalance - balance).toBe(1n); }, 60000); - it("Should mint an NFT on Mumbai and pay with ERC20 - with token selection", async () => { + it("Should expect several feeQuotes in resonse to empty tokenInfo fields", async () => { const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartWallet = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; + + const feeQuotesResponse = await smartWallet.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20 } }); + expect(feeQuotesResponse.feeQuotes?.length).toBeGreaterThan(1); + }); + + it("Should mint an NFT on Mumbai and pay with ERC20 - with token selection and no maxApproval", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const preferredToken: Hex = "0xda5289fcaaf71d52a80a254da614a192b693e977"; const { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, @@ -182,6 +213,8 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, }); + const smartWalletAddress = await smartWallet.getAddress(); + const encodedCall = encodeFunctionData({ abi: parseAbi(["function safeMint(address _to)"]), functionName: "safeMint", @@ -196,20 +229,44 @@ describe("Account Tests", () => { const feeQuotesResponse = await smartWallet.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20, - preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + preferredToken, }, }); + const selectedFeeQuote = feeQuotesResponse.feeQuotes?.[0]!; + const spender = feeQuotesResponse.tokenPaymasterAddress!; + + const contract = getContract({ + address: preferredToken, + abi: parseAbi(ERC20_ABI), + publicClient, + }); + + const allowanceBefore = (await contract.read.allowance([smartWalletAddress, spender])) as bigint; + + if (allowanceBefore > 0) { + const setAllowanceToZeroTransaction = await (smartWallet?.paymaster as IHybridPaymaster)?.buildTokenApprovalTransaction({ + feeQuote: { ...selectedFeeQuote, maxGasFee: 0 }, + spender, + }); + + const { wait } = await smartWallet.sendTransaction([setAllowanceToZeroTransaction]); + const { success } = await wait(); + + expect(success).toBe("true"); + const allowanceAfter = (await contract.read.allowance([smartWalletAddress, spender])) as bigint; + expect(allowanceAfter).toBe(0n); + } + const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const maticBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress()); - const usdcBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); + const maticBalanceBefore = await checkBalance(publicClient, smartWalletAddress); + const usdcBalanceBefore = await checkBalance(publicClient, smartWalletAddress, preferredToken); const { wait } = await smartWallet.sendTransaction(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20, - feeQuote: feeQuotesResponse.feeQuotes?.[0], + feeQuote: selectedFeeQuote, spender: feeQuotesResponse.tokenPaymasterAddress, - maxApproval: true, }, }); @@ -223,10 +280,10 @@ describe("Account Tests", () => { expect(success).toBe("true"); expect(transactionHash).toBeTruthy(); - const maticBalanceAfter = await checkBalance(publicClient, await smartWallet.getAddress()); + const maticBalanceAfter = await checkBalance(publicClient, smartWalletAddress); expect(maticBalanceAfter).toEqual(maticBalanceBefore); - const usdcBalanceAfter = await checkBalance(publicClient, await smartWallet.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); + const usdcBalanceAfter = await checkBalance(publicClient, smartWalletAddress, preferredToken); expect(usdcBalanceAfter).toBeLessThan(usdcBalanceBefore); const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; @@ -273,7 +330,7 @@ describe("Account Tests", () => { }, simulationType: "validation", }), - ).rejects.toThrow("spender and maxApproval are required for ERC20 mode"); + ).rejects.toThrow(ERROR_MESSAGES.SPENDER_REQUIRED); }, 60000); it("#getUserOpHash should match entryPoint.getUserOpHash", async () => { diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 2058ff3a6..5f8a84f53 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -25,7 +25,7 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "node .esbuild.js CJS --watch", + "build:watch": "yarn build:tsc --watch", "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", "build": "yarn unbuild && yarn build:tsc", "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", diff --git a/packages/common/package.json b/packages/common/package.json index e6f3a8fdf..35c28a7ac 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -33,7 +33,7 @@ }, "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "node .esbuild.js CJS --watch", + "build:watch": "yarn build:tsc --watch", "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", "build": "yarn unbuild && yarn build:tsc", "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", diff --git a/packages/modules/package.json b/packages/modules/package.json index d16407270..a81f47fac 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -25,7 +25,7 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "node .esbuild.js CJS --watch", + "build:watch": "yarn build:tsc --watch", "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", "build": "yarn unbuild && yarn build:tsc", "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 7b541b482..8b3b173ba 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -35,7 +35,7 @@ }, "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "node .esbuild.js CJS --watch", + "build:watch": "yarn build:tsc --watch", "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", "build": "yarn unbuild && yarn build:tsc", "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index d07e4c563..fff0a7fa4 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -25,7 +25,7 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "node .esbuild.js CJS --watch", + "build:watch": "yarn build:tsc --watch", "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", "build": "yarn unbuild && yarn build:tsc", "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", diff --git a/packages/transak/package.json b/packages/transak/package.json index 21ef938c3..6224620c9 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -34,7 +34,7 @@ }, "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "node .esbuild.js CJS --watch", + "build:watch": "yarn build:tsc --watch", "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", "build": "yarn unbuild && yarn build:tsc", "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", From 5d3af2e6b32cde83c8e6b4f0ceb638c908127bf7 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 1 Feb 2024 22:36:47 +0400 Subject: [PATCH 1079/1247] yarn lock --- yarn.lock | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4d8cb2209..7e80f234f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2190,9 +2190,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^29.5.4": - version "29.5.11" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.11.tgz#0c13aa0da7d0929f078ab080ae5d4ced80fa2f2c" - integrity sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ== + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -2228,9 +2228,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.15.tgz#b853a86cfedbc768360c552b4653302b4e7417bf" - integrity sha512-gscmuADZfvNULx1eyirVbr3kVOVZtpQtzKMCZpeSZcN6MfbkRXAR4s9/gsQ4CzxLHw6EStDtKLNtSDL3vbq05A== + version "20.11.16" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.16.tgz#4411f79411514eb8e2926f036c86c9f0e4ec6708" + integrity sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ== dependencies: undici-types "~5.26.4" @@ -5236,11 +5236,9 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.1.tgz#5d242715a441a1c9a46d543e6dbead8defdfc226" + integrity sha512-6J4rC9ROz0UkOpjn0BRtSSqlewDTDYJNQvy8N8RSrPCduUWId1o9BQPEVII/KKBqRk/ZIQff1YbRkUDCH2N5Sg== has-unicode@2.0.1, has-unicode@^2.0.1: version "2.0.1" From 08f83be1c245cddd40356e268d69fb08a44326c6 Mon Sep 17 00:00:00 2001 From: joepegler Date: Sun, 4 Feb 2024 17:05:58 +0000 Subject: [PATCH 1080/1247] Feat(SMA-583): Update README.md with v4 examples (#405) * continued docs + readme updates * Updated README.md * lint:fix --- README.md | 77 +-------- packages/account/Readme.md | 140 ++++++++++++---- .../account/src/BiconomySmartAccountV2.ts | 26 +-- packages/account/src/index.ts | 2 +- packages/account/src/utils/Types.ts | 153 +++++++++++------- packages/account/tests/account.e2e.spec.ts | 123 +++++++++----- packages/account/tests/account.spec.ts | 76 ++++----- packages/bundler/src/Bundler.ts | 4 +- packages/bundler/src/utils/Types.ts | 13 +- packages/modules/src/utils/Types.ts | 4 - packages/modules/tests/modules.spec.ts | 12 +- .../tests/sessionValidationModule.e2e.spec.ts | 22 +-- packages/paymaster/src/BiconomyPaymaster.ts | 2 +- packages/paymaster/src/utils/Types.ts | 55 +++++-- 14 files changed, 413 insertions(+), 296 deletions(-) diff --git a/README.md b/README.md index 20aaa63af..ea01fe4f9 100644 --- a/README.md +++ b/README.md @@ -1,76 +1 @@ -# Biconomy SDK: Your Gateway to ERC4337 Account Abstraction & Smart Accounts 🛠️ - -![Biconomy SDK](https://img.shields.io/badge/Biconomy-SDK-blue.svg) ![TypeScript](https://img.shields.io/badge/-TypeScript-blue) ![Test Coverage](https://img.shields.io/badge/Coverage-45%25-yellow.svg) - -

Biconomy SDK Banner

- -## Introduction - -The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. This SDK is designed for seamless user experiences and offers non-custodial solutions for user onboarding, transaction management, and gas abstraction. - -

Biconomy SDK Diagram

- -## 🌟 Features - -- **ERC4337 Account Abstraction**: Simplify user operations and gas payments. -- **Smart Accounts**: Enhance user experience with modular smart accounts. -- **Paymaster Service**: Enable third-party gas sponsorship. -- **Bundler Infrastructure**: Ensure efficient and reliable transaction bundling. -- **Backend Node**: Manage chain configurations and gas estimations. - -## 📦 Packages - -### Account - -Unlock the full potential of **ERC4337 Account Abstraction** with methods that simplify the creation and dispatch of UserOperations, streamlining dApp development and management. - -```javascript - -import { createSmartAccountClient } from "@biconomy/account"; -import { createWalletClient, http } from "viem"; -import { privateKeyToAccount } from "viem/accounts"; -import { polygonMumbai } from "viem/chains"; - -const account = privateKeyToAccount(config.privateKey as Hex); -const signer = createWalletClient({ - account, - chain: polygonMumbai, - transport: http(), -}); - -const bundlerUrl = 'https://bundler.biconomy.io/api/v2/80001/' -// Please go to https://dashboard.biconomy.io and generate bundler url - -const biconomySmartAccount = await createSmartAccountClient({ bundlerUrl, signer }); -console.log("address: ", await biconomySmartAccount.getAccountAddress()); -``` - -### Paymaster - -Acting as third-party intermediaries, Paymasters have the capability to sponsor gas fees for an account, provided specific predefined conditions are met. Additionally, they can accept gas payments in ERC20 tokens from users' smart accounts, with the Paymaster managing the conversion to native tokens for gas payment. - -```javascript -import { Paymaster, IPaymaster } from "@biconomy/account"; -const paymasterUrl = ""; -// Please go to https://dashboard.biconomy.io to setup a paymasterUrl -// ... -const biconomySmartAccount = await createSmartAccountClient({ bundlerUrl, signer, paymasterUrl }); -``` - -## 🛠️ Quickstart - -For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick explore here https://docs.biconomy.io/docs/category/quick-explore - -## 📚 Resources - -- [Biconomy Documentation](https://docs.biconomy.io/docs/overview) -- [Biconomy Dashboard](https://dashboard.biconomy.io/) -- [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) - -## 🤝 Contributing - -Community contributions are welcome! For guidelines on contributing, please read our [contribution guidelines](./CONTRIBUTING.md). - -## 📜 License - -This project is licensed under the MIT License. See the [LICENSE.md](./LICENSE.md) file for details. +packages/account/README.md diff --git a/packages/account/Readme.md b/packages/account/Readme.md index 69ab94d58..00c720607 100644 --- a/packages/account/Readme.md +++ b/packages/account/Readme.md @@ -1,52 +1,138 @@ -# installation +# Biconomy SDK -Using `npm` package manager +![Biconomy SDK](https://img.shields.io/badge/Biconomy-SDK-blue.svg) +![TypeScript](https://img.shields.io/badge/-TypeScript-blue) +![Test Coverage](https://img.shields.io/badge/Coverage-79.82%25-green.svg) -```bash -npm i @biconomy/account -``` +## 👋 Introduction -OR +The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. It is designed for seamless user experiences and offers non-custodial solutions for user onboarding, sending transactions (userOps), gas sponsorship and much more. -Using `yarn` package manager +## 🛠️ Quickstart -```bash -yarn add @biconomy/account +```typescript +import { createSmartAccountClient } from "@biconomy/account"; + +const smartAccount = await createSmartAccountClient({ + signer: viemWalletOrEthersSigner, + bundlerUrl: "", // From dashboard.biconomy.io + biconomyPaymasterApiKey: "", // From dashboard.biconomy.io +}); + +const { wait } = await smartAccount.sendTransaction({ to: "0x...", value: 1 }); + +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); ``` -### Account +## 🌟 Features -Integrating and deploying Smart Accounts, building and sending user operations is a key offering of any toolkit designed for ERC4337. This package seamlessly integrates the essential features associated with ERC-4337 and simplifies the development of your Dapp's account and transaction rails with added usability features. +- **ERC4337 Account Abstraction**: Simplify user operations and gas payments. +- **Smart Accounts**: Enhance user experience with modular smart accounts. +- **Paymaster Service**: Enable third-party gas sponsorship. +- **Bundler Infrastructure**: Ensure efficient and reliable transaction bundling. -The account package achieves this by providing a comprehensive set of methods that enable developers to effortlessly create UserOperations. Combined with the sophisticated, developer friendly and scalable infrastructure of Biconomy, it ensures efficient and reliable transmission of these operations across multiple EVM chains. +For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick start [here](https://docs.biconomy.io/quickstart). -## Smart Account instance configuration +## 📚 Resources -#### BiconomySmartAccount (V2 Smart Account) +- [Biconomy Documentation](https://docs.biconomy.io/) +- [Biconomy Dashboard](https://dashboard.biconomy.io) +- [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) -| Key | Description | -| ----------------------- | ----------------------------------------------------------------------------------------------------------------------- | -| signer | This signer will be used for signing userOps for any transactions you build. You can supply your your EOA wallet signer | -| biconomyPaymasterApiKey | You can pass in a paymaster url necessary for sponsoring transactions (retrieved from the biconomy dashboard) | -| | Note: If you don't pass the paymaster instance, your smart account will need funds to pay for transaction fees. | -| bundlerUrl | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | +## ⚙️ installation -## Example Usage +```bash +npm i @biconomy/account +``` + +## 💼 Example Usages + +### [Initialise the smartAccount](https://bcnmy.github.io/biconomy-client-sdk/functions/createSmartAccountClient.html) + +| Key | Description | +| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| [signer](https://bcnmy.github.io/biconomy-client-sdk/packages/account/docs/interfaces/SmartAccountSigner.html) | This signer will be used for signing userOps for any transactions you build. Will accept ethers.JsonRpcSigner as well as a viemWallet | +| [biconomyPaymasterApiKey](https://dashboard.biconomy.io) | You can pass in a biconomyPaymasterApiKey necessary for sponsoring transactions (retrieved from the biconomy dashboard) | +| [bundlerUrl](https://dashboard.biconomy.io) | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | ```typescript -// This is how you create a smartWallet in your dapp -import { Bundler, createSmartAccountClient } from "@biconomy/account"; +import { createSmartAccountClient } from "@biconomy/account"; import { createWalletClient, http, createPublicClient } from "viem"; import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; import { mainnet as chain } from "viem/chains"; const account = privateKeyToAccount(generatePrivateKey()); const signer = createWalletClient({ account, chain, transport: http() }); -const smartWallet = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); -// Send some ETH -const { waitForTxHash } = await smartWallet.sendTransaction({ to: "0x...", value: 1 }); +const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, +}); +``` + +### [Send some ETH, have gas sponsored](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#sendTransaction) + +| Key | Description | +| --------------------------------------------------------------------------------- | -------------------------------------------------------------- | +| [oneOrManyTx](https://bcnmy.github.io/biconomy-client-sdk/types/Transaction.html) | Submit multiple or one transactions | +| [userOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/types/UserOpReceipt) | Returned information about your tx, receipts, userOpHashes etc | + +```typescript +const oneOrManyTx = { to: "0x...", value: 1 }; + +const { wait } = await smartAccount.sendTransaction(oneOrManyTx, { + mode: PaymasterMode.SPONSORED, +}); + const { receipt: { transactionHash }, -} = await waitForTxHash(); + userOpHash, +} = await wait(); ``` + +### [Mint two NFTs, pay gas with token](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#getTokenFees) + +| Key | Description | +| -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| [buildUseropDto](https://bcnmy.github.io/biconomy-client-sdk/types/BuildUserOpOptions.html) | Options for building a userOp | +| [paymasterServiceData](https://bcnmy.github.io/biconomy-client-sdk/types/PaymasterUserOperationDto.html) | PaymasterOptions set in the buildUseropDto | + +```typescript +import { encodeFunctionData, parseAbi } from "viem"; + +const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: ["0x..."], +}); + +const tx = { + to: nftAddress, + data: encodedCall, +}; +const oneOrManyTx = [tx, tx]; // Mint twice +const paymasterServiceData = { + mode: PaymasterMode.ERC20, + preferredToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC +}; +const buildUseropDto = { paymasterServiceData }; + +const { wait } = await smartAccount.sendTransaction(oneOrManyTx, buildUseropDto); + +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); +``` + +## 🤝 Contributing + +Community contributions are welcome! For guidelines on contributing, please read our [contribution guidelines](./CONTRIBUTING.md). + +## 📜 License + +This project is licensed under the MIT License. See the [LICENSE.md](./LICENSE.md) file for details. diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 7f4138b1e..e0dacc13d 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -172,11 +172,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * const bundlerUrl = "" // Retrieve bundler url from dasboard * - * const smartWalletFromStaticCreate = await BiconomySmartAccountV2.create({ signer, bundlerUrl }); + * const smartAccountFromStaticCreate = await BiconomySmartAccountV2.create({ signer, bundlerUrl }); * * // Is the same as... * - * const smartWallet = await createSmartAccountClient({ signer, bundlerUrl }); + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); * */ public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { @@ -585,7 +585,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * transport: http(), * }); * - * const smartWallet = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard * const encodedCall = encodeFunctionData({ * abi: parseAbi(["function safeMint(address to) public"]), * functionName: "safeMint", @@ -597,15 +597,15 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * data: encodedCall * } * - * const feeQuotesResponse: FeeQuotesOrDataResponse = await smartWallet.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20 } }); + * const feeQuotesResponse: FeeQuotesOrDataResponse = await smartAccount.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20 } }); * * const userSeletedFeeQuote = feeQuotesResponse.feeQuotes?.[0]; * - * const { wait } = await smartWallet.sendTransaction(transaction, { + * const { wait } = await smartAccount.sendTransaction(transaction, { * paymasterServiceData: { * mode: PaymasterMode.ERC20, * feeQuote: userSeletedFeeQuote, - * spender: "0x...", + * spender: feeQuotesResponse.tokenPaymasterAddress, * }, * }); * @@ -648,7 +648,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * transport: http(), * }); * - * const smartWallet = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard * const encodedCall = encodeFunctionData({ * abi: parseAbi(["function safeMint(address to) public"]), * functionName: "safeMint", @@ -660,9 +660,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * data: encodedCall * } * - * const userOp = await smartWallet.buildUserOp([transaction]); + * const userOp = await smartAccount.buildUserOp([transaction]); * - * const { wait } = await smartWallet.sendUserOp(userOp); + * const { wait } = await smartAccount.sendUserOp(userOp); * const { receipt } = await wait(); * */ @@ -797,7 +797,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * transport: http(), * }); * - * const smartWallet = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard * const encodedCall = encodeFunctionData({ * abi: parseAbi(["function safeMint(address to) public"]), * functionName: "safeMint", @@ -809,7 +809,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * data: encodedCall * } * - * const { waitForTxHash } = await smartWallet.sendTransaction(transaction); + * const { waitForTxHash } = await smartAccount.sendTransaction(transaction); * const { transactionHash, userOperationReceipt } = await wait(); * */ @@ -839,7 +839,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * transport: http(), * }); * - * const smartWallet = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard * const encodedCall = encodeFunctionData({ * abi: parseAbi(["function safeMint(address to) public"]), * functionName: "safeMint", @@ -851,7 +851,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * data: encodedCall * } * - * const userOp = await smartWallet.buildUserOp([{ to: "0x...", data: encodedCall }]); + * const userOp = await smartAccount.buildUserOp([{ to: "0x...", data: encodedCall }]); * */ async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index c1bd7363b..0e43f9dd2 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -16,7 +16,7 @@ export { type FeeQuotesOrDataResponse, } from "@biconomy/paymaster"; export { EthersSigner, convertSigner } from "@biconomy/common"; -export { Bundler, type IBundler, extractChainIdFromBundlerUrl, type UserOpResponse } from "@biconomy/bundler"; +export { Bundler, type IBundler, extractChainIdFromBundlerUrl, type UserOpResponse, type UserOpReceipt } from "@biconomy/bundler"; export { createECDSAOwnershipValidationModule, createERC20SessionValidationModule, diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 0395134f3..1319f3b72 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -1,4 +1,4 @@ -import { BigNumberish, SmartAccountSigner, UserOperationStruct, WalletClientSigner } from "@alchemy/aa-core"; +import { BigNumberish, SmartAccountSigner, UserOperationStruct } from "@alchemy/aa-core"; import { IBundler } from "@biconomy/bundler"; import { type FeeQuotesOrDataDto, @@ -12,100 +12,79 @@ import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Hex, WalletClient } from "viem"; import { SupportedSigner } from "@biconomy/common"; -export type EntryPointAddresses = { - [address: string]: string; -}; - -export type BiconomyFactories = { - [address: string]: string; -}; - -export type BiconomyImplementations = { - [address: string]: string; -}; - -export type EntryPointAddressesByVersion = { - [version: string]: string; -}; - -export type BiconomyFactoriesByVersion = { - [version: string]: string; -}; - -export type BiconomyImplementationsByVersion = { - [version: string]: string; -}; +export type EntryPointAddresses = Record; +export type BiconomyFactories = Record; +export type BiconomyImplementations = Record; +export type EntryPointAddressesByVersion = Record; +export type BiconomyFactoriesByVersion = Record; +export type BiconomyImplementationsByVersion = Record; export type SmartAccountConfig = { + /** entryPointAddress: address of the smart account factory */ entryPointAddress: string; + /** factoryAddress: address of the smart account factory */ bundler?: IBundler; }; export interface GasOverheads { + /** fixed: fixed gas overhead */ fixed: number; + /** perUserOp: per user operation gas overhead */ perUserOp: number; + /** perUserOpWord: per user operation word gas overhead */ perUserOpWord: number; + /** zeroByte: per byte gas overhead */ zeroByte: number; + /** nonZeroByte: per non zero byte gas overhead */ nonZeroByte: number; + /** bundleSize: per signature bundleSize */ bundleSize: number; + /** sigSize: sigSize gas overhead */ sigSize: number; } -/** - * Enum representing available validation modules. - * - * - `ECDSA_OWNERSHIP`: Default module for ECDSA ownership validation. - * - `MULTICHAIN`: Default module for multi-chain validation. - * - If you don't provide any module, ECDSA_OWNERSHIP will be used as default - */ -/*export enum AuthorizationModuleType { - ECDSA_OWNERSHIP = DEFAULT_ECDSA_OWNERSHIP_MODULE, - // MULTICHAIN = DEFAULT_MULTICHAIN_MODULE, -}*/ - export type BaseSmartAccountConfig = { - // owner?: Signer // can be in child classes + /** index: helps to not conflict with other smart account instances */ index?: number; + /** provider: WalletClientSigner from viem */ provider?: WalletClient; + /** entryPointAddress: address of the smart account entry point */ entryPointAddress?: string; + /** accountAddress: address of the smart account, potentially counterfactual */ accountAddress?: string; + /** overheads: {@link GasOverheads} */ overheads?: Partial; - paymaster?: IPaymaster; // PaymasterAPI + /** paymaster: {@link IPaymaster} interface */ + paymaster?: IPaymaster; + /** chainId: chainId of the network */ chainId?: number; }; export type BiconomyTokenPaymasterRequest = { + /** feeQuote: {@link PaymasterFeeQuote} */ feeQuote: PaymasterFeeQuote; + /** spender: The address of the spender who is paying for the transaction, this can usually be set to feeQuotesResponse.tokenPaymasterAddress */ spender: Hex; + /** maxApproval: If set to true, the paymaster will approve the maximum amount of tokens required for the transaction. Not recommended */ maxApproval?: boolean; }; -export type BiconomySmartAccountConfig = { - signer: WalletClientSigner; - rpcUrl?: string; - chainId: number; - entryPointAddress?: string; - bundler?: IBundler; - paymaster?: IPaymaster; - nodeClientUrl?: string; -}; - -type RequireAtLeastOne = Pick> & +export type RequireAtLeastOne = Pick> & { [K in Keys]-?: Required> & Partial>>; }[Keys]; -type ConditionalBundlerProps = RequireAtLeastOne< +export type ConditionalBundlerProps = RequireAtLeastOne< { bundler: IBundler; bundlerUrl: string; }, "bundler" | "bundlerUrl" >; -type ResolvedBundlerProps = { +export type ResolvedBundlerProps = { bundler: IBundler; }; -type ConditionalValidationProps = RequireAtLeastOne< +export type ConditionalValidationProps = RequireAtLeastOne< { defaultValidationModule: BaseValidationModule; signer: SupportedSigner; @@ -113,23 +92,35 @@ type ConditionalValidationProps = RequireAtLeastOne< "defaultValidationModule" | "signer" >; -type ResolvedValidationProps = { +export type ResolvedValidationProps = { + /** defaultValidationModule: {@link BaseValidationModule} */ defaultValidationModule: BaseValidationModule; + /** activeValidationModule: {@link BaseValidationModule}. The active validation module. Will default to the defaultValidationModule */ activeValidationModule: BaseValidationModule; + /** signer: ethers Wallet, viemWallet or alchemys SmartAccountSigner */ signer: SmartAccountSigner; + /** chainId: chainId of the network */ chainId: number; }; -type BiconomySmartAccountV2ConfigBaseProps = { +export type BiconomySmartAccountV2ConfigBaseProps = { + /** Factory address of biconomy factory contract or some other contract you have deployed on chain */ factoryAddress?: Hex; + /** Sender address: If you want to override the Signer address with some other address and get counterfactual address can use this to pass the EOA and get SA address */ senderAddress?: Hex; + /** implementation of smart contract address or some other contract you have deployed and want to override */ implementationAddress?: Hex; + /** defaultFallbackHandler: override the default fallback contract address */ defaultFallbackHandler?: Hex; + /** rpcUrl: Explicitly set the rpc else it is pulled out of the signer. */ rpcUrl?: string; // as good as Provider - nodeClientUrl?: string; // very specific to Biconomy + /** biconomyPaymasterApiKey: The API key retrieved from the Biconomy dashboard */ biconomyPaymasterApiKey?: string; + /** activeValidationModule: The active validation module. Will default to the defaultValidationModule */ activeValidationModule?: BaseValidationModule; + /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ scanForUpgradedAccountsFromV1?: boolean; + /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ maxIndexForScan?: number; }; export type BiconomySmartAccountV2Config = BiconomySmartAccountV2ConfigBaseProps & @@ -143,29 +134,45 @@ export type BiconomySmartAccountV2ConfigConstructorProps = BiconomySmartAccountV ResolvedValidationProps; export type BuildUserOpOptions = { + /** overrides: Explicitly set gas values */ overrides?: Overrides; + /** Not currently in use */ skipBundlerGasEstimation?: boolean; + /** params relevant to the module, mostly relevant to sessions */ params?: ModuleInfo; + /** nonceOptions: For overriding the nonce */ nonceOptions?: NonceOptions; + /** forceEncodeForBatch: For encoding the user operation for batch */ forceEncodeForBatch?: boolean; + /** paymasterServiceData: Options specific to transactions that involve a paymaster */ paymasterServiceData?: PaymasterUserOperationDto; + /** simulationType: Determine which parts of the tx a bundler will simulate: "validation" | "validation_and_execution". */ simulationType?: SimulationType; }; export type NonceOptions = { + /** nonceKey: The key to use for nonce */ nonceKey?: number; + /** nonceOverride: The nonce to use for the transaction */ nonceOverride?: number; }; export type SimulationType = "validation" | "validation_and_execution"; export type Overrides = { + /* Value used by inner account execution */ callGasLimit?: Hex; + /* Actual gas used by the validation of this UserOperation */ verificationGasLimit?: Hex; + /* Gas overhead of this UserOperation */ preVerificationGas?: Hex; + /* Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) */ maxFeePerGas?: Hex; + /* Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) */ maxPriorityFeePerGas?: Hex; + /* Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster ("0x" for self-sponsored transaction) */ paymasterData?: Hex; + /* Data passed into the account along with the nonce during the verification step */ signature?: Hex; }; @@ -176,16 +183,23 @@ export type InitilizationData = { export type PaymasterUserOperationDto = SponsorUserOperationDto & FeeQuotesOrDataDto & { + /** mode: sponsored or erc20 */ mode: PaymasterMode; + /** Always recommended, especially when using token paymaster */ calculateGasLimits?: boolean; + /** Expiry duration in seconds */ expiryDuration?: number; - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }; + /** Webhooks to be fired after user op is sent */ + webhookData?: Record; + /** Smart account meta data */ smartAccountInfo?: SmartAccountData; + /** the fee-paying token address */ + feeTokenAddress?: string; + /** The fee quote */ feeQuote?: PaymasterFeeQuote; + /** The address of the spender. This is usually set to FeeQuotesOrDataResponse.tokenPaymasterAddress */ spender?: Hex; + /** Not recommended */ maxApproval?: boolean; }; @@ -196,24 +210,35 @@ export type InitializeV2Data = { export type EstimateUserOpGasParams = { userOp: Partial; overrides?: Overrides; + /** Currrently has no effect */ skipBundlerGasEstimation?: boolean; + /** paymasterServiceData: Options specific to transactions that involve a paymaster */ paymasterServiceData?: SponsorUserOperationDto; }; export interface TransactionDetailsForUserOp { + /** target: The address of the contract to call */ target: string; + /** data: The data to send to the contract */ data: string; + /** value: The value to send to the contract */ value?: BigNumberish; + /** gasLimit: The gas limit to use for the transaction */ gasLimit?: BigNumberish; + /** maxFeePerGas: The maximum fee per gas to use for the transaction */ maxFeePerGas?: BigNumberish; + /** maxPriorityFeePerGas: The maximum priority fee per gas to use for the transaction */ maxPriorityFeePerGas?: BigNumberish; + /** nonce: The nonce to use for the transaction */ nonce?: BigNumberish; } export type CounterFactualAddressParam = { index?: number; validationModule?: BaseValidationModule; + /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ scanForUpgradedAccountsFromV1?: boolean; + /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ maxIndexForScan?: number; }; @@ -226,17 +251,25 @@ export type QueryParamsForAddressResolver = { }; export type SmartAccountInfo = { + /** accountAddress: The address of the smart account */ accountAddress: Hex; + /** factoryAddress: The address of the smart account factory */ factoryAddress: Hex; + /** currentImplementation: The address of the current implementation */ currentImplementation: string; + /** currentVersion: The version of the smart account */ currentVersion: string; + /** factoryVersion: The version of the factory */ factoryVersion: string; + /** deploymentIndex: The index of the deployment */ deploymentIndex: BigNumberish; }; -type ValueOrData = RequireAtLeastOne< +export type ValueOrData = RequireAtLeastOne< { + /** Value to send in wei */ value: BigNumberish; + /** Data to send. Hex */ data: string; }, "value" | "data" diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index c4cce04fc..d56bc010b 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -7,10 +7,57 @@ import { ERC20_ABI } from "@biconomy/modules"; describe("Account Tests", () => { let mumbai: TestData; + let baseGoerli: TestData; beforeEach(() => { // @ts-ignore: Comes from setup-e2e-tests - [mumbai] = testDataPerChain; + [mumbai, baseGoerli] = testDataPerChain; + }); + + it("should have addresses", async () => { + const { + whale: { viemWallet: signer, publicAddress: sender }, + minnow: { viemWallet: recipientSigner, publicAddress: recipient }, + bundlerUrl, + } = mumbai; + + const { + whale: { viemWallet: signerBase, publicAddress: senderBase }, + minnow: { viemWallet: recipientSignerBase, publicAddress: recipientBase }, + bundlerUrl: bundlerUrlBase, + } = baseGoerli; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const reciepientSmartAccount = await createSmartAccountClient({ + signer: recipientSigner, + bundlerUrl, + }); + + const smartAccountBase = await createSmartAccountClient({ + signer: signerBase, + bundlerUrl: bundlerUrlBase, + }); + + const reciepientSmartAccountBase = await createSmartAccountClient({ + signer: recipientSignerBase, + bundlerUrl, + }); + + const addresses = await Promise.all([ + sender, + smartAccount.getAddress(), + recipient, + reciepientSmartAccount.getAddress(), + senderBase, + smartAccountBase.getAddress(), + recipientBase, + reciepientSmartAccountBase.getAddress(), + ]); + expect(addresses.every(Boolean)).toBeTruthy(); }); it("should send some native token to a recipient", async () => { @@ -21,13 +68,13 @@ describe("Account Tests", () => { publicClient, } = mumbai; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, }); const balance = (await checkBalance(publicClient, recipient)) as bigint; - const { wait } = await smartWallet.sendTransaction( + const { wait } = await smartAccount.sendTransaction( { to: recipient, value: 1, @@ -52,13 +99,13 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, } = mumbai; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, biconomyPaymasterApiKey, bundlerUrl, }); - const paymaster = smartWallet.paymaster; + const paymaster = smartAccount.paymaster; expect(paymaster).not.toBeNull(); expect(paymaster).not.toBeUndefined(); }); @@ -72,7 +119,7 @@ describe("Account Tests", () => { publicClient, } = mumbai; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey, @@ -91,9 +138,9 @@ describe("Account Tests", () => { const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const maticBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress()); + const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress()); - const response = await smartWallet.sendTransaction(transaction, { + const response = await smartAccount.sendTransaction(transaction, { paymasterServiceData: { mode: PaymasterMode.SPONSORED }, simulationType: "validation", }); @@ -102,7 +149,7 @@ describe("Account Tests", () => { expect(userOpReceipt.userOpHash).toBeTruthy(); expect(userOpReceipt.success).toBe("true"); - const maticBalanceAfter = await checkBalance(publicClient, await smartWallet.getAddress()); + const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress()); expect(maticBalanceAfter).toEqual(maticBalanceBefore); @@ -120,7 +167,7 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, } = mumbai; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey, @@ -138,10 +185,10 @@ describe("Account Tests", () => { }; const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const maticBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress()); - const usdcBalanceBefore = await checkBalance(publicClient, await smartWallet.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); + const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress()); + const usdcBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); - const { wait } = await smartWallet.sendTransaction([transaction], { + const { wait } = await smartAccount.sendTransaction([transaction], { paymasterServiceData: { mode: PaymasterMode.ERC20, preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", @@ -158,10 +205,10 @@ describe("Account Tests", () => { expect(userOpHash).toBeTruthy(); expect(success).toBe("true"); - const maticBalanceAfter = await checkBalance(publicClient, await smartWallet.getAddress()); + const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress()); expect(maticBalanceAfter).toEqual(maticBalanceBefore); - const usdcBalanceAfter = await checkBalance(publicClient, await smartWallet.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); + const usdcBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); expect(usdcBalanceAfter).toBeLessThan(usdcBalanceBefore); const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; @@ -176,7 +223,7 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, } = mumbai; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey, @@ -193,7 +240,7 @@ describe("Account Tests", () => { data: encodedCall, }; - const feeQuotesResponse = await smartWallet.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20 } }); + const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20 } }); expect(feeQuotesResponse.feeQuotes?.length).toBeGreaterThan(1); }); @@ -207,13 +254,13 @@ describe("Account Tests", () => { publicClient, } = mumbai; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey, }); - const smartWalletAddress = await smartWallet.getAddress(); + const smartAccountAddress = await smartAccount.getAddress(); const encodedCall = encodeFunctionData({ abi: parseAbi(["function safeMint(address _to)"]), @@ -226,7 +273,7 @@ describe("Account Tests", () => { data: encodedCall, }; - const feeQuotesResponse = await smartWallet.getTokenFees(transaction, { + const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20, preferredToken, @@ -242,27 +289,27 @@ describe("Account Tests", () => { publicClient, }); - const allowanceBefore = (await contract.read.allowance([smartWalletAddress, spender])) as bigint; + const allowanceBefore = (await contract.read.allowance([smartAccountAddress, spender])) as bigint; if (allowanceBefore > 0) { - const setAllowanceToZeroTransaction = await (smartWallet?.paymaster as IHybridPaymaster)?.buildTokenApprovalTransaction({ + const setAllowanceToZeroTransaction = await (smartAccount?.paymaster as IHybridPaymaster)?.buildTokenApprovalTransaction({ feeQuote: { ...selectedFeeQuote, maxGasFee: 0 }, spender, }); - const { wait } = await smartWallet.sendTransaction([setAllowanceToZeroTransaction]); + const { wait } = await smartAccount.sendTransaction([setAllowanceToZeroTransaction]); const { success } = await wait(); expect(success).toBe("true"); - const allowanceAfter = (await contract.read.allowance([smartWalletAddress, spender])) as bigint; + const allowanceAfter = (await contract.read.allowance([smartAccountAddress, spender])) as bigint; expect(allowanceAfter).toBe(0n); } const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const maticBalanceBefore = await checkBalance(publicClient, smartWalletAddress); - const usdcBalanceBefore = await checkBalance(publicClient, smartWalletAddress, preferredToken); + const maticBalanceBefore = await checkBalance(publicClient, smartAccountAddress); + const usdcBalanceBefore = await checkBalance(publicClient, smartAccountAddress, preferredToken); - const { wait } = await smartWallet.sendTransaction(transaction, { + const { wait } = await smartAccount.sendTransaction(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20, feeQuote: selectedFeeQuote, @@ -280,10 +327,10 @@ describe("Account Tests", () => { expect(success).toBe("true"); expect(transactionHash).toBeTruthy(); - const maticBalanceAfter = await checkBalance(publicClient, smartWalletAddress); + const maticBalanceAfter = await checkBalance(publicClient, smartAccountAddress); expect(maticBalanceAfter).toEqual(maticBalanceBefore); - const usdcBalanceAfter = await checkBalance(publicClient, smartWalletAddress, preferredToken); + const usdcBalanceAfter = await checkBalance(publicClient, smartAccountAddress, preferredToken); expect(usdcBalanceAfter).toBeLessThan(usdcBalanceBefore); const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; @@ -298,7 +345,7 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, } = mumbai; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey, @@ -315,7 +362,7 @@ describe("Account Tests", () => { data: encodedCall, }; - const feeQuotesResponse: FeeQuotesOrDataResponse = await smartWallet.getTokenFees(transaction, { + const feeQuotesResponse: FeeQuotesOrDataResponse = await smartAccount.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20, preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", @@ -323,7 +370,7 @@ describe("Account Tests", () => { }); expect(async () => - smartWallet.sendTransaction(transaction, { + smartAccount.sendTransaction(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20, feeQuote: feeQuotesResponse.feeQuotes?.[0], @@ -342,7 +389,7 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, } = mumbai; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, biconomyPaymasterApiKey, bundlerUrl, @@ -370,7 +417,7 @@ describe("Account Tests", () => { args: [userOp], }); - const hash = await smartWallet.getUserOpHash(userOp); + const hash = await smartAccount.getUserOpHash(userOp); expect(hash).toBe(epHash); }, 30000); @@ -382,13 +429,13 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, } = mumbai; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, biconomyPaymasterApiKey, bundlerUrl, }); - const accountAddress = await smartWallet.getAccountAddress(); + const accountAddress = await smartAccount.getAccountAddress(); const byteCode = await publicClient.getBytecode({ address: accountAddress as Hex }); expect(byteCode?.length).toBeGreaterThan(2); @@ -402,11 +449,11 @@ describe("Account Tests", () => { bundlerUrl, } = mumbai; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, }); - expect(ecdsaOwnershipModule).toBe(smartWallet.activeValidationModule.getAddress()); + expect(ecdsaOwnershipModule).toBe(smartAccount.activeValidationModule.getAddress()); }); }); diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 4d74c1450..68168bcfc 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -14,31 +14,31 @@ describe("Account Tests", () => { [ganache] = testDataPerChain; }); - it("should create a smartWalletClient from an ethers signer", async () => { + it("should create a smartAccountClient from an ethers signer", async () => { const { bundlerUrl, minnow: { ethersSigner: signer }, } = ganache; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, }); - const address = await smartWallet.getAccountAddress(); + const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); }); - it("should create a smartWalletClient from a walletClient", async () => { + it("should create a smartAccountClient from a walletClient", async () => { const { whale: { viemWallet: signer }, bundlerUrl, } = ganache; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, }); - const address = await smartWallet.getAccountAddress(); + const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); }); @@ -63,7 +63,7 @@ describe("Account Tests", () => { transport: http(newRpcUrl), }); - const [smartWalletFromEthersWithNewRpc, smartWalletFromViemWithNewRpc, smartWalletFromEthersWithOldRpc, smartWalletFromViemWithOldRpc] = + const [smartAccountFromEthersWithNewRpc, smartAccountFromViemWithNewRpc, smartAccountFromEthersWithOldRpc, smartAccountFromViemWithOldRpc] = await Promise.all([ createSmartAccountClient({ chainId, @@ -88,45 +88,45 @@ describe("Account Tests", () => { ]); const [ - smartWalletFromEthersWithNewRpcAddress, - smartWalletFromViemWithNewRpcAddress, - smartWalletFromEthersWithOldRpcAddress, - smartWalletFromViemWithOldRpcAddress, + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress, ] = await Promise.all([ - smartWalletFromEthersWithNewRpc.getAccountAddress(), - smartWalletFromViemWithNewRpc.getAccountAddress(), - smartWalletFromEthersWithOldRpc.getAccountAddress(), - smartWalletFromViemWithOldRpc.getAccountAddress(), + smartAccountFromEthersWithNewRpc.getAccountAddress(), + smartAccountFromViemWithNewRpc.getAccountAddress(), + smartAccountFromEthersWithOldRpc.getAccountAddress(), + smartAccountFromViemWithOldRpc.getAccountAddress(), ]); expect( [ - smartWalletFromEthersWithNewRpcAddress, - smartWalletFromViemWithNewRpcAddress, - smartWalletFromEthersWithOldRpcAddress, - smartWalletFromViemWithOldRpcAddress, + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress, ].every(Boolean), ).toBeTruthy(); - expect(smartWalletFromEthersWithNewRpc.rpcProvider.transport.url).toBe(newRpcUrl); - expect(smartWalletFromViemWithNewRpc.rpcProvider.transport.url).toBe(newRpcUrl); - expect(smartWalletFromEthersWithOldRpc.rpcProvider.transport.url).toBe(defaultRpcUrl); - expect(smartWalletFromViemWithOldRpc.rpcProvider.transport.url).toBe(defaultRpcUrl); + expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe(newRpcUrl); + expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe(newRpcUrl); + expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe(defaultRpcUrl); + expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe(defaultRpcUrl); }); - it("should create a smartWalletClient from a signer and chainId", async () => { + it("should create a smartAccountClient from a signer and chainId", async () => { const { chainId, whale: { alchemyWalletClientSigner: signer }, bundlerUrl, } = ganache; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ chainId, signer, bundlerUrl, }); - const address = await smartWallet.getAccountAddress(); + const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); }); @@ -136,11 +136,11 @@ describe("Account Tests", () => { whale: { viemWallet: signer }, } = ganache; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, }); - const address = await smartWallet.getAccountAddress(); + const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); }); @@ -152,15 +152,15 @@ describe("Account Tests", () => { minnow: { publicAddress: recipient }, } = ganache; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ entryPointAddress, signer, bundlerUrl, }); - const address = await smartWallet.getAccountAddress(); + const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); - const builtUserOp = await smartWallet.buildUserOp([{ to: recipient, value: 1, data: "0x" }]); + const builtUserOp = await smartAccount.buildUserOp([{ to: recipient, value: 1, data: "0x" }]); console.log("builtUserOp", builtUserOp); expect(builtUserOp?.nonce?.toString()).toBe("0x0"); }); @@ -171,12 +171,12 @@ describe("Account Tests", () => { whale: { viemWallet: signer }, } = ganache; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, }); - const module = smartWallet.activeValidationModule; + const module = smartAccount.activeValidationModule; expect(module).toBeTruthy(); }); @@ -190,16 +190,16 @@ describe("Account Tests", () => { const paymasterUrl = "https://paymaster.biconomy.io/api/v1/80001/" + biconomyPaymasterApiKey; const paymaster = new Paymaster({ paymasterUrl }); - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, paymaster, }); - expect(smartWallet.paymaster).not.toBeNull(); - expect(smartWallet.paymaster).not.toBeUndefined(); + expect(smartAccount.paymaster).not.toBeNull(); + expect(smartAccount.paymaster).not.toBeUndefined(); }, 10000); - it("should fail to create a smartWalletClient from a walletClient without a chainId", async () => { + it("should fail to create a smartAccountClient from a walletClient without a chainId", async () => { const { bundlerUrl } = ganache; const account = privateKeyToAccount(generatePrivateKey()); @@ -218,7 +218,7 @@ describe("Account Tests", () => { ); }); - it("should fail to create a smartWalletClient from a walletClient without an account", async () => { + it("should fail to create a smartAccountClient from a walletClient without an account", async () => { const { bundlerUrl } = ganache; const viemWalletNoAccount = createWalletClient({ diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 93be7cadd..678cd9259 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -78,8 +78,7 @@ export class Bundler implements IBundler { } /** - * - * @param chainId + * @param userOpHash * @description This function will fetch gasPrices from bundler * @returns Promise */ @@ -267,7 +266,6 @@ export class Bundler implements IBundler { /** * * @param userOpHash - * @param chainId * @description this function will return UserOpByHashResponse for given UserOpHash * @returns Promise */ diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index c23697293..504819848 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -14,17 +14,24 @@ export type Bundlerconfig = { export type BunderConfigWithChainId = Bundlerconfig & { chainId: number }; export type UserOpReceipt = { + /* The request hash of the UserOperation. */ userOpHash: string; + /* The entry point address used for the UserOperation. */ entryPoint: string; - sender: string; - nonce: number; + /* The paymaster used for this UserOperation (or empty). */ paymaster: string; + /* The actual amount paid (by account or paymaster) for this UserOperation. */ actualGasCost: Hex; + /* The total gas used by this UserOperation (including preVerification, creation, validation, and execution). */ actualGasUsed: Hex; + /* Indicates whether the execution completed without reverting. */ success: "true" | "false"; + /* In case of revert, this is the revert reason. */ reason: string; + /* The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle). */ logs: Array; // The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle) - receipt: any; // TODO: define receipt type + /* The TransactionReceipt object for the entire bundle, not only for this UserOperation. */ + receipt: any; }; // review diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 187039f50..b4b96a2c7 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -40,10 +40,6 @@ export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleCo nodeClientUrl?: string; smartAccountAddress: string; storageType?: StorageType; - - // sessionSigner?: Signer - // sessionPubKey?: string - // nodeClientUrl?: string } export enum StorageType { diff --git a/packages/modules/tests/modules.spec.ts b/packages/modules/tests/modules.spec.ts index ef1967365..9785b2d2d 100644 --- a/packages/modules/tests/modules.spec.ts +++ b/packages/modules/tests/modules.spec.ts @@ -18,11 +18,11 @@ describe("Account Tests", () => { const defaultValidationModule = await createMultiChainValidationModule({ signer }); // Should not require a signer or chainId - const smartWallet = await createSmartAccountClient({ bundlerUrl, defaultValidationModule }); - const address = await smartWallet.getAccountAddress(); + const smartAccount = await createSmartAccountClient({ bundlerUrl, defaultValidationModule }); + const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); // expect the relevant module to be set - expect(smartWallet.activeValidationModule).toEqual(defaultValidationModule); + expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); }); it("should create a ECDSAOwnershipValidationModule from a viem signer using convertSigner", async () => { @@ -33,13 +33,13 @@ describe("Account Tests", () => { const defaultValidationModule = await createECDSAOwnershipValidationModule({ signer }); // Should not require a signer or chainId - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ bundlerUrl, defaultValidationModule, }); - const address = await smartWallet.getAccountAddress(); + const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); // expect the relevant module to be set - expect(smartWallet.activeValidationModule).toEqual(defaultValidationModule); + expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); }); }); diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index ad0467cd2..87b139cf0 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -40,7 +40,7 @@ describe("Account Tests", () => { expect(sessionSigner).toBeTruthy(); // Create smart account - let smartWallet = await createSmartAccountClient({ + let smartAccount = await createSmartAccountClient({ chainId, signer: sessionSigner, bundlerUrl, @@ -51,7 +51,7 @@ describe("Account Tests", () => { // Create session module const sessionModule = await createSessionKeyManagerModule({ moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, - smartAccountAddress: await smartWallet.getAddress(), + smartAccountAddress: await smartAccount.getAddress(), sessionStorageClient: sessionFileStorage, }); @@ -87,9 +87,9 @@ describe("Account Tests", () => { // Check if module is enabled - const isEnabled = await smartWallet.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); + const isEnabled = await smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); if (!isEnabled) { - const enableModuleTrx = await smartWallet.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); + const enableModuleTrx = await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); txArray.push(enableModuleTrx); txArray.push(setSessionAllowedTrx); } else { @@ -97,9 +97,9 @@ describe("Account Tests", () => { txArray.push(setSessionAllowedTrx); } - const userOp = await smartWallet.buildUserOp(txArray); + const userOp = await smartAccount.buildUserOp(txArray); - const userOpResponse1 = await smartWallet.sendUserOp(userOp); + const userOpResponse1 = await smartAccount.sendUserOp(userOp); const transactionDetails = await userOpResponse1.wait(); console.log("Tx Hash: ", transactionDetails.receipt.transactionHash); @@ -114,11 +114,11 @@ describe("Account Tests", () => { data: encodedCall, }; - smartWallet = smartWallet.setActiveValidationModule(sessionModule); + smartAccount = smartAccount.setActiveValidationModule(sessionModule); - const maticBalanceBefore = await checkBalance(publicClient, await smartWallet.getAccountAddress()); + const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAccountAddress()); - const transferUserOp = await smartWallet.buildUserOp([transferTx], { + const transferUserOp = await smartAccount.buildUserOp([transferTx], { params: { sessionSigner: sessionSigner, sessionValidationModule: erc20ModuleAddr.toLowerCase() as Hex, @@ -132,7 +132,7 @@ describe("Account Tests", () => { expect(transferUserOp.paymasterAndData).not.toBeNull(); expect(transferUserOp.paymasterAndData).not.toBe("0x"); - const userOpResponse2 = await smartWallet.sendTransaction(transferTx, { + const userOpResponse2 = await smartAccount.sendTransaction(transferTx, { params: { sessionSigner: sessionSigner, sessionValidationModule: erc20ModuleAddr.toLowerCase() as Hex, @@ -145,7 +145,7 @@ describe("Account Tests", () => { expect(userOpResponse2.userOpHash).toBeTruthy(); expect(userOpResponse2.userOpHash).not.toBeNull(); - const maticBalanceAfter = await checkBalance(publicClient, await smartWallet.getAccountAddress()); + const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAccountAddress()); expect(maticBalanceAfter).toEqual(maticBalanceBefore); diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 64ba5c99f..7cd7a0392 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -328,7 +328,7 @@ export class BiconomyPaymaster implements IHybridPaymaster, diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index 670602daf..f8a6bb398 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -7,8 +7,6 @@ export type PaymasterServiceErrorResponse = { error: JsonRpcError; }; -// Generic -/* eslint-disable @typescript-eslint/no-explicit-any */ export type JsonRpcResponse = { jsonrpc: string; id: number; @@ -16,7 +14,6 @@ export type JsonRpcResponse = { error?: JsonRpcError; }; -/* eslint-disable @typescript-eslint/no-explicit-any */ export type JsonRpcError = { code: string; message: string; @@ -29,27 +26,34 @@ export type PaymasterConfig = { }; export type SponsorUserOperationDto = { + /** mode: sponsored or erc20 */ mode: PaymasterMode; + /** Always recommended, especially when using token paymaster */ calculateGasLimits?: boolean; + /** Expiry duration in seconds */ expiryDuration?: number; - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }; + /** Webhooks to be fired after user op is sent */ + webhookData?: Record; + /** Smart account meta data */ smartAccountInfo?: SmartAccountData; + /** the fee-paying token address */ feeTokenAddress?: string; }; export type FeeQuotesOrDataDto = { + /** mode: sponsored or erc20 */ mode?: PaymasterMode; + /** Expiry duration in seconds */ expiryDuration?: number; + /** Always recommended, especially when using token paymaster */ calculateGasLimits?: boolean; + /** List of tokens to be used for fee quotes, if ommitted fees for all supported will be returned */ tokenList?: string[]; + /** preferredToken: Can be ommitted to return all quotes */ preferredToken?: string; - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }; + /** Webhooks to be fired after user op is sent */ + webhookData?: Record; + /** Smart account meta data */ smartAccountInfo?: SmartAccountData; }; @@ -63,49 +67,68 @@ export type FeeTokenInfo = { }; export type SponsorpshipInfo = { - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }; + /** Webhooks to be fired after user op is sent */ + webhookData?: Record; + /** Smart account meta data */ smartAccountInfo: SmartAccountData; }; export type SmartAccountData = { + /** name: Name of the smart account */ name: string; + /** version: Version of the smart account */ version: string; }; export type PaymasterFeeQuote = { + /** symbol: Token symbol */ symbol: string; + /** tokenAddress: Token address */ tokenAddress: string; + /** decimal: Token decimal */ decimal: number; logoUrl?: string; + /** maxGasFee: in wei */ maxGasFee: number; + /** maxGasFee: in dollars */ maxGasFeeUSD?: number; usdPayment?: number; premiumPercentage: number; + /** validUntil: Unix timestamp */ validUntil?: number; }; export type BiconomyTokenPaymasterRequest = { + /** The feeQuote to be used for the transaction */ feeQuote: PaymasterFeeQuote; + /** The address of the spender. This is usually set to {@link FeeQuotesOrDataResponse.tokenPaymasterAddress} */ spender: Hex; + /** Not recommended */ maxApproval?: boolean; }; export type FeeQuotesOrDataResponse = { + /** Array of results from the paymaster */ feeQuotes?: PaymasterFeeQuote[]; + /** Normally set to the spender in the proceeding call to send the tx */ tokenPaymasterAddress?: Hex; + /** Normally set to the spender in the proceeding call to send the tx */ paymasterAndData?: Uint8Array | Hex; + /* Gas overhead of this UserOperation */ preVerificationGas?: BigNumberish; + /* Actual gas used by the validation of this UserOperation */ verificationGasLimit?: BigNumberish; + /* Value used by inner account execution */ callGasLimit?: BigNumberish; }; export type PaymasterAndDataResponse = { paymasterAndData: Hex; + /* Gas overhead of this UserOperation */ preVerificationGas: number; + /* Actual gas used by the validation of this UserOperation */ verificationGasLimit: number; + /* Value used by inner account execution */ callGasLimit: number; }; @@ -124,9 +147,11 @@ export type EstimateUserOpGasResponse = { export type UserOpGasResponse = { paymasterAndData: string; + /* Gas overhead of this UserOperation */ preVerificationGas: string; maxPriorityFeePerGas: string; maxFeePerGas: string; + /* Actual gas used by the validation of this UserOperation */ verificationGasLimit: string; callGasLimit: string; }; From 22d5de3d1b2d992087581f3e72e8c033381b7cd7 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Sun, 4 Feb 2024 22:04:59 +0400 Subject: [PATCH 1081/1247] update lockfile --- yarn.lock | 107 +++++++++++++++++++++++++++++------------------------- 1 file changed, 57 insertions(+), 50 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7e80f234f..adc0f4520 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1838,9 +1838,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.12" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.12.tgz#4e109c646a00e02de0a3701ea899e4c805b010e3" - integrity sha512-bYD9R+YjKkgubvLvDBrAavIHqK3AvleHHz5X5Y36EpuyeTgb/uqUc/MSkM7s4KGD26voOui5swrshLGRLrfqvw== + version "1.3.16" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.16.tgz#5b56104b0d7a6c87d17eb7f2d597ee358a430cd9" + integrity sha512-vr30c56QmMMxXP59hL4MysdmKNHCD2JmMEdhfly5C+HB+N4p/a7ioblioatRIukgZPP9/Qnc7TPJISGlQaGWpA== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -2649,12 +2649,12 @@ args@5.0.3: mri "1.1.4" 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== + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" + call-bind "^1.0.5" + is-array-buffer "^3.0.4" array-differ@^3.0.0: version "3.0.0" @@ -2772,7 +2772,7 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -available-typed-arrays@^1.0.5: +available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== @@ -3158,7 +3158,7 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: +call-bind@^1.0.0, call-bind@^1.0.2, 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== @@ -3197,9 +3197,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001580: - version "1.0.30001582" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001582.tgz#db3070547ce0b48d9f44a509b86c4a02ba5d9055" - integrity sha512-vsJG3V5vgfduaQGVxL53uSX/HUzxyr2eA8xCo36OLal7sRcSZbibJtLeh0qja4sFOr/QQGt4opB4tOy+eOgAxg== + version "1.0.30001583" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz#abb2970cc370801dc7e27bf290509dc132cfa390" + integrity sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q== case@^1.6.3: version "1.6.3" @@ -3908,9 +3908,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.648: - version "1.4.653" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.653.tgz#832ab25e80ad698ac09c1ca547bd9ee6cce7df10" - integrity sha512-wA2A2LQCqnEwQAvwADQq3KpMpNwgAUBnRmrFgRzHnPhbQUFArTR32Ab46f4p0MovDLcg4uqd4nCsN2hTltslpA== + version "1.4.656" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.656.tgz#b374fb7cab9b782a5bc967c0ce0e19826186b9c9" + integrity sha512-9AQB5eFTHyR3Gvt2t/NwR0le2jBSUNwCnMbUCejFWHD+so4tH40/dRLgoE+jxlPeWS43XJewyvCv+I8LPMl49Q== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -4051,6 +4051,11 @@ es-abstract@^1.22.1: unbox-primitive "^1.0.2" which-typed-array "^1.1.13" +es-errors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.0.0.tgz#1936450fb8cff7bffb969335d0e55dfca7279aab" + integrity sha512-yHV74THqMJUyFKkHyN7hyENcEZM3Dj2a2IrdClY+IT4BFQHkIVwlh8s6uZfjsFydMdNHv0F5mWgAA3ajFbsvVQ== + 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" @@ -4857,11 +4862,12 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, 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== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.3.tgz#9d2d284a238e62672f556361e7d4e1a4686ae50e" + integrity sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ== dependencies: + es-errors "^1.0.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" @@ -5235,10 +5241,12 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.1.tgz#5d242715a441a1c9a46d543e6dbead8defdfc226" - integrity sha512-6J4rC9ROz0UkOpjn0BRtSSqlewDTDYJNQvy8N8RSrPCduUWId1o9BQPEVII/KKBqRk/ZIQff1YbRkUDCH2N5Sg== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" has-unicode@2.0.1, has-unicode@^2.0.1: version "2.0.1" @@ -5527,14 +5535,13 @@ ip@^2.0.0: resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== -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== +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" @@ -5744,11 +5751,11 @@ is-text-path@^1.0.1: text-extensions "^1.0.0" is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== dependencies: - which-typed-array "^1.1.11" + which-typed-array "^1.1.14" is-unicode-supported@^0.1.0: version "0.1.0" @@ -7978,9 +7985,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^3.0.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.4.tgz#4723cadeac2ce7c9227de758e5ff9b14e075f283" - integrity sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" @@ -8065,9 +8072,9 @@ pure-rand@^6.0.0: integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== query-string@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-8.1.0.tgz#e7f95367737219544cd360a11a4f4ca03836e115" - integrity sha512-BFQeWxJOZxZGix7y+SByG3F36dA0AbTy9o6pSmKFcFz7DAj0re9Frkty3saBn3nHo3D0oZJ/+rx3r8H8r8Jbpw== + version "8.2.0" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-8.2.0.tgz#f0b0ef6caa85f525dbdb745a67d3f8c08d71cc6b" + integrity sha512-tUZIw8J0CawM5wyGBiDOAp7ObdRQh4uBor/fUR9ZjmbZVvw95OD9If4w3MQxr99rg0DJZ/9CIORcpEqU5hQG7g== dependencies: decode-uri-component "^0.4.1" filter-obj "^5.1.0" @@ -9572,16 +9579,16 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11, 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== +which-typed-array@^1.1.13, which-typed-array@^1.1.14: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.0" + has-tostringtag "^1.0.1" which@^1.2.10, which@^1.2.14: version "1.3.1" @@ -9619,9 +9626,9 @@ widest-line@^3.1.0: string-width "^4.0.0" winston-transport@^4.5.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.6.0.tgz#f1c1a665ad1b366df72199e27892721832a19e1b" - integrity sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg== + version "4.7.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" + integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== dependencies: logform "^2.3.2" readable-stream "^3.6.0" From b905dcf3f7849396573fc8b51f808cc68061ee11 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Sun, 4 Feb 2024 20:37:22 +0200 Subject: [PATCH 1082/1247] Added string as a supported Transaction value type (#404) Co-authored-by: GabiDev Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> --- packages/account/src/utils/Types.ts | 4 +--- packages/paymaster/src/utils/Types.ts | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 1319f3b72..5f7e99864 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -267,9 +267,7 @@ export type SmartAccountInfo = { export type ValueOrData = RequireAtLeastOne< { - /** Value to send in wei */ - value: BigNumberish; - /** Data to send. Hex */ + value: BigNumberish | string; data: string; }, "value" | "data" diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index f8a6bb398..e4f07e877 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -156,8 +156,18 @@ export type UserOpGasResponse = { callGasLimit: string; }; +type RequireAtLeastOne = Pick> & + { + [K in Keys]-?: Required> & Partial>>; + }[Keys]; + +type ValueOrData = RequireAtLeastOne< + { + value: BigNumberish | string; + data: string; + }, + "value" | "data" +>; export type Transaction = { to: string; - value: BigNumberish; - data: string; -}; +} & ValueOrData; From ec36bc99e298c498efe304c8e2b73ea5eefad178 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Sun, 4 Feb 2024 20:59:13 +0200 Subject: [PATCH 1083/1247] Added export for UserOpStatus type from /account (#403) * Exported UserOpStatus type from /account * update lockfile --------- Co-authored-by: GabiDev Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> --- packages/account/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index 0e43f9dd2..56c71d9bf 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -16,7 +16,7 @@ export { type FeeQuotesOrDataResponse, } from "@biconomy/paymaster"; export { EthersSigner, convertSigner } from "@biconomy/common"; -export { Bundler, type IBundler, extractChainIdFromBundlerUrl, type UserOpResponse, type UserOpReceipt } from "@biconomy/bundler"; +export { Bundler, type IBundler, extractChainIdFromBundlerUrl, type UserOpResponse, type UserOpStatus, type UserOpReceipt } from "@biconomy/bundler"; export { createECDSAOwnershipValidationModule, createERC20SessionValidationModule, From 4971287fb263f5f49d56500897a7be4abbbcceab Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Sun, 4 Feb 2024 21:06:06 +0200 Subject: [PATCH 1084/1247] Added needed exports from modules (#402) * Added needed exports from modules * update lockfile --------- Co-authored-by: GabiDev Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> --- packages/account/src/index.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index 56c71d9bf..c2d85b676 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -23,6 +23,10 @@ export { createBatchedSessionRouterModule, createSessionKeyManagerModule, createMultiChainValidationModule, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + DEFAULT_SESSION_KEY_MANAGER_MODULE, + DEFAULT_MULTICHAIN_MODULE, + DEFAULT_BATCHED_SESSION_ROUTER_MODULE, } from "@biconomy/modules"; export const createSmartAccountClient = BiconomySmartAccountV2.create; From 2ee540edebdc52186303f23df8a24db6163fdf00 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Tue, 6 Feb 2024 12:16:47 +0200 Subject: [PATCH 1085/1247] Added readme (#409) Co-authored-by: GabiDev --- README.md | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 138 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ea01fe4f9..00c720607 100644 --- a/README.md +++ b/README.md @@ -1 +1,138 @@ -packages/account/README.md +# Biconomy SDK + +![Biconomy SDK](https://img.shields.io/badge/Biconomy-SDK-blue.svg) +![TypeScript](https://img.shields.io/badge/-TypeScript-blue) +![Test Coverage](https://img.shields.io/badge/Coverage-79.82%25-green.svg) + +## 👋 Introduction + +The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. It is designed for seamless user experiences and offers non-custodial solutions for user onboarding, sending transactions (userOps), gas sponsorship and much more. + +## 🛠️ Quickstart + +```typescript +import { createSmartAccountClient } from "@biconomy/account"; + +const smartAccount = await createSmartAccountClient({ + signer: viemWalletOrEthersSigner, + bundlerUrl: "", // From dashboard.biconomy.io + biconomyPaymasterApiKey: "", // From dashboard.biconomy.io +}); + +const { wait } = await smartAccount.sendTransaction({ to: "0x...", value: 1 }); + +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); +``` + +## 🌟 Features + +- **ERC4337 Account Abstraction**: Simplify user operations and gas payments. +- **Smart Accounts**: Enhance user experience with modular smart accounts. +- **Paymaster Service**: Enable third-party gas sponsorship. +- **Bundler Infrastructure**: Ensure efficient and reliable transaction bundling. + +For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick start [here](https://docs.biconomy.io/quickstart). + +## 📚 Resources + +- [Biconomy Documentation](https://docs.biconomy.io/) +- [Biconomy Dashboard](https://dashboard.biconomy.io) +- [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) + +## ⚙️ installation + +```bash +npm i @biconomy/account +``` + +## 💼 Example Usages + +### [Initialise the smartAccount](https://bcnmy.github.io/biconomy-client-sdk/functions/createSmartAccountClient.html) + +| Key | Description | +| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| [signer](https://bcnmy.github.io/biconomy-client-sdk/packages/account/docs/interfaces/SmartAccountSigner.html) | This signer will be used for signing userOps for any transactions you build. Will accept ethers.JsonRpcSigner as well as a viemWallet | +| [biconomyPaymasterApiKey](https://dashboard.biconomy.io) | You can pass in a biconomyPaymasterApiKey necessary for sponsoring transactions (retrieved from the biconomy dashboard) | +| [bundlerUrl](https://dashboard.biconomy.io) | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | + +```typescript +import { createSmartAccountClient } from "@biconomy/account"; +import { createWalletClient, http, createPublicClient } from "viem"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { mainnet as chain } from "viem/chains"; + +const account = privateKeyToAccount(generatePrivateKey()); +const signer = createWalletClient({ account, chain, transport: http() }); + +const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, +}); +``` + +### [Send some ETH, have gas sponsored](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#sendTransaction) + +| Key | Description | +| --------------------------------------------------------------------------------- | -------------------------------------------------------------- | +| [oneOrManyTx](https://bcnmy.github.io/biconomy-client-sdk/types/Transaction.html) | Submit multiple or one transactions | +| [userOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/types/UserOpReceipt) | Returned information about your tx, receipts, userOpHashes etc | + +```typescript +const oneOrManyTx = { to: "0x...", value: 1 }; + +const { wait } = await smartAccount.sendTransaction(oneOrManyTx, { + mode: PaymasterMode.SPONSORED, +}); + +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); +``` + +### [Mint two NFTs, pay gas with token](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#getTokenFees) + +| Key | Description | +| -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| [buildUseropDto](https://bcnmy.github.io/biconomy-client-sdk/types/BuildUserOpOptions.html) | Options for building a userOp | +| [paymasterServiceData](https://bcnmy.github.io/biconomy-client-sdk/types/PaymasterUserOperationDto.html) | PaymasterOptions set in the buildUseropDto | + +```typescript +import { encodeFunctionData, parseAbi } from "viem"; + +const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: ["0x..."], +}); + +const tx = { + to: nftAddress, + data: encodedCall, +}; +const oneOrManyTx = [tx, tx]; // Mint twice +const paymasterServiceData = { + mode: PaymasterMode.ERC20, + preferredToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC +}; +const buildUseropDto = { paymasterServiceData }; + +const { wait } = await smartAccount.sendTransaction(oneOrManyTx, buildUseropDto); + +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); +``` + +## 🤝 Contributing + +Community contributions are welcome! For guidelines on contributing, please read our [contribution guidelines](./CONTRIBUTING.md). + +## 📜 License + +This project is licensed under the MIT License. See the [LICENSE.md](./LICENSE.md) file for details. From 78db73e5b0658b96ec37f07d45c301faa237f8ad Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Tue, 6 Feb 2024 12:38:05 +0200 Subject: [PATCH 1086/1247] Commented overrides and skipBundlerGasEstimation params (#407) Co-authored-by: GabiDev --- packages/account/src/utils/Types.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 5f7e99864..0967d0f8f 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -135,9 +135,9 @@ export type BiconomySmartAccountV2ConfigConstructorProps = BiconomySmartAccountV export type BuildUserOpOptions = { /** overrides: Explicitly set gas values */ - overrides?: Overrides; + // overrides?: Overrides; /** Not currently in use */ - skipBundlerGasEstimation?: boolean; + // skipBundlerGasEstimation?: boolean; /** params relevant to the module, mostly relevant to sessions */ params?: ModuleInfo; /** nonceOptions: For overriding the nonce */ @@ -209,9 +209,9 @@ export type InitializeV2Data = { export type EstimateUserOpGasParams = { userOp: Partial; - overrides?: Overrides; + // overrides?: Overrides; /** Currrently has no effect */ - skipBundlerGasEstimation?: boolean; + // skipBundlerGasEstimation?: boolean; /** paymasterServiceData: Options specific to transactions that involve a paymaster */ paymasterServiceData?: SponsorUserOperationDto; }; From 8ce04a56f6dcdfd1f44d9534f43e3c6eb8b3885d Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 6 Feb 2024 15:45:58 +0400 Subject: [PATCH 1087/1247] V4 with viem v2 (bump aa-core and viem) (#406) * update aa-core and viem packages * update rest of the code to use updated deps * update lockfile * fix: build error --------- Co-authored-by: amanraj1608 --- packages/account/package.json | 4 +- .../account/src/BiconomySmartAccountV2.ts | 17 +-- packages/account/tests/account.e2e.spec.ts | 2 +- packages/account/tests/account.spec.ts | 6 +- packages/bundler/package.json | 4 +- packages/common/package.json | 4 +- packages/common/src/utils/EthersSigner.ts | 4 +- packages/modules/package.json | 4 +- packages/modules/tests/utils/customSession.ts | 4 +- packages/paymaster/package.json | 4 +- tests/setup-e2e-tests.ts | 6 +- tests/setup-unit-tests.ts | 6 +- yarn.lock | 102 ++++++++++-------- 13 files changed, 93 insertions(+), 74 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index 97a78f450..86ca482f6 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -65,11 +65,11 @@ "lru-cache": "^10.0.1" }, "dependencies": { - "@alchemy/aa-core": "^2.3.1", + "@alchemy/aa-core": "3.0.0-alpha.4", "@biconomy/bundler": "^3.1.3", "@biconomy/common": "^3.1.3", "@biconomy/modules": "^3.1.3", "@biconomy/paymaster": "^3.1.3", - "viem": "^1.21.4" + "viem": "^2.7.3" } } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index e0dacc13d..e5a7bfb48 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -13,7 +13,6 @@ import { http, concatHex, GetContractReturnType, - Chain, getContract, decodeFunctionData, } from "viem"; @@ -82,7 +81,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { bundler?: IBundler; - private accountContract?: GetContractReturnType; + private accountContract?: GetContractReturnType; private defaultFallbackHandlerAddress: Hex; @@ -102,7 +101,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { super({ ...biconomySmartAccountConfig, chain: getChain(biconomySmartAccountConfig.chainId), - rpcClient: biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.public.http[0], + rpcClient: biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0], entryPointAddress: (biconomySmartAccountConfig.entryPointAddress as Hex) ?? DEFAULT_ENTRYPOINT_ADDRESS, accountAddress: (biconomySmartAccountConfig.accountAddress as Hex) ?? undefined, factoryAddress: biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS, @@ -139,7 +138,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.provider = createPublicClient({ chain: getChain(biconomySmartAccountConfig.chainId), - transport: http(biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.public.http[0]), + transport: http(biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0]), }); this.scanForUpgradedAccountsFromV1 = biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false; @@ -314,12 +313,12 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } } - async _getAccountContract(): Promise> { + async _getAccountContract(): Promise> { if (this.accountContract == null) { this.accountContract = getContract({ address: await this.getAddress(), abi: BiconomyAccountAbi, - publicClient: this.provider as PublicClient, + client: this.provider as PublicClient, }); } return this.accountContract; @@ -355,7 +354,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const addressResolver = getContract({ address: ADDRESS_RESOLVER_ADDRESS, abi: AccountResolverAbi, - publicClient: this.provider as PublicClient, + client: { + public: this.provider as PublicClient, + }, }); // Note: depending on moduleAddress and moduleSetupData passed call this. otherwise could call resolveAddresses() @@ -368,7 +369,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ]); const desiredV1Account = result.find( - (smartAccountInfo) => + (smartAccountInfo: { factoryVersion: string; currentVersion: string; deploymentIndex: { toString: () => any } }) => smartAccountInfo.factoryVersion === "v1" && smartAccountInfo.currentVersion === "2.0.0" && Number(smartAccountInfo.deploymentIndex.toString()) === params.index, diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index d56bc010b..6ab35c3a3 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -286,7 +286,7 @@ describe("Account Tests", () => { const contract = getContract({ address: preferredToken, abi: parseAbi(ERC20_ABI), - publicClient, + client: publicClient, }); const allowanceBefore = (await contract.read.allowance([smartAccountAddress, spender])) as bigint; diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 68168bcfc..764fa66f7 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -51,7 +51,7 @@ describe("Account Tests", () => { } = ganache; const newRpcUrl = "http://localhost:8545"; - const defaultRpcUrl = viemChain.rpcUrls.public.http[0]; //http://127.0.0.1:8545" + const defaultRpcUrl = viemChain.rpcUrls.default.http[0]; //http://127.0.0.1:8545" const ethersProvider = new JsonRpcProvider(newRpcUrl); const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider); @@ -205,7 +205,7 @@ describe("Account Tests", () => { const account = privateKeyToAccount(generatePrivateKey()); const viemWalletClientNoChainId = createWalletClient({ account, - transport: http(localhost.rpcUrls.public.http[0]), + transport: http(localhost.rpcUrls.default.http[0]), }); expect( @@ -222,7 +222,7 @@ describe("Account Tests", () => { const { bundlerUrl } = ganache; const viemWalletNoAccount = createWalletClient({ - transport: http(localhost.rpcUrls.public.http[0]), + transport: http(localhost.rpcUrls.default.http[0]), }); expect(async () => diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 5f8a84f53..f0db322b1 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -56,9 +56,9 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "^2.3.1", + "@alchemy/aa-core": "3.0.0-alpha.4", "@biconomy/common": "^3.1.3", - "viem": "^1.21.4" + "viem": "^2.7.3" }, "devDependencies": { "@types/node": "^20.11.10", diff --git a/packages/common/package.json b/packages/common/package.json index 35c28a7ac..e61936dc0 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -54,9 +54,9 @@ "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" }, "dependencies": { - "@alchemy/aa-core": "^2.3.1", + "@alchemy/aa-core": "3.0.0-alpha.4", "@ethersproject/abstract-signer": "^5.7.0", - "viem": "^1.21.4" + "viem": "^2.7.3" }, "devDependencies": { "@types/node": "^20.11.10", diff --git a/packages/common/src/utils/EthersSigner.ts b/packages/common/src/utils/EthersSigner.ts index d0ea3e85c..e0c568803 100644 --- a/packages/common/src/utils/EthersSigner.ts +++ b/packages/common/src/utils/EthersSigner.ts @@ -1,4 +1,4 @@ -import { SignTypedDataParams, SmartAccountSigner } from "@alchemy/aa-core"; +import { SmartAccountSigner } from "@alchemy/aa-core"; import { Hex } from "viem"; import { Signer } from "@ethersproject/abstract-signer"; @@ -21,7 +21,7 @@ export class EthersSigner implements SmartAccountSigner { return this.#correctSignature(signature as Hex); } - async signTypedData(_notUsed: SignTypedDataParams): Promise { + async signTypedData(_notUsed: any): Promise { throw new Error("signTypedData is not supported for Ethers Signer"); } diff --git a/packages/modules/package.json b/packages/modules/package.json index a81f47fac..fd992415d 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -53,10 +53,10 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "^2.3.1", + "@alchemy/aa-core": "3.0.0-alpha.4", "@biconomy/common": "^3.1.3", "merkletreejs": "^0.3.11", - "viem": "^1.21.4" + "viem": "^2.7.3" }, "devDependencies": { "@types/node": "^20.11.10", diff --git a/packages/modules/tests/utils/customSession.ts b/packages/modules/tests/utils/customSession.ts index d7be68807..002bcd2a5 100644 --- a/packages/modules/tests/utils/customSession.ts +++ b/packages/modules/tests/utils/customSession.ts @@ -159,7 +159,7 @@ export class SessionFileStorage implements ISessionStorage { const client = createWalletClient({ account: accountSigner, chain: signerData.chainId, - transport: http(polygonMumbai.rpcUrls.public.http[0]), + transport: http(polygonMumbai.rpcUrls.default.http[0]), }); const walletClientSigner: SmartAccountSigner = new WalletClientSigner( client, @@ -186,7 +186,7 @@ export class SessionFileStorage implements ISessionStorage { const signer = privateKeyToAccount(signerData.pvKey); const walletClient = createWalletClient({ account: signer, - transport: http(polygonMumbai.rpcUrls.public.http[0]), + transport: http(polygonMumbai.rpcUrls.default.http[0]), }); return new WalletClientSigner(walletClient, "json-rpc"); } diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index fff0a7fa4..ea045d0c9 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -53,9 +53,9 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "^2.3.1", + "@alchemy/aa-core": "3.0.0-alpha.4", "@biconomy/common": "^3.1.3", - "viem": "^1.21.4" + "viem": "^2.7.3" }, "devDependencies": { "@types/node": "^20.11.10", diff --git a/tests/setup-e2e-tests.ts b/tests/setup-e2e-tests.ts index 417d278a4..a95150f4a 100644 --- a/tests/setup-e2e-tests.ts +++ b/tests/setup-e2e-tests.ts @@ -17,7 +17,7 @@ beforeAll(async () => { const walletTwo = privateKeyToAccount(privateKeyTwo); const promises = E2E_TEST_CHAINS.map((chain) => { - const ethersProvider = new JsonRpcProvider(chain.viemChain.rpcUrls.public.http[0]); + const ethersProvider = new JsonRpcProvider(chain.viemChain.rpcUrls.default.http[0]); const ethersSignerOne = new Wallet(privateKeyOne, ethersProvider); const ethersSignerTwo = new Wallet(privateKeyTwo, ethersProvider); @@ -29,12 +29,12 @@ beforeAll(async () => { const viemWalletClientOne = createWalletClient({ account: walletOne, chain: chain.viemChain, - transport: http(chain.viemChain.rpcUrls.public.http[0]), + transport: http(chain.viemChain.rpcUrls.default.http[0]), }); const viemWalletClientTwo = createWalletClient({ account: walletTwo, chain: chain.viemChain, - transport: http(chain.viemChain.rpcUrls.public.http[0]), + transport: http(chain.viemChain.rpcUrls.default.http[0]), }); const walletClientSignerOne = new WalletClientSigner(viemWalletClientOne, "viem"); const walletClientSignerTwo = new WalletClientSigner(viemWalletClientTwo, "viem"); diff --git a/tests/setup-unit-tests.ts b/tests/setup-unit-tests.ts index 655fa53cd..03360b043 100644 --- a/tests/setup-unit-tests.ts +++ b/tests/setup-unit-tests.ts @@ -10,13 +10,13 @@ beforeAll(() => { const privateKeyOne = generatePrivateKey(); const accountOne = privateKeyToAccount(privateKeyOne); - const ethersProvider = new JsonRpcProvider(viemChain.rpcUrls.public.http[0]); + const ethersProvider = new JsonRpcProvider(viemChain.rpcUrls.default.http[0]); const ethersSignerOne = new Wallet(privateKeyOne, ethersProvider); const viemWalletClientOne = createWalletClient({ account: accountOne, chain: viemChain, - transport: http(viemChain.rpcUrls.public.http[0]), + transport: http(viemChain.rpcUrls.default.http[0]), }); const walletClientSignerOne = new WalletClientSigner(viemWalletClientOne, "viem"); @@ -34,7 +34,7 @@ beforeAll(() => { const viemWalletClientTwo = createWalletClient({ account: accountTwo, chain: viemChain, - transport: http(viemChain.rpcUrls.public.http[0]), + transport: http(viemChain.rpcUrls.default.http[0]), }); const walletClientSignerTwo = new WalletClientSigner(viemWalletClientTwo, "viem"); const publicAddressTwo = accountTwo.address; diff --git a/yarn.lock b/yarn.lock index adc0f4520..1eb8d6402 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,14 +12,14 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== -"@alchemy/aa-core@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-2.3.1.tgz#ebd0abc2a71d1e5803cbbd0b0584a62a681c9a27" - integrity sha512-iADsVGbhm4rbvFwcauKwD8u5AbzoE+8d8iQpagGHkPDpcNVzFP/FHv48jvdg9M52kf4h2XGdrQviT02bdJFTKw== +"@alchemy/aa-core@3.0.0-alpha.4": + version "3.0.0-alpha.4" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.0.0-alpha.4.tgz#3abe0911f7c35cc6f0fc0cd03faad5673a01f0a9" + integrity sha512-mTVMDciBYIrXRgJnDiew2nRhjeAMKIK3RijGR3TQ7Gn6cpY8ZKSiJoTM5yRCttx368jqz0BACD1mjTg/zU8+Cg== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" - viem "^1.21.4" + viem "^2.5.0" zod "^3.22.4" "@ampproject/remapping@^2.2.0": @@ -2422,10 +2422,10 @@ abbrev@^1.0.0: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abitype@0.9.8: - version "0.9.8" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.9.8.tgz#1f120b6b717459deafd213dfbf3a3dd1bf10ae8c" - integrity sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ== +abitype@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" + integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== abitype@^0.8.3: version "0.8.11" @@ -2648,7 +2648,7 @@ args@5.0.3: leven "2.1.0" mri "1.1.4" -array-buffer-byte-length@^1.0.0: +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -2694,6 +2694,17 @@ array-uniq@^1.0.1: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== +array.prototype.filter@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" + integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + 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" @@ -2726,16 +2737,17 @@ array.prototype.flatmap@^1.3.2: 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== + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== 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" + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" arrify@^1.0.1: @@ -3197,9 +3209,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001580: - version "1.0.30001583" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz#abb2970cc370801dc7e27bf290509dc132cfa390" - integrity sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q== + version "1.0.30001584" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001584.tgz#5e3ea0625d048d5467670051687655b1f7bf7dfd" + integrity sha512-LOz7CCQ9M1G7OjJOF9/mzmqmj3jE/7VOmrfw6Mgs0E8cjOsbRXQJHsPBfmBOXDskXKrHLyyW3n7kpDW/4BsfpQ== case@^1.6.3: version "1.6.3" @@ -4006,7 +4018,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1: +es-abstract@^1.22.1, es-abstract@^1.22.3: version "1.22.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== @@ -4051,10 +4063,15 @@ es-abstract@^1.22.1: unbox-primitive "^1.0.2" which-typed-array "^1.1.13" -es-errors@^1.0.0: +es-array-method-boxes-properly@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.0.0.tgz#1936450fb8cff7bffb969335d0e55dfca7279aab" - integrity sha512-yHV74THqMJUyFKkHyN7hyENcEZM3Dj2a2IrdClY+IT4BFQHkIVwlh8s6uZfjsFydMdNHv0F5mWgAA3ajFbsvVQ== + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-errors@^1.0.0, es-errors@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-set-tostringtag@^2.0.1: version "2.0.2" @@ -4862,7 +4879,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.3.tgz#9d2d284a238e62672f556361e7d4e1a4686ae50e" integrity sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ== @@ -7584,14 +7601,15 @@ object.fromentries@^2.0.7: 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== + version "1.0.2" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" + integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + array.prototype.filter "^1.0.3" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" object.values@^1.1.7: version "1.1.7" @@ -9325,9 +9343,9 @@ undici-types@~5.26.4: integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== undici@^5.14.0: - version "5.28.2" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.2.tgz#fea200eac65fc7ecaff80a023d1a0543423b4c91" - integrity sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w== + version "5.28.3" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" + integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== dependencies: "@fastify/busboy" "^2.0.0" @@ -9503,17 +9521,17 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -viem@^1.21.4: - version "1.21.4" - resolved "https://registry.yarnpkg.com/viem/-/viem-1.21.4.tgz#883760e9222540a5a7e0339809202b45fe6a842d" - integrity sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ== +viem@^2.5.0, viem@^2.7.3: + version "2.7.3" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.3.tgz#9b2887365d4cd212d91e1797c6e2ad6d588d9127" + integrity sha512-+eoi3ZLXX7csB8/mbluIS+d3rUvtDwg3+Iu2hT+plJAdENdin5fW+SCyWOegJCm2yDKSo5xnUDBHMa1TCYk+dQ== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" "@noble/hashes" "1.3.2" "@scure/bip32" "1.3.2" "@scure/bip39" "1.2.1" - abitype "0.9.8" + abitype "1.0.0" isows "1.0.3" ws "8.13.0" From 8205a7616741315f855214460ec6cc34ecd06567 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Tue, 6 Feb 2024 15:59:04 +0400 Subject: [PATCH 1088/1247] update lockfile --- yarn.lock | 212 +++++++++++++++++++++++++++--------------------------- 1 file changed, 107 insertions(+), 105 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1eb8d6402..eabf330b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2299,15 +2299,15 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^6.7.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz#9cf31546d2d5e884602626d89b0e0d2168ac25ed" - integrity sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg== + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.20.0" - "@typescript-eslint/type-utils" "6.20.0" - "@typescript-eslint/utils" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -2316,46 +2316,46 @@ ts-api-utils "^1.0.1" "@typescript-eslint/parser@^6.6.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.20.0.tgz#17e314177304bdf498527e3c4b112e41287b7416" - integrity sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w== - dependencies: - "@typescript-eslint/scope-manager" "6.20.0" - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/typescript-estree" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz#8a926e60f6c47feb5bab878246dc2ae465730151" - integrity sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA== +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== dependencies: - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" -"@typescript-eslint/type-utils@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz#d395475cd0f3610dd80c7d8716fa0db767da3831" - integrity sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g== +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== dependencies: - "@typescript-eslint/typescript-estree" "6.20.0" - "@typescript-eslint/utils" "6.20.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" debug "^4.3.4" ts-api-utils "^1.0.1" -"@typescript-eslint/types@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.20.0.tgz#5ccd74c29011ae7714ae6973e4ec0c634708b448" - integrity sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ== +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== -"@typescript-eslint/typescript-estree@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz#5b2d0975949e6bdd8d45ee1471461ef5fadc5542" - integrity sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g== +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== dependencies: - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -2363,25 +2363,25 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.20.0.tgz#0e52afcfaa51af5656490ba4b7437cc3aa28633d" - integrity sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg== +"@typescript-eslint/utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.20.0" - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/typescript-estree" "6.20.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz#f7ada27f2803de89df0edd9fd7be22c05ce6a498" - integrity sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw== +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== dependencies: - "@typescript-eslint/types" "6.20.0" + "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.2.0": @@ -2706,15 +2706,15 @@ array.prototype.filter@^1.0.3: is-string "^1.0.7" 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== + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" + integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== 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" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.2: version "1.3.2" @@ -3171,13 +3171,14 @@ cacache@^17.0.0: unique-filename "^3.0.0" call-bind@^1.0.0, call-bind@^1.0.2, 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== + version "1.0.6" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.6.tgz#6c46675fc7a5e9de82d75a233d586c8b7ac0d931" + integrity sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg== dependencies: + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" + get-intrinsic "^1.2.3" + set-function-length "^1.2.0" callsites@^3.0.0: version "3.1.0" @@ -3784,13 +3785,14 @@ defaults@^1.0.3: 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== + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.2.tgz#f3c33b4f0102360cd7c0f5f28700f5678510b63a" + integrity sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g== dependencies: - get-intrinsic "^1.2.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.2" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.1" define-lazy-prop@^2.0.0: version "2.0.0" @@ -3920,9 +3922,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.648: - version "1.4.656" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.656.tgz#b374fb7cab9b782a5bc967c0ce0e19826186b9c9" - integrity sha512-9AQB5eFTHyR3Gvt2t/NwR0le2jBSUNwCnMbUCejFWHD+so4tH40/dRLgoE+jxlPeWS43XJewyvCv+I8LPMl49Q== + version "1.4.657" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.657.tgz#8a07ee3faa552976970843a80a1c94088ea59c9a" + integrity sha512-On2ymeleg6QbRuDk7wNgDdXtNqlJLM2w4Agx1D/RiTmItiL+a9oq5p7HUa2ZtkAtGBe/kil2dq/7rPfkbe0r5w== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -4068,7 +4070,7 @@ es-array-method-boxes-properly@^1.0.0: resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== -es-errors@^1.0.0, es-errors@^1.2.1: +es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== @@ -4082,7 +4084,7 @@ es-set-tostringtag@^2.0.1: has-tostringtag "^1.0.0" hasown "^2.0.0" -es-shim-unscopables@^1.0.0: +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: 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== @@ -4135,9 +4137,9 @@ esbuild@^0.19.11: "@esbuild/win32-x64" "0.19.12" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" @@ -4573,9 +4575,9 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.0.tgz#ca5e1a90b5e68f97fc8b61330d5819b82f5fab03" - integrity sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -4879,12 +4881,12 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.3.tgz#9d2d284a238e62672f556361e7d4e1a4686ae50e" - integrity sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: - es-errors "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" @@ -4926,12 +4928,12 @@ get-stream@^6.0.0: integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 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== + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.1.tgz#c0de911bfaa9ea8da52b5e702d2b3b51b8791ec4" + integrity sha512-KmuibvwbWaM4BHcBRYwJfZ1JxyJeBwB8ct9YYu67SvYdbEIlcQ2e56dHxfbobqW38GXo8/zDFqJeGtHiVbWyQw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" gh-pages@^6.1.1: version "6.1.1" @@ -5532,11 +5534,11 @@ inquirer@^8.2.4: wrap-ansi "^6.0.1" 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== + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.2.2" + es-errors "^1.3.0" hasown "^2.0.0" side-channel "^1.0.4" @@ -8478,9 +8480,9 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, 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.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" @@ -8503,7 +8505,7 @@ set-blocking@^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: +set-function-length@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== @@ -9126,9 +9128,9 @@ triple-beam@^1.3.0: integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== 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== + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.0.tgz#48c31073e7ae7868d27ffabef993a2de8c2b006f" + integrity sha512-d+3WxW4r8WQy2cZWpNRPPGExX8ffOLGcIhheUANKbL5Sqjbhkneki76fRAWeXkaslV2etTb4tSJBSxOsH5+CJw== ts-jest@^29.1.1: version "29.1.2" @@ -9522,9 +9524,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.5.0, viem@^2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.3.tgz#9b2887365d4cd212d91e1797c6e2ad6d588d9127" - integrity sha512-+eoi3ZLXX7csB8/mbluIS+d3rUvtDwg3+Iu2hT+plJAdENdin5fW+SCyWOegJCm2yDKSo5xnUDBHMa1TCYk+dQ== + version "2.7.6" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.6.tgz#2ada30ece1469367b606137983e5655cf66d721e" + integrity sha512-43TF0VYcTeNef9dax1/BhqlRLXpAo6HAiQ68hrJ8XRhDOou73nHZEjeFl8Eai4UFFodKhu+PbRUFzuuoixOUfg== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" @@ -9560,9 +9562,9 @@ wcwidth@^1.0.0, wcwidth@^1.0.1: defaults "^1.0.3" web3-utils@^1.3.4: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.3.tgz#f1db99c82549c7d9f8348f04ffe4e0188b449714" - integrity sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ== + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== dependencies: "@ethereumjs/util" "^8.1.0" bn.js "^5.2.1" From 9278ecc21e060ef75ab29a0d054d95d69cd4ae27 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Thu, 8 Feb 2024 19:11:58 +0200 Subject: [PATCH 1089/1247] Added a new param to sendRequest "service" (#412) Co-authored-by: GabiDev --- packages/bundler/src/Bundler.ts | 126 ++++++++++-------- packages/common/src/utils/HttpRequests.ts | 7 +- packages/common/src/utils/Types.ts | 2 + packages/paymaster/src/BiconomyPaymaster.ts | 92 +++++++------- yarn.lock | 134 +++++++++++--------- 5 files changed, 200 insertions(+), 161 deletions(-) diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 3bfde052a..69bedf8a0 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -89,16 +89,19 @@ export class Bundler implements IBundler { const bundlerUrl = this.getBundlerUrl(); - const response: EstimateUserOpGasResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_estimateUserOperationGas", - params: [userOp, this.bundlerConfig.entryPointAddress], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: EstimateUserOpGasResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_estimateUserOperationGas", + params: [userOp, this.bundlerConfig.entryPointAddress], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const userOpGasResponse = response.result; for (const key in userOpGasResponse) { @@ -125,16 +128,19 @@ export class Bundler implements IBundler { }; const params = [userOp, this.bundlerConfig.entryPointAddress, simType]; const bundlerUrl = this.getBundlerUrl(); - const sendUserOperationResponse: SendUserOpResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_sendUserOperation", - params: params, - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const sendUserOperationResponse: SendUserOpResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_sendUserOperation", + params: params, + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const response: UserOpResponse = { userOpHash: sendUserOperationResponse.result, wait: (confirmations?: number): Promise => { @@ -232,16 +238,19 @@ export class Bundler implements IBundler { */ async getUserOpReceipt(userOpHash: string): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetUserOperationReceiptResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_getUserOperationReceipt", - params: [userOpHash], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: GetUserOperationReceiptResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_getUserOperationReceipt", + params: [userOpHash], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const userOpReceipt: UserOpReceipt = response.result; return userOpReceipt; } @@ -254,16 +263,19 @@ export class Bundler implements IBundler { */ async getUserOpStatus(userOpHash: string): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetUserOperationStatusResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "biconomy_getUserOperationStatus", - params: [userOpHash], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: GetUserOperationStatusResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "biconomy_getUserOperationStatus", + params: [userOpHash], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const userOpStatus: UserOpStatus = response.result; return userOpStatus; } @@ -276,16 +288,19 @@ export class Bundler implements IBundler { */ async getUserOpByHash(userOpHash: string): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetUserOpByHashResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_getUserOperationByHash", - params: [userOpHash], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: GetUserOpByHashResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_getUserOperationByHash", + params: [userOpHash], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const userOpByHashResponse: UserOpByHashResponse = response.result; return userOpByHashResponse; } @@ -295,16 +310,19 @@ export class Bundler implements IBundler { */ async getGasFeeValues(): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetGasFeeValuesResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "biconomy_getGasFeeValues", - params: [], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: GetGasFeeValuesResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "biconomy_getGasFeeValues", + params: [], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); return response.result; } } diff --git a/packages/common/src/utils/HttpRequests.ts b/packages/common/src/utils/HttpRequests.ts index 06b85ccaf..429ff1103 100644 --- a/packages/common/src/utils/HttpRequests.ts +++ b/packages/common/src/utils/HttpRequests.ts @@ -1,4 +1,5 @@ import { Logger } from "./Logger.js"; +import { Service } from "./Types.js"; export enum HttpMethod { Get = "get", @@ -13,7 +14,7 @@ export interface HttpRequest { body?: Record; } -export async function sendRequest({ url, method, body }: HttpRequest): Promise { +export async function sendRequest({ url, method, body }: HttpRequest, service: Service): Promise { const response = await fetch(url, { method, headers: { @@ -26,7 +27,7 @@ export async function sendRequest({ url, method, body }: HttpRequest): Promis let jsonResponse; try { jsonResponse = await response.json(); - Logger.log("Paymaster RPC Response", jsonResponse); + Logger.log(`${service} RPC Response`, jsonResponse); } catch (error) { if (!response.ok) { throw new Error(response.statusText); @@ -37,7 +38,7 @@ export async function sendRequest({ url, method, body }: HttpRequest): Promis return jsonResponse as T; } if (jsonResponse.error) { - throw new Error(jsonResponse.error.message); + throw new Error(`${jsonResponse.error.message} from ${service}`); } if (jsonResponse.message) { throw new Error(jsonResponse.message); diff --git a/packages/common/src/utils/Types.ts b/packages/common/src/utils/Types.ts index c5f7161bd..5b20e33db 100644 --- a/packages/common/src/utils/Types.ts +++ b/packages/common/src/utils/Types.ts @@ -5,6 +5,8 @@ import { SmartAccountSigner } from "@alchemy/aa-core"; export type SupportedSignerName = "alchemy" | "ethers" | "viem"; export type SupportedSigner = SmartAccountSigner | WalletClient | Signer | EthersV6Signer; +export type Service = "Bundler" | "Paymaster"; + export interface EthersV6Signer { getAddress(): Promise; signMessage(message: string | Uint8Array): Promise; diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 7cd7a0392..3f4eb66bd 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -163,31 +163,34 @@ export class BiconomyPaymaster implements IHybridPaymaster Date: Thu, 8 Feb 2024 17:36:37 +0000 Subject: [PATCH 1090/1247] Added changelog (#410) --- packages/account/CHANGELOG.md | 105 +++++++++++++++++++--------------- packages/account/Readme.md | 12 ++-- 2 files changed, 64 insertions(+), 53 deletions(-) diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index f2f70fe1f..abff0df13 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -3,6 +3,40 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2023-02-06) + +### Features + +- Export bundler / paymaster instances + helpers from master package ([1d1f9d](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/1d1f9dafddf11bde0e1a75383bc935b22448bedd)) +- Export modules aliases from master package ([d6205c](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/d6205c4d76ab846ecdc10843c65e0277f3ceab00)) +- Added sendTransaction abstraction for buildUserOp + sendUserOp ([335c6e](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/335c6e7bfc5ca1ad240e7cbfd678d905c7f16812)) +- Reduced bundle size ([765a3e3](https://github.com/bcnmy/biconomy-client-sdk/commit/765a3e337fb9ad8f1f8dc92b5edcb1ed0940f94d)) +- Added bundler abstraction during SmartAccount init ([591bbb4](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/591bbb4e37774b16cbe801d583d31b3a14608bc1)) +- Added e2e tests that speak with prod bundler / paymasters ([4b4a53a](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/4b4a53aabdf9e22485599872332b3d63e8ddd87a)) +- Added support for simultaneous ethers + viem signers ([8e4b2c8](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/8e4b2c86b871130befbf3b733cf503d24f7226a5)) +- E2E tests for multichain modules ([ecc86e2](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/ecc86e2c7146046a981c3b6fd4bb29e4828b278b)) +- E2E tests for session validation modules ([4ad7ea7](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/4ad7ea7f8eb6a28854dcce83834b2b7ff9ad3287)) +- Added [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) ([638dae](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/638daee0ed6924f67c5151a2d0e5a02d32e4bf23)) +- Make txs more typesafe and default with valueOrData ([b1e5b5e](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b1e5b5e02ab3a7fb99faa1d45b55e3cbe8d6bc93)) +- Added createSmartAccountClient alias ([232472](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/232472c788bed0619cf6295ade076b6ec3a9e0f8)) +- Improve dx of using paymster to build userOps ([bb54888](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/bb548884e76a94a20329e49b18994503de9e3888)) +- Add ethers v6 signer support ([9727fd](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/9727fd51e47d62904399d17d48f5c9d6b9e591e5)) +- Improved dx of using gas payments with erc20 ([741806](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/741806da68457eba262e1a49be77fcc24360ba36)) + +### Chores + +- Removed SmartAccount Base class in favour of Alchemy's ([be82732](https://github.com/bcnmy/biconomy-client-sdk/commit/be827327fafa858b1551ade0c8389293034cacbb)) +- Migrate to viem v2 ([8ce04a](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/8ce04a56f6dcdfd1f44d9534f43e3c6eb8b3885d)) +- Remove common + core-types dependencies ([673514](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/6735141fbd21a855aadf69011bc06c69e20f811b)) +- Reincluded simulation flags ([25d2be](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/25d2bee339afd9d8c143fe6dad1898e28034be17)) + +### Bug Fixes + +- Make silently failing paymaster calls throw an error instead ([693bf0](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/693bf08591427c03e317d64d0491e23b1c96ea30)) +- Added string as a supported Transaction value type ([b905dc](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b905dcf3f7849396573fc8b51f808cc68061ee11)) +- Removed skipBundlerGasEstimation option ([b905dc](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b905dcf3f7849396573fc8b51f808cc68061ee11)) +- Ingest rpcUrl from SupportedSigners (ethers + viem) ([f56b4d](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/f56b4da08f47af577c01a641b81a3ef9e354cf97)) + ## 3.1.3 (2023-12-28) VERSION Bump Only. @@ -11,54 +45,44 @@ VERSION Bump Only. ### Features -* Make entryPointAddress optional in config([cf35c4a](https://github.com/bcnmy/biconomy-client-sdk/pull/336/commits/cf35c4a8266d27648035d8c9d63f1b9157553128)) +- Make entryPointAddress optional in config([cf35c4a](https://github.com/bcnmy/biconomy-client-sdk/pull/336/commits/cf35c4a8266d27648035d8c9d63f1b9157553128)) ### Bug Fixes -* use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) -* change receipt status type from boolean to string to be compatible with bundler response. ([317f986](https://github.com/bcnmy/biconomy-client-sdk/pull/342/commits/317f986b7e8f08d3ccf1e68f12a0696f1116de6b)) +- use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) +- change receipt status type from boolean to string to be compatible with bundler response. ([317f986](https://github.com/bcnmy/biconomy-client-sdk/pull/342/commits/317f986b7e8f08d3ccf1e68f12a0696f1116de6b)) ## 3.1.1 (2023-11-09) - ### Bug Fixes -* optimistic implementation for getNonce() and cache for isAccountDeployed ([5b1d4bf](https://github.com/bcnmy/biconomy-client-sdk/commit/5b1d4bfd7b5062d05bbb97286b833d879cd972b0)) - +- optimistic implementation for getNonce() and cache for isAccountDeployed ([5b1d4bf](https://github.com/bcnmy/biconomy-client-sdk/commit/5b1d4bfd7b5062d05bbb97286b833d879cd972b0)) ### Reverts -* update paymaster check in estimateUserOpGas ([2eb0237](https://github.com/bcnmy/biconomy-client-sdk/commit/2eb0237b37425da3558801bbe9d0ce5d6fd696c9)) - - - - +- update paymaster check in estimateUserOpGas ([2eb0237](https://github.com/bcnmy/biconomy-client-sdk/commit/2eb0237b37425da3558801bbe9d0ce5d6fd696c9)) ## 3.1.0 (2023-09-20) + Modular Account Abstraction is here. Contains BiconomySmartAccountV2 - an API for modular smart account. ### Bug Fixes -* add 10sec timeout limit for a test ([5d12fe7](https://github.com/bcnmy/biconomy-client-sdk/commit/5d12fe7d4b32e5c4628b971d22f6fc9cfcc6b414)) -* avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) -* BiconomySmartAccountV2 API Specs ([69a580e](https://github.com/bcnmy/biconomy-client-sdk/commit/69a580ea9e309141b500274aa95e20e24365b522)) -* build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) -* comments [#296](https://github.com/bcnmy/biconomy-client-sdk/issues/296) ([55b7376](https://github.com/bcnmy/biconomy-client-sdk/commit/55b7376336886226967b5bec5f11ba3ab750c5b6)) -* estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) -* gitInitCode cache issue ([4df3502](https://github.com/bcnmy/biconomy-client-sdk/commit/4df3502204e3c6c0c6faa90ba2c8aa0d6e826e48)) -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) - +- add 10sec timeout limit for a test ([5d12fe7](https://github.com/bcnmy/biconomy-client-sdk/commit/5d12fe7d4b32e5c4628b971d22f6fc9cfcc6b414)) +- avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) +- BiconomySmartAccountV2 API Specs ([69a580e](https://github.com/bcnmy/biconomy-client-sdk/commit/69a580ea9e309141b500274aa95e20e24365b522)) +- build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) +- comments [#296](https://github.com/bcnmy/biconomy-client-sdk/issues/296) ([55b7376](https://github.com/bcnmy/biconomy-client-sdk/commit/55b7376336886226967b5bec5f11ba3ab750c5b6)) +- estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) +- gitInitCode cache issue ([4df3502](https://github.com/bcnmy/biconomy-client-sdk/commit/4df3502204e3c6c0c6faa90ba2c8aa0d6e826e48)) +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +- unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) ### Features -* get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -* update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) - - - - +- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) ## 3.0.0 (2023-08-28) @@ -66,40 +90,27 @@ VERSION Bump Only. Modular SDK - consists stable version of below updates done in Alphas. - - ## 3.1.1-alpha.0 (2023-08-02) - ### Bug Fixes VERSION Bump Only. - - - - # 3.1.0-alpha.0 (2023-07-24) - ### Bug Fixes -* avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) - - - +- avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) ## 3.0.0-alpha.0 (2023-07-12) - ### Bug Fixes -* estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) -* unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) - +- estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) +- unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) ### Features -* get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -* update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) +- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) diff --git a/packages/account/Readme.md b/packages/account/Readme.md index 00c720607..0aa74954b 100644 --- a/packages/account/Readme.md +++ b/packages/account/Readme.md @@ -8,6 +8,12 @@ The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. It is designed for seamless user experiences and offers non-custodial solutions for user onboarding, sending transactions (userOps), gas sponsorship and much more. +## ⚙️ installation + +```bash +npm i @biconomy/account +``` + ## 🛠️ Quickstart ```typescript @@ -42,12 +48,6 @@ For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Sm - [Biconomy Dashboard](https://dashboard.biconomy.io) - [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) -## ⚙️ installation - -```bash -npm i @biconomy/account -``` - ## 💼 Example Usages ### [Initialise the smartAccount](https://bcnmy.github.io/biconomy-client-sdk/functions/createSmartAccountClient.html) From ebff7e3ba01942c06b1042b0c9eaf583feec90a7 Mon Sep 17 00:00:00 2001 From: joepegler Date: Fri, 9 Feb 2024 08:10:22 +0000 Subject: [PATCH 1091/1247] Make package exports consistent (#411) * Make package exports consistent * Update README.md s * type comment fix * Move default to end of exports * LightSigner * export LightSigner * export type --- packages/account/package.json | 4 +- packages/account/src/index.ts | 13 ++++- packages/bundler/CHANGELOG.md | 58 +++++++-------------- packages/bundler/Readme.md | 16 +++--- packages/bundler/package.json | 4 +- packages/bundler/src/Bundler.ts | 8 ++- packages/bundler/src/index.ts | 4 ++ packages/bundler/src/utils/Types.ts | 2 +- packages/common/package.json | 4 +- packages/common/src/utils/Types.ts | 4 +- packages/modules/package.json | 4 +- packages/particle-auth/package.json | 4 +- packages/paymaster/CHANGELOG.md | 40 ++++++-------- packages/paymaster/Readme.md | 10 ++-- packages/paymaster/package.json | 4 +- packages/paymaster/src/BiconomyPaymaster.ts | 4 ++ packages/paymaster/src/index.ts | 4 ++ packages/paymaster/src/utils/Types.ts | 2 +- packages/transak/package.json | 4 +- 19 files changed, 94 insertions(+), 99 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index 86ca482f6..da1d5a7a6 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -9,8 +9,8 @@ "exports": { ".": { "import": "./dist/esm/index.js", - "default": "./dist/cjs/index.js", - "types": "./dist/types/index.d.ts" + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" }, "./package.json": "./package.json" }, diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index c2d85b676..615c0a6da 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -14,9 +14,18 @@ export { type PaymasterFeeQuote, type SponsorUserOperationDto, type FeeQuotesOrDataResponse, + createPaymaster, } from "@biconomy/paymaster"; -export { EthersSigner, convertSigner } from "@biconomy/common"; -export { Bundler, type IBundler, extractChainIdFromBundlerUrl, type UserOpResponse, type UserOpStatus, type UserOpReceipt } from "@biconomy/bundler"; +export { EthersSigner, convertSigner, type LightSigner } from "@biconomy/common"; +export { + Bundler, + type IBundler, + extractChainIdFromBundlerUrl, + type UserOpResponse, + type UserOpStatus, + type UserOpReceipt, + createBundler, +} from "@biconomy/bundler"; export { createECDSAOwnershipValidationModule, createERC20SessionValidationModule, diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index 8e768924c..35465063e 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2023-07-02) + +Export createBundler alias for static Bundler.create call + ## 3.1.3 (2023-12-28) VERSION Bump Only. @@ -11,29 +15,23 @@ VERSION Bump Only. ### Features -* Make entrypoint address optional in bundler config ([547724a](https://github.com/bcnmy/biconomy-client-sdk/pull/337/commits/547724a15366ee1e63aee80fdee0edc128a84c41)) +- Make entrypoint address optional in bundler config ([547724a](https://github.com/bcnmy/biconomy-client-sdk/pull/337/commits/547724a15366ee1e63aee80fdee0edc128a84c41)) ### Bug Fixes -* use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) +- use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) ## 3.1.1 (2023-11-09) - ### Bug Fixes -* resolve comments ([34fd6a3](https://github.com/bcnmy/biconomy-client-sdk/commit/34fd6a308805061d9faf408f1ce6da9cac0ee819)) - +- resolve comments ([34fd6a3](https://github.com/bcnmy/biconomy-client-sdk/commit/34fd6a308805061d9faf408f1ce6da9cac0ee819)) ### Features -* add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) -* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - - - - +- add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) +- chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) +- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) ## 3.1.0 (2023-09-20) @@ -41,20 +39,15 @@ Modular Account Abstraction is here. ### Bug Fixes -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) -* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) - +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) +- more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) ### Features -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) -* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - - - - +- base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) +- chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) +- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) ## 3.0.0 (2023-08-28) @@ -62,33 +55,20 @@ Modular SDK - consists stable version of below updates done in Alphas. ### Features -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) - - - - +- base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) ## 3.0.0-alpha.0 (2023-08-02) VERSION Bump Only. - - - # 3.1.0-alpha.0 (2023-07-24) - ### Features -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - - - - +- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) ## 3.0.0-alpha.0 (2023-07-12) - ### Bug Fixes -* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) +- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) diff --git a/packages/bundler/Readme.md b/packages/bundler/Readme.md index ef4ad69be..06e0c4af6 100644 --- a/packages/bundler/Readme.md +++ b/packages/bundler/Readme.md @@ -28,16 +28,12 @@ yarn add @biconomy/bundler ```typescript // This is how you create bundler instance in your dapp's -import { IBundler, Bundler } from "@biconomy/bundler"; +import { IBundler, createBundler } from "@biconomy/bundler"; // Make use of core-types package import { ChainId } from "@biconomy/core-types"; -const bundler: IBundler = new Bundler({ - bundlerUrl: "", - chainId: ChainId.POLYGON_MAINNET, - entryPointAddress: "", -}); +const bundler: IBundler = await createBundler({ bundlerUrl: "" }); // you can get this value from biconomy dashboard. https://dashboard.biconomy.io ``` Following are the methods that can be call on bundler instance @@ -51,7 +47,7 @@ export interface IBundler { } ``` -**estimateUserOpGas** +**[estimateUserOpGas](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#estimateUserOpGas)** Estimate the gas values for a UserOperation. Given UserOperation optionally without gas limits and gas prices, return the needed gas limits. The signature field is ignored by the wallet, so that the operation will not require user's approval. Still, it might require putting a "semi-valid" signature (e.g. a signature in the right length) **Return Values** @@ -62,7 +58,7 @@ Estimate the gas values for a UserOperation. Given UserOperation optionally with -------------------------------- -**sendUserOp** +**[sendUserOp](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#sendUserOp)** it submits a User Operation object to the User Operation pool of the client. The client MUST validate the UserOperation, and return a result accordingly. The result SHOULD be set to the userOpHash if and only if the request passed simulation and was accepted in the client's User Operation pool. If the validation, simulation, or User Operation pool inclusion fails, result SHOULD NOT be returned. Rather, the client SHOULD return the failure reason. @@ -72,7 +68,7 @@ If the UserOperation is valid, the client MUST return the calculated userOpHash -------------------------------- -**getUserOpByHash** +**[getUserOpByHash](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#getUserOpByHash)** Return a UserOperation based on a hash (userOpHash) returned by sendUserOp (eth_sendUserOperation) **Return Values** @@ -81,7 +77,7 @@ null in case the UserOperation is not yet included in a block, or a full UserOpe -------------------------------- -**getUserOpReceipt** +**[getUserOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#getUserOpReceipt)** Return a UserOperation receipt based on a hash (userOpHash) returned by eth_sendUserOperation diff --git a/packages/bundler/package.json b/packages/bundler/package.json index f0db322b1..785cb6d0c 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -9,8 +9,8 @@ "exports": { ".": { "import": "./dist/esm/index.js", - "default": "./dist/cjs/index.js", - "types": "./dist/types/index.d.ts" + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" }, "./package.json": "./package.json" }, diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 69bedf8a0..a20fadfb4 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -16,7 +16,7 @@ import { UserOpStatus, GetUserOperationStatusResponse, SimulationType, - BunderConfigWithChainId, + BundlerConfigWithChainId, } from "./utils/Types.js"; import { transformUserOP, getTimestampInSeconds } from "./utils/HelperFunction.js"; import { @@ -35,7 +35,7 @@ import { sendRequest, HttpMethod } from "@biconomy/common"; * Checkout the proposal for more details on Bundlers. */ export class Bundler implements IBundler { - private bundlerConfig: BunderConfigWithChainId; + private bundlerConfig: BundlerConfigWithChainId; // eslint-disable-next-line no-unused-vars UserOpReceiptIntervals!: { [key in number]?: number }; @@ -325,4 +325,8 @@ export class Bundler implements IBundler { ); return response.result; } + + public static async create(config: Bundlerconfig): Promise { + return new Bundler(config); + } } diff --git a/packages/bundler/src/index.ts b/packages/bundler/src/index.ts index 785c6050e..7a779f5d5 100644 --- a/packages/bundler/src/index.ts +++ b/packages/bundler/src/index.ts @@ -1,4 +1,8 @@ +import { Bundler } from "./Bundler.js"; + export * from "./interfaces/IBundler.js"; export * from "./Bundler.js"; export * from "./utils/Types.js"; export * from "./utils/Utils.js"; + +export const createBundler = Bundler.create; diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index 504819848..746d1b24e 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -11,7 +11,7 @@ export type Bundlerconfig = { userOpReceiptMaxDurationIntervals?: { [key in number]?: number }; userOpWaitForTxHashMaxDurationIntervals?: { [key in number]?: number }; }; -export type BunderConfigWithChainId = Bundlerconfig & { chainId: number }; +export type BundlerConfigWithChainId = Bundlerconfig & { chainId: number }; export type UserOpReceipt = { /* The request hash of the UserOperation. */ diff --git a/packages/common/package.json b/packages/common/package.json index e61936dc0..2f06ca128 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -15,8 +15,8 @@ "exports": { ".": { "import": "./dist/esm/index.js", - "default": "./dist/cjs/index.js", - "types": "./dist/types/index.d.ts" + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" }, "./package.json": "./package.json" }, diff --git a/packages/common/src/utils/Types.ts b/packages/common/src/utils/Types.ts index 5b20e33db..69508e21f 100644 --- a/packages/common/src/utils/Types.ts +++ b/packages/common/src/utils/Types.ts @@ -3,11 +3,11 @@ import { Signer } from "@ethersproject/abstract-signer"; import { SmartAccountSigner } from "@alchemy/aa-core"; export type SupportedSignerName = "alchemy" | "ethers" | "viem"; -export type SupportedSigner = SmartAccountSigner | WalletClient | Signer | EthersV6Signer; +export type SupportedSigner = SmartAccountSigner | WalletClient | Signer | LightSigner; export type Service = "Bundler" | "Paymaster"; -export interface EthersV6Signer { +export interface LightSigner { getAddress(): Promise; signMessage(message: string | Uint8Array): Promise; } diff --git a/packages/modules/package.json b/packages/modules/package.json index fd992415d..93bb8d6d6 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -9,8 +9,8 @@ "exports": { ".": { "import": "./dist/esm/index.js", - "default": "./dist/cjs/index.js", - "types": "./dist/types/index.d.ts" + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" }, "./package.json": "./package.json" }, diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 8b3b173ba..9568c4b47 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -9,8 +9,8 @@ "exports": { ".": { "import": "./dist/esm/index.js", - "default": "./dist/cjs/index.js", - "types": "./dist/types/index.d.ts" + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" }, "./package.json": "./package.json" }, diff --git a/packages/paymaster/CHANGELOG.md b/packages/paymaster/CHANGELOG.md index 27767c9bf..abbc2cae6 100644 --- a/packages/paymaster/CHANGELOG.md +++ b/packages/paymaster/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2023-07-02) + +Export createPaymaster alias for static Paymaster.create call + ## 3.1.3 (2023-12-28) VERSION Bump Only. @@ -13,52 +17,42 @@ VERSION Bump Only. ## 3.1.1 (2023-11-09) - ### Bug Fixes -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) - - +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) ## 3.1.0 (2023-09-20) -Version Bump Only. +Version Bump Only. ## 3.0.0 (2023-08-28) Modular SDK - consists stable version of below updates done in Alphas. - - ## 3.0.0-alpha.0 (2023-08-02) ### Features -* letting maxFee and maxPriority not be undefined([46b985c](https://github.com/bcnmy/biconomy-client-sdk/commit/46b985c75fd135f151c9ac4380a65438cccc6f39)) -* passing on paymasterAndData([ae267f1])(https://github.com/bcnmy/biconomy-client-sdk/commit/ae267f1a103f37856eb233a38db7063bfcc4cb45) -* handle undefined values([e53d4a7])(https://github.com/bcnmy/biconomy-client-sdk/commit/e53d4a78aded8c8802786173daf12b27d445d4a0) -* handling userOp null values([c89ac42])(https://github.com/bcnmy/biconomy-client-sdk/commit/c89ac42ae1d7fd985ef2396d925cc63ec5cf926b) -* using signature provided by userop([0c40641])(https://github.com/bcnmy/biconomy-client-sdk/commit/0c40641e4cd6133f7348bb3e3022f8ab78fe299b) - - +- letting maxFee and maxPriority not be undefined([46b985c](https://github.com/bcnmy/biconomy-client-sdk/commit/46b985c75fd135f151c9ac4380a65438cccc6f39)) +- passing on paymasterAndData([ae267f1])(https://github.com/bcnmy/biconomy-client-sdk/commit/ae267f1a103f37856eb233a38db7063bfcc4cb45) +- handle undefined values([e53d4a7])(https://github.com/bcnmy/biconomy-client-sdk/commit/e53d4a78aded8c8802786173daf12b27d445d4a0) +- handling userOp null values([c89ac42])(https://github.com/bcnmy/biconomy-client-sdk/commit/c89ac42ae1d7fd985ef2396d925cc63ec5cf926b) +- using signature provided by userop([0c40641])(https://github.com/bcnmy/biconomy-client-sdk/commit/0c40641e4cd6133f7348bb3e3022f8ab78fe299b) # 3.1.0-alpha.0 (2023-07-24) VERSION Bump Only. - ## 3.0.0-alpha.0 (2023-07-12) - ### Bug Fixes -* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) -* linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) - +- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) +- linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) ### Features -* covert gas limits to numbers for making pm service call ([b1fe96f](https://github.com/bcnmy/biconomy-client-sdk/commit/b1fe96f7a312ceaf7aa689939b7c69718c710dd1)) -* get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -* update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) +- covert gas limits to numbers for making pm service call ([b1fe96f](https://github.com/bcnmy/biconomy-client-sdk/commit/b1fe96f7a312ceaf7aa689939b7c69718c710dd1)) +- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) diff --git a/packages/paymaster/Readme.md b/packages/paymaster/Readme.md index fce6d8384..562a790f6 100644 --- a/packages/paymaster/Readme.md +++ b/packages/paymaster/Readme.md @@ -22,11 +22,11 @@ yarn add @biconomy/paymaster ```typescript // This is how you create paymaster instance in your dapp's -import { IPaymaster, BiconomyPaymaster } from "@biconomy/paymaster"; +import { IPaymaster, createPaymaster } from "@biconomy/paymaster"; // Currently this package only exports Biconomy Paymaster which acts as a Hybrid paymaster for gas abstraction. You can sponsor user transactions but can also make users pay gas in supported ERC20 tokens. -const paymaster = new BiconomyPaymaster({ +const paymaster = await createPaymaster({ paymasterUrl: "", // you can get this value from biconomy dashboard. https://dashboard.biconomy.io }); ``` @@ -57,17 +57,17 @@ export interface IPaymaster { ### Below API methods can be used for Biconomy Hybrid paymaster -**getPaymasterAndData** +**[getPaymasterAndData](https://bcnmy.github.io/biconomy-client-sdk/classes/Paymaster.html#getPaymasterAndData)** This function accepts a **`Partial`** object that includes all properties of **`userOp`** except for the **`signature`** and **`paymasterAndData`** field. It returns **`paymasterAndData`** as part of the **`PaymasterAndDataResponse`** -**buildTokenApprovalTransaction** +**[buildTokenApprovalTransaction](https://bcnmy.github.io/biconomy-client-sdk/classes/Paymaster.html#buildTokenApprovalTransaction)** This function is specifically used for token paymaster sponsorship. The primary purpose of this function is to create an approve transaction for paymaster that gets batched with the rest of your transactions. Note: You don't need to call this function. It will automatically get called as part of the **`buildTokenPaymasterUserOp`** function call. -**getPaymasterFeeQuotesOrData** +**[getPaymasterFeeQuotesOrData](https://bcnmy.github.io/biconomy-client-sdk/classes/Paymaster.html#getPaymasterFeeQuotesOrData)** This function is used to fetch quote information or paymaster data based on provided userOperation and paymasterServiceData. If explicit mode is not provided it tries for sponsorship first and then falls back to serving fee quotes for supported/requested token/s diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index ea045d0c9..cc40d7de7 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -9,8 +9,8 @@ "exports": { ".": { "import": "./dist/esm/index.js", - "default": "./dist/cjs/index.js", - "types": "./dist/types/index.d.ts" + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" }, "./package.json": "./package.json" }, diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 3f4eb66bd..bfe04699c 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -342,4 +342,8 @@ export class BiconomyPaymaster implements IHybridPaymaster { return "0x"; } + + public static async create(config: PaymasterConfig): Promise { + return new BiconomyPaymaster(config); + } } diff --git a/packages/paymaster/src/index.ts b/packages/paymaster/src/index.ts index da98ace55..4d78b3a0a 100644 --- a/packages/paymaster/src/index.ts +++ b/packages/paymaster/src/index.ts @@ -1,4 +1,8 @@ +import { BiconomyPaymaster } from "./BiconomyPaymaster.js"; export * from "./interfaces/IPaymaster.js"; export * from "./interfaces/IHybridPaymaster.js"; export * from "./utils/Types.js"; export * from "./BiconomyPaymaster.js"; + +export const Paymaster = BiconomyPaymaster; +export const createPaymaster = Paymaster.create; diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index e4f07e877..d1dd7ec9f 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -112,7 +112,7 @@ export type FeeQuotesOrDataResponse = { feeQuotes?: PaymasterFeeQuote[]; /** Normally set to the spender in the proceeding call to send the tx */ tokenPaymasterAddress?: Hex; - /** Normally set to the spender in the proceeding call to send the tx */ + /** Relevant Data returned from the paymaster */ paymasterAndData?: Uint8Array | Hex; /* Gas overhead of this UserOperation */ preVerificationGas?: BigNumberish; diff --git a/packages/transak/package.json b/packages/transak/package.json index 6224620c9..8955eb6f6 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -9,8 +9,8 @@ "exports": { ".": { "import": "./dist/esm/index.js", - "default": "./dist/cjs/index.js", - "types": "./dist/types/index.d.ts" + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" }, "./package.json": "./package.json" }, From 3d86837b190f6195642eb275a0b2353dfd30a9bd Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Fri, 9 Feb 2024 17:34:43 +0400 Subject: [PATCH 1092/1247] birth of V4 SDK (#401) * feat: accounts update * update other packages with viem types * fix: account compatibility * minor fix * code refactor with latest releases * fix: resolve build * turned off bundler tests * fix: default validation params * fix!: make bundler and paymaster public * feat: reduce the bundle size * fix: lint and temp test * fix: gasless paymaster flow * minor fixes * remove the default chain * fix: lint * fix: method comment * fix: bundler abstraction in v4 * feat: add Logger class to v4 * Feedback by @joepegler #352 * fix: logic error * Feat(DEVX-410): Reinclude tests * remove unused package * fix: constructor validation initialisation * fix: build issue * Resolved DEVX-405 * Added e2e test for multiChain module * Updated the "addSigner" method * Fixed lint * Resolved DEVX-402 Added esbuild * Remove unused file * Added negative tests * Added multichainValidation tests * Fix import * Multichain testing support * Added session validation module tests * fix issues with address and update gitignore * linkAll improvement * watch package builds cont * WIP Session module * Added tests for multi-chain validation and session validation * unit tests fix * Remove duplicate test * revert tsconfig change * Added check for paymaster in BiconomySmartAccountV2 class * Fixed session file storage path and gitignore * Fixed e2e nft mint test * Added wait for tx before checking balance in test * Resolved SMA-526 * test workflow * test again * fix command * fix again * test again * cont. * Added SPONSORED and ERC20 paymaster check logic in SDK + tests * Feat(DEVX-425): Support ethers (#370) Resolved DEVX-425: Support ethers * Fixed lint * Merged with v4 * Changed parameter name * Uncomment PaymasterMode * Added fix for selected quote case ERC20 paymaster * Changed send user op approach in ERC20 paymaster test * Modify sendUserOp function description * Added throw instead of return user op * continued * Fix branch for deployment of docs * Removed try catch * Added utility func to get balance in tests * Removed unused value param from tx obj * Apply Signer Abstraction to modules (#375) * Added Signer Abstraction * fix:circular_dependency * Resolved SM-547 * lint:fix * Removed lint-staged (#382) Co-authored-by: GabiDev * README tweaks (#377) * Update README.md * createSmartAccountClient (#385) * Add paymasterAndData validation in e2e tests (#381) * Add paymasterAndData validation in e2e tests * Use config values instead of hardcoded in tests --------- Co-authored-by: GabiDev * Use RpcUrl from provider (#379) * Resolved SMA-549 lint:fix log * continued * continued * continued * Remove e2e test from unit test commit lockfile * rpc test * fix tests * Feat/sma 540 check paymaster userop (#384) * Refactor paymasterServiceData validation logic for ERC20 mode * Add assertions and test case for ERC20 Paymaster user op * Changed isNullOrUndefined function param to any type * Update createSmartWalletClient to createSmartAccountClient * Added ts-doc for setPaymasterUserOp * Export FeeQuotesOrDataResponse from @account and update import path in test * Refactor setPaymasterUserOp --> getPaymasterUserOp --------- Co-authored-by: GabiDev * update lockfile * Add ethersV6 compatibility (#387) * Fix for etherv6 signer compatibility * Refactor name --------- Co-authored-by: GabiDev * Feat(SMA-559): Improved dx for erc20 paymaster calls (#388) * Resolved SMA-559 * Fix await * Fix tests * Update docs * remove unused import * Fix broken tests * Fix rpc url * buildTokenPaymasterUserOp * lint:fix * Fix spender * Abstract tokenlist away * fix test * fix await * lint:fix * Make getPaymasterUserOp public * remove log * Except sessionStorageData folder from gitignore but not files (#389) Co-authored-by: GabiDev * fixes in v4 for front end frameworks (#392) * fixes in v4 for front end frameworks * revert build scripts * Added simulationType flag (#390) * Added simulationType flag * Change params for sendTransaction * Modified sendTransaction params for simulationType + moduleInfo params --------- Co-authored-by: GabiDev * Fix(SMA-574): ESM builds (#393) * es build fixes Resolved SMA-574 * Include both builds * Default build with tsc * minify_tsc_build * Fix check for maxApproval in BiconomySmartAccountV2 (#395) Co-authored-by: GabiDev * Bugfix/api error message (#396) * Fix check for maxApproval in BiconomySmartAccountV2 * Fixed api error response + increment time for test --------- Co-authored-by: GabiDev * Change type: sessionSigner: SupportedSigner (#397) * Fixed merkletreejs import (#400) * Fixed merkletreejs import * Removed console log --------- Co-authored-by: GabiDev * Feat(SMA-579): Allow empty tokenInfo fields during getTokenFees (#399) * Resolved SMA-579 * added e2e tests * lint:fix & update docs * fix: token paymaster approval flows * continued * test fix * Remove max approval from tests --------- Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * yarn lock * Feat(SMA-583): Update README.md with v4 examples (#405) * continued docs + readme updates * Updated README.md * lint:fix * update lockfile * Added string as a supported Transaction value type (#404) Co-authored-by: GabiDev Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * Added export for UserOpStatus type from /account (#403) * Exported UserOpStatus type from /account * update lockfile --------- Co-authored-by: GabiDev Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * Added needed exports from modules (#402) * Added needed exports from modules * update lockfile --------- Co-authored-by: GabiDev Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * Added readme (#409) Co-authored-by: GabiDev * Commented overrides and skipBundlerGasEstimation params (#407) Co-authored-by: GabiDev * V4 with viem v2 (bump aa-core and viem) (#406) * update aa-core and viem packages * update rest of the code to use updated deps * update lockfile * fix: build error --------- Co-authored-by: amanraj1608 * update lockfile * Added a new param to sendRequest "service" (#412) Co-authored-by: GabiDev * Added changelog (#410) * Make package exports consistent (#411) * Make package exports consistent * Update README.md s * type comment fix * Move default to end of exports * LightSigner * export LightSigner * export type --------- Co-authored-by: amanraj1608 Co-authored-by: Aman Raj <42104907+AmanRaj1608@users.noreply.github.com> Co-authored-by: Joe Pegler Co-authored-by: GabiDev Co-authored-by: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> --- .env.example | 5 + .eslintrc.js | 4 +- .github/workflows/check_branch_name.yml | 2 +- .github/workflows/docs.yml | 27 + .github/workflows/pull_request_approved.yml | 33 + .github/workflows/push_check.yml | 3 +- .gitignore | 17 +- .nvmrc | 2 +- README.md | 149 +- jest.config.e2e.ts | 6 + jest.config.ts | 18 +- linkAll.sh | 3 +- package.json | 10 +- packages/account/.esbuild.js | 58 + packages/account/CHANGELOG.md | 105 +- packages/account/Readme.md | 161 +- packages/account/package.json | 52 +- packages/account/src/BaseSmartAccount.ts | 481 - packages/account/src/BiconomySmartAccount.ts | 544 - .../account/src/BiconomySmartAccountV2.ts | 1122 +- packages/account/src/SmartAccount.ts | 314 - packages/account/src/abi/AccountResolver.ts | 106 + packages/account/src/abi/Factory.ts | 141 + packages/account/src/abi/SmartAccount.ts | 944 ++ packages/account/src/index.ts | 52 +- .../src/interfaces/IBaseSmartAccount.ts | 22 - .../src/interfaces/IBiconomySmartAccount.ts | 29 - .../account/src/interfaces/ISmartAccount.ts | 8 - packages/account/src/utils/Constants.ts | 11 +- packages/account/src/utils/Preverificaiton.ts | 118 - packages/account/src/utils/Types.ts | 300 +- packages/account/src/utils/Utils.ts | 45 + packages/account/src/utils/VoidSigner.ts | 57 - packages/account/src/utils/index.ts | 3 + .../tests/SmartAccountV1.testnet.spec.ts | 72 - ...AccountV2-Abstract-Paymaster.local.spec.ts | 106 - ...AccountV2-Module-Abstraction.local.spec.ts | 87 - .../tests/SmartAccountV2.local.spec.ts | 609 - packages/account/tests/account.e2e.spec.ts | 459 + packages/account/tests/account.spec.ts | 234 +- packages/account/tsconfig.build.json | 32 + packages/account/tsconfig.json | 4 +- packages/account/typedoc.json | 8 + packages/bundler/.esbuild.js | 58 + packages/bundler/CHANGELOG.md | 58 +- packages/bundler/Readme.md | 16 +- packages/bundler/package.json | 38 +- packages/bundler/src/Bundler.ts | 195 +- packages/bundler/src/index.ts | 11 +- packages/bundler/src/interfaces/IBundler.ts | 10 +- packages/bundler/src/utils/Constants.ts | 158 +- packages/bundler/src/utils/HelperFunction.ts | 20 +- packages/bundler/src/utils/Types.ts | 36 +- packages/bundler/src/utils/Utils.ts | 9 + packages/bundler/tests/bundler.e2e.spec.ts | 19 + packages/bundler/tests/bundler.spec.ts | 15 +- packages/bundler/tsconfig.build.json | 32 + packages/bundler/tsconfig.json | 4 +- packages/common/.depcheckrc | 1 - packages/common/.esbuild.js | 58 + packages/common/CHANGELOG.md | 126 - packages/common/README.md | 2 +- .../SmartAccountFactory_v1.0.0.json | 172 - .../biconomy_v1.0.0/SmartAccount_v1.0.0.json | 1682 --- .../ECDSAOwnershipRegistryModule_v1.0.0.json | 298 - .../MultiChainValidationModule_v1.0.0.json | 298 - .../SmartAccountFactory_v2.0.0.json | 293 - .../biconomy_v2.0.0/SmartAccount_v2.0.0.json | 1182 -- .../abis/entrypoint/EntryPoint_v0.0.5.json | 1318 --- .../abis/entrypoint/EntryPoint_v0.0.6.json | 1318 --- .../common/abis/misc/AddressResolver.json | 249 - packages/common/package.json | 59 +- packages/common/src/Constants.ts | 42 - packages/common/src/ContractsInstances.ts | 82 - packages/common/src/ERC4337Utils.ts | 178 - packages/common/src/Utils.ts | 13 - packages/common/src/httpRequests.ts | 86 - packages/common/src/index.ts | 13 +- packages/common/src/utils/Constants.ts | 7 + packages/common/src/utils/EthersSigner.ts | 38 + .../common/src/utils/Helpers/convertSigner.ts | 62 + packages/common/src/utils/Helpers/index.ts | 1 + .../src/utils/HttpRequests.ts | 10 +- packages/common/src/{ => utils}/Logger.ts | 0 packages/common/src/utils/Types.ts | 13 + packages/common/tests/ERC4337Utils.spec.ts | 44 - packages/common/tsconfig.build.json | 32 + packages/common/tsconfig.json | 8 +- packages/core-types/CHANGELOG.md | 102 - packages/core-types/README.md | 13 - packages/core-types/package.json | 45 - packages/core-types/src/BundlerTypes.ts | 8 - packages/core-types/src/ChainsTypes.ts | 39 - .../core-types/src/PaymasterServiceTypes.ts | 6 - packages/core-types/src/Types.ts | 27 - packages/core-types/src/index.ts | 2 - packages/core-types/tests/core-types.spec.ts | 5 - packages/core-types/tsconfig.json | 9 - packages/modules/.esbuild.js | 58 + packages/modules/package.json | 42 +- packages/modules/src/BaseValidationModule.ts | 41 +- .../modules/src/BatchedSessionRouterModule.ts | 86 +- .../src/ECDSAOwnershipValidationModule.ts | 73 +- .../modules/src/MultichainValidationModule.ts | 122 +- .../modules/src/SessionKeyManagerModule.ts | 146 +- packages/modules/src/index.ts | 35 +- .../modules/src/interfaces/ISessionStorage.ts | 20 +- .../src/interfaces/IValidationModule.ts | 17 +- .../session-storage/SessionLocalStorage.ts | 61 +- .../ERC20SessionValidationModule.ts | 14 +- packages/modules/src/utils/Constants.ts | 2 +- packages/modules/src/utils/Helper.ts | 41 + packages/modules/src/utils/Types.ts | 72 +- packages/modules/tests/modules.spec.ts | 45 + .../multiChainValidationModule.e2e.spec.ts | 92 + .../tests/sessionValidationModule.e2e.spec.ts | 154 + packages/modules/tests/utils/customSession.ts | 218 + .../tests/utils/sessionStorageData/.gitkeep | 0 packages/modules/tsconfig.build.json | 32 + packages/modules/tsconfig.json | 22 +- packages/node-client/CHANGELOG.md | 73 - packages/node-client/README.md | 77 - packages/node-client/package.json | 74 - packages/node-client/src/INodeClient.ts | 93 - packages/node-client/src/NodeClient.ts | 145 - packages/node-client/src/index.ts | 5 - .../node-client/src/types/NodeClientTypes.ts | 225 - packages/node-client/src/utils/index.ts | 3 - .../node-client/tests/node-client.spec.ts | 22 - packages/node-client/tsconfig.json | 9 - packages/particle-auth/.esbuild.js | 58 + packages/particle-auth/package.json | 33 +- packages/particle-auth/tsconfig.build.json | 32 + packages/particle-auth/tsconfig.json | 3 +- packages/paymaster/.esbuild.js | 58 + packages/paymaster/CHANGELOG.md | 40 +- packages/paymaster/Readme.md | 12 +- packages/paymaster/package.json | 44 +- packages/paymaster/src/BiconomyPaymaster.ts | 249 +- packages/paymaster/src/index.ts | 12 +- .../src/interfaces/IHybridPaymaster.ts | 22 +- .../paymaster/src/interfaces/IPaymaster.ts | 6 +- .../src/{constants.ts => utils/Constants.ts} | 3 +- packages/paymaster/src/utils/Helpers.ts | 7 + packages/paymaster/src/utils/Types.ts | 90 +- .../paymaster/tests/paymaster.e2e.spec.ts | 19 + packages/paymaster/tests/paymaster.spec.ts | 15 +- packages/paymaster/tsconfig.build.json | 32 + packages/paymaster/tsconfig.json | 3 +- packages/transak/.esbuild.js | 58 + packages/transak/package.json | 33 +- packages/transak/src/index.ts | 2 +- packages/transak/tsconfig.build.json | 32 + packages/transak/tsconfig.json | 5 +- rebuild.sh | 40 +- tests/chains.config.ts | 43 + tests/index.d.ts | 26 + tests/setup-e2e-tests.ts | 142 + tests/setup-unit-tests.ts | 75 + tests/utils.ts | 45 + tsconfig.json | 10 +- yarn.lock | 9872 +++++++++++++++++ 162 files changed, 15950 insertions(+), 12473 deletions(-) create mode 100644 .env.example create mode 100644 .github/workflows/docs.yml create mode 100644 .github/workflows/pull_request_approved.yml create mode 100644 jest.config.e2e.ts create mode 100644 packages/account/.esbuild.js delete mode 100644 packages/account/src/BaseSmartAccount.ts delete mode 100644 packages/account/src/BiconomySmartAccount.ts delete mode 100644 packages/account/src/SmartAccount.ts create mode 100644 packages/account/src/abi/AccountResolver.ts create mode 100644 packages/account/src/abi/Factory.ts create mode 100644 packages/account/src/abi/SmartAccount.ts delete mode 100644 packages/account/src/interfaces/IBaseSmartAccount.ts delete mode 100644 packages/account/src/interfaces/IBiconomySmartAccount.ts delete mode 100644 packages/account/src/interfaces/ISmartAccount.ts delete mode 100644 packages/account/src/utils/Preverificaiton.ts create mode 100644 packages/account/src/utils/Utils.ts delete mode 100644 packages/account/src/utils/VoidSigner.ts create mode 100644 packages/account/src/utils/index.ts delete mode 100644 packages/account/tests/SmartAccountV1.testnet.spec.ts delete mode 100644 packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts delete mode 100644 packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts delete mode 100644 packages/account/tests/SmartAccountV2.local.spec.ts create mode 100644 packages/account/tests/account.e2e.spec.ts create mode 100644 packages/account/tsconfig.build.json create mode 100644 packages/account/typedoc.json create mode 100644 packages/bundler/.esbuild.js create mode 100644 packages/bundler/src/utils/Utils.ts create mode 100644 packages/bundler/tests/bundler.e2e.spec.ts create mode 100644 packages/bundler/tsconfig.build.json delete mode 100644 packages/common/.depcheckrc create mode 100644 packages/common/.esbuild.js delete mode 100644 packages/common/CHANGELOG.md delete mode 100644 packages/common/abis/biconomy_v1.0.0/SmartAccountFactory_v1.0.0.json delete mode 100644 packages/common/abis/biconomy_v1.0.0/SmartAccount_v1.0.0.json delete mode 100644 packages/common/abis/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v1.0.0.json delete mode 100644 packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json delete mode 100644 packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json delete mode 100644 packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json delete mode 100644 packages/common/abis/entrypoint/EntryPoint_v0.0.5.json delete mode 100644 packages/common/abis/entrypoint/EntryPoint_v0.0.6.json delete mode 100644 packages/common/abis/misc/AddressResolver.json delete mode 100644 packages/common/src/Constants.ts delete mode 100644 packages/common/src/ContractsInstances.ts delete mode 100644 packages/common/src/ERC4337Utils.ts delete mode 100644 packages/common/src/Utils.ts delete mode 100644 packages/common/src/httpRequests.ts create mode 100644 packages/common/src/utils/Constants.ts create mode 100644 packages/common/src/utils/EthersSigner.ts create mode 100644 packages/common/src/utils/Helpers/convertSigner.ts create mode 100644 packages/common/src/utils/Helpers/index.ts rename packages/{node-client => common}/src/utils/HttpRequests.ts (82%) rename packages/common/src/{ => utils}/Logger.ts (100%) create mode 100644 packages/common/src/utils/Types.ts delete mode 100644 packages/common/tests/ERC4337Utils.spec.ts create mode 100644 packages/common/tsconfig.build.json delete mode 100644 packages/core-types/CHANGELOG.md delete mode 100644 packages/core-types/README.md delete mode 100644 packages/core-types/package.json delete mode 100644 packages/core-types/src/BundlerTypes.ts delete mode 100644 packages/core-types/src/ChainsTypes.ts delete mode 100644 packages/core-types/src/PaymasterServiceTypes.ts delete mode 100644 packages/core-types/src/Types.ts delete mode 100644 packages/core-types/src/index.ts delete mode 100644 packages/core-types/tests/core-types.spec.ts delete mode 100644 packages/core-types/tsconfig.json create mode 100644 packages/modules/.esbuild.js create mode 100644 packages/modules/src/utils/Helper.ts create mode 100644 packages/modules/tests/modules.spec.ts create mode 100644 packages/modules/tests/multiChainValidationModule.e2e.spec.ts create mode 100644 packages/modules/tests/sessionValidationModule.e2e.spec.ts create mode 100644 packages/modules/tests/utils/customSession.ts create mode 100644 packages/modules/tests/utils/sessionStorageData/.gitkeep create mode 100644 packages/modules/tsconfig.build.json delete mode 100644 packages/node-client/CHANGELOG.md delete mode 100644 packages/node-client/README.md delete mode 100644 packages/node-client/package.json delete mode 100644 packages/node-client/src/INodeClient.ts delete mode 100644 packages/node-client/src/NodeClient.ts delete mode 100644 packages/node-client/src/index.ts delete mode 100644 packages/node-client/src/types/NodeClientTypes.ts delete mode 100644 packages/node-client/src/utils/index.ts delete mode 100644 packages/node-client/tests/node-client.spec.ts delete mode 100644 packages/node-client/tsconfig.json create mode 100644 packages/particle-auth/.esbuild.js create mode 100644 packages/particle-auth/tsconfig.build.json create mode 100644 packages/paymaster/.esbuild.js rename packages/paymaster/src/{constants.ts => utils/Constants.ts} (79%) create mode 100644 packages/paymaster/src/utils/Helpers.ts create mode 100644 packages/paymaster/tests/paymaster.e2e.spec.ts create mode 100644 packages/paymaster/tsconfig.build.json create mode 100644 packages/transak/.esbuild.js create mode 100644 packages/transak/tsconfig.build.json create mode 100644 tests/chains.config.ts create mode 100644 tests/index.d.ts create mode 100644 tests/setup-e2e-tests.ts create mode 100644 tests/setup-unit-tests.ts create mode 100644 tests/utils.ts create mode 100644 yarn.lock diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..a293b6aaf --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +E2E_PRIVATE_KEY_ONE= +E2E_PRIVATE_KEY_TWO= +E2E_BICO_PAYMASTER_KEY_MUMBAI= +E2E_BICO_PAYMASTER_KEY_BASE= +BICONOMY_SDK_DEBUG=true \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 78d998dfd..eb97a48dc 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -23,9 +23,11 @@ module.exports = { "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }], "security/detect-object-injection": "warn", "security/detect-unsafe-regex": "error", - "import/extensions": "off", + "import/extensions": "error", // Now we need to specify extensions for imports for esm builds "security/detect-object-injection": "off", // turning off Injection Sink rule "@typescript-eslint/no-throw-literal": "off", // temp deactivated needs to be removed once fixed + "@typescript-eslint/ban-ts-ignore": "off", + "@typescript-eslint/ban-ts-comment": "off", }, settings: {}, overrides: [ diff --git a/.github/workflows/check_branch_name.yml b/.github/workflows/check_branch_name.yml index 9c4cf9a67..39422432d 100644 --- a/.github/workflows/check_branch_name.yml +++ b/.github/workflows/check_branch_name.yml @@ -18,4 +18,4 @@ jobs: if [[ ! $BRANCH_NAME =~ ^(features/|fixes/|releases/) ]]; then echo "error: Branch names should follow GitFlow naming convention (features/, fixes/, releases/)." exit 1 - fi \ No newline at end of file + fi diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000..5b5dd6522 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,27 @@ +name: Build and Deploy Documentation +on: + workflow_dispatch: + push: + branches: + - develop + - v4 + +permissions: + contents: write +jobs: + build-docs-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v3 + + - name: Install and Build + run: | + yarn + yarn build + yarn --cwd ./packages/account docs + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: ./packages/account/docs diff --git a/.github/workflows/pull_request_approved.yml b/.github/workflows/pull_request_approved.yml new file mode 100644 index 000000000..d4f142659 --- /dev/null +++ b/.github/workflows/pull_request_approved.yml @@ -0,0 +1,33 @@ +name: E2E Test workflow +on: + pull_request_review: + types: [submitted] + workflow_dispatch: +jobs: + e2e_test: + if: github.event.review.state == 'approved' + name: E2E tests + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18.x] + + steps: + - name: Checkout + uses: "actions/checkout@main" + + - name: Set Node.js + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: yarn install --frozen-lockfile && yarn build + + - name: Run tests + env: + E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} + E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} + E2E_BICO_PAYMASTER_KEY_MUMBAI: ${{ secrets.E2E_BICO_PAYMASTER_KEY_MUMBAI }} + E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} + run: yarn test:e2e diff --git a/.github/workflows/push_check.yml b/.github/workflows/push_check.yml index 6cfca05c1..35705a430 100644 --- a/.github/workflows/push_check.yml +++ b/.github/workflows/push_check.yml @@ -1,5 +1,6 @@ name: Test workflow -on: push +on: [push, workflow_dispatch] + jobs: lint: name: Lint sources diff --git a/.gitignore b/.gitignore index 3ac2e3158..cc1d5d78c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ logs *.log yarn-debug.log* yarn-error.log* -yarn.lock lockfiles # Diagnostic reports (https://nodejs.org/api/report.html) @@ -47,7 +46,6 @@ node_modules/ .yarn/build-state.yml .yarn/install-state.gz .pnp.* -yarn.lock # macOS .DS_Store @@ -58,20 +56,23 @@ artifacts deployments # lockfiles -packages/core-types/package-lock.json packages/account/package-lock.json -packages/common/package-lock.json +packages/modules/package-lock.json packages/bundler/package-lock.json -packages/node-client/package-lock.json packages/paymaster/package-lock.json packages/particle-auth/package-lock.json -packages/web3-auth/package-lock.json -packages/web3-auth-native/package-lock.json packages/transak/package-lock.json package-lock.json -yarn.lock + +#ignore sessionStorageData files +packages/modules/tests/utils/sessionStorageData/* +#except sessionStorageData folder +!packages/modules/tests/utils/sessionStorageData/.gitkeep # Typechain typechain openapi/ + +# docs +packages/account/docs/* \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index c9d82507f..b1215e876 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v14.17.0 \ No newline at end of file +v18.16.0 \ No newline at end of file diff --git a/README.md b/README.md index 096b1e7f2..00c720607 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,31 @@ -# Biconomy SDK: Your Gateway to ERC4337 Account Abstraction & Smart Accounts 🛠️ +# Biconomy SDK -![Biconomy SDK](https://img.shields.io/badge/Biconomy-SDK-blue.svg) ![TypeScript](https://img.shields.io/badge/-TypeScript-blue) ![Test Coverage](https://img.shields.io/badge/Coverage-45%25-yellow.svg) +![Biconomy SDK](https://img.shields.io/badge/Biconomy-SDK-blue.svg) +![TypeScript](https://img.shields.io/badge/-TypeScript-blue) +![Test Coverage](https://img.shields.io/badge/Coverage-79.82%25-green.svg) -

Biconomy SDK Banner

+## 👋 Introduction -## Introduction +The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. It is designed for seamless user experiences and offers non-custodial solutions for user onboarding, sending transactions (userOps), gas sponsorship and much more. -The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. This SDK is designed for seamless user experiences and offers non-custodial solutions for user onboarding, transaction management, and gas abstraction. +## 🛠️ Quickstart + +```typescript +import { createSmartAccountClient } from "@biconomy/account"; + +const smartAccount = await createSmartAccountClient({ + signer: viemWalletOrEthersSigner, + bundlerUrl: "", // From dashboard.biconomy.io + biconomyPaymasterApiKey: "", // From dashboard.biconomy.io +}); + +const { wait } = await smartAccount.sendTransaction({ to: "0x...", value: 1 }); -

Biconomy SDK Diagram

+const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); +``` ## 🌟 Features @@ -16,75 +33,101 @@ The Biconomy SDK is your all-in-one toolkit for building decentralized applicati - **Smart Accounts**: Enhance user experience with modular smart accounts. - **Paymaster Service**: Enable third-party gas sponsorship. - **Bundler Infrastructure**: Ensure efficient and reliable transaction bundling. -- **Backend Node**: Manage chain configurations and gas estimations. - -## 📦 Packages - -### Account - -Unlock the full potential of **ERC4337 Account Abstraction** with methods that simplify the creation and dispatch of UserOperations, streamlining dApp development and management. - -```javascript -import { ECDSAOwnershipValidationModule, DEFAULT_ECDSA_OWNERSHIP_MODULE } from "@biconomy/modules"; -import { IBundler, Bundler } from '@biconomy/bundler' -import { DEFAULT_ENTRYPOINT_ADDRESS } from "@biconomy/account" -import { providers } from 'ethers' -import { ChainId } from "@biconomy/core-types" +For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick start [here](https://docs.biconomy.io/quickstart). +## 📚 Resources -const module = await ECDSAOwnershipValidationModule.create({ - signer: wallet, - moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - }) +- [Biconomy Documentation](https://docs.biconomy.io/) +- [Biconomy Dashboard](https://dashboard.biconomy.io) +- [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) -const biconomySmartAccount = await BiconomySmartAccountV2.create({ - chainId: ChainId.POLYGON_MUMBAI, - bundler: bundler, - paymaster: paymaster, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - defaultValidationModule: module, - activeValidationModule: module -}) +## ⚙️ installation -console.log("address: ", await biconomySmartAccount.getAccountAddress()); +```bash +npm i @biconomy/account ``` -### Bundler +## 💼 Example Usages -Leverage standardized bundler infrastructure for efficient operation of account abstraction across EVM networks. +### [Initialise the smartAccount](https://bcnmy.github.io/biconomy-client-sdk/functions/createSmartAccountClient.html) -```javascript +| Key | Description | +| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| [signer](https://bcnmy.github.io/biconomy-client-sdk/packages/account/docs/interfaces/SmartAccountSigner.html) | This signer will be used for signing userOps for any transactions you build. Will accept ethers.JsonRpcSigner as well as a viemWallet | +| [biconomyPaymasterApiKey](https://dashboard.biconomy.io) | You can pass in a biconomyPaymasterApiKey necessary for sponsoring transactions (retrieved from the biconomy dashboard) | +| [bundlerUrl](https://dashboard.biconomy.io) | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | -import { IBundler, Bundler } from '@biconomy/bundler' +```typescript +import { createSmartAccountClient } from "@biconomy/account"; +import { createWalletClient, http, createPublicClient } from "viem"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { mainnet as chain } from "viem/chains"; +const account = privateKeyToAccount(generatePrivateKey()); +const signer = createWalletClient({ account, chain, transport: http() }); -const bundler: IBundler = new Bundler({ - bundlerUrl: 'https://bundler.biconomy.io/api/v2/80001/', - // Please go to https://dashboard.biconomy.io and generate bundler url - chainId: ChainId.POLYGON_MUMBAI, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - }) +const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, +}); ``` -### Paymaster +### [Send some ETH, have gas sponsored](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#sendTransaction) + +| Key | Description | +| --------------------------------------------------------------------------------- | -------------------------------------------------------------- | +| [oneOrManyTx](https://bcnmy.github.io/biconomy-client-sdk/types/Transaction.html) | Submit multiple or one transactions | +| [userOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/types/UserOpReceipt) | Returned information about your tx, receipts, userOpHashes etc | -Acting as third-party intermediaries, Paymasters have the capability to sponsor gas fees for an account, provided specific predefined conditions are met. Additionally, they can accept gas payments in ERC20 tokens from users' smart accounts, with the Paymaster managing the conversion to native tokens for gas payment. +```typescript +const oneOrManyTx = { to: "0x...", value: 1 }; -```javascript -const paymaster: IPaymaster = new BiconomyPaymaster({ - paymasterUrl: '' // From Biconomy Dashboard +const { wait } = await smartAccount.sendTransaction(oneOrManyTx, { + mode: PaymasterMode.SPONSORED, }); + +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); ``` -## 🛠️ Quickstart +### [Mint two NFTs, pay gas with token](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#getTokenFees) -For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick explore here https://docs.biconomy.io/docs/category/quick-explore +| Key | Description | +| -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| [buildUseropDto](https://bcnmy.github.io/biconomy-client-sdk/types/BuildUserOpOptions.html) | Options for building a userOp | +| [paymasterServiceData](https://bcnmy.github.io/biconomy-client-sdk/types/PaymasterUserOperationDto.html) | PaymasterOptions set in the buildUseropDto | -## 📚 Resources +```typescript +import { encodeFunctionData, parseAbi } from "viem"; + +const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: ["0x..."], +}); -- [Biconomy Documentation](https://docs.biconomy.io/docs/overview) -- [Biconomy Dashboard](https://dashboard.biconomy.io/) +const tx = { + to: nftAddress, + data: encodedCall, +}; +const oneOrManyTx = [tx, tx]; // Mint twice +const paymasterServiceData = { + mode: PaymasterMode.ERC20, + preferredToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC +}; +const buildUseropDto = { paymasterServiceData }; + +const { wait } = await smartAccount.sendTransaction(oneOrManyTx, buildUseropDto); + +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); +``` ## 🤝 Contributing diff --git a/jest.config.e2e.ts b/jest.config.e2e.ts new file mode 100644 index 000000000..2fff1ca6d --- /dev/null +++ b/jest.config.e2e.ts @@ -0,0 +1,6 @@ +import config from "./jest.config"; +const e2eConfig = { ...config }; +e2eConfig.testMatch = ["**/*.e2e.spec.ts"]; +e2eConfig.setupFilesAfterEnv = ["/tests/setup-e2e-tests.ts"]; + +export default e2eConfig; diff --git a/jest.config.ts b/jest.config.ts index a968e1995..7cc8b4123 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -78,7 +78,11 @@ const config: Config = { moduleFileExtensions: ["js", "mjs", "cjs", "jsx", "ts", "tsx", "json", "node"], // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - // moduleNameMapper: {}, + moduleNameMapper: { + '^(?!bn\.js$|hash\.js$)(.+)\\.js$': '$1' + }, + + extensionsToTreatAsEsm: ['.ts'], // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader // modulePathIgnorePatterns: [], @@ -123,7 +127,7 @@ const config: Config = { // setupFiles: [], // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], + setupFilesAfterEnv: ["/tests/setup-unit-tests.ts"], // The number of seconds after which a test is considered as slow and reported as such in the results. // slowTestThreshold: 5, @@ -141,7 +145,7 @@ const config: Config = { // testLocationInResults: false, // The glob patterns Jest uses to detect test files - testMatch: ["**/*.spec.ts"], + testMatch: ["**/*.spec.ts", "!**/*.e2e.spec.ts"], // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped // testPathIgnorePatterns: [ @@ -159,7 +163,7 @@ const config: Config = { // A map from regular expressions to paths to transformers transform: { - "^.+\\.tsx?$": "ts-jest", + "^.+\\.tsx?$": ["ts-jest", { useESM: true }], }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation @@ -179,6 +183,10 @@ const config: Config = { // Whether to use watchman for file crawling // watchman: true, + + globals: { + testDataPerChain: [], + } }; -export default config; +export default config; \ No newline at end of file diff --git a/linkAll.sh b/linkAll.sh index 6e9f511b6..3597ec1c0 100755 --- a/linkAll.sh +++ b/linkAll.sh @@ -1,2 +1,3 @@ !/bin/sh -for dir in ./packages/*; do (cd "$dir" && yarn link); done \ No newline at end of file +for dir in ./packages/*; do (cd "$dir" && yarn link); done +cd ./packages/account && yarn link '@biconomy/bundler' '@biconomy/modules' '@biconomy/paymaster' '@biconomy/common' \ No newline at end of file diff --git a/package.json b/package.json index 65f030a37..0939192fb 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,10 @@ "author": "Biconomy (https://biconomy.io)", "private": true, "scripts": { - "dev": "yarn rebuild && yarn install && yarn build && yarn link:all", + "dev": "yarn rebuild && yarn install && lerna run build && yarn link:all", "rebuild": "./rebuild.sh", "link:all": "./linkAll.sh", - "build": "lerna run build", + "build": "yarn rebuild && yarn install && lerna run build", "clean": "lerna clean && lerna run unbuild", "format": "lerna run format --npm-client=yarn", "prettier": "npx prettier --write .", @@ -40,6 +40,7 @@ "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", "test:coverage": "concurrently -k --success first 'yarn start:ganache' 'yarn jest --runInBand --coverage'", + "test:e2e": "yarn test:run --config=jest.config.e2e.ts", "diff": "lerna diff", "release": "lerna version patch --no-git-tag-version --no-push --conventional-commits --yes" }, @@ -56,13 +57,14 @@ }, "dependencies": { "node-gyp": "^9.4.0", - "typescript": "^5.2.2" + "typescript": "^5.3.3" }, "devDependencies": { "@types/debug": "^4.1.9", "@types/jest": "^29.5.4", "@typescript-eslint/eslint-plugin": "^6.7.0", "@typescript-eslint/parser": "^6.6.0", + "concurrently": "^8.2.2", "eslint": "^8.48.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-airbnb-typescript": "17.1.0", @@ -70,7 +72,7 @@ "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-security": "^1.7.1", - "ganache": "^7.9.1", + "ganache": "^7.9.2", "hardhat": "^2.17.3", "jest": "^29.7.0", "lerna": "^7.2.0", diff --git a/packages/account/.esbuild.js b/packages/account/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/account/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index f2f70fe1f..abff0df13 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -3,6 +3,40 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2023-02-06) + +### Features + +- Export bundler / paymaster instances + helpers from master package ([1d1f9d](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/1d1f9dafddf11bde0e1a75383bc935b22448bedd)) +- Export modules aliases from master package ([d6205c](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/d6205c4d76ab846ecdc10843c65e0277f3ceab00)) +- Added sendTransaction abstraction for buildUserOp + sendUserOp ([335c6e](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/335c6e7bfc5ca1ad240e7cbfd678d905c7f16812)) +- Reduced bundle size ([765a3e3](https://github.com/bcnmy/biconomy-client-sdk/commit/765a3e337fb9ad8f1f8dc92b5edcb1ed0940f94d)) +- Added bundler abstraction during SmartAccount init ([591bbb4](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/591bbb4e37774b16cbe801d583d31b3a14608bc1)) +- Added e2e tests that speak with prod bundler / paymasters ([4b4a53a](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/4b4a53aabdf9e22485599872332b3d63e8ddd87a)) +- Added support for simultaneous ethers + viem signers ([8e4b2c8](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/8e4b2c86b871130befbf3b733cf503d24f7226a5)) +- E2E tests for multichain modules ([ecc86e2](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/ecc86e2c7146046a981c3b6fd4bb29e4828b278b)) +- E2E tests for session validation modules ([4ad7ea7](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/4ad7ea7f8eb6a28854dcce83834b2b7ff9ad3287)) +- Added [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) ([638dae](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/638daee0ed6924f67c5151a2d0e5a02d32e4bf23)) +- Make txs more typesafe and default with valueOrData ([b1e5b5e](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b1e5b5e02ab3a7fb99faa1d45b55e3cbe8d6bc93)) +- Added createSmartAccountClient alias ([232472](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/232472c788bed0619cf6295ade076b6ec3a9e0f8)) +- Improve dx of using paymster to build userOps ([bb54888](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/bb548884e76a94a20329e49b18994503de9e3888)) +- Add ethers v6 signer support ([9727fd](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/9727fd51e47d62904399d17d48f5c9d6b9e591e5)) +- Improved dx of using gas payments with erc20 ([741806](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/741806da68457eba262e1a49be77fcc24360ba36)) + +### Chores + +- Removed SmartAccount Base class in favour of Alchemy's ([be82732](https://github.com/bcnmy/biconomy-client-sdk/commit/be827327fafa858b1551ade0c8389293034cacbb)) +- Migrate to viem v2 ([8ce04a](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/8ce04a56f6dcdfd1f44d9534f43e3c6eb8b3885d)) +- Remove common + core-types dependencies ([673514](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/6735141fbd21a855aadf69011bc06c69e20f811b)) +- Reincluded simulation flags ([25d2be](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/25d2bee339afd9d8c143fe6dad1898e28034be17)) + +### Bug Fixes + +- Make silently failing paymaster calls throw an error instead ([693bf0](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/693bf08591427c03e317d64d0491e23b1c96ea30)) +- Added string as a supported Transaction value type ([b905dc](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b905dcf3f7849396573fc8b51f808cc68061ee11)) +- Removed skipBundlerGasEstimation option ([b905dc](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b905dcf3f7849396573fc8b51f808cc68061ee11)) +- Ingest rpcUrl from SupportedSigners (ethers + viem) ([f56b4d](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/f56b4da08f47af577c01a641b81a3ef9e354cf97)) + ## 3.1.3 (2023-12-28) VERSION Bump Only. @@ -11,54 +45,44 @@ VERSION Bump Only. ### Features -* Make entryPointAddress optional in config([cf35c4a](https://github.com/bcnmy/biconomy-client-sdk/pull/336/commits/cf35c4a8266d27648035d8c9d63f1b9157553128)) +- Make entryPointAddress optional in config([cf35c4a](https://github.com/bcnmy/biconomy-client-sdk/pull/336/commits/cf35c4a8266d27648035d8c9d63f1b9157553128)) ### Bug Fixes -* use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) -* change receipt status type from boolean to string to be compatible with bundler response. ([317f986](https://github.com/bcnmy/biconomy-client-sdk/pull/342/commits/317f986b7e8f08d3ccf1e68f12a0696f1116de6b)) +- use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) +- change receipt status type from boolean to string to be compatible with bundler response. ([317f986](https://github.com/bcnmy/biconomy-client-sdk/pull/342/commits/317f986b7e8f08d3ccf1e68f12a0696f1116de6b)) ## 3.1.1 (2023-11-09) - ### Bug Fixes -* optimistic implementation for getNonce() and cache for isAccountDeployed ([5b1d4bf](https://github.com/bcnmy/biconomy-client-sdk/commit/5b1d4bfd7b5062d05bbb97286b833d879cd972b0)) - +- optimistic implementation for getNonce() and cache for isAccountDeployed ([5b1d4bf](https://github.com/bcnmy/biconomy-client-sdk/commit/5b1d4bfd7b5062d05bbb97286b833d879cd972b0)) ### Reverts -* update paymaster check in estimateUserOpGas ([2eb0237](https://github.com/bcnmy/biconomy-client-sdk/commit/2eb0237b37425da3558801bbe9d0ce5d6fd696c9)) - - - - +- update paymaster check in estimateUserOpGas ([2eb0237](https://github.com/bcnmy/biconomy-client-sdk/commit/2eb0237b37425da3558801bbe9d0ce5d6fd696c9)) ## 3.1.0 (2023-09-20) + Modular Account Abstraction is here. Contains BiconomySmartAccountV2 - an API for modular smart account. ### Bug Fixes -* add 10sec timeout limit for a test ([5d12fe7](https://github.com/bcnmy/biconomy-client-sdk/commit/5d12fe7d4b32e5c4628b971d22f6fc9cfcc6b414)) -* avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) -* BiconomySmartAccountV2 API Specs ([69a580e](https://github.com/bcnmy/biconomy-client-sdk/commit/69a580ea9e309141b500274aa95e20e24365b522)) -* build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) -* comments [#296](https://github.com/bcnmy/biconomy-client-sdk/issues/296) ([55b7376](https://github.com/bcnmy/biconomy-client-sdk/commit/55b7376336886226967b5bec5f11ba3ab750c5b6)) -* estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) -* gitInitCode cache issue ([4df3502](https://github.com/bcnmy/biconomy-client-sdk/commit/4df3502204e3c6c0c6faa90ba2c8aa0d6e826e48)) -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) - +- add 10sec timeout limit for a test ([5d12fe7](https://github.com/bcnmy/biconomy-client-sdk/commit/5d12fe7d4b32e5c4628b971d22f6fc9cfcc6b414)) +- avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) +- BiconomySmartAccountV2 API Specs ([69a580e](https://github.com/bcnmy/biconomy-client-sdk/commit/69a580ea9e309141b500274aa95e20e24365b522)) +- build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) +- comments [#296](https://github.com/bcnmy/biconomy-client-sdk/issues/296) ([55b7376](https://github.com/bcnmy/biconomy-client-sdk/commit/55b7376336886226967b5bec5f11ba3ab750c5b6)) +- estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) +- gitInitCode cache issue ([4df3502](https://github.com/bcnmy/biconomy-client-sdk/commit/4df3502204e3c6c0c6faa90ba2c8aa0d6e826e48)) +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +- unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) ### Features -* get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -* update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) - - - - +- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) ## 3.0.0 (2023-08-28) @@ -66,40 +90,27 @@ VERSION Bump Only. Modular SDK - consists stable version of below updates done in Alphas. - - ## 3.1.1-alpha.0 (2023-08-02) - ### Bug Fixes VERSION Bump Only. - - - - # 3.1.0-alpha.0 (2023-07-24) - ### Bug Fixes -* avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) - - - +- avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) ## 3.0.0-alpha.0 (2023-07-12) - ### Bug Fixes -* estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) -* unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) - +- estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) +- unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) ### Features -* get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -* update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) +- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) diff --git a/packages/account/Readme.md b/packages/account/Readme.md index fb8fc3959..0aa74954b 100644 --- a/packages/account/Readme.md +++ b/packages/account/Readme.md @@ -1,85 +1,138 @@ -# installation +# Biconomy SDK -Using `npm` package manager +![Biconomy SDK](https://img.shields.io/badge/Biconomy-SDK-blue.svg) +![TypeScript](https://img.shields.io/badge/-TypeScript-blue) +![Test Coverage](https://img.shields.io/badge/Coverage-79.82%25-green.svg) -```bash -npm i @biconomy/account -``` +## 👋 Introduction -OR +The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. It is designed for seamless user experiences and offers non-custodial solutions for user onboarding, sending transactions (userOps), gas sponsorship and much more. -Using `yarn` package manager +## ⚙️ installation ```bash -yarn add @biconomy/account +npm i @biconomy/account ``` -### Account +## 🛠️ Quickstart -Integrating and deploying Smart Accounts, building and sending user operations is a key offering of any toolkit designed for ERC4337. This package seamlessly integrates the essential features associated with ERC-4337 and simplifies the development of your Dapp's account and transaction rails with added usability features. +```typescript +import { createSmartAccountClient } from "@biconomy/account"; -The account package achieves this by providing a comprehensive set of methods that enable developers to effortlessly create UserOperations. Combined with the sophisticated, developer friendly and scalable infrastructure of Biconomy, it ensures efficient and reliable transmission of these operations across multiple EVM chains. +const smartAccount = await createSmartAccountClient({ + signer: viemWalletOrEthersSigner, + bundlerUrl: "", // From dashboard.biconomy.io + biconomyPaymasterApiKey: "", // From dashboard.biconomy.io +}); -## Smart Account instance configuration +const { wait } = await smartAccount.sendTransaction({ to: "0x...", value: 1 }); -#### BiconomySmartAccount (V1 Smart Account) +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); +``` -| Key | Description | -| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| signer | This signer will be used for signing userOps for any transactions you build. You can supply your your EOA wallet signer | -| chainId | This represents the network your smart wallet transactions will be conducted on. Take a look following Link for supported chain id's | -| rpcUrl | This represents the EVM node RPC URL you'll interact with, adjustable according to your needs. We recommend to use some private node url for efficient userOp building | -| paymaster | you can pass same paymaster instance that you have build in previous step. Alternatively, you can skip this if you are not interested in sponsoring transaction using paymaster | -| | Note: if you don't pass the paymaster instance, your smart account will need funds to pay for transaction fees. | -| bundler | You can pass same bundler instance that you have build in previous step. Alternatively, you can skip this if you are only interested in building userOP | +## 🌟 Features -## Example Usage +- **ERC4337 Account Abstraction**: Simplify user operations and gas payments. +- **Smart Accounts**: Enhance user experience with modular smart accounts. +- **Paymaster Service**: Enable third-party gas sponsorship. +- **Bundler Infrastructure**: Ensure efficient and reliable transaction bundling. -```typescript -// This is how you create BiconomySmartAccount instance in your dapp's +For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick start [here](https://docs.biconomy.io/quickstart). -import { BiconomySmartAccount, BiconomySmartAccountConfig } from "@biconomy/account"; +## 📚 Resources -// Note that paymaster and bundler are optional. You can choose to create new instances of this later and make account API use -const biconomySmartAccountConfig: BiconomySmartAccountConfig = { - signer: wallet.getSigner(), - chainId: ChainId.POLYGON_MAINNET, - rpcUrl: "", - // paymaster: paymaster, // check the README.md section of Paymaster package - // bundler: bundler, // check the README.md section of Bundler package -}; +- [Biconomy Documentation](https://docs.biconomy.io/) +- [Biconomy Dashboard](https://dashboard.biconomy.io) +- [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) -const biconomyAccount = new BiconomySmartAccount(biconomySmartAccountConfig); -const biconomySmartAccount = await biconomyAccount.init(); +## 💼 Example Usages -// native token transfer -// you can create any sort of transaction following same structure -const transaction = { - to: "0x85B51B068bF0fefFEFD817882a14f6F5BDF7fF2E", - data: "0x", - value: ethers.utils.parseEther("0.1"), -}; +### [Initialise the smartAccount](https://bcnmy.github.io/biconomy-client-sdk/functions/createSmartAccountClient.html) -// building partialUserOp -const partialUserOp = await biconomySmartAccount.buildUserOp([transaction]); +| Key | Description | +| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| [signer](https://bcnmy.github.io/biconomy-client-sdk/packages/account/docs/interfaces/SmartAccountSigner.html) | This signer will be used for signing userOps for any transactions you build. Will accept ethers.JsonRpcSigner as well as a viemWallet | +| [biconomyPaymasterApiKey](https://dashboard.biconomy.io) | You can pass in a biconomyPaymasterApiKey necessary for sponsoring transactions (retrieved from the biconomy dashboard) | +| [bundlerUrl](https://dashboard.biconomy.io) | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | -// using the paymaster package one can populate paymasterAndData to partial userOp. by default it is '0x' +```typescript +import { createSmartAccountClient } from "@biconomy/account"; +import { createWalletClient, http, createPublicClient } from "viem"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { mainnet as chain } from "viem/chains"; + +const account = privateKeyToAccount(generatePrivateKey()); +const signer = createWalletClient({ account, chain, transport: http() }); + +const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, +}); ``` +### [Send some ETH, have gas sponsored](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#sendTransaction) + +| Key | Description | +| --------------------------------------------------------------------------------- | -------------------------------------------------------------- | +| [oneOrManyTx](https://bcnmy.github.io/biconomy-client-sdk/types/Transaction.html) | Submit multiple or one transactions | +| [userOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/types/UserOpReceipt) | Returned information about your tx, receipts, userOpHashes etc | + ```typescript -const userOpResponse = await smartAccount.sendUserOp(partialUserOp); -const transactionDetails = await userOpResponse.wait(); -console.log("transaction details below"); -console.log(transactionDetails); +const oneOrManyTx = { to: "0x...", value: 1 }; + +const { wait } = await smartAccount.sendTransaction(oneOrManyTx, { + mode: PaymasterMode.SPONSORED, +}); + +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); ``` -Finally we send the userOp and save the value to a variable named userOpResponse and get the transactionDetails after calling `typescript userOpResponse.wait()` +### [Mint two NFTs, pay gas with token](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#getTokenFees) + +| Key | Description | +| -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| [buildUseropDto](https://bcnmy.github.io/biconomy-client-sdk/types/BuildUserOpOptions.html) | Options for building a userOp | +| [paymasterServiceData](https://bcnmy.github.io/biconomy-client-sdk/types/PaymasterUserOperationDto.html) | PaymasterOptions set in the buildUseropDto | ```typescript -const transactionDetails = await userOpResponse.wait(); -console.log("transaction details below"); -console.log(transactionDetails); +import { encodeFunctionData, parseAbi } from "viem"; + +const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: ["0x..."], +}); + +const tx = { + to: nftAddress, + data: encodedCall, +}; +const oneOrManyTx = [tx, tx]; // Mint twice +const paymasterServiceData = { + mode: PaymasterMode.ERC20, + preferredToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC +}; +const buildUseropDto = { paymasterServiceData }; + +const { wait } = await smartAccount.sendTransaction(oneOrManyTx, buildUseropDto); + +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); ``` -#### BiconomySmartAccount (V2 Smart Account aka Modular Smart Account) +## 🤝 Contributing + +Community contributions are welcome! For guidelines on contributing, please read our [contribution guidelines](./CONTRIBUTING.md). + +## 📜 License +This project is licensed under the MIT License. See the [LICENSE.md](./LICENSE.md) file for details. diff --git a/packages/account/package.json b/packages/account/package.json index 1dfa29482..da1d5a7a6 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -2,8 +2,18 @@ "name": "@biconomy/account", "version": "3.1.3", "description": "This package provides apis for ERC-4337 based smart account implementations", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "keywords": [ "Ethereum", "Smart Account", @@ -14,17 +24,28 @@ "SDK" ], "scripts": { + "docs": "typedoc", "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "test:concurrently": "concurrently -k --success first 'yarn start:ganache' 'yarn test'", "test:cov": "jest --coverage", "test": "jest tests/**/*.spec.ts --runInBand", "test:run": "yarn test:concurrently", "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" + "lint": "tslint -p tsconfig.json", + "docs:deploy": "yarn docs && gh-pages -d docs" }, - "author": "talhamalik883 ", + "author": "Biconomy", "license": "MIT", "files": [ "dist/*", @@ -34,24 +55,21 @@ "access": "public" }, "devDependencies": { + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "gh-pages": "^6.1.1", "nock": "^13.2.9", - "viem": "^1.19.11" + "npm-dts": "^1.3.12", + "typedoc": "^0.25.7", + "lru-cache": "^10.0.1" }, "dependencies": { - "@account-abstraction/contracts": "^0.6.0", - "@account-abstraction/utils": "^0.4.0", - "@alchemy/aa-core": "^1.2.2", - "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0", + "@alchemy/aa-core": "3.0.0-alpha.4", "@biconomy/bundler": "^3.1.3", "@biconomy/common": "^3.1.3", - "@biconomy/core-types": "^3.1.3", "@biconomy/modules": "^3.1.3", - "@biconomy/node-client": "^3.1.3", "@biconomy/paymaster": "^3.1.3", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "ethers": "^5.7.0", - "loglevel": "^1.8.1", - "lru-cache": "^10.0.1" + "viem": "^2.7.3" } } diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts deleted file mode 100644 index 90bb0ecff..000000000 --- a/packages/account/src/BaseSmartAccount.ts +++ /dev/null @@ -1,481 +0,0 @@ -import { JsonRpcProvider, Provider } from "@ethersproject/providers"; -import { BigNumber, BigNumberish, BytesLike, ethers, Bytes } from "ethers"; -import { IBaseSmartAccount } from "./interfaces/IBaseSmartAccount"; -import { defaultAbiCoder, keccak256 } from "ethers/lib/utils"; -import { UserOperation, ChainId } from "@biconomy/core-types"; -import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; -import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS, isNullOrUndefined } from "@biconomy/common"; -import { Bundler, IBundler, UserOpResponse } from "@biconomy/bundler"; -import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; -import { SendUserOpParams } from "@biconomy/modules"; -import { SponsorUserOperationDto, BiconomyPaymaster, PaymasterMode, IHybridPaymaster } from "@biconomy/paymaster"; -import { BaseSmartAccountConfig, EstimateUserOpGasParams, TransactionDetailsForUserOp } from "./utils/Types"; -import { GasOverheads } from "./utils/Preverificaiton"; -import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { DEFAULT_ENTRYPOINT_ADDRESS, DefaultGasLimit } from "./utils/Constants"; -import { LRUCache } from "lru-cache"; - -type UserOperationKey = keyof UserOperation; - -export abstract class BaseSmartAccount implements IBaseSmartAccount { - bundler?: IBundler; // httpRpcClient - - paymaster?: IPaymaster; // paymasterAPI - - overheads?: Partial; - - entryPointAddress!: string; - - accountAddress?: string; - - // owner?: Signer // owner is not mandatory for some account implementations - index: number; - - chainId?: ChainId; - - provider: Provider; - - // entryPoint connected to "zero" address. allowed to make static calls (e.g. to getSenderAddress) - private readonly entryPoint!: EntryPoint; - - private isContractDeployedCache = new LRUCache({ - max: 500, - }); - - constructor(_smartAccountConfig: BaseSmartAccountConfig) { - this.index = _smartAccountConfig.index ?? 0; - this.overheads = _smartAccountConfig.overheads; - this.entryPointAddress = _smartAccountConfig.entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS; - this.accountAddress = _smartAccountConfig.accountAddress; - - this.chainId = _smartAccountConfig.chainId; - - if (_smartAccountConfig.bundlerUrl) { - this.bundler = new Bundler({ - bundlerUrl: _smartAccountConfig.bundlerUrl, - chainId: _smartAccountConfig.chainId, - }); - } else { - this.bundler = _smartAccountConfig.bundler; - } - - if (_smartAccountConfig.paymaster) { - this.paymaster = _smartAccountConfig.paymaster; - } - - this.provider = _smartAccountConfig.provider ?? new JsonRpcProvider(RPC_PROVIDER_URLS[this.chainId]); - - // Create an instance of the EntryPoint contract using the provided address and provider (facory "connect" contract address) - // Then, set the transaction's sender ("from" address) to the zero address (AddressZero). (contract "connect" from address) - this.entryPoint = EntryPoint__factory.connect(this.entryPointAddress, this.provider).connect(ethers.constants.AddressZero); - } - - async init(): Promise { - if (this.entryPointAddress === DEFAULT_ENTRYPOINT_ADDRESS) return this; - if ((await this.provider.getCode(this.entryPointAddress)) === "0x") { - throw new Error(`EntryPoint not deployed at ${this.entryPointAddress} at chainId ${this.chainId}}`); - } - return this; - } - - setEntryPointAddress(entryPointAddress: string): void { - this.entryPointAddress = entryPointAddress; - } - - validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { - for (const field of requiredFields) { - if (isNullOrUndefined(userOp[field])) { - throw new Error(`${String(field)} is missing in the UserOp`); - } - } - return true; - } - - isProviderDefined(): boolean { - if (!this.provider) throw new Error("Provider is undefined"); - - return true; - } - - /** - * return the value to put into the "initCode" field, if the contract is not yet deployed. - * this value holds the "factory" address, followed by this account's information - */ - abstract getAccountInitCode(): Promise; - - /** - * return current account's nonce. - */ - abstract getNonce(): Promise; - - /** - * encode the call from entryPoint through our account to the target contract. - * @param to - * @param value - * @param data - */ - abstract encodeExecute(_to: string, _value: BigNumberish, _data: BytesLike): Promise; - - /** - * encode the batch call from entryPoint through our account to the target contract. - * @param to - * @param value - * @param data - */ - abstract encodeExecuteBatch(_to: Array, _value: Array, _data: Array): Promise; - - /** - * sign a userOp's hash (userOpHash). - * @param userOpHash - */ - abstract signUserOpHash(_userOpHash: string): Promise; - - abstract signMessage(_message: Bytes | string): Promise; - - /** - * get dummy signature for userOp - */ - abstract getDummySignature(): Promise; - - /** - * Sign the filled userOp. - * @param userOp the UserOperation to sign (with signature field ignored) - */ - async signUserOp(userOp: Partial): Promise { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - ]; - this.validateUserOp(userOp, requiredFields); - const userOpHash = await this.getUserOpHash(userOp); - let signature = await this.signUserOpHash(userOpHash); - - // Some signers do not return signed data with 0x prefix. make sure the v value is 27/28 instead of 0/1 - // Also split sig and add +27 to v is v is only 0/1. then stitch it back - - // Note: Should only be applied for ECDSA k1 signatures - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); - } - if (signature.slice(0, 2) !== "0x") { - signature = "0x" + signature; - } - - userOp.signature = signature; - return userOp as UserOperation; - } - - /** - * - * @param userOp - * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. - * @returns Promise - */ - async sendUserOp(userOp: Partial): Promise { - Logger.log("userOp received in base account ", userOp); - delete userOp.signature; - const userOperation = await this.signUserOp(userOp); - const bundlerResponse = await this.sendSignedUserOp(userOperation); - return bundlerResponse; - } - - /** - * - * @param userOp - * @description This function call will take 'signedUserOp' as input and send it to the bundler - * @returns - */ - async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpParams): Promise { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - "signature", - ]; - this.validateUserOp(userOp, requiredFields); - Logger.log("userOp validated"); - if (!this.bundler) throw new Error("Bundler is not provided"); - Logger.log("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp, params?.simulationType); - return bundlerResponse; - } - - async calculateUserOpGasValues(userOp: Partial): Promise> { - if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - let feeData = null; - - if ( - userOp.maxFeePerGas === undefined || - userOp.maxFeePerGas === null || - userOp.maxPriorityFeePerGas === undefined || - userOp.maxPriorityFeePerGas === null - ) { - feeData = await this.provider.getFeeData(); - } - - if (userOp.maxFeePerGas === undefined || userOp.maxFeePerGas === null) { - userOp.maxFeePerGas = feeData?.maxFeePerGas ?? feeData?.gasPrice ?? (await this.provider.getGasPrice()); - } - - if (userOp.maxPriorityFeePerGas === undefined || userOp.maxPriorityFeePerGas === null) { - userOp.maxPriorityFeePerGas = feeData?.maxPriorityFeePerGas ?? feeData?.gasPrice ?? (await this.provider.getGasPrice()); - } - if (userOp.initCode) userOp.verificationGasLimit = userOp.verificationGasLimit ?? (await this.getVerificationGasLimit(userOp.initCode)); - userOp.callGasLimit = - userOp.callGasLimit ?? - (await this.provider.estimateGas({ - from: this.entryPointAddress, - to: userOp.sender, - data: userOp.callData, - })); - userOp.preVerificationGas = userOp.preVerificationGas ?? (await this.getPreVerificationGas(userOp)); - return userOp; - } - - async estimateUserOpGas(params: EstimateUserOpGasParams): Promise> { - let userOp = params.userOp; - const { overrides, skipBundlerGasEstimation, paymasterServiceData } = params; - const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; - this.validateUserOp(userOp, requiredFields); - - let finalUserOp = userOp; - const skipBundlerCall = skipBundlerGasEstimation ?? true; - // Override gas values in userOp if provided in overrides params - if (overrides) { - userOp = { ...userOp, ...overrides }; - } - - Logger.log("userOp in estimation", userOp); - - if (skipBundlerCall) { - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { - if (isNullOrUndefined(userOp.maxFeePerGas) || isNullOrUndefined(userOp.maxPriorityFeePerGas)) { - throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); - } - if (paymasterServiceData?.mode === PaymasterMode.SPONSORED) { - // Making call to paymaster to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( - this.paymaster as IHybridPaymaster - ).getPaymasterAndData(userOp, paymasterServiceData); - if (paymasterAndData === "0x" && (callGasLimit === undefined || verificationGasLimit === undefined || preVerificationGas === undefined)) { - throw new Error("Since you intend to use sponsorship paymaster, please check and make sure policies are set on the dashboard"); - } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; - } else { - // use dummy values for gas limits as fee quote call will ignore this later. - finalUserOp.callGasLimit = DefaultGasLimit.callGasLimit; - finalUserOp.verificationGasLimit = DefaultGasLimit.verificationGasLimit; - finalUserOp.preVerificationGas = DefaultGasLimit.preVerificationGas; - } - } else { - { - Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); - finalUserOp = await this.calculateUserOpGasValues(userOp); - finalUserOp.paymasterAndData = "0x"; - } - } - } else { - if (!this.bundler) throw new Error("Bundler is not provided"); - delete userOp.maxFeePerGas; - delete userOp.maxPriorityFeePerGas; - // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = - await this.bundler.estimateUserOpGas(userOp); - // if neither user sent gas fee nor the bundler, estimate gas from provider - if ( - isNullOrUndefined(userOp.maxFeePerGas) && - isNullOrUndefined(userOp.maxPriorityFeePerGas) && - (isNullOrUndefined(maxFeePerGas) || isNullOrUndefined(maxPriorityFeePerGas)) - ) { - const feeData = await this.provider.getFeeData(); - finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - } else { - finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; - finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; - } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = "0x"; - } - return finalUserOp; - } - - // Would only be used if paymaster is attached - async getPaymasterAndData(userOp: Partial): Promise { - if (this.paymaster) { - const paymasterAndDataResponse: PaymasterAndDataResponse = await this.paymaster.getPaymasterAndData(userOp); - return paymasterAndDataResponse.paymasterAndData; - } - return "0x"; - } - - async isAccountDeployed(address: string): Promise { - if (this.isContractDeployedCache.get(address)) { - return true; - } - - this.isProviderDefined(); - let isDeployed = false; - const contractCode = await this.provider.getCode(address); - if (contractCode.length > 2) { - this.isContractDeployedCache.set(address, true); - isDeployed = true; - } else { - isDeployed = false; - } - return isDeployed; - } - - /** - * calculate the account address even before it is deployed - */ - async getCounterFactualAddress(): Promise { - const initCode = this.getAccountInitCode(); - // use entryPoint to query account address (factory can provide a helper method to do the same, but - // this method attempts to be generic - try { - await this.entryPoint.callStatic.getSenderAddress(initCode); - } catch (e: any) { - if (e.errorArgs == null) { - throw e; - } - return e.errorArgs.sender; - } - throw new Error("must handle revert"); - } - - /** - * return initCode value to into the UserOp. - * (either deployment code, or empty hex if contract already deployed) - */ - async getInitCode(): Promise { - if (await this.isAccountDeployed(await this.getAccountAddress())) { - return "0x"; - } - return this.getAccountInitCode(); - } - - async getPreVerificationGas(userOp: Partial): Promise { - return calcPreVerificationGas(userOp); - } - - async getVerificationGasLimit(initCode: BytesLike): Promise { - // Verification gas should be max(initGas(wallet deployment) + validateUserOp + validatePaymasterUserOp , postOp) - - const initGas = await this.estimateCreationGas(initCode as string); - const validateUserOpGas = BigNumber.from(DefaultGasLimits.validatePaymasterUserOpGas + DefaultGasLimits.validateUserOpGas); - const postOpGas = BigNumber.from(DefaultGasLimits.postOpGas); - - let verificationGasLimit = BigNumber.from(validateUserOpGas).add(initGas); - - if (BigNumber.from(postOpGas).gt(verificationGasLimit)) { - verificationGasLimit = postOpGas; - } - return verificationGasLimit; - } - - /** - * return the account's address. - * this value is valid even before deploying the contract. - */ - async getAccountAddress(): Promise { - if (this.accountAddress == null) { - // means it needs deployment - this.accountAddress = await this.getCounterFactualAddress(); - } - return this.accountAddress; - } - - async estimateCreationGas(initCode?: string): Promise { - if (initCode == null || initCode === "0x") return 0; - const deployerAddress = initCode.substring(0, 42); - const deployerCallData = "0x" + initCode.substring(42); - return this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }); - } - - /** - * get the transaction that has this userOpHash mined, or null if not found - * @param userOpHash returned by sendUserOpToBundler (or by getUserOpHash..) - * @param timeout stop waiting after this timeout - * @param interval time to wait between polls. - * @return the transactionHash this userOp was mined, or null if not found. - */ - async getUserOpReceipt(userOpHash: string, timeout = 30000, interval = 5000): Promise { - const endtime = Date.now() + timeout; - while (Date.now() < endtime) { - const events = await this.entryPoint.queryFilter(this.entryPoint.filters.UserOperationEvent(userOpHash)); - if (events.length > 0) { - return events[0].transactionHash; - } - await new Promise((resolve) => setTimeout(resolve, interval)); - } - return null; - } - - async getUserOpHash(userOp: Partial): Promise { - const userOpHash = keccak256(packUserOp(userOp, true)); - const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, this.entryPoint.address, this.chainId]); - return keccak256(enc); - } - - /** - * ABI-encode a user operation. used for calldata cost estimation - */ - packUserOp(userOp: NotPromise): string { - return packUserOp(userOp, false); - } - - async encodeUserOpCallDataAndGasLimit(detailsForUserOp: TransactionDetailsForUserOp): Promise<{ callData: string; callGasLimit: BigNumber }> { - function parseNumber(a: any): BigNumber | null { - if (a == null || a === "") return null; - return BigNumber.from(a.toString()); - } - - const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0); - const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data); - - const callGasLimit = - parseNumber(detailsForUserOp.gasLimit) ?? - (await this.provider.estimateGas({ - from: this.entryPointAddress, - to: this.getAccountAddress(), - data: callData, - })); - - return { - callData, - callGasLimit, - }; - } - - /** - * helper method: create and sign a user operation. - * @param info transaction details for the userOp - */ - async createSignedUserOp(info: TransactionDetailsForUserOp): Promise { - Logger.log("createSignedUserOp called with info", info); - throw new Error("Not implemented. Please use buildUserOp/buildUserOperation in account implementation"); - } -} diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts deleted file mode 100644 index 3307856b7..000000000 --- a/packages/account/src/BiconomySmartAccount.ts +++ /dev/null @@ -1,544 +0,0 @@ -import { JsonRpcProvider } from "@ethersproject/providers"; -import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; -import { SmartAccount } from "./SmartAccount"; -import { - Logger, - NODE_CLIENT_URL, - RPC_PROVIDER_URLS, - SmartAccountFactory_v100, - SmartAccount_v200, - getEntryPointContract, - getSAFactoryContract, - getSAProxyContract, - isNullOrUndefined, -} from "@biconomy/common"; -import { BiconomySmartAccountConfig, Overrides, BiconomyTokenPaymasterRequest, InitilizationData } from "./utils/Types"; -import { UserOperation, Transaction, SmartAccountType } from "@biconomy/core-types"; -import NodeClient from "@biconomy/node-client"; -import INodeClient from "@biconomy/node-client"; -import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; -import { IBiconomySmartAccount } from "./interfaces/IBiconomySmartAccount"; -import { - ISmartAccount, - SupportedChainsResponse, - BalancesResponse, - BalancesDto, - UsdBalanceResponse, - SmartAccountByOwnerDto, - SmartAccountsResponse, - SCWTransactionResponse, -} from "@biconomy/node-client"; -import { - ENTRYPOINT_ADDRESSES, - BICONOMY_FACTORY_ADDRESSES, - BICONOMY_IMPLEMENTATION_ADDRESSES, - DEFAULT_ENTRYPOINT_ADDRESS, - DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS, - BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, -} from "./utils/Constants"; -import { Signer } from "ethers"; - -export class BiconomySmartAccount extends SmartAccount implements IBiconomySmartAccount { - private factory!: SmartAccountFactory_v100; - - private nodeClient: INodeClient; - - private accountIndex!: number; - - private address!: string; - - private smartAccountInfo!: ISmartAccount; - - private _isInitialised!: boolean; - - constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountConfig) { - const { signer, rpcUrl, entryPointAddress, bundler, paymaster, chainId, nodeClientUrl } = biconomySmartAccountConfig; - - const _entryPointAddress = entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS; - super({ - bundler, - entryPointAddress: _entryPointAddress, - }); - const _rpcUrl = rpcUrl ?? RPC_PROVIDER_URLS[chainId]; - - if (!_rpcUrl) { - throw new Error( - `Chain Id ${chainId} is not supported. Please refer to the following link for supported chains list https://docs.biconomy.io/build-with-biconomy-sdk/gasless-transactions#supported-chains`, - ); - } - this.provider = new JsonRpcProvider(_rpcUrl); - this.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); - this.signer = signer; - - if (paymaster) { - this.paymaster = paymaster; - } - if (bundler) this.bundler = bundler; - } - - /** - * @description This function will initialise BiconomyAccount class state - * @returns Promise - */ - async init(initilizationData?: InitilizationData): Promise { - try { - let _accountIndex, signerAddress; - if (initilizationData) { - _accountIndex = initilizationData.accountIndex; - signerAddress = initilizationData.signerAddress; - } - - if (!_accountIndex) _accountIndex = 0; - this.isProviderDefined(); - this.isSignerDefined(); - - if (signerAddress) { - this.owner = signerAddress; - } else { - this.owner = await this.signer.getAddress(); - } - this.chainId = await this.provider.getNetwork().then((net) => net.chainId); - await this.initializeAccountAtIndex(_accountIndex); - this._isInitialised = true; - } catch (error) { - Logger.error(`Failed to call init: ${error}`); - throw error; - } - - return this; - } - - async attachSigner(_signer: Signer): Promise { - try { - this.signer = _signer; - this.owner = await this.signer.getAddress(); - } catch (error) { - throw new Error(`Failed to get signer address`); - } - } - - private isInitialized(): boolean { - if (!this._isInitialised) - throw new Error( - "BiconomySmartAccount is not initialized. Please call init() on BiconomySmartAccount instance before interacting with any other function", - ); - return true; - } - - private setProxyContractState(): void { - if (!BICONOMY_IMPLEMENTATION_ADDRESSES[this.smartAccountInfo.implementationAddress]) - throw new Error( - "Could not find attached implementation address against your smart account. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - const proxyInstanceDto = { - smartAccountType: SmartAccountType.BICONOMY, - version: BICONOMY_IMPLEMENTATION_ADDRESSES[this.smartAccountInfo.implementationAddress], - contractAddress: this.address, - provider: this.provider, - }; - this.proxy = getSAProxyContract(proxyInstanceDto); - } - - private setEntryPointContractState(): void { - const _entryPointAddress = this.smartAccountInfo.entryPointAddress; - this.setEntryPointAddress(_entryPointAddress); - if (!ENTRYPOINT_ADDRESSES[_entryPointAddress]) - throw new Error( - "Could not find attached entrypoint address against your smart account. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - const entryPointInstanceDto = { - smartAccountType: SmartAccountType.BICONOMY, - version: ENTRYPOINT_ADDRESSES[_entryPointAddress], - contractAddress: _entryPointAddress, - provider: this.provider, - }; - this.entryPoint = getEntryPointContract(entryPointInstanceDto); - } - - private setFactoryContractState(): void { - const _factoryAddress = this.smartAccountInfo.factoryAddress; - if (!BICONOMY_FACTORY_ADDRESSES[_factoryAddress]) - throw new Error( - "Could not find attached factory address against your smart account. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - const factoryInstanceDto = { - smartAccountType: SmartAccountType.BICONOMY, - version: BICONOMY_FACTORY_ADDRESSES[_factoryAddress], - contractAddress: _factoryAddress, - provider: this.provider, - }; - this.factory = getSAFactoryContract(factoryInstanceDto) as SmartAccountFactory_v100; - } - - private async setContractsState(): Promise { - this.setProxyContractState(); - this.setEntryPointContractState(); - this.setFactoryContractState(); - } - - async initializeAccountAtIndex(accountIndex: number): Promise { - this.accountIndex = accountIndex; - this.address = await this.getSmartAccountAddress(accountIndex); - await this.setContractsState(); - await this.setInitCode(this.accountIndex); - } - - async getSmartAccountAddress(accountIndex = 0): Promise { - try { - this.isSignerDefined(); - let smartAccountsList: ISmartAccount[] = ( - await this.getSmartAccountsByOwner({ - chainId: this.chainId, - owner: this.owner, - index: accountIndex, - }) - ).data; - if (!smartAccountsList) - throw new Error( - "Failed to get smart account address. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - smartAccountsList = smartAccountsList.filter((smartAccount: ISmartAccount) => { - return accountIndex === smartAccount.index; - }); - if (smartAccountsList.length === 0) - throw new Error( - "Failed to get smart account address. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - this.smartAccountInfo = smartAccountsList[0]; - return this.smartAccountInfo.smartAccountAddress; - } catch (error) { - Logger.error(`Failed to get smart account address: ${error}`); - throw error; - } - } - - private async setInitCode(accountIndex = 0): Promise { - this.initCode = ethers.utils.hexConcat([ - this.factory.address, - this.factory.interface.encodeFunctionData("deployCounterFactualAccount", [this.owner, ethers.BigNumber.from(accountIndex)]), - ]); - return this.initCode; - } - - /** - * @description an overrided function to showcase overriding example - * @returns - */ - nonce(): Promise { - this.isProxyDefined(); - return this.proxy.nonce(); - } - - /** - * - * @param to { target } address of transaction - * @param value represents amount of native tokens - * @param data represent data associated with transaction - * @returns - */ - getExecuteCallData(to: string, value: BigNumberish, data: BytesLike): string { - this.isInitialized(); - this.isProxyDefined(); - const executeCallData = this.proxy.interface.encodeFunctionData("executeCall", [to, value, data]); - return executeCallData; - } - - /** - * - * @param to { target } array of addresses in transaction - * @param value represents array of amount of native tokens associated with each transaction - * @param data represent array of data associated with each transaction - * @returns - */ - getExecuteBatchCallData(to: Array, value: Array, data: Array): string { - this.isInitialized(); - this.isProxyDefined(); - const executeBatchCallData = this.proxy.interface.encodeFunctionData("executeBatchCall", [to, value, data]); - return executeBatchCallData; - } - - getDummySignature(): string { - return "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; - } - - getDummyPaymasterData(): string { - return "0x"; - } - - private async getNonce(): Promise { - let nonce = BigNumber.from(0); - try { - nonce = await this.nonce(); - } catch (error) { - // Not throwing this error as nonce would be 0 if this.nonce() throw exception, which is expected flow for undeployed account - Logger.log("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); - } - return nonce; - } - - private async getGasFeeValues( - overrides: Overrides | undefined, - skipBundlerGasEstimation: boolean | undefined, - ): Promise<{ maxFeePerGas?: BigNumberish | undefined; maxPriorityFeePerGas?: BigNumberish | undefined }> { - const gasFeeValues = { - maxFeePerGas: overrides?.maxFeePerGas, - maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas, - }; - try { - if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (skipBundlerGasEstimation ?? true)) { - const gasFeeEstimation = await this.bundler.getGasFeeValues(); - gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; - gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; - } - return gasFeeValues; - } catch (error: any) { - Logger.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); - return gasFeeValues; - } - } - - async buildUserOp( - transactions: Transaction[], - overrides?: Overrides, - skipBundlerGasEstimation?: boolean, - paymasterServiceData?: SponsorUserOperationDto, - ): Promise> { - this.isInitialized(); - const to = transactions.map((element: Transaction) => element.to); - const data = transactions.map((element: Transaction) => element.data ?? "0x"); - const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); - this.isProxyDefined(); - - const [nonce, gasFeeValues] = await Promise.all([this.getNonce(), this.getGasFeeValues(overrides, skipBundlerGasEstimation)]); - - let callData = ""; - if (transactions.length === 1) { - callData = this.getExecuteCallData(to[0], value[0], data[0]); - } else { - callData = this.getExecuteBatchCallData(to, value, data); - } - - let isDeployed = true; - - if (nonce.eq(0)) { - isDeployed = await this.isAccountDeployed(this.address); - } - - let userOp: Partial = { - sender: this.address, - nonce, - initCode: !isDeployed ? this.initCode : "0x", - callData: callData, - maxFeePerGas: gasFeeValues.maxFeePerGas || undefined, - maxPriorityFeePerGas: gasFeeValues.maxPriorityFeePerGas || undefined, - signature: this.getDummySignature(), - }; - - // Note: Can change the default behaviour of calling estimations using bundler/local - userOp = await this.estimateUserOpGas({ userOp, overrides, skipBundlerGasEstimation, paymasterServiceData }); - userOp.paymasterAndData = userOp.paymasterAndData ?? "0x"; - Logger.log("UserOp after estimation ", userOp); - - return userOp; - } - - private validateUserOpAndRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { - if (isNullOrUndefined(userOp.callData)) { - throw new Error("Userop callData cannot be undefined"); - } - - const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress; - Logger.log("requested fee token is ", feeTokenAddress); - - if (!feeTokenAddress || feeTokenAddress == ethers.constants.AddressZero) { - throw new Error("Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest"); - } - - const spender = tokenPaymasterRequest?.spender; - Logger.log("fee token approval to be checked and added for spender: ", spender); - - if (!spender || spender == ethers.constants.AddressZero) { - throw new Error("Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest"); - } - } - - /** - * - * @param userOp partial user operation without signature and paymasterAndData - * @param tokenPaymasterRequest This dto provides information about fee quote. Fee quote is received from earlier request getFeeQuotesOrData() to the Biconomy paymaster. - * maxFee and token decimals from the quote, along with the spender is required to append approval transaction. - * @notice This method should be called when gas is paid in ERC20 token using TokenPaymaster - * @description Optional method to update the userOp.calldata with batched transaction which approves the paymaster spender with necessary amount(if required) - * @returns updated userOp with new callData, callGasLimit - */ - async buildTokenPaymasterUserOp( - userOp: Partial, - tokenPaymasterRequest: BiconomyTokenPaymasterRequest, - ): Promise> { - this.validateUserOpAndRequest(userOp, tokenPaymasterRequest); - try { - let batchTo: Array = []; - let batchValue: Array = []; - let batchData: Array = []; - - let newCallData = userOp.callData; - Logger.log("received information about fee token address and quote ", tokenPaymasterRequest); - - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { - // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details - - // Review: might request this form of an array of Transaction - const approvalRequest: Transaction = await (this.paymaster as IHybridPaymaster).buildTokenApprovalTransaction( - tokenPaymasterRequest, - this.provider, - ); - Logger.log("approvalRequest is for erc20 token ", approvalRequest.to); - - if (approvalRequest.data == "0x" || approvalRequest.to == ethers.constants.AddressZero) { - return userOp; - } - - if (isNullOrUndefined(userOp.callData)) { - throw new Error("Userop callData cannot be undefined"); - } - - const decodedDataSmartWallet = this.proxy.interface.parseTransaction({ - data: userOp.callData!.toString(), - }); - if (!decodedDataSmartWallet) { - throw new Error("Could not parse call data of smart wallet for userOp"); - } - - const smartWalletExecFunctionName = decodedDataSmartWallet.name; - - if (smartWalletExecFunctionName === "executeCall") { - Logger.log("originally an executeCall for Biconomy Account"); - const methodArgsSmartWalletExecuteCall = decodedDataSmartWallet.args; - const toOriginal = methodArgsSmartWalletExecuteCall[0]; - const valueOriginal = methodArgsSmartWalletExecuteCall[1]; - const dataOriginal = methodArgsSmartWalletExecuteCall[2]; - - batchTo.push(toOriginal); - batchValue.push(valueOriginal); - batchData.push(dataOriginal); - } else if (smartWalletExecFunctionName === "executeBatchCall") { - Logger.log("originally an executeBatchCall for Biconomy Account"); - const methodArgsSmartWalletExecuteCall = decodedDataSmartWallet.args; - batchTo = methodArgsSmartWalletExecuteCall[0]; - batchValue = methodArgsSmartWalletExecuteCall[1]; - batchData = methodArgsSmartWalletExecuteCall[2]; - } - - if (approvalRequest.to && approvalRequest.data && approvalRequest.value) { - batchTo = [approvalRequest.to, ...batchTo]; - batchValue = [approvalRequest.value, ...batchValue]; - batchData = [approvalRequest.data, ...batchData]; - - newCallData = this.getExecuteBatchCallData(batchTo, batchValue, batchData); - } - const finalUserOp: Partial = { - ...userOp, - callData: newCallData, - }; - - return finalUserOp; - } - } catch (error) { - Logger.log("Failed to update userOp. sending back original op"); - Logger.error("Failed to update callData with error", error); - return userOp; - } - return userOp; - } - - async getAllTokenBalances(balancesDto: BalancesDto): Promise { - return this.nodeClient.getAllTokenBalances(balancesDto); - } - - async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { - return this.nodeClient.getTotalBalanceInUsd(balancesDto); - } - - async getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise { - return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto); - } - - async getTransactionsByAddress(chainId: number, address: string): Promise { - return this.nodeClient.getTransactionByAddress(chainId, address); - } - - async getTransactionByHash(txHash: string): Promise { - return this.nodeClient.getTransactionByHash(txHash); - } - - async getAllSupportedChains(): Promise { - return this.nodeClient.getAllSupportedChains(); - } - - async getUpdateImplementationData(newImplementationAddress?: string): Promise { - // V2 address or latest implementation if possible to jump from V1 -> Vn without upgrading to V2 - // If needed we can fetch this from backend config - - Logger.log("Recommended implementation address to upgrade to", BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0); - - const latestImplementationAddress = newImplementationAddress ?? DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS; // BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 // 2.0 - Logger.log("Requested implementation address to upgrade to", latestImplementationAddress); - - // by querying the proxy contract - // TODO: add isDeployed checks before reading below - const currentImplementationAddress = await this.proxy.getImplementation(); - Logger.log("Current implementation address for this Smart Account", currentImplementationAddress); - - if (ethers.utils.getAddress(currentImplementationAddress) !== ethers.utils.getAddress(latestImplementationAddress)) { - const impInterface = new ethers.utils.Interface(["function updateImplementation(address _implementation)"]); - const encodedData = impInterface.encodeFunctionData("updateImplementation", [latestImplementationAddress]); - return { to: this.address, value: BigNumber.from(0), data: encodedData }; - } else { - return { to: this.address, value: 0, data: "0x" }; - } - } - - async getModuleSetupData(ecdsaModuleAddress?: string): Promise { - try { - const moduleAddress = ecdsaModuleAddress ?? DEFAULT_ECDSA_OWNERSHIP_MODULE; - const ecdsaModule = await ECDSAOwnershipValidationModule.create({ - signer: this.signer, - moduleAddress: moduleAddress, - }); - - // initForSmartAccount - const ecdsaOwnershipSetupData = await ecdsaModule.getInitData(); - - const proxyInstanceDto = { - smartAccountType: SmartAccountType.BICONOMY, - version: "V2_0_0", // Review - contractAddress: this.address, - provider: this.provider, - }; - const accountV2: SmartAccount_v200 = getSAProxyContract(proxyInstanceDto) as SmartAccount_v200; - - const data = accountV2.interface.encodeFunctionData("setupAndEnableModule", [moduleAddress, ecdsaOwnershipSetupData]); - - return { to: this.address, value: 0, data: data }; - } catch (error) { - Logger.error("Failed to get module setup data", error); - // Could throw error - return { to: this.address, value: 0, data: "0x" }; - } - } - - // Once this userOp is sent (batch: a. updateImplementation and b. setupModule on upgraded proxy) - // Afterwards you can start using BiconomySmartAccountV2 - async updateImplementationUserOp(newImplementationAddress?: string, ecdsaModuleAddress?: string): Promise> { - const tx1 = await this.getUpdateImplementationData(newImplementationAddress); - const tx2 = await this.getModuleSetupData(ecdsaModuleAddress); - - if (tx1.data !== "0x" && tx2.data !== "0x") { - const partialUserOp: Partial = await this.buildUserOp([tx1, tx2]); - return partialUserOp; - } else { - throw new Error("Not eligible for upgrade"); - } - } -} diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index fe9ce9e39..e5a7bfb48 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1,71 +1,91 @@ -import { JsonRpcProvider } from "@ethersproject/providers"; -import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; -import { BaseSmartAccount } from "./BaseSmartAccount"; -import { Bytes, getCreate2Address, hexConcat, keccak256, solidityKeccak256 } from "ethers/lib/utils"; import { - Logger, - NODE_CLIENT_URL, - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - AddressResolver, - AddressResolver__factory, - isNullOrUndefined, -} from "@biconomy/common"; + Hex, + keccak256, + encodePacked, + getCreate2Address, + encodeAbiParameters, + parseAbiParameters, + toHex, + toBytes, + encodeFunctionData, + PublicClient, + createPublicClient, + http, + concatHex, + GetContractReturnType, + getContract, + decodeFunctionData, +} from "viem"; +import { + BaseSmartContractAccount, + getChain, + type BigNumberish, + type UserOperationStruct, + BatchUserOperationCallData, + SmartAccountSigner, +} from "@alchemy/aa-core"; +import { isNullOrUndefined, packUserOp } from "./utils/Utils.js"; +import { BaseValidationModule, ModuleInfo, SendUserOpParams, createECDSAOwnershipValidationModule } from "@biconomy/modules"; +import { + IHybridPaymaster, + IPaymaster, + Paymaster, + PaymasterMode, + SponsorUserOperationDto, + Bundler, + IBundler, + UserOpResponse, + extractChainIdFromBundlerUrl, + convertSigner, +} from "./index.js"; import { BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, CounterFactualAddressParam, BuildUserOpOptions, - Overrides, NonceOptions, - SmartAccountInfo, + Transaction, QueryParamsForAddressResolver, -} from "./utils/Types"; -import { BaseValidationModule, ECDSAOwnershipValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; -import { UserOperation, Transaction } from "@biconomy/core-types"; -import NodeClient from "@biconomy/node-client"; -import INodeClient from "@biconomy/node-client"; -import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { - SupportedChainsResponse, - BalancesResponse, - BalancesDto, - UsdBalanceResponse, - SmartAccountByOwnerDto, - SmartAccountsResponse, - SCWTransactionResponse, -} from "@biconomy/node-client"; -import { UserOpResponse } from "@biconomy/bundler"; + BiconomySmartAccountV2ConfigConstructorProps, + PaymasterUserOperationDto, + SimulationType, +} from "./utils/Types.js"; import { ADDRESS_RESOLVER_ADDRESS, BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, DEFAULT_BICONOMY_FACTORY_ADDRESS, DEFAULT_FALLBACK_HANDLER_ADDRESS, PROXY_CREATION_CODE, -} from "./utils/Constants"; -import log from "loglevel"; + ADDRESS_ZERO, + DEFAULT_ENTRYPOINT_ADDRESS, + ERROR_MESSAGES, +} from "./utils/Constants.js"; +import { BiconomyFactoryAbi } from "./abi/Factory.js"; +import { BiconomyAccountAbi } from "./abi/SmartAccount.js"; +import { AccountResolverAbi } from "./abi/AccountResolver.js"; +import { Logger } from "@biconomy/common"; +import { FeeQuotesOrDataDto, FeeQuotesOrDataResponse } from "@biconomy/paymaster"; + +type UserOperationKey = keyof UserOperationStruct; + +export class BiconomySmartAccountV2 extends BaseSmartContractAccount { + private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; -type UserOperationKey = keyof UserOperation; -export class BiconomySmartAccountV2 extends BaseSmartAccount { - private nodeClient!: INodeClient; + private index: number; - private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; + private chainId: number; - factoryAddress?: string; + private provider: PublicClient; - /** - * our account contract. - * should support the "execFromEntryPoint" and "nonce" methods - */ - accountContract?: SmartAccount_v200; + paymaster?: IPaymaster; + + bundler?: IBundler; - factory?: SmartAccountFactory_v200; + private accountContract?: GetContractReturnType; - private defaultFallbackHandlerAddress!: string; + private defaultFallbackHandlerAddress: Hex; - private implementationAddress!: string; + private implementationAddress: Hex; private scanForUpgradedAccountsFromV1!: boolean; @@ -77,134 +97,168 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature. activeValidationModule!: BaseValidationModule; - private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) { - super(biconomySmartAccountConfig); - } + private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2ConfigConstructorProps) { + super({ + ...biconomySmartAccountConfig, + chain: getChain(biconomySmartAccountConfig.chainId), + rpcClient: biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0], + entryPointAddress: (biconomySmartAccountConfig.entryPointAddress as Hex) ?? DEFAULT_ENTRYPOINT_ADDRESS, + accountAddress: (biconomySmartAccountConfig.accountAddress as Hex) ?? undefined, + factoryAddress: biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS, + }); - /** - * Creates a new instance of BiconomySmartAccountV2. - * - * This method will create a BiconomySmartAccountV2 instance but will not deploy the Smart Account. - * - * Deployment of the Smart Account will be donewith the first user operation. - * - * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance. - * @returns A promise that resolves to a new instance of BiconomySmartAccountV2. - * @throws An error if something is wrong with the smart account instance creation. - */ - public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { - const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); - instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 + this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; + this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule; + + this.index = biconomySmartAccountConfig.index ?? 0; + this.chainId = biconomySmartAccountConfig.chainId; + this.bundler = biconomySmartAccountConfig.bundler; + this.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex); if (biconomySmartAccountConfig.biconomyPaymasterApiKey) { - instance.paymaster = new BiconomyPaymaster({ + this.paymaster = new Paymaster({ paymasterUrl: `https://paymaster.biconomy.io/api/v1/${biconomySmartAccountConfig.chainId}/${biconomySmartAccountConfig.biconomyPaymasterApiKey}`, }); + } else { + this.paymaster = biconomySmartAccountConfig.paymaster; } + this.bundler = biconomySmartAccountConfig.bundler; + const defaultFallbackHandlerAddress = - instance.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS - ? DEFAULT_FALLBACK_HANDLER_ADDRESS - : biconomySmartAccountConfig.defaultFallbackHandler; + this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_FALLBACK_HANDLER_ADDRESS : biconomySmartAccountConfig.defaultFallbackHandler; if (!defaultFallbackHandlerAddress) { throw new Error("Default Fallback Handler address is not provided"); } - instance.accountAddress = biconomySmartAccountConfig.senderAddress ?? undefined; - instance.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; - - instance.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0; - - // Note: if no module is provided, we will use ECDSA_OWNERSHIP as default - if (biconomySmartAccountConfig.defaultValidationModule) { - instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - } else { - instance.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ - signer: biconomySmartAccountConfig.signer!, - }); - } + this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - instance.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? instance.defaultValidationModule; + // Added bang operator to avoid null check as the constructor have these params as optional + this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule!; + this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule!; - const { rpcUrl, nodeClientUrl } = biconomySmartAccountConfig; - - if (rpcUrl) { - instance.provider = new JsonRpcProvider(rpcUrl); - } - - instance.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); - - instance.scanForUpgradedAccountsFromV1 = biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false; - - instance.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10; - - await instance.init(); + this.provider = createPublicClient({ + chain: getChain(biconomySmartAccountConfig.chainId), + transport: http(biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0]), + }); - return instance; + this.scanForUpgradedAccountsFromV1 = biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false; + this.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10; } - async _getAccountContract(): Promise { - if (this.accountContract == null) { - this.accountContract = SmartAccount_v200__factory.connect(await this.getAccountAddress(), this.provider); + /** + * Creates a new instance of BiconomySmartAccountV2 + * + * This method will create a BiconomySmartAccountV2 instance but will not deploy the Smart Account + * Deployment of the Smart Account will be donewith the first user operation. + * + * - Docs: https://docs.biconomy.io/Account/integration#integration-1 + * + * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance. + * @returns A promise that resolves to a new instance of BiconomySmartAccountV2. + * @throws An error if something is wrong with the smart account instance creation. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient, BiconomySmartAccountV2 } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const bundlerUrl = "" // Retrieve bundler url from dasboard + * + * const smartAccountFromStaticCreate = await BiconomySmartAccountV2.create({ signer, bundlerUrl }); + * + * // Is the same as... + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); + * + */ + public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { + let chainId = biconomySmartAccountConfig.chainId; + let resolvedSmartAccountSigner!: SmartAccountSigner; + let rpcUrl = biconomySmartAccountConfig.rpcUrl; + + // Signer needs to be initialised here before defaultValidationModule is set + if (biconomySmartAccountConfig.signer) { + const signerResult = await convertSigner(biconomySmartAccountConfig.signer, !!chainId); + if (!chainId && !!signerResult.chainId) { + chainId = signerResult.chainId; + } + if (!rpcUrl && !!signerResult.rpcUrl) { + rpcUrl = signerResult.rpcUrl; + } + resolvedSmartAccountSigner = signerResult.signer; } - return this.accountContract; - } - - isActiveValidationModuleDefined(): boolean { - if (!this.activeValidationModule) throw new Error("Must provide an instance of active validation module."); - return true; - } - - isDefaultValidationModuleDefined(): boolean { - if (!this.defaultValidationModule) throw new Error("Must provide an instance of default validation module."); - return true; - } - - setActiveValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { - if (validationModule instanceof BaseValidationModule) { - this.activeValidationModule = validationModule; + if (!chainId) { + // Get it from bundler + if (biconomySmartAccountConfig.bundlerUrl) { + chainId = extractChainIdFromBundlerUrl(biconomySmartAccountConfig.bundlerUrl); + } else if (biconomySmartAccountConfig.bundler) { + const bundlerUrlFromBundler = biconomySmartAccountConfig.bundler.getBundlerUrl(); + chainId = extractChainIdFromBundlerUrl(bundlerUrlFromBundler); + } } - return this; - } + if (!chainId) { + throw new Error("chainId required"); + } + const bundler: IBundler = biconomySmartAccountConfig.bundler ?? new Bundler({ bundlerUrl: biconomySmartAccountConfig.bundlerUrl!, chainId }); + let defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - setDefaultValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { - if (validationModule instanceof BaseValidationModule) { - this.defaultValidationModule = validationModule; - this.accountAddress = undefined; + // Note: If no module is provided, we will use ECDSA_OWNERSHIP as default + if (!defaultValidationModule) { + const newModule = await createECDSAOwnershipValidationModule({ signer: resolvedSmartAccountSigner! }); + defaultValidationModule = newModule; } - return this; + const activeValidationModule = biconomySmartAccountConfig?.activeValidationModule ?? defaultValidationModule; + if (!resolvedSmartAccountSigner) { + resolvedSmartAccountSigner = await activeValidationModule.getSigner(); + } + if (!resolvedSmartAccountSigner) { + throw new Error("signer required"); + } + const config: BiconomySmartAccountV2ConfigConstructorProps = { + ...biconomySmartAccountConfig, + defaultValidationModule, + activeValidationModule, + chainId, + bundler, + signer: resolvedSmartAccountSigner, + rpcUrl, + }; + + return new BiconomySmartAccountV2(config); } - // Could call it nonce space - async getNonce(nonceKey?: number): Promise { - const nonceSpace = nonceKey ?? 0; - try { - const accountContract = await this._getAccountContract(); - const nonce = await accountContract.nonce(nonceSpace); - return nonce; - } catch (e) { - log.debug("Failed to get nonce from deployed account. Returning 0 as nonce"); - return BigNumber.from(0); + // Calls the getCounterFactualAddress + async getAddress(params?: CounterFactualAddressParam): Promise { + if (this.accountAddress == null) { + // means it needs deployment + this.accountAddress = await this.getCounterFactualAddress(params); } + return this.accountAddress; } - /** - * return the account's address. - * this value is valid even before deploying the contract. - */ - async getAccountAddress(params?: CounterFactualAddressParam): Promise { + // Calls the getCounterFactualAddress + async getAccountAddress(params?: CounterFactualAddressParam): Promise<`0x${string}`> { if (this.accountAddress == null || this.accountAddress == undefined) { + // means it needs deployment this.accountAddress = await this.getCounterFactualAddress(params); } return this.accountAddress; } /** - * calculate the account address even before it is deployed + * Return the account's address. This value is valid even before deploying the contract. */ - async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise { + async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise { const validationModule = params?.validationModule ?? this.defaultValidationModule; const index = params?.index ?? this.index; + const maxIndexForScan = params?.maxIndexForScan ?? this.maxIndexForScan; // Review: default behavior const scanForUpgradedAccountsFromV1 = params?.scanForUpgradedAccountsFromV1 ?? this.scanForUpgradedAccountsFromV1; @@ -212,9 +266,9 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // if it's intended to detect V1 upgraded accounts if (scanForUpgradedAccountsFromV1) { const eoaSigner = await validationModule.getSigner(); - const eoaAddress = await eoaSigner.getAddress(); - const moduleAddress = validationModule.getAddress(); - const moduleSetupData = await validationModule.getInitData(); + const eoaAddress = (await eoaSigner.getAddress()) as Hex; + const moduleAddress = validationModule.getAddress() as Hex; + const moduleSetupData = (await validationModule.getInitData()) as Hex; const queryParams = { eoaAddress, index, @@ -223,36 +277,35 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { maxIndexForScan, }; const accountAddress = await this.getV1AccountsUpgradedToV2(queryParams); - Logger.log("account address from V1 ", accountAddress); - if (accountAddress !== ethers.constants.AddressZero) { + if (accountAddress !== ADDRESS_ZERO) { return accountAddress; } } + const counterFactualAddressV2 = await this.getCounterFactualAddressV2({ validationModule, index }); return counterFactualAddressV2; } - private async getCounterFactualAddressV2(params?: CounterFactualAddressParam): Promise { - if (this.factory == null) { - if (this.factoryAddress != null && this.factoryAddress !== "") { - this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); - } else { - throw new Error("no factory to get initCode"); - } - } - + private async getCounterFactualAddressV2(params?: CounterFactualAddressParam): Promise { const validationModule = params?.validationModule ?? this.defaultValidationModule; const index = params?.index ?? this.index; try { - const initCalldata = SmartAccount_v200__factory.createInterface().encodeFunctionData("init", [ - this.defaultFallbackHandlerAddress, - validationModule.getAddress(), - await validationModule.getInitData(), - ]); - const proxyCreationCodeHash = solidityKeccak256(["bytes", "uint256"], [PROXY_CREATION_CODE, this.implementationAddress]); - const salt = solidityKeccak256(["bytes32", "uint256"], [keccak256(initCalldata), index]); - const counterFactualAddress = getCreate2Address(this.factory.address, salt, proxyCreationCodeHash); + const initCalldata = encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "init", + args: [this.defaultFallbackHandlerAddress, validationModule.getAddress() as Hex, (await validationModule.getInitData()) as Hex], + }); + + const proxyCreationCodeHash = keccak256(encodePacked(["bytes", "uint256"], [PROXY_CREATION_CODE, BigInt(this.implementationAddress)])); + + const salt = keccak256(encodePacked(["bytes32", "uint256"], [keccak256(initCalldata), BigInt(index)])); + + const counterFactualAddress = getCreate2Address({ + from: this.factoryAddress, + salt: salt, + bytecodeHash: proxyCreationCodeHash, + }); return counterFactualAddress; } catch (e) { @@ -260,60 +313,93 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } } - async getV1AccountsUpgradedToV2(params: QueryParamsForAddressResolver): Promise { - Logger.log("index to filter ", params.index); + async _getAccountContract(): Promise> { + if (this.accountContract == null) { + this.accountContract = getContract({ + address: await this.getAddress(), + abi: BiconomyAccountAbi, + client: this.provider as PublicClient, + }); + } + return this.accountContract; + } + + isActiveValidationModuleDefined(): boolean { + if (!this.activeValidationModule) throw new Error("Must provide an instance of active validation module."); + return true; + } + + isDefaultValidationModuleDefined(): boolean { + if (!this.defaultValidationModule) throw new Error("Must provide an instance of default validation module."); + return true; + } + + setActiveValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { + if (validationModule instanceof BaseValidationModule) { + this.activeValidationModule = validationModule; + } + return this; + } + + setDefaultValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { + if (validationModule instanceof BaseValidationModule) { + this.defaultValidationModule = validationModule; + } + return this; + } + + async getV1AccountsUpgradedToV2(params: QueryParamsForAddressResolver): Promise { const maxIndexForScan = params.maxIndexForScan ?? this.maxIndexForScan; - const addressResolver: AddressResolver = AddressResolver__factory.connect(ADDRESS_RESOLVER_ADDRESS, this.provider); + + const addressResolver = getContract({ + address: ADDRESS_RESOLVER_ADDRESS, + abi: AccountResolverAbi, + client: { + public: this.provider as PublicClient, + }, + }); // Note: depending on moduleAddress and moduleSetupData passed call this. otherwise could call resolveAddresses() if (params.moduleAddress && params.moduleSetupData) { - const result: SmartAccountInfo[] = await addressResolver.resolveAddressesFlexibleForV2( + const result = await addressResolver.read.resolveAddressesFlexibleForV2([ params.eoaAddress, maxIndexForScan, params.moduleAddress, params.moduleSetupData, - ); + ]); const desiredV1Account = result.find( - (smartAccountInfo) => + (smartAccountInfo: { factoryVersion: string; currentVersion: string; deploymentIndex: { toString: () => any } }) => smartAccountInfo.factoryVersion === "v1" && smartAccountInfo.currentVersion === "2.0.0" && - smartAccountInfo.deploymentIndex.toNumber() === params.index, + Number(smartAccountInfo.deploymentIndex.toString()) === params.index, ); if (desiredV1Account) { const smartAccountAddress = desiredV1Account.accountAddress; return smartAccountAddress; } else { - return ethers.constants.AddressZero; + return ADDRESS_ZERO; } } else { - return ethers.constants.AddressZero; + return ADDRESS_ZERO; } } /** - * return the value to put into the "initCode" field, if the account is not yet deployed. - * this value holds the "factory" address, followed by this account's information + * Return the value to put into the "initCode" field, if the account is not yet deployed. + * This value holds the "factory" address, followed by this account's information */ - async getAccountInitCode(): Promise { - if (this.factory == null) { - if (this.factoryAddress != null && this.factoryAddress !== "") { - this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); - } else { - throw new Error("no factory to get initCode"); - } - } - + async getAccountInitCode(): Promise { this.isDefaultValidationModuleDefined(); - return hexConcat([ - this.factory.address, - this.factory.interface.encodeFunctionData("deployCounterFactualAccount", [ - this.defaultValidationModule.getAddress(), - await this.defaultValidationModule.getInitData(), - this.index, - ]), + return concatHex([ + this.factoryAddress as Hex, + encodeFunctionData({ + abi: BiconomyFactoryAbi, + functionName: "deployCounterFactualAccount", + args: [this.defaultValidationModule.getAddress() as Hex, (await this.defaultValidationModule.getInitData()) as Hex, BigInt(this.index)], + }), ]); } @@ -322,11 +408,15 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @param to { target } address of transaction * @param value represents amount of native tokens * @param data represent data associated with transaction - * @returns + * @returns encoded data for execute function */ - async encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise { - const accountContract = await this._getAccountContract(); - return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]); + async encodeExecute(to: Hex, value: bigint, data: Hex): Promise { + // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; + return encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "execute_ncC", + args: [to, value, data], + }); } /** @@ -334,17 +424,40 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @param to { target } array of addresses in transaction * @param value represents array of amount of native tokens associated with each transaction * @param data represent array of data associated with each transaction - * @returns + * @returns encoded data for executeBatch function */ - async encodeExecuteBatch(to: Array, value: Array, data: Array): Promise { - const accountContract = await this._getAccountContract(); - return accountContract.interface.encodeFunctionData("executeBatch_y6U", [to, value, data]); + async encodeExecuteBatch(to: Array, value: Array, data: Array): Promise { + return encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "executeBatch_y6U", + args: [to, value, data], + }); + } + + override async encodeBatchExecute(txs: BatchUserOperationCallData): Promise { + const [targets, datas, value] = txs.reduce( + (accum, curr) => { + accum[0].push(curr.target); + accum[1].push(curr.data); + accum[2].push(curr.value || BigInt(0)); + + return accum; + }, + [[], [], []] as [Hex[], Hex[], bigint[]], + ); + + return this.encodeExecuteBatch(targets, value, datas); } // dummy signature depends on the validation module supplied. - async getDummySignature(params?: ModuleInfo): Promise { + async getDummySignatures(params?: ModuleInfo): Promise { this.isActiveValidationModuleDefined(); - return this.activeValidationModule.getDummySignature(params); + return (await this.activeValidationModule.getDummySignature(params)) as Hex; + } + + // TODO: review this + getDummySignature(): Hex { + throw new Error("Method not implemented! Call getDummySignatures instead."); } // Might use provided paymaster instance to get dummy data (from pm service) @@ -352,7 +465,16 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return "0x"; } - async signUserOp(userOp: Partial, params?: SendUserOpParams): Promise { + validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { + for (const field of requiredFields) { + if (!userOp[field]) { + throw new Error(`${String(field)} is missing in the UserOp`); + } + } + return true; + } + + async signUserOp(userOp: Partial, params?: SendUserOpParams): Promise { this.isActiveValidationModuleDefined(); const requiredFields: UserOperationKey[] = [ "sender", @@ -366,112 +488,391 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { "maxPriorityFeePerGas", "paymasterAndData", ]; - super.validateUserOp(userOp, requiredFields); + this.validateUserOp(userOp, requiredFields); const userOpHash = await this.getUserOpHash(userOp); - const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); + const moduleSig = (await this.activeValidationModule.signUserOpHash(userOpHash, params)) as Hex; - // Note: If the account is undeployed, use ERC-6492 - // Review: Should only be needed for signMessage - /*if (!(await this.isAccountDeployed(await this.getAccountAddress()))) { - const coder = new ethers.utils.AbiCoder(); - const populatedTransaction = await this.factory?.populateTransaction.deployCounterFactualAccount( - await this.defaultValidationModule.getAddress(), - await this.defaultValidationModule.getInitData(), - this.index, - ); - moduleSig = - coder.encode(["address", "bytes", "bytes"], [this.factoryAddress, populatedTransaction?.data, moduleSig]) + - "6492649264926492649264926492649264926492649264926492649264926492"; // magic suffix - userOp.signature = moduleSig; - return userOp as UserOperation; - }*/ - - const signatureWithModuleAddress = ethers.utils.defaultAbiCoder.encode( - ["bytes", "address"], - [moduleSig, this.activeValidationModule.getAddress()], - ); + const signatureWithModuleAddress = this.getSignatureWithModuleAddress(moduleSig, this.activeValidationModule.getAddress() as Hex); userOp.signature = signatureWithModuleAddress; - return userOp as UserOperation; + return userOp as UserOperationStruct; } - getSignatureWithModuleAddress(moduleSignature: string, moduleAddress?: string): string { - const moduleAddressToUse = moduleAddress ?? this.activeValidationModule.getAddress(); - return ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [moduleSignature, moduleAddressToUse]); + getSignatureWithModuleAddress(moduleSignature: Hex, moduleAddress?: Hex): Hex { + const moduleAddressToUse = moduleAddress ?? (this.activeValidationModule.getAddress() as Hex); + return encodeAbiParameters(parseAbiParameters("bytes, address"), [moduleSignature, moduleAddressToUse]); + } + + public async getPaymasterUserOp( + userOp: Partial, + paymasterServiceData: PaymasterUserOperationDto, + ): Promise> { + if (paymasterServiceData.mode === PaymasterMode.SPONSORED) { + return this.getPaymasterAndData(userOp, paymasterServiceData); + } else if (paymasterServiceData.mode === PaymasterMode.ERC20) { + if (paymasterServiceData?.feeQuote) { + const { feeQuote, spender, maxApproval = false } = paymasterServiceData; + Logger.log("there is a feeQuote: ", feeQuote); + if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED); + if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH); + const partialUserOp = await this.buildTokenPaymasterUserOp(userOp, { + ...paymasterServiceData, + spender, + maxApproval, + feeQuote, + }); + return this.getPaymasterAndData(partialUserOp, { + ...paymasterServiceData, + feeTokenAddress: feeQuote.tokenAddress, + calculateGasLimits: true, // Always recommended and especially when using token paymaster + }); + } else if (paymasterServiceData?.preferredToken) { + const { preferredToken } = paymasterServiceData; + Logger.log("there is a preferred token: ", preferredToken); + const feeQuotesResponse = await this.getPaymasterFeeQuotesOrData(userOp, paymasterServiceData); + const spender = feeQuotesResponse.tokenPaymasterAddress; + const feeQuote = feeQuotesResponse.feeQuotes?.[0]; + if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED); + if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH); + return this.getPaymasterUserOp(userOp, { ...paymasterServiceData, feeQuote, spender }); // Recursively call getPaymasterUserOp with the feeQuote + } else { + Logger.log("ERC20 mode without feeQuote or preferredToken provided. Passing through unchanged."); + return userOp; + } + } + throw new Error("Invalid paymaster mode"); + } + + private async getPaymasterAndData( + userOp: Partial, + paymasterServiceData: PaymasterUserOperationDto, + ): Promise> { + const paymaster = this.paymaster as IHybridPaymaster; + const paymasterData = await paymaster.getPaymasterAndData(userOp, paymasterServiceData); + return { ...userOp, ...paymasterData }; + } + + private async getPaymasterFeeQuotesOrData( + userOp: Partial, + feeQuotesOrData: FeeQuotesOrDataDto, + ): Promise { + const paymaster = this.paymaster as IHybridPaymaster; + const tokenList = feeQuotesOrData?.preferredToken + ? [feeQuotesOrData?.preferredToken] + : feeQuotesOrData?.tokenList?.length + ? feeQuotesOrData?.tokenList + : []; + return paymaster.getPaymasterFeeQuotesOrData(userOp, { ...feeQuotesOrData, tokenList }); + } + + /** + * + * @description This function will retrieve fees from the paymaster in erc20 mode + * + * @param manyOrOneTransactions Array of {@link Transaction} to be batched and sent. Can also be a single {@link Transaction}. + * @param buildUseropDto {@link BuildUserOpOptions}. + * @returns Promise + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * const feeQuotesResponse: FeeQuotesOrDataResponse = await smartAccount.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20 } }); + * + * const userSeletedFeeQuote = feeQuotesResponse.feeQuotes?.[0]; + * + * const { wait } = await smartAccount.sendTransaction(transaction, { + * paymasterServiceData: { + * mode: PaymasterMode.ERC20, + * feeQuote: userSeletedFeeQuote, + * spender: feeQuotesResponse.tokenPaymasterAddress, + * }, + * }); + * + * const { receipt } = await wait(); + * + */ + public async getTokenFees( + manyOrOneTransactions: Transaction | Transaction[], + buildUseropDto: BuildUserOpOptions, + ): Promise { + const txs = Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions : [manyOrOneTransactions]; + const userOp = await this.buildUserOp(txs, buildUseropDto); + if (!buildUseropDto.paymasterServiceData) throw new Error("paymasterServiceData was not provided"); + return this.getPaymasterFeeQuotesOrData(userOp, buildUseropDto.paymasterServiceData); } /** * * @param userOp * @param params - * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. + * @description This function will take a user op as an input, sign it with the owner key, and send it to the bundler. * @returns Promise + * Sends a user operation + * + * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#send-useroperation + * + * @param userOp Partial<{@link UserOperationStruct}> the userOp params to be sent. + * @param params {@link SendUserOpParams}. + * @returns Promise<{@link UserOpResponse}> that you can use to track user operation. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * const userOp = await smartAccount.buildUserOp([transaction]); + * + * const { wait } = await smartAccount.sendUserOp(userOp); + * const { receipt } = await wait(); + * */ - async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { - Logger.log("userOp received in base account ", userOp); + async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { delete userOp.signature; const userOperation = await this.signUserOp(userOp, params); - const bundlerResponse = await this.sendSignedUserOp(userOperation, params); + const bundlerResponse = await this.sendSignedUserOp(userOperation, params?.simulationType); + return bundlerResponse; + } + + /** + * + * @param userOp - The signed user operation to send + * @param simulationType - The type of simulation to perform ("validation" | "validation_and_execution") + * @description This function call will take 'signedUserOp' as input and send it to the bundler + * @returns + */ + async sendSignedUserOp(userOp: UserOperationStruct, simulationType?: SimulationType): Promise { + const requiredFields: UserOperationKey[] = [ + "sender", + "nonce", + "initCode", + "callData", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "paymasterAndData", + "signature", + ]; + this.validateUserOp(userOp, requiredFields); + if (!this.bundler) throw new Error("Bundler is not provided"); + Logger.warn("userOp being sent to the bundler", userOp); + const bundlerResponse = await this.bundler.sendUserOp(userOp, simulationType); return bundlerResponse; } - private async getBuildUserOpNonce(nonceOptions: NonceOptions | undefined): Promise { - let nonce = BigNumber.from(0); + async getUserOpHash(userOp: Partial): Promise { + const userOpHash = keccak256(packUserOp(userOp, true) as Hex); + const enc = encodeAbiParameters(parseAbiParameters("bytes32, address, uint256"), [userOpHash, this.entryPoint.address, BigInt(this.chainId)]); + return keccak256(enc); + } + + async estimateUserOpGas(userOp: Partial): Promise> { + if (!this.bundler) throw new Error("Bundler is not provided"); + const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; + this.validateUserOp(userOp, requiredFields); + + const finalUserOp = userOp; + + // Making call to bundler to get gas estimations for userOp + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = + await this.bundler.estimateUserOpGas(userOp); + // if neither user sent gas fee nor the bundler, estimate gas from provider + if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { + const feeData = await this.provider.estimateFeesPerGas(); + if (feeData.maxFeePerGas?.toString()) { + finalUserOp.maxFeePerGas = ("0x" + feeData.maxFeePerGas.toString(16)) as Hex; + } else if (feeData.gasPrice?.toString()) { + finalUserOp.maxFeePerGas = ("0x" + feeData.gasPrice.toString(16)) as Hex; + } else { + finalUserOp.maxFeePerGas = ("0x" + (await this.provider.getGasPrice()).toString(16)) as Hex; + } + + if (feeData.maxPriorityFeePerGas?.toString()) { + finalUserOp.maxPriorityFeePerGas = ("0x" + feeData.maxPriorityFeePerGas?.toString()) as Hex; + } else if (feeData.gasPrice?.toString()) { + finalUserOp.maxPriorityFeePerGas = toHex(Number(feeData.gasPrice?.toString())); + } else { + finalUserOp.maxPriorityFeePerGas = ("0x" + (await this.provider.getGasPrice()).toString(16)) as Hex; + } + } else { + finalUserOp.maxFeePerGas = toHex(Number(maxFeePerGas)) ?? userOp.maxFeePerGas; + finalUserOp.maxPriorityFeePerGas = toHex(Number(maxPriorityFeePerGas)) ?? userOp.maxPriorityFeePerGas; + } + finalUserOp.verificationGasLimit = toHex(Number(verificationGasLimit)) ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = toHex(Number(callGasLimit)) ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = toHex(Number(preVerificationGas)) ?? userOp.preVerificationGas; + if (!finalUserOp.paymasterAndData) { + finalUserOp.paymasterAndData = "0x"; + } + + return finalUserOp; + } + + // Could call it nonce space + async getNonce(nonceKey?: number): Promise { + const nonceSpace = nonceKey ?? 0; + try { + const address = await this.getAddress(); + return await this.entryPoint.read.getNonce([address, BigInt(nonceSpace)]); + } catch (e) { + return BigInt(0); + } + } + + private async getBuildUserOpNonce(nonceOptions: NonceOptions | undefined): Promise { + let nonce = BigInt(0); try { if (nonceOptions?.nonceOverride) { - nonce = BigNumber.from(nonceOptions?.nonceOverride); + nonce = BigInt(nonceOptions?.nonceOverride); } else { const _nonceSpace = nonceOptions?.nonceKey ?? 0; nonce = await this.getNonce(_nonceSpace); } } catch (error) { // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account - Logger.log("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); + Logger.warn("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); } return nonce; } - private async getGasFeeValues( - overrides: Overrides | undefined, - skipBundlerGasEstimation: boolean | undefined, - ): Promise<{ maxFeePerGas?: BigNumberish | undefined; maxPriorityFeePerGas?: BigNumberish | undefined }> { - const gasFeeValues = { - maxFeePerGas: overrides?.maxFeePerGas, - maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas, - }; - try { - if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (skipBundlerGasEstimation ?? true)) { - const gasFeeEstimation = await this.bundler.getGasFeeValues(); - gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; - gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; - } - return gasFeeValues; - } catch (error: any) { - Logger.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); - return gasFeeValues; - } + /** + * Sends a transaction (builds and sends a user op in sequence) + * + * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#send-transaction + * + * @param manyOrOneTransactions Array of {@link Transaction} to be batched and sent. Can also be a single {@link Transaction}. + * @param buildUseropDto {@link BuildUserOpOptions}. + * @returns Promise<{@link UserOpResponse}> that you can use to track user operation. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * const { waitForTxHash } = await smartAccount.sendTransaction(transaction); + * const { transactionHash, userOperationReceipt } = await wait(); + * + */ + async sendTransaction(manyOrOneTransactions: Transaction | Transaction[], buildUseropDto?: BuildUserOpOptions): Promise { + const userOp = await this.buildUserOp(Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions : [manyOrOneTransactions], buildUseropDto); + return this.sendUserOp(userOp, { simulationType: buildUseropDto?.simulationType, ...buildUseropDto?.params }); } - async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { - const to = transactions.map((element: Transaction) => element.to); - const data = transactions.map((element: Transaction) => element.data ?? "0x"); - const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); + /** + * Builds a user operation + * + * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#build-useroperation + * + * @param transactions Array of {@link Transaction} to be sent. + * @param buildUseropDto {@link BuildUserOpOptions}. + * @returns Promise> the built user operation to be sent. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * const userOp = await smartAccount.buildUserOp([{ to: "0x...", data: encodedCall }]); + * + */ + async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { + const to = transactions.map((element: Transaction) => element.to as Hex); + const data = transactions.map((element: Transaction) => (element.data as Hex) ?? "0x"); + const value = transactions.map((element: Transaction) => (element.value as bigint) ?? BigInt(0)); const initCodeFetchPromise = this.getInitCode(); - const dummySignatureFetchPromise = this.getDummySignature(buildUseropDto?.params); + const dummySignatureFetchPromise = this.getDummySignatures(buildUseropDto?.params); - const [nonceFromFetch, initCode, signature, finalGasFeeValue] = await Promise.all([ + const [nonceFromFetch, initCode, signature] = await Promise.all([ this.getBuildUserOpNonce(buildUseropDto?.nonceOptions), initCodeFetchPromise, dummySignatureFetchPromise, - this.getGasFeeValues(buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation), ]); if (transactions.length === 0) { throw new Error("Transactions array cannot be empty"); } - let callData = ""; + let callData: Hex = "0x"; if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { callData = await this.encodeExecuteBatch(to, value, data); } else { @@ -479,47 +880,44 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { callData = await this.encodeExecute(to[0], value[0], data[0]); } - let userOp: Partial = { - sender: await this.getAccountAddress(), - nonce: nonceFromFetch, + let userOp: Partial = { + sender: (await this.getAccountAddress()) as Hex, + nonce: toHex(nonceFromFetch), initCode, callData: callData, - maxFeePerGas: finalGasFeeValue.maxFeePerGas || undefined, - maxPriorityFeePerGas: finalGasFeeValue.maxPriorityFeePerGas || undefined, }; // for this Smart Account current validation module dummy signature will be used to estimate gas userOp.signature = signature; // Note: Can change the default behaviour of calling estimations using bundler/local - userOp = await this.estimateUserOpGas({ - userOp, - overrides: buildUseropDto?.overrides, - skipBundlerGasEstimation: buildUseropDto?.skipBundlerGasEstimation, - paymasterServiceData: buildUseropDto?.paymasterServiceData, - }); - userOp.paymasterAndData = userOp.paymasterAndData ?? "0x"; + userOp = await this.estimateUserOpGas(userOp); + + if (buildUseropDto?.paymasterServiceData) { + userOp = await this.getPaymasterUserOp(userOp, buildUseropDto.paymasterServiceData); + } + Logger.log("UserOp after estimation ", userOp); return userOp; } - private validateUserOpAndPaymasterRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { + private validateUserOpAndPaymasterRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { if (isNullOrUndefined(userOp.callData)) { throw new Error("UserOp callData cannot be undefined"); } const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress; - Logger.log("Requested fee token is ", feeTokenAddress); + Logger.warn("Requested fee token is ", feeTokenAddress); - if (!feeTokenAddress || feeTokenAddress == ethers.constants.AddressZero) { + if (!feeTokenAddress || feeTokenAddress === ADDRESS_ZERO) { throw new Error("Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest"); } const spender = tokenPaymasterRequest?.spender; - Logger.log("Spender address is ", spender); + Logger.warn("Spender address is ", spender); - if (!spender || spender == ethers.constants.AddressZero) { + if (!spender || spender === ADDRESS_ZERO) { throw new Error("Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest"); } } @@ -534,29 +932,28 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @returns updated userOp with new callData, callGasLimit */ async buildTokenPaymasterUserOp( - userOp: Partial, + userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest, - ): Promise> { + ): Promise> { this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest); try { - let batchTo: Array = []; - let batchValue: Array = []; - let batchData: Array = []; + let batchTo: Array = []; + let batchValue: Array = []; + let batchData: Array = []; let newCallData = userOp.callData; - Logger.log("Received information about fee token address and quote ", tokenPaymasterRequest); + Logger.warn("Received information about fee token address and quote ", tokenPaymasterRequest); - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { + if (this.paymaster && this.paymaster instanceof Paymaster) { // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details // Review: might request this form of an array of Transaction const approvalRequest: Transaction = await (this.paymaster as IHybridPaymaster).buildTokenApprovalTransaction( tokenPaymasterRequest, - this.provider, ); - Logger.log("ApprovalRequest is for erc20 token ", approvalRequest.to); + Logger.warn("ApprovalRequest is for erc20 token ", approvalRequest.to); - if (approvalRequest.data == "0x" || approvalRequest.to == ethers.constants.AddressZero) { + if (approvalRequest.data === "0x" || approvalRequest.to === ADDRESS_ZERO) { return userOp; } @@ -564,18 +961,18 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { throw new Error("UserOp callData cannot be undefined"); } - const account = await this._getAccountContract(); - - const decodedSmartAccountData = account.interface.parseTransaction({ - data: userOp.callData!.toString(), + const decodedSmartAccountData = decodeFunctionData({ + abi: BiconomyAccountAbi, + data: userOp.callData as Hex, }); + if (!decodedSmartAccountData) { throw new Error("Could not parse userOp call data for this smart account"); } - const smartAccountExecFunctionName = decodedSmartAccountData.name; + const smartAccountExecFunctionName = decodedSmartAccountData.functionName; - Logger.log(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); + Logger.warn(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); if (smartAccountExecFunctionName === "execute" || smartAccountExecFunctionName === "execute_ncC") { const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; const toOriginal = methodArgsSmartWalletExecuteCall[0]; @@ -587,23 +984,25 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { batchData.push(dataOriginal); } else if (smartAccountExecFunctionName === "executeBatch" || smartAccountExecFunctionName === "executeBatch_y6U") { const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; - batchTo = methodArgsSmartWalletExecuteCall[0]; - batchValue = methodArgsSmartWalletExecuteCall[1]; - batchData = methodArgsSmartWalletExecuteCall[2]; + batchTo = [...methodArgsSmartWalletExecuteCall[0]]; + batchValue = [...methodArgsSmartWalletExecuteCall[1]]; + batchData = [...methodArgsSmartWalletExecuteCall[2]]; } if (approvalRequest.to && approvalRequest.data && approvalRequest.value) { - batchTo = [approvalRequest.to, ...batchTo]; - batchValue = [approvalRequest.value, ...batchValue]; - batchData = [approvalRequest.data, ...batchData]; + batchTo = [approvalRequest.to as Hex, ...batchTo]; + batchValue = [BigInt(Number(approvalRequest.value.toString())), ...batchValue]; + batchData = [approvalRequest.data as Hex, ...batchData]; newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData); } - const finalUserOp: Partial = { + const finalUserOp: Partial = { ...userOp, callData: newCallData, }; + // Optionally Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) + return finalUserOp; } } catch (error) { @@ -614,125 +1013,98 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return userOp; } - async signUserOpHash(userOpHash: string, params?: SendUserOpParams): Promise { + async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { this.isActiveValidationModuleDefined(); - const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); + const moduleSig = (await this.activeValidationModule.signUserOpHash(userOpHash, params)) as Hex; - const signatureWithModuleAddress = ethers.utils.defaultAbiCoder.encode( - ["bytes", "address"], - [moduleSig, this.activeValidationModule.getAddress()], - ); + const signatureWithModuleAddress = encodeAbiParameters(parseAbiParameters("bytes, address"), [ + moduleSig, + this.activeValidationModule.getAddress() as Hex, + ]); return signatureWithModuleAddress; } - async signMessage(message: Bytes | string): Promise { + async signMessage(message: string | Uint8Array): Promise { this.isActiveValidationModuleDefined(); - const dataHash = ethers.utils.arrayify(ethers.utils.hashMessage(message)); + const dataHash = typeof message === "string" ? toBytes(message) : message; let signature = await this.activeValidationModule.signMessage(dataHash); + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); + } if (signature.slice(0, 2) !== "0x") { signature = "0x" + signature; } - - // If the account is undeployed, use ERC-6492 - if (!(await this.isAccountDeployed(await this.getAccountAddress()))) { - const coder = new ethers.utils.AbiCoder(); - const populatedTransaction = await this.factory?.populateTransaction.deployCounterFactualAccount( - await this.defaultValidationModule.getAddress(), - await this.defaultValidationModule.getInitData(), - this.index, - ); - signature = - coder.encode(["address", "bytes", "bytes"], [this.factoryAddress, populatedTransaction?.data, signature]) + - "6492649264926492649264926492649264926492649264926492649264926492"; // magic suffix - } - return signature; - } - - async getAllTokenBalances(balancesDto: BalancesDto): Promise { - return this.nodeClient.getAllTokenBalances(balancesDto); + return signature as Hex; } - async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { - return this.nodeClient.getTotalBalanceInUsd(balancesDto); - } - - async getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise { - return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto); - } - - async getTransactionsByAddress(chainId: number, address: string): Promise { - return this.nodeClient.getTransactionByAddress(chainId, address); - } - - async getTransactionByHash(txHash: string): Promise { - return this.nodeClient.getTransactionByHash(txHash); - } - - async getAllSupportedChains(): Promise { - return this.nodeClient.getAllSupportedChains(); - } - - getImplementationAddress(): string { - return this.implementationAddress; - } - - async enableModule(moduleAddress: string): Promise { + async enableModule(moduleAddress: Hex): Promise { const tx: Transaction = await this.getEnableModuleData(moduleAddress); const partialUserOp = await this.buildUserOp([tx]); return this.sendUserOp(partialUserOp); } - async getEnableModuleData(moduleAddress: string): Promise { - const accountContract = await this._getAccountContract(); - const data = accountContract.interface.encodeFunctionData("enableModule", [moduleAddress]); + async getEnableModuleData(moduleAddress: Hex): Promise { + const callData = encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "enableModule", + args: [moduleAddress], + }); const tx: Transaction = { - to: await this.getAccountAddress(), - value: "0", - data: data as string, + to: await this.getAddress(), + value: "0x00", + data: callData, }; return tx; } - async getSetupAndEnableModuleData(moduleAddress: string, moduleSetupData: string): Promise { - const accountContract = await this._getAccountContract(); - const data = accountContract.interface.encodeFunctionData("setupAndEnableModule", [moduleAddress, moduleSetupData]); + async getSetupAndEnableModuleData(moduleAddress: Hex, moduleSetupData: Hex): Promise { + const callData = encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "setupAndEnableModule", + args: [moduleAddress, moduleSetupData], + }); const tx: Transaction = { - to: await this.getAccountAddress(), - value: "0", - data: data, + to: await this.getAddress(), + value: "0x00", + data: callData, }; return tx; } - async disableModule(prevModule: string, moduleAddress: string): Promise { + async disableModule(prevModule: Hex, moduleAddress: Hex): Promise { const tx: Transaction = await this.getDisableModuleData(prevModule, moduleAddress); const partialUserOp = await this.buildUserOp([tx]); return this.sendUserOp(partialUserOp); } - async getDisableModuleData(prevModule: string, moduleAddress: string): Promise { - const accountContract = await this._getAccountContract(); - const data = accountContract.interface.encodeFunctionData("disableModule", [prevModule, moduleAddress]); + async getDisableModuleData(prevModule: Hex, moduleAddress: Hex): Promise { + const callData = encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "disableModule", + args: [prevModule, moduleAddress], + }); const tx: Transaction = { - to: await this.getAccountAddress(), - value: "0", - data: data, + to: await this.getAddress(), + value: "0x00", + data: callData, }; return tx; } - async isModuleEnabled(moduleName: string): Promise { + async isModuleEnabled(moduleAddress: Hex): Promise { const accountContract = await this._getAccountContract(); - return accountContract.isModuleEnabled(moduleName); + return accountContract.read.isModuleEnabled([moduleAddress]); } + // Review async getAllModules(pageSize?: number): Promise> { pageSize = pageSize ?? 100; const accountContract = await this._getAccountContract(); - // Note: If page size is lower then on the next page start module would be module at the end of first page and not SENTINEL_MODULE - const result: Array> = await accountContract.getModulesPaginated(this.SENTINEL_MODULE, pageSize); + const result = await accountContract.read.getModulesPaginated([this.SENTINEL_MODULE as Hex, BigInt(pageSize)]); const modules: Array = result[0] as Array; return modules; } diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts deleted file mode 100644 index 7ca709e97..000000000 --- a/packages/account/src/SmartAccount.ts +++ /dev/null @@ -1,314 +0,0 @@ -import { JsonRpcProvider } from "@ethersproject/providers"; -import { BigNumber, Signer, BytesLike } from "ethers"; -import { ISmartAccount } from "./interfaces/ISmartAccount"; -import { defaultAbiCoder, keccak256, arrayify } from "ethers/lib/utils"; -import { UserOperation, ChainId } from "@biconomy/core-types"; -import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; -import { packUserOp, isNullOrUndefined } from "@biconomy/common"; - -import { IBundler, UserOpResponse } from "@biconomy/bundler"; -import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; -import { Logger } from "@biconomy/common"; -import { IEntryPoint } from "@account-abstraction/contracts"; -import { SponsorUserOperationDto, BiconomyPaymaster, IHybridPaymaster, PaymasterMode } from "@biconomy/paymaster"; -import { SmartAccountConfig, SendUserOpDto, EstimateUserOpGasParams } from "./utils/Types"; -import { DefaultGasLimit } from "./utils/Constants"; - -type UserOperationKey = keyof UserOperation; - -// Notice: only to be used as base class for child class BiconomySmartAccount(V1) -export abstract class SmartAccount implements ISmartAccount { - bundler!: IBundler; - - paymaster!: IPaymaster; - - initCode = "0x"; - - // Ideally proxy should be defined in child class, if it's meant to be of type Biconomy SmartAccount - proxy!: any; - - owner!: string; - - provider!: JsonRpcProvider; - - entryPoint!: IEntryPoint; - - chainId!: ChainId; - - signer!: Signer; - - smartAccountConfig: SmartAccountConfig; - - constructor(_smartAccountConfig: SmartAccountConfig) { - this.smartAccountConfig = _smartAccountConfig; - } - - setEntryPointAddress(entryPointAddress: string): void { - this.smartAccountConfig.entryPointAddress = entryPointAddress; - } - - private validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { - for (const field of requiredFields) { - if (isNullOrUndefined(userOp[field])) { - throw new Error(`${String(field)} is missing in the UserOp`); - } - } - return true; - } - - isProxyDefined(): boolean { - if (!this.proxy) throw new Error("Proxy is undefined"); - - return true; - } - - isSignerDefined(): boolean { - if (!this.signer) throw new Error("Signer is undefined"); - - return true; - } - - isProviderDefined(): boolean { - if (!this.provider) throw new Error("Provider is undefined"); - - return true; - } - - abstract getDummySignature(): string; - - async calculateUserOpGasValues(userOp: Partial): Promise> { - if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - const feeData = await this.provider.getFeeData(); - userOp.maxFeePerGas = userOp.maxFeePerGas ?? feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - userOp.maxPriorityFeePerGas = - userOp.maxPriorityFeePerGas ?? feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - if (userOp.initCode) - userOp.verificationGasLimit = - userOp.verificationGasLimit !== null || userOp.verificationGasLimit !== undefined - ? userOp.verificationGasLimit - : await this.getVerificationGasLimit(userOp.initCode); - userOp.callGasLimit = - userOp.callGasLimit !== null || userOp.callGasLimit !== undefined - ? userOp.callGasLimit - : await this.provider.estimateGas({ - from: this.smartAccountConfig.entryPointAddress, - to: userOp.sender, - data: userOp.callData, - }); - userOp.preVerificationGas = - userOp.preVerificationGas !== null || userOp.preVerificationGas !== undefined ? userOp.preVerificationGas : this.getPreVerificationGas(userOp); - return userOp; - } - - async estimateUserOpGas(params: EstimateUserOpGasParams): Promise> { - let userOp = params.userOp; - const { overrides, skipBundlerGasEstimation, paymasterServiceData } = params; - const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; - this.validateUserOp(userOp, requiredFields); - - let finalUserOp = userOp; - const skipBundlerCall = skipBundlerGasEstimation ?? true; - // Override gas values in userOp if provided in overrides params - if (overrides) { - userOp = { ...userOp, ...overrides }; - } - - Logger.log("userOp in estimation", userOp); - - if (skipBundlerCall) { - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { - if (isNullOrUndefined(userOp.maxFeePerGas) || isNullOrUndefined(userOp.maxPriorityFeePerGas)) { - throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); - } - if (paymasterServiceData?.mode === PaymasterMode.SPONSORED) { - const v1BiconomyInfo = { - name: "BICONOMY", - version: "1.0.0", - }; - const smartAccountInfo = paymasterServiceData?.smartAccountInfo ?? v1BiconomyInfo; - paymasterServiceData.smartAccountInfo = smartAccountInfo; - - // Making call to paymaster to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( - this.paymaster as IHybridPaymaster - ).getPaymasterAndData(userOp, paymasterServiceData); - if (paymasterAndData === "0x" && (callGasLimit === undefined || verificationGasLimit === undefined || preVerificationGas === undefined)) { - throw new Error("Since you intend to use sponsorship paymaster, please check and make sure policies are set on the dashboard"); - } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; - } else { - // use dummy values for gas limits as fee quote call will ignore this later. - finalUserOp.callGasLimit = DefaultGasLimit.callGasLimit; - finalUserOp.verificationGasLimit = DefaultGasLimit.verificationGasLimit; - finalUserOp.preVerificationGas = DefaultGasLimit.preVerificationGas; - } - } else { - Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); - finalUserOp = await this.calculateUserOpGasValues(userOp); - finalUserOp.paymasterAndData = "0x"; - } - } else { - if (!this.bundler) throw new Error("Bundler is not provided"); - delete userOp.maxFeePerGas; - delete userOp.maxPriorityFeePerGas; - // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = - await this.bundler.estimateUserOpGas(userOp); - // if neither user sent gas fee nor the bundler, estimate gas from provider - if ( - isNullOrUndefined(userOp.maxFeePerGas) && - isNullOrUndefined(userOp.maxPriorityFeePerGas) && - (isNullOrUndefined(maxFeePerGas) || isNullOrUndefined(maxPriorityFeePerGas)) - ) { - const feeData = await this.provider.getFeeData(); - finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - } else { - finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; - finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; - } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = "0x"; - } - return finalUserOp; - } - - async isAccountDeployed(address: string): Promise { - this.isProviderDefined(); - const contractCode = await this.provider.getCode(address); - return contractCode !== "0x"; - } - - // Would only be used if paymaster is attached - async getPaymasterAndData(userOp: Partial): Promise { - if (this.paymaster) { - const paymasterAndDataResponse: PaymasterAndDataResponse = await this.paymaster.getPaymasterAndData(userOp); - return paymasterAndDataResponse.paymasterAndData; - } - return "0x"; - } - - nonce(): Promise { - this.isProxyDefined(); - return this.proxy.nonce(); - } - - async signUserOpHash(userOpHash: string, signer?: Signer): Promise { - if (signer) { - return signer.signMessage(arrayify(userOpHash)); - } - if (this.signer) { - return this.signer.signMessage(arrayify(userOpHash)); - } - throw new Error("No signer provided to sign userOp"); - } - - getPreVerificationGas(userOp: Partial): BigNumber { - return calcPreVerificationGas(userOp); - } - - async getVerificationGasLimit(initCode: BytesLike): Promise { - // Verification gas should be max(initGas(wallet deployment) + validateUserOp + validatePaymasterUserOp , postOp) - - const initGas = await this.estimateCreationGas(initCode as string); - const validateUserOpGas = BigNumber.from(DefaultGasLimits.validatePaymasterUserOpGas + DefaultGasLimits.validateUserOpGas); - const postOpGas = BigNumber.from(DefaultGasLimits.postOpGas); - - let verificationGasLimit = BigNumber.from(validateUserOpGas).add(initGas); - - if (BigNumber.from(postOpGas).gt(verificationGasLimit)) { - verificationGasLimit = postOpGas; - } - return verificationGasLimit; - } - - async getUserOpHash(userOp: Partial): Promise { - const userOpHash = keccak256(packUserOp(userOp, true)); - const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, this.entryPoint.address, this.chainId]); - return keccak256(enc); - } - - abstract getSmartAccountAddress(_accountIndex: number): Promise; - - async estimateCreationGas(initCode: string): Promise { - if (initCode == null || initCode === "0x") return BigNumber.from("0"); - const deployerAddress = initCode.substring(0, 42); - const deployerCallData = "0x" + initCode.substring(42); - return this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }); - } - - async signUserOp(userOp: Partial): Promise { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - ]; - this.validateUserOp(userOp, requiredFields); - const userOpHash = await this.getUserOpHash(userOp); - let signature = await this.signUserOpHash(userOpHash, this.signer); - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); - } - if (signature.slice(0, 2) !== "0x") { - signature = "0x" + signature; - } - userOp.signature = signature; - return userOp as UserOperation; - } - - /** - * - * @param userOp - * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. - * @returns Promise - */ - async sendUserOp(userOp: Partial, params?: SendUserOpDto): Promise { - Logger.log("userOp received in base account ", userOp); - delete userOp.signature; - const userOperation = await this.signUserOp(userOp); - const bundlerResponse = await this.sendSignedUserOp(userOperation, params); - return bundlerResponse; - } - - /** - * - * @param userOp - * @description This function call will take 'signedUserOp' as input and send it to the bundler - * @returns - */ - async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpDto): Promise { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - "signature", - ]; - this.validateUserOp(userOp, requiredFields); - Logger.log("userOp validated"); - if (!this.bundler) throw new Error("Bundler is not provided"); - Logger.log("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp, params?.simulationType); - return bundlerResponse; - } -} diff --git a/packages/account/src/abi/AccountResolver.ts b/packages/account/src/abi/AccountResolver.ts new file mode 100644 index 000000000..0cbffc749 --- /dev/null +++ b/packages/account/src/abi/AccountResolver.ts @@ -0,0 +1,106 @@ +export const AccountResolverAbi = [ + { + inputs: [ + { internalType: "address", name: "_v1Factory", type: "address" }, + { internalType: "address", name: "_v2Factory", type: "address" }, + { internalType: "address", name: "_ecdsaModule", type: "address" }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "ecdsaOwnershipModule", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "_eoa", type: "address" }, + { internalType: "uint8", name: "_maxIndex", type: "uint8" }, + ], + name: "resolveAddresses", + outputs: [ + { + components: [ + { internalType: "address", name: "accountAddress", type: "address" }, + { internalType: "address", name: "factoryAddress", type: "address" }, + { internalType: "address", name: "currentImplementation", type: "address" }, + { internalType: "string", name: "currentVersion", type: "string" }, + { internalType: "string", name: "factoryVersion", type: "string" }, + { internalType: "uint256", name: "deploymentIndex", type: "uint256" }, + ], + internalType: "struct IAddressResolver.SmartAccountResult[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "_eoa", type: "address" }, + { internalType: "uint8", name: "_maxIndex", type: "uint8" }, + { internalType: "address", name: "_moduleAddress", type: "address" }, + { internalType: "bytes", name: "_moduleSetupData", type: "bytes" }, + ], + name: "resolveAddressesFlexibleForV2", + outputs: [ + { + components: [ + { internalType: "address", name: "accountAddress", type: "address" }, + { internalType: "address", name: "factoryAddress", type: "address" }, + { internalType: "address", name: "currentImplementation", type: "address" }, + { internalType: "string", name: "currentVersion", type: "string" }, + { internalType: "string", name: "factoryVersion", type: "string" }, + { internalType: "uint256", name: "deploymentIndex", type: "uint256" }, + ], + internalType: "struct IAddressResolver.SmartAccountResult[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "_eoa", type: "address" }, + { internalType: "uint8", name: "_maxIndex", type: "uint8" }, + ], + name: "resolveAddressesV1", + outputs: [ + { + components: [ + { internalType: "address", name: "accountAddress", type: "address" }, + { internalType: "address", name: "factoryAddress", type: "address" }, + { internalType: "address", name: "currentImplementation", type: "address" }, + { internalType: "string", name: "currentVersion", type: "string" }, + { internalType: "string", name: "factoryVersion", type: "string" }, + { internalType: "uint256", name: "deploymentIndex", type: "uint256" }, + ], + internalType: "struct IAddressResolver.SmartAccountResult[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "smartAccountFactoryV1", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "smartAccountFactoryV2", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, +] as const; diff --git a/packages/account/src/abi/Factory.ts b/packages/account/src/abi/Factory.ts new file mode 100644 index 000000000..3498dd958 --- /dev/null +++ b/packages/account/src/abi/Factory.ts @@ -0,0 +1,141 @@ +export const BiconomyFactoryAbi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "initialAuthModule", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "AccountCreation", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "initialAuthModule", + type: "address", + }, + ], + name: "AccountCreationWithoutIndex", + type: "event", + }, + { + inputs: [], + name: "accountCreationCode", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + ], + name: "deployAccount", + outputs: [ + { + internalType: "address", + name: "proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "deployCounterFactualAccount", + outputs: [ + { + internalType: "address", + name: "proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "getAddressForCounterFactualAccount", + outputs: [ + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; diff --git a/packages/account/src/abi/SmartAccount.ts b/packages/account/src/abi/SmartAccount.ts new file mode 100644 index 000000000..3542c17d1 --- /dev/null +++ b/packages/account/src/abi/SmartAccount.ts @@ -0,0 +1,944 @@ +export const BiconomyAccountAbi = [ + { + inputs: [], + name: "AlreadyInitialized", + type: "error", + }, + { + inputs: [], + name: "BaseImplementationCannotBeZero", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotAnEntryPoint", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotEntryPoint", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotEntryPointOrOwner", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotEntryPointOrSelf", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotOwner", + type: "error", + }, + { + inputs: [], + name: "DelegateCallsOnly", + type: "error", + }, + { + inputs: [], + name: "EntryPointCannotBeZero", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "implementationAddress", + type: "address", + }, + ], + name: "InvalidImplementation", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "MixedAuthFail", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleAlreadyEnabled", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "expectedModule", + type: "address", + }, + { + internalType: "address", + name: "returnedModule", + type: "address", + }, + { + internalType: "address", + name: "prevModule", + type: "address", + }, + ], + name: "ModuleAndPrevModuleMismatch", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleCannotBeZeroOrSentinel", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleNotEnabled", + type: "error", + }, + { + inputs: [], + name: "ModulesAlreadyInitialized", + type: "error", + }, + { + inputs: [], + name: "ModulesSetupExecutionFailed", + type: "error", + }, + { + inputs: [], + name: "OwnerCanNotBeSelf", + type: "error", + }, + { + inputs: [], + name: "OwnerCannotBeZero", + type: "error", + }, + { + inputs: [], + name: "OwnerProvidedIsSame", + type: "error", + }, + { + inputs: [], + name: "TransferToZeroAddressAttempt", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "destLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "valueLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "funcLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "operationLength", + type: "uint256", + }, + ], + name: "WrongBatchProvided", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes", + name: "contractSignature", + type: "bytes", + }, + ], + name: "WrongContractSignature", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "uintS", + type: "uint256", + }, + { + internalType: "uint256", + name: "contractSignatureLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "signatureLength", + type: "uint256", + }, + ], + name: "WrongContractSignatureFormat", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleAddressProvided", + type: "address", + }, + ], + name: "WrongValidationModule", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "DisabledModule", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "EnabledModule", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ExecutionFromModuleFailure", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ExecutionFromModuleSuccess", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "oldImplementation", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "ImplementationUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "ModuleTransaction", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "SmartAccountReceivedNativeToken", + type: "event", + }, + { + inputs: [], + name: "VERSION", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "prevModule", + type: "address", + }, + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "disableModule", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "enableModule", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "to", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "data", + type: "bytes[]", + }, + { + internalType: "enum Enum.Operation[]", + name: "operations", + type: "uint8[]", + }, + ], + name: "execBatchTransactionFromModule", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + { + internalType: "uint256", + name: "txGas", + type: "uint256", + }, + ], + name: "execTransactionFromModule", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "execTransactionFromModule", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "execTransactionFromModuleReturnData", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + { + internalType: "bytes", + name: "returnData", + type: "bytes", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch_y6U", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute_ncC", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getImplementation", + outputs: [ + { + internalType: "address", + name: "_implementation", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "start", + type: "address", + }, + { + internalType: "uint256", + name: "pageSize", + type: "uint256", + }, + ], + name: "getModulesPaginated", + outputs: [ + { + internalType: "address[]", + name: "array", + type: "address[]", + }, + { + internalType: "address", + name: "next", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "handler", + type: "address", + }, + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + ], + name: "init", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "isModuleEnabled", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint192", + name: "_key", + type: "uint192", + }, + ], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "setupContract", + type: "address", + }, + { + internalType: "bytes", + name: "setupData", + type: "bytes", + }, + ], + name: "setupAndEnableModule", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_implementation", + type: "address", + }, + ], + name: "updateImplementation", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "payable", + type: "function", + }, +] as const; diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index d43249476..615c0a6da 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -1,9 +1,43 @@ -export * from "./interfaces/ISmartAccount"; -export * from "./interfaces/IBaseSmartAccount"; -export * from "./interfaces/IBiconomySmartAccount"; -export * from "./utils/Types"; -export * from "./SmartAccount"; -export * from "./BiconomySmartAccount"; -export * from "./utils/Constants"; -export * from "./BiconomySmartAccountV2"; -export * from "./utils/VoidSigner"; +import { BiconomySmartAccountV2 } from "./BiconomySmartAccountV2.js"; +import { type BiconomySmartAccountV2Config } from "./utils/Types.js"; + +export * from "./utils/Types.js"; +export * from "./utils/Constants.js"; +export * from "./BiconomySmartAccountV2.js"; + +export { WalletClientSigner, LocalAccountSigner, type SmartAccountSigner } from "@alchemy/aa-core"; +export { + BiconomyPaymaster as Paymaster, + type IPaymaster, + PaymasterMode, + type IHybridPaymaster, + type PaymasterFeeQuote, + type SponsorUserOperationDto, + type FeeQuotesOrDataResponse, + createPaymaster, +} from "@biconomy/paymaster"; +export { EthersSigner, convertSigner, type LightSigner } from "@biconomy/common"; +export { + Bundler, + type IBundler, + extractChainIdFromBundlerUrl, + type UserOpResponse, + type UserOpStatus, + type UserOpReceipt, + createBundler, +} from "@biconomy/bundler"; +export { + createECDSAOwnershipValidationModule, + createERC20SessionValidationModule, + createBatchedSessionRouterModule, + createSessionKeyManagerModule, + createMultiChainValidationModule, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + DEFAULT_SESSION_KEY_MANAGER_MODULE, + DEFAULT_MULTICHAIN_MODULE, + DEFAULT_BATCHED_SESSION_ROUTER_MODULE, +} from "@biconomy/modules"; + +export const createSmartAccountClient = BiconomySmartAccountV2.create; + +export type SmartWalletConfig = BiconomySmartAccountV2Config; diff --git a/packages/account/src/interfaces/IBaseSmartAccount.ts b/packages/account/src/interfaces/IBaseSmartAccount.ts deleted file mode 100644 index 64cc5fc92..000000000 --- a/packages/account/src/interfaces/IBaseSmartAccount.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { UserOperation } from "@biconomy/core-types"; -import { BigNumberish, Bytes, BytesLike, BigNumber } from "ethers"; -/** - * Interface for Smart Contract Wallet aka Smart Account. - * This SA does not have to implement ERC4337 interfaces - */ -export interface INon4337Account { - estimateCreationGas(_initCode: string): Promise; - getNonce(): Promise; - signMessage(_message: Bytes | string): Promise; - getAccountAddress(_accountIndex?: number): Promise; -} - -export interface IBaseSmartAccount extends INon4337Account { - getVerificationGasLimit(_initCode: BytesLike): Promise; - getPreVerificationGas(_userOp: Partial): Promise; - signUserOp(_userOp: UserOperation): Promise; - signUserOpHash(_userOpHash: string): Promise; - getUserOpHash(_userOp: Partial): Promise; - getAccountInitCode(): Promise; - getDummySignature(): Promise; -} diff --git a/packages/account/src/interfaces/IBiconomySmartAccount.ts b/packages/account/src/interfaces/IBiconomySmartAccount.ts deleted file mode 100644 index 2534ae461..000000000 --- a/packages/account/src/interfaces/IBiconomySmartAccount.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { UserOperation, Transaction } from "@biconomy/core-types"; -import { - SupportedChainsResponse, - BalancesResponse, - BalancesDto, - UsdBalanceResponse, - SmartAccountByOwnerDto, - SmartAccountsResponse, - SCWTransactionResponse, -} from "@biconomy/node-client"; -import { Overrides, InitilizationData } from "../utils/Types"; -import { BigNumberish, BytesLike } from "ethers"; -import { ISmartAccount } from "./ISmartAccount"; -import { Signer } from "ethers"; - -export interface IBiconomySmartAccount extends ISmartAccount { - init(_initilizationData?: InitilizationData): Promise; - initializeAccountAtIndex(_accountIndex: number): void; - getExecuteCallData(_to: string, _value: BigNumberish, _data: BytesLike): string; - getExecuteBatchCallData(_to: Array, _value: Array, _data: Array): string; - buildUserOp(_transactions: Transaction[], _overrides?: Overrides): Promise>; - getAllTokenBalances(_balancesDto: BalancesDto): Promise; - getTotalBalanceInUsd(_balancesDto: BalancesDto): Promise; - getSmartAccountsByOwner(_smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise; - getTransactionsByAddress(_chainId: number, _address: string): Promise; - getTransactionByHash(_txHash: string): Promise; - getAllSupportedChains(): Promise; - attachSigner(_signer: Signer): Promise; -} diff --git a/packages/account/src/interfaces/ISmartAccount.ts b/packages/account/src/interfaces/ISmartAccount.ts deleted file mode 100644 index fce4a8f8c..000000000 --- a/packages/account/src/interfaces/ISmartAccount.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { UserOperation } from "@biconomy/core-types"; -import { UserOpResponse } from "@biconomy/bundler"; -export interface ISmartAccount { - getSmartAccountAddress(_accountIndex: number): Promise; - signUserOp(_userOp: UserOperation): Promise; - sendUserOp(_userOp: UserOperation): Promise; - sendSignedUserOp(_userOp: UserOperation): Promise; -} diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 40a5c053e..d6f52fc7a 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -1,4 +1,3 @@ -import { ChainId } from "@biconomy/core-types"; import { EntryPointAddresses, BiconomyFactories, @@ -8,6 +7,8 @@ import { BiconomyImplementationsByVersion, } from "./Types"; +export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000"; + // will always be latest entrypoint address export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { @@ -43,7 +44,7 @@ export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementatio Object.entries(BICONOMY_IMPLEMENTATION_ADDRESSES).map(([k, v]) => [v, k]), ); -export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101]; +export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101]; export const PROXY_CREATION_CODE = "0x6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033"; @@ -55,3 +56,9 @@ export const DefaultGasLimit = { verificationGasLimit: 1000000, preVerificationGas: 100000, }; + +export const ERROR_MESSAGES = { + SPENDER_REQUIRED: "spender is required for ERC20 mode", + NO_FEE_QUOTE: "FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote", + FAILED_FEE_QUOTE_FETCH: "Failed to fetch fee quote", +}; diff --git a/packages/account/src/utils/Preverificaiton.ts b/packages/account/src/utils/Preverificaiton.ts deleted file mode 100644 index 5b32b0054..000000000 --- a/packages/account/src/utils/Preverificaiton.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { UserOperation } from "@biconomy/core-types"; -import { NotPromise, packUserOp } from "@biconomy/common"; // '@account-abstraction/utils' -import { arrayify, hexlify } from "ethers/lib/utils"; -import { BigNumber } from "ethers"; -export interface GasOverheads { - /** - * fixed overhead for entire handleOp bundle. - */ - fixed: number; - - /** - * per userOp overhead, added on top of the above fixed per-bundle. - */ - perUserOp: number; - - /** - * overhead for userOp word (32 bytes) block - */ - perUserOpWord: number; - - // perCallDataWord: number - - /** - * zero byte cost, for calldata gas cost calculations - */ - zeroByte: number; - - /** - * non-zero byte cost, for calldata gas cost calculations - */ - nonZeroByte: number; - - /** - * expected bundle size, to split per-bundle overhead between all ops. - */ - bundleSize: number; - - /** - * expected length of the userOp signature. - */ - sigSize: number; -} - -export interface VerificationGasLimits { - /** - * per userOp gasLimit for validateUserOp() - * called from entrypoint to the account - * should consider max execution - */ - validateUserOpGas: number; - - /** - * per userOp gasLimit for validatePaymasterUserOp() - * called from entrypoint to the paymaster - * should consider max execution - */ - validatePaymasterUserOpGas: number; - - /** - * per userOp gasLimit for postOp() - * called from entrypoint to the paymaster - * should consider max execution for paymaster/s this account may use - */ - postOpGas: number; -} - -export const DefaultGasOverheads: GasOverheads = { - fixed: 21000, - perUserOp: 18300, - perUserOpWord: 4, - zeroByte: 4, - nonZeroByte: 16, - bundleSize: 1, - sigSize: 65, -}; - -export const DefaultGasLimits: VerificationGasLimits = { - validateUserOpGas: 100000, - validatePaymasterUserOpGas: 100000, - postOpGas: 10877, -}; - -/** - * calculate the preVerificationGas of the given UserOperation - * preVerificationGas (by definition) is the cost overhead that can't be calculated on-chain. - * it is based on parameters that are defined by the Ethereum protocol for external transactions. - * @param userOp filled userOp to calculate. The only possible missing fields can be the signature and preVerificationGas itself - * @param overheads gas overheads to use, to override the default values - */ -export function calcPreVerificationGas(userOp: Partial>, overheads?: Partial): BigNumber { - const ov = { ...DefaultGasOverheads, ...(overheads ?? {}) }; - /* eslint-disable @typescript-eslint/no-explicit-any */ - const p: NotPromise = { - // dummy values, in case the UserOp is incomplete. - paymasterAndData: "0x", - preVerificationGas: BigNumber.from(21000), // dummy value, just for calldata cost - signature: hexlify(Buffer.alloc(ov.sigSize, 1)), // dummy signature - ...userOp, - } as any; - - const packed = arrayify(packUserOp(p, false)); - const lengthInWord = (packed.length + 31) / 32; - /** - * general explanation - * 21000 base gas - * ~ 18300 gas per userOp : corresponds to _validateAccountAndPaymasterValidationData() method, - * Some lines in _handlePostOp() after actualGasCost calculation and compensate() method called in handleOps() method - * plus any gas overhead that can't be tracked on-chain - * (if bundler needs to charge the premium one way is to increase this value for ops to sign) - */ - const callDataCost = packed.map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte)).reduce((sum, x) => sum + x); - const ret = Math.round(callDataCost + ov.fixed / ov.bundleSize + ov.perUserOp + ov.perUserOpWord * lengthInWord); - if (ret) { - return BigNumber.from(ret); - } else { - throw new Error("can't calculate preVerificationGas"); - } -} diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 942166b5b..0967d0f8f 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -1,151 +1,179 @@ -import { Signer } from "ethers"; -import { BigNumberish, BigNumber } from "ethers"; +import { BigNumberish, SmartAccountSigner, UserOperationStruct } from "@alchemy/aa-core"; import { IBundler } from "@biconomy/bundler"; -import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; +import { + type FeeQuotesOrDataDto, + type IPaymaster, + type PaymasterFeeQuote, + PaymasterMode, + type SmartAccountData, + type SponsorUserOperationDto, +} from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; -import { Provider } from "@ethersproject/providers"; -import { GasOverheads } from "./Preverificaiton"; -import { UserOperation, ChainId } from "@biconomy/core-types"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { Hex, WalletClient } from "viem"; +import { SupportedSigner } from "@biconomy/common"; -export type EntryPointAddresses = { - [address: string]: string; -}; - -export type BiconomyFactories = { - [address: string]: string; -}; - -export type BiconomyImplementations = { - [address: string]: string; -}; - -export type EntryPointAddressesByVersion = { - [version: string]: string; -}; - -export type BiconomyFactoriesByVersion = { - [version: string]: string; -}; - -export type BiconomyImplementationsByVersion = { - [version: string]: string; -}; +export type EntryPointAddresses = Record; +export type BiconomyFactories = Record; +export type BiconomyImplementations = Record; +export type EntryPointAddressesByVersion = Record; +export type BiconomyFactoriesByVersion = Record; +export type BiconomyImplementationsByVersion = Record; export type SmartAccountConfig = { + /** entryPointAddress: address of the smart account factory */ entryPointAddress: string; + /** factoryAddress: address of the smart account factory */ bundler?: IBundler; }; -/** - * Enum representing available validation modules. - * - * - `ECDSA_OWNERSHIP`: Default module for ECDSA ownership validation. - * - `MULTICHAIN`: Default module for multi-chain validation. - * - If you don't provide any module, ECDSA_OWNERSHIP will be used as default - */ -/*export enum AuthorizationModuleType { - ECDSA_OWNERSHIP = DEFAULT_ECDSA_OWNERSHIP_MODULE, - // MULTICHAIN = DEFAULT_MULTICHAIN_MODULE, -}*/ - -export type BaseSmartAccountConfig = ConditionalBundlerProps & { - // owner?: Signer // can be in child classes +export interface GasOverheads { + /** fixed: fixed gas overhead */ + fixed: number; + /** perUserOp: per user operation gas overhead */ + perUserOp: number; + /** perUserOpWord: per user operation word gas overhead */ + perUserOpWord: number; + /** zeroByte: per byte gas overhead */ + zeroByte: number; + /** nonZeroByte: per non zero byte gas overhead */ + nonZeroByte: number; + /** bundleSize: per signature bundleSize */ + bundleSize: number; + /** sigSize: sigSize gas overhead */ + sigSize: number; +} + +export type BaseSmartAccountConfig = { + /** index: helps to not conflict with other smart account instances */ index?: number; - provider?: Provider; + /** provider: WalletClientSigner from viem */ + provider?: WalletClient; + /** entryPointAddress: address of the smart account entry point */ entryPointAddress?: string; + /** accountAddress: address of the smart account, potentially counterfactual */ accountAddress?: string; + /** overheads: {@link GasOverheads} */ overheads?: Partial; - paymaster?: IPaymaster; // PaymasterAPI - chainId: ChainId; + /** paymaster: {@link IPaymaster} interface */ + paymaster?: IPaymaster; + /** chainId: chainId of the network */ + chainId?: number; }; export type BiconomyTokenPaymasterRequest = { + /** feeQuote: {@link PaymasterFeeQuote} */ feeQuote: PaymasterFeeQuote; - spender: string; + /** spender: The address of the spender who is paying for the transaction, this can usually be set to feeQuotesResponse.tokenPaymasterAddress */ + spender: Hex; + /** maxApproval: If set to true, the paymaster will approve the maximum amount of tokens required for the transaction. Not recommended */ maxApproval?: boolean; }; -export type BiconomySmartAccountConfig = { - signer: Signer; - rpcUrl?: string; - chainId: ChainId; - entryPointAddress?: string; - bundler?: IBundler; - paymaster?: IPaymaster; - nodeClientUrl?: string; -}; - -type RequireAtLeastOne = Pick> & +export type RequireAtLeastOne = Pick> & { [K in Keys]-?: Required> & Partial>>; }[Keys]; -type ConditionalValidationProps = RequireAtLeastOne< - { - defaultValidationModule: BaseValidationModule; - signer: Signer | WalletClientSigner; - }, - "defaultValidationModule" | "signer" ->; - -type ConditionalBundlerProps = RequireAtLeastOne< +export type ConditionalBundlerProps = RequireAtLeastOne< { bundler: IBundler; bundlerUrl: string; }, "bundler" | "bundlerUrl" >; +export type ResolvedBundlerProps = { + bundler: IBundler; +}; +export type ConditionalValidationProps = RequireAtLeastOne< + { + defaultValidationModule: BaseValidationModule; + signer: SupportedSigner; + }, + "defaultValidationModule" | "signer" +>; -export type BiconomySmartAccountV2Config = BaseSmartAccountConfig & - ConditionalValidationProps & { - factoryAddress?: string; - senderAddress?: string; - implementationAddress?: string; - defaultFallbackHandler?: string; - biconomyPaymasterApiKey?: string; - rpcUrl?: string; - nodeClientUrl?: string; - activeValidationModule?: BaseValidationModule; - scanForUpgradedAccountsFromV1?: boolean; - maxIndexForScan?: number; - }; +export type ResolvedValidationProps = { + /** defaultValidationModule: {@link BaseValidationModule} */ + defaultValidationModule: BaseValidationModule; + /** activeValidationModule: {@link BaseValidationModule}. The active validation module. Will default to the defaultValidationModule */ + activeValidationModule: BaseValidationModule; + /** signer: ethers Wallet, viemWallet or alchemys SmartAccountSigner */ + signer: SmartAccountSigner; + /** chainId: chainId of the network */ + chainId: number; +}; + +export type BiconomySmartAccountV2ConfigBaseProps = { + /** Factory address of biconomy factory contract or some other contract you have deployed on chain */ + factoryAddress?: Hex; + /** Sender address: If you want to override the Signer address with some other address and get counterfactual address can use this to pass the EOA and get SA address */ + senderAddress?: Hex; + /** implementation of smart contract address or some other contract you have deployed and want to override */ + implementationAddress?: Hex; + /** defaultFallbackHandler: override the default fallback contract address */ + defaultFallbackHandler?: Hex; + /** rpcUrl: Explicitly set the rpc else it is pulled out of the signer. */ + rpcUrl?: string; // as good as Provider + /** biconomyPaymasterApiKey: The API key retrieved from the Biconomy dashboard */ + biconomyPaymasterApiKey?: string; + /** activeValidationModule: The active validation module. Will default to the defaultValidationModule */ + activeValidationModule?: BaseValidationModule; + /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ + scanForUpgradedAccountsFromV1?: boolean; + /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ + maxIndexForScan?: number; +}; +export type BiconomySmartAccountV2Config = BiconomySmartAccountV2ConfigBaseProps & + BaseSmartAccountConfig & + ConditionalBundlerProps & + ConditionalValidationProps; + +export type BiconomySmartAccountV2ConfigConstructorProps = BiconomySmartAccountV2ConfigBaseProps & + BaseSmartAccountConfig & + ResolvedBundlerProps & + ResolvedValidationProps; export type BuildUserOpOptions = { - overrides?: Overrides; - skipBundlerGasEstimation?: boolean; + /** overrides: Explicitly set gas values */ + // overrides?: Overrides; + /** Not currently in use */ + // skipBundlerGasEstimation?: boolean; + /** params relevant to the module, mostly relevant to sessions */ params?: ModuleInfo; + /** nonceOptions: For overriding the nonce */ nonceOptions?: NonceOptions; + /** forceEncodeForBatch: For encoding the user operation for batch */ forceEncodeForBatch?: boolean; - paymasterServiceData?: SponsorUserOperationDto; + /** paymasterServiceData: Options specific to transactions that involve a paymaster */ + paymasterServiceData?: PaymasterUserOperationDto; + /** simulationType: Determine which parts of the tx a bundler will simulate: "validation" | "validation_and_execution". */ + simulationType?: SimulationType; }; export type NonceOptions = { + /** nonceKey: The key to use for nonce */ nonceKey?: number; + /** nonceOverride: The nonce to use for the transaction */ nonceOverride?: number; }; -// Used in AccountV1 -export type SendUserOpDto = { - signer?: Signer; - simulationType?: SimulationType; -}; - -// Generic options in AccountV2 -export type SendUserOpOptions = { - simulationType?: SimulationType; -}; - export type SimulationType = "validation" | "validation_and_execution"; export type Overrides = { - callGasLimit?: BigNumberish; - verificationGasLimit?: BigNumberish; - preVerificationGas?: BigNumberish; - maxFeePerGas?: BigNumberish; - maxPriorityFeePerGas?: BigNumberish; - paymasterData?: string; - signature?: string; + /* Value used by inner account execution */ + callGasLimit?: Hex; + /* Actual gas used by the validation of this UserOperation */ + verificationGasLimit?: Hex; + /* Gas overhead of this UserOperation */ + preVerificationGas?: Hex; + /* Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) */ + maxFeePerGas?: Hex; + /* Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) */ + maxPriorityFeePerGas?: Hex; + /* Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster ("0x" for self-sponsored transaction) */ + paymasterData?: Hex; + /* Data passed into the account along with the nonce during the verification step */ + signature?: Hex; }; export type InitilizationData = { @@ -153,47 +181,97 @@ export type InitilizationData = { signerAddress?: string; }; +export type PaymasterUserOperationDto = SponsorUserOperationDto & + FeeQuotesOrDataDto & { + /** mode: sponsored or erc20 */ + mode: PaymasterMode; + /** Always recommended, especially when using token paymaster */ + calculateGasLimits?: boolean; + /** Expiry duration in seconds */ + expiryDuration?: number; + /** Webhooks to be fired after user op is sent */ + webhookData?: Record; + /** Smart account meta data */ + smartAccountInfo?: SmartAccountData; + /** the fee-paying token address */ + feeTokenAddress?: string; + /** The fee quote */ + feeQuote?: PaymasterFeeQuote; + /** The address of the spender. This is usually set to FeeQuotesOrDataResponse.tokenPaymasterAddress */ + spender?: Hex; + /** Not recommended */ + maxApproval?: boolean; + }; + export type InitializeV2Data = { accountIndex?: number; }; export type EstimateUserOpGasParams = { - userOp: Partial; - overrides?: Overrides; - skipBundlerGasEstimation?: boolean; + userOp: Partial; + // overrides?: Overrides; + /** Currrently has no effect */ + // skipBundlerGasEstimation?: boolean; + /** paymasterServiceData: Options specific to transactions that involve a paymaster */ paymasterServiceData?: SponsorUserOperationDto; }; export interface TransactionDetailsForUserOp { + /** target: The address of the contract to call */ target: string; + /** data: The data to send to the contract */ data: string; + /** value: The value to send to the contract */ value?: BigNumberish; + /** gasLimit: The gas limit to use for the transaction */ gasLimit?: BigNumberish; + /** maxFeePerGas: The maximum fee per gas to use for the transaction */ maxFeePerGas?: BigNumberish; + /** maxPriorityFeePerGas: The maximum priority fee per gas to use for the transaction */ maxPriorityFeePerGas?: BigNumberish; + /** nonce: The nonce to use for the transaction */ nonce?: BigNumberish; } export type CounterFactualAddressParam = { index?: number; validationModule?: BaseValidationModule; + /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ scanForUpgradedAccountsFromV1?: boolean; + /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ maxIndexForScan?: number; }; export type QueryParamsForAddressResolver = { - eoaAddress: string; + eoaAddress: Hex; index: number; - moduleAddress: string; - moduleSetupData: string; + moduleAddress: Hex; + moduleSetupData: Hex; maxIndexForScan?: number; }; export type SmartAccountInfo = { - accountAddress: string; - factoryAddress: string; + /** accountAddress: The address of the smart account */ + accountAddress: Hex; + /** factoryAddress: The address of the smart account factory */ + factoryAddress: Hex; + /** currentImplementation: The address of the current implementation */ currentImplementation: string; + /** currentVersion: The version of the smart account */ currentVersion: string; + /** factoryVersion: The version of the factory */ factoryVersion: string; - deploymentIndex: BigNumber; + /** deploymentIndex: The index of the deployment */ + deploymentIndex: BigNumberish; }; + +export type ValueOrData = RequireAtLeastOne< + { + value: BigNumberish | string; + data: string; + }, + "value" | "data" +>; +export type Transaction = { + to: string; +} & ValueOrData; diff --git a/packages/account/src/utils/Utils.ts b/packages/account/src/utils/Utils.ts new file mode 100644 index 000000000..d905506c9 --- /dev/null +++ b/packages/account/src/utils/Utils.ts @@ -0,0 +1,45 @@ +import { encodeAbiParameters, parseAbiParameters, keccak256, Hex } from "viem"; +import type { UserOperationStruct } from "@alchemy/aa-core"; + +/** + * pack the userOperation + * @param op + * @param forSignature "true" if the hash is needed to calculate the getUserOpHash() + * "false" to pack entire UserOp, for calculating the calldata cost of putting it on-chain. + */ +export function packUserOp(op: Partial, forSignature = true): string { + if (!op.initCode || !op.callData || !op.paymasterAndData) throw new Error("Missing userOp properties"); + if (forSignature) { + return encodeAbiParameters(parseAbiParameters("address, uint256, bytes32, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32"), [ + op.sender as Hex, + BigInt(op.nonce as Hex), + keccak256(op.initCode as Hex), + keccak256(op.callData as Hex), + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + keccak256(op.paymasterAndData as Hex), + ]); + } else { + // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) + return encodeAbiParameters(parseAbiParameters("address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes, bytes"), [ + op.sender as Hex, + BigInt(op.nonce as Hex), + op.initCode as Hex, + op.callData as Hex, + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + op.paymasterAndData as Hex, + op.signature as Hex, + ]); + } +} + +export const isNullOrUndefined = (value: any): value is undefined => { + return value === null || value === undefined; +}; diff --git a/packages/account/src/utils/VoidSigner.ts b/packages/account/src/utils/VoidSigner.ts deleted file mode 100644 index d028c56ad..000000000 --- a/packages/account/src/utils/VoidSigner.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import { BigNumberish, BytesLike, Bytes, Signer } from "ethers"; -import { LogLevel, Logger } from "@ethersproject/logger"; -const logger = new Logger("signer"); - -export interface TypedDataDomain { - name?: string; - version?: string; - chainId?: BigNumberish; - verifyingContract?: string; - salt?: BytesLike; -} - -export interface TypedDataField { - name: string; - type: string; -} - -export type Deferrable = { - [K in keyof T]: T[K] | Promise; -}; - -export class VoidSigner extends Signer { - readonly address: string; - - readonly provider?: Provider; - - constructor(_address: string, _provider?: Provider) { - super(); - this.address = _address; - this.provider = _provider; - } - - getAddress(): Promise { - return Promise.resolve(this.address); - } - - _fail(message: string, operation: string): Promise { - return Promise.resolve().then(() => { - logger.throwError(message, Logger.errors.UNSUPPORTED_OPERATION, { operation: operation }); - }); - } - - signMessage(message: Bytes | string): Promise { - logger._log(LogLevel.INFO, [message]); - return this._fail("VoidSigner cannot sign messages", "signMessage"); - } - - signTransaction(transaction: Deferrable): Promise { - logger._log(LogLevel.INFO, [transaction]); - return this._fail("VoidSigner cannot sign transactions", "signTransaction"); - } - - connect(provider: Provider): VoidSigner { - return new VoidSigner(this.address, provider); - } -} diff --git a/packages/account/src/utils/index.ts b/packages/account/src/utils/index.ts new file mode 100644 index 000000000..8d298755a --- /dev/null +++ b/packages/account/src/utils/index.ts @@ -0,0 +1,3 @@ +export * from "./Types"; +export * from "./Utils"; +export * from "./Constants"; diff --git a/packages/account/tests/SmartAccountV1.testnet.spec.ts b/packages/account/tests/SmartAccountV1.testnet.spec.ts deleted file mode 100644 index f6ef197af..000000000 --- a/packages/account/tests/SmartAccountV1.testnet.spec.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Wallet, ethers } from "ethers"; -import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; -import { BiconomySmartAccount } from "../src/BiconomySmartAccount"; -import { ChainId, UserOperation } from "@biconomy/core-types"; -import { calcPreVerificationGas } from "../src/utils/Preverificaiton"; - -describe("calcPreVerificationGas", () => { - const userOp = { - sender: "0x".padEnd(42, "1"), - nonce: 0, - initCode: "0x3333", - callData: "0x4444", - callGasLimit: 5, - verificationGasLimit: 6, - maxFeePerGas: 8, - maxPriorityFeePerGas: 9, - paymasterAndData: "0xaaaaaa", - }; - it("returns a gas value proportional to sigSize", async () => { - const pvg1 = calcPreVerificationGas(userOp, { sigSize: 0 }); - const pvg2 = calcPreVerificationGas(userOp, { sigSize: 65 }); - expect(pvg2.toNumber()).toBeGreaterThan(pvg1.toNumber()); - }); -}); - -describe("BiconomySmartAccount API Specs", () => { - let owner: Wallet; - let target: string; - let accountAPI: BiconomySmartAccount; - let beneficiary: string; - let recipient: SampleRecipient; - let accountAddress: string; - - beforeAll(async () => { - owner = Wallet.createRandom(); - - target = await Wallet.createRandom().getAddress(); - - // recipient = await new SampleRecipient__factory(owner).deploy(); - accountAPI = new BiconomySmartAccount({ - chainId: ChainId.POLYGON_MUMBAI, - signer: owner, - // paymaster: paymaster, - // bundler: bundler, - }); - - // console.log('account api provider ', accountAPI.provider) - - accountAPI = await accountAPI.init(); - console.log("Account EOA owner ", accountAPI.owner); - - const counterFactualAddress = await accountAPI.getSmartAccountAddress(0); - console.log("Counterfactual address ", counterFactualAddress); - }, 20000); - - // on Mumbai testnet some tests should be performed to make sure nothing breaks in AccountV1 - - /*it("Nonce should be zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: target, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - console.log("builtUserOp", builtUserOp); - expect(builtUserOp?.nonce?.toString()).toBe("0"); - }); - it("Sender should be non zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: target, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); - }); - it("InitCode length should be greater then 170", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: target, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); - });*/ - it("estimateUserOperationGas for native token transfer using local estimation logic", async () => {}); -}); diff --git a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts deleted file mode 100644 index f4c847b00..000000000 --- a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { Wallet, ethers } from "ethers"; - -import { - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - ECDSAOwnershipRegistryModule_v100__factory, -} from "@biconomy/common"; - -import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -import { ChainId } from "@biconomy/core-types"; -import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; -import { BaseValidationModule } from "@biconomy/modules"; -import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { BiconomyPaymaster } from "@biconomy/paymaster"; - -const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); -const signer = provider.getSigner(); - -describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { - let owner: Wallet; - let factoryOwner: Wallet; - let account: BiconomySmartAccountV2; - let entryPoint: EntryPoint; - let accountFactory: SmartAccountFactory_v200; - let ecdsaModule: ECDSAOwnershipRegistryModule_v100; - - let module1: BaseValidationModule; - - beforeAll(async () => { - owner = Wallet.createRandom(); - entryPoint = await new EntryPoint__factory(signer).deploy(); - console.log("ep address ", entryPoint.address); - factoryOwner = Wallet.createRandom(); - - const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - - accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - - ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - - module1 = await ECDSAOwnershipValidationModule.create({ - signer: owner, - moduleAddress: ecdsaModule.address, - }); - - console.log("provider url ", provider.connection.url); - - await new Promise((resolve) => setTimeout(resolve, 10000)); - }, 30000); - - it("Create a smart account with paymaster through api key", async () => { - - account = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - biconomyPaymasterApiKey: "7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", - factoryAddress: accountFactory.address, - defaultFallbackHandler: await accountFactory.minimalHandler(), - defaultValidationModule: module1, - activeValidationModule: module1, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await account.getAccountAddress(); - console.log("account address ", address); - - const paymaster = account.paymaster; - - expect(paymaster).not.toBeNull() - expect(paymaster).not.toBeUndefined() - - expect(address).toBe(account.accountAddress); - }, 10000); - - it("Create a smart account with paymaster by creating instance", async () => { - - const paymaster = new BiconomyPaymaster({ - paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", - }) - - account = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address, - defaultFallbackHandler: await accountFactory.minimalHandler(), - defaultValidationModule: module1, - activeValidationModule: module1, - paymaster: paymaster, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await account.getAccountAddress(); - console.log("account address ", address); - - expect(account.paymaster).not.toBeNull() - expect(account.paymaster).not.toBeUndefined() - - expect(address).toBe(account.accountAddress); - }, 10000); - -}); \ No newline at end of file diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts deleted file mode 100644 index 53d468752..000000000 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { Wallet, ethers } from "ethers"; -import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; - -import { - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - ECDSAOwnershipRegistryModule_v100__factory, -} from "@biconomy/common"; - -import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -import { ChainId } from "@biconomy/core-types"; -import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; - -const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); -const signer = provider.getSigner(); - -describe("BiconomySmartAccountV2 Module Abstraction", () => { - let owner: Wallet; - let factoryOwner: Wallet; - let entryPoint: EntryPoint; - let beneficiary: string; - let recipient: SampleRecipient; - let accountFactory: SmartAccountFactory_v200; - let ecdsaModule: ECDSAOwnershipRegistryModule_v100; - - beforeAll(async () => { - owner = Wallet.createRandom(); - entryPoint = await new EntryPoint__factory(signer).deploy(); - console.log("ep address ", entryPoint.address); - beneficiary = await signer.getAddress(); - factoryOwner = Wallet.createRandom(); - - const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - - accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - - ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - - recipient = await new SampleRecipient__factory(signer).deploy(); - - await new Promise((resolve) => setTimeout(resolve, 10000)); - }, 30000); - - it("Create smart account with default module (ECDSA)", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - /*defaultValidationModule: await ECDSAOwnershipValidationModule.create({ - signer: signer, - moduleAddress: ecdsaModule.address, - }),*/ - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - }, 10000); - - it("Create smart account with ECDSA module", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - }, 10000); -}); diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts deleted file mode 100644 index da8aea562..000000000 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ /dev/null @@ -1,609 +0,0 @@ -import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { VoidSigner, Wallet, ethers } from "ethers"; -import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; - -import { - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - ECDSAOwnershipRegistryModule_v100__factory, - MultiChainValidationModule_v100__factory, -} from "@biconomy/common"; - -import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -import { ChainId, UserOperation } from "@biconomy/core-types"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; -import { MultiChainValidationModule } from "@biconomy/modules"; -import { BaseValidationModule } from "@biconomy/modules"; -import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { MultiChainValidationModule_v100 } from "@biconomy/common"; -import { createWalletClient, http } from "viem"; -import { localhost, polygonMumbai } from "viem/chains"; -import { WalletClientSigner } from "@alchemy/aa-core"; -import { privateKeyToAccount } from "viem/accounts"; -import { DEFAULT_ENTRYPOINT_ADDRESS } from "../src/utils/Constants"; - -const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); -const signer = provider.getSigner(); -const SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; - -const MUMBAI = "https://rpc-mumbai.maticvigil.com"; -const randomEOA = ethers.Wallet.createRandom(); -const testPrivKey = randomEOA.privateKey.slice(2); - -describe("BiconomySmartAccountV2 API Specs", () => { - let owner: Wallet; - let factoryOwner: Wallet; - let accountAPI: BiconomySmartAccountV2; - let entryPoint: EntryPoint; - let beneficiary: string; - let recipient: SampleRecipient; - let accountFactory: SmartAccountFactory_v200; - let ecdsaModule: ECDSAOwnershipRegistryModule_v100; - let multiChainModule: MultiChainValidationModule_v100; - let accountAddress: string; - - let module1: BaseValidationModule; - let module2: BaseValidationModule; - - beforeAll(async () => { - owner = Wallet.createRandom(); - entryPoint = await new EntryPoint__factory(signer).deploy(); - console.log("ep address ", entryPoint.address); - beneficiary = await signer.getAddress(); - factoryOwner = Wallet.createRandom(); - - const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - - accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - - ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - - module1 = await ECDSAOwnershipValidationModule.create({ - signer: owner, - moduleAddress: ecdsaModule.address, - }); - - multiChainModule = await new MultiChainValidationModule_v100__factory(signer).deploy(); - - module2 = await MultiChainValidationModule.create({ - signer: owner, - moduleAddress: multiChainModule.address, - }); - - console.log("provider url ", provider.connection.url); - - recipient = await new SampleRecipient__factory(signer).deploy(); - accountAPI = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - // paymaster: paymaster, - // bundler: bundler, - entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address, - implementationAddress: accountImpl.address, - defaultFallbackHandler: await accountFactory.minimalHandler(), - defaultValidationModule: module1, - activeValidationModule: module1, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - // console.log('account api provider ', accountAPI.provider) - - const counterFactualAddress = await accountAPI.getAccountAddress(); - console.log("Counterfactual address ", counterFactualAddress); - - await new Promise((resolve) => setTimeout(resolve, 10000)); - }, 30000); - - it("Nonce should be zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - console.log("builtUserOp", builtUserOp); - expect(builtUserOp?.nonce?.toString()).toBe("0"); - }, 30000); - it("Sender should be non zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); - }, 30000); - it("InitCode length should be greater then 170", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); - }); - it("#getUserOpHash should match entryPoint.getUserOpHash", async function () { - const userOp: UserOperation = { - sender: "0x".padEnd(42, "1"), - nonce: 2, - initCode: "0x3333", - callData: "0x4444", - callGasLimit: 5, - verificationGasLimit: 6, - preVerificationGas: 7, - maxFeePerGas: 8, - maxPriorityFeePerGas: 9, - paymasterAndData: "0xaaaaaa", - signature: "0xbbbb", - }; - const hash = await accountAPI.getUserOpHash(userOp); - const epHash = await entryPoint.getUserOpHash(userOp); - expect(hash).toBe(epHash); - }); - it("should deploy to counterfactual address", async () => { - accountAddress = await accountAPI.getAccountAddress(); - expect(await provider.getCode(accountAddress).then((code) => code.length)).toBe(2); - - await signer.sendTransaction({ - to: accountAddress, - value: ethers.utils.parseEther("0.1"), - }); - const op = await accountAPI.buildUserOp([ - { - to: recipient.address, - data: recipient.interface.encodeFunctionData("something", ["hello"]), - }, - ]); - - const signedUserOp = await accountAPI.signUserOp(op); - - await entryPoint.handleOps([signedUserOp], beneficiary); - - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - - expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); - }, 10000); // on github runner it takes more time than 5000ms - - // TODO - // possibly use local bundler API from image - it("should build and send userop via bundler API", async () => {}); - - it("should deploy another account using different validation module", async () => { - let accountAPI2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - // paymaster: paymaster, - // bundler: bundler, - entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address, - implementationAddress: accountAPI.getImplementationAddress(), - defaultFallbackHandler: await accountFactory.minimalHandler(), - defaultValidationModule: module2, - activeValidationModule: module2, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - // TODO - // Review: Just setting different default validation module and querying account address is not working - // accountAPI.setDefaultValidationModule(module2); - - accountAPI2 = await accountAPI2.init(); - - const accountAddress2 = await accountAPI2.getAccountAddress(); - expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBe(2); - - await signer.sendTransaction({ - to: accountAddress2, - value: ethers.utils.parseEther("0.1"), - }); - const op = await accountAPI2.buildUserOp([ - { - to: recipient.address, - data: recipient.interface.encodeFunctionData("something", ["hello"]), - }, - ]); - - const signedUserOp = await accountAPI2.signUserOp(op); - - await entryPoint.handleOps([signedUserOp], beneficiary); - - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - - expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBeGreaterThan(0); - }); - - it("should check if module is enabled", async () => { - const isEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module1 as any).moduleAddress); - - expect(isEcdsaModuleEnabled).toBe(true); - - const isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - - expect(isMultichainEcdsaModuleEnabled).toBe(false); - }); - - it("should list all enabled modules", async () => { - const paginatedModules = await accountAPI.getAllModules(); - console.log("enabled modules ", paginatedModules); - }); - - it("should enable a new module", async () => { - let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(false); - - // Review: this actually skips whole paymaster stuff and also sends to connected bundler - // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); - - const enableModuleData = await accountAPI.getEnableModuleData((module2 as any).moduleAddress); - - await signer.sendTransaction({ - to: accountAddress, - value: ethers.utils.parseEther("0.1"), - }); - - const op = await accountAPI.buildUserOp([enableModuleData], { - // skipBundlerGasEstimation: true, - // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - }); - - const signedUserOp = await accountAPI.signUserOp(op); - - await entryPoint.handleOps([signedUserOp], beneficiary); - - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - - isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - - expect(isMultichainEcdsaModuleEnabled).toBe(true); - }); - - it("signs the userOp using active validation module", async () => { - const op = await accountAPI.buildUserOp([ - { - to: recipient.address, - data: recipient.interface.encodeFunctionData("something", ["hello"]), - }, - ]); - - const signedUserOp = await accountAPI.signUserOp(op); - - expect(signedUserOp.signature).toBeDefined(); - - const userOpHash = await accountAPI.getUserOpHash(op); - - const signature = await accountAPI.signUserOpHash(userOpHash); - - console.log("signature ", signature); - - expect(signature).toBeDefined(); - }); - - it("disables requested module", async () => { - let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(true); - - const disableModuleData = await accountAPI.getDisableModuleData(SENTINEL_MODULE, (module2 as any).moduleAddress); - - await signer.sendTransaction({ - to: accountAddress, - value: ethers.utils.parseEther("0.1"), - }); - - const op = await accountAPI.buildUserOp([disableModuleData], { - // skipBundlerGasEstimation: true, - // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - }); - - const signedUserOp = await accountAPI.signUserOp(op); - - await entryPoint.handleOps([signedUserOp], beneficiary); - - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - - isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(false); - - const modulesAfter = await accountAPI.getAllModules(); - expect(modulesAfter[0]).toBe((module1 as any).moduleAddress); - }); - - it("sends userop using multichain (different) validation module after enabling and setting it up", async () => { - let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(false); - - // Review: this actually skips whole paymaster stuff and also sends to connected bundler - // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); - - const accountOwnerAddress = await owner.getAddress(); - - const multichainEcdsaOwnershipSetupData = multiChainModule.interface.encodeFunctionData("initForSmartAccount", [accountOwnerAddress]); - - const setupAndEnableModuleData = await accountAPI.getSetupAndEnableModuleData((module2 as any).moduleAddress, multichainEcdsaOwnershipSetupData); - - await signer.sendTransaction({ - to: accountAddress, - value: ethers.utils.parseEther("0.1"), - }); - - const op1 = await accountAPI.buildUserOp([setupAndEnableModuleData], { - // skipBundlerGasEstimation: true, - // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - }); - - console.log("op1 ", op1); - - const signedUserOp1 = await accountAPI.signUserOp(op1); - - await entryPoint.handleOps([signedUserOp1], beneficiary); - - isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(true); - - // Setting it as active validation module now - accountAPI = accountAPI.setActiveValidationModule(module2); - - const op = await accountAPI.buildUserOp([ - { - to: recipient.address, - data: recipient.interface.encodeFunctionData("something", ["hello"]), - }, - ]); - - const signedUserOp = await accountAPI.signUserOp(op); - - await entryPoint.handleOps([signedUserOp], beneficiary); - - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - }, 10000); // on github runner it takes more time than 5000ms - - it("Creates another replicated instance using void signer", async () => { - const newmodule = await ECDSAOwnershipValidationModule.create({ - signer: new VoidSigner(await owner.getAddress()), - moduleAddress: ecdsaModule.address, - }); - - const accountAPI2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - // paymaster: paymaster, - // bundler: bundler, - entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address, - implementationAddress: accountAPI.getImplementationAddress(), - defaultFallbackHandler: await accountFactory.minimalHandler(), - defaultValidationModule: newmodule, - activeValidationModule: newmodule, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await accountAPI2.getAccountAddress(); - console.log("account address ", address); - - expect(address).toBe(accountAPI.accountAddress); - }, 10000); - - it("Create and setup ECDSA module with WalletClientSigner", async () => { - const wallet = privateKeyToAccount(`0x${testPrivKey}`); - - const walletClient = createWalletClient({ - account: wallet, - chain: polygonMumbai, - transport: http(MUMBAI), - }); - - const ecdsaSigner = new WalletClientSigner(walletClient, "json-rpc"); - - const account = await BiconomySmartAccountV2.create({ - chainId: ChainId.POLYGON_MUMBAI, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - signer: ecdsaSigner, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const counterFactualAddress = await account.getAccountAddress(); - console.log("Counterfactual address ", counterFactualAddress); - - const module = await ECDSAOwnershipValidationModule.create({ - signer: owner, - moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE, - }); - - account.setActiveValidationModule(module); - }); - - it("Create and setup ECDSA module with ethersV5 Signer", async () => { - const module = await ECDSAOwnershipValidationModule.create({ - signer: randomEOA, - moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE, - }); - - const account = await BiconomySmartAccountV2.create({ - chainId: ChainId.POLYGON_MUMBAI, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - signer: owner, - defaultValidationModule: module, - activeValidationModule: module, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const counterFactualAddress = await account.getAccountAddress(); - console.log("Counterfactual address ", counterFactualAddress); - - expect(counterFactualAddress).toBeDefined(); - - expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - }); - - // NOTE - // For tests we could only use sendUserOp for test networks until bundler integration test suite is integrated - // For test networks we can send transactions for Account created using random private key, IF paymaster is used - // buildUserOp tests we can do for any test network cause that only requires bundles without sending transactions - // If we can send prefund to the account then specific private key can be added (only testnet native tokens) or loaded from env - // TODO - - // it("Send user op with ethersV5 signer", async () => { - - // const provider = new ethers.providers.JsonRpcProvider(MUMBAI); - // const owner: Signer = new ethers.Wallet(testPrivKey, provider); - - // const bundler: IBundler = new Bundler({ - // bundlerUrl: "", - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // }) - - // const module = await ECDSAOwnershipValidationModule.create({ - // signer: owner, - // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - // }) - - // const newAccount = await BiconomySmartAccountV2.create({ - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // signer: owner, - // bundler, - // defaultValidationModule: module, - // activeValidationModule: module - // }); - - // const accountAddress = await newAccount.getAccountAddress(); - - // const prefund = { - // to: accountAddress, - // value: ethers.utils.parseEther("0.1"), - // } - - // const prefundResp = await owner.sendTransaction(prefund); - // prefundResp.wait(); - - // const tx = { - // to: await Wallet.createRandom().getAddress(), - // data: "0x" - // } - - // const userOp = await newAccount.buildUserOp([tx]); - // const res = await newAccount.sendUserOp(userOp); - // const txhash = await res.waitForTxHash(); - - // console.log("txhash ", txhash); - - // expect(txhash).toBeDefined(); - - // }); - - // it("Send user op with WalletClientSigner signer", async () => { - - // const wallet = privateKeyToAccount(`0x${testPrivKey}`) - - // const walletClient = createWalletClient({ - // account: wallet, - // transport: http("https://rpc-mumbai.maticvigil.com"), - // }); - - // let owner = new WalletClientSigner( - // walletClient, - // "json-rpc" - // ); - - // const bundler: IBundler = new Bundler({ - // bundlerUrl: "", - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // }) - - // const module = await ECDSAOwnershipValidationModule.create({ - // signer: owner, - // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - // }) - - // const newAccount = await BiconomySmartAccountV2.create({ - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // signer: owner, - // bundler, - // defaultValidationModule: module, - // activeValidationModule: module - // }); - - // const accountAddress: `0x${string}` = await newAccount.getAccountAddress() as `0x${string}`; - - // const prefundResp = await walletClient.sendTransaction({ - // account: wallet, - // to: accountAddress, - // value: 100000000000000000n, - // chain: polygonMumbai - // }); - - // const tx = { - // to: await Wallet.createRandom().getAddress(), - // data: "0x" - // } - - // const userOp = await newAccount.buildUserOp([tx]); - // const res = await newAccount.sendUserOp(userOp); - // const txhash = await res.waitForTxHash(); - - // console.log("txhash ", txhash); - - // expect(txhash).toBeDefined(); - // }); - - it("Create smart account with default module (ECDSA) without creating instance or providing module name", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - - expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - }, 10000); - - it("Create smart account with ECDSA module without creating instance", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule as ECDSAOwnershipValidationModule; - - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - - expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - }, 10000); - - it("Create smart account with default module using WalletClientSigner as signer", async () => { - const walletClient = createWalletClient({ - chain: localhost, - transport: http("http://127.0.0.1:8545"), - }); - - const ecdsaSigner = new WalletClientSigner(walletClient, "json-rpc"); - - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer: ecdsaSigner, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - - expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - }, 10000); -}); diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts new file mode 100644 index 000000000..6ab35c3a3 --- /dev/null +++ b/packages/account/tests/account.e2e.spec.ts @@ -0,0 +1,459 @@ +import { TestData } from "../../../tests"; +import { createSmartAccountClient, ERROR_MESSAGES, FeeQuotesOrDataResponse, IHybridPaymaster, PaymasterMode } from "../src/index"; +import { Hex, encodeFunctionData, getContract, parseAbi } from "viem"; +import { UserOperationStruct } from "@alchemy/aa-core"; +import { checkBalance, entryPointABI } from "../../../tests/utils"; +import { ERC20_ABI } from "@biconomy/modules"; + +describe("Account Tests", () => { + let mumbai: TestData; + let baseGoerli: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [mumbai, baseGoerli] = testDataPerChain; + }); + + it("should have addresses", async () => { + const { + whale: { viemWallet: signer, publicAddress: sender }, + minnow: { viemWallet: recipientSigner, publicAddress: recipient }, + bundlerUrl, + } = mumbai; + + const { + whale: { viemWallet: signerBase, publicAddress: senderBase }, + minnow: { viemWallet: recipientSignerBase, publicAddress: recipientBase }, + bundlerUrl: bundlerUrlBase, + } = baseGoerli; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const reciepientSmartAccount = await createSmartAccountClient({ + signer: recipientSigner, + bundlerUrl, + }); + + const smartAccountBase = await createSmartAccountClient({ + signer: signerBase, + bundlerUrl: bundlerUrlBase, + }); + + const reciepientSmartAccountBase = await createSmartAccountClient({ + signer: recipientSignerBase, + bundlerUrl, + }); + + const addresses = await Promise.all([ + sender, + smartAccount.getAddress(), + recipient, + reciepientSmartAccount.getAddress(), + senderBase, + smartAccountBase.getAddress(), + recipientBase, + reciepientSmartAccountBase.getAddress(), + ]); + expect(addresses.every(Boolean)).toBeTruthy(); + }); + + it("should send some native token to a recipient", async () => { + const { + whale: { viemWallet: signer }, + minnow: { publicAddress: recipient }, + bundlerUrl, + publicClient, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const balance = (await checkBalance(publicClient, recipient)) as bigint; + const { wait } = await smartAccount.sendTransaction( + { + to: recipient, + value: 1, + data: "0x", + }, + { + simulationType: "validation_and_execution", + }, + ); + + const result = await wait(); + const newBalance = (await checkBalance(publicClient, recipient)) as bigint; + + expect(result?.receipt?.transactionHash).toBeTruthy(); + expect(newBalance - balance).toBe(1n); + }, 50000); + + it("Create a smart account with paymaster with an api key", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const paymaster = smartAccount.paymaster; + expect(paymaster).not.toBeNull(); + expect(paymaster).not.toBeUndefined(); + }); + + it("Should gaslessly mint an NFT on Mumbai", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + publicClient, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; + + const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + + const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress()); + + const response = await smartAccount.sendTransaction(transaction, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + simulationType: "validation", + }); + + const userOpReceipt = await response.wait(3); + expect(userOpReceipt.userOpHash).toBeTruthy(); + expect(userOpReceipt.success).toBe("true"); + + const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress()); + + expect(maticBalanceAfter).toEqual(maticBalanceBefore); + + const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + + expect(newBalance - balance).toBe(1n); + }, 60000); + + it("Should mint an NFT on Mumbai and pay with ERC20 - with preferredToken", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + publicClient, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; + + const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress()); + const usdcBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); + + const { wait } = await smartAccount.sendTransaction([transaction], { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + }, + }); + + const { + receipt: { transactionHash }, + userOpHash, + success, + } = await wait(); + + expect(transactionHash).toBeTruthy(); + expect(userOpHash).toBeTruthy(); + expect(success).toBe("true"); + + const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress()); + expect(maticBalanceAfter).toEqual(maticBalanceBefore); + + const usdcBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); + expect(usdcBalanceAfter).toBeLessThan(usdcBalanceBefore); + + const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + expect(newBalance - balance).toBe(1n); + }, 60000); + + it("Should expect several feeQuotes in resonse to empty tokenInfo fields", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; + + const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20 } }); + expect(feeQuotesResponse.feeQuotes?.length).toBeGreaterThan(1); + }); + + it("Should mint an NFT on Mumbai and pay with ERC20 - with token selection and no maxApproval", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const preferredToken: Hex = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + publicClient, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const smartAccountAddress = await smartAccount.getAddress(); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; + + const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken, + }, + }); + + const selectedFeeQuote = feeQuotesResponse.feeQuotes?.[0]!; + const spender = feeQuotesResponse.tokenPaymasterAddress!; + + const contract = getContract({ + address: preferredToken, + abi: parseAbi(ERC20_ABI), + client: publicClient, + }); + + const allowanceBefore = (await contract.read.allowance([smartAccountAddress, spender])) as bigint; + + if (allowanceBefore > 0) { + const setAllowanceToZeroTransaction = await (smartAccount?.paymaster as IHybridPaymaster)?.buildTokenApprovalTransaction({ + feeQuote: { ...selectedFeeQuote, maxGasFee: 0 }, + spender, + }); + + const { wait } = await smartAccount.sendTransaction([setAllowanceToZeroTransaction]); + const { success } = await wait(); + + expect(success).toBe("true"); + const allowanceAfter = (await contract.read.allowance([smartAccountAddress, spender])) as bigint; + expect(allowanceAfter).toBe(0n); + } + + const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + const maticBalanceBefore = await checkBalance(publicClient, smartAccountAddress); + const usdcBalanceBefore = await checkBalance(publicClient, smartAccountAddress, preferredToken); + + const { wait } = await smartAccount.sendTransaction(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + feeQuote: selectedFeeQuote, + spender: feeQuotesResponse.tokenPaymasterAddress, + }, + }); + + const { + receipt: { transactionHash }, + userOpHash, + success, + } = await wait(); + + expect(userOpHash).toBeTruthy(); + expect(success).toBe("true"); + expect(transactionHash).toBeTruthy(); + + const maticBalanceAfter = await checkBalance(publicClient, smartAccountAddress); + expect(maticBalanceAfter).toEqual(maticBalanceBefore); + + const usdcBalanceAfter = await checkBalance(publicClient, smartAccountAddress, preferredToken); + expect(usdcBalanceAfter).toBeLessThan(usdcBalanceBefore); + + const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + expect(newBalance - balance).toBe(1n); + }, 60000); + + it("Should throw and error if missing field for ERC20 Paymaster user op", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; + + const feeQuotesResponse: FeeQuotesOrDataResponse = await smartAccount.getTokenFees(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + }, + }); + + expect(async () => + smartAccount.sendTransaction(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + feeQuote: feeQuotesResponse.feeQuotes?.[0], + }, + simulationType: "validation", + }), + ).rejects.toThrow(ERROR_MESSAGES.SPENDER_REQUIRED); + }, 60000); + + it("#getUserOpHash should match entryPoint.getUserOpHash", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + entryPointAddress, + publicClient, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const userOp: UserOperationStruct = { + sender: "0x".padEnd(42, "1") as string, + nonce: 2, + initCode: "0x3333", + callData: "0x4444", + callGasLimit: 5, + verificationGasLimit: 6, + preVerificationGas: 7, + maxFeePerGas: 8, + maxPriorityFeePerGas: 9, + paymasterAndData: "0xaaaaaa", + signature: "0xbbbb", + }; + + const epHash = await publicClient.readContract({ + address: entryPointAddress as Hex, + abi: entryPointABI, + functionName: "getUserOpHash", + // @ts-ignore + args: [userOp], + }); + + const hash = await smartAccount.getUserOpHash(userOp); + expect(hash).toBe(epHash); + }, 30000); + + it("should be deployed to counterfactual address", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + publicClient, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const accountAddress = await smartAccount.getAccountAddress(); + const byteCode = await publicClient.getBytecode({ address: accountAddress as Hex }); + + expect(byteCode?.length).toBeGreaterThan(2); + }, 10000); // on github runner it takes more time than 5000ms + + it("should check if ecdsaOwnershipModule is enabled", async () => { + const ecdsaOwnershipModule = "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e"; + + const { + whale: { viemWallet: signer }, + bundlerUrl, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + expect(ecdsaOwnershipModule).toBe(smartAccount.activeValidationModule.getAddress()); + }); +}); diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index d86ce1ff7..764fa66f7 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -1,5 +1,235 @@ +import { Paymaster, createSmartAccountClient } from "../src"; +import { createWalletClient, http } from "viem"; +import { localhost } from "viem/chains"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { TestData } from "../../../tests"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Wallet } from "@ethersproject/wallet"; + describe("Account Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); + let ganache: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-unit-tests + [ganache] = testDataPerChain; + }); + + it("should create a smartAccountClient from an ethers signer", async () => { + const { + bundlerUrl, + minnow: { ethersSigner: signer }, + } = ganache; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + }); + + it("should create a smartAccountClient from a walletClient", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + } = ganache; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + }); + + it("should pickup the rpcUrl from viem wallet and ethers", async () => { + const { + chainId, + bundlerUrl, + viemChain, + whale: { privateKey, viemWallet: originalViemSigner, ethersSigner: originalEthersSigner }, + } = ganache; + + const newRpcUrl = "http://localhost:8545"; + const defaultRpcUrl = viemChain.rpcUrls.default.http[0]; //http://127.0.0.1:8545" + + const ethersProvider = new JsonRpcProvider(newRpcUrl); + const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider); + + const accountOne = privateKeyToAccount(privateKey); + const walletClientWithNewRpcUrl = createWalletClient({ + account: accountOne, + chain: viemChain, + transport: http(newRpcUrl), + }); + + const [smartAccountFromEthersWithNewRpc, smartAccountFromViemWithNewRpc, smartAccountFromEthersWithOldRpc, smartAccountFromViemWithOldRpc] = + await Promise.all([ + createSmartAccountClient({ + chainId, + signer: ethersSignerWithNewRpcUrl, + bundlerUrl, + }), + createSmartAccountClient({ + chainId, + signer: walletClientWithNewRpcUrl, + bundlerUrl, + }), + createSmartAccountClient({ + chainId, + signer: originalEthersSigner, + bundlerUrl, + }), + createSmartAccountClient({ + chainId, + signer: originalViemSigner, + bundlerUrl, + }), + ]); + + const [ + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress, + ] = await Promise.all([ + smartAccountFromEthersWithNewRpc.getAccountAddress(), + smartAccountFromViemWithNewRpc.getAccountAddress(), + smartAccountFromEthersWithOldRpc.getAccountAddress(), + smartAccountFromViemWithOldRpc.getAccountAddress(), + ]); + + expect( + [ + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress, + ].every(Boolean), + ).toBeTruthy(); + + expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe(newRpcUrl); + expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe(newRpcUrl); + expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe(defaultRpcUrl); + expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe(defaultRpcUrl); + }); + + it("should create a smartAccountClient from a signer and chainId", async () => { + const { + chainId, + whale: { alchemyWalletClientSigner: signer }, + bundlerUrl, + } = ganache; + + const smartAccount = await createSmartAccountClient({ + chainId, + signer, + bundlerUrl, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + }); + + it("should provide an account address", async () => { + const { + bundlerUrl, + whale: { viemWallet: signer }, + } = ganache; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + }); + + it("Nonce should be zero", async () => { + const { + entryPointAddress, + bundlerUrl, + whale: { viemWallet: signer }, + minnow: { publicAddress: recipient }, + } = ganache; + + const smartAccount = await createSmartAccountClient({ + entryPointAddress, + signer, + bundlerUrl, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + + const builtUserOp = await smartAccount.buildUserOp([{ to: recipient, value: 1, data: "0x" }]); + console.log("builtUserOp", builtUserOp); + expect(builtUserOp?.nonce?.toString()).toBe("0x0"); + }); + + it("should have an active validation module", async () => { + const { + bundlerUrl, + whale: { viemWallet: signer }, + } = ganache; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const module = smartAccount.activeValidationModule; + expect(module).toBeTruthy(); + }); + + it("Create a smart account with paymaster by creating instance", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + biconomyPaymasterApiKey, + } = ganache; + + const paymasterUrl = "https://paymaster.biconomy.io/api/v1/80001/" + biconomyPaymasterApiKey; + const paymaster = new Paymaster({ paymasterUrl }); + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + paymaster, + }); + expect(smartAccount.paymaster).not.toBeNull(); + expect(smartAccount.paymaster).not.toBeUndefined(); + }, 10000); + + it("should fail to create a smartAccountClient from a walletClient without a chainId", async () => { + const { bundlerUrl } = ganache; + + const account = privateKeyToAccount(generatePrivateKey()); + const viemWalletClientNoChainId = createWalletClient({ + account, + transport: http(localhost.rpcUrls.default.http[0]), + }); + + expect( + await expect( + createSmartAccountClient({ + signer: viemWalletClientNoChainId, + bundlerUrl, + }), + ).rejects.toThrow("Cannot consume a viem wallet without a chainId"), + ); + }); + + it("should fail to create a smartAccountClient from a walletClient without an account", async () => { + const { bundlerUrl } = ganache; + + const viemWalletNoAccount = createWalletClient({ + transport: http(localhost.rpcUrls.default.http[0]), + }); + + expect(async () => + createSmartAccountClient({ + signer: viemWalletNoAccount, + bundlerUrl, + }), + ).rejects.toThrow("Cannot consume a viem wallet without an account"); }); }); diff --git a/packages/account/tsconfig.build.json b/packages/account/tsconfig.build.json new file mode 100644 index 000000000..42d88a236 --- /dev/null +++ b/packages/account/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests", "tests/**/*"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/account/tsconfig.json b/packages/account/tsconfig.json index d4bee29bb..53677da37 100644 --- a/packages/account/tsconfig.json +++ b/packages/account/tsconfig.json @@ -5,7 +5,9 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"] }, "include": ["src", "src/**/*.json"], } diff --git a/packages/account/typedoc.json b/packages/account/typedoc.json new file mode 100644 index 000000000..6a717b22a --- /dev/null +++ b/packages/account/typedoc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "entryPoints": ["src/index.ts"], + "basePath": "src", + "includes": "src", + "out": "docs", + "gitRevision": "main" +} diff --git a/packages/bundler/.esbuild.js b/packages/bundler/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/bundler/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index 8e768924c..35465063e 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2023-07-02) + +Export createBundler alias for static Bundler.create call + ## 3.1.3 (2023-12-28) VERSION Bump Only. @@ -11,29 +15,23 @@ VERSION Bump Only. ### Features -* Make entrypoint address optional in bundler config ([547724a](https://github.com/bcnmy/biconomy-client-sdk/pull/337/commits/547724a15366ee1e63aee80fdee0edc128a84c41)) +- Make entrypoint address optional in bundler config ([547724a](https://github.com/bcnmy/biconomy-client-sdk/pull/337/commits/547724a15366ee1e63aee80fdee0edc128a84c41)) ### Bug Fixes -* use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) +- use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) ## 3.1.1 (2023-11-09) - ### Bug Fixes -* resolve comments ([34fd6a3](https://github.com/bcnmy/biconomy-client-sdk/commit/34fd6a308805061d9faf408f1ce6da9cac0ee819)) - +- resolve comments ([34fd6a3](https://github.com/bcnmy/biconomy-client-sdk/commit/34fd6a308805061d9faf408f1ce6da9cac0ee819)) ### Features -* add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) -* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - - - - +- add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) +- chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) +- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) ## 3.1.0 (2023-09-20) @@ -41,20 +39,15 @@ Modular Account Abstraction is here. ### Bug Fixes -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) -* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) - +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) +- more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) ### Features -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) -* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - - - - +- base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) +- chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) +- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) ## 3.0.0 (2023-08-28) @@ -62,33 +55,20 @@ Modular SDK - consists stable version of below updates done in Alphas. ### Features -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) - - - - +- base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) ## 3.0.0-alpha.0 (2023-08-02) VERSION Bump Only. - - - # 3.1.0-alpha.0 (2023-07-24) - ### Features -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - - - - +- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) ## 3.0.0-alpha.0 (2023-07-12) - ### Bug Fixes -* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) +- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) diff --git a/packages/bundler/Readme.md b/packages/bundler/Readme.md index ef4ad69be..06e0c4af6 100644 --- a/packages/bundler/Readme.md +++ b/packages/bundler/Readme.md @@ -28,16 +28,12 @@ yarn add @biconomy/bundler ```typescript // This is how you create bundler instance in your dapp's -import { IBundler, Bundler } from "@biconomy/bundler"; +import { IBundler, createBundler } from "@biconomy/bundler"; // Make use of core-types package import { ChainId } from "@biconomy/core-types"; -const bundler: IBundler = new Bundler({ - bundlerUrl: "", - chainId: ChainId.POLYGON_MAINNET, - entryPointAddress: "", -}); +const bundler: IBundler = await createBundler({ bundlerUrl: "" }); // you can get this value from biconomy dashboard. https://dashboard.biconomy.io ``` Following are the methods that can be call on bundler instance @@ -51,7 +47,7 @@ export interface IBundler { } ``` -**estimateUserOpGas** +**[estimateUserOpGas](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#estimateUserOpGas)** Estimate the gas values for a UserOperation. Given UserOperation optionally without gas limits and gas prices, return the needed gas limits. The signature field is ignored by the wallet, so that the operation will not require user's approval. Still, it might require putting a "semi-valid" signature (e.g. a signature in the right length) **Return Values** @@ -62,7 +58,7 @@ Estimate the gas values for a UserOperation. Given UserOperation optionally with -------------------------------- -**sendUserOp** +**[sendUserOp](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#sendUserOp)** it submits a User Operation object to the User Operation pool of the client. The client MUST validate the UserOperation, and return a result accordingly. The result SHOULD be set to the userOpHash if and only if the request passed simulation and was accepted in the client's User Operation pool. If the validation, simulation, or User Operation pool inclusion fails, result SHOULD NOT be returned. Rather, the client SHOULD return the failure reason. @@ -72,7 +68,7 @@ If the UserOperation is valid, the client MUST return the calculated userOpHash -------------------------------- -**getUserOpByHash** +**[getUserOpByHash](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#getUserOpByHash)** Return a UserOperation based on a hash (userOpHash) returned by sendUserOp (eth_sendUserOperation) **Return Values** @@ -81,7 +77,7 @@ null in case the UserOperation is not yet included in a block, or a full UserOpe -------------------------------- -**getUserOpReceipt** +**[getUserOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#getUserOpReceipt)** Return a UserOperation receipt based on a hash (userOpHash) returned by eth_sendUserOperation diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 45252d1b8..785cb6d0c 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -2,8 +2,18 @@ "name": "@biconomy/bundler", "version": "3.1.3", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "keywords": [ "Ethereum", "Bundler", @@ -15,7 +25,16 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "test:file": "jest --config=../../jest.config.js --runInBand", "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:run": "jest tests/**/*.spec.ts --runInBand", @@ -23,7 +42,7 @@ "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, - "author": "talhamalik883 ", + "author": "Biconomy", "repository": { "type": "git", "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" @@ -37,9 +56,14 @@ "access": "public" }, "dependencies": { + "@alchemy/aa-core": "3.0.0-alpha.4", "@biconomy/common": "^3.1.3", - "@biconomy/core-types": "^3.1.3", - "@ethersproject/providers": "^5.7.2", - "ethers": "^5.7.0" + "viem": "^2.7.3" + }, + "devDependencies": { + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index fbc2a7915..a20fadfb4 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -1,5 +1,6 @@ -import { IBundler } from "./interfaces/IBundler"; -import { UserOperation, ChainId } from "@biconomy/core-types"; +import { getChain, type UserOperationStruct } from "@alchemy/aa-core"; +import { createPublicClient, http } from "viem"; +import { IBundler } from "./interfaces/IBundler.js"; import { GetUserOperationReceiptResponse, GetUserOpByHashResponse, @@ -15,18 +16,18 @@ import { UserOpStatus, GetUserOperationStatusResponse, SimulationType, -} from "./utils/Types"; -import { resolveProperties } from "ethers/lib/utils"; -import { deepHexlify, sendRequest, getTimestampInSeconds, HttpMethod, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; -import { transformUserOP } from "./utils/HelperFunction"; + BundlerConfigWithChainId, +} from "./utils/Types.js"; +import { transformUserOP, getTimestampInSeconds } from "./utils/HelperFunction.js"; import { UserOpReceiptIntervals, UserOpWaitForTxHashIntervals, UserOpWaitForTxHashMaxDurationIntervals, UserOpReceiptMaxDurationIntervals, DEFAULT_ENTRYPOINT_ADDRESS, -} from "./utils/Constants"; -import { JsonRpcProvider } from "@ethersproject/providers"; +} from "./utils/Constants.js"; +import { extractChainIdFromBundlerUrl } from "./utils/Utils.js"; +import { sendRequest, HttpMethod } from "@biconomy/common"; /** * This class implements IBundler interface. @@ -34,16 +35,21 @@ import { JsonRpcProvider } from "@ethersproject/providers"; * Checkout the proposal for more details on Bundlers. */ export class Bundler implements IBundler { + private bundlerConfig: BundlerConfigWithChainId; + // eslint-disable-next-line no-unused-vars - UserOpReceiptIntervals!: { [key in ChainId]?: number }; + UserOpReceiptIntervals!: { [key in number]?: number }; + + UserOpWaitForTxHashIntervals!: { [key in number]?: number }; - UserOpWaitForTxHashIntervals!: { [key in ChainId]?: number }; + UserOpReceiptMaxDurationIntervals!: { [key in number]?: number }; - UserOpReceiptMaxDurationIntervals!: { [key in ChainId]?: number }; + UserOpWaitForTxHashMaxDurationIntervals!: { [key in number]?: number }; - UserOpWaitForTxHashMaxDurationIntervals!: { [key in ChainId]?: number }; + constructor(bundlerConfig: Bundlerconfig) { + const parsedChainId: number = bundlerConfig?.chainId || extractChainIdFromBundlerUrl(bundlerConfig.bundlerUrl); + this.bundlerConfig = { ...bundlerConfig, chainId: parsedChainId }; - constructor(readonly bundlerConfig: Bundlerconfig) { this.UserOpReceiptIntervals = { ...UserOpReceiptIntervals, ...bundlerConfig.userOpReceiptIntervals, @@ -64,41 +70,38 @@ export class Bundler implements IBundler { ...bundlerConfig.userOpWaitForTxHashMaxDurationIntervals, }; - if (!bundlerConfig.entryPointAddress) { - this.bundlerConfig.entryPointAddress = DEFAULT_ENTRYPOINT_ADDRESS; - } else { - this.bundlerConfig.entryPointAddress = bundlerConfig.entryPointAddress; - } + this.bundlerConfig.entryPointAddress = bundlerConfig.entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS; } - private getBundlerUrl(): string { + public getBundlerUrl(): string { return `${this.bundlerConfig.bundlerUrl}`; } /** - * - * @param chainId + * @param userOpHash * @description This function will fetch gasPrices from bundler * @returns Promise */ - async estimateUserOpGas(userOp: UserOperation): Promise { + async estimateUserOpGas(userOp: UserOperationStruct): Promise { // expected dummySig and possibly dummmy paymasterAndData should be provided by the caller // bundler doesn't know account and paymaster implementation userOp = transformUserOP(userOp); - Logger.log("userOp sending for fee estimate ", userOp); const bundlerUrl = this.getBundlerUrl(); - const response: EstimateUserOpGasResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_estimateUserOperationGas", - params: [userOp, this.bundlerConfig.entryPointAddress], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: EstimateUserOpGasResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_estimateUserOperationGas", + params: [userOp, this.bundlerConfig.entryPointAddress], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const userOpGasResponse = response.result; for (const key in userOpGasResponse) { @@ -116,30 +119,35 @@ export class Bundler implements IBundler { * @description This function will send signed userOp to bundler to get mined on chain * @returns Promise */ - async sendUserOp(userOp: UserOperation, simulationType?: SimulationType): Promise { + async sendUserOp(userOp: UserOperationStruct, simulationParam?: SimulationType): Promise { const chainId = this.bundlerConfig.chainId; // transformUserOP will convert all bigNumber values to string userOp = transformUserOP(userOp); - const hexifiedUserOp = deepHexlify(await resolveProperties(userOp)); const simType = { - simulation_type: simulationType || "validation", + simulation_type: simulationParam || "validation", }; - const params = [hexifiedUserOp, this.bundlerConfig.entryPointAddress, simType]; + const params = [userOp, this.bundlerConfig.entryPointAddress, simType]; const bundlerUrl = this.getBundlerUrl(); - const sendUserOperationResponse: SendUserOpResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_sendUserOperation", - params: params, - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const sendUserOperationResponse: SendUserOpResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_sendUserOperation", + params: params, + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const response: UserOpResponse = { userOpHash: sendUserOperationResponse.result, wait: (confirmations?: number): Promise => { - const provider = new JsonRpcProvider(RPC_PROVIDER_URLS[chainId]); + const providerClient = createPublicClient({ + chain: getChain(chainId), + transport: http(), + }); // Note: maxDuration can be defined per chainId const maxDuration = this.UserOpReceiptMaxDurationIntervals[chainId] || 30000; // default 30 seconds let totalDuration = 0; @@ -151,9 +159,9 @@ export class Bundler implements IBundler { const userOpResponse = await this.getUserOpReceipt(sendUserOperationResponse.result); if (userOpResponse && userOpResponse.receipt && userOpResponse.receipt.blockNumber) { if (confirmations) { - const latestBlock = await provider.getBlockNumber(); - const confirmedBlocks = latestBlock - userOpResponse.receipt.blockNumber; - if (confirmedBlocks >= confirmations) { + const latestBlock = await providerClient.getBlockNumber(); + const confirmedBlocks = Number(latestBlock) - userOpResponse.receipt.blockNumber; + if (confirmations >= confirmedBlocks) { clearInterval(intervalId); resolve(userOpResponse); return; @@ -230,16 +238,19 @@ export class Bundler implements IBundler { */ async getUserOpReceipt(userOpHash: string): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetUserOperationReceiptResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_getUserOperationReceipt", - params: [userOpHash], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: GetUserOperationReceiptResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_getUserOperationReceipt", + params: [userOpHash], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const userOpReceipt: UserOpReceipt = response.result; return userOpReceipt; } @@ -252,16 +263,19 @@ export class Bundler implements IBundler { */ async getUserOpStatus(userOpHash: string): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetUserOperationStatusResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "biconomy_getUserOperationStatus", - params: [userOpHash], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: GetUserOperationStatusResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "biconomy_getUserOperationStatus", + params: [userOpHash], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const userOpStatus: UserOpStatus = response.result; return userOpStatus; } @@ -269,22 +283,24 @@ export class Bundler implements IBundler { /** * * @param userOpHash - * @param chainId * @description this function will return UserOpByHashResponse for given UserOpHash * @returns Promise */ async getUserOpByHash(userOpHash: string): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetUserOpByHashResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_getUserOperationByHash", - params: [userOpHash], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: GetUserOpByHashResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_getUserOperationByHash", + params: [userOpHash], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const userOpByHashResponse: UserOpByHashResponse = response.result; return userOpByHashResponse; } @@ -294,16 +310,23 @@ export class Bundler implements IBundler { */ async getGasFeeValues(): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetGasFeeValuesResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "biconomy_getGasFeeValues", - params: [], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: GetGasFeeValuesResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "biconomy_getGasFeeValues", + params: [], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); return response.result; } + + public static async create(config: Bundlerconfig): Promise { + return new Bundler(config); + } } diff --git a/packages/bundler/src/index.ts b/packages/bundler/src/index.ts index 2cb31e82e..7a779f5d5 100644 --- a/packages/bundler/src/index.ts +++ b/packages/bundler/src/index.ts @@ -1,3 +1,8 @@ -export * from "./interfaces/IBundler"; -export * from "./Bundler"; -export * from "./utils/Types"; +import { Bundler } from "./Bundler.js"; + +export * from "./interfaces/IBundler.js"; +export * from "./Bundler.js"; +export * from "./utils/Types.js"; +export * from "./utils/Utils.js"; + +export const createBundler = Bundler.create; diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts index f6d38164d..8ba7ccb50 100644 --- a/packages/bundler/src/interfaces/IBundler.ts +++ b/packages/bundler/src/interfaces/IBundler.ts @@ -1,12 +1,12 @@ -import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse, GasFeeValues, UserOpStatus, SimulationType } from "../utils/Types"; -import { UserOperation } from "@biconomy/core-types"; +import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse, UserOpStatus, SimulationType, GasFeeValues } from "../utils/Types"; +import { UserOperationStruct } from "@alchemy/aa-core"; export interface IBundler { - estimateUserOpGas(_userOp: Partial): Promise; - // could have second arg object called options - sendUserOp(_userOp: UserOperation, _simulationType?: SimulationType): Promise; + estimateUserOpGas(_userOp: Partial): Promise; + sendUserOp(_userOp: UserOperationStruct, _simulationType?: SimulationType): Promise; getUserOpReceipt(_userOpHash: string): Promise; getUserOpByHash(_userOpHash: string): Promise; getGasFeeValues(): Promise; getUserOpStatus(_userOpHash: string): Promise; + getBundlerUrl(): string; } diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index 5a0a2ae3b..8ffd436a5 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -1,149 +1,27 @@ -import { ChainId } from "@biconomy/core-types"; - -// eslint-disable-next-line no-unused-vars -export const UserOpReceiptIntervals: { [key in ChainId]?: number } = { - [ChainId.MAINNET]: 10000, - [ChainId.GOERLI]: 2000, - [ChainId.POLYGON_MUMBAI]: 2000, - [ChainId.POLYGON_MAINNET]: 2000, - [ChainId.BSC_TESTNET]: 2000, - [ChainId.BSC_MAINNET]: 2000, - [ChainId.POLYGON_ZKEVM_TESTNET]: 2000, - [ChainId.POLYGON_ZKEVM_MAINNET]: 2000, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 2000, - [ChainId.ARBITRUM_ONE_MAINNET]: 2000, - [ChainId.ARBITRUM_NOVA_MAINNET]: 2000, - [ChainId.OPTIMISM_MAINNET]: 2000, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 2000, - [ChainId.AVALANCHE_MAINNET]: 2000, - [ChainId.AVALANCHE_TESTNET]: 2000, - [ChainId.MOONBEAM_MAINNET]: 2000, - [ChainId.BASE_GOERLI_TESTNET]: 2000, - [ChainId.BASE_MAINNET]: 2000, - [ChainId.LINEA_TESTNET]: 2000, - [ChainId.LINEA_MAINNET]: 2000, - [ChainId.MANTLE_MAINNET]: 2000, - [ChainId.MANTLE_TESTNET]: 2000, - [ChainId.OPBNB_MAINNET]: 2000, - [ChainId.OPBNB_TESTNET]: 2000, - [ChainId.ASTAR_MAINNET]: 2000, - [ChainId.ASTAR_TESTNET]: 2000, - [ChainId.CHILIZ_MAINNET]: 2000, - [ChainId.CHILIZ_TESTNET]: 2000, - [ChainId.CORE_MAINNET]: 2000, - [ChainId.CORE_TESTNET]: 2000, - [ChainId.MANTA_PACIFIC_MAINNET]: 2000, - [ChainId.MANTA_PACIFIC_TESTNET]: 2000, - [ChainId.CAPX_TESTNET]: 2000, +export const UserOpReceiptIntervals: { [key in number]?: number } = { + [1]: 10000, }; -// Note: Reduced by 1/10th.. can reduce more -export const UserOpWaitForTxHashIntervals: { [key in ChainId]?: number } = { - [ChainId.MAINNET]: 1000, - [ChainId.GOERLI]: 500, - [ChainId.POLYGON_MUMBAI]: 500, - [ChainId.POLYGON_MAINNET]: 500, - [ChainId.BSC_TESTNET]: 500, - [ChainId.BSC_MAINNET]: 500, - [ChainId.POLYGON_ZKEVM_TESTNET]: 500, - [ChainId.POLYGON_ZKEVM_MAINNET]: 500, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 500, - [ChainId.ARBITRUM_ONE_MAINNET]: 500, - [ChainId.ARBITRUM_NOVA_MAINNET]: 500, - [ChainId.OPTIMISM_MAINNET]: 500, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 500, - [ChainId.AVALANCHE_MAINNET]: 500, - [ChainId.AVALANCHE_TESTNET]: 500, - [ChainId.MOONBEAM_MAINNET]: 500, - [ChainId.BASE_GOERLI_TESTNET]: 500, - [ChainId.BASE_MAINNET]: 500, - [ChainId.LINEA_TESTNET]: 500, - [ChainId.LINEA_MAINNET]: 500, - [ChainId.MANTLE_MAINNET]: 500, - [ChainId.MANTLE_TESTNET]: 500, - [ChainId.OPBNB_MAINNET]: 500, - [ChainId.OPBNB_TESTNET]: 500, - [ChainId.ASTAR_MAINNET]: 500, - [ChainId.ASTAR_TESTNET]: 500, - [ChainId.CHILIZ_MAINNET]: 500, - [ChainId.CHILIZ_TESTNET]: 500, - [ChainId.CORE_MAINNET]: 500, - [ChainId.CORE_TESTNET]: 500, - [ChainId.MANTA_PACIFIC_MAINNET]: 500, - [ChainId.MANTA_PACIFIC_TESTNET]: 500, - [ChainId.CAPX_TESTNET]: 500, +// Note: Default value is 500(0.5sec) +export const UserOpWaitForTxHashIntervals: { [key in number]?: number } = { + [1]: 1000, }; -export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = { - [ChainId.MAINNET]: 300000, - [ChainId.GOERLI]: 50000, - [ChainId.POLYGON_MUMBAI]: 50000, - [ChainId.POLYGON_MAINNET]: 60000, - [ChainId.BSC_TESTNET]: 50000, - [ChainId.BSC_MAINNET]: 50000, - [ChainId.POLYGON_ZKEVM_TESTNET]: 40000, - [ChainId.POLYGON_ZKEVM_MAINNET]: 40000, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 50000, - [ChainId.ARBITRUM_ONE_MAINNET]: 50000, - [ChainId.ARBITRUM_NOVA_MAINNET]: 30000, - [ChainId.OPTIMISM_MAINNET]: 40000, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 40000, - [ChainId.AVALANCHE_MAINNET]: 40000, - [ChainId.AVALANCHE_TESTNET]: 40000, - [ChainId.MOONBEAM_MAINNET]: 40000, - [ChainId.BASE_GOERLI_TESTNET]: 40000, - [ChainId.BASE_MAINNET]: 40000, - [ChainId.LINEA_TESTNET]: 50000, - [ChainId.LINEA_MAINNET]: 50000, - [ChainId.MANTLE_MAINNET]: 40000, - [ChainId.MANTLE_TESTNET]: 40000, - [ChainId.OPBNB_MAINNET]: 40000, - [ChainId.OPBNB_TESTNET]: 40000, - [ChainId.ASTAR_MAINNET]: 40000, - [ChainId.ASTAR_TESTNET]: 40000, - [ChainId.CHILIZ_MAINNET]: 40000, - [ChainId.CHILIZ_TESTNET]: 40000, - [ChainId.CORE_MAINNET]: 40000, - [ChainId.CORE_TESTNET]: 40000, - [ChainId.MANTA_PACIFIC_MAINNET]: 40000, - [ChainId.MANTA_PACIFIC_TESTNET]: 40000, - [ChainId.CAPX_TESTNET]: 40000, +// Note: Default value is 30000 (30sec) +export const UserOpReceiptMaxDurationIntervals: { [key in number]?: number } = { + [1]: 300000, + [80001]: 50000, + [137]: 60000, + [56]: 50000, + [97]: 50000, + [421613]: 50000, + [42161]: 50000, + [59140]: 50000, // linea testnet }; -export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: number } = { - [ChainId.MAINNET]: 20000, - [ChainId.GOERLI]: 20000, - [ChainId.POLYGON_MUMBAI]: 20000, - [ChainId.POLYGON_MAINNET]: 20000, - [ChainId.BSC_TESTNET]: 20000, - [ChainId.BSC_MAINNET]: 20000, - [ChainId.POLYGON_ZKEVM_TESTNET]: 20000, - [ChainId.POLYGON_ZKEVM_MAINNET]: 20000, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 20000, - [ChainId.ARBITRUM_ONE_MAINNET]: 20000, - [ChainId.ARBITRUM_NOVA_MAINNET]: 20000, - [ChainId.OPTIMISM_MAINNET]: 20000, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 20000, - [ChainId.AVALANCHE_MAINNET]: 20000, - [ChainId.AVALANCHE_TESTNET]: 20000, - [ChainId.MOONBEAM_MAINNET]: 20000, - [ChainId.BASE_GOERLI_TESTNET]: 20000, - [ChainId.BASE_MAINNET]: 20000, - [ChainId.LINEA_TESTNET]: 20000, - [ChainId.LINEA_MAINNET]: 20000, - [ChainId.MANTLE_MAINNET]: 20000, - [ChainId.MANTLE_TESTNET]: 20000, - [ChainId.OPBNB_MAINNET]: 20000, - [ChainId.OPBNB_TESTNET]: 20000, - [ChainId.ASTAR_MAINNET]: 20000, - [ChainId.ASTAR_TESTNET]: 20000, - [ChainId.CHILIZ_MAINNET]: 20000, - [ChainId.CHILIZ_TESTNET]: 20000, - [ChainId.CORE_MAINNET]: 20000, - [ChainId.CORE_TESTNET]: 20000, - [ChainId.MANTA_PACIFIC_MAINNET]: 20000, - [ChainId.MANTA_PACIFIC_TESTNET]: 20000, - [ChainId.CAPX_TESTNET]: 20000, +// Note: Default value is 20000 (20sec) +export const UserOpWaitForTxHashMaxDurationIntervals: { [key in number]?: number } = { + [1]: 20000, }; export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; diff --git a/packages/bundler/src/utils/HelperFunction.ts b/packages/bundler/src/utils/HelperFunction.ts index a0d0240e4..670e04d31 100644 --- a/packages/bundler/src/utils/HelperFunction.ts +++ b/packages/bundler/src/utils/HelperFunction.ts @@ -1,10 +1,10 @@ -import { UserOperation } from "@biconomy/core-types"; -import { BigNumber } from "ethers"; +import type { BigNumberish, UserOperationStruct } from "@alchemy/aa-core"; -export const transformUserOP = (userOp: UserOperation): UserOperation => { +// Will convert the userOp hex, bigInt and number values to hex strings +export const transformUserOP = (userOp: UserOperationStruct): UserOperationStruct => { try { const userOperation = { ...userOp }; - const keys: (keyof UserOperation)[] = [ + const keys: (keyof UserOperationStruct)[] = [ "nonce", "callGasLimit", "verificationGasLimit", @@ -13,8 +13,8 @@ export const transformUserOP = (userOp: UserOperation): UserOperation => { "maxPriorityFeePerGas", ]; for (const key of keys) { - if (userOperation[key] && userOperation[key] !== "0") { - userOperation[key] = BigNumber.from(userOp[key]).toHexString(); + if (userOperation[key] && userOperation[key] !== "0x") { + userOperation[key] = ("0x" + BigInt(userOp[key] as BigNumberish).toString(16)) as `0x${string}`; } } return userOperation; @@ -22,3 +22,11 @@ export const transformUserOP = (userOp: UserOperation): UserOperation => { throw `Failed to transform user operation: ${error}`; } }; + +/** + * @description this function will return current timestamp in seconds + * @returns Number + */ +export const getTimestampInSeconds = (): number => { + return Math.floor(Date.now() / 1000); +}; diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index 6e93489d9..746d1b24e 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -1,29 +1,37 @@ -import { ethers, BigNumber } from "ethers"; -import { ChainId, UserOperation } from "@biconomy/core-types"; +import { UserOperationStruct } from "@alchemy/aa-core"; +import { Hex } from "viem"; export type Bundlerconfig = { bundlerUrl: string; entryPointAddress?: string; - chainId: ChainId; + chainId?: number; // eslint-disable-next-line no-unused-vars - userOpReceiptIntervals?: { [key in ChainId]?: number }; - userOpWaitForTxHashIntervals?: { [key in ChainId]?: number }; - userOpReceiptMaxDurationIntervals?: { [key in ChainId]?: number }; - userOpWaitForTxHashMaxDurationIntervals?: { [key in ChainId]?: number }; + userOpReceiptIntervals?: { [key in number]?: number }; + userOpWaitForTxHashIntervals?: { [key in number]?: number }; + userOpReceiptMaxDurationIntervals?: { [key in number]?: number }; + userOpWaitForTxHashMaxDurationIntervals?: { [key in number]?: number }; }; +export type BundlerConfigWithChainId = Bundlerconfig & { chainId: number }; export type UserOpReceipt = { + /* The request hash of the UserOperation. */ userOpHash: string; + /* The entry point address used for the UserOperation. */ entryPoint: string; - sender: string; - nonce: number; + /* The paymaster used for this UserOperation (or empty). */ paymaster: string; - actualGasCost: BigNumber; - actualGasUsed: BigNumber; + /* The actual amount paid (by account or paymaster) for this UserOperation. */ + actualGasCost: Hex; + /* The total gas used by this UserOperation (including preVerification, creation, validation, and execution). */ + actualGasUsed: Hex; + /* Indicates whether the execution completed without reverting. */ success: "true" | "false"; + /* In case of revert, this is the revert reason. */ reason: string; - logs: Array; // The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle) - receipt: ethers.providers.TransactionReceipt; + /* The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle). */ + logs: Array; // The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle) + /* The TransactionReceipt object for the entire bundle, not only for this UserOperation. */ + receipt: any; }; // review @@ -89,7 +97,7 @@ export type GetUserOpByHashResponse = { error?: JsonRpcError; }; -export type UserOpByHashResponse = UserOperation & { +export type UserOpByHashResponse = UserOperationStruct & { transactionHash: string; blockNumber: number; blockHash: string; diff --git a/packages/bundler/src/utils/Utils.ts b/packages/bundler/src/utils/Utils.ts new file mode 100644 index 000000000..a64420100 --- /dev/null +++ b/packages/bundler/src/utils/Utils.ts @@ -0,0 +1,9 @@ +export const extractChainIdFromBundlerUrl = (url: string): number => { + try { + const regex = /\/api\/v2\/(\d+)\/[a-zA-Z0-9.-]+$/; + const match = regex.exec(url)!; + return parseInt(match[1]); + } catch (error) { + throw new Error("Invalid chain id"); + } +}; diff --git a/packages/bundler/tests/bundler.e2e.spec.ts b/packages/bundler/tests/bundler.e2e.spec.ts new file mode 100644 index 000000000..28e3318a5 --- /dev/null +++ b/packages/bundler/tests/bundler.e2e.spec.ts @@ -0,0 +1,19 @@ +import { TestData } from "../../../tests"; + +describe("Bundler Unit Tests", () => { + let mumbai: TestData; + let baseGoerli: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [mumbai, baseGoerli] = testDataPerChain; + }); + + it("should have chain data for mumbai", () => { + expect(mumbai).toHaveProperty("chainId"); + }); + + it("should also have chain data for base", () => { + expect(baseGoerli).toHaveProperty("chainId"); + }); +}); diff --git a/packages/bundler/tests/bundler.spec.ts b/packages/bundler/tests/bundler.spec.ts index 3c8a14354..e663dafb4 100644 --- a/packages/bundler/tests/bundler.spec.ts +++ b/packages/bundler/tests/bundler.spec.ts @@ -1,5 +1,14 @@ -describe("Bundler Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); +import { TestData } from "../../../tests"; + +describe("Bundler Unit Tests", () => { + let ganache: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-unit-tests + [ganache] = testDataPerChain; + }); + + it("should have chain data for ganache", () => { + expect(ganache).toHaveProperty("chainId"); }); }); diff --git a/packages/bundler/tsconfig.build.json b/packages/bundler/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/bundler/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/bundler/tsconfig.json b/packages/bundler/tsconfig.json index 3dc5293ed..d9b305a9a 100644 --- a/packages/bundler/tsconfig.json +++ b/packages/bundler/tsconfig.json @@ -5,7 +5,9 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"] }, "include": ["src", "src/**/*.json"] } diff --git a/packages/common/.depcheckrc b/packages/common/.depcheckrc deleted file mode 100644 index c0d8d09e2..000000000 --- a/packages/common/.depcheckrc +++ /dev/null @@ -1 +0,0 @@ -ignores: ["@openzeppelin/contracts"] diff --git a/packages/common/.esbuild.js b/packages/common/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/common/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md deleted file mode 100644 index 19b8a3b6d..000000000 --- a/packages/common/CHANGELOG.md +++ /dev/null @@ -1,126 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 3.1.3 (2023-12-28) - -* update capx url and rebase ([92c1ef0](https://github.com/bcnmy/biconomy-client-sdk/pull/360/commits/92c1ef0fcfeafbd89a6872b1e2689eea7c722bc3)) - -## 3.1.2 (2023-12-28) - -VERSION Bump Only. - - -## 3.1.1 (2023-11-09) - - -### Features - -* add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) - - - -## 3.1.0 (2023-09-20) - - -### Bug Fixes - -* comment out hardcoded gas limit in any case + fix value for estimate smart-account deployment + dev notes ([df48ec3](https://github.com/bcnmy/biconomy-client-sdk/commit/df48ec3c04cf44a8f64eb302217655076c6304a4)) -* error handling ([637bb67](https://github.com/bcnmy/biconomy-client-sdk/commit/637bb67b9390e39b4571374108bc70447a531963)) -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) -* linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) -* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) -* undefined log issue ([42f3f70](https://github.com/bcnmy/biconomy-client-sdk/commit/42f3f7040c96ff5ac57459224b09a25f95d2cd8c)) - - -### Features - -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) -* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) -* improve logs ([fb15af3](https://github.com/bcnmy/biconomy-client-sdk/commit/fb15af3af48ccf50101fedd7f9bb44ee97c747c4)) -* sdk test spec improvement ([fd80048](https://github.com/bcnmy/biconomy-client-sdk/commit/fd80048db7a60d34412dcb00f6dd8bb202f41ad3)) - - - - - -## 3.0.0 (2023-08-28) - - -### Features - -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) - - - -## 3.0.0-alpha.0 (2023-08-02) - -VERSION Bump Only. - - - -# 3.1.0-alpha.0 (2023-07-24) - - - -### Features - -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - - - -## 3.0.0-alpha.0 (2023-07-12) - - -### Bug Fixes - -* bundler sync changes ([eb9b30d](https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e)) - - -## 2.0.2 (2023-06-10) - -* smart account state types to have factory address added - - -## 2.0.1 (2023-05-18) - - -### Bug Fixes - -* logic update ([41c4aec](https://github.com/bcnmy/biconomy-client-sdk/commit/41c4aec8ab5012b7ad362b2870966bd607e38636)) -* fix build issue in angular for relative path (https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e) - - -### Features - -* chain integrations ([9af2da0](https://github.com/bcnmy/biconomy-client-sdk/commit/9af2da03820a26ac7d21301c32de041ced6c5e43)) -* Type added for PaymasterServiceData + reordering of params ([fae8b3a](https://github.com/bcnmy/biconomy-client-sdk/commit/fae8b3a02a5e810a9a40674d27f389b89199bb62)) -* logic changed to accept paymasterServiceData ([6daaf37](https://github.com/bcnmy/biconomy-client-sdk/commit/6daaf37855a13fa6e12fdbab16a7e980b4631475)) -* UserOpGasFields for fetching gas and gas prices from bundler (https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1) -* skipBundlerGasEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) -* fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) - - - - - - -## 2.0.0 (2023-04-07) - - -### Bug Fixes - -* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -* multisend bundle ([5f55587](https://github.com/bcnmy/biconomy-client-sdk/commit/5f55587b63c82a30652843fe619d8b891e495399)) -* optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) - - -## 1.0.0 (2023-01-03) - - -### Bug Fixes - -* optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) diff --git a/packages/common/README.md b/packages/common/README.md index 8876292b9..db4c4a8c7 100644 --- a/packages/common/README.md +++ b/packages/common/README.md @@ -2,7 +2,7 @@ common utils -methods for processing UserOperations +common methods for other biconomy packages ## Usage diff --git a/packages/common/abis/biconomy_v1.0.0/SmartAccountFactory_v1.0.0.json b/packages/common/abis/biconomy_v1.0.0/SmartAccountFactory_v1.0.0.json deleted file mode 100644 index 6fe41a20a..000000000 --- a/packages/common/abis/biconomy_v1.0.0/SmartAccountFactory_v1.0.0.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccountFactory", - "sourceName": "contracts/smart-contract-wallet/SmartAccountFactory.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_basicImplementation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "AccountCreationWithoutIndex", - "type": "event" - }, - { - "inputs": [], - "name": "accountCreationCode", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "basicImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "deployAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "deployCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAddressForCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimalHandler", - "outputs": [ - { - "internalType": "contract DefaultCallbackHandler", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60c060405234801561001057600080fd5b50604051610f5a380380610f5a83398101604081905261002f916100de565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601d60248201527f696d706c656d656e746174696f6e2063616e6e6f74206265207a65726f000000604482015260640160405180910390fd5b6001600160a01b0381166080526040516100a2906100d1565b604051809103906000f0801580156100be573d6000803e3d6000fd5b506001600160a01b031660a0525061010e565b6105e68061097483390190565b6000602082840312156100f057600080fd5b81516001600160a01b038116811461010757600080fd5b9392505050565b60805160a05161082661014e6000396000818160c1015261056501526000818161010e015281816101b10152818161032b015261043f01526108266000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063d668bfa811610050578063d668bfa8146100e3578063da9fc1ae146100f6578063daf0dfc81461010957600080fd5b8063088924ef1461007757806331c884df146100a75780633b3cb143146100bc575b600080fd5b61008a6100853660046105fe565b610130565b6040516001600160a01b0390911681526020015b60405180910390f35b6100af6102bd565b60405161009e919061064c565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b61008a6100f13660046105fe565b6102e7565b61008a61010436600461067f565b610408565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b60008061013c84610550565b90506000818051906020012084604051602001610163929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006040518060200161018d906105d5565b601f1982820381018352601f9091011660408190526101da91906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b6040516020818303038152906040529050818151826020016000f593506001600160a01b0384166102525760405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c65640000000000000000000000000060448201526064015b60405180910390fd5b8251156102735760008060008551602087016000895af10361027357600080fd5b84866001600160a01b0316856001600160a01b03167f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f260405160405180910390a450505092915050565b6060604051806020016102cf906105d5565b601f1982820381018352601f90910116604052919050565b6000806102f384610550565b9050600060405180602001610307906105d5565b601f1982820381018352601f90910116604081905261035491906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60408051808303601f1901815282825284516020958601208584015282820196909652805180830382018152606080840183528151918601919091208751978601979097207fff0000000000000000000000000000000000000000000000000000000000000060808501523090911b6bffffffffffffffffffffffff19166081840152609583019690965260b5808301969096528051808303909601865260d5909101905250825192019190912092915050565b6000806040518060200161041b906105d5565b601f1982820381018352601f90910116604081905261046891906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60405160208183030381529060405290508051816020016000f091506001600160a01b0382166104da5760405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606401610249565b60006104e584610550565b8051909150156105095760008060008351602085016000885af10361050957600080fd5b836001600160a01b0316836001600160a01b03167f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf65760405160405180910390a35050919050565b6040516001600160a01b0380831660248301527f000000000000000000000000000000000000000000000000000000000000000016604482015260609060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663784d200b60e11b17905292915050565b61012d806106c483390190565b80356001600160a01b03811681146105f957600080fd5b919050565b6000806040838503121561061157600080fd5b61061a836105e2565b946020939093013593505050565b60005b8381101561064357818101518382015260200161062b565b50506000910152565b602081526000825180602084015261066b816040850160208701610628565b601f01601f19169190910160400192915050565b60006020828403121561069157600080fd5b61069a826105e2565b9392505050565b600083516106b3818460208801610628565b919091019182525060200191905056fe608060405234801561001057600080fd5b5060405161012d38038061012d83398101604081905261002f91610090565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e20616464726573730000604482015260640160405180910390fd5b30556100c0565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b605f806100ce6000396000f3fe608060405230543660008037600080366000845af43d6000803e8080156024573d6000f35b3d6000fdfea2646970667358221220a7977748230fa5c96134083773f708cfbe78723c07e58051ac6bd8c4877a4d5a64736f6c63430008110033a26469706673582212201fec0df9ef9e79bf19660229f5fa1cf6bbf67a01bd022c1b6866ccb255550e5764736f6c63430008110033608060405234801561001057600080fd5b506105c6806100206000396000f3fe608060405234801561001057600080fd5b506004361061007c5760003560e01c8063a3f4df7e1161005b578063a3f4df7e146100fb578063bc197c8114610144578063f23a6e6114610166578063ffa1ad741461018657600080fd5b806223de291461008157806301ffc9a71461009b578063150b7a02146100c3575b600080fd5b61009961008f3660046102a0565b5050505050505050565b005b6100ae6100a936600461034b565b6101c2565b60405190151581526020015b60405180910390f35b6100e26100d136600461037c565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016100ba565b6101376040518060400160405280601881526020017f44656661756c742043616c6c6261636b2048616e646c6572000000000000000081525081565b6040516100ba91906103eb565b6100e261015236600461047e565b63bc197c8160e01b98975050505050505050565b6100e2610174366004610518565b63f23a6e6160e01b9695505050505050565b6101376040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60006001600160e01b03198216630271189760e51b14806101f357506001600160e01b03198216630a85bd0160e11b145b8061020d57506001600160e01b031982166223de2960e01b145b8061022857506001600160e01b031982166301ffc9a760e01b145b92915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461025257600080fd5b919050565b60008083601f84011261026957600080fd5b50813567ffffffffffffffff81111561028157600080fd5b60208301915083602082850101111561029957600080fd5b9250929050565b60008060008060008060008060c0898b0312156102bc57600080fd5b6102c58961022e565b97506102d360208a0161022e565b96506102e160408a0161022e565b955060608901359450608089013567ffffffffffffffff8082111561030557600080fd5b6103118c838d01610257565b909650945060a08b013591508082111561032a57600080fd5b506103378b828c01610257565b999c989b5096995094979396929594505050565b60006020828403121561035d57600080fd5b81356001600160e01b03198116811461037557600080fd5b9392505050565b60008060008060006080868803121561039457600080fd5b61039d8661022e565b94506103ab6020870161022e565b935060408601359250606086013567ffffffffffffffff8111156103ce57600080fd5b6103da88828901610257565b969995985093965092949392505050565b600060208083528351808285015260005b81811015610418578581018301518582016040015282016103fc565b506000604082860101526040601f19601f8301168501019250505092915050565b60008083601f84011261044b57600080fd5b50813567ffffffffffffffff81111561046357600080fd5b6020830191508360208260051b850101111561029957600080fd5b60008060008060008060008060a0898b03121561049a57600080fd5b6104a38961022e565b97506104b160208a0161022e565b9650604089013567ffffffffffffffff808211156104ce57600080fd5b6104da8c838d01610439565b909850965060608b01359150808211156104f357600080fd5b6104ff8c838d01610439565b909650945060808b013591508082111561032a57600080fd5b60008060008060008060a0878903121561053157600080fd5b61053a8761022e565b95506105486020880161022e565b94506040870135935060608701359250608087013567ffffffffffffffff81111561057257600080fd5b61057e89828a01610257565b979a969950949750929593949250505056fea2646970667358221220f9bf68273e40153fec1c25026a3e3145e43e4e63c519d4413921bbc86925381c64736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c8063d668bfa811610050578063d668bfa8146100e3578063da9fc1ae146100f6578063daf0dfc81461010957600080fd5b8063088924ef1461007757806331c884df146100a75780633b3cb143146100bc575b600080fd5b61008a6100853660046105fe565b610130565b6040516001600160a01b0390911681526020015b60405180910390f35b6100af6102bd565b60405161009e919061064c565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b61008a6100f13660046105fe565b6102e7565b61008a61010436600461067f565b610408565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b60008061013c84610550565b90506000818051906020012084604051602001610163929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006040518060200161018d906105d5565b601f1982820381018352601f9091011660408190526101da91906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b6040516020818303038152906040529050818151826020016000f593506001600160a01b0384166102525760405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c65640000000000000000000000000060448201526064015b60405180910390fd5b8251156102735760008060008551602087016000895af10361027357600080fd5b84866001600160a01b0316856001600160a01b03167f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f260405160405180910390a450505092915050565b6060604051806020016102cf906105d5565b601f1982820381018352601f90910116604052919050565b6000806102f384610550565b9050600060405180602001610307906105d5565b601f1982820381018352601f90910116604081905261035491906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60408051808303601f1901815282825284516020958601208584015282820196909652805180830382018152606080840183528151918601919091208751978601979097207fff0000000000000000000000000000000000000000000000000000000000000060808501523090911b6bffffffffffffffffffffffff19166081840152609583019690965260b5808301969096528051808303909601865260d5909101905250825192019190912092915050565b6000806040518060200161041b906105d5565b601f1982820381018352601f90910116604081905261046891906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60405160208183030381529060405290508051816020016000f091506001600160a01b0382166104da5760405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606401610249565b60006104e584610550565b8051909150156105095760008060008351602085016000885af10361050957600080fd5b836001600160a01b0316836001600160a01b03167f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf65760405160405180910390a35050919050565b6040516001600160a01b0380831660248301527f000000000000000000000000000000000000000000000000000000000000000016604482015260609060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663784d200b60e11b17905292915050565b61012d806106c483390190565b80356001600160a01b03811681146105f957600080fd5b919050565b6000806040838503121561061157600080fd5b61061a836105e2565b946020939093013593505050565b60005b8381101561064357818101518382015260200161062b565b50506000910152565b602081526000825180602084015261066b816040850160208701610628565b601f01601f19169190910160400192915050565b60006020828403121561069157600080fd5b61069a826105e2565b9392505050565b600083516106b3818460208801610628565b919091019182525060200191905056fe608060405234801561001057600080fd5b5060405161012d38038061012d83398101604081905261002f91610090565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e20616464726573730000604482015260640160405180910390fd5b30556100c0565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b605f806100ce6000396000f3fe608060405230543660008037600080366000845af43d6000803e8080156024573d6000f35b3d6000fdfea2646970667358221220a7977748230fa5c96134083773f708cfbe78723c07e58051ac6bd8c4877a4d5a64736f6c63430008110033a26469706673582212201fec0df9ef9e79bf19660229f5fa1cf6bbf67a01bd022c1b6866ccb255550e5764736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/biconomy_v1.0.0/SmartAccount_v1.0.0.json b/packages/common/abis/biconomy_v1.0.0/SmartAccount_v1.0.0.json deleted file mode 100644 index 541727bee..000000000 --- a/packages/common/abis/biconomy_v1.0.0/SmartAccount_v1.0.0.json +++ /dev/null @@ -1,1682 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccount", - "sourceName": "contracts/smart-contract-wallet/SmartAccount.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "anEntryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "BaseImplementationCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotAnEntryPoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPointOrOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotSelf", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "name": "CanNotEstimateGas", - "type": "error" - }, - { - "inputs": [], - "name": "DelegateCallsOnly", - "type": "error" - }, - { - "inputs": [], - "name": "EntryPointCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "ExecutionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "HandlerCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementationAddress", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "restoredSigner", - "type": "address" - }, - { - "internalType": "address", - "name": "expectedSigner", - "type": "address" - } - ], - "name": "InvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MixedAuthFail", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleAlreadyEnabled", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "expectedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "returnedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "prevModule", - "type": "address" - } - ], - "name": "ModuleAndPrevModuleMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleCannotBeZeroOrSentinel", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleNotEnabled", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesAlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesSetupExecutionFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "gasLeft", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasRequired", - "type": "uint256" - } - ], - "name": "NotEnoughGasLeft", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCanNotBeSelf", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerProvidedIsSame", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyProtectionActivated", - "type": "error" - }, - { - "inputs": [], - "name": "TokenGasPriceFactorCanNotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TokenTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TransferToZeroAddressAttempt", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "destLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "valueLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "funcLength", - "type": "uint256" - } - ], - "name": "WrongBatchProvided", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractSignature", - "type": "bytes" - } - ], - "name": "WrongContractSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "uintS", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "contractSignatureLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "signatureLength", - "type": "uint256" - } - ], - "name": "WrongContractSignatureFormat", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "payment", - "type": "uint256" - } - ], - "name": "AccountHandlePayment", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousHandler", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "ChangedFallbackHandler", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "DisabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_scw", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_oldEOA", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_newEOA", - "type": "address" - } - ], - "name": "EOAChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "EnabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "ModuleTransaction", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "SmartAccountReceivedNativeToken", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "addDeposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "checkSignatures", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevModule", - "type": "address" - }, - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "disableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domainSeparator", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "enableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - } - ], - "internalType": "struct Transaction", - "name": "_tx", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "internalType": "struct FeeRefund", - "name": "refundInfo", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "encodeTransactionData", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "entryPoint", - "outputs": [ - { - "internalType": "contract IEntryPoint", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - } - ], - "internalType": "struct Transaction", - "name": "_tx", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "internalType": "struct FeeRefund", - "name": "refundInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "execTransaction", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModuleReturnData", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - } - ], - "internalType": "struct Transaction", - "name": "_tx", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "internalType": "struct FeeRefund", - "name": "refundInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "execTransaction_S6W", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatchCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatchCall_4by", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "executeCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "executeCall_s1m", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getChainId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFallbackHandler", - "outputs": [ - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getImplementation", - "outputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "start", - "type": "address" - }, - { - "internalType": "uint256", - "name": "pageSize", - "type": "uint256" - } - ], - "name": "getModulesPaginated", - "outputs": [ - { - "internalType": "address[]", - "name": "array", - "type": "address[]" - }, - { - "internalType": "address", - "name": "next", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "batchId", - "type": "uint256" - } - ], - "name": "getNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "getTransactionHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "gasUsed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "name": "handlePaymentRevert", - "outputs": [ - { - "internalType": "uint256", - "name": "requiredGas", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "isModuleEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - } - ], - "name": "isValidSignature", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "pullTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "requiredTxGas", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "setFallbackHandler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "setOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "updateImplementation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validateUserOp", - "outputs": [ - { - "internalType": "uint256", - "name": "validationData", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdrawDepositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60e06040523480156200001157600080fd5b5060405162003915380380620039158339810160408190526200003491620000a1565b60016031553060c052603280546001600160a01b03191673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1790556001600160a01b0381166200008b5760405163091748f960e21b815260040160405180910390fd5b6001600160a01b03166080524660a052620000d3565b600060208284031215620000b457600080fd5b81516001600160a01b0381168114620000cc57600080fd5b9392505050565b60805160a05160c0516137e86200012d60003960006102af015260006104ed01526000818161078701528181610dcf01528181610f2c01528181610fd901528181611935015281816119c6015261204f01526137e86000f3fe6080604052600436106102a05760003560e01c80638da5cb5b1161016e578063c399ec88116100cb578063f08a03231161007f578063f698da2511610064578063f698da251461088e578063fc7d3d79146108f7578063ffa1ad741461090a5761031c565b8063f08a03231461084e578063f09a40161461086e5761031c565b8063cc2f8452116100b0578063cc2f8452146107e0578063e009cfde1461080e578063ed516d511461082e5761031c565b8063c399ec88146107ab578063c4ca3a9c146107c05761031c565b8063aaf10f4211610122578063ac85dca711610107578063ac85dca714610743578063affed0e014610763578063b0d691fe146107785761031c565b8063aaf10f421461070f578063abc1b745146107235761031c565b80639e5d4c49116101535780639e5d4c49146106af578063a18f51e5146106cf578063a9059cbb146106ef5761031c565b80638da5cb5b1461066f578063912ccaa31461068f5761031c565b80633a871cdd1161021c5780635229073f116101d0578063610b5925116101b5578063610b5925146105f45780637455ce3c14610614578063856dfd99146106275761031c565b80635229073f146105995780635c0ba299146105c75761031c565b8063468721a711610201578063468721a71461055e5780634a58db191461057e5780634d44560d146105865761031c565b80633a871cdd146105115780633d46b819146105315761031c565b806313af4035116102735780631626ba7e116102585780631626ba7e146104855780632d9ad53d146104be5780633408e470146104de5761031c565b806313af40351461042a578063141a468c1461044a5761031c565b80610772146103825780618f2d146103a457806301ffc9a7146103c4578063025b22bc1461040a5761031c565b3661031c576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102ee57604051633c97166560e21b815260040160405180910390fd5b604051349033907ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce0290600090a3005b34801561032857600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d480548061035357005b36600080373360601b365260008060143601600080855af190503d6000803e8061037c573d6000fd5b503d6000f35b34801561038e57600080fd5b506103a261039d366004612ab2565b610953565b005b3480156103b057600080fd5b506103a26103bf366004612b53565b6109a2565b3480156103d057600080fd5b506103f56103df366004612c03565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b34801561041657600080fd5b506103a2610425366004612c20565b610ab3565b34801561043657600080fd5b506103a2610445366004612c20565b610bbb565b34801561045657600080fd5b50610477610465366004612c3d565b60336020526000908152604090205481565b604051908152602001610401565b34801561049157600080fd5b506104a56104a0366004612d22565b610cbd565b6040516001600160e01b03199091168152602001610401565b3480156104ca57600080fd5b506103f56104d9366004612c20565b610d8a565b3480156104ea57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610477565b34801561051d57600080fd5b5061047761052c366004612d69565b610dc2565b34801561053d57600080fd5b5061047761054c366004612c3d565b60009081526033602052604090205490565b34801561056a57600080fd5b506103f5610579366004612dcc565b610e2b565b6103a2610f2a565b6103a2610594366004612e36565b610faa565b3480156105a557600080fd5b506105b96105b4366004612dcc565b611060565b604051610401929190612eb2565b3480156105d357600080fd5b506105e76105e2366004612fad565b611096565b6040516104019190613005565b34801561060057600080fd5b506103a261060f366004612c20565b6111f0565b6103f5610622366004613018565b611316565b34801561063357600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4545b6040516001600160a01b039091168152602001610401565b34801561067b57600080fd5b50603254610657906001600160a01b031681565b34801561069b57600080fd5b506103a26106aa366004612b53565b611554565b3480156106bb57600080fd5b506103a26106ca366004612ab2565b611562565b3480156106db57600080fd5b506104776106ea36600461308d565b61156e565b3480156106fb57600080fd5b506103a261070a366004612e36565b611707565b34801561071b57600080fd5b503054610657565b34801561072f57600080fd5b5061047761073e3660046130eb565b6117a5565b34801561074f57600080fd5b506103a261075e3660046131b3565b611878565b34801561076f57600080fd5b5061047761190e565b34801561078457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610657565b3480156107b757600080fd5b506104776119a6565b3480156107cc57600080fd5b506104776107db3660046131f4565b6119f5565b3480156107ec57600080fd5b506108006107fb366004612e36565b611a6e565b604051610401929190613265565b34801561081a57600080fd5b506103a26108293660046132c2565b611b67565b34801561083a57600080fd5b506103a2610849366004612d22565b611c99565b34801561085a57600080fd5b506103a2610869366004612c20565b611f2b565b34801561087a57600080fd5b506103a26108893660046132c2565b611fa2565b34801561089a57600080fd5b50610477604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6103f5610905366004613018565b612037565b34801561091657600080fd5b506105e76040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b61095b612044565b61099c848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b50505050565b6109aa612044565b8415806109b75750848314155b806109c25750828114155b156109f657604051630a0c0a9160e31b81526004810186905260248101849052604481018290526064015b60405180910390fd5b60005b85811015610aaa57610aa2878783818110610a1657610a166132fb565b9050602002016020810190610a2b9190612c20565b868684818110610a3d57610a3d6132fb565b90506020020135858585818110610a5657610a566132fb565b9050602002810190610a689190613311565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b6001016109f9565b50505050505050565b6032546001600160a01b03163314801590610ace5750333014155b15610aee576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610b445760405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f0000000000000000000060448201526064016109ed565b6001600160a01b0381163b610b7757604051630c76093760e01b81526001600160a01b03821660048201526024016109ed565b308054908290556040516001600160a01b0380841691908316907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a35050565b6032546001600160a01b03163314801590610bd65750333014155b15610bf6576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610c1d57604051639b15e16f60e01b815260040160405180910390fd5b306001600160a01b03821603610c46576040516375b4d24760e01b815260040160405180910390fd5b6032546001600160a01b0390811690821603610c7557604051638a95d3fb60e01b815260040160405180910390fd5b60328054908290556040516001600160a01b0391821691831690829030907ff2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd490600090a45050565b6032546000906001600160a01b03163b15610d4c57603254604051630b135d3f60e11b81526001600160a01b0390911690631626ba7e90610d049086908690600401613358565b602060405180830381865afa158015610d21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d459190613371565b9050610d84565b610d5683836120c8565b6032546001600160a01b03918216911603610d795750630b135d3f60e11b610d84565b506001600160e01b03195b92915050565b600060016001600160a01b03831614801590610d845750506001600160a01b0390811660009081526020819052604090205416151590565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e0f57604051635dac3db760e11b81523360048201526024016109ed565b610e1984846120ec565b9050610e24826122dd565b9392505050565b60003360011480610e525750336000908152602081905260409020546001600160a01b0316155b15610e72576040516321ac7c5f60e01b81523360048201526024016109ed565b610e7f858585855a612328565b90508015610ef6577f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da3386868686604051610ebe9594939291906133c6565b60405180910390a160405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a2610f22565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024016000604051808303818588803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b5050505050565b6032546001600160a01b03163314610fd75760405163d4ed9a1760e01b81523360048201526024016109ed565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050505050565b6000606061107086868686610e2b565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060007fda033865d68bf4a40a5a7cb4159a99e33dba8569e65ea3e38222eb12d9e66eee60001b856000015186604001518760600151805190602001208860200151896080015189600001518a602001518b604001518c606001518d608001518d6040516020016111139c9b9a99989796959493929190613411565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b611193604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040517fff0000000000000000000000000000000000000000000000000000000000000093841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509392505050565b6111f861242f565b6001600160a01b038116158061121757506001600160a01b0381166001145b156112405760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b0381811660009081526020819052604090205416156112845760405163b29d459560e01b81526001600160a01b03821660048201526024016109ed565b600060208181527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b0385811680865260408087208054939094166001600160a01b03199384161790935560019095528254168417909155519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440910160405180910390a150565b600060026031540361133b57604051637465d9d160e01b815260040160405180910390fd5b600260315560005a6001600090815260336020527f10f6f77027d502f219862b0303542eb5dd005b06fa23ff4d1775aaa45bbf94778054929350909182916113959189918991908561138c836134a0565b91905055611096565b80516020820120925090506113aa8286611c99565b506113d9603f60068860800151901b6113c391906134b9565b60808801516113d4906109c46134db565b612451565b6113e5906101f46134db565b5a1015611444575a611416603f60068960800151901b61140591906134b9565b60808901516113d4906109c46134db565b611422906101f46134db565b604051633b4daac960e01b8152600481019290925260248201526044016109ed565b61148486600001518760400151886060015189602001518960200151600014611471578a60800151612328565b6109c45a61147f91906134ee565b612328565b92508215801561149657506080860151155b80156114a457506020850151155b156114dd5760808601516020860151604051631061f87f60e31b81526004810192909252602482015283151560448201526064016109ed565b60008560200151600014611545576115145a6114f990856134ee565b8751602089015160408a015160608b015160808c0151612467565b905080827f3fd74c38c9f1b6f0499c6d0128fbf77a796dbacc7eda0369b13006dc977bb56b60405160405180910390a35b50506001603155509392505050565b6110588686868686866109a2565b61099c84848484610953565b6000836000036115c05760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420746f6b656e4761735072696365466163746f72000000000060448201526064016109ed565b60005a905060006001600160a01b038416156115dc57836115de565b325b90506001600160a01b0385166116615760003a88106115fd573a6115ff565b875b6116098a8c6134db565b6116139190613501565b9050600080600080600085875af190508061165a5760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b50506116c9565b6000868861166f8b8d6134db565b6116799190613501565b61168391906134b9565b9050611690868383612592565b6116c75760405163190eecf360e31b81526001600160a01b03808816600483015283166024820152604481018290526064016109ed565b505b5a82039250826040516020016116e191815260200190565b60408051601f198184030181529082905262461bcd60e51b82526109ed91600401613005565b6032546001600160a01b031633146117345760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b03821661175b576040516309293b1960e41b815260040160405180910390fd5b600080600080600085875af19050806117a05760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b505050565b6000806040518060a001604052808f6001600160a01b031681526020018b60018111156117d4576117d461338e565b81526020018e81526020018d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081018b90526040805160a0810182528b81529182018a905281018890526001600160a01b0380881660608301528616608082015290915061185d828286611096565b80519060200120925050509c9b505050505050505050505050565b6032546001600160a01b031633146118a55760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b0382166118cc576040516309293b1960e41b815260040160405180910390fd5b6118d7838383612592565b6117a05760405163190eecf360e31b81526001600160a01b03808516600483015283166024820152604481018290526064016109ed565b604051631aab3f0d60e11b8152306004820152600060248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044015b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190613518565b905090565b6040516370a0823160e01b81523060048201526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401611960565b6000805a9050611a3e878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050505a612328565b611a5b57604051632b3f6d1160e21b815260040160405180910390fd5b5a604080519183036020830152016116e1565b606060008267ffffffffffffffff811115611a8b57611a8b612c56565b604051908082528060200260200182016040528015611ab4578160200160208202803683370190505b506001600160a01b0380861660009081526020819052604081205492945091165b6001600160a01b03811615801590611af757506001600160a01b038116600114155b8015611b0257508482105b15611b595780848381518110611b1a57611b1a6132fb565b6001600160a01b039283166020918202929092018101919091529181166000908152918290526040909120541681611b51816134a0565b925050611ad5565b908352919491935090915050565b611b6f61242f565b6001600160a01b0381161580611b8e57506001600160a01b0381166001145b15611bb75760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b03828116600090815260208190526040902054811690821614611c1f576001600160a01b0382811660008181526020819052604090819020549051633103525b60e21b815284841660048201529216602483015260448201526064016109ed565b6001600160a01b03818116600081815260208181526040808320805488871685528285208054919097166001600160a01b03199182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276910160405180910390a15050565b604181511015611ceb5760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207369676e617475726573206c656e6774680000000000000060448201526064016109ed565b600080600080611d0e856020810151604082015160419092015160ff1692909190565b9195509350915060ff8416600003611e535750816041821015611d55576040516338a245ff60e11b81526004810183905260006024820181905260448201526064016109ed565b6020828601810151865190918290611d6e9086906134db565b611d7891906134db565b1115611dab5785516040516338a245ff60e11b8152600481018590526024810183905260448101919091526064016109ed565b604051630b135d3f60e11b808252878501602001916001600160a01b03851690631626ba7e90611de1908c908690600401613358565b602060405180830381865afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e229190613371565b6001600160e01b03191614611e4c578060405163605d348960e01b81526004016109ed9190613005565b5050611ee6565b601e8460ff161115611ed657611ece611e6d600486613531565b8484611ec68a6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9291906126e3565b509050611ee6565b611ee2868585856126e3565b5090505b6032546001600160a01b03828116911614611058576032546040516310b5d43760e21b81526001600160a01b03808416600483015290911660248201526044016109ed565b611f3361242f565b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d454611f5e826127a7565b816001600160a01b0316816001600160a01b03167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c60405160405180910390a35050565b6032546001600160a01b031615611fce576040516393360fbf60e01b81523060048201526024016109ed565b6001600160a01b038216611ff557604051639b15e16f60e01b815260040160405180910390fd5b603280546001600160a01b0319166001600160a01b038416179055612019816127a7565b6120336000604051806020016040528060008152506127f2565b5050565b6000610f22848484611316565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061208857506032546001600160a01b03163314155b156120a8576040516332dbd3c760e11b81523360048201526024016109ed565b565b60008082516020840185875af16040513d6000823e81610fa3573d81fd5b60008060006120d785856128bc565b915091506120e481612901565b509392505050565b600036816120fd6060860186613311565b90925090508015612204576000612117600482848661354a565b61212091613574565b90506361a2b3b760e01b6001600160e01b0319821601612202576000808061214b856004818961354a565b81019061215891906135a4565b6001600160a01b03808416600090815260208190526040902054939650919450925016156121fe57604051631179c1f560e11b81526001600160a01b038416906322f383ea906121ae908c908c90600401613662565b6020604051808303816000875af11580156121cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f19190613518565b9650505050505050610d84565b5050505b505b600061225d856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506122ad612270610140880188613311565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085939250506120c89050565b6032546001600160a01b039081169116146122ce5760019350505050610d84565b50600095945050505050565b50565b80156122da5760405133906000199083906000818181858888f193505050503d806000811461099c576040519150601f19603f3d011682016040523d82523d6000602084013e61099c565b6000600183600181111561233e5761233e61338e565b03612356576000808551602087018986f49050612366565b600080855160208701888a87f190505b80156123cb578360405161237a919061377b565b604051809103902085876001600160a01b03167f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee86866040516123be929190613797565b60405180910390a4612426565b836040516123d9919061377b565b604051809103902085876001600160a01b03167f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a868660405161241d929190613797565b60405180910390a45b95945050505050565b3330146120a8576040516301478e3360e21b81523360048201526024016109ed565b60008183116124605781610e24565b5090919050565b60008360000361248a5760405163653f35a360e01b815260040160405180910390fd5b60006001600160a01b038316156124a157826124a3565b325b90506001600160a01b038416612523573a86106124c0573a6124c2565b855b6124cc888a6134db565b6124d69190613501565b9150600080600080600086865af190508061251d5760405163190eecf360e31b8152600060048201526001600160a01b0383166024820152604481018490526064016109ed565b50612587565b848661252f898b6134db565b6125399190613501565b61254391906134b9565b9150612550848284612592565b6125875760405163190eecf360e31b81526001600160a01b03808616600483015282166024820152604481018390526064016109ed565b509695505050505050565b60006001600160a01b0384166125ea5760405162461bcd60e51b815260206004820152601d60248201527f746f6b656e2063616e206e6f74206265207a65726f206164647265737300000060448201526064016109ed565b6000846001600160a01b03163b116126445760405162461bcd60e51b815260206004820152601c60248201527f746f6b656e20636f6e747261637420646f65736e27742065786973740000000060448201526064016109ed565b604080516001600160a01b03851660248201526044808201859052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b178152825160009182896127105a03f13d80156126c657602081146126ce57600093506126d9565b8193506126d9565b600051158215171593505b5050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561271a575060009050600361279e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561276e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127975760006001925092505061279e565b9150600090505b94509492505050565b6001600160a01b0381166127ce5760405163dd449f5f60e01b815260040160405180910390fd5b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d455565b600160009081526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d546001600160a01b0316156128455760405163df8cc4e360e01b815260040160405180910390fd5b600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556001600160a01b038216156120335761289f8260008360015a612328565b6120335760405163032e3a3960e51b815260040160405180910390fd5b60008082516041036128f25760208301516040840151606085015160001a6128e6878285856126e3565b945094505050506128fa565b506000905060025b9250929050565b60008160048111156129155761291561338e565b0361291d5750565b60018160048111156129315761293161338e565b0361297e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109ed565b60028160048111156129925761299261338e565b036129df5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109ed565b60038160048111156129f3576129f361338e565b036122da5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109ed565b6001600160a01b03811681146122da57600080fd5b8035612a6b81612a4b565b919050565b60008083601f840112612a8257600080fd5b50813567ffffffffffffffff811115612a9a57600080fd5b6020830191508360208285010111156128fa57600080fd5b60008060008060608587031215612ac857600080fd5b8435612ad381612a4b565b935060208501359250604085013567ffffffffffffffff811115612af657600080fd5b612b0287828801612a70565b95989497509550505050565b60008083601f840112612b2057600080fd5b50813567ffffffffffffffff811115612b3857600080fd5b6020830191508360208260051b85010111156128fa57600080fd5b60008060008060008060608789031215612b6c57600080fd5b863567ffffffffffffffff80821115612b8457600080fd5b612b908a838b01612b0e565b90985096506020890135915080821115612ba957600080fd5b612bb58a838b01612b0e565b90965094506040890135915080821115612bce57600080fd5b50612bdb89828a01612b0e565b979a9699509497509295939492505050565b6001600160e01b0319811681146122da57600080fd5b600060208284031215612c1557600080fd5b8135610e2481612bed565b600060208284031215612c3257600080fd5b8135610e2481612a4b565b600060208284031215612c4f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612c8f57612c8f612c56565b60405290565b600082601f830112612ca657600080fd5b813567ffffffffffffffff80821115612cc157612cc1612c56565b604051601f8301601f19908116603f01168101908282118183101715612ce957612ce9612c56565b81604052838152866020858801011115612d0257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612d3557600080fd5b82359150602083013567ffffffffffffffff811115612d5357600080fd5b612d5f85828601612c95565b9150509250929050565b600080600060608486031215612d7e57600080fd5b833567ffffffffffffffff811115612d9557600080fd5b84016101608187031215612da857600080fd5b95602085013595506040909401359392505050565b803560028110612a6b57600080fd5b60008060008060808587031215612de257600080fd5b8435612ded81612a4b565b935060208501359250604085013567ffffffffffffffff811115612e1057600080fd5b612e1c87828801612c95565b925050612e2b60608601612dbd565b905092959194509250565b60008060408385031215612e4957600080fd5b8235612e5481612a4b565b946020939093013593505050565b60005b83811015612e7d578181015183820152602001612e65565b50506000910152565b60008151808452612e9e816020860160208601612e62565b601f01601f19169290920160200192915050565b8215158152604060208201526000610f226040830184612e86565b600060a08284031215612edf57600080fd5b612ee7612c6c565b90508135612ef481612a4b565b8152612f0260208301612dbd565b602082015260408201356040820152606082013567ffffffffffffffff811115612f2b57600080fd5b612f3784828501612c95565b6060830152506080820135608082015292915050565b600060a08284031215612f5f57600080fd5b612f67612c6c565b90508135815260208201356020820152604082013560408201526060820135612f8f81612a4b565b60608201526080820135612fa281612a4b565b608082015292915050565b600080600060e08486031215612fc257600080fd5b833567ffffffffffffffff811115612fd957600080fd5b612fe586828701612ecd565b935050612ff58560208601612f4d565b915060c084013590509250925092565b602081526000610e246020830184612e86565b600080600060e0848603121561302d57600080fd5b833567ffffffffffffffff8082111561304557600080fd5b61305187838801612ecd565b94506130608760208801612f4d565b935060c086013591508082111561307657600080fd5b5061308386828701612c95565b9150509250925092565b60008060008060008060c087890312156130a657600080fd5b8635955060208701359450604087013593506060870135925060808701356130cd81612a4b565b915060a08701356130dd81612a4b565b809150509295509295509295565b6000806000806000806000806000806000806101608d8f03121561310e57600080fd5b6131188d35612a4b565b8c359b5060208d01359a5067ffffffffffffffff60408e0135111561313c57600080fd5b61314c8e60408f01358f01612a70565b909a50985061315d60608e01612dbd565b975060808d0135965060a08d0135955060c08d0135945060e08d013593506101008d013561318a81612a4b565b92506131996101208e01612a60565b91506101408d013590509295989b509295989b509295989b565b6000806000606084860312156131c857600080fd5b83356131d381612a4b565b925060208401356131e381612a4b565b929592945050506040919091013590565b60008060008060006080868803121561320c57600080fd5b853561321781612a4b565b945060208601359350604086013567ffffffffffffffff81111561323a57600080fd5b61324688828901612a70565b9094509250613259905060608701612dbd565b90509295509295909350565b604080825283519082018190526000906020906060840190828701845b828110156132a75781516001600160a01b031684529284019290840190600101613282565b5050506001600160a01b039490941692019190915250919050565b600080604083850312156132d557600080fd5b82356132e081612a4b565b915060208301356132f081612a4b565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332857600080fd5b83018035915067ffffffffffffffff82111561334357600080fd5b6020019150368190038213156128fa57600080fd5b828152604060208201526000610f226040830184612e86565b60006020828403121561338357600080fd5b8151610e2481612bed565b634e487b7160e01b600052602160045260246000fd5b600281106133c257634e487b7160e01b600052602160045260246000fd5b9052565b60006001600160a01b03808816835280871660208401525084604083015260a060608301526133f860a0830185612e86565b905061340760808301846133a4565b9695505050505050565b6000610180820190508d82526001600160a01b03808e1660208401528c60408401528b6060840152613446608084018c6133a4565b8960a08401528860c08401528760e08401528661010084015280861661012084015280851661014084015250826101608301529d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016134b2576134b261348a565b5060010190565b6000826134d657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d8457610d8461348a565b81810381811115610d8457610d8461348a565b8082028115828204841417610d8457610d8461348a565b60006020828403121561352a57600080fd5b5051919050565b60ff8281168282160390811115610d8457610d8461348a565b6000808585111561355a57600080fd5b8386111561356757600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561359c5780818660040360031b1b83161692505b505092915050565b6000806000606084860312156135b957600080fd5b83356135c481612a4b565b925060208401359150604084013567ffffffffffffffff8111156135e757600080fd5b61308386828701612c95565b6000808335601e1984360301811261360a57600080fd5b830160208101925035905067ffffffffffffffff81111561362a57600080fd5b8036038213156128fa57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526136836040820161367685612a60565b6001600160a01b03169052565b60208301356060820152600061369c60408501856135f3565b6101608060808601526136b46101a086018385613639565b92506136c360608801886135f3565b9250603f19808786030160a08801526136dd858584613639565b9450608089013560c088015260a089013560e0880152610100935060c089013584880152610120915060e089013582880152610140848a013581890152613726838b018b6135f3565b9550925081888703018489015261373e868685613639565b955061374c818b018b6135f3565b955093505080878603016101808801525050613769838383613639565b93505050508260208301529392505050565b6000825161378d818460208701612e62565b9190910192915050565b604081016137a582856133a4565b826020830152939250505056fea26469706673582212206d38de10695d463253620f7bec76e681851e44f22392d864735b57ecaf843b1d64736f6c63430008110033", - "deployedBytecode": "0x6080604052600436106102a05760003560e01c80638da5cb5b1161016e578063c399ec88116100cb578063f08a03231161007f578063f698da2511610064578063f698da251461088e578063fc7d3d79146108f7578063ffa1ad741461090a5761031c565b8063f08a03231461084e578063f09a40161461086e5761031c565b8063cc2f8452116100b0578063cc2f8452146107e0578063e009cfde1461080e578063ed516d511461082e5761031c565b8063c399ec88146107ab578063c4ca3a9c146107c05761031c565b8063aaf10f4211610122578063ac85dca711610107578063ac85dca714610743578063affed0e014610763578063b0d691fe146107785761031c565b8063aaf10f421461070f578063abc1b745146107235761031c565b80639e5d4c49116101535780639e5d4c49146106af578063a18f51e5146106cf578063a9059cbb146106ef5761031c565b80638da5cb5b1461066f578063912ccaa31461068f5761031c565b80633a871cdd1161021c5780635229073f116101d0578063610b5925116101b5578063610b5925146105f45780637455ce3c14610614578063856dfd99146106275761031c565b80635229073f146105995780635c0ba299146105c75761031c565b8063468721a711610201578063468721a71461055e5780634a58db191461057e5780634d44560d146105865761031c565b80633a871cdd146105115780633d46b819146105315761031c565b806313af4035116102735780631626ba7e116102585780631626ba7e146104855780632d9ad53d146104be5780633408e470146104de5761031c565b806313af40351461042a578063141a468c1461044a5761031c565b80610772146103825780618f2d146103a457806301ffc9a7146103c4578063025b22bc1461040a5761031c565b3661031c576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102ee57604051633c97166560e21b815260040160405180910390fd5b604051349033907ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce0290600090a3005b34801561032857600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d480548061035357005b36600080373360601b365260008060143601600080855af190503d6000803e8061037c573d6000fd5b503d6000f35b34801561038e57600080fd5b506103a261039d366004612ab2565b610953565b005b3480156103b057600080fd5b506103a26103bf366004612b53565b6109a2565b3480156103d057600080fd5b506103f56103df366004612c03565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b34801561041657600080fd5b506103a2610425366004612c20565b610ab3565b34801561043657600080fd5b506103a2610445366004612c20565b610bbb565b34801561045657600080fd5b50610477610465366004612c3d565b60336020526000908152604090205481565b604051908152602001610401565b34801561049157600080fd5b506104a56104a0366004612d22565b610cbd565b6040516001600160e01b03199091168152602001610401565b3480156104ca57600080fd5b506103f56104d9366004612c20565b610d8a565b3480156104ea57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610477565b34801561051d57600080fd5b5061047761052c366004612d69565b610dc2565b34801561053d57600080fd5b5061047761054c366004612c3d565b60009081526033602052604090205490565b34801561056a57600080fd5b506103f5610579366004612dcc565b610e2b565b6103a2610f2a565b6103a2610594366004612e36565b610faa565b3480156105a557600080fd5b506105b96105b4366004612dcc565b611060565b604051610401929190612eb2565b3480156105d357600080fd5b506105e76105e2366004612fad565b611096565b6040516104019190613005565b34801561060057600080fd5b506103a261060f366004612c20565b6111f0565b6103f5610622366004613018565b611316565b34801561063357600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4545b6040516001600160a01b039091168152602001610401565b34801561067b57600080fd5b50603254610657906001600160a01b031681565b34801561069b57600080fd5b506103a26106aa366004612b53565b611554565b3480156106bb57600080fd5b506103a26106ca366004612ab2565b611562565b3480156106db57600080fd5b506104776106ea36600461308d565b61156e565b3480156106fb57600080fd5b506103a261070a366004612e36565b611707565b34801561071b57600080fd5b503054610657565b34801561072f57600080fd5b5061047761073e3660046130eb565b6117a5565b34801561074f57600080fd5b506103a261075e3660046131b3565b611878565b34801561076f57600080fd5b5061047761190e565b34801561078457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610657565b3480156107b757600080fd5b506104776119a6565b3480156107cc57600080fd5b506104776107db3660046131f4565b6119f5565b3480156107ec57600080fd5b506108006107fb366004612e36565b611a6e565b604051610401929190613265565b34801561081a57600080fd5b506103a26108293660046132c2565b611b67565b34801561083a57600080fd5b506103a2610849366004612d22565b611c99565b34801561085a57600080fd5b506103a2610869366004612c20565b611f2b565b34801561087a57600080fd5b506103a26108893660046132c2565b611fa2565b34801561089a57600080fd5b50610477604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6103f5610905366004613018565b612037565b34801561091657600080fd5b506105e76040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b61095b612044565b61099c848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b50505050565b6109aa612044565b8415806109b75750848314155b806109c25750828114155b156109f657604051630a0c0a9160e31b81526004810186905260248101849052604481018290526064015b60405180910390fd5b60005b85811015610aaa57610aa2878783818110610a1657610a166132fb565b9050602002016020810190610a2b9190612c20565b868684818110610a3d57610a3d6132fb565b90506020020135858585818110610a5657610a566132fb565b9050602002810190610a689190613311565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b6001016109f9565b50505050505050565b6032546001600160a01b03163314801590610ace5750333014155b15610aee576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610b445760405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f0000000000000000000060448201526064016109ed565b6001600160a01b0381163b610b7757604051630c76093760e01b81526001600160a01b03821660048201526024016109ed565b308054908290556040516001600160a01b0380841691908316907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a35050565b6032546001600160a01b03163314801590610bd65750333014155b15610bf6576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610c1d57604051639b15e16f60e01b815260040160405180910390fd5b306001600160a01b03821603610c46576040516375b4d24760e01b815260040160405180910390fd5b6032546001600160a01b0390811690821603610c7557604051638a95d3fb60e01b815260040160405180910390fd5b60328054908290556040516001600160a01b0391821691831690829030907ff2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd490600090a45050565b6032546000906001600160a01b03163b15610d4c57603254604051630b135d3f60e11b81526001600160a01b0390911690631626ba7e90610d049086908690600401613358565b602060405180830381865afa158015610d21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d459190613371565b9050610d84565b610d5683836120c8565b6032546001600160a01b03918216911603610d795750630b135d3f60e11b610d84565b506001600160e01b03195b92915050565b600060016001600160a01b03831614801590610d845750506001600160a01b0390811660009081526020819052604090205416151590565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e0f57604051635dac3db760e11b81523360048201526024016109ed565b610e1984846120ec565b9050610e24826122dd565b9392505050565b60003360011480610e525750336000908152602081905260409020546001600160a01b0316155b15610e72576040516321ac7c5f60e01b81523360048201526024016109ed565b610e7f858585855a612328565b90508015610ef6577f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da3386868686604051610ebe9594939291906133c6565b60405180910390a160405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a2610f22565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024016000604051808303818588803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b5050505050565b6032546001600160a01b03163314610fd75760405163d4ed9a1760e01b81523360048201526024016109ed565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050505050565b6000606061107086868686610e2b565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060007fda033865d68bf4a40a5a7cb4159a99e33dba8569e65ea3e38222eb12d9e66eee60001b856000015186604001518760600151805190602001208860200151896080015189600001518a602001518b604001518c606001518d608001518d6040516020016111139c9b9a99989796959493929190613411565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b611193604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040517fff0000000000000000000000000000000000000000000000000000000000000093841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509392505050565b6111f861242f565b6001600160a01b038116158061121757506001600160a01b0381166001145b156112405760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b0381811660009081526020819052604090205416156112845760405163b29d459560e01b81526001600160a01b03821660048201526024016109ed565b600060208181527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b0385811680865260408087208054939094166001600160a01b03199384161790935560019095528254168417909155519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440910160405180910390a150565b600060026031540361133b57604051637465d9d160e01b815260040160405180910390fd5b600260315560005a6001600090815260336020527f10f6f77027d502f219862b0303542eb5dd005b06fa23ff4d1775aaa45bbf94778054929350909182916113959189918991908561138c836134a0565b91905055611096565b80516020820120925090506113aa8286611c99565b506113d9603f60068860800151901b6113c391906134b9565b60808801516113d4906109c46134db565b612451565b6113e5906101f46134db565b5a1015611444575a611416603f60068960800151901b61140591906134b9565b60808901516113d4906109c46134db565b611422906101f46134db565b604051633b4daac960e01b8152600481019290925260248201526044016109ed565b61148486600001518760400151886060015189602001518960200151600014611471578a60800151612328565b6109c45a61147f91906134ee565b612328565b92508215801561149657506080860151155b80156114a457506020850151155b156114dd5760808601516020860151604051631061f87f60e31b81526004810192909252602482015283151560448201526064016109ed565b60008560200151600014611545576115145a6114f990856134ee565b8751602089015160408a015160608b015160808c0151612467565b905080827f3fd74c38c9f1b6f0499c6d0128fbf77a796dbacc7eda0369b13006dc977bb56b60405160405180910390a35b50506001603155509392505050565b6110588686868686866109a2565b61099c84848484610953565b6000836000036115c05760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420746f6b656e4761735072696365466163746f72000000000060448201526064016109ed565b60005a905060006001600160a01b038416156115dc57836115de565b325b90506001600160a01b0385166116615760003a88106115fd573a6115ff565b875b6116098a8c6134db565b6116139190613501565b9050600080600080600085875af190508061165a5760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b50506116c9565b6000868861166f8b8d6134db565b6116799190613501565b61168391906134b9565b9050611690868383612592565b6116c75760405163190eecf360e31b81526001600160a01b03808816600483015283166024820152604481018290526064016109ed565b505b5a82039250826040516020016116e191815260200190565b60408051601f198184030181529082905262461bcd60e51b82526109ed91600401613005565b6032546001600160a01b031633146117345760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b03821661175b576040516309293b1960e41b815260040160405180910390fd5b600080600080600085875af19050806117a05760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b505050565b6000806040518060a001604052808f6001600160a01b031681526020018b60018111156117d4576117d461338e565b81526020018e81526020018d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081018b90526040805160a0810182528b81529182018a905281018890526001600160a01b0380881660608301528616608082015290915061185d828286611096565b80519060200120925050509c9b505050505050505050505050565b6032546001600160a01b031633146118a55760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b0382166118cc576040516309293b1960e41b815260040160405180910390fd5b6118d7838383612592565b6117a05760405163190eecf360e31b81526001600160a01b03808516600483015283166024820152604481018290526064016109ed565b604051631aab3f0d60e11b8152306004820152600060248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044015b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190613518565b905090565b6040516370a0823160e01b81523060048201526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401611960565b6000805a9050611a3e878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050505a612328565b611a5b57604051632b3f6d1160e21b815260040160405180910390fd5b5a604080519183036020830152016116e1565b606060008267ffffffffffffffff811115611a8b57611a8b612c56565b604051908082528060200260200182016040528015611ab4578160200160208202803683370190505b506001600160a01b0380861660009081526020819052604081205492945091165b6001600160a01b03811615801590611af757506001600160a01b038116600114155b8015611b0257508482105b15611b595780848381518110611b1a57611b1a6132fb565b6001600160a01b039283166020918202929092018101919091529181166000908152918290526040909120541681611b51816134a0565b925050611ad5565b908352919491935090915050565b611b6f61242f565b6001600160a01b0381161580611b8e57506001600160a01b0381166001145b15611bb75760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b03828116600090815260208190526040902054811690821614611c1f576001600160a01b0382811660008181526020819052604090819020549051633103525b60e21b815284841660048201529216602483015260448201526064016109ed565b6001600160a01b03818116600081815260208181526040808320805488871685528285208054919097166001600160a01b03199182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276910160405180910390a15050565b604181511015611ceb5760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207369676e617475726573206c656e6774680000000000000060448201526064016109ed565b600080600080611d0e856020810151604082015160419092015160ff1692909190565b9195509350915060ff8416600003611e535750816041821015611d55576040516338a245ff60e11b81526004810183905260006024820181905260448201526064016109ed565b6020828601810151865190918290611d6e9086906134db565b611d7891906134db565b1115611dab5785516040516338a245ff60e11b8152600481018590526024810183905260448101919091526064016109ed565b604051630b135d3f60e11b808252878501602001916001600160a01b03851690631626ba7e90611de1908c908690600401613358565b602060405180830381865afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e229190613371565b6001600160e01b03191614611e4c578060405163605d348960e01b81526004016109ed9190613005565b5050611ee6565b601e8460ff161115611ed657611ece611e6d600486613531565b8484611ec68a6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9291906126e3565b509050611ee6565b611ee2868585856126e3565b5090505b6032546001600160a01b03828116911614611058576032546040516310b5d43760e21b81526001600160a01b03808416600483015290911660248201526044016109ed565b611f3361242f565b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d454611f5e826127a7565b816001600160a01b0316816001600160a01b03167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c60405160405180910390a35050565b6032546001600160a01b031615611fce576040516393360fbf60e01b81523060048201526024016109ed565b6001600160a01b038216611ff557604051639b15e16f60e01b815260040160405180910390fd5b603280546001600160a01b0319166001600160a01b038416179055612019816127a7565b6120336000604051806020016040528060008152506127f2565b5050565b6000610f22848484611316565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061208857506032546001600160a01b03163314155b156120a8576040516332dbd3c760e11b81523360048201526024016109ed565b565b60008082516020840185875af16040513d6000823e81610fa3573d81fd5b60008060006120d785856128bc565b915091506120e481612901565b509392505050565b600036816120fd6060860186613311565b90925090508015612204576000612117600482848661354a565b61212091613574565b90506361a2b3b760e01b6001600160e01b0319821601612202576000808061214b856004818961354a565b81019061215891906135a4565b6001600160a01b03808416600090815260208190526040902054939650919450925016156121fe57604051631179c1f560e11b81526001600160a01b038416906322f383ea906121ae908c908c90600401613662565b6020604051808303816000875af11580156121cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f19190613518565b9650505050505050610d84565b5050505b505b600061225d856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506122ad612270610140880188613311565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085939250506120c89050565b6032546001600160a01b039081169116146122ce5760019350505050610d84565b50600095945050505050565b50565b80156122da5760405133906000199083906000818181858888f193505050503d806000811461099c576040519150601f19603f3d011682016040523d82523d6000602084013e61099c565b6000600183600181111561233e5761233e61338e565b03612356576000808551602087018986f49050612366565b600080855160208701888a87f190505b80156123cb578360405161237a919061377b565b604051809103902085876001600160a01b03167f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee86866040516123be929190613797565b60405180910390a4612426565b836040516123d9919061377b565b604051809103902085876001600160a01b03167f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a868660405161241d929190613797565b60405180910390a45b95945050505050565b3330146120a8576040516301478e3360e21b81523360048201526024016109ed565b60008183116124605781610e24565b5090919050565b60008360000361248a5760405163653f35a360e01b815260040160405180910390fd5b60006001600160a01b038316156124a157826124a3565b325b90506001600160a01b038416612523573a86106124c0573a6124c2565b855b6124cc888a6134db565b6124d69190613501565b9150600080600080600086865af190508061251d5760405163190eecf360e31b8152600060048201526001600160a01b0383166024820152604481018490526064016109ed565b50612587565b848661252f898b6134db565b6125399190613501565b61254391906134b9565b9150612550848284612592565b6125875760405163190eecf360e31b81526001600160a01b03808616600483015282166024820152604481018390526064016109ed565b509695505050505050565b60006001600160a01b0384166125ea5760405162461bcd60e51b815260206004820152601d60248201527f746f6b656e2063616e206e6f74206265207a65726f206164647265737300000060448201526064016109ed565b6000846001600160a01b03163b116126445760405162461bcd60e51b815260206004820152601c60248201527f746f6b656e20636f6e747261637420646f65736e27742065786973740000000060448201526064016109ed565b604080516001600160a01b03851660248201526044808201859052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b178152825160009182896127105a03f13d80156126c657602081146126ce57600093506126d9565b8193506126d9565b600051158215171593505b5050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561271a575060009050600361279e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561276e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127975760006001925092505061279e565b9150600090505b94509492505050565b6001600160a01b0381166127ce5760405163dd449f5f60e01b815260040160405180910390fd5b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d455565b600160009081526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d546001600160a01b0316156128455760405163df8cc4e360e01b815260040160405180910390fd5b600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556001600160a01b038216156120335761289f8260008360015a612328565b6120335760405163032e3a3960e51b815260040160405180910390fd5b60008082516041036128f25760208301516040840151606085015160001a6128e6878285856126e3565b945094505050506128fa565b506000905060025b9250929050565b60008160048111156129155761291561338e565b0361291d5750565b60018160048111156129315761293161338e565b0361297e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109ed565b60028160048111156129925761299261338e565b036129df5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109ed565b60038160048111156129f3576129f361338e565b036122da5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109ed565b6001600160a01b03811681146122da57600080fd5b8035612a6b81612a4b565b919050565b60008083601f840112612a8257600080fd5b50813567ffffffffffffffff811115612a9a57600080fd5b6020830191508360208285010111156128fa57600080fd5b60008060008060608587031215612ac857600080fd5b8435612ad381612a4b565b935060208501359250604085013567ffffffffffffffff811115612af657600080fd5b612b0287828801612a70565b95989497509550505050565b60008083601f840112612b2057600080fd5b50813567ffffffffffffffff811115612b3857600080fd5b6020830191508360208260051b85010111156128fa57600080fd5b60008060008060008060608789031215612b6c57600080fd5b863567ffffffffffffffff80821115612b8457600080fd5b612b908a838b01612b0e565b90985096506020890135915080821115612ba957600080fd5b612bb58a838b01612b0e565b90965094506040890135915080821115612bce57600080fd5b50612bdb89828a01612b0e565b979a9699509497509295939492505050565b6001600160e01b0319811681146122da57600080fd5b600060208284031215612c1557600080fd5b8135610e2481612bed565b600060208284031215612c3257600080fd5b8135610e2481612a4b565b600060208284031215612c4f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612c8f57612c8f612c56565b60405290565b600082601f830112612ca657600080fd5b813567ffffffffffffffff80821115612cc157612cc1612c56565b604051601f8301601f19908116603f01168101908282118183101715612ce957612ce9612c56565b81604052838152866020858801011115612d0257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612d3557600080fd5b82359150602083013567ffffffffffffffff811115612d5357600080fd5b612d5f85828601612c95565b9150509250929050565b600080600060608486031215612d7e57600080fd5b833567ffffffffffffffff811115612d9557600080fd5b84016101608187031215612da857600080fd5b95602085013595506040909401359392505050565b803560028110612a6b57600080fd5b60008060008060808587031215612de257600080fd5b8435612ded81612a4b565b935060208501359250604085013567ffffffffffffffff811115612e1057600080fd5b612e1c87828801612c95565b925050612e2b60608601612dbd565b905092959194509250565b60008060408385031215612e4957600080fd5b8235612e5481612a4b565b946020939093013593505050565b60005b83811015612e7d578181015183820152602001612e65565b50506000910152565b60008151808452612e9e816020860160208601612e62565b601f01601f19169290920160200192915050565b8215158152604060208201526000610f226040830184612e86565b600060a08284031215612edf57600080fd5b612ee7612c6c565b90508135612ef481612a4b565b8152612f0260208301612dbd565b602082015260408201356040820152606082013567ffffffffffffffff811115612f2b57600080fd5b612f3784828501612c95565b6060830152506080820135608082015292915050565b600060a08284031215612f5f57600080fd5b612f67612c6c565b90508135815260208201356020820152604082013560408201526060820135612f8f81612a4b565b60608201526080820135612fa281612a4b565b608082015292915050565b600080600060e08486031215612fc257600080fd5b833567ffffffffffffffff811115612fd957600080fd5b612fe586828701612ecd565b935050612ff58560208601612f4d565b915060c084013590509250925092565b602081526000610e246020830184612e86565b600080600060e0848603121561302d57600080fd5b833567ffffffffffffffff8082111561304557600080fd5b61305187838801612ecd565b94506130608760208801612f4d565b935060c086013591508082111561307657600080fd5b5061308386828701612c95565b9150509250925092565b60008060008060008060c087890312156130a657600080fd5b8635955060208701359450604087013593506060870135925060808701356130cd81612a4b565b915060a08701356130dd81612a4b565b809150509295509295509295565b6000806000806000806000806000806000806101608d8f03121561310e57600080fd5b6131188d35612a4b565b8c359b5060208d01359a5067ffffffffffffffff60408e0135111561313c57600080fd5b61314c8e60408f01358f01612a70565b909a50985061315d60608e01612dbd565b975060808d0135965060a08d0135955060c08d0135945060e08d013593506101008d013561318a81612a4b565b92506131996101208e01612a60565b91506101408d013590509295989b509295989b509295989b565b6000806000606084860312156131c857600080fd5b83356131d381612a4b565b925060208401356131e381612a4b565b929592945050506040919091013590565b60008060008060006080868803121561320c57600080fd5b853561321781612a4b565b945060208601359350604086013567ffffffffffffffff81111561323a57600080fd5b61324688828901612a70565b9094509250613259905060608701612dbd565b90509295509295909350565b604080825283519082018190526000906020906060840190828701845b828110156132a75781516001600160a01b031684529284019290840190600101613282565b5050506001600160a01b039490941692019190915250919050565b600080604083850312156132d557600080fd5b82356132e081612a4b565b915060208301356132f081612a4b565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332857600080fd5b83018035915067ffffffffffffffff82111561334357600080fd5b6020019150368190038213156128fa57600080fd5b828152604060208201526000610f226040830184612e86565b60006020828403121561338357600080fd5b8151610e2481612bed565b634e487b7160e01b600052602160045260246000fd5b600281106133c257634e487b7160e01b600052602160045260246000fd5b9052565b60006001600160a01b03808816835280871660208401525084604083015260a060608301526133f860a0830185612e86565b905061340760808301846133a4565b9695505050505050565b6000610180820190508d82526001600160a01b03808e1660208401528c60408401528b6060840152613446608084018c6133a4565b8960a08401528860c08401528760e08401528661010084015280861661012084015280851661014084015250826101608301529d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016134b2576134b261348a565b5060010190565b6000826134d657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d8457610d8461348a565b81810381811115610d8457610d8461348a565b8082028115828204841417610d8457610d8461348a565b60006020828403121561352a57600080fd5b5051919050565b60ff8281168282160390811115610d8457610d8461348a565b6000808585111561355a57600080fd5b8386111561356757600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561359c5780818660040360031b1b83161692505b505092915050565b6000806000606084860312156135b957600080fd5b83356135c481612a4b565b925060208401359150604084013567ffffffffffffffff8111156135e757600080fd5b61308386828701612c95565b6000808335601e1984360301811261360a57600080fd5b830160208101925035905067ffffffffffffffff81111561362a57600080fd5b8036038213156128fa57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526136836040820161367685612a60565b6001600160a01b03169052565b60208301356060820152600061369c60408501856135f3565b6101608060808601526136b46101a086018385613639565b92506136c360608801886135f3565b9250603f19808786030160a08801526136dd858584613639565b9450608089013560c088015260a089013560e0880152610100935060c089013584880152610120915060e089013582880152610140848a013581890152613726838b018b6135f3565b9550925081888703018489015261373e868685613639565b955061374c818b018b6135f3565b955093505080878603016101808801525050613769838383613639565b93505050508260208301529392505050565b6000825161378d818460208701612e62565b9190910192915050565b604081016137a582856133a4565b826020830152939250505056fea26469706673582212206d38de10695d463253620f7bec76e681851e44f22392d864735b57ecaf843b1d64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v1.0.0.json b/packages/common/abis/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v1.0.0.json deleted file mode 100644 index 454215192..000000000 --- a/packages/common/abis/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v1.0.0.json +++ /dev/null @@ -1,298 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "EcdsaOwnershipRegistryModule", - "sourceName": "contracts/smart-account/modules/EcdsaOwnershipRegistryModule.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "AlreadyInitedForSmartAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "NoOwnerRegisteredForSmartAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NotEOA", - "type": "error" - }, - { - "inputs": [], - "name": "WrongSignatureLength", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressNotAllowedAsOwner", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "smartAccount", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "oldOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "NAME", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "getOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "eoaOwner", - "type": "address" - } - ], - "name": "initForSmartAccount", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "moduleSignature", - "type": "bytes" - } - ], - "name": "isValidSignature", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "moduleSignature", - "type": "bytes" - }, - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "isValidSignatureForAddress", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - } - ], - "name": "validateUserOp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50610aed806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063f2fde38b11610076578063fa5441611161005b578063fa54416114610195578063ffa1ad74146101a8578063fff35b72146101e457600080fd5b8063f2fde38b1461016f578063f44c339d1461018257600080fd5b80631626ba7e146100a85780632ede3bc0146100f1578063715018a61461011c578063a3f4df7e14610126575b600080fd5b6100bb6100b636600461089b565b610205565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b6101046100ff3660046108f7565b61021b565b6040516001600160a01b0390911681526020016100e8565b6101246102bf565b005b6101626040518060400160405280601f81526020017f4543445341204f776e657273686970205265676973747279204d6f64756c650081525081565b6040516100e89190610914565b61012461017d3660046108f7565b6102cc565b6100bb610190366004610962565b61032b565b6101046101a33660046108f7565b610375565b6101626040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6101f76101f23660046109bd565b6103bb565b6040519081526020016100e8565b600061021283833361032b565b90505b92915050565b336000908152602081905260408120546001600160a01b03161561025957604051632c4dfb7d60e21b81523360048201526024015b60405180910390fd5b6001600160a01b038216610280576040516307e179e960e31b815260040160405180910390fd5b50336000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790553090565b6102ca33600061040c565b565b803b156102f7576040516377817ac360e01b81526001600160a01b0382166004820152602401610250565b6001600160a01b03811661031e576040516307e179e960e31b815260040160405180910390fd5b610328338261040c565b50565b600061033884848461047d565b1561034b5750630b135d3f60e11b61036e565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b6001600160a01b038082166000908152602081905260408120549091168061021557604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6000806103cc610140850185610a08565b8101906103d99190610a4f565b5090506103f383826103ee60208801886108f7565b61047d565b15610402576000915050610215565b5060019392505050565b6001600160a01b03808316600081815260208190526040808220805486861673ffffffffffffffffffffffffffffffffffffffff19821681179092559151919094169392849290917fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec9190a4505050565b6001600160a01b03808216600090815260208190526040812054909116806104c357604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6041845110156104e657604051632bb1a9c560e11b815260040160405180910390fd5b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c869052603c812061051f9086610581565b9050806001600160a01b0316826001600160a01b0316036105455760019250505061036e565b61054f8686610581565b9050806001600160a01b0316826001600160a01b0316036105755760019250505061036e565b50600095945050505050565b600080600061059085856105a5565b9150915061059d816105ea565b509392505050565b60008082516041036105db5760208301516040840151606085015160001a6105cf87828585610734565b945094505050506105e3565b506000905060025b9250929050565b60008160048111156105fe576105fe610aa1565b036106065750565b600181600481111561061a5761061a610aa1565b036106675760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610250565b600281600481111561067b5761067b610aa1565b036106c85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610250565b60038160048111156106dc576106dc610aa1565b036103285760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610250565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561076b57506000905060036107ef565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156107bf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166107e8576000600192509250506107ef565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261081f57600080fd5b813567ffffffffffffffff8082111561083a5761083a6107f8565b604051601f8301601f19908116603f01168101908282118183101715610862576108626107f8565b8160405283815286602085880101111561087b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156108ae57600080fd5b82359150602083013567ffffffffffffffff8111156108cc57600080fd5b6108d88582860161080e565b9150509250929050565b6001600160a01b038116811461032857600080fd5b60006020828403121561090957600080fd5b813561036e816108e2565b600060208083528351808285015260005b8181101561094157858101830151858201604001528201610925565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060006060848603121561097757600080fd5b83359250602084013567ffffffffffffffff81111561099557600080fd5b6109a18682870161080e565b92505060408401356109b2816108e2565b809150509250925092565b600080604083850312156109d057600080fd5b823567ffffffffffffffff8111156109e757600080fd5b830161016081860312156109fa57600080fd5b946020939093013593505050565b6000808335601e19843603018112610a1f57600080fd5b83018035915067ffffffffffffffff821115610a3a57600080fd5b6020019150368190038213156105e357600080fd5b60008060408385031215610a6257600080fd5b823567ffffffffffffffff811115610a7957600080fd5b610a858582860161080e565b9250506020830135610a96816108e2565b809150509250929050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212200f64d9f85c9789441febe939ee2ec56eca850156ea304b5eabd0856fee5e186e64736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c8063f2fde38b11610076578063fa5441611161005b578063fa54416114610195578063ffa1ad74146101a8578063fff35b72146101e457600080fd5b8063f2fde38b1461016f578063f44c339d1461018257600080fd5b80631626ba7e146100a85780632ede3bc0146100f1578063715018a61461011c578063a3f4df7e14610126575b600080fd5b6100bb6100b636600461089b565b610205565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b6101046100ff3660046108f7565b61021b565b6040516001600160a01b0390911681526020016100e8565b6101246102bf565b005b6101626040518060400160405280601f81526020017f4543445341204f776e657273686970205265676973747279204d6f64756c650081525081565b6040516100e89190610914565b61012461017d3660046108f7565b6102cc565b6100bb610190366004610962565b61032b565b6101046101a33660046108f7565b610375565b6101626040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6101f76101f23660046109bd565b6103bb565b6040519081526020016100e8565b600061021283833361032b565b90505b92915050565b336000908152602081905260408120546001600160a01b03161561025957604051632c4dfb7d60e21b81523360048201526024015b60405180910390fd5b6001600160a01b038216610280576040516307e179e960e31b815260040160405180910390fd5b50336000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790553090565b6102ca33600061040c565b565b803b156102f7576040516377817ac360e01b81526001600160a01b0382166004820152602401610250565b6001600160a01b03811661031e576040516307e179e960e31b815260040160405180910390fd5b610328338261040c565b50565b600061033884848461047d565b1561034b5750630b135d3f60e11b61036e565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b6001600160a01b038082166000908152602081905260408120549091168061021557604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6000806103cc610140850185610a08565b8101906103d99190610a4f565b5090506103f383826103ee60208801886108f7565b61047d565b15610402576000915050610215565b5060019392505050565b6001600160a01b03808316600081815260208190526040808220805486861673ffffffffffffffffffffffffffffffffffffffff19821681179092559151919094169392849290917fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec9190a4505050565b6001600160a01b03808216600090815260208190526040812054909116806104c357604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6041845110156104e657604051632bb1a9c560e11b815260040160405180910390fd5b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c869052603c812061051f9086610581565b9050806001600160a01b0316826001600160a01b0316036105455760019250505061036e565b61054f8686610581565b9050806001600160a01b0316826001600160a01b0316036105755760019250505061036e565b50600095945050505050565b600080600061059085856105a5565b9150915061059d816105ea565b509392505050565b60008082516041036105db5760208301516040840151606085015160001a6105cf87828585610734565b945094505050506105e3565b506000905060025b9250929050565b60008160048111156105fe576105fe610aa1565b036106065750565b600181600481111561061a5761061a610aa1565b036106675760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610250565b600281600481111561067b5761067b610aa1565b036106c85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610250565b60038160048111156106dc576106dc610aa1565b036103285760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610250565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561076b57506000905060036107ef565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156107bf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166107e8576000600192509250506107ef565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261081f57600080fd5b813567ffffffffffffffff8082111561083a5761083a6107f8565b604051601f8301601f19908116603f01168101908282118183101715610862576108626107f8565b8160405283815286602085880101111561087b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156108ae57600080fd5b82359150602083013567ffffffffffffffff8111156108cc57600080fd5b6108d88582860161080e565b9150509250929050565b6001600160a01b038116811461032857600080fd5b60006020828403121561090957600080fd5b813561036e816108e2565b600060208083528351808285015260005b8181101561094157858101830151858201604001528201610925565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060006060848603121561097757600080fd5b83359250602084013567ffffffffffffffff81111561099557600080fd5b6109a18682870161080e565b92505060408401356109b2816108e2565b809150509250925092565b600080604083850312156109d057600080fd5b823567ffffffffffffffff8111156109e757600080fd5b830161016081860312156109fa57600080fd5b946020939093013593505050565b6000808335601e19843603018112610a1f57600080fd5b83018035915067ffffffffffffffff821115610a3a57600080fd5b6020019150368190038213156105e357600080fd5b60008060408385031215610a6257600080fd5b823567ffffffffffffffff811115610a7957600080fd5b610a858582860161080e565b9250506020830135610a96816108e2565b809150509250929050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212200f64d9f85c9789441febe939ee2ec56eca850156ea304b5eabd0856fee5e186e64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} - } - \ No newline at end of file diff --git a/packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json b/packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json deleted file mode 100644 index 10709b249..000000000 --- a/packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json +++ /dev/null @@ -1,298 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "MultichainECDSAValidator", - "sourceName": "contracts/smart-account/modules/MultichainECDSAValidator.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "AlreadyInitedForSmartAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "NoOwnerRegisteredForSmartAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NotEOA", - "type": "error" - }, - { - "inputs": [], - "name": "WrongSignatureLength", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressNotAllowedAsOwner", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "smartAccount", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "oldOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "NAME", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "getOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "eoaOwner", - "type": "address" - } - ], - "name": "initForSmartAccount", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "moduleSignature", - "type": "bytes" - } - ], - "name": "isValidSignature", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "moduleSignature", - "type": "bytes" - }, - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "isValidSignatureForAddress", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - } - ], - "name": "validateUserOp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x6080806040523461001657610b9b908161001c8239f35b600080fdfe6040608081526004908136101561001557600080fd5b6000803560e01c80631626ba7e1461040a5780632ede3bc014610388578063715018a614610318578063a3f4df7e146102c3578063f2fde38b1461020d578063f44c339d14610185578063fa5441611461012d578063ffa1ad74146100d45763fff35b721461008357600080fd5b346100cd576003199082823601126100cd5783359167ffffffffffffffff83116100d0576101609083360301126100cd57506020926100c691602435910161085d565b9051908152f35b80fd5b5080fd5b5090346100d057816003193601126100d0578051610129916100f58261044a565b600582527f302e322e300000000000000000000000000000000000000000000000000000006020830152519182918261053f565b0390f35b5082346100d05760203660031901126100d0576001600160a01b038381610152610506565b16938481528060205220541691821561016f576020838551908152f35b8351633d3fff5360e21b81529182015260249150fd5b5091346102095760603660031901126102095760243567ffffffffffffffff8111610205576101b790369083016104ba565b90604435936001600160a01b03851685036100cd5750926101db916020943561056b565b90517fffffffff000000000000000000000000000000000000000000000000000000009091168152f35b8380fd5b8280fd5b5091903461020957602036600319011261020957610229610506565b803b6102a4576001600160a01b0380911692831561029657503384528360205281842054169083208273ffffffffffffffffffffffffffffffffffffffff19825416179055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8480a480f35b82516307e179e960e31b8152fd5b826001600160a01b0360249351926377817ac360e01b84521690820152fd5b5090346100d057816003193601126100d0578051610129916102e48261044a565b601f82527f4543445341204f776e657273686970205265676973747279204d6f64756c65006020830152519182918261053f565b50809134610385578160031936011261038557338252816020526001600160a01b03818320541690822073ffffffffffffffffffffffffffffffffffffffff198154169055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a480f35b50fd5b509134610209576020366003190112610209576103a3610506565b338452836020526001600160a01b03908184862054166103f45716908115610296575081602093338152808552209073ffffffffffffffffffffffffffffffffffffffff1982541617905551308152f35b8351632c4dfb7d60e21b81523381850152602490fd5b50346100cd57816003193601126100cd576024359067ffffffffffffffff82116100cd57506020926104426101db92369083016104ba565b33913561056b565b6040810190811067ffffffffffffffff82111761046657604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761046657604052565b67ffffffffffffffff811161046657601f01601f191660200190565b81601f82011215610501578035906104d18261049e565b926104df604051948561047c565b8284526020838301011161050157816000926020809301838601378301015290565b600080fd5b600435906001600160a01b038216820361050157565b60005b83811061052f5750506000910152565b818101518382015260200161051f565b6040916020825261055f815180928160208601526020868601910161051c565b601f01601f1916010190565b9061057692916105a9565b61059e577fffffffff0000000000000000000000000000000000000000000000000000000090565b630b135d3f60e11b90565b916001600160a01b0380911691600093838552846020528260408620541693841561065757506041825110610645577f19457468657265756d205369676e6564204d6573736167653a0a333200000000855280601c528261061861061084603c8920610789565b91909161066f565b16841461063b5761062c9161061091610789565b16146106355790565b50600190565b5050505050600190565b604051632bb1a9c560e11b8152600490fd5b60249060405190633d3fff5360e21b82526004820152fd5b600581101561077357806106805750565b600181036106cd5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b6002810361071a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b60031461072357565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b634e487b7160e01b600052602160045260246000fd5b9060418151146000146107b7576107b3916020820151906060604084015193015160001a906107c1565b9091565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831161083e5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156108315781516001600160a01b03811615610635579190565b50604051903d90823e3d90fd5b50505050600090600390565b519065ffffffffffff8216820361050157565b919091610140810135601e19823603018112156105015781019182359267ffffffffffffffff9081851161050157602092838201958036038713610501578201604096878483031261050157359084821161050157879186806108c49301918601016104ba565b920135946001600160a01b0395868116036105015735966041835114610b43578251830160a0848783019203126105015761090086850161084a565b9061090c89860161084a565b9060608601519160808701518881116105015787019782603f8a011215610501578989015197818911610466578a998d9960059a818c1b9161095482519e8f9085019061047c565b8d528d8d019183010191868311610501578f8e9101915b838310610b33575050505060a081015190828211610501570183603f8201121561050157808b01518d9461099e8261049e565b956109ab8151978861047c565b8287528284010111610501576109c6918e8d8701910161051c565b8b51908a8201927fffffffffffff000000000000000000000000000000000000000000000000000090818860d01b16855260d01b1696876026840152602c830152602c8252606082019082821090821117610466578c52519020986000995b88518b1015610a84578a881b89018a0151908c600083831015610a7757505060005289528a6000205b996000198114610a615760010199610a25565b634e487b7160e01b600052601160045260246000fd5b91909282528b5220610a4e565b91965094999a93985081965096919603610af05750610aa8949596975016916105a9565b15610ae95779ffffffffffff00000000000000000000000000000000000000009065ffffffffffff90818116610ae257505b60a01b161790565b9050610ada565b5050600190565b60649089519062461bcd60e51b82526004820152600e60248201527f496e76616c696420557365724f700000000000000000000000000000000000006044820152fd5b82518152918101918e910161096b565b94925095909250610b56945016916105a9565b15610b6057600090565b60019056fea26469706673582212202a3242d73a2c92fd929c32924b5f964b80434c765985e101142ea4635452e6a664736f6c63430008110033", - "deployedBytecode": "0x6040608081526004908136101561001557600080fd5b6000803560e01c80631626ba7e1461040a5780632ede3bc014610388578063715018a614610318578063a3f4df7e146102c3578063f2fde38b1461020d578063f44c339d14610185578063fa5441611461012d578063ffa1ad74146100d45763fff35b721461008357600080fd5b346100cd576003199082823601126100cd5783359167ffffffffffffffff83116100d0576101609083360301126100cd57506020926100c691602435910161085d565b9051908152f35b80fd5b5080fd5b5090346100d057816003193601126100d0578051610129916100f58261044a565b600582527f302e322e300000000000000000000000000000000000000000000000000000006020830152519182918261053f565b0390f35b5082346100d05760203660031901126100d0576001600160a01b038381610152610506565b16938481528060205220541691821561016f576020838551908152f35b8351633d3fff5360e21b81529182015260249150fd5b5091346102095760603660031901126102095760243567ffffffffffffffff8111610205576101b790369083016104ba565b90604435936001600160a01b03851685036100cd5750926101db916020943561056b565b90517fffffffff000000000000000000000000000000000000000000000000000000009091168152f35b8380fd5b8280fd5b5091903461020957602036600319011261020957610229610506565b803b6102a4576001600160a01b0380911692831561029657503384528360205281842054169083208273ffffffffffffffffffffffffffffffffffffffff19825416179055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8480a480f35b82516307e179e960e31b8152fd5b826001600160a01b0360249351926377817ac360e01b84521690820152fd5b5090346100d057816003193601126100d0578051610129916102e48261044a565b601f82527f4543445341204f776e657273686970205265676973747279204d6f64756c65006020830152519182918261053f565b50809134610385578160031936011261038557338252816020526001600160a01b03818320541690822073ffffffffffffffffffffffffffffffffffffffff198154169055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a480f35b50fd5b509134610209576020366003190112610209576103a3610506565b338452836020526001600160a01b03908184862054166103f45716908115610296575081602093338152808552209073ffffffffffffffffffffffffffffffffffffffff1982541617905551308152f35b8351632c4dfb7d60e21b81523381850152602490fd5b50346100cd57816003193601126100cd576024359067ffffffffffffffff82116100cd57506020926104426101db92369083016104ba565b33913561056b565b6040810190811067ffffffffffffffff82111761046657604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761046657604052565b67ffffffffffffffff811161046657601f01601f191660200190565b81601f82011215610501578035906104d18261049e565b926104df604051948561047c565b8284526020838301011161050157816000926020809301838601378301015290565b600080fd5b600435906001600160a01b038216820361050157565b60005b83811061052f5750506000910152565b818101518382015260200161051f565b6040916020825261055f815180928160208601526020868601910161051c565b601f01601f1916010190565b9061057692916105a9565b61059e577fffffffff0000000000000000000000000000000000000000000000000000000090565b630b135d3f60e11b90565b916001600160a01b0380911691600093838552846020528260408620541693841561065757506041825110610645577f19457468657265756d205369676e6564204d6573736167653a0a333200000000855280601c528261061861061084603c8920610789565b91909161066f565b16841461063b5761062c9161061091610789565b16146106355790565b50600190565b5050505050600190565b604051632bb1a9c560e11b8152600490fd5b60249060405190633d3fff5360e21b82526004820152fd5b600581101561077357806106805750565b600181036106cd5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b6002810361071a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b60031461072357565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b634e487b7160e01b600052602160045260246000fd5b9060418151146000146107b7576107b3916020820151906060604084015193015160001a906107c1565b9091565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831161083e5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156108315781516001600160a01b03811615610635579190565b50604051903d90823e3d90fd5b50505050600090600390565b519065ffffffffffff8216820361050157565b919091610140810135601e19823603018112156105015781019182359267ffffffffffffffff9081851161050157602092838201958036038713610501578201604096878483031261050157359084821161050157879186806108c49301918601016104ba565b920135946001600160a01b0395868116036105015735966041835114610b43578251830160a0848783019203126105015761090086850161084a565b9061090c89860161084a565b9060608601519160808701518881116105015787019782603f8a011215610501578989015197818911610466578a998d9960059a818c1b9161095482519e8f9085019061047c565b8d528d8d019183010191868311610501578f8e9101915b838310610b33575050505060a081015190828211610501570183603f8201121561050157808b01518d9461099e8261049e565b956109ab8151978861047c565b8287528284010111610501576109c6918e8d8701910161051c565b8b51908a8201927fffffffffffff000000000000000000000000000000000000000000000000000090818860d01b16855260d01b1696876026840152602c830152602c8252606082019082821090821117610466578c52519020986000995b88518b1015610a84578a881b89018a0151908c600083831015610a7757505060005289528a6000205b996000198114610a615760010199610a25565b634e487b7160e01b600052601160045260246000fd5b91909282528b5220610a4e565b91965094999a93985081965096919603610af05750610aa8949596975016916105a9565b15610ae95779ffffffffffff00000000000000000000000000000000000000009065ffffffffffff90818116610ae257505b60a01b161790565b9050610ada565b5050600190565b60649089519062461bcd60e51b82526004820152600e60248201527f496e76616c696420557365724f700000000000000000000000000000000000006044820152fd5b82518152918101918e910161096b565b94925095909250610b56945016916105a9565b15610b6057600090565b60019056fea26469706673582212202a3242d73a2c92fd929c32924b5f964b80434c765985e101142ea4635452e6a664736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} - } - \ No newline at end of file diff --git a/packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json b/packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json deleted file mode 100644 index 317e05a87..000000000 --- a/packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccountFactory", - "sourceName": "contracts/smart-account/factory/SmartAccountFactory.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_basicImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "initialAuthModule", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "initialAuthModule", - "type": "address" - } - ], - "name": "AccountCreationWithoutIndex", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "accountCreationCode", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "epAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - } - ], - "name": "addStake", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "basicImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - } - ], - "name": "deployAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "deployCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getAddressForCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimalHandler", - "outputs": [ - { - "internalType": "contract DefaultCallbackHandler", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "epAddress", - "type": "address" - } - ], - "name": "unlockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "epAddress", - "type": "address" - }, - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - } - ], - "name": "withdrawStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60c0346101445761171b906001600160401b0390601f38849003908101601f1916820190838211838310176100ea57808391604096879485528339810103126101445761006861005a602061005384610149565b9301610149565b6100633361015d565b61015d565b6001600160a01b03811615610100576080528151906104e690818301908111838210176100ea578291611235833903906000f080156100df5760a0525161109090816101a582396080518181816101ed015281816105a70152818161074601526107ef015260a05181818161039e0152610b7c0152f35b50513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b825162461bcd60e51b815260206004820152601d60248201527f696d706c656d656e746174696f6e2063616e6e6f74206265207a65726f0000006044820152606490fd5b600080fd5b51906001600160a01b038216820361014457565b600080546001600160a01b039283166001600160a01b03198216811783559216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fe60806040526004361015610013575b600080fd5b60003560e01c80632e7a1a831461010357806331c884df146100fa5780633b3cb143146100f157806345171159146100e85780634a1ce599146100df578063715018a6146100d6578063743b1e03146100cd5780638da5cb5b146100c4578063b36f9705146100bb578063daf0dfc8146100b2578063df20ffbc146100a95763f2fde38b146100a157600080fd5b61000e6108a6565b5061000e61076a565b5061000e610725565b5061000e6106a1565b5061000e610679565b5061000e610533565b5061000e6104cb565b5061000e61045f565b5061000e6103c2565b5061000e61037d565b5061000e61031d565b5061000e61018c565b6001600160a01b0381160361000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020838186019501011161000e57565b90606060031983011261000e576004356101648161010c565b916024359067ffffffffffffffff821161000e576101849160040161011d565b909160443590565b503461000e576102f66102dc6102d06101b16101a73661014b565b9392919091610b54565b6102c1610120916020926101c6848201610a8e565b90808252610bdb858301396040519461024a61025687610214888201956001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087610a9e565b0394610228601f19968781018b528a610a5f565b8781519101209260405192839189830195869091604092825260208201520190565b03858101835282610a5f565b519020945190206040517fff000000000000000000000000000000000000000000000000000000000000009481019485523060601b6bffffffffffffffffffffffff191660018601526015850195909552603584015291929182605585015b03908101835282610a5f565b5190206001600160a01b031690565b6001600160a01b031690565b6040516001600160a01b0390911681529081906020820190565b0390f35b60005b83811061030d5750506000910152565b81810151838201526020016102fd565b503461000e57600036600319011261000e5761036f60406101208151906103476020820183610a5f565b8082526020820190610cfb8239825193849260208452518092816020860152858501906102fa565b601f01601f19168101030190f35b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b506000604036600319011261045c576004356103dd8161010c565b816024359163ffffffff8316809303610458576001600160a01b0390610401610991565b169161040e8315156109e9565b823b1561045857602460405180948193621cb65b60e51b8352600483015234905af1801561044b575b61043f575080f35b61044890610a35565b80f35b610453610a81565b610437565b5080fd5b80fd5b503461000e576000602036600319011261045c57806001600160a01b036004356104888161010c565b610490610991565b1661049c8115156109e9565b803b156104c857819060046040518094819363bb9fe6bf60e01b83525af1801561044b5761043f575080f35b50fd5b503461000e5760008060031936011261045c576104e6610991565b806001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461000e57604036600319011261000e576004356105518161010c565b60243567ffffffffffffffff811161000e5761057190369060040161011d565b6101209161058160208401610a8e565b92808452610e1b60208501396105fe604051926105df846105d16001600160a01b0397887f0000000000000000000000000000000000000000000000000000000000000000169060208401610a9e565b03601f198101865285610a5f565b835160009460200185f092858416966105f9881515610b08565b610b54565b805183918161064c575b50506040519485946102f69416917f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf6579080a36001600160a01b031682526020820190565b8296945090602083920182855af193604051943d82873e1561067557935191936102f638610608565b3d85fd5b503461000e57600036600319011261000e5760206001600160a01b0360005416604051908152f35b503461000e576000604036600319011261045c576004356106c18161010c565b81602435916106cf8361010c565b6106d7610991565b6001600160a01b03809116926106ee8415156109e9565b833b156107215760249083604051958694859363611d2e7560e11b85521660048401525af1801561044b5761043f575080f35b8280fd5b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461000e5761077c6101a73661014b565b9081519160208082019384209260405193846107a78385830193849091604092825260208201520190565b03946107bb601f1996878101835282610a5f565b519020610120946107cd848701610a8e565b95808752610f3b8588013961081860405191826102b56001600160a01b03998a7f00000000000000000000000000000000000000000000000000000000000000001690898401610a9e565b8051906000940184f591848316610830811515610abc565b8194518061087d575b50604051965086956102f69516917f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f29080a46001600160a01b031682526020820190565b82978380939750865af194604051953d82883e156108a2579451939485949338610839565b3d86fd5b503461000e57602036600319011261000e576004356108c48161010c565b6108cc610991565b6001600160a01b0380911680156109265760009182548273ffffffffffffffffffffffffffffffffffffffff198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608490fd5b6001600160a01b036000541633036109a557565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156109f057565b60405162461bcd60e51b815260206004820152601260248201527f496e76616c6964204550206164647265737300000000000000000000000000006044820152606490fd5b67ffffffffffffffff8111610a4957604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a4957604052565b506040513d6000823e3d90fd5b90610a9c6040519283610a5f565b565b6020929190610ab48492828151948592016102fa565b019081520190565b15610ac357565b60405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606490fd5b15610b0f57565b60405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606490fd5b60a490610bd7929380604051958693631bc6fec760e11b60208601526001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016602487015216604485015260606064850152816084850152848401376000838284010152601f80199101168101036084810184520182610a5f565b9056fe6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033a2646970667358221220cc3855215776915d9c3562b4380fe9fbf7afb53b9434cabc4802d531f12df64364736f6c6343000811003360808060405234610016576104ca908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816223de291461031b57816301ffc9a71461029457508063150b7a021461023d578063a3f4df7e146101d6578063bc197c811461014c578063f23a6e61146100f25763ffa1ad741461007157600080fd5b346100ee57816003193601126100ee578051918183019083821067ffffffffffffffff8311176100db57506100d793508152600582527f312e302e300000000000000000000000000000000000000000000000000000006020830152519182918261041a565b0390f35b634e487b7160e01b815260418552602490fd5b5080fd5b5090346101495760a03660031901126101495761010d6103a1565b506101166103c9565b506084359067ffffffffffffffff8211610149575060209261013a913691016103ec565b50505163f23a6e6160e01b8152f35b80fd5b5090346101495760a0366003190112610149576101676103a1565b506101706103c9565b5067ffffffffffffffff906044358281116100ee576101929036908601610463565b50506064358281116100ee576101ab9036908601610463565b505060843591821161014957506020926101c7913691016103ec565b50505163bc197c8160e01b8152f35b50346100ee57816003193601126100ee578051918183019083821067ffffffffffffffff8311176100db57506100d793508152601882527f44656661756c742043616c6c6261636b2048616e646c657200000000000000006020830152519182918261041a565b509034610149576080366003190112610149576102586103a1565b506102616103c9565b506064359067ffffffffffffffff82116101495750602092610285913691016103ec565b505051630a85bd0160e11b8152f35b83908534610317576020366003190112610317573563ffffffff60e01b81168091036103175760209250630271189760e51b8114908115610306575b81156102f6575b81156102e5575b5015158152f35b6301ffc9a760e01b149050836102de565b6223de2960e01b811491506102d7565b630a85bd0160e11b811491506102d0565b8280fd5b8385346100ee5760c03660031901126100ee576103366103a1565b5061033f6103c9565b5060443573ffffffffffffffffffffffffffffffffffffffff8116036100ee5767ffffffffffffffff9060843582811161039d5761038090369083016103ec565b505060a43591821161031757610398913691016103ec565b505080f35b8380fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103c457565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103c457565b9181601f840112156103c45782359167ffffffffffffffff83116103c457602083818601950101116103c457565b6020808252825181830181905290939260005b82811061044f57505060409293506000838284010152601f8019910116010190565b81810186015184820160400152850161042d565b9181601f840112156103c45782359167ffffffffffffffff83116103c4576020808501948460051b0101116103c45756fea2646970667358221220e22ad453b03efac358b2f092a996c1bf999c6cba4b1e5c7d1e917139d697fca764736f6c63430008110033", - "deployedBytecode": "0x60806040526004361015610013575b600080fd5b60003560e01c80632e7a1a831461010357806331c884df146100fa5780633b3cb143146100f157806345171159146100e85780634a1ce599146100df578063715018a6146100d6578063743b1e03146100cd5780638da5cb5b146100c4578063b36f9705146100bb578063daf0dfc8146100b2578063df20ffbc146100a95763f2fde38b146100a157600080fd5b61000e6108a6565b5061000e61076a565b5061000e610725565b5061000e6106a1565b5061000e610679565b5061000e610533565b5061000e6104cb565b5061000e61045f565b5061000e6103c2565b5061000e61037d565b5061000e61031d565b5061000e61018c565b6001600160a01b0381160361000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020838186019501011161000e57565b90606060031983011261000e576004356101648161010c565b916024359067ffffffffffffffff821161000e576101849160040161011d565b909160443590565b503461000e576102f66102dc6102d06101b16101a73661014b565b9392919091610b54565b6102c1610120916020926101c6848201610a8e565b90808252610bdb858301396040519461024a61025687610214888201956001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087610a9e565b0394610228601f19968781018b528a610a5f565b8781519101209260405192839189830195869091604092825260208201520190565b03858101835282610a5f565b519020945190206040517fff000000000000000000000000000000000000000000000000000000000000009481019485523060601b6bffffffffffffffffffffffff191660018601526015850195909552603584015291929182605585015b03908101835282610a5f565b5190206001600160a01b031690565b6001600160a01b031690565b6040516001600160a01b0390911681529081906020820190565b0390f35b60005b83811061030d5750506000910152565b81810151838201526020016102fd565b503461000e57600036600319011261000e5761036f60406101208151906103476020820183610a5f565b8082526020820190610cfb8239825193849260208452518092816020860152858501906102fa565b601f01601f19168101030190f35b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b506000604036600319011261045c576004356103dd8161010c565b816024359163ffffffff8316809303610458576001600160a01b0390610401610991565b169161040e8315156109e9565b823b1561045857602460405180948193621cb65b60e51b8352600483015234905af1801561044b575b61043f575080f35b61044890610a35565b80f35b610453610a81565b610437565b5080fd5b80fd5b503461000e576000602036600319011261045c57806001600160a01b036004356104888161010c565b610490610991565b1661049c8115156109e9565b803b156104c857819060046040518094819363bb9fe6bf60e01b83525af1801561044b5761043f575080f35b50fd5b503461000e5760008060031936011261045c576104e6610991565b806001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461000e57604036600319011261000e576004356105518161010c565b60243567ffffffffffffffff811161000e5761057190369060040161011d565b6101209161058160208401610a8e565b92808452610e1b60208501396105fe604051926105df846105d16001600160a01b0397887f0000000000000000000000000000000000000000000000000000000000000000169060208401610a9e565b03601f198101865285610a5f565b835160009460200185f092858416966105f9881515610b08565b610b54565b805183918161064c575b50506040519485946102f69416917f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf6579080a36001600160a01b031682526020820190565b8296945090602083920182855af193604051943d82873e1561067557935191936102f638610608565b3d85fd5b503461000e57600036600319011261000e5760206001600160a01b0360005416604051908152f35b503461000e576000604036600319011261045c576004356106c18161010c565b81602435916106cf8361010c565b6106d7610991565b6001600160a01b03809116926106ee8415156109e9565b833b156107215760249083604051958694859363611d2e7560e11b85521660048401525af1801561044b5761043f575080f35b8280fd5b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461000e5761077c6101a73661014b565b9081519160208082019384209260405193846107a78385830193849091604092825260208201520190565b03946107bb601f1996878101835282610a5f565b519020610120946107cd848701610a8e565b95808752610f3b8588013961081860405191826102b56001600160a01b03998a7f00000000000000000000000000000000000000000000000000000000000000001690898401610a9e565b8051906000940184f591848316610830811515610abc565b8194518061087d575b50604051965086956102f69516917f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f29080a46001600160a01b031682526020820190565b82978380939750865af194604051953d82883e156108a2579451939485949338610839565b3d86fd5b503461000e57602036600319011261000e576004356108c48161010c565b6108cc610991565b6001600160a01b0380911680156109265760009182548273ffffffffffffffffffffffffffffffffffffffff198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608490fd5b6001600160a01b036000541633036109a557565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156109f057565b60405162461bcd60e51b815260206004820152601260248201527f496e76616c6964204550206164647265737300000000000000000000000000006044820152606490fd5b67ffffffffffffffff8111610a4957604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a4957604052565b506040513d6000823e3d90fd5b90610a9c6040519283610a5f565b565b6020929190610ab48492828151948592016102fa565b019081520190565b15610ac357565b60405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606490fd5b15610b0f57565b60405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606490fd5b60a490610bd7929380604051958693631bc6fec760e11b60208601526001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016602487015216604485015260606064850152816084850152848401376000838284010152601f80199101168101036084810184520182610a5f565b9056fe6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033a2646970667358221220cc3855215776915d9c3562b4380fe9fbf7afb53b9434cabc4802d531f12df64364736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json b/packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json deleted file mode 100644 index ce7a7284d..000000000 --- a/packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json +++ /dev/null @@ -1,1182 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccount", - "sourceName": "contracts/smart-account/SmartAccount.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "anEntryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "BaseImplementationCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotAnEntryPoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPointOrOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPointOrSelf", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotSelf", - "type": "error" - }, - { - "inputs": [], - "name": "DelegateCallsOnly", - "type": "error" - }, - { - "inputs": [], - "name": "EntryPointCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "HandlerCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementationAddress", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MixedAuthFail", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleAlreadyEnabled", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "expectedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "returnedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "prevModule", - "type": "address" - } - ], - "name": "ModuleAndPrevModuleMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleCannotBeZeroOrSentinel", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleNotEnabled", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesAlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesSetupExecutionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCanNotBeSelf", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerProvidedIsSame", - "type": "error" - }, - { - "inputs": [], - "name": "TransferToZeroAddressAttempt", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "destLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "valueLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "funcLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "operationLength", - "type": "uint256" - } - ], - "name": "WrongBatchProvided", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractSignature", - "type": "bytes" - } - ], - "name": "WrongContractSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "uintS", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "contractSignatureLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "signatureLength", - "type": "uint256" - } - ], - "name": "WrongContractSignatureFormat", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleAddressProvided", - "type": "address" - } - ], - "name": "WrongValidationModule", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousHandler", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "ChangedFallbackHandler", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "DisabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "EnabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "ModuleTransaction", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "SmartAccountReceivedNativeToken", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "addDeposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevModule", - "type": "address" - }, - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "disableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "enableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "entryPoint", - "outputs": [ - { - "internalType": "contract IEntryPoint", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "to", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - }, - { - "internalType": "enum Enum.Operation[]", - "name": "operations", - "type": "uint8[]" - } - ], - "name": "execBatchTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModuleReturnData", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatch_y6U", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "execute_ncC", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFallbackHandler", - "outputs": [ - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getImplementation", - "outputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "start", - "type": "address" - }, - { - "internalType": "uint256", - "name": "pageSize", - "type": "uint256" - } - ], - "name": "getModulesPaginated", - "outputs": [ - { - "internalType": "address[]", - "name": "array", - "type": "address[]" - }, - { - "internalType": "address", - "name": "next", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - }, - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - } - ], - "name": "init", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "isModuleEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "name": "isValidSignature", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint192", - "name": "_key", - "type": "uint192" - } - ], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "noncesDeprecated", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ownerDeprecated", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "setFallbackHandler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "setupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "setupData", - "type": "bytes" - } - ], - "name": "setupAndEnableModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "updateImplementation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validateUserOp", - "outputs": [ - { - "internalType": "uint256", - "name": "validationData", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdrawDepositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60c0346100fc57601f61213e38819003918201601f19168301916001600160401b03831184841017610101578084926020946040528339810103126100fc57516001600160a01b0381168082036100fc573060a052156100ea57608052600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556040516120269081610118823960805181818161096f01528181610b6201528181610c0301528181610f2101528181610f740152818161119e0152818161193b0152611996015260a051816114dd0152f35b60405163091748f960e21b8152600490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040526004361015610030575b36156100285734610023576100216119d6565b005b600080fd5b6100216114d3565b60003560e01c8061189a146101b357806146801461021657806301ffc9a71461025e578063025b22bc146102555780631626ba7e1461024c57806321632045146102435780632d9ad53d1461023a578063378dfd8e146102315780633a871cdd14610228578063468721a71461021f57806347e1da2a146102165780634a58db191461020d5780634d44560d146102045780635229073f146101fb5780635305dd27146101f2578063610b5925146101e95780636424e9fe146101e0578063856dfd99146101d7578063aaf10f42146101ce578063acfdf503146101c5578063b0d691fe146101bc578063b61d27f6146101b3578063c399ec88146101aa578063cc2f8452146101a1578063d86f2b3c14610198578063e009cfde1461018f578063f08a032314610186578063f33623b11461017d5763ffa1ad740361000e57610178611439565b61000e565b5061017861140c565b506101786113de565b5061017861120c565b5061017861113a565b50610178611038565b50610178610f45565b506101786102b3565b50610178610f00565b50610178610e5d565b50610178610e36565b50610178610def565b50610178610dc7565b50610178610d99565b50610178610d2d565b50610178610cab565b50610178610bd4565b50610178610b4a565b50610178610342565b50610178610afc565b50610178610929565b506101786107c8565b5061017861076a565b506101786106ab565b5061017861064f565b5061017861049d565b50610178610461565b6001600160a01b0381160361002357565b359061028382610267565b565b9181601f840112156100235782359167ffffffffffffffff8311610023576020838186019501011161002357565b5034610023576060366003190112610023576004356102d181610267565b6044359067ffffffffffffffff8211610023576103076102f8610021933690600401610285565b61030061198c565b36916105fa565b906024359061190d565b9181601f840112156100235782359167ffffffffffffffff8311610023576020808501948460051b01011161002357565b50346100235760603660031901126100235767ffffffffffffffff60043581811161002357610375903690600401610311565b906024358381116100235761038e903690600401610311565b93604435908111610023576103a7903690600401610311565b926103b061198c565b84158015610445575b801561043b575b61040f5760005b8581106103d057005b806104096103e96103e46001948a87611745565b611763565b6103f4838b89611745565b35610403610300858b8a61176d565b9161190d565b016103c7565b5050506084926040519263470c355760e01b845260048401526024830152604482015260006064820152fd5b50838614156103c0565b50858514156103b9565b6001600160e01b031981160361002357565b50346100235760203660031901126100235760206004356104818161044f565b6040516001600160e01b03199091166301ffc9a760e01b148152f35b5034610023576020366003190112610023576004356104bb81610267565b6104c3611931565b6001600160a01b0380821691821561053057803b15610509573054903055167faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da600080a3005b604051630c76093760e01b81526001600160a01b03919091166004820152602490fd5b0390fd5b60405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f000000000000000000006044820152606490fd5b50634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116105a057604052565b6105a8610575565b604052565b90601f8019910116810190811067ffffffffffffffff8211176105a057604052565b60209067ffffffffffffffff81116105ed575b601f01601f19160190565b6105f5610575565b6105e2565b929192610606826105cf565b9161061460405193846105ad565b829481845281830111610023578281602093846000960137010152565b9080601f830112156100235781602061064c933591016105fa565b90565b50346100235760403660031901126100235760243567ffffffffffffffff81116100235761068e6106866020923690600401610631565b600435611834565b6040516001600160e01b03199091168152f35b6002111561002357565b50346100235760a0366003190112610023576004356106c981610267565b60443567ffffffffffffffff8111610023576106e9903690600401610631565b90606435906106f7826106a1565b6084359160013314801561074b575b61073357602093610723938061072d57505a925b60243590611b5a565b6040519015158152f35b9261071a565b6040516321ac7c5f60e01b8152336004820152602490fd5b503360005260006020526001600160a01b036040600020541615610706565b503461002357602036600319011261002357602060043561078a81610267565b6001600160a01b0380911690816001141591826107ae575b50506040519015158152f35b9091506000526000825260406000205416151538806107a2565b5034610023576060366003190112610023576004356107e681610267565b602435906107f382610267565b60443567ffffffffffffffff811161002357610813903690600401610285565b91909260009360018552846020526001600160a01b0393604093858588205416158015906108fd575b6108ed5791610852916103006108589594611a24565b90611f7a565b918216801580156108e3575b6108cd578282856108b1936108c997528060205261089182822060016001600160a01b0319825416179055565b6001815220906001600160a01b03166001600160a01b0319825416179055565b516001600160a01b0390911681529081906020820190565b0390f35b602491519063cadb248f60e01b82526004820152fd5b5060018114610864565b845162dc149f60e41b8152600490fd5b50857f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d45416151561083c565b503461002357600319606036820112610023576004359067ffffffffffffffff82116100235761016082600401918336030112610023576000906001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000163303610a9b576109af6109a76101448693018461153d565b810190611570565b905016926109e06109d3856001600160a01b03166000526000602052604060002090565b546001600160a01b031690565b1615610a7a576020610a116108c9948493604051948580948193637ff9adb960e11b835260243590600484016115fa565b03925af1918215610a6d575b91610a3f575b50610a2f6044356116f1565b6040519081529081906020820190565b610a60915060203d8111610a66575b610a5881836105ad565b8101906114b7565b38610a23565b503d610a4e565b610a756114c6565b610a1d565b6040516326cc3fab60e21b81526001600160a01b0384166004820152602490fd5b604051635dac3db760e11b8152336004820152602490fd5b608060031982011261002357600435610acb81610267565b91602435916044359067ffffffffffffffff821161002357610aef91600401610631565b9060643561064c816106a1565b503461002357610b0b36610ab3565b600193919333148015610b2b575b61073357602093610723935a93611b5a565b503360005260006020526001600160a01b036040600020541615610b19565b50600080600319360112610bd1576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681813b15610bd15760405163b760faf960e01b8152306004820152918290602490829034905af18015610bc4575b610bb8575080f35b610bc19061058c565b80f35b610bcc6114c6565b610bb0565b80fd5b5060006040366003190112610bd157600435610bef81610267565b610bf7611931565b816001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001692833b15610c5f5760449083604051958694859363040b850f60e31b855216600484015260243560248401525af18015610bc457610bb8575080f35b8280fd5b60005b838110610c765750506000910152565b8181015183820152602001610c66565b90602091610c9f81518092818552858086019101610c63565b601f01601f1916010190565b503461002357610cba36610ab3565b90600193929333148015610d0e575b61073357610cd8935a93611b5a565b6040519060203d8301016040523d82523d6000602084013e6108c960405192839215158352604060208401526040830190610c86565b503360005260006020526001600160a01b036040600020541615610cc9565b503461002357604036600319011261002357600435610d4b81610267565b60243567ffffffffffffffff811161002357602091610d71610d7f923690600401610631565b90610d7a611931565b611f7a565b610d8881611d68565b6001600160a01b0360405191168152f35b503461002357602036600319011261002357610021600435610dba81610267565b610dc2611931565b611d68565b50346100235760003660031901126100235760206001600160a01b0360315416604051908152f35b50346100235760003660031901126100235760207f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4546001600160a01b0360405191168152f35b503461002357600036600319011261002357602030546001600160a01b0360405191168152f35b50346100235760803660031901126100235767ffffffffffffffff60043581811161002357610e90903690600401610311565b60249291923582811161002357610eab903690600401610311565b60449491943584811161002357610ec6903690600401610311565b91606435958611610023576108c996610ee6610eee973690600401610311565b969095611c22565b60405190151581529081906020820190565b50346100235760003660031901126100235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610023576000366003190112610023576040516370a0823160e01b815230600482015260209081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fd4575b600091610fb7575b50604051908152f35b610fce9150823d8111610a6657610a5881836105ad565b38610fae565b610fdc6114c6565b610fa6565b90929192604082016040835281518091526060830160208093019160005b8482821061101b575050506001600160a01b0391509416910152565b84516001600160a01b031684529384019390920191600101610fff565b50346100235760403660031901126100235760043561105681610267565b60243561106281611a96565b61106f60405191826105ad565b818152601f1961107e83611a96565b013660208301376110a76109d36000946001600160a01b03166000526000602052604060002090565b6001600160a01b038116801515908161112e575b5080611125575b15611112576111066109d3826110ed61110c946110df8988611ab7565b906001600160a01b03169052565b6001600160a01b03166000526000602052604060002090565b93611ad9565b926110a7565b908381526108c960405192839283610fe1565b508284106110c2565b600191501415386110bb565b50346100235760203660031901126100235760043577ffffffffffffffffffffffffffffffffffffffffffffffff8116809103610023576108c99060405190631aab3f0d60e11b825230600483015260248201526020816044816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ff575b6000916111e1575b506040519081529081906020820190565b6111f9915060203d8111610a6657610a5881836105ad565b386111d0565b6112076114c6565b6111c8565b50346100235760403660031901126100235760043561122a81610267565b60243561123681610267565b61123e611931565b6001600160a01b038116801580156113d4575b6113b3576112846112786109d3856001600160a01b03166000526000602052604060002090565b6001600160a01b031690565b03611359578061130a7faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276936112ef6112d56109d3611354966001600160a01b03166000526000602052604060002090565b916001600160a01b03166000526000602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b61133a61132a826001600160a01b03166000526000602052604060002090565b6001600160a01b03198154169055565b6040516001600160a01b0390911681529081906020820190565b0390a1005b61052c61137c6109d3846001600160a01b03166000526000602052604060002090565b604051633103525b60e21b81526001600160a01b039384166004820152908316602482015292909116604483015281906064820190565b60405163cadb248f60e01b81526001600160a01b0383166004820152602490fd5b5060018114611251565b5034610023576020366003190112610023576100216004356113ff81610267565b611407611931565b611a24565b50346100235760203660031901126100235760043560005260326020526020604060002054604051908152f35b5034610023576000366003190112610023576108c96040516040810181811067ffffffffffffffff8211176114aa575b604052600581527f322e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610c86565b6114b2610575565b611469565b90816020910312610023575190565b506040513d6000823e3d90fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301461152b5734337ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce02600080a3565b604051633c97166560e21b8152600490fd5b903590601e1981360301821215610023570180359067ffffffffffffffff82116100235760200191813603831361002357565b919060408382031261002357823567ffffffffffffffff81116100235760209161159b918501610631565b92013561064c81610267565b9035601e198236030181121561002357016020813591019167ffffffffffffffff821161002357813603831361002357565b908060209392818452848401376000828201840152601f01601f1916010190565b9291906116ec611657602092604087526116276040880161161a83610278565b6001600160a01b03169052565b8381013560608801526116dc61164060408301836115a7565b9390610160948560808c01526101a08b01916115d9565b916116d361167f61166b60608401846115a7565b603f198d8803810160a08f015296916115d9565b608083013560c08c015260a083013560e08c01528a6101009660c0850135888301526116c361012060e087013581850152610140998701358a8501528601866115a7565b92909188828603019101526115d9565b938101906115a7565b91888403016101808901526115d9565b930152565b806116f95750565b600080808093338219f1503d15610283573d611714816105cf565b9061172260405192836105ad565b8152600060203d92013e565b50634e487b7160e01b600052603260045260246000fd5b9190811015611756575b60051b0190565b61175e61172e565b61174f565b3561064c81610267565b90916117869281101561178a575b60051b81019061153d565b9091565b61179261172e565b61177b565b919060408382031261002357825167ffffffffffffffff81116100235783019080601f83011215610023578151916117ce836105cf565b916117dc60405193846105ad565b83835260208483010111610023576020926117fc91848085019101610c63565b92015161064c81610267565b90816020910312610023575161064c8161044f565b60409061064c939281528160208201520190610c86565b906118489060208082518301019101611797565b90916001600160a01b03809216916118766109d3846001600160a01b03166000526000602052604060002090565b16156118ec57916020916118a093604051809581948293630b135d3f60e11b84526004840161181d565b03915afa9081156118df575b6000916118b7575090565b61064c915060203d81116118d8575b6118d081836105ad565b810190611808565b503d6118c6565b6118e76114c6565b6118ac565b6040516326cc3fab60e21b81526001600160a01b0383166004820152602490fd5b916000928392602083519301915af1604051903d6000833e1561192d5750565b3d90fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141580611982575b61196a57565b604051634776242160e01b8152336004820152602490fd5b5030331415611964565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119be57565b60405163e6fce6a560e01b8152336004820152602490fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4548015610021576000808092368280373360601b3652818060143601925af13d82803e1561192d573d90f35b6001600160a01b03808216918215611a84577f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d49081549155167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c600080a3565b60405163dd449f5f60e01b8152600490fd5b60209067ffffffffffffffff8111611aaf5760051b0190565b61175e610575565b6020918151811015611acc575b60051b010190565b611ad461172e565b611ac4565b6000198114611ae85760010190565b634e487b7160e01b600052601160045260246000fd5b611b1690602060405192828480945193849201610c63565b810103902090565b906002821015611b2b5752565b634e487b7160e01b600052602160045260246000fd5b60209093929193611b56816040810196611b1e565b0152565b9493929091946002821015611b2b5760018203611c05576000808751602089018488f4955b8615611bcf577f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee91611bca611bbb6001600160a01b0393611afe565b96604051938493169583611b41565b0390a4565b7f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a91611bca611bbb6001600160a01b0393611afe565b600080875160208901868589f195611b7f565b3561064c816106a1565b9497969391929795909560009887158015611d5e575b8015611d54575b8015611d4a575b611d1b576001978833148015611ceb575b6107335797969594939291906000985b808a10611c7a5750505050505050505050565b9091929394959697899b50611cdb888888611cd589869f8f81611cc0818e611cb98f968f97611cb36103e483611ccd9b611cc89b611745565b9c611745565b359861176d565b989094611745565b611c18565b9436916105fa565b91611eab565b9b01989796959493929190611c67565b506001600160a01b03611d146109d3336001600160a01b03166000526000602052604060002090565b1615611c57565b60405163470c355760e01b81526004810189905260248101919091526044810182905260648101869052608490fd5b5085821415611c46565b5081811415611c3f565b5080881415611c38565b6001600160a01b0381168015908115611ea0575b50611e7d57611da46112786109d3836001600160a01b03166000526000602052604060002090565b611e5a57600160009081526020527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844090611e5590611e21611e047fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6109d3565b6112ef836001600160a01b03166000526000602052604060002090565b6001600090815260205261133a817fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6112ef565b0390a1565b60405163b29d459560e01b81526001600160a01b03919091166004820152602490fd5b60405163cadb248f60e01b81526001600160a01b03919091166004820152602490fd5b600191501438611d7c565b939293611ebb5a86858585611b5a565b948515611f4e57611f23611f187f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da956001600160a01b0395604051968796338852166020870152604086015260a0606086015260a0850190610c86565b916080840190611b1e565b0390a1337f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8600080a2565b50505050337facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375600080a2565b6001600160a01b03811615611fab5781600092918360208194519301915af1604051903d6000833e1561192d575190565b60405162461bcd60e51b815260206004820152601a60248201527f57726f6e67204d6f64756c6520536574757020416464726573730000000000006044820152606490fdfea26469706673582212205e35c32c65281399d0271586e25905b496a0e4ccfd6e3ff9ffae2c43380c16ac64736f6c63430008110033", - "deployedBytecode": "0x60806040526004361015610030575b36156100285734610023576100216119d6565b005b600080fd5b6100216114d3565b60003560e01c8061189a146101b357806146801461021657806301ffc9a71461025e578063025b22bc146102555780631626ba7e1461024c57806321632045146102435780632d9ad53d1461023a578063378dfd8e146102315780633a871cdd14610228578063468721a71461021f57806347e1da2a146102165780634a58db191461020d5780634d44560d146102045780635229073f146101fb5780635305dd27146101f2578063610b5925146101e95780636424e9fe146101e0578063856dfd99146101d7578063aaf10f42146101ce578063acfdf503146101c5578063b0d691fe146101bc578063b61d27f6146101b3578063c399ec88146101aa578063cc2f8452146101a1578063d86f2b3c14610198578063e009cfde1461018f578063f08a032314610186578063f33623b11461017d5763ffa1ad740361000e57610178611439565b61000e565b5061017861140c565b506101786113de565b5061017861120c565b5061017861113a565b50610178611038565b50610178610f45565b506101786102b3565b50610178610f00565b50610178610e5d565b50610178610e36565b50610178610def565b50610178610dc7565b50610178610d99565b50610178610d2d565b50610178610cab565b50610178610bd4565b50610178610b4a565b50610178610342565b50610178610afc565b50610178610929565b506101786107c8565b5061017861076a565b506101786106ab565b5061017861064f565b5061017861049d565b50610178610461565b6001600160a01b0381160361002357565b359061028382610267565b565b9181601f840112156100235782359167ffffffffffffffff8311610023576020838186019501011161002357565b5034610023576060366003190112610023576004356102d181610267565b6044359067ffffffffffffffff8211610023576103076102f8610021933690600401610285565b61030061198c565b36916105fa565b906024359061190d565b9181601f840112156100235782359167ffffffffffffffff8311610023576020808501948460051b01011161002357565b50346100235760603660031901126100235767ffffffffffffffff60043581811161002357610375903690600401610311565b906024358381116100235761038e903690600401610311565b93604435908111610023576103a7903690600401610311565b926103b061198c565b84158015610445575b801561043b575b61040f5760005b8581106103d057005b806104096103e96103e46001948a87611745565b611763565b6103f4838b89611745565b35610403610300858b8a61176d565b9161190d565b016103c7565b5050506084926040519263470c355760e01b845260048401526024830152604482015260006064820152fd5b50838614156103c0565b50858514156103b9565b6001600160e01b031981160361002357565b50346100235760203660031901126100235760206004356104818161044f565b6040516001600160e01b03199091166301ffc9a760e01b148152f35b5034610023576020366003190112610023576004356104bb81610267565b6104c3611931565b6001600160a01b0380821691821561053057803b15610509573054903055167faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da600080a3005b604051630c76093760e01b81526001600160a01b03919091166004820152602490fd5b0390fd5b60405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f000000000000000000006044820152606490fd5b50634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116105a057604052565b6105a8610575565b604052565b90601f8019910116810190811067ffffffffffffffff8211176105a057604052565b60209067ffffffffffffffff81116105ed575b601f01601f19160190565b6105f5610575565b6105e2565b929192610606826105cf565b9161061460405193846105ad565b829481845281830111610023578281602093846000960137010152565b9080601f830112156100235781602061064c933591016105fa565b90565b50346100235760403660031901126100235760243567ffffffffffffffff81116100235761068e6106866020923690600401610631565b600435611834565b6040516001600160e01b03199091168152f35b6002111561002357565b50346100235760a0366003190112610023576004356106c981610267565b60443567ffffffffffffffff8111610023576106e9903690600401610631565b90606435906106f7826106a1565b6084359160013314801561074b575b61073357602093610723938061072d57505a925b60243590611b5a565b6040519015158152f35b9261071a565b6040516321ac7c5f60e01b8152336004820152602490fd5b503360005260006020526001600160a01b036040600020541615610706565b503461002357602036600319011261002357602060043561078a81610267565b6001600160a01b0380911690816001141591826107ae575b50506040519015158152f35b9091506000526000825260406000205416151538806107a2565b5034610023576060366003190112610023576004356107e681610267565b602435906107f382610267565b60443567ffffffffffffffff811161002357610813903690600401610285565b91909260009360018552846020526001600160a01b0393604093858588205416158015906108fd575b6108ed5791610852916103006108589594611a24565b90611f7a565b918216801580156108e3575b6108cd578282856108b1936108c997528060205261089182822060016001600160a01b0319825416179055565b6001815220906001600160a01b03166001600160a01b0319825416179055565b516001600160a01b0390911681529081906020820190565b0390f35b602491519063cadb248f60e01b82526004820152fd5b5060018114610864565b845162dc149f60e41b8152600490fd5b50857f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d45416151561083c565b503461002357600319606036820112610023576004359067ffffffffffffffff82116100235761016082600401918336030112610023576000906001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000163303610a9b576109af6109a76101448693018461153d565b810190611570565b905016926109e06109d3856001600160a01b03166000526000602052604060002090565b546001600160a01b031690565b1615610a7a576020610a116108c9948493604051948580948193637ff9adb960e11b835260243590600484016115fa565b03925af1918215610a6d575b91610a3f575b50610a2f6044356116f1565b6040519081529081906020820190565b610a60915060203d8111610a66575b610a5881836105ad565b8101906114b7565b38610a23565b503d610a4e565b610a756114c6565b610a1d565b6040516326cc3fab60e21b81526001600160a01b0384166004820152602490fd5b604051635dac3db760e11b8152336004820152602490fd5b608060031982011261002357600435610acb81610267565b91602435916044359067ffffffffffffffff821161002357610aef91600401610631565b9060643561064c816106a1565b503461002357610b0b36610ab3565b600193919333148015610b2b575b61073357602093610723935a93611b5a565b503360005260006020526001600160a01b036040600020541615610b19565b50600080600319360112610bd1576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681813b15610bd15760405163b760faf960e01b8152306004820152918290602490829034905af18015610bc4575b610bb8575080f35b610bc19061058c565b80f35b610bcc6114c6565b610bb0565b80fd5b5060006040366003190112610bd157600435610bef81610267565b610bf7611931565b816001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001692833b15610c5f5760449083604051958694859363040b850f60e31b855216600484015260243560248401525af18015610bc457610bb8575080f35b8280fd5b60005b838110610c765750506000910152565b8181015183820152602001610c66565b90602091610c9f81518092818552858086019101610c63565b601f01601f1916010190565b503461002357610cba36610ab3565b90600193929333148015610d0e575b61073357610cd8935a93611b5a565b6040519060203d8301016040523d82523d6000602084013e6108c960405192839215158352604060208401526040830190610c86565b503360005260006020526001600160a01b036040600020541615610cc9565b503461002357604036600319011261002357600435610d4b81610267565b60243567ffffffffffffffff811161002357602091610d71610d7f923690600401610631565b90610d7a611931565b611f7a565b610d8881611d68565b6001600160a01b0360405191168152f35b503461002357602036600319011261002357610021600435610dba81610267565b610dc2611931565b611d68565b50346100235760003660031901126100235760206001600160a01b0360315416604051908152f35b50346100235760003660031901126100235760207f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4546001600160a01b0360405191168152f35b503461002357600036600319011261002357602030546001600160a01b0360405191168152f35b50346100235760803660031901126100235767ffffffffffffffff60043581811161002357610e90903690600401610311565b60249291923582811161002357610eab903690600401610311565b60449491943584811161002357610ec6903690600401610311565b91606435958611610023576108c996610ee6610eee973690600401610311565b969095611c22565b60405190151581529081906020820190565b50346100235760003660031901126100235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610023576000366003190112610023576040516370a0823160e01b815230600482015260209081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fd4575b600091610fb7575b50604051908152f35b610fce9150823d8111610a6657610a5881836105ad565b38610fae565b610fdc6114c6565b610fa6565b90929192604082016040835281518091526060830160208093019160005b8482821061101b575050506001600160a01b0391509416910152565b84516001600160a01b031684529384019390920191600101610fff565b50346100235760403660031901126100235760043561105681610267565b60243561106281611a96565b61106f60405191826105ad565b818152601f1961107e83611a96565b013660208301376110a76109d36000946001600160a01b03166000526000602052604060002090565b6001600160a01b038116801515908161112e575b5080611125575b15611112576111066109d3826110ed61110c946110df8988611ab7565b906001600160a01b03169052565b6001600160a01b03166000526000602052604060002090565b93611ad9565b926110a7565b908381526108c960405192839283610fe1565b508284106110c2565b600191501415386110bb565b50346100235760203660031901126100235760043577ffffffffffffffffffffffffffffffffffffffffffffffff8116809103610023576108c99060405190631aab3f0d60e11b825230600483015260248201526020816044816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ff575b6000916111e1575b506040519081529081906020820190565b6111f9915060203d8111610a6657610a5881836105ad565b386111d0565b6112076114c6565b6111c8565b50346100235760403660031901126100235760043561122a81610267565b60243561123681610267565b61123e611931565b6001600160a01b038116801580156113d4575b6113b3576112846112786109d3856001600160a01b03166000526000602052604060002090565b6001600160a01b031690565b03611359578061130a7faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276936112ef6112d56109d3611354966001600160a01b03166000526000602052604060002090565b916001600160a01b03166000526000602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b61133a61132a826001600160a01b03166000526000602052604060002090565b6001600160a01b03198154169055565b6040516001600160a01b0390911681529081906020820190565b0390a1005b61052c61137c6109d3846001600160a01b03166000526000602052604060002090565b604051633103525b60e21b81526001600160a01b039384166004820152908316602482015292909116604483015281906064820190565b60405163cadb248f60e01b81526001600160a01b0383166004820152602490fd5b5060018114611251565b5034610023576020366003190112610023576100216004356113ff81610267565b611407611931565b611a24565b50346100235760203660031901126100235760043560005260326020526020604060002054604051908152f35b5034610023576000366003190112610023576108c96040516040810181811067ffffffffffffffff8211176114aa575b604052600581527f322e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610c86565b6114b2610575565b611469565b90816020910312610023575190565b506040513d6000823e3d90fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301461152b5734337ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce02600080a3565b604051633c97166560e21b8152600490fd5b903590601e1981360301821215610023570180359067ffffffffffffffff82116100235760200191813603831361002357565b919060408382031261002357823567ffffffffffffffff81116100235760209161159b918501610631565b92013561064c81610267565b9035601e198236030181121561002357016020813591019167ffffffffffffffff821161002357813603831361002357565b908060209392818452848401376000828201840152601f01601f1916010190565b9291906116ec611657602092604087526116276040880161161a83610278565b6001600160a01b03169052565b8381013560608801526116dc61164060408301836115a7565b9390610160948560808c01526101a08b01916115d9565b916116d361167f61166b60608401846115a7565b603f198d8803810160a08f015296916115d9565b608083013560c08c015260a083013560e08c01528a6101009660c0850135888301526116c361012060e087013581850152610140998701358a8501528601866115a7565b92909188828603019101526115d9565b938101906115a7565b91888403016101808901526115d9565b930152565b806116f95750565b600080808093338219f1503d15610283573d611714816105cf565b9061172260405192836105ad565b8152600060203d92013e565b50634e487b7160e01b600052603260045260246000fd5b9190811015611756575b60051b0190565b61175e61172e565b61174f565b3561064c81610267565b90916117869281101561178a575b60051b81019061153d565b9091565b61179261172e565b61177b565b919060408382031261002357825167ffffffffffffffff81116100235783019080601f83011215610023578151916117ce836105cf565b916117dc60405193846105ad565b83835260208483010111610023576020926117fc91848085019101610c63565b92015161064c81610267565b90816020910312610023575161064c8161044f565b60409061064c939281528160208201520190610c86565b906118489060208082518301019101611797565b90916001600160a01b03809216916118766109d3846001600160a01b03166000526000602052604060002090565b16156118ec57916020916118a093604051809581948293630b135d3f60e11b84526004840161181d565b03915afa9081156118df575b6000916118b7575090565b61064c915060203d81116118d8575b6118d081836105ad565b810190611808565b503d6118c6565b6118e76114c6565b6118ac565b6040516326cc3fab60e21b81526001600160a01b0383166004820152602490fd5b916000928392602083519301915af1604051903d6000833e1561192d5750565b3d90fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141580611982575b61196a57565b604051634776242160e01b8152336004820152602490fd5b5030331415611964565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119be57565b60405163e6fce6a560e01b8152336004820152602490fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4548015610021576000808092368280373360601b3652818060143601925af13d82803e1561192d573d90f35b6001600160a01b03808216918215611a84577f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d49081549155167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c600080a3565b60405163dd449f5f60e01b8152600490fd5b60209067ffffffffffffffff8111611aaf5760051b0190565b61175e610575565b6020918151811015611acc575b60051b010190565b611ad461172e565b611ac4565b6000198114611ae85760010190565b634e487b7160e01b600052601160045260246000fd5b611b1690602060405192828480945193849201610c63565b810103902090565b906002821015611b2b5752565b634e487b7160e01b600052602160045260246000fd5b60209093929193611b56816040810196611b1e565b0152565b9493929091946002821015611b2b5760018203611c05576000808751602089018488f4955b8615611bcf577f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee91611bca611bbb6001600160a01b0393611afe565b96604051938493169583611b41565b0390a4565b7f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a91611bca611bbb6001600160a01b0393611afe565b600080875160208901868589f195611b7f565b3561064c816106a1565b9497969391929795909560009887158015611d5e575b8015611d54575b8015611d4a575b611d1b576001978833148015611ceb575b6107335797969594939291906000985b808a10611c7a5750505050505050505050565b9091929394959697899b50611cdb888888611cd589869f8f81611cc0818e611cb98f968f97611cb36103e483611ccd9b611cc89b611745565b9c611745565b359861176d565b989094611745565b611c18565b9436916105fa565b91611eab565b9b01989796959493929190611c67565b506001600160a01b03611d146109d3336001600160a01b03166000526000602052604060002090565b1615611c57565b60405163470c355760e01b81526004810189905260248101919091526044810182905260648101869052608490fd5b5085821415611c46565b5081811415611c3f565b5080881415611c38565b6001600160a01b0381168015908115611ea0575b50611e7d57611da46112786109d3836001600160a01b03166000526000602052604060002090565b611e5a57600160009081526020527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844090611e5590611e21611e047fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6109d3565b6112ef836001600160a01b03166000526000602052604060002090565b6001600090815260205261133a817fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6112ef565b0390a1565b60405163b29d459560e01b81526001600160a01b03919091166004820152602490fd5b60405163cadb248f60e01b81526001600160a01b03919091166004820152602490fd5b600191501438611d7c565b939293611ebb5a86858585611b5a565b948515611f4e57611f23611f187f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da956001600160a01b0395604051968796338852166020870152604086015260a0606086015260a0850190610c86565b916080840190611b1e565b0390a1337f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8600080a2565b50505050337facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375600080a2565b6001600160a01b03811615611fab5781600092918360208194519301915af1604051903d6000833e1561192d575190565b60405162461bcd60e51b815260206004820152601a60248201527f57726f6e67204d6f64756c6520536574757020416464726573730000000000006044820152606490fdfea26469706673582212205e35c32c65281399d0271586e25905b496a0e4ccfd6e3ff9ffae2c43380c16ac64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/entrypoint/EntryPoint_v0.0.5.json b/packages/common/abis/entrypoint/EntryPoint_v0.0.5.json deleted file mode 100644 index 270d5ded1..000000000 --- a/packages/common/abis/entrypoint/EntryPoint_v0.0.5.json +++ /dev/null @@ -1,1318 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "EntryPoint", - "sourceName": "contracts/core/EntryPoint.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "paid", - "type": "uint256" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bool", - "name": "targetSuccess", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "targetResult", - "type": "bytes" - } - ], - "name": "ExecutionResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "opIndex", - "type": "uint256" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "name": "FailedOp", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAddressResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "SignatureValidationFailed", - "type": "error" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "sigFailed", - "type": "bool" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bytes", - "name": "paymasterContext", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.ReturnInfo", - "name": "returnInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "senderInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "factoryInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "paymasterInfo", - "type": "tuple" - } - ], - "name": "ValidationResult", - "type": "error" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "sigFailed", - "type": "bool" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bytes", - "name": "paymasterContext", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.ReturnInfo", - "name": "returnInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "senderInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "factoryInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "paymasterInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "aggregator", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "stakeInfo", - "type": "tuple" - } - ], - "internalType": "struct IEntryPoint.AggregatorStakeInfo", - "name": "aggregatorInfo", - "type": "tuple" - } - ], - "name": "ValidationResultWithAggregation", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "factory", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "paymaster", - "type": "address" - } - ], - "name": "AccountDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "BeforeExecution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalDeposit", - "type": "uint256" - } - ], - "name": "Deposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "SignatureAggregatorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "withdrawTime", - "type": "uint256" - } - ], - "name": "StakeUnlocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "withdrawAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "StakeWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "actualGasCost", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "actualGasUsed", - "type": "uint256" - } - ], - "name": "UserOperationEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "revertReason", - "type": "bytes" - } - ], - "name": "UserOperationRevertReason", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "withdrawAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrawn", - "type": "event" - }, - { - "inputs": [], - "name": "SIG_VALIDATION_FAILED", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - } - ], - "name": "_validateSenderAndPaymaster", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - } - ], - "name": "addStake", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "depositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "deposits", - "outputs": [ - { - "internalType": "uint112", - "name": "deposit", - "type": "uint112" - }, - { - "internalType": "bool", - "name": "staked", - "type": "bool" - }, - { - "internalType": "uint112", - "name": "stake", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - }, - { - "internalType": "uint48", - "name": "withdrawTime", - "type": "uint48" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getDepositInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint112", - "name": "deposit", - "type": "uint112" - }, - { - "internalType": "bool", - "name": "staked", - "type": "bool" - }, - { - "internalType": "uint112", - "name": "stake", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - }, - { - "internalType": "uint48", - "name": "withdrawTime", - "type": "uint48" - } - ], - "internalType": "struct IStakeManager.DepositInfo", - "name": "info", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint192", - "name": "key", - "type": "uint192" - } - ], - "name": "getNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - } - ], - "name": "getSenderAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - } - ], - "name": "getUserOpHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation[]", - "name": "userOps", - "type": "tuple[]" - }, - { - "internalType": "contract IAggregator", - "name": "aggregator", - "type": "address" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.UserOpsPerAggregator[]", - "name": "opsPerAggregator", - "type": "tuple[]" - }, - { - "internalType": "address payable", - "name": "beneficiary", - "type": "address" - } - ], - "name": "handleAggregatedOps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation[]", - "name": "ops", - "type": "tuple[]" - }, - { - "internalType": "address payable", - "name": "beneficiary", - "type": "address" - } - ], - "name": "handleOps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint192", - "name": "key", - "type": "uint192" - } - ], - "name": "incrementNonce", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - } - ], - "internalType": "struct EntryPoint.MemoryUserOp", - "name": "mUserOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "contextOffset", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - } - ], - "internalType": "struct EntryPoint.UserOpInfo", - "name": "opInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "context", - "type": "bytes" - } - ], - "name": "innerHandleOp", - "outputs": [ - { - "internalType": "uint256", - "name": "actualGasCost", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint192", - "name": "", - "type": "uint192" - } - ], - "name": "nonceSequenceNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "op", - "type": "tuple" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "targetCallData", - "type": "bytes" - } - ], - "name": "simulateHandleOp", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - } - ], - "name": "simulateValidation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unlockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - } - ], - "name": "withdrawStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "withdrawAmount", - "type": "uint256" - } - ], - "name": "withdrawTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60a080604052346200008957600160025561022c8181016001600160401b038111838210176200007357829162005d18833903906000f080156200006757608052604051615c8990816200008f82396080518181816113df01528181613e9501526141b60152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080806040523461001657610210908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033", - "deployedBytecode": "0x60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/entrypoint/EntryPoint_v0.0.6.json b/packages/common/abis/entrypoint/EntryPoint_v0.0.6.json deleted file mode 100644 index 270d5ded1..000000000 --- a/packages/common/abis/entrypoint/EntryPoint_v0.0.6.json +++ /dev/null @@ -1,1318 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "EntryPoint", - "sourceName": "contracts/core/EntryPoint.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "paid", - "type": "uint256" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bool", - "name": "targetSuccess", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "targetResult", - "type": "bytes" - } - ], - "name": "ExecutionResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "opIndex", - "type": "uint256" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "name": "FailedOp", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAddressResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "SignatureValidationFailed", - "type": "error" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "sigFailed", - "type": "bool" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bytes", - "name": "paymasterContext", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.ReturnInfo", - "name": "returnInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "senderInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "factoryInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "paymasterInfo", - "type": "tuple" - } - ], - "name": "ValidationResult", - "type": "error" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "sigFailed", - "type": "bool" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bytes", - "name": "paymasterContext", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.ReturnInfo", - "name": "returnInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "senderInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "factoryInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "paymasterInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "aggregator", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "stakeInfo", - "type": "tuple" - } - ], - "internalType": "struct IEntryPoint.AggregatorStakeInfo", - "name": "aggregatorInfo", - "type": "tuple" - } - ], - "name": "ValidationResultWithAggregation", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "factory", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "paymaster", - "type": "address" - } - ], - "name": "AccountDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "BeforeExecution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalDeposit", - "type": "uint256" - } - ], - "name": "Deposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "SignatureAggregatorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "withdrawTime", - "type": "uint256" - } - ], - "name": "StakeUnlocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "withdrawAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "StakeWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "actualGasCost", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "actualGasUsed", - "type": "uint256" - } - ], - "name": "UserOperationEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "revertReason", - "type": "bytes" - } - ], - "name": "UserOperationRevertReason", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "withdrawAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrawn", - "type": "event" - }, - { - "inputs": [], - "name": "SIG_VALIDATION_FAILED", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - } - ], - "name": "_validateSenderAndPaymaster", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - } - ], - "name": "addStake", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "depositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "deposits", - "outputs": [ - { - "internalType": "uint112", - "name": "deposit", - "type": "uint112" - }, - { - "internalType": "bool", - "name": "staked", - "type": "bool" - }, - { - "internalType": "uint112", - "name": "stake", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - }, - { - "internalType": "uint48", - "name": "withdrawTime", - "type": "uint48" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getDepositInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint112", - "name": "deposit", - "type": "uint112" - }, - { - "internalType": "bool", - "name": "staked", - "type": "bool" - }, - { - "internalType": "uint112", - "name": "stake", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - }, - { - "internalType": "uint48", - "name": "withdrawTime", - "type": "uint48" - } - ], - "internalType": "struct IStakeManager.DepositInfo", - "name": "info", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint192", - "name": "key", - "type": "uint192" - } - ], - "name": "getNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - } - ], - "name": "getSenderAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - } - ], - "name": "getUserOpHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation[]", - "name": "userOps", - "type": "tuple[]" - }, - { - "internalType": "contract IAggregator", - "name": "aggregator", - "type": "address" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.UserOpsPerAggregator[]", - "name": "opsPerAggregator", - "type": "tuple[]" - }, - { - "internalType": "address payable", - "name": "beneficiary", - "type": "address" - } - ], - "name": "handleAggregatedOps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation[]", - "name": "ops", - "type": "tuple[]" - }, - { - "internalType": "address payable", - "name": "beneficiary", - "type": "address" - } - ], - "name": "handleOps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint192", - "name": "key", - "type": "uint192" - } - ], - "name": "incrementNonce", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - } - ], - "internalType": "struct EntryPoint.MemoryUserOp", - "name": "mUserOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "contextOffset", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - } - ], - "internalType": "struct EntryPoint.UserOpInfo", - "name": "opInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "context", - "type": "bytes" - } - ], - "name": "innerHandleOp", - "outputs": [ - { - "internalType": "uint256", - "name": "actualGasCost", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint192", - "name": "", - "type": "uint192" - } - ], - "name": "nonceSequenceNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "op", - "type": "tuple" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "targetCallData", - "type": "bytes" - } - ], - "name": "simulateHandleOp", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - } - ], - "name": "simulateValidation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unlockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - } - ], - "name": "withdrawStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "withdrawAmount", - "type": "uint256" - } - ], - "name": "withdrawTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60a080604052346200008957600160025561022c8181016001600160401b038111838210176200007357829162005d18833903906000f080156200006757608052604051615c8990816200008f82396080518181816113df01528181613e9501526141b60152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080806040523461001657610210908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033", - "deployedBytecode": "0x60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/misc/AddressResolver.json b/packages/common/abis/misc/AddressResolver.json deleted file mode 100644 index 899d2623f..000000000 --- a/packages/common/abis/misc/AddressResolver.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "AddressResolver", - "sourceName": "contracts/smart-account/utils/AddressResolver.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_v1Factory", - "type": "address" - }, - { - "internalType": "address", - "name": "_v2Factory", - "type": "address" - }, - { - "internalType": "address", - "name": "_ecdsaModule", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ecdsaOwnershipModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_eoa", - "type": "address" - }, - { - "internalType": "uint8", - "name": "_maxIndex", - "type": "uint8" - } - ], - "name": "resolveAddresses", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "accountAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "factoryAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "currentImplementation", - "type": "address" - }, - { - "internalType": "string", - "name": "currentVersion", - "type": "string" - }, - { - "internalType": "string", - "name": "factoryVersion", - "type": "string" - }, - { - "internalType": "uint256", - "name": "deploymentIndex", - "type": "uint256" - } - ], - "internalType": "struct IAddressResolver.SmartAccountResult[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_eoa", - "type": "address" - }, - { - "internalType": "uint8", - "name": "_maxIndex", - "type": "uint8" - }, - { - "internalType": "address", - "name": "_moduleAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_moduleSetupData", - "type": "bytes" - } - ], - "name": "resolveAddressesFlexibleForV2", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "accountAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "factoryAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "currentImplementation", - "type": "address" - }, - { - "internalType": "string", - "name": "currentVersion", - "type": "string" - }, - { - "internalType": "string", - "name": "factoryVersion", - "type": "string" - }, - { - "internalType": "uint256", - "name": "deploymentIndex", - "type": "uint256" - } - ], - "internalType": "struct IAddressResolver.SmartAccountResult[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_eoa", - "type": "address" - }, - { - "internalType": "uint8", - "name": "_maxIndex", - "type": "uint8" - } - ], - "name": "resolveAddressesV1", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "accountAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "factoryAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "currentImplementation", - "type": "address" - }, - { - "internalType": "string", - "name": "currentVersion", - "type": "string" - }, - { - "internalType": "string", - "name": "factoryVersion", - "type": "string" - }, - { - "internalType": "uint256", - "name": "deploymentIndex", - "type": "uint256" - } - ], - "internalType": "struct IAddressResolver.SmartAccountResult[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "smartAccountFactoryV1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "smartAccountFactoryV2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60e0346200011757601f6200124738819003918201601f19168301916001600160401b038311848410176200011c5780849260609460405283398101031262000117576200004d8162000132565b906200006a6040620000626020840162000132565b920162000132565b916200009f6001600160a01b0362000086818416151562000147565b62000095818516151562000147565b8416151562000147565b60805260a05260c0526040516110b2908162000195823960805181818160e601528181610311015281816104700152818161071b015281816108f60152610c2b015260a0518181816104e8015281816105c40152818161080c015281816109cd0152610aaa015260c051818181607e01526109980152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200011757565b156200014f57565b60405162461bcd60e51b815260206004820152601960248201527f5265717569726564206e6f6e2d7a65726f2061646472657373000000000000006044820152606490fdfe6080604052600436101561001257600080fd5b60003560e01c806326bbd86c146108305780632819f31c146107ec578063315f3c03146103355780635acdcdc6146102f15780638d440ec2146100a75763c866cae31461005e57600080fd5b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100a25760403660031901126100a2576100c0610cfc565b60ff6100ca610d12565b166100d481610ec6565b9160009160006001600160a01b0392837f000000000000000000000000000000000000000000000000000000000000000016915b83811061016157868661011a81610ec6565b9160005b82811061013757604051806101338682610d6a565b0390f35b8061014460019284610fde565b5161014f8287610fde565b5261015a8186610fde565b500161011e565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081604481875afa90811561028b576000916102d2575b508581161515806102c8575b6101b6575b50600101610108565b90956040519063557887a160e11b82526020826004818a87165afa91821561028b57600092610297575b506040516001621794a360e21b03198152926000846004818b85165afa801561028b5788600195948695600093610266575b50816040519461022186610e22565b168452886020850152166040830152606082015261023d610fc0565b60808201528860a0820152610252828b610fde565b5261025d818a610fde565b500195906101ad565b6102849193503d806000833e61027c8183610e70565b810190610f5e565b918d610212565b6040513d6000823e3d90fd5b6102ba91925060203d6020116102c1575b6102b28183610e70565b810190610f3f565b90896101e0565b503d6102a8565b50803b15156101a8565b6102eb915060203d6020116102c1576102b28183610e70565b8861019c565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760803660031901126100a25761034e610cfc565b610356610d12565b906001600160a01b0360443516604435036100a2576064359167ffffffffffffffff83116100a257366023840112156100a257826004013561039781610e92565b936103a56040519586610e70565b81855236602483830101116100a2578160009260246020930183880137850101526103da60ff6103d483611008565b16610ec6565b9260009260005b60ff841681106104395785856103f681610ec6565b9160005b82811061040f57604051806101338682610d6a565b8061041c60019284610fde565b516104278287610fde565b526104328186610fde565b50016103fa565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b576000916107cd575b506001600160a01b0381161515806107c3575b610696575b50604051632e7a1a8360e01b8152602081806104dc858860443560048501611033565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610677575b506001600160a01b03811615158061066d575b61053a575b506001016103e1565b90946040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b5760009261064c575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610626575b506001600160a01b039081604051946105be86610e22565b168452817f000000000000000000000000000000000000000000000000000000000000000016602085015216604083015260608201526105fc61105e565b60808201528860a0820152610611828b610fde565b5261061c818a610fde565b5001959150610531565b6001600160a01b03919250610645903d806000833e61027c8183610e70565b91906105a6565b61066691925060203d6020116102c1576102b28183610e70565b908861056b565b50803b151561052c565b610690915060203d6020116102c1576102b28183610e70565b87610519565b60405163557887a160e11b81529195906020836004816001600160a01b0385165afa92831561028b576000936107a2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b5760019460009261077c575b506001600160a01b0390816040519461071586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610753610fc0565b60808201528660a08201526107688289610fde565b526107738188610fde565b500193866104b9565b6001600160a01b0391925061079b903d806000833e61027c8183610e70565b91906106fd565b6107bc91935060203d6020116102c1576102b28183610e70565b91886106c7565b50803b15156104b4565b6107e6915060203d6020116102c1576102b28183610e70565b876104a1565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760403660031901126100a257610849610cfc565b610851610d12565b61085f60ff6103d483611008565b9160009160005b60ff821681106108bf5750505061087c81610ec6565b9160005b82811061089557604051806101338682610d6a565b806108a260019284610fde565b516108ad8287610fde565b526108b88186610fde565b5001610880565b604051631acd17f560e31b81526001600160a01b038416600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610cdd575b506001600160a01b038116151580610cd3575b610ba6575b5060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff831117610b9257506040819052632e7a1a8360e01b8152602081605f19846109c087827f000000000000000000000000000000000000000000000000000000000000000060648201611033565b0301816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa91821561028b57600092610b5d575b50506001600160a01b038116151580610b53575b610a20575b50600101610866565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b57600092610b32575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610b0c575b506001600160a01b03908160405194610aa486610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610ae261105e565b60808201528760a0820152610af7828a610fde565b52610b028189610fde565b5001949150610a17565b6001600160a01b03919250610b2b903d806000833e61027c8183610e70565b9190610a8c565b610b4c91925060203d6020116102c1576102b28183610e70565b9087610a51565b50803b1515610a12565b610b8392506060906020903d602011610b8a575b610b7b8285610e70565b010190610f3f565b86806109fe565b3d9150610b71565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b81529194906020836004816001600160a01b0385165afa92831561028b57600093610cb2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b57600194600092610c8c575b506001600160a01b03908160405194610c2586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610c63610fc0565b60808201528560a0820152610c788288610fde565b52610c838187610fde565b5001928561093f565b6001600160a01b03919250610cab903d806000833e61027c8183610e70565b9190610c0d565b610ccc91935060203d6020116102c1576102b28183610e70565b9187610bd7565b50803b151561093a565b610cf6915060203d6020116102c1576102b28183610e70565b86610927565b600435906001600160a01b03821682036100a257565b6024359060ff821682036100a257565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b90602091610d5e81518092818552858086019101610d22565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610d9f575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610e07610df46060808501519060c08091860152840190610d45565b6080808501519084830390850152610d45565b9160a080910151910152990194019401929594939190610d8e565b60c0810190811067ffffffffffffffff821117610e3e57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610e3e57604052565b90601f8019910116810190811067ffffffffffffffff821117610e3e57604052565b67ffffffffffffffff8111610e3e57601f01601f191660200190565b67ffffffffffffffff8111610e3e5760051b60200190565b90610ed082610eae565b604090610edf82519182610e70565b8381528093610ef0601f1991610eae565b019160005b838110610f025750505050565b6020908251610f1081610e22565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610ef5565b908160209103126100a257516001600160a01b03811681036100a25790565b6020818303126100a25780519067ffffffffffffffff82116100a2570181601f820112156100a2578051610f9181610e92565b92610f9f6040519485610e70565b818452602082840101116100a257610fbd9160208085019101610d22565b90565b60405190610fcd82610e54565b6002825261763160f01b6020830152565b8051821015610ff25760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60011b906101fe60fe83169216820361101d57565b634e487b7160e01b600052601160045260246000fd5b939291611059906001600160a01b03604093168652606060208701526060860190610d45565b930152565b6040519061106b82610e54565b60028252613b1960f11b602083015256fea264697066735822122083951a990433399478b293d1c860c5b725a11f7db47b61e057d189f59c9adeeb64736f6c63430008110033", - "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c806326bbd86c146108305780632819f31c146107ec578063315f3c03146103355780635acdcdc6146102f15780638d440ec2146100a75763c866cae31461005e57600080fd5b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100a25760403660031901126100a2576100c0610cfc565b60ff6100ca610d12565b166100d481610ec6565b9160009160006001600160a01b0392837f000000000000000000000000000000000000000000000000000000000000000016915b83811061016157868661011a81610ec6565b9160005b82811061013757604051806101338682610d6a565b0390f35b8061014460019284610fde565b5161014f8287610fde565b5261015a8186610fde565b500161011e565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081604481875afa90811561028b576000916102d2575b508581161515806102c8575b6101b6575b50600101610108565b90956040519063557887a160e11b82526020826004818a87165afa91821561028b57600092610297575b506040516001621794a360e21b03198152926000846004818b85165afa801561028b5788600195948695600093610266575b50816040519461022186610e22565b168452886020850152166040830152606082015261023d610fc0565b60808201528860a0820152610252828b610fde565b5261025d818a610fde565b500195906101ad565b6102849193503d806000833e61027c8183610e70565b810190610f5e565b918d610212565b6040513d6000823e3d90fd5b6102ba91925060203d6020116102c1575b6102b28183610e70565b810190610f3f565b90896101e0565b503d6102a8565b50803b15156101a8565b6102eb915060203d6020116102c1576102b28183610e70565b8861019c565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760803660031901126100a25761034e610cfc565b610356610d12565b906001600160a01b0360443516604435036100a2576064359167ffffffffffffffff83116100a257366023840112156100a257826004013561039781610e92565b936103a56040519586610e70565b81855236602483830101116100a2578160009260246020930183880137850101526103da60ff6103d483611008565b16610ec6565b9260009260005b60ff841681106104395785856103f681610ec6565b9160005b82811061040f57604051806101338682610d6a565b8061041c60019284610fde565b516104278287610fde565b526104328186610fde565b50016103fa565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b576000916107cd575b506001600160a01b0381161515806107c3575b610696575b50604051632e7a1a8360e01b8152602081806104dc858860443560048501611033565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610677575b506001600160a01b03811615158061066d575b61053a575b506001016103e1565b90946040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b5760009261064c575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610626575b506001600160a01b039081604051946105be86610e22565b168452817f000000000000000000000000000000000000000000000000000000000000000016602085015216604083015260608201526105fc61105e565b60808201528860a0820152610611828b610fde565b5261061c818a610fde565b5001959150610531565b6001600160a01b03919250610645903d806000833e61027c8183610e70565b91906105a6565b61066691925060203d6020116102c1576102b28183610e70565b908861056b565b50803b151561052c565b610690915060203d6020116102c1576102b28183610e70565b87610519565b60405163557887a160e11b81529195906020836004816001600160a01b0385165afa92831561028b576000936107a2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b5760019460009261077c575b506001600160a01b0390816040519461071586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610753610fc0565b60808201528660a08201526107688289610fde565b526107738188610fde565b500193866104b9565b6001600160a01b0391925061079b903d806000833e61027c8183610e70565b91906106fd565b6107bc91935060203d6020116102c1576102b28183610e70565b91886106c7565b50803b15156104b4565b6107e6915060203d6020116102c1576102b28183610e70565b876104a1565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760403660031901126100a257610849610cfc565b610851610d12565b61085f60ff6103d483611008565b9160009160005b60ff821681106108bf5750505061087c81610ec6565b9160005b82811061089557604051806101338682610d6a565b806108a260019284610fde565b516108ad8287610fde565b526108b88186610fde565b5001610880565b604051631acd17f560e31b81526001600160a01b038416600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610cdd575b506001600160a01b038116151580610cd3575b610ba6575b5060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff831117610b9257506040819052632e7a1a8360e01b8152602081605f19846109c087827f000000000000000000000000000000000000000000000000000000000000000060648201611033565b0301816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa91821561028b57600092610b5d575b50506001600160a01b038116151580610b53575b610a20575b50600101610866565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b57600092610b32575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610b0c575b506001600160a01b03908160405194610aa486610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610ae261105e565b60808201528760a0820152610af7828a610fde565b52610b028189610fde565b5001949150610a17565b6001600160a01b03919250610b2b903d806000833e61027c8183610e70565b9190610a8c565b610b4c91925060203d6020116102c1576102b28183610e70565b9087610a51565b50803b1515610a12565b610b8392506060906020903d602011610b8a575b610b7b8285610e70565b010190610f3f565b86806109fe565b3d9150610b71565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b81529194906020836004816001600160a01b0385165afa92831561028b57600093610cb2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b57600194600092610c8c575b506001600160a01b03908160405194610c2586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610c63610fc0565b60808201528560a0820152610c788288610fde565b52610c838187610fde565b5001928561093f565b6001600160a01b03919250610cab903d806000833e61027c8183610e70565b9190610c0d565b610ccc91935060203d6020116102c1576102b28183610e70565b9187610bd7565b50803b151561093a565b610cf6915060203d6020116102c1576102b28183610e70565b86610927565b600435906001600160a01b03821682036100a257565b6024359060ff821682036100a257565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b90602091610d5e81518092818552858086019101610d22565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610d9f575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610e07610df46060808501519060c08091860152840190610d45565b6080808501519084830390850152610d45565b9160a080910151910152990194019401929594939190610d8e565b60c0810190811067ffffffffffffffff821117610e3e57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610e3e57604052565b90601f8019910116810190811067ffffffffffffffff821117610e3e57604052565b67ffffffffffffffff8111610e3e57601f01601f191660200190565b67ffffffffffffffff8111610e3e5760051b60200190565b90610ed082610eae565b604090610edf82519182610e70565b8381528093610ef0601f1991610eae565b019160005b838110610f025750505050565b6020908251610f1081610e22565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610ef5565b908160209103126100a257516001600160a01b03811681036100a25790565b6020818303126100a25780519067ffffffffffffffff82116100a2570181601f820112156100a2578051610f9181610e92565b92610f9f6040519485610e70565b818452602082840101116100a257610fbd9160208085019101610d22565b90565b60405190610fcd82610e54565b6002825261763160f01b6020830152565b8051821015610ff25760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60011b906101fe60fe83169216820361101d57565b634e487b7160e01b600052601160045260246000fd5b939291611059906001600160a01b03604093168652606060208701526060860190610d45565b930152565b6040519061106b82610e54565b60028252613b1960f11b602083015256fea264697066735822122083951a990433399478b293d1c860c5b725a11f7db47b61e057d189f59c9adeeb64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/package.json b/packages/common/package.json index d17dddfc6..2f06ca128 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -8,7 +8,18 @@ "author": "livingrockrises ", "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", "license": "MIT", - "main": "dist/src/index.js", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "files": [ "dist/*", "README.md" @@ -21,18 +32,21 @@ "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" }, "scripts": { - "clear": "rm -rf dist artifacts cache src/typechain", - "hardhat-deploy": "hardhat deploy", - "hardhat-node": "hardhat node", - "lint-fix": "eslint -f unix . --fix", - "watch-tsc": "tsc -w --preserveWatchOutput", - "gen:types": "typechain --target=ethers-v5 --out-dir=src/typechain 'abis/*/*.json'", - "tsc": "tsc", - "test": "jest tests/**/*.spec.ts --runInBand", + "unbuild": "rimraf dist *.tsbuildinfo", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "test:file": "jest --config=../../jest.config.js --runInBand", + "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:run": "jest tests/**/*.spec.ts --runInBand", - "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && npm run gen:types && tsc", + "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, @@ -40,23 +54,14 @@ "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" }, "dependencies": { - "@account-abstraction/contracts": "^0.6.0", - "@biconomy/core-types": "^3.1.3", - "@biconomy/node-client": "^3.1.3", - "@ethersproject/abi": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/providers": "^5.7.0", - "@openzeppelin/contracts": "^4.7.3", - "@typechain/ethers-v5": "^10.2.0", - "concurrently": "^7.4.0", - "debug": "^4.3.4", - "ethers": "^5.7.0", - "node-fetch": "^2.7.0", - "typechain": "^8.1.1" + "@alchemy/aa-core": "3.0.0-alpha.4", + "@ethersproject/abstract-signer": "^5.7.0", + "viem": "^2.7.3" }, "devDependencies": { - "@nomicfoundation/hardhat-toolbox": "^1.0.2", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "hardhat": "^2.11.0" + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/common/src/Constants.ts b/packages/common/src/Constants.ts deleted file mode 100644 index 7770b372c..000000000 --- a/packages/common/src/Constants.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { ChainId } from "@biconomy/core-types"; - -export const NODE_CLIENT_URL = "https://sdk-backend.prod.biconomy.io/v1"; - -// eslint-disable-next-line no-unused-vars -export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { - [ChainId.MAINNET]: "https://rpc.ankr.com/eth", - [ChainId.GOERLI]: "https://rpc.ankr.com/eth_goerli", - [ChainId.SEPOLIA]: "https://rpc.ankr.com/eth_sepolia", - [ChainId.POLYGON_MUMBAI]: "https://rpc.ankr.com/polygon_mumbai", - [ChainId.POLYGON_MAINNET]: "https://rpc.ankr.com/polygon", - [ChainId.BSC_TESTNET]: "https://endpoints.omniatech.io/v1/bsc/testnet/public", - [ChainId.BSC_MAINNET]: "https://rpc.ankr.com/bsc", - [ChainId.POLYGON_ZKEVM_TESTNET]: "https://rpc.public.zkevm-test.net", - [ChainId.POLYGON_ZKEVM_MAINNET]: "https://rpc.ankr.com/polygon_zkevm", - [ChainId.ARBITRUM_GOERLI_TESTNET]: "https://goerli-rollup.arbitrum.io/rpc", - [ChainId.ARBITRUM_SEPOLIA]: "https://arbitrum-sepolia.blockpi.network/v1/rpc/public", - [ChainId.ARBITRUM_ONE_MAINNET]: "https://rpc.ankr.com/arbitrum", - [ChainId.ARBITRUM_NOVA_MAINNET]: "https://nova.arbitrum.io/rpc", - [ChainId.OPTIMISM_MAINNET]: "https://mainnet.optimism.io", - [ChainId.OPTIMISM_GOERLI_TESTNET]: "https://goerli.optimism.io", - [ChainId.AVALANCHE_MAINNET]: "https://api.avax.network/ext/bc/C/rpc", - [ChainId.AVALANCHE_TESTNET]: "https://api.avax-test.network/ext/bc/C/rpc", - [ChainId.MOONBEAM_MAINNET]: "https://rpc.api.moonbeam.network", - [ChainId.BASE_GOERLI_TESTNET]: "https://goerli.base.org", - [ChainId.BASE_MAINNET]: "https://developer-access-mainnet.base.org", - [ChainId.LINEA_TESTNET]: "https://rpc.goerli.linea.build", - [ChainId.LINEA_MAINNET]: "https://rpc.linea.build", - [ChainId.MANTLE_MAINNET]: "https://rpc.mantle.xyz", - [ChainId.MANTLE_TESTNET]: "https://rpc.testnet.mantle.xyz", - [ChainId.OPBNB_MAINNET]: "https://opbnb-mainnet-rpc.bnbchain.org", - [ChainId.OPBNB_TESTNET]: "https://opbnb-testnet-rpc.bnbchain.org", - [ChainId.ASTAR_MAINNET]: "https://evm.astar.network", - [ChainId.ASTAR_TESTNET]: "https://evm.shibuya.astar.network", - [ChainId.CHILIZ_MAINNET]: "https://rpc.ankr.com/chiliz", - [ChainId.CHILIZ_TESTNET]: "https://spicy-rpc.chiliz.com", - [ChainId.CORE_MAINNET]: "https://rpc.core.chain.com", - [ChainId.CORE_TESTNET]: "https://rpc.testnet.core.chain.com", - [ChainId.MANTA_PACIFIC_MAINNET]: "https://pacific-rpc.manta.network/http", - [ChainId.MANTA_PACIFIC_TESTNET]: "https://pacific-rpc.testnet.manta.network/http", - [ChainId.CAPX_TESTNET]: "https://capx-zk-rpc.lgns.me/sequencer-api", -}; diff --git a/packages/common/src/ContractsInstances.ts b/packages/common/src/ContractsInstances.ts deleted file mode 100644 index e50294353..000000000 --- a/packages/common/src/ContractsInstances.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { SmartAccountType } from "@biconomy/core-types"; -import { JsonRpcProvider } from "@ethersproject/providers"; -import { IEntryPoint } from "@account-abstraction/contracts"; -import { - EntryPoint_v005__factory, - EntryPoint_v006__factory, - SmartAccount_v100, - SmartAccount_v200, - SmartAccountFactory_v100, - SmartAccountFactory_v200, - SmartAccountFactory_v100__factory, - SmartAccountFactory_v200__factory, - SmartAccount_v100__factory, - SmartAccount_v200__factory, -} from "./typechain"; - -export type GetContractInstanceDto = { - smartAccountType: SmartAccountType; - version: string; - contractAddress: string; - provider: JsonRpcProvider; -}; - -// Note: Review return types while adding new implementations -export function getSAProxyContract(contractInstanceDto: GetContractInstanceDto): SmartAccount_v100 | SmartAccount_v200 { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; - switch (version) { - case "V1_0_0": - if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccount_v100__factory.connect(contractAddress, provider); - } - break; - case "V2_0_0": - if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccount_v200__factory.connect(contractAddress, provider); - } - break; - default: - return SmartAccount_v200__factory.connect(contractAddress, provider); - } - throw new Error("Invalid version or smartAccountType provided for proxy contract instance"); -} - -export function getSAFactoryContract(contractInstanceDto: GetContractInstanceDto): SmartAccountFactory_v100 | SmartAccountFactory_v200 { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; - - switch (version) { - case "V1_0_0": - if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccountFactory_v100__factory.connect(contractAddress, provider); - } - break; - case "V2_0_0": - if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccountFactory_v200__factory.connect(contractAddress, provider); - } - break; - default: - return SmartAccountFactory_v200__factory.connect(contractAddress, provider); - } - throw new Error("Invalid version or smartAccountType provided for factory contract instance"); -} - -export function getEntryPointContract(contractInstanceDto: GetContractInstanceDto): IEntryPoint { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; - - switch (version) { - case "V0_0_5": - if (smartAccountType === SmartAccountType.BICONOMY) { - return EntryPoint_v005__factory.connect(contractAddress, provider); - } - break; - case "V0_0_6": - if (smartAccountType === SmartAccountType.BICONOMY) { - return EntryPoint_v006__factory.connect(contractAddress, provider); - } - break; - default: - return EntryPoint_v006__factory.connect(contractAddress, provider); - } - throw new Error("Invalid version or smartAccountType provided for entrypoint contract instance"); -} diff --git a/packages/common/src/ERC4337Utils.ts b/packages/common/src/ERC4337Utils.ts deleted file mode 100644 index 435e82746..000000000 --- a/packages/common/src/ERC4337Utils.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { defaultAbiCoder, hexConcat, hexlify, keccak256 } from "ethers/lib/utils"; -import { ethers } from "ethers"; -import Debug from "debug"; -import { ChainId, UserOperation } from "@biconomy/core-types"; - -const debug = Debug("aa.utils"); - -export const AddressZero = ethers.constants.AddressZero; - -export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101]; - -// reverse "Deferrable" or "PromiseOrValue" fields -/* eslint-disable @typescript-eslint/no-explicit-any */ -export type NotPromise = { - [P in keyof T]: Exclude>; -}; - -// function encode(typevalues: Array<{ type: string; val: any }>, forSignature: boolean): string { -// const types = typevalues.map((typevalue) => -// typevalue.type === 'bytes' && forSignature ? 'bytes32' : typevalue.type -// ) -// const values = typevalues.map((typevalue) => -// typevalue.type === 'bytes' && forSignature ? keccak256(typevalue.val) : typevalue.val -// ) -// return defaultAbiCoder.encode(types, values) -// } - -/** - * pack the userOperation - * @param op - * @param forSignature "true" if the hash is needed to calculate the getUserOpHash() - * "false" to pack entire UserOp, for calculating the calldata cost of putting it on-chain. - */ -export function packUserOp(op: Partial, forSignature = true): string { - if (!op.initCode || !op.callData || !op.paymasterAndData) throw new Error("Missing userOp properties"); - - if (forSignature) { - return defaultAbiCoder.encode( - ["address", "uint256", "bytes32", "bytes32", "uint256", "uint256", "uint256", "uint256", "uint256", "bytes32"], - [ - op.sender, - op.nonce, - keccak256(op.initCode), - keccak256(op.callData), - op.callGasLimit, - op.verificationGasLimit, - op.preVerificationGas, - op.maxFeePerGas, - op.maxPriorityFeePerGas, - keccak256(op.paymasterAndData), - ], - ); - } else { - // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) - return defaultAbiCoder.encode( - ["address", "uint256", "bytes", "bytes", "uint256", "uint256", "uint256", "uint256", "uint256", "bytes", "bytes"], - [ - op.sender, - op.nonce, - op.initCode, - op.callData, - op.callGasLimit, - op.verificationGasLimit, - op.preVerificationGas, - op.maxFeePerGas, - op.maxPriorityFeePerGas, - op.paymasterAndData, - op.signature, - ], - ); - } -} - -/** - * calculate the userOpHash of a given userOperation. - * The userOpHash is a hash of all UserOperation fields, except the "signature" field. - * The entryPoint uses this value in the emitted UserOperationEvent. - * A wallet may use this value as the hash to sign (the SampleWallet uses this method) - * @param op - * @param entryPoint - * @param chainId - */ -export function getUserOpHash(op: Partial, entryPoint: string, chainId: number): string { - const userOpHash = keccak256(packUserOp(op, true)); - const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, entryPoint, chainId]); - return keccak256(enc); -} - -const ErrorSig = keccak256(Buffer.from("Error(string)")).slice(0, 10); // 0x08c379a0 -const FailedOpSig = keccak256(Buffer.from("FailedOp(uint256,address,string)")).slice(0, 10); // 0x00fa072b - -interface DecodedError { - message: string; - opIndex?: number; - paymaster?: string; -} - -/** - * decode bytes thrown by revert as Error(message) or FailedOp(opIndex,paymaster,message) - */ -export function decodeErrorReason(error: string): DecodedError | undefined { - debug("decoding", error); - if (error.startsWith(ErrorSig)) { - const [message] = defaultAbiCoder.decode(["string"], "0x" + error.substring(10)); - return { message }; - } else if (error.startsWith(FailedOpSig)) { - const resultSet = defaultAbiCoder.decode(["uint256", "address", "string"], "0x" + error.substring(10)); - let [paymaster, message] = resultSet; - const [opIndex] = resultSet; - message = `FailedOp: ${message as string}`; - if (paymaster.toString() !== ethers.constants.AddressZero) { - message = `${message as string} (paymaster ${paymaster as string})`; - } else { - paymaster = undefined; - } - return { - message, - opIndex, - paymaster, - }; - } - return undefined; -} - -/** - * update thrown Error object with our custom FailedOp message, and re-throw it. - * updated both "message" and inner encoded "data" - * tested on geth, hardhat-node - * usage: entryPoint.handleOps().catch(decodeError) - */ -export function rethrowError(e: any): any { - let error = e; - let parent = e; - if (error?.error != null) { - error = error.error; - } - while (error?.data != null) { - parent = error; - error = error.data; - } - const decoded = typeof error === "string" && error.length > 2 ? decodeErrorReason(error) : undefined; - if (decoded != null) { - e.message = decoded.message; - - if (decoded.opIndex != null) { - // helper for chai: convert our FailedOp error into "Error(msg)" - const errorWithMsg = hexConcat([ErrorSig, defaultAbiCoder.encode(["string"], [decoded.message])]); - // modify in-place the error object: - parent.data = errorWithMsg; - } - } - throw e; -} - -/** - * hexlify all members of object, recursively - * @param obj - */ -export function deepHexlify(obj: any): any { - if (typeof obj === "function") { - return undefined; - } - if (obj == null || typeof obj === "string" || typeof obj === "boolean") { - return obj; - } else if (obj._isBigNumber != null || typeof obj !== "object") { - return hexlify(obj).replace(/^0x0/, "0x"); - } - if (Array.isArray(obj)) { - return obj.map((member) => deepHexlify(member)); - } - return Object.keys(obj).reduce( - (set, key) => ({ - ...set, - [key]: deepHexlify(obj[key]), - }), - {}, - ); -} diff --git a/packages/common/src/Utils.ts b/packages/common/src/Utils.ts deleted file mode 100644 index c97c7bc41..000000000 --- a/packages/common/src/Utils.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { BigNumber, Bytes } from "ethers"; - -/** - * @description this function will return current timestamp in seconds - * @returns Number - */ -export const getTimestampInSeconds = (): number => { - return Math.floor(Date.now() / 1000); -}; - -export const isNullOrUndefined = (value: string | number | bigint | BigNumber | Bytes | undefined): value is undefined => { - return value === null || value === undefined; -}; diff --git a/packages/common/src/httpRequests.ts b/packages/common/src/httpRequests.ts deleted file mode 100644 index d4923d2b6..000000000 --- a/packages/common/src/httpRequests.ts +++ /dev/null @@ -1,86 +0,0 @@ -import fetch from "node-fetch"; -import { Logger } from "./Logger"; - -export enum HttpMethod { - Get = "get", - Post = "post", - Delete = "delete", -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -interface HttpRequest { - url: string; - method: HttpMethod; - body?: Record; - headers?: object; -} - -interface JsonResponse { - result?: any; - error?: string | { code?: number; message?: string; handleOpsCallData?: any }; - message?: string; - msg?: string; -} - -export async function sendRequest({ url, method, body, headers = {} }: HttpRequest): Promise { - Logger.log("jsonRpc request body ", JSON.stringify(body)); - const response = await fetch(url, { - method, - headers: { - ...headers, - Accept: "application/json", - "Content-Type": "application/json", - }, - body: JSON.stringify(body), - }); - - let jsonResponse: JsonResponse | undefined; - try { - jsonResponse = (await response.json()) as JsonResponse; - } catch (error) { - if (!response.ok) { - throw new Error(response.statusText); - } - } - - if (!jsonResponse) { - // Handle the case where jsonResponse is undefined - throw new Error("No response received."); - } - - Logger.log("jsonRpc response ", jsonResponse); - - if (response.ok) { - if (jsonResponse && Object.prototype.hasOwnProperty.call(jsonResponse, "result")) { - return jsonResponse as T; - } - // else - } - const errorObject = { code: response.status, message: response.statusText, data: undefined }; - - if (jsonResponse?.error) { - if (typeof jsonResponse.error === "string") { - const error = jsonResponse.error; - errorObject.code = response.status; - errorObject.message = error; - delete errorObject.data; - throw errorObject; - } else if (typeof jsonResponse.error === "object") { - const error = jsonResponse.error; - errorObject.code = error?.code || 0; - errorObject.message = error?.message || "Unknown Error"; - errorObject.data = error?.handleOpsCallData; - throw errorObject; - } - } - if (jsonResponse?.message) { - errorObject.message = jsonResponse.message; - throw errorObject; - } - if (jsonResponse?.msg) { - errorObject.message = jsonResponse.msg; - throw errorObject; - } - - throw new Error("Unknown Error: Raise an issue here https://github.com/bcnmy/biconomy-client-sdk/issues with reproduction steps"); -} diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index a23afa8c6..cca231168 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -1,7 +1,6 @@ -export * from "./ERC4337Utils"; -export * from "./Logger"; -export * from "./httpRequests"; -export * from "./typechain/index"; -export * from "./Utils"; -export * from "./Constants"; -export * from "./ContractsInstances"; +export * from "./utils/Helpers/convertSigner.js"; +export * from "./utils/Types.js"; +export * from "./utils/Constants.js"; +export * from "./utils/Logger.js"; +export * from "./utils/HttpRequests.js"; +export { EthersSigner } from "./utils/EthersSigner.js"; diff --git a/packages/common/src/utils/Constants.ts b/packages/common/src/utils/Constants.ts new file mode 100644 index 000000000..4e3292cb5 --- /dev/null +++ b/packages/common/src/utils/Constants.ts @@ -0,0 +1,7 @@ +import { SupportedSignerName } from "./Types.js"; + +export const UNIQUE_PROPERTIES_PER_SIGNER: Record = { + alchemy: "signerType", + ethers: "provider", + viem: "transport", +}; diff --git a/packages/common/src/utils/EthersSigner.ts b/packages/common/src/utils/EthersSigner.ts new file mode 100644 index 000000000..e0c568803 --- /dev/null +++ b/packages/common/src/utils/EthersSigner.ts @@ -0,0 +1,38 @@ +import { SmartAccountSigner } from "@alchemy/aa-core"; +import { Hex } from "viem"; +import { Signer } from "@ethersproject/abstract-signer"; + +export class EthersSigner implements SmartAccountSigner { + signerType: string = "ethers"; + + inner: T; + + constructor(inner: T, signerType: string) { + this.inner = inner; + this.signerType = signerType; + } + + async getAddress() { + return (await this.inner.getAddress()) as Hex; + } + + async signMessage(message: string | Uint8Array): Promise { + const signature = await this.inner?.signMessage(message); + return this.#correctSignature(signature as Hex); + } + + async signTypedData(_notUsed: any): Promise { + throw new Error("signTypedData is not supported for Ethers Signer"); + } + + #correctSignature = (signature: Hex): Hex => { + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); + } + return signature; + }; +} + +export default EthersSigner; diff --git a/packages/common/src/utils/Helpers/convertSigner.ts b/packages/common/src/utils/Helpers/convertSigner.ts new file mode 100644 index 000000000..23e9691dd --- /dev/null +++ b/packages/common/src/utils/Helpers/convertSigner.ts @@ -0,0 +1,62 @@ +import { EthersSigner } from "../EthersSigner.js"; +import { SupportedSigner } from "../Types"; +import { WalletClient } from "viem"; +import { WalletClientSigner, SmartAccountSigner } from "@alchemy/aa-core"; +import { UNIQUE_PROPERTIES_PER_SIGNER } from "../Constants.js"; +import { Signer } from "@ethersproject/abstract-signer"; + +interface SmartAccountResult { + signer: SmartAccountSigner; + chainId: number | null; + rpcUrl: string | null; +} + +export const convertSigner = async (signer: SupportedSigner, skipChainIdCalls: boolean = false): Promise => { + let resolvedSmartAccountSigner: SmartAccountSigner; + let rpcUrl: string | null = null; + let chainId: number | null = null; + const isAnAlchemySigner = UNIQUE_PROPERTIES_PER_SIGNER.alchemy in signer; + const isAnEthersSigner = UNIQUE_PROPERTIES_PER_SIGNER.ethers in signer; + const isAViemSigner = UNIQUE_PROPERTIES_PER_SIGNER.viem in signer; + + if (!isAnAlchemySigner) { + if (isAnEthersSigner) { + const ethersSigner = signer as Signer; + if (!skipChainIdCalls) { + // If chainId not provided, get it from walletClient + if (!ethersSigner.provider) { + throw new Error("Cannot consume an ethers Wallet without a provider"); + } + const chainIdFromProvider = await ethersSigner.provider.getNetwork(); + if (!chainIdFromProvider?.chainId) { + throw new Error("Cannot consume an ethers Wallet without a chainId"); + } + chainId = Number(chainIdFromProvider.chainId); + } + // convert ethers Wallet to alchemy's SmartAccountSigner under the hood + resolvedSmartAccountSigner = new EthersSigner(ethersSigner, "ethers"); + // @ts-ignore + rpcUrl = ethersSigner.provider?.connection?.url ?? null; + } else if (isAViemSigner) { + const walletClient = signer as WalletClient; + if (!walletClient.account) { + throw new Error("Cannot consume a viem wallet without an account"); + } + if (!skipChainIdCalls) { + // If chainId not provided, get it from walletClient + if (!walletClient.chain) { + throw new Error("Cannot consume a viem wallet without a chainId"); + } + chainId = walletClient.chain.id; + } + // convert viems walletClient to alchemy's SmartAccountSigner under the hood + resolvedSmartAccountSigner = new WalletClientSigner(walletClient, "viem"); + rpcUrl = walletClient?.transport?.url ?? null; + } else { + throw new Error("Unsupported signer"); + } + } else { + resolvedSmartAccountSigner = signer as SmartAccountSigner; + } + return { signer: resolvedSmartAccountSigner, rpcUrl, chainId }; +}; diff --git a/packages/common/src/utils/Helpers/index.ts b/packages/common/src/utils/Helpers/index.ts new file mode 100644 index 000000000..235336dc3 --- /dev/null +++ b/packages/common/src/utils/Helpers/index.ts @@ -0,0 +1 @@ +export * from "./convertSigner.js"; diff --git a/packages/node-client/src/utils/HttpRequests.ts b/packages/common/src/utils/HttpRequests.ts similarity index 82% rename from packages/node-client/src/utils/HttpRequests.ts rename to packages/common/src/utils/HttpRequests.ts index 49cbb7340..429ff1103 100644 --- a/packages/node-client/src/utils/HttpRequests.ts +++ b/packages/common/src/utils/HttpRequests.ts @@ -1,4 +1,5 @@ -import fetch from "node-fetch"; +import { Logger } from "./Logger.js"; +import { Service } from "./Types.js"; export enum HttpMethod { Get = "get", @@ -7,13 +8,13 @@ export enum HttpMethod { } /* eslint-disable @typescript-eslint/no-explicit-any */ -interface HttpRequest { +export interface HttpRequest { url: string; method: HttpMethod; body?: Record; } -export async function sendRequest({ url, method, body }: HttpRequest): Promise { +export async function sendRequest({ url, method, body }: HttpRequest, service: Service): Promise { const response = await fetch(url, { method, headers: { @@ -26,6 +27,7 @@ export async function sendRequest({ url, method, body }: HttpRequest): Promis let jsonResponse; try { jsonResponse = await response.json(); + Logger.log(`${service} RPC Response`, jsonResponse); } catch (error) { if (!response.ok) { throw new Error(response.statusText); @@ -36,7 +38,7 @@ export async function sendRequest({ url, method, body }: HttpRequest): Promis return jsonResponse as T; } if (jsonResponse.error) { - throw new Error(jsonResponse.error); + throw new Error(`${jsonResponse.error.message} from ${service}`); } if (jsonResponse.message) { throw new Error(jsonResponse.message); diff --git a/packages/common/src/Logger.ts b/packages/common/src/utils/Logger.ts similarity index 100% rename from packages/common/src/Logger.ts rename to packages/common/src/utils/Logger.ts diff --git a/packages/common/src/utils/Types.ts b/packages/common/src/utils/Types.ts new file mode 100644 index 000000000..69508e21f --- /dev/null +++ b/packages/common/src/utils/Types.ts @@ -0,0 +1,13 @@ +import { WalletClient } from "viem"; +import { Signer } from "@ethersproject/abstract-signer"; +import { SmartAccountSigner } from "@alchemy/aa-core"; + +export type SupportedSignerName = "alchemy" | "ethers" | "viem"; +export type SupportedSigner = SmartAccountSigner | WalletClient | Signer | LightSigner; + +export type Service = "Bundler" | "Paymaster"; + +export interface LightSigner { + getAddress(): Promise; + signMessage(message: string | Uint8Array): Promise; +} diff --git a/packages/common/tests/ERC4337Utils.spec.ts b/packages/common/tests/ERC4337Utils.spec.ts deleted file mode 100644 index b7a6af546..000000000 --- a/packages/common/tests/ERC4337Utils.spec.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { expect } from "chai"; -import { packUserOp } from "../src/ERC4337Utils"; - -describe("packUserOp", () => { - it("should pack a UserOperationStruct object", () => { - const userOp = { - sender: "0x1234567890123456789012345678901234567890", - nonce: 1, - initCode: "0x0987654321098765432109876543210987654321", - callData: "0x", - callGasLimit: 1000000, - verificationGasLimit: 1000000, - preVerificationGas: 1000000, - maxFeePerGas: 10, - maxPriorityFeePerGas: 1, - paymasterAndData: "0x0987654321098765432109876543210987654321", - signature: "0x", - }; - const packedUserOp = packUserOp(userOp, false); - expect(packedUserOp).to.equal( - "0x00000000000000000000000012345678901234567890123456789012345678900000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001409876543210987654321098765432109876543210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001409876543210987654321098765432109876543210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - ); - }); - - it("should pack a UserOperationStruct object for signature", () => { - const userOp = { - sender: "0x1234567890123456789012345678901234567890", - nonce: 1, - initCode: "0x0987654321098765432109876543210987654321", - callData: "0x", - callGasLimit: 1000000, - verificationGasLimit: 1000000, - preVerificationGas: 1000000, - maxFeePerGas: 10, - maxPriorityFeePerGas: 1, - paymasterAndData: "0x0987654321098765432109876543210987654321", - signature: "0x", - }; - const packedUserOp = packUserOp(userOp, true); - expect(packedUserOp).to.equal( - "0x00000000000000000000000012345678901234567890123456789012345678900000000000000000000000000000000000000000000000000000000000000001a04121637443bf141af4dc01872f24d6933dd1e67581bd12f805a945888da6b0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001a04121637443bf141af4dc01872f24d6933dd1e67581bd12f805a945888da6b0", - ); - }); -}); diff --git a/packages/common/tsconfig.build.json b/packages/common/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/common/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index 7584e7676..d9b305a9a 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -3,7 +3,11 @@ "compilerOptions": { "composite": true, "outDir": "dist", - "baseUrl": "src" + "baseUrl": "src", + "resolveJsonModule": true, + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"] }, - "include": ["./**/*.ts"] + "include": ["src", "src/**/*.json"] } diff --git a/packages/core-types/CHANGELOG.md b/packages/core-types/CHANGELOG.md deleted file mode 100644 index 0301480be..000000000 --- a/packages/core-types/CHANGELOG.md +++ /dev/null @@ -1,102 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 3.1.3 (2023-12-28) - -VERSION Bump Only. - -## 3.1.2 (2023-12-28) - -VERSION Bump Only. - -## 3.1.1 (2023-11-09) - - -### Features - -* add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) - - - -## 3.1.0 (2023-09-20) - - -### Bug Fixes - -* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -* build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) -* bundler sync changes ([eb9b30d](https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e)) -* logic update ([41c4aec](https://github.com/bcnmy/biconomy-client-sdk/commit/41c4aec8ab5012b7ad362b2870966bd607e38636)) -* multisend bundle ([5f55587](https://github.com/bcnmy/biconomy-client-sdk/commit/5f55587b63c82a30652843fe619d8b891e495399)) -* optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) - - -### Features - -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) -* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) -* chain integrations ([9af2da0](https://github.com/bcnmy/biconomy-client-sdk/commit/9af2da03820a26ac7d21301c32de041ced6c5e43)) -* fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) - - - - - -## 3.0.0 (2023-08-28) - -### Features - -- base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) - -# 3.1.0-alpha.0 (2023-07-24) - -VERSION Bump Only. - -# 3.1.0-alpha.0 (2023-07-24) - -### Features - -- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - -## 3.1.0-alpha.0 (2023-07-12) - -### Bug Fixes - -- bundler sync changes ([eb9b30d](https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e)) - -## 2.0.2 (2023-06-10) - -- smart account state types to have factory address added - -## 2.0.1 (2023-05-18) - -### Bug Fixes - -- logic update ([41c4aec](https://github.com/bcnmy/biconomy-client-sdk/commit/41c4aec8ab5012b7ad362b2870966bd607e38636)) -- fix build issue in angular for relative path (https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e) - -### Features - -- chain integrations ([9af2da0](https://github.com/bcnmy/biconomy-client-sdk/commit/9af2da03820a26ac7d21301c32de041ced6c5e43)) -- Type added for PaymasterServiceData + reordering of params ([fae8b3a](https://github.com/bcnmy/biconomy-client-sdk/commit/fae8b3a02a5e810a9a40674d27f389b89199bb62)) -- logic changed to accept paymasterServiceData ([6daaf37](https://github.com/bcnmy/biconomy-client-sdk/commit/6daaf37855a13fa6e12fdbab16a7e980b4631475)) -- UserOpGasFields for fetching gas and gas prices from bundler (https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1) -- skipBundlerGasEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) -- fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) - -## 2.0.0 (2023-04-07) - -### Bug Fixes - -- backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -- multisend bundle ([5f55587](https://github.com/bcnmy/biconomy-client-sdk/commit/5f55587b63c82a30652843fe619d8b891e495399)) -- optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) - -## 1.0.0 (2023-01-03) - -### Bug Fixes - -- optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) diff --git a/packages/core-types/README.md b/packages/core-types/README.md deleted file mode 100644 index 4fcf8c7bf..000000000 --- a/packages/core-types/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# `@biconomy/core-types` - -# Biconomy SDK Types - -Common types in the [Biconomy SDK](https://github.com/bcnmy/biconomy-client-sdk) - -### Usage - -for example - -```typescript -import { SmartAccountState, SmartAccountVersion, GasLimit, ChainId } from "@biconomy/core-types"; -``` diff --git a/packages/core-types/package.json b/packages/core-types/package.json deleted file mode 100644 index 42d74006e..000000000 --- a/packages/core-types/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "@biconomy/core-types", - "version": "3.1.3", - "description": "Biconomy Client SDK types", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", - "keywords": [ - "Ethereum", - "Gnosis", - "Biconomy", - "SDK" - ], - "scripts": { - "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" - }, - "author": "Biconomy (https://biconomy.io)", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "devDependencies": { - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "prettier": "^2.6.2", - "typescript": "^4.6.3" - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@ethersproject/providers": "^5.7.0", - "ethers": "^5.7.2", - "web3-core": "^1.7.1" - } -} diff --git a/packages/core-types/src/BundlerTypes.ts b/packages/core-types/src/BundlerTypes.ts deleted file mode 100644 index 9397dc7fd..000000000 --- a/packages/core-types/src/BundlerTypes.ts +++ /dev/null @@ -1,8 +0,0 @@ -export type UserOpGasFields = { - maxPriorityFeePerGas: string | null; - maxFeePerGas: string | null; - gasPrice: string | null; - callGasLimit: number; - verificationGasLimit: number; - preVerificationGas: number; -}; diff --git a/packages/core-types/src/ChainsTypes.ts b/packages/core-types/src/ChainsTypes.ts deleted file mode 100644 index fa6c238a4..000000000 --- a/packages/core-types/src/ChainsTypes.ts +++ /dev/null @@ -1,39 +0,0 @@ -export enum ChainId { - // Ethereum - MAINNET = 1, - GOERLI = 5, - SEPOLIA = 11155111, - POLYGON_MUMBAI = 80001, - POLYGON_MAINNET = 137, - BSC_TESTNET = 97, - BSC_MAINNET = 56, - POLYGON_ZKEVM_TESTNET = 1442, - POLYGON_ZKEVM_MAINNET = 1101, - ARBITRUM_GOERLI_TESTNET = 421613, - ARBITRUM_SEPOLIA = 421614, - ARBITRUM_ONE_MAINNET = 42161, - ARBITRUM_NOVA_MAINNET = 42170, - OPTIMISM_MAINNET = 10, - OPTIMISM_GOERLI_TESTNET = 420, - AVALANCHE_MAINNET = 43114, - AVALANCHE_TESTNET = 43113, - MOONBEAM_MAINNET = 1284, - BASE_GOERLI_TESTNET = 84531, - BASE_MAINNET = 8453, - LINEA_TESTNET = 59140, - LINEA_MAINNET = 59144, - MANTLE_MAINNET = 5000, - MANTLE_TESTNET = 5001, - OPBNB_MAINNET = 204, - OPBNB_TESTNET = 5611, - ASTAR_MAINNET = 592, - ASTAR_TESTNET = 81, - CHILIZ_MAINNET = 88888, - CHILIZ_TESTNET = 88882, - CORE_MAINNET = 1116, - CORE_TESTNET = 1115, - MANTA_PACIFIC_MAINNET = 169, - MANTA_PACIFIC_TESTNET = 3441005, - CAPX_TESTNET = 7116, - GANACHE = 1337, //Temp -} diff --git a/packages/core-types/src/PaymasterServiceTypes.ts b/packages/core-types/src/PaymasterServiceTypes.ts deleted file mode 100644 index c5d3f4bb5..000000000 --- a/packages/core-types/src/PaymasterServiceTypes.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type PaymasterServiceDataType = { - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }; -}; diff --git a/packages/core-types/src/Types.ts b/packages/core-types/src/Types.ts deleted file mode 100644 index 529102c99..000000000 --- a/packages/core-types/src/Types.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { BigNumberish, BytesLike } from "ethers"; - -export type SmartAccountVersion = "1.0.1" | "1.0.0" | "1.0.2"; - -export type Transaction = { - to: string; - value?: BigNumberish; - data?: string; -}; - -export type UserOperation = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; -}; - -export enum SmartAccountType { - BICONOMY, -} diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts deleted file mode 100644 index dffce0c18..000000000 --- a/packages/core-types/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./Types"; -export * from "./ChainsTypes"; diff --git a/packages/core-types/tests/core-types.spec.ts b/packages/core-types/tests/core-types.spec.ts deleted file mode 100644 index 3f9a6a4bb..000000000 --- a/packages/core-types/tests/core-types.spec.ts +++ /dev/null @@ -1,5 +0,0 @@ -describe("Core Types Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); - }); -}); diff --git a/packages/core-types/tsconfig.json b/packages/core-types/tsconfig.json deleted file mode 100644 index c7ff8535e..000000000 --- a/packages/core-types/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src" - }, - "include": ["src"] -} diff --git a/packages/modules/.esbuild.js b/packages/modules/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/modules/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/modules/package.json b/packages/modules/package.json index 68b5ff7c8..93bb8d6d6 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -2,8 +2,18 @@ "name": "@biconomy/modules", "version": "3.1.3", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "keywords": [ "Smart Account", "ERC-4337", @@ -15,7 +25,16 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "test:file": "TS_NODE_PROJECT=../../tsconfig.json mocha -r ts-node/register --timeout 30000", "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:cov": "jest --coverage", @@ -24,7 +43,7 @@ "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, - "author": "livingrockrises ", + "author": "Biconomy", "license": "MIT", "files": [ "dist/*", @@ -34,12 +53,15 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "^1.2.2", + "@alchemy/aa-core": "3.0.0-alpha.4", "@biconomy/common": "^3.1.3", - "@biconomy/core-types": "^3.1.3", - "@biconomy/node-client": "^3.1.3", - "ethereumjs-util": "^7.1.5", - "ethers": "^5.7.2", - "merkletreejs": "^0.3.9" + "merkletreejs": "^0.3.11", + "viem": "^2.7.3" + }, + "devDependencies": { + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/modules/src/BaseValidationModule.ts b/packages/modules/src/BaseValidationModule.ts index 1fc777e70..525fe122d 100644 --- a/packages/modules/src/BaseValidationModule.ts +++ b/packages/modules/src/BaseValidationModule.ts @@ -1,12 +1,11 @@ -import { Signer } from "ethers"; -import { Bytes } from "ethers/lib/utils"; -import { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types"; -import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; -import { IValidationModule } from "./interfaces/IValidationModule"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { Hex } from "viem"; +import { SmartAccountSigner } from "@alchemy/aa-core"; +import { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types.js"; +import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants.js"; +import { IValidationModule } from "./interfaces/IValidationModule.js"; export abstract class BaseValidationModule implements IValidationModule { - entryPointAddress: string; + entryPointAddress: Hex; constructor(moduleConfig: BaseValidationModuleConfig) { const { entryPointAddress } = moduleConfig; @@ -14,25 +13,25 @@ export abstract class BaseValidationModule implements IValidationModule { this.entryPointAddress = entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS; } - abstract getAddress(): string; + abstract getAddress(): Hex; - setEntryPointAddress(entryPointAddress: string): void { + setEntryPointAddress(entryPointAddress: Hex): void { this.entryPointAddress = entryPointAddress; } - abstract getInitData(): Promise; + abstract getInitData(): Promise; // Anything required to get dummy signature can be passed as params - abstract getDummySignature(_params?: ModuleInfo): Promise; + abstract getDummySignature(_params?: ModuleInfo): Promise; - abstract getSigner(): Promise; + abstract getSigner(): Promise; // Signer specific or any other additional information can be passed as params - abstract signUserOpHash(_userOpHash: string, _params?: ModuleInfo): Promise; + abstract signUserOpHash(_userOpHash: string, _params?: ModuleInfo): Promise; - abstract signMessage(_message: Bytes | string | Uint8Array): Promise; + abstract signMessage(_message: Uint8Array | string): Promise; - async signMessageWalletClientSigner(message: string | Uint8Array, signer: WalletClientSigner): Promise { + async signMessageSmartAccountSigner(message: string | Uint8Array, signer: SmartAccountSigner): Promise { let signature: `0x${string}` = await signer.signMessage(message); const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); @@ -43,16 +42,4 @@ export abstract class BaseValidationModule implements IValidationModule { return signature; } - - async signMessageSigner(message: Bytes | string, signer: Signer): Promise { - let signature = await signer.signMessage(message); - - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); - } - - return signature; - } } diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index ffd273223..8108f97ef 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -1,26 +1,26 @@ -import { Signer, ethers } from "ethers"; -import { Logger } from "@biconomy/common"; -import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from "ethers/lib/utils"; -import { ModuleVersion, CreateSessionDataParams, BatchedSessionRouterModuleConfig, ModuleInfo, CreateSessionDataResponse } from "./utils/Types"; +import { ModuleVersion, CreateSessionDataParams, BatchedSessionRouterModuleConfig, ModuleInfo, CreateSessionDataResponse } from "./utils/Types.js"; import { BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE, DEFAULT_BATCHED_SESSION_ROUTER_MODULE, -} from "./utils/Constants"; -import { BaseValidationModule } from "./BaseValidationModule"; -import { SessionKeyManagerModule } from "./SessionKeyManagerModule"; -import { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; +} from "./utils/Constants.js"; +import { BaseValidationModule } from "./BaseValidationModule.js"; +import { SessionKeyManagerModule } from "./SessionKeyManagerModule.js"; +import { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage.js"; +import { Hex, concat, encodeAbiParameters, keccak256, pad, parseAbiParameters, toBytes, toHex } from "viem"; +import { SmartAccountSigner } from "@alchemy/aa-core"; +import { convertSigner } from "@biconomy/common"; export class BatchedSessionRouterModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; - moduleAddress!: string; + moduleAddress!: Hex; - sessionManagerModuleAddress!: string; + sessionManagerModuleAddress!: Hex; sessionKeyManagerModule!: SessionKeyManagerModule; - readonly mockEcdsaSessionKeySig: string = + readonly mockEcdsaSessionKeySig: Hex = "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; /** @@ -43,7 +43,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; + const moduleAddr = BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } @@ -89,7 +89,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @param sessionParams Information about all the sessions to be used to sign the user operation which has a batch execution * @returns The signature of the user operation */ - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { + async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { const sessionParams = params?.batchSessionParams; if (!sessionParams || sessionParams.length === 0) { throw new Error("Session parameters are not provided"); @@ -98,9 +98,9 @@ export class BatchedSessionRouterModule extends BaseValidationModule { const sessionDataTupleArray = []; // signer must be the same for all the sessions - const sessionSigner = sessionParams[0].sessionSigner; + const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner); - const signature = await sessionSigner.signMessage(arrayify(userOpHash)); + const signature = await sessionSigner.signMessage(toBytes(userOpHash)); for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { @@ -129,14 +129,14 @@ export class BatchedSessionRouterModule extends BaseValidationModule { sessionDataTuple.push(sessionSignerData.sessionValidationModule); sessionDataTuple.push(sessionSignerData.sessionKeyData); - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), - hexZeroPad(sessionSignerData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), sessionSignerData.sessionKeyData, ]); - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); + const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(keccak256(leafDataHex)); sessionDataTuple.push(proof); sessionDataTuple.push(sessionParam.additionalSessionData ?? "0x"); @@ -146,10 +146,11 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // Generate the padded signature - const paddedSignature = defaultAbiCoder.encode( - ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], - [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature], - ); + const paddedSignature = encodeAbiParameters(parseAbiParameters("address, tuple(uint48,uint48,address,bytes,bytes32[],bytes)[], bytes"), [ + this.getSessionKeyManagerAddress(), + sessionDataTupleArray, + signature, + ]); return paddedSignature; } @@ -175,21 +176,21 @@ export class BatchedSessionRouterModule extends BaseValidationModule { /** * @returns SessionKeyManagerModule address */ - getAddress(): string { + getAddress(): Hex { return this.moduleAddress; } /** * @returns SessionKeyManagerModule address */ - getSessionKeyManagerAddress(): string { + getSessionKeyManagerAddress(): Hex { return this.sessionManagerModuleAddress; } /** * @remarks This is the version of the module contract */ - async getSigner(): Promise { + async getSigner(): Promise { throw new Error("Method not implemented."); } @@ -197,7 +198,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @remarks This is the dummy signature for the module, used in buildUserOp for bundler estimation * @returns Dummy signature */ - async getDummySignature(params?: ModuleInfo): Promise { + async getDummySignature(params?: ModuleInfo): Promise { const sessionParams = params?.batchSessionParams; if (!sessionParams || sessionParams.length === 0) { throw new Error("Session parameters are not provided"); @@ -208,7 +209,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // if needed we could do mock signature over userOpHashAndModuleAddress // signer must be the same for all the sessions - const sessionSigner = sessionParams[0].sessionSigner; + const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner); for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { @@ -237,14 +238,14 @@ export class BatchedSessionRouterModule extends BaseValidationModule { sessionDataTuple.push(sessionSignerData.sessionValidationModule); sessionDataTuple.push(sessionSignerData.sessionKeyData); - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), - hexZeroPad(sessionSignerData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), sessionSignerData.sessionKeyData, ]); - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); + const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(keccak256(leafDataHex)); sessionDataTuple.push(proof); sessionDataTuple.push(sessionParam.additionalSessionData ?? "0x"); @@ -254,28 +255,27 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // Generate the padded signature - const paddedSignature = defaultAbiCoder.encode( - ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], - [this.getSessionKeyManagerAddress(), sessionDataTupleArray, this.mockEcdsaSessionKeySig], - ); - - const dummySig = ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [paddedSignature, this.getAddress()]); + const paddedSignature = encodeAbiParameters(parseAbiParameters("address, tuple(uint48,uint48,address,bytes,bytes32[],bytes)[], bytes"), [ + this.getSessionKeyManagerAddress(), + sessionDataTupleArray, + this.mockEcdsaSessionKeySig, + ]); + const dummySig = encodeAbiParameters(parseAbiParameters("bytes, address"), [paddedSignature, this.getAddress()]); return dummySig; } /** * @remarks Other modules may need additional attributes to build init data */ - async getInitData(): Promise { + async getInitData(): Promise { throw new Error("Method not implemented."); } /** * @remarks This Module dont have knowledge of signer. So, this method is not implemented */ - async signMessage(message: Bytes | string): Promise { - Logger.log("message", message); + async signMessage(_message: Uint8Array | string): Promise { throw new Error("Method not implemented."); } } diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index 613623560..737a43d07 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -1,29 +1,34 @@ -import { Logger } from "@biconomy/common"; -import { Signer, ethers } from "ethers"; -import { Bytes, arrayify } from "ethers/lib/utils"; -import { ECDSAOwnershipValidationModuleConfig, ModuleVersion } from "./utils/Types"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; -import { BaseValidationModule } from "./BaseValidationModule"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { Hex, encodeFunctionData, getAddress, parseAbi, toBytes } from "viem"; +import { SmartAccountSigner } from "@alchemy/aa-core"; +import { ECDSAOwnershipValidationModuleConfig, ECDSAOwnershipValidationModuleConfigConstructorProps, ModuleVersion } from "./utils/Types.js"; +import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants.js"; +import { convertSigner } from "@biconomy/common"; +import { BaseValidationModule } from "./BaseValidationModule.js"; // Could be renamed with suffix API export class ECDSAOwnershipValidationModule extends BaseValidationModule { - signer!: Signer | WalletClientSigner; + signer: SmartAccountSigner; - moduleAddress!: string; + moduleAddress!: Hex; version: ModuleVersion = "V1_0_0"; - private constructor(moduleConfig: ECDSAOwnershipValidationModuleConfig) { + private constructor(moduleConfig: ECDSAOwnershipValidationModuleConfigConstructorProps) { super(moduleConfig); + this.signer = moduleConfig.signer; } public static async create(moduleConfig: ECDSAOwnershipValidationModuleConfig): Promise { - const instance = new ECDSAOwnershipValidationModule(moduleConfig); + // Signer needs to be initialised here before defaultValidationModule is set + const { signer } = await convertSigner(moduleConfig.signer, true); + const configForConstructor: ECDSAOwnershipValidationModuleConfigConstructorProps = { ...moduleConfig, signer }; + + // TODO: (Joe) stop doing things in a 'create' call after the instance has been created + const instance = new ECDSAOwnershipValidationModule(configForConstructor); if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; + const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } @@ -33,55 +38,55 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { instance.moduleAddress = DEFAULT_ECDSA_OWNERSHIP_MODULE; // Note: in this case Version remains the default one } - instance.signer = moduleConfig.signer; return instance; } - getAddress(): string { + getAddress(): Hex { return this.moduleAddress; } - async getSigner(): Promise { + async getSigner(): Promise { return Promise.resolve(this.signer); } - async getDummySignature(): Promise { - const moduleAddress = ethers.utils.getAddress(this.getAddress()); + async getDummySignature(): Promise { + const moduleAddress = getAddress(this.getAddress()); const dynamicPart = moduleAddress.substring(2).padEnd(40, "0"); return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000`; } // Note: other modules may need additional attributes to build init data - async getInitData(): Promise { + async getInitData(): Promise { const ecdsaOwnerAddress = await this.signer.getAddress(); - const moduleRegistryAbi = "function initForSmartAccount(address owner)"; - const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]); - const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData("initForSmartAccount", [ecdsaOwnerAddress]); + const moduleRegistryParsedAbi = parseAbi(["function initForSmartAccount(address owner)"]); + const ecdsaOwnershipInitData = encodeFunctionData({ + abi: moduleRegistryParsedAbi, + functionName: "initForSmartAccount", + args: [ecdsaOwnerAddress], + }); return ecdsaOwnershipInitData; } - async signUserOpHash(userOpHash: string): Promise { - const sig = await this.signer.signMessage(arrayify(userOpHash)); - - Logger.log("ecdsa signature ", sig); - + async signUserOpHash(userOpHash: string): Promise { + const sig = await this.signer.signMessage(toBytes(userOpHash)); return sig; } /** * Signs a message using the appropriate method based on the type of signer. * - * @param {Bytes | string | Uint8Array} message - The message to be signed. + * @param {Uint8Array | string} message - The message to be signed. * @returns {Promise} A promise resolving to the signature or error message. * @throws {Error} If the signer type is invalid or unsupported. */ - async signMessage(message: Bytes | string | Uint8Array): Promise { - if (this.signer instanceof WalletClientSigner) { - return super.signMessageWalletClientSigner(message as Uint8Array | string, this.signer as WalletClientSigner); - } else if (this.signer instanceof Signer) { - return super.signMessageSigner(message as Bytes | string, this.signer as Signer); - } else { - throw new Error("Invalid signer type"); + async signMessage(message: Uint8Array | string): Promise { + let signature = await this.signer.signMessage(message); + + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); } + return signature; } } diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index 3398fdc1c..e51aae190 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -1,29 +1,40 @@ -import { UserOperation } from "@biconomy/core-types"; -import { Logger, getUserOpHash } from "@biconomy/common"; -import { Signer, ethers } from "ethers"; -import MerkleTree from "merkletreejs"; -import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; -import { keccak256, arrayify, defaultAbiCoder, hexConcat, hexZeroPad, Bytes } from "ethers/lib/utils"; -import { ModuleVersion, MultiChainUserOpDto, MultiChainValidationModuleConfig } from "./utils/Types"; -import { BaseValidationModule } from "./BaseValidationModule"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { Hex, concat, encodeAbiParameters, encodeFunctionData, getAddress, keccak256, pad, parseAbi, parseAbiParameters, toBytes, toHex } from "viem"; +import { UserOperationStruct, SmartAccountSigner } from "@alchemy/aa-core"; +import { MerkleTree } from "merkletreejs"; +import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants.js"; +import { + ModuleVersion, + MultiChainUserOpDto, + MultiChainValidationModuleConfig, + MultiChainValidationModuleConfigConstructorProps, +} from "./utils/Types.js"; +import { BaseValidationModule } from "./BaseValidationModule.js"; +import { getUserOpHash } from "./utils/Helper.js"; +import { convertSigner, Logger } from "@biconomy/common"; + export class MultiChainValidationModule extends BaseValidationModule { - signer!: Signer | WalletClientSigner; + signer: SmartAccountSigner; - moduleAddress!: string; + moduleAddress!: Hex; version: ModuleVersion = "V1_0_0"; - private constructor(moduleConfig: MultiChainValidationModuleConfig) { + private constructor(moduleConfig: MultiChainValidationModuleConfigConstructorProps) { super(moduleConfig); + this.signer = moduleConfig.signer; } public static async create(moduleConfig: MultiChainValidationModuleConfig): Promise { - const instance = new MultiChainValidationModule(moduleConfig); + // Signer needs to be initialised here before defaultValidationModule is set + const { signer } = await convertSigner(moduleConfig.signer, true); + const configForConstructor: MultiChainValidationModuleConfigConstructorProps = { ...moduleConfig, signer }; + + // TODO: (Joe) stop doing things in a 'create' call after the instance has been created + const instance = new MultiChainValidationModule(configForConstructor); if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; + const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } @@ -33,59 +44,59 @@ export class MultiChainValidationModule extends BaseValidationModule { instance.moduleAddress = DEFAULT_MULTICHAIN_MODULE; // Note: in this case Version remains the default one } - instance.signer = moduleConfig.signer; return instance; } - getAddress(): string { + getAddress(): Hex { return this.moduleAddress; } - async getSigner(): Promise { + async getSigner(): Promise { return Promise.resolve(this.signer); } - async getDummySignature(): Promise { - const moduleAddress = ethers.utils.getAddress(this.getAddress()); + async getDummySignature(): Promise { + const moduleAddress = getAddress(this.getAddress()); const dynamicPart = moduleAddress.substring(2).padEnd(40, "0"); return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000`; } // Note: other modules may need additional attributes to build init data - async getInitData(): Promise { + async getInitData(): Promise { const ecdsaOwnerAddress = await this.signer.getAddress(); - const moduleRegistryAbi = "function initForSmartAccount(address owner)"; - const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]); - const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData("initForSmartAccount", [ecdsaOwnerAddress]); + const moduleRegistryParsedAbi = parseAbi(["function initForSmartAccount(address owner)"]); + const ecdsaOwnershipInitData = encodeFunctionData({ + abi: moduleRegistryParsedAbi, + functionName: "initForSmartAccount", + args: [ecdsaOwnerAddress], + }); return ecdsaOwnershipInitData; } - async signUserOpHash(userOpHash: string): Promise { - const sig = await this.signer.signMessage(arrayify(userOpHash)); - - Logger.log("ecdsa signature ", sig); - + async signUserOpHash(userOpHash: string): Promise { + const sig = await this.signer.signMessage(toBytes(userOpHash)); return sig; } /** * Signs a message using the appropriate method based on the type of signer. * - * @param {Bytes | string | Uint8Array} message - The message to be signed. + * @param {Uint8Array | string} message - The message to be signed. * @returns {Promise} A promise resolving to the signature or error message. * @throws {Error} If the signer type is invalid or unsupported. */ - async signMessage(message: Bytes | string | Uint8Array): Promise { - if (this.signer instanceof WalletClientSigner) { - return super.signMessageWalletClientSigner(message as Uint8Array | string, this.signer as WalletClientSigner); - } else if (this.signer instanceof Signer) { - return super.signMessageSigner(message as Bytes | string, this.signer as Signer); - } else { - throw new Error("Invalid signer type"); + async signMessage(message: Uint8Array | string): Promise { + let signature = await this.signer.signMessage(message); + + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); } + return signature; } - async signUserOps(multiChainUserOps: MultiChainUserOpDto[]): Promise { + async signUserOps(multiChainUserOps: MultiChainUserOpDto[]): Promise { try { const leaves: string[] = []; @@ -93,10 +104,10 @@ export class MultiChainValidationModule extends BaseValidationModule { for (const multiChainOp of multiChainUserOps) { const validUntil = multiChainOp.validUntil ?? 0; const validAfter = multiChainOp.validAfter ?? 0; - const leaf = hexConcat([ - hexZeroPad(ethers.utils.hexlify(validUntil), 6), - hexZeroPad(ethers.utils.hexlify(validAfter), 6), - hexZeroPad(getUserOpHash(multiChainOp.userOp, this.entryPointAddress, multiChainOp.chainId), 32), + const leaf = concat([ + pad(toHex(validUntil), { size: 6 }), + pad(toHex(validAfter), { size: 6 }), + pad(getUserOpHash(multiChainOp.userOp, this.entryPointAddress, multiChainOp.chainId), { size: 32 }), ]); leaves.push(keccak256(leaf)); @@ -105,7 +116,7 @@ export class MultiChainValidationModule extends BaseValidationModule { // Create a new Merkle tree using the leaves array const merkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true }); - let multichainSignature = await this.signer.signMessage(arrayify(merkleTree.getHexRoot())); + let multichainSignature = await this.signer.signMessage(toBytes(merkleTree.getHexRoot())); const potentiallyIncorrectV = parseInt(multichainSignature.slice(-2), 16); if (![27, 28].includes(potentiallyIncorrectV)) { @@ -114,38 +125,37 @@ export class MultiChainValidationModule extends BaseValidationModule { } // Create an array to store updated userOps - const updatedUserOps: UserOperation[] = []; - - Logger.log("merkle root ", merkleTree.getHexRoot()); + const updatedUserOps: UserOperationStruct[] = []; for (let i = 0; i < leaves.length; i++) { const merkleProof = merkleTree.getHexProof(leaves[i]); - Logger.log("merkle proof ", merkleProof); - const validUntil = multiChainUserOps[i].validUntil ?? 0; const validAfter = multiChainUserOps[i].validAfter ?? 0; // Create the moduleSignature - const moduleSignature = defaultAbiCoder.encode( - ["uint48", "uint48", "bytes32", "bytes32[]", "bytes"], - [validUntil, validAfter, merkleTree.getHexRoot(), merkleProof, multichainSignature], - ); + const moduleSignature = encodeAbiParameters(parseAbiParameters(["uint48, uint48, bytes32, bytes32[], bytes"]), [ + validUntil, + validAfter, + merkleTree.getHexRoot() as Hex, + merkleProof as Hex[], + multichainSignature as Hex, + ]); // Note: Because accountV2 does not directly call this method. hence we need to add validation module address to the signature - const signatureWithModuleAddress = defaultAbiCoder.encode(["bytes", "address"], [moduleSignature, this.getAddress()]); + const signatureWithModuleAddress = encodeAbiParameters(parseAbiParameters(["bytes, address"]), [moduleSignature, this.getAddress()]); // Update userOp with the final signature - const updatedUserOp: UserOperation = { - ...(multiChainUserOps[i].userOp as UserOperation), - signature: signatureWithModuleAddress, + const updatedUserOp: UserOperationStruct = { + ...(multiChainUserOps[i].userOp as UserOperationStruct), + signature: signatureWithModuleAddress as `0x${string}`, }; updatedUserOps.push(updatedUserOp); } return updatedUserOps; } catch (error) { - Logger.error("Error in signing multi chain userops", error); + Logger.error("Error in signing multi chain userops"); throw new Error(JSON.stringify(error)); } } diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index 23e0b8770..f8e49d859 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -1,8 +1,6 @@ -import { Signer, ethers } from "ethers"; -import MerkleTree from "merkletreejs"; -import { NODE_CLIENT_URL, Logger } from "@biconomy/common"; -import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from "ethers/lib/utils"; -import { keccak256 } from "ethereumjs-util"; +import { Hex, concat, encodeAbiParameters, encodeFunctionData, keccak256, pad, parseAbi, parseAbiParameters, toBytes, toHex } from "viem"; +import { MerkleTree } from "merkletreejs"; +import { SmartAccountSigner } from "@alchemy/aa-core"; import { SessionKeyManagerModuleConfig, ModuleVersion, @@ -10,27 +8,24 @@ import { ModuleInfo, CreateSessionDataResponse, StorageType, -} from "./utils/Types"; -import NodeClient from "@biconomy/node-client"; -import INodeClient from "@biconomy/node-client"; -import { SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "./utils/Constants"; -import { generateRandomHex } from "./utils/Uid"; -import { BaseValidationModule } from "./BaseValidationModule"; -import { SessionLocalStorage } from "./session-storage/SessionLocalStorage"; -import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; +} from "./utils/Types.js"; +import { SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "./utils/Constants.js"; +import { generateRandomHex } from "./utils/Uid.js"; +import { BaseValidationModule } from "./BaseValidationModule.js"; +import { SessionLocalStorage } from "./session-storage/SessionLocalStorage.js"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage.js"; +import { convertSigner } from "@biconomy/common"; export class SessionKeyManagerModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; - moduleAddress!: string; - - nodeClient!: INodeClient; + moduleAddress!: Hex; merkleTree!: MerkleTree; sessionStorageClient!: ISessionStorage; - readonly mockEcdsaSessionKeySig: string = + readonly mockEcdsaSessionKeySig: Hex = "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; /** @@ -48,12 +43,13 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns A Promise that resolves to an instance of SessionKeyManagerModule */ public static async create(moduleConfig: SessionKeyManagerModuleConfig): Promise { + // TODO: (Joe) stop doing things in a 'create' call after the instance has been created const instance = new SessionKeyManagerModule(moduleConfig); if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; + const moduleAddr = SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } @@ -63,9 +59,6 @@ export class SessionKeyManagerModule extends BaseValidationModule { instance.moduleAddress = DEFAULT_SESSION_KEY_MANAGER_MODULE; // Note: in this case Version remains the default one } - instance.nodeClient = new NodeClient({ - txServiceUrl: moduleConfig.nodeClientUrl ?? NODE_CLIENT_URL, - }); if (moduleConfig.sessionStorageClient) { instance.sessionStorageClient = moduleConfig.sessionStorageClient; @@ -81,13 +74,13 @@ export class SessionKeyManagerModule extends BaseValidationModule { const existingSessionData = await instance.sessionStorageClient.getAllSessionData(); const existingSessionDataLeafs = existingSessionData.map((sessionData) => { - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionData.validAfter), 6), - hexZeroPad(sessionData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionData.validUntil), { size: 6 }), + pad(toHex(sessionData.validAfter), { size: 6 }), + pad(sessionData.sessionValidationModule, { size: 20 }), sessionData.sessionKeyData, ]); - return ethers.utils.keccak256(leafDataHex); + return keccak256(leafDataHex); }); instance.merkleTree = new MerkleTree(existingSessionDataLeafs, keccak256, { @@ -104,22 +97,23 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns The session data */ createSessionData = async (leavesData: CreateSessionDataParams[]): Promise => { - const sessionKeyManagerModuleABI = "function setMerkleRoot(bytes32 _merkleRoot)"; - const sessionKeyManagerModuleInterface = new ethers.utils.Interface([sessionKeyManagerModuleABI]); + const sessionKeyManagerModuleABI = parseAbi(["function setMerkleRoot(bytes32 _merkleRoot)"]); + const leavesToAdd: Buffer[] = []; const sessionIDInfo: string[] = []; for (const leafData of leavesData) { - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(leafData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(leafData.validAfter), 6), - hexZeroPad(leafData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(leafData.validUntil), { size: 6 }), + pad(toHex(leafData.validAfter), { size: 6 }), + pad(leafData.sessionValidationModule, { size: 20 }), leafData.sessionKeyData, ]); const generatedSessionId = leafData.preferredSessionId ?? generateRandomHex(); - leavesToAdd.push(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); + // TODO: verify this, might not be buffer + leavesToAdd.push(keccak256(leafDataHex) as unknown as Buffer); sessionIDInfo.push(generatedSessionId); const sessionLeafNode = { @@ -142,7 +136,11 @@ export class SessionKeyManagerModule extends BaseValidationModule { this.merkleTree = newMerkleTree; - const setMerkleRootData = sessionKeyManagerModuleInterface.encodeFunctionData("setMerkleRoot", [this.merkleTree.getHexRoot()]); + const setMerkleRootData = encodeFunctionData({ + abi: sessionKeyManagerModuleABI, + functionName: "setMerkleRoot", + args: [this.merkleTree.getHexRoot() as Hex], + }); await this.sessionStorageClient.setMerkleRoot(this.merkleTree.getHexRoot()); return { @@ -157,48 +155,46 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @param sessionSigner The signer to be used to sign the user operation * @returns The signature of the user operation */ - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { + async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { if (!(params && params.sessionSigner)) { throw new Error("Session signer is not provided."); } - const sessionSigner = params.sessionSigner; + const { signer: sessionSigner } = await convertSigner(params.sessionSigner); + // Use the sessionSigner to sign the user operation - const signature = await sessionSigner.signMessage(arrayify(userOpHash)); + const signature = await sessionSigner.signMessage(toBytes(userOpHash)); const sessionSignerData = await this.getLeafInfo(params); - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), - hexZeroPad(sessionSignerData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), sessionSignerData.sessionKeyData, ]); // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) - let paddedSignature = defaultAbiCoder.encode( - ["uint48", "uint48", "address", "bytes", "bytes32[]", "bytes"], - [ - sessionSignerData.validUntil, - sessionSignerData.validAfter, - sessionSignerData.sessionValidationModule, - sessionSignerData.sessionKeyData, - this.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer), - signature, - ], - ); + let paddedSignature: Hex = encodeAbiParameters(parseAbiParameters("uint48, uint48, address, bytes, bytes32[], bytes"), [ + sessionSignerData.validUntil, + sessionSignerData.validAfter, + sessionSignerData.sessionValidationModule, + sessionSignerData.sessionKeyData, + this.merkleTree.getHexProof(keccak256(leafDataHex)) as Hex[], + signature, + ]); if (params?.additionalSessionData) { paddedSignature += params.additionalSessionData; } - return paddedSignature; + return paddedSignature as Hex; } private async getLeafInfo(params: ModuleInfo): Promise { if (!(params && params.sessionSigner)) { throw new Error("Session signer is not provided."); } - const sessionSigner = params.sessionSigner; + const { signer: sessionSigner } = await convertSigner(params.sessionSigner); let sessionSignerData; if (params?.sessionID) { sessionSignerData = await this.sessionStorageClient.getSessionData({ @@ -237,14 +233,14 @@ export class SessionKeyManagerModule extends BaseValidationModule { /** * @returns SessionKeyManagerModule address */ - getAddress(): string { + getAddress(): Hex { return this.moduleAddress; } /** * @remarks This is the version of the module contract */ - async getSigner(): Promise { + async getSigner(): Promise { throw new Error("Method not implemented."); } @@ -252,37 +248,32 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @remarks This is the dummy signature for the module, used in buildUserOp for bundler estimation * @returns Dummy signature */ - async getDummySignature(params?: ModuleInfo): Promise { - Logger.log("moduleInfo ", params); + async getDummySignature(params?: ModuleInfo): Promise { if (!params) { throw new Error("Session signer is not provided."); } const sessionSignerData = await this.getLeafInfo(params); - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), - hexZeroPad(sessionSignerData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), sessionSignerData.sessionKeyData, ]); // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) - let paddedSignature = defaultAbiCoder.encode( - ["uint48", "uint48", "address", "bytes", "bytes32[]", "bytes"], - [ - sessionSignerData.validUntil, - sessionSignerData.validAfter, - sessionSignerData.sessionValidationModule, - sessionSignerData.sessionKeyData, - this.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer), - this.mockEcdsaSessionKeySig, - ], - ); - + let paddedSignature: Hex = encodeAbiParameters(parseAbiParameters("uint48, uint48, address, bytes, bytes32[], bytes"), [ + sessionSignerData.validUntil, + sessionSignerData.validAfter, + sessionSignerData.sessionValidationModule, + sessionSignerData.sessionKeyData, + this.merkleTree.getHexProof(keccak256(leafDataHex)) as Hex[], + this.mockEcdsaSessionKeySig, + ]); if (params?.additionalSessionData) { paddedSignature += params.additionalSessionData; } - const dummySig = ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [paddedSignature, this.getAddress()]); + const dummySig = encodeAbiParameters(parseAbiParameters(["bytes, address"]), [paddedSignature as Hex, this.getAddress()]); return dummySig; } @@ -290,15 +281,14 @@ export class SessionKeyManagerModule extends BaseValidationModule { /** * @remarks Other modules may need additional attributes to build init data */ - async getInitData(): Promise { + async getInitData(): Promise { throw new Error("Method not implemented."); } /** * @remarks This Module dont have knowledge of signer. So, this method is not implemented */ - async signMessage(message: Bytes | string): Promise { - Logger.log("message", message); + async signMessage(_message: Uint8Array | string): Promise { throw new Error("Method not implemented."); } } diff --git a/packages/modules/src/index.ts b/packages/modules/src/index.ts index f51916377..ca954778b 100644 --- a/packages/modules/src/index.ts +++ b/packages/modules/src/index.ts @@ -1,11 +1,26 @@ -export * from "./utils/Types"; -export * from "./utils/Constants"; -export * from "./interfaces/IValidationModule"; -export * from "./interfaces/ISessionValidationModule"; -export * from "./BaseValidationModule"; -export * from "./ECDSAOwnershipValidationModule"; -export * from "./MultichainValidationModule"; -export * from "./SessionKeyManagerModule"; -export * from "./BatchedSessionRouterModule"; -export * from "./session-validation-modules/ERC20SessionValidationModule"; +export * from "./utils/Types.js"; +export * from "./utils/Constants.js"; +export * from "./interfaces/IValidationModule.js"; +export * from "./interfaces/ISessionValidationModule.js"; +export * from "./BaseValidationModule.js"; +export * from "./ECDSAOwnershipValidationModule.js"; +export * from "./MultichainValidationModule.js"; +export * from "./SessionKeyManagerModule.js"; +export * from "./BatchedSessionRouterModule.js"; +export * from "./session-validation-modules/ERC20SessionValidationModule.js"; + +import { + BatchedSessionRouterModule, + ECDSAOwnershipValidationModule, + MultiChainValidationModule, + SessionKeyManagerModule, + ERC20SessionValidationModule, +} from "./index.js"; + +export const createBatchedSessionRouterModule = BatchedSessionRouterModule.create; +export const createMultiChainValidationModule = MultiChainValidationModule.create; +export const createECDSAOwnershipValidationModule = ECDSAOwnershipValidationModule.create; +export const createSessionKeyManagerModule = SessionKeyManagerModule.create; +export const createERC20SessionValidationModule = ERC20SessionValidationModule.create; + // export * from './PasskeyValidationModule' diff --git a/packages/modules/src/interfaces/ISessionStorage.ts b/packages/modules/src/interfaces/ISessionStorage.ts index eb1fb1078..da2f8e13e 100644 --- a/packages/modules/src/interfaces/ISessionStorage.ts +++ b/packages/modules/src/interfaces/ISessionStorage.ts @@ -1,21 +1,23 @@ -import { Wallet, Signer } from "ethers"; +import { Hex } from "viem"; +import { SmartAccountSigner } from "@alchemy/aa-core"; +import { SignerData } from "../utils/Types"; export type SessionStatus = "PENDING" | "ACTIVE" | "INACTIVE" | "EXPIRED"; export type SessionLeafNode = { validUntil: number; validAfter: number; - sessionValidationModule: string; - sessionKeyData: string; - sessionPublicKey: string; + sessionValidationModule: Hex; + sessionKeyData: Hex; + sessionPublicKey: Hex; sessionID?: string; status: SessionStatus; }; export type SessionSearchParam = { sessionID?: string; - sessionPublicKey?: string; - sessionValidationModule?: string; + sessionPublicKey?: Hex; + sessionValidationModule?: Hex; status?: SessionStatus; }; @@ -49,19 +51,19 @@ export interface ISessionStorage { * If no signer object is passed, it'll create a random signer and add it to the session storage * @param signer Optional signer to be added to the session storage */ - addSigner(_signer?: Wallet): Promise; + addSigner(_signer?: SignerData): Promise; /** * Fetch a signer from the session storage * @param signerPublicKey Public key of the signer to be fetched */ - getSignerByKey(_signerPublicKey: string): Promise; + getSignerByKey(_signerPublicKey: string): Promise; /** * Fetch a signer from the session storage based on the session search param * @param param SessionSearchParam to be used to fetch the signer */ - getSignerBySession(_param: SessionSearchParam): Promise; + getSignerBySession(_param: SessionSearchParam): Promise; /** * Fetch all the session leaf nodes from the session storage based on the session search param. diff --git a/packages/modules/src/interfaces/IValidationModule.ts b/packages/modules/src/interfaces/IValidationModule.ts index 4b8269674..ee3da28a9 100644 --- a/packages/modules/src/interfaces/IValidationModule.ts +++ b/packages/modules/src/interfaces/IValidationModule.ts @@ -1,12 +1,11 @@ -import { WalletClientSigner } from "@alchemy/aa-core"; -import { Signer } from "ethers"; -import { Bytes } from "ethers/lib/utils"; +import { SmartAccountSigner } from "@alchemy/aa-core"; +import { Hex } from "viem"; export interface IValidationModule { - getAddress(): string; - getInitData(): Promise; - getSigner(): Promise; - signUserOpHash(_userOpHash: string): Promise; - signMessage(_message: Bytes | string): Promise; - getDummySignature(): Promise; + getAddress(): Hex; + getInitData(): Promise; + getSigner(): Promise; + signUserOpHash(_userOpHash: string): Promise; + signMessage(_message: string | Uint8Array): Promise; + getDummySignature(): Promise; } diff --git a/packages/modules/src/session-storage/SessionLocalStorage.ts b/packages/modules/src/session-storage/SessionLocalStorage.ts index 3f9ada1c4..28f3133a6 100644 --- a/packages/modules/src/session-storage/SessionLocalStorage.ts +++ b/packages/modules/src/session-storage/SessionLocalStorage.ts @@ -1,5 +1,9 @@ -import { Wallet, Signer } from "ethers"; -import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage"; +import { Hex, createWalletClient, http, toHex } from "viem"; +import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage.js"; +import { mainnet } from "viem/chains"; +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; +import { SignerData } from "../utils/Types"; export class SessionLocalStorage implements ISessionStorage { private smartAccountAddress: string; @@ -19,11 +23,13 @@ export class SessionLocalStorage implements ISessionStorage { } private getSessionStore(): any { + // @ts-ignore: LocalStorage is not available in node const data = localStorage.getItem(this.getStorageKey("sessions")); return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] }; } private getSignerStore(): any { + // @ts-ignore: LocalStorage is not available in node const data = localStorage.getItem(this.getStorageKey("signers")); return data ? JSON.parse(data) : {}; } @@ -38,9 +44,10 @@ export class SessionLocalStorage implements ISessionStorage { async addSessionData(leaf: SessionLeafNode): Promise { const data = this.getSessionStore(); - leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule); - leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey); + leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule) as Hex; + leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey) as Hex; data.leafNodes.push(leaf); + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } @@ -90,39 +97,62 @@ export class SessionLocalStorage implements ISessionStorage { } session.status = status; + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } async clearPendingSessions(): Promise { const data = this.getSessionStore(); data.leafNodes = data.leafNodes.filter((s: SessionLeafNode) => s.status !== "PENDING"); + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } - async addSigner(signer?: Wallet): Promise { + async addSigner(signerData: SignerData): Promise { const signers = this.getSignerStore(); - if (!signer) { - signer = Wallet.createRandom(); + let signer: SignerData; + if (!signerData) { + const pkey = generatePrivateKey(); + signer = { + pvKey: pkey, + pbKey: privateKeyToAccount(pkey).publicKey, + }; + } else { + signer = signerData; } - signers[this.toLowercaseAddress(signer.publicKey)] = { - privateKey: signer.privateKey, - publicKey: signer.publicKey, - }; + const accountSigner = privateKeyToAccount(toHex(signer.pvKey)); + const client = createWalletClient({ + account: accountSigner, + chain: signerData.chainId, + transport: http(), + }); + const walletClientSigner = new WalletClientSigner( + client, + "json-rpc", // signerType + ); + signers[this.toLowercaseAddress(accountSigner.address)] = signerData; + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)); - return signer; + return walletClientSigner; } - async getSignerByKey(sessionPublicKey: string): Promise { + async getSignerByKey(sessionPublicKey: string): Promise { const signers = this.getSignerStore(); const signerData = signers[this.toLowercaseAddress(sessionPublicKey)]; if (!signerData) { throw new Error("Signer not found."); } - const signer = new Wallet(signerData.privateKey); + const account = privateKeyToAccount(signerData.privateKey); + const client = createWalletClient({ + account, + chain: mainnet, + transport: http(), + }); + const signer = new WalletClientSigner(client, "viem"); return signer; } - async getSignerBySession(param: SessionSearchParam): Promise { + async getSignerBySession(param: SessionSearchParam): Promise { const session = await this.getSessionData(param); return this.getSignerByKey(session.sessionPublicKey); } @@ -142,6 +172,7 @@ export class SessionLocalStorage implements ISessionStorage { setMerkleRoot(merkleRoot: string): Promise { const data = this.getSessionStore(); data.merkleRoot = merkleRoot; + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); return Promise.resolve(); } diff --git a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts index 4a9f416ee..131746a38 100644 --- a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts +++ b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts @@ -1,6 +1,6 @@ -import { defaultAbiCoder } from "ethers/lib/utils"; -import { ISessionValidationModule } from "../interfaces/ISessionValidationModule"; +import { ISessionValidationModule } from "../interfaces/ISessionValidationModule.js"; import { ERC20SessionKeyData, SessionValidationModuleConfig } from "../utils/Types"; +import { encodeAbiParameters, parseAbiParameters } from "viem"; /** * Session validation module for ERC20 token transfers. @@ -37,10 +37,12 @@ export class ERC20SessionValidationModule implements ISessionValidationModule { this._validateSessionKeyData(sessionData); - const sessionKeyData = defaultAbiCoder.encode( - ["address", "address", "address", "uint256"], - [sessionData.sessionKey, sessionData.token, sessionData.recipient, sessionData.maxAmount], - ); + const sessionKeyData = encodeAbiParameters(parseAbiParameters("address, address, address, uint256"), [ + sessionData.sessionKey, + sessionData.token, + sessionData.recipient, + sessionData.maxAmount, + ]); return sessionKeyData; } diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts index cab7efbef..407e374d0 100644 --- a/packages/modules/src/utils/Constants.ts +++ b/packages/modules/src/utils/Constants.ts @@ -1,4 +1,4 @@ -import { ModuleVersion } from "./Types"; +import { ModuleVersion } from "./Types.js"; export const DEFAULT_MODULE_VERSION: ModuleVersion = "V1_0_0"; diff --git a/packages/modules/src/utils/Helper.ts b/packages/modules/src/utils/Helper.ts new file mode 100644 index 000000000..0754a9f30 --- /dev/null +++ b/packages/modules/src/utils/Helper.ts @@ -0,0 +1,41 @@ +import { UserOperationStruct } from "@alchemy/aa-core"; +import { Hex, encodeAbiParameters, keccak256, parseAbiParameters } from "viem"; + +function packUserOp(op: Partial, forSignature = true): string { + if (!op.initCode || !op.callData || !op.paymasterAndData) throw new Error("Missing userOp properties"); + if (forSignature) { + return encodeAbiParameters(parseAbiParameters("address, uint256, bytes32, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32"), [ + op.sender as Hex, + BigInt(op.nonce as Hex), + keccak256(op.initCode as Hex), + keccak256(op.callData as Hex), + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + keccak256(op.paymasterAndData as Hex), + ]); + } else { + // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) + return encodeAbiParameters(parseAbiParameters("address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes, bytes"), [ + op.sender as Hex, + BigInt(op.nonce as Hex), + op.initCode as Hex, + op.callData as Hex, + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + op.paymasterAndData as Hex, + op.signature as Hex, + ]); + } +} + +export const getUserOpHash = (userOp: Partial, entryPointAddress: Hex, chainId: number): Hex => { + const userOpHash = keccak256(packUserOp(userOp, true) as Hex); + const enc = encodeAbiParameters(parseAbiParameters("bytes32, address, uint256"), [userOpHash, entryPointAddress, BigInt(chainId)]); + return keccak256(enc); +}; diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 267de2d3a..b4b96a2c7 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,23 +1,28 @@ -import { ChainId, UserOperation } from "@biconomy/core-types"; -import { Signer } from "ethers"; +import { Chain, Hex } from "viem"; +import { UserOperationStruct, SmartAccountSigner } from "@alchemy/aa-core"; import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; -import { ISessionStorage } from "../interfaces/ISessionStorage"; -import { WalletClientSigner } from "@alchemy/aa-core"; - +import { ISessionStorage } from "../interfaces/ISessionStorage.js"; +import { SupportedSigner } from "@biconomy/common"; export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' export interface BaseValidationModuleConfig { - entryPointAddress?: string; + entryPointAddress?: Hex; } export interface ECDSAOwnershipValidationModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string; + moduleAddress?: Hex; version?: ModuleVersion; - signer: Signer | WalletClientSigner; + signer: SupportedSigner; +} + +export interface ECDSAOwnershipValidationModuleConfigConstructorProps extends BaseValidationModuleConfig { + moduleAddress?: Hex; + version?: ModuleVersion; + signer: SmartAccountSigner; } export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string; + moduleAddress?: Hex; version?: ModuleVersion; nodeClientUrl?: string; smartAccountAddress: string; @@ -26,19 +31,15 @@ export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfi } export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string; + moduleAddress?: Hex; version?: ModuleVersion; sessionKeyManagerModule?: SessionKeyManagerModule; // could be BaseValidationModule - sessionManagerModuleAddress?: string; + sessionManagerModuleAddress?: Hex; nodeClientUrl?: string; smartAccountAddress: string; storageType?: StorageType; - - // sessionSigner?: Signer - // sessionPubKey?: string - // nodeClientUrl?: string } export enum StorageType { @@ -47,8 +48,8 @@ export enum StorageType { export type SessionParams = { sessionID?: string; - sessionSigner: Signer; - sessionValidationModule?: string; + sessionSigner: SupportedSigner; + sessionValidationModule?: Hex; additionalSessionData?: string; }; @@ -56,8 +57,8 @@ export type ModuleInfo = { // Could be a full object of below params and that way it can be an array too! // sessionParams?: SessionParams[] // where SessionParams is below four sessionID?: string; - sessionSigner?: Signer; - sessionValidationModule?: string; + sessionSigner?: SupportedSigner; + sessionValidationModule?: Hex; additionalSessionData?: string; batchSessionParams?: SessionParams[]; }; @@ -68,6 +69,12 @@ export interface SendUserOpParams extends ModuleInfo { export type SimulationType = "validation" | "validation_and_execution"; +export type SignerData = { + pbKey: string; + pvKey: `0x${string}`; + chainId?: Chain; +}; + export type CreateSessionDataResponse = { data: string; sessionIDInfo: Array; @@ -76,33 +83,38 @@ export type CreateSessionDataResponse = { export interface CreateSessionDataParams { validUntil: number; validAfter: number; - sessionValidationModule: string; - sessionPublicKey: string; - sessionKeyData: string; + sessionValidationModule: Hex; + sessionPublicKey: Hex; + sessionKeyData: Hex; preferredSessionId?: string; } export interface MultiChainValidationModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string; + moduleAddress?: Hex; + version?: ModuleVersion; + signer: SupportedSigner; +} +export interface MultiChainValidationModuleConfigConstructorProps extends BaseValidationModuleConfig { + moduleAddress?: Hex; version?: ModuleVersion; - signer: Signer | WalletClientSigner; + signer: SmartAccountSigner; } export type MultiChainUserOpDto = { validUntil?: number; validAfter?: number; - chainId: ChainId; - userOp: Partial; + chainId: number; + userOp: Partial; }; export interface BaseSessionKeyData { - sessionKey: string; + sessionKey: Hex; } export interface ERC20SessionKeyData extends BaseSessionKeyData { - token: string; - recipient: string; - maxAmount: string; + token: Hex; + recipient: Hex; + maxAmount: bigint; } export interface SessionValidationModuleConfig { diff --git a/packages/modules/tests/modules.spec.ts b/packages/modules/tests/modules.spec.ts new file mode 100644 index 000000000..9785b2d2d --- /dev/null +++ b/packages/modules/tests/modules.spec.ts @@ -0,0 +1,45 @@ +import { TestData } from "../../../tests"; +import { createSmartAccountClient } from "@biconomy/account"; +import { createECDSAOwnershipValidationModule, createMultiChainValidationModule } from "../src"; + +describe("Account Tests", () => { + let ganache: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-unit-tests + [ganache] = testDataPerChain; + }); + + it("should create a MultiChainValidationModule from an ethers signer using convertSigner", async () => { + const { + bundlerUrl, + whale: { ethersSigner: signer }, + } = ganache; + + const defaultValidationModule = await createMultiChainValidationModule({ signer }); + // Should not require a signer or chainId + const smartAccount = await createSmartAccountClient({ bundlerUrl, defaultValidationModule }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + // expect the relevant module to be set + expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); + }); + + it("should create a ECDSAOwnershipValidationModule from a viem signer using convertSigner", async () => { + const { + bundlerUrl, + whale: { viemWallet: signer }, + } = ganache; + + const defaultValidationModule = await createECDSAOwnershipValidationModule({ signer }); + // Should not require a signer or chainId + const smartAccount = await createSmartAccountClient({ + bundlerUrl, + defaultValidationModule, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + // expect the relevant module to be set + expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); + }); +}); diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts new file mode 100644 index 000000000..7adac93de --- /dev/null +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -0,0 +1,92 @@ +import { PaymasterMode } from "@biconomy/paymaster"; +import { TestData } from "../../../tests"; +import { createSmartAccountClient } from "../../account/src/index"; +import { Hex, encodeFunctionData, parseAbi } from "viem"; +import { DEFAULT_MULTICHAIN_MODULE, MultiChainValidationModule } from "@biconomy/modules"; + +describe("Account with MultiChainValidation Module Tests", () => { + let mumbai: TestData; + let baseGoerli: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [mumbai, baseGoerli] = testDataPerChain; + }); + + it("Should mint an NFT gasless on baseGoerli and mumbai", async () => { + const { + whale: { alchemyWalletClientSigner: signerMumbai, publicAddress: recipientForBothChains }, + biconomyPaymasterApiKey: biconomyPaymasterApiKeyMumbai, + bundlerUrl: bundlerUrlMumbai, + chainId: chainIdMumbai, + } = mumbai; + + const { + whale: { alchemyWalletClientSigner: signerBase }, + biconomyPaymasterApiKey: biconomyPaymasterApiKeyBase, + bundlerUrl: bundlerUrlBase, + chainId: chainIdBase, + } = baseGoerli; + + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + + const multiChainModule = await MultiChainValidationModule.create({ + signer: signerMumbai, + moduleAddress: DEFAULT_MULTICHAIN_MODULE, + }); + + const [polygonAccount, baseAccount] = await Promise.all([ + createSmartAccountClient({ + chainId: chainIdMumbai, + signer: signerMumbai, + bundlerUrl: bundlerUrlMumbai, + defaultValidationModule: multiChainModule, + activeValidationModule: multiChainModule, + biconomyPaymasterApiKey: biconomyPaymasterApiKeyMumbai, + }), + createSmartAccountClient({ + chainId: chainIdBase, + signer: signerBase, + bundlerUrl: bundlerUrlBase, + defaultValidationModule: multiChainModule, + activeValidationModule: multiChainModule, + biconomyPaymasterApiKey: biconomyPaymasterApiKeyBase, + }), + ]); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address owner) view returns (uint balance)"]), + functionName: "safeMint", + args: [recipientForBothChains], + }); + + const transaction = { + to: nftAddress, + data: encodedCall, + }; + + const [partialUserOp1, partialUserOp2] = await Promise.all([ + baseAccount.buildUserOp([transaction], { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }), + polygonAccount.buildUserOp([transaction], { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }), + ]); + + expect(partialUserOp1.paymasterAndData).not.toBe("0x"); + expect(partialUserOp2.paymasterAndData).not.toBe("0x"); + + // Sign the user ops using multiChainModule + const returnedOps = await multiChainModule.signUserOps([ + { userOp: partialUserOp1, chainId: chainIdBase }, + { userOp: partialUserOp2, chainId: chainIdMumbai }, + ]); + + // Send the signed user ops on both chains + const userOpResponse1 = await baseAccount.sendSignedUserOp(returnedOps[0] as any); + const userOpResponse2 = await polygonAccount.sendSignedUserOp(returnedOps[1] as any); + + console.log(userOpResponse1.userOpHash, "MULTICHAIN BASE USER OP HASH"); + console.log(userOpResponse2.userOpHash, "MULTICHAIN POLYGON USER OP HASH"); + + expect(userOpResponse1.userOpHash).toBeTruthy(); + expect(userOpResponse2.userOpHash).toBeTruthy(); + }, 30000); +}); diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts new file mode 100644 index 000000000..87b139cf0 --- /dev/null +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -0,0 +1,154 @@ +import { DEFAULT_SESSION_KEY_MANAGER_MODULE, createSessionKeyManagerModule } from "@biconomy/modules"; +import { SessionFileStorage } from "./utils/customSession"; +import { WalletClientSigner, createSmartAccountClient } from "../../account/src/index"; +import { Hex, encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "viem"; +import { TestData } from "../../../tests"; +import { checkBalance } from "../../../tests/utils"; +import { PaymasterMode } from "@biconomy/paymaster"; + +describe("Account Tests", () => { + let mumbai: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [mumbai] = testDataPerChain; + }); + + const sessionFileStorage: SessionFileStorage = new SessionFileStorage(DEFAULT_SESSION_KEY_MANAGER_MODULE); + + it("Should send a user op using Session Validation Module", async () => { + let sessionSigner: WalletClientSigner; + + const { + whale: { + account: { address: sessionKeyEOA }, + privateKey: pvKey, + }, + minnow: { publicAddress: recipient }, + publicClient, + chainId, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + try { + sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); + } catch (error) { + sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey }); + } + + expect(sessionSigner).toBeTruthy(); + + // Create smart account + let smartAccount = await createSmartAccountClient({ + chainId, + signer: sessionSigner, + bundlerUrl, + biconomyPaymasterApiKey, + index: 1, // Increasing index to not conflict with other test cases and use a new smart account + }); + + // Create session module + const sessionModule = await createSessionKeyManagerModule({ + moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, + smartAccountAddress: await smartAccount.getAddress(), + sessionStorageClient: sessionFileStorage, + }); + + // Set enabled call on session + const sessionKeyData = encodeAbiParameters( + [{ type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }], + [ + sessionKeyEOA, + "0xdA5289fCAAF71d52a80A254da614a192b693e977", // erc20 token address + recipient, // receiver address + parseUnits("10", 6), + ], + ); + + const erc20ModuleAddr = "0x000000D50C68705bd6897B2d17c7de32FB519fDA"; + + const sessionTxData = await sessionModule.createSessionData([ + { + validUntil: 0, + validAfter: 0, + sessionValidationModule: erc20ModuleAddr, + sessionPublicKey: sessionKeyEOA, + sessionKeyData: sessionKeyData, + }, + ]); + + const setSessionAllowedTrx = { + to: DEFAULT_SESSION_KEY_MANAGER_MODULE, + data: sessionTxData.data, + }; + + const txArray: any = []; + + // Check if module is enabled + + const isEnabled = await smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); + if (!isEnabled) { + const enableModuleTrx = await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); + txArray.push(enableModuleTrx); + txArray.push(setSessionAllowedTrx); + } else { + console.log("MODULE ALREADY ENABLED"); + txArray.push(setSessionAllowedTrx); + } + + const userOp = await smartAccount.buildUserOp(txArray); + + const userOpResponse1 = await smartAccount.sendUserOp(userOp); + const transactionDetails = await userOpResponse1.wait(); + console.log("Tx Hash: ", transactionDetails.receipt.transactionHash); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function transfer(address _to, uint256 _value)"]), + functionName: "transfer", + args: [recipient, parseUnits("0.01", 6)], + }); + + const transferTx = { + to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", //erc20 token address + data: encodedCall, + }; + + smartAccount = smartAccount.setActiveValidationModule(sessionModule); + + const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAccountAddress()); + + const transferUserOp = await smartAccount.buildUserOp([transferTx], { + params: { + sessionSigner: sessionSigner, + sessionValidationModule: erc20ModuleAddr.toLowerCase() as Hex, + }, + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + }, + }); + + expect(transferUserOp.paymasterAndData).toBeDefined(); + expect(transferUserOp.paymasterAndData).not.toBeNull(); + expect(transferUserOp.paymasterAndData).not.toBe("0x"); + + const userOpResponse2 = await smartAccount.sendTransaction(transferTx, { + params: { + sessionSigner: sessionSigner, + sessionValidationModule: erc20ModuleAddr.toLowerCase() as Hex, + }, + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + }, + }); + + expect(userOpResponse2.userOpHash).toBeTruthy(); + expect(userOpResponse2.userOpHash).not.toBeNull(); + + const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAccountAddress()); + + expect(maticBalanceAfter).toEqual(maticBalanceBefore); + + console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); + }, 60000); +}); diff --git a/packages/modules/tests/utils/customSession.ts b/packages/modules/tests/utils/customSession.ts new file mode 100644 index 000000000..002bcd2a5 --- /dev/null +++ b/packages/modules/tests/utils/customSession.ts @@ -0,0 +1,218 @@ +import * as fs from "fs"; +import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; +import { SignerData } from "@biconomy/modules/src"; +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; +import { Hex, createWalletClient, http } from "viem"; +import { polygonMumbai } from "viem/chains"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "@biconomy/modules/src/interfaces/ISessionStorage.js"; +import { Logger } from "@biconomy/common"; + +export class SessionFileStorage implements ISessionStorage { + private smartAccountAddress: string; + + constructor(smartAccountAddress: string) { + this.smartAccountAddress = smartAccountAddress.toLowerCase(); + } + + // This method reads data from the file and returns it in the JSON format + private async readDataFromFile(type: "sessions" | "signers"): Promise { + return new Promise((resolve) => { + fs.readFile(this.getStorageFilePath(type), "utf8", (err, data) => { + if (err) { + // Handle errors appropriately + resolve(undefined); + } else { + if (!data) { + resolve(null); + } else { + resolve(JSON.parse(data)); + } + // resolve(JSON.parse(data)); + } + }); + }); + } + + private getStorageFilePath(type: "sessions" | "signers"): string { + return `./packages/modules/tests/utils/sessionStorageData/${this.smartAccountAddress}_${type}.json`; + } + + private async writeDataToFile(data: any, type: "sessions" | "signers"): Promise { + return new Promise((resolve, reject) => { + const filePath = this.getStorageFilePath(type); + fs.writeFile(filePath, JSON.stringify(data), "utf8", (err) => { + if (err) { + // Handle errors appropriately + reject(err); + } else { + resolve(); + } + }); + }); + } + + private validateSearchParam(param: SessionSearchParam): void { + if (param.sessionID) { + return; + } else if (!param.sessionID && param.sessionPublicKey && param.sessionValidationModule) { + return; + } else { + throw new Error("Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address."); + } + } + + // Session store is in the form of mekrleRoot and leafnodes, each object will have a root and an array of leafNodes. + private async getSessionStore(): Promise { + // eslint-disable-next-line no-useless-catch + try { + const data = await this.readDataFromFile("sessions"); + return data || { merkleRoot: "", leafNodes: [] }; + } catch (error) { + // Handle errors appropriately + throw error; + } + } + + private async getSignerStore(): Promise { + // eslint-disable-next-line no-useless-catch + try { + const data = await this.readDataFromFile("signers"); + return data || {}; + } catch (error) { + // Handle errors appropriately + throw error; + } + } + + private getStorageKey(type: "sessions" | "signers"): string { + return `${this.smartAccountAddress}_${type}`; + } + + private toLowercaseAddress(address: string): Hex { + return address.toLowerCase() as Hex; + } + + async getSessionData(): Promise { + const sessions = (await this.getSessionStore()).leafNodes; + Logger.log("Got sessions", sessions); + const session = sessions[0]; + + if (!session) { + throw new Error("Session not found."); + } + return session; + } + + async addSessionData(leaf: SessionLeafNode): Promise { + Logger.log("Add session Data", leaf); + const data = await this.getSessionStore(); + leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule); + leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey); + data.leafNodes.push(leaf); + await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type + } + + async updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise { + this.validateSearchParam(param); + + const data = await this.getSessionStore(); + const session = data.leafNodes.find((s: SessionLeafNode) => { + if (param.sessionID) { + return s.sessionID === param.sessionID; + } else if (param.sessionPublicKey && param.sessionValidationModule) { + return ( + s.sessionPublicKey === this.toLowercaseAddress(param.sessionPublicKey) && + s.sessionValidationModule === this.toLowercaseAddress(param.sessionValidationModule) + ); + } else { + return undefined; + } + }); + + if (!session) { + throw new Error("Session not found."); + } + + session.status = status; + await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type + } + + async clearPendingSessions(): Promise { + const data = await this.getSessionStore(); + data.leafNodes = data.leafNodes.filter((s: SessionLeafNode) => s.status !== "PENDING"); + await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type + } + + async addSigner(signerData: SignerData): Promise { + const signers = await this.getSignerStore(); + let signer: SignerData; + if (!signerData) { + const pkey = generatePrivateKey(); + signer = { + pvKey: pkey, + pbKey: privateKeyToAccount(pkey).publicKey, + }; + } else { + signer = signerData; + } + const accountSigner = privateKeyToAccount(signer.pvKey); + const client = createWalletClient({ + account: accountSigner, + chain: signerData.chainId, + transport: http(polygonMumbai.rpcUrls.default.http[0]), + }); + const walletClientSigner: SmartAccountSigner = new WalletClientSigner( + client, + "json-rpc", // signerType + ); + signers[this.toLowercaseAddress(accountSigner.address)] = { + pvKey: signer.pvKey, + pbKey: signer.pbKey, + }; + await this.writeDataToFile(signers, "signers"); // Use 'signers' as the type + return walletClientSigner; + } + + async getSignerByKey(sessionPublicKey: string): Promise { + const signers = await this.getSignerStore(); + Logger.log("Got signers", signers); + + const signerData: SignerData = signers[this.toLowercaseAddress(sessionPublicKey)]; + if (!signerData) { + throw new Error("Signer not found."); + } + Logger.log(signerData.pvKey, "PVKEY"); + + const signer = privateKeyToAccount(signerData.pvKey); + const walletClient = createWalletClient({ + account: signer, + transport: http(polygonMumbai.rpcUrls.default.http[0]), + }); + return new WalletClientSigner(walletClient, "json-rpc"); + } + + async getSignerBySession(): Promise { + const session = await this.getSessionData(); + Logger.log("got session", session); + const walletClientSinger = await this.getSignerByKey(session.sessionPublicKey); + return walletClientSinger; + } + + async getAllSessionData(param?: SessionSearchParam): Promise { + const sessions = (await this.getSessionStore()).leafNodes; + if (!param || !param.status) { + return sessions; + } + return sessions.filter((s: SessionLeafNode) => s.status === param.status); + } + + async getMerkleRoot(): Promise { + return (await this.getSessionStore()).merkleRoot; + } + + async setMerkleRoot(merkleRoot: string): Promise { + const data = await this.getSessionStore(); + data.merkleRoot = merkleRoot; + await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type + } +} diff --git a/packages/modules/tests/utils/sessionStorageData/.gitkeep b/packages/modules/tests/utils/sessionStorageData/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/modules/tsconfig.build.json b/packages/modules/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/modules/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/modules/tsconfig.json b/packages/modules/tsconfig.json index 0228bfe7a..adc19ded0 100644 --- a/packages/modules/tsconfig.json +++ b/packages/modules/tsconfig.json @@ -1,11 +1,13 @@ { - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true, - }, - "include": ["src", "src/**/*.json"] -} \ No newline at end of file + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src", + "resolveJsonModule": true, + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"], + }, + "include": ["src", "src/**/*.json"] +} diff --git a/packages/node-client/CHANGELOG.md b/packages/node-client/CHANGELOG.md deleted file mode 100644 index f5196ec43..000000000 --- a/packages/node-client/CHANGELOG.md +++ /dev/null @@ -1,73 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 3.1.3 (2023-12-28) - -VERSION Bump Only. - -## 3.1.2 (2023-12-28) - -VERSION Bump Only. - -## 3.1.1 (2023-11-09) -Version Bump Only. - - - - -## 3.1.0 (2023-09-20) -Version Bump Only. - -### Bug Fixes - -* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) - - - - - - - - - - -## 3.0.0 (2023-08-28) - - - - -## 3.0.0-alpha.0 (2023-07-12) - - - - - -## 2.0.1 (2023-05-18) - - -### Features - -* skipBundlerGasEstimation flag for gas ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) - - - -## 2.0.0 (2023-04-07) - - -### Bug Fixes - -* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -* smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) - - - -## 1.0.0 (2023-01-03) - - -### Bug Fixes - -* smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) diff --git a/packages/node-client/README.md b/packages/node-client/README.md deleted file mode 100644 index b14934051..000000000 --- a/packages/node-client/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# `@biconomy/node-client` - -# Biconomy SDK Node Client - -Node Client is the api client package that communicate with [Biconomy SDK](https://github.com/bcnmy/biconomy-client-sdk) backend node to fetch needed smart contract wallet data i.e supported chains list, transaction history, balances e.t.c - -## Installation - -`yarn add @biconomy/node-client` - -OR - -`npm install @biconomy/node-client ` - -## Usage - -``` -// import package -import NodeClient from '@biconomy/node-client' - -// initialisation - -const nodeClient = new NodeClient({ txServiceUrl: 'https://sdk-backend.staging.biconomy.io/v1' }) -``` - -# Fetch Supported Chains List - -``` -const supportedChainsList = await nodeClient.getAllSupportedChains() -console.log('supportedChainsList ', supportedChainsList) -``` - -# Fetch Transactions By Address - -``` -const chainId = 80001 -const address = '0xabc......' -const trxHistory = await nodeClient.getTransactionByAddress(chainId, address) -console.log('trxHistory ', trxHistory) -``` - -# Get Transaction By Hash - -``` -const txHash = '0x........' -const trxDetail = await nodeClient.getTransactionByHash(txHash) -console.log('trxDetail ', trxDetail) -``` - -# Get Smart Contract Wallet Balances - -``` -import { BalancesDto } from '@biconomy/node-client' - -import { ChainId } from '@biconomy/core-types' - -const address = '0xabc......' - -const balanceParams: BalancesDto = - { - // if no chainId is supplied, SDK will automatically pick active one that - // is being supplied for initialization - - chainId: ChainId.MAINNET, // chainId of your choice - address: address, - // If empty string you receive balances of all tokens watched by Indexer - // you can only whitelist token addresses that are listed in token respository - // specified above ^ - tokenAddresses: [], - }; - -const balFromSdk = await nodeClient.getAllTokenBalances(balanceParams); -console.info("balFromSdk ", balFromSdk); - -const usdBalFromSdk = await nodeClient.getTotalBalanceInUsd(balanceParams); -console.info("usdBalFromSdk ", usdBalFromSdk) -``` diff --git a/packages/node-client/package.json b/packages/node-client/package.json deleted file mode 100644 index df7bfc0d9..000000000 --- a/packages/node-client/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "@biconomy/node-client", - "version": "3.1.3", - "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", - "keywords": [ - "Ethereum", - "Gnosis", - "Biconomy", - "Backend Node" - ], - "scripts": { - "unbuild": "rimraf dist", - "build": "rimraf dist && tsc", - "format": "prettier --write \"{src,tests,e2e}/**/*.ts\"", - "lint": "tslint -p tsconfig.json", - "test": "jest tests/**/*.spec.ts --runInBand", - "test:file": "jest --config=../../jest.config.js --runInBand", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", - "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'" - }, - "author": "Biconomy (https://biconomy.io)", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "devDependencies": { - "@biconomy/core-types": "^3.1.0", - "@nomiclabs/hardhat-ethers": "^2.1.0", - "@nomiclabs/hardhat-waffle": "^2.0.3", - "@nomiclabs/hardhat-web3": "^2.0.0", - "@types/chai": "^4.3.0", - "@types/chai-as-promised": "^7.1.5", - "@types/node": "^17.0.23", - "@types/node-fetch": "^2.6.2", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "chai": "^4.3.6", - "chai-as-promised": "^7.1.1", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "hardhat": "^2.9.2", - "husky": "^7.0.4", - "lint-staged": "^12.3.7", - "prettier": "^2.6.2", - "rimraf": "^3.0.2", - "ts-generator": "^0.1.1", - "ts-node": "^10.7.0", - "typescript": "^4.6.3" - }, - "lint-staged": { - "src/**/!(*test).ts": [ - "yarn lint", - "prettier --write" - ] - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@biconomy/core-types": "^3.1.3", - "@ethersproject/abstract-signer": "^5.6.0", - "@nomiclabs/hardhat-ethers": "^2.1.0", - "node-fetch": "^2.6.6" - } -} diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts deleted file mode 100644 index a36c8bc37..000000000 --- a/packages/node-client/src/INodeClient.ts +++ /dev/null @@ -1,93 +0,0 @@ -// import { FeeRefund, FeeRefundData, MetaTransactionData } from '@biconomy/core-types' -import { - SmartAccountByOwnerDto, - TokenByChainIdAndAddressDto, - TokenPriceResponse, - SupportedChainsResponse, - IndividualChainResponse, - SupportedTokensResponse, - IndividualTokenResponse, - SmartAccountsResponse, - BalancesResponse, - BalancesDto, - UsdBalanceResponse, - SCWTransactionResponse, - WhiteListSignatureResponse, -} from "./types/NodeClientTypes"; - -interface INodeClient { - // 1. Chain Apis - - /** - * Get all supported chains by backend node configuration - */ - getAllSupportedChains(): Promise; - - /** - * Get ChainConfig for requested chainId - * @param chainId - */ - getChainById(_chainId: number): Promise; - - // 2. Token APIs - - /** - * Get prices for configured tokens from backend node API - * @param chainId - */ - getTokenPricesByChainId(_chainId: number): Promise; - - /** - * Get all supported tokens - */ - getAllTokens(): Promise; - - /** - * Get TokenInfo for requested chainId - * @param chainId - */ - getTokensByChainId(_chainId: number): Promise; - - /** - * Get TokenInfo by address and chainId - * @param tokenByChainIdAndAddressDto - */ - getTokenByChainIdAndAddress(_tokenByChainIdAndAddressDto: TokenByChainIdAndAddressDto): Promise; - - // 3. Smart Account Endpoints - - /** - * Get information of all smart accounts deployed for particular eoa owner for any version and index - * @param smartAccountByOwnerDto - */ - getSmartAccountsByOwner(_smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise; - - // 4. Balances Endpoints - - /** - * Get token balances for requested chainId and address - * address could be EOA or SmartAccount - * @param balancesDto - */ - getAllTokenBalances(_balancesDto: BalancesDto): Promise; - - /** - * - * @param balancesDto Get total USD balance - */ - getTotalBalanceInUsd(_balancesDto: BalancesDto): Promise; - - /** - * - * @param origin - * About: Whitelist domain by passing the origin domain - * Purpose: Returns the signature used in init - */ - whitelistUrl(_origin: string): Promise; - - getTransactionByHash(_txHash: string): Promise; - - getTransactionByAddress(_chainId: number, _address: string): Promise; -} - -export default INodeClient; diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts deleted file mode 100644 index a2df00662..000000000 --- a/packages/node-client/src/NodeClient.ts +++ /dev/null @@ -1,145 +0,0 @@ -import INodeClient from "./INodeClient"; -import { - SmartAccountByOwnerDto, - TokenByChainIdAndAddressDto, - TokenPriceResponse, - SupportedChainsResponse, - IndividualChainResponse, - SupportedTokensResponse, - IndividualTokenResponse, - SmartAccountsResponse, - BalancesDto, - BalancesResponse, - UsdBalanceResponse, - SCWTransactionResponse, - WhiteListSignatureResponse, -} from "./types/NodeClientTypes"; -import { getTxServiceBaseUrl } from "./utils"; -import { HttpMethod, sendRequest } from "./utils/HttpRequests"; -export interface NodeClientConfig { - /** txServiceUrl - Safe Transaction Service URL */ - txServiceUrl: string; -} - -class NodeClient implements INodeClient { - #txServiceBaseUrl: string; - - constructor({ txServiceUrl }: NodeClientConfig) { - this.#txServiceBaseUrl = getTxServiceBaseUrl(txServiceUrl); - } - - /** - * - * @returns The list of Network info - */ - async getAllSupportedChains(): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/chains/`, - method: HttpMethod.Get, - }); - } - - /** - * - * @param chainId - * @description thie function will return the chain detail base on supplied { chainId } - * @returns - */ - async getChainById(chainId: number): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/chains/${chainId}`, - method: HttpMethod.Get, - }); - } - - /** - * - * @param chainId - * @description this function will return token price base on supplied {chainId} - * @returns - */ - async getTokenPricesByChainId(chainId: number): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/chains/chainId/${chainId}/price`, - method: HttpMethod.Get, - }); - } - - async getAllTokens(): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/tokens/`, - method: HttpMethod.Get, - }); - } - - async getTokensByChainId(chainId: number): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/tokens/chainId/${chainId}`, - method: HttpMethod.Get, - }); - } - - async getTokenByChainIdAndAddress(tokenByChainIdAndAddressDto: TokenByChainIdAndAddressDto): Promise { - const { chainId, tokenAddress } = tokenByChainIdAndAddressDto; - return sendRequest({ - url: `${this.#txServiceBaseUrl}/tokens/chainId/${chainId}/address/${tokenAddress}`, - method: HttpMethod.Get, - }); - } - - async getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise { - const { chainId, owner, index } = smartAccountByOwnerDto; - return sendRequest({ - url: `${this.#txServiceBaseUrl}/smart-accounts/chainId/${chainId}/owner/${owner}/index/${index}`, - method: HttpMethod.Get, - }); - } - - async getAllTokenBalances(balancesDto: BalancesDto): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/smart-accounts/balances`, - method: HttpMethod.Post, - body: balancesDto, - }); - } - - async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/smart-accounts/balance`, - method: HttpMethod.Post, - body: balancesDto, - }); - } - - /** - * - * @param origin - * @description this function will return the signature for your domain - * @returns - */ - async whitelistUrl(origin: string): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/whitelist`, - method: HttpMethod.Post, - body: { - origin, - }, - }); - } - - getTransactionByAddress(chainId: number, address: string): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/transactions/chainId/${chainId}/address/${address}`, - method: HttpMethod.Get, - }); - } - - getTransactionByHash(txHash: string): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/transactions/txHash/${txHash}`, - method: HttpMethod.Get, - }); - } -} - -export default NodeClient; diff --git a/packages/node-client/src/index.ts b/packages/node-client/src/index.ts deleted file mode 100644 index 708fd7c83..000000000 --- a/packages/node-client/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import NodeClient, { NodeClientConfig } from "./NodeClient"; - -export * from "./types/NodeClientTypes"; -export default NodeClient; -export { NodeClientConfig }; diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts deleted file mode 100644 index c94937936..000000000 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ /dev/null @@ -1,225 +0,0 @@ -import { ChainId, SmartAccountVersion } from "@biconomy/core-types"; -export type SmartAccountInfoResponse = { - readonly name: string; - readonly version: string; - readonly api_version: string; - readonly secure: boolean; - readonly settings: { - readonly AWS_CONFIGURED: boolean; - readonly AWS_S3_CUSTOM_DOMAIN: string; - readonly ETHEREUM_NODE_URL: string; - readonly ETHEREUM_TRACING_NODE_URL: string; - readonly ETH_INTERNAL_TXS_BLOCK_PROCESS_LIMIT: number; - readonly ETH_INTERNAL_NO_FILTER: boolean; - readonly ETH_REORG_BLOCKS: number; - readonly TOKENS_LOGO_BASE_URI: string; - readonly TOKENS_LOGO_EXTENSION: string; - }; -}; - -export type SCWTransactionResponse = { - symbol: string; - tokenAddress: string; - scwAddress: string; - txHash: string; - blockNumber: number; - payment: number; - gasLimit: number; - gasUsage: number; - gasPrice: number; - chainId: number; - fromAddress: string; - toAddress: string; - amount: number; - type: string; - txStatus: string; - createdAt: number; - updatedAt: number; -}; - -export type BalancesDto = { - chainId: number; - address: string; - tokenAddresses: string[]; -}; - -export type WhiteListSignatureResponse = { - code: number; - message: string; - data: string; -}; - -export type SmartAccountByOwnerDto = { - chainId: number; - owner: string; - index: number; -}; - -export type TokenByChainIdAndAddressDto = { - chainId: number; - tokenAddress: string; -}; - -export type ContractDetails = { - version: SmartAccountVersion; - - address: string; - - abi: string; -}; - -export type ChainConfig = { - chainId: ChainId; - name: string; - symbol: string; - isL2: boolean; - isMainnet: boolean; - description: string; - blockExplorerUriTemplate: BlockExplorerConfig; - ensRegistryAddress: string; - walletFactory: ContractDetails[]; - multiSend: ContractDetails[]; - multiSendCall: ContractDetails[]; - wallet: ContractDetails[]; // base wallet - entryPoint: ContractDetails[]; //should make this address var - fallBackHandler: ContractDetails[]; //should make this address var - fallBackGasTankAddress: string; - relayerURL: string; - providerUrl: string; - indexerUrl: string; - backendNodeUrl: string; - createdAt: Date; - updatedAt: Date; - token: TokenInfo; -}; - -export type MasterCopyResponse = { - address: string; - version: string; - deployer: string; - deployedBlockNumber: number; - lastIndexedBlockNumber: number; -}; - -export type SafeInfoResponse = { - readonly address: string; - readonly nonce: number; - readonly threshold: number; - readonly owners: string[]; - readonly masterCopy: string; - readonly modules: string[]; - readonly fallbackHandler: string; - readonly version: string; -}; - -export type BlockExplorerConfig = { - address: string; - txHash: string; - api: string; -}; - -export type TokenInfo = { - id: number; - name: string; - symbol: string; - blockChain: number; - ercType?: string; - decimals: number; - logoUri: string; - address: string; - isNativeToken: boolean; - isEnabled: boolean; - cmcId: number; //Verify - price: number; //Verify - createdAt: Date; - updatedAt: Date; -}; - -// Note: Applies for Account V1 -export type ISmartAccount = { - version: SmartAccountVersion; - smartAccountAddress: string; - isDeployed: boolean; - chainId: ChainId; - eoaAddress: string; - entryPointAddress: string; - handlerAddress: string; - index: number; - implementationAddress: string; - fallBackHandlerAddress: string; - owner: string; - factoryAddress: string; - createdAt: number; - updatedAt: number; -}; - -export type IBalances = { - contract_decimals: number; - contract_name: string; - contract_ticker_symbol: string; - contract_address: string; - supports_erc: string | null; - logo_url: string | null; - last_transferred_at: string | null; - type: string; - balance: number; - balance_24h: number; - quote_rate: number; - quote_rate_24h: number; - nft_data: string | null; -}; - -export type SupportedChainsResponse = { - message: string; - code: number; - data: ChainConfig[]; -}; - -export type IndividualChainResponse = { - message: string; - code: number; - data: ChainConfig; -}; - -export type TokenPriceResponse = { - price: number; -}; - -export type SupportedTokensResponse = { - message: string; - code: number; - data: TokenInfo[]; -}; - -export type IndividualTokenResponse = { - message: string; - code: number; - data: TokenInfo; -}; -export type SmartAccountsResponse = { - message: string; - code: number; - data: ISmartAccount[]; -}; -export type BalancesResponse = { - message: string; - code: number; - data: IBalances[]; -}; - -export type UsdBalanceResponse = { - message: string; - code: number; - data: { - totalBalance: number; - }; -}; - -export type EstimateGasResponse = { - message: string; - code: number; - data: { - gas: number; - txBaseGas?: number; - }; -}; diff --git a/packages/node-client/src/utils/index.ts b/packages/node-client/src/utils/index.ts deleted file mode 100644 index 94b8829fe..000000000 --- a/packages/node-client/src/utils/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function getTxServiceBaseUrl(txServiceUrl: string): string { - return `${txServiceUrl}`; -} diff --git a/packages/node-client/tests/node-client.spec.ts b/packages/node-client/tests/node-client.spec.ts deleted file mode 100644 index 90c46ea23..000000000 --- a/packages/node-client/tests/node-client.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer as AbstractSigner } from "ethers"; -import { Web3Provider } from "@ethersproject/providers"; -import NodeClient from "../dist/src"; - -type EthereumInstance = { - chainId?: number; - provider?: Web3Provider; - signer?: AbstractSigner; -}; - -describe("Node Client tests", function () { - let nodeClient: NodeClient; - let gasUsed: number; - - beforeAll(async () => { - nodeClient = new NodeClient({ txServiceUrl: "https://sdk-backend.staging.biconomy.io/v1" }); - }); - - describe("Gas Estimation Endpoints", () => { - it("Empty test to remove warning", () => {}); - }); -}); diff --git a/packages/node-client/tsconfig.json b/packages/node-client/tsconfig.json deleted file mode 100644 index c7ff8535e..000000000 --- a/packages/node-client/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src" - }, - "include": ["src"] -} diff --git a/packages/particle-auth/.esbuild.js b/packages/particle-auth/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/particle-auth/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index af925f88a..9568c4b47 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -2,8 +2,18 @@ "name": "@biconomy/particle-auth", "version": "3.1.3", "description": "Particle auth for Biconomy SDK", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "keywords": [ "legos", "batching", @@ -12,7 +22,7 @@ "particle", "particle-auth" ], - "author": "livingrockrises ", + "author": "Biconomy", "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", "license": "MIT", "files": [ @@ -25,7 +35,16 @@ }, "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, @@ -39,5 +58,11 @@ "@particle-network/auth": "^1.2.1", "@particle-network/biconomy": "^1.0.0", "@particle-network/provider": "^1.2.0" + }, + "devDependencies": { + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/particle-auth/tsconfig.build.json b/packages/particle-auth/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/particle-auth/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/particle-auth/tsconfig.json b/packages/particle-auth/tsconfig.json index 3dc5293ed..cda17a184 100644 --- a/packages/particle-auth/tsconfig.json +++ b/packages/particle-auth/tsconfig.json @@ -5,7 +5,8 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "lib": ["es2020"], }, "include": ["src", "src/**/*.json"] } diff --git a/packages/paymaster/.esbuild.js b/packages/paymaster/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/paymaster/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/paymaster/CHANGELOG.md b/packages/paymaster/CHANGELOG.md index 27767c9bf..abbc2cae6 100644 --- a/packages/paymaster/CHANGELOG.md +++ b/packages/paymaster/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2023-07-02) + +Export createPaymaster alias for static Paymaster.create call + ## 3.1.3 (2023-12-28) VERSION Bump Only. @@ -13,52 +17,42 @@ VERSION Bump Only. ## 3.1.1 (2023-11-09) - ### Bug Fixes -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) - - +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) ## 3.1.0 (2023-09-20) -Version Bump Only. +Version Bump Only. ## 3.0.0 (2023-08-28) Modular SDK - consists stable version of below updates done in Alphas. - - ## 3.0.0-alpha.0 (2023-08-02) ### Features -* letting maxFee and maxPriority not be undefined([46b985c](https://github.com/bcnmy/biconomy-client-sdk/commit/46b985c75fd135f151c9ac4380a65438cccc6f39)) -* passing on paymasterAndData([ae267f1])(https://github.com/bcnmy/biconomy-client-sdk/commit/ae267f1a103f37856eb233a38db7063bfcc4cb45) -* handle undefined values([e53d4a7])(https://github.com/bcnmy/biconomy-client-sdk/commit/e53d4a78aded8c8802786173daf12b27d445d4a0) -* handling userOp null values([c89ac42])(https://github.com/bcnmy/biconomy-client-sdk/commit/c89ac42ae1d7fd985ef2396d925cc63ec5cf926b) -* using signature provided by userop([0c40641])(https://github.com/bcnmy/biconomy-client-sdk/commit/0c40641e4cd6133f7348bb3e3022f8ab78fe299b) - - +- letting maxFee and maxPriority not be undefined([46b985c](https://github.com/bcnmy/biconomy-client-sdk/commit/46b985c75fd135f151c9ac4380a65438cccc6f39)) +- passing on paymasterAndData([ae267f1])(https://github.com/bcnmy/biconomy-client-sdk/commit/ae267f1a103f37856eb233a38db7063bfcc4cb45) +- handle undefined values([e53d4a7])(https://github.com/bcnmy/biconomy-client-sdk/commit/e53d4a78aded8c8802786173daf12b27d445d4a0) +- handling userOp null values([c89ac42])(https://github.com/bcnmy/biconomy-client-sdk/commit/c89ac42ae1d7fd985ef2396d925cc63ec5cf926b) +- using signature provided by userop([0c40641])(https://github.com/bcnmy/biconomy-client-sdk/commit/0c40641e4cd6133f7348bb3e3022f8ab78fe299b) # 3.1.0-alpha.0 (2023-07-24) VERSION Bump Only. - ## 3.0.0-alpha.0 (2023-07-12) - ### Bug Fixes -* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) -* linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) - +- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) +- linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) ### Features -* covert gas limits to numbers for making pm service call ([b1fe96f](https://github.com/bcnmy/biconomy-client-sdk/commit/b1fe96f7a312ceaf7aa689939b7c69718c710dd1)) -* get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -* update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) +- covert gas limits to numbers for making pm service call ([b1fe96f](https://github.com/bcnmy/biconomy-client-sdk/commit/b1fe96f7a312ceaf7aa689939b7c69718c710dd1)) +- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) diff --git a/packages/paymaster/Readme.md b/packages/paymaster/Readme.md index 8b91b80a7..562a790f6 100644 --- a/packages/paymaster/Readme.md +++ b/packages/paymaster/Readme.md @@ -22,11 +22,11 @@ yarn add @biconomy/paymaster ```typescript // This is how you create paymaster instance in your dapp's -import { IPaymaster, BiconomyPaymaster } from "@biconomy/paymaster"; +import { IPaymaster, createPaymaster } from "@biconomy/paymaster"; // Currently this package only exports Biconomy Paymaster which acts as a Hybrid paymaster for gas abstraction. You can sponsor user transactions but can also make users pay gas in supported ERC20 tokens. -const paymaster = new BiconomyPaymaster({ +const paymaster = await createPaymaster({ paymasterUrl: "", // you can get this value from biconomy dashboard. https://dashboard.biconomy.io }); ``` @@ -38,7 +38,7 @@ Following are the methods that can be called on paymaster instance ```typescript export interface IHybridPaymaster extends IPaymaster { getPaymasterAndData(userOp: Partial, paymasterServiceData?: T): Promise; - buildTokenApprovalTransaction(tokenPaymasterRequest: BiconomyTokenPaymasterRequest, provider: Provider): Promise; + buildTokenApprovalTransaction(tokenPaymasterRequest: BiconomyTokenPaymasterRequest): Promise; getPaymasterFeeQuotesOrData(userOp: Partial, paymasterServiceData: FeeQuotesOrDataDto): Promise; } ``` @@ -57,17 +57,17 @@ export interface IPaymaster { ### Below API methods can be used for Biconomy Hybrid paymaster -**getPaymasterAndData** +**[getPaymasterAndData](https://bcnmy.github.io/biconomy-client-sdk/classes/Paymaster.html#getPaymasterAndData)** This function accepts a **`Partial`** object that includes all properties of **`userOp`** except for the **`signature`** and **`paymasterAndData`** field. It returns **`paymasterAndData`** as part of the **`PaymasterAndDataResponse`** -**buildTokenApprovalTransaction** +**[buildTokenApprovalTransaction](https://bcnmy.github.io/biconomy-client-sdk/classes/Paymaster.html#buildTokenApprovalTransaction)** This function is specifically used for token paymaster sponsorship. The primary purpose of this function is to create an approve transaction for paymaster that gets batched with the rest of your transactions. Note: You don't need to call this function. It will automatically get called as part of the **`buildTokenPaymasterUserOp`** function call. -**getPaymasterFeeQuotesOrData** +**[getPaymasterFeeQuotesOrData](https://bcnmy.github.io/biconomy-client-sdk/classes/Paymaster.html#getPaymasterFeeQuotesOrData)** This function is used to fetch quote information or paymaster data based on provided userOperation and paymasterServiceData. If explicit mode is not provided it tries for sponsorship first and then falls back to serving fee quotes for supported/requested token/s diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index 2ffd27699..cc40d7de7 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -2,8 +2,18 @@ "name": "@biconomy/paymaster", "version": "3.1.3", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "keywords": [ "Ethereum", "Veriying Paymaster", @@ -15,15 +25,21 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json", - "test": "jest tests/**/*.spec.ts --runInBand", - "test:file": "jest --config=../../jest.config.js --runInBand", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", - "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'" + "test": "jest tests/**/*.spec.ts --runInBand" }, - "author": "talhamalik883 ", + "author": "Biconomy", "repository": { "type": "git", "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" @@ -37,10 +53,14 @@ "access": "public" }, "dependencies": { + "@alchemy/aa-core": "3.0.0-alpha.4", "@biconomy/common": "^3.1.3", - "@biconomy/core-types": "^3.1.3", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "ethers": "^5.7.0" + "viem": "^2.7.3" + }, + "devDependencies": { + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 1734e23e6..bfe04699c 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -1,7 +1,5 @@ -import { Logger, sendRequest, HttpMethod, getTimestampInSeconds } from "@biconomy/common"; -import { resolveProperties } from "@ethersproject/properties"; -import { UserOperation, Transaction } from "@biconomy/core-types"; -import { Provider } from "@ethersproject/abstract-provider"; +import { encodeFunctionData, parseAbi } from "viem"; +import type { BigNumberish, UserOperationStruct } from "@alchemy/aa-core"; import { PaymasterFeeQuote, PaymasterConfig, @@ -12,10 +10,13 @@ import { BiconomyTokenPaymasterRequest, PaymasterMode, PaymasterAndDataResponse, -} from "./utils/Types"; -import { BigNumberish, BigNumber, ethers } from "ethers"; -import { ERC20_ABI } from "./constants"; -import { IHybridPaymaster } from "./interfaces/IHybridPaymaster"; + Transaction, + Hex, +} from "./utils/Types.js"; +import { IHybridPaymaster } from "./interfaces/IHybridPaymaster.js"; +import { MAX_UINT256, ERC20_ABI, ADDRESS_ZERO } from "./utils/Constants.js"; +import { sendRequest, HttpMethod, Logger } from "@biconomy/common"; +import { getTimestampInSeconds } from "./utils/Helpers.js"; const defaultPaymasterConfig: PaymasterConfig = { paymasterUrl: "", @@ -40,29 +41,27 @@ export class BiconomyPaymaster implements IHybridPaymaster): Promise> { - userOp = await resolveProperties(userOp); - if (userOp.nonce !== null && userOp.nonce !== undefined) { - userOp.nonce = BigNumber.from(userOp.nonce).toHexString(); - } - if (userOp.callGasLimit !== null && userOp.callGasLimit !== undefined) { - userOp.callGasLimit = BigNumber.from(userOp.callGasLimit).toString(); - } - if (userOp.verificationGasLimit !== null && userOp.verificationGasLimit !== undefined) { - userOp.verificationGasLimit = BigNumber.from(userOp.verificationGasLimit).toString(); - } - if (userOp.preVerificationGas !== null && userOp.preVerificationGas !== undefined) { - userOp.preVerificationGas = BigNumber.from(userOp.preVerificationGas).toString(); - } - if (userOp.maxFeePerGas !== null && userOp.maxFeePerGas !== undefined) { - userOp.maxFeePerGas = BigNumber.from(userOp.maxFeePerGas).toString(); - } - if (userOp.maxPriorityFeePerGas !== null && userOp.maxPriorityFeePerGas !== undefined) { - userOp.maxPriorityFeePerGas = BigNumber.from(userOp.maxPriorityFeePerGas).toString(); + private async prepareUserOperation(userOp: Partial): Promise> { + const userOperation = { ...userOp }; + try { + const keys1: (keyof UserOperationStruct)[] = ["nonce", "maxFeePerGas", "maxPriorityFeePerGas"]; + for (const key of keys1) { + if (userOperation[key] && userOperation[key] !== "0x") { + userOperation[key] = ("0x" + BigInt(userOp[key] as BigNumberish).toString(16)) as `0x${string}`; + } + } + const keys2: (keyof UserOperationStruct)[] = ["callGasLimit", "verificationGasLimit", "preVerificationGas"]; + for (const key of keys2) { + if (userOperation[key] && userOperation[key] !== "0x") { + userOperation[key] = BigInt(userOp[key] as BigNumberish).toString() as `0x${string}`; + } + } + } catch (error) { + throw `Failed to transform user operation: ${error}`; } - userOp.signature = userOp.signature || "0x"; - userOp.paymasterAndData = userOp.paymasterAndData || "0x"; - return userOp; + userOperation.signature = userOp.signature || "0x"; + userOperation.paymasterAndData = userOp.paymasterAndData || "0x"; + return userOperation; } /** @@ -71,34 +70,33 @@ export class BiconomyPaymaster implements IHybridPaymaster { + async buildTokenApprovalTransaction(tokenPaymasterRequest: BiconomyTokenPaymasterRequest): Promise { const feeTokenAddress: string = tokenPaymasterRequest.feeQuote.tokenAddress; - Logger.log("erc20 fee token address ", feeTokenAddress); const spender = tokenPaymasterRequest.spender; - Logger.log("spender address ", spender); // logging provider object isProvider - Logger.log("provider object passed - is provider", provider?._isProvider); + // Logger.log("provider object passed - is provider", provider?._isProvider); // TODO move below notes to separate method // Note: should also check in caller if the approval is already given, if yes return object with address or data 0 // Note: we would need userOp here to get the account/owner info to check allowance - let requiredApproval: BigNumberish = BigNumber.from(0).toString(); + let requiredApproval = BigInt(0); if (tokenPaymasterRequest.maxApproval && tokenPaymasterRequest.maxApproval == true) { - requiredApproval = ethers.constants.MaxUint256; + requiredApproval = BigInt(MAX_UINT256); } else { - requiredApproval = Math.ceil(tokenPaymasterRequest.feeQuote.maxGasFee * Math.pow(10, tokenPaymasterRequest.feeQuote.decimal)).toString(); + requiredApproval = BigInt(Math.ceil(tokenPaymasterRequest.feeQuote.maxGasFee * Math.pow(10, tokenPaymasterRequest.feeQuote.decimal))); } - Logger.log("required approval for erc20 token ", requiredApproval); - - const erc20Interface = new ethers.utils.Interface(JSON.stringify(ERC20_ABI)); - try { - const data = erc20Interface.encodeFunctionData("approve", [spender, requiredApproval]); + const parsedAbi = parseAbi(ERC20_ABI); + const data = encodeFunctionData({ + abi: parsedAbi, + functionName: "approve", + args: [spender, requiredApproval], + }); // TODO? // Note: For some tokens we may need to set allowance to 0 first so that would return batch of transactions and changes the return type to Transaction[] @@ -115,11 +113,10 @@ export class BiconomyPaymaster implements IHybridPaymaster, paymasterServiceData: FeeQuotesOrDataDto): Promise { - try { - userOp = await this.prepareUserOperation(userOp); - } catch (err) { - Logger.log("Error in prepareUserOperation ", err); - throw err; - } + async getPaymasterFeeQuotesOrData( + userOp: Partial, + paymasterServiceData: FeeQuotesOrDataDto, + ): Promise { + userOp = await this.prepareUserOperation(userOp); let mode = null; let expiryDuration = null; const calculateGasLimits = paymasterServiceData.calculateGasLimits ?? true; - Logger.log("calculateGasLimits is ", calculateGasLimits); let preferredToken = null; let feeTokensArray: string[] = []; // could make below null @@ -152,20 +146,16 @@ export class BiconomyPaymaster implements IHybridPaymaster = response.result.feeQuotes; - const paymasterAddress: string = response.result.paymasterAddress; + const paymasterAddress: Hex = response.result.paymasterAddress; // check all objects iterate and populate below calculation for all tokens return { feeQuotes: feeQuotesResponse, tokenPaymasterAddress: paymasterAddress }; } else if (response.result.mode == PaymasterMode.SPONSORED) { - const paymasterAndData: string = response.result.paymasterAndData; + const paymasterAndData: Hex = response.result.paymasterAndData; const preVerificationGas = response.result.preVerificationGas; const verificationGasLimit = response.result.verificationGasLimit; const callGasLimit = response.result.callGasLimit; @@ -226,7 +218,6 @@ export class BiconomyPaymaster implements IHybridPaymaster, + userOp: Partial, paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying ): Promise { - try { - userOp = await this.prepareUserOperation(userOp); - } catch (err) { - Logger.log("Error in prepareUserOperation ", err); - throw err; - } + userOp = await this.prepareUserOperation(userOp); if (paymasterServiceData?.mode === undefined) { throw new Error("mode is required in paymasterServiceData"); } const mode = paymasterServiceData.mode; - Logger.log("requested mode is ", mode); const calculateGasLimits = paymasterServiceData.calculateGasLimits ?? true; - Logger.log("calculateGasLimits is ", calculateGasLimits); let tokenInfo = null; let expiryDuration = null; @@ -286,7 +270,7 @@ export class BiconomyPaymaster implements IHybridPaymaster, - paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying + _userOp: Partial, + _paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying ): Promise { - Logger.log("userOp is ", userOp); - Logger.log("paymasterServiceData is ", paymasterServiceData); return "0x"; } + + public static async create(config: PaymasterConfig): Promise { + return new BiconomyPaymaster(config); + } } diff --git a/packages/paymaster/src/index.ts b/packages/paymaster/src/index.ts index fc7dd0950..4d78b3a0a 100644 --- a/packages/paymaster/src/index.ts +++ b/packages/paymaster/src/index.ts @@ -1,4 +1,8 @@ -export * from "./interfaces/IPaymaster"; -export * from "./interfaces/IHybridPaymaster"; -export * from "./utils/Types"; -export * from "./BiconomyPaymaster"; +import { BiconomyPaymaster } from "./BiconomyPaymaster.js"; +export * from "./interfaces/IPaymaster.js"; +export * from "./interfaces/IHybridPaymaster.js"; +export * from "./utils/Types.js"; +export * from "./BiconomyPaymaster.js"; + +export const Paymaster = BiconomyPaymaster; +export const createPaymaster = Paymaster.create; diff --git a/packages/paymaster/src/interfaces/IHybridPaymaster.ts b/packages/paymaster/src/interfaces/IHybridPaymaster.ts index aa1b51ebe..5b73bfd5e 100644 --- a/packages/paymaster/src/interfaces/IHybridPaymaster.ts +++ b/packages/paymaster/src/interfaces/IHybridPaymaster.ts @@ -1,12 +1,16 @@ -import { UserOperation } from "@biconomy/core-types"; -import { FeeQuotesOrDataResponse, BiconomyTokenPaymasterRequest, FeeQuotesOrDataDto, PaymasterAndDataResponse } from "../utils/Types"; -import { Transaction } from "@biconomy/core-types"; -import { Provider } from "@ethersproject/abstract-provider"; -import { IPaymaster } from "./IPaymaster"; +import { type UserOperationStruct } from "@alchemy/aa-core"; +import { + FeeQuotesOrDataResponse, + BiconomyTokenPaymasterRequest, + FeeQuotesOrDataDto, + PaymasterAndDataResponse, + type Transaction, +} from "../utils/Types.js"; +import { IPaymaster } from "./IPaymaster.js"; export interface IHybridPaymaster extends IPaymaster { - getPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; - getDummyPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; - buildTokenApprovalTransaction(_tokenPaymasterRequest: BiconomyTokenPaymasterRequest, _provider: Provider): Promise; - getPaymasterFeeQuotesOrData(_userOp: Partial, _paymasterServiceData: FeeQuotesOrDataDto): Promise; + getPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; + getDummyPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; + buildTokenApprovalTransaction(_tokenPaymasterRequest: BiconomyTokenPaymasterRequest): Promise; + getPaymasterFeeQuotesOrData(_userOp: Partial, _paymasterServiceData: FeeQuotesOrDataDto): Promise; } diff --git a/packages/paymaster/src/interfaces/IPaymaster.ts b/packages/paymaster/src/interfaces/IPaymaster.ts index 935392402..0d95801a5 100644 --- a/packages/paymaster/src/interfaces/IPaymaster.ts +++ b/packages/paymaster/src/interfaces/IPaymaster.ts @@ -1,8 +1,8 @@ -import { UserOperation } from "@biconomy/core-types"; +import { type UserOperationStruct } from "@alchemy/aa-core"; import { PaymasterAndDataResponse } from "../utils/Types"; export interface IPaymaster { // Implementing class may add extra parameter (for example paymasterServiceData with it's own type) in below function signature - getPaymasterAndData(_userOp: Partial): Promise; - getDummyPaymasterAndData(_userOp: Partial): Promise; + getPaymasterAndData(_userOp: Partial): Promise; + getDummyPaymasterAndData(_userOp: Partial): Promise; } diff --git a/packages/paymaster/src/constants.ts b/packages/paymaster/src/utils/Constants.ts similarity index 79% rename from packages/paymaster/src/constants.ts rename to packages/paymaster/src/utils/Constants.ts index d0efbcfe2..9a534ee8f 100644 --- a/packages/paymaster/src/constants.ts +++ b/packages/paymaster/src/utils/Constants.ts @@ -1,5 +1,6 @@ +export const MAX_UINT256 = "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; export const ENTRYPOINT_ADDRESS = "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"; - +export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000"; // export const ERC20_PAYMASTER_ADDRESS = '0xE9f6Ffc87cac92bc94f704AE017e85cB83DBe4EC' // likely to be same address on all chains export const ERC20_ABI = [ diff --git a/packages/paymaster/src/utils/Helpers.ts b/packages/paymaster/src/utils/Helpers.ts new file mode 100644 index 000000000..b6f5568d2 --- /dev/null +++ b/packages/paymaster/src/utils/Helpers.ts @@ -0,0 +1,7 @@ +/** + * @description this function will return current timestamp in seconds + * @returns Number + */ +export const getTimestampInSeconds = (): number => { + return Math.floor(Date.now() / 1000); +}; diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index 10f783ba5..d1dd7ec9f 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -1,4 +1,5 @@ -import { BigNumberish } from "ethers"; +import { BigNumberish } from "@alchemy/aa-core"; +export type Hex = `0x${string}`; export type PaymasterServiceErrorResponse = { jsonrpc: string; @@ -6,8 +7,6 @@ export type PaymasterServiceErrorResponse = { error: JsonRpcError; }; -// Generic -/* eslint-disable @typescript-eslint/no-explicit-any */ export type JsonRpcResponse = { jsonrpc: string; id: number; @@ -15,7 +14,6 @@ export type JsonRpcResponse = { error?: JsonRpcError; }; -/* eslint-disable @typescript-eslint/no-explicit-any */ export type JsonRpcError = { code: string; message: string; @@ -28,27 +26,34 @@ export type PaymasterConfig = { }; export type SponsorUserOperationDto = { + /** mode: sponsored or erc20 */ mode: PaymasterMode; + /** Always recommended, especially when using token paymaster */ calculateGasLimits?: boolean; + /** Expiry duration in seconds */ expiryDuration?: number; - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }; + /** Webhooks to be fired after user op is sent */ + webhookData?: Record; + /** Smart account meta data */ smartAccountInfo?: SmartAccountData; + /** the fee-paying token address */ feeTokenAddress?: string; }; export type FeeQuotesOrDataDto = { + /** mode: sponsored or erc20 */ mode?: PaymasterMode; + /** Expiry duration in seconds */ expiryDuration?: number; + /** Always recommended, especially when using token paymaster */ calculateGasLimits?: boolean; + /** List of tokens to be used for fee quotes, if ommitted fees for all supported will be returned */ tokenList?: string[]; + /** preferredToken: Can be ommitted to return all quotes */ preferredToken?: string; - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }; + /** Webhooks to be fired after user op is sent */ + webhookData?: Record; + /** Smart account meta data */ smartAccountInfo?: SmartAccountData; }; @@ -62,52 +67,69 @@ export type FeeTokenInfo = { }; export type SponsorpshipInfo = { - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }; + /** Webhooks to be fired after user op is sent */ + webhookData?: Record; + /** Smart account meta data */ smartAccountInfo: SmartAccountData; }; export type SmartAccountData = { + /** name: Name of the smart account */ name: string; + /** version: Version of the smart account */ version: string; }; export type PaymasterFeeQuote = { + /** symbol: Token symbol */ symbol: string; + /** tokenAddress: Token address */ tokenAddress: string; + /** decimal: Token decimal */ decimal: number; logoUrl?: string; + /** maxGasFee: in wei */ maxGasFee: number; + /** maxGasFee: in dollars */ maxGasFeeUSD?: number; usdPayment?: number; premiumPercentage: number; + /** validUntil: Unix timestamp */ validUntil?: number; }; export type BiconomyTokenPaymasterRequest = { + /** The feeQuote to be used for the transaction */ feeQuote: PaymasterFeeQuote; - spender: string; + /** The address of the spender. This is usually set to {@link FeeQuotesOrDataResponse.tokenPaymasterAddress} */ + spender: Hex; + /** Not recommended */ maxApproval?: boolean; }; export type FeeQuotesOrDataResponse = { + /** Array of results from the paymaster */ feeQuotes?: PaymasterFeeQuote[]; - tokenPaymasterAddress?: string; // spender - paymasterAndData?: string; + /** Normally set to the spender in the proceeding call to send the tx */ + tokenPaymasterAddress?: Hex; + /** Relevant Data returned from the paymaster */ + paymasterAndData?: Uint8Array | Hex; + /* Gas overhead of this UserOperation */ preVerificationGas?: BigNumberish; + /* Actual gas used by the validation of this UserOperation */ verificationGasLimit?: BigNumberish; + /* Value used by inner account execution */ callGasLimit?: BigNumberish; }; export type PaymasterAndDataResponse = { - paymasterAndData: string; - preVerificationGas?: BigNumberish; - verificationGasLimit?: BigNumberish; - callGasLimit?: BigNumberish; - maxPriorityFeePerGas?: BigNumberish; - maxFeePerGas?: BigNumberish; + paymasterAndData: Hex; + /* Gas overhead of this UserOperation */ + preVerificationGas: number; + /* Actual gas used by the validation of this UserOperation */ + verificationGasLimit: number; + /* Value used by inner account execution */ + callGasLimit: number; }; export enum PaymasterMode { @@ -125,9 +147,27 @@ export type EstimateUserOpGasResponse = { export type UserOpGasResponse = { paymasterAndData: string; + /* Gas overhead of this UserOperation */ preVerificationGas: string; maxPriorityFeePerGas: string; maxFeePerGas: string; + /* Actual gas used by the validation of this UserOperation */ verificationGasLimit: string; callGasLimit: string; }; + +type RequireAtLeastOne = Pick> & + { + [K in Keys]-?: Required> & Partial>>; + }[Keys]; + +type ValueOrData = RequireAtLeastOne< + { + value: BigNumberish | string; + data: string; + }, + "value" | "data" +>; +export type Transaction = { + to: string; +} & ValueOrData; diff --git a/packages/paymaster/tests/paymaster.e2e.spec.ts b/packages/paymaster/tests/paymaster.e2e.spec.ts new file mode 100644 index 000000000..ecb70a2b6 --- /dev/null +++ b/packages/paymaster/tests/paymaster.e2e.spec.ts @@ -0,0 +1,19 @@ +import { TestData } from "../../../tests"; + +describe("Paymaster Unit Tests", () => { + let mumbai: TestData; + let baseGoerli: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [mumbai, baseGoerli] = testDataPerChain; + }); + + it("should have chain data for mumbai", () => { + expect(mumbai).toHaveProperty("chainId"); + }); + + it("should also have chain data for base", () => { + expect(baseGoerli).toHaveProperty("chainId"); + }); +}); diff --git a/packages/paymaster/tests/paymaster.spec.ts b/packages/paymaster/tests/paymaster.spec.ts index 54e655580..0b3508a6b 100644 --- a/packages/paymaster/tests/paymaster.spec.ts +++ b/packages/paymaster/tests/paymaster.spec.ts @@ -1,5 +1,14 @@ -describe("Paymaster Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); +import { TestData } from "../../../tests"; + +describe("Paymaster Unit Tests", () => { + let ganache: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-unit-tests + [ganache] = testDataPerChain; + }); + + it("should have chain data for mumbai", () => { + expect(ganache).toHaveProperty("chainId"); }); }); diff --git a/packages/paymaster/tsconfig.build.json b/packages/paymaster/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/paymaster/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/paymaster/tsconfig.json b/packages/paymaster/tsconfig.json index 3dc5293ed..d6269c535 100644 --- a/packages/paymaster/tsconfig.json +++ b/packages/paymaster/tsconfig.json @@ -5,7 +5,8 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "types": ["node"] }, "include": ["src", "src/**/*.json"] } diff --git a/packages/transak/.esbuild.js b/packages/transak/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/transak/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/transak/package.json b/packages/transak/package.json index 4e523be85..8955eb6f6 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -2,8 +2,18 @@ "name": "@biconomy/transak", "version": "3.1.3", "description": "transak for biconomy sdk", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "keywords": [ "legos", "batching", @@ -11,7 +21,7 @@ "cross-chain", "transak" ], - "author": "livingrockrises ", + "author": "Biconomy", "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", "license": "MIT", "files": [ @@ -24,7 +34,16 @@ }, "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, @@ -36,5 +55,11 @@ }, "dependencies": { "@transak/transak-sdk": "^1.2.3" + }, + "devDependencies": { + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/transak/src/index.ts b/packages/transak/src/index.ts index 6792b304a..36f5dcfd9 100644 --- a/packages/transak/src/index.ts +++ b/packages/transak/src/index.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ // @ts-ignore import transakSDK from "@transak/transak-sdk"; -import { ITransakDto, environments } from "interface"; +import { ITransakDto, environments } from "./interface.js"; class TransakSDK { apiKey: string; diff --git a/packages/transak/tsconfig.build.json b/packages/transak/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/transak/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/transak/tsconfig.json b/packages/transak/tsconfig.json index eb424084f..d9b305a9a 100644 --- a/packages/transak/tsconfig.json +++ b/packages/transak/tsconfig.json @@ -1,12 +1,13 @@ { "extends": "../../tsconfig.settings.json", "compilerOptions": { - "jsx": "react", "composite": true, "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"] }, "include": ["src", "src/**/*.json"] } diff --git a/rebuild.sh b/rebuild.sh index 8d555308d..39c4c1a94 100755 --- a/rebuild.sh +++ b/rebuild.sh @@ -4,52 +4,30 @@ rm -rf yarn.lock rm -rf node_modules rm -rf packages/account/node_modules +rm -rf packages/account/yarn.lock rm -rf packages/account/package-lock.json rm -rf packages/account/dist rm -rf packages/bundler/node_modules +rm -rf packages/bundler/yarn.lock rm -rf packages/bundler/package-lock.json rm -rf packages/bundler/dist +rm -rf packages/common/node_modules +rm -rf packages/common/yarn.lock +rm -rf packages/common/package-lock.json +rm -rf packages/common/dist + rm -rf packages/paymaster/node_modules +rm -rf packages/paymaster/yarn.lock rm -rf packages/paymaster/package-lock.json rm -rf packages/paymaster/dist - rm -rf packages/modules/node_modules +rm -rf packages/modules/yarn.lock rm -rf packages/modules/package-lock.json rm -rf packages/modules/dist - -rm -rf packages/signers/node_modules -rm -rf packages/signers/package-lock.json -rm -rf packages/signers/dist - - -rm -rf packages/common/node_modules -rm -rf packages/common/package-lock.json -rm -rf packages/common/dist -rm -rf packages/common/src/typechain - -rm -rf packages/core-types/node_modules -rm -rf packages/core-types/package-lock.json -rm -rf packages/core-types/dist - -rm -rf packages/node-client/node_modules -rm -rf packages/node-client/package-lock.json -rm -rf packages/node-client/dist - - -rm -rf packages/web3-auth/node_modules -rm -rf packages/web3-auth/yarn.lock -rm -rf packages/web3-auth/package-lock.json -rm -rf packages/web3-auth/dist - -rm -rf packages/web3-auth-native/node_modules -rm -rf packages/web3-auth-native/yarn.lock -rm -rf packages/web3-auth-native/package-lock.json -rm -rf packages/web3-auth-native/dist - rm -rf packages/transak/node_modules rm -rf packages/transak/yarn.lock rm -rf packages/transak/package-lock.json diff --git a/tests/chains.config.ts b/tests/chains.config.ts new file mode 100644 index 000000000..8294b9248 --- /dev/null +++ b/tests/chains.config.ts @@ -0,0 +1,43 @@ +import { localhost, Chain } from "viem/chains"; +import { polygonMumbai, baseGoerli } from "viem/chains"; +import { config } from "dotenv"; + +config(); + +export type SupportedTestChain = "ganache" | "baseGoerli" | "mumbai"; +type BaseChainConfig = { + chainId: number; + entryPointAddress: string; + bundlerUrl: string; + paymasterUrl?: string; + viemChain: Chain; + biconomyPaymasterApiKey?: string; +}; +export const CHAIN_CONFIG: Record = { + ganache: { // No useful bundler or paymaster tests for ganache + chainId: 1337, + entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + bundlerUrl: "https://bundler.biconomy.io/api/v2/1/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + viemChain: localhost, + }, + baseGoerli: { + chainId: 84531, + entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + bundlerUrl: "https://bundler.biconomy.io/api/v2/84531/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + paymasterUrl: "https://paymaster.biconomy.io/api/v1/84531/" + process.env.E2E_BICO_PAYMASTER_KEY_BASE!, + viemChain: baseGoerli, + biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_BASE!, + }, + mumbai: { + chainId: 80001, + entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/" + process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, + viemChain: polygonMumbai, + biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, + }, +}; +export const E2E_TEST_CHAINS = [CHAIN_CONFIG.mumbai, CHAIN_CONFIG.baseGoerli]; +export const UNIT_TEST_CHAIN = CHAIN_CONFIG.ganache; + +export default CHAIN_CONFIG; \ No newline at end of file diff --git a/tests/index.d.ts b/tests/index.d.ts new file mode 100644 index 000000000..d3093f47a --- /dev/null +++ b/tests/index.d.ts @@ -0,0 +1,26 @@ +import { Chain, Hex, PrivateKeyAccount, PublicClient, WalletClient } from "viem"; +import { WalletClientSigner } from "@alchemy/aa-core"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Signer } from "@ethersproject/abstract-signer"; + +interface WalletProps { + alchemyWalletClientSigner: WalletClientSigner; + viemWallet: WalletClient; + balance: BigInt; + publicAddress: Hex; + account: PrivateKeyAccount; + privateKey: Hex; + ethersSigner: Signer; +} + +export type TestData = { + whale: WalletProps; + minnow: WalletProps; + publicClient: PublicClient; + chainId: number; + bundlerUrl: string; + entryPointAddress: string; + viemChain: Chain; + biconomyPaymasterApiKey: string; + ethersProvider: JsonRpcProvider; +}; diff --git a/tests/setup-e2e-tests.ts b/tests/setup-e2e-tests.ts new file mode 100644 index 000000000..a95150f4a --- /dev/null +++ b/tests/setup-e2e-tests.ts @@ -0,0 +1,142 @@ +import { createWalletClient, http, createPublicClient } from "viem"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Wallet } from "@ethersproject/wallet"; +import { privateKeyToAccount } from "viem/accounts"; +import { WalletClientSigner } from "@alchemy/aa-core"; +import { config } from "dotenv"; +import { E2E_TEST_CHAINS } from "./chains.config"; + +config(); + +beforeAll(async () => { + envVarCheck(); + + const privateKeyOne: `0x${string}` = `0x${process.env.E2E_PRIVATE_KEY_ONE}`; + const privateKeyTwo: `0x${string}` = `0x${process.env.E2E_PRIVATE_KEY_TWO}`; + const walletOne = privateKeyToAccount(privateKeyOne); + const walletTwo = privateKeyToAccount(privateKeyTwo); + + const promises = E2E_TEST_CHAINS.map((chain) => { + const ethersProvider = new JsonRpcProvider(chain.viemChain.rpcUrls.default.http[0]); + const ethersSignerOne = new Wallet(privateKeyOne, ethersProvider); + const ethersSignerTwo = new Wallet(privateKeyTwo, ethersProvider); + + const publicClient = createPublicClient({ + chain: chain.viemChain, + transport: http(), + }); + + const viemWalletClientOne = createWalletClient({ + account: walletOne, + chain: chain.viemChain, + transport: http(chain.viemChain.rpcUrls.default.http[0]), + }); + const viemWalletClientTwo = createWalletClient({ + account: walletTwo, + chain: chain.viemChain, + transport: http(chain.viemChain.rpcUrls.default.http[0]), + }); + const walletClientSignerOne = new WalletClientSigner(viemWalletClientOne, "viem"); + const walletClientSignerTwo = new WalletClientSigner(viemWalletClientTwo, "viem"); + + return Promise.all([ + Promise.all([ + { + ...chain, + publicClient, + account: walletOne, + publicAddress: walletOne.address, + viemWallet: viemWalletClientOne, + alchemyWalletClientSigner: walletClientSignerOne, + ethersProvider, + ethersSigner: ethersSignerOne, + privateKey: privateKeyOne, + }, + publicClient.getBalance({ + address: walletOne.address, + }), + ]), + Promise.all([ + { + ...chain, + publicClient, + account: walletTwo, + publicAddress: walletTwo.address, + viemWallet: viemWalletClientTwo, + alchemyWalletClientSigner: walletClientSignerTwo, + ethersProvider, + ethersSigner: ethersSignerTwo, + privateKey: privateKeyTwo, + }, + publicClient.getBalance({ + address: walletTwo.address, + }), + ]), + ]); + }); + const balancesPerChain = await Promise.all(promises); + + // @ts-ignore + testDataPerChain = balancesPerChain.map((dataAndBalanceArray) => { + const sortedBalances = dataAndBalanceArray + .map(([datum, balance]) => ({ + ...datum, + balance, + })) + .sort((a, b) => { + if (a.balance > b.balance) { + return 1; + } else if (a.balance > b.balance) { + return -1; + } else { + return 0; + } + }); + + const whaleBalance = sortedBalances[0]; + const minnowBalance = sortedBalances[1]; + + const commonData = { + publicClient: whaleBalance.publicClient, + chainId: whaleBalance.chainId, + bundlerUrl: whaleBalance.bundlerUrl, + entryPointAddress: whaleBalance.entryPointAddress, + viemChain: whaleBalance.viemChain, + biconomyPaymasterApiKey: whaleBalance.biconomyPaymasterApiKey, + ethersProvider: whaleBalance.ethersProvider, + paymasterUrl: whaleBalance.paymasterUrl, + }; + + const datum = { + ...commonData, + whale: { + balance: whaleBalance.balance, + viemWallet: whaleBalance.viemWallet, + alchemyWalletClientSigner: whaleBalance.alchemyWalletClientSigner, + publicAddress: whaleBalance.publicAddress, + account: whaleBalance.account, + ethersSigner: whaleBalance.ethersSigner, + privateKey: whaleBalance.privateKey, + }, + minnow: { + balance: minnowBalance.balance, + viemWallet: minnowBalance.viemWallet, + alchemyWalletClientSigner: minnowBalance.alchemyWalletClientSigner, + publicAddress: minnowBalance.publicAddress, + account: minnowBalance.account, + ethersSigner: whaleBalance.ethersSigner, + privateKey: minnowBalance.privateKey, + }, + }; + return datum; + }); +}); + +const envVarCheck = () => { + const REQUIRED_FIELDS = ["E2E_PRIVATE_KEY_ONE", "E2E_PRIVATE_KEY_TWO", "E2E_BICO_PAYMASTER_KEY_MUMBAI", "E2E_BICO_PAYMASTER_KEY_BASE"]; + const hasFields = REQUIRED_FIELDS.every((field) => !!process.env[field]); + if (!hasFields) { + console.error("Missing env var"); + process.exit(0); + } +}; diff --git a/tests/setup-unit-tests.ts b/tests/setup-unit-tests.ts new file mode 100644 index 000000000..03360b043 --- /dev/null +++ b/tests/setup-unit-tests.ts @@ -0,0 +1,75 @@ +import { createWalletClient, http, createPublicClient } from "viem"; +import { WalletClientSigner } from "@alchemy/aa-core"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Wallet } from "@ethersproject/wallet"; +import { UNIT_TEST_CHAIN } from "./chains.config"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; + +beforeAll(() => { + const { chainId, bundlerUrl, viemChain, entryPointAddress } = UNIT_TEST_CHAIN; + const privateKeyOne = generatePrivateKey(); + const accountOne = privateKeyToAccount(privateKeyOne); + + const ethersProvider = new JsonRpcProvider(viemChain.rpcUrls.default.http[0]); + const ethersSignerOne = new Wallet(privateKeyOne, ethersProvider); + + const viemWalletClientOne = createWalletClient({ + account: accountOne, + chain: viemChain, + transport: http(viemChain.rpcUrls.default.http[0]), + }); + + const walletClientSignerOne = new WalletClientSigner(viemWalletClientOne, "viem"); + const publicAddressOne = accountOne.address; + const publicClient = createPublicClient({ + chain: viemChain, + transport: http(), + }); + + const privateKeyTwo = generatePrivateKey(); + const accountTwo = privateKeyToAccount(privateKeyTwo); + + const ethersSignerTwo = new Wallet(privateKeyTwo, ethersProvider); + + const viemWalletClientTwo = createWalletClient({ + account: accountTwo, + chain: viemChain, + transport: http(viemChain.rpcUrls.default.http[0]), + }); + const walletClientSignerTwo = new WalletClientSigner(viemWalletClientTwo, "viem"); + const publicAddressTwo = accountTwo.address; + + const whale = { + viemWallet: viemWalletClientOne, + alchemyWalletClientSigner: walletClientSignerOne, + balance: 0, + publicAddress: publicAddressOne, + ethersSigner: ethersSignerOne, + account: accountOne, + privateKey: privateKeyOne, + }; + + const minnow = { + viemWallet: viemWalletClientTwo, + alchemyWalletClientSigner: walletClientSignerTwo, + balance: 0, + publicAddress: publicAddressTwo, + ethersSigner: ethersSignerTwo, + account: accountTwo, + privateKey: privateKeyTwo, + }; + + // @ts-ignore + testDataPerChain = [ + { + whale, + minnow, + publicClient, + chainId, + bundlerUrl, + entryPointAddress, + viemChain, + ethersProvider, + }, + ]; +}); diff --git a/tests/utils.ts b/tests/utils.ts new file mode 100644 index 000000000..c010435f6 --- /dev/null +++ b/tests/utils.ts @@ -0,0 +1,45 @@ +import { Hex, PublicClient, parseAbi } from "viem"; + +export const checkBalance = (publicClient: PublicClient, address: Hex, tokenAddress?: Hex) => { + if (!tokenAddress) { + return publicClient.getBalance({ address }); + } else { + return publicClient.readContract({ + address: tokenAddress, + abi: parseAbi(["function balanceOf(address owner) view returns (uint balance)"]), + functionName: "balanceOf", + // @ts-ignore + args: [address], + }); + } +}; + +// TODO(Joe): Make human readable +export const entryPointABI = [ + { + inputs: [ + { + components: [ + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, + { internalType: "uint256", name: "callGasLimit", type: "uint256" }, + { internalType: "uint256", name: "verificationGasLimit", type: "uint256" }, + { internalType: "uint256", name: "preVerificationGas", type: "uint256" }, + { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, + { internalType: "uint256", name: "maxPriorityFeePerGas", type: "uint256" }, + { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, + { internalType: "bytes", name: "signature", type: "bytes" }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "getUserOpHash", + outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], + stateMutability: "view", + type: "function", + }, +]; diff --git a/tsconfig.json b/tsconfig.json index 3ad9d22bd..8172cdac6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,14 +11,12 @@ }, "include": ["packages/**/*"], "references": [ - { "path": "./packages/common" }, - { "path": "./packages/core-types" }, - { "path": "./packages/node-client" }, - { "path": "./packages/web3-auth" }, - { "path": "./packages/web3-auth-native" }, { "path": "./packages/transak" }, { "path": "./packages/bundler" }, + { "path": "./packages/particle-auth" }, { "path": "./packages/paymaster" }, - { "path": "./packages/account" } + { "path": "./packages/account" }, + { "path": "./packages/common" }, + { "path": "./packages/modules" }, ] } diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..ee4c09890 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,9872 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# 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== + +"@adraffy/ens-normalize@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" + integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== + +"@alchemy/aa-core@3.0.0-alpha.4": + version "3.0.0-alpha.4" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.0.0-alpha.4.tgz#3abe0911f7c35cc6f0fc0cd03faad5673a01f0a9" + integrity sha512-mTVMDciBYIrXRgJnDiew2nRhjeAMKIK3RijGR3TQ7Gn6cpY8ZKSiJoTM5yRCttx368jqz0BACD1mjTg/zU8+Cg== + dependencies: + abitype "^0.8.3" + eventemitter3 "^5.0.1" + viem "^2.5.0" + zod "^3.22.4" + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" + integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.9" + "@babel/parser" "^7.23.9" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== + dependencies: + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + +"@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/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helpers@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" + integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== + dependencies: + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" + +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" + integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/runtime@^7.21.0": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" + integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + +"@babel/traverse@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" + integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" + integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@chainsafe/as-sha256@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" + integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== + +"@chainsafe/persistent-merkle-tree@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" + integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/persistent-merkle-tree@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" + integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/ssz@^0.10.0": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" + integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.5.0" + +"@chainsafe/ssz@^0.9.2": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" + integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.4.2" + case "^1.6.3" + +"@colors/colors@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" + integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@dabh/diagnostics@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== + +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== + +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== + +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== + +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== + +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== + +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== + +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== + +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== + +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== + +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== + +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== + +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== + +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== + +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== + +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== + +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== + +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== + +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== + +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== + +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== + +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== + +"@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.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + 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.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@fastify/busboy@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" + integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== + +"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@humanwhocodes/config-array@^0.11.13": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.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.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.22" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@lerna/child-process@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-7.4.2.tgz#a2fd013ac2150dc288270d3e0d0b850c06bec511" + integrity sha512-je+kkrfcvPcwL5Tg8JRENRqlbzjdlZXyaR88UcnCdNW0AJ1jX9IfHRys1X7AwSroU2ug8ESNC+suoBw1vX833Q== + dependencies: + chalk "^4.1.0" + execa "^5.0.0" + strong-log-transformer "^2.1.0" + +"@lerna/create@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-7.4.2.tgz#f845fad1480e46555af98bd39af29571605dddc9" + integrity sha512-1wplFbQ52K8E/unnqB0Tq39Z4e+NEoNrpovEnl6GpsTUrC6WDp8+w0Le2uCBV0hXyemxChduCkLz4/y1H1wTeg== + dependencies: + "@lerna/child-process" "7.4.2" + "@npmcli/run-script" "6.0.2" + "@nx/devkit" ">=16.5.1 < 17" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "19.0.11" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.1" + columnify "1.6.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "^8.2.0" + dedent "0.7.0" + execa "5.0.0" + fs-extra "^11.1.1" + get-stream "6.0.0" + git-url-parse "13.1.0" + glob-parent "5.1.2" + globby "11.1.0" + graceful-fs "4.2.11" + has-unicode "2.0.1" + ini "^1.3.8" + init-package-json "5.0.0" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + js-yaml "4.1.0" + libnpmpublish "7.3.0" + load-json-file "6.2.0" + lodash "^4.17.21" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "8.1.1" + npm-packlist "5.1.1" + npm-registry-fetch "^14.0.5" + npmlog "^6.0.2" + nx ">=16.5.1 < 17" + p-map "4.0.0" + p-map-series "2.1.0" + p-queue "6.6.2" + p-reduce "^2.1.0" + pacote "^15.2.0" + pify "5.0.0" + read-cmd-shim "4.0.0" + read-package-json "6.0.4" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.4" + signal-exit "3.0.7" + slash "^3.0.0" + ssri "^9.0.1" + strong-log-transformer "2.1.0" + tar "6.1.11" + temp-dir "1.0.0" + upath "2.0.1" + uuid "^9.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "5.0.0" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "16.2.0" + yargs-parser "20.2.4" + +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@noble/curves@1.2.0", "@noble/curves@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/curves@1.3.0", "@noble/curves@~1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== + dependencies: + "@noble/hashes" "1.3.3" + +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/hashes@1.3.3", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@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.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nomicfoundation/ethereumjs-block@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" + integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + +"@nomicfoundation/ethereumjs-blockchain@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" + integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-ethash" "3.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + level "^8.0.0" + lru-cache "^5.1.1" + memory-level "^1.0.0" + +"@nomicfoundation/ethereumjs-common@4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" + integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.2" + crc-32 "^1.2.0" + +"@nomicfoundation/ethereumjs-ethash@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" + integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + bigint-crypto-utils "^3.0.23" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-evm@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" + integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== + dependencies: + "@ethersproject/providers" "^5.7.1" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/ethereumjs-rlp@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" + integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== + +"@nomicfoundation/ethereumjs-statemanager@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" + integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + js-sdsl "^4.1.4" + +"@nomicfoundation/ethereumjs-trie@6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" + integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@types/readable-stream" "^2.3.13" + ethereum-cryptography "0.1.3" + readable-stream "^3.6.0" + +"@nomicfoundation/ethereumjs-tx@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" + integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== + dependencies: + "@chainsafe/ssz" "^0.9.2" + "@ethersproject/providers" "^5.7.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@9.0.2": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" + integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== + dependencies: + "@chainsafe/ssz" "^0.10.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-vm@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" + integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" + integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" + integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" + integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" + integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" + integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" + integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" + integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" + integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" + integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" + +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/fs@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== + dependencies: + semver "^7.3.5" + +"@npmcli/git@^4.0.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.1.0.tgz#ab0ad3fd82bc4d8c1351b6c62f0fa56e8fe6afa6" + integrity sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ== + dependencies: + "@npmcli/promise-spawn" "^6.0.0" + lru-cache "^7.4.4" + npm-pick-manifest "^8.0.0" + proc-log "^3.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^3.0.0" + +"@npmcli/installed-package-contents@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" + integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== + dependencies: + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/node-gyp@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" + integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== + +"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" + integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== + dependencies: + which "^3.0.0" + +"@npmcli/run-script@6.0.2", "@npmcli/run-script@^6.0.0": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885" + integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/promise-spawn" "^6.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^3.0.0" + which "^3.0.0" + +"@nrwl/devkit@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-16.10.0.tgz#ac8c5b4db00f12c4b817c937be2f7c4eb8f2593c" + integrity sha512-fRloARtsDQoQgQ7HKEy0RJiusg/HSygnmg4gX/0n/Z+SUS+4KoZzvHjXc6T5ZdEiSjvLypJ+HBM8dQzIcVACPQ== + dependencies: + "@nx/devkit" "16.10.0" + +"@nrwl/tao@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-16.10.0.tgz#94642a0380709b8e387e1e33705a5a9624933375" + integrity sha512-QNAanpINbr+Pod6e1xNgFbzK1x5wmZl+jMocgiEFXZ67KHvmbD6MAQQr0MMz+GPhIu7EE4QCTLTyCEMlAG+K5Q== + dependencies: + nx "16.10.0" + tslib "^2.3.0" + +"@nx/devkit@16.10.0", "@nx/devkit@>=16.5.1 < 17": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-16.10.0.tgz#7e466be2dee2dcb1ccaf286786ca2a0a639aa007" + integrity sha512-IvKQqRJFDDiaj33SPfGd3ckNHhHi6ceEoqCbAP4UuMXOPPVOX6H0KVk+9tknkPb48B7jWIw6/AgOeWkBxPRO5w== + dependencies: + "@nrwl/devkit" "16.10.0" + ejs "^3.1.7" + enquirer "~2.3.6" + ignore "^5.0.4" + semver "7.5.3" + tmp "~0.2.1" + tslib "^2.3.0" + +"@nx/nx-darwin-arm64@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.10.0.tgz#0c73010cac7a502549483b12bad347da9014e6f1" + integrity sha512-YF+MIpeuwFkyvM5OwgY/rTNRpgVAI/YiR0yTYCZR+X3AAvP775IVlusNgQ3oedTBRUzyRnI4Tknj1WniENFsvQ== + +"@nx/nx-darwin-x64@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-16.10.0.tgz#2ccf270418d552fd0a8e0d6089aee4944315adaa" + integrity sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg== + +"@nx/nx-freebsd-x64@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.10.0.tgz#c3ee6914256e69493fed9355b0d6661d0e86da44" + integrity sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw== + +"@nx/nx-linux-arm-gnueabihf@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.10.0.tgz#a961eccbb38acb2da7fc125b29d1fead0b39152f" + integrity sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA== + +"@nx/nx-linux-arm64-gnu@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.10.0.tgz#795f20072549d03822b5c4639ef438e473dbb541" + integrity sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g== + +"@nx/nx-linux-arm64-musl@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.10.0.tgz#f2428ee6dbe2b2c326e8973f76c97666def33607" + integrity sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ== + +"@nx/nx-linux-x64-gnu@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.10.0.tgz#d36c2bcf94d49eaa24e3880ddaf6f1f617de539b" + integrity sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA== + +"@nx/nx-linux-x64-musl@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.10.0.tgz#78bd2ab97a583b3d4ea3387b67fd7b136907493c" + integrity sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q== + +"@nx/nx-win32-arm64-msvc@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.10.0.tgz#ef20ec8d0c83d66e73e20df12d2c788b8f866396" + integrity sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA== + +"@nx/nx-win32-x64-msvc@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.10.0.tgz#7410a51d0f8be631eec9552f01b2e5946285927c" + integrity sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA== + +"@octokit/auth-token@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" + integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== + +"@octokit/core@^4.2.1": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" + integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== + dependencies: + "@octokit/auth-token" "^3.0.0" + "@octokit/graphql" "^5.0.0" + "@octokit/request" "^6.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^9.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^7.0.0": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" + integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== + dependencies: + "@octokit/types" "^9.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^5.0.0": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" + integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== + dependencies: + "@octokit/request" "^6.0.0" + "@octokit/types" "^9.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^18.0.0": + version "18.1.1" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz#09bdfdabfd8e16d16324326da5148010d765f009" + integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== + +"@octokit/plugin-enterprise-rest@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + +"@octokit/plugin-paginate-rest@^6.1.2": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" + integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== + dependencies: + "@octokit/tsconfig" "^1.0.2" + "@octokit/types" "^9.2.3" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@^7.1.2": + version "7.2.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz#37a84b171a6cb6658816c82c4082ac3512021797" + integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== + dependencies: + "@octokit/types" "^10.0.0" + +"@octokit/request-error@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" + integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== + dependencies: + "@octokit/types" "^9.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^6.0.0": + version "6.2.8" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" + integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== + dependencies: + "@octokit/endpoint" "^7.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^9.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + +"@octokit/rest@19.0.11": + version "19.0.11" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.11.tgz#2ae01634fed4bd1fca5b642767205ed3fd36177c" + integrity sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw== + dependencies: + "@octokit/core" "^4.2.1" + "@octokit/plugin-paginate-rest" "^6.1.2" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^7.1.2" + +"@octokit/tsconfig@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" + integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== + +"@octokit/types@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" + integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== + dependencies: + "@octokit/openapi-types" "^18.0.0" + +"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": + version "9.3.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" + integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== + dependencies: + "@octokit/openapi-types" "^18.0.0" + +"@parcel/watcher@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" + integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== + dependencies: + node-addon-api "^3.2.1" + node-gyp-build "^4.3.0" + +"@particle-network/analytics@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@particle-network/analytics/-/analytics-1.0.1.tgz#b3657cf7aaea57f90a7ac2c03f72b8786c298012" + integrity sha512-ApcSMo1BXQlywO+lvOpG3Y2/SVGNCpJzXO/4e3zHzE/9j+uMehsilDzPwWQwLhrCXZYwVm7mmE71Gs36yobiNw== + dependencies: + hash.js "^1.1.7" + uuidv4 "^6.2.13" + +"@particle-network/auth@^1.2.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@particle-network/auth/-/auth-1.3.1.tgz#f9ee51749e3b10e700e0d8c51a8c0769ab0b9851" + integrity sha512-hu6ie5RjjN4X+6y/vfjyCsSX3pQuS8k8ZoMb61QWwhWsnZXKzpBUVeAEk55aGfxxXY+KfBkSmZosyaZHGoHnfw== + dependencies: + "@particle-network/analytics" "^1.0.1" + "@particle-network/chains" "*" + "@particle-network/crypto" "^1.0.1" + buffer "^6.0.3" + draggabilly "^3.0.0" + +"@particle-network/biconomy@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@particle-network/biconomy/-/biconomy-1.0.0.tgz#91f79c6341db0fc9b23d3ed9c61fbb08df727c31" + integrity sha512-MvYdTGT48WJB72SqkmZbx3NI8HdjWb8EZNKIkbddcusws/Uqy4dHV2+tP7UWup+vGltCXK/55KAdvgcwFTsZrQ== + dependencies: + axios "^1.3.6" + uuid "^8.3.2" + +"@particle-network/chains@*": + version "1.3.16" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.16.tgz#5b56104b0d7a6c87d17eb7f2d597ee358a430cd9" + integrity sha512-vr30c56QmMMxXP59hL4MysdmKNHCD2JmMEdhfly5C+HB+N4p/a7ioblioatRIukgZPP9/Qnc7TPJISGlQaGWpA== + +"@particle-network/crypto@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@particle-network/crypto/-/crypto-1.0.1.tgz#26afef622a3eb906dca5c810fef8001ffee29029" + integrity sha512-GgvHmHcFiNkCLZdcJOgctSbgvs251yp+EAdUydOE3gSoIxN6KEr/Snu9DebENhd/nFb7FDk5ap0Hg49P7pj1fg== + dependencies: + crypto-js "^4.1.1" + uuidv4 "^6.2.13" + +"@particle-network/provider@^1.2.0": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@particle-network/provider/-/provider-1.3.2.tgz#68ae98cca471c7612206cb43c915719cd321fb25" + integrity sha512-3XAUMCISTMYE57LZik7PrVanLIUyyU1ufb5eHtsoQw5ORfH0IeX3E5o6x5mxtfOXKfxVQ0tsIoLRMw0jMmSDpA== + dependencies: + "@particle-network/chains" "*" + axios "^1.3.6" + uuid "^8.3.2" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + +"@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" + integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== + +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== + dependencies: + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" + +"@scure/bip32@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.2.tgz#90e78c027d5e30f0b22c1f8d50ff12f3fb7559f8" + integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== + dependencies: + "@noble/curves" "~1.2.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.2" + +"@scure/bip32@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" + integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== + dependencies: + "@noble/curves" "~1.3.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" + integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== + dependencies: + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sigstore/bundle@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-1.1.0.tgz#17f8d813b09348b16eeed66a8cf1c3d6bd3d04f1" + integrity sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + +"@sigstore/protobuf-specs@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b" + integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== + +"@sigstore/sign@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-1.0.0.tgz#6b08ebc2f6c92aa5acb07a49784cb6738796f7b4" + integrity sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA== + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + make-fetch-happen "^11.0.1" + +"@sigstore/tuf@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.3.tgz#2a65986772ede996485728f027b0514c0b70b160" + integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + tuf-js "^1.1.7" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@transak/transak-sdk@^1.2.3": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@transak/transak-sdk/-/transak-sdk-1.4.1.tgz#90dee041b772c71c35cfb22df9ef51970b780db4" + integrity sha512-/BKzb9orz1xDxa41oOPW+4KpjSHNEXgtaFazX/aIjQbr7LLbRqfXC/IHzpPmjR9OmFm8pFhV2Y86Rg0aZt5ZUA== + dependencies: + events "^3.3.0" + query-string "^8.1.0" + +"@trufflesuite/bigint-buffer@1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" + integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== + dependencies: + node-gyp-build "4.4.0" + +"@trufflesuite/uws-js-unofficial@20.30.0-unofficial.0": + version "20.30.0-unofficial.0" + resolved "https://registry.yarnpkg.com/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz#2fbc2f8ef7e82fbeea6abaf7e8a9d42a02b479d3" + integrity sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA== + dependencies: + ws "8.13.0" + optionalDependencies: + bufferutil "4.0.7" + utf-8-validate "6.0.3" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@tufjs/canonical-json@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" + integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== + +"@tufjs/models@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" + integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== + dependencies: + "@tufjs/canonical-json" "1.0.0" + minimatch "^9.0.0" + +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + dependencies: + "@babel/types" "^7.20.7" + +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== + dependencies: + "@types/node" "*" + +"@types/debug@^4.1.9": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^29.5.4": + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.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.1", "@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@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/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/node@*", "@types/node@^20.11.10": + version "20.11.16" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.16.tgz#4411f79411514eb8e2926f036c86c9f0e4ec6708" + integrity sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ== + 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.2" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== + dependencies: + "@types/node" "*" + +"@types/readable-stream@^2.3.13": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + +"@types/secp256k1@^4.0.1": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== + dependencies: + "@types/node" "*" + +"@types/seedrandom@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" + integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== + +"@types/semver@^7.5.0": + version "7.5.6" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" + integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/triple-beam@^1.3.2": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== + +"@types/uuid@8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^6.7.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.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.6.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== + dependencies: + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== + dependencies: + "@typescript-eslint/types" "6.21.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== + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +"@yarnpkg/parsers@3.0.0-rc.46": + version "3.0.0-rc.46" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01" + integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@zkochan/js-yaml@0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" + integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== + dependencies: + argparse "^2.0.1" + +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abitype@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" + integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== + +abitype@^0.8.3: + version "0.8.11" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.8.11.tgz#66e1cf2cbf46f48d0e57132d7c1c392447536cc1" + integrity sha512-bM4v2dKvX08sZ9IU38IN5BKmN+ZkOSd2oI4a9f0ejHYZQYV6cDr7j+d95ga0z2XHG36Y4jzoG5Z7qDqxp7fi/A== + +abstract-level@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" + integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +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.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + 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-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/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-sequence-parser@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" + integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +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== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +args@5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/args/-/args-5.0.3.tgz#943256db85021a85684be2f0882f25d796278702" + integrity sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA== + dependencies: + camelcase "5.0.0" + chalk "2.4.2" + leven "2.1.0" + mri "1.1.4" + +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +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@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +array.prototype.filter@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" + integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +array.prototype.findlastindex@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" + integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +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.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + 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== + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +async-eventemitter@0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async@^2.4.0: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +async@^3.2.3, async@^3.2.4: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" + integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== + +axios@^1.0.0, axios@^1.3.6: + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +bigint-crypto-utils@^3.0.23: + version "3.3.0" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" + integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== + +bignumber.js@^9.0.1: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserslist@^4.22.2: + version "4.22.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" + integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== + dependencies: + caniuse-lite "^1.0.30001580" + electron-to-chromium "^1.4.648" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-reverse@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" + integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bufferutil@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== + dependencies: + node-gyp-build "^4.3.0" + +bufferutil@4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" + integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + dependencies: + node-gyp-build "^4.3.0" + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +byte-size@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" + integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + +cacache@^17.0.0: + version "17.1.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" + integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^7.7.1" + minipass "^7.0.3" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.6.tgz#6c46675fc7a5e9de82d75a233d586c8b7ac0d931" + integrity sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + set-function-length "^1.2.0" + +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: + version "5.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" + integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + +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, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001580: + version "1.0.30001585" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz#0b4e848d84919c783b2a41c13f7de8ce96744401" + integrity sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q== + +case@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + +catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +chalk@2.4.2, chalk@^2.4.2: + version "2.4.2" + 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" + +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +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: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0, ci-info@^3.6.1: + 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.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cjs-module-lexer@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + +classic-level@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" + integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "^2.2.2" + node-gyp-build "^4.3.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-cursor@3.1.0, cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cli-spinners@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + 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-deep@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.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== + +cmd-shim@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" + integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +color-convert@^1.9.0, color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + +columnify@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +commander@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + +commander@^2.9.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +concurrently@^8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.2.tgz#353141985c198cfa5e4a3ef90082c336b5851784" + integrity sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg== + dependencies: + chalk "^4.1.2" + date-fns "^2.30.0" + lodash "^4.17.21" + rxjs "^7.8.1" + shell-quote "^1.8.1" + spawn-command "0.0.2" + supports-color "^8.1.1" + tree-kill "^1.2.2" + yargs "^17.7.2" + +confusing-browser-globals@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +conventional-changelog-angular@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" + integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== + dependencies: + compare-func "^2.0.0" + +conventional-changelog-core@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz#3c331b155d5b9850f47b4760aeddfc983a92ad49" + integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^6.0.0" + conventional-commits-parser "^4.0.0" + dateformat "^3.0.3" + get-pkg-repo "^4.2.1" + git-raw-commits "^3.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^5.0.0" + normalize-package-data "^3.0.3" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + +conventional-changelog-preset-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" + integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== + +conventional-changelog-writer@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" + integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== + dependencies: + conventional-commits-filter "^3.0.0" + dateformat "^3.0.3" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + meow "^8.1.2" + semver "^7.0.0" + split "^1.0.1" + +conventional-commits-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" + integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.1" + +conventional-commits-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" + integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== + dependencies: + JSONStream "^1.3.5" + is-text-path "^1.0.1" + meow "^8.1.2" + split2 "^3.2.2" + +conventional-recommended-bump@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" + integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^3.0.0" + conventional-commits-filter "^3.0.0" + conventional-commits-parser "^4.0.0" + git-raw-commits "^3.0.0" + git-semver-tags "^5.0.0" + meow "^8.1.2" + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^8.2.0: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + 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" + +crypto-js@^4.1.1, crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +date-fns@^2.30.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + +dateformat@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +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: + 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.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decode-uri-component@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.4.1.tgz#2ac4859663c704be22bf7db760a1494a49ab2cc5" + integrity sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ== + +dedent@0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + +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== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +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.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.2.tgz#f3c33b4f0102360cd7c0f5f28700f5678510b63a" + integrity sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.2" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + 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.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +deprecation@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + 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" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@~10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" + integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== + +dotenv@~16.3.1: + version "16.3.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" + integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== + +draggabilly@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/draggabilly/-/draggabilly-3.0.0.tgz#48defe10a67f346a0338caaa40c0765c4d3912d6" + integrity sha512-aEs+B6prbMZQMxc9lgTpCBfyCUhRur/VFucHhIOvlvvdARTj7TcDmX/cdOUtqbjJJUh7+agyJXR5Z6IFe1MxwQ== + dependencies: + get-size "^3.0.0" + unidragger "^3.0.0" + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +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.7: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.648: + version "1.4.661" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.661.tgz#b28d63468b06e75610ed2b0f8e5f5f669a57bd91" + integrity sha512-AFg4wDHSOk5F+zA8aR+SVIOabu7m0e7BiJnigCvPXzIGy731XENw/lmNxTySpVFtkFEy+eyt4oHhh5FF3NjQNw== + +elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +email-addresses@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-5.0.0.tgz#7ae9e7f58eef7d5e3e2c2c2d3ea49b78dc854fa6" + integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw== + +emittery@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" + integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/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== + +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + +encoding@^0.1.12, encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +envinfo@7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +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, es-abstract@^1.22.3: + 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-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +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, es-shim-unscopables@^1.0.2: + 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" + +esbuild-plugin-tsc@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/esbuild-plugin-tsc/-/esbuild-plugin-tsc-0.4.0.tgz#d7d516fda0e0b05c8e0b442152deebdee01ddc61" + integrity sha512-q9gWIovt1nkwchMLc2zhyksaiHOv3kDK4b0AUol8lkMCRhJ1zavgfb2fad6BKp7FT9rh/OHmEBXVjczLoi/0yw== + dependencies: + strip-comments "^2.0.1" + +esbuild@^0.19.11: + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" + +escalade@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +eslint-config-airbnb-base@15.0.0, eslint-config-airbnb-base@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" + integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.5" + semver "^6.3.0" + +eslint-config-airbnb-typescript@17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz#fda960eee4a510f092a9a1c139035ac588937ddc" + integrity sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig== + dependencies: + eslint-config-airbnb-base "^15.0.0" + +eslint-config-prettier@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + +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: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +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: + debug "^3.2.7" + +eslint-plugin-import@^2.28.1: + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== + 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.15.0" + +eslint-plugin-prettier@^5.0.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" + integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.8.6" + +eslint-plugin-security@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz#0e9c4a471f6e4d3ca16413c7a4a51f3966ba16e4" + integrity sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ== + dependencies: + safe-regex "^2.1.1" + +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-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.48.0: + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.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: + version "4.0.1" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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.yarnpkg.com/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" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" + integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== + dependencies: + "@noble/curves" "1.3.0" + "@noble/hashes" "1.3.3" + "@scure/bip32" "1.3.3" + "@scure/bip39" "1.2.2" + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethers@^5.7.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +ev-emitter@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ev-emitter/-/ev-emitter-2.1.2.tgz#91737a2deae9fa95453e7e86cfae976f8c3ced38" + integrity sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q== + +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== + dependencies: + homedir-polyfill "^1.0.1" + +expect@^29.0.0, expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + +external-editor@^3.0.3: + 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" + +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.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.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.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.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + +figures@3.2.0, figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +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.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== + +filenamify@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" + integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.1" + trim-repeated "^1.0.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +filter-obj@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-5.1.0.tgz#5bd89676000a713d7db2e197f660274428e524ed" + integrity sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng== + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-node-modules@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44" + integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== + dependencies: + findup-sync "^4.0.0" + merge "^2.1.1" + +find-up@5.0.0, find-up@^5.0.0: + version "5.0.0" + 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" + path-exists "^4.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + 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" + +findup-sync@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^4.0.2" + resolve-dir "^1.0.1" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/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== + +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + +follow-redirects@^1.12.1, follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^11.1.0, fs-extra@^11.1.1: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +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== + +ganache@^7.9.2: + version "7.9.2" + resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.9.2.tgz#77f506ad2735dd9109696ffa1834a9dd2f806449" + integrity sha512-7gsVVDpO9AhrFyDMWWl7SpMsPpqGcnAzjxz3k32LheIPNd64p2XsY9GYRdhWmKuryb60W1iaWPZWDkFKlbRWHA== + dependencies: + "@trufflesuite/bigint-buffer" "1.1.10" + "@trufflesuite/uws-js-unofficial" "20.30.0-unofficial.0" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "5.1.1" + "@types/seedrandom" "3.0.1" + abstract-level "1.0.3" + abstract-leveldown "7.2.0" + async-eventemitter "0.2.4" + emittery "0.10.0" + keccak "3.0.2" + leveldown "6.1.0" + secp256k1 "4.0.3" + optionalDependencies: + bufferutil "4.0.5" + utf-8-validate "5.0.7" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + 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.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-pkg-repo@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-port@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-size/-/get-size-3.0.0.tgz#00e39a8042a3de237b2fcf288eaf55d3f472417c" + integrity sha512-Y8aiXLq4leR7807UY0yuKEwif5s3kbVp1nTv+i4jBeoUzByTLKkLWu/HorS6/pB+7gsB0o7OTogC8AoOOeT0Hw== + +get-stream@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +gh-pages@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-6.1.1.tgz#e80af927a081cb480657fde5a0b87ea2e77d6c74" + integrity sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw== + dependencies: + async "^3.2.4" + commander "^11.0.0" + email-addresses "^5.0.0" + filenamify "^4.3.0" + find-cache-dir "^3.3.1" + fs-extra "^11.1.1" + globby "^6.1.0" + +git-raw-commits@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" + integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== + dependencies: + dargs "^7.0.0" + meow "^8.1.2" + split2 "^3.2.2" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" + integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== + dependencies: + meow "^8.1.2" + semver "^7.0.0" + +git-up@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" + integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== + dependencies: + is-ssh "^1.4.0" + parse-url "^8.1.0" + +git-url-parse@13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" + integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== + dependencies: + git-up "^7.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + dependencies: + ini "^1.3.2" + +glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + 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.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@8.1.0, glob@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^10.2.2, glob@^10.3.7: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + +glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^9.2.0: + version "9.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + 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.1.0, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +handlebars@^4.7.7: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +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@^2.17.3: + version "2.19.5" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.5.tgz#6017c35ae2844b669e9bcc84c3d05346d4ef031c" + integrity sha512-vx8R7zWCYVgM56vA6o0Wqx2bIIptkN4TMs9QwDqZVNGRhMzBfzqUeEYbp+69gxWp1neg2V2nYQUaaUv7aom1kw== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@nomicfoundation/ethereumjs-vm" "7.0.2" + "@nomicfoundation/solidity-analyzer" "^0.1.0" + "@sentry/node" "^5.18.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + boxen "^5.1.2" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + keccak "^3.0.2" + lodash "^4.17.11" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + tsort "0.0.1" + undici "^5.14.0" + 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.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: + 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.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has-unicode@2.0.1, has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + 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.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +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== + +hosted-git-info@^3.0.6: + version "3.0.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" + integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== + dependencies: + lru-cache "^7.5.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + 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" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== + dependencies: + minimatch "^5.0.1" + +ignore-walk@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.4.tgz#89950be94b4f522225eb63a13c56badb639190e9" + integrity sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw== + dependencies: + minimatch "^9.0.0" + +ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +immutable@^4.0.0-rc.12: + version "4.3.5" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" + integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + 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" + +import-local@3.1.0, import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +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.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.2, ini@^1.3.4, ini@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +init-package-json@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" + integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== + dependencies: + npm-package-arg "^10.0.0" + promzard "^1.0.0" + read "^2.0.0" + read-package-json "^6.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^5.0.0" + +inquirer@^8.2.4: + version "8.2.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + +internal-slot@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +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-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +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.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + 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.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + 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, is-core-module@^2.5.0, is-core-module@^2.8.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, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +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.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +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.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +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.0.0, 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.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +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-ssh@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" + integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== + dependencies: + protocols "^2.0.1" + +is-stream@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +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-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-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.13, is-typed-array@^1.1.9: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/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.1: + 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.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + 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== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isows@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" + integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1, jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.0.0, jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + +js-sdsl@^4.1.4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +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.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.10.0, js-yaml@^3.13.1: + version "3.14.1" + 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" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +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-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +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-parse-even-better-errors@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz#02bb29fb5da90b5444581749c22cedd3597c6cb0" + integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg== + +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== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +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" + +json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonc-parser@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +keccak@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +keccak@^3.0.0, keccak@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + 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.2, 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.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + optionalDependencies: + graceful-fs "^4.1.9" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + +lerna-changelog@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/lerna-changelog/-/lerna-changelog-2.2.0.tgz#c43813bba81e30cdeb20aabaef4da390f0f38e41" + integrity sha512-yjYNAHrbnw8xYFKmYWJEP52Tk4xSdlNmzpYr26+3glbSGDmpe8UMo8f9DlEntjGufL+opup421oVTXcLshwAaQ== + dependencies: + chalk "^4.0.0" + cli-highlight "^2.1.11" + execa "^5.0.0" + hosted-git-info "^4.0.0" + make-fetch-happen "^9.0.0" + p-map "^3.0.0" + progress "^2.0.0" + yargs "^17.1.0" + +lerna@^7.2.0: + version "7.4.2" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-7.4.2.tgz#03497125d7b7c8d463eebfe17a701b16bde2ad09" + integrity sha512-gxavfzHfJ4JL30OvMunmlm4Anw7d7Tq6tdVHzUukLdS9nWnxCN/QB21qR+VJYp5tcyXogHKbdUEGh6qmeyzxSA== + dependencies: + "@lerna/child-process" "7.4.2" + "@lerna/create" "7.4.2" + "@npmcli/run-script" "6.0.2" + "@nx/devkit" ">=16.5.1 < 17" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "19.0.11" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.1" + columnify "1.6.0" + conventional-changelog-angular "7.0.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "^8.2.0" + dedent "0.7.0" + envinfo "7.8.1" + execa "5.0.0" + fs-extra "^11.1.1" + get-port "5.1.1" + get-stream "6.0.0" + git-url-parse "13.1.0" + glob-parent "5.1.2" + globby "11.1.0" + graceful-fs "4.2.11" + has-unicode "2.0.1" + import-local "3.1.0" + ini "^1.3.8" + init-package-json "5.0.0" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + jest-diff ">=29.4.3 < 30" + js-yaml "4.1.0" + libnpmaccess "7.0.2" + libnpmpublish "7.3.0" + load-json-file "6.2.0" + lodash "^4.17.21" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "8.1.1" + npm-packlist "5.1.1" + npm-registry-fetch "^14.0.5" + npmlog "^6.0.2" + nx ">=16.5.1 < 17" + p-map "4.0.0" + p-map-series "2.1.0" + p-pipe "3.1.0" + p-queue "6.6.2" + p-reduce "2.1.0" + p-waterfall "2.1.1" + pacote "^15.2.0" + pify "5.0.0" + read-cmd-shim "4.0.0" + read-package-json "6.0.4" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.8" + signal-exit "3.0.7" + slash "3.0.0" + ssri "^9.0.1" + strong-log-transformer "2.1.0" + tar "6.1.11" + temp-dir "1.0.0" + typescript ">=3 < 6" + upath "2.0.1" + uuid "^9.0.0" + validate-npm-package-license "3.0.4" + validate-npm-package-name "5.0.0" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "16.2.0" + yargs-parser "20.2.4" + +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-transcoder@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== + dependencies: + buffer "^6.0.3" + module-error "^1.0.1" + +level@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" + integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== + dependencies: + abstract-level "^1.0.4" + browser-level "^1.0.1" + classic-level "^1.2.0" + +leveldown@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" + integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +leven@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +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" + +libnpmaccess@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-7.0.2.tgz#7f056c8c933dd9c8ba771fa6493556b53c5aac52" + integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw== + dependencies: + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + +libnpmpublish@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.3.0.tgz#2ceb2b36866d75a6cd7b4aa748808169f4d17e37" + integrity sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg== + dependencies: + ci-info "^3.6.1" + normalize-package-data "^5.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + proc-log "^3.0.0" + semver "^7.3.7" + sigstore "^1.4.0" + ssri "^10.0.1" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lines-and-columns@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" + integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== + +load-json-file@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== + dependencies: + graceful-fs "^4.1.15" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + 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.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +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@^4.17.11, lodash@^4.17.14, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.1.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +logform@^2.3.2, logform@^2.4.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" + integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== + dependencies: + "@colors/colors" "1.6.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + +lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +lunr@^2.3.9: + version "2.3.9" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" + integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== + +make-dir@4.0.0, make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^10.0.3: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + +make-fetch-happen@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +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== + +marked@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== + +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +memory-level@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" + integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== + dependencies: + abstract-level "^1.0.0" + functional-red-black-tree "^1.0.1" + module-error "^1.0.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +meow@^8.1.2: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merge@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" + integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== + +merkletreejs@^0.3.11: + version "0.3.11" + resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.11.tgz#e0de05c3ca1fd368de05a12cb8efb954ef6fc04f" + integrity sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ== + dependencies: + bignumber.js "^9.0.1" + buffer-reverse "^1.0.1" + crypto-js "^4.2.0" + treeify "^1.1.0" + web3-utils "^1.3.4" + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +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.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + 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.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-fetch@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" + integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@1.0.4, mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" + integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "8.1.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +modify-values@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + +mri@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" + integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multimatch@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mute-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== + +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + +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== + +negotiator@^0.6.2, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nock@^13.2.9: + version "13.5.1" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.1.tgz#4e40f9877ad0d43b7cdb474261c190f3715dd806" + integrity sha512-+s7b73fzj5KnxbKH4Oaqz07tQ8degcMilU4rrmnKvI//b0JMBU4wEXFQ8zqr+3+L4eWSfU3H/UoIVGUV0tue1Q== + dependencies: + debug "^4.1.0" + json-stringify-safe "^5.0.1" + propagate "^2.0.0" + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-addon-api@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" + integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== + +node-gyp@^9.0.0, node-gyp@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" + integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-machine-id@1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" + integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + +normalize-package-data@^2.3.2, 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-package-data@^3.0.0, normalize-package-data@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" + integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== + dependencies: + hosted-git-info "^6.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-bundled@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-bundled@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" + integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== + dependencies: + npm-normalize-package-bin "^3.0.0" + +npm-dts@^1.3.12: + version "1.3.12" + resolved "https://registry.yarnpkg.com/npm-dts/-/npm-dts-1.3.12.tgz#e422b1188fb616f41fe5c566c3d636c1aafb2ed8" + integrity sha512-3pFsz7Gf1u0cyQE2czXt8Y0hKe6kczHxlFbVrr74xWweNUit2tCDbOcL4n6KaWxyimGNJ4gzOa8KkShFA8hrdA== + dependencies: + args "5.0.3" + find-node-modules "2.1.3" + mkdirp "1.0.4" + npm-run "5.0.1" + rimraf "3.0.2" + tmp "0.2.1" + winston "3.7.2" + +npm-install-checks@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" + integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-normalize-package-bin@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== + +npm-package-arg@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" + integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== + dependencies: + hosted-git-info "^3.0.6" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" + integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== + dependencies: + hosted-git-info "^6.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +npm-packlist@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" + integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== + dependencies: + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^1.1.2" + npm-normalize-package-bin "^1.0.1" + +npm-packlist@^7.0.0: + version "7.0.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" + integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== + dependencies: + ignore-walk "^6.0.0" + +npm-path@^2.0.2, npm-path@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== + dependencies: + which "^1.2.10" + +npm-pick-manifest@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz#2159778d9c7360420c925c1a2287b5a884c713aa" + integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg== + dependencies: + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^10.0.0" + semver "^7.3.5" + +npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: + version "14.0.5" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" + integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== + dependencies: + make-fetch-happen "^11.0.0" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^10.0.0" + proc-log "^3.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npm-run/-/npm-run-5.0.1.tgz#1baea93389b50ae25a32382c8ca322398e50cd16" + integrity sha512-s7FyRpHUgaJfzkRgOnevX8rAWWsv1dofY1XS7hliWCF6LSQh+HtDfBvpigPS1krLvXw+Fi17CYMY8mUtblnyWw== + dependencies: + minimist "^1.2.0" + npm-path "^2.0.4" + npm-which "^3.0.1" + serializerr "^1.0.3" + +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + integrity sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A== + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + +npmlog@^6.0.0, npmlog@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +nx@16.10.0, "nx@>=16.5.1 < 17", nx@^16.8.1: + version "16.10.0" + resolved "https://registry.yarnpkg.com/nx/-/nx-16.10.0.tgz#b070461f7de0a3d7988bd78558ea84cda3543ace" + integrity sha512-gZl4iCC0Hx0Qe1VWmO4Bkeul2nttuXdPpfnlcDKSACGu3ZIo+uySqwOF8yBAxSTIf8xe2JRhgzJN1aFkuezEBg== + dependencies: + "@nrwl/tao" "16.10.0" + "@parcel/watcher" "2.0.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "3.0.0-rc.46" + "@zkochan/js-yaml" "0.0.6" + axios "^1.0.0" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^8.0.1" + dotenv "~16.3.1" + dotenv-expand "~10.0.0" + enquirer "~2.3.6" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^11.1.0" + glob "7.1.4" + ignore "^5.0.4" + jest-diff "^29.4.1" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + lines-and-columns "~2.0.3" + minimatch "3.0.5" + node-machine-id "1.1.12" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.5.3" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nx/nx-darwin-arm64" "16.10.0" + "@nx/nx-darwin-x64" "16.10.0" + "@nx/nx-freebsd-x64" "16.10.0" + "@nx/nx-linux-arm-gnueabihf" "16.10.0" + "@nx/nx-linux-arm64-gnu" "16.10.0" + "@nx/nx-linux-arm64-musl" "16.10.0" + "@nx/nx-linux-x64-gnu" "16.10.0" + "@nx/nx-linux-x64-musl" "16.10.0" + "@nx/nx-win32-arm64-msvc" "16.10.0" + "@nx/nx-win32-x64-msvc" "16.10.0" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/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-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.assign@^4.1.2, object.assign@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.5: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" + integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.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.2" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" + integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== + dependencies: + array.prototype.filter "^1.0.3" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" + +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.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + 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" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + 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, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + 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.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map-series@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" + integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== + +p-map@4.0.0, p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-pipe@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== + +p-queue@6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/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== + +p-waterfall@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" + integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== + dependencies: + p-reduce "^2.0.0" + +pacote@^15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" + integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== + dependencies: + "@npmcli/git" "^4.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^6.0.1" + "@npmcli/run-script" "^6.0.0" + cacache "^17.0.0" + fs-minipass "^3.0.0" + minipass "^5.0.0" + npm-package-arg "^10.0.0" + npm-packlist "^7.0.0" + npm-pick-manifest "^8.0.0" + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" + promise-retry "^2.0.1" + read-package-json "^6.0.0" + read-package-json-fast "^3.0.0" + sigstore "^1.3.0" + ssri "^10.0.0" + tar "^6.1.11" + +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@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0, parse-json@^5.2.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" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== + +parse-path@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" + integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== + dependencies: + protocols "^2.0.0" + +parse-url@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" + integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== + dependencies: + parse-path "^7.0.0" + +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.10.1, path-scurry@^1.6.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + 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.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +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== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +pirates@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^4.1.0, 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" + +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@^3.0.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +proc-log@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +promzard@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" + integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== + dependencies: + read "^2.0.0" + +propagate@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" + integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== + +protochain@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/protochain/-/protochain-1.0.5.tgz#991c407e99de264aadf8f81504b5e7faf7bfa260" + integrity sha512-4hDwFSX50C4NE6f/6zg8EPr/WLPTkFPUtG0ulWZu6bwzV2hmb50fpdQLr0HiKBAUehapaFpItzWoCLjraLJhUA== + +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" + integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== + +query-string@^8.1.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-8.2.0.tgz#f0b0ef6caa85f525dbdb745a67d3f8c08d71cc6b" + integrity sha512-tUZIw8J0CawM5wyGBiDOAp7ObdRQh4uBor/fUR9ZjmbZVvw95OD9If4w3MQxr99rg0DJZ/9CIORcpEqU5hQG7g== + dependencies: + decode-uri-component "^0.4.1" + filter-obj "^5.1.0" + split-on-first "^3.0.0" + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/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== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +raw-body@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +read-cmd-shim@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== + +read-package-json-fast@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== + dependencies: + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +read-package-json@6.0.4, read-package-json@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" + integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== + dependencies: + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^5.0.0" + npm-normalize-package-bin "^3.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.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@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +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@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" + integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== + dependencies: + mute-stream "~1.0.0" + +readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + 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" + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regexp-tree@~0.1.1: + version "0.1.27" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" + integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== + +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" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.0: + version "2.0.2" + 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== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +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.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.20.0, 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@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@3.0.2, rimraf@^3.0.0, 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" + +rimraf@^2.2.8: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" + integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== + dependencies: + glob "^9.2.0" + +rimraf@^5.0.1: + version "5.0.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf" + integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== + dependencies: + glob "^10.3.7" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.3: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +rxjs@^7.5.5, rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-array-concat@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + 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.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +safe-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" + integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== + dependencies: + regexp-tree "~0.1.1" + +safe-stable-stringify@^2.3.1: + version "2.4.3" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@3.0.1, scrypt-js@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@4.0.3, secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@7.5.3: + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serializerr@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/serializerr/-/serializerr-1.0.3.tgz#12d4c5aa1c3ffb8f6d1dc5f395aa9455569c3f91" + integrity sha512-yXUlHj0fjbndhACj2XWtIH5eJv7b/uadyl7CJA8b9wL5mIKm+g0/sL7rDzEmjC+k5y8ggcaP8i049F4FxA0U9Q== + dependencies: + protochain "^1.0.5" + +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.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + dependencies: + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +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.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +shiki@^0.14.7: + version "0.14.7" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" + integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== + dependencies: + ansi-sequence-parser "^1.1.0" + jsonc-parser "^3.2.0" + vscode-oniguruma "^1.7.0" + vscode-textmate "^8.0.0" + +side-channel@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" + integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@3.0.7, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sigstore@^1.3.0, sigstore@^1.4.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.9.0.tgz#1e7ad8933aa99b75c6898ddd0eeebc3eb0d59875" + integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A== + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + "@sigstore/sign" "^1.0.0" + "@sigstore/tuf" "^1.0.3" + make-fetch-happen "^11.0.1" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@3.0.0, slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + dependencies: + is-plain-obj "^1.0.0" + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.13: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spawn-command@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" + integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== + +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.4.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" + integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== + +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== + +split-on-first@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-3.0.0.tgz#f04959c9ea8101b9b0bbf35a61b9ebea784a23e7" + integrity sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA== + +split2@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +ssri@^10.0.0, ssri@^10.0.1: + version "10.0.5" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" + integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== + dependencies: + minipass "^7.0.3" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +ssri@^9.0.0, ssri@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + 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.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + 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-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +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.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-outer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.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.6: + version "0.8.8" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" + integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +tar-stream@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@6.1.11: + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + +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.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tmp@0.0.33, tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@0.2.1, tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +treeify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" + integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== + +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== + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== + dependencies: + escape-string-regexp "^1.0.2" + +triple-beam@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== + +ts-api-utils@^1.0.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" + integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== + +ts-jest@^29.1.1: + version "29.1.2" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.2.tgz#7613d8c81c43c8cb312c6904027257e814c40e09" + integrity sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" + make-error "1.x" + semver "^7.5.3" + yargs-parser "^21.0.1" + +ts-node@^10.9.1: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tuf-js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" + integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== + dependencies: + "@tufjs/models" "1.0.4" + debug "^4.3.4" + make-fetch-happen "^11.1.1" + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/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-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +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.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + +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.yarnpkg.com/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== + +typed-array-buffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" + integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +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@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typedoc@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.7.tgz#11e3f527ca80ca3c029cb8e15f362e6d9f715e25" + integrity sha512-m6A6JjQRg39p2ZVRIN3NKXgrN8vzlHhOS+r9ymUYtcUP/TIQPvWSq7YgE5ZjASfv5Vd5BW5xrir6Gm2XNNcOow== + dependencies: + lunr "^2.3.9" + marked "^4.3.0" + minimatch "^9.0.3" + shiki "^0.14.7" + +"typescript@>=3 < 6", typescript@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +uglify-js@^3.1.4: + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +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.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.14.0: + version "5.28.3" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" + integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== + dependencies: + "@fastify/busboy" "^2.0.0" + +unidragger@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/unidragger/-/unidragger-3.0.1.tgz#72b2e63f2571ca6e95a884b139dfec764e08c7f3" + integrity sha512-RngbGSwBFmqGBWjkaH+yB677uzR95blSQyxq6hYbrQCejH3Mx1nm8DVOuh3M9k2fQyTstWUG5qlgCnNqV/9jVw== + dependencies: + ev-emitter "^2.0.0" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +upath@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +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.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== + dependencies: + node-gyp-build "^4.3.0" + +utf-8-validate@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.3.tgz#7d8c936d854e86b24d1d655f138ee27d2636d777" + integrity sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA== + dependencies: + node-gyp-build "^4.3.0" + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@8.3.2, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +uuidv4@^6.2.13: + version "6.2.13" + resolved "https://registry.yarnpkg.com/uuidv4/-/uuidv4-6.2.13.tgz#8f95ec5ef22d1f92c8e5d4c70b735d1c89572cb7" + integrity sha512-AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ== + dependencies: + "@types/uuid" "8.3.4" + uuid "8.3.2" + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-compile-cache@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + 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" + +validate-npm-package-name@5.0.0, validate-npm-package-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" + integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== + dependencies: + builtins "^5.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" + +viem@^2.5.0, viem@^2.7.3: + version "2.7.6" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.6.tgz#2ada30ece1469367b606137983e5655cf66d721e" + integrity sha512-43TF0VYcTeNef9dax1/BhqlRLXpAo6HAiQ68hrJ8XRhDOou73nHZEjeFl8Eai4UFFodKhu+PbRUFzuuoixOUfg== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "1.0.0" + isows "1.0.3" + ws "8.13.0" + +vscode-oniguruma@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" + integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== + +vscode-textmate@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" + integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +wcwidth@^1.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-utils@^1.3.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +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-typed-array@^1.1.13, which-typed-array@^1.1.14: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== + dependencies: + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.1" + +which@^1.2.10, which@^1.2.14: + 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, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" + integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +winston-transport@^4.5.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" + integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== + dependencies: + logform "^2.3.2" + readable-stream "^3.6.0" + triple-beam "^1.3.0" + +winston@3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.7.2.tgz#95b4eeddbec902b3db1424932ac634f887c400b1" + integrity sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng== + dependencies: + "@dabh/diagnostics" "^2.0.2" + async "^3.2.3" + is-stream "^2.0.0" + logform "^2.4.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.5.0" + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.0.1: + 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@^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.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + +write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-pkg@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" + integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== + dependencies: + sort-keys "^2.0.0" + type-fest "^0.4.1" + write-json-file "^3.2.0" + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@21.1.1, yargs-parser@^21.0.1, 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-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.0.0, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.1.0, yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.2: + 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.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^3.22.4: + version "3.22.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== From af84712f8211173dc7fe7752abb8b9e2c16c9ac8 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 9 Feb 2024 16:19:27 +0200 Subject: [PATCH 1093/1247] Merged with v4 --- yarn.lock | 46 +++++++++------------------------------------- 1 file changed, 9 insertions(+), 37 deletions(-) diff --git a/yarn.lock b/yarn.lock index b07bb0617..dd21c9d4c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,21 +19,7 @@ dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" -<<<<<<< HEAD - viem "^1.21.4" - zod "^3.22.4" - -"@alchemy/aa-core@^2.0.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-2.3.1.tgz#ebd0abc2a71d1e5803cbbd0b0584a62a681c9a27" - integrity sha512-iADsVGbhm4rbvFwcauKwD8u5AbzoE+8d8iQpagGHkPDpcNVzFP/FHv48jvdg9M52kf4h2XGdrQviT02bdJFTKw== - dependencies: - abitype "^0.8.3" - eventemitter3 "^5.0.1" - viem "^1.21.4" -======= viem "^2.5.0" ->>>>>>> ebff7e3ba01942c06b1042b0c9eaf583feec90a7 zod "^3.22.4" "@ampproject/remapping@^2.2.0": @@ -2241,17 +2227,10 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== -<<<<<<< HEAD -"@types/node@*": - version "20.11.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.7.tgz#cb49aedd758c978c30806d0c38b520ed2a3df6e0" - integrity sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A== -======= "@types/node@*", "@types/node@^20.11.10": - version "20.11.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.16.tgz#4411f79411514eb8e2926f036c86c9f0e4ec6708" - integrity sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ== ->>>>>>> ebff7e3ba01942c06b1042b0c9eaf583feec90a7 + version "20.11.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292" + integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw== dependencies: undici-types "~5.26.4" @@ -3957,17 +3936,10 @@ ejs@^3.1.7: dependencies: jake "^10.8.5" -<<<<<<< HEAD -electron-to-chromium@^1.4.601: - version "1.4.647" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.647.tgz#3c8d4815e5ed2fbdd37f4ab7333cd9f8fc56d53a" - integrity sha512-Z/fTNGwc45WrYQhPaEcz5tAJuZZ8G7S/DBnhS6Kgp4BxnS40Z/HqlJ0hHg3Z79IGVzuVartIlTcjw/cQbPLgOw== -======= electron-to-chromium@^1.4.648: - version "1.4.661" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.661.tgz#b28d63468b06e75610ed2b0f8e5f5f669a57bd91" - integrity sha512-AFg4wDHSOk5F+zA8aR+SVIOabu7m0e7BiJnigCvPXzIGy731XENw/lmNxTySpVFtkFEy+eyt4oHhh5FF3NjQNw== ->>>>>>> ebff7e3ba01942c06b1042b0c9eaf583feec90a7 + version "1.4.664" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.664.tgz#b00fc67d5d4f124e429b0dcce5a02ae18ef33ede" + integrity sha512-k9VKKSkOSNPvSckZgDDl/IQx45E1quMjX8QfLzUsAs/zve8AyFDK+ByRynSP/OfEfryiKHpQeMf00z0leLCc3A== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -9564,9 +9536,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.5.0, viem@^2.7.3: - version "2.7.6" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.6.tgz#2ada30ece1469367b606137983e5655cf66d721e" - integrity sha512-43TF0VYcTeNef9dax1/BhqlRLXpAo6HAiQ68hrJ8XRhDOou73nHZEjeFl8Eai4UFFodKhu+PbRUFzuuoixOUfg== + version "2.7.8" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.8.tgz#ca60552190cdc501cf4e1d1140d8da7625b1b1f4" + integrity sha512-5r5pkBDBmihCvMx4b3MqtP0FoZCRWE2ML1DssU80+vhJQur0PKd4yHdLbbvoiGGVD6bYiA394juhfdSvXIGgFA== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From 7bb3813a854a94102d3a58d2f5f9bc7d9f49d61a Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 12 Feb 2024 14:36:06 +0400 Subject: [PATCH 1094/1247] Release 8 - Biconomy V4 SDK (#414) * update lockfile * chore: release r8 update package version * Update modules changelog --------- Co-authored-by: Joe Pegler --- packages/account/package.json | 10 ++-- packages/bundler/package.json | 4 +- packages/common/package.json | 2 +- packages/modules/CHANGELOG.md | 33 ++++++----- packages/modules/package.json | 4 +- packages/particle-auth/CHANGELOG.md | 4 ++ packages/particle-auth/package.json | 2 +- packages/paymaster/package.json | 4 +- packages/transak/CHANGELOG.md | 4 ++ packages/transak/package.json | 2 +- yarn.lock | 92 +++++++++++++++++------------ 11 files changed, 93 insertions(+), 68 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index da1d5a7a6..07844719d 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account", - "version": "3.1.3", + "version": "4.0.0", "description": "This package provides apis for ERC-4337 based smart account implementations", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -66,10 +66,10 @@ }, "dependencies": { "@alchemy/aa-core": "3.0.0-alpha.4", - "@biconomy/bundler": "^3.1.3", - "@biconomy/common": "^3.1.3", - "@biconomy/modules": "^3.1.3", - "@biconomy/paymaster": "^3.1.3", + "@biconomy/bundler": "4.0.0", + "@biconomy/common": "4.0.0", + "@biconomy/modules": "4.0.0", + "@biconomy/paymaster": "4.0.0", "viem": "^2.7.3" } } diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 785cb6d0c..a55b34c20 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/bundler", - "version": "3.1.3", + "version": "4.0.0", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -57,7 +57,7 @@ }, "dependencies": { "@alchemy/aa-core": "3.0.0-alpha.4", - "@biconomy/common": "^3.1.3", + "@biconomy/common": "4.0.0", "viem": "^2.7.3" }, "devDependencies": { diff --git a/packages/common/package.json b/packages/common/package.json index 2f06ca128..e69b3dcba 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "3.1.3", + "version": "4.0.0", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md index 3f5fcdb40..400a2d2a6 100644 --- a/packages/modules/CHANGELOG.md +++ b/packages/modules/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2024-02-12) + +### Features + +- Export module create aliases from modules package ([d6205c](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/d6205c4d76ab846ecdc10843c65e0277f3ceab00)) + ## 3.1.3 (2023-12-28) VERSION Bump Only. @@ -11,31 +17,28 @@ VERSION Bump Only. ### Bug Fixes -* Update import paths for consistency and fixing build issues ([ec5c3a3](https://github.com/bcnmy/biconomy-client-sdk/pull/332/commits/ec5c3a352e8caab6e94234264f4cd5cb32e5af3f)) +- Update import paths for consistency and fixing build issues ([ec5c3a3](https://github.com/bcnmy/biconomy-client-sdk/pull/332/commits/ec5c3a352e8caab6e94234264f4cd5cb32e5af3f)) ## 3.1.1 (2023-11-09) - ### Bug Fixes -* Fix update batched session router address and signing logic ([107b881](https://github.com/bcnmy/biconomy-client-sdk/commit/107b881da4b1a6da1f9db22ac54eda62f8c05b59)) - - +- Fix update batched session router address and signing logic ([107b881](https://github.com/bcnmy/biconomy-client-sdk/commit/107b881da4b1a6da1f9db22ac54eda62f8c05b59)) ## 3.1.0 (2023-09-20) -Modular Account Abstraction is here. -### Bug Fixes +Modular Account Abstraction is here. -* incorrect data merkleRoot length ([2e9d2dd](https://github.com/bcnmy/biconomy-client-sdk/commit/2e9d2dd5876a4de61af390d6595e1ab2cf8c137c)) -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) -* signing issue ([f67e339](https://github.com/bcnmy/biconomy-client-sdk/commit/f67e339bcff8d9712df8406b4d123affcd4d4aa4)) -* sorting leaves always ([1fb908c](https://github.com/bcnmy/biconomy-client-sdk/commit/1fb908cb3b90abe4588c3a162ecf45c8afc80d81)) -* use hexZeroPad in leaf ([b3da05f](https://github.com/bcnmy/biconomy-client-sdk/commit/b3da05f2e9c56973e96d0a7a3bc065aef23f9c18)) -* use proof instead of root ([3a40a9d](https://github.com/bcnmy/biconomy-client-sdk/commit/3a40a9d8b9fb1fba8f660e5eab1fae1369f9f289)) +### Bug Fixes +- incorrect data merkleRoot length ([2e9d2dd](https://github.com/bcnmy/biconomy-client-sdk/commit/2e9d2dd5876a4de61af390d6595e1ab2cf8c137c)) +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +- more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) +- signing issue ([f67e339](https://github.com/bcnmy/biconomy-client-sdk/commit/f67e339bcff8d9712df8406b4d123affcd4d4aa4)) +- sorting leaves always ([1fb908c](https://github.com/bcnmy/biconomy-client-sdk/commit/1fb908cb3b90abe4588c3a162ecf45c8afc80d81)) +- use hexZeroPad in leaf ([b3da05f](https://github.com/bcnmy/biconomy-client-sdk/commit/b3da05f2e9c56973e96d0a7a3bc065aef23f9c18)) +- use proof instead of root ([3a40a9d](https://github.com/bcnmy/biconomy-client-sdk/commit/3a40a9d8b9fb1fba8f660e5eab1fae1369f9f289)) ### Features -* add session key manager ([af41480](https://github.com/bcnmy/biconomy-client-sdk/commit/af41480ff1c88e2a4d0ee8605f2f01b3a958a1d9)) +- add session key manager ([af41480](https://github.com/bcnmy/biconomy-client-sdk/commit/af41480ff1c88e2a4d0ee8605f2f01b3a958a1d9)) diff --git a/packages/modules/package.json b/packages/modules/package.json index 93bb8d6d6..5674750f8 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/modules", - "version": "3.1.3", + "version": "4.0.0", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -54,7 +54,7 @@ }, "dependencies": { "@alchemy/aa-core": "3.0.0-alpha.4", - "@biconomy/common": "^3.1.3", + "@biconomy/common": "4.0.0", "merkletreejs": "^0.3.11", "viem": "^2.7.3" }, diff --git a/packages/particle-auth/CHANGELOG.md b/packages/particle-auth/CHANGELOG.md index 706af8966..0b1ef187b 100644 --- a/packages/particle-auth/CHANGELOG.md +++ b/packages/particle-auth/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2023-12-28) + +VERSION Bump Only. + ## 3.1.3 (2023-12-28) VERSION Bump Only. diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 9568c4b47..335ac30a2 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/particle-auth", - "version": "3.1.3", + "version": "4.0.0", "description": "Particle auth for Biconomy SDK", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index cc40d7de7..1348e71c1 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/paymaster", - "version": "3.1.3", + "version": "4.0.0", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -54,7 +54,7 @@ }, "dependencies": { "@alchemy/aa-core": "3.0.0-alpha.4", - "@biconomy/common": "^3.1.3", + "@biconomy/common": "4.0.0", "viem": "^2.7.3" }, "devDependencies": { diff --git a/packages/transak/CHANGELOG.md b/packages/transak/CHANGELOG.md index ed5d38a5a..c71de7918 100644 --- a/packages/transak/CHANGELOG.md +++ b/packages/transak/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2023-12-28) + +VERSION Bump Only. + ## 3.1.3 (2023-12-28) VERSION Bump Only. diff --git a/packages/transak/package.json b/packages/transak/package.json index 8955eb6f6..018414ed1 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/transak", - "version": "3.1.3", + "version": "4.0.0", "description": "transak for biconomy sdk", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/yarn.lock b/yarn.lock index ee4c09890..3a06bfd22 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2228,9 +2228,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.16.tgz#4411f79411514eb8e2926f036c86c9f0e4ec6708" - integrity sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ== + version "20.11.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292" + integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw== dependencies: undici-types "~5.26.4" @@ -2267,9 +2267,9 @@ integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== "@types/semver@^7.5.0": - version "7.5.6" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + version "7.5.7" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.7.tgz#326f5fdda70d13580777bcaa1bc6fa772a5aef0e" + integrity sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg== "@types/stack-utils@^2.0.0": version "2.0.3" @@ -3210,9 +3210,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001580: - version "1.0.30001585" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz#0b4e848d84919c783b2a41c13f7de8ce96744401" - integrity sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q== + version "1.0.30001587" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz#a0bce920155fa56a1885a69c74e1163fc34b4881" + integrity sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA== case@^1.6.3: version "1.6.3" @@ -3937,9 +3937,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.648: - version "1.4.661" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.661.tgz#b28d63468b06e75610ed2b0f8e5f5f669a57bd91" - integrity sha512-AFg4wDHSOk5F+zA8aR+SVIOabu7m0e7BiJnigCvPXzIGy731XENw/lmNxTySpVFtkFEy+eyt4oHhh5FF3NjQNw== + version "1.4.665" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz#681700bd590b0e5a3be66e3e2874ce62abcf5da5" + integrity sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -5306,9 +5306,9 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: 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== + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== dependencies: function-bind "^1.1.2" @@ -5565,10 +5565,13 @@ io-ts@1.10.4: dependencies: fp-ts "^1.0.0" -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: version "3.0.4" @@ -6301,6 +6304,11 @@ js-yaml@^3.10.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -8256,13 +8264,14 @@ regexp-tree@~0.1.1: integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== 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== + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" require-directory@^2.1.1: version "2.1.1" @@ -8527,7 +8536,7 @@ set-function-length@^1.2.0: gopd "^1.0.1" has-property-descriptors "^1.0.1" -set-function-name@^2.0.0: +set-function-name@^2.0.1: 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== @@ -8660,11 +8669,11 @@ socks-proxy-agent@^7.0.0: socks "^2.6.2" socks@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + version "2.7.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.3.tgz#7d8a75d7ce845c0a96f710917174dba0d543a785" + integrity sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw== dependencies: - ip "^2.0.0" + ip-address "^9.0.5" smart-buffer "^4.2.0" solc@0.7.3: @@ -8737,9 +8746,9 @@ spdx-expression-parse@^3.0.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== + version "3.0.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== split-on-first@^3.0.0: version "3.0.0" @@ -8760,6 +8769,11 @@ split@^1.0.1: dependencies: through "2" +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -9322,9 +9336,9 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typedoc@^0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.7.tgz#11e3f527ca80ca3c029cb8e15f362e6d9f715e25" - integrity sha512-m6A6JjQRg39p2ZVRIN3NKXgrN8vzlHhOS+r9ymUYtcUP/TIQPvWSq7YgE5ZjASfv5Vd5BW5xrir6Gm2XNNcOow== + version "0.25.8" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.8.tgz#7d0e1bf12d23bf1c459fd4893c82cb855911ff12" + integrity sha512-mh8oLW66nwmeB9uTa0Bdcjfis+48bAjSH3uqdzSuSawfduROQLlXw//WSNZLYDdhmMVB7YcYZicq6e8T0d271A== dependencies: lunr "^2.3.9" marked "^4.3.0" @@ -9536,9 +9550,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.5.0, viem@^2.7.3: - version "2.7.6" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.6.tgz#2ada30ece1469367b606137983e5655cf66d721e" - integrity sha512-43TF0VYcTeNef9dax1/BhqlRLXpAo6HAiQ68hrJ8XRhDOou73nHZEjeFl8Eai4UFFodKhu+PbRUFzuuoixOUfg== + version "2.7.8" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.8.tgz#ca60552190cdc501cf4e1d1140d8da7625b1b1f4" + integrity sha512-5r5pkBDBmihCvMx4b3MqtP0FoZCRWE2ML1DssU80+vhJQur0PKd4yHdLbbvoiGGVD6bYiA394juhfdSvXIGgFA== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From db298a5f4e9b02c7c8c87cd94cbdc2afc738f4bc Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Mon, 12 Feb 2024 12:55:36 +0200 Subject: [PATCH 1095/1247] Replaced baseGoerli with baseSepolia (#415) Co-authored-by: GabiDev --- packages/account/tests/account.e2e.spec.ts | 6 +++--- packages/bundler/tests/bundler.e2e.spec.ts | 6 +++--- .../tests/multiChainValidationModule.e2e.spec.ts | 8 ++++---- packages/paymaster/tests/paymaster.e2e.spec.ts | 6 +++--- tests/chains.config.ts | 16 ++++++++-------- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 6ab35c3a3..c7594b732 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -7,11 +7,11 @@ import { ERC20_ABI } from "@biconomy/modules"; describe("Account Tests", () => { let mumbai: TestData; - let baseGoerli: TestData; + let baseSepolia: TestData; beforeEach(() => { // @ts-ignore: Comes from setup-e2e-tests - [mumbai, baseGoerli] = testDataPerChain; + [mumbai, baseSepolia] = testDataPerChain; }); it("should have addresses", async () => { @@ -25,7 +25,7 @@ describe("Account Tests", () => { whale: { viemWallet: signerBase, publicAddress: senderBase }, minnow: { viemWallet: recipientSignerBase, publicAddress: recipientBase }, bundlerUrl: bundlerUrlBase, - } = baseGoerli; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, diff --git a/packages/bundler/tests/bundler.e2e.spec.ts b/packages/bundler/tests/bundler.e2e.spec.ts index 28e3318a5..7b9211dd0 100644 --- a/packages/bundler/tests/bundler.e2e.spec.ts +++ b/packages/bundler/tests/bundler.e2e.spec.ts @@ -2,11 +2,11 @@ import { TestData } from "../../../tests"; describe("Bundler Unit Tests", () => { let mumbai: TestData; - let baseGoerli: TestData; + let baseSepolia: TestData; beforeEach(() => { // @ts-ignore: Comes from setup-e2e-tests - [mumbai, baseGoerli] = testDataPerChain; + [mumbai, baseSepolia] = testDataPerChain; }); it("should have chain data for mumbai", () => { @@ -14,6 +14,6 @@ describe("Bundler Unit Tests", () => { }); it("should also have chain data for base", () => { - expect(baseGoerli).toHaveProperty("chainId"); + expect(baseSepolia).toHaveProperty("chainId"); }); }); diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts index 7adac93de..5871102f1 100644 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -6,14 +6,14 @@ import { DEFAULT_MULTICHAIN_MODULE, MultiChainValidationModule } from "@biconomy describe("Account with MultiChainValidation Module Tests", () => { let mumbai: TestData; - let baseGoerli: TestData; + let baseSepolia: TestData; beforeEach(() => { // @ts-ignore: Comes from setup-e2e-tests - [mumbai, baseGoerli] = testDataPerChain; + [mumbai, baseSepolia] = testDataPerChain; }); - it("Should mint an NFT gasless on baseGoerli and mumbai", async () => { + it("Should mint an NFT gasless on baseSepolia and mumbai", async () => { const { whale: { alchemyWalletClientSigner: signerMumbai, publicAddress: recipientForBothChains }, biconomyPaymasterApiKey: biconomyPaymasterApiKeyMumbai, @@ -26,7 +26,7 @@ describe("Account with MultiChainValidation Module Tests", () => { biconomyPaymasterApiKey: biconomyPaymasterApiKeyBase, bundlerUrl: bundlerUrlBase, chainId: chainIdBase, - } = baseGoerli; + } = baseSepolia; const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; diff --git a/packages/paymaster/tests/paymaster.e2e.spec.ts b/packages/paymaster/tests/paymaster.e2e.spec.ts index ecb70a2b6..3a634f491 100644 --- a/packages/paymaster/tests/paymaster.e2e.spec.ts +++ b/packages/paymaster/tests/paymaster.e2e.spec.ts @@ -2,11 +2,11 @@ import { TestData } from "../../../tests"; describe("Paymaster Unit Tests", () => { let mumbai: TestData; - let baseGoerli: TestData; + let baseSepolia: TestData; beforeEach(() => { // @ts-ignore: Comes from setup-e2e-tests - [mumbai, baseGoerli] = testDataPerChain; + [mumbai, baseSepolia] = testDataPerChain; }); it("should have chain data for mumbai", () => { @@ -14,6 +14,6 @@ describe("Paymaster Unit Tests", () => { }); it("should also have chain data for base", () => { - expect(baseGoerli).toHaveProperty("chainId"); + expect(baseSepolia).toHaveProperty("chainId"); }); }); diff --git a/tests/chains.config.ts b/tests/chains.config.ts index 8294b9248..c82722a70 100644 --- a/tests/chains.config.ts +++ b/tests/chains.config.ts @@ -1,10 +1,10 @@ import { localhost, Chain } from "viem/chains"; -import { polygonMumbai, baseGoerli } from "viem/chains"; +import { polygonMumbai, baseSepolia } from "viem/chains"; import { config } from "dotenv"; config(); -export type SupportedTestChain = "ganache" | "baseGoerli" | "mumbai"; +export type SupportedTestChain = "ganache" | "baseSepolia" | "mumbai"; type BaseChainConfig = { chainId: number; entryPointAddress: string; @@ -20,12 +20,12 @@ export const CHAIN_CONFIG: Record = { bundlerUrl: "https://bundler.biconomy.io/api/v2/1/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", viemChain: localhost, }, - baseGoerli: { - chainId: 84531, + baseSepolia: { + chainId: 84532, entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", - bundlerUrl: "https://bundler.biconomy.io/api/v2/84531/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", - paymasterUrl: "https://paymaster.biconomy.io/api/v1/84531/" + process.env.E2E_BICO_PAYMASTER_KEY_BASE!, - viemChain: baseGoerli, + bundlerUrl: "https://bundler.biconomy.io/api/v2/84532/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + paymasterUrl: "https://paymaster.biconomy.io/api/v1/84532/" + process.env.E2E_BICO_PAYMASTER_KEY_BASE!, + viemChain: baseSepolia, biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_BASE!, }, mumbai: { @@ -37,7 +37,7 @@ export const CHAIN_CONFIG: Record = { biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, }, }; -export const E2E_TEST_CHAINS = [CHAIN_CONFIG.mumbai, CHAIN_CONFIG.baseGoerli]; +export const E2E_TEST_CHAINS = [CHAIN_CONFIG.mumbai, CHAIN_CONFIG.baseSepolia]; export const UNIT_TEST_CHAIN = CHAIN_CONFIG.ganache; export default CHAIN_CONFIG; \ No newline at end of file From 1688f9df00ee6dbe28c4904205f16ab9a07606db Mon Sep 17 00:00:00 2001 From: GabiDev Date: Mon, 12 Feb 2024 13:33:03 +0200 Subject: [PATCH 1096/1247] Batched session router fix --- .../modules/src/BatchedSessionRouterModule.ts | 34 ++- ...batchedSessionValidationModule.e2e.spec.ts | 193 ++++++++++++++++++ 2 files changed, 217 insertions(+), 10 deletions(-) create mode 100644 packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 8108f97ef..669414f50 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -146,11 +146,18 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // Generate the padded signature - const paddedSignature = encodeAbiParameters(parseAbiParameters("address, tuple(uint48,uint48,address,bytes,bytes32[],bytes)[], bytes"), [ - this.getSessionKeyManagerAddress(), - sessionDataTupleArray, - signature, - ]); + const paddedSignature = encodeAbiParameters( + [ + { type: "address" }, + { + type: "tuple", + components: [{ type: "uint48" }, { type: "uint48" }, { type: "address" }, { type: "bytes" }, { type: "bytes32[]" }, { type: "bytes" }], + }, + { type: "bytes" }, + ], + // @ts-ignore + [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature], + ); return paddedSignature; } @@ -255,11 +262,18 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // Generate the padded signature - const paddedSignature = encodeAbiParameters(parseAbiParameters("address, tuple(uint48,uint48,address,bytes,bytes32[],bytes)[], bytes"), [ - this.getSessionKeyManagerAddress(), - sessionDataTupleArray, - this.mockEcdsaSessionKeySig, - ]); + const paddedSignature = encodeAbiParameters( + [ + { type: "address" }, + { + type: "tuple", + components: [{ type: "uint48" }, { type: "uint48" }, { type: "address" }, { type: "bytes" }, { type: "bytes32[]" }, { type: "bytes" }], + }, + { type: "bytes" }, + ], + // @ts-ignore + [this.getSessionKeyManagerAddress(), sessionDataTupleArray, this.mockEcdsaSessionKeySig], + ); const dummySig = encodeAbiParameters(parseAbiParameters("bytes, address"), [paddedSignature, this.getAddress()]); return dummySig; diff --git a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts new file mode 100644 index 000000000..7a13b6c57 --- /dev/null +++ b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts @@ -0,0 +1,193 @@ +import { + DEFAULT_BATCHED_SESSION_ROUTER_MODULE, + DEFAULT_SESSION_KEY_MANAGER_MODULE, + createBatchedSessionRouterModule, + createSessionKeyManagerModule, +} from "@biconomy/modules"; +import { SessionFileStorage } from "./utils/customSession"; +import { WalletClientSigner, createSmartAccountClient } from "../../account/src/index"; +import { Hex, encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "viem"; +import { TestData } from "../../../tests"; +import { checkBalance } from "../../../tests/utils"; +import { PaymasterMode } from "@biconomy/paymaster"; + +describe("Account Tests", () => { + let mumbai: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [mumbai] = testDataPerChain; + }); + + const sessionFileStorage: SessionFileStorage = new SessionFileStorage(DEFAULT_SESSION_KEY_MANAGER_MODULE); + + it("Should send a user op using Batched Session Validation Module", async () => { + let sessionSigner: WalletClientSigner; + + const { + whale: { + account: { address: sessionKeyEOA }, + privateKey: pvKey, + }, + minnow: { publicAddress: recipient }, + publicClient, + chainId, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + try { + sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); + } catch (error) { + sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey }); + } + + expect(sessionSigner).toBeTruthy(); + + // Create smart account + let smartAccount = await createSmartAccountClient({ + chainId, + signer: sessionSigner, + bundlerUrl, + biconomyPaymasterApiKey, + index: 1, // Increasing index to not conflict with other test cases and use a new smart account + }); + + // Create session module + const sessionModule = await createSessionKeyManagerModule({ + moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, + smartAccountAddress: await smartAccount.getAddress(), + sessionStorageClient: sessionFileStorage, + }); + + // Create batched session module + const batchedSessionModule = await createBatchedSessionRouterModule({ + moduleAddress: DEFAULT_BATCHED_SESSION_ROUTER_MODULE, + smartAccountAddress: await smartAccount.getAddress(), + sessionKeyManagerModule: sessionModule, + }); + + // Set enabled call on session + const sessionKeyData1 = encodeAbiParameters( + [{ type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }], + [ + sessionKeyEOA, + "0xdA5289fCAAF71d52a80A254da614a192b693e977", // erc20 token address + recipient, // receiver address + parseUnits("10", 6), + ], + ); + + // Set enabled call on session + const sessionKeyData2 = encodeAbiParameters( + [{ type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }], + [ + sessionKeyEOA, + "0xdA5289fCAAF71d52a80A254da614a192b693e977", // erc20 token address + recipient, // receiver address + parseUnits("10", 6), + ], + ); + + const erc20ModuleAddr = "0x000000D50C68705bd6897B2d17c7de32FB519fDA"; + const mockSessionModuleAddr = "0x7Ba4a7338D7A90dfA465cF975Cc6691812C3772E"; + + const sessionTxData = await batchedSessionModule.createSessionData([ + { + validUntil: 0, + validAfter: 0, + sessionValidationModule: erc20ModuleAddr, + sessionPublicKey: sessionKeyEOA, + sessionKeyData: sessionKeyData1, + }, + { + validUntil: 0, + validAfter: 0, + sessionValidationModule: mockSessionModuleAddr, + sessionPublicKey: sessionKeyEOA, + sessionKeyData: sessionKeyData2, + }, + ]); + + const setSessionAllowedTrx = { + to: DEFAULT_SESSION_KEY_MANAGER_MODULE, + data: sessionTxData.data, + }; + + const txArray: any = []; + + // Check if module is enabled + + const isEnabled = await smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); + if (!isEnabled) { + const enableModuleTrx = await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); + txArray.push(enableModuleTrx); + txArray.push(setSessionAllowedTrx); + } else { + console.log("MODULE ALREADY ENABLED"); + txArray.push(setSessionAllowedTrx); + } + + const isBRMenabled = await smartAccount.isModuleEnabled(DEFAULT_BATCHED_SESSION_ROUTER_MODULE); + if (!isBRMenabled) { + // -----> enableModule batched session router module + const tx2 = await smartAccount.getEnableModuleData(DEFAULT_BATCHED_SESSION_ROUTER_MODULE); + txArray.push(tx2); + } + + const userOp = await smartAccount.buildUserOp(txArray); + + const userOpResponse1 = await smartAccount.sendUserOp(userOp); + const transactionDetails = await userOpResponse1.wait(); + console.log("Tx Hash: ", transactionDetails.receipt.transactionHash); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function transfer(address _to, uint256 _value)"]), + functionName: "transfer", + args: [recipient, parseUnits("0.01", 6)], + }); + + const transferTx = { + to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", //erc20 token address + data: encodedCall, + }; + + const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAccountAddress()); + + smartAccount = smartAccount.setActiveValidationModule(batchedSessionModule); + + const dummyTx = { + to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", + data: "0x", + }; + + console.log(sessionSigner, "SESSION SIGNER!"); + + const userOpResponse2 = await smartAccount.sendTransaction([transferTx, dummyTx], { + params: { + batchSessionParams: [ + { + sessionSigner: sessionSigner, + sessionValidationModule: erc20ModuleAddr, + }, + { + sessionSigner: sessionSigner, + sessionValidationModule: mockSessionModuleAddr, + }, + ], + }, + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + }, + }); + + expect(userOpResponse2.userOpHash).toBeTruthy(); + expect(userOpResponse2.userOpHash).not.toBeNull(); + + const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAccountAddress()); + + expect(maticBalanceAfter).toEqual(maticBalanceBefore); + + console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); + }, 60000); +}); From 3c94de1a4fbeb4b4d8c7af3e0ade6706beed9e6a Mon Sep 17 00:00:00 2001 From: GabiDev Date: Mon, 12 Feb 2024 14:45:15 +0200 Subject: [PATCH 1097/1247] Added ethers defaultAbiCoder --- packages/modules/package.json | 3 +- .../modules/src/BatchedSessionRouterModule.ts | 34 +++++-------------- 2 files changed, 11 insertions(+), 26 deletions(-) diff --git a/packages/modules/package.json b/packages/modules/package.json index 5674750f8..969a1a42a 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -56,7 +56,8 @@ "@alchemy/aa-core": "3.0.0-alpha.4", "@biconomy/common": "4.0.0", "merkletreejs": "^0.3.11", - "viem": "^2.7.3" + "viem": "^2.7.3", + "@ethersproject/abi": "^5.7.0" }, "devDependencies": { "@types/node": "^20.11.10", diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 669414f50..4c8847e17 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -10,6 +10,7 @@ import { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage. import { Hex, concat, encodeAbiParameters, keccak256, pad, parseAbiParameters, toBytes, toHex } from "viem"; import { SmartAccountSigner } from "@alchemy/aa-core"; import { convertSigner } from "@biconomy/common"; +import { defaultAbiCoder } from "@ethersproject/abi"; export class BatchedSessionRouterModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; @@ -146,20 +147,12 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // Generate the padded signature - const paddedSignature = encodeAbiParameters( - [ - { type: "address" }, - { - type: "tuple", - components: [{ type: "uint48" }, { type: "uint48" }, { type: "address" }, { type: "bytes" }, { type: "bytes32[]" }, { type: "bytes" }], - }, - { type: "bytes" }, - ], - // @ts-ignore + const paddedSignature = defaultAbiCoder.encode( + ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature], ); - return paddedSignature; + return paddedSignature as Hex; } /** @@ -240,8 +233,8 @@ export class BatchedSessionRouterModule extends BaseValidationModule { throw new Error("sessionID or sessionValidationModule should be provided."); } - sessionDataTuple.push(sessionSignerData.validUntil); - sessionDataTuple.push(sessionSignerData.validAfter); + sessionDataTuple.push(BigInt(sessionSignerData.validUntil)); + sessionDataTuple.push(BigInt(sessionSignerData.validAfter)); sessionDataTuple.push(sessionSignerData.sessionValidationModule); sessionDataTuple.push(sessionSignerData.sessionKeyData); @@ -261,21 +254,12 @@ export class BatchedSessionRouterModule extends BaseValidationModule { } // Generate the padded signature - - const paddedSignature = encodeAbiParameters( - [ - { type: "address" }, - { - type: "tuple", - components: [{ type: "uint48" }, { type: "uint48" }, { type: "address" }, { type: "bytes" }, { type: "bytes32[]" }, { type: "bytes" }], - }, - { type: "bytes" }, - ], - // @ts-ignore + const paddedSignature = defaultAbiCoder.encode( + ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], [this.getSessionKeyManagerAddress(), sessionDataTupleArray, this.mockEcdsaSessionKeySig], ); - const dummySig = encodeAbiParameters(parseAbiParameters("bytes, address"), [paddedSignature, this.getAddress()]); + const dummySig = encodeAbiParameters(parseAbiParameters("bytes, address"), [paddedSignature as Hex, this.getAddress()]); return dummySig; } From b27061e2eec7bafb0620e88e6d94e56e9a13cb76 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Mon, 12 Feb 2024 14:59:54 +0200 Subject: [PATCH 1098/1247] Fix for encodeAbiParameters inside batched session module (#416) Co-authored-by: GabiDev --- packages/modules/package.json | 1 + .../modules/src/BatchedSessionRouterModule.ts | 28 +++++++++---------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/packages/modules/package.json b/packages/modules/package.json index 5674750f8..6defc5259 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -55,6 +55,7 @@ "dependencies": { "@alchemy/aa-core": "3.0.0-alpha.4", "@biconomy/common": "4.0.0", + "@ethersproject/abi": "^5.7.0", "merkletreejs": "^0.3.11", "viem": "^2.7.3" }, diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 8108f97ef..4c8847e17 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -10,6 +10,7 @@ import { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage. import { Hex, concat, encodeAbiParameters, keccak256, pad, parseAbiParameters, toBytes, toHex } from "viem"; import { SmartAccountSigner } from "@alchemy/aa-core"; import { convertSigner } from "@biconomy/common"; +import { defaultAbiCoder } from "@ethersproject/abi"; export class BatchedSessionRouterModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; @@ -146,13 +147,12 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // Generate the padded signature - const paddedSignature = encodeAbiParameters(parseAbiParameters("address, tuple(uint48,uint48,address,bytes,bytes32[],bytes)[], bytes"), [ - this.getSessionKeyManagerAddress(), - sessionDataTupleArray, - signature, - ]); + const paddedSignature = defaultAbiCoder.encode( + ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], + [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature], + ); - return paddedSignature; + return paddedSignature as Hex; } /** @@ -233,8 +233,8 @@ export class BatchedSessionRouterModule extends BaseValidationModule { throw new Error("sessionID or sessionValidationModule should be provided."); } - sessionDataTuple.push(sessionSignerData.validUntil); - sessionDataTuple.push(sessionSignerData.validAfter); + sessionDataTuple.push(BigInt(sessionSignerData.validUntil)); + sessionDataTuple.push(BigInt(sessionSignerData.validAfter)); sessionDataTuple.push(sessionSignerData.sessionValidationModule); sessionDataTuple.push(sessionSignerData.sessionKeyData); @@ -254,14 +254,12 @@ export class BatchedSessionRouterModule extends BaseValidationModule { } // Generate the padded signature + const paddedSignature = defaultAbiCoder.encode( + ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], + [this.getSessionKeyManagerAddress(), sessionDataTupleArray, this.mockEcdsaSessionKeySig], + ); - const paddedSignature = encodeAbiParameters(parseAbiParameters("address, tuple(uint48,uint48,address,bytes,bytes32[],bytes)[], bytes"), [ - this.getSessionKeyManagerAddress(), - sessionDataTupleArray, - this.mockEcdsaSessionKeySig, - ]); - - const dummySig = encodeAbiParameters(parseAbiParameters("bytes, address"), [paddedSignature, this.getAddress()]); + const dummySig = encodeAbiParameters(parseAbiParameters("bytes, address"), [paddedSignature as Hex, this.getAddress()]); return dummySig; } From 11a7e6e1eda2e208dcfc412ae2ecfb0817071cc4 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 12 Feb 2024 17:21:43 +0400 Subject: [PATCH 1099/1247] Merge Develop to Main (#417) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix UserOpResponse wait confirmations * birth of V4 SDK (#401) * feat: accounts update * update other packages with viem types * fix: account compatibility * minor fix * code refactor with latest releases * fix: resolve build * turned off bundler tests * fix: default validation params * fix!: make bundler and paymaster public * feat: reduce the bundle size * fix: lint and temp test * fix: gasless paymaster flow * minor fixes * remove the default chain * fix: lint * fix: method comment * fix: bundler abstraction in v4 * feat: add Logger class to v4 * Feedback by @joepegler #352 * fix: logic error * Feat(DEVX-410): Reinclude tests * remove unused package * fix: constructor validation initialisation * fix: build issue * Resolved DEVX-405 * Added e2e test for multiChain module * Updated the "addSigner" method * Fixed lint * Resolved DEVX-402 Added esbuild * Remove unused file * Added negative tests * Added multichainValidation tests * Fix import * Multichain testing support * Added session validation module tests * fix issues with address and update gitignore * linkAll improvement * watch package builds cont * WIP Session module * Added tests for multi-chain validation and session validation * unit tests fix * Remove duplicate test * revert tsconfig change * Added check for paymaster in BiconomySmartAccountV2 class * Fixed session file storage path and gitignore * Fixed e2e nft mint test * Added wait for tx before checking balance in test * Resolved SMA-526 * test workflow * test again * fix command * fix again * test again * cont. * Added SPONSORED and ERC20 paymaster check logic in SDK + tests * Feat(DEVX-425): Support ethers (#370) Resolved DEVX-425: Support ethers * Fixed lint * Merged with v4 * Changed parameter name * Uncomment PaymasterMode * Added fix for selected quote case ERC20 paymaster * Changed send user op approach in ERC20 paymaster test * Modify sendUserOp function description * Added throw instead of return user op * continued * Fix branch for deployment of docs * Removed try catch * Added utility func to get balance in tests * Removed unused value param from tx obj * Apply Signer Abstraction to modules (#375) * Added Signer Abstraction * fix:circular_dependency * Resolved SM-547 * lint:fix * Removed lint-staged (#382) Co-authored-by: GabiDev * README tweaks (#377) * Update README.md * createSmartAccountClient (#385) * Add paymasterAndData validation in e2e tests (#381) * Add paymasterAndData validation in e2e tests * Use config values instead of hardcoded in tests --------- Co-authored-by: GabiDev * Use RpcUrl from provider (#379) * Resolved SMA-549 lint:fix log * continued * continued * continued * Remove e2e test from unit test commit lockfile * rpc test * fix tests * Feat/sma 540 check paymaster userop (#384) * Refactor paymasterServiceData validation logic for ERC20 mode * Add assertions and test case for ERC20 Paymaster user op * Changed isNullOrUndefined function param to any type * Update createSmartWalletClient to createSmartAccountClient * Added ts-doc for setPaymasterUserOp * Export FeeQuotesOrDataResponse from @account and update import path in test * Refactor setPaymasterUserOp --> getPaymasterUserOp --------- Co-authored-by: GabiDev * update lockfile * Add ethersV6 compatibility (#387) * Fix for etherv6 signer compatibility * Refactor name --------- Co-authored-by: GabiDev * Feat(SMA-559): Improved dx for erc20 paymaster calls (#388) * Resolved SMA-559 * Fix await * Fix tests * Update docs * remove unused import * Fix broken tests * Fix rpc url * buildTokenPaymasterUserOp * lint:fix * Fix spender * Abstract tokenlist away * fix test * fix await * lint:fix * Make getPaymasterUserOp public * remove log * Except sessionStorageData folder from gitignore but not files (#389) Co-authored-by: GabiDev * fixes in v4 for front end frameworks (#392) * fixes in v4 for front end frameworks * revert build scripts * Added simulationType flag (#390) * Added simulationType flag * Change params for sendTransaction * Modified sendTransaction params for simulationType + moduleInfo params --------- Co-authored-by: GabiDev * Fix(SMA-574): ESM builds (#393) * es build fixes Resolved SMA-574 * Include both builds * Default build with tsc * minify_tsc_build * Fix check for maxApproval in BiconomySmartAccountV2 (#395) Co-authored-by: GabiDev * Bugfix/api error message (#396) * Fix check for maxApproval in BiconomySmartAccountV2 * Fixed api error response + increment time for test --------- Co-authored-by: GabiDev * Change type: sessionSigner: SupportedSigner (#397) * Fixed merkletreejs import (#400) * Fixed merkletreejs import * Removed console log --------- Co-authored-by: GabiDev * Feat(SMA-579): Allow empty tokenInfo fields during getTokenFees (#399) * Resolved SMA-579 * added e2e tests * lint:fix & update docs * fix: token paymaster approval flows * continued * test fix * Remove max approval from tests --------- Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * yarn lock * Feat(SMA-583): Update README.md with v4 examples (#405) * continued docs + readme updates * Updated README.md * lint:fix * update lockfile * Added string as a supported Transaction value type (#404) Co-authored-by: GabiDev Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * Added export for UserOpStatus type from /account (#403) * Exported UserOpStatus type from /account * update lockfile --------- Co-authored-by: GabiDev Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * Added needed exports from modules (#402) * Added needed exports from modules * update lockfile --------- Co-authored-by: GabiDev Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * Added readme (#409) Co-authored-by: GabiDev * Commented overrides and skipBundlerGasEstimation params (#407) Co-authored-by: GabiDev * V4 with viem v2 (bump aa-core and viem) (#406) * update aa-core and viem packages * update rest of the code to use updated deps * update lockfile * fix: build error --------- Co-authored-by: amanraj1608 * update lockfile * Added a new param to sendRequest "service" (#412) Co-authored-by: GabiDev * Added changelog (#410) * Make package exports consistent (#411) * Make package exports consistent * Update README.md s * type comment fix * Move default to end of exports * LightSigner * export LightSigner * export type --------- Co-authored-by: amanraj1608 Co-authored-by: Aman Raj <42104907+AmanRaj1608@users.noreply.github.com> Co-authored-by: Joe Pegler Co-authored-by: GabiDev Co-authored-by: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> * Release 8 - Biconomy V4 SDK (#414) * update lockfile * chore: release r8 update package version * Update modules changelog --------- Co-authored-by: Joe Pegler * Replaced baseGoerli with baseSepolia (#415) Co-authored-by: GabiDev * Fix for encodeAbiParameters inside batched session module (#416) Co-authored-by: GabiDev --------- Co-authored-by: Aurélien Co-authored-by: amanraj1608 Co-authored-by: Aman Raj <42104907+AmanRaj1608@users.noreply.github.com> Co-authored-by: Joe Pegler Co-authored-by: GabiDev Co-authored-by: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> --- .env.example | 5 + .eslintrc.js | 4 +- .github/workflows/check_branch_name.yml | 2 +- .github/workflows/docs.yml | 27 + .github/workflows/pull_request_approved.yml | 33 + .github/workflows/push_check.yml | 3 +- .gitignore | 17 +- .nvmrc | 2 +- README.md | 149 +- jest.config.e2e.ts | 6 + jest.config.ts | 18 +- linkAll.sh | 3 +- package.json | 10 +- packages/account/.esbuild.js | 58 + packages/account/CHANGELOG.md | 105 +- packages/account/Readme.md | 161 +- packages/account/package.json | 62 +- packages/account/src/BaseSmartAccount.ts | 481 - packages/account/src/BiconomySmartAccount.ts | 544 - .../account/src/BiconomySmartAccountV2.ts | 1122 +- packages/account/src/SmartAccount.ts | 314 - packages/account/src/abi/AccountResolver.ts | 106 + packages/account/src/abi/Factory.ts | 141 + packages/account/src/abi/SmartAccount.ts | 944 ++ packages/account/src/index.ts | 52 +- .../src/interfaces/IBaseSmartAccount.ts | 22 - .../src/interfaces/IBiconomySmartAccount.ts | 29 - .../account/src/interfaces/ISmartAccount.ts | 8 - packages/account/src/utils/Constants.ts | 11 +- packages/account/src/utils/Preverificaiton.ts | 118 - packages/account/src/utils/Types.ts | 300 +- packages/account/src/utils/Utils.ts | 45 + packages/account/src/utils/VoidSigner.ts | 57 - packages/account/src/utils/index.ts | 3 + .../tests/SmartAccountV1.testnet.spec.ts | 72 - ...AccountV2-Abstract-Paymaster.local.spec.ts | 106 - ...AccountV2-Module-Abstraction.local.spec.ts | 87 - .../tests/SmartAccountV2.local.spec.ts | 609 - packages/account/tests/account.e2e.spec.ts | 459 + packages/account/tests/account.spec.ts | 234 +- packages/account/tsconfig.build.json | 32 + packages/account/tsconfig.json | 4 +- packages/account/typedoc.json | 8 + packages/bundler/.esbuild.js | 58 + packages/bundler/CHANGELOG.md | 58 +- packages/bundler/Readme.md | 16 +- packages/bundler/package.json | 42 +- packages/bundler/src/Bundler.ts | 224 +- packages/bundler/src/index.ts | 11 +- packages/bundler/src/interfaces/IBundler.ts | 10 +- packages/bundler/src/utils/Constants.ts | 158 +- packages/bundler/src/utils/HelperFunction.ts | 20 +- packages/bundler/src/utils/Types.ts | 36 +- packages/bundler/src/utils/Utils.ts | 9 + packages/bundler/tests/bundler.e2e.spec.ts | 19 + packages/bundler/tests/bundler.spec.ts | 15 +- packages/bundler/tsconfig.build.json | 32 + packages/bundler/tsconfig.json | 4 +- packages/common/.depcheckrc | 1 - packages/common/.esbuild.js | 58 + packages/common/CHANGELOG.md | 126 - packages/common/README.md | 2 +- .../SmartAccountFactory_v1.0.0.json | 172 - .../biconomy_v1.0.0/SmartAccount_v1.0.0.json | 1682 --- .../ECDSAOwnershipRegistryModule_v1.0.0.json | 298 - .../MultiChainValidationModule_v1.0.0.json | 298 - .../SmartAccountFactory_v2.0.0.json | 293 - .../biconomy_v2.0.0/SmartAccount_v2.0.0.json | 1182 -- .../abis/entrypoint/EntryPoint_v0.0.5.json | 1318 --- .../abis/entrypoint/EntryPoint_v0.0.6.json | 1318 --- .../common/abis/misc/AddressResolver.json | 249 - packages/common/package.json | 61 +- packages/common/src/Constants.ts | 42 - packages/common/src/ContractsInstances.ts | 82 - packages/common/src/ERC4337Utils.ts | 178 - packages/common/src/Utils.ts | 13 - packages/common/src/httpRequests.ts | 86 - packages/common/src/index.ts | 13 +- packages/common/src/utils/Constants.ts | 7 + packages/common/src/utils/EthersSigner.ts | 38 + .../common/src/utils/Helpers/convertSigner.ts | 62 + packages/common/src/utils/Helpers/index.ts | 1 + .../src/utils/HttpRequests.ts | 10 +- packages/common/src/{ => utils}/Logger.ts | 0 packages/common/src/utils/Types.ts | 13 + packages/common/tests/ERC4337Utils.spec.ts | 44 - packages/common/tsconfig.build.json | 32 + packages/common/tsconfig.json | 8 +- packages/core-types/CHANGELOG.md | 102 - packages/core-types/README.md | 13 - packages/core-types/package.json | 45 - packages/core-types/src/BundlerTypes.ts | 8 - packages/core-types/src/ChainsTypes.ts | 39 - .../core-types/src/PaymasterServiceTypes.ts | 6 - packages/core-types/src/Types.ts | 27 - packages/core-types/src/index.ts | 2 - packages/core-types/tests/core-types.spec.ts | 5 - packages/core-types/tsconfig.json | 9 - packages/modules/.esbuild.js | 58 + packages/modules/CHANGELOG.md | 33 +- packages/modules/package.json | 47 +- packages/modules/src/BaseValidationModule.ts | 41 +- .../modules/src/BatchedSessionRouterModule.ts | 76 +- .../src/ECDSAOwnershipValidationModule.ts | 73 +- .../modules/src/MultichainValidationModule.ts | 122 +- .../modules/src/SessionKeyManagerModule.ts | 146 +- packages/modules/src/index.ts | 35 +- .../modules/src/interfaces/ISessionStorage.ts | 20 +- .../src/interfaces/IValidationModule.ts | 17 +- .../session-storage/SessionLocalStorage.ts | 61 +- .../ERC20SessionValidationModule.ts | 14 +- packages/modules/src/utils/Constants.ts | 2 +- packages/modules/src/utils/Helper.ts | 41 + packages/modules/src/utils/Types.ts | 72 +- packages/modules/tests/modules.spec.ts | 45 + .../multiChainValidationModule.e2e.spec.ts | 92 + .../tests/sessionValidationModule.e2e.spec.ts | 154 + packages/modules/tests/utils/customSession.ts | 218 + .../tests/utils/sessionStorageData/.gitkeep | 0 packages/modules/tsconfig.build.json | 32 + packages/modules/tsconfig.json | 22 +- packages/node-client/CHANGELOG.md | 73 - packages/node-client/README.md | 77 - packages/node-client/package.json | 74 - packages/node-client/src/INodeClient.ts | 93 - packages/node-client/src/NodeClient.ts | 145 - packages/node-client/src/index.ts | 5 - .../node-client/src/types/NodeClientTypes.ts | 225 - packages/node-client/src/utils/index.ts | 3 - .../node-client/tests/node-client.spec.ts | 22 - packages/node-client/tsconfig.json | 9 - packages/particle-auth/.esbuild.js | 58 + packages/particle-auth/CHANGELOG.md | 4 + packages/particle-auth/package.json | 35 +- packages/particle-auth/tsconfig.build.json | 32 + packages/particle-auth/tsconfig.json | 3 +- packages/paymaster/.esbuild.js | 58 + packages/paymaster/CHANGELOG.md | 40 +- packages/paymaster/Readme.md | 12 +- packages/paymaster/package.json | 48 +- packages/paymaster/src/BiconomyPaymaster.ts | 249 +- packages/paymaster/src/index.ts | 12 +- .../src/interfaces/IHybridPaymaster.ts | 22 +- .../paymaster/src/interfaces/IPaymaster.ts | 6 +- .../src/{constants.ts => utils/Constants.ts} | 3 +- packages/paymaster/src/utils/Helpers.ts | 7 + packages/paymaster/src/utils/Types.ts | 90 +- .../paymaster/tests/paymaster.e2e.spec.ts | 19 + packages/paymaster/tests/paymaster.spec.ts | 15 +- packages/paymaster/tsconfig.build.json | 32 + packages/paymaster/tsconfig.json | 3 +- packages/transak/.esbuild.js | 58 + packages/transak/CHANGELOG.md | 4 + packages/transak/package.json | 35 +- packages/transak/src/index.ts | 2 +- packages/transak/tsconfig.build.json | 32 + packages/transak/tsconfig.json | 5 +- rebuild.sh | 40 +- tests/chains.config.ts | 43 + tests/index.d.ts | 26 + tests/setup-e2e-tests.ts | 142 + tests/setup-unit-tests.ts | 75 + tests/utils.ts | 45 + tsconfig.json | 10 +- yarn.lock | 9886 +++++++++++++++++ 165 files changed, 16016 insertions(+), 12510 deletions(-) create mode 100644 .env.example create mode 100644 .github/workflows/docs.yml create mode 100644 .github/workflows/pull_request_approved.yml create mode 100644 jest.config.e2e.ts create mode 100644 packages/account/.esbuild.js delete mode 100644 packages/account/src/BaseSmartAccount.ts delete mode 100644 packages/account/src/BiconomySmartAccount.ts delete mode 100644 packages/account/src/SmartAccount.ts create mode 100644 packages/account/src/abi/AccountResolver.ts create mode 100644 packages/account/src/abi/Factory.ts create mode 100644 packages/account/src/abi/SmartAccount.ts delete mode 100644 packages/account/src/interfaces/IBaseSmartAccount.ts delete mode 100644 packages/account/src/interfaces/IBiconomySmartAccount.ts delete mode 100644 packages/account/src/interfaces/ISmartAccount.ts delete mode 100644 packages/account/src/utils/Preverificaiton.ts create mode 100644 packages/account/src/utils/Utils.ts delete mode 100644 packages/account/src/utils/VoidSigner.ts create mode 100644 packages/account/src/utils/index.ts delete mode 100644 packages/account/tests/SmartAccountV1.testnet.spec.ts delete mode 100644 packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts delete mode 100644 packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts delete mode 100644 packages/account/tests/SmartAccountV2.local.spec.ts create mode 100644 packages/account/tests/account.e2e.spec.ts create mode 100644 packages/account/tsconfig.build.json create mode 100644 packages/account/typedoc.json create mode 100644 packages/bundler/.esbuild.js create mode 100644 packages/bundler/src/utils/Utils.ts create mode 100644 packages/bundler/tests/bundler.e2e.spec.ts create mode 100644 packages/bundler/tsconfig.build.json delete mode 100644 packages/common/.depcheckrc create mode 100644 packages/common/.esbuild.js delete mode 100644 packages/common/CHANGELOG.md delete mode 100644 packages/common/abis/biconomy_v1.0.0/SmartAccountFactory_v1.0.0.json delete mode 100644 packages/common/abis/biconomy_v1.0.0/SmartAccount_v1.0.0.json delete mode 100644 packages/common/abis/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v1.0.0.json delete mode 100644 packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json delete mode 100644 packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json delete mode 100644 packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json delete mode 100644 packages/common/abis/entrypoint/EntryPoint_v0.0.5.json delete mode 100644 packages/common/abis/entrypoint/EntryPoint_v0.0.6.json delete mode 100644 packages/common/abis/misc/AddressResolver.json delete mode 100644 packages/common/src/Constants.ts delete mode 100644 packages/common/src/ContractsInstances.ts delete mode 100644 packages/common/src/ERC4337Utils.ts delete mode 100644 packages/common/src/Utils.ts delete mode 100644 packages/common/src/httpRequests.ts create mode 100644 packages/common/src/utils/Constants.ts create mode 100644 packages/common/src/utils/EthersSigner.ts create mode 100644 packages/common/src/utils/Helpers/convertSigner.ts create mode 100644 packages/common/src/utils/Helpers/index.ts rename packages/{node-client => common}/src/utils/HttpRequests.ts (82%) rename packages/common/src/{ => utils}/Logger.ts (100%) create mode 100644 packages/common/src/utils/Types.ts delete mode 100644 packages/common/tests/ERC4337Utils.spec.ts create mode 100644 packages/common/tsconfig.build.json delete mode 100644 packages/core-types/CHANGELOG.md delete mode 100644 packages/core-types/README.md delete mode 100644 packages/core-types/package.json delete mode 100644 packages/core-types/src/BundlerTypes.ts delete mode 100644 packages/core-types/src/ChainsTypes.ts delete mode 100644 packages/core-types/src/PaymasterServiceTypes.ts delete mode 100644 packages/core-types/src/Types.ts delete mode 100644 packages/core-types/src/index.ts delete mode 100644 packages/core-types/tests/core-types.spec.ts delete mode 100644 packages/core-types/tsconfig.json create mode 100644 packages/modules/.esbuild.js create mode 100644 packages/modules/src/utils/Helper.ts create mode 100644 packages/modules/tests/modules.spec.ts create mode 100644 packages/modules/tests/multiChainValidationModule.e2e.spec.ts create mode 100644 packages/modules/tests/sessionValidationModule.e2e.spec.ts create mode 100644 packages/modules/tests/utils/customSession.ts create mode 100644 packages/modules/tests/utils/sessionStorageData/.gitkeep create mode 100644 packages/modules/tsconfig.build.json delete mode 100644 packages/node-client/CHANGELOG.md delete mode 100644 packages/node-client/README.md delete mode 100644 packages/node-client/package.json delete mode 100644 packages/node-client/src/INodeClient.ts delete mode 100644 packages/node-client/src/NodeClient.ts delete mode 100644 packages/node-client/src/index.ts delete mode 100644 packages/node-client/src/types/NodeClientTypes.ts delete mode 100644 packages/node-client/src/utils/index.ts delete mode 100644 packages/node-client/tests/node-client.spec.ts delete mode 100644 packages/node-client/tsconfig.json create mode 100644 packages/particle-auth/.esbuild.js create mode 100644 packages/particle-auth/tsconfig.build.json create mode 100644 packages/paymaster/.esbuild.js rename packages/paymaster/src/{constants.ts => utils/Constants.ts} (79%) create mode 100644 packages/paymaster/src/utils/Helpers.ts create mode 100644 packages/paymaster/tests/paymaster.e2e.spec.ts create mode 100644 packages/paymaster/tsconfig.build.json create mode 100644 packages/transak/.esbuild.js create mode 100644 packages/transak/tsconfig.build.json create mode 100644 tests/chains.config.ts create mode 100644 tests/index.d.ts create mode 100644 tests/setup-e2e-tests.ts create mode 100644 tests/setup-unit-tests.ts create mode 100644 tests/utils.ts create mode 100644 yarn.lock diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..a293b6aaf --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +E2E_PRIVATE_KEY_ONE= +E2E_PRIVATE_KEY_TWO= +E2E_BICO_PAYMASTER_KEY_MUMBAI= +E2E_BICO_PAYMASTER_KEY_BASE= +BICONOMY_SDK_DEBUG=true \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 78d998dfd..eb97a48dc 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -23,9 +23,11 @@ module.exports = { "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }], "security/detect-object-injection": "warn", "security/detect-unsafe-regex": "error", - "import/extensions": "off", + "import/extensions": "error", // Now we need to specify extensions for imports for esm builds "security/detect-object-injection": "off", // turning off Injection Sink rule "@typescript-eslint/no-throw-literal": "off", // temp deactivated needs to be removed once fixed + "@typescript-eslint/ban-ts-ignore": "off", + "@typescript-eslint/ban-ts-comment": "off", }, settings: {}, overrides: [ diff --git a/.github/workflows/check_branch_name.yml b/.github/workflows/check_branch_name.yml index 9c4cf9a67..39422432d 100644 --- a/.github/workflows/check_branch_name.yml +++ b/.github/workflows/check_branch_name.yml @@ -18,4 +18,4 @@ jobs: if [[ ! $BRANCH_NAME =~ ^(features/|fixes/|releases/) ]]; then echo "error: Branch names should follow GitFlow naming convention (features/, fixes/, releases/)." exit 1 - fi \ No newline at end of file + fi diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000..5b5dd6522 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,27 @@ +name: Build and Deploy Documentation +on: + workflow_dispatch: + push: + branches: + - develop + - v4 + +permissions: + contents: write +jobs: + build-docs-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v3 + + - name: Install and Build + run: | + yarn + yarn build + yarn --cwd ./packages/account docs + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: ./packages/account/docs diff --git a/.github/workflows/pull_request_approved.yml b/.github/workflows/pull_request_approved.yml new file mode 100644 index 000000000..d4f142659 --- /dev/null +++ b/.github/workflows/pull_request_approved.yml @@ -0,0 +1,33 @@ +name: E2E Test workflow +on: + pull_request_review: + types: [submitted] + workflow_dispatch: +jobs: + e2e_test: + if: github.event.review.state == 'approved' + name: E2E tests + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18.x] + + steps: + - name: Checkout + uses: "actions/checkout@main" + + - name: Set Node.js + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: yarn install --frozen-lockfile && yarn build + + - name: Run tests + env: + E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} + E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} + E2E_BICO_PAYMASTER_KEY_MUMBAI: ${{ secrets.E2E_BICO_PAYMASTER_KEY_MUMBAI }} + E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} + run: yarn test:e2e diff --git a/.github/workflows/push_check.yml b/.github/workflows/push_check.yml index 6cfca05c1..35705a430 100644 --- a/.github/workflows/push_check.yml +++ b/.github/workflows/push_check.yml @@ -1,5 +1,6 @@ name: Test workflow -on: push +on: [push, workflow_dispatch] + jobs: lint: name: Lint sources diff --git a/.gitignore b/.gitignore index 3ac2e3158..cc1d5d78c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ logs *.log yarn-debug.log* yarn-error.log* -yarn.lock lockfiles # Diagnostic reports (https://nodejs.org/api/report.html) @@ -47,7 +46,6 @@ node_modules/ .yarn/build-state.yml .yarn/install-state.gz .pnp.* -yarn.lock # macOS .DS_Store @@ -58,20 +56,23 @@ artifacts deployments # lockfiles -packages/core-types/package-lock.json packages/account/package-lock.json -packages/common/package-lock.json +packages/modules/package-lock.json packages/bundler/package-lock.json -packages/node-client/package-lock.json packages/paymaster/package-lock.json packages/particle-auth/package-lock.json -packages/web3-auth/package-lock.json -packages/web3-auth-native/package-lock.json packages/transak/package-lock.json package-lock.json -yarn.lock + +#ignore sessionStorageData files +packages/modules/tests/utils/sessionStorageData/* +#except sessionStorageData folder +!packages/modules/tests/utils/sessionStorageData/.gitkeep # Typechain typechain openapi/ + +# docs +packages/account/docs/* \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index c9d82507f..b1215e876 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v14.17.0 \ No newline at end of file +v18.16.0 \ No newline at end of file diff --git a/README.md b/README.md index 096b1e7f2..00c720607 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,31 @@ -# Biconomy SDK: Your Gateway to ERC4337 Account Abstraction & Smart Accounts 🛠️ +# Biconomy SDK -![Biconomy SDK](https://img.shields.io/badge/Biconomy-SDK-blue.svg) ![TypeScript](https://img.shields.io/badge/-TypeScript-blue) ![Test Coverage](https://img.shields.io/badge/Coverage-45%25-yellow.svg) +![Biconomy SDK](https://img.shields.io/badge/Biconomy-SDK-blue.svg) +![TypeScript](https://img.shields.io/badge/-TypeScript-blue) +![Test Coverage](https://img.shields.io/badge/Coverage-79.82%25-green.svg) -

Biconomy SDK Banner

+## 👋 Introduction -## Introduction +The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. It is designed for seamless user experiences and offers non-custodial solutions for user onboarding, sending transactions (userOps), gas sponsorship and much more. -The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. This SDK is designed for seamless user experiences and offers non-custodial solutions for user onboarding, transaction management, and gas abstraction. +## 🛠️ Quickstart + +```typescript +import { createSmartAccountClient } from "@biconomy/account"; + +const smartAccount = await createSmartAccountClient({ + signer: viemWalletOrEthersSigner, + bundlerUrl: "", // From dashboard.biconomy.io + biconomyPaymasterApiKey: "", // From dashboard.biconomy.io +}); + +const { wait } = await smartAccount.sendTransaction({ to: "0x...", value: 1 }); -

Biconomy SDK Diagram

+const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); +``` ## 🌟 Features @@ -16,75 +33,101 @@ The Biconomy SDK is your all-in-one toolkit for building decentralized applicati - **Smart Accounts**: Enhance user experience with modular smart accounts. - **Paymaster Service**: Enable third-party gas sponsorship. - **Bundler Infrastructure**: Ensure efficient and reliable transaction bundling. -- **Backend Node**: Manage chain configurations and gas estimations. - -## 📦 Packages - -### Account - -Unlock the full potential of **ERC4337 Account Abstraction** with methods that simplify the creation and dispatch of UserOperations, streamlining dApp development and management. - -```javascript -import { ECDSAOwnershipValidationModule, DEFAULT_ECDSA_OWNERSHIP_MODULE } from "@biconomy/modules"; -import { IBundler, Bundler } from '@biconomy/bundler' -import { DEFAULT_ENTRYPOINT_ADDRESS } from "@biconomy/account" -import { providers } from 'ethers' -import { ChainId } from "@biconomy/core-types" +For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick start [here](https://docs.biconomy.io/quickstart). +## 📚 Resources -const module = await ECDSAOwnershipValidationModule.create({ - signer: wallet, - moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - }) +- [Biconomy Documentation](https://docs.biconomy.io/) +- [Biconomy Dashboard](https://dashboard.biconomy.io) +- [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) -const biconomySmartAccount = await BiconomySmartAccountV2.create({ - chainId: ChainId.POLYGON_MUMBAI, - bundler: bundler, - paymaster: paymaster, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - defaultValidationModule: module, - activeValidationModule: module -}) +## ⚙️ installation -console.log("address: ", await biconomySmartAccount.getAccountAddress()); +```bash +npm i @biconomy/account ``` -### Bundler +## 💼 Example Usages -Leverage standardized bundler infrastructure for efficient operation of account abstraction across EVM networks. +### [Initialise the smartAccount](https://bcnmy.github.io/biconomy-client-sdk/functions/createSmartAccountClient.html) -```javascript +| Key | Description | +| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| [signer](https://bcnmy.github.io/biconomy-client-sdk/packages/account/docs/interfaces/SmartAccountSigner.html) | This signer will be used for signing userOps for any transactions you build. Will accept ethers.JsonRpcSigner as well as a viemWallet | +| [biconomyPaymasterApiKey](https://dashboard.biconomy.io) | You can pass in a biconomyPaymasterApiKey necessary for sponsoring transactions (retrieved from the biconomy dashboard) | +| [bundlerUrl](https://dashboard.biconomy.io) | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | -import { IBundler, Bundler } from '@biconomy/bundler' +```typescript +import { createSmartAccountClient } from "@biconomy/account"; +import { createWalletClient, http, createPublicClient } from "viem"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { mainnet as chain } from "viem/chains"; +const account = privateKeyToAccount(generatePrivateKey()); +const signer = createWalletClient({ account, chain, transport: http() }); -const bundler: IBundler = new Bundler({ - bundlerUrl: 'https://bundler.biconomy.io/api/v2/80001/', - // Please go to https://dashboard.biconomy.io and generate bundler url - chainId: ChainId.POLYGON_MUMBAI, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - }) +const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, +}); ``` -### Paymaster +### [Send some ETH, have gas sponsored](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#sendTransaction) + +| Key | Description | +| --------------------------------------------------------------------------------- | -------------------------------------------------------------- | +| [oneOrManyTx](https://bcnmy.github.io/biconomy-client-sdk/types/Transaction.html) | Submit multiple or one transactions | +| [userOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/types/UserOpReceipt) | Returned information about your tx, receipts, userOpHashes etc | -Acting as third-party intermediaries, Paymasters have the capability to sponsor gas fees for an account, provided specific predefined conditions are met. Additionally, they can accept gas payments in ERC20 tokens from users' smart accounts, with the Paymaster managing the conversion to native tokens for gas payment. +```typescript +const oneOrManyTx = { to: "0x...", value: 1 }; -```javascript -const paymaster: IPaymaster = new BiconomyPaymaster({ - paymasterUrl: '' // From Biconomy Dashboard +const { wait } = await smartAccount.sendTransaction(oneOrManyTx, { + mode: PaymasterMode.SPONSORED, }); + +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); ``` -## 🛠️ Quickstart +### [Mint two NFTs, pay gas with token](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#getTokenFees) -For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick explore here https://docs.biconomy.io/docs/category/quick-explore +| Key | Description | +| -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| [buildUseropDto](https://bcnmy.github.io/biconomy-client-sdk/types/BuildUserOpOptions.html) | Options for building a userOp | +| [paymasterServiceData](https://bcnmy.github.io/biconomy-client-sdk/types/PaymasterUserOperationDto.html) | PaymasterOptions set in the buildUseropDto | -## 📚 Resources +```typescript +import { encodeFunctionData, parseAbi } from "viem"; + +const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: ["0x..."], +}); -- [Biconomy Documentation](https://docs.biconomy.io/docs/overview) -- [Biconomy Dashboard](https://dashboard.biconomy.io/) +const tx = { + to: nftAddress, + data: encodedCall, +}; +const oneOrManyTx = [tx, tx]; // Mint twice +const paymasterServiceData = { + mode: PaymasterMode.ERC20, + preferredToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC +}; +const buildUseropDto = { paymasterServiceData }; + +const { wait } = await smartAccount.sendTransaction(oneOrManyTx, buildUseropDto); + +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); +``` ## 🤝 Contributing diff --git a/jest.config.e2e.ts b/jest.config.e2e.ts new file mode 100644 index 000000000..2fff1ca6d --- /dev/null +++ b/jest.config.e2e.ts @@ -0,0 +1,6 @@ +import config from "./jest.config"; +const e2eConfig = { ...config }; +e2eConfig.testMatch = ["**/*.e2e.spec.ts"]; +e2eConfig.setupFilesAfterEnv = ["/tests/setup-e2e-tests.ts"]; + +export default e2eConfig; diff --git a/jest.config.ts b/jest.config.ts index a968e1995..7cc8b4123 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -78,7 +78,11 @@ const config: Config = { moduleFileExtensions: ["js", "mjs", "cjs", "jsx", "ts", "tsx", "json", "node"], // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - // moduleNameMapper: {}, + moduleNameMapper: { + '^(?!bn\.js$|hash\.js$)(.+)\\.js$': '$1' + }, + + extensionsToTreatAsEsm: ['.ts'], // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader // modulePathIgnorePatterns: [], @@ -123,7 +127,7 @@ const config: Config = { // setupFiles: [], // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], + setupFilesAfterEnv: ["/tests/setup-unit-tests.ts"], // The number of seconds after which a test is considered as slow and reported as such in the results. // slowTestThreshold: 5, @@ -141,7 +145,7 @@ const config: Config = { // testLocationInResults: false, // The glob patterns Jest uses to detect test files - testMatch: ["**/*.spec.ts"], + testMatch: ["**/*.spec.ts", "!**/*.e2e.spec.ts"], // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped // testPathIgnorePatterns: [ @@ -159,7 +163,7 @@ const config: Config = { // A map from regular expressions to paths to transformers transform: { - "^.+\\.tsx?$": "ts-jest", + "^.+\\.tsx?$": ["ts-jest", { useESM: true }], }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation @@ -179,6 +183,10 @@ const config: Config = { // Whether to use watchman for file crawling // watchman: true, + + globals: { + testDataPerChain: [], + } }; -export default config; +export default config; \ No newline at end of file diff --git a/linkAll.sh b/linkAll.sh index 6e9f511b6..3597ec1c0 100755 --- a/linkAll.sh +++ b/linkAll.sh @@ -1,2 +1,3 @@ !/bin/sh -for dir in ./packages/*; do (cd "$dir" && yarn link); done \ No newline at end of file +for dir in ./packages/*; do (cd "$dir" && yarn link); done +cd ./packages/account && yarn link '@biconomy/bundler' '@biconomy/modules' '@biconomy/paymaster' '@biconomy/common' \ No newline at end of file diff --git a/package.json b/package.json index 65f030a37..0939192fb 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,10 @@ "author": "Biconomy (https://biconomy.io)", "private": true, "scripts": { - "dev": "yarn rebuild && yarn install && yarn build && yarn link:all", + "dev": "yarn rebuild && yarn install && lerna run build && yarn link:all", "rebuild": "./rebuild.sh", "link:all": "./linkAll.sh", - "build": "lerna run build", + "build": "yarn rebuild && yarn install && lerna run build", "clean": "lerna clean && lerna run unbuild", "format": "lerna run format --npm-client=yarn", "prettier": "npx prettier --write .", @@ -40,6 +40,7 @@ "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", "test:coverage": "concurrently -k --success first 'yarn start:ganache' 'yarn jest --runInBand --coverage'", + "test:e2e": "yarn test:run --config=jest.config.e2e.ts", "diff": "lerna diff", "release": "lerna version patch --no-git-tag-version --no-push --conventional-commits --yes" }, @@ -56,13 +57,14 @@ }, "dependencies": { "node-gyp": "^9.4.0", - "typescript": "^5.2.2" + "typescript": "^5.3.3" }, "devDependencies": { "@types/debug": "^4.1.9", "@types/jest": "^29.5.4", "@typescript-eslint/eslint-plugin": "^6.7.0", "@typescript-eslint/parser": "^6.6.0", + "concurrently": "^8.2.2", "eslint": "^8.48.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-airbnb-typescript": "17.1.0", @@ -70,7 +72,7 @@ "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-security": "^1.7.1", - "ganache": "^7.9.1", + "ganache": "^7.9.2", "hardhat": "^2.17.3", "jest": "^29.7.0", "lerna": "^7.2.0", diff --git a/packages/account/.esbuild.js b/packages/account/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/account/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index f2f70fe1f..abff0df13 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -3,6 +3,40 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2023-02-06) + +### Features + +- Export bundler / paymaster instances + helpers from master package ([1d1f9d](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/1d1f9dafddf11bde0e1a75383bc935b22448bedd)) +- Export modules aliases from master package ([d6205c](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/d6205c4d76ab846ecdc10843c65e0277f3ceab00)) +- Added sendTransaction abstraction for buildUserOp + sendUserOp ([335c6e](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/335c6e7bfc5ca1ad240e7cbfd678d905c7f16812)) +- Reduced bundle size ([765a3e3](https://github.com/bcnmy/biconomy-client-sdk/commit/765a3e337fb9ad8f1f8dc92b5edcb1ed0940f94d)) +- Added bundler abstraction during SmartAccount init ([591bbb4](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/591bbb4e37774b16cbe801d583d31b3a14608bc1)) +- Added e2e tests that speak with prod bundler / paymasters ([4b4a53a](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/4b4a53aabdf9e22485599872332b3d63e8ddd87a)) +- Added support for simultaneous ethers + viem signers ([8e4b2c8](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/8e4b2c86b871130befbf3b733cf503d24f7226a5)) +- E2E tests for multichain modules ([ecc86e2](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/ecc86e2c7146046a981c3b6fd4bb29e4828b278b)) +- E2E tests for session validation modules ([4ad7ea7](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/4ad7ea7f8eb6a28854dcce83834b2b7ff9ad3287)) +- Added [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) ([638dae](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/638daee0ed6924f67c5151a2d0e5a02d32e4bf23)) +- Make txs more typesafe and default with valueOrData ([b1e5b5e](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b1e5b5e02ab3a7fb99faa1d45b55e3cbe8d6bc93)) +- Added createSmartAccountClient alias ([232472](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/232472c788bed0619cf6295ade076b6ec3a9e0f8)) +- Improve dx of using paymster to build userOps ([bb54888](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/bb548884e76a94a20329e49b18994503de9e3888)) +- Add ethers v6 signer support ([9727fd](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/9727fd51e47d62904399d17d48f5c9d6b9e591e5)) +- Improved dx of using gas payments with erc20 ([741806](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/741806da68457eba262e1a49be77fcc24360ba36)) + +### Chores + +- Removed SmartAccount Base class in favour of Alchemy's ([be82732](https://github.com/bcnmy/biconomy-client-sdk/commit/be827327fafa858b1551ade0c8389293034cacbb)) +- Migrate to viem v2 ([8ce04a](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/8ce04a56f6dcdfd1f44d9534f43e3c6eb8b3885d)) +- Remove common + core-types dependencies ([673514](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/6735141fbd21a855aadf69011bc06c69e20f811b)) +- Reincluded simulation flags ([25d2be](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/25d2bee339afd9d8c143fe6dad1898e28034be17)) + +### Bug Fixes + +- Make silently failing paymaster calls throw an error instead ([693bf0](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/693bf08591427c03e317d64d0491e23b1c96ea30)) +- Added string as a supported Transaction value type ([b905dc](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b905dcf3f7849396573fc8b51f808cc68061ee11)) +- Removed skipBundlerGasEstimation option ([b905dc](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b905dcf3f7849396573fc8b51f808cc68061ee11)) +- Ingest rpcUrl from SupportedSigners (ethers + viem) ([f56b4d](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/f56b4da08f47af577c01a641b81a3ef9e354cf97)) + ## 3.1.3 (2023-12-28) VERSION Bump Only. @@ -11,54 +45,44 @@ VERSION Bump Only. ### Features -* Make entryPointAddress optional in config([cf35c4a](https://github.com/bcnmy/biconomy-client-sdk/pull/336/commits/cf35c4a8266d27648035d8c9d63f1b9157553128)) +- Make entryPointAddress optional in config([cf35c4a](https://github.com/bcnmy/biconomy-client-sdk/pull/336/commits/cf35c4a8266d27648035d8c9d63f1b9157553128)) ### Bug Fixes -* use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) -* change receipt status type from boolean to string to be compatible with bundler response. ([317f986](https://github.com/bcnmy/biconomy-client-sdk/pull/342/commits/317f986b7e8f08d3ccf1e68f12a0696f1116de6b)) +- use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) +- change receipt status type from boolean to string to be compatible with bundler response. ([317f986](https://github.com/bcnmy/biconomy-client-sdk/pull/342/commits/317f986b7e8f08d3ccf1e68f12a0696f1116de6b)) ## 3.1.1 (2023-11-09) - ### Bug Fixes -* optimistic implementation for getNonce() and cache for isAccountDeployed ([5b1d4bf](https://github.com/bcnmy/biconomy-client-sdk/commit/5b1d4bfd7b5062d05bbb97286b833d879cd972b0)) - +- optimistic implementation for getNonce() and cache for isAccountDeployed ([5b1d4bf](https://github.com/bcnmy/biconomy-client-sdk/commit/5b1d4bfd7b5062d05bbb97286b833d879cd972b0)) ### Reverts -* update paymaster check in estimateUserOpGas ([2eb0237](https://github.com/bcnmy/biconomy-client-sdk/commit/2eb0237b37425da3558801bbe9d0ce5d6fd696c9)) - - - - +- update paymaster check in estimateUserOpGas ([2eb0237](https://github.com/bcnmy/biconomy-client-sdk/commit/2eb0237b37425da3558801bbe9d0ce5d6fd696c9)) ## 3.1.0 (2023-09-20) + Modular Account Abstraction is here. Contains BiconomySmartAccountV2 - an API for modular smart account. ### Bug Fixes -* add 10sec timeout limit for a test ([5d12fe7](https://github.com/bcnmy/biconomy-client-sdk/commit/5d12fe7d4b32e5c4628b971d22f6fc9cfcc6b414)) -* avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) -* BiconomySmartAccountV2 API Specs ([69a580e](https://github.com/bcnmy/biconomy-client-sdk/commit/69a580ea9e309141b500274aa95e20e24365b522)) -* build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) -* comments [#296](https://github.com/bcnmy/biconomy-client-sdk/issues/296) ([55b7376](https://github.com/bcnmy/biconomy-client-sdk/commit/55b7376336886226967b5bec5f11ba3ab750c5b6)) -* estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) -* gitInitCode cache issue ([4df3502](https://github.com/bcnmy/biconomy-client-sdk/commit/4df3502204e3c6c0c6faa90ba2c8aa0d6e826e48)) -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) - +- add 10sec timeout limit for a test ([5d12fe7](https://github.com/bcnmy/biconomy-client-sdk/commit/5d12fe7d4b32e5c4628b971d22f6fc9cfcc6b414)) +- avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) +- BiconomySmartAccountV2 API Specs ([69a580e](https://github.com/bcnmy/biconomy-client-sdk/commit/69a580ea9e309141b500274aa95e20e24365b522)) +- build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) +- comments [#296](https://github.com/bcnmy/biconomy-client-sdk/issues/296) ([55b7376](https://github.com/bcnmy/biconomy-client-sdk/commit/55b7376336886226967b5bec5f11ba3ab750c5b6)) +- estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) +- gitInitCode cache issue ([4df3502](https://github.com/bcnmy/biconomy-client-sdk/commit/4df3502204e3c6c0c6faa90ba2c8aa0d6e826e48)) +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +- unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) ### Features -* get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -* update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) - - - - +- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) ## 3.0.0 (2023-08-28) @@ -66,40 +90,27 @@ VERSION Bump Only. Modular SDK - consists stable version of below updates done in Alphas. - - ## 3.1.1-alpha.0 (2023-08-02) - ### Bug Fixes VERSION Bump Only. - - - - # 3.1.0-alpha.0 (2023-07-24) - ### Bug Fixes -* avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) - - - +- avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) ## 3.0.0-alpha.0 (2023-07-12) - ### Bug Fixes -* estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) -* unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) - +- estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) +- unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) ### Features -* get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -* update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) +- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) diff --git a/packages/account/Readme.md b/packages/account/Readme.md index fb8fc3959..0aa74954b 100644 --- a/packages/account/Readme.md +++ b/packages/account/Readme.md @@ -1,85 +1,138 @@ -# installation +# Biconomy SDK -Using `npm` package manager +![Biconomy SDK](https://img.shields.io/badge/Biconomy-SDK-blue.svg) +![TypeScript](https://img.shields.io/badge/-TypeScript-blue) +![Test Coverage](https://img.shields.io/badge/Coverage-79.82%25-green.svg) -```bash -npm i @biconomy/account -``` +## 👋 Introduction -OR +The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. It is designed for seamless user experiences and offers non-custodial solutions for user onboarding, sending transactions (userOps), gas sponsorship and much more. -Using `yarn` package manager +## ⚙️ installation ```bash -yarn add @biconomy/account +npm i @biconomy/account ``` -### Account +## 🛠️ Quickstart -Integrating and deploying Smart Accounts, building and sending user operations is a key offering of any toolkit designed for ERC4337. This package seamlessly integrates the essential features associated with ERC-4337 and simplifies the development of your Dapp's account and transaction rails with added usability features. +```typescript +import { createSmartAccountClient } from "@biconomy/account"; -The account package achieves this by providing a comprehensive set of methods that enable developers to effortlessly create UserOperations. Combined with the sophisticated, developer friendly and scalable infrastructure of Biconomy, it ensures efficient and reliable transmission of these operations across multiple EVM chains. +const smartAccount = await createSmartAccountClient({ + signer: viemWalletOrEthersSigner, + bundlerUrl: "", // From dashboard.biconomy.io + biconomyPaymasterApiKey: "", // From dashboard.biconomy.io +}); -## Smart Account instance configuration +const { wait } = await smartAccount.sendTransaction({ to: "0x...", value: 1 }); -#### BiconomySmartAccount (V1 Smart Account) +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); +``` -| Key | Description | -| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| signer | This signer will be used for signing userOps for any transactions you build. You can supply your your EOA wallet signer | -| chainId | This represents the network your smart wallet transactions will be conducted on. Take a look following Link for supported chain id's | -| rpcUrl | This represents the EVM node RPC URL you'll interact with, adjustable according to your needs. We recommend to use some private node url for efficient userOp building | -| paymaster | you can pass same paymaster instance that you have build in previous step. Alternatively, you can skip this if you are not interested in sponsoring transaction using paymaster | -| | Note: if you don't pass the paymaster instance, your smart account will need funds to pay for transaction fees. | -| bundler | You can pass same bundler instance that you have build in previous step. Alternatively, you can skip this if you are only interested in building userOP | +## 🌟 Features -## Example Usage +- **ERC4337 Account Abstraction**: Simplify user operations and gas payments. +- **Smart Accounts**: Enhance user experience with modular smart accounts. +- **Paymaster Service**: Enable third-party gas sponsorship. +- **Bundler Infrastructure**: Ensure efficient and reliable transaction bundling. -```typescript -// This is how you create BiconomySmartAccount instance in your dapp's +For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick start [here](https://docs.biconomy.io/quickstart). -import { BiconomySmartAccount, BiconomySmartAccountConfig } from "@biconomy/account"; +## 📚 Resources -// Note that paymaster and bundler are optional. You can choose to create new instances of this later and make account API use -const biconomySmartAccountConfig: BiconomySmartAccountConfig = { - signer: wallet.getSigner(), - chainId: ChainId.POLYGON_MAINNET, - rpcUrl: "", - // paymaster: paymaster, // check the README.md section of Paymaster package - // bundler: bundler, // check the README.md section of Bundler package -}; +- [Biconomy Documentation](https://docs.biconomy.io/) +- [Biconomy Dashboard](https://dashboard.biconomy.io) +- [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) -const biconomyAccount = new BiconomySmartAccount(biconomySmartAccountConfig); -const biconomySmartAccount = await biconomyAccount.init(); +## 💼 Example Usages -// native token transfer -// you can create any sort of transaction following same structure -const transaction = { - to: "0x85B51B068bF0fefFEFD817882a14f6F5BDF7fF2E", - data: "0x", - value: ethers.utils.parseEther("0.1"), -}; +### [Initialise the smartAccount](https://bcnmy.github.io/biconomy-client-sdk/functions/createSmartAccountClient.html) -// building partialUserOp -const partialUserOp = await biconomySmartAccount.buildUserOp([transaction]); +| Key | Description | +| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| [signer](https://bcnmy.github.io/biconomy-client-sdk/packages/account/docs/interfaces/SmartAccountSigner.html) | This signer will be used for signing userOps for any transactions you build. Will accept ethers.JsonRpcSigner as well as a viemWallet | +| [biconomyPaymasterApiKey](https://dashboard.biconomy.io) | You can pass in a biconomyPaymasterApiKey necessary for sponsoring transactions (retrieved from the biconomy dashboard) | +| [bundlerUrl](https://dashboard.biconomy.io) | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | -// using the paymaster package one can populate paymasterAndData to partial userOp. by default it is '0x' +```typescript +import { createSmartAccountClient } from "@biconomy/account"; +import { createWalletClient, http, createPublicClient } from "viem"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { mainnet as chain } from "viem/chains"; + +const account = privateKeyToAccount(generatePrivateKey()); +const signer = createWalletClient({ account, chain, transport: http() }); + +const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, +}); ``` +### [Send some ETH, have gas sponsored](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#sendTransaction) + +| Key | Description | +| --------------------------------------------------------------------------------- | -------------------------------------------------------------- | +| [oneOrManyTx](https://bcnmy.github.io/biconomy-client-sdk/types/Transaction.html) | Submit multiple or one transactions | +| [userOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/types/UserOpReceipt) | Returned information about your tx, receipts, userOpHashes etc | + ```typescript -const userOpResponse = await smartAccount.sendUserOp(partialUserOp); -const transactionDetails = await userOpResponse.wait(); -console.log("transaction details below"); -console.log(transactionDetails); +const oneOrManyTx = { to: "0x...", value: 1 }; + +const { wait } = await smartAccount.sendTransaction(oneOrManyTx, { + mode: PaymasterMode.SPONSORED, +}); + +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); ``` -Finally we send the userOp and save the value to a variable named userOpResponse and get the transactionDetails after calling `typescript userOpResponse.wait()` +### [Mint two NFTs, pay gas with token](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#getTokenFees) + +| Key | Description | +| -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| [buildUseropDto](https://bcnmy.github.io/biconomy-client-sdk/types/BuildUserOpOptions.html) | Options for building a userOp | +| [paymasterServiceData](https://bcnmy.github.io/biconomy-client-sdk/types/PaymasterUserOperationDto.html) | PaymasterOptions set in the buildUseropDto | ```typescript -const transactionDetails = await userOpResponse.wait(); -console.log("transaction details below"); -console.log(transactionDetails); +import { encodeFunctionData, parseAbi } from "viem"; + +const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: ["0x..."], +}); + +const tx = { + to: nftAddress, + data: encodedCall, +}; +const oneOrManyTx = [tx, tx]; // Mint twice +const paymasterServiceData = { + mode: PaymasterMode.ERC20, + preferredToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC +}; +const buildUseropDto = { paymasterServiceData }; + +const { wait } = await smartAccount.sendTransaction(oneOrManyTx, buildUseropDto); + +const { + receipt: { transactionHash }, + userOpHash, +} = await wait(); ``` -#### BiconomySmartAccount (V2 Smart Account aka Modular Smart Account) +## 🤝 Contributing + +Community contributions are welcome! For guidelines on contributing, please read our [contribution guidelines](./CONTRIBUTING.md). + +## 📜 License +This project is licensed under the MIT License. See the [LICENSE.md](./LICENSE.md) file for details. diff --git a/packages/account/package.json b/packages/account/package.json index 1dfa29482..07844719d 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,9 +1,19 @@ { "name": "@biconomy/account", - "version": "3.1.3", + "version": "4.0.0", "description": "This package provides apis for ERC-4337 based smart account implementations", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "keywords": [ "Ethereum", "Smart Account", @@ -14,17 +24,28 @@ "SDK" ], "scripts": { + "docs": "typedoc", "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "test:concurrently": "concurrently -k --success first 'yarn start:ganache' 'yarn test'", "test:cov": "jest --coverage", "test": "jest tests/**/*.spec.ts --runInBand", "test:run": "yarn test:concurrently", "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" + "lint": "tslint -p tsconfig.json", + "docs:deploy": "yarn docs && gh-pages -d docs" }, - "author": "talhamalik883 ", + "author": "Biconomy", "license": "MIT", "files": [ "dist/*", @@ -34,24 +55,21 @@ "access": "public" }, "devDependencies": { + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "gh-pages": "^6.1.1", "nock": "^13.2.9", - "viem": "^1.19.11" + "npm-dts": "^1.3.12", + "typedoc": "^0.25.7", + "lru-cache": "^10.0.1" }, "dependencies": { - "@account-abstraction/contracts": "^0.6.0", - "@account-abstraction/utils": "^0.4.0", - "@alchemy/aa-core": "^1.2.2", - "@biconomy-devx/account-contracts-v2": "npm:@biconomy-devx/account-contracts-v2@^1.0.0", - "@biconomy/bundler": "^3.1.3", - "@biconomy/common": "^3.1.3", - "@biconomy/core-types": "^3.1.3", - "@biconomy/modules": "^3.1.3", - "@biconomy/node-client": "^3.1.3", - "@biconomy/paymaster": "^3.1.3", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "ethers": "^5.7.0", - "loglevel": "^1.8.1", - "lru-cache": "^10.0.1" + "@alchemy/aa-core": "3.0.0-alpha.4", + "@biconomy/bundler": "4.0.0", + "@biconomy/common": "4.0.0", + "@biconomy/modules": "4.0.0", + "@biconomy/paymaster": "4.0.0", + "viem": "^2.7.3" } } diff --git a/packages/account/src/BaseSmartAccount.ts b/packages/account/src/BaseSmartAccount.ts deleted file mode 100644 index 90bb0ecff..000000000 --- a/packages/account/src/BaseSmartAccount.ts +++ /dev/null @@ -1,481 +0,0 @@ -import { JsonRpcProvider, Provider } from "@ethersproject/providers"; -import { BigNumber, BigNumberish, BytesLike, ethers, Bytes } from "ethers"; -import { IBaseSmartAccount } from "./interfaces/IBaseSmartAccount"; -import { defaultAbiCoder, keccak256 } from "ethers/lib/utils"; -import { UserOperation, ChainId } from "@biconomy/core-types"; -import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; -import { NotPromise, packUserOp, Logger, RPC_PROVIDER_URLS, isNullOrUndefined } from "@biconomy/common"; -import { Bundler, IBundler, UserOpResponse } from "@biconomy/bundler"; -import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; -import { SendUserOpParams } from "@biconomy/modules"; -import { SponsorUserOperationDto, BiconomyPaymaster, PaymasterMode, IHybridPaymaster } from "@biconomy/paymaster"; -import { BaseSmartAccountConfig, EstimateUserOpGasParams, TransactionDetailsForUserOp } from "./utils/Types"; -import { GasOverheads } from "./utils/Preverificaiton"; -import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { DEFAULT_ENTRYPOINT_ADDRESS, DefaultGasLimit } from "./utils/Constants"; -import { LRUCache } from "lru-cache"; - -type UserOperationKey = keyof UserOperation; - -export abstract class BaseSmartAccount implements IBaseSmartAccount { - bundler?: IBundler; // httpRpcClient - - paymaster?: IPaymaster; // paymasterAPI - - overheads?: Partial; - - entryPointAddress!: string; - - accountAddress?: string; - - // owner?: Signer // owner is not mandatory for some account implementations - index: number; - - chainId?: ChainId; - - provider: Provider; - - // entryPoint connected to "zero" address. allowed to make static calls (e.g. to getSenderAddress) - private readonly entryPoint!: EntryPoint; - - private isContractDeployedCache = new LRUCache({ - max: 500, - }); - - constructor(_smartAccountConfig: BaseSmartAccountConfig) { - this.index = _smartAccountConfig.index ?? 0; - this.overheads = _smartAccountConfig.overheads; - this.entryPointAddress = _smartAccountConfig.entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS; - this.accountAddress = _smartAccountConfig.accountAddress; - - this.chainId = _smartAccountConfig.chainId; - - if (_smartAccountConfig.bundlerUrl) { - this.bundler = new Bundler({ - bundlerUrl: _smartAccountConfig.bundlerUrl, - chainId: _smartAccountConfig.chainId, - }); - } else { - this.bundler = _smartAccountConfig.bundler; - } - - if (_smartAccountConfig.paymaster) { - this.paymaster = _smartAccountConfig.paymaster; - } - - this.provider = _smartAccountConfig.provider ?? new JsonRpcProvider(RPC_PROVIDER_URLS[this.chainId]); - - // Create an instance of the EntryPoint contract using the provided address and provider (facory "connect" contract address) - // Then, set the transaction's sender ("from" address) to the zero address (AddressZero). (contract "connect" from address) - this.entryPoint = EntryPoint__factory.connect(this.entryPointAddress, this.provider).connect(ethers.constants.AddressZero); - } - - async init(): Promise { - if (this.entryPointAddress === DEFAULT_ENTRYPOINT_ADDRESS) return this; - if ((await this.provider.getCode(this.entryPointAddress)) === "0x") { - throw new Error(`EntryPoint not deployed at ${this.entryPointAddress} at chainId ${this.chainId}}`); - } - return this; - } - - setEntryPointAddress(entryPointAddress: string): void { - this.entryPointAddress = entryPointAddress; - } - - validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { - for (const field of requiredFields) { - if (isNullOrUndefined(userOp[field])) { - throw new Error(`${String(field)} is missing in the UserOp`); - } - } - return true; - } - - isProviderDefined(): boolean { - if (!this.provider) throw new Error("Provider is undefined"); - - return true; - } - - /** - * return the value to put into the "initCode" field, if the contract is not yet deployed. - * this value holds the "factory" address, followed by this account's information - */ - abstract getAccountInitCode(): Promise; - - /** - * return current account's nonce. - */ - abstract getNonce(): Promise; - - /** - * encode the call from entryPoint through our account to the target contract. - * @param to - * @param value - * @param data - */ - abstract encodeExecute(_to: string, _value: BigNumberish, _data: BytesLike): Promise; - - /** - * encode the batch call from entryPoint through our account to the target contract. - * @param to - * @param value - * @param data - */ - abstract encodeExecuteBatch(_to: Array, _value: Array, _data: Array): Promise; - - /** - * sign a userOp's hash (userOpHash). - * @param userOpHash - */ - abstract signUserOpHash(_userOpHash: string): Promise; - - abstract signMessage(_message: Bytes | string): Promise; - - /** - * get dummy signature for userOp - */ - abstract getDummySignature(): Promise; - - /** - * Sign the filled userOp. - * @param userOp the UserOperation to sign (with signature field ignored) - */ - async signUserOp(userOp: Partial): Promise { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - ]; - this.validateUserOp(userOp, requiredFields); - const userOpHash = await this.getUserOpHash(userOp); - let signature = await this.signUserOpHash(userOpHash); - - // Some signers do not return signed data with 0x prefix. make sure the v value is 27/28 instead of 0/1 - // Also split sig and add +27 to v is v is only 0/1. then stitch it back - - // Note: Should only be applied for ECDSA k1 signatures - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); - } - if (signature.slice(0, 2) !== "0x") { - signature = "0x" + signature; - } - - userOp.signature = signature; - return userOp as UserOperation; - } - - /** - * - * @param userOp - * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. - * @returns Promise - */ - async sendUserOp(userOp: Partial): Promise { - Logger.log("userOp received in base account ", userOp); - delete userOp.signature; - const userOperation = await this.signUserOp(userOp); - const bundlerResponse = await this.sendSignedUserOp(userOperation); - return bundlerResponse; - } - - /** - * - * @param userOp - * @description This function call will take 'signedUserOp' as input and send it to the bundler - * @returns - */ - async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpParams): Promise { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - "signature", - ]; - this.validateUserOp(userOp, requiredFields); - Logger.log("userOp validated"); - if (!this.bundler) throw new Error("Bundler is not provided"); - Logger.log("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp, params?.simulationType); - return bundlerResponse; - } - - async calculateUserOpGasValues(userOp: Partial): Promise> { - if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - let feeData = null; - - if ( - userOp.maxFeePerGas === undefined || - userOp.maxFeePerGas === null || - userOp.maxPriorityFeePerGas === undefined || - userOp.maxPriorityFeePerGas === null - ) { - feeData = await this.provider.getFeeData(); - } - - if (userOp.maxFeePerGas === undefined || userOp.maxFeePerGas === null) { - userOp.maxFeePerGas = feeData?.maxFeePerGas ?? feeData?.gasPrice ?? (await this.provider.getGasPrice()); - } - - if (userOp.maxPriorityFeePerGas === undefined || userOp.maxPriorityFeePerGas === null) { - userOp.maxPriorityFeePerGas = feeData?.maxPriorityFeePerGas ?? feeData?.gasPrice ?? (await this.provider.getGasPrice()); - } - if (userOp.initCode) userOp.verificationGasLimit = userOp.verificationGasLimit ?? (await this.getVerificationGasLimit(userOp.initCode)); - userOp.callGasLimit = - userOp.callGasLimit ?? - (await this.provider.estimateGas({ - from: this.entryPointAddress, - to: userOp.sender, - data: userOp.callData, - })); - userOp.preVerificationGas = userOp.preVerificationGas ?? (await this.getPreVerificationGas(userOp)); - return userOp; - } - - async estimateUserOpGas(params: EstimateUserOpGasParams): Promise> { - let userOp = params.userOp; - const { overrides, skipBundlerGasEstimation, paymasterServiceData } = params; - const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; - this.validateUserOp(userOp, requiredFields); - - let finalUserOp = userOp; - const skipBundlerCall = skipBundlerGasEstimation ?? true; - // Override gas values in userOp if provided in overrides params - if (overrides) { - userOp = { ...userOp, ...overrides }; - } - - Logger.log("userOp in estimation", userOp); - - if (skipBundlerCall) { - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { - if (isNullOrUndefined(userOp.maxFeePerGas) || isNullOrUndefined(userOp.maxPriorityFeePerGas)) { - throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); - } - if (paymasterServiceData?.mode === PaymasterMode.SPONSORED) { - // Making call to paymaster to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( - this.paymaster as IHybridPaymaster - ).getPaymasterAndData(userOp, paymasterServiceData); - if (paymasterAndData === "0x" && (callGasLimit === undefined || verificationGasLimit === undefined || preVerificationGas === undefined)) { - throw new Error("Since you intend to use sponsorship paymaster, please check and make sure policies are set on the dashboard"); - } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; - } else { - // use dummy values for gas limits as fee quote call will ignore this later. - finalUserOp.callGasLimit = DefaultGasLimit.callGasLimit; - finalUserOp.verificationGasLimit = DefaultGasLimit.verificationGasLimit; - finalUserOp.preVerificationGas = DefaultGasLimit.preVerificationGas; - } - } else { - { - Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); - finalUserOp = await this.calculateUserOpGasValues(userOp); - finalUserOp.paymasterAndData = "0x"; - } - } - } else { - if (!this.bundler) throw new Error("Bundler is not provided"); - delete userOp.maxFeePerGas; - delete userOp.maxPriorityFeePerGas; - // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = - await this.bundler.estimateUserOpGas(userOp); - // if neither user sent gas fee nor the bundler, estimate gas from provider - if ( - isNullOrUndefined(userOp.maxFeePerGas) && - isNullOrUndefined(userOp.maxPriorityFeePerGas) && - (isNullOrUndefined(maxFeePerGas) || isNullOrUndefined(maxPriorityFeePerGas)) - ) { - const feeData = await this.provider.getFeeData(); - finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - } else { - finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; - finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; - } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = "0x"; - } - return finalUserOp; - } - - // Would only be used if paymaster is attached - async getPaymasterAndData(userOp: Partial): Promise { - if (this.paymaster) { - const paymasterAndDataResponse: PaymasterAndDataResponse = await this.paymaster.getPaymasterAndData(userOp); - return paymasterAndDataResponse.paymasterAndData; - } - return "0x"; - } - - async isAccountDeployed(address: string): Promise { - if (this.isContractDeployedCache.get(address)) { - return true; - } - - this.isProviderDefined(); - let isDeployed = false; - const contractCode = await this.provider.getCode(address); - if (contractCode.length > 2) { - this.isContractDeployedCache.set(address, true); - isDeployed = true; - } else { - isDeployed = false; - } - return isDeployed; - } - - /** - * calculate the account address even before it is deployed - */ - async getCounterFactualAddress(): Promise { - const initCode = this.getAccountInitCode(); - // use entryPoint to query account address (factory can provide a helper method to do the same, but - // this method attempts to be generic - try { - await this.entryPoint.callStatic.getSenderAddress(initCode); - } catch (e: any) { - if (e.errorArgs == null) { - throw e; - } - return e.errorArgs.sender; - } - throw new Error("must handle revert"); - } - - /** - * return initCode value to into the UserOp. - * (either deployment code, or empty hex if contract already deployed) - */ - async getInitCode(): Promise { - if (await this.isAccountDeployed(await this.getAccountAddress())) { - return "0x"; - } - return this.getAccountInitCode(); - } - - async getPreVerificationGas(userOp: Partial): Promise { - return calcPreVerificationGas(userOp); - } - - async getVerificationGasLimit(initCode: BytesLike): Promise { - // Verification gas should be max(initGas(wallet deployment) + validateUserOp + validatePaymasterUserOp , postOp) - - const initGas = await this.estimateCreationGas(initCode as string); - const validateUserOpGas = BigNumber.from(DefaultGasLimits.validatePaymasterUserOpGas + DefaultGasLimits.validateUserOpGas); - const postOpGas = BigNumber.from(DefaultGasLimits.postOpGas); - - let verificationGasLimit = BigNumber.from(validateUserOpGas).add(initGas); - - if (BigNumber.from(postOpGas).gt(verificationGasLimit)) { - verificationGasLimit = postOpGas; - } - return verificationGasLimit; - } - - /** - * return the account's address. - * this value is valid even before deploying the contract. - */ - async getAccountAddress(): Promise { - if (this.accountAddress == null) { - // means it needs deployment - this.accountAddress = await this.getCounterFactualAddress(); - } - return this.accountAddress; - } - - async estimateCreationGas(initCode?: string): Promise { - if (initCode == null || initCode === "0x") return 0; - const deployerAddress = initCode.substring(0, 42); - const deployerCallData = "0x" + initCode.substring(42); - return this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }); - } - - /** - * get the transaction that has this userOpHash mined, or null if not found - * @param userOpHash returned by sendUserOpToBundler (or by getUserOpHash..) - * @param timeout stop waiting after this timeout - * @param interval time to wait between polls. - * @return the transactionHash this userOp was mined, or null if not found. - */ - async getUserOpReceipt(userOpHash: string, timeout = 30000, interval = 5000): Promise { - const endtime = Date.now() + timeout; - while (Date.now() < endtime) { - const events = await this.entryPoint.queryFilter(this.entryPoint.filters.UserOperationEvent(userOpHash)); - if (events.length > 0) { - return events[0].transactionHash; - } - await new Promise((resolve) => setTimeout(resolve, interval)); - } - return null; - } - - async getUserOpHash(userOp: Partial): Promise { - const userOpHash = keccak256(packUserOp(userOp, true)); - const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, this.entryPoint.address, this.chainId]); - return keccak256(enc); - } - - /** - * ABI-encode a user operation. used for calldata cost estimation - */ - packUserOp(userOp: NotPromise): string { - return packUserOp(userOp, false); - } - - async encodeUserOpCallDataAndGasLimit(detailsForUserOp: TransactionDetailsForUserOp): Promise<{ callData: string; callGasLimit: BigNumber }> { - function parseNumber(a: any): BigNumber | null { - if (a == null || a === "") return null; - return BigNumber.from(a.toString()); - } - - const value = parseNumber(detailsForUserOp.value) ?? BigNumber.from(0); - const callData = await this.encodeExecute(detailsForUserOp.target, value, detailsForUserOp.data); - - const callGasLimit = - parseNumber(detailsForUserOp.gasLimit) ?? - (await this.provider.estimateGas({ - from: this.entryPointAddress, - to: this.getAccountAddress(), - data: callData, - })); - - return { - callData, - callGasLimit, - }; - } - - /** - * helper method: create and sign a user operation. - * @param info transaction details for the userOp - */ - async createSignedUserOp(info: TransactionDetailsForUserOp): Promise { - Logger.log("createSignedUserOp called with info", info); - throw new Error("Not implemented. Please use buildUserOp/buildUserOperation in account implementation"); - } -} diff --git a/packages/account/src/BiconomySmartAccount.ts b/packages/account/src/BiconomySmartAccount.ts deleted file mode 100644 index 3307856b7..000000000 --- a/packages/account/src/BiconomySmartAccount.ts +++ /dev/null @@ -1,544 +0,0 @@ -import { JsonRpcProvider } from "@ethersproject/providers"; -import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; -import { SmartAccount } from "./SmartAccount"; -import { - Logger, - NODE_CLIENT_URL, - RPC_PROVIDER_URLS, - SmartAccountFactory_v100, - SmartAccount_v200, - getEntryPointContract, - getSAFactoryContract, - getSAProxyContract, - isNullOrUndefined, -} from "@biconomy/common"; -import { BiconomySmartAccountConfig, Overrides, BiconomyTokenPaymasterRequest, InitilizationData } from "./utils/Types"; -import { UserOperation, Transaction, SmartAccountType } from "@biconomy/core-types"; -import NodeClient from "@biconomy/node-client"; -import INodeClient from "@biconomy/node-client"; -import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; -import { IBiconomySmartAccount } from "./interfaces/IBiconomySmartAccount"; -import { - ISmartAccount, - SupportedChainsResponse, - BalancesResponse, - BalancesDto, - UsdBalanceResponse, - SmartAccountByOwnerDto, - SmartAccountsResponse, - SCWTransactionResponse, -} from "@biconomy/node-client"; -import { - ENTRYPOINT_ADDRESSES, - BICONOMY_FACTORY_ADDRESSES, - BICONOMY_IMPLEMENTATION_ADDRESSES, - DEFAULT_ENTRYPOINT_ADDRESS, - DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS, - BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, -} from "./utils/Constants"; -import { Signer } from "ethers"; - -export class BiconomySmartAccount extends SmartAccount implements IBiconomySmartAccount { - private factory!: SmartAccountFactory_v100; - - private nodeClient: INodeClient; - - private accountIndex!: number; - - private address!: string; - - private smartAccountInfo!: ISmartAccount; - - private _isInitialised!: boolean; - - constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountConfig) { - const { signer, rpcUrl, entryPointAddress, bundler, paymaster, chainId, nodeClientUrl } = biconomySmartAccountConfig; - - const _entryPointAddress = entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS; - super({ - bundler, - entryPointAddress: _entryPointAddress, - }); - const _rpcUrl = rpcUrl ?? RPC_PROVIDER_URLS[chainId]; - - if (!_rpcUrl) { - throw new Error( - `Chain Id ${chainId} is not supported. Please refer to the following link for supported chains list https://docs.biconomy.io/build-with-biconomy-sdk/gasless-transactions#supported-chains`, - ); - } - this.provider = new JsonRpcProvider(_rpcUrl); - this.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); - this.signer = signer; - - if (paymaster) { - this.paymaster = paymaster; - } - if (bundler) this.bundler = bundler; - } - - /** - * @description This function will initialise BiconomyAccount class state - * @returns Promise - */ - async init(initilizationData?: InitilizationData): Promise { - try { - let _accountIndex, signerAddress; - if (initilizationData) { - _accountIndex = initilizationData.accountIndex; - signerAddress = initilizationData.signerAddress; - } - - if (!_accountIndex) _accountIndex = 0; - this.isProviderDefined(); - this.isSignerDefined(); - - if (signerAddress) { - this.owner = signerAddress; - } else { - this.owner = await this.signer.getAddress(); - } - this.chainId = await this.provider.getNetwork().then((net) => net.chainId); - await this.initializeAccountAtIndex(_accountIndex); - this._isInitialised = true; - } catch (error) { - Logger.error(`Failed to call init: ${error}`); - throw error; - } - - return this; - } - - async attachSigner(_signer: Signer): Promise { - try { - this.signer = _signer; - this.owner = await this.signer.getAddress(); - } catch (error) { - throw new Error(`Failed to get signer address`); - } - } - - private isInitialized(): boolean { - if (!this._isInitialised) - throw new Error( - "BiconomySmartAccount is not initialized. Please call init() on BiconomySmartAccount instance before interacting with any other function", - ); - return true; - } - - private setProxyContractState(): void { - if (!BICONOMY_IMPLEMENTATION_ADDRESSES[this.smartAccountInfo.implementationAddress]) - throw new Error( - "Could not find attached implementation address against your smart account. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - const proxyInstanceDto = { - smartAccountType: SmartAccountType.BICONOMY, - version: BICONOMY_IMPLEMENTATION_ADDRESSES[this.smartAccountInfo.implementationAddress], - contractAddress: this.address, - provider: this.provider, - }; - this.proxy = getSAProxyContract(proxyInstanceDto); - } - - private setEntryPointContractState(): void { - const _entryPointAddress = this.smartAccountInfo.entryPointAddress; - this.setEntryPointAddress(_entryPointAddress); - if (!ENTRYPOINT_ADDRESSES[_entryPointAddress]) - throw new Error( - "Could not find attached entrypoint address against your smart account. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - const entryPointInstanceDto = { - smartAccountType: SmartAccountType.BICONOMY, - version: ENTRYPOINT_ADDRESSES[_entryPointAddress], - contractAddress: _entryPointAddress, - provider: this.provider, - }; - this.entryPoint = getEntryPointContract(entryPointInstanceDto); - } - - private setFactoryContractState(): void { - const _factoryAddress = this.smartAccountInfo.factoryAddress; - if (!BICONOMY_FACTORY_ADDRESSES[_factoryAddress]) - throw new Error( - "Could not find attached factory address against your smart account. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - const factoryInstanceDto = { - smartAccountType: SmartAccountType.BICONOMY, - version: BICONOMY_FACTORY_ADDRESSES[_factoryAddress], - contractAddress: _factoryAddress, - provider: this.provider, - }; - this.factory = getSAFactoryContract(factoryInstanceDto) as SmartAccountFactory_v100; - } - - private async setContractsState(): Promise { - this.setProxyContractState(); - this.setEntryPointContractState(); - this.setFactoryContractState(); - } - - async initializeAccountAtIndex(accountIndex: number): Promise { - this.accountIndex = accountIndex; - this.address = await this.getSmartAccountAddress(accountIndex); - await this.setContractsState(); - await this.setInitCode(this.accountIndex); - } - - async getSmartAccountAddress(accountIndex = 0): Promise { - try { - this.isSignerDefined(); - let smartAccountsList: ISmartAccount[] = ( - await this.getSmartAccountsByOwner({ - chainId: this.chainId, - owner: this.owner, - index: accountIndex, - }) - ).data; - if (!smartAccountsList) - throw new Error( - "Failed to get smart account address. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - smartAccountsList = smartAccountsList.filter((smartAccount: ISmartAccount) => { - return accountIndex === smartAccount.index; - }); - if (smartAccountsList.length === 0) - throw new Error( - "Failed to get smart account address. Please raise an issue on https://github.com/bcnmy/biconomy-client-sdk for further investigation.", - ); - this.smartAccountInfo = smartAccountsList[0]; - return this.smartAccountInfo.smartAccountAddress; - } catch (error) { - Logger.error(`Failed to get smart account address: ${error}`); - throw error; - } - } - - private async setInitCode(accountIndex = 0): Promise { - this.initCode = ethers.utils.hexConcat([ - this.factory.address, - this.factory.interface.encodeFunctionData("deployCounterFactualAccount", [this.owner, ethers.BigNumber.from(accountIndex)]), - ]); - return this.initCode; - } - - /** - * @description an overrided function to showcase overriding example - * @returns - */ - nonce(): Promise { - this.isProxyDefined(); - return this.proxy.nonce(); - } - - /** - * - * @param to { target } address of transaction - * @param value represents amount of native tokens - * @param data represent data associated with transaction - * @returns - */ - getExecuteCallData(to: string, value: BigNumberish, data: BytesLike): string { - this.isInitialized(); - this.isProxyDefined(); - const executeCallData = this.proxy.interface.encodeFunctionData("executeCall", [to, value, data]); - return executeCallData; - } - - /** - * - * @param to { target } array of addresses in transaction - * @param value represents array of amount of native tokens associated with each transaction - * @param data represent array of data associated with each transaction - * @returns - */ - getExecuteBatchCallData(to: Array, value: Array, data: Array): string { - this.isInitialized(); - this.isProxyDefined(); - const executeBatchCallData = this.proxy.interface.encodeFunctionData("executeBatchCall", [to, value, data]); - return executeBatchCallData; - } - - getDummySignature(): string { - return "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; - } - - getDummyPaymasterData(): string { - return "0x"; - } - - private async getNonce(): Promise { - let nonce = BigNumber.from(0); - try { - nonce = await this.nonce(); - } catch (error) { - // Not throwing this error as nonce would be 0 if this.nonce() throw exception, which is expected flow for undeployed account - Logger.log("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); - } - return nonce; - } - - private async getGasFeeValues( - overrides: Overrides | undefined, - skipBundlerGasEstimation: boolean | undefined, - ): Promise<{ maxFeePerGas?: BigNumberish | undefined; maxPriorityFeePerGas?: BigNumberish | undefined }> { - const gasFeeValues = { - maxFeePerGas: overrides?.maxFeePerGas, - maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas, - }; - try { - if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (skipBundlerGasEstimation ?? true)) { - const gasFeeEstimation = await this.bundler.getGasFeeValues(); - gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; - gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; - } - return gasFeeValues; - } catch (error: any) { - Logger.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); - return gasFeeValues; - } - } - - async buildUserOp( - transactions: Transaction[], - overrides?: Overrides, - skipBundlerGasEstimation?: boolean, - paymasterServiceData?: SponsorUserOperationDto, - ): Promise> { - this.isInitialized(); - const to = transactions.map((element: Transaction) => element.to); - const data = transactions.map((element: Transaction) => element.data ?? "0x"); - const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); - this.isProxyDefined(); - - const [nonce, gasFeeValues] = await Promise.all([this.getNonce(), this.getGasFeeValues(overrides, skipBundlerGasEstimation)]); - - let callData = ""; - if (transactions.length === 1) { - callData = this.getExecuteCallData(to[0], value[0], data[0]); - } else { - callData = this.getExecuteBatchCallData(to, value, data); - } - - let isDeployed = true; - - if (nonce.eq(0)) { - isDeployed = await this.isAccountDeployed(this.address); - } - - let userOp: Partial = { - sender: this.address, - nonce, - initCode: !isDeployed ? this.initCode : "0x", - callData: callData, - maxFeePerGas: gasFeeValues.maxFeePerGas || undefined, - maxPriorityFeePerGas: gasFeeValues.maxPriorityFeePerGas || undefined, - signature: this.getDummySignature(), - }; - - // Note: Can change the default behaviour of calling estimations using bundler/local - userOp = await this.estimateUserOpGas({ userOp, overrides, skipBundlerGasEstimation, paymasterServiceData }); - userOp.paymasterAndData = userOp.paymasterAndData ?? "0x"; - Logger.log("UserOp after estimation ", userOp); - - return userOp; - } - - private validateUserOpAndRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { - if (isNullOrUndefined(userOp.callData)) { - throw new Error("Userop callData cannot be undefined"); - } - - const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress; - Logger.log("requested fee token is ", feeTokenAddress); - - if (!feeTokenAddress || feeTokenAddress == ethers.constants.AddressZero) { - throw new Error("Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest"); - } - - const spender = tokenPaymasterRequest?.spender; - Logger.log("fee token approval to be checked and added for spender: ", spender); - - if (!spender || spender == ethers.constants.AddressZero) { - throw new Error("Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest"); - } - } - - /** - * - * @param userOp partial user operation without signature and paymasterAndData - * @param tokenPaymasterRequest This dto provides information about fee quote. Fee quote is received from earlier request getFeeQuotesOrData() to the Biconomy paymaster. - * maxFee and token decimals from the quote, along with the spender is required to append approval transaction. - * @notice This method should be called when gas is paid in ERC20 token using TokenPaymaster - * @description Optional method to update the userOp.calldata with batched transaction which approves the paymaster spender with necessary amount(if required) - * @returns updated userOp with new callData, callGasLimit - */ - async buildTokenPaymasterUserOp( - userOp: Partial, - tokenPaymasterRequest: BiconomyTokenPaymasterRequest, - ): Promise> { - this.validateUserOpAndRequest(userOp, tokenPaymasterRequest); - try { - let batchTo: Array = []; - let batchValue: Array = []; - let batchData: Array = []; - - let newCallData = userOp.callData; - Logger.log("received information about fee token address and quote ", tokenPaymasterRequest); - - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { - // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details - - // Review: might request this form of an array of Transaction - const approvalRequest: Transaction = await (this.paymaster as IHybridPaymaster).buildTokenApprovalTransaction( - tokenPaymasterRequest, - this.provider, - ); - Logger.log("approvalRequest is for erc20 token ", approvalRequest.to); - - if (approvalRequest.data == "0x" || approvalRequest.to == ethers.constants.AddressZero) { - return userOp; - } - - if (isNullOrUndefined(userOp.callData)) { - throw new Error("Userop callData cannot be undefined"); - } - - const decodedDataSmartWallet = this.proxy.interface.parseTransaction({ - data: userOp.callData!.toString(), - }); - if (!decodedDataSmartWallet) { - throw new Error("Could not parse call data of smart wallet for userOp"); - } - - const smartWalletExecFunctionName = decodedDataSmartWallet.name; - - if (smartWalletExecFunctionName === "executeCall") { - Logger.log("originally an executeCall for Biconomy Account"); - const methodArgsSmartWalletExecuteCall = decodedDataSmartWallet.args; - const toOriginal = methodArgsSmartWalletExecuteCall[0]; - const valueOriginal = methodArgsSmartWalletExecuteCall[1]; - const dataOriginal = methodArgsSmartWalletExecuteCall[2]; - - batchTo.push(toOriginal); - batchValue.push(valueOriginal); - batchData.push(dataOriginal); - } else if (smartWalletExecFunctionName === "executeBatchCall") { - Logger.log("originally an executeBatchCall for Biconomy Account"); - const methodArgsSmartWalletExecuteCall = decodedDataSmartWallet.args; - batchTo = methodArgsSmartWalletExecuteCall[0]; - batchValue = methodArgsSmartWalletExecuteCall[1]; - batchData = methodArgsSmartWalletExecuteCall[2]; - } - - if (approvalRequest.to && approvalRequest.data && approvalRequest.value) { - batchTo = [approvalRequest.to, ...batchTo]; - batchValue = [approvalRequest.value, ...batchValue]; - batchData = [approvalRequest.data, ...batchData]; - - newCallData = this.getExecuteBatchCallData(batchTo, batchValue, batchData); - } - const finalUserOp: Partial = { - ...userOp, - callData: newCallData, - }; - - return finalUserOp; - } - } catch (error) { - Logger.log("Failed to update userOp. sending back original op"); - Logger.error("Failed to update callData with error", error); - return userOp; - } - return userOp; - } - - async getAllTokenBalances(balancesDto: BalancesDto): Promise { - return this.nodeClient.getAllTokenBalances(balancesDto); - } - - async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { - return this.nodeClient.getTotalBalanceInUsd(balancesDto); - } - - async getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise { - return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto); - } - - async getTransactionsByAddress(chainId: number, address: string): Promise { - return this.nodeClient.getTransactionByAddress(chainId, address); - } - - async getTransactionByHash(txHash: string): Promise { - return this.nodeClient.getTransactionByHash(txHash); - } - - async getAllSupportedChains(): Promise { - return this.nodeClient.getAllSupportedChains(); - } - - async getUpdateImplementationData(newImplementationAddress?: string): Promise { - // V2 address or latest implementation if possible to jump from V1 -> Vn without upgrading to V2 - // If needed we can fetch this from backend config - - Logger.log("Recommended implementation address to upgrade to", BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0); - - const latestImplementationAddress = newImplementationAddress ?? DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS; // BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 // 2.0 - Logger.log("Requested implementation address to upgrade to", latestImplementationAddress); - - // by querying the proxy contract - // TODO: add isDeployed checks before reading below - const currentImplementationAddress = await this.proxy.getImplementation(); - Logger.log("Current implementation address for this Smart Account", currentImplementationAddress); - - if (ethers.utils.getAddress(currentImplementationAddress) !== ethers.utils.getAddress(latestImplementationAddress)) { - const impInterface = new ethers.utils.Interface(["function updateImplementation(address _implementation)"]); - const encodedData = impInterface.encodeFunctionData("updateImplementation", [latestImplementationAddress]); - return { to: this.address, value: BigNumber.from(0), data: encodedData }; - } else { - return { to: this.address, value: 0, data: "0x" }; - } - } - - async getModuleSetupData(ecdsaModuleAddress?: string): Promise { - try { - const moduleAddress = ecdsaModuleAddress ?? DEFAULT_ECDSA_OWNERSHIP_MODULE; - const ecdsaModule = await ECDSAOwnershipValidationModule.create({ - signer: this.signer, - moduleAddress: moduleAddress, - }); - - // initForSmartAccount - const ecdsaOwnershipSetupData = await ecdsaModule.getInitData(); - - const proxyInstanceDto = { - smartAccountType: SmartAccountType.BICONOMY, - version: "V2_0_0", // Review - contractAddress: this.address, - provider: this.provider, - }; - const accountV2: SmartAccount_v200 = getSAProxyContract(proxyInstanceDto) as SmartAccount_v200; - - const data = accountV2.interface.encodeFunctionData("setupAndEnableModule", [moduleAddress, ecdsaOwnershipSetupData]); - - return { to: this.address, value: 0, data: data }; - } catch (error) { - Logger.error("Failed to get module setup data", error); - // Could throw error - return { to: this.address, value: 0, data: "0x" }; - } - } - - // Once this userOp is sent (batch: a. updateImplementation and b. setupModule on upgraded proxy) - // Afterwards you can start using BiconomySmartAccountV2 - async updateImplementationUserOp(newImplementationAddress?: string, ecdsaModuleAddress?: string): Promise> { - const tx1 = await this.getUpdateImplementationData(newImplementationAddress); - const tx2 = await this.getModuleSetupData(ecdsaModuleAddress); - - if (tx1.data !== "0x" && tx2.data !== "0x") { - const partialUserOp: Partial = await this.buildUserOp([tx1, tx2]); - return partialUserOp; - } else { - throw new Error("Not eligible for upgrade"); - } - } -} diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index fe9ce9e39..e5a7bfb48 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1,71 +1,91 @@ -import { JsonRpcProvider } from "@ethersproject/providers"; -import { ethers, BigNumberish, BytesLike, BigNumber } from "ethers"; -import { BaseSmartAccount } from "./BaseSmartAccount"; -import { Bytes, getCreate2Address, hexConcat, keccak256, solidityKeccak256 } from "ethers/lib/utils"; import { - Logger, - NODE_CLIENT_URL, - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - AddressResolver, - AddressResolver__factory, - isNullOrUndefined, -} from "@biconomy/common"; + Hex, + keccak256, + encodePacked, + getCreate2Address, + encodeAbiParameters, + parseAbiParameters, + toHex, + toBytes, + encodeFunctionData, + PublicClient, + createPublicClient, + http, + concatHex, + GetContractReturnType, + getContract, + decodeFunctionData, +} from "viem"; +import { + BaseSmartContractAccount, + getChain, + type BigNumberish, + type UserOperationStruct, + BatchUserOperationCallData, + SmartAccountSigner, +} from "@alchemy/aa-core"; +import { isNullOrUndefined, packUserOp } from "./utils/Utils.js"; +import { BaseValidationModule, ModuleInfo, SendUserOpParams, createECDSAOwnershipValidationModule } from "@biconomy/modules"; +import { + IHybridPaymaster, + IPaymaster, + Paymaster, + PaymasterMode, + SponsorUserOperationDto, + Bundler, + IBundler, + UserOpResponse, + extractChainIdFromBundlerUrl, + convertSigner, +} from "./index.js"; import { BiconomyTokenPaymasterRequest, BiconomySmartAccountV2Config, CounterFactualAddressParam, BuildUserOpOptions, - Overrides, NonceOptions, - SmartAccountInfo, + Transaction, QueryParamsForAddressResolver, -} from "./utils/Types"; -import { BaseValidationModule, ECDSAOwnershipValidationModule, ModuleInfo, SendUserOpParams } from "@biconomy/modules"; -import { UserOperation, Transaction } from "@biconomy/core-types"; -import NodeClient from "@biconomy/node-client"; -import INodeClient from "@biconomy/node-client"; -import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from "@biconomy/paymaster"; -import { - SupportedChainsResponse, - BalancesResponse, - BalancesDto, - UsdBalanceResponse, - SmartAccountByOwnerDto, - SmartAccountsResponse, - SCWTransactionResponse, -} from "@biconomy/node-client"; -import { UserOpResponse } from "@biconomy/bundler"; + BiconomySmartAccountV2ConfigConstructorProps, + PaymasterUserOperationDto, + SimulationType, +} from "./utils/Types.js"; import { ADDRESS_RESOLVER_ADDRESS, BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, DEFAULT_BICONOMY_FACTORY_ADDRESS, DEFAULT_FALLBACK_HANDLER_ADDRESS, PROXY_CREATION_CODE, -} from "./utils/Constants"; -import log from "loglevel"; + ADDRESS_ZERO, + DEFAULT_ENTRYPOINT_ADDRESS, + ERROR_MESSAGES, +} from "./utils/Constants.js"; +import { BiconomyFactoryAbi } from "./abi/Factory.js"; +import { BiconomyAccountAbi } from "./abi/SmartAccount.js"; +import { AccountResolverAbi } from "./abi/AccountResolver.js"; +import { Logger } from "@biconomy/common"; +import { FeeQuotesOrDataDto, FeeQuotesOrDataResponse } from "@biconomy/paymaster"; + +type UserOperationKey = keyof UserOperationStruct; + +export class BiconomySmartAccountV2 extends BaseSmartContractAccount { + private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; -type UserOperationKey = keyof UserOperation; -export class BiconomySmartAccountV2 extends BaseSmartAccount { - private nodeClient!: INodeClient; + private index: number; - private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; + private chainId: number; - factoryAddress?: string; + private provider: PublicClient; - /** - * our account contract. - * should support the "execFromEntryPoint" and "nonce" methods - */ - accountContract?: SmartAccount_v200; + paymaster?: IPaymaster; + + bundler?: IBundler; - factory?: SmartAccountFactory_v200; + private accountContract?: GetContractReturnType; - private defaultFallbackHandlerAddress!: string; + private defaultFallbackHandlerAddress: Hex; - private implementationAddress!: string; + private implementationAddress: Hex; private scanForUpgradedAccountsFromV1!: boolean; @@ -77,134 +97,168 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature. activeValidationModule!: BaseValidationModule; - private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) { - super(biconomySmartAccountConfig); - } + private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2ConfigConstructorProps) { + super({ + ...biconomySmartAccountConfig, + chain: getChain(biconomySmartAccountConfig.chainId), + rpcClient: biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0], + entryPointAddress: (biconomySmartAccountConfig.entryPointAddress as Hex) ?? DEFAULT_ENTRYPOINT_ADDRESS, + accountAddress: (biconomySmartAccountConfig.accountAddress as Hex) ?? undefined, + factoryAddress: biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS, + }); - /** - * Creates a new instance of BiconomySmartAccountV2. - * - * This method will create a BiconomySmartAccountV2 instance but will not deploy the Smart Account. - * - * Deployment of the Smart Account will be donewith the first user operation. - * - * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance. - * @returns A promise that resolves to a new instance of BiconomySmartAccountV2. - * @throws An error if something is wrong with the smart account instance creation. - */ - public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { - const instance = new BiconomySmartAccountV2(biconomySmartAccountConfig); - instance.factoryAddress = biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS; // This would be fetched from V2 + this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; + this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule; + + this.index = biconomySmartAccountConfig.index ?? 0; + this.chainId = biconomySmartAccountConfig.chainId; + this.bundler = biconomySmartAccountConfig.bundler; + this.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex); if (biconomySmartAccountConfig.biconomyPaymasterApiKey) { - instance.paymaster = new BiconomyPaymaster({ + this.paymaster = new Paymaster({ paymasterUrl: `https://paymaster.biconomy.io/api/v1/${biconomySmartAccountConfig.chainId}/${biconomySmartAccountConfig.biconomyPaymasterApiKey}`, }); + } else { + this.paymaster = biconomySmartAccountConfig.paymaster; } + this.bundler = biconomySmartAccountConfig.bundler; + const defaultFallbackHandlerAddress = - instance.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS - ? DEFAULT_FALLBACK_HANDLER_ADDRESS - : biconomySmartAccountConfig.defaultFallbackHandler; + this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_FALLBACK_HANDLER_ADDRESS : biconomySmartAccountConfig.defaultFallbackHandler; if (!defaultFallbackHandlerAddress) { throw new Error("Default Fallback Handler address is not provided"); } - instance.accountAddress = biconomySmartAccountConfig.senderAddress ?? undefined; - instance.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; - - instance.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0; - - // Note: if no module is provided, we will use ECDSA_OWNERSHIP as default - if (biconomySmartAccountConfig.defaultValidationModule) { - instance.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - } else { - instance.defaultValidationModule = await ECDSAOwnershipValidationModule.create({ - signer: biconomySmartAccountConfig.signer!, - }); - } + this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - instance.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? instance.defaultValidationModule; + // Added bang operator to avoid null check as the constructor have these params as optional + this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule!; + this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule!; - const { rpcUrl, nodeClientUrl } = biconomySmartAccountConfig; - - if (rpcUrl) { - instance.provider = new JsonRpcProvider(rpcUrl); - } - - instance.nodeClient = new NodeClient({ txServiceUrl: nodeClientUrl ?? NODE_CLIENT_URL }); - - instance.scanForUpgradedAccountsFromV1 = biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false; - - instance.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10; - - await instance.init(); + this.provider = createPublicClient({ + chain: getChain(biconomySmartAccountConfig.chainId), + transport: http(biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0]), + }); - return instance; + this.scanForUpgradedAccountsFromV1 = biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false; + this.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10; } - async _getAccountContract(): Promise { - if (this.accountContract == null) { - this.accountContract = SmartAccount_v200__factory.connect(await this.getAccountAddress(), this.provider); + /** + * Creates a new instance of BiconomySmartAccountV2 + * + * This method will create a BiconomySmartAccountV2 instance but will not deploy the Smart Account + * Deployment of the Smart Account will be donewith the first user operation. + * + * - Docs: https://docs.biconomy.io/Account/integration#integration-1 + * + * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance. + * @returns A promise that resolves to a new instance of BiconomySmartAccountV2. + * @throws An error if something is wrong with the smart account instance creation. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient, BiconomySmartAccountV2 } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const bundlerUrl = "" // Retrieve bundler url from dasboard + * + * const smartAccountFromStaticCreate = await BiconomySmartAccountV2.create({ signer, bundlerUrl }); + * + * // Is the same as... + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); + * + */ + public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise { + let chainId = biconomySmartAccountConfig.chainId; + let resolvedSmartAccountSigner!: SmartAccountSigner; + let rpcUrl = biconomySmartAccountConfig.rpcUrl; + + // Signer needs to be initialised here before defaultValidationModule is set + if (biconomySmartAccountConfig.signer) { + const signerResult = await convertSigner(biconomySmartAccountConfig.signer, !!chainId); + if (!chainId && !!signerResult.chainId) { + chainId = signerResult.chainId; + } + if (!rpcUrl && !!signerResult.rpcUrl) { + rpcUrl = signerResult.rpcUrl; + } + resolvedSmartAccountSigner = signerResult.signer; } - return this.accountContract; - } - - isActiveValidationModuleDefined(): boolean { - if (!this.activeValidationModule) throw new Error("Must provide an instance of active validation module."); - return true; - } - - isDefaultValidationModuleDefined(): boolean { - if (!this.defaultValidationModule) throw new Error("Must provide an instance of default validation module."); - return true; - } - - setActiveValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { - if (validationModule instanceof BaseValidationModule) { - this.activeValidationModule = validationModule; + if (!chainId) { + // Get it from bundler + if (biconomySmartAccountConfig.bundlerUrl) { + chainId = extractChainIdFromBundlerUrl(biconomySmartAccountConfig.bundlerUrl); + } else if (biconomySmartAccountConfig.bundler) { + const bundlerUrlFromBundler = biconomySmartAccountConfig.bundler.getBundlerUrl(); + chainId = extractChainIdFromBundlerUrl(bundlerUrlFromBundler); + } } - return this; - } + if (!chainId) { + throw new Error("chainId required"); + } + const bundler: IBundler = biconomySmartAccountConfig.bundler ?? new Bundler({ bundlerUrl: biconomySmartAccountConfig.bundlerUrl!, chainId }); + let defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - setDefaultValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { - if (validationModule instanceof BaseValidationModule) { - this.defaultValidationModule = validationModule; - this.accountAddress = undefined; + // Note: If no module is provided, we will use ECDSA_OWNERSHIP as default + if (!defaultValidationModule) { + const newModule = await createECDSAOwnershipValidationModule({ signer: resolvedSmartAccountSigner! }); + defaultValidationModule = newModule; } - return this; + const activeValidationModule = biconomySmartAccountConfig?.activeValidationModule ?? defaultValidationModule; + if (!resolvedSmartAccountSigner) { + resolvedSmartAccountSigner = await activeValidationModule.getSigner(); + } + if (!resolvedSmartAccountSigner) { + throw new Error("signer required"); + } + const config: BiconomySmartAccountV2ConfigConstructorProps = { + ...biconomySmartAccountConfig, + defaultValidationModule, + activeValidationModule, + chainId, + bundler, + signer: resolvedSmartAccountSigner, + rpcUrl, + }; + + return new BiconomySmartAccountV2(config); } - // Could call it nonce space - async getNonce(nonceKey?: number): Promise { - const nonceSpace = nonceKey ?? 0; - try { - const accountContract = await this._getAccountContract(); - const nonce = await accountContract.nonce(nonceSpace); - return nonce; - } catch (e) { - log.debug("Failed to get nonce from deployed account. Returning 0 as nonce"); - return BigNumber.from(0); + // Calls the getCounterFactualAddress + async getAddress(params?: CounterFactualAddressParam): Promise { + if (this.accountAddress == null) { + // means it needs deployment + this.accountAddress = await this.getCounterFactualAddress(params); } + return this.accountAddress; } - /** - * return the account's address. - * this value is valid even before deploying the contract. - */ - async getAccountAddress(params?: CounterFactualAddressParam): Promise { + // Calls the getCounterFactualAddress + async getAccountAddress(params?: CounterFactualAddressParam): Promise<`0x${string}`> { if (this.accountAddress == null || this.accountAddress == undefined) { + // means it needs deployment this.accountAddress = await this.getCounterFactualAddress(params); } return this.accountAddress; } /** - * calculate the account address even before it is deployed + * Return the account's address. This value is valid even before deploying the contract. */ - async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise { + async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise { const validationModule = params?.validationModule ?? this.defaultValidationModule; const index = params?.index ?? this.index; + const maxIndexForScan = params?.maxIndexForScan ?? this.maxIndexForScan; // Review: default behavior const scanForUpgradedAccountsFromV1 = params?.scanForUpgradedAccountsFromV1 ?? this.scanForUpgradedAccountsFromV1; @@ -212,9 +266,9 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { // if it's intended to detect V1 upgraded accounts if (scanForUpgradedAccountsFromV1) { const eoaSigner = await validationModule.getSigner(); - const eoaAddress = await eoaSigner.getAddress(); - const moduleAddress = validationModule.getAddress(); - const moduleSetupData = await validationModule.getInitData(); + const eoaAddress = (await eoaSigner.getAddress()) as Hex; + const moduleAddress = validationModule.getAddress() as Hex; + const moduleSetupData = (await validationModule.getInitData()) as Hex; const queryParams = { eoaAddress, index, @@ -223,36 +277,35 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { maxIndexForScan, }; const accountAddress = await this.getV1AccountsUpgradedToV2(queryParams); - Logger.log("account address from V1 ", accountAddress); - if (accountAddress !== ethers.constants.AddressZero) { + if (accountAddress !== ADDRESS_ZERO) { return accountAddress; } } + const counterFactualAddressV2 = await this.getCounterFactualAddressV2({ validationModule, index }); return counterFactualAddressV2; } - private async getCounterFactualAddressV2(params?: CounterFactualAddressParam): Promise { - if (this.factory == null) { - if (this.factoryAddress != null && this.factoryAddress !== "") { - this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); - } else { - throw new Error("no factory to get initCode"); - } - } - + private async getCounterFactualAddressV2(params?: CounterFactualAddressParam): Promise { const validationModule = params?.validationModule ?? this.defaultValidationModule; const index = params?.index ?? this.index; try { - const initCalldata = SmartAccount_v200__factory.createInterface().encodeFunctionData("init", [ - this.defaultFallbackHandlerAddress, - validationModule.getAddress(), - await validationModule.getInitData(), - ]); - const proxyCreationCodeHash = solidityKeccak256(["bytes", "uint256"], [PROXY_CREATION_CODE, this.implementationAddress]); - const salt = solidityKeccak256(["bytes32", "uint256"], [keccak256(initCalldata), index]); - const counterFactualAddress = getCreate2Address(this.factory.address, salt, proxyCreationCodeHash); + const initCalldata = encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "init", + args: [this.defaultFallbackHandlerAddress, validationModule.getAddress() as Hex, (await validationModule.getInitData()) as Hex], + }); + + const proxyCreationCodeHash = keccak256(encodePacked(["bytes", "uint256"], [PROXY_CREATION_CODE, BigInt(this.implementationAddress)])); + + const salt = keccak256(encodePacked(["bytes32", "uint256"], [keccak256(initCalldata), BigInt(index)])); + + const counterFactualAddress = getCreate2Address({ + from: this.factoryAddress, + salt: salt, + bytecodeHash: proxyCreationCodeHash, + }); return counterFactualAddress; } catch (e) { @@ -260,60 +313,93 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { } } - async getV1AccountsUpgradedToV2(params: QueryParamsForAddressResolver): Promise { - Logger.log("index to filter ", params.index); + async _getAccountContract(): Promise> { + if (this.accountContract == null) { + this.accountContract = getContract({ + address: await this.getAddress(), + abi: BiconomyAccountAbi, + client: this.provider as PublicClient, + }); + } + return this.accountContract; + } + + isActiveValidationModuleDefined(): boolean { + if (!this.activeValidationModule) throw new Error("Must provide an instance of active validation module."); + return true; + } + + isDefaultValidationModuleDefined(): boolean { + if (!this.defaultValidationModule) throw new Error("Must provide an instance of default validation module."); + return true; + } + + setActiveValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { + if (validationModule instanceof BaseValidationModule) { + this.activeValidationModule = validationModule; + } + return this; + } + + setDefaultValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { + if (validationModule instanceof BaseValidationModule) { + this.defaultValidationModule = validationModule; + } + return this; + } + + async getV1AccountsUpgradedToV2(params: QueryParamsForAddressResolver): Promise { const maxIndexForScan = params.maxIndexForScan ?? this.maxIndexForScan; - const addressResolver: AddressResolver = AddressResolver__factory.connect(ADDRESS_RESOLVER_ADDRESS, this.provider); + + const addressResolver = getContract({ + address: ADDRESS_RESOLVER_ADDRESS, + abi: AccountResolverAbi, + client: { + public: this.provider as PublicClient, + }, + }); // Note: depending on moduleAddress and moduleSetupData passed call this. otherwise could call resolveAddresses() if (params.moduleAddress && params.moduleSetupData) { - const result: SmartAccountInfo[] = await addressResolver.resolveAddressesFlexibleForV2( + const result = await addressResolver.read.resolveAddressesFlexibleForV2([ params.eoaAddress, maxIndexForScan, params.moduleAddress, params.moduleSetupData, - ); + ]); const desiredV1Account = result.find( - (smartAccountInfo) => + (smartAccountInfo: { factoryVersion: string; currentVersion: string; deploymentIndex: { toString: () => any } }) => smartAccountInfo.factoryVersion === "v1" && smartAccountInfo.currentVersion === "2.0.0" && - smartAccountInfo.deploymentIndex.toNumber() === params.index, + Number(smartAccountInfo.deploymentIndex.toString()) === params.index, ); if (desiredV1Account) { const smartAccountAddress = desiredV1Account.accountAddress; return smartAccountAddress; } else { - return ethers.constants.AddressZero; + return ADDRESS_ZERO; } } else { - return ethers.constants.AddressZero; + return ADDRESS_ZERO; } } /** - * return the value to put into the "initCode" field, if the account is not yet deployed. - * this value holds the "factory" address, followed by this account's information + * Return the value to put into the "initCode" field, if the account is not yet deployed. + * This value holds the "factory" address, followed by this account's information */ - async getAccountInitCode(): Promise { - if (this.factory == null) { - if (this.factoryAddress != null && this.factoryAddress !== "") { - this.factory = SmartAccountFactory_v200__factory.connect(this.factoryAddress, this.provider); - } else { - throw new Error("no factory to get initCode"); - } - } - + async getAccountInitCode(): Promise { this.isDefaultValidationModuleDefined(); - return hexConcat([ - this.factory.address, - this.factory.interface.encodeFunctionData("deployCounterFactualAccount", [ - this.defaultValidationModule.getAddress(), - await this.defaultValidationModule.getInitData(), - this.index, - ]), + return concatHex([ + this.factoryAddress as Hex, + encodeFunctionData({ + abi: BiconomyFactoryAbi, + functionName: "deployCounterFactualAccount", + args: [this.defaultValidationModule.getAddress() as Hex, (await this.defaultValidationModule.getInitData()) as Hex, BigInt(this.index)], + }), ]); } @@ -322,11 +408,15 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @param to { target } address of transaction * @param value represents amount of native tokens * @param data represent data associated with transaction - * @returns + * @returns encoded data for execute function */ - async encodeExecute(to: string, value: BigNumberish, data: BytesLike): Promise { - const accountContract = await this._getAccountContract(); - return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]); + async encodeExecute(to: Hex, value: bigint, data: Hex): Promise { + // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; + return encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "execute_ncC", + args: [to, value, data], + }); } /** @@ -334,17 +424,40 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @param to { target } array of addresses in transaction * @param value represents array of amount of native tokens associated with each transaction * @param data represent array of data associated with each transaction - * @returns + * @returns encoded data for executeBatch function */ - async encodeExecuteBatch(to: Array, value: Array, data: Array): Promise { - const accountContract = await this._getAccountContract(); - return accountContract.interface.encodeFunctionData("executeBatch_y6U", [to, value, data]); + async encodeExecuteBatch(to: Array, value: Array, data: Array): Promise { + return encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "executeBatch_y6U", + args: [to, value, data], + }); + } + + override async encodeBatchExecute(txs: BatchUserOperationCallData): Promise { + const [targets, datas, value] = txs.reduce( + (accum, curr) => { + accum[0].push(curr.target); + accum[1].push(curr.data); + accum[2].push(curr.value || BigInt(0)); + + return accum; + }, + [[], [], []] as [Hex[], Hex[], bigint[]], + ); + + return this.encodeExecuteBatch(targets, value, datas); } // dummy signature depends on the validation module supplied. - async getDummySignature(params?: ModuleInfo): Promise { + async getDummySignatures(params?: ModuleInfo): Promise { this.isActiveValidationModuleDefined(); - return this.activeValidationModule.getDummySignature(params); + return (await this.activeValidationModule.getDummySignature(params)) as Hex; + } + + // TODO: review this + getDummySignature(): Hex { + throw new Error("Method not implemented! Call getDummySignatures instead."); } // Might use provided paymaster instance to get dummy data (from pm service) @@ -352,7 +465,16 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return "0x"; } - async signUserOp(userOp: Partial, params?: SendUserOpParams): Promise { + validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { + for (const field of requiredFields) { + if (!userOp[field]) { + throw new Error(`${String(field)} is missing in the UserOp`); + } + } + return true; + } + + async signUserOp(userOp: Partial, params?: SendUserOpParams): Promise { this.isActiveValidationModuleDefined(); const requiredFields: UserOperationKey[] = [ "sender", @@ -366,112 +488,391 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { "maxPriorityFeePerGas", "paymasterAndData", ]; - super.validateUserOp(userOp, requiredFields); + this.validateUserOp(userOp, requiredFields); const userOpHash = await this.getUserOpHash(userOp); - const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); + const moduleSig = (await this.activeValidationModule.signUserOpHash(userOpHash, params)) as Hex; - // Note: If the account is undeployed, use ERC-6492 - // Review: Should only be needed for signMessage - /*if (!(await this.isAccountDeployed(await this.getAccountAddress()))) { - const coder = new ethers.utils.AbiCoder(); - const populatedTransaction = await this.factory?.populateTransaction.deployCounterFactualAccount( - await this.defaultValidationModule.getAddress(), - await this.defaultValidationModule.getInitData(), - this.index, - ); - moduleSig = - coder.encode(["address", "bytes", "bytes"], [this.factoryAddress, populatedTransaction?.data, moduleSig]) + - "6492649264926492649264926492649264926492649264926492649264926492"; // magic suffix - userOp.signature = moduleSig; - return userOp as UserOperation; - }*/ - - const signatureWithModuleAddress = ethers.utils.defaultAbiCoder.encode( - ["bytes", "address"], - [moduleSig, this.activeValidationModule.getAddress()], - ); + const signatureWithModuleAddress = this.getSignatureWithModuleAddress(moduleSig, this.activeValidationModule.getAddress() as Hex); userOp.signature = signatureWithModuleAddress; - return userOp as UserOperation; + return userOp as UserOperationStruct; } - getSignatureWithModuleAddress(moduleSignature: string, moduleAddress?: string): string { - const moduleAddressToUse = moduleAddress ?? this.activeValidationModule.getAddress(); - return ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [moduleSignature, moduleAddressToUse]); + getSignatureWithModuleAddress(moduleSignature: Hex, moduleAddress?: Hex): Hex { + const moduleAddressToUse = moduleAddress ?? (this.activeValidationModule.getAddress() as Hex); + return encodeAbiParameters(parseAbiParameters("bytes, address"), [moduleSignature, moduleAddressToUse]); + } + + public async getPaymasterUserOp( + userOp: Partial, + paymasterServiceData: PaymasterUserOperationDto, + ): Promise> { + if (paymasterServiceData.mode === PaymasterMode.SPONSORED) { + return this.getPaymasterAndData(userOp, paymasterServiceData); + } else if (paymasterServiceData.mode === PaymasterMode.ERC20) { + if (paymasterServiceData?.feeQuote) { + const { feeQuote, spender, maxApproval = false } = paymasterServiceData; + Logger.log("there is a feeQuote: ", feeQuote); + if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED); + if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH); + const partialUserOp = await this.buildTokenPaymasterUserOp(userOp, { + ...paymasterServiceData, + spender, + maxApproval, + feeQuote, + }); + return this.getPaymasterAndData(partialUserOp, { + ...paymasterServiceData, + feeTokenAddress: feeQuote.tokenAddress, + calculateGasLimits: true, // Always recommended and especially when using token paymaster + }); + } else if (paymasterServiceData?.preferredToken) { + const { preferredToken } = paymasterServiceData; + Logger.log("there is a preferred token: ", preferredToken); + const feeQuotesResponse = await this.getPaymasterFeeQuotesOrData(userOp, paymasterServiceData); + const spender = feeQuotesResponse.tokenPaymasterAddress; + const feeQuote = feeQuotesResponse.feeQuotes?.[0]; + if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED); + if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH); + return this.getPaymasterUserOp(userOp, { ...paymasterServiceData, feeQuote, spender }); // Recursively call getPaymasterUserOp with the feeQuote + } else { + Logger.log("ERC20 mode without feeQuote or preferredToken provided. Passing through unchanged."); + return userOp; + } + } + throw new Error("Invalid paymaster mode"); + } + + private async getPaymasterAndData( + userOp: Partial, + paymasterServiceData: PaymasterUserOperationDto, + ): Promise> { + const paymaster = this.paymaster as IHybridPaymaster; + const paymasterData = await paymaster.getPaymasterAndData(userOp, paymasterServiceData); + return { ...userOp, ...paymasterData }; + } + + private async getPaymasterFeeQuotesOrData( + userOp: Partial, + feeQuotesOrData: FeeQuotesOrDataDto, + ): Promise { + const paymaster = this.paymaster as IHybridPaymaster; + const tokenList = feeQuotesOrData?.preferredToken + ? [feeQuotesOrData?.preferredToken] + : feeQuotesOrData?.tokenList?.length + ? feeQuotesOrData?.tokenList + : []; + return paymaster.getPaymasterFeeQuotesOrData(userOp, { ...feeQuotesOrData, tokenList }); + } + + /** + * + * @description This function will retrieve fees from the paymaster in erc20 mode + * + * @param manyOrOneTransactions Array of {@link Transaction} to be batched and sent. Can also be a single {@link Transaction}. + * @param buildUseropDto {@link BuildUserOpOptions}. + * @returns Promise + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * const feeQuotesResponse: FeeQuotesOrDataResponse = await smartAccount.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20 } }); + * + * const userSeletedFeeQuote = feeQuotesResponse.feeQuotes?.[0]; + * + * const { wait } = await smartAccount.sendTransaction(transaction, { + * paymasterServiceData: { + * mode: PaymasterMode.ERC20, + * feeQuote: userSeletedFeeQuote, + * spender: feeQuotesResponse.tokenPaymasterAddress, + * }, + * }); + * + * const { receipt } = await wait(); + * + */ + public async getTokenFees( + manyOrOneTransactions: Transaction | Transaction[], + buildUseropDto: BuildUserOpOptions, + ): Promise { + const txs = Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions : [manyOrOneTransactions]; + const userOp = await this.buildUserOp(txs, buildUseropDto); + if (!buildUseropDto.paymasterServiceData) throw new Error("paymasterServiceData was not provided"); + return this.getPaymasterFeeQuotesOrData(userOp, buildUseropDto.paymasterServiceData); } /** * * @param userOp * @param params - * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. + * @description This function will take a user op as an input, sign it with the owner key, and send it to the bundler. * @returns Promise + * Sends a user operation + * + * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#send-useroperation + * + * @param userOp Partial<{@link UserOperationStruct}> the userOp params to be sent. + * @param params {@link SendUserOpParams}. + * @returns Promise<{@link UserOpResponse}> that you can use to track user operation. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * const userOp = await smartAccount.buildUserOp([transaction]); + * + * const { wait } = await smartAccount.sendUserOp(userOp); + * const { receipt } = await wait(); + * */ - async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { - Logger.log("userOp received in base account ", userOp); + async sendUserOp(userOp: Partial, params?: SendUserOpParams): Promise { delete userOp.signature; const userOperation = await this.signUserOp(userOp, params); - const bundlerResponse = await this.sendSignedUserOp(userOperation, params); + const bundlerResponse = await this.sendSignedUserOp(userOperation, params?.simulationType); + return bundlerResponse; + } + + /** + * + * @param userOp - The signed user operation to send + * @param simulationType - The type of simulation to perform ("validation" | "validation_and_execution") + * @description This function call will take 'signedUserOp' as input and send it to the bundler + * @returns + */ + async sendSignedUserOp(userOp: UserOperationStruct, simulationType?: SimulationType): Promise { + const requiredFields: UserOperationKey[] = [ + "sender", + "nonce", + "initCode", + "callData", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "paymasterAndData", + "signature", + ]; + this.validateUserOp(userOp, requiredFields); + if (!this.bundler) throw new Error("Bundler is not provided"); + Logger.warn("userOp being sent to the bundler", userOp); + const bundlerResponse = await this.bundler.sendUserOp(userOp, simulationType); return bundlerResponse; } - private async getBuildUserOpNonce(nonceOptions: NonceOptions | undefined): Promise { - let nonce = BigNumber.from(0); + async getUserOpHash(userOp: Partial): Promise { + const userOpHash = keccak256(packUserOp(userOp, true) as Hex); + const enc = encodeAbiParameters(parseAbiParameters("bytes32, address, uint256"), [userOpHash, this.entryPoint.address, BigInt(this.chainId)]); + return keccak256(enc); + } + + async estimateUserOpGas(userOp: Partial): Promise> { + if (!this.bundler) throw new Error("Bundler is not provided"); + const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; + this.validateUserOp(userOp, requiredFields); + + const finalUserOp = userOp; + + // Making call to bundler to get gas estimations for userOp + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = + await this.bundler.estimateUserOpGas(userOp); + // if neither user sent gas fee nor the bundler, estimate gas from provider + if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { + const feeData = await this.provider.estimateFeesPerGas(); + if (feeData.maxFeePerGas?.toString()) { + finalUserOp.maxFeePerGas = ("0x" + feeData.maxFeePerGas.toString(16)) as Hex; + } else if (feeData.gasPrice?.toString()) { + finalUserOp.maxFeePerGas = ("0x" + feeData.gasPrice.toString(16)) as Hex; + } else { + finalUserOp.maxFeePerGas = ("0x" + (await this.provider.getGasPrice()).toString(16)) as Hex; + } + + if (feeData.maxPriorityFeePerGas?.toString()) { + finalUserOp.maxPriorityFeePerGas = ("0x" + feeData.maxPriorityFeePerGas?.toString()) as Hex; + } else if (feeData.gasPrice?.toString()) { + finalUserOp.maxPriorityFeePerGas = toHex(Number(feeData.gasPrice?.toString())); + } else { + finalUserOp.maxPriorityFeePerGas = ("0x" + (await this.provider.getGasPrice()).toString(16)) as Hex; + } + } else { + finalUserOp.maxFeePerGas = toHex(Number(maxFeePerGas)) ?? userOp.maxFeePerGas; + finalUserOp.maxPriorityFeePerGas = toHex(Number(maxPriorityFeePerGas)) ?? userOp.maxPriorityFeePerGas; + } + finalUserOp.verificationGasLimit = toHex(Number(verificationGasLimit)) ?? userOp.verificationGasLimit; + finalUserOp.callGasLimit = toHex(Number(callGasLimit)) ?? userOp.callGasLimit; + finalUserOp.preVerificationGas = toHex(Number(preVerificationGas)) ?? userOp.preVerificationGas; + if (!finalUserOp.paymasterAndData) { + finalUserOp.paymasterAndData = "0x"; + } + + return finalUserOp; + } + + // Could call it nonce space + async getNonce(nonceKey?: number): Promise { + const nonceSpace = nonceKey ?? 0; + try { + const address = await this.getAddress(); + return await this.entryPoint.read.getNonce([address, BigInt(nonceSpace)]); + } catch (e) { + return BigInt(0); + } + } + + private async getBuildUserOpNonce(nonceOptions: NonceOptions | undefined): Promise { + let nonce = BigInt(0); try { if (nonceOptions?.nonceOverride) { - nonce = BigNumber.from(nonceOptions?.nonceOverride); + nonce = BigInt(nonceOptions?.nonceOverride); } else { const _nonceSpace = nonceOptions?.nonceKey ?? 0; nonce = await this.getNonce(_nonceSpace); } } catch (error) { // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account - Logger.log("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); + Logger.warn("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); } return nonce; } - private async getGasFeeValues( - overrides: Overrides | undefined, - skipBundlerGasEstimation: boolean | undefined, - ): Promise<{ maxFeePerGas?: BigNumberish | undefined; maxPriorityFeePerGas?: BigNumberish | undefined }> { - const gasFeeValues = { - maxFeePerGas: overrides?.maxFeePerGas, - maxPriorityFeePerGas: overrides?.maxPriorityFeePerGas, - }; - try { - if (this.bundler && !gasFeeValues.maxFeePerGas && !gasFeeValues.maxPriorityFeePerGas && (skipBundlerGasEstimation ?? true)) { - const gasFeeEstimation = await this.bundler.getGasFeeValues(); - gasFeeValues.maxFeePerGas = gasFeeEstimation.maxFeePerGas; - gasFeeValues.maxPriorityFeePerGas = gasFeeEstimation.maxPriorityFeePerGas; - } - return gasFeeValues; - } catch (error: any) { - Logger.error("Error while getting gasFeeValues from bundler. Provided bundler might not have getGasFeeValues endpoint", error); - return gasFeeValues; - } + /** + * Sends a transaction (builds and sends a user op in sequence) + * + * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#send-transaction + * + * @param manyOrOneTransactions Array of {@link Transaction} to be batched and sent. Can also be a single {@link Transaction}. + * @param buildUseropDto {@link BuildUserOpOptions}. + * @returns Promise<{@link UserOpResponse}> that you can use to track user operation. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * const { waitForTxHash } = await smartAccount.sendTransaction(transaction); + * const { transactionHash, userOperationReceipt } = await wait(); + * + */ + async sendTransaction(manyOrOneTransactions: Transaction | Transaction[], buildUseropDto?: BuildUserOpOptions): Promise { + const userOp = await this.buildUserOp(Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions : [manyOrOneTransactions], buildUseropDto); + return this.sendUserOp(userOp, { simulationType: buildUseropDto?.simulationType, ...buildUseropDto?.params }); } - async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { - const to = transactions.map((element: Transaction) => element.to); - const data = transactions.map((element: Transaction) => element.data ?? "0x"); - const value = transactions.map((element: Transaction) => element.value ?? BigNumber.from("0")); + /** + * Builds a user operation + * + * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#build-useroperation + * + * @param transactions Array of {@link Transaction} to be sent. + * @param buildUseropDto {@link BuildUserOpOptions}. + * @returns Promise> the built user operation to be sent. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * const userOp = await smartAccount.buildUserOp([{ to: "0x...", data: encodedCall }]); + * + */ + async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise> { + const to = transactions.map((element: Transaction) => element.to as Hex); + const data = transactions.map((element: Transaction) => (element.data as Hex) ?? "0x"); + const value = transactions.map((element: Transaction) => (element.value as bigint) ?? BigInt(0)); const initCodeFetchPromise = this.getInitCode(); - const dummySignatureFetchPromise = this.getDummySignature(buildUseropDto?.params); + const dummySignatureFetchPromise = this.getDummySignatures(buildUseropDto?.params); - const [nonceFromFetch, initCode, signature, finalGasFeeValue] = await Promise.all([ + const [nonceFromFetch, initCode, signature] = await Promise.all([ this.getBuildUserOpNonce(buildUseropDto?.nonceOptions), initCodeFetchPromise, dummySignatureFetchPromise, - this.getGasFeeValues(buildUseropDto?.overrides, buildUseropDto?.skipBundlerGasEstimation), ]); if (transactions.length === 0) { throw new Error("Transactions array cannot be empty"); } - let callData = ""; + let callData: Hex = "0x"; if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { callData = await this.encodeExecuteBatch(to, value, data); } else { @@ -479,47 +880,44 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { callData = await this.encodeExecute(to[0], value[0], data[0]); } - let userOp: Partial = { - sender: await this.getAccountAddress(), - nonce: nonceFromFetch, + let userOp: Partial = { + sender: (await this.getAccountAddress()) as Hex, + nonce: toHex(nonceFromFetch), initCode, callData: callData, - maxFeePerGas: finalGasFeeValue.maxFeePerGas || undefined, - maxPriorityFeePerGas: finalGasFeeValue.maxPriorityFeePerGas || undefined, }; // for this Smart Account current validation module dummy signature will be used to estimate gas userOp.signature = signature; // Note: Can change the default behaviour of calling estimations using bundler/local - userOp = await this.estimateUserOpGas({ - userOp, - overrides: buildUseropDto?.overrides, - skipBundlerGasEstimation: buildUseropDto?.skipBundlerGasEstimation, - paymasterServiceData: buildUseropDto?.paymasterServiceData, - }); - userOp.paymasterAndData = userOp.paymasterAndData ?? "0x"; + userOp = await this.estimateUserOpGas(userOp); + + if (buildUseropDto?.paymasterServiceData) { + userOp = await this.getPaymasterUserOp(userOp, buildUseropDto.paymasterServiceData); + } + Logger.log("UserOp after estimation ", userOp); return userOp; } - private validateUserOpAndPaymasterRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { + private validateUserOpAndPaymasterRequest(userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { if (isNullOrUndefined(userOp.callData)) { throw new Error("UserOp callData cannot be undefined"); } const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress; - Logger.log("Requested fee token is ", feeTokenAddress); + Logger.warn("Requested fee token is ", feeTokenAddress); - if (!feeTokenAddress || feeTokenAddress == ethers.constants.AddressZero) { + if (!feeTokenAddress || feeTokenAddress === ADDRESS_ZERO) { throw new Error("Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest"); } const spender = tokenPaymasterRequest?.spender; - Logger.log("Spender address is ", spender); + Logger.warn("Spender address is ", spender); - if (!spender || spender == ethers.constants.AddressZero) { + if (!spender || spender === ADDRESS_ZERO) { throw new Error("Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest"); } } @@ -534,29 +932,28 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { * @returns updated userOp with new callData, callGasLimit */ async buildTokenPaymasterUserOp( - userOp: Partial, + userOp: Partial, tokenPaymasterRequest: BiconomyTokenPaymasterRequest, - ): Promise> { + ): Promise> { this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest); try { - let batchTo: Array = []; - let batchValue: Array = []; - let batchData: Array = []; + let batchTo: Array = []; + let batchValue: Array = []; + let batchData: Array = []; let newCallData = userOp.callData; - Logger.log("Received information about fee token address and quote ", tokenPaymasterRequest); + Logger.warn("Received information about fee token address and quote ", tokenPaymasterRequest); - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { + if (this.paymaster && this.paymaster instanceof Paymaster) { // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details // Review: might request this form of an array of Transaction const approvalRequest: Transaction = await (this.paymaster as IHybridPaymaster).buildTokenApprovalTransaction( tokenPaymasterRequest, - this.provider, ); - Logger.log("ApprovalRequest is for erc20 token ", approvalRequest.to); + Logger.warn("ApprovalRequest is for erc20 token ", approvalRequest.to); - if (approvalRequest.data == "0x" || approvalRequest.to == ethers.constants.AddressZero) { + if (approvalRequest.data === "0x" || approvalRequest.to === ADDRESS_ZERO) { return userOp; } @@ -564,18 +961,18 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { throw new Error("UserOp callData cannot be undefined"); } - const account = await this._getAccountContract(); - - const decodedSmartAccountData = account.interface.parseTransaction({ - data: userOp.callData!.toString(), + const decodedSmartAccountData = decodeFunctionData({ + abi: BiconomyAccountAbi, + data: userOp.callData as Hex, }); + if (!decodedSmartAccountData) { throw new Error("Could not parse userOp call data for this smart account"); } - const smartAccountExecFunctionName = decodedSmartAccountData.name; + const smartAccountExecFunctionName = decodedSmartAccountData.functionName; - Logger.log(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); + Logger.warn(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); if (smartAccountExecFunctionName === "execute" || smartAccountExecFunctionName === "execute_ncC") { const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; const toOriginal = methodArgsSmartWalletExecuteCall[0]; @@ -587,23 +984,25 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { batchData.push(dataOriginal); } else if (smartAccountExecFunctionName === "executeBatch" || smartAccountExecFunctionName === "executeBatch_y6U") { const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; - batchTo = methodArgsSmartWalletExecuteCall[0]; - batchValue = methodArgsSmartWalletExecuteCall[1]; - batchData = methodArgsSmartWalletExecuteCall[2]; + batchTo = [...methodArgsSmartWalletExecuteCall[0]]; + batchValue = [...methodArgsSmartWalletExecuteCall[1]]; + batchData = [...methodArgsSmartWalletExecuteCall[2]]; } if (approvalRequest.to && approvalRequest.data && approvalRequest.value) { - batchTo = [approvalRequest.to, ...batchTo]; - batchValue = [approvalRequest.value, ...batchValue]; - batchData = [approvalRequest.data, ...batchData]; + batchTo = [approvalRequest.to as Hex, ...batchTo]; + batchValue = [BigInt(Number(approvalRequest.value.toString())), ...batchValue]; + batchData = [approvalRequest.data as Hex, ...batchData]; newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData); } - const finalUserOp: Partial = { + const finalUserOp: Partial = { ...userOp, callData: newCallData, }; + // Optionally Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) + return finalUserOp; } } catch (error) { @@ -614,125 +1013,98 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount { return userOp; } - async signUserOpHash(userOpHash: string, params?: SendUserOpParams): Promise { + async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { this.isActiveValidationModuleDefined(); - const moduleSig = await this.activeValidationModule.signUserOpHash(userOpHash, params); + const moduleSig = (await this.activeValidationModule.signUserOpHash(userOpHash, params)) as Hex; - const signatureWithModuleAddress = ethers.utils.defaultAbiCoder.encode( - ["bytes", "address"], - [moduleSig, this.activeValidationModule.getAddress()], - ); + const signatureWithModuleAddress = encodeAbiParameters(parseAbiParameters("bytes, address"), [ + moduleSig, + this.activeValidationModule.getAddress() as Hex, + ]); return signatureWithModuleAddress; } - async signMessage(message: Bytes | string): Promise { + async signMessage(message: string | Uint8Array): Promise { this.isActiveValidationModuleDefined(); - const dataHash = ethers.utils.arrayify(ethers.utils.hashMessage(message)); + const dataHash = typeof message === "string" ? toBytes(message) : message; let signature = await this.activeValidationModule.signMessage(dataHash); + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); + } if (signature.slice(0, 2) !== "0x") { signature = "0x" + signature; } - - // If the account is undeployed, use ERC-6492 - if (!(await this.isAccountDeployed(await this.getAccountAddress()))) { - const coder = new ethers.utils.AbiCoder(); - const populatedTransaction = await this.factory?.populateTransaction.deployCounterFactualAccount( - await this.defaultValidationModule.getAddress(), - await this.defaultValidationModule.getInitData(), - this.index, - ); - signature = - coder.encode(["address", "bytes", "bytes"], [this.factoryAddress, populatedTransaction?.data, signature]) + - "6492649264926492649264926492649264926492649264926492649264926492"; // magic suffix - } - return signature; - } - - async getAllTokenBalances(balancesDto: BalancesDto): Promise { - return this.nodeClient.getAllTokenBalances(balancesDto); + return signature as Hex; } - async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { - return this.nodeClient.getTotalBalanceInUsd(balancesDto); - } - - async getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise { - return this.nodeClient.getSmartAccountsByOwner(smartAccountByOwnerDto); - } - - async getTransactionsByAddress(chainId: number, address: string): Promise { - return this.nodeClient.getTransactionByAddress(chainId, address); - } - - async getTransactionByHash(txHash: string): Promise { - return this.nodeClient.getTransactionByHash(txHash); - } - - async getAllSupportedChains(): Promise { - return this.nodeClient.getAllSupportedChains(); - } - - getImplementationAddress(): string { - return this.implementationAddress; - } - - async enableModule(moduleAddress: string): Promise { + async enableModule(moduleAddress: Hex): Promise { const tx: Transaction = await this.getEnableModuleData(moduleAddress); const partialUserOp = await this.buildUserOp([tx]); return this.sendUserOp(partialUserOp); } - async getEnableModuleData(moduleAddress: string): Promise { - const accountContract = await this._getAccountContract(); - const data = accountContract.interface.encodeFunctionData("enableModule", [moduleAddress]); + async getEnableModuleData(moduleAddress: Hex): Promise { + const callData = encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "enableModule", + args: [moduleAddress], + }); const tx: Transaction = { - to: await this.getAccountAddress(), - value: "0", - data: data as string, + to: await this.getAddress(), + value: "0x00", + data: callData, }; return tx; } - async getSetupAndEnableModuleData(moduleAddress: string, moduleSetupData: string): Promise { - const accountContract = await this._getAccountContract(); - const data = accountContract.interface.encodeFunctionData("setupAndEnableModule", [moduleAddress, moduleSetupData]); + async getSetupAndEnableModuleData(moduleAddress: Hex, moduleSetupData: Hex): Promise { + const callData = encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "setupAndEnableModule", + args: [moduleAddress, moduleSetupData], + }); const tx: Transaction = { - to: await this.getAccountAddress(), - value: "0", - data: data, + to: await this.getAddress(), + value: "0x00", + data: callData, }; return tx; } - async disableModule(prevModule: string, moduleAddress: string): Promise { + async disableModule(prevModule: Hex, moduleAddress: Hex): Promise { const tx: Transaction = await this.getDisableModuleData(prevModule, moduleAddress); const partialUserOp = await this.buildUserOp([tx]); return this.sendUserOp(partialUserOp); } - async getDisableModuleData(prevModule: string, moduleAddress: string): Promise { - const accountContract = await this._getAccountContract(); - const data = accountContract.interface.encodeFunctionData("disableModule", [prevModule, moduleAddress]); + async getDisableModuleData(prevModule: Hex, moduleAddress: Hex): Promise { + const callData = encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "disableModule", + args: [prevModule, moduleAddress], + }); const tx: Transaction = { - to: await this.getAccountAddress(), - value: "0", - data: data, + to: await this.getAddress(), + value: "0x00", + data: callData, }; return tx; } - async isModuleEnabled(moduleName: string): Promise { + async isModuleEnabled(moduleAddress: Hex): Promise { const accountContract = await this._getAccountContract(); - return accountContract.isModuleEnabled(moduleName); + return accountContract.read.isModuleEnabled([moduleAddress]); } + // Review async getAllModules(pageSize?: number): Promise> { pageSize = pageSize ?? 100; const accountContract = await this._getAccountContract(); - // Note: If page size is lower then on the next page start module would be module at the end of first page and not SENTINEL_MODULE - const result: Array> = await accountContract.getModulesPaginated(this.SENTINEL_MODULE, pageSize); + const result = await accountContract.read.getModulesPaginated([this.SENTINEL_MODULE as Hex, BigInt(pageSize)]); const modules: Array = result[0] as Array; return modules; } diff --git a/packages/account/src/SmartAccount.ts b/packages/account/src/SmartAccount.ts deleted file mode 100644 index 7ca709e97..000000000 --- a/packages/account/src/SmartAccount.ts +++ /dev/null @@ -1,314 +0,0 @@ -import { JsonRpcProvider } from "@ethersproject/providers"; -import { BigNumber, Signer, BytesLike } from "ethers"; -import { ISmartAccount } from "./interfaces/ISmartAccount"; -import { defaultAbiCoder, keccak256, arrayify } from "ethers/lib/utils"; -import { UserOperation, ChainId } from "@biconomy/core-types"; -import { calcPreVerificationGas, DefaultGasLimits } from "./utils/Preverificaiton"; -import { packUserOp, isNullOrUndefined } from "@biconomy/common"; - -import { IBundler, UserOpResponse } from "@biconomy/bundler"; -import { IPaymaster, PaymasterAndDataResponse } from "@biconomy/paymaster"; -import { Logger } from "@biconomy/common"; -import { IEntryPoint } from "@account-abstraction/contracts"; -import { SponsorUserOperationDto, BiconomyPaymaster, IHybridPaymaster, PaymasterMode } from "@biconomy/paymaster"; -import { SmartAccountConfig, SendUserOpDto, EstimateUserOpGasParams } from "./utils/Types"; -import { DefaultGasLimit } from "./utils/Constants"; - -type UserOperationKey = keyof UserOperation; - -// Notice: only to be used as base class for child class BiconomySmartAccount(V1) -export abstract class SmartAccount implements ISmartAccount { - bundler!: IBundler; - - paymaster!: IPaymaster; - - initCode = "0x"; - - // Ideally proxy should be defined in child class, if it's meant to be of type Biconomy SmartAccount - proxy!: any; - - owner!: string; - - provider!: JsonRpcProvider; - - entryPoint!: IEntryPoint; - - chainId!: ChainId; - - signer!: Signer; - - smartAccountConfig: SmartAccountConfig; - - constructor(_smartAccountConfig: SmartAccountConfig) { - this.smartAccountConfig = _smartAccountConfig; - } - - setEntryPointAddress(entryPointAddress: string): void { - this.smartAccountConfig.entryPointAddress = entryPointAddress; - } - - private validateUserOp(userOp: Partial, requiredFields: UserOperationKey[]): boolean { - for (const field of requiredFields) { - if (isNullOrUndefined(userOp[field])) { - throw new Error(`${String(field)} is missing in the UserOp`); - } - } - return true; - } - - isProxyDefined(): boolean { - if (!this.proxy) throw new Error("Proxy is undefined"); - - return true; - } - - isSignerDefined(): boolean { - if (!this.signer) throw new Error("Signer is undefined"); - - return true; - } - - isProviderDefined(): boolean { - if (!this.provider) throw new Error("Provider is undefined"); - - return true; - } - - abstract getDummySignature(): string; - - async calculateUserOpGasValues(userOp: Partial): Promise> { - if (!this.provider) throw new Error("Provider is not present for making rpc calls"); - const feeData = await this.provider.getFeeData(); - userOp.maxFeePerGas = userOp.maxFeePerGas ?? feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - userOp.maxPriorityFeePerGas = - userOp.maxPriorityFeePerGas ?? feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - if (userOp.initCode) - userOp.verificationGasLimit = - userOp.verificationGasLimit !== null || userOp.verificationGasLimit !== undefined - ? userOp.verificationGasLimit - : await this.getVerificationGasLimit(userOp.initCode); - userOp.callGasLimit = - userOp.callGasLimit !== null || userOp.callGasLimit !== undefined - ? userOp.callGasLimit - : await this.provider.estimateGas({ - from: this.smartAccountConfig.entryPointAddress, - to: userOp.sender, - data: userOp.callData, - }); - userOp.preVerificationGas = - userOp.preVerificationGas !== null || userOp.preVerificationGas !== undefined ? userOp.preVerificationGas : this.getPreVerificationGas(userOp); - return userOp; - } - - async estimateUserOpGas(params: EstimateUserOpGasParams): Promise> { - let userOp = params.userOp; - const { overrides, skipBundlerGasEstimation, paymasterServiceData } = params; - const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; - this.validateUserOp(userOp, requiredFields); - - let finalUserOp = userOp; - const skipBundlerCall = skipBundlerGasEstimation ?? true; - // Override gas values in userOp if provided in overrides params - if (overrides) { - userOp = { ...userOp, ...overrides }; - } - - Logger.log("userOp in estimation", userOp); - - if (skipBundlerCall) { - if (this.paymaster && this.paymaster instanceof BiconomyPaymaster) { - if (isNullOrUndefined(userOp.maxFeePerGas) || isNullOrUndefined(userOp.maxPriorityFeePerGas)) { - throw new Error("maxFeePerGas and maxPriorityFeePerGas are required for skipBundlerCall mode"); - } - if (paymasterServiceData?.mode === PaymasterMode.SPONSORED) { - const v1BiconomyInfo = { - name: "BICONOMY", - version: "1.0.0", - }; - const smartAccountInfo = paymasterServiceData?.smartAccountInfo ?? v1BiconomyInfo; - paymasterServiceData.smartAccountInfo = smartAccountInfo; - - // Making call to paymaster to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, paymasterAndData } = await ( - this.paymaster as IHybridPaymaster - ).getPaymasterAndData(userOp, paymasterServiceData); - if (paymasterAndData === "0x" && (callGasLimit === undefined || verificationGasLimit === undefined || preVerificationGas === undefined)) { - throw new Error("Since you intend to use sponsorship paymaster, please check and make sure policies are set on the dashboard"); - } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = paymasterAndData ?? userOp.paymasterAndData; - } else { - // use dummy values for gas limits as fee quote call will ignore this later. - finalUserOp.callGasLimit = DefaultGasLimit.callGasLimit; - finalUserOp.verificationGasLimit = DefaultGasLimit.verificationGasLimit; - finalUserOp.preVerificationGas = DefaultGasLimit.preVerificationGas; - } - } else { - Logger.warn("Skipped paymaster call. If you are using paymasterAndData, generate data externally"); - finalUserOp = await this.calculateUserOpGasValues(userOp); - finalUserOp.paymasterAndData = "0x"; - } - } else { - if (!this.bundler) throw new Error("Bundler is not provided"); - delete userOp.maxFeePerGas; - delete userOp.maxPriorityFeePerGas; - // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = - await this.bundler.estimateUserOpGas(userOp); - // if neither user sent gas fee nor the bundler, estimate gas from provider - if ( - isNullOrUndefined(userOp.maxFeePerGas) && - isNullOrUndefined(userOp.maxPriorityFeePerGas) && - (isNullOrUndefined(maxFeePerGas) || isNullOrUndefined(maxPriorityFeePerGas)) - ) { - const feeData = await this.provider.getFeeData(); - finalUserOp.maxFeePerGas = feeData.maxFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? feeData.gasPrice ?? (await this.provider.getGasPrice()); - } else { - finalUserOp.maxFeePerGas = maxFeePerGas ?? userOp.maxFeePerGas; - finalUserOp.maxPriorityFeePerGas = maxPriorityFeePerGas ?? userOp.maxPriorityFeePerGas; - } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas; - finalUserOp.paymasterAndData = "0x"; - } - return finalUserOp; - } - - async isAccountDeployed(address: string): Promise { - this.isProviderDefined(); - const contractCode = await this.provider.getCode(address); - return contractCode !== "0x"; - } - - // Would only be used if paymaster is attached - async getPaymasterAndData(userOp: Partial): Promise { - if (this.paymaster) { - const paymasterAndDataResponse: PaymasterAndDataResponse = await this.paymaster.getPaymasterAndData(userOp); - return paymasterAndDataResponse.paymasterAndData; - } - return "0x"; - } - - nonce(): Promise { - this.isProxyDefined(); - return this.proxy.nonce(); - } - - async signUserOpHash(userOpHash: string, signer?: Signer): Promise { - if (signer) { - return signer.signMessage(arrayify(userOpHash)); - } - if (this.signer) { - return this.signer.signMessage(arrayify(userOpHash)); - } - throw new Error("No signer provided to sign userOp"); - } - - getPreVerificationGas(userOp: Partial): BigNumber { - return calcPreVerificationGas(userOp); - } - - async getVerificationGasLimit(initCode: BytesLike): Promise { - // Verification gas should be max(initGas(wallet deployment) + validateUserOp + validatePaymasterUserOp , postOp) - - const initGas = await this.estimateCreationGas(initCode as string); - const validateUserOpGas = BigNumber.from(DefaultGasLimits.validatePaymasterUserOpGas + DefaultGasLimits.validateUserOpGas); - const postOpGas = BigNumber.from(DefaultGasLimits.postOpGas); - - let verificationGasLimit = BigNumber.from(validateUserOpGas).add(initGas); - - if (BigNumber.from(postOpGas).gt(verificationGasLimit)) { - verificationGasLimit = postOpGas; - } - return verificationGasLimit; - } - - async getUserOpHash(userOp: Partial): Promise { - const userOpHash = keccak256(packUserOp(userOp, true)); - const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, this.entryPoint.address, this.chainId]); - return keccak256(enc); - } - - abstract getSmartAccountAddress(_accountIndex: number): Promise; - - async estimateCreationGas(initCode: string): Promise { - if (initCode == null || initCode === "0x") return BigNumber.from("0"); - const deployerAddress = initCode.substring(0, 42); - const deployerCallData = "0x" + initCode.substring(42); - return this.provider.estimateGas({ to: deployerAddress, data: deployerCallData }); - } - - async signUserOp(userOp: Partial): Promise { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - ]; - this.validateUserOp(userOp, requiredFields); - const userOpHash = await this.getUserOpHash(userOp); - let signature = await this.signUserOpHash(userOpHash, this.signer); - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); - } - if (signature.slice(0, 2) !== "0x") { - signature = "0x" + signature; - } - userOp.signature = signature; - return userOp as UserOperation; - } - - /** - * - * @param userOp - * @description This function call will take 'unsignedUserOp' as an input, sign it with the owner key, and send it to the bundler. - * @returns Promise - */ - async sendUserOp(userOp: Partial, params?: SendUserOpDto): Promise { - Logger.log("userOp received in base account ", userOp); - delete userOp.signature; - const userOperation = await this.signUserOp(userOp); - const bundlerResponse = await this.sendSignedUserOp(userOperation, params); - return bundlerResponse; - } - - /** - * - * @param userOp - * @description This function call will take 'signedUserOp' as input and send it to the bundler - * @returns - */ - async sendSignedUserOp(userOp: UserOperation, params?: SendUserOpDto): Promise { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - "signature", - ]; - this.validateUserOp(userOp, requiredFields); - Logger.log("userOp validated"); - if (!this.bundler) throw new Error("Bundler is not provided"); - Logger.log("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp, params?.simulationType); - return bundlerResponse; - } -} diff --git a/packages/account/src/abi/AccountResolver.ts b/packages/account/src/abi/AccountResolver.ts new file mode 100644 index 000000000..0cbffc749 --- /dev/null +++ b/packages/account/src/abi/AccountResolver.ts @@ -0,0 +1,106 @@ +export const AccountResolverAbi = [ + { + inputs: [ + { internalType: "address", name: "_v1Factory", type: "address" }, + { internalType: "address", name: "_v2Factory", type: "address" }, + { internalType: "address", name: "_ecdsaModule", type: "address" }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "ecdsaOwnershipModule", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "_eoa", type: "address" }, + { internalType: "uint8", name: "_maxIndex", type: "uint8" }, + ], + name: "resolveAddresses", + outputs: [ + { + components: [ + { internalType: "address", name: "accountAddress", type: "address" }, + { internalType: "address", name: "factoryAddress", type: "address" }, + { internalType: "address", name: "currentImplementation", type: "address" }, + { internalType: "string", name: "currentVersion", type: "string" }, + { internalType: "string", name: "factoryVersion", type: "string" }, + { internalType: "uint256", name: "deploymentIndex", type: "uint256" }, + ], + internalType: "struct IAddressResolver.SmartAccountResult[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "_eoa", type: "address" }, + { internalType: "uint8", name: "_maxIndex", type: "uint8" }, + { internalType: "address", name: "_moduleAddress", type: "address" }, + { internalType: "bytes", name: "_moduleSetupData", type: "bytes" }, + ], + name: "resolveAddressesFlexibleForV2", + outputs: [ + { + components: [ + { internalType: "address", name: "accountAddress", type: "address" }, + { internalType: "address", name: "factoryAddress", type: "address" }, + { internalType: "address", name: "currentImplementation", type: "address" }, + { internalType: "string", name: "currentVersion", type: "string" }, + { internalType: "string", name: "factoryVersion", type: "string" }, + { internalType: "uint256", name: "deploymentIndex", type: "uint256" }, + ], + internalType: "struct IAddressResolver.SmartAccountResult[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "_eoa", type: "address" }, + { internalType: "uint8", name: "_maxIndex", type: "uint8" }, + ], + name: "resolveAddressesV1", + outputs: [ + { + components: [ + { internalType: "address", name: "accountAddress", type: "address" }, + { internalType: "address", name: "factoryAddress", type: "address" }, + { internalType: "address", name: "currentImplementation", type: "address" }, + { internalType: "string", name: "currentVersion", type: "string" }, + { internalType: "string", name: "factoryVersion", type: "string" }, + { internalType: "uint256", name: "deploymentIndex", type: "uint256" }, + ], + internalType: "struct IAddressResolver.SmartAccountResult[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "smartAccountFactoryV1", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "smartAccountFactoryV2", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, +] as const; diff --git a/packages/account/src/abi/Factory.ts b/packages/account/src/abi/Factory.ts new file mode 100644 index 000000000..3498dd958 --- /dev/null +++ b/packages/account/src/abi/Factory.ts @@ -0,0 +1,141 @@ +export const BiconomyFactoryAbi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "initialAuthModule", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "AccountCreation", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "initialAuthModule", + type: "address", + }, + ], + name: "AccountCreationWithoutIndex", + type: "event", + }, + { + inputs: [], + name: "accountCreationCode", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + ], + name: "deployAccount", + outputs: [ + { + internalType: "address", + name: "proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "deployCounterFactualAccount", + outputs: [ + { + internalType: "address", + name: "proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "getAddressForCounterFactualAccount", + outputs: [ + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; diff --git a/packages/account/src/abi/SmartAccount.ts b/packages/account/src/abi/SmartAccount.ts new file mode 100644 index 000000000..3542c17d1 --- /dev/null +++ b/packages/account/src/abi/SmartAccount.ts @@ -0,0 +1,944 @@ +export const BiconomyAccountAbi = [ + { + inputs: [], + name: "AlreadyInitialized", + type: "error", + }, + { + inputs: [], + name: "BaseImplementationCannotBeZero", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotAnEntryPoint", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotEntryPoint", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotEntryPointOrOwner", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotEntryPointOrSelf", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotOwner", + type: "error", + }, + { + inputs: [], + name: "DelegateCallsOnly", + type: "error", + }, + { + inputs: [], + name: "EntryPointCannotBeZero", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "implementationAddress", + type: "address", + }, + ], + name: "InvalidImplementation", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "MixedAuthFail", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleAlreadyEnabled", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "expectedModule", + type: "address", + }, + { + internalType: "address", + name: "returnedModule", + type: "address", + }, + { + internalType: "address", + name: "prevModule", + type: "address", + }, + ], + name: "ModuleAndPrevModuleMismatch", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleCannotBeZeroOrSentinel", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleNotEnabled", + type: "error", + }, + { + inputs: [], + name: "ModulesAlreadyInitialized", + type: "error", + }, + { + inputs: [], + name: "ModulesSetupExecutionFailed", + type: "error", + }, + { + inputs: [], + name: "OwnerCanNotBeSelf", + type: "error", + }, + { + inputs: [], + name: "OwnerCannotBeZero", + type: "error", + }, + { + inputs: [], + name: "OwnerProvidedIsSame", + type: "error", + }, + { + inputs: [], + name: "TransferToZeroAddressAttempt", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "destLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "valueLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "funcLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "operationLength", + type: "uint256", + }, + ], + name: "WrongBatchProvided", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes", + name: "contractSignature", + type: "bytes", + }, + ], + name: "WrongContractSignature", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "uintS", + type: "uint256", + }, + { + internalType: "uint256", + name: "contractSignatureLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "signatureLength", + type: "uint256", + }, + ], + name: "WrongContractSignatureFormat", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleAddressProvided", + type: "address", + }, + ], + name: "WrongValidationModule", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "DisabledModule", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "EnabledModule", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ExecutionFromModuleFailure", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ExecutionFromModuleSuccess", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "oldImplementation", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "ImplementationUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "ModuleTransaction", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "SmartAccountReceivedNativeToken", + type: "event", + }, + { + inputs: [], + name: "VERSION", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "prevModule", + type: "address", + }, + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "disableModule", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "enableModule", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "to", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "data", + type: "bytes[]", + }, + { + internalType: "enum Enum.Operation[]", + name: "operations", + type: "uint8[]", + }, + ], + name: "execBatchTransactionFromModule", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + { + internalType: "uint256", + name: "txGas", + type: "uint256", + }, + ], + name: "execTransactionFromModule", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "execTransactionFromModule", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "execTransactionFromModuleReturnData", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + { + internalType: "bytes", + name: "returnData", + type: "bytes", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch_y6U", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute_ncC", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getImplementation", + outputs: [ + { + internalType: "address", + name: "_implementation", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "start", + type: "address", + }, + { + internalType: "uint256", + name: "pageSize", + type: "uint256", + }, + ], + name: "getModulesPaginated", + outputs: [ + { + internalType: "address[]", + name: "array", + type: "address[]", + }, + { + internalType: "address", + name: "next", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "handler", + type: "address", + }, + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + ], + name: "init", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "isModuleEnabled", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint192", + name: "_key", + type: "uint192", + }, + ], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "setupContract", + type: "address", + }, + { + internalType: "bytes", + name: "setupData", + type: "bytes", + }, + ], + name: "setupAndEnableModule", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_implementation", + type: "address", + }, + ], + name: "updateImplementation", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "payable", + type: "function", + }, +] as const; diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index d43249476..615c0a6da 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -1,9 +1,43 @@ -export * from "./interfaces/ISmartAccount"; -export * from "./interfaces/IBaseSmartAccount"; -export * from "./interfaces/IBiconomySmartAccount"; -export * from "./utils/Types"; -export * from "./SmartAccount"; -export * from "./BiconomySmartAccount"; -export * from "./utils/Constants"; -export * from "./BiconomySmartAccountV2"; -export * from "./utils/VoidSigner"; +import { BiconomySmartAccountV2 } from "./BiconomySmartAccountV2.js"; +import { type BiconomySmartAccountV2Config } from "./utils/Types.js"; + +export * from "./utils/Types.js"; +export * from "./utils/Constants.js"; +export * from "./BiconomySmartAccountV2.js"; + +export { WalletClientSigner, LocalAccountSigner, type SmartAccountSigner } from "@alchemy/aa-core"; +export { + BiconomyPaymaster as Paymaster, + type IPaymaster, + PaymasterMode, + type IHybridPaymaster, + type PaymasterFeeQuote, + type SponsorUserOperationDto, + type FeeQuotesOrDataResponse, + createPaymaster, +} from "@biconomy/paymaster"; +export { EthersSigner, convertSigner, type LightSigner } from "@biconomy/common"; +export { + Bundler, + type IBundler, + extractChainIdFromBundlerUrl, + type UserOpResponse, + type UserOpStatus, + type UserOpReceipt, + createBundler, +} from "@biconomy/bundler"; +export { + createECDSAOwnershipValidationModule, + createERC20SessionValidationModule, + createBatchedSessionRouterModule, + createSessionKeyManagerModule, + createMultiChainValidationModule, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + DEFAULT_SESSION_KEY_MANAGER_MODULE, + DEFAULT_MULTICHAIN_MODULE, + DEFAULT_BATCHED_SESSION_ROUTER_MODULE, +} from "@biconomy/modules"; + +export const createSmartAccountClient = BiconomySmartAccountV2.create; + +export type SmartWalletConfig = BiconomySmartAccountV2Config; diff --git a/packages/account/src/interfaces/IBaseSmartAccount.ts b/packages/account/src/interfaces/IBaseSmartAccount.ts deleted file mode 100644 index 64cc5fc92..000000000 --- a/packages/account/src/interfaces/IBaseSmartAccount.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { UserOperation } from "@biconomy/core-types"; -import { BigNumberish, Bytes, BytesLike, BigNumber } from "ethers"; -/** - * Interface for Smart Contract Wallet aka Smart Account. - * This SA does not have to implement ERC4337 interfaces - */ -export interface INon4337Account { - estimateCreationGas(_initCode: string): Promise; - getNonce(): Promise; - signMessage(_message: Bytes | string): Promise; - getAccountAddress(_accountIndex?: number): Promise; -} - -export interface IBaseSmartAccount extends INon4337Account { - getVerificationGasLimit(_initCode: BytesLike): Promise; - getPreVerificationGas(_userOp: Partial): Promise; - signUserOp(_userOp: UserOperation): Promise; - signUserOpHash(_userOpHash: string): Promise; - getUserOpHash(_userOp: Partial): Promise; - getAccountInitCode(): Promise; - getDummySignature(): Promise; -} diff --git a/packages/account/src/interfaces/IBiconomySmartAccount.ts b/packages/account/src/interfaces/IBiconomySmartAccount.ts deleted file mode 100644 index 2534ae461..000000000 --- a/packages/account/src/interfaces/IBiconomySmartAccount.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { UserOperation, Transaction } from "@biconomy/core-types"; -import { - SupportedChainsResponse, - BalancesResponse, - BalancesDto, - UsdBalanceResponse, - SmartAccountByOwnerDto, - SmartAccountsResponse, - SCWTransactionResponse, -} from "@biconomy/node-client"; -import { Overrides, InitilizationData } from "../utils/Types"; -import { BigNumberish, BytesLike } from "ethers"; -import { ISmartAccount } from "./ISmartAccount"; -import { Signer } from "ethers"; - -export interface IBiconomySmartAccount extends ISmartAccount { - init(_initilizationData?: InitilizationData): Promise; - initializeAccountAtIndex(_accountIndex: number): void; - getExecuteCallData(_to: string, _value: BigNumberish, _data: BytesLike): string; - getExecuteBatchCallData(_to: Array, _value: Array, _data: Array): string; - buildUserOp(_transactions: Transaction[], _overrides?: Overrides): Promise>; - getAllTokenBalances(_balancesDto: BalancesDto): Promise; - getTotalBalanceInUsd(_balancesDto: BalancesDto): Promise; - getSmartAccountsByOwner(_smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise; - getTransactionsByAddress(_chainId: number, _address: string): Promise; - getTransactionByHash(_txHash: string): Promise; - getAllSupportedChains(): Promise; - attachSigner(_signer: Signer): Promise; -} diff --git a/packages/account/src/interfaces/ISmartAccount.ts b/packages/account/src/interfaces/ISmartAccount.ts deleted file mode 100644 index fce4a8f8c..000000000 --- a/packages/account/src/interfaces/ISmartAccount.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { UserOperation } from "@biconomy/core-types"; -import { UserOpResponse } from "@biconomy/bundler"; -export interface ISmartAccount { - getSmartAccountAddress(_accountIndex: number): Promise; - signUserOp(_userOp: UserOperation): Promise; - sendUserOp(_userOp: UserOperation): Promise; - sendSignedUserOp(_userOp: UserOperation): Promise; -} diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 40a5c053e..d6f52fc7a 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -1,4 +1,3 @@ -import { ChainId } from "@biconomy/core-types"; import { EntryPointAddresses, BiconomyFactories, @@ -8,6 +7,8 @@ import { BiconomyImplementationsByVersion, } from "./Types"; +export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000"; + // will always be latest entrypoint address export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { @@ -43,7 +44,7 @@ export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementatio Object.entries(BICONOMY_IMPLEMENTATION_ADDRESSES).map(([k, v]) => [v, k]), ); -export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101]; +export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101]; export const PROXY_CREATION_CODE = "0x6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033"; @@ -55,3 +56,9 @@ export const DefaultGasLimit = { verificationGasLimit: 1000000, preVerificationGas: 100000, }; + +export const ERROR_MESSAGES = { + SPENDER_REQUIRED: "spender is required for ERC20 mode", + NO_FEE_QUOTE: "FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote", + FAILED_FEE_QUOTE_FETCH: "Failed to fetch fee quote", +}; diff --git a/packages/account/src/utils/Preverificaiton.ts b/packages/account/src/utils/Preverificaiton.ts deleted file mode 100644 index 5b32b0054..000000000 --- a/packages/account/src/utils/Preverificaiton.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { UserOperation } from "@biconomy/core-types"; -import { NotPromise, packUserOp } from "@biconomy/common"; // '@account-abstraction/utils' -import { arrayify, hexlify } from "ethers/lib/utils"; -import { BigNumber } from "ethers"; -export interface GasOverheads { - /** - * fixed overhead for entire handleOp bundle. - */ - fixed: number; - - /** - * per userOp overhead, added on top of the above fixed per-bundle. - */ - perUserOp: number; - - /** - * overhead for userOp word (32 bytes) block - */ - perUserOpWord: number; - - // perCallDataWord: number - - /** - * zero byte cost, for calldata gas cost calculations - */ - zeroByte: number; - - /** - * non-zero byte cost, for calldata gas cost calculations - */ - nonZeroByte: number; - - /** - * expected bundle size, to split per-bundle overhead between all ops. - */ - bundleSize: number; - - /** - * expected length of the userOp signature. - */ - sigSize: number; -} - -export interface VerificationGasLimits { - /** - * per userOp gasLimit for validateUserOp() - * called from entrypoint to the account - * should consider max execution - */ - validateUserOpGas: number; - - /** - * per userOp gasLimit for validatePaymasterUserOp() - * called from entrypoint to the paymaster - * should consider max execution - */ - validatePaymasterUserOpGas: number; - - /** - * per userOp gasLimit for postOp() - * called from entrypoint to the paymaster - * should consider max execution for paymaster/s this account may use - */ - postOpGas: number; -} - -export const DefaultGasOverheads: GasOverheads = { - fixed: 21000, - perUserOp: 18300, - perUserOpWord: 4, - zeroByte: 4, - nonZeroByte: 16, - bundleSize: 1, - sigSize: 65, -}; - -export const DefaultGasLimits: VerificationGasLimits = { - validateUserOpGas: 100000, - validatePaymasterUserOpGas: 100000, - postOpGas: 10877, -}; - -/** - * calculate the preVerificationGas of the given UserOperation - * preVerificationGas (by definition) is the cost overhead that can't be calculated on-chain. - * it is based on parameters that are defined by the Ethereum protocol for external transactions. - * @param userOp filled userOp to calculate. The only possible missing fields can be the signature and preVerificationGas itself - * @param overheads gas overheads to use, to override the default values - */ -export function calcPreVerificationGas(userOp: Partial>, overheads?: Partial): BigNumber { - const ov = { ...DefaultGasOverheads, ...(overheads ?? {}) }; - /* eslint-disable @typescript-eslint/no-explicit-any */ - const p: NotPromise = { - // dummy values, in case the UserOp is incomplete. - paymasterAndData: "0x", - preVerificationGas: BigNumber.from(21000), // dummy value, just for calldata cost - signature: hexlify(Buffer.alloc(ov.sigSize, 1)), // dummy signature - ...userOp, - } as any; - - const packed = arrayify(packUserOp(p, false)); - const lengthInWord = (packed.length + 31) / 32; - /** - * general explanation - * 21000 base gas - * ~ 18300 gas per userOp : corresponds to _validateAccountAndPaymasterValidationData() method, - * Some lines in _handlePostOp() after actualGasCost calculation and compensate() method called in handleOps() method - * plus any gas overhead that can't be tracked on-chain - * (if bundler needs to charge the premium one way is to increase this value for ops to sign) - */ - const callDataCost = packed.map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte)).reduce((sum, x) => sum + x); - const ret = Math.round(callDataCost + ov.fixed / ov.bundleSize + ov.perUserOp + ov.perUserOpWord * lengthInWord); - if (ret) { - return BigNumber.from(ret); - } else { - throw new Error("can't calculate preVerificationGas"); - } -} diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 942166b5b..0967d0f8f 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -1,151 +1,179 @@ -import { Signer } from "ethers"; -import { BigNumberish, BigNumber } from "ethers"; +import { BigNumberish, SmartAccountSigner, UserOperationStruct } from "@alchemy/aa-core"; import { IBundler } from "@biconomy/bundler"; -import { IPaymaster, PaymasterFeeQuote, SponsorUserOperationDto } from "@biconomy/paymaster"; +import { + type FeeQuotesOrDataDto, + type IPaymaster, + type PaymasterFeeQuote, + PaymasterMode, + type SmartAccountData, + type SponsorUserOperationDto, +} from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; -import { Provider } from "@ethersproject/providers"; -import { GasOverheads } from "./Preverificaiton"; -import { UserOperation, ChainId } from "@biconomy/core-types"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { Hex, WalletClient } from "viem"; +import { SupportedSigner } from "@biconomy/common"; -export type EntryPointAddresses = { - [address: string]: string; -}; - -export type BiconomyFactories = { - [address: string]: string; -}; - -export type BiconomyImplementations = { - [address: string]: string; -}; - -export type EntryPointAddressesByVersion = { - [version: string]: string; -}; - -export type BiconomyFactoriesByVersion = { - [version: string]: string; -}; - -export type BiconomyImplementationsByVersion = { - [version: string]: string; -}; +export type EntryPointAddresses = Record; +export type BiconomyFactories = Record; +export type BiconomyImplementations = Record; +export type EntryPointAddressesByVersion = Record; +export type BiconomyFactoriesByVersion = Record; +export type BiconomyImplementationsByVersion = Record; export type SmartAccountConfig = { + /** entryPointAddress: address of the smart account factory */ entryPointAddress: string; + /** factoryAddress: address of the smart account factory */ bundler?: IBundler; }; -/** - * Enum representing available validation modules. - * - * - `ECDSA_OWNERSHIP`: Default module for ECDSA ownership validation. - * - `MULTICHAIN`: Default module for multi-chain validation. - * - If you don't provide any module, ECDSA_OWNERSHIP will be used as default - */ -/*export enum AuthorizationModuleType { - ECDSA_OWNERSHIP = DEFAULT_ECDSA_OWNERSHIP_MODULE, - // MULTICHAIN = DEFAULT_MULTICHAIN_MODULE, -}*/ - -export type BaseSmartAccountConfig = ConditionalBundlerProps & { - // owner?: Signer // can be in child classes +export interface GasOverheads { + /** fixed: fixed gas overhead */ + fixed: number; + /** perUserOp: per user operation gas overhead */ + perUserOp: number; + /** perUserOpWord: per user operation word gas overhead */ + perUserOpWord: number; + /** zeroByte: per byte gas overhead */ + zeroByte: number; + /** nonZeroByte: per non zero byte gas overhead */ + nonZeroByte: number; + /** bundleSize: per signature bundleSize */ + bundleSize: number; + /** sigSize: sigSize gas overhead */ + sigSize: number; +} + +export type BaseSmartAccountConfig = { + /** index: helps to not conflict with other smart account instances */ index?: number; - provider?: Provider; + /** provider: WalletClientSigner from viem */ + provider?: WalletClient; + /** entryPointAddress: address of the smart account entry point */ entryPointAddress?: string; + /** accountAddress: address of the smart account, potentially counterfactual */ accountAddress?: string; + /** overheads: {@link GasOverheads} */ overheads?: Partial; - paymaster?: IPaymaster; // PaymasterAPI - chainId: ChainId; + /** paymaster: {@link IPaymaster} interface */ + paymaster?: IPaymaster; + /** chainId: chainId of the network */ + chainId?: number; }; export type BiconomyTokenPaymasterRequest = { + /** feeQuote: {@link PaymasterFeeQuote} */ feeQuote: PaymasterFeeQuote; - spender: string; + /** spender: The address of the spender who is paying for the transaction, this can usually be set to feeQuotesResponse.tokenPaymasterAddress */ + spender: Hex; + /** maxApproval: If set to true, the paymaster will approve the maximum amount of tokens required for the transaction. Not recommended */ maxApproval?: boolean; }; -export type BiconomySmartAccountConfig = { - signer: Signer; - rpcUrl?: string; - chainId: ChainId; - entryPointAddress?: string; - bundler?: IBundler; - paymaster?: IPaymaster; - nodeClientUrl?: string; -}; - -type RequireAtLeastOne = Pick> & +export type RequireAtLeastOne = Pick> & { [K in Keys]-?: Required> & Partial>>; }[Keys]; -type ConditionalValidationProps = RequireAtLeastOne< - { - defaultValidationModule: BaseValidationModule; - signer: Signer | WalletClientSigner; - }, - "defaultValidationModule" | "signer" ->; - -type ConditionalBundlerProps = RequireAtLeastOne< +export type ConditionalBundlerProps = RequireAtLeastOne< { bundler: IBundler; bundlerUrl: string; }, "bundler" | "bundlerUrl" >; +export type ResolvedBundlerProps = { + bundler: IBundler; +}; +export type ConditionalValidationProps = RequireAtLeastOne< + { + defaultValidationModule: BaseValidationModule; + signer: SupportedSigner; + }, + "defaultValidationModule" | "signer" +>; -export type BiconomySmartAccountV2Config = BaseSmartAccountConfig & - ConditionalValidationProps & { - factoryAddress?: string; - senderAddress?: string; - implementationAddress?: string; - defaultFallbackHandler?: string; - biconomyPaymasterApiKey?: string; - rpcUrl?: string; - nodeClientUrl?: string; - activeValidationModule?: BaseValidationModule; - scanForUpgradedAccountsFromV1?: boolean; - maxIndexForScan?: number; - }; +export type ResolvedValidationProps = { + /** defaultValidationModule: {@link BaseValidationModule} */ + defaultValidationModule: BaseValidationModule; + /** activeValidationModule: {@link BaseValidationModule}. The active validation module. Will default to the defaultValidationModule */ + activeValidationModule: BaseValidationModule; + /** signer: ethers Wallet, viemWallet or alchemys SmartAccountSigner */ + signer: SmartAccountSigner; + /** chainId: chainId of the network */ + chainId: number; +}; + +export type BiconomySmartAccountV2ConfigBaseProps = { + /** Factory address of biconomy factory contract or some other contract you have deployed on chain */ + factoryAddress?: Hex; + /** Sender address: If you want to override the Signer address with some other address and get counterfactual address can use this to pass the EOA and get SA address */ + senderAddress?: Hex; + /** implementation of smart contract address or some other contract you have deployed and want to override */ + implementationAddress?: Hex; + /** defaultFallbackHandler: override the default fallback contract address */ + defaultFallbackHandler?: Hex; + /** rpcUrl: Explicitly set the rpc else it is pulled out of the signer. */ + rpcUrl?: string; // as good as Provider + /** biconomyPaymasterApiKey: The API key retrieved from the Biconomy dashboard */ + biconomyPaymasterApiKey?: string; + /** activeValidationModule: The active validation module. Will default to the defaultValidationModule */ + activeValidationModule?: BaseValidationModule; + /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ + scanForUpgradedAccountsFromV1?: boolean; + /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ + maxIndexForScan?: number; +}; +export type BiconomySmartAccountV2Config = BiconomySmartAccountV2ConfigBaseProps & + BaseSmartAccountConfig & + ConditionalBundlerProps & + ConditionalValidationProps; + +export type BiconomySmartAccountV2ConfigConstructorProps = BiconomySmartAccountV2ConfigBaseProps & + BaseSmartAccountConfig & + ResolvedBundlerProps & + ResolvedValidationProps; export type BuildUserOpOptions = { - overrides?: Overrides; - skipBundlerGasEstimation?: boolean; + /** overrides: Explicitly set gas values */ + // overrides?: Overrides; + /** Not currently in use */ + // skipBundlerGasEstimation?: boolean; + /** params relevant to the module, mostly relevant to sessions */ params?: ModuleInfo; + /** nonceOptions: For overriding the nonce */ nonceOptions?: NonceOptions; + /** forceEncodeForBatch: For encoding the user operation for batch */ forceEncodeForBatch?: boolean; - paymasterServiceData?: SponsorUserOperationDto; + /** paymasterServiceData: Options specific to transactions that involve a paymaster */ + paymasterServiceData?: PaymasterUserOperationDto; + /** simulationType: Determine which parts of the tx a bundler will simulate: "validation" | "validation_and_execution". */ + simulationType?: SimulationType; }; export type NonceOptions = { + /** nonceKey: The key to use for nonce */ nonceKey?: number; + /** nonceOverride: The nonce to use for the transaction */ nonceOverride?: number; }; -// Used in AccountV1 -export type SendUserOpDto = { - signer?: Signer; - simulationType?: SimulationType; -}; - -// Generic options in AccountV2 -export type SendUserOpOptions = { - simulationType?: SimulationType; -}; - export type SimulationType = "validation" | "validation_and_execution"; export type Overrides = { - callGasLimit?: BigNumberish; - verificationGasLimit?: BigNumberish; - preVerificationGas?: BigNumberish; - maxFeePerGas?: BigNumberish; - maxPriorityFeePerGas?: BigNumberish; - paymasterData?: string; - signature?: string; + /* Value used by inner account execution */ + callGasLimit?: Hex; + /* Actual gas used by the validation of this UserOperation */ + verificationGasLimit?: Hex; + /* Gas overhead of this UserOperation */ + preVerificationGas?: Hex; + /* Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) */ + maxFeePerGas?: Hex; + /* Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) */ + maxPriorityFeePerGas?: Hex; + /* Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster ("0x" for self-sponsored transaction) */ + paymasterData?: Hex; + /* Data passed into the account along with the nonce during the verification step */ + signature?: Hex; }; export type InitilizationData = { @@ -153,47 +181,97 @@ export type InitilizationData = { signerAddress?: string; }; +export type PaymasterUserOperationDto = SponsorUserOperationDto & + FeeQuotesOrDataDto & { + /** mode: sponsored or erc20 */ + mode: PaymasterMode; + /** Always recommended, especially when using token paymaster */ + calculateGasLimits?: boolean; + /** Expiry duration in seconds */ + expiryDuration?: number; + /** Webhooks to be fired after user op is sent */ + webhookData?: Record; + /** Smart account meta data */ + smartAccountInfo?: SmartAccountData; + /** the fee-paying token address */ + feeTokenAddress?: string; + /** The fee quote */ + feeQuote?: PaymasterFeeQuote; + /** The address of the spender. This is usually set to FeeQuotesOrDataResponse.tokenPaymasterAddress */ + spender?: Hex; + /** Not recommended */ + maxApproval?: boolean; + }; + export type InitializeV2Data = { accountIndex?: number; }; export type EstimateUserOpGasParams = { - userOp: Partial; - overrides?: Overrides; - skipBundlerGasEstimation?: boolean; + userOp: Partial; + // overrides?: Overrides; + /** Currrently has no effect */ + // skipBundlerGasEstimation?: boolean; + /** paymasterServiceData: Options specific to transactions that involve a paymaster */ paymasterServiceData?: SponsorUserOperationDto; }; export interface TransactionDetailsForUserOp { + /** target: The address of the contract to call */ target: string; + /** data: The data to send to the contract */ data: string; + /** value: The value to send to the contract */ value?: BigNumberish; + /** gasLimit: The gas limit to use for the transaction */ gasLimit?: BigNumberish; + /** maxFeePerGas: The maximum fee per gas to use for the transaction */ maxFeePerGas?: BigNumberish; + /** maxPriorityFeePerGas: The maximum priority fee per gas to use for the transaction */ maxPriorityFeePerGas?: BigNumberish; + /** nonce: The nonce to use for the transaction */ nonce?: BigNumberish; } export type CounterFactualAddressParam = { index?: number; validationModule?: BaseValidationModule; + /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ scanForUpgradedAccountsFromV1?: boolean; + /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ maxIndexForScan?: number; }; export type QueryParamsForAddressResolver = { - eoaAddress: string; + eoaAddress: Hex; index: number; - moduleAddress: string; - moduleSetupData: string; + moduleAddress: Hex; + moduleSetupData: Hex; maxIndexForScan?: number; }; export type SmartAccountInfo = { - accountAddress: string; - factoryAddress: string; + /** accountAddress: The address of the smart account */ + accountAddress: Hex; + /** factoryAddress: The address of the smart account factory */ + factoryAddress: Hex; + /** currentImplementation: The address of the current implementation */ currentImplementation: string; + /** currentVersion: The version of the smart account */ currentVersion: string; + /** factoryVersion: The version of the factory */ factoryVersion: string; - deploymentIndex: BigNumber; + /** deploymentIndex: The index of the deployment */ + deploymentIndex: BigNumberish; }; + +export type ValueOrData = RequireAtLeastOne< + { + value: BigNumberish | string; + data: string; + }, + "value" | "data" +>; +export type Transaction = { + to: string; +} & ValueOrData; diff --git a/packages/account/src/utils/Utils.ts b/packages/account/src/utils/Utils.ts new file mode 100644 index 000000000..d905506c9 --- /dev/null +++ b/packages/account/src/utils/Utils.ts @@ -0,0 +1,45 @@ +import { encodeAbiParameters, parseAbiParameters, keccak256, Hex } from "viem"; +import type { UserOperationStruct } from "@alchemy/aa-core"; + +/** + * pack the userOperation + * @param op + * @param forSignature "true" if the hash is needed to calculate the getUserOpHash() + * "false" to pack entire UserOp, for calculating the calldata cost of putting it on-chain. + */ +export function packUserOp(op: Partial, forSignature = true): string { + if (!op.initCode || !op.callData || !op.paymasterAndData) throw new Error("Missing userOp properties"); + if (forSignature) { + return encodeAbiParameters(parseAbiParameters("address, uint256, bytes32, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32"), [ + op.sender as Hex, + BigInt(op.nonce as Hex), + keccak256(op.initCode as Hex), + keccak256(op.callData as Hex), + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + keccak256(op.paymasterAndData as Hex), + ]); + } else { + // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) + return encodeAbiParameters(parseAbiParameters("address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes, bytes"), [ + op.sender as Hex, + BigInt(op.nonce as Hex), + op.initCode as Hex, + op.callData as Hex, + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + op.paymasterAndData as Hex, + op.signature as Hex, + ]); + } +} + +export const isNullOrUndefined = (value: any): value is undefined => { + return value === null || value === undefined; +}; diff --git a/packages/account/src/utils/VoidSigner.ts b/packages/account/src/utils/VoidSigner.ts deleted file mode 100644 index d028c56ad..000000000 --- a/packages/account/src/utils/VoidSigner.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { Provider, TransactionRequest } from "@ethersproject/providers"; -import { BigNumberish, BytesLike, Bytes, Signer } from "ethers"; -import { LogLevel, Logger } from "@ethersproject/logger"; -const logger = new Logger("signer"); - -export interface TypedDataDomain { - name?: string; - version?: string; - chainId?: BigNumberish; - verifyingContract?: string; - salt?: BytesLike; -} - -export interface TypedDataField { - name: string; - type: string; -} - -export type Deferrable = { - [K in keyof T]: T[K] | Promise; -}; - -export class VoidSigner extends Signer { - readonly address: string; - - readonly provider?: Provider; - - constructor(_address: string, _provider?: Provider) { - super(); - this.address = _address; - this.provider = _provider; - } - - getAddress(): Promise { - return Promise.resolve(this.address); - } - - _fail(message: string, operation: string): Promise { - return Promise.resolve().then(() => { - logger.throwError(message, Logger.errors.UNSUPPORTED_OPERATION, { operation: operation }); - }); - } - - signMessage(message: Bytes | string): Promise { - logger._log(LogLevel.INFO, [message]); - return this._fail("VoidSigner cannot sign messages", "signMessage"); - } - - signTransaction(transaction: Deferrable): Promise { - logger._log(LogLevel.INFO, [transaction]); - return this._fail("VoidSigner cannot sign transactions", "signTransaction"); - } - - connect(provider: Provider): VoidSigner { - return new VoidSigner(this.address, provider); - } -} diff --git a/packages/account/src/utils/index.ts b/packages/account/src/utils/index.ts new file mode 100644 index 000000000..8d298755a --- /dev/null +++ b/packages/account/src/utils/index.ts @@ -0,0 +1,3 @@ +export * from "./Types"; +export * from "./Utils"; +export * from "./Constants"; diff --git a/packages/account/tests/SmartAccountV1.testnet.spec.ts b/packages/account/tests/SmartAccountV1.testnet.spec.ts deleted file mode 100644 index f6ef197af..000000000 --- a/packages/account/tests/SmartAccountV1.testnet.spec.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Wallet, ethers } from "ethers"; -import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; -import { BiconomySmartAccount } from "../src/BiconomySmartAccount"; -import { ChainId, UserOperation } from "@biconomy/core-types"; -import { calcPreVerificationGas } from "../src/utils/Preverificaiton"; - -describe("calcPreVerificationGas", () => { - const userOp = { - sender: "0x".padEnd(42, "1"), - nonce: 0, - initCode: "0x3333", - callData: "0x4444", - callGasLimit: 5, - verificationGasLimit: 6, - maxFeePerGas: 8, - maxPriorityFeePerGas: 9, - paymasterAndData: "0xaaaaaa", - }; - it("returns a gas value proportional to sigSize", async () => { - const pvg1 = calcPreVerificationGas(userOp, { sigSize: 0 }); - const pvg2 = calcPreVerificationGas(userOp, { sigSize: 65 }); - expect(pvg2.toNumber()).toBeGreaterThan(pvg1.toNumber()); - }); -}); - -describe("BiconomySmartAccount API Specs", () => { - let owner: Wallet; - let target: string; - let accountAPI: BiconomySmartAccount; - let beneficiary: string; - let recipient: SampleRecipient; - let accountAddress: string; - - beforeAll(async () => { - owner = Wallet.createRandom(); - - target = await Wallet.createRandom().getAddress(); - - // recipient = await new SampleRecipient__factory(owner).deploy(); - accountAPI = new BiconomySmartAccount({ - chainId: ChainId.POLYGON_MUMBAI, - signer: owner, - // paymaster: paymaster, - // bundler: bundler, - }); - - // console.log('account api provider ', accountAPI.provider) - - accountAPI = await accountAPI.init(); - console.log("Account EOA owner ", accountAPI.owner); - - const counterFactualAddress = await accountAPI.getSmartAccountAddress(0); - console.log("Counterfactual address ", counterFactualAddress); - }, 20000); - - // on Mumbai testnet some tests should be performed to make sure nothing breaks in AccountV1 - - /*it("Nonce should be zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: target, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - console.log("builtUserOp", builtUserOp); - expect(builtUserOp?.nonce?.toString()).toBe("0"); - }); - it("Sender should be non zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: target, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); - }); - it("InitCode length should be greater then 170", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: target, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); - });*/ - it("estimateUserOperationGas for native token transfer using local estimation logic", async () => {}); -}); diff --git a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts b/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts deleted file mode 100644 index f4c847b00..000000000 --- a/packages/account/tests/SmartAccountV2-Abstract-Paymaster.local.spec.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { Wallet, ethers } from "ethers"; - -import { - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - ECDSAOwnershipRegistryModule_v100__factory, -} from "@biconomy/common"; - -import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -import { ChainId } from "@biconomy/core-types"; -import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; -import { BaseValidationModule } from "@biconomy/modules"; -import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { BiconomyPaymaster } from "@biconomy/paymaster"; - -const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); -const signer = provider.getSigner(); - -describe("BiconomySmartAccountV2 Paymaster Abstraction", () => { - let owner: Wallet; - let factoryOwner: Wallet; - let account: BiconomySmartAccountV2; - let entryPoint: EntryPoint; - let accountFactory: SmartAccountFactory_v200; - let ecdsaModule: ECDSAOwnershipRegistryModule_v100; - - let module1: BaseValidationModule; - - beforeAll(async () => { - owner = Wallet.createRandom(); - entryPoint = await new EntryPoint__factory(signer).deploy(); - console.log("ep address ", entryPoint.address); - factoryOwner = Wallet.createRandom(); - - const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - - accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - - ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - - module1 = await ECDSAOwnershipValidationModule.create({ - signer: owner, - moduleAddress: ecdsaModule.address, - }); - - console.log("provider url ", provider.connection.url); - - await new Promise((resolve) => setTimeout(resolve, 10000)); - }, 30000); - - it("Create a smart account with paymaster through api key", async () => { - - account = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - biconomyPaymasterApiKey: "7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", - factoryAddress: accountFactory.address, - defaultFallbackHandler: await accountFactory.minimalHandler(), - defaultValidationModule: module1, - activeValidationModule: module1, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await account.getAccountAddress(); - console.log("account address ", address); - - const paymaster = account.paymaster; - - expect(paymaster).not.toBeNull() - expect(paymaster).not.toBeUndefined() - - expect(address).toBe(account.accountAddress); - }, 10000); - - it("Create a smart account with paymaster by creating instance", async () => { - - const paymaster = new BiconomyPaymaster({ - paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/7K_k68BFN.ed274da8-69a1-496d-a897-508fc2213216", - }) - - account = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address, - defaultFallbackHandler: await accountFactory.minimalHandler(), - defaultValidationModule: module1, - activeValidationModule: module1, - paymaster: paymaster, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await account.getAccountAddress(); - console.log("account address ", address); - - expect(account.paymaster).not.toBeNull() - expect(account.paymaster).not.toBeUndefined() - - expect(address).toBe(account.accountAddress); - }, 10000); - -}); \ No newline at end of file diff --git a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts b/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts deleted file mode 100644 index 53d468752..000000000 --- a/packages/account/tests/SmartAccountV2-Module-Abstraction.local.spec.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { Wallet, ethers } from "ethers"; -import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; - -import { - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - ECDSAOwnershipRegistryModule_v100__factory, -} from "@biconomy/common"; - -import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -import { ChainId } from "@biconomy/core-types"; -import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { ECDSAOwnershipValidationModule } from "@biconomy/modules"; - -const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); -const signer = provider.getSigner(); - -describe("BiconomySmartAccountV2 Module Abstraction", () => { - let owner: Wallet; - let factoryOwner: Wallet; - let entryPoint: EntryPoint; - let beneficiary: string; - let recipient: SampleRecipient; - let accountFactory: SmartAccountFactory_v200; - let ecdsaModule: ECDSAOwnershipRegistryModule_v100; - - beforeAll(async () => { - owner = Wallet.createRandom(); - entryPoint = await new EntryPoint__factory(signer).deploy(); - console.log("ep address ", entryPoint.address); - beneficiary = await signer.getAddress(); - factoryOwner = Wallet.createRandom(); - - const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - - accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - - ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - - recipient = await new SampleRecipient__factory(signer).deploy(); - - await new Promise((resolve) => setTimeout(resolve, 10000)); - }, 30000); - - it("Create smart account with default module (ECDSA)", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - /*defaultValidationModule: await ECDSAOwnershipValidationModule.create({ - signer: signer, - moduleAddress: ecdsaModule.address, - }),*/ - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - }, 10000); - - it("Create smart account with ECDSA module", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - }, 10000); -}); diff --git a/packages/account/tests/SmartAccountV2.local.spec.ts b/packages/account/tests/SmartAccountV2.local.spec.ts deleted file mode 100644 index da8aea562..000000000 --- a/packages/account/tests/SmartAccountV2.local.spec.ts +++ /dev/null @@ -1,609 +0,0 @@ -import { EntryPoint, EntryPoint__factory } from "@account-abstraction/contracts"; -import { VoidSigner, Wallet, ethers } from "ethers"; -import { SampleRecipient, SampleRecipient__factory } from "@account-abstraction/utils/dist/src/types"; - -import { - SmartAccount_v200, - SmartAccountFactory_v200, - SmartAccount_v200__factory, - SmartAccountFactory_v200__factory, - ECDSAOwnershipRegistryModule_v100__factory, - MultiChainValidationModule_v100__factory, -} from "@biconomy/common"; - -import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; -import { ChainId, UserOperation } from "@biconomy/core-types"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSAOwnershipValidationModule } from "@biconomy/modules"; -import { MultiChainValidationModule } from "@biconomy/modules"; -import { BaseValidationModule } from "@biconomy/modules"; -import { ECDSAOwnershipRegistryModule_v100 } from "@biconomy/common"; -import { MultiChainValidationModule_v100 } from "@biconomy/common"; -import { createWalletClient, http } from "viem"; -import { localhost, polygonMumbai } from "viem/chains"; -import { WalletClientSigner } from "@alchemy/aa-core"; -import { privateKeyToAccount } from "viem/accounts"; -import { DEFAULT_ENTRYPOINT_ADDRESS } from "../src/utils/Constants"; - -const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:8545"); -const signer = provider.getSigner(); -const SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; - -const MUMBAI = "https://rpc-mumbai.maticvigil.com"; -const randomEOA = ethers.Wallet.createRandom(); -const testPrivKey = randomEOA.privateKey.slice(2); - -describe("BiconomySmartAccountV2 API Specs", () => { - let owner: Wallet; - let factoryOwner: Wallet; - let accountAPI: BiconomySmartAccountV2; - let entryPoint: EntryPoint; - let beneficiary: string; - let recipient: SampleRecipient; - let accountFactory: SmartAccountFactory_v200; - let ecdsaModule: ECDSAOwnershipRegistryModule_v100; - let multiChainModule: MultiChainValidationModule_v100; - let accountAddress: string; - - let module1: BaseValidationModule; - let module2: BaseValidationModule; - - beforeAll(async () => { - owner = Wallet.createRandom(); - entryPoint = await new EntryPoint__factory(signer).deploy(); - console.log("ep address ", entryPoint.address); - beneficiary = await signer.getAddress(); - factoryOwner = Wallet.createRandom(); - - const accountImpl: SmartAccount_v200 = await new SmartAccount_v200__factory(signer).deploy(entryPoint.address); - - accountFactory = await new SmartAccountFactory_v200__factory(signer).deploy(accountImpl.address, await factoryOwner.getAddress()); - - ecdsaModule = await new ECDSAOwnershipRegistryModule_v100__factory(signer).deploy(); - - module1 = await ECDSAOwnershipValidationModule.create({ - signer: owner, - moduleAddress: ecdsaModule.address, - }); - - multiChainModule = await new MultiChainValidationModule_v100__factory(signer).deploy(); - - module2 = await MultiChainValidationModule.create({ - signer: owner, - moduleAddress: multiChainModule.address, - }); - - console.log("provider url ", provider.connection.url); - - recipient = await new SampleRecipient__factory(signer).deploy(); - accountAPI = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - // paymaster: paymaster, - // bundler: bundler, - entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address, - implementationAddress: accountImpl.address, - defaultFallbackHandler: await accountFactory.minimalHandler(), - defaultValidationModule: module1, - activeValidationModule: module1, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - // console.log('account api provider ', accountAPI.provider) - - const counterFactualAddress = await accountAPI.getAccountAddress(); - console.log("Counterfactual address ", counterFactualAddress); - - await new Promise((resolve) => setTimeout(resolve, 10000)); - }, 30000); - - it("Nonce should be zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - console.log("builtUserOp", builtUserOp); - expect(builtUserOp?.nonce?.toString()).toBe("0"); - }, 30000); - it("Sender should be non zero", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - expect(builtUserOp.sender).not.toBe(ethers.constants.AddressZero); - }, 30000); - it("InitCode length should be greater then 170", async () => { - const builtUserOp = await accountAPI.buildUserOp([{ to: recipient.address, value: ethers.utils.parseEther("1".toString()), data: "0x" }]); - expect(builtUserOp?.initCode?.length).toBeGreaterThan(170); - }); - it("#getUserOpHash should match entryPoint.getUserOpHash", async function () { - const userOp: UserOperation = { - sender: "0x".padEnd(42, "1"), - nonce: 2, - initCode: "0x3333", - callData: "0x4444", - callGasLimit: 5, - verificationGasLimit: 6, - preVerificationGas: 7, - maxFeePerGas: 8, - maxPriorityFeePerGas: 9, - paymasterAndData: "0xaaaaaa", - signature: "0xbbbb", - }; - const hash = await accountAPI.getUserOpHash(userOp); - const epHash = await entryPoint.getUserOpHash(userOp); - expect(hash).toBe(epHash); - }); - it("should deploy to counterfactual address", async () => { - accountAddress = await accountAPI.getAccountAddress(); - expect(await provider.getCode(accountAddress).then((code) => code.length)).toBe(2); - - await signer.sendTransaction({ - to: accountAddress, - value: ethers.utils.parseEther("0.1"), - }); - const op = await accountAPI.buildUserOp([ - { - to: recipient.address, - data: recipient.interface.encodeFunctionData("something", ["hello"]), - }, - ]); - - const signedUserOp = await accountAPI.signUserOp(op); - - await entryPoint.handleOps([signedUserOp], beneficiary); - - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - - expect(await provider.getCode(accountAddress).then((code) => code.length)).toBeGreaterThan(0); - }, 10000); // on github runner it takes more time than 5000ms - - // TODO - // possibly use local bundler API from image - it("should build and send userop via bundler API", async () => {}); - - it("should deploy another account using different validation module", async () => { - let accountAPI2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - // paymaster: paymaster, - // bundler: bundler, - entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address, - implementationAddress: accountAPI.getImplementationAddress(), - defaultFallbackHandler: await accountFactory.minimalHandler(), - defaultValidationModule: module2, - activeValidationModule: module2, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - // TODO - // Review: Just setting different default validation module and querying account address is not working - // accountAPI.setDefaultValidationModule(module2); - - accountAPI2 = await accountAPI2.init(); - - const accountAddress2 = await accountAPI2.getAccountAddress(); - expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBe(2); - - await signer.sendTransaction({ - to: accountAddress2, - value: ethers.utils.parseEther("0.1"), - }); - const op = await accountAPI2.buildUserOp([ - { - to: recipient.address, - data: recipient.interface.encodeFunctionData("something", ["hello"]), - }, - ]); - - const signedUserOp = await accountAPI2.signUserOp(op); - - await entryPoint.handleOps([signedUserOp], beneficiary); - - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - - expect(await provider.getCode(accountAddress2).then((code) => code.length)).toBeGreaterThan(0); - }); - - it("should check if module is enabled", async () => { - const isEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module1 as any).moduleAddress); - - expect(isEcdsaModuleEnabled).toBe(true); - - const isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - - expect(isMultichainEcdsaModuleEnabled).toBe(false); - }); - - it("should list all enabled modules", async () => { - const paginatedModules = await accountAPI.getAllModules(); - console.log("enabled modules ", paginatedModules); - }); - - it("should enable a new module", async () => { - let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(false); - - // Review: this actually skips whole paymaster stuff and also sends to connected bundler - // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); - - const enableModuleData = await accountAPI.getEnableModuleData((module2 as any).moduleAddress); - - await signer.sendTransaction({ - to: accountAddress, - value: ethers.utils.parseEther("0.1"), - }); - - const op = await accountAPI.buildUserOp([enableModuleData], { - // skipBundlerGasEstimation: true, - // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - }); - - const signedUserOp = await accountAPI.signUserOp(op); - - await entryPoint.handleOps([signedUserOp], beneficiary); - - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - - isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - - expect(isMultichainEcdsaModuleEnabled).toBe(true); - }); - - it("signs the userOp using active validation module", async () => { - const op = await accountAPI.buildUserOp([ - { - to: recipient.address, - data: recipient.interface.encodeFunctionData("something", ["hello"]), - }, - ]); - - const signedUserOp = await accountAPI.signUserOp(op); - - expect(signedUserOp.signature).toBeDefined(); - - const userOpHash = await accountAPI.getUserOpHash(op); - - const signature = await accountAPI.signUserOpHash(userOpHash); - - console.log("signature ", signature); - - expect(signature).toBeDefined(); - }); - - it("disables requested module", async () => { - let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(true); - - const disableModuleData = await accountAPI.getDisableModuleData(SENTINEL_MODULE, (module2 as any).moduleAddress); - - await signer.sendTransaction({ - to: accountAddress, - value: ethers.utils.parseEther("0.1"), - }); - - const op = await accountAPI.buildUserOp([disableModuleData], { - // skipBundlerGasEstimation: true, - // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - }); - - const signedUserOp = await accountAPI.signUserOp(op); - - await entryPoint.handleOps([signedUserOp], beneficiary); - - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - - isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(false); - - const modulesAfter = await accountAPI.getAllModules(); - expect(modulesAfter[0]).toBe((module1 as any).moduleAddress); - }); - - it("sends userop using multichain (different) validation module after enabling and setting it up", async () => { - let isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(false); - - // Review: this actually skips whole paymaster stuff and also sends to connected bundler - // const userOpResponse = await accountAPI.enableModule((module2 as any).moduleAddress); - - const accountOwnerAddress = await owner.getAddress(); - - const multichainEcdsaOwnershipSetupData = multiChainModule.interface.encodeFunctionData("initForSmartAccount", [accountOwnerAddress]); - - const setupAndEnableModuleData = await accountAPI.getSetupAndEnableModuleData((module2 as any).moduleAddress, multichainEcdsaOwnershipSetupData); - - await signer.sendTransaction({ - to: accountAddress, - value: ethers.utils.parseEther("0.1"), - }); - - const op1 = await accountAPI.buildUserOp([setupAndEnableModuleData], { - // skipBundlerGasEstimation: true, - // overrides: { verificationGasLimit: 120000, callGasLimit: 100000, preVerificationGas: 60000 }, - }); - - console.log("op1 ", op1); - - const signedUserOp1 = await accountAPI.signUserOp(op1); - - await entryPoint.handleOps([signedUserOp1], beneficiary); - - isMultichainEcdsaModuleEnabled = await accountAPI.isModuleEnabled((module2 as any).moduleAddress); - expect(isMultichainEcdsaModuleEnabled).toBe(true); - - // Setting it as active validation module now - accountAPI = accountAPI.setActiveValidationModule(module2); - - const op = await accountAPI.buildUserOp([ - { - to: recipient.address, - data: recipient.interface.encodeFunctionData("something", ["hello"]), - }, - ]); - - const signedUserOp = await accountAPI.signUserOp(op); - - await entryPoint.handleOps([signedUserOp], beneficiary); - - // ((await expect(entryPoint.handleOps([signedUserOp], beneficiary))) as any).to.emit(recipient, "Sender"); - }, 10000); // on github runner it takes more time than 5000ms - - it("Creates another replicated instance using void signer", async () => { - const newmodule = await ECDSAOwnershipValidationModule.create({ - signer: new VoidSigner(await owner.getAddress()), - moduleAddress: ecdsaModule.address, - }); - - const accountAPI2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - // paymaster: paymaster, - // bundler: bundler, - entryPointAddress: entryPoint.address, - factoryAddress: accountFactory.address, - implementationAddress: accountAPI.getImplementationAddress(), - defaultFallbackHandler: await accountFactory.minimalHandler(), - defaultValidationModule: newmodule, - activeValidationModule: newmodule, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await accountAPI2.getAccountAddress(); - console.log("account address ", address); - - expect(address).toBe(accountAPI.accountAddress); - }, 10000); - - it("Create and setup ECDSA module with WalletClientSigner", async () => { - const wallet = privateKeyToAccount(`0x${testPrivKey}`); - - const walletClient = createWalletClient({ - account: wallet, - chain: polygonMumbai, - transport: http(MUMBAI), - }); - - const ecdsaSigner = new WalletClientSigner(walletClient, "json-rpc"); - - const account = await BiconomySmartAccountV2.create({ - chainId: ChainId.POLYGON_MUMBAI, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - signer: ecdsaSigner, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const counterFactualAddress = await account.getAccountAddress(); - console.log("Counterfactual address ", counterFactualAddress); - - const module = await ECDSAOwnershipValidationModule.create({ - signer: owner, - moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE, - }); - - account.setActiveValidationModule(module); - }); - - it("Create and setup ECDSA module with ethersV5 Signer", async () => { - const module = await ECDSAOwnershipValidationModule.create({ - signer: randomEOA, - moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE, - }); - - const account = await BiconomySmartAccountV2.create({ - chainId: ChainId.POLYGON_MUMBAI, - entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - signer: owner, - defaultValidationModule: module, - activeValidationModule: module, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const counterFactualAddress = await account.getAccountAddress(); - console.log("Counterfactual address ", counterFactualAddress); - - expect(counterFactualAddress).toBeDefined(); - - expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - }); - - // NOTE - // For tests we could only use sendUserOp for test networks until bundler integration test suite is integrated - // For test networks we can send transactions for Account created using random private key, IF paymaster is used - // buildUserOp tests we can do for any test network cause that only requires bundles without sending transactions - // If we can send prefund to the account then specific private key can be added (only testnet native tokens) or loaded from env - // TODO - - // it("Send user op with ethersV5 signer", async () => { - - // const provider = new ethers.providers.JsonRpcProvider(MUMBAI); - // const owner: Signer = new ethers.Wallet(testPrivKey, provider); - - // const bundler: IBundler = new Bundler({ - // bundlerUrl: "", - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // }) - - // const module = await ECDSAOwnershipValidationModule.create({ - // signer: owner, - // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - // }) - - // const newAccount = await BiconomySmartAccountV2.create({ - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // signer: owner, - // bundler, - // defaultValidationModule: module, - // activeValidationModule: module - // }); - - // const accountAddress = await newAccount.getAccountAddress(); - - // const prefund = { - // to: accountAddress, - // value: ethers.utils.parseEther("0.1"), - // } - - // const prefundResp = await owner.sendTransaction(prefund); - // prefundResp.wait(); - - // const tx = { - // to: await Wallet.createRandom().getAddress(), - // data: "0x" - // } - - // const userOp = await newAccount.buildUserOp([tx]); - // const res = await newAccount.sendUserOp(userOp); - // const txhash = await res.waitForTxHash(); - - // console.log("txhash ", txhash); - - // expect(txhash).toBeDefined(); - - // }); - - // it("Send user op with WalletClientSigner signer", async () => { - - // const wallet = privateKeyToAccount(`0x${testPrivKey}`) - - // const walletClient = createWalletClient({ - // account: wallet, - // transport: http("https://rpc-mumbai.maticvigil.com"), - // }); - - // let owner = new WalletClientSigner( - // walletClient, - // "json-rpc" - // ); - - // const bundler: IBundler = new Bundler({ - // bundlerUrl: "", - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // }) - - // const module = await ECDSAOwnershipValidationModule.create({ - // signer: owner, - // moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE - // }) - - // const newAccount = await BiconomySmartAccountV2.create({ - // chainId: ChainId.POLYGON_MUMBAI, - // entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS, - // signer: owner, - // bundler, - // defaultValidationModule: module, - // activeValidationModule: module - // }); - - // const accountAddress: `0x${string}` = await newAccount.getAccountAddress() as `0x${string}`; - - // const prefundResp = await walletClient.sendTransaction({ - // account: wallet, - // to: accountAddress, - // value: 100000000000000000n, - // chain: polygonMumbai - // }); - - // const tx = { - // to: await Wallet.createRandom().getAddress(), - // data: "0x" - // } - - // const userOp = await newAccount.buildUserOp([tx]); - // const res = await newAccount.sendUserOp(userOp); - // const txhash = await res.waitForTxHash(); - - // console.log("txhash ", txhash); - - // expect(txhash).toBeDefined(); - // }); - - it("Create smart account with default module (ECDSA) without creating instance or providing module name", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - - expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - }, 10000); - - it("Create smart account with ECDSA module without creating instance", async () => { - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule as ECDSAOwnershipValidationModule; - - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - - expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - }, 10000); - - it("Create smart account with default module using WalletClientSigner as signer", async () => { - const walletClient = createWalletClient({ - chain: localhost, - transport: http("http://127.0.0.1:8545"), - }); - - const ecdsaSigner = new WalletClientSigner(walletClient, "json-rpc"); - - const account: BiconomySmartAccountV2 = await BiconomySmartAccountV2.create({ - chainId: ChainId.GANACHE, - rpcUrl: "http://127.0.0.1:8545", - entryPointAddress: entryPoint.address, - signer: ecdsaSigner, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1337/..." - }); - - const address = await account.getAccountAddress(); - console.log("Module Abstraction Test - Account address ", address); - - expect(address).toBe(account.accountAddress); - - const module = account.activeValidationModule; - console.log(`ACTIVE MODULE - ${module.getAddress()}`); - - expect(module.getAddress()).toBe(DEFAULT_ECDSA_OWNERSHIP_MODULE); - }, 10000); -}); diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts new file mode 100644 index 000000000..c7594b732 --- /dev/null +++ b/packages/account/tests/account.e2e.spec.ts @@ -0,0 +1,459 @@ +import { TestData } from "../../../tests"; +import { createSmartAccountClient, ERROR_MESSAGES, FeeQuotesOrDataResponse, IHybridPaymaster, PaymasterMode } from "../src/index"; +import { Hex, encodeFunctionData, getContract, parseAbi } from "viem"; +import { UserOperationStruct } from "@alchemy/aa-core"; +import { checkBalance, entryPointABI } from "../../../tests/utils"; +import { ERC20_ABI } from "@biconomy/modules"; + +describe("Account Tests", () => { + let mumbai: TestData; + let baseSepolia: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [mumbai, baseSepolia] = testDataPerChain; + }); + + it("should have addresses", async () => { + const { + whale: { viemWallet: signer, publicAddress: sender }, + minnow: { viemWallet: recipientSigner, publicAddress: recipient }, + bundlerUrl, + } = mumbai; + + const { + whale: { viemWallet: signerBase, publicAddress: senderBase }, + minnow: { viemWallet: recipientSignerBase, publicAddress: recipientBase }, + bundlerUrl: bundlerUrlBase, + } = baseSepolia; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const reciepientSmartAccount = await createSmartAccountClient({ + signer: recipientSigner, + bundlerUrl, + }); + + const smartAccountBase = await createSmartAccountClient({ + signer: signerBase, + bundlerUrl: bundlerUrlBase, + }); + + const reciepientSmartAccountBase = await createSmartAccountClient({ + signer: recipientSignerBase, + bundlerUrl, + }); + + const addresses = await Promise.all([ + sender, + smartAccount.getAddress(), + recipient, + reciepientSmartAccount.getAddress(), + senderBase, + smartAccountBase.getAddress(), + recipientBase, + reciepientSmartAccountBase.getAddress(), + ]); + expect(addresses.every(Boolean)).toBeTruthy(); + }); + + it("should send some native token to a recipient", async () => { + const { + whale: { viemWallet: signer }, + minnow: { publicAddress: recipient }, + bundlerUrl, + publicClient, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const balance = (await checkBalance(publicClient, recipient)) as bigint; + const { wait } = await smartAccount.sendTransaction( + { + to: recipient, + value: 1, + data: "0x", + }, + { + simulationType: "validation_and_execution", + }, + ); + + const result = await wait(); + const newBalance = (await checkBalance(publicClient, recipient)) as bigint; + + expect(result?.receipt?.transactionHash).toBeTruthy(); + expect(newBalance - balance).toBe(1n); + }, 50000); + + it("Create a smart account with paymaster with an api key", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const paymaster = smartAccount.paymaster; + expect(paymaster).not.toBeNull(); + expect(paymaster).not.toBeUndefined(); + }); + + it("Should gaslessly mint an NFT on Mumbai", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + publicClient, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; + + const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + + const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress()); + + const response = await smartAccount.sendTransaction(transaction, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + simulationType: "validation", + }); + + const userOpReceipt = await response.wait(3); + expect(userOpReceipt.userOpHash).toBeTruthy(); + expect(userOpReceipt.success).toBe("true"); + + const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress()); + + expect(maticBalanceAfter).toEqual(maticBalanceBefore); + + const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + + expect(newBalance - balance).toBe(1n); + }, 60000); + + it("Should mint an NFT on Mumbai and pay with ERC20 - with preferredToken", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + publicClient, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; + + const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress()); + const usdcBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); + + const { wait } = await smartAccount.sendTransaction([transaction], { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + }, + }); + + const { + receipt: { transactionHash }, + userOpHash, + success, + } = await wait(); + + expect(transactionHash).toBeTruthy(); + expect(userOpHash).toBeTruthy(); + expect(success).toBe("true"); + + const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress()); + expect(maticBalanceAfter).toEqual(maticBalanceBefore); + + const usdcBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); + expect(usdcBalanceAfter).toBeLessThan(usdcBalanceBefore); + + const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + expect(newBalance - balance).toBe(1n); + }, 60000); + + it("Should expect several feeQuotes in resonse to empty tokenInfo fields", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; + + const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20 } }); + expect(feeQuotesResponse.feeQuotes?.length).toBeGreaterThan(1); + }); + + it("Should mint an NFT on Mumbai and pay with ERC20 - with token selection and no maxApproval", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const preferredToken: Hex = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + publicClient, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const smartAccountAddress = await smartAccount.getAddress(); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; + + const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken, + }, + }); + + const selectedFeeQuote = feeQuotesResponse.feeQuotes?.[0]!; + const spender = feeQuotesResponse.tokenPaymasterAddress!; + + const contract = getContract({ + address: preferredToken, + abi: parseAbi(ERC20_ABI), + client: publicClient, + }); + + const allowanceBefore = (await contract.read.allowance([smartAccountAddress, spender])) as bigint; + + if (allowanceBefore > 0) { + const setAllowanceToZeroTransaction = await (smartAccount?.paymaster as IHybridPaymaster)?.buildTokenApprovalTransaction({ + feeQuote: { ...selectedFeeQuote, maxGasFee: 0 }, + spender, + }); + + const { wait } = await smartAccount.sendTransaction([setAllowanceToZeroTransaction]); + const { success } = await wait(); + + expect(success).toBe("true"); + const allowanceAfter = (await contract.read.allowance([smartAccountAddress, spender])) as bigint; + expect(allowanceAfter).toBe(0n); + } + + const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + const maticBalanceBefore = await checkBalance(publicClient, smartAccountAddress); + const usdcBalanceBefore = await checkBalance(publicClient, smartAccountAddress, preferredToken); + + const { wait } = await smartAccount.sendTransaction(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + feeQuote: selectedFeeQuote, + spender: feeQuotesResponse.tokenPaymasterAddress, + }, + }); + + const { + receipt: { transactionHash }, + userOpHash, + success, + } = await wait(); + + expect(userOpHash).toBeTruthy(); + expect(success).toBe("true"); + expect(transactionHash).toBeTruthy(); + + const maticBalanceAfter = await checkBalance(publicClient, smartAccountAddress); + expect(maticBalanceAfter).toEqual(maticBalanceBefore); + + const usdcBalanceAfter = await checkBalance(publicClient, smartAccountAddress, preferredToken); + expect(usdcBalanceAfter).toBeLessThan(usdcBalanceBefore); + + const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + expect(newBalance - balance).toBe(1n); + }, 60000); + + it("Should throw and error if missing field for ERC20 Paymaster user op", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; + + const feeQuotesResponse: FeeQuotesOrDataResponse = await smartAccount.getTokenFees(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", + }, + }); + + expect(async () => + smartAccount.sendTransaction(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + feeQuote: feeQuotesResponse.feeQuotes?.[0], + }, + simulationType: "validation", + }), + ).rejects.toThrow(ERROR_MESSAGES.SPENDER_REQUIRED); + }, 60000); + + it("#getUserOpHash should match entryPoint.getUserOpHash", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + entryPointAddress, + publicClient, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const userOp: UserOperationStruct = { + sender: "0x".padEnd(42, "1") as string, + nonce: 2, + initCode: "0x3333", + callData: "0x4444", + callGasLimit: 5, + verificationGasLimit: 6, + preVerificationGas: 7, + maxFeePerGas: 8, + maxPriorityFeePerGas: 9, + paymasterAndData: "0xaaaaaa", + signature: "0xbbbb", + }; + + const epHash = await publicClient.readContract({ + address: entryPointAddress as Hex, + abi: entryPointABI, + functionName: "getUserOpHash", + // @ts-ignore + args: [userOp], + }); + + const hash = await smartAccount.getUserOpHash(userOp); + expect(hash).toBe(epHash); + }, 30000); + + it("should be deployed to counterfactual address", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + publicClient, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const accountAddress = await smartAccount.getAccountAddress(); + const byteCode = await publicClient.getBytecode({ address: accountAddress as Hex }); + + expect(byteCode?.length).toBeGreaterThan(2); + }, 10000); // on github runner it takes more time than 5000ms + + it("should check if ecdsaOwnershipModule is enabled", async () => { + const ecdsaOwnershipModule = "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e"; + + const { + whale: { viemWallet: signer }, + bundlerUrl, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + expect(ecdsaOwnershipModule).toBe(smartAccount.activeValidationModule.getAddress()); + }); +}); diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index d86ce1ff7..764fa66f7 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -1,5 +1,235 @@ +import { Paymaster, createSmartAccountClient } from "../src"; +import { createWalletClient, http } from "viem"; +import { localhost } from "viem/chains"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { TestData } from "../../../tests"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Wallet } from "@ethersproject/wallet"; + describe("Account Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); + let ganache: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-unit-tests + [ganache] = testDataPerChain; + }); + + it("should create a smartAccountClient from an ethers signer", async () => { + const { + bundlerUrl, + minnow: { ethersSigner: signer }, + } = ganache; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + }); + + it("should create a smartAccountClient from a walletClient", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + } = ganache; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + }); + + it("should pickup the rpcUrl from viem wallet and ethers", async () => { + const { + chainId, + bundlerUrl, + viemChain, + whale: { privateKey, viemWallet: originalViemSigner, ethersSigner: originalEthersSigner }, + } = ganache; + + const newRpcUrl = "http://localhost:8545"; + const defaultRpcUrl = viemChain.rpcUrls.default.http[0]; //http://127.0.0.1:8545" + + const ethersProvider = new JsonRpcProvider(newRpcUrl); + const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider); + + const accountOne = privateKeyToAccount(privateKey); + const walletClientWithNewRpcUrl = createWalletClient({ + account: accountOne, + chain: viemChain, + transport: http(newRpcUrl), + }); + + const [smartAccountFromEthersWithNewRpc, smartAccountFromViemWithNewRpc, smartAccountFromEthersWithOldRpc, smartAccountFromViemWithOldRpc] = + await Promise.all([ + createSmartAccountClient({ + chainId, + signer: ethersSignerWithNewRpcUrl, + bundlerUrl, + }), + createSmartAccountClient({ + chainId, + signer: walletClientWithNewRpcUrl, + bundlerUrl, + }), + createSmartAccountClient({ + chainId, + signer: originalEthersSigner, + bundlerUrl, + }), + createSmartAccountClient({ + chainId, + signer: originalViemSigner, + bundlerUrl, + }), + ]); + + const [ + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress, + ] = await Promise.all([ + smartAccountFromEthersWithNewRpc.getAccountAddress(), + smartAccountFromViemWithNewRpc.getAccountAddress(), + smartAccountFromEthersWithOldRpc.getAccountAddress(), + smartAccountFromViemWithOldRpc.getAccountAddress(), + ]); + + expect( + [ + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress, + ].every(Boolean), + ).toBeTruthy(); + + expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe(newRpcUrl); + expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe(newRpcUrl); + expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe(defaultRpcUrl); + expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe(defaultRpcUrl); + }); + + it("should create a smartAccountClient from a signer and chainId", async () => { + const { + chainId, + whale: { alchemyWalletClientSigner: signer }, + bundlerUrl, + } = ganache; + + const smartAccount = await createSmartAccountClient({ + chainId, + signer, + bundlerUrl, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + }); + + it("should provide an account address", async () => { + const { + bundlerUrl, + whale: { viemWallet: signer }, + } = ganache; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + }); + + it("Nonce should be zero", async () => { + const { + entryPointAddress, + bundlerUrl, + whale: { viemWallet: signer }, + minnow: { publicAddress: recipient }, + } = ganache; + + const smartAccount = await createSmartAccountClient({ + entryPointAddress, + signer, + bundlerUrl, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + + const builtUserOp = await smartAccount.buildUserOp([{ to: recipient, value: 1, data: "0x" }]); + console.log("builtUserOp", builtUserOp); + expect(builtUserOp?.nonce?.toString()).toBe("0x0"); + }); + + it("should have an active validation module", async () => { + const { + bundlerUrl, + whale: { viemWallet: signer }, + } = ganache; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const module = smartAccount.activeValidationModule; + expect(module).toBeTruthy(); + }); + + it("Create a smart account with paymaster by creating instance", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + biconomyPaymasterApiKey, + } = ganache; + + const paymasterUrl = "https://paymaster.biconomy.io/api/v1/80001/" + biconomyPaymasterApiKey; + const paymaster = new Paymaster({ paymasterUrl }); + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + paymaster, + }); + expect(smartAccount.paymaster).not.toBeNull(); + expect(smartAccount.paymaster).not.toBeUndefined(); + }, 10000); + + it("should fail to create a smartAccountClient from a walletClient without a chainId", async () => { + const { bundlerUrl } = ganache; + + const account = privateKeyToAccount(generatePrivateKey()); + const viemWalletClientNoChainId = createWalletClient({ + account, + transport: http(localhost.rpcUrls.default.http[0]), + }); + + expect( + await expect( + createSmartAccountClient({ + signer: viemWalletClientNoChainId, + bundlerUrl, + }), + ).rejects.toThrow("Cannot consume a viem wallet without a chainId"), + ); + }); + + it("should fail to create a smartAccountClient from a walletClient without an account", async () => { + const { bundlerUrl } = ganache; + + const viemWalletNoAccount = createWalletClient({ + transport: http(localhost.rpcUrls.default.http[0]), + }); + + expect(async () => + createSmartAccountClient({ + signer: viemWalletNoAccount, + bundlerUrl, + }), + ).rejects.toThrow("Cannot consume a viem wallet without an account"); }); }); diff --git a/packages/account/tsconfig.build.json b/packages/account/tsconfig.build.json new file mode 100644 index 000000000..42d88a236 --- /dev/null +++ b/packages/account/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests", "tests/**/*"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/account/tsconfig.json b/packages/account/tsconfig.json index d4bee29bb..53677da37 100644 --- a/packages/account/tsconfig.json +++ b/packages/account/tsconfig.json @@ -5,7 +5,9 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"] }, "include": ["src", "src/**/*.json"], } diff --git a/packages/account/typedoc.json b/packages/account/typedoc.json new file mode 100644 index 000000000..6a717b22a --- /dev/null +++ b/packages/account/typedoc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "entryPoints": ["src/index.ts"], + "basePath": "src", + "includes": "src", + "out": "docs", + "gitRevision": "main" +} diff --git a/packages/bundler/.esbuild.js b/packages/bundler/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/bundler/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index 8e768924c..35465063e 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2023-07-02) + +Export createBundler alias for static Bundler.create call + ## 3.1.3 (2023-12-28) VERSION Bump Only. @@ -11,29 +15,23 @@ VERSION Bump Only. ### Features -* Make entrypoint address optional in bundler config ([547724a](https://github.com/bcnmy/biconomy-client-sdk/pull/337/commits/547724a15366ee1e63aee80fdee0edc128a84c41)) +- Make entrypoint address optional in bundler config ([547724a](https://github.com/bcnmy/biconomy-client-sdk/pull/337/commits/547724a15366ee1e63aee80fdee0edc128a84c41)) ### Bug Fixes -* use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) +- use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) ## 3.1.1 (2023-11-09) - ### Bug Fixes -* resolve comments ([34fd6a3](https://github.com/bcnmy/biconomy-client-sdk/commit/34fd6a308805061d9faf408f1ce6da9cac0ee819)) - +- resolve comments ([34fd6a3](https://github.com/bcnmy/biconomy-client-sdk/commit/34fd6a308805061d9faf408f1ce6da9cac0ee819)) ### Features -* add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) -* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - - - - +- add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) +- chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) +- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) ## 3.1.0 (2023-09-20) @@ -41,20 +39,15 @@ Modular Account Abstraction is here. ### Bug Fixes -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) -* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) - +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) +- more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) ### Features -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) -* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - - - - +- base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) +- chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) +- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) ## 3.0.0 (2023-08-28) @@ -62,33 +55,20 @@ Modular SDK - consists stable version of below updates done in Alphas. ### Features -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) - - - - +- base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) ## 3.0.0-alpha.0 (2023-08-02) VERSION Bump Only. - - - # 3.1.0-alpha.0 (2023-07-24) - ### Features -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - - - - +- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) ## 3.0.0-alpha.0 (2023-07-12) - ### Bug Fixes -* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) +- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) diff --git a/packages/bundler/Readme.md b/packages/bundler/Readme.md index ef4ad69be..06e0c4af6 100644 --- a/packages/bundler/Readme.md +++ b/packages/bundler/Readme.md @@ -28,16 +28,12 @@ yarn add @biconomy/bundler ```typescript // This is how you create bundler instance in your dapp's -import { IBundler, Bundler } from "@biconomy/bundler"; +import { IBundler, createBundler } from "@biconomy/bundler"; // Make use of core-types package import { ChainId } from "@biconomy/core-types"; -const bundler: IBundler = new Bundler({ - bundlerUrl: "", - chainId: ChainId.POLYGON_MAINNET, - entryPointAddress: "", -}); +const bundler: IBundler = await createBundler({ bundlerUrl: "" }); // you can get this value from biconomy dashboard. https://dashboard.biconomy.io ``` Following are the methods that can be call on bundler instance @@ -51,7 +47,7 @@ export interface IBundler { } ``` -**estimateUserOpGas** +**[estimateUserOpGas](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#estimateUserOpGas)** Estimate the gas values for a UserOperation. Given UserOperation optionally without gas limits and gas prices, return the needed gas limits. The signature field is ignored by the wallet, so that the operation will not require user's approval. Still, it might require putting a "semi-valid" signature (e.g. a signature in the right length) **Return Values** @@ -62,7 +58,7 @@ Estimate the gas values for a UserOperation. Given UserOperation optionally with -------------------------------- -**sendUserOp** +**[sendUserOp](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#sendUserOp)** it submits a User Operation object to the User Operation pool of the client. The client MUST validate the UserOperation, and return a result accordingly. The result SHOULD be set to the userOpHash if and only if the request passed simulation and was accepted in the client's User Operation pool. If the validation, simulation, or User Operation pool inclusion fails, result SHOULD NOT be returned. Rather, the client SHOULD return the failure reason. @@ -72,7 +68,7 @@ If the UserOperation is valid, the client MUST return the calculated userOpHash -------------------------------- -**getUserOpByHash** +**[getUserOpByHash](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#getUserOpByHash)** Return a UserOperation based on a hash (userOpHash) returned by sendUserOp (eth_sendUserOperation) **Return Values** @@ -81,7 +77,7 @@ null in case the UserOperation is not yet included in a block, or a full UserOpe -------------------------------- -**getUserOpReceipt** +**[getUserOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#getUserOpReceipt)** Return a UserOperation receipt based on a hash (userOpHash) returned by eth_sendUserOperation diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 45252d1b8..a55b34c20 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,9 +1,19 @@ { "name": "@biconomy/bundler", - "version": "3.1.3", + "version": "4.0.0", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "keywords": [ "Ethereum", "Bundler", @@ -15,7 +25,16 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "test:file": "jest --config=../../jest.config.js --runInBand", "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:run": "jest tests/**/*.spec.ts --runInBand", @@ -23,7 +42,7 @@ "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, - "author": "talhamalik883 ", + "author": "Biconomy", "repository": { "type": "git", "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" @@ -37,9 +56,14 @@ "access": "public" }, "dependencies": { - "@biconomy/common": "^3.1.3", - "@biconomy/core-types": "^3.1.3", - "@ethersproject/providers": "^5.7.2", - "ethers": "^5.7.0" + "@alchemy/aa-core": "3.0.0-alpha.4", + "@biconomy/common": "4.0.0", + "viem": "^2.7.3" + }, + "devDependencies": { + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 5c78befbe..a20fadfb4 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -1,5 +1,6 @@ -import { IBundler } from "./interfaces/IBundler"; -import { UserOperation, ChainId } from "@biconomy/core-types"; +import { getChain, type UserOperationStruct } from "@alchemy/aa-core"; +import { createPublicClient, http } from "viem"; +import { IBundler } from "./interfaces/IBundler.js"; import { GetUserOperationReceiptResponse, GetUserOpByHashResponse, @@ -15,18 +16,18 @@ import { UserOpStatus, GetUserOperationStatusResponse, SimulationType, -} from "./utils/Types"; -import { resolveProperties } from "ethers/lib/utils"; -import { deepHexlify, sendRequest, getTimestampInSeconds, HttpMethod, Logger, RPC_PROVIDER_URLS } from "@biconomy/common"; -import { transformUserOP } from "./utils/HelperFunction"; + BundlerConfigWithChainId, +} from "./utils/Types.js"; +import { transformUserOP, getTimestampInSeconds } from "./utils/HelperFunction.js"; import { UserOpReceiptIntervals, UserOpWaitForTxHashIntervals, UserOpWaitForTxHashMaxDurationIntervals, UserOpReceiptMaxDurationIntervals, DEFAULT_ENTRYPOINT_ADDRESS, -} from "./utils/Constants"; -import { JsonRpcProvider } from "@ethersproject/providers"; +} from "./utils/Constants.js"; +import { extractChainIdFromBundlerUrl } from "./utils/Utils.js"; +import { sendRequest, HttpMethod } from "@biconomy/common"; /** * This class implements IBundler interface. @@ -34,16 +35,21 @@ import { JsonRpcProvider } from "@ethersproject/providers"; * Checkout the proposal for more details on Bundlers. */ export class Bundler implements IBundler { + private bundlerConfig: BundlerConfigWithChainId; + // eslint-disable-next-line no-unused-vars - UserOpReceiptIntervals!: { [key in ChainId]?: number }; + UserOpReceiptIntervals!: { [key in number]?: number }; + + UserOpWaitForTxHashIntervals!: { [key in number]?: number }; - UserOpWaitForTxHashIntervals!: { [key in ChainId]?: number }; + UserOpReceiptMaxDurationIntervals!: { [key in number]?: number }; - UserOpReceiptMaxDurationIntervals!: { [key in ChainId]?: number }; + UserOpWaitForTxHashMaxDurationIntervals!: { [key in number]?: number }; - UserOpWaitForTxHashMaxDurationIntervals!: { [key in ChainId]?: number }; + constructor(bundlerConfig: Bundlerconfig) { + const parsedChainId: number = bundlerConfig?.chainId || extractChainIdFromBundlerUrl(bundlerConfig.bundlerUrl); + this.bundlerConfig = { ...bundlerConfig, chainId: parsedChainId }; - constructor(readonly bundlerConfig: Bundlerconfig) { this.UserOpReceiptIntervals = { ...UserOpReceiptIntervals, ...bundlerConfig.userOpReceiptIntervals, @@ -64,41 +70,38 @@ export class Bundler implements IBundler { ...bundlerConfig.userOpWaitForTxHashMaxDurationIntervals, }; - if (!bundlerConfig.entryPointAddress) { - this.bundlerConfig.entryPointAddress = DEFAULT_ENTRYPOINT_ADDRESS; - } else { - this.bundlerConfig.entryPointAddress = bundlerConfig.entryPointAddress; - } + this.bundlerConfig.entryPointAddress = bundlerConfig.entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS; } - private getBundlerUrl(): string { + public getBundlerUrl(): string { return `${this.bundlerConfig.bundlerUrl}`; } /** - * - * @param chainId + * @param userOpHash * @description This function will fetch gasPrices from bundler * @returns Promise */ - async estimateUserOpGas(userOp: UserOperation): Promise { + async estimateUserOpGas(userOp: UserOperationStruct): Promise { // expected dummySig and possibly dummmy paymasterAndData should be provided by the caller // bundler doesn't know account and paymaster implementation userOp = transformUserOP(userOp); - Logger.log("userOp sending for fee estimate ", userOp); const bundlerUrl = this.getBundlerUrl(); - const response: EstimateUserOpGasResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_estimateUserOperationGas", - params: [userOp, this.bundlerConfig.entryPointAddress], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: EstimateUserOpGasResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_estimateUserOperationGas", + params: [userOp, this.bundlerConfig.entryPointAddress], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const userOpGasResponse = response.result; for (const key in userOpGasResponse) { @@ -116,30 +119,35 @@ export class Bundler implements IBundler { * @description This function will send signed userOp to bundler to get mined on chain * @returns Promise */ - async sendUserOp(userOp: UserOperation, simulationType?: SimulationType): Promise { + async sendUserOp(userOp: UserOperationStruct, simulationParam?: SimulationType): Promise { const chainId = this.bundlerConfig.chainId; // transformUserOP will convert all bigNumber values to string userOp = transformUserOP(userOp); - const hexifiedUserOp = deepHexlify(await resolveProperties(userOp)); const simType = { - simulation_type: simulationType || "validation", + simulation_type: simulationParam || "validation", }; - const params = [hexifiedUserOp, this.bundlerConfig.entryPointAddress, simType]; + const params = [userOp, this.bundlerConfig.entryPointAddress, simType]; const bundlerUrl = this.getBundlerUrl(); - const sendUserOperationResponse: SendUserOpResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_sendUserOperation", - params: params, - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const sendUserOperationResponse: SendUserOpResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_sendUserOperation", + params: params, + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const response: UserOpResponse = { userOpHash: sendUserOperationResponse.result, wait: (confirmations?: number): Promise => { - const provider = new JsonRpcProvider(RPC_PROVIDER_URLS[chainId]); + const providerClient = createPublicClient({ + chain: getChain(chainId), + transport: http(), + }); // Note: maxDuration can be defined per chainId const maxDuration = this.UserOpReceiptMaxDurationIntervals[chainId] || 30000; // default 30 seconds let totalDuration = 0; @@ -151,19 +159,23 @@ export class Bundler implements IBundler { const userOpResponse = await this.getUserOpReceipt(sendUserOperationResponse.result); if (userOpResponse && userOpResponse.receipt && userOpResponse.receipt.blockNumber) { if (confirmations) { - const latestBlock = await provider.getBlockNumber(); - const confirmedBlocks = latestBlock - userOpResponse.receipt.blockNumber; + const latestBlock = await providerClient.getBlockNumber(); + const confirmedBlocks = Number(latestBlock) - userOpResponse.receipt.blockNumber; if (confirmations >= confirmedBlocks) { clearInterval(intervalId); resolve(userOpResponse); + return; } + } else { + clearInterval(intervalId); + resolve(userOpResponse); + return; } - clearInterval(intervalId); - resolve(userOpResponse); } } catch (error) { clearInterval(intervalId); reject(error); + return; } totalDuration += intervalValue; @@ -186,18 +198,19 @@ export class Bundler implements IBundler { return new Promise((resolve, reject) => { const intervalValue = this.UserOpWaitForTxHashIntervals[chainId] || 500; // default 0.5 seconds - const intervalId = setInterval(() => { - this.getUserOpStatus(sendUserOperationResponse.result) - .then((userOpStatus) => { - if (userOpStatus && userOpStatus.state && userOpStatus.transactionHash) { - clearInterval(intervalId); - resolve(userOpStatus); - } - }) - .catch((error) => { + const intervalId = setInterval(async () => { + try { + const userOpStatus = await this.getUserOpStatus(sendUserOperationResponse.result); + if (userOpStatus && userOpStatus.state && userOpStatus.transactionHash) { clearInterval(intervalId); - reject(error); - }); + resolve(userOpStatus); + return; + } + } catch (error) { + clearInterval(intervalId); + reject(error); + return; + } totalDuration += intervalValue; if (totalDuration >= maxDuration) { @@ -225,16 +238,19 @@ export class Bundler implements IBundler { */ async getUserOpReceipt(userOpHash: string): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetUserOperationReceiptResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_getUserOperationReceipt", - params: [userOpHash], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: GetUserOperationReceiptResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_getUserOperationReceipt", + params: [userOpHash], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const userOpReceipt: UserOpReceipt = response.result; return userOpReceipt; } @@ -247,16 +263,19 @@ export class Bundler implements IBundler { */ async getUserOpStatus(userOpHash: string): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetUserOperationStatusResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "biconomy_getUserOperationStatus", - params: [userOpHash], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: GetUserOperationStatusResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "biconomy_getUserOperationStatus", + params: [userOpHash], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const userOpStatus: UserOpStatus = response.result; return userOpStatus; } @@ -264,22 +283,24 @@ export class Bundler implements IBundler { /** * * @param userOpHash - * @param chainId * @description this function will return UserOpByHashResponse for given UserOpHash * @returns Promise */ async getUserOpByHash(userOpHash: string): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetUserOpByHashResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_getUserOperationByHash", - params: [userOpHash], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: GetUserOpByHashResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_getUserOperationByHash", + params: [userOpHash], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); const userOpByHashResponse: UserOpByHashResponse = response.result; return userOpByHashResponse; } @@ -289,16 +310,23 @@ export class Bundler implements IBundler { */ async getGasFeeValues(): Promise { const bundlerUrl = this.getBundlerUrl(); - const response: GetGasFeeValuesResponse = await sendRequest({ - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "biconomy_getGasFeeValues", - params: [], - id: getTimestampInSeconds(), - jsonrpc: "2.0", + const response: GetGasFeeValuesResponse = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "biconomy_getGasFeeValues", + params: [], + id: getTimestampInSeconds(), + jsonrpc: "2.0", + }, }, - }); + "Bundler", + ); return response.result; } + + public static async create(config: Bundlerconfig): Promise { + return new Bundler(config); + } } diff --git a/packages/bundler/src/index.ts b/packages/bundler/src/index.ts index 2cb31e82e..7a779f5d5 100644 --- a/packages/bundler/src/index.ts +++ b/packages/bundler/src/index.ts @@ -1,3 +1,8 @@ -export * from "./interfaces/IBundler"; -export * from "./Bundler"; -export * from "./utils/Types"; +import { Bundler } from "./Bundler.js"; + +export * from "./interfaces/IBundler.js"; +export * from "./Bundler.js"; +export * from "./utils/Types.js"; +export * from "./utils/Utils.js"; + +export const createBundler = Bundler.create; diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts index f6d38164d..8ba7ccb50 100644 --- a/packages/bundler/src/interfaces/IBundler.ts +++ b/packages/bundler/src/interfaces/IBundler.ts @@ -1,12 +1,12 @@ -import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse, GasFeeValues, UserOpStatus, SimulationType } from "../utils/Types"; -import { UserOperation } from "@biconomy/core-types"; +import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse, UserOpStatus, SimulationType, GasFeeValues } from "../utils/Types"; +import { UserOperationStruct } from "@alchemy/aa-core"; export interface IBundler { - estimateUserOpGas(_userOp: Partial): Promise; - // could have second arg object called options - sendUserOp(_userOp: UserOperation, _simulationType?: SimulationType): Promise; + estimateUserOpGas(_userOp: Partial): Promise; + sendUserOp(_userOp: UserOperationStruct, _simulationType?: SimulationType): Promise; getUserOpReceipt(_userOpHash: string): Promise; getUserOpByHash(_userOpHash: string): Promise; getGasFeeValues(): Promise; getUserOpStatus(_userOpHash: string): Promise; + getBundlerUrl(): string; } diff --git a/packages/bundler/src/utils/Constants.ts b/packages/bundler/src/utils/Constants.ts index 5a0a2ae3b..8ffd436a5 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/packages/bundler/src/utils/Constants.ts @@ -1,149 +1,27 @@ -import { ChainId } from "@biconomy/core-types"; - -// eslint-disable-next-line no-unused-vars -export const UserOpReceiptIntervals: { [key in ChainId]?: number } = { - [ChainId.MAINNET]: 10000, - [ChainId.GOERLI]: 2000, - [ChainId.POLYGON_MUMBAI]: 2000, - [ChainId.POLYGON_MAINNET]: 2000, - [ChainId.BSC_TESTNET]: 2000, - [ChainId.BSC_MAINNET]: 2000, - [ChainId.POLYGON_ZKEVM_TESTNET]: 2000, - [ChainId.POLYGON_ZKEVM_MAINNET]: 2000, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 2000, - [ChainId.ARBITRUM_ONE_MAINNET]: 2000, - [ChainId.ARBITRUM_NOVA_MAINNET]: 2000, - [ChainId.OPTIMISM_MAINNET]: 2000, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 2000, - [ChainId.AVALANCHE_MAINNET]: 2000, - [ChainId.AVALANCHE_TESTNET]: 2000, - [ChainId.MOONBEAM_MAINNET]: 2000, - [ChainId.BASE_GOERLI_TESTNET]: 2000, - [ChainId.BASE_MAINNET]: 2000, - [ChainId.LINEA_TESTNET]: 2000, - [ChainId.LINEA_MAINNET]: 2000, - [ChainId.MANTLE_MAINNET]: 2000, - [ChainId.MANTLE_TESTNET]: 2000, - [ChainId.OPBNB_MAINNET]: 2000, - [ChainId.OPBNB_TESTNET]: 2000, - [ChainId.ASTAR_MAINNET]: 2000, - [ChainId.ASTAR_TESTNET]: 2000, - [ChainId.CHILIZ_MAINNET]: 2000, - [ChainId.CHILIZ_TESTNET]: 2000, - [ChainId.CORE_MAINNET]: 2000, - [ChainId.CORE_TESTNET]: 2000, - [ChainId.MANTA_PACIFIC_MAINNET]: 2000, - [ChainId.MANTA_PACIFIC_TESTNET]: 2000, - [ChainId.CAPX_TESTNET]: 2000, +export const UserOpReceiptIntervals: { [key in number]?: number } = { + [1]: 10000, }; -// Note: Reduced by 1/10th.. can reduce more -export const UserOpWaitForTxHashIntervals: { [key in ChainId]?: number } = { - [ChainId.MAINNET]: 1000, - [ChainId.GOERLI]: 500, - [ChainId.POLYGON_MUMBAI]: 500, - [ChainId.POLYGON_MAINNET]: 500, - [ChainId.BSC_TESTNET]: 500, - [ChainId.BSC_MAINNET]: 500, - [ChainId.POLYGON_ZKEVM_TESTNET]: 500, - [ChainId.POLYGON_ZKEVM_MAINNET]: 500, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 500, - [ChainId.ARBITRUM_ONE_MAINNET]: 500, - [ChainId.ARBITRUM_NOVA_MAINNET]: 500, - [ChainId.OPTIMISM_MAINNET]: 500, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 500, - [ChainId.AVALANCHE_MAINNET]: 500, - [ChainId.AVALANCHE_TESTNET]: 500, - [ChainId.MOONBEAM_MAINNET]: 500, - [ChainId.BASE_GOERLI_TESTNET]: 500, - [ChainId.BASE_MAINNET]: 500, - [ChainId.LINEA_TESTNET]: 500, - [ChainId.LINEA_MAINNET]: 500, - [ChainId.MANTLE_MAINNET]: 500, - [ChainId.MANTLE_TESTNET]: 500, - [ChainId.OPBNB_MAINNET]: 500, - [ChainId.OPBNB_TESTNET]: 500, - [ChainId.ASTAR_MAINNET]: 500, - [ChainId.ASTAR_TESTNET]: 500, - [ChainId.CHILIZ_MAINNET]: 500, - [ChainId.CHILIZ_TESTNET]: 500, - [ChainId.CORE_MAINNET]: 500, - [ChainId.CORE_TESTNET]: 500, - [ChainId.MANTA_PACIFIC_MAINNET]: 500, - [ChainId.MANTA_PACIFIC_TESTNET]: 500, - [ChainId.CAPX_TESTNET]: 500, +// Note: Default value is 500(0.5sec) +export const UserOpWaitForTxHashIntervals: { [key in number]?: number } = { + [1]: 1000, }; -export const UserOpReceiptMaxDurationIntervals: { [key in ChainId]?: number } = { - [ChainId.MAINNET]: 300000, - [ChainId.GOERLI]: 50000, - [ChainId.POLYGON_MUMBAI]: 50000, - [ChainId.POLYGON_MAINNET]: 60000, - [ChainId.BSC_TESTNET]: 50000, - [ChainId.BSC_MAINNET]: 50000, - [ChainId.POLYGON_ZKEVM_TESTNET]: 40000, - [ChainId.POLYGON_ZKEVM_MAINNET]: 40000, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 50000, - [ChainId.ARBITRUM_ONE_MAINNET]: 50000, - [ChainId.ARBITRUM_NOVA_MAINNET]: 30000, - [ChainId.OPTIMISM_MAINNET]: 40000, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 40000, - [ChainId.AVALANCHE_MAINNET]: 40000, - [ChainId.AVALANCHE_TESTNET]: 40000, - [ChainId.MOONBEAM_MAINNET]: 40000, - [ChainId.BASE_GOERLI_TESTNET]: 40000, - [ChainId.BASE_MAINNET]: 40000, - [ChainId.LINEA_TESTNET]: 50000, - [ChainId.LINEA_MAINNET]: 50000, - [ChainId.MANTLE_MAINNET]: 40000, - [ChainId.MANTLE_TESTNET]: 40000, - [ChainId.OPBNB_MAINNET]: 40000, - [ChainId.OPBNB_TESTNET]: 40000, - [ChainId.ASTAR_MAINNET]: 40000, - [ChainId.ASTAR_TESTNET]: 40000, - [ChainId.CHILIZ_MAINNET]: 40000, - [ChainId.CHILIZ_TESTNET]: 40000, - [ChainId.CORE_MAINNET]: 40000, - [ChainId.CORE_TESTNET]: 40000, - [ChainId.MANTA_PACIFIC_MAINNET]: 40000, - [ChainId.MANTA_PACIFIC_TESTNET]: 40000, - [ChainId.CAPX_TESTNET]: 40000, +// Note: Default value is 30000 (30sec) +export const UserOpReceiptMaxDurationIntervals: { [key in number]?: number } = { + [1]: 300000, + [80001]: 50000, + [137]: 60000, + [56]: 50000, + [97]: 50000, + [421613]: 50000, + [42161]: 50000, + [59140]: 50000, // linea testnet }; -export const UserOpWaitForTxHashMaxDurationIntervals: { [key in ChainId]?: number } = { - [ChainId.MAINNET]: 20000, - [ChainId.GOERLI]: 20000, - [ChainId.POLYGON_MUMBAI]: 20000, - [ChainId.POLYGON_MAINNET]: 20000, - [ChainId.BSC_TESTNET]: 20000, - [ChainId.BSC_MAINNET]: 20000, - [ChainId.POLYGON_ZKEVM_TESTNET]: 20000, - [ChainId.POLYGON_ZKEVM_MAINNET]: 20000, - [ChainId.ARBITRUM_GOERLI_TESTNET]: 20000, - [ChainId.ARBITRUM_ONE_MAINNET]: 20000, - [ChainId.ARBITRUM_NOVA_MAINNET]: 20000, - [ChainId.OPTIMISM_MAINNET]: 20000, - [ChainId.OPTIMISM_GOERLI_TESTNET]: 20000, - [ChainId.AVALANCHE_MAINNET]: 20000, - [ChainId.AVALANCHE_TESTNET]: 20000, - [ChainId.MOONBEAM_MAINNET]: 20000, - [ChainId.BASE_GOERLI_TESTNET]: 20000, - [ChainId.BASE_MAINNET]: 20000, - [ChainId.LINEA_TESTNET]: 20000, - [ChainId.LINEA_MAINNET]: 20000, - [ChainId.MANTLE_MAINNET]: 20000, - [ChainId.MANTLE_TESTNET]: 20000, - [ChainId.OPBNB_MAINNET]: 20000, - [ChainId.OPBNB_TESTNET]: 20000, - [ChainId.ASTAR_MAINNET]: 20000, - [ChainId.ASTAR_TESTNET]: 20000, - [ChainId.CHILIZ_MAINNET]: 20000, - [ChainId.CHILIZ_TESTNET]: 20000, - [ChainId.CORE_MAINNET]: 20000, - [ChainId.CORE_TESTNET]: 20000, - [ChainId.MANTA_PACIFIC_MAINNET]: 20000, - [ChainId.MANTA_PACIFIC_TESTNET]: 20000, - [ChainId.CAPX_TESTNET]: 20000, +// Note: Default value is 20000 (20sec) +export const UserOpWaitForTxHashMaxDurationIntervals: { [key in number]?: number } = { + [1]: 20000, }; export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; diff --git a/packages/bundler/src/utils/HelperFunction.ts b/packages/bundler/src/utils/HelperFunction.ts index a0d0240e4..670e04d31 100644 --- a/packages/bundler/src/utils/HelperFunction.ts +++ b/packages/bundler/src/utils/HelperFunction.ts @@ -1,10 +1,10 @@ -import { UserOperation } from "@biconomy/core-types"; -import { BigNumber } from "ethers"; +import type { BigNumberish, UserOperationStruct } from "@alchemy/aa-core"; -export const transformUserOP = (userOp: UserOperation): UserOperation => { +// Will convert the userOp hex, bigInt and number values to hex strings +export const transformUserOP = (userOp: UserOperationStruct): UserOperationStruct => { try { const userOperation = { ...userOp }; - const keys: (keyof UserOperation)[] = [ + const keys: (keyof UserOperationStruct)[] = [ "nonce", "callGasLimit", "verificationGasLimit", @@ -13,8 +13,8 @@ export const transformUserOP = (userOp: UserOperation): UserOperation => { "maxPriorityFeePerGas", ]; for (const key of keys) { - if (userOperation[key] && userOperation[key] !== "0") { - userOperation[key] = BigNumber.from(userOp[key]).toHexString(); + if (userOperation[key] && userOperation[key] !== "0x") { + userOperation[key] = ("0x" + BigInt(userOp[key] as BigNumberish).toString(16)) as `0x${string}`; } } return userOperation; @@ -22,3 +22,11 @@ export const transformUserOP = (userOp: UserOperation): UserOperation => { throw `Failed to transform user operation: ${error}`; } }; + +/** + * @description this function will return current timestamp in seconds + * @returns Number + */ +export const getTimestampInSeconds = (): number => { + return Math.floor(Date.now() / 1000); +}; diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index 6e93489d9..746d1b24e 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -1,29 +1,37 @@ -import { ethers, BigNumber } from "ethers"; -import { ChainId, UserOperation } from "@biconomy/core-types"; +import { UserOperationStruct } from "@alchemy/aa-core"; +import { Hex } from "viem"; export type Bundlerconfig = { bundlerUrl: string; entryPointAddress?: string; - chainId: ChainId; + chainId?: number; // eslint-disable-next-line no-unused-vars - userOpReceiptIntervals?: { [key in ChainId]?: number }; - userOpWaitForTxHashIntervals?: { [key in ChainId]?: number }; - userOpReceiptMaxDurationIntervals?: { [key in ChainId]?: number }; - userOpWaitForTxHashMaxDurationIntervals?: { [key in ChainId]?: number }; + userOpReceiptIntervals?: { [key in number]?: number }; + userOpWaitForTxHashIntervals?: { [key in number]?: number }; + userOpReceiptMaxDurationIntervals?: { [key in number]?: number }; + userOpWaitForTxHashMaxDurationIntervals?: { [key in number]?: number }; }; +export type BundlerConfigWithChainId = Bundlerconfig & { chainId: number }; export type UserOpReceipt = { + /* The request hash of the UserOperation. */ userOpHash: string; + /* The entry point address used for the UserOperation. */ entryPoint: string; - sender: string; - nonce: number; + /* The paymaster used for this UserOperation (or empty). */ paymaster: string; - actualGasCost: BigNumber; - actualGasUsed: BigNumber; + /* The actual amount paid (by account or paymaster) for this UserOperation. */ + actualGasCost: Hex; + /* The total gas used by this UserOperation (including preVerification, creation, validation, and execution). */ + actualGasUsed: Hex; + /* Indicates whether the execution completed without reverting. */ success: "true" | "false"; + /* In case of revert, this is the revert reason. */ reason: string; - logs: Array; // The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle) - receipt: ethers.providers.TransactionReceipt; + /* The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle). */ + logs: Array; // The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle) + /* The TransactionReceipt object for the entire bundle, not only for this UserOperation. */ + receipt: any; }; // review @@ -89,7 +97,7 @@ export type GetUserOpByHashResponse = { error?: JsonRpcError; }; -export type UserOpByHashResponse = UserOperation & { +export type UserOpByHashResponse = UserOperationStruct & { transactionHash: string; blockNumber: number; blockHash: string; diff --git a/packages/bundler/src/utils/Utils.ts b/packages/bundler/src/utils/Utils.ts new file mode 100644 index 000000000..a64420100 --- /dev/null +++ b/packages/bundler/src/utils/Utils.ts @@ -0,0 +1,9 @@ +export const extractChainIdFromBundlerUrl = (url: string): number => { + try { + const regex = /\/api\/v2\/(\d+)\/[a-zA-Z0-9.-]+$/; + const match = regex.exec(url)!; + return parseInt(match[1]); + } catch (error) { + throw new Error("Invalid chain id"); + } +}; diff --git a/packages/bundler/tests/bundler.e2e.spec.ts b/packages/bundler/tests/bundler.e2e.spec.ts new file mode 100644 index 000000000..7b9211dd0 --- /dev/null +++ b/packages/bundler/tests/bundler.e2e.spec.ts @@ -0,0 +1,19 @@ +import { TestData } from "../../../tests"; + +describe("Bundler Unit Tests", () => { + let mumbai: TestData; + let baseSepolia: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [mumbai, baseSepolia] = testDataPerChain; + }); + + it("should have chain data for mumbai", () => { + expect(mumbai).toHaveProperty("chainId"); + }); + + it("should also have chain data for base", () => { + expect(baseSepolia).toHaveProperty("chainId"); + }); +}); diff --git a/packages/bundler/tests/bundler.spec.ts b/packages/bundler/tests/bundler.spec.ts index 3c8a14354..e663dafb4 100644 --- a/packages/bundler/tests/bundler.spec.ts +++ b/packages/bundler/tests/bundler.spec.ts @@ -1,5 +1,14 @@ -describe("Bundler Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); +import { TestData } from "../../../tests"; + +describe("Bundler Unit Tests", () => { + let ganache: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-unit-tests + [ganache] = testDataPerChain; + }); + + it("should have chain data for ganache", () => { + expect(ganache).toHaveProperty("chainId"); }); }); diff --git a/packages/bundler/tsconfig.build.json b/packages/bundler/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/bundler/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/bundler/tsconfig.json b/packages/bundler/tsconfig.json index 3dc5293ed..d9b305a9a 100644 --- a/packages/bundler/tsconfig.json +++ b/packages/bundler/tsconfig.json @@ -5,7 +5,9 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"] }, "include": ["src", "src/**/*.json"] } diff --git a/packages/common/.depcheckrc b/packages/common/.depcheckrc deleted file mode 100644 index c0d8d09e2..000000000 --- a/packages/common/.depcheckrc +++ /dev/null @@ -1 +0,0 @@ -ignores: ["@openzeppelin/contracts"] diff --git a/packages/common/.esbuild.js b/packages/common/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/common/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md deleted file mode 100644 index 19b8a3b6d..000000000 --- a/packages/common/CHANGELOG.md +++ /dev/null @@ -1,126 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 3.1.3 (2023-12-28) - -* update capx url and rebase ([92c1ef0](https://github.com/bcnmy/biconomy-client-sdk/pull/360/commits/92c1ef0fcfeafbd89a6872b1e2689eea7c722bc3)) - -## 3.1.2 (2023-12-28) - -VERSION Bump Only. - - -## 3.1.1 (2023-11-09) - - -### Features - -* add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) - - - -## 3.1.0 (2023-09-20) - - -### Bug Fixes - -* comment out hardcoded gas limit in any case + fix value for estimate smart-account deployment + dev notes ([df48ec3](https://github.com/bcnmy/biconomy-client-sdk/commit/df48ec3c04cf44a8f64eb302217655076c6304a4)) -* error handling ([637bb67](https://github.com/bcnmy/biconomy-client-sdk/commit/637bb67b9390e39b4571374108bc70447a531963)) -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) -* linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) -* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) -* undefined log issue ([42f3f70](https://github.com/bcnmy/biconomy-client-sdk/commit/42f3f7040c96ff5ac57459224b09a25f95d2cd8c)) - - -### Features - -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) -* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) -* improve logs ([fb15af3](https://github.com/bcnmy/biconomy-client-sdk/commit/fb15af3af48ccf50101fedd7f9bb44ee97c747c4)) -* sdk test spec improvement ([fd80048](https://github.com/bcnmy/biconomy-client-sdk/commit/fd80048db7a60d34412dcb00f6dd8bb202f41ad3)) - - - - - -## 3.0.0 (2023-08-28) - - -### Features - -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) - - - -## 3.0.0-alpha.0 (2023-08-02) - -VERSION Bump Only. - - - -# 3.1.0-alpha.0 (2023-07-24) - - - -### Features - -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - - - -## 3.0.0-alpha.0 (2023-07-12) - - -### Bug Fixes - -* bundler sync changes ([eb9b30d](https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e)) - - -## 2.0.2 (2023-06-10) - -* smart account state types to have factory address added - - -## 2.0.1 (2023-05-18) - - -### Bug Fixes - -* logic update ([41c4aec](https://github.com/bcnmy/biconomy-client-sdk/commit/41c4aec8ab5012b7ad362b2870966bd607e38636)) -* fix build issue in angular for relative path (https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e) - - -### Features - -* chain integrations ([9af2da0](https://github.com/bcnmy/biconomy-client-sdk/commit/9af2da03820a26ac7d21301c32de041ced6c5e43)) -* Type added for PaymasterServiceData + reordering of params ([fae8b3a](https://github.com/bcnmy/biconomy-client-sdk/commit/fae8b3a02a5e810a9a40674d27f389b89199bb62)) -* logic changed to accept paymasterServiceData ([6daaf37](https://github.com/bcnmy/biconomy-client-sdk/commit/6daaf37855a13fa6e12fdbab16a7e980b4631475)) -* UserOpGasFields for fetching gas and gas prices from bundler (https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1) -* skipBundlerGasEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) -* fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) - - - - - - -## 2.0.0 (2023-04-07) - - -### Bug Fixes - -* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -* multisend bundle ([5f55587](https://github.com/bcnmy/biconomy-client-sdk/commit/5f55587b63c82a30652843fe619d8b891e495399)) -* optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) - - -## 1.0.0 (2023-01-03) - - -### Bug Fixes - -* optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) diff --git a/packages/common/README.md b/packages/common/README.md index 8876292b9..db4c4a8c7 100644 --- a/packages/common/README.md +++ b/packages/common/README.md @@ -2,7 +2,7 @@ common utils -methods for processing UserOperations +common methods for other biconomy packages ## Usage diff --git a/packages/common/abis/biconomy_v1.0.0/SmartAccountFactory_v1.0.0.json b/packages/common/abis/biconomy_v1.0.0/SmartAccountFactory_v1.0.0.json deleted file mode 100644 index 6fe41a20a..000000000 --- a/packages/common/abis/biconomy_v1.0.0/SmartAccountFactory_v1.0.0.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccountFactory", - "sourceName": "contracts/smart-contract-wallet/SmartAccountFactory.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_basicImplementation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "AccountCreationWithoutIndex", - "type": "event" - }, - { - "inputs": [], - "name": "accountCreationCode", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "basicImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "deployAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "deployCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getAddressForCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimalHandler", - "outputs": [ - { - "internalType": "contract DefaultCallbackHandler", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60c060405234801561001057600080fd5b50604051610f5a380380610f5a83398101604081905261002f916100de565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601d60248201527f696d706c656d656e746174696f6e2063616e6e6f74206265207a65726f000000604482015260640160405180910390fd5b6001600160a01b0381166080526040516100a2906100d1565b604051809103906000f0801580156100be573d6000803e3d6000fd5b506001600160a01b031660a0525061010e565b6105e68061097483390190565b6000602082840312156100f057600080fd5b81516001600160a01b038116811461010757600080fd5b9392505050565b60805160a05161082661014e6000396000818160c1015261056501526000818161010e015281816101b10152818161032b015261043f01526108266000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063d668bfa811610050578063d668bfa8146100e3578063da9fc1ae146100f6578063daf0dfc81461010957600080fd5b8063088924ef1461007757806331c884df146100a75780633b3cb143146100bc575b600080fd5b61008a6100853660046105fe565b610130565b6040516001600160a01b0390911681526020015b60405180910390f35b6100af6102bd565b60405161009e919061064c565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b61008a6100f13660046105fe565b6102e7565b61008a61010436600461067f565b610408565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b60008061013c84610550565b90506000818051906020012084604051602001610163929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006040518060200161018d906105d5565b601f1982820381018352601f9091011660408190526101da91906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b6040516020818303038152906040529050818151826020016000f593506001600160a01b0384166102525760405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c65640000000000000000000000000060448201526064015b60405180910390fd5b8251156102735760008060008551602087016000895af10361027357600080fd5b84866001600160a01b0316856001600160a01b03167f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f260405160405180910390a450505092915050565b6060604051806020016102cf906105d5565b601f1982820381018352601f90910116604052919050565b6000806102f384610550565b9050600060405180602001610307906105d5565b601f1982820381018352601f90910116604081905261035491906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60408051808303601f1901815282825284516020958601208584015282820196909652805180830382018152606080840183528151918601919091208751978601979097207fff0000000000000000000000000000000000000000000000000000000000000060808501523090911b6bffffffffffffffffffffffff19166081840152609583019690965260b5808301969096528051808303909601865260d5909101905250825192019190912092915050565b6000806040518060200161041b906105d5565b601f1982820381018352601f90910116604081905261046891906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60405160208183030381529060405290508051816020016000f091506001600160a01b0382166104da5760405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606401610249565b60006104e584610550565b8051909150156105095760008060008351602085016000885af10361050957600080fd5b836001600160a01b0316836001600160a01b03167f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf65760405160405180910390a35050919050565b6040516001600160a01b0380831660248301527f000000000000000000000000000000000000000000000000000000000000000016604482015260609060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663784d200b60e11b17905292915050565b61012d806106c483390190565b80356001600160a01b03811681146105f957600080fd5b919050565b6000806040838503121561061157600080fd5b61061a836105e2565b946020939093013593505050565b60005b8381101561064357818101518382015260200161062b565b50506000910152565b602081526000825180602084015261066b816040850160208701610628565b601f01601f19169190910160400192915050565b60006020828403121561069157600080fd5b61069a826105e2565b9392505050565b600083516106b3818460208801610628565b919091019182525060200191905056fe608060405234801561001057600080fd5b5060405161012d38038061012d83398101604081905261002f91610090565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e20616464726573730000604482015260640160405180910390fd5b30556100c0565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b605f806100ce6000396000f3fe608060405230543660008037600080366000845af43d6000803e8080156024573d6000f35b3d6000fdfea2646970667358221220a7977748230fa5c96134083773f708cfbe78723c07e58051ac6bd8c4877a4d5a64736f6c63430008110033a26469706673582212201fec0df9ef9e79bf19660229f5fa1cf6bbf67a01bd022c1b6866ccb255550e5764736f6c63430008110033608060405234801561001057600080fd5b506105c6806100206000396000f3fe608060405234801561001057600080fd5b506004361061007c5760003560e01c8063a3f4df7e1161005b578063a3f4df7e146100fb578063bc197c8114610144578063f23a6e6114610166578063ffa1ad741461018657600080fd5b806223de291461008157806301ffc9a71461009b578063150b7a02146100c3575b600080fd5b61009961008f3660046102a0565b5050505050505050565b005b6100ae6100a936600461034b565b6101c2565b60405190151581526020015b60405180910390f35b6100e26100d136600461037c565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016100ba565b6101376040518060400160405280601881526020017f44656661756c742043616c6c6261636b2048616e646c6572000000000000000081525081565b6040516100ba91906103eb565b6100e261015236600461047e565b63bc197c8160e01b98975050505050505050565b6100e2610174366004610518565b63f23a6e6160e01b9695505050505050565b6101376040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60006001600160e01b03198216630271189760e51b14806101f357506001600160e01b03198216630a85bd0160e11b145b8061020d57506001600160e01b031982166223de2960e01b145b8061022857506001600160e01b031982166301ffc9a760e01b145b92915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461025257600080fd5b919050565b60008083601f84011261026957600080fd5b50813567ffffffffffffffff81111561028157600080fd5b60208301915083602082850101111561029957600080fd5b9250929050565b60008060008060008060008060c0898b0312156102bc57600080fd5b6102c58961022e565b97506102d360208a0161022e565b96506102e160408a0161022e565b955060608901359450608089013567ffffffffffffffff8082111561030557600080fd5b6103118c838d01610257565b909650945060a08b013591508082111561032a57600080fd5b506103378b828c01610257565b999c989b5096995094979396929594505050565b60006020828403121561035d57600080fd5b81356001600160e01b03198116811461037557600080fd5b9392505050565b60008060008060006080868803121561039457600080fd5b61039d8661022e565b94506103ab6020870161022e565b935060408601359250606086013567ffffffffffffffff8111156103ce57600080fd5b6103da88828901610257565b969995985093965092949392505050565b600060208083528351808285015260005b81811015610418578581018301518582016040015282016103fc565b506000604082860101526040601f19601f8301168501019250505092915050565b60008083601f84011261044b57600080fd5b50813567ffffffffffffffff81111561046357600080fd5b6020830191508360208260051b850101111561029957600080fd5b60008060008060008060008060a0898b03121561049a57600080fd5b6104a38961022e565b97506104b160208a0161022e565b9650604089013567ffffffffffffffff808211156104ce57600080fd5b6104da8c838d01610439565b909850965060608b01359150808211156104f357600080fd5b6104ff8c838d01610439565b909650945060808b013591508082111561032a57600080fd5b60008060008060008060a0878903121561053157600080fd5b61053a8761022e565b95506105486020880161022e565b94506040870135935060608701359250608087013567ffffffffffffffff81111561057257600080fd5b61057e89828a01610257565b979a969950949750929593949250505056fea2646970667358221220f9bf68273e40153fec1c25026a3e3145e43e4e63c519d4413921bbc86925381c64736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c8063d668bfa811610050578063d668bfa8146100e3578063da9fc1ae146100f6578063daf0dfc81461010957600080fd5b8063088924ef1461007757806331c884df146100a75780633b3cb143146100bc575b600080fd5b61008a6100853660046105fe565b610130565b6040516001600160a01b0390911681526020015b60405180910390f35b6100af6102bd565b60405161009e919061064c565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b61008a6100f13660046105fe565b6102e7565b61008a61010436600461067f565b610408565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b60008061013c84610550565b90506000818051906020012084604051602001610163929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006040518060200161018d906105d5565b601f1982820381018352601f9091011660408190526101da91906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b6040516020818303038152906040529050818151826020016000f593506001600160a01b0384166102525760405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c65640000000000000000000000000060448201526064015b60405180910390fd5b8251156102735760008060008551602087016000895af10361027357600080fd5b84866001600160a01b0316856001600160a01b03167f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f260405160405180910390a450505092915050565b6060604051806020016102cf906105d5565b601f1982820381018352601f90910116604052919050565b6000806102f384610550565b9050600060405180602001610307906105d5565b601f1982820381018352601f90910116604081905261035491906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60408051808303601f1901815282825284516020958601208584015282820196909652805180830382018152606080840183528151918601919091208751978601979097207fff0000000000000000000000000000000000000000000000000000000000000060808501523090911b6bffffffffffffffffffffffff19166081840152609583019690965260b5808301969096528051808303909601865260d5909101905250825192019190912092915050565b6000806040518060200161041b906105d5565b601f1982820381018352601f90910116604081905261046891906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60405160208183030381529060405290508051816020016000f091506001600160a01b0382166104da5760405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606401610249565b60006104e584610550565b8051909150156105095760008060008351602085016000885af10361050957600080fd5b836001600160a01b0316836001600160a01b03167f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf65760405160405180910390a35050919050565b6040516001600160a01b0380831660248301527f000000000000000000000000000000000000000000000000000000000000000016604482015260609060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663784d200b60e11b17905292915050565b61012d806106c483390190565b80356001600160a01b03811681146105f957600080fd5b919050565b6000806040838503121561061157600080fd5b61061a836105e2565b946020939093013593505050565b60005b8381101561064357818101518382015260200161062b565b50506000910152565b602081526000825180602084015261066b816040850160208701610628565b601f01601f19169190910160400192915050565b60006020828403121561069157600080fd5b61069a826105e2565b9392505050565b600083516106b3818460208801610628565b919091019182525060200191905056fe608060405234801561001057600080fd5b5060405161012d38038061012d83398101604081905261002f91610090565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e20616464726573730000604482015260640160405180910390fd5b30556100c0565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b605f806100ce6000396000f3fe608060405230543660008037600080366000845af43d6000803e8080156024573d6000f35b3d6000fdfea2646970667358221220a7977748230fa5c96134083773f708cfbe78723c07e58051ac6bd8c4877a4d5a64736f6c63430008110033a26469706673582212201fec0df9ef9e79bf19660229f5fa1cf6bbf67a01bd022c1b6866ccb255550e5764736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/biconomy_v1.0.0/SmartAccount_v1.0.0.json b/packages/common/abis/biconomy_v1.0.0/SmartAccount_v1.0.0.json deleted file mode 100644 index 541727bee..000000000 --- a/packages/common/abis/biconomy_v1.0.0/SmartAccount_v1.0.0.json +++ /dev/null @@ -1,1682 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccount", - "sourceName": "contracts/smart-contract-wallet/SmartAccount.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "anEntryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "BaseImplementationCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotAnEntryPoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPointOrOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotSelf", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "name": "CanNotEstimateGas", - "type": "error" - }, - { - "inputs": [], - "name": "DelegateCallsOnly", - "type": "error" - }, - { - "inputs": [], - "name": "EntryPointCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "ExecutionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "HandlerCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementationAddress", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "restoredSigner", - "type": "address" - }, - { - "internalType": "address", - "name": "expectedSigner", - "type": "address" - } - ], - "name": "InvalidSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MixedAuthFail", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleAlreadyEnabled", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "expectedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "returnedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "prevModule", - "type": "address" - } - ], - "name": "ModuleAndPrevModuleMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleCannotBeZeroOrSentinel", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleNotEnabled", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesAlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesSetupExecutionFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "gasLeft", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasRequired", - "type": "uint256" - } - ], - "name": "NotEnoughGasLeft", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCanNotBeSelf", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerProvidedIsSame", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyProtectionActivated", - "type": "error" - }, - { - "inputs": [], - "name": "TokenGasPriceFactorCanNotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "TokenTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TransferToZeroAddressAttempt", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "destLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "valueLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "funcLength", - "type": "uint256" - } - ], - "name": "WrongBatchProvided", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractSignature", - "type": "bytes" - } - ], - "name": "WrongContractSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "uintS", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "contractSignatureLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "signatureLength", - "type": "uint256" - } - ], - "name": "WrongContractSignatureFormat", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "payment", - "type": "uint256" - } - ], - "name": "AccountHandlePayment", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousHandler", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "ChangedFallbackHandler", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "DisabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_scw", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_oldEOA", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_newEOA", - "type": "address" - } - ], - "name": "EOAChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "EnabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "ModuleTransaction", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "SmartAccountReceivedNativeToken", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "addDeposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "checkSignatures", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevModule", - "type": "address" - }, - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "disableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domainSeparator", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "enableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - } - ], - "internalType": "struct Transaction", - "name": "_tx", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "internalType": "struct FeeRefund", - "name": "refundInfo", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "encodeTransactionData", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "entryPoint", - "outputs": [ - { - "internalType": "contract IEntryPoint", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - } - ], - "internalType": "struct Transaction", - "name": "_tx", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "internalType": "struct FeeRefund", - "name": "refundInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "execTransaction", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModuleReturnData", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - } - ], - "internalType": "struct Transaction", - "name": "_tx", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "internalType": "struct FeeRefund", - "name": "refundInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "name": "execTransaction_S6W", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatchCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatchCall_4by", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "executeCall", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "executeCall_s1m", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getChainId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFallbackHandler", - "outputs": [ - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getImplementation", - "outputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "start", - "type": "address" - }, - { - "internalType": "uint256", - "name": "pageSize", - "type": "uint256" - } - ], - "name": "getModulesPaginated", - "outputs": [ - { - "internalType": "address[]", - "name": "array", - "type": "address[]" - }, - { - "internalType": "address", - "name": "next", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "batchId", - "type": "uint256" - } - ], - "name": "getNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "targetTxGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "getTransactionHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "gasUsed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "baseGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenGasPriceFactor", - "type": "uint256" - }, - { - "internalType": "address", - "name": "gasToken", - "type": "address" - }, - { - "internalType": "address payable", - "name": "refundReceiver", - "type": "address" - } - ], - "name": "handlePaymentRevert", - "outputs": [ - { - "internalType": "uint256", - "name": "requiredGas", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "isModuleEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - } - ], - "name": "isValidSignature", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "pullTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "requiredTxGas", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "setFallbackHandler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "setOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "updateImplementation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validateUserOp", - "outputs": [ - { - "internalType": "uint256", - "name": "validationData", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdrawDepositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60e06040523480156200001157600080fd5b5060405162003915380380620039158339810160408190526200003491620000a1565b60016031553060c052603280546001600160a01b03191673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1790556001600160a01b0381166200008b5760405163091748f960e21b815260040160405180910390fd5b6001600160a01b03166080524660a052620000d3565b600060208284031215620000b457600080fd5b81516001600160a01b0381168114620000cc57600080fd5b9392505050565b60805160a05160c0516137e86200012d60003960006102af015260006104ed01526000818161078701528181610dcf01528181610f2c01528181610fd901528181611935015281816119c6015261204f01526137e86000f3fe6080604052600436106102a05760003560e01c80638da5cb5b1161016e578063c399ec88116100cb578063f08a03231161007f578063f698da2511610064578063f698da251461088e578063fc7d3d79146108f7578063ffa1ad741461090a5761031c565b8063f08a03231461084e578063f09a40161461086e5761031c565b8063cc2f8452116100b0578063cc2f8452146107e0578063e009cfde1461080e578063ed516d511461082e5761031c565b8063c399ec88146107ab578063c4ca3a9c146107c05761031c565b8063aaf10f4211610122578063ac85dca711610107578063ac85dca714610743578063affed0e014610763578063b0d691fe146107785761031c565b8063aaf10f421461070f578063abc1b745146107235761031c565b80639e5d4c49116101535780639e5d4c49146106af578063a18f51e5146106cf578063a9059cbb146106ef5761031c565b80638da5cb5b1461066f578063912ccaa31461068f5761031c565b80633a871cdd1161021c5780635229073f116101d0578063610b5925116101b5578063610b5925146105f45780637455ce3c14610614578063856dfd99146106275761031c565b80635229073f146105995780635c0ba299146105c75761031c565b8063468721a711610201578063468721a71461055e5780634a58db191461057e5780634d44560d146105865761031c565b80633a871cdd146105115780633d46b819146105315761031c565b806313af4035116102735780631626ba7e116102585780631626ba7e146104855780632d9ad53d146104be5780633408e470146104de5761031c565b806313af40351461042a578063141a468c1461044a5761031c565b80610772146103825780618f2d146103a457806301ffc9a7146103c4578063025b22bc1461040a5761031c565b3661031c576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102ee57604051633c97166560e21b815260040160405180910390fd5b604051349033907ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce0290600090a3005b34801561032857600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d480548061035357005b36600080373360601b365260008060143601600080855af190503d6000803e8061037c573d6000fd5b503d6000f35b34801561038e57600080fd5b506103a261039d366004612ab2565b610953565b005b3480156103b057600080fd5b506103a26103bf366004612b53565b6109a2565b3480156103d057600080fd5b506103f56103df366004612c03565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b34801561041657600080fd5b506103a2610425366004612c20565b610ab3565b34801561043657600080fd5b506103a2610445366004612c20565b610bbb565b34801561045657600080fd5b50610477610465366004612c3d565b60336020526000908152604090205481565b604051908152602001610401565b34801561049157600080fd5b506104a56104a0366004612d22565b610cbd565b6040516001600160e01b03199091168152602001610401565b3480156104ca57600080fd5b506103f56104d9366004612c20565b610d8a565b3480156104ea57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610477565b34801561051d57600080fd5b5061047761052c366004612d69565b610dc2565b34801561053d57600080fd5b5061047761054c366004612c3d565b60009081526033602052604090205490565b34801561056a57600080fd5b506103f5610579366004612dcc565b610e2b565b6103a2610f2a565b6103a2610594366004612e36565b610faa565b3480156105a557600080fd5b506105b96105b4366004612dcc565b611060565b604051610401929190612eb2565b3480156105d357600080fd5b506105e76105e2366004612fad565b611096565b6040516104019190613005565b34801561060057600080fd5b506103a261060f366004612c20565b6111f0565b6103f5610622366004613018565b611316565b34801561063357600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4545b6040516001600160a01b039091168152602001610401565b34801561067b57600080fd5b50603254610657906001600160a01b031681565b34801561069b57600080fd5b506103a26106aa366004612b53565b611554565b3480156106bb57600080fd5b506103a26106ca366004612ab2565b611562565b3480156106db57600080fd5b506104776106ea36600461308d565b61156e565b3480156106fb57600080fd5b506103a261070a366004612e36565b611707565b34801561071b57600080fd5b503054610657565b34801561072f57600080fd5b5061047761073e3660046130eb565b6117a5565b34801561074f57600080fd5b506103a261075e3660046131b3565b611878565b34801561076f57600080fd5b5061047761190e565b34801561078457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610657565b3480156107b757600080fd5b506104776119a6565b3480156107cc57600080fd5b506104776107db3660046131f4565b6119f5565b3480156107ec57600080fd5b506108006107fb366004612e36565b611a6e565b604051610401929190613265565b34801561081a57600080fd5b506103a26108293660046132c2565b611b67565b34801561083a57600080fd5b506103a2610849366004612d22565b611c99565b34801561085a57600080fd5b506103a2610869366004612c20565b611f2b565b34801561087a57600080fd5b506103a26108893660046132c2565b611fa2565b34801561089a57600080fd5b50610477604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6103f5610905366004613018565b612037565b34801561091657600080fd5b506105e76040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b61095b612044565b61099c848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b50505050565b6109aa612044565b8415806109b75750848314155b806109c25750828114155b156109f657604051630a0c0a9160e31b81526004810186905260248101849052604481018290526064015b60405180910390fd5b60005b85811015610aaa57610aa2878783818110610a1657610a166132fb565b9050602002016020810190610a2b9190612c20565b868684818110610a3d57610a3d6132fb565b90506020020135858585818110610a5657610a566132fb565b9050602002810190610a689190613311565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b6001016109f9565b50505050505050565b6032546001600160a01b03163314801590610ace5750333014155b15610aee576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610b445760405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f0000000000000000000060448201526064016109ed565b6001600160a01b0381163b610b7757604051630c76093760e01b81526001600160a01b03821660048201526024016109ed565b308054908290556040516001600160a01b0380841691908316907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a35050565b6032546001600160a01b03163314801590610bd65750333014155b15610bf6576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610c1d57604051639b15e16f60e01b815260040160405180910390fd5b306001600160a01b03821603610c46576040516375b4d24760e01b815260040160405180910390fd5b6032546001600160a01b0390811690821603610c7557604051638a95d3fb60e01b815260040160405180910390fd5b60328054908290556040516001600160a01b0391821691831690829030907ff2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd490600090a45050565b6032546000906001600160a01b03163b15610d4c57603254604051630b135d3f60e11b81526001600160a01b0390911690631626ba7e90610d049086908690600401613358565b602060405180830381865afa158015610d21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d459190613371565b9050610d84565b610d5683836120c8565b6032546001600160a01b03918216911603610d795750630b135d3f60e11b610d84565b506001600160e01b03195b92915050565b600060016001600160a01b03831614801590610d845750506001600160a01b0390811660009081526020819052604090205416151590565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e0f57604051635dac3db760e11b81523360048201526024016109ed565b610e1984846120ec565b9050610e24826122dd565b9392505050565b60003360011480610e525750336000908152602081905260409020546001600160a01b0316155b15610e72576040516321ac7c5f60e01b81523360048201526024016109ed565b610e7f858585855a612328565b90508015610ef6577f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da3386868686604051610ebe9594939291906133c6565b60405180910390a160405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a2610f22565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024016000604051808303818588803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b5050505050565b6032546001600160a01b03163314610fd75760405163d4ed9a1760e01b81523360048201526024016109ed565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050505050565b6000606061107086868686610e2b565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060007fda033865d68bf4a40a5a7cb4159a99e33dba8569e65ea3e38222eb12d9e66eee60001b856000015186604001518760600151805190602001208860200151896080015189600001518a602001518b604001518c606001518d608001518d6040516020016111139c9b9a99989796959493929190613411565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b611193604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040517fff0000000000000000000000000000000000000000000000000000000000000093841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509392505050565b6111f861242f565b6001600160a01b038116158061121757506001600160a01b0381166001145b156112405760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b0381811660009081526020819052604090205416156112845760405163b29d459560e01b81526001600160a01b03821660048201526024016109ed565b600060208181527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b0385811680865260408087208054939094166001600160a01b03199384161790935560019095528254168417909155519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440910160405180910390a150565b600060026031540361133b57604051637465d9d160e01b815260040160405180910390fd5b600260315560005a6001600090815260336020527f10f6f77027d502f219862b0303542eb5dd005b06fa23ff4d1775aaa45bbf94778054929350909182916113959189918991908561138c836134a0565b91905055611096565b80516020820120925090506113aa8286611c99565b506113d9603f60068860800151901b6113c391906134b9565b60808801516113d4906109c46134db565b612451565b6113e5906101f46134db565b5a1015611444575a611416603f60068960800151901b61140591906134b9565b60808901516113d4906109c46134db565b611422906101f46134db565b604051633b4daac960e01b8152600481019290925260248201526044016109ed565b61148486600001518760400151886060015189602001518960200151600014611471578a60800151612328565b6109c45a61147f91906134ee565b612328565b92508215801561149657506080860151155b80156114a457506020850151155b156114dd5760808601516020860151604051631061f87f60e31b81526004810192909252602482015283151560448201526064016109ed565b60008560200151600014611545576115145a6114f990856134ee565b8751602089015160408a015160608b015160808c0151612467565b905080827f3fd74c38c9f1b6f0499c6d0128fbf77a796dbacc7eda0369b13006dc977bb56b60405160405180910390a35b50506001603155509392505050565b6110588686868686866109a2565b61099c84848484610953565b6000836000036115c05760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420746f6b656e4761735072696365466163746f72000000000060448201526064016109ed565b60005a905060006001600160a01b038416156115dc57836115de565b325b90506001600160a01b0385166116615760003a88106115fd573a6115ff565b875b6116098a8c6134db565b6116139190613501565b9050600080600080600085875af190508061165a5760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b50506116c9565b6000868861166f8b8d6134db565b6116799190613501565b61168391906134b9565b9050611690868383612592565b6116c75760405163190eecf360e31b81526001600160a01b03808816600483015283166024820152604481018290526064016109ed565b505b5a82039250826040516020016116e191815260200190565b60408051601f198184030181529082905262461bcd60e51b82526109ed91600401613005565b6032546001600160a01b031633146117345760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b03821661175b576040516309293b1960e41b815260040160405180910390fd5b600080600080600085875af19050806117a05760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b505050565b6000806040518060a001604052808f6001600160a01b031681526020018b60018111156117d4576117d461338e565b81526020018e81526020018d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081018b90526040805160a0810182528b81529182018a905281018890526001600160a01b0380881660608301528616608082015290915061185d828286611096565b80519060200120925050509c9b505050505050505050505050565b6032546001600160a01b031633146118a55760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b0382166118cc576040516309293b1960e41b815260040160405180910390fd5b6118d7838383612592565b6117a05760405163190eecf360e31b81526001600160a01b03808516600483015283166024820152604481018290526064016109ed565b604051631aab3f0d60e11b8152306004820152600060248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044015b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190613518565b905090565b6040516370a0823160e01b81523060048201526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401611960565b6000805a9050611a3e878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050505a612328565b611a5b57604051632b3f6d1160e21b815260040160405180910390fd5b5a604080519183036020830152016116e1565b606060008267ffffffffffffffff811115611a8b57611a8b612c56565b604051908082528060200260200182016040528015611ab4578160200160208202803683370190505b506001600160a01b0380861660009081526020819052604081205492945091165b6001600160a01b03811615801590611af757506001600160a01b038116600114155b8015611b0257508482105b15611b595780848381518110611b1a57611b1a6132fb565b6001600160a01b039283166020918202929092018101919091529181166000908152918290526040909120541681611b51816134a0565b925050611ad5565b908352919491935090915050565b611b6f61242f565b6001600160a01b0381161580611b8e57506001600160a01b0381166001145b15611bb75760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b03828116600090815260208190526040902054811690821614611c1f576001600160a01b0382811660008181526020819052604090819020549051633103525b60e21b815284841660048201529216602483015260448201526064016109ed565b6001600160a01b03818116600081815260208181526040808320805488871685528285208054919097166001600160a01b03199182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276910160405180910390a15050565b604181511015611ceb5760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207369676e617475726573206c656e6774680000000000000060448201526064016109ed565b600080600080611d0e856020810151604082015160419092015160ff1692909190565b9195509350915060ff8416600003611e535750816041821015611d55576040516338a245ff60e11b81526004810183905260006024820181905260448201526064016109ed565b6020828601810151865190918290611d6e9086906134db565b611d7891906134db565b1115611dab5785516040516338a245ff60e11b8152600481018590526024810183905260448101919091526064016109ed565b604051630b135d3f60e11b808252878501602001916001600160a01b03851690631626ba7e90611de1908c908690600401613358565b602060405180830381865afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e229190613371565b6001600160e01b03191614611e4c578060405163605d348960e01b81526004016109ed9190613005565b5050611ee6565b601e8460ff161115611ed657611ece611e6d600486613531565b8484611ec68a6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9291906126e3565b509050611ee6565b611ee2868585856126e3565b5090505b6032546001600160a01b03828116911614611058576032546040516310b5d43760e21b81526001600160a01b03808416600483015290911660248201526044016109ed565b611f3361242f565b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d454611f5e826127a7565b816001600160a01b0316816001600160a01b03167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c60405160405180910390a35050565b6032546001600160a01b031615611fce576040516393360fbf60e01b81523060048201526024016109ed565b6001600160a01b038216611ff557604051639b15e16f60e01b815260040160405180910390fd5b603280546001600160a01b0319166001600160a01b038416179055612019816127a7565b6120336000604051806020016040528060008152506127f2565b5050565b6000610f22848484611316565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061208857506032546001600160a01b03163314155b156120a8576040516332dbd3c760e11b81523360048201526024016109ed565b565b60008082516020840185875af16040513d6000823e81610fa3573d81fd5b60008060006120d785856128bc565b915091506120e481612901565b509392505050565b600036816120fd6060860186613311565b90925090508015612204576000612117600482848661354a565b61212091613574565b90506361a2b3b760e01b6001600160e01b0319821601612202576000808061214b856004818961354a565b81019061215891906135a4565b6001600160a01b03808416600090815260208190526040902054939650919450925016156121fe57604051631179c1f560e11b81526001600160a01b038416906322f383ea906121ae908c908c90600401613662565b6020604051808303816000875af11580156121cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f19190613518565b9650505050505050610d84565b5050505b505b600061225d856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506122ad612270610140880188613311565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085939250506120c89050565b6032546001600160a01b039081169116146122ce5760019350505050610d84565b50600095945050505050565b50565b80156122da5760405133906000199083906000818181858888f193505050503d806000811461099c576040519150601f19603f3d011682016040523d82523d6000602084013e61099c565b6000600183600181111561233e5761233e61338e565b03612356576000808551602087018986f49050612366565b600080855160208701888a87f190505b80156123cb578360405161237a919061377b565b604051809103902085876001600160a01b03167f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee86866040516123be929190613797565b60405180910390a4612426565b836040516123d9919061377b565b604051809103902085876001600160a01b03167f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a868660405161241d929190613797565b60405180910390a45b95945050505050565b3330146120a8576040516301478e3360e21b81523360048201526024016109ed565b60008183116124605781610e24565b5090919050565b60008360000361248a5760405163653f35a360e01b815260040160405180910390fd5b60006001600160a01b038316156124a157826124a3565b325b90506001600160a01b038416612523573a86106124c0573a6124c2565b855b6124cc888a6134db565b6124d69190613501565b9150600080600080600086865af190508061251d5760405163190eecf360e31b8152600060048201526001600160a01b0383166024820152604481018490526064016109ed565b50612587565b848661252f898b6134db565b6125399190613501565b61254391906134b9565b9150612550848284612592565b6125875760405163190eecf360e31b81526001600160a01b03808616600483015282166024820152604481018390526064016109ed565b509695505050505050565b60006001600160a01b0384166125ea5760405162461bcd60e51b815260206004820152601d60248201527f746f6b656e2063616e206e6f74206265207a65726f206164647265737300000060448201526064016109ed565b6000846001600160a01b03163b116126445760405162461bcd60e51b815260206004820152601c60248201527f746f6b656e20636f6e747261637420646f65736e27742065786973740000000060448201526064016109ed565b604080516001600160a01b03851660248201526044808201859052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b178152825160009182896127105a03f13d80156126c657602081146126ce57600093506126d9565b8193506126d9565b600051158215171593505b5050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561271a575060009050600361279e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561276e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127975760006001925092505061279e565b9150600090505b94509492505050565b6001600160a01b0381166127ce5760405163dd449f5f60e01b815260040160405180910390fd5b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d455565b600160009081526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d546001600160a01b0316156128455760405163df8cc4e360e01b815260040160405180910390fd5b600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556001600160a01b038216156120335761289f8260008360015a612328565b6120335760405163032e3a3960e51b815260040160405180910390fd5b60008082516041036128f25760208301516040840151606085015160001a6128e6878285856126e3565b945094505050506128fa565b506000905060025b9250929050565b60008160048111156129155761291561338e565b0361291d5750565b60018160048111156129315761293161338e565b0361297e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109ed565b60028160048111156129925761299261338e565b036129df5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109ed565b60038160048111156129f3576129f361338e565b036122da5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109ed565b6001600160a01b03811681146122da57600080fd5b8035612a6b81612a4b565b919050565b60008083601f840112612a8257600080fd5b50813567ffffffffffffffff811115612a9a57600080fd5b6020830191508360208285010111156128fa57600080fd5b60008060008060608587031215612ac857600080fd5b8435612ad381612a4b565b935060208501359250604085013567ffffffffffffffff811115612af657600080fd5b612b0287828801612a70565b95989497509550505050565b60008083601f840112612b2057600080fd5b50813567ffffffffffffffff811115612b3857600080fd5b6020830191508360208260051b85010111156128fa57600080fd5b60008060008060008060608789031215612b6c57600080fd5b863567ffffffffffffffff80821115612b8457600080fd5b612b908a838b01612b0e565b90985096506020890135915080821115612ba957600080fd5b612bb58a838b01612b0e565b90965094506040890135915080821115612bce57600080fd5b50612bdb89828a01612b0e565b979a9699509497509295939492505050565b6001600160e01b0319811681146122da57600080fd5b600060208284031215612c1557600080fd5b8135610e2481612bed565b600060208284031215612c3257600080fd5b8135610e2481612a4b565b600060208284031215612c4f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612c8f57612c8f612c56565b60405290565b600082601f830112612ca657600080fd5b813567ffffffffffffffff80821115612cc157612cc1612c56565b604051601f8301601f19908116603f01168101908282118183101715612ce957612ce9612c56565b81604052838152866020858801011115612d0257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612d3557600080fd5b82359150602083013567ffffffffffffffff811115612d5357600080fd5b612d5f85828601612c95565b9150509250929050565b600080600060608486031215612d7e57600080fd5b833567ffffffffffffffff811115612d9557600080fd5b84016101608187031215612da857600080fd5b95602085013595506040909401359392505050565b803560028110612a6b57600080fd5b60008060008060808587031215612de257600080fd5b8435612ded81612a4b565b935060208501359250604085013567ffffffffffffffff811115612e1057600080fd5b612e1c87828801612c95565b925050612e2b60608601612dbd565b905092959194509250565b60008060408385031215612e4957600080fd5b8235612e5481612a4b565b946020939093013593505050565b60005b83811015612e7d578181015183820152602001612e65565b50506000910152565b60008151808452612e9e816020860160208601612e62565b601f01601f19169290920160200192915050565b8215158152604060208201526000610f226040830184612e86565b600060a08284031215612edf57600080fd5b612ee7612c6c565b90508135612ef481612a4b565b8152612f0260208301612dbd565b602082015260408201356040820152606082013567ffffffffffffffff811115612f2b57600080fd5b612f3784828501612c95565b6060830152506080820135608082015292915050565b600060a08284031215612f5f57600080fd5b612f67612c6c565b90508135815260208201356020820152604082013560408201526060820135612f8f81612a4b565b60608201526080820135612fa281612a4b565b608082015292915050565b600080600060e08486031215612fc257600080fd5b833567ffffffffffffffff811115612fd957600080fd5b612fe586828701612ecd565b935050612ff58560208601612f4d565b915060c084013590509250925092565b602081526000610e246020830184612e86565b600080600060e0848603121561302d57600080fd5b833567ffffffffffffffff8082111561304557600080fd5b61305187838801612ecd565b94506130608760208801612f4d565b935060c086013591508082111561307657600080fd5b5061308386828701612c95565b9150509250925092565b60008060008060008060c087890312156130a657600080fd5b8635955060208701359450604087013593506060870135925060808701356130cd81612a4b565b915060a08701356130dd81612a4b565b809150509295509295509295565b6000806000806000806000806000806000806101608d8f03121561310e57600080fd5b6131188d35612a4b565b8c359b5060208d01359a5067ffffffffffffffff60408e0135111561313c57600080fd5b61314c8e60408f01358f01612a70565b909a50985061315d60608e01612dbd565b975060808d0135965060a08d0135955060c08d0135945060e08d013593506101008d013561318a81612a4b565b92506131996101208e01612a60565b91506101408d013590509295989b509295989b509295989b565b6000806000606084860312156131c857600080fd5b83356131d381612a4b565b925060208401356131e381612a4b565b929592945050506040919091013590565b60008060008060006080868803121561320c57600080fd5b853561321781612a4b565b945060208601359350604086013567ffffffffffffffff81111561323a57600080fd5b61324688828901612a70565b9094509250613259905060608701612dbd565b90509295509295909350565b604080825283519082018190526000906020906060840190828701845b828110156132a75781516001600160a01b031684529284019290840190600101613282565b5050506001600160a01b039490941692019190915250919050565b600080604083850312156132d557600080fd5b82356132e081612a4b565b915060208301356132f081612a4b565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332857600080fd5b83018035915067ffffffffffffffff82111561334357600080fd5b6020019150368190038213156128fa57600080fd5b828152604060208201526000610f226040830184612e86565b60006020828403121561338357600080fd5b8151610e2481612bed565b634e487b7160e01b600052602160045260246000fd5b600281106133c257634e487b7160e01b600052602160045260246000fd5b9052565b60006001600160a01b03808816835280871660208401525084604083015260a060608301526133f860a0830185612e86565b905061340760808301846133a4565b9695505050505050565b6000610180820190508d82526001600160a01b03808e1660208401528c60408401528b6060840152613446608084018c6133a4565b8960a08401528860c08401528760e08401528661010084015280861661012084015280851661014084015250826101608301529d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016134b2576134b261348a565b5060010190565b6000826134d657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d8457610d8461348a565b81810381811115610d8457610d8461348a565b8082028115828204841417610d8457610d8461348a565b60006020828403121561352a57600080fd5b5051919050565b60ff8281168282160390811115610d8457610d8461348a565b6000808585111561355a57600080fd5b8386111561356757600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561359c5780818660040360031b1b83161692505b505092915050565b6000806000606084860312156135b957600080fd5b83356135c481612a4b565b925060208401359150604084013567ffffffffffffffff8111156135e757600080fd5b61308386828701612c95565b6000808335601e1984360301811261360a57600080fd5b830160208101925035905067ffffffffffffffff81111561362a57600080fd5b8036038213156128fa57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526136836040820161367685612a60565b6001600160a01b03169052565b60208301356060820152600061369c60408501856135f3565b6101608060808601526136b46101a086018385613639565b92506136c360608801886135f3565b9250603f19808786030160a08801526136dd858584613639565b9450608089013560c088015260a089013560e0880152610100935060c089013584880152610120915060e089013582880152610140848a013581890152613726838b018b6135f3565b9550925081888703018489015261373e868685613639565b955061374c818b018b6135f3565b955093505080878603016101808801525050613769838383613639565b93505050508260208301529392505050565b6000825161378d818460208701612e62565b9190910192915050565b604081016137a582856133a4565b826020830152939250505056fea26469706673582212206d38de10695d463253620f7bec76e681851e44f22392d864735b57ecaf843b1d64736f6c63430008110033", - "deployedBytecode": "0x6080604052600436106102a05760003560e01c80638da5cb5b1161016e578063c399ec88116100cb578063f08a03231161007f578063f698da2511610064578063f698da251461088e578063fc7d3d79146108f7578063ffa1ad741461090a5761031c565b8063f08a03231461084e578063f09a40161461086e5761031c565b8063cc2f8452116100b0578063cc2f8452146107e0578063e009cfde1461080e578063ed516d511461082e5761031c565b8063c399ec88146107ab578063c4ca3a9c146107c05761031c565b8063aaf10f4211610122578063ac85dca711610107578063ac85dca714610743578063affed0e014610763578063b0d691fe146107785761031c565b8063aaf10f421461070f578063abc1b745146107235761031c565b80639e5d4c49116101535780639e5d4c49146106af578063a18f51e5146106cf578063a9059cbb146106ef5761031c565b80638da5cb5b1461066f578063912ccaa31461068f5761031c565b80633a871cdd1161021c5780635229073f116101d0578063610b5925116101b5578063610b5925146105f45780637455ce3c14610614578063856dfd99146106275761031c565b80635229073f146105995780635c0ba299146105c75761031c565b8063468721a711610201578063468721a71461055e5780634a58db191461057e5780634d44560d146105865761031c565b80633a871cdd146105115780633d46b819146105315761031c565b806313af4035116102735780631626ba7e116102585780631626ba7e146104855780632d9ad53d146104be5780633408e470146104de5761031c565b806313af40351461042a578063141a468c1461044a5761031c565b80610772146103825780618f2d146103a457806301ffc9a7146103c4578063025b22bc1461040a5761031c565b3661031c576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102ee57604051633c97166560e21b815260040160405180910390fd5b604051349033907ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce0290600090a3005b34801561032857600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d480548061035357005b36600080373360601b365260008060143601600080855af190503d6000803e8061037c573d6000fd5b503d6000f35b34801561038e57600080fd5b506103a261039d366004612ab2565b610953565b005b3480156103b057600080fd5b506103a26103bf366004612b53565b6109a2565b3480156103d057600080fd5b506103f56103df366004612c03565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b34801561041657600080fd5b506103a2610425366004612c20565b610ab3565b34801561043657600080fd5b506103a2610445366004612c20565b610bbb565b34801561045657600080fd5b50610477610465366004612c3d565b60336020526000908152604090205481565b604051908152602001610401565b34801561049157600080fd5b506104a56104a0366004612d22565b610cbd565b6040516001600160e01b03199091168152602001610401565b3480156104ca57600080fd5b506103f56104d9366004612c20565b610d8a565b3480156104ea57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610477565b34801561051d57600080fd5b5061047761052c366004612d69565b610dc2565b34801561053d57600080fd5b5061047761054c366004612c3d565b60009081526033602052604090205490565b34801561056a57600080fd5b506103f5610579366004612dcc565b610e2b565b6103a2610f2a565b6103a2610594366004612e36565b610faa565b3480156105a557600080fd5b506105b96105b4366004612dcc565b611060565b604051610401929190612eb2565b3480156105d357600080fd5b506105e76105e2366004612fad565b611096565b6040516104019190613005565b34801561060057600080fd5b506103a261060f366004612c20565b6111f0565b6103f5610622366004613018565b611316565b34801561063357600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4545b6040516001600160a01b039091168152602001610401565b34801561067b57600080fd5b50603254610657906001600160a01b031681565b34801561069b57600080fd5b506103a26106aa366004612b53565b611554565b3480156106bb57600080fd5b506103a26106ca366004612ab2565b611562565b3480156106db57600080fd5b506104776106ea36600461308d565b61156e565b3480156106fb57600080fd5b506103a261070a366004612e36565b611707565b34801561071b57600080fd5b503054610657565b34801561072f57600080fd5b5061047761073e3660046130eb565b6117a5565b34801561074f57600080fd5b506103a261075e3660046131b3565b611878565b34801561076f57600080fd5b5061047761190e565b34801561078457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610657565b3480156107b757600080fd5b506104776119a6565b3480156107cc57600080fd5b506104776107db3660046131f4565b6119f5565b3480156107ec57600080fd5b506108006107fb366004612e36565b611a6e565b604051610401929190613265565b34801561081a57600080fd5b506103a26108293660046132c2565b611b67565b34801561083a57600080fd5b506103a2610849366004612d22565b611c99565b34801561085a57600080fd5b506103a2610869366004612c20565b611f2b565b34801561087a57600080fd5b506103a26108893660046132c2565b611fa2565b34801561089a57600080fd5b50610477604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6103f5610905366004613018565b612037565b34801561091657600080fd5b506105e76040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b61095b612044565b61099c848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b50505050565b6109aa612044565b8415806109b75750848314155b806109c25750828114155b156109f657604051630a0c0a9160e31b81526004810186905260248101849052604481018290526064015b60405180910390fd5b60005b85811015610aaa57610aa2878783818110610a1657610a166132fb565b9050602002016020810190610a2b9190612c20565b868684818110610a3d57610a3d6132fb565b90506020020135858585818110610a5657610a566132fb565b9050602002810190610a689190613311565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b6001016109f9565b50505050505050565b6032546001600160a01b03163314801590610ace5750333014155b15610aee576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610b445760405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f0000000000000000000060448201526064016109ed565b6001600160a01b0381163b610b7757604051630c76093760e01b81526001600160a01b03821660048201526024016109ed565b308054908290556040516001600160a01b0380841691908316907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a35050565b6032546001600160a01b03163314801590610bd65750333014155b15610bf6576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610c1d57604051639b15e16f60e01b815260040160405180910390fd5b306001600160a01b03821603610c46576040516375b4d24760e01b815260040160405180910390fd5b6032546001600160a01b0390811690821603610c7557604051638a95d3fb60e01b815260040160405180910390fd5b60328054908290556040516001600160a01b0391821691831690829030907ff2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd490600090a45050565b6032546000906001600160a01b03163b15610d4c57603254604051630b135d3f60e11b81526001600160a01b0390911690631626ba7e90610d049086908690600401613358565b602060405180830381865afa158015610d21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d459190613371565b9050610d84565b610d5683836120c8565b6032546001600160a01b03918216911603610d795750630b135d3f60e11b610d84565b506001600160e01b03195b92915050565b600060016001600160a01b03831614801590610d845750506001600160a01b0390811660009081526020819052604090205416151590565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e0f57604051635dac3db760e11b81523360048201526024016109ed565b610e1984846120ec565b9050610e24826122dd565b9392505050565b60003360011480610e525750336000908152602081905260409020546001600160a01b0316155b15610e72576040516321ac7c5f60e01b81523360048201526024016109ed565b610e7f858585855a612328565b90508015610ef6577f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da3386868686604051610ebe9594939291906133c6565b60405180910390a160405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a2610f22565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024016000604051808303818588803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b5050505050565b6032546001600160a01b03163314610fd75760405163d4ed9a1760e01b81523360048201526024016109ed565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050505050565b6000606061107086868686610e2b565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060007fda033865d68bf4a40a5a7cb4159a99e33dba8569e65ea3e38222eb12d9e66eee60001b856000015186604001518760600151805190602001208860200151896080015189600001518a602001518b604001518c606001518d608001518d6040516020016111139c9b9a99989796959493929190613411565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b611193604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040517fff0000000000000000000000000000000000000000000000000000000000000093841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509392505050565b6111f861242f565b6001600160a01b038116158061121757506001600160a01b0381166001145b156112405760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b0381811660009081526020819052604090205416156112845760405163b29d459560e01b81526001600160a01b03821660048201526024016109ed565b600060208181527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b0385811680865260408087208054939094166001600160a01b03199384161790935560019095528254168417909155519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440910160405180910390a150565b600060026031540361133b57604051637465d9d160e01b815260040160405180910390fd5b600260315560005a6001600090815260336020527f10f6f77027d502f219862b0303542eb5dd005b06fa23ff4d1775aaa45bbf94778054929350909182916113959189918991908561138c836134a0565b91905055611096565b80516020820120925090506113aa8286611c99565b506113d9603f60068860800151901b6113c391906134b9565b60808801516113d4906109c46134db565b612451565b6113e5906101f46134db565b5a1015611444575a611416603f60068960800151901b61140591906134b9565b60808901516113d4906109c46134db565b611422906101f46134db565b604051633b4daac960e01b8152600481019290925260248201526044016109ed565b61148486600001518760400151886060015189602001518960200151600014611471578a60800151612328565b6109c45a61147f91906134ee565b612328565b92508215801561149657506080860151155b80156114a457506020850151155b156114dd5760808601516020860151604051631061f87f60e31b81526004810192909252602482015283151560448201526064016109ed565b60008560200151600014611545576115145a6114f990856134ee565b8751602089015160408a015160608b015160808c0151612467565b905080827f3fd74c38c9f1b6f0499c6d0128fbf77a796dbacc7eda0369b13006dc977bb56b60405160405180910390a35b50506001603155509392505050565b6110588686868686866109a2565b61099c84848484610953565b6000836000036115c05760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420746f6b656e4761735072696365466163746f72000000000060448201526064016109ed565b60005a905060006001600160a01b038416156115dc57836115de565b325b90506001600160a01b0385166116615760003a88106115fd573a6115ff565b875b6116098a8c6134db565b6116139190613501565b9050600080600080600085875af190508061165a5760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b50506116c9565b6000868861166f8b8d6134db565b6116799190613501565b61168391906134b9565b9050611690868383612592565b6116c75760405163190eecf360e31b81526001600160a01b03808816600483015283166024820152604481018290526064016109ed565b505b5a82039250826040516020016116e191815260200190565b60408051601f198184030181529082905262461bcd60e51b82526109ed91600401613005565b6032546001600160a01b031633146117345760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b03821661175b576040516309293b1960e41b815260040160405180910390fd5b600080600080600085875af19050806117a05760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b505050565b6000806040518060a001604052808f6001600160a01b031681526020018b60018111156117d4576117d461338e565b81526020018e81526020018d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081018b90526040805160a0810182528b81529182018a905281018890526001600160a01b0380881660608301528616608082015290915061185d828286611096565b80519060200120925050509c9b505050505050505050505050565b6032546001600160a01b031633146118a55760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b0382166118cc576040516309293b1960e41b815260040160405180910390fd5b6118d7838383612592565b6117a05760405163190eecf360e31b81526001600160a01b03808516600483015283166024820152604481018290526064016109ed565b604051631aab3f0d60e11b8152306004820152600060248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044015b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190613518565b905090565b6040516370a0823160e01b81523060048201526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401611960565b6000805a9050611a3e878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050505a612328565b611a5b57604051632b3f6d1160e21b815260040160405180910390fd5b5a604080519183036020830152016116e1565b606060008267ffffffffffffffff811115611a8b57611a8b612c56565b604051908082528060200260200182016040528015611ab4578160200160208202803683370190505b506001600160a01b0380861660009081526020819052604081205492945091165b6001600160a01b03811615801590611af757506001600160a01b038116600114155b8015611b0257508482105b15611b595780848381518110611b1a57611b1a6132fb565b6001600160a01b039283166020918202929092018101919091529181166000908152918290526040909120541681611b51816134a0565b925050611ad5565b908352919491935090915050565b611b6f61242f565b6001600160a01b0381161580611b8e57506001600160a01b0381166001145b15611bb75760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b03828116600090815260208190526040902054811690821614611c1f576001600160a01b0382811660008181526020819052604090819020549051633103525b60e21b815284841660048201529216602483015260448201526064016109ed565b6001600160a01b03818116600081815260208181526040808320805488871685528285208054919097166001600160a01b03199182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276910160405180910390a15050565b604181511015611ceb5760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207369676e617475726573206c656e6774680000000000000060448201526064016109ed565b600080600080611d0e856020810151604082015160419092015160ff1692909190565b9195509350915060ff8416600003611e535750816041821015611d55576040516338a245ff60e11b81526004810183905260006024820181905260448201526064016109ed565b6020828601810151865190918290611d6e9086906134db565b611d7891906134db565b1115611dab5785516040516338a245ff60e11b8152600481018590526024810183905260448101919091526064016109ed565b604051630b135d3f60e11b808252878501602001916001600160a01b03851690631626ba7e90611de1908c908690600401613358565b602060405180830381865afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e229190613371565b6001600160e01b03191614611e4c578060405163605d348960e01b81526004016109ed9190613005565b5050611ee6565b601e8460ff161115611ed657611ece611e6d600486613531565b8484611ec68a6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9291906126e3565b509050611ee6565b611ee2868585856126e3565b5090505b6032546001600160a01b03828116911614611058576032546040516310b5d43760e21b81526001600160a01b03808416600483015290911660248201526044016109ed565b611f3361242f565b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d454611f5e826127a7565b816001600160a01b0316816001600160a01b03167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c60405160405180910390a35050565b6032546001600160a01b031615611fce576040516393360fbf60e01b81523060048201526024016109ed565b6001600160a01b038216611ff557604051639b15e16f60e01b815260040160405180910390fd5b603280546001600160a01b0319166001600160a01b038416179055612019816127a7565b6120336000604051806020016040528060008152506127f2565b5050565b6000610f22848484611316565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061208857506032546001600160a01b03163314155b156120a8576040516332dbd3c760e11b81523360048201526024016109ed565b565b60008082516020840185875af16040513d6000823e81610fa3573d81fd5b60008060006120d785856128bc565b915091506120e481612901565b509392505050565b600036816120fd6060860186613311565b90925090508015612204576000612117600482848661354a565b61212091613574565b90506361a2b3b760e01b6001600160e01b0319821601612202576000808061214b856004818961354a565b81019061215891906135a4565b6001600160a01b03808416600090815260208190526040902054939650919450925016156121fe57604051631179c1f560e11b81526001600160a01b038416906322f383ea906121ae908c908c90600401613662565b6020604051808303816000875af11580156121cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f19190613518565b9650505050505050610d84565b5050505b505b600061225d856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506122ad612270610140880188613311565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085939250506120c89050565b6032546001600160a01b039081169116146122ce5760019350505050610d84565b50600095945050505050565b50565b80156122da5760405133906000199083906000818181858888f193505050503d806000811461099c576040519150601f19603f3d011682016040523d82523d6000602084013e61099c565b6000600183600181111561233e5761233e61338e565b03612356576000808551602087018986f49050612366565b600080855160208701888a87f190505b80156123cb578360405161237a919061377b565b604051809103902085876001600160a01b03167f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee86866040516123be929190613797565b60405180910390a4612426565b836040516123d9919061377b565b604051809103902085876001600160a01b03167f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a868660405161241d929190613797565b60405180910390a45b95945050505050565b3330146120a8576040516301478e3360e21b81523360048201526024016109ed565b60008183116124605781610e24565b5090919050565b60008360000361248a5760405163653f35a360e01b815260040160405180910390fd5b60006001600160a01b038316156124a157826124a3565b325b90506001600160a01b038416612523573a86106124c0573a6124c2565b855b6124cc888a6134db565b6124d69190613501565b9150600080600080600086865af190508061251d5760405163190eecf360e31b8152600060048201526001600160a01b0383166024820152604481018490526064016109ed565b50612587565b848661252f898b6134db565b6125399190613501565b61254391906134b9565b9150612550848284612592565b6125875760405163190eecf360e31b81526001600160a01b03808616600483015282166024820152604481018390526064016109ed565b509695505050505050565b60006001600160a01b0384166125ea5760405162461bcd60e51b815260206004820152601d60248201527f746f6b656e2063616e206e6f74206265207a65726f206164647265737300000060448201526064016109ed565b6000846001600160a01b03163b116126445760405162461bcd60e51b815260206004820152601c60248201527f746f6b656e20636f6e747261637420646f65736e27742065786973740000000060448201526064016109ed565b604080516001600160a01b03851660248201526044808201859052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b178152825160009182896127105a03f13d80156126c657602081146126ce57600093506126d9565b8193506126d9565b600051158215171593505b5050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561271a575060009050600361279e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561276e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127975760006001925092505061279e565b9150600090505b94509492505050565b6001600160a01b0381166127ce5760405163dd449f5f60e01b815260040160405180910390fd5b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d455565b600160009081526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d546001600160a01b0316156128455760405163df8cc4e360e01b815260040160405180910390fd5b600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556001600160a01b038216156120335761289f8260008360015a612328565b6120335760405163032e3a3960e51b815260040160405180910390fd5b60008082516041036128f25760208301516040840151606085015160001a6128e6878285856126e3565b945094505050506128fa565b506000905060025b9250929050565b60008160048111156129155761291561338e565b0361291d5750565b60018160048111156129315761293161338e565b0361297e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109ed565b60028160048111156129925761299261338e565b036129df5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109ed565b60038160048111156129f3576129f361338e565b036122da5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109ed565b6001600160a01b03811681146122da57600080fd5b8035612a6b81612a4b565b919050565b60008083601f840112612a8257600080fd5b50813567ffffffffffffffff811115612a9a57600080fd5b6020830191508360208285010111156128fa57600080fd5b60008060008060608587031215612ac857600080fd5b8435612ad381612a4b565b935060208501359250604085013567ffffffffffffffff811115612af657600080fd5b612b0287828801612a70565b95989497509550505050565b60008083601f840112612b2057600080fd5b50813567ffffffffffffffff811115612b3857600080fd5b6020830191508360208260051b85010111156128fa57600080fd5b60008060008060008060608789031215612b6c57600080fd5b863567ffffffffffffffff80821115612b8457600080fd5b612b908a838b01612b0e565b90985096506020890135915080821115612ba957600080fd5b612bb58a838b01612b0e565b90965094506040890135915080821115612bce57600080fd5b50612bdb89828a01612b0e565b979a9699509497509295939492505050565b6001600160e01b0319811681146122da57600080fd5b600060208284031215612c1557600080fd5b8135610e2481612bed565b600060208284031215612c3257600080fd5b8135610e2481612a4b565b600060208284031215612c4f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612c8f57612c8f612c56565b60405290565b600082601f830112612ca657600080fd5b813567ffffffffffffffff80821115612cc157612cc1612c56565b604051601f8301601f19908116603f01168101908282118183101715612ce957612ce9612c56565b81604052838152866020858801011115612d0257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612d3557600080fd5b82359150602083013567ffffffffffffffff811115612d5357600080fd5b612d5f85828601612c95565b9150509250929050565b600080600060608486031215612d7e57600080fd5b833567ffffffffffffffff811115612d9557600080fd5b84016101608187031215612da857600080fd5b95602085013595506040909401359392505050565b803560028110612a6b57600080fd5b60008060008060808587031215612de257600080fd5b8435612ded81612a4b565b935060208501359250604085013567ffffffffffffffff811115612e1057600080fd5b612e1c87828801612c95565b925050612e2b60608601612dbd565b905092959194509250565b60008060408385031215612e4957600080fd5b8235612e5481612a4b565b946020939093013593505050565b60005b83811015612e7d578181015183820152602001612e65565b50506000910152565b60008151808452612e9e816020860160208601612e62565b601f01601f19169290920160200192915050565b8215158152604060208201526000610f226040830184612e86565b600060a08284031215612edf57600080fd5b612ee7612c6c565b90508135612ef481612a4b565b8152612f0260208301612dbd565b602082015260408201356040820152606082013567ffffffffffffffff811115612f2b57600080fd5b612f3784828501612c95565b6060830152506080820135608082015292915050565b600060a08284031215612f5f57600080fd5b612f67612c6c565b90508135815260208201356020820152604082013560408201526060820135612f8f81612a4b565b60608201526080820135612fa281612a4b565b608082015292915050565b600080600060e08486031215612fc257600080fd5b833567ffffffffffffffff811115612fd957600080fd5b612fe586828701612ecd565b935050612ff58560208601612f4d565b915060c084013590509250925092565b602081526000610e246020830184612e86565b600080600060e0848603121561302d57600080fd5b833567ffffffffffffffff8082111561304557600080fd5b61305187838801612ecd565b94506130608760208801612f4d565b935060c086013591508082111561307657600080fd5b5061308386828701612c95565b9150509250925092565b60008060008060008060c087890312156130a657600080fd5b8635955060208701359450604087013593506060870135925060808701356130cd81612a4b565b915060a08701356130dd81612a4b565b809150509295509295509295565b6000806000806000806000806000806000806101608d8f03121561310e57600080fd5b6131188d35612a4b565b8c359b5060208d01359a5067ffffffffffffffff60408e0135111561313c57600080fd5b61314c8e60408f01358f01612a70565b909a50985061315d60608e01612dbd565b975060808d0135965060a08d0135955060c08d0135945060e08d013593506101008d013561318a81612a4b565b92506131996101208e01612a60565b91506101408d013590509295989b509295989b509295989b565b6000806000606084860312156131c857600080fd5b83356131d381612a4b565b925060208401356131e381612a4b565b929592945050506040919091013590565b60008060008060006080868803121561320c57600080fd5b853561321781612a4b565b945060208601359350604086013567ffffffffffffffff81111561323a57600080fd5b61324688828901612a70565b9094509250613259905060608701612dbd565b90509295509295909350565b604080825283519082018190526000906020906060840190828701845b828110156132a75781516001600160a01b031684529284019290840190600101613282565b5050506001600160a01b039490941692019190915250919050565b600080604083850312156132d557600080fd5b82356132e081612a4b565b915060208301356132f081612a4b565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332857600080fd5b83018035915067ffffffffffffffff82111561334357600080fd5b6020019150368190038213156128fa57600080fd5b828152604060208201526000610f226040830184612e86565b60006020828403121561338357600080fd5b8151610e2481612bed565b634e487b7160e01b600052602160045260246000fd5b600281106133c257634e487b7160e01b600052602160045260246000fd5b9052565b60006001600160a01b03808816835280871660208401525084604083015260a060608301526133f860a0830185612e86565b905061340760808301846133a4565b9695505050505050565b6000610180820190508d82526001600160a01b03808e1660208401528c60408401528b6060840152613446608084018c6133a4565b8960a08401528860c08401528760e08401528661010084015280861661012084015280851661014084015250826101608301529d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016134b2576134b261348a565b5060010190565b6000826134d657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d8457610d8461348a565b81810381811115610d8457610d8461348a565b8082028115828204841417610d8457610d8461348a565b60006020828403121561352a57600080fd5b5051919050565b60ff8281168282160390811115610d8457610d8461348a565b6000808585111561355a57600080fd5b8386111561356757600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561359c5780818660040360031b1b83161692505b505092915050565b6000806000606084860312156135b957600080fd5b83356135c481612a4b565b925060208401359150604084013567ffffffffffffffff8111156135e757600080fd5b61308386828701612c95565b6000808335601e1984360301811261360a57600080fd5b830160208101925035905067ffffffffffffffff81111561362a57600080fd5b8036038213156128fa57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526136836040820161367685612a60565b6001600160a01b03169052565b60208301356060820152600061369c60408501856135f3565b6101608060808601526136b46101a086018385613639565b92506136c360608801886135f3565b9250603f19808786030160a08801526136dd858584613639565b9450608089013560c088015260a089013560e0880152610100935060c089013584880152610120915060e089013582880152610140848a013581890152613726838b018b6135f3565b9550925081888703018489015261373e868685613639565b955061374c818b018b6135f3565b955093505080878603016101808801525050613769838383613639565b93505050508260208301529392505050565b6000825161378d818460208701612e62565b9190910192915050565b604081016137a582856133a4565b826020830152939250505056fea26469706673582212206d38de10695d463253620f7bec76e681851e44f22392d864735b57ecaf843b1d64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v1.0.0.json b/packages/common/abis/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v1.0.0.json deleted file mode 100644 index 454215192..000000000 --- a/packages/common/abis/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v1.0.0.json +++ /dev/null @@ -1,298 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "EcdsaOwnershipRegistryModule", - "sourceName": "contracts/smart-account/modules/EcdsaOwnershipRegistryModule.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "AlreadyInitedForSmartAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "NoOwnerRegisteredForSmartAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NotEOA", - "type": "error" - }, - { - "inputs": [], - "name": "WrongSignatureLength", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressNotAllowedAsOwner", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "smartAccount", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "oldOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "NAME", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "getOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "eoaOwner", - "type": "address" - } - ], - "name": "initForSmartAccount", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "moduleSignature", - "type": "bytes" - } - ], - "name": "isValidSignature", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "moduleSignature", - "type": "bytes" - }, - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "isValidSignatureForAddress", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - } - ], - "name": "validateUserOp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50610aed806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063f2fde38b11610076578063fa5441611161005b578063fa54416114610195578063ffa1ad74146101a8578063fff35b72146101e457600080fd5b8063f2fde38b1461016f578063f44c339d1461018257600080fd5b80631626ba7e146100a85780632ede3bc0146100f1578063715018a61461011c578063a3f4df7e14610126575b600080fd5b6100bb6100b636600461089b565b610205565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b6101046100ff3660046108f7565b61021b565b6040516001600160a01b0390911681526020016100e8565b6101246102bf565b005b6101626040518060400160405280601f81526020017f4543445341204f776e657273686970205265676973747279204d6f64756c650081525081565b6040516100e89190610914565b61012461017d3660046108f7565b6102cc565b6100bb610190366004610962565b61032b565b6101046101a33660046108f7565b610375565b6101626040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6101f76101f23660046109bd565b6103bb565b6040519081526020016100e8565b600061021283833361032b565b90505b92915050565b336000908152602081905260408120546001600160a01b03161561025957604051632c4dfb7d60e21b81523360048201526024015b60405180910390fd5b6001600160a01b038216610280576040516307e179e960e31b815260040160405180910390fd5b50336000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790553090565b6102ca33600061040c565b565b803b156102f7576040516377817ac360e01b81526001600160a01b0382166004820152602401610250565b6001600160a01b03811661031e576040516307e179e960e31b815260040160405180910390fd5b610328338261040c565b50565b600061033884848461047d565b1561034b5750630b135d3f60e11b61036e565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b6001600160a01b038082166000908152602081905260408120549091168061021557604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6000806103cc610140850185610a08565b8101906103d99190610a4f565b5090506103f383826103ee60208801886108f7565b61047d565b15610402576000915050610215565b5060019392505050565b6001600160a01b03808316600081815260208190526040808220805486861673ffffffffffffffffffffffffffffffffffffffff19821681179092559151919094169392849290917fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec9190a4505050565b6001600160a01b03808216600090815260208190526040812054909116806104c357604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6041845110156104e657604051632bb1a9c560e11b815260040160405180910390fd5b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c869052603c812061051f9086610581565b9050806001600160a01b0316826001600160a01b0316036105455760019250505061036e565b61054f8686610581565b9050806001600160a01b0316826001600160a01b0316036105755760019250505061036e565b50600095945050505050565b600080600061059085856105a5565b9150915061059d816105ea565b509392505050565b60008082516041036105db5760208301516040840151606085015160001a6105cf87828585610734565b945094505050506105e3565b506000905060025b9250929050565b60008160048111156105fe576105fe610aa1565b036106065750565b600181600481111561061a5761061a610aa1565b036106675760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610250565b600281600481111561067b5761067b610aa1565b036106c85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610250565b60038160048111156106dc576106dc610aa1565b036103285760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610250565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561076b57506000905060036107ef565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156107bf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166107e8576000600192509250506107ef565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261081f57600080fd5b813567ffffffffffffffff8082111561083a5761083a6107f8565b604051601f8301601f19908116603f01168101908282118183101715610862576108626107f8565b8160405283815286602085880101111561087b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156108ae57600080fd5b82359150602083013567ffffffffffffffff8111156108cc57600080fd5b6108d88582860161080e565b9150509250929050565b6001600160a01b038116811461032857600080fd5b60006020828403121561090957600080fd5b813561036e816108e2565b600060208083528351808285015260005b8181101561094157858101830151858201604001528201610925565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060006060848603121561097757600080fd5b83359250602084013567ffffffffffffffff81111561099557600080fd5b6109a18682870161080e565b92505060408401356109b2816108e2565b809150509250925092565b600080604083850312156109d057600080fd5b823567ffffffffffffffff8111156109e757600080fd5b830161016081860312156109fa57600080fd5b946020939093013593505050565b6000808335601e19843603018112610a1f57600080fd5b83018035915067ffffffffffffffff821115610a3a57600080fd5b6020019150368190038213156105e357600080fd5b60008060408385031215610a6257600080fd5b823567ffffffffffffffff811115610a7957600080fd5b610a858582860161080e565b9250506020830135610a96816108e2565b809150509250929050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212200f64d9f85c9789441febe939ee2ec56eca850156ea304b5eabd0856fee5e186e64736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c8063f2fde38b11610076578063fa5441611161005b578063fa54416114610195578063ffa1ad74146101a8578063fff35b72146101e457600080fd5b8063f2fde38b1461016f578063f44c339d1461018257600080fd5b80631626ba7e146100a85780632ede3bc0146100f1578063715018a61461011c578063a3f4df7e14610126575b600080fd5b6100bb6100b636600461089b565b610205565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b6101046100ff3660046108f7565b61021b565b6040516001600160a01b0390911681526020016100e8565b6101246102bf565b005b6101626040518060400160405280601f81526020017f4543445341204f776e657273686970205265676973747279204d6f64756c650081525081565b6040516100e89190610914565b61012461017d3660046108f7565b6102cc565b6100bb610190366004610962565b61032b565b6101046101a33660046108f7565b610375565b6101626040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6101f76101f23660046109bd565b6103bb565b6040519081526020016100e8565b600061021283833361032b565b90505b92915050565b336000908152602081905260408120546001600160a01b03161561025957604051632c4dfb7d60e21b81523360048201526024015b60405180910390fd5b6001600160a01b038216610280576040516307e179e960e31b815260040160405180910390fd5b50336000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790553090565b6102ca33600061040c565b565b803b156102f7576040516377817ac360e01b81526001600160a01b0382166004820152602401610250565b6001600160a01b03811661031e576040516307e179e960e31b815260040160405180910390fd5b610328338261040c565b50565b600061033884848461047d565b1561034b5750630b135d3f60e11b61036e565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b6001600160a01b038082166000908152602081905260408120549091168061021557604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6000806103cc610140850185610a08565b8101906103d99190610a4f565b5090506103f383826103ee60208801886108f7565b61047d565b15610402576000915050610215565b5060019392505050565b6001600160a01b03808316600081815260208190526040808220805486861673ffffffffffffffffffffffffffffffffffffffff19821681179092559151919094169392849290917fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec9190a4505050565b6001600160a01b03808216600090815260208190526040812054909116806104c357604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6041845110156104e657604051632bb1a9c560e11b815260040160405180910390fd5b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c869052603c812061051f9086610581565b9050806001600160a01b0316826001600160a01b0316036105455760019250505061036e565b61054f8686610581565b9050806001600160a01b0316826001600160a01b0316036105755760019250505061036e565b50600095945050505050565b600080600061059085856105a5565b9150915061059d816105ea565b509392505050565b60008082516041036105db5760208301516040840151606085015160001a6105cf87828585610734565b945094505050506105e3565b506000905060025b9250929050565b60008160048111156105fe576105fe610aa1565b036106065750565b600181600481111561061a5761061a610aa1565b036106675760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610250565b600281600481111561067b5761067b610aa1565b036106c85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610250565b60038160048111156106dc576106dc610aa1565b036103285760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610250565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561076b57506000905060036107ef565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156107bf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166107e8576000600192509250506107ef565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261081f57600080fd5b813567ffffffffffffffff8082111561083a5761083a6107f8565b604051601f8301601f19908116603f01168101908282118183101715610862576108626107f8565b8160405283815286602085880101111561087b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156108ae57600080fd5b82359150602083013567ffffffffffffffff8111156108cc57600080fd5b6108d88582860161080e565b9150509250929050565b6001600160a01b038116811461032857600080fd5b60006020828403121561090957600080fd5b813561036e816108e2565b600060208083528351808285015260005b8181101561094157858101830151858201604001528201610925565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060006060848603121561097757600080fd5b83359250602084013567ffffffffffffffff81111561099557600080fd5b6109a18682870161080e565b92505060408401356109b2816108e2565b809150509250925092565b600080604083850312156109d057600080fd5b823567ffffffffffffffff8111156109e757600080fd5b830161016081860312156109fa57600080fd5b946020939093013593505050565b6000808335601e19843603018112610a1f57600080fd5b83018035915067ffffffffffffffff821115610a3a57600080fd5b6020019150368190038213156105e357600080fd5b60008060408385031215610a6257600080fd5b823567ffffffffffffffff811115610a7957600080fd5b610a858582860161080e565b9250506020830135610a96816108e2565b809150509250929050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212200f64d9f85c9789441febe939ee2ec56eca850156ea304b5eabd0856fee5e186e64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} - } - \ No newline at end of file diff --git a/packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json b/packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json deleted file mode 100644 index 10709b249..000000000 --- a/packages/common/abis/biconomy_v2.0.0/MultiChainValidationModule_v1.0.0.json +++ /dev/null @@ -1,298 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "MultichainECDSAValidator", - "sourceName": "contracts/smart-account/modules/MultichainECDSAValidator.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "AlreadyInitedForSmartAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "NoOwnerRegisteredForSmartAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NotEOA", - "type": "error" - }, - { - "inputs": [], - "name": "WrongSignatureLength", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressNotAllowedAsOwner", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "smartAccount", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "oldOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "NAME", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "getOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "eoaOwner", - "type": "address" - } - ], - "name": "initForSmartAccount", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "moduleSignature", - "type": "bytes" - } - ], - "name": "isValidSignature", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "moduleSignature", - "type": "bytes" - }, - { - "internalType": "address", - "name": "smartAccount", - "type": "address" - } - ], - "name": "isValidSignatureForAddress", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - } - ], - "name": "validateUserOp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x6080806040523461001657610b9b908161001c8239f35b600080fdfe6040608081526004908136101561001557600080fd5b6000803560e01c80631626ba7e1461040a5780632ede3bc014610388578063715018a614610318578063a3f4df7e146102c3578063f2fde38b1461020d578063f44c339d14610185578063fa5441611461012d578063ffa1ad74146100d45763fff35b721461008357600080fd5b346100cd576003199082823601126100cd5783359167ffffffffffffffff83116100d0576101609083360301126100cd57506020926100c691602435910161085d565b9051908152f35b80fd5b5080fd5b5090346100d057816003193601126100d0578051610129916100f58261044a565b600582527f302e322e300000000000000000000000000000000000000000000000000000006020830152519182918261053f565b0390f35b5082346100d05760203660031901126100d0576001600160a01b038381610152610506565b16938481528060205220541691821561016f576020838551908152f35b8351633d3fff5360e21b81529182015260249150fd5b5091346102095760603660031901126102095760243567ffffffffffffffff8111610205576101b790369083016104ba565b90604435936001600160a01b03851685036100cd5750926101db916020943561056b565b90517fffffffff000000000000000000000000000000000000000000000000000000009091168152f35b8380fd5b8280fd5b5091903461020957602036600319011261020957610229610506565b803b6102a4576001600160a01b0380911692831561029657503384528360205281842054169083208273ffffffffffffffffffffffffffffffffffffffff19825416179055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8480a480f35b82516307e179e960e31b8152fd5b826001600160a01b0360249351926377817ac360e01b84521690820152fd5b5090346100d057816003193601126100d0578051610129916102e48261044a565b601f82527f4543445341204f776e657273686970205265676973747279204d6f64756c65006020830152519182918261053f565b50809134610385578160031936011261038557338252816020526001600160a01b03818320541690822073ffffffffffffffffffffffffffffffffffffffff198154169055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a480f35b50fd5b509134610209576020366003190112610209576103a3610506565b338452836020526001600160a01b03908184862054166103f45716908115610296575081602093338152808552209073ffffffffffffffffffffffffffffffffffffffff1982541617905551308152f35b8351632c4dfb7d60e21b81523381850152602490fd5b50346100cd57816003193601126100cd576024359067ffffffffffffffff82116100cd57506020926104426101db92369083016104ba565b33913561056b565b6040810190811067ffffffffffffffff82111761046657604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761046657604052565b67ffffffffffffffff811161046657601f01601f191660200190565b81601f82011215610501578035906104d18261049e565b926104df604051948561047c565b8284526020838301011161050157816000926020809301838601378301015290565b600080fd5b600435906001600160a01b038216820361050157565b60005b83811061052f5750506000910152565b818101518382015260200161051f565b6040916020825261055f815180928160208601526020868601910161051c565b601f01601f1916010190565b9061057692916105a9565b61059e577fffffffff0000000000000000000000000000000000000000000000000000000090565b630b135d3f60e11b90565b916001600160a01b0380911691600093838552846020528260408620541693841561065757506041825110610645577f19457468657265756d205369676e6564204d6573736167653a0a333200000000855280601c528261061861061084603c8920610789565b91909161066f565b16841461063b5761062c9161061091610789565b16146106355790565b50600190565b5050505050600190565b604051632bb1a9c560e11b8152600490fd5b60249060405190633d3fff5360e21b82526004820152fd5b600581101561077357806106805750565b600181036106cd5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b6002810361071a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b60031461072357565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b634e487b7160e01b600052602160045260246000fd5b9060418151146000146107b7576107b3916020820151906060604084015193015160001a906107c1565b9091565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831161083e5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156108315781516001600160a01b03811615610635579190565b50604051903d90823e3d90fd5b50505050600090600390565b519065ffffffffffff8216820361050157565b919091610140810135601e19823603018112156105015781019182359267ffffffffffffffff9081851161050157602092838201958036038713610501578201604096878483031261050157359084821161050157879186806108c49301918601016104ba565b920135946001600160a01b0395868116036105015735966041835114610b43578251830160a0848783019203126105015761090086850161084a565b9061090c89860161084a565b9060608601519160808701518881116105015787019782603f8a011215610501578989015197818911610466578a998d9960059a818c1b9161095482519e8f9085019061047c565b8d528d8d019183010191868311610501578f8e9101915b838310610b33575050505060a081015190828211610501570183603f8201121561050157808b01518d9461099e8261049e565b956109ab8151978861047c565b8287528284010111610501576109c6918e8d8701910161051c565b8b51908a8201927fffffffffffff000000000000000000000000000000000000000000000000000090818860d01b16855260d01b1696876026840152602c830152602c8252606082019082821090821117610466578c52519020986000995b88518b1015610a84578a881b89018a0151908c600083831015610a7757505060005289528a6000205b996000198114610a615760010199610a25565b634e487b7160e01b600052601160045260246000fd5b91909282528b5220610a4e565b91965094999a93985081965096919603610af05750610aa8949596975016916105a9565b15610ae95779ffffffffffff00000000000000000000000000000000000000009065ffffffffffff90818116610ae257505b60a01b161790565b9050610ada565b5050600190565b60649089519062461bcd60e51b82526004820152600e60248201527f496e76616c696420557365724f700000000000000000000000000000000000006044820152fd5b82518152918101918e910161096b565b94925095909250610b56945016916105a9565b15610b6057600090565b60019056fea26469706673582212202a3242d73a2c92fd929c32924b5f964b80434c765985e101142ea4635452e6a664736f6c63430008110033", - "deployedBytecode": "0x6040608081526004908136101561001557600080fd5b6000803560e01c80631626ba7e1461040a5780632ede3bc014610388578063715018a614610318578063a3f4df7e146102c3578063f2fde38b1461020d578063f44c339d14610185578063fa5441611461012d578063ffa1ad74146100d45763fff35b721461008357600080fd5b346100cd576003199082823601126100cd5783359167ffffffffffffffff83116100d0576101609083360301126100cd57506020926100c691602435910161085d565b9051908152f35b80fd5b5080fd5b5090346100d057816003193601126100d0578051610129916100f58261044a565b600582527f302e322e300000000000000000000000000000000000000000000000000000006020830152519182918261053f565b0390f35b5082346100d05760203660031901126100d0576001600160a01b038381610152610506565b16938481528060205220541691821561016f576020838551908152f35b8351633d3fff5360e21b81529182015260249150fd5b5091346102095760603660031901126102095760243567ffffffffffffffff8111610205576101b790369083016104ba565b90604435936001600160a01b03851685036100cd5750926101db916020943561056b565b90517fffffffff000000000000000000000000000000000000000000000000000000009091168152f35b8380fd5b8280fd5b5091903461020957602036600319011261020957610229610506565b803b6102a4576001600160a01b0380911692831561029657503384528360205281842054169083208273ffffffffffffffffffffffffffffffffffffffff19825416179055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8480a480f35b82516307e179e960e31b8152fd5b826001600160a01b0360249351926377817ac360e01b84521690820152fd5b5090346100d057816003193601126100d0578051610129916102e48261044a565b601f82527f4543445341204f776e657273686970205265676973747279204d6f64756c65006020830152519182918261053f565b50809134610385578160031936011261038557338252816020526001600160a01b03818320541690822073ffffffffffffffffffffffffffffffffffffffff198154169055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a480f35b50fd5b509134610209576020366003190112610209576103a3610506565b338452836020526001600160a01b03908184862054166103f45716908115610296575081602093338152808552209073ffffffffffffffffffffffffffffffffffffffff1982541617905551308152f35b8351632c4dfb7d60e21b81523381850152602490fd5b50346100cd57816003193601126100cd576024359067ffffffffffffffff82116100cd57506020926104426101db92369083016104ba565b33913561056b565b6040810190811067ffffffffffffffff82111761046657604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761046657604052565b67ffffffffffffffff811161046657601f01601f191660200190565b81601f82011215610501578035906104d18261049e565b926104df604051948561047c565b8284526020838301011161050157816000926020809301838601378301015290565b600080fd5b600435906001600160a01b038216820361050157565b60005b83811061052f5750506000910152565b818101518382015260200161051f565b6040916020825261055f815180928160208601526020868601910161051c565b601f01601f1916010190565b9061057692916105a9565b61059e577fffffffff0000000000000000000000000000000000000000000000000000000090565b630b135d3f60e11b90565b916001600160a01b0380911691600093838552846020528260408620541693841561065757506041825110610645577f19457468657265756d205369676e6564204d6573736167653a0a333200000000855280601c528261061861061084603c8920610789565b91909161066f565b16841461063b5761062c9161061091610789565b16146106355790565b50600190565b5050505050600190565b604051632bb1a9c560e11b8152600490fd5b60249060405190633d3fff5360e21b82526004820152fd5b600581101561077357806106805750565b600181036106cd5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b6002810361071a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b60031461072357565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b634e487b7160e01b600052602160045260246000fd5b9060418151146000146107b7576107b3916020820151906060604084015193015160001a906107c1565b9091565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831161083e5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156108315781516001600160a01b03811615610635579190565b50604051903d90823e3d90fd5b50505050600090600390565b519065ffffffffffff8216820361050157565b919091610140810135601e19823603018112156105015781019182359267ffffffffffffffff9081851161050157602092838201958036038713610501578201604096878483031261050157359084821161050157879186806108c49301918601016104ba565b920135946001600160a01b0395868116036105015735966041835114610b43578251830160a0848783019203126105015761090086850161084a565b9061090c89860161084a565b9060608601519160808701518881116105015787019782603f8a011215610501578989015197818911610466578a998d9960059a818c1b9161095482519e8f9085019061047c565b8d528d8d019183010191868311610501578f8e9101915b838310610b33575050505060a081015190828211610501570183603f8201121561050157808b01518d9461099e8261049e565b956109ab8151978861047c565b8287528284010111610501576109c6918e8d8701910161051c565b8b51908a8201927fffffffffffff000000000000000000000000000000000000000000000000000090818860d01b16855260d01b1696876026840152602c830152602c8252606082019082821090821117610466578c52519020986000995b88518b1015610a84578a881b89018a0151908c600083831015610a7757505060005289528a6000205b996000198114610a615760010199610a25565b634e487b7160e01b600052601160045260246000fd5b91909282528b5220610a4e565b91965094999a93985081965096919603610af05750610aa8949596975016916105a9565b15610ae95779ffffffffffff00000000000000000000000000000000000000009065ffffffffffff90818116610ae257505b60a01b161790565b9050610ada565b5050600190565b60649089519062461bcd60e51b82526004820152600e60248201527f496e76616c696420557365724f700000000000000000000000000000000000006044820152fd5b82518152918101918e910161096b565b94925095909250610b56945016916105a9565b15610b6057600090565b60019056fea26469706673582212202a3242d73a2c92fd929c32924b5f964b80434c765985e101142ea4635452e6a664736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} - } - \ No newline at end of file diff --git a/packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json b/packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json deleted file mode 100644 index 317e05a87..000000000 --- a/packages/common/abis/biconomy_v2.0.0/SmartAccountFactory_v2.0.0.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccountFactory", - "sourceName": "contracts/smart-account/factory/SmartAccountFactory.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_basicImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "initialAuthModule", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "AccountCreation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "initialAuthModule", - "type": "address" - } - ], - "name": "AccountCreationWithoutIndex", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "accountCreationCode", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "epAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - } - ], - "name": "addStake", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "basicImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - } - ], - "name": "deployAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "deployCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getAddressForCounterFactualAccount", - "outputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimalHandler", - "outputs": [ - { - "internalType": "contract DefaultCallbackHandler", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "epAddress", - "type": "address" - } - ], - "name": "unlockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "epAddress", - "type": "address" - }, - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - } - ], - "name": "withdrawStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60c0346101445761171b906001600160401b0390601f38849003908101601f1916820190838211838310176100ea57808391604096879485528339810103126101445761006861005a602061005384610149565b9301610149565b6100633361015d565b61015d565b6001600160a01b03811615610100576080528151906104e690818301908111838210176100ea578291611235833903906000f080156100df5760a0525161109090816101a582396080518181816101ed015281816105a70152818161074601526107ef015260a05181818161039e0152610b7c0152f35b50513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b825162461bcd60e51b815260206004820152601d60248201527f696d706c656d656e746174696f6e2063616e6e6f74206265207a65726f0000006044820152606490fd5b600080fd5b51906001600160a01b038216820361014457565b600080546001600160a01b039283166001600160a01b03198216811783559216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fe60806040526004361015610013575b600080fd5b60003560e01c80632e7a1a831461010357806331c884df146100fa5780633b3cb143146100f157806345171159146100e85780634a1ce599146100df578063715018a6146100d6578063743b1e03146100cd5780638da5cb5b146100c4578063b36f9705146100bb578063daf0dfc8146100b2578063df20ffbc146100a95763f2fde38b146100a157600080fd5b61000e6108a6565b5061000e61076a565b5061000e610725565b5061000e6106a1565b5061000e610679565b5061000e610533565b5061000e6104cb565b5061000e61045f565b5061000e6103c2565b5061000e61037d565b5061000e61031d565b5061000e61018c565b6001600160a01b0381160361000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020838186019501011161000e57565b90606060031983011261000e576004356101648161010c565b916024359067ffffffffffffffff821161000e576101849160040161011d565b909160443590565b503461000e576102f66102dc6102d06101b16101a73661014b565b9392919091610b54565b6102c1610120916020926101c6848201610a8e565b90808252610bdb858301396040519461024a61025687610214888201956001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087610a9e565b0394610228601f19968781018b528a610a5f565b8781519101209260405192839189830195869091604092825260208201520190565b03858101835282610a5f565b519020945190206040517fff000000000000000000000000000000000000000000000000000000000000009481019485523060601b6bffffffffffffffffffffffff191660018601526015850195909552603584015291929182605585015b03908101835282610a5f565b5190206001600160a01b031690565b6001600160a01b031690565b6040516001600160a01b0390911681529081906020820190565b0390f35b60005b83811061030d5750506000910152565b81810151838201526020016102fd565b503461000e57600036600319011261000e5761036f60406101208151906103476020820183610a5f565b8082526020820190610cfb8239825193849260208452518092816020860152858501906102fa565b601f01601f19168101030190f35b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b506000604036600319011261045c576004356103dd8161010c565b816024359163ffffffff8316809303610458576001600160a01b0390610401610991565b169161040e8315156109e9565b823b1561045857602460405180948193621cb65b60e51b8352600483015234905af1801561044b575b61043f575080f35b61044890610a35565b80f35b610453610a81565b610437565b5080fd5b80fd5b503461000e576000602036600319011261045c57806001600160a01b036004356104888161010c565b610490610991565b1661049c8115156109e9565b803b156104c857819060046040518094819363bb9fe6bf60e01b83525af1801561044b5761043f575080f35b50fd5b503461000e5760008060031936011261045c576104e6610991565b806001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461000e57604036600319011261000e576004356105518161010c565b60243567ffffffffffffffff811161000e5761057190369060040161011d565b6101209161058160208401610a8e565b92808452610e1b60208501396105fe604051926105df846105d16001600160a01b0397887f0000000000000000000000000000000000000000000000000000000000000000169060208401610a9e565b03601f198101865285610a5f565b835160009460200185f092858416966105f9881515610b08565b610b54565b805183918161064c575b50506040519485946102f69416917f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf6579080a36001600160a01b031682526020820190565b8296945090602083920182855af193604051943d82873e1561067557935191936102f638610608565b3d85fd5b503461000e57600036600319011261000e5760206001600160a01b0360005416604051908152f35b503461000e576000604036600319011261045c576004356106c18161010c565b81602435916106cf8361010c565b6106d7610991565b6001600160a01b03809116926106ee8415156109e9565b833b156107215760249083604051958694859363611d2e7560e11b85521660048401525af1801561044b5761043f575080f35b8280fd5b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461000e5761077c6101a73661014b565b9081519160208082019384209260405193846107a78385830193849091604092825260208201520190565b03946107bb601f1996878101835282610a5f565b519020610120946107cd848701610a8e565b95808752610f3b8588013961081860405191826102b56001600160a01b03998a7f00000000000000000000000000000000000000000000000000000000000000001690898401610a9e565b8051906000940184f591848316610830811515610abc565b8194518061087d575b50604051965086956102f69516917f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f29080a46001600160a01b031682526020820190565b82978380939750865af194604051953d82883e156108a2579451939485949338610839565b3d86fd5b503461000e57602036600319011261000e576004356108c48161010c565b6108cc610991565b6001600160a01b0380911680156109265760009182548273ffffffffffffffffffffffffffffffffffffffff198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608490fd5b6001600160a01b036000541633036109a557565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156109f057565b60405162461bcd60e51b815260206004820152601260248201527f496e76616c6964204550206164647265737300000000000000000000000000006044820152606490fd5b67ffffffffffffffff8111610a4957604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a4957604052565b506040513d6000823e3d90fd5b90610a9c6040519283610a5f565b565b6020929190610ab48492828151948592016102fa565b019081520190565b15610ac357565b60405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606490fd5b15610b0f57565b60405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606490fd5b60a490610bd7929380604051958693631bc6fec760e11b60208601526001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016602487015216604485015260606064850152816084850152848401376000838284010152601f80199101168101036084810184520182610a5f565b9056fe6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033a2646970667358221220cc3855215776915d9c3562b4380fe9fbf7afb53b9434cabc4802d531f12df64364736f6c6343000811003360808060405234610016576104ca908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816223de291461031b57816301ffc9a71461029457508063150b7a021461023d578063a3f4df7e146101d6578063bc197c811461014c578063f23a6e61146100f25763ffa1ad741461007157600080fd5b346100ee57816003193601126100ee578051918183019083821067ffffffffffffffff8311176100db57506100d793508152600582527f312e302e300000000000000000000000000000000000000000000000000000006020830152519182918261041a565b0390f35b634e487b7160e01b815260418552602490fd5b5080fd5b5090346101495760a03660031901126101495761010d6103a1565b506101166103c9565b506084359067ffffffffffffffff8211610149575060209261013a913691016103ec565b50505163f23a6e6160e01b8152f35b80fd5b5090346101495760a0366003190112610149576101676103a1565b506101706103c9565b5067ffffffffffffffff906044358281116100ee576101929036908601610463565b50506064358281116100ee576101ab9036908601610463565b505060843591821161014957506020926101c7913691016103ec565b50505163bc197c8160e01b8152f35b50346100ee57816003193601126100ee578051918183019083821067ffffffffffffffff8311176100db57506100d793508152601882527f44656661756c742043616c6c6261636b2048616e646c657200000000000000006020830152519182918261041a565b509034610149576080366003190112610149576102586103a1565b506102616103c9565b506064359067ffffffffffffffff82116101495750602092610285913691016103ec565b505051630a85bd0160e11b8152f35b83908534610317576020366003190112610317573563ffffffff60e01b81168091036103175760209250630271189760e51b8114908115610306575b81156102f6575b81156102e5575b5015158152f35b6301ffc9a760e01b149050836102de565b6223de2960e01b811491506102d7565b630a85bd0160e11b811491506102d0565b8280fd5b8385346100ee5760c03660031901126100ee576103366103a1565b5061033f6103c9565b5060443573ffffffffffffffffffffffffffffffffffffffff8116036100ee5767ffffffffffffffff9060843582811161039d5761038090369083016103ec565b505060a43591821161031757610398913691016103ec565b505080f35b8380fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103c457565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103c457565b9181601f840112156103c45782359167ffffffffffffffff83116103c457602083818601950101116103c457565b6020808252825181830181905290939260005b82811061044f57505060409293506000838284010152601f8019910116010190565b81810186015184820160400152850161042d565b9181601f840112156103c45782359167ffffffffffffffff83116103c4576020808501948460051b0101116103c45756fea2646970667358221220e22ad453b03efac358b2f092a996c1bf999c6cba4b1e5c7d1e917139d697fca764736f6c63430008110033", - "deployedBytecode": "0x60806040526004361015610013575b600080fd5b60003560e01c80632e7a1a831461010357806331c884df146100fa5780633b3cb143146100f157806345171159146100e85780634a1ce599146100df578063715018a6146100d6578063743b1e03146100cd5780638da5cb5b146100c4578063b36f9705146100bb578063daf0dfc8146100b2578063df20ffbc146100a95763f2fde38b146100a157600080fd5b61000e6108a6565b5061000e61076a565b5061000e610725565b5061000e6106a1565b5061000e610679565b5061000e610533565b5061000e6104cb565b5061000e61045f565b5061000e6103c2565b5061000e61037d565b5061000e61031d565b5061000e61018c565b6001600160a01b0381160361000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020838186019501011161000e57565b90606060031983011261000e576004356101648161010c565b916024359067ffffffffffffffff821161000e576101849160040161011d565b909160443590565b503461000e576102f66102dc6102d06101b16101a73661014b565b9392919091610b54565b6102c1610120916020926101c6848201610a8e565b90808252610bdb858301396040519461024a61025687610214888201956001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087610a9e565b0394610228601f19968781018b528a610a5f565b8781519101209260405192839189830195869091604092825260208201520190565b03858101835282610a5f565b519020945190206040517fff000000000000000000000000000000000000000000000000000000000000009481019485523060601b6bffffffffffffffffffffffff191660018601526015850195909552603584015291929182605585015b03908101835282610a5f565b5190206001600160a01b031690565b6001600160a01b031690565b6040516001600160a01b0390911681529081906020820190565b0390f35b60005b83811061030d5750506000910152565b81810151838201526020016102fd565b503461000e57600036600319011261000e5761036f60406101208151906103476020820183610a5f565b8082526020820190610cfb8239825193849260208452518092816020860152858501906102fa565b601f01601f19168101030190f35b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b506000604036600319011261045c576004356103dd8161010c565b816024359163ffffffff8316809303610458576001600160a01b0390610401610991565b169161040e8315156109e9565b823b1561045857602460405180948193621cb65b60e51b8352600483015234905af1801561044b575b61043f575080f35b61044890610a35565b80f35b610453610a81565b610437565b5080fd5b80fd5b503461000e576000602036600319011261045c57806001600160a01b036004356104888161010c565b610490610991565b1661049c8115156109e9565b803b156104c857819060046040518094819363bb9fe6bf60e01b83525af1801561044b5761043f575080f35b50fd5b503461000e5760008060031936011261045c576104e6610991565b806001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461000e57604036600319011261000e576004356105518161010c565b60243567ffffffffffffffff811161000e5761057190369060040161011d565b6101209161058160208401610a8e565b92808452610e1b60208501396105fe604051926105df846105d16001600160a01b0397887f0000000000000000000000000000000000000000000000000000000000000000169060208401610a9e565b03601f198101865285610a5f565b835160009460200185f092858416966105f9881515610b08565b610b54565b805183918161064c575b50506040519485946102f69416917f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf6579080a36001600160a01b031682526020820190565b8296945090602083920182855af193604051943d82873e1561067557935191936102f638610608565b3d85fd5b503461000e57600036600319011261000e5760206001600160a01b0360005416604051908152f35b503461000e576000604036600319011261045c576004356106c18161010c565b81602435916106cf8361010c565b6106d7610991565b6001600160a01b03809116926106ee8415156109e9565b833b156107215760249083604051958694859363611d2e7560e11b85521660048401525af1801561044b5761043f575080f35b8280fd5b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461000e5761077c6101a73661014b565b9081519160208082019384209260405193846107a78385830193849091604092825260208201520190565b03946107bb601f1996878101835282610a5f565b519020610120946107cd848701610a8e565b95808752610f3b8588013961081860405191826102b56001600160a01b03998a7f00000000000000000000000000000000000000000000000000000000000000001690898401610a9e565b8051906000940184f591848316610830811515610abc565b8194518061087d575b50604051965086956102f69516917f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f29080a46001600160a01b031682526020820190565b82978380939750865af194604051953d82883e156108a2579451939485949338610839565b3d86fd5b503461000e57602036600319011261000e576004356108c48161010c565b6108cc610991565b6001600160a01b0380911680156109265760009182548273ffffffffffffffffffffffffffffffffffffffff198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608490fd5b6001600160a01b036000541633036109a557565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156109f057565b60405162461bcd60e51b815260206004820152601260248201527f496e76616c6964204550206164647265737300000000000000000000000000006044820152606490fd5b67ffffffffffffffff8111610a4957604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a4957604052565b506040513d6000823e3d90fd5b90610a9c6040519283610a5f565b565b6020929190610ab48492828151948592016102fa565b019081520190565b15610ac357565b60405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606490fd5b15610b0f57565b60405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606490fd5b60a490610bd7929380604051958693631bc6fec760e11b60208601526001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016602487015216604485015260606064850152816084850152848401376000838284010152601f80199101168101036084810184520182610a5f565b9056fe6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033a2646970667358221220cc3855215776915d9c3562b4380fe9fbf7afb53b9434cabc4802d531f12df64364736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json b/packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json deleted file mode 100644 index ce7a7284d..000000000 --- a/packages/common/abis/biconomy_v2.0.0/SmartAccount_v2.0.0.json +++ /dev/null @@ -1,1182 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SmartAccount", - "sourceName": "contracts/smart-account/SmartAccount.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "contract IEntryPoint", - "name": "anEntryPoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "BaseImplementationCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotAnEntryPoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPointOrOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotEntryPointOrSelf", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "CallerIsNotSelf", - "type": "error" - }, - { - "inputs": [], - "name": "DelegateCallsOnly", - "type": "error" - }, - { - "inputs": [], - "name": "EntryPointCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "HandlerCannotBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementationAddress", - "type": "address" - } - ], - "name": "InvalidImplementation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MixedAuthFail", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleAlreadyEnabled", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "expectedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "returnedModule", - "type": "address" - }, - { - "internalType": "address", - "name": "prevModule", - "type": "address" - } - ], - "name": "ModuleAndPrevModuleMismatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleCannotBeZeroOrSentinel", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ModuleNotEnabled", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesAlreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "ModulesSetupExecutionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCanNotBeSelf", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerCannotBeZero", - "type": "error" - }, - { - "inputs": [], - "name": "OwnerProvidedIsSame", - "type": "error" - }, - { - "inputs": [], - "name": "TransferToZeroAddressAttempt", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "destLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "valueLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "funcLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "operationLength", - "type": "uint256" - } - ], - "name": "WrongBatchProvided", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "contractSignature", - "type": "bytes" - } - ], - "name": "WrongContractSignature", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "uintS", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "contractSignatureLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "signatureLength", - "type": "uint256" - } - ], - "name": "WrongContractSignatureFormat", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "moduleAddressProvided", - "type": "address" - } - ], - "name": "WrongValidationModule", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousHandler", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "ChangedFallbackHandler", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "DisabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "EnabledModule", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "ExecutionFromModuleSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "ExecutionSuccess", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ImplementationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "ModuleTransaction", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "SmartAccountReceivedNativeToken", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "addDeposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prevModule", - "type": "address" - }, - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "disableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "enableModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "entryPoint", - "outputs": [ - { - "internalType": "contract IEntryPoint", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "to", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - }, - { - "internalType": "enum Enum.Operation[]", - "name": "operations", - "type": "uint8[]" - } - ], - "name": "execBatchTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "txGas", - "type": "uint256" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModule", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "operation", - "type": "uint8" - } - ], - "name": "execTransactionFromModuleReturnData", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "dest", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "func", - "type": "bytes[]" - } - ], - "name": "executeBatch_y6U", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dest", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "func", - "type": "bytes" - } - ], - "name": "execute_ncC", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFallbackHandler", - "outputs": [ - { - "internalType": "address", - "name": "_handler", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getImplementation", - "outputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "start", - "type": "address" - }, - { - "internalType": "uint256", - "name": "pageSize", - "type": "uint256" - } - ], - "name": "getModulesPaginated", - "outputs": [ - { - "internalType": "address[]", - "name": "array", - "type": "address[]" - }, - { - "internalType": "address", - "name": "next", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - }, - { - "internalType": "address", - "name": "moduleSetupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "moduleSetupData", - "type": "bytes" - } - ], - "name": "init", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "module", - "type": "address" - } - ], - "name": "isModuleEnabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "name": "isValidSignature", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint192", - "name": "_key", - "type": "uint192" - } - ], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "noncesDeprecated", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ownerDeprecated", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "handler", - "type": "address" - } - ], - "name": "setFallbackHandler", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "setupContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "setupData", - "type": "bytes" - } - ], - "name": "setupAndEnableModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "updateImplementation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" - } - ], - "name": "validateUserOp", - "outputs": [ - { - "internalType": "uint256", - "name": "validationData", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdrawDepositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60c0346100fc57601f61213e38819003918201601f19168301916001600160401b03831184841017610101578084926020946040528339810103126100fc57516001600160a01b0381168082036100fc573060a052156100ea57608052600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556040516120269081610118823960805181818161096f01528181610b6201528181610c0301528181610f2101528181610f740152818161119e0152818161193b0152611996015260a051816114dd0152f35b60405163091748f960e21b8152600490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040526004361015610030575b36156100285734610023576100216119d6565b005b600080fd5b6100216114d3565b60003560e01c8061189a146101b357806146801461021657806301ffc9a71461025e578063025b22bc146102555780631626ba7e1461024c57806321632045146102435780632d9ad53d1461023a578063378dfd8e146102315780633a871cdd14610228578063468721a71461021f57806347e1da2a146102165780634a58db191461020d5780634d44560d146102045780635229073f146101fb5780635305dd27146101f2578063610b5925146101e95780636424e9fe146101e0578063856dfd99146101d7578063aaf10f42146101ce578063acfdf503146101c5578063b0d691fe146101bc578063b61d27f6146101b3578063c399ec88146101aa578063cc2f8452146101a1578063d86f2b3c14610198578063e009cfde1461018f578063f08a032314610186578063f33623b11461017d5763ffa1ad740361000e57610178611439565b61000e565b5061017861140c565b506101786113de565b5061017861120c565b5061017861113a565b50610178611038565b50610178610f45565b506101786102b3565b50610178610f00565b50610178610e5d565b50610178610e36565b50610178610def565b50610178610dc7565b50610178610d99565b50610178610d2d565b50610178610cab565b50610178610bd4565b50610178610b4a565b50610178610342565b50610178610afc565b50610178610929565b506101786107c8565b5061017861076a565b506101786106ab565b5061017861064f565b5061017861049d565b50610178610461565b6001600160a01b0381160361002357565b359061028382610267565b565b9181601f840112156100235782359167ffffffffffffffff8311610023576020838186019501011161002357565b5034610023576060366003190112610023576004356102d181610267565b6044359067ffffffffffffffff8211610023576103076102f8610021933690600401610285565b61030061198c565b36916105fa565b906024359061190d565b9181601f840112156100235782359167ffffffffffffffff8311610023576020808501948460051b01011161002357565b50346100235760603660031901126100235767ffffffffffffffff60043581811161002357610375903690600401610311565b906024358381116100235761038e903690600401610311565b93604435908111610023576103a7903690600401610311565b926103b061198c565b84158015610445575b801561043b575b61040f5760005b8581106103d057005b806104096103e96103e46001948a87611745565b611763565b6103f4838b89611745565b35610403610300858b8a61176d565b9161190d565b016103c7565b5050506084926040519263470c355760e01b845260048401526024830152604482015260006064820152fd5b50838614156103c0565b50858514156103b9565b6001600160e01b031981160361002357565b50346100235760203660031901126100235760206004356104818161044f565b6040516001600160e01b03199091166301ffc9a760e01b148152f35b5034610023576020366003190112610023576004356104bb81610267565b6104c3611931565b6001600160a01b0380821691821561053057803b15610509573054903055167faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da600080a3005b604051630c76093760e01b81526001600160a01b03919091166004820152602490fd5b0390fd5b60405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f000000000000000000006044820152606490fd5b50634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116105a057604052565b6105a8610575565b604052565b90601f8019910116810190811067ffffffffffffffff8211176105a057604052565b60209067ffffffffffffffff81116105ed575b601f01601f19160190565b6105f5610575565b6105e2565b929192610606826105cf565b9161061460405193846105ad565b829481845281830111610023578281602093846000960137010152565b9080601f830112156100235781602061064c933591016105fa565b90565b50346100235760403660031901126100235760243567ffffffffffffffff81116100235761068e6106866020923690600401610631565b600435611834565b6040516001600160e01b03199091168152f35b6002111561002357565b50346100235760a0366003190112610023576004356106c981610267565b60443567ffffffffffffffff8111610023576106e9903690600401610631565b90606435906106f7826106a1565b6084359160013314801561074b575b61073357602093610723938061072d57505a925b60243590611b5a565b6040519015158152f35b9261071a565b6040516321ac7c5f60e01b8152336004820152602490fd5b503360005260006020526001600160a01b036040600020541615610706565b503461002357602036600319011261002357602060043561078a81610267565b6001600160a01b0380911690816001141591826107ae575b50506040519015158152f35b9091506000526000825260406000205416151538806107a2565b5034610023576060366003190112610023576004356107e681610267565b602435906107f382610267565b60443567ffffffffffffffff811161002357610813903690600401610285565b91909260009360018552846020526001600160a01b0393604093858588205416158015906108fd575b6108ed5791610852916103006108589594611a24565b90611f7a565b918216801580156108e3575b6108cd578282856108b1936108c997528060205261089182822060016001600160a01b0319825416179055565b6001815220906001600160a01b03166001600160a01b0319825416179055565b516001600160a01b0390911681529081906020820190565b0390f35b602491519063cadb248f60e01b82526004820152fd5b5060018114610864565b845162dc149f60e41b8152600490fd5b50857f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d45416151561083c565b503461002357600319606036820112610023576004359067ffffffffffffffff82116100235761016082600401918336030112610023576000906001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000163303610a9b576109af6109a76101448693018461153d565b810190611570565b905016926109e06109d3856001600160a01b03166000526000602052604060002090565b546001600160a01b031690565b1615610a7a576020610a116108c9948493604051948580948193637ff9adb960e11b835260243590600484016115fa565b03925af1918215610a6d575b91610a3f575b50610a2f6044356116f1565b6040519081529081906020820190565b610a60915060203d8111610a66575b610a5881836105ad565b8101906114b7565b38610a23565b503d610a4e565b610a756114c6565b610a1d565b6040516326cc3fab60e21b81526001600160a01b0384166004820152602490fd5b604051635dac3db760e11b8152336004820152602490fd5b608060031982011261002357600435610acb81610267565b91602435916044359067ffffffffffffffff821161002357610aef91600401610631565b9060643561064c816106a1565b503461002357610b0b36610ab3565b600193919333148015610b2b575b61073357602093610723935a93611b5a565b503360005260006020526001600160a01b036040600020541615610b19565b50600080600319360112610bd1576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681813b15610bd15760405163b760faf960e01b8152306004820152918290602490829034905af18015610bc4575b610bb8575080f35b610bc19061058c565b80f35b610bcc6114c6565b610bb0565b80fd5b5060006040366003190112610bd157600435610bef81610267565b610bf7611931565b816001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001692833b15610c5f5760449083604051958694859363040b850f60e31b855216600484015260243560248401525af18015610bc457610bb8575080f35b8280fd5b60005b838110610c765750506000910152565b8181015183820152602001610c66565b90602091610c9f81518092818552858086019101610c63565b601f01601f1916010190565b503461002357610cba36610ab3565b90600193929333148015610d0e575b61073357610cd8935a93611b5a565b6040519060203d8301016040523d82523d6000602084013e6108c960405192839215158352604060208401526040830190610c86565b503360005260006020526001600160a01b036040600020541615610cc9565b503461002357604036600319011261002357600435610d4b81610267565b60243567ffffffffffffffff811161002357602091610d71610d7f923690600401610631565b90610d7a611931565b611f7a565b610d8881611d68565b6001600160a01b0360405191168152f35b503461002357602036600319011261002357610021600435610dba81610267565b610dc2611931565b611d68565b50346100235760003660031901126100235760206001600160a01b0360315416604051908152f35b50346100235760003660031901126100235760207f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4546001600160a01b0360405191168152f35b503461002357600036600319011261002357602030546001600160a01b0360405191168152f35b50346100235760803660031901126100235767ffffffffffffffff60043581811161002357610e90903690600401610311565b60249291923582811161002357610eab903690600401610311565b60449491943584811161002357610ec6903690600401610311565b91606435958611610023576108c996610ee6610eee973690600401610311565b969095611c22565b60405190151581529081906020820190565b50346100235760003660031901126100235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610023576000366003190112610023576040516370a0823160e01b815230600482015260209081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fd4575b600091610fb7575b50604051908152f35b610fce9150823d8111610a6657610a5881836105ad565b38610fae565b610fdc6114c6565b610fa6565b90929192604082016040835281518091526060830160208093019160005b8482821061101b575050506001600160a01b0391509416910152565b84516001600160a01b031684529384019390920191600101610fff565b50346100235760403660031901126100235760043561105681610267565b60243561106281611a96565b61106f60405191826105ad565b818152601f1961107e83611a96565b013660208301376110a76109d36000946001600160a01b03166000526000602052604060002090565b6001600160a01b038116801515908161112e575b5080611125575b15611112576111066109d3826110ed61110c946110df8988611ab7565b906001600160a01b03169052565b6001600160a01b03166000526000602052604060002090565b93611ad9565b926110a7565b908381526108c960405192839283610fe1565b508284106110c2565b600191501415386110bb565b50346100235760203660031901126100235760043577ffffffffffffffffffffffffffffffffffffffffffffffff8116809103610023576108c99060405190631aab3f0d60e11b825230600483015260248201526020816044816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ff575b6000916111e1575b506040519081529081906020820190565b6111f9915060203d8111610a6657610a5881836105ad565b386111d0565b6112076114c6565b6111c8565b50346100235760403660031901126100235760043561122a81610267565b60243561123681610267565b61123e611931565b6001600160a01b038116801580156113d4575b6113b3576112846112786109d3856001600160a01b03166000526000602052604060002090565b6001600160a01b031690565b03611359578061130a7faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276936112ef6112d56109d3611354966001600160a01b03166000526000602052604060002090565b916001600160a01b03166000526000602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b61133a61132a826001600160a01b03166000526000602052604060002090565b6001600160a01b03198154169055565b6040516001600160a01b0390911681529081906020820190565b0390a1005b61052c61137c6109d3846001600160a01b03166000526000602052604060002090565b604051633103525b60e21b81526001600160a01b039384166004820152908316602482015292909116604483015281906064820190565b60405163cadb248f60e01b81526001600160a01b0383166004820152602490fd5b5060018114611251565b5034610023576020366003190112610023576100216004356113ff81610267565b611407611931565b611a24565b50346100235760203660031901126100235760043560005260326020526020604060002054604051908152f35b5034610023576000366003190112610023576108c96040516040810181811067ffffffffffffffff8211176114aa575b604052600581527f322e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610c86565b6114b2610575565b611469565b90816020910312610023575190565b506040513d6000823e3d90fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301461152b5734337ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce02600080a3565b604051633c97166560e21b8152600490fd5b903590601e1981360301821215610023570180359067ffffffffffffffff82116100235760200191813603831361002357565b919060408382031261002357823567ffffffffffffffff81116100235760209161159b918501610631565b92013561064c81610267565b9035601e198236030181121561002357016020813591019167ffffffffffffffff821161002357813603831361002357565b908060209392818452848401376000828201840152601f01601f1916010190565b9291906116ec611657602092604087526116276040880161161a83610278565b6001600160a01b03169052565b8381013560608801526116dc61164060408301836115a7565b9390610160948560808c01526101a08b01916115d9565b916116d361167f61166b60608401846115a7565b603f198d8803810160a08f015296916115d9565b608083013560c08c015260a083013560e08c01528a6101009660c0850135888301526116c361012060e087013581850152610140998701358a8501528601866115a7565b92909188828603019101526115d9565b938101906115a7565b91888403016101808901526115d9565b930152565b806116f95750565b600080808093338219f1503d15610283573d611714816105cf565b9061172260405192836105ad565b8152600060203d92013e565b50634e487b7160e01b600052603260045260246000fd5b9190811015611756575b60051b0190565b61175e61172e565b61174f565b3561064c81610267565b90916117869281101561178a575b60051b81019061153d565b9091565b61179261172e565b61177b565b919060408382031261002357825167ffffffffffffffff81116100235783019080601f83011215610023578151916117ce836105cf565b916117dc60405193846105ad565b83835260208483010111610023576020926117fc91848085019101610c63565b92015161064c81610267565b90816020910312610023575161064c8161044f565b60409061064c939281528160208201520190610c86565b906118489060208082518301019101611797565b90916001600160a01b03809216916118766109d3846001600160a01b03166000526000602052604060002090565b16156118ec57916020916118a093604051809581948293630b135d3f60e11b84526004840161181d565b03915afa9081156118df575b6000916118b7575090565b61064c915060203d81116118d8575b6118d081836105ad565b810190611808565b503d6118c6565b6118e76114c6565b6118ac565b6040516326cc3fab60e21b81526001600160a01b0383166004820152602490fd5b916000928392602083519301915af1604051903d6000833e1561192d5750565b3d90fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141580611982575b61196a57565b604051634776242160e01b8152336004820152602490fd5b5030331415611964565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119be57565b60405163e6fce6a560e01b8152336004820152602490fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4548015610021576000808092368280373360601b3652818060143601925af13d82803e1561192d573d90f35b6001600160a01b03808216918215611a84577f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d49081549155167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c600080a3565b60405163dd449f5f60e01b8152600490fd5b60209067ffffffffffffffff8111611aaf5760051b0190565b61175e610575565b6020918151811015611acc575b60051b010190565b611ad461172e565b611ac4565b6000198114611ae85760010190565b634e487b7160e01b600052601160045260246000fd5b611b1690602060405192828480945193849201610c63565b810103902090565b906002821015611b2b5752565b634e487b7160e01b600052602160045260246000fd5b60209093929193611b56816040810196611b1e565b0152565b9493929091946002821015611b2b5760018203611c05576000808751602089018488f4955b8615611bcf577f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee91611bca611bbb6001600160a01b0393611afe565b96604051938493169583611b41565b0390a4565b7f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a91611bca611bbb6001600160a01b0393611afe565b600080875160208901868589f195611b7f565b3561064c816106a1565b9497969391929795909560009887158015611d5e575b8015611d54575b8015611d4a575b611d1b576001978833148015611ceb575b6107335797969594939291906000985b808a10611c7a5750505050505050505050565b9091929394959697899b50611cdb888888611cd589869f8f81611cc0818e611cb98f968f97611cb36103e483611ccd9b611cc89b611745565b9c611745565b359861176d565b989094611745565b611c18565b9436916105fa565b91611eab565b9b01989796959493929190611c67565b506001600160a01b03611d146109d3336001600160a01b03166000526000602052604060002090565b1615611c57565b60405163470c355760e01b81526004810189905260248101919091526044810182905260648101869052608490fd5b5085821415611c46565b5081811415611c3f565b5080881415611c38565b6001600160a01b0381168015908115611ea0575b50611e7d57611da46112786109d3836001600160a01b03166000526000602052604060002090565b611e5a57600160009081526020527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844090611e5590611e21611e047fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6109d3565b6112ef836001600160a01b03166000526000602052604060002090565b6001600090815260205261133a817fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6112ef565b0390a1565b60405163b29d459560e01b81526001600160a01b03919091166004820152602490fd5b60405163cadb248f60e01b81526001600160a01b03919091166004820152602490fd5b600191501438611d7c565b939293611ebb5a86858585611b5a565b948515611f4e57611f23611f187f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da956001600160a01b0395604051968796338852166020870152604086015260a0606086015260a0850190610c86565b916080840190611b1e565b0390a1337f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8600080a2565b50505050337facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375600080a2565b6001600160a01b03811615611fab5781600092918360208194519301915af1604051903d6000833e1561192d575190565b60405162461bcd60e51b815260206004820152601a60248201527f57726f6e67204d6f64756c6520536574757020416464726573730000000000006044820152606490fdfea26469706673582212205e35c32c65281399d0271586e25905b496a0e4ccfd6e3ff9ffae2c43380c16ac64736f6c63430008110033", - "deployedBytecode": "0x60806040526004361015610030575b36156100285734610023576100216119d6565b005b600080fd5b6100216114d3565b60003560e01c8061189a146101b357806146801461021657806301ffc9a71461025e578063025b22bc146102555780631626ba7e1461024c57806321632045146102435780632d9ad53d1461023a578063378dfd8e146102315780633a871cdd14610228578063468721a71461021f57806347e1da2a146102165780634a58db191461020d5780634d44560d146102045780635229073f146101fb5780635305dd27146101f2578063610b5925146101e95780636424e9fe146101e0578063856dfd99146101d7578063aaf10f42146101ce578063acfdf503146101c5578063b0d691fe146101bc578063b61d27f6146101b3578063c399ec88146101aa578063cc2f8452146101a1578063d86f2b3c14610198578063e009cfde1461018f578063f08a032314610186578063f33623b11461017d5763ffa1ad740361000e57610178611439565b61000e565b5061017861140c565b506101786113de565b5061017861120c565b5061017861113a565b50610178611038565b50610178610f45565b506101786102b3565b50610178610f00565b50610178610e5d565b50610178610e36565b50610178610def565b50610178610dc7565b50610178610d99565b50610178610d2d565b50610178610cab565b50610178610bd4565b50610178610b4a565b50610178610342565b50610178610afc565b50610178610929565b506101786107c8565b5061017861076a565b506101786106ab565b5061017861064f565b5061017861049d565b50610178610461565b6001600160a01b0381160361002357565b359061028382610267565b565b9181601f840112156100235782359167ffffffffffffffff8311610023576020838186019501011161002357565b5034610023576060366003190112610023576004356102d181610267565b6044359067ffffffffffffffff8211610023576103076102f8610021933690600401610285565b61030061198c565b36916105fa565b906024359061190d565b9181601f840112156100235782359167ffffffffffffffff8311610023576020808501948460051b01011161002357565b50346100235760603660031901126100235767ffffffffffffffff60043581811161002357610375903690600401610311565b906024358381116100235761038e903690600401610311565b93604435908111610023576103a7903690600401610311565b926103b061198c565b84158015610445575b801561043b575b61040f5760005b8581106103d057005b806104096103e96103e46001948a87611745565b611763565b6103f4838b89611745565b35610403610300858b8a61176d565b9161190d565b016103c7565b5050506084926040519263470c355760e01b845260048401526024830152604482015260006064820152fd5b50838614156103c0565b50858514156103b9565b6001600160e01b031981160361002357565b50346100235760203660031901126100235760206004356104818161044f565b6040516001600160e01b03199091166301ffc9a760e01b148152f35b5034610023576020366003190112610023576004356104bb81610267565b6104c3611931565b6001600160a01b0380821691821561053057803b15610509573054903055167faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da600080a3005b604051630c76093760e01b81526001600160a01b03919091166004820152602490fd5b0390fd5b60405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f000000000000000000006044820152606490fd5b50634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116105a057604052565b6105a8610575565b604052565b90601f8019910116810190811067ffffffffffffffff8211176105a057604052565b60209067ffffffffffffffff81116105ed575b601f01601f19160190565b6105f5610575565b6105e2565b929192610606826105cf565b9161061460405193846105ad565b829481845281830111610023578281602093846000960137010152565b9080601f830112156100235781602061064c933591016105fa565b90565b50346100235760403660031901126100235760243567ffffffffffffffff81116100235761068e6106866020923690600401610631565b600435611834565b6040516001600160e01b03199091168152f35b6002111561002357565b50346100235760a0366003190112610023576004356106c981610267565b60443567ffffffffffffffff8111610023576106e9903690600401610631565b90606435906106f7826106a1565b6084359160013314801561074b575b61073357602093610723938061072d57505a925b60243590611b5a565b6040519015158152f35b9261071a565b6040516321ac7c5f60e01b8152336004820152602490fd5b503360005260006020526001600160a01b036040600020541615610706565b503461002357602036600319011261002357602060043561078a81610267565b6001600160a01b0380911690816001141591826107ae575b50506040519015158152f35b9091506000526000825260406000205416151538806107a2565b5034610023576060366003190112610023576004356107e681610267565b602435906107f382610267565b60443567ffffffffffffffff811161002357610813903690600401610285565b91909260009360018552846020526001600160a01b0393604093858588205416158015906108fd575b6108ed5791610852916103006108589594611a24565b90611f7a565b918216801580156108e3575b6108cd578282856108b1936108c997528060205261089182822060016001600160a01b0319825416179055565b6001815220906001600160a01b03166001600160a01b0319825416179055565b516001600160a01b0390911681529081906020820190565b0390f35b602491519063cadb248f60e01b82526004820152fd5b5060018114610864565b845162dc149f60e41b8152600490fd5b50857f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d45416151561083c565b503461002357600319606036820112610023576004359067ffffffffffffffff82116100235761016082600401918336030112610023576000906001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000163303610a9b576109af6109a76101448693018461153d565b810190611570565b905016926109e06109d3856001600160a01b03166000526000602052604060002090565b546001600160a01b031690565b1615610a7a576020610a116108c9948493604051948580948193637ff9adb960e11b835260243590600484016115fa565b03925af1918215610a6d575b91610a3f575b50610a2f6044356116f1565b6040519081529081906020820190565b610a60915060203d8111610a66575b610a5881836105ad565b8101906114b7565b38610a23565b503d610a4e565b610a756114c6565b610a1d565b6040516326cc3fab60e21b81526001600160a01b0384166004820152602490fd5b604051635dac3db760e11b8152336004820152602490fd5b608060031982011261002357600435610acb81610267565b91602435916044359067ffffffffffffffff821161002357610aef91600401610631565b9060643561064c816106a1565b503461002357610b0b36610ab3565b600193919333148015610b2b575b61073357602093610723935a93611b5a565b503360005260006020526001600160a01b036040600020541615610b19565b50600080600319360112610bd1576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681813b15610bd15760405163b760faf960e01b8152306004820152918290602490829034905af18015610bc4575b610bb8575080f35b610bc19061058c565b80f35b610bcc6114c6565b610bb0565b80fd5b5060006040366003190112610bd157600435610bef81610267565b610bf7611931565b816001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001692833b15610c5f5760449083604051958694859363040b850f60e31b855216600484015260243560248401525af18015610bc457610bb8575080f35b8280fd5b60005b838110610c765750506000910152565b8181015183820152602001610c66565b90602091610c9f81518092818552858086019101610c63565b601f01601f1916010190565b503461002357610cba36610ab3565b90600193929333148015610d0e575b61073357610cd8935a93611b5a565b6040519060203d8301016040523d82523d6000602084013e6108c960405192839215158352604060208401526040830190610c86565b503360005260006020526001600160a01b036040600020541615610cc9565b503461002357604036600319011261002357600435610d4b81610267565b60243567ffffffffffffffff811161002357602091610d71610d7f923690600401610631565b90610d7a611931565b611f7a565b610d8881611d68565b6001600160a01b0360405191168152f35b503461002357602036600319011261002357610021600435610dba81610267565b610dc2611931565b611d68565b50346100235760003660031901126100235760206001600160a01b0360315416604051908152f35b50346100235760003660031901126100235760207f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4546001600160a01b0360405191168152f35b503461002357600036600319011261002357602030546001600160a01b0360405191168152f35b50346100235760803660031901126100235767ffffffffffffffff60043581811161002357610e90903690600401610311565b60249291923582811161002357610eab903690600401610311565b60449491943584811161002357610ec6903690600401610311565b91606435958611610023576108c996610ee6610eee973690600401610311565b969095611c22565b60405190151581529081906020820190565b50346100235760003660031901126100235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610023576000366003190112610023576040516370a0823160e01b815230600482015260209081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fd4575b600091610fb7575b50604051908152f35b610fce9150823d8111610a6657610a5881836105ad565b38610fae565b610fdc6114c6565b610fa6565b90929192604082016040835281518091526060830160208093019160005b8482821061101b575050506001600160a01b0391509416910152565b84516001600160a01b031684529384019390920191600101610fff565b50346100235760403660031901126100235760043561105681610267565b60243561106281611a96565b61106f60405191826105ad565b818152601f1961107e83611a96565b013660208301376110a76109d36000946001600160a01b03166000526000602052604060002090565b6001600160a01b038116801515908161112e575b5080611125575b15611112576111066109d3826110ed61110c946110df8988611ab7565b906001600160a01b03169052565b6001600160a01b03166000526000602052604060002090565b93611ad9565b926110a7565b908381526108c960405192839283610fe1565b508284106110c2565b600191501415386110bb565b50346100235760203660031901126100235760043577ffffffffffffffffffffffffffffffffffffffffffffffff8116809103610023576108c99060405190631aab3f0d60e11b825230600483015260248201526020816044816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ff575b6000916111e1575b506040519081529081906020820190565b6111f9915060203d8111610a6657610a5881836105ad565b386111d0565b6112076114c6565b6111c8565b50346100235760403660031901126100235760043561122a81610267565b60243561123681610267565b61123e611931565b6001600160a01b038116801580156113d4575b6113b3576112846112786109d3856001600160a01b03166000526000602052604060002090565b6001600160a01b031690565b03611359578061130a7faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276936112ef6112d56109d3611354966001600160a01b03166000526000602052604060002090565b916001600160a01b03166000526000602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b61133a61132a826001600160a01b03166000526000602052604060002090565b6001600160a01b03198154169055565b6040516001600160a01b0390911681529081906020820190565b0390a1005b61052c61137c6109d3846001600160a01b03166000526000602052604060002090565b604051633103525b60e21b81526001600160a01b039384166004820152908316602482015292909116604483015281906064820190565b60405163cadb248f60e01b81526001600160a01b0383166004820152602490fd5b5060018114611251565b5034610023576020366003190112610023576100216004356113ff81610267565b611407611931565b611a24565b50346100235760203660031901126100235760043560005260326020526020604060002054604051908152f35b5034610023576000366003190112610023576108c96040516040810181811067ffffffffffffffff8211176114aa575b604052600581527f322e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610c86565b6114b2610575565b611469565b90816020910312610023575190565b506040513d6000823e3d90fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301461152b5734337ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce02600080a3565b604051633c97166560e21b8152600490fd5b903590601e1981360301821215610023570180359067ffffffffffffffff82116100235760200191813603831361002357565b919060408382031261002357823567ffffffffffffffff81116100235760209161159b918501610631565b92013561064c81610267565b9035601e198236030181121561002357016020813591019167ffffffffffffffff821161002357813603831361002357565b908060209392818452848401376000828201840152601f01601f1916010190565b9291906116ec611657602092604087526116276040880161161a83610278565b6001600160a01b03169052565b8381013560608801526116dc61164060408301836115a7565b9390610160948560808c01526101a08b01916115d9565b916116d361167f61166b60608401846115a7565b603f198d8803810160a08f015296916115d9565b608083013560c08c015260a083013560e08c01528a6101009660c0850135888301526116c361012060e087013581850152610140998701358a8501528601866115a7565b92909188828603019101526115d9565b938101906115a7565b91888403016101808901526115d9565b930152565b806116f95750565b600080808093338219f1503d15610283573d611714816105cf565b9061172260405192836105ad565b8152600060203d92013e565b50634e487b7160e01b600052603260045260246000fd5b9190811015611756575b60051b0190565b61175e61172e565b61174f565b3561064c81610267565b90916117869281101561178a575b60051b81019061153d565b9091565b61179261172e565b61177b565b919060408382031261002357825167ffffffffffffffff81116100235783019080601f83011215610023578151916117ce836105cf565b916117dc60405193846105ad565b83835260208483010111610023576020926117fc91848085019101610c63565b92015161064c81610267565b90816020910312610023575161064c8161044f565b60409061064c939281528160208201520190610c86565b906118489060208082518301019101611797565b90916001600160a01b03809216916118766109d3846001600160a01b03166000526000602052604060002090565b16156118ec57916020916118a093604051809581948293630b135d3f60e11b84526004840161181d565b03915afa9081156118df575b6000916118b7575090565b61064c915060203d81116118d8575b6118d081836105ad565b810190611808565b503d6118c6565b6118e76114c6565b6118ac565b6040516326cc3fab60e21b81526001600160a01b0383166004820152602490fd5b916000928392602083519301915af1604051903d6000833e1561192d5750565b3d90fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141580611982575b61196a57565b604051634776242160e01b8152336004820152602490fd5b5030331415611964565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119be57565b60405163e6fce6a560e01b8152336004820152602490fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4548015610021576000808092368280373360601b3652818060143601925af13d82803e1561192d573d90f35b6001600160a01b03808216918215611a84577f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d49081549155167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c600080a3565b60405163dd449f5f60e01b8152600490fd5b60209067ffffffffffffffff8111611aaf5760051b0190565b61175e610575565b6020918151811015611acc575b60051b010190565b611ad461172e565b611ac4565b6000198114611ae85760010190565b634e487b7160e01b600052601160045260246000fd5b611b1690602060405192828480945193849201610c63565b810103902090565b906002821015611b2b5752565b634e487b7160e01b600052602160045260246000fd5b60209093929193611b56816040810196611b1e565b0152565b9493929091946002821015611b2b5760018203611c05576000808751602089018488f4955b8615611bcf577f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee91611bca611bbb6001600160a01b0393611afe565b96604051938493169583611b41565b0390a4565b7f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a91611bca611bbb6001600160a01b0393611afe565b600080875160208901868589f195611b7f565b3561064c816106a1565b9497969391929795909560009887158015611d5e575b8015611d54575b8015611d4a575b611d1b576001978833148015611ceb575b6107335797969594939291906000985b808a10611c7a5750505050505050505050565b9091929394959697899b50611cdb888888611cd589869f8f81611cc0818e611cb98f968f97611cb36103e483611ccd9b611cc89b611745565b9c611745565b359861176d565b989094611745565b611c18565b9436916105fa565b91611eab565b9b01989796959493929190611c67565b506001600160a01b03611d146109d3336001600160a01b03166000526000602052604060002090565b1615611c57565b60405163470c355760e01b81526004810189905260248101919091526044810182905260648101869052608490fd5b5085821415611c46565b5081811415611c3f565b5080881415611c38565b6001600160a01b0381168015908115611ea0575b50611e7d57611da46112786109d3836001600160a01b03166000526000602052604060002090565b611e5a57600160009081526020527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844090611e5590611e21611e047fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6109d3565b6112ef836001600160a01b03166000526000602052604060002090565b6001600090815260205261133a817fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6112ef565b0390a1565b60405163b29d459560e01b81526001600160a01b03919091166004820152602490fd5b60405163cadb248f60e01b81526001600160a01b03919091166004820152602490fd5b600191501438611d7c565b939293611ebb5a86858585611b5a565b948515611f4e57611f23611f187f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da956001600160a01b0395604051968796338852166020870152604086015260a0606086015260a0850190610c86565b916080840190611b1e565b0390a1337f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8600080a2565b50505050337facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375600080a2565b6001600160a01b03811615611fab5781600092918360208194519301915af1604051903d6000833e1561192d575190565b60405162461bcd60e51b815260206004820152601a60248201527f57726f6e67204d6f64756c6520536574757020416464726573730000000000006044820152606490fdfea26469706673582212205e35c32c65281399d0271586e25905b496a0e4ccfd6e3ff9ffae2c43380c16ac64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/entrypoint/EntryPoint_v0.0.5.json b/packages/common/abis/entrypoint/EntryPoint_v0.0.5.json deleted file mode 100644 index 270d5ded1..000000000 --- a/packages/common/abis/entrypoint/EntryPoint_v0.0.5.json +++ /dev/null @@ -1,1318 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "EntryPoint", - "sourceName": "contracts/core/EntryPoint.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "paid", - "type": "uint256" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bool", - "name": "targetSuccess", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "targetResult", - "type": "bytes" - } - ], - "name": "ExecutionResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "opIndex", - "type": "uint256" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "name": "FailedOp", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAddressResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "SignatureValidationFailed", - "type": "error" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "sigFailed", - "type": "bool" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bytes", - "name": "paymasterContext", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.ReturnInfo", - "name": "returnInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "senderInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "factoryInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "paymasterInfo", - "type": "tuple" - } - ], - "name": "ValidationResult", - "type": "error" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "sigFailed", - "type": "bool" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bytes", - "name": "paymasterContext", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.ReturnInfo", - "name": "returnInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "senderInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "factoryInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "paymasterInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "aggregator", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "stakeInfo", - "type": "tuple" - } - ], - "internalType": "struct IEntryPoint.AggregatorStakeInfo", - "name": "aggregatorInfo", - "type": "tuple" - } - ], - "name": "ValidationResultWithAggregation", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "factory", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "paymaster", - "type": "address" - } - ], - "name": "AccountDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "BeforeExecution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalDeposit", - "type": "uint256" - } - ], - "name": "Deposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "SignatureAggregatorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "withdrawTime", - "type": "uint256" - } - ], - "name": "StakeUnlocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "withdrawAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "StakeWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "actualGasCost", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "actualGasUsed", - "type": "uint256" - } - ], - "name": "UserOperationEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "revertReason", - "type": "bytes" - } - ], - "name": "UserOperationRevertReason", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "withdrawAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrawn", - "type": "event" - }, - { - "inputs": [], - "name": "SIG_VALIDATION_FAILED", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - } - ], - "name": "_validateSenderAndPaymaster", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - } - ], - "name": "addStake", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "depositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "deposits", - "outputs": [ - { - "internalType": "uint112", - "name": "deposit", - "type": "uint112" - }, - { - "internalType": "bool", - "name": "staked", - "type": "bool" - }, - { - "internalType": "uint112", - "name": "stake", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - }, - { - "internalType": "uint48", - "name": "withdrawTime", - "type": "uint48" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getDepositInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint112", - "name": "deposit", - "type": "uint112" - }, - { - "internalType": "bool", - "name": "staked", - "type": "bool" - }, - { - "internalType": "uint112", - "name": "stake", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - }, - { - "internalType": "uint48", - "name": "withdrawTime", - "type": "uint48" - } - ], - "internalType": "struct IStakeManager.DepositInfo", - "name": "info", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint192", - "name": "key", - "type": "uint192" - } - ], - "name": "getNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - } - ], - "name": "getSenderAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - } - ], - "name": "getUserOpHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation[]", - "name": "userOps", - "type": "tuple[]" - }, - { - "internalType": "contract IAggregator", - "name": "aggregator", - "type": "address" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.UserOpsPerAggregator[]", - "name": "opsPerAggregator", - "type": "tuple[]" - }, - { - "internalType": "address payable", - "name": "beneficiary", - "type": "address" - } - ], - "name": "handleAggregatedOps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation[]", - "name": "ops", - "type": "tuple[]" - }, - { - "internalType": "address payable", - "name": "beneficiary", - "type": "address" - } - ], - "name": "handleOps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint192", - "name": "key", - "type": "uint192" - } - ], - "name": "incrementNonce", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - } - ], - "internalType": "struct EntryPoint.MemoryUserOp", - "name": "mUserOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "contextOffset", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - } - ], - "internalType": "struct EntryPoint.UserOpInfo", - "name": "opInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "context", - "type": "bytes" - } - ], - "name": "innerHandleOp", - "outputs": [ - { - "internalType": "uint256", - "name": "actualGasCost", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint192", - "name": "", - "type": "uint192" - } - ], - "name": "nonceSequenceNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "op", - "type": "tuple" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "targetCallData", - "type": "bytes" - } - ], - "name": "simulateHandleOp", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - } - ], - "name": "simulateValidation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unlockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - } - ], - "name": "withdrawStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "withdrawAmount", - "type": "uint256" - } - ], - "name": "withdrawTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60a080604052346200008957600160025561022c8181016001600160401b038111838210176200007357829162005d18833903906000f080156200006757608052604051615c8990816200008f82396080518181816113df01528181613e9501526141b60152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080806040523461001657610210908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033", - "deployedBytecode": "0x60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/entrypoint/EntryPoint_v0.0.6.json b/packages/common/abis/entrypoint/EntryPoint_v0.0.6.json deleted file mode 100644 index 270d5ded1..000000000 --- a/packages/common/abis/entrypoint/EntryPoint_v0.0.6.json +++ /dev/null @@ -1,1318 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "EntryPoint", - "sourceName": "contracts/core/EntryPoint.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "paid", - "type": "uint256" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bool", - "name": "targetSuccess", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "targetResult", - "type": "bytes" - } - ], - "name": "ExecutionResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "opIndex", - "type": "uint256" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "name": "FailedOp", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAddressResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "SignatureValidationFailed", - "type": "error" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "sigFailed", - "type": "bool" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bytes", - "name": "paymasterContext", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.ReturnInfo", - "name": "returnInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "senderInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "factoryInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "paymasterInfo", - "type": "tuple" - } - ], - "name": "ValidationResult", - "type": "error" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "sigFailed", - "type": "bool" - }, - { - "internalType": "uint48", - "name": "validAfter", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "validUntil", - "type": "uint48" - }, - { - "internalType": "bytes", - "name": "paymasterContext", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.ReturnInfo", - "name": "returnInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "senderInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "factoryInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "paymasterInfo", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "aggregator", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "stake", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "internalType": "struct IStakeManager.StakeInfo", - "name": "stakeInfo", - "type": "tuple" - } - ], - "internalType": "struct IEntryPoint.AggregatorStakeInfo", - "name": "aggregatorInfo", - "type": "tuple" - } - ], - "name": "ValidationResultWithAggregation", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "factory", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "paymaster", - "type": "address" - } - ], - "name": "AccountDeployed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "BeforeExecution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalDeposit", - "type": "uint256" - } - ], - "name": "Deposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "SignatureAggregatorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unstakeDelaySec", - "type": "uint256" - } - ], - "name": "StakeLocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "withdrawTime", - "type": "uint256" - } - ], - "name": "StakeUnlocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "withdrawAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "StakeWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "actualGasCost", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "actualGasUsed", - "type": "uint256" - } - ], - "name": "UserOperationEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "revertReason", - "type": "bytes" - } - ], - "name": "UserOperationRevertReason", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "withdrawAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrawn", - "type": "event" - }, - { - "inputs": [], - "name": "SIG_VALIDATION_FAILED", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - } - ], - "name": "_validateSenderAndPaymaster", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - } - ], - "name": "addStake", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "depositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "deposits", - "outputs": [ - { - "internalType": "uint112", - "name": "deposit", - "type": "uint112" - }, - { - "internalType": "bool", - "name": "staked", - "type": "bool" - }, - { - "internalType": "uint112", - "name": "stake", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - }, - { - "internalType": "uint48", - "name": "withdrawTime", - "type": "uint48" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getDepositInfo", - "outputs": [ - { - "components": [ - { - "internalType": "uint112", - "name": "deposit", - "type": "uint112" - }, - { - "internalType": "bool", - "name": "staked", - "type": "bool" - }, - { - "internalType": "uint112", - "name": "stake", - "type": "uint112" - }, - { - "internalType": "uint32", - "name": "unstakeDelaySec", - "type": "uint32" - }, - { - "internalType": "uint48", - "name": "withdrawTime", - "type": "uint48" - } - ], - "internalType": "struct IStakeManager.DepositInfo", - "name": "info", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint192", - "name": "key", - "type": "uint192" - } - ], - "name": "getNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - } - ], - "name": "getSenderAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - } - ], - "name": "getUserOpHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation[]", - "name": "userOps", - "type": "tuple[]" - }, - { - "internalType": "contract IAggregator", - "name": "aggregator", - "type": "address" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct IEntryPoint.UserOpsPerAggregator[]", - "name": "opsPerAggregator", - "type": "tuple[]" - }, - { - "internalType": "address payable", - "name": "beneficiary", - "type": "address" - } - ], - "name": "handleAggregatedOps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation[]", - "name": "ops", - "type": "tuple[]" - }, - { - "internalType": "address payable", - "name": "beneficiary", - "type": "address" - } - ], - "name": "handleOps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint192", - "name": "key", - "type": "uint192" - } - ], - "name": "incrementNonce", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - } - ], - "internalType": "struct EntryPoint.MemoryUserOp", - "name": "mUserOp", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "prefund", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "contextOffset", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preOpGas", - "type": "uint256" - } - ], - "internalType": "struct EntryPoint.UserOpInfo", - "name": "opInfo", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "context", - "type": "bytes" - } - ], - "name": "innerHandleOp", - "outputs": [ - { - "internalType": "uint256", - "name": "actualGasCost", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint192", - "name": "", - "type": "uint192" - } - ], - "name": "nonceSequenceNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "op", - "type": "tuple" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "targetCallData", - "type": "bytes" - } - ], - "name": "simulateHandleOp", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "callGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "verificationGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxFeePerGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxPriorityFeePerGas", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct UserOperation", - "name": "userOp", - "type": "tuple" - } - ], - "name": "simulateValidation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unlockStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - } - ], - "name": "withdrawStake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "withdrawAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "withdrawAmount", - "type": "uint256" - } - ], - "name": "withdrawTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60a080604052346200008957600160025561022c8181016001600160401b038111838210176200007357829162005d18833903906000f080156200006757608052604051615c8990816200008f82396080518181816113df01528181613e9501526141b60152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080806040523461001657610210908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033", - "deployedBytecode": "0x60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/abis/misc/AddressResolver.json b/packages/common/abis/misc/AddressResolver.json deleted file mode 100644 index 899d2623f..000000000 --- a/packages/common/abis/misc/AddressResolver.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "AddressResolver", - "sourceName": "contracts/smart-account/utils/AddressResolver.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_v1Factory", - "type": "address" - }, - { - "internalType": "address", - "name": "_v2Factory", - "type": "address" - }, - { - "internalType": "address", - "name": "_ecdsaModule", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ecdsaOwnershipModule", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_eoa", - "type": "address" - }, - { - "internalType": "uint8", - "name": "_maxIndex", - "type": "uint8" - } - ], - "name": "resolveAddresses", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "accountAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "factoryAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "currentImplementation", - "type": "address" - }, - { - "internalType": "string", - "name": "currentVersion", - "type": "string" - }, - { - "internalType": "string", - "name": "factoryVersion", - "type": "string" - }, - { - "internalType": "uint256", - "name": "deploymentIndex", - "type": "uint256" - } - ], - "internalType": "struct IAddressResolver.SmartAccountResult[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_eoa", - "type": "address" - }, - { - "internalType": "uint8", - "name": "_maxIndex", - "type": "uint8" - }, - { - "internalType": "address", - "name": "_moduleAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_moduleSetupData", - "type": "bytes" - } - ], - "name": "resolveAddressesFlexibleForV2", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "accountAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "factoryAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "currentImplementation", - "type": "address" - }, - { - "internalType": "string", - "name": "currentVersion", - "type": "string" - }, - { - "internalType": "string", - "name": "factoryVersion", - "type": "string" - }, - { - "internalType": "uint256", - "name": "deploymentIndex", - "type": "uint256" - } - ], - "internalType": "struct IAddressResolver.SmartAccountResult[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_eoa", - "type": "address" - }, - { - "internalType": "uint8", - "name": "_maxIndex", - "type": "uint8" - } - ], - "name": "resolveAddressesV1", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "accountAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "factoryAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "currentImplementation", - "type": "address" - }, - { - "internalType": "string", - "name": "currentVersion", - "type": "string" - }, - { - "internalType": "string", - "name": "factoryVersion", - "type": "string" - }, - { - "internalType": "uint256", - "name": "deploymentIndex", - "type": "uint256" - } - ], - "internalType": "struct IAddressResolver.SmartAccountResult[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "smartAccountFactoryV1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "smartAccountFactoryV2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x60e0346200011757601f6200124738819003918201601f19168301916001600160401b038311848410176200011c5780849260609460405283398101031262000117576200004d8162000132565b906200006a6040620000626020840162000132565b920162000132565b916200009f6001600160a01b0362000086818416151562000147565b62000095818516151562000147565b8416151562000147565b60805260a05260c0526040516110b2908162000195823960805181818160e601528181610311015281816104700152818161071b015281816108f60152610c2b015260a0518181816104e8015281816105c40152818161080c015281816109cd0152610aaa015260c051818181607e01526109980152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200011757565b156200014f57565b60405162461bcd60e51b815260206004820152601960248201527f5265717569726564206e6f6e2d7a65726f2061646472657373000000000000006044820152606490fdfe6080604052600436101561001257600080fd5b60003560e01c806326bbd86c146108305780632819f31c146107ec578063315f3c03146103355780635acdcdc6146102f15780638d440ec2146100a75763c866cae31461005e57600080fd5b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100a25760403660031901126100a2576100c0610cfc565b60ff6100ca610d12565b166100d481610ec6565b9160009160006001600160a01b0392837f000000000000000000000000000000000000000000000000000000000000000016915b83811061016157868661011a81610ec6565b9160005b82811061013757604051806101338682610d6a565b0390f35b8061014460019284610fde565b5161014f8287610fde565b5261015a8186610fde565b500161011e565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081604481875afa90811561028b576000916102d2575b508581161515806102c8575b6101b6575b50600101610108565b90956040519063557887a160e11b82526020826004818a87165afa91821561028b57600092610297575b506040516001621794a360e21b03198152926000846004818b85165afa801561028b5788600195948695600093610266575b50816040519461022186610e22565b168452886020850152166040830152606082015261023d610fc0565b60808201528860a0820152610252828b610fde565b5261025d818a610fde565b500195906101ad565b6102849193503d806000833e61027c8183610e70565b810190610f5e565b918d610212565b6040513d6000823e3d90fd5b6102ba91925060203d6020116102c1575b6102b28183610e70565b810190610f3f565b90896101e0565b503d6102a8565b50803b15156101a8565b6102eb915060203d6020116102c1576102b28183610e70565b8861019c565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760803660031901126100a25761034e610cfc565b610356610d12565b906001600160a01b0360443516604435036100a2576064359167ffffffffffffffff83116100a257366023840112156100a257826004013561039781610e92565b936103a56040519586610e70565b81855236602483830101116100a2578160009260246020930183880137850101526103da60ff6103d483611008565b16610ec6565b9260009260005b60ff841681106104395785856103f681610ec6565b9160005b82811061040f57604051806101338682610d6a565b8061041c60019284610fde565b516104278287610fde565b526104328186610fde565b50016103fa565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b576000916107cd575b506001600160a01b0381161515806107c3575b610696575b50604051632e7a1a8360e01b8152602081806104dc858860443560048501611033565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610677575b506001600160a01b03811615158061066d575b61053a575b506001016103e1565b90946040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b5760009261064c575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610626575b506001600160a01b039081604051946105be86610e22565b168452817f000000000000000000000000000000000000000000000000000000000000000016602085015216604083015260608201526105fc61105e565b60808201528860a0820152610611828b610fde565b5261061c818a610fde565b5001959150610531565b6001600160a01b03919250610645903d806000833e61027c8183610e70565b91906105a6565b61066691925060203d6020116102c1576102b28183610e70565b908861056b565b50803b151561052c565b610690915060203d6020116102c1576102b28183610e70565b87610519565b60405163557887a160e11b81529195906020836004816001600160a01b0385165afa92831561028b576000936107a2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b5760019460009261077c575b506001600160a01b0390816040519461071586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610753610fc0565b60808201528660a08201526107688289610fde565b526107738188610fde565b500193866104b9565b6001600160a01b0391925061079b903d806000833e61027c8183610e70565b91906106fd565b6107bc91935060203d6020116102c1576102b28183610e70565b91886106c7565b50803b15156104b4565b6107e6915060203d6020116102c1576102b28183610e70565b876104a1565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760403660031901126100a257610849610cfc565b610851610d12565b61085f60ff6103d483611008565b9160009160005b60ff821681106108bf5750505061087c81610ec6565b9160005b82811061089557604051806101338682610d6a565b806108a260019284610fde565b516108ad8287610fde565b526108b88186610fde565b5001610880565b604051631acd17f560e31b81526001600160a01b038416600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610cdd575b506001600160a01b038116151580610cd3575b610ba6575b5060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff831117610b9257506040819052632e7a1a8360e01b8152602081605f19846109c087827f000000000000000000000000000000000000000000000000000000000000000060648201611033565b0301816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa91821561028b57600092610b5d575b50506001600160a01b038116151580610b53575b610a20575b50600101610866565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b57600092610b32575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610b0c575b506001600160a01b03908160405194610aa486610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610ae261105e565b60808201528760a0820152610af7828a610fde565b52610b028189610fde565b5001949150610a17565b6001600160a01b03919250610b2b903d806000833e61027c8183610e70565b9190610a8c565b610b4c91925060203d6020116102c1576102b28183610e70565b9087610a51565b50803b1515610a12565b610b8392506060906020903d602011610b8a575b610b7b8285610e70565b010190610f3f565b86806109fe565b3d9150610b71565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b81529194906020836004816001600160a01b0385165afa92831561028b57600093610cb2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b57600194600092610c8c575b506001600160a01b03908160405194610c2586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610c63610fc0565b60808201528560a0820152610c788288610fde565b52610c838187610fde565b5001928561093f565b6001600160a01b03919250610cab903d806000833e61027c8183610e70565b9190610c0d565b610ccc91935060203d6020116102c1576102b28183610e70565b9187610bd7565b50803b151561093a565b610cf6915060203d6020116102c1576102b28183610e70565b86610927565b600435906001600160a01b03821682036100a257565b6024359060ff821682036100a257565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b90602091610d5e81518092818552858086019101610d22565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610d9f575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610e07610df46060808501519060c08091860152840190610d45565b6080808501519084830390850152610d45565b9160a080910151910152990194019401929594939190610d8e565b60c0810190811067ffffffffffffffff821117610e3e57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610e3e57604052565b90601f8019910116810190811067ffffffffffffffff821117610e3e57604052565b67ffffffffffffffff8111610e3e57601f01601f191660200190565b67ffffffffffffffff8111610e3e5760051b60200190565b90610ed082610eae565b604090610edf82519182610e70565b8381528093610ef0601f1991610eae565b019160005b838110610f025750505050565b6020908251610f1081610e22565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610ef5565b908160209103126100a257516001600160a01b03811681036100a25790565b6020818303126100a25780519067ffffffffffffffff82116100a2570181601f820112156100a2578051610f9181610e92565b92610f9f6040519485610e70565b818452602082840101116100a257610fbd9160208085019101610d22565b90565b60405190610fcd82610e54565b6002825261763160f01b6020830152565b8051821015610ff25760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60011b906101fe60fe83169216820361101d57565b634e487b7160e01b600052601160045260246000fd5b939291611059906001600160a01b03604093168652606060208701526060860190610d45565b930152565b6040519061106b82610e54565b60028252613b1960f11b602083015256fea264697066735822122083951a990433399478b293d1c860c5b725a11f7db47b61e057d189f59c9adeeb64736f6c63430008110033", - "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c806326bbd86c146108305780632819f31c146107ec578063315f3c03146103355780635acdcdc6146102f15780638d440ec2146100a75763c866cae31461005e57600080fd5b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100a25760403660031901126100a2576100c0610cfc565b60ff6100ca610d12565b166100d481610ec6565b9160009160006001600160a01b0392837f000000000000000000000000000000000000000000000000000000000000000016915b83811061016157868661011a81610ec6565b9160005b82811061013757604051806101338682610d6a565b0390f35b8061014460019284610fde565b5161014f8287610fde565b5261015a8186610fde565b500161011e565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081604481875afa90811561028b576000916102d2575b508581161515806102c8575b6101b6575b50600101610108565b90956040519063557887a160e11b82526020826004818a87165afa91821561028b57600092610297575b506040516001621794a360e21b03198152926000846004818b85165afa801561028b5788600195948695600093610266575b50816040519461022186610e22565b168452886020850152166040830152606082015261023d610fc0565b60808201528860a0820152610252828b610fde565b5261025d818a610fde565b500195906101ad565b6102849193503d806000833e61027c8183610e70565b810190610f5e565b918d610212565b6040513d6000823e3d90fd5b6102ba91925060203d6020116102c1575b6102b28183610e70565b810190610f3f565b90896101e0565b503d6102a8565b50803b15156101a8565b6102eb915060203d6020116102c1576102b28183610e70565b8861019c565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760803660031901126100a25761034e610cfc565b610356610d12565b906001600160a01b0360443516604435036100a2576064359167ffffffffffffffff83116100a257366023840112156100a257826004013561039781610e92565b936103a56040519586610e70565b81855236602483830101116100a2578160009260246020930183880137850101526103da60ff6103d483611008565b16610ec6565b9260009260005b60ff841681106104395785856103f681610ec6565b9160005b82811061040f57604051806101338682610d6a565b8061041c60019284610fde565b516104278287610fde565b526104328186610fde565b50016103fa565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b576000916107cd575b506001600160a01b0381161515806107c3575b610696575b50604051632e7a1a8360e01b8152602081806104dc858860443560048501611033565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610677575b506001600160a01b03811615158061066d575b61053a575b506001016103e1565b90946040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b5760009261064c575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610626575b506001600160a01b039081604051946105be86610e22565b168452817f000000000000000000000000000000000000000000000000000000000000000016602085015216604083015260608201526105fc61105e565b60808201528860a0820152610611828b610fde565b5261061c818a610fde565b5001959150610531565b6001600160a01b03919250610645903d806000833e61027c8183610e70565b91906105a6565b61066691925060203d6020116102c1576102b28183610e70565b908861056b565b50803b151561052c565b610690915060203d6020116102c1576102b28183610e70565b87610519565b60405163557887a160e11b81529195906020836004816001600160a01b0385165afa92831561028b576000936107a2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b5760019460009261077c575b506001600160a01b0390816040519461071586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610753610fc0565b60808201528660a08201526107688289610fde565b526107738188610fde565b500193866104b9565b6001600160a01b0391925061079b903d806000833e61027c8183610e70565b91906106fd565b6107bc91935060203d6020116102c1576102b28183610e70565b91886106c7565b50803b15156104b4565b6107e6915060203d6020116102c1576102b28183610e70565b876104a1565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760403660031901126100a257610849610cfc565b610851610d12565b61085f60ff6103d483611008565b9160009160005b60ff821681106108bf5750505061087c81610ec6565b9160005b82811061089557604051806101338682610d6a565b806108a260019284610fde565b516108ad8287610fde565b526108b88186610fde565b5001610880565b604051631acd17f560e31b81526001600160a01b038416600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610cdd575b506001600160a01b038116151580610cd3575b610ba6575b5060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff831117610b9257506040819052632e7a1a8360e01b8152602081605f19846109c087827f000000000000000000000000000000000000000000000000000000000000000060648201611033565b0301816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa91821561028b57600092610b5d575b50506001600160a01b038116151580610b53575b610a20575b50600101610866565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b57600092610b32575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610b0c575b506001600160a01b03908160405194610aa486610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610ae261105e565b60808201528760a0820152610af7828a610fde565b52610b028189610fde565b5001949150610a17565b6001600160a01b03919250610b2b903d806000833e61027c8183610e70565b9190610a8c565b610b4c91925060203d6020116102c1576102b28183610e70565b9087610a51565b50803b1515610a12565b610b8392506060906020903d602011610b8a575b610b7b8285610e70565b010190610f3f565b86806109fe565b3d9150610b71565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b81529194906020836004816001600160a01b0385165afa92831561028b57600093610cb2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b57600194600092610c8c575b506001600160a01b03908160405194610c2586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610c63610fc0565b60808201528560a0820152610c788288610fde565b52610c838187610fde565b5001928561093f565b6001600160a01b03919250610cab903d806000833e61027c8183610e70565b9190610c0d565b610ccc91935060203d6020116102c1576102b28183610e70565b9187610bd7565b50803b151561093a565b610cf6915060203d6020116102c1576102b28183610e70565b86610927565b600435906001600160a01b03821682036100a257565b6024359060ff821682036100a257565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b90602091610d5e81518092818552858086019101610d22565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610d9f575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610e07610df46060808501519060c08091860152840190610d45565b6080808501519084830390850152610d45565b9160a080910151910152990194019401929594939190610d8e565b60c0810190811067ffffffffffffffff821117610e3e57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610e3e57604052565b90601f8019910116810190811067ffffffffffffffff821117610e3e57604052565b67ffffffffffffffff8111610e3e57601f01601f191660200190565b67ffffffffffffffff8111610e3e5760051b60200190565b90610ed082610eae565b604090610edf82519182610e70565b8381528093610ef0601f1991610eae565b019160005b838110610f025750505050565b6020908251610f1081610e22565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610ef5565b908160209103126100a257516001600160a01b03811681036100a25790565b6020818303126100a25780519067ffffffffffffffff82116100a2570181601f820112156100a2578051610f9181610e92565b92610f9f6040519485610e70565b818452602082840101116100a257610fbd9160208085019101610d22565b90565b60405190610fcd82610e54565b6002825261763160f01b6020830152565b8051821015610ff25760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60011b906101fe60fe83169216820361101d57565b634e487b7160e01b600052601160045260246000fd5b939291611059906001600160a01b03604093168652606060208701526060860190610d45565b930152565b6040519061106b82610e54565b60028252613b1960f11b602083015256fea264697066735822122083951a990433399478b293d1c860c5b725a11f7db47b61e057d189f59c9adeeb64736f6c63430008110033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/packages/common/package.json b/packages/common/package.json index d17dddfc6..e69b3dcba 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "3.1.3", + "version": "4.0.0", "description": "common utils to be used for aa transactions", "keywords": [ "utils" @@ -8,7 +8,18 @@ "author": "livingrockrises ", "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", "license": "MIT", - "main": "dist/src/index.js", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "files": [ "dist/*", "README.md" @@ -21,18 +32,21 @@ "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" }, "scripts": { - "clear": "rm -rf dist artifacts cache src/typechain", - "hardhat-deploy": "hardhat deploy", - "hardhat-node": "hardhat node", - "lint-fix": "eslint -f unix . --fix", - "watch-tsc": "tsc -w --preserveWatchOutput", - "gen:types": "typechain --target=ethers-v5 --out-dir=src/typechain 'abis/*/*.json'", - "tsc": "tsc", - "test": "jest tests/**/*.spec.ts --runInBand", + "unbuild": "rimraf dist *.tsbuildinfo", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "test:file": "jest --config=../../jest.config.js --runInBand", + "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:run": "jest tests/**/*.spec.ts --runInBand", - "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && npm run gen:types && tsc", + "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, @@ -40,23 +54,14 @@ "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" }, "dependencies": { - "@account-abstraction/contracts": "^0.6.0", - "@biconomy/core-types": "^3.1.3", - "@biconomy/node-client": "^3.1.3", - "@ethersproject/abi": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/providers": "^5.7.0", - "@openzeppelin/contracts": "^4.7.3", - "@typechain/ethers-v5": "^10.2.0", - "concurrently": "^7.4.0", - "debug": "^4.3.4", - "ethers": "^5.7.0", - "node-fetch": "^2.7.0", - "typechain": "^8.1.1" + "@alchemy/aa-core": "3.0.0-alpha.4", + "@ethersproject/abstract-signer": "^5.7.0", + "viem": "^2.7.3" }, "devDependencies": { - "@nomicfoundation/hardhat-toolbox": "^1.0.2", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "hardhat": "^2.11.0" + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/common/src/Constants.ts b/packages/common/src/Constants.ts deleted file mode 100644 index 7770b372c..000000000 --- a/packages/common/src/Constants.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { ChainId } from "@biconomy/core-types"; - -export const NODE_CLIENT_URL = "https://sdk-backend.prod.biconomy.io/v1"; - -// eslint-disable-next-line no-unused-vars -export const RPC_PROVIDER_URLS: { [key in ChainId]?: string } = { - [ChainId.MAINNET]: "https://rpc.ankr.com/eth", - [ChainId.GOERLI]: "https://rpc.ankr.com/eth_goerli", - [ChainId.SEPOLIA]: "https://rpc.ankr.com/eth_sepolia", - [ChainId.POLYGON_MUMBAI]: "https://rpc.ankr.com/polygon_mumbai", - [ChainId.POLYGON_MAINNET]: "https://rpc.ankr.com/polygon", - [ChainId.BSC_TESTNET]: "https://endpoints.omniatech.io/v1/bsc/testnet/public", - [ChainId.BSC_MAINNET]: "https://rpc.ankr.com/bsc", - [ChainId.POLYGON_ZKEVM_TESTNET]: "https://rpc.public.zkevm-test.net", - [ChainId.POLYGON_ZKEVM_MAINNET]: "https://rpc.ankr.com/polygon_zkevm", - [ChainId.ARBITRUM_GOERLI_TESTNET]: "https://goerli-rollup.arbitrum.io/rpc", - [ChainId.ARBITRUM_SEPOLIA]: "https://arbitrum-sepolia.blockpi.network/v1/rpc/public", - [ChainId.ARBITRUM_ONE_MAINNET]: "https://rpc.ankr.com/arbitrum", - [ChainId.ARBITRUM_NOVA_MAINNET]: "https://nova.arbitrum.io/rpc", - [ChainId.OPTIMISM_MAINNET]: "https://mainnet.optimism.io", - [ChainId.OPTIMISM_GOERLI_TESTNET]: "https://goerli.optimism.io", - [ChainId.AVALANCHE_MAINNET]: "https://api.avax.network/ext/bc/C/rpc", - [ChainId.AVALANCHE_TESTNET]: "https://api.avax-test.network/ext/bc/C/rpc", - [ChainId.MOONBEAM_MAINNET]: "https://rpc.api.moonbeam.network", - [ChainId.BASE_GOERLI_TESTNET]: "https://goerli.base.org", - [ChainId.BASE_MAINNET]: "https://developer-access-mainnet.base.org", - [ChainId.LINEA_TESTNET]: "https://rpc.goerli.linea.build", - [ChainId.LINEA_MAINNET]: "https://rpc.linea.build", - [ChainId.MANTLE_MAINNET]: "https://rpc.mantle.xyz", - [ChainId.MANTLE_TESTNET]: "https://rpc.testnet.mantle.xyz", - [ChainId.OPBNB_MAINNET]: "https://opbnb-mainnet-rpc.bnbchain.org", - [ChainId.OPBNB_TESTNET]: "https://opbnb-testnet-rpc.bnbchain.org", - [ChainId.ASTAR_MAINNET]: "https://evm.astar.network", - [ChainId.ASTAR_TESTNET]: "https://evm.shibuya.astar.network", - [ChainId.CHILIZ_MAINNET]: "https://rpc.ankr.com/chiliz", - [ChainId.CHILIZ_TESTNET]: "https://spicy-rpc.chiliz.com", - [ChainId.CORE_MAINNET]: "https://rpc.core.chain.com", - [ChainId.CORE_TESTNET]: "https://rpc.testnet.core.chain.com", - [ChainId.MANTA_PACIFIC_MAINNET]: "https://pacific-rpc.manta.network/http", - [ChainId.MANTA_PACIFIC_TESTNET]: "https://pacific-rpc.testnet.manta.network/http", - [ChainId.CAPX_TESTNET]: "https://capx-zk-rpc.lgns.me/sequencer-api", -}; diff --git a/packages/common/src/ContractsInstances.ts b/packages/common/src/ContractsInstances.ts deleted file mode 100644 index e50294353..000000000 --- a/packages/common/src/ContractsInstances.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { SmartAccountType } from "@biconomy/core-types"; -import { JsonRpcProvider } from "@ethersproject/providers"; -import { IEntryPoint } from "@account-abstraction/contracts"; -import { - EntryPoint_v005__factory, - EntryPoint_v006__factory, - SmartAccount_v100, - SmartAccount_v200, - SmartAccountFactory_v100, - SmartAccountFactory_v200, - SmartAccountFactory_v100__factory, - SmartAccountFactory_v200__factory, - SmartAccount_v100__factory, - SmartAccount_v200__factory, -} from "./typechain"; - -export type GetContractInstanceDto = { - smartAccountType: SmartAccountType; - version: string; - contractAddress: string; - provider: JsonRpcProvider; -}; - -// Note: Review return types while adding new implementations -export function getSAProxyContract(contractInstanceDto: GetContractInstanceDto): SmartAccount_v100 | SmartAccount_v200 { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; - switch (version) { - case "V1_0_0": - if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccount_v100__factory.connect(contractAddress, provider); - } - break; - case "V2_0_0": - if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccount_v200__factory.connect(contractAddress, provider); - } - break; - default: - return SmartAccount_v200__factory.connect(contractAddress, provider); - } - throw new Error("Invalid version or smartAccountType provided for proxy contract instance"); -} - -export function getSAFactoryContract(contractInstanceDto: GetContractInstanceDto): SmartAccountFactory_v100 | SmartAccountFactory_v200 { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; - - switch (version) { - case "V1_0_0": - if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccountFactory_v100__factory.connect(contractAddress, provider); - } - break; - case "V2_0_0": - if (smartAccountType === SmartAccountType.BICONOMY) { - return SmartAccountFactory_v200__factory.connect(contractAddress, provider); - } - break; - default: - return SmartAccountFactory_v200__factory.connect(contractAddress, provider); - } - throw new Error("Invalid version or smartAccountType provided for factory contract instance"); -} - -export function getEntryPointContract(contractInstanceDto: GetContractInstanceDto): IEntryPoint { - const { smartAccountType, version, contractAddress, provider } = contractInstanceDto; - - switch (version) { - case "V0_0_5": - if (smartAccountType === SmartAccountType.BICONOMY) { - return EntryPoint_v005__factory.connect(contractAddress, provider); - } - break; - case "V0_0_6": - if (smartAccountType === SmartAccountType.BICONOMY) { - return EntryPoint_v006__factory.connect(contractAddress, provider); - } - break; - default: - return EntryPoint_v006__factory.connect(contractAddress, provider); - } - throw new Error("Invalid version or smartAccountType provided for entrypoint contract instance"); -} diff --git a/packages/common/src/ERC4337Utils.ts b/packages/common/src/ERC4337Utils.ts deleted file mode 100644 index 435e82746..000000000 --- a/packages/common/src/ERC4337Utils.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { defaultAbiCoder, hexConcat, hexlify, keccak256 } from "ethers/lib/utils"; -import { ethers } from "ethers"; -import Debug from "debug"; -import { ChainId, UserOperation } from "@biconomy/core-types"; - -const debug = Debug("aa.utils"); - -export const AddressZero = ethers.constants.AddressZero; - -export const EIP1559_UNSUPPORTED_NETWORKS: Array = [97, 56, 1442, 1101]; - -// reverse "Deferrable" or "PromiseOrValue" fields -/* eslint-disable @typescript-eslint/no-explicit-any */ -export type NotPromise = { - [P in keyof T]: Exclude>; -}; - -// function encode(typevalues: Array<{ type: string; val: any }>, forSignature: boolean): string { -// const types = typevalues.map((typevalue) => -// typevalue.type === 'bytes' && forSignature ? 'bytes32' : typevalue.type -// ) -// const values = typevalues.map((typevalue) => -// typevalue.type === 'bytes' && forSignature ? keccak256(typevalue.val) : typevalue.val -// ) -// return defaultAbiCoder.encode(types, values) -// } - -/** - * pack the userOperation - * @param op - * @param forSignature "true" if the hash is needed to calculate the getUserOpHash() - * "false" to pack entire UserOp, for calculating the calldata cost of putting it on-chain. - */ -export function packUserOp(op: Partial, forSignature = true): string { - if (!op.initCode || !op.callData || !op.paymasterAndData) throw new Error("Missing userOp properties"); - - if (forSignature) { - return defaultAbiCoder.encode( - ["address", "uint256", "bytes32", "bytes32", "uint256", "uint256", "uint256", "uint256", "uint256", "bytes32"], - [ - op.sender, - op.nonce, - keccak256(op.initCode), - keccak256(op.callData), - op.callGasLimit, - op.verificationGasLimit, - op.preVerificationGas, - op.maxFeePerGas, - op.maxPriorityFeePerGas, - keccak256(op.paymasterAndData), - ], - ); - } else { - // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) - return defaultAbiCoder.encode( - ["address", "uint256", "bytes", "bytes", "uint256", "uint256", "uint256", "uint256", "uint256", "bytes", "bytes"], - [ - op.sender, - op.nonce, - op.initCode, - op.callData, - op.callGasLimit, - op.verificationGasLimit, - op.preVerificationGas, - op.maxFeePerGas, - op.maxPriorityFeePerGas, - op.paymasterAndData, - op.signature, - ], - ); - } -} - -/** - * calculate the userOpHash of a given userOperation. - * The userOpHash is a hash of all UserOperation fields, except the "signature" field. - * The entryPoint uses this value in the emitted UserOperationEvent. - * A wallet may use this value as the hash to sign (the SampleWallet uses this method) - * @param op - * @param entryPoint - * @param chainId - */ -export function getUserOpHash(op: Partial, entryPoint: string, chainId: number): string { - const userOpHash = keccak256(packUserOp(op, true)); - const enc = defaultAbiCoder.encode(["bytes32", "address", "uint256"], [userOpHash, entryPoint, chainId]); - return keccak256(enc); -} - -const ErrorSig = keccak256(Buffer.from("Error(string)")).slice(0, 10); // 0x08c379a0 -const FailedOpSig = keccak256(Buffer.from("FailedOp(uint256,address,string)")).slice(0, 10); // 0x00fa072b - -interface DecodedError { - message: string; - opIndex?: number; - paymaster?: string; -} - -/** - * decode bytes thrown by revert as Error(message) or FailedOp(opIndex,paymaster,message) - */ -export function decodeErrorReason(error: string): DecodedError | undefined { - debug("decoding", error); - if (error.startsWith(ErrorSig)) { - const [message] = defaultAbiCoder.decode(["string"], "0x" + error.substring(10)); - return { message }; - } else if (error.startsWith(FailedOpSig)) { - const resultSet = defaultAbiCoder.decode(["uint256", "address", "string"], "0x" + error.substring(10)); - let [paymaster, message] = resultSet; - const [opIndex] = resultSet; - message = `FailedOp: ${message as string}`; - if (paymaster.toString() !== ethers.constants.AddressZero) { - message = `${message as string} (paymaster ${paymaster as string})`; - } else { - paymaster = undefined; - } - return { - message, - opIndex, - paymaster, - }; - } - return undefined; -} - -/** - * update thrown Error object with our custom FailedOp message, and re-throw it. - * updated both "message" and inner encoded "data" - * tested on geth, hardhat-node - * usage: entryPoint.handleOps().catch(decodeError) - */ -export function rethrowError(e: any): any { - let error = e; - let parent = e; - if (error?.error != null) { - error = error.error; - } - while (error?.data != null) { - parent = error; - error = error.data; - } - const decoded = typeof error === "string" && error.length > 2 ? decodeErrorReason(error) : undefined; - if (decoded != null) { - e.message = decoded.message; - - if (decoded.opIndex != null) { - // helper for chai: convert our FailedOp error into "Error(msg)" - const errorWithMsg = hexConcat([ErrorSig, defaultAbiCoder.encode(["string"], [decoded.message])]); - // modify in-place the error object: - parent.data = errorWithMsg; - } - } - throw e; -} - -/** - * hexlify all members of object, recursively - * @param obj - */ -export function deepHexlify(obj: any): any { - if (typeof obj === "function") { - return undefined; - } - if (obj == null || typeof obj === "string" || typeof obj === "boolean") { - return obj; - } else if (obj._isBigNumber != null || typeof obj !== "object") { - return hexlify(obj).replace(/^0x0/, "0x"); - } - if (Array.isArray(obj)) { - return obj.map((member) => deepHexlify(member)); - } - return Object.keys(obj).reduce( - (set, key) => ({ - ...set, - [key]: deepHexlify(obj[key]), - }), - {}, - ); -} diff --git a/packages/common/src/Utils.ts b/packages/common/src/Utils.ts deleted file mode 100644 index c97c7bc41..000000000 --- a/packages/common/src/Utils.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { BigNumber, Bytes } from "ethers"; - -/** - * @description this function will return current timestamp in seconds - * @returns Number - */ -export const getTimestampInSeconds = (): number => { - return Math.floor(Date.now() / 1000); -}; - -export const isNullOrUndefined = (value: string | number | bigint | BigNumber | Bytes | undefined): value is undefined => { - return value === null || value === undefined; -}; diff --git a/packages/common/src/httpRequests.ts b/packages/common/src/httpRequests.ts deleted file mode 100644 index d4923d2b6..000000000 --- a/packages/common/src/httpRequests.ts +++ /dev/null @@ -1,86 +0,0 @@ -import fetch from "node-fetch"; -import { Logger } from "./Logger"; - -export enum HttpMethod { - Get = "get", - Post = "post", - Delete = "delete", -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -interface HttpRequest { - url: string; - method: HttpMethod; - body?: Record; - headers?: object; -} - -interface JsonResponse { - result?: any; - error?: string | { code?: number; message?: string; handleOpsCallData?: any }; - message?: string; - msg?: string; -} - -export async function sendRequest({ url, method, body, headers = {} }: HttpRequest): Promise { - Logger.log("jsonRpc request body ", JSON.stringify(body)); - const response = await fetch(url, { - method, - headers: { - ...headers, - Accept: "application/json", - "Content-Type": "application/json", - }, - body: JSON.stringify(body), - }); - - let jsonResponse: JsonResponse | undefined; - try { - jsonResponse = (await response.json()) as JsonResponse; - } catch (error) { - if (!response.ok) { - throw new Error(response.statusText); - } - } - - if (!jsonResponse) { - // Handle the case where jsonResponse is undefined - throw new Error("No response received."); - } - - Logger.log("jsonRpc response ", jsonResponse); - - if (response.ok) { - if (jsonResponse && Object.prototype.hasOwnProperty.call(jsonResponse, "result")) { - return jsonResponse as T; - } - // else - } - const errorObject = { code: response.status, message: response.statusText, data: undefined }; - - if (jsonResponse?.error) { - if (typeof jsonResponse.error === "string") { - const error = jsonResponse.error; - errorObject.code = response.status; - errorObject.message = error; - delete errorObject.data; - throw errorObject; - } else if (typeof jsonResponse.error === "object") { - const error = jsonResponse.error; - errorObject.code = error?.code || 0; - errorObject.message = error?.message || "Unknown Error"; - errorObject.data = error?.handleOpsCallData; - throw errorObject; - } - } - if (jsonResponse?.message) { - errorObject.message = jsonResponse.message; - throw errorObject; - } - if (jsonResponse?.msg) { - errorObject.message = jsonResponse.msg; - throw errorObject; - } - - throw new Error("Unknown Error: Raise an issue here https://github.com/bcnmy/biconomy-client-sdk/issues with reproduction steps"); -} diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index a23afa8c6..cca231168 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -1,7 +1,6 @@ -export * from "./ERC4337Utils"; -export * from "./Logger"; -export * from "./httpRequests"; -export * from "./typechain/index"; -export * from "./Utils"; -export * from "./Constants"; -export * from "./ContractsInstances"; +export * from "./utils/Helpers/convertSigner.js"; +export * from "./utils/Types.js"; +export * from "./utils/Constants.js"; +export * from "./utils/Logger.js"; +export * from "./utils/HttpRequests.js"; +export { EthersSigner } from "./utils/EthersSigner.js"; diff --git a/packages/common/src/utils/Constants.ts b/packages/common/src/utils/Constants.ts new file mode 100644 index 000000000..4e3292cb5 --- /dev/null +++ b/packages/common/src/utils/Constants.ts @@ -0,0 +1,7 @@ +import { SupportedSignerName } from "./Types.js"; + +export const UNIQUE_PROPERTIES_PER_SIGNER: Record = { + alchemy: "signerType", + ethers: "provider", + viem: "transport", +}; diff --git a/packages/common/src/utils/EthersSigner.ts b/packages/common/src/utils/EthersSigner.ts new file mode 100644 index 000000000..e0c568803 --- /dev/null +++ b/packages/common/src/utils/EthersSigner.ts @@ -0,0 +1,38 @@ +import { SmartAccountSigner } from "@alchemy/aa-core"; +import { Hex } from "viem"; +import { Signer } from "@ethersproject/abstract-signer"; + +export class EthersSigner implements SmartAccountSigner { + signerType: string = "ethers"; + + inner: T; + + constructor(inner: T, signerType: string) { + this.inner = inner; + this.signerType = signerType; + } + + async getAddress() { + return (await this.inner.getAddress()) as Hex; + } + + async signMessage(message: string | Uint8Array): Promise { + const signature = await this.inner?.signMessage(message); + return this.#correctSignature(signature as Hex); + } + + async signTypedData(_notUsed: any): Promise { + throw new Error("signTypedData is not supported for Ethers Signer"); + } + + #correctSignature = (signature: Hex): Hex => { + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); + } + return signature; + }; +} + +export default EthersSigner; diff --git a/packages/common/src/utils/Helpers/convertSigner.ts b/packages/common/src/utils/Helpers/convertSigner.ts new file mode 100644 index 000000000..23e9691dd --- /dev/null +++ b/packages/common/src/utils/Helpers/convertSigner.ts @@ -0,0 +1,62 @@ +import { EthersSigner } from "../EthersSigner.js"; +import { SupportedSigner } from "../Types"; +import { WalletClient } from "viem"; +import { WalletClientSigner, SmartAccountSigner } from "@alchemy/aa-core"; +import { UNIQUE_PROPERTIES_PER_SIGNER } from "../Constants.js"; +import { Signer } from "@ethersproject/abstract-signer"; + +interface SmartAccountResult { + signer: SmartAccountSigner; + chainId: number | null; + rpcUrl: string | null; +} + +export const convertSigner = async (signer: SupportedSigner, skipChainIdCalls: boolean = false): Promise => { + let resolvedSmartAccountSigner: SmartAccountSigner; + let rpcUrl: string | null = null; + let chainId: number | null = null; + const isAnAlchemySigner = UNIQUE_PROPERTIES_PER_SIGNER.alchemy in signer; + const isAnEthersSigner = UNIQUE_PROPERTIES_PER_SIGNER.ethers in signer; + const isAViemSigner = UNIQUE_PROPERTIES_PER_SIGNER.viem in signer; + + if (!isAnAlchemySigner) { + if (isAnEthersSigner) { + const ethersSigner = signer as Signer; + if (!skipChainIdCalls) { + // If chainId not provided, get it from walletClient + if (!ethersSigner.provider) { + throw new Error("Cannot consume an ethers Wallet without a provider"); + } + const chainIdFromProvider = await ethersSigner.provider.getNetwork(); + if (!chainIdFromProvider?.chainId) { + throw new Error("Cannot consume an ethers Wallet without a chainId"); + } + chainId = Number(chainIdFromProvider.chainId); + } + // convert ethers Wallet to alchemy's SmartAccountSigner under the hood + resolvedSmartAccountSigner = new EthersSigner(ethersSigner, "ethers"); + // @ts-ignore + rpcUrl = ethersSigner.provider?.connection?.url ?? null; + } else if (isAViemSigner) { + const walletClient = signer as WalletClient; + if (!walletClient.account) { + throw new Error("Cannot consume a viem wallet without an account"); + } + if (!skipChainIdCalls) { + // If chainId not provided, get it from walletClient + if (!walletClient.chain) { + throw new Error("Cannot consume a viem wallet without a chainId"); + } + chainId = walletClient.chain.id; + } + // convert viems walletClient to alchemy's SmartAccountSigner under the hood + resolvedSmartAccountSigner = new WalletClientSigner(walletClient, "viem"); + rpcUrl = walletClient?.transport?.url ?? null; + } else { + throw new Error("Unsupported signer"); + } + } else { + resolvedSmartAccountSigner = signer as SmartAccountSigner; + } + return { signer: resolvedSmartAccountSigner, rpcUrl, chainId }; +}; diff --git a/packages/common/src/utils/Helpers/index.ts b/packages/common/src/utils/Helpers/index.ts new file mode 100644 index 000000000..235336dc3 --- /dev/null +++ b/packages/common/src/utils/Helpers/index.ts @@ -0,0 +1 @@ +export * from "./convertSigner.js"; diff --git a/packages/node-client/src/utils/HttpRequests.ts b/packages/common/src/utils/HttpRequests.ts similarity index 82% rename from packages/node-client/src/utils/HttpRequests.ts rename to packages/common/src/utils/HttpRequests.ts index 49cbb7340..429ff1103 100644 --- a/packages/node-client/src/utils/HttpRequests.ts +++ b/packages/common/src/utils/HttpRequests.ts @@ -1,4 +1,5 @@ -import fetch from "node-fetch"; +import { Logger } from "./Logger.js"; +import { Service } from "./Types.js"; export enum HttpMethod { Get = "get", @@ -7,13 +8,13 @@ export enum HttpMethod { } /* eslint-disable @typescript-eslint/no-explicit-any */ -interface HttpRequest { +export interface HttpRequest { url: string; method: HttpMethod; body?: Record; } -export async function sendRequest({ url, method, body }: HttpRequest): Promise { +export async function sendRequest({ url, method, body }: HttpRequest, service: Service): Promise { const response = await fetch(url, { method, headers: { @@ -26,6 +27,7 @@ export async function sendRequest({ url, method, body }: HttpRequest): Promis let jsonResponse; try { jsonResponse = await response.json(); + Logger.log(`${service} RPC Response`, jsonResponse); } catch (error) { if (!response.ok) { throw new Error(response.statusText); @@ -36,7 +38,7 @@ export async function sendRequest({ url, method, body }: HttpRequest): Promis return jsonResponse as T; } if (jsonResponse.error) { - throw new Error(jsonResponse.error); + throw new Error(`${jsonResponse.error.message} from ${service}`); } if (jsonResponse.message) { throw new Error(jsonResponse.message); diff --git a/packages/common/src/Logger.ts b/packages/common/src/utils/Logger.ts similarity index 100% rename from packages/common/src/Logger.ts rename to packages/common/src/utils/Logger.ts diff --git a/packages/common/src/utils/Types.ts b/packages/common/src/utils/Types.ts new file mode 100644 index 000000000..69508e21f --- /dev/null +++ b/packages/common/src/utils/Types.ts @@ -0,0 +1,13 @@ +import { WalletClient } from "viem"; +import { Signer } from "@ethersproject/abstract-signer"; +import { SmartAccountSigner } from "@alchemy/aa-core"; + +export type SupportedSignerName = "alchemy" | "ethers" | "viem"; +export type SupportedSigner = SmartAccountSigner | WalletClient | Signer | LightSigner; + +export type Service = "Bundler" | "Paymaster"; + +export interface LightSigner { + getAddress(): Promise; + signMessage(message: string | Uint8Array): Promise; +} diff --git a/packages/common/tests/ERC4337Utils.spec.ts b/packages/common/tests/ERC4337Utils.spec.ts deleted file mode 100644 index b7a6af546..000000000 --- a/packages/common/tests/ERC4337Utils.spec.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { expect } from "chai"; -import { packUserOp } from "../src/ERC4337Utils"; - -describe("packUserOp", () => { - it("should pack a UserOperationStruct object", () => { - const userOp = { - sender: "0x1234567890123456789012345678901234567890", - nonce: 1, - initCode: "0x0987654321098765432109876543210987654321", - callData: "0x", - callGasLimit: 1000000, - verificationGasLimit: 1000000, - preVerificationGas: 1000000, - maxFeePerGas: 10, - maxPriorityFeePerGas: 1, - paymasterAndData: "0x0987654321098765432109876543210987654321", - signature: "0x", - }; - const packedUserOp = packUserOp(userOp, false); - expect(packedUserOp).to.equal( - "0x00000000000000000000000012345678901234567890123456789012345678900000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001409876543210987654321098765432109876543210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001409876543210987654321098765432109876543210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - ); - }); - - it("should pack a UserOperationStruct object for signature", () => { - const userOp = { - sender: "0x1234567890123456789012345678901234567890", - nonce: 1, - initCode: "0x0987654321098765432109876543210987654321", - callData: "0x", - callGasLimit: 1000000, - verificationGasLimit: 1000000, - preVerificationGas: 1000000, - maxFeePerGas: 10, - maxPriorityFeePerGas: 1, - paymasterAndData: "0x0987654321098765432109876543210987654321", - signature: "0x", - }; - const packedUserOp = packUserOp(userOp, true); - expect(packedUserOp).to.equal( - "0x00000000000000000000000012345678901234567890123456789012345678900000000000000000000000000000000000000000000000000000000000000001a04121637443bf141af4dc01872f24d6933dd1e67581bd12f805a945888da6b0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001a04121637443bf141af4dc01872f24d6933dd1e67581bd12f805a945888da6b0", - ); - }); -}); diff --git a/packages/common/tsconfig.build.json b/packages/common/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/common/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index 7584e7676..d9b305a9a 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -3,7 +3,11 @@ "compilerOptions": { "composite": true, "outDir": "dist", - "baseUrl": "src" + "baseUrl": "src", + "resolveJsonModule": true, + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"] }, - "include": ["./**/*.ts"] + "include": ["src", "src/**/*.json"] } diff --git a/packages/core-types/CHANGELOG.md b/packages/core-types/CHANGELOG.md deleted file mode 100644 index 0301480be..000000000 --- a/packages/core-types/CHANGELOG.md +++ /dev/null @@ -1,102 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 3.1.3 (2023-12-28) - -VERSION Bump Only. - -## 3.1.2 (2023-12-28) - -VERSION Bump Only. - -## 3.1.1 (2023-11-09) - - -### Features - -* add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) - - - -## 3.1.0 (2023-09-20) - - -### Bug Fixes - -* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -* build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) -* bundler sync changes ([eb9b30d](https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e)) -* logic update ([41c4aec](https://github.com/bcnmy/biconomy-client-sdk/commit/41c4aec8ab5012b7ad362b2870966bd607e38636)) -* multisend bundle ([5f55587](https://github.com/bcnmy/biconomy-client-sdk/commit/5f55587b63c82a30652843fe619d8b891e495399)) -* optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) - - -### Features - -* base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) -* chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -* chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) -* chain integrations ([9af2da0](https://github.com/bcnmy/biconomy-client-sdk/commit/9af2da03820a26ac7d21301c32de041ced6c5e43)) -* fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) - - - - - -## 3.0.0 (2023-08-28) - -### Features - -- base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) - -# 3.1.0-alpha.0 (2023-07-24) - -VERSION Bump Only. - -# 3.1.0-alpha.0 (2023-07-24) - -### Features - -- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - -## 3.1.0-alpha.0 (2023-07-12) - -### Bug Fixes - -- bundler sync changes ([eb9b30d](https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e)) - -## 2.0.2 (2023-06-10) - -- smart account state types to have factory address added - -## 2.0.1 (2023-05-18) - -### Bug Fixes - -- logic update ([41c4aec](https://github.com/bcnmy/biconomy-client-sdk/commit/41c4aec8ab5012b7ad362b2870966bd607e38636)) -- fix build issue in angular for relative path (https://github.com/bcnmy/biconomy-client-sdk/commit/eb9b30d786820b4c9a6a18c72481d0ed3782a22e) - -### Features - -- chain integrations ([9af2da0](https://github.com/bcnmy/biconomy-client-sdk/commit/9af2da03820a26ac7d21301c32de041ced6c5e43)) -- Type added for PaymasterServiceData + reordering of params ([fae8b3a](https://github.com/bcnmy/biconomy-client-sdk/commit/fae8b3a02a5e810a9a40674d27f389b89199bb62)) -- logic changed to accept paymasterServiceData ([6daaf37](https://github.com/bcnmy/biconomy-client-sdk/commit/6daaf37855a13fa6e12fdbab16a7e980b4631475)) -- UserOpGasFields for fetching gas and gas prices from bundler (https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1) -- skipBundlerGasEstimation added in dto update CreateUserPaidTransactionDto ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) -- fetching gas prices from bundler ([a0c070b](https://github.com/bcnmy/biconomy-client-sdk/commit/a0c070b04bb6e249388a7d304dad7d08e97810e1)) - -## 2.0.0 (2023-04-07) - -### Bug Fixes - -- backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -- multisend bundle ([5f55587](https://github.com/bcnmy/biconomy-client-sdk/commit/5f55587b63c82a30652843fe619d8b891e495399)) -- optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) - -## 1.0.0 (2023-01-03) - -### Bug Fixes - -- optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) diff --git a/packages/core-types/README.md b/packages/core-types/README.md deleted file mode 100644 index 4fcf8c7bf..000000000 --- a/packages/core-types/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# `@biconomy/core-types` - -# Biconomy SDK Types - -Common types in the [Biconomy SDK](https://github.com/bcnmy/biconomy-client-sdk) - -### Usage - -for example - -```typescript -import { SmartAccountState, SmartAccountVersion, GasLimit, ChainId } from "@biconomy/core-types"; -``` diff --git a/packages/core-types/package.json b/packages/core-types/package.json deleted file mode 100644 index 42d74006e..000000000 --- a/packages/core-types/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "@biconomy/core-types", - "version": "3.1.3", - "description": "Biconomy Client SDK types", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", - "keywords": [ - "Ethereum", - "Gnosis", - "Biconomy", - "SDK" - ], - "scripts": { - "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" - }, - "author": "Biconomy (https://biconomy.io)", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "devDependencies": { - "@types/node": "^17.0.23", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "prettier": "^2.6.2", - "typescript": "^4.6.3" - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/contracts": "^5.6.0", - "@ethersproject/providers": "^5.7.0", - "ethers": "^5.7.2", - "web3-core": "^1.7.1" - } -} diff --git a/packages/core-types/src/BundlerTypes.ts b/packages/core-types/src/BundlerTypes.ts deleted file mode 100644 index 9397dc7fd..000000000 --- a/packages/core-types/src/BundlerTypes.ts +++ /dev/null @@ -1,8 +0,0 @@ -export type UserOpGasFields = { - maxPriorityFeePerGas: string | null; - maxFeePerGas: string | null; - gasPrice: string | null; - callGasLimit: number; - verificationGasLimit: number; - preVerificationGas: number; -}; diff --git a/packages/core-types/src/ChainsTypes.ts b/packages/core-types/src/ChainsTypes.ts deleted file mode 100644 index fa6c238a4..000000000 --- a/packages/core-types/src/ChainsTypes.ts +++ /dev/null @@ -1,39 +0,0 @@ -export enum ChainId { - // Ethereum - MAINNET = 1, - GOERLI = 5, - SEPOLIA = 11155111, - POLYGON_MUMBAI = 80001, - POLYGON_MAINNET = 137, - BSC_TESTNET = 97, - BSC_MAINNET = 56, - POLYGON_ZKEVM_TESTNET = 1442, - POLYGON_ZKEVM_MAINNET = 1101, - ARBITRUM_GOERLI_TESTNET = 421613, - ARBITRUM_SEPOLIA = 421614, - ARBITRUM_ONE_MAINNET = 42161, - ARBITRUM_NOVA_MAINNET = 42170, - OPTIMISM_MAINNET = 10, - OPTIMISM_GOERLI_TESTNET = 420, - AVALANCHE_MAINNET = 43114, - AVALANCHE_TESTNET = 43113, - MOONBEAM_MAINNET = 1284, - BASE_GOERLI_TESTNET = 84531, - BASE_MAINNET = 8453, - LINEA_TESTNET = 59140, - LINEA_MAINNET = 59144, - MANTLE_MAINNET = 5000, - MANTLE_TESTNET = 5001, - OPBNB_MAINNET = 204, - OPBNB_TESTNET = 5611, - ASTAR_MAINNET = 592, - ASTAR_TESTNET = 81, - CHILIZ_MAINNET = 88888, - CHILIZ_TESTNET = 88882, - CORE_MAINNET = 1116, - CORE_TESTNET = 1115, - MANTA_PACIFIC_MAINNET = 169, - MANTA_PACIFIC_TESTNET = 3441005, - CAPX_TESTNET = 7116, - GANACHE = 1337, //Temp -} diff --git a/packages/core-types/src/PaymasterServiceTypes.ts b/packages/core-types/src/PaymasterServiceTypes.ts deleted file mode 100644 index c5d3f4bb5..000000000 --- a/packages/core-types/src/PaymasterServiceTypes.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type PaymasterServiceDataType = { - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }; -}; diff --git a/packages/core-types/src/Types.ts b/packages/core-types/src/Types.ts deleted file mode 100644 index 529102c99..000000000 --- a/packages/core-types/src/Types.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { BigNumberish, BytesLike } from "ethers"; - -export type SmartAccountVersion = "1.0.1" | "1.0.0" | "1.0.2"; - -export type Transaction = { - to: string; - value?: BigNumberish; - data?: string; -}; - -export type UserOperation = { - sender: string; - nonce: BigNumberish; - initCode: BytesLike; - callData: BytesLike; - callGasLimit: BigNumberish; - verificationGasLimit: BigNumberish; - preVerificationGas: BigNumberish; - maxFeePerGas: BigNumberish; - maxPriorityFeePerGas: BigNumberish; - paymasterAndData: BytesLike; - signature: BytesLike; -}; - -export enum SmartAccountType { - BICONOMY, -} diff --git a/packages/core-types/src/index.ts b/packages/core-types/src/index.ts deleted file mode 100644 index dffce0c18..000000000 --- a/packages/core-types/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./Types"; -export * from "./ChainsTypes"; diff --git a/packages/core-types/tests/core-types.spec.ts b/packages/core-types/tests/core-types.spec.ts deleted file mode 100644 index 3f9a6a4bb..000000000 --- a/packages/core-types/tests/core-types.spec.ts +++ /dev/null @@ -1,5 +0,0 @@ -describe("Core Types Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); - }); -}); diff --git a/packages/core-types/tsconfig.json b/packages/core-types/tsconfig.json deleted file mode 100644 index c7ff8535e..000000000 --- a/packages/core-types/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src" - }, - "include": ["src"] -} diff --git a/packages/modules/.esbuild.js b/packages/modules/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/modules/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md index 3f5fcdb40..400a2d2a6 100644 --- a/packages/modules/CHANGELOG.md +++ b/packages/modules/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2024-02-12) + +### Features + +- Export module create aliases from modules package ([d6205c](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/d6205c4d76ab846ecdc10843c65e0277f3ceab00)) + ## 3.1.3 (2023-12-28) VERSION Bump Only. @@ -11,31 +17,28 @@ VERSION Bump Only. ### Bug Fixes -* Update import paths for consistency and fixing build issues ([ec5c3a3](https://github.com/bcnmy/biconomy-client-sdk/pull/332/commits/ec5c3a352e8caab6e94234264f4cd5cb32e5af3f)) +- Update import paths for consistency and fixing build issues ([ec5c3a3](https://github.com/bcnmy/biconomy-client-sdk/pull/332/commits/ec5c3a352e8caab6e94234264f4cd5cb32e5af3f)) ## 3.1.1 (2023-11-09) - ### Bug Fixes -* Fix update batched session router address and signing logic ([107b881](https://github.com/bcnmy/biconomy-client-sdk/commit/107b881da4b1a6da1f9db22ac54eda62f8c05b59)) - - +- Fix update batched session router address and signing logic ([107b881](https://github.com/bcnmy/biconomy-client-sdk/commit/107b881da4b1a6da1f9db22ac54eda62f8c05b59)) ## 3.1.0 (2023-09-20) -Modular Account Abstraction is here. -### Bug Fixes +Modular Account Abstraction is here. -* incorrect data merkleRoot length ([2e9d2dd](https://github.com/bcnmy/biconomy-client-sdk/commit/2e9d2dd5876a4de61af390d6595e1ab2cf8c137c)) -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) -* signing issue ([f67e339](https://github.com/bcnmy/biconomy-client-sdk/commit/f67e339bcff8d9712df8406b4d123affcd4d4aa4)) -* sorting leaves always ([1fb908c](https://github.com/bcnmy/biconomy-client-sdk/commit/1fb908cb3b90abe4588c3a162ecf45c8afc80d81)) -* use hexZeroPad in leaf ([b3da05f](https://github.com/bcnmy/biconomy-client-sdk/commit/b3da05f2e9c56973e96d0a7a3bc065aef23f9c18)) -* use proof instead of root ([3a40a9d](https://github.com/bcnmy/biconomy-client-sdk/commit/3a40a9d8b9fb1fba8f660e5eab1fae1369f9f289)) +### Bug Fixes +- incorrect data merkleRoot length ([2e9d2dd](https://github.com/bcnmy/biconomy-client-sdk/commit/2e9d2dd5876a4de61af390d6595e1ab2cf8c137c)) +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +- more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) +- signing issue ([f67e339](https://github.com/bcnmy/biconomy-client-sdk/commit/f67e339bcff8d9712df8406b4d123affcd4d4aa4)) +- sorting leaves always ([1fb908c](https://github.com/bcnmy/biconomy-client-sdk/commit/1fb908cb3b90abe4588c3a162ecf45c8afc80d81)) +- use hexZeroPad in leaf ([b3da05f](https://github.com/bcnmy/biconomy-client-sdk/commit/b3da05f2e9c56973e96d0a7a3bc065aef23f9c18)) +- use proof instead of root ([3a40a9d](https://github.com/bcnmy/biconomy-client-sdk/commit/3a40a9d8b9fb1fba8f660e5eab1fae1369f9f289)) ### Features -* add session key manager ([af41480](https://github.com/bcnmy/biconomy-client-sdk/commit/af41480ff1c88e2a4d0ee8605f2f01b3a958a1d9)) +- add session key manager ([af41480](https://github.com/bcnmy/biconomy-client-sdk/commit/af41480ff1c88e2a4d0ee8605f2f01b3a958a1d9)) diff --git a/packages/modules/package.json b/packages/modules/package.json index 68b5ff7c8..6defc5259 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,9 +1,19 @@ { "name": "@biconomy/modules", - "version": "3.1.3", + "version": "4.0.0", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "keywords": [ "Smart Account", "ERC-4337", @@ -15,7 +25,16 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "test:file": "TS_NODE_PROJECT=../../tsconfig.json mocha -r ts-node/register --timeout 30000", "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", "test:cov": "jest --coverage", @@ -24,7 +43,7 @@ "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, - "author": "livingrockrises ", + "author": "Biconomy", "license": "MIT", "files": [ "dist/*", @@ -34,12 +53,16 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "^1.2.2", - "@biconomy/common": "^3.1.3", - "@biconomy/core-types": "^3.1.3", - "@biconomy/node-client": "^3.1.3", - "ethereumjs-util": "^7.1.5", - "ethers": "^5.7.2", - "merkletreejs": "^0.3.9" + "@alchemy/aa-core": "3.0.0-alpha.4", + "@biconomy/common": "4.0.0", + "@ethersproject/abi": "^5.7.0", + "merkletreejs": "^0.3.11", + "viem": "^2.7.3" + }, + "devDependencies": { + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/modules/src/BaseValidationModule.ts b/packages/modules/src/BaseValidationModule.ts index 1fc777e70..525fe122d 100644 --- a/packages/modules/src/BaseValidationModule.ts +++ b/packages/modules/src/BaseValidationModule.ts @@ -1,12 +1,11 @@ -import { Signer } from "ethers"; -import { Bytes } from "ethers/lib/utils"; -import { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types"; -import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants"; -import { IValidationModule } from "./interfaces/IValidationModule"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { Hex } from "viem"; +import { SmartAccountSigner } from "@alchemy/aa-core"; +import { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types.js"; +import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants.js"; +import { IValidationModule } from "./interfaces/IValidationModule.js"; export abstract class BaseValidationModule implements IValidationModule { - entryPointAddress: string; + entryPointAddress: Hex; constructor(moduleConfig: BaseValidationModuleConfig) { const { entryPointAddress } = moduleConfig; @@ -14,25 +13,25 @@ export abstract class BaseValidationModule implements IValidationModule { this.entryPointAddress = entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS; } - abstract getAddress(): string; + abstract getAddress(): Hex; - setEntryPointAddress(entryPointAddress: string): void { + setEntryPointAddress(entryPointAddress: Hex): void { this.entryPointAddress = entryPointAddress; } - abstract getInitData(): Promise; + abstract getInitData(): Promise; // Anything required to get dummy signature can be passed as params - abstract getDummySignature(_params?: ModuleInfo): Promise; + abstract getDummySignature(_params?: ModuleInfo): Promise; - abstract getSigner(): Promise; + abstract getSigner(): Promise; // Signer specific or any other additional information can be passed as params - abstract signUserOpHash(_userOpHash: string, _params?: ModuleInfo): Promise; + abstract signUserOpHash(_userOpHash: string, _params?: ModuleInfo): Promise; - abstract signMessage(_message: Bytes | string | Uint8Array): Promise; + abstract signMessage(_message: Uint8Array | string): Promise; - async signMessageWalletClientSigner(message: string | Uint8Array, signer: WalletClientSigner): Promise { + async signMessageSmartAccountSigner(message: string | Uint8Array, signer: SmartAccountSigner): Promise { let signature: `0x${string}` = await signer.signMessage(message); const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); @@ -43,16 +42,4 @@ export abstract class BaseValidationModule implements IValidationModule { return signature; } - - async signMessageSigner(message: Bytes | string, signer: Signer): Promise { - let signature = await signer.signMessage(message); - - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); - } - - return signature; - } } diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index ffd273223..4c8847e17 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -1,26 +1,27 @@ -import { Signer, ethers } from "ethers"; -import { Logger } from "@biconomy/common"; -import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from "ethers/lib/utils"; -import { ModuleVersion, CreateSessionDataParams, BatchedSessionRouterModuleConfig, ModuleInfo, CreateSessionDataResponse } from "./utils/Types"; +import { ModuleVersion, CreateSessionDataParams, BatchedSessionRouterModuleConfig, ModuleInfo, CreateSessionDataResponse } from "./utils/Types.js"; import { BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE, DEFAULT_BATCHED_SESSION_ROUTER_MODULE, -} from "./utils/Constants"; -import { BaseValidationModule } from "./BaseValidationModule"; -import { SessionKeyManagerModule } from "./SessionKeyManagerModule"; -import { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; +} from "./utils/Constants.js"; +import { BaseValidationModule } from "./BaseValidationModule.js"; +import { SessionKeyManagerModule } from "./SessionKeyManagerModule.js"; +import { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage.js"; +import { Hex, concat, encodeAbiParameters, keccak256, pad, parseAbiParameters, toBytes, toHex } from "viem"; +import { SmartAccountSigner } from "@alchemy/aa-core"; +import { convertSigner } from "@biconomy/common"; +import { defaultAbiCoder } from "@ethersproject/abi"; export class BatchedSessionRouterModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; - moduleAddress!: string; + moduleAddress!: Hex; - sessionManagerModuleAddress!: string; + sessionManagerModuleAddress!: Hex; sessionKeyManagerModule!: SessionKeyManagerModule; - readonly mockEcdsaSessionKeySig: string = + readonly mockEcdsaSessionKeySig: Hex = "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; /** @@ -43,7 +44,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; + const moduleAddr = BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } @@ -89,7 +90,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @param sessionParams Information about all the sessions to be used to sign the user operation which has a batch execution * @returns The signature of the user operation */ - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { + async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { const sessionParams = params?.batchSessionParams; if (!sessionParams || sessionParams.length === 0) { throw new Error("Session parameters are not provided"); @@ -98,9 +99,9 @@ export class BatchedSessionRouterModule extends BaseValidationModule { const sessionDataTupleArray = []; // signer must be the same for all the sessions - const sessionSigner = sessionParams[0].sessionSigner; + const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner); - const signature = await sessionSigner.signMessage(arrayify(userOpHash)); + const signature = await sessionSigner.signMessage(toBytes(userOpHash)); for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { @@ -129,14 +130,14 @@ export class BatchedSessionRouterModule extends BaseValidationModule { sessionDataTuple.push(sessionSignerData.sessionValidationModule); sessionDataTuple.push(sessionSignerData.sessionKeyData); - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), - hexZeroPad(sessionSignerData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), sessionSignerData.sessionKeyData, ]); - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); + const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(keccak256(leafDataHex)); sessionDataTuple.push(proof); sessionDataTuple.push(sessionParam.additionalSessionData ?? "0x"); @@ -151,7 +152,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature], ); - return paddedSignature; + return paddedSignature as Hex; } /** @@ -175,21 +176,21 @@ export class BatchedSessionRouterModule extends BaseValidationModule { /** * @returns SessionKeyManagerModule address */ - getAddress(): string { + getAddress(): Hex { return this.moduleAddress; } /** * @returns SessionKeyManagerModule address */ - getSessionKeyManagerAddress(): string { + getSessionKeyManagerAddress(): Hex { return this.sessionManagerModuleAddress; } /** * @remarks This is the version of the module contract */ - async getSigner(): Promise { + async getSigner(): Promise { throw new Error("Method not implemented."); } @@ -197,7 +198,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { * @remarks This is the dummy signature for the module, used in buildUserOp for bundler estimation * @returns Dummy signature */ - async getDummySignature(params?: ModuleInfo): Promise { + async getDummySignature(params?: ModuleInfo): Promise { const sessionParams = params?.batchSessionParams; if (!sessionParams || sessionParams.length === 0) { throw new Error("Session parameters are not provided"); @@ -208,7 +209,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // if needed we could do mock signature over userOpHashAndModuleAddress // signer must be the same for all the sessions - const sessionSigner = sessionParams[0].sessionSigner; + const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner); for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { @@ -232,19 +233,19 @@ export class BatchedSessionRouterModule extends BaseValidationModule { throw new Error("sessionID or sessionValidationModule should be provided."); } - sessionDataTuple.push(sessionSignerData.validUntil); - sessionDataTuple.push(sessionSignerData.validAfter); + sessionDataTuple.push(BigInt(sessionSignerData.validUntil)); + sessionDataTuple.push(BigInt(sessionSignerData.validAfter)); sessionDataTuple.push(sessionSignerData.sessionValidationModule); sessionDataTuple.push(sessionSignerData.sessionKeyData); - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), - hexZeroPad(sessionSignerData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), sessionSignerData.sessionKeyData, ]); - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); + const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(keccak256(leafDataHex)); sessionDataTuple.push(proof); sessionDataTuple.push(sessionParam.additionalSessionData ?? "0x"); @@ -253,29 +254,26 @@ export class BatchedSessionRouterModule extends BaseValidationModule { } // Generate the padded signature - const paddedSignature = defaultAbiCoder.encode( ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], [this.getSessionKeyManagerAddress(), sessionDataTupleArray, this.mockEcdsaSessionKeySig], ); - const dummySig = ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [paddedSignature, this.getAddress()]); - + const dummySig = encodeAbiParameters(parseAbiParameters("bytes, address"), [paddedSignature as Hex, this.getAddress()]); return dummySig; } /** * @remarks Other modules may need additional attributes to build init data */ - async getInitData(): Promise { + async getInitData(): Promise { throw new Error("Method not implemented."); } /** * @remarks This Module dont have knowledge of signer. So, this method is not implemented */ - async signMessage(message: Bytes | string): Promise { - Logger.log("message", message); + async signMessage(_message: Uint8Array | string): Promise { throw new Error("Method not implemented."); } } diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index 613623560..737a43d07 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -1,29 +1,34 @@ -import { Logger } from "@biconomy/common"; -import { Signer, ethers } from "ethers"; -import { Bytes, arrayify } from "ethers/lib/utils"; -import { ECDSAOwnershipValidationModuleConfig, ModuleVersion } from "./utils/Types"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; -import { BaseValidationModule } from "./BaseValidationModule"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { Hex, encodeFunctionData, getAddress, parseAbi, toBytes } from "viem"; +import { SmartAccountSigner } from "@alchemy/aa-core"; +import { ECDSAOwnershipValidationModuleConfig, ECDSAOwnershipValidationModuleConfigConstructorProps, ModuleVersion } from "./utils/Types.js"; +import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants.js"; +import { convertSigner } from "@biconomy/common"; +import { BaseValidationModule } from "./BaseValidationModule.js"; // Could be renamed with suffix API export class ECDSAOwnershipValidationModule extends BaseValidationModule { - signer!: Signer | WalletClientSigner; + signer: SmartAccountSigner; - moduleAddress!: string; + moduleAddress!: Hex; version: ModuleVersion = "V1_0_0"; - private constructor(moduleConfig: ECDSAOwnershipValidationModuleConfig) { + private constructor(moduleConfig: ECDSAOwnershipValidationModuleConfigConstructorProps) { super(moduleConfig); + this.signer = moduleConfig.signer; } public static async create(moduleConfig: ECDSAOwnershipValidationModuleConfig): Promise { - const instance = new ECDSAOwnershipValidationModule(moduleConfig); + // Signer needs to be initialised here before defaultValidationModule is set + const { signer } = await convertSigner(moduleConfig.signer, true); + const configForConstructor: ECDSAOwnershipValidationModuleConfigConstructorProps = { ...moduleConfig, signer }; + + // TODO: (Joe) stop doing things in a 'create' call after the instance has been created + const instance = new ECDSAOwnershipValidationModule(configForConstructor); if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; + const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } @@ -33,55 +38,55 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { instance.moduleAddress = DEFAULT_ECDSA_OWNERSHIP_MODULE; // Note: in this case Version remains the default one } - instance.signer = moduleConfig.signer; return instance; } - getAddress(): string { + getAddress(): Hex { return this.moduleAddress; } - async getSigner(): Promise { + async getSigner(): Promise { return Promise.resolve(this.signer); } - async getDummySignature(): Promise { - const moduleAddress = ethers.utils.getAddress(this.getAddress()); + async getDummySignature(): Promise { + const moduleAddress = getAddress(this.getAddress()); const dynamicPart = moduleAddress.substring(2).padEnd(40, "0"); return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000`; } // Note: other modules may need additional attributes to build init data - async getInitData(): Promise { + async getInitData(): Promise { const ecdsaOwnerAddress = await this.signer.getAddress(); - const moduleRegistryAbi = "function initForSmartAccount(address owner)"; - const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]); - const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData("initForSmartAccount", [ecdsaOwnerAddress]); + const moduleRegistryParsedAbi = parseAbi(["function initForSmartAccount(address owner)"]); + const ecdsaOwnershipInitData = encodeFunctionData({ + abi: moduleRegistryParsedAbi, + functionName: "initForSmartAccount", + args: [ecdsaOwnerAddress], + }); return ecdsaOwnershipInitData; } - async signUserOpHash(userOpHash: string): Promise { - const sig = await this.signer.signMessage(arrayify(userOpHash)); - - Logger.log("ecdsa signature ", sig); - + async signUserOpHash(userOpHash: string): Promise { + const sig = await this.signer.signMessage(toBytes(userOpHash)); return sig; } /** * Signs a message using the appropriate method based on the type of signer. * - * @param {Bytes | string | Uint8Array} message - The message to be signed. + * @param {Uint8Array | string} message - The message to be signed. * @returns {Promise} A promise resolving to the signature or error message. * @throws {Error} If the signer type is invalid or unsupported. */ - async signMessage(message: Bytes | string | Uint8Array): Promise { - if (this.signer instanceof WalletClientSigner) { - return super.signMessageWalletClientSigner(message as Uint8Array | string, this.signer as WalletClientSigner); - } else if (this.signer instanceof Signer) { - return super.signMessageSigner(message as Bytes | string, this.signer as Signer); - } else { - throw new Error("Invalid signer type"); + async signMessage(message: Uint8Array | string): Promise { + let signature = await this.signer.signMessage(message); + + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); } + return signature; } } diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index 3398fdc1c..e51aae190 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -1,29 +1,40 @@ -import { UserOperation } from "@biconomy/core-types"; -import { Logger, getUserOpHash } from "@biconomy/common"; -import { Signer, ethers } from "ethers"; -import MerkleTree from "merkletreejs"; -import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants"; -import { keccak256, arrayify, defaultAbiCoder, hexConcat, hexZeroPad, Bytes } from "ethers/lib/utils"; -import { ModuleVersion, MultiChainUserOpDto, MultiChainValidationModuleConfig } from "./utils/Types"; -import { BaseValidationModule } from "./BaseValidationModule"; -import { WalletClientSigner } from "@alchemy/aa-core"; +import { Hex, concat, encodeAbiParameters, encodeFunctionData, getAddress, keccak256, pad, parseAbi, parseAbiParameters, toBytes, toHex } from "viem"; +import { UserOperationStruct, SmartAccountSigner } from "@alchemy/aa-core"; +import { MerkleTree } from "merkletreejs"; +import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants.js"; +import { + ModuleVersion, + MultiChainUserOpDto, + MultiChainValidationModuleConfig, + MultiChainValidationModuleConfigConstructorProps, +} from "./utils/Types.js"; +import { BaseValidationModule } from "./BaseValidationModule.js"; +import { getUserOpHash } from "./utils/Helper.js"; +import { convertSigner, Logger } from "@biconomy/common"; + export class MultiChainValidationModule extends BaseValidationModule { - signer!: Signer | WalletClientSigner; + signer: SmartAccountSigner; - moduleAddress!: string; + moduleAddress!: Hex; version: ModuleVersion = "V1_0_0"; - private constructor(moduleConfig: MultiChainValidationModuleConfig) { + private constructor(moduleConfig: MultiChainValidationModuleConfigConstructorProps) { super(moduleConfig); + this.signer = moduleConfig.signer; } public static async create(moduleConfig: MultiChainValidationModuleConfig): Promise { - const instance = new MultiChainValidationModule(moduleConfig); + // Signer needs to be initialised here before defaultValidationModule is set + const { signer } = await convertSigner(moduleConfig.signer, true); + const configForConstructor: MultiChainValidationModuleConfigConstructorProps = { ...moduleConfig, signer }; + + // TODO: (Joe) stop doing things in a 'create' call after the instance has been created + const instance = new MultiChainValidationModule(configForConstructor); if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; + const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } @@ -33,59 +44,59 @@ export class MultiChainValidationModule extends BaseValidationModule { instance.moduleAddress = DEFAULT_MULTICHAIN_MODULE; // Note: in this case Version remains the default one } - instance.signer = moduleConfig.signer; return instance; } - getAddress(): string { + getAddress(): Hex { return this.moduleAddress; } - async getSigner(): Promise { + async getSigner(): Promise { return Promise.resolve(this.signer); } - async getDummySignature(): Promise { - const moduleAddress = ethers.utils.getAddress(this.getAddress()); + async getDummySignature(): Promise { + const moduleAddress = getAddress(this.getAddress()); const dynamicPart = moduleAddress.substring(2).padEnd(40, "0"); return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000`; } // Note: other modules may need additional attributes to build init data - async getInitData(): Promise { + async getInitData(): Promise { const ecdsaOwnerAddress = await this.signer.getAddress(); - const moduleRegistryAbi = "function initForSmartAccount(address owner)"; - const ecdsaModuleRegistryInterface = new ethers.utils.Interface([moduleRegistryAbi]); - const ecdsaOwnershipInitData = ecdsaModuleRegistryInterface.encodeFunctionData("initForSmartAccount", [ecdsaOwnerAddress]); + const moduleRegistryParsedAbi = parseAbi(["function initForSmartAccount(address owner)"]); + const ecdsaOwnershipInitData = encodeFunctionData({ + abi: moduleRegistryParsedAbi, + functionName: "initForSmartAccount", + args: [ecdsaOwnerAddress], + }); return ecdsaOwnershipInitData; } - async signUserOpHash(userOpHash: string): Promise { - const sig = await this.signer.signMessage(arrayify(userOpHash)); - - Logger.log("ecdsa signature ", sig); - + async signUserOpHash(userOpHash: string): Promise { + const sig = await this.signer.signMessage(toBytes(userOpHash)); return sig; } /** * Signs a message using the appropriate method based on the type of signer. * - * @param {Bytes | string | Uint8Array} message - The message to be signed. + * @param {Uint8Array | string} message - The message to be signed. * @returns {Promise} A promise resolving to the signature or error message. * @throws {Error} If the signer type is invalid or unsupported. */ - async signMessage(message: Bytes | string | Uint8Array): Promise { - if (this.signer instanceof WalletClientSigner) { - return super.signMessageWalletClientSigner(message as Uint8Array | string, this.signer as WalletClientSigner); - } else if (this.signer instanceof Signer) { - return super.signMessageSigner(message as Bytes | string, this.signer as Signer); - } else { - throw new Error("Invalid signer type"); + async signMessage(message: Uint8Array | string): Promise { + let signature = await this.signer.signMessage(message); + + const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27; + signature = signature.slice(0, -2) + correctV.toString(16); } + return signature; } - async signUserOps(multiChainUserOps: MultiChainUserOpDto[]): Promise { + async signUserOps(multiChainUserOps: MultiChainUserOpDto[]): Promise { try { const leaves: string[] = []; @@ -93,10 +104,10 @@ export class MultiChainValidationModule extends BaseValidationModule { for (const multiChainOp of multiChainUserOps) { const validUntil = multiChainOp.validUntil ?? 0; const validAfter = multiChainOp.validAfter ?? 0; - const leaf = hexConcat([ - hexZeroPad(ethers.utils.hexlify(validUntil), 6), - hexZeroPad(ethers.utils.hexlify(validAfter), 6), - hexZeroPad(getUserOpHash(multiChainOp.userOp, this.entryPointAddress, multiChainOp.chainId), 32), + const leaf = concat([ + pad(toHex(validUntil), { size: 6 }), + pad(toHex(validAfter), { size: 6 }), + pad(getUserOpHash(multiChainOp.userOp, this.entryPointAddress, multiChainOp.chainId), { size: 32 }), ]); leaves.push(keccak256(leaf)); @@ -105,7 +116,7 @@ export class MultiChainValidationModule extends BaseValidationModule { // Create a new Merkle tree using the leaves array const merkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true }); - let multichainSignature = await this.signer.signMessage(arrayify(merkleTree.getHexRoot())); + let multichainSignature = await this.signer.signMessage(toBytes(merkleTree.getHexRoot())); const potentiallyIncorrectV = parseInt(multichainSignature.slice(-2), 16); if (![27, 28].includes(potentiallyIncorrectV)) { @@ -114,38 +125,37 @@ export class MultiChainValidationModule extends BaseValidationModule { } // Create an array to store updated userOps - const updatedUserOps: UserOperation[] = []; - - Logger.log("merkle root ", merkleTree.getHexRoot()); + const updatedUserOps: UserOperationStruct[] = []; for (let i = 0; i < leaves.length; i++) { const merkleProof = merkleTree.getHexProof(leaves[i]); - Logger.log("merkle proof ", merkleProof); - const validUntil = multiChainUserOps[i].validUntil ?? 0; const validAfter = multiChainUserOps[i].validAfter ?? 0; // Create the moduleSignature - const moduleSignature = defaultAbiCoder.encode( - ["uint48", "uint48", "bytes32", "bytes32[]", "bytes"], - [validUntil, validAfter, merkleTree.getHexRoot(), merkleProof, multichainSignature], - ); + const moduleSignature = encodeAbiParameters(parseAbiParameters(["uint48, uint48, bytes32, bytes32[], bytes"]), [ + validUntil, + validAfter, + merkleTree.getHexRoot() as Hex, + merkleProof as Hex[], + multichainSignature as Hex, + ]); // Note: Because accountV2 does not directly call this method. hence we need to add validation module address to the signature - const signatureWithModuleAddress = defaultAbiCoder.encode(["bytes", "address"], [moduleSignature, this.getAddress()]); + const signatureWithModuleAddress = encodeAbiParameters(parseAbiParameters(["bytes, address"]), [moduleSignature, this.getAddress()]); // Update userOp with the final signature - const updatedUserOp: UserOperation = { - ...(multiChainUserOps[i].userOp as UserOperation), - signature: signatureWithModuleAddress, + const updatedUserOp: UserOperationStruct = { + ...(multiChainUserOps[i].userOp as UserOperationStruct), + signature: signatureWithModuleAddress as `0x${string}`, }; updatedUserOps.push(updatedUserOp); } return updatedUserOps; } catch (error) { - Logger.error("Error in signing multi chain userops", error); + Logger.error("Error in signing multi chain userops"); throw new Error(JSON.stringify(error)); } } diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index 23e0b8770..f8e49d859 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -1,8 +1,6 @@ -import { Signer, ethers } from "ethers"; -import MerkleTree from "merkletreejs"; -import { NODE_CLIENT_URL, Logger } from "@biconomy/common"; -import { hexConcat, arrayify, hexZeroPad, defaultAbiCoder, Bytes } from "ethers/lib/utils"; -import { keccak256 } from "ethereumjs-util"; +import { Hex, concat, encodeAbiParameters, encodeFunctionData, keccak256, pad, parseAbi, parseAbiParameters, toBytes, toHex } from "viem"; +import { MerkleTree } from "merkletreejs"; +import { SmartAccountSigner } from "@alchemy/aa-core"; import { SessionKeyManagerModuleConfig, ModuleVersion, @@ -10,27 +8,24 @@ import { ModuleInfo, CreateSessionDataResponse, StorageType, -} from "./utils/Types"; -import NodeClient from "@biconomy/node-client"; -import INodeClient from "@biconomy/node-client"; -import { SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "./utils/Constants"; -import { generateRandomHex } from "./utils/Uid"; -import { BaseValidationModule } from "./BaseValidationModule"; -import { SessionLocalStorage } from "./session-storage/SessionLocalStorage"; -import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage"; +} from "./utils/Types.js"; +import { SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "./utils/Constants.js"; +import { generateRandomHex } from "./utils/Uid.js"; +import { BaseValidationModule } from "./BaseValidationModule.js"; +import { SessionLocalStorage } from "./session-storage/SessionLocalStorage.js"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage.js"; +import { convertSigner } from "@biconomy/common"; export class SessionKeyManagerModule extends BaseValidationModule { version: ModuleVersion = "V1_0_0"; - moduleAddress!: string; - - nodeClient!: INodeClient; + moduleAddress!: Hex; merkleTree!: MerkleTree; sessionStorageClient!: ISessionStorage; - readonly mockEcdsaSessionKeySig: string = + readonly mockEcdsaSessionKeySig: Hex = "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; /** @@ -48,12 +43,13 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns A Promise that resolves to an instance of SessionKeyManagerModule */ public static async create(moduleConfig: SessionKeyManagerModuleConfig): Promise { + // TODO: (Joe) stop doing things in a 'create' call after the instance has been created const instance = new SessionKeyManagerModule(moduleConfig); if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress; } else if (moduleConfig.version) { - const moduleAddr = SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version]; + const moduleAddr = SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; if (!moduleAddr) { throw new Error(`Invalid version ${moduleConfig.version}`); } @@ -63,9 +59,6 @@ export class SessionKeyManagerModule extends BaseValidationModule { instance.moduleAddress = DEFAULT_SESSION_KEY_MANAGER_MODULE; // Note: in this case Version remains the default one } - instance.nodeClient = new NodeClient({ - txServiceUrl: moduleConfig.nodeClientUrl ?? NODE_CLIENT_URL, - }); if (moduleConfig.sessionStorageClient) { instance.sessionStorageClient = moduleConfig.sessionStorageClient; @@ -81,13 +74,13 @@ export class SessionKeyManagerModule extends BaseValidationModule { const existingSessionData = await instance.sessionStorageClient.getAllSessionData(); const existingSessionDataLeafs = existingSessionData.map((sessionData) => { - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionData.validAfter), 6), - hexZeroPad(sessionData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionData.validUntil), { size: 6 }), + pad(toHex(sessionData.validAfter), { size: 6 }), + pad(sessionData.sessionValidationModule, { size: 20 }), sessionData.sessionKeyData, ]); - return ethers.utils.keccak256(leafDataHex); + return keccak256(leafDataHex); }); instance.merkleTree = new MerkleTree(existingSessionDataLeafs, keccak256, { @@ -104,22 +97,23 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns The session data */ createSessionData = async (leavesData: CreateSessionDataParams[]): Promise => { - const sessionKeyManagerModuleABI = "function setMerkleRoot(bytes32 _merkleRoot)"; - const sessionKeyManagerModuleInterface = new ethers.utils.Interface([sessionKeyManagerModuleABI]); + const sessionKeyManagerModuleABI = parseAbi(["function setMerkleRoot(bytes32 _merkleRoot)"]); + const leavesToAdd: Buffer[] = []; const sessionIDInfo: string[] = []; for (const leafData of leavesData) { - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(leafData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(leafData.validAfter), 6), - hexZeroPad(leafData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(leafData.validUntil), { size: 6 }), + pad(toHex(leafData.validAfter), { size: 6 }), + pad(leafData.sessionValidationModule, { size: 20 }), leafData.sessionKeyData, ]); const generatedSessionId = leafData.preferredSessionId ?? generateRandomHex(); - leavesToAdd.push(ethers.utils.keccak256(leafDataHex) as unknown as Buffer); + // TODO: verify this, might not be buffer + leavesToAdd.push(keccak256(leafDataHex) as unknown as Buffer); sessionIDInfo.push(generatedSessionId); const sessionLeafNode = { @@ -142,7 +136,11 @@ export class SessionKeyManagerModule extends BaseValidationModule { this.merkleTree = newMerkleTree; - const setMerkleRootData = sessionKeyManagerModuleInterface.encodeFunctionData("setMerkleRoot", [this.merkleTree.getHexRoot()]); + const setMerkleRootData = encodeFunctionData({ + abi: sessionKeyManagerModuleABI, + functionName: "setMerkleRoot", + args: [this.merkleTree.getHexRoot() as Hex], + }); await this.sessionStorageClient.setMerkleRoot(this.merkleTree.getHexRoot()); return { @@ -157,48 +155,46 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @param sessionSigner The signer to be used to sign the user operation * @returns The signature of the user operation */ - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { + async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise { if (!(params && params.sessionSigner)) { throw new Error("Session signer is not provided."); } - const sessionSigner = params.sessionSigner; + const { signer: sessionSigner } = await convertSigner(params.sessionSigner); + // Use the sessionSigner to sign the user operation - const signature = await sessionSigner.signMessage(arrayify(userOpHash)); + const signature = await sessionSigner.signMessage(toBytes(userOpHash)); const sessionSignerData = await this.getLeafInfo(params); - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), - hexZeroPad(sessionSignerData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), sessionSignerData.sessionKeyData, ]); // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) - let paddedSignature = defaultAbiCoder.encode( - ["uint48", "uint48", "address", "bytes", "bytes32[]", "bytes"], - [ - sessionSignerData.validUntil, - sessionSignerData.validAfter, - sessionSignerData.sessionValidationModule, - sessionSignerData.sessionKeyData, - this.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer), - signature, - ], - ); + let paddedSignature: Hex = encodeAbiParameters(parseAbiParameters("uint48, uint48, address, bytes, bytes32[], bytes"), [ + sessionSignerData.validUntil, + sessionSignerData.validAfter, + sessionSignerData.sessionValidationModule, + sessionSignerData.sessionKeyData, + this.merkleTree.getHexProof(keccak256(leafDataHex)) as Hex[], + signature, + ]); if (params?.additionalSessionData) { paddedSignature += params.additionalSessionData; } - return paddedSignature; + return paddedSignature as Hex; } private async getLeafInfo(params: ModuleInfo): Promise { if (!(params && params.sessionSigner)) { throw new Error("Session signer is not provided."); } - const sessionSigner = params.sessionSigner; + const { signer: sessionSigner } = await convertSigner(params.sessionSigner); let sessionSignerData; if (params?.sessionID) { sessionSignerData = await this.sessionStorageClient.getSessionData({ @@ -237,14 +233,14 @@ export class SessionKeyManagerModule extends BaseValidationModule { /** * @returns SessionKeyManagerModule address */ - getAddress(): string { + getAddress(): Hex { return this.moduleAddress; } /** * @remarks This is the version of the module contract */ - async getSigner(): Promise { + async getSigner(): Promise { throw new Error("Method not implemented."); } @@ -252,37 +248,32 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @remarks This is the dummy signature for the module, used in buildUserOp for bundler estimation * @returns Dummy signature */ - async getDummySignature(params?: ModuleInfo): Promise { - Logger.log("moduleInfo ", params); + async getDummySignature(params?: ModuleInfo): Promise { if (!params) { throw new Error("Session signer is not provided."); } const sessionSignerData = await this.getLeafInfo(params); - const leafDataHex = hexConcat([ - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validUntil), 6), - hexZeroPad(ethers.utils.hexlify(sessionSignerData.validAfter), 6), - hexZeroPad(sessionSignerData.sessionValidationModule, 20), + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), sessionSignerData.sessionKeyData, ]); // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) - let paddedSignature = defaultAbiCoder.encode( - ["uint48", "uint48", "address", "bytes", "bytes32[]", "bytes"], - [ - sessionSignerData.validUntil, - sessionSignerData.validAfter, - sessionSignerData.sessionValidationModule, - sessionSignerData.sessionKeyData, - this.merkleTree.getHexProof(ethers.utils.keccak256(leafDataHex) as unknown as Buffer), - this.mockEcdsaSessionKeySig, - ], - ); - + let paddedSignature: Hex = encodeAbiParameters(parseAbiParameters("uint48, uint48, address, bytes, bytes32[], bytes"), [ + sessionSignerData.validUntil, + sessionSignerData.validAfter, + sessionSignerData.sessionValidationModule, + sessionSignerData.sessionKeyData, + this.merkleTree.getHexProof(keccak256(leafDataHex)) as Hex[], + this.mockEcdsaSessionKeySig, + ]); if (params?.additionalSessionData) { paddedSignature += params.additionalSessionData; } - const dummySig = ethers.utils.defaultAbiCoder.encode(["bytes", "address"], [paddedSignature, this.getAddress()]); + const dummySig = encodeAbiParameters(parseAbiParameters(["bytes, address"]), [paddedSignature as Hex, this.getAddress()]); return dummySig; } @@ -290,15 +281,14 @@ export class SessionKeyManagerModule extends BaseValidationModule { /** * @remarks Other modules may need additional attributes to build init data */ - async getInitData(): Promise { + async getInitData(): Promise { throw new Error("Method not implemented."); } /** * @remarks This Module dont have knowledge of signer. So, this method is not implemented */ - async signMessage(message: Bytes | string): Promise { - Logger.log("message", message); + async signMessage(_message: Uint8Array | string): Promise { throw new Error("Method not implemented."); } } diff --git a/packages/modules/src/index.ts b/packages/modules/src/index.ts index f51916377..ca954778b 100644 --- a/packages/modules/src/index.ts +++ b/packages/modules/src/index.ts @@ -1,11 +1,26 @@ -export * from "./utils/Types"; -export * from "./utils/Constants"; -export * from "./interfaces/IValidationModule"; -export * from "./interfaces/ISessionValidationModule"; -export * from "./BaseValidationModule"; -export * from "./ECDSAOwnershipValidationModule"; -export * from "./MultichainValidationModule"; -export * from "./SessionKeyManagerModule"; -export * from "./BatchedSessionRouterModule"; -export * from "./session-validation-modules/ERC20SessionValidationModule"; +export * from "./utils/Types.js"; +export * from "./utils/Constants.js"; +export * from "./interfaces/IValidationModule.js"; +export * from "./interfaces/ISessionValidationModule.js"; +export * from "./BaseValidationModule.js"; +export * from "./ECDSAOwnershipValidationModule.js"; +export * from "./MultichainValidationModule.js"; +export * from "./SessionKeyManagerModule.js"; +export * from "./BatchedSessionRouterModule.js"; +export * from "./session-validation-modules/ERC20SessionValidationModule.js"; + +import { + BatchedSessionRouterModule, + ECDSAOwnershipValidationModule, + MultiChainValidationModule, + SessionKeyManagerModule, + ERC20SessionValidationModule, +} from "./index.js"; + +export const createBatchedSessionRouterModule = BatchedSessionRouterModule.create; +export const createMultiChainValidationModule = MultiChainValidationModule.create; +export const createECDSAOwnershipValidationModule = ECDSAOwnershipValidationModule.create; +export const createSessionKeyManagerModule = SessionKeyManagerModule.create; +export const createERC20SessionValidationModule = ERC20SessionValidationModule.create; + // export * from './PasskeyValidationModule' diff --git a/packages/modules/src/interfaces/ISessionStorage.ts b/packages/modules/src/interfaces/ISessionStorage.ts index eb1fb1078..da2f8e13e 100644 --- a/packages/modules/src/interfaces/ISessionStorage.ts +++ b/packages/modules/src/interfaces/ISessionStorage.ts @@ -1,21 +1,23 @@ -import { Wallet, Signer } from "ethers"; +import { Hex } from "viem"; +import { SmartAccountSigner } from "@alchemy/aa-core"; +import { SignerData } from "../utils/Types"; export type SessionStatus = "PENDING" | "ACTIVE" | "INACTIVE" | "EXPIRED"; export type SessionLeafNode = { validUntil: number; validAfter: number; - sessionValidationModule: string; - sessionKeyData: string; - sessionPublicKey: string; + sessionValidationModule: Hex; + sessionKeyData: Hex; + sessionPublicKey: Hex; sessionID?: string; status: SessionStatus; }; export type SessionSearchParam = { sessionID?: string; - sessionPublicKey?: string; - sessionValidationModule?: string; + sessionPublicKey?: Hex; + sessionValidationModule?: Hex; status?: SessionStatus; }; @@ -49,19 +51,19 @@ export interface ISessionStorage { * If no signer object is passed, it'll create a random signer and add it to the session storage * @param signer Optional signer to be added to the session storage */ - addSigner(_signer?: Wallet): Promise; + addSigner(_signer?: SignerData): Promise; /** * Fetch a signer from the session storage * @param signerPublicKey Public key of the signer to be fetched */ - getSignerByKey(_signerPublicKey: string): Promise; + getSignerByKey(_signerPublicKey: string): Promise; /** * Fetch a signer from the session storage based on the session search param * @param param SessionSearchParam to be used to fetch the signer */ - getSignerBySession(_param: SessionSearchParam): Promise; + getSignerBySession(_param: SessionSearchParam): Promise; /** * Fetch all the session leaf nodes from the session storage based on the session search param. diff --git a/packages/modules/src/interfaces/IValidationModule.ts b/packages/modules/src/interfaces/IValidationModule.ts index 4b8269674..ee3da28a9 100644 --- a/packages/modules/src/interfaces/IValidationModule.ts +++ b/packages/modules/src/interfaces/IValidationModule.ts @@ -1,12 +1,11 @@ -import { WalletClientSigner } from "@alchemy/aa-core"; -import { Signer } from "ethers"; -import { Bytes } from "ethers/lib/utils"; +import { SmartAccountSigner } from "@alchemy/aa-core"; +import { Hex } from "viem"; export interface IValidationModule { - getAddress(): string; - getInitData(): Promise; - getSigner(): Promise; - signUserOpHash(_userOpHash: string): Promise; - signMessage(_message: Bytes | string): Promise; - getDummySignature(): Promise; + getAddress(): Hex; + getInitData(): Promise; + getSigner(): Promise; + signUserOpHash(_userOpHash: string): Promise; + signMessage(_message: string | Uint8Array): Promise; + getDummySignature(): Promise; } diff --git a/packages/modules/src/session-storage/SessionLocalStorage.ts b/packages/modules/src/session-storage/SessionLocalStorage.ts index 3f9ada1c4..28f3133a6 100644 --- a/packages/modules/src/session-storage/SessionLocalStorage.ts +++ b/packages/modules/src/session-storage/SessionLocalStorage.ts @@ -1,5 +1,9 @@ -import { Wallet, Signer } from "ethers"; -import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage"; +import { Hex, createWalletClient, http, toHex } from "viem"; +import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage.js"; +import { mainnet } from "viem/chains"; +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; +import { SignerData } from "../utils/Types"; export class SessionLocalStorage implements ISessionStorage { private smartAccountAddress: string; @@ -19,11 +23,13 @@ export class SessionLocalStorage implements ISessionStorage { } private getSessionStore(): any { + // @ts-ignore: LocalStorage is not available in node const data = localStorage.getItem(this.getStorageKey("sessions")); return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] }; } private getSignerStore(): any { + // @ts-ignore: LocalStorage is not available in node const data = localStorage.getItem(this.getStorageKey("signers")); return data ? JSON.parse(data) : {}; } @@ -38,9 +44,10 @@ export class SessionLocalStorage implements ISessionStorage { async addSessionData(leaf: SessionLeafNode): Promise { const data = this.getSessionStore(); - leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule); - leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey); + leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule) as Hex; + leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey) as Hex; data.leafNodes.push(leaf); + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } @@ -90,39 +97,62 @@ export class SessionLocalStorage implements ISessionStorage { } session.status = status; + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } async clearPendingSessions(): Promise { const data = this.getSessionStore(); data.leafNodes = data.leafNodes.filter((s: SessionLeafNode) => s.status !== "PENDING"); + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); } - async addSigner(signer?: Wallet): Promise { + async addSigner(signerData: SignerData): Promise { const signers = this.getSignerStore(); - if (!signer) { - signer = Wallet.createRandom(); + let signer: SignerData; + if (!signerData) { + const pkey = generatePrivateKey(); + signer = { + pvKey: pkey, + pbKey: privateKeyToAccount(pkey).publicKey, + }; + } else { + signer = signerData; } - signers[this.toLowercaseAddress(signer.publicKey)] = { - privateKey: signer.privateKey, - publicKey: signer.publicKey, - }; + const accountSigner = privateKeyToAccount(toHex(signer.pvKey)); + const client = createWalletClient({ + account: accountSigner, + chain: signerData.chainId, + transport: http(), + }); + const walletClientSigner = new WalletClientSigner( + client, + "json-rpc", // signerType + ); + signers[this.toLowercaseAddress(accountSigner.address)] = signerData; + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)); - return signer; + return walletClientSigner; } - async getSignerByKey(sessionPublicKey: string): Promise { + async getSignerByKey(sessionPublicKey: string): Promise { const signers = this.getSignerStore(); const signerData = signers[this.toLowercaseAddress(sessionPublicKey)]; if (!signerData) { throw new Error("Signer not found."); } - const signer = new Wallet(signerData.privateKey); + const account = privateKeyToAccount(signerData.privateKey); + const client = createWalletClient({ + account, + chain: mainnet, + transport: http(), + }); + const signer = new WalletClientSigner(client, "viem"); return signer; } - async getSignerBySession(param: SessionSearchParam): Promise { + async getSignerBySession(param: SessionSearchParam): Promise { const session = await this.getSessionData(param); return this.getSignerByKey(session.sessionPublicKey); } @@ -142,6 +172,7 @@ export class SessionLocalStorage implements ISessionStorage { setMerkleRoot(merkleRoot: string): Promise { const data = this.getSessionStore(); data.merkleRoot = merkleRoot; + // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); return Promise.resolve(); } diff --git a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts index 4a9f416ee..131746a38 100644 --- a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts +++ b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts @@ -1,6 +1,6 @@ -import { defaultAbiCoder } from "ethers/lib/utils"; -import { ISessionValidationModule } from "../interfaces/ISessionValidationModule"; +import { ISessionValidationModule } from "../interfaces/ISessionValidationModule.js"; import { ERC20SessionKeyData, SessionValidationModuleConfig } from "../utils/Types"; +import { encodeAbiParameters, parseAbiParameters } from "viem"; /** * Session validation module for ERC20 token transfers. @@ -37,10 +37,12 @@ export class ERC20SessionValidationModule implements ISessionValidationModule { this._validateSessionKeyData(sessionData); - const sessionKeyData = defaultAbiCoder.encode( - ["address", "address", "address", "uint256"], - [sessionData.sessionKey, sessionData.token, sessionData.recipient, sessionData.maxAmount], - ); + const sessionKeyData = encodeAbiParameters(parseAbiParameters("address, address, address, uint256"), [ + sessionData.sessionKey, + sessionData.token, + sessionData.recipient, + sessionData.maxAmount, + ]); return sessionKeyData; } diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts index cab7efbef..407e374d0 100644 --- a/packages/modules/src/utils/Constants.ts +++ b/packages/modules/src/utils/Constants.ts @@ -1,4 +1,4 @@ -import { ModuleVersion } from "./Types"; +import { ModuleVersion } from "./Types.js"; export const DEFAULT_MODULE_VERSION: ModuleVersion = "V1_0_0"; diff --git a/packages/modules/src/utils/Helper.ts b/packages/modules/src/utils/Helper.ts new file mode 100644 index 000000000..0754a9f30 --- /dev/null +++ b/packages/modules/src/utils/Helper.ts @@ -0,0 +1,41 @@ +import { UserOperationStruct } from "@alchemy/aa-core"; +import { Hex, encodeAbiParameters, keccak256, parseAbiParameters } from "viem"; + +function packUserOp(op: Partial, forSignature = true): string { + if (!op.initCode || !op.callData || !op.paymasterAndData) throw new Error("Missing userOp properties"); + if (forSignature) { + return encodeAbiParameters(parseAbiParameters("address, uint256, bytes32, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32"), [ + op.sender as Hex, + BigInt(op.nonce as Hex), + keccak256(op.initCode as Hex), + keccak256(op.callData as Hex), + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + keccak256(op.paymasterAndData as Hex), + ]); + } else { + // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) + return encodeAbiParameters(parseAbiParameters("address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes, bytes"), [ + op.sender as Hex, + BigInt(op.nonce as Hex), + op.initCode as Hex, + op.callData as Hex, + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + op.paymasterAndData as Hex, + op.signature as Hex, + ]); + } +} + +export const getUserOpHash = (userOp: Partial, entryPointAddress: Hex, chainId: number): Hex => { + const userOpHash = keccak256(packUserOp(userOp, true) as Hex); + const enc = encodeAbiParameters(parseAbiParameters("bytes32, address, uint256"), [userOpHash, entryPointAddress, BigInt(chainId)]); + return keccak256(enc); +}; diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index 267de2d3a..b4b96a2c7 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,23 +1,28 @@ -import { ChainId, UserOperation } from "@biconomy/core-types"; -import { Signer } from "ethers"; +import { Chain, Hex } from "viem"; +import { UserOperationStruct, SmartAccountSigner } from "@alchemy/aa-core"; import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; -import { ISessionStorage } from "../interfaces/ISessionStorage"; -import { WalletClientSigner } from "@alchemy/aa-core"; - +import { ISessionStorage } from "../interfaces/ISessionStorage.js"; +import { SupportedSigner } from "@biconomy/common"; export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' export interface BaseValidationModuleConfig { - entryPointAddress?: string; + entryPointAddress?: Hex; } export interface ECDSAOwnershipValidationModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string; + moduleAddress?: Hex; version?: ModuleVersion; - signer: Signer | WalletClientSigner; + signer: SupportedSigner; +} + +export interface ECDSAOwnershipValidationModuleConfigConstructorProps extends BaseValidationModuleConfig { + moduleAddress?: Hex; + version?: ModuleVersion; + signer: SmartAccountSigner; } export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string; + moduleAddress?: Hex; version?: ModuleVersion; nodeClientUrl?: string; smartAccountAddress: string; @@ -26,19 +31,15 @@ export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfi } export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string; + moduleAddress?: Hex; version?: ModuleVersion; sessionKeyManagerModule?: SessionKeyManagerModule; // could be BaseValidationModule - sessionManagerModuleAddress?: string; + sessionManagerModuleAddress?: Hex; nodeClientUrl?: string; smartAccountAddress: string; storageType?: StorageType; - - // sessionSigner?: Signer - // sessionPubKey?: string - // nodeClientUrl?: string } export enum StorageType { @@ -47,8 +48,8 @@ export enum StorageType { export type SessionParams = { sessionID?: string; - sessionSigner: Signer; - sessionValidationModule?: string; + sessionSigner: SupportedSigner; + sessionValidationModule?: Hex; additionalSessionData?: string; }; @@ -56,8 +57,8 @@ export type ModuleInfo = { // Could be a full object of below params and that way it can be an array too! // sessionParams?: SessionParams[] // where SessionParams is below four sessionID?: string; - sessionSigner?: Signer; - sessionValidationModule?: string; + sessionSigner?: SupportedSigner; + sessionValidationModule?: Hex; additionalSessionData?: string; batchSessionParams?: SessionParams[]; }; @@ -68,6 +69,12 @@ export interface SendUserOpParams extends ModuleInfo { export type SimulationType = "validation" | "validation_and_execution"; +export type SignerData = { + pbKey: string; + pvKey: `0x${string}`; + chainId?: Chain; +}; + export type CreateSessionDataResponse = { data: string; sessionIDInfo: Array; @@ -76,33 +83,38 @@ export type CreateSessionDataResponse = { export interface CreateSessionDataParams { validUntil: number; validAfter: number; - sessionValidationModule: string; - sessionPublicKey: string; - sessionKeyData: string; + sessionValidationModule: Hex; + sessionPublicKey: Hex; + sessionKeyData: Hex; preferredSessionId?: string; } export interface MultiChainValidationModuleConfig extends BaseValidationModuleConfig { - moduleAddress?: string; + moduleAddress?: Hex; + version?: ModuleVersion; + signer: SupportedSigner; +} +export interface MultiChainValidationModuleConfigConstructorProps extends BaseValidationModuleConfig { + moduleAddress?: Hex; version?: ModuleVersion; - signer: Signer | WalletClientSigner; + signer: SmartAccountSigner; } export type MultiChainUserOpDto = { validUntil?: number; validAfter?: number; - chainId: ChainId; - userOp: Partial; + chainId: number; + userOp: Partial; }; export interface BaseSessionKeyData { - sessionKey: string; + sessionKey: Hex; } export interface ERC20SessionKeyData extends BaseSessionKeyData { - token: string; - recipient: string; - maxAmount: string; + token: Hex; + recipient: Hex; + maxAmount: bigint; } export interface SessionValidationModuleConfig { diff --git a/packages/modules/tests/modules.spec.ts b/packages/modules/tests/modules.spec.ts new file mode 100644 index 000000000..9785b2d2d --- /dev/null +++ b/packages/modules/tests/modules.spec.ts @@ -0,0 +1,45 @@ +import { TestData } from "../../../tests"; +import { createSmartAccountClient } from "@biconomy/account"; +import { createECDSAOwnershipValidationModule, createMultiChainValidationModule } from "../src"; + +describe("Account Tests", () => { + let ganache: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-unit-tests + [ganache] = testDataPerChain; + }); + + it("should create a MultiChainValidationModule from an ethers signer using convertSigner", async () => { + const { + bundlerUrl, + whale: { ethersSigner: signer }, + } = ganache; + + const defaultValidationModule = await createMultiChainValidationModule({ signer }); + // Should not require a signer or chainId + const smartAccount = await createSmartAccountClient({ bundlerUrl, defaultValidationModule }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + // expect the relevant module to be set + expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); + }); + + it("should create a ECDSAOwnershipValidationModule from a viem signer using convertSigner", async () => { + const { + bundlerUrl, + whale: { viemWallet: signer }, + } = ganache; + + const defaultValidationModule = await createECDSAOwnershipValidationModule({ signer }); + // Should not require a signer or chainId + const smartAccount = await createSmartAccountClient({ + bundlerUrl, + defaultValidationModule, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + // expect the relevant module to be set + expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); + }); +}); diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts new file mode 100644 index 000000000..5871102f1 --- /dev/null +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -0,0 +1,92 @@ +import { PaymasterMode } from "@biconomy/paymaster"; +import { TestData } from "../../../tests"; +import { createSmartAccountClient } from "../../account/src/index"; +import { Hex, encodeFunctionData, parseAbi } from "viem"; +import { DEFAULT_MULTICHAIN_MODULE, MultiChainValidationModule } from "@biconomy/modules"; + +describe("Account with MultiChainValidation Module Tests", () => { + let mumbai: TestData; + let baseSepolia: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [mumbai, baseSepolia] = testDataPerChain; + }); + + it("Should mint an NFT gasless on baseSepolia and mumbai", async () => { + const { + whale: { alchemyWalletClientSigner: signerMumbai, publicAddress: recipientForBothChains }, + biconomyPaymasterApiKey: biconomyPaymasterApiKeyMumbai, + bundlerUrl: bundlerUrlMumbai, + chainId: chainIdMumbai, + } = mumbai; + + const { + whale: { alchemyWalletClientSigner: signerBase }, + biconomyPaymasterApiKey: biconomyPaymasterApiKeyBase, + bundlerUrl: bundlerUrlBase, + chainId: chainIdBase, + } = baseSepolia; + + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + + const multiChainModule = await MultiChainValidationModule.create({ + signer: signerMumbai, + moduleAddress: DEFAULT_MULTICHAIN_MODULE, + }); + + const [polygonAccount, baseAccount] = await Promise.all([ + createSmartAccountClient({ + chainId: chainIdMumbai, + signer: signerMumbai, + bundlerUrl: bundlerUrlMumbai, + defaultValidationModule: multiChainModule, + activeValidationModule: multiChainModule, + biconomyPaymasterApiKey: biconomyPaymasterApiKeyMumbai, + }), + createSmartAccountClient({ + chainId: chainIdBase, + signer: signerBase, + bundlerUrl: bundlerUrlBase, + defaultValidationModule: multiChainModule, + activeValidationModule: multiChainModule, + biconomyPaymasterApiKey: biconomyPaymasterApiKeyBase, + }), + ]); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address owner) view returns (uint balance)"]), + functionName: "safeMint", + args: [recipientForBothChains], + }); + + const transaction = { + to: nftAddress, + data: encodedCall, + }; + + const [partialUserOp1, partialUserOp2] = await Promise.all([ + baseAccount.buildUserOp([transaction], { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }), + polygonAccount.buildUserOp([transaction], { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }), + ]); + + expect(partialUserOp1.paymasterAndData).not.toBe("0x"); + expect(partialUserOp2.paymasterAndData).not.toBe("0x"); + + // Sign the user ops using multiChainModule + const returnedOps = await multiChainModule.signUserOps([ + { userOp: partialUserOp1, chainId: chainIdBase }, + { userOp: partialUserOp2, chainId: chainIdMumbai }, + ]); + + // Send the signed user ops on both chains + const userOpResponse1 = await baseAccount.sendSignedUserOp(returnedOps[0] as any); + const userOpResponse2 = await polygonAccount.sendSignedUserOp(returnedOps[1] as any); + + console.log(userOpResponse1.userOpHash, "MULTICHAIN BASE USER OP HASH"); + console.log(userOpResponse2.userOpHash, "MULTICHAIN POLYGON USER OP HASH"); + + expect(userOpResponse1.userOpHash).toBeTruthy(); + expect(userOpResponse2.userOpHash).toBeTruthy(); + }, 30000); +}); diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts new file mode 100644 index 000000000..87b139cf0 --- /dev/null +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -0,0 +1,154 @@ +import { DEFAULT_SESSION_KEY_MANAGER_MODULE, createSessionKeyManagerModule } from "@biconomy/modules"; +import { SessionFileStorage } from "./utils/customSession"; +import { WalletClientSigner, createSmartAccountClient } from "../../account/src/index"; +import { Hex, encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "viem"; +import { TestData } from "../../../tests"; +import { checkBalance } from "../../../tests/utils"; +import { PaymasterMode } from "@biconomy/paymaster"; + +describe("Account Tests", () => { + let mumbai: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [mumbai] = testDataPerChain; + }); + + const sessionFileStorage: SessionFileStorage = new SessionFileStorage(DEFAULT_SESSION_KEY_MANAGER_MODULE); + + it("Should send a user op using Session Validation Module", async () => { + let sessionSigner: WalletClientSigner; + + const { + whale: { + account: { address: sessionKeyEOA }, + privateKey: pvKey, + }, + minnow: { publicAddress: recipient }, + publicClient, + chainId, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + try { + sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); + } catch (error) { + sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey }); + } + + expect(sessionSigner).toBeTruthy(); + + // Create smart account + let smartAccount = await createSmartAccountClient({ + chainId, + signer: sessionSigner, + bundlerUrl, + biconomyPaymasterApiKey, + index: 1, // Increasing index to not conflict with other test cases and use a new smart account + }); + + // Create session module + const sessionModule = await createSessionKeyManagerModule({ + moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, + smartAccountAddress: await smartAccount.getAddress(), + sessionStorageClient: sessionFileStorage, + }); + + // Set enabled call on session + const sessionKeyData = encodeAbiParameters( + [{ type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }], + [ + sessionKeyEOA, + "0xdA5289fCAAF71d52a80A254da614a192b693e977", // erc20 token address + recipient, // receiver address + parseUnits("10", 6), + ], + ); + + const erc20ModuleAddr = "0x000000D50C68705bd6897B2d17c7de32FB519fDA"; + + const sessionTxData = await sessionModule.createSessionData([ + { + validUntil: 0, + validAfter: 0, + sessionValidationModule: erc20ModuleAddr, + sessionPublicKey: sessionKeyEOA, + sessionKeyData: sessionKeyData, + }, + ]); + + const setSessionAllowedTrx = { + to: DEFAULT_SESSION_KEY_MANAGER_MODULE, + data: sessionTxData.data, + }; + + const txArray: any = []; + + // Check if module is enabled + + const isEnabled = await smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); + if (!isEnabled) { + const enableModuleTrx = await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); + txArray.push(enableModuleTrx); + txArray.push(setSessionAllowedTrx); + } else { + console.log("MODULE ALREADY ENABLED"); + txArray.push(setSessionAllowedTrx); + } + + const userOp = await smartAccount.buildUserOp(txArray); + + const userOpResponse1 = await smartAccount.sendUserOp(userOp); + const transactionDetails = await userOpResponse1.wait(); + console.log("Tx Hash: ", transactionDetails.receipt.transactionHash); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function transfer(address _to, uint256 _value)"]), + functionName: "transfer", + args: [recipient, parseUnits("0.01", 6)], + }); + + const transferTx = { + to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", //erc20 token address + data: encodedCall, + }; + + smartAccount = smartAccount.setActiveValidationModule(sessionModule); + + const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAccountAddress()); + + const transferUserOp = await smartAccount.buildUserOp([transferTx], { + params: { + sessionSigner: sessionSigner, + sessionValidationModule: erc20ModuleAddr.toLowerCase() as Hex, + }, + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + }, + }); + + expect(transferUserOp.paymasterAndData).toBeDefined(); + expect(transferUserOp.paymasterAndData).not.toBeNull(); + expect(transferUserOp.paymasterAndData).not.toBe("0x"); + + const userOpResponse2 = await smartAccount.sendTransaction(transferTx, { + params: { + sessionSigner: sessionSigner, + sessionValidationModule: erc20ModuleAddr.toLowerCase() as Hex, + }, + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + }, + }); + + expect(userOpResponse2.userOpHash).toBeTruthy(); + expect(userOpResponse2.userOpHash).not.toBeNull(); + + const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAccountAddress()); + + expect(maticBalanceAfter).toEqual(maticBalanceBefore); + + console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); + }, 60000); +}); diff --git a/packages/modules/tests/utils/customSession.ts b/packages/modules/tests/utils/customSession.ts new file mode 100644 index 000000000..002bcd2a5 --- /dev/null +++ b/packages/modules/tests/utils/customSession.ts @@ -0,0 +1,218 @@ +import * as fs from "fs"; +import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; +import { SignerData } from "@biconomy/modules/src"; +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; +import { Hex, createWalletClient, http } from "viem"; +import { polygonMumbai } from "viem/chains"; +import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "@biconomy/modules/src/interfaces/ISessionStorage.js"; +import { Logger } from "@biconomy/common"; + +export class SessionFileStorage implements ISessionStorage { + private smartAccountAddress: string; + + constructor(smartAccountAddress: string) { + this.smartAccountAddress = smartAccountAddress.toLowerCase(); + } + + // This method reads data from the file and returns it in the JSON format + private async readDataFromFile(type: "sessions" | "signers"): Promise { + return new Promise((resolve) => { + fs.readFile(this.getStorageFilePath(type), "utf8", (err, data) => { + if (err) { + // Handle errors appropriately + resolve(undefined); + } else { + if (!data) { + resolve(null); + } else { + resolve(JSON.parse(data)); + } + // resolve(JSON.parse(data)); + } + }); + }); + } + + private getStorageFilePath(type: "sessions" | "signers"): string { + return `./packages/modules/tests/utils/sessionStorageData/${this.smartAccountAddress}_${type}.json`; + } + + private async writeDataToFile(data: any, type: "sessions" | "signers"): Promise { + return new Promise((resolve, reject) => { + const filePath = this.getStorageFilePath(type); + fs.writeFile(filePath, JSON.stringify(data), "utf8", (err) => { + if (err) { + // Handle errors appropriately + reject(err); + } else { + resolve(); + } + }); + }); + } + + private validateSearchParam(param: SessionSearchParam): void { + if (param.sessionID) { + return; + } else if (!param.sessionID && param.sessionPublicKey && param.sessionValidationModule) { + return; + } else { + throw new Error("Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address."); + } + } + + // Session store is in the form of mekrleRoot and leafnodes, each object will have a root and an array of leafNodes. + private async getSessionStore(): Promise { + // eslint-disable-next-line no-useless-catch + try { + const data = await this.readDataFromFile("sessions"); + return data || { merkleRoot: "", leafNodes: [] }; + } catch (error) { + // Handle errors appropriately + throw error; + } + } + + private async getSignerStore(): Promise { + // eslint-disable-next-line no-useless-catch + try { + const data = await this.readDataFromFile("signers"); + return data || {}; + } catch (error) { + // Handle errors appropriately + throw error; + } + } + + private getStorageKey(type: "sessions" | "signers"): string { + return `${this.smartAccountAddress}_${type}`; + } + + private toLowercaseAddress(address: string): Hex { + return address.toLowerCase() as Hex; + } + + async getSessionData(): Promise { + const sessions = (await this.getSessionStore()).leafNodes; + Logger.log("Got sessions", sessions); + const session = sessions[0]; + + if (!session) { + throw new Error("Session not found."); + } + return session; + } + + async addSessionData(leaf: SessionLeafNode): Promise { + Logger.log("Add session Data", leaf); + const data = await this.getSessionStore(); + leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule); + leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey); + data.leafNodes.push(leaf); + await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type + } + + async updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise { + this.validateSearchParam(param); + + const data = await this.getSessionStore(); + const session = data.leafNodes.find((s: SessionLeafNode) => { + if (param.sessionID) { + return s.sessionID === param.sessionID; + } else if (param.sessionPublicKey && param.sessionValidationModule) { + return ( + s.sessionPublicKey === this.toLowercaseAddress(param.sessionPublicKey) && + s.sessionValidationModule === this.toLowercaseAddress(param.sessionValidationModule) + ); + } else { + return undefined; + } + }); + + if (!session) { + throw new Error("Session not found."); + } + + session.status = status; + await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type + } + + async clearPendingSessions(): Promise { + const data = await this.getSessionStore(); + data.leafNodes = data.leafNodes.filter((s: SessionLeafNode) => s.status !== "PENDING"); + await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type + } + + async addSigner(signerData: SignerData): Promise { + const signers = await this.getSignerStore(); + let signer: SignerData; + if (!signerData) { + const pkey = generatePrivateKey(); + signer = { + pvKey: pkey, + pbKey: privateKeyToAccount(pkey).publicKey, + }; + } else { + signer = signerData; + } + const accountSigner = privateKeyToAccount(signer.pvKey); + const client = createWalletClient({ + account: accountSigner, + chain: signerData.chainId, + transport: http(polygonMumbai.rpcUrls.default.http[0]), + }); + const walletClientSigner: SmartAccountSigner = new WalletClientSigner( + client, + "json-rpc", // signerType + ); + signers[this.toLowercaseAddress(accountSigner.address)] = { + pvKey: signer.pvKey, + pbKey: signer.pbKey, + }; + await this.writeDataToFile(signers, "signers"); // Use 'signers' as the type + return walletClientSigner; + } + + async getSignerByKey(sessionPublicKey: string): Promise { + const signers = await this.getSignerStore(); + Logger.log("Got signers", signers); + + const signerData: SignerData = signers[this.toLowercaseAddress(sessionPublicKey)]; + if (!signerData) { + throw new Error("Signer not found."); + } + Logger.log(signerData.pvKey, "PVKEY"); + + const signer = privateKeyToAccount(signerData.pvKey); + const walletClient = createWalletClient({ + account: signer, + transport: http(polygonMumbai.rpcUrls.default.http[0]), + }); + return new WalletClientSigner(walletClient, "json-rpc"); + } + + async getSignerBySession(): Promise { + const session = await this.getSessionData(); + Logger.log("got session", session); + const walletClientSinger = await this.getSignerByKey(session.sessionPublicKey); + return walletClientSinger; + } + + async getAllSessionData(param?: SessionSearchParam): Promise { + const sessions = (await this.getSessionStore()).leafNodes; + if (!param || !param.status) { + return sessions; + } + return sessions.filter((s: SessionLeafNode) => s.status === param.status); + } + + async getMerkleRoot(): Promise { + return (await this.getSessionStore()).merkleRoot; + } + + async setMerkleRoot(merkleRoot: string): Promise { + const data = await this.getSessionStore(); + data.merkleRoot = merkleRoot; + await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type + } +} diff --git a/packages/modules/tests/utils/sessionStorageData/.gitkeep b/packages/modules/tests/utils/sessionStorageData/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/modules/tsconfig.build.json b/packages/modules/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/modules/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/modules/tsconfig.json b/packages/modules/tsconfig.json index 0228bfe7a..adc19ded0 100644 --- a/packages/modules/tsconfig.json +++ b/packages/modules/tsconfig.json @@ -1,11 +1,13 @@ { - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true, - }, - "include": ["src", "src/**/*.json"] -} \ No newline at end of file + "extends": "../../tsconfig.settings.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "baseUrl": "src", + "resolveJsonModule": true, + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"], + }, + "include": ["src", "src/**/*.json"] +} diff --git a/packages/node-client/CHANGELOG.md b/packages/node-client/CHANGELOG.md deleted file mode 100644 index f5196ec43..000000000 --- a/packages/node-client/CHANGELOG.md +++ /dev/null @@ -1,73 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 3.1.3 (2023-12-28) - -VERSION Bump Only. - -## 3.1.2 (2023-12-28) - -VERSION Bump Only. - -## 3.1.1 (2023-11-09) -Version Bump Only. - - - - -## 3.1.0 (2023-09-20) -Version Bump Only. - -### Bug Fixes - -* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -* smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) - - - - - - - - - - -## 3.0.0 (2023-08-28) - - - - -## 3.0.0-alpha.0 (2023-07-12) - - - - - -## 2.0.1 (2023-05-18) - - -### Features - -* skipBundlerGasEstimation flag for gas ([487f3ae](https://github.com/bcnmy/biconomy-client-sdk/commit/487f3aefe21b2dd4fd46e18bef7168eae3c1ecc1)) - - - -## 2.0.0 (2023-04-07) - - -### Bug Fixes - -* backend contract address ([e81188d](https://github.com/bcnmy/biconomy-client-sdk/commit/e81188d454eb42ab581078d218d86571d724fa2d)) -* smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) - - - -## 1.0.0 (2023-01-03) - - -### Bug Fixes - -* smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) diff --git a/packages/node-client/README.md b/packages/node-client/README.md deleted file mode 100644 index b14934051..000000000 --- a/packages/node-client/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# `@biconomy/node-client` - -# Biconomy SDK Node Client - -Node Client is the api client package that communicate with [Biconomy SDK](https://github.com/bcnmy/biconomy-client-sdk) backend node to fetch needed smart contract wallet data i.e supported chains list, transaction history, balances e.t.c - -## Installation - -`yarn add @biconomy/node-client` - -OR - -`npm install @biconomy/node-client ` - -## Usage - -``` -// import package -import NodeClient from '@biconomy/node-client' - -// initialisation - -const nodeClient = new NodeClient({ txServiceUrl: 'https://sdk-backend.staging.biconomy.io/v1' }) -``` - -# Fetch Supported Chains List - -``` -const supportedChainsList = await nodeClient.getAllSupportedChains() -console.log('supportedChainsList ', supportedChainsList) -``` - -# Fetch Transactions By Address - -``` -const chainId = 80001 -const address = '0xabc......' -const trxHistory = await nodeClient.getTransactionByAddress(chainId, address) -console.log('trxHistory ', trxHistory) -``` - -# Get Transaction By Hash - -``` -const txHash = '0x........' -const trxDetail = await nodeClient.getTransactionByHash(txHash) -console.log('trxDetail ', trxDetail) -``` - -# Get Smart Contract Wallet Balances - -``` -import { BalancesDto } from '@biconomy/node-client' - -import { ChainId } from '@biconomy/core-types' - -const address = '0xabc......' - -const balanceParams: BalancesDto = - { - // if no chainId is supplied, SDK will automatically pick active one that - // is being supplied for initialization - - chainId: ChainId.MAINNET, // chainId of your choice - address: address, - // If empty string you receive balances of all tokens watched by Indexer - // you can only whitelist token addresses that are listed in token respository - // specified above ^ - tokenAddresses: [], - }; - -const balFromSdk = await nodeClient.getAllTokenBalances(balanceParams); -console.info("balFromSdk ", balFromSdk); - -const usdBalFromSdk = await nodeClient.getTotalBalanceInUsd(balanceParams); -console.info("usdBalFromSdk ", usdBalFromSdk) -``` diff --git a/packages/node-client/package.json b/packages/node-client/package.json deleted file mode 100644 index df7bfc0d9..000000000 --- a/packages/node-client/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "@biconomy/node-client", - "version": "3.1.3", - "description": "Node Client that comminucates with indexer service to fetch necessary details for the Smart Account", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", - "keywords": [ - "Ethereum", - "Gnosis", - "Biconomy", - "Backend Node" - ], - "scripts": { - "unbuild": "rimraf dist", - "build": "rimraf dist && tsc", - "format": "prettier --write \"{src,tests,e2e}/**/*.ts\"", - "lint": "tslint -p tsconfig.json", - "test": "jest tests/**/*.spec.ts --runInBand", - "test:file": "jest --config=../../jest.config.js --runInBand", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", - "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'" - }, - "author": "Biconomy (https://biconomy.io)", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "devDependencies": { - "@biconomy/core-types": "^3.1.0", - "@nomiclabs/hardhat-ethers": "^2.1.0", - "@nomiclabs/hardhat-waffle": "^2.0.3", - "@nomiclabs/hardhat-web3": "^2.0.0", - "@types/chai": "^4.3.0", - "@types/chai-as-promised": "^7.1.5", - "@types/node": "^17.0.23", - "@types/node-fetch": "^2.6.2", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "chai": "^4.3.6", - "chai-as-promised": "^7.1.1", - "eslint": "^8.12.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "hardhat": "^2.9.2", - "husky": "^7.0.4", - "lint-staged": "^12.3.7", - "prettier": "^2.6.2", - "rimraf": "^3.0.2", - "ts-generator": "^0.1.1", - "ts-node": "^10.7.0", - "typescript": "^4.6.3" - }, - "lint-staged": { - "src/**/!(*test).ts": [ - "yarn lint", - "prettier --write" - ] - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@biconomy/core-types": "^3.1.3", - "@ethersproject/abstract-signer": "^5.6.0", - "@nomiclabs/hardhat-ethers": "^2.1.0", - "node-fetch": "^2.6.6" - } -} diff --git a/packages/node-client/src/INodeClient.ts b/packages/node-client/src/INodeClient.ts deleted file mode 100644 index a36c8bc37..000000000 --- a/packages/node-client/src/INodeClient.ts +++ /dev/null @@ -1,93 +0,0 @@ -// import { FeeRefund, FeeRefundData, MetaTransactionData } from '@biconomy/core-types' -import { - SmartAccountByOwnerDto, - TokenByChainIdAndAddressDto, - TokenPriceResponse, - SupportedChainsResponse, - IndividualChainResponse, - SupportedTokensResponse, - IndividualTokenResponse, - SmartAccountsResponse, - BalancesResponse, - BalancesDto, - UsdBalanceResponse, - SCWTransactionResponse, - WhiteListSignatureResponse, -} from "./types/NodeClientTypes"; - -interface INodeClient { - // 1. Chain Apis - - /** - * Get all supported chains by backend node configuration - */ - getAllSupportedChains(): Promise; - - /** - * Get ChainConfig for requested chainId - * @param chainId - */ - getChainById(_chainId: number): Promise; - - // 2. Token APIs - - /** - * Get prices for configured tokens from backend node API - * @param chainId - */ - getTokenPricesByChainId(_chainId: number): Promise; - - /** - * Get all supported tokens - */ - getAllTokens(): Promise; - - /** - * Get TokenInfo for requested chainId - * @param chainId - */ - getTokensByChainId(_chainId: number): Promise; - - /** - * Get TokenInfo by address and chainId - * @param tokenByChainIdAndAddressDto - */ - getTokenByChainIdAndAddress(_tokenByChainIdAndAddressDto: TokenByChainIdAndAddressDto): Promise; - - // 3. Smart Account Endpoints - - /** - * Get information of all smart accounts deployed for particular eoa owner for any version and index - * @param smartAccountByOwnerDto - */ - getSmartAccountsByOwner(_smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise; - - // 4. Balances Endpoints - - /** - * Get token balances for requested chainId and address - * address could be EOA or SmartAccount - * @param balancesDto - */ - getAllTokenBalances(_balancesDto: BalancesDto): Promise; - - /** - * - * @param balancesDto Get total USD balance - */ - getTotalBalanceInUsd(_balancesDto: BalancesDto): Promise; - - /** - * - * @param origin - * About: Whitelist domain by passing the origin domain - * Purpose: Returns the signature used in init - */ - whitelistUrl(_origin: string): Promise; - - getTransactionByHash(_txHash: string): Promise; - - getTransactionByAddress(_chainId: number, _address: string): Promise; -} - -export default INodeClient; diff --git a/packages/node-client/src/NodeClient.ts b/packages/node-client/src/NodeClient.ts deleted file mode 100644 index a2df00662..000000000 --- a/packages/node-client/src/NodeClient.ts +++ /dev/null @@ -1,145 +0,0 @@ -import INodeClient from "./INodeClient"; -import { - SmartAccountByOwnerDto, - TokenByChainIdAndAddressDto, - TokenPriceResponse, - SupportedChainsResponse, - IndividualChainResponse, - SupportedTokensResponse, - IndividualTokenResponse, - SmartAccountsResponse, - BalancesDto, - BalancesResponse, - UsdBalanceResponse, - SCWTransactionResponse, - WhiteListSignatureResponse, -} from "./types/NodeClientTypes"; -import { getTxServiceBaseUrl } from "./utils"; -import { HttpMethod, sendRequest } from "./utils/HttpRequests"; -export interface NodeClientConfig { - /** txServiceUrl - Safe Transaction Service URL */ - txServiceUrl: string; -} - -class NodeClient implements INodeClient { - #txServiceBaseUrl: string; - - constructor({ txServiceUrl }: NodeClientConfig) { - this.#txServiceBaseUrl = getTxServiceBaseUrl(txServiceUrl); - } - - /** - * - * @returns The list of Network info - */ - async getAllSupportedChains(): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/chains/`, - method: HttpMethod.Get, - }); - } - - /** - * - * @param chainId - * @description thie function will return the chain detail base on supplied { chainId } - * @returns - */ - async getChainById(chainId: number): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/chains/${chainId}`, - method: HttpMethod.Get, - }); - } - - /** - * - * @param chainId - * @description this function will return token price base on supplied {chainId} - * @returns - */ - async getTokenPricesByChainId(chainId: number): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/chains/chainId/${chainId}/price`, - method: HttpMethod.Get, - }); - } - - async getAllTokens(): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/tokens/`, - method: HttpMethod.Get, - }); - } - - async getTokensByChainId(chainId: number): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/tokens/chainId/${chainId}`, - method: HttpMethod.Get, - }); - } - - async getTokenByChainIdAndAddress(tokenByChainIdAndAddressDto: TokenByChainIdAndAddressDto): Promise { - const { chainId, tokenAddress } = tokenByChainIdAndAddressDto; - return sendRequest({ - url: `${this.#txServiceBaseUrl}/tokens/chainId/${chainId}/address/${tokenAddress}`, - method: HttpMethod.Get, - }); - } - - async getSmartAccountsByOwner(smartAccountByOwnerDto: SmartAccountByOwnerDto): Promise { - const { chainId, owner, index } = smartAccountByOwnerDto; - return sendRequest({ - url: `${this.#txServiceBaseUrl}/smart-accounts/chainId/${chainId}/owner/${owner}/index/${index}`, - method: HttpMethod.Get, - }); - } - - async getAllTokenBalances(balancesDto: BalancesDto): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/smart-accounts/balances`, - method: HttpMethod.Post, - body: balancesDto, - }); - } - - async getTotalBalanceInUsd(balancesDto: BalancesDto): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/smart-accounts/balance`, - method: HttpMethod.Post, - body: balancesDto, - }); - } - - /** - * - * @param origin - * @description this function will return the signature for your domain - * @returns - */ - async whitelistUrl(origin: string): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/whitelist`, - method: HttpMethod.Post, - body: { - origin, - }, - }); - } - - getTransactionByAddress(chainId: number, address: string): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/transactions/chainId/${chainId}/address/${address}`, - method: HttpMethod.Get, - }); - } - - getTransactionByHash(txHash: string): Promise { - return sendRequest({ - url: `${this.#txServiceBaseUrl}/transactions/txHash/${txHash}`, - method: HttpMethod.Get, - }); - } -} - -export default NodeClient; diff --git a/packages/node-client/src/index.ts b/packages/node-client/src/index.ts deleted file mode 100644 index 708fd7c83..000000000 --- a/packages/node-client/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import NodeClient, { NodeClientConfig } from "./NodeClient"; - -export * from "./types/NodeClientTypes"; -export default NodeClient; -export { NodeClientConfig }; diff --git a/packages/node-client/src/types/NodeClientTypes.ts b/packages/node-client/src/types/NodeClientTypes.ts deleted file mode 100644 index c94937936..000000000 --- a/packages/node-client/src/types/NodeClientTypes.ts +++ /dev/null @@ -1,225 +0,0 @@ -import { ChainId, SmartAccountVersion } from "@biconomy/core-types"; -export type SmartAccountInfoResponse = { - readonly name: string; - readonly version: string; - readonly api_version: string; - readonly secure: boolean; - readonly settings: { - readonly AWS_CONFIGURED: boolean; - readonly AWS_S3_CUSTOM_DOMAIN: string; - readonly ETHEREUM_NODE_URL: string; - readonly ETHEREUM_TRACING_NODE_URL: string; - readonly ETH_INTERNAL_TXS_BLOCK_PROCESS_LIMIT: number; - readonly ETH_INTERNAL_NO_FILTER: boolean; - readonly ETH_REORG_BLOCKS: number; - readonly TOKENS_LOGO_BASE_URI: string; - readonly TOKENS_LOGO_EXTENSION: string; - }; -}; - -export type SCWTransactionResponse = { - symbol: string; - tokenAddress: string; - scwAddress: string; - txHash: string; - blockNumber: number; - payment: number; - gasLimit: number; - gasUsage: number; - gasPrice: number; - chainId: number; - fromAddress: string; - toAddress: string; - amount: number; - type: string; - txStatus: string; - createdAt: number; - updatedAt: number; -}; - -export type BalancesDto = { - chainId: number; - address: string; - tokenAddresses: string[]; -}; - -export type WhiteListSignatureResponse = { - code: number; - message: string; - data: string; -}; - -export type SmartAccountByOwnerDto = { - chainId: number; - owner: string; - index: number; -}; - -export type TokenByChainIdAndAddressDto = { - chainId: number; - tokenAddress: string; -}; - -export type ContractDetails = { - version: SmartAccountVersion; - - address: string; - - abi: string; -}; - -export type ChainConfig = { - chainId: ChainId; - name: string; - symbol: string; - isL2: boolean; - isMainnet: boolean; - description: string; - blockExplorerUriTemplate: BlockExplorerConfig; - ensRegistryAddress: string; - walletFactory: ContractDetails[]; - multiSend: ContractDetails[]; - multiSendCall: ContractDetails[]; - wallet: ContractDetails[]; // base wallet - entryPoint: ContractDetails[]; //should make this address var - fallBackHandler: ContractDetails[]; //should make this address var - fallBackGasTankAddress: string; - relayerURL: string; - providerUrl: string; - indexerUrl: string; - backendNodeUrl: string; - createdAt: Date; - updatedAt: Date; - token: TokenInfo; -}; - -export type MasterCopyResponse = { - address: string; - version: string; - deployer: string; - deployedBlockNumber: number; - lastIndexedBlockNumber: number; -}; - -export type SafeInfoResponse = { - readonly address: string; - readonly nonce: number; - readonly threshold: number; - readonly owners: string[]; - readonly masterCopy: string; - readonly modules: string[]; - readonly fallbackHandler: string; - readonly version: string; -}; - -export type BlockExplorerConfig = { - address: string; - txHash: string; - api: string; -}; - -export type TokenInfo = { - id: number; - name: string; - symbol: string; - blockChain: number; - ercType?: string; - decimals: number; - logoUri: string; - address: string; - isNativeToken: boolean; - isEnabled: boolean; - cmcId: number; //Verify - price: number; //Verify - createdAt: Date; - updatedAt: Date; -}; - -// Note: Applies for Account V1 -export type ISmartAccount = { - version: SmartAccountVersion; - smartAccountAddress: string; - isDeployed: boolean; - chainId: ChainId; - eoaAddress: string; - entryPointAddress: string; - handlerAddress: string; - index: number; - implementationAddress: string; - fallBackHandlerAddress: string; - owner: string; - factoryAddress: string; - createdAt: number; - updatedAt: number; -}; - -export type IBalances = { - contract_decimals: number; - contract_name: string; - contract_ticker_symbol: string; - contract_address: string; - supports_erc: string | null; - logo_url: string | null; - last_transferred_at: string | null; - type: string; - balance: number; - balance_24h: number; - quote_rate: number; - quote_rate_24h: number; - nft_data: string | null; -}; - -export type SupportedChainsResponse = { - message: string; - code: number; - data: ChainConfig[]; -}; - -export type IndividualChainResponse = { - message: string; - code: number; - data: ChainConfig; -}; - -export type TokenPriceResponse = { - price: number; -}; - -export type SupportedTokensResponse = { - message: string; - code: number; - data: TokenInfo[]; -}; - -export type IndividualTokenResponse = { - message: string; - code: number; - data: TokenInfo; -}; -export type SmartAccountsResponse = { - message: string; - code: number; - data: ISmartAccount[]; -}; -export type BalancesResponse = { - message: string; - code: number; - data: IBalances[]; -}; - -export type UsdBalanceResponse = { - message: string; - code: number; - data: { - totalBalance: number; - }; -}; - -export type EstimateGasResponse = { - message: string; - code: number; - data: { - gas: number; - txBaseGas?: number; - }; -}; diff --git a/packages/node-client/src/utils/index.ts b/packages/node-client/src/utils/index.ts deleted file mode 100644 index 94b8829fe..000000000 --- a/packages/node-client/src/utils/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function getTxServiceBaseUrl(txServiceUrl: string): string { - return `${txServiceUrl}`; -} diff --git a/packages/node-client/tests/node-client.spec.ts b/packages/node-client/tests/node-client.spec.ts deleted file mode 100644 index 90c46ea23..000000000 --- a/packages/node-client/tests/node-client.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Signer as AbstractSigner } from "ethers"; -import { Web3Provider } from "@ethersproject/providers"; -import NodeClient from "../dist/src"; - -type EthereumInstance = { - chainId?: number; - provider?: Web3Provider; - signer?: AbstractSigner; -}; - -describe("Node Client tests", function () { - let nodeClient: NodeClient; - let gasUsed: number; - - beforeAll(async () => { - nodeClient = new NodeClient({ txServiceUrl: "https://sdk-backend.staging.biconomy.io/v1" }); - }); - - describe("Gas Estimation Endpoints", () => { - it("Empty test to remove warning", () => {}); - }); -}); diff --git a/packages/node-client/tsconfig.json b/packages/node-client/tsconfig.json deleted file mode 100644 index c7ff8535e..000000000 --- a/packages/node-client/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src" - }, - "include": ["src"] -} diff --git a/packages/particle-auth/.esbuild.js b/packages/particle-auth/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/particle-auth/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/particle-auth/CHANGELOG.md b/packages/particle-auth/CHANGELOG.md index 706af8966..0b1ef187b 100644 --- a/packages/particle-auth/CHANGELOG.md +++ b/packages/particle-auth/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2023-12-28) + +VERSION Bump Only. + ## 3.1.3 (2023-12-28) VERSION Bump Only. diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index af925f88a..335ac30a2 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -1,9 +1,19 @@ { "name": "@biconomy/particle-auth", - "version": "3.1.3", + "version": "4.0.0", "description": "Particle auth for Biconomy SDK", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "keywords": [ "legos", "batching", @@ -12,7 +22,7 @@ "particle", "particle-auth" ], - "author": "livingrockrises ", + "author": "Biconomy", "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", "license": "MIT", "files": [ @@ -25,7 +35,16 @@ }, "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, @@ -39,5 +58,11 @@ "@particle-network/auth": "^1.2.1", "@particle-network/biconomy": "^1.0.0", "@particle-network/provider": "^1.2.0" + }, + "devDependencies": { + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/particle-auth/tsconfig.build.json b/packages/particle-auth/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/particle-auth/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/particle-auth/tsconfig.json b/packages/particle-auth/tsconfig.json index 3dc5293ed..cda17a184 100644 --- a/packages/particle-auth/tsconfig.json +++ b/packages/particle-auth/tsconfig.json @@ -5,7 +5,8 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "lib": ["es2020"], }, "include": ["src", "src/**/*.json"] } diff --git a/packages/paymaster/.esbuild.js b/packages/paymaster/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/paymaster/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/paymaster/CHANGELOG.md b/packages/paymaster/CHANGELOG.md index 27767c9bf..abbc2cae6 100644 --- a/packages/paymaster/CHANGELOG.md +++ b/packages/paymaster/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2023-07-02) + +Export createPaymaster alias for static Paymaster.create call + ## 3.1.3 (2023-12-28) VERSION Bump Only. @@ -13,52 +17,42 @@ VERSION Bump Only. ## 3.1.1 (2023-11-09) - ### Bug Fixes -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) - - +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) ## 3.1.0 (2023-09-20) -Version Bump Only. +Version Bump Only. ## 3.0.0 (2023-08-28) Modular SDK - consists stable version of below updates done in Alphas. - - ## 3.0.0-alpha.0 (2023-08-02) ### Features -* letting maxFee and maxPriority not be undefined([46b985c](https://github.com/bcnmy/biconomy-client-sdk/commit/46b985c75fd135f151c9ac4380a65438cccc6f39)) -* passing on paymasterAndData([ae267f1])(https://github.com/bcnmy/biconomy-client-sdk/commit/ae267f1a103f37856eb233a38db7063bfcc4cb45) -* handle undefined values([e53d4a7])(https://github.com/bcnmy/biconomy-client-sdk/commit/e53d4a78aded8c8802786173daf12b27d445d4a0) -* handling userOp null values([c89ac42])(https://github.com/bcnmy/biconomy-client-sdk/commit/c89ac42ae1d7fd985ef2396d925cc63ec5cf926b) -* using signature provided by userop([0c40641])(https://github.com/bcnmy/biconomy-client-sdk/commit/0c40641e4cd6133f7348bb3e3022f8ab78fe299b) - - +- letting maxFee and maxPriority not be undefined([46b985c](https://github.com/bcnmy/biconomy-client-sdk/commit/46b985c75fd135f151c9ac4380a65438cccc6f39)) +- passing on paymasterAndData([ae267f1])(https://github.com/bcnmy/biconomy-client-sdk/commit/ae267f1a103f37856eb233a38db7063bfcc4cb45) +- handle undefined values([e53d4a7])(https://github.com/bcnmy/biconomy-client-sdk/commit/e53d4a78aded8c8802786173daf12b27d445d4a0) +- handling userOp null values([c89ac42])(https://github.com/bcnmy/biconomy-client-sdk/commit/c89ac42ae1d7fd985ef2396d925cc63ec5cf926b) +- using signature provided by userop([0c40641])(https://github.com/bcnmy/biconomy-client-sdk/commit/0c40641e4cd6133f7348bb3e3022f8ab78fe299b) # 3.1.0-alpha.0 (2023-07-24) VERSION Bump Only. - ## 3.0.0-alpha.0 (2023-07-12) - ### Bug Fixes -* linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) -* linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) - +- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) +- linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) ### Features -* covert gas limits to numbers for making pm service call ([b1fe96f](https://github.com/bcnmy/biconomy-client-sdk/commit/b1fe96f7a312ceaf7aa689939b7c69718c710dd1)) -* get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -* update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -* using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) +- covert gas limits to numbers for making pm service call ([b1fe96f](https://github.com/bcnmy/biconomy-client-sdk/commit/b1fe96f7a312ceaf7aa689939b7c69718c710dd1)) +- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) diff --git a/packages/paymaster/Readme.md b/packages/paymaster/Readme.md index 8b91b80a7..562a790f6 100644 --- a/packages/paymaster/Readme.md +++ b/packages/paymaster/Readme.md @@ -22,11 +22,11 @@ yarn add @biconomy/paymaster ```typescript // This is how you create paymaster instance in your dapp's -import { IPaymaster, BiconomyPaymaster } from "@biconomy/paymaster"; +import { IPaymaster, createPaymaster } from "@biconomy/paymaster"; // Currently this package only exports Biconomy Paymaster which acts as a Hybrid paymaster for gas abstraction. You can sponsor user transactions but can also make users pay gas in supported ERC20 tokens. -const paymaster = new BiconomyPaymaster({ +const paymaster = await createPaymaster({ paymasterUrl: "", // you can get this value from biconomy dashboard. https://dashboard.biconomy.io }); ``` @@ -38,7 +38,7 @@ Following are the methods that can be called on paymaster instance ```typescript export interface IHybridPaymaster extends IPaymaster { getPaymasterAndData(userOp: Partial, paymasterServiceData?: T): Promise; - buildTokenApprovalTransaction(tokenPaymasterRequest: BiconomyTokenPaymasterRequest, provider: Provider): Promise; + buildTokenApprovalTransaction(tokenPaymasterRequest: BiconomyTokenPaymasterRequest): Promise; getPaymasterFeeQuotesOrData(userOp: Partial, paymasterServiceData: FeeQuotesOrDataDto): Promise; } ``` @@ -57,17 +57,17 @@ export interface IPaymaster { ### Below API methods can be used for Biconomy Hybrid paymaster -**getPaymasterAndData** +**[getPaymasterAndData](https://bcnmy.github.io/biconomy-client-sdk/classes/Paymaster.html#getPaymasterAndData)** This function accepts a **`Partial`** object that includes all properties of **`userOp`** except for the **`signature`** and **`paymasterAndData`** field. It returns **`paymasterAndData`** as part of the **`PaymasterAndDataResponse`** -**buildTokenApprovalTransaction** +**[buildTokenApprovalTransaction](https://bcnmy.github.io/biconomy-client-sdk/classes/Paymaster.html#buildTokenApprovalTransaction)** This function is specifically used for token paymaster sponsorship. The primary purpose of this function is to create an approve transaction for paymaster that gets batched with the rest of your transactions. Note: You don't need to call this function. It will automatically get called as part of the **`buildTokenPaymasterUserOp`** function call. -**getPaymasterFeeQuotesOrData** +**[getPaymasterFeeQuotesOrData](https://bcnmy.github.io/biconomy-client-sdk/classes/Paymaster.html#getPaymasterFeeQuotesOrData)** This function is used to fetch quote information or paymaster data based on provided userOperation and paymasterServiceData. If explicit mode is not provided it tries for sponsorship first and then falls back to serving fee quotes for supported/requested token/s diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index 2ffd27699..1348e71c1 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,9 +1,19 @@ { "name": "@biconomy/paymaster", - "version": "3.1.3", + "version": "4.0.0", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "keywords": [ "Ethereum", "Veriying Paymaster", @@ -15,15 +25,21 @@ ], "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json", - "test": "jest tests/**/*.spec.ts --runInBand", - "test:file": "jest --config=../../jest.config.js --runInBand", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", - "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'" + "test": "jest tests/**/*.spec.ts --runInBand" }, - "author": "talhamalik883 ", + "author": "Biconomy", "repository": { "type": "git", "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" @@ -37,10 +53,14 @@ "access": "public" }, "dependencies": { - "@biconomy/common": "^3.1.3", - "@biconomy/core-types": "^3.1.3", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "ethers": "^5.7.0" + "@alchemy/aa-core": "3.0.0-alpha.4", + "@biconomy/common": "4.0.0", + "viem": "^2.7.3" + }, + "devDependencies": { + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index 1734e23e6..bfe04699c 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -1,7 +1,5 @@ -import { Logger, sendRequest, HttpMethod, getTimestampInSeconds } from "@biconomy/common"; -import { resolveProperties } from "@ethersproject/properties"; -import { UserOperation, Transaction } from "@biconomy/core-types"; -import { Provider } from "@ethersproject/abstract-provider"; +import { encodeFunctionData, parseAbi } from "viem"; +import type { BigNumberish, UserOperationStruct } from "@alchemy/aa-core"; import { PaymasterFeeQuote, PaymasterConfig, @@ -12,10 +10,13 @@ import { BiconomyTokenPaymasterRequest, PaymasterMode, PaymasterAndDataResponse, -} from "./utils/Types"; -import { BigNumberish, BigNumber, ethers } from "ethers"; -import { ERC20_ABI } from "./constants"; -import { IHybridPaymaster } from "./interfaces/IHybridPaymaster"; + Transaction, + Hex, +} from "./utils/Types.js"; +import { IHybridPaymaster } from "./interfaces/IHybridPaymaster.js"; +import { MAX_UINT256, ERC20_ABI, ADDRESS_ZERO } from "./utils/Constants.js"; +import { sendRequest, HttpMethod, Logger } from "@biconomy/common"; +import { getTimestampInSeconds } from "./utils/Helpers.js"; const defaultPaymasterConfig: PaymasterConfig = { paymasterUrl: "", @@ -40,29 +41,27 @@ export class BiconomyPaymaster implements IHybridPaymaster): Promise> { - userOp = await resolveProperties(userOp); - if (userOp.nonce !== null && userOp.nonce !== undefined) { - userOp.nonce = BigNumber.from(userOp.nonce).toHexString(); - } - if (userOp.callGasLimit !== null && userOp.callGasLimit !== undefined) { - userOp.callGasLimit = BigNumber.from(userOp.callGasLimit).toString(); - } - if (userOp.verificationGasLimit !== null && userOp.verificationGasLimit !== undefined) { - userOp.verificationGasLimit = BigNumber.from(userOp.verificationGasLimit).toString(); - } - if (userOp.preVerificationGas !== null && userOp.preVerificationGas !== undefined) { - userOp.preVerificationGas = BigNumber.from(userOp.preVerificationGas).toString(); - } - if (userOp.maxFeePerGas !== null && userOp.maxFeePerGas !== undefined) { - userOp.maxFeePerGas = BigNumber.from(userOp.maxFeePerGas).toString(); - } - if (userOp.maxPriorityFeePerGas !== null && userOp.maxPriorityFeePerGas !== undefined) { - userOp.maxPriorityFeePerGas = BigNumber.from(userOp.maxPriorityFeePerGas).toString(); + private async prepareUserOperation(userOp: Partial): Promise> { + const userOperation = { ...userOp }; + try { + const keys1: (keyof UserOperationStruct)[] = ["nonce", "maxFeePerGas", "maxPriorityFeePerGas"]; + for (const key of keys1) { + if (userOperation[key] && userOperation[key] !== "0x") { + userOperation[key] = ("0x" + BigInt(userOp[key] as BigNumberish).toString(16)) as `0x${string}`; + } + } + const keys2: (keyof UserOperationStruct)[] = ["callGasLimit", "verificationGasLimit", "preVerificationGas"]; + for (const key of keys2) { + if (userOperation[key] && userOperation[key] !== "0x") { + userOperation[key] = BigInt(userOp[key] as BigNumberish).toString() as `0x${string}`; + } + } + } catch (error) { + throw `Failed to transform user operation: ${error}`; } - userOp.signature = userOp.signature || "0x"; - userOp.paymasterAndData = userOp.paymasterAndData || "0x"; - return userOp; + userOperation.signature = userOp.signature || "0x"; + userOperation.paymasterAndData = userOp.paymasterAndData || "0x"; + return userOperation; } /** @@ -71,34 +70,33 @@ export class BiconomyPaymaster implements IHybridPaymaster { + async buildTokenApprovalTransaction(tokenPaymasterRequest: BiconomyTokenPaymasterRequest): Promise { const feeTokenAddress: string = tokenPaymasterRequest.feeQuote.tokenAddress; - Logger.log("erc20 fee token address ", feeTokenAddress); const spender = tokenPaymasterRequest.spender; - Logger.log("spender address ", spender); // logging provider object isProvider - Logger.log("provider object passed - is provider", provider?._isProvider); + // Logger.log("provider object passed - is provider", provider?._isProvider); // TODO move below notes to separate method // Note: should also check in caller if the approval is already given, if yes return object with address or data 0 // Note: we would need userOp here to get the account/owner info to check allowance - let requiredApproval: BigNumberish = BigNumber.from(0).toString(); + let requiredApproval = BigInt(0); if (tokenPaymasterRequest.maxApproval && tokenPaymasterRequest.maxApproval == true) { - requiredApproval = ethers.constants.MaxUint256; + requiredApproval = BigInt(MAX_UINT256); } else { - requiredApproval = Math.ceil(tokenPaymasterRequest.feeQuote.maxGasFee * Math.pow(10, tokenPaymasterRequest.feeQuote.decimal)).toString(); + requiredApproval = BigInt(Math.ceil(tokenPaymasterRequest.feeQuote.maxGasFee * Math.pow(10, tokenPaymasterRequest.feeQuote.decimal))); } - Logger.log("required approval for erc20 token ", requiredApproval); - - const erc20Interface = new ethers.utils.Interface(JSON.stringify(ERC20_ABI)); - try { - const data = erc20Interface.encodeFunctionData("approve", [spender, requiredApproval]); + const parsedAbi = parseAbi(ERC20_ABI); + const data = encodeFunctionData({ + abi: parsedAbi, + functionName: "approve", + args: [spender, requiredApproval], + }); // TODO? // Note: For some tokens we may need to set allowance to 0 first so that would return batch of transactions and changes the return type to Transaction[] @@ -115,11 +113,10 @@ export class BiconomyPaymaster implements IHybridPaymaster, paymasterServiceData: FeeQuotesOrDataDto): Promise { - try { - userOp = await this.prepareUserOperation(userOp); - } catch (err) { - Logger.log("Error in prepareUserOperation ", err); - throw err; - } + async getPaymasterFeeQuotesOrData( + userOp: Partial, + paymasterServiceData: FeeQuotesOrDataDto, + ): Promise { + userOp = await this.prepareUserOperation(userOp); let mode = null; let expiryDuration = null; const calculateGasLimits = paymasterServiceData.calculateGasLimits ?? true; - Logger.log("calculateGasLimits is ", calculateGasLimits); let preferredToken = null; let feeTokensArray: string[] = []; // could make below null @@ -152,20 +146,16 @@ export class BiconomyPaymaster implements IHybridPaymaster = response.result.feeQuotes; - const paymasterAddress: string = response.result.paymasterAddress; + const paymasterAddress: Hex = response.result.paymasterAddress; // check all objects iterate and populate below calculation for all tokens return { feeQuotes: feeQuotesResponse, tokenPaymasterAddress: paymasterAddress }; } else if (response.result.mode == PaymasterMode.SPONSORED) { - const paymasterAndData: string = response.result.paymasterAndData; + const paymasterAndData: Hex = response.result.paymasterAndData; const preVerificationGas = response.result.preVerificationGas; const verificationGasLimit = response.result.verificationGasLimit; const callGasLimit = response.result.callGasLimit; @@ -226,7 +218,6 @@ export class BiconomyPaymaster implements IHybridPaymaster, + userOp: Partial, paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying ): Promise { - try { - userOp = await this.prepareUserOperation(userOp); - } catch (err) { - Logger.log("Error in prepareUserOperation ", err); - throw err; - } + userOp = await this.prepareUserOperation(userOp); if (paymasterServiceData?.mode === undefined) { throw new Error("mode is required in paymasterServiceData"); } const mode = paymasterServiceData.mode; - Logger.log("requested mode is ", mode); const calculateGasLimits = paymasterServiceData.calculateGasLimits ?? true; - Logger.log("calculateGasLimits is ", calculateGasLimits); let tokenInfo = null; let expiryDuration = null; @@ -286,7 +270,7 @@ export class BiconomyPaymaster implements IHybridPaymaster, - paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying + _userOp: Partial, + _paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying ): Promise { - Logger.log("userOp is ", userOp); - Logger.log("paymasterServiceData is ", paymasterServiceData); return "0x"; } + + public static async create(config: PaymasterConfig): Promise { + return new BiconomyPaymaster(config); + } } diff --git a/packages/paymaster/src/index.ts b/packages/paymaster/src/index.ts index fc7dd0950..4d78b3a0a 100644 --- a/packages/paymaster/src/index.ts +++ b/packages/paymaster/src/index.ts @@ -1,4 +1,8 @@ -export * from "./interfaces/IPaymaster"; -export * from "./interfaces/IHybridPaymaster"; -export * from "./utils/Types"; -export * from "./BiconomyPaymaster"; +import { BiconomyPaymaster } from "./BiconomyPaymaster.js"; +export * from "./interfaces/IPaymaster.js"; +export * from "./interfaces/IHybridPaymaster.js"; +export * from "./utils/Types.js"; +export * from "./BiconomyPaymaster.js"; + +export const Paymaster = BiconomyPaymaster; +export const createPaymaster = Paymaster.create; diff --git a/packages/paymaster/src/interfaces/IHybridPaymaster.ts b/packages/paymaster/src/interfaces/IHybridPaymaster.ts index aa1b51ebe..5b73bfd5e 100644 --- a/packages/paymaster/src/interfaces/IHybridPaymaster.ts +++ b/packages/paymaster/src/interfaces/IHybridPaymaster.ts @@ -1,12 +1,16 @@ -import { UserOperation } from "@biconomy/core-types"; -import { FeeQuotesOrDataResponse, BiconomyTokenPaymasterRequest, FeeQuotesOrDataDto, PaymasterAndDataResponse } from "../utils/Types"; -import { Transaction } from "@biconomy/core-types"; -import { Provider } from "@ethersproject/abstract-provider"; -import { IPaymaster } from "./IPaymaster"; +import { type UserOperationStruct } from "@alchemy/aa-core"; +import { + FeeQuotesOrDataResponse, + BiconomyTokenPaymasterRequest, + FeeQuotesOrDataDto, + PaymasterAndDataResponse, + type Transaction, +} from "../utils/Types.js"; +import { IPaymaster } from "./IPaymaster.js"; export interface IHybridPaymaster extends IPaymaster { - getPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; - getDummyPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; - buildTokenApprovalTransaction(_tokenPaymasterRequest: BiconomyTokenPaymasterRequest, _provider: Provider): Promise; - getPaymasterFeeQuotesOrData(_userOp: Partial, _paymasterServiceData: FeeQuotesOrDataDto): Promise; + getPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; + getDummyPaymasterAndData(_userOp: Partial, _paymasterServiceData?: T): Promise; + buildTokenApprovalTransaction(_tokenPaymasterRequest: BiconomyTokenPaymasterRequest): Promise; + getPaymasterFeeQuotesOrData(_userOp: Partial, _paymasterServiceData: FeeQuotesOrDataDto): Promise; } diff --git a/packages/paymaster/src/interfaces/IPaymaster.ts b/packages/paymaster/src/interfaces/IPaymaster.ts index 935392402..0d95801a5 100644 --- a/packages/paymaster/src/interfaces/IPaymaster.ts +++ b/packages/paymaster/src/interfaces/IPaymaster.ts @@ -1,8 +1,8 @@ -import { UserOperation } from "@biconomy/core-types"; +import { type UserOperationStruct } from "@alchemy/aa-core"; import { PaymasterAndDataResponse } from "../utils/Types"; export interface IPaymaster { // Implementing class may add extra parameter (for example paymasterServiceData with it's own type) in below function signature - getPaymasterAndData(_userOp: Partial): Promise; - getDummyPaymasterAndData(_userOp: Partial): Promise; + getPaymasterAndData(_userOp: Partial): Promise; + getDummyPaymasterAndData(_userOp: Partial): Promise; } diff --git a/packages/paymaster/src/constants.ts b/packages/paymaster/src/utils/Constants.ts similarity index 79% rename from packages/paymaster/src/constants.ts rename to packages/paymaster/src/utils/Constants.ts index d0efbcfe2..9a534ee8f 100644 --- a/packages/paymaster/src/constants.ts +++ b/packages/paymaster/src/utils/Constants.ts @@ -1,5 +1,6 @@ +export const MAX_UINT256 = "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; export const ENTRYPOINT_ADDRESS = "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"; - +export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000"; // export const ERC20_PAYMASTER_ADDRESS = '0xE9f6Ffc87cac92bc94f704AE017e85cB83DBe4EC' // likely to be same address on all chains export const ERC20_ABI = [ diff --git a/packages/paymaster/src/utils/Helpers.ts b/packages/paymaster/src/utils/Helpers.ts new file mode 100644 index 000000000..b6f5568d2 --- /dev/null +++ b/packages/paymaster/src/utils/Helpers.ts @@ -0,0 +1,7 @@ +/** + * @description this function will return current timestamp in seconds + * @returns Number + */ +export const getTimestampInSeconds = (): number => { + return Math.floor(Date.now() / 1000); +}; diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index 10f783ba5..d1dd7ec9f 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -1,4 +1,5 @@ -import { BigNumberish } from "ethers"; +import { BigNumberish } from "@alchemy/aa-core"; +export type Hex = `0x${string}`; export type PaymasterServiceErrorResponse = { jsonrpc: string; @@ -6,8 +7,6 @@ export type PaymasterServiceErrorResponse = { error: JsonRpcError; }; -// Generic -/* eslint-disable @typescript-eslint/no-explicit-any */ export type JsonRpcResponse = { jsonrpc: string; id: number; @@ -15,7 +14,6 @@ export type JsonRpcResponse = { error?: JsonRpcError; }; -/* eslint-disable @typescript-eslint/no-explicit-any */ export type JsonRpcError = { code: string; message: string; @@ -28,27 +26,34 @@ export type PaymasterConfig = { }; export type SponsorUserOperationDto = { + /** mode: sponsored or erc20 */ mode: PaymasterMode; + /** Always recommended, especially when using token paymaster */ calculateGasLimits?: boolean; + /** Expiry duration in seconds */ expiryDuration?: number; - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }; + /** Webhooks to be fired after user op is sent */ + webhookData?: Record; + /** Smart account meta data */ smartAccountInfo?: SmartAccountData; + /** the fee-paying token address */ feeTokenAddress?: string; }; export type FeeQuotesOrDataDto = { + /** mode: sponsored or erc20 */ mode?: PaymasterMode; + /** Expiry duration in seconds */ expiryDuration?: number; + /** Always recommended, especially when using token paymaster */ calculateGasLimits?: boolean; + /** List of tokens to be used for fee quotes, if ommitted fees for all supported will be returned */ tokenList?: string[]; + /** preferredToken: Can be ommitted to return all quotes */ preferredToken?: string; - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }; + /** Webhooks to be fired after user op is sent */ + webhookData?: Record; + /** Smart account meta data */ smartAccountInfo?: SmartAccountData; }; @@ -62,52 +67,69 @@ export type FeeTokenInfo = { }; export type SponsorpshipInfo = { - webhookData?: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; - }; + /** Webhooks to be fired after user op is sent */ + webhookData?: Record; + /** Smart account meta data */ smartAccountInfo: SmartAccountData; }; export type SmartAccountData = { + /** name: Name of the smart account */ name: string; + /** version: Version of the smart account */ version: string; }; export type PaymasterFeeQuote = { + /** symbol: Token symbol */ symbol: string; + /** tokenAddress: Token address */ tokenAddress: string; + /** decimal: Token decimal */ decimal: number; logoUrl?: string; + /** maxGasFee: in wei */ maxGasFee: number; + /** maxGasFee: in dollars */ maxGasFeeUSD?: number; usdPayment?: number; premiumPercentage: number; + /** validUntil: Unix timestamp */ validUntil?: number; }; export type BiconomyTokenPaymasterRequest = { + /** The feeQuote to be used for the transaction */ feeQuote: PaymasterFeeQuote; - spender: string; + /** The address of the spender. This is usually set to {@link FeeQuotesOrDataResponse.tokenPaymasterAddress} */ + spender: Hex; + /** Not recommended */ maxApproval?: boolean; }; export type FeeQuotesOrDataResponse = { + /** Array of results from the paymaster */ feeQuotes?: PaymasterFeeQuote[]; - tokenPaymasterAddress?: string; // spender - paymasterAndData?: string; + /** Normally set to the spender in the proceeding call to send the tx */ + tokenPaymasterAddress?: Hex; + /** Relevant Data returned from the paymaster */ + paymasterAndData?: Uint8Array | Hex; + /* Gas overhead of this UserOperation */ preVerificationGas?: BigNumberish; + /* Actual gas used by the validation of this UserOperation */ verificationGasLimit?: BigNumberish; + /* Value used by inner account execution */ callGasLimit?: BigNumberish; }; export type PaymasterAndDataResponse = { - paymasterAndData: string; - preVerificationGas?: BigNumberish; - verificationGasLimit?: BigNumberish; - callGasLimit?: BigNumberish; - maxPriorityFeePerGas?: BigNumberish; - maxFeePerGas?: BigNumberish; + paymasterAndData: Hex; + /* Gas overhead of this UserOperation */ + preVerificationGas: number; + /* Actual gas used by the validation of this UserOperation */ + verificationGasLimit: number; + /* Value used by inner account execution */ + callGasLimit: number; }; export enum PaymasterMode { @@ -125,9 +147,27 @@ export type EstimateUserOpGasResponse = { export type UserOpGasResponse = { paymasterAndData: string; + /* Gas overhead of this UserOperation */ preVerificationGas: string; maxPriorityFeePerGas: string; maxFeePerGas: string; + /* Actual gas used by the validation of this UserOperation */ verificationGasLimit: string; callGasLimit: string; }; + +type RequireAtLeastOne = Pick> & + { + [K in Keys]-?: Required> & Partial>>; + }[Keys]; + +type ValueOrData = RequireAtLeastOne< + { + value: BigNumberish | string; + data: string; + }, + "value" | "data" +>; +export type Transaction = { + to: string; +} & ValueOrData; diff --git a/packages/paymaster/tests/paymaster.e2e.spec.ts b/packages/paymaster/tests/paymaster.e2e.spec.ts new file mode 100644 index 000000000..3a634f491 --- /dev/null +++ b/packages/paymaster/tests/paymaster.e2e.spec.ts @@ -0,0 +1,19 @@ +import { TestData } from "../../../tests"; + +describe("Paymaster Unit Tests", () => { + let mumbai: TestData; + let baseSepolia: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [mumbai, baseSepolia] = testDataPerChain; + }); + + it("should have chain data for mumbai", () => { + expect(mumbai).toHaveProperty("chainId"); + }); + + it("should also have chain data for base", () => { + expect(baseSepolia).toHaveProperty("chainId"); + }); +}); diff --git a/packages/paymaster/tests/paymaster.spec.ts b/packages/paymaster/tests/paymaster.spec.ts index 54e655580..0b3508a6b 100644 --- a/packages/paymaster/tests/paymaster.spec.ts +++ b/packages/paymaster/tests/paymaster.spec.ts @@ -1,5 +1,14 @@ -describe("Paymaster Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); +import { TestData } from "../../../tests"; + +describe("Paymaster Unit Tests", () => { + let ganache: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-unit-tests + [ganache] = testDataPerChain; + }); + + it("should have chain data for mumbai", () => { + expect(ganache).toHaveProperty("chainId"); }); }); diff --git a/packages/paymaster/tsconfig.build.json b/packages/paymaster/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/paymaster/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/paymaster/tsconfig.json b/packages/paymaster/tsconfig.json index 3dc5293ed..d6269c535 100644 --- a/packages/paymaster/tsconfig.json +++ b/packages/paymaster/tsconfig.json @@ -5,7 +5,8 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "types": ["node"] }, "include": ["src", "src/**/*.json"] } diff --git a/packages/transak/.esbuild.js b/packages/transak/.esbuild.js new file mode 100644 index 000000000..ca355e346 --- /dev/null +++ b/packages/transak/.esbuild.js @@ -0,0 +1,58 @@ +const esbuildPluginTsc = require("esbuild-plugin-tsc"); +const esbuild = require("esbuild"); +const { dependencies, peerDependencies = {} } = require("./package.json"); +const { Generator } = require("npm-dts"); + +const COMMON_SETTINGS = { + entryPoints: ["src/index.ts"], + minify: true, + bundle: true, + plugins: [esbuildPluginTsc({ force: true })], +}; + +const ESM_SETTINGS = { + ...COMMON_SETTINGS, + sourcemap: true, + outfile: "dist/esm/index.js", + platform: "browser", + target: "esnext", + format: "esm", + mainFields: ["browser", "module", "main"], +}; +const buildForESM = async () => await esbuild.build(ESM_SETTINGS); + +const CJS_SETTINGS = { + ...COMMON_SETTINGS, + format: "cjs", + sourcemap: false, + outfile: "dist/cjs/index.js", + platform: "node", +}; + +const watchForCJS = async () => { + let ctx = await esbuild.context(CJS_SETTINGS); + await ctx.watch(); + await ctx.serve({ servedir: "dist/src" }); + console.log("watching..."); +}; + +const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); +const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); + +(async () => { + const buildType = process.argv.slice(2)[0]; + const shouldWatch = process.argv.slice(3)[0] === "--watch"; + if (!buildType) { + console.log("No build type provided"); + process.exit(1); + } + console.log(`Building for ${buildType}`); + if (buildType === "ESM") { + await buildForESM(); + } else if (buildType === "CJS") { + console.log("watching? " + shouldWatch); + await (shouldWatch ? watchForCJS : buildForCJS)(); + } else if (buildType === "TYP") { + await buildForTYP(); + } +})(); diff --git a/packages/transak/CHANGELOG.md b/packages/transak/CHANGELOG.md index ed5d38a5a..c71de7918 100644 --- a/packages/transak/CHANGELOG.md +++ b/packages/transak/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.0 (2023-12-28) + +VERSION Bump Only. + ## 3.1.3 (2023-12-28) VERSION Bump Only. diff --git a/packages/transak/package.json b/packages/transak/package.json index 4e523be85..018414ed1 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -1,9 +1,19 @@ { "name": "@biconomy/transak", - "version": "3.1.3", + "version": "4.0.0", "description": "transak for biconomy sdk", - "main": "./dist/src/index.js", - "typings": "./dist/src/index.d.ts", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "typings": "./dist/types/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "default": "./dist/cjs/index.js" + }, + "./package.json": "./package.json" + }, "keywords": [ "legos", "batching", @@ -11,7 +21,7 @@ "cross-chain", "transak" ], - "author": "livingrockrises ", + "author": "Biconomy", "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", "license": "MIT", "files": [ @@ -24,7 +34,16 @@ }, "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build": "rimraf dist && tsc", + "build:watch": "yarn build:tsc --watch", + "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", + "build": "yarn unbuild && yarn build:tsc", + "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", + "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", + "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, @@ -36,5 +55,11 @@ }, "dependencies": { "@transak/transak-sdk": "^1.2.3" + }, + "devDependencies": { + "@types/node": "^20.11.10", + "esbuild": "^0.19.11", + "esbuild-plugin-tsc": "^0.4.0", + "npm-dts": "^1.3.12" } } diff --git a/packages/transak/src/index.ts b/packages/transak/src/index.ts index 6792b304a..36f5dcfd9 100644 --- a/packages/transak/src/index.ts +++ b/packages/transak/src/index.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ // @ts-ignore import transakSDK from "@transak/transak-sdk"; -import { ITransakDto, environments } from "interface"; +import { ITransakDto, environments } from "./interface.js"; class TransakSDK { apiKey: string; diff --git a/packages/transak/tsconfig.build.json b/packages/transak/tsconfig.build.json new file mode 100644 index 000000000..4ac8b8026 --- /dev/null +++ b/packages/transak/tsconfig.build.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Build", + "compilerOptions": { + "lib": ["es2022", "dom"], + "target": "es2021", + "types": ["node"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "declaration": true, + "inlineSources": true, + "noEmit": false, + "sourceMap": true + }, + "exclude": ["**/*/node_modules", "**/*/tests", "tests"], + "include": ["src"] +} \ No newline at end of file diff --git a/packages/transak/tsconfig.json b/packages/transak/tsconfig.json index eb424084f..d9b305a9a 100644 --- a/packages/transak/tsconfig.json +++ b/packages/transak/tsconfig.json @@ -1,12 +1,13 @@ { "extends": "../../tsconfig.settings.json", "compilerOptions": { - "jsx": "react", "composite": true, "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true + "esModuleInterop": true, + "lib": ["es2020"], + "types": ["node"] }, "include": ["src", "src/**/*.json"] } diff --git a/rebuild.sh b/rebuild.sh index 8d555308d..39c4c1a94 100755 --- a/rebuild.sh +++ b/rebuild.sh @@ -4,52 +4,30 @@ rm -rf yarn.lock rm -rf node_modules rm -rf packages/account/node_modules +rm -rf packages/account/yarn.lock rm -rf packages/account/package-lock.json rm -rf packages/account/dist rm -rf packages/bundler/node_modules +rm -rf packages/bundler/yarn.lock rm -rf packages/bundler/package-lock.json rm -rf packages/bundler/dist +rm -rf packages/common/node_modules +rm -rf packages/common/yarn.lock +rm -rf packages/common/package-lock.json +rm -rf packages/common/dist + rm -rf packages/paymaster/node_modules +rm -rf packages/paymaster/yarn.lock rm -rf packages/paymaster/package-lock.json rm -rf packages/paymaster/dist - rm -rf packages/modules/node_modules +rm -rf packages/modules/yarn.lock rm -rf packages/modules/package-lock.json rm -rf packages/modules/dist - -rm -rf packages/signers/node_modules -rm -rf packages/signers/package-lock.json -rm -rf packages/signers/dist - - -rm -rf packages/common/node_modules -rm -rf packages/common/package-lock.json -rm -rf packages/common/dist -rm -rf packages/common/src/typechain - -rm -rf packages/core-types/node_modules -rm -rf packages/core-types/package-lock.json -rm -rf packages/core-types/dist - -rm -rf packages/node-client/node_modules -rm -rf packages/node-client/package-lock.json -rm -rf packages/node-client/dist - - -rm -rf packages/web3-auth/node_modules -rm -rf packages/web3-auth/yarn.lock -rm -rf packages/web3-auth/package-lock.json -rm -rf packages/web3-auth/dist - -rm -rf packages/web3-auth-native/node_modules -rm -rf packages/web3-auth-native/yarn.lock -rm -rf packages/web3-auth-native/package-lock.json -rm -rf packages/web3-auth-native/dist - rm -rf packages/transak/node_modules rm -rf packages/transak/yarn.lock rm -rf packages/transak/package-lock.json diff --git a/tests/chains.config.ts b/tests/chains.config.ts new file mode 100644 index 000000000..c82722a70 --- /dev/null +++ b/tests/chains.config.ts @@ -0,0 +1,43 @@ +import { localhost, Chain } from "viem/chains"; +import { polygonMumbai, baseSepolia } from "viem/chains"; +import { config } from "dotenv"; + +config(); + +export type SupportedTestChain = "ganache" | "baseSepolia" | "mumbai"; +type BaseChainConfig = { + chainId: number; + entryPointAddress: string; + bundlerUrl: string; + paymasterUrl?: string; + viemChain: Chain; + biconomyPaymasterApiKey?: string; +}; +export const CHAIN_CONFIG: Record = { + ganache: { // No useful bundler or paymaster tests for ganache + chainId: 1337, + entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + bundlerUrl: "https://bundler.biconomy.io/api/v2/1/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + viemChain: localhost, + }, + baseSepolia: { + chainId: 84532, + entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + bundlerUrl: "https://bundler.biconomy.io/api/v2/84532/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + paymasterUrl: "https://paymaster.biconomy.io/api/v1/84532/" + process.env.E2E_BICO_PAYMASTER_KEY_BASE!, + viemChain: baseSepolia, + biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_BASE!, + }, + mumbai: { + chainId: 80001, + entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/" + process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, + viemChain: polygonMumbai, + biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, + }, +}; +export const E2E_TEST_CHAINS = [CHAIN_CONFIG.mumbai, CHAIN_CONFIG.baseSepolia]; +export const UNIT_TEST_CHAIN = CHAIN_CONFIG.ganache; + +export default CHAIN_CONFIG; \ No newline at end of file diff --git a/tests/index.d.ts b/tests/index.d.ts new file mode 100644 index 000000000..d3093f47a --- /dev/null +++ b/tests/index.d.ts @@ -0,0 +1,26 @@ +import { Chain, Hex, PrivateKeyAccount, PublicClient, WalletClient } from "viem"; +import { WalletClientSigner } from "@alchemy/aa-core"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Signer } from "@ethersproject/abstract-signer"; + +interface WalletProps { + alchemyWalletClientSigner: WalletClientSigner; + viemWallet: WalletClient; + balance: BigInt; + publicAddress: Hex; + account: PrivateKeyAccount; + privateKey: Hex; + ethersSigner: Signer; +} + +export type TestData = { + whale: WalletProps; + minnow: WalletProps; + publicClient: PublicClient; + chainId: number; + bundlerUrl: string; + entryPointAddress: string; + viemChain: Chain; + biconomyPaymasterApiKey: string; + ethersProvider: JsonRpcProvider; +}; diff --git a/tests/setup-e2e-tests.ts b/tests/setup-e2e-tests.ts new file mode 100644 index 000000000..a95150f4a --- /dev/null +++ b/tests/setup-e2e-tests.ts @@ -0,0 +1,142 @@ +import { createWalletClient, http, createPublicClient } from "viem"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Wallet } from "@ethersproject/wallet"; +import { privateKeyToAccount } from "viem/accounts"; +import { WalletClientSigner } from "@alchemy/aa-core"; +import { config } from "dotenv"; +import { E2E_TEST_CHAINS } from "./chains.config"; + +config(); + +beforeAll(async () => { + envVarCheck(); + + const privateKeyOne: `0x${string}` = `0x${process.env.E2E_PRIVATE_KEY_ONE}`; + const privateKeyTwo: `0x${string}` = `0x${process.env.E2E_PRIVATE_KEY_TWO}`; + const walletOne = privateKeyToAccount(privateKeyOne); + const walletTwo = privateKeyToAccount(privateKeyTwo); + + const promises = E2E_TEST_CHAINS.map((chain) => { + const ethersProvider = new JsonRpcProvider(chain.viemChain.rpcUrls.default.http[0]); + const ethersSignerOne = new Wallet(privateKeyOne, ethersProvider); + const ethersSignerTwo = new Wallet(privateKeyTwo, ethersProvider); + + const publicClient = createPublicClient({ + chain: chain.viemChain, + transport: http(), + }); + + const viemWalletClientOne = createWalletClient({ + account: walletOne, + chain: chain.viemChain, + transport: http(chain.viemChain.rpcUrls.default.http[0]), + }); + const viemWalletClientTwo = createWalletClient({ + account: walletTwo, + chain: chain.viemChain, + transport: http(chain.viemChain.rpcUrls.default.http[0]), + }); + const walletClientSignerOne = new WalletClientSigner(viemWalletClientOne, "viem"); + const walletClientSignerTwo = new WalletClientSigner(viemWalletClientTwo, "viem"); + + return Promise.all([ + Promise.all([ + { + ...chain, + publicClient, + account: walletOne, + publicAddress: walletOne.address, + viemWallet: viemWalletClientOne, + alchemyWalletClientSigner: walletClientSignerOne, + ethersProvider, + ethersSigner: ethersSignerOne, + privateKey: privateKeyOne, + }, + publicClient.getBalance({ + address: walletOne.address, + }), + ]), + Promise.all([ + { + ...chain, + publicClient, + account: walletTwo, + publicAddress: walletTwo.address, + viemWallet: viemWalletClientTwo, + alchemyWalletClientSigner: walletClientSignerTwo, + ethersProvider, + ethersSigner: ethersSignerTwo, + privateKey: privateKeyTwo, + }, + publicClient.getBalance({ + address: walletTwo.address, + }), + ]), + ]); + }); + const balancesPerChain = await Promise.all(promises); + + // @ts-ignore + testDataPerChain = balancesPerChain.map((dataAndBalanceArray) => { + const sortedBalances = dataAndBalanceArray + .map(([datum, balance]) => ({ + ...datum, + balance, + })) + .sort((a, b) => { + if (a.balance > b.balance) { + return 1; + } else if (a.balance > b.balance) { + return -1; + } else { + return 0; + } + }); + + const whaleBalance = sortedBalances[0]; + const minnowBalance = sortedBalances[1]; + + const commonData = { + publicClient: whaleBalance.publicClient, + chainId: whaleBalance.chainId, + bundlerUrl: whaleBalance.bundlerUrl, + entryPointAddress: whaleBalance.entryPointAddress, + viemChain: whaleBalance.viemChain, + biconomyPaymasterApiKey: whaleBalance.biconomyPaymasterApiKey, + ethersProvider: whaleBalance.ethersProvider, + paymasterUrl: whaleBalance.paymasterUrl, + }; + + const datum = { + ...commonData, + whale: { + balance: whaleBalance.balance, + viemWallet: whaleBalance.viemWallet, + alchemyWalletClientSigner: whaleBalance.alchemyWalletClientSigner, + publicAddress: whaleBalance.publicAddress, + account: whaleBalance.account, + ethersSigner: whaleBalance.ethersSigner, + privateKey: whaleBalance.privateKey, + }, + minnow: { + balance: minnowBalance.balance, + viemWallet: minnowBalance.viemWallet, + alchemyWalletClientSigner: minnowBalance.alchemyWalletClientSigner, + publicAddress: minnowBalance.publicAddress, + account: minnowBalance.account, + ethersSigner: whaleBalance.ethersSigner, + privateKey: minnowBalance.privateKey, + }, + }; + return datum; + }); +}); + +const envVarCheck = () => { + const REQUIRED_FIELDS = ["E2E_PRIVATE_KEY_ONE", "E2E_PRIVATE_KEY_TWO", "E2E_BICO_PAYMASTER_KEY_MUMBAI", "E2E_BICO_PAYMASTER_KEY_BASE"]; + const hasFields = REQUIRED_FIELDS.every((field) => !!process.env[field]); + if (!hasFields) { + console.error("Missing env var"); + process.exit(0); + } +}; diff --git a/tests/setup-unit-tests.ts b/tests/setup-unit-tests.ts new file mode 100644 index 000000000..03360b043 --- /dev/null +++ b/tests/setup-unit-tests.ts @@ -0,0 +1,75 @@ +import { createWalletClient, http, createPublicClient } from "viem"; +import { WalletClientSigner } from "@alchemy/aa-core"; +import { JsonRpcProvider } from "@ethersproject/providers"; +import { Wallet } from "@ethersproject/wallet"; +import { UNIT_TEST_CHAIN } from "./chains.config"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; + +beforeAll(() => { + const { chainId, bundlerUrl, viemChain, entryPointAddress } = UNIT_TEST_CHAIN; + const privateKeyOne = generatePrivateKey(); + const accountOne = privateKeyToAccount(privateKeyOne); + + const ethersProvider = new JsonRpcProvider(viemChain.rpcUrls.default.http[0]); + const ethersSignerOne = new Wallet(privateKeyOne, ethersProvider); + + const viemWalletClientOne = createWalletClient({ + account: accountOne, + chain: viemChain, + transport: http(viemChain.rpcUrls.default.http[0]), + }); + + const walletClientSignerOne = new WalletClientSigner(viemWalletClientOne, "viem"); + const publicAddressOne = accountOne.address; + const publicClient = createPublicClient({ + chain: viemChain, + transport: http(), + }); + + const privateKeyTwo = generatePrivateKey(); + const accountTwo = privateKeyToAccount(privateKeyTwo); + + const ethersSignerTwo = new Wallet(privateKeyTwo, ethersProvider); + + const viemWalletClientTwo = createWalletClient({ + account: accountTwo, + chain: viemChain, + transport: http(viemChain.rpcUrls.default.http[0]), + }); + const walletClientSignerTwo = new WalletClientSigner(viemWalletClientTwo, "viem"); + const publicAddressTwo = accountTwo.address; + + const whale = { + viemWallet: viemWalletClientOne, + alchemyWalletClientSigner: walletClientSignerOne, + balance: 0, + publicAddress: publicAddressOne, + ethersSigner: ethersSignerOne, + account: accountOne, + privateKey: privateKeyOne, + }; + + const minnow = { + viemWallet: viemWalletClientTwo, + alchemyWalletClientSigner: walletClientSignerTwo, + balance: 0, + publicAddress: publicAddressTwo, + ethersSigner: ethersSignerTwo, + account: accountTwo, + privateKey: privateKeyTwo, + }; + + // @ts-ignore + testDataPerChain = [ + { + whale, + minnow, + publicClient, + chainId, + bundlerUrl, + entryPointAddress, + viemChain, + ethersProvider, + }, + ]; +}); diff --git a/tests/utils.ts b/tests/utils.ts new file mode 100644 index 000000000..c010435f6 --- /dev/null +++ b/tests/utils.ts @@ -0,0 +1,45 @@ +import { Hex, PublicClient, parseAbi } from "viem"; + +export const checkBalance = (publicClient: PublicClient, address: Hex, tokenAddress?: Hex) => { + if (!tokenAddress) { + return publicClient.getBalance({ address }); + } else { + return publicClient.readContract({ + address: tokenAddress, + abi: parseAbi(["function balanceOf(address owner) view returns (uint balance)"]), + functionName: "balanceOf", + // @ts-ignore + args: [address], + }); + } +}; + +// TODO(Joe): Make human readable +export const entryPointABI = [ + { + inputs: [ + { + components: [ + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, + { internalType: "uint256", name: "callGasLimit", type: "uint256" }, + { internalType: "uint256", name: "verificationGasLimit", type: "uint256" }, + { internalType: "uint256", name: "preVerificationGas", type: "uint256" }, + { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, + { internalType: "uint256", name: "maxPriorityFeePerGas", type: "uint256" }, + { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, + { internalType: "bytes", name: "signature", type: "bytes" }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "getUserOpHash", + outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], + stateMutability: "view", + type: "function", + }, +]; diff --git a/tsconfig.json b/tsconfig.json index 3ad9d22bd..8172cdac6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,14 +11,12 @@ }, "include": ["packages/**/*"], "references": [ - { "path": "./packages/common" }, - { "path": "./packages/core-types" }, - { "path": "./packages/node-client" }, - { "path": "./packages/web3-auth" }, - { "path": "./packages/web3-auth-native" }, { "path": "./packages/transak" }, { "path": "./packages/bundler" }, + { "path": "./packages/particle-auth" }, { "path": "./packages/paymaster" }, - { "path": "./packages/account" } + { "path": "./packages/account" }, + { "path": "./packages/common" }, + { "path": "./packages/modules" }, ] } diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..3a06bfd22 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,9886 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# 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== + +"@adraffy/ens-normalize@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" + integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== + +"@alchemy/aa-core@3.0.0-alpha.4": + version "3.0.0-alpha.4" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.0.0-alpha.4.tgz#3abe0911f7c35cc6f0fc0cd03faad5673a01f0a9" + integrity sha512-mTVMDciBYIrXRgJnDiew2nRhjeAMKIK3RijGR3TQ7Gn6cpY8ZKSiJoTM5yRCttx368jqz0BACD1mjTg/zU8+Cg== + dependencies: + abitype "^0.8.3" + eventemitter3 "^5.0.1" + viem "^2.5.0" + zod "^3.22.4" + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" + integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.9" + "@babel/parser" "^7.23.9" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== + dependencies: + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + +"@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/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helpers@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" + integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== + dependencies: + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" + +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" + integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/runtime@^7.21.0": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" + integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + +"@babel/traverse@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" + integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" + integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@chainsafe/as-sha256@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" + integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== + +"@chainsafe/persistent-merkle-tree@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" + integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/persistent-merkle-tree@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" + integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/ssz@^0.10.0": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" + integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.5.0" + +"@chainsafe/ssz@^0.9.2": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" + integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.4.2" + case "^1.6.3" + +"@colors/colors@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" + integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@dabh/diagnostics@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== + +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== + +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== + +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== + +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== + +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== + +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== + +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== + +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== + +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== + +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== + +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== + +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== + +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== + +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== + +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== + +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== + +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== + +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== + +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== + +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== + +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== + +"@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.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + 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.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@fastify/busboy@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" + integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== + +"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@humanwhocodes/config-array@^0.11.13": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.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.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.22" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@lerna/child-process@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-7.4.2.tgz#a2fd013ac2150dc288270d3e0d0b850c06bec511" + integrity sha512-je+kkrfcvPcwL5Tg8JRENRqlbzjdlZXyaR88UcnCdNW0AJ1jX9IfHRys1X7AwSroU2ug8ESNC+suoBw1vX833Q== + dependencies: + chalk "^4.1.0" + execa "^5.0.0" + strong-log-transformer "^2.1.0" + +"@lerna/create@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-7.4.2.tgz#f845fad1480e46555af98bd39af29571605dddc9" + integrity sha512-1wplFbQ52K8E/unnqB0Tq39Z4e+NEoNrpovEnl6GpsTUrC6WDp8+w0Le2uCBV0hXyemxChduCkLz4/y1H1wTeg== + dependencies: + "@lerna/child-process" "7.4.2" + "@npmcli/run-script" "6.0.2" + "@nx/devkit" ">=16.5.1 < 17" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "19.0.11" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.1" + columnify "1.6.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "^8.2.0" + dedent "0.7.0" + execa "5.0.0" + fs-extra "^11.1.1" + get-stream "6.0.0" + git-url-parse "13.1.0" + glob-parent "5.1.2" + globby "11.1.0" + graceful-fs "4.2.11" + has-unicode "2.0.1" + ini "^1.3.8" + init-package-json "5.0.0" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + js-yaml "4.1.0" + libnpmpublish "7.3.0" + load-json-file "6.2.0" + lodash "^4.17.21" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "8.1.1" + npm-packlist "5.1.1" + npm-registry-fetch "^14.0.5" + npmlog "^6.0.2" + nx ">=16.5.1 < 17" + p-map "4.0.0" + p-map-series "2.1.0" + p-queue "6.6.2" + p-reduce "^2.1.0" + pacote "^15.2.0" + pify "5.0.0" + read-cmd-shim "4.0.0" + read-package-json "6.0.4" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.4" + signal-exit "3.0.7" + slash "^3.0.0" + ssri "^9.0.1" + strong-log-transformer "2.1.0" + tar "6.1.11" + temp-dir "1.0.0" + upath "2.0.1" + uuid "^9.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "5.0.0" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "16.2.0" + yargs-parser "20.2.4" + +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@noble/curves@1.2.0", "@noble/curves@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/curves@1.3.0", "@noble/curves@~1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== + dependencies: + "@noble/hashes" "1.3.3" + +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/hashes@1.3.3", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@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.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nomicfoundation/ethereumjs-block@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" + integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + +"@nomicfoundation/ethereumjs-blockchain@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" + integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-ethash" "3.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + level "^8.0.0" + lru-cache "^5.1.1" + memory-level "^1.0.0" + +"@nomicfoundation/ethereumjs-common@4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" + integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.2" + crc-32 "^1.2.0" + +"@nomicfoundation/ethereumjs-ethash@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" + integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + bigint-crypto-utils "^3.0.23" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-evm@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" + integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== + dependencies: + "@ethersproject/providers" "^5.7.1" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/ethereumjs-rlp@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" + integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== + +"@nomicfoundation/ethereumjs-statemanager@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" + integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + js-sdsl "^4.1.4" + +"@nomicfoundation/ethereumjs-trie@6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" + integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@types/readable-stream" "^2.3.13" + ethereum-cryptography "0.1.3" + readable-stream "^3.6.0" + +"@nomicfoundation/ethereumjs-tx@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" + integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== + dependencies: + "@chainsafe/ssz" "^0.9.2" + "@ethersproject/providers" "^5.7.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@9.0.2": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" + integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== + dependencies: + "@chainsafe/ssz" "^0.10.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-vm@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" + integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" + integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" + integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" + integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" + integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" + integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" + integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" + integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" + integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" + integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" + +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/fs@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== + dependencies: + semver "^7.3.5" + +"@npmcli/git@^4.0.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.1.0.tgz#ab0ad3fd82bc4d8c1351b6c62f0fa56e8fe6afa6" + integrity sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ== + dependencies: + "@npmcli/promise-spawn" "^6.0.0" + lru-cache "^7.4.4" + npm-pick-manifest "^8.0.0" + proc-log "^3.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^3.0.0" + +"@npmcli/installed-package-contents@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" + integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== + dependencies: + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/node-gyp@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" + integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== + +"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" + integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== + dependencies: + which "^3.0.0" + +"@npmcli/run-script@6.0.2", "@npmcli/run-script@^6.0.0": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885" + integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/promise-spawn" "^6.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^3.0.0" + which "^3.0.0" + +"@nrwl/devkit@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-16.10.0.tgz#ac8c5b4db00f12c4b817c937be2f7c4eb8f2593c" + integrity sha512-fRloARtsDQoQgQ7HKEy0RJiusg/HSygnmg4gX/0n/Z+SUS+4KoZzvHjXc6T5ZdEiSjvLypJ+HBM8dQzIcVACPQ== + dependencies: + "@nx/devkit" "16.10.0" + +"@nrwl/tao@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-16.10.0.tgz#94642a0380709b8e387e1e33705a5a9624933375" + integrity sha512-QNAanpINbr+Pod6e1xNgFbzK1x5wmZl+jMocgiEFXZ67KHvmbD6MAQQr0MMz+GPhIu7EE4QCTLTyCEMlAG+K5Q== + dependencies: + nx "16.10.0" + tslib "^2.3.0" + +"@nx/devkit@16.10.0", "@nx/devkit@>=16.5.1 < 17": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-16.10.0.tgz#7e466be2dee2dcb1ccaf286786ca2a0a639aa007" + integrity sha512-IvKQqRJFDDiaj33SPfGd3ckNHhHi6ceEoqCbAP4UuMXOPPVOX6H0KVk+9tknkPb48B7jWIw6/AgOeWkBxPRO5w== + dependencies: + "@nrwl/devkit" "16.10.0" + ejs "^3.1.7" + enquirer "~2.3.6" + ignore "^5.0.4" + semver "7.5.3" + tmp "~0.2.1" + tslib "^2.3.0" + +"@nx/nx-darwin-arm64@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.10.0.tgz#0c73010cac7a502549483b12bad347da9014e6f1" + integrity sha512-YF+MIpeuwFkyvM5OwgY/rTNRpgVAI/YiR0yTYCZR+X3AAvP775IVlusNgQ3oedTBRUzyRnI4Tknj1WniENFsvQ== + +"@nx/nx-darwin-x64@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-16.10.0.tgz#2ccf270418d552fd0a8e0d6089aee4944315adaa" + integrity sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg== + +"@nx/nx-freebsd-x64@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.10.0.tgz#c3ee6914256e69493fed9355b0d6661d0e86da44" + integrity sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw== + +"@nx/nx-linux-arm-gnueabihf@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.10.0.tgz#a961eccbb38acb2da7fc125b29d1fead0b39152f" + integrity sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA== + +"@nx/nx-linux-arm64-gnu@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.10.0.tgz#795f20072549d03822b5c4639ef438e473dbb541" + integrity sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g== + +"@nx/nx-linux-arm64-musl@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.10.0.tgz#f2428ee6dbe2b2c326e8973f76c97666def33607" + integrity sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ== + +"@nx/nx-linux-x64-gnu@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.10.0.tgz#d36c2bcf94d49eaa24e3880ddaf6f1f617de539b" + integrity sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA== + +"@nx/nx-linux-x64-musl@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.10.0.tgz#78bd2ab97a583b3d4ea3387b67fd7b136907493c" + integrity sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q== + +"@nx/nx-win32-arm64-msvc@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.10.0.tgz#ef20ec8d0c83d66e73e20df12d2c788b8f866396" + integrity sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA== + +"@nx/nx-win32-x64-msvc@16.10.0": + version "16.10.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.10.0.tgz#7410a51d0f8be631eec9552f01b2e5946285927c" + integrity sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA== + +"@octokit/auth-token@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" + integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== + +"@octokit/core@^4.2.1": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" + integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== + dependencies: + "@octokit/auth-token" "^3.0.0" + "@octokit/graphql" "^5.0.0" + "@octokit/request" "^6.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^9.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^7.0.0": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" + integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== + dependencies: + "@octokit/types" "^9.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^5.0.0": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" + integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== + dependencies: + "@octokit/request" "^6.0.0" + "@octokit/types" "^9.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^18.0.0": + version "18.1.1" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz#09bdfdabfd8e16d16324326da5148010d765f009" + integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== + +"@octokit/plugin-enterprise-rest@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + +"@octokit/plugin-paginate-rest@^6.1.2": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" + integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== + dependencies: + "@octokit/tsconfig" "^1.0.2" + "@octokit/types" "^9.2.3" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@^7.1.2": + version "7.2.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz#37a84b171a6cb6658816c82c4082ac3512021797" + integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== + dependencies: + "@octokit/types" "^10.0.0" + +"@octokit/request-error@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" + integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== + dependencies: + "@octokit/types" "^9.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^6.0.0": + version "6.2.8" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" + integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== + dependencies: + "@octokit/endpoint" "^7.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^9.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + +"@octokit/rest@19.0.11": + version "19.0.11" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.11.tgz#2ae01634fed4bd1fca5b642767205ed3fd36177c" + integrity sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw== + dependencies: + "@octokit/core" "^4.2.1" + "@octokit/plugin-paginate-rest" "^6.1.2" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^7.1.2" + +"@octokit/tsconfig@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" + integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== + +"@octokit/types@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" + integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== + dependencies: + "@octokit/openapi-types" "^18.0.0" + +"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": + version "9.3.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" + integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== + dependencies: + "@octokit/openapi-types" "^18.0.0" + +"@parcel/watcher@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" + integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== + dependencies: + node-addon-api "^3.2.1" + node-gyp-build "^4.3.0" + +"@particle-network/analytics@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@particle-network/analytics/-/analytics-1.0.1.tgz#b3657cf7aaea57f90a7ac2c03f72b8786c298012" + integrity sha512-ApcSMo1BXQlywO+lvOpG3Y2/SVGNCpJzXO/4e3zHzE/9j+uMehsilDzPwWQwLhrCXZYwVm7mmE71Gs36yobiNw== + dependencies: + hash.js "^1.1.7" + uuidv4 "^6.2.13" + +"@particle-network/auth@^1.2.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@particle-network/auth/-/auth-1.3.1.tgz#f9ee51749e3b10e700e0d8c51a8c0769ab0b9851" + integrity sha512-hu6ie5RjjN4X+6y/vfjyCsSX3pQuS8k8ZoMb61QWwhWsnZXKzpBUVeAEk55aGfxxXY+KfBkSmZosyaZHGoHnfw== + dependencies: + "@particle-network/analytics" "^1.0.1" + "@particle-network/chains" "*" + "@particle-network/crypto" "^1.0.1" + buffer "^6.0.3" + draggabilly "^3.0.0" + +"@particle-network/biconomy@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@particle-network/biconomy/-/biconomy-1.0.0.tgz#91f79c6341db0fc9b23d3ed9c61fbb08df727c31" + integrity sha512-MvYdTGT48WJB72SqkmZbx3NI8HdjWb8EZNKIkbddcusws/Uqy4dHV2+tP7UWup+vGltCXK/55KAdvgcwFTsZrQ== + dependencies: + axios "^1.3.6" + uuid "^8.3.2" + +"@particle-network/chains@*": + version "1.3.16" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.16.tgz#5b56104b0d7a6c87d17eb7f2d597ee358a430cd9" + integrity sha512-vr30c56QmMMxXP59hL4MysdmKNHCD2JmMEdhfly5C+HB+N4p/a7ioblioatRIukgZPP9/Qnc7TPJISGlQaGWpA== + +"@particle-network/crypto@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@particle-network/crypto/-/crypto-1.0.1.tgz#26afef622a3eb906dca5c810fef8001ffee29029" + integrity sha512-GgvHmHcFiNkCLZdcJOgctSbgvs251yp+EAdUydOE3gSoIxN6KEr/Snu9DebENhd/nFb7FDk5ap0Hg49P7pj1fg== + dependencies: + crypto-js "^4.1.1" + uuidv4 "^6.2.13" + +"@particle-network/provider@^1.2.0": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@particle-network/provider/-/provider-1.3.2.tgz#68ae98cca471c7612206cb43c915719cd321fb25" + integrity sha512-3XAUMCISTMYE57LZik7PrVanLIUyyU1ufb5eHtsoQw5ORfH0IeX3E5o6x5mxtfOXKfxVQ0tsIoLRMw0jMmSDpA== + dependencies: + "@particle-network/chains" "*" + axios "^1.3.6" + uuid "^8.3.2" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + +"@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" + integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== + +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== + dependencies: + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" + +"@scure/bip32@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.2.tgz#90e78c027d5e30f0b22c1f8d50ff12f3fb7559f8" + integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== + dependencies: + "@noble/curves" "~1.2.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.2" + +"@scure/bip32@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" + integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== + dependencies: + "@noble/curves" "~1.3.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" + integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== + dependencies: + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sigstore/bundle@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-1.1.0.tgz#17f8d813b09348b16eeed66a8cf1c3d6bd3d04f1" + integrity sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + +"@sigstore/protobuf-specs@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b" + integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== + +"@sigstore/sign@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-1.0.0.tgz#6b08ebc2f6c92aa5acb07a49784cb6738796f7b4" + integrity sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA== + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + make-fetch-happen "^11.0.1" + +"@sigstore/tuf@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.3.tgz#2a65986772ede996485728f027b0514c0b70b160" + integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + tuf-js "^1.1.7" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@transak/transak-sdk@^1.2.3": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@transak/transak-sdk/-/transak-sdk-1.4.1.tgz#90dee041b772c71c35cfb22df9ef51970b780db4" + integrity sha512-/BKzb9orz1xDxa41oOPW+4KpjSHNEXgtaFazX/aIjQbr7LLbRqfXC/IHzpPmjR9OmFm8pFhV2Y86Rg0aZt5ZUA== + dependencies: + events "^3.3.0" + query-string "^8.1.0" + +"@trufflesuite/bigint-buffer@1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" + integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== + dependencies: + node-gyp-build "4.4.0" + +"@trufflesuite/uws-js-unofficial@20.30.0-unofficial.0": + version "20.30.0-unofficial.0" + resolved "https://registry.yarnpkg.com/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz#2fbc2f8ef7e82fbeea6abaf7e8a9d42a02b479d3" + integrity sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA== + dependencies: + ws "8.13.0" + optionalDependencies: + bufferutil "4.0.7" + utf-8-validate "6.0.3" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@tufjs/canonical-json@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" + integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== + +"@tufjs/models@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" + integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== + dependencies: + "@tufjs/canonical-json" "1.0.0" + minimatch "^9.0.0" + +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + dependencies: + "@babel/types" "^7.20.7" + +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== + dependencies: + "@types/node" "*" + +"@types/debug@^4.1.9": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^29.5.4": + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.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.1", "@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@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/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/node@*", "@types/node@^20.11.10": + version "20.11.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292" + integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw== + 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.2" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== + dependencies: + "@types/node" "*" + +"@types/readable-stream@^2.3.13": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + +"@types/secp256k1@^4.0.1": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== + dependencies: + "@types/node" "*" + +"@types/seedrandom@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" + integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== + +"@types/semver@^7.5.0": + version "7.5.7" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.7.tgz#326f5fdda70d13580777bcaa1bc6fa772a5aef0e" + integrity sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg== + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/triple-beam@^1.3.2": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== + +"@types/uuid@8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^6.7.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.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.6.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== + dependencies: + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== + dependencies: + "@typescript-eslint/types" "6.21.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== + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +"@yarnpkg/parsers@3.0.0-rc.46": + version "3.0.0-rc.46" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01" + integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@zkochan/js-yaml@0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" + integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== + dependencies: + argparse "^2.0.1" + +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abitype@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" + integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== + +abitype@^0.8.3: + version "0.8.11" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.8.11.tgz#66e1cf2cbf46f48d0e57132d7c1c392447536cc1" + integrity sha512-bM4v2dKvX08sZ9IU38IN5BKmN+ZkOSd2oI4a9f0ejHYZQYV6cDr7j+d95ga0z2XHG36Y4jzoG5Z7qDqxp7fi/A== + +abstract-level@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" + integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +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.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + 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-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/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-sequence-parser@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" + integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +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== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +args@5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/args/-/args-5.0.3.tgz#943256db85021a85684be2f0882f25d796278702" + integrity sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA== + dependencies: + camelcase "5.0.0" + chalk "2.4.2" + leven "2.1.0" + mri "1.1.4" + +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +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@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +array.prototype.filter@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" + integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +array.prototype.findlastindex@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" + integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +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.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + 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== + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +async-eventemitter@0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async@^2.4.0: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +async@^3.2.3, async@^3.2.4: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" + integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== + +axios@^1.0.0, axios@^1.3.6: + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +bigint-crypto-utils@^3.0.23: + version "3.3.0" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" + integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== + +bignumber.js@^9.0.1: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserslist@^4.22.2: + version "4.22.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" + integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== + dependencies: + caniuse-lite "^1.0.30001580" + electron-to-chromium "^1.4.648" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-reverse@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" + integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bufferutil@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== + dependencies: + node-gyp-build "^4.3.0" + +bufferutil@4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" + integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + dependencies: + node-gyp-build "^4.3.0" + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +byte-size@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" + integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + +cacache@^17.0.0: + version "17.1.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" + integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^7.7.1" + minipass "^7.0.3" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.6.tgz#6c46675fc7a5e9de82d75a233d586c8b7ac0d931" + integrity sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + set-function-length "^1.2.0" + +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: + version "5.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" + integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + +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, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001580: + version "1.0.30001587" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz#a0bce920155fa56a1885a69c74e1163fc34b4881" + integrity sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA== + +case@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + +catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +chalk@2.4.2, chalk@^2.4.2: + version "2.4.2" + 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" + +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +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: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0, ci-info@^3.6.1: + 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.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cjs-module-lexer@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + +classic-level@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" + integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "^2.2.2" + node-gyp-build "^4.3.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-cursor@3.1.0, cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cli-spinners@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + 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-deep@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.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== + +cmd-shim@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" + integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +color-convert@^1.9.0, color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + +columnify@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +commander@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + +commander@^2.9.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +concurrently@^8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.2.tgz#353141985c198cfa5e4a3ef90082c336b5851784" + integrity sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg== + dependencies: + chalk "^4.1.2" + date-fns "^2.30.0" + lodash "^4.17.21" + rxjs "^7.8.1" + shell-quote "^1.8.1" + spawn-command "0.0.2" + supports-color "^8.1.1" + tree-kill "^1.2.2" + yargs "^17.7.2" + +confusing-browser-globals@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +conventional-changelog-angular@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" + integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== + dependencies: + compare-func "^2.0.0" + +conventional-changelog-core@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz#3c331b155d5b9850f47b4760aeddfc983a92ad49" + integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^6.0.0" + conventional-commits-parser "^4.0.0" + dateformat "^3.0.3" + get-pkg-repo "^4.2.1" + git-raw-commits "^3.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^5.0.0" + normalize-package-data "^3.0.3" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + +conventional-changelog-preset-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" + integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== + +conventional-changelog-writer@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" + integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== + dependencies: + conventional-commits-filter "^3.0.0" + dateformat "^3.0.3" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + meow "^8.1.2" + semver "^7.0.0" + split "^1.0.1" + +conventional-commits-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" + integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.1" + +conventional-commits-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" + integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== + dependencies: + JSONStream "^1.3.5" + is-text-path "^1.0.1" + meow "^8.1.2" + split2 "^3.2.2" + +conventional-recommended-bump@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" + integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^3.0.0" + conventional-commits-filter "^3.0.0" + conventional-commits-parser "^4.0.0" + git-raw-commits "^3.0.0" + git-semver-tags "^5.0.0" + meow "^8.1.2" + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^8.2.0: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + 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" + +crypto-js@^4.1.1, crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +date-fns@^2.30.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + +dateformat@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +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: + 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.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decode-uri-component@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.4.1.tgz#2ac4859663c704be22bf7db760a1494a49ab2cc5" + integrity sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ== + +dedent@0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + +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== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +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.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.2.tgz#f3c33b4f0102360cd7c0f5f28700f5678510b63a" + integrity sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.2" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + 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.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +deprecation@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + 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" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@~10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" + integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== + +dotenv@~16.3.1: + version "16.3.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" + integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== + +draggabilly@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/draggabilly/-/draggabilly-3.0.0.tgz#48defe10a67f346a0338caaa40c0765c4d3912d6" + integrity sha512-aEs+B6prbMZQMxc9lgTpCBfyCUhRur/VFucHhIOvlvvdARTj7TcDmX/cdOUtqbjJJUh7+agyJXR5Z6IFe1MxwQ== + dependencies: + get-size "^3.0.0" + unidragger "^3.0.0" + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +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.7: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.648: + version "1.4.665" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz#681700bd590b0e5a3be66e3e2874ce62abcf5da5" + integrity sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw== + +elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +email-addresses@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-5.0.0.tgz#7ae9e7f58eef7d5e3e2c2c2d3ea49b78dc854fa6" + integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw== + +emittery@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" + integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/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== + +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + +encoding@^0.1.12, encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +envinfo@7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +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, es-abstract@^1.22.3: + 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-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +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, es-shim-unscopables@^1.0.2: + 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" + +esbuild-plugin-tsc@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/esbuild-plugin-tsc/-/esbuild-plugin-tsc-0.4.0.tgz#d7d516fda0e0b05c8e0b442152deebdee01ddc61" + integrity sha512-q9gWIovt1nkwchMLc2zhyksaiHOv3kDK4b0AUol8lkMCRhJ1zavgfb2fad6BKp7FT9rh/OHmEBXVjczLoi/0yw== + dependencies: + strip-comments "^2.0.1" + +esbuild@^0.19.11: + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" + +escalade@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +eslint-config-airbnb-base@15.0.0, eslint-config-airbnb-base@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" + integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.5" + semver "^6.3.0" + +eslint-config-airbnb-typescript@17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz#fda960eee4a510f092a9a1c139035ac588937ddc" + integrity sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig== + dependencies: + eslint-config-airbnb-base "^15.0.0" + +eslint-config-prettier@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + +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: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +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: + debug "^3.2.7" + +eslint-plugin-import@^2.28.1: + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== + 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.15.0" + +eslint-plugin-prettier@^5.0.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" + integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.8.6" + +eslint-plugin-security@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz#0e9c4a471f6e4d3ca16413c7a4a51f3966ba16e4" + integrity sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ== + dependencies: + safe-regex "^2.1.1" + +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-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.48.0: + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.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: + version "4.0.1" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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.yarnpkg.com/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" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" + integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== + dependencies: + "@noble/curves" "1.3.0" + "@noble/hashes" "1.3.3" + "@scure/bip32" "1.3.3" + "@scure/bip39" "1.2.2" + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethers@^5.7.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +ev-emitter@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ev-emitter/-/ev-emitter-2.1.2.tgz#91737a2deae9fa95453e7e86cfae976f8c3ced38" + integrity sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q== + +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== + dependencies: + homedir-polyfill "^1.0.1" + +expect@^29.0.0, expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + +external-editor@^3.0.3: + 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" + +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.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.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.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.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + +figures@3.2.0, figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +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.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== + +filenamify@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" + integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.1" + trim-repeated "^1.0.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +filter-obj@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-5.1.0.tgz#5bd89676000a713d7db2e197f660274428e524ed" + integrity sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng== + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-node-modules@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44" + integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== + dependencies: + findup-sync "^4.0.0" + merge "^2.1.1" + +find-up@5.0.0, find-up@^5.0.0: + version "5.0.0" + 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" + path-exists "^4.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + 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" + +findup-sync@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^4.0.2" + resolve-dir "^1.0.1" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/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== + +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + +follow-redirects@^1.12.1, follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^11.1.0, fs-extra@^11.1.1: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +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== + +ganache@^7.9.2: + version "7.9.2" + resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.9.2.tgz#77f506ad2735dd9109696ffa1834a9dd2f806449" + integrity sha512-7gsVVDpO9AhrFyDMWWl7SpMsPpqGcnAzjxz3k32LheIPNd64p2XsY9GYRdhWmKuryb60W1iaWPZWDkFKlbRWHA== + dependencies: + "@trufflesuite/bigint-buffer" "1.1.10" + "@trufflesuite/uws-js-unofficial" "20.30.0-unofficial.0" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "5.1.1" + "@types/seedrandom" "3.0.1" + abstract-level "1.0.3" + abstract-leveldown "7.2.0" + async-eventemitter "0.2.4" + emittery "0.10.0" + keccak "3.0.2" + leveldown "6.1.0" + secp256k1 "4.0.3" + optionalDependencies: + bufferutil "4.0.5" + utf-8-validate "5.0.7" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + 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.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-pkg-repo@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-port@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-size/-/get-size-3.0.0.tgz#00e39a8042a3de237b2fcf288eaf55d3f472417c" + integrity sha512-Y8aiXLq4leR7807UY0yuKEwif5s3kbVp1nTv+i4jBeoUzByTLKkLWu/HorS6/pB+7gsB0o7OTogC8AoOOeT0Hw== + +get-stream@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +gh-pages@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-6.1.1.tgz#e80af927a081cb480657fde5a0b87ea2e77d6c74" + integrity sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw== + dependencies: + async "^3.2.4" + commander "^11.0.0" + email-addresses "^5.0.0" + filenamify "^4.3.0" + find-cache-dir "^3.3.1" + fs-extra "^11.1.1" + globby "^6.1.0" + +git-raw-commits@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" + integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== + dependencies: + dargs "^7.0.0" + meow "^8.1.2" + split2 "^3.2.2" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" + integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== + dependencies: + meow "^8.1.2" + semver "^7.0.0" + +git-up@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" + integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== + dependencies: + is-ssh "^1.4.0" + parse-url "^8.1.0" + +git-url-parse@13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" + integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== + dependencies: + git-up "^7.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + dependencies: + ini "^1.3.2" + +glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + 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.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@8.1.0, glob@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^10.2.2, glob@^10.3.7: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + +glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^9.2.0: + version "9.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + 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.1.0, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +handlebars@^4.7.7: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +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@^2.17.3: + version "2.19.5" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.5.tgz#6017c35ae2844b669e9bcc84c3d05346d4ef031c" + integrity sha512-vx8R7zWCYVgM56vA6o0Wqx2bIIptkN4TMs9QwDqZVNGRhMzBfzqUeEYbp+69gxWp1neg2V2nYQUaaUv7aom1kw== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@nomicfoundation/ethereumjs-vm" "7.0.2" + "@nomicfoundation/solidity-analyzer" "^0.1.0" + "@sentry/node" "^5.18.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + boxen "^5.1.2" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + keccak "^3.0.2" + lodash "^4.17.11" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + tsort "0.0.1" + undici "^5.14.0" + 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.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: + 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.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has-unicode@2.0.1, has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== + dependencies: + function-bind "^1.1.2" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +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== + +hosted-git-info@^3.0.6: + version "3.0.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" + integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== + dependencies: + lru-cache "^7.5.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + 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" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== + dependencies: + minimatch "^5.0.1" + +ignore-walk@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.4.tgz#89950be94b4f522225eb63a13c56badb639190e9" + integrity sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw== + dependencies: + minimatch "^9.0.0" + +ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +immutable@^4.0.0-rc.12: + version "4.3.5" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" + integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + 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" + +import-local@3.1.0, import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +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.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.2, ini@^1.3.4, ini@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +init-package-json@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" + integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== + dependencies: + npm-package-arg "^10.0.0" + promzard "^1.0.0" + read "^2.0.0" + read-package-json "^6.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^5.0.0" + +inquirer@^8.2.4: + version "8.2.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + +internal-slot@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +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-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +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.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + 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.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + 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, is-core-module@^2.5.0, is-core-module@^2.8.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, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +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.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +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.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +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.0.0, 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.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +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-ssh@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" + integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== + dependencies: + protocols "^2.0.1" + +is-stream@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +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-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-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.13, is-typed-array@^1.1.9: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/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.1: + 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.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + 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== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isows@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" + integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1, jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.0.0, jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + +js-sdsl@^4.1.4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +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.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.10.0, js-yaml@^3.13.1: + version "3.14.1" + 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" + +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +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-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +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-parse-even-better-errors@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz#02bb29fb5da90b5444581749c22cedd3597c6cb0" + integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg== + +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== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +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" + +json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonc-parser@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +keccak@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +keccak@^3.0.0, keccak@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + 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.2, 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.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + optionalDependencies: + graceful-fs "^4.1.9" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + +lerna-changelog@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/lerna-changelog/-/lerna-changelog-2.2.0.tgz#c43813bba81e30cdeb20aabaef4da390f0f38e41" + integrity sha512-yjYNAHrbnw8xYFKmYWJEP52Tk4xSdlNmzpYr26+3glbSGDmpe8UMo8f9DlEntjGufL+opup421oVTXcLshwAaQ== + dependencies: + chalk "^4.0.0" + cli-highlight "^2.1.11" + execa "^5.0.0" + hosted-git-info "^4.0.0" + make-fetch-happen "^9.0.0" + p-map "^3.0.0" + progress "^2.0.0" + yargs "^17.1.0" + +lerna@^7.2.0: + version "7.4.2" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-7.4.2.tgz#03497125d7b7c8d463eebfe17a701b16bde2ad09" + integrity sha512-gxavfzHfJ4JL30OvMunmlm4Anw7d7Tq6tdVHzUukLdS9nWnxCN/QB21qR+VJYp5tcyXogHKbdUEGh6qmeyzxSA== + dependencies: + "@lerna/child-process" "7.4.2" + "@lerna/create" "7.4.2" + "@npmcli/run-script" "6.0.2" + "@nx/devkit" ">=16.5.1 < 17" + "@octokit/plugin-enterprise-rest" "6.0.1" + "@octokit/rest" "19.0.11" + byte-size "8.1.1" + chalk "4.1.0" + clone-deep "4.0.1" + cmd-shim "6.0.1" + columnify "1.6.0" + conventional-changelog-angular "7.0.0" + conventional-changelog-core "5.0.1" + conventional-recommended-bump "7.0.1" + cosmiconfig "^8.2.0" + dedent "0.7.0" + envinfo "7.8.1" + execa "5.0.0" + fs-extra "^11.1.1" + get-port "5.1.1" + get-stream "6.0.0" + git-url-parse "13.1.0" + glob-parent "5.1.2" + globby "11.1.0" + graceful-fs "4.2.11" + has-unicode "2.0.1" + import-local "3.1.0" + ini "^1.3.8" + init-package-json "5.0.0" + inquirer "^8.2.4" + is-ci "3.0.1" + is-stream "2.0.0" + jest-diff ">=29.4.3 < 30" + js-yaml "4.1.0" + libnpmaccess "7.0.2" + libnpmpublish "7.3.0" + load-json-file "6.2.0" + lodash "^4.17.21" + make-dir "4.0.0" + minimatch "3.0.5" + multimatch "5.0.0" + node-fetch "2.6.7" + npm-package-arg "8.1.1" + npm-packlist "5.1.1" + npm-registry-fetch "^14.0.5" + npmlog "^6.0.2" + nx ">=16.5.1 < 17" + p-map "4.0.0" + p-map-series "2.1.0" + p-pipe "3.1.0" + p-queue "6.6.2" + p-reduce "2.1.0" + p-waterfall "2.1.1" + pacote "^15.2.0" + pify "5.0.0" + read-cmd-shim "4.0.0" + read-package-json "6.0.4" + resolve-from "5.0.0" + rimraf "^4.4.1" + semver "^7.3.8" + signal-exit "3.0.7" + slash "3.0.0" + ssri "^9.0.1" + strong-log-transformer "2.1.0" + tar "6.1.11" + temp-dir "1.0.0" + typescript ">=3 < 6" + upath "2.0.1" + uuid "^9.0.0" + validate-npm-package-license "3.0.4" + validate-npm-package-name "5.0.0" + write-file-atomic "5.0.1" + write-pkg "4.0.0" + yargs "16.2.0" + yargs-parser "20.2.4" + +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-transcoder@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== + dependencies: + buffer "^6.0.3" + module-error "^1.0.1" + +level@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" + integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== + dependencies: + abstract-level "^1.0.4" + browser-level "^1.0.1" + classic-level "^1.2.0" + +leveldown@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" + integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +leven@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +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" + +libnpmaccess@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-7.0.2.tgz#7f056c8c933dd9c8ba771fa6493556b53c5aac52" + integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw== + dependencies: + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + +libnpmpublish@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.3.0.tgz#2ceb2b36866d75a6cd7b4aa748808169f4d17e37" + integrity sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg== + dependencies: + ci-info "^3.6.1" + normalize-package-data "^5.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + proc-log "^3.0.0" + semver "^7.3.7" + sigstore "^1.4.0" + ssri "^10.0.1" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lines-and-columns@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" + integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== + +load-json-file@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== + dependencies: + graceful-fs "^4.1.15" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + 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.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +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@^4.17.11, lodash@^4.17.14, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.1.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +logform@^2.3.2, logform@^2.4.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" + integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== + dependencies: + "@colors/colors" "1.6.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + +lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +lunr@^2.3.9: + version "2.3.9" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" + integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== + +make-dir@4.0.0, make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^10.0.3: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + +make-fetch-happen@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +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== + +marked@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== + +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +memory-level@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" + integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== + dependencies: + abstract-level "^1.0.0" + functional-red-black-tree "^1.0.1" + module-error "^1.0.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +meow@^8.1.2: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merge@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" + integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== + +merkletreejs@^0.3.11: + version "0.3.11" + resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.11.tgz#e0de05c3ca1fd368de05a12cb8efb954ef6fc04f" + integrity sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ== + dependencies: + bignumber.js "^9.0.1" + buffer-reverse "^1.0.1" + crypto-js "^4.2.0" + treeify "^1.1.0" + web3-utils "^1.3.4" + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +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.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + 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.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-fetch@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" + integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@1.0.4, mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" + integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "8.1.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +modify-values@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + +mri@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" + integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multimatch@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mute-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== + +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + +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== + +negotiator@^0.6.2, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nock@^13.2.9: + version "13.5.1" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.1.tgz#4e40f9877ad0d43b7cdb474261c190f3715dd806" + integrity sha512-+s7b73fzj5KnxbKH4Oaqz07tQ8degcMilU4rrmnKvI//b0JMBU4wEXFQ8zqr+3+L4eWSfU3H/UoIVGUV0tue1Q== + dependencies: + debug "^4.1.0" + json-stringify-safe "^5.0.1" + propagate "^2.0.0" + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-addon-api@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" + integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== + +node-gyp@^9.0.0, node-gyp@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" + integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-machine-id@1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" + integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + +normalize-package-data@^2.3.2, 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-package-data@^3.0.0, normalize-package-data@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" + integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== + dependencies: + hosted-git-info "^6.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-bundled@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-bundled@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" + integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== + dependencies: + npm-normalize-package-bin "^3.0.0" + +npm-dts@^1.3.12: + version "1.3.12" + resolved "https://registry.yarnpkg.com/npm-dts/-/npm-dts-1.3.12.tgz#e422b1188fb616f41fe5c566c3d636c1aafb2ed8" + integrity sha512-3pFsz7Gf1u0cyQE2czXt8Y0hKe6kczHxlFbVrr74xWweNUit2tCDbOcL4n6KaWxyimGNJ4gzOa8KkShFA8hrdA== + dependencies: + args "5.0.3" + find-node-modules "2.1.3" + mkdirp "1.0.4" + npm-run "5.0.1" + rimraf "3.0.2" + tmp "0.2.1" + winston "3.7.2" + +npm-install-checks@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" + integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-normalize-package-bin@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== + +npm-package-arg@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" + integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== + dependencies: + hosted-git-info "^3.0.6" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" + integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== + dependencies: + hosted-git-info "^6.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +npm-packlist@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" + integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== + dependencies: + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^1.1.2" + npm-normalize-package-bin "^1.0.1" + +npm-packlist@^7.0.0: + version "7.0.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" + integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== + dependencies: + ignore-walk "^6.0.0" + +npm-path@^2.0.2, npm-path@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== + dependencies: + which "^1.2.10" + +npm-pick-manifest@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz#2159778d9c7360420c925c1a2287b5a884c713aa" + integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg== + dependencies: + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^10.0.0" + semver "^7.3.5" + +npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: + version "14.0.5" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" + integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== + dependencies: + make-fetch-happen "^11.0.0" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^10.0.0" + proc-log "^3.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npm-run/-/npm-run-5.0.1.tgz#1baea93389b50ae25a32382c8ca322398e50cd16" + integrity sha512-s7FyRpHUgaJfzkRgOnevX8rAWWsv1dofY1XS7hliWCF6LSQh+HtDfBvpigPS1krLvXw+Fi17CYMY8mUtblnyWw== + dependencies: + minimist "^1.2.0" + npm-path "^2.0.4" + npm-which "^3.0.1" + serializerr "^1.0.3" + +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + integrity sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A== + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + +npmlog@^6.0.0, npmlog@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +nx@16.10.0, "nx@>=16.5.1 < 17", nx@^16.8.1: + version "16.10.0" + resolved "https://registry.yarnpkg.com/nx/-/nx-16.10.0.tgz#b070461f7de0a3d7988bd78558ea84cda3543ace" + integrity sha512-gZl4iCC0Hx0Qe1VWmO4Bkeul2nttuXdPpfnlcDKSACGu3ZIo+uySqwOF8yBAxSTIf8xe2JRhgzJN1aFkuezEBg== + dependencies: + "@nrwl/tao" "16.10.0" + "@parcel/watcher" "2.0.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "3.0.0-rc.46" + "@zkochan/js-yaml" "0.0.6" + axios "^1.0.0" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^8.0.1" + dotenv "~16.3.1" + dotenv-expand "~10.0.0" + enquirer "~2.3.6" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^11.1.0" + glob "7.1.4" + ignore "^5.0.4" + jest-diff "^29.4.1" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + lines-and-columns "~2.0.3" + minimatch "3.0.5" + node-machine-id "1.1.12" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.5.3" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nx/nx-darwin-arm64" "16.10.0" + "@nx/nx-darwin-x64" "16.10.0" + "@nx/nx-freebsd-x64" "16.10.0" + "@nx/nx-linux-arm-gnueabihf" "16.10.0" + "@nx/nx-linux-arm64-gnu" "16.10.0" + "@nx/nx-linux-arm64-musl" "16.10.0" + "@nx/nx-linux-x64-gnu" "16.10.0" + "@nx/nx-linux-x64-musl" "16.10.0" + "@nx/nx-win32-arm64-msvc" "16.10.0" + "@nx/nx-win32-x64-msvc" "16.10.0" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/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-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.assign@^4.1.2, object.assign@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.5: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" + integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.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.2" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" + integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== + dependencies: + array.prototype.filter "^1.0.3" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" + +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.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + 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" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + 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, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + 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.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map-series@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" + integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== + +p-map@4.0.0, p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-pipe@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== + +p-queue@6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/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== + +p-waterfall@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" + integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== + dependencies: + p-reduce "^2.0.0" + +pacote@^15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" + integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== + dependencies: + "@npmcli/git" "^4.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^6.0.1" + "@npmcli/run-script" "^6.0.0" + cacache "^17.0.0" + fs-minipass "^3.0.0" + minipass "^5.0.0" + npm-package-arg "^10.0.0" + npm-packlist "^7.0.0" + npm-pick-manifest "^8.0.0" + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" + promise-retry "^2.0.1" + read-package-json "^6.0.0" + read-package-json-fast "^3.0.0" + sigstore "^1.3.0" + ssri "^10.0.0" + tar "^6.1.11" + +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@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0, parse-json@^5.2.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" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== + +parse-path@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" + integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== + dependencies: + protocols "^2.0.0" + +parse-url@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" + integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== + dependencies: + parse-path "^7.0.0" + +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.10.1, path-scurry@^1.6.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + 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.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +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== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +pirates@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^4.1.0, 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" + +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@^3.0.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +proc-log@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +promzard@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" + integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== + dependencies: + read "^2.0.0" + +propagate@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" + integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== + +protochain@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/protochain/-/protochain-1.0.5.tgz#991c407e99de264aadf8f81504b5e7faf7bfa260" + integrity sha512-4hDwFSX50C4NE6f/6zg8EPr/WLPTkFPUtG0ulWZu6bwzV2hmb50fpdQLr0HiKBAUehapaFpItzWoCLjraLJhUA== + +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" + integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== + +query-string@^8.1.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-8.2.0.tgz#f0b0ef6caa85f525dbdb745a67d3f8c08d71cc6b" + integrity sha512-tUZIw8J0CawM5wyGBiDOAp7ObdRQh4uBor/fUR9ZjmbZVvw95OD9If4w3MQxr99rg0DJZ/9CIORcpEqU5hQG7g== + dependencies: + decode-uri-component "^0.4.1" + filter-obj "^5.1.0" + split-on-first "^3.0.0" + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/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== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +raw-body@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +read-cmd-shim@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== + +read-package-json-fast@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== + dependencies: + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +read-package-json@6.0.4, read-package-json@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" + integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== + dependencies: + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^5.0.0" + npm-normalize-package-bin "^3.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.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@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +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@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" + integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== + dependencies: + mute-stream "~1.0.0" + +readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + 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" + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regexp-tree@~0.1.1: + version "0.1.27" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" + integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== + +regexp.prototype.flags@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.0: + version "2.0.2" + 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== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +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.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.20.0, 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@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@3.0.2, rimraf@^3.0.0, 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" + +rimraf@^2.2.8: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" + integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== + dependencies: + glob "^9.2.0" + +rimraf@^5.0.1: + version "5.0.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf" + integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== + dependencies: + glob "^10.3.7" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.3: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +rxjs@^7.5.5, rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-array-concat@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + 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.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +safe-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" + integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== + dependencies: + regexp-tree "~0.1.1" + +safe-stable-stringify@^2.3.1: + version "2.4.3" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@3.0.1, scrypt-js@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@4.0.3, secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@7.5.3: + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serializerr@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/serializerr/-/serializerr-1.0.3.tgz#12d4c5aa1c3ffb8f6d1dc5f395aa9455569c3f91" + integrity sha512-yXUlHj0fjbndhACj2XWtIH5eJv7b/uadyl7CJA8b9wL5mIKm+g0/sL7rDzEmjC+k5y8ggcaP8i049F4FxA0U9Q== + dependencies: + protochain "^1.0.5" + +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.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + dependencies: + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +set-function-name@^2.0.1: + 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.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +shiki@^0.14.7: + version "0.14.7" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" + integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== + dependencies: + ansi-sequence-parser "^1.1.0" + jsonc-parser "^3.2.0" + vscode-oniguruma "^1.7.0" + vscode-textmate "^8.0.0" + +side-channel@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" + integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@3.0.7, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sigstore@^1.3.0, sigstore@^1.4.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.9.0.tgz#1e7ad8933aa99b75c6898ddd0eeebc3eb0d59875" + integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A== + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + "@sigstore/sign" "^1.0.0" + "@sigstore/tuf" "^1.0.3" + make-fetch-happen "^11.0.1" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@3.0.0, slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.3.tgz#7d8a75d7ce845c0a96f710917174dba0d543a785" + integrity sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + dependencies: + is-plain-obj "^1.0.0" + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.13: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spawn-command@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" + integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== + +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.4.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" + integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== + +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.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== + +split-on-first@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-3.0.0.tgz#f04959c9ea8101b9b0bbf35a61b9ebea784a23e7" + integrity sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA== + +split2@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +ssri@^10.0.0, ssri@^10.0.1: + version "10.0.5" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" + integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== + dependencies: + minipass "^7.0.3" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +ssri@^9.0.0, ssri@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + 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.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + 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-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +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.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-outer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.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.6: + version "0.8.8" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" + integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +tar-stream@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@6.1.11: + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + +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.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tmp@0.0.33, tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@0.2.1, tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +treeify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" + integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== + +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== + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== + dependencies: + escape-string-regexp "^1.0.2" + +triple-beam@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== + +ts-api-utils@^1.0.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" + integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== + +ts-jest@^29.1.1: + version "29.1.2" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.2.tgz#7613d8c81c43c8cb312c6904027257e814c40e09" + integrity sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" + make-error "1.x" + semver "^7.5.3" + yargs-parser "^21.0.1" + +ts-node@^10.9.1: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tuf-js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" + integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== + dependencies: + "@tufjs/models" "1.0.4" + debug "^4.3.4" + make-fetch-happen "^11.1.1" + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/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-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +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.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + +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.yarnpkg.com/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== + +typed-array-buffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" + integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +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@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typedoc@^0.25.7: + version "0.25.8" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.8.tgz#7d0e1bf12d23bf1c459fd4893c82cb855911ff12" + integrity sha512-mh8oLW66nwmeB9uTa0Bdcjfis+48bAjSH3uqdzSuSawfduROQLlXw//WSNZLYDdhmMVB7YcYZicq6e8T0d271A== + dependencies: + lunr "^2.3.9" + marked "^4.3.0" + minimatch "^9.0.3" + shiki "^0.14.7" + +"typescript@>=3 < 6", typescript@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +uglify-js@^3.1.4: + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +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.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.14.0: + version "5.28.3" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" + integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== + dependencies: + "@fastify/busboy" "^2.0.0" + +unidragger@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/unidragger/-/unidragger-3.0.1.tgz#72b2e63f2571ca6e95a884b139dfec764e08c7f3" + integrity sha512-RngbGSwBFmqGBWjkaH+yB677uzR95blSQyxq6hYbrQCejH3Mx1nm8DVOuh3M9k2fQyTstWUG5qlgCnNqV/9jVw== + dependencies: + ev-emitter "^2.0.0" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +upath@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +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.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== + dependencies: + node-gyp-build "^4.3.0" + +utf-8-validate@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.3.tgz#7d8c936d854e86b24d1d655f138ee27d2636d777" + integrity sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA== + dependencies: + node-gyp-build "^4.3.0" + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@8.3.2, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +uuidv4@^6.2.13: + version "6.2.13" + resolved "https://registry.yarnpkg.com/uuidv4/-/uuidv4-6.2.13.tgz#8f95ec5ef22d1f92c8e5d4c70b735d1c89572cb7" + integrity sha512-AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ== + dependencies: + "@types/uuid" "8.3.4" + uuid "8.3.2" + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-compile-cache@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + 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" + +validate-npm-package-name@5.0.0, validate-npm-package-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" + integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== + dependencies: + builtins "^5.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" + +viem@^2.5.0, viem@^2.7.3: + version "2.7.8" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.8.tgz#ca60552190cdc501cf4e1d1140d8da7625b1b1f4" + integrity sha512-5r5pkBDBmihCvMx4b3MqtP0FoZCRWE2ML1DssU80+vhJQur0PKd4yHdLbbvoiGGVD6bYiA394juhfdSvXIGgFA== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "1.0.0" + isows "1.0.3" + ws "8.13.0" + +vscode-oniguruma@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" + integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== + +vscode-textmate@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" + integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +wcwidth@^1.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-utils@^1.3.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +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-typed-array@^1.1.13, which-typed-array@^1.1.14: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== + dependencies: + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.1" + +which@^1.2.10, which@^1.2.14: + 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, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" + integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +winston-transport@^4.5.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" + integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== + dependencies: + logform "^2.3.2" + readable-stream "^3.6.0" + triple-beam "^1.3.0" + +winston@3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.7.2.tgz#95b4eeddbec902b3db1424932ac634f887c400b1" + integrity sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng== + dependencies: + "@dabh/diagnostics" "^2.0.2" + async "^3.2.3" + is-stream "^2.0.0" + logform "^2.4.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.5.0" + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.0.1: + 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@^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.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + +write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-pkg@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" + integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== + dependencies: + sort-keys "^2.0.0" + type-fest "^0.4.1" + write-json-file "^3.2.0" + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@21.1.1, yargs-parser@^21.0.1, 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-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.0.0, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.1.0, yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.2: + 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.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^3.22.4: + version "3.22.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== From 2eb9765d066fcb7b35d08223257aeb9b38c7a78b Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 13 Feb 2024 18:19:57 +0200 Subject: [PATCH 1100/1247] Batched session router testing --- packages/common/src/utils/HttpRequests.ts | 2 +- ...batchedSessionValidationModule.e2e.spec.ts | 97 ++++++++++++------- yarn.lock | 42 ++++---- 3 files changed, 87 insertions(+), 54 deletions(-) diff --git a/packages/common/src/utils/HttpRequests.ts b/packages/common/src/utils/HttpRequests.ts index 429ff1103..192a33e4e 100644 --- a/packages/common/src/utils/HttpRequests.ts +++ b/packages/common/src/utils/HttpRequests.ts @@ -38,7 +38,7 @@ export async function sendRequest({ url, method, body }: HttpRequest, service return jsonResponse as T; } if (jsonResponse.error) { - throw new Error(`${jsonResponse.error.message} from ${service}`); + throw new Error(`Error coming from ${service}: ${jsonResponse.error.message}`); } if (jsonResponse.message) { throw new Error(jsonResponse.message); diff --git a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts index 7a13b6c57..d92a9d361 100644 --- a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts @@ -11,7 +11,7 @@ import { TestData } from "../../../tests"; import { checkBalance } from "../../../tests/utils"; import { PaymasterMode } from "@biconomy/paymaster"; -describe("Account Tests", () => { +describe("Batched Session Router Tests", () => { let mumbai: TestData; beforeEach(() => { @@ -21,6 +21,8 @@ describe("Account Tests", () => { const sessionFileStorage: SessionFileStorage = new SessionFileStorage(DEFAULT_SESSION_KEY_MANAGER_MODULE); + // Make sure smart account used for tests has at least 0.01 USDC and some MATIC + it("Should send a user op using Batched Session Validation Module", async () => { let sessionSigner: WalletClientSigner; @@ -31,7 +33,6 @@ describe("Account Tests", () => { }, minnow: { publicAddress: recipient }, publicClient, - chainId, bundlerUrl, biconomyPaymasterApiKey, } = mumbai; @@ -45,14 +46,28 @@ describe("Account Tests", () => { expect(sessionSigner).toBeTruthy(); // Create smart account - let smartAccount = await createSmartAccountClient({ - chainId, + const smartAccount = await createSmartAccountClient({ signer: sessionSigner, bundlerUrl, biconomyPaymasterApiKey, - index: 1, // Increasing index to not conflict with other test cases and use a new smart account + index: 3, // Increasing index to not conflict with other test cases and use a new smart account }); + const smartAccountAddress = await smartAccount.getAddress(); + console.log("Smart Account Address: ", smartAccountAddress); + + // First we need to check if smart account is deployed + // if not deployed, send an empty transaction to deploy it + const isDeployed = await smartAccount.isAccountDeployed(); + if (!isDeployed) { + const emptyTx = { + to: smartAccountAddress, + data: "0x", + }; + const userOpResponse = await smartAccount.sendTransaction(emptyTx, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); + await userOpResponse.wait(); + } + // Create session module const sessionModule = await createSessionKeyManagerModule({ moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, @@ -67,8 +82,8 @@ describe("Account Tests", () => { sessionKeyManagerModule: sessionModule, }); - // Set enabled call on session - const sessionKeyData1 = encodeAbiParameters( + // Set enabled call on session, only allows calling USDC contract transfer with <= 10 USDC + const sessionKeyData = encodeAbiParameters( [{ type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }], [ sessionKeyEOA, @@ -78,16 +93,9 @@ describe("Account Tests", () => { ], ); - // Set enabled call on session - const sessionKeyData2 = encodeAbiParameters( - [{ type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }], - [ - sessionKeyEOA, - "0xdA5289fCAAF71d52a80A254da614a192b693e977", // erc20 token address - recipient, // receiver address - parseUnits("10", 6), - ], - ); + // only requires that the caller is the session key + // can call anything using the mock session module + const sessionKeyData2 = encodeAbiParameters([{ type: "address" }], [sessionKeyEOA]); const erc20ModuleAddr = "0x000000D50C68705bd6897B2d17c7de32FB519fDA"; const mockSessionModuleAddr = "0x7Ba4a7338D7A90dfA465cF975Cc6691812C3772E"; @@ -98,7 +106,7 @@ describe("Account Tests", () => { validAfter: 0, sessionValidationModule: erc20ModuleAddr, sessionPublicKey: sessionKeyEOA, - sessionKeyData: sessionKeyData1, + sessionKeyData: sessionKeyData, }, { validUntil: 0, @@ -113,21 +121,22 @@ describe("Account Tests", () => { to: DEFAULT_SESSION_KEY_MANAGER_MODULE, data: sessionTxData.data, }; + // need to also call batched session module ? + // const setSessionAllowedTrx = { + // to: DEFAULT_BATCHED_SESSION_ROUTER_MODULE, + // data: sessionTxData.data, + // }; const txArray: any = []; - // Check if module is enabled - + // Check if session module is enabled const isEnabled = await smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); if (!isEnabled) { const enableModuleTrx = await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); txArray.push(enableModuleTrx); - txArray.push(setSessionAllowedTrx); - } else { - console.log("MODULE ALREADY ENABLED"); - txArray.push(setSessionAllowedTrx); } + // Check if batched session module is enabled const isBRMenabled = await smartAccount.isModuleEnabled(DEFAULT_BATCHED_SESSION_ROUTER_MODULE); if (!isBRMenabled) { // -----> enableModule batched session router module @@ -135,18 +144,38 @@ describe("Account Tests", () => { txArray.push(tx2); } - const userOp = await smartAccount.buildUserOp(txArray); + txArray.push(setSessionAllowedTrx); - const userOpResponse1 = await smartAccount.sendUserOp(userOp); + const userOpResponse1 = await smartAccount.sendTransaction(txArray); // this user op will enable the modules and setup session allowed calls const transactionDetails = await userOpResponse1.wait(); console.log("Tx Hash: ", transactionDetails.receipt.transactionHash); + // await batchedSessionModule.updateSessionStatus({ sessionPublicKey: sessionKeyEOA, sessionValidationModule: mockSessionModuleAddr }, "ACTIVE"); // What does this do ? + // smartAccount = smartAccount.setActiveValidationModule(batchedSessionModule); // adding this line throws AA23 reverted: ERC20SV Invalid Token + + const usdcBalance = await checkBalance(publicClient, await smartAccount.getAccountAddress(), "0xdA5289fCAAF71d52a80A254da614a192b693e977"); + expect(usdcBalance).toBeGreaterThan(0); + + // WARNING* If the smart account does not have enough USDC, user op execution will FAIL const encodedCall = encodeFunctionData({ abi: parseAbi(["function transfer(address _to, uint256 _value)"]), functionName: "transfer", args: [recipient, parseUnits("0.01", 6)], }); + const encodedCall2 = encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: [recipient], + }); + + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + + const mintTransaction = { + to: nftAddress, // NFT address + data: encodedCall2, + }; + const transferTx = { to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", //erc20 token address data: encodedCall, @@ -154,16 +183,8 @@ describe("Account Tests", () => { const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAccountAddress()); - smartAccount = smartAccount.setActiveValidationModule(batchedSessionModule); - - const dummyTx = { - to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", - data: "0x", - }; - - console.log(sessionSigner, "SESSION SIGNER!"); - - const userOpResponse2 = await smartAccount.sendTransaction([transferTx, dummyTx], { + // failing with dummyTx because of invalid sessionKeyData + const userOpResponse2 = await smartAccount.sendTransaction([transferTx, mintTransaction], { params: { batchSessionParams: [ { @@ -181,6 +202,10 @@ describe("Account Tests", () => { }, }); + const receipt = await userOpResponse2.wait(); + + expect(receipt.success).toBe("true"); + expect(userOpResponse2.userOpHash).toBeTruthy(); expect(userOpResponse2.userOpHash).not.toBeNull(); diff --git a/yarn.lock b/yarn.lock index 3a06bfd22..09da10782 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3171,14 +3171,15 @@ cacache@^17.0.0: unique-filename "^3.0.0" call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.6.tgz#6c46675fc7a5e9de82d75a233d586c8b7ac0d931" - integrity sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg== + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.3" - set-function-length "^1.2.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" @@ -3800,12 +3801,12 @@ defaults@^1.0.3: clone "^1.0.2" define-data-property@^1.0.1, define-data-property@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.2.tgz#f3c33b4f0102360cd7c0f5f28700f5678510b63a" - integrity sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g== + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.3.tgz#281845e04737d709c2de99e278546189b65d3055" + integrity sha512-h3GBouC+RPtNX2N0hHVLo2ZwPYurq8mLmXpOLTsw71gr7lHt5VaI4vVkDUNOfiWmm48JEXe3VM7PmLX45AMmmg== dependencies: es-errors "^1.3.0" - get-intrinsic "^1.2.2" + get-intrinsic "^1.2.4" gopd "^1.0.1" has-property-descriptors "^1.0.1" @@ -3937,9 +3938,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.648: - version "1.4.665" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz#681700bd590b0e5a3be66e3e2874ce62abcf5da5" - integrity sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw== + version "1.4.667" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.667.tgz#2767d998548e5eeeaf8bdaffd67b56796bfbed3d" + integrity sha512-66L3pLlWhTNVUhnmSA5+qDM3fwnXsM6KAqE36e2w4KN0g6pkEtlT5bs41FQtQwVwKnfhNBXiWRLPs30HSxd7Kw== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -4085,6 +4086,13 @@ es-array-method-boxes-properly@^1.0.0: resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" @@ -5260,11 +5268,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" has-proto@^1.0.1: version "1.0.1" @@ -8524,7 +8532,7 @@ set-blocking@^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.2.0: +set-function-length@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== From 536f099d32a6e10d21b5a24fbea471b4c38bd72f Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 13 Feb 2024 18:26:38 +0200 Subject: [PATCH 1101/1247] Fixed logs --- packages/common/src/utils/HttpRequests.ts | 2 +- packages/paymaster/src/BiconomyPaymaster.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/common/src/utils/HttpRequests.ts b/packages/common/src/utils/HttpRequests.ts index 429ff1103..192a33e4e 100644 --- a/packages/common/src/utils/HttpRequests.ts +++ b/packages/common/src/utils/HttpRequests.ts @@ -38,7 +38,7 @@ export async function sendRequest({ url, method, body }: HttpRequest, service return jsonResponse as T; } if (jsonResponse.error) { - throw new Error(`${jsonResponse.error.message} from ${service}`); + throw new Error(`Error coming from ${service}: ${jsonResponse.error.message}`); } if (jsonResponse.message) { throw new Error(jsonResponse.message); diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/packages/paymaster/src/BiconomyPaymaster.ts index bfe04699c..aa0af3f86 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/packages/paymaster/src/BiconomyPaymaster.ts @@ -189,7 +189,7 @@ export class BiconomyPaymaster implements IHybridPaymaster Date: Wed, 14 Feb 2024 14:23:02 +0000 Subject: [PATCH 1102/1247] Get smart account balances --- .../account/src/BiconomySmartAccountV2.ts | 78 +++++++++++ packages/account/src/utils/Types.ts | 13 ++ packages/account/tests/account.e2e.spec.ts | 21 +++ packages/modules/src/utils/Constants.ts | 1 + yarn.lock | 125 ++++++++++-------- 5 files changed, 180 insertions(+), 58 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index e5a7bfb48..8358c650f 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -15,6 +15,9 @@ import { GetContractReturnType, getContract, decodeFunctionData, + parseAbi, + formatUnits, + zeroAddress, } from "viem"; import { BaseSmartContractAccount, @@ -49,6 +52,7 @@ import { BiconomySmartAccountV2ConfigConstructorProps, PaymasterUserOperationDto, SimulationType, + BalancePayload, } from "./utils/Types.js"; import { ADDRESS_RESOLVER_ADDRESS, @@ -65,6 +69,7 @@ import { BiconomyAccountAbi } from "./abi/SmartAccount.js"; import { AccountResolverAbi } from "./abi/AccountResolver.js"; import { Logger } from "@biconomy/common"; import { FeeQuotesOrDataDto, FeeQuotesOrDataResponse } from "@biconomy/paymaster"; +import { ERC20_ABI } from "@biconomy/modules"; type UserOperationKey = keyof UserOperationStruct; @@ -252,6 +257,79 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return this.accountAddress; } + /** + * Returns token balances of Smart Account + * + * This method will fetch the token balances of the BiconomySmartAccountV2 instance. + * If left empty, it will return the balance of the native token, where the address is 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE. + * + * @param tokenAddresses - Optional. Array of token addresses to fetch the balances of. + * @returns Promise> - An array of token balances (or native token balance) of the BiconomySmartAccountV2 instance. + * @throws An error if something is wrong with the smart account instance creation. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient, BiconomySmartAccountV2 } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); + * const [usdtBalanceFromSmartAccount] = await smartAccount.getBalances([usdt]); + * + * console.log(usdtBalanceFromSmartAccount); + * + * // { + * // amount: 1000000000000000n, + * // decimals: 6, + * // address: "0xda5289fcaaf71d52a80a254da614a192b693e977", + * // formattedAmount: "1000000", + * // chainId: 80001 + * // } + * + */ + public async getBalances(tokenAddresses: Array): Promise> { + const accountAddress = this.accountAddress ?? (await this.getAccountAddress()); + + if (!tokenAddresses) { + const balance = await this.provider.getBalance({ address: accountAddress }); + return [ + { + amount: balance, + decimals: 18, + address: "0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", + formattedAmount: formatUnits(balance, 18), + chainId: this.chainId, + }, + ]; + } + const tokenContracts = tokenAddresses.map((address) => + getContract({ + address, + abi: parseAbi(ERC20_ABI), + client: this.provider, + }), + ); + + const balancePromises = tokenContracts.map((tokenContract) => tokenContract.read.balanceOf([accountAddress])) as Promise[]; + const decimalsPromises = tokenContracts.map((tokenContract) => tokenContract.read.decimals()) as Promise[]; + const [balances, decimalsPerToken] = await Promise.all([Promise.all(balancePromises), Promise.all(decimalsPromises)]); + + return balances.map((amount, index) => ({ + amount, + decimals: decimalsPerToken[index], + address: tokenAddresses[index], + formattedAmount: formatUnits(amount, decimalsPerToken[index]), + chainId: this.chainId, + })); + } + /** * Return the account's address. This value is valid even before deploying the contract. */ diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 0967d0f8f..10ffd9858 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -26,6 +26,19 @@ export type SmartAccountConfig = { bundler?: IBundler; }; +export interface BalancePayload { + /** address: The address of the account */ + address: string; + /** chainId: The chainId of the network */ + chainId: number; + /** amount: The amount of the balance */ + amount: bigint; + /** decimals: The number of decimals */ + decimals: number; + /** formattedAmount: The amount of the balance formatted */ + formattedAmount: string; +} + export interface GasOverheads { /** fixed: fixed gas overhead */ fixed: number; diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index c7594b732..fbfe2227b 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -456,4 +456,25 @@ describe("Account Tests", () => { expect(ecdsaOwnershipModule).toBe(smartAccount.activeValidationModule.getAddress()); }); + + it("should fetch balances for smartAccount", async () => { + const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + const { + whale: { viemWallet: signer }, + bundlerUrl, + publicClient, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const usdcBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress(), usdt); + const [usdtBalanceFromSmartAccount] = await smartAccount.getBalances([usdt]); + + expect(usdcBalanceBefore).toBe(usdtBalanceFromSmartAccount.amount); + }); }); diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts index 407e374d0..afed7bc33 100644 --- a/packages/modules/src/utils/Constants.ts +++ b/packages/modules/src/utils/Constants.ts @@ -48,4 +48,5 @@ export const ERC20_ABI = [ "function approve(address spender, uint256 value) external returns (bool)", "function allowance(address owner, address spender) external view returns (uint256)", "function balanceOf(address owner) external view returns (uint256)", + "function decimals() external view returns (uint8)", ]; diff --git a/yarn.lock b/yarn.lock index 3a06bfd22..6620584b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2648,7 +2648,7 @@ args@5.0.3: leven "2.1.0" mri "1.1.4" -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -2736,7 +2736,7 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -arraybuffer.prototype.slice@^1.0.2: +arraybuffer.prototype.slice@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== @@ -3170,15 +3170,16 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.6.tgz#6c46675fc7a5e9de82d75a233d586c8b7ac0d931" - integrity sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.3" - set-function-length "^1.2.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" @@ -3800,14 +3801,13 @@ defaults@^1.0.3: clone "^1.0.2" define-data-property@^1.0.1, define-data-property@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.2.tgz#f3c33b4f0102360cd7c0f5f28700f5678510b63a" - integrity sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: + es-define-property "^1.0.0" es-errors "^1.3.0" - get-intrinsic "^1.2.2" gopd "^1.0.1" - has-property-descriptors "^1.0.1" define-lazy-prop@^2.0.0: version "2.0.0" @@ -3937,9 +3937,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.648: - version "1.4.665" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz#681700bd590b0e5a3be66e3e2874ce62abcf5da5" - integrity sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw== + version "1.4.668" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.668.tgz#5cfed14f3240cdc70a359a49790cb295b1f097f1" + integrity sha512-ZOBocMYCehr9W31+GpMclR+KBaDZOoAEabLdhpZ8oU1JFDwIaFY0UDbpXVEUFc0BIP2O2Qn3rkfCjQmMR4T/bQ== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -4036,61 +4036,70 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + version "1.22.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" + integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== 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" + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.6" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.2" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" 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" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" 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-typed-array "^1.1.13" 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" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" 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-buffer "^1.0.1" 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" + which-typed-array "^1.1.14" es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-set-tostringtag@^2.0.1: +es-set-tostringtag@^2.0.2: 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== @@ -4942,7 +4951,7 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: +get-symbol-description@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== @@ -5259,12 +5268,12 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" has-proto@^1.0.1: version "1.0.1" @@ -5305,7 +5314,7 @@ 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: +hasown@^2.0.0, hasown@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== @@ -5549,7 +5558,7 @@ inquirer@^8.2.4: through "^2.3.6" wrap-ansi "^6.0.1" -internal-slot@^1.0.5: +internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -5573,7 +5582,7 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: +is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== @@ -5788,7 +5797,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.13, is-typed-array@^1.1.9: +is-typed-array@^1.1.10, is-typed-array@^1.1.13, is-typed-array@^1.1.9: version "1.1.13" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== @@ -7592,7 +7601,7 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2, object.assign@^4.1.4: +object.assign@^4.1.2, object.assign@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -8263,7 +8272,7 @@ regexp-tree@~0.1.1: resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== -regexp.prototype.flags@^1.5.1: +regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -8421,7 +8430,7 @@ rxjs@^7.5.5, rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-array-concat@^1.0.1: +safe-array-concat@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== @@ -8441,7 +8450,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex-test@^1.0.0: +safe-regex-test@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== @@ -8524,7 +8533,7 @@ set-blocking@^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.2.0: +set-function-length@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== @@ -9291,7 +9300,7 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typed-array-buffer@^1.0.0: +typed-array-buffer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== @@ -9550,9 +9559,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.5.0, viem@^2.7.3: - version "2.7.8" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.8.tgz#ca60552190cdc501cf4e1d1140d8da7625b1b1f4" - integrity sha512-5r5pkBDBmihCvMx4b3MqtP0FoZCRWE2ML1DssU80+vhJQur0PKd4yHdLbbvoiGGVD6bYiA394juhfdSvXIGgFA== + version "2.7.9" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.9.tgz#0d2b0c4722530b53fbef449d70f0cedc1bb867b0" + integrity sha512-iDfc8TwaZFp1K95zlsxYh6Cs0OWCt35Tqs8uYgXKSxtz7w075mZ0H5SJ8zSyJGoEaticVDhtdmRRX6TtcW9EeQ== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" @@ -9625,7 +9634,7 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.13, which-typed-array@^1.1.14: +which-typed-array@^1.1.14: version "1.1.14" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== From f8a1b2e4af5e95f980367b2ef98463c2bb36dd97 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 14 Feb 2024 14:27:46 +0000 Subject: [PATCH 1103/1247] lint:fix --- packages/account/src/BiconomySmartAccountV2.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 8358c650f..d92422def 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -17,7 +17,6 @@ import { decodeFunctionData, parseAbi, formatUnits, - zeroAddress, } from "viem"; import { BaseSmartContractAccount, From b7e0d987f073ff28ca125bd126c6c5c652bd4c8b Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 14 Feb 2024 14:30:36 +0000 Subject: [PATCH 1104/1247] fix comments --- packages/account/src/BiconomySmartAccountV2.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index d92422def..ed73d520c 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -259,16 +259,16 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { /** * Returns token balances of Smart Account * - * This method will fetch the token balances of the BiconomySmartAccountV2 instance. + * This method will fetch the token balances of the smartAccount instance. * If left empty, it will return the balance of the native token, where the address is 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE. * * @param tokenAddresses - Optional. Array of token addresses to fetch the balances of. - * @returns Promise> - An array of token balances (or native token balance) of the BiconomySmartAccountV2 instance. + * @returns Promise> - An array of token balances (or native token balance) of the smartAccount instance. * @throws An error if something is wrong with the smart account instance creation. * * @example * import { createClient } from "viem" - * import { createSmartAccountClient, BiconomySmartAccountV2 } from "@biconomy/account" + * import { createSmartAccountClient } from "@biconomy/account" * import { createWalletClient, http } from "viem"; * import { polygonMumbai } from "viem/chains"; * From d8d2cb29b6c601c8f0ac9953a51944afa3681f1e Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 14 Feb 2024 14:31:45 +0000 Subject: [PATCH 1105/1247] remove log --- packages/account/src/BiconomySmartAccountV2.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index ed73d520c..0eb90627d 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -282,8 +282,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); * const [usdtBalanceFromSmartAccount] = await smartAccount.getBalances([usdt]); * - * console.log(usdtBalanceFromSmartAccount); - * * // { * // amount: 1000000000000000n, * // decimals: 6, From 66eb3c43031f82a2f8c94693c0ce88e1df988301 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 14 Feb 2024 14:43:34 +0000 Subject: [PATCH 1106/1247] fix build --- .../account/src/BiconomySmartAccountV2.ts | 7 +- packages/account/src/utils/Constants.ts | 10 + yarn.lock | 632 +++++------------- 3 files changed, 167 insertions(+), 482 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 0eb90627d..69e90e58f 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -39,6 +39,7 @@ import { UserOpResponse, extractChainIdFromBundlerUrl, convertSigner, + NATIVE_TOKEN_ALIAS, } from "./index.js"; import { BiconomyTokenPaymasterRequest, @@ -62,13 +63,13 @@ import { ADDRESS_ZERO, DEFAULT_ENTRYPOINT_ADDRESS, ERROR_MESSAGES, + ERC20_ABI, } from "./utils/Constants.js"; import { BiconomyFactoryAbi } from "./abi/Factory.js"; import { BiconomyAccountAbi } from "./abi/SmartAccount.js"; import { AccountResolverAbi } from "./abi/AccountResolver.js"; import { Logger } from "@biconomy/common"; import { FeeQuotesOrDataDto, FeeQuotesOrDataResponse } from "@biconomy/paymaster"; -import { ERC20_ABI } from "@biconomy/modules"; type UserOperationKey = keyof UserOperationStruct; @@ -260,7 +261,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * Returns token balances of Smart Account * * This method will fetch the token balances of the smartAccount instance. - * If left empty, it will return the balance of the native token, where the address is 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE. + * If left empty, it will return the balance of the native token, with the address set to 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE. * * @param tokenAddresses - Optional. Array of token addresses to fetch the balances of. * @returns Promise> - An array of token balances (or native token balance) of the smartAccount instance. @@ -300,7 +301,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { { amount: balance, decimals: 18, - address: "0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", + address: NATIVE_TOKEN_ALIAS, formattedAmount: formatUnits(balance, 18), chainId: this.chainId, }, diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index d6f52fc7a..171938f0f 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -62,3 +62,13 @@ export const ERROR_MESSAGES = { NO_FEE_QUOTE: "FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote", FAILED_FEE_QUOTE_FETCH: "Failed to fetch fee quote", }; + +export const NATIVE_TOKEN_ALIAS = "0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"; +export const ERC20_ABI = [ + "function transfer(address to, uint256 value) external returns (bool)", + "function transferFrom(address from, address to, uint256 value) external returns (bool)", + "function approve(address spender, uint256 value) external returns (bool)", + "function allowance(address owner, address spender) external view returns (uint256)", + "function balanceOf(address owner) external view returns (uint256)", + "function decimals() external view returns (uint8)", +]; diff --git a/yarn.lock b/yarn.lock index 6620584b7..1c5c8ad54 100644 --- a/yarn.lock +++ b/yarn.lock @@ -324,42 +324,6 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@chainsafe/as-sha256@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" - integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== - -"@chainsafe/persistent-merkle-tree@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" - integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/persistent-merkle-tree@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" - integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/ssz@^0.10.0": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" - integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.5.0" - -"@chainsafe/ssz@^0.9.2": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" - integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.4.2" - case "^1.6.3" - "@colors/colors@1.6.0": version "1.6.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" @@ -542,7 +506,7 @@ ethereum-cryptography "^2.0.0" micro-ftch "^0.3.1" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -557,7 +521,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": +"@ethersproject/abstract-provider@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== @@ -570,7 +534,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": +"@ethersproject/abstract-signer@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== @@ -581,7 +545,7 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": +"@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -592,22 +556,14 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": +"@ethersproject/base64@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -616,37 +572,21 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": +"@ethersproject/constants@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": +"@ethersproject/hash@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -661,44 +601,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -706,68 +609,26 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": +"@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": +"@ethersproject/networks@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": +"@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": +"@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== @@ -775,16 +636,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": +"@ethersproject/signing-key@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== @@ -796,19 +648,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": +"@ethersproject/strings@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -817,7 +657,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": +"@ethersproject/transactions@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== @@ -832,37 +672,7 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/signing-key" "^5.7.0" -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": +"@ethersproject/web@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== @@ -873,17 +683,6 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@fastify/busboy@^2.0.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" @@ -1324,139 +1123,141 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/ethereumjs-block@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" - integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" +"@nomicfoundation/ethereumjs-block@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.4.tgz#ff2acb98a86b9290e35e315a6abfb9aebb9cf39e" + integrity sha512-AcyacJ9eX/uPEvqsPiB+WO1ymE+kyH48qGGiGV+YTojdtas8itUTW5dehDSOXEEItWGbbzEJ4PRqnQZlWaPvDw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" ethereum-cryptography "0.1.3" - ethers "^5.7.1" -"@nomicfoundation/ethereumjs-blockchain@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" - integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-ethash" "3.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - abstract-level "^1.0.3" +"@nomicfoundation/ethereumjs-blockchain@7.0.4": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.4.tgz#b77511b389290b186c8d999e70f4b15c27ef44ea" + integrity sha512-jYsd/kwzbmpnxx86tXsYV8wZ5xGvFL+7/P0c6OlzpClHsbFzeF41KrYA9scON8Rg6bZu3ZTv6JOAgj3t7USUfg== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.4" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-ethash" "3.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" debug "^4.3.3" ethereum-cryptography "0.1.3" - level "^8.0.0" - lru-cache "^5.1.1" - memory-level "^1.0.0" + lru-cache "^10.0.0" -"@nomicfoundation/ethereumjs-common@4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" - integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== +"@nomicfoundation/ethereumjs-common@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb" + integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg== dependencies: - "@nomicfoundation/ethereumjs-util" "9.0.2" - crc-32 "^1.2.0" + "@nomicfoundation/ethereumjs-util" "9.0.4" -"@nomicfoundation/ethereumjs-ethash@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" - integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - abstract-level "^1.0.3" - bigint-crypto-utils "^3.0.23" +"@nomicfoundation/ethereumjs-ethash@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.4.tgz#06cb2502b3012fb6c11cffd44af08aecf71310da" + integrity sha512-xvIrwIMl9sSaiYKRem68+O7vYdj7Q2XWv5P7JXiIkn83918QzWHvqbswTRsH7+r6X1UEvdsURRnZbvZszEjAaQ== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + bigint-crypto-utils "^3.2.2" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-evm@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" - integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== - dependencies: - "@ethersproject/providers" "^5.7.1" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" +"@nomicfoundation/ethereumjs-evm@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.4.tgz#c9c761767283ac53946185474362230b169f8f63" + integrity sha512-lTyZZi1KpeMHzaO6cSVisR2tjiTTedjo7PcmhI/+GNFo9BmyY6QYzGeSti0sFttmjbEMioHgXxl5yrLNRg6+1w== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-statemanager" "2.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + "@types/debug" "^4.1.9" debug "^4.3.3" ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" + rustbn-wasm "^0.2.0" -"@nomicfoundation/ethereumjs-rlp@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" - integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== +"@nomicfoundation/ethereumjs-rlp@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" + integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== -"@nomicfoundation/ethereumjs-statemanager@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" - integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== +"@nomicfoundation/ethereumjs-statemanager@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.4.tgz#bf14415e1f31b5ea8b98a0c027c547d0555059b6" + integrity sha512-HPDjeFrxw6llEi+BzqXkZ+KkvFnTOPczuHBtk21hRlDiuKuZz32dPzlhpRsDBGV1b5JTmRDUVqCS1lp3Gghw4Q== dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" debug "^4.3.3" ethereum-cryptography "0.1.3" - ethers "^5.7.1" js-sdsl "^4.1.4" + lru-cache "^10.0.0" -"@nomicfoundation/ethereumjs-trie@6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" - integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== +"@nomicfoundation/ethereumjs-trie@6.0.4": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.4.tgz#688a3f76646c209365ee6d959c3d7330ede5e609" + integrity sha512-3nSwQiFMvr2VFe/aZUyinuohYvtytUqZCUCvIWcPJ/BwJH6oQdZRB42aNFBJ/8nAh2s3OcroWpBLskzW01mFKA== dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" "@types/readable-stream" "^2.3.13" ethereum-cryptography "0.1.3" + lru-cache "^10.0.0" readable-stream "^3.6.0" -"@nomicfoundation/ethereumjs-tx@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" - integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== - dependencies: - "@chainsafe/ssz" "^0.9.2" - "@ethersproject/providers" "^5.7.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" +"@nomicfoundation/ethereumjs-tx@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" + integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-util@9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" - integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== +"@nomicfoundation/ethereumjs-util@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38" + integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q== dependencies: - "@chainsafe/ssz" "^0.10.0" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-vm@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" - integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-blockchain" "7.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-evm" "2.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-statemanager" "2.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" +"@nomicfoundation/ethereumjs-verkle@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-verkle/-/ethereumjs-verkle-0.0.2.tgz#7686689edec775b2efea5a71548f417c18f7dea4" + integrity sha512-bjnfZElpYGK/XuuVRmLS3yDvr+cDs85D9oonZ0YUa5A3lgFgokWMp76zXrxX2jVQ0BfHaw12y860n1+iOi6yFQ== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + lru-cache "^10.0.0" + rust-verkle-wasm "^0.0.1" + +"@nomicfoundation/ethereumjs-vm@7.0.4": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.4.tgz#e5a6eec4877dc62dda93003c6d7afd1fe4b9625b" + integrity sha512-gsA4IhmtWHI4BofKy3kio9W+dqZQs5Ji5mLjLYxHCkat+JQBUt5szjRKra2F9nGDJ2XcI/wWb0YWUFNgln4zRQ== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.4" + "@nomicfoundation/ethereumjs-blockchain" "7.0.4" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-evm" "2.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-statemanager" "2.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" debug "^4.3.3" ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": version "0.1.1" @@ -1869,7 +1670,7 @@ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== -"@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": +"@scure/base@^1.1.1", "@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": version "1.1.5" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== @@ -2445,19 +2246,6 @@ abstract-level@1.0.3: module-error "^1.0.1" queue-microtask "^1.2.3" -abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" - integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== - dependencies: - buffer "^6.0.3" - catering "^2.1.0" - is-buffer "^2.0.5" - level-supports "^4.0.0" - level-transcoder "^1.0.1" - module-error "^1.0.1" - queue-microtask "^1.2.3" - abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" @@ -2495,11 +2283,6 @@ adm-zip@^0.4.16: resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -2875,17 +2658,12 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - before-after-hook@^2.2.0: version "2.2.3" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -bigint-crypto-utils@^3.0.23: +bigint-crypto-utils@^3.2.2: version "3.3.0" resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== @@ -2970,16 +2748,6 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browser-level@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" - integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.1" - module-error "^1.0.2" - run-parallel-limit "^1.1.0" - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -3215,12 +2983,7 @@ caniuse-lite@^1.0.30001580: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz#a0bce920155fa56a1885a69c74e1163fc34b4881" integrity sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA== -case@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" - integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== - -catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: +catering@^2.0.0, catering@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== @@ -3318,17 +3081,6 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -classic-level@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" - integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.0" - module-error "^1.0.1" - napi-macros "^2.2.2" - node-gyp-build "^4.3.0" - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -3659,11 +3411,6 @@ cosmiconfig@^8.2.0: parse-json "^5.2.0" path-type "^4.0.0" -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -4420,42 +4167,6 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethers@^5.7.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -4850,11 +4561,6 @@ function.prototype.name@^1.1.6: 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.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - 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" @@ -5199,22 +4905,23 @@ hard-rejection@^2.1.0: integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== hardhat@^2.17.3: - version "2.19.5" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.5.tgz#6017c35ae2844b669e9bcc84c3d05346d4ef031c" - integrity sha512-vx8R7zWCYVgM56vA6o0Wqx2bIIptkN4TMs9QwDqZVNGRhMzBfzqUeEYbp+69gxWp1neg2V2nYQUaaUv7aom1kw== + version "2.20.0" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.20.0.tgz#b28da8038fa5db0663a3b93668b261d3d4e7fb3d" + integrity sha512-TtWZ4mKOH5YA+PCDAGAjG7Gub2NA+egAX7RIHq5XnGrEALNXAbyP3S0I9vOE1MWCgZhn+XOFUNfDuHgkBOPoRw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-blockchain" "7.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-evm" "2.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-statemanager" "2.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - "@nomicfoundation/ethereumjs-vm" "7.0.2" + "@nomicfoundation/ethereumjs-block" "5.0.4" + "@nomicfoundation/ethereumjs-blockchain" "7.0.4" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-evm" "2.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-statemanager" "2.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + "@nomicfoundation/ethereumjs-verkle" "0.0.2" + "@nomicfoundation/ethereumjs-vm" "7.0.4" "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" @@ -6575,15 +6282,6 @@ level-transcoder@^1.0.1: buffer "^6.0.3" module-error "^1.0.1" -level@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" - integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== - dependencies: - abstract-level "^1.0.4" - browser-level "^1.0.1" - classic-level "^1.2.0" - leveldown@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" @@ -6725,7 +6423,7 @@ logform@^2.3.2, logform@^2.4.0: safe-stable-stringify "^2.3.1" triple-beam "^1.3.0" -lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": +lru-cache@^10.0.0, lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": version "10.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== @@ -6873,11 +6571,6 @@ marked@^4.3.0: resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -6887,15 +6580,6 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -memory-level@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" - integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== - dependencies: - abstract-level "^1.0.0" - functional-red-black-tree "^1.0.1" - module-error "^1.0.1" - memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -7187,7 +6871,7 @@ modify-values@^1.0.1: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -module-error@^1.0.1, module-error@^1.0.2: +module-error@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== @@ -7237,11 +6921,6 @@ mz@^2.4.0: object-assign "^4.0.1" thenify-all "^1.0.0" -napi-macros@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" - integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== - napi-macros@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" @@ -8404,13 +8083,6 @@ run-async@^2.4.0: resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -run-parallel-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" - integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== - dependencies: - queue-microtask "^1.2.2" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -8418,10 +8090,17 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rustbn.js@~0.2.0: +rust-verkle-wasm@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/rust-verkle-wasm/-/rust-verkle-wasm-0.0.1.tgz#fd8396a7060d8ee8ea10da50ab6e862948095a74" + integrity sha512-BN6fiTsxcd2dCECz/cHtGTt9cdLJR925nh7iAuRcj8ymKw7OOaPmCneQZ7JePOJ/ia27TjEL91VdOi88Yf+mcA== + +rustbn-wasm@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + resolved "https://registry.yarnpkg.com/rustbn-wasm/-/rustbn-wasm-0.2.0.tgz#0407521fb55ae69eeb4968d01885d63efd1c4ff9" + integrity sha512-FThvYFNTqrEKGqXuseeg0zR7yROh/6U1617mCHF68OVqrN1tNKRN7Tdwy4WayPVsCmmK+eMxtIZX1qL6JxTkMg== + dependencies: + "@scure/base" "^1.1.1" rxjs@^7.5.5, rxjs@^7.8.1: version "7.8.1" @@ -8476,7 +8155,7 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scrypt-js@3.0.1, scrypt-js@^3.0.0: +scrypt-js@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== @@ -9793,11 +9472,6 @@ write-pkg@4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - ws@8.13.0: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" From 8a7eb0d7e07d8cfe4b8d2abcd9a814468acb7f7e Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Wed, 14 Feb 2024 14:52:37 +0000 Subject: [PATCH 1107/1247] continued --- packages/modules/src/utils/Constants.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts index afed7bc33..407e374d0 100644 --- a/packages/modules/src/utils/Constants.ts +++ b/packages/modules/src/utils/Constants.ts @@ -48,5 +48,4 @@ export const ERC20_ABI = [ "function approve(address spender, uint256 value) external returns (bool)", "function allowance(address owner, address spender) external view returns (uint256)", "function balanceOf(address owner) external view returns (uint256)", - "function decimals() external view returns (uint8)", ]; From 00ad1daf640664130282692057fa9bb73248d562 Mon Sep 17 00:00:00 2001 From: joepegler Date: Thu, 15 Feb 2024 16:56:11 +0000 Subject: [PATCH 1108/1247] Fix tests (#422) * Fix e2e tests https://github.com/bcnmy/biconomy-client-sdk/actions/runs/7904788846/job/21575920423?pr=421#step:5:67 * Increase timeout on nonce --- .gitignore | 3 - packages/account/package.json | 6 +- packages/account/tests/account.spec.ts | 4 +- packages/modules/package.json | 4 +- yarn.lock | 662 +++++++++---------------- 5 files changed, 253 insertions(+), 426 deletions(-) diff --git a/.gitignore b/.gitignore index cc1d5d78c..ac3583499 100644 --- a/.gitignore +++ b/.gitignore @@ -69,9 +69,6 @@ packages/modules/tests/utils/sessionStorageData/* #except sessionStorageData folder !packages/modules/tests/utils/sessionStorageData/.gitkeep -# Typechain -typechain - openapi/ # docs diff --git a/packages/account/package.json b/packages/account/package.json index 07844719d..b0d28f5bc 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -55,14 +55,16 @@ "access": "public" }, "devDependencies": { + "@ethersproject/providers": "^5.7.2", + "@ethersproject/wallet": "^5.7.0", "@types/node": "^20.11.10", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "gh-pages": "^6.1.1", + "lru-cache": "^10.0.1", "nock": "^13.2.9", "npm-dts": "^1.3.12", - "typedoc": "^0.25.7", - "lru-cache": "^10.0.1" + "typedoc": "^0.25.7" }, "dependencies": { "@alchemy/aa-core": "3.0.0-alpha.4", diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 764fa66f7..7b70cb178 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -160,10 +160,10 @@ describe("Account Tests", () => { const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); - const builtUserOp = await smartAccount.buildUserOp([{ to: recipient, value: 1, data: "0x" }]); + const builtUserOp = await smartAccount.buildUserOp([{ to: recipient, value: 1 }]); console.log("builtUserOp", builtUserOp); expect(builtUserOp?.nonce?.toString()).toBe("0x0"); - }); + }, 10000); it("should have an active validation module", async () => { const { diff --git a/packages/modules/package.json b/packages/modules/package.json index 6defc5259..ac339c354 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -63,6 +63,8 @@ "@types/node": "^20.11.10", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", - "npm-dts": "^1.3.12" + "npm-dts": "^1.3.12", + "@biconomy/paymaster": "4.0.0", + "@biconomy/modules": "4.0.0" } } diff --git a/yarn.lock b/yarn.lock index 3a06bfd22..f45b6e8ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -324,42 +324,6 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@chainsafe/as-sha256@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" - integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== - -"@chainsafe/persistent-merkle-tree@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" - integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/persistent-merkle-tree@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" - integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/ssz@^0.10.0": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" - integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.5.0" - -"@chainsafe/ssz@^0.9.2": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" - integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.4.2" - case "^1.6.3" - "@colors/colors@1.6.0": version "1.6.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" @@ -542,7 +506,7 @@ ethereum-cryptography "^2.0.0" micro-ftch "^0.3.1" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -557,7 +521,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": +"@ethersproject/abstract-provider@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== @@ -570,7 +534,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": +"@ethersproject/abstract-signer@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== @@ -581,7 +545,7 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": +"@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -592,14 +556,14 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": +"@ethersproject/base64@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": +"@ethersproject/basex@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== @@ -607,7 +571,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -616,37 +580,21 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": +"@ethersproject/constants@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": +"@ethersproject/hash@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -661,7 +609,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": +"@ethersproject/hdnode@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== @@ -679,7 +627,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": +"@ethersproject/json-wallets@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== @@ -698,7 +646,7 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -706,19 +654,19 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": +"@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": +"@ethersproject/networks@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": +"@ethersproject/pbkdf2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== @@ -726,14 +674,14 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": +"@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": +"@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -759,7 +707,7 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": +"@ethersproject/random@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== @@ -767,7 +715,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": +"@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== @@ -775,7 +723,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": +"@ethersproject/sha2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== @@ -784,7 +732,7 @@ "@ethersproject/logger" "^5.7.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": +"@ethersproject/signing-key@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== @@ -796,19 +744,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": +"@ethersproject/strings@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -817,7 +753,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": +"@ethersproject/transactions@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== @@ -832,16 +768,7 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/signing-key" "^5.7.0" -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": +"@ethersproject/wallet@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== @@ -862,7 +789,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": +"@ethersproject/web@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== @@ -873,7 +800,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": +"@ethersproject/wordlists@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== @@ -1148,9 +1075,9 @@ "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.0.1": version "1.1.2" @@ -1324,139 +1251,141 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/ethereumjs-block@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" - integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" +"@nomicfoundation/ethereumjs-block@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.4.tgz#ff2acb98a86b9290e35e315a6abfb9aebb9cf39e" + integrity sha512-AcyacJ9eX/uPEvqsPiB+WO1ymE+kyH48qGGiGV+YTojdtas8itUTW5dehDSOXEEItWGbbzEJ4PRqnQZlWaPvDw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" ethereum-cryptography "0.1.3" - ethers "^5.7.1" -"@nomicfoundation/ethereumjs-blockchain@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" - integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-ethash" "3.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - abstract-level "^1.0.3" +"@nomicfoundation/ethereumjs-blockchain@7.0.4": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.4.tgz#b77511b389290b186c8d999e70f4b15c27ef44ea" + integrity sha512-jYsd/kwzbmpnxx86tXsYV8wZ5xGvFL+7/P0c6OlzpClHsbFzeF41KrYA9scON8Rg6bZu3ZTv6JOAgj3t7USUfg== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.4" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-ethash" "3.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" debug "^4.3.3" ethereum-cryptography "0.1.3" - level "^8.0.0" - lru-cache "^5.1.1" - memory-level "^1.0.0" + lru-cache "^10.0.0" -"@nomicfoundation/ethereumjs-common@4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" - integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== +"@nomicfoundation/ethereumjs-common@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb" + integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg== dependencies: - "@nomicfoundation/ethereumjs-util" "9.0.2" - crc-32 "^1.2.0" + "@nomicfoundation/ethereumjs-util" "9.0.4" -"@nomicfoundation/ethereumjs-ethash@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" - integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - abstract-level "^1.0.3" - bigint-crypto-utils "^3.0.23" +"@nomicfoundation/ethereumjs-ethash@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.4.tgz#06cb2502b3012fb6c11cffd44af08aecf71310da" + integrity sha512-xvIrwIMl9sSaiYKRem68+O7vYdj7Q2XWv5P7JXiIkn83918QzWHvqbswTRsH7+r6X1UEvdsURRnZbvZszEjAaQ== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + bigint-crypto-utils "^3.2.2" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-evm@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" - integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== - dependencies: - "@ethersproject/providers" "^5.7.1" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" +"@nomicfoundation/ethereumjs-evm@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.4.tgz#c9c761767283ac53946185474362230b169f8f63" + integrity sha512-lTyZZi1KpeMHzaO6cSVisR2tjiTTedjo7PcmhI/+GNFo9BmyY6QYzGeSti0sFttmjbEMioHgXxl5yrLNRg6+1w== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-statemanager" "2.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + "@types/debug" "^4.1.9" debug "^4.3.3" ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" + rustbn-wasm "^0.2.0" -"@nomicfoundation/ethereumjs-rlp@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" - integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== +"@nomicfoundation/ethereumjs-rlp@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" + integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== -"@nomicfoundation/ethereumjs-statemanager@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" - integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== +"@nomicfoundation/ethereumjs-statemanager@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.4.tgz#bf14415e1f31b5ea8b98a0c027c547d0555059b6" + integrity sha512-HPDjeFrxw6llEi+BzqXkZ+KkvFnTOPczuHBtk21hRlDiuKuZz32dPzlhpRsDBGV1b5JTmRDUVqCS1lp3Gghw4Q== dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" debug "^4.3.3" ethereum-cryptography "0.1.3" - ethers "^5.7.1" js-sdsl "^4.1.4" + lru-cache "^10.0.0" -"@nomicfoundation/ethereumjs-trie@6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" - integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== +"@nomicfoundation/ethereumjs-trie@6.0.4": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.4.tgz#688a3f76646c209365ee6d959c3d7330ede5e609" + integrity sha512-3nSwQiFMvr2VFe/aZUyinuohYvtytUqZCUCvIWcPJ/BwJH6oQdZRB42aNFBJ/8nAh2s3OcroWpBLskzW01mFKA== dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" "@types/readable-stream" "^2.3.13" ethereum-cryptography "0.1.3" + lru-cache "^10.0.0" readable-stream "^3.6.0" -"@nomicfoundation/ethereumjs-tx@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" - integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== - dependencies: - "@chainsafe/ssz" "^0.9.2" - "@ethersproject/providers" "^5.7.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" +"@nomicfoundation/ethereumjs-tx@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" + integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-util@9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" - integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== +"@nomicfoundation/ethereumjs-util@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38" + integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q== dependencies: - "@chainsafe/ssz" "^0.10.0" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-vm@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" - integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-blockchain" "7.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-evm" "2.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-statemanager" "2.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" +"@nomicfoundation/ethereumjs-verkle@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-verkle/-/ethereumjs-verkle-0.0.2.tgz#7686689edec775b2efea5a71548f417c18f7dea4" + integrity sha512-bjnfZElpYGK/XuuVRmLS3yDvr+cDs85D9oonZ0YUa5A3lgFgokWMp76zXrxX2jVQ0BfHaw12y860n1+iOi6yFQ== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + lru-cache "^10.0.0" + rust-verkle-wasm "^0.0.1" + +"@nomicfoundation/ethereumjs-vm@7.0.4": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.4.tgz#e5a6eec4877dc62dda93003c6d7afd1fe4b9625b" + integrity sha512-gsA4IhmtWHI4BofKy3kio9W+dqZQs5Ji5mLjLYxHCkat+JQBUt5szjRKra2F9nGDJ2XcI/wWb0YWUFNgln4zRQ== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.4" + "@nomicfoundation/ethereumjs-blockchain" "7.0.4" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-evm" "2.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-statemanager" "2.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" debug "^4.3.3" ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": version "0.1.1" @@ -1869,7 +1798,7 @@ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== -"@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": +"@scure/base@^1.1.1", "@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": version "1.1.5" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== @@ -2228,9 +2157,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292" - integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw== + version "20.11.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.18.tgz#06912d152e47c2ac0a393c62141e623ca6005d46" + integrity sha512-ABT5VWnnYneSBcNWYSCuR05M826RoMyMSGiFivXGx6ZUIsXb9vn4643IEwkg2zbEOSgAiSogtapN2fgc4mAPlw== dependencies: undici-types "~5.26.4" @@ -2445,19 +2374,6 @@ abstract-level@1.0.3: module-error "^1.0.1" queue-microtask "^1.2.3" -abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" - integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== - dependencies: - buffer "^6.0.3" - catering "^2.1.0" - is-buffer "^2.0.5" - level-supports "^4.0.0" - level-transcoder "^1.0.1" - module-error "^1.0.1" - queue-microtask "^1.2.3" - abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" @@ -2648,7 +2564,7 @@ args@5.0.3: leven "2.1.0" mri "1.1.4" -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -2736,7 +2652,7 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -arraybuffer.prototype.slice@^1.0.2: +arraybuffer.prototype.slice@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== @@ -2885,7 +2801,7 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -bigint-crypto-utils@^3.0.23: +bigint-crypto-utils@^3.2.2: version "3.3.0" resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== @@ -2970,16 +2886,6 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browser-level@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" - integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.1" - module-error "^1.0.2" - run-parallel-limit "^1.1.0" - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -2998,12 +2904,12 @@ browserify-aes@^1.2.0: safe-buffer "^5.0.1" browserslist@^4.22.2: - version "4.22.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" - integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001580" - electron-to-chromium "^1.4.648" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" node-releases "^2.0.14" update-browserslist-db "^1.0.13" @@ -3170,15 +3076,16 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.6.tgz#6c46675fc7a5e9de82d75a233d586c8b7ac0d931" - integrity sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.3" - set-function-length "^1.2.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" @@ -3209,17 +3116,12 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001580: +caniuse-lite@^1.0.30001587: version "1.0.30001587" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz#a0bce920155fa56a1885a69c74e1163fc34b4881" integrity sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA== -case@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" - integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== - -catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: +catering@^2.0.0, catering@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== @@ -3317,17 +3219,6 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -classic-level@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" - integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.0" - module-error "^1.0.1" - napi-macros "^2.2.2" - node-gyp-build "^4.3.0" - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -3658,11 +3549,6 @@ cosmiconfig@^8.2.0: parse-json "^5.2.0" path-type "^4.0.0" -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -3800,14 +3686,13 @@ defaults@^1.0.3: clone "^1.0.2" define-data-property@^1.0.1, define-data-property@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.2.tgz#f3c33b4f0102360cd7c0f5f28700f5678510b63a" - integrity sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: + es-define-property "^1.0.0" es-errors "^1.3.0" - get-intrinsic "^1.2.2" gopd "^1.0.1" - has-property-descriptors "^1.0.1" define-lazy-prop@^2.0.0: version "2.0.0" @@ -3936,10 +3821,10 @@ ejs@^3.1.7: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.648: - version "1.4.665" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz#681700bd590b0e5a3be66e3e2874ce62abcf5da5" - integrity sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw== +electron-to-chromium@^1.4.668: + version "1.4.670" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.670.tgz#0fc5ac92ada8371e898ea72d577ffc888167a017" + integrity sha512-hcijYOWjOtjKrKPtNA6tuLlA/bTLO3heFG8pQA6mLpq7dRydSWicXova5lyxDzp1iVJaYhK7J2OQlGE52KYn7A== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -4036,61 +3921,70 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + version "1.22.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" + integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== 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" + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.6" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.2" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" 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" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" 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-typed-array "^1.1.13" 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" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" 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-buffer "^1.0.1" 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" + which-typed-array "^1.1.14" es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-set-tostringtag@^2.0.1: +es-set-tostringtag@^2.0.2: 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== @@ -4411,42 +4305,6 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethers@^5.7.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -4841,11 +4699,6 @@ function.prototype.name@^1.1.6: 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.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - 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" @@ -4942,7 +4795,7 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: +get-symbol-description@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== @@ -5190,22 +5043,23 @@ hard-rejection@^2.1.0: integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== hardhat@^2.17.3: - version "2.19.5" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.5.tgz#6017c35ae2844b669e9bcc84c3d05346d4ef031c" - integrity sha512-vx8R7zWCYVgM56vA6o0Wqx2bIIptkN4TMs9QwDqZVNGRhMzBfzqUeEYbp+69gxWp1neg2V2nYQUaaUv7aom1kw== + version "2.20.1" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.20.1.tgz#3ad8f2b003a96c9ce80a55fec3575580ff2ddcd4" + integrity sha512-q75xDQiQtCZcTMBwjTovrXEU5ECr49baxr4/OBkIu/ULTPzlB20yk1dRWNmD2IFbAeAeXggaWvQAdpiScaHtPw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-blockchain" "7.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-evm" "2.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-statemanager" "2.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - "@nomicfoundation/ethereumjs-vm" "7.0.2" + "@nomicfoundation/ethereumjs-block" "5.0.4" + "@nomicfoundation/ethereumjs-blockchain" "7.0.4" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-evm" "2.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-statemanager" "2.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + "@nomicfoundation/ethereumjs-verkle" "0.0.2" + "@nomicfoundation/ethereumjs-vm" "7.0.4" "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" @@ -5259,12 +5113,12 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" has-proto@^1.0.1: version "1.0.1" @@ -5305,7 +5159,7 @@ 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: +hasown@^2.0.0, hasown@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== @@ -5549,7 +5403,7 @@ inquirer@^8.2.4: through "^2.3.6" wrap-ansi "^6.0.1" -internal-slot@^1.0.5: +internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -5573,7 +5427,7 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: +is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== @@ -5788,7 +5642,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.13, is-typed-array@^1.1.9: +is-typed-array@^1.1.10, is-typed-array@^1.1.13, is-typed-array@^1.1.9: version "1.1.13" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== @@ -6566,15 +6420,6 @@ level-transcoder@^1.0.1: buffer "^6.0.3" module-error "^1.0.1" -level@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" - integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== - dependencies: - abstract-level "^1.0.4" - browser-level "^1.0.1" - classic-level "^1.2.0" - leveldown@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" @@ -6716,7 +6561,7 @@ logform@^2.3.2, logform@^2.4.0: safe-stable-stringify "^2.3.1" triple-beam "^1.3.0" -lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": +lru-cache@^10.0.0, lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": version "10.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== @@ -6864,11 +6709,6 @@ marked@^4.3.0: resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -6878,15 +6718,6 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -memory-level@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" - integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== - dependencies: - abstract-level "^1.0.0" - functional-red-black-tree "^1.0.1" - module-error "^1.0.1" - memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -7178,7 +7009,7 @@ modify-values@^1.0.1: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -module-error@^1.0.1, module-error@^1.0.2: +module-error@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== @@ -7228,11 +7059,6 @@ mz@^2.4.0: object-assign "^4.0.1" thenify-all "^1.0.0" -napi-macros@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" - integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== - napi-macros@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" @@ -7592,7 +7418,7 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2, object.assign@^4.1.4: +object.assign@^4.1.2, object.assign@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -8263,7 +8089,7 @@ regexp-tree@~0.1.1: resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== -regexp.prototype.flags@^1.5.1: +regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -8395,13 +8221,6 @@ run-async@^2.4.0: resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -run-parallel-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" - integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== - dependencies: - queue-microtask "^1.2.2" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -8409,10 +8228,17 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rustbn.js@~0.2.0: +rust-verkle-wasm@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/rust-verkle-wasm/-/rust-verkle-wasm-0.0.1.tgz#fd8396a7060d8ee8ea10da50ab6e862948095a74" + integrity sha512-BN6fiTsxcd2dCECz/cHtGTt9cdLJR925nh7iAuRcj8ymKw7OOaPmCneQZ7JePOJ/ia27TjEL91VdOi88Yf+mcA== + +rustbn-wasm@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + resolved "https://registry.yarnpkg.com/rustbn-wasm/-/rustbn-wasm-0.2.0.tgz#0407521fb55ae69eeb4968d01885d63efd1c4ff9" + integrity sha512-FThvYFNTqrEKGqXuseeg0zR7yROh/6U1617mCHF68OVqrN1tNKRN7Tdwy4WayPVsCmmK+eMxtIZX1qL6JxTkMg== + dependencies: + "@scure/base" "^1.1.1" rxjs@^7.5.5, rxjs@^7.8.1: version "7.8.1" @@ -8421,7 +8247,7 @@ rxjs@^7.5.5, rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-array-concat@^1.0.1: +safe-array-concat@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== @@ -8441,7 +8267,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex-test@^1.0.0: +safe-regex-test@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== @@ -8524,7 +8350,7 @@ set-blocking@^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.2.0: +set-function-length@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== @@ -8733,9 +8559,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" - integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -9291,7 +9117,7 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typed-array-buffer@^1.0.0: +typed-array-buffer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== @@ -9550,9 +9376,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.5.0, viem@^2.7.3: - version "2.7.8" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.8.tgz#ca60552190cdc501cf4e1d1140d8da7625b1b1f4" - integrity sha512-5r5pkBDBmihCvMx4b3MqtP0FoZCRWE2ML1DssU80+vhJQur0PKd4yHdLbbvoiGGVD6bYiA394juhfdSvXIGgFA== + version "2.7.9" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.9.tgz#0d2b0c4722530b53fbef449d70f0cedc1bb867b0" + integrity sha512-iDfc8TwaZFp1K95zlsxYh6Cs0OWCt35Tqs8uYgXKSxtz7w075mZ0H5SJ8zSyJGoEaticVDhtdmRRX6TtcW9EeQ== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" @@ -9625,7 +9451,7 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.13, which-typed-array@^1.1.14: +which-typed-array@^1.1.14: version "1.1.14" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== From b66648ea4cf6cbc57a4732765b71067a76bab3cb Mon Sep 17 00:00:00 2001 From: GabiDev Date: Mon, 19 Feb 2024 10:41:00 +0200 Subject: [PATCH 1109/1247] Batched session router tests --- ...batchedSessionValidationModule.e2e.spec.ts | 69 +++++++++++-------- 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts index d92a9d361..a3d74bab1 100644 --- a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts @@ -19,8 +19,6 @@ describe("Batched Session Router Tests", () => { [mumbai] = testDataPerChain; }); - const sessionFileStorage: SessionFileStorage = new SessionFileStorage(DEFAULT_SESSION_KEY_MANAGER_MODULE); - // Make sure smart account used for tests has at least 0.01 USDC and some MATIC it("Should send a user op using Batched Session Validation Module", async () => { @@ -30,6 +28,7 @@ describe("Batched Session Router Tests", () => { whale: { account: { address: sessionKeyEOA }, privateKey: pvKey, + viemWallet, }, minnow: { publicAddress: recipient }, publicClient, @@ -37,6 +36,16 @@ describe("Batched Session Router Tests", () => { biconomyPaymasterApiKey, } = mumbai; + // Create smart account + let smartAccount = await createSmartAccountClient({ + signer: viemWallet, + bundlerUrl, + biconomyPaymasterApiKey, + index: 3, // Increasing index to not conflict with other test cases and use a new smart account + }); + + const sessionFileStorage: SessionFileStorage = new SessionFileStorage(DEFAULT_SESSION_KEY_MANAGER_MODULE); + try { sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); } catch (error) { @@ -45,14 +54,6 @@ describe("Batched Session Router Tests", () => { expect(sessionSigner).toBeTruthy(); - // Create smart account - const smartAccount = await createSmartAccountClient({ - signer: sessionSigner, - bundlerUrl, - biconomyPaymasterApiKey, - index: 3, // Increasing index to not conflict with other test cases and use a new smart account - }); - const smartAccountAddress = await smartAccount.getAddress(); console.log("Smart Account Address: ", smartAccountAddress); @@ -121,11 +122,6 @@ describe("Batched Session Router Tests", () => { to: DEFAULT_SESSION_KEY_MANAGER_MODULE, data: sessionTxData.data, }; - // need to also call batched session module ? - // const setSessionAllowedTrx = { - // to: DEFAULT_BATCHED_SESSION_ROUTER_MODULE, - // data: sessionTxData.data, - // }; const txArray: any = []; @@ -146,16 +142,15 @@ describe("Batched Session Router Tests", () => { txArray.push(setSessionAllowedTrx); - const userOpResponse1 = await smartAccount.sendTransaction(txArray); // this user op will enable the modules and setup session allowed calls + const userOpResponse1 = await smartAccount.sendTransaction(txArray, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); // this user op will enable the modules and setup session allowed calls const transactionDetails = await userOpResponse1.wait(); console.log("Tx Hash: ", transactionDetails.receipt.transactionHash); - // await batchedSessionModule.updateSessionStatus({ sessionPublicKey: sessionKeyEOA, sessionValidationModule: mockSessionModuleAddr }, "ACTIVE"); // What does this do ? - // smartAccount = smartAccount.setActiveValidationModule(batchedSessionModule); // adding this line throws AA23 reverted: ERC20SV Invalid Token - const usdcBalance = await checkBalance(publicClient, await smartAccount.getAccountAddress(), "0xdA5289fCAAF71d52a80A254da614a192b693e977"); expect(usdcBalance).toBeGreaterThan(0); + smartAccount = smartAccount.setActiveValidationModule(batchedSessionModule); + // WARNING* If the smart account does not have enough USDC, user op execution will FAIL const encodedCall = encodeFunctionData({ abi: parseAbi(["function transfer(address _to, uint256 _value)"]), @@ -164,27 +159,28 @@ describe("Batched Session Router Tests", () => { }); const encodedCall2 = encodeFunctionData({ - abi: parseAbi(["function safeMint(address to) public"]), - functionName: "safeMint", - args: [recipient], + abi: parseAbi(["function transfer(address _to, uint256 _value)"]), + functionName: "transfer", + args: ["0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549", parseUnits("0.01", 6)], }); - const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; + const transferTx = { + to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", + data: encodedCall, + }; - const mintTransaction = { - to: nftAddress, // NFT address + const transferTx2 = { + to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", data: encodedCall2, }; - const transferTx = { - to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", //erc20 token address - data: encodedCall, - }; + const activeModule = smartAccount.activeValidationModule; + expect(activeModule).toEqual(batchedSessionModule); const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAccountAddress()); // failing with dummyTx because of invalid sessionKeyData - const userOpResponse2 = await smartAccount.sendTransaction([transferTx, mintTransaction], { + const userOp = await smartAccount.buildUserOp([transferTx, transferTx2], { params: { batchSessionParams: [ { @@ -202,6 +198,19 @@ describe("Batched Session Router Tests", () => { }, }); + const userOpResponse2 = await smartAccount.sendUserOp(userOp, { + batchSessionParams: [ + { + sessionSigner: sessionSigner, + sessionValidationModule: erc20ModuleAddr, + }, + { + sessionSigner: sessionSigner, + sessionValidationModule: mockSessionModuleAddr, + }, + ], + }); + const receipt = await userOpResponse2.wait(); expect(receipt.success).toBe("true"); From b2f2c338efe455c9f193e72af2e77061c944aa08 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Mon, 19 Feb 2024 14:16:08 +0200 Subject: [PATCH 1110/1247] Fix batched router test --- ...batchedSessionValidationModule.e2e.spec.ts | 18 +++------------- packages/modules/tests/utils/customSession.ts | 21 ++++++++++++++----- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts index a3d74bab1..026b61bbe 100644 --- a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts @@ -6,7 +6,7 @@ import { } from "@biconomy/modules"; import { SessionFileStorage } from "./utils/customSession"; import { WalletClientSigner, createSmartAccountClient } from "../../account/src/index"; -import { Hex, encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "viem"; +import { encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "viem"; import { TestData } from "../../../tests"; import { checkBalance } from "../../../tests/utils"; import { PaymasterMode } from "@biconomy/paymaster"; @@ -44,7 +44,7 @@ describe("Batched Session Router Tests", () => { index: 3, // Increasing index to not conflict with other test cases and use a new smart account }); - const sessionFileStorage: SessionFileStorage = new SessionFileStorage(DEFAULT_SESSION_KEY_MANAGER_MODULE); + const sessionFileStorage: SessionFileStorage = new SessionFileStorage(await smartAccount.getAddress()); try { sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); @@ -180,7 +180,7 @@ describe("Batched Session Router Tests", () => { const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAccountAddress()); // failing with dummyTx because of invalid sessionKeyData - const userOp = await smartAccount.buildUserOp([transferTx, transferTx2], { + const userOpResponse2 = await smartAccount.sendTransaction([transferTx, transferTx2], { params: { batchSessionParams: [ { @@ -198,18 +198,6 @@ describe("Batched Session Router Tests", () => { }, }); - const userOpResponse2 = await smartAccount.sendUserOp(userOp, { - batchSessionParams: [ - { - sessionSigner: sessionSigner, - sessionValidationModule: erc20ModuleAddr, - }, - { - sessionSigner: sessionSigner, - sessionValidationModule: mockSessionModuleAddr, - }, - ], - }); const receipt = await userOpResponse2.wait(); diff --git a/packages/modules/tests/utils/customSession.ts b/packages/modules/tests/utils/customSession.ts index 002bcd2a5..2be5457e3 100644 --- a/packages/modules/tests/utils/customSession.ts +++ b/packages/modules/tests/utils/customSession.ts @@ -92,10 +92,21 @@ export class SessionFileStorage implements ISessionStorage { return address.toLowerCase() as Hex; } - async getSessionData(): Promise { + async getSessionData(param: SessionSearchParam): Promise { const sessions = (await this.getSessionStore()).leafNodes; - Logger.log("Got sessions", sessions); - const session = sessions[0]; + const session = sessions.find((s: SessionLeafNode) => { + if (param.sessionID) { + return s.sessionID === param.sessionID && (!param.status || s.status === param.status); + } else if (param.sessionPublicKey && param.sessionValidationModule) { + return ( + s.sessionPublicKey === this.toLowercaseAddress(param.sessionPublicKey) && + s.sessionValidationModule === this.toLowercaseAddress(param.sessionValidationModule) && + (!param.status || s.status === param.status) + ); + } else { + return undefined; + } + }); if (!session) { throw new Error("Session not found."); @@ -191,8 +202,8 @@ export class SessionFileStorage implements ISessionStorage { return new WalletClientSigner(walletClient, "json-rpc"); } - async getSignerBySession(): Promise { - const session = await this.getSessionData(); + async getSignerBySession(param: SessionSearchParam): Promise { + const session = await this.getSessionData(param); Logger.log("got session", session); const walletClientSinger = await this.getSignerByKey(session.sessionPublicKey); return walletClientSinger; From 6541707b87595d6fdac273546d4c61ca6342e8c0 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Mon, 19 Feb 2024 16:07:28 +0200 Subject: [PATCH 1111/1247] Test fixes --- .../multiChainValidationModule.e2e.spec.ts | 10 ++++++-- .../tests/sessionValidationModule.e2e.spec.ts | 25 ++++++++++--------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts index e9efcacbe..4d7cb123c 100644 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -4,7 +4,7 @@ import { createSmartAccountClient } from "../../account/src/index"; import { Hex, encodeFunctionData, parseAbi } from "viem"; import { DEFAULT_MULTICHAIN_MODULE, MultiChainValidationModule } from "@biconomy/modules"; -describe("Account with MultiChainValidation Module Tests", () => { +describe("MultiChainValidation Module Tests", () => { let mumbai: TestData; let baseSepolia: TestData; @@ -98,5 +98,11 @@ describe("Account with MultiChainValidation Module Tests", () => { expect(userOpResponse1.userOpHash).toBeTruthy(); expect(userOpResponse2.userOpHash).toBeTruthy(); - }, 30000); + + const { success: success1 } = await userOpResponse1.wait(); + const { success: success2 } = await userOpResponse2.wait(); + + expect(success1).toBe("true"); + expect(success2).toBe("true"); + }, 50000); }); diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index 87b139cf0..6cb6e0605 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -6,7 +6,7 @@ import { TestData } from "../../../tests"; import { checkBalance } from "../../../tests/utils"; import { PaymasterMode } from "@biconomy/paymaster"; -describe("Account Tests", () => { +describe("Session Validation Module Tests", () => { let mumbai: TestData; beforeEach(() => { @@ -14,8 +14,6 @@ describe("Account Tests", () => { [mumbai] = testDataPerChain; }); - const sessionFileStorage: SessionFileStorage = new SessionFileStorage(DEFAULT_SESSION_KEY_MANAGER_MODULE); - it("Should send a user op using Session Validation Module", async () => { let sessionSigner: WalletClientSigner; @@ -23,6 +21,7 @@ describe("Account Tests", () => { whale: { account: { address: sessionKeyEOA }, privateKey: pvKey, + viemWallet, }, minnow: { publicAddress: recipient }, publicClient, @@ -31,23 +30,25 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, } = mumbai; - try { - sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); - } catch (error) { - sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey }); - } - - expect(sessionSigner).toBeTruthy(); - // Create smart account let smartAccount = await createSmartAccountClient({ chainId, - signer: sessionSigner, + signer: viemWallet, bundlerUrl, biconomyPaymasterApiKey, index: 1, // Increasing index to not conflict with other test cases and use a new smart account }); + const sessionFileStorage: SessionFileStorage = new SessionFileStorage(await smartAccount.getAccountAddress()); + + try { + sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); + } catch (error) { + sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey }); + } + + expect(sessionSigner).toBeTruthy(); + // Create session module const sessionModule = await createSessionKeyManagerModule({ moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, From bf11eff20cc81e311977b1d628520540410aebcd Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 20 Feb 2024 11:03:24 +0200 Subject: [PATCH 1112/1247] Merge with develop --- .../SmartAccountFactory_v100.ts | 309 +++ .../biconomy_v1.0.0/SmartAccount_v100.ts | 1931 +++++++++++++++++ .../src/typechain/biconomy_v1.0.0/index.ts | 5 + .../ECDSAOwnershipRegistryModule_v100.ts | 434 ++++ .../MultiChainValidationModule_v100.ts | 434 ++++ .../SmartAccountFactory_v200.ts | 545 +++++ .../biconomy_v2.0.0/SmartAccount_v200.ts | 1450 +++++++++++++ .../src/typechain/biconomy_v2.0.0/index.ts | 7 + packages/common/src/typechain/common.ts | 46 + .../typechain/entrypoint/EntryPoint_v005.ts | 1216 +++++++++++ .../typechain/entrypoint/EntryPoint_v006.ts | 1216 +++++++++++ .../common/src/typechain/entrypoint/index.ts | 5 + .../SmartAccountFactory_v100__factory.ts | 233 ++ .../SmartAccount_v100__factory.ts | 1739 +++++++++++++++ .../factories/biconomy_v1.0.0/index.ts | 5 + ...SAOwnershipRegistryModule_v100__factory.ts | 357 +++ ...ultiChainValidationModule_v100__factory.ts | 357 +++ .../SmartAccountFactory_v200__factory.ts | 361 +++ .../SmartAccount_v200__factory.ts | 1239 +++++++++++ .../factories/biconomy_v2.0.0/index.ts | 7 + .../entrypoint/EntryPoint_v005__factory.ts | 1370 ++++++++++++ .../entrypoint/EntryPoint_v006__factory.ts | 1370 ++++++++++++ .../typechain/factories/entrypoint/index.ts | 5 + .../common/src/typechain/factories/index.ts | 7 + .../misc/AddressResolver__factory.ts | 317 +++ .../src/typechain/factories/misc/index.ts | 4 + packages/common/src/typechain/index.ts | 30 + .../src/typechain/misc/AddressResolver.ts | 300 +++ packages/common/src/typechain/misc/index.ts | 4 + 29 files changed, 15303 insertions(+) create mode 100644 packages/common/src/typechain/biconomy_v1.0.0/SmartAccountFactory_v100.ts create mode 100644 packages/common/src/typechain/biconomy_v1.0.0/SmartAccount_v100.ts create mode 100644 packages/common/src/typechain/biconomy_v1.0.0/index.ts create mode 100644 packages/common/src/typechain/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100.ts create mode 100644 packages/common/src/typechain/biconomy_v2.0.0/MultiChainValidationModule_v100.ts create mode 100644 packages/common/src/typechain/biconomy_v2.0.0/SmartAccountFactory_v200.ts create mode 100644 packages/common/src/typechain/biconomy_v2.0.0/SmartAccount_v200.ts create mode 100644 packages/common/src/typechain/biconomy_v2.0.0/index.ts create mode 100644 packages/common/src/typechain/common.ts create mode 100644 packages/common/src/typechain/entrypoint/EntryPoint_v005.ts create mode 100644 packages/common/src/typechain/entrypoint/EntryPoint_v006.ts create mode 100644 packages/common/src/typechain/entrypoint/index.ts create mode 100644 packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccountFactory_v100__factory.ts create mode 100644 packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccount_v100__factory.ts create mode 100644 packages/common/src/typechain/factories/biconomy_v1.0.0/index.ts create mode 100644 packages/common/src/typechain/factories/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100__factory.ts create mode 100644 packages/common/src/typechain/factories/biconomy_v2.0.0/MultiChainValidationModule_v100__factory.ts create mode 100644 packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccountFactory_v200__factory.ts create mode 100644 packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccount_v200__factory.ts create mode 100644 packages/common/src/typechain/factories/biconomy_v2.0.0/index.ts create mode 100644 packages/common/src/typechain/factories/entrypoint/EntryPoint_v005__factory.ts create mode 100644 packages/common/src/typechain/factories/entrypoint/EntryPoint_v006__factory.ts create mode 100644 packages/common/src/typechain/factories/entrypoint/index.ts create mode 100644 packages/common/src/typechain/factories/index.ts create mode 100644 packages/common/src/typechain/factories/misc/AddressResolver__factory.ts create mode 100644 packages/common/src/typechain/factories/misc/index.ts create mode 100644 packages/common/src/typechain/index.ts create mode 100644 packages/common/src/typechain/misc/AddressResolver.ts create mode 100644 packages/common/src/typechain/misc/index.ts diff --git a/packages/common/src/typechain/biconomy_v1.0.0/SmartAccountFactory_v100.ts b/packages/common/src/typechain/biconomy_v1.0.0/SmartAccountFactory_v100.ts new file mode 100644 index 000000000..6b2b60fb3 --- /dev/null +++ b/packages/common/src/typechain/biconomy_v1.0.0/SmartAccountFactory_v100.ts @@ -0,0 +1,309 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../common"; + +export interface SmartAccountFactory_v100Interface extends utils.Interface { + functions: { + "accountCreationCode()": FunctionFragment; + "basicImplementation()": FunctionFragment; + "deployAccount(address)": FunctionFragment; + "deployCounterFactualAccount(address,uint256)": FunctionFragment; + "getAddressForCounterFactualAccount(address,uint256)": FunctionFragment; + "minimalHandler()": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "accountCreationCode" + | "basicImplementation" + | "deployAccount" + | "deployCounterFactualAccount" + | "getAddressForCounterFactualAccount" + | "minimalHandler" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "accountCreationCode", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "basicImplementation", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "deployAccount", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "deployCounterFactualAccount", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getAddressForCounterFactualAccount", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "minimalHandler", + values?: undefined + ): string; + + decodeFunctionResult( + functionFragment: "accountCreationCode", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "basicImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "deployAccount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "deployCounterFactualAccount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getAddressForCounterFactualAccount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "minimalHandler", + data: BytesLike + ): Result; + + events: { + "AccountCreation(address,address,uint256)": EventFragment; + "AccountCreationWithoutIndex(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AccountCreation"): EventFragment; + getEvent( + nameOrSignatureOrTopic: "AccountCreationWithoutIndex" + ): EventFragment; +} + +export interface AccountCreationEventObject { + account: string; + owner: string; + index: BigNumber; +} +export type AccountCreationEvent = TypedEvent< + [string, string, BigNumber], + AccountCreationEventObject +>; + +export type AccountCreationEventFilter = TypedEventFilter; + +export interface AccountCreationWithoutIndexEventObject { + account: string; + owner: string; +} +export type AccountCreationWithoutIndexEvent = TypedEvent< + [string, string], + AccountCreationWithoutIndexEventObject +>; + +export type AccountCreationWithoutIndexEventFilter = + TypedEventFilter; + +export interface SmartAccountFactory_v100 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: SmartAccountFactory_v100Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + accountCreationCode(overrides?: CallOverrides): Promise<[string]>; + + basicImplementation(overrides?: CallOverrides): Promise<[string]>; + + deployAccount( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deployCounterFactualAccount( + _owner: PromiseOrValue, + _index: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddressForCounterFactualAccount( + _owner: PromiseOrValue, + _index: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string] & { _account: string }>; + + minimalHandler(overrides?: CallOverrides): Promise<[string]>; + }; + + accountCreationCode(overrides?: CallOverrides): Promise; + + basicImplementation(overrides?: CallOverrides): Promise; + + deployAccount( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deployCounterFactualAccount( + _owner: PromiseOrValue, + _index: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddressForCounterFactualAccount( + _owner: PromiseOrValue, + _index: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + minimalHandler(overrides?: CallOverrides): Promise; + + callStatic: { + accountCreationCode(overrides?: CallOverrides): Promise; + + basicImplementation(overrides?: CallOverrides): Promise; + + deployAccount( + _owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deployCounterFactualAccount( + _owner: PromiseOrValue, + _index: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getAddressForCounterFactualAccount( + _owner: PromiseOrValue, + _index: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + minimalHandler(overrides?: CallOverrides): Promise; + }; + + filters: { + "AccountCreation(address,address,uint256)"( + account?: PromiseOrValue | null, + owner?: PromiseOrValue | null, + index?: PromiseOrValue | null + ): AccountCreationEventFilter; + AccountCreation( + account?: PromiseOrValue | null, + owner?: PromiseOrValue | null, + index?: PromiseOrValue | null + ): AccountCreationEventFilter; + + "AccountCreationWithoutIndex(address,address)"( + account?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): AccountCreationWithoutIndexEventFilter; + AccountCreationWithoutIndex( + account?: PromiseOrValue | null, + owner?: PromiseOrValue | null + ): AccountCreationWithoutIndexEventFilter; + }; + + estimateGas: { + accountCreationCode(overrides?: CallOverrides): Promise; + + basicImplementation(overrides?: CallOverrides): Promise; + + deployAccount( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deployCounterFactualAccount( + _owner: PromiseOrValue, + _index: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddressForCounterFactualAccount( + _owner: PromiseOrValue, + _index: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + minimalHandler(overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + accountCreationCode( + overrides?: CallOverrides + ): Promise; + + basicImplementation( + overrides?: CallOverrides + ): Promise; + + deployAccount( + _owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deployCounterFactualAccount( + _owner: PromiseOrValue, + _index: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddressForCounterFactualAccount( + _owner: PromiseOrValue, + _index: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + minimalHandler(overrides?: CallOverrides): Promise; + }; +} diff --git a/packages/common/src/typechain/biconomy_v1.0.0/SmartAccount_v100.ts b/packages/common/src/typechain/biconomy_v1.0.0/SmartAccount_v100.ts new file mode 100644 index 000000000..956ed8f0b --- /dev/null +++ b/packages/common/src/typechain/biconomy_v1.0.0/SmartAccount_v100.ts @@ -0,0 +1,1931 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../common"; + +export type TransactionStruct = { + to: PromiseOrValue; + operation: PromiseOrValue; + value: PromiseOrValue; + data: PromiseOrValue; + targetTxGas: PromiseOrValue; +}; + +export type TransactionStructOutput = [ + string, + number, + BigNumber, + string, + BigNumber +] & { + to: string; + operation: number; + value: BigNumber; + data: string; + targetTxGas: BigNumber; +}; + +export type FeeRefundStruct = { + baseGas: PromiseOrValue; + gasPrice: PromiseOrValue; + tokenGasPriceFactor: PromiseOrValue; + gasToken: PromiseOrValue; + refundReceiver: PromiseOrValue; +}; + +export type FeeRefundStructOutput = [ + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + baseGas: BigNumber; + gasPrice: BigNumber; + tokenGasPriceFactor: BigNumber; + gasToken: string; + refundReceiver: string; +}; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface SmartAccount_v100Interface extends utils.Interface { + functions: { + "VERSION()": FunctionFragment; + "addDeposit()": FunctionFragment; + "checkSignatures(bytes32,bytes)": FunctionFragment; + "disableModule(address,address)": FunctionFragment; + "domainSeparator()": FunctionFragment; + "enableModule(address)": FunctionFragment; + "encodeTransactionData((address,uint8,uint256,bytes,uint256),(uint256,uint256,uint256,address,address),uint256)": FunctionFragment; + "entryPoint()": FunctionFragment; + "execTransaction((address,uint8,uint256,bytes,uint256),(uint256,uint256,uint256,address,address),bytes)": FunctionFragment; + "execTransactionFromModule(address,uint256,bytes,uint8)": FunctionFragment; + "execTransactionFromModuleReturnData(address,uint256,bytes,uint8)": FunctionFragment; + "execTransaction_S6W((address,uint8,uint256,bytes,uint256),(uint256,uint256,uint256,address,address),bytes)": FunctionFragment; + "executeBatchCall(address[],uint256[],bytes[])": FunctionFragment; + "executeBatchCall_4by(address[],uint256[],bytes[])": FunctionFragment; + "executeCall(address,uint256,bytes)": FunctionFragment; + "executeCall_s1m(address,uint256,bytes)": FunctionFragment; + "getChainId()": FunctionFragment; + "getDeposit()": FunctionFragment; + "getFallbackHandler()": FunctionFragment; + "getImplementation()": FunctionFragment; + "getModulesPaginated(address,uint256)": FunctionFragment; + "getNonce(uint256)": FunctionFragment; + "getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,uint256,address,address,uint256)": FunctionFragment; + "handlePaymentRevert(uint256,uint256,uint256,uint256,address,address)": FunctionFragment; + "init(address,address)": FunctionFragment; + "isModuleEnabled(address)": FunctionFragment; + "isValidSignature(bytes32,bytes)": FunctionFragment; + "nonce()": FunctionFragment; + "nonces(uint256)": FunctionFragment; + "owner()": FunctionFragment; + "pullTokens(address,address,uint256)": FunctionFragment; + "requiredTxGas(address,uint256,bytes,uint8)": FunctionFragment; + "setFallbackHandler(address)": FunctionFragment; + "setOwner(address)": FunctionFragment; + "supportsInterface(bytes4)": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "updateImplementation(address)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "withdrawDepositTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "VERSION" + | "addDeposit" + | "checkSignatures" + | "disableModule" + | "domainSeparator" + | "enableModule" + | "encodeTransactionData" + | "entryPoint" + | "execTransaction" + | "execTransactionFromModule" + | "execTransactionFromModuleReturnData" + | "execTransaction_S6W" + | "executeBatchCall" + | "executeBatchCall_4by" + | "executeCall" + | "executeCall_s1m" + | "getChainId" + | "getDeposit" + | "getFallbackHandler" + | "getImplementation" + | "getModulesPaginated" + | "getNonce" + | "getTransactionHash" + | "handlePaymentRevert" + | "init" + | "isModuleEnabled" + | "isValidSignature" + | "nonce" + | "nonces" + | "owner" + | "pullTokens" + | "requiredTxGas" + | "setFallbackHandler" + | "setOwner" + | "supportsInterface" + | "transfer" + | "updateImplementation" + | "validateUserOp" + | "withdrawDepositTo" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "VERSION", values?: undefined): string; + encodeFunctionData( + functionFragment: "addDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "checkSignatures", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "disableModule", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "domainSeparator", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "enableModule", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "encodeTransactionData", + values: [TransactionStruct, FeeRefundStruct, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "execTransaction", + values: [TransactionStruct, FeeRefundStruct, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "execTransactionFromModule", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "execTransactionFromModuleReturnData", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "execTransaction_S6W", + values: [TransactionStruct, FeeRefundStruct, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "executeBatchCall", + values: [ + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue[] + ] + ): string; + encodeFunctionData( + functionFragment: "executeBatchCall_4by", + values: [ + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue[] + ] + ): string; + encodeFunctionData( + functionFragment: "executeCall", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "executeCall_s1m", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "getChainId", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getFallbackHandler", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getImplementation", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getModulesPaginated", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getNonce", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getTransactionHash", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "handlePaymentRevert", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "init", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isModuleEnabled", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "nonce", values?: undefined): string; + encodeFunctionData( + functionFragment: "nonces", + values: [PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "pullTokens", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "requiredTxGas", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "setFallbackHandler", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "setOwner", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "supportsInterface", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "transfer", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "updateImplementation", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawDepositTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "VERSION", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "checkSignatures", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "disableModule", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "domainSeparator", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "enableModule", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "encodeTransactionData", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "execTransaction", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "execTransactionFromModule", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "execTransactionFromModuleReturnData", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "execTransaction_S6W", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "executeBatchCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "executeBatchCall_4by", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "executeCall", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "executeCall_s1m", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getChainId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getFallbackHandler", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getModulesPaginated", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getNonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getTransactionHash", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "handlePaymentRevert", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "init", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "isModuleEnabled", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pullTokens", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "requiredTxGas", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "setFallbackHandler", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "setOwner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "updateImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawDepositTo", + data: BytesLike + ): Result; + + events: { + "AccountHandlePayment(bytes32,uint256)": EventFragment; + "ChangedFallbackHandler(address,address)": EventFragment; + "DisabledModule(address)": EventFragment; + "EOAChanged(address,address,address)": EventFragment; + "EnabledModule(address)": EventFragment; + "ExecutionFailure(address,uint256,bytes,uint8,uint256)": EventFragment; + "ExecutionFromModuleFailure(address)": EventFragment; + "ExecutionFromModuleSuccess(address)": EventFragment; + "ExecutionSuccess(address,uint256,bytes,uint8,uint256)": EventFragment; + "ImplementationUpdated(address,address)": EventFragment; + "ModuleTransaction(address,address,uint256,bytes,uint8)": EventFragment; + "SmartAccountReceivedNativeToken(address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AccountHandlePayment"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ChangedFallbackHandler"): EventFragment; + getEvent(nameOrSignatureOrTopic: "DisabledModule"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EOAChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EnabledModule"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ExecutionFailure"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ExecutionFromModuleFailure"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ExecutionFromModuleSuccess"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ExecutionSuccess"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ImplementationUpdated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ModuleTransaction"): EventFragment; + getEvent( + nameOrSignatureOrTopic: "SmartAccountReceivedNativeToken" + ): EventFragment; +} + +export interface AccountHandlePaymentEventObject { + txHash: string; + payment: BigNumber; +} +export type AccountHandlePaymentEvent = TypedEvent< + [string, BigNumber], + AccountHandlePaymentEventObject +>; + +export type AccountHandlePaymentEventFilter = + TypedEventFilter; + +export interface ChangedFallbackHandlerEventObject { + previousHandler: string; + handler: string; +} +export type ChangedFallbackHandlerEvent = TypedEvent< + [string, string], + ChangedFallbackHandlerEventObject +>; + +export type ChangedFallbackHandlerEventFilter = + TypedEventFilter; + +export interface DisabledModuleEventObject { + module: string; +} +export type DisabledModuleEvent = TypedEvent< + [string], + DisabledModuleEventObject +>; + +export type DisabledModuleEventFilter = TypedEventFilter; + +export interface EOAChangedEventObject { + _scw: string; + _oldEOA: string; + _newEOA: string; +} +export type EOAChangedEvent = TypedEvent< + [string, string, string], + EOAChangedEventObject +>; + +export type EOAChangedEventFilter = TypedEventFilter; + +export interface EnabledModuleEventObject { + module: string; +} +export type EnabledModuleEvent = TypedEvent<[string], EnabledModuleEventObject>; + +export type EnabledModuleEventFilter = TypedEventFilter; + +export interface ExecutionFailureEventObject { + to: string; + value: BigNumber; + data: string; + operation: number; + txGas: BigNumber; +} +export type ExecutionFailureEvent = TypedEvent< + [string, BigNumber, string, number, BigNumber], + ExecutionFailureEventObject +>; + +export type ExecutionFailureEventFilter = + TypedEventFilter; + +export interface ExecutionFromModuleFailureEventObject { + module: string; +} +export type ExecutionFromModuleFailureEvent = TypedEvent< + [string], + ExecutionFromModuleFailureEventObject +>; + +export type ExecutionFromModuleFailureEventFilter = + TypedEventFilter; + +export interface ExecutionFromModuleSuccessEventObject { + module: string; +} +export type ExecutionFromModuleSuccessEvent = TypedEvent< + [string], + ExecutionFromModuleSuccessEventObject +>; + +export type ExecutionFromModuleSuccessEventFilter = + TypedEventFilter; + +export interface ExecutionSuccessEventObject { + to: string; + value: BigNumber; + data: string; + operation: number; + txGas: BigNumber; +} +export type ExecutionSuccessEvent = TypedEvent< + [string, BigNumber, string, number, BigNumber], + ExecutionSuccessEventObject +>; + +export type ExecutionSuccessEventFilter = + TypedEventFilter; + +export interface ImplementationUpdatedEventObject { + oldImplementation: string; + newImplementation: string; +} +export type ImplementationUpdatedEvent = TypedEvent< + [string, string], + ImplementationUpdatedEventObject +>; + +export type ImplementationUpdatedEventFilter = + TypedEventFilter; + +export interface ModuleTransactionEventObject { + module: string; + to: string; + value: BigNumber; + data: string; + operation: number; +} +export type ModuleTransactionEvent = TypedEvent< + [string, string, BigNumber, string, number], + ModuleTransactionEventObject +>; + +export type ModuleTransactionEventFilter = + TypedEventFilter; + +export interface SmartAccountReceivedNativeTokenEventObject { + sender: string; + value: BigNumber; +} +export type SmartAccountReceivedNativeTokenEvent = TypedEvent< + [string, BigNumber], + SmartAccountReceivedNativeTokenEventObject +>; + +export type SmartAccountReceivedNativeTokenEventFilter = + TypedEventFilter; + +export interface SmartAccount_v100 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: SmartAccount_v100Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + VERSION(overrides?: CallOverrides): Promise<[string]>; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + checkSignatures( + dataHash: PromiseOrValue, + signatures: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[void]>; + + disableModule( + prevModule: PromiseOrValue, + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + domainSeparator(overrides?: CallOverrides): Promise<[string]>; + + enableModule( + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + encodeTransactionData( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + _nonce: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + execTransaction( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + signatures: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + execTransactionFromModule( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execTransactionFromModuleReturnData( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execTransaction_S6W( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + signatures: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + executeBatchCall( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatchCall_4by( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeCall( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeCall_s1m( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getChainId(overrides?: CallOverrides): Promise<[BigNumber]>; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + getFallbackHandler( + overrides?: CallOverrides + ): Promise<[string] & { _handler: string }>; + + getImplementation( + overrides?: CallOverrides + ): Promise<[string] & { _implementation: string }>; + + getModulesPaginated( + start: PromiseOrValue, + pageSize: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string[], string] & { array: string[]; next: string }>; + + getNonce( + batchId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + getTransactionHash( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + targetTxGas: PromiseOrValue, + baseGas: PromiseOrValue, + gasPrice: PromiseOrValue, + tokenGasPriceFactor: PromiseOrValue, + gasToken: PromiseOrValue, + refundReceiver: PromiseOrValue, + _nonce: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + handlePaymentRevert( + gasUsed: PromiseOrValue, + baseGas: PromiseOrValue, + gasPrice: PromiseOrValue, + tokenGasPriceFactor: PromiseOrValue, + gasToken: PromiseOrValue, + refundReceiver: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + init( + _owner: PromiseOrValue, + _handler: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isModuleEnabled( + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + isValidSignature( + _dataHash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + nonce(overrides?: CallOverrides): Promise<[BigNumber]>; + + nonces( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + pullTokens( + token: PromiseOrValue, + dest: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + requiredTxGas( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setFallbackHandler( + handler: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + _interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + transfer( + dest: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateImplementation( + _implementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + }; + + VERSION(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + checkSignatures( + dataHash: PromiseOrValue, + signatures: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + disableModule( + prevModule: PromiseOrValue, + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + domainSeparator(overrides?: CallOverrides): Promise; + + enableModule( + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + encodeTransactionData( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + _nonce: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execTransaction( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + signatures: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + execTransactionFromModule( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execTransactionFromModuleReturnData( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execTransaction_S6W( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + signatures: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + executeBatchCall( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatchCall_4by( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeCall( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeCall_s1m( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getChainId(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getFallbackHandler(overrides?: CallOverrides): Promise; + + getImplementation(overrides?: CallOverrides): Promise; + + getModulesPaginated( + start: PromiseOrValue, + pageSize: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string[], string] & { array: string[]; next: string }>; + + getNonce( + batchId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getTransactionHash( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + targetTxGas: PromiseOrValue, + baseGas: PromiseOrValue, + gasPrice: PromiseOrValue, + tokenGasPriceFactor: PromiseOrValue, + gasToken: PromiseOrValue, + refundReceiver: PromiseOrValue, + _nonce: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + handlePaymentRevert( + gasUsed: PromiseOrValue, + baseGas: PromiseOrValue, + gasPrice: PromiseOrValue, + tokenGasPriceFactor: PromiseOrValue, + gasToken: PromiseOrValue, + refundReceiver: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + init( + _owner: PromiseOrValue, + _handler: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isModuleEnabled( + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignature( + _dataHash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + nonces( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + pullTokens( + token: PromiseOrValue, + dest: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + requiredTxGas( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setFallbackHandler( + handler: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + _interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transfer( + dest: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateImplementation( + _implementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + VERSION(overrides?: CallOverrides): Promise; + + addDeposit(overrides?: CallOverrides): Promise; + + checkSignatures( + dataHash: PromiseOrValue, + signatures: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + disableModule( + prevModule: PromiseOrValue, + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + domainSeparator(overrides?: CallOverrides): Promise; + + enableModule( + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + encodeTransactionData( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + _nonce: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execTransaction( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + signatures: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + execTransactionFromModule( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + execTransactionFromModuleReturnData( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean, string] & { success: boolean; returnData: string }>; + + execTransaction_S6W( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + signatures: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + executeBatchCall( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + executeBatchCall_4by( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + executeCall( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + executeCall_s1m( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getChainId(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getFallbackHandler(overrides?: CallOverrides): Promise; + + getImplementation(overrides?: CallOverrides): Promise; + + getModulesPaginated( + start: PromiseOrValue, + pageSize: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string[], string] & { array: string[]; next: string }>; + + getNonce( + batchId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getTransactionHash( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + targetTxGas: PromiseOrValue, + baseGas: PromiseOrValue, + gasPrice: PromiseOrValue, + tokenGasPriceFactor: PromiseOrValue, + gasToken: PromiseOrValue, + refundReceiver: PromiseOrValue, + _nonce: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + handlePaymentRevert( + gasUsed: PromiseOrValue, + baseGas: PromiseOrValue, + gasPrice: PromiseOrValue, + tokenGasPriceFactor: PromiseOrValue, + gasToken: PromiseOrValue, + refundReceiver: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + init( + _owner: PromiseOrValue, + _handler: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isModuleEnabled( + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignature( + _dataHash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + nonces( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + pullTokens( + token: PromiseOrValue, + dest: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + requiredTxGas( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + setFallbackHandler( + handler: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + setOwner( + _newOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + _interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transfer( + dest: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateImplementation( + _implementation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AccountHandlePayment(bytes32,uint256)"( + txHash?: PromiseOrValue | null, + payment?: PromiseOrValue | null + ): AccountHandlePaymentEventFilter; + AccountHandlePayment( + txHash?: PromiseOrValue | null, + payment?: PromiseOrValue | null + ): AccountHandlePaymentEventFilter; + + "ChangedFallbackHandler(address,address)"( + previousHandler?: PromiseOrValue | null, + handler?: PromiseOrValue | null + ): ChangedFallbackHandlerEventFilter; + ChangedFallbackHandler( + previousHandler?: PromiseOrValue | null, + handler?: PromiseOrValue | null + ): ChangedFallbackHandlerEventFilter; + + "DisabledModule(address)"(module?: null): DisabledModuleEventFilter; + DisabledModule(module?: null): DisabledModuleEventFilter; + + "EOAChanged(address,address,address)"( + _scw?: PromiseOrValue | null, + _oldEOA?: PromiseOrValue | null, + _newEOA?: PromiseOrValue | null + ): EOAChangedEventFilter; + EOAChanged( + _scw?: PromiseOrValue | null, + _oldEOA?: PromiseOrValue | null, + _newEOA?: PromiseOrValue | null + ): EOAChangedEventFilter; + + "EnabledModule(address)"(module?: null): EnabledModuleEventFilter; + EnabledModule(module?: null): EnabledModuleEventFilter; + + "ExecutionFailure(address,uint256,bytes,uint8,uint256)"( + to?: PromiseOrValue | null, + value?: PromiseOrValue | null, + data?: PromiseOrValue | null, + operation?: null, + txGas?: null + ): ExecutionFailureEventFilter; + ExecutionFailure( + to?: PromiseOrValue | null, + value?: PromiseOrValue | null, + data?: PromiseOrValue | null, + operation?: null, + txGas?: null + ): ExecutionFailureEventFilter; + + "ExecutionFromModuleFailure(address)"( + module?: PromiseOrValue | null + ): ExecutionFromModuleFailureEventFilter; + ExecutionFromModuleFailure( + module?: PromiseOrValue | null + ): ExecutionFromModuleFailureEventFilter; + + "ExecutionFromModuleSuccess(address)"( + module?: PromiseOrValue | null + ): ExecutionFromModuleSuccessEventFilter; + ExecutionFromModuleSuccess( + module?: PromiseOrValue | null + ): ExecutionFromModuleSuccessEventFilter; + + "ExecutionSuccess(address,uint256,bytes,uint8,uint256)"( + to?: PromiseOrValue | null, + value?: PromiseOrValue | null, + data?: PromiseOrValue | null, + operation?: null, + txGas?: null + ): ExecutionSuccessEventFilter; + ExecutionSuccess( + to?: PromiseOrValue | null, + value?: PromiseOrValue | null, + data?: PromiseOrValue | null, + operation?: null, + txGas?: null + ): ExecutionSuccessEventFilter; + + "ImplementationUpdated(address,address)"( + oldImplementation?: PromiseOrValue | null, + newImplementation?: PromiseOrValue | null + ): ImplementationUpdatedEventFilter; + ImplementationUpdated( + oldImplementation?: PromiseOrValue | null, + newImplementation?: PromiseOrValue | null + ): ImplementationUpdatedEventFilter; + + "ModuleTransaction(address,address,uint256,bytes,uint8)"( + module?: null, + to?: null, + value?: null, + data?: null, + operation?: null + ): ModuleTransactionEventFilter; + ModuleTransaction( + module?: null, + to?: null, + value?: null, + data?: null, + operation?: null + ): ModuleTransactionEventFilter; + + "SmartAccountReceivedNativeToken(address,uint256)"( + sender?: PromiseOrValue | null, + value?: PromiseOrValue | null + ): SmartAccountReceivedNativeTokenEventFilter; + SmartAccountReceivedNativeToken( + sender?: PromiseOrValue | null, + value?: PromiseOrValue | null + ): SmartAccountReceivedNativeTokenEventFilter; + }; + + estimateGas: { + VERSION(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + checkSignatures( + dataHash: PromiseOrValue, + signatures: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + disableModule( + prevModule: PromiseOrValue, + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + domainSeparator(overrides?: CallOverrides): Promise; + + enableModule( + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + encodeTransactionData( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + _nonce: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execTransaction( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + signatures: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + execTransactionFromModule( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execTransactionFromModuleReturnData( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execTransaction_S6W( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + signatures: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + executeBatchCall( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatchCall_4by( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeCall( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeCall_s1m( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getChainId(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getFallbackHandler(overrides?: CallOverrides): Promise; + + getImplementation(overrides?: CallOverrides): Promise; + + getModulesPaginated( + start: PromiseOrValue, + pageSize: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getNonce( + batchId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getTransactionHash( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + targetTxGas: PromiseOrValue, + baseGas: PromiseOrValue, + gasPrice: PromiseOrValue, + tokenGasPriceFactor: PromiseOrValue, + gasToken: PromiseOrValue, + refundReceiver: PromiseOrValue, + _nonce: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + handlePaymentRevert( + gasUsed: PromiseOrValue, + baseGas: PromiseOrValue, + gasPrice: PromiseOrValue, + tokenGasPriceFactor: PromiseOrValue, + gasToken: PromiseOrValue, + refundReceiver: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + init( + _owner: PromiseOrValue, + _handler: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isModuleEnabled( + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignature( + _dataHash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + nonces( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + pullTokens( + token: PromiseOrValue, + dest: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + requiredTxGas( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setFallbackHandler( + handler: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + _interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transfer( + dest: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateImplementation( + _implementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + VERSION(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + checkSignatures( + dataHash: PromiseOrValue, + signatures: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + disableModule( + prevModule: PromiseOrValue, + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + domainSeparator(overrides?: CallOverrides): Promise; + + enableModule( + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + encodeTransactionData( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + _nonce: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execTransaction( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + signatures: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + execTransactionFromModule( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execTransactionFromModuleReturnData( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execTransaction_S6W( + _tx: TransactionStruct, + refundInfo: FeeRefundStruct, + signatures: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + executeBatchCall( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatchCall_4by( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeCall( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeCall_s1m( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getChainId(overrides?: CallOverrides): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getFallbackHandler( + overrides?: CallOverrides + ): Promise; + + getImplementation(overrides?: CallOverrides): Promise; + + getModulesPaginated( + start: PromiseOrValue, + pageSize: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getNonce( + batchId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getTransactionHash( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + targetTxGas: PromiseOrValue, + baseGas: PromiseOrValue, + gasPrice: PromiseOrValue, + tokenGasPriceFactor: PromiseOrValue, + gasToken: PromiseOrValue, + refundReceiver: PromiseOrValue, + _nonce: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + handlePaymentRevert( + gasUsed: PromiseOrValue, + baseGas: PromiseOrValue, + gasPrice: PromiseOrValue, + tokenGasPriceFactor: PromiseOrValue, + gasToken: PromiseOrValue, + refundReceiver: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + init( + _owner: PromiseOrValue, + _handler: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isModuleEnabled( + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignature( + _dataHash: PromiseOrValue, + _signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce(overrides?: CallOverrides): Promise; + + nonces( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + owner(overrides?: CallOverrides): Promise; + + pullTokens( + token: PromiseOrValue, + dest: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + requiredTxGas( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setFallbackHandler( + handler: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setOwner( + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + _interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transfer( + dest: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + updateImplementation( + _implementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/packages/common/src/typechain/biconomy_v1.0.0/index.ts b/packages/common/src/typechain/biconomy_v1.0.0/index.ts new file mode 100644 index 000000000..c7a68fbdf --- /dev/null +++ b/packages/common/src/typechain/biconomy_v1.0.0/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { SmartAccountFactory_v100 } from "./SmartAccountFactory_v100"; +export type { SmartAccount_v100 } from "./SmartAccount_v100"; diff --git a/packages/common/src/typechain/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100.ts b/packages/common/src/typechain/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100.ts new file mode 100644 index 000000000..a649e4d13 --- /dev/null +++ b/packages/common/src/typechain/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100.ts @@ -0,0 +1,434 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface ECDSAOwnershipRegistryModule_v100Interface + extends utils.Interface { + functions: { + "NAME()": FunctionFragment; + "VERSION()": FunctionFragment; + "getOwner(address)": FunctionFragment; + "initForSmartAccount(address)": FunctionFragment; + "isValidSignature(bytes32,bytes)": FunctionFragment; + "isValidSignatureForAddress(bytes32,bytes,address)": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "NAME" + | "VERSION" + | "getOwner" + | "initForSmartAccount" + | "isValidSignature" + | "isValidSignatureForAddress" + | "renounceOwnership" + | "transferOwnership" + | "validateUserOp" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "NAME", values?: undefined): string; + encodeFunctionData(functionFragment: "VERSION", values?: undefined): string; + encodeFunctionData( + functionFragment: "getOwner", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "initForSmartAccount", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignatureForAddress", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [UserOperationStruct, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "NAME", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "VERSION", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "initForSmartAccount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignatureForAddress", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + + events: { + "OwnershipTransferred(address,address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + smartAccount: string; + oldOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface ECDSAOwnershipRegistryModule_v100 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ECDSAOwnershipRegistryModule_v100Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + NAME(overrides?: CallOverrides): Promise<[string]>; + + VERSION(overrides?: CallOverrides): Promise<[string]>; + + getOwner( + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + initForSmartAccount( + eoaOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + isValidSignatureForAddress( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + }; + + NAME(overrides?: CallOverrides): Promise; + + VERSION(overrides?: CallOverrides): Promise; + + getOwner( + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + initForSmartAccount( + eoaOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignatureForAddress( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + NAME(overrides?: CallOverrides): Promise; + + VERSION(overrides?: CallOverrides): Promise; + + getOwner( + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + initForSmartAccount( + eoaOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignatureForAddress( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + transferOwnership( + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "OwnershipTransferred(address,address,address)"( + smartAccount?: PromiseOrValue | null, + oldOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + smartAccount?: PromiseOrValue | null, + oldOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + NAME(overrides?: CallOverrides): Promise; + + VERSION(overrides?: CallOverrides): Promise; + + getOwner( + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + initForSmartAccount( + eoaOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignatureForAddress( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + NAME(overrides?: CallOverrides): Promise; + + VERSION(overrides?: CallOverrides): Promise; + + getOwner( + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + initForSmartAccount( + eoaOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignatureForAddress( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/packages/common/src/typechain/biconomy_v2.0.0/MultiChainValidationModule_v100.ts b/packages/common/src/typechain/biconomy_v2.0.0/MultiChainValidationModule_v100.ts new file mode 100644 index 000000000..5165a4759 --- /dev/null +++ b/packages/common/src/typechain/biconomy_v2.0.0/MultiChainValidationModule_v100.ts @@ -0,0 +1,434 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface MultiChainValidationModule_v100Interface + extends utils.Interface { + functions: { + "NAME()": FunctionFragment; + "VERSION()": FunctionFragment; + "getOwner(address)": FunctionFragment; + "initForSmartAccount(address)": FunctionFragment; + "isValidSignature(bytes32,bytes)": FunctionFragment; + "isValidSignatureForAddress(bytes32,bytes,address)": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "NAME" + | "VERSION" + | "getOwner" + | "initForSmartAccount" + | "isValidSignature" + | "isValidSignatureForAddress" + | "renounceOwnership" + | "transferOwnership" + | "validateUserOp" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "NAME", values?: undefined): string; + encodeFunctionData(functionFragment: "VERSION", values?: undefined): string; + encodeFunctionData( + functionFragment: "getOwner", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "initForSmartAccount", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignatureForAddress", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [UserOperationStruct, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "NAME", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "VERSION", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "initForSmartAccount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignatureForAddress", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + + events: { + "OwnershipTransferred(address,address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + smartAccount: string; + oldOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface MultiChainValidationModule_v100 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: MultiChainValidationModule_v100Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + NAME(overrides?: CallOverrides): Promise<[string]>; + + VERSION(overrides?: CallOverrides): Promise<[string]>; + + getOwner( + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + initForSmartAccount( + eoaOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + isValidSignatureForAddress( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + }; + + NAME(overrides?: CallOverrides): Promise; + + VERSION(overrides?: CallOverrides): Promise; + + getOwner( + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + initForSmartAccount( + eoaOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignatureForAddress( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + NAME(overrides?: CallOverrides): Promise; + + VERSION(overrides?: CallOverrides): Promise; + + getOwner( + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + initForSmartAccount( + eoaOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignatureForAddress( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + transferOwnership( + owner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "OwnershipTransferred(address,address,address)"( + smartAccount?: PromiseOrValue | null, + oldOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + smartAccount?: PromiseOrValue | null, + oldOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + NAME(overrides?: CallOverrides): Promise; + + VERSION(overrides?: CallOverrides): Promise; + + getOwner( + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + initForSmartAccount( + eoaOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignatureForAddress( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + NAME(overrides?: CallOverrides): Promise; + + VERSION(overrides?: CallOverrides): Promise; + + getOwner( + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + initForSmartAccount( + eoaOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignatureForAddress( + dataHash: PromiseOrValue, + moduleSignature: PromiseOrValue, + smartAccount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + owner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/packages/common/src/typechain/biconomy_v2.0.0/SmartAccountFactory_v200.ts b/packages/common/src/typechain/biconomy_v2.0.0/SmartAccountFactory_v200.ts new file mode 100644 index 000000000..7ac2573d7 --- /dev/null +++ b/packages/common/src/typechain/biconomy_v2.0.0/SmartAccountFactory_v200.ts @@ -0,0 +1,545 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../common"; + +export interface SmartAccountFactory_v200Interface extends utils.Interface { + functions: { + "accountCreationCode()": FunctionFragment; + "addStake(address,uint32)": FunctionFragment; + "basicImplementation()": FunctionFragment; + "deployAccount(address,bytes)": FunctionFragment; + "deployCounterFactualAccount(address,bytes,uint256)": FunctionFragment; + "getAddressForCounterFactualAccount(address,bytes,uint256)": FunctionFragment; + "minimalHandler()": FunctionFragment; + "owner()": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "unlockStake(address)": FunctionFragment; + "withdrawStake(address,address)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "accountCreationCode" + | "addStake" + | "basicImplementation" + | "deployAccount" + | "deployCounterFactualAccount" + | "getAddressForCounterFactualAccount" + | "minimalHandler" + | "owner" + | "renounceOwnership" + | "transferOwnership" + | "unlockStake" + | "withdrawStake" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "accountCreationCode", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "addStake", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "basicImplementation", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "deployAccount", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "deployCounterFactualAccount", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "getAddressForCounterFactualAccount", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "minimalHandler", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "unlockStake", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "withdrawStake", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "accountCreationCode", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "basicImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "deployAccount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "deployCounterFactualAccount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getAddressForCounterFactualAccount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "minimalHandler", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "unlockStake", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawStake", + data: BytesLike + ): Result; + + events: { + "AccountCreation(address,address,uint256)": EventFragment; + "AccountCreationWithoutIndex(address,address)": EventFragment; + "OwnershipTransferred(address,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AccountCreation"): EventFragment; + getEvent( + nameOrSignatureOrTopic: "AccountCreationWithoutIndex" + ): EventFragment; + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; +} + +export interface AccountCreationEventObject { + account: string; + initialAuthModule: string; + index: BigNumber; +} +export type AccountCreationEvent = TypedEvent< + [string, string, BigNumber], + AccountCreationEventObject +>; + +export type AccountCreationEventFilter = TypedEventFilter; + +export interface AccountCreationWithoutIndexEventObject { + account: string; + initialAuthModule: string; +} +export type AccountCreationWithoutIndexEvent = TypedEvent< + [string, string], + AccountCreationWithoutIndexEventObject +>; + +export type AccountCreationWithoutIndexEventFilter = + TypedEventFilter; + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface SmartAccountFactory_v200 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: SmartAccountFactory_v200Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + accountCreationCode(overrides?: CallOverrides): Promise<[string]>; + + addStake( + epAddress: PromiseOrValue, + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + basicImplementation(overrides?: CallOverrides): Promise<[string]>; + + deployAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deployCounterFactualAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + index: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddressForCounterFactualAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + index: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string] & { _account: string }>; + + minimalHandler(overrides?: CallOverrides): Promise<[string]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + epAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + epAddress: PromiseOrValue, + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + accountCreationCode(overrides?: CallOverrides): Promise; + + addStake( + epAddress: PromiseOrValue, + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + basicImplementation(overrides?: CallOverrides): Promise; + + deployAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deployCounterFactualAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + index: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddressForCounterFactualAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + index: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + minimalHandler(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + epAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + epAddress: PromiseOrValue, + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + accountCreationCode(overrides?: CallOverrides): Promise; + + addStake( + epAddress: PromiseOrValue, + unstakeDelaySec: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + basicImplementation(overrides?: CallOverrides): Promise; + + deployAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deployCounterFactualAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + index: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getAddressForCounterFactualAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + index: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + minimalHandler(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + unlockStake( + epAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawStake( + epAddress: PromiseOrValue, + withdrawAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AccountCreation(address,address,uint256)"( + account?: PromiseOrValue | null, + initialAuthModule?: PromiseOrValue | null, + index?: PromiseOrValue | null + ): AccountCreationEventFilter; + AccountCreation( + account?: PromiseOrValue | null, + initialAuthModule?: PromiseOrValue | null, + index?: PromiseOrValue | null + ): AccountCreationEventFilter; + + "AccountCreationWithoutIndex(address,address)"( + account?: PromiseOrValue | null, + initialAuthModule?: PromiseOrValue | null + ): AccountCreationWithoutIndexEventFilter; + AccountCreationWithoutIndex( + account?: PromiseOrValue | null, + initialAuthModule?: PromiseOrValue | null + ): AccountCreationWithoutIndexEventFilter; + + "OwnershipTransferred(address,address)"( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + }; + + estimateGas: { + accountCreationCode(overrides?: CallOverrides): Promise; + + addStake( + epAddress: PromiseOrValue, + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + basicImplementation(overrides?: CallOverrides): Promise; + + deployAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deployCounterFactualAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + index: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddressForCounterFactualAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + index: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + minimalHandler(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + epAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + epAddress: PromiseOrValue, + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + accountCreationCode( + overrides?: CallOverrides + ): Promise; + + addStake( + epAddress: PromiseOrValue, + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + basicImplementation( + overrides?: CallOverrides + ): Promise; + + deployAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deployCounterFactualAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + index: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAddressForCounterFactualAccount( + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + index: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + minimalHandler(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + epAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + epAddress: PromiseOrValue, + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/packages/common/src/typechain/biconomy_v2.0.0/SmartAccount_v200.ts b/packages/common/src/typechain/biconomy_v2.0.0/SmartAccount_v200.ts new file mode 100644 index 000000000..45dff696a --- /dev/null +++ b/packages/common/src/typechain/biconomy_v2.0.0/SmartAccount_v200.ts @@ -0,0 +1,1450 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export interface SmartAccount_v200Interface extends utils.Interface { + functions: { + "VERSION()": FunctionFragment; + "addDeposit()": FunctionFragment; + "disableModule(address,address)": FunctionFragment; + "enableModule(address)": FunctionFragment; + "entryPoint()": FunctionFragment; + "execBatchTransactionFromModule(address[],uint256[],bytes[],uint8[])": FunctionFragment; + "execTransactionFromModule(address,uint256,bytes,uint8,uint256)": FunctionFragment; + "execTransactionFromModule(address,uint256,bytes,uint8)": FunctionFragment; + "execTransactionFromModuleReturnData(address,uint256,bytes,uint8)": FunctionFragment; + "execute(address,uint256,bytes)": FunctionFragment; + "executeBatch(address[],uint256[],bytes[])": FunctionFragment; + "executeBatch_y6U(address[],uint256[],bytes[])": FunctionFragment; + "execute_ncC(address,uint256,bytes)": FunctionFragment; + "getDeposit()": FunctionFragment; + "getFallbackHandler()": FunctionFragment; + "getImplementation()": FunctionFragment; + "getModulesPaginated(address,uint256)": FunctionFragment; + "init(address,address,bytes)": FunctionFragment; + "isModuleEnabled(address)": FunctionFragment; + "isValidSignature(bytes32,bytes)": FunctionFragment; + "nonce(uint192)": FunctionFragment; + "noncesDeprecated(uint256)": FunctionFragment; + "ownerDeprecated()": FunctionFragment; + "setFallbackHandler(address)": FunctionFragment; + "setupAndEnableModule(address,bytes)": FunctionFragment; + "supportsInterface(bytes4)": FunctionFragment; + "updateImplementation(address)": FunctionFragment; + "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; + "withdrawDepositTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "VERSION" + | "addDeposit" + | "disableModule" + | "enableModule" + | "entryPoint" + | "execBatchTransactionFromModule" + | "execTransactionFromModule(address,uint256,bytes,uint8,uint256)" + | "execTransactionFromModule(address,uint256,bytes,uint8)" + | "execTransactionFromModuleReturnData" + | "execute" + | "executeBatch" + | "executeBatch_y6U" + | "execute_ncC" + | "getDeposit" + | "getFallbackHandler" + | "getImplementation" + | "getModulesPaginated" + | "init" + | "isModuleEnabled" + | "isValidSignature" + | "nonce" + | "noncesDeprecated" + | "ownerDeprecated" + | "setFallbackHandler" + | "setupAndEnableModule" + | "supportsInterface" + | "updateImplementation" + | "validateUserOp" + | "withdrawDepositTo" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "VERSION", values?: undefined): string; + encodeFunctionData( + functionFragment: "addDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "disableModule", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "enableModule", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "entryPoint", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "execBatchTransactionFromModule", + values: [ + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue[] + ] + ): string; + encodeFunctionData( + functionFragment: "execTransactionFromModule(address,uint256,bytes,uint8,uint256)", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "execTransactionFromModule(address,uint256,bytes,uint8)", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "execTransactionFromModuleReturnData", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "execute", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "executeBatch", + values: [ + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue[] + ] + ): string; + encodeFunctionData( + functionFragment: "executeBatch_y6U", + values: [ + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue[] + ] + ): string; + encodeFunctionData( + functionFragment: "execute_ncC", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "getDeposit", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getFallbackHandler", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getImplementation", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getModulesPaginated", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "init", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "isModuleEnabled", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isValidSignature", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "nonce", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "noncesDeprecated", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "ownerDeprecated", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "setFallbackHandler", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "setupAndEnableModule", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "supportsInterface", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "updateImplementation", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "validateUserOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdrawDepositTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "VERSION", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "disableModule", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "enableModule", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "execBatchTransactionFromModule", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "execTransactionFromModule(address,uint256,bytes,uint8,uint256)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "execTransactionFromModule(address,uint256,bytes,uint8)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "execTransactionFromModuleReturnData", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "executeBatch", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "executeBatch_y6U", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "execute_ncC", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getFallbackHandler", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getModulesPaginated", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "init", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "isModuleEnabled", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isValidSignature", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "noncesDeprecated", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "ownerDeprecated", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "setFallbackHandler", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "setupAndEnableModule", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateImplementation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateUserOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawDepositTo", + data: BytesLike + ): Result; + + events: { + "ChangedFallbackHandler(address,address)": EventFragment; + "DisabledModule(address)": EventFragment; + "EnabledModule(address)": EventFragment; + "ExecutionFailure(address,uint256,bytes,uint8,uint256)": EventFragment; + "ExecutionFromModuleFailure(address)": EventFragment; + "ExecutionFromModuleSuccess(address)": EventFragment; + "ExecutionSuccess(address,uint256,bytes,uint8,uint256)": EventFragment; + "ImplementationUpdated(address,address)": EventFragment; + "ModuleTransaction(address,address,uint256,bytes,uint8)": EventFragment; + "SmartAccountReceivedNativeToken(address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "ChangedFallbackHandler"): EventFragment; + getEvent(nameOrSignatureOrTopic: "DisabledModule"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EnabledModule"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ExecutionFailure"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ExecutionFromModuleFailure"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ExecutionFromModuleSuccess"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ExecutionSuccess"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ImplementationUpdated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ModuleTransaction"): EventFragment; + getEvent( + nameOrSignatureOrTopic: "SmartAccountReceivedNativeToken" + ): EventFragment; +} + +export interface ChangedFallbackHandlerEventObject { + previousHandler: string; + handler: string; +} +export type ChangedFallbackHandlerEvent = TypedEvent< + [string, string], + ChangedFallbackHandlerEventObject +>; + +export type ChangedFallbackHandlerEventFilter = + TypedEventFilter; + +export interface DisabledModuleEventObject { + module: string; +} +export type DisabledModuleEvent = TypedEvent< + [string], + DisabledModuleEventObject +>; + +export type DisabledModuleEventFilter = TypedEventFilter; + +export interface EnabledModuleEventObject { + module: string; +} +export type EnabledModuleEvent = TypedEvent<[string], EnabledModuleEventObject>; + +export type EnabledModuleEventFilter = TypedEventFilter; + +export interface ExecutionFailureEventObject { + to: string; + value: BigNumber; + data: string; + operation: number; + txGas: BigNumber; +} +export type ExecutionFailureEvent = TypedEvent< + [string, BigNumber, string, number, BigNumber], + ExecutionFailureEventObject +>; + +export type ExecutionFailureEventFilter = + TypedEventFilter; + +export interface ExecutionFromModuleFailureEventObject { + module: string; +} +export type ExecutionFromModuleFailureEvent = TypedEvent< + [string], + ExecutionFromModuleFailureEventObject +>; + +export type ExecutionFromModuleFailureEventFilter = + TypedEventFilter; + +export interface ExecutionFromModuleSuccessEventObject { + module: string; +} +export type ExecutionFromModuleSuccessEvent = TypedEvent< + [string], + ExecutionFromModuleSuccessEventObject +>; + +export type ExecutionFromModuleSuccessEventFilter = + TypedEventFilter; + +export interface ExecutionSuccessEventObject { + to: string; + value: BigNumber; + data: string; + operation: number; + txGas: BigNumber; +} +export type ExecutionSuccessEvent = TypedEvent< + [string, BigNumber, string, number, BigNumber], + ExecutionSuccessEventObject +>; + +export type ExecutionSuccessEventFilter = + TypedEventFilter; + +export interface ImplementationUpdatedEventObject { + oldImplementation: string; + newImplementation: string; +} +export type ImplementationUpdatedEvent = TypedEvent< + [string, string], + ImplementationUpdatedEventObject +>; + +export type ImplementationUpdatedEventFilter = + TypedEventFilter; + +export interface ModuleTransactionEventObject { + module: string; + to: string; + value: BigNumber; + data: string; + operation: number; +} +export type ModuleTransactionEvent = TypedEvent< + [string, string, BigNumber, string, number], + ModuleTransactionEventObject +>; + +export type ModuleTransactionEventFilter = + TypedEventFilter; + +export interface SmartAccountReceivedNativeTokenEventObject { + sender: string; + value: BigNumber; +} +export type SmartAccountReceivedNativeTokenEvent = TypedEvent< + [string, BigNumber], + SmartAccountReceivedNativeTokenEventObject +>; + +export type SmartAccountReceivedNativeTokenEventFilter = + TypedEventFilter; + +export interface SmartAccount_v200 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: SmartAccount_v200Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + VERSION(overrides?: CallOverrides): Promise<[string]>; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + disableModule( + prevModule: PromiseOrValue, + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + enableModule( + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise<[string]>; + + execBatchTransactionFromModule( + to: PromiseOrValue[], + value: PromiseOrValue[], + data: PromiseOrValue[], + operations: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "execTransactionFromModule(address,uint256,bytes,uint8,uint256)"( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + txGas: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "execTransactionFromModule(address,uint256,bytes,uint8)"( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execTransactionFromModuleReturnData( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch_y6U( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execute_ncC( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; + + getFallbackHandler( + overrides?: CallOverrides + ): Promise<[string] & { _handler: string }>; + + getImplementation( + overrides?: CallOverrides + ): Promise<[string] & { _implementation: string }>; + + getModulesPaginated( + start: PromiseOrValue, + pageSize: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string[], string] & { array: string[]; next: string }>; + + init( + handler: PromiseOrValue, + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isModuleEnabled( + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + isValidSignature( + dataHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + + nonce( + _key: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + noncesDeprecated( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + ownerDeprecated(overrides?: CallOverrides): Promise<[string]>; + + setFallbackHandler( + handler: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setupAndEnableModule( + setupContract: PromiseOrValue, + setupData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + _interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + updateImplementation( + _implementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + }; + + VERSION(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + disableModule( + prevModule: PromiseOrValue, + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + enableModule( + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execBatchTransactionFromModule( + to: PromiseOrValue[], + value: PromiseOrValue[], + data: PromiseOrValue[], + operations: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "execTransactionFromModule(address,uint256,bytes,uint8,uint256)"( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + txGas: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "execTransactionFromModule(address,uint256,bytes,uint8)"( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execTransactionFromModuleReturnData( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch_y6U( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execute_ncC( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getFallbackHandler(overrides?: CallOverrides): Promise; + + getImplementation(overrides?: CallOverrides): Promise; + + getModulesPaginated( + start: PromiseOrValue, + pageSize: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string[], string] & { array: string[]; next: string }>; + + init( + handler: PromiseOrValue, + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isModuleEnabled( + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce( + _key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + noncesDeprecated( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + ownerDeprecated(overrides?: CallOverrides): Promise; + + setFallbackHandler( + handler: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setupAndEnableModule( + setupContract: PromiseOrValue, + setupData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + _interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateImplementation( + _implementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + VERSION(overrides?: CallOverrides): Promise; + + addDeposit(overrides?: CallOverrides): Promise; + + disableModule( + prevModule: PromiseOrValue, + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + enableModule( + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execBatchTransactionFromModule( + to: PromiseOrValue[], + value: PromiseOrValue[], + data: PromiseOrValue[], + operations: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + "execTransactionFromModule(address,uint256,bytes,uint8,uint256)"( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + txGas: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "execTransactionFromModule(address,uint256,bytes,uint8)"( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + execTransactionFromModuleReturnData( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean, string] & { success: boolean; returnData: string }>; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + executeBatch_y6U( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + execute_ncC( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getFallbackHandler(overrides?: CallOverrides): Promise; + + getImplementation(overrides?: CallOverrides): Promise; + + getModulesPaginated( + start: PromiseOrValue, + pageSize: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string[], string] & { array: string[]; next: string }>; + + init( + handler: PromiseOrValue, + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isModuleEnabled( + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce( + _key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + noncesDeprecated( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + ownerDeprecated(overrides?: CallOverrides): Promise; + + setFallbackHandler( + handler: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + setupAndEnableModule( + setupContract: PromiseOrValue, + setupData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + _interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateImplementation( + _implementation: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "ChangedFallbackHandler(address,address)"( + previousHandler?: PromiseOrValue | null, + handler?: PromiseOrValue | null + ): ChangedFallbackHandlerEventFilter; + ChangedFallbackHandler( + previousHandler?: PromiseOrValue | null, + handler?: PromiseOrValue | null + ): ChangedFallbackHandlerEventFilter; + + "DisabledModule(address)"(module?: null): DisabledModuleEventFilter; + DisabledModule(module?: null): DisabledModuleEventFilter; + + "EnabledModule(address)"(module?: null): EnabledModuleEventFilter; + EnabledModule(module?: null): EnabledModuleEventFilter; + + "ExecutionFailure(address,uint256,bytes,uint8,uint256)"( + to?: PromiseOrValue | null, + value?: PromiseOrValue | null, + data?: PromiseOrValue | null, + operation?: null, + txGas?: null + ): ExecutionFailureEventFilter; + ExecutionFailure( + to?: PromiseOrValue | null, + value?: PromiseOrValue | null, + data?: PromiseOrValue | null, + operation?: null, + txGas?: null + ): ExecutionFailureEventFilter; + + "ExecutionFromModuleFailure(address)"( + module?: PromiseOrValue | null + ): ExecutionFromModuleFailureEventFilter; + ExecutionFromModuleFailure( + module?: PromiseOrValue | null + ): ExecutionFromModuleFailureEventFilter; + + "ExecutionFromModuleSuccess(address)"( + module?: PromiseOrValue | null + ): ExecutionFromModuleSuccessEventFilter; + ExecutionFromModuleSuccess( + module?: PromiseOrValue | null + ): ExecutionFromModuleSuccessEventFilter; + + "ExecutionSuccess(address,uint256,bytes,uint8,uint256)"( + to?: PromiseOrValue | null, + value?: PromiseOrValue | null, + data?: PromiseOrValue | null, + operation?: null, + txGas?: null + ): ExecutionSuccessEventFilter; + ExecutionSuccess( + to?: PromiseOrValue | null, + value?: PromiseOrValue | null, + data?: PromiseOrValue | null, + operation?: null, + txGas?: null + ): ExecutionSuccessEventFilter; + + "ImplementationUpdated(address,address)"( + oldImplementation?: PromiseOrValue | null, + newImplementation?: PromiseOrValue | null + ): ImplementationUpdatedEventFilter; + ImplementationUpdated( + oldImplementation?: PromiseOrValue | null, + newImplementation?: PromiseOrValue | null + ): ImplementationUpdatedEventFilter; + + "ModuleTransaction(address,address,uint256,bytes,uint8)"( + module?: null, + to?: null, + value?: null, + data?: null, + operation?: null + ): ModuleTransactionEventFilter; + ModuleTransaction( + module?: null, + to?: null, + value?: null, + data?: null, + operation?: null + ): ModuleTransactionEventFilter; + + "SmartAccountReceivedNativeToken(address,uint256)"( + sender?: PromiseOrValue | null, + value?: PromiseOrValue | null + ): SmartAccountReceivedNativeTokenEventFilter; + SmartAccountReceivedNativeToken( + sender?: PromiseOrValue | null, + value?: PromiseOrValue | null + ): SmartAccountReceivedNativeTokenEventFilter; + }; + + estimateGas: { + VERSION(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + disableModule( + prevModule: PromiseOrValue, + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + enableModule( + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execBatchTransactionFromModule( + to: PromiseOrValue[], + value: PromiseOrValue[], + data: PromiseOrValue[], + operations: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "execTransactionFromModule(address,uint256,bytes,uint8,uint256)"( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + txGas: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "execTransactionFromModule(address,uint256,bytes,uint8)"( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execTransactionFromModuleReturnData( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch_y6U( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execute_ncC( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getFallbackHandler(overrides?: CallOverrides): Promise; + + getImplementation(overrides?: CallOverrides): Promise; + + getModulesPaginated( + start: PromiseOrValue, + pageSize: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + init( + handler: PromiseOrValue, + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isModuleEnabled( + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce( + _key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + noncesDeprecated( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + ownerDeprecated(overrides?: CallOverrides): Promise; + + setFallbackHandler( + handler: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setupAndEnableModule( + setupContract: PromiseOrValue, + setupData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + _interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateImplementation( + _implementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + VERSION(overrides?: CallOverrides): Promise; + + addDeposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + disableModule( + prevModule: PromiseOrValue, + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + enableModule( + module: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + entryPoint(overrides?: CallOverrides): Promise; + + execBatchTransactionFromModule( + to: PromiseOrValue[], + value: PromiseOrValue[], + data: PromiseOrValue[], + operations: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "execTransactionFromModule(address,uint256,bytes,uint8,uint256)"( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + txGas: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "execTransactionFromModule(address,uint256,bytes,uint8)"( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execTransactionFromModuleReturnData( + to: PromiseOrValue, + value: PromiseOrValue, + data: PromiseOrValue, + operation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execute( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + executeBatch_y6U( + dest: PromiseOrValue[], + value: PromiseOrValue[], + func: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + execute_ncC( + dest: PromiseOrValue, + value: PromiseOrValue, + func: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDeposit(overrides?: CallOverrides): Promise; + + getFallbackHandler( + overrides?: CallOverrides + ): Promise; + + getImplementation(overrides?: CallOverrides): Promise; + + getModulesPaginated( + start: PromiseOrValue, + pageSize: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + init( + handler: PromiseOrValue, + moduleSetupContract: PromiseOrValue, + moduleSetupData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + isModuleEnabled( + module: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isValidSignature( + dataHash: PromiseOrValue, + signature: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonce( + _key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + noncesDeprecated( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + ownerDeprecated(overrides?: CallOverrides): Promise; + + setFallbackHandler( + handler: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setupAndEnableModule( + setupContract: PromiseOrValue, + setupData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + supportsInterface( + _interfaceId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + updateImplementation( + _implementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + validateUserOp( + userOp: UserOperationStruct, + userOpHash: PromiseOrValue, + missingAccountFunds: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawDepositTo( + withdrawAddress: PromiseOrValue, + amount: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/packages/common/src/typechain/biconomy_v2.0.0/index.ts b/packages/common/src/typechain/biconomy_v2.0.0/index.ts new file mode 100644 index 000000000..1c9013b06 --- /dev/null +++ b/packages/common/src/typechain/biconomy_v2.0.0/index.ts @@ -0,0 +1,7 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { ECDSAOwnershipRegistryModule_v100 } from "./ECDSAOwnershipRegistryModule_v100"; +export type { MultiChainValidationModule_v100 } from "./MultiChainValidationModule_v100"; +export type { SmartAccountFactory_v200 } from "./SmartAccountFactory_v200"; +export type { SmartAccount_v200 } from "./SmartAccount_v200"; diff --git a/packages/common/src/typechain/common.ts b/packages/common/src/typechain/common.ts new file mode 100644 index 000000000..4c90b08bb --- /dev/null +++ b/packages/common/src/typechain/common.ts @@ -0,0 +1,46 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { Listener } from "@ethersproject/providers"; +import type { Event, EventFilter } from "ethers"; + +export interface TypedEvent< + TArgsArray extends Array = any, + TArgsObject = any +> extends Event { + args: TArgsArray & TArgsObject; +} + +export interface TypedEventFilter<_TEvent extends TypedEvent> + extends EventFilter {} + +export interface TypedListener { + (...listenerArg: [...__TypechainArgsArray, TEvent]): void; +} + +type __TypechainArgsArray = T extends TypedEvent ? U : never; + +export interface OnEvent { + ( + eventFilter: TypedEventFilter, + listener: TypedListener + ): TRes; + (eventName: string, listener: Listener): TRes; +} + +export type MinEthersFactory = { + deploy(...a: ARGS[]): Promise; +}; + +export type GetContractTypeFromFactory = F extends MinEthersFactory< + infer C, + any +> + ? C + : never; + +export type GetARGsTypeFromFactory = F extends MinEthersFactory + ? Parameters + : never; + +export type PromiseOrValue = T | Promise; diff --git a/packages/common/src/typechain/entrypoint/EntryPoint_v005.ts b/packages/common/src/typechain/entrypoint/EntryPoint_v005.ts new file mode 100644 index 000000000..09a6a524a --- /dev/null +++ b/packages/common/src/typechain/entrypoint/EntryPoint_v005.ts @@ -0,0 +1,1216 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export declare namespace IStakeManager { + export type DepositInfoStruct = { + deposit: PromiseOrValue; + staked: PromiseOrValue; + stake: PromiseOrValue; + unstakeDelaySec: PromiseOrValue; + withdrawTime: PromiseOrValue; + }; + + export type DepositInfoStructOutput = [ + BigNumber, + boolean, + BigNumber, + number, + number + ] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: number; + }; +} + +export declare namespace IEntryPoint { + export type UserOpsPerAggregatorStruct = { + userOps: UserOperationStruct[]; + aggregator: PromiseOrValue; + signature: PromiseOrValue; + }; + + export type UserOpsPerAggregatorStructOutput = [ + UserOperationStructOutput[], + string, + string + ] & { + userOps: UserOperationStructOutput[]; + aggregator: string; + signature: string; + }; +} + +export declare namespace EntryPoint { + export type MemoryUserOpStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + paymaster: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + }; + + export type MemoryUserOpStructOutput = [ + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + BigNumber, + BigNumber + ] & { + sender: string; + nonce: BigNumber; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + paymaster: string; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + }; + + export type UserOpInfoStruct = { + mUserOp: EntryPoint.MemoryUserOpStruct; + userOpHash: PromiseOrValue; + prefund: PromiseOrValue; + contextOffset: PromiseOrValue; + preOpGas: PromiseOrValue; + }; + + export type UserOpInfoStructOutput = [ + EntryPoint.MemoryUserOpStructOutput, + string, + BigNumber, + BigNumber, + BigNumber + ] & { + mUserOp: EntryPoint.MemoryUserOpStructOutput; + userOpHash: string; + prefund: BigNumber; + contextOffset: BigNumber; + preOpGas: BigNumber; + }; +} + +export interface EntryPoint_v005Interface extends utils.Interface { + functions: { + "SIG_VALIDATION_FAILED()": FunctionFragment; + "_validateSenderAndPaymaster(bytes,address,bytes)": FunctionFragment; + "addStake(uint32)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "depositTo(address)": FunctionFragment; + "deposits(address)": FunctionFragment; + "getDepositInfo(address)": FunctionFragment; + "getNonce(address,uint192)": FunctionFragment; + "getSenderAddress(bytes)": FunctionFragment; + "getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + "handleAggregatedOps(((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)[],address)": FunctionFragment; + "handleOps((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address)": FunctionFragment; + "incrementNonce(uint192)": FunctionFragment; + "innerHandleOp(bytes,((address,uint256,uint256,uint256,uint256,address,uint256,uint256),bytes32,uint256,uint256,uint256),bytes)": FunctionFragment; + "nonceSequenceNumber(address,uint192)": FunctionFragment; + "simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),address,bytes)": FunctionFragment; + "simulateValidation((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + "unlockStake()": FunctionFragment; + "withdrawStake(address)": FunctionFragment; + "withdrawTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "SIG_VALIDATION_FAILED" + | "_validateSenderAndPaymaster" + | "addStake" + | "balanceOf" + | "depositTo" + | "deposits" + | "getDepositInfo" + | "getNonce" + | "getSenderAddress" + | "getUserOpHash" + | "handleAggregatedOps" + | "handleOps" + | "incrementNonce" + | "innerHandleOp" + | "nonceSequenceNumber" + | "simulateHandleOp" + | "simulateValidation" + | "unlockStake" + | "withdrawStake" + | "withdrawTo" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "SIG_VALIDATION_FAILED", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "_validateSenderAndPaymaster", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "addStake", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "depositTo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "deposits", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getDepositInfo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getNonce", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getSenderAddress", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getUserOpHash", + values: [UserOperationStruct] + ): string; + encodeFunctionData( + functionFragment: "handleAggregatedOps", + values: [IEntryPoint.UserOpsPerAggregatorStruct[], PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "handleOps", + values: [UserOperationStruct[], PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "incrementNonce", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "innerHandleOp", + values: [ + PromiseOrValue, + EntryPoint.UserOpInfoStruct, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "nonceSequenceNumber", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "simulateHandleOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "simulateValidation", + values: [UserOperationStruct] + ): string; + encodeFunctionData( + functionFragment: "unlockStake", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "withdrawStake", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "withdrawTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "SIG_VALIDATION_FAILED", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "_validateSenderAndPaymaster", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "depositTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "deposits", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getDepositInfo", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getNonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getSenderAddress", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getUserOpHash", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "handleAggregatedOps", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "handleOps", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "incrementNonce", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "innerHandleOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "nonceSequenceNumber", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "simulateHandleOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "simulateValidation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "unlockStake", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawStake", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + + events: { + "AccountDeployed(bytes32,address,address,address)": EventFragment; + "BeforeExecution()": EventFragment; + "Deposited(address,uint256)": EventFragment; + "SignatureAggregatorChanged(address)": EventFragment; + "StakeLocked(address,uint256,uint256)": EventFragment; + "StakeUnlocked(address,uint256)": EventFragment; + "StakeWithdrawn(address,address,uint256)": EventFragment; + "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)": EventFragment; + "UserOperationRevertReason(bytes32,address,uint256,bytes)": EventFragment; + "Withdrawn(address,address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AccountDeployed"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeforeExecution"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Deposited"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SignatureAggregatorChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "StakeLocked"): EventFragment; + getEvent(nameOrSignatureOrTopic: "StakeUnlocked"): EventFragment; + getEvent(nameOrSignatureOrTopic: "StakeWithdrawn"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UserOperationEvent"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UserOperationRevertReason"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; +} + +export interface AccountDeployedEventObject { + userOpHash: string; + sender: string; + factory: string; + paymaster: string; +} +export type AccountDeployedEvent = TypedEvent< + [string, string, string, string], + AccountDeployedEventObject +>; + +export type AccountDeployedEventFilter = TypedEventFilter; + +export interface BeforeExecutionEventObject {} +export type BeforeExecutionEvent = TypedEvent<[], BeforeExecutionEventObject>; + +export type BeforeExecutionEventFilter = TypedEventFilter; + +export interface DepositedEventObject { + account: string; + totalDeposit: BigNumber; +} +export type DepositedEvent = TypedEvent< + [string, BigNumber], + DepositedEventObject +>; + +export type DepositedEventFilter = TypedEventFilter; + +export interface SignatureAggregatorChangedEventObject { + aggregator: string; +} +export type SignatureAggregatorChangedEvent = TypedEvent< + [string], + SignatureAggregatorChangedEventObject +>; + +export type SignatureAggregatorChangedEventFilter = + TypedEventFilter; + +export interface StakeLockedEventObject { + account: string; + totalStaked: BigNumber; + unstakeDelaySec: BigNumber; +} +export type StakeLockedEvent = TypedEvent< + [string, BigNumber, BigNumber], + StakeLockedEventObject +>; + +export type StakeLockedEventFilter = TypedEventFilter; + +export interface StakeUnlockedEventObject { + account: string; + withdrawTime: BigNumber; +} +export type StakeUnlockedEvent = TypedEvent< + [string, BigNumber], + StakeUnlockedEventObject +>; + +export type StakeUnlockedEventFilter = TypedEventFilter; + +export interface StakeWithdrawnEventObject { + account: string; + withdrawAddress: string; + amount: BigNumber; +} +export type StakeWithdrawnEvent = TypedEvent< + [string, string, BigNumber], + StakeWithdrawnEventObject +>; + +export type StakeWithdrawnEventFilter = TypedEventFilter; + +export interface UserOperationEventEventObject { + userOpHash: string; + sender: string; + paymaster: string; + nonce: BigNumber; + success: boolean; + actualGasCost: BigNumber; + actualGasUsed: BigNumber; +} +export type UserOperationEventEvent = TypedEvent< + [string, string, string, BigNumber, boolean, BigNumber, BigNumber], + UserOperationEventEventObject +>; + +export type UserOperationEventEventFilter = + TypedEventFilter; + +export interface UserOperationRevertReasonEventObject { + userOpHash: string; + sender: string; + nonce: BigNumber; + revertReason: string; +} +export type UserOperationRevertReasonEvent = TypedEvent< + [string, string, BigNumber, string], + UserOperationRevertReasonEventObject +>; + +export type UserOperationRevertReasonEventFilter = + TypedEventFilter; + +export interface WithdrawnEventObject { + account: string; + withdrawAddress: string; + amount: BigNumber; +} +export type WithdrawnEvent = TypedEvent< + [string, string, BigNumber], + WithdrawnEventObject +>; + +export type WithdrawnEventFilter = TypedEventFilter; + +export interface EntryPoint_v005 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: EntryPoint_v005Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise<[BigNumber]>; + + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[void]>; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + depositTo( + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposits( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [BigNumber, boolean, BigNumber, number, number] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: number; + } + >; + + getDepositInfo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [IStakeManager.DepositInfoStructOutput] & { + info: IStakeManager.DepositInfoStructOutput; + } + >; + + getNonce( + sender: PromiseOrValue, + key: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber] & { nonce: BigNumber }>; + + getSenderAddress( + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getUserOpHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise<[string]>; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + incrementNonce( + key: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + innerHandleOp( + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + nonceSequenceNumber( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + simulateHandleOp( + op: UserOperationStruct, + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; + + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + depositTo( + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposits( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [BigNumber, boolean, BigNumber, number, number] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: number; + } + >; + + getDepositInfo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getNonce( + sender: PromiseOrValue, + key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getSenderAddress( + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getUserOpHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + incrementNonce( + key: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + innerHandleOp( + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + nonceSequenceNumber( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + simulateHandleOp( + op: UserOperationStruct, + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; + + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + depositTo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deposits( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [BigNumber, boolean, BigNumber, number, number] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: number; + } + >; + + getDepositInfo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getNonce( + sender: PromiseOrValue, + key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getSenderAddress( + initCode: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getUserOpHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + incrementNonce( + key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + innerHandleOp( + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonceSequenceNumber( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + simulateHandleOp( + op: UserOperationStruct, + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + unlockStake(overrides?: CallOverrides): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AccountDeployed(bytes32,address,address,address)"( + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + factory?: null, + paymaster?: null + ): AccountDeployedEventFilter; + AccountDeployed( + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + factory?: null, + paymaster?: null + ): AccountDeployedEventFilter; + + "BeforeExecution()"(): BeforeExecutionEventFilter; + BeforeExecution(): BeforeExecutionEventFilter; + + "Deposited(address,uint256)"( + account?: PromiseOrValue | null, + totalDeposit?: null + ): DepositedEventFilter; + Deposited( + account?: PromiseOrValue | null, + totalDeposit?: null + ): DepositedEventFilter; + + "SignatureAggregatorChanged(address)"( + aggregator?: PromiseOrValue | null + ): SignatureAggregatorChangedEventFilter; + SignatureAggregatorChanged( + aggregator?: PromiseOrValue | null + ): SignatureAggregatorChangedEventFilter; + + "StakeLocked(address,uint256,uint256)"( + account?: PromiseOrValue | null, + totalStaked?: null, + unstakeDelaySec?: null + ): StakeLockedEventFilter; + StakeLocked( + account?: PromiseOrValue | null, + totalStaked?: null, + unstakeDelaySec?: null + ): StakeLockedEventFilter; + + "StakeUnlocked(address,uint256)"( + account?: PromiseOrValue | null, + withdrawTime?: null + ): StakeUnlockedEventFilter; + StakeUnlocked( + account?: PromiseOrValue | null, + withdrawTime?: null + ): StakeUnlockedEventFilter; + + "StakeWithdrawn(address,address,uint256)"( + account?: PromiseOrValue | null, + withdrawAddress?: null, + amount?: null + ): StakeWithdrawnEventFilter; + StakeWithdrawn( + account?: PromiseOrValue | null, + withdrawAddress?: null, + amount?: null + ): StakeWithdrawnEventFilter; + + "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)"( + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + paymaster?: PromiseOrValue | null, + nonce?: null, + success?: null, + actualGasCost?: null, + actualGasUsed?: null + ): UserOperationEventEventFilter; + UserOperationEvent( + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + paymaster?: PromiseOrValue | null, + nonce?: null, + success?: null, + actualGasCost?: null, + actualGasUsed?: null + ): UserOperationEventEventFilter; + + "UserOperationRevertReason(bytes32,address,uint256,bytes)"( + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + nonce?: null, + revertReason?: null + ): UserOperationRevertReasonEventFilter; + UserOperationRevertReason( + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + nonce?: null, + revertReason?: null + ): UserOperationRevertReasonEventFilter; + + "Withdrawn(address,address,uint256)"( + account?: PromiseOrValue | null, + withdrawAddress?: null, + amount?: null + ): WithdrawnEventFilter; + Withdrawn( + account?: PromiseOrValue | null, + withdrawAddress?: null, + amount?: null + ): WithdrawnEventFilter; + }; + + estimateGas: { + SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; + + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + depositTo( + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposits( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getDepositInfo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getNonce( + sender: PromiseOrValue, + key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getSenderAddress( + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getUserOpHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + incrementNonce( + key: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + innerHandleOp( + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + nonceSequenceNumber( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + simulateHandleOp( + op: UserOperationStruct, + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + SIG_VALIDATION_FAILED( + overrides?: CallOverrides + ): Promise; + + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + depositTo( + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposits( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getDepositInfo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getNonce( + sender: PromiseOrValue, + key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getSenderAddress( + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getUserOpHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + incrementNonce( + key: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + innerHandleOp( + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + nonceSequenceNumber( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + simulateHandleOp( + op: UserOperationStruct, + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/packages/common/src/typechain/entrypoint/EntryPoint_v006.ts b/packages/common/src/typechain/entrypoint/EntryPoint_v006.ts new file mode 100644 index 000000000..5f8742cff --- /dev/null +++ b/packages/common/src/typechain/entrypoint/EntryPoint_v006.ts @@ -0,0 +1,1216 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../common"; + +export type UserOperationStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + initCode: PromiseOrValue; + callData: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + paymasterAndData: PromiseOrValue; + signature: PromiseOrValue; +}; + +export type UserOperationStructOutput = [ + string, + BigNumber, + string, + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + string +] & { + sender: string; + nonce: BigNumber; + initCode: string; + callData: string; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + paymasterAndData: string; + signature: string; +}; + +export declare namespace IStakeManager { + export type DepositInfoStruct = { + deposit: PromiseOrValue; + staked: PromiseOrValue; + stake: PromiseOrValue; + unstakeDelaySec: PromiseOrValue; + withdrawTime: PromiseOrValue; + }; + + export type DepositInfoStructOutput = [ + BigNumber, + boolean, + BigNumber, + number, + number + ] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: number; + }; +} + +export declare namespace IEntryPoint { + export type UserOpsPerAggregatorStruct = { + userOps: UserOperationStruct[]; + aggregator: PromiseOrValue; + signature: PromiseOrValue; + }; + + export type UserOpsPerAggregatorStructOutput = [ + UserOperationStructOutput[], + string, + string + ] & { + userOps: UserOperationStructOutput[]; + aggregator: string; + signature: string; + }; +} + +export declare namespace EntryPoint { + export type MemoryUserOpStruct = { + sender: PromiseOrValue; + nonce: PromiseOrValue; + callGasLimit: PromiseOrValue; + verificationGasLimit: PromiseOrValue; + preVerificationGas: PromiseOrValue; + paymaster: PromiseOrValue; + maxFeePerGas: PromiseOrValue; + maxPriorityFeePerGas: PromiseOrValue; + }; + + export type MemoryUserOpStructOutput = [ + string, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + string, + BigNumber, + BigNumber + ] & { + sender: string; + nonce: BigNumber; + callGasLimit: BigNumber; + verificationGasLimit: BigNumber; + preVerificationGas: BigNumber; + paymaster: string; + maxFeePerGas: BigNumber; + maxPriorityFeePerGas: BigNumber; + }; + + export type UserOpInfoStruct = { + mUserOp: EntryPoint.MemoryUserOpStruct; + userOpHash: PromiseOrValue; + prefund: PromiseOrValue; + contextOffset: PromiseOrValue; + preOpGas: PromiseOrValue; + }; + + export type UserOpInfoStructOutput = [ + EntryPoint.MemoryUserOpStructOutput, + string, + BigNumber, + BigNumber, + BigNumber + ] & { + mUserOp: EntryPoint.MemoryUserOpStructOutput; + userOpHash: string; + prefund: BigNumber; + contextOffset: BigNumber; + preOpGas: BigNumber; + }; +} + +export interface EntryPoint_v006Interface extends utils.Interface { + functions: { + "SIG_VALIDATION_FAILED()": FunctionFragment; + "_validateSenderAndPaymaster(bytes,address,bytes)": FunctionFragment; + "addStake(uint32)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "depositTo(address)": FunctionFragment; + "deposits(address)": FunctionFragment; + "getDepositInfo(address)": FunctionFragment; + "getNonce(address,uint192)": FunctionFragment; + "getSenderAddress(bytes)": FunctionFragment; + "getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + "handleAggregatedOps(((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)[],address)": FunctionFragment; + "handleOps((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address)": FunctionFragment; + "incrementNonce(uint192)": FunctionFragment; + "innerHandleOp(bytes,((address,uint256,uint256,uint256,uint256,address,uint256,uint256),bytes32,uint256,uint256,uint256),bytes)": FunctionFragment; + "nonceSequenceNumber(address,uint192)": FunctionFragment; + "simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),address,bytes)": FunctionFragment; + "simulateValidation((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; + "unlockStake()": FunctionFragment; + "withdrawStake(address)": FunctionFragment; + "withdrawTo(address,uint256)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "SIG_VALIDATION_FAILED" + | "_validateSenderAndPaymaster" + | "addStake" + | "balanceOf" + | "depositTo" + | "deposits" + | "getDepositInfo" + | "getNonce" + | "getSenderAddress" + | "getUserOpHash" + | "handleAggregatedOps" + | "handleOps" + | "incrementNonce" + | "innerHandleOp" + | "nonceSequenceNumber" + | "simulateHandleOp" + | "simulateValidation" + | "unlockStake" + | "withdrawStake" + | "withdrawTo" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "SIG_VALIDATION_FAILED", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "_validateSenderAndPaymaster", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "addStake", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "depositTo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "deposits", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getDepositInfo", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getNonce", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getSenderAddress", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getUserOpHash", + values: [UserOperationStruct] + ): string; + encodeFunctionData( + functionFragment: "handleAggregatedOps", + values: [IEntryPoint.UserOpsPerAggregatorStruct[], PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "handleOps", + values: [UserOperationStruct[], PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "incrementNonce", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "innerHandleOp", + values: [ + PromiseOrValue, + EntryPoint.UserOpInfoStruct, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "nonceSequenceNumber", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "simulateHandleOp", + values: [ + UserOperationStruct, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "simulateValidation", + values: [UserOperationStruct] + ): string; + encodeFunctionData( + functionFragment: "unlockStake", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "withdrawStake", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "withdrawTo", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "SIG_VALIDATION_FAILED", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "_validateSenderAndPaymaster", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "depositTo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "deposits", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getDepositInfo", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getNonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getSenderAddress", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getUserOpHash", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "handleAggregatedOps", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "handleOps", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "incrementNonce", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "innerHandleOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "nonceSequenceNumber", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "simulateHandleOp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "simulateValidation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "unlockStake", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawStake", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; + + events: { + "AccountDeployed(bytes32,address,address,address)": EventFragment; + "BeforeExecution()": EventFragment; + "Deposited(address,uint256)": EventFragment; + "SignatureAggregatorChanged(address)": EventFragment; + "StakeLocked(address,uint256,uint256)": EventFragment; + "StakeUnlocked(address,uint256)": EventFragment; + "StakeWithdrawn(address,address,uint256)": EventFragment; + "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)": EventFragment; + "UserOperationRevertReason(bytes32,address,uint256,bytes)": EventFragment; + "Withdrawn(address,address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "AccountDeployed"): EventFragment; + getEvent(nameOrSignatureOrTopic: "BeforeExecution"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Deposited"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SignatureAggregatorChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "StakeLocked"): EventFragment; + getEvent(nameOrSignatureOrTopic: "StakeUnlocked"): EventFragment; + getEvent(nameOrSignatureOrTopic: "StakeWithdrawn"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UserOperationEvent"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UserOperationRevertReason"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; +} + +export interface AccountDeployedEventObject { + userOpHash: string; + sender: string; + factory: string; + paymaster: string; +} +export type AccountDeployedEvent = TypedEvent< + [string, string, string, string], + AccountDeployedEventObject +>; + +export type AccountDeployedEventFilter = TypedEventFilter; + +export interface BeforeExecutionEventObject {} +export type BeforeExecutionEvent = TypedEvent<[], BeforeExecutionEventObject>; + +export type BeforeExecutionEventFilter = TypedEventFilter; + +export interface DepositedEventObject { + account: string; + totalDeposit: BigNumber; +} +export type DepositedEvent = TypedEvent< + [string, BigNumber], + DepositedEventObject +>; + +export type DepositedEventFilter = TypedEventFilter; + +export interface SignatureAggregatorChangedEventObject { + aggregator: string; +} +export type SignatureAggregatorChangedEvent = TypedEvent< + [string], + SignatureAggregatorChangedEventObject +>; + +export type SignatureAggregatorChangedEventFilter = + TypedEventFilter; + +export interface StakeLockedEventObject { + account: string; + totalStaked: BigNumber; + unstakeDelaySec: BigNumber; +} +export type StakeLockedEvent = TypedEvent< + [string, BigNumber, BigNumber], + StakeLockedEventObject +>; + +export type StakeLockedEventFilter = TypedEventFilter; + +export interface StakeUnlockedEventObject { + account: string; + withdrawTime: BigNumber; +} +export type StakeUnlockedEvent = TypedEvent< + [string, BigNumber], + StakeUnlockedEventObject +>; + +export type StakeUnlockedEventFilter = TypedEventFilter; + +export interface StakeWithdrawnEventObject { + account: string; + withdrawAddress: string; + amount: BigNumber; +} +export type StakeWithdrawnEvent = TypedEvent< + [string, string, BigNumber], + StakeWithdrawnEventObject +>; + +export type StakeWithdrawnEventFilter = TypedEventFilter; + +export interface UserOperationEventEventObject { + userOpHash: string; + sender: string; + paymaster: string; + nonce: BigNumber; + success: boolean; + actualGasCost: BigNumber; + actualGasUsed: BigNumber; +} +export type UserOperationEventEvent = TypedEvent< + [string, string, string, BigNumber, boolean, BigNumber, BigNumber], + UserOperationEventEventObject +>; + +export type UserOperationEventEventFilter = + TypedEventFilter; + +export interface UserOperationRevertReasonEventObject { + userOpHash: string; + sender: string; + nonce: BigNumber; + revertReason: string; +} +export type UserOperationRevertReasonEvent = TypedEvent< + [string, string, BigNumber, string], + UserOperationRevertReasonEventObject +>; + +export type UserOperationRevertReasonEventFilter = + TypedEventFilter; + +export interface WithdrawnEventObject { + account: string; + withdrawAddress: string; + amount: BigNumber; +} +export type WithdrawnEvent = TypedEvent< + [string, string, BigNumber], + WithdrawnEventObject +>; + +export type WithdrawnEventFilter = TypedEventFilter; + +export interface EntryPoint_v006 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: EntryPoint_v006Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise<[BigNumber]>; + + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[void]>; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + depositTo( + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposits( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [BigNumber, boolean, BigNumber, number, number] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: number; + } + >; + + getDepositInfo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [IStakeManager.DepositInfoStructOutput] & { + info: IStakeManager.DepositInfoStructOutput; + } + >; + + getNonce( + sender: PromiseOrValue, + key: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber] & { nonce: BigNumber }>; + + getSenderAddress( + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getUserOpHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise<[string]>; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + incrementNonce( + key: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + innerHandleOp( + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + nonceSequenceNumber( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + simulateHandleOp( + op: UserOperationStruct, + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; + + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + depositTo( + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposits( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [BigNumber, boolean, BigNumber, number, number] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: number; + } + >; + + getDepositInfo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getNonce( + sender: PromiseOrValue, + key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getSenderAddress( + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getUserOpHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + incrementNonce( + key: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + innerHandleOp( + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + nonceSequenceNumber( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + simulateHandleOp( + op: UserOperationStruct, + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; + + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + depositTo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deposits( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [BigNumber, boolean, BigNumber, number, number] & { + deposit: BigNumber; + staked: boolean; + stake: BigNumber; + unstakeDelaySec: number; + withdrawTime: number; + } + >; + + getDepositInfo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getNonce( + sender: PromiseOrValue, + key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getSenderAddress( + initCode: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getUserOpHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + incrementNonce( + key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + innerHandleOp( + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + nonceSequenceNumber( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + simulateHandleOp( + op: UserOperationStruct, + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + unlockStake(overrides?: CallOverrides): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "AccountDeployed(bytes32,address,address,address)"( + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + factory?: null, + paymaster?: null + ): AccountDeployedEventFilter; + AccountDeployed( + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + factory?: null, + paymaster?: null + ): AccountDeployedEventFilter; + + "BeforeExecution()"(): BeforeExecutionEventFilter; + BeforeExecution(): BeforeExecutionEventFilter; + + "Deposited(address,uint256)"( + account?: PromiseOrValue | null, + totalDeposit?: null + ): DepositedEventFilter; + Deposited( + account?: PromiseOrValue | null, + totalDeposit?: null + ): DepositedEventFilter; + + "SignatureAggregatorChanged(address)"( + aggregator?: PromiseOrValue | null + ): SignatureAggregatorChangedEventFilter; + SignatureAggregatorChanged( + aggregator?: PromiseOrValue | null + ): SignatureAggregatorChangedEventFilter; + + "StakeLocked(address,uint256,uint256)"( + account?: PromiseOrValue | null, + totalStaked?: null, + unstakeDelaySec?: null + ): StakeLockedEventFilter; + StakeLocked( + account?: PromiseOrValue | null, + totalStaked?: null, + unstakeDelaySec?: null + ): StakeLockedEventFilter; + + "StakeUnlocked(address,uint256)"( + account?: PromiseOrValue | null, + withdrawTime?: null + ): StakeUnlockedEventFilter; + StakeUnlocked( + account?: PromiseOrValue | null, + withdrawTime?: null + ): StakeUnlockedEventFilter; + + "StakeWithdrawn(address,address,uint256)"( + account?: PromiseOrValue | null, + withdrawAddress?: null, + amount?: null + ): StakeWithdrawnEventFilter; + StakeWithdrawn( + account?: PromiseOrValue | null, + withdrawAddress?: null, + amount?: null + ): StakeWithdrawnEventFilter; + + "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)"( + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + paymaster?: PromiseOrValue | null, + nonce?: null, + success?: null, + actualGasCost?: null, + actualGasUsed?: null + ): UserOperationEventEventFilter; + UserOperationEvent( + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + paymaster?: PromiseOrValue | null, + nonce?: null, + success?: null, + actualGasCost?: null, + actualGasUsed?: null + ): UserOperationEventEventFilter; + + "UserOperationRevertReason(bytes32,address,uint256,bytes)"( + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + nonce?: null, + revertReason?: null + ): UserOperationRevertReasonEventFilter; + UserOperationRevertReason( + userOpHash?: PromiseOrValue | null, + sender?: PromiseOrValue | null, + nonce?: null, + revertReason?: null + ): UserOperationRevertReasonEventFilter; + + "Withdrawn(address,address,uint256)"( + account?: PromiseOrValue | null, + withdrawAddress?: null, + amount?: null + ): WithdrawnEventFilter; + Withdrawn( + account?: PromiseOrValue | null, + withdrawAddress?: null, + amount?: null + ): WithdrawnEventFilter; + }; + + estimateGas: { + SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; + + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + depositTo( + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposits( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getDepositInfo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getNonce( + sender: PromiseOrValue, + key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getSenderAddress( + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getUserOpHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + incrementNonce( + key: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + innerHandleOp( + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + nonceSequenceNumber( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + simulateHandleOp( + op: UserOperationStruct, + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + SIG_VALIDATION_FAILED( + overrides?: CallOverrides + ): Promise; + + _validateSenderAndPaymaster( + initCode: PromiseOrValue, + sender: PromiseOrValue, + paymasterAndData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + addStake( + unstakeDelaySec: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + depositTo( + account: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + deposits( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getDepositInfo( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getNonce( + sender: PromiseOrValue, + key: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getSenderAddress( + initCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getUserOpHash( + userOp: UserOperationStruct, + overrides?: CallOverrides + ): Promise; + + handleAggregatedOps( + opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + handleOps( + ops: UserOperationStruct[], + beneficiary: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + incrementNonce( + key: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + innerHandleOp( + callData: PromiseOrValue, + opInfo: EntryPoint.UserOpInfoStruct, + context: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + nonceSequenceNumber( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + simulateHandleOp( + op: UserOperationStruct, + target: PromiseOrValue, + targetCallData: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + simulateValidation( + userOp: UserOperationStruct, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + unlockStake( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawStake( + withdrawAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawTo( + withdrawAddress: PromiseOrValue, + withdrawAmount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/packages/common/src/typechain/entrypoint/index.ts b/packages/common/src/typechain/entrypoint/index.ts new file mode 100644 index 000000000..6fd457696 --- /dev/null +++ b/packages/common/src/typechain/entrypoint/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { EntryPoint_v005 } from "./EntryPoint_v005"; +export type { EntryPoint_v006 } from "./EntryPoint_v006"; diff --git a/packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccountFactory_v100__factory.ts b/packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccountFactory_v100__factory.ts new file mode 100644 index 000000000..6d25ffab0 --- /dev/null +++ b/packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccountFactory_v100__factory.ts @@ -0,0 +1,233 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../common"; +import type { + SmartAccountFactory_v100, + SmartAccountFactory_v100Interface, +} from "../../biconomy_v1.0.0/SmartAccountFactory_v100"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "_basicImplementation", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "AccountCreation", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "AccountCreationWithoutIndex", + type: "event", + }, + { + inputs: [], + name: "accountCreationCode", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "basicImplementation", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_owner", + type: "address", + }, + ], + name: "deployAccount", + outputs: [ + { + internalType: "address", + name: "proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_owner", + type: "address", + }, + { + internalType: "uint256", + name: "_index", + type: "uint256", + }, + ], + name: "deployCounterFactualAccount", + outputs: [ + { + internalType: "address", + name: "proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_owner", + type: "address", + }, + { + internalType: "uint256", + name: "_index", + type: "uint256", + }, + ], + name: "getAddressForCounterFactualAccount", + outputs: [ + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "minimalHandler", + outputs: [ + { + internalType: "contract DefaultCallbackHandler", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x60c060405234801561001057600080fd5b50604051610f5a380380610f5a83398101604081905261002f916100de565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601d60248201527f696d706c656d656e746174696f6e2063616e6e6f74206265207a65726f000000604482015260640160405180910390fd5b6001600160a01b0381166080526040516100a2906100d1565b604051809103906000f0801580156100be573d6000803e3d6000fd5b506001600160a01b031660a0525061010e565b6105e68061097483390190565b6000602082840312156100f057600080fd5b81516001600160a01b038116811461010757600080fd5b9392505050565b60805160a05161082661014e6000396000818160c1015261056501526000818161010e015281816101b10152818161032b015261043f01526108266000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063d668bfa811610050578063d668bfa8146100e3578063da9fc1ae146100f6578063daf0dfc81461010957600080fd5b8063088924ef1461007757806331c884df146100a75780633b3cb143146100bc575b600080fd5b61008a6100853660046105fe565b610130565b6040516001600160a01b0390911681526020015b60405180910390f35b6100af6102bd565b60405161009e919061064c565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b61008a6100f13660046105fe565b6102e7565b61008a61010436600461067f565b610408565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b60008061013c84610550565b90506000818051906020012084604051602001610163929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006040518060200161018d906105d5565b601f1982820381018352601f9091011660408190526101da91906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b6040516020818303038152906040529050818151826020016000f593506001600160a01b0384166102525760405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c65640000000000000000000000000060448201526064015b60405180910390fd5b8251156102735760008060008551602087016000895af10361027357600080fd5b84866001600160a01b0316856001600160a01b03167f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f260405160405180910390a450505092915050565b6060604051806020016102cf906105d5565b601f1982820381018352601f90910116604052919050565b6000806102f384610550565b9050600060405180602001610307906105d5565b601f1982820381018352601f90910116604081905261035491906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60408051808303601f1901815282825284516020958601208584015282820196909652805180830382018152606080840183528151918601919091208751978601979097207fff0000000000000000000000000000000000000000000000000000000000000060808501523090911b6bffffffffffffffffffffffff19166081840152609583019690965260b5808301969096528051808303909601865260d5909101905250825192019190912092915050565b6000806040518060200161041b906105d5565b601f1982820381018352601f90910116604081905261046891906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60405160208183030381529060405290508051816020016000f091506001600160a01b0382166104da5760405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606401610249565b60006104e584610550565b8051909150156105095760008060008351602085016000885af10361050957600080fd5b836001600160a01b0316836001600160a01b03167f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf65760405160405180910390a35050919050565b6040516001600160a01b0380831660248301527f000000000000000000000000000000000000000000000000000000000000000016604482015260609060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663784d200b60e11b17905292915050565b61012d806106c483390190565b80356001600160a01b03811681146105f957600080fd5b919050565b6000806040838503121561061157600080fd5b61061a836105e2565b946020939093013593505050565b60005b8381101561064357818101518382015260200161062b565b50506000910152565b602081526000825180602084015261066b816040850160208701610628565b601f01601f19169190910160400192915050565b60006020828403121561069157600080fd5b61069a826105e2565b9392505050565b600083516106b3818460208801610628565b919091019182525060200191905056fe608060405234801561001057600080fd5b5060405161012d38038061012d83398101604081905261002f91610090565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e20616464726573730000604482015260640160405180910390fd5b30556100c0565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b605f806100ce6000396000f3fe608060405230543660008037600080366000845af43d6000803e8080156024573d6000f35b3d6000fdfea2646970667358221220a7977748230fa5c96134083773f708cfbe78723c07e58051ac6bd8c4877a4d5a64736f6c63430008110033a26469706673582212201fec0df9ef9e79bf19660229f5fa1cf6bbf67a01bd022c1b6866ccb255550e5764736f6c63430008110033608060405234801561001057600080fd5b506105c6806100206000396000f3fe608060405234801561001057600080fd5b506004361061007c5760003560e01c8063a3f4df7e1161005b578063a3f4df7e146100fb578063bc197c8114610144578063f23a6e6114610166578063ffa1ad741461018657600080fd5b806223de291461008157806301ffc9a71461009b578063150b7a02146100c3575b600080fd5b61009961008f3660046102a0565b5050505050505050565b005b6100ae6100a936600461034b565b6101c2565b60405190151581526020015b60405180910390f35b6100e26100d136600461037c565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016100ba565b6101376040518060400160405280601881526020017f44656661756c742043616c6c6261636b2048616e646c6572000000000000000081525081565b6040516100ba91906103eb565b6100e261015236600461047e565b63bc197c8160e01b98975050505050505050565b6100e2610174366004610518565b63f23a6e6160e01b9695505050505050565b6101376040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60006001600160e01b03198216630271189760e51b14806101f357506001600160e01b03198216630a85bd0160e11b145b8061020d57506001600160e01b031982166223de2960e01b145b8061022857506001600160e01b031982166301ffc9a760e01b145b92915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461025257600080fd5b919050565b60008083601f84011261026957600080fd5b50813567ffffffffffffffff81111561028157600080fd5b60208301915083602082850101111561029957600080fd5b9250929050565b60008060008060008060008060c0898b0312156102bc57600080fd5b6102c58961022e565b97506102d360208a0161022e565b96506102e160408a0161022e565b955060608901359450608089013567ffffffffffffffff8082111561030557600080fd5b6103118c838d01610257565b909650945060a08b013591508082111561032a57600080fd5b506103378b828c01610257565b999c989b5096995094979396929594505050565b60006020828403121561035d57600080fd5b81356001600160e01b03198116811461037557600080fd5b9392505050565b60008060008060006080868803121561039457600080fd5b61039d8661022e565b94506103ab6020870161022e565b935060408601359250606086013567ffffffffffffffff8111156103ce57600080fd5b6103da88828901610257565b969995985093965092949392505050565b600060208083528351808285015260005b81811015610418578581018301518582016040015282016103fc565b506000604082860101526040601f19601f8301168501019250505092915050565b60008083601f84011261044b57600080fd5b50813567ffffffffffffffff81111561046357600080fd5b6020830191508360208260051b850101111561029957600080fd5b60008060008060008060008060a0898b03121561049a57600080fd5b6104a38961022e565b97506104b160208a0161022e565b9650604089013567ffffffffffffffff808211156104ce57600080fd5b6104da8c838d01610439565b909850965060608b01359150808211156104f357600080fd5b6104ff8c838d01610439565b909650945060808b013591508082111561032a57600080fd5b60008060008060008060a0878903121561053157600080fd5b61053a8761022e565b95506105486020880161022e565b94506040870135935060608701359250608087013567ffffffffffffffff81111561057257600080fd5b61057e89828a01610257565b979a969950949750929593949250505056fea2646970667358221220f9bf68273e40153fec1c25026a3e3145e43e4e63c519d4413921bbc86925381c64736f6c63430008110033"; + +type SmartAccountFactory_v100ConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SmartAccountFactory_v100ConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SmartAccountFactory_v100__factory extends ContractFactory { + constructor(...args: SmartAccountFactory_v100ConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _basicImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + _basicImplementation, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _basicImplementation: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(_basicImplementation, overrides || {}); + } + override attach(address: string): SmartAccountFactory_v100 { + return super.attach(address) as SmartAccountFactory_v100; + } + override connect(signer: Signer): SmartAccountFactory_v100__factory { + return super.connect(signer) as SmartAccountFactory_v100__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SmartAccountFactory_v100Interface { + return new utils.Interface(_abi) as SmartAccountFactory_v100Interface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): SmartAccountFactory_v100 { + return new Contract( + address, + _abi, + signerOrProvider + ) as SmartAccountFactory_v100; + } +} diff --git a/packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccount_v100__factory.ts b/packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccount_v100__factory.ts new file mode 100644 index 000000000..d39eff887 --- /dev/null +++ b/packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccount_v100__factory.ts @@ -0,0 +1,1739 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../common"; +import type { + SmartAccount_v100, + SmartAccount_v100Interface, +} from "../../biconomy_v1.0.0/SmartAccount_v100"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [ + { + internalType: "address", + name: "smartAccount", + type: "address", + }, + ], + name: "AlreadyInitialized", + type: "error", + }, + { + inputs: [], + name: "BaseImplementationCannotBeZero", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotAnEntryPoint", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotEntryPointOrOwner", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotOwner", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotSelf", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "targetTxGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "gasPrice", + type: "uint256", + }, + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + name: "CanNotEstimateGas", + type: "error", + }, + { + inputs: [], + name: "DelegateCallsOnly", + type: "error", + }, + { + inputs: [], + name: "EntryPointCannotBeZero", + type: "error", + }, + { + inputs: [], + name: "ExecutionFailed", + type: "error", + }, + { + inputs: [], + name: "HandlerCannotBeZero", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "implementationAddress", + type: "address", + }, + ], + name: "InvalidImplementation", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "restoredSigner", + type: "address", + }, + { + internalType: "address", + name: "expectedSigner", + type: "address", + }, + ], + name: "InvalidSignature", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "MixedAuthFail", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleAlreadyEnabled", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "expectedModule", + type: "address", + }, + { + internalType: "address", + name: "returnedModule", + type: "address", + }, + { + internalType: "address", + name: "prevModule", + type: "address", + }, + ], + name: "ModuleAndPrevModuleMismatch", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleCannotBeZeroOrSentinel", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleNotEnabled", + type: "error", + }, + { + inputs: [], + name: "ModulesAlreadyInitialized", + type: "error", + }, + { + inputs: [], + name: "ModulesSetupExecutionFailed", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "gasLeft", + type: "uint256", + }, + { + internalType: "uint256", + name: "gasRequired", + type: "uint256", + }, + ], + name: "NotEnoughGasLeft", + type: "error", + }, + { + inputs: [], + name: "OwnerCanNotBeSelf", + type: "error", + }, + { + inputs: [], + name: "OwnerCannotBeZero", + type: "error", + }, + { + inputs: [], + name: "OwnerProvidedIsSame", + type: "error", + }, + { + inputs: [], + name: "ReentrancyProtectionActivated", + type: "error", + }, + { + inputs: [], + name: "TokenGasPriceFactorCanNotBeZero", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "TokenTransferFailed", + type: "error", + }, + { + inputs: [], + name: "TransferToZeroAddressAttempt", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "destLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "valueLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "funcLength", + type: "uint256", + }, + ], + name: "WrongBatchProvided", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes", + name: "contractSignature", + type: "bytes", + }, + ], + name: "WrongContractSignature", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "uintS", + type: "uint256", + }, + { + internalType: "uint256", + name: "contractSignatureLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "signatureLength", + type: "uint256", + }, + ], + name: "WrongContractSignatureFormat", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "txHash", + type: "bytes32", + }, + { + indexed: true, + internalType: "uint256", + name: "payment", + type: "uint256", + }, + ], + name: "AccountHandlePayment", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousHandler", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "handler", + type: "address", + }, + ], + name: "ChangedFallbackHandler", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "DisabledModule", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "_scw", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "_oldEOA", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "_newEOA", + type: "address", + }, + ], + name: "EOAChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "EnabledModule", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + indexed: true, + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + { + indexed: false, + internalType: "uint256", + name: "txGas", + type: "uint256", + }, + ], + name: "ExecutionFailure", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ExecutionFromModuleFailure", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ExecutionFromModuleSuccess", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + indexed: true, + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + { + indexed: false, + internalType: "uint256", + name: "txGas", + type: "uint256", + }, + ], + name: "ExecutionSuccess", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "oldImplementation", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "ImplementationUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "ModuleTransaction", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "SmartAccountReceivedNativeToken", + type: "event", + }, + { + stateMutability: "nonpayable", + type: "fallback", + }, + { + inputs: [], + name: "VERSION", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "dataHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signatures", + type: "bytes", + }, + ], + name: "checkSignatures", + outputs: [], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "prevModule", + type: "address", + }, + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "disableModule", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "domainSeparator", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "enableModule", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "uint256", + name: "targetTxGas", + type: "uint256", + }, + ], + internalType: "struct Transaction", + name: "_tx", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "baseGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "gasPrice", + type: "uint256", + }, + { + internalType: "uint256", + name: "tokenGasPriceFactor", + type: "uint256", + }, + { + internalType: "address", + name: "gasToken", + type: "address", + }, + { + internalType: "address payable", + name: "refundReceiver", + type: "address", + }, + ], + internalType: "struct FeeRefund", + name: "refundInfo", + type: "tuple", + }, + { + internalType: "uint256", + name: "_nonce", + type: "uint256", + }, + ], + name: "encodeTransactionData", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "uint256", + name: "targetTxGas", + type: "uint256", + }, + ], + internalType: "struct Transaction", + name: "_tx", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "baseGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "gasPrice", + type: "uint256", + }, + { + internalType: "uint256", + name: "tokenGasPriceFactor", + type: "uint256", + }, + { + internalType: "address", + name: "gasToken", + type: "address", + }, + { + internalType: "address payable", + name: "refundReceiver", + type: "address", + }, + ], + internalType: "struct FeeRefund", + name: "refundInfo", + type: "tuple", + }, + { + internalType: "bytes", + name: "signatures", + type: "bytes", + }, + ], + name: "execTransaction", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "execTransactionFromModule", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "execTransactionFromModuleReturnData", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + { + internalType: "bytes", + name: "returnData", + type: "bytes", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "uint256", + name: "targetTxGas", + type: "uint256", + }, + ], + internalType: "struct Transaction", + name: "_tx", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "baseGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "gasPrice", + type: "uint256", + }, + { + internalType: "uint256", + name: "tokenGasPriceFactor", + type: "uint256", + }, + { + internalType: "address", + name: "gasToken", + type: "address", + }, + { + internalType: "address payable", + name: "refundReceiver", + type: "address", + }, + ], + internalType: "struct FeeRefund", + name: "refundInfo", + type: "tuple", + }, + { + internalType: "bytes", + name: "signatures", + type: "bytes", + }, + ], + name: "execTransaction_S6W", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatchCall", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatchCall_4by", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "executeCall", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "executeCall_s1m", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getChainId", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getFallbackHandler", + outputs: [ + { + internalType: "address", + name: "_handler", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getImplementation", + outputs: [ + { + internalType: "address", + name: "_implementation", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "start", + type: "address", + }, + { + internalType: "uint256", + name: "pageSize", + type: "uint256", + }, + ], + name: "getModulesPaginated", + outputs: [ + { + internalType: "address[]", + name: "array", + type: "address[]", + }, + { + internalType: "address", + name: "next", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "batchId", + type: "uint256", + }, + ], + name: "getNonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + { + internalType: "uint256", + name: "targetTxGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "baseGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "gasPrice", + type: "uint256", + }, + { + internalType: "uint256", + name: "tokenGasPriceFactor", + type: "uint256", + }, + { + internalType: "address", + name: "gasToken", + type: "address", + }, + { + internalType: "address payable", + name: "refundReceiver", + type: "address", + }, + { + internalType: "uint256", + name: "_nonce", + type: "uint256", + }, + ], + name: "getTransactionHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "gasUsed", + type: "uint256", + }, + { + internalType: "uint256", + name: "baseGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "gasPrice", + type: "uint256", + }, + { + internalType: "uint256", + name: "tokenGasPriceFactor", + type: "uint256", + }, + { + internalType: "address", + name: "gasToken", + type: "address", + }, + { + internalType: "address payable", + name: "refundReceiver", + type: "address", + }, + ], + name: "handlePaymentRevert", + outputs: [ + { + internalType: "uint256", + name: "requiredGas", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_owner", + type: "address", + }, + { + internalType: "address", + name: "_handler", + type: "address", + }, + ], + name: "init", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "isModuleEnabled", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "_dataHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "_signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "nonces", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "pullTokens", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "requiredTxGas", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "handler", + type: "address", + }, + ], + name: "setFallbackHandler", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_newOwner", + type: "address", + }, + ], + name: "setOwner", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "_interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transfer", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_implementation", + type: "address", + }, + ], + name: "updateImplementation", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60e06040523480156200001157600080fd5b5060405162003915380380620039158339810160408190526200003491620000a1565b60016031553060c052603280546001600160a01b03191673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1790556001600160a01b0381166200008b5760405163091748f960e21b815260040160405180910390fd5b6001600160a01b03166080524660a052620000d3565b600060208284031215620000b457600080fd5b81516001600160a01b0381168114620000cc57600080fd5b9392505050565b60805160a05160c0516137e86200012d60003960006102af015260006104ed01526000818161078701528181610dcf01528181610f2c01528181610fd901528181611935015281816119c6015261204f01526137e86000f3fe6080604052600436106102a05760003560e01c80638da5cb5b1161016e578063c399ec88116100cb578063f08a03231161007f578063f698da2511610064578063f698da251461088e578063fc7d3d79146108f7578063ffa1ad741461090a5761031c565b8063f08a03231461084e578063f09a40161461086e5761031c565b8063cc2f8452116100b0578063cc2f8452146107e0578063e009cfde1461080e578063ed516d511461082e5761031c565b8063c399ec88146107ab578063c4ca3a9c146107c05761031c565b8063aaf10f4211610122578063ac85dca711610107578063ac85dca714610743578063affed0e014610763578063b0d691fe146107785761031c565b8063aaf10f421461070f578063abc1b745146107235761031c565b80639e5d4c49116101535780639e5d4c49146106af578063a18f51e5146106cf578063a9059cbb146106ef5761031c565b80638da5cb5b1461066f578063912ccaa31461068f5761031c565b80633a871cdd1161021c5780635229073f116101d0578063610b5925116101b5578063610b5925146105f45780637455ce3c14610614578063856dfd99146106275761031c565b80635229073f146105995780635c0ba299146105c75761031c565b8063468721a711610201578063468721a71461055e5780634a58db191461057e5780634d44560d146105865761031c565b80633a871cdd146105115780633d46b819146105315761031c565b806313af4035116102735780631626ba7e116102585780631626ba7e146104855780632d9ad53d146104be5780633408e470146104de5761031c565b806313af40351461042a578063141a468c1461044a5761031c565b80610772146103825780618f2d146103a457806301ffc9a7146103c4578063025b22bc1461040a5761031c565b3661031c576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102ee57604051633c97166560e21b815260040160405180910390fd5b604051349033907ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce0290600090a3005b34801561032857600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d480548061035357005b36600080373360601b365260008060143601600080855af190503d6000803e8061037c573d6000fd5b503d6000f35b34801561038e57600080fd5b506103a261039d366004612ab2565b610953565b005b3480156103b057600080fd5b506103a26103bf366004612b53565b6109a2565b3480156103d057600080fd5b506103f56103df366004612c03565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b34801561041657600080fd5b506103a2610425366004612c20565b610ab3565b34801561043657600080fd5b506103a2610445366004612c20565b610bbb565b34801561045657600080fd5b50610477610465366004612c3d565b60336020526000908152604090205481565b604051908152602001610401565b34801561049157600080fd5b506104a56104a0366004612d22565b610cbd565b6040516001600160e01b03199091168152602001610401565b3480156104ca57600080fd5b506103f56104d9366004612c20565b610d8a565b3480156104ea57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610477565b34801561051d57600080fd5b5061047761052c366004612d69565b610dc2565b34801561053d57600080fd5b5061047761054c366004612c3d565b60009081526033602052604090205490565b34801561056a57600080fd5b506103f5610579366004612dcc565b610e2b565b6103a2610f2a565b6103a2610594366004612e36565b610faa565b3480156105a557600080fd5b506105b96105b4366004612dcc565b611060565b604051610401929190612eb2565b3480156105d357600080fd5b506105e76105e2366004612fad565b611096565b6040516104019190613005565b34801561060057600080fd5b506103a261060f366004612c20565b6111f0565b6103f5610622366004613018565b611316565b34801561063357600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4545b6040516001600160a01b039091168152602001610401565b34801561067b57600080fd5b50603254610657906001600160a01b031681565b34801561069b57600080fd5b506103a26106aa366004612b53565b611554565b3480156106bb57600080fd5b506103a26106ca366004612ab2565b611562565b3480156106db57600080fd5b506104776106ea36600461308d565b61156e565b3480156106fb57600080fd5b506103a261070a366004612e36565b611707565b34801561071b57600080fd5b503054610657565b34801561072f57600080fd5b5061047761073e3660046130eb565b6117a5565b34801561074f57600080fd5b506103a261075e3660046131b3565b611878565b34801561076f57600080fd5b5061047761190e565b34801561078457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610657565b3480156107b757600080fd5b506104776119a6565b3480156107cc57600080fd5b506104776107db3660046131f4565b6119f5565b3480156107ec57600080fd5b506108006107fb366004612e36565b611a6e565b604051610401929190613265565b34801561081a57600080fd5b506103a26108293660046132c2565b611b67565b34801561083a57600080fd5b506103a2610849366004612d22565b611c99565b34801561085a57600080fd5b506103a2610869366004612c20565b611f2b565b34801561087a57600080fd5b506103a26108893660046132c2565b611fa2565b34801561089a57600080fd5b50610477604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6103f5610905366004613018565b612037565b34801561091657600080fd5b506105e76040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b61095b612044565b61099c848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b50505050565b6109aa612044565b8415806109b75750848314155b806109c25750828114155b156109f657604051630a0c0a9160e31b81526004810186905260248101849052604481018290526064015b60405180910390fd5b60005b85811015610aaa57610aa2878783818110610a1657610a166132fb565b9050602002016020810190610a2b9190612c20565b868684818110610a3d57610a3d6132fb565b90506020020135858585818110610a5657610a566132fb565b9050602002810190610a689190613311565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b6001016109f9565b50505050505050565b6032546001600160a01b03163314801590610ace5750333014155b15610aee576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610b445760405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f0000000000000000000060448201526064016109ed565b6001600160a01b0381163b610b7757604051630c76093760e01b81526001600160a01b03821660048201526024016109ed565b308054908290556040516001600160a01b0380841691908316907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a35050565b6032546001600160a01b03163314801590610bd65750333014155b15610bf6576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610c1d57604051639b15e16f60e01b815260040160405180910390fd5b306001600160a01b03821603610c46576040516375b4d24760e01b815260040160405180910390fd5b6032546001600160a01b0390811690821603610c7557604051638a95d3fb60e01b815260040160405180910390fd5b60328054908290556040516001600160a01b0391821691831690829030907ff2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd490600090a45050565b6032546000906001600160a01b03163b15610d4c57603254604051630b135d3f60e11b81526001600160a01b0390911690631626ba7e90610d049086908690600401613358565b602060405180830381865afa158015610d21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d459190613371565b9050610d84565b610d5683836120c8565b6032546001600160a01b03918216911603610d795750630b135d3f60e11b610d84565b506001600160e01b03195b92915050565b600060016001600160a01b03831614801590610d845750506001600160a01b0390811660009081526020819052604090205416151590565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e0f57604051635dac3db760e11b81523360048201526024016109ed565b610e1984846120ec565b9050610e24826122dd565b9392505050565b60003360011480610e525750336000908152602081905260409020546001600160a01b0316155b15610e72576040516321ac7c5f60e01b81523360048201526024016109ed565b610e7f858585855a612328565b90508015610ef6577f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da3386868686604051610ebe9594939291906133c6565b60405180910390a160405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a2610f22565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024016000604051808303818588803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b5050505050565b6032546001600160a01b03163314610fd75760405163d4ed9a1760e01b81523360048201526024016109ed565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050505050565b6000606061107086868686610e2b565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060007fda033865d68bf4a40a5a7cb4159a99e33dba8569e65ea3e38222eb12d9e66eee60001b856000015186604001518760600151805190602001208860200151896080015189600001518a602001518b604001518c606001518d608001518d6040516020016111139c9b9a99989796959493929190613411565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b611193604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040517fff0000000000000000000000000000000000000000000000000000000000000093841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509392505050565b6111f861242f565b6001600160a01b038116158061121757506001600160a01b0381166001145b156112405760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b0381811660009081526020819052604090205416156112845760405163b29d459560e01b81526001600160a01b03821660048201526024016109ed565b600060208181527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b0385811680865260408087208054939094166001600160a01b03199384161790935560019095528254168417909155519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440910160405180910390a150565b600060026031540361133b57604051637465d9d160e01b815260040160405180910390fd5b600260315560005a6001600090815260336020527f10f6f77027d502f219862b0303542eb5dd005b06fa23ff4d1775aaa45bbf94778054929350909182916113959189918991908561138c836134a0565b91905055611096565b80516020820120925090506113aa8286611c99565b506113d9603f60068860800151901b6113c391906134b9565b60808801516113d4906109c46134db565b612451565b6113e5906101f46134db565b5a1015611444575a611416603f60068960800151901b61140591906134b9565b60808901516113d4906109c46134db565b611422906101f46134db565b604051633b4daac960e01b8152600481019290925260248201526044016109ed565b61148486600001518760400151886060015189602001518960200151600014611471578a60800151612328565b6109c45a61147f91906134ee565b612328565b92508215801561149657506080860151155b80156114a457506020850151155b156114dd5760808601516020860151604051631061f87f60e31b81526004810192909252602482015283151560448201526064016109ed565b60008560200151600014611545576115145a6114f990856134ee565b8751602089015160408a015160608b015160808c0151612467565b905080827f3fd74c38c9f1b6f0499c6d0128fbf77a796dbacc7eda0369b13006dc977bb56b60405160405180910390a35b50506001603155509392505050565b6110588686868686866109a2565b61099c84848484610953565b6000836000036115c05760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420746f6b656e4761735072696365466163746f72000000000060448201526064016109ed565b60005a905060006001600160a01b038416156115dc57836115de565b325b90506001600160a01b0385166116615760003a88106115fd573a6115ff565b875b6116098a8c6134db565b6116139190613501565b9050600080600080600085875af190508061165a5760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b50506116c9565b6000868861166f8b8d6134db565b6116799190613501565b61168391906134b9565b9050611690868383612592565b6116c75760405163190eecf360e31b81526001600160a01b03808816600483015283166024820152604481018290526064016109ed565b505b5a82039250826040516020016116e191815260200190565b60408051601f198184030181529082905262461bcd60e51b82526109ed91600401613005565b6032546001600160a01b031633146117345760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b03821661175b576040516309293b1960e41b815260040160405180910390fd5b600080600080600085875af19050806117a05760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b505050565b6000806040518060a001604052808f6001600160a01b031681526020018b60018111156117d4576117d461338e565b81526020018e81526020018d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081018b90526040805160a0810182528b81529182018a905281018890526001600160a01b0380881660608301528616608082015290915061185d828286611096565b80519060200120925050509c9b505050505050505050505050565b6032546001600160a01b031633146118a55760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b0382166118cc576040516309293b1960e41b815260040160405180910390fd5b6118d7838383612592565b6117a05760405163190eecf360e31b81526001600160a01b03808516600483015283166024820152604481018290526064016109ed565b604051631aab3f0d60e11b8152306004820152600060248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044015b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190613518565b905090565b6040516370a0823160e01b81523060048201526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401611960565b6000805a9050611a3e878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050505a612328565b611a5b57604051632b3f6d1160e21b815260040160405180910390fd5b5a604080519183036020830152016116e1565b606060008267ffffffffffffffff811115611a8b57611a8b612c56565b604051908082528060200260200182016040528015611ab4578160200160208202803683370190505b506001600160a01b0380861660009081526020819052604081205492945091165b6001600160a01b03811615801590611af757506001600160a01b038116600114155b8015611b0257508482105b15611b595780848381518110611b1a57611b1a6132fb565b6001600160a01b039283166020918202929092018101919091529181166000908152918290526040909120541681611b51816134a0565b925050611ad5565b908352919491935090915050565b611b6f61242f565b6001600160a01b0381161580611b8e57506001600160a01b0381166001145b15611bb75760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b03828116600090815260208190526040902054811690821614611c1f576001600160a01b0382811660008181526020819052604090819020549051633103525b60e21b815284841660048201529216602483015260448201526064016109ed565b6001600160a01b03818116600081815260208181526040808320805488871685528285208054919097166001600160a01b03199182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276910160405180910390a15050565b604181511015611ceb5760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207369676e617475726573206c656e6774680000000000000060448201526064016109ed565b600080600080611d0e856020810151604082015160419092015160ff1692909190565b9195509350915060ff8416600003611e535750816041821015611d55576040516338a245ff60e11b81526004810183905260006024820181905260448201526064016109ed565b6020828601810151865190918290611d6e9086906134db565b611d7891906134db565b1115611dab5785516040516338a245ff60e11b8152600481018590526024810183905260448101919091526064016109ed565b604051630b135d3f60e11b808252878501602001916001600160a01b03851690631626ba7e90611de1908c908690600401613358565b602060405180830381865afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e229190613371565b6001600160e01b03191614611e4c578060405163605d348960e01b81526004016109ed9190613005565b5050611ee6565b601e8460ff161115611ed657611ece611e6d600486613531565b8484611ec68a6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9291906126e3565b509050611ee6565b611ee2868585856126e3565b5090505b6032546001600160a01b03828116911614611058576032546040516310b5d43760e21b81526001600160a01b03808416600483015290911660248201526044016109ed565b611f3361242f565b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d454611f5e826127a7565b816001600160a01b0316816001600160a01b03167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c60405160405180910390a35050565b6032546001600160a01b031615611fce576040516393360fbf60e01b81523060048201526024016109ed565b6001600160a01b038216611ff557604051639b15e16f60e01b815260040160405180910390fd5b603280546001600160a01b0319166001600160a01b038416179055612019816127a7565b6120336000604051806020016040528060008152506127f2565b5050565b6000610f22848484611316565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061208857506032546001600160a01b03163314155b156120a8576040516332dbd3c760e11b81523360048201526024016109ed565b565b60008082516020840185875af16040513d6000823e81610fa3573d81fd5b60008060006120d785856128bc565b915091506120e481612901565b509392505050565b600036816120fd6060860186613311565b90925090508015612204576000612117600482848661354a565b61212091613574565b90506361a2b3b760e01b6001600160e01b0319821601612202576000808061214b856004818961354a565b81019061215891906135a4565b6001600160a01b03808416600090815260208190526040902054939650919450925016156121fe57604051631179c1f560e11b81526001600160a01b038416906322f383ea906121ae908c908c90600401613662565b6020604051808303816000875af11580156121cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f19190613518565b9650505050505050610d84565b5050505b505b600061225d856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506122ad612270610140880188613311565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085939250506120c89050565b6032546001600160a01b039081169116146122ce5760019350505050610d84565b50600095945050505050565b50565b80156122da5760405133906000199083906000818181858888f193505050503d806000811461099c576040519150601f19603f3d011682016040523d82523d6000602084013e61099c565b6000600183600181111561233e5761233e61338e565b03612356576000808551602087018986f49050612366565b600080855160208701888a87f190505b80156123cb578360405161237a919061377b565b604051809103902085876001600160a01b03167f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee86866040516123be929190613797565b60405180910390a4612426565b836040516123d9919061377b565b604051809103902085876001600160a01b03167f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a868660405161241d929190613797565b60405180910390a45b95945050505050565b3330146120a8576040516301478e3360e21b81523360048201526024016109ed565b60008183116124605781610e24565b5090919050565b60008360000361248a5760405163653f35a360e01b815260040160405180910390fd5b60006001600160a01b038316156124a157826124a3565b325b90506001600160a01b038416612523573a86106124c0573a6124c2565b855b6124cc888a6134db565b6124d69190613501565b9150600080600080600086865af190508061251d5760405163190eecf360e31b8152600060048201526001600160a01b0383166024820152604481018490526064016109ed565b50612587565b848661252f898b6134db565b6125399190613501565b61254391906134b9565b9150612550848284612592565b6125875760405163190eecf360e31b81526001600160a01b03808616600483015282166024820152604481018390526064016109ed565b509695505050505050565b60006001600160a01b0384166125ea5760405162461bcd60e51b815260206004820152601d60248201527f746f6b656e2063616e206e6f74206265207a65726f206164647265737300000060448201526064016109ed565b6000846001600160a01b03163b116126445760405162461bcd60e51b815260206004820152601c60248201527f746f6b656e20636f6e747261637420646f65736e27742065786973740000000060448201526064016109ed565b604080516001600160a01b03851660248201526044808201859052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b178152825160009182896127105a03f13d80156126c657602081146126ce57600093506126d9565b8193506126d9565b600051158215171593505b5050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561271a575060009050600361279e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561276e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127975760006001925092505061279e565b9150600090505b94509492505050565b6001600160a01b0381166127ce5760405163dd449f5f60e01b815260040160405180910390fd5b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d455565b600160009081526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d546001600160a01b0316156128455760405163df8cc4e360e01b815260040160405180910390fd5b600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556001600160a01b038216156120335761289f8260008360015a612328565b6120335760405163032e3a3960e51b815260040160405180910390fd5b60008082516041036128f25760208301516040840151606085015160001a6128e6878285856126e3565b945094505050506128fa565b506000905060025b9250929050565b60008160048111156129155761291561338e565b0361291d5750565b60018160048111156129315761293161338e565b0361297e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109ed565b60028160048111156129925761299261338e565b036129df5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109ed565b60038160048111156129f3576129f361338e565b036122da5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109ed565b6001600160a01b03811681146122da57600080fd5b8035612a6b81612a4b565b919050565b60008083601f840112612a8257600080fd5b50813567ffffffffffffffff811115612a9a57600080fd5b6020830191508360208285010111156128fa57600080fd5b60008060008060608587031215612ac857600080fd5b8435612ad381612a4b565b935060208501359250604085013567ffffffffffffffff811115612af657600080fd5b612b0287828801612a70565b95989497509550505050565b60008083601f840112612b2057600080fd5b50813567ffffffffffffffff811115612b3857600080fd5b6020830191508360208260051b85010111156128fa57600080fd5b60008060008060008060608789031215612b6c57600080fd5b863567ffffffffffffffff80821115612b8457600080fd5b612b908a838b01612b0e565b90985096506020890135915080821115612ba957600080fd5b612bb58a838b01612b0e565b90965094506040890135915080821115612bce57600080fd5b50612bdb89828a01612b0e565b979a9699509497509295939492505050565b6001600160e01b0319811681146122da57600080fd5b600060208284031215612c1557600080fd5b8135610e2481612bed565b600060208284031215612c3257600080fd5b8135610e2481612a4b565b600060208284031215612c4f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612c8f57612c8f612c56565b60405290565b600082601f830112612ca657600080fd5b813567ffffffffffffffff80821115612cc157612cc1612c56565b604051601f8301601f19908116603f01168101908282118183101715612ce957612ce9612c56565b81604052838152866020858801011115612d0257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612d3557600080fd5b82359150602083013567ffffffffffffffff811115612d5357600080fd5b612d5f85828601612c95565b9150509250929050565b600080600060608486031215612d7e57600080fd5b833567ffffffffffffffff811115612d9557600080fd5b84016101608187031215612da857600080fd5b95602085013595506040909401359392505050565b803560028110612a6b57600080fd5b60008060008060808587031215612de257600080fd5b8435612ded81612a4b565b935060208501359250604085013567ffffffffffffffff811115612e1057600080fd5b612e1c87828801612c95565b925050612e2b60608601612dbd565b905092959194509250565b60008060408385031215612e4957600080fd5b8235612e5481612a4b565b946020939093013593505050565b60005b83811015612e7d578181015183820152602001612e65565b50506000910152565b60008151808452612e9e816020860160208601612e62565b601f01601f19169290920160200192915050565b8215158152604060208201526000610f226040830184612e86565b600060a08284031215612edf57600080fd5b612ee7612c6c565b90508135612ef481612a4b565b8152612f0260208301612dbd565b602082015260408201356040820152606082013567ffffffffffffffff811115612f2b57600080fd5b612f3784828501612c95565b6060830152506080820135608082015292915050565b600060a08284031215612f5f57600080fd5b612f67612c6c565b90508135815260208201356020820152604082013560408201526060820135612f8f81612a4b565b60608201526080820135612fa281612a4b565b608082015292915050565b600080600060e08486031215612fc257600080fd5b833567ffffffffffffffff811115612fd957600080fd5b612fe586828701612ecd565b935050612ff58560208601612f4d565b915060c084013590509250925092565b602081526000610e246020830184612e86565b600080600060e0848603121561302d57600080fd5b833567ffffffffffffffff8082111561304557600080fd5b61305187838801612ecd565b94506130608760208801612f4d565b935060c086013591508082111561307657600080fd5b5061308386828701612c95565b9150509250925092565b60008060008060008060c087890312156130a657600080fd5b8635955060208701359450604087013593506060870135925060808701356130cd81612a4b565b915060a08701356130dd81612a4b565b809150509295509295509295565b6000806000806000806000806000806000806101608d8f03121561310e57600080fd5b6131188d35612a4b565b8c359b5060208d01359a5067ffffffffffffffff60408e0135111561313c57600080fd5b61314c8e60408f01358f01612a70565b909a50985061315d60608e01612dbd565b975060808d0135965060a08d0135955060c08d0135945060e08d013593506101008d013561318a81612a4b565b92506131996101208e01612a60565b91506101408d013590509295989b509295989b509295989b565b6000806000606084860312156131c857600080fd5b83356131d381612a4b565b925060208401356131e381612a4b565b929592945050506040919091013590565b60008060008060006080868803121561320c57600080fd5b853561321781612a4b565b945060208601359350604086013567ffffffffffffffff81111561323a57600080fd5b61324688828901612a70565b9094509250613259905060608701612dbd565b90509295509295909350565b604080825283519082018190526000906020906060840190828701845b828110156132a75781516001600160a01b031684529284019290840190600101613282565b5050506001600160a01b039490941692019190915250919050565b600080604083850312156132d557600080fd5b82356132e081612a4b565b915060208301356132f081612a4b565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332857600080fd5b83018035915067ffffffffffffffff82111561334357600080fd5b6020019150368190038213156128fa57600080fd5b828152604060208201526000610f226040830184612e86565b60006020828403121561338357600080fd5b8151610e2481612bed565b634e487b7160e01b600052602160045260246000fd5b600281106133c257634e487b7160e01b600052602160045260246000fd5b9052565b60006001600160a01b03808816835280871660208401525084604083015260a060608301526133f860a0830185612e86565b905061340760808301846133a4565b9695505050505050565b6000610180820190508d82526001600160a01b03808e1660208401528c60408401528b6060840152613446608084018c6133a4565b8960a08401528860c08401528760e08401528661010084015280861661012084015280851661014084015250826101608301529d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016134b2576134b261348a565b5060010190565b6000826134d657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d8457610d8461348a565b81810381811115610d8457610d8461348a565b8082028115828204841417610d8457610d8461348a565b60006020828403121561352a57600080fd5b5051919050565b60ff8281168282160390811115610d8457610d8461348a565b6000808585111561355a57600080fd5b8386111561356757600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561359c5780818660040360031b1b83161692505b505092915050565b6000806000606084860312156135b957600080fd5b83356135c481612a4b565b925060208401359150604084013567ffffffffffffffff8111156135e757600080fd5b61308386828701612c95565b6000808335601e1984360301811261360a57600080fd5b830160208101925035905067ffffffffffffffff81111561362a57600080fd5b8036038213156128fa57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526136836040820161367685612a60565b6001600160a01b03169052565b60208301356060820152600061369c60408501856135f3565b6101608060808601526136b46101a086018385613639565b92506136c360608801886135f3565b9250603f19808786030160a08801526136dd858584613639565b9450608089013560c088015260a089013560e0880152610100935060c089013584880152610120915060e089013582880152610140848a013581890152613726838b018b6135f3565b9550925081888703018489015261373e868685613639565b955061374c818b018b6135f3565b955093505080878603016101808801525050613769838383613639565b93505050508260208301529392505050565b6000825161378d818460208701612e62565b9190910192915050565b604081016137a582856133a4565b826020830152939250505056fea26469706673582212206d38de10695d463253620f7bec76e681851e44f22392d864735b57ecaf843b1d64736f6c63430008110033"; + +type SmartAccount_v100ConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SmartAccount_v100ConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SmartAccount_v100__factory extends ContractFactory { + constructor(...args: SmartAccount_v100ConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + anEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + anEntryPoint, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + anEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(anEntryPoint, overrides || {}); + } + override attach(address: string): SmartAccount_v100 { + return super.attach(address) as SmartAccount_v100; + } + override connect(signer: Signer): SmartAccount_v100__factory { + return super.connect(signer) as SmartAccount_v100__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SmartAccount_v100Interface { + return new utils.Interface(_abi) as SmartAccount_v100Interface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): SmartAccount_v100 { + return new Contract(address, _abi, signerOrProvider) as SmartAccount_v100; + } +} diff --git a/packages/common/src/typechain/factories/biconomy_v1.0.0/index.ts b/packages/common/src/typechain/factories/biconomy_v1.0.0/index.ts new file mode 100644 index 000000000..452aa3c24 --- /dev/null +++ b/packages/common/src/typechain/factories/biconomy_v1.0.0/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { SmartAccountFactory_v100__factory } from "./SmartAccountFactory_v100__factory"; +export { SmartAccount_v100__factory } from "./SmartAccount_v100__factory"; diff --git a/packages/common/src/typechain/factories/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100__factory.ts b/packages/common/src/typechain/factories/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100__factory.ts new file mode 100644 index 000000000..6907be67a --- /dev/null +++ b/packages/common/src/typechain/factories/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100__factory.ts @@ -0,0 +1,357 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../common"; +import type { + ECDSAOwnershipRegistryModule_v100, + ECDSAOwnershipRegistryModule_v100Interface, +} from "../../biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "smartAccount", + type: "address", + }, + ], + name: "AlreadyInitedForSmartAccount", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "smartAccount", + type: "address", + }, + ], + name: "NoOwnerRegisteredForSmartAccount", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "NotEOA", + type: "error", + }, + { + inputs: [], + name: "WrongSignatureLength", + type: "error", + }, + { + inputs: [], + name: "ZeroAddressNotAllowedAsOwner", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "smartAccount", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "oldOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "NAME", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "VERSION", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "smartAccount", + type: "address", + }, + ], + name: "getOwner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "eoaOwner", + type: "address", + }, + ], + name: "initForSmartAccount", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "dataHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "moduleSignature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "dataHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "moduleSignature", + type: "bytes", + }, + { + internalType: "address", + name: "smartAccount", + type: "address", + }, + ], + name: "isValidSignatureForAddress", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b50610aed806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063f2fde38b11610076578063fa5441611161005b578063fa54416114610195578063ffa1ad74146101a8578063fff35b72146101e457600080fd5b8063f2fde38b1461016f578063f44c339d1461018257600080fd5b80631626ba7e146100a85780632ede3bc0146100f1578063715018a61461011c578063a3f4df7e14610126575b600080fd5b6100bb6100b636600461089b565b610205565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b6101046100ff3660046108f7565b61021b565b6040516001600160a01b0390911681526020016100e8565b6101246102bf565b005b6101626040518060400160405280601f81526020017f4543445341204f776e657273686970205265676973747279204d6f64756c650081525081565b6040516100e89190610914565b61012461017d3660046108f7565b6102cc565b6100bb610190366004610962565b61032b565b6101046101a33660046108f7565b610375565b6101626040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6101f76101f23660046109bd565b6103bb565b6040519081526020016100e8565b600061021283833361032b565b90505b92915050565b336000908152602081905260408120546001600160a01b03161561025957604051632c4dfb7d60e21b81523360048201526024015b60405180910390fd5b6001600160a01b038216610280576040516307e179e960e31b815260040160405180910390fd5b50336000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790553090565b6102ca33600061040c565b565b803b156102f7576040516377817ac360e01b81526001600160a01b0382166004820152602401610250565b6001600160a01b03811661031e576040516307e179e960e31b815260040160405180910390fd5b610328338261040c565b50565b600061033884848461047d565b1561034b5750630b135d3f60e11b61036e565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b6001600160a01b038082166000908152602081905260408120549091168061021557604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6000806103cc610140850185610a08565b8101906103d99190610a4f565b5090506103f383826103ee60208801886108f7565b61047d565b15610402576000915050610215565b5060019392505050565b6001600160a01b03808316600081815260208190526040808220805486861673ffffffffffffffffffffffffffffffffffffffff19821681179092559151919094169392849290917fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec9190a4505050565b6001600160a01b03808216600090815260208190526040812054909116806104c357604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6041845110156104e657604051632bb1a9c560e11b815260040160405180910390fd5b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c869052603c812061051f9086610581565b9050806001600160a01b0316826001600160a01b0316036105455760019250505061036e565b61054f8686610581565b9050806001600160a01b0316826001600160a01b0316036105755760019250505061036e565b50600095945050505050565b600080600061059085856105a5565b9150915061059d816105ea565b509392505050565b60008082516041036105db5760208301516040840151606085015160001a6105cf87828585610734565b945094505050506105e3565b506000905060025b9250929050565b60008160048111156105fe576105fe610aa1565b036106065750565b600181600481111561061a5761061a610aa1565b036106675760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610250565b600281600481111561067b5761067b610aa1565b036106c85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610250565b60038160048111156106dc576106dc610aa1565b036103285760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610250565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561076b57506000905060036107ef565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156107bf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166107e8576000600192509250506107ef565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261081f57600080fd5b813567ffffffffffffffff8082111561083a5761083a6107f8565b604051601f8301601f19908116603f01168101908282118183101715610862576108626107f8565b8160405283815286602085880101111561087b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156108ae57600080fd5b82359150602083013567ffffffffffffffff8111156108cc57600080fd5b6108d88582860161080e565b9150509250929050565b6001600160a01b038116811461032857600080fd5b60006020828403121561090957600080fd5b813561036e816108e2565b600060208083528351808285015260005b8181101561094157858101830151858201604001528201610925565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060006060848603121561097757600080fd5b83359250602084013567ffffffffffffffff81111561099557600080fd5b6109a18682870161080e565b92505060408401356109b2816108e2565b809150509250925092565b600080604083850312156109d057600080fd5b823567ffffffffffffffff8111156109e757600080fd5b830161016081860312156109fa57600080fd5b946020939093013593505050565b6000808335601e19843603018112610a1f57600080fd5b83018035915067ffffffffffffffff821115610a3a57600080fd5b6020019150368190038213156105e357600080fd5b60008060408385031215610a6257600080fd5b823567ffffffffffffffff811115610a7957600080fd5b610a858582860161080e565b9250506020830135610a96816108e2565b809150509250929050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212200f64d9f85c9789441febe939ee2ec56eca850156ea304b5eabd0856fee5e186e64736f6c63430008110033"; + +type ECDSAOwnershipRegistryModule_v100ConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: ECDSAOwnershipRegistryModule_v100ConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class ECDSAOwnershipRegistryModule_v100__factory extends ContractFactory { + constructor(...args: ECDSAOwnershipRegistryModule_v100ConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + overrides || {} + ) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): ECDSAOwnershipRegistryModule_v100 { + return super.attach(address) as ECDSAOwnershipRegistryModule_v100; + } + override connect(signer: Signer): ECDSAOwnershipRegistryModule_v100__factory { + return super.connect(signer) as ECDSAOwnershipRegistryModule_v100__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): ECDSAOwnershipRegistryModule_v100Interface { + return new utils.Interface( + _abi + ) as ECDSAOwnershipRegistryModule_v100Interface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ECDSAOwnershipRegistryModule_v100 { + return new Contract( + address, + _abi, + signerOrProvider + ) as ECDSAOwnershipRegistryModule_v100; + } +} diff --git a/packages/common/src/typechain/factories/biconomy_v2.0.0/MultiChainValidationModule_v100__factory.ts b/packages/common/src/typechain/factories/biconomy_v2.0.0/MultiChainValidationModule_v100__factory.ts new file mode 100644 index 000000000..3ad68a878 --- /dev/null +++ b/packages/common/src/typechain/factories/biconomy_v2.0.0/MultiChainValidationModule_v100__factory.ts @@ -0,0 +1,357 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../common"; +import type { + MultiChainValidationModule_v100, + MultiChainValidationModule_v100Interface, +} from "../../biconomy_v2.0.0/MultiChainValidationModule_v100"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "smartAccount", + type: "address", + }, + ], + name: "AlreadyInitedForSmartAccount", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "smartAccount", + type: "address", + }, + ], + name: "NoOwnerRegisteredForSmartAccount", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "NotEOA", + type: "error", + }, + { + inputs: [], + name: "WrongSignatureLength", + type: "error", + }, + { + inputs: [], + name: "ZeroAddressNotAllowedAsOwner", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "smartAccount", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "oldOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "NAME", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "VERSION", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "smartAccount", + type: "address", + }, + ], + name: "getOwner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "eoaOwner", + type: "address", + }, + ], + name: "initForSmartAccount", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "dataHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "moduleSignature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "dataHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "moduleSignature", + type: "bytes", + }, + { + internalType: "address", + name: "smartAccount", + type: "address", + }, + ], + name: "isValidSignatureForAddress", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x6080806040523461001657610b9b908161001c8239f35b600080fdfe6040608081526004908136101561001557600080fd5b6000803560e01c80631626ba7e1461040a5780632ede3bc014610388578063715018a614610318578063a3f4df7e146102c3578063f2fde38b1461020d578063f44c339d14610185578063fa5441611461012d578063ffa1ad74146100d45763fff35b721461008357600080fd5b346100cd576003199082823601126100cd5783359167ffffffffffffffff83116100d0576101609083360301126100cd57506020926100c691602435910161085d565b9051908152f35b80fd5b5080fd5b5090346100d057816003193601126100d0578051610129916100f58261044a565b600582527f302e322e300000000000000000000000000000000000000000000000000000006020830152519182918261053f565b0390f35b5082346100d05760203660031901126100d0576001600160a01b038381610152610506565b16938481528060205220541691821561016f576020838551908152f35b8351633d3fff5360e21b81529182015260249150fd5b5091346102095760603660031901126102095760243567ffffffffffffffff8111610205576101b790369083016104ba565b90604435936001600160a01b03851685036100cd5750926101db916020943561056b565b90517fffffffff000000000000000000000000000000000000000000000000000000009091168152f35b8380fd5b8280fd5b5091903461020957602036600319011261020957610229610506565b803b6102a4576001600160a01b0380911692831561029657503384528360205281842054169083208273ffffffffffffffffffffffffffffffffffffffff19825416179055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8480a480f35b82516307e179e960e31b8152fd5b826001600160a01b0360249351926377817ac360e01b84521690820152fd5b5090346100d057816003193601126100d0578051610129916102e48261044a565b601f82527f4543445341204f776e657273686970205265676973747279204d6f64756c65006020830152519182918261053f565b50809134610385578160031936011261038557338252816020526001600160a01b03818320541690822073ffffffffffffffffffffffffffffffffffffffff198154169055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a480f35b50fd5b509134610209576020366003190112610209576103a3610506565b338452836020526001600160a01b03908184862054166103f45716908115610296575081602093338152808552209073ffffffffffffffffffffffffffffffffffffffff1982541617905551308152f35b8351632c4dfb7d60e21b81523381850152602490fd5b50346100cd57816003193601126100cd576024359067ffffffffffffffff82116100cd57506020926104426101db92369083016104ba565b33913561056b565b6040810190811067ffffffffffffffff82111761046657604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761046657604052565b67ffffffffffffffff811161046657601f01601f191660200190565b81601f82011215610501578035906104d18261049e565b926104df604051948561047c565b8284526020838301011161050157816000926020809301838601378301015290565b600080fd5b600435906001600160a01b038216820361050157565b60005b83811061052f5750506000910152565b818101518382015260200161051f565b6040916020825261055f815180928160208601526020868601910161051c565b601f01601f1916010190565b9061057692916105a9565b61059e577fffffffff0000000000000000000000000000000000000000000000000000000090565b630b135d3f60e11b90565b916001600160a01b0380911691600093838552846020528260408620541693841561065757506041825110610645577f19457468657265756d205369676e6564204d6573736167653a0a333200000000855280601c528261061861061084603c8920610789565b91909161066f565b16841461063b5761062c9161061091610789565b16146106355790565b50600190565b5050505050600190565b604051632bb1a9c560e11b8152600490fd5b60249060405190633d3fff5360e21b82526004820152fd5b600581101561077357806106805750565b600181036106cd5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b6002810361071a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b60031461072357565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b634e487b7160e01b600052602160045260246000fd5b9060418151146000146107b7576107b3916020820151906060604084015193015160001a906107c1565b9091565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831161083e5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156108315781516001600160a01b03811615610635579190565b50604051903d90823e3d90fd5b50505050600090600390565b519065ffffffffffff8216820361050157565b919091610140810135601e19823603018112156105015781019182359267ffffffffffffffff9081851161050157602092838201958036038713610501578201604096878483031261050157359084821161050157879186806108c49301918601016104ba565b920135946001600160a01b0395868116036105015735966041835114610b43578251830160a0848783019203126105015761090086850161084a565b9061090c89860161084a565b9060608601519160808701518881116105015787019782603f8a011215610501578989015197818911610466578a998d9960059a818c1b9161095482519e8f9085019061047c565b8d528d8d019183010191868311610501578f8e9101915b838310610b33575050505060a081015190828211610501570183603f8201121561050157808b01518d9461099e8261049e565b956109ab8151978861047c565b8287528284010111610501576109c6918e8d8701910161051c565b8b51908a8201927fffffffffffff000000000000000000000000000000000000000000000000000090818860d01b16855260d01b1696876026840152602c830152602c8252606082019082821090821117610466578c52519020986000995b88518b1015610a84578a881b89018a0151908c600083831015610a7757505060005289528a6000205b996000198114610a615760010199610a25565b634e487b7160e01b600052601160045260246000fd5b91909282528b5220610a4e565b91965094999a93985081965096919603610af05750610aa8949596975016916105a9565b15610ae95779ffffffffffff00000000000000000000000000000000000000009065ffffffffffff90818116610ae257505b60a01b161790565b9050610ada565b5050600190565b60649089519062461bcd60e51b82526004820152600e60248201527f496e76616c696420557365724f700000000000000000000000000000000000006044820152fd5b82518152918101918e910161096b565b94925095909250610b56945016916105a9565b15610b6057600090565b60019056fea26469706673582212202a3242d73a2c92fd929c32924b5f964b80434c765985e101142ea4635452e6a664736f6c63430008110033"; + +type MultiChainValidationModule_v100ConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: MultiChainValidationModule_v100ConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class MultiChainValidationModule_v100__factory extends ContractFactory { + constructor(...args: MultiChainValidationModule_v100ConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + overrides || {} + ) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): MultiChainValidationModule_v100 { + return super.attach(address) as MultiChainValidationModule_v100; + } + override connect(signer: Signer): MultiChainValidationModule_v100__factory { + return super.connect(signer) as MultiChainValidationModule_v100__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): MultiChainValidationModule_v100Interface { + return new utils.Interface( + _abi + ) as MultiChainValidationModule_v100Interface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): MultiChainValidationModule_v100 { + return new Contract( + address, + _abi, + signerOrProvider + ) as MultiChainValidationModule_v100; + } +} diff --git a/packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccountFactory_v200__factory.ts b/packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccountFactory_v200__factory.ts new file mode 100644 index 000000000..23f1963a4 --- /dev/null +++ b/packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccountFactory_v200__factory.ts @@ -0,0 +1,361 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../common"; +import type { + SmartAccountFactory_v200, + SmartAccountFactory_v200Interface, +} from "../../biconomy_v2.0.0/SmartAccountFactory_v200"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "_basicImplementation", + type: "address", + }, + { + internalType: "address", + name: "_newOwner", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "initialAuthModule", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "AccountCreation", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "initialAuthModule", + type: "address", + }, + ], + name: "AccountCreationWithoutIndex", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [], + name: "accountCreationCode", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address", + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "basicImplementation", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + ], + name: "deployAccount", + outputs: [ + { + internalType: "address", + name: "proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "deployCounterFactualAccount", + outputs: [ + { + internalType: "address", + name: "proxy", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + { + internalType: "uint256", + name: "index", + type: "uint256", + }, + ], + name: "getAddressForCounterFactualAccount", + outputs: [ + { + internalType: "address", + name: "_account", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "minimalHandler", + outputs: [ + { + internalType: "contract DefaultCallbackHandler", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address", + }, + ], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address", + }, + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x60c0346101445761171b906001600160401b0390601f38849003908101601f1916820190838211838310176100ea57808391604096879485528339810103126101445761006861005a602061005384610149565b9301610149565b6100633361015d565b61015d565b6001600160a01b03811615610100576080528151906104e690818301908111838210176100ea578291611235833903906000f080156100df5760a0525161109090816101a582396080518181816101ed015281816105a70152818161074601526107ef015260a05181818161039e0152610b7c0152f35b50513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b825162461bcd60e51b815260206004820152601d60248201527f696d706c656d656e746174696f6e2063616e6e6f74206265207a65726f0000006044820152606490fd5b600080fd5b51906001600160a01b038216820361014457565b600080546001600160a01b039283166001600160a01b03198216811783559216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fe60806040526004361015610013575b600080fd5b60003560e01c80632e7a1a831461010357806331c884df146100fa5780633b3cb143146100f157806345171159146100e85780634a1ce599146100df578063715018a6146100d6578063743b1e03146100cd5780638da5cb5b146100c4578063b36f9705146100bb578063daf0dfc8146100b2578063df20ffbc146100a95763f2fde38b146100a157600080fd5b61000e6108a6565b5061000e61076a565b5061000e610725565b5061000e6106a1565b5061000e610679565b5061000e610533565b5061000e6104cb565b5061000e61045f565b5061000e6103c2565b5061000e61037d565b5061000e61031d565b5061000e61018c565b6001600160a01b0381160361000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020838186019501011161000e57565b90606060031983011261000e576004356101648161010c565b916024359067ffffffffffffffff821161000e576101849160040161011d565b909160443590565b503461000e576102f66102dc6102d06101b16101a73661014b565b9392919091610b54565b6102c1610120916020926101c6848201610a8e565b90808252610bdb858301396040519461024a61025687610214888201956001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087610a9e565b0394610228601f19968781018b528a610a5f565b8781519101209260405192839189830195869091604092825260208201520190565b03858101835282610a5f565b519020945190206040517fff000000000000000000000000000000000000000000000000000000000000009481019485523060601b6bffffffffffffffffffffffff191660018601526015850195909552603584015291929182605585015b03908101835282610a5f565b5190206001600160a01b031690565b6001600160a01b031690565b6040516001600160a01b0390911681529081906020820190565b0390f35b60005b83811061030d5750506000910152565b81810151838201526020016102fd565b503461000e57600036600319011261000e5761036f60406101208151906103476020820183610a5f565b8082526020820190610cfb8239825193849260208452518092816020860152858501906102fa565b601f01601f19168101030190f35b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b506000604036600319011261045c576004356103dd8161010c565b816024359163ffffffff8316809303610458576001600160a01b0390610401610991565b169161040e8315156109e9565b823b1561045857602460405180948193621cb65b60e51b8352600483015234905af1801561044b575b61043f575080f35b61044890610a35565b80f35b610453610a81565b610437565b5080fd5b80fd5b503461000e576000602036600319011261045c57806001600160a01b036004356104888161010c565b610490610991565b1661049c8115156109e9565b803b156104c857819060046040518094819363bb9fe6bf60e01b83525af1801561044b5761043f575080f35b50fd5b503461000e5760008060031936011261045c576104e6610991565b806001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461000e57604036600319011261000e576004356105518161010c565b60243567ffffffffffffffff811161000e5761057190369060040161011d565b6101209161058160208401610a8e565b92808452610e1b60208501396105fe604051926105df846105d16001600160a01b0397887f0000000000000000000000000000000000000000000000000000000000000000169060208401610a9e565b03601f198101865285610a5f565b835160009460200185f092858416966105f9881515610b08565b610b54565b805183918161064c575b50506040519485946102f69416917f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf6579080a36001600160a01b031682526020820190565b8296945090602083920182855af193604051943d82873e1561067557935191936102f638610608565b3d85fd5b503461000e57600036600319011261000e5760206001600160a01b0360005416604051908152f35b503461000e576000604036600319011261045c576004356106c18161010c565b81602435916106cf8361010c565b6106d7610991565b6001600160a01b03809116926106ee8415156109e9565b833b156107215760249083604051958694859363611d2e7560e11b85521660048401525af1801561044b5761043f575080f35b8280fd5b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461000e5761077c6101a73661014b565b9081519160208082019384209260405193846107a78385830193849091604092825260208201520190565b03946107bb601f1996878101835282610a5f565b519020610120946107cd848701610a8e565b95808752610f3b8588013961081860405191826102b56001600160a01b03998a7f00000000000000000000000000000000000000000000000000000000000000001690898401610a9e565b8051906000940184f591848316610830811515610abc565b8194518061087d575b50604051965086956102f69516917f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f29080a46001600160a01b031682526020820190565b82978380939750865af194604051953d82883e156108a2579451939485949338610839565b3d86fd5b503461000e57602036600319011261000e576004356108c48161010c565b6108cc610991565b6001600160a01b0380911680156109265760009182548273ffffffffffffffffffffffffffffffffffffffff198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608490fd5b6001600160a01b036000541633036109a557565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156109f057565b60405162461bcd60e51b815260206004820152601260248201527f496e76616c6964204550206164647265737300000000000000000000000000006044820152606490fd5b67ffffffffffffffff8111610a4957604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a4957604052565b506040513d6000823e3d90fd5b90610a9c6040519283610a5f565b565b6020929190610ab48492828151948592016102fa565b019081520190565b15610ac357565b60405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606490fd5b15610b0f57565b60405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606490fd5b60a490610bd7929380604051958693631bc6fec760e11b60208601526001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016602487015216604485015260606064850152816084850152848401376000838284010152601f80199101168101036084810184520182610a5f565b9056fe6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033a2646970667358221220cc3855215776915d9c3562b4380fe9fbf7afb53b9434cabc4802d531f12df64364736f6c6343000811003360808060405234610016576104ca908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816223de291461031b57816301ffc9a71461029457508063150b7a021461023d578063a3f4df7e146101d6578063bc197c811461014c578063f23a6e61146100f25763ffa1ad741461007157600080fd5b346100ee57816003193601126100ee578051918183019083821067ffffffffffffffff8311176100db57506100d793508152600582527f312e302e300000000000000000000000000000000000000000000000000000006020830152519182918261041a565b0390f35b634e487b7160e01b815260418552602490fd5b5080fd5b5090346101495760a03660031901126101495761010d6103a1565b506101166103c9565b506084359067ffffffffffffffff8211610149575060209261013a913691016103ec565b50505163f23a6e6160e01b8152f35b80fd5b5090346101495760a0366003190112610149576101676103a1565b506101706103c9565b5067ffffffffffffffff906044358281116100ee576101929036908601610463565b50506064358281116100ee576101ab9036908601610463565b505060843591821161014957506020926101c7913691016103ec565b50505163bc197c8160e01b8152f35b50346100ee57816003193601126100ee578051918183019083821067ffffffffffffffff8311176100db57506100d793508152601882527f44656661756c742043616c6c6261636b2048616e646c657200000000000000006020830152519182918261041a565b509034610149576080366003190112610149576102586103a1565b506102616103c9565b506064359067ffffffffffffffff82116101495750602092610285913691016103ec565b505051630a85bd0160e11b8152f35b83908534610317576020366003190112610317573563ffffffff60e01b81168091036103175760209250630271189760e51b8114908115610306575b81156102f6575b81156102e5575b5015158152f35b6301ffc9a760e01b149050836102de565b6223de2960e01b811491506102d7565b630a85bd0160e11b811491506102d0565b8280fd5b8385346100ee5760c03660031901126100ee576103366103a1565b5061033f6103c9565b5060443573ffffffffffffffffffffffffffffffffffffffff8116036100ee5767ffffffffffffffff9060843582811161039d5761038090369083016103ec565b505060a43591821161031757610398913691016103ec565b505080f35b8380fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103c457565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103c457565b9181601f840112156103c45782359167ffffffffffffffff83116103c457602083818601950101116103c457565b6020808252825181830181905290939260005b82811061044f57505060409293506000838284010152601f8019910116010190565b81810186015184820160400152850161042d565b9181601f840112156103c45782359167ffffffffffffffff83116103c4576020808501948460051b0101116103c45756fea2646970667358221220e22ad453b03efac358b2f092a996c1bf999c6cba4b1e5c7d1e917139d697fca764736f6c63430008110033"; + +type SmartAccountFactory_v200ConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SmartAccountFactory_v200ConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SmartAccountFactory_v200__factory extends ContractFactory { + constructor(...args: SmartAccountFactory_v200ConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _basicImplementation: PromiseOrValue, + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + _basicImplementation, + _newOwner, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _basicImplementation: PromiseOrValue, + _newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction( + _basicImplementation, + _newOwner, + overrides || {} + ); + } + override attach(address: string): SmartAccountFactory_v200 { + return super.attach(address) as SmartAccountFactory_v200; + } + override connect(signer: Signer): SmartAccountFactory_v200__factory { + return super.connect(signer) as SmartAccountFactory_v200__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SmartAccountFactory_v200Interface { + return new utils.Interface(_abi) as SmartAccountFactory_v200Interface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): SmartAccountFactory_v200 { + return new Contract( + address, + _abi, + signerOrProvider + ) as SmartAccountFactory_v200; + } +} diff --git a/packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccount_v200__factory.ts b/packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccount_v200__factory.ts new file mode 100644 index 000000000..b2dbacd00 --- /dev/null +++ b/packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccount_v200__factory.ts @@ -0,0 +1,1239 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../common"; +import type { + SmartAccount_v200, + SmartAccount_v200Interface, +} from "../../biconomy_v2.0.0/SmartAccount_v200"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "AlreadyInitialized", + type: "error", + }, + { + inputs: [], + name: "BaseImplementationCannotBeZero", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotAnEntryPoint", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotEntryPoint", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotEntryPointOrOwner", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotEntryPointOrSelf", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotOwner", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "CallerIsNotSelf", + type: "error", + }, + { + inputs: [], + name: "DelegateCallsOnly", + type: "error", + }, + { + inputs: [], + name: "EntryPointCannotBeZero", + type: "error", + }, + { + inputs: [], + name: "HandlerCannotBeZero", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "implementationAddress", + type: "address", + }, + ], + name: "InvalidImplementation", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "caller", + type: "address", + }, + ], + name: "MixedAuthFail", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleAlreadyEnabled", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "expectedModule", + type: "address", + }, + { + internalType: "address", + name: "returnedModule", + type: "address", + }, + { + internalType: "address", + name: "prevModule", + type: "address", + }, + ], + name: "ModuleAndPrevModuleMismatch", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleCannotBeZeroOrSentinel", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ModuleNotEnabled", + type: "error", + }, + { + inputs: [], + name: "ModulesAlreadyInitialized", + type: "error", + }, + { + inputs: [], + name: "ModulesSetupExecutionFailed", + type: "error", + }, + { + inputs: [], + name: "OwnerCanNotBeSelf", + type: "error", + }, + { + inputs: [], + name: "OwnerCannotBeZero", + type: "error", + }, + { + inputs: [], + name: "OwnerProvidedIsSame", + type: "error", + }, + { + inputs: [], + name: "TransferToZeroAddressAttempt", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "destLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "valueLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "funcLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "operationLength", + type: "uint256", + }, + ], + name: "WrongBatchProvided", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes", + name: "contractSignature", + type: "bytes", + }, + ], + name: "WrongContractSignature", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "uintS", + type: "uint256", + }, + { + internalType: "uint256", + name: "contractSignatureLength", + type: "uint256", + }, + { + internalType: "uint256", + name: "signatureLength", + type: "uint256", + }, + ], + name: "WrongContractSignatureFormat", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "moduleAddressProvided", + type: "address", + }, + ], + name: "WrongValidationModule", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousHandler", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "handler", + type: "address", + }, + ], + name: "ChangedFallbackHandler", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "DisabledModule", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "EnabledModule", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + indexed: true, + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + { + indexed: false, + internalType: "uint256", + name: "txGas", + type: "uint256", + }, + ], + name: "ExecutionFailure", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ExecutionFromModuleFailure", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "ExecutionFromModuleSuccess", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + indexed: true, + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + { + indexed: false, + internalType: "uint256", + name: "txGas", + type: "uint256", + }, + ], + name: "ExecutionSuccess", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "oldImplementation", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newImplementation", + type: "address", + }, + ], + name: "ImplementationUpdated", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "ModuleTransaction", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "SmartAccountReceivedNativeToken", + type: "event", + }, + { + stateMutability: "nonpayable", + type: "fallback", + }, + { + inputs: [], + name: "VERSION", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "prevModule", + type: "address", + }, + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "disableModule", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "enableModule", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { + internalType: "contract IEntryPoint", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "to", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "data", + type: "bytes[]", + }, + { + internalType: "enum Enum.Operation[]", + name: "operations", + type: "uint8[]", + }, + ], + name: "execBatchTransactionFromModule", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + { + internalType: "uint256", + name: "txGas", + type: "uint256", + }, + ], + name: "execTransactionFromModule", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "execTransactionFromModule", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8", + }, + ], + name: "execTransactionFromModuleReturnData", + outputs: [ + { + internalType: "bool", + name: "success", + type: "bool", + }, + { + internalType: "bytes", + name: "returnData", + type: "bytes", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]", + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]", + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]", + }, + ], + name: "executeBatch_y6U", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + internalType: "bytes", + name: "func", + type: "bytes", + }, + ], + name: "execute_ncC", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getDeposit", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getFallbackHandler", + outputs: [ + { + internalType: "address", + name: "_handler", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getImplementation", + outputs: [ + { + internalType: "address", + name: "_implementation", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "start", + type: "address", + }, + { + internalType: "uint256", + name: "pageSize", + type: "uint256", + }, + ], + name: "getModulesPaginated", + outputs: [ + { + internalType: "address[]", + name: "array", + type: "address[]", + }, + { + internalType: "address", + name: "next", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "handler", + type: "address", + }, + { + internalType: "address", + name: "moduleSetupContract", + type: "address", + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes", + }, + ], + name: "init", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address", + }, + ], + name: "isModuleEnabled", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "dataHash", + type: "bytes32", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + name: "isValidSignature", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint192", + name: "_key", + type: "uint192", + }, + ], + name: "nonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "noncesDeprecated", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "ownerDeprecated", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "handler", + type: "address", + }, + ], + name: "setFallbackHandler", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "setupContract", + type: "address", + }, + { + internalType: "bytes", + name: "setupData", + type: "bytes", + }, + ], + name: "setupAndEnableModule", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes4", + name: "_interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_implementation", + type: "address", + }, + ], + name: "updateImplementation", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256", + }, + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validationData", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60c0346100fc57601f61213e38819003918201601f19168301916001600160401b03831184841017610101578084926020946040528339810103126100fc57516001600160a01b0381168082036100fc573060a052156100ea57608052600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556040516120269081610118823960805181818161096f01528181610b6201528181610c0301528181610f2101528181610f740152818161119e0152818161193b0152611996015260a051816114dd0152f35b60405163091748f960e21b8152600490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040526004361015610030575b36156100285734610023576100216119d6565b005b600080fd5b6100216114d3565b60003560e01c8061189a146101b357806146801461021657806301ffc9a71461025e578063025b22bc146102555780631626ba7e1461024c57806321632045146102435780632d9ad53d1461023a578063378dfd8e146102315780633a871cdd14610228578063468721a71461021f57806347e1da2a146102165780634a58db191461020d5780634d44560d146102045780635229073f146101fb5780635305dd27146101f2578063610b5925146101e95780636424e9fe146101e0578063856dfd99146101d7578063aaf10f42146101ce578063acfdf503146101c5578063b0d691fe146101bc578063b61d27f6146101b3578063c399ec88146101aa578063cc2f8452146101a1578063d86f2b3c14610198578063e009cfde1461018f578063f08a032314610186578063f33623b11461017d5763ffa1ad740361000e57610178611439565b61000e565b5061017861140c565b506101786113de565b5061017861120c565b5061017861113a565b50610178611038565b50610178610f45565b506101786102b3565b50610178610f00565b50610178610e5d565b50610178610e36565b50610178610def565b50610178610dc7565b50610178610d99565b50610178610d2d565b50610178610cab565b50610178610bd4565b50610178610b4a565b50610178610342565b50610178610afc565b50610178610929565b506101786107c8565b5061017861076a565b506101786106ab565b5061017861064f565b5061017861049d565b50610178610461565b6001600160a01b0381160361002357565b359061028382610267565b565b9181601f840112156100235782359167ffffffffffffffff8311610023576020838186019501011161002357565b5034610023576060366003190112610023576004356102d181610267565b6044359067ffffffffffffffff8211610023576103076102f8610021933690600401610285565b61030061198c565b36916105fa565b906024359061190d565b9181601f840112156100235782359167ffffffffffffffff8311610023576020808501948460051b01011161002357565b50346100235760603660031901126100235767ffffffffffffffff60043581811161002357610375903690600401610311565b906024358381116100235761038e903690600401610311565b93604435908111610023576103a7903690600401610311565b926103b061198c565b84158015610445575b801561043b575b61040f5760005b8581106103d057005b806104096103e96103e46001948a87611745565b611763565b6103f4838b89611745565b35610403610300858b8a61176d565b9161190d565b016103c7565b5050506084926040519263470c355760e01b845260048401526024830152604482015260006064820152fd5b50838614156103c0565b50858514156103b9565b6001600160e01b031981160361002357565b50346100235760203660031901126100235760206004356104818161044f565b6040516001600160e01b03199091166301ffc9a760e01b148152f35b5034610023576020366003190112610023576004356104bb81610267565b6104c3611931565b6001600160a01b0380821691821561053057803b15610509573054903055167faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da600080a3005b604051630c76093760e01b81526001600160a01b03919091166004820152602490fd5b0390fd5b60405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f000000000000000000006044820152606490fd5b50634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116105a057604052565b6105a8610575565b604052565b90601f8019910116810190811067ffffffffffffffff8211176105a057604052565b60209067ffffffffffffffff81116105ed575b601f01601f19160190565b6105f5610575565b6105e2565b929192610606826105cf565b9161061460405193846105ad565b829481845281830111610023578281602093846000960137010152565b9080601f830112156100235781602061064c933591016105fa565b90565b50346100235760403660031901126100235760243567ffffffffffffffff81116100235761068e6106866020923690600401610631565b600435611834565b6040516001600160e01b03199091168152f35b6002111561002357565b50346100235760a0366003190112610023576004356106c981610267565b60443567ffffffffffffffff8111610023576106e9903690600401610631565b90606435906106f7826106a1565b6084359160013314801561074b575b61073357602093610723938061072d57505a925b60243590611b5a565b6040519015158152f35b9261071a565b6040516321ac7c5f60e01b8152336004820152602490fd5b503360005260006020526001600160a01b036040600020541615610706565b503461002357602036600319011261002357602060043561078a81610267565b6001600160a01b0380911690816001141591826107ae575b50506040519015158152f35b9091506000526000825260406000205416151538806107a2565b5034610023576060366003190112610023576004356107e681610267565b602435906107f382610267565b60443567ffffffffffffffff811161002357610813903690600401610285565b91909260009360018552846020526001600160a01b0393604093858588205416158015906108fd575b6108ed5791610852916103006108589594611a24565b90611f7a565b918216801580156108e3575b6108cd578282856108b1936108c997528060205261089182822060016001600160a01b0319825416179055565b6001815220906001600160a01b03166001600160a01b0319825416179055565b516001600160a01b0390911681529081906020820190565b0390f35b602491519063cadb248f60e01b82526004820152fd5b5060018114610864565b845162dc149f60e41b8152600490fd5b50857f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d45416151561083c565b503461002357600319606036820112610023576004359067ffffffffffffffff82116100235761016082600401918336030112610023576000906001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000163303610a9b576109af6109a76101448693018461153d565b810190611570565b905016926109e06109d3856001600160a01b03166000526000602052604060002090565b546001600160a01b031690565b1615610a7a576020610a116108c9948493604051948580948193637ff9adb960e11b835260243590600484016115fa565b03925af1918215610a6d575b91610a3f575b50610a2f6044356116f1565b6040519081529081906020820190565b610a60915060203d8111610a66575b610a5881836105ad565b8101906114b7565b38610a23565b503d610a4e565b610a756114c6565b610a1d565b6040516326cc3fab60e21b81526001600160a01b0384166004820152602490fd5b604051635dac3db760e11b8152336004820152602490fd5b608060031982011261002357600435610acb81610267565b91602435916044359067ffffffffffffffff821161002357610aef91600401610631565b9060643561064c816106a1565b503461002357610b0b36610ab3565b600193919333148015610b2b575b61073357602093610723935a93611b5a565b503360005260006020526001600160a01b036040600020541615610b19565b50600080600319360112610bd1576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681813b15610bd15760405163b760faf960e01b8152306004820152918290602490829034905af18015610bc4575b610bb8575080f35b610bc19061058c565b80f35b610bcc6114c6565b610bb0565b80fd5b5060006040366003190112610bd157600435610bef81610267565b610bf7611931565b816001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001692833b15610c5f5760449083604051958694859363040b850f60e31b855216600484015260243560248401525af18015610bc457610bb8575080f35b8280fd5b60005b838110610c765750506000910152565b8181015183820152602001610c66565b90602091610c9f81518092818552858086019101610c63565b601f01601f1916010190565b503461002357610cba36610ab3565b90600193929333148015610d0e575b61073357610cd8935a93611b5a565b6040519060203d8301016040523d82523d6000602084013e6108c960405192839215158352604060208401526040830190610c86565b503360005260006020526001600160a01b036040600020541615610cc9565b503461002357604036600319011261002357600435610d4b81610267565b60243567ffffffffffffffff811161002357602091610d71610d7f923690600401610631565b90610d7a611931565b611f7a565b610d8881611d68565b6001600160a01b0360405191168152f35b503461002357602036600319011261002357610021600435610dba81610267565b610dc2611931565b611d68565b50346100235760003660031901126100235760206001600160a01b0360315416604051908152f35b50346100235760003660031901126100235760207f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4546001600160a01b0360405191168152f35b503461002357600036600319011261002357602030546001600160a01b0360405191168152f35b50346100235760803660031901126100235767ffffffffffffffff60043581811161002357610e90903690600401610311565b60249291923582811161002357610eab903690600401610311565b60449491943584811161002357610ec6903690600401610311565b91606435958611610023576108c996610ee6610eee973690600401610311565b969095611c22565b60405190151581529081906020820190565b50346100235760003660031901126100235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610023576000366003190112610023576040516370a0823160e01b815230600482015260209081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fd4575b600091610fb7575b50604051908152f35b610fce9150823d8111610a6657610a5881836105ad565b38610fae565b610fdc6114c6565b610fa6565b90929192604082016040835281518091526060830160208093019160005b8482821061101b575050506001600160a01b0391509416910152565b84516001600160a01b031684529384019390920191600101610fff565b50346100235760403660031901126100235760043561105681610267565b60243561106281611a96565b61106f60405191826105ad565b818152601f1961107e83611a96565b013660208301376110a76109d36000946001600160a01b03166000526000602052604060002090565b6001600160a01b038116801515908161112e575b5080611125575b15611112576111066109d3826110ed61110c946110df8988611ab7565b906001600160a01b03169052565b6001600160a01b03166000526000602052604060002090565b93611ad9565b926110a7565b908381526108c960405192839283610fe1565b508284106110c2565b600191501415386110bb565b50346100235760203660031901126100235760043577ffffffffffffffffffffffffffffffffffffffffffffffff8116809103610023576108c99060405190631aab3f0d60e11b825230600483015260248201526020816044816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ff575b6000916111e1575b506040519081529081906020820190565b6111f9915060203d8111610a6657610a5881836105ad565b386111d0565b6112076114c6565b6111c8565b50346100235760403660031901126100235760043561122a81610267565b60243561123681610267565b61123e611931565b6001600160a01b038116801580156113d4575b6113b3576112846112786109d3856001600160a01b03166000526000602052604060002090565b6001600160a01b031690565b03611359578061130a7faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276936112ef6112d56109d3611354966001600160a01b03166000526000602052604060002090565b916001600160a01b03166000526000602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b61133a61132a826001600160a01b03166000526000602052604060002090565b6001600160a01b03198154169055565b6040516001600160a01b0390911681529081906020820190565b0390a1005b61052c61137c6109d3846001600160a01b03166000526000602052604060002090565b604051633103525b60e21b81526001600160a01b039384166004820152908316602482015292909116604483015281906064820190565b60405163cadb248f60e01b81526001600160a01b0383166004820152602490fd5b5060018114611251565b5034610023576020366003190112610023576100216004356113ff81610267565b611407611931565b611a24565b50346100235760203660031901126100235760043560005260326020526020604060002054604051908152f35b5034610023576000366003190112610023576108c96040516040810181811067ffffffffffffffff8211176114aa575b604052600581527f322e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610c86565b6114b2610575565b611469565b90816020910312610023575190565b506040513d6000823e3d90fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301461152b5734337ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce02600080a3565b604051633c97166560e21b8152600490fd5b903590601e1981360301821215610023570180359067ffffffffffffffff82116100235760200191813603831361002357565b919060408382031261002357823567ffffffffffffffff81116100235760209161159b918501610631565b92013561064c81610267565b9035601e198236030181121561002357016020813591019167ffffffffffffffff821161002357813603831361002357565b908060209392818452848401376000828201840152601f01601f1916010190565b9291906116ec611657602092604087526116276040880161161a83610278565b6001600160a01b03169052565b8381013560608801526116dc61164060408301836115a7565b9390610160948560808c01526101a08b01916115d9565b916116d361167f61166b60608401846115a7565b603f198d8803810160a08f015296916115d9565b608083013560c08c015260a083013560e08c01528a6101009660c0850135888301526116c361012060e087013581850152610140998701358a8501528601866115a7565b92909188828603019101526115d9565b938101906115a7565b91888403016101808901526115d9565b930152565b806116f95750565b600080808093338219f1503d15610283573d611714816105cf565b9061172260405192836105ad565b8152600060203d92013e565b50634e487b7160e01b600052603260045260246000fd5b9190811015611756575b60051b0190565b61175e61172e565b61174f565b3561064c81610267565b90916117869281101561178a575b60051b81019061153d565b9091565b61179261172e565b61177b565b919060408382031261002357825167ffffffffffffffff81116100235783019080601f83011215610023578151916117ce836105cf565b916117dc60405193846105ad565b83835260208483010111610023576020926117fc91848085019101610c63565b92015161064c81610267565b90816020910312610023575161064c8161044f565b60409061064c939281528160208201520190610c86565b906118489060208082518301019101611797565b90916001600160a01b03809216916118766109d3846001600160a01b03166000526000602052604060002090565b16156118ec57916020916118a093604051809581948293630b135d3f60e11b84526004840161181d565b03915afa9081156118df575b6000916118b7575090565b61064c915060203d81116118d8575b6118d081836105ad565b810190611808565b503d6118c6565b6118e76114c6565b6118ac565b6040516326cc3fab60e21b81526001600160a01b0383166004820152602490fd5b916000928392602083519301915af1604051903d6000833e1561192d5750565b3d90fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141580611982575b61196a57565b604051634776242160e01b8152336004820152602490fd5b5030331415611964565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119be57565b60405163e6fce6a560e01b8152336004820152602490fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4548015610021576000808092368280373360601b3652818060143601925af13d82803e1561192d573d90f35b6001600160a01b03808216918215611a84577f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d49081549155167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c600080a3565b60405163dd449f5f60e01b8152600490fd5b60209067ffffffffffffffff8111611aaf5760051b0190565b61175e610575565b6020918151811015611acc575b60051b010190565b611ad461172e565b611ac4565b6000198114611ae85760010190565b634e487b7160e01b600052601160045260246000fd5b611b1690602060405192828480945193849201610c63565b810103902090565b906002821015611b2b5752565b634e487b7160e01b600052602160045260246000fd5b60209093929193611b56816040810196611b1e565b0152565b9493929091946002821015611b2b5760018203611c05576000808751602089018488f4955b8615611bcf577f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee91611bca611bbb6001600160a01b0393611afe565b96604051938493169583611b41565b0390a4565b7f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a91611bca611bbb6001600160a01b0393611afe565b600080875160208901868589f195611b7f565b3561064c816106a1565b9497969391929795909560009887158015611d5e575b8015611d54575b8015611d4a575b611d1b576001978833148015611ceb575b6107335797969594939291906000985b808a10611c7a5750505050505050505050565b9091929394959697899b50611cdb888888611cd589869f8f81611cc0818e611cb98f968f97611cb36103e483611ccd9b611cc89b611745565b9c611745565b359861176d565b989094611745565b611c18565b9436916105fa565b91611eab565b9b01989796959493929190611c67565b506001600160a01b03611d146109d3336001600160a01b03166000526000602052604060002090565b1615611c57565b60405163470c355760e01b81526004810189905260248101919091526044810182905260648101869052608490fd5b5085821415611c46565b5081811415611c3f565b5080881415611c38565b6001600160a01b0381168015908115611ea0575b50611e7d57611da46112786109d3836001600160a01b03166000526000602052604060002090565b611e5a57600160009081526020527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844090611e5590611e21611e047fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6109d3565b6112ef836001600160a01b03166000526000602052604060002090565b6001600090815260205261133a817fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6112ef565b0390a1565b60405163b29d459560e01b81526001600160a01b03919091166004820152602490fd5b60405163cadb248f60e01b81526001600160a01b03919091166004820152602490fd5b600191501438611d7c565b939293611ebb5a86858585611b5a565b948515611f4e57611f23611f187f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da956001600160a01b0395604051968796338852166020870152604086015260a0606086015260a0850190610c86565b916080840190611b1e565b0390a1337f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8600080a2565b50505050337facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375600080a2565b6001600160a01b03811615611fab5781600092918360208194519301915af1604051903d6000833e1561192d575190565b60405162461bcd60e51b815260206004820152601a60248201527f57726f6e67204d6f64756c6520536574757020416464726573730000000000006044820152606490fdfea26469706673582212205e35c32c65281399d0271586e25905b496a0e4ccfd6e3ff9ffae2c43380c16ac64736f6c63430008110033"; + +type SmartAccount_v200ConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SmartAccount_v200ConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SmartAccount_v200__factory extends ContractFactory { + constructor(...args: SmartAccount_v200ConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + anEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + anEntryPoint, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + anEntryPoint: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(anEntryPoint, overrides || {}); + } + override attach(address: string): SmartAccount_v200 { + return super.attach(address) as SmartAccount_v200; + } + override connect(signer: Signer): SmartAccount_v200__factory { + return super.connect(signer) as SmartAccount_v200__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SmartAccount_v200Interface { + return new utils.Interface(_abi) as SmartAccount_v200Interface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): SmartAccount_v200 { + return new Contract(address, _abi, signerOrProvider) as SmartAccount_v200; + } +} diff --git a/packages/common/src/typechain/factories/biconomy_v2.0.0/index.ts b/packages/common/src/typechain/factories/biconomy_v2.0.0/index.ts new file mode 100644 index 000000000..09c5a3a18 --- /dev/null +++ b/packages/common/src/typechain/factories/biconomy_v2.0.0/index.ts @@ -0,0 +1,7 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { ECDSAOwnershipRegistryModule_v100__factory } from "./ECDSAOwnershipRegistryModule_v100__factory"; +export { MultiChainValidationModule_v100__factory } from "./MultiChainValidationModule_v100__factory"; +export { SmartAccountFactory_v200__factory } from "./SmartAccountFactory_v200__factory"; +export { SmartAccount_v200__factory } from "./SmartAccount_v200__factory"; diff --git a/packages/common/src/typechain/factories/entrypoint/EntryPoint_v005__factory.ts b/packages/common/src/typechain/factories/entrypoint/EntryPoint_v005__factory.ts new file mode 100644 index 000000000..ca50f060c --- /dev/null +++ b/packages/common/src/typechain/factories/entrypoint/EntryPoint_v005__factory.ts @@ -0,0 +1,1370 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../common"; +import type { + EntryPoint_v005, + EntryPoint_v005Interface, +} from "../../entrypoint/EntryPoint_v005"; + +const _abi = [ + { + inputs: [ + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "paid", + type: "uint256", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "bool", + name: "targetSuccess", + type: "bool", + }, + { + internalType: "bytes", + name: "targetResult", + type: "bytes", + }, + ], + name: "ExecutionResult", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "opIndex", + type: "uint256", + }, + { + internalType: "string", + name: "reason", + type: "string", + }, + ], + name: "FailedOp", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + ], + name: "SenderAddressResult", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "aggregator", + type: "address", + }, + ], + name: "SignatureValidationFailed", + type: "error", + }, + { + inputs: [ + { + components: [ + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256", + }, + { + internalType: "bool", + name: "sigFailed", + type: "bool", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "bytes", + name: "paymasterContext", + type: "bytes", + }, + ], + internalType: "struct IEntryPoint.ReturnInfo", + name: "returnInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "senderInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "factoryInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "paymasterInfo", + type: "tuple", + }, + ], + name: "ValidationResult", + type: "error", + }, + { + inputs: [ + { + components: [ + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256", + }, + { + internalType: "bool", + name: "sigFailed", + type: "bool", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "bytes", + name: "paymasterContext", + type: "bytes", + }, + ], + internalType: "struct IEntryPoint.ReturnInfo", + name: "returnInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "senderInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "factoryInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "paymasterInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "address", + name: "aggregator", + type: "address", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "stakeInfo", + type: "tuple", + }, + ], + internalType: "struct IEntryPoint.AggregatorStakeInfo", + name: "aggregatorInfo", + type: "tuple", + }, + ], + name: "ValidationResultWithAggregation", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "factory", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "paymaster", + type: "address", + }, + ], + name: "AccountDeployed", + type: "event", + }, + { + anonymous: false, + inputs: [], + name: "BeforeExecution", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "totalDeposit", + type: "uint256", + }, + ], + name: "Deposited", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "aggregator", + type: "address", + }, + ], + name: "SignatureAggregatorChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "totalStaked", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + name: "StakeLocked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "withdrawTime", + type: "uint256", + }, + ], + name: "StakeUnlocked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "withdrawAddress", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "StakeWithdrawn", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + indexed: false, + internalType: "bool", + name: "success", + type: "bool", + }, + { + indexed: false, + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "actualGasUsed", + type: "uint256", + }, + ], + name: "UserOperationEvent", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "revertReason", + type: "bytes", + }, + ], + name: "UserOperationRevertReason", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "withdrawAddress", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "Withdrawn", + type: "event", + }, + { + inputs: [], + name: "SIG_VALIDATION_FAILED", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + ], + name: "_validateSenderAndPaymaster", + outputs: [], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "depositTo", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "deposits", + outputs: [ + { + internalType: "uint112", + name: "deposit", + type: "uint112", + }, + { + internalType: "bool", + name: "staked", + type: "bool", + }, + { + internalType: "uint112", + name: "stake", + type: "uint112", + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + { + internalType: "uint48", + name: "withdrawTime", + type: "uint48", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "getDepositInfo", + outputs: [ + { + components: [ + { + internalType: "uint112", + name: "deposit", + type: "uint112", + }, + { + internalType: "bool", + name: "staked", + type: "bool", + }, + { + internalType: "uint112", + name: "stake", + type: "uint112", + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + { + internalType: "uint48", + name: "withdrawTime", + type: "uint48", + }, + ], + internalType: "struct IStakeManager.DepositInfo", + name: "info", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint192", + name: "key", + type: "uint192", + }, + ], + name: "getNonce", + outputs: [ + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + ], + name: "getSenderAddress", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "getUserOpHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation[]", + name: "userOps", + type: "tuple[]", + }, + { + internalType: "contract IAggregator", + name: "aggregator", + type: "address", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct IEntryPoint.UserOpsPerAggregator[]", + name: "opsPerAggregator", + type: "tuple[]", + }, + { + internalType: "address payable", + name: "beneficiary", + type: "address", + }, + ], + name: "handleAggregatedOps", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation[]", + name: "ops", + type: "tuple[]", + }, + { + internalType: "address payable", + name: "beneficiary", + type: "address", + }, + ], + name: "handleOps", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint192", + name: "key", + type: "uint192", + }, + ], + name: "incrementNonce", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + components: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "address", + name: "paymaster", + type: "address", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + ], + internalType: "struct EntryPoint.MemoryUserOp", + name: "mUserOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256", + }, + { + internalType: "uint256", + name: "contextOffset", + type: "uint256", + }, + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + ], + internalType: "struct EntryPoint.UserOpInfo", + name: "opInfo", + type: "tuple", + }, + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + ], + name: "innerHandleOp", + outputs: [ + { + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint192", + name: "", + type: "uint192", + }, + ], + name: "nonceSequenceNumber", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "op", + type: "tuple", + }, + { + internalType: "address", + name: "target", + type: "address", + }, + { + internalType: "bytes", + name: "targetCallData", + type: "bytes", + }, + ], + name: "simulateHandleOp", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "simulateValidation", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "withdrawAmount", + type: "uint256", + }, + ], + name: "withdrawTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60a080604052346200008957600160025561022c8181016001600160401b038111838210176200007357829162005d18833903906000f080156200006757608052604051615c8990816200008f82396080518181816113df01528181613e9501526141b60152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080806040523461001657610210908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033"; + +type EntryPoint_v005ConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: EntryPoint_v005ConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class EntryPoint_v005__factory extends ContractFactory { + constructor(...args: EntryPoint_v005ConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): EntryPoint_v005 { + return super.attach(address) as EntryPoint_v005; + } + override connect(signer: Signer): EntryPoint_v005__factory { + return super.connect(signer) as EntryPoint_v005__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): EntryPoint_v005Interface { + return new utils.Interface(_abi) as EntryPoint_v005Interface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): EntryPoint_v005 { + return new Contract(address, _abi, signerOrProvider) as EntryPoint_v005; + } +} diff --git a/packages/common/src/typechain/factories/entrypoint/EntryPoint_v006__factory.ts b/packages/common/src/typechain/factories/entrypoint/EntryPoint_v006__factory.ts new file mode 100644 index 000000000..4e8f56793 --- /dev/null +++ b/packages/common/src/typechain/factories/entrypoint/EntryPoint_v006__factory.ts @@ -0,0 +1,1370 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../common"; +import type { + EntryPoint_v006, + EntryPoint_v006Interface, +} from "../../entrypoint/EntryPoint_v006"; + +const _abi = [ + { + inputs: [ + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "paid", + type: "uint256", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "bool", + name: "targetSuccess", + type: "bool", + }, + { + internalType: "bytes", + name: "targetResult", + type: "bytes", + }, + ], + name: "ExecutionResult", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "opIndex", + type: "uint256", + }, + { + internalType: "string", + name: "reason", + type: "string", + }, + ], + name: "FailedOp", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + ], + name: "SenderAddressResult", + type: "error", + }, + { + inputs: [ + { + internalType: "address", + name: "aggregator", + type: "address", + }, + ], + name: "SignatureValidationFailed", + type: "error", + }, + { + inputs: [ + { + components: [ + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256", + }, + { + internalType: "bool", + name: "sigFailed", + type: "bool", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "bytes", + name: "paymasterContext", + type: "bytes", + }, + ], + internalType: "struct IEntryPoint.ReturnInfo", + name: "returnInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "senderInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "factoryInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "paymasterInfo", + type: "tuple", + }, + ], + name: "ValidationResult", + type: "error", + }, + { + inputs: [ + { + components: [ + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256", + }, + { + internalType: "bool", + name: "sigFailed", + type: "bool", + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48", + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48", + }, + { + internalType: "bytes", + name: "paymasterContext", + type: "bytes", + }, + ], + internalType: "struct IEntryPoint.ReturnInfo", + name: "returnInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "senderInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "factoryInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "paymasterInfo", + type: "tuple", + }, + { + components: [ + { + internalType: "address", + name: "aggregator", + type: "address", + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + internalType: "struct IStakeManager.StakeInfo", + name: "stakeInfo", + type: "tuple", + }, + ], + internalType: "struct IEntryPoint.AggregatorStakeInfo", + name: "aggregatorInfo", + type: "tuple", + }, + ], + name: "ValidationResultWithAggregation", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "factory", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "paymaster", + type: "address", + }, + ], + name: "AccountDeployed", + type: "event", + }, + { + anonymous: false, + inputs: [], + name: "BeforeExecution", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "totalDeposit", + type: "uint256", + }, + ], + name: "Deposited", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "aggregator", + type: "address", + }, + ], + name: "SignatureAggregatorChanged", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "totalStaked", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256", + }, + ], + name: "StakeLocked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "withdrawTime", + type: "uint256", + }, + ], + name: "StakeUnlocked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "withdrawAddress", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "StakeWithdrawn", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "paymaster", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + indexed: false, + internalType: "bool", + name: "success", + type: "bool", + }, + { + indexed: false, + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "actualGasUsed", + type: "uint256", + }, + ], + name: "UserOperationEvent", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "revertReason", + type: "bytes", + }, + ], + name: "UserOperationRevertReason", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address", + }, + { + indexed: false, + internalType: "address", + name: "withdrawAddress", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "Withdrawn", + type: "event", + }, + { + inputs: [], + name: "SIG_VALIDATION_FAILED", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + ], + name: "_validateSenderAndPaymaster", + outputs: [], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "depositTo", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "deposits", + outputs: [ + { + internalType: "uint112", + name: "deposit", + type: "uint112", + }, + { + internalType: "bool", + name: "staked", + type: "bool", + }, + { + internalType: "uint112", + name: "stake", + type: "uint112", + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + { + internalType: "uint48", + name: "withdrawTime", + type: "uint48", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "getDepositInfo", + outputs: [ + { + components: [ + { + internalType: "uint112", + name: "deposit", + type: "uint112", + }, + { + internalType: "bool", + name: "staked", + type: "bool", + }, + { + internalType: "uint112", + name: "stake", + type: "uint112", + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32", + }, + { + internalType: "uint48", + name: "withdrawTime", + type: "uint48", + }, + ], + internalType: "struct IStakeManager.DepositInfo", + name: "info", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint192", + name: "key", + type: "uint192", + }, + ], + name: "getNonce", + outputs: [ + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + ], + name: "getSenderAddress", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "getUserOpHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation[]", + name: "userOps", + type: "tuple[]", + }, + { + internalType: "contract IAggregator", + name: "aggregator", + type: "address", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct IEntryPoint.UserOpsPerAggregator[]", + name: "opsPerAggregator", + type: "tuple[]", + }, + { + internalType: "address payable", + name: "beneficiary", + type: "address", + }, + ], + name: "handleAggregatedOps", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation[]", + name: "ops", + type: "tuple[]", + }, + { + internalType: "address payable", + name: "beneficiary", + type: "address", + }, + ], + name: "handleOps", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint192", + name: "key", + type: "uint192", + }, + ], + name: "incrementNonce", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + components: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "address", + name: "paymaster", + type: "address", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + ], + internalType: "struct EntryPoint.MemoryUserOp", + name: "mUserOp", + type: "tuple", + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32", + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256", + }, + { + internalType: "uint256", + name: "contextOffset", + type: "uint256", + }, + { + internalType: "uint256", + name: "preOpGas", + type: "uint256", + }, + ], + internalType: "struct EntryPoint.UserOpInfo", + name: "opInfo", + type: "tuple", + }, + { + internalType: "bytes", + name: "context", + type: "bytes", + }, + ], + name: "innerHandleOp", + outputs: [ + { + internalType: "uint256", + name: "actualGasCost", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint192", + name: "", + type: "uint192", + }, + ], + name: "nonceSequenceNumber", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "op", + type: "tuple", + }, + { + internalType: "address", + name: "target", + type: "address", + }, + { + internalType: "bytes", + name: "targetCallData", + type: "bytes", + }, + ], + name: "simulateHandleOp", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256", + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes", + }, + { + internalType: "bytes", + name: "callData", + type: "bytes", + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256", + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256", + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256", + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes", + }, + { + internalType: "bytes", + name: "signature", + type: "bytes", + }, + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple", + }, + ], + name: "simulateValidation", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address", + }, + { + internalType: "uint256", + name: "withdrawAmount", + type: "uint256", + }, + ], + name: "withdrawTo", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", + }, +] as const; + +const _bytecode = + "0x60a080604052346200008957600160025561022c8181016001600160401b038111838210176200007357829162005d18833903906000f080156200006757608052604051615c8990816200008f82396080518181816113df01528181613e9501526141b60152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080806040523461001657610210908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033"; + +type EntryPoint_v006ConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: EntryPoint_v006ConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class EntryPoint_v006__factory extends ContractFactory { + constructor(...args: EntryPoint_v006ConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): EntryPoint_v006 { + return super.attach(address) as EntryPoint_v006; + } + override connect(signer: Signer): EntryPoint_v006__factory { + return super.connect(signer) as EntryPoint_v006__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): EntryPoint_v006Interface { + return new utils.Interface(_abi) as EntryPoint_v006Interface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): EntryPoint_v006 { + return new Contract(address, _abi, signerOrProvider) as EntryPoint_v006; + } +} diff --git a/packages/common/src/typechain/factories/entrypoint/index.ts b/packages/common/src/typechain/factories/entrypoint/index.ts new file mode 100644 index 000000000..938c54a70 --- /dev/null +++ b/packages/common/src/typechain/factories/entrypoint/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { EntryPoint_v005__factory } from "./EntryPoint_v005__factory"; +export { EntryPoint_v006__factory } from "./EntryPoint_v006__factory"; diff --git a/packages/common/src/typechain/factories/index.ts b/packages/common/src/typechain/factories/index.ts new file mode 100644 index 000000000..5b696075c --- /dev/null +++ b/packages/common/src/typechain/factories/index.ts @@ -0,0 +1,7 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export * as biconomyV100 from "./biconomy_v1.0.0"; +export * as biconomyV200 from "./biconomy_v2.0.0"; +export * as entrypoint from "./entrypoint"; +export * as misc from "./misc"; diff --git a/packages/common/src/typechain/factories/misc/AddressResolver__factory.ts b/packages/common/src/typechain/factories/misc/AddressResolver__factory.ts new file mode 100644 index 000000000..7718c0ed7 --- /dev/null +++ b/packages/common/src/typechain/factories/misc/AddressResolver__factory.ts @@ -0,0 +1,317 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../common"; +import type { + AddressResolver, + AddressResolverInterface, +} from "../../misc/AddressResolver"; + +const _abi = [ + { + inputs: [ + { + internalType: "address", + name: "_v1Factory", + type: "address", + }, + { + internalType: "address", + name: "_v2Factory", + type: "address", + }, + { + internalType: "address", + name: "_ecdsaModule", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "ecdsaOwnershipModule", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_eoa", + type: "address", + }, + { + internalType: "uint8", + name: "_maxIndex", + type: "uint8", + }, + ], + name: "resolveAddresses", + outputs: [ + { + components: [ + { + internalType: "address", + name: "accountAddress", + type: "address", + }, + { + internalType: "address", + name: "factoryAddress", + type: "address", + }, + { + internalType: "address", + name: "currentImplementation", + type: "address", + }, + { + internalType: "string", + name: "currentVersion", + type: "string", + }, + { + internalType: "string", + name: "factoryVersion", + type: "string", + }, + { + internalType: "uint256", + name: "deploymentIndex", + type: "uint256", + }, + ], + internalType: "struct IAddressResolver.SmartAccountResult[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_eoa", + type: "address", + }, + { + internalType: "uint8", + name: "_maxIndex", + type: "uint8", + }, + { + internalType: "address", + name: "_moduleAddress", + type: "address", + }, + { + internalType: "bytes", + name: "_moduleSetupData", + type: "bytes", + }, + ], + name: "resolveAddressesFlexibleForV2", + outputs: [ + { + components: [ + { + internalType: "address", + name: "accountAddress", + type: "address", + }, + { + internalType: "address", + name: "factoryAddress", + type: "address", + }, + { + internalType: "address", + name: "currentImplementation", + type: "address", + }, + { + internalType: "string", + name: "currentVersion", + type: "string", + }, + { + internalType: "string", + name: "factoryVersion", + type: "string", + }, + { + internalType: "uint256", + name: "deploymentIndex", + type: "uint256", + }, + ], + internalType: "struct IAddressResolver.SmartAccountResult[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_eoa", + type: "address", + }, + { + internalType: "uint8", + name: "_maxIndex", + type: "uint8", + }, + ], + name: "resolveAddressesV1", + outputs: [ + { + components: [ + { + internalType: "address", + name: "accountAddress", + type: "address", + }, + { + internalType: "address", + name: "factoryAddress", + type: "address", + }, + { + internalType: "address", + name: "currentImplementation", + type: "address", + }, + { + internalType: "string", + name: "currentVersion", + type: "string", + }, + { + internalType: "string", + name: "factoryVersion", + type: "string", + }, + { + internalType: "uint256", + name: "deploymentIndex", + type: "uint256", + }, + ], + internalType: "struct IAddressResolver.SmartAccountResult[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "smartAccountFactoryV1", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "smartAccountFactoryV2", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x60e0346200011757601f6200124738819003918201601f19168301916001600160401b038311848410176200011c5780849260609460405283398101031262000117576200004d8162000132565b906200006a6040620000626020840162000132565b920162000132565b916200009f6001600160a01b0362000086818416151562000147565b62000095818516151562000147565b8416151562000147565b60805260a05260c0526040516110b2908162000195823960805181818160e601528181610311015281816104700152818161071b015281816108f60152610c2b015260a0518181816104e8015281816105c40152818161080c015281816109cd0152610aaa015260c051818181607e01526109980152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200011757565b156200014f57565b60405162461bcd60e51b815260206004820152601960248201527f5265717569726564206e6f6e2d7a65726f2061646472657373000000000000006044820152606490fdfe6080604052600436101561001257600080fd5b60003560e01c806326bbd86c146108305780632819f31c146107ec578063315f3c03146103355780635acdcdc6146102f15780638d440ec2146100a75763c866cae31461005e57600080fd5b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100a25760403660031901126100a2576100c0610cfc565b60ff6100ca610d12565b166100d481610ec6565b9160009160006001600160a01b0392837f000000000000000000000000000000000000000000000000000000000000000016915b83811061016157868661011a81610ec6565b9160005b82811061013757604051806101338682610d6a565b0390f35b8061014460019284610fde565b5161014f8287610fde565b5261015a8186610fde565b500161011e565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081604481875afa90811561028b576000916102d2575b508581161515806102c8575b6101b6575b50600101610108565b90956040519063557887a160e11b82526020826004818a87165afa91821561028b57600092610297575b506040516001621794a360e21b03198152926000846004818b85165afa801561028b5788600195948695600093610266575b50816040519461022186610e22565b168452886020850152166040830152606082015261023d610fc0565b60808201528860a0820152610252828b610fde565b5261025d818a610fde565b500195906101ad565b6102849193503d806000833e61027c8183610e70565b810190610f5e565b918d610212565b6040513d6000823e3d90fd5b6102ba91925060203d6020116102c1575b6102b28183610e70565b810190610f3f565b90896101e0565b503d6102a8565b50803b15156101a8565b6102eb915060203d6020116102c1576102b28183610e70565b8861019c565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760803660031901126100a25761034e610cfc565b610356610d12565b906001600160a01b0360443516604435036100a2576064359167ffffffffffffffff83116100a257366023840112156100a257826004013561039781610e92565b936103a56040519586610e70565b81855236602483830101116100a2578160009260246020930183880137850101526103da60ff6103d483611008565b16610ec6565b9260009260005b60ff841681106104395785856103f681610ec6565b9160005b82811061040f57604051806101338682610d6a565b8061041c60019284610fde565b516104278287610fde565b526104328186610fde565b50016103fa565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b576000916107cd575b506001600160a01b0381161515806107c3575b610696575b50604051632e7a1a8360e01b8152602081806104dc858860443560048501611033565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610677575b506001600160a01b03811615158061066d575b61053a575b506001016103e1565b90946040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b5760009261064c575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610626575b506001600160a01b039081604051946105be86610e22565b168452817f000000000000000000000000000000000000000000000000000000000000000016602085015216604083015260608201526105fc61105e565b60808201528860a0820152610611828b610fde565b5261061c818a610fde565b5001959150610531565b6001600160a01b03919250610645903d806000833e61027c8183610e70565b91906105a6565b61066691925060203d6020116102c1576102b28183610e70565b908861056b565b50803b151561052c565b610690915060203d6020116102c1576102b28183610e70565b87610519565b60405163557887a160e11b81529195906020836004816001600160a01b0385165afa92831561028b576000936107a2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b5760019460009261077c575b506001600160a01b0390816040519461071586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610753610fc0565b60808201528660a08201526107688289610fde565b526107738188610fde565b500193866104b9565b6001600160a01b0391925061079b903d806000833e61027c8183610e70565b91906106fd565b6107bc91935060203d6020116102c1576102b28183610e70565b91886106c7565b50803b15156104b4565b6107e6915060203d6020116102c1576102b28183610e70565b876104a1565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760403660031901126100a257610849610cfc565b610851610d12565b61085f60ff6103d483611008565b9160009160005b60ff821681106108bf5750505061087c81610ec6565b9160005b82811061089557604051806101338682610d6a565b806108a260019284610fde565b516108ad8287610fde565b526108b88186610fde565b5001610880565b604051631acd17f560e31b81526001600160a01b038416600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610cdd575b506001600160a01b038116151580610cd3575b610ba6575b5060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff831117610b9257506040819052632e7a1a8360e01b8152602081605f19846109c087827f000000000000000000000000000000000000000000000000000000000000000060648201611033565b0301816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa91821561028b57600092610b5d575b50506001600160a01b038116151580610b53575b610a20575b50600101610866565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b57600092610b32575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610b0c575b506001600160a01b03908160405194610aa486610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610ae261105e565b60808201528760a0820152610af7828a610fde565b52610b028189610fde565b5001949150610a17565b6001600160a01b03919250610b2b903d806000833e61027c8183610e70565b9190610a8c565b610b4c91925060203d6020116102c1576102b28183610e70565b9087610a51565b50803b1515610a12565b610b8392506060906020903d602011610b8a575b610b7b8285610e70565b010190610f3f565b86806109fe565b3d9150610b71565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b81529194906020836004816001600160a01b0385165afa92831561028b57600093610cb2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b57600194600092610c8c575b506001600160a01b03908160405194610c2586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610c63610fc0565b60808201528560a0820152610c788288610fde565b52610c838187610fde565b5001928561093f565b6001600160a01b03919250610cab903d806000833e61027c8183610e70565b9190610c0d565b610ccc91935060203d6020116102c1576102b28183610e70565b9187610bd7565b50803b151561093a565b610cf6915060203d6020116102c1576102b28183610e70565b86610927565b600435906001600160a01b03821682036100a257565b6024359060ff821682036100a257565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b90602091610d5e81518092818552858086019101610d22565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610d9f575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610e07610df46060808501519060c08091860152840190610d45565b6080808501519084830390850152610d45565b9160a080910151910152990194019401929594939190610d8e565b60c0810190811067ffffffffffffffff821117610e3e57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610e3e57604052565b90601f8019910116810190811067ffffffffffffffff821117610e3e57604052565b67ffffffffffffffff8111610e3e57601f01601f191660200190565b67ffffffffffffffff8111610e3e5760051b60200190565b90610ed082610eae565b604090610edf82519182610e70565b8381528093610ef0601f1991610eae565b019160005b838110610f025750505050565b6020908251610f1081610e22565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610ef5565b908160209103126100a257516001600160a01b03811681036100a25790565b6020818303126100a25780519067ffffffffffffffff82116100a2570181601f820112156100a2578051610f9181610e92565b92610f9f6040519485610e70565b818452602082840101116100a257610fbd9160208085019101610d22565b90565b60405190610fcd82610e54565b6002825261763160f01b6020830152565b8051821015610ff25760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60011b906101fe60fe83169216820361101d57565b634e487b7160e01b600052601160045260246000fd5b939291611059906001600160a01b03604093168652606060208701526060860190610d45565b930152565b6040519061106b82610e54565b60028252613b1960f11b602083015256fea264697066735822122083951a990433399478b293d1c860c5b725a11f7db47b61e057d189f59c9adeeb64736f6c63430008110033"; + +type AddressResolverConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: AddressResolverConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class AddressResolver__factory extends ContractFactory { + constructor(...args: AddressResolverConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _v1Factory: PromiseOrValue, + _v2Factory: PromiseOrValue, + _ecdsaModule: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + _v1Factory, + _v2Factory, + _ecdsaModule, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _v1Factory: PromiseOrValue, + _v2Factory: PromiseOrValue, + _ecdsaModule: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction( + _v1Factory, + _v2Factory, + _ecdsaModule, + overrides || {} + ); + } + override attach(address: string): AddressResolver { + return super.attach(address) as AddressResolver; + } + override connect(signer: Signer): AddressResolver__factory { + return super.connect(signer) as AddressResolver__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): AddressResolverInterface { + return new utils.Interface(_abi) as AddressResolverInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): AddressResolver { + return new Contract(address, _abi, signerOrProvider) as AddressResolver; + } +} diff --git a/packages/common/src/typechain/factories/misc/index.ts b/packages/common/src/typechain/factories/misc/index.ts new file mode 100644 index 000000000..1dd7f7626 --- /dev/null +++ b/packages/common/src/typechain/factories/misc/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { AddressResolver__factory } from "./AddressResolver__factory"; diff --git a/packages/common/src/typechain/index.ts b/packages/common/src/typechain/index.ts new file mode 100644 index 000000000..6fb6c702d --- /dev/null +++ b/packages/common/src/typechain/index.ts @@ -0,0 +1,30 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type * as biconomyV100 from "./biconomy_v1.0.0"; +export type { biconomyV100 }; +import type * as biconomyV200 from "./biconomy_v2.0.0"; +export type { biconomyV200 }; +import type * as entrypoint from "./entrypoint"; +export type { entrypoint }; +import type * as misc from "./misc"; +export type { misc }; +export * as factories from "./factories"; +export type { SmartAccount_v100 } from "./biconomy_v1.0.0/SmartAccount_v100"; +export { SmartAccount_v100__factory } from "./factories/biconomy_v1.0.0/SmartAccount_v100__factory"; +export type { SmartAccountFactory_v100 } from "./biconomy_v1.0.0/SmartAccountFactory_v100"; +export { SmartAccountFactory_v100__factory } from "./factories/biconomy_v1.0.0/SmartAccountFactory_v100__factory"; +export type { ECDSAOwnershipRegistryModule_v100 } from "./biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100"; +export { ECDSAOwnershipRegistryModule_v100__factory } from "./factories/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100__factory"; +export type { MultiChainValidationModule_v100 } from "./biconomy_v2.0.0/MultiChainValidationModule_v100"; +export { MultiChainValidationModule_v100__factory } from "./factories/biconomy_v2.0.0/MultiChainValidationModule_v100__factory"; +export type { SmartAccount_v200 } from "./biconomy_v2.0.0/SmartAccount_v200"; +export { SmartAccount_v200__factory } from "./factories/biconomy_v2.0.0/SmartAccount_v200__factory"; +export type { SmartAccountFactory_v200 } from "./biconomy_v2.0.0/SmartAccountFactory_v200"; +export { SmartAccountFactory_v200__factory } from "./factories/biconomy_v2.0.0/SmartAccountFactory_v200__factory"; +export type { EntryPoint_v005 } from "./entrypoint/EntryPoint_v005"; +export { EntryPoint_v005__factory } from "./factories/entrypoint/EntryPoint_v005__factory"; +export type { EntryPoint_v006 } from "./entrypoint/EntryPoint_v006"; +export { EntryPoint_v006__factory } from "./factories/entrypoint/EntryPoint_v006__factory"; +export type { AddressResolver } from "./misc/AddressResolver"; +export { AddressResolver__factory } from "./factories/misc/AddressResolver__factory"; diff --git a/packages/common/src/typechain/misc/AddressResolver.ts b/packages/common/src/typechain/misc/AddressResolver.ts new file mode 100644 index 000000000..47aa8b4e1 --- /dev/null +++ b/packages/common/src/typechain/misc/AddressResolver.ts @@ -0,0 +1,300 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../common"; + +export declare namespace IAddressResolver { + export type SmartAccountResultStruct = { + accountAddress: PromiseOrValue; + factoryAddress: PromiseOrValue; + currentImplementation: PromiseOrValue; + currentVersion: PromiseOrValue; + factoryVersion: PromiseOrValue; + deploymentIndex: PromiseOrValue; + }; + + export type SmartAccountResultStructOutput = [ + string, + string, + string, + string, + string, + BigNumber + ] & { + accountAddress: string; + factoryAddress: string; + currentImplementation: string; + currentVersion: string; + factoryVersion: string; + deploymentIndex: BigNumber; + }; +} + +export interface AddressResolverInterface extends utils.Interface { + functions: { + "ecdsaOwnershipModule()": FunctionFragment; + "resolveAddresses(address,uint8)": FunctionFragment; + "resolveAddressesFlexibleForV2(address,uint8,address,bytes)": FunctionFragment; + "resolveAddressesV1(address,uint8)": FunctionFragment; + "smartAccountFactoryV1()": FunctionFragment; + "smartAccountFactoryV2()": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "ecdsaOwnershipModule" + | "resolveAddresses" + | "resolveAddressesFlexibleForV2" + | "resolveAddressesV1" + | "smartAccountFactoryV1" + | "smartAccountFactoryV2" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "ecdsaOwnershipModule", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "resolveAddresses", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "resolveAddressesFlexibleForV2", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "resolveAddressesV1", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "smartAccountFactoryV1", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "smartAccountFactoryV2", + values?: undefined + ): string; + + decodeFunctionResult( + functionFragment: "ecdsaOwnershipModule", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "resolveAddresses", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "resolveAddressesFlexibleForV2", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "resolveAddressesV1", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "smartAccountFactoryV1", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "smartAccountFactoryV2", + data: BytesLike + ): Result; + + events: {}; +} + +export interface AddressResolver extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: AddressResolverInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + ecdsaOwnershipModule(overrides?: CallOverrides): Promise<[string]>; + + resolveAddresses( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[IAddressResolver.SmartAccountResultStructOutput[]]>; + + resolveAddressesFlexibleForV2( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + _moduleAddress: PromiseOrValue, + _moduleSetupData: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[IAddressResolver.SmartAccountResultStructOutput[]]>; + + resolveAddressesV1( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[IAddressResolver.SmartAccountResultStructOutput[]]>; + + smartAccountFactoryV1(overrides?: CallOverrides): Promise<[string]>; + + smartAccountFactoryV2(overrides?: CallOverrides): Promise<[string]>; + }; + + ecdsaOwnershipModule(overrides?: CallOverrides): Promise; + + resolveAddresses( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + resolveAddressesFlexibleForV2( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + _moduleAddress: PromiseOrValue, + _moduleSetupData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + resolveAddressesV1( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + smartAccountFactoryV1(overrides?: CallOverrides): Promise; + + smartAccountFactoryV2(overrides?: CallOverrides): Promise; + + callStatic: { + ecdsaOwnershipModule(overrides?: CallOverrides): Promise; + + resolveAddresses( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + resolveAddressesFlexibleForV2( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + _moduleAddress: PromiseOrValue, + _moduleSetupData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + resolveAddressesV1( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + smartAccountFactoryV1(overrides?: CallOverrides): Promise; + + smartAccountFactoryV2(overrides?: CallOverrides): Promise; + }; + + filters: {}; + + estimateGas: { + ecdsaOwnershipModule(overrides?: CallOverrides): Promise; + + resolveAddresses( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + resolveAddressesFlexibleForV2( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + _moduleAddress: PromiseOrValue, + _moduleSetupData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + resolveAddressesV1( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + smartAccountFactoryV1(overrides?: CallOverrides): Promise; + + smartAccountFactoryV2(overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + ecdsaOwnershipModule( + overrides?: CallOverrides + ): Promise; + + resolveAddresses( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + resolveAddressesFlexibleForV2( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + _moduleAddress: PromiseOrValue, + _moduleSetupData: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + resolveAddressesV1( + _eoa: PromiseOrValue, + _maxIndex: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + smartAccountFactoryV1( + overrides?: CallOverrides + ): Promise; + + smartAccountFactoryV2( + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/packages/common/src/typechain/misc/index.ts b/packages/common/src/typechain/misc/index.ts new file mode 100644 index 000000000..010c4aa86 --- /dev/null +++ b/packages/common/src/typechain/misc/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { AddressResolver } from "./AddressResolver"; From 74a24abc5d152aeea4d6991fd3aac9b78d656e7e Mon Sep 17 00:00:00 2001 From: GabiDev Date: Tue, 20 Feb 2024 13:01:31 +0200 Subject: [PATCH 1113/1247] Fixed broken tests --- packages/account/tests/account.e2e.spec.ts | 19 ++-- yarn.lock | 119 +++++++++++---------- 2 files changed, 77 insertions(+), 61 deletions(-) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index c7594b732..c24ddec6a 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -89,7 +89,8 @@ describe("Account Tests", () => { const newBalance = (await checkBalance(publicClient, recipient)) as bigint; expect(result?.receipt?.transactionHash).toBeTruthy(); - expect(newBalance - balance).toBe(1n); + expect(result.success).toBe("true"); + expect(newBalance).toBeGreaterThan(balance); }, 50000); it("Create a smart account with paymaster with an api key", async () => { @@ -280,7 +281,7 @@ describe("Account Tests", () => { }, }); - const selectedFeeQuote = feeQuotesResponse.feeQuotes?.[0]!; + const selectedFeeQuote = feeQuotesResponse.feeQuotes?.[0]; const spender = feeQuotesResponse.tokenPaymasterAddress!; const contract = getContract({ @@ -292,12 +293,18 @@ describe("Account Tests", () => { const allowanceBefore = (await contract.read.allowance([smartAccountAddress, spender])) as bigint; if (allowanceBefore > 0) { - const setAllowanceToZeroTransaction = await (smartAccount?.paymaster as IHybridPaymaster)?.buildTokenApprovalTransaction({ - feeQuote: { ...selectedFeeQuote, maxGasFee: 0 }, - spender, + const decreaseAllowanceData = encodeFunctionData({ + abi: parseAbi(["function decreaseAllowance(address spender, uint256 subtractedValue)"]), + functionName: "decreaseAllowance", + args: [spender, allowanceBefore], }); - const { wait } = await smartAccount.sendTransaction([setAllowanceToZeroTransaction]); + const decreaseAllowanceTx = { + to: "0xda5289fcaaf71d52a80a254da614a192b693e977", + data: decreaseAllowanceData, + }; + + const { wait } = await smartAccount.sendTransaction(decreaseAllowanceTx, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); const { success } = await wait(); expect(success).toBe("true"); diff --git a/yarn.lock b/yarn.lock index f45b6e8ff..5bda47430 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,7 +43,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.11.6", "@babel/core@^7.12.3": +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== @@ -868,7 +868,7 @@ js-yaml "^3.13.1" resolve-from "^5.0.0" -"@istanbuljs/schema@^0.1.2": +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== @@ -1767,9 +1767,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.16" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.16.tgz#5b56104b0d7a6c87d17eb7f2d597ee358a430cd9" - integrity sha512-vr30c56QmMMxXP59hL4MysdmKNHCD2JmMEdhfly5C+HB+N4p/a7ioblioatRIukgZPP9/Qnc7TPJISGlQaGWpA== + version "1.3.18" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.18.tgz#ce763a845f88ff118c27148579de6934ff376298" + integrity sha512-R38ddazbt5Xt8noVA4Fproc89Mm7UmaRvc7Xkl0XP0sp+HaUJjEwFpL4zTCATYb2sUx3cJgV46fVOuD7/2QWIA== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -2157,9 +2157,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.18.tgz#06912d152e47c2ac0a393c62141e623ca6005d46" - integrity sha512-ABT5VWnnYneSBcNWYSCuR05M826RoMyMSGiFivXGx6ZUIsXb9vn4643IEwkg2zbEOSgAiSogtapN2fgc4mAPlw== + version "20.11.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195" + integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ== dependencies: undici-types "~5.26.4" @@ -2700,10 +2700,12 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" - integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== +available-typed-arrays@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" axios@^1.0.0, axios@^1.3.6: version "1.6.7" @@ -3117,9 +3119,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001587" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz#a0bce920155fa56a1885a69c74e1163fc34b4881" - integrity sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA== + version "1.0.30001588" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz#07f16b65a7f95dba82377096923947fb25bce6e3" + integrity sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ== catering@^2.0.0, catering@^2.1.0: version "2.1.1" @@ -3685,7 +3687,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-data-property@^1.0.1, define-data-property@^1.1.2: +define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -3822,9 +3824,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.670" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.670.tgz#0fc5ac92ada8371e898ea72d577ffc888167a017" - integrity sha512-hcijYOWjOtjKrKPtNA6tuLlA/bTLO3heFG8pQA6mLpq7dRydSWicXova5lyxDzp1iVJaYhK7J2OQlGE52KYn7A== + version "1.4.676" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.676.tgz#95179dd62f43926c636ca06c555a1da8754073ff" + integrity sha512-uHt4FB8SeYdhcOsj2ix/C39S7sPSNFJpzShjxGOm1KdF4MHyGqGi389+T5cErsodsijojXilYaHIKKqJfqh7uQ== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -5121,9 +5123,9 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-d es-define-property "^1.0.0" has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" @@ -5541,9 +5543,9 @@ is-lambda@^1.0.1: integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== 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== + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.0.4: version "1.0.7" @@ -5715,13 +5717,13 @@ istanbul-lib-instrument@^5.0.4: semver "^6.3.0" istanbul-lib-instrument@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" - integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" + integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" istanbul-lib-coverage "^3.2.0" semver "^7.5.4" @@ -5744,9 +5746,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -7080,9 +7082,9 @@ neo-async@^2.6.2: integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nock@^13.2.9: - version "13.5.1" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.1.tgz#4e40f9877ad0d43b7cdb474261c190f3715dd806" - integrity sha512-+s7b73fzj5KnxbKH4Oaqz07tQ8degcMilU4rrmnKvI//b0JMBU4wEXFQ8zqr+3+L4eWSfU3H/UoIVGUV0tue1Q== + version "13.5.3" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.3.tgz#9858adf5b840696a410baf98bda720d5fad4f075" + integrity sha512-2NlGmHIK2rTeyy7UaY1ZNg0YZfEJMxghXgZi0b4DBsUyoDNTTxZeCSG1nmirAWF44RkkoV8NnegLVQijgVapNQ== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" @@ -7836,6 +7838,11 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -8363,13 +8370,14 @@ set-function-length@^1.2.1: has-property-descriptors "^1.0.1" set-function-name@^2.0.1: - 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== + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" setimmediate@^1.0.5: version "1.0.5" @@ -9118,11 +9126,11 @@ type-fest@^0.8.1: integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== typed-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" - integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.7" es-errors "^1.3.0" is-typed-array "^1.1.13" @@ -9137,15 +9145,16 @@ typed-array-byte-length@^1.0.0: 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== + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.1.tgz#5e2bcc1d93e1a332d50e8b363a48604a134692f8" + integrity sha512-tcqKMrTRXjqvHN9S3553NPCaGL0VPgFI92lXszmrE8DMhiDPLBYLlvo8Uu4WZAAX/aGqp/T1sbA4ph8EWjDF9Q== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.6" + call-bind "^1.0.7" for-each "^0.3.3" + gopd "^1.0.1" has-proto "^1.0.1" - is-typed-array "^1.1.10" + is-typed-array "^1.1.13" typed-array-length@^1.0.4: version "1.0.4" @@ -9376,9 +9385,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.5.0, viem@^2.7.3: - version "2.7.9" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.9.tgz#0d2b0c4722530b53fbef449d70f0cedc1bb867b0" - integrity sha512-iDfc8TwaZFp1K95zlsxYh6Cs0OWCt35Tqs8uYgXKSxtz7w075mZ0H5SJ8zSyJGoEaticVDhtdmRRX6TtcW9EeQ== + version "2.7.11" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.11.tgz#e432885f412c6faf2772a1e0569e8269b6ad93cb" + integrity sha512-qlEPF9YOgPVqjTyom73TVAekAYrIe68megO07u55p7pKWgLt0i9KD6Mrmiw7pd7oHh86vIppcygwQMDNGX1YAw== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From 15e8a6d2082eece9805c533c984ef144f1438226 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Wed, 21 Feb 2024 10:25:17 +0200 Subject: [PATCH 1114/1247] Delete packages/common/src/typechain directory --- .../SmartAccountFactory_v100.ts | 309 --- .../biconomy_v1.0.0/SmartAccount_v100.ts | 1931 ----------------- .../src/typechain/biconomy_v1.0.0/index.ts | 5 - .../ECDSAOwnershipRegistryModule_v100.ts | 434 ---- .../MultiChainValidationModule_v100.ts | 434 ---- .../SmartAccountFactory_v200.ts | 545 ----- .../biconomy_v2.0.0/SmartAccount_v200.ts | 1450 ------------- .../src/typechain/biconomy_v2.0.0/index.ts | 7 - packages/common/src/typechain/common.ts | 46 - .../typechain/entrypoint/EntryPoint_v005.ts | 1216 ----------- .../typechain/entrypoint/EntryPoint_v006.ts | 1216 ----------- .../common/src/typechain/entrypoint/index.ts | 5 - .../SmartAccountFactory_v100__factory.ts | 233 -- .../SmartAccount_v100__factory.ts | 1739 --------------- .../factories/biconomy_v1.0.0/index.ts | 5 - ...SAOwnershipRegistryModule_v100__factory.ts | 357 --- ...ultiChainValidationModule_v100__factory.ts | 357 --- .../SmartAccountFactory_v200__factory.ts | 361 --- .../SmartAccount_v200__factory.ts | 1239 ----------- .../factories/biconomy_v2.0.0/index.ts | 7 - .../entrypoint/EntryPoint_v005__factory.ts | 1370 ------------ .../entrypoint/EntryPoint_v006__factory.ts | 1370 ------------ .../typechain/factories/entrypoint/index.ts | 5 - .../common/src/typechain/factories/index.ts | 7 - .../misc/AddressResolver__factory.ts | 317 --- .../src/typechain/factories/misc/index.ts | 4 - packages/common/src/typechain/index.ts | 30 - .../src/typechain/misc/AddressResolver.ts | 300 --- packages/common/src/typechain/misc/index.ts | 4 - 29 files changed, 15303 deletions(-) delete mode 100644 packages/common/src/typechain/biconomy_v1.0.0/SmartAccountFactory_v100.ts delete mode 100644 packages/common/src/typechain/biconomy_v1.0.0/SmartAccount_v100.ts delete mode 100644 packages/common/src/typechain/biconomy_v1.0.0/index.ts delete mode 100644 packages/common/src/typechain/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100.ts delete mode 100644 packages/common/src/typechain/biconomy_v2.0.0/MultiChainValidationModule_v100.ts delete mode 100644 packages/common/src/typechain/biconomy_v2.0.0/SmartAccountFactory_v200.ts delete mode 100644 packages/common/src/typechain/biconomy_v2.0.0/SmartAccount_v200.ts delete mode 100644 packages/common/src/typechain/biconomy_v2.0.0/index.ts delete mode 100644 packages/common/src/typechain/common.ts delete mode 100644 packages/common/src/typechain/entrypoint/EntryPoint_v005.ts delete mode 100644 packages/common/src/typechain/entrypoint/EntryPoint_v006.ts delete mode 100644 packages/common/src/typechain/entrypoint/index.ts delete mode 100644 packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccountFactory_v100__factory.ts delete mode 100644 packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccount_v100__factory.ts delete mode 100644 packages/common/src/typechain/factories/biconomy_v1.0.0/index.ts delete mode 100644 packages/common/src/typechain/factories/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100__factory.ts delete mode 100644 packages/common/src/typechain/factories/biconomy_v2.0.0/MultiChainValidationModule_v100__factory.ts delete mode 100644 packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccountFactory_v200__factory.ts delete mode 100644 packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccount_v200__factory.ts delete mode 100644 packages/common/src/typechain/factories/biconomy_v2.0.0/index.ts delete mode 100644 packages/common/src/typechain/factories/entrypoint/EntryPoint_v005__factory.ts delete mode 100644 packages/common/src/typechain/factories/entrypoint/EntryPoint_v006__factory.ts delete mode 100644 packages/common/src/typechain/factories/entrypoint/index.ts delete mode 100644 packages/common/src/typechain/factories/index.ts delete mode 100644 packages/common/src/typechain/factories/misc/AddressResolver__factory.ts delete mode 100644 packages/common/src/typechain/factories/misc/index.ts delete mode 100644 packages/common/src/typechain/index.ts delete mode 100644 packages/common/src/typechain/misc/AddressResolver.ts delete mode 100644 packages/common/src/typechain/misc/index.ts diff --git a/packages/common/src/typechain/biconomy_v1.0.0/SmartAccountFactory_v100.ts b/packages/common/src/typechain/biconomy_v1.0.0/SmartAccountFactory_v100.ts deleted file mode 100644 index 6b2b60fb3..000000000 --- a/packages/common/src/typechain/biconomy_v1.0.0/SmartAccountFactory_v100.ts +++ /dev/null @@ -1,309 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../common"; - -export interface SmartAccountFactory_v100Interface extends utils.Interface { - functions: { - "accountCreationCode()": FunctionFragment; - "basicImplementation()": FunctionFragment; - "deployAccount(address)": FunctionFragment; - "deployCounterFactualAccount(address,uint256)": FunctionFragment; - "getAddressForCounterFactualAccount(address,uint256)": FunctionFragment; - "minimalHandler()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "accountCreationCode" - | "basicImplementation" - | "deployAccount" - | "deployCounterFactualAccount" - | "getAddressForCounterFactualAccount" - | "minimalHandler" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "accountCreationCode", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "basicImplementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "deployAccount", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "deployCounterFactualAccount", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "getAddressForCounterFactualAccount", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "minimalHandler", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "accountCreationCode", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "basicImplementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "deployAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "deployCounterFactualAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getAddressForCounterFactualAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "minimalHandler", - data: BytesLike - ): Result; - - events: { - "AccountCreation(address,address,uint256)": EventFragment; - "AccountCreationWithoutIndex(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AccountCreation"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "AccountCreationWithoutIndex" - ): EventFragment; -} - -export interface AccountCreationEventObject { - account: string; - owner: string; - index: BigNumber; -} -export type AccountCreationEvent = TypedEvent< - [string, string, BigNumber], - AccountCreationEventObject ->; - -export type AccountCreationEventFilter = TypedEventFilter; - -export interface AccountCreationWithoutIndexEventObject { - account: string; - owner: string; -} -export type AccountCreationWithoutIndexEvent = TypedEvent< - [string, string], - AccountCreationWithoutIndexEventObject ->; - -export type AccountCreationWithoutIndexEventFilter = - TypedEventFilter; - -export interface SmartAccountFactory_v100 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: SmartAccountFactory_v100Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - accountCreationCode(overrides?: CallOverrides): Promise<[string]>; - - basicImplementation(overrides?: CallOverrides): Promise<[string]>; - - deployAccount( - _owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - deployCounterFactualAccount( - _owner: PromiseOrValue, - _index: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getAddressForCounterFactualAccount( - _owner: PromiseOrValue, - _index: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string] & { _account: string }>; - - minimalHandler(overrides?: CallOverrides): Promise<[string]>; - }; - - accountCreationCode(overrides?: CallOverrides): Promise; - - basicImplementation(overrides?: CallOverrides): Promise; - - deployAccount( - _owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - deployCounterFactualAccount( - _owner: PromiseOrValue, - _index: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getAddressForCounterFactualAccount( - _owner: PromiseOrValue, - _index: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - minimalHandler(overrides?: CallOverrides): Promise; - - callStatic: { - accountCreationCode(overrides?: CallOverrides): Promise; - - basicImplementation(overrides?: CallOverrides): Promise; - - deployAccount( - _owner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - deployCounterFactualAccount( - _owner: PromiseOrValue, - _index: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getAddressForCounterFactualAccount( - _owner: PromiseOrValue, - _index: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - minimalHandler(overrides?: CallOverrides): Promise; - }; - - filters: { - "AccountCreation(address,address,uint256)"( - account?: PromiseOrValue | null, - owner?: PromiseOrValue | null, - index?: PromiseOrValue | null - ): AccountCreationEventFilter; - AccountCreation( - account?: PromiseOrValue | null, - owner?: PromiseOrValue | null, - index?: PromiseOrValue | null - ): AccountCreationEventFilter; - - "AccountCreationWithoutIndex(address,address)"( - account?: PromiseOrValue | null, - owner?: PromiseOrValue | null - ): AccountCreationWithoutIndexEventFilter; - AccountCreationWithoutIndex( - account?: PromiseOrValue | null, - owner?: PromiseOrValue | null - ): AccountCreationWithoutIndexEventFilter; - }; - - estimateGas: { - accountCreationCode(overrides?: CallOverrides): Promise; - - basicImplementation(overrides?: CallOverrides): Promise; - - deployAccount( - _owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - deployCounterFactualAccount( - _owner: PromiseOrValue, - _index: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getAddressForCounterFactualAccount( - _owner: PromiseOrValue, - _index: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - minimalHandler(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - accountCreationCode( - overrides?: CallOverrides - ): Promise; - - basicImplementation( - overrides?: CallOverrides - ): Promise; - - deployAccount( - _owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - deployCounterFactualAccount( - _owner: PromiseOrValue, - _index: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getAddressForCounterFactualAccount( - _owner: PromiseOrValue, - _index: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - minimalHandler(overrides?: CallOverrides): Promise; - }; -} diff --git a/packages/common/src/typechain/biconomy_v1.0.0/SmartAccount_v100.ts b/packages/common/src/typechain/biconomy_v1.0.0/SmartAccount_v100.ts deleted file mode 100644 index 956ed8f0b..000000000 --- a/packages/common/src/typechain/biconomy_v1.0.0/SmartAccount_v100.ts +++ /dev/null @@ -1,1931 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../common"; - -export type TransactionStruct = { - to: PromiseOrValue; - operation: PromiseOrValue; - value: PromiseOrValue; - data: PromiseOrValue; - targetTxGas: PromiseOrValue; -}; - -export type TransactionStructOutput = [ - string, - number, - BigNumber, - string, - BigNumber -] & { - to: string; - operation: number; - value: BigNumber; - data: string; - targetTxGas: BigNumber; -}; - -export type FeeRefundStruct = { - baseGas: PromiseOrValue; - gasPrice: PromiseOrValue; - tokenGasPriceFactor: PromiseOrValue; - gasToken: PromiseOrValue; - refundReceiver: PromiseOrValue; -}; - -export type FeeRefundStructOutput = [ - BigNumber, - BigNumber, - BigNumber, - string, - string -] & { - baseGas: BigNumber; - gasPrice: BigNumber; - tokenGasPriceFactor: BigNumber; - gasToken: string; - refundReceiver: string; -}; - -export type UserOperationStruct = { - sender: PromiseOrValue; - nonce: PromiseOrValue; - initCode: PromiseOrValue; - callData: PromiseOrValue; - callGasLimit: PromiseOrValue; - verificationGasLimit: PromiseOrValue; - preVerificationGas: PromiseOrValue; - maxFeePerGas: PromiseOrValue; - maxPriorityFeePerGas: PromiseOrValue; - paymasterAndData: PromiseOrValue; - signature: PromiseOrValue; -}; - -export type UserOperationStructOutput = [ - string, - BigNumber, - string, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string -] & { - sender: string; - nonce: BigNumber; - initCode: string; - callData: string; - callGasLimit: BigNumber; - verificationGasLimit: BigNumber; - preVerificationGas: BigNumber; - maxFeePerGas: BigNumber; - maxPriorityFeePerGas: BigNumber; - paymasterAndData: string; - signature: string; -}; - -export interface SmartAccount_v100Interface extends utils.Interface { - functions: { - "VERSION()": FunctionFragment; - "addDeposit()": FunctionFragment; - "checkSignatures(bytes32,bytes)": FunctionFragment; - "disableModule(address,address)": FunctionFragment; - "domainSeparator()": FunctionFragment; - "enableModule(address)": FunctionFragment; - "encodeTransactionData((address,uint8,uint256,bytes,uint256),(uint256,uint256,uint256,address,address),uint256)": FunctionFragment; - "entryPoint()": FunctionFragment; - "execTransaction((address,uint8,uint256,bytes,uint256),(uint256,uint256,uint256,address,address),bytes)": FunctionFragment; - "execTransactionFromModule(address,uint256,bytes,uint8)": FunctionFragment; - "execTransactionFromModuleReturnData(address,uint256,bytes,uint8)": FunctionFragment; - "execTransaction_S6W((address,uint8,uint256,bytes,uint256),(uint256,uint256,uint256,address,address),bytes)": FunctionFragment; - "executeBatchCall(address[],uint256[],bytes[])": FunctionFragment; - "executeBatchCall_4by(address[],uint256[],bytes[])": FunctionFragment; - "executeCall(address,uint256,bytes)": FunctionFragment; - "executeCall_s1m(address,uint256,bytes)": FunctionFragment; - "getChainId()": FunctionFragment; - "getDeposit()": FunctionFragment; - "getFallbackHandler()": FunctionFragment; - "getImplementation()": FunctionFragment; - "getModulesPaginated(address,uint256)": FunctionFragment; - "getNonce(uint256)": FunctionFragment; - "getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,uint256,address,address,uint256)": FunctionFragment; - "handlePaymentRevert(uint256,uint256,uint256,uint256,address,address)": FunctionFragment; - "init(address,address)": FunctionFragment; - "isModuleEnabled(address)": FunctionFragment; - "isValidSignature(bytes32,bytes)": FunctionFragment; - "nonce()": FunctionFragment; - "nonces(uint256)": FunctionFragment; - "owner()": FunctionFragment; - "pullTokens(address,address,uint256)": FunctionFragment; - "requiredTxGas(address,uint256,bytes,uint8)": FunctionFragment; - "setFallbackHandler(address)": FunctionFragment; - "setOwner(address)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "updateImplementation(address)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawDepositTo(address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "VERSION" - | "addDeposit" - | "checkSignatures" - | "disableModule" - | "domainSeparator" - | "enableModule" - | "encodeTransactionData" - | "entryPoint" - | "execTransaction" - | "execTransactionFromModule" - | "execTransactionFromModuleReturnData" - | "execTransaction_S6W" - | "executeBatchCall" - | "executeBatchCall_4by" - | "executeCall" - | "executeCall_s1m" - | "getChainId" - | "getDeposit" - | "getFallbackHandler" - | "getImplementation" - | "getModulesPaginated" - | "getNonce" - | "getTransactionHash" - | "handlePaymentRevert" - | "init" - | "isModuleEnabled" - | "isValidSignature" - | "nonce" - | "nonces" - | "owner" - | "pullTokens" - | "requiredTxGas" - | "setFallbackHandler" - | "setOwner" - | "supportsInterface" - | "transfer" - | "updateImplementation" - | "validateUserOp" - | "withdrawDepositTo" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "VERSION", values?: undefined): string; - encodeFunctionData( - functionFragment: "addDeposit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "checkSignatures", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "disableModule", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "domainSeparator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "enableModule", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "encodeTransactionData", - values: [TransactionStruct, FeeRefundStruct, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "entryPoint", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "execTransaction", - values: [TransactionStruct, FeeRefundStruct, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "execTransactionFromModule", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "execTransactionFromModuleReturnData", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "execTransaction_S6W", - values: [TransactionStruct, FeeRefundStruct, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "executeBatchCall", - values: [ - PromiseOrValue[], - PromiseOrValue[], - PromiseOrValue[] - ] - ): string; - encodeFunctionData( - functionFragment: "executeBatchCall_4by", - values: [ - PromiseOrValue[], - PromiseOrValue[], - PromiseOrValue[] - ] - ): string; - encodeFunctionData( - functionFragment: "executeCall", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "executeCall_s1m", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "getChainId", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getDeposit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getFallbackHandler", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getImplementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getModulesPaginated", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "getNonce", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "getTransactionHash", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "handlePaymentRevert", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "init", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "isModuleEnabled", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "isValidSignature", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData(functionFragment: "nonce", values?: undefined): string; - encodeFunctionData( - functionFragment: "nonces", - values: [PromiseOrValue] - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "pullTokens", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "requiredTxGas", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "setFallbackHandler", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "setOwner", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "updateImplementation", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "validateUserOp", - values: [ - UserOperationStruct, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "withdrawDepositTo", - values: [PromiseOrValue, PromiseOrValue] - ): string; - - decodeFunctionResult(functionFragment: "VERSION", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "checkSignatures", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "disableModule", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "domainSeparator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "enableModule", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "encodeTransactionData", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "execTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "execTransactionFromModule", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "execTransactionFromModuleReturnData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "execTransaction_S6W", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "executeBatchCall", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "executeBatchCall_4by", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "executeCall", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "executeCall_s1m", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getChainId", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getFallbackHandler", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getImplementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getModulesPaginated", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getNonce", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getTransactionHash", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "handlePaymentRevert", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "init", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "isModuleEnabled", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isValidSignature", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "pullTokens", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "requiredTxGas", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setFallbackHandler", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setOwner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "updateImplementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "validateUserOp", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawDepositTo", - data: BytesLike - ): Result; - - events: { - "AccountHandlePayment(bytes32,uint256)": EventFragment; - "ChangedFallbackHandler(address,address)": EventFragment; - "DisabledModule(address)": EventFragment; - "EOAChanged(address,address,address)": EventFragment; - "EnabledModule(address)": EventFragment; - "ExecutionFailure(address,uint256,bytes,uint8,uint256)": EventFragment; - "ExecutionFromModuleFailure(address)": EventFragment; - "ExecutionFromModuleSuccess(address)": EventFragment; - "ExecutionSuccess(address,uint256,bytes,uint8,uint256)": EventFragment; - "ImplementationUpdated(address,address)": EventFragment; - "ModuleTransaction(address,address,uint256,bytes,uint8)": EventFragment; - "SmartAccountReceivedNativeToken(address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AccountHandlePayment"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ChangedFallbackHandler"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DisabledModule"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EOAChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EnabledModule"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecutionFailure"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecutionFromModuleFailure"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecutionFromModuleSuccess"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecutionSuccess"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ImplementationUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ModuleTransaction"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "SmartAccountReceivedNativeToken" - ): EventFragment; -} - -export interface AccountHandlePaymentEventObject { - txHash: string; - payment: BigNumber; -} -export type AccountHandlePaymentEvent = TypedEvent< - [string, BigNumber], - AccountHandlePaymentEventObject ->; - -export type AccountHandlePaymentEventFilter = - TypedEventFilter; - -export interface ChangedFallbackHandlerEventObject { - previousHandler: string; - handler: string; -} -export type ChangedFallbackHandlerEvent = TypedEvent< - [string, string], - ChangedFallbackHandlerEventObject ->; - -export type ChangedFallbackHandlerEventFilter = - TypedEventFilter; - -export interface DisabledModuleEventObject { - module: string; -} -export type DisabledModuleEvent = TypedEvent< - [string], - DisabledModuleEventObject ->; - -export type DisabledModuleEventFilter = TypedEventFilter; - -export interface EOAChangedEventObject { - _scw: string; - _oldEOA: string; - _newEOA: string; -} -export type EOAChangedEvent = TypedEvent< - [string, string, string], - EOAChangedEventObject ->; - -export type EOAChangedEventFilter = TypedEventFilter; - -export interface EnabledModuleEventObject { - module: string; -} -export type EnabledModuleEvent = TypedEvent<[string], EnabledModuleEventObject>; - -export type EnabledModuleEventFilter = TypedEventFilter; - -export interface ExecutionFailureEventObject { - to: string; - value: BigNumber; - data: string; - operation: number; - txGas: BigNumber; -} -export type ExecutionFailureEvent = TypedEvent< - [string, BigNumber, string, number, BigNumber], - ExecutionFailureEventObject ->; - -export type ExecutionFailureEventFilter = - TypedEventFilter; - -export interface ExecutionFromModuleFailureEventObject { - module: string; -} -export type ExecutionFromModuleFailureEvent = TypedEvent< - [string], - ExecutionFromModuleFailureEventObject ->; - -export type ExecutionFromModuleFailureEventFilter = - TypedEventFilter; - -export interface ExecutionFromModuleSuccessEventObject { - module: string; -} -export type ExecutionFromModuleSuccessEvent = TypedEvent< - [string], - ExecutionFromModuleSuccessEventObject ->; - -export type ExecutionFromModuleSuccessEventFilter = - TypedEventFilter; - -export interface ExecutionSuccessEventObject { - to: string; - value: BigNumber; - data: string; - operation: number; - txGas: BigNumber; -} -export type ExecutionSuccessEvent = TypedEvent< - [string, BigNumber, string, number, BigNumber], - ExecutionSuccessEventObject ->; - -export type ExecutionSuccessEventFilter = - TypedEventFilter; - -export interface ImplementationUpdatedEventObject { - oldImplementation: string; - newImplementation: string; -} -export type ImplementationUpdatedEvent = TypedEvent< - [string, string], - ImplementationUpdatedEventObject ->; - -export type ImplementationUpdatedEventFilter = - TypedEventFilter; - -export interface ModuleTransactionEventObject { - module: string; - to: string; - value: BigNumber; - data: string; - operation: number; -} -export type ModuleTransactionEvent = TypedEvent< - [string, string, BigNumber, string, number], - ModuleTransactionEventObject ->; - -export type ModuleTransactionEventFilter = - TypedEventFilter; - -export interface SmartAccountReceivedNativeTokenEventObject { - sender: string; - value: BigNumber; -} -export type SmartAccountReceivedNativeTokenEvent = TypedEvent< - [string, BigNumber], - SmartAccountReceivedNativeTokenEventObject ->; - -export type SmartAccountReceivedNativeTokenEventFilter = - TypedEventFilter; - -export interface SmartAccount_v100 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: SmartAccount_v100Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - VERSION(overrides?: CallOverrides): Promise<[string]>; - - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - checkSignatures( - dataHash: PromiseOrValue, - signatures: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[void]>; - - disableModule( - prevModule: PromiseOrValue, - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - domainSeparator(overrides?: CallOverrides): Promise<[string]>; - - enableModule( - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - encodeTransactionData( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - _nonce: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - entryPoint(overrides?: CallOverrides): Promise<[string]>; - - execTransaction( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - signatures: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - execTransactionFromModule( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execTransactionFromModuleReturnData( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execTransaction_S6W( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - signatures: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - executeBatchCall( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatchCall_4by( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeCall( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeCall_s1m( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getChainId(overrides?: CallOverrides): Promise<[BigNumber]>; - - getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; - - getFallbackHandler( - overrides?: CallOverrides - ): Promise<[string] & { _handler: string }>; - - getImplementation( - overrides?: CallOverrides - ): Promise<[string] & { _implementation: string }>; - - getModulesPaginated( - start: PromiseOrValue, - pageSize: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string[], string] & { array: string[]; next: string }>; - - getNonce( - batchId: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getTransactionHash( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - targetTxGas: PromiseOrValue, - baseGas: PromiseOrValue, - gasPrice: PromiseOrValue, - tokenGasPriceFactor: PromiseOrValue, - gasToken: PromiseOrValue, - refundReceiver: PromiseOrValue, - _nonce: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - handlePaymentRevert( - gasUsed: PromiseOrValue, - baseGas: PromiseOrValue, - gasPrice: PromiseOrValue, - tokenGasPriceFactor: PromiseOrValue, - gasToken: PromiseOrValue, - refundReceiver: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - init( - _owner: PromiseOrValue, - _handler: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isModuleEnabled( - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isValidSignature( - _dataHash: PromiseOrValue, - _signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - nonce(overrides?: CallOverrides): Promise<[BigNumber]>; - - nonces( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - pullTokens( - token: PromiseOrValue, - dest: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - requiredTxGas( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - setFallbackHandler( - handler: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - setOwner( - _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - supportsInterface( - _interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; - - transfer( - dest: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - updateImplementation( - _implementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - }; - - VERSION(overrides?: CallOverrides): Promise; - - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - checkSignatures( - dataHash: PromiseOrValue, - signatures: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - disableModule( - prevModule: PromiseOrValue, - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - domainSeparator(overrides?: CallOverrides): Promise; - - enableModule( - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - encodeTransactionData( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - _nonce: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execTransaction( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - signatures: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - execTransactionFromModule( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execTransactionFromModuleReturnData( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execTransaction_S6W( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - signatures: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - executeBatchCall( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatchCall_4by( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeCall( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeCall_s1m( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getChainId(overrides?: CallOverrides): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - getFallbackHandler(overrides?: CallOverrides): Promise; - - getImplementation(overrides?: CallOverrides): Promise; - - getModulesPaginated( - start: PromiseOrValue, - pageSize: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string[], string] & { array: string[]; next: string }>; - - getNonce( - batchId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getTransactionHash( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - targetTxGas: PromiseOrValue, - baseGas: PromiseOrValue, - gasPrice: PromiseOrValue, - tokenGasPriceFactor: PromiseOrValue, - gasToken: PromiseOrValue, - refundReceiver: PromiseOrValue, - _nonce: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - handlePaymentRevert( - gasUsed: PromiseOrValue, - baseGas: PromiseOrValue, - gasPrice: PromiseOrValue, - tokenGasPriceFactor: PromiseOrValue, - gasToken: PromiseOrValue, - refundReceiver: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - init( - _owner: PromiseOrValue, - _handler: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isModuleEnabled( - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignature( - _dataHash: PromiseOrValue, - _signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - nonces( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - pullTokens( - token: PromiseOrValue, - dest: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - requiredTxGas( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - setFallbackHandler( - handler: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - setOwner( - _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - supportsInterface( - _interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - transfer( - dest: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - updateImplementation( - _implementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - callStatic: { - VERSION(overrides?: CallOverrides): Promise; - - addDeposit(overrides?: CallOverrides): Promise; - - checkSignatures( - dataHash: PromiseOrValue, - signatures: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - disableModule( - prevModule: PromiseOrValue, - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - domainSeparator(overrides?: CallOverrides): Promise; - - enableModule( - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - encodeTransactionData( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - _nonce: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execTransaction( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - signatures: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - execTransactionFromModule( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - execTransactionFromModuleReturnData( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean, string] & { success: boolean; returnData: string }>; - - execTransaction_S6W( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - signatures: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - executeBatchCall( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: CallOverrides - ): Promise; - - executeBatchCall_4by( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: CallOverrides - ): Promise; - - executeCall( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - executeCall_s1m( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getChainId(overrides?: CallOverrides): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - getFallbackHandler(overrides?: CallOverrides): Promise; - - getImplementation(overrides?: CallOverrides): Promise; - - getModulesPaginated( - start: PromiseOrValue, - pageSize: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string[], string] & { array: string[]; next: string }>; - - getNonce( - batchId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getTransactionHash( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - targetTxGas: PromiseOrValue, - baseGas: PromiseOrValue, - gasPrice: PromiseOrValue, - tokenGasPriceFactor: PromiseOrValue, - gasToken: PromiseOrValue, - refundReceiver: PromiseOrValue, - _nonce: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - handlePaymentRevert( - gasUsed: PromiseOrValue, - baseGas: PromiseOrValue, - gasPrice: PromiseOrValue, - tokenGasPriceFactor: PromiseOrValue, - gasToken: PromiseOrValue, - refundReceiver: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - init( - _owner: PromiseOrValue, - _handler: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isModuleEnabled( - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignature( - _dataHash: PromiseOrValue, - _signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - nonces( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - pullTokens( - token: PromiseOrValue, - dest: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - requiredTxGas( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - setFallbackHandler( - handler: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - setOwner( - _newOwner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - _interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - transfer( - dest: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - updateImplementation( - _implementation: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "AccountHandlePayment(bytes32,uint256)"( - txHash?: PromiseOrValue | null, - payment?: PromiseOrValue | null - ): AccountHandlePaymentEventFilter; - AccountHandlePayment( - txHash?: PromiseOrValue | null, - payment?: PromiseOrValue | null - ): AccountHandlePaymentEventFilter; - - "ChangedFallbackHandler(address,address)"( - previousHandler?: PromiseOrValue | null, - handler?: PromiseOrValue | null - ): ChangedFallbackHandlerEventFilter; - ChangedFallbackHandler( - previousHandler?: PromiseOrValue | null, - handler?: PromiseOrValue | null - ): ChangedFallbackHandlerEventFilter; - - "DisabledModule(address)"(module?: null): DisabledModuleEventFilter; - DisabledModule(module?: null): DisabledModuleEventFilter; - - "EOAChanged(address,address,address)"( - _scw?: PromiseOrValue | null, - _oldEOA?: PromiseOrValue | null, - _newEOA?: PromiseOrValue | null - ): EOAChangedEventFilter; - EOAChanged( - _scw?: PromiseOrValue | null, - _oldEOA?: PromiseOrValue | null, - _newEOA?: PromiseOrValue | null - ): EOAChangedEventFilter; - - "EnabledModule(address)"(module?: null): EnabledModuleEventFilter; - EnabledModule(module?: null): EnabledModuleEventFilter; - - "ExecutionFailure(address,uint256,bytes,uint8,uint256)"( - to?: PromiseOrValue | null, - value?: PromiseOrValue | null, - data?: PromiseOrValue | null, - operation?: null, - txGas?: null - ): ExecutionFailureEventFilter; - ExecutionFailure( - to?: PromiseOrValue | null, - value?: PromiseOrValue | null, - data?: PromiseOrValue | null, - operation?: null, - txGas?: null - ): ExecutionFailureEventFilter; - - "ExecutionFromModuleFailure(address)"( - module?: PromiseOrValue | null - ): ExecutionFromModuleFailureEventFilter; - ExecutionFromModuleFailure( - module?: PromiseOrValue | null - ): ExecutionFromModuleFailureEventFilter; - - "ExecutionFromModuleSuccess(address)"( - module?: PromiseOrValue | null - ): ExecutionFromModuleSuccessEventFilter; - ExecutionFromModuleSuccess( - module?: PromiseOrValue | null - ): ExecutionFromModuleSuccessEventFilter; - - "ExecutionSuccess(address,uint256,bytes,uint8,uint256)"( - to?: PromiseOrValue | null, - value?: PromiseOrValue | null, - data?: PromiseOrValue | null, - operation?: null, - txGas?: null - ): ExecutionSuccessEventFilter; - ExecutionSuccess( - to?: PromiseOrValue | null, - value?: PromiseOrValue | null, - data?: PromiseOrValue | null, - operation?: null, - txGas?: null - ): ExecutionSuccessEventFilter; - - "ImplementationUpdated(address,address)"( - oldImplementation?: PromiseOrValue | null, - newImplementation?: PromiseOrValue | null - ): ImplementationUpdatedEventFilter; - ImplementationUpdated( - oldImplementation?: PromiseOrValue | null, - newImplementation?: PromiseOrValue | null - ): ImplementationUpdatedEventFilter; - - "ModuleTransaction(address,address,uint256,bytes,uint8)"( - module?: null, - to?: null, - value?: null, - data?: null, - operation?: null - ): ModuleTransactionEventFilter; - ModuleTransaction( - module?: null, - to?: null, - value?: null, - data?: null, - operation?: null - ): ModuleTransactionEventFilter; - - "SmartAccountReceivedNativeToken(address,uint256)"( - sender?: PromiseOrValue | null, - value?: PromiseOrValue | null - ): SmartAccountReceivedNativeTokenEventFilter; - SmartAccountReceivedNativeToken( - sender?: PromiseOrValue | null, - value?: PromiseOrValue | null - ): SmartAccountReceivedNativeTokenEventFilter; - }; - - estimateGas: { - VERSION(overrides?: CallOverrides): Promise; - - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - checkSignatures( - dataHash: PromiseOrValue, - signatures: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - disableModule( - prevModule: PromiseOrValue, - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - domainSeparator(overrides?: CallOverrides): Promise; - - enableModule( - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - encodeTransactionData( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - _nonce: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execTransaction( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - signatures: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - execTransactionFromModule( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execTransactionFromModuleReturnData( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execTransaction_S6W( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - signatures: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - executeBatchCall( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatchCall_4by( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeCall( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeCall_s1m( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getChainId(overrides?: CallOverrides): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - getFallbackHandler(overrides?: CallOverrides): Promise; - - getImplementation(overrides?: CallOverrides): Promise; - - getModulesPaginated( - start: PromiseOrValue, - pageSize: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getNonce( - batchId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getTransactionHash( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - targetTxGas: PromiseOrValue, - baseGas: PromiseOrValue, - gasPrice: PromiseOrValue, - tokenGasPriceFactor: PromiseOrValue, - gasToken: PromiseOrValue, - refundReceiver: PromiseOrValue, - _nonce: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - handlePaymentRevert( - gasUsed: PromiseOrValue, - baseGas: PromiseOrValue, - gasPrice: PromiseOrValue, - tokenGasPriceFactor: PromiseOrValue, - gasToken: PromiseOrValue, - refundReceiver: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - init( - _owner: PromiseOrValue, - _handler: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isModuleEnabled( - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignature( - _dataHash: PromiseOrValue, - _signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - nonces( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - pullTokens( - token: PromiseOrValue, - dest: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - requiredTxGas( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - setFallbackHandler( - handler: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - setOwner( - _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - supportsInterface( - _interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - transfer( - dest: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - updateImplementation( - _implementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - }; - - populateTransaction: { - VERSION(overrides?: CallOverrides): Promise; - - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - checkSignatures( - dataHash: PromiseOrValue, - signatures: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - disableModule( - prevModule: PromiseOrValue, - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - domainSeparator(overrides?: CallOverrides): Promise; - - enableModule( - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - encodeTransactionData( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - _nonce: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execTransaction( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - signatures: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - execTransactionFromModule( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execTransactionFromModuleReturnData( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execTransaction_S6W( - _tx: TransactionStruct, - refundInfo: FeeRefundStruct, - signatures: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - executeBatchCall( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatchCall_4by( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeCall( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeCall_s1m( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getChainId(overrides?: CallOverrides): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - getFallbackHandler( - overrides?: CallOverrides - ): Promise; - - getImplementation(overrides?: CallOverrides): Promise; - - getModulesPaginated( - start: PromiseOrValue, - pageSize: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getNonce( - batchId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getTransactionHash( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - targetTxGas: PromiseOrValue, - baseGas: PromiseOrValue, - gasPrice: PromiseOrValue, - tokenGasPriceFactor: PromiseOrValue, - gasToken: PromiseOrValue, - refundReceiver: PromiseOrValue, - _nonce: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - handlePaymentRevert( - gasUsed: PromiseOrValue, - baseGas: PromiseOrValue, - gasPrice: PromiseOrValue, - tokenGasPriceFactor: PromiseOrValue, - gasToken: PromiseOrValue, - refundReceiver: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - init( - _owner: PromiseOrValue, - _handler: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isModuleEnabled( - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignature( - _dataHash: PromiseOrValue, - _signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonce(overrides?: CallOverrides): Promise; - - nonces( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - pullTokens( - token: PromiseOrValue, - dest: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - requiredTxGas( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - setFallbackHandler( - handler: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - setOwner( - _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - supportsInterface( - _interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - transfer( - dest: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - updateImplementation( - _implementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - }; -} diff --git a/packages/common/src/typechain/biconomy_v1.0.0/index.ts b/packages/common/src/typechain/biconomy_v1.0.0/index.ts deleted file mode 100644 index c7a68fbdf..000000000 --- a/packages/common/src/typechain/biconomy_v1.0.0/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { SmartAccountFactory_v100 } from "./SmartAccountFactory_v100"; -export type { SmartAccount_v100 } from "./SmartAccount_v100"; diff --git a/packages/common/src/typechain/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100.ts b/packages/common/src/typechain/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100.ts deleted file mode 100644 index a649e4d13..000000000 --- a/packages/common/src/typechain/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100.ts +++ /dev/null @@ -1,434 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../common"; - -export type UserOperationStruct = { - sender: PromiseOrValue; - nonce: PromiseOrValue; - initCode: PromiseOrValue; - callData: PromiseOrValue; - callGasLimit: PromiseOrValue; - verificationGasLimit: PromiseOrValue; - preVerificationGas: PromiseOrValue; - maxFeePerGas: PromiseOrValue; - maxPriorityFeePerGas: PromiseOrValue; - paymasterAndData: PromiseOrValue; - signature: PromiseOrValue; -}; - -export type UserOperationStructOutput = [ - string, - BigNumber, - string, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string -] & { - sender: string; - nonce: BigNumber; - initCode: string; - callData: string; - callGasLimit: BigNumber; - verificationGasLimit: BigNumber; - preVerificationGas: BigNumber; - maxFeePerGas: BigNumber; - maxPriorityFeePerGas: BigNumber; - paymasterAndData: string; - signature: string; -}; - -export interface ECDSAOwnershipRegistryModule_v100Interface - extends utils.Interface { - functions: { - "NAME()": FunctionFragment; - "VERSION()": FunctionFragment; - "getOwner(address)": FunctionFragment; - "initForSmartAccount(address)": FunctionFragment; - "isValidSignature(bytes32,bytes)": FunctionFragment; - "isValidSignatureForAddress(bytes32,bytes,address)": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "NAME" - | "VERSION" - | "getOwner" - | "initForSmartAccount" - | "isValidSignature" - | "isValidSignatureForAddress" - | "renounceOwnership" - | "transferOwnership" - | "validateUserOp" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "NAME", values?: undefined): string; - encodeFunctionData(functionFragment: "VERSION", values?: undefined): string; - encodeFunctionData( - functionFragment: "getOwner", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "initForSmartAccount", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "isValidSignature", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "isValidSignatureForAddress", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "validateUserOp", - values: [UserOperationStruct, PromiseOrValue] - ): string; - - decodeFunctionResult(functionFragment: "NAME", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "VERSION", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initForSmartAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isValidSignature", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isValidSignatureForAddress", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "validateUserOp", - data: BytesLike - ): Result; - - events: { - "OwnershipTransferred(address,address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - smartAccount: string; - oldOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface ECDSAOwnershipRegistryModule_v100 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ECDSAOwnershipRegistryModule_v100Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - NAME(overrides?: CallOverrides): Promise<[string]>; - - VERSION(overrides?: CallOverrides): Promise<[string]>; - - getOwner( - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - initForSmartAccount( - eoaOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - isValidSignatureForAddress( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferOwnership( - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - }; - - NAME(overrides?: CallOverrides): Promise; - - VERSION(overrides?: CallOverrides): Promise; - - getOwner( - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - initForSmartAccount( - eoaOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignatureForAddress( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferOwnership( - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - callStatic: { - NAME(overrides?: CallOverrides): Promise; - - VERSION(overrides?: CallOverrides): Promise; - - getOwner( - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - initForSmartAccount( - eoaOwner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignatureForAddress( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - transferOwnership( - owner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "OwnershipTransferred(address,address,address)"( - smartAccount?: PromiseOrValue | null, - oldOwner?: PromiseOrValue | null, - newOwner?: PromiseOrValue | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - smartAccount?: PromiseOrValue | null, - oldOwner?: PromiseOrValue | null, - newOwner?: PromiseOrValue | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - NAME(overrides?: CallOverrides): Promise; - - VERSION(overrides?: CallOverrides): Promise; - - getOwner( - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - initForSmartAccount( - eoaOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignatureForAddress( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferOwnership( - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - NAME(overrides?: CallOverrides): Promise; - - VERSION(overrides?: CallOverrides): Promise; - - getOwner( - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - initForSmartAccount( - eoaOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignatureForAddress( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferOwnership( - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/packages/common/src/typechain/biconomy_v2.0.0/MultiChainValidationModule_v100.ts b/packages/common/src/typechain/biconomy_v2.0.0/MultiChainValidationModule_v100.ts deleted file mode 100644 index 5165a4759..000000000 --- a/packages/common/src/typechain/biconomy_v2.0.0/MultiChainValidationModule_v100.ts +++ /dev/null @@ -1,434 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../common"; - -export type UserOperationStruct = { - sender: PromiseOrValue; - nonce: PromiseOrValue; - initCode: PromiseOrValue; - callData: PromiseOrValue; - callGasLimit: PromiseOrValue; - verificationGasLimit: PromiseOrValue; - preVerificationGas: PromiseOrValue; - maxFeePerGas: PromiseOrValue; - maxPriorityFeePerGas: PromiseOrValue; - paymasterAndData: PromiseOrValue; - signature: PromiseOrValue; -}; - -export type UserOperationStructOutput = [ - string, - BigNumber, - string, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string -] & { - sender: string; - nonce: BigNumber; - initCode: string; - callData: string; - callGasLimit: BigNumber; - verificationGasLimit: BigNumber; - preVerificationGas: BigNumber; - maxFeePerGas: BigNumber; - maxPriorityFeePerGas: BigNumber; - paymasterAndData: string; - signature: string; -}; - -export interface MultiChainValidationModule_v100Interface - extends utils.Interface { - functions: { - "NAME()": FunctionFragment; - "VERSION()": FunctionFragment; - "getOwner(address)": FunctionFragment; - "initForSmartAccount(address)": FunctionFragment; - "isValidSignature(bytes32,bytes)": FunctionFragment; - "isValidSignatureForAddress(bytes32,bytes,address)": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "NAME" - | "VERSION" - | "getOwner" - | "initForSmartAccount" - | "isValidSignature" - | "isValidSignatureForAddress" - | "renounceOwnership" - | "transferOwnership" - | "validateUserOp" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "NAME", values?: undefined): string; - encodeFunctionData(functionFragment: "VERSION", values?: undefined): string; - encodeFunctionData( - functionFragment: "getOwner", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "initForSmartAccount", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "isValidSignature", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "isValidSignatureForAddress", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "validateUserOp", - values: [UserOperationStruct, PromiseOrValue] - ): string; - - decodeFunctionResult(functionFragment: "NAME", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "VERSION", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "initForSmartAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isValidSignature", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isValidSignatureForAddress", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "validateUserOp", - data: BytesLike - ): Result; - - events: { - "OwnershipTransferred(address,address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface OwnershipTransferredEventObject { - smartAccount: string; - oldOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface MultiChainValidationModule_v100 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: MultiChainValidationModule_v100Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - NAME(overrides?: CallOverrides): Promise<[string]>; - - VERSION(overrides?: CallOverrides): Promise<[string]>; - - getOwner( - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - initForSmartAccount( - eoaOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - isValidSignatureForAddress( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferOwnership( - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - }; - - NAME(overrides?: CallOverrides): Promise; - - VERSION(overrides?: CallOverrides): Promise; - - getOwner( - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - initForSmartAccount( - eoaOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignatureForAddress( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferOwnership( - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - callStatic: { - NAME(overrides?: CallOverrides): Promise; - - VERSION(overrides?: CallOverrides): Promise; - - getOwner( - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - initForSmartAccount( - eoaOwner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignatureForAddress( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - transferOwnership( - owner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "OwnershipTransferred(address,address,address)"( - smartAccount?: PromiseOrValue | null, - oldOwner?: PromiseOrValue | null, - newOwner?: PromiseOrValue | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - smartAccount?: PromiseOrValue | null, - oldOwner?: PromiseOrValue | null, - newOwner?: PromiseOrValue | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - NAME(overrides?: CallOverrides): Promise; - - VERSION(overrides?: CallOverrides): Promise; - - getOwner( - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - initForSmartAccount( - eoaOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignatureForAddress( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferOwnership( - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - NAME(overrides?: CallOverrides): Promise; - - VERSION(overrides?: CallOverrides): Promise; - - getOwner( - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - initForSmartAccount( - eoaOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignatureForAddress( - dataHash: PromiseOrValue, - moduleSignature: PromiseOrValue, - smartAccount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferOwnership( - owner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/packages/common/src/typechain/biconomy_v2.0.0/SmartAccountFactory_v200.ts b/packages/common/src/typechain/biconomy_v2.0.0/SmartAccountFactory_v200.ts deleted file mode 100644 index 7ac2573d7..000000000 --- a/packages/common/src/typechain/biconomy_v2.0.0/SmartAccountFactory_v200.ts +++ /dev/null @@ -1,545 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../common"; - -export interface SmartAccountFactory_v200Interface extends utils.Interface { - functions: { - "accountCreationCode()": FunctionFragment; - "addStake(address,uint32)": FunctionFragment; - "basicImplementation()": FunctionFragment; - "deployAccount(address,bytes)": FunctionFragment; - "deployCounterFactualAccount(address,bytes,uint256)": FunctionFragment; - "getAddressForCounterFactualAccount(address,bytes,uint256)": FunctionFragment; - "minimalHandler()": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "unlockStake(address)": FunctionFragment; - "withdrawStake(address,address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "accountCreationCode" - | "addStake" - | "basicImplementation" - | "deployAccount" - | "deployCounterFactualAccount" - | "getAddressForCounterFactualAccount" - | "minimalHandler" - | "owner" - | "renounceOwnership" - | "transferOwnership" - | "unlockStake" - | "withdrawStake" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "accountCreationCode", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "addStake", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "basicImplementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "deployAccount", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "deployCounterFactualAccount", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "getAddressForCounterFactualAccount", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "minimalHandler", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "unlockStake", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "withdrawStake", - values: [PromiseOrValue, PromiseOrValue] - ): string; - - decodeFunctionResult( - functionFragment: "accountCreationCode", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "basicImplementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "deployAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "deployCounterFactualAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getAddressForCounterFactualAccount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "minimalHandler", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "unlockStake", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawStake", - data: BytesLike - ): Result; - - events: { - "AccountCreation(address,address,uint256)": EventFragment; - "AccountCreationWithoutIndex(address,address)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AccountCreation"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "AccountCreationWithoutIndex" - ): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export interface AccountCreationEventObject { - account: string; - initialAuthModule: string; - index: BigNumber; -} -export type AccountCreationEvent = TypedEvent< - [string, string, BigNumber], - AccountCreationEventObject ->; - -export type AccountCreationEventFilter = TypedEventFilter; - -export interface AccountCreationWithoutIndexEventObject { - account: string; - initialAuthModule: string; -} -export type AccountCreationWithoutIndexEvent = TypedEvent< - [string, string], - AccountCreationWithoutIndexEventObject ->; - -export type AccountCreationWithoutIndexEventFilter = - TypedEventFilter; - -export interface OwnershipTransferredEventObject { - previousOwner: string; - newOwner: string; -} -export type OwnershipTransferredEvent = TypedEvent< - [string, string], - OwnershipTransferredEventObject ->; - -export type OwnershipTransferredEventFilter = - TypedEventFilter; - -export interface SmartAccountFactory_v200 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: SmartAccountFactory_v200Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - accountCreationCode(overrides?: CallOverrides): Promise<[string]>; - - addStake( - epAddress: PromiseOrValue, - unstakeDelaySec: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - basicImplementation(overrides?: CallOverrides): Promise<[string]>; - - deployAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - deployCounterFactualAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - index: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getAddressForCounterFactualAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - index: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string] & { _account: string }>; - - minimalHandler(overrides?: CallOverrides): Promise<[string]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferOwnership( - newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - unlockStake( - epAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawStake( - epAddress: PromiseOrValue, - withdrawAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - accountCreationCode(overrides?: CallOverrides): Promise; - - addStake( - epAddress: PromiseOrValue, - unstakeDelaySec: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - basicImplementation(overrides?: CallOverrides): Promise; - - deployAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - deployCounterFactualAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - index: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getAddressForCounterFactualAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - index: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - minimalHandler(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferOwnership( - newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - unlockStake( - epAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawStake( - epAddress: PromiseOrValue, - withdrawAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - callStatic: { - accountCreationCode(overrides?: CallOverrides): Promise; - - addStake( - epAddress: PromiseOrValue, - unstakeDelaySec: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - basicImplementation(overrides?: CallOverrides): Promise; - - deployAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - deployCounterFactualAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - index: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getAddressForCounterFactualAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - index: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - minimalHandler(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - unlockStake( - epAddress: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - withdrawStake( - epAddress: PromiseOrValue, - withdrawAddress: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "AccountCreation(address,address,uint256)"( - account?: PromiseOrValue | null, - initialAuthModule?: PromiseOrValue | null, - index?: PromiseOrValue | null - ): AccountCreationEventFilter; - AccountCreation( - account?: PromiseOrValue | null, - initialAuthModule?: PromiseOrValue | null, - index?: PromiseOrValue | null - ): AccountCreationEventFilter; - - "AccountCreationWithoutIndex(address,address)"( - account?: PromiseOrValue | null, - initialAuthModule?: PromiseOrValue | null - ): AccountCreationWithoutIndexEventFilter; - AccountCreationWithoutIndex( - account?: PromiseOrValue | null, - initialAuthModule?: PromiseOrValue | null - ): AccountCreationWithoutIndexEventFilter; - - "OwnershipTransferred(address,address)"( - previousOwner?: PromiseOrValue | null, - newOwner?: PromiseOrValue | null - ): OwnershipTransferredEventFilter; - OwnershipTransferred( - previousOwner?: PromiseOrValue | null, - newOwner?: PromiseOrValue | null - ): OwnershipTransferredEventFilter; - }; - - estimateGas: { - accountCreationCode(overrides?: CallOverrides): Promise; - - addStake( - epAddress: PromiseOrValue, - unstakeDelaySec: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - basicImplementation(overrides?: CallOverrides): Promise; - - deployAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - deployCounterFactualAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - index: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getAddressForCounterFactualAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - index: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - minimalHandler(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferOwnership( - newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - unlockStake( - epAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawStake( - epAddress: PromiseOrValue, - withdrawAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - populateTransaction: { - accountCreationCode( - overrides?: CallOverrides - ): Promise; - - addStake( - epAddress: PromiseOrValue, - unstakeDelaySec: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - basicImplementation( - overrides?: CallOverrides - ): Promise; - - deployAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - deployCounterFactualAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - index: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getAddressForCounterFactualAccount( - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - index: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - minimalHandler(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferOwnership( - newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - unlockStake( - epAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawStake( - epAddress: PromiseOrValue, - withdrawAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; -} diff --git a/packages/common/src/typechain/biconomy_v2.0.0/SmartAccount_v200.ts b/packages/common/src/typechain/biconomy_v2.0.0/SmartAccount_v200.ts deleted file mode 100644 index 45dff696a..000000000 --- a/packages/common/src/typechain/biconomy_v2.0.0/SmartAccount_v200.ts +++ /dev/null @@ -1,1450 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../common"; - -export type UserOperationStruct = { - sender: PromiseOrValue; - nonce: PromiseOrValue; - initCode: PromiseOrValue; - callData: PromiseOrValue; - callGasLimit: PromiseOrValue; - verificationGasLimit: PromiseOrValue; - preVerificationGas: PromiseOrValue; - maxFeePerGas: PromiseOrValue; - maxPriorityFeePerGas: PromiseOrValue; - paymasterAndData: PromiseOrValue; - signature: PromiseOrValue; -}; - -export type UserOperationStructOutput = [ - string, - BigNumber, - string, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string -] & { - sender: string; - nonce: BigNumber; - initCode: string; - callData: string; - callGasLimit: BigNumber; - verificationGasLimit: BigNumber; - preVerificationGas: BigNumber; - maxFeePerGas: BigNumber; - maxPriorityFeePerGas: BigNumber; - paymasterAndData: string; - signature: string; -}; - -export interface SmartAccount_v200Interface extends utils.Interface { - functions: { - "VERSION()": FunctionFragment; - "addDeposit()": FunctionFragment; - "disableModule(address,address)": FunctionFragment; - "enableModule(address)": FunctionFragment; - "entryPoint()": FunctionFragment; - "execBatchTransactionFromModule(address[],uint256[],bytes[],uint8[])": FunctionFragment; - "execTransactionFromModule(address,uint256,bytes,uint8,uint256)": FunctionFragment; - "execTransactionFromModule(address,uint256,bytes,uint8)": FunctionFragment; - "execTransactionFromModuleReturnData(address,uint256,bytes,uint8)": FunctionFragment; - "execute(address,uint256,bytes)": FunctionFragment; - "executeBatch(address[],uint256[],bytes[])": FunctionFragment; - "executeBatch_y6U(address[],uint256[],bytes[])": FunctionFragment; - "execute_ncC(address,uint256,bytes)": FunctionFragment; - "getDeposit()": FunctionFragment; - "getFallbackHandler()": FunctionFragment; - "getImplementation()": FunctionFragment; - "getModulesPaginated(address,uint256)": FunctionFragment; - "init(address,address,bytes)": FunctionFragment; - "isModuleEnabled(address)": FunctionFragment; - "isValidSignature(bytes32,bytes)": FunctionFragment; - "nonce(uint192)": FunctionFragment; - "noncesDeprecated(uint256)": FunctionFragment; - "ownerDeprecated()": FunctionFragment; - "setFallbackHandler(address)": FunctionFragment; - "setupAndEnableModule(address,bytes)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "updateImplementation(address)": FunctionFragment; - "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32,uint256)": FunctionFragment; - "withdrawDepositTo(address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "VERSION" - | "addDeposit" - | "disableModule" - | "enableModule" - | "entryPoint" - | "execBatchTransactionFromModule" - | "execTransactionFromModule(address,uint256,bytes,uint8,uint256)" - | "execTransactionFromModule(address,uint256,bytes,uint8)" - | "execTransactionFromModuleReturnData" - | "execute" - | "executeBatch" - | "executeBatch_y6U" - | "execute_ncC" - | "getDeposit" - | "getFallbackHandler" - | "getImplementation" - | "getModulesPaginated" - | "init" - | "isModuleEnabled" - | "isValidSignature" - | "nonce" - | "noncesDeprecated" - | "ownerDeprecated" - | "setFallbackHandler" - | "setupAndEnableModule" - | "supportsInterface" - | "updateImplementation" - | "validateUserOp" - | "withdrawDepositTo" - ): FunctionFragment; - - encodeFunctionData(functionFragment: "VERSION", values?: undefined): string; - encodeFunctionData( - functionFragment: "addDeposit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "disableModule", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "enableModule", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "entryPoint", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "execBatchTransactionFromModule", - values: [ - PromiseOrValue[], - PromiseOrValue[], - PromiseOrValue[], - PromiseOrValue[] - ] - ): string; - encodeFunctionData( - functionFragment: "execTransactionFromModule(address,uint256,bytes,uint8,uint256)", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "execTransactionFromModule(address,uint256,bytes,uint8)", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "execTransactionFromModuleReturnData", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "executeBatch", - values: [ - PromiseOrValue[], - PromiseOrValue[], - PromiseOrValue[] - ] - ): string; - encodeFunctionData( - functionFragment: "executeBatch_y6U", - values: [ - PromiseOrValue[], - PromiseOrValue[], - PromiseOrValue[] - ] - ): string; - encodeFunctionData( - functionFragment: "execute_ncC", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "getDeposit", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getFallbackHandler", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getImplementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getModulesPaginated", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "init", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "isModuleEnabled", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "isValidSignature", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "nonce", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "noncesDeprecated", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "ownerDeprecated", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setFallbackHandler", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "setupAndEnableModule", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "updateImplementation", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "validateUserOp", - values: [ - UserOperationStruct, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "withdrawDepositTo", - values: [PromiseOrValue, PromiseOrValue] - ): string; - - decodeFunctionResult(functionFragment: "VERSION", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "addDeposit", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "disableModule", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "enableModule", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "entryPoint", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "execBatchTransactionFromModule", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "execTransactionFromModule(address,uint256,bytes,uint8,uint256)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "execTransactionFromModule(address,uint256,bytes,uint8)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "execTransactionFromModuleReturnData", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "executeBatch", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "executeBatch_y6U", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "execute_ncC", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getDeposit", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getFallbackHandler", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getImplementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getModulesPaginated", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "init", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "isModuleEnabled", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isValidSignature", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "nonce", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "noncesDeprecated", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "ownerDeprecated", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setFallbackHandler", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setupAndEnableModule", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "updateImplementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "validateUserOp", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawDepositTo", - data: BytesLike - ): Result; - - events: { - "ChangedFallbackHandler(address,address)": EventFragment; - "DisabledModule(address)": EventFragment; - "EnabledModule(address)": EventFragment; - "ExecutionFailure(address,uint256,bytes,uint8,uint256)": EventFragment; - "ExecutionFromModuleFailure(address)": EventFragment; - "ExecutionFromModuleSuccess(address)": EventFragment; - "ExecutionSuccess(address,uint256,bytes,uint8,uint256)": EventFragment; - "ImplementationUpdated(address,address)": EventFragment; - "ModuleTransaction(address,address,uint256,bytes,uint8)": EventFragment; - "SmartAccountReceivedNativeToken(address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ChangedFallbackHandler"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DisabledModule"): EventFragment; - getEvent(nameOrSignatureOrTopic: "EnabledModule"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecutionFailure"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecutionFromModuleFailure"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecutionFromModuleSuccess"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecutionSuccess"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ImplementationUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ModuleTransaction"): EventFragment; - getEvent( - nameOrSignatureOrTopic: "SmartAccountReceivedNativeToken" - ): EventFragment; -} - -export interface ChangedFallbackHandlerEventObject { - previousHandler: string; - handler: string; -} -export type ChangedFallbackHandlerEvent = TypedEvent< - [string, string], - ChangedFallbackHandlerEventObject ->; - -export type ChangedFallbackHandlerEventFilter = - TypedEventFilter; - -export interface DisabledModuleEventObject { - module: string; -} -export type DisabledModuleEvent = TypedEvent< - [string], - DisabledModuleEventObject ->; - -export type DisabledModuleEventFilter = TypedEventFilter; - -export interface EnabledModuleEventObject { - module: string; -} -export type EnabledModuleEvent = TypedEvent<[string], EnabledModuleEventObject>; - -export type EnabledModuleEventFilter = TypedEventFilter; - -export interface ExecutionFailureEventObject { - to: string; - value: BigNumber; - data: string; - operation: number; - txGas: BigNumber; -} -export type ExecutionFailureEvent = TypedEvent< - [string, BigNumber, string, number, BigNumber], - ExecutionFailureEventObject ->; - -export type ExecutionFailureEventFilter = - TypedEventFilter; - -export interface ExecutionFromModuleFailureEventObject { - module: string; -} -export type ExecutionFromModuleFailureEvent = TypedEvent< - [string], - ExecutionFromModuleFailureEventObject ->; - -export type ExecutionFromModuleFailureEventFilter = - TypedEventFilter; - -export interface ExecutionFromModuleSuccessEventObject { - module: string; -} -export type ExecutionFromModuleSuccessEvent = TypedEvent< - [string], - ExecutionFromModuleSuccessEventObject ->; - -export type ExecutionFromModuleSuccessEventFilter = - TypedEventFilter; - -export interface ExecutionSuccessEventObject { - to: string; - value: BigNumber; - data: string; - operation: number; - txGas: BigNumber; -} -export type ExecutionSuccessEvent = TypedEvent< - [string, BigNumber, string, number, BigNumber], - ExecutionSuccessEventObject ->; - -export type ExecutionSuccessEventFilter = - TypedEventFilter; - -export interface ImplementationUpdatedEventObject { - oldImplementation: string; - newImplementation: string; -} -export type ImplementationUpdatedEvent = TypedEvent< - [string, string], - ImplementationUpdatedEventObject ->; - -export type ImplementationUpdatedEventFilter = - TypedEventFilter; - -export interface ModuleTransactionEventObject { - module: string; - to: string; - value: BigNumber; - data: string; - operation: number; -} -export type ModuleTransactionEvent = TypedEvent< - [string, string, BigNumber, string, number], - ModuleTransactionEventObject ->; - -export type ModuleTransactionEventFilter = - TypedEventFilter; - -export interface SmartAccountReceivedNativeTokenEventObject { - sender: string; - value: BigNumber; -} -export type SmartAccountReceivedNativeTokenEvent = TypedEvent< - [string, BigNumber], - SmartAccountReceivedNativeTokenEventObject ->; - -export type SmartAccountReceivedNativeTokenEventFilter = - TypedEventFilter; - -export interface SmartAccount_v200 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: SmartAccount_v200Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - VERSION(overrides?: CallOverrides): Promise<[string]>; - - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - disableModule( - prevModule: PromiseOrValue, - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - enableModule( - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise<[string]>; - - execBatchTransactionFromModule( - to: PromiseOrValue[], - value: PromiseOrValue[], - data: PromiseOrValue[], - operations: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - "execTransactionFromModule(address,uint256,bytes,uint8,uint256)"( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - txGas: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - "execTransactionFromModule(address,uint256,bytes,uint8)"( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execTransactionFromModuleReturnData( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch_y6U( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execute_ncC( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise<[BigNumber]>; - - getFallbackHandler( - overrides?: CallOverrides - ): Promise<[string] & { _handler: string }>; - - getImplementation( - overrides?: CallOverrides - ): Promise<[string] & { _implementation: string }>; - - getModulesPaginated( - start: PromiseOrValue, - pageSize: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string[], string] & { array: string[]; next: string }>; - - init( - handler: PromiseOrValue, - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isModuleEnabled( - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isValidSignature( - dataHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string]>; - - nonce( - _key: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - noncesDeprecated( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - ownerDeprecated(overrides?: CallOverrides): Promise<[string]>; - - setFallbackHandler( - handler: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - setupAndEnableModule( - setupContract: PromiseOrValue, - setupData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - supportsInterface( - _interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean]>; - - updateImplementation( - _implementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - }; - - VERSION(overrides?: CallOverrides): Promise; - - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - disableModule( - prevModule: PromiseOrValue, - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - enableModule( - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execBatchTransactionFromModule( - to: PromiseOrValue[], - value: PromiseOrValue[], - data: PromiseOrValue[], - operations: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - "execTransactionFromModule(address,uint256,bytes,uint8,uint256)"( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - txGas: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - "execTransactionFromModule(address,uint256,bytes,uint8)"( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execTransactionFromModuleReturnData( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch_y6U( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execute_ncC( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - getFallbackHandler(overrides?: CallOverrides): Promise; - - getImplementation(overrides?: CallOverrides): Promise; - - getModulesPaginated( - start: PromiseOrValue, - pageSize: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string[], string] & { array: string[]; next: string }>; - - init( - handler: PromiseOrValue, - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isModuleEnabled( - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonce( - _key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - noncesDeprecated( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - ownerDeprecated(overrides?: CallOverrides): Promise; - - setFallbackHandler( - handler: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - setupAndEnableModule( - setupContract: PromiseOrValue, - setupData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - supportsInterface( - _interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - updateImplementation( - _implementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - callStatic: { - VERSION(overrides?: CallOverrides): Promise; - - addDeposit(overrides?: CallOverrides): Promise; - - disableModule( - prevModule: PromiseOrValue, - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - enableModule( - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execBatchTransactionFromModule( - to: PromiseOrValue[], - value: PromiseOrValue[], - data: PromiseOrValue[], - operations: PromiseOrValue[], - overrides?: CallOverrides - ): Promise; - - "execTransactionFromModule(address,uint256,bytes,uint8,uint256)"( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - txGas: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - "execTransactionFromModule(address,uint256,bytes,uint8)"( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - execTransactionFromModuleReturnData( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[boolean, string] & { success: boolean; returnData: string }>; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: CallOverrides - ): Promise; - - executeBatch_y6U( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: CallOverrides - ): Promise; - - execute_ncC( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - getFallbackHandler(overrides?: CallOverrides): Promise; - - getImplementation(overrides?: CallOverrides): Promise; - - getModulesPaginated( - start: PromiseOrValue, - pageSize: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string[], string] & { array: string[]; next: string }>; - - init( - handler: PromiseOrValue, - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isModuleEnabled( - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonce( - _key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - noncesDeprecated( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - ownerDeprecated(overrides?: CallOverrides): Promise; - - setFallbackHandler( - handler: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - setupAndEnableModule( - setupContract: PromiseOrValue, - setupData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - _interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - updateImplementation( - _implementation: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "ChangedFallbackHandler(address,address)"( - previousHandler?: PromiseOrValue | null, - handler?: PromiseOrValue | null - ): ChangedFallbackHandlerEventFilter; - ChangedFallbackHandler( - previousHandler?: PromiseOrValue | null, - handler?: PromiseOrValue | null - ): ChangedFallbackHandlerEventFilter; - - "DisabledModule(address)"(module?: null): DisabledModuleEventFilter; - DisabledModule(module?: null): DisabledModuleEventFilter; - - "EnabledModule(address)"(module?: null): EnabledModuleEventFilter; - EnabledModule(module?: null): EnabledModuleEventFilter; - - "ExecutionFailure(address,uint256,bytes,uint8,uint256)"( - to?: PromiseOrValue | null, - value?: PromiseOrValue | null, - data?: PromiseOrValue | null, - operation?: null, - txGas?: null - ): ExecutionFailureEventFilter; - ExecutionFailure( - to?: PromiseOrValue | null, - value?: PromiseOrValue | null, - data?: PromiseOrValue | null, - operation?: null, - txGas?: null - ): ExecutionFailureEventFilter; - - "ExecutionFromModuleFailure(address)"( - module?: PromiseOrValue | null - ): ExecutionFromModuleFailureEventFilter; - ExecutionFromModuleFailure( - module?: PromiseOrValue | null - ): ExecutionFromModuleFailureEventFilter; - - "ExecutionFromModuleSuccess(address)"( - module?: PromiseOrValue | null - ): ExecutionFromModuleSuccessEventFilter; - ExecutionFromModuleSuccess( - module?: PromiseOrValue | null - ): ExecutionFromModuleSuccessEventFilter; - - "ExecutionSuccess(address,uint256,bytes,uint8,uint256)"( - to?: PromiseOrValue | null, - value?: PromiseOrValue | null, - data?: PromiseOrValue | null, - operation?: null, - txGas?: null - ): ExecutionSuccessEventFilter; - ExecutionSuccess( - to?: PromiseOrValue | null, - value?: PromiseOrValue | null, - data?: PromiseOrValue | null, - operation?: null, - txGas?: null - ): ExecutionSuccessEventFilter; - - "ImplementationUpdated(address,address)"( - oldImplementation?: PromiseOrValue | null, - newImplementation?: PromiseOrValue | null - ): ImplementationUpdatedEventFilter; - ImplementationUpdated( - oldImplementation?: PromiseOrValue | null, - newImplementation?: PromiseOrValue | null - ): ImplementationUpdatedEventFilter; - - "ModuleTransaction(address,address,uint256,bytes,uint8)"( - module?: null, - to?: null, - value?: null, - data?: null, - operation?: null - ): ModuleTransactionEventFilter; - ModuleTransaction( - module?: null, - to?: null, - value?: null, - data?: null, - operation?: null - ): ModuleTransactionEventFilter; - - "SmartAccountReceivedNativeToken(address,uint256)"( - sender?: PromiseOrValue | null, - value?: PromiseOrValue | null - ): SmartAccountReceivedNativeTokenEventFilter; - SmartAccountReceivedNativeToken( - sender?: PromiseOrValue | null, - value?: PromiseOrValue | null - ): SmartAccountReceivedNativeTokenEventFilter; - }; - - estimateGas: { - VERSION(overrides?: CallOverrides): Promise; - - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - disableModule( - prevModule: PromiseOrValue, - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - enableModule( - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execBatchTransactionFromModule( - to: PromiseOrValue[], - value: PromiseOrValue[], - data: PromiseOrValue[], - operations: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - "execTransactionFromModule(address,uint256,bytes,uint8,uint256)"( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - txGas: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - "execTransactionFromModule(address,uint256,bytes,uint8)"( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execTransactionFromModuleReturnData( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch_y6U( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execute_ncC( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - getFallbackHandler(overrides?: CallOverrides): Promise; - - getImplementation(overrides?: CallOverrides): Promise; - - getModulesPaginated( - start: PromiseOrValue, - pageSize: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - init( - handler: PromiseOrValue, - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isModuleEnabled( - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonce( - _key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - noncesDeprecated( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - ownerDeprecated(overrides?: CallOverrides): Promise; - - setFallbackHandler( - handler: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - setupAndEnableModule( - setupContract: PromiseOrValue, - setupData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - supportsInterface( - _interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - updateImplementation( - _implementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - }; - - populateTransaction: { - VERSION(overrides?: CallOverrides): Promise; - - addDeposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - disableModule( - prevModule: PromiseOrValue, - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - enableModule( - module: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - entryPoint(overrides?: CallOverrides): Promise; - - execBatchTransactionFromModule( - to: PromiseOrValue[], - value: PromiseOrValue[], - data: PromiseOrValue[], - operations: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - "execTransactionFromModule(address,uint256,bytes,uint8,uint256)"( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - txGas: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - "execTransactionFromModule(address,uint256,bytes,uint8)"( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execTransactionFromModuleReturnData( - to: PromiseOrValue, - value: PromiseOrValue, - data: PromiseOrValue, - operation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execute( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - executeBatch_y6U( - dest: PromiseOrValue[], - value: PromiseOrValue[], - func: PromiseOrValue[], - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - execute_ncC( - dest: PromiseOrValue, - value: PromiseOrValue, - func: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDeposit(overrides?: CallOverrides): Promise; - - getFallbackHandler( - overrides?: CallOverrides - ): Promise; - - getImplementation(overrides?: CallOverrides): Promise; - - getModulesPaginated( - start: PromiseOrValue, - pageSize: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - init( - handler: PromiseOrValue, - moduleSetupContract: PromiseOrValue, - moduleSetupData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - isModuleEnabled( - module: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - isValidSignature( - dataHash: PromiseOrValue, - signature: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonce( - _key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - noncesDeprecated( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - ownerDeprecated(overrides?: CallOverrides): Promise; - - setFallbackHandler( - handler: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - setupAndEnableModule( - setupContract: PromiseOrValue, - setupData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - supportsInterface( - _interfaceId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - updateImplementation( - _implementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - validateUserOp( - userOp: UserOperationStruct, - userOpHash: PromiseOrValue, - missingAccountFunds: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawDepositTo( - withdrawAddress: PromiseOrValue, - amount: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - }; -} diff --git a/packages/common/src/typechain/biconomy_v2.0.0/index.ts b/packages/common/src/typechain/biconomy_v2.0.0/index.ts deleted file mode 100644 index 1c9013b06..000000000 --- a/packages/common/src/typechain/biconomy_v2.0.0/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { ECDSAOwnershipRegistryModule_v100 } from "./ECDSAOwnershipRegistryModule_v100"; -export type { MultiChainValidationModule_v100 } from "./MultiChainValidationModule_v100"; -export type { SmartAccountFactory_v200 } from "./SmartAccountFactory_v200"; -export type { SmartAccount_v200 } from "./SmartAccount_v200"; diff --git a/packages/common/src/typechain/common.ts b/packages/common/src/typechain/common.ts deleted file mode 100644 index 4c90b08bb..000000000 --- a/packages/common/src/typechain/common.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { Listener } from "@ethersproject/providers"; -import type { Event, EventFilter } from "ethers"; - -export interface TypedEvent< - TArgsArray extends Array = any, - TArgsObject = any -> extends Event { - args: TArgsArray & TArgsObject; -} - -export interface TypedEventFilter<_TEvent extends TypedEvent> - extends EventFilter {} - -export interface TypedListener { - (...listenerArg: [...__TypechainArgsArray, TEvent]): void; -} - -type __TypechainArgsArray = T extends TypedEvent ? U : never; - -export interface OnEvent { - ( - eventFilter: TypedEventFilter, - listener: TypedListener - ): TRes; - (eventName: string, listener: Listener): TRes; -} - -export type MinEthersFactory = { - deploy(...a: ARGS[]): Promise; -}; - -export type GetContractTypeFromFactory = F extends MinEthersFactory< - infer C, - any -> - ? C - : never; - -export type GetARGsTypeFromFactory = F extends MinEthersFactory - ? Parameters - : never; - -export type PromiseOrValue = T | Promise; diff --git a/packages/common/src/typechain/entrypoint/EntryPoint_v005.ts b/packages/common/src/typechain/entrypoint/EntryPoint_v005.ts deleted file mode 100644 index 09a6a524a..000000000 --- a/packages/common/src/typechain/entrypoint/EntryPoint_v005.ts +++ /dev/null @@ -1,1216 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../common"; - -export type UserOperationStruct = { - sender: PromiseOrValue; - nonce: PromiseOrValue; - initCode: PromiseOrValue; - callData: PromiseOrValue; - callGasLimit: PromiseOrValue; - verificationGasLimit: PromiseOrValue; - preVerificationGas: PromiseOrValue; - maxFeePerGas: PromiseOrValue; - maxPriorityFeePerGas: PromiseOrValue; - paymasterAndData: PromiseOrValue; - signature: PromiseOrValue; -}; - -export type UserOperationStructOutput = [ - string, - BigNumber, - string, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string -] & { - sender: string; - nonce: BigNumber; - initCode: string; - callData: string; - callGasLimit: BigNumber; - verificationGasLimit: BigNumber; - preVerificationGas: BigNumber; - maxFeePerGas: BigNumber; - maxPriorityFeePerGas: BigNumber; - paymasterAndData: string; - signature: string; -}; - -export declare namespace IStakeManager { - export type DepositInfoStruct = { - deposit: PromiseOrValue; - staked: PromiseOrValue; - stake: PromiseOrValue; - unstakeDelaySec: PromiseOrValue; - withdrawTime: PromiseOrValue; - }; - - export type DepositInfoStructOutput = [ - BigNumber, - boolean, - BigNumber, - number, - number - ] & { - deposit: BigNumber; - staked: boolean; - stake: BigNumber; - unstakeDelaySec: number; - withdrawTime: number; - }; -} - -export declare namespace IEntryPoint { - export type UserOpsPerAggregatorStruct = { - userOps: UserOperationStruct[]; - aggregator: PromiseOrValue; - signature: PromiseOrValue; - }; - - export type UserOpsPerAggregatorStructOutput = [ - UserOperationStructOutput[], - string, - string - ] & { - userOps: UserOperationStructOutput[]; - aggregator: string; - signature: string; - }; -} - -export declare namespace EntryPoint { - export type MemoryUserOpStruct = { - sender: PromiseOrValue; - nonce: PromiseOrValue; - callGasLimit: PromiseOrValue; - verificationGasLimit: PromiseOrValue; - preVerificationGas: PromiseOrValue; - paymaster: PromiseOrValue; - maxFeePerGas: PromiseOrValue; - maxPriorityFeePerGas: PromiseOrValue; - }; - - export type MemoryUserOpStructOutput = [ - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - BigNumber, - BigNumber - ] & { - sender: string; - nonce: BigNumber; - callGasLimit: BigNumber; - verificationGasLimit: BigNumber; - preVerificationGas: BigNumber; - paymaster: string; - maxFeePerGas: BigNumber; - maxPriorityFeePerGas: BigNumber; - }; - - export type UserOpInfoStruct = { - mUserOp: EntryPoint.MemoryUserOpStruct; - userOpHash: PromiseOrValue; - prefund: PromiseOrValue; - contextOffset: PromiseOrValue; - preOpGas: PromiseOrValue; - }; - - export type UserOpInfoStructOutput = [ - EntryPoint.MemoryUserOpStructOutput, - string, - BigNumber, - BigNumber, - BigNumber - ] & { - mUserOp: EntryPoint.MemoryUserOpStructOutput; - userOpHash: string; - prefund: BigNumber; - contextOffset: BigNumber; - preOpGas: BigNumber; - }; -} - -export interface EntryPoint_v005Interface extends utils.Interface { - functions: { - "SIG_VALIDATION_FAILED()": FunctionFragment; - "_validateSenderAndPaymaster(bytes,address,bytes)": FunctionFragment; - "addStake(uint32)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "depositTo(address)": FunctionFragment; - "deposits(address)": FunctionFragment; - "getDepositInfo(address)": FunctionFragment; - "getNonce(address,uint192)": FunctionFragment; - "getSenderAddress(bytes)": FunctionFragment; - "getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; - "handleAggregatedOps(((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)[],address)": FunctionFragment; - "handleOps((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address)": FunctionFragment; - "incrementNonce(uint192)": FunctionFragment; - "innerHandleOp(bytes,((address,uint256,uint256,uint256,uint256,address,uint256,uint256),bytes32,uint256,uint256,uint256),bytes)": FunctionFragment; - "nonceSequenceNumber(address,uint192)": FunctionFragment; - "simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),address,bytes)": FunctionFragment; - "simulateValidation((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; - "unlockStake()": FunctionFragment; - "withdrawStake(address)": FunctionFragment; - "withdrawTo(address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "SIG_VALIDATION_FAILED" - | "_validateSenderAndPaymaster" - | "addStake" - | "balanceOf" - | "depositTo" - | "deposits" - | "getDepositInfo" - | "getNonce" - | "getSenderAddress" - | "getUserOpHash" - | "handleAggregatedOps" - | "handleOps" - | "incrementNonce" - | "innerHandleOp" - | "nonceSequenceNumber" - | "simulateHandleOp" - | "simulateValidation" - | "unlockStake" - | "withdrawStake" - | "withdrawTo" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "SIG_VALIDATION_FAILED", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_validateSenderAndPaymaster", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "addStake", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "balanceOf", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "depositTo", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "deposits", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "getDepositInfo", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "getNonce", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "getSenderAddress", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "getUserOpHash", - values: [UserOperationStruct] - ): string; - encodeFunctionData( - functionFragment: "handleAggregatedOps", - values: [IEntryPoint.UserOpsPerAggregatorStruct[], PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "handleOps", - values: [UserOperationStruct[], PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "incrementNonce", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "innerHandleOp", - values: [ - PromiseOrValue, - EntryPoint.UserOpInfoStruct, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "nonceSequenceNumber", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "simulateHandleOp", - values: [ - UserOperationStruct, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "simulateValidation", - values: [UserOperationStruct] - ): string; - encodeFunctionData( - functionFragment: "unlockStake", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "withdrawStake", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "withdrawTo", - values: [PromiseOrValue, PromiseOrValue] - ): string; - - decodeFunctionResult( - functionFragment: "SIG_VALIDATION_FAILED", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_validateSenderAndPaymaster", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "depositTo", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposits", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getDepositInfo", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getNonce", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getSenderAddress", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getUserOpHash", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "handleAggregatedOps", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "handleOps", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "incrementNonce", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "innerHandleOp", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "nonceSequenceNumber", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "simulateHandleOp", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "simulateValidation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "unlockStake", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawStake", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; - - events: { - "AccountDeployed(bytes32,address,address,address)": EventFragment; - "BeforeExecution()": EventFragment; - "Deposited(address,uint256)": EventFragment; - "SignatureAggregatorChanged(address)": EventFragment; - "StakeLocked(address,uint256,uint256)": EventFragment; - "StakeUnlocked(address,uint256)": EventFragment; - "StakeWithdrawn(address,address,uint256)": EventFragment; - "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)": EventFragment; - "UserOperationRevertReason(bytes32,address,uint256,bytes)": EventFragment; - "Withdrawn(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AccountDeployed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BeforeExecution"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Deposited"): EventFragment; - getEvent(nameOrSignatureOrTopic: "SignatureAggregatorChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeLocked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeUnlocked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UserOperationEvent"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UserOperationRevertReason"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; -} - -export interface AccountDeployedEventObject { - userOpHash: string; - sender: string; - factory: string; - paymaster: string; -} -export type AccountDeployedEvent = TypedEvent< - [string, string, string, string], - AccountDeployedEventObject ->; - -export type AccountDeployedEventFilter = TypedEventFilter; - -export interface BeforeExecutionEventObject {} -export type BeforeExecutionEvent = TypedEvent<[], BeforeExecutionEventObject>; - -export type BeforeExecutionEventFilter = TypedEventFilter; - -export interface DepositedEventObject { - account: string; - totalDeposit: BigNumber; -} -export type DepositedEvent = TypedEvent< - [string, BigNumber], - DepositedEventObject ->; - -export type DepositedEventFilter = TypedEventFilter; - -export interface SignatureAggregatorChangedEventObject { - aggregator: string; -} -export type SignatureAggregatorChangedEvent = TypedEvent< - [string], - SignatureAggregatorChangedEventObject ->; - -export type SignatureAggregatorChangedEventFilter = - TypedEventFilter; - -export interface StakeLockedEventObject { - account: string; - totalStaked: BigNumber; - unstakeDelaySec: BigNumber; -} -export type StakeLockedEvent = TypedEvent< - [string, BigNumber, BigNumber], - StakeLockedEventObject ->; - -export type StakeLockedEventFilter = TypedEventFilter; - -export interface StakeUnlockedEventObject { - account: string; - withdrawTime: BigNumber; -} -export type StakeUnlockedEvent = TypedEvent< - [string, BigNumber], - StakeUnlockedEventObject ->; - -export type StakeUnlockedEventFilter = TypedEventFilter; - -export interface StakeWithdrawnEventObject { - account: string; - withdrawAddress: string; - amount: BigNumber; -} -export type StakeWithdrawnEvent = TypedEvent< - [string, string, BigNumber], - StakeWithdrawnEventObject ->; - -export type StakeWithdrawnEventFilter = TypedEventFilter; - -export interface UserOperationEventEventObject { - userOpHash: string; - sender: string; - paymaster: string; - nonce: BigNumber; - success: boolean; - actualGasCost: BigNumber; - actualGasUsed: BigNumber; -} -export type UserOperationEventEvent = TypedEvent< - [string, string, string, BigNumber, boolean, BigNumber, BigNumber], - UserOperationEventEventObject ->; - -export type UserOperationEventEventFilter = - TypedEventFilter; - -export interface UserOperationRevertReasonEventObject { - userOpHash: string; - sender: string; - nonce: BigNumber; - revertReason: string; -} -export type UserOperationRevertReasonEvent = TypedEvent< - [string, string, BigNumber, string], - UserOperationRevertReasonEventObject ->; - -export type UserOperationRevertReasonEventFilter = - TypedEventFilter; - -export interface WithdrawnEventObject { - account: string; - withdrawAddress: string; - amount: BigNumber; -} -export type WithdrawnEvent = TypedEvent< - [string, string, BigNumber], - WithdrawnEventObject ->; - -export type WithdrawnEventFilter = TypedEventFilter; - -export interface EntryPoint_v005 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: EntryPoint_v005Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise<[BigNumber]>; - - _validateSenderAndPaymaster( - initCode: PromiseOrValue, - sender: PromiseOrValue, - paymasterAndData: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[void]>; - - addStake( - unstakeDelaySec: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - depositTo( - account: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - deposits( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [BigNumber, boolean, BigNumber, number, number] & { - deposit: BigNumber; - staked: boolean; - stake: BigNumber; - unstakeDelaySec: number; - withdrawTime: number; - } - >; - - getDepositInfo( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [IStakeManager.DepositInfoStructOutput] & { - info: IStakeManager.DepositInfoStructOutput; - } - >; - - getNonce( - sender: PromiseOrValue, - key: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber] & { nonce: BigNumber }>; - - getSenderAddress( - initCode: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getUserOpHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise<[string]>; - - handleAggregatedOps( - opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - handleOps( - ops: UserOperationStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - incrementNonce( - key: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - innerHandleOp( - callData: PromiseOrValue, - opInfo: EntryPoint.UserOpInfoStruct, - context: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - nonceSequenceNumber( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - simulateHandleOp( - op: UserOperationStruct, - target: PromiseOrValue, - targetCallData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - simulateValidation( - userOp: UserOperationStruct, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - unlockStake( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawStake( - withdrawAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawTo( - withdrawAddress: PromiseOrValue, - withdrawAmount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; - - _validateSenderAndPaymaster( - initCode: PromiseOrValue, - sender: PromiseOrValue, - paymasterAndData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - addStake( - unstakeDelaySec: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - depositTo( - account: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - deposits( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [BigNumber, boolean, BigNumber, number, number] & { - deposit: BigNumber; - staked: boolean; - stake: BigNumber; - unstakeDelaySec: number; - withdrawTime: number; - } - >; - - getDepositInfo( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getNonce( - sender: PromiseOrValue, - key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getSenderAddress( - initCode: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getUserOpHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - - handleAggregatedOps( - opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - handleOps( - ops: UserOperationStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - incrementNonce( - key: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - innerHandleOp( - callData: PromiseOrValue, - opInfo: EntryPoint.UserOpInfoStruct, - context: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - nonceSequenceNumber( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - simulateHandleOp( - op: UserOperationStruct, - target: PromiseOrValue, - targetCallData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - simulateValidation( - userOp: UserOperationStruct, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - unlockStake( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawStake( - withdrawAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawTo( - withdrawAddress: PromiseOrValue, - withdrawAmount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - callStatic: { - SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; - - _validateSenderAndPaymaster( - initCode: PromiseOrValue, - sender: PromiseOrValue, - paymasterAndData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - addStake( - unstakeDelaySec: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - depositTo( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - deposits( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [BigNumber, boolean, BigNumber, number, number] & { - deposit: BigNumber; - staked: boolean; - stake: BigNumber; - unstakeDelaySec: number; - withdrawTime: number; - } - >; - - getDepositInfo( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getNonce( - sender: PromiseOrValue, - key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getSenderAddress( - initCode: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getUserOpHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - - handleAggregatedOps( - opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], - beneficiary: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - handleOps( - ops: UserOperationStruct[], - beneficiary: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - incrementNonce( - key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - innerHandleOp( - callData: PromiseOrValue, - opInfo: EntryPoint.UserOpInfoStruct, - context: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonceSequenceNumber( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - simulateHandleOp( - op: UserOperationStruct, - target: PromiseOrValue, - targetCallData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - simulateValidation( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - - unlockStake(overrides?: CallOverrides): Promise; - - withdrawStake( - withdrawAddress: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - withdrawTo( - withdrawAddress: PromiseOrValue, - withdrawAmount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "AccountDeployed(bytes32,address,address,address)"( - userOpHash?: PromiseOrValue | null, - sender?: PromiseOrValue | null, - factory?: null, - paymaster?: null - ): AccountDeployedEventFilter; - AccountDeployed( - userOpHash?: PromiseOrValue | null, - sender?: PromiseOrValue | null, - factory?: null, - paymaster?: null - ): AccountDeployedEventFilter; - - "BeforeExecution()"(): BeforeExecutionEventFilter; - BeforeExecution(): BeforeExecutionEventFilter; - - "Deposited(address,uint256)"( - account?: PromiseOrValue | null, - totalDeposit?: null - ): DepositedEventFilter; - Deposited( - account?: PromiseOrValue | null, - totalDeposit?: null - ): DepositedEventFilter; - - "SignatureAggregatorChanged(address)"( - aggregator?: PromiseOrValue | null - ): SignatureAggregatorChangedEventFilter; - SignatureAggregatorChanged( - aggregator?: PromiseOrValue | null - ): SignatureAggregatorChangedEventFilter; - - "StakeLocked(address,uint256,uint256)"( - account?: PromiseOrValue | null, - totalStaked?: null, - unstakeDelaySec?: null - ): StakeLockedEventFilter; - StakeLocked( - account?: PromiseOrValue | null, - totalStaked?: null, - unstakeDelaySec?: null - ): StakeLockedEventFilter; - - "StakeUnlocked(address,uint256)"( - account?: PromiseOrValue | null, - withdrawTime?: null - ): StakeUnlockedEventFilter; - StakeUnlocked( - account?: PromiseOrValue | null, - withdrawTime?: null - ): StakeUnlockedEventFilter; - - "StakeWithdrawn(address,address,uint256)"( - account?: PromiseOrValue | null, - withdrawAddress?: null, - amount?: null - ): StakeWithdrawnEventFilter; - StakeWithdrawn( - account?: PromiseOrValue | null, - withdrawAddress?: null, - amount?: null - ): StakeWithdrawnEventFilter; - - "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)"( - userOpHash?: PromiseOrValue | null, - sender?: PromiseOrValue | null, - paymaster?: PromiseOrValue | null, - nonce?: null, - success?: null, - actualGasCost?: null, - actualGasUsed?: null - ): UserOperationEventEventFilter; - UserOperationEvent( - userOpHash?: PromiseOrValue | null, - sender?: PromiseOrValue | null, - paymaster?: PromiseOrValue | null, - nonce?: null, - success?: null, - actualGasCost?: null, - actualGasUsed?: null - ): UserOperationEventEventFilter; - - "UserOperationRevertReason(bytes32,address,uint256,bytes)"( - userOpHash?: PromiseOrValue | null, - sender?: PromiseOrValue | null, - nonce?: null, - revertReason?: null - ): UserOperationRevertReasonEventFilter; - UserOperationRevertReason( - userOpHash?: PromiseOrValue | null, - sender?: PromiseOrValue | null, - nonce?: null, - revertReason?: null - ): UserOperationRevertReasonEventFilter; - - "Withdrawn(address,address,uint256)"( - account?: PromiseOrValue | null, - withdrawAddress?: null, - amount?: null - ): WithdrawnEventFilter; - Withdrawn( - account?: PromiseOrValue | null, - withdrawAddress?: null, - amount?: null - ): WithdrawnEventFilter; - }; - - estimateGas: { - SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; - - _validateSenderAndPaymaster( - initCode: PromiseOrValue, - sender: PromiseOrValue, - paymasterAndData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - addStake( - unstakeDelaySec: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - depositTo( - account: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - deposits( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getDepositInfo( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getNonce( - sender: PromiseOrValue, - key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getSenderAddress( - initCode: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getUserOpHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - - handleAggregatedOps( - opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - handleOps( - ops: UserOperationStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - incrementNonce( - key: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - innerHandleOp( - callData: PromiseOrValue, - opInfo: EntryPoint.UserOpInfoStruct, - context: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - nonceSequenceNumber( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - simulateHandleOp( - op: UserOperationStruct, - target: PromiseOrValue, - targetCallData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - simulateValidation( - userOp: UserOperationStruct, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - unlockStake( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawStake( - withdrawAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawTo( - withdrawAddress: PromiseOrValue, - withdrawAmount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - populateTransaction: { - SIG_VALIDATION_FAILED( - overrides?: CallOverrides - ): Promise; - - _validateSenderAndPaymaster( - initCode: PromiseOrValue, - sender: PromiseOrValue, - paymasterAndData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - addStake( - unstakeDelaySec: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - depositTo( - account: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - deposits( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getDepositInfo( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getNonce( - sender: PromiseOrValue, - key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getSenderAddress( - initCode: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getUserOpHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - - handleAggregatedOps( - opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - handleOps( - ops: UserOperationStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - incrementNonce( - key: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - innerHandleOp( - callData: PromiseOrValue, - opInfo: EntryPoint.UserOpInfoStruct, - context: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - nonceSequenceNumber( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - simulateHandleOp( - op: UserOperationStruct, - target: PromiseOrValue, - targetCallData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - simulateValidation( - userOp: UserOperationStruct, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - unlockStake( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawStake( - withdrawAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawTo( - withdrawAddress: PromiseOrValue, - withdrawAmount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; -} diff --git a/packages/common/src/typechain/entrypoint/EntryPoint_v006.ts b/packages/common/src/typechain/entrypoint/EntryPoint_v006.ts deleted file mode 100644 index 5f8742cff..000000000 --- a/packages/common/src/typechain/entrypoint/EntryPoint_v006.ts +++ /dev/null @@ -1,1216 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PayableOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../common"; - -export type UserOperationStruct = { - sender: PromiseOrValue; - nonce: PromiseOrValue; - initCode: PromiseOrValue; - callData: PromiseOrValue; - callGasLimit: PromiseOrValue; - verificationGasLimit: PromiseOrValue; - preVerificationGas: PromiseOrValue; - maxFeePerGas: PromiseOrValue; - maxPriorityFeePerGas: PromiseOrValue; - paymasterAndData: PromiseOrValue; - signature: PromiseOrValue; -}; - -export type UserOperationStructOutput = [ - string, - BigNumber, - string, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string -] & { - sender: string; - nonce: BigNumber; - initCode: string; - callData: string; - callGasLimit: BigNumber; - verificationGasLimit: BigNumber; - preVerificationGas: BigNumber; - maxFeePerGas: BigNumber; - maxPriorityFeePerGas: BigNumber; - paymasterAndData: string; - signature: string; -}; - -export declare namespace IStakeManager { - export type DepositInfoStruct = { - deposit: PromiseOrValue; - staked: PromiseOrValue; - stake: PromiseOrValue; - unstakeDelaySec: PromiseOrValue; - withdrawTime: PromiseOrValue; - }; - - export type DepositInfoStructOutput = [ - BigNumber, - boolean, - BigNumber, - number, - number - ] & { - deposit: BigNumber; - staked: boolean; - stake: BigNumber; - unstakeDelaySec: number; - withdrawTime: number; - }; -} - -export declare namespace IEntryPoint { - export type UserOpsPerAggregatorStruct = { - userOps: UserOperationStruct[]; - aggregator: PromiseOrValue; - signature: PromiseOrValue; - }; - - export type UserOpsPerAggregatorStructOutput = [ - UserOperationStructOutput[], - string, - string - ] & { - userOps: UserOperationStructOutput[]; - aggregator: string; - signature: string; - }; -} - -export declare namespace EntryPoint { - export type MemoryUserOpStruct = { - sender: PromiseOrValue; - nonce: PromiseOrValue; - callGasLimit: PromiseOrValue; - verificationGasLimit: PromiseOrValue; - preVerificationGas: PromiseOrValue; - paymaster: PromiseOrValue; - maxFeePerGas: PromiseOrValue; - maxPriorityFeePerGas: PromiseOrValue; - }; - - export type MemoryUserOpStructOutput = [ - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - BigNumber, - BigNumber - ] & { - sender: string; - nonce: BigNumber; - callGasLimit: BigNumber; - verificationGasLimit: BigNumber; - preVerificationGas: BigNumber; - paymaster: string; - maxFeePerGas: BigNumber; - maxPriorityFeePerGas: BigNumber; - }; - - export type UserOpInfoStruct = { - mUserOp: EntryPoint.MemoryUserOpStruct; - userOpHash: PromiseOrValue; - prefund: PromiseOrValue; - contextOffset: PromiseOrValue; - preOpGas: PromiseOrValue; - }; - - export type UserOpInfoStructOutput = [ - EntryPoint.MemoryUserOpStructOutput, - string, - BigNumber, - BigNumber, - BigNumber - ] & { - mUserOp: EntryPoint.MemoryUserOpStructOutput; - userOpHash: string; - prefund: BigNumber; - contextOffset: BigNumber; - preOpGas: BigNumber; - }; -} - -export interface EntryPoint_v006Interface extends utils.Interface { - functions: { - "SIG_VALIDATION_FAILED()": FunctionFragment; - "_validateSenderAndPaymaster(bytes,address,bytes)": FunctionFragment; - "addStake(uint32)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "depositTo(address)": FunctionFragment; - "deposits(address)": FunctionFragment; - "getDepositInfo(address)": FunctionFragment; - "getNonce(address,uint192)": FunctionFragment; - "getSenderAddress(bytes)": FunctionFragment; - "getUserOpHash((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; - "handleAggregatedOps(((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address,bytes)[],address)": FunctionFragment; - "handleOps((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],address)": FunctionFragment; - "incrementNonce(uint192)": FunctionFragment; - "innerHandleOp(bytes,((address,uint256,uint256,uint256,uint256,address,uint256,uint256),bytes32,uint256,uint256,uint256),bytes)": FunctionFragment; - "nonceSequenceNumber(address,uint192)": FunctionFragment; - "simulateHandleOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),address,bytes)": FunctionFragment; - "simulateValidation((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes))": FunctionFragment; - "unlockStake()": FunctionFragment; - "withdrawStake(address)": FunctionFragment; - "withdrawTo(address,uint256)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "SIG_VALIDATION_FAILED" - | "_validateSenderAndPaymaster" - | "addStake" - | "balanceOf" - | "depositTo" - | "deposits" - | "getDepositInfo" - | "getNonce" - | "getSenderAddress" - | "getUserOpHash" - | "handleAggregatedOps" - | "handleOps" - | "incrementNonce" - | "innerHandleOp" - | "nonceSequenceNumber" - | "simulateHandleOp" - | "simulateValidation" - | "unlockStake" - | "withdrawStake" - | "withdrawTo" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "SIG_VALIDATION_FAILED", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_validateSenderAndPaymaster", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "addStake", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "balanceOf", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "depositTo", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "deposits", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "getDepositInfo", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "getNonce", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "getSenderAddress", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "getUserOpHash", - values: [UserOperationStruct] - ): string; - encodeFunctionData( - functionFragment: "handleAggregatedOps", - values: [IEntryPoint.UserOpsPerAggregatorStruct[], PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "handleOps", - values: [UserOperationStruct[], PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "incrementNonce", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "innerHandleOp", - values: [ - PromiseOrValue, - EntryPoint.UserOpInfoStruct, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "nonceSequenceNumber", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "simulateHandleOp", - values: [ - UserOperationStruct, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "simulateValidation", - values: [UserOperationStruct] - ): string; - encodeFunctionData( - functionFragment: "unlockStake", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "withdrawStake", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "withdrawTo", - values: [PromiseOrValue, PromiseOrValue] - ): string; - - decodeFunctionResult( - functionFragment: "SIG_VALIDATION_FAILED", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_validateSenderAndPaymaster", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "addStake", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "depositTo", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposits", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getDepositInfo", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getNonce", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getSenderAddress", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getUserOpHash", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "handleAggregatedOps", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "handleOps", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "incrementNonce", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "innerHandleOp", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "nonceSequenceNumber", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "simulateHandleOp", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "simulateValidation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "unlockStake", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawStake", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdrawTo", data: BytesLike): Result; - - events: { - "AccountDeployed(bytes32,address,address,address)": EventFragment; - "BeforeExecution()": EventFragment; - "Deposited(address,uint256)": EventFragment; - "SignatureAggregatorChanged(address)": EventFragment; - "StakeLocked(address,uint256,uint256)": EventFragment; - "StakeUnlocked(address,uint256)": EventFragment; - "StakeWithdrawn(address,address,uint256)": EventFragment; - "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)": EventFragment; - "UserOperationRevertReason(bytes32,address,uint256,bytes)": EventFragment; - "Withdrawn(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AccountDeployed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "BeforeExecution"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Deposited"): EventFragment; - getEvent(nameOrSignatureOrTopic: "SignatureAggregatorChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeLocked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeUnlocked"): EventFragment; - getEvent(nameOrSignatureOrTopic: "StakeWithdrawn"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UserOperationEvent"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UserOperationRevertReason"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment; -} - -export interface AccountDeployedEventObject { - userOpHash: string; - sender: string; - factory: string; - paymaster: string; -} -export type AccountDeployedEvent = TypedEvent< - [string, string, string, string], - AccountDeployedEventObject ->; - -export type AccountDeployedEventFilter = TypedEventFilter; - -export interface BeforeExecutionEventObject {} -export type BeforeExecutionEvent = TypedEvent<[], BeforeExecutionEventObject>; - -export type BeforeExecutionEventFilter = TypedEventFilter; - -export interface DepositedEventObject { - account: string; - totalDeposit: BigNumber; -} -export type DepositedEvent = TypedEvent< - [string, BigNumber], - DepositedEventObject ->; - -export type DepositedEventFilter = TypedEventFilter; - -export interface SignatureAggregatorChangedEventObject { - aggregator: string; -} -export type SignatureAggregatorChangedEvent = TypedEvent< - [string], - SignatureAggregatorChangedEventObject ->; - -export type SignatureAggregatorChangedEventFilter = - TypedEventFilter; - -export interface StakeLockedEventObject { - account: string; - totalStaked: BigNumber; - unstakeDelaySec: BigNumber; -} -export type StakeLockedEvent = TypedEvent< - [string, BigNumber, BigNumber], - StakeLockedEventObject ->; - -export type StakeLockedEventFilter = TypedEventFilter; - -export interface StakeUnlockedEventObject { - account: string; - withdrawTime: BigNumber; -} -export type StakeUnlockedEvent = TypedEvent< - [string, BigNumber], - StakeUnlockedEventObject ->; - -export type StakeUnlockedEventFilter = TypedEventFilter; - -export interface StakeWithdrawnEventObject { - account: string; - withdrawAddress: string; - amount: BigNumber; -} -export type StakeWithdrawnEvent = TypedEvent< - [string, string, BigNumber], - StakeWithdrawnEventObject ->; - -export type StakeWithdrawnEventFilter = TypedEventFilter; - -export interface UserOperationEventEventObject { - userOpHash: string; - sender: string; - paymaster: string; - nonce: BigNumber; - success: boolean; - actualGasCost: BigNumber; - actualGasUsed: BigNumber; -} -export type UserOperationEventEvent = TypedEvent< - [string, string, string, BigNumber, boolean, BigNumber, BigNumber], - UserOperationEventEventObject ->; - -export type UserOperationEventEventFilter = - TypedEventFilter; - -export interface UserOperationRevertReasonEventObject { - userOpHash: string; - sender: string; - nonce: BigNumber; - revertReason: string; -} -export type UserOperationRevertReasonEvent = TypedEvent< - [string, string, BigNumber, string], - UserOperationRevertReasonEventObject ->; - -export type UserOperationRevertReasonEventFilter = - TypedEventFilter; - -export interface WithdrawnEventObject { - account: string; - withdrawAddress: string; - amount: BigNumber; -} -export type WithdrawnEvent = TypedEvent< - [string, string, BigNumber], - WithdrawnEventObject ->; - -export type WithdrawnEventFilter = TypedEventFilter; - -export interface EntryPoint_v006 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: EntryPoint_v006Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise<[BigNumber]>; - - _validateSenderAndPaymaster( - initCode: PromiseOrValue, - sender: PromiseOrValue, - paymasterAndData: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[void]>; - - addStake( - unstakeDelaySec: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - depositTo( - account: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - deposits( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [BigNumber, boolean, BigNumber, number, number] & { - deposit: BigNumber; - staked: boolean; - stake: BigNumber; - unstakeDelaySec: number; - withdrawTime: number; - } - >; - - getDepositInfo( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [IStakeManager.DepositInfoStructOutput] & { - info: IStakeManager.DepositInfoStructOutput; - } - >; - - getNonce( - sender: PromiseOrValue, - key: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber] & { nonce: BigNumber }>; - - getSenderAddress( - initCode: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getUserOpHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise<[string]>; - - handleAggregatedOps( - opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - handleOps( - ops: UserOperationStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - incrementNonce( - key: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - innerHandleOp( - callData: PromiseOrValue, - opInfo: EntryPoint.UserOpInfoStruct, - context: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - nonceSequenceNumber( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - simulateHandleOp( - op: UserOperationStruct, - target: PromiseOrValue, - targetCallData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - simulateValidation( - userOp: UserOperationStruct, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - unlockStake( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawStake( - withdrawAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawTo( - withdrawAddress: PromiseOrValue, - withdrawAmount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; - - _validateSenderAndPaymaster( - initCode: PromiseOrValue, - sender: PromiseOrValue, - paymasterAndData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - addStake( - unstakeDelaySec: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - depositTo( - account: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - deposits( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [BigNumber, boolean, BigNumber, number, number] & { - deposit: BigNumber; - staked: boolean; - stake: BigNumber; - unstakeDelaySec: number; - withdrawTime: number; - } - >; - - getDepositInfo( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getNonce( - sender: PromiseOrValue, - key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getSenderAddress( - initCode: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getUserOpHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - - handleAggregatedOps( - opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - handleOps( - ops: UserOperationStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - incrementNonce( - key: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - innerHandleOp( - callData: PromiseOrValue, - opInfo: EntryPoint.UserOpInfoStruct, - context: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - nonceSequenceNumber( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - simulateHandleOp( - op: UserOperationStruct, - target: PromiseOrValue, - targetCallData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - simulateValidation( - userOp: UserOperationStruct, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - unlockStake( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawStake( - withdrawAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawTo( - withdrawAddress: PromiseOrValue, - withdrawAmount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - callStatic: { - SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; - - _validateSenderAndPaymaster( - initCode: PromiseOrValue, - sender: PromiseOrValue, - paymasterAndData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - addStake( - unstakeDelaySec: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - depositTo( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - deposits( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [BigNumber, boolean, BigNumber, number, number] & { - deposit: BigNumber; - staked: boolean; - stake: BigNumber; - unstakeDelaySec: number; - withdrawTime: number; - } - >; - - getDepositInfo( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getNonce( - sender: PromiseOrValue, - key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getSenderAddress( - initCode: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getUserOpHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - - handleAggregatedOps( - opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], - beneficiary: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - handleOps( - ops: UserOperationStruct[], - beneficiary: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - incrementNonce( - key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - innerHandleOp( - callData: PromiseOrValue, - opInfo: EntryPoint.UserOpInfoStruct, - context: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - nonceSequenceNumber( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - simulateHandleOp( - op: UserOperationStruct, - target: PromiseOrValue, - targetCallData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - simulateValidation( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - - unlockStake(overrides?: CallOverrides): Promise; - - withdrawStake( - withdrawAddress: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - withdrawTo( - withdrawAddress: PromiseOrValue, - withdrawAmount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "AccountDeployed(bytes32,address,address,address)"( - userOpHash?: PromiseOrValue | null, - sender?: PromiseOrValue | null, - factory?: null, - paymaster?: null - ): AccountDeployedEventFilter; - AccountDeployed( - userOpHash?: PromiseOrValue | null, - sender?: PromiseOrValue | null, - factory?: null, - paymaster?: null - ): AccountDeployedEventFilter; - - "BeforeExecution()"(): BeforeExecutionEventFilter; - BeforeExecution(): BeforeExecutionEventFilter; - - "Deposited(address,uint256)"( - account?: PromiseOrValue | null, - totalDeposit?: null - ): DepositedEventFilter; - Deposited( - account?: PromiseOrValue | null, - totalDeposit?: null - ): DepositedEventFilter; - - "SignatureAggregatorChanged(address)"( - aggregator?: PromiseOrValue | null - ): SignatureAggregatorChangedEventFilter; - SignatureAggregatorChanged( - aggregator?: PromiseOrValue | null - ): SignatureAggregatorChangedEventFilter; - - "StakeLocked(address,uint256,uint256)"( - account?: PromiseOrValue | null, - totalStaked?: null, - unstakeDelaySec?: null - ): StakeLockedEventFilter; - StakeLocked( - account?: PromiseOrValue | null, - totalStaked?: null, - unstakeDelaySec?: null - ): StakeLockedEventFilter; - - "StakeUnlocked(address,uint256)"( - account?: PromiseOrValue | null, - withdrawTime?: null - ): StakeUnlockedEventFilter; - StakeUnlocked( - account?: PromiseOrValue | null, - withdrawTime?: null - ): StakeUnlockedEventFilter; - - "StakeWithdrawn(address,address,uint256)"( - account?: PromiseOrValue | null, - withdrawAddress?: null, - amount?: null - ): StakeWithdrawnEventFilter; - StakeWithdrawn( - account?: PromiseOrValue | null, - withdrawAddress?: null, - amount?: null - ): StakeWithdrawnEventFilter; - - "UserOperationEvent(bytes32,address,address,uint256,bool,uint256,uint256)"( - userOpHash?: PromiseOrValue | null, - sender?: PromiseOrValue | null, - paymaster?: PromiseOrValue | null, - nonce?: null, - success?: null, - actualGasCost?: null, - actualGasUsed?: null - ): UserOperationEventEventFilter; - UserOperationEvent( - userOpHash?: PromiseOrValue | null, - sender?: PromiseOrValue | null, - paymaster?: PromiseOrValue | null, - nonce?: null, - success?: null, - actualGasCost?: null, - actualGasUsed?: null - ): UserOperationEventEventFilter; - - "UserOperationRevertReason(bytes32,address,uint256,bytes)"( - userOpHash?: PromiseOrValue | null, - sender?: PromiseOrValue | null, - nonce?: null, - revertReason?: null - ): UserOperationRevertReasonEventFilter; - UserOperationRevertReason( - userOpHash?: PromiseOrValue | null, - sender?: PromiseOrValue | null, - nonce?: null, - revertReason?: null - ): UserOperationRevertReasonEventFilter; - - "Withdrawn(address,address,uint256)"( - account?: PromiseOrValue | null, - withdrawAddress?: null, - amount?: null - ): WithdrawnEventFilter; - Withdrawn( - account?: PromiseOrValue | null, - withdrawAddress?: null, - amount?: null - ): WithdrawnEventFilter; - }; - - estimateGas: { - SIG_VALIDATION_FAILED(overrides?: CallOverrides): Promise; - - _validateSenderAndPaymaster( - initCode: PromiseOrValue, - sender: PromiseOrValue, - paymasterAndData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - addStake( - unstakeDelaySec: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - depositTo( - account: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - deposits( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getDepositInfo( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getNonce( - sender: PromiseOrValue, - key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getSenderAddress( - initCode: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getUserOpHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - - handleAggregatedOps( - opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - handleOps( - ops: UserOperationStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - incrementNonce( - key: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - innerHandleOp( - callData: PromiseOrValue, - opInfo: EntryPoint.UserOpInfoStruct, - context: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - nonceSequenceNumber( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - simulateHandleOp( - op: UserOperationStruct, - target: PromiseOrValue, - targetCallData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - simulateValidation( - userOp: UserOperationStruct, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - unlockStake( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawStake( - withdrawAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawTo( - withdrawAddress: PromiseOrValue, - withdrawAmount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - populateTransaction: { - SIG_VALIDATION_FAILED( - overrides?: CallOverrides - ): Promise; - - _validateSenderAndPaymaster( - initCode: PromiseOrValue, - sender: PromiseOrValue, - paymasterAndData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - addStake( - unstakeDelaySec: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - depositTo( - account: PromiseOrValue, - overrides?: PayableOverrides & { from?: PromiseOrValue } - ): Promise; - - deposits( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getDepositInfo( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getNonce( - sender: PromiseOrValue, - key: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getSenderAddress( - initCode: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getUserOpHash( - userOp: UserOperationStruct, - overrides?: CallOverrides - ): Promise; - - handleAggregatedOps( - opsPerAggregator: IEntryPoint.UserOpsPerAggregatorStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - handleOps( - ops: UserOperationStruct[], - beneficiary: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - incrementNonce( - key: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - innerHandleOp( - callData: PromiseOrValue, - opInfo: EntryPoint.UserOpInfoStruct, - context: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - nonceSequenceNumber( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - simulateHandleOp( - op: UserOperationStruct, - target: PromiseOrValue, - targetCallData: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - simulateValidation( - userOp: UserOperationStruct, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - unlockStake( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawStake( - withdrawAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawTo( - withdrawAddress: PromiseOrValue, - withdrawAmount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; -} diff --git a/packages/common/src/typechain/entrypoint/index.ts b/packages/common/src/typechain/entrypoint/index.ts deleted file mode 100644 index 6fd457696..000000000 --- a/packages/common/src/typechain/entrypoint/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { EntryPoint_v005 } from "./EntryPoint_v005"; -export type { EntryPoint_v006 } from "./EntryPoint_v006"; diff --git a/packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccountFactory_v100__factory.ts b/packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccountFactory_v100__factory.ts deleted file mode 100644 index 6d25ffab0..000000000 --- a/packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccountFactory_v100__factory.ts +++ /dev/null @@ -1,233 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../common"; -import type { - SmartAccountFactory_v100, - SmartAccountFactory_v100Interface, -} from "../../biconomy_v1.0.0/SmartAccountFactory_v100"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_basicImplementation", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - ], - name: "AccountCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "AccountCreationWithoutIndex", - type: "event", - }, - { - inputs: [], - name: "accountCreationCode", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "basicImplementation", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_owner", - type: "address", - }, - ], - name: "deployAccount", - outputs: [ - { - internalType: "address", - name: "proxy", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_owner", - type: "address", - }, - { - internalType: "uint256", - name: "_index", - type: "uint256", - }, - ], - name: "deployCounterFactualAccount", - outputs: [ - { - internalType: "address", - name: "proxy", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_owner", - type: "address", - }, - { - internalType: "uint256", - name: "_index", - type: "uint256", - }, - ], - name: "getAddressForCounterFactualAccount", - outputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "minimalHandler", - outputs: [ - { - internalType: "contract DefaultCallbackHandler", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -] as const; - -const _bytecode = - "0x60c060405234801561001057600080fd5b50604051610f5a380380610f5a83398101604081905261002f916100de565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601d60248201527f696d706c656d656e746174696f6e2063616e6e6f74206265207a65726f000000604482015260640160405180910390fd5b6001600160a01b0381166080526040516100a2906100d1565b604051809103906000f0801580156100be573d6000803e3d6000fd5b506001600160a01b031660a0525061010e565b6105e68061097483390190565b6000602082840312156100f057600080fd5b81516001600160a01b038116811461010757600080fd5b9392505050565b60805160a05161082661014e6000396000818160c1015261056501526000818161010e015281816101b10152818161032b015261043f01526108266000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063d668bfa811610050578063d668bfa8146100e3578063da9fc1ae146100f6578063daf0dfc81461010957600080fd5b8063088924ef1461007757806331c884df146100a75780633b3cb143146100bc575b600080fd5b61008a6100853660046105fe565b610130565b6040516001600160a01b0390911681526020015b60405180910390f35b6100af6102bd565b60405161009e919061064c565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b61008a6100f13660046105fe565b6102e7565b61008a61010436600461067f565b610408565b61008a7f000000000000000000000000000000000000000000000000000000000000000081565b60008061013c84610550565b90506000818051906020012084604051602001610163929190918252602082015260400190565b60405160208183030381529060405280519060200120905060006040518060200161018d906105d5565b601f1982820381018352601f9091011660408190526101da91906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b6040516020818303038152906040529050818151826020016000f593506001600160a01b0384166102525760405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c65640000000000000000000000000060448201526064015b60405180910390fd5b8251156102735760008060008551602087016000895af10361027357600080fd5b84866001600160a01b0316856001600160a01b03167f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f260405160405180910390a450505092915050565b6060604051806020016102cf906105d5565b601f1982820381018352601f90910116604052919050565b6000806102f384610550565b9050600060405180602001610307906105d5565b601f1982820381018352601f90910116604081905261035491906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60408051808303601f1901815282825284516020958601208584015282820196909652805180830382018152606080840183528151918601919091208751978601979097207fff0000000000000000000000000000000000000000000000000000000000000060808501523090911b6bffffffffffffffffffffffff19166081840152609583019690965260b5808301969096528051808303909601865260d5909101905250825192019190912092915050565b6000806040518060200161041b906105d5565b601f1982820381018352601f90910116604081905261046891906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906020016106a1565b60405160208183030381529060405290508051816020016000f091506001600160a01b0382166104da5760405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606401610249565b60006104e584610550565b8051909150156105095760008060008351602085016000885af10361050957600080fd5b836001600160a01b0316836001600160a01b03167f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf65760405160405180910390a35050919050565b6040516001600160a01b0380831660248301527f000000000000000000000000000000000000000000000000000000000000000016604482015260609060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663784d200b60e11b17905292915050565b61012d806106c483390190565b80356001600160a01b03811681146105f957600080fd5b919050565b6000806040838503121561061157600080fd5b61061a836105e2565b946020939093013593505050565b60005b8381101561064357818101518382015260200161062b565b50506000910152565b602081526000825180602084015261066b816040850160208701610628565b601f01601f19169190910160400192915050565b60006020828403121561069157600080fd5b61069a826105e2565b9392505050565b600083516106b3818460208801610628565b919091019182525060200191905056fe608060405234801561001057600080fd5b5060405161012d38038061012d83398101604081905261002f91610090565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e20616464726573730000604482015260640160405180910390fd5b30556100c0565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b605f806100ce6000396000f3fe608060405230543660008037600080366000845af43d6000803e8080156024573d6000f35b3d6000fdfea2646970667358221220a7977748230fa5c96134083773f708cfbe78723c07e58051ac6bd8c4877a4d5a64736f6c63430008110033a26469706673582212201fec0df9ef9e79bf19660229f5fa1cf6bbf67a01bd022c1b6866ccb255550e5764736f6c63430008110033608060405234801561001057600080fd5b506105c6806100206000396000f3fe608060405234801561001057600080fd5b506004361061007c5760003560e01c8063a3f4df7e1161005b578063a3f4df7e146100fb578063bc197c8114610144578063f23a6e6114610166578063ffa1ad741461018657600080fd5b806223de291461008157806301ffc9a71461009b578063150b7a02146100c3575b600080fd5b61009961008f3660046102a0565b5050505050505050565b005b6100ae6100a936600461034b565b6101c2565b60405190151581526020015b60405180910390f35b6100e26100d136600461037c565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016100ba565b6101376040518060400160405280601881526020017f44656661756c742043616c6c6261636b2048616e646c6572000000000000000081525081565b6040516100ba91906103eb565b6100e261015236600461047e565b63bc197c8160e01b98975050505050505050565b6100e2610174366004610518565b63f23a6e6160e01b9695505050505050565b6101376040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60006001600160e01b03198216630271189760e51b14806101f357506001600160e01b03198216630a85bd0160e11b145b8061020d57506001600160e01b031982166223de2960e01b145b8061022857506001600160e01b031982166301ffc9a760e01b145b92915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461025257600080fd5b919050565b60008083601f84011261026957600080fd5b50813567ffffffffffffffff81111561028157600080fd5b60208301915083602082850101111561029957600080fd5b9250929050565b60008060008060008060008060c0898b0312156102bc57600080fd5b6102c58961022e565b97506102d360208a0161022e565b96506102e160408a0161022e565b955060608901359450608089013567ffffffffffffffff8082111561030557600080fd5b6103118c838d01610257565b909650945060a08b013591508082111561032a57600080fd5b506103378b828c01610257565b999c989b5096995094979396929594505050565b60006020828403121561035d57600080fd5b81356001600160e01b03198116811461037557600080fd5b9392505050565b60008060008060006080868803121561039457600080fd5b61039d8661022e565b94506103ab6020870161022e565b935060408601359250606086013567ffffffffffffffff8111156103ce57600080fd5b6103da88828901610257565b969995985093965092949392505050565b600060208083528351808285015260005b81811015610418578581018301518582016040015282016103fc565b506000604082860101526040601f19601f8301168501019250505092915050565b60008083601f84011261044b57600080fd5b50813567ffffffffffffffff81111561046357600080fd5b6020830191508360208260051b850101111561029957600080fd5b60008060008060008060008060a0898b03121561049a57600080fd5b6104a38961022e565b97506104b160208a0161022e565b9650604089013567ffffffffffffffff808211156104ce57600080fd5b6104da8c838d01610439565b909850965060608b01359150808211156104f357600080fd5b6104ff8c838d01610439565b909650945060808b013591508082111561032a57600080fd5b60008060008060008060a0878903121561053157600080fd5b61053a8761022e565b95506105486020880161022e565b94506040870135935060608701359250608087013567ffffffffffffffff81111561057257600080fd5b61057e89828a01610257565b979a969950949750929593949250505056fea2646970667358221220f9bf68273e40153fec1c25026a3e3145e43e4e63c519d4413921bbc86925381c64736f6c63430008110033"; - -type SmartAccountFactory_v100ConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: SmartAccountFactory_v100ConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class SmartAccountFactory_v100__factory extends ContractFactory { - constructor(...args: SmartAccountFactory_v100ConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _basicImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy( - _basicImplementation, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _basicImplementation: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(_basicImplementation, overrides || {}); - } - override attach(address: string): SmartAccountFactory_v100 { - return super.attach(address) as SmartAccountFactory_v100; - } - override connect(signer: Signer): SmartAccountFactory_v100__factory { - return super.connect(signer) as SmartAccountFactory_v100__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): SmartAccountFactory_v100Interface { - return new utils.Interface(_abi) as SmartAccountFactory_v100Interface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): SmartAccountFactory_v100 { - return new Contract( - address, - _abi, - signerOrProvider - ) as SmartAccountFactory_v100; - } -} diff --git a/packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccount_v100__factory.ts b/packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccount_v100__factory.ts deleted file mode 100644 index d39eff887..000000000 --- a/packages/common/src/typechain/factories/biconomy_v1.0.0/SmartAccount_v100__factory.ts +++ /dev/null @@ -1,1739 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../common"; -import type { - SmartAccount_v100, - SmartAccount_v100Interface, -} from "../../biconomy_v1.0.0/SmartAccount_v100"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "anEntryPoint", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "address", - name: "smartAccount", - type: "address", - }, - ], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "BaseImplementationCannotBeZero", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotAnEntryPoint", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotEntryPointOrOwner", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotOwner", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotSelf", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "targetTxGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "gasPrice", - type: "uint256", - }, - { - internalType: "bool", - name: "success", - type: "bool", - }, - ], - name: "CanNotEstimateGas", - type: "error", - }, - { - inputs: [], - name: "DelegateCallsOnly", - type: "error", - }, - { - inputs: [], - name: "EntryPointCannotBeZero", - type: "error", - }, - { - inputs: [], - name: "ExecutionFailed", - type: "error", - }, - { - inputs: [], - name: "HandlerCannotBeZero", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementationAddress", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "restoredSigner", - type: "address", - }, - { - internalType: "address", - name: "expectedSigner", - type: "address", - }, - ], - name: "InvalidSignature", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "MixedAuthFail", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ModuleAlreadyEnabled", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "expectedModule", - type: "address", - }, - { - internalType: "address", - name: "returnedModule", - type: "address", - }, - { - internalType: "address", - name: "prevModule", - type: "address", - }, - ], - name: "ModuleAndPrevModuleMismatch", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ModuleCannotBeZeroOrSentinel", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ModuleNotEnabled", - type: "error", - }, - { - inputs: [], - name: "ModulesAlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "ModulesSetupExecutionFailed", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "gasLeft", - type: "uint256", - }, - { - internalType: "uint256", - name: "gasRequired", - type: "uint256", - }, - ], - name: "NotEnoughGasLeft", - type: "error", - }, - { - inputs: [], - name: "OwnerCanNotBeSelf", - type: "error", - }, - { - inputs: [], - name: "OwnerCannotBeZero", - type: "error", - }, - { - inputs: [], - name: "OwnerProvidedIsSame", - type: "error", - }, - { - inputs: [], - name: "ReentrancyProtectionActivated", - type: "error", - }, - { - inputs: [], - name: "TokenGasPriceFactorCanNotBeZero", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "dest", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "TokenTransferFailed", - type: "error", - }, - { - inputs: [], - name: "TransferToZeroAddressAttempt", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "destLength", - type: "uint256", - }, - { - internalType: "uint256", - name: "valueLength", - type: "uint256", - }, - { - internalType: "uint256", - name: "funcLength", - type: "uint256", - }, - ], - name: "WrongBatchProvided", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes", - name: "contractSignature", - type: "bytes", - }, - ], - name: "WrongContractSignature", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "uintS", - type: "uint256", - }, - { - internalType: "uint256", - name: "contractSignatureLength", - type: "uint256", - }, - { - internalType: "uint256", - name: "signatureLength", - type: "uint256", - }, - ], - name: "WrongContractSignatureFormat", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "txHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "uint256", - name: "payment", - type: "uint256", - }, - ], - name: "AccountHandlePayment", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousHandler", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "handler", - type: "address", - }, - ], - name: "ChangedFallbackHandler", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "DisabledModule", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_scw", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "_oldEOA", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "_newEOA", - type: "address", - }, - ], - name: "EOAChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "EnabledModule", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: true, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "txGas", - type: "uint256", - }, - ], - name: "ExecutionFailure", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ExecutionFromModuleFailure", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ExecutionFromModuleSuccess", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: true, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "txGas", - type: "uint256", - }, - ], - name: "ExecutionSuccess", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldImplementation", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "ImplementationUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "module", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - ], - name: "ModuleTransaction", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "SmartAccountReceivedNativeToken", - type: "event", - }, - { - stateMutability: "nonpayable", - type: "fallback", - }, - { - inputs: [], - name: "VERSION", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "addDeposit", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "dataHash", - type: "bytes32", - }, - { - internalType: "bytes", - name: "signatures", - type: "bytes", - }, - ], - name: "checkSignatures", - outputs: [], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "prevModule", - type: "address", - }, - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "disableModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "domainSeparator", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "enableModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "targetTxGas", - type: "uint256", - }, - ], - internalType: "struct Transaction", - name: "_tx", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "baseGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "gasPrice", - type: "uint256", - }, - { - internalType: "uint256", - name: "tokenGasPriceFactor", - type: "uint256", - }, - { - internalType: "address", - name: "gasToken", - type: "address", - }, - { - internalType: "address payable", - name: "refundReceiver", - type: "address", - }, - ], - internalType: "struct FeeRefund", - name: "refundInfo", - type: "tuple", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "encodeTransactionData", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "entryPoint", - outputs: [ - { - internalType: "contract IEntryPoint", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "targetTxGas", - type: "uint256", - }, - ], - internalType: "struct Transaction", - name: "_tx", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "baseGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "gasPrice", - type: "uint256", - }, - { - internalType: "uint256", - name: "tokenGasPriceFactor", - type: "uint256", - }, - { - internalType: "address", - name: "gasToken", - type: "address", - }, - { - internalType: "address payable", - name: "refundReceiver", - type: "address", - }, - ], - internalType: "struct FeeRefund", - name: "refundInfo", - type: "tuple", - }, - { - internalType: "bytes", - name: "signatures", - type: "bytes", - }, - ], - name: "execTransaction", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - ], - name: "execTransactionFromModule", - outputs: [ - { - internalType: "bool", - name: "success", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - ], - name: "execTransactionFromModuleReturnData", - outputs: [ - { - internalType: "bool", - name: "success", - type: "bool", - }, - { - internalType: "bytes", - name: "returnData", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "targetTxGas", - type: "uint256", - }, - ], - internalType: "struct Transaction", - name: "_tx", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "baseGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "gasPrice", - type: "uint256", - }, - { - internalType: "uint256", - name: "tokenGasPriceFactor", - type: "uint256", - }, - { - internalType: "address", - name: "gasToken", - type: "address", - }, - { - internalType: "address payable", - name: "refundReceiver", - type: "address", - }, - ], - internalType: "struct FeeRefund", - name: "refundInfo", - type: "tuple", - }, - { - internalType: "bytes", - name: "signatures", - type: "bytes", - }, - ], - name: "execTransaction_S6W", - outputs: [ - { - internalType: "bool", - name: "success", - type: "bool", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "value", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]", - }, - ], - name: "executeBatchCall", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "value", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]", - }, - ], - name: "executeBatchCall_4by", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "dest", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "func", - type: "bytes", - }, - ], - name: "executeCall", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "dest", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "func", - type: "bytes", - }, - ], - name: "executeCall_s1m", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getChainId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getDeposit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getFallbackHandler", - outputs: [ - { - internalType: "address", - name: "_handler", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getImplementation", - outputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "start", - type: "address", - }, - { - internalType: "uint256", - name: "pageSize", - type: "uint256", - }, - ], - name: "getModulesPaginated", - outputs: [ - { - internalType: "address[]", - name: "array", - type: "address[]", - }, - { - internalType: "address", - name: "next", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "batchId", - type: "uint256", - }, - ], - name: "getNonce", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - { - internalType: "uint256", - name: "targetTxGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "baseGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "gasPrice", - type: "uint256", - }, - { - internalType: "uint256", - name: "tokenGasPriceFactor", - type: "uint256", - }, - { - internalType: "address", - name: "gasToken", - type: "address", - }, - { - internalType: "address payable", - name: "refundReceiver", - type: "address", - }, - { - internalType: "uint256", - name: "_nonce", - type: "uint256", - }, - ], - name: "getTransactionHash", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "gasUsed", - type: "uint256", - }, - { - internalType: "uint256", - name: "baseGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "gasPrice", - type: "uint256", - }, - { - internalType: "uint256", - name: "tokenGasPriceFactor", - type: "uint256", - }, - { - internalType: "address", - name: "gasToken", - type: "address", - }, - { - internalType: "address payable", - name: "refundReceiver", - type: "address", - }, - ], - name: "handlePaymentRevert", - outputs: [ - { - internalType: "uint256", - name: "requiredGas", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_owner", - type: "address", - }, - { - internalType: "address", - name: "_handler", - type: "address", - }, - ], - name: "init", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "isModuleEnabled", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_dataHash", - type: "bytes32", - }, - { - internalType: "bytes", - name: "_signature", - type: "bytes", - }, - ], - name: "isValidSignature", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "nonce", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "dest", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "pullTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - ], - name: "requiredTxGas", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "handler", - type: "address", - }, - ], - name: "setFallbackHandler", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_newOwner", - type: "address", - }, - ], - name: "setOwner", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "_interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "dest", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - ], - name: "updateImplementation", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "missingAccountFunds", - type: "uint256", - }, - ], - name: "validateUserOp", - outputs: [ - { - internalType: "uint256", - name: "validationData", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "withdrawDepositTo", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -] as const; - -const _bytecode = - "0x60e06040523480156200001157600080fd5b5060405162003915380380620039158339810160408190526200003491620000a1565b60016031553060c052603280546001600160a01b03191673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1790556001600160a01b0381166200008b5760405163091748f960e21b815260040160405180910390fd5b6001600160a01b03166080524660a052620000d3565b600060208284031215620000b457600080fd5b81516001600160a01b0381168114620000cc57600080fd5b9392505050565b60805160a05160c0516137e86200012d60003960006102af015260006104ed01526000818161078701528181610dcf01528181610f2c01528181610fd901528181611935015281816119c6015261204f01526137e86000f3fe6080604052600436106102a05760003560e01c80638da5cb5b1161016e578063c399ec88116100cb578063f08a03231161007f578063f698da2511610064578063f698da251461088e578063fc7d3d79146108f7578063ffa1ad741461090a5761031c565b8063f08a03231461084e578063f09a40161461086e5761031c565b8063cc2f8452116100b0578063cc2f8452146107e0578063e009cfde1461080e578063ed516d511461082e5761031c565b8063c399ec88146107ab578063c4ca3a9c146107c05761031c565b8063aaf10f4211610122578063ac85dca711610107578063ac85dca714610743578063affed0e014610763578063b0d691fe146107785761031c565b8063aaf10f421461070f578063abc1b745146107235761031c565b80639e5d4c49116101535780639e5d4c49146106af578063a18f51e5146106cf578063a9059cbb146106ef5761031c565b80638da5cb5b1461066f578063912ccaa31461068f5761031c565b80633a871cdd1161021c5780635229073f116101d0578063610b5925116101b5578063610b5925146105f45780637455ce3c14610614578063856dfd99146106275761031c565b80635229073f146105995780635c0ba299146105c75761031c565b8063468721a711610201578063468721a71461055e5780634a58db191461057e5780634d44560d146105865761031c565b80633a871cdd146105115780633d46b819146105315761031c565b806313af4035116102735780631626ba7e116102585780631626ba7e146104855780632d9ad53d146104be5780633408e470146104de5761031c565b806313af40351461042a578063141a468c1461044a5761031c565b80610772146103825780618f2d146103a457806301ffc9a7146103c4578063025b22bc1461040a5761031c565b3661031c576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102ee57604051633c97166560e21b815260040160405180910390fd5b604051349033907ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce0290600090a3005b34801561032857600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d480548061035357005b36600080373360601b365260008060143601600080855af190503d6000803e8061037c573d6000fd5b503d6000f35b34801561038e57600080fd5b506103a261039d366004612ab2565b610953565b005b3480156103b057600080fd5b506103a26103bf366004612b53565b6109a2565b3480156103d057600080fd5b506103f56103df366004612c03565b6001600160e01b0319166301ffc9a760e01b1490565b60405190151581526020015b60405180910390f35b34801561041657600080fd5b506103a2610425366004612c20565b610ab3565b34801561043657600080fd5b506103a2610445366004612c20565b610bbb565b34801561045657600080fd5b50610477610465366004612c3d565b60336020526000908152604090205481565b604051908152602001610401565b34801561049157600080fd5b506104a56104a0366004612d22565b610cbd565b6040516001600160e01b03199091168152602001610401565b3480156104ca57600080fd5b506103f56104d9366004612c20565b610d8a565b3480156104ea57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610477565b34801561051d57600080fd5b5061047761052c366004612d69565b610dc2565b34801561053d57600080fd5b5061047761054c366004612c3d565b60009081526033602052604090205490565b34801561056a57600080fd5b506103f5610579366004612dcc565b610e2b565b6103a2610f2a565b6103a2610594366004612e36565b610faa565b3480156105a557600080fd5b506105b96105b4366004612dcc565b611060565b604051610401929190612eb2565b3480156105d357600080fd5b506105e76105e2366004612fad565b611096565b6040516104019190613005565b34801561060057600080fd5b506103a261060f366004612c20565b6111f0565b6103f5610622366004613018565b611316565b34801561063357600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4545b6040516001600160a01b039091168152602001610401565b34801561067b57600080fd5b50603254610657906001600160a01b031681565b34801561069b57600080fd5b506103a26106aa366004612b53565b611554565b3480156106bb57600080fd5b506103a26106ca366004612ab2565b611562565b3480156106db57600080fd5b506104776106ea36600461308d565b61156e565b3480156106fb57600080fd5b506103a261070a366004612e36565b611707565b34801561071b57600080fd5b503054610657565b34801561072f57600080fd5b5061047761073e3660046130eb565b6117a5565b34801561074f57600080fd5b506103a261075e3660046131b3565b611878565b34801561076f57600080fd5b5061047761190e565b34801561078457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610657565b3480156107b757600080fd5b506104776119a6565b3480156107cc57600080fd5b506104776107db3660046131f4565b6119f5565b3480156107ec57600080fd5b506108006107fb366004612e36565b611a6e565b604051610401929190613265565b34801561081a57600080fd5b506103a26108293660046132c2565b611b67565b34801561083a57600080fd5b506103a2610849366004612d22565b611c99565b34801561085a57600080fd5b506103a2610869366004612c20565b611f2b565b34801561087a57600080fd5b506103a26108893660046132c2565b611fa2565b34801561089a57600080fd5b50610477604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6103f5610905366004613018565b612037565b34801561091657600080fd5b506105e76040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b61095b612044565b61099c848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b50505050565b6109aa612044565b8415806109b75750848314155b806109c25750828114155b156109f657604051630a0c0a9160e31b81526004810186905260248101849052604481018290526064015b60405180910390fd5b60005b85811015610aaa57610aa2878783818110610a1657610a166132fb565b9050602002016020810190610a2b9190612c20565b868684818110610a3d57610a3d6132fb565b90506020020135858585818110610a5657610a566132fb565b9050602002810190610a689190613311565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120aa92505050565b6001016109f9565b50505050505050565b6032546001600160a01b03163314801590610ace5750333014155b15610aee576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610b445760405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f0000000000000000000060448201526064016109ed565b6001600160a01b0381163b610b7757604051630c76093760e01b81526001600160a01b03821660048201526024016109ed565b308054908290556040516001600160a01b0380841691908316907faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da90600090a35050565b6032546001600160a01b03163314801590610bd65750333014155b15610bf6576040516308a0b0a560e11b81523360048201526024016109ed565b6001600160a01b038116610c1d57604051639b15e16f60e01b815260040160405180910390fd5b306001600160a01b03821603610c46576040516375b4d24760e01b815260040160405180910390fd5b6032546001600160a01b0390811690821603610c7557604051638a95d3fb60e01b815260040160405180910390fd5b60328054908290556040516001600160a01b0391821691831690829030907ff2c2b1b5312b1e31ad49a7d85acd6322ae6facc51488810b882ecdb4df861cd490600090a45050565b6032546000906001600160a01b03163b15610d4c57603254604051630b135d3f60e11b81526001600160a01b0390911690631626ba7e90610d049086908690600401613358565b602060405180830381865afa158015610d21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d459190613371565b9050610d84565b610d5683836120c8565b6032546001600160a01b03918216911603610d795750630b135d3f60e11b610d84565b506001600160e01b03195b92915050565b600060016001600160a01b03831614801590610d845750506001600160a01b0390811660009081526020819052604090205416151590565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e0f57604051635dac3db760e11b81523360048201526024016109ed565b610e1984846120ec565b9050610e24826122dd565b9392505050565b60003360011480610e525750336000908152602081905260409020546001600160a01b0316155b15610e72576040516321ac7c5f60e01b81523360048201526024016109ed565b610e7f858585855a612328565b90508015610ef6577f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da3386868686604051610ebe9594939291906133c6565b60405180910390a160405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a2610f22565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024016000604051808303818588803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b5050505050565b6032546001600160a01b03163314610fd75760405163d4ed9a1760e01b81523360048201526024016109ed565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050505050565b6000606061107086868686610e2b565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060007fda033865d68bf4a40a5a7cb4159a99e33dba8569e65ea3e38222eb12d9e66eee60001b856000015186604001518760600151805190602001208860200151896080015189600001518a602001518b604001518c606001518d608001518d6040516020016111139c9b9a99989796959493929190613411565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b611193604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040517fff0000000000000000000000000000000000000000000000000000000000000093841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509392505050565b6111f861242f565b6001600160a01b038116158061121757506001600160a01b0381166001145b156112405760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b0381811660009081526020819052604090205416156112845760405163b29d459560e01b81526001600160a01b03821660048201526024016109ed565b600060208181527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b0385811680865260408087208054939094166001600160a01b03199384161790935560019095528254168417909155519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440910160405180910390a150565b600060026031540361133b57604051637465d9d160e01b815260040160405180910390fd5b600260315560005a6001600090815260336020527f10f6f77027d502f219862b0303542eb5dd005b06fa23ff4d1775aaa45bbf94778054929350909182916113959189918991908561138c836134a0565b91905055611096565b80516020820120925090506113aa8286611c99565b506113d9603f60068860800151901b6113c391906134b9565b60808801516113d4906109c46134db565b612451565b6113e5906101f46134db565b5a1015611444575a611416603f60068960800151901b61140591906134b9565b60808901516113d4906109c46134db565b611422906101f46134db565b604051633b4daac960e01b8152600481019290925260248201526044016109ed565b61148486600001518760400151886060015189602001518960200151600014611471578a60800151612328565b6109c45a61147f91906134ee565b612328565b92508215801561149657506080860151155b80156114a457506020850151155b156114dd5760808601516020860151604051631061f87f60e31b81526004810192909252602482015283151560448201526064016109ed565b60008560200151600014611545576115145a6114f990856134ee565b8751602089015160408a015160608b015160808c0151612467565b905080827f3fd74c38c9f1b6f0499c6d0128fbf77a796dbacc7eda0369b13006dc977bb56b60405160405180910390a35b50506001603155509392505050565b6110588686868686866109a2565b61099c84848484610953565b6000836000036115c05760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420746f6b656e4761735072696365466163746f72000000000060448201526064016109ed565b60005a905060006001600160a01b038416156115dc57836115de565b325b90506001600160a01b0385166116615760003a88106115fd573a6115ff565b875b6116098a8c6134db565b6116139190613501565b9050600080600080600085875af190508061165a5760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b50506116c9565b6000868861166f8b8d6134db565b6116799190613501565b61168391906134b9565b9050611690868383612592565b6116c75760405163190eecf360e31b81526001600160a01b03808816600483015283166024820152604481018290526064016109ed565b505b5a82039250826040516020016116e191815260200190565b60408051601f198184030181529082905262461bcd60e51b82526109ed91600401613005565b6032546001600160a01b031633146117345760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b03821661175b576040516309293b1960e41b815260040160405180910390fd5b600080600080600085875af19050806117a05760405163190eecf360e31b8152600060048201526001600160a01b0384166024820152604481018390526064016109ed565b505050565b6000806040518060a001604052808f6001600160a01b031681526020018b60018111156117d4576117d461338e565b81526020018e81526020018d8d8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081018b90526040805160a0810182528b81529182018a905281018890526001600160a01b0380881660608301528616608082015290915061185d828286611096565b80519060200120925050509c9b505050505050505050505050565b6032546001600160a01b031633146118a55760405163d4ed9a1760e01b81523360048201526024016109ed565b6001600160a01b0382166118cc576040516309293b1960e41b815260040160405180910390fd5b6118d7838383612592565b6117a05760405163190eecf360e31b81526001600160a01b03808516600483015283166024820152604481018290526064016109ed565b604051631aab3f0d60e11b8152306004820152600060248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a906044015b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190613518565b905090565b6040516370a0823160e01b81523060048201526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401611960565b6000805a9050611a3e878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050505a612328565b611a5b57604051632b3f6d1160e21b815260040160405180910390fd5b5a604080519183036020830152016116e1565b606060008267ffffffffffffffff811115611a8b57611a8b612c56565b604051908082528060200260200182016040528015611ab4578160200160208202803683370190505b506001600160a01b0380861660009081526020819052604081205492945091165b6001600160a01b03811615801590611af757506001600160a01b038116600114155b8015611b0257508482105b15611b595780848381518110611b1a57611b1a6132fb565b6001600160a01b039283166020918202929092018101919091529181166000908152918290526040909120541681611b51816134a0565b925050611ad5565b908352919491935090915050565b611b6f61242f565b6001600160a01b0381161580611b8e57506001600160a01b0381166001145b15611bb75760405163cadb248f60e01b81526001600160a01b03821660048201526024016109ed565b6001600160a01b03828116600090815260208190526040902054811690821614611c1f576001600160a01b0382811660008181526020819052604090819020549051633103525b60e21b815284841660048201529216602483015260448201526064016109ed565b6001600160a01b03818116600081815260208181526040808320805488871685528285208054919097166001600160a01b03199182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276910160405180910390a15050565b604181511015611ceb5760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964207369676e617475726573206c656e6774680000000000000060448201526064016109ed565b600080600080611d0e856020810151604082015160419092015160ff1692909190565b9195509350915060ff8416600003611e535750816041821015611d55576040516338a245ff60e11b81526004810183905260006024820181905260448201526064016109ed565b6020828601810151865190918290611d6e9086906134db565b611d7891906134db565b1115611dab5785516040516338a245ff60e11b8152600481018590526024810183905260448101919091526064016109ed565b604051630b135d3f60e11b808252878501602001916001600160a01b03851690631626ba7e90611de1908c908690600401613358565b602060405180830381865afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e229190613371565b6001600160e01b03191614611e4c578060405163605d348960e01b81526004016109ed9190613005565b5050611ee6565b601e8460ff161115611ed657611ece611e6d600486613531565b8484611ec68a6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9291906126e3565b509050611ee6565b611ee2868585856126e3565b5090505b6032546001600160a01b03828116911614611058576032546040516310b5d43760e21b81526001600160a01b03808416600483015290911660248201526044016109ed565b611f3361242f565b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d454611f5e826127a7565b816001600160a01b0316816001600160a01b03167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c60405160405180910390a35050565b6032546001600160a01b031615611fce576040516393360fbf60e01b81523060048201526024016109ed565b6001600160a01b038216611ff557604051639b15e16f60e01b815260040160405180910390fd5b603280546001600160a01b0319166001600160a01b038416179055612019816127a7565b6120336000604051806020016040528060008152506127f2565b5050565b6000610f22848484611316565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061208857506032546001600160a01b03163314155b156120a8576040516332dbd3c760e11b81523360048201526024016109ed565b565b60008082516020840185875af16040513d6000823e81610fa3573d81fd5b60008060006120d785856128bc565b915091506120e481612901565b509392505050565b600036816120fd6060860186613311565b90925090508015612204576000612117600482848661354a565b61212091613574565b90506361a2b3b760e01b6001600160e01b0319821601612202576000808061214b856004818961354a565b81019061215891906135a4565b6001600160a01b03808416600090815260208190526040902054939650919450925016156121fe57604051631179c1f560e11b81526001600160a01b038416906322f383ea906121ae908c908c90600401613662565b6020604051808303816000875af11580156121cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f19190613518565b9650505050505050610d84565b5050505b505b600061225d856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506122ad612270610140880188613311565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525085939250506120c89050565b6032546001600160a01b039081169116146122ce5760019350505050610d84565b50600095945050505050565b50565b80156122da5760405133906000199083906000818181858888f193505050503d806000811461099c576040519150601f19603f3d011682016040523d82523d6000602084013e61099c565b6000600183600181111561233e5761233e61338e565b03612356576000808551602087018986f49050612366565b600080855160208701888a87f190505b80156123cb578360405161237a919061377b565b604051809103902085876001600160a01b03167f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee86866040516123be929190613797565b60405180910390a4612426565b836040516123d9919061377b565b604051809103902085876001600160a01b03167f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a868660405161241d929190613797565b60405180910390a45b95945050505050565b3330146120a8576040516301478e3360e21b81523360048201526024016109ed565b60008183116124605781610e24565b5090919050565b60008360000361248a5760405163653f35a360e01b815260040160405180910390fd5b60006001600160a01b038316156124a157826124a3565b325b90506001600160a01b038416612523573a86106124c0573a6124c2565b855b6124cc888a6134db565b6124d69190613501565b9150600080600080600086865af190508061251d5760405163190eecf360e31b8152600060048201526001600160a01b0383166024820152604481018490526064016109ed565b50612587565b848661252f898b6134db565b6125399190613501565b61254391906134b9565b9150612550848284612592565b6125875760405163190eecf360e31b81526001600160a01b03808616600483015282166024820152604481018390526064016109ed565b509695505050505050565b60006001600160a01b0384166125ea5760405162461bcd60e51b815260206004820152601d60248201527f746f6b656e2063616e206e6f74206265207a65726f206164647265737300000060448201526064016109ed565b6000846001600160a01b03163b116126445760405162461bcd60e51b815260206004820152601c60248201527f746f6b656e20636f6e747261637420646f65736e27742065786973740000000060448201526064016109ed565b604080516001600160a01b03851660248201526044808201859052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b178152825160009182896127105a03f13d80156126c657602081146126ce57600093506126d9565b8193506126d9565b600051158215171593505b5050509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561271a575060009050600361279e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561276e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127975760006001925092505061279e565b9150600090505b94509492505050565b6001600160a01b0381166127ce5760405163dd449f5f60e01b815260040160405180910390fd5b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d455565b600160009081526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d546001600160a01b0316156128455760405163df8cc4e360e01b815260040160405180910390fd5b600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556001600160a01b038216156120335761289f8260008360015a612328565b6120335760405163032e3a3960e51b815260040160405180910390fd5b60008082516041036128f25760208301516040840151606085015160001a6128e6878285856126e3565b945094505050506128fa565b506000905060025b9250929050565b60008160048111156129155761291561338e565b0361291d5750565b60018160048111156129315761293161338e565b0361297e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109ed565b60028160048111156129925761299261338e565b036129df5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109ed565b60038160048111156129f3576129f361338e565b036122da5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109ed565b6001600160a01b03811681146122da57600080fd5b8035612a6b81612a4b565b919050565b60008083601f840112612a8257600080fd5b50813567ffffffffffffffff811115612a9a57600080fd5b6020830191508360208285010111156128fa57600080fd5b60008060008060608587031215612ac857600080fd5b8435612ad381612a4b565b935060208501359250604085013567ffffffffffffffff811115612af657600080fd5b612b0287828801612a70565b95989497509550505050565b60008083601f840112612b2057600080fd5b50813567ffffffffffffffff811115612b3857600080fd5b6020830191508360208260051b85010111156128fa57600080fd5b60008060008060008060608789031215612b6c57600080fd5b863567ffffffffffffffff80821115612b8457600080fd5b612b908a838b01612b0e565b90985096506020890135915080821115612ba957600080fd5b612bb58a838b01612b0e565b90965094506040890135915080821115612bce57600080fd5b50612bdb89828a01612b0e565b979a9699509497509295939492505050565b6001600160e01b0319811681146122da57600080fd5b600060208284031215612c1557600080fd5b8135610e2481612bed565b600060208284031215612c3257600080fd5b8135610e2481612a4b565b600060208284031215612c4f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612c8f57612c8f612c56565b60405290565b600082601f830112612ca657600080fd5b813567ffffffffffffffff80821115612cc157612cc1612c56565b604051601f8301601f19908116603f01168101908282118183101715612ce957612ce9612c56565b81604052838152866020858801011115612d0257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612d3557600080fd5b82359150602083013567ffffffffffffffff811115612d5357600080fd5b612d5f85828601612c95565b9150509250929050565b600080600060608486031215612d7e57600080fd5b833567ffffffffffffffff811115612d9557600080fd5b84016101608187031215612da857600080fd5b95602085013595506040909401359392505050565b803560028110612a6b57600080fd5b60008060008060808587031215612de257600080fd5b8435612ded81612a4b565b935060208501359250604085013567ffffffffffffffff811115612e1057600080fd5b612e1c87828801612c95565b925050612e2b60608601612dbd565b905092959194509250565b60008060408385031215612e4957600080fd5b8235612e5481612a4b565b946020939093013593505050565b60005b83811015612e7d578181015183820152602001612e65565b50506000910152565b60008151808452612e9e816020860160208601612e62565b601f01601f19169290920160200192915050565b8215158152604060208201526000610f226040830184612e86565b600060a08284031215612edf57600080fd5b612ee7612c6c565b90508135612ef481612a4b565b8152612f0260208301612dbd565b602082015260408201356040820152606082013567ffffffffffffffff811115612f2b57600080fd5b612f3784828501612c95565b6060830152506080820135608082015292915050565b600060a08284031215612f5f57600080fd5b612f67612c6c565b90508135815260208201356020820152604082013560408201526060820135612f8f81612a4b565b60608201526080820135612fa281612a4b565b608082015292915050565b600080600060e08486031215612fc257600080fd5b833567ffffffffffffffff811115612fd957600080fd5b612fe586828701612ecd565b935050612ff58560208601612f4d565b915060c084013590509250925092565b602081526000610e246020830184612e86565b600080600060e0848603121561302d57600080fd5b833567ffffffffffffffff8082111561304557600080fd5b61305187838801612ecd565b94506130608760208801612f4d565b935060c086013591508082111561307657600080fd5b5061308386828701612c95565b9150509250925092565b60008060008060008060c087890312156130a657600080fd5b8635955060208701359450604087013593506060870135925060808701356130cd81612a4b565b915060a08701356130dd81612a4b565b809150509295509295509295565b6000806000806000806000806000806000806101608d8f03121561310e57600080fd5b6131188d35612a4b565b8c359b5060208d01359a5067ffffffffffffffff60408e0135111561313c57600080fd5b61314c8e60408f01358f01612a70565b909a50985061315d60608e01612dbd565b975060808d0135965060a08d0135955060c08d0135945060e08d013593506101008d013561318a81612a4b565b92506131996101208e01612a60565b91506101408d013590509295989b509295989b509295989b565b6000806000606084860312156131c857600080fd5b83356131d381612a4b565b925060208401356131e381612a4b565b929592945050506040919091013590565b60008060008060006080868803121561320c57600080fd5b853561321781612a4b565b945060208601359350604086013567ffffffffffffffff81111561323a57600080fd5b61324688828901612a70565b9094509250613259905060608701612dbd565b90509295509295909350565b604080825283519082018190526000906020906060840190828701845b828110156132a75781516001600160a01b031684529284019290840190600101613282565b5050506001600160a01b039490941692019190915250919050565b600080604083850312156132d557600080fd5b82356132e081612a4b565b915060208301356132f081612a4b565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261332857600080fd5b83018035915067ffffffffffffffff82111561334357600080fd5b6020019150368190038213156128fa57600080fd5b828152604060208201526000610f226040830184612e86565b60006020828403121561338357600080fd5b8151610e2481612bed565b634e487b7160e01b600052602160045260246000fd5b600281106133c257634e487b7160e01b600052602160045260246000fd5b9052565b60006001600160a01b03808816835280871660208401525084604083015260a060608301526133f860a0830185612e86565b905061340760808301846133a4565b9695505050505050565b6000610180820190508d82526001600160a01b03808e1660208401528c60408401528b6060840152613446608084018c6133a4565b8960a08401528860c08401528760e08401528661010084015280861661012084015280851661014084015250826101608301529d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016134b2576134b261348a565b5060010190565b6000826134d657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d8457610d8461348a565b81810381811115610d8457610d8461348a565b8082028115828204841417610d8457610d8461348a565b60006020828403121561352a57600080fd5b5051919050565b60ff8281168282160390811115610d8457610d8461348a565b6000808585111561355a57600080fd5b8386111561356757600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561359c5780818660040360031b1b83161692505b505092915050565b6000806000606084860312156135b957600080fd5b83356135c481612a4b565b925060208401359150604084013567ffffffffffffffff8111156135e757600080fd5b61308386828701612c95565b6000808335601e1984360301811261360a57600080fd5b830160208101925035905067ffffffffffffffff81111561362a57600080fd5b8036038213156128fa57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526136836040820161367685612a60565b6001600160a01b03169052565b60208301356060820152600061369c60408501856135f3565b6101608060808601526136b46101a086018385613639565b92506136c360608801886135f3565b9250603f19808786030160a08801526136dd858584613639565b9450608089013560c088015260a089013560e0880152610100935060c089013584880152610120915060e089013582880152610140848a013581890152613726838b018b6135f3565b9550925081888703018489015261373e868685613639565b955061374c818b018b6135f3565b955093505080878603016101808801525050613769838383613639565b93505050508260208301529392505050565b6000825161378d818460208701612e62565b9190910192915050565b604081016137a582856133a4565b826020830152939250505056fea26469706673582212206d38de10695d463253620f7bec76e681851e44f22392d864735b57ecaf843b1d64736f6c63430008110033"; - -type SmartAccount_v100ConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: SmartAccount_v100ConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class SmartAccount_v100__factory extends ContractFactory { - constructor(...args: SmartAccount_v100ConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - anEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy( - anEntryPoint, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - anEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(anEntryPoint, overrides || {}); - } - override attach(address: string): SmartAccount_v100 { - return super.attach(address) as SmartAccount_v100; - } - override connect(signer: Signer): SmartAccount_v100__factory { - return super.connect(signer) as SmartAccount_v100__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): SmartAccount_v100Interface { - return new utils.Interface(_abi) as SmartAccount_v100Interface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): SmartAccount_v100 { - return new Contract(address, _abi, signerOrProvider) as SmartAccount_v100; - } -} diff --git a/packages/common/src/typechain/factories/biconomy_v1.0.0/index.ts b/packages/common/src/typechain/factories/biconomy_v1.0.0/index.ts deleted file mode 100644 index 452aa3c24..000000000 --- a/packages/common/src/typechain/factories/biconomy_v1.0.0/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { SmartAccountFactory_v100__factory } from "./SmartAccountFactory_v100__factory"; -export { SmartAccount_v100__factory } from "./SmartAccount_v100__factory"; diff --git a/packages/common/src/typechain/factories/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100__factory.ts b/packages/common/src/typechain/factories/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100__factory.ts deleted file mode 100644 index 6907be67a..000000000 --- a/packages/common/src/typechain/factories/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100__factory.ts +++ /dev/null @@ -1,357 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../common"; -import type { - ECDSAOwnershipRegistryModule_v100, - ECDSAOwnershipRegistryModule_v100Interface, -} from "../../biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "smartAccount", - type: "address", - }, - ], - name: "AlreadyInitedForSmartAccount", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "smartAccount", - type: "address", - }, - ], - name: "NoOwnerRegisteredForSmartAccount", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "NotEOA", - type: "error", - }, - { - inputs: [], - name: "WrongSignatureLength", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressNotAllowedAsOwner", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "smartAccount", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "NAME", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "VERSION", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "smartAccount", - type: "address", - }, - ], - name: "getOwner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "eoaOwner", - type: "address", - }, - ], - name: "initForSmartAccount", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "dataHash", - type: "bytes32", - }, - { - internalType: "bytes", - name: "moduleSignature", - type: "bytes", - }, - ], - name: "isValidSignature", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "dataHash", - type: "bytes32", - }, - { - internalType: "bytes", - name: "moduleSignature", - type: "bytes", - }, - { - internalType: "address", - name: "smartAccount", - type: "address", - }, - ], - name: "isValidSignatureForAddress", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - ], - name: "validateUserOp", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -] as const; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610aed806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063f2fde38b11610076578063fa5441611161005b578063fa54416114610195578063ffa1ad74146101a8578063fff35b72146101e457600080fd5b8063f2fde38b1461016f578063f44c339d1461018257600080fd5b80631626ba7e146100a85780632ede3bc0146100f1578063715018a61461011c578063a3f4df7e14610126575b600080fd5b6100bb6100b636600461089b565b610205565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b6101046100ff3660046108f7565b61021b565b6040516001600160a01b0390911681526020016100e8565b6101246102bf565b005b6101626040518060400160405280601f81526020017f4543445341204f776e657273686970205265676973747279204d6f64756c650081525081565b6040516100e89190610914565b61012461017d3660046108f7565b6102cc565b6100bb610190366004610962565b61032b565b6101046101a33660046108f7565b610375565b6101626040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6101f76101f23660046109bd565b6103bb565b6040519081526020016100e8565b600061021283833361032b565b90505b92915050565b336000908152602081905260408120546001600160a01b03161561025957604051632c4dfb7d60e21b81523360048201526024015b60405180910390fd5b6001600160a01b038216610280576040516307e179e960e31b815260040160405180910390fd5b50336000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790553090565b6102ca33600061040c565b565b803b156102f7576040516377817ac360e01b81526001600160a01b0382166004820152602401610250565b6001600160a01b03811661031e576040516307e179e960e31b815260040160405180910390fd5b610328338261040c565b50565b600061033884848461047d565b1561034b5750630b135d3f60e11b61036e565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b6001600160a01b038082166000908152602081905260408120549091168061021557604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6000806103cc610140850185610a08565b8101906103d99190610a4f565b5090506103f383826103ee60208801886108f7565b61047d565b15610402576000915050610215565b5060019392505050565b6001600160a01b03808316600081815260208190526040808220805486861673ffffffffffffffffffffffffffffffffffffffff19821681179092559151919094169392849290917fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec9190a4505050565b6001600160a01b03808216600090815260208190526040812054909116806104c357604051633d3fff5360e21b81526001600160a01b0384166004820152602401610250565b6041845110156104e657604051632bb1a9c560e11b815260040160405180910390fd5b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c869052603c812061051f9086610581565b9050806001600160a01b0316826001600160a01b0316036105455760019250505061036e565b61054f8686610581565b9050806001600160a01b0316826001600160a01b0316036105755760019250505061036e565b50600095945050505050565b600080600061059085856105a5565b9150915061059d816105ea565b509392505050565b60008082516041036105db5760208301516040840151606085015160001a6105cf87828585610734565b945094505050506105e3565b506000905060025b9250929050565b60008160048111156105fe576105fe610aa1565b036106065750565b600181600481111561061a5761061a610aa1565b036106675760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610250565b600281600481111561067b5761067b610aa1565b036106c85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610250565b60038160048111156106dc576106dc610aa1565b036103285760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610250565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561076b57506000905060036107ef565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156107bf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166107e8576000600192509250506107ef565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261081f57600080fd5b813567ffffffffffffffff8082111561083a5761083a6107f8565b604051601f8301601f19908116603f01168101908282118183101715610862576108626107f8565b8160405283815286602085880101111561087b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156108ae57600080fd5b82359150602083013567ffffffffffffffff8111156108cc57600080fd5b6108d88582860161080e565b9150509250929050565b6001600160a01b038116811461032857600080fd5b60006020828403121561090957600080fd5b813561036e816108e2565b600060208083528351808285015260005b8181101561094157858101830151858201604001528201610925565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060006060848603121561097757600080fd5b83359250602084013567ffffffffffffffff81111561099557600080fd5b6109a18682870161080e565b92505060408401356109b2816108e2565b809150509250925092565b600080604083850312156109d057600080fd5b823567ffffffffffffffff8111156109e757600080fd5b830161016081860312156109fa57600080fd5b946020939093013593505050565b6000808335601e19843603018112610a1f57600080fd5b83018035915067ffffffffffffffff821115610a3a57600080fd5b6020019150368190038213156105e357600080fd5b60008060408385031215610a6257600080fd5b823567ffffffffffffffff811115610a7957600080fd5b610a858582860161080e565b9250506020830135610a96816108e2565b809150509250929050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212200f64d9f85c9789441febe939ee2ec56eca850156ea304b5eabd0856fee5e186e64736f6c63430008110033"; - -type ECDSAOwnershipRegistryModule_v100ConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: ECDSAOwnershipRegistryModule_v100ConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class ECDSAOwnershipRegistryModule_v100__factory extends ContractFactory { - constructor(...args: ECDSAOwnershipRegistryModule_v100ConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy( - overrides || {} - ) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): ECDSAOwnershipRegistryModule_v100 { - return super.attach(address) as ECDSAOwnershipRegistryModule_v100; - } - override connect(signer: Signer): ECDSAOwnershipRegistryModule_v100__factory { - return super.connect(signer) as ECDSAOwnershipRegistryModule_v100__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): ECDSAOwnershipRegistryModule_v100Interface { - return new utils.Interface( - _abi - ) as ECDSAOwnershipRegistryModule_v100Interface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ECDSAOwnershipRegistryModule_v100 { - return new Contract( - address, - _abi, - signerOrProvider - ) as ECDSAOwnershipRegistryModule_v100; - } -} diff --git a/packages/common/src/typechain/factories/biconomy_v2.0.0/MultiChainValidationModule_v100__factory.ts b/packages/common/src/typechain/factories/biconomy_v2.0.0/MultiChainValidationModule_v100__factory.ts deleted file mode 100644 index 3ad68a878..000000000 --- a/packages/common/src/typechain/factories/biconomy_v2.0.0/MultiChainValidationModule_v100__factory.ts +++ /dev/null @@ -1,357 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../common"; -import type { - MultiChainValidationModule_v100, - MultiChainValidationModule_v100Interface, -} from "../../biconomy_v2.0.0/MultiChainValidationModule_v100"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "smartAccount", - type: "address", - }, - ], - name: "AlreadyInitedForSmartAccount", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "smartAccount", - type: "address", - }, - ], - name: "NoOwnerRegisteredForSmartAccount", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "NotEOA", - type: "error", - }, - { - inputs: [], - name: "WrongSignatureLength", - type: "error", - }, - { - inputs: [], - name: "ZeroAddressNotAllowedAsOwner", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "smartAccount", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "NAME", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "VERSION", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "smartAccount", - type: "address", - }, - ], - name: "getOwner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "eoaOwner", - type: "address", - }, - ], - name: "initForSmartAccount", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "dataHash", - type: "bytes32", - }, - { - internalType: "bytes", - name: "moduleSignature", - type: "bytes", - }, - ], - name: "isValidSignature", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "dataHash", - type: "bytes32", - }, - { - internalType: "bytes", - name: "moduleSignature", - type: "bytes", - }, - { - internalType: "address", - name: "smartAccount", - type: "address", - }, - ], - name: "isValidSignatureForAddress", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - ], - name: "validateUserOp", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -] as const; - -const _bytecode = - "0x6080806040523461001657610b9b908161001c8239f35b600080fdfe6040608081526004908136101561001557600080fd5b6000803560e01c80631626ba7e1461040a5780632ede3bc014610388578063715018a614610318578063a3f4df7e146102c3578063f2fde38b1461020d578063f44c339d14610185578063fa5441611461012d578063ffa1ad74146100d45763fff35b721461008357600080fd5b346100cd576003199082823601126100cd5783359167ffffffffffffffff83116100d0576101609083360301126100cd57506020926100c691602435910161085d565b9051908152f35b80fd5b5080fd5b5090346100d057816003193601126100d0578051610129916100f58261044a565b600582527f302e322e300000000000000000000000000000000000000000000000000000006020830152519182918261053f565b0390f35b5082346100d05760203660031901126100d0576001600160a01b038381610152610506565b16938481528060205220541691821561016f576020838551908152f35b8351633d3fff5360e21b81529182015260249150fd5b5091346102095760603660031901126102095760243567ffffffffffffffff8111610205576101b790369083016104ba565b90604435936001600160a01b03851685036100cd5750926101db916020943561056b565b90517fffffffff000000000000000000000000000000000000000000000000000000009091168152f35b8380fd5b8280fd5b5091903461020957602036600319011261020957610229610506565b803b6102a4576001600160a01b0380911692831561029657503384528360205281842054169083208273ffffffffffffffffffffffffffffffffffffffff19825416179055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8480a480f35b82516307e179e960e31b8152fd5b826001600160a01b0360249351926377817ac360e01b84521690820152fd5b5090346100d057816003193601126100d0578051610129916102e48261044a565b601f82527f4543445341204f776e657273686970205265676973747279204d6f64756c65006020830152519182918261053f565b50809134610385578160031936011261038557338252816020526001600160a01b03818320541690822073ffffffffffffffffffffffffffffffffffffffff198154169055337fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8380a480f35b50fd5b509134610209576020366003190112610209576103a3610506565b338452836020526001600160a01b03908184862054166103f45716908115610296575081602093338152808552209073ffffffffffffffffffffffffffffffffffffffff1982541617905551308152f35b8351632c4dfb7d60e21b81523381850152602490fd5b50346100cd57816003193601126100cd576024359067ffffffffffffffff82116100cd57506020926104426101db92369083016104ba565b33913561056b565b6040810190811067ffffffffffffffff82111761046657604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761046657604052565b67ffffffffffffffff811161046657601f01601f191660200190565b81601f82011215610501578035906104d18261049e565b926104df604051948561047c565b8284526020838301011161050157816000926020809301838601378301015290565b600080fd5b600435906001600160a01b038216820361050157565b60005b83811061052f5750506000910152565b818101518382015260200161051f565b6040916020825261055f815180928160208601526020868601910161051c565b601f01601f1916010190565b9061057692916105a9565b61059e577fffffffff0000000000000000000000000000000000000000000000000000000090565b630b135d3f60e11b90565b916001600160a01b0380911691600093838552846020528260408620541693841561065757506041825110610645577f19457468657265756d205369676e6564204d6573736167653a0a333200000000855280601c528261061861061084603c8920610789565b91909161066f565b16841461063b5761062c9161061091610789565b16146106355790565b50600190565b5050505050600190565b604051632bb1a9c560e11b8152600490fd5b60249060405190633d3fff5360e21b82526004820152fd5b600581101561077357806106805750565b600181036106cd5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b6002810361071a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b60031461072357565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b634e487b7160e01b600052602160045260246000fd5b9060418151146000146107b7576107b3916020820151906060604084015193015160001a906107c1565b9091565b5050600090600290565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831161083e5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156108315781516001600160a01b03811615610635579190565b50604051903d90823e3d90fd5b50505050600090600390565b519065ffffffffffff8216820361050157565b919091610140810135601e19823603018112156105015781019182359267ffffffffffffffff9081851161050157602092838201958036038713610501578201604096878483031261050157359084821161050157879186806108c49301918601016104ba565b920135946001600160a01b0395868116036105015735966041835114610b43578251830160a0848783019203126105015761090086850161084a565b9061090c89860161084a565b9060608601519160808701518881116105015787019782603f8a011215610501578989015197818911610466578a998d9960059a818c1b9161095482519e8f9085019061047c565b8d528d8d019183010191868311610501578f8e9101915b838310610b33575050505060a081015190828211610501570183603f8201121561050157808b01518d9461099e8261049e565b956109ab8151978861047c565b8287528284010111610501576109c6918e8d8701910161051c565b8b51908a8201927fffffffffffff000000000000000000000000000000000000000000000000000090818860d01b16855260d01b1696876026840152602c830152602c8252606082019082821090821117610466578c52519020986000995b88518b1015610a84578a881b89018a0151908c600083831015610a7757505060005289528a6000205b996000198114610a615760010199610a25565b634e487b7160e01b600052601160045260246000fd5b91909282528b5220610a4e565b91965094999a93985081965096919603610af05750610aa8949596975016916105a9565b15610ae95779ffffffffffff00000000000000000000000000000000000000009065ffffffffffff90818116610ae257505b60a01b161790565b9050610ada565b5050600190565b60649089519062461bcd60e51b82526004820152600e60248201527f496e76616c696420557365724f700000000000000000000000000000000000006044820152fd5b82518152918101918e910161096b565b94925095909250610b56945016916105a9565b15610b6057600090565b60019056fea26469706673582212202a3242d73a2c92fd929c32924b5f964b80434c765985e101142ea4635452e6a664736f6c63430008110033"; - -type MultiChainValidationModule_v100ConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: MultiChainValidationModule_v100ConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class MultiChainValidationModule_v100__factory extends ContractFactory { - constructor(...args: MultiChainValidationModule_v100ConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy( - overrides || {} - ) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): MultiChainValidationModule_v100 { - return super.attach(address) as MultiChainValidationModule_v100; - } - override connect(signer: Signer): MultiChainValidationModule_v100__factory { - return super.connect(signer) as MultiChainValidationModule_v100__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): MultiChainValidationModule_v100Interface { - return new utils.Interface( - _abi - ) as MultiChainValidationModule_v100Interface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): MultiChainValidationModule_v100 { - return new Contract( - address, - _abi, - signerOrProvider - ) as MultiChainValidationModule_v100; - } -} diff --git a/packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccountFactory_v200__factory.ts b/packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccountFactory_v200__factory.ts deleted file mode 100644 index 23f1963a4..000000000 --- a/packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccountFactory_v200__factory.ts +++ /dev/null @@ -1,361 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../common"; -import type { - SmartAccountFactory_v200, - SmartAccountFactory_v200Interface, -} from "../../biconomy_v2.0.0/SmartAccountFactory_v200"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_basicImplementation", - type: "address", - }, - { - internalType: "address", - name: "_newOwner", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "initialAuthModule", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - ], - name: "AccountCreation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "initialAuthModule", - type: "address", - }, - ], - name: "AccountCreationWithoutIndex", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - inputs: [], - name: "accountCreationCode", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "epAddress", - type: "address", - }, - { - internalType: "uint32", - name: "unstakeDelaySec", - type: "uint32", - }, - ], - name: "addStake", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "basicImplementation", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "moduleSetupContract", - type: "address", - }, - { - internalType: "bytes", - name: "moduleSetupData", - type: "bytes", - }, - ], - name: "deployAccount", - outputs: [ - { - internalType: "address", - name: "proxy", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "moduleSetupContract", - type: "address", - }, - { - internalType: "bytes", - name: "moduleSetupData", - type: "bytes", - }, - { - internalType: "uint256", - name: "index", - type: "uint256", - }, - ], - name: "deployCounterFactualAccount", - outputs: [ - { - internalType: "address", - name: "proxy", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "moduleSetupContract", - type: "address", - }, - { - internalType: "bytes", - name: "moduleSetupData", - type: "bytes", - }, - { - internalType: "uint256", - name: "index", - type: "uint256", - }, - ], - name: "getAddressForCounterFactualAccount", - outputs: [ - { - internalType: "address", - name: "_account", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "minimalHandler", - outputs: [ - { - internalType: "contract DefaultCallbackHandler", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "epAddress", - type: "address", - }, - ], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "epAddress", - type: "address", - }, - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - ], - name: "withdrawStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -] as const; - -const _bytecode = - "0x60c0346101445761171b906001600160401b0390601f38849003908101601f1916820190838211838310176100ea57808391604096879485528339810103126101445761006861005a602061005384610149565b9301610149565b6100633361015d565b61015d565b6001600160a01b03811615610100576080528151906104e690818301908111838210176100ea578291611235833903906000f080156100df5760a0525161109090816101a582396080518181816101ed015281816105a70152818161074601526107ef015260a05181818161039e0152610b7c0152f35b50513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b825162461bcd60e51b815260206004820152601d60248201527f696d706c656d656e746174696f6e2063616e6e6f74206265207a65726f0000006044820152606490fd5b600080fd5b51906001600160a01b038216820361014457565b600080546001600160a01b039283166001600160a01b03198216811783559216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fe60806040526004361015610013575b600080fd5b60003560e01c80632e7a1a831461010357806331c884df146100fa5780633b3cb143146100f157806345171159146100e85780634a1ce599146100df578063715018a6146100d6578063743b1e03146100cd5780638da5cb5b146100c4578063b36f9705146100bb578063daf0dfc8146100b2578063df20ffbc146100a95763f2fde38b146100a157600080fd5b61000e6108a6565b5061000e61076a565b5061000e610725565b5061000e6106a1565b5061000e610679565b5061000e610533565b5061000e6104cb565b5061000e61045f565b5061000e6103c2565b5061000e61037d565b5061000e61031d565b5061000e61018c565b6001600160a01b0381160361000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020838186019501011161000e57565b90606060031983011261000e576004356101648161010c565b916024359067ffffffffffffffff821161000e576101849160040161011d565b909160443590565b503461000e576102f66102dc6102d06101b16101a73661014b565b9392919091610b54565b6102c1610120916020926101c6848201610a8e565b90808252610bdb858301396040519461024a61025687610214888201956001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087610a9e565b0394610228601f19968781018b528a610a5f565b8781519101209260405192839189830195869091604092825260208201520190565b03858101835282610a5f565b519020945190206040517fff000000000000000000000000000000000000000000000000000000000000009481019485523060601b6bffffffffffffffffffffffff191660018601526015850195909552603584015291929182605585015b03908101835282610a5f565b5190206001600160a01b031690565b6001600160a01b031690565b6040516001600160a01b0390911681529081906020820190565b0390f35b60005b83811061030d5750506000910152565b81810151838201526020016102fd565b503461000e57600036600319011261000e5761036f60406101208151906103476020820183610a5f565b8082526020820190610cfb8239825193849260208452518092816020860152858501906102fa565b601f01601f19168101030190f35b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b506000604036600319011261045c576004356103dd8161010c565b816024359163ffffffff8316809303610458576001600160a01b0390610401610991565b169161040e8315156109e9565b823b1561045857602460405180948193621cb65b60e51b8352600483015234905af1801561044b575b61043f575080f35b61044890610a35565b80f35b610453610a81565b610437565b5080fd5b80fd5b503461000e576000602036600319011261045c57806001600160a01b036004356104888161010c565b610490610991565b1661049c8115156109e9565b803b156104c857819060046040518094819363bb9fe6bf60e01b83525af1801561044b5761043f575080f35b50fd5b503461000e5760008060031936011261045c576104e6610991565b806001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461000e57604036600319011261000e576004356105518161010c565b60243567ffffffffffffffff811161000e5761057190369060040161011d565b6101209161058160208401610a8e565b92808452610e1b60208501396105fe604051926105df846105d16001600160a01b0397887f0000000000000000000000000000000000000000000000000000000000000000169060208401610a9e565b03601f198101865285610a5f565b835160009460200185f092858416966105f9881515610b08565b610b54565b805183918161064c575b50506040519485946102f69416917f9a6cbf173278cf7dfadb45414d824f7828c0c94479f1b15e45453653070cf6579080a36001600160a01b031682526020820190565b8296945090602083920182855af193604051943d82873e1561067557935191936102f638610608565b3d85fd5b503461000e57600036600319011261000e5760206001600160a01b0360005416604051908152f35b503461000e576000604036600319011261045c576004356106c18161010c565b81602435916106cf8361010c565b6106d7610991565b6001600160a01b03809116926106ee8415156109e9565b833b156107215760249083604051958694859363611d2e7560e11b85521660048401525af1801561044b5761043f575080f35b8280fd5b503461000e57600036600319011261000e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461000e5761077c6101a73661014b565b9081519160208082019384209260405193846107a78385830193849091604092825260208201520190565b03946107bb601f1996878101835282610a5f565b519020610120946107cd848701610a8e565b95808752610f3b8588013961081860405191826102b56001600160a01b03998a7f00000000000000000000000000000000000000000000000000000000000000001690898401610a9e565b8051906000940184f591848316610830811515610abc565b8194518061087d575b50604051965086956102f69516917f8967dcaa00d8fcb9bb2b5beff4aaf8c020063512cf08fbe11fec37a1e3a150f29080a46001600160a01b031682526020820190565b82978380939750865af194604051953d82883e156108a2579451939485949338610839565b3d86fd5b503461000e57602036600319011261000e576004356108c48161010c565b6108cc610991565b6001600160a01b0380911680156109265760009182548273ffffffffffffffffffffffffffffffffffffffff198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608490fd5b6001600160a01b036000541633036109a557565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156109f057565b60405162461bcd60e51b815260206004820152601260248201527f496e76616c6964204550206164647265737300000000000000000000000000006044820152606490fd5b67ffffffffffffffff8111610a4957604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a4957604052565b506040513d6000823e3d90fd5b90610a9c6040519283610a5f565b565b6020929190610ab48492828151948592016102fa565b019081520190565b15610ac357565b60405162461bcd60e51b815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606490fd5b15610b0f57565b60405162461bcd60e51b815260206004820152601260248201527f4372656174652063616c6c206661696c656400000000000000000000000000006044820152606490fd5b60a490610bd7929380604051958693631bc6fec760e11b60208601526001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016602487015216604485015260606064850152816084850152848401376000838284010152601f80199101168101036084810184520182610a5f565b9056fe6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c634300081100336080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033a2646970667358221220cc3855215776915d9c3562b4380fe9fbf7afb53b9434cabc4802d531f12df64364736f6c6343000811003360808060405234610016576104ca908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816223de291461031b57816301ffc9a71461029457508063150b7a021461023d578063a3f4df7e146101d6578063bc197c811461014c578063f23a6e61146100f25763ffa1ad741461007157600080fd5b346100ee57816003193601126100ee578051918183019083821067ffffffffffffffff8311176100db57506100d793508152600582527f312e302e300000000000000000000000000000000000000000000000000000006020830152519182918261041a565b0390f35b634e487b7160e01b815260418552602490fd5b5080fd5b5090346101495760a03660031901126101495761010d6103a1565b506101166103c9565b506084359067ffffffffffffffff8211610149575060209261013a913691016103ec565b50505163f23a6e6160e01b8152f35b80fd5b5090346101495760a0366003190112610149576101676103a1565b506101706103c9565b5067ffffffffffffffff906044358281116100ee576101929036908601610463565b50506064358281116100ee576101ab9036908601610463565b505060843591821161014957506020926101c7913691016103ec565b50505163bc197c8160e01b8152f35b50346100ee57816003193601126100ee578051918183019083821067ffffffffffffffff8311176100db57506100d793508152601882527f44656661756c742043616c6c6261636b2048616e646c657200000000000000006020830152519182918261041a565b509034610149576080366003190112610149576102586103a1565b506102616103c9565b506064359067ffffffffffffffff82116101495750602092610285913691016103ec565b505051630a85bd0160e11b8152f35b83908534610317576020366003190112610317573563ffffffff60e01b81168091036103175760209250630271189760e51b8114908115610306575b81156102f6575b81156102e5575b5015158152f35b6301ffc9a760e01b149050836102de565b6223de2960e01b811491506102d7565b630a85bd0160e11b811491506102d0565b8280fd5b8385346100ee5760c03660031901126100ee576103366103a1565b5061033f6103c9565b5060443573ffffffffffffffffffffffffffffffffffffffff8116036100ee5767ffffffffffffffff9060843582811161039d5761038090369083016103ec565b505060a43591821161031757610398913691016103ec565b505080f35b8380fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103c457565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103c457565b9181601f840112156103c45782359167ffffffffffffffff83116103c457602083818601950101116103c457565b6020808252825181830181905290939260005b82811061044f57505060409293506000838284010152601f8019910116010190565b81810186015184820160400152850161042d565b9181601f840112156103c45782359167ffffffffffffffff83116103c4576020808501948460051b0101116103c45756fea2646970667358221220e22ad453b03efac358b2f092a996c1bf999c6cba4b1e5c7d1e917139d697fca764736f6c63430008110033"; - -type SmartAccountFactory_v200ConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: SmartAccountFactory_v200ConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class SmartAccountFactory_v200__factory extends ContractFactory { - constructor(...args: SmartAccountFactory_v200ConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _basicImplementation: PromiseOrValue, - _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy( - _basicImplementation, - _newOwner, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _basicImplementation: PromiseOrValue, - _newOwner: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction( - _basicImplementation, - _newOwner, - overrides || {} - ); - } - override attach(address: string): SmartAccountFactory_v200 { - return super.attach(address) as SmartAccountFactory_v200; - } - override connect(signer: Signer): SmartAccountFactory_v200__factory { - return super.connect(signer) as SmartAccountFactory_v200__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): SmartAccountFactory_v200Interface { - return new utils.Interface(_abi) as SmartAccountFactory_v200Interface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): SmartAccountFactory_v200 { - return new Contract( - address, - _abi, - signerOrProvider - ) as SmartAccountFactory_v200; - } -} diff --git a/packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccount_v200__factory.ts b/packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccount_v200__factory.ts deleted file mode 100644 index b2dbacd00..000000000 --- a/packages/common/src/typechain/factories/biconomy_v2.0.0/SmartAccount_v200__factory.ts +++ /dev/null @@ -1,1239 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../common"; -import type { - SmartAccount_v200, - SmartAccount_v200Interface, -} from "../../biconomy_v2.0.0/SmartAccount_v200"; - -const _abi = [ - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "anEntryPoint", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "BaseImplementationCannotBeZero", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotAnEntryPoint", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotEntryPoint", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotEntryPointOrOwner", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotEntryPointOrSelf", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotOwner", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotSelf", - type: "error", - }, - { - inputs: [], - name: "DelegateCallsOnly", - type: "error", - }, - { - inputs: [], - name: "EntryPointCannotBeZero", - type: "error", - }, - { - inputs: [], - name: "HandlerCannotBeZero", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementationAddress", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "MixedAuthFail", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ModuleAlreadyEnabled", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "expectedModule", - type: "address", - }, - { - internalType: "address", - name: "returnedModule", - type: "address", - }, - { - internalType: "address", - name: "prevModule", - type: "address", - }, - ], - name: "ModuleAndPrevModuleMismatch", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ModuleCannotBeZeroOrSentinel", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ModuleNotEnabled", - type: "error", - }, - { - inputs: [], - name: "ModulesAlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "ModulesSetupExecutionFailed", - type: "error", - }, - { - inputs: [], - name: "OwnerCanNotBeSelf", - type: "error", - }, - { - inputs: [], - name: "OwnerCannotBeZero", - type: "error", - }, - { - inputs: [], - name: "OwnerProvidedIsSame", - type: "error", - }, - { - inputs: [], - name: "TransferToZeroAddressAttempt", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "destLength", - type: "uint256", - }, - { - internalType: "uint256", - name: "valueLength", - type: "uint256", - }, - { - internalType: "uint256", - name: "funcLength", - type: "uint256", - }, - { - internalType: "uint256", - name: "operationLength", - type: "uint256", - }, - ], - name: "WrongBatchProvided", - type: "error", - }, - { - inputs: [ - { - internalType: "bytes", - name: "contractSignature", - type: "bytes", - }, - ], - name: "WrongContractSignature", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "uintS", - type: "uint256", - }, - { - internalType: "uint256", - name: "contractSignatureLength", - type: "uint256", - }, - { - internalType: "uint256", - name: "signatureLength", - type: "uint256", - }, - ], - name: "WrongContractSignatureFormat", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "moduleAddressProvided", - type: "address", - }, - ], - name: "WrongValidationModule", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousHandler", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "handler", - type: "address", - }, - ], - name: "ChangedFallbackHandler", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "DisabledModule", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "EnabledModule", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: true, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "txGas", - type: "uint256", - }, - ], - name: "ExecutionFailure", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ExecutionFromModuleFailure", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ExecutionFromModuleSuccess", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: true, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "txGas", - type: "uint256", - }, - ], - name: "ExecutionSuccess", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldImplementation", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "ImplementationUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "module", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - ], - name: "ModuleTransaction", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "SmartAccountReceivedNativeToken", - type: "event", - }, - { - stateMutability: "nonpayable", - type: "fallback", - }, - { - inputs: [], - name: "VERSION", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "addDeposit", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "prevModule", - type: "address", - }, - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "disableModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "enableModule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "entryPoint", - outputs: [ - { - internalType: "contract IEntryPoint", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "to", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "value", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "data", - type: "bytes[]", - }, - { - internalType: "enum Enum.Operation[]", - name: "operations", - type: "uint8[]", - }, - ], - name: "execBatchTransactionFromModule", - outputs: [ - { - internalType: "bool", - name: "success", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - { - internalType: "uint256", - name: "txGas", - type: "uint256", - }, - ], - name: "execTransactionFromModule", - outputs: [ - { - internalType: "bool", - name: "success", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - ], - name: "execTransactionFromModule", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - ], - name: "execTransactionFromModuleReturnData", - outputs: [ - { - internalType: "bool", - name: "success", - type: "bool", - }, - { - internalType: "bytes", - name: "returnData", - type: "bytes", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "dest", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "func", - type: "bytes", - }, - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "value", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]", - }, - ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "value", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]", - }, - ], - name: "executeBatch_y6U", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "dest", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "func", - type: "bytes", - }, - ], - name: "execute_ncC", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getDeposit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getFallbackHandler", - outputs: [ - { - internalType: "address", - name: "_handler", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getImplementation", - outputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "start", - type: "address", - }, - { - internalType: "uint256", - name: "pageSize", - type: "uint256", - }, - ], - name: "getModulesPaginated", - outputs: [ - { - internalType: "address[]", - name: "array", - type: "address[]", - }, - { - internalType: "address", - name: "next", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "handler", - type: "address", - }, - { - internalType: "address", - name: "moduleSetupContract", - type: "address", - }, - { - internalType: "bytes", - name: "moduleSetupData", - type: "bytes", - }, - ], - name: "init", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "isModuleEnabled", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "dataHash", - type: "bytes32", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - name: "isValidSignature", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint192", - name: "_key", - type: "uint192", - }, - ], - name: "nonce", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "noncesDeprecated", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ownerDeprecated", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "handler", - type: "address", - }, - ], - name: "setFallbackHandler", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "setupContract", - type: "address", - }, - { - internalType: "bytes", - name: "setupData", - type: "bytes", - }, - ], - name: "setupAndEnableModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "_interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - ], - name: "updateImplementation", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "missingAccountFunds", - type: "uint256", - }, - ], - name: "validateUserOp", - outputs: [ - { - internalType: "uint256", - name: "validationData", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "withdrawDepositTo", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -] as const; - -const _bytecode = - "0x60c0346100fc57601f61213e38819003918201601f19168301916001600160401b03831184841017610101578084926020946040528339810103126100fc57516001600160a01b0381168082036100fc573060a052156100ea57608052600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03191690911790556040516120269081610118823960805181818161096f01528181610b6201528181610c0301528181610f2101528181610f740152818161119e0152818161193b0152611996015260a051816114dd0152f35b60405163091748f960e21b8152600490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040526004361015610030575b36156100285734610023576100216119d6565b005b600080fd5b6100216114d3565b60003560e01c8061189a146101b357806146801461021657806301ffc9a71461025e578063025b22bc146102555780631626ba7e1461024c57806321632045146102435780632d9ad53d1461023a578063378dfd8e146102315780633a871cdd14610228578063468721a71461021f57806347e1da2a146102165780634a58db191461020d5780634d44560d146102045780635229073f146101fb5780635305dd27146101f2578063610b5925146101e95780636424e9fe146101e0578063856dfd99146101d7578063aaf10f42146101ce578063acfdf503146101c5578063b0d691fe146101bc578063b61d27f6146101b3578063c399ec88146101aa578063cc2f8452146101a1578063d86f2b3c14610198578063e009cfde1461018f578063f08a032314610186578063f33623b11461017d5763ffa1ad740361000e57610178611439565b61000e565b5061017861140c565b506101786113de565b5061017861120c565b5061017861113a565b50610178611038565b50610178610f45565b506101786102b3565b50610178610f00565b50610178610e5d565b50610178610e36565b50610178610def565b50610178610dc7565b50610178610d99565b50610178610d2d565b50610178610cab565b50610178610bd4565b50610178610b4a565b50610178610342565b50610178610afc565b50610178610929565b506101786107c8565b5061017861076a565b506101786106ab565b5061017861064f565b5061017861049d565b50610178610461565b6001600160a01b0381160361002357565b359061028382610267565b565b9181601f840112156100235782359167ffffffffffffffff8311610023576020838186019501011161002357565b5034610023576060366003190112610023576004356102d181610267565b6044359067ffffffffffffffff8211610023576103076102f8610021933690600401610285565b61030061198c565b36916105fa565b906024359061190d565b9181601f840112156100235782359167ffffffffffffffff8311610023576020808501948460051b01011161002357565b50346100235760603660031901126100235767ffffffffffffffff60043581811161002357610375903690600401610311565b906024358381116100235761038e903690600401610311565b93604435908111610023576103a7903690600401610311565b926103b061198c565b84158015610445575b801561043b575b61040f5760005b8581106103d057005b806104096103e96103e46001948a87611745565b611763565b6103f4838b89611745565b35610403610300858b8a61176d565b9161190d565b016103c7565b5050506084926040519263470c355760e01b845260048401526024830152604482015260006064820152fd5b50838614156103c0565b50858514156103b9565b6001600160e01b031981160361002357565b50346100235760203660031901126100235760206004356104818161044f565b6040516001600160e01b03199091166301ffc9a760e01b148152f35b5034610023576020366003190112610023576004356104bb81610267565b6104c3611931565b6001600160a01b0380821691821561053057803b15610509573054903055167faa3f731066a578e5f39b4215468d826cdd15373cbc0dfc9cb9bdc649718ef7da600080a3005b604051630c76093760e01b81526001600160a01b03919091166004820152602490fd5b0390fd5b60405162461bcd60e51b815260206004820152601660248201527f416464726573732063616e6e6f74206265207a65726f000000000000000000006044820152606490fd5b50634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116105a057604052565b6105a8610575565b604052565b90601f8019910116810190811067ffffffffffffffff8211176105a057604052565b60209067ffffffffffffffff81116105ed575b601f01601f19160190565b6105f5610575565b6105e2565b929192610606826105cf565b9161061460405193846105ad565b829481845281830111610023578281602093846000960137010152565b9080601f830112156100235781602061064c933591016105fa565b90565b50346100235760403660031901126100235760243567ffffffffffffffff81116100235761068e6106866020923690600401610631565b600435611834565b6040516001600160e01b03199091168152f35b6002111561002357565b50346100235760a0366003190112610023576004356106c981610267565b60443567ffffffffffffffff8111610023576106e9903690600401610631565b90606435906106f7826106a1565b6084359160013314801561074b575b61073357602093610723938061072d57505a925b60243590611b5a565b6040519015158152f35b9261071a565b6040516321ac7c5f60e01b8152336004820152602490fd5b503360005260006020526001600160a01b036040600020541615610706565b503461002357602036600319011261002357602060043561078a81610267565b6001600160a01b0380911690816001141591826107ae575b50506040519015158152f35b9091506000526000825260406000205416151538806107a2565b5034610023576060366003190112610023576004356107e681610267565b602435906107f382610267565b60443567ffffffffffffffff811161002357610813903690600401610285565b91909260009360018552846020526001600160a01b0393604093858588205416158015906108fd575b6108ed5791610852916103006108589594611a24565b90611f7a565b918216801580156108e3575b6108cd578282856108b1936108c997528060205261089182822060016001600160a01b0319825416179055565b6001815220906001600160a01b03166001600160a01b0319825416179055565b516001600160a01b0390911681529081906020820190565b0390f35b602491519063cadb248f60e01b82526004820152fd5b5060018114610864565b845162dc149f60e41b8152600490fd5b50857f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d45416151561083c565b503461002357600319606036820112610023576004359067ffffffffffffffff82116100235761016082600401918336030112610023576000906001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000163303610a9b576109af6109a76101448693018461153d565b810190611570565b905016926109e06109d3856001600160a01b03166000526000602052604060002090565b546001600160a01b031690565b1615610a7a576020610a116108c9948493604051948580948193637ff9adb960e11b835260243590600484016115fa565b03925af1918215610a6d575b91610a3f575b50610a2f6044356116f1565b6040519081529081906020820190565b610a60915060203d8111610a66575b610a5881836105ad565b8101906114b7565b38610a23565b503d610a4e565b610a756114c6565b610a1d565b6040516326cc3fab60e21b81526001600160a01b0384166004820152602490fd5b604051635dac3db760e11b8152336004820152602490fd5b608060031982011261002357600435610acb81610267565b91602435916044359067ffffffffffffffff821161002357610aef91600401610631565b9060643561064c816106a1565b503461002357610b0b36610ab3565b600193919333148015610b2b575b61073357602093610723935a93611b5a565b503360005260006020526001600160a01b036040600020541615610b19565b50600080600319360112610bd1576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681813b15610bd15760405163b760faf960e01b8152306004820152918290602490829034905af18015610bc4575b610bb8575080f35b610bc19061058c565b80f35b610bcc6114c6565b610bb0565b80fd5b5060006040366003190112610bd157600435610bef81610267565b610bf7611931565b816001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001692833b15610c5f5760449083604051958694859363040b850f60e31b855216600484015260243560248401525af18015610bc457610bb8575080f35b8280fd5b60005b838110610c765750506000910152565b8181015183820152602001610c66565b90602091610c9f81518092818552858086019101610c63565b601f01601f1916010190565b503461002357610cba36610ab3565b90600193929333148015610d0e575b61073357610cd8935a93611b5a565b6040519060203d8301016040523d82523d6000602084013e6108c960405192839215158352604060208401526040830190610c86565b503360005260006020526001600160a01b036040600020541615610cc9565b503461002357604036600319011261002357600435610d4b81610267565b60243567ffffffffffffffff811161002357602091610d71610d7f923690600401610631565b90610d7a611931565b611f7a565b610d8881611d68565b6001600160a01b0360405191168152f35b503461002357602036600319011261002357610021600435610dba81610267565b610dc2611931565b611d68565b50346100235760003660031901126100235760206001600160a01b0360315416604051908152f35b50346100235760003660031901126100235760207f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4546001600160a01b0360405191168152f35b503461002357600036600319011261002357602030546001600160a01b0360405191168152f35b50346100235760803660031901126100235767ffffffffffffffff60043581811161002357610e90903690600401610311565b60249291923582811161002357610eab903690600401610311565b60449491943584811161002357610ec6903690600401610311565b91606435958611610023576108c996610ee6610eee973690600401610311565b969095611c22565b60405190151581529081906020820190565b50346100235760003660031901126100235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610023576000366003190112610023576040516370a0823160e01b815230600482015260209081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610fd4575b600091610fb7575b50604051908152f35b610fce9150823d8111610a6657610a5881836105ad565b38610fae565b610fdc6114c6565b610fa6565b90929192604082016040835281518091526060830160208093019160005b8482821061101b575050506001600160a01b0391509416910152565b84516001600160a01b031684529384019390920191600101610fff565b50346100235760403660031901126100235760043561105681610267565b60243561106281611a96565b61106f60405191826105ad565b818152601f1961107e83611a96565b013660208301376110a76109d36000946001600160a01b03166000526000602052604060002090565b6001600160a01b038116801515908161112e575b5080611125575b15611112576111066109d3826110ed61110c946110df8988611ab7565b906001600160a01b03169052565b6001600160a01b03166000526000602052604060002090565b93611ad9565b926110a7565b908381526108c960405192839283610fe1565b508284106110c2565b600191501415386110bb565b50346100235760203660031901126100235760043577ffffffffffffffffffffffffffffffffffffffffffffffff8116809103610023576108c99060405190631aab3f0d60e11b825230600483015260248201526020816044816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ff575b6000916111e1575b506040519081529081906020820190565b6111f9915060203d8111610a6657610a5881836105ad565b386111d0565b6112076114c6565b6111c8565b50346100235760403660031901126100235760043561122a81610267565b60243561123681610267565b61123e611931565b6001600160a01b038116801580156113d4575b6113b3576112846112786109d3856001600160a01b03166000526000602052604060002090565b6001600160a01b031690565b03611359578061130a7faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276936112ef6112d56109d3611354966001600160a01b03166000526000602052604060002090565b916001600160a01b03166000526000602052604060002090565b906001600160a01b03166001600160a01b0319825416179055565b61133a61132a826001600160a01b03166000526000602052604060002090565b6001600160a01b03198154169055565b6040516001600160a01b0390911681529081906020820190565b0390a1005b61052c61137c6109d3846001600160a01b03166000526000602052604060002090565b604051633103525b60e21b81526001600160a01b039384166004820152908316602482015292909116604483015281906064820190565b60405163cadb248f60e01b81526001600160a01b0383166004820152602490fd5b5060018114611251565b5034610023576020366003190112610023576100216004356113ff81610267565b611407611931565b611a24565b50346100235760203660031901126100235760043560005260326020526020604060002054604051908152f35b5034610023576000366003190112610023576108c96040516040810181811067ffffffffffffffff8211176114aa575b604052600581527f322e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610c86565b6114b2610575565b611469565b90816020910312610023575190565b506040513d6000823e3d90fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301461152b5734337ed05ab44e279ac59e855cb75dc2ae23b200ad994797b6f1f028f96a46ecce02600080a3565b604051633c97166560e21b8152600490fd5b903590601e1981360301821215610023570180359067ffffffffffffffff82116100235760200191813603831361002357565b919060408382031261002357823567ffffffffffffffff81116100235760209161159b918501610631565b92013561064c81610267565b9035601e198236030181121561002357016020813591019167ffffffffffffffff821161002357813603831361002357565b908060209392818452848401376000828201840152601f01601f1916010190565b9291906116ec611657602092604087526116276040880161161a83610278565b6001600160a01b03169052565b8381013560608801526116dc61164060408301836115a7565b9390610160948560808c01526101a08b01916115d9565b916116d361167f61166b60608401846115a7565b603f198d8803810160a08f015296916115d9565b608083013560c08c015260a083013560e08c01528a6101009660c0850135888301526116c361012060e087013581850152610140998701358a8501528601866115a7565b92909188828603019101526115d9565b938101906115a7565b91888403016101808901526115d9565b930152565b806116f95750565b600080808093338219f1503d15610283573d611714816105cf565b9061172260405192836105ad565b8152600060203d92013e565b50634e487b7160e01b600052603260045260246000fd5b9190811015611756575b60051b0190565b61175e61172e565b61174f565b3561064c81610267565b90916117869281101561178a575b60051b81019061153d565b9091565b61179261172e565b61177b565b919060408382031261002357825167ffffffffffffffff81116100235783019080601f83011215610023578151916117ce836105cf565b916117dc60405193846105ad565b83835260208483010111610023576020926117fc91848085019101610c63565b92015161064c81610267565b90816020910312610023575161064c8161044f565b60409061064c939281528160208201520190610c86565b906118489060208082518301019101611797565b90916001600160a01b03809216916118766109d3846001600160a01b03166000526000602052604060002090565b16156118ec57916020916118a093604051809581948293630b135d3f60e11b84526004840161181d565b03915afa9081156118df575b6000916118b7575090565b61064c915060203d81116118d8575b6118d081836105ad565b810190611808565b503d6118c6565b6118e76114c6565b6118ac565b6040516326cc3fab60e21b81526001600160a01b0383166004820152602490fd5b916000928392602083519301915af1604051903d6000833e1561192d5750565b3d90fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141580611982575b61196a57565b604051634776242160e01b8152336004820152602490fd5b5030331415611964565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119be57565b60405163e6fce6a560e01b8152336004820152602490fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d4548015610021576000808092368280373360601b3652818060143601925af13d82803e1561192d573d90f35b6001600160a01b03808216918215611a84577f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d49081549155167f06be9a1bea257286cf2afa8205ed494ca9d6a4b41aa58d04238deebada20fb0c600080a3565b60405163dd449f5f60e01b8152600490fd5b60209067ffffffffffffffff8111611aaf5760051b0190565b61175e610575565b6020918151811015611acc575b60051b010190565b611ad461172e565b611ac4565b6000198114611ae85760010190565b634e487b7160e01b600052601160045260246000fd5b611b1690602060405192828480945193849201610c63565b810103902090565b906002821015611b2b5752565b634e487b7160e01b600052602160045260246000fd5b60209093929193611b56816040810196611b1e565b0152565b9493929091946002821015611b2b5760018203611c05576000808751602089018488f4955b8615611bcf577f81d12fffced46c214dfae8ab8fa0b9f7b69f70c9d500e33f612f2105deb261ee91611bca611bbb6001600160a01b0393611afe565b96604051938493169583611b41565b0390a4565b7f3ddd038f78c876172d5dbfd730b14c9f8692dfa197ef104eaac6df3f85a0874a91611bca611bbb6001600160a01b0393611afe565b600080875160208901868589f195611b7f565b3561064c816106a1565b9497969391929795909560009887158015611d5e575b8015611d54575b8015611d4a575b611d1b576001978833148015611ceb575b6107335797969594939291906000985b808a10611c7a5750505050505050505050565b9091929394959697899b50611cdb888888611cd589869f8f81611cc0818e611cb98f968f97611cb36103e483611ccd9b611cc89b611745565b9c611745565b359861176d565b989094611745565b611c18565b9436916105fa565b91611eab565b9b01989796959493929190611c67565b506001600160a01b03611d146109d3336001600160a01b03166000526000602052604060002090565b1615611c57565b60405163470c355760e01b81526004810189905260248101919091526044810182905260648101869052608490fd5b5085821415611c46565b5081811415611c3f565b5080881415611c38565b6001600160a01b0381168015908115611ea0575b50611e7d57611da46112786109d3836001600160a01b03166000526000602052604060002090565b611e5a57600160009081526020527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844090611e5590611e21611e047fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6109d3565b6112ef836001600160a01b03166000526000602052604060002090565b6001600090815260205261133a817fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d6112ef565b0390a1565b60405163b29d459560e01b81526001600160a01b03919091166004820152602490fd5b60405163cadb248f60e01b81526001600160a01b03919091166004820152602490fd5b600191501438611d7c565b939293611ebb5a86858585611b5a565b948515611f4e57611f23611f187f8c014e41cffd68ba64f3e7830b8b2e4ee860509d8deab25ebbcbba2f0405e2da956001600160a01b0395604051968796338852166020870152604086015260a0606086015260a0850190610c86565b916080840190611b1e565b0390a1337f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8600080a2565b50505050337facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375600080a2565b6001600160a01b03811615611fab5781600092918360208194519301915af1604051903d6000833e1561192d575190565b60405162461bcd60e51b815260206004820152601a60248201527f57726f6e67204d6f64756c6520536574757020416464726573730000000000006044820152606490fdfea26469706673582212205e35c32c65281399d0271586e25905b496a0e4ccfd6e3ff9ffae2c43380c16ac64736f6c63430008110033"; - -type SmartAccount_v200ConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: SmartAccount_v200ConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class SmartAccount_v200__factory extends ContractFactory { - constructor(...args: SmartAccount_v200ConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - anEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy( - anEntryPoint, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - anEntryPoint: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(anEntryPoint, overrides || {}); - } - override attach(address: string): SmartAccount_v200 { - return super.attach(address) as SmartAccount_v200; - } - override connect(signer: Signer): SmartAccount_v200__factory { - return super.connect(signer) as SmartAccount_v200__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): SmartAccount_v200Interface { - return new utils.Interface(_abi) as SmartAccount_v200Interface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): SmartAccount_v200 { - return new Contract(address, _abi, signerOrProvider) as SmartAccount_v200; - } -} diff --git a/packages/common/src/typechain/factories/biconomy_v2.0.0/index.ts b/packages/common/src/typechain/factories/biconomy_v2.0.0/index.ts deleted file mode 100644 index 09c5a3a18..000000000 --- a/packages/common/src/typechain/factories/biconomy_v2.0.0/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { ECDSAOwnershipRegistryModule_v100__factory } from "./ECDSAOwnershipRegistryModule_v100__factory"; -export { MultiChainValidationModule_v100__factory } from "./MultiChainValidationModule_v100__factory"; -export { SmartAccountFactory_v200__factory } from "./SmartAccountFactory_v200__factory"; -export { SmartAccount_v200__factory } from "./SmartAccount_v200__factory"; diff --git a/packages/common/src/typechain/factories/entrypoint/EntryPoint_v005__factory.ts b/packages/common/src/typechain/factories/entrypoint/EntryPoint_v005__factory.ts deleted file mode 100644 index ca50f060c..000000000 --- a/packages/common/src/typechain/factories/entrypoint/EntryPoint_v005__factory.ts +++ /dev/null @@ -1,1370 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../common"; -import type { - EntryPoint_v005, - EntryPoint_v005Interface, -} from "../../entrypoint/EntryPoint_v005"; - -const _abi = [ - { - inputs: [ - { - internalType: "uint256", - name: "preOpGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "paid", - type: "uint256", - }, - { - internalType: "uint48", - name: "validAfter", - type: "uint48", - }, - { - internalType: "uint48", - name: "validUntil", - type: "uint48", - }, - { - internalType: "bool", - name: "targetSuccess", - type: "bool", - }, - { - internalType: "bytes", - name: "targetResult", - type: "bytes", - }, - ], - name: "ExecutionResult", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "opIndex", - type: "uint256", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "FailedOp", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - ], - name: "SenderAddressResult", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "aggregator", - type: "address", - }, - ], - name: "SignatureValidationFailed", - type: "error", - }, - { - inputs: [ - { - components: [ - { - internalType: "uint256", - name: "preOpGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "prefund", - type: "uint256", - }, - { - internalType: "bool", - name: "sigFailed", - type: "bool", - }, - { - internalType: "uint48", - name: "validAfter", - type: "uint48", - }, - { - internalType: "uint48", - name: "validUntil", - type: "uint48", - }, - { - internalType: "bytes", - name: "paymasterContext", - type: "bytes", - }, - ], - internalType: "struct IEntryPoint.ReturnInfo", - name: "returnInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "senderInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "factoryInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "paymasterInfo", - type: "tuple", - }, - ], - name: "ValidationResult", - type: "error", - }, - { - inputs: [ - { - components: [ - { - internalType: "uint256", - name: "preOpGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "prefund", - type: "uint256", - }, - { - internalType: "bool", - name: "sigFailed", - type: "bool", - }, - { - internalType: "uint48", - name: "validAfter", - type: "uint48", - }, - { - internalType: "uint48", - name: "validUntil", - type: "uint48", - }, - { - internalType: "bytes", - name: "paymasterContext", - type: "bytes", - }, - ], - internalType: "struct IEntryPoint.ReturnInfo", - name: "returnInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "senderInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "factoryInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "paymasterInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "address", - name: "aggregator", - type: "address", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "stakeInfo", - type: "tuple", - }, - ], - internalType: "struct IEntryPoint.AggregatorStakeInfo", - name: "aggregatorInfo", - type: "tuple", - }, - ], - name: "ValidationResultWithAggregation", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "factory", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "paymaster", - type: "address", - }, - ], - name: "AccountDeployed", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "BeforeExecution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "totalDeposit", - type: "uint256", - }, - ], - name: "Deposited", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "aggregator", - type: "address", - }, - ], - name: "SignatureAggregatorChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - name: "StakeLocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "withdrawTime", - type: "uint256", - }, - ], - name: "StakeUnlocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "withdrawAddress", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "StakeWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "paymaster", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "success", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "actualGasCost", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "actualGasUsed", - type: "uint256", - }, - ], - name: "UserOperationEvent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "revertReason", - type: "bytes", - }, - ], - name: "UserOperationRevertReason", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "withdrawAddress", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Withdrawn", - type: "event", - }, - { - inputs: [], - name: "SIG_VALIDATION_FAILED", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - ], - name: "_validateSenderAndPaymaster", - outputs: [], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "unstakeDelaySec", - type: "uint32", - }, - ], - name: "addStake", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "depositTo", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "deposits", - outputs: [ - { - internalType: "uint112", - name: "deposit", - type: "uint112", - }, - { - internalType: "bool", - name: "staked", - type: "bool", - }, - { - internalType: "uint112", - name: "stake", - type: "uint112", - }, - { - internalType: "uint32", - name: "unstakeDelaySec", - type: "uint32", - }, - { - internalType: "uint48", - name: "withdrawTime", - type: "uint48", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "getDepositInfo", - outputs: [ - { - components: [ - { - internalType: "uint112", - name: "deposit", - type: "uint112", - }, - { - internalType: "bool", - name: "staked", - type: "bool", - }, - { - internalType: "uint112", - name: "stake", - type: "uint112", - }, - { - internalType: "uint32", - name: "unstakeDelaySec", - type: "uint32", - }, - { - internalType: "uint48", - name: "withdrawTime", - type: "uint48", - }, - ], - internalType: "struct IStakeManager.DepositInfo", - name: "info", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint192", - name: "key", - type: "uint192", - }, - ], - name: "getNonce", - outputs: [ - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - ], - name: "getSenderAddress", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - ], - name: "getUserOpHash", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation[]", - name: "userOps", - type: "tuple[]", - }, - { - internalType: "contract IAggregator", - name: "aggregator", - type: "address", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct IEntryPoint.UserOpsPerAggregator[]", - name: "opsPerAggregator", - type: "tuple[]", - }, - { - internalType: "address payable", - name: "beneficiary", - type: "address", - }, - ], - name: "handleAggregatedOps", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation[]", - name: "ops", - type: "tuple[]", - }, - { - internalType: "address payable", - name: "beneficiary", - type: "address", - }, - ], - name: "handleOps", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint192", - name: "key", - type: "uint192", - }, - ], - name: "incrementNonce", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - components: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "address", - name: "paymaster", - type: "address", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - ], - internalType: "struct EntryPoint.MemoryUserOp", - name: "mUserOp", - type: "tuple", - }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "prefund", - type: "uint256", - }, - { - internalType: "uint256", - name: "contextOffset", - type: "uint256", - }, - { - internalType: "uint256", - name: "preOpGas", - type: "uint256", - }, - ], - internalType: "struct EntryPoint.UserOpInfo", - name: "opInfo", - type: "tuple", - }, - { - internalType: "bytes", - name: "context", - type: "bytes", - }, - ], - name: "innerHandleOp", - outputs: [ - { - internalType: "uint256", - name: "actualGasCost", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint192", - name: "", - type: "uint192", - }, - ], - name: "nonceSequenceNumber", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "op", - type: "tuple", - }, - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "targetCallData", - type: "bytes", - }, - ], - name: "simulateHandleOp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - ], - name: "simulateValidation", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - ], - name: "withdrawStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - { - internalType: "uint256", - name: "withdrawAmount", - type: "uint256", - }, - ], - name: "withdrawTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -] as const; - -const _bytecode = - "0x60a080604052346200008957600160025561022c8181016001600160401b038111838210176200007357829162005d18833903906000f080156200006757608052604051615c8990816200008f82396080518181816113df01528181613e9501526141b60152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080806040523461001657610210908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033"; - -type EntryPoint_v005ConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: EntryPoint_v005ConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class EntryPoint_v005__factory extends ContractFactory { - constructor(...args: EntryPoint_v005ConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): EntryPoint_v005 { - return super.attach(address) as EntryPoint_v005; - } - override connect(signer: Signer): EntryPoint_v005__factory { - return super.connect(signer) as EntryPoint_v005__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): EntryPoint_v005Interface { - return new utils.Interface(_abi) as EntryPoint_v005Interface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): EntryPoint_v005 { - return new Contract(address, _abi, signerOrProvider) as EntryPoint_v005; - } -} diff --git a/packages/common/src/typechain/factories/entrypoint/EntryPoint_v006__factory.ts b/packages/common/src/typechain/factories/entrypoint/EntryPoint_v006__factory.ts deleted file mode 100644 index 4e8f56793..000000000 --- a/packages/common/src/typechain/factories/entrypoint/EntryPoint_v006__factory.ts +++ /dev/null @@ -1,1370 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../common"; -import type { - EntryPoint_v006, - EntryPoint_v006Interface, -} from "../../entrypoint/EntryPoint_v006"; - -const _abi = [ - { - inputs: [ - { - internalType: "uint256", - name: "preOpGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "paid", - type: "uint256", - }, - { - internalType: "uint48", - name: "validAfter", - type: "uint48", - }, - { - internalType: "uint48", - name: "validUntil", - type: "uint48", - }, - { - internalType: "bool", - name: "targetSuccess", - type: "bool", - }, - { - internalType: "bytes", - name: "targetResult", - type: "bytes", - }, - ], - name: "ExecutionResult", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "opIndex", - type: "uint256", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "FailedOp", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - ], - name: "SenderAddressResult", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "aggregator", - type: "address", - }, - ], - name: "SignatureValidationFailed", - type: "error", - }, - { - inputs: [ - { - components: [ - { - internalType: "uint256", - name: "preOpGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "prefund", - type: "uint256", - }, - { - internalType: "bool", - name: "sigFailed", - type: "bool", - }, - { - internalType: "uint48", - name: "validAfter", - type: "uint48", - }, - { - internalType: "uint48", - name: "validUntil", - type: "uint48", - }, - { - internalType: "bytes", - name: "paymasterContext", - type: "bytes", - }, - ], - internalType: "struct IEntryPoint.ReturnInfo", - name: "returnInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "senderInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "factoryInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "paymasterInfo", - type: "tuple", - }, - ], - name: "ValidationResult", - type: "error", - }, - { - inputs: [ - { - components: [ - { - internalType: "uint256", - name: "preOpGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "prefund", - type: "uint256", - }, - { - internalType: "bool", - name: "sigFailed", - type: "bool", - }, - { - internalType: "uint48", - name: "validAfter", - type: "uint48", - }, - { - internalType: "uint48", - name: "validUntil", - type: "uint48", - }, - { - internalType: "bytes", - name: "paymasterContext", - type: "bytes", - }, - ], - internalType: "struct IEntryPoint.ReturnInfo", - name: "returnInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "senderInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "factoryInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "paymasterInfo", - type: "tuple", - }, - { - components: [ - { - internalType: "address", - name: "aggregator", - type: "address", - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256", - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - internalType: "struct IStakeManager.StakeInfo", - name: "stakeInfo", - type: "tuple", - }, - ], - internalType: "struct IEntryPoint.AggregatorStakeInfo", - name: "aggregatorInfo", - type: "tuple", - }, - ], - name: "ValidationResultWithAggregation", - type: "error", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "factory", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "paymaster", - type: "address", - }, - ], - name: "AccountDeployed", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "BeforeExecution", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "totalDeposit", - type: "uint256", - }, - ], - name: "Deposited", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "aggregator", - type: "address", - }, - ], - name: "SignatureAggregatorChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "totalStaked", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256", - }, - ], - name: "StakeLocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "withdrawTime", - type: "uint256", - }, - ], - name: "StakeUnlocked", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "withdrawAddress", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "StakeWithdrawn", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "paymaster", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "success", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "actualGasCost", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "actualGasUsed", - type: "uint256", - }, - ], - name: "UserOperationEvent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "revertReason", - type: "bytes", - }, - ], - name: "UserOperationRevertReason", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "withdrawAddress", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Withdrawn", - type: "event", - }, - { - inputs: [], - name: "SIG_VALIDATION_FAILED", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - ], - name: "_validateSenderAndPaymaster", - outputs: [], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "unstakeDelaySec", - type: "uint32", - }, - ], - name: "addStake", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "depositTo", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "deposits", - outputs: [ - { - internalType: "uint112", - name: "deposit", - type: "uint112", - }, - { - internalType: "bool", - name: "staked", - type: "bool", - }, - { - internalType: "uint112", - name: "stake", - type: "uint112", - }, - { - internalType: "uint32", - name: "unstakeDelaySec", - type: "uint32", - }, - { - internalType: "uint48", - name: "withdrawTime", - type: "uint48", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "getDepositInfo", - outputs: [ - { - components: [ - { - internalType: "uint112", - name: "deposit", - type: "uint112", - }, - { - internalType: "bool", - name: "staked", - type: "bool", - }, - { - internalType: "uint112", - name: "stake", - type: "uint112", - }, - { - internalType: "uint32", - name: "unstakeDelaySec", - type: "uint32", - }, - { - internalType: "uint48", - name: "withdrawTime", - type: "uint48", - }, - ], - internalType: "struct IStakeManager.DepositInfo", - name: "info", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint192", - name: "key", - type: "uint192", - }, - ], - name: "getNonce", - outputs: [ - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - ], - name: "getSenderAddress", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - ], - name: "getUserOpHash", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation[]", - name: "userOps", - type: "tuple[]", - }, - { - internalType: "contract IAggregator", - name: "aggregator", - type: "address", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct IEntryPoint.UserOpsPerAggregator[]", - name: "opsPerAggregator", - type: "tuple[]", - }, - { - internalType: "address payable", - name: "beneficiary", - type: "address", - }, - ], - name: "handleAggregatedOps", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation[]", - name: "ops", - type: "tuple[]", - }, - { - internalType: "address payable", - name: "beneficiary", - type: "address", - }, - ], - name: "handleOps", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint192", - name: "key", - type: "uint192", - }, - ], - name: "incrementNonce", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - components: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "address", - name: "paymaster", - type: "address", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - ], - internalType: "struct EntryPoint.MemoryUserOp", - name: "mUserOp", - type: "tuple", - }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "prefund", - type: "uint256", - }, - { - internalType: "uint256", - name: "contextOffset", - type: "uint256", - }, - { - internalType: "uint256", - name: "preOpGas", - type: "uint256", - }, - ], - internalType: "struct EntryPoint.UserOpInfo", - name: "opInfo", - type: "tuple", - }, - { - internalType: "bytes", - name: "context", - type: "bytes", - }, - ], - name: "innerHandleOp", - outputs: [ - { - internalType: "uint256", - name: "actualGasCost", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint192", - name: "", - type: "uint192", - }, - ], - name: "nonceSequenceNumber", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "op", - type: "tuple", - }, - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "bytes", - name: "targetCallData", - type: "bytes", - }, - ], - name: "simulateHandleOp", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - ], - name: "simulateValidation", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - ], - name: "withdrawStake", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - { - internalType: "uint256", - name: "withdrawAmount", - type: "uint256", - }, - ], - name: "withdrawTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -] as const; - -const _bytecode = - "0x60a080604052346200008957600160025561022c8181016001600160401b038111838210176200007357829162005d18833903906000f080156200006757608052604051615c8990816200008f82396080518181816113df01528181613e9501526141b60152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080806040523461001657610210908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033"; - -type EntryPoint_v006ConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: EntryPoint_v006ConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class EntryPoint_v006__factory extends ContractFactory { - constructor(...args: EntryPoint_v006ConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): EntryPoint_v006 { - return super.attach(address) as EntryPoint_v006; - } - override connect(signer: Signer): EntryPoint_v006__factory { - return super.connect(signer) as EntryPoint_v006__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): EntryPoint_v006Interface { - return new utils.Interface(_abi) as EntryPoint_v006Interface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): EntryPoint_v006 { - return new Contract(address, _abi, signerOrProvider) as EntryPoint_v006; - } -} diff --git a/packages/common/src/typechain/factories/entrypoint/index.ts b/packages/common/src/typechain/factories/entrypoint/index.ts deleted file mode 100644 index 938c54a70..000000000 --- a/packages/common/src/typechain/factories/entrypoint/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { EntryPoint_v005__factory } from "./EntryPoint_v005__factory"; -export { EntryPoint_v006__factory } from "./EntryPoint_v006__factory"; diff --git a/packages/common/src/typechain/factories/index.ts b/packages/common/src/typechain/factories/index.ts deleted file mode 100644 index 5b696075c..000000000 --- a/packages/common/src/typechain/factories/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * as biconomyV100 from "./biconomy_v1.0.0"; -export * as biconomyV200 from "./biconomy_v2.0.0"; -export * as entrypoint from "./entrypoint"; -export * as misc from "./misc"; diff --git a/packages/common/src/typechain/factories/misc/AddressResolver__factory.ts b/packages/common/src/typechain/factories/misc/AddressResolver__factory.ts deleted file mode 100644 index 7718c0ed7..000000000 --- a/packages/common/src/typechain/factories/misc/AddressResolver__factory.ts +++ /dev/null @@ -1,317 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../../common"; -import type { - AddressResolver, - AddressResolverInterface, -} from "../../misc/AddressResolver"; - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_v1Factory", - type: "address", - }, - { - internalType: "address", - name: "_v2Factory", - type: "address", - }, - { - internalType: "address", - name: "_ecdsaModule", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "ecdsaOwnershipModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_eoa", - type: "address", - }, - { - internalType: "uint8", - name: "_maxIndex", - type: "uint8", - }, - ], - name: "resolveAddresses", - outputs: [ - { - components: [ - { - internalType: "address", - name: "accountAddress", - type: "address", - }, - { - internalType: "address", - name: "factoryAddress", - type: "address", - }, - { - internalType: "address", - name: "currentImplementation", - type: "address", - }, - { - internalType: "string", - name: "currentVersion", - type: "string", - }, - { - internalType: "string", - name: "factoryVersion", - type: "string", - }, - { - internalType: "uint256", - name: "deploymentIndex", - type: "uint256", - }, - ], - internalType: "struct IAddressResolver.SmartAccountResult[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_eoa", - type: "address", - }, - { - internalType: "uint8", - name: "_maxIndex", - type: "uint8", - }, - { - internalType: "address", - name: "_moduleAddress", - type: "address", - }, - { - internalType: "bytes", - name: "_moduleSetupData", - type: "bytes", - }, - ], - name: "resolveAddressesFlexibleForV2", - outputs: [ - { - components: [ - { - internalType: "address", - name: "accountAddress", - type: "address", - }, - { - internalType: "address", - name: "factoryAddress", - type: "address", - }, - { - internalType: "address", - name: "currentImplementation", - type: "address", - }, - { - internalType: "string", - name: "currentVersion", - type: "string", - }, - { - internalType: "string", - name: "factoryVersion", - type: "string", - }, - { - internalType: "uint256", - name: "deploymentIndex", - type: "uint256", - }, - ], - internalType: "struct IAddressResolver.SmartAccountResult[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_eoa", - type: "address", - }, - { - internalType: "uint8", - name: "_maxIndex", - type: "uint8", - }, - ], - name: "resolveAddressesV1", - outputs: [ - { - components: [ - { - internalType: "address", - name: "accountAddress", - type: "address", - }, - { - internalType: "address", - name: "factoryAddress", - type: "address", - }, - { - internalType: "address", - name: "currentImplementation", - type: "address", - }, - { - internalType: "string", - name: "currentVersion", - type: "string", - }, - { - internalType: "string", - name: "factoryVersion", - type: "string", - }, - { - internalType: "uint256", - name: "deploymentIndex", - type: "uint256", - }, - ], - internalType: "struct IAddressResolver.SmartAccountResult[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "smartAccountFactoryV1", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "smartAccountFactoryV2", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, -] as const; - -const _bytecode = - "0x60e0346200011757601f6200124738819003918201601f19168301916001600160401b038311848410176200011c5780849260609460405283398101031262000117576200004d8162000132565b906200006a6040620000626020840162000132565b920162000132565b916200009f6001600160a01b0362000086818416151562000147565b62000095818516151562000147565b8416151562000147565b60805260a05260c0526040516110b2908162000195823960805181818160e601528181610311015281816104700152818161071b015281816108f60152610c2b015260a0518181816104e8015281816105c40152818161080c015281816109cd0152610aaa015260c051818181607e01526109980152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200011757565b156200014f57565b60405162461bcd60e51b815260206004820152601960248201527f5265717569726564206e6f6e2d7a65726f2061646472657373000000000000006044820152606490fdfe6080604052600436101561001257600080fd5b60003560e01c806326bbd86c146108305780632819f31c146107ec578063315f3c03146103355780635acdcdc6146102f15780638d440ec2146100a75763c866cae31461005e57600080fd5b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b346100a25760403660031901126100a2576100c0610cfc565b60ff6100ca610d12565b166100d481610ec6565b9160009160006001600160a01b0392837f000000000000000000000000000000000000000000000000000000000000000016915b83811061016157868661011a81610ec6565b9160005b82811061013757604051806101338682610d6a565b0390f35b8061014460019284610fde565b5161014f8287610fde565b5261015a8186610fde565b500161011e565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081604481875afa90811561028b576000916102d2575b508581161515806102c8575b6101b6575b50600101610108565b90956040519063557887a160e11b82526020826004818a87165afa91821561028b57600092610297575b506040516001621794a360e21b03198152926000846004818b85165afa801561028b5788600195948695600093610266575b50816040519461022186610e22565b168452886020850152166040830152606082015261023d610fc0565b60808201528860a0820152610252828b610fde565b5261025d818a610fde565b500195906101ad565b6102849193503d806000833e61027c8183610e70565b810190610f5e565b918d610212565b6040513d6000823e3d90fd5b6102ba91925060203d6020116102c1575b6102b28183610e70565b810190610f3f565b90896101e0565b503d6102a8565b50803b15156101a8565b6102eb915060203d6020116102c1576102b28183610e70565b8861019c565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760803660031901126100a25761034e610cfc565b610356610d12565b906001600160a01b0360443516604435036100a2576064359167ffffffffffffffff83116100a257366023840112156100a257826004013561039781610e92565b936103a56040519586610e70565b81855236602483830101116100a2578160009260246020930183880137850101526103da60ff6103d483611008565b16610ec6565b9260009260005b60ff841681106104395785856103f681610ec6565b9160005b82811061040f57604051806101338682610d6a565b8061041c60019284610fde565b516104278287610fde565b526104328186610fde565b50016103fa565b604051631acd17f560e31b81526001600160a01b038316600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b576000916107cd575b506001600160a01b0381161515806107c3575b610696575b50604051632e7a1a8360e01b8152602081806104dc858860443560048501611033565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610677575b506001600160a01b03811615158061066d575b61053a575b506001016103e1565b90946040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b5760009261064c575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610626575b506001600160a01b039081604051946105be86610e22565b168452817f000000000000000000000000000000000000000000000000000000000000000016602085015216604083015260608201526105fc61105e565b60808201528860a0820152610611828b610fde565b5261061c818a610fde565b5001959150610531565b6001600160a01b03919250610645903d806000833e61027c8183610e70565b91906105a6565b61066691925060203d6020116102c1576102b28183610e70565b908861056b565b50803b151561052c565b610690915060203d6020116102c1576102b28183610e70565b87610519565b60405163557887a160e11b81529195906020836004816001600160a01b0385165afa92831561028b576000936107a2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b5760019460009261077c575b506001600160a01b0390816040519461071586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610753610fc0565b60808201528660a08201526107688289610fde565b526107738188610fde565b500193866104b9565b6001600160a01b0391925061079b903d806000833e61027c8183610e70565b91906106fd565b6107bc91935060203d6020116102c1576102b28183610e70565b91886106c7565b50803b15156104b4565b6107e6915060203d6020116102c1576102b28183610e70565b876104a1565b346100a25760003660031901126100a25760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100a25760403660031901126100a257610849610cfc565b610851610d12565b61085f60ff6103d483611008565b9160009160005b60ff821681106108bf5750505061087c81610ec6565b9160005b82811061089557604051806101338682610d6a565b806108a260019284610fde565b516108ad8287610fde565b526108b88186610fde565b5001610880565b604051631acd17f560e31b81526001600160a01b038416600482015260248101829052602081806044810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561028b57600091610cdd575b506001600160a01b038116151580610cd3575b610ba6575b5060405162bb78ef60e61b602082015260246001600160a01b03851681830152808252606082019082821067ffffffffffffffff831117610b9257506040819052632e7a1a8360e01b8152602081605f19846109c087827f000000000000000000000000000000000000000000000000000000000000000060648201611033565b0301816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa91821561028b57600092610b5d575b50506001600160a01b038116151580610b53575b610a20575b50600101610866565b90936040519063557887a160e11b82526020826004816001600160a01b0387165afa91821561028b57600092610b32575b506040516001621794a360e21b03198152906000826004816001600160a01b0388165afa93841561028b5760ff946001948594600092610b0c575b506001600160a01b03908160405194610aa486610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610ae261105e565b60808201528760a0820152610af7828a610fde565b52610b028189610fde565b5001949150610a17565b6001600160a01b03919250610b2b903d806000833e61027c8183610e70565b9190610a8c565b610b4c91925060203d6020116102c1576102b28183610e70565b9087610a51565b50803b1515610a12565b610b8392506060906020903d602011610b8a575b610b7b8285610e70565b010190610f3f565b86806109fe565b3d9150610b71565b634e487b7160e01b60009081526041600452fd5b60405163557887a160e11b81529194906020836004816001600160a01b0385165afa92831561028b57600093610cb2575b506040516001621794a360e21b03198152926000846004816001600160a01b0386165afa90811561028b57600194600092610c8c575b506001600160a01b03908160405194610c2586610e22565b168452817f00000000000000000000000000000000000000000000000000000000000000001660208501521660408301526060820152610c63610fc0565b60808201528560a0820152610c788288610fde565b52610c838187610fde565b5001928561093f565b6001600160a01b03919250610cab903d806000833e61027c8183610e70565b9190610c0d565b610ccc91935060203d6020116102c1576102b28183610e70565b9187610bd7565b50803b151561093a565b610cf6915060203d6020116102c1576102b28183610e70565b86610927565b600435906001600160a01b03821682036100a257565b6024359060ff821682036100a257565b60005b838110610d355750506000910152565b8181015183820152602001610d25565b90602091610d5e81518092818552858086019101610d22565b601f01601f1916010190565b602080820190808352835180925260409283810182858560051b8401019601946000925b858410610d9f575050505050505090565b909192939495968580600192603f198582030187528a51906001600160a01b0380835116825280848401511684830152878301511687820152610e07610df46060808501519060c08091860152840190610d45565b6080808501519084830390850152610d45565b9160a080910151910152990194019401929594939190610d8e565b60c0810190811067ffffffffffffffff821117610e3e57604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610e3e57604052565b90601f8019910116810190811067ffffffffffffffff821117610e3e57604052565b67ffffffffffffffff8111610e3e57601f01601f191660200190565b67ffffffffffffffff8111610e3e5760051b60200190565b90610ed082610eae565b604090610edf82519182610e70565b8381528093610ef0601f1991610eae565b019160005b838110610f025750505050565b6020908251610f1081610e22565b6000815282600081830152600085830152606080808401526080830152600060a0830152828601015201610ef5565b908160209103126100a257516001600160a01b03811681036100a25790565b6020818303126100a25780519067ffffffffffffffff82116100a2570181601f820112156100a2578051610f9181610e92565b92610f9f6040519485610e70565b818452602082840101116100a257610fbd9160208085019101610d22565b90565b60405190610fcd82610e54565b6002825261763160f01b6020830152565b8051821015610ff25760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b60011b906101fe60fe83169216820361101d57565b634e487b7160e01b600052601160045260246000fd5b939291611059906001600160a01b03604093168652606060208701526060860190610d45565b930152565b6040519061106b82610e54565b60028252613b1960f11b602083015256fea264697066735822122083951a990433399478b293d1c860c5b725a11f7db47b61e057d189f59c9adeeb64736f6c63430008110033"; - -type AddressResolverConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: AddressResolverConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class AddressResolver__factory extends ContractFactory { - constructor(...args: AddressResolverConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - _v1Factory: PromiseOrValue, - _v2Factory: PromiseOrValue, - _ecdsaModule: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy( - _v1Factory, - _v2Factory, - _ecdsaModule, - overrides || {} - ) as Promise; - } - override getDeployTransaction( - _v1Factory: PromiseOrValue, - _v2Factory: PromiseOrValue, - _ecdsaModule: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction( - _v1Factory, - _v2Factory, - _ecdsaModule, - overrides || {} - ); - } - override attach(address: string): AddressResolver { - return super.attach(address) as AddressResolver; - } - override connect(signer: Signer): AddressResolver__factory { - return super.connect(signer) as AddressResolver__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): AddressResolverInterface { - return new utils.Interface(_abi) as AddressResolverInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AddressResolver { - return new Contract(address, _abi, signerOrProvider) as AddressResolver; - } -} diff --git a/packages/common/src/typechain/factories/misc/index.ts b/packages/common/src/typechain/factories/misc/index.ts deleted file mode 100644 index 1dd7f7626..000000000 --- a/packages/common/src/typechain/factories/misc/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { AddressResolver__factory } from "./AddressResolver__factory"; diff --git a/packages/common/src/typechain/index.ts b/packages/common/src/typechain/index.ts deleted file mode 100644 index 6fb6c702d..000000000 --- a/packages/common/src/typechain/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type * as biconomyV100 from "./biconomy_v1.0.0"; -export type { biconomyV100 }; -import type * as biconomyV200 from "./biconomy_v2.0.0"; -export type { biconomyV200 }; -import type * as entrypoint from "./entrypoint"; -export type { entrypoint }; -import type * as misc from "./misc"; -export type { misc }; -export * as factories from "./factories"; -export type { SmartAccount_v100 } from "./biconomy_v1.0.0/SmartAccount_v100"; -export { SmartAccount_v100__factory } from "./factories/biconomy_v1.0.0/SmartAccount_v100__factory"; -export type { SmartAccountFactory_v100 } from "./biconomy_v1.0.0/SmartAccountFactory_v100"; -export { SmartAccountFactory_v100__factory } from "./factories/biconomy_v1.0.0/SmartAccountFactory_v100__factory"; -export type { ECDSAOwnershipRegistryModule_v100 } from "./biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100"; -export { ECDSAOwnershipRegistryModule_v100__factory } from "./factories/biconomy_v2.0.0/ECDSAOwnershipRegistryModule_v100__factory"; -export type { MultiChainValidationModule_v100 } from "./biconomy_v2.0.0/MultiChainValidationModule_v100"; -export { MultiChainValidationModule_v100__factory } from "./factories/biconomy_v2.0.0/MultiChainValidationModule_v100__factory"; -export type { SmartAccount_v200 } from "./biconomy_v2.0.0/SmartAccount_v200"; -export { SmartAccount_v200__factory } from "./factories/biconomy_v2.0.0/SmartAccount_v200__factory"; -export type { SmartAccountFactory_v200 } from "./biconomy_v2.0.0/SmartAccountFactory_v200"; -export { SmartAccountFactory_v200__factory } from "./factories/biconomy_v2.0.0/SmartAccountFactory_v200__factory"; -export type { EntryPoint_v005 } from "./entrypoint/EntryPoint_v005"; -export { EntryPoint_v005__factory } from "./factories/entrypoint/EntryPoint_v005__factory"; -export type { EntryPoint_v006 } from "./entrypoint/EntryPoint_v006"; -export { EntryPoint_v006__factory } from "./factories/entrypoint/EntryPoint_v006__factory"; -export type { AddressResolver } from "./misc/AddressResolver"; -export { AddressResolver__factory } from "./factories/misc/AddressResolver__factory"; diff --git a/packages/common/src/typechain/misc/AddressResolver.ts b/packages/common/src/typechain/misc/AddressResolver.ts deleted file mode 100644 index 47aa8b4e1..000000000 --- a/packages/common/src/typechain/misc/AddressResolver.ts +++ /dev/null @@ -1,300 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../common"; - -export declare namespace IAddressResolver { - export type SmartAccountResultStruct = { - accountAddress: PromiseOrValue; - factoryAddress: PromiseOrValue; - currentImplementation: PromiseOrValue; - currentVersion: PromiseOrValue; - factoryVersion: PromiseOrValue; - deploymentIndex: PromiseOrValue; - }; - - export type SmartAccountResultStructOutput = [ - string, - string, - string, - string, - string, - BigNumber - ] & { - accountAddress: string; - factoryAddress: string; - currentImplementation: string; - currentVersion: string; - factoryVersion: string; - deploymentIndex: BigNumber; - }; -} - -export interface AddressResolverInterface extends utils.Interface { - functions: { - "ecdsaOwnershipModule()": FunctionFragment; - "resolveAddresses(address,uint8)": FunctionFragment; - "resolveAddressesFlexibleForV2(address,uint8,address,bytes)": FunctionFragment; - "resolveAddressesV1(address,uint8)": FunctionFragment; - "smartAccountFactoryV1()": FunctionFragment; - "smartAccountFactoryV2()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "ecdsaOwnershipModule" - | "resolveAddresses" - | "resolveAddressesFlexibleForV2" - | "resolveAddressesV1" - | "smartAccountFactoryV1" - | "smartAccountFactoryV2" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "ecdsaOwnershipModule", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "resolveAddresses", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "resolveAddressesFlexibleForV2", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "resolveAddressesV1", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "smartAccountFactoryV1", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "smartAccountFactoryV2", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "ecdsaOwnershipModule", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "resolveAddresses", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "resolveAddressesFlexibleForV2", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "resolveAddressesV1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "smartAccountFactoryV1", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "smartAccountFactoryV2", - data: BytesLike - ): Result; - - events: {}; -} - -export interface AddressResolver extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: AddressResolverInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - ecdsaOwnershipModule(overrides?: CallOverrides): Promise<[string]>; - - resolveAddresses( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[IAddressResolver.SmartAccountResultStructOutput[]]>; - - resolveAddressesFlexibleForV2( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - _moduleAddress: PromiseOrValue, - _moduleSetupData: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[IAddressResolver.SmartAccountResultStructOutput[]]>; - - resolveAddressesV1( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[IAddressResolver.SmartAccountResultStructOutput[]]>; - - smartAccountFactoryV1(overrides?: CallOverrides): Promise<[string]>; - - smartAccountFactoryV2(overrides?: CallOverrides): Promise<[string]>; - }; - - ecdsaOwnershipModule(overrides?: CallOverrides): Promise; - - resolveAddresses( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - resolveAddressesFlexibleForV2( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - _moduleAddress: PromiseOrValue, - _moduleSetupData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - resolveAddressesV1( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - smartAccountFactoryV1(overrides?: CallOverrides): Promise; - - smartAccountFactoryV2(overrides?: CallOverrides): Promise; - - callStatic: { - ecdsaOwnershipModule(overrides?: CallOverrides): Promise; - - resolveAddresses( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - resolveAddressesFlexibleForV2( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - _moduleAddress: PromiseOrValue, - _moduleSetupData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - resolveAddressesV1( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - smartAccountFactoryV1(overrides?: CallOverrides): Promise; - - smartAccountFactoryV2(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - ecdsaOwnershipModule(overrides?: CallOverrides): Promise; - - resolveAddresses( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - resolveAddressesFlexibleForV2( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - _moduleAddress: PromiseOrValue, - _moduleSetupData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - resolveAddressesV1( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - smartAccountFactoryV1(overrides?: CallOverrides): Promise; - - smartAccountFactoryV2(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - ecdsaOwnershipModule( - overrides?: CallOverrides - ): Promise; - - resolveAddresses( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - resolveAddressesFlexibleForV2( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - _moduleAddress: PromiseOrValue, - _moduleSetupData: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - resolveAddressesV1( - _eoa: PromiseOrValue, - _maxIndex: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - smartAccountFactoryV1( - overrides?: CallOverrides - ): Promise; - - smartAccountFactoryV2( - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/packages/common/src/typechain/misc/index.ts b/packages/common/src/typechain/misc/index.ts deleted file mode 100644 index 010c4aa86..000000000 --- a/packages/common/src/typechain/misc/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { AddressResolver } from "./AddressResolver"; From fe734948b03cc2b8a7d307aad66ee07602162974 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Thu, 22 Feb 2024 12:40:22 +0000 Subject: [PATCH 1115/1247] Resolve SMA-673 --- .gitignore | 3 - packages/account/CHANGELOG.md | 6 + packages/account/package.json | 20 +- packages/account/src/index.ts | 2 +- packages/account/tests/account.spec.ts | 4 +- packages/bundler/package.json | 8 +- packages/common/package.json | 6 +- packages/common/src/utils/EthersSigner.ts | 5 +- packages/modules/package.json | 12 +- packages/modules/src/BaseValidationModule.ts | 3 +- .../modules/src/BatchedSessionRouterModule.ts | 2 +- .../src/ECDSAOwnershipValidationModule.ts | 5 +- .../modules/src/MultichainValidationModule.ts | 7 +- .../modules/src/SessionKeyManagerModule.ts | 2 +- packages/particle-auth/package.json | 2 +- packages/paymaster/package.json | 8 +- packages/transak/package.json | 2 +- yarn.lock | 807 +++++++----------- 18 files changed, 377 insertions(+), 527 deletions(-) diff --git a/.gitignore b/.gitignore index cc1d5d78c..ac3583499 100644 --- a/.gitignore +++ b/.gitignore @@ -69,9 +69,6 @@ packages/modules/tests/utils/sessionStorageData/* #except sessionStorageData folder !packages/modules/tests/utils/sessionStorageData/.gitkeep -# Typechain -typechain - openapi/ # docs diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index abff0df13..37a72de4e 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.1 (2023-02-22) + +### Bug Fixes + +- Fix for RPC endpoints (Quiknode, Blast Sepolia etc) failing to respond because of custom headers being set + ## 4.0.0 (2023-02-06) ### Features diff --git a/packages/account/package.json b/packages/account/package.json index 07844719d..e0bd61cca 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account", - "version": "4.0.0", + "version": "4.0.1", "description": "This package provides apis for ERC-4337 based smart account implementations", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -55,21 +55,23 @@ "access": "public" }, "devDependencies": { + "@ethersproject/providers": "^5.7.2", + "@ethersproject/wallet": "^5.7.0", "@types/node": "^20.11.10", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "gh-pages": "^6.1.1", + "lru-cache": "^10.0.1", "nock": "^13.2.9", "npm-dts": "^1.3.12", - "typedoc": "^0.25.7", - "lru-cache": "^10.0.1" + "typedoc": "^0.25.7" }, "dependencies": { - "@alchemy/aa-core": "3.0.0-alpha.4", - "@biconomy/bundler": "4.0.0", - "@biconomy/common": "4.0.0", - "@biconomy/modules": "4.0.0", - "@biconomy/paymaster": "4.0.0", - "viem": "^2.7.3" + "@alchemy/aa-core": "^3.0.1", + "@biconomy/bundler": "^4.0.1", + "@biconomy/common": "^4.0.1", + "@biconomy/modules": "^4.0.1", + "@biconomy/paymaster": "^4.0.1", + "viem": "^2.7.12" } } diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index 615c0a6da..10fcab754 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -16,7 +16,7 @@ export { type FeeQuotesOrDataResponse, createPaymaster, } from "@biconomy/paymaster"; -export { EthersSigner, convertSigner, type LightSigner } from "@biconomy/common"; +export { EthersSigner, convertSigner, type LightSigner, type SupportedSigner } from "@biconomy/common"; export { Bundler, type IBundler, diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 764fa66f7..7b70cb178 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -160,10 +160,10 @@ describe("Account Tests", () => { const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); - const builtUserOp = await smartAccount.buildUserOp([{ to: recipient, value: 1, data: "0x" }]); + const builtUserOp = await smartAccount.buildUserOp([{ to: recipient, value: 1 }]); console.log("builtUserOp", builtUserOp); expect(builtUserOp?.nonce?.toString()).toBe("0x0"); - }); + }, 10000); it("should have an active validation module", async () => { const { diff --git a/packages/bundler/package.json b/packages/bundler/package.json index a55b34c20..5fff55256 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/bundler", - "version": "4.0.0", + "version": "4.0.1", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -56,9 +56,9 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "3.0.0-alpha.4", - "@biconomy/common": "4.0.0", - "viem": "^2.7.3" + "@alchemy/aa-core": "^3.0.1", + "@biconomy/common": "^4.0.1", + "viem": "^2.7.12" }, "devDependencies": { "@types/node": "^20.11.10", diff --git a/packages/common/package.json b/packages/common/package.json index e69b3dcba..dc6d79d65 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "4.0.0", + "version": "4.0.1", "description": "common utils to be used for aa transactions", "keywords": [ "utils" @@ -54,9 +54,9 @@ "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" }, "dependencies": { - "@alchemy/aa-core": "3.0.0-alpha.4", + "@alchemy/aa-core": "^3.0.1", "@ethersproject/abstract-signer": "^5.7.0", - "viem": "^2.7.3" + "viem": "^2.7.12" }, "devDependencies": { "@types/node": "^20.11.10", diff --git a/packages/common/src/utils/EthersSigner.ts b/packages/common/src/utils/EthersSigner.ts index e0c568803..d77e0eab1 100644 --- a/packages/common/src/utils/EthersSigner.ts +++ b/packages/common/src/utils/EthersSigner.ts @@ -1,5 +1,5 @@ import { SmartAccountSigner } from "@alchemy/aa-core"; -import { Hex } from "viem"; +import { Hex, SignableMessage } from "viem"; import { Signer } from "@ethersproject/abstract-signer"; export class EthersSigner implements SmartAccountSigner { @@ -16,7 +16,8 @@ export class EthersSigner implements SmartAccountSigner { return (await this.inner.getAddress()) as Hex; } - async signMessage(message: string | Uint8Array): Promise { + async signMessage(_message: SignableMessage): Promise { + const message = typeof _message === "string" ? _message : _message.raw; const signature = await this.inner?.signMessage(message); return this.#correctSignature(signature as Hex); } diff --git a/packages/modules/package.json b/packages/modules/package.json index 6defc5259..3081e8702 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/modules", - "version": "4.0.0", + "version": "4.0.1", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -53,16 +53,18 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "3.0.0-alpha.4", - "@biconomy/common": "4.0.0", + "@alchemy/aa-core": "^3.0.1", + "@biconomy/common": "^4.0.1", "@ethersproject/abi": "^5.7.0", "merkletreejs": "^0.3.11", - "viem": "^2.7.3" + "viem": "^2.7.12" }, "devDependencies": { "@types/node": "^20.11.10", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", - "npm-dts": "^1.3.12" + "npm-dts": "^1.3.12", + "@biconomy/paymaster": "^4.0.1", + "@biconomy/modules": "^4.0.1" } } diff --git a/packages/modules/src/BaseValidationModule.ts b/packages/modules/src/BaseValidationModule.ts index 525fe122d..4f739f782 100644 --- a/packages/modules/src/BaseValidationModule.ts +++ b/packages/modules/src/BaseValidationModule.ts @@ -31,7 +31,8 @@ export abstract class BaseValidationModule implements IValidationModule { abstract signMessage(_message: Uint8Array | string): Promise; - async signMessageSmartAccountSigner(message: string | Uint8Array, signer: SmartAccountSigner): Promise { + async signMessageSmartAccountSigner(_message: string | Uint8Array, signer: SmartAccountSigner): Promise { + const message = typeof _message === "string" ? _message : { raw: _message }; let signature: `0x${string}` = await signer.signMessage(message); const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 4c8847e17..d3b222791 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -101,7 +101,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // signer must be the same for all the sessions const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner); - const signature = await sessionSigner.signMessage(toBytes(userOpHash)); + const signature = await sessionSigner.signMessage({ raw: toBytes(userOpHash) }); for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index 737a43d07..71c515f9a 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -68,7 +68,7 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { } async signUserOpHash(userOpHash: string): Promise { - const sig = await this.signer.signMessage(toBytes(userOpHash)); + const sig = await this.signer.signMessage({ raw: toBytes(userOpHash) }); return sig; } @@ -79,7 +79,8 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { * @returns {Promise} A promise resolving to the signature or error message. * @throws {Error} If the signer type is invalid or unsupported. */ - async signMessage(message: Uint8Array | string): Promise { + async signMessage(_message: Uint8Array | string): Promise { + const message = typeof _message === "string" ? _message : { raw: _message }; let signature = await this.signer.signMessage(message); const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index e51aae190..be5815210 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -74,7 +74,7 @@ export class MultiChainValidationModule extends BaseValidationModule { } async signUserOpHash(userOpHash: string): Promise { - const sig = await this.signer.signMessage(toBytes(userOpHash)); + const sig = await this.signer.signMessage({ raw: toBytes(userOpHash) }); return sig; } @@ -85,7 +85,8 @@ export class MultiChainValidationModule extends BaseValidationModule { * @returns {Promise} A promise resolving to the signature or error message. * @throws {Error} If the signer type is invalid or unsupported. */ - async signMessage(message: Uint8Array | string): Promise { + async signMessage(_message: Uint8Array | string): Promise { + const message = typeof _message === "string" ? _message : { raw: _message }; let signature = await this.signer.signMessage(message); const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); @@ -116,7 +117,7 @@ export class MultiChainValidationModule extends BaseValidationModule { // Create a new Merkle tree using the leaves array const merkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true }); - let multichainSignature = await this.signer.signMessage(toBytes(merkleTree.getHexRoot())); + let multichainSignature = await this.signer.signMessage({ raw: toBytes(merkleTree.getHexRoot()) }); const potentiallyIncorrectV = parseInt(multichainSignature.slice(-2), 16); if (![27, 28].includes(potentiallyIncorrectV)) { diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index f8e49d859..b0a45886b 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -162,7 +162,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { const { signer: sessionSigner } = await convertSigner(params.sessionSigner); // Use the sessionSigner to sign the user operation - const signature = await sessionSigner.signMessage(toBytes(userOpHash)); + const signature = await sessionSigner.signMessage({ raw: toBytes(userOpHash) }); const sessionSignerData = await this.getLeafInfo(params); diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 335ac30a2..025bd24b2 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/particle-auth", - "version": "4.0.0", + "version": "4.0.1", "description": "Particle auth for Biconomy SDK", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index 1348e71c1..4154b4d37 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/paymaster", - "version": "4.0.0", + "version": "4.0.1", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -53,9 +53,9 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "3.0.0-alpha.4", - "@biconomy/common": "4.0.0", - "viem": "^2.7.3" + "@alchemy/aa-core": "^3.0.1", + "@biconomy/common": "^4.0.1", + "viem": "^2.7.12" }, "devDependencies": { "@types/node": "^20.11.10", diff --git a/packages/transak/package.json b/packages/transak/package.json index 018414ed1..332b568de 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/transak", - "version": "4.0.0", + "version": "4.0.1", "description": "transak for biconomy sdk", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/yarn.lock b/yarn.lock index 3a06bfd22..adc2554dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,14 +12,14 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== -"@alchemy/aa-core@3.0.0-alpha.4": - version "3.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.0.0-alpha.4.tgz#3abe0911f7c35cc6f0fc0cd03faad5673a01f0a9" - integrity sha512-mTVMDciBYIrXRgJnDiew2nRhjeAMKIK3RijGR3TQ7Gn6cpY8ZKSiJoTM5yRCttx368jqz0BACD1mjTg/zU8+Cg== +"@alchemy/aa-core@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.0.1.tgz#cfd44657ed4098f23ebae852668685194c6fd1d3" + integrity sha512-LoPSikQFpza2SR0vzKAiOyLqNabShXlTtv350VG6EzDqzDzEqGQNuq9l5zlsQn/ZL2Qud9cKJA5TTdRyDB4PbQ== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" - viem "^2.5.0" + viem "^2.7.8" zod "^3.22.4" "@ampproject/remapping@^2.2.0": @@ -43,7 +43,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.11.6", "@babel/core@^7.12.3": +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== @@ -324,42 +324,6 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@chainsafe/as-sha256@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" - integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== - -"@chainsafe/persistent-merkle-tree@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" - integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/persistent-merkle-tree@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" - integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/ssz@^0.10.0": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" - integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.5.0" - -"@chainsafe/ssz@^0.9.2": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" - integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.4.2" - case "^1.6.3" - "@colors/colors@1.6.0": version "1.6.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" @@ -542,7 +506,7 @@ ethereum-cryptography "^2.0.0" micro-ftch "^0.3.1" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -557,7 +521,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": +"@ethersproject/abstract-provider@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== @@ -570,7 +534,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": +"@ethersproject/abstract-signer@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== @@ -581,7 +545,7 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": +"@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -592,14 +556,14 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": +"@ethersproject/base64@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": +"@ethersproject/basex@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== @@ -607,7 +571,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -616,37 +580,21 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": +"@ethersproject/constants@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": +"@ethersproject/hash@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -661,7 +609,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": +"@ethersproject/hdnode@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== @@ -679,7 +627,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": +"@ethersproject/json-wallets@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== @@ -698,7 +646,7 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -706,19 +654,19 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": +"@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": +"@ethersproject/networks@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": +"@ethersproject/pbkdf2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== @@ -726,14 +674,14 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": +"@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": +"@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -759,7 +707,7 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": +"@ethersproject/random@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== @@ -767,7 +715,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": +"@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== @@ -775,7 +723,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": +"@ethersproject/sha2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== @@ -784,7 +732,7 @@ "@ethersproject/logger" "^5.7.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": +"@ethersproject/signing-key@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== @@ -796,19 +744,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": +"@ethersproject/strings@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -817,7 +753,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": +"@ethersproject/transactions@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== @@ -832,16 +768,7 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/signing-key" "^5.7.0" -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": +"@ethersproject/wallet@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== @@ -862,7 +789,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": +"@ethersproject/web@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== @@ -873,7 +800,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": +"@ethersproject/wordlists@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== @@ -941,7 +868,7 @@ js-yaml "^3.13.1" resolve-from "^5.0.0" -"@istanbuljs/schema@^0.1.2": +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== @@ -1148,9 +1075,9 @@ "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.0.1": version "1.1.2" @@ -1324,139 +1251,141 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/ethereumjs-block@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" - integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" +"@nomicfoundation/ethereumjs-block@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.4.tgz#ff2acb98a86b9290e35e315a6abfb9aebb9cf39e" + integrity sha512-AcyacJ9eX/uPEvqsPiB+WO1ymE+kyH48qGGiGV+YTojdtas8itUTW5dehDSOXEEItWGbbzEJ4PRqnQZlWaPvDw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" ethereum-cryptography "0.1.3" - ethers "^5.7.1" -"@nomicfoundation/ethereumjs-blockchain@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" - integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-ethash" "3.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - abstract-level "^1.0.3" +"@nomicfoundation/ethereumjs-blockchain@7.0.4": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.4.tgz#b77511b389290b186c8d999e70f4b15c27ef44ea" + integrity sha512-jYsd/kwzbmpnxx86tXsYV8wZ5xGvFL+7/P0c6OlzpClHsbFzeF41KrYA9scON8Rg6bZu3ZTv6JOAgj3t7USUfg== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.4" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-ethash" "3.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" debug "^4.3.3" ethereum-cryptography "0.1.3" - level "^8.0.0" - lru-cache "^5.1.1" - memory-level "^1.0.0" + lru-cache "^10.0.0" -"@nomicfoundation/ethereumjs-common@4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" - integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== +"@nomicfoundation/ethereumjs-common@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb" + integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg== dependencies: - "@nomicfoundation/ethereumjs-util" "9.0.2" - crc-32 "^1.2.0" + "@nomicfoundation/ethereumjs-util" "9.0.4" -"@nomicfoundation/ethereumjs-ethash@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" - integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - abstract-level "^1.0.3" - bigint-crypto-utils "^3.0.23" +"@nomicfoundation/ethereumjs-ethash@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.4.tgz#06cb2502b3012fb6c11cffd44af08aecf71310da" + integrity sha512-xvIrwIMl9sSaiYKRem68+O7vYdj7Q2XWv5P7JXiIkn83918QzWHvqbswTRsH7+r6X1UEvdsURRnZbvZszEjAaQ== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + bigint-crypto-utils "^3.2.2" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-evm@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" - integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== - dependencies: - "@ethersproject/providers" "^5.7.1" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" +"@nomicfoundation/ethereumjs-evm@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.4.tgz#c9c761767283ac53946185474362230b169f8f63" + integrity sha512-lTyZZi1KpeMHzaO6cSVisR2tjiTTedjo7PcmhI/+GNFo9BmyY6QYzGeSti0sFttmjbEMioHgXxl5yrLNRg6+1w== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-statemanager" "2.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + "@types/debug" "^4.1.9" debug "^4.3.3" ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" + rustbn-wasm "^0.2.0" -"@nomicfoundation/ethereumjs-rlp@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" - integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== +"@nomicfoundation/ethereumjs-rlp@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" + integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== -"@nomicfoundation/ethereumjs-statemanager@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" - integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== +"@nomicfoundation/ethereumjs-statemanager@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.4.tgz#bf14415e1f31b5ea8b98a0c027c547d0555059b6" + integrity sha512-HPDjeFrxw6llEi+BzqXkZ+KkvFnTOPczuHBtk21hRlDiuKuZz32dPzlhpRsDBGV1b5JTmRDUVqCS1lp3Gghw4Q== dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" debug "^4.3.3" ethereum-cryptography "0.1.3" - ethers "^5.7.1" js-sdsl "^4.1.4" + lru-cache "^10.0.0" -"@nomicfoundation/ethereumjs-trie@6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" - integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== +"@nomicfoundation/ethereumjs-trie@6.0.4": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.4.tgz#688a3f76646c209365ee6d959c3d7330ede5e609" + integrity sha512-3nSwQiFMvr2VFe/aZUyinuohYvtytUqZCUCvIWcPJ/BwJH6oQdZRB42aNFBJ/8nAh2s3OcroWpBLskzW01mFKA== dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" "@types/readable-stream" "^2.3.13" ethereum-cryptography "0.1.3" + lru-cache "^10.0.0" readable-stream "^3.6.0" -"@nomicfoundation/ethereumjs-tx@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" - integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== - dependencies: - "@chainsafe/ssz" "^0.9.2" - "@ethersproject/providers" "^5.7.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" +"@nomicfoundation/ethereumjs-tx@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" + integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-util@9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" - integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== +"@nomicfoundation/ethereumjs-util@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38" + integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q== dependencies: - "@chainsafe/ssz" "^0.10.0" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-vm@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" - integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-blockchain" "7.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-evm" "2.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-statemanager" "2.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" +"@nomicfoundation/ethereumjs-verkle@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-verkle/-/ethereumjs-verkle-0.0.2.tgz#7686689edec775b2efea5a71548f417c18f7dea4" + integrity sha512-bjnfZElpYGK/XuuVRmLS3yDvr+cDs85D9oonZ0YUa5A3lgFgokWMp76zXrxX2jVQ0BfHaw12y860n1+iOi6yFQ== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + lru-cache "^10.0.0" + rust-verkle-wasm "^0.0.1" + +"@nomicfoundation/ethereumjs-vm@7.0.4": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.4.tgz#e5a6eec4877dc62dda93003c6d7afd1fe4b9625b" + integrity sha512-gsA4IhmtWHI4BofKy3kio9W+dqZQs5Ji5mLjLYxHCkat+JQBUt5szjRKra2F9nGDJ2XcI/wWb0YWUFNgln4zRQ== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.4" + "@nomicfoundation/ethereumjs-blockchain" "7.0.4" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-evm" "2.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-statemanager" "2.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" debug "^4.3.3" ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": version "0.1.1" @@ -1838,9 +1767,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.16" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.16.tgz#5b56104b0d7a6c87d17eb7f2d597ee358a430cd9" - integrity sha512-vr30c56QmMMxXP59hL4MysdmKNHCD2JmMEdhfly5C+HB+N4p/a7ioblioatRIukgZPP9/Qnc7TPJISGlQaGWpA== + version "1.3.18" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.18.tgz#ce763a845f88ff118c27148579de6934ff376298" + integrity sha512-R38ddazbt5Xt8noVA4Fproc89Mm7UmaRvc7Xkl0XP0sp+HaUJjEwFpL4zTCATYb2sUx3cJgV46fVOuD7/2QWIA== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -1869,7 +1798,7 @@ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== -"@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": +"@scure/base@^1.1.1", "@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": version "1.1.5" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== @@ -2228,9 +2157,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292" - integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw== + version "20.11.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.18.tgz#06912d152e47c2ac0a393c62141e623ca6005d46" + integrity sha512-ABT5VWnnYneSBcNWYSCuR05M826RoMyMSGiFivXGx6ZUIsXb9vn4643IEwkg2zbEOSgAiSogtapN2fgc4mAPlw== dependencies: undici-types "~5.26.4" @@ -2445,19 +2374,6 @@ abstract-level@1.0.3: module-error "^1.0.1" queue-microtask "^1.2.3" -abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" - integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== - dependencies: - buffer "^6.0.3" - catering "^2.1.0" - is-buffer "^2.0.5" - level-supports "^4.0.0" - level-transcoder "^1.0.1" - module-error "^1.0.1" - queue-microtask "^1.2.3" - abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" @@ -2648,7 +2564,7 @@ args@5.0.3: leven "2.1.0" mri "1.1.4" -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -2736,7 +2652,7 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -arraybuffer.prototype.slice@^1.0.2: +arraybuffer.prototype.slice@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== @@ -2784,10 +2700,12 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" - integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== +available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" axios@^1.0.0, axios@^1.3.6: version "1.6.7" @@ -2885,7 +2803,7 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -bigint-crypto-utils@^3.0.23: +bigint-crypto-utils@^3.2.2: version "3.3.0" resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== @@ -2970,16 +2888,6 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browser-level@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" - integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.1" - module-error "^1.0.2" - run-parallel-limit "^1.1.0" - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -2998,12 +2906,12 @@ browserify-aes@^1.2.0: safe-buffer "^5.0.1" browserslist@^4.22.2: - version "4.22.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" - integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001580" - electron-to-chromium "^1.4.648" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" node-releases "^2.0.14" update-browserslist-db "^1.0.13" @@ -3170,15 +3078,16 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.6.tgz#6c46675fc7a5e9de82d75a233d586c8b7ac0d931" - integrity sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.3" - set-function-length "^1.2.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" @@ -3209,17 +3118,12 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001580: +caniuse-lite@^1.0.30001587: version "1.0.30001587" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz#a0bce920155fa56a1885a69c74e1163fc34b4881" integrity sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA== -case@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" - integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== - -catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: +catering@^2.0.0, catering@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== @@ -3317,17 +3221,6 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -classic-level@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" - integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.0" - module-error "^1.0.1" - napi-macros "^2.2.2" - node-gyp-build "^4.3.0" - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -3658,11 +3551,6 @@ cosmiconfig@^8.2.0: parse-json "^5.2.0" path-type "^4.0.0" -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -3799,15 +3687,14 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-data-property@^1.0.1, define-data-property@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.2.tgz#f3c33b4f0102360cd7c0f5f28700f5678510b63a" - integrity sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g== +define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: + es-define-property "^1.0.0" es-errors "^1.3.0" - get-intrinsic "^1.2.2" gopd "^1.0.1" - has-property-descriptors "^1.0.1" define-lazy-prop@^2.0.0: version "2.0.0" @@ -3936,10 +3823,10 @@ ejs@^3.1.7: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.648: - version "1.4.665" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz#681700bd590b0e5a3be66e3e2874ce62abcf5da5" - integrity sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw== +electron-to-chromium@^1.4.668: + version "1.4.670" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.670.tgz#0fc5ac92ada8371e898ea72d577ffc888167a017" + integrity sha512-hcijYOWjOtjKrKPtNA6tuLlA/bTLO3heFG8pQA6mLpq7dRydSWicXova5lyxDzp1iVJaYhK7J2OQlGE52KYn7A== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -4036,61 +3923,70 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + version "1.22.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" + integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== 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" + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.6" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.2" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" 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" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" 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-typed-array "^1.1.13" 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" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" 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-buffer "^1.0.1" 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" + which-typed-array "^1.1.14" es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-set-tostringtag@^2.0.1: +es-set-tostringtag@^2.0.2: 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== @@ -4411,42 +4307,6 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethers@^5.7.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -4720,9 +4580,9 @@ flat@^5.0.2: 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== + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== fn.name@1.x.x: version "1.1.0" @@ -4841,11 +4701,6 @@ function.prototype.name@^1.1.6: 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.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - 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" @@ -4942,7 +4797,7 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: +get-symbol-description@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== @@ -5190,22 +5045,23 @@ hard-rejection@^2.1.0: integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== hardhat@^2.17.3: - version "2.19.5" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.5.tgz#6017c35ae2844b669e9bcc84c3d05346d4ef031c" - integrity sha512-vx8R7zWCYVgM56vA6o0Wqx2bIIptkN4TMs9QwDqZVNGRhMzBfzqUeEYbp+69gxWp1neg2V2nYQUaaUv7aom1kw== + version "2.20.1" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.20.1.tgz#3ad8f2b003a96c9ce80a55fec3575580ff2ddcd4" + integrity sha512-q75xDQiQtCZcTMBwjTovrXEU5ECr49baxr4/OBkIu/ULTPzlB20yk1dRWNmD2IFbAeAeXggaWvQAdpiScaHtPw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-blockchain" "7.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-evm" "2.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-statemanager" "2.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - "@nomicfoundation/ethereumjs-vm" "7.0.2" + "@nomicfoundation/ethereumjs-block" "5.0.4" + "@nomicfoundation/ethereumjs-blockchain" "7.0.4" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-evm" "2.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-statemanager" "2.0.4" + "@nomicfoundation/ethereumjs-trie" "6.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + "@nomicfoundation/ethereumjs-verkle" "0.0.2" + "@nomicfoundation/ethereumjs-vm" "7.0.4" "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" @@ -5259,24 +5115,24 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -5305,7 +5161,7 @@ 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: +hasown@^2.0.0, hasown@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== @@ -5549,7 +5405,7 @@ inquirer@^8.2.4: through "^2.3.6" wrap-ansi "^6.0.1" -internal-slot@^1.0.5: +internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -5573,7 +5429,7 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: +is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== @@ -5687,9 +5543,9 @@ is-lambda@^1.0.1: integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== 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== + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.0.4: version "1.0.7" @@ -5744,11 +5600,11 @@ is-regex@^1.1.4: 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== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-ssh@^1.4.0: version "1.4.0" @@ -5788,7 +5644,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.13, is-typed-array@^1.1.9: +is-typed-array@^1.1.13: version "1.1.13" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== @@ -5861,13 +5717,13 @@ istanbul-lib-instrument@^5.0.4: semver "^6.3.0" istanbul-lib-instrument@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" - integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" + integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" istanbul-lib-coverage "^3.2.0" semver "^7.5.4" @@ -5890,9 +5746,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -6566,15 +6422,6 @@ level-transcoder@^1.0.1: buffer "^6.0.3" module-error "^1.0.1" -level@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" - integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== - dependencies: - abstract-level "^1.0.4" - browser-level "^1.0.1" - classic-level "^1.2.0" - leveldown@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" @@ -6716,7 +6563,7 @@ logform@^2.3.2, logform@^2.4.0: safe-stable-stringify "^2.3.1" triple-beam "^1.3.0" -lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": +lru-cache@^10.0.0, lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": version "10.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== @@ -6864,11 +6711,6 @@ marked@^4.3.0: resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -6878,15 +6720,6 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -memory-level@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" - integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== - dependencies: - abstract-level "^1.0.0" - functional-red-black-tree "^1.0.1" - module-error "^1.0.1" - memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -7178,7 +7011,7 @@ modify-values@^1.0.1: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -module-error@^1.0.1, module-error@^1.0.2: +module-error@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== @@ -7228,11 +7061,6 @@ mz@^2.4.0: object-assign "^4.0.1" thenify-all "^1.0.0" -napi-macros@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" - integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== - napi-macros@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" @@ -7254,9 +7082,9 @@ neo-async@^2.6.2: integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nock@^13.2.9: - version "13.5.1" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.1.tgz#4e40f9877ad0d43b7cdb474261c190f3715dd806" - integrity sha512-+s7b73fzj5KnxbKH4Oaqz07tQ8degcMilU4rrmnKvI//b0JMBU4wEXFQ8zqr+3+L4eWSfU3H/UoIVGUV0tue1Q== + version "13.5.3" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.3.tgz#9858adf5b840696a410baf98bda720d5fad4f075" + integrity sha512-2NlGmHIK2rTeyy7UaY1ZNg0YZfEJMxghXgZi0b4DBsUyoDNTTxZeCSG1nmirAWF44RkkoV8NnegLVQijgVapNQ== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" @@ -7592,7 +7420,7 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2, object.assign@^4.1.4: +object.assign@^4.1.2, object.assign@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -8010,6 +7838,11 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -8263,7 +8096,7 @@ regexp-tree@~0.1.1: resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== -regexp.prototype.flags@^1.5.1: +regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -8395,13 +8228,6 @@ run-async@^2.4.0: resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -run-parallel-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" - integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== - dependencies: - queue-microtask "^1.2.2" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -8409,10 +8235,17 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rustbn.js@~0.2.0: +rust-verkle-wasm@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/rust-verkle-wasm/-/rust-verkle-wasm-0.0.1.tgz#fd8396a7060d8ee8ea10da50ab6e862948095a74" + integrity sha512-BN6fiTsxcd2dCECz/cHtGTt9cdLJR925nh7iAuRcj8ymKw7OOaPmCneQZ7JePOJ/ia27TjEL91VdOi88Yf+mcA== + +rustbn-wasm@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + resolved "https://registry.yarnpkg.com/rustbn-wasm/-/rustbn-wasm-0.2.0.tgz#0407521fb55ae69eeb4968d01885d63efd1c4ff9" + integrity sha512-FThvYFNTqrEKGqXuseeg0zR7yROh/6U1617mCHF68OVqrN1tNKRN7Tdwy4WayPVsCmmK+eMxtIZX1qL6JxTkMg== + dependencies: + "@scure/base" "^1.1.1" rxjs@^7.5.5, rxjs@^7.8.1: version "7.8.1" @@ -8421,7 +8254,7 @@ rxjs@^7.5.5, rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-array-concat@^1.0.1: +safe-array-concat@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== @@ -8441,7 +8274,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex-test@^1.0.0: +safe-regex-test@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== @@ -8524,7 +8357,7 @@ set-blocking@^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.2.0: +set-function-length@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== @@ -8537,13 +8370,14 @@ set-function-length@^1.2.0: has-property-descriptors "^1.0.1" set-function-name@^2.0.1: - 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== + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" setimmediate@^1.0.5: version "1.0.5" @@ -8733,9 +8567,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" - integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -9291,7 +9125,7 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typed-array-buffer@^1.0.0: +typed-array-buffer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== @@ -9301,34 +9135,39 @@ typed-array-buffer@^1.0.0: is-typed-array "^1.1.13" 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== + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" 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== + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" 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== + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" typedarray@^0.0.6: version "0.0.6" @@ -9549,10 +9388,10 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -viem@^2.5.0, viem@^2.7.3: - version "2.7.8" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.8.tgz#ca60552190cdc501cf4e1d1140d8da7625b1b1f4" - integrity sha512-5r5pkBDBmihCvMx4b3MqtP0FoZCRWE2ML1DssU80+vhJQur0PKd4yHdLbbvoiGGVD6bYiA394juhfdSvXIGgFA== +viem@^2.7.12, viem@^2.7.8: + version "2.7.12" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.12.tgz#c79f68d77f5e46c3b78443df54afb067cbc827c3" + integrity sha512-NbV+Bycw0I4X8y6A04mgJ6+Imt7xXwflgnqisR3JXoJRNc77YSaQCscFN/dmwGLESTkgegJvi+j4nZY32GTpwQ== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" @@ -9625,7 +9464,7 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.13, which-typed-array@^1.1.14: +which-typed-array@^1.1.14: version "1.1.14" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== From 1a8f296c26c9fedd57023f8f6423d7662a3adfee Mon Sep 17 00:00:00 2001 From: joepegler Date: Thu, 22 Feb 2024 13:38:34 +0000 Subject: [PATCH 1116/1247] Chore(SMA-604): ecdsa tests (#418) * Resolved SMA-604 * Update module types for jsdoc * ts fix * types fix * yarn lock * PR comments * typos --- packages/account/src/index.ts | 5 ++ packages/account/src/utils/Types.ts | 2 +- packages/bundler/CHANGELOG.md | 1 + .../modules/src/BatchedSessionRouterModule.ts | 1 - packages/modules/src/utils/Types.ts | 50 +++++++++++++-- .../tests/ecdsaValidationModule.e2e.spec.ts | 63 +++++++++++++++++++ 6 files changed, 114 insertions(+), 8 deletions(-) create mode 100644 packages/modules/tests/ecdsaValidationModule.e2e.spec.ts diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index 615c0a6da..e88375a35 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -36,6 +36,11 @@ export { DEFAULT_SESSION_KEY_MANAGER_MODULE, DEFAULT_MULTICHAIN_MODULE, DEFAULT_BATCHED_SESSION_ROUTER_MODULE, + type ECDSAOwnershipValidationModuleConfig, + type BatchedSessionRouterModuleConfig, + type SessionKeyManagerModuleConfig, + type MultiChainValidationModuleConfig, + type SessionValidationModuleConfig, } from "@biconomy/modules"; export const createSmartAccountClient = BiconomySmartAccountV2.create; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 0967d0f8f..65f26b5e4 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -20,7 +20,7 @@ export type BiconomyFactoriesByVersion = Record; export type BiconomyImplementationsByVersion = Record; export type SmartAccountConfig = { - /** entryPointAddress: address of the smart account factory */ + /** entryPointAddress: address of the entry point */ entryPointAddress: string; /** factoryAddress: address of the smart account factory */ bundler?: IBundler; diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index 35465063e..8d1c22faf 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -6,6 +6,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ## 4.0.0 (2023-07-02) Export createBundler alias for static Bundler.create call +Abstract away chainId: [0fefb35](https://github.com/bcnmy/biconomy-client-sdk/pull/375/commits/0fefb358e3927d7b026774a785d3711e80f1049a) ## 3.1.3 (2023-12-28) diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index 4c8847e17..ac6745196 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -62,7 +62,6 @@ export class BatchedSessionRouterModule extends BaseValidationModule { const sessionModule = await SessionKeyManagerModule.create({ moduleAddress: instance.sessionManagerModuleAddress, smartAccountAddress: moduleConfig.smartAccountAddress, - nodeClientUrl: moduleConfig.nodeClientUrl, storageType: moduleConfig.storageType, }); diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index b4b96a2c7..e55d5c8a5 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,44 +1,56 @@ import { Chain, Hex } from "viem"; -import { UserOperationStruct, SmartAccountSigner } from "@alchemy/aa-core"; +import { SmartAccountSigner, UserOperationStruct } from "@alchemy/aa-core"; import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; import { ISessionStorage } from "../interfaces/ISessionStorage.js"; import { SupportedSigner } from "@biconomy/common"; export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' export interface BaseValidationModuleConfig { + /** entryPointAddress: address of the entry point */ entryPointAddress?: Hex; } export interface ECDSAOwnershipValidationModuleConfig extends BaseValidationModuleConfig { + /** Address of the module */ moduleAddress?: Hex; + /** Version of the module */ version?: ModuleVersion; + /** Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ signer: SupportedSigner; } export interface ECDSAOwnershipValidationModuleConfigConstructorProps extends BaseValidationModuleConfig { + /** Address of the module */ moduleAddress?: Hex; + /** Version of the module */ version?: ModuleVersion; + /** Signer: Converted from viemWallet or ethers signer to SmartAccountSigner */ signer: SmartAccountSigner; } export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfig { + /** Address of the module */ moduleAddress?: Hex; + /** Version of the module */ version?: ModuleVersion; - nodeClientUrl?: string; + /** SmartAccount address */ smartAccountAddress: string; storageType?: StorageType; sessionStorageClient?: ISessionStorage; } export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleConfig { + /** Address of the module */ moduleAddress?: Hex; + /** Version of the module */ version?: ModuleVersion; - - sessionKeyManagerModule?: SessionKeyManagerModule; // could be BaseValidationModule - + /** Session Key Manager module: Could be BaseValidationModule */ + sessionKeyManagerModule?: SessionKeyManagerModule; + /** Session Key Manager module address */ sessionManagerModuleAddress?: Hex; - nodeClientUrl?: string; + /** Address of the associated smart account */ smartAccountAddress: string; + /** Storage type, e.g. local storage */ storageType?: StorageType; } @@ -47,9 +59,13 @@ export enum StorageType { } export type SessionParams = { + /** Redundant now as we've favoured uuid() */ sessionID?: string; + /** Session Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ sessionSigner: SupportedSigner; + /** The session validation module is a sub-module smart-contract which works with session key manager validation module. It validates the userop calldata against the defined session permissions (session key data) within the contract. */ sessionValidationModule?: Hex; + /** Additional info if needed to be appended in signature */ additionalSessionData?: string; }; @@ -57,21 +73,28 @@ export type ModuleInfo = { // Could be a full object of below params and that way it can be an array too! // sessionParams?: SessionParams[] // where SessionParams is below four sessionID?: string; + /** Session Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ sessionSigner?: SupportedSigner; + /** The session validation module is a sub-module smart-contract which works with session key manager validation module. It validates the userop calldata against the defined session permissions (session key data) within the contract. */ sessionValidationModule?: Hex; + /** Additional info if needed to be appended in signature */ additionalSessionData?: string; batchSessionParams?: SessionParams[]; }; export interface SendUserOpParams extends ModuleInfo { + /** "validation_and_execution" is recommended during development for improved debugging & devEx, but will add some additional latency to calls. "validation" can be used in production ro remove this latency once flows have been tested. */ simulationType?: SimulationType; } export type SimulationType = "validation" | "validation_and_execution"; export type SignerData = { + /** Public key */ pbKey: string; + /** Private key */ pvKey: `0x${string}`; + /** Network Id */ chainId?: Chain; }; @@ -81,27 +104,38 @@ export type CreateSessionDataResponse = { }; export interface CreateSessionDataParams { + /** window end for the session key */ validUntil: number; + /** window start for the session key */ validAfter: number; sessionValidationModule: Hex; sessionPublicKey: Hex; sessionKeyData: Hex; + /** we generate uuid based sessionId. but if you prefer to track it on your side and attach custom session identifier this can be passed */ preferredSessionId?: string; } export interface MultiChainValidationModuleConfig extends BaseValidationModuleConfig { + /** Address of the module */ moduleAddress?: Hex; + /** Version of the module */ version?: ModuleVersion; + /** Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ signer: SupportedSigner; } export interface MultiChainValidationModuleConfigConstructorProps extends BaseValidationModuleConfig { + /** Address of the module */ moduleAddress?: Hex; + /** Version of the module */ version?: ModuleVersion; + /** Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ signer: SmartAccountSigner; } export type MultiChainUserOpDto = { + /** window end timestamp */ validUntil?: number; + /** window start timestamp */ validAfter?: number; chainId: number; userOp: Partial; @@ -112,11 +146,15 @@ export interface BaseSessionKeyData { } export interface ERC20SessionKeyData extends BaseSessionKeyData { + /** ERC20 token address */ token: Hex; + /** Recipient address */ recipient: Hex; + /** ERC20 amount (Bigint) */ maxAmount: bigint; } export interface SessionValidationModuleConfig { + /** Address of the module */ moduleAddress: string; } diff --git a/packages/modules/tests/ecdsaValidationModule.e2e.spec.ts b/packages/modules/tests/ecdsaValidationModule.e2e.spec.ts new file mode 100644 index 000000000..84b3f627e --- /dev/null +++ b/packages/modules/tests/ecdsaValidationModule.e2e.spec.ts @@ -0,0 +1,63 @@ +import { PaymasterMode } from "@biconomy/paymaster"; +import { TestData } from "../../../tests"; +import { createSmartAccountClient } from "../../account/src/index"; +import { Hex, encodeFunctionData, parseAbi } from "viem"; +import { DEFAULT_MULTICHAIN_MODULE, createECDSAOwnershipValidationModule } from "@biconomy/modules"; + +describe("Account with ECDSAOwnershipValidationModule Module Tests", () => { + let mumbai: TestData; + let baseSepolia: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [mumbai, baseSepolia] = testDataPerChain; + }); + + it("should create a ECDSAOwnershipValidationModule with signer", async () => { + const { + bundlerUrl, + whale: { viemWallet: signer }, + } = mumbai; + + const defaultValidationModule = await createECDSAOwnershipValidationModule({ signer }); + // Should not require a signer or chainId + const smartAccount = await createSmartAccountClient({ + bundlerUrl, + defaultValidationModule, + signer, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); + }); + + it("should create a ECDSAOwnershipValidationModule without signer", async () => { + const { + bundlerUrl, + whale: { viemWallet: signer }, + } = mumbai; + + const defaultValidationModule = await createECDSAOwnershipValidationModule({ signer }); + // Should not require a signer or chainId + const smartAccount = await createSmartAccountClient({ + bundlerUrl, + defaultValidationModule, + }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); + }); + + it("should create a ECDSAOwnershipValidationModule by default, without explicitly setting it on the smart account", async () => { + const { + bundlerUrl, + whale: { viemWallet: signer }, + } = mumbai; + const defaultValidationModule = await createECDSAOwnershipValidationModule({ signer }); + const smartAccount = await createSmartAccountClient({ bundlerUrl, signer }); + const address = await smartAccount.getAccountAddress(); + expect(address).toBeTruthy(); + const smartAccountValidationModuleAddress = await smartAccount.activeValidationModule.getAddress(); + expect(smartAccountValidationModuleAddress).toEqual(defaultValidationModule.moduleAddress); + }); +}); From 5fb3eed3b32d5344d4777773682ebbb340d7e012 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Thu, 22 Feb 2024 17:40:56 +0000 Subject: [PATCH 1117/1247] Fix(SMA-677): Particle auth build broken --- packages/bundler/package.json | 4 ++-- packages/common/package.json | 2 +- packages/modules/package.json | 8 ++++---- packages/particle-auth/CHANGELOG.md | 29 ++++++++++------------------- packages/particle-auth/package.json | 2 +- packages/particle-auth/src/index.ts | 5 ++--- packages/paymaster/package.json | 4 ++-- packages/transak/package.json | 2 +- yarn.lock | 2 +- 9 files changed, 24 insertions(+), 34 deletions(-) diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 5fff55256..1700900a3 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/bundler", - "version": "4.0.1", + "version": "4.0.2", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -57,7 +57,7 @@ }, "dependencies": { "@alchemy/aa-core": "^3.0.1", - "@biconomy/common": "^4.0.1", + "@biconomy/common": "^4.0.2", "viem": "^2.7.12" }, "devDependencies": { diff --git a/packages/common/package.json b/packages/common/package.json index dc6d79d65..ddeec86df 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "4.0.1", + "version": "4.0.2", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/modules/package.json b/packages/modules/package.json index 3081e8702..886ceed33 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/modules", - "version": "4.0.1", + "version": "4.0.2", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -54,7 +54,7 @@ }, "dependencies": { "@alchemy/aa-core": "^3.0.1", - "@biconomy/common": "^4.0.1", + "@biconomy/common": "^4.0.2", "@ethersproject/abi": "^5.7.0", "merkletreejs": "^0.3.11", "viem": "^2.7.12" @@ -64,7 +64,7 @@ "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12", - "@biconomy/paymaster": "^4.0.1", - "@biconomy/modules": "^4.0.1" + "@biconomy/paymaster": "^4.0.2", + "@biconomy/modules": "^4.0.2" } } diff --git a/packages/particle-auth/CHANGELOG.md b/packages/particle-auth/CHANGELOG.md index 0b1ef187b..70caed909 100644 --- a/packages/particle-auth/CHANGELOG.md +++ b/packages/particle-auth/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.2 (2023-12-28) + +Fix build + ## 4.0.0 (2023-12-28) VERSION Bump Only. @@ -17,43 +21,30 @@ VERSION Bump Only. ## 3.1.1 (2023-11-09) - ### Features -* Upgrade package version ([])(https://github.com/bcnmy/biconomy-client-sdk/commit/d467b85) - +- Upgrade package version ([])(https://github.com/bcnmy/biconomy-client-sdk/commit/d467b85) ## 3.1.0 (2023-09-20) -Version Bump Only. - +Version Bump Only. # 3.0.0 (2023-08-28) - ### Features -* particle auth integration ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) - - - - +- particle auth integration ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) ## 3.0.0-alpha.0 (2023-07-12) - - - - ## 2.0.1 (2023-06-10) - ### Bug Fixes -* typo ([0a63ff1](https://github.com/bcnmy/biconomy-client-sdk/commit/0a63ff17bb38b1bc2fd68669b74c2efd5a959d31)) - +- typo ([0a63ff1](https://github.com/bcnmy/biconomy-client-sdk/commit/0a63ff17bb38b1bc2fd68669b74c2efd5a959d31)) ## 2.0.0 (2023-30-05) ### Features -* particle-auth ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) + +- particle-auth ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 025bd24b2..59b138cdf 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/particle-auth", - "version": "4.0.1", + "version": "4.0.2", "description": "Particle auth for Biconomy SDK", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/packages/particle-auth/src/index.ts b/packages/particle-auth/src/index.ts index 1d3b6a0ff..03966301b 100644 --- a/packages/particle-auth/src/index.ts +++ b/packages/particle-auth/src/index.ts @@ -1,5 +1,4 @@ import * as ParticleAuth from "@particle-network/auth"; import * as BiconomyAccount from "@particle-network/biconomy"; -import { ParticleProvider, ParticleDelegateProvider } from "@particle-network/provider"; - -export { ParticleAuth as ParticleAuthModule, BiconomyAccount as BiconomyAccountModule, ParticleProvider, ParticleDelegateProvider }; +export { ParticleProvider, ParticleDelegateProvider } from "@particle-network/provider"; +export { ParticleAuth as ParticleAuthModule, BiconomyAccount as BiconomyAccountModule }; diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index 4154b4d37..a308eca6f 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/paymaster", - "version": "4.0.1", + "version": "4.0.2", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -54,7 +54,7 @@ }, "dependencies": { "@alchemy/aa-core": "^3.0.1", - "@biconomy/common": "^4.0.1", + "@biconomy/common": "^4.0.2", "viem": "^2.7.12" }, "devDependencies": { diff --git a/packages/transak/package.json b/packages/transak/package.json index 332b568de..ca47fc6cb 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/transak", - "version": "4.0.1", + "version": "4.0.2", "description": "transak for biconomy sdk", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/yarn.lock b/yarn.lock index adc2554dc..b894c4ac7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5132,7 +5132,7 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== From a6194348ff64f6fea3cc452f7fe45ca7c77db098 Mon Sep 17 00:00:00 2001 From: GabiDev Date: Fri, 23 Feb 2024 12:07:35 +0200 Subject: [PATCH 1118/1247] Increased test timeouts --- .../account/tests/account.read.e2e.spec.ts | 10 +- packages/modules/tests/modules.spec.ts | 4 +- yarn.lock | 100 +++++++++--------- 3 files changed, 59 insertions(+), 55 deletions(-) diff --git a/packages/account/tests/account.read.e2e.spec.ts b/packages/account/tests/account.read.e2e.spec.ts index 778fd5db9..9fc3a1f02 100644 --- a/packages/account/tests/account.read.e2e.spec.ts +++ b/packages/account/tests/account.read.e2e.spec.ts @@ -23,7 +23,7 @@ describe("Account Tests", () => { const isEnabled = await smartWallet.isModuleEnabled(DEFAULT_ECDSA_OWNERSHIP_MODULE); expect(isEnabled).toBeTruthy(); - }); + }, 30000); it("should get all modules", async () => { const { @@ -40,7 +40,7 @@ describe("Account Tests", () => { expect(modules).toContain("0x000000D50C68705bd6897B2d17c7de32FB519fDA"); // erc20 module expect(modules).toContain("0x000002FbFfedd9B33F4E7156F2DE8D48945E7489"); // session manager module expect(modules).toContain("0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e"); // ecdsa ownership module - }); + }, 30000); it("should disabled module data", async () => { const { @@ -55,7 +55,7 @@ describe("Account Tests", () => { const disableModuleData = await smartWallet.getDisableModuleData(DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_ECDSA_OWNERSHIP_MODULE); expect(disableModuleData).toBeTruthy(); - }); + }, 30000); it("should get setup and enable module data", async () => { const { @@ -72,7 +72,7 @@ describe("Account Tests", () => { const initData = await module.getInitData(); const setupAndEnableModuleData = await smartWallet.getSetupAndEnableModuleData(DEFAULT_ECDSA_OWNERSHIP_MODULE, initData); expect(setupAndEnableModuleData).toBeTruthy(); - }); + }, 30000); it("should read estimated user op gas values", async () => { const { @@ -99,5 +99,5 @@ describe("Account Tests", () => { expect(estimatedGas.callGasLimit).toBeTruthy(); expect(estimatedGas.preVerificationGas).toBeTruthy(); expect(estimatedGas).toHaveProperty("paymasterAndData", "0x"); - }); + }, 35000); }); diff --git a/packages/modules/tests/modules.spec.ts b/packages/modules/tests/modules.spec.ts index 9785b2d2d..ac2dd22a2 100644 --- a/packages/modules/tests/modules.spec.ts +++ b/packages/modules/tests/modules.spec.ts @@ -23,7 +23,7 @@ describe("Account Tests", () => { expect(address).toBeTruthy(); // expect the relevant module to be set expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); - }); + }, 50000); it("should create a ECDSAOwnershipValidationModule from a viem signer using convertSigner", async () => { const { @@ -41,5 +41,5 @@ describe("Account Tests", () => { expect(address).toBeTruthy(); // expect the relevant module to be set expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); - }); + }, 50000); }); diff --git a/yarn.lock b/yarn.lock index 5bda47430..0531ff0d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2157,9 +2157,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195" - integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ== + version "20.11.20" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.20.tgz#f0a2aee575215149a62784210ad88b3a34843659" + integrity sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg== dependencies: undici-types "~5.26.4" @@ -2700,7 +2700,7 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -available-typed-arrays@^1.0.6: +available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== @@ -3119,9 +3119,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001588" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz#07f16b65a7f95dba82377096923947fb25bce6e3" - integrity sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ== + version "1.0.30001589" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz#7ad6dba4c9bf6561aec8291976402339dc157dfb" + integrity sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg== catering@^2.0.0, catering@^2.1.0: version "2.1.1" @@ -3824,9 +3824,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.676" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.676.tgz#95179dd62f43926c636ca06c555a1da8754073ff" - integrity sha512-uHt4FB8SeYdhcOsj2ix/C39S7sPSNFJpzShjxGOm1KdF4MHyGqGi389+T5cErsodsijojXilYaHIKKqJfqh7uQ== + version "1.4.680" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.680.tgz#18a30d3f557993eda2d5b1e21a06c4d51875392f" + integrity sha512-4nToZ5jlPO14W82NkF32wyjhYqQByVaDmLy4J2/tYcAbJfgO2TKJC780Az1V13gzq4l73CJ0yuyalpXvxXXD9A== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -3987,13 +3987,13 @@ es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-set-tostringtag@^2.0.2: - 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== + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" @@ -4580,9 +4580,9 @@ flat@^5.0.2: 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== + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== fn.name@1.x.x: version "1.1.0" @@ -5122,7 +5122,7 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-d dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1: +has-proto@^1.0.1, has-proto@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== @@ -5132,7 +5132,7 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -5600,11 +5600,11 @@ is-regex@^1.1.4: 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== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-ssh@^1.4.0: version "1.4.0" @@ -5644,7 +5644,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.13, is-typed-array@^1.1.9: +is-typed-array@^1.1.13: version "1.1.13" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== @@ -8503,9 +8503,9 @@ socks-proxy-agent@^7.0.0: socks "^2.6.2" socks@^2.6.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.3.tgz#7d8a75d7ce845c0a96f710917174dba0d543a785" - integrity sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.1.tgz#22c7d9dd7882649043cba0eafb49ae144e3457af" + integrity sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ== dependencies: ip-address "^9.0.5" smart-buffer "^4.2.0" @@ -9135,35 +9135,39 @@ typed-array-buffer@^1.0.1: is-typed-array "^1.1.13" 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== + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" typed-array-byte-offset@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.1.tgz#5e2bcc1d93e1a332d50e8b363a48604a134692f8" - integrity sha512-tcqKMrTRXjqvHN9S3553NPCaGL0VPgFI92lXszmrE8DMhiDPLBYLlvo8Uu4WZAAX/aGqp/T1sbA4ph8EWjDF9Q== + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.6" + available-typed-arrays "^1.0.7" call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-proto "^1.0.1" + has-proto "^1.0.3" is-typed-array "^1.1.13" 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== + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" typedarray@^0.0.6: version "0.0.6" @@ -9385,9 +9389,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.5.0, viem@^2.7.3: - version "2.7.11" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.11.tgz#e432885f412c6faf2772a1e0569e8269b6ad93cb" - integrity sha512-qlEPF9YOgPVqjTyom73TVAekAYrIe68megO07u55p7pKWgLt0i9KD6Mrmiw7pd7oHh86vIppcygwQMDNGX1YAw== + version "2.7.13" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.13.tgz#bf3f8e973f532f9f9c86c97b645ac8add740e1bd" + integrity sha512-NGWLEocRp2UTqGidzI9bnL9u6WHlG2ik7IwqXNe6/QC2dL6jE3Z1mUnUUVcSx71h81nx74EflD9ahtleK3RQdA== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From 363fa3b3e922ae4edf1e7ebe5f945627f50c2b2d Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Fri, 23 Feb 2024 16:34:56 +0000 Subject: [PATCH 1119/1247] fix(SMA-682): docs-currently-are-down Resolved SMA-682 --- .github/workflows/docs.yml | 2 +- .../account/src/BiconomySmartAccountV2.ts | 24 ++- yarn.lock | 185 ++++++++++-------- 3 files changed, 123 insertions(+), 88 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 5b5dd6522..b3f7b3c4b 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -4,7 +4,7 @@ on: push: branches: - develop - - v4 + - fix/SMA-682_docs-fix permissions: contents: write diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index e5a7bfb48..581a3353e 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -81,8 +81,19 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { bundler?: IBundler; + /** + * @class + * @ignore + */ private accountContract?: GetContractReturnType; + /** + * @class + * @ignore + */ + // @ts-ignore + protected entryPoint: BaseSmartContractAccount["entryPoint"]; + private defaultFallbackHandlerAddress: Hex; private implementationAddress: Hex; @@ -313,6 +324,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } } + /** + * @class + * @ignore + */ async _getAccountContract(): Promise> { if (this.accountContract == null) { this.accountContract = getContract({ @@ -702,6 +717,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return bundlerResponse; } + /** + * @class + * @ignore + */ async getUserOpHash(userOp: Partial): Promise { const userOpHash = keccak256(packUserOp(userOp, true) as Hex); const enc = encodeAbiParameters(parseAbiParameters("bytes32, address, uint256"), [userOpHash, this.entryPoint.address, BigInt(this.chainId)]); @@ -750,7 +769,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return finalUserOp; } - // Could call it nonce space + /** + * @class + * @ignore + */ async getNonce(nonceKey?: number): Promise { const nonceSpace = nonceKey ?? 0; try { diff --git a/yarn.lock b/yarn.lock index f45b6e8ff..e4545f440 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,7 +43,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.11.6", "@babel/core@^7.12.3": +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== @@ -868,7 +868,7 @@ js-yaml "^3.13.1" resolve-from "^5.0.0" -"@istanbuljs/schema@^0.1.2": +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== @@ -1767,9 +1767,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.16" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.16.tgz#5b56104b0d7a6c87d17eb7f2d597ee358a430cd9" - integrity sha512-vr30c56QmMMxXP59hL4MysdmKNHCD2JmMEdhfly5C+HB+N4p/a7ioblioatRIukgZPP9/Qnc7TPJISGlQaGWpA== + version "1.3.19" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.19.tgz#63013cbbebf36c37e970f83406ef955f08309499" + integrity sha512-cQOGS0dH6LMDyJ7bkaLj6FShYSyz8OZ2hBvtBPdTtuMCsTlQPFcXKR6QI2CpJZBbb6m1fIXZEXlFYFZzY/t6ng== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -2157,9 +2157,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.18.tgz#06912d152e47c2ac0a393c62141e623ca6005d46" - integrity sha512-ABT5VWnnYneSBcNWYSCuR05M826RoMyMSGiFivXGx6ZUIsXb9vn4643IEwkg2zbEOSgAiSogtapN2fgc4mAPlw== + version "20.11.20" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.20.tgz#f0a2aee575215149a62784210ad88b3a34843659" + integrity sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg== dependencies: undici-types "~5.26.4" @@ -2700,10 +2700,12 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" - integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== +available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" axios@^1.0.0, axios@^1.3.6: version "1.6.7" @@ -3117,9 +3119,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001587" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz#a0bce920155fa56a1885a69c74e1163fc34b4881" - integrity sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA== + version "1.0.30001589" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz#7ad6dba4c9bf6561aec8291976402339dc157dfb" + integrity sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg== catering@^2.0.0, catering@^2.1.0: version "2.1.1" @@ -3685,7 +3687,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-data-property@^1.0.1, define-data-property@^1.1.2: +define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -3822,9 +3824,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.670" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.670.tgz#0fc5ac92ada8371e898ea72d577ffc888167a017" - integrity sha512-hcijYOWjOtjKrKPtNA6tuLlA/bTLO3heFG8pQA6mLpq7dRydSWicXova5lyxDzp1iVJaYhK7J2OQlGE52KYn7A== + version "1.4.680" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.680.tgz#18a30d3f557993eda2d5b1e21a06c4d51875392f" + integrity sha512-4nToZ5jlPO14W82NkF32wyjhYqQByVaDmLy4J2/tYcAbJfgO2TKJC780Az1V13gzq4l73CJ0yuyalpXvxXXD9A== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -3985,13 +3987,13 @@ es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-set-tostringtag@^2.0.2: - 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== + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" @@ -4578,9 +4580,9 @@ flat@^5.0.2: 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== + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== fn.name@1.x.x: version "1.1.0" @@ -5120,17 +5122,17 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-d dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -5541,9 +5543,9 @@ is-lambda@^1.0.1: integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== 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== + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.0.4: version "1.0.7" @@ -5598,11 +5600,11 @@ is-regex@^1.1.4: 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== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-ssh@^1.4.0: version "1.4.0" @@ -5642,7 +5644,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.13, is-typed-array@^1.1.9: +is-typed-array@^1.1.13: version "1.1.13" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== @@ -5715,13 +5717,13 @@ istanbul-lib-instrument@^5.0.4: semver "^6.3.0" istanbul-lib-instrument@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" - integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" + integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" istanbul-lib-coverage "^3.2.0" semver "^7.5.4" @@ -5744,9 +5746,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -7080,9 +7082,9 @@ neo-async@^2.6.2: integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nock@^13.2.9: - version "13.5.1" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.1.tgz#4e40f9877ad0d43b7cdb474261c190f3715dd806" - integrity sha512-+s7b73fzj5KnxbKH4Oaqz07tQ8degcMilU4rrmnKvI//b0JMBU4wEXFQ8zqr+3+L4eWSfU3H/UoIVGUV0tue1Q== + version "13.5.3" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.3.tgz#9858adf5b840696a410baf98bda720d5fad4f075" + integrity sha512-2NlGmHIK2rTeyy7UaY1ZNg0YZfEJMxghXgZi0b4DBsUyoDNTTxZeCSG1nmirAWF44RkkoV8NnegLVQijgVapNQ== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" @@ -7836,6 +7838,11 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -8363,13 +8370,14 @@ set-function-length@^1.2.1: has-property-descriptors "^1.0.1" set-function-name@^2.0.1: - 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== + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" setimmediate@^1.0.5: version "1.0.5" @@ -8495,9 +8503,9 @@ socks-proxy-agent@^7.0.0: socks "^2.6.2" socks@^2.6.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.3.tgz#7d8a75d7ce845c0a96f710917174dba0d543a785" - integrity sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.1.tgz#22c7d9dd7882649043cba0eafb49ae144e3457af" + integrity sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ== dependencies: ip-address "^9.0.5" smart-buffer "^4.2.0" @@ -9118,43 +9126,48 @@ type-fest@^0.8.1: integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== typed-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" - integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.7" es-errors "^1.3.0" is-typed-array "^1.1.13" 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== + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" 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== + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" 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== + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" typedarray@^0.0.6: version "0.0.6" @@ -9376,9 +9389,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.5.0, viem@^2.7.3: - version "2.7.9" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.9.tgz#0d2b0c4722530b53fbef449d70f0cedc1bb867b0" - integrity sha512-iDfc8TwaZFp1K95zlsxYh6Cs0OWCt35Tqs8uYgXKSxtz7w075mZ0H5SJ8zSyJGoEaticVDhtdmRRX6TtcW9EeQ== + version "2.7.13" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.13.tgz#bf3f8e973f532f9f9c86c97b645ac8add740e1bd" + integrity sha512-NGWLEocRp2UTqGidzI9bnL9u6WHlG2ik7IwqXNe6/QC2dL6jE3Z1mUnUUVcSx71h81nx74EflD9ahtleK3RQdA== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From b7d86d952e5de3f5233dbd1129c353672804928c Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Fri, 23 Feb 2024 16:44:09 +0000 Subject: [PATCH 1120/1247] cont. --- packages/account/src/BiconomySmartAccountV2.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 581a3353e..78664bdf8 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -717,10 +717,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return bundlerResponse; } - /** - * @class - * @ignore - */ async getUserOpHash(userOp: Partial): Promise { const userOpHash = keccak256(packUserOp(userOp, true) as Hex); const enc = encodeAbiParameters(parseAbiParameters("bytes32, address, uint256"), [userOpHash, this.entryPoint.address, BigInt(this.chainId)]); @@ -769,10 +765,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return finalUserOp; } - /** - * @class - * @ignore - */ + // Could call it nonce space async getNonce(nonceKey?: number): Promise { const nonceSpace = nonceKey ?? 0; try { From a4806708930932d6dbb164782bcf80e80de8c2f1 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Fri, 23 Feb 2024 21:49:57 +0000 Subject: [PATCH 1121/1247] bump aa-core version --- packages/account/package.json | 2 +- packages/bundler/package.json | 2 +- packages/common/package.json | 2 +- packages/modules/package.json | 2 +- packages/paymaster/package.json | 2 +- yarn.lock | 86 ++++++++++++++++----------------- 6 files changed, 48 insertions(+), 48 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index e0bd61cca..8706e2c6b 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -67,7 +67,7 @@ "typedoc": "^0.25.7" }, "dependencies": { - "@alchemy/aa-core": "^3.0.1", + "@alchemy/aa-core": "^3.1.1", "@biconomy/bundler": "^4.0.1", "@biconomy/common": "^4.0.1", "@biconomy/modules": "^4.0.1", diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 1700900a3..f46538265 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -56,7 +56,7 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "^3.0.1", + "@alchemy/aa-core": "^3.1.1", "@biconomy/common": "^4.0.2", "viem": "^2.7.12" }, diff --git a/packages/common/package.json b/packages/common/package.json index ddeec86df..7449fa857 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -54,7 +54,7 @@ "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" }, "dependencies": { - "@alchemy/aa-core": "^3.0.1", + "@alchemy/aa-core": "^3.1.1", "@ethersproject/abstract-signer": "^5.7.0", "viem": "^2.7.12" }, diff --git a/packages/modules/package.json b/packages/modules/package.json index 886ceed33..83656ba9e 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -53,7 +53,7 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "^3.0.1", + "@alchemy/aa-core": "^3.1.1", "@biconomy/common": "^4.0.2", "@ethersproject/abi": "^5.7.0", "merkletreejs": "^0.3.11", diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index a308eca6f..c6a6abfba 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -53,7 +53,7 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "^3.0.1", + "@alchemy/aa-core": "^3.1.1", "@biconomy/common": "^4.0.2", "viem": "^2.7.12" }, diff --git a/yarn.lock b/yarn.lock index b894c4ac7..952ef86ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,10 +12,10 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== -"@alchemy/aa-core@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.0.1.tgz#cfd44657ed4098f23ebae852668685194c6fd1d3" - integrity sha512-LoPSikQFpza2SR0vzKAiOyLqNabShXlTtv350VG6EzDqzDzEqGQNuq9l5zlsQn/ZL2Qud9cKJA5TTdRyDB4PbQ== +"@alchemy/aa-core@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.1.1.tgz#5b93078b13168b3874a6596cfff9150834926356" + integrity sha512-ze607aFT5pReC0al7WV6MTCkW5kTO1GkDnm80BVU8rL4FZ7CW355tDxvgufnss05BwYUoXrlXfTseqMoAVKjVA== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" @@ -487,10 +487,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.56.0": - version "8.56.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" - integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@ethereumjs/rlp@^4.0.1": version "4.0.1" @@ -821,7 +821,7 @@ resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@humanwhocodes/config-array@^0.11.13": +"@humanwhocodes/config-array@^0.11.14": version "0.11.14" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== @@ -1767,9 +1767,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.18" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.18.tgz#ce763a845f88ff118c27148579de6934ff376298" - integrity sha512-R38ddazbt5Xt8noVA4Fproc89Mm7UmaRvc7Xkl0XP0sp+HaUJjEwFpL4zTCATYb2sUx3cJgV46fVOuD7/2QWIA== + version "1.3.19" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.19.tgz#63013cbbebf36c37e970f83406ef955f08309499" + integrity sha512-cQOGS0dH6LMDyJ7bkaLj6FShYSyz8OZ2hBvtBPdTtuMCsTlQPFcXKR6QI2CpJZBbb6m1fIXZEXlFYFZzY/t6ng== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -2157,9 +2157,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.18.tgz#06912d152e47c2ac0a393c62141e623ca6005d46" - integrity sha512-ABT5VWnnYneSBcNWYSCuR05M826RoMyMSGiFivXGx6ZUIsXb9vn4643IEwkg2zbEOSgAiSogtapN2fgc4mAPlw== + version "20.11.20" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.20.tgz#f0a2aee575215149a62784210ad88b3a34843659" + integrity sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg== dependencies: undici-types "~5.26.4" @@ -3119,9 +3119,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001587" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz#a0bce920155fa56a1885a69c74e1163fc34b4881" - integrity sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA== + version "1.0.30001589" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz#7ad6dba4c9bf6561aec8291976402339dc157dfb" + integrity sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg== catering@^2.0.0, catering@^2.1.0: version "2.1.1" @@ -3824,9 +3824,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.670" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.670.tgz#0fc5ac92ada8371e898ea72d577ffc888167a017" - integrity sha512-hcijYOWjOtjKrKPtNA6tuLlA/bTLO3heFG8pQA6mLpq7dRydSWicXova5lyxDzp1iVJaYhK7J2OQlGE52KYn7A== + version "1.4.681" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz#5f23fad8aa7e1f64cbb7dd9d15c7e39a1cd7e6e3" + integrity sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -3987,13 +3987,13 @@ es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-set-tostringtag@^2.0.2: - 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== + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" @@ -4157,15 +4157,15 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.48.0: - version "8.56.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -5132,7 +5132,7 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -8503,9 +8503,9 @@ socks-proxy-agent@^7.0.0: socks "^2.6.2" socks@^2.6.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.3.tgz#7d8a75d7ce845c0a96f710917174dba0d543a785" - integrity sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.1.tgz#22c7d9dd7882649043cba0eafb49ae144e3457af" + integrity sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ== dependencies: ip-address "^9.0.5" smart-buffer "^4.2.0" @@ -9126,11 +9126,11 @@ type-fest@^0.8.1: integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== typed-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" - integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.7" es-errors "^1.3.0" is-typed-array "^1.1.13" @@ -9389,9 +9389,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.7.12, viem@^2.7.8: - version "2.7.12" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.12.tgz#c79f68d77f5e46c3b78443df54afb067cbc827c3" - integrity sha512-NbV+Bycw0I4X8y6A04mgJ6+Imt7xXwflgnqisR3JXoJRNc77YSaQCscFN/dmwGLESTkgegJvi+j4nZY32GTpwQ== + version "2.7.13" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.13.tgz#bf3f8e973f532f9f9c86c97b645ac8add740e1bd" + integrity sha512-NGWLEocRp2UTqGidzI9bnL9u6WHlG2ik7IwqXNe6/QC2dL6jE3Z1mUnUUVcSx71h81nx74EflD9ahtleK3RQdA== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From acac61980b7d5bcf35dd17ccb53ebb5c85293e87 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 26 Feb 2024 03:06:37 +0400 Subject: [PATCH 1122/1247] update lockfile --- yarn.lock | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/yarn.lock b/yarn.lock index e4545f440..a42e21e40 100644 --- a/yarn.lock +++ b/yarn.lock @@ -487,10 +487,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.56.0": - version "8.56.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" - integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@ethereumjs/rlp@^4.0.1": version "4.0.1" @@ -821,7 +821,7 @@ resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@humanwhocodes/config-array@^0.11.13": +"@humanwhocodes/config-array@^0.11.14": version "0.11.14" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== @@ -1066,9 +1066,9 @@ chalk "^4.0.0" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz#9b18145d26cf33d08576cf4c7665b28554480ed7" + integrity sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" @@ -1098,9 +1098,9 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.22" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" - integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== + version "0.3.23" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz#afc96847f3f07841477f303eed687707a5aacd80" + integrity sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -2196,9 +2196,9 @@ integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== "@types/semver@^7.5.0": - version "7.5.7" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.7.tgz#326f5fdda70d13580777bcaa1bc6fa772a5aef0e" - integrity sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg== + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/stack-utils@^2.0.0": version "2.0.3" @@ -3824,9 +3824,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.680" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.680.tgz#18a30d3f557993eda2d5b1e21a06c4d51875392f" - integrity sha512-4nToZ5jlPO14W82NkF32wyjhYqQByVaDmLy4J2/tYcAbJfgO2TKJC780Az1V13gzq4l73CJ0yuyalpXvxXXD9A== + version "1.4.681" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz#5f23fad8aa7e1f64cbb7dd9d15c7e39a1cd7e6e3" + integrity sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -4157,15 +4157,15 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.48.0: - version "8.56.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -9389,9 +9389,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.5.0, viem@^2.7.3: - version "2.7.13" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.13.tgz#bf3f8e973f532f9f9c86c97b645ac8add740e1bd" - integrity sha512-NGWLEocRp2UTqGidzI9bnL9u6WHlG2ik7IwqXNe6/QC2dL6jE3Z1mUnUUVcSx71h81nx74EflD9ahtleK3RQdA== + version "2.7.14" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.14.tgz#347d316cb5400f0b896b2205b1bc8073aa5e27e0" + integrity sha512-5b1KB1gXli02GOQHZIUsRluNUwssl2t4hqdFAzyWPwJ744N83jAOBOjOkrGz7K3qMIv9b0GQt3DoZIErSQTPkQ== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From 20fd54c817d2dcbc6b7d9a247d890d91b19a9c2f Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Mon, 26 Feb 2024 11:09:55 +0200 Subject: [PATCH 1123/1247] Added StateOverrideSet parameter (#427) * Added StateOverrideSet parameter * Fix, remove param from array conditionally --------- Co-authored-by: GabiDev --- packages/account/src/BiconomySmartAccountV2.ts | 12 +++++++----- packages/account/src/utils/Types.ts | 4 +++- packages/bundler/src/Bundler.ts | 8 +++++--- packages/bundler/src/interfaces/IBundler.ts | 3 ++- packages/common/src/utils/Types.ts | 10 ++++++++++ 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 78664bdf8..9364f8684 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -63,7 +63,7 @@ import { import { BiconomyFactoryAbi } from "./abi/Factory.js"; import { BiconomyAccountAbi } from "./abi/SmartAccount.js"; import { AccountResolverAbi } from "./abi/AccountResolver.js"; -import { Logger } from "@biconomy/common"; +import { Logger, StateOverrideSet } from "@biconomy/common"; import { FeeQuotesOrDataDto, FeeQuotesOrDataResponse } from "@biconomy/paymaster"; type UserOperationKey = keyof UserOperationStruct; @@ -723,7 +723,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return keccak256(enc); } - async estimateUserOpGas(userOp: Partial): Promise> { + async estimateUserOpGas(userOp: Partial, stateOverrideSet?: StateOverrideSet): Promise> { if (!this.bundler) throw new Error("Bundler is not provided"); const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; this.validateUserOp(userOp, requiredFields); @@ -731,8 +731,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const finalUserOp = userOp; // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = - await this.bundler.estimateUserOpGas(userOp); + const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas( + userOp, + stateOverrideSet, + ); // if neither user sent gas fee nor the bundler, estimate gas from provider if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { const feeData = await this.provider.estimateFeesPerGas(); @@ -906,7 +908,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { userOp.signature = signature; // Note: Can change the default behaviour of calling estimations using bundler/local - userOp = await this.estimateUserOpGas(userOp); + userOp = await this.estimateUserOpGas(userOp, buildUseropDto?.stateOverrideSet); if (buildUseropDto?.paymasterServiceData) { userOp = await this.getPaymasterUserOp(userOp, buildUseropDto.paymasterServiceData); diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 65f26b5e4..1105eddc2 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -10,7 +10,7 @@ import { } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; import { Hex, WalletClient } from "viem"; -import { SupportedSigner } from "@biconomy/common"; +import { SupportedSigner, StateOverrideSet } from "@biconomy/common"; export type EntryPointAddresses = Record; export type BiconomyFactories = Record; @@ -148,6 +148,8 @@ export type BuildUserOpOptions = { paymasterServiceData?: PaymasterUserOperationDto; /** simulationType: Determine which parts of the tx a bundler will simulate: "validation" | "validation_and_execution". */ simulationType?: SimulationType; + /** stateOverrideSet: For overriding the state */ + stateOverrideSet?: StateOverrideSet; }; export type NonceOptions = { diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index a20fadfb4..641b6d6f1 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -27,7 +27,7 @@ import { DEFAULT_ENTRYPOINT_ADDRESS, } from "./utils/Constants.js"; import { extractChainIdFromBundlerUrl } from "./utils/Utils.js"; -import { sendRequest, HttpMethod } from "@biconomy/common"; +import { sendRequest, HttpMethod, StateOverrideSet } from "@biconomy/common"; /** * This class implements IBundler interface. @@ -82,7 +82,7 @@ export class Bundler implements IBundler { * @description This function will fetch gasPrices from bundler * @returns Promise */ - async estimateUserOpGas(userOp: UserOperationStruct): Promise { + async estimateUserOpGas(userOp: UserOperationStruct, stateOverrideSet?: StateOverrideSet): Promise { // expected dummySig and possibly dummmy paymasterAndData should be provided by the caller // bundler doesn't know account and paymaster implementation userOp = transformUserOP(userOp); @@ -95,7 +95,9 @@ export class Bundler implements IBundler { method: HttpMethod.Post, body: { method: "eth_estimateUserOperationGas", - params: [userOp, this.bundlerConfig.entryPointAddress], + params: stateOverrideSet + ? [userOp, this.bundlerConfig.entryPointAddress, stateOverrideSet] + : [userOp, this.bundlerConfig.entryPointAddress], id: getTimestampInSeconds(), jsonrpc: "2.0", }, diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts index 8ba7ccb50..6ff6d4e63 100644 --- a/packages/bundler/src/interfaces/IBundler.ts +++ b/packages/bundler/src/interfaces/IBundler.ts @@ -1,8 +1,9 @@ +import { StateOverrideSet } from "@biconomy/common"; import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse, UserOpStatus, SimulationType, GasFeeValues } from "../utils/Types"; import { UserOperationStruct } from "@alchemy/aa-core"; export interface IBundler { - estimateUserOpGas(_userOp: Partial): Promise; + estimateUserOpGas(_userOp: Partial, stateOverrideSet?: StateOverrideSet): Promise; sendUserOp(_userOp: UserOperationStruct, _simulationType?: SimulationType): Promise; getUserOpReceipt(_userOpHash: string): Promise; getUserOpByHash(_userOpHash: string): Promise; diff --git a/packages/common/src/utils/Types.ts b/packages/common/src/utils/Types.ts index 69508e21f..52eac0216 100644 --- a/packages/common/src/utils/Types.ts +++ b/packages/common/src/utils/Types.ts @@ -11,3 +11,13 @@ export interface LightSigner { getAddress(): Promise; signMessage(message: string | Uint8Array): Promise; } + +export type StateOverrideSet = { + [key: string]: { + balance?: string; + nonce?: string; + code?: string; + state?: object; + stateDiff?: object; + }; +}; From 4b8bae412577b846e700b168976cefa6b0803ff6 Mon Sep 17 00:00:00 2001 From: joepegler Date: Mon, 26 Feb 2024 09:14:57 +0000 Subject: [PATCH 1124/1247] Feat(SMA-599): Get balances (#420) * Get smart account balances * lint:fix * fix comments * remove log * fix build * continued * fix yarn --- .../account/src/BiconomySmartAccountV2.ts | 76 +++++++++++++++++++ packages/account/src/utils/Constants.ts | 10 +++ packages/account/src/utils/Types.ts | 13 ++++ packages/account/tests/account.e2e.spec.ts | 21 +++++ 4 files changed, 120 insertions(+) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 9364f8684..e4c1810c6 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -15,6 +15,8 @@ import { GetContractReturnType, getContract, decodeFunctionData, + parseAbi, + formatUnits, } from "viem"; import { BaseSmartContractAccount, @@ -37,6 +39,7 @@ import { UserOpResponse, extractChainIdFromBundlerUrl, convertSigner, + NATIVE_TOKEN_ALIAS, } from "./index.js"; import { BiconomyTokenPaymasterRequest, @@ -49,6 +52,7 @@ import { BiconomySmartAccountV2ConfigConstructorProps, PaymasterUserOperationDto, SimulationType, + BalancePayload, } from "./utils/Types.js"; import { ADDRESS_RESOLVER_ADDRESS, @@ -59,6 +63,7 @@ import { ADDRESS_ZERO, DEFAULT_ENTRYPOINT_ADDRESS, ERROR_MESSAGES, + ERC20_ABI, } from "./utils/Constants.js"; import { BiconomyFactoryAbi } from "./abi/Factory.js"; import { BiconomyAccountAbi } from "./abi/SmartAccount.js"; @@ -263,6 +268,77 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return this.accountAddress; } + /** + * Returns token balances of Smart Account + * + * This method will fetch the token balances of the smartAccount instance. + * If left empty, it will return the balance of the native token, with the address set to 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE. + * + * @param tokenAddresses - Optional. Array of token addresses to fetch the balances of. + * @returns Promise> - An array of token balances (or native token balance) of the smartAccount instance. + * @throws An error if something is wrong with the smart account instance creation. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); + * const [usdtBalanceFromSmartAccount] = await smartAccount.getBalances([usdt]); + * + * // { + * // amount: 1000000000000000n, + * // decimals: 6, + * // address: "0xda5289fcaaf71d52a80a254da614a192b693e977", + * // formattedAmount: "1000000", + * // chainId: 80001 + * // } + * + */ + public async getBalances(tokenAddresses: Array): Promise> { + const accountAddress = this.accountAddress ?? (await this.getAccountAddress()); + + if (!tokenAddresses) { + const balance = await this.provider.getBalance({ address: accountAddress }); + return [ + { + amount: balance, + decimals: 18, + address: NATIVE_TOKEN_ALIAS, + formattedAmount: formatUnits(balance, 18), + chainId: this.chainId, + }, + ]; + } + const tokenContracts = tokenAddresses.map((address) => + getContract({ + address, + abi: parseAbi(ERC20_ABI), + client: this.provider, + }), + ); + + const balancePromises = tokenContracts.map((tokenContract) => tokenContract.read.balanceOf([accountAddress])) as Promise[]; + const decimalsPromises = tokenContracts.map((tokenContract) => tokenContract.read.decimals()) as Promise[]; + const [balances, decimalsPerToken] = await Promise.all([Promise.all(balancePromises), Promise.all(decimalsPromises)]); + + return balances.map((amount, index) => ({ + amount, + decimals: decimalsPerToken[index], + address: tokenAddresses[index], + formattedAmount: formatUnits(amount, decimalsPerToken[index]), + chainId: this.chainId, + })); + } + /** * Return the account's address. This value is valid even before deploying the contract. */ diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index d6f52fc7a..171938f0f 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -62,3 +62,13 @@ export const ERROR_MESSAGES = { NO_FEE_QUOTE: "FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote", FAILED_FEE_QUOTE_FETCH: "Failed to fetch fee quote", }; + +export const NATIVE_TOKEN_ALIAS = "0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"; +export const ERC20_ABI = [ + "function transfer(address to, uint256 value) external returns (bool)", + "function transferFrom(address from, address to, uint256 value) external returns (bool)", + "function approve(address spender, uint256 value) external returns (bool)", + "function allowance(address owner, address spender) external view returns (uint256)", + "function balanceOf(address owner) external view returns (uint256)", + "function decimals() external view returns (uint8)", +]; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 1105eddc2..48404c237 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -26,6 +26,19 @@ export type SmartAccountConfig = { bundler?: IBundler; }; +export interface BalancePayload { + /** address: The address of the account */ + address: string; + /** chainId: The chainId of the network */ + chainId: number; + /** amount: The amount of the balance */ + amount: bigint; + /** decimals: The number of decimals */ + decimals: number; + /** formattedAmount: The amount of the balance formatted */ + formattedAmount: string; +} + export interface GasOverheads { /** fixed: fixed gas overhead */ fixed: number; diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index c24ddec6a..efb834663 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -463,4 +463,25 @@ describe("Account Tests", () => { expect(ecdsaOwnershipModule).toBe(smartAccount.activeValidationModule.getAddress()); }); + + it("should fetch balances for smartAccount", async () => { + const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + const { + whale: { viemWallet: signer }, + bundlerUrl, + publicClient, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const usdcBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress(), usdt); + const [usdtBalanceFromSmartAccount] = await smartAccount.getBalances([usdt]); + + expect(usdcBalanceBefore).toBe(usdtBalanceFromSmartAccount.amount); + }); }); From e6cd7dba04f9f241df8dad19c883f0ebe0d48c90 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Mon, 26 Feb 2024 11:10:33 +0000 Subject: [PATCH 1125/1247] fix yarn Auto stash before merge of "feature/SMA-599_balances" and "origin/develop" Add withdrawal tests jsdoc comments continued Fix comments comments continued Make `getBalance` available with no arguments rename tokenAdress -> address Throw when no amount + no paymaster is set Tweak comment --- jest.config.ts | 6 + .../account/src/BiconomySmartAccountV2.ts | 160 +++++++++--- packages/account/src/utils/Constants.ts | 3 +- packages/account/src/utils/Types.ts | 7 + packages/account/src/utils/Utils.ts | 2 + packages/account/tests/account.e2e.spec.ts | 247 +++++++++++++++++- tests/utils.ts | 17 +- yarn.lock | 102 +++----- 8 files changed, 441 insertions(+), 103 deletions(-) diff --git a/jest.config.ts b/jest.config.ts index 7cc8b4123..844398aba 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -74,6 +74,12 @@ const config: Config = { // "node_modules" // ], + workerThreads: true, + // This is experimental feature. Keep in mind that the worker threads use structured clone instead of JSON.stringify() to serialize messages. + // This means that built-in JavaScript objects as BigInt, Map or Set will get serialized properly. + // However extra properties set on Error, Map or Set will not be passed on through the serialization step. + // For more details see the article on structured clone. + // An array of file extensions your modules use moduleFileExtensions: ["js", "mjs", "cjs", "jsx", "ts", "tsx", "json", "node"], diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 69e90e58f..7c811b75d 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -26,7 +26,7 @@ import { BatchUserOperationCallData, SmartAccountSigner, } from "@alchemy/aa-core"; -import { isNullOrUndefined, packUserOp } from "./utils/Utils.js"; +import { addressEquals, isNullOrUndefined, packUserOp } from "./utils/Utils.js"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, createECDSAOwnershipValidationModule } from "@biconomy/modules"; import { IHybridPaymaster, @@ -53,6 +53,7 @@ import { PaymasterUserOperationDto, SimulationType, BalancePayload, + WithdrawalRequest, } from "./utils/Types.js"; import { ADDRESS_RESOLVER_ADDRESS, @@ -257,13 +258,105 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return this.accountAddress; } + /** + * Transfers funds from Smart Account to recipient (usually EOA) + * @param recipient - Address of the recipient + * @param withdrawalRequests - Array of withdrawal requests {@link WithdrawalRequest}. If withdrawal request is an empty array, it will transfer the balance of the native token. Using a paymaster will ensure no dust remains in the smart account. + * @param buildUseropDto - Optional. {@link BuildUserOpOptions} + * + * @returns Promise - An object containing the status of the transaction. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient, NATIVE_TOKEN_ALIAS } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const USDT = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); + * + * const { wait } = await smartAccount.withdraw( + * account.pubKey, // recipient + * [ + * { address: USDT, amount: BigInt(1) }, + * { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } + * ], + * { + * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + * } + * ); + * + * // OR to withdraw all of the native token, leaving no dust in the smart account + * + * const { wait } = await smartAccount.withdraw(account.pubKey, [], { + * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + * }); + * + * const { success } = await wait(); + */ + public async withdraw( + recipient: Hex, + withdrawalRequests?: WithdrawalRequest[] | null, + buildUseropDto?: BuildUserOpOptions, + ): Promise { + const accountAddress = this.accountAddress ?? (await this.getAccountAddress()); + + // Remove the native token from the withdrawal requests + let tokenRequests = withdrawalRequests?.filter(({ address }) => !addressEquals(address, NATIVE_TOKEN_ALIAS)) ?? []; + + // Check if the amount is not present in all withdrawal requests + const shouldFetchMaxBalances = tokenRequests.some(({ amount }) => !amount); + + // Get the balances of the tokens if the amount is not present in the withdrawal requests + if (shouldFetchMaxBalances) { + const balances = await this.getBalances(tokenRequests.map(({ address }) => address)); + tokenRequests = tokenRequests.map(({ amount, address }, i) => ({ address, amount: amount ?? balances[i].amount })); + } + + // Create the transactions + const txs: Transaction[] = tokenRequests.map(({ address, amount }) => ({ + to: address, + data: encodeFunctionData({ + abi: parseAbi(ERC20_ABI), + functionName: "transfer", + args: [recipient, amount], + }), + })); + + // Check if eth alias is present in the original withdrawal requests + const nativeTokenRequest = withdrawalRequests?.find(({ address }) => addressEquals(address, NATIVE_TOKEN_ALIAS)); + const hasNoRequests = !withdrawalRequests?.length; + if (!!nativeTokenRequest || hasNoRequests) { + // Check that an amount is present in the withdrawal request, if no paymaster service data is present, as max amounts cannot be calculated without a paymaster. + if (!nativeTokenRequest?.amount && !buildUseropDto?.paymasterServiceData?.mode) { + throw new Error(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT); + } + + // get eth balance if not present in withdrawal requests + const nativeTokenAmountToWithdraw = nativeTokenRequest?.amount ?? (await this.provider.getBalance({ address: accountAddress })); + + txs.push({ + to: recipient, + value: nativeTokenAmountToWithdraw, + }); + } + + return this.sendTransaction(txs, buildUseropDto); + } + /** * Returns token balances of Smart Account * * This method will fetch the token balances of the smartAccount instance. - * If left empty, it will return the balance of the native token, with the address set to 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE. + * The balance of the native token will always be returned as the last element in the reponse array, with the address set to 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE. * - * @param tokenAddresses - Optional. Array of token addresses to fetch the balances of. + * @param addresses - Optional. Array of asset addresses to fetch the balances of. * @returns Promise> - An array of token balances (or native token balance) of the smartAccount instance. * @throws An error if something is wrong with the smart account instance creation. * @@ -292,40 +385,47 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * // } * */ - public async getBalances(tokenAddresses: Array): Promise> { + public async getBalances(addresses?: Array): Promise> { const accountAddress = this.accountAddress ?? (await this.getAccountAddress()); + const result: BalancePayload[] = []; + + if (addresses) { + const tokenContracts = addresses + .filter((address) => !addressEquals(address, NATIVE_TOKEN_ALIAS)) + .map((address) => + getContract({ + address, + abi: parseAbi(ERC20_ABI), + client: this.provider, + }), + ); - if (!tokenAddresses) { - const balance = await this.provider.getBalance({ address: accountAddress }); - return [ - { - amount: balance, - decimals: 18, - address: NATIVE_TOKEN_ALIAS, - formattedAmount: formatUnits(balance, 18), + const balancePromises = tokenContracts.map((tokenContract) => tokenContract.read.balanceOf([accountAddress])) as Promise[]; + const decimalsPromises = tokenContracts.map((tokenContract) => tokenContract.read.decimals()) as Promise[]; + const [balances, decimalsPerToken] = await Promise.all([Promise.all(balancePromises), Promise.all(decimalsPromises)]); + + balances.forEach((amount, index) => + result.push({ + amount, + decimals: decimalsPerToken[index], + address: addresses[index], + formattedAmount: formatUnits(amount, decimalsPerToken[index]), chainId: this.chainId, - }, - ]; + }), + ); } - const tokenContracts = tokenAddresses.map((address) => - getContract({ - address, - abi: parseAbi(ERC20_ABI), - client: this.provider, - }), - ); - const balancePromises = tokenContracts.map((tokenContract) => tokenContract.read.balanceOf([accountAddress])) as Promise[]; - const decimalsPromises = tokenContracts.map((tokenContract) => tokenContract.read.decimals()) as Promise[]; - const [balances, decimalsPerToken] = await Promise.all([Promise.all(balancePromises), Promise.all(decimalsPromises)]); + const balance = await this.provider.getBalance({ address: accountAddress }); - return balances.map((amount, index) => ({ - amount, - decimals: decimalsPerToken[index], - address: tokenAddresses[index], - formattedAmount: formatUnits(amount, decimalsPerToken[index]), + result.push({ + amount: balance, + decimals: 18, + address: NATIVE_TOKEN_ALIAS, + formattedAmount: formatUnits(balance, 18), chainId: this.chainId, - })); + }); + + return result; } /** diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 171938f0f..6163f5e42 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -61,9 +61,10 @@ export const ERROR_MESSAGES = { SPENDER_REQUIRED: "spender is required for ERC20 mode", NO_FEE_QUOTE: "FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote", FAILED_FEE_QUOTE_FETCH: "Failed to fetch fee quote", + NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT: "'Amount' is required for withdrawal of native token without using a paymaster", }; -export const NATIVE_TOKEN_ALIAS = "0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"; +export const NATIVE_TOKEN_ALIAS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; export const ERC20_ABI = [ "function transfer(address to, uint256 value) external returns (bool)", "function transferFrom(address from, address to, uint256 value) external returns (bool)", diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 10ffd9858..870d406ca 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -39,6 +39,13 @@ export interface BalancePayload { formattedAmount: string; } +export interface WithdrawalRequest { + /** The address of the tokenAddress */ + address: Hex; + /** The amount to withdraw. Expects unformatted amount. Will use max amount if unset */ + amount?: bigint; +} + export interface GasOverheads { /** fixed: fixed gas overhead */ fixed: number; diff --git a/packages/account/src/utils/Utils.ts b/packages/account/src/utils/Utils.ts index d905506c9..11356c8a8 100644 --- a/packages/account/src/utils/Utils.ts +++ b/packages/account/src/utils/Utils.ts @@ -40,6 +40,8 @@ export function packUserOp(op: Partial, forSignature = true } } +export const addressEquals = (a?: string, b?: string): boolean => !!a && !!b && a?.toLowerCase() === b.toLowerCase(); + export const isNullOrUndefined = (value: any): value is undefined => { return value === null || value === undefined; }; diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index fbfe2227b..8964c0b6d 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,6 +1,6 @@ import { TestData } from "../../../tests"; -import { createSmartAccountClient, ERROR_MESSAGES, FeeQuotesOrDataResponse, IHybridPaymaster, PaymasterMode } from "../src/index"; -import { Hex, encodeFunctionData, getContract, parseAbi } from "viem"; +import { createSmartAccountClient, ERROR_MESSAGES, FeeQuotesOrDataResponse, IHybridPaymaster, NATIVE_TOKEN_ALIAS, PaymasterMode } from "../src/index"; +import { Hex, encodeFunctionData, getContract, parseAbi, parseEther } from "viem"; import { UserOperationStruct } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "../../../tests/utils"; import { ERC20_ABI } from "@biconomy/modules"; @@ -78,7 +78,6 @@ describe("Account Tests", () => { { to: recipient, value: 1, - data: "0x", }, { simulationType: "validation_and_execution", @@ -477,4 +476,246 @@ describe("Account Tests", () => { expect(usdcBalanceBefore).toBe(usdtBalanceFromSmartAccount.amount); }); + + it("should check native token balance for smartAccount", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + biconomyPaymasterApiKey, + chainId, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const [ethBalanceFromSmartAccount] = await smartAccount.getBalances(); + + expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n); + expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS); + expect(ethBalanceFromSmartAccount.chainId).toBe(chainId); + expect(ethBalanceFromSmartAccount.decimals).toBe(18); + }, 60000); + + it("should check balance responses", async () => { + const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + const { + whale: { viemWallet: signer }, + bundlerUrl, + biconomyPaymasterApiKey, + chainId, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const [usdtBalanceFromSmartAccount, ethBalanceFromSmartAccount] = await smartAccount.getBalances([usdt]); // last result is always eth balance + + expect(usdtBalanceFromSmartAccount.amount).toBeGreaterThan(0n); + expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n); + expect(usdtBalanceFromSmartAccount.address).toBe(usdt); + expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS); + expect(usdtBalanceFromSmartAccount.chainId).toBe(chainId); + expect(ethBalanceFromSmartAccount.chainId).toBe(chainId); + expect(usdtBalanceFromSmartAccount.decimals).toBe(6); + expect(ethBalanceFromSmartAccount.decimals).toBe(18); + expect(usdtBalanceFromSmartAccount.formattedAmount).toBeTruthy(); + expect(ethBalanceFromSmartAccount.formattedAmount).toBeTruthy(); + }); + + it("should withdraw erc20 balances", async () => { + const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + const { + whale: { viemWallet: signer, publicAddress: smartAccountOwner, account }, + bundlerUrl, + publicClient, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const smartAccountAddress = await smartAccount.getAddress(); + const usdtBalanceOfSABefore = await checkBalance(publicClient, smartAccountAddress, usdt); + const usdtBalanceOfRecipientBefore = await checkBalance(publicClient, smartAccountOwner, usdt); + + const { wait } = await smartAccount.withdraw(smartAccountOwner, [{ address: usdt, amount: BigInt(1) }]); + + const { + receipt: { transactionHash }, + userOpHash, + success, + } = await wait(); + + expect(userOpHash).toBeTruthy(); + expect(success).toBe("true"); + expect(transactionHash).toBeTruthy(); + + const usdtBalanceOfSAAfter = (await checkBalance(publicClient, smartAccountAddress, usdt)) as bigint; + const usdtBalanceOfRecipientAfter = (await checkBalance(publicClient, smartAccountOwner, usdt)) as bigint; + + expect(usdtBalanceOfSAAfter - usdtBalanceOfSABefore).toBe(-1n); + expect(usdtBalanceOfRecipientAfter - usdtBalanceOfRecipientBefore).toBe(1n); + }, 60000); + + it("should gaslessly withdraw nativeToken", async () => { + const { + whale: { viemWallet: signer, publicAddress: smartAccountOwner }, + bundlerUrl, + publicClient, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const smartAccountAddress = await smartAccount.getAddress(); + const balanceOfSABefore = (await checkBalance(publicClient, smartAccountAddress)) as bigint; + const balanceOfRecipientBefore = (await checkBalance(publicClient, smartAccountOwner)) as bigint; + + const { wait } = await smartAccount.withdraw(smartAccountOwner, [{ address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) }], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + }); + + const { + receipt: { transactionHash }, + userOpHash, + success, + } = await wait(); + + expect(userOpHash).toBeTruthy(); + expect(success).toBe("true"); + expect(transactionHash).toBeTruthy(); + + const balanceOfSAAfter = (await checkBalance(publicClient, smartAccountAddress)) as bigint; + const balanceOfRecipientAfter = (await checkBalance(publicClient, smartAccountOwner)) as bigint; + + expect(balanceOfSABefore - balanceOfSAAfter).toBe(1n); + expect(balanceOfRecipientAfter - balanceOfRecipientBefore).toBe(1n); + }, 60000); + + it("should withdraw nativeToken and an erc20 token", async () => { + const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + + const { + whale: { viemWallet: signer, publicAddress: smartAccountOwner }, + bundlerUrl, + publicClient, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const smartAccountAddress = await smartAccount.getAddress(); + const balanceOfSABefore = (await checkBalance(publicClient, smartAccountAddress)) as bigint; + const balanceOfRecipientBefore = (await checkBalance(publicClient, smartAccountOwner)) as bigint; + const usdtBalanceOfSABefore = await checkBalance(publicClient, smartAccountAddress, usdt); + const usdtBalanceOfRecipientBefore = await checkBalance(publicClient, smartAccountOwner, usdt); + + const { wait } = await smartAccount.withdraw( + smartAccountOwner, + [ + { address: usdt, amount: BigInt(1) }, + { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) }, + ], + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + }, + ); + + const { + receipt: { transactionHash }, + userOpHash, + success, + } = await wait(); + + expect(userOpHash).toBeTruthy(); + expect(success).toBe("true"); + expect(transactionHash).toBeTruthy(); + + const balanceOfSAAfter = (await checkBalance(publicClient, smartAccountAddress)) as bigint; + const balanceOfRecipientAfter = (await checkBalance(publicClient, smartAccountOwner)) as bigint; + const usdtBalanceOfSAAfter = (await checkBalance(publicClient, smartAccountAddress, usdt)) as bigint; + const usdtBalanceOfRecipientAfter = (await checkBalance(publicClient, smartAccountOwner, usdt)) as bigint; + + expect(balanceOfSABefore - balanceOfSAAfter).toBe(1n); + expect(balanceOfRecipientAfter - balanceOfRecipientBefore).toBe(1n); + expect(usdtBalanceOfSAAfter - usdtBalanceOfSABefore).toBe(-1n); + expect(usdtBalanceOfRecipientAfter - usdtBalanceOfRecipientBefore).toBe(1n); + }, 60000); + + it("should withdraw all native token", async () => { + const { + whale: { viemWallet: signer, publicAddress: smartAccountOwner, account }, + bundlerUrl, + viemChain, + publicClient, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const smartAccountAddress = await smartAccount.getAddress(); + const balanceOfSABefore = (await checkBalance(publicClient, smartAccountAddress)) as bigint; + const balanceOfRecipientBefore = (await checkBalance(publicClient, smartAccountOwner)) as bigint; + + const { wait } = await smartAccount.withdraw(smartAccountOwner, undefined /* null or undefined or [] */, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, // Will leave no dust + }); + + const { + receipt: { transactionHash }, + userOpHash, + success, + } = await wait(); + + expect(userOpHash).toBeTruthy(); + expect(success).toBe("true"); + expect(transactionHash).toBeTruthy(); + + const balanceOfSAAfter = (await checkBalance(publicClient, smartAccountAddress)) as bigint; + const balanceOfRecipientAfter = (await checkBalance(publicClient, smartAccountOwner)) as bigint; + + expect(balanceOfSAAfter).toBe(0n); + expect(balanceOfRecipientAfter).toBe(balanceOfSABefore + balanceOfRecipientBefore); + + // Teardown: send back the native token to the smart account + const teardownHash = await signer.sendTransaction({ to: smartAccountAddress, value: balanceOfSABefore, account, chain: viemChain }); + expect(teardownHash).toBeTruthy(); + }, 60000); + + it("should error when withdraw all of native token is attempted without an amount explicitly set", async () => { + const { + whale: { viemWallet: signer, publicAddress: smartAccountOwner }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + expect(async () => smartAccount.withdraw(smartAccountOwner)).rejects.toThrow(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT); + }, 60000); }); diff --git a/tests/utils.ts b/tests/utils.ts index c010435f6..ba3a311c1 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -1,17 +1,16 @@ import { Hex, PublicClient, parseAbi } from "viem"; -export const checkBalance = (publicClient: PublicClient, address: Hex, tokenAddress?: Hex) => { +export const checkBalance = (publicClient: PublicClient, address: Hex, tokenAddress?: Hex): Promise => { if (!tokenAddress) { return publicClient.getBalance({ address }); - } else { - return publicClient.readContract({ - address: tokenAddress, - abi: parseAbi(["function balanceOf(address owner) view returns (uint balance)"]), - functionName: "balanceOf", - // @ts-ignore - args: [address], - }); } + return publicClient.readContract({ + address: tokenAddress, + abi: parseAbi(["function balanceOf(address owner) view returns (uint balance)"]), + functionName: "balanceOf", + // @ts-ignore + args: [address], + }); }; // TODO(Joe): Make human readable diff --git a/yarn.lock b/yarn.lock index cbf7c942e..84e3ec4fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -563,8 +563,6 @@ dependencies: "@ethersproject/bytes" "^5.7.0" -<<<<<<< HEAD -======= "@ethersproject/basex@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" @@ -573,7 +571,6 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" ->>>>>>> origin/develop "@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" @@ -612,8 +609,6 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -<<<<<<< HEAD -======= "@ethersproject/hdnode@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" @@ -651,7 +646,6 @@ aes-js "3.0.0" scrypt-js "3.0.1" ->>>>>>> origin/develop "@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" @@ -672,8 +666,6 @@ dependencies: "@ethersproject/logger" "^5.7.0" -<<<<<<< HEAD -======= "@ethersproject/pbkdf2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" @@ -682,7 +674,6 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" ->>>>>>> origin/develop "@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" @@ -690,8 +681,6 @@ dependencies: "@ethersproject/logger" "^5.7.0" -<<<<<<< HEAD -======= "@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" @@ -726,7 +715,6 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" ->>>>>>> origin/develop "@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" @@ -735,8 +723,6 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -<<<<<<< HEAD -======= "@ethersproject/sha2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" @@ -746,7 +732,6 @@ "@ethersproject/logger" "^5.7.0" hash.js "1.1.7" ->>>>>>> origin/develop "@ethersproject/signing-key@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" @@ -783,8 +768,6 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/signing-key" "^5.7.0" -<<<<<<< HEAD -======= "@ethersproject/wallet@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" @@ -806,7 +789,6 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" ->>>>>>> origin/develop "@ethersproject/web@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" @@ -818,8 +800,6 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -<<<<<<< HEAD -======= "@ethersproject/wordlists@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" @@ -831,7 +811,6 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" ->>>>>>> origin/develop "@fastify/busboy@^2.0.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" @@ -1788,9 +1767,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.16" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.16.tgz#5b56104b0d7a6c87d17eb7f2d597ee358a430cd9" - integrity sha512-vr30c56QmMMxXP59hL4MysdmKNHCD2JmMEdhfly5C+HB+N4p/a7ioblioatRIukgZPP9/Qnc7TPJISGlQaGWpA== + version "1.3.18" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.18.tgz#ce763a845f88ff118c27148579de6934ff376298" + integrity sha512-R38ddazbt5Xt8noVA4Fproc89Mm7UmaRvc7Xkl0XP0sp+HaUJjEwFpL4zTCATYb2sUx3cJgV46fVOuD7/2QWIA== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -2178,9 +2157,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.18.tgz#06912d152e47c2ac0a393c62141e623ca6005d46" - integrity sha512-ABT5VWnnYneSBcNWYSCuR05M826RoMyMSGiFivXGx6ZUIsXb9vn4643IEwkg2zbEOSgAiSogtapN2fgc4mAPlw== + version "20.11.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195" + integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ== dependencies: undici-types "~5.26.4" @@ -2432,6 +2411,11 @@ adm-zip@^0.4.16: resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -2716,7 +2700,7 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: +available-typed-arrays@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== @@ -2807,6 +2791,11 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + before-after-hook@^2.2.0: version "2.2.3" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" @@ -3128,9 +3117,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001587" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz#a0bce920155fa56a1885a69c74e1163fc34b4881" - integrity sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA== + version "1.0.30001588" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz#07f16b65a7f95dba82377096923947fb25bce6e3" + integrity sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ== catering@^2.0.0, catering@^2.1.0: version "2.1.1" @@ -3832,17 +3821,10 @@ ejs@^3.1.7: dependencies: jake "^10.8.5" -<<<<<<< HEAD -electron-to-chromium@^1.4.648: - version "1.4.668" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.668.tgz#5cfed14f3240cdc70a359a49790cb295b1f097f1" - integrity sha512-ZOBocMYCehr9W31+GpMclR+KBaDZOoAEabLdhpZ8oU1JFDwIaFY0UDbpXVEUFc0BIP2O2Qn3rkfCjQmMR4T/bQ== -======= electron-to-chromium@^1.4.668: - version "1.4.670" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.670.tgz#0fc5ac92ada8371e898ea72d577ffc888167a017" - integrity sha512-hcijYOWjOtjKrKPtNA6tuLlA/bTLO3heFG8pQA6mLpq7dRydSWicXova5lyxDzp1iVJaYhK7J2OQlGE52KYn7A== ->>>>>>> origin/develop + version "1.4.673" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.673.tgz#1f077d9a095761804aec7ec6346c3f4b69b56534" + integrity sha512-zjqzx4N7xGdl5468G+vcgzDhaHkaYgVcf9MqgexcTqsl2UHSCmOj/Bi3HAprg4BZCpC7HyD8a6nZl6QAZf72gw== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -5061,15 +5043,9 @@ hard-rejection@^2.1.0: integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== hardhat@^2.17.3: -<<<<<<< HEAD - version "2.20.0" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.20.0.tgz#b28da8038fa5db0663a3b93668b261d3d4e7fb3d" - integrity sha512-TtWZ4mKOH5YA+PCDAGAjG7Gub2NA+egAX7RIHq5XnGrEALNXAbyP3S0I9vOE1MWCgZhn+XOFUNfDuHgkBOPoRw== -======= version "2.20.1" resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.20.1.tgz#3ad8f2b003a96c9ce80a55fec3575580ff2ddcd4" integrity sha512-q75xDQiQtCZcTMBwjTovrXEU5ECr49baxr4/OBkIu/ULTPzlB20yk1dRWNmD2IFbAeAeXggaWvQAdpiScaHtPw== ->>>>>>> origin/develop dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" @@ -7104,9 +7080,9 @@ neo-async@^2.6.2: integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nock@^13.2.9: - version "13.5.1" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.1.tgz#4e40f9877ad0d43b7cdb474261c190f3715dd806" - integrity sha512-+s7b73fzj5KnxbKH4Oaqz07tQ8degcMilU4rrmnKvI//b0JMBU4wEXFQ8zqr+3+L4eWSfU3H/UoIVGUV0tue1Q== + version "13.5.3" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.3.tgz#9858adf5b840696a410baf98bda720d5fad4f075" + integrity sha512-2NlGmHIK2rTeyy7UaY1ZNg0YZfEJMxghXgZi0b4DBsUyoDNTTxZeCSG1nmirAWF44RkkoV8NnegLVQijgVapNQ== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" @@ -8317,7 +8293,7 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scrypt-js@^3.0.0: +scrypt-js@3.0.1, scrypt-js@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== @@ -9161,15 +9137,16 @@ typed-array-byte-length@^1.0.0: 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== + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.1.tgz#5e2bcc1d93e1a332d50e8b363a48604a134692f8" + integrity sha512-tcqKMrTRXjqvHN9S3553NPCaGL0VPgFI92lXszmrE8DMhiDPLBYLlvo8Uu4WZAAX/aGqp/T1sbA4ph8EWjDF9Q== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.6" + call-bind "^1.0.7" for-each "^0.3.3" + gopd "^1.0.1" has-proto "^1.0.1" - is-typed-array "^1.1.10" + is-typed-array "^1.1.13" typed-array-length@^1.0.4: version "1.0.4" @@ -9400,9 +9377,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.5.0, viem@^2.7.3: - version "2.7.9" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.9.tgz#0d2b0c4722530b53fbef449d70f0cedc1bb867b0" - integrity sha512-iDfc8TwaZFp1K95zlsxYh6Cs0OWCt35Tqs8uYgXKSxtz7w075mZ0H5SJ8zSyJGoEaticVDhtdmRRX6TtcW9EeQ== + version "2.7.10" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.10.tgz#344fa51e28a57c36830f8eb940769e1f486628c3" + integrity sha512-mpm/A3Rbq6hhRovOw6btkrLeDe0DlEGLoCmO2LCbH/MuTQgLNd0cWJSIov9TL/8/Pz+qC2e+bh9zohQnKA+6PQ== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" @@ -9634,6 +9611,11 @@ write-pkg@4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + ws@8.13.0: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" From b689dc9fb2d8b1413d1ee0b46aec0d622ec043b7 Mon Sep 17 00:00:00 2001 From: Joe Pegler Date: Mon, 26 Feb 2024 11:16:41 +0000 Subject: [PATCH 1126/1247] fix comment --- packages/account/src/utils/Types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 2b4177988..4e974e94a 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -40,7 +40,7 @@ export interface BalancePayload { } export interface WithdrawalRequest { - /** The address of the tokenAddress */ + /** The address of the asset */ address: Hex; /** The amount to withdraw. Expects unformatted amount. Will use max amount if unset */ amount?: bigint; From 8b9fb5de9556870611307c12e57df333619d9252 Mon Sep 17 00:00:00 2001 From: joepegler Date: Mon, 26 Feb 2024 11:35:09 +0000 Subject: [PATCH 1127/1247] Feat(SMA-663): Minimal Reproducible Example request (#426) * Resolved SMA-663 * continued --- .github/ISSUE_TEMPLATE/bug_report.md | 35 -------------- .github/ISSUE_TEMPLATE/bug_report.yml | 70 +++++++++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 8 +++ packages/account/src/index.ts | 2 +- 4 files changed, 79 insertions(+), 36 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 77e5cc62b..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,35 +0,0 @@ -## SDK Version - - - -## Description - - - -## Steps to Reproduce - -1. -2. -3. - -## Expected Behavior - - - -## Actual Behavior - - - -## Possible Fix (optional) - - - -## Environment Details - -- **Browser Version**: -- **Node.js Version**: -- **NPM/Yarn Version**: - -## Additional Context - - diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..01619b1b0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,70 @@ +name: Bug Report +description: File a bug/issue +title: 'bug: ' +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! The more info you provide, the more we can help you. + + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered. + options: - label: I have searched the existing issues + required: true + + - type: input + attributes: + label: Package Version + description: What version of the SDK are you using? + placeholder: 4.0.0 + validations: + required: true + + - type: textarea + attributes: + label: Current Behavior + description: A concise description of what you're experiencing. + validations: + required: false + + - type: textarea + attributes: + label: Expected Behavior + description: A concise description of what you expected to happen. + validations: + required: false + + - type: textarea + attributes: + label: Steps To Reproduce + description: Steps or code snippets to reproduce the behaviour. + validations: + required: false + + - type: textarea + attributes: + label: Package.json (or lockfile) content + description: Packages used in your project. This will help us understand the environment you are working in, and check if there are dependencies that might be causing the issue. + validations: + required: false + + - type: input + attributes: + label: Link to Minimal Reproducible Example (StackBlitz, CodeSandbox, GitHub repo etc.) + description: | + [Please provide by forking this project](https://stackblitz.com/~/github.com/bcnmy/sdk-examples) and making relevant changes to the boilerplate. This makes investigating issues and helping you out significantly easier! For most issues, you will likely get asked to provide one so why not add one now :) + validations: + required: false + + - type: textarea + attributes: + label: Anything else? + description: | + Browser info? Screenshots? Anything that will give us more context about the issue you are encountering! + + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..5b7de7d5d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Ask Question + url: https://github.com/bcnmy/biconomy-client-sdk/discussions + about: Ask questions and discuss with other community members + - name: Request Feature + url: https://github.com/bcnmy/biconomy-client-sdk/discussions + about: Requests features or brainstorm ideas for new functionality diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index e88375a35..5c4ed9b17 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -16,7 +16,7 @@ export { type FeeQuotesOrDataResponse, createPaymaster, } from "@biconomy/paymaster"; -export { EthersSigner, convertSigner, type LightSigner } from "@biconomy/common"; +export { EthersSigner, convertSigner, type LightSigner, type SupportedSigner } from "@biconomy/common"; export { Bundler, type IBundler, From 6d2fb27d6f9b424e440e45990ea06820a9d16d4b Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Mon, 26 Feb 2024 12:19:22 +0000 Subject: [PATCH 1128/1247] Feat(SMA-597): Supported Tokens method (#425) * Resolved SMA-597 * lint:fix --- .../account/src/BiconomySmartAccountV2.ts | 46 +++++++++++++++++++ packages/account/src/utils/Types.ts | 2 + packages/account/tests/account.e2e.spec.ts | 23 ++++++++++ packages/paymaster/src/utils/Types.ts | 1 + 4 files changed, 72 insertions(+) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index e4c1810c6..5a9489dbe 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -53,6 +53,7 @@ import { PaymasterUserOperationDto, SimulationType, BalancePayload, + SupportedToken, } from "./utils/Types.js"; import { ADDRESS_RESOLVER_ADDRESS, @@ -714,6 +715,51 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return this.getPaymasterFeeQuotesOrData(userOp, buildUseropDto.paymasterServiceData); } + /** + * + * @description This function will return an array of supported tokens from the erc20 paymaster associated with the Smart Account + * @returns Promise<{@link SupportedToken}> + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); // Retrieve bundler url from dasboard + * const tokens = await smartAccount.getSupportedTokens(); + * + * // [ + * // { + * // symbol: "USDC", + * // tokenAddress: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + * // decimal: 6, + * // logoUrl: "https://assets.coingecko.com/coins/images/279/large/usd-coin.png?1595353707", + * // premiumPercentage: 0.1, + * // } + * // ] + * + */ + public async getSupportedTokens(): Promise<SupportedToken[]> { + const feeQuotesResponse = await this.getTokenFees( + { + data: "0x", + value: BigInt(0), + to: await this.getAccountAddress(), + }, + { + paymasterServiceData: { mode: PaymasterMode.ERC20 }, + }, + ); + return (feeQuotesResponse?.feeQuotes ?? []).map(({ maxGasFee: _, maxGasFeeUSD: __, validUntil: ___, usdPayment: ____, ...rest }) => rest); + } + /** * * @param userOp diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 48404c237..95c7be5a7 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -290,3 +290,5 @@ export type ValueOrData = RequireAtLeastOne< export type Transaction = { to: string; } & ValueOrData; + +export type SupportedToken = Omit<PaymasterFeeQuote, "maxGasFeeUSD" | "usdPayment" | "maxGasFee" | "validUntil">; diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index efb834663..47cc1771f 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -464,6 +464,29 @@ describe("Account Tests", () => { expect(ecdsaOwnershipModule).toBe(smartAccount.activeValidationModule.getAddress()); }); + it("should get supported tokens from the paymaster", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const tokens = await smartAccount.getSupportedTokens(); + + expect(tokens.length).toBeGreaterThan(0); + expect(tokens[0]).toHaveProperty("tokenAddress"); + expect(tokens[0]).toHaveProperty("symbol"); + expect(tokens[0]).toHaveProperty("decimal"); + expect(tokens[0]).toHaveProperty("premiumPercentage"); + expect(tokens[0]).toHaveProperty("logoUrl"); + }, 60000); + it("should fetch balances for smartAccount", async () => { const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; const { diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index d1dd7ec9f..16a8f5a51 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -93,6 +93,7 @@ export type PaymasterFeeQuote = { /** maxGasFee: in dollars */ maxGasFeeUSD?: number; usdPayment?: number; + /** The premium paid on the token */ premiumPercentage: number; /** validUntil: Unix timestamp */ validUntil?: number; From 1949e68cc35577738f6e0acf3e96c72aa95e8f87 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Mon, 26 Feb 2024 15:41:56 +0200 Subject: [PATCH 1129/1247] rpcUrl as required and removed redundant code (#430) * Added rpc url as required field and removed redundant code * Added check comparisson for chain ids (signer-bundler) * Fixed tests * Improved fix, refactor rpcUrl back as optional + validate rpcUrl --------- Co-authored-by: GabiDev <gv@popoo.io> --- .../account/src/BiconomySmartAccountV2.ts | 18 ++++- packages/account/src/utils/Types.ts | 2 +- packages/account/src/utils/Utils.ts | 5 ++ packages/account/tests/account.e2e.spec.ts | 4 +- packages/account/tests/account.spec.ts | 69 +++++++------------ packages/modules/tests/modules.spec.ts | 5 +- yarn.lock | 6 +- 7 files changed, 56 insertions(+), 53 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 5a9489dbe..1c436a9fb 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -26,7 +26,7 @@ import { BatchUserOperationCallData, SmartAccountSigner, } from "@alchemy/aa-core"; -import { isNullOrUndefined, packUserOp } from "./utils/Utils.js"; +import { isNullOrUndefined, isValidRpcUrl, packUserOp } from "./utils/Utils.js"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, createECDSAOwnershipValidationModule } from "@biconomy/modules"; import { IHybridPaymaster, @@ -197,17 +197,29 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { */ public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise<BiconomySmartAccountV2> { let chainId = biconomySmartAccountConfig.chainId; - let resolvedSmartAccountSigner!: SmartAccountSigner; let rpcUrl = biconomySmartAccountConfig.rpcUrl; + let resolvedSmartAccountSigner!: SmartAccountSigner; // Signer needs to be initialised here before defaultValidationModule is set if (biconomySmartAccountConfig.signer) { const signerResult = await convertSigner(biconomySmartAccountConfig.signer, !!chainId); if (!chainId && !!signerResult.chainId) { + let chainIdFromBundler: number | undefined; + if (biconomySmartAccountConfig.bundlerUrl) { + chainIdFromBundler = extractChainIdFromBundlerUrl(biconomySmartAccountConfig.bundlerUrl); + } else if (biconomySmartAccountConfig.bundler) { + const bundlerUrlFromBundler = biconomySmartAccountConfig.bundler.getBundlerUrl(); + chainIdFromBundler = extractChainIdFromBundlerUrl(bundlerUrlFromBundler); + } + if (chainIdFromBundler !== signerResult.chainId) { + throw new Error("ChainId from bundler and signer do not match"); + } chainId = signerResult.chainId; } if (!rpcUrl && !!signerResult.rpcUrl) { - rpcUrl = signerResult.rpcUrl; + if (isValidRpcUrl(signerResult.rpcUrl)) { + rpcUrl = signerResult.rpcUrl; + } } resolvedSmartAccountSigner = signerResult.signer; } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 95c7be5a7..c28bc5f3f 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -125,7 +125,7 @@ export type BiconomySmartAccountV2ConfigBaseProps = { implementationAddress?: Hex; /** defaultFallbackHandler: override the default fallback contract address */ defaultFallbackHandler?: Hex; - /** rpcUrl: Explicitly set the rpc else it is pulled out of the signer. */ + /** rpcUrl: Rpc url, optional, we set default rpc url if not passed. */ rpcUrl?: string; // as good as Provider /** biconomyPaymasterApiKey: The API key retrieved from the Biconomy dashboard */ biconomyPaymasterApiKey?: string; diff --git a/packages/account/src/utils/Utils.ts b/packages/account/src/utils/Utils.ts index d905506c9..b5c586fa1 100644 --- a/packages/account/src/utils/Utils.ts +++ b/packages/account/src/utils/Utils.ts @@ -43,3 +43,8 @@ export function packUserOp(op: Partial<UserOperationStruct>, forSignature = true export const isNullOrUndefined = (value: any): value is undefined => { return value === null || value === undefined; }; + +export const isValidRpcUrl = (url: string): boolean => { + const regex = /^(https:\/\/|wss:\/\/).*/; + return regex.test(url); +}; diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 47cc1771f..3ce75c0a6 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -44,7 +44,7 @@ describe("Account Tests", () => { const reciepientSmartAccountBase = await createSmartAccountClient({ signer: recipientSignerBase, - bundlerUrl, + bundlerUrl: bundlerUrlBase, }); const addresses = await Promise.all([ @@ -454,11 +454,13 @@ describe("Account Tests", () => { const { whale: { viemWallet: signer }, bundlerUrl, + viemChain, } = mumbai; const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, + rpcUrl: viemChain.rpcUrls.default.http[0], }); expect(ecdsaOwnershipModule).toBe(smartAccount.activeValidationModule.getAddress()); diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 7b70cb178..91b1656c6 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -8,6 +8,7 @@ import { Wallet } from "@ethersproject/wallet"; describe("Account Tests", () => { let ganache: TestData; + const mockBundlerUrl = "https://bundler.biconomy.io/api/v2/1337/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f14"; beforeEach(() => { // @ts-ignore: Comes from setup-unit-tests @@ -16,13 +17,13 @@ describe("Account Tests", () => { it("should create a smartAccountClient from an ethers signer", async () => { const { - bundlerUrl, minnow: { ethersSigner: signer }, } = ganache; const smartAccount = await createSmartAccountClient({ signer, - bundlerUrl, + bundlerUrl: mockBundlerUrl, + rpcUrl: localhost.rpcUrls.default.http[0], }); const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); @@ -31,12 +32,12 @@ describe("Account Tests", () => { it("should create a smartAccountClient from a walletClient", async () => { const { whale: { viemWallet: signer }, - bundlerUrl, } = ganache; const smartAccount = await createSmartAccountClient({ signer, - bundlerUrl, + bundlerUrl: mockBundlerUrl, + rpcUrl: localhost.rpcUrls.default.http[0], }); const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); @@ -45,7 +46,6 @@ describe("Account Tests", () => { it("should pickup the rpcUrl from viem wallet and ethers", async () => { const { chainId, - bundlerUrl, viemChain, whale: { privateKey, viemWallet: originalViemSigner, ethersSigner: originalEthersSigner }, } = ganache; @@ -68,22 +68,26 @@ describe("Account Tests", () => { createSmartAccountClient({ chainId, signer: ethersSignerWithNewRpcUrl, - bundlerUrl, + bundlerUrl: mockBundlerUrl, + rpcUrl: newRpcUrl, }), createSmartAccountClient({ chainId, signer: walletClientWithNewRpcUrl, - bundlerUrl, + bundlerUrl: mockBundlerUrl, + rpcUrl: newRpcUrl, }), createSmartAccountClient({ chainId, signer: originalEthersSigner, - bundlerUrl, + bundlerUrl: mockBundlerUrl, + rpcUrl: viemChain.rpcUrls.default.http[0], }), createSmartAccountClient({ chainId, signer: originalViemSigner, - bundlerUrl, + bundlerUrl: mockBundlerUrl, + rpcUrl: viemChain.rpcUrls.default.http[0], }), ]); @@ -118,13 +122,13 @@ describe("Account Tests", () => { const { chainId, whale: { alchemyWalletClientSigner: signer }, - bundlerUrl, } = ganache; const smartAccount = await createSmartAccountClient({ chainId, signer, - bundlerUrl, + bundlerUrl: mockBundlerUrl, + rpcUrl: localhost.rpcUrls.default.http[0], }); const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); @@ -132,48 +136,27 @@ describe("Account Tests", () => { it("should provide an account address", async () => { const { - bundlerUrl, whale: { viemWallet: signer }, } = ganache; const smartAccount = await createSmartAccountClient({ signer, - bundlerUrl, + bundlerUrl: mockBundlerUrl, + rpcUrl: localhost.rpcUrls.default.http[0], }); const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); }); - it("Nonce should be zero", async () => { - const { - entryPointAddress, - bundlerUrl, - whale: { viemWallet: signer }, - minnow: { publicAddress: recipient }, - } = ganache; - - const smartAccount = await createSmartAccountClient({ - entryPointAddress, - signer, - bundlerUrl, - }); - const address = await smartAccount.getAccountAddress(); - expect(address).toBeTruthy(); - - const builtUserOp = await smartAccount.buildUserOp([{ to: recipient, value: 1 }]); - console.log("builtUserOp", builtUserOp); - expect(builtUserOp?.nonce?.toString()).toBe("0x0"); - }, 10000); - it("should have an active validation module", async () => { const { - bundlerUrl, whale: { viemWallet: signer }, } = ganache; const smartAccount = await createSmartAccountClient({ signer, - bundlerUrl, + bundlerUrl: mockBundlerUrl, + rpcUrl: localhost.rpcUrls.default.http[0], }); const module = smartAccount.activeValidationModule; @@ -183,7 +166,6 @@ describe("Account Tests", () => { it("Create a smart account with paymaster by creating instance", async () => { const { whale: { viemWallet: signer }, - bundlerUrl, biconomyPaymasterApiKey, } = ganache; @@ -192,16 +174,15 @@ describe("Account Tests", () => { const smartAccount = await createSmartAccountClient({ signer, - bundlerUrl, + bundlerUrl: mockBundlerUrl, paymaster, + rpcUrl: localhost.rpcUrls.default.http[0], }); expect(smartAccount.paymaster).not.toBeNull(); expect(smartAccount.paymaster).not.toBeUndefined(); }, 10000); it("should fail to create a smartAccountClient from a walletClient without a chainId", async () => { - const { bundlerUrl } = ganache; - const account = privateKeyToAccount(generatePrivateKey()); const viemWalletClientNoChainId = createWalletClient({ account, @@ -212,15 +193,14 @@ describe("Account Tests", () => { await expect( createSmartAccountClient({ signer: viemWalletClientNoChainId, - bundlerUrl, + bundlerUrl: mockBundlerUrl, + rpcUrl: localhost.rpcUrls.default.http[0], }), ).rejects.toThrow("Cannot consume a viem wallet without a chainId"), ); }); it("should fail to create a smartAccountClient from a walletClient without an account", async () => { - const { bundlerUrl } = ganache; - const viemWalletNoAccount = createWalletClient({ transport: http(localhost.rpcUrls.default.http[0]), }); @@ -228,7 +208,8 @@ describe("Account Tests", () => { expect(async () => createSmartAccountClient({ signer: viemWalletNoAccount, - bundlerUrl, + bundlerUrl: mockBundlerUrl, + rpcUrl: localhost.rpcUrls.default.http[0], }), ).rejects.toThrow("Cannot consume a viem wallet without an account"); }); diff --git a/packages/modules/tests/modules.spec.ts b/packages/modules/tests/modules.spec.ts index ac2dd22a2..a799a6760 100644 --- a/packages/modules/tests/modules.spec.ts +++ b/packages/modules/tests/modules.spec.ts @@ -14,11 +14,12 @@ describe("Account Tests", () => { const { bundlerUrl, whale: { ethersSigner: signer }, + viemChain, } = ganache; const defaultValidationModule = await createMultiChainValidationModule({ signer }); // Should not require a signer or chainId - const smartAccount = await createSmartAccountClient({ bundlerUrl, defaultValidationModule }); + const smartAccount = await createSmartAccountClient({ bundlerUrl, defaultValidationModule, rpcUrl: viemChain.rpcUrls.default.http[0], }); const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); // expect the relevant module to be set @@ -29,6 +30,7 @@ describe("Account Tests", () => { const { bundlerUrl, whale: { viemWallet: signer }, + viemChain, } = ganache; const defaultValidationModule = await createECDSAOwnershipValidationModule({ signer }); @@ -36,6 +38,7 @@ describe("Account Tests", () => { const smartAccount = await createSmartAccountClient({ bundlerUrl, defaultValidationModule, + rpcUrl: viemChain.rpcUrls.default.http[0], }); const address = await smartAccount.getAccountAddress(); expect(address).toBeTruthy(); diff --git a/yarn.lock b/yarn.lock index a42e21e40..694da557a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9175,9 +9175,9 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typedoc@^0.25.7: - version "0.25.8" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.8.tgz#7d0e1bf12d23bf1c459fd4893c82cb855911ff12" - integrity sha512-mh8oLW66nwmeB9uTa0Bdcjfis+48bAjSH3uqdzSuSawfduROQLlXw//WSNZLYDdhmMVB7YcYZicq6e8T0d271A== + version "0.25.9" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.9.tgz#0fb6608feec994eedc1e3276154fa8a486218ed2" + integrity sha512-jVoGmfNw848iW0L313+jqHbsknepwDV6F9nzk1H30oWhKXkw65uaENgR6QtTw9a5KqRWEb6nwNd54KxffBJyWw== dependencies: lunr "^2.3.9" marked "^4.3.0" From c411f552555030f509ee7f45dd5ff923b2c58f97 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Mon, 26 Feb 2024 14:29:00 +0000 Subject: [PATCH 1130/1247] Update changelogs --- packages/account/CHANGELOG.md | 6 ++++++ packages/account/package.json | 2 +- packages/bundler/CHANGELOG.md | 8 ++++++++ packages/common/CHANGELOG.md | 16 ++++++++++++++++ packages/modules/CHANGELOG.md | 8 ++++++++ packages/particle-auth/CHANGELOG.md | 4 ++++ packages/paymaster/CHANGELOG.md | 8 ++++++++ packages/transak/CHANGELOG.md | 29 ++++++++++------------------- 8 files changed, 61 insertions(+), 20 deletions(-) create mode 100644 packages/common/CHANGELOG.md diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index 37a72de4e..aa59b7a42 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.2 (2023-26-02) + +### Bug Fixes + +Particle Auth Fix + ## 4.0.1 (2023-02-22) ### Bug Fixes diff --git a/packages/account/package.json b/packages/account/package.json index 8706e2c6b..53b15dfd8 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account", - "version": "4.0.1", + "version": "4.0.2", "description": "This package provides apis for ERC-4337 based smart account implementations", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index 35465063e..5e8997aff 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.2 (2023-26-02) + +VERSION Bump Only. + +## 4.0.1 (2023-02-22) + +VERSION Bump Only. + ## 4.0.0 (2023-07-02) Export createBundler alias for static Bundler.create call diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md new file mode 100644 index 000000000..720249404 --- /dev/null +++ b/packages/common/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## 4.0.2 (2023-26-02) + +VERSION Bump Only. + +## 4.0.1 (2023-02-22) + +VERSION Bump Only. + +## 4.0.0 (2023-07-02) + +VERSION Bump Only. diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md index 400a2d2a6..99552eee1 100644 --- a/packages/modules/CHANGELOG.md +++ b/packages/modules/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.2 (2023-26-02) + +VERSION Bump Only. + +## 4.0.1 (2023-02-22) + +VERSION Bump Only. + ## 4.0.0 (2024-02-12) ### Features diff --git a/packages/particle-auth/CHANGELOG.md b/packages/particle-auth/CHANGELOG.md index 70caed909..cd78326dd 100644 --- a/packages/particle-auth/CHANGELOG.md +++ b/packages/particle-auth/CHANGELOG.md @@ -7,6 +7,10 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline Fix build +## 4.0.1 (2023-02-22) + +VERSION Bump Only. + ## 4.0.0 (2023-12-28) VERSION Bump Only. diff --git a/packages/paymaster/CHANGELOG.md b/packages/paymaster/CHANGELOG.md index abbc2cae6..5bae8eecd 100644 --- a/packages/paymaster/CHANGELOG.md +++ b/packages/paymaster/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.2 (2023-26-02) + +VERSION Bump Only. + +## 4.0.1 (2023-02-22) + +VERSION Bump Only. + ## 4.0.0 (2023-07-02) Export createPaymaster alias for static Paymaster.create call diff --git a/packages/transak/CHANGELOG.md b/packages/transak/CHANGELOG.md index c71de7918..e72733efb 100644 --- a/packages/transak/CHANGELOG.md +++ b/packages/transak/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.2 (2023-26-02) + +VERSION Bump Only. + +## 4.0.1 (2023-02-22) + ## 4.0.0 (2023-12-28) VERSION Bump Only. @@ -19,39 +25,24 @@ VERSION Bump Only. VERSION Bump Only. - - - - - ## 3.1.0 (2023-09-20) -### Bug Fixes - -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) - +### Bug Fixes +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) # 3.0.0 (2023-08-28) VERSION Bump Only. - - ## 2.0.0 (2023-04-07) - ### Features -* transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) - - - - +- transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) ## 1.0.0 (2023-01-03) - ### Features -* transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) +- transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) From 4bb17a78f1f9f730b06808948df0f33602f20bc3 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Mon, 26 Feb 2024 16:56:10 +0000 Subject: [PATCH 1131/1247] default recipient --- .../account/src/BiconomySmartAccountV2.ts | 21 ++++-- packages/account/src/utils/Constants.ts | 4 +- packages/account/src/utils/Types.ts | 2 + packages/account/tests/account.e2e.spec.ts | 73 +++++++++---------- ...batchedSessionValidationModule.e2e.spec.ts | 8 +- .../multiChainValidationModule.e2e.spec.ts | 5 +- .../tests/sessionValidationModule.e2e.spec.ts | 7 +- 7 files changed, 65 insertions(+), 55 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index a1979bb8c..535c2c013 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -306,11 +306,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); * * const { wait } = await smartAccount.withdraw( - * account.pubKey, // recipient * [ * { address: USDT, amount: BigInt(1) }, * { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } * ], + * account.pubKey, // Default recipient used if no recipient is present in the withdrawal request * { * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, * } @@ -318,19 +318,23 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * // OR to withdraw all of the native token, leaving no dust in the smart account * - * const { wait } = await smartAccount.withdraw(account.pubKey, [], { + * const { wait } = await smartAccount.withdraw([], account.pubKey, { * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, * }); * * const { success } = await wait(); */ public async withdraw( - recipient: Hex, withdrawalRequests?: WithdrawalRequest[] | null, + defaultRecipient?: Hex | null, buildUseropDto?: BuildUserOpOptions, ): Promise<UserOpResponse> { const accountAddress = this.accountAddress ?? (await this.getAccountAddress()); + if (!defaultRecipient && withdrawalRequests?.some(({ recipient }) => !recipient)) { + throw new Error(ERROR_MESSAGES.NO_RECIPIENT); + } + // Remove the native token from the withdrawal requests let tokenRequests = withdrawalRequests?.filter(({ address }) => !addressEquals(address, NATIVE_TOKEN_ALIAS)) ?? []; @@ -340,16 +344,19 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Get the balances of the tokens if the amount is not present in the withdrawal requests if (shouldFetchMaxBalances) { const balances = await this.getBalances(tokenRequests.map(({ address }) => address)); - tokenRequests = tokenRequests.map(({ amount, address }, i) => ({ address, amount: amount ?? balances[i].amount })); + tokenRequests = tokenRequests.map(({ amount, address }, i) => ({ + address, + amount: amount ?? balances[i].amount, + })); } // Create the transactions - const txs: Transaction[] = tokenRequests.map(({ address, amount }) => ({ + const txs: Transaction[] = tokenRequests.map(({ address, amount, recipient: recipientFromRequest }) => ({ to: address, data: encodeFunctionData({ abi: parseAbi(ERC20_ABI), functionName: "transfer", - args: [recipient, amount], + args: [recipientFromRequest ?? defaultRecipient, amount], }), })); @@ -366,7 +373,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const nativeTokenAmountToWithdraw = nativeTokenRequest?.amount ?? (await this.provider.getBalance({ address: accountAddress })); txs.push({ - to: recipient, + to: (nativeTokenRequest?.recipient ?? defaultRecipient) as Hex, value: nativeTokenAmountToWithdraw, }); } diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 6163f5e42..8d4f2ac38 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -1,3 +1,4 @@ +import { Hex } from "viem"; import { EntryPointAddresses, BiconomyFactories, @@ -58,13 +59,14 @@ export const DefaultGasLimit = { }; export const ERROR_MESSAGES = { + NO_RECIPIENT: "One or more of your withdrawals is missing a recipient", SPENDER_REQUIRED: "spender is required for ERC20 mode", NO_FEE_QUOTE: "FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote", FAILED_FEE_QUOTE_FETCH: "Failed to fetch fee quote", NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT: "'Amount' is required for withdrawal of native token without using a paymaster", }; -export const NATIVE_TOKEN_ALIAS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; +export const NATIVE_TOKEN_ALIAS: Hex = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; export const ERC20_ABI = [ "function transfer(address to, uint256 value) external returns (bool)", "function transferFrom(address from, address to, uint256 value) external returns (bool)", diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 488ea7920..c862eed60 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -44,6 +44,8 @@ export interface WithdrawalRequest { address: Hex; /** The amount to withdraw. Expects unformatted amount. Will use max amount if unset */ amount?: bigint; + /** The destination address of the funds. The first argument from the `withdraw(...)` function will be used as the default if left unset. */ + recipient?: Hex; } export interface GasOverheads { diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index cc6d63daf..5e515ed31 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -32,7 +32,7 @@ describe("Account Tests", () => { bundlerUrl, }); - const reciepientSmartAccount = await createSmartAccountClient({ + const recipientSmartAccount = await createSmartAccountClient({ signer: recipientSigner, bundlerUrl, }); @@ -42,7 +42,7 @@ describe("Account Tests", () => { bundlerUrl: bundlerUrlBase, }); - const reciepientSmartAccountBase = await createSmartAccountClient({ + const recipientSmartAccountBase = await createSmartAccountClient({ signer: recipientSignerBase, bundlerUrl: bundlerUrlBase, }); @@ -51,11 +51,11 @@ describe("Account Tests", () => { sender, smartAccount.getAddress(), recipient, - reciepientSmartAccount.getAddress(), + recipientSmartAccount.getAddress(), senderBase, smartAccountBase.getAddress(), recipientBase, - reciepientSmartAccountBase.getAddress(), + recipientSmartAccountBase.getAddress(), ]); expect(addresses.every(Boolean)).toBeTruthy(); }); @@ -453,41 +453,15 @@ describe("Account Tests", () => { const { whale: { viemWallet: signer }, bundlerUrl, - viemChain, } = mumbai; const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, - rpcUrl: viemChain.rpcUrls.default.http[0], }); expect(ecdsaOwnershipModule).toBe(smartAccount.activeValidationModule.getAddress()); }); - it("should fetch balances for smartAccount", async () => { - - it("should get supported tokens from the paymaster", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - biconomyPaymasterApiKey, - } = mumbai; - - const smartAccount = await createSmartAccountClient({ - signer, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - const tokens = await smartAccount.getSupportedTokens(); - - expect(tokens.length).toBeGreaterThan(0); - expect(tokens[0]).toHaveProperty("tokenAddress"); - expect(tokens[0]).toHaveProperty("symbol"); - expect(tokens[0]).toHaveProperty("decimal"); - expect(tokens[0]).toHaveProperty("premiumPercentage"); - expect(tokens[0]).toHaveProperty("logoUrl"); - }, 60000); it("should fetch balances for smartAccount", async () => { const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; @@ -580,7 +554,7 @@ describe("Account Tests", () => { const usdtBalanceOfSABefore = await checkBalance(publicClient, smartAccountAddress, usdt); const usdtBalanceOfRecipientBefore = await checkBalance(publicClient, smartAccountOwner, usdt); - const { wait } = await smartAccount.withdraw(smartAccountOwner, [{ address: usdt, amount: BigInt(1) }]); + const { wait } = await smartAccount.withdraw([{ address: usdt, amount: BigInt(1), recipient: smartAccountOwner }]); const { receipt: { transactionHash }, @@ -597,7 +571,7 @@ describe("Account Tests", () => { expect(usdtBalanceOfSAAfter - usdtBalanceOfSABefore).toBe(-1n); expect(usdtBalanceOfRecipientAfter - usdtBalanceOfRecipientBefore).toBe(1n); - }, 60000); + }, 15000); it("should gaslessly withdraw nativeToken", async () => { const { @@ -617,7 +591,7 @@ describe("Account Tests", () => { const balanceOfSABefore = (await checkBalance(publicClient, smartAccountAddress)) as bigint; const balanceOfRecipientBefore = (await checkBalance(publicClient, smartAccountOwner)) as bigint; - const { wait } = await smartAccount.withdraw(smartAccountOwner, [{ address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) }], { + const { wait } = await smartAccount.withdraw([{ address: NATIVE_TOKEN_ALIAS, amount: BigInt(1), recipient: smartAccountAddress }], null, { paymasterServiceData: { mode: PaymasterMode.SPONSORED }, }); @@ -636,7 +610,7 @@ describe("Account Tests", () => { expect(balanceOfSABefore - balanceOfSAAfter).toBe(1n); expect(balanceOfRecipientAfter - balanceOfRecipientBefore).toBe(1n); - }, 60000); + }, 12000); it("should withdraw nativeToken and an erc20 token", async () => { const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; @@ -661,11 +635,11 @@ describe("Account Tests", () => { const usdtBalanceOfRecipientBefore = await checkBalance(publicClient, smartAccountOwner, usdt); const { wait } = await smartAccount.withdraw( - smartAccountOwner, [ { address: usdt, amount: BigInt(1) }, { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) }, ], + smartAccountOwner, { paymasterServiceData: { mode: PaymasterMode.SPONSORED }, }, @@ -711,7 +685,7 @@ describe("Account Tests", () => { const balanceOfSABefore = (await checkBalance(publicClient, smartAccountAddress)) as bigint; const balanceOfRecipientBefore = (await checkBalance(publicClient, smartAccountOwner)) as bigint; - const { wait } = await smartAccount.withdraw(smartAccountOwner, undefined /* null or undefined or [] */, { + const { wait } = await smartAccount.withdraw([] /* null or undefined or [] */, smartAccountOwner, { paymasterServiceData: { mode: PaymasterMode.SPONSORED }, // Will leave no dust }); @@ -736,6 +710,29 @@ describe("Account Tests", () => { expect(teardownHash).toBeTruthy(); }, 60000); + it("should error if no recipient exists", async () => { + const usdt: Hex = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + + const { + whale: { viemWallet: signer, publicAddress: smartAccountOwner }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const txs = [ + { address: usdt, amount: BigInt(1), recipient: smartAccountOwner }, + { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) }, + ]; + + expect(async () => smartAccount.withdraw(txs)).rejects.toThrow(ERROR_MESSAGES.NO_RECIPIENT); + }); + it("should error when withdraw all of native token is attempted without an amount explicitly set", async () => { const { whale: { viemWallet: signer, publicAddress: smartAccountOwner }, @@ -749,6 +746,6 @@ describe("Account Tests", () => { bundlerUrl, }); - expect(async () => smartAccount.withdraw(smartAccountOwner)).rejects.toThrow(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT); - }, 60000); + expect(async () => smartAccount.withdraw(null, smartAccountOwner)).rejects.toThrow(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT); + }, 6000); }); diff --git a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts index 026b61bbe..3dc243d8f 100644 --- a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts @@ -10,6 +10,7 @@ import { encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "v import { TestData } from "../../../tests"; import { checkBalance } from "../../../tests/utils"; import { PaymasterMode } from "@biconomy/paymaster"; +import { Logger } from "@biconomy/common"; describe("Batched Session Router Tests", () => { let mumbai: TestData; @@ -55,7 +56,7 @@ describe("Batched Session Router Tests", () => { expect(sessionSigner).toBeTruthy(); const smartAccountAddress = await smartAccount.getAddress(); - console.log("Smart Account Address: ", smartAccountAddress); + Logger.log("Smart Account Address: ", smartAccountAddress); // First we need to check if smart account is deployed // if not deployed, send an empty transaction to deploy it @@ -144,7 +145,7 @@ describe("Batched Session Router Tests", () => { const userOpResponse1 = await smartAccount.sendTransaction(txArray, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); // this user op will enable the modules and setup session allowed calls const transactionDetails = await userOpResponse1.wait(); - console.log("Tx Hash: ", transactionDetails.receipt.transactionHash); + Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash); const usdcBalance = await checkBalance(publicClient, await smartAccount.getAccountAddress(), "0xdA5289fCAAF71d52a80A254da614a192b693e977"); expect(usdcBalance).toBeGreaterThan(0); @@ -198,7 +199,6 @@ describe("Batched Session Router Tests", () => { }, }); - const receipt = await userOpResponse2.wait(); expect(receipt.success).toBe("true"); @@ -210,6 +210,6 @@ describe("Batched Session Router Tests", () => { expect(maticBalanceAfter).toEqual(maticBalanceBefore); - console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); + Logger.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); }, 60000); }); diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts index 4d7cb123c..a7dc390e4 100644 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -3,6 +3,7 @@ import { TestData } from "../../../tests"; import { createSmartAccountClient } from "../../account/src/index"; import { Hex, encodeFunctionData, parseAbi } from "viem"; import { DEFAULT_MULTICHAIN_MODULE, MultiChainValidationModule } from "@biconomy/modules"; +import { Logger } from "@biconomy/common"; describe("MultiChainValidation Module Tests", () => { let mumbai: TestData; @@ -93,8 +94,8 @@ describe("MultiChainValidation Module Tests", () => { const userOpResponse1 = await baseAccount.sendSignedUserOp(returnedOps[0] as any); const userOpResponse2 = await polygonAccount.sendSignedUserOp(returnedOps[1] as any); - console.log(userOpResponse1.userOpHash, "MULTICHAIN BASE USER OP HASH"); - console.log(userOpResponse2.userOpHash, "MULTICHAIN POLYGON USER OP HASH"); + Logger.log(userOpResponse1.userOpHash, "MULTICHAIN BASE USER OP HASH"); + Logger.log(userOpResponse2.userOpHash, "MULTICHAIN POLYGON USER OP HASH"); expect(userOpResponse1.userOpHash).toBeTruthy(); expect(userOpResponse2.userOpHash).toBeTruthy(); diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index 6cb6e0605..6709bacad 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -5,6 +5,7 @@ import { Hex, encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } fr import { TestData } from "../../../tests"; import { checkBalance } from "../../../tests/utils"; import { PaymasterMode } from "@biconomy/paymaster"; +import { Logger } from "@biconomy/common"; describe("Session Validation Module Tests", () => { let mumbai: TestData; @@ -94,7 +95,7 @@ describe("Session Validation Module Tests", () => { txArray.push(enableModuleTrx); txArray.push(setSessionAllowedTrx); } else { - console.log("MODULE ALREADY ENABLED"); + Logger.log("MODULE ALREADY ENABLED"); txArray.push(setSessionAllowedTrx); } @@ -102,7 +103,7 @@ describe("Session Validation Module Tests", () => { const userOpResponse1 = await smartAccount.sendUserOp(userOp); const transactionDetails = await userOpResponse1.wait(); - console.log("Tx Hash: ", transactionDetails.receipt.transactionHash); + Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash); const encodedCall = encodeFunctionData({ abi: parseAbi(["function transfer(address _to, uint256 _value)"]), @@ -150,6 +151,6 @@ describe("Session Validation Module Tests", () => { expect(maticBalanceAfter).toEqual(maticBalanceBefore); - console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); + Logger.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); }, 60000); }); From fa30abb54ab02e83921757c164e0b349b13a12df Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Mon, 26 Feb 2024 16:57:08 +0000 Subject: [PATCH 1132/1247] default with empty string --- packages/account/src/BiconomySmartAccountV2.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 535c2c013..33fbbae26 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -356,7 +356,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { data: encodeFunctionData({ abi: parseAbi(ERC20_ABI), functionName: "transfer", - args: [recipientFromRequest ?? defaultRecipient, amount], + args: [recipientFromRequest || defaultRecipient, amount], }), })); From be9dc4d74a3e5a22e69416983436997cf2ea417c Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Mon, 26 Feb 2024 23:14:22 +0000 Subject: [PATCH 1133/1247] Feat(SMA-670): SmartAccount deploy method (#429) * Resolved SMA-670 * tweak comments * PR comments * useEmptyDeployCallData * Fix merge conflict * fix test titles --- .../account/src/BiconomySmartAccountV2.ts | 94 +++++++++++-- packages/account/src/utils/Constants.ts | 2 + packages/account/src/utils/Types.ts | 2 + packages/account/tests/account.e2e.spec.ts | 123 +++++++++++++++++- tests/chains.config.ts | 8 ++ tests/index.d.ts | 4 +- tests/setup-e2e-tests.ts | 2 + tests/setup-unit-tests.ts | 15 +-- 8 files changed, 220 insertions(+), 30 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 1c436a9fb..525d132e1 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -714,7 +714,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * }, * }); * - * const { receipt } = await wait(); + * const { success, receipt } = await wait(); * */ public async getTokenFees( @@ -784,7 +784,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * @param userOp Partial<{@link UserOperationStruct}> the userOp params to be sent. * @param params {@link SendUserOpParams}. - * @returns Promise<{@link UserOpResponse}> that you can use to track user operation. + * @returns Promise<{@link UserOpResponse}> that you can use to track the user operation. * * @example * import { createClient } from "viem" @@ -813,7 +813,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * const userOp = await smartAccount.buildUserOp([transaction]); * * const { wait } = await smartAccount.sendUserOp(userOp); - * const { receipt } = await wait(); + * const { success, receipt } = await wait(); * */ async sendUserOp(userOp: Partial<UserOperationStruct>, params?: SendUserOpParams): Promise<UserOpResponse> { @@ -935,7 +935,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * @param manyOrOneTransactions Array of {@link Transaction} to be batched and sent. Can also be a single {@link Transaction}. * @param buildUseropDto {@link BuildUserOpOptions}. - * @returns Promise<{@link UserOpResponse}> that you can use to track user operation. + * @returns Promise<{@link UserOpResponse}> that you can use to track the user operation. * * @example * import { createClient } from "viem" @@ -1024,18 +1024,20 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { throw new Error("Transactions array cannot be empty"); } let callData: Hex = "0x"; - if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { - callData = await this.encodeExecuteBatch(to, value, data); - } else { - // transactions.length must be 1 - callData = await this.encodeExecute(to[0], value[0], data[0]); + if (!buildUseropDto?.useEmptyDeployCallData) { + if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { + callData = await this.encodeExecuteBatch(to, value, data); + } else { + // transactions.length must be 1 + callData = await this.encodeExecute(to[0], value[0], data[0]); + } } let userOp: Partial<UserOperationStruct> = { sender: (await this.getAccountAddress()) as Hex, nonce: toHex(nonceFromFetch), initCode, - callData: callData, + callData, }; // for this Smart Account current validation module dummy signature will be used to estimate gas @@ -1176,6 +1178,78 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return signatureWithModuleAddress; } + /** + * Deploys the smart contract + * + * This method will deploy a Smart Account contract. It is useful for deploying in a moment when you know that gas prices are low, + * and you want to deploy the account before sending the first user operation. This step can otherwise be skipped, + * as the deployment will alternatively be bundled with the first user operation. + * + * @param buildUseropDto {@link BuildUserOpOptions}. + * @returns Promise<{@link UserOpResponse}> that you can use to track the user operation. + * @error Throws an error if the account has already been deployed. + * @error Throws an error if the account has not enough native token balance to deploy, if not using a paymaster. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ + * signer, + * biconomyPaymasterApiKey, + * bundlerUrl + * }); + * + * // If you want to use a paymaster... + * const { wait } = await smartAccount.deploy({ + * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + * }); + * + * // Or if you can't use a paymaster send native token to this address: + * const counterfactualAddress = await smartAccount.getAccountAddress(); + * + * // Then deploy the account + * const { wait } = await smartAccount.deploy(); + * + * const { success, receipt } = await wait(); + * + */ + public async deploy(buildUseropDto?: BuildUserOpOptions): Promise<UserOpResponse> { + const accountAddress = this.accountAddress ?? (await this.getAccountAddress()); + + // Check that the account has not already been deployed + const byteCode = await this.provider?.getBytecode({ address: accountAddress as Hex }); + if (byteCode !== undefined) { + throw new Error(ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED); + } + + // Check that the account has enough native token balance to deploy, if not using a paymaster + if (!buildUseropDto?.paymasterServiceData?.mode) { + const nativeTokenBalance = await this.provider?.getBalance({ address: accountAddress }); + if (nativeTokenBalance === BigInt(0)) { + throw new Error(ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY); + } + } + + const useEmptyDeployCallData = true; + + return this.sendTransaction( + { + to: accountAddress, + data: "0x", + }, + { ...buildUseropDto, useEmptyDeployCallData }, + ); + } + async signMessage(message: string | Uint8Array): Promise<Hex> { this.isActiveValidationModuleDefined(); const dataHash = typeof message === "string" ? toBytes(message) : message; diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 171938f0f..8050d62a1 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -58,6 +58,8 @@ export const DefaultGasLimit = { }; export const ERROR_MESSAGES = { + ACCOUNT_ALREADY_DEPLOYED: "Account already deployed", + NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY: "Native token balance is not available during deploy", SPENDER_REQUIRED: "spender is required for ERC20 mode", NO_FEE_QUOTE: "FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote", FAILED_FEE_QUOTE_FETCH: "Failed to fetch fee quote", diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index c28bc5f3f..353eae5ee 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -163,6 +163,8 @@ export type BuildUserOpOptions = { simulationType?: SimulationType; /** stateOverrideSet: For overriding the state */ stateOverrideSet?: StateOverrideSet; + /** set to true if the tx is being used *only* to deploy the smartContract, so "0x" is set as the userOp.callData */ + useEmptyDeployCallData?: boolean; }; export type NonceOptions = { diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 3ce75c0a6..d5e003c62 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,9 +1,10 @@ import { TestData } from "../../../tests"; import { createSmartAccountClient, ERROR_MESSAGES, FeeQuotesOrDataResponse, IHybridPaymaster, PaymasterMode } from "../src/index"; -import { Hex, encodeFunctionData, getContract, parseAbi } from "viem"; +import { Hex, createWalletClient, encodeFunctionData, getContract, http, parseAbi } from "viem"; import { UserOperationStruct } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "../../../tests/utils"; import { ERC20_ABI } from "@biconomy/modules"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; describe("Account Tests", () => { let mumbai: TestData; @@ -112,12 +113,12 @@ describe("Account Tests", () => { }); it("Should gaslessly mint an NFT on Mumbai", async () => { - const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; const { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, biconomyPaymasterApiKey, publicClient, + nftAddress, } = mumbai; const smartAccount = await createSmartAccountClient({ @@ -160,12 +161,12 @@ describe("Account Tests", () => { }, 60000); it("Should mint an NFT on Mumbai and pay with ERC20 - with preferredToken", async () => { - const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; const { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, publicClient, biconomyPaymasterApiKey, + nftAddress, } = mumbai; const smartAccount = await createSmartAccountClient({ @@ -217,11 +218,11 @@ describe("Account Tests", () => { }, 60000); it("Should expect several feeQuotes in resonse to empty tokenInfo fields", async () => { - const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; const { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, biconomyPaymasterApiKey, + nftAddress, } = mumbai; const smartAccount = await createSmartAccountClient({ @@ -246,13 +247,13 @@ describe("Account Tests", () => { }); it("Should mint an NFT on Mumbai and pay with ERC20 - with token selection and no maxApproval", async () => { - const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; const preferredToken: Hex = "0xda5289fcaaf71d52a80a254da614a192b693e977"; const { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, biconomyPaymasterApiKey, publicClient, + nftAddress, } = mumbai; const smartAccount = await createSmartAccountClient({ @@ -345,11 +346,11 @@ describe("Account Tests", () => { }, 60000); it("Should throw and error if missing field for ERC20 Paymaster user op", async () => { - const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; const { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, biconomyPaymasterApiKey, + nftAddress, } = mumbai; const smartAccount = await createSmartAccountClient({ @@ -466,6 +467,100 @@ describe("Account Tests", () => { expect(ecdsaOwnershipModule).toBe(smartAccount.activeValidationModule.getAddress()); }); + it("should deploy a smart account with native token balance", async () => { + const { + bundlerUrl, + biconomyPaymasterApiKey, + viemChain, + publicClient, + whale: { viemWallet: signer, account }, + deploymentCost, + } = mumbai; + + const newPrivateKey = generatePrivateKey(); + const newAccount = privateKeyToAccount(newPrivateKey); + + const newViemWallet = createWalletClient({ + account: newAccount, + chain: viemChain, + transport: http(viemChain.rpcUrls.default.http[0]), + }); + + const smartAccount = await createSmartAccountClient({ + signer: newViemWallet, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const smartAccountAddress = await smartAccount.getAccountAddress(); + + // Setup: + const hash = await signer.sendTransaction({ to: smartAccountAddress, value: BigInt(deploymentCost), account, chain: viemChain }); // Send enough native token to counterfactual address to deploy the smart account + const transaction = await publicClient.waitForTransactionReceipt({ hash }); + expect(transaction).toBeTruthy(); + + // Test: + const { wait } = await smartAccount.deploy(); + const { success } = await wait(); + + const byteCode = await publicClient.getBytecode({ address: smartAccountAddress }); + expect(success).toBe("true"); + expect(byteCode).toBeTruthy(); + }, 60000); + + it("should deploy a smart account with sponsorship", async () => { + const { bundlerUrl, biconomyPaymasterApiKey, viemChain, publicClient } = mumbai; + + const newPrivateKey = generatePrivateKey(); + const newAccount = privateKeyToAccount(newPrivateKey); + + const newViemWallet = createWalletClient({ + account: newAccount, + chain: viemChain, + transport: http(viemChain.rpcUrls.default.http[0]), + }); + + const smartAccount = await createSmartAccountClient({ + signer: newViemWallet, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const smartAccountAddress = await smartAccount.getAccountAddress(); + const balance = await publicClient.getBalance({ address: smartAccountAddress }); + expect(balance).toBe(0n); + + const { wait } = await smartAccount.deploy({ + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + }); + const { success } = await wait(); + + const byteCode = await publicClient.getBytecode({ address: smartAccountAddress }); + expect(success).toBe("true"); + expect(byteCode).toBeTruthy(); + }, 60000); + + it("should fail to deploy a smart account if no native token balance or paymaster", async () => { + const { bundlerUrl, biconomyPaymasterApiKey, viemChain } = mumbai; + + const newPrivateKey = generatePrivateKey(); + const newAccount = privateKeyToAccount(newPrivateKey); + + const newViemWallet = createWalletClient({ + account: newAccount, + chain: viemChain, + transport: http(viemChain.rpcUrls.default.http[0]), + }); + + const smartAccount = await createSmartAccountClient({ + signer: newViemWallet, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + expect(async () => smartAccount.deploy()).rejects.toThrow(ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY); + }); + it("should get supported tokens from the paymaster", async () => { const { whale: { viemWallet: signer }, @@ -489,6 +584,22 @@ describe("Account Tests", () => { expect(tokens[0]).toHaveProperty("logoUrl"); }, 60000); + it("should fail to deploy a smart account if already deployed", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + expect(async () => smartAccount.deploy()).rejects.toThrow(ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED); + }, 60000); + it("should fetch balances for smartAccount", async () => { const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; const { diff --git a/tests/chains.config.ts b/tests/chains.config.ts index c82722a70..53ed1b0b7 100644 --- a/tests/chains.config.ts +++ b/tests/chains.config.ts @@ -12,6 +12,8 @@ type BaseChainConfig = { paymasterUrl?: string; viemChain: Chain; biconomyPaymasterApiKey?: string; + deploymentCost: number; + nftAddress: string; }; export const CHAIN_CONFIG: Record<SupportedTestChain, BaseChainConfig> = { ganache: { // No useful bundler or paymaster tests for ganache @@ -19,6 +21,8 @@ export const CHAIN_CONFIG: Record<SupportedTestChain, BaseChainConfig> = { entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", bundlerUrl: "https://bundler.biconomy.io/api/v2/1/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", viemChain: localhost, + deploymentCost: 10000000000000000, + nftAddress: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e", }, baseSepolia: { chainId: 84532, @@ -27,6 +31,8 @@ export const CHAIN_CONFIG: Record<SupportedTestChain, BaseChainConfig> = { paymasterUrl: "https://paymaster.biconomy.io/api/v1/84532/" + process.env.E2E_BICO_PAYMASTER_KEY_BASE!, viemChain: baseSepolia, biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_BASE!, + deploymentCost: 10000000000000000, + nftAddress: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e", }, mumbai: { chainId: 80001, @@ -35,6 +41,8 @@ export const CHAIN_CONFIG: Record<SupportedTestChain, BaseChainConfig> = { paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/" + process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, viemChain: polygonMumbai, biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, + deploymentCost: 10000000000000000, + nftAddress: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e", }, }; export const E2E_TEST_CHAINS = [CHAIN_CONFIG.mumbai, CHAIN_CONFIG.baseSepolia]; diff --git a/tests/index.d.ts b/tests/index.d.ts index d3093f47a..3589835e7 100644 --- a/tests/index.d.ts +++ b/tests/index.d.ts @@ -6,7 +6,7 @@ import { Signer } from "@ethersproject/abstract-signer"; interface WalletProps { alchemyWalletClientSigner: WalletClientSigner; viemWallet: WalletClient; - balance: BigInt; + balance: bigint; publicAddress: Hex; account: PrivateKeyAccount; privateKey: Hex; @@ -14,6 +14,8 @@ interface WalletProps { } export type TestData = { + nftAddress: Hex; + deploymentCost: number; whale: WalletProps; minnow: WalletProps; publicClient: PublicClient; diff --git a/tests/setup-e2e-tests.ts b/tests/setup-e2e-tests.ts index a95150f4a..1ca7aba79 100644 --- a/tests/setup-e2e-tests.ts +++ b/tests/setup-e2e-tests.ts @@ -100,6 +100,8 @@ beforeAll(async () => { publicClient: whaleBalance.publicClient, chainId: whaleBalance.chainId, bundlerUrl: whaleBalance.bundlerUrl, + deploymentCost: whaleBalance.deploymentCost, + nftAddress: whaleBalance.nftAddress, entryPointAddress: whaleBalance.entryPointAddress, viemChain: whaleBalance.viemChain, biconomyPaymasterApiKey: whaleBalance.biconomyPaymasterApiKey, diff --git a/tests/setup-unit-tests.ts b/tests/setup-unit-tests.ts index 03360b043..d2fdba7d3 100644 --- a/tests/setup-unit-tests.ts +++ b/tests/setup-unit-tests.ts @@ -6,7 +6,7 @@ import { UNIT_TEST_CHAIN } from "./chains.config"; import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; beforeAll(() => { - const { chainId, bundlerUrl, viemChain, entryPointAddress } = UNIT_TEST_CHAIN; + const { chainId, bundlerUrl, viemChain, entryPointAddress, deploymentCost, nftAddress } = UNIT_TEST_CHAIN; const privateKeyOne = generatePrivateKey(); const accountOne = privateKeyToAccount(privateKeyOne); @@ -60,16 +60,5 @@ beforeAll(() => { }; // @ts-ignore - testDataPerChain = [ - { - whale, - minnow, - publicClient, - chainId, - bundlerUrl, - entryPointAddress, - viemChain, - ethersProvider, - }, - ]; + testDataPerChain = [{ nftAddress, deploymentCost, whale, minnow, publicClient, chainId, bundlerUrl, entryPointAddress, viemChain, ethersProvider }]; }); From e74dbf468e1cabfe6f9222e8f001c7449cc3ab48 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Wed, 28 Feb 2024 16:06:23 +0000 Subject: [PATCH 1134/1247] Particle build revert --- packages/particle-auth/package.json | 25 +++---------------------- packages/particle-auth/tsconfig.json | 3 +-- 2 files changed, 4 insertions(+), 24 deletions(-) diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 59b138cdf..0a90a98a9 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -2,18 +2,8 @@ "name": "@biconomy/particle-auth", "version": "4.0.2", "description": "Particle auth for Biconomy SDK", - "main": "./dist/cjs/index.js", - "module": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "typings": "./dist/types/index.d.ts", - "exports": { - ".": { - "import": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./package.json" - }, + "main": "./dist/src/index.js", + "typings": "./dist/src/index.d.ts", "keywords": [ "legos", "batching", @@ -35,16 +25,7 @@ }, "scripts": { "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "yarn build:tsc --watch", - "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", - "build": "yarn unbuild && yarn build:tsc", - "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", - "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", - "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", + "build": "rimraf dist && tsc", "format": "prettier --write \"{src,tests}/**/*.ts\"", "lint": "tslint -p tsconfig.json" }, diff --git a/packages/particle-auth/tsconfig.json b/packages/particle-auth/tsconfig.json index cda17a184..3dc5293ed 100644 --- a/packages/particle-auth/tsconfig.json +++ b/packages/particle-auth/tsconfig.json @@ -5,8 +5,7 @@ "outDir": "dist", "baseUrl": "src", "resolveJsonModule": true, - "esModuleInterop": true, - "lib": ["es2020"], + "esModuleInterop": true }, "include": ["src", "src/**/*.json"] } From f3165628b439b476cf3f6dacbf403311921c2f09 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Wed, 28 Feb 2024 16:37:11 +0000 Subject: [PATCH 1135/1247] bump version --- packages/account/CHANGELOG.md | 4 ++++ packages/account/package.json | 10 +++++----- packages/bundler/CHANGELOG.md | 4 ++++ packages/bundler/package.json | 4 ++-- packages/common/CHANGELOG.md | 4 ++++ packages/common/package.json | 2 +- packages/modules/CHANGELOG.md | 4 ++++ packages/modules/package.json | 8 ++++---- packages/particle-auth/CHANGELOG.md | 4 ++++ packages/particle-auth/package.json | 2 +- packages/paymaster/CHANGELOG.md | 4 ++++ packages/paymaster/package.json | 4 ++-- packages/transak/CHANGELOG.md | 4 ++++ packages/transak/package.json | 2 +- 14 files changed, 44 insertions(+), 16 deletions(-) diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index aa59b7a42..7d7ed9af6 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.3 (2023-28-02) + +VERSION Bump Only. + ## 4.0.2 (2023-26-02) ### Bug Fixes diff --git a/packages/account/package.json b/packages/account/package.json index 53b15dfd8..f5471cbcf 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account", - "version": "4.0.2", + "version": "4.0.3", "description": "This package provides apis for ERC-4337 based smart account implementations", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -68,10 +68,10 @@ }, "dependencies": { "@alchemy/aa-core": "^3.1.1", - "@biconomy/bundler": "^4.0.1", - "@biconomy/common": "^4.0.1", - "@biconomy/modules": "^4.0.1", - "@biconomy/paymaster": "^4.0.1", + "@biconomy/bundler": "^4.0.3", + "@biconomy/common": "^4.0.3", + "@biconomy/modules": "^4.0.3", + "@biconomy/paymaster": "^4.0.3", "viem": "^2.7.12" } } diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index 5e8997aff..08d5af51d 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.3 (2023-28-02) + +VERSION Bump Only. + ## 4.0.2 (2023-26-02) VERSION Bump Only. diff --git a/packages/bundler/package.json b/packages/bundler/package.json index f46538265..c73f8f10c 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/bundler", - "version": "4.0.2", + "version": "4.0.3", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -57,7 +57,7 @@ }, "dependencies": { "@alchemy/aa-core": "^3.1.1", - "@biconomy/common": "^4.0.2", + "@biconomy/common": "^4.0.3", "viem": "^2.7.12" }, "devDependencies": { diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index 720249404..6fa8722c0 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.3 (2023-28-02) + +VERSION Bump Only. + ## 4.0.2 (2023-26-02) VERSION Bump Only. diff --git a/packages/common/package.json b/packages/common/package.json index 7449fa857..8336c7675 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "4.0.2", + "version": "4.0.3", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md index 99552eee1..76d05229f 100644 --- a/packages/modules/CHANGELOG.md +++ b/packages/modules/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.3 (2023-28-02) + +VERSION Bump Only. + ## 4.0.2 (2023-26-02) VERSION Bump Only. diff --git a/packages/modules/package.json b/packages/modules/package.json index 83656ba9e..f9bc8f520 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/modules", - "version": "4.0.2", + "version": "4.0.3", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -54,7 +54,7 @@ }, "dependencies": { "@alchemy/aa-core": "^3.1.1", - "@biconomy/common": "^4.0.2", + "@biconomy/common": "^4.0.3", "@ethersproject/abi": "^5.7.0", "merkletreejs": "^0.3.11", "viem": "^2.7.12" @@ -64,7 +64,7 @@ "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12", - "@biconomy/paymaster": "^4.0.2", - "@biconomy/modules": "^4.0.2" + "@biconomy/paymaster": "^4.0.3", + "@biconomy/modules": "^4.0.3" } } diff --git a/packages/particle-auth/CHANGELOG.md b/packages/particle-auth/CHANGELOG.md index cd78326dd..0fe532b3e 100644 --- a/packages/particle-auth/CHANGELOG.md +++ b/packages/particle-auth/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.3 (2023-28-02) + +Fix build + ## 4.0.2 (2023-12-28) Fix build diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 0a90a98a9..e0c1ee819 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/particle-auth", - "version": "4.0.2", + "version": "4.0.3", "description": "Particle auth for Biconomy SDK", "main": "./dist/src/index.js", "typings": "./dist/src/index.d.ts", diff --git a/packages/paymaster/CHANGELOG.md b/packages/paymaster/CHANGELOG.md index 5bae8eecd..aa60e1174 100644 --- a/packages/paymaster/CHANGELOG.md +++ b/packages/paymaster/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.3 (2023-28-02) + +VERSION Bump Only. + ## 4.0.2 (2023-26-02) VERSION Bump Only. diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index c6a6abfba..6360011b7 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/paymaster", - "version": "4.0.2", + "version": "4.0.3", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -54,7 +54,7 @@ }, "dependencies": { "@alchemy/aa-core": "^3.1.1", - "@biconomy/common": "^4.0.2", + "@biconomy/common": "^4.0.3", "viem": "^2.7.12" }, "devDependencies": { diff --git a/packages/transak/CHANGELOG.md b/packages/transak/CHANGELOG.md index e72733efb..9d1cd4246 100644 --- a/packages/transak/CHANGELOG.md +++ b/packages/transak/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.3 (2023-28-02) + +VERSION Bump Only. + ## 4.0.2 (2023-26-02) VERSION Bump Only. diff --git a/packages/transak/package.json b/packages/transak/package.json index ca47fc6cb..9afe8a662 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/transak", - "version": "4.0.2", + "version": "4.0.3", "description": "transak for biconomy sdk", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", From 5051ba5ff14220ad616f1ec3bc93a3f42d6f8887 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Thu, 29 Feb 2024 10:14:05 +0000 Subject: [PATCH 1136/1247] Feat(SMA-675): Add optimism tests (#437) * Resolved SMA-675 * fix unit tests * Fix all tests * typo --- .env.example | 4 +- .github/workflows/mainnet_tests.yml | 32 +++++ jest.config.ts | 6 + packages/account/tests/account.e2e.spec.ts | 35 ++++-- .../tests/account.optimism.e2e.spec.ts | 118 ++++++++++++++++++ .../account/tests/account.read.e2e.spec.ts | 21 ++-- packages/account/tests/account.spec.ts | 16 +++ packages/modules/src/utils/Constants.ts | 2 + ...batchedSessionValidationModule.e2e.spec.ts | 34 +++-- packages/modules/tests/modules.e2e.spec.ts | 62 +++++++++ .../multiChainValidationModule.e2e.spec.ts | 18 ++- .../tests/sessionValidationModule.e2e.spec.ts | 31 ++++- tests/chains.config.ts | 16 ++- tests/setup-e2e-tests.ts | 4 +- yarn.lock | 30 ++--- 15 files changed, 367 insertions(+), 62 deletions(-) create mode 100644 .github/workflows/mainnet_tests.yml create mode 100644 packages/account/tests/account.optimism.e2e.spec.ts create mode 100644 packages/modules/tests/modules.e2e.spec.ts diff --git a/.env.example b/.env.example index a293b6aaf..fdf442b9d 100644 --- a/.env.example +++ b/.env.example @@ -2,4 +2,6 @@ E2E_PRIVATE_KEY_ONE= E2E_PRIVATE_KEY_TWO= E2E_BICO_PAYMASTER_KEY_MUMBAI= E2E_BICO_PAYMASTER_KEY_BASE= -BICONOMY_SDK_DEBUG=true \ No newline at end of file +E2E_BICO_PAYMASTER_KEY_OP= +BICONOMY_SDK_DEBUG=true +WITH_MAINNET_TESTS=false \ No newline at end of file diff --git a/.github/workflows/mainnet_tests.yml b/.github/workflows/mainnet_tests.yml new file mode 100644 index 000000000..3118a1e94 --- /dev/null +++ b/.github/workflows/mainnet_tests.yml @@ -0,0 +1,32 @@ +name: E2E Test workflow - with mainnet tests +on: + workflow_dispatch: +jobs: + e2e_test: + name: E2E tests - with mainnet tests + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18.x] + + steps: + - name: Checkout + uses: "actions/checkout@main" + + - name: Set Node.js + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: yarn install --frozen-lockfile && yarn build + + - name: Run tests + env: + E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} + E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} + E2E_BICO_PAYMASTER_KEY_MUMBAI: ${{ secrets.E2E_BICO_PAYMASTER_KEY_MUMBAI }} + E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} + E2E_BICO_PAYMASTER_KEY_OP: ${{ secrets.E2E_BICO_PAYMASTER_KEY_OP }} + WITH_MAINNET_TESTS: true + run: yarn test:e2e diff --git a/jest.config.ts b/jest.config.ts index 7cc8b4123..844398aba 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -74,6 +74,12 @@ const config: Config = { // "node_modules" // ], + workerThreads: true, + // This is experimental feature. Keep in mind that the worker threads use structured clone instead of JSON.stringify() to serialize messages. + // This means that built-in JavaScript objects as BigInt, Map or Set will get serialized properly. + // However extra properties set on Error, Map or Set will not be passed on through the serialization step. + // For more details see the article on structured clone. + // An array of file extensions your modules use moduleFileExtensions: ["js", "mjs", "cjs", "jsx", "ts", "tsx", "json", "node"], diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index d5e003c62..99a67b422 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,5 +1,5 @@ import { TestData } from "../../../tests"; -import { createSmartAccountClient, ERROR_MESSAGES, FeeQuotesOrDataResponse, IHybridPaymaster, PaymasterMode } from "../src/index"; +import { createSmartAccountClient, ERROR_MESSAGES, FeeQuotesOrDataResponse, PaymasterMode } from "../src/index"; import { Hex, createWalletClient, encodeFunctionData, getContract, http, parseAbi } from "viem"; import { UserOperationStruct } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "../../../tests/utils"; @@ -9,10 +9,11 @@ import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; describe("Account Tests", () => { let mumbai: TestData; let baseSepolia: TestData; + let optimism: TestData; beforeEach(() => { // @ts-ignore: Comes from setup-e2e-tests - [mumbai, baseSepolia] = testDataPerChain; + [mumbai, baseSepolia, optimism] = testDataPerChain; }); it("should have addresses", async () => { @@ -28,6 +29,12 @@ describe("Account Tests", () => { bundlerUrl: bundlerUrlBase, } = baseSepolia; + const { + whale: { viemWallet: signerOp, publicAddress: senderOp }, + minnow: { viemWallet: recipientSignerOp, publicAddress: recipientOp }, + bundlerUrl: bundlerUrlOp, + } = optimism; + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, @@ -48,6 +55,16 @@ describe("Account Tests", () => { bundlerUrl: bundlerUrlBase, }); + const smartAccountOp = await createSmartAccountClient({ + signer: signerOp, + bundlerUrl: bundlerUrlOp, + }); + + const reciepientSmartAccountOp = await createSmartAccountClient({ + signer: recipientSignerOp, + bundlerUrl: bundlerUrlOp, + }); + const addresses = await Promise.all([ sender, smartAccount.getAddress(), @@ -57,6 +74,10 @@ describe("Account Tests", () => { smartAccountBase.getAddress(), recipientBase, reciepientSmartAccountBase.getAddress(), + senderOp, + smartAccountOp.getAddress(), + recipientOp, + reciepientSmartAccountOp.getAddress(), ]); expect(addresses.every(Boolean)).toBeTruthy(); }); @@ -79,7 +100,6 @@ describe("Account Tests", () => { { to: recipient, value: 1, - data: "0x", }, { simulationType: "validation_and_execution", @@ -90,8 +110,7 @@ describe("Account Tests", () => { const newBalance = (await checkBalance(publicClient, recipient)) as bigint; expect(result?.receipt?.transactionHash).toBeTruthy(); - expect(result.success).toBe("true"); - expect(newBalance).toBeGreaterThan(balance); + expect(newBalance - balance).toBe(1n); }, 50000); it("Create a smart account with paymaster with an api key", async () => { @@ -175,6 +194,8 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, }); + const accountAddress = await smartAccount.getAddress(); + const encodedCall = encodeFunctionData({ abi: parseAbi(["function safeMint(address _to)"]), functionName: "safeMint", @@ -187,8 +208,8 @@ describe("Account Tests", () => { }; const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress()); - const usdcBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); + const maticBalanceBefore = await checkBalance(publicClient, accountAddress); + const usdcBalanceBefore = await checkBalance(publicClient, accountAddress, "0xda5289fcaaf71d52a80a254da614a192b693e977"); const { wait } = await smartAccount.sendTransaction([transaction], { paymasterServiceData: { diff --git a/packages/account/tests/account.optimism.e2e.spec.ts b/packages/account/tests/account.optimism.e2e.spec.ts new file mode 100644 index 000000000..d558ba4ed --- /dev/null +++ b/packages/account/tests/account.optimism.e2e.spec.ts @@ -0,0 +1,118 @@ +import { TestData } from "../../../tests"; +import { createSmartAccountClient, PaymasterMode } from "../src/index"; +import { encodeFunctionData, parseAbi } from "viem"; +import { checkBalance } from "../../../tests/utils"; + +const maybe = process.env.WITH_MAINNET_TESTS === "true" ? describe : describe.skip; + +maybe("Account Tests", () => { + let optimism: TestData; + let _: TestData; + let __: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-e2e-tests + [_, __, optimism] = testDataPerChain; + }); + + it("should send some native token to a recipient on optimism", async () => { + const { + whale: { viemWallet: signer, publicAddress: sender }, + minnow: { publicAddress: recipient }, + bundlerUrl, + publicClient, + } = optimism; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const accountAddress = await smartAccount.getAddress(); + + const balanceOfRecipient = (await checkBalance(publicClient, recipient)) as bigint; + const smartAccountBalance = (await checkBalance(publicClient, accountAddress)) as bigint; + const { wait } = await smartAccount.sendTransaction( + { + to: recipient, + value: BigInt(1), + }, + { + simulationType: "validation_and_execution", + }, + ); + + const result = await wait(); + const newBalanceOfRecipient = (await checkBalance(publicClient, recipient)) as bigint; + + expect(result?.receipt?.transactionHash).toBeTruthy(); + expect(result.success).toBe("true"); + expect(newBalanceOfRecipient).toBeGreaterThan(balanceOfRecipient); + }, 50000); + + it("Create a smart account with paymaster with an api key on optimism", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + biconomyPaymasterApiKey, + } = optimism; + + const smartAccount = await createSmartAccountClient({ + signer, + biconomyPaymasterApiKey, + bundlerUrl, + }); + + const paymaster = smartAccount.paymaster; + expect(paymaster).not.toBeNull(); + expect(paymaster).not.toBeUndefined(); + }); + + it("Should gaslessly mint an NFT on optimism", async () => { + const { + whale: { viemWallet: signer, publicAddress: recipient }, + bundlerUrl, + biconomyPaymasterApiKey, + publicClient, + nftAddress, + } = optimism; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: [recipient], + }); + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + }; + + const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + + const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress()); + + const response = await smartAccount.sendTransaction(transaction, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + simulationType: "validation_and_execution", + }); + + const userOpReceipt = await response.wait(3); + expect(userOpReceipt.userOpHash).toBeTruthy(); + expect(userOpReceipt.success).toBe("true"); + + const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress()); + + expect(maticBalanceAfter).toEqual(maticBalanceBefore); + + const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; + + expect(newBalance - balance).toBe(1n); + }, 50000); +}); diff --git a/packages/account/tests/account.read.e2e.spec.ts b/packages/account/tests/account.read.e2e.spec.ts index 9fc3a1f02..80abf9d21 100644 --- a/packages/account/tests/account.read.e2e.spec.ts +++ b/packages/account/tests/account.read.e2e.spec.ts @@ -1,6 +1,6 @@ import { TestData } from "../../../tests"; import { createSmartAccountClient } from "../src/index"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, createECDSAOwnershipValidationModule } from "@biconomy/modules"; +import { DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE, createECDSAOwnershipValidationModule } from "@biconomy/modules"; describe("Account Tests", () => { let mumbai: TestData; @@ -27,22 +27,27 @@ describe("Account Tests", () => { it("should get all modules", async () => { const { - whale: { viemWallet: signer }, + whale: { + viemWallet: signer, + account: { address: accountAddress }, + }, bundlerUrl, + biconomyPaymasterApiKey, } = mumbai; - const smartWallet = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, + biconomyPaymasterApiKey, }); - const modules = await smartWallet.getAllModules(); - expect(modules).toContain("0x000000D50C68705bd6897B2d17c7de32FB519fDA"); // erc20 module - expect(modules).toContain("0x000002FbFfedd9B33F4E7156F2DE8D48945E7489"); // session manager module - expect(modules).toContain("0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e"); // ecdsa ownership module + const modules = await smartAccount.getAllModules(); + + expect(modules).toContain(DEFAULT_SESSION_KEY_MANAGER_MODULE); // session manager module + expect(modules).toContain(DEFAULT_ECDSA_OWNERSHIP_MODULE); // ecdsa ownership module }, 30000); - it("should disabled module data", async () => { + it("should get disabled module data", async () => { const { whale: { viemWallet: signer }, bundlerUrl, diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 91b1656c6..a5dbeab58 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -29,6 +29,22 @@ describe("Account Tests", () => { expect(address).toBeTruthy(); }); + it("should create a whale smartAccountClient from an ethers signer", async () => { + const { + bundlerUrl, + whale: { ethersSigner: signer }, + } = ganache; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl: mockBundlerUrl, + rpcUrl: localhost.rpcUrls.default.http[0], + }); + const address = await smartAccount.getAccountAddress(); + console.log({ address }); + expect(address).toBeTruthy(); + }); + it("should create a smartAccountClient from a walletClient", async () => { const { whale: { viemWallet: signer }, diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts index 407e374d0..7a2a308fa 100644 --- a/packages/modules/src/utils/Constants.ts +++ b/packages/modules/src/utils/Constants.ts @@ -33,6 +33,8 @@ export const BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION = { V1_0_0: "0x00000D09967410f8C76752A104c9848b57ebba55", }; +export const DEFAULT_ERC20_MODULE = "0x000000D50C68705bd6897B2d17c7de32FB519fDA"; + export const DEFAULT_MULTICHAIN_MODULE = "0x000000824dc138db84FD9109fc154bdad332Aa8E"; export const MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION = { diff --git a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts index 026b61bbe..f4f5950fc 100644 --- a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts @@ -10,6 +10,7 @@ import { encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "v import { TestData } from "../../../tests"; import { checkBalance } from "../../../tests/utils"; import { PaymasterMode } from "@biconomy/paymaster"; +import { Logger } from "@biconomy/common"; describe("Batched Session Router Tests", () => { let mumbai: TestData; @@ -44,7 +45,9 @@ describe("Batched Session Router Tests", () => { index: 3, // Increasing index to not conflict with other test cases and use a new smart account }); - const sessionFileStorage: SessionFileStorage = new SessionFileStorage(await smartAccount.getAddress()); + const smartAccountAddress = await smartAccount.getAddress(); + + const sessionFileStorage: SessionFileStorage = new SessionFileStorage(smartAccountAddress); try { sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); @@ -54,32 +57,27 @@ describe("Batched Session Router Tests", () => { expect(sessionSigner).toBeTruthy(); - const smartAccountAddress = await smartAccount.getAddress(); - console.log("Smart Account Address: ", smartAccountAddress); - // First we need to check if smart account is deployed // if not deployed, send an empty transaction to deploy it const isDeployed = await smartAccount.isAccountDeployed(); + if (!isDeployed) { - const emptyTx = { - to: smartAccountAddress, - data: "0x", - }; - const userOpResponse = await smartAccount.sendTransaction(emptyTx, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); - await userOpResponse.wait(); + const { wait } = await smartAccount.deploy({ paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); + const { success } = await wait(); + expect(success).toBe("true"); } // Create session module const sessionModule = await createSessionKeyManagerModule({ moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, - smartAccountAddress: await smartAccount.getAddress(), + smartAccountAddress, sessionStorageClient: sessionFileStorage, }); // Create batched session module const batchedSessionModule = await createBatchedSessionRouterModule({ moduleAddress: DEFAULT_BATCHED_SESSION_ROUTER_MODULE, - smartAccountAddress: await smartAccount.getAddress(), + smartAccountAddress, sessionKeyManagerModule: sessionModule, }); @@ -144,9 +142,10 @@ describe("Batched Session Router Tests", () => { const userOpResponse1 = await smartAccount.sendTransaction(txArray, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); // this user op will enable the modules and setup session allowed calls const transactionDetails = await userOpResponse1.wait(); - console.log("Tx Hash: ", transactionDetails.receipt.transactionHash); + expect(transactionDetails.success).toBe("true"); + Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash); - const usdcBalance = await checkBalance(publicClient, await smartAccount.getAccountAddress(), "0xdA5289fCAAF71d52a80A254da614a192b693e977"); + const usdcBalance = await checkBalance(publicClient, smartAccountAddress, "0xdA5289fCAAF71d52a80A254da614a192b693e977"); expect(usdcBalance).toBeGreaterThan(0); smartAccount = smartAccount.setActiveValidationModule(batchedSessionModule); @@ -177,7 +176,7 @@ describe("Batched Session Router Tests", () => { const activeModule = smartAccount.activeValidationModule; expect(activeModule).toEqual(batchedSessionModule); - const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAccountAddress()); + const maticBalanceBefore = await checkBalance(publicClient, smartAccountAddress); // failing with dummyTx because of invalid sessionKeyData const userOpResponse2 = await smartAccount.sendTransaction([transferTx, transferTx2], { @@ -198,7 +197,6 @@ describe("Batched Session Router Tests", () => { }, }); - const receipt = await userOpResponse2.wait(); expect(receipt.success).toBe("true"); @@ -206,10 +204,10 @@ describe("Batched Session Router Tests", () => { expect(userOpResponse2.userOpHash).toBeTruthy(); expect(userOpResponse2.userOpHash).not.toBeNull(); - const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAccountAddress()); + const maticBalanceAfter = await checkBalance(publicClient, smartAccountAddress); expect(maticBalanceAfter).toEqual(maticBalanceBefore); - console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); + Logger.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); }, 60000); }); diff --git a/packages/modules/tests/modules.e2e.spec.ts b/packages/modules/tests/modules.e2e.spec.ts new file mode 100644 index 000000000..9de6d50ee --- /dev/null +++ b/packages/modules/tests/modules.e2e.spec.ts @@ -0,0 +1,62 @@ +import { TestData } from "../../../tests"; +import { PaymasterMode, Transaction, createSmartAccountClient } from "@biconomy/account"; +import { DEFAULT_BATCHED_SESSION_ROUTER_MODULE, DEFAULT_ERC20_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "../src"; + +describe("Account Tests", () => { + let mumbai: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-unit-tests + [mumbai] = testDataPerChain; + }); + + it("should enable batched module", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const isBRMenabled = await smartAccount.isModuleEnabled(DEFAULT_BATCHED_SESSION_ROUTER_MODULE); + + if (!isBRMenabled) { + const tx = await smartAccount.getEnableModuleData(DEFAULT_BATCHED_SESSION_ROUTER_MODULE); + const { wait } = await smartAccount.sendTransaction(tx, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + }); + const { success } = await wait(); + expect(success).toBe("true"); + } + }, 50000); + + it("should enable session module", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + biconomyPaymasterApiKey, + } = mumbai; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + biconomyPaymasterApiKey, + }); + + const isSessionKeyEnabled = await smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); + + if (!isSessionKeyEnabled) { + const tx = await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); + const { wait } = await smartAccount.sendTransaction(tx, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + }); + const { success } = await wait(); + expect(success).toBe("true"); + } + }, 50000); +}); diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts index 4d7cb123c..e3ce46159 100644 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -3,6 +3,7 @@ import { TestData } from "../../../tests"; import { createSmartAccountClient } from "../../account/src/index"; import { Hex, encodeFunctionData, parseAbi } from "viem"; import { DEFAULT_MULTICHAIN_MODULE, MultiChainValidationModule } from "@biconomy/modules"; +import { Logger } from "@biconomy/common"; describe("MultiChainValidation Module Tests", () => { let mumbai: TestData; @@ -54,6 +55,19 @@ describe("MultiChainValidation Module Tests", () => { }), ]); + // Check if the smart account has been deployed + const [isPolygonDeployed, isBaseDeployed] = await Promise.all([polygonAccount.isAccountDeployed(), baseAccount.isAccountDeployed()]); + if (!isPolygonDeployed) { + const { wait } = await polygonAccount.deploy({ paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); + const { success } = await wait(); + expect(success).toBe("true"); + } + if (!isBaseDeployed) { + const { wait } = await baseAccount.deploy({ paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); + const { success } = await wait(); + expect(success).toBe("true"); + } + const moduleEnabled1 = await polygonAccount.isModuleEnabled(DEFAULT_MULTICHAIN_MODULE); const moduleActive1 = polygonAccount.activeValidationModule; expect(moduleEnabled1).toBeTruthy(); @@ -93,8 +107,8 @@ describe("MultiChainValidation Module Tests", () => { const userOpResponse1 = await baseAccount.sendSignedUserOp(returnedOps[0] as any); const userOpResponse2 = await polygonAccount.sendSignedUserOp(returnedOps[1] as any); - console.log(userOpResponse1.userOpHash, "MULTICHAIN BASE USER OP HASH"); - console.log(userOpResponse2.userOpHash, "MULTICHAIN POLYGON USER OP HASH"); + Logger.log(userOpResponse1.userOpHash, "MULTICHAIN BASE USER OP HASH"); + Logger.log(userOpResponse2.userOpHash, "MULTICHAIN POLYGON USER OP HASH"); expect(userOpResponse1.userOpHash).toBeTruthy(); expect(userOpResponse2.userOpHash).toBeTruthy(); diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index 6cb6e0605..e8facc370 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -5,6 +5,7 @@ import { Hex, encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } fr import { TestData } from "../../../tests"; import { checkBalance } from "../../../tests/utils"; import { PaymasterMode } from "@biconomy/paymaster"; +import { Logger } from "@biconomy/common"; describe("Session Validation Module Tests", () => { let mumbai: TestData; @@ -39,7 +40,20 @@ describe("Session Validation Module Tests", () => { index: 1, // Increasing index to not conflict with other test cases and use a new smart account }); - const sessionFileStorage: SessionFileStorage = new SessionFileStorage(await smartAccount.getAccountAddress()); + const accountAddress = await smartAccount.getAccountAddress(); + const sessionFileStorage: SessionFileStorage = new SessionFileStorage(accountAddress); + + // First we need to check if smart account is deployed + // if not deployed, send an empty transaction to deploy it + const isDeployed = await smartAccount.isAccountDeployed(); + + Logger.log("session", { isDeployed }); + + if (!isDeployed) { + const { wait } = await smartAccount.deploy({ paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); + const { success } = await wait(); + expect(success).toBe("true"); + } try { sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); @@ -87,22 +101,27 @@ describe("Session Validation Module Tests", () => { const txArray: any = []; // Check if module is enabled - const isEnabled = await smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); + if (!isEnabled) { const enableModuleTrx = await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); txArray.push(enableModuleTrx); txArray.push(setSessionAllowedTrx); } else { - console.log("MODULE ALREADY ENABLED"); + Logger.log("MODULE ALREADY ENABLED"); txArray.push(setSessionAllowedTrx); } - const userOp = await smartAccount.buildUserOp(txArray); + const userOp = await smartAccount.buildUserOp(txArray, { + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + }, + }); const userOpResponse1 = await smartAccount.sendUserOp(userOp); const transactionDetails = await userOpResponse1.wait(); - console.log("Tx Hash: ", transactionDetails.receipt.transactionHash); + expect(transactionDetails.success).toBe("true"); + Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash); const encodedCall = encodeFunctionData({ abi: parseAbi(["function transfer(address _to, uint256 _value)"]), @@ -150,6 +169,6 @@ describe("Session Validation Module Tests", () => { expect(maticBalanceAfter).toEqual(maticBalanceBefore); - console.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); + Logger.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); }, 60000); }); diff --git a/tests/chains.config.ts b/tests/chains.config.ts index 53ed1b0b7..e3696ef61 100644 --- a/tests/chains.config.ts +++ b/tests/chains.config.ts @@ -1,10 +1,10 @@ import { localhost, Chain } from "viem/chains"; -import { polygonMumbai, baseSepolia } from "viem/chains"; +import { polygonMumbai, baseSepolia, optimism } from "viem/chains"; import { config } from "dotenv"; config(); -export type SupportedTestChain = "ganache" | "baseSepolia" | "mumbai"; +export type SupportedTestChain = "ganache" | "baseSepolia" | "mumbai" | "optimism"; type BaseChainConfig = { chainId: number; entryPointAddress: string; @@ -44,8 +44,18 @@ export const CHAIN_CONFIG: Record<SupportedTestChain, BaseChainConfig> = { deploymentCost: 10000000000000000, nftAddress: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e", }, + optimism: { + chainId: 10, + entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + bundlerUrl: "https://bundler.biconomy.io/api/v2/10/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", + paymasterUrl: "https://paymaster.biconomy.io/api/v1/10/" + process.env.E2E_BICO_PAYMASTER_KEY_OP!, + viemChain: optimism, + biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_OP!, + deploymentCost: 10000000000000000, + nftAddress: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e", + } }; -export const E2E_TEST_CHAINS = [CHAIN_CONFIG.mumbai, CHAIN_CONFIG.baseSepolia]; +export const E2E_TEST_CHAINS = [CHAIN_CONFIG.mumbai, CHAIN_CONFIG.baseSepolia, CHAIN_CONFIG.optimism]; export const UNIT_TEST_CHAIN = CHAIN_CONFIG.ganache; export default CHAIN_CONFIG; \ No newline at end of file diff --git a/tests/setup-e2e-tests.ts b/tests/setup-e2e-tests.ts index 1ca7aba79..88812757b 100644 --- a/tests/setup-e2e-tests.ts +++ b/tests/setup-e2e-tests.ts @@ -85,9 +85,9 @@ beforeAll(async () => { })) .sort((a, b) => { if (a.balance > b.balance) { - return 1; - } else if (a.balance > b.balance) { return -1; + } else if (a.balance > b.balance) { + return 1; } else { return 0; } diff --git a/yarn.lock b/yarn.lock index 694da557a..c4cad678c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3119,9 +3119,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001589" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz#7ad6dba4c9bf6561aec8291976402339dc157dfb" - integrity sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg== + version "1.0.30001591" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz#16745e50263edc9f395895a7cd468b9f3767cf33" + integrity sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ== catering@^2.0.0, catering@^2.1.0: version "2.1.1" @@ -3824,9 +3824,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.681" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz#5f23fad8aa7e1f64cbb7dd9d15c7e39a1cd7e6e3" - integrity sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg== + version "1.4.682" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.682.tgz#27577b88ccccc810e09b05093345cf1830f1bd65" + integrity sha512-oCglfs8yYKs9RQjJFOHonSnhikPK3y+0SvSYc/YpYJV//6rqc0/hbwd0c7vgK4vrl6y2gJAwjkhkSGWK+z4KRA== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -4099,9 +4099,9 @@ eslint-import-resolver-node@^0.3.9: resolve "^1.22.4" 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== + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== dependencies: debug "^3.2.7" @@ -7082,9 +7082,9 @@ neo-async@^2.6.2: integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nock@^13.2.9: - version "13.5.3" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.3.tgz#9858adf5b840696a410baf98bda720d5fad4f075" - integrity sha512-2NlGmHIK2rTeyy7UaY1ZNg0YZfEJMxghXgZi0b4DBsUyoDNTTxZeCSG1nmirAWF44RkkoV8NnegLVQijgVapNQ== + version "13.5.4" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.4.tgz#8918f0addc70a63736170fef7106a9721e0dc479" + integrity sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" @@ -9389,9 +9389,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.5.0, viem@^2.7.3: - version "2.7.14" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.14.tgz#347d316cb5400f0b896b2205b1bc8073aa5e27e0" - integrity sha512-5b1KB1gXli02GOQHZIUsRluNUwssl2t4hqdFAzyWPwJ744N83jAOBOjOkrGz7K3qMIv9b0GQt3DoZIErSQTPkQ== + version "2.7.15" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.15.tgz#0dfdcb75be196c85839950b0ccb88be0b377609c" + integrity sha512-I2RMQpg1/MC7fXVjHxeXRPU9k/WEOvZajK/KZSr7DChS0AaZ7uovsQWppwBn2wvZWguTCIRAHqzMwIEGku95yQ== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From e4f067cea3bd196f77f1dc4289faec72567f06ee Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Fri, 1 Mar 2024 11:12:07 +0000 Subject: [PATCH 1137/1247] usdt fix --- packages/account/tests/account.e2e.spec.ts | 1 + yarn.lock | 203 +++++++++++---------- 2 files changed, 105 insertions(+), 99 deletions(-) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index e1b01a510..29ba33da7 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -604,6 +604,7 @@ describe("Account Tests", () => { }); it("should fetch balances for smartAccount", async () => { + const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; const { whale: { viemWallet: signer }, bundlerUrl, diff --git a/yarn.lock b/yarn.lock index c4cad678c..3190ae991 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,12 +23,12 @@ zod "^3.22.4" "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": version "7.23.5" @@ -44,20 +44,20 @@ integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" - integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" + integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.9" - "@babel/parser" "^7.23.9" - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/helpers" "^7.24.0" + "@babel/parser" "^7.24.0" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -124,9 +124,9 @@ "@babel/helper-validator-identifier" "^7.22.20" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== "@babel/helper-simple-access@^7.22.5": version "7.22.5" @@ -157,14 +157,14 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" - integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== +"@babel/helpers@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" + integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== dependencies: - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" "@babel/highlight@^7.23.4": version "7.23.4" @@ -175,10 +175,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" - integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" + integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -279,25 +279,25 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/runtime@^7.21.0": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" - integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" - integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== +"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== dependencies: "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" -"@babel/traverse@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" - integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== +"@babel/traverse@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" + integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== dependencies: "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" @@ -305,15 +305,15 @@ "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.3": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" - integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.3.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -812,9 +812,9 @@ "@ethersproject/strings" "^5.7.0" "@fastify/busboy@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" - integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": version "1.1.3" @@ -1065,24 +1065,24 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz#9b18145d26cf33d08576cf4c7665b28554480ed7" - integrity sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw== +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" @@ -1097,10 +1097,10 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.23" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz#afc96847f3f07841477f303eed687707a5aacd80" - integrity sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24": + version "0.3.24" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.24.tgz#e5640be1cab4085e4012a94c132ae86138f90f48" + integrity sha512-+VaWXDa6+l6MhflBvVXjIEAzb59nQ2JUK3bwRp2zRpPtU+8TFRy9Gg/5oIcNlkEL5PGlBFGfemUVvIgLnTzq7Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -1767,9 +1767,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.19" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.19.tgz#63013cbbebf36c37e970f83406ef955f08309499" - integrity sha512-cQOGS0dH6LMDyJ7bkaLj6FShYSyz8OZ2hBvtBPdTtuMCsTlQPFcXKR6QI2CpJZBbb6m1fIXZEXlFYFZzY/t6ng== + version "1.3.21" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.21.tgz#82d2b098e165fc198e6e6e3e4c8b2154235e3aa1" + integrity sha512-tuUVuOPf+el+kDlHLFMyDy4IkoGjk+P3QvVrxT7WnmEma1NgWTE7RaNsniwqn6SYkAwAxksL/D9aADUXZxqPmw== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -2157,9 +2157,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.20" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.20.tgz#f0a2aee575215149a62784210ad88b3a34843659" - integrity sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg== + version "20.11.24" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792" + integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long== dependencies: undici-types "~5.26.4" @@ -3824,9 +3824,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.682" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.682.tgz#27577b88ccccc810e09b05093345cf1830f1bd65" - integrity sha512-oCglfs8yYKs9RQjJFOHonSnhikPK3y+0SvSYc/YpYJV//6rqc0/hbwd0c7vgK4vrl6y2gJAwjkhkSGWK+z4KRA== + version "1.4.689" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.689.tgz#94fe370b800d978b606a2b4c0c5db5c8c98db4f2" + integrity sha512-GatzRKnGPS1go29ep25reM94xxd1Wj8ritU0yRhCJ/tr1Bg8gKnm6R9O/yPOhGQBoLMZ9ezfrpghNaTw97C/PQ== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -3923,17 +3923,17 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" - integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== + version "1.22.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" + integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== dependencies: array-buffer-byte-length "^1.0.1" arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.6" + available-typed-arrays "^1.0.7" call-bind "^1.0.7" es-define-property "^1.0.0" es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" get-intrinsic "^1.2.4" @@ -3941,15 +3941,15 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: globalthis "^1.0.3" gopd "^1.0.1" has-property-descriptors "^1.0.2" - has-proto "^1.0.1" + has-proto "^1.0.3" has-symbols "^1.0.3" hasown "^2.0.1" internal-slot "^1.0.7" is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.2" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" is-typed-array "^1.1.13" is-weakref "^1.0.2" @@ -3962,10 +3962,10 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.1" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" unbox-primitive "^1.0.2" which-typed-array "^1.1.14" @@ -3986,7 +3986,7 @@ es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-set-tostringtag@^2.0.2: +es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== @@ -5542,7 +5542,7 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-negative-zero@^2.0.2: +is-negative-zero@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== @@ -5599,7 +5599,7 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-shared-array-buffer@^1.0.2: +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== @@ -8432,11 +8432,11 @@ shiki@^0.14.7: vscode-textmate "^8.0.0" side-channel@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" - integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.7" es-errors "^1.3.0" get-intrinsic "^1.2.4" object-inspect "^1.13.1" @@ -8926,13 +8926,18 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@0.2.1, tmp@~0.2.1: +tmp@0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== dependencies: rimraf "^3.0.0" +tmp@~0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -9125,7 +9130,7 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typed-array-buffer@^1.0.1: +typed-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== @@ -9134,7 +9139,7 @@ typed-array-buffer@^1.0.1: es-errors "^1.3.0" is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.0: +typed-array-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== @@ -9145,7 +9150,7 @@ typed-array-byte-length@^1.0.0: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.0: +typed-array-byte-offset@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== @@ -9157,7 +9162,7 @@ typed-array-byte-offset@^1.0.0: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-length@^1.0.4: +typed-array-length@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== @@ -9389,9 +9394,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.5.0, viem@^2.7.3: - version "2.7.15" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.15.tgz#0dfdcb75be196c85839950b0ccb88be0b377609c" - integrity sha512-I2RMQpg1/MC7fXVjHxeXRPU9k/WEOvZajK/KZSr7DChS0AaZ7uovsQWppwBn2wvZWguTCIRAHqzMwIEGku95yQ== + version "2.7.16" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.16.tgz#99e66bbec661b2284bc32061474f20a90381bdcb" + integrity sha512-yOPa9yaoJUm44m0Qe3ugHnkHol3QQlFxN3jT+bq+lQip7X7cWdPfmguyfLWX2viCXcmYZUDiQdeFbkPW9lw11Q== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From d2e8ee1ae30ce2fb850db0b615117e26870816f7 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Fri, 1 Mar 2024 17:30:52 +0000 Subject: [PATCH 1138/1247] Fix: E2E tests (#440) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Merge Develop to Main (#417) * Fix UserOpResponse wait confirmations * birth of V4 SDK (#401) * feat: accounts update * update other packages with viem types * fix: account compatibility * minor fix * code refactor with latest releases * fix: resolve build * turned off bundler tests * fix: default validation params * fix!: make bundler and paymaster public * feat: reduce the bundle size * fix: lint and temp test * fix: gasless paymaster flow * minor fixes * remove the default chain * fix: lint * fix: method comment * fix: bundler abstraction in v4 * feat: add Logger class to v4 * Feedback by @joepegler #352 * fix: logic error * Feat(DEVX-410): Reinclude tests * remove unused package * fix: constructor validation initialisation * fix: build issue * Resolved DEVX-405 * Added e2e test for multiChain module * Updated the "addSigner" method * Fixed lint * Resolved DEVX-402 Added esbuild * Remove unused file * Added negative tests * Added multichainValidation tests * Fix import * Multichain testing support * Added session validation module tests * fix issues with address and update gitignore * linkAll improvement * watch package builds cont * WIP Session module * Added tests for multi-chain validation and session validation * unit tests fix * Remove duplicate test * revert tsconfig change * Added check for paymaster in BiconomySmartAccountV2 class * Fixed session file storage path and gitignore * Fixed e2e nft mint test * Added wait for tx before checking balance in test * Resolved SMA-526 * test workflow * test again * fix command * fix again * test again * cont. * Added SPONSORED and ERC20 paymaster check logic in SDK + tests * Feat(DEVX-425): Support ethers (#370) Resolved DEVX-425: Support ethers * Fixed lint * Merged with v4 * Changed parameter name * Uncomment PaymasterMode * Added fix for selected quote case ERC20 paymaster * Changed send user op approach in ERC20 paymaster test * Modify sendUserOp function description * Added throw instead of return user op * continued * Fix branch for deployment of docs * Removed try catch * Added utility func to get balance in tests * Removed unused value param from tx obj * Apply Signer Abstraction to modules (#375) * Added Signer Abstraction * fix:circular_dependency * Resolved SM-547 * lint:fix * Removed lint-staged (#382) Co-authored-by: GabiDev <gv@popoo.io> * README tweaks (#377) * Update README.md * createSmartAccountClient (#385) * Add paymasterAndData validation in e2e tests (#381) * Add paymasterAndData validation in e2e tests * Use config values instead of hardcoded in tests --------- Co-authored-by: GabiDev <gv@popoo.io> * Use RpcUrl from provider (#379) * Resolved SMA-549 lint:fix log * continued * continued * continued * Remove e2e test from unit test commit lockfile * rpc test * fix tests * Feat/sma 540 check paymaster userop (#384) * Refactor paymasterServiceData validation logic for ERC20 mode * Add assertions and test case for ERC20 Paymaster user op * Changed isNullOrUndefined function param to any type * Update createSmartWalletClient to createSmartAccountClient * Added ts-doc for setPaymasterUserOp * Export FeeQuotesOrDataResponse from @account and update import path in test * Refactor setPaymasterUserOp --> getPaymasterUserOp --------- Co-authored-by: GabiDev <gv@popoo.io> * update lockfile * Add ethersV6 compatibility (#387) * Fix for etherv6 signer compatibility * Refactor name --------- Co-authored-by: GabiDev <gv@popoo.io> * Feat(SMA-559): Improved dx for erc20 paymaster calls (#388) * Resolved SMA-559 * Fix await * Fix tests * Update docs * remove unused import * Fix broken tests * Fix rpc url * buildTokenPaymasterUserOp * lint:fix * Fix spender * Abstract tokenlist away * fix test * fix await * lint:fix * Make getPaymasterUserOp public * remove log * Except sessionStorageData folder from gitignore but not files (#389) Co-authored-by: GabiDev <gv@popoo.io> * fixes in v4 for front end frameworks (#392) * fixes in v4 for front end frameworks * revert build scripts * Added simulationType flag (#390) * Added simulationType flag * Change params for sendTransaction * Modified sendTransaction params for simulationType + moduleInfo params --------- Co-authored-by: GabiDev <gv@popoo.io> * Fix(SMA-574): ESM builds (#393) * es build fixes Resolved SMA-574 * Include both builds * Default build with tsc * minify_tsc_build * Fix check for maxApproval in BiconomySmartAccountV2 (#395) Co-authored-by: GabiDev <gv@popoo.io> * Bugfix/api error message (#396) * Fix check for maxApproval in BiconomySmartAccountV2 * Fixed api error response + increment time for test --------- Co-authored-by: GabiDev <gv@popoo.io> * Change type: sessionSigner: SupportedSigner (#397) * Fixed merkletreejs import (#400) * Fixed merkletreejs import * Removed console log --------- Co-authored-by: GabiDev <gv@popoo.io> * Feat(SMA-579): Allow empty tokenInfo fields during getTokenFees (#399) * Resolved SMA-579 * added e2e tests * lint:fix & update docs * fix: token paymaster approval flows * continued * test fix * Remove max approval from tests --------- Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * yarn lock * Feat(SMA-583): Update README.md with v4 examples (#405) * continued docs + readme updates * Updated README.md * lint:fix * update lockfile * Added string as a supported Transaction value type (#404) Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * Added export for UserOpStatus type from /account (#403) * Exported UserOpStatus type from /account * update lockfile --------- Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * Added needed exports from modules (#402) * Added needed exports from modules * update lockfile --------- Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * Added readme (#409) Co-authored-by: GabiDev <gv@popoo.io> * Commented overrides and skipBundlerGasEstimation params (#407) Co-authored-by: GabiDev <gv@popoo.io> * V4 with viem v2 (bump aa-core and viem) (#406) * update aa-core and viem packages * update rest of the code to use updated deps * update lockfile * fix: build error --------- Co-authored-by: amanraj1608 <archanaamanraj@gmail.com> * update lockfile * Added a new param to sendRequest "service" (#412) Co-authored-by: GabiDev <gv@popoo.io> * Added changelog (#410) * Make package exports consistent (#411) * Make package exports consistent * Update README.md s * type comment fix * Move default to end of exports * LightSigner * export LightSigner * export type --------- Co-authored-by: amanraj1608 <archanaamanraj@gmail.com> Co-authored-by: Aman Raj <42104907+AmanRaj1608@users.noreply.github.com> Co-authored-by: Joe Pegler <joepegler123@gmail.com> Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> * Release 8 - Biconomy V4 SDK (#414) * update lockfile * chore: release r8 update package version * Update modules changelog --------- Co-authored-by: Joe Pegler <joepegler123@gmail.com> * Replaced baseGoerli with baseSepolia (#415) Co-authored-by: GabiDev <gv@popoo.io> * Fix for encodeAbiParameters inside batched session module (#416) Co-authored-by: GabiDev <gv@popoo.io> --------- Co-authored-by: Aurélien <aurelien@avicenne.studio> Co-authored-by: amanraj1608 <archanaamanraj@gmail.com> Co-authored-by: Aman Raj <42104907+AmanRaj1608@users.noreply.github.com> Co-authored-by: Joe Pegler <joepegler123@gmail.com> Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> * Resolve SMA-673 * Fix(SMA-677): Particle auth build broken * bump aa-core version * Update changelogs * Particle build revert * bump version * cont. Skip necessary batched session validation tests * add missing env var * exit gracefully * fix tests --------- Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Co-authored-by: Aurélien <aurelien@avicenne.studio> Co-authored-by: amanraj1608 <archanaamanraj@gmail.com> Co-authored-by: Aman Raj <42104907+AmanRaj1608@users.noreply.github.com> Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> --- .github/workflows/pull_request_approved.yml | 1 + package.json | 2 +- packages/account/CHANGELOG.md | 16 ++ packages/account/package.json | 14 +- .../account/src/BiconomySmartAccountV2.ts | 6 +- packages/account/src/utils/Constants.ts | 2 +- packages/account/tests/account.e2e.spec.ts | 10 +- packages/account/tests/account.spec.ts | 1 - packages/bundler/CHANGELOG.md | 13 +- packages/bundler/package.json | 8 +- packages/common/package.json | 6 +- packages/common/src/utils/EthersSigner.ts | 5 +- packages/modules/CHANGELOG.md | 12 + packages/modules/package.json | 13 +- packages/modules/src/BaseValidationModule.ts | 3 +- .../modules/src/BatchedSessionRouterModule.ts | 2 +- .../src/ECDSAOwnershipValidationModule.ts | 5 +- .../modules/src/MultichainValidationModule.ts | 7 +- .../modules/src/SessionKeyManagerModule.ts | 2 +- ...batchedSessionValidationModule.e2e.spec.ts | 9 +- .../tests/sessionValidationModule.e2e.spec.ts | 6 +- packages/modules/tests/utils/customSession.ts | 5 +- packages/particle-auth/CHANGELOG.md | 37 ++- packages/particle-auth/package.json | 2 +- packages/particle-auth/src/index.ts | 5 +- packages/paymaster/CHANGELOG.md | 12 + packages/paymaster/package.json | 8 +- packages/transak/CHANGELOG.md | 33 ++- packages/transak/package.json | 2 +- tests/chains.config.ts | 8 +- tests/setup-e2e-tests.ts | 10 +- yarn.lock | 215 +++++++++--------- 32 files changed, 272 insertions(+), 208 deletions(-) diff --git a/.github/workflows/pull_request_approved.yml b/.github/workflows/pull_request_approved.yml index d4f142659..84688b90b 100644 --- a/.github/workflows/pull_request_approved.yml +++ b/.github/workflows/pull_request_approved.yml @@ -30,4 +30,5 @@ jobs: E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} E2E_BICO_PAYMASTER_KEY_MUMBAI: ${{ secrets.E2E_BICO_PAYMASTER_KEY_MUMBAI }} E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} + E2E_BICO_PAYMASTER_KEY_OP: ${{ secrets.E2E_BICO_PAYMASTER_KEY_OP }} run: yarn test:e2e diff --git a/package.json b/package.json index 0939192fb..72746e0a2 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "lint": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}'", "lint:fix": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}' --fix", "test:run": "yarn jest --runInBand", - "test": "concurrently -k --success first 'yarn start:ganache' 'yarn test:run'", + "test": "concurrently -k --success first 'yarn start:ganache' 'yarn test:run' && exit 0", "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", "test:coverage": "concurrently -k --success first 'yarn start:ganache' 'yarn jest --runInBand --coverage'", diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index abff0df13..7d7ed9af6 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.3 (2023-28-02) + +VERSION Bump Only. + +## 4.0.2 (2023-26-02) + +### Bug Fixes + +Particle Auth Fix + +## 4.0.1 (2023-02-22) + +### Bug Fixes + +- Fix for RPC endpoints (Quiknode, Blast Sepolia etc) failing to respond because of custom headers being set + ## 4.0.0 (2023-02-06) ### Features diff --git a/packages/account/package.json b/packages/account/package.json index b0d28f5bc..f5471cbcf 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account", - "version": "4.0.0", + "version": "4.0.3", "description": "This package provides apis for ERC-4337 based smart account implementations", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -67,11 +67,11 @@ "typedoc": "^0.25.7" }, "dependencies": { - "@alchemy/aa-core": "3.0.0-alpha.4", - "@biconomy/bundler": "4.0.0", - "@biconomy/common": "4.0.0", - "@biconomy/modules": "4.0.0", - "@biconomy/paymaster": "4.0.0", - "viem": "^2.7.3" + "@alchemy/aa-core": "^3.1.1", + "@biconomy/bundler": "^4.0.3", + "@biconomy/common": "^4.0.3", + "@biconomy/modules": "^4.0.3", + "@biconomy/paymaster": "^4.0.3", + "viem": "^2.7.12" } } diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 525d132e1..1f7d38389 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -316,8 +316,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * // } * */ - public async getBalances(tokenAddresses: Array<Hex>): Promise<Array<BalancePayload>> { - const accountAddress = this.accountAddress ?? (await this.getAccountAddress()); + public async getBalances(tokenAddresses?: Array<Hex>): Promise<Array<BalancePayload>> { + const accountAddress = await this.getAccountAddress(); if (!tokenAddresses) { const balance = await this.provider.getBalance({ address: accountAddress }); @@ -331,7 +331,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { }, ]; } - const tokenContracts = tokenAddresses.map((address) => + const tokenContracts = (tokenAddresses ?? []).map((address) => getContract({ address, abi: parseAbi(ERC20_ABI), diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 8050d62a1..75769ae94 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -65,7 +65,7 @@ export const ERROR_MESSAGES = { FAILED_FEE_QUOTE_FETCH: "Failed to fetch fee quote", }; -export const NATIVE_TOKEN_ALIAS = "0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"; +export const NATIVE_TOKEN_ALIAS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; export const ERC20_ABI = [ "function transfer(address to, uint256 value) external returns (bool)", "function transferFrom(address from, address to, uint256 value) external returns (bool)", diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 99a67b422..148bb18c1 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,5 +1,5 @@ import { TestData } from "../../../tests"; -import { createSmartAccountClient, ERROR_MESSAGES, FeeQuotesOrDataResponse, PaymasterMode } from "../src/index"; +import { createSmartAccountClient, ERROR_MESSAGES, FeeQuotesOrDataResponse, NATIVE_TOKEN_ALIAS, PaymasterMode } from "../src/index"; import { Hex, createWalletClient, encodeFunctionData, getContract, http, parseAbi } from "viem"; import { UserOperationStruct } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "../../../tests/utils"; @@ -179,7 +179,8 @@ describe("Account Tests", () => { expect(newBalance - balance).toBe(1n); }, 60000); - it("Should mint an NFT on Mumbai and pay with ERC20 - with preferredToken", async () => { + // TODO(Remove when Yash fixes approvals issue) + it.skip("Should mint an NFT on Mumbai and pay with ERC20 - with preferredToken", async () => { const { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, @@ -267,7 +268,8 @@ describe("Account Tests", () => { expect(feeQuotesResponse.feeQuotes?.length).toBeGreaterThan(1); }); - it("Should mint an NFT on Mumbai and pay with ERC20 - with token selection and no maxApproval", async () => { + // TODO(Remove when Yash fixes approvals issue) + it.skip("Should mint an NFT on Mumbai and pay with ERC20 - with token selection and no maxApproval", async () => { const preferredToken: Hex = "0xda5289fcaaf71d52a80a254da614a192b693e977"; const { whale: { viemWallet: signer, publicAddress: recipient }, @@ -494,7 +496,7 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, viemChain, publicClient, - whale: { viemWallet: signer, account }, + whale: { viemWallet: signer, publicAddress, account }, deploymentCost, } = mumbai; diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index a5dbeab58..78fa43fbd 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -41,7 +41,6 @@ describe("Account Tests", () => { rpcUrl: localhost.rpcUrls.default.http[0], }); const address = await smartAccount.getAccountAddress(); - console.log({ address }); expect(address).toBeTruthy(); }); diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index 8d1c22faf..08d5af51d 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -3,10 +3,21 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.3 (2023-28-02) + +VERSION Bump Only. + +## 4.0.2 (2023-26-02) + +VERSION Bump Only. + +## 4.0.1 (2023-02-22) + +VERSION Bump Only. + ## 4.0.0 (2023-07-02) Export createBundler alias for static Bundler.create call -Abstract away chainId: [0fefb35](https://github.com/bcnmy/biconomy-client-sdk/pull/375/commits/0fefb358e3927d7b026774a785d3711e80f1049a) ## 3.1.3 (2023-12-28) diff --git a/packages/bundler/package.json b/packages/bundler/package.json index a55b34c20..c73f8f10c 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/bundler", - "version": "4.0.0", + "version": "4.0.3", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -56,9 +56,9 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "3.0.0-alpha.4", - "@biconomy/common": "4.0.0", - "viem": "^2.7.3" + "@alchemy/aa-core": "^3.1.1", + "@biconomy/common": "^4.0.3", + "viem": "^2.7.12" }, "devDependencies": { "@types/node": "^20.11.10", diff --git a/packages/common/package.json b/packages/common/package.json index e69b3dcba..8336c7675 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "4.0.0", + "version": "4.0.3", "description": "common utils to be used for aa transactions", "keywords": [ "utils" @@ -54,9 +54,9 @@ "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" }, "dependencies": { - "@alchemy/aa-core": "3.0.0-alpha.4", + "@alchemy/aa-core": "^3.1.1", "@ethersproject/abstract-signer": "^5.7.0", - "viem": "^2.7.3" + "viem": "^2.7.12" }, "devDependencies": { "@types/node": "^20.11.10", diff --git a/packages/common/src/utils/EthersSigner.ts b/packages/common/src/utils/EthersSigner.ts index e0c568803..d77e0eab1 100644 --- a/packages/common/src/utils/EthersSigner.ts +++ b/packages/common/src/utils/EthersSigner.ts @@ -1,5 +1,5 @@ import { SmartAccountSigner } from "@alchemy/aa-core"; -import { Hex } from "viem"; +import { Hex, SignableMessage } from "viem"; import { Signer } from "@ethersproject/abstract-signer"; export class EthersSigner<T extends Signer> implements SmartAccountSigner<T> { @@ -16,7 +16,8 @@ export class EthersSigner<T extends Signer> implements SmartAccountSigner<T> { return (await this.inner.getAddress()) as Hex; } - async signMessage(message: string | Uint8Array): Promise<Hex> { + async signMessage(_message: SignableMessage): Promise<Hex> { + const message = typeof _message === "string" ? _message : _message.raw; const signature = await this.inner?.signMessage(message); return this.#correctSignature(signature as Hex); } diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md index 400a2d2a6..76d05229f 100644 --- a/packages/modules/CHANGELOG.md +++ b/packages/modules/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.3 (2023-28-02) + +VERSION Bump Only. + +## 4.0.2 (2023-26-02) + +VERSION Bump Only. + +## 4.0.1 (2023-02-22) + +VERSION Bump Only. + ## 4.0.0 (2024-02-12) ### Features diff --git a/packages/modules/package.json b/packages/modules/package.json index 9d180cc6c..f9bc8f520 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/modules", - "version": "4.0.0", + "version": "4.0.3", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -53,19 +53,18 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "3.0.0-alpha.4", - "@biconomy/common": "4.0.0", + "@alchemy/aa-core": "^3.1.1", + "@biconomy/common": "^4.0.3", "@ethersproject/abi": "^5.7.0", "merkletreejs": "^0.3.11", - "viem": "^2.7.3", - "@ethersproject/abi": "^5.7.0" + "viem": "^2.7.12" }, "devDependencies": { "@types/node": "^20.11.10", "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12", - "@biconomy/paymaster": "4.0.0", - "@biconomy/modules": "4.0.0" + "@biconomy/paymaster": "^4.0.3", + "@biconomy/modules": "^4.0.3" } } diff --git a/packages/modules/src/BaseValidationModule.ts b/packages/modules/src/BaseValidationModule.ts index 525fe122d..4f739f782 100644 --- a/packages/modules/src/BaseValidationModule.ts +++ b/packages/modules/src/BaseValidationModule.ts @@ -31,7 +31,8 @@ export abstract class BaseValidationModule implements IValidationModule { abstract signMessage(_message: Uint8Array | string): Promise<string>; - async signMessageSmartAccountSigner(message: string | Uint8Array, signer: SmartAccountSigner): Promise<string> { + async signMessageSmartAccountSigner(_message: string | Uint8Array, signer: SmartAccountSigner): Promise<string> { + const message = typeof _message === "string" ? _message : { raw: _message }; let signature: `0x${string}` = await signer.signMessage(message); const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index ac6745196..fbb18459c 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -100,7 +100,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // signer must be the same for all the sessions const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner); - const signature = await sessionSigner.signMessage(toBytes(userOpHash)); + const signature = await sessionSigner.signMessage({ raw: toBytes(userOpHash) }); for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index 737a43d07..71c515f9a 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -68,7 +68,7 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { } async signUserOpHash(userOpHash: string): Promise<Hex> { - const sig = await this.signer.signMessage(toBytes(userOpHash)); + const sig = await this.signer.signMessage({ raw: toBytes(userOpHash) }); return sig; } @@ -79,7 +79,8 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { * @returns {Promise<string>} A promise resolving to the signature or error message. * @throws {Error} If the signer type is invalid or unsupported. */ - async signMessage(message: Uint8Array | string): Promise<string> { + async signMessage(_message: Uint8Array | string): Promise<string> { + const message = typeof _message === "string" ? _message : { raw: _message }; let signature = await this.signer.signMessage(message); const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index e51aae190..be5815210 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -74,7 +74,7 @@ export class MultiChainValidationModule extends BaseValidationModule { } async signUserOpHash(userOpHash: string): Promise<Hex> { - const sig = await this.signer.signMessage(toBytes(userOpHash)); + const sig = await this.signer.signMessage({ raw: toBytes(userOpHash) }); return sig; } @@ -85,7 +85,8 @@ export class MultiChainValidationModule extends BaseValidationModule { * @returns {Promise<string>} A promise resolving to the signature or error message. * @throws {Error} If the signer type is invalid or unsupported. */ - async signMessage(message: Uint8Array | string): Promise<string> { + async signMessage(_message: Uint8Array | string): Promise<string> { + const message = typeof _message === "string" ? _message : { raw: _message }; let signature = await this.signer.signMessage(message); const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); @@ -116,7 +117,7 @@ export class MultiChainValidationModule extends BaseValidationModule { // Create a new Merkle tree using the leaves array const merkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true }); - let multichainSignature = await this.signer.signMessage(toBytes(merkleTree.getHexRoot())); + let multichainSignature = await this.signer.signMessage({ raw: toBytes(merkleTree.getHexRoot()) }); const potentiallyIncorrectV = parseInt(multichainSignature.slice(-2), 16); if (![27, 28].includes(potentiallyIncorrectV)) { diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index f8e49d859..b0a45886b 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -162,7 +162,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { const { signer: sessionSigner } = await convertSigner(params.sessionSigner); // Use the sessionSigner to sign the user operation - const signature = await sessionSigner.signMessage(toBytes(userOpHash)); + const signature = await sessionSigner.signMessage({ raw: toBytes(userOpHash) }); const sessionSignerData = await this.getLeafInfo(params); diff --git a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts index f4f5950fc..d6935eeb1 100644 --- a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts @@ -20,9 +20,8 @@ describe("Batched Session Router Tests", () => { [mumbai] = testDataPerChain; }); - // Make sure smart account used for tests has at least 0.01 USDC and some MATIC - - it("Should send a user op using Batched Session Validation Module", async () => { + // TODO(Gabi): Fix Batched Session Router Module tests + it.skip("Should send a user op using Batched Session Validation Module", async () => { let sessionSigner: WalletClientSigner; const { @@ -35,6 +34,8 @@ describe("Batched Session Router Tests", () => { publicClient, bundlerUrl, biconomyPaymasterApiKey, + chainId, + viemChain, } = mumbai; // Create smart account @@ -52,7 +53,7 @@ describe("Batched Session Router Tests", () => { try { sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); } catch (error) { - sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey }); + sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey, chainId: viemChain }); } expect(sessionSigner).toBeTruthy(); diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index e8facc370..3764f94b7 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -15,7 +15,8 @@ describe("Session Validation Module Tests", () => { [mumbai] = testDataPerChain; }); - it("Should send a user op using Session Validation Module", async () => { + // TODO(Gabi): Fix Session Validation Module tests + it.skip("Should send a user op using Session Validation Module", async () => { let sessionSigner: WalletClientSigner; const { @@ -24,6 +25,7 @@ describe("Session Validation Module Tests", () => { privateKey: pvKey, viemWallet, }, + viemChain, minnow: { publicAddress: recipient }, publicClient, chainId, @@ -58,7 +60,7 @@ describe("Session Validation Module Tests", () => { try { sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); } catch (error) { - sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey }); + sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey, chainId: viemChain }); } expect(sessionSigner).toBeTruthy(); diff --git a/packages/modules/tests/utils/customSession.ts b/packages/modules/tests/utils/customSession.ts index 2be5457e3..1326c4871 100644 --- a/packages/modules/tests/utils/customSession.ts +++ b/packages/modules/tests/utils/customSession.ts @@ -1,5 +1,5 @@ import * as fs from "fs"; -import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; +import { SmartAccountSigner, WalletClientSigner, getChain } from "@alchemy/aa-core"; import { SignerData } from "@biconomy/modules/src"; import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; import { Hex, createWalletClient, http } from "viem"; @@ -167,10 +167,11 @@ export class SessionFileStorage implements ISessionStorage { signer = signerData; } const accountSigner = privateKeyToAccount(signer.pvKey); + const viemChain = getChain(signerData?.chainId?.id || 1); const client = createWalletClient({ account: accountSigner, chain: signerData.chainId, - transport: http(polygonMumbai.rpcUrls.default.http[0]), + transport: http(viemChain.rpcUrls.default.http[0]), }); const walletClientSigner: SmartAccountSigner = new WalletClientSigner( client, diff --git a/packages/particle-auth/CHANGELOG.md b/packages/particle-auth/CHANGELOG.md index 0b1ef187b..0fe532b3e 100644 --- a/packages/particle-auth/CHANGELOG.md +++ b/packages/particle-auth/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.3 (2023-28-02) + +Fix build + +## 4.0.2 (2023-12-28) + +Fix build + +## 4.0.1 (2023-02-22) + +VERSION Bump Only. + ## 4.0.0 (2023-12-28) VERSION Bump Only. @@ -17,43 +29,30 @@ VERSION Bump Only. ## 3.1.1 (2023-11-09) - ### Features -* Upgrade package version ([])(https://github.com/bcnmy/biconomy-client-sdk/commit/d467b85) - +- Upgrade package version ([])(https://github.com/bcnmy/biconomy-client-sdk/commit/d467b85) ## 3.1.0 (2023-09-20) -Version Bump Only. - +Version Bump Only. # 3.0.0 (2023-08-28) - ### Features -* particle auth integration ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) - - - - +- particle auth integration ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) ## 3.0.0-alpha.0 (2023-07-12) - - - - ## 2.0.1 (2023-06-10) - ### Bug Fixes -* typo ([0a63ff1](https://github.com/bcnmy/biconomy-client-sdk/commit/0a63ff17bb38b1bc2fd68669b74c2efd5a959d31)) - +- typo ([0a63ff1](https://github.com/bcnmy/biconomy-client-sdk/commit/0a63ff17bb38b1bc2fd68669b74c2efd5a959d31)) ## 2.0.0 (2023-30-05) ### Features -* particle-auth ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) + +- particle-auth ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index 335ac30a2..faf8709a7 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/particle-auth", - "version": "4.0.0", + "version": "4.0.3", "description": "Particle auth for Biconomy SDK", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/packages/particle-auth/src/index.ts b/packages/particle-auth/src/index.ts index 1d3b6a0ff..03966301b 100644 --- a/packages/particle-auth/src/index.ts +++ b/packages/particle-auth/src/index.ts @@ -1,5 +1,4 @@ import * as ParticleAuth from "@particle-network/auth"; import * as BiconomyAccount from "@particle-network/biconomy"; -import { ParticleProvider, ParticleDelegateProvider } from "@particle-network/provider"; - -export { ParticleAuth as ParticleAuthModule, BiconomyAccount as BiconomyAccountModule, ParticleProvider, ParticleDelegateProvider }; +export { ParticleProvider, ParticleDelegateProvider } from "@particle-network/provider"; +export { ParticleAuth as ParticleAuthModule, BiconomyAccount as BiconomyAccountModule }; diff --git a/packages/paymaster/CHANGELOG.md b/packages/paymaster/CHANGELOG.md index abbc2cae6..aa60e1174 100644 --- a/packages/paymaster/CHANGELOG.md +++ b/packages/paymaster/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.0.3 (2023-28-02) + +VERSION Bump Only. + +## 4.0.2 (2023-26-02) + +VERSION Bump Only. + +## 4.0.1 (2023-02-22) + +VERSION Bump Only. + ## 4.0.0 (2023-07-02) Export createPaymaster alias for static Paymaster.create call diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index 1348e71c1..6360011b7 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/paymaster", - "version": "4.0.0", + "version": "4.0.3", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -53,9 +53,9 @@ "access": "public" }, "dependencies": { - "@alchemy/aa-core": "3.0.0-alpha.4", - "@biconomy/common": "4.0.0", - "viem": "^2.7.3" + "@alchemy/aa-core": "^3.1.1", + "@biconomy/common": "^4.0.3", + "viem": "^2.7.12" }, "devDependencies": { "@types/node": "^20.11.10", diff --git a/packages/transak/CHANGELOG.md b/packages/transak/CHANGELOG.md index c71de7918..9d1cd4246 100644 --- a/packages/transak/CHANGELOG.md +++ b/packages/transak/CHANGELOG.md @@ -3,55 +3,50 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -## 4.0.0 (2023-12-28) +## 4.0.3 (2023-28-02) VERSION Bump Only. -## 3.1.3 (2023-12-28) +## 4.0.2 (2023-26-02) VERSION Bump Only. -## 3.1.2 (2023-12-28) +## 4.0.1 (2023-02-22) + +## 4.0.0 (2023-12-28) VERSION Bump Only. -## 3.1.1 (2023-11-09) +## 3.1.3 (2023-12-28) VERSION Bump Only. +## 3.1.2 (2023-12-28) +VERSION Bump Only. +## 3.1.1 (2023-11-09) - +VERSION Bump Only. ## 3.1.0 (2023-09-20) -### Bug Fixes - -* lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) - +### Bug Fixes +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) # 3.0.0 (2023-08-28) VERSION Bump Only. - - ## 2.0.0 (2023-04-07) - ### Features -* transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) - - - - +- transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) ## 1.0.0 (2023-01-03) - ### Features -* transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) +- transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) diff --git a/packages/transak/package.json b/packages/transak/package.json index 018414ed1..9afe8a662 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/transak", - "version": "4.0.0", + "version": "4.0.3", "description": "transak for biconomy sdk", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/tests/chains.config.ts b/tests/chains.config.ts index e3696ef61..97e453c29 100644 --- a/tests/chains.config.ts +++ b/tests/chains.config.ts @@ -21,7 +21,7 @@ export const CHAIN_CONFIG: Record<SupportedTestChain, BaseChainConfig> = { entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", bundlerUrl: "https://bundler.biconomy.io/api/v2/1/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", viemChain: localhost, - deploymentCost: 10000000000000000, + deploymentCost: 100000000000000000, nftAddress: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e", }, baseSepolia: { @@ -31,7 +31,7 @@ export const CHAIN_CONFIG: Record<SupportedTestChain, BaseChainConfig> = { paymasterUrl: "https://paymaster.biconomy.io/api/v1/84532/" + process.env.E2E_BICO_PAYMASTER_KEY_BASE!, viemChain: baseSepolia, biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_BASE!, - deploymentCost: 10000000000000000, + deploymentCost: 100000000000000000, nftAddress: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e", }, mumbai: { @@ -41,7 +41,7 @@ export const CHAIN_CONFIG: Record<SupportedTestChain, BaseChainConfig> = { paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/" + process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, viemChain: polygonMumbai, biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, - deploymentCost: 10000000000000000, + deploymentCost: 100000000000000000, nftAddress: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e", }, optimism: { @@ -51,7 +51,7 @@ export const CHAIN_CONFIG: Record<SupportedTestChain, BaseChainConfig> = { paymasterUrl: "https://paymaster.biconomy.io/api/v1/10/" + process.env.E2E_BICO_PAYMASTER_KEY_OP!, viemChain: optimism, biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_OP!, - deploymentCost: 10000000000000000, + deploymentCost: 100000000000000000, nftAddress: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e", } }; diff --git a/tests/setup-e2e-tests.ts b/tests/setup-e2e-tests.ts index 88812757b..1aa13ace5 100644 --- a/tests/setup-e2e-tests.ts +++ b/tests/setup-e2e-tests.ts @@ -135,10 +135,16 @@ beforeAll(async () => { }); const envVarCheck = () => { - const REQUIRED_FIELDS = ["E2E_PRIVATE_KEY_ONE", "E2E_PRIVATE_KEY_TWO", "E2E_BICO_PAYMASTER_KEY_MUMBAI", "E2E_BICO_PAYMASTER_KEY_BASE"]; + const REQUIRED_FIELDS = [ + "E2E_PRIVATE_KEY_ONE", + "E2E_PRIVATE_KEY_TWO", + "E2E_BICO_PAYMASTER_KEY_MUMBAI", + "E2E_BICO_PAYMASTER_KEY_BASE", + "E2E_BICO_PAYMASTER_KEY_OP", + ]; const hasFields = REQUIRED_FIELDS.every((field) => !!process.env[field]); if (!hasFields) { console.error("Missing env var"); - process.exit(0); + process.exit(1); } }; diff --git a/yarn.lock b/yarn.lock index c4cad678c..2b137143a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,23 +12,23 @@ resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== -"@alchemy/aa-core@3.0.0-alpha.4": - version "3.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.0.0-alpha.4.tgz#3abe0911f7c35cc6f0fc0cd03faad5673a01f0a9" - integrity sha512-mTVMDciBYIrXRgJnDiew2nRhjeAMKIK3RijGR3TQ7Gn6cpY8ZKSiJoTM5yRCttx368jqz0BACD1mjTg/zU8+Cg== +"@alchemy/aa-core@^3.1.1": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.4.0.tgz#08e514bf2f97a9c1452424a7f7915aa48daf4db2" + integrity sha512-kEqsMwweMxQU6b8mKNmkUacyZRxdU7WBBiAYNmGxJK5djOdsGlfCBZGHu2AyAb8ogfrGWX8J+uVuYTnCIZS6ew== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" - viem "^2.5.0" + viem "^2.7.8" zod "^3.22.4" "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": version "7.23.5" @@ -44,20 +44,20 @@ integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" - integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" + integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.9" - "@babel/parser" "^7.23.9" - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/helpers" "^7.24.0" + "@babel/parser" "^7.24.0" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -124,9 +124,9 @@ "@babel/helper-validator-identifier" "^7.22.20" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== "@babel/helper-simple-access@^7.22.5": version "7.22.5" @@ -157,14 +157,14 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" - integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== +"@babel/helpers@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" + integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== dependencies: - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" "@babel/highlight@^7.23.4": version "7.23.4" @@ -175,10 +175,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" - integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" + integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -279,25 +279,25 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/runtime@^7.21.0": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" - integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" - integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== +"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== dependencies: "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" -"@babel/traverse@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" - integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== +"@babel/traverse@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" + integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== dependencies: "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" @@ -305,15 +305,15 @@ "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.3": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" - integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.3.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -812,9 +812,9 @@ "@ethersproject/strings" "^5.7.0" "@fastify/busboy@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" - integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": version "1.1.3" @@ -1065,24 +1065,24 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz#9b18145d26cf33d08576cf4c7665b28554480ed7" - integrity sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw== +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" @@ -1097,10 +1097,10 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.23" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz#afc96847f3f07841477f303eed687707a5aacd80" - integrity sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24": + version "0.3.24" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.24.tgz#e5640be1cab4085e4012a94c132ae86138f90f48" + integrity sha512-+VaWXDa6+l6MhflBvVXjIEAzb59nQ2JUK3bwRp2zRpPtU+8TFRy9Gg/5oIcNlkEL5PGlBFGfemUVvIgLnTzq7Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -1767,9 +1767,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.19" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.19.tgz#63013cbbebf36c37e970f83406ef955f08309499" - integrity sha512-cQOGS0dH6LMDyJ7bkaLj6FShYSyz8OZ2hBvtBPdTtuMCsTlQPFcXKR6QI2CpJZBbb6m1fIXZEXlFYFZzY/t6ng== + version "1.3.21" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.21.tgz#82d2b098e165fc198e6e6e3e4c8b2154235e3aa1" + integrity sha512-tuUVuOPf+el+kDlHLFMyDy4IkoGjk+P3QvVrxT7WnmEma1NgWTE7RaNsniwqn6SYkAwAxksL/D9aADUXZxqPmw== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -2157,9 +2157,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.20" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.20.tgz#f0a2aee575215149a62784210ad88b3a34843659" - integrity sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg== + version "20.11.24" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792" + integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long== dependencies: undici-types "~5.26.4" @@ -3824,9 +3824,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.682" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.682.tgz#27577b88ccccc810e09b05093345cf1830f1bd65" - integrity sha512-oCglfs8yYKs9RQjJFOHonSnhikPK3y+0SvSYc/YpYJV//6rqc0/hbwd0c7vgK4vrl6y2gJAwjkhkSGWK+z4KRA== + version "1.4.689" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.689.tgz#94fe370b800d978b606a2b4c0c5db5c8c98db4f2" + integrity sha512-GatzRKnGPS1go29ep25reM94xxd1Wj8ritU0yRhCJ/tr1Bg8gKnm6R9O/yPOhGQBoLMZ9ezfrpghNaTw97C/PQ== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -3923,17 +3923,17 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" - integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== + version "1.22.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" + integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== dependencies: array-buffer-byte-length "^1.0.1" arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.6" + available-typed-arrays "^1.0.7" call-bind "^1.0.7" es-define-property "^1.0.0" es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" get-intrinsic "^1.2.4" @@ -3941,15 +3941,15 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: globalthis "^1.0.3" gopd "^1.0.1" has-property-descriptors "^1.0.2" - has-proto "^1.0.1" + has-proto "^1.0.3" has-symbols "^1.0.3" hasown "^2.0.1" internal-slot "^1.0.7" is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.2" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" is-typed-array "^1.1.13" is-weakref "^1.0.2" @@ -3962,10 +3962,10 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.1" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" unbox-primitive "^1.0.2" which-typed-array "^1.1.14" @@ -3986,7 +3986,7 @@ es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-set-tostringtag@^2.0.2: +es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== @@ -5542,7 +5542,7 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-negative-zero@^2.0.2: +is-negative-zero@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== @@ -5599,7 +5599,7 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-shared-array-buffer@^1.0.2: +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== @@ -8432,11 +8432,11 @@ shiki@^0.14.7: vscode-textmate "^8.0.0" side-channel@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" - integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.7" es-errors "^1.3.0" get-intrinsic "^1.2.4" object-inspect "^1.13.1" @@ -8926,13 +8926,18 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@0.2.1, tmp@~0.2.1: +tmp@0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== dependencies: rimraf "^3.0.0" +tmp@~0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -9125,7 +9130,7 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typed-array-buffer@^1.0.1: +typed-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== @@ -9134,7 +9139,7 @@ typed-array-buffer@^1.0.1: es-errors "^1.3.0" is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.0: +typed-array-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== @@ -9145,7 +9150,7 @@ typed-array-byte-length@^1.0.0: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.0: +typed-array-byte-offset@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== @@ -9157,7 +9162,7 @@ typed-array-byte-offset@^1.0.0: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-length@^1.0.4: +typed-array-length@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== @@ -9388,10 +9393,10 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -viem@^2.5.0, viem@^2.7.3: - version "2.7.15" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.15.tgz#0dfdcb75be196c85839950b0ccb88be0b377609c" - integrity sha512-I2RMQpg1/MC7fXVjHxeXRPU9k/WEOvZajK/KZSr7DChS0AaZ7uovsQWppwBn2wvZWguTCIRAHqzMwIEGku95yQ== +viem@^2.7.12, viem@^2.7.8: + version "2.7.16" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.16.tgz#99e66bbec661b2284bc32061474f20a90381bdcb" + integrity sha512-yOPa9yaoJUm44m0Qe3ugHnkHol3QQlFxN3jT+bq+lQip7X7cWdPfmguyfLWX2viCXcmYZUDiQdeFbkPW9lw11Q== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From e2193ad11706da53e9a68c6033bc496672ad5e48 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Fri, 1 Mar 2024 17:40:43 +0000 Subject: [PATCH 1139/1247] cont. --- yarn.lock | 4 ---- 1 file changed, 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 42aa3cec3..2b137143a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9393,11 +9393,7 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -<<<<<<< HEAD -viem@^2.5.0, viem@^2.7.3: -======= viem@^2.7.12, viem@^2.7.8: ->>>>>>> origin/develop version "2.7.16" resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.16.tgz#99e66bbec661b2284bc32061474f20a90381bdcb" integrity sha512-yOPa9yaoJUm44m0Qe3ugHnkHol3QQlFxN3jT+bq+lQip7X7cWdPfmguyfLWX2viCXcmYZUDiQdeFbkPW9lw11Q== From 75698c827015533e32acb1f535bdf6b738876217 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 4 Mar 2024 15:51:21 +0400 Subject: [PATCH 1140/1247] added flag to skip calldata approval patch (#441) --- packages/account/src/BiconomySmartAccountV2.ts | 6 ++++++ packages/account/src/utils/Types.ts | 4 ++++ packages/paymaster/src/utils/Types.ts | 2 ++ 3 files changed, 12 insertions(+) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 1f7d38389..76679b043 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -620,6 +620,12 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { Logger.log("there is a feeQuote: ", feeQuote); if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED); if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH); + if (paymasterServiceData.skipPatchCallData && paymasterServiceData.skipPatchCallData === true) { + return this.getPaymasterAndData(userOp, { + ...paymasterServiceData, + feeTokenAddress: feeQuote.tokenAddress, + }); + } const partialUserOp = await this.buildTokenPaymasterUserOp(userOp, { ...paymasterServiceData, spender, diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 353eae5ee..b9f50d2f6 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -80,6 +80,8 @@ export type BiconomyTokenPaymasterRequest = { spender: Hex; /** maxApproval: If set to true, the paymaster will approve the maximum amount of tokens required for the transaction. Not recommended */ maxApproval?: boolean; + /* skip option to patch callData if approval is already given to the paymaster */ + skipPatchCallData?: boolean; }; export type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> & @@ -218,6 +220,8 @@ export type PaymasterUserOperationDto = SponsorUserOperationDto & spender?: Hex; /** Not recommended */ maxApproval?: boolean; + /* skip option to patch callData if approval is already given to the paymaster */ + skipPatchCallData?: boolean; }; export type InitializeV2Data = { diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts index 16a8f5a51..9d5f849d4 100644 --- a/packages/paymaster/src/utils/Types.ts +++ b/packages/paymaster/src/utils/Types.ts @@ -106,6 +106,8 @@ export type BiconomyTokenPaymasterRequest = { spender: Hex; /** Not recommended */ maxApproval?: boolean; + /* skip option to patch callData if approval is already given to the paymaster */ + skipPatchCallData?: boolean; }; export type FeeQuotesOrDataResponse = { From 2371b230cd5806ec4c7c95ba604d6f924b4be768 Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Mon, 4 Mar 2024 17:29:24 +0400 Subject: [PATCH 1141/1247] Remove extra call to Bundler for Sponsored User ops (#408) * draft psuedo code * Skip estimateUserOpGas for latency improve * Fixed conflicts * Added test to check for failure of sendTransaction --------- Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: Joe Pegler <joepegler123@gmail.com> --- .../account/src/BiconomySmartAccountV2.ts | 27 +++++++++++++------ packages/account/tests/account.e2e.spec.ts | 4 +-- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 76679b043..d02f23cbe 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -70,7 +70,7 @@ import { BiconomyFactoryAbi } from "./abi/Factory.js"; import { BiconomyAccountAbi } from "./abi/SmartAccount.js"; import { AccountResolverAbi } from "./abi/AccountResolver.js"; import { Logger, StateOverrideSet } from "@biconomy/common"; -import { FeeQuotesOrDataDto, FeeQuotesOrDataResponse } from "@biconomy/paymaster"; +import { BiconomyPaymaster, FeeQuotesOrDataDto, FeeQuotesOrDataResponse } from "@biconomy/paymaster"; type UserOperationKey = keyof UserOperationStruct; @@ -1049,16 +1049,27 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // for this Smart Account current validation module dummy signature will be used to estimate gas userOp.signature = signature; - // Note: Can change the default behaviour of calling estimations using bundler/local - userOp = await this.estimateUserOpGas(userOp, buildUseropDto?.stateOverrideSet); + if ( + buildUseropDto?.paymasterServiceData && + buildUseropDto?.paymasterServiceData.mode === PaymasterMode.SPONSORED && + this.paymaster instanceof BiconomyPaymaster + ) { + const gasFeeValues = await this.bundler?.getGasFeeValues(); - if (buildUseropDto?.paymasterServiceData) { - userOp = await this.getPaymasterUserOp(userOp, buildUseropDto.paymasterServiceData); - } + // populate gasfee values and make a call to paymaster + userOp.maxFeePerGas = gasFeeValues?.maxFeePerGas as Hex; + userOp.maxPriorityFeePerGas = gasFeeValues?.maxPriorityFeePerGas as Hex; - Logger.log("UserOp after estimation ", userOp); + userOp = await this.getPaymasterUserOp(userOp, buildUseropDto.paymasterServiceData); + return userOp; + } else { + userOp = await this.estimateUserOpGas(userOp); - return userOp; + if (buildUseropDto?.paymasterServiceData) { + userOp = await this.getPaymasterUserOp(userOp, buildUseropDto.paymasterServiceData); + } + return userOp; + } } private validateUserOpAndPaymasterRequest(userOp: Partial<UserOperationStruct>, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 148bb18c1..5e6a4a4c7 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -184,15 +184,13 @@ describe("Account Tests", () => { const { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, - publicClient, - biconomyPaymasterApiKey, nftAddress, } = mumbai; const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, - biconomyPaymasterApiKey, + biconomyPaymasterApiKey: "7K_k68BFN.ed274da8-69a1-496d-a897-508fc2653666", }); const accountAddress = await smartAccount.getAddress(); From de029809ea3892b7013a2d693da06fe7b27638c4 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Mon, 4 Mar 2024 13:48:40 +0000 Subject: [PATCH 1142/1247] reinclude publicClient --- packages/account/tests/account.e2e.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index a31cec8d8..2073c7b0e 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -185,6 +185,7 @@ describe("Account Tests", () => { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, nftAddress, + publicClient } = mumbai; const smartAccount = await createSmartAccountClient({ From bc0c6da382a6bdffcb6728fdcc1c3f8bdfc0244b Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Mon, 4 Mar 2024 15:27:40 +0000 Subject: [PATCH 1143/1247] fix/e2e_tests (#444) --- packages/account/tests/account.e2e.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 5e6a4a4c7..e9e22d166 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -185,6 +185,7 @@ describe("Account Tests", () => { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, nftAddress, + publicClient } = mumbai; const smartAccount = await createSmartAccountClient({ From 8908d6a4c8f9993859b3ce3e4a10c4040fefce77 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Mon, 4 Mar 2024 15:52:49 +0000 Subject: [PATCH 1144/1247] feat: support custom chains (#443) --- .github/workflows/docs.yml | 3 +- .../account/src/BiconomySmartAccountV2.ts | 19 +----- packages/account/src/utils/Types.ts | 4 +- packages/account/tests/account.spec.ts | 58 ++++++++++++++++++- packages/bundler/src/Bundler.ts | 15 +++-- packages/bundler/src/utils/Types.ts | 4 +- tests/utils.ts | 2 + yarn.lock | 30 +++++----- 8 files changed, 91 insertions(+), 44 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index b3f7b3c4b..188b963b1 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -3,8 +3,7 @@ on: workflow_dispatch: push: branches: - - develop - - fix/SMA-682_docs-fix + - docs permissions: contents: write diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index d02f23cbe..3d0b32bd9 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -87,19 +87,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { bundler?: IBundler; - /** - * @class - * @ignore - */ private accountContract?: GetContractReturnType<typeof BiconomyAccountAbi, PublicClient>; - /** - * @class - * @ignore - */ - // @ts-ignore - protected entryPoint: BaseSmartContractAccount["entryPoint"]; - private defaultFallbackHandlerAddress: Hex; private implementationAddress: Hex; @@ -117,7 +106,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2ConfigConstructorProps) { super({ ...biconomySmartAccountConfig, - chain: getChain(biconomySmartAccountConfig.chainId), + chain: biconomySmartAccountConfig.viemChain ?? getChain(biconomySmartAccountConfig.chainId), rpcClient: biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0], entryPointAddress: (biconomySmartAccountConfig.entryPointAddress as Hex) ?? DEFAULT_ENTRYPOINT_ADDRESS, accountAddress: (biconomySmartAccountConfig.accountAddress as Hex) ?? undefined, @@ -154,7 +143,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule!; this.provider = createPublicClient({ - chain: getChain(biconomySmartAccountConfig.chainId), + chain: biconomySmartAccountConfig.viemChain ?? getChain(biconomySmartAccountConfig.chainId), transport: http(biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0]), }); @@ -413,10 +402,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } } - /** - * @class - * @ignore - */ async _getAccountContract(): Promise<GetContractReturnType<typeof BiconomyAccountAbi, PublicClient>> { if (this.accountContract == null) { this.accountContract = getContract({ diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index b9f50d2f6..166c7601b 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -9,7 +9,7 @@ import { type SponsorUserOperationDto, } from "@biconomy/paymaster"; import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; -import { Hex, WalletClient } from "viem"; +import { Chain, Hex, WalletClient } from "viem"; import { SupportedSigner, StateOverrideSet } from "@biconomy/common"; export type EntryPointAddresses = Record<string, string>; @@ -137,6 +137,8 @@ export type BiconomySmartAccountV2ConfigBaseProps = { scanForUpgradedAccountsFromV1?: boolean; /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ maxIndexForScan?: number; + /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains */ + viemChain?: Chain; }; export type BiconomySmartAccountV2Config = BiconomySmartAccountV2ConfigBaseProps & BaseSmartAccountConfig & diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 78fa43fbd..2217c3c5a 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -1,10 +1,11 @@ -import { Paymaster, createSmartAccountClient } from "../src"; -import { createWalletClient, http } from "viem"; +import { Bundler, Paymaster, createBundler, createSmartAccountClient } from "../src"; +import { Chain, createWalletClient, http } from "viem"; import { localhost } from "viem/chains"; import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; import { TestData } from "../../../tests"; import { JsonRpcProvider } from "@ethersproject/providers"; import { Wallet } from "@ethersproject/wallet"; +import { getMockBundlerUrl } from "../../../tests/utils"; describe("Account Tests", () => { let ganache: TestData; @@ -58,6 +59,59 @@ describe("Account Tests", () => { expect(address).toBeTruthy(); }); + it("should pickup the rpcUrl when a custom chain is used", async () => { + const customBlastChain = { + id: 81_457, + name: "Blast", + // network: "blast", + nativeCurrency: { + decimals: 18, + name: "Ethereum", + symbol: "ETH", + }, + rpcUrls: { + public: { http: ["https://rpc.blast.io"] }, + default: { http: ["https://rpc.blast.io"] }, + }, + blockExplorers: { + etherscan: { name: "Blastscan", url: "https://blastscan.io/" }, + default: { name: "Blastscan", url: "https://blastscan.io/" }, + }, + contracts: { + multicall3: { + address: "0xca11bde05977b3631167028862be2a173976ca11", + blockCreated: 88_189, + }, + }, + } as const satisfies Chain; + + const { + whale: { privateKey }, + } = ganache; + + const accountOne = privateKeyToAccount(privateKey); + + const walletClientWithCustomChain = createWalletClient({ + account: accountOne, + chain: customBlastChain, + transport: http(customBlastChain.rpcUrls.default.http[0]), + }); + + const blastBundler = await createBundler({ + bundlerUrl: getMockBundlerUrl(customBlastChain.id), + viemChain: customBlastChain, + }); + const smartAccountFromViemWithCustomChain = await createSmartAccountClient({ + viemChain: customBlastChain, + signer: walletClientWithCustomChain, + bundler: blastBundler, + rpcUrl: customBlastChain.rpcUrls.default.http[0], + }); + + expect(smartAccountFromViemWithCustomChain.rpcProvider.transport.url).toBe("https://rpc.blast.io"); + expect(blastBundler.getBundlerUrl()).toBe(getMockBundlerUrl(customBlastChain.id)); + }); + it("should pickup the rpcUrl from viem wallet and ethers", async () => { const { chainId, diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 641b6d6f1..5903aacc4 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -1,5 +1,5 @@ import { getChain, type UserOperationStruct } from "@alchemy/aa-core"; -import { createPublicClient, http } from "viem"; +import { createPublicClient, http, PublicClient } from "viem"; import { IBundler } from "./interfaces/IBundler.js"; import { GetUserOperationReceiptResponse, @@ -46,10 +46,17 @@ export class Bundler implements IBundler { UserOpWaitForTxHashMaxDurationIntervals!: { [key in number]?: number }; + private provider: PublicClient; + constructor(bundlerConfig: Bundlerconfig) { const parsedChainId: number = bundlerConfig?.chainId || extractChainIdFromBundlerUrl(bundlerConfig.bundlerUrl); this.bundlerConfig = { ...bundlerConfig, chainId: parsedChainId }; + this.provider = createPublicClient({ + chain: bundlerConfig.viemChain ?? getChain(parsedChainId), + transport: http((bundlerConfig.viemChain || getChain(parsedChainId)).rpcUrls.default.http[0]), + }); + this.UserOpReceiptIntervals = { ...UserOpReceiptIntervals, ...bundlerConfig.userOpReceiptIntervals, @@ -146,10 +153,6 @@ export class Bundler implements IBundler { const response: UserOpResponse = { userOpHash: sendUserOperationResponse.result, wait: (confirmations?: number): Promise<UserOpReceipt> => { - const providerClient = createPublicClient({ - chain: getChain(chainId), - transport: http(), - }); // Note: maxDuration can be defined per chainId const maxDuration = this.UserOpReceiptMaxDurationIntervals[chainId] || 30000; // default 30 seconds let totalDuration = 0; @@ -161,7 +164,7 @@ export class Bundler implements IBundler { const userOpResponse = await this.getUserOpReceipt(sendUserOperationResponse.result); if (userOpResponse && userOpResponse.receipt && userOpResponse.receipt.blockNumber) { if (confirmations) { - const latestBlock = await providerClient.getBlockNumber(); + const latestBlock = await this.provider.getBlockNumber(); const confirmedBlocks = Number(latestBlock) - userOpResponse.receipt.blockNumber; if (confirmations >= confirmedBlocks) { clearInterval(intervalId); diff --git a/packages/bundler/src/utils/Types.ts b/packages/bundler/src/utils/Types.ts index 746d1b24e..1da57281f 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/packages/bundler/src/utils/Types.ts @@ -1,5 +1,5 @@ import { UserOperationStruct } from "@alchemy/aa-core"; -import { Hex } from "viem"; +import { Chain, Hex } from "viem"; export type Bundlerconfig = { bundlerUrl: string; @@ -10,6 +10,8 @@ export type Bundlerconfig = { userOpWaitForTxHashIntervals?: { [key in number]?: number }; userOpReceiptMaxDurationIntervals?: { [key in number]?: number }; userOpWaitForTxHashMaxDurationIntervals?: { [key in number]?: number }; + /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains */ + viemChain?: Chain; }; export type BundlerConfigWithChainId = Bundlerconfig & { chainId: number }; diff --git a/tests/utils.ts b/tests/utils.ts index c010435f6..b7fd5ea13 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -14,6 +14,8 @@ export const checkBalance = (publicClient: PublicClient, address: Hex, tokenAddr } }; +export const getMockBundlerUrl = (chainId: number) => `https://bundler.biconomy.io/api/v2/${chainId}/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f14`; + // TODO(Joe): Make human readable export const entryPointABI = [ { diff --git a/yarn.lock b/yarn.lock index 2b137143a..a72288690 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1098,9 +1098,9 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24": - version "0.3.24" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.24.tgz#e5640be1cab4085e4012a94c132ae86138f90f48" - integrity sha512-+VaWXDa6+l6MhflBvVXjIEAzb59nQ2JUK3bwRp2zRpPtU+8TFRy9Gg/5oIcNlkEL5PGlBFGfemUVvIgLnTzq7Q== + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -3119,9 +3119,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001591" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz#16745e50263edc9f395895a7cd468b9f3767cf33" - integrity sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ== + version "1.0.30001593" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001593.tgz#7cda1d9e5b0cad6ebab4133b1f239d4ea44fe659" + integrity sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ== catering@^2.0.0, catering@^2.1.0: version "2.1.1" @@ -3824,9 +3824,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.689" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.689.tgz#94fe370b800d978b606a2b4c0c5db5c8c98db4f2" - integrity sha512-GatzRKnGPS1go29ep25reM94xxd1Wj8ritU0yRhCJ/tr1Bg8gKnm6R9O/yPOhGQBoLMZ9ezfrpghNaTw97C/PQ== + version "1.4.690" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.690.tgz#dd5145d45c49c08a9a6f7454127e660bdf9a3fa7" + integrity sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -9180,9 +9180,9 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typedoc@^0.25.7: - version "0.25.9" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.9.tgz#0fb6608feec994eedc1e3276154fa8a486218ed2" - integrity sha512-jVoGmfNw848iW0L313+jqHbsknepwDV6F9nzk1H30oWhKXkw65uaENgR6QtTw9a5KqRWEb6nwNd54KxffBJyWw== + version "0.25.10" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.10.tgz#572f566498e4752fdbc793ccc14b8eb517944770" + integrity sha512-v10rtOFojrjW9og3T+6wAKeJaGMuojU87DXGZ33sfs+554wgPTRG+s07Ag1BjPZI85Y5QPVouPI63JQ6fcQM5w== dependencies: lunr "^2.3.9" marked "^4.3.0" @@ -9394,9 +9394,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.7.12, viem@^2.7.8: - version "2.7.16" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.16.tgz#99e66bbec661b2284bc32061474f20a90381bdcb" - integrity sha512-yOPa9yaoJUm44m0Qe3ugHnkHol3QQlFxN3jT+bq+lQip7X7cWdPfmguyfLWX2viCXcmYZUDiQdeFbkPW9lw11Q== + version "2.7.19" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.19.tgz#fa6bd8f46df2f0332e5ca6d116772dff6f161a72" + integrity sha512-UOMeqy+8p2709ra2j9HEOL1NfjsXZzlJ8gwR6YO/zXH8KIZvyzW07t4iQARF5+ShVZ/7+/1ec8oPjVi1M//33A== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From 49c968220e2db0aeee5cc6419f45df2b98f9792c Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Mon, 4 Mar 2024 17:53:18 +0200 Subject: [PATCH 1145/1247] Added ABI SVM test (#439) Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: Joe Pegler <joepegler123@gmail.com> --- packages/modules/src/utils/Helper.ts | 35 ++++++++++- ...batchedSessionValidationModule.e2e.spec.ts | 6 +- .../tests/sessionValidationModule.e2e.spec.ts | 62 ++++++++----------- 3 files changed, 63 insertions(+), 40 deletions(-) diff --git a/packages/modules/src/utils/Helper.ts b/packages/modules/src/utils/Helper.ts index 0754a9f30..b0b6fc43d 100644 --- a/packages/modules/src/utils/Helper.ts +++ b/packages/modules/src/utils/Helper.ts @@ -1,5 +1,18 @@ import { UserOperationStruct } from "@alchemy/aa-core"; -import { Hex, encodeAbiParameters, keccak256, parseAbiParameters } from "viem"; +import { Hex, encodeAbiParameters, keccak256, parseAbiParameters, concat, pad, toHex } from "viem"; + +export interface Rule { + offset: number; + condition: number; + referenceValue: `0x${string}`; +} + +export interface Permission { + destContract: `0x${string}`; + functionSelector: `0x${string}`; + valueLimit: bigint; + rules: Rule[]; +} function packUserOp(op: Partial<UserOperationStruct>, forSignature = true): string { if (!op.initCode || !op.callData || !op.paymasterAndData) throw new Error("Missing userOp properties"); @@ -39,3 +52,23 @@ export const getUserOpHash = (userOp: Partial<UserOperationStruct>, entryPointAd const enc = encodeAbiParameters(parseAbiParameters("bytes32, address, uint256"), [userOpHash, entryPointAddress, BigInt(chainId)]); return keccak256(enc); }; + +export async function getABISVMSessionKeyData(sessionKey: `0x${string}` | Uint8Array, permission: Permission): Promise<`0x${string}` | Uint8Array> { + let sessionKeyData = concat([ + sessionKey, + permission.destContract, + permission.functionSelector, + pad(toHex(permission.valueLimit), { size: 16 }), + pad(toHex(permission.rules.length), { size: 2 }), // this can't be more 2**11 (see below), so uint16 (2 bytes) is enough + ]) as `0x${string}`; + + for (let i = 0; i < permission.rules.length; i++) { + sessionKeyData = concat([ + sessionKeyData, + pad(toHex(permission.rules[i].offset), { size: 2 }), // offset is uint16, so there can't be more than 2**16/32 args = 2**11 + pad(toHex(permission.rules[i].condition), { size: 1 }), // uint8 + permission.rules[i].referenceValue, + ]); + } + return sessionKeyData; +} diff --git a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts index d6935eeb1..47f542e54 100644 --- a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts @@ -155,13 +155,13 @@ describe("Batched Session Router Tests", () => { const encodedCall = encodeFunctionData({ abi: parseAbi(["function transfer(address _to, uint256 _value)"]), functionName: "transfer", - args: [recipient, parseUnits("0.01", 6)], + args: [recipient, parseUnits("0.001", 6)], }); const encodedCall2 = encodeFunctionData({ abi: parseAbi(["function transfer(address _to, uint256 _value)"]), functionName: "transfer", - args: ["0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549", parseUnits("0.01", 6)], + args: ["0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549", parseUnits("0.001", 6)], }); const transferTx = { @@ -199,7 +199,7 @@ describe("Batched Session Router Tests", () => { }); const receipt = await userOpResponse2.wait(); - + console.log(receipt.userOpHash, "Batched user op hash"); expect(receipt.success).toBe("true"); expect(userOpResponse2.userOpHash).toBeTruthy(); diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts index 3764f94b7..286cfb9a7 100644 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ b/packages/modules/tests/sessionValidationModule.e2e.spec.ts @@ -1,11 +1,13 @@ import { DEFAULT_SESSION_KEY_MANAGER_MODULE, createSessionKeyManagerModule } from "@biconomy/modules"; import { SessionFileStorage } from "./utils/customSession"; import { WalletClientSigner, createSmartAccountClient } from "../../account/src/index"; -import { Hex, encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "viem"; +import { Hex, encodeAbiParameters, encodeFunctionData, pad, parseAbi, parseEther, parseUnits, slice, toFunctionSelector } from "viem"; import { TestData } from "../../../tests"; import { checkBalance } from "../../../tests/utils"; import { PaymasterMode } from "@biconomy/paymaster"; import { Logger } from "@biconomy/common"; +import { getABISVMSessionKeyData } from "../src/utils/Helper"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; describe("Session Validation Module Tests", () => { let mumbai: TestData; @@ -18,7 +20,6 @@ describe("Session Validation Module Tests", () => { // TODO(Gabi): Fix Session Validation Module tests it.skip("Should send a user op using Session Validation Module", async () => { let sessionSigner: WalletClientSigner; - const { whale: { account: { address: sessionKeyEOA }, @@ -62,7 +63,6 @@ describe("Session Validation Module Tests", () => { } catch (error) { sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey, chainId: viemChain }); } - expect(sessionSigner).toBeTruthy(); // Create session module @@ -72,26 +72,30 @@ describe("Session Validation Module Tests", () => { sessionStorageClient: sessionFileStorage, }); + const functionSelector = slice(toFunctionSelector("safeMint(address)"), 0, 4); // Set enabled call on session - const sessionKeyData = encodeAbiParameters( - [{ type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }], - [ - sessionKeyEOA, - "0xdA5289fCAAF71d52a80A254da614a192b693e977", // erc20 token address - recipient, // receiver address - parseUnits("10", 6), + const sessionKeyData = await getABISVMSessionKeyData(sessionKeyEOA as Hex, { + destContract: "0xdd526eba63ef200ed95f0f0fb8993fe3e20a23d0" as Hex, // nft address + functionSelector: functionSelector, + valueLimit: parseEther("0"), + rules: [ + { + offset: 0, // offset 0 means we are checking first parameter of safeMint (recipient address) + condition: 0, // 0 = Condition.EQUAL + referenceValue: pad("0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549", { size: 32 }), // recipient address + }, ], - ); + }); - const erc20ModuleAddr = "0x000000D50C68705bd6897B2d17c7de32FB519fDA"; + const abiSvmAddress = "0x000006bC2eCdAe38113929293d241Cf252D91861"; const sessionTxData = await sessionModule.createSessionData([ { validUntil: 0, validAfter: 0, - sessionValidationModule: erc20ModuleAddr, - sessionPublicKey: sessionKeyEOA, - sessionKeyData: sessionKeyData, + sessionValidationModule: abiSvmAddress, + sessionPublicKey: sessionKeyEOA as Hex, + sessionKeyData: sessionKeyData as Hex, }, ]); @@ -126,13 +130,13 @@ describe("Session Validation Module Tests", () => { Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash); const encodedCall = encodeFunctionData({ - abi: parseAbi(["function transfer(address _to, uint256 _value)"]), - functionName: "transfer", - args: [recipient, parseUnits("0.01", 6)], + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: ["0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549"], }); - const transferTx = { - to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", //erc20 token address + const nftMintTx = { + to: "0xdd526eba63ef200ed95f0f0fb8993fe3e20a23d0", data: encodedCall, }; @@ -140,24 +144,10 @@ describe("Session Validation Module Tests", () => { const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAccountAddress()); - const transferUserOp = await smartAccount.buildUserOp([transferTx], { - params: { - sessionSigner: sessionSigner, - sessionValidationModule: erc20ModuleAddr.toLowerCase() as Hex, - }, - paymasterServiceData: { - mode: PaymasterMode.SPONSORED, - }, - }); - - expect(transferUserOp.paymasterAndData).toBeDefined(); - expect(transferUserOp.paymasterAndData).not.toBeNull(); - expect(transferUserOp.paymasterAndData).not.toBe("0x"); - - const userOpResponse2 = await smartAccount.sendTransaction(transferTx, { + const userOpResponse2 = await smartAccount.sendTransaction(nftMintTx, { params: { sessionSigner: sessionSigner, - sessionValidationModule: erc20ModuleAddr.toLowerCase() as Hex, + sessionValidationModule: abiSvmAddress, }, paymasterServiceData: { mode: PaymasterMode.SPONSORED, From 5d2f34d8f0fb4f9ff7c7ddc00336471e57efdcfd Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Mon, 4 Mar 2024 18:15:55 +0200 Subject: [PATCH 1146/1247] Refactor to paymaster url & added check for chain ids + tests (#434) * Refactor to paymaster url & added check for chain ids + tests * Renamed test file * Fixed issue with wrong signer passed and added paymaster api key * Fixed bug introduced in develop branch & tests --------- Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: Joe Pegler <joepegler123@gmail.com> --- README.md | 6 +- packages/account/Readme.md | 6 +- .../account/src/BiconomySmartAccountV2.ts | 24 ++-- packages/account/src/utils/Types.ts | 2 + packages/account/src/utils/Utils.ts | 35 ++++++ packages/account/tests/account.e2e.spec.ts | 46 ++++++-- packages/account/tests/account.spec.ts | 3 +- packages/account/tests/utils.spec.ts | 107 ++++++++++++++++++ packages/bundler/src/Bundler.ts | 1 - packages/bundler/src/utils/Utils.ts | 13 +++ .../modules/src/BatchedSessionRouterModule.ts | 4 +- .../src/ECDSAOwnershipValidationModule.ts | 2 +- .../modules/src/MultichainValidationModule.ts | 2 +- .../modules/src/SessionKeyManagerModule.ts | 4 +- .../multiChainValidationModule.e2e.spec.ts | 8 +- tests/index.d.ts | 1 + tests/setup-e2e-tests.ts | 2 +- 17 files changed, 224 insertions(+), 42 deletions(-) create mode 100644 packages/account/tests/utils.spec.ts diff --git a/README.md b/README.md index 00c720607..5409568b0 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ import { createSmartAccountClient } from "@biconomy/account"; const smartAccount = await createSmartAccountClient({ signer: viemWalletOrEthersSigner, bundlerUrl: "", // From dashboard.biconomy.io - biconomyPaymasterApiKey: "", // From dashboard.biconomy.io + paymasterUrl: "", // From dashboard.biconomy.io }); const { wait } = await smartAccount.sendTransaction({ to: "0x...", value: 1 }); @@ -55,7 +55,7 @@ npm i @biconomy/account | Key | Description | | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | [signer](https://bcnmy.github.io/biconomy-client-sdk/packages/account/docs/interfaces/SmartAccountSigner.html) | This signer will be used for signing userOps for any transactions you build. Will accept ethers.JsonRpcSigner as well as a viemWallet | -| [biconomyPaymasterApiKey](https://dashboard.biconomy.io) | You can pass in a biconomyPaymasterApiKey necessary for sponsoring transactions (retrieved from the biconomy dashboard) | +| [paymasterUrl](https://dashboard.biconomy.io) | You can pass in a paymasterUrl necessary for sponsoring transactions (retrieved from the biconomy dashboard) | | [bundlerUrl](https://dashboard.biconomy.io) | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | ```typescript @@ -70,7 +70,7 @@ const signer = createWalletClient({ account, chain, transport: http() }); const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, - biconomyPaymasterApiKey, + paymasterUrl, }); ``` diff --git a/packages/account/Readme.md b/packages/account/Readme.md index 0aa74954b..dedd3e2e6 100644 --- a/packages/account/Readme.md +++ b/packages/account/Readme.md @@ -22,7 +22,7 @@ import { createSmartAccountClient } from "@biconomy/account"; const smartAccount = await createSmartAccountClient({ signer: viemWalletOrEthersSigner, bundlerUrl: "", // From dashboard.biconomy.io - biconomyPaymasterApiKey: "", // From dashboard.biconomy.io + paymasterUrl: "", // From dashboard.biconomy.io }); const { wait } = await smartAccount.sendTransaction({ to: "0x...", value: 1 }); @@ -55,7 +55,7 @@ For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Sm | Key | Description | | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | [signer](https://bcnmy.github.io/biconomy-client-sdk/packages/account/docs/interfaces/SmartAccountSigner.html) | This signer will be used for signing userOps for any transactions you build. Will accept ethers.JsonRpcSigner as well as a viemWallet | -| [biconomyPaymasterApiKey](https://dashboard.biconomy.io) | You can pass in a biconomyPaymasterApiKey necessary for sponsoring transactions (retrieved from the biconomy dashboard) | +| [paymasterUrl](https://dashboard.biconomy.io) | You can pass in a paymasterUrl necessary for sponsoring transactions (retrieved from the biconomy dashboard) | | [bundlerUrl](https://dashboard.biconomy.io) | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | ```typescript @@ -70,7 +70,7 @@ const signer = createWalletClient({ account, chain, transport: http() }); const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, - biconomyPaymasterApiKey, + paymasterUrl, }); ``` diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 3d0b32bd9..29d09eec9 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -26,7 +26,7 @@ import { BatchUserOperationCallData, SmartAccountSigner, } from "@alchemy/aa-core"; -import { isNullOrUndefined, isValidRpcUrl, packUserOp } from "./utils/Utils.js"; +import { compareChainIds, isNullOrUndefined, packUserOp, isValidRpcUrl } from "./utils/Utils.js"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, createECDSAOwnershipValidationModule } from "@biconomy/modules"; import { IHybridPaymaster, @@ -121,7 +121,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.bundler = biconomySmartAccountConfig.bundler; this.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex); - if (biconomySmartAccountConfig.biconomyPaymasterApiKey) { + if (biconomySmartAccountConfig.paymasterUrl) { + this.paymaster = new Paymaster({ + paymasterUrl: biconomySmartAccountConfig.paymasterUrl, + }); + } else if (biconomySmartAccountConfig.biconomyPaymasterApiKey) { this.paymaster = new Paymaster({ paymasterUrl: `https://paymaster.biconomy.io/api/v1/${biconomySmartAccountConfig.chainId}/${biconomySmartAccountConfig.biconomyPaymasterApiKey}`, }); @@ -193,16 +197,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { if (biconomySmartAccountConfig.signer) { const signerResult = await convertSigner(biconomySmartAccountConfig.signer, !!chainId); if (!chainId && !!signerResult.chainId) { - let chainIdFromBundler: number | undefined; - if (biconomySmartAccountConfig.bundlerUrl) { - chainIdFromBundler = extractChainIdFromBundlerUrl(biconomySmartAccountConfig.bundlerUrl); - } else if (biconomySmartAccountConfig.bundler) { - const bundlerUrlFromBundler = biconomySmartAccountConfig.bundler.getBundlerUrl(); - chainIdFromBundler = extractChainIdFromBundlerUrl(bundlerUrlFromBundler); - } - if (chainIdFromBundler !== signerResult.chainId) { - throw new Error("ChainId from bundler and signer do not match"); - } chainId = signerResult.chainId; } if (!rpcUrl && !!signerResult.rpcUrl) { @@ -249,6 +243,12 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { rpcUrl, }; + // We check if chain ids match (skip this if chainId is passed by in the config) + // This check is at the end of the function for cases when the signer is not passed in the config but a validation modules is and we get the signer from the validation module in this case + if (!biconomySmartAccountConfig.chainId) { + await compareChainIds(biconomySmartAccountConfig.signer || resolvedSmartAccountSigner, config, false); + } + return new BiconomySmartAccountV2(config); } diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 166c7601b..f653796c1 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -129,6 +129,8 @@ export type BiconomySmartAccountV2ConfigBaseProps = { defaultFallbackHandler?: Hex; /** rpcUrl: Rpc url, optional, we set default rpc url if not passed. */ rpcUrl?: string; // as good as Provider + /** paymasterUrl: The Paymaster URL retrieved from the Biconomy dashboard */ + paymasterUrl?: string; /** biconomyPaymasterApiKey: The API key retrieved from the Biconomy dashboard */ biconomyPaymasterApiKey?: string; /** activeValidationModule: The active validation module. Will default to the defaultValidationModule */ diff --git a/packages/account/src/utils/Utils.ts b/packages/account/src/utils/Utils.ts index b5c586fa1..c4af63d43 100644 --- a/packages/account/src/utils/Utils.ts +++ b/packages/account/src/utils/Utils.ts @@ -1,5 +1,9 @@ import { encodeAbiParameters, parseAbiParameters, keccak256, Hex } from "viem"; import type { UserOperationStruct } from "@alchemy/aa-core"; +import { SupportedSigner, convertSigner } from "@biconomy/common"; +import { extractChainIdFromBundlerUrl } from "@biconomy/bundler"; +import { BiconomySmartAccountV2Config } from "./Types"; +import { extractChainIdFromPaymasterUrl } from "@biconomy/bundler"; /** * pack the userOperation @@ -44,6 +48,37 @@ export const isNullOrUndefined = (value: any): value is undefined => { return value === null || value === undefined; }; +export const compareChainIds = async ( + signer: SupportedSigner, + biconomySmartAccountConfig: BiconomySmartAccountV2Config, + skipChainIdCalls: boolean, +): Promise<Error | void> => { + const signerResult = await convertSigner(signer, skipChainIdCalls); + + const chainIdFromBundler = biconomySmartAccountConfig.bundlerUrl + ? extractChainIdFromBundlerUrl(biconomySmartAccountConfig.bundlerUrl) + : biconomySmartAccountConfig.bundler + ? extractChainIdFromBundlerUrl(biconomySmartAccountConfig.bundler.getBundlerUrl()) + : undefined; + + const chainIdFromPaymasterUrl = biconomySmartAccountConfig.paymasterUrl + ? extractChainIdFromPaymasterUrl(biconomySmartAccountConfig.paymasterUrl) + : undefined; + + if (!isNullOrUndefined(signerResult.chainId)) { + if (chainIdFromBundler !== undefined && signerResult.chainId !== chainIdFromBundler) { + throw new Error(`Chain IDs from signer (${signerResult.chainId}) and bundler (${chainIdFromBundler}) do not match.`); + } + if (chainIdFromPaymasterUrl !== undefined && signerResult.chainId !== chainIdFromPaymasterUrl) { + throw new Error(`Chain IDs from signer (${signerResult.chainId}) and paymaster (${chainIdFromPaymasterUrl}) do not match.`); + } + } else { + if (chainIdFromBundler !== undefined && chainIdFromPaymasterUrl !== undefined && chainIdFromBundler !== chainIdFromPaymasterUrl) { + throw new Error(`Chain IDs from bundler (${chainIdFromBundler}) and paymaster (${chainIdFromPaymasterUrl}) do not match.`); + } + } +}; + export const isValidRpcUrl = (url: string): boolean => { const regex = /^(https:\/\/|wss:\/\/).*/; return regex.test(url); diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index e9e22d166..82f9649f1 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -117,12 +117,12 @@ describe("Account Tests", () => { const { whale: { viemWallet: signer }, bundlerUrl, - biconomyPaymasterApiKey, + paymasterUrl, } = mumbai; const smartAccount = await createSmartAccountClient({ signer, - biconomyPaymasterApiKey, + paymasterUrl, bundlerUrl, }); @@ -135,7 +135,7 @@ describe("Account Tests", () => { const { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, - biconomyPaymasterApiKey, + paymasterUrl, publicClient, nftAddress, } = mumbai; @@ -143,7 +143,7 @@ describe("Account Tests", () => { const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, - biconomyPaymasterApiKey, + paymasterUrl, }); const encodedCall = encodeFunctionData({ @@ -273,7 +273,7 @@ describe("Account Tests", () => { const { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, - biconomyPaymasterApiKey, + paymasterUrl, publicClient, nftAddress, } = mumbai; @@ -281,7 +281,7 @@ describe("Account Tests", () => { const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, - biconomyPaymasterApiKey, + paymasterUrl, }); const smartAccountAddress = await smartAccount.getAddress(); @@ -416,12 +416,12 @@ describe("Account Tests", () => { bundlerUrl, entryPointAddress, publicClient, - biconomyPaymasterApiKey, + paymasterUrl, } = mumbai; const smartAccount = await createSmartAccountClient({ signer, - biconomyPaymasterApiKey, + paymasterUrl, bundlerUrl, }); @@ -456,12 +456,12 @@ describe("Account Tests", () => { whale: { viemWallet: signer }, bundlerUrl, publicClient, - biconomyPaymasterApiKey, + paymasterUrl, } = mumbai; const smartAccount = await createSmartAccountClient({ signer, - biconomyPaymasterApiKey, + paymasterUrl, bundlerUrl, }); @@ -489,6 +489,32 @@ describe("Account Tests", () => { expect(ecdsaOwnershipModule).toBe(smartAccount.activeValidationModule.getAddress()); }); + it("Should throw, chain id from signer and bundlerUrl do not match", async () => { + const { + whale: { viemWallet: signer }, + } = mumbai; + + const createAccount = createSmartAccountClient({ + signer, + bundlerUrl: "https://bundler.biconomy.io/api/v2/1/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", // mock + }); + + await expect(createAccount).rejects.toThrow(); + }); + + it("Should throw, chain id from paymasterUrl and bundlerUrl do not match", async () => { + const { + whale: { viemWallet: signer }, + } = mumbai; + + const createAccount = createSmartAccountClient({ + signer, + paymasterUrl: "https://paymaster.biconomy.io/api/v1/1/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71", + bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", // mock + }); + + await expect(createAccount).rejects.toThrow(); + }); it("should deploy a smart account with native token balance", async () => { const { bundlerUrl, diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 2217c3c5a..42cc90355 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -235,10 +235,9 @@ describe("Account Tests", () => { it("Create a smart account with paymaster by creating instance", async () => { const { whale: { viemWallet: signer }, - biconomyPaymasterApiKey, + paymasterUrl, } = ganache; - const paymasterUrl = "https://paymaster.biconomy.io/api/v1/80001/" + biconomyPaymasterApiKey; const paymaster = new Paymaster({ paymasterUrl }); const smartAccount = await createSmartAccountClient({ diff --git a/packages/account/tests/utils.spec.ts b/packages/account/tests/utils.spec.ts new file mode 100644 index 000000000..6c86155ee --- /dev/null +++ b/packages/account/tests/utils.spec.ts @@ -0,0 +1,107 @@ +import { BiconomySmartAccountV2Config, createECDSAOwnershipValidationModule } from "../src"; +import { TestData } from "../../../tests"; +import { compareChainIds } from "../src/utils"; +import { createWalletClient, http } from "viem"; +import { bsc } from "viem/chains"; + +describe("Utils tests", () => { + let ganache: TestData; + + beforeEach(() => { + // @ts-ignore: Comes from setup-unit-tests + [ganache] = testDataPerChain; + }); + + it("Should not throw and error, chain ids match", async () => { + const { + minnow: { viemWallet: walletClient }, + } = ganache; + + const mockBundlerUrl = "https://bundler.biconomy.io/api/v2/1337/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44"; + const mockPaymasterUrl = "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71"; + + const config: BiconomySmartAccountV2Config = { + signer: walletClient, + bundlerUrl: mockBundlerUrl, + paymasterUrl: mockPaymasterUrl, + }; + + await expect(compareChainIds(walletClient, config, false)).resolves.not.toThrow(); + }); + + it("Should throw and error, bundlerUrl chain id and signer chain id does not match", async () => { + const { + minnow: { viemWallet: walletClient }, + paymasterUrl, + } = ganache; + + const mockBundlerUrl = "https://bundler.biconomy.io/api/v2/1/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44"; + + const config: BiconomySmartAccountV2Config = { + signer: walletClient, + bundlerUrl: mockBundlerUrl, + paymasterUrl, + }; + + await expect(compareChainIds(walletClient, config, false)).rejects.toThrow(); + }); + + it("Should throw and error, bundlerUrl chain id and paymaster url chain id does not match", async () => { + const { + bundlerUrl, + minnow: { viemWallet: walletClient }, + } = ganache; + + const mockPaymasterUrl = "https://paymaster.biconomy.io/api/v1/80001/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71"; + + const config: BiconomySmartAccountV2Config = { + signer: walletClient, + bundlerUrl, + paymasterUrl: mockPaymasterUrl, + }; + + await expect(compareChainIds(walletClient, config, false)).rejects.toThrow(); + }); + + it("Should throw and error, bundlerUrl chain id and paymaster url chain id does not match", async () => { + const { + bundlerUrl, + minnow: { viemWallet: walletClient }, + } = ganache; + + const mockPaymasterUrl = "https://paymaster.biconomy.io/api/v1/80001/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71"; + + const ecdsaModule = await createECDSAOwnershipValidationModule({ + signer: walletClient, + }); + + const config: BiconomySmartAccountV2Config = { + defaultValidationModule: ecdsaModule, + activeValidationModule: ecdsaModule, + bundlerUrl, + paymasterUrl: mockPaymasterUrl, + }; + + await expect(compareChainIds(walletClient, config, false)).rejects.toThrow(); + }); + + it("Should throw and error, signer has chain id (56) and paymasterUrl has chain id (80001)", async () => { + const { bundlerUrl, whale } = ganache; + + const mockPaymasterUrl = "https://paymaster.biconomy.io/api/v1/80001/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71"; + + const walletClient = createWalletClient({ + account: whale.viemWallet.account, + chain: bsc, + transport: http(bsc.rpcUrls.default.http[0]), + }); + + const config: BiconomySmartAccountV2Config = { + signer: walletClient, + bundlerUrl, + paymasterUrl: mockPaymasterUrl, + }; + + await expect(compareChainIds(walletClient, config, false)).rejects.toThrow(); + }); +}); diff --git a/packages/bundler/src/Bundler.ts b/packages/bundler/src/Bundler.ts index 5903aacc4..3782d7066 100644 --- a/packages/bundler/src/Bundler.ts +++ b/packages/bundler/src/Bundler.ts @@ -93,7 +93,6 @@ export class Bundler implements IBundler { // expected dummySig and possibly dummmy paymasterAndData should be provided by the caller // bundler doesn't know account and paymaster implementation userOp = transformUserOP(userOp); - const bundlerUrl = this.getBundlerUrl(); const response: EstimateUserOpGasResponse = await sendRequest( diff --git a/packages/bundler/src/utils/Utils.ts b/packages/bundler/src/utils/Utils.ts index a64420100..692cf1bdd 100644 --- a/packages/bundler/src/utils/Utils.ts +++ b/packages/bundler/src/utils/Utils.ts @@ -7,3 +7,16 @@ export const extractChainIdFromBundlerUrl = (url: string): number => { throw new Error("Invalid chain id"); } }; + +export const extractChainIdFromPaymasterUrl = (url: string): number => { + try { + const regex = /\/api\/v\d+\/(\d+)\//; + const match = regex.exec(url); + if (!match) { + throw new Error("Invalid URL format"); + } + return parseInt(match[1]); + } catch (error) { + throw new Error("Invalid chain id"); + } +}; diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts index fbb18459c..cec1cddd4 100644 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ b/packages/modules/src/BatchedSessionRouterModule.ts @@ -98,7 +98,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { const sessionDataTupleArray = []; // signer must be the same for all the sessions - const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner); + const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner, false); const signature = await sessionSigner.signMessage({ raw: toBytes(userOpHash) }); @@ -208,7 +208,7 @@ export class BatchedSessionRouterModule extends BaseValidationModule { // if needed we could do mock signature over userOpHashAndModuleAddress // signer must be the same for all the sessions - const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner); + const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner, false); for (const sessionParam of sessionParams) { if (!sessionParam.sessionSigner) { diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/packages/modules/src/ECDSAOwnershipValidationModule.ts index 71c515f9a..32cfc9af2 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/packages/modules/src/ECDSAOwnershipValidationModule.ts @@ -20,7 +20,7 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { public static async create(moduleConfig: ECDSAOwnershipValidationModuleConfig): Promise<ECDSAOwnershipValidationModule> { // Signer needs to be initialised here before defaultValidationModule is set - const { signer } = await convertSigner(moduleConfig.signer, true); + const { signer } = await convertSigner(moduleConfig.signer, false); const configForConstructor: ECDSAOwnershipValidationModuleConfigConstructorProps = { ...moduleConfig, signer }; // TODO: (Joe) stop doing things in a 'create' call after the instance has been created diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts index be5815210..0846b0f83 100644 --- a/packages/modules/src/MultichainValidationModule.ts +++ b/packages/modules/src/MultichainValidationModule.ts @@ -26,7 +26,7 @@ export class MultiChainValidationModule extends BaseValidationModule { public static async create(moduleConfig: MultiChainValidationModuleConfig): Promise<MultiChainValidationModule> { // Signer needs to be initialised here before defaultValidationModule is set - const { signer } = await convertSigner(moduleConfig.signer, true); + const { signer } = await convertSigner(moduleConfig.signer, false); const configForConstructor: MultiChainValidationModuleConfigConstructorProps = { ...moduleConfig, signer }; // TODO: (Joe) stop doing things in a 'create' call after the instance has been created diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/packages/modules/src/SessionKeyManagerModule.ts index b0a45886b..560c9ac60 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/packages/modules/src/SessionKeyManagerModule.ts @@ -159,7 +159,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { if (!(params && params.sessionSigner)) { throw new Error("Session signer is not provided."); } - const { signer: sessionSigner } = await convertSigner(params.sessionSigner); + const { signer: sessionSigner } = await convertSigner(params.sessionSigner, false); // Use the sessionSigner to sign the user operation const signature = await sessionSigner.signMessage({ raw: toBytes(userOpHash) }); @@ -194,7 +194,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { if (!(params && params.sessionSigner)) { throw new Error("Session signer is not provided."); } - const { signer: sessionSigner } = await convertSigner(params.sessionSigner); + const { signer: sessionSigner } = await convertSigner(params.sessionSigner, false); let sessionSignerData; if (params?.sessionID) { sessionSignerData = await this.sessionStorageClient.getSessionData({ diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts index e3ce46159..996be004c 100644 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts @@ -17,14 +17,14 @@ describe("MultiChainValidation Module Tests", () => { it("Should mint an NFT gasless on baseSepolia and mumbai", async () => { const { whale: { alchemyWalletClientSigner: signerMumbai, publicAddress: recipientForBothChains }, - biconomyPaymasterApiKey: biconomyPaymasterApiKeyMumbai, + paymasterUrl: biconomyPaymasterApiKeyMumbai, bundlerUrl: bundlerUrlMumbai, chainId: chainIdMumbai, } = mumbai; const { whale: { alchemyWalletClientSigner: signerBase }, - biconomyPaymasterApiKey: biconomyPaymasterApiKeyBase, + paymasterUrl: biconomyPaymasterApiKeyBase, bundlerUrl: bundlerUrlBase, chainId: chainIdBase, } = baseSepolia; @@ -43,7 +43,7 @@ describe("MultiChainValidation Module Tests", () => { bundlerUrl: bundlerUrlMumbai, defaultValidationModule: multiChainModule, activeValidationModule: multiChainModule, - biconomyPaymasterApiKey: biconomyPaymasterApiKeyMumbai, + paymasterUrl: biconomyPaymasterApiKeyMumbai, }), createSmartAccountClient({ chainId: chainIdBase, @@ -51,7 +51,7 @@ describe("MultiChainValidation Module Tests", () => { bundlerUrl: bundlerUrlBase, defaultValidationModule: multiChainModule, activeValidationModule: multiChainModule, - biconomyPaymasterApiKey: biconomyPaymasterApiKeyBase, + paymasterUrl: biconomyPaymasterApiKeyBase, }), ]); diff --git a/tests/index.d.ts b/tests/index.d.ts index 3589835e7..25e39cf50 100644 --- a/tests/index.d.ts +++ b/tests/index.d.ts @@ -23,6 +23,7 @@ export type TestData = { bundlerUrl: string; entryPointAddress: string; viemChain: Chain; + paymasterUrl: string; biconomyPaymasterApiKey: string; ethersProvider: JsonRpcProvider; }; diff --git a/tests/setup-e2e-tests.ts b/tests/setup-e2e-tests.ts index 1aa13ace5..4d3d8af77 100644 --- a/tests/setup-e2e-tests.ts +++ b/tests/setup-e2e-tests.ts @@ -104,9 +104,9 @@ beforeAll(async () => { nftAddress: whaleBalance.nftAddress, entryPointAddress: whaleBalance.entryPointAddress, viemChain: whaleBalance.viemChain, - biconomyPaymasterApiKey: whaleBalance.biconomyPaymasterApiKey, ethersProvider: whaleBalance.ethersProvider, paymasterUrl: whaleBalance.paymasterUrl, + biconomyPaymasterApiKey: whaleBalance.biconomyPaymasterApiKey, }; const datum = { From d27d84d9da3e6e688c2736e5d96a1abc4a574f75 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Mon, 4 Mar 2024 16:37:08 +0000 Subject: [PATCH 1147/1247] Improved balances (#445) * Improved balances * Tweak comments * comment --- .../account/src/BiconomySmartAccountV2.ts | 84 +++++++++++-------- packages/account/src/utils/Utils.ts | 2 + 2 files changed, 53 insertions(+), 33 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 29d09eec9..3aa81a4e2 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -271,14 +271,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } /** - * Returns token balances of Smart Account + * Returns token balances (and native token balance) of the smartAccount instance. * * This method will fetch the token balances of the smartAccount instance. - * If left empty, it will return the balance of the native token, with the address set to 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE. + * The balance of the native token will always be returned as the last element in the reponse array, with the address set to 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE. * - * @param tokenAddresses - Optional. Array of token addresses to fetch the balances of. - * @returns Promise<Array<BalancePayload>> - An array of token balances (or native token balance) of the smartAccount instance. - * @throws An error if something is wrong with the smart account instance creation. + * @param addresses - Optional. Array of asset addresses to fetch the balances of. If not provided, the method will return only the balance of the native token. + * @returns Promise<Array<BalancePayload>> - An array of token balances (plus the native token balance) of the smartAccount instance. * * @example * import { createClient } from "viem" @@ -294,8 +293,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); - * const [usdtBalanceFromSmartAccount] = await smartAccount.getBalances([usdt]); + * const [usdtBalanceFromSmartAccount, nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalances([usdt]); * + * console.log(usdtBalanceFromSmartAccount); * // { * // amount: 1000000000000000n, * // decimals: 6, @@ -304,41 +304,59 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * // chainId: 80001 * // } * + * // or to get the nativeToken balance + * + * const [nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalances(); + * + * console.log(nativeTokenBalanceFromSmartAccount); + * // { + * // amount: 1000000000000000n, + * // decimals: 18, + * // address: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + * // formattedAmount: "1", + * // chainId: 80001 + * // } + * */ - public async getBalances(tokenAddresses?: Array<Hex>): Promise<Array<BalancePayload>> { + public async getBalances(addresses?: Array<Hex>): Promise<Array<BalancePayload>> { const accountAddress = await this.getAccountAddress(); + const result: BalancePayload[] = []; + + if (addresses) { + const tokenContracts = addresses.map((address) => + getContract({ + address, + abi: parseAbi(ERC20_ABI), + client: this.provider, + }), + ); + + const balancePromises = tokenContracts.map((tokenContract) => tokenContract.read.balanceOf([accountAddress])) as Promise<bigint>[]; + const decimalsPromises = tokenContracts.map((tokenContract) => tokenContract.read.decimals()) as Promise<number>[]; + const [balances, decimalsPerToken] = await Promise.all([Promise.all(balancePromises), Promise.all(decimalsPromises)]); - if (!tokenAddresses) { - const balance = await this.provider.getBalance({ address: accountAddress }); - return [ - { - amount: balance, - decimals: 18, - address: NATIVE_TOKEN_ALIAS, - formattedAmount: formatUnits(balance, 18), + balances.forEach((amount, index) => + result.push({ + amount, + decimals: decimalsPerToken[index], + address: addresses[index], + formattedAmount: formatUnits(amount, decimalsPerToken[index]), chainId: this.chainId, - }, - ]; + }), + ); } - const tokenContracts = (tokenAddresses ?? []).map((address) => - getContract({ - address, - abi: parseAbi(ERC20_ABI), - client: this.provider, - }), - ); - const balancePromises = tokenContracts.map((tokenContract) => tokenContract.read.balanceOf([accountAddress])) as Promise<bigint>[]; - const decimalsPromises = tokenContracts.map((tokenContract) => tokenContract.read.decimals()) as Promise<number>[]; - const [balances, decimalsPerToken] = await Promise.all([Promise.all(balancePromises), Promise.all(decimalsPromises)]); + const balance = await this.provider.getBalance({ address: accountAddress }); - return balances.map((amount, index) => ({ - amount, - decimals: decimalsPerToken[index], - address: tokenAddresses[index], - formattedAmount: formatUnits(amount, decimalsPerToken[index]), + result.push({ + amount: balance, + decimals: 18, + address: NATIVE_TOKEN_ALIAS, + formattedAmount: formatUnits(balance, 18), chainId: this.chainId, - })); + }); + + return result; } /** diff --git a/packages/account/src/utils/Utils.ts b/packages/account/src/utils/Utils.ts index c4af63d43..53aff16f2 100644 --- a/packages/account/src/utils/Utils.ts +++ b/packages/account/src/utils/Utils.ts @@ -83,3 +83,5 @@ export const isValidRpcUrl = (url: string): boolean => { const regex = /^(https:\/\/|wss:\/\/).*/; return regex.test(url); }; + +export const addressEquals = (a?: string, b?: string): boolean => !!a && !!b && a?.toLowerCase() === b.toLowerCase(); From 635db847f460b955f60faaf4cbbe9e10369067e4 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Mon, 4 Mar 2024 17:44:24 +0000 Subject: [PATCH 1148/1247] Back merge main branch (#446) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Merge Develop to Main (#417) * Fix UserOpResponse wait confirmations * birth of V4 SDK (#401) * feat: accounts update * update other packages with viem types * fix: account compatibility * minor fix * code refactor with latest releases * fix: resolve build * turned off bundler tests * fix: default validation params * fix!: make bundler and paymaster public * feat: reduce the bundle size * fix: lint and temp test * fix: gasless paymaster flow * minor fixes * remove the default chain * fix: lint * fix: method comment * fix: bundler abstraction in v4 * feat: add Logger class to v4 * Feedback by @joepegler #352 * fix: logic error * Feat(DEVX-410): Reinclude tests * remove unused package * fix: constructor validation initialisation * fix: build issue * Resolved DEVX-405 * Added e2e test for multiChain module * Updated the "addSigner" method * Fixed lint * Resolved DEVX-402 Added esbuild * Remove unused file * Added negative tests * Added multichainValidation tests * Fix import * Multichain testing support * Added session validation module tests * fix issues with address and update gitignore * linkAll improvement * watch package builds cont * WIP Session module * Added tests for multi-chain validation and session validation * unit tests fix * Remove duplicate test * revert tsconfig change * Added check for paymaster in BiconomySmartAccountV2 class * Fixed session file storage path and gitignore * Fixed e2e nft mint test * Added wait for tx before checking balance in test * Resolved SMA-526 * test workflow * test again * fix command * fix again * test again * cont. * Added SPONSORED and ERC20 paymaster check logic in SDK + tests * Feat(DEVX-425): Support ethers (#370) Resolved DEVX-425: Support ethers * Fixed lint * Merged with v4 * Changed parameter name * Uncomment PaymasterMode * Added fix for selected quote case ERC20 paymaster * Changed send user op approach in ERC20 paymaster test * Modify sendUserOp function description * Added throw instead of return user op * continued * Fix branch for deployment of docs * Removed try catch * Added utility func to get balance in tests * Removed unused value param from tx obj * Apply Signer Abstraction to modules (#375) * Added Signer Abstraction * fix:circular_dependency * Resolved SM-547 * lint:fix * Removed lint-staged (#382) Co-authored-by: GabiDev <gv@popoo.io> * README tweaks (#377) * Update README.md * createSmartAccountClient (#385) * Add paymasterAndData validation in e2e tests (#381) * Add paymasterAndData validation in e2e tests * Use config values instead of hardcoded in tests --------- Co-authored-by: GabiDev <gv@popoo.io> * Use RpcUrl from provider (#379) * Resolved SMA-549 lint:fix log * continued * continued * continued * Remove e2e test from unit test commit lockfile * rpc test * fix tests * Feat/sma 540 check paymaster userop (#384) * Refactor paymasterServiceData validation logic for ERC20 mode * Add assertions and test case for ERC20 Paymaster user op * Changed isNullOrUndefined function param to any type * Update createSmartWalletClient to createSmartAccountClient * Added ts-doc for setPaymasterUserOp * Export FeeQuotesOrDataResponse from @account and update import path in test * Refactor setPaymasterUserOp --> getPaymasterUserOp --------- Co-authored-by: GabiDev <gv@popoo.io> * update lockfile * Add ethersV6 compatibility (#387) * Fix for etherv6 signer compatibility * Refactor name --------- Co-authored-by: GabiDev <gv@popoo.io> * Feat(SMA-559): Improved dx for erc20 paymaster calls (#388) * Resolved SMA-559 * Fix await * Fix tests * Update docs * remove unused import * Fix broken tests * Fix rpc url * buildTokenPaymasterUserOp * lint:fix * Fix spender * Abstract tokenlist away * fix test * fix await * lint:fix * Make getPaymasterUserOp public * remove log * Except sessionStorageData folder from gitignore but not files (#389) Co-authored-by: GabiDev <gv@popoo.io> * fixes in v4 for front end frameworks (#392) * fixes in v4 for front end frameworks * revert build scripts * Added simulationType flag (#390) * Added simulationType flag * Change params for sendTransaction * Modified sendTransaction params for simulationType + moduleInfo params --------- Co-authored-by: GabiDev <gv@popoo.io> * Fix(SMA-574): ESM builds (#393) * es build fixes Resolved SMA-574 * Include both builds * Default build with tsc * minify_tsc_build * Fix check for maxApproval in BiconomySmartAccountV2 (#395) Co-authored-by: GabiDev <gv@popoo.io> * Bugfix/api error message (#396) * Fix check for maxApproval in BiconomySmartAccountV2 * Fixed api error response + increment time for test --------- Co-authored-by: GabiDev <gv@popoo.io> * Change type: sessionSigner: SupportedSigner (#397) * Fixed merkletreejs import (#400) * Fixed merkletreejs import * Removed console log --------- Co-authored-by: GabiDev <gv@popoo.io> * Feat(SMA-579): Allow empty tokenInfo fields during getTokenFees (#399) * Resolved SMA-579 * added e2e tests * lint:fix & update docs * fix: token paymaster approval flows * continued * test fix * Remove max approval from tests --------- Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * yarn lock * Feat(SMA-583): Update README.md with v4 examples (#405) * continued docs + readme updates * Updated README.md * lint:fix * update lockfile * Added string as a supported Transaction value type (#404) Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * Added export for UserOpStatus type from /account (#403) * Exported UserOpStatus type from /account * update lockfile --------- Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * Added needed exports from modules (#402) * Added needed exports from modules * update lockfile --------- Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> * Added readme (#409) Co-authored-by: GabiDev <gv@popoo.io> * Commented overrides and skipBundlerGasEstimation params (#407) Co-authored-by: GabiDev <gv@popoo.io> * V4 with viem v2 (bump aa-core and viem) (#406) * update aa-core and viem packages * update rest of the code to use updated deps * update lockfile * fix: build error --------- Co-authored-by: amanraj1608 <archanaamanraj@gmail.com> * update lockfile * Added a new param to sendRequest "service" (#412) Co-authored-by: GabiDev <gv@popoo.io> * Added changelog (#410) * Make package exports consistent (#411) * Make package exports consistent * Update README.md s * type comment fix * Move default to end of exports * LightSigner * export LightSigner * export type --------- Co-authored-by: amanraj1608 <archanaamanraj@gmail.com> Co-authored-by: Aman Raj <42104907+AmanRaj1608@users.noreply.github.com> Co-authored-by: Joe Pegler <joepegler123@gmail.com> Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> * Release 8 - Biconomy V4 SDK (#414) * update lockfile * chore: release r8 update package version * Update modules changelog --------- Co-authored-by: Joe Pegler <joepegler123@gmail.com> * Replaced baseGoerli with baseSepolia (#415) Co-authored-by: GabiDev <gv@popoo.io> * Fix for encodeAbiParameters inside batched session module (#416) Co-authored-by: GabiDev <gv@popoo.io> --------- Co-authored-by: Aurélien <aurelien@avicenne.studio> Co-authored-by: amanraj1608 <archanaamanraj@gmail.com> Co-authored-by: Aman Raj <42104907+AmanRaj1608@users.noreply.github.com> Co-authored-by: Joe Pegler <joepegler123@gmail.com> Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> * Resolve SMA-673 * Fix(SMA-677): Particle auth build broken * bump aa-core version * Update changelogs * Particle build revert * bump version --------- Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Co-authored-by: Aurélien <aurelien@avicenne.studio> Co-authored-by: amanraj1608 <archanaamanraj@gmail.com> Co-authored-by: Aman Raj <42104907+AmanRaj1608@users.noreply.github.com> Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> --- yarn.lock | 239 ++++++++++++++++++++++++++---------------------------- 1 file changed, 117 insertions(+), 122 deletions(-) diff --git a/yarn.lock b/yarn.lock index a72288690..952ef86ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,9 +13,9 @@ integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== "@alchemy/aa-core@^3.1.1": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.4.0.tgz#08e514bf2f97a9c1452424a7f7915aa48daf4db2" - integrity sha512-kEqsMwweMxQU6b8mKNmkUacyZRxdU7WBBiAYNmGxJK5djOdsGlfCBZGHu2AyAb8ogfrGWX8J+uVuYTnCIZS6ew== + version "3.1.1" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.1.1.tgz#5b93078b13168b3874a6596cfff9150834926356" + integrity sha512-ze607aFT5pReC0al7WV6MTCkW5kTO1GkDnm80BVU8rL4FZ7CW355tDxvgufnss05BwYUoXrlXfTseqMoAVKjVA== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" @@ -23,12 +23,12 @@ zod "^3.22.4" "@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": version "7.23.5" @@ -44,20 +44,20 @@ integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" - integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" + integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.0" - "@babel/parser" "^7.24.0" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" - "@babel/types" "^7.24.0" + "@babel/helpers" "^7.23.9" + "@babel/parser" "^7.23.9" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -124,9 +124,9 @@ "@babel/helper-validator-identifier" "^7.22.20" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" - integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== "@babel/helper-simple-access@^7.22.5": version "7.22.5" @@ -157,14 +157,14 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" - integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== +"@babel/helpers@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" + integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" - "@babel/types" "^7.24.0" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" "@babel/highlight@^7.23.4": version "7.23.4" @@ -175,10 +175,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" - integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" + integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -279,25 +279,25 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/runtime@^7.21.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" - integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== +"@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" + integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== dependencies: "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" -"@babel/traverse@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" - integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== +"@babel/traverse@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" + integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== dependencies: "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" @@ -305,15 +305,15 @@ "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.3.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" + integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -812,9 +812,9 @@ "@ethersproject/strings" "^5.7.0" "@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" + integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": version "1.1.3" @@ -1065,24 +1065,24 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: - "@jridgewell/set-array" "^1.2.1" + "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" @@ -1097,10 +1097,10 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.22" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -1767,9 +1767,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.21" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.21.tgz#82d2b098e165fc198e6e6e3e4c8b2154235e3aa1" - integrity sha512-tuUVuOPf+el+kDlHLFMyDy4IkoGjk+P3QvVrxT7WnmEma1NgWTE7RaNsniwqn6SYkAwAxksL/D9aADUXZxqPmw== + version "1.3.19" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.19.tgz#63013cbbebf36c37e970f83406ef955f08309499" + integrity sha512-cQOGS0dH6LMDyJ7bkaLj6FShYSyz8OZ2hBvtBPdTtuMCsTlQPFcXKR6QI2CpJZBbb6m1fIXZEXlFYFZzY/t6ng== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -2157,9 +2157,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.24" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792" - integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long== + version "20.11.20" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.20.tgz#f0a2aee575215149a62784210ad88b3a34843659" + integrity sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg== dependencies: undici-types "~5.26.4" @@ -2196,9 +2196,9 @@ integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== "@types/semver@^7.5.0": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + version "7.5.7" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.7.tgz#326f5fdda70d13580777bcaa1bc6fa772a5aef0e" + integrity sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg== "@types/stack-utils@^2.0.0": version "2.0.3" @@ -3119,9 +3119,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001593" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001593.tgz#7cda1d9e5b0cad6ebab4133b1f239d4ea44fe659" - integrity sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ== + version "1.0.30001589" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz#7ad6dba4c9bf6561aec8291976402339dc157dfb" + integrity sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg== catering@^2.0.0, catering@^2.1.0: version "2.1.1" @@ -3824,9 +3824,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.690" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.690.tgz#dd5145d45c49c08a9a6f7454127e660bdf9a3fa7" - integrity sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA== + version "1.4.681" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz#5f23fad8aa7e1f64cbb7dd9d15c7e39a1cd7e6e3" + integrity sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" @@ -3923,17 +3923,17 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" - integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== + version "1.22.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" + integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== dependencies: array-buffer-byte-length "^1.0.1" arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.7" + available-typed-arrays "^1.0.6" call-bind "^1.0.7" es-define-property "^1.0.0" es-errors "^1.3.0" - es-set-tostringtag "^2.0.3" + es-set-tostringtag "^2.0.2" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" get-intrinsic "^1.2.4" @@ -3941,15 +3941,15 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: globalthis "^1.0.3" gopd "^1.0.1" has-property-descriptors "^1.0.2" - has-proto "^1.0.3" + has-proto "^1.0.1" has-symbols "^1.0.3" hasown "^2.0.1" internal-slot "^1.0.7" is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.3" + is-negative-zero "^2.0.2" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" + is-shared-array-buffer "^1.0.2" is-string "^1.0.7" is-typed-array "^1.1.13" is-weakref "^1.0.2" @@ -3962,10 +3962,10 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.5" + typed-array-buffer "^1.0.1" + 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.14" @@ -3986,7 +3986,7 @@ es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-set-tostringtag@^2.0.3: +es-set-tostringtag@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== @@ -4099,9 +4099,9 @@ eslint-import-resolver-node@^0.3.9: resolve "^1.22.4" eslint-module-utils@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" - integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== + 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: debug "^3.2.7" @@ -5542,7 +5542,7 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-negative-zero@^2.0.3: +is-negative-zero@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== @@ -5599,7 +5599,7 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: +is-shared-array-buffer@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== @@ -7082,9 +7082,9 @@ neo-async@^2.6.2: integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nock@^13.2.9: - version "13.5.4" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.4.tgz#8918f0addc70a63736170fef7106a9721e0dc479" - integrity sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw== + version "13.5.3" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.3.tgz#9858adf5b840696a410baf98bda720d5fad4f075" + integrity sha512-2NlGmHIK2rTeyy7UaY1ZNg0YZfEJMxghXgZi0b4DBsUyoDNTTxZeCSG1nmirAWF44RkkoV8NnegLVQijgVapNQ== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" @@ -8432,11 +8432,11 @@ shiki@^0.14.7: vscode-textmate "^8.0.0" side-channel@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" + integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.6" es-errors "^1.3.0" get-intrinsic "^1.2.4" object-inspect "^1.13.1" @@ -8926,18 +8926,13 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@0.2.1: +tmp@0.2.1, tmp@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== dependencies: rimraf "^3.0.0" -tmp@~0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== - tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -9130,7 +9125,7 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typed-array-buffer@^1.0.2: +typed-array-buffer@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== @@ -9139,7 +9134,7 @@ typed-array-buffer@^1.0.2: es-errors "^1.3.0" is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.1: +typed-array-byte-length@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== @@ -9150,7 +9145,7 @@ typed-array-byte-length@^1.0.1: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.2: +typed-array-byte-offset@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== @@ -9162,7 +9157,7 @@ typed-array-byte-offset@^1.0.2: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-length@^1.0.5: +typed-array-length@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== @@ -9180,9 +9175,9 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typedoc@^0.25.7: - version "0.25.10" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.10.tgz#572f566498e4752fdbc793ccc14b8eb517944770" - integrity sha512-v10rtOFojrjW9og3T+6wAKeJaGMuojU87DXGZ33sfs+554wgPTRG+s07Ag1BjPZI85Y5QPVouPI63JQ6fcQM5w== + version "0.25.8" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.8.tgz#7d0e1bf12d23bf1c459fd4893c82cb855911ff12" + integrity sha512-mh8oLW66nwmeB9uTa0Bdcjfis+48bAjSH3uqdzSuSawfduROQLlXw//WSNZLYDdhmMVB7YcYZicq6e8T0d271A== dependencies: lunr "^2.3.9" marked "^4.3.0" @@ -9394,9 +9389,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.7.12, viem@^2.7.8: - version "2.7.19" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.19.tgz#fa6bd8f46df2f0332e5ca6d116772dff6f161a72" - integrity sha512-UOMeqy+8p2709ra2j9HEOL1NfjsXZzlJ8gwR6YO/zXH8KIZvyzW07t4iQARF5+ShVZ/7+/1ec8oPjVi1M//33A== + version "2.7.13" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.13.tgz#bf3f8e973f532f9f9c86c97b645ac8add740e1bd" + integrity sha512-NGWLEocRp2UTqGidzI9bnL9u6WHlG2ik7IwqXNe6/QC2dL6jE3Z1mUnUUVcSx71h81nx74EflD9ahtleK3RQdA== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From 687431183aa2f5ec6c092c0a6bf7c3eb7c698ffe Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Mon, 4 Mar 2024 18:04:21 +0000 Subject: [PATCH 1149/1247] Changelog --- packages/account/CHANGELOG.md | 26 ++++++++++++++++++++++++++ packages/bundler/CHANGELOG.md | 4 ++++ packages/modules/CHANGELOG.md | 4 ++++ packages/particle-auth/CHANGELOG.md | 4 ++++ packages/paymaster/CHANGELOG.md | 4 ++++ packages/transak/CHANGELOG.md | 4 ++++ 6 files changed, 46 insertions(+) diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index 7d7ed9af6..aac1a8244 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -3,6 +3,32 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.1.0 + +Features + +- Added Speed optimisation, removing redundant gasEstimate call to bundler ([2371b2](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/2371b230cd5806ec4c7c95ba604d6f924b4be768)) +- Added smartAccount.getBalances() method ([4b8bae](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/4b8bae412577b846e700b168976cefa6b0803ff6)) +- Added smartAccount.getSupportedTokens() method ([6d2fb27](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/6d2fb27d6f9b424e440e45990ea06820a9d16d4b)) +- Added smartAccount.deploy() method ([be9dc4](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/be9dc4d74a3e5a22e69416983436997cf2ea417c)) +- Increased checking of the chainId from the bundler, paymaster and the provider ([5d2f3](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/5d2f34d8f0fb4f9ff7c7ddc00336471e57efdcfd)) +- Added entity name to Logger calls ([9278ec](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/9278ecc21e060ef75ab29a0d054d95d69cd4ae27)) + +Fixes: + +- Fix for encodeAbiParameters inside batched session module ([b27061](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/b27061e2eec7bafb0620e88e6d94e56e9a13cb76)) +- added flag to skip calldata approval patch ([75698](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/75698c827015533e32acb1f535bdf6b738876217)) +- Fixed the particle auth build + +Chores: + +- Added tests for ecdsa module ([1a8f29](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/1a8f296c26c9fedd57023f8f6423d7662a3adfee)) +- Increased test coverage ([329003](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/329003cebb6b4034496e41651985804cdec0d311)) +- Improved issue reporting guidelines ([8b9fb5d](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/8b9fb5de9556870611307c12e57df333619d9252)) +- Added e2e tests for optimism, ran from GH actions ([5051ba](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/5051ba5ff14220ad616f1ec3bc93a3f42d6f8887)) +- Added ABI SVM test ([49c96](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/49c968220e2db0aeee5cc6419f45df2b98f9792c)) +- Added tests for batched session router testing ([2eb9765](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/2eb9765d066fcb7b35d08223257aeb9b38c7a78b)) + ## 4.0.3 (2023-28-02) VERSION Bump Only. diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index 08d5af51d..893bd00d6 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.1.0 + +VERSION Bump Only. + ## 4.0.3 (2023-28-02) VERSION Bump Only. diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md index 76d05229f..59e4cf84b 100644 --- a/packages/modules/CHANGELOG.md +++ b/packages/modules/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.1.0 + +VERSION Bump Only. + ## 4.0.3 (2023-28-02) VERSION Bump Only. diff --git a/packages/particle-auth/CHANGELOG.md b/packages/particle-auth/CHANGELOG.md index 0fe532b3e..90b0fd697 100644 --- a/packages/particle-auth/CHANGELOG.md +++ b/packages/particle-auth/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.1.0 + +VERSION Bump Only. + ## 4.0.3 (2023-28-02) Fix build diff --git a/packages/paymaster/CHANGELOG.md b/packages/paymaster/CHANGELOG.md index aa60e1174..27eba50ee 100644 --- a/packages/paymaster/CHANGELOG.md +++ b/packages/paymaster/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.1.0 + +VERSION Bump Only. + ## 4.0.3 (2023-28-02) VERSION Bump Only. diff --git a/packages/transak/CHANGELOG.md b/packages/transak/CHANGELOG.md index 9d1cd4246..3c157da9b 100644 --- a/packages/transak/CHANGELOG.md +++ b/packages/transak/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.1.0 + +VERSION Bump Only. + ## 4.0.3 (2023-28-02) VERSION Bump Only. From 3c048c0a1abc6765a8fc9c74ac3a68a31a4ded16 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Mon, 4 Mar 2024 18:11:26 +0000 Subject: [PATCH 1150/1247] version bump --- packages/account/package.json | 10 +++++----- packages/bundler/package.json | 4 ++-- packages/common/package.json | 2 +- packages/modules/package.json | 8 ++++---- packages/particle-auth/package.json | 2 +- packages/paymaster/package.json | 4 ++-- packages/transak/package.json | 2 +- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/account/package.json b/packages/account/package.json index f5471cbcf..9ab3da686 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account", - "version": "4.0.3", + "version": "4.1.0", "description": "This package provides apis for ERC-4337 based smart account implementations", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -68,10 +68,10 @@ }, "dependencies": { "@alchemy/aa-core": "^3.1.1", - "@biconomy/bundler": "^4.0.3", - "@biconomy/common": "^4.0.3", - "@biconomy/modules": "^4.0.3", - "@biconomy/paymaster": "^4.0.3", + "@biconomy/bundler": "^4.1.0", + "@biconomy/common": "^4.1.0", + "@biconomy/modules": "^4.1.0", + "@biconomy/paymaster": "^4.1.0", "viem": "^2.7.12" } } diff --git a/packages/bundler/package.json b/packages/bundler/package.json index c73f8f10c..4eade66e2 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/bundler", - "version": "4.0.3", + "version": "4.1.0", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -57,7 +57,7 @@ }, "dependencies": { "@alchemy/aa-core": "^3.1.1", - "@biconomy/common": "^4.0.3", + "@biconomy/common": "^4.1.0", "viem": "^2.7.12" }, "devDependencies": { diff --git a/packages/common/package.json b/packages/common/package.json index 8336c7675..f36d7c059 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "4.0.3", + "version": "4.1.0", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/modules/package.json b/packages/modules/package.json index f9bc8f520..222be7f4e 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/modules", - "version": "4.0.3", + "version": "4.1.0", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -54,7 +54,7 @@ }, "dependencies": { "@alchemy/aa-core": "^3.1.1", - "@biconomy/common": "^4.0.3", + "@biconomy/common": "^4.1.0", "@ethersproject/abi": "^5.7.0", "merkletreejs": "^0.3.11", "viem": "^2.7.12" @@ -64,7 +64,7 @@ "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12", - "@biconomy/paymaster": "^4.0.3", - "@biconomy/modules": "^4.0.3" + "@biconomy/paymaster": "^4.1.0", + "@biconomy/modules": "^4.1.0" } } diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index faf8709a7..b52766c2d 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/particle-auth", - "version": "4.0.3", + "version": "4.1.0", "description": "Particle auth for Biconomy SDK", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index 6360011b7..34f093113 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/paymaster", - "version": "4.0.3", + "version": "4.1.0", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -54,7 +54,7 @@ }, "dependencies": { "@alchemy/aa-core": "^3.1.1", - "@biconomy/common": "^4.0.3", + "@biconomy/common": "^4.1.0", "viem": "^2.7.12" }, "devDependencies": { diff --git a/packages/transak/package.json b/packages/transak/package.json index 9afe8a662..eedc20c21 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/transak", - "version": "4.0.3", + "version": "4.1.0", "description": "transak for biconomy sdk", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", From 99c65a51d437a3e8a2c240c8ecd9bdcdf3e284dc Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Tue, 5 Mar 2024 12:53:16 +0000 Subject: [PATCH 1151/1247] Add getChain helper (#449) * Add getChain helper * Update changelog * export utils --- packages/account/CHANGELOG.md | 4 +- packages/account/src/index.ts | 1 + packages/account/src/utils/Constants.ts | 1 + packages/account/src/utils/Utils.ts | 20 +- packages/account/tests/utils.spec.ts | 27 +- yarn.lock | 465 ++++++++++-------------- 6 files changed, 249 insertions(+), 269 deletions(-) diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index 01c827941..68152064a 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -5,7 +5,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline ## 4.1.0 (2023-04-03) -Features +Features: - Added Speed optimisation, removing redundant gasEstimate call to bundler ([2371b2](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/2371b230cd5806ec4c7c95ba604d6f924b4be768)) - Added smartAccount.getBalances() method ([4b8bae](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/4b8bae412577b846e700b168976cefa6b0803ff6)) @@ -13,6 +13,8 @@ Features - Added smartAccount.deploy() method ([be9dc4](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/be9dc4d74a3e5a22e69416983436997cf2ea417c)) - Increased checking of the chainId from the bundler, paymaster and the provider ([5d2f3](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/5d2f34d8f0fb4f9ff7c7ddc00336471e57efdcfd)) - Added entity name to Logger calls ([9278ec](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/9278ecc21e060ef75ab29a0d054d95d69cd4ae27)) +- Export a 'getChain' by id helper, which returns a viem chain ([ab2ba](https://github.com/bcnmy/biconomy-client-sdk/pull/449/commits/ab2ba2c518ce867c52bf90b9018dfc1b4ec3b4d4)) +- Add "stateOverride" optional param ([20fd54](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/20fd54c817d2dcbc6b7d9a247d890d91b19a9c2f)) Fixes: diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts index 5c4ed9b17..f46953a67 100644 --- a/packages/account/src/index.ts +++ b/packages/account/src/index.ts @@ -3,6 +3,7 @@ import { type BiconomySmartAccountV2Config } from "./utils/Types.js"; export * from "./utils/Types.js"; export * from "./utils/Constants.js"; +export * from "./utils/Utils.js"; export * from "./BiconomySmartAccountV2.js"; export { WalletClientSigner, LocalAccountSigner, type SmartAccountSigner } from "@alchemy/aa-core"; diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 75769ae94..9ddfc7f0b 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -63,6 +63,7 @@ export const ERROR_MESSAGES = { SPENDER_REQUIRED: "spender is required for ERC20 mode", NO_FEE_QUOTE: "FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote", FAILED_FEE_QUOTE_FETCH: "Failed to fetch fee quote", + CHAIN_NOT_FOUND: "Chain not found", }; export const NATIVE_TOKEN_ALIAS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; diff --git a/packages/account/src/utils/Utils.ts b/packages/account/src/utils/Utils.ts index 53aff16f2..efd8e977c 100644 --- a/packages/account/src/utils/Utils.ts +++ b/packages/account/src/utils/Utils.ts @@ -1,9 +1,11 @@ -import { encodeAbiParameters, parseAbiParameters, keccak256, Hex } from "viem"; +import { encodeAbiParameters, parseAbiParameters, keccak256, Hex, Chain } from "viem"; import type { UserOperationStruct } from "@alchemy/aa-core"; import { SupportedSigner, convertSigner } from "@biconomy/common"; import { extractChainIdFromBundlerUrl } from "@biconomy/bundler"; import { BiconomySmartAccountV2Config } from "./Types"; import { extractChainIdFromPaymasterUrl } from "@biconomy/bundler"; +import * as chains from "viem/chains"; +import { ERROR_MESSAGES } from "./Constants"; /** * pack the userOperation @@ -85,3 +87,19 @@ export const isValidRpcUrl = (url: string): boolean => { }; export const addressEquals = (a?: string, b?: string): boolean => !!a && !!b && a?.toLowerCase() === b.toLowerCase(); + +/** + * Utility method for converting a chainId to a {@link Chain} object + * + * @param chainId + * @returns a {@link Chain} object for the given chainId + * @throws if the chainId is not found + */ +export const getChain = (chainId: number): Chain => { + for (const chain of Object.values(chains)) { + if (chain.id === chainId) { + return chain; + } + } + throw new Error(ERROR_MESSAGES.CHAIN_NOT_FOUND); +}; diff --git a/packages/account/tests/utils.spec.ts b/packages/account/tests/utils.spec.ts index 6c86155ee..d8dfc2a79 100644 --- a/packages/account/tests/utils.spec.ts +++ b/packages/account/tests/utils.spec.ts @@ -1,6 +1,6 @@ -import { BiconomySmartAccountV2Config, createECDSAOwnershipValidationModule } from "../src"; +import { BiconomySmartAccountV2Config, ERROR_MESSAGES, createECDSAOwnershipValidationModule } from "../src"; import { TestData } from "../../../tests"; -import { compareChainIds } from "../src/utils"; +import { compareChainIds, getChain } from "../src/utils"; import { createWalletClient, http } from "viem"; import { bsc } from "viem/chains"; @@ -104,4 +104,27 @@ describe("Utils tests", () => { await expect(compareChainIds(walletClient, config, false)).rejects.toThrow(); }); + + // test chains + it("Should return chain object for chain id 1", () => { + const chainId = 1; + const chain = getChain(chainId); + expect(chain.id).toBe(chainId); + }); + + // should have correct fields + it("Should have correct fields", () => { + const chainId = 1; + const chain = getChain(chainId); + + ["blockExplorers", "contracts", "fees", "formatters", "id", "name", "nativeCurrency", "rpcUrls", "serializers"].every((field) => { + expect(chain).toHaveProperty(field); + }); + }); + + // Should throw an error, chain id not found + it("Should throw an error, chain id not found", () => { + const chainId = 0; + expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND); + }); }); diff --git a/yarn.lock b/yarn.lock index 952ef86ce..819d36e70 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,9 +13,9 @@ integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== "@alchemy/aa-core@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.1.1.tgz#5b93078b13168b3874a6596cfff9150834926356" - integrity sha512-ze607aFT5pReC0al7WV6MTCkW5kTO1GkDnm80BVU8rL4FZ7CW355tDxvgufnss05BwYUoXrlXfTseqMoAVKjVA== + version "3.4.0" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.4.0.tgz#08e514bf2f97a9c1452424a7f7915aa48daf4db2" + integrity sha512-kEqsMwweMxQU6b8mKNmkUacyZRxdU7WBBiAYNmGxJK5djOdsGlfCBZGHu2AyAb8ogfrGWX8J+uVuYTnCIZS6ew== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" @@ -23,12 +23,12 @@ zod "^3.22.4" "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": version "7.23.5" @@ -44,20 +44,20 @@ integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" - integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" + integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.9" - "@babel/parser" "^7.23.9" - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/helpers" "^7.24.0" + "@babel/parser" "^7.24.0" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -124,9 +124,9 @@ "@babel/helper-validator-identifier" "^7.22.20" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== "@babel/helper-simple-access@^7.22.5": version "7.22.5" @@ -157,14 +157,14 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" - integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== +"@babel/helpers@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" + integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== dependencies: - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" "@babel/highlight@^7.23.4": version "7.23.4" @@ -175,10 +175,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" - integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" + integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -279,25 +279,25 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/runtime@^7.21.0": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" - integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" - integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== +"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== dependencies: "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" -"@babel/traverse@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" - integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== +"@babel/traverse@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" + integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== dependencies: "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" @@ -305,15 +305,15 @@ "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.3": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" - integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.3.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -812,9 +812,9 @@ "@ethersproject/strings" "^5.7.0" "@fastify/busboy@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" - integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": version "1.1.3" @@ -1065,24 +1065,24 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" @@ -1097,10 +1097,10 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.22" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" - integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -1251,33 +1251,65 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/ethereumjs-block@5.0.4": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.4.tgz#ff2acb98a86b9290e35e315a6abfb9aebb9cf39e" - integrity sha512-AcyacJ9eX/uPEvqsPiB+WO1ymE+kyH48qGGiGV+YTojdtas8itUTW5dehDSOXEEItWGbbzEJ4PRqnQZlWaPvDw== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-trie" "6.0.4" - "@nomicfoundation/ethereumjs-tx" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - ethereum-cryptography "0.1.3" +"@nomicfoundation/edr-darwin-arm64@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.2.0.tgz#b208fe65f90f8113ad634482f7382f73e2189858" + integrity sha512-OfXruInMbc6+J6BnAlYlpTS8lj5hHmfLdzqthhiQaayuHxT6iBMrefe6N+2DC9hBxD3VjCApUWtLfV3pJzpbCg== -"@nomicfoundation/ethereumjs-blockchain@7.0.4": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.4.tgz#b77511b389290b186c8d999e70f4b15c27ef44ea" - integrity sha512-jYsd/kwzbmpnxx86tXsYV8wZ5xGvFL+7/P0c6OlzpClHsbFzeF41KrYA9scON8Rg6bZu3ZTv6JOAgj3t7USUfg== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.4" - "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-ethash" "3.0.4" - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-trie" "6.0.4" - "@nomicfoundation/ethereumjs-tx" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - lru-cache "^10.0.0" +"@nomicfoundation/edr-darwin-x64@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.2.0.tgz#b7b0a285a7a004da7908d475fefb086eac1ae61f" + integrity sha512-tfNhHYSgro3nOTGCQzBvFniUy0cvUBtPCSeniNleu5M4nolArnxlZfEkNdpYRB92QRjfaREZttuBP1nrIO/b+w== + +"@nomicfoundation/edr-linux-arm64-gnu@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.2.0.tgz#dfb9b8bf3718143b31e24b00e4f18f1aca0e1905" + integrity sha512-Km4rZIsARkiIR7HfpU6ybCkAHpD+Gg68x+5+dhQsv+eT3XvQ9pRv3jz14v3aimOjwpCd5/uUw9LhQrPtFyMGGA== + +"@nomicfoundation/edr-linux-arm64-musl@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.2.0.tgz#ac53bfaa4828922f300025955b51c92c98e40f12" + integrity sha512-pD4g2r5Q54b3AzEaI0okDktFrYjhcdCxO3lvP1pYGCvha8KYrUv9DM3Z/0kfnn3vP9y/PxzcJUBfXjG4NZuHpw== + +"@nomicfoundation/edr-linux-x64-gnu@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.2.0.tgz#dbab76c3dc53c4dcea502df302b8c7ee1ccf3d89" + integrity sha512-xjw8yNiEED0jlM5HuWXF/61+4bBkEpSZpMmb39XChPJXVxtZIIBzj0AcGTdzkSyH/atgkEaNutkEb1PeEuFwnQ== + +"@nomicfoundation/edr-linux-x64-musl@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.2.0.tgz#31989fd1e9e548897d7843987e2bdef35d0c877c" + integrity sha512-aqqR0usfHt6V2j+7pQiMqIrIBpUwDeU27w27kuvZsHDUhrvg4sgGm3FBG1QUxN8tv9E/UrbUuW0kVt7tbEmKMA== + +"@nomicfoundation/edr-win32-arm64-msvc@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.2.0.tgz#6d028107064adc032af912268b9b55eb9dba7fd5" + integrity sha512-+S4Qnx5CVdUAxGUXa3rNq0h/qALIHkGdlKLT5KDsk/qGTmI/uuAB4tnoOaaHMc5ANckPtBdWfSwnLJjWPZbR6w== + +"@nomicfoundation/edr-win32-ia32-msvc@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.2.0.tgz#570a504df4cb30197302435b89dc9a92b7dbf9fb" + integrity sha512-hK0RVcNog8sJ63QmeEJ+WIhnCLfUCl5jXYCBjQtGOWlIkC7EzNddkZ28MmrFOMrV3xstSGOmdPvvq8q1HNVakA== + +"@nomicfoundation/edr-win32-x64-msvc@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.2.0.tgz#90de20c19c4c20c7d69563b176d92425a8e8bb5a" + integrity sha512-gWgMU4I94fHIeda3xOnHBYcCOzRF6ySB89vgENK4Y1S1Un/qpZ+tQwf+/hX0HCaZGMw/LqBG61ltOYUXVfZ6Yg== + +"@nomicfoundation/edr@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.2.0.tgz#dfdecce6382f9faf640d937357418825a10c5483" + integrity sha512-RRWJepP4ozI4jVxqNtuw53ZbPcUB4FcKry2aYVQw8KAp9o8j/I5H3SsfpmKT+lgHRSL/5/KK0RxOx1GQSyDAZw== + optionalDependencies: + "@nomicfoundation/edr-darwin-arm64" "0.2.0" + "@nomicfoundation/edr-darwin-x64" "0.2.0" + "@nomicfoundation/edr-linux-arm64-gnu" "0.2.0" + "@nomicfoundation/edr-linux-arm64-musl" "0.2.0" + "@nomicfoundation/edr-linux-x64-gnu" "0.2.0" + "@nomicfoundation/edr-linux-x64-musl" "0.2.0" + "@nomicfoundation/edr-win32-arm64-msvc" "0.2.0" + "@nomicfoundation/edr-win32-ia32-msvc" "0.2.0" + "@nomicfoundation/edr-win32-x64-msvc" "0.2.0" "@nomicfoundation/ethereumjs-common@4.0.4": version "4.0.4" @@ -1286,62 +1318,11 @@ dependencies: "@nomicfoundation/ethereumjs-util" "9.0.4" -"@nomicfoundation/ethereumjs-ethash@3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.4.tgz#06cb2502b3012fb6c11cffd44af08aecf71310da" - integrity sha512-xvIrwIMl9sSaiYKRem68+O7vYdj7Q2XWv5P7JXiIkn83918QzWHvqbswTRsH7+r6X1UEvdsURRnZbvZszEjAaQ== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.4" - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - bigint-crypto-utils "^3.2.2" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-evm@2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.4.tgz#c9c761767283ac53946185474362230b169f8f63" - integrity sha512-lTyZZi1KpeMHzaO6cSVisR2tjiTTedjo7PcmhI/+GNFo9BmyY6QYzGeSti0sFttmjbEMioHgXxl5yrLNRg6+1w== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-statemanager" "2.0.4" - "@nomicfoundation/ethereumjs-tx" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - "@types/debug" "^4.1.9" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - rustbn-wasm "^0.2.0" - "@nomicfoundation/ethereumjs-rlp@5.0.4": version "5.0.4" resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== -"@nomicfoundation/ethereumjs-statemanager@2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.4.tgz#bf14415e1f31b5ea8b98a0c027c547d0555059b6" - integrity sha512-HPDjeFrxw6llEi+BzqXkZ+KkvFnTOPczuHBtk21hRlDiuKuZz32dPzlhpRsDBGV1b5JTmRDUVqCS1lp3Gghw4Q== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-trie" "6.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - js-sdsl "^4.1.4" - lru-cache "^10.0.0" - -"@nomicfoundation/ethereumjs-trie@6.0.4": - version "6.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.4.tgz#688a3f76646c209365ee6d959c3d7330ede5e609" - integrity sha512-3nSwQiFMvr2VFe/aZUyinuohYvtytUqZCUCvIWcPJ/BwJH6oQdZRB42aNFBJ/8nAh2s3OcroWpBLskzW01mFKA== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - "@types/readable-stream" "^2.3.13" - ethereum-cryptography "0.1.3" - lru-cache "^10.0.0" - readable-stream "^3.6.0" - "@nomicfoundation/ethereumjs-tx@5.0.4": version "5.0.4" resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" @@ -1360,33 +1341,6 @@ "@nomicfoundation/ethereumjs-rlp" "5.0.4" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-verkle@0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-verkle/-/ethereumjs-verkle-0.0.2.tgz#7686689edec775b2efea5a71548f417c18f7dea4" - integrity sha512-bjnfZElpYGK/XuuVRmLS3yDvr+cDs85D9oonZ0YUa5A3lgFgokWMp76zXrxX2jVQ0BfHaw12y860n1+iOi6yFQ== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - lru-cache "^10.0.0" - rust-verkle-wasm "^0.0.1" - -"@nomicfoundation/ethereumjs-vm@7.0.4": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.4.tgz#e5a6eec4877dc62dda93003c6d7afd1fe4b9625b" - integrity sha512-gsA4IhmtWHI4BofKy3kio9W+dqZQs5Ji5mLjLYxHCkat+JQBUt5szjRKra2F9nGDJ2XcI/wWb0YWUFNgln4zRQ== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.4" - "@nomicfoundation/ethereumjs-blockchain" "7.0.4" - "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-evm" "2.0.4" - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-statemanager" "2.0.4" - "@nomicfoundation/ethereumjs-trie" "6.0.4" - "@nomicfoundation/ethereumjs-tx" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": version "0.1.1" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" @@ -1767,9 +1721,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.19" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.19.tgz#63013cbbebf36c37e970f83406ef955f08309499" - integrity sha512-cQOGS0dH6LMDyJ7bkaLj6FShYSyz8OZ2hBvtBPdTtuMCsTlQPFcXKR6QI2CpJZBbb6m1fIXZEXlFYFZzY/t6ng== + version "1.3.21" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.21.tgz#82d2b098e165fc198e6e6e3e4c8b2154235e3aa1" + integrity sha512-tuUVuOPf+el+kDlHLFMyDy4IkoGjk+P3QvVrxT7WnmEma1NgWTE7RaNsniwqn6SYkAwAxksL/D9aADUXZxqPmw== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -1798,7 +1752,7 @@ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== -"@scure/base@^1.1.1", "@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": +"@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": version "1.1.5" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== @@ -2157,9 +2111,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.20" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.20.tgz#f0a2aee575215149a62784210ad88b3a34843659" - integrity sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg== + version "20.11.24" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792" + integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long== dependencies: undici-types "~5.26.4" @@ -2175,14 +2129,6 @@ dependencies: "@types/node" "*" -"@types/readable-stream@^2.3.13": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" - integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" - "@types/secp256k1@^4.0.1": version "4.0.6" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" @@ -2196,9 +2142,9 @@ integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== "@types/semver@^7.5.0": - version "7.5.7" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.7.tgz#326f5fdda70d13580777bcaa1bc6fa772a5aef0e" - integrity sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg== + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/stack-utils@^2.0.0": version "2.0.3" @@ -2803,11 +2749,6 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -bigint-crypto-utils@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" - integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== - bignumber.js@^9.0.1: version "9.1.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" @@ -3119,9 +3060,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001589" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz#7ad6dba4c9bf6561aec8291976402339dc157dfb" - integrity sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg== + version "1.0.30001594" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001594.tgz#bea552414cd52c2d0c985ed9206314a696e685f5" + integrity sha512-VblSX6nYqyJVs8DKFMldE2IVCJjZ225LW00ydtUWwh5hk9IfkTOffO6r8gJNsH0qqqeAF8KrbMYA2VEwTlGW5g== catering@^2.0.0, catering@^2.1.0: version "2.1.1" @@ -3824,11 +3765,11 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.681" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz#5f23fad8aa7e1f64cbb7dd9d15c7e39a1cd7e6e3" - integrity sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg== + version "1.4.692" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.692.tgz#82139d20585a4b2318a02066af7593a3e6bec993" + integrity sha512-d5rZRka9n2Y3MkWRN74IoAsxR0HK3yaAt7T50e3iT9VZmCCQDT3geXUO5ZRMhDToa1pkCeQXuNo+0g+NfDOVPA== -elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: +elliptic@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -3841,6 +3782,19 @@ elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +elliptic@^6.5.2, elliptic@^6.5.4: + version "6.5.5" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" + integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + email-addresses@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-5.0.0.tgz#7ae9e7f58eef7d5e3e2c2c2d3ea49b78dc854fa6" @@ -3923,17 +3877,17 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" - integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== + version "1.22.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" + integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== dependencies: array-buffer-byte-length "^1.0.1" arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.6" + available-typed-arrays "^1.0.7" call-bind "^1.0.7" es-define-property "^1.0.0" es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" get-intrinsic "^1.2.4" @@ -3941,15 +3895,15 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: globalthis "^1.0.3" gopd "^1.0.1" has-property-descriptors "^1.0.2" - has-proto "^1.0.1" + has-proto "^1.0.3" has-symbols "^1.0.3" hasown "^2.0.1" internal-slot "^1.0.7" is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.2" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" is-typed-array "^1.1.13" is-weakref "^1.0.2" @@ -3962,10 +3916,10 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.1" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" unbox-primitive "^1.0.2" which-typed-array "^1.1.14" @@ -3986,7 +3940,7 @@ es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-set-tostringtag@^2.0.2: +es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== @@ -4099,9 +4053,9 @@ eslint-import-resolver-node@^0.3.9: resolve "^1.22.4" 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== + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== dependencies: debug "^3.2.7" @@ -5045,23 +4999,16 @@ hard-rejection@^2.1.0: integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== hardhat@^2.17.3: - version "2.20.1" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.20.1.tgz#3ad8f2b003a96c9ce80a55fec3575580ff2ddcd4" - integrity sha512-q75xDQiQtCZcTMBwjTovrXEU5ECr49baxr4/OBkIu/ULTPzlB20yk1dRWNmD2IFbAeAeXggaWvQAdpiScaHtPw== + version "2.21.0" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.21.0.tgz#2e23126310a6c77cd7e149e6af1dd67626b7a74f" + integrity sha512-8DlJAVJDEVHaV1sh9FLuKLLgCFv9EAJ+M+8IbjSIPgoeNo3ss5L1HgGBMfnI88c7OzMEZkdcuyGoobFeK3Orqw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "5.0.4" - "@nomicfoundation/ethereumjs-blockchain" "7.0.4" + "@nomicfoundation/edr" "^0.2.0" "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-evm" "2.0.4" - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-statemanager" "2.0.4" - "@nomicfoundation/ethereumjs-trie" "6.0.4" "@nomicfoundation/ethereumjs-tx" "5.0.4" "@nomicfoundation/ethereumjs-util" "9.0.4" - "@nomicfoundation/ethereumjs-verkle" "0.0.2" - "@nomicfoundation/ethereumjs-vm" "7.0.4" "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" @@ -5542,7 +5489,7 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-negative-zero@^2.0.2: +is-negative-zero@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== @@ -5599,7 +5546,7 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-shared-array-buffer@^1.0.2: +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== @@ -6130,11 +6077,6 @@ jest@^29.7.0: import-local "^3.0.2" jest-cli "^29.7.0" -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" @@ -6563,7 +6505,7 @@ logform@^2.3.2, logform@^2.4.0: safe-stable-stringify "^2.3.1" triple-beam "^1.3.0" -lru-cache@^10.0.0, lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": +lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": version "10.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== @@ -7082,9 +7024,9 @@ neo-async@^2.6.2: integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nock@^13.2.9: - version "13.5.3" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.3.tgz#9858adf5b840696a410baf98bda720d5fad4f075" - integrity sha512-2NlGmHIK2rTeyy7UaY1ZNg0YZfEJMxghXgZi0b4DBsUyoDNTTxZeCSG1nmirAWF44RkkoV8NnegLVQijgVapNQ== + version "13.5.4" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.4.tgz#8918f0addc70a63736170fef7106a9721e0dc479" + integrity sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" @@ -8235,18 +8177,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rust-verkle-wasm@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/rust-verkle-wasm/-/rust-verkle-wasm-0.0.1.tgz#fd8396a7060d8ee8ea10da50ab6e862948095a74" - integrity sha512-BN6fiTsxcd2dCECz/cHtGTt9cdLJR925nh7iAuRcj8ymKw7OOaPmCneQZ7JePOJ/ia27TjEL91VdOi88Yf+mcA== - -rustbn-wasm@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn-wasm/-/rustbn-wasm-0.2.0.tgz#0407521fb55ae69eeb4968d01885d63efd1c4ff9" - integrity sha512-FThvYFNTqrEKGqXuseeg0zR7yROh/6U1617mCHF68OVqrN1tNKRN7Tdwy4WayPVsCmmK+eMxtIZX1qL6JxTkMg== - dependencies: - "@scure/base" "^1.1.1" - rxjs@^7.5.5, rxjs@^7.8.1: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" @@ -8432,11 +8362,11 @@ shiki@^0.14.7: vscode-textmate "^8.0.0" side-channel@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" - integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.7" es-errors "^1.3.0" get-intrinsic "^1.2.4" object-inspect "^1.13.1" @@ -8926,13 +8856,18 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@0.2.1, tmp@~0.2.1: +tmp@0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== dependencies: rimraf "^3.0.0" +tmp@~0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -9125,7 +9060,7 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typed-array-buffer@^1.0.1: +typed-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== @@ -9134,7 +9069,7 @@ typed-array-buffer@^1.0.1: es-errors "^1.3.0" is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.0: +typed-array-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== @@ -9145,7 +9080,7 @@ typed-array-byte-length@^1.0.0: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.0: +typed-array-byte-offset@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== @@ -9157,7 +9092,7 @@ typed-array-byte-offset@^1.0.0: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-length@^1.0.4: +typed-array-length@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== @@ -9175,9 +9110,9 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typedoc@^0.25.7: - version "0.25.8" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.8.tgz#7d0e1bf12d23bf1c459fd4893c82cb855911ff12" - integrity sha512-mh8oLW66nwmeB9uTa0Bdcjfis+48bAjSH3uqdzSuSawfduROQLlXw//WSNZLYDdhmMVB7YcYZicq6e8T0d271A== + version "0.25.10" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.10.tgz#572f566498e4752fdbc793ccc14b8eb517944770" + integrity sha512-v10rtOFojrjW9og3T+6wAKeJaGMuojU87DXGZ33sfs+554wgPTRG+s07Ag1BjPZI85Y5QPVouPI63JQ6fcQM5w== dependencies: lunr "^2.3.9" marked "^4.3.0" @@ -9389,9 +9324,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.7.12, viem@^2.7.8: - version "2.7.13" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.13.tgz#bf3f8e973f532f9f9c86c97b645ac8add740e1bd" - integrity sha512-NGWLEocRp2UTqGidzI9bnL9u6WHlG2ik7IwqXNe6/QC2dL6jE3Z1mUnUUVcSx71h81nx74EflD9ahtleK3RQdA== + version "2.7.19" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.19.tgz#fa6bd8f46df2f0332e5ca6d116772dff6f161a72" + integrity sha512-UOMeqy+8p2709ra2j9HEOL1NfjsXZzlJ8gwR6YO/zXH8KIZvyzW07t4iQARF5+ShVZ/7+/1ec8oPjVi1M//33A== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From 815e9440db03ebae98bb24edfcb3bbcabf9b2a61 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Wed, 6 Mar 2024 15:20:22 +0000 Subject: [PATCH 1152/1247] yml formatting remove wevm reference body --- .github/ISSUE_TEMPLATE/bug_report.yml | 60 +++++++++++++-------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 01619b1b0..45f4d6bf0 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,70 +1,70 @@ name: Bug Report description: File a bug/issue -title: 'bug: <title>' +title: "bug: <title>" body: - type: markdown attributes: - value: | - Thanks for taking the time to fill out this bug report! The more info you provide, the more we can help you. + value: | + Thanks for taking the time to fill out this bug report! The more info you provide, the more we can help you. - type: checkboxes attributes: - label: Is there an existing issue for this? - description: Please search to see if an issue already exists for the bug you encountered. - options: - label: I have searched the existing issues - required: true + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered. + options: + - label: I have searched the existing issues + required: true - type: input attributes: - label: Package Version - description: What version of the SDK are you using? - placeholder: 4.0.0 + label: Package Version + description: What version of the SDK are you using? + placeholder: 4.1.0 validations: - required: true + required: true - type: textarea attributes: - label: Current Behavior - description: A concise description of what you're experiencing. + label: Current Behavior + description: A concise description of what you're experiencing. validations: - required: false + required: false - type: textarea attributes: - label: Expected Behavior - description: A concise description of what you expected to happen. + label: Expected Behavior + description: A concise description of what you expected to happen. validations: - required: false + required: false - type: textarea attributes: - label: Steps To Reproduce - description: Steps or code snippets to reproduce the behaviour. + label: Steps To Reproduce + description: Steps or code snippets to reproduce the behavior. validations: - required: false + required: false - type: textarea attributes: - label: Package.json (or lockfile) content - description: Packages used in your project. This will help us understand the environment you are working in, and check if there are dependencies that might be causing the issue. + label: Package.json (or lockfile) content + description: Packages used in your project. This will help us understand the environment you are working in, and check if there are dependencies that might be causing the issue. validations: - required: false + required: false - type: input attributes: - label: Link to Minimal Reproducible Example (StackBlitz, CodeSandbox, GitHub repo etc.) + label: Link to Minimal Reproducible Example (StackBlitz, CodeSandbox, GitHub repo etc.) description: | [Please provide by forking this project](https://stackblitz.com/~/github.com/bcnmy/sdk-examples) and making relevant changes to the boilerplate. This makes investigating issues and helping you out significantly easier! For most issues, you will likely get asked to provide one so why not add one now :) validations: - required: false + required: false - type: textarea attributes: - label: Anything else? - description: | - Browser info? Screenshots? Anything that will give us more context about the issue you are encountering! + label: Anything else? + description: | + Browser info? Screenshots? Anything that will give us more context about the issue you are encountering! Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. - validations: - required: false + required: false From 007b70335aa270344cdcd82eb7e081a6feddfb8d Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Wed, 6 Mar 2024 15:30:37 +0000 Subject: [PATCH 1153/1247] lint: fix --- packages/account/src/BiconomySmartAccountV2.ts | 3 +-- packages/account/src/utils/Utils.ts | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 98b3b85d6..f8c5e86bd 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -26,7 +26,7 @@ import { BatchUserOperationCallData, SmartAccountSigner, } from "@alchemy/aa-core"; -import { addressEquals, isNullOrUndefined, isValidRpcUrl, packUserOp, compareChainIds } from "./utils/Utils.js"; +import { isNullOrUndefined, isValidRpcUrl, packUserOp, compareChainIds } from "./utils/Utils.js"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, createECDSAOwnershipValidationModule } from "@biconomy/modules"; import { IHybridPaymaster, @@ -53,7 +53,6 @@ import { PaymasterUserOperationDto, SimulationType, BalancePayload, - WithdrawalRequest, SupportedToken, } from "./utils/Types.js"; import { diff --git a/packages/account/src/utils/Utils.ts b/packages/account/src/utils/Utils.ts index c590a99d1..4321c4bd9 100644 --- a/packages/account/src/utils/Utils.ts +++ b/packages/account/src/utils/Utils.ts @@ -88,8 +88,6 @@ export const isValidRpcUrl = (url: string): boolean => { return regex.test(url); }; -export const addressEquals = (a?: string, b?: string): boolean => !!a && !!b && a?.toLowerCase() === b.toLowerCase(); - /** * Utility method for converting a chainId to a {@link Chain} object * From 93186ade767dbc00bf7c8f5ccc3ef4d3e759357c Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Thu, 7 Mar 2024 10:31:17 +0000 Subject: [PATCH 1154/1247] Fix esm builds release prep lockfile --- .eslintrc.js | 12 +- packages/account/CHANGELOG.md | 6 + packages/account/package.json | 10 +- packages/account/src/utils/Constants.ts | 2 +- packages/account/src/utils/Utils.ts | 4 +- packages/account/src/utils/index.ts | 6 +- packages/bundler/CHANGELOG.md | 4 + packages/bundler/package.json | 4 +- packages/bundler/src/interfaces/IBundler.ts | 10 +- packages/common/package.json | 2 +- .../common/src/utils/Helpers/convertSigner.ts | 2 +- packages/modules/CHANGELOG.md | 4 + packages/modules/package.json | 8 +- .../modules/src/interfaces/ISessionStorage.ts | 2 +- .../session-storage/SessionLocalStorage.ts | 2 +- .../ERC20SessionValidationModule.ts | 2 +- packages/modules/src/utils/Types.ts | 2 +- packages/particle-auth/CHANGELOG.md | 4 + packages/particle-auth/package.json | 2 +- packages/paymaster/CHANGELOG.md | 4 + packages/paymaster/package.json | 4 +- .../paymaster/src/interfaces/IPaymaster.ts | 2 +- packages/transak/CHANGELOG.md | 4 + packages/transak/package.json | 2 +- yarn.lock | 132 +++++++++--------- 25 files changed, 139 insertions(+), 97 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index eb97a48dc..ce0d3c84a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,6 +1,13 @@ module.exports = { parser: "@typescript-eslint/parser", - extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended", "airbnb-typescript/base", "plugin:prettier/recommended"], + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "airbnb-typescript/base", + "plugin:import/typescript", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:prettier/recommended", + ], parserOptions: { ecmaVersion: 2020, sourceType: "module", @@ -23,11 +30,12 @@ module.exports = { "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }], "security/detect-object-injection": "warn", "security/detect-unsafe-regex": "error", - "import/extensions": "error", // Now we need to specify extensions for imports for esm builds "security/detect-object-injection": "off", // turning off Injection Sink rule "@typescript-eslint/no-throw-literal": "off", // temp deactivated needs to be removed once fixed "@typescript-eslint/ban-ts-ignore": "off", "@typescript-eslint/ban-ts-comment": "off", + "import/extensions": ["error", "ignorePackages"], + "import/no-unresolved": "off", }, settings: {}, overrides: [ diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md index 68152064a..59678fcca 100644 --- a/packages/account/CHANGELOG.md +++ b/packages/account/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.1.1 (2023-07-03) + +- Added missing extensions ([fdbec6](https://github.com/bcnmy/biconomy-client-sdk/pull/451/commits/fdbec68625f4d7f436dc39d4c1779cdbb7c53e6d)) +- Fixed issue reporting format ([815e9440](https://github.com/bcnmy/biconomy-client-sdk/pull/450/commits/815e9440db03ebae98bb24edfcb3bbcabf9b2a61)) + + ## 4.1.0 (2023-04-03) Features: diff --git a/packages/account/package.json b/packages/account/package.json index 9ab3da686..408ff4cef 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/account", - "version": "4.1.0", + "version": "4.1.1", "description": "This package provides apis for ERC-4337 based smart account implementations", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -68,10 +68,10 @@ }, "dependencies": { "@alchemy/aa-core": "^3.1.1", - "@biconomy/bundler": "^4.1.0", - "@biconomy/common": "^4.1.0", - "@biconomy/modules": "^4.1.0", - "@biconomy/paymaster": "^4.1.0", + "@biconomy/bundler": "^4.1.1", + "@biconomy/common": "^4.1.1", + "@biconomy/modules": "^4.1.1", + "@biconomy/paymaster": "^4.1.1", "viem": "^2.7.12" } } diff --git a/packages/account/src/utils/Constants.ts b/packages/account/src/utils/Constants.ts index 9ddfc7f0b..7954d0374 100644 --- a/packages/account/src/utils/Constants.ts +++ b/packages/account/src/utils/Constants.ts @@ -5,7 +5,7 @@ import { EntryPointAddressesByVersion, BiconomyFactoriesByVersion, BiconomyImplementationsByVersion, -} from "./Types"; +} from "./Types.js"; export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000"; diff --git a/packages/account/src/utils/Utils.ts b/packages/account/src/utils/Utils.ts index efd8e977c..7d18918b1 100644 --- a/packages/account/src/utils/Utils.ts +++ b/packages/account/src/utils/Utils.ts @@ -2,10 +2,10 @@ import { encodeAbiParameters, parseAbiParameters, keccak256, Hex, Chain } from " import type { UserOperationStruct } from "@alchemy/aa-core"; import { SupportedSigner, convertSigner } from "@biconomy/common"; import { extractChainIdFromBundlerUrl } from "@biconomy/bundler"; -import { BiconomySmartAccountV2Config } from "./Types"; +import { BiconomySmartAccountV2Config } from "./Types.js"; import { extractChainIdFromPaymasterUrl } from "@biconomy/bundler"; import * as chains from "viem/chains"; -import { ERROR_MESSAGES } from "./Constants"; +import { ERROR_MESSAGES } from "./Constants.js"; /** * pack the userOperation diff --git a/packages/account/src/utils/index.ts b/packages/account/src/utils/index.ts index 8d298755a..bc65ec9be 100644 --- a/packages/account/src/utils/index.ts +++ b/packages/account/src/utils/index.ts @@ -1,3 +1,3 @@ -export * from "./Types"; -export * from "./Utils"; -export * from "./Constants"; +export * from "./Types.js"; +export * from "./Utils.js"; +export * from "./Constants.js"; diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md index addb7650c..7730bad6b 100644 --- a/packages/bundler/CHANGELOG.md +++ b/packages/bundler/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.1.1 (2023-07-03) + +VERSION Bump Only. + ## 4.1.0 (2023-04-03) VERSION Bump Only. diff --git a/packages/bundler/package.json b/packages/bundler/package.json index 4eade66e2..a41dde75f 100644 --- a/packages/bundler/package.json +++ b/packages/bundler/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/bundler", - "version": "4.1.0", + "version": "4.1.1", "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -57,7 +57,7 @@ }, "dependencies": { "@alchemy/aa-core": "^3.1.1", - "@biconomy/common": "^4.1.0", + "@biconomy/common": "^4.1.1", "viem": "^2.7.12" }, "devDependencies": { diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts index 6ff6d4e63..75077e141 100644 --- a/packages/bundler/src/interfaces/IBundler.ts +++ b/packages/bundler/src/interfaces/IBundler.ts @@ -1,5 +1,13 @@ import { StateOverrideSet } from "@biconomy/common"; -import { UserOpResponse, UserOpGasResponse, UserOpReceipt, UserOpByHashResponse, UserOpStatus, SimulationType, GasFeeValues } from "../utils/Types"; +import { + UserOpResponse, + UserOpGasResponse, + UserOpReceipt, + UserOpByHashResponse, + UserOpStatus, + SimulationType, + GasFeeValues, +} from "../utils/Types.js"; import { UserOperationStruct } from "@alchemy/aa-core"; export interface IBundler { diff --git a/packages/common/package.json b/packages/common/package.json index f36d7c059..22010587c 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/common", - "version": "4.1.0", + "version": "4.1.1", "description": "common utils to be used for aa transactions", "keywords": [ "utils" diff --git a/packages/common/src/utils/Helpers/convertSigner.ts b/packages/common/src/utils/Helpers/convertSigner.ts index 23e9691dd..5aadb0803 100644 --- a/packages/common/src/utils/Helpers/convertSigner.ts +++ b/packages/common/src/utils/Helpers/convertSigner.ts @@ -1,5 +1,5 @@ import { EthersSigner } from "../EthersSigner.js"; -import { SupportedSigner } from "../Types"; +import { SupportedSigner } from "../Types.js"; import { WalletClient } from "viem"; import { WalletClientSigner, SmartAccountSigner } from "@alchemy/aa-core"; import { UNIQUE_PROPERTIES_PER_SIGNER } from "../Constants.js"; diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md index 29c3d6c3b..7c3d40af8 100644 --- a/packages/modules/CHANGELOG.md +++ b/packages/modules/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.1.1 (2023-07-03) + +VERSION Bump Only. + ## 4.1.0 (2023-04-03) VERSION Bump Only. diff --git a/packages/modules/package.json b/packages/modules/package.json index 222be7f4e..7d73de383 100644 --- a/packages/modules/package.json +++ b/packages/modules/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/modules", - "version": "4.1.0", + "version": "4.1.1", "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -54,7 +54,7 @@ }, "dependencies": { "@alchemy/aa-core": "^3.1.1", - "@biconomy/common": "^4.1.0", + "@biconomy/common": "^4.1.1", "@ethersproject/abi": "^5.7.0", "merkletreejs": "^0.3.11", "viem": "^2.7.12" @@ -64,7 +64,7 @@ "esbuild": "^0.19.11", "esbuild-plugin-tsc": "^0.4.0", "npm-dts": "^1.3.12", - "@biconomy/paymaster": "^4.1.0", - "@biconomy/modules": "^4.1.0" + "@biconomy/paymaster": "^4.1.1", + "@biconomy/modules": "^4.1.1" } } diff --git a/packages/modules/src/interfaces/ISessionStorage.ts b/packages/modules/src/interfaces/ISessionStorage.ts index da2f8e13e..41505fb1d 100644 --- a/packages/modules/src/interfaces/ISessionStorage.ts +++ b/packages/modules/src/interfaces/ISessionStorage.ts @@ -1,6 +1,6 @@ import { Hex } from "viem"; import { SmartAccountSigner } from "@alchemy/aa-core"; -import { SignerData } from "../utils/Types"; +import { SignerData } from "../utils/Types.js"; export type SessionStatus = "PENDING" | "ACTIVE" | "INACTIVE" | "EXPIRED"; diff --git a/packages/modules/src/session-storage/SessionLocalStorage.ts b/packages/modules/src/session-storage/SessionLocalStorage.ts index 28f3133a6..97a1d6953 100644 --- a/packages/modules/src/session-storage/SessionLocalStorage.ts +++ b/packages/modules/src/session-storage/SessionLocalStorage.ts @@ -3,7 +3,7 @@ import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage.js"; import { mainnet } from "viem/chains"; import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; -import { SignerData } from "../utils/Types"; +import { SignerData } from "../utils/Types.js"; export class SessionLocalStorage implements ISessionStorage { private smartAccountAddress: string; diff --git a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts index 131746a38..7791f1967 100644 --- a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts +++ b/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts @@ -1,5 +1,5 @@ import { ISessionValidationModule } from "../interfaces/ISessionValidationModule.js"; -import { ERC20SessionKeyData, SessionValidationModuleConfig } from "../utils/Types"; +import { ERC20SessionKeyData, SessionValidationModuleConfig } from "../utils/Types.js"; import { encodeAbiParameters, parseAbiParameters } from "viem"; /** diff --git a/packages/modules/src/utils/Types.ts b/packages/modules/src/utils/Types.ts index e55d5c8a5..68adf5194 100644 --- a/packages/modules/src/utils/Types.ts +++ b/packages/modules/src/utils/Types.ts @@ -1,6 +1,6 @@ import { Chain, Hex } from "viem"; import { SmartAccountSigner, UserOperationStruct } from "@alchemy/aa-core"; -import { SessionKeyManagerModule } from "../SessionKeyManagerModule"; +import { SessionKeyManagerModule } from "../SessionKeyManagerModule.js"; import { ISessionStorage } from "../interfaces/ISessionStorage.js"; import { SupportedSigner } from "@biconomy/common"; export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' diff --git a/packages/particle-auth/CHANGELOG.md b/packages/particle-auth/CHANGELOG.md index 2805153cc..9ebd16ef1 100644 --- a/packages/particle-auth/CHANGELOG.md +++ b/packages/particle-auth/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.1.1 (2023-07-03) + +VERSION Bump Only. + ## 4.1.0 (2023-04-03) VERSION Bump Only. diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json index b52766c2d..87f407661 100644 --- a/packages/particle-auth/package.json +++ b/packages/particle-auth/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/particle-auth", - "version": "4.1.0", + "version": "4.1.1", "description": "Particle auth for Biconomy SDK", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/packages/paymaster/CHANGELOG.md b/packages/paymaster/CHANGELOG.md index 3003cef25..f4db34b38 100644 --- a/packages/paymaster/CHANGELOG.md +++ b/packages/paymaster/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.1.1 (2023-07-03) + +VERSION Bump Only. + ## 4.1.0 (2023-04-03) VERSION Bump Only. diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json index 34f093113..2b6008747 100644 --- a/packages/paymaster/package.json +++ b/packages/paymaster/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/paymaster", - "version": "4.1.0", + "version": "4.1.1", "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -54,7 +54,7 @@ }, "dependencies": { "@alchemy/aa-core": "^3.1.1", - "@biconomy/common": "^4.1.0", + "@biconomy/common": "^4.1.1", "viem": "^2.7.12" }, "devDependencies": { diff --git a/packages/paymaster/src/interfaces/IPaymaster.ts b/packages/paymaster/src/interfaces/IPaymaster.ts index 0d95801a5..b9938797d 100644 --- a/packages/paymaster/src/interfaces/IPaymaster.ts +++ b/packages/paymaster/src/interfaces/IPaymaster.ts @@ -1,5 +1,5 @@ import { type UserOperationStruct } from "@alchemy/aa-core"; -import { PaymasterAndDataResponse } from "../utils/Types"; +import { PaymasterAndDataResponse } from "../utils/Types.js"; export interface IPaymaster { // Implementing class may add extra parameter (for example paymasterServiceData with it's own type) in below function signature diff --git a/packages/transak/CHANGELOG.md b/packages/transak/CHANGELOG.md index 552743755..4af2afc36 100644 --- a/packages/transak/CHANGELOG.md +++ b/packages/transak/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.1.1 (2023-07-03) + +VERSION Bump Only. + ## 4.1.0 (2023-04-03) VERSION Bump Only. diff --git a/packages/transak/package.json b/packages/transak/package.json index eedc20c21..4232ed243 100644 --- a/packages/transak/package.json +++ b/packages/transak/package.json @@ -1,6 +1,6 @@ { "name": "@biconomy/transak", - "version": "4.1.0", + "version": "4.1.1", "description": "transak for biconomy sdk", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/yarn.lock b/yarn.lock index 819d36e70..02caba64f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1251,65 +1251,65 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/edr-darwin-arm64@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.2.0.tgz#b208fe65f90f8113ad634482f7382f73e2189858" - integrity sha512-OfXruInMbc6+J6BnAlYlpTS8lj5hHmfLdzqthhiQaayuHxT6iBMrefe6N+2DC9hBxD3VjCApUWtLfV3pJzpbCg== +"@nomicfoundation/edr-darwin-arm64@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.2.1.tgz#10c1a07add192583ce8b2d4cc93439f52b390a41" + integrity sha512-aMYaRaZVQ/TmyNJIoXf1bU4k0zfinaL9Sy1day4yGlL6eiQPFfRGj9W6TZaZIoYG0XTx/mQWD7dkXJ7LdrleJA== -"@nomicfoundation/edr-darwin-x64@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.2.0.tgz#b7b0a285a7a004da7908d475fefb086eac1ae61f" - integrity sha512-tfNhHYSgro3nOTGCQzBvFniUy0cvUBtPCSeniNleu5M4nolArnxlZfEkNdpYRB92QRjfaREZttuBP1nrIO/b+w== +"@nomicfoundation/edr-darwin-x64@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.2.1.tgz#eaa29d2ba9f91ddb5f59b872c5a54f94a6fe3095" + integrity sha512-ma0SLcjHm5L3nPHcKFJB0jv/gKGSKaxr5Z65rurX/eaYUQJ7YGMsb8er9bSCo9rjzOtxf4FoPj3grL3zGpOj8A== -"@nomicfoundation/edr-linux-arm64-gnu@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.2.0.tgz#dfb9b8bf3718143b31e24b00e4f18f1aca0e1905" - integrity sha512-Km4rZIsARkiIR7HfpU6ybCkAHpD+Gg68x+5+dhQsv+eT3XvQ9pRv3jz14v3aimOjwpCd5/uUw9LhQrPtFyMGGA== +"@nomicfoundation/edr-linux-arm64-gnu@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.2.1.tgz#8149db0d742157405effe82d485ea9bfefddc795" + integrity sha512-NX3G4pBhRitWrjSGY3HTyCq3wKSm5YqrKVOCNQGl9/jcjSovqxlgzFMiTx4YZCzGntfJ/1om9AI84OWxYJjoDw== -"@nomicfoundation/edr-linux-arm64-musl@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.2.0.tgz#ac53bfaa4828922f300025955b51c92c98e40f12" - integrity sha512-pD4g2r5Q54b3AzEaI0okDktFrYjhcdCxO3lvP1pYGCvha8KYrUv9DM3Z/0kfnn3vP9y/PxzcJUBfXjG4NZuHpw== +"@nomicfoundation/edr-linux-arm64-musl@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.2.1.tgz#7d53afe5607eb406d199a199d00209a6304ff07b" + integrity sha512-gdQ3QHkt9XRkdtOGQ8fMwS11MXdjLeZgLrqoial4V4qtMaamIMMhVczK+VEvUhD8p7G4BVmp6kmkvcsthmndmw== -"@nomicfoundation/edr-linux-x64-gnu@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.2.0.tgz#dbab76c3dc53c4dcea502df302b8c7ee1ccf3d89" - integrity sha512-xjw8yNiEED0jlM5HuWXF/61+4bBkEpSZpMmb39XChPJXVxtZIIBzj0AcGTdzkSyH/atgkEaNutkEb1PeEuFwnQ== +"@nomicfoundation/edr-linux-x64-gnu@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.2.1.tgz#b762c95368fcb88bbbabba4d8be5380f38967413" + integrity sha512-OqabFY37vji6mYbLD9CvG28lja68czeVw58oWByIhFV3BpBu/cyP1oAbhzk3LieylujabS3Ekpvjw2Tkf0A9RQ== -"@nomicfoundation/edr-linux-x64-musl@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.2.0.tgz#31989fd1e9e548897d7843987e2bdef35d0c877c" - integrity sha512-aqqR0usfHt6V2j+7pQiMqIrIBpUwDeU27w27kuvZsHDUhrvg4sgGm3FBG1QUxN8tv9E/UrbUuW0kVt7tbEmKMA== +"@nomicfoundation/edr-linux-x64-musl@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.2.1.tgz#522448c42bff7d2abd52ddcf11ae6ca3dfdd6db4" + integrity sha512-vHfFFK2EPISuQUQge+bdjXamb0EUjfl8srYSog1qfiwyLwLeuSbpyyFzDeITAgPpkkFuedTfJW553K0Hipspyg== -"@nomicfoundation/edr-win32-arm64-msvc@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.2.0.tgz#6d028107064adc032af912268b9b55eb9dba7fd5" - integrity sha512-+S4Qnx5CVdUAxGUXa3rNq0h/qALIHkGdlKLT5KDsk/qGTmI/uuAB4tnoOaaHMc5ANckPtBdWfSwnLJjWPZbR6w== +"@nomicfoundation/edr-win32-arm64-msvc@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.2.1.tgz#ccfa443c274e49de93016a1060be810096dc6f1d" + integrity sha512-K/mui67RCKxghbSyvhvW3rvyVN1pa9M1Q9APUx1PtWjSSdXDFpqEY1NYsv2syb47Ca8ObJwVMF+LvnB6GvhUOQ== -"@nomicfoundation/edr-win32-ia32-msvc@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.2.0.tgz#570a504df4cb30197302435b89dc9a92b7dbf9fb" - integrity sha512-hK0RVcNog8sJ63QmeEJ+WIhnCLfUCl5jXYCBjQtGOWlIkC7EzNddkZ28MmrFOMrV3xstSGOmdPvvq8q1HNVakA== +"@nomicfoundation/edr-win32-ia32-msvc@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.2.1.tgz#822b19d3e67d6dcfa5394cb6a4d55d8bab1b2f26" + integrity sha512-HHK0mXEtjvfjJrJlqcYgQCy3lZIXS1KNl2GaP8bwEIuEwx++XxXs/ThLjPepM1nhCGICij8IGy7p3KrkzRelsw== -"@nomicfoundation/edr-win32-x64-msvc@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.2.0.tgz#90de20c19c4c20c7d69563b176d92425a8e8bb5a" - integrity sha512-gWgMU4I94fHIeda3xOnHBYcCOzRF6ySB89vgENK4Y1S1Un/qpZ+tQwf+/hX0HCaZGMw/LqBG61ltOYUXVfZ6Yg== +"@nomicfoundation/edr-win32-x64-msvc@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.2.1.tgz#7b56ff742b2724779cc9f3385815b394f76de8df" + integrity sha512-FY4eQJdj1/y8ST0RyQycx63yr+lvdYNnUkzgWf4X+vPH1lOhXae+L2NDcNCQlTDAfQcD6yz0bkBUkLrlJ8pTww== "@nomicfoundation/edr@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.2.0.tgz#dfdecce6382f9faf640d937357418825a10c5483" - integrity sha512-RRWJepP4ozI4jVxqNtuw53ZbPcUB4FcKry2aYVQw8KAp9o8j/I5H3SsfpmKT+lgHRSL/5/KK0RxOx1GQSyDAZw== + version "0.2.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.2.1.tgz#a3d2a542dcd5dc5a8d757116d52baea05f370531" + integrity sha512-Dleau3ItHJh2n85G2J6AIPBoLgu/mOWkmrh26z3VsJE2tp/e00hUk/dqz85ncsVcBYEc6/YOn/DomWu0wSF9tQ== optionalDependencies: - "@nomicfoundation/edr-darwin-arm64" "0.2.0" - "@nomicfoundation/edr-darwin-x64" "0.2.0" - "@nomicfoundation/edr-linux-arm64-gnu" "0.2.0" - "@nomicfoundation/edr-linux-arm64-musl" "0.2.0" - "@nomicfoundation/edr-linux-x64-gnu" "0.2.0" - "@nomicfoundation/edr-linux-x64-musl" "0.2.0" - "@nomicfoundation/edr-win32-arm64-msvc" "0.2.0" - "@nomicfoundation/edr-win32-ia32-msvc" "0.2.0" - "@nomicfoundation/edr-win32-x64-msvc" "0.2.0" + "@nomicfoundation/edr-darwin-arm64" "0.2.1" + "@nomicfoundation/edr-darwin-x64" "0.2.1" + "@nomicfoundation/edr-linux-arm64-gnu" "0.2.1" + "@nomicfoundation/edr-linux-arm64-musl" "0.2.1" + "@nomicfoundation/edr-linux-x64-gnu" "0.2.1" + "@nomicfoundation/edr-linux-x64-musl" "0.2.1" + "@nomicfoundation/edr-win32-arm64-msvc" "0.2.1" + "@nomicfoundation/edr-win32-ia32-msvc" "0.2.1" + "@nomicfoundation/edr-win32-x64-msvc" "0.2.1" "@nomicfoundation/ethereumjs-common@4.0.4": version "4.0.4" @@ -2111,9 +2111,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.24" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792" - integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long== + version "20.11.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f" + integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw== dependencies: undici-types "~5.26.4" @@ -3060,9 +3060,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001594" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001594.tgz#bea552414cd52c2d0c985ed9206314a696e685f5" - integrity sha512-VblSX6nYqyJVs8DKFMldE2IVCJjZ225LW00ydtUWwh5hk9IfkTOffO6r8gJNsH0qqqeAF8KrbMYA2VEwTlGW5g== + version "1.0.30001596" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz#da06b79c3d9c3d9958eb307aa832ac68ead79bee" + integrity sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ== catering@^2.0.0, catering@^2.1.0: version "2.1.1" @@ -3765,9 +3765,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.692" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.692.tgz#82139d20585a4b2318a02066af7593a3e6bec993" - integrity sha512-d5rZRka9n2Y3MkWRN74IoAsxR0HK3yaAt7T50e3iT9VZmCCQDT3geXUO5ZRMhDToa1pkCeQXuNo+0g+NfDOVPA== + version "1.4.695" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.695.tgz#1753f4017e8d7e72a1ce5058c0fc66c8b67bab8e" + integrity sha512-eMijZmeqPtm774pCZIOrfUHMs/7ls++W1sLhxwqgu8KQ8E2WmMtzwyqOMt0XXUJ3HTIPfuwlfwF+I5cwnfItBA== elliptic@6.5.4: version "6.5.4" @@ -9110,9 +9110,9 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typedoc@^0.25.7: - version "0.25.10" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.10.tgz#572f566498e4752fdbc793ccc14b8eb517944770" - integrity sha512-v10rtOFojrjW9og3T+6wAKeJaGMuojU87DXGZ33sfs+554wgPTRG+s07Ag1BjPZI85Y5QPVouPI63JQ6fcQM5w== + version "0.25.11" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.11.tgz#75080c594c1e26b7676f90faebb367fb5a32dc8d" + integrity sha512-5MbI1W/FOG6oXsd8bdssQidSTeKh8Kt3xA5uKVzI+K99uzP8EGN45uPnPvQesyaWdD+89s4wCQdtWEd8QUbiRg== dependencies: lunr "^2.3.9" marked "^4.3.0" @@ -9120,9 +9120,9 @@ typedoc@^0.25.7: shiki "^0.14.7" "typescript@>=3 < 6", typescript@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + version "5.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" + integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== uglify-js@^3.1.4: version "3.17.4" @@ -9324,9 +9324,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.7.12, viem@^2.7.8: - version "2.7.19" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.19.tgz#fa6bd8f46df2f0332e5ca6d116772dff6f161a72" - integrity sha512-UOMeqy+8p2709ra2j9HEOL1NfjsXZzlJ8gwR6YO/zXH8KIZvyzW07t4iQARF5+ShVZ/7+/1ec8oPjVi1M//33A== + version "2.7.20" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.20.tgz#c0d517c3ce5a19b963d624b378d706bd3c45efc6" + integrity sha512-S31a24LWEjqXAjw1A+3/xALo+4eiYKklAjLtlLdPhA0cp+Kv6GcgruNVTktP8pKIGNYvpyQ+HA9PJyUhVXPdDw== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" From f256712bbf7dc0de40b82c70ad183c59bf5f39f9 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Wed, 13 Mar 2024 11:01:16 +0200 Subject: [PATCH 1155/1247] Fix wrong falsy check for user op nonce (#455) * fixed issue with wrong falsy value check * updated yarn.lock --------- Co-authored-by: GabiDev <gv@popoo.io> --- .../account/src/BiconomySmartAccountV2.ts | 2 +- yarn.lock | 92 +++++++++---------- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 3aa81a4e2..16ff648b6 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -574,7 +574,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { validateUserOp(userOp: Partial<UserOperationStruct>, requiredFields: UserOperationKey[]): boolean { for (const field of requiredFields) { - if (!userOp[field]) { + if (isNullOrUndefined(userOp[field])) { throw new Error(`${String(field)} is missing in the UserOp`); } } diff --git a/yarn.lock b/yarn.lock index 02caba64f..a4e0e28a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,9 +13,9 @@ integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== "@alchemy/aa-core@^3.1.1": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.4.0.tgz#08e514bf2f97a9c1452424a7f7915aa48daf4db2" - integrity sha512-kEqsMwweMxQU6b8mKNmkUacyZRxdU7WBBiAYNmGxJK5djOdsGlfCBZGHu2AyAb8ogfrGWX8J+uVuYTnCIZS6ew== + version "3.4.2" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.4.2.tgz#3bb3e508bb29586a29c5a025056f11c474bcee19" + integrity sha512-oPE8iUT/38S0hEfthtauIcidQq1kyN/t1VGpq5JSEFanFs6uV8UFyjjj9heO4UnA1uJDiVbvY6A5NZcM92j8RA== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" @@ -2111,9 +2111,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.25" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f" - integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw== + version "20.11.26" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.26.tgz#3fbda536e51d5c79281e1d9657dcb0131baabd2d" + integrity sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ== dependencies: undici-types "~5.26.4" @@ -2646,7 +2646,7 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: +available-typed-arrays@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== @@ -3060,9 +3060,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001596" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz#da06b79c3d9c3d9958eb307aa832ac68ead79bee" - integrity sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ== + version "1.0.30001597" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz#8be94a8c1d679de23b22fbd944232aa1321639e6" + integrity sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w== catering@^2.0.0, catering@^2.1.0: version "2.1.1" @@ -3628,7 +3628,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: +define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -3765,9 +3765,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.695" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.695.tgz#1753f4017e8d7e72a1ce5058c0fc66c8b67bab8e" - integrity sha512-eMijZmeqPtm774pCZIOrfUHMs/7ls++W1sLhxwqgu8KQ8E2WmMtzwyqOMt0XXUJ3HTIPfuwlfwF+I5cwnfItBA== + version "1.4.701" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.701.tgz#7335e5761331774b4dea54cd24a1b84861d45cdf" + integrity sha512-K3WPQ36bUOtXg/1+69bFlFOvdSm0/0bGqmsfPDLRXLanoKXdA+pIWuf/VbA9b+2CwBFuONgl4NEz4OEm+OJOKA== elliptic@6.5.4: version "6.5.4" @@ -4705,7 +4705,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -5062,7 +5062,7 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== @@ -5079,7 +5079,7 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -5109,9 +5109,9 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: minimalistic-assert "^1.0.1" hasown@^2.0.0, hasown@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" - integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" @@ -8185,12 +8185,12 @@ rxjs@^7.5.5, rxjs@^7.8.1: tslib "^2.1.0" safe-array-concat@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" - integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" has-symbols "^1.0.3" isarray "^2.0.5" @@ -8288,16 +8288,16 @@ set-blocking@^2.0.0: integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== set-function-length@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" - integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.1.2" + define-data-property "^1.1.4" es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.3" + get-intrinsic "^1.2.4" gopd "^1.0.1" - has-property-descriptors "^1.0.1" + has-property-descriptors "^1.0.2" set-function-name@^2.0.1: version "2.0.2" @@ -8923,9 +8923,9 @@ triple-beam@^1.3.0: integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== ts-api-utils@^1.0.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" - integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== ts-jest@^29.1.1: version "29.1.2" @@ -9110,9 +9110,9 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typedoc@^0.25.7: - version "0.25.11" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.11.tgz#75080c594c1e26b7676f90faebb367fb5a32dc8d" - integrity sha512-5MbI1W/FOG6oXsd8bdssQidSTeKh8Kt3xA5uKVzI+K99uzP8EGN45uPnPvQesyaWdD+89s4wCQdtWEd8QUbiRg== + version "0.25.12" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.12.tgz#f73f0a8d3731d418cc604d4230f95a857799e27a" + integrity sha512-F+qhkK2VoTweDXd1c42GS/By2DvI2uDF4/EpG424dTexSHdtCH52C6IcAvMA6jR3DzAWZjHpUOW+E02kyPNUNw== dependencies: lunr "^2.3.9" marked "^4.3.0" @@ -9324,9 +9324,9 @@ validate-npm-package-name@^3.0.0: builtins "^1.0.3" viem@^2.7.12, viem@^2.7.8: - version "2.7.20" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.20.tgz#c0d517c3ce5a19b963d624b378d706bd3c45efc6" - integrity sha512-S31a24LWEjqXAjw1A+3/xALo+4eiYKklAjLtlLdPhA0cp+Kv6GcgruNVTktP8pKIGNYvpyQ+HA9PJyUhVXPdDw== + version "2.8.4" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.8.4.tgz#553996181d2d22237e31476218178d3fe96e2e3d" + integrity sha512-zBC8+YNKzo+XeUsCyXdrFzimH9Ei/nRfUKldPmVRoR/lR56/sqkDPyfCE1yvzwwmA9AJ9m9m2HtSPgl9NiTReA== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" @@ -9400,15 +9400,15 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-typed-array@^1.1.14: - version "1.1.14" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" - integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== dependencies: - available-typed-arrays "^1.0.6" - call-bind "^1.0.5" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.1" + has-tostringtag "^1.0.2" which@^1.2.10, which@^1.2.14: version "1.3.1" From 412597388db78aa33270403cdb2e9b6f87a65aa5 Mon Sep 17 00:00:00 2001 From: himanshugarg06 <garg91824@gmail.com> Date: Tue, 19 Mar 2024 23:39:07 +0530 Subject: [PATCH 1156/1247] update docs link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5409568b0..b58116402 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ const { - **Paymaster Service**: Enable third-party gas sponsorship. - **Bundler Infrastructure**: Ensure efficient and reliable transaction bundling. -For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick start [here](https://docs.biconomy.io/quickstart). +For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io). You can also start with Quick start [here](https://docs.biconomy.io/quickstart). ## 📚 Resources From fd832fe2e286a5d3e57d3292cfa395e388b07b96 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Wed, 3 Apr 2024 19:44:11 +0300 Subject: [PATCH 1157/1247] added 1271 support + tests --- .../account/src/BiconomySmartAccountV2.ts | 9 + packages/account/src/abi/SmartAccount.ts | 908 ++++-------------- packages/account/tests/account.e2e.spec.ts | 115 ++- .../account/tests/account.read.e2e.spec.ts | 14 +- packages/account/tests/account.spec.ts | 3 +- yarn.lock | 621 ++++++------ 6 files changed, 622 insertions(+), 1048 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 16ff648b6..a2499fbb3 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -1283,9 +1283,18 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { if (signature.slice(0, 2) !== "0x") { signature = "0x" + signature; } + signature = encodeAbiParameters(parseAbiParameters("bytes, address"), [signature as Hex, this.defaultValidationModule.getAddress()]); return signature as Hex; } + async getIsValidSignatureData(messageHash: Hex, signature: Hex): Promise<Hex> { + return encodeFunctionData({ + abi: BiconomyAccountAbi, + functionName: "isValidSignature", + args: [messageHash, signature], + }); + } + async enableModule(moduleAddress: Hex): Promise<UserOpResponse> { const tx: Transaction = await this.getEnableModuleData(moduleAddress); const partialUserOp = await this.buildUserOp([tx]); diff --git a/packages/account/src/abi/SmartAccount.ts b/packages/account/src/abi/SmartAccount.ts index 3542c17d1..73eb8fb91 100644 --- a/packages/account/src/abi/SmartAccount.ts +++ b/packages/account/src/abi/SmartAccount.ts @@ -1,321 +1,109 @@ export const BiconomyAccountAbi = [ - { - inputs: [], - name: "AlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "BaseImplementationCannotBeZero", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotAnEntryPoint", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotEntryPoint", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotEntryPointOrOwner", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotEntryPointOrSelf", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "CallerIsNotOwner", - type: "error", - }, - { - inputs: [], - name: "DelegateCallsOnly", - type: "error", - }, - { - inputs: [], - name: "EntryPointCannotBeZero", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "implementationAddress", - type: "address", - }, - ], - name: "InvalidImplementation", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "caller", - type: "address", - }, - ], - name: "MixedAuthFail", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ModuleAlreadyEnabled", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "expectedModule", - type: "address", - }, - { - internalType: "address", - name: "returnedModule", - type: "address", - }, - { - internalType: "address", - name: "prevModule", - type: "address", - }, + { inputs: [{ internalType: "contract IEntryPoint", name: "anEntryPoint", type: "address" }], stateMutability: "nonpayable", type: "constructor" }, + { inputs: [], name: "AlreadyInitialized", type: "error" }, + { inputs: [], name: "BaseImplementationCannotBeZero", type: "error" }, + { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "CallerIsNotAnEntryPoint", type: "error" }, + { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "CallerIsNotEntryPoint", type: "error" }, + { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "CallerIsNotEntryPointOrOwner", type: "error" }, + { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "CallerIsNotEntryPointOrSelf", type: "error" }, + { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "CallerIsNotOwner", type: "error" }, + { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "CallerIsNotSelf", type: "error" }, + { inputs: [], name: "DelegateCallsOnly", type: "error" }, + { inputs: [], name: "EntryPointCannotBeZero", type: "error" }, + { inputs: [], name: "HandlerCannotBeZero", type: "error" }, + { inputs: [{ internalType: "address", name: "implementationAddress", type: "address" }], name: "InvalidImplementation", type: "error" }, + { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "MixedAuthFail", type: "error" }, + { inputs: [{ internalType: "address", name: "module", type: "address" }], name: "ModuleAlreadyEnabled", type: "error" }, + { + inputs: [ + { internalType: "address", name: "expectedModule", type: "address" }, + { internalType: "address", name: "returnedModule", type: "address" }, + { internalType: "address", name: "prevModule", type: "address" }, ], name: "ModuleAndPrevModuleMismatch", type: "error", }, + { inputs: [{ internalType: "address", name: "module", type: "address" }], name: "ModuleCannotBeZeroOrSentinel", type: "error" }, + { inputs: [{ internalType: "address", name: "module", type: "address" }], name: "ModuleNotEnabled", type: "error" }, + { inputs: [], name: "ModulesAlreadyInitialized", type: "error" }, + { inputs: [], name: "ModulesSetupExecutionFailed", type: "error" }, + { inputs: [], name: "OwnerCanNotBeSelf", type: "error" }, + { inputs: [], name: "OwnerCannotBeZero", type: "error" }, + { inputs: [], name: "OwnerProvidedIsSame", type: "error" }, + { inputs: [], name: "TransferToZeroAddressAttempt", type: "error" }, { inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ModuleCannotBeZeroOrSentinel", - type: "error", - }, - { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ModuleNotEnabled", - type: "error", - }, - { - inputs: [], - name: "ModulesAlreadyInitialized", - type: "error", - }, - { - inputs: [], - name: "ModulesSetupExecutionFailed", - type: "error", - }, - { - inputs: [], - name: "OwnerCanNotBeSelf", - type: "error", - }, - { - inputs: [], - name: "OwnerCannotBeZero", - type: "error", - }, - { - inputs: [], - name: "OwnerProvidedIsSame", - type: "error", - }, - { - inputs: [], - name: "TransferToZeroAddressAttempt", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "destLength", - type: "uint256", - }, - { - internalType: "uint256", - name: "valueLength", - type: "uint256", - }, - { - internalType: "uint256", - name: "funcLength", - type: "uint256", - }, - { - internalType: "uint256", - name: "operationLength", - type: "uint256", - }, + { internalType: "uint256", name: "destLength", type: "uint256" }, + { internalType: "uint256", name: "valueLength", type: "uint256" }, + { internalType: "uint256", name: "funcLength", type: "uint256" }, + { internalType: "uint256", name: "operationLength", type: "uint256" }, ], name: "WrongBatchProvided", type: "error", }, + { inputs: [{ internalType: "bytes", name: "contractSignature", type: "bytes" }], name: "WrongContractSignature", type: "error" }, { inputs: [ - { - internalType: "bytes", - name: "contractSignature", - type: "bytes", - }, - ], - name: "WrongContractSignature", - type: "error", - }, - { - inputs: [ - { - internalType: "uint256", - name: "uintS", - type: "uint256", - }, - { - internalType: "uint256", - name: "contractSignatureLength", - type: "uint256", - }, - { - internalType: "uint256", - name: "signatureLength", - type: "uint256", - }, + { internalType: "uint256", name: "uintS", type: "uint256" }, + { internalType: "uint256", name: "contractSignatureLength", type: "uint256" }, + { internalType: "uint256", name: "signatureLength", type: "uint256" }, ], name: "WrongContractSignatureFormat", type: "error", }, + { inputs: [{ internalType: "address", name: "moduleAddressProvided", type: "address" }], name: "WrongValidationModule", type: "error" }, { + anonymous: false, inputs: [ - { - internalType: "address", - name: "moduleAddressProvided", - type: "address", - }, + { indexed: true, internalType: "address", name: "previousHandler", type: "address" }, + { indexed: true, internalType: "address", name: "handler", type: "address" }, ], - name: "WrongValidationModule", - type: "error", + name: "ChangedFallbackHandler", + type: "event", }, + { anonymous: false, inputs: [{ indexed: false, internalType: "address", name: "module", type: "address" }], name: "DisabledModule", type: "event" }, + { anonymous: false, inputs: [{ indexed: false, internalType: "address", name: "module", type: "address" }], name: "EnabledModule", type: "event" }, { anonymous: false, inputs: [ - { - indexed: false, - internalType: "address", - name: "module", - type: "address", - }, + { indexed: true, internalType: "address", name: "to", type: "address" }, + { indexed: true, internalType: "uint256", name: "value", type: "uint256" }, + { indexed: true, internalType: "bytes", name: "data", type: "bytes" }, + { indexed: false, internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, + { indexed: false, internalType: "uint256", name: "txGas", type: "uint256" }, ], - name: "DisabledModule", + name: "ExecutionFailure", type: "event", }, { anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "EnabledModule", + inputs: [{ indexed: true, internalType: "address", name: "module", type: "address" }], + name: "ExecutionFromModuleFailure", type: "event", }, { anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "module", - type: "address", - }, - ], - name: "ExecutionFromModuleFailure", + inputs: [{ indexed: true, internalType: "address", name: "module", type: "address" }], + name: "ExecutionFromModuleSuccess", type: "event", }, { anonymous: false, inputs: [ - { - indexed: true, - internalType: "address", - name: "module", - type: "address", - }, + { indexed: true, internalType: "address", name: "to", type: "address" }, + { indexed: true, internalType: "uint256", name: "value", type: "uint256" }, + { indexed: true, internalType: "bytes", name: "data", type: "bytes" }, + { indexed: false, internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, + { indexed: false, internalType: "uint256", name: "txGas", type: "uint256" }, ], - name: "ExecutionFromModuleSuccess", + name: "ExecutionSuccess", type: "event", }, { anonymous: false, inputs: [ - { - indexed: true, - internalType: "address", - name: "oldImplementation", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address", - }, + { indexed: true, internalType: "address", name: "oldImplementation", type: "address" }, + { indexed: true, internalType: "address", name: "newImplementation", type: "address" }, ], name: "ImplementationUpdated", type: "event", @@ -323,36 +111,11 @@ export const BiconomyAccountAbi = [ { anonymous: false, inputs: [ - { - indexed: false, - internalType: "address", - name: "module", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, + { indexed: false, internalType: "address", name: "module", type: "address" }, + { indexed: false, internalType: "address", name: "to", type: "address" }, + { indexed: false, internalType: "uint256", name: "value", type: "uint256" }, + { indexed: false, internalType: "bytes", name: "data", type: "bytes" }, + { indexed: false, internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, ], name: "ModuleTransaction", type: "event", @@ -360,54 +123,19 @@ export const BiconomyAccountAbi = [ { anonymous: false, inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "value", - type: "uint256", - }, + { indexed: true, internalType: "address", name: "sender", type: "address" }, + { indexed: true, internalType: "uint256", name: "value", type: "uint256" }, ], name: "SmartAccountReceivedNativeToken", type: "event", }, - { - inputs: [], - name: "VERSION", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "addDeposit", - outputs: [], - stateMutability: "payable", - type: "function", - }, + { stateMutability: "nonpayable", type: "fallback" }, + { inputs: [], name: "VERSION", outputs: [{ internalType: "string", name: "", type: "string" }], stateMutability: "view", type: "function" }, + { inputs: [], name: "addDeposit", outputs: [], stateMutability: "payable", type: "function" }, { inputs: [ - { - internalType: "address", - name: "prevModule", - type: "address", - }, - { - internalType: "address", - name: "module", - type: "address", - }, + { internalType: "address", name: "prevModule", type: "address" }, + { internalType: "address", name: "module", type: "address" }, ], name: "disableModule", outputs: [], @@ -415,13 +143,7 @@ export const BiconomyAccountAbi = [ type: "function", }, { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], + inputs: [{ internalType: "address", name: "module", type: "address" }], name: "enableModule", outputs: [], stateMutability: "nonpayable", @@ -430,179 +152,67 @@ export const BiconomyAccountAbi = [ { inputs: [], name: "entryPoint", - outputs: [ - { - internalType: "contract IEntryPoint", - name: "", - type: "address", - }, - ], + outputs: [{ internalType: "contract IEntryPoint", name: "", type: "address" }], stateMutability: "view", type: "function", }, { inputs: [ - { - internalType: "address[]", - name: "to", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "value", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "data", - type: "bytes[]", - }, - { - internalType: "enum Enum.Operation[]", - name: "operations", - type: "uint8[]", - }, + { internalType: "address[]", name: "to", type: "address[]" }, + { internalType: "uint256[]", name: "value", type: "uint256[]" }, + { internalType: "bytes[]", name: "data", type: "bytes[]" }, + { internalType: "enum Enum.Operation[]", name: "operations", type: "uint8[]" }, ], name: "execBatchTransactionFromModule", - outputs: [ - { - internalType: "bool", - name: "success", - type: "bool", - }, - ], + outputs: [{ internalType: "bool", name: "success", type: "bool" }], stateMutability: "nonpayable", type: "function", }, { inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, - { - internalType: "uint256", - name: "txGas", - type: "uint256", - }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + { internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, + { internalType: "uint256", name: "txGas", type: "uint256" }, ], name: "execTransactionFromModule", - outputs: [ - { - internalType: "bool", - name: "success", - type: "bool", - }, - ], + outputs: [{ internalType: "bool", name: "success", type: "bool" }], stateMutability: "nonpayable", type: "function", }, { inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + { internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, ], name: "execTransactionFromModule", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], + outputs: [{ internalType: "bool", name: "", type: "bool" }], stateMutability: "nonpayable", type: "function", }, { inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8", - }, + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + { internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, ], name: "execTransactionFromModuleReturnData", outputs: [ - { - internalType: "bool", - name: "success", - type: "bool", - }, - { - internalType: "bytes", - name: "returnData", - type: "bytes", - }, + { internalType: "bool", name: "success", type: "bool" }, + { internalType: "bytes", name: "returnData", type: "bytes" }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ - { - internalType: "address", - name: "dest", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "func", - type: "bytes", - }, + { internalType: "address", name: "dest", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "func", type: "bytes" }, ], name: "execute", outputs: [], @@ -611,21 +221,9 @@ export const BiconomyAccountAbi = [ }, { inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "value", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]", - }, + { internalType: "address[]", name: "dest", type: "address[]" }, + { internalType: "uint256[]", name: "value", type: "uint256[]" }, + { internalType: "bytes[]", name: "func", type: "bytes[]" }, ], name: "executeBatch", outputs: [], @@ -634,21 +232,9 @@ export const BiconomyAccountAbi = [ }, { inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "value", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]", - }, + { internalType: "address[]", name: "dest", type: "address[]" }, + { internalType: "uint256[]", name: "value", type: "uint256[]" }, + { internalType: "bytes[]", name: "func", type: "bytes[]" }, ], name: "executeBatch_y6U", outputs: [], @@ -657,181 +243,118 @@ export const BiconomyAccountAbi = [ }, { inputs: [ - { - internalType: "address", - name: "dest", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "func", - type: "bytes", - }, + { internalType: "address", name: "dest", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "func", type: "bytes" }, ], name: "execute_ncC", outputs: [], stateMutability: "nonpayable", type: "function", }, + { inputs: [], name: "getDeposit", outputs: [{ internalType: "uint256", name: "", type: "uint256" }], stateMutability: "view", type: "function" }, { inputs: [], - name: "getDeposit", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], + name: "getFallbackHandler", + outputs: [{ internalType: "address", name: "_handler", type: "address" }], stateMutability: "view", type: "function", }, { inputs: [], name: "getImplementation", - outputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - ], + outputs: [{ internalType: "address", name: "_implementation", type: "address" }], stateMutability: "view", type: "function", }, { inputs: [ - { - internalType: "address", - name: "start", - type: "address", - }, - { - internalType: "uint256", - name: "pageSize", - type: "uint256", - }, + { internalType: "address", name: "start", type: "address" }, + { internalType: "uint256", name: "pageSize", type: "uint256" }, ], name: "getModulesPaginated", outputs: [ - { - internalType: "address[]", - name: "array", - type: "address[]", - }, - { - internalType: "address", - name: "next", - type: "address", - }, + { internalType: "address[]", name: "array", type: "address[]" }, + { internalType: "address", name: "next", type: "address" }, ], stateMutability: "view", type: "function", }, { inputs: [ - { - internalType: "address", - name: "handler", - type: "address", - }, - { - internalType: "address", - name: "moduleSetupContract", - type: "address", - }, - { - internalType: "bytes", - name: "moduleSetupData", - type: "bytes", - }, + { internalType: "address", name: "handler", type: "address" }, + { internalType: "address", name: "moduleSetupContract", type: "address" }, + { internalType: "bytes", name: "moduleSetupData", type: "bytes" }, ], name: "init", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], + outputs: [{ internalType: "address", name: "", type: "address" }], stateMutability: "nonpayable", type: "function", }, { - inputs: [ - { - internalType: "address", - name: "module", - type: "address", - }, - ], + inputs: [{ internalType: "address", name: "module", type: "address" }], name: "isModuleEnabled", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], + outputs: [{ internalType: "bool", name: "", type: "bool" }], stateMutability: "view", type: "function", }, { inputs: [ - { - internalType: "uint192", - name: "_key", - type: "uint192", - }, + { internalType: "bytes32", name: "dataHash", type: "bytes32" }, + { internalType: "bytes", name: "signature", type: "bytes" }, ], + name: "isValidSignature", + outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [{ internalType: "uint192", name: "_key", type: "uint192" }], name: "nonce", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [{ internalType: "uint256", name: "", type: "uint256" }], + name: "noncesDeprecated", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "ownerDeprecated", + outputs: [{ internalType: "address", name: "", type: "address" }], stateMutability: "view", type: "function", }, + { + inputs: [{ internalType: "address", name: "handler", type: "address" }], + name: "setFallbackHandler", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [ - { - internalType: "address", - name: "setupContract", - type: "address", - }, - { - internalType: "bytes", - name: "setupData", - type: "bytes", - }, + { internalType: "address", name: "setupContract", type: "address" }, + { internalType: "bytes", name: "setupData", type: "bytes" }, ], name: "setupAndEnableModule", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], + outputs: [{ internalType: "address", name: "", type: "address" }], stateMutability: "nonpayable", type: "function", }, { - inputs: [ - { - internalType: "address", - name: "_implementation", - type: "address", - }, - ], + inputs: [{ internalType: "bytes4", name: "_interfaceId", type: "bytes4" }], + name: "supportsInterface", + outputs: [{ internalType: "bool", name: "", type: "bool" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [{ internalType: "address", name: "_implementation", type: "address" }], name: "updateImplementation", outputs: [], stateMutability: "nonpayable", @@ -841,104 +364,39 @@ export const BiconomyAccountAbi = [ inputs: [ { components: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes", - }, - { - internalType: "bytes", - name: "callData", - type: "bytes", - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256", - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256", - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256", - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes", - }, - { - internalType: "bytes", - name: "signature", - type: "bytes", - }, + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, + { internalType: "uint256", name: "callGasLimit", type: "uint256" }, + { internalType: "uint256", name: "verificationGasLimit", type: "uint256" }, + { internalType: "uint256", name: "preVerificationGas", type: "uint256" }, + { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, + { internalType: "uint256", name: "maxPriorityFeePerGas", type: "uint256" }, + { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, + { internalType: "bytes", name: "signature", type: "bytes" }, ], internalType: "struct UserOperation", name: "userOp", type: "tuple", }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32", - }, - { - internalType: "uint256", - name: "missingAccountFunds", - type: "uint256", - }, + { internalType: "bytes32", name: "userOpHash", type: "bytes32" }, + { internalType: "uint256", name: "missingAccountFunds", type: "uint256" }, ], name: "validateUserOp", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], + outputs: [{ internalType: "uint256", name: "validationData", type: "uint256" }], stateMutability: "nonpayable", type: "function", }, { inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, + { internalType: "address payable", name: "withdrawAddress", type: "address" }, + { internalType: "uint256", name: "amount", type: "uint256" }, ], name: "withdrawDepositTo", outputs: [], stateMutability: "payable", type: "function", }, + { stateMutability: "payable", type: "receive" }, ] as const; diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 82f9649f1..21a0f44a5 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -1,19 +1,19 @@ import { TestData } from "../../../tests"; -import { createSmartAccountClient, ERROR_MESSAGES, FeeQuotesOrDataResponse, NATIVE_TOKEN_ALIAS, PaymasterMode } from "../src/index"; -import { Hex, createWalletClient, encodeFunctionData, getContract, http, parseAbi } from "viem"; +import { createSmartAccountClient, ERROR_MESSAGES, FeeQuotesOrDataResponse, PaymasterMode } from "../src/index"; +import { Hex, createWalletClient, encodeAbiParameters, encodeFunctionData, getContract, hashMessage, http, parseAbi, parseAbiParameters } from "viem"; import { UserOperationStruct } from "@alchemy/aa-core"; import { checkBalance, entryPointABI } from "../../../tests/utils"; import { ERC20_ABI } from "@biconomy/modules"; -import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { privateKeyToAccount, generatePrivateKey, signMessage } from "viem/accounts"; +import { BiconomyAccountAbi } from "../src/abi/SmartAccount"; describe("Account Tests", () => { - let mumbai: TestData; let baseSepolia: TestData; let optimism: TestData; beforeEach(() => { // @ts-ignore: Comes from setup-e2e-tests - [mumbai, baseSepolia, optimism] = testDataPerChain; + [baseSepolia, baseSepolia, optimism] = testDataPerChain; }); it("should have addresses", async () => { @@ -21,7 +21,7 @@ describe("Account Tests", () => { whale: { viemWallet: signer, publicAddress: sender }, minnow: { viemWallet: recipientSigner, publicAddress: recipient }, bundlerUrl, - } = mumbai; + } = baseSepolia; const { whale: { viemWallet: signerBase, publicAddress: senderBase }, @@ -88,7 +88,7 @@ describe("Account Tests", () => { minnow: { publicAddress: recipient }, bundlerUrl, publicClient, - } = mumbai; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -118,7 +118,7 @@ describe("Account Tests", () => { whale: { viemWallet: signer }, bundlerUrl, paymasterUrl, - } = mumbai; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -135,10 +135,10 @@ describe("Account Tests", () => { const { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, - paymasterUrl, publicClient, + paymasterUrl, nftAddress, - } = mumbai; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -185,8 +185,8 @@ describe("Account Tests", () => { whale: { viemWallet: signer, publicAddress: recipient }, bundlerUrl, nftAddress, - publicClient - } = mumbai; + publicClient, + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -244,7 +244,7 @@ describe("Account Tests", () => { bundlerUrl, biconomyPaymasterApiKey, nftAddress, - } = mumbai; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -276,7 +276,7 @@ describe("Account Tests", () => { paymasterUrl, publicClient, nftAddress, - } = mumbai; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -373,7 +373,7 @@ describe("Account Tests", () => { bundlerUrl, biconomyPaymasterApiKey, nftAddress, - } = mumbai; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -417,7 +417,7 @@ describe("Account Tests", () => { entryPointAddress, publicClient, paymasterUrl, - } = mumbai; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -457,7 +457,7 @@ describe("Account Tests", () => { bundlerUrl, publicClient, paymasterUrl, - } = mumbai; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -478,7 +478,7 @@ describe("Account Tests", () => { whale: { viemWallet: signer }, bundlerUrl, viemChain, - } = mumbai; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -492,7 +492,7 @@ describe("Account Tests", () => { it("Should throw, chain id from signer and bundlerUrl do not match", async () => { const { whale: { viemWallet: signer }, - } = mumbai; + } = baseSepolia; const createAccount = createSmartAccountClient({ signer, @@ -505,7 +505,7 @@ describe("Account Tests", () => { it("Should throw, chain id from paymasterUrl and bundlerUrl do not match", async () => { const { whale: { viemWallet: signer }, - } = mumbai; + } = baseSepolia; const createAccount = createSmartAccountClient({ signer, @@ -521,9 +521,9 @@ describe("Account Tests", () => { biconomyPaymasterApiKey, viemChain, publicClient, - whale: { viemWallet: signer, publicAddress, account }, + whale: { viemWallet: signer, account }, deploymentCost, - } = mumbai; + } = baseSepolia; const newPrivateKey = generatePrivateKey(); const newAccount = privateKeyToAccount(newPrivateKey); @@ -557,7 +557,7 @@ describe("Account Tests", () => { }, 60000); it("should deploy a smart account with sponsorship", async () => { - const { bundlerUrl, biconomyPaymasterApiKey, viemChain, publicClient } = mumbai; + const { bundlerUrl, biconomyPaymasterApiKey, viemChain, publicClient } = baseSepolia; const newPrivateKey = generatePrivateKey(); const newAccount = privateKeyToAccount(newPrivateKey); @@ -589,7 +589,7 @@ describe("Account Tests", () => { }, 60000); it("should fail to deploy a smart account if no native token balance or paymaster", async () => { - const { bundlerUrl, biconomyPaymasterApiKey, viemChain } = mumbai; + const { bundlerUrl, biconomyPaymasterApiKey, viemChain } = baseSepolia; const newPrivateKey = generatePrivateKey(); const newAccount = privateKeyToAccount(newPrivateKey); @@ -614,7 +614,7 @@ describe("Account Tests", () => { whale: { viemWallet: signer }, bundlerUrl, biconomyPaymasterApiKey, - } = mumbai; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -637,7 +637,7 @@ describe("Account Tests", () => { whale: { viemWallet: signer }, bundlerUrl, biconomyPaymasterApiKey, - } = mumbai; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -655,7 +655,7 @@ describe("Account Tests", () => { bundlerUrl, publicClient, biconomyPaymasterApiKey, - } = mumbai; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -668,4 +668,65 @@ describe("Account Tests", () => { expect(usdcBalanceBefore).toBe(usdtBalanceFromSmartAccount.amount); }); + + it("should verify a correct signature through isValidSignature", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + publicClient, + } = baseSepolia; + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const eip1271MagicValue = "0x1626ba7e"; + const message = "Some message from dApp"; + const messageHash = hashMessage(message); + const signature = await smartAccount.signMessage(messageHash); + + const response = await publicClient.readContract({ + address: await smartAccount.getAccountAddress(), + abi: BiconomyAccountAbi, + functionName: "isValidSignature", + args: [messageHash, signature], + }); + + expect(response).toBe(eip1271MagicValue); + }); + + it("should throw an error if signature is not valid", async () => { + const { + whale: { viemWallet: signer }, + bundlerUrl, + publicClient, + } = baseSepolia; + + const randomPrivKey = generatePrivateKey(); + const randomWallet = privateKeyToAccount(randomPrivKey); + + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + }); + + const eip1271MagicValue = "0xffffffff"; + const message = "Some message from dApp"; + const messageHash = hashMessage(message); + const signature = await randomWallet.signMessage({ message: messageHash }); + const signatureWithModuleAddress = encodeAbiParameters(parseAbiParameters("bytes, address"), [ + signature, + smartAccount.defaultValidationModule.getAddress(), + ]); + + const response = await publicClient.readContract({ + address: await smartAccount.getAccountAddress(), + abi: BiconomyAccountAbi, + functionName: "isValidSignature", + args: [messageHash, signatureWithModuleAddress], + }); + + expect(response).toBe(eip1271MagicValue); + }); }); diff --git a/packages/account/tests/account.read.e2e.spec.ts b/packages/account/tests/account.read.e2e.spec.ts index 80abf9d21..32af9dc26 100644 --- a/packages/account/tests/account.read.e2e.spec.ts +++ b/packages/account/tests/account.read.e2e.spec.ts @@ -3,18 +3,18 @@ import { createSmartAccountClient } from "../src/index"; import { DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE, createECDSAOwnershipValidationModule } from "@biconomy/modules"; describe("Account Tests", () => { - let mumbai: TestData; + let baseSepolia: TestData; beforeEach(() => { // @ts-ignore: Comes from setup-e2e-tests - [mumbai] = testDataPerChain; + [baseSepolia] = testDataPerChain; }); it("should check if module is enabled on the smart account", async () => { const { whale: { viemWallet: signer }, bundlerUrl, - } = mumbai; + } = baseSepolia; const smartWallet = await createSmartAccountClient({ signer, @@ -33,7 +33,7 @@ describe("Account Tests", () => { }, bundlerUrl, biconomyPaymasterApiKey, - } = mumbai; + } = baseSepolia; const smartAccount = await createSmartAccountClient({ signer, @@ -51,7 +51,7 @@ describe("Account Tests", () => { const { whale: { viemWallet: signer }, bundlerUrl, - } = mumbai; + } = baseSepolia; const smartWallet = await createSmartAccountClient({ signer, @@ -66,7 +66,7 @@ describe("Account Tests", () => { const { whale: { viemWallet: signer }, bundlerUrl, - } = mumbai; + } = baseSepolia; const smartWallet = await createSmartAccountClient({ signer, @@ -83,7 +83,7 @@ describe("Account Tests", () => { const { whale: { viemWallet: signer }, bundlerUrl, - } = mumbai; + } = baseSepolia; const smartWallet = await createSmartAccountClient({ signer, diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts index 42cc90355..9e76f2f89 100644 --- a/packages/account/tests/account.spec.ts +++ b/packages/account/tests/account.spec.ts @@ -1,4 +1,4 @@ -import { Bundler, Paymaster, createBundler, createSmartAccountClient } from "../src"; +import { Paymaster, createBundler, createSmartAccountClient } from "../src"; import { Chain, createWalletClient, http } from "viem"; import { localhost } from "viem/chains"; import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; @@ -32,7 +32,6 @@ describe("Account Tests", () => { it("should create a whale smartAccountClient from an ethers signer", async () => { const { - bundlerUrl, whale: { ethersSigner: signer }, } = ganache; diff --git a/yarn.lock b/yarn.lock index a4e0e28a9..6224f5ea9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,13 +13,13 @@ integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== "@alchemy/aa-core@^3.1.1": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.4.2.tgz#3bb3e508bb29586a29c5a025056f11c474bcee19" - integrity sha512-oPE8iUT/38S0hEfthtauIcidQq1kyN/t1VGpq5JSEFanFs6uV8UFyjjj9heO4UnA1uJDiVbvY6A5NZcM92j8RA== + version "3.6.1" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.6.1.tgz#af718313276458910d06030ee0aa946168e442f9" + integrity sha512-WVDacDuXcuePTHQSlKZ0nZvRHNSB48iUhh7fVSqchiStjq7BybdGg35AZf8eg5vcepkwSHekNKCp5LxKwpFCQg== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" - viem "^2.7.8" + viem "^2.8.6" zod "^3.22.4" "@ampproject/remapping@^2.2.0": @@ -30,33 +30,33 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" "@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.1.tgz#31c1f66435f2a9c329bb5716a6d6186c516c3742" + integrity sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" - integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.3.tgz#568864247ea10fbd4eff04dda1e05f9e2ea985c3" + integrity sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.1" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.0" - "@babel/parser" "^7.24.0" + "@babel/helpers" "^7.24.1" + "@babel/parser" "^7.24.1" "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" + "@babel/traverse" "^7.24.1" "@babel/types" "^7.24.0" convert-source-map "^2.0.0" debug "^4.1.0" @@ -64,14 +64,14 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== +"@babel/generator@^7.24.1", "@babel/generator@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.1.tgz#e67e06f68568a4ebf194d1c6014235344f0476d0" + integrity sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A== dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" + "@babel/types" "^7.24.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" "@babel/helper-compilation-targets@^7.23.6": @@ -106,11 +106,11 @@ "@babel/types" "^7.22.5" "@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.24.0" "@babel/helper-module-transforms@^7.23.3": version "7.23.3" @@ -123,7 +123,7 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== @@ -143,9 +143,9 @@ "@babel/types" "^7.22.5" "@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" @@ -157,28 +157,29 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" - integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== +"@babel/helpers@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.1.tgz#183e44714b9eba36c3038e442516587b1e0a1a94" + integrity sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg== dependencies: "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" + "@babel/traverse" "^7.24.1" "@babel/types" "^7.24.0" -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== +"@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" - integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.1.tgz#1e416d3627393fab1cb5b0f2f1796a100ae9133a" + integrity sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -216,11 +217,11 @@ "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" + integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -272,16 +273,16 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" + integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/runtime@^7.21.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" - integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.1.tgz#431f9a794d173b53720e69a6464abc6f0e2a5c57" + integrity sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ== dependencies: regenerator-runtime "^0.14.0" @@ -294,23 +295,23 @@ "@babel/parser" "^7.24.0" "@babel/types" "^7.24.0" -"@babel/traverse@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" - integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== +"@babel/traverse@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" + integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" + "@babel/code-frame" "^7.24.1" + "@babel/generator" "^7.24.1" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.0" + "@babel/parser" "^7.24.1" "@babel/types" "^7.24.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.3.3": +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.3.3": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== @@ -836,9 +837,9 @@ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" - integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@hutson/parse-repository-url@^3.0.0": version "3.0.2" @@ -1065,7 +1066,7 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== @@ -1097,7 +1098,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -1251,65 +1252,65 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/edr-darwin-arm64@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.2.1.tgz#10c1a07add192583ce8b2d4cc93439f52b390a41" - integrity sha512-aMYaRaZVQ/TmyNJIoXf1bU4k0zfinaL9Sy1day4yGlL6eiQPFfRGj9W6TZaZIoYG0XTx/mQWD7dkXJ7LdrleJA== +"@nomicfoundation/edr-darwin-arm64@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.3.3.tgz#0618dbdf1c832f8e61c77540e7188c13fdd5b658" + integrity sha512-E9VGsUD+1Ga4mn/5ooHsMi8JEfhZbKP6CXN/BhJ8kXbIC10NqTD1RuhCKGRtYq4vqH/3Nfq25Xg8E8RWOF4KBQ== -"@nomicfoundation/edr-darwin-x64@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.2.1.tgz#eaa29d2ba9f91ddb5f59b872c5a54f94a6fe3095" - integrity sha512-ma0SLcjHm5L3nPHcKFJB0jv/gKGSKaxr5Z65rurX/eaYUQJ7YGMsb8er9bSCo9rjzOtxf4FoPj3grL3zGpOj8A== +"@nomicfoundation/edr-darwin-x64@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.3.3.tgz#567ee0bca8d019085e8dd95330e7c03f16c66a79" + integrity sha512-vkZXZ1ydPg+Ijb2iyqENA+KCkxGTCUWG5itCSliiA0Li2YE7ujDMGhheEpFp1WVlZadviz0bfk1rZXbCqlirpg== -"@nomicfoundation/edr-linux-arm64-gnu@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.2.1.tgz#8149db0d742157405effe82d485ea9bfefddc795" - integrity sha512-NX3G4pBhRitWrjSGY3HTyCq3wKSm5YqrKVOCNQGl9/jcjSovqxlgzFMiTx4YZCzGntfJ/1om9AI84OWxYJjoDw== +"@nomicfoundation/edr-linux-arm64-gnu@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.3.3.tgz#3956b4d7a0127e2259351626c92698c4ce6ecf05" + integrity sha512-gdIg0Yj1qqS9wVuywc5B/+DqKylfUGB6/CQn/shMqwAfsAVAVpchkhy66PR+REEx7fh/GkNctxLlENXPeLzDiA== -"@nomicfoundation/edr-linux-arm64-musl@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.2.1.tgz#7d53afe5607eb406d199a199d00209a6304ff07b" - integrity sha512-gdQ3QHkt9XRkdtOGQ8fMwS11MXdjLeZgLrqoial4V4qtMaamIMMhVczK+VEvUhD8p7G4BVmp6kmkvcsthmndmw== +"@nomicfoundation/edr-linux-arm64-musl@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.3.3.tgz#139f801939ed467f1719a2ab014993838008eefb" + integrity sha512-AXZ08MFvhNeBZbOBNmz1SJ/DMrMOE2mHEJtaNnsctlxIunjxfrWww4q+WXB34jbr9iaVYYlPsaWe5sueuw6s3Q== -"@nomicfoundation/edr-linux-x64-gnu@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.2.1.tgz#b762c95368fcb88bbbabba4d8be5380f38967413" - integrity sha512-OqabFY37vji6mYbLD9CvG28lja68czeVw58oWByIhFV3BpBu/cyP1oAbhzk3LieylujabS3Ekpvjw2Tkf0A9RQ== +"@nomicfoundation/edr-linux-x64-gnu@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.3.3.tgz#b5994caa1a8bb4afca5f079ad7dd99edb26c6c45" + integrity sha512-xElOs1U+E6lBLtv1mnJ+E8nr2MxZgKiLo8bZAgBboy9odYtmkDVwhMjtsFKSuZbGxFtsSyGRT4cXw3JAbtUDeA== -"@nomicfoundation/edr-linux-x64-musl@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.2.1.tgz#522448c42bff7d2abd52ddcf11ae6ca3dfdd6db4" - integrity sha512-vHfFFK2EPISuQUQge+bdjXamb0EUjfl8srYSog1qfiwyLwLeuSbpyyFzDeITAgPpkkFuedTfJW553K0Hipspyg== +"@nomicfoundation/edr-linux-x64-musl@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.3.3.tgz#536c1d1dfd2fc7d7ad6ed6e14ed9a12322d88ba6" + integrity sha512-2Fe6gwm1RAGQ/PfMYiaSba2OrFp8zzYWh+am9lYObOFjV9D+A1zhIzfy0UC74glPks5eV8eY4pBPrVR042m2Nw== -"@nomicfoundation/edr-win32-arm64-msvc@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.2.1.tgz#ccfa443c274e49de93016a1060be810096dc6f1d" - integrity sha512-K/mui67RCKxghbSyvhvW3rvyVN1pa9M1Q9APUx1PtWjSSdXDFpqEY1NYsv2syb47Ca8ObJwVMF+LvnB6GvhUOQ== +"@nomicfoundation/edr-win32-arm64-msvc@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.3.3.tgz#f71609644d8585c2ec71580bf75c2fd036ee58b0" + integrity sha512-8NHyxIsFrl0ufSQ/ErqF2lKIa/gz1gaaa1a2vKkDEqvqCUcPhBTYhA5NHgTPhLETFTnCFr0z+YbctFCyjh4qrA== -"@nomicfoundation/edr-win32-ia32-msvc@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.2.1.tgz#822b19d3e67d6dcfa5394cb6a4d55d8bab1b2f26" - integrity sha512-HHK0mXEtjvfjJrJlqcYgQCy3lZIXS1KNl2GaP8bwEIuEwx++XxXs/ThLjPepM1nhCGICij8IGy7p3KrkzRelsw== +"@nomicfoundation/edr-win32-ia32-msvc@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.3.3.tgz#baa5eaacb1fff107d02f0e6a33dee9521fd2bf37" + integrity sha512-0F6hM0kGia4dQVb/kauho9JcP1ozWisY2/She+ISR5ceuhzmAwQJluM0g+0TYDME0LtxBxiMPq/yPiZMQeq31w== -"@nomicfoundation/edr-win32-x64-msvc@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.2.1.tgz#7b56ff742b2724779cc9f3385815b394f76de8df" - integrity sha512-FY4eQJdj1/y8ST0RyQycx63yr+lvdYNnUkzgWf4X+vPH1lOhXae+L2NDcNCQlTDAfQcD6yz0bkBUkLrlJ8pTww== +"@nomicfoundation/edr-win32-x64-msvc@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.3.3.tgz#7562e061b2481f87bb1ace30513a2ad38c469836" + integrity sha512-d75q1uaMb6z9i+GQZoblbOfFBvlBnWc+5rB13UWRkCOJSnoYwyFWhGJx5GeM59gC7aIblc5VD9qOAhHuvM9N+w== -"@nomicfoundation/edr@^0.2.0": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.2.1.tgz#a3d2a542dcd5dc5a8d757116d52baea05f370531" - integrity sha512-Dleau3ItHJh2n85G2J6AIPBoLgu/mOWkmrh26z3VsJE2tp/e00hUk/dqz85ncsVcBYEc6/YOn/DomWu0wSF9tQ== +"@nomicfoundation/edr@^0.3.1": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.3.3.tgz#0ed8619ea2ac644bf87cdc09dd1a8f465a859bcc" + integrity sha512-zP+e+3B1nEUx6bW5BPnIzCQbkhmYfdMBJdiVggTqqTfAA82sOkdOG7wsOMcz5qF3fYfx/irNRM1kgc9HVFIbpQ== optionalDependencies: - "@nomicfoundation/edr-darwin-arm64" "0.2.1" - "@nomicfoundation/edr-darwin-x64" "0.2.1" - "@nomicfoundation/edr-linux-arm64-gnu" "0.2.1" - "@nomicfoundation/edr-linux-arm64-musl" "0.2.1" - "@nomicfoundation/edr-linux-x64-gnu" "0.2.1" - "@nomicfoundation/edr-linux-x64-musl" "0.2.1" - "@nomicfoundation/edr-win32-arm64-msvc" "0.2.1" - "@nomicfoundation/edr-win32-ia32-msvc" "0.2.1" - "@nomicfoundation/edr-win32-x64-msvc" "0.2.1" + "@nomicfoundation/edr-darwin-arm64" "0.3.3" + "@nomicfoundation/edr-darwin-x64" "0.3.3" + "@nomicfoundation/edr-linux-arm64-gnu" "0.3.3" + "@nomicfoundation/edr-linux-arm64-musl" "0.3.3" + "@nomicfoundation/edr-linux-x64-gnu" "0.3.3" + "@nomicfoundation/edr-linux-x64-musl" "0.3.3" + "@nomicfoundation/edr-win32-arm64-msvc" "0.3.3" + "@nomicfoundation/edr-win32-ia32-msvc" "0.3.3" + "@nomicfoundation/edr-win32-x64-msvc" "0.3.3" "@nomicfoundation/ethereumjs-common@4.0.4": version "4.0.4" @@ -1721,9 +1722,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.21" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.21.tgz#82d2b098e165fc198e6e6e3e4c8b2154235e3aa1" - integrity sha512-tuUVuOPf+el+kDlHLFMyDy4IkoGjk+P3QvVrxT7WnmEma1NgWTE7RaNsniwqn6SYkAwAxksL/D9aADUXZxqPmw== + version "1.3.27" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.27.tgz#dca4f2714d23957cc68cb1301de1f310895658db" + integrity sha512-+my+i0jqZjUoP+mNXxsPc2D7o3Cijl6uRvvWyTT0DmpyK1P+9yFpUuhEHUVmZMriTGKXv6synner16CD8/AkpQ== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -1753,9 +1754,9 @@ integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== "@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" - integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== + version "1.1.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" + integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== "@scure/bip32@1.1.5": version "1.1.5" @@ -1960,9 +1961,9 @@ utf-8-validate "6.0.3" "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" @@ -2111,9 +2112,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.26" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.26.tgz#3fbda536e51d5c79281e1d9657dcb0131baabd2d" - integrity sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ== + version "20.12.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.3.tgz#d6658c2c7776c1cad93534bb45428195ed840c65" + integrity sha512-sD+ia2ubTeWrOu+YMF+MTAB7E+O7qsMqAbMfW7DG3K1URwhZ5hN1pLlRVGbf4wDFzSfikL05M17EyorS86jShw== dependencies: undici-types "~5.26.4" @@ -2529,14 +2530,15 @@ array-ify@^1.0.0: integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== 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== + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" is-string "^1.0.7" array-union@^1.0.1: @@ -2556,26 +2558,16 @@ array-uniq@^1.0.1: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== -array.prototype.filter@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" - integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - array.prototype.findlastindex@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" - integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" + es-abstract "^1.23.2" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.2: @@ -2654,11 +2646,11 @@ available-typed-arrays@^1.0.7: possible-typed-array-names "^1.0.0" axios@^1.0.0, axios@^1.3.6: - version "1.6.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" - integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + version "1.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== dependencies: - follow-redirects "^1.15.4" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -2755,9 +2747,9 @@ bignumber.js@^9.0.1: integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bl@^4.0.3, bl@^4.1.0: version "4.1.0" @@ -3060,9 +3052,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001597" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz#8be94a8c1d679de23b22fbd944232aa1321639e6" - integrity sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w== + version "1.0.30001605" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz#ca12d7330dd8bcb784557eb9aa64f0037870d9d6" + integrity sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ== catering@^2.0.0, catering@^2.1.0: version "2.1.1" @@ -3552,6 +3544,33 @@ dargs@^7.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + date-fns@^2.30.0: version "2.30.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" @@ -3765,9 +3784,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.701" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.701.tgz#7335e5761331774b4dea54cd24a1b84861d45cdf" - integrity sha512-K3WPQ36bUOtXg/1+69bFlFOvdSm0/0bGqmsfPDLRXLanoKXdA+pIWuf/VbA9b+2CwBFuONgl4NEz4OEm+OJOKA== + version "1.4.724" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.724.tgz#e0a86fe4d3d0e05a4d7b032549d79608078f830d" + integrity sha512-RTRvkmRkGhNBPPpdrgtDKvmOEYTrPlXDfc0J/Nfq5s29tEahAwhiX4mmhNzj6febWMleulxVYPh7QwCSL/EldA== elliptic@6.5.4: version "6.5.4" @@ -3876,17 +3895,21 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" - integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== dependencies: array-buffer-byte-length "^1.0.1" arraybuffer.prototype.slice "^1.0.3" available-typed-arrays "^1.0.7" call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" es-define-property "^1.0.0" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" @@ -3897,10 +3920,11 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: has-property-descriptors "^1.0.2" has-proto "^1.0.3" has-symbols "^1.0.3" - hasown "^2.0.1" + hasown "^2.0.2" internal-slot "^1.0.7" is-array-buffer "^3.0.4" is-callable "^1.2.7" + is-data-view "^1.0.1" is-negative-zero "^2.0.3" is-regex "^1.1.4" is-shared-array-buffer "^1.0.3" @@ -3911,22 +3935,17 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: object-keys "^1.1.1" object.assign "^4.1.5" regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.0" + safe-array-concat "^1.1.2" safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" typed-array-buffer "^1.0.2" typed-array-byte-length "^1.0.1" typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.5" + typed-array-length "^1.0.6" unbox-primitive "^1.0.2" - which-typed-array "^1.1.14" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + which-typed-array "^1.1.15" es-define-property@^1.0.0: version "1.0.0" @@ -3935,11 +3954,18 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" @@ -4543,10 +4569,10 @@ fn.name@1.x.x: resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== -follow-redirects@^1.12.1, follow-redirects@^1.15.4: - version "1.15.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" - integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== +follow-redirects@^1.12.1, follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== for-each@^0.3.3: version "0.3.3" @@ -4870,15 +4896,15 @@ glob@8.1.0, glob@^8.0.1: once "^1.3.0" glob@^10.2.2, glob@^10.3.7: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + version "10.3.12" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" + integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== dependencies: foreground-child "^3.1.0" - jackspeak "^2.3.5" + jackspeak "^2.3.6" minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + minipass "^7.0.4" + path-scurry "^1.10.2" glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: version "7.2.3" @@ -4999,13 +5025,13 @@ hard-rejection@^2.1.0: integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== hardhat@^2.17.3: - version "2.21.0" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.21.0.tgz#2e23126310a6c77cd7e149e6af1dd67626b7a74f" - integrity sha512-8DlJAVJDEVHaV1sh9FLuKLLgCFv9EAJ+M+8IbjSIPgoeNo3ss5L1HgGBMfnI88c7OzMEZkdcuyGoobFeK3Orqw== + version "2.22.2" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.2.tgz#0cadd7ec93bf39bab09f81603e75bc5e92acea3d" + integrity sha512-0xZ7MdCZ5sJem4MrvpQWLR3R3zGDoHw5lsR+pBFimqwagimIOn3bWuZv69KA+veXClwI1s/zpqgwPwiFrd4Dxw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/edr" "^0.2.0" + "@nomicfoundation/edr" "^0.3.1" "@nomicfoundation/ethereumjs-common" "4.0.4" "@nomicfoundation/ethereumjs-tx" "5.0.4" "@nomicfoundation/ethereumjs-util" "9.0.4" @@ -5108,7 +5134,7 @@ 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, hasown@^2.0.1: +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -5440,6 +5466,13 @@ is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0, is-core-m dependencies: hasown "^2.0.0" +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + 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" @@ -5700,7 +5733,7 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jackspeak@^2.3.5: +jackspeak@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== @@ -6505,7 +6538,7 @@ logform@^2.3.2, logform@^2.4.0: safe-stable-stringify "^2.3.1" triple-beam "^1.3.0" -lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": +lru-cache@^10.0.1, lru-cache@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== @@ -6769,7 +6802,7 @@ minimatch@5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: +minimatch@9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== @@ -6797,6 +6830,13 @@ minimatch@^8.0.2: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -6897,7 +6937,7 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3, minipass@^7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== @@ -6923,9 +6963,9 @@ mnemonist@^0.38.0: obliterator "^2.0.0" mocha@^10.0.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" - integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== + version "10.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261" + integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== dependencies: ansi-colors "4.1.1" browser-stdout "1.3.1" @@ -6989,7 +7029,7 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mute-stream@~1.0.0: +mute-stream@^1.0.0, mute-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== @@ -7373,42 +7413,41 @@ object.assign@^4.1.2, object.assign@^4.1.5: object-keys "^1.1.1" object.entries@^1.1.5: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" 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== + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.groupby@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" - integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - array.prototype.filter "^1.0.3" - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" + es-abstract "^1.23.2" 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== + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" obliterator@^2.0.0: version "2.0.4" @@ -7695,12 +7734,12 @@ path-parse@^1.0.6, path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1, path-scurry@^1.6.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== +path-scurry@^1.10.2, path-scurry@^1.6.1: + version "1.10.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== dependencies: - lru-cache "^9.1.1 || ^10.0.0" + lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-type@^3.0.0: @@ -7848,11 +7887,11 @@ prompts@^2.0.1: sisteransi "^1.0.5" promzard@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" - integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== + version "1.0.1" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.1.tgz#3b77251a24f988c0886f5649d4f642bcdd53e558" + integrity sha512-ulDF77aULEHUoJkN5XZgRV5loHXBaqd9eorMvLNLvi2gXMuRAtwH6Gh4zsMHQY1kTt7tyv/YZwZW5C2gtj8F2A== dependencies: - read "^2.0.0" + read "^3.0.1" propagate@^2.0.0: version "2.0.1" @@ -7880,9 +7919,9 @@ punycode@^2.1.0: integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pure-rand@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" - integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== + version "6.1.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== query-string@^8.1.0: version "8.2.0" @@ -7991,6 +8030,13 @@ read@^2.0.0: dependencies: mute-stream "~1.0.0" +read@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/read/-/read-3.0.1.tgz#926808f0f7c83fa95f1ef33c0e2c09dbb28fd192" + integrity sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw== + dependencies: + mute-stream "^1.0.0" + readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -8184,7 +8230,7 @@ rxjs@^7.5.5, rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-array-concat@^1.1.0: +safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== @@ -8614,32 +8660,33 @@ string-width@^5.0.1, string-width@^5.1.2: 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== +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" -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== +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -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== +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string_decoder@^1.1.1: version "1.3.0" @@ -8782,9 +8829,9 @@ tar@6.1.11: yallist "^4.0.0" tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -9092,10 +9139,10 @@ typed-array-byte-offset@^1.0.2: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-length@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" - integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== dependencies: call-bind "^1.0.7" for-each "^0.3.3" @@ -9120,9 +9167,9 @@ typedoc@^0.25.7: shiki "^0.14.7" "typescript@>=3 < 6", typescript@^5.3.3: - version "5.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" - integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== + version "5.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" + integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== uglify-js@^3.1.4: version "3.17.4" @@ -9145,9 +9192,9 @@ undici-types@~5.26.4: integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== undici@^5.14.0: - version "5.28.3" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" - integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== dependencies: "@fastify/busboy" "^2.0.0" @@ -9323,10 +9370,10 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -viem@^2.7.12, viem@^2.7.8: - version "2.8.4" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.8.4.tgz#553996181d2d22237e31476218178d3fe96e2e3d" - integrity sha512-zBC8+YNKzo+XeUsCyXdrFzimH9Ei/nRfUKldPmVRoR/lR56/sqkDPyfCE1yvzwwmA9AJ9m9m2HtSPgl9NiTReA== +viem@^2.7.12, viem@^2.8.6: + version "2.9.8" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.9.8.tgz#15288cc5332292617786d21db0aa3571db29c4c9" + integrity sha512-vetoTZ6UF2okS/1I0+1p/QYdC4yA6uf4PeWwTBp3kD5wC6eQcmeh7zP+unNdnYHGGC63x7BTGldK1ep2IFVKcQ== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" @@ -9399,7 +9446,7 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.14: +which-typed-array@^1.1.14, which-typed-array@^1.1.15: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== From 28422f19bfe48dd79954e53a22757eb7f92f92c8 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Wed, 3 Apr 2024 18:07:26 +0100 Subject: [PATCH 1158/1247] continued --- .../account/src/BiconomySmartAccountV2.ts | 103 +++++++++++++++++- 1 file changed, 102 insertions(+), 1 deletion(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index f8c5e86bd..25172e003 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -26,7 +26,7 @@ import { BatchUserOperationCallData, SmartAccountSigner, } from "@alchemy/aa-core"; -import { isNullOrUndefined, isValidRpcUrl, packUserOp, compareChainIds } from "./utils/Utils.js"; +import { isNullOrUndefined, isValidRpcUrl, packUserOp, compareChainIds, addressEquals } from "./utils/Utils.js"; import { BaseValidationModule, ModuleInfo, SendUserOpParams, createECDSAOwnershipValidationModule } from "@biconomy/modules"; import { IHybridPaymaster, @@ -54,6 +54,7 @@ import { SimulationType, BalancePayload, SupportedToken, + WithdrawalRequest, } from "./utils/Types.js"; import { ADDRESS_RESOLVER_ADDRESS, @@ -359,6 +360,106 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return result; } + /** + * Transfers funds from Smart Account to recipient (usually EOA) + * @param recipient - Address of the recipient + * @param withdrawalRequests - Array of withdrawal requests {@link WithdrawalRequest}. If withdrawal request is an empty array, it will transfer the balance of the native token. Using a paymaster will ensure no dust remains in the smart account. + * @param buildUseropDto - Optional. {@link BuildUserOpOptions} + * + * @returns Promise<UserOpResponse> - An object containing the status of the transaction. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient, NATIVE_TOKEN_ALIAS } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const USDT = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); + * + * const { wait } = await smartAccount.withdraw( + * [ + * { address: USDT, amount: BigInt(1) }, + * { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } + * ], + * account.pubKey, // Default recipient used if no recipient is present in the withdrawal request + * { + * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + * } + * ); + * + * // OR to withdraw all of the native token, leaving no dust in the smart account + * + * const { wait } = await smartAccount.withdraw([], account.pubKey, { + * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + * }); + * + * const { success } = await wait(); + */ + public async withdraw( + withdrawalRequests?: WithdrawalRequest[] | null, + defaultRecipient?: Hex | null, + buildUseropDto?: BuildUserOpOptions, + ): Promise<UserOpResponse> { + const accountAddress = this.accountAddress ?? (await this.getAccountAddress()); + + if (!defaultRecipient && withdrawalRequests?.some(({ recipient }) => !recipient)) { + throw new Error(ERROR_MESSAGES.NO_RECIPIENT); + } + + // Remove the native token from the withdrawal requests + let tokenRequests = withdrawalRequests?.filter(({ address }) => !addressEquals(address, NATIVE_TOKEN_ALIAS)) ?? []; + + // Check if the amount is not present in all withdrawal requests + const shouldFetchMaxBalances = tokenRequests.some(({ amount }) => !amount); + + // Get the balances of the tokens if the amount is not present in the withdrawal requests + if (shouldFetchMaxBalances) { + const balances = await this.getBalances(tokenRequests.map(({ address }) => address)); + tokenRequests = tokenRequests.map(({ amount, address }, i) => ({ + address, + amount: amount ?? balances[i].amount, + })); + } + + // Create the transactions + const txs: Transaction[] = tokenRequests.map(({ address, amount, recipient: recipientFromRequest }) => ({ + to: address, + data: encodeFunctionData({ + abi: parseAbi(ERC20_ABI), + functionName: "transfer", + args: [recipientFromRequest || defaultRecipient, amount], + }), + })); + + // Check if eth alias is present in the original withdrawal requests + const nativeTokenRequest = withdrawalRequests?.find(({ address }) => addressEquals(address, NATIVE_TOKEN_ALIAS)); + const hasNoRequests = !withdrawalRequests?.length; + if (!!nativeTokenRequest || hasNoRequests) { + // Check that an amount is present in the withdrawal request, if no paymaster service data is present, as max amounts cannot be calculated without a paymaster. + if (!nativeTokenRequest?.amount && !buildUseropDto?.paymasterServiceData?.mode) { + throw new Error(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT); + } + + // get eth balance if not present in withdrawal requests + const nativeTokenAmountToWithdraw = nativeTokenRequest?.amount ?? (await this.provider.getBalance({ address: accountAddress })); + + txs.push({ + to: (nativeTokenRequest?.recipient ?? defaultRecipient) as Hex, + value: nativeTokenAmountToWithdraw, + }); + } + + return this.sendTransaction(txs, buildUseropDto); + } + + /** * Return the account's address. This value is valid even before deploying the contract. */ From 079def2f16e5494ee45af171f744784aecf5a85a Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Wed, 3 Apr 2024 18:08:58 +0100 Subject: [PATCH 1159/1247] lint:fix --- .../account/src/BiconomySmartAccountV2.ts | 193 +++++++++--------- 1 file changed, 96 insertions(+), 97 deletions(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 52b946970..4a7f5ac61 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -361,104 +361,103 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } /** - * Transfers funds from Smart Account to recipient (usually EOA) - * @param recipient - Address of the recipient - * @param withdrawalRequests - Array of withdrawal requests {@link WithdrawalRequest}. If withdrawal request is an empty array, it will transfer the balance of the native token. Using a paymaster will ensure no dust remains in the smart account. - * @param buildUseropDto - Optional. {@link BuildUserOpOptions} - * - * @returns Promise<UserOpResponse> - An object containing the status of the transaction. - * - * @example - * import { createClient } from "viem" - * import { createSmartAccountClient, NATIVE_TOKEN_ALIAS } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonMumbai } from "viem/chains"; - * - * const USDT = "0xda5289fcaaf71d52a80a254da614a192b693e977"; - * const signer = createWalletClient({ - * account, - * chain: polygonMumbai, - * transport: http(), - * }); - * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); - * - * const { wait } = await smartAccount.withdraw( - * [ - * { address: USDT, amount: BigInt(1) }, - * { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } - * ], - * account.pubKey, // Default recipient used if no recipient is present in the withdrawal request - * { - * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - * } - * ); - * - * // OR to withdraw all of the native token, leaving no dust in the smart account - * - * const { wait } = await smartAccount.withdraw([], account.pubKey, { - * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - * }); - * - * const { success } = await wait(); - */ - public async withdraw( - withdrawalRequests?: WithdrawalRequest[] | null, - defaultRecipient?: Hex | null, - buildUseropDto?: BuildUserOpOptions, - ): Promise<UserOpResponse> { - const accountAddress = this.accountAddress ?? (await this.getAccountAddress()); - - if (!defaultRecipient && withdrawalRequests?.some(({ recipient }) => !recipient)) { - throw new Error(ERROR_MESSAGES.NO_RECIPIENT); - } - - // Remove the native token from the withdrawal requests - let tokenRequests = withdrawalRequests?.filter(({ address }) => !addressEquals(address, NATIVE_TOKEN_ALIAS)) ?? []; - - // Check if the amount is not present in all withdrawal requests - const shouldFetchMaxBalances = tokenRequests.some(({ amount }) => !amount); - - // Get the balances of the tokens if the amount is not present in the withdrawal requests - if (shouldFetchMaxBalances) { - const balances = await this.getBalances(tokenRequests.map(({ address }) => address)); - tokenRequests = tokenRequests.map(({ amount, address }, i) => ({ - address, - amount: amount ?? balances[i].amount, - })); - } - - // Create the transactions - const txs: Transaction[] = tokenRequests.map(({ address, amount, recipient: recipientFromRequest }) => ({ - to: address, - data: encodeFunctionData({ - abi: parseAbi(ERC20_ABI), - functionName: "transfer", - args: [recipientFromRequest || defaultRecipient, amount], - }), - })); - - // Check if eth alias is present in the original withdrawal requests - const nativeTokenRequest = withdrawalRequests?.find(({ address }) => addressEquals(address, NATIVE_TOKEN_ALIAS)); - const hasNoRequests = !withdrawalRequests?.length; - if (!!nativeTokenRequest || hasNoRequests) { - // Check that an amount is present in the withdrawal request, if no paymaster service data is present, as max amounts cannot be calculated without a paymaster. - if (!nativeTokenRequest?.amount && !buildUseropDto?.paymasterServiceData?.mode) { - throw new Error(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT); - } - - // get eth balance if not present in withdrawal requests - const nativeTokenAmountToWithdraw = nativeTokenRequest?.amount ?? (await this.provider.getBalance({ address: accountAddress })); - - txs.push({ - to: (nativeTokenRequest?.recipient ?? defaultRecipient) as Hex, - value: nativeTokenAmountToWithdraw, - }); - } - - return this.sendTransaction(txs, buildUseropDto); - } + * Transfers funds from Smart Account to recipient (usually EOA) + * @param recipient - Address of the recipient + * @param withdrawalRequests - Array of withdrawal requests {@link WithdrawalRequest}. If withdrawal request is an empty array, it will transfer the balance of the native token. Using a paymaster will ensure no dust remains in the smart account. + * @param buildUseropDto - Optional. {@link BuildUserOpOptions} + * + * @returns Promise<UserOpResponse> - An object containing the status of the transaction. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient, NATIVE_TOKEN_ALIAS } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonMumbai } from "viem/chains"; + * + * const USDT = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + * const signer = createWalletClient({ + * account, + * chain: polygonMumbai, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); + * + * const { wait } = await smartAccount.withdraw( + * [ + * { address: USDT, amount: BigInt(1) }, + * { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } + * ], + * account.pubKey, // Default recipient used if no recipient is present in the withdrawal request + * { + * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + * } + * ); + * + * // OR to withdraw all of the native token, leaving no dust in the smart account + * + * const { wait } = await smartAccount.withdraw([], account.pubKey, { + * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + * }); + * + * const { success } = await wait(); + */ + public async withdraw( + withdrawalRequests?: WithdrawalRequest[] | null, + defaultRecipient?: Hex | null, + buildUseropDto?: BuildUserOpOptions, + ): Promise<UserOpResponse> { + const accountAddress = this.accountAddress ?? (await this.getAccountAddress()); + + if (!defaultRecipient && withdrawalRequests?.some(({ recipient }) => !recipient)) { + throw new Error(ERROR_MESSAGES.NO_RECIPIENT); + } + + // Remove the native token from the withdrawal requests + let tokenRequests = withdrawalRequests?.filter(({ address }) => !addressEquals(address, NATIVE_TOKEN_ALIAS)) ?? []; + + // Check if the amount is not present in all withdrawal requests + const shouldFetchMaxBalances = tokenRequests.some(({ amount }) => !amount); + + // Get the balances of the tokens if the amount is not present in the withdrawal requests + if (shouldFetchMaxBalances) { + const balances = await this.getBalances(tokenRequests.map(({ address }) => address)); + tokenRequests = tokenRequests.map(({ amount, address }, i) => ({ + address, + amount: amount ?? balances[i].amount, + })); + } + // Create the transactions + const txs: Transaction[] = tokenRequests.map(({ address, amount, recipient: recipientFromRequest }) => ({ + to: address, + data: encodeFunctionData({ + abi: parseAbi(ERC20_ABI), + functionName: "transfer", + args: [recipientFromRequest || defaultRecipient, amount], + }), + })); + + // Check if eth alias is present in the original withdrawal requests + const nativeTokenRequest = withdrawalRequests?.find(({ address }) => addressEquals(address, NATIVE_TOKEN_ALIAS)); + const hasNoRequests = !withdrawalRequests?.length; + if (!!nativeTokenRequest || hasNoRequests) { + // Check that an amount is present in the withdrawal request, if no paymaster service data is present, as max amounts cannot be calculated without a paymaster. + if (!nativeTokenRequest?.amount && !buildUseropDto?.paymasterServiceData?.mode) { + throw new Error(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT); + } + + // get eth balance if not present in withdrawal requests + const nativeTokenAmountToWithdraw = nativeTokenRequest?.amount ?? (await this.provider.getBalance({ address: accountAddress })); + + txs.push({ + to: (nativeTokenRequest?.recipient ?? defaultRecipient) as Hex, + value: nativeTokenAmountToWithdraw, + }); + } + + return this.sendTransaction(txs, buildUseropDto); + } /** * Return the account's address. This value is valid even before deploying the contract. From eaef0633bc0897e975306372768a0db498208664 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Wed, 3 Apr 2024 18:55:21 +0100 Subject: [PATCH 1160/1247] yarn lock --- yarn.lock | 621 +++++++++++++++++++++++++++++------------------------- 1 file changed, 334 insertions(+), 287 deletions(-) diff --git a/yarn.lock b/yarn.lock index a4e0e28a9..5e8085597 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,13 +13,13 @@ integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== "@alchemy/aa-core@^3.1.1": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.4.2.tgz#3bb3e508bb29586a29c5a025056f11c474bcee19" - integrity sha512-oPE8iUT/38S0hEfthtauIcidQq1kyN/t1VGpq5JSEFanFs6uV8UFyjjj9heO4UnA1uJDiVbvY6A5NZcM92j8RA== + version "3.6.1" + resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.6.1.tgz#af718313276458910d06030ee0aa946168e442f9" + integrity sha512-WVDacDuXcuePTHQSlKZ0nZvRHNSB48iUhh7fVSqchiStjq7BybdGg35AZf8eg5vcepkwSHekNKCp5LxKwpFCQg== dependencies: abitype "^0.8.3" eventemitter3 "^5.0.1" - viem "^2.7.8" + viem "^2.8.6" zod "^3.22.4" "@ampproject/remapping@^2.2.0": @@ -30,33 +30,33 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" "@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" + integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" - integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" + integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.4" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.0" - "@babel/parser" "^7.24.0" + "@babel/helpers" "^7.24.4" + "@babel/parser" "^7.24.4" "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" + "@babel/traverse" "^7.24.1" "@babel/types" "^7.24.0" convert-source-map "^2.0.0" debug "^4.1.0" @@ -64,14 +64,14 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== +"@babel/generator@^7.24.1", "@babel/generator@^7.24.4", "@babel/generator@^7.7.2": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" + integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" + "@babel/types" "^7.24.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" "@babel/helper-compilation-targets@^7.23.6": @@ -106,11 +106,11 @@ "@babel/types" "^7.22.5" "@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.24.0" "@babel/helper-module-transforms@^7.23.3": version "7.23.3" @@ -123,7 +123,7 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== @@ -143,9 +143,9 @@ "@babel/types" "^7.22.5" "@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" @@ -157,28 +157,29 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" - integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== +"@babel/helpers@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" + integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== dependencies: "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" + "@babel/traverse" "^7.24.1" "@babel/types" "^7.24.0" -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== +"@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" - integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" + integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -216,11 +217,11 @@ "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" + integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -272,16 +273,16 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" + integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/runtime@^7.21.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" - integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" + integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== dependencies: regenerator-runtime "^0.14.0" @@ -294,23 +295,23 @@ "@babel/parser" "^7.24.0" "@babel/types" "^7.24.0" -"@babel/traverse@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" - integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== +"@babel/traverse@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" + integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" + "@babel/code-frame" "^7.24.1" + "@babel/generator" "^7.24.1" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.0" + "@babel/parser" "^7.24.1" "@babel/types" "^7.24.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.3.3": +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.3.3": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== @@ -836,9 +837,9 @@ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" - integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@hutson/parse-repository-url@^3.0.0": version "3.0.2" @@ -1065,7 +1066,7 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== @@ -1097,7 +1098,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -1251,65 +1252,65 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/edr-darwin-arm64@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.2.1.tgz#10c1a07add192583ce8b2d4cc93439f52b390a41" - integrity sha512-aMYaRaZVQ/TmyNJIoXf1bU4k0zfinaL9Sy1day4yGlL6eiQPFfRGj9W6TZaZIoYG0XTx/mQWD7dkXJ7LdrleJA== +"@nomicfoundation/edr-darwin-arm64@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.3.3.tgz#0618dbdf1c832f8e61c77540e7188c13fdd5b658" + integrity sha512-E9VGsUD+1Ga4mn/5ooHsMi8JEfhZbKP6CXN/BhJ8kXbIC10NqTD1RuhCKGRtYq4vqH/3Nfq25Xg8E8RWOF4KBQ== -"@nomicfoundation/edr-darwin-x64@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.2.1.tgz#eaa29d2ba9f91ddb5f59b872c5a54f94a6fe3095" - integrity sha512-ma0SLcjHm5L3nPHcKFJB0jv/gKGSKaxr5Z65rurX/eaYUQJ7YGMsb8er9bSCo9rjzOtxf4FoPj3grL3zGpOj8A== +"@nomicfoundation/edr-darwin-x64@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.3.3.tgz#567ee0bca8d019085e8dd95330e7c03f16c66a79" + integrity sha512-vkZXZ1ydPg+Ijb2iyqENA+KCkxGTCUWG5itCSliiA0Li2YE7ujDMGhheEpFp1WVlZadviz0bfk1rZXbCqlirpg== -"@nomicfoundation/edr-linux-arm64-gnu@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.2.1.tgz#8149db0d742157405effe82d485ea9bfefddc795" - integrity sha512-NX3G4pBhRitWrjSGY3HTyCq3wKSm5YqrKVOCNQGl9/jcjSovqxlgzFMiTx4YZCzGntfJ/1om9AI84OWxYJjoDw== +"@nomicfoundation/edr-linux-arm64-gnu@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.3.3.tgz#3956b4d7a0127e2259351626c92698c4ce6ecf05" + integrity sha512-gdIg0Yj1qqS9wVuywc5B/+DqKylfUGB6/CQn/shMqwAfsAVAVpchkhy66PR+REEx7fh/GkNctxLlENXPeLzDiA== -"@nomicfoundation/edr-linux-arm64-musl@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.2.1.tgz#7d53afe5607eb406d199a199d00209a6304ff07b" - integrity sha512-gdQ3QHkt9XRkdtOGQ8fMwS11MXdjLeZgLrqoial4V4qtMaamIMMhVczK+VEvUhD8p7G4BVmp6kmkvcsthmndmw== +"@nomicfoundation/edr-linux-arm64-musl@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.3.3.tgz#139f801939ed467f1719a2ab014993838008eefb" + integrity sha512-AXZ08MFvhNeBZbOBNmz1SJ/DMrMOE2mHEJtaNnsctlxIunjxfrWww4q+WXB34jbr9iaVYYlPsaWe5sueuw6s3Q== -"@nomicfoundation/edr-linux-x64-gnu@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.2.1.tgz#b762c95368fcb88bbbabba4d8be5380f38967413" - integrity sha512-OqabFY37vji6mYbLD9CvG28lja68czeVw58oWByIhFV3BpBu/cyP1oAbhzk3LieylujabS3Ekpvjw2Tkf0A9RQ== +"@nomicfoundation/edr-linux-x64-gnu@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.3.3.tgz#b5994caa1a8bb4afca5f079ad7dd99edb26c6c45" + integrity sha512-xElOs1U+E6lBLtv1mnJ+E8nr2MxZgKiLo8bZAgBboy9odYtmkDVwhMjtsFKSuZbGxFtsSyGRT4cXw3JAbtUDeA== -"@nomicfoundation/edr-linux-x64-musl@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.2.1.tgz#522448c42bff7d2abd52ddcf11ae6ca3dfdd6db4" - integrity sha512-vHfFFK2EPISuQUQge+bdjXamb0EUjfl8srYSog1qfiwyLwLeuSbpyyFzDeITAgPpkkFuedTfJW553K0Hipspyg== +"@nomicfoundation/edr-linux-x64-musl@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.3.3.tgz#536c1d1dfd2fc7d7ad6ed6e14ed9a12322d88ba6" + integrity sha512-2Fe6gwm1RAGQ/PfMYiaSba2OrFp8zzYWh+am9lYObOFjV9D+A1zhIzfy0UC74glPks5eV8eY4pBPrVR042m2Nw== -"@nomicfoundation/edr-win32-arm64-msvc@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.2.1.tgz#ccfa443c274e49de93016a1060be810096dc6f1d" - integrity sha512-K/mui67RCKxghbSyvhvW3rvyVN1pa9M1Q9APUx1PtWjSSdXDFpqEY1NYsv2syb47Ca8ObJwVMF+LvnB6GvhUOQ== +"@nomicfoundation/edr-win32-arm64-msvc@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.3.3.tgz#f71609644d8585c2ec71580bf75c2fd036ee58b0" + integrity sha512-8NHyxIsFrl0ufSQ/ErqF2lKIa/gz1gaaa1a2vKkDEqvqCUcPhBTYhA5NHgTPhLETFTnCFr0z+YbctFCyjh4qrA== -"@nomicfoundation/edr-win32-ia32-msvc@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.2.1.tgz#822b19d3e67d6dcfa5394cb6a4d55d8bab1b2f26" - integrity sha512-HHK0mXEtjvfjJrJlqcYgQCy3lZIXS1KNl2GaP8bwEIuEwx++XxXs/ThLjPepM1nhCGICij8IGy7p3KrkzRelsw== +"@nomicfoundation/edr-win32-ia32-msvc@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.3.3.tgz#baa5eaacb1fff107d02f0e6a33dee9521fd2bf37" + integrity sha512-0F6hM0kGia4dQVb/kauho9JcP1ozWisY2/She+ISR5ceuhzmAwQJluM0g+0TYDME0LtxBxiMPq/yPiZMQeq31w== -"@nomicfoundation/edr-win32-x64-msvc@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.2.1.tgz#7b56ff742b2724779cc9f3385815b394f76de8df" - integrity sha512-FY4eQJdj1/y8ST0RyQycx63yr+lvdYNnUkzgWf4X+vPH1lOhXae+L2NDcNCQlTDAfQcD6yz0bkBUkLrlJ8pTww== +"@nomicfoundation/edr-win32-x64-msvc@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.3.3.tgz#7562e061b2481f87bb1ace30513a2ad38c469836" + integrity sha512-d75q1uaMb6z9i+GQZoblbOfFBvlBnWc+5rB13UWRkCOJSnoYwyFWhGJx5GeM59gC7aIblc5VD9qOAhHuvM9N+w== -"@nomicfoundation/edr@^0.2.0": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.2.1.tgz#a3d2a542dcd5dc5a8d757116d52baea05f370531" - integrity sha512-Dleau3ItHJh2n85G2J6AIPBoLgu/mOWkmrh26z3VsJE2tp/e00hUk/dqz85ncsVcBYEc6/YOn/DomWu0wSF9tQ== +"@nomicfoundation/edr@^0.3.1": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.3.3.tgz#0ed8619ea2ac644bf87cdc09dd1a8f465a859bcc" + integrity sha512-zP+e+3B1nEUx6bW5BPnIzCQbkhmYfdMBJdiVggTqqTfAA82sOkdOG7wsOMcz5qF3fYfx/irNRM1kgc9HVFIbpQ== optionalDependencies: - "@nomicfoundation/edr-darwin-arm64" "0.2.1" - "@nomicfoundation/edr-darwin-x64" "0.2.1" - "@nomicfoundation/edr-linux-arm64-gnu" "0.2.1" - "@nomicfoundation/edr-linux-arm64-musl" "0.2.1" - "@nomicfoundation/edr-linux-x64-gnu" "0.2.1" - "@nomicfoundation/edr-linux-x64-musl" "0.2.1" - "@nomicfoundation/edr-win32-arm64-msvc" "0.2.1" - "@nomicfoundation/edr-win32-ia32-msvc" "0.2.1" - "@nomicfoundation/edr-win32-x64-msvc" "0.2.1" + "@nomicfoundation/edr-darwin-arm64" "0.3.3" + "@nomicfoundation/edr-darwin-x64" "0.3.3" + "@nomicfoundation/edr-linux-arm64-gnu" "0.3.3" + "@nomicfoundation/edr-linux-arm64-musl" "0.3.3" + "@nomicfoundation/edr-linux-x64-gnu" "0.3.3" + "@nomicfoundation/edr-linux-x64-musl" "0.3.3" + "@nomicfoundation/edr-win32-arm64-msvc" "0.3.3" + "@nomicfoundation/edr-win32-ia32-msvc" "0.3.3" + "@nomicfoundation/edr-win32-x64-msvc" "0.3.3" "@nomicfoundation/ethereumjs-common@4.0.4": version "4.0.4" @@ -1721,9 +1722,9 @@ uuid "^8.3.2" "@particle-network/chains@*": - version "1.3.21" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.21.tgz#82d2b098e165fc198e6e6e3e4c8b2154235e3aa1" - integrity sha512-tuUVuOPf+el+kDlHLFMyDy4IkoGjk+P3QvVrxT7WnmEma1NgWTE7RaNsniwqn6SYkAwAxksL/D9aADUXZxqPmw== + version "1.3.27" + resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.27.tgz#dca4f2714d23957cc68cb1301de1f310895658db" + integrity sha512-+my+i0jqZjUoP+mNXxsPc2D7o3Cijl6uRvvWyTT0DmpyK1P+9yFpUuhEHUVmZMriTGKXv6synner16CD8/AkpQ== "@particle-network/crypto@^1.0.1": version "1.0.1" @@ -1753,9 +1754,9 @@ integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== "@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" - integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== + version "1.1.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" + integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== "@scure/bip32@1.1.5": version "1.1.5" @@ -1960,9 +1961,9 @@ utf-8-validate "6.0.3" "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" @@ -2111,9 +2112,9 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*", "@types/node@^20.11.10": - version "20.11.26" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.26.tgz#3fbda536e51d5c79281e1d9657dcb0131baabd2d" - integrity sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ== + version "20.12.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.3.tgz#d6658c2c7776c1cad93534bb45428195ed840c65" + integrity sha512-sD+ia2ubTeWrOu+YMF+MTAB7E+O7qsMqAbMfW7DG3K1URwhZ5hN1pLlRVGbf4wDFzSfikL05M17EyorS86jShw== dependencies: undici-types "~5.26.4" @@ -2529,14 +2530,15 @@ array-ify@^1.0.0: integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== 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== + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" is-string "^1.0.7" array-union@^1.0.1: @@ -2556,26 +2558,16 @@ array-uniq@^1.0.1: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== -array.prototype.filter@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" - integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - array.prototype.findlastindex@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" - integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" + es-abstract "^1.23.2" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.2: @@ -2654,11 +2646,11 @@ available-typed-arrays@^1.0.7: possible-typed-array-names "^1.0.0" axios@^1.0.0, axios@^1.3.6: - version "1.6.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" - integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + version "1.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== dependencies: - follow-redirects "^1.15.4" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -2755,9 +2747,9 @@ bignumber.js@^9.0.1: integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bl@^4.0.3, bl@^4.1.0: version "4.1.0" @@ -3060,9 +3052,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001597" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz#8be94a8c1d679de23b22fbd944232aa1321639e6" - integrity sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w== + version "1.0.30001605" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz#ca12d7330dd8bcb784557eb9aa64f0037870d9d6" + integrity sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ== catering@^2.0.0, catering@^2.1.0: version "2.1.1" @@ -3552,6 +3544,33 @@ dargs@^7.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + date-fns@^2.30.0: version "2.30.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" @@ -3765,9 +3784,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.701" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.701.tgz#7335e5761331774b4dea54cd24a1b84861d45cdf" - integrity sha512-K3WPQ36bUOtXg/1+69bFlFOvdSm0/0bGqmsfPDLRXLanoKXdA+pIWuf/VbA9b+2CwBFuONgl4NEz4OEm+OJOKA== + version "1.4.724" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.724.tgz#e0a86fe4d3d0e05a4d7b032549d79608078f830d" + integrity sha512-RTRvkmRkGhNBPPpdrgtDKvmOEYTrPlXDfc0J/Nfq5s29tEahAwhiX4mmhNzj6febWMleulxVYPh7QwCSL/EldA== elliptic@6.5.4: version "6.5.4" @@ -3876,17 +3895,21 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" - integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== dependencies: array-buffer-byte-length "^1.0.1" arraybuffer.prototype.slice "^1.0.3" available-typed-arrays "^1.0.7" call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" es-define-property "^1.0.0" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" @@ -3897,10 +3920,11 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: has-property-descriptors "^1.0.2" has-proto "^1.0.3" has-symbols "^1.0.3" - hasown "^2.0.1" + hasown "^2.0.2" internal-slot "^1.0.7" is-array-buffer "^3.0.4" is-callable "^1.2.7" + is-data-view "^1.0.1" is-negative-zero "^2.0.3" is-regex "^1.1.4" is-shared-array-buffer "^1.0.3" @@ -3911,22 +3935,17 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: object-keys "^1.1.1" object.assign "^4.1.5" regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.0" + safe-array-concat "^1.1.2" safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" typed-array-buffer "^1.0.2" typed-array-byte-length "^1.0.1" typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.5" + typed-array-length "^1.0.6" unbox-primitive "^1.0.2" - which-typed-array "^1.1.14" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + which-typed-array "^1.1.15" es-define-property@^1.0.0: version "1.0.0" @@ -3935,11 +3954,18 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" @@ -4543,10 +4569,10 @@ fn.name@1.x.x: resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== -follow-redirects@^1.12.1, follow-redirects@^1.15.4: - version "1.15.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" - integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== +follow-redirects@^1.12.1, follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== for-each@^0.3.3: version "0.3.3" @@ -4870,15 +4896,15 @@ glob@8.1.0, glob@^8.0.1: once "^1.3.0" glob@^10.2.2, glob@^10.3.7: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + version "10.3.12" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" + integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== dependencies: foreground-child "^3.1.0" - jackspeak "^2.3.5" + jackspeak "^2.3.6" minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + minipass "^7.0.4" + path-scurry "^1.10.2" glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: version "7.2.3" @@ -4999,13 +5025,13 @@ hard-rejection@^2.1.0: integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== hardhat@^2.17.3: - version "2.21.0" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.21.0.tgz#2e23126310a6c77cd7e149e6af1dd67626b7a74f" - integrity sha512-8DlJAVJDEVHaV1sh9FLuKLLgCFv9EAJ+M+8IbjSIPgoeNo3ss5L1HgGBMfnI88c7OzMEZkdcuyGoobFeK3Orqw== + version "2.22.2" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.2.tgz#0cadd7ec93bf39bab09f81603e75bc5e92acea3d" + integrity sha512-0xZ7MdCZ5sJem4MrvpQWLR3R3zGDoHw5lsR+pBFimqwagimIOn3bWuZv69KA+veXClwI1s/zpqgwPwiFrd4Dxw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/edr" "^0.2.0" + "@nomicfoundation/edr" "^0.3.1" "@nomicfoundation/ethereumjs-common" "4.0.4" "@nomicfoundation/ethereumjs-tx" "5.0.4" "@nomicfoundation/ethereumjs-util" "9.0.4" @@ -5108,7 +5134,7 @@ 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, hasown@^2.0.1: +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -5440,6 +5466,13 @@ is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0, is-core-m dependencies: hasown "^2.0.0" +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + 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" @@ -5700,7 +5733,7 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jackspeak@^2.3.5: +jackspeak@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== @@ -6505,7 +6538,7 @@ logform@^2.3.2, logform@^2.4.0: safe-stable-stringify "^2.3.1" triple-beam "^1.3.0" -lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": +lru-cache@^10.0.1, lru-cache@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== @@ -6769,7 +6802,7 @@ minimatch@5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: +minimatch@9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== @@ -6797,6 +6830,13 @@ minimatch@^8.0.2: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -6897,7 +6937,7 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3, minipass@^7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== @@ -6923,9 +6963,9 @@ mnemonist@^0.38.0: obliterator "^2.0.0" mocha@^10.0.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" - integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== + version "10.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261" + integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== dependencies: ansi-colors "4.1.1" browser-stdout "1.3.1" @@ -6989,7 +7029,7 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mute-stream@~1.0.0: +mute-stream@^1.0.0, mute-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== @@ -7373,42 +7413,41 @@ object.assign@^4.1.2, object.assign@^4.1.5: object-keys "^1.1.1" object.entries@^1.1.5: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" 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== + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.groupby@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" - integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - array.prototype.filter "^1.0.3" - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" + es-abstract "^1.23.2" 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== + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" obliterator@^2.0.0: version "2.0.4" @@ -7695,12 +7734,12 @@ path-parse@^1.0.6, path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1, path-scurry@^1.6.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== +path-scurry@^1.10.2, path-scurry@^1.6.1: + version "1.10.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== dependencies: - lru-cache "^9.1.1 || ^10.0.0" + lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-type@^3.0.0: @@ -7848,11 +7887,11 @@ prompts@^2.0.1: sisteransi "^1.0.5" promzard@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" - integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== + version "1.0.1" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.1.tgz#3b77251a24f988c0886f5649d4f642bcdd53e558" + integrity sha512-ulDF77aULEHUoJkN5XZgRV5loHXBaqd9eorMvLNLvi2gXMuRAtwH6Gh4zsMHQY1kTt7tyv/YZwZW5C2gtj8F2A== dependencies: - read "^2.0.0" + read "^3.0.1" propagate@^2.0.0: version "2.0.1" @@ -7880,9 +7919,9 @@ punycode@^2.1.0: integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pure-rand@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" - integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== + version "6.1.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== query-string@^8.1.0: version "8.2.0" @@ -7991,6 +8030,13 @@ read@^2.0.0: dependencies: mute-stream "~1.0.0" +read@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/read/-/read-3.0.1.tgz#926808f0f7c83fa95f1ef33c0e2c09dbb28fd192" + integrity sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw== + dependencies: + mute-stream "^1.0.0" + readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -8184,7 +8230,7 @@ rxjs@^7.5.5, rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-array-concat@^1.1.0: +safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== @@ -8614,32 +8660,33 @@ string-width@^5.0.1, string-width@^5.1.2: 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== +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" -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== +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -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== +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string_decoder@^1.1.1: version "1.3.0" @@ -8782,9 +8829,9 @@ tar@6.1.11: yallist "^4.0.0" tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -9092,10 +9139,10 @@ typed-array-byte-offset@^1.0.2: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-length@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" - integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== dependencies: call-bind "^1.0.7" for-each "^0.3.3" @@ -9120,9 +9167,9 @@ typedoc@^0.25.7: shiki "^0.14.7" "typescript@>=3 < 6", typescript@^5.3.3: - version "5.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" - integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== + version "5.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" + integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== uglify-js@^3.1.4: version "3.17.4" @@ -9145,9 +9192,9 @@ undici-types@~5.26.4: integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== undici@^5.14.0: - version "5.28.3" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" - integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== dependencies: "@fastify/busboy" "^2.0.0" @@ -9323,10 +9370,10 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -viem@^2.7.12, viem@^2.7.8: - version "2.8.4" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.8.4.tgz#553996181d2d22237e31476218178d3fe96e2e3d" - integrity sha512-zBC8+YNKzo+XeUsCyXdrFzimH9Ei/nRfUKldPmVRoR/lR56/sqkDPyfCE1yvzwwmA9AJ9m9m2HtSPgl9NiTReA== +viem@^2.7.12, viem@^2.8.6: + version "2.9.8" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.9.8.tgz#15288cc5332292617786d21db0aa3571db29c4c9" + integrity sha512-vetoTZ6UF2okS/1I0+1p/QYdC4yA6uf4PeWwTBp3kD5wC6eQcmeh7zP+unNdnYHGGC63x7BTGldK1ep2IFVKcQ== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0" @@ -9399,7 +9446,7 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.14: +which-typed-array@^1.1.14, which-typed-array@^1.1.15: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== From 44d2529216f916c4178267d3138824559578ffef Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Wed, 3 Apr 2024 19:01:46 +0100 Subject: [PATCH 1161/1247] fix comment --- packages/account/src/utils/Types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts index 03b925355..be406b4cb 100644 --- a/packages/account/src/utils/Types.ts +++ b/packages/account/src/utils/Types.ts @@ -44,7 +44,7 @@ export interface WithdrawalRequest { address: Hex; /** The amount to withdraw. Expects unformatted amount. Will use max amount if unset */ amount?: bigint; - /** The destination address of the funds. The first argument from the `withdraw(...)` function will be used as the default if left unset. */ + /** The destination address of the funds. The second argument from the `withdraw(...)` function will be used as the default if left unset. */ recipient?: Hex; } From cb4b60a4ca797c680a13f47d8ad00efe745eeec1 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Wed, 3 Apr 2024 19:05:52 +0100 Subject: [PATCH 1162/1247] fix comment --- packages/account/src/BiconomySmartAccountV2.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/packages/account/src/BiconomySmartAccountV2.ts index 4a7f5ac61..93f54e6cf 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/packages/account/src/BiconomySmartAccountV2.ts @@ -385,7 +385,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * const { wait } = await smartAccount.withdraw( * [ - * { address: USDT, amount: BigInt(1) }, + * { address: USDT }, // omit the amount to withdraw the full balance * { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } * ], * account.pubKey, // Default recipient used if no recipient is present in the withdrawal request From f963c10b7a56ff4ee6ee8396e49f5272a37327ed Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Thu, 4 Apr 2024 00:08:30 +0300 Subject: [PATCH 1163/1247] renamed test and remove redundant variable --- packages/account/tests/account.e2e.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts index 21a0f44a5..0ba8cde57 100644 --- a/packages/account/tests/account.e2e.spec.ts +++ b/packages/account/tests/account.e2e.spec.ts @@ -13,7 +13,7 @@ describe("Account Tests", () => { beforeEach(() => { // @ts-ignore: Comes from setup-e2e-tests - [baseSepolia, baseSepolia, optimism] = testDataPerChain; + [baseSepolia, optimism] = testDataPerChain; }); it("should have addresses", async () => { @@ -696,7 +696,7 @@ describe("Account Tests", () => { expect(response).toBe(eip1271MagicValue); }); - it("should throw an error if signature is not valid", async () => { + it("should confirm that signature is not valid", async () => { const { whale: { viemWallet: signer }, bundlerUrl, From 7c594fa74e81650b4cb5043afb4cd1153e638a19 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Fri, 19 Apr 2024 10:48:20 +0100 Subject: [PATCH 1164/1247] chore: modernise tooling and reduce package size (#466) * modernise tooling and reduce package size --- .changeset/README.md | 8 + .changeset/config.json | 14 + .env.example | 8 +- .eslintignore | 14 - .eslintrc.js | 49 - .github/ISSUE_TEMPLATE/1_general_issue.yml | 26 + .../{bug_report.yml => 2_bug_report.yml} | 7 +- .github/ISSUE_TEMPLATE/3_feature_request.yml | 31 + .github/ISSUE_TEMPLATE/4_security_report.yml | 31 + .../ISSUE_TEMPLATE/5_document_improvement.yml | 33 + .../6_build_deployment_issue.yml | 33 + .github/ISSUE_TEMPLATE/config.yml | 8 - .github/ISSUE_TEMPLATE/feature_request.md | 27 - .../pull_request_template.md | 22 + .github/actions/build/action.yml | 16 + .../actions/install-dependencies/action.yml | 14 + .github/pull_request_template.md | 35 - .github/workflows/build.yml | 14 + .github/workflows/check_branch_name.yml | 21 - .github/workflows/coverage.yml | 44 + .github/workflows/docs.yml | 26 +- .github/workflows/mainnet_tests.yml | 32 - .github/workflows/mark_stale.yml | 22 - .github/workflows/pr-lint.yml | 17 + .github/workflows/pull_request_approved.yml | 34 - .github/workflows/push_check.yml | 44 - .github/workflows/size-report.yml | 29 + .github/workflows/test-read.yml | 28 + .github/workflows/test-write.yml | 58 + .gitignore | 171 +- .nvmrc | 1 - .nycrc.json | 3 - .prettierignore | 14 - .prettierrc.json | 7 - .size-limit.json | 31 + CHANGELOG.md | 167 +- CODE_OF_CONDUCT.md | 46 + CONTRIBUTING.md | 64 - LICENSE.md => LICENSE | 2 +- README.md | 120 +- SECURITY.md | 57 + assets/readme/biconomy-client-sdk.png | Bin 61005 -> 0 bytes assets/readme/biconomy-sdk.png | Bin 163491 -> 0 bytes biome.json | 46 + bun.lockb | Bin 0 -> 262560 bytes jest.config.e2e.ts | 6 - jest.config.ts | 198 - lerna.json | 11 - link.sh | 5 - linkAll.sh | 3 - package.json | 171 +- packages/account/.esbuild.js | 58 - packages/account/CHANGELOG.md | 166 - packages/account/Readme.md | 138 - packages/account/package.json | 77 - packages/account/src/index.ts | 49 - packages/account/src/utils/Types.ts | 313 - packages/account/src/utils/Utils.ts | 105 - packages/account/src/utils/index.ts | 3 - packages/account/tests/account.e2e.spec.ts | 995 -- .../tests/account.optimism.e2e.spec.ts | 118 - .../account/tests/account.read.e2e.spec.ts | 108 - packages/account/tests/account.spec.ts | 283 - packages/account/tests/utils.spec.ts | 130 - packages/account/tsconfig.build.json | 32 - packages/account/tsconfig.json | 13 - packages/bundler/.esbuild.js | 58 - packages/bundler/CHANGELOG.md | 94 - packages/bundler/Readme.md | 99 - packages/bundler/package.json | 69 - packages/bundler/src/index.ts | 8 - packages/bundler/src/interfaces/IBundler.ts | 21 - packages/bundler/src/utils/Utils.ts | 22 - packages/bundler/tests/bundler.e2e.spec.ts | 19 - packages/bundler/tests/bundler.spec.ts | 14 - packages/bundler/tsconfig.build.json | 32 - packages/bundler/tsconfig.json | 13 - packages/common/.esbuild.js | 58 - packages/common/README.md | 11 - packages/common/package.json | 67 - packages/common/src/index.ts | 6 - packages/common/src/utils/Constants.ts | 7 - packages/common/src/utils/EthersSigner.ts | 39 - .../common/src/utils/Helpers/convertSigner.ts | 62 - packages/common/src/utils/Helpers/index.ts | 1 - packages/common/src/utils/HttpRequests.ts | 65 - packages/common/src/utils/Types.ts | 23 - packages/common/tsconfig.build.json | 32 - packages/common/tsconfig.json | 13 - packages/modules/.esbuild.js | 58 - packages/modules/CHANGELOG.md | 64 - packages/modules/README.md | 0 packages/modules/package.json | 70 - packages/modules/src/BaseValidationModule.ts | 46 - .../modules/src/BatchedSessionRouterModule.ts | 278 - .../modules/src/MultichainValidationModule.ts | 163 - packages/modules/src/index.ts | 26 - .../src/interfaces/IValidationModule.ts | 11 - .../session-storage/SessionLocalStorage.ts | 179 - packages/modules/src/utils/Constants.ts | 53 - packages/modules/src/utils/Helper.ts | 74 - ...batchedSessionValidationModule.e2e.spec.ts | 217 - .../tests/ecdsaValidationModule.e2e.spec.ts | 63 - packages/modules/tests/modules.e2e.spec.ts | 62 - packages/modules/tests/modules.spec.ts | 48 - .../multiChainValidationModule.e2e.spec.ts | 122 - .../tests/sessionValidationModule.e2e.spec.ts | 166 - packages/modules/tests/utils/customSession.ts | 230 - .../tests/utils/sessionStorageData/.gitkeep | 0 packages/modules/tsconfig.build.json | 32 - packages/modules/tsconfig.json | 13 - packages/particle-auth/.esbuild.js | 58 - packages/particle-auth/CHANGELOG.md | 66 - packages/particle-auth/README.md | 41 - packages/particle-auth/package.json | 68 - packages/particle-auth/src/index.ts | 4 - .../particle-auth/tests/particle-auth.spec.ts | 5 - packages/particle-auth/tsconfig.build.json | 32 - packages/particle-auth/tsconfig.json | 12 - packages/paymaster/.esbuild.js | 58 - packages/paymaster/CHANGELOG.md | 78 - packages/paymaster/Readme.md | 74 - packages/paymaster/package.json | 66 - packages/paymaster/src/index.ts | 8 - .../src/interfaces/IHybridPaymaster.ts | 16 - .../paymaster/src/interfaces/IPaymaster.ts | 8 - packages/paymaster/src/utils/Types.ts | 176 - .../paymaster/tests/paymaster.e2e.spec.ts | 19 - packages/paymaster/tests/paymaster.spec.ts | 14 - packages/paymaster/tsconfig.build.json | 32 - packages/paymaster/tsconfig.json | 12 - packages/transak/.esbuild.js | 58 - packages/transak/CHANGELOG.md | 62 - packages/transak/README.md | 13 - packages/transak/package.json | 65 - packages/transak/src/index.ts | 42 - packages/transak/src/interface.ts | 64 - packages/transak/tests/transak.spec.ts | 5 - packages/transak/tsconfig.build.json | 32 - packages/transak/tsconfig.json | 13 - rebuild.sh | 43 - src/account/BaseSmartContractAccount.ts | 354 + .../account}/BiconomySmartAccountV2.ts | 1422 ++- .../src/abi => src/account}/Factory.ts | 68 +- .../src/abi => src/account}/SmartAccount.ts | 446 +- .../account}/abi/AccountResolver.ts | 62 +- src/account/abi/EntryPointAbi.ts | 1309 +++ src/account/abi/Factory.ts | 141 + src/account/abi/SmartAccount.ts | 636 ++ src/account/index.ts | 11 + src/account/signers/local-account.ts | 55 + src/account/signers/wallet-client.ts | 48 + .../src => src/account}/utils/Constants.ts | 89 +- src/account/utils/EthersSigner.ts | 41 + src/account/utils/HttpRequests.ts | 72 + .../src => src/account}/utils/Logger.ts | 28 +- src/account/utils/Types.ts | 597 + src/account/utils/Utils.ts | 160 + src/account/utils/convertSigner.ts | 101 + src/account/utils/getChain.ts | 18 + src/account/utils/index.ts | 8 + .../bundler/src => src/bundler}/Bundler.ts | 314 +- src/bundler/IBundler.ts | 26 + src/bundler/index.ts | 8 + src/bundler/interfaces/IBundler.ts | 29 + .../src => src/bundler}/utils/Constants.ts | 25 +- .../bundler}/utils/HelperFunction.ts | 26 +- .../src => src/bundler}/utils/Types.ts | 158 +- src/bundler/utils/Utils.ts | 23 + src/bundler/utils/getAAError.ts | 68 + src/index.ts | 4 + src/modules/BaseValidationModule.ts | 51 + src/modules/BatchedSessionRouterModule.ts | 363 + .../ECDSAOwnershipValidationModule.ts | 103 +- src/modules/MultichainValidationModule.ts | 212 + .../modules}/PasskeyValidationModule.ts | 0 .../modules}/SessionKeyManagerModule.ts | 283 +- src/modules/index.ts | 30 + .../modules}/interfaces/ISessionStorage.ts | 57 +- .../interfaces/ISessionValidationModule.ts | 4 +- src/modules/interfaces/IValidationModule.ts | 11 + .../session-storage/SessionFileStorage.ts | 273 + .../session-storage/SessionLocalStorage.ts | 208 + .../session-storage/SessionMemoryStorage.ts | 219 + .../ERC20SessionValidationModule.ts | 60 +- src/modules/utils/Constants.ts | 35 + src/modules/utils/Helper.ts | 105 + .../src => src/modules}/utils/Types.ts | 165 +- .../modules/src => src/modules}/utils/Uid.ts | 12 +- .../paymaster}/BiconomyPaymaster.ts | 337 +- src/paymaster/index.ts | 8 + src/paymaster/interfaces/IHybridPaymaster.ts | 29 + src/paymaster/interfaces/IPaymaster.ts | 12 + .../src => src/paymaster}/utils/Constants.ts | 11 +- .../src => src/paymaster}/utils/Helpers.ts | 4 +- src/paymaster/utils/Types.ts | 125 + tests/account/read.test.ts | 705 ++ tests/account/write.test.ts | 264 + tests/bundler/read.test.ts | 202 + tests/bundler/write.test.ts | 119 + tests/chains.config.ts | 61 - tests/globalSetup.ts | 5 + tests/index.d.ts | 29 - tests/modules/read.test.ts | 247 + tests/modules/write.test.ts | 585 + tests/paymaster/read.test.ts | 145 + tests/paymaster/write.test.ts | 303 + tests/setup-e2e-tests.ts | 150 - tests/setup-unit-tests.ts | 64 - tests/setupFiles.ts | 9 + tests/utils.ts | 223 +- tests/vitest.config.ts | 35 + tsconfig.eslint.json | 4 - tsconfig.json | 22 - tsconfig.settings.json | 27 - tsconfig/tsconfig.base.json | 32 + tsconfig/tsconfig.cjs.json | 10 + tsconfig/tsconfig.esm.json | 8 + tsconfig/tsconfig.json | 16 + tsconfig/tsconfig.types.json | 12 + packages/account/typedoc.json => typedoc.json | 0 yarn.lock | 9707 ----------------- 222 files changed, 11595 insertions(+), 18961 deletions(-) create mode 100644 .changeset/README.md create mode 100644 .changeset/config.json delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js create mode 100644 .github/ISSUE_TEMPLATE/1_general_issue.yml rename .github/ISSUE_TEMPLATE/{bug_report.yml => 2_bug_report.yml} (94%) create mode 100644 .github/ISSUE_TEMPLATE/3_feature_request.yml create mode 100644 .github/ISSUE_TEMPLATE/4_security_report.yml create mode 100644 .github/ISSUE_TEMPLATE/5_document_improvement.yml create mode 100644 .github/ISSUE_TEMPLATE/6_build_deployment_issue.yml delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/PULL_REQUEST_TEMPLATE/pull_request_template.md create mode 100644 .github/actions/build/action.yml create mode 100644 .github/actions/install-dependencies/action.yml delete mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/check_branch_name.yml create mode 100644 .github/workflows/coverage.yml delete mode 100644 .github/workflows/mainnet_tests.yml delete mode 100644 .github/workflows/mark_stale.yml create mode 100644 .github/workflows/pr-lint.yml delete mode 100644 .github/workflows/pull_request_approved.yml delete mode 100644 .github/workflows/push_check.yml create mode 100644 .github/workflows/size-report.yml create mode 100644 .github/workflows/test-read.yml create mode 100644 .github/workflows/test-write.yml delete mode 100644 .nvmrc delete mode 100644 .nycrc.json delete mode 100644 .prettierignore delete mode 100644 .prettierrc.json create mode 100644 .size-limit.json create mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md rename LICENSE.md => LICENSE (97%) create mode 100644 SECURITY.md delete mode 100644 assets/readme/biconomy-client-sdk.png delete mode 100644 assets/readme/biconomy-sdk.png create mode 100644 biome.json create mode 100755 bun.lockb delete mode 100644 jest.config.e2e.ts delete mode 100644 jest.config.ts delete mode 100644 lerna.json delete mode 100755 link.sh delete mode 100755 linkAll.sh delete mode 100644 packages/account/.esbuild.js delete mode 100644 packages/account/CHANGELOG.md delete mode 100644 packages/account/Readme.md delete mode 100644 packages/account/package.json delete mode 100644 packages/account/src/index.ts delete mode 100644 packages/account/src/utils/Types.ts delete mode 100644 packages/account/src/utils/Utils.ts delete mode 100644 packages/account/src/utils/index.ts delete mode 100644 packages/account/tests/account.e2e.spec.ts delete mode 100644 packages/account/tests/account.optimism.e2e.spec.ts delete mode 100644 packages/account/tests/account.read.e2e.spec.ts delete mode 100644 packages/account/tests/account.spec.ts delete mode 100644 packages/account/tests/utils.spec.ts delete mode 100644 packages/account/tsconfig.build.json delete mode 100644 packages/account/tsconfig.json delete mode 100644 packages/bundler/.esbuild.js delete mode 100644 packages/bundler/CHANGELOG.md delete mode 100644 packages/bundler/Readme.md delete mode 100644 packages/bundler/package.json delete mode 100644 packages/bundler/src/index.ts delete mode 100644 packages/bundler/src/interfaces/IBundler.ts delete mode 100644 packages/bundler/src/utils/Utils.ts delete mode 100644 packages/bundler/tests/bundler.e2e.spec.ts delete mode 100644 packages/bundler/tests/bundler.spec.ts delete mode 100644 packages/bundler/tsconfig.build.json delete mode 100644 packages/bundler/tsconfig.json delete mode 100644 packages/common/.esbuild.js delete mode 100644 packages/common/README.md delete mode 100644 packages/common/package.json delete mode 100644 packages/common/src/index.ts delete mode 100644 packages/common/src/utils/Constants.ts delete mode 100644 packages/common/src/utils/EthersSigner.ts delete mode 100644 packages/common/src/utils/Helpers/convertSigner.ts delete mode 100644 packages/common/src/utils/Helpers/index.ts delete mode 100644 packages/common/src/utils/HttpRequests.ts delete mode 100644 packages/common/src/utils/Types.ts delete mode 100644 packages/common/tsconfig.build.json delete mode 100644 packages/common/tsconfig.json delete mode 100644 packages/modules/.esbuild.js delete mode 100644 packages/modules/CHANGELOG.md delete mode 100644 packages/modules/README.md delete mode 100644 packages/modules/package.json delete mode 100644 packages/modules/src/BaseValidationModule.ts delete mode 100644 packages/modules/src/BatchedSessionRouterModule.ts delete mode 100644 packages/modules/src/MultichainValidationModule.ts delete mode 100644 packages/modules/src/index.ts delete mode 100644 packages/modules/src/interfaces/IValidationModule.ts delete mode 100644 packages/modules/src/session-storage/SessionLocalStorage.ts delete mode 100644 packages/modules/src/utils/Constants.ts delete mode 100644 packages/modules/src/utils/Helper.ts delete mode 100644 packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts delete mode 100644 packages/modules/tests/ecdsaValidationModule.e2e.spec.ts delete mode 100644 packages/modules/tests/modules.e2e.spec.ts delete mode 100644 packages/modules/tests/modules.spec.ts delete mode 100644 packages/modules/tests/multiChainValidationModule.e2e.spec.ts delete mode 100644 packages/modules/tests/sessionValidationModule.e2e.spec.ts delete mode 100644 packages/modules/tests/utils/customSession.ts delete mode 100644 packages/modules/tests/utils/sessionStorageData/.gitkeep delete mode 100644 packages/modules/tsconfig.build.json delete mode 100644 packages/modules/tsconfig.json delete mode 100644 packages/particle-auth/.esbuild.js delete mode 100644 packages/particle-auth/CHANGELOG.md delete mode 100644 packages/particle-auth/README.md delete mode 100644 packages/particle-auth/package.json delete mode 100644 packages/particle-auth/src/index.ts delete mode 100644 packages/particle-auth/tests/particle-auth.spec.ts delete mode 100644 packages/particle-auth/tsconfig.build.json delete mode 100644 packages/particle-auth/tsconfig.json delete mode 100644 packages/paymaster/.esbuild.js delete mode 100644 packages/paymaster/CHANGELOG.md delete mode 100644 packages/paymaster/Readme.md delete mode 100644 packages/paymaster/package.json delete mode 100644 packages/paymaster/src/index.ts delete mode 100644 packages/paymaster/src/interfaces/IHybridPaymaster.ts delete mode 100644 packages/paymaster/src/interfaces/IPaymaster.ts delete mode 100644 packages/paymaster/src/utils/Types.ts delete mode 100644 packages/paymaster/tests/paymaster.e2e.spec.ts delete mode 100644 packages/paymaster/tests/paymaster.spec.ts delete mode 100644 packages/paymaster/tsconfig.build.json delete mode 100644 packages/paymaster/tsconfig.json delete mode 100644 packages/transak/.esbuild.js delete mode 100644 packages/transak/CHANGELOG.md delete mode 100644 packages/transak/README.md delete mode 100644 packages/transak/package.json delete mode 100644 packages/transak/src/index.ts delete mode 100644 packages/transak/src/interface.ts delete mode 100644 packages/transak/tests/transak.spec.ts delete mode 100644 packages/transak/tsconfig.build.json delete mode 100644 packages/transak/tsconfig.json delete mode 100755 rebuild.sh create mode 100644 src/account/BaseSmartContractAccount.ts rename {packages/account/src => src/account}/BiconomySmartAccountV2.ts (55%) rename {packages/account/src/abi => src/account}/Factory.ts (76%) rename {packages/account/src/abi => src/account}/SmartAccount.ts (58%) rename {packages/account/src => src/account}/abi/AccountResolver.ts (81%) create mode 100644 src/account/abi/EntryPointAbi.ts create mode 100644 src/account/abi/Factory.ts create mode 100644 src/account/abi/SmartAccount.ts create mode 100644 src/account/index.ts create mode 100644 src/account/signers/local-account.ts create mode 100644 src/account/signers/wallet-client.ts rename {packages/account/src => src/account}/utils/Constants.ts (58%) create mode 100644 src/account/utils/EthersSigner.ts create mode 100644 src/account/utils/HttpRequests.ts rename {packages/common/src => src/account}/utils/Logger.ts (69%) create mode 100644 src/account/utils/Types.ts create mode 100644 src/account/utils/Utils.ts create mode 100644 src/account/utils/convertSigner.ts create mode 100644 src/account/utils/getChain.ts create mode 100644 src/account/utils/index.ts rename {packages/bundler/src => src/bundler}/Bundler.ts (55%) create mode 100644 src/bundler/IBundler.ts create mode 100644 src/bundler/index.ts create mode 100644 src/bundler/interfaces/IBundler.ts rename {packages/bundler/src => src/bundler}/utils/Constants.ts (61%) rename {packages/bundler/src => src/bundler}/utils/HelperFunction.ts (52%) rename {packages/bundler/src => src/bundler}/utils/Types.ts (51%) create mode 100644 src/bundler/utils/Utils.ts create mode 100644 src/bundler/utils/getAAError.ts create mode 100644 src/index.ts create mode 100644 src/modules/BaseValidationModule.ts create mode 100644 src/modules/BatchedSessionRouterModule.ts rename {packages/modules/src => src/modules}/ECDSAOwnershipValidationModule.ts (55%) create mode 100644 src/modules/MultichainValidationModule.ts rename {packages/modules/src => src/modules}/PasskeyValidationModule.ts (100%) rename {packages/modules/src => src/modules}/SessionKeyManagerModule.ts (54%) create mode 100644 src/modules/index.ts rename {packages/modules/src => src/modules}/interfaces/ISessionStorage.ts (71%) rename {packages/modules/src => src/modules}/interfaces/ISessionValidationModule.ts (84%) create mode 100644 src/modules/interfaces/IValidationModule.ts create mode 100644 src/modules/session-storage/SessionFileStorage.ts create mode 100644 src/modules/session-storage/SessionLocalStorage.ts create mode 100644 src/modules/session-storage/SessionMemoryStorage.ts rename {packages/modules/src => src/modules}/session-validation-modules/ERC20SessionValidationModule.ts (54%) create mode 100644 src/modules/utils/Constants.ts create mode 100644 src/modules/utils/Helper.ts rename {packages/modules/src => src/modules}/utils/Types.ts (58%) rename {packages/modules/src => src/modules}/utils/Uid.ts (62%) rename {packages/paymaster/src => src/paymaster}/BiconomyPaymaster.ts (55%) create mode 100644 src/paymaster/index.ts create mode 100644 src/paymaster/interfaces/IHybridPaymaster.ts create mode 100644 src/paymaster/interfaces/IPaymaster.ts rename {packages/paymaster/src => src/paymaster}/utils/Constants.ts (83%) rename {packages/paymaster/src => src/paymaster}/utils/Helpers.ts (77%) create mode 100644 src/paymaster/utils/Types.ts create mode 100644 tests/account/read.test.ts create mode 100644 tests/account/write.test.ts create mode 100644 tests/bundler/read.test.ts create mode 100644 tests/bundler/write.test.ts delete mode 100644 tests/chains.config.ts create mode 100644 tests/globalSetup.ts delete mode 100644 tests/index.d.ts create mode 100644 tests/modules/read.test.ts create mode 100644 tests/modules/write.test.ts create mode 100644 tests/paymaster/read.test.ts create mode 100644 tests/paymaster/write.test.ts delete mode 100644 tests/setup-e2e-tests.ts delete mode 100644 tests/setup-unit-tests.ts create mode 100644 tests/setupFiles.ts create mode 100644 tests/vitest.config.ts delete mode 100644 tsconfig.eslint.json delete mode 100644 tsconfig.json delete mode 100644 tsconfig.settings.json create mode 100644 tsconfig/tsconfig.base.json create mode 100644 tsconfig/tsconfig.cjs.json create mode 100644 tsconfig/tsconfig.esm.json create mode 100644 tsconfig/tsconfig.json create mode 100644 tsconfig/tsconfig.types.json rename packages/account/typedoc.json => typedoc.json (100%) delete mode 100644 yarn.lock diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 000000000..e5b6d8d6a --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 000000000..765c9d223 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { + "onlyUpdatePeerDependentsWhenOutOfRange": true + }, + "ignore": [] +} diff --git a/.env.example b/.env.example index fdf442b9d..764c9ab79 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,7 @@ E2E_PRIVATE_KEY_ONE= E2E_PRIVATE_KEY_TWO= -E2E_BICO_PAYMASTER_KEY_MUMBAI= +BUNDLER_URL=https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 +E2E_BICO_PAYMASTER_KEY_AMOY= E2E_BICO_PAYMASTER_KEY_BASE= -E2E_BICO_PAYMASTER_KEY_OP= -BICONOMY_SDK_DEBUG=true -WITH_MAINNET_TESTS=false \ No newline at end of file +CHAIN_ID=80002 +CODECOV_TOKEN= \ No newline at end of file diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index bc013db12..000000000 --- a/.eslintignore +++ /dev/null @@ -1,14 +0,0 @@ -# Ignore node_modules in the root and in all packages -**/node_modules/ - -# Ignore build or dist directories -**/dist/ -**/build/ -**/coverage/ - -# Ignore any auto-generated files -**/typechain/ - -# Ignore any config files -*.config.js -*.config.ts \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index ce0d3c84a..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,49 +0,0 @@ -module.exports = { - parser: "@typescript-eslint/parser", - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "airbnb-typescript/base", - "plugin:import/typescript", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:prettier/recommended", - ], - parserOptions: { - ecmaVersion: 2020, - sourceType: "module", - project: "./tsconfig.eslint.json", - }, - env: { - node: true, - es6: true, - }, - plugins: ["@typescript-eslint", "prettier", "security", "import"], - rules: { - "prettier/prettier": "error", - "no-var": "error", - "prefer-const": "error", - "no-unused-vars": ["warn", { argsIgnorePattern: "^_" }], // needs to be set to "error" later - "no-console": "warn", - "@typescript-eslint/naming-convention": "off", // needs to be removed later - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }], - "security/detect-object-injection": "warn", - "security/detect-unsafe-regex": "error", - "security/detect-object-injection": "off", // turning off Injection Sink rule - "@typescript-eslint/no-throw-literal": "off", // temp deactivated needs to be removed once fixed - "@typescript-eslint/ban-ts-ignore": "off", - "@typescript-eslint/ban-ts-comment": "off", - "import/extensions": ["error", "ignorePackages"], - "import/no-unresolved": "off", - }, - settings: {}, - overrides: [ - { - files: ["*.ts", "*.tsx"], - rules: { - "@typescript-eslint/explicit-function-return-type": ["warn", { allowExpressions: true }], - }, - }, - ], -}; diff --git a/.github/ISSUE_TEMPLATE/1_general_issue.yml b/.github/ISSUE_TEMPLATE/1_general_issue.yml new file mode 100644 index 000000000..1e2fac688 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1_general_issue.yml @@ -0,0 +1,26 @@ +name: 💡 General Inquiry & Suggestions +description: Share general questions or suggestions that don't fit other categories +title: "[GENERAL] " +labels: ["question", "enhancement"] +body: + - type: markdown + attributes: + value: "Got a question or suggestion? We're all ears!" + - type: textarea + attributes: + label: Inquiry or Suggestion + description: What would you like to share with us? + placeholder: "I'm wondering about..." + validations: + required: false + - type: input + attributes: + label: Relevant Links or References + description: Optionally, add any relevant links or references. + placeholder: "e.g., https://github.com/example" + - type: checkboxes + attributes: + label: Code of Conduct + options: + - label: I agree to follow this project's Code of Conduct. + required: true diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/2_bug_report.yml similarity index 94% rename from .github/ISSUE_TEMPLATE/bug_report.yml rename to .github/ISSUE_TEMPLATE/2_bug_report.yml index 45f4d6bf0..038107e78 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/2_bug_report.yml @@ -1,6 +1,7 @@ -name: Bug Report -description: File a bug/issue -title: "bug: <title>" +name: 🐛 Bug Report & Test Failures +description: Report unexpected behaviors or failing tests +title: "[BUG] " +labels: ["bug", "help wanted"] body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/3_feature_request.yml b/.github/ISSUE_TEMPLATE/3_feature_request.yml new file mode 100644 index 000000000..9d1cc0b6e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/3_feature_request.yml @@ -0,0 +1,31 @@ +name: ✨ Feature Requests & Performance Improvements +description: Suggest a new feature or performance enhancement +title: "[FEATURE] " +labels: ["enhancement", "good first issue"] +body: + - type: markdown + attributes: + value: "Your suggestions inspire us to improve. Share your ideas below!" + - type: input + attributes: + label: Feature or Improvement Description + description: Describe the feature or improvement you're suggesting. + placeholder: "e.g., Add support for platform Z." + validations: + required: true + - type: textarea + attributes: + label: Benefits & Outcomes + description: Explain the benefits of your suggestion and the expected outcomes. + placeholder: "This improvement will improve performance by 30%..." + - type: input + attributes: + label: Any References? + description: Provide links or references to similar features or standards. + placeholder: "EIP-1234, https://github.com/example" + - type: checkboxes + attributes: + label: Code of Conduct + options: + - label: I agree to follow this project's Code of Conduct. + required: true diff --git a/.github/ISSUE_TEMPLATE/4_security_report.yml b/.github/ISSUE_TEMPLATE/4_security_report.yml new file mode 100644 index 000000000..6fc0ef4fa --- /dev/null +++ b/.github/ISSUE_TEMPLATE/4_security_report.yml @@ -0,0 +1,31 @@ +name: 🔒 Security Pre-Screening +description: Pre-screening for security-related reports +title: "[SECURITY PRE-SCREEN] " +labels: ["security", "triage needed"] +body: + - type: markdown + attributes: + value: "Security is our top priority. If you've discovered a potential security issue please proceed." + - type: checkboxes + attributes: + label: Security Level Acknowledgement + options: + - label: "I understand this issue will be public. It is NOT critical or high risk and does not endanger deployed contracts. If it is please email: security@biconomy.io" + required: true + - type: input + attributes: + label: Overview + description: Provide a summary of the non-critical security concern or question. + placeholder: "e.g., Questions about the audit process." + validations: + required: true + - type: textarea + attributes: + label: Additional Details + description: Offer more detail on your concern or question. + placeholder: "Provide any additional context..." + - type: input + attributes: + label: Suggestions for Mitigation + description: (Optional) Suggest ways to address the concern. + placeholder: "Potential mitigation steps include..." diff --git a/.github/ISSUE_TEMPLATE/5_document_improvement.yml b/.github/ISSUE_TEMPLATE/5_document_improvement.yml new file mode 100644 index 000000000..a4b0b5257 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/5_document_improvement.yml @@ -0,0 +1,33 @@ +name: 📚 Documentation Improvement +description: Propose improvements or report issues with documentation +title: "[DOCS] " +labels: ["documentation"] +body: + - type: markdown + attributes: + value: "Help us enhance our documentation for everyone." + - type: input + attributes: + label: Documentation Page/Section + description: Which page or section are you referring to? + placeholder: "e.g., README.md, TSDoc guidelines." + validations: + required: true + - type: textarea + attributes: + label: Suggested Improvements + description: Detail the improvements or corrections needed. + placeholder: "The section on XYZ could clarify..." + validations: + required: true + - type: input + attributes: + label: Additional Comments + description: Any other comments or suggestions? + placeholder: "Consider adding examples for..." + - type: checkboxes + attributes: + label: Code of Conduct + options: + - label: I agree to follow this project's Code of Conduct. + required: true diff --git a/.github/ISSUE_TEMPLATE/6_build_deployment_issue.yml b/.github/ISSUE_TEMPLATE/6_build_deployment_issue.yml new file mode 100644 index 000000000..e0034b17e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/6_build_deployment_issue.yml @@ -0,0 +1,33 @@ +name: 🛠 Build & Deployment Issues +description: Report issues +title: "[BUILD/DEPLOY] " +labels: ["bug", "help wanted"] +body: + - type: markdown + attributes: + value: "Help us identify build or deployment problems to improve our processes." + - type: input + attributes: + label: Issue Summary + description: Briefly describe the issue encountered. + placeholder: "e.g., Failed to deploy contract due to..." + validations: + required: true + - type: textarea + attributes: + label: Error Logs & Messages + description: Provide any error logs or messages seen. + placeholder: "Error: Failed to..." + validations: + required: true + - type: input + attributes: + label: Environment & Tools + description: Mention the tools and environment where the issue occurred. + placeholder: "e.g., Truffle v5.3, Rinkeby testnet" + - type: checkboxes + attributes: + label: Code of Conduct + options: + - label: I agree to follow this project's Code of Conduct. + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 5b7de7d5d..000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,8 +0,0 @@ -blank_issues_enabled: false -contact_links: - - name: Ask Question - url: https://github.com/bcnmy/biconomy-client-sdk/discussions - about: Ask questions and discuss with other community members - - name: Request Feature - url: https://github.com/bcnmy/biconomy-client-sdk/discussions - about: Requests features or brainstorm ideas for new functionality diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 3e93355fb..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: Feature Request -about: Propose an enhancement or new feature to improve the project -title: "Feature: <Your Feature>" -labels: feature-request, needs-review -assignees: "" ---- - -**Problem You're Facing** - -<!-- Briefly describe the problem you're trying to solve or the limitation you've encountered. --> - -**Proposed Solution** - -<!-- What would you like to see happen? --> - -**Alternatives Considered** - -<!-- Any other solutions or features you've considered. --> - -## Use Cases - -<!-- Help us understand the broader context by providing some typical use cases where this feature would be helpful. --> - -**Additional Info** - -<!-- Provide any additional details, context, or screenshots about the feature request. --> diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md new file mode 100644 index 000000000..fca427abe --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -0,0 +1,22 @@ +## Pull Request for Smart Contract Improvement + +**Describe your changes:** + +<!-- Briefly describe what you're changing or fixing. --> + +**Link any related issues:** + +<!-- Link any related issues here. --> + +**Testing:** + +<!-- Describe how the changes were tested. Include steps if applicable. --> + +**Note:** Please ensure all tests and lint checks pass before requesting a review. If there are any errors, fix them prior to submission. + +**Checklist:** + +- [ ] I have performed a self-review of my own code. +- [ ] I have added tests that prove my fix is effective or that my feature works. +- [ ] I have made corresponding changes to the documentation, if applicable. +- [ ] My changes generate no new warnings or errors. diff --git a/.github/actions/build/action.yml b/.github/actions/build/action.yml new file mode 100644 index 000000000..1cd962cb5 --- /dev/null +++ b/.github/actions/build/action.yml @@ -0,0 +1,16 @@ +name: "Build" +description: "Prepare repository, all dependencies and build" + +runs: + using: "composite" + steps: + - name: Set up Bun + uses: oven-sh/setup-bun@v1 + + - name: Install dependencies + shell: bash + run: bun install --frozen-lockfile + + - name: Build + shell: bash + run: bun run build diff --git a/.github/actions/install-dependencies/action.yml b/.github/actions/install-dependencies/action.yml new file mode 100644 index 000000000..303914370 --- /dev/null +++ b/.github/actions/install-dependencies/action.yml @@ -0,0 +1,14 @@ +name: "Install dependencies" +description: "Prepare repository and all dependencies" + +runs: + using: "composite" + steps: + - name: Set up Bun + uses: oven-sh/setup-bun@v1 + + - name: Install dependencies + shell: bash + run: | + bun install buffer + bun install --frozen-lockfile diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 9b66596c9..000000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,35 +0,0 @@ -# Summary - -<!-- Please provide a brief summary of the changes and the issue number this PR addresses. --> - -Related Issue: # (issue number) - -## Change Type - -- [ ] Bug Fix -- [ ] Refactor -- [ ] New Feature -- [ ] Breaking Change -- [ ] Documentation Update -- [ ] Performance Improvement -- [ ] Other - -# Checklist - -- [ ] My code follows this project's style guidelines -- [ ] I've reviewed my own code -- [ ] I've added comments for any hard-to-understand areas -- [ ] I've updated the documentation if necessary -- [ ] My changes generate no new warnings -- [ ] I've added tests that prove my fix is effective or my feature works -- [ ] All unit tests pass locally with my changes -- [ ] Any dependent changes have been merged and published - -# Additional Information - -<!-- Any additional information or context about the PR. --> - -# Branch Naming - -<!-- Make sure your branch name follows the pattern: `features/`, `fixes/`, or `releases/`. --> -<!-- **Note**: The person creating the PR is responsible for merging and deleting the branch. Ensure the code has been tested, commented, linted, and documents updated if needed. --> diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..08c18cd34 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,14 @@ +name: build +on: + workflow_dispatch: + pull_request: + types: [opened, reopened, synchronize, ready_for_review] +jobs: + build: + name: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Build + uses: ./.github/actions/build diff --git a/.github/workflows/check_branch_name.yml b/.github/workflows/check_branch_name.yml deleted file mode 100644 index 39422432d..000000000 --- a/.github/workflows/check_branch_name.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Check Branch Name - -on: - create: - types: [branch] - -jobs: - check-branch-name: - runs-on: ubuntu-latest - if: github.event.ref_type == 'branch' - steps: - - name: Ensure branch name follows GitFlow conventions - run: | - BRANCH_NAME="${{ github.ref#refs/heads/ }}" - echo "Created branch: $BRANCH_NAME" - - # Checking against GitFlow naming conventions for branches - if [[ ! $BRANCH_NAME =~ ^(features/|fixes/|releases/) ]]; then - echo "error: Branch names should follow GitFlow naming convention (features/, fixes/, releases/)." - exit 1 - fi diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 000000000..653e7b1e3 --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,44 @@ +name: coverage +on: + workflow_dispatch: + push: + branches: + - main +jobs: + coverage: + name: coverage + permissions: write-all + runs-on: ubuntu-latest + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + steps: + - uses: actions/checkout@v3 + + - name: Install dependencies + uses: ./.github/actions/install-dependencies + + - name: Run the tests + run: bun run test:coverage + env: + E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} + E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} + BUNDLER_URL: https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 + E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} + E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} + CHAIN_ID: 80002 + + - name: report coverage + uses: davelosert/vitest-coverage-report-action@v2 + with: + json-summary-path: ./coverage/coverage-summary.json + json-final-path: "./coverage/coverage-final.json" + vite-config-path: ./tests/vitest.config.ts + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v4.0.1 + with: + token: ${{ secrets.CODECOV_TOKEN }} + verbose: true + slug: bcnmy/biconomy-client-sdk diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 188b963b1..078b083ba 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,26 +1,30 @@ -name: Build and Deploy Documentation +name: deploy docs on: workflow_dispatch: push: branches: - - docs + - main permissions: contents: write jobs: - build-docs-and-deploy: + deploy-docs: runs-on: ubuntu-latest steps: - - name: Checkout 🛎️ - uses: actions/checkout@v3 + - uses: actions/checkout@v3 + - run: git config --global user.email "gh@runner.com" + - run: git config --global user.name "gh-runner" - - name: Install and Build - run: | - yarn - yarn build - yarn --cwd ./packages/account docs + - name: Install dependencies + uses: ./.github/actions/install-dependencies + + - name: Set remote url + run: git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/bcnmy/biconomy-client-sdk.git + + - name: Run the tests + run: bun run docs:deploy - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4 with: - folder: ./packages/account/docs + folder: ./docs diff --git a/.github/workflows/mainnet_tests.yml b/.github/workflows/mainnet_tests.yml deleted file mode 100644 index 3118a1e94..000000000 --- a/.github/workflows/mainnet_tests.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: E2E Test workflow - with mainnet tests -on: - workflow_dispatch: -jobs: - e2e_test: - name: E2E tests - with mainnet tests - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [18.x] - - steps: - - name: Checkout - uses: "actions/checkout@main" - - - name: Set Node.js - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - - name: Install dependencies - run: yarn install --frozen-lockfile && yarn build - - - name: Run tests - env: - E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} - E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - E2E_BICO_PAYMASTER_KEY_MUMBAI: ${{ secrets.E2E_BICO_PAYMASTER_KEY_MUMBAI }} - E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} - E2E_BICO_PAYMASTER_KEY_OP: ${{ secrets.E2E_BICO_PAYMASTER_KEY_OP }} - WITH_MAINNET_TESTS: true - run: yarn test:e2e diff --git a/.github/workflows/mark_stale.yml b/.github/workflows/mark_stale.yml deleted file mode 100644 index 1864296c5..000000000 --- a/.github/workflows/mark_stale.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Mark Inactive Issues and PRs - -on: - schedule: - - cron: "0 0 * * *" - -jobs: - stale: - runs-on: ubuntu-latest - permissions: - issues: write - pull-requests: write - - steps: - - uses: actions/stale@v5 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-issue-message: "This issue has been inactive for 30 days. It will be closed due to inactivity. If this issue is still relevant, please comment to keep it open. Alternatively, you can create a new issue with updated information." - stale-pr-message: "This PR has been inactive for 30 days. If it's waiting for a review, please reach out to the team. Otherwise, please update the PR or it will be closed due to inactivity." - stale-issue-label: "inactive-issue" - stale-pr-label: "inactive-pr" - days-before-stale: 30 diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml new file mode 100644 index 000000000..3e77f7837 --- /dev/null +++ b/.github/workflows/pr-lint.yml @@ -0,0 +1,17 @@ +name: pr lint +on: + workflow_dispatch: + pull_request: + types: [opened, reopened, synchronize, ready_for_review, edited] +jobs: + enforce_title: + name: pr lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Install dependencies + uses: ./.github/actions/install-dependencies + + - name: Use commitlint to check PR title + run: echo "${{ github.event.pull_request.title }}" | bun commitlint diff --git a/.github/workflows/pull_request_approved.yml b/.github/workflows/pull_request_approved.yml deleted file mode 100644 index 84688b90b..000000000 --- a/.github/workflows/pull_request_approved.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: E2E Test workflow -on: - pull_request_review: - types: [submitted] - workflow_dispatch: -jobs: - e2e_test: - if: github.event.review.state == 'approved' - name: E2E tests - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [18.x] - - steps: - - name: Checkout - uses: "actions/checkout@main" - - - name: Set Node.js - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - - name: Install dependencies - run: yarn install --frozen-lockfile && yarn build - - - name: Run tests - env: - E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} - E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - E2E_BICO_PAYMASTER_KEY_MUMBAI: ${{ secrets.E2E_BICO_PAYMASTER_KEY_MUMBAI }} - E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} - E2E_BICO_PAYMASTER_KEY_OP: ${{ secrets.E2E_BICO_PAYMASTER_KEY_OP }} - run: yarn test:e2e diff --git a/.github/workflows/push_check.yml b/.github/workflows/push_check.yml deleted file mode 100644 index 35705a430..000000000 --- a/.github/workflows/push_check.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Test workflow -on: [push, workflow_dispatch] - -jobs: - lint: - name: Lint sources - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [18.x] - - steps: - - name: Checkout - uses: "actions/checkout@main" - - - name: Set Node.js - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - name: Install dependencies - run: yarn install --frozen-lockfile - - name: Lint sources - run: yarn run lint - - unit_test: - name: Unit tests - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [18.x] - - steps: - - name: Checkout - uses: "actions/checkout@main" - - - name: Set Node.js - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - - name: Install dependencies - run: yarn install --frozen-lockfile && yarn build - - name: Run tests - run: yarn test diff --git a/.github/workflows/size-report.yml b/.github/workflows/size-report.yml new file mode 100644 index 000000000..5dabd450e --- /dev/null +++ b/.github/workflows/size-report.yml @@ -0,0 +1,29 @@ +name: size report +on: + workflow_dispatch: + pull_request: + types: [opened, reopened, synchronize, ready_for_review] + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + size-report: + name: size report + runs-on: ubuntu-latest + timeout-minutes: 5 + permissions: write-all + + steps: + - name: Clone repository + uses: actions/checkout@v3 + + - name: Install dependencies + uses: ./.github/actions/install-dependencies + + - name: Report bundle size + uses: andresz1/size-limit-action@master + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + package_manager: bun diff --git a/.github/workflows/test-read.yml b/.github/workflows/test-read.yml new file mode 100644 index 000000000..a972a2fea --- /dev/null +++ b/.github/workflows/test-read.yml @@ -0,0 +1,28 @@ +name: test:read +on: + workflow_dispatch: + pull_request: + types: [opened, reopened, synchronize, ready_for_review] +jobs: + test-read: + name: test-read + permissions: write-all + runs-on: ubuntu-latest + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + steps: + - uses: actions/checkout@v3 + + - name: Install dependencies + uses: ./.github/actions/install-dependencies + + - name: Run the tests + run: bun run test:ci -t=Read + env: + E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} + E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} + BUNDLER_URL: https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 + E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} + E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} + CHAIN_ID: 80002 diff --git a/.github/workflows/test-write.yml b/.github/workflows/test-write.yml new file mode 100644 index 000000000..12487e077 --- /dev/null +++ b/.github/workflows/test-write.yml @@ -0,0 +1,58 @@ +name: test-write +on: + workflow_dispatch: + pull_request_review: + types: [submitted] +jobs: + test-write: + name: test-write + permissions: write-all + runs-on: ubuntu-latest + concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-test-write + cancel-in-progress: true + steps: + - uses: actions/checkout@v3 + + - name: Install dependencies + uses: ./.github/actions/install-dependencies + + - name: Run the account tests + run: bun run test:ci -t=Account:Write + env: + E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} + E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} + BUNDLER_URL: https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 + E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} + E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} + CHAIN_ID: 80002 + + - name: Run the bundler tests + run: bun run test:ci -t=Bundler:Write + env: + E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} + E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} + BUNDLER_URL: https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 + E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} + E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} + CHAIN_ID: 80002 + + - name: Run the paymaster tests + run: bun run test:ci -t=Paymaster:Write + env: + E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} + E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} + BUNDLER_URL: https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 + E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} + E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} + CHAIN_ID: 80002 + + - name: Run the modules tests + run: bun run test:ci -t=Modules:Write + env: + E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} + E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} + BUNDLER_URL: https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 + E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} + E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} + CHAIN_ID: 80002 diff --git a/.gitignore b/.gitignore index ac3583499..41980e0af 100644 --- a/.gitignore +++ b/.gitignore @@ -1,75 +1,180 @@ +_cjs +_esm +_types + # Logs + logs -*.log +_.log +npm-debug.log_ yarn-debug.log* yarn-error.log* -lockfiles +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache # Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json -# Coverage directory used by tools like istanbul +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 coverage +lib-cov + +# Coverage directory used by tools like istanbul *.lcov # nyc test coverage + .nyc_output -# Compiled binary addons -build/ -dist/ +# 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/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo # Optional npm cache directory + .npm # Optional eslint cache + .eslintcache +# Optional stylelint cache + +.stylelintcache + +# 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 +# dotenv environment variable files + .env -.env.test +.env.development.local +.env.test.local +.env.production.local .env.local +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# 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 + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + # Stores VSCode versions used for testing VSCode extensions + .vscode .vscode-test # yarn v2 + .yarn/cache .yarn/unplugged .yarn/build-state.yml .yarn/install-state.gz .pnp.* -# macOS +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config .DS_Store -# Hardhat files -cache -artifacts -deployments - -# lockfiles -packages/account/package-lock.json -packages/modules/package-lock.json -packages/bundler/package-lock.json -packages/paymaster/package-lock.json -packages/particle-auth/package-lock.json -packages/transak/package-lock.json -package-lock.json - -#ignore sessionStorageData files -packages/modules/tests/utils/sessionStorageData/* -#except sessionStorageData folder -!packages/modules/tests/utils/sessionStorageData/.gitkeep - -openapi/ - -# docs -packages/account/docs/* \ No newline at end of file +docs + +tests/sessionStorageData \ No newline at end of file diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index b1215e876..000000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v18.16.0 \ No newline at end of file diff --git a/.nycrc.json b/.nycrc.json deleted file mode 100644 index 5d9f97afe..000000000 --- a/.nycrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "include": ["src/**/*.ts"] -} diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index bc013db12..000000000 --- a/.prettierignore +++ /dev/null @@ -1,14 +0,0 @@ -# Ignore node_modules in the root and in all packages -**/node_modules/ - -# Ignore build or dist directories -**/dist/ -**/build/ -**/coverage/ - -# Ignore any auto-generated files -**/typechain/ - -# Ignore any config files -*.config.js -*.config.ts \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 6b3f54736..000000000 --- a/.prettierrc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "printWidth": 150, - "semi": true, - "singleQuote": false, - "trailingComma": "all", - "tabWidth": 2 -} diff --git a/.size-limit.json b/.size-limit.json new file mode 100644 index 000000000..86c157518 --- /dev/null +++ b/.size-limit.json @@ -0,0 +1,31 @@ +[ + { + "name": "core (esm)", + "path": "./dist/_esm/index.js", + "limit": "10 kB", + "import": "*" + }, + { + "name": "core (cjs)", + "path": "./dist/_cjs/index.js", + "limit": "25 kB" + }, + { + "name": "smartAccount (tree-shaking)", + "path": "./dist/_esm/index.js", + "limit": "5 kB", + "import": "{ createSmartAccountClient }" + }, + { + "name": "bundler (tree-shaking)", + "path": "./dist/_esm/bundler/index.js", + "limit": "5 kB", + "import": "{ createBundler }" + }, + { + "name": "paymaster (tree-shaking)", + "path": "./dist/_esm/paymaster/index.js", + "limit": "5 kB", + "import": "{ createPaymaster }" + } +] diff --git a/CHANGELOG.md b/CHANGELOG.md index b950ebfb7..34ab2aa28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,25 +1,162 @@ -# Change Log +# @biconomy/account -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.1.1 (2023-07-03) + +- Added missing extensions ([fdbec6](https://github.com/bcnmy/biconomy-client-sdk/pull/451/commits/fdbec68625f4d7f436dc39d4c1779cdbb7c53e6d)) +- Fixed issue reporting format ([815e9440](https://github.com/bcnmy/biconomy-client-sdk/pull/450/commits/815e9440db03ebae98bb24edfcb3bbcabf9b2a61)) + +## 4.1.0 (2023-04-03) + +Features: + +- Added Speed optimisation, removing redundant gasEstimate call to bundler ([2371b2](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/2371b230cd5806ec4c7c95ba604d6f924b4be768)) +- Added smartAccount.getBalances() method ([4b8bae](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/4b8bae412577b846e700b168976cefa6b0803ff6)) +- Added smartAccount.getSupportedTokens() method ([6d2fb27](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/6d2fb27d6f9b424e440e45990ea06820a9d16d4b)) +- Added smartAccount.deploy() method ([be9dc4](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/be9dc4d74a3e5a22e69416983436997cf2ea417c)) +- Increased checking of the chainId from the bundler, paymaster and the provider ([5d2f3](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/5d2f34d8f0fb4f9ff7c7ddc00336471e57efdcfd)) +- Added entity name to Logger calls ([9278ec](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/9278ecc21e060ef75ab29a0d054d95d69cd4ae27)) +- Export a 'getChain' by id helper, which returns a viem chain ([ab2ba](https://github.com/bcnmy/biconomy-client-sdk/pull/449/commits/ab2ba2c518ce867c52bf90b9018dfc1b4ec3b4d4)) +- Add "stateOverride" optional param ([20fd54](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/20fd54c817d2dcbc6b7d9a247d890d91b19a9c2f)) + +Fixes: + +- Fix for encodeAbiParameters inside batched session module ([b27061](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/b27061e2eec7bafb0620e88e6d94e56e9a13cb76)) +- added flag to skip calldata approval patch ([75698](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/75698c827015533e32acb1f535bdf6b738876217)) +- Fixed the particle auth build + +Chores: + +- Added tests for ecdsa module ([1a8f29](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/1a8f296c26c9fedd57023f8f6423d7662a3adfee)) +- Increased test coverage ([329003](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/329003cebb6b4034496e41651985804cdec0d311)) +- Improved issue reporting guidelines ([8b9fb5d](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/8b9fb5de9556870611307c12e57df333619d9252)) +- Added e2e tests for optimism, ran from GH actions ([5051ba](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/5051ba5ff14220ad616f1ec3bc93a3f42d6f8887)) +- Added ABI SVM test ([49c96](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/49c968220e2db0aeee5cc6419f45df2b98f9792c)) +- Added tests for batched session router testing ([2eb9765](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/2eb9765d066fcb7b35d08223257aeb9b38c7a78b)) + +## 4.0.3 (2023-28-02) + +VERSION Bump Only. + +## 4.0.2 (2023-26-02) + +### Bug Fixes + +Particle Auth Fix + +## 4.0.1 (2023-02-22) ### Bug Fixes -- init param ([6bbccfb](https://github.com/bcnmy/biconomy-client-sdk/commit/6bbccfbff8834fa96160685f80bab7d64ec0f135)) +- Fix for RPC endpoints (Quiknode, Blast Sepolia etc) failing to respond because of custom headers being set + +## 4.0.0 (2023-02-06) + +### Features + +- Export bundler / paymaster instances + helpers from master package ([1d1f9d](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/1d1f9dafddf11bde0e1a75383bc935b22448bedd)) +- Export modules aliases from master package ([d6205c](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/d6205c4d76ab846ecdc10843c65e0277f3ceab00)) +- Added sendTransaction abstraction for buildUserOp + sendUserOp ([335c6e](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/335c6e7bfc5ca1ad240e7cbfd678d905c7f16812)) +- Reduced bundle size ([765a3e3](https://github.com/bcnmy/biconomy-client-sdk/commit/765a3e337fb9ad8f1f8dc92b5edcb1ed0940f94d)) +- Added bundler abstraction during SmartAccount init ([591bbb4](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/591bbb4e37774b16cbe801d583d31b3a14608bc1)) +- Added e2e tests that speak with prod bundler / paymasters ([4b4a53a](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/4b4a53aabdf9e22485599872332b3d63e8ddd87a)) +- Added support for simultaneous ethers + viem signers ([8e4b2c8](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/8e4b2c86b871130befbf3b733cf503d24f7226a5)) +- E2E tests for multichain modules ([ecc86e2](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/ecc86e2c7146046a981c3b6fd4bb29e4828b278b)) +- E2E tests for session validation modules ([4ad7ea7](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/4ad7ea7f8eb6a28854dcce83834b2b7ff9ad3287)) +- Added [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) ([638dae](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/638daee0ed6924f67c5151a2d0e5a02d32e4bf23)) +- Make txs more typesafe and default with valueOrData ([b1e5b5e](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b1e5b5e02ab3a7fb99faa1d45b55e3cbe8d6bc93)) +- Added createSmartAccountClient alias ([232472](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/232472c788bed0619cf6295ade076b6ec3a9e0f8)) +- Improve dx of using paymster to build userOps ([bb54888](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/bb548884e76a94a20329e49b18994503de9e3888)) +- Add ethers v6 signer support ([9727fd](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/9727fd51e47d62904399d17d48f5c9d6b9e591e5)) +- Improved dx of using gas payments with erc20 ([741806](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/741806da68457eba262e1a49be77fcc24360ba36)) + +### Chores + +- Removed SmartAccount Base class in favour of Alchemy's ([be82732](https://github.com/bcnmy/biconomy-client-sdk/commit/be827327fafa858b1551ade0c8389293034cacbb)) +- Migrate to viem v2 ([8ce04a](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/8ce04a56f6dcdfd1f44d9534f43e3c6eb8b3885d)) +- Remove common + core-types dependencies ([673514](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/6735141fbd21a855aadf69011bc06c69e20f811b)) +- Reincluded simulation flags ([25d2be](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/25d2bee339afd9d8c143fe6dad1898e28034be17)) + +### Bug Fixes + +- Make silently failing paymaster calls throw an error instead ([693bf0](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/693bf08591427c03e317d64d0491e23b1c96ea30)) +- Added string as a supported Transaction value type ([b905dc](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b905dcf3f7849396573fc8b51f808cc68061ee11)) +- Removed skipBundlerGasEstimation option ([b905dc](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b905dcf3f7849396573fc8b51f808cc68061ee11)) +- Ingest rpcUrl from SupportedSigners (ethers + viem) ([f56b4d](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/f56b4da08f47af577c01a641b81a3ef9e354cf97)) + +## 3.1.3 (2023-12-28) + +VERSION Bump Only. + +## 3.1.2 (2023-12-28) + +### Features + +- Make entryPointAddress optional in config([cf35c4a](https://github.com/bcnmy/biconomy-client-sdk/pull/336/commits/cf35c4a8266d27648035d8c9d63f1b9157553128)) + +### Bug Fixes + +- use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) +- change receipt status type from boolean to string to be compatible with bundler response. ([317f986](https://github.com/bcnmy/biconomy-client-sdk/pull/342/commits/317f986b7e8f08d3ccf1e68f12a0696f1116de6b)) + +## 3.1.1 (2023-11-09) + +### Bug Fixes + +- optimistic implementation for getNonce() and cache for isAccountDeployed ([5b1d4bf](https://github.com/bcnmy/biconomy-client-sdk/commit/5b1d4bfd7b5062d05bbb97286b833d879cd972b0)) + +### Reverts + +- update paymaster check in estimateUserOpGas ([2eb0237](https://github.com/bcnmy/biconomy-client-sdk/commit/2eb0237b37425da3558801bbe9d0ce5d6fd696c9)) + +## 3.1.0 (2023-09-20) + +Modular Account Abstraction is here. Contains BiconomySmartAccountV2 - an API for modular smart account. + +### Bug Fixes + +- add 10sec timeout limit for a test ([5d12fe7](https://github.com/bcnmy/biconomy-client-sdk/commit/5d12fe7d4b32e5c4628b971d22f6fc9cfcc6b414)) +- avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) +- BiconomySmartAccountV2 API Specs ([69a580e](https://github.com/bcnmy/biconomy-client-sdk/commit/69a580ea9e309141b500274aa95e20e24365b522)) +- build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) +- comments [#296](https://github.com/bcnmy/biconomy-client-sdk/issues/296) ([55b7376](https://github.com/bcnmy/biconomy-client-sdk/commit/55b7376336886226967b5bec5f11ba3ab750c5b6)) +- estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) +- gitInitCode cache issue ([4df3502](https://github.com/bcnmy/biconomy-client-sdk/commit/4df3502204e3c6c0c6faa90ba2c8aa0d6e826e48)) +- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) +- unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) + +### Features + +- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) + +## 3.0.0 (2023-08-28) + +VERSION Bump Only. + +Modular SDK - consists stable version of below updates done in Alphas. + +## 3.1.1-alpha.0 (2023-08-02) + +### Bug Fixes + +VERSION Bump Only. + +# 3.1.0-alpha.0 (2023-07-24) + +### Bug Fixes + +- avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) + +## 3.0.0-alpha.0 (2023-07-12) ### Bug Fixes -- build ([6fb012a](https://github.com/bcnmy/biconomy-client-sdk/commit/6fb012a7d2004d5a5bad616a0ed025f1ee0a93b8)) -- optional sign flag ([0d689d2](https://github.com/bcnmy/biconomy-client-sdk/commit/0d689d214fc7abf32f4f2deabcce61041b73d642)) -- smart account response type ([f457f79](https://github.com/bcnmy/biconomy-client-sdk/commit/f457f794e27999ccc069c4afb7eb7644e224b61e)) -- ui bugs ([f7a4f47](https://github.com/bcnmy/biconomy-client-sdk/commit/f7a4f47c6076fd78515131ec59b128f312687a06)) +- estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) +- unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) ### Features -- added email input and light mode ([741301a](https://github.com/bcnmy/biconomy-client-sdk/commit/741301a526774ed45805e477fac461b1d6afd8ac)) -- increased bg opacity ([aabbb2f](https://github.com/bcnmy/biconomy-client-sdk/commit/aabbb2fc7bab637de7a6c29fead0636979e6f6d0)) -- smart account signer ([9fcb5b1](https://github.com/bcnmy/biconomy-client-sdk/commit/9fcb5b106519b1d8fe658ab0924d722b0d102351)) -- social login ui added ([4772065](https://github.com/bcnmy/biconomy-client-sdk/commit/477206546e0518af5a1d835f7370d70d586420c0)) -- transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) -- web3auth modal UI ([7b7e510](https://github.com/bcnmy/biconomy-client-sdk/commit/7b7e5104ad5b1828e083f70a185328b566e9d456)) -- whitelist logic added ([53c2140](https://github.com/bcnmy/biconomy-client-sdk/commit/53c2140ef9b9d79d9d9c0e0c2c80e82b1df7f8b9)) +- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) +- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) +- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..6d58094ee --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at graeme.barnes@biconomy.io or joe.pegler@biconomy.io. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other project leadership members. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://contributor-covenant.org/version/1/4][version] + +[homepage]: https://contributor-covenant.org +[version]: https://contributor-covenant.org/version/1/4/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index a0c7d7050..000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,64 +0,0 @@ -# Contributing to Biconomy Projects 🚀 - -First off, thank you for considering contributing to Biconomy! We truly appreciate your effort and contributions from the community are what make Biconomy awesome. 🙌 - -Your contributions are valued and will help in driving the decentralized web forward. - -> If you're passionate about our mission but can't contribute directly, there are other ways to support: -> - ⭐ Star our projects on GitHub -> - 🐦 [Tweet about Biconomy](https://twitter.com/biconomy/) -> - 📌 Reference Biconomy in your project's readme -> - 🗣️ Share about Biconomy at meetups or with peers - -## Table of Contents - -- [Contributing to Biconomy Projects 🚀](#contributing-to-biconomy-projects-) - - [Table of Contents](#table-of-contents) - - [Have a Question?](#have-a-question) - - [Ready to Contribute?](#ready-to-contribute) - - [Legal Notice 📜](#legal-notice-) - - [Reporting Bugs 🐛](#reporting-bugs-) - - [Suggesting Enhancements 💡](#suggesting-enhancements-) - - [First Time Contributing? 🌱](#first-time-contributing-) - - [Improving Documentation 📚](#improving-documentation-) - - [Commit Messages 📝](#commit-messages-) - - [Join Biconomy's Team! 🚀](#join-biconomys-team-) - -## Have a Question? - -Before reaching out, please ensure you've gone through our [Documentation](https://docs.biconomy.io/). If you still have questions: - -1. Search for existing [Issues](https://github.com/bcnmy/scw-contracts/issues) that might answer your question. -2. Check out our [Forum](https://forum.biconomy.io/). -3. Join our [Discord](https://discord.com/invite/biconomy) or [Telegram](https://t.me/biconomy) communities. - -If you still need assistance, feel free to open an [Issue](https://github.com/bcnmy/scw-contracts/issues/new) with your question. - -## Ready to Contribute? - -### Legal Notice 📜 -By contributing, you agree that you've authored your contribution and that it can be provided under the project's license. - -### Reporting Bugs 🐛 - -Before submitting a bug report, ensure you're using the latest version and that you've read our [documentation](https://docs.biconomy.io/). If you've identified a bug that hasn't been reported, open a new [Issue](https://github.com/bcnmy/scw-contracts/issues/new) detailing the bug. - -### Suggesting Enhancements 💡 - -Have a feature in mind? First, ensure it aligns with Biconomy's mission and hasn't been suggested before. Then, open an [Issue](https://github.com/bcnmy/scw-contracts/issues/new) to discuss your enhancement. - -### First Time Contributing? 🌱 - -Welcome! We're thrilled to have you. If you're unsure where to start, look for issues labeled `good first issue`. - -### Improving Documentation 📚 - -Good documentation is key! If you spot areas for improvement or errors in our documentation, we'd love your input. If you wish to suggest changes, feel free to raise a PR on our [documentation repository](https://github.com/bcnmy/docs). - -### Commit Messages 📝 - -Ensure your commit messages are clear and descriptive. - -## Join Biconomy's Team! 🚀 - -Interested in joining our mission full-time? Check out our [current job openings](https://jobs.lever.co/biconomy). \ No newline at end of file diff --git a/LICENSE.md b/LICENSE similarity index 97% rename from LICENSE.md rename to LICENSE index cf907e971..84dbcc863 100644 --- a/LICENSE.md +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Biconomy +Copyright (c) 2024 Biconomy Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 5409568b0..889c0a096 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,47 @@ -# Biconomy SDK +[![Biconomy](https://img.shields.io/badge/Made_with_%F0%9F%8D%8A_by-Biconomy-ff4e17?style=flat)](https://biconomy.io) [![License MIT](https://img.shields.io/badge/License-MIT-blue?&style=flat)](./LICENSE) [![codecov](https://codecov.io/gh/bcnmy/biconomy-client-sdk/graph/badge.svg?token=DTdIR5aBDA)](https://codecov.io/gh/bcnmy/biconomy-client-sdk) -![Biconomy SDK](https://img.shields.io/badge/Biconomy-SDK-blue.svg) -![TypeScript](https://img.shields.io/badge/-TypeScript-blue) -![Test Coverage](https://img.shields.io/badge/Coverage-79.82%25-green.svg) +# SDK 🚀 -## 👋 Introduction +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/bcnmy/biconomy-client-sdk) The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. It is designed for seamless user experiences and offers non-custodial solutions for user onboarding, sending transactions (userOps), gas sponsorship and much more. +## 📚 Table of Contents + +- [SDK 🚀](#sdk-) + + - [📚 Table of Contents](#-table-of-contents) + - [🛠️ Quickstart](#-quickstart) + + - [Prerequisites](#prerequisites) + - [Installation](#installation) + + - [📄 Documentation and Resources](#-documentation-and-resources) + - [💼 Examples](#-examples) + + - [🛠️ Initialise a smartAccount](#-initialise-a-smartAccount) + - [📨 send some eth with sponsorship](#-send-some-eth-with-sponsorship) + - [🔢 send a multi tx and pay gas with a token](#️-send-a-multi-tx-and-pay-gas-with-a-token) + + - [License](#license) + - [Connect with Biconomy 🍊](#connect-with-biconomy-🍊) + ## 🛠️ Quickstart +### Installation + +1. **Add the package and install dependencies:** + +```bash +bun add @biconomy/account viem +``` + +2. **Install dependencies:** + +```bash +bun i +``` + ```typescript import { createSmartAccountClient } from "@biconomy/account"; @@ -23,39 +55,30 @@ const { wait } = await smartAccount.sendTransaction({ to: "0x...", value: 1 }); const { receipt: { transactionHash }, - userOpHash, + success, } = await wait(); ``` -## 🌟 Features +## Documentation and Resources -- **ERC4337 Account Abstraction**: Simplify user operations and gas payments. -- **Smart Accounts**: Enhance user experience with modular smart accounts. -- **Paymaster Service**: Enable third-party gas sponsorship. -- **Bundler Infrastructure**: Ensure efficient and reliable transaction bundling. +For a comprehensive understanding of our project and to contribute effectively, please refer to the following resources: -For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick start [here](https://docs.biconomy.io/quickstart). +- [**Biconomy Documentation**](https://docs.biconomy.io) +- [**Biconomy Dashboard**](https://dashboard.biconomy.io) +- [**API Documentation**](https://bcnmy.github.io/biconomy-client-sdk) +- [**Contributing Guidelines**](./CONTRIBUTING.md): Learn how to contribute to our project, from code contributions to documentation improvements. +- [**Code of Conduct**](./CODE_OF_CONDUCT.md): Our commitment to fostering an open and welcoming environment. +- [**Security Policy**](./SECURITY.md): Guidelines for reporting security vulnerabilities. +- [**Changelog**](./CHANGELOG.md): Stay updated with the changes and versions. -## 📚 Resources +## 💼 Examples -- [Biconomy Documentation](https://docs.biconomy.io/) -- [Biconomy Dashboard](https://dashboard.biconomy.io) -- [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) - -## ⚙️ installation - -```bash -npm i @biconomy/account -``` - -## 💼 Example Usages - -### [Initialise the smartAccount](https://bcnmy.github.io/biconomy-client-sdk/functions/createSmartAccountClient.html) +### [Initialise a smartAccount](https://bcnmy.github.io/biconomy-client-sdk/functions/createSmartAccountClient.html) | Key | Description | | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | [signer](https://bcnmy.github.io/biconomy-client-sdk/packages/account/docs/interfaces/SmartAccountSigner.html) | This signer will be used for signing userOps for any transactions you build. Will accept ethers.JsonRpcSigner as well as a viemWallet | -| [paymasterUrl](https://dashboard.biconomy.io) | You can pass in a paymasterUrl necessary for sponsoring transactions (retrieved from the biconomy dashboard) | +| [paymasterUrl](https://dashboard.biconomy.io) | You can pass in a paymasterUrl necessary for sponsoring transactions (retrieved from the biconomy dashboard) | | [bundlerUrl](https://dashboard.biconomy.io) | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | ```typescript @@ -74,7 +97,7 @@ const smartAccount = await createSmartAccountClient({ }); ``` -### [Send some ETH, have gas sponsored](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#sendTransaction) +### [Send some eth with sponsorship](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#sendTransaction) | Key | Description | | --------------------------------------------------------------------------------- | -------------------------------------------------------------- | @@ -91,10 +114,11 @@ const { wait } = await smartAccount.sendTransaction(oneOrManyTx, { const { receipt: { transactionHash }, userOpHash, + success, } = await wait(); ``` -### [Mint two NFTs, pay gas with token](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#getTokenFees) +### [Send a multi tx and pay gas with a token](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#getTokenFees) | Key | Description | | -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | @@ -103,36 +127,40 @@ const { ```typescript import { encodeFunctionData, parseAbi } from "viem"; - -const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address to) public"]), - functionName: "safeMint", - args: ["0x..."], -}); +const preferredToken = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a"; // USDC const tx = { to: nftAddress, - data: encodedCall, + data: encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: ["0x..."], + }), }; -const oneOrManyTx = [tx, tx]; // Mint twice -const paymasterServiceData = { - mode: PaymasterMode.ERC20, - preferredToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC + +const buildUseropDto = { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken, + }, }; -const buildUseropDto = { paymasterServiceData }; -const { wait } = await smartAccount.sendTransaction(oneOrManyTx, buildUseropDto); +const { wait } = await smartAccount.sendTransaction( + [tx, tx] /* Mint twice */, + buildUseropDto +); const { receipt: { transactionHash }, userOpHash, + success, } = await wait(); ``` -## 🤝 Contributing +## License -Community contributions are welcome! For guidelines on contributing, please read our [contribution guidelines](./CONTRIBUTING.md). +This project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details. -## 📜 License +## Connect with Biconomy 🍊 -This project is licensed under the MIT License. See the [LICENSE.md](./LICENSE.md) file for details. +[![Website](https://img.shields.io/badge/🍊-Website-ff4e17?style=for-the-badge&logoColor=white)](https://biconomy.io) [![Telegram](https://img.shields.io/badge/Telegram-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white)](https://t.me/biconomy) [![Twitter](https://img.shields.io/badge/Twitter-1DA1F2?style=for-the-badge&logo=twitter&logoColor=white)](https://twitter.com/biconomy) [![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/company/biconomy) [![Discord](https://img.shields.io/badge/Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/biconomy) [![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=for-the-badge&logo=youtube&logoColor=white)](https://www.youtube.com/channel/UC0CtA-Dw9yg-ENgav_VYjRw) [![GitHub](https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/bcnmy/) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..937edcaaf --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,57 @@ +# Security Policy + +## Reporting a Vulnerability + +The safety and security of our smart contract platform is our top priority. If you have discovered a security vulnerability, we appreciate your help in disclosing it to us responsibly. + +### Contact Us Directly for Critical or High-Risk Findings + +For critical or high-impact vulnerabilities that could affect our users, **please contact us directly** at: + +- Email: security@biconomy.io + +We'll work with you to assess and understand the scope of the issue. + +### For Other Issues + +For vulnerabilities that are less critical and do not immediately affect our users: + +1. Open an issue in our GitHub repository (`https://github.com/bcnmy/biconomy-client-sdk/issues`). + +2. Provide detailed information about the issue and steps to reproduce. + +If your findings are eligible for a bounty, we will follow up with you on the payment process. + +### Scope + +The bounty program covers code in the `main` branch of our repository. The vulnerability must not have already been addressed or fixed in the `develop` branch. + +### Eligibility + +To be eligible for a bounty, researchers must: + +- Report a security bug that has not been previously reported. + +- Not violate our testing policies (detailed below). + +- Follow responsible disclosure guidelines. + +### Testing Policies + +- Do not conduct testing on the mainnet or public testnets. Local forks should be used for testing. + +- Avoid testing that generates significant traffic or could lead to denial of service. + +- Do not disclose the vulnerability publicly until we have had the chance to address it. + +### Out of Scope + +- Known issues listed in the issue tracker or already fixed in the `develop` branch. + +- Issues in third-party components. + +## Legal Notice + +By submitting a vulnerability report, you agree to comply with our responsible disclosure process. Public disclosure of the vulnerability without consent from us will render the vulnerability ineligible for a bounty. + +Thank you for helping to keep Biconomy 🍊 and the blockchain community safe! diff --git a/assets/readme/biconomy-client-sdk.png b/assets/readme/biconomy-client-sdk.png deleted file mode 100644 index ffe67d367fa6ac89b5e599ae9343b560665710a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61005 zcmXVWbwJbI`}W9@qeB?oJ$iIAO1is2>5vlXlrHI(Zjh92k#40M0Ride-Shpue{MVH zKG(UgIA{ATT3r=}jX{P1006KR6=XF50AwftfM||}1b;_=fQ|zG;#plqTMiEo@AWN_ zYy1uY0l}*($&n2Fa{v}5YK+V&4i4z`_4U|WR!zt6p#>mKf@xu&yr)H90s)-pGL&-z z%0+0MSbk<1T%LPLX0ig#joI^|)NjbBlXxkrxdH3y^Z|vh#KdGD;@29)>D#0j-iJ)6 zGLW5m%UoECs#&CsD=>2Ls|S|7GO~(h@Kg57GNOR+m^oz}Sckw=j32&S-K!AG>x4ve z5z#Pk(=iFe%AN;ip6NT3P|~tnf9!W>!gpjDQJ^GPR%QIeMx3U95YGALUE~T41|Tr! zb{NK(u7484O)e^DM?*p=rQ#tVZsx#%@4((Sufk|X3lfsH7NViJa8^-$gYK4i$btpn z5!RblW|CI*@y&hdlwlNyIdX8Tu<<H>f{>T-6W!k4E=b|CaVlPV=m1es{>lKxk^x1W z04I+xSK+S4?6m%AhyP>&W^Q%PJaksxZHk7mHjJI`U1Brz&vdBrll8Y9+>)4CrR0<x zAI3-QnfuJ>nx58I^4I|CHU;_==+A9{cbwmiJlf)AFHC4_l34&6dLJzrS`BGRuj4<- zGEi}o5!yRNvXH&G{A9Cbz;j{@AprtzYl=ThokmLjx%rx*=Td*28lIs4J4SCdP_ILs zBJI-GRFN#YMF4$M65+17#wV~OKxpk+4seql@58$kD!Ln{H{i}Oec#g>ElAVxmOD~! z?1wss6>Gx?6d+3$cu<B^Utj;)1xS>;F}8?)od85IA+&@8junZ7goK`800~mB+?<@D zp`l<X<6sQH-rj!2<?Wa_!LMvUw<wVq9-znzuqjI%qq%5p7sSHC@~;kX>IeJ#_pc9s ztCx$14|Lj%XCz$uX>)VaP}ej?^`E|JV3^dJii*mJjYz5_n>9~mIgA5JXK2GPGo{HF zZwr{8pAQZWPKb}!=SumYS#_dA@`oRA+Kra>A-2ul7{VjhsELqgbT{CPkYR21MXs|@ zA){5%Em!~Popy$i1S}k;6&V@zFIblaA7`O75rBu)0+&0Ir>3fwfPg@bfB`N5aP*`o zE2Zu8`y_XwHcOH;VnsDYaD%@-NYPdboI=JD9>k80S)APjk+)p_0E;yZ#^l;wby|2) zuX?)1RUW%_j4!*KNex%Ci%54_?+P3hiMZdmKi`tc-agv$7CRWoRDJDFz`1++_mim) z^2(c0x0{tkT=$lQXn<=Uv1r8n_-njx*dZ1%kXOMzWt3Z1##M!hXlS?0B7Z12&TE@5 zPEM~LnqeUwDSKa^rAw}<vuNn%7`-lC8xM1<1}Df0!at>v?pG~(BdZ1BandI46sC+0 zkoKJa$2WH>Uq{msJk*DU+bHc}C&`D}B2-B{GHiU~StCt5KlbQ1pOPeA4<+4qp|P@y zAZ~8!)toJ_hS^d+uz+|}g?Y?}*c`sdvx6e;l_4ukEd>I4*3sA+C~x&NxYAi6sp9BG zDpXt-5Cu=fn9w(5=h~K9-<6G<oV|mJ(q?2ldSkAWM*F4ef{XJc|2Kk^w8~tjh$1Ox z(HK!=;-OWy&*$38jLr)yIDEYkj)JRK0oCJMr|n5td6mHp1TiAos-rCcqK2DsNEZ`o z@jJ9RRry<&y;b+TiA?w0cQn#3svSeuDOCr!*3gDSRCo*NAyYPwL@0mtcq^+KEEyh9 zOlPmk&Qm?wkv`8}CUBa&L6AahHRD%44jBC{?`HLUGJPvluaHZ%MR4~{Ha$PGme!md zWGiVrIP=nu*s@Q2t%K>Y#^knHpeMl)9d5eWp*{yB1`d1+-*0z(zAiOcr&f(;|Eqx< zJG$7Akl&N5nP2Nsb~UI>6!8vQp2y{0A-U9jqujCi>}}!>8E^jflI%|n`r1KN!FL33 zwCssL%!76H*i+sXW8S#`Ch$mv{waqb@Ba>O3z|M*L>%5WM@8*qu8%e}#uc{Wt7w{2 zlvrei&_2J{`1g3MW@27N0_WzP@}r*4Xkrp`StMRP75C*f=<^*a<9^amA0!aTz@pKi zbAE)`jb`l70vRiy+Npy(OMJ6TMz`S*5e`9AVfn{;kUjDVy#pgindNxH#huzHv-Kkn z^vKLxQbQ0sQXf1Hpm7f!b*V*~K?@T*M2twfbQsbe=jq0*89*b26HmX4e63MmL<FO& zS9tLyfv{89MN4QGB`^;+|J*ju=s{8b#f*U}_+}xEDE@v458|kDFcrw@X!3;Tt2+4K z091#}9?5z9iqgk&zO+{;BI=Uyn$zgh%xzUR=YM>Zn-^W6ED)mz$jaDry=suu)7qYH zor1=3d(Kk5@DZ%sAfYJT7{*0MWUWKpD4-t_Cy4T%^Y0@bMW%Z;5QzQ$Lm?RSOT0Wf zM8he*lM4^hXnOr;CJZK|)sYzlHUMK?5|1u3q#e*F=10<Jg?R7}&aqhT<IqRBJt(!} z*roZ1z){rW;<=7`^G5O1zcr;MvtnU*!Omd)M0jOxemOE5rfTx_Exc9J)U-J?7H>z6 zOR6qLW#0W&oiyyiNq?k&K_DI3N1#7tDJsg9?}ZPPr0yrOP<eK2Zy4xG=D|TEQskHV z!Ov^3!B-D7>4g|%CU}_a3Ndxmm^h@vnT(@uEM2#5hZ_4Q<$p?2ZpOih`LIuZY5c{y z^E`R}#OsC@F=B>w?aOMPw2NyQzG)>yg<!OaE)6K*Z{cFf6KIReiJL~1DOp%;;CDrX z7?D0`P-K0=PeCHHCifp4>Sd;?X|IFhf8)3k;r~`tUQ5~Zf0hQ{s=4H2w*0ANCsNab ztt~`S@PRGi9s&^j`I=o9&h-M=iPV6whkjW>fYMK$!ikF=VJ7#V;XIWsZiP#;BGUiO z&;xUrj%LuGVrJ5l&Jxsml{|6;I^m2491ZCit1E&3M4rJ|-bHm>FUo*nMY6p37xIP` z|1Y&fD@`5{eI-`Oo%t5KNBHEwff0aT?zVEmJnDutC+2}7u^KCBpQ)AQ)ZlzCRv9de zVL4m|k1)Hh`{UBXb&0q{DY96lJNMpWoEpOwjVH>BdOUv#B{nwY-f)j)c|TMn=<((o z`hO!w5lKQmYvEA^zby!$YAKQzlYKQHfsCgb_)a4kxXtjL{~u1j(KdO>EmLyqwBQ=; zH@{oAnd_OAjibr{T(vh5lDdweFL($$B^U#I7T(zU=6R(=E;VbieVeFsQ3ALC<<mi} zUfEJ|?R2oxBE8$w;{VKp3`Hg|UfBE^gW(bTHRlz)F6cm}-^njXkzi_kpTmm}F=S|V z!}^ed_qP%AKeHk0qZ;{7`PE!eoh7Y%qddMSE>>$txk~BVS&W-}th1)14>lGZB6k>R z&lgS;!0t>4YJifKQeFh0vTvq&)-uO`5yM3fmaC5_$3->JdZmqB!?7s0w{!WDc}wWx zn5z@fLA&ICLaZ|TU*f)e<uON~n`Nrv!5}ugveMg)$nVcEu_fJ7{jsT1TXfDI8|{K- z?DJVrprZOZqQL$`%F^Ng!9-<7B(@IkV0C^ME@j`FLh~#>P(byObcsO`U*TScbY0Ct zl>2rsYpm`zBEM7f$Ml~XJP16Fus)~3+~OtC=|O$#`lueblW0FlU-gqmsehD+Vp`#i zb*XJ<_LnDQZg>;@F0vlwhvB;Xcf28~1mNhaySdNMjbh)3{2}Qd4VA2nfqcodLqi+| z(c*mZ5vP~F)FuvcS~ezhn6q(%sEF}({XvY9JJQ~*<xba><LSY$3M3x(b0?DL9w>NQ z%M-<<IXEsOg^gjSD!XS@*QsrhfzKLmFyN>2=1{+~3Nm&JIoAY>KZ-))#)}IW(=IDz zOy|kz{);Q>r~5Io#<cdr3wJBSaR_CI%06aP8KPPy@IA3IW(v0~I<)klPp}uB?ud(l zPdHe07ZeQ-bxgyo-qC}Xy|MzIh$2dL5{w)8|Ib5DqJwMSB>ZK>I}gck=o1yob|2T> zUkM22Y~3Im%OW4w2Gf}1N$BnmcZrOB*xT!=QFx?fy_o4p(6R`bF+S63w8=1w_7VF= ziJ~#!E6gk4p%8wfsdE$C2}VZ<bczxb99R43ZQ<`KPXBtA$@?l)JQ`v{AuN#mu=zE# z;{fDIJp}lx+JkKn`bytSFaJDDYbJ#rxos?2=MfHL$NND2Ci>5d7Elv;y4uUKvf(}r zq1zrotG^IR5>MHL%0KX=nTdO5Qk6KoKYcNAVuq&l(IY9v`~Q!iYC^?XsH>@zZc4N< zsJ@@I%>ymZl9TBnYV;SXe+_+@v0B`$<q|AEkiR*<)5Uc%`#nA<_5N?WZoC(QmKISs zE#^r^^Ns`2twLjpSI*oYsiXV$&-Lnme)Bw$vzseH3GHN7xgA_>?g#2b@6-dgBOCom z6o5iYafP<uXoR+>(kFBNgGz3hV1RV+W9r77(H2=jHSX!=;<p^xJG<rn&>8LjA-S#u z?vfVZbl+^!?R~fT;SIQ6MaMJN?V9fn>8=TrDO3Pf*l5IFTHTrXoZ}%FmR|GQ$y%Z? z9N3-SW~1h<BbJ8AxQPdmtP~=;9hS0t4+~N;Jm^%cb=<or#E@pUXMa=;R?F4K8?bwm zLd5|7e2H*M5N{9~+1>8)Nnrug&!pV}yKDGuvqS1nla@rc_nVU^8~clKes)3D30nWx zOsdV9<)$D8fn|li&M%H1D&>U;V~^slEhUz71JFmKgOlHttn$CE>%IH0_3+-tvzVx5 zk~>l(MnbQZ9@lNrBP>X5=;mV%B$`)d_xPpeIXN!3$nildJqye~&_NG+8DyR&6y+74 zrIQf+@nP8|OEfkf9)@*c=)?I;F_;ls-WjH%shq7feSrJe?Qh*4?;Ixb-8T7~MoZ}? zO77u=Lg{*MY)I;tQOTvTuBu>p=K7`NV{*+_V!i|AY1D{FZgt`pV%Q2>E%`=C1x~9n z5s*hrlipNU=1DaBk(;elY=O>^?~z%zgE%thk1PB8dctvH5-5fn4Kliu`R<d!y;Y2C zA>V>nw$zzt6$RyK8nAoL<blE$h^RzbU&0teW!}9Ai>WuPK8kw7)*P)LZ9JVAz!-AG z>@oC6-g^ftntL(`GWb1i3kVlZl3htvQZ%WW56PvND#EYw(8G0drD$mlv`w8lh|sp$ zJvUT<hQ%-YGx8PF#?NwaV`2&j)NPKyrU2cf3nnh;B(x{P4=+M1NNaQ;yjF!V{gV1b zO?8x#VwUr@L7bxe-pn<RkQRI{{xE7?0{kwt=h&Euq``~<P#VU?N22^0Xo;9CP#eIj z(5M!<InzpW%vF3d5Kfn2deUU<l4doy9+&3M{26eqilm5Wp3YknFs4e$PmdDB-<ssa zhK)6MiS|e3bxSKv9qLDgK4dwR8u~s4^Tw-^k?pf|uRK$`#?V{-k9~-oZ(k`DXe575 zELXMB_?rkxUtZSn#IMV_V4d_IhE$9m8?!_fp_$v$>wpR^JHf`P4f=$V@lEdww{1<W zQH)5%FSN{u@g@}*=_c9q;uU*&;?d_4V@hhnWHgXnv+WT=4TUaEwe7uy<?@8F8Jaf2 z=F7A4@3TWnXP*A`<Bbg{Ajxl@KkcNI#6nIRmSQA1ez1N99CriJ(`&{L2&Lw1R?abz zS#>2Usv1v5bM7N_9s_B>NuugbpZfHX9@m%V_Er!j+Jx@{AJvtHHv7Uux7wx?2DE)) zlSE$y1ykuWSn`9d5l=rIH{LZJnf#K4+=Q(T1kD-sVoXA5w|d=Nn85UCp7W!`)88bQ zMd?ZFrLcDabf0Yp@W*6AU1I|<ut(&WpU=sJWJ74)FJ5IMO!b8L@H4kkuQ)|K`F{-w zKK`avTex>{_!x?G$;Dxgf(ew05cqB`>rk&cYD{7Q$?H;M%>E?`P@-i<zFe^7@y(B; z!Ic4pB3pO)Zj29W+N#ejSsYq7Fy>3YgT7FPqo%GobIVf?ZsA5?<ySfGk|5op6GI$5 zj}>MU59o-n<;GOohdVW0A2`j2Fo3xpwsj|K$rp>P$}QmUXg>3P^8_)R#cuV_hdx)V zsAa29QZj4k5*HCwB~c5(5c>j`W!xR72+09FO5p`tT2E;_TUuLT)Qt0?&54%&5dQ_A zKjk?)x5@J;SjP+UjB5pX|EiH#@R3oAPOpKW!F1Pg(M7DbO9u&4X#c@Y+Q5($q3n!r zoGC9+{&@lJ%@li-c>6MTgbJGb7Fwork=u<Xtd{(kfeJs=qkulKaONCs_juiq9Oled zNRGQ;Dv+fl6u@=pnFsMI_7&2i!!*fB&;~S`Sai)gV|SHB*f4tPL>Tp;2%QG3y?MH; z7z4KPRP)h>6_3av!%otk2AUGhn<Sw4Zz93l6<Fu~4E{e*2gCPB?Okz&|NdC2^KcrJ z;K5}6m8s-626(MftPko_{<0|Gx(30h&y0EbbFH*YF-QsNa((<X=Xc?_68rZBA<s9Q z9*BK>mV-Nl5$PGvv;MEx6?uH7p^U@fWm7rqQ3h><(y9P*`l+KYdy*$!#(MBOaoW2L zw9vKSPbkfNPgMvalZX+j3$zuIYdj||bp>=B{B&K1kG1czsznr<JpUXb({!_u3h!%8 znnk>(E6WVofs^r+wt||=McEgRCp3+ReYMy1ofnV8+lDX@X~1>a3-23s02sy02^rOk zO-Z<Kh{p^#b*pAhe@-qo9oo8RL-q6!7_>hgphx}|y!;;RQVsm;{t!#W$?;10LooEA z_arjJBHZtvYwJcW<jD1RL@__6U_J^Z<<mY6NxUgDMwP)}ghXpKt71z(P2MBAJs?ZG z%jct+7Fp+IUqvm-)*WM(L%}HYixoCvgCs8^r>H*!4W>5}YtxOL+cZ5PV23VAH^)r9 z$pXwjF6iE!qbwosA#XeK!%aCLulO!iF#iv;K2v7mOx(;==zIK+UmYRAYjwK>@ybgt zTm60MR!DIKQ7Q$3p#3CQ`yI-JO;jw5$t>66q2!ogkYl2KF*6<Rd&r!pG>a>W&s;M) zm9fJrfH*?7)#N<Tm$~rCxlUNK$f4@+xL84G_nUo9*iQNYySb150sHqvwABxlt&-go zSHcUYV&?7=UZQvC)u=yEj{Kcd@<Vcqg^8k={ED2yWkj2cx`Pl3XA?O6tsum#kQij- z0VxeK-(t~l+;wgFRIz%lrtDADOHp`He)9BSYC^UGQX4rX!2pqS_fAaGR4j5$@dx$4 zgqFOKSsw$nUSuHcR3ZT{=&PMoRfo^HDAhg(<$w(zIV3O*IQ!h?3pOq~w(czRaDg%Q zdbsPjuOnZ!Z%nCZe-h0#eMW;u!!5B-nw1$e2$ePgPy8;8HSWc$;DbLM`SKp2M$jXt z2udNKV7KKe`vS8sjNjt+G7EyWmf>=?Yts7??K;ZzQL(ijPwX&^#>zJT3+Af*Mm z`NFZNvv-cKPn*IHUP%pA3)8kr<dyV75Lq5d?&OQ+FJ{gbGR>wuoZ1U(F;j57efP>U z(bUE&LjIZ`7K)txX)B8I>iMsOG;}zS1MHHR<>tt6^5J>Rr2s$P3`dv(Gr>@aARCpo z0lNyCeV<Z-^lwb?pBbLp;pzSQ7Pnf77VG@$yGmNhC6=*@&$yvcK{Vbo?y@KQ<*tV_ ze71r*TeRE@n!NEQ4B<MeI%bJYfEp`eNO{^y;#cy#z89bwuKD+L1y}u3ZEB0zg#%rP z0qK3rJJ>*xg8OAcSm<eGdJ&YB&ytbWmEWkw_V{p{p6qK;P=_!h*za3MBVlW#FW18^ zEyqrx$>`l};p)B}U>VlxWuSO4R`g;VJ7MhgXpguNt{cZ;G+NAL^Cjdy@Xd2iL(ntb z7T~XmXt~jr>lgo8o+Y#rS%pE_Y>W!?&^}QNw|ER#YGYWM7M6?@K{uyU(igY$C6W-m z=B~fspqnHP7Ill8cxdlCQc5XJ+*xykzs|P^$sHk?t@X!2SyrVXXjsyQ0hb4uK*Y#c zrfsRU+Db`WvAduAs0apEH(>IvH`s{ATqP7&3d7ta;$BQ>=AysJWab>ew0lul<*Zv! z;CbZ(BCKUakft!Zom-YZoQC6#dL`LyV#yiHw^f0}*pT3dYa13}+9jt~$1SuEmK`PD zn_vdfJ+#btd6)iemQEs?pEFTw!7%_KMlfGxOGIZxVONca*e4yi)6Y82mmXX8BoN0z zLF}-xI1MCC`o;!S<MmW0mHH6=2Y$kQSI7r5@w5=U+15PN8Y)xpv#d*C9fqLO)y-`= zP58g#b?RFKdsujAA|4fSu&CgVWVa|bu~S64&mMrzQzG!UZJ+3cxDnM>l&|{MB?L#h zMMNhZTRawh9e*s0BZ3v`*h*~aNduTk_X$Ko^Qn>^2RIJ8Oz&X*lolb#21R|mpf3uJ zp+)XM*VaRK7f)jKnbCt#*Q+*HYNE%Bk4XV4>U<YT{e9~STZiad%g!#})zL>X0k=R* z=5zDGH2eaSn#Oa>;Mr67`A@!Qhw-n8Y^wRg?%w<W8R`elc5^=Vx!cFmU*{2p=EgB5 z9(R{G)(_*JDE>xbYItosyrh9qWJ1)7FnRZLCyME{qcLOsN$(n;L`Q3{#vJZ7Jg1;A zR}~3c@NDYX9A%no4&J$sIVWsOMglo&?T8|gHVGB;ms_=lT75`EK*(n1ht!Zlk@V^$ zScb)w$p*j7iEW03It!^;5%pHkggxyRwk&tld~z2>O>hiyt-SIVPIe{-$^JsLV?{n_ z7G6OoeV@zzIhuaBi#$2&Z>;W~t_#bte)Q1;b>sSJxhp?$3)yWtUF$_9=p?ddCH9je zh68S2@WfLoAltXG4{?Tb!<d12WST-WYdv75>8yj(;fdFAP3I_n>DJ!0Lv=MgSC{I9 z?qdoN>(8V6Fb$u1x(%{Ts48w00v0LN8P<2fu<%J5$t+S<uBhj$_a9e;g5!<?DDa%E zzHqwQpEI@i^m?(K_nof4{cQ?t?zZ{uq;Yj}>m5=^U`}m0(aaf~OrR0#3YJ#HLZiv& z)S8j!AbO*uDDbsGrF~*5DwNZFlj3h!xIMWp#b^&8>xJWFD&uz|uG7V&gfyhqJ4C9* z{O32-bYTYck#@<AJ6e!N4tD;>Ple8gySQIX+Y6CcQrl$A3sc)#kQf$OPlO925S-Qp zPxzR(3i_1VCjuD(3aZM+B#<_d77OC*g9~0cO}@yHYDGcxWGHp>A$o%Dt9Ilu+ZOdG ziP5|Ts{}T^%o)ZH#pq*1RIgh|46v;4ncx)zTyKLP@0jvb;)2FW?);ZeA_+g<d;*K& z2$GhMI%`+#nB;<J+M(Abs8tB0`LMOjo;5%z!nDGTG}$XQ@r9fLO#Pd<Dr^Ua5U*3K zTlImyOwO=3i+V%M%ZVC)>q;O(;WN{p41W5&nY*#|fcaOeGe^S};UY*U>EYIi${$AE zKV9z${jFGPrsYNtt&(PAR47P3TZQeA)41fsQCK@Tpc&d9ge?!5+oXh(tkakD&|JYh zHKYpyzk16P#99A2s!X!=#6Af2hcZ$jPl+6icV1GKE$6_X0QAUb?_RUlMCU;a=8x~D zK72BXe{27hLY=C4UgYBk!iwszr5aX?LD->=!w!_PWuslzP15~+d2XWvcx=>K$_GZe z=~M<slH;b**A}dqz2x7!j$PQFVv1&8?O4oPv&Io0-Ceb;ea6wyBNbS_UdHJoU<>8~ zrzYG(%P1jxHzW+!Rf57q%NJ|8;m5;w+z#sADZC6d1B>8V8%1c;GJ;5LGy0n<BucY2 zvc#nQBSLo{8maY4e&SkkECK7`Nd=O<Np0*OSP7ZbTh!aA^Pd8N=7L@KX{0r!D9dCD z2qIskh*>|)|Kv0kB(<&t#hTsmsuZR!HS+G`C%NKsBYAOn6OooaA<oZrxI<hg&iW7X z#i_6wB^Omc?vWl2N1-@QPiy4<DJ2~nk+WlTAV&w{aY3d+yPVkXh)@lxkW~osmZmVM z{0T#<vsL%D3&>Xyb;<LUP}_HoRAzqIr&mrGj9<}%WpgC4S{@P41HyY473W1u(V6ex zsDmbGvVDystkEztzJ$B*?u*uqn~yVWQClLr5ctU?6b#hls{i9R>}`=`+~;$f_SUuJ zp20?~D%2<&?H*4koc-LOBWi1g1&2g6U&X`zy<(laq|`_w4H4C7;Vo%>W-B*mM_;|V z11%<kY%gjySy-Qaz1L9HeKQxAkOI87fM`OhCU!0{!(J}idmO{wux~*Yf9?;ik$&}h z6DRCoD>A%`WE&a2RFH{eg`BJ!TCtsZYUMeUAo<trGkVa22Ww!Cw^)1Vvcj01=hM~* zT9>$xbWz=IUN+MXgm`jyu4+U9TC!wWn(taJX+FVtqv3l?ovI>cW)qBLX$Rz<!&0k$ zZ4;d+&+ffeh;^kih>L*xRCalROB(ZmtShdNlZhbg)Hz()HeYpfKDl5EgW6;4k!%S} z6?1aWD(O|f0u8Mdv6E3j`{~7Z2tNmUPqfQN`fO{}ZSP#EQ&{)i>S+`S$$FeoQREx< zAA(KilZnJ7N*Wli5pnkd&tqFW@Ikc1ST48IUm{#<h#^&&mh(jyxkD;~{p{ug2;?B7 zFU&C(XcHJz5$ZLlelwmIMpc<$8ErrARCVF(vb?a+D5UzmM<h;mBQIuQ4s+5c27%Cp zqH>S=v|5|(Qu2O8fqQW>{1VF&iD~ZX7<`Fd+^zjB^o@E0l}Y{4|HKCn_|&jg^)0rA z&+gB+pbs_tVY&?nUQ^!05^I}Ne`&|42eq?~<&?2Jzv;-}gYr}B<r7w;jBwDh?|Vm7 zH@br<da8L**prlgiR!Zn2wYm2Gd<<ObnI-tONfQbg^X9|j$Kvfwf&8KqqYCTS22sj z{M~^;@gX%M>mQ}vpEyrRq2tW@UfI3<>I=WFs2zZ|A22RxoJERP#H?#hd!Ii~5<*5v zyz}<Ho;l)2)qxVk!4%yB%oMCS?8rK~Z?PG(7JPk<;2s?csZOb-KbJpfM0x-7ue}Pw zPyQ6gEItqar<a7l^vS^2=Z%DfxLPdNrzqYPmVx;BCPO>Q4yk@Ac0vVhd9$>VRh~*5 zKEvMXwXa&P?RNAb18T>&`JzwG@BSQ%9Kc4$5w2Y^Gb$%bQ83cpQ@#^LbX$3ITZy&g zZ(wcT8f0KPTVXIWHxV!X>GkTx#aIwgSDcy`)%r=@Kx@H(aO|C7?i{lqKFBh-m&}D= z8B$-NVg_%8GtVAOO{(`JRr=Y>`7X^;oQQXb3v8bl$k>UIEvq!KmVik1!!lQ162Fzw zK6d4_ffpKy&ZA47L22H)-;qQv(EV_}nf?7(t(%~uFKy?En@7t${np7sa`+4oBiR*Q zH8cHg`v$4%G~@pGNUquolXReYf#rle@+`fl{ig^~EqT%IUD!BbVk_fnR`2QjHK`+E z%H`#JiYsmmVvDi&I0%h=Ad{3D1NSYp?90sE#X#%N?I^nGxU{r1Nue(R5`2xKMI7e( z|LFRC_TTgBCA#8bA_|Q3u!bg=a8jqCIBIMb7vJJ^-@imY;)I4+*<`c9TqPgQ9IS17 z8&`&=)rd<c*!pzSR>lud(Sa6Z{8#oqK<yTG0kji#fwW`Sv-AQjy#9tp3TmZz5vrt2 z+P&~~m`tu(WHjnbgOBu|CwSZvBML9x>DingW9RmUGzMh?sm`9C{<@zzUQLd@tUNnu zxU=VO@HR^p{EciOoz8W{(aJp3WkPU_{|_ucqck%C(W$CXypY{|KPhf(olC0h!t=RR z656ss2|jVTRTX;i2^&XKSBqRLw4A)w=d%~ADUEZ?gU{ZV`koE?g}}Y#E1<=Uxh&oL zv1s$|1?VQw@yXTCuYM|=PCXunQCFc2MMcL>L-KTaTi~)?x?hSE_G=s#taCifqhVC* zdrrg!eSm=<%a)d0CjA&jX781)JCZcBEO&z6*&g>Bj=iU8yob-qKy_!SqG&-1;Y~J1 zGU&l}q*;!X>cjJ7^<D~h%`q`EHoj4gm&kYn*%kK_j={7}UJz~cm4UB@y4ZP6;c8qh z^xORtDbVcn?{mLMTG?^%mgu22=SJ7}j(vuaC1as+=+pp*c|F;^sG3U4l13do8*GEw z)p&7Us~1533bKJ_RM8=!-mGffJN<5M?(Xhxtjh71mwKb$2*lAeb?ml!RpUM$9pJ!u zB-F17KMSJyehkmB$i_{yuu!wglYG<MPN;905{O{(^8C^Mn;6%22YSnDR^Fi(KB%95 z)|OJWQs81)tD`n9G(oPfPb6)<Wb7qd5^7qWJdk)PI*y1MSAGy!f9#Rn4pM-kg-Uh_ zy8**uCCHTNw0g1V*ujmPJ{^<cRwYbeF6|#~FJ%b4u;ovlo;0YwKj-)_g2O@~!2RbR zW<TmhPWL}Z5!ZkG*tv<DtK?cy6t=UwU0~+!&)1+*@WSxQHVTf(KDm;FHxJ2>7~TRH zD1@@F6GcUU6+Qz7Rts~@xe41jnm9-vh`lskhb6omeKpV-RnnE)7zM(2gJlVf%{T~l z*!hTGZZynco&b^{0VBcNc0s%O^=uDfv5(di)OY%IT2jTcrZ!H6gdQCBX8P1{1P`Z1 z+7i(QBSYhSeMU{Hk48AH%orNB^Yma+rziA@O&P>H>2VTEY}qJ`iQrBYlkL$Ak1$dM z0*WfaW+cm2;nK7uqgtu3C1YZ6X#c;P3Aq9=6O-Q3bF$SB*;wk`JuK&;UD$xSssV_0 z4hW|Tky)>(Cz)HXD(uN?hq!(~Ov9CV3%BkFrxs}s>g!E(#rmAQLohdf_h`S271)RL zM(q|w06q`Ed`^)l2QZ>Z!T8EG4!*lMEZbzgS=sx~uQd3ucK6Qq&W?_bHqpJ2Vrii( zk*SdlnAHe2CU%(o#0E+!5k5#-BJr&%?-Y^}O%ng?2Pd>GemxW*35Yu`nkncnRgS5d zsi|px-nDYP2NHKkv0$A(sA`h*B<j$s3vRvNNdlK>{c1epWkD3D(IGPEFm-p)lLfHU zm#KG&V{R>VN}y-%kZH<Ei(LI&r@Pvhi`cNx>7Q3PHRdB2*<2hZOA);zQpFd%OL2Lw zS4yA?@XE@g%hcqgb%gnuzxMY_|9M2zk|Q5B3de_LRLB~9$*kax?3{fzgK*S%+EBrX zpaj`s+VGtScmD|{dPhuM>mP+1zT$pVanZYXM_464R0ZLjs+I=WGsqxupQ!zUWFUH} z@v%w^wz;D1C9aKmD|fj$vxSJ{XQ$m7>itx(Ry+JIA<HzuTW}3Gtv$-+OX{U)fkpVx zEU5|t0dai(;E%&ln?kU(Fyh{!B5(=BLa77|A(fi=iQ=r^+xtc@n8u;3ePR^=UsgVK zLX^z@ZB&WWN(Rcf_=zB^F%<c^Xh(6n-t}K%8c+{JH+i|0USFiu@arvPM$y~Rnh~C) zSHacvPWv;mIf0f-i6~fR0nXYFSPCN#&yu2u*P90vmZ>LEnMeqU6PZaB+V#T8@SiIR z;@~E+M<SSbN2MYwdc$XjFtBtXFNZM_8nhQIqdD18E*6k7cicnio+neZ#z~jWJJ3Wq zqGzXmJ`1AdMM4J_Vvg#(jELeaH}@C!VU-3c*4-nqkZ-up4>=Z4cn{sG$;ppsnh9CQ zQWJ`@)eO1wfVXp$)~hF}cS?+URp8ox8d<-8`sRk>_H_O=eqYl-mouKNQ+cuf2~Dnr zot?ZmC<GiXDGMe+U@Ri>Lx^e9`^uc=9?JYxnzr3_vzMXb0_SR0qTqnCvQl&EuUKn$ zCdCRg$RM&6!Qf1*;yq16CF`Sw?akwUIC3nB^4jWw#@CYIgY%)5psiXgXx4gL;O*(! z<E<RUZhU|gagxA<lm%#%gOO(ew*}N(M<3jv`LPV2+SZwr4W!KMI^G#WhTxHjSgsmI zg^(h@7f_`(^E)FiCnx92lTek+Yi{>QcHfuBB1@2J-hh7Tkxtc{%cPVWG*WAcnn`nU zt=#A2_4@7lFvRNiOy^`0Nc!OukV@0D$9?(yCeOvEeCB+30G2?hDlpOad-_9Et<qsg zE6Q3m-x6BC=7+YY&WDIEpEF9I*Q1J7Omn5$l|%}9sCB_#AVI#Ziwh6}Gj^{42mBXe zh=jxBy1A6So4t$ZgR0CCuE%IP(>00nvGNHCEg`Cvhpf16l}%da8zn-?%n~ugh<3xm zHF7re&zXUW)lhaCK$CB)h>Hrl7p2AM+E0sq1CI*!LEPQAI(};q4~Epbj{?t(+06bl z8w#7IN2gbMw;`G8J8$N>Z)-{@9wj{GsNf6zr&$q$8YugIaC_|1TE2D0ThHpVJx}?z zf^~;=sPcx|cAJFQJ%MlNcppP#)WGYJT8g*JhQ3MsAgd*)>k^!YgCjNLzx$N~F~aB+ znKjsIfBi1~CW0t(2%5p6I4%lNA2sId3ldE20O6RD_~>;OZsgu=Pos=b2msT-Z{7T1 zX7nDbo!lJ-t)z8YP5l<2=S9K*tetHk{r8<tL+IYeVS@A77F;hwT^2(Y+*p>C+9wxG z)TL`hM=E!C5WA-KMdLZ#kzDJG_*5`Eh%8QZjD+g#de5)GI<A(0!|a`dfGn3@f6`!# zoN^^z;2y!s+vyqZOSU%8;m-q>#GV)>HKzfHsL|fxJt!)*r3VbfRaLa{k%r*!ie_L( zqJWi)Pwsk-JkN2?x<zSmU7yW7o{VyV&ru{&nWaPs1JX6WFr<F(WZaXCz{?SOwkUm@ z=oF#W=`d&PzntUHrs=~2{X<3hDF^nZT2t)y8&Ae{gPaNO#ccesEeZU_<uxjzP+`EL zDZ)=+i;OkrY=REq=6wR!^^@y@iJKhv7;GssdPAoy%kk>vi``>D#j(lI?wM_cQ(BP_ zHqe{wn~hcflBX=0bg-Zcwmhqd$VX#$**_W8d5IBt2-%mHG!U*n;pj}WI03j`7=x4i zyB^2hL?|JYB5HmK3+7{ui?IZrMMFzdegHY#MxTmb7vm=M?#8%;D31i$inSWLT19yF zm!B33voZT)f}~g_5HET-WMW`-$ZVh(jT}Gm@cfyIY7|^pW`D_65Kg%Uo{PO(^}}|C zinu%n$S?FF5z*|~ee~}iHthtXOAS_`c<(lYX!i@zf1=;eNQb+MEX`T87^F<l;oB`X z?|gg%6wV{rZ0%KGsYc7-W98eJ{wbFZypG*LWtgNoWo6jT$hqk%GN5=?ju{Z*rZS15 zq@;4uF5iuM4kw-R857m7RxJoA?A)m6C0Mr&kkfb59}lTi-`*4J3vQN_mt=x3D*p2F zk<zs~K3NbI_WbMcHXA2#h=vZ785r9LJ-5;92lG);EdP=a-?iQQfd33z<rAjj!2vyG zm>~^uUye^N_zu9CCe^O+@2Ua=t(AiVJh#b(rz~??<ZaYlZZAZLOkDk6Np)nvbKWiv zb?Q{b3;%AFAI=hQzll=C)l!|zWrXe*tJ>q$von{CF1%41f2xE>4JokEx2`IsT28R{ zIC+}ZJcqw$<!X3dx_Hy4ry?~fR37X}=9M^oW<1J#6x^A7eNasP_!!W1ap@xAIyT4N zh=R3v!J-~D<(qxK@Sjm|#urvMZTMpMLMfQS3*V#RK_;^<$%({BOH2lT-pW6R?6jtr z>w|gVR*YO1RALz6GX7jHv9e!00t3!gi|(hE`P%ZhaqQ7Z>X6<r*3QHA_ysq}cL}?b z3Q_m4-VU&fR^yiQ_Pur+o<T-Yh}8lYG`T#L3-rqD*t34$TwkxUy)5@ok$->K^B>rc zk1&^ZgXrhC2~gHKNg8fcIj*-x(J`RPs=?0#_^6QG#gJ~1p$>A#RA#Zbcdo57<<n`( zT0eQVd|t1lvZ3~m!;Lp%A*VXx^mw^~14A3+moqDTRG&W1+v^JCGxh&M)Xgg|p+3d# zQP(@c{_hCrjY`K^)Z4tXM9=|9e-7HJk}sClo4x%JCL_q&*lIkuRrfb@c3+>-ZCdS_ z1SBfXO%+#7)wyHKfN%0b_m#uE;@6XUj^)1I>Hk&p;ij_J;}&H>sd;NI5QatygSKhV zxTyE_y#Zy#^3a0B$W18bdn5<(;QxbS(|+ITB<@E)p>&o0o*A!xTxHE@+i71ffhdxJ zklK_BMW`*>DA=rVTVdD}S%nrHP(15hw3#ShLKFW^46yJ$nqSLr)a|Tz)gq)$HLtD? z+>>I<aN)vi)caYdHRH{sDbNM3YiY!taR05MOk}DXte0qKjZ73Og<|RT%@7&J;_u~X z#K0*D18`Clr_hz>)rPEYcU=$L<&4qKnJ&6_y0mp&U^opzTe?+hwc&#BXxO4=`^4$z zfOc8Zy8|$gvq-hB()fo7%8X^*`U)jB+}209=L{FJj-#G{ZFJ4q>6Y)_amCi`=yMXM z*GB$VpfEUNf`m(-7A@RxGk+qPn_u3jm}jA^1Tu;eDGQDAa+59UhKl<mGi?5Bxj%fl zd5H*Axv?Tu!=*MQ_}_Mr^X6AUKr@?n=H}+*){T8GF50wsoKR==z9d<O9Ndwvic+Y6 z270n+I%H&u{Hz6s?1#s~+<%Qg9&;|ktpML(Mci|kFT)jyne^lEu`C{6HEM@Anog-s z=NptP0aj&@bbr`)^PNI5@AihyddLDDNp_k#Qb8p4k~)ow_hU5!G>1Q3K0F59m*^)R zNNSL~;uxI+)N$OPHaLUKFivwh<Got#dhv8LKwS8r#V}}b%eVg|75;L3Uv=2t{M&a& z%~W}(d{c64cc?m<|F#P+PKBSbn28+kreCca`Y=fd`<P+1>GSb1BRehswPm|rpA!*{ zD1Q_?O;0nt<DjG2fBpKiQN_u<2IRHg&V2VhKxWgqSi@jiX)|QNMVm4QAGq;bV3{N? zml$42W(t;&$DfrpVHyziU%2-s-3#5wnQD2&7=@p#&gyg4;93*~tfN|qpHze((b1C; zC@kiX5s7U^DfP{Kc14pK?Cbf;Pqp?dprwb&0r_Lw{(mt9I51vIZZqvlG-RpUn{|6< zkl6Dlha82?&t!rfa_T!q$V8T=&;FYoDxgD78^1y^SeUaW|6ig#PPJ_4-esJa!INAW z=(;*#J+?#O_Cb?0#1Ta~^nsA{xFx8UV@U-$mJYmHjx`&1*<joE&&VhfR|R}m#VNGg z7`AsfeA7ginQ-IUWI1HfE?U3O$tbEZz(SAV^`4FN1FH#Yhxw5D|5=6yLj9kx40CAW zD|iPr?smS5tX3c1GpB*4Ku`CFkw7sc54bouaa7yF=g%!8!-MOSC3a9BJF?}8z#e#z zcvppDe2Qrnx1P<!YTp>i?OxB)09Zd*SOT7fUQ>}m@Rp+Xc9b>d-Z*;@o}^eJcsLh| zxQy!jO$VB3F6L~M%UY%>u{Um#fRp)MW;x@Re{BcdZ?Sh7Y(an&1~UvJ-PL%je;0s1 z;HL#ZVPQDHC%OEKNQTv)xlbXGbgs}Nj5lSbS-N4xT!uo`hpOQi@pExX0Jl-qp0(XF z2B08YPdVk#e{-4BZG%sVjsBR&bJvMsL>M*lL7@2jUEtYrg+A{3R*jil3=*(fZtW0_ zceUchDwhx|Z0azLU64)f<CS9Lf0W9<XK^)mY?$+79re9uFR~PG`Ws|mNb03%c#PPL zwdgH?>RBd@0<@V}c}D=-b#&`hr$tdZ%_vC@Z315?wb-Q`z&S-K7|_e=zr(7V7Xd2d zcaBqz-Je<&Bv!qN3i{U}$pRIKmjkyl^v}qDhoZuj&f3>R(cSxkXCp*=eD-zsaBa68 zekVlM-wZ;j+w__gg!!|Xxz_(}MK1dA-Z=#8gOF=FV=>Q`zJ&O4R0Fg-soIyE^!0iY z-EB}c1}Qi5O<BAAIa8ph-;+u@_!vnnN3<2bvmiv`Co7WN_;i%Qlra~Lb-K;j-Y<~t zcK%Ojwm&^C(?8bq<HhUt6}p(uZ6D5Ux3L&p3QV&cMaje5db5mGrzXa{Q&L3|oE!y} z<CnTJ|5vl1U4N(O7#%NgoaBC`KJ^Tu=p?J2dv|A;srn1<&<bsjuA2E0F3)vGVz3t8 zC!?zuQ+DZrnX)57TrS2JLbvKXy7<M3RMq6q1i~h2ur)&lm>T00{D#fg`%Ojop7weO z6bv%1a3jRhY;HodLW@nA<PR@&`;+SA>qK9J%W32)`h~6Z*}K6rPLsVdJ@Au4-UBa= z5Z6B|kKqP?LvU;>sf$Tpzk|@Bw1ODr+D6r&k9gKeU)g^;i}2$$NAOrsi8P0fUo14b z)zxNwGsNeJ^<7Jz7i&$OT9PGg|3*g?)d3feYoFA|9?N5TP@eD2bB#EHyE82&eLRQ= z7^{O>Kx!xW%g0TmzIdegj0}D^&<n6Aeg}6%M38p3fuwqY)oBRxGS2)8)QJ}hUp@(E z|9jTM>dCavYAOUd-jxqC9tA%#&rSP~-(llejh3WdKr0KWQvu9|uGp}(GXe7y;%5@S zx%u$Jtw1^6^lhGzn?BZbi&bR4P>1g>7>XhAXyvramS=&Lrbt?w&9!HeWl^0P={}i! z%<&9}Dp%=0Ml7q?Obibe9&&T7Z&FqBHrvf_=@eq;u>FQ_xDEZT(`RXmcuz&?sH&>E zQDXELSXPemdtLnZKV?v^=vjO6e^)qU$CU=89rvYQzj_sBt~;6NV;4*7)9#yda(=?X z__=yQ#-Nj>gy0S>8aHi$b;`?~nslPpx7-%uO>M|Wv~K2{m#9Q3{z~fwqO8~^x1jiz zg!o%#l*N=E9`LI%9%P-kJ}BC<Xwx$)WWnJ#DZeR4d3cgDnhd)Cz2lgFUxV^`+Zt}9 zxJFO+KQFtfp4JAU_RXcAr=;bWLkJ$|tlxb0g~d1qQu<JMX8*m+^hKDtUzuO5!f~Ur z&$ro<O#AX0$A$_673{93Jvs-b31*Et1;^>{Drd?MRre@ON{c2MS{s%QnXLm+d#pY@ zCrzO6g8Y+y6kgcXJ`_K1Mdx+A_c-|rrs`R%8in<oG}!(ZHX(CM)rCq7ogQay4mB7e zB-$vTn9M;J?ZZEeZtP7$tdSp&iCD1KFY`YRYWL%08*9654i?QDC|;ljeq&}SjmgZV zU={M?@pXnDk4V*@8m)jd*%@yTuG`PoAqnEWxSgDdn4lwV`Rhxuwu0|z`Zk|TC|!Q% z_YEs4G<YUK3v%=k7<iW+Clb1usQlX+Xc$JW-{v7zo;GaPXKalR)SiEpMH-$0?i;&| zrV1J2!Am*Uy#JuSz+Li5eJfd}G~<vE-^fk7Y>3;{5FC!59cNd&jr}}x(Kip|ugpA* zbjTEi@m~o2Er4ecxU9|~^d75g_Q~J+F@Yv|wmeagloND_z~nJXcp2#_CdK3rf9Nw8 zlcxy=y<>@{_QtySx^rGXQ~mS-JD(-0r#xWNmLASE&1APN_TuXM8_j+F%lB-hH(3%+ z0<2jtFE8Y)`sW?n*AYT5_Y2BjadoKOdNpY=<1&v0uYMSUAGksYY=47~BVU-zM)*S@ zTMRq{`GsEairfX`E{rR|c%N30{^93mrNnG<0)gLD{X)OFX?e&{dCkpSmI@WUa%g&T z6hJj~yh_H6e~{DCKXdUhn(SxEh~NJX7kaTfbM*V&27joWQLg8$WuPk<kJmy#r_xKf zg^W9#)DRM@0NC0zL?B2)YbPhbYn1z}8J#ONJ(~OvRfl~Usu3vJ@q_j=Va0K6k&?kJ zkgsapV}G3FGKpJ&pXyTAi8s%+Y<hCeWAf9PkYhEj5}{0;sH@LW!LlUn@Ob{`Q3;l2 zY0%NuOy#IUt=o=YXO)93Duq!9_&(XP{qCXI8XJ@}gZ$*@dTvfnwwNvBJUzDbU2;3L zPh1Mb?2!XI5F%F!vkaHzJ}P0&6J}iDb`Wg~ZXTY)0QNblKq?rv?EM-8f`iC;Z+Wco zsR(Ce|EM#L)Ts}70zoZgpShd&m9DYrXS-A)P7dmM9%Ls?$fa(W@%*6kR5DZkDHpw4 z6`!`rQDVNB+8-)3pKn)*i5e0xu(sug)OqXeJD;YT4Yu=9kAz6{sEL#XPkq@WHHL)l zpzvW2rhT`DW4%3{JTTvT<GaW6Mgb{M`2glvtMC7`R`pUy@?53zUXv0k+N|c7Y4|(i zne^A<6RAJ3+IGHas_N)uU0+%@<nO=rHM4G#2NvLN1~Jg4&qL~&x4JKB>b7!IQjSh) zl4OC<UXB`FCUg8rt?gp%jbVF^gp1hJFRQ~(xH(D+IFDyOo9FY~LU9IG2_r@y|NR>H z(qhw4C)BkTDoyCxyAqc|-f*w#k_oEm40sGO3N1$7)IX$ituJ(pRdg>3Syk6XrLRy) z)<bpAVLA}{K9{d=<IkUJjZ}z)1I`nsZwzws_}<pmOd^4`(%8h&>6uYZEm&GsrsMkc z<E#Q`SGqvE4xCk)fgFD<fu)M7!~<pCE+`EaQ^Me5{sKR4t8;>hzrJXeAYv;_O#wdM z6a~JI3Lo0om!0Qc@I)U&iYz1EwMO727aq1#lLH-HA&H5qQhYNP#w+un|8(a!GIYE) z7fOeXObRJE<d{SMc$8llf^>!i1?jj>w~CC{?^haS_DZq6(p#pHhqhe^9r;c&%#aXQ zscJ=2+W`x?8Tpyu`}oaF{1e2zGGX}4$C%zZ{X3gV<t>9b=8pC@&XtSz#?{!{)%%Py zgH*5i%sRnzS8Zu=$rSRpn};CqX$)hi_D=8L1A0suW*N5Qq;I1`Dhf18x);}0LI(fx zLlJI_g%1-zymuh!6?XQ<FOhJ*Kd7Gs95xI{J!lIIw>y}sV2NdYN>X`?9;q1^Se}8q zS&&%bYavW?yNOF?+=sEBvKlY>nT+%a5G>VPs_M)aTC6t@eHO2DQ=jXl5JCw_OaFqL z>^!RQ+gFlJs}X-$f_S$#ZNu|n!LpBVq8o42XIz$end%ZQ<j`#-10V@44r5_o1TQ3H zz^e6h!}kL&2cZliX$Z+o=<><xkv-(baqc0;#CL*Q!vOC9Hh9c&K)|cEcnf{&{6u*p zQ7`0s-S)N4QuEjy5mrLmJ5v)B>O#y&$;>wJ=9z%)jBK_*sU|=ibs00;S3>B*hmalY z55-H%N(F+{{^AR<P{{1+dwFCSoQFj3@6+~1MFV62GHAZRm$?11sn$31oQ>xm47s>2 zw;@>-qDg=CMZ^rv&pV98inuQW$$Nvj0=rG8fZDF-GySM$OJr1Ps_!?Klk9Cik!gqX zz(#TpI!fdHt24HFB(k1o{NU18{by~NDk8Y7AVm|;)-^FefCOLE2}U<1U1%ww5#`+3 zae246EURwGY|O#FTJ}q8W%3=LnAg7HbU$Ji;m=!UNL!>M)LEOQ1OO%N-TJu{ugnUC zaIFlbMU!JHmGXo((Z{`;rvECn=RYz5b}TP|f9-OVpbzAGYGLt(uP;A?S`wNe8pnb) zfJ@zr+dCRDc$a!;dog)ZTo_$oV+Rpv$c$4g+Z*PLD>Vzg5yn)WW7F@=@ooGWjrGuL z{#vdfGT6KM6Ui9>%dgX}p=8~Z%s-(zntm+#;rvgC=Ff9cfX!aj<p^vfGMCbPN|#{T zH;S_*1_=#hf$%@hEnCksgvQpVlL!gSEsE$awuh=$S91us*o%)3?_%b99KM}NSp*Zi zGP6ZsU(Y<~7IQMO<?FbrqgeO2eX9#Xf^AgFoCTAoD5oO*iC8~7oB%)SsOSp+l24pq z_>7bJ{=1@Vd*_yp=(#458U<lKuJ3DW^<-h#rktYzA%w9XgDa=_m{}!LtmF<<LV!yg zC5(KUp(z|(#9B(G8&!dtp&4{(i~`hGe%`B*H$Z@8Oc1?xuo0lQ(ZsJ*Apj|odA~~O z8;Q-9NKxSa8gCYZFihiK-jwX`1`lY7$Pq&htV;q7o^;+S7|U`e{d+7sK=qw)vDAlD zln{I#`l(OV)qdX5*o^W6BU8wAC44qx>?a2i7++bQMx(G#Rs3HA82$v{PhZ;GcZuej zamhr1OsLB{FAepX4*!p(tI&$8X|}jCxCACR1a}$S-QC@Nkl+y98Qk3=xI4iuxLa^1 zcoG~g-@on)bXV_^-PNb6PC8;Cxzvx~oYGJKsZl8reo|IIZ!tf`vB$gMSz?$yw}8G3 zpYWiHrHxfr^q4mYwukU<x_+vWaB#?-$)7qjOk{$8sJ_zq*b|}D3B2f8XesgFnKJQd zH)e+;bA>K6{4&lA;XfZ<=~l#S@~?<VWMu$(sp><1<Hdi1XwaikdBg{#rLhN=#f<vQ z_#G&a{;-u%7GoF?4K&b!IVuXpWpJA*p`<R>ZXBglG+ZznfL4EOusSK7nK$;zlA)Is z{h!?As<~5JFjD$~Q;Q6%zrBWpLS3%7%AYLr>2g`M*b0qjESxV6f6|xW&I*gej#`KW z76bC!VnLTL&m{~1R8%K87`r}EE^WmaJ)-6V;c9M({AZUuH@dZab}yUNDom_TOeO|) zQvZ>dss*$g_BJ!bWxU3uenN+#{M2_*0=~VWp!-*fQbsb~ANv%dlxh<^^+5ACS>Sa0 zk|o%k#b5WG?cpk!rw{$NJKAFm5bSO`wZx7dOzp#vQ0-n2NA@MV<1M+8?nR_2ft&ol zP|e`6V*y>vB*H^cZfn<$=X8Rm_sgcaz+LPnIs1Et2C2X7cr+5)P;S13n@&M*3$?y9 zJm}4j83^QYqTsph!33LJNaR=8_;R;5{<f{-`rdx~&fk{@uWrJ@vz+tXvYIfQ^&95s z!??~}ouL<6p?*oOtWBAqZU(Z+a->P2GG{gy^SEg&SscE`#|Zu~xhUpW5d}X$1N~kV z(+A?zghZet3Xkk;k1+qvjj(0%mb@!E#5x>NnZd6~j{k36#6ySw<kuF<?kE^N9rkqR zr_XA-i_214)nI#O)$M<c?@R9)&fCPfnMMVt5Tipy)IG1{4c`Y7CzOj+%^L~B0n4%& zqTcE16s#aV`xUps{4;AJ(B}nGig>{W+KocjA2uaUfx61=87MkXvlNM54lY<fmB5Gi zo*+p(ne+vXp0ee#%3ldY<ffhpDVU&k8yn21kh;6T)Eb?Iaqi#wg2Vd)<a!N+Lj%QY zb9G8d{eIWE>scRFaN9k<SKZ~*;72!2{xPMk^dA}2xdyZRr<R%uaY{aJ#P@SIO75(Q zR=$YwgbI~DQG7sC`<$z)El_pr=4I-uj2sO-Xsqw>+w1v8DqhZK-S65A-e@4!lm?{? z?zg3ySeKt`{4-PBZpBLOSGKLF8UK+69y(7GmhWLB(r7rv>_a==jU<;U8)!f=DtgTu z;s}@e_UXrVdr+<Gx2s+##5ffl9X&nFWK;Q~<qlFz5`YBuvcZ(uI8`Wc{nJKG@%x<j zGzm?gm6IAL+hiQ@=0B{8Zp+7Emfa;LwJ4+3@Y_Fx=2E>mr7!;1^@*SFn^zm3l&z_X zOm)yspSj(hI#&O~5Td3k^Dq-$b?zT<cD~G>v4Yl7Dr~!cOOt1wJ@;KO^1+dt<1GB- z$Mppejc$=VnTA*oe?rsAEa0}9ZOf;6^VmFb(g|yqVgWzCdlj|=ld!N7u`6j*LNC3_ z$GJm*y@KBGsD@ppDyK2fnv8F5%jrgo2&U8J-G~0yJkG^6RP9x?o6BfISBd;Tic!@t zHUFPah{_ku(({bjD@8@uvfI52d)LH~5z0LGVMgx+He09}95S>>?N<PjO+-td(&~L9 z-Tt-X#oz<<)eY>Fx!pF0r-w_wzd>DoioVmK<(sI!EE#hu_J^vBvHx!yCl`KHLPzM% z`b=y6hRkdnJg%Kc{c;>T4$OLk1YP+A*xuPMebB)}B^s67t*sEd)LYZaX5&g2o{8vt z)G2cAJ>tZuVUnKA;zBA0XZ`%L3kQyP1f~wQtl4}*yWaolx@MvWJ{G+r^V5iNs9t?0 zanF%g%20V#Y@WgwG;}ncBH0#>4ikXGNFW?H91l!SL@=IMT=DviOU=4h)MkMMHQ)&I zIbY^qng!_ND(fU_eIanX8}jC8uhKNS$~oJ<-Qt(opBNCGB#^6*jGE!{bIJcSujqWy zhF@yIGt<X1gAtg6fow#@Q=B;V@Zd$2wf+#Y<xGb7k9!0R+n*?09YZE=gG&8o#I!(; z*9czqM8M>i2#0Ntm}Qa?4BQAv#46jKM-oQ|Js`W;vUxYCrzUds2noa;|M5JoE2L6B z*7Bne#b-Td5|O?Evp0VL;CaP0Dlz<}Rpd9M_LdM++}4YaJJt%o=!VHVGz)7Ifd=u1 ziuhhLaw7y5m(}Q<BZ#Za^AHHsC-@aSz3e?rQ$*gy#_iW`@?D(E8k#?1$IIuUWZ9Jj z#GIn0G0y4??er~~c%v|Gc_E;;n2LVYJi^B^A#AYyl>e)}J4FSj49zib8r#yNLog86 zC35d1EgF3_gPJNz0^Y6`ASW5}5;RQ%^LH*BoQF6)={=25Cg$1RgK-6DLK0*C1gbS8 zzUgxb8Zy$&mo{zsuyCNEbNI)_aC22X>xt>>bIOr{$*#`97wH`Wu?<rzPB+4Fax0K1 zDp`d~%EYL&eoFODD`T}l&7wiBqRT$4!gi)PG+<KG#m3+naW#2Lz{0r6M0Wp2;Zawh zAtu=1zs+2RF7;>Z4mSR6Fr`>ai<@vb>&g|ulwCt{9XHB+S)FYnR5a$!;5~q;lmkTa zLIEFL4MTwiQZ0au%3fK^!{hCzD2po&y6)l(-U`v(n@rxBwPF~7Ik`nnRtMFrXhR{e zfxPcdJF6LNq4uOJDma_}n;~4$`LaauDV^$#svGm4SRvj_rE3#+b<RCF>(V)I2+M<? z6eVIf&>PEDBc5pBr)m{&VlzQI0M^Lu_{u?Gq#3ro6Cv!vGY_Xif!j@5N`;_aKK;8v z*FV);cU8Ea(&{#-^vr!H1@iNZiS{<IN|D%9N1DUEpcgwkd8-e0)g-&__~h8ZN3EI2 zSc5UvbN$k~%cqV)er{{MH3eFKV$th(v5<lFwPq}frs3eFL^A6cgn0Z-{k~}?(DLHN zioH>+%iIv{7u)YoBP7(=wMh;<{~ZQv6X^j6scq!nZzJ^8VcfDl`Upl?<tV4Y28XLG z+Gl^|IwUq#uv49T9~3a7s~q8MyBF~PyaXmt&Ke!_5^&!^ADvv3!cLaA1?KvKWz=4X z?2KI1oC1U#&0jL|w^M&}VYE4}qzG^^GzLzw5$Fewh*_R<yUA&ceH0_5iU`&54&1j( zCU68qguyq~(-zkhB*7Y--zNBek0-fI|M}d9?%tqYv}ZFsi&Sb)xmx;1!s!mmmwiAX zj(v2Xk}kD`+2m(BGH~AUh0Mtw>ZiY-^hWCq&PQ#`%7OFoVC37h08`@IMXuj-aTI39 zw$N^kCn*O)JhI;|(#u|P`;UKE_N_-h(S*p%A8J*)=2J1dEaxI2Q@kw*=07DFxteRQ zKdK(+JAbF#zB!?QeA-j{DUuFUsD`I~$}Hf20&!i({?2Xr$;trTa5ll26|-F^iZEcy zwMl5lkqLb{<pYstgjKgwO<Jx=CDV&T^QaJcc);V~H#>Ep;=bejMSF?uJ<mD+A2@Ng zL)h;5W&7T2;hXqI8q2LyXCjtF%G<C|c0X4xs*f0d>6Dx{MBC|P$eBgLP}~#o3{HWA zg&bp0F*r(vh(PA(dd8EkY{%sYs2EPjhZDpLD7T;2{foo^Shh&WrBn>J?P1*~4s!a9 zK^~dBUe`MtQW+KF)(h?g^{5z-O-FUCrK9Qf+8bn2bWh=nvu)Sn0Dfr5b}aF5_|I5o znfb?MA(cgUO^Y{WoUWS<PYw*pFYEp2M2gDL(v^&T4Xo(Uh$T242&iW;wLI0#^!yA@ zPqhCD0mT+f1nv&fP2%p`F%W`-&HLvNOJ|z^bQSp~hQ_<TB8B-QezxtYxv|hJNteJZ zx^@Q15DHv!8pjzDa$-Ue@d#+>x7|Jp`OIUZ2oqtHa!kn5uy}g|2lhx6JY=BA`MW<) zBhnOnUE^qIn)4t7E!_e5)q$}4*Qo8h0oL61R3rmpxJ%N5t{|(`r-+YvYaTZE{YY-q zf!dZ(c?#J?;HTASzNFfCMx%KHWdzV=&a&EFf?T>Q=h%Tl5`phn;gGy3^NioqyD#z0 z9lgaK9%5J$qN?n8<p<up&ehJPuo`ykH$~6Pc~M_P>HhOlMG^BcxCVi-0aDv0j##rk z$yL{Z4OV!%`<sOZIcKFA?>7<U8V+F6-|IR*ZB`@EoCL}MQtGn%M2*~F5R!vGX8i20 z-5^1kdpLdNq;(lt;zSaMFs~*G;?rn2oGt*4c|Vx~js4HM+4>!$%NjmZw_)EXRC!hW z377$`^7oDopYLWRG9!LHx7^-N&jlOkzHkj^fOuY{+#nV$mk%|H*lFF{U87G$nJ6^3 zUl+X!B{et#w{8_HNDMLaFVsw20m1@+Uf7`O@tp_q%USa;S@RcWXPX%O8Pyg1jT41< zq&lnqZ~!DrkAQGYN&$iJ<6Cvr!wg4<$3!%=cE>Dr)SdPYsE%lC*9SdE%1ExQ-?wcY zY-xh^{7-2zh7Uv$G(|ypp!skzN+oTV*IYyYhP&Jw<otQu`IG$+tWKgt()($VRIbj< z;%(dBk}+y06V)sdu;oXIAi7!AFrgdY&>BgNcweCv{SuJ^GvUkbUFX4~c|?_q8e7%K z83wB^ISyec@XUqh>@oyv^!Qj@WpGtSawIG-O2mBsZF4pQ25r)309#f*1P){+kvQl{ z>zXP>%@P5uL972rGKeYBvRgi*POH~4nGnDM^Ig-dHHE&H%qH(AKO8zwd^U$9&I#}S zs%6_AR|Sg@jAVB`S-P&@O{P;?X$bVV9%=XH67D;7KGzr05zMvtqDCyU%&zEHY88sE z%ui%r$9p^}y|}$r8@%{csTdrU7$Tu@f;Vx|V-kTS<M2qlTSF*f>gpSHMw3EB83{)e zbJE*UghT(l4P>YoFkN;;WK>CN#*H9a8%T{E68#!QHfKYarOCDKqJ1v>PRNjrFWkH< zWc`G)=HE@algs)<-$SvIhbJG1(XqxN0YH1b@dZEG-5JDJ$}KG8T1aU8GnN~hV;I1t zRrG)h5hDTtQp}!X@)0aIwa$&-A3JM}4twA3W`4xP`1<;GbwNRlhh%vg3Usi>gV;u? zf?)L$w_aZ2XIJXXat)mP{XY}be_QrZo|)de+}cvo!<B{x_N0b`sPw}ViZzdUeRJZf z*|lMt)Hc%u3lD$71I~%0mCzYvGQFnzq8`RyXE*-9QAe`AJMBqamc0KC`540S=qhoq z*}-7BSN|~uD7;bDBaPdw5o}SBhTNh`*zI9}@?iSqKwJN@)4!9UKg9S)chB2fhu7%0 z@x!C5fnXRQJulMd66%}7gl-%8$e+f!e-7{4zI_Y8@a5t`c=m(Ns0+j)cwuVBDv4y? zn?M>QS?>$#3^e2h>pX&v9H&l>_?zippN3)-lv&?|C;`h^aELcj%!@{BI3H{k%cSoJ z-8d>KFtpY=HjwDeUK}jG`om7Tg?*Ym(5@`E+DY->uWpj~?VlFx_g0udc3v&k6O~&$ zQhYg8?w^?}smVE~q$g-b1saums`@Vx0zG#*T~`YeNxCo!^7!>`s1U9t7&bA@@MaQZ zAHvnaQ5fp7FE(G}%J~#BR_w5W5;0hD<k~|{PL9y~*<r{|s$~qDW@=ryMiCDp7WAB! zL`MZ0_GY(4je}Qi)N<mXJ@$tY50gEanYFd;5Fmry?5?;|--Kd~VAM1l8!?1thC~Z; zekeYvIpkCB{*l{%ay1Vv#1V&ReClG{!OR?TY*f$v1X`Yk0`hWcj~jeoz<%x$c^WTD z)zOjd-Q{p(vD;n+iwJRGT&j{@dNM_x#k$Tu<aiTJV#r@u<v@em5pk^$MfB;%Bp#5I zljmotWs1id-Pu9OYY!tKecqb|1{FW!S^@S(JQBJ#eOxLe)lE*M2%v$@l8qh>eWG}C z&1y#DGTL&h-?jr#6VSAa9S=sf_<~>^32r~eDU^CptzRzw<P@hXNES9pAq|@g;a(F0 z>_EAa@zEO3Wg-7N676Y(fv9OmoUZsUm|?Lt>=W%_z(vfatAE^?1~)jDf3%GET0nP6 z?9^A-&pJgK0!(_73yaD*Kq+l6$;kR`*$C1(^u%4-Q$vOB(DLlL`g?1%JR6e{nTtXf z2be&WeX?@vHqypagjS@QC5AnL7gOXE?WL-hAT<~qbReM{CSOW@2;=8q;B0=e8o_ss ziF#1=WplTK)~Go%%;!C2_J)v1ow{vMuO}0+sTV8uS0xLz^e>vKCUd=e6`z0?ED$+c zu~{T)J#Be`imIlY-7y+rTaK&kvS+54&Z|BWq$T$8Gv28E6-a9Z%Oe)&6(9Z;Z$-83 zH{*a)HV>qS790mS03HdhhYFAA!Muw(YBs^b*}tF1F5X#mbnWDDVau}gjZbv4J{!N& z7>Q%7e%<RYDxtO5KzCv8L~aC9`rlrk`Oz@xZWlfsmpccWOMHz^^sucg>lf{pe_BZ8 zaQXj=UkR6&dQEA!N|h9OFkW{*5)2_Z8p0akr<gIUAB;d47&MBsB_nK!>lU>oxy?R1 z9CB&{iWG4c%_ZSLBOj641fR>o?-YOQPHOJ*wtYO;{(9lBn(V!b1?+syQ!KeRJ-YDR z5^s1N0P#3O>-}SLC&UA|80Ci=%eS|nxvF@4q&4dShs3xvJXSnqZJFB{>#dU{*r<>$ zE~iPcutlSbzWqi}#FI1`;usdmArcEz&?ezJF8k%x7LTFj0*P~Vy`$i{X|*te=U<M~ zuac;%j!@Evi=`u?oMilbr?@j^2L`nVw6CQ*;H=I`YMBuZP^73Pg;rNoT&6UWH@j6; zaHES|j+_79&r>`dS18_C;)-8VGs1HLqjE?I4e3z4p4de#1g@|ZZ0ZZu3D6j*d?q#n z{cL>$jz8w@(VZ{VB^;ZH!`f{7v|2gQ_4It&4{BW4&R5Lc6x6jtmC$4vP4ZDd^wuBG zY{8UvIX++gbeoOGiECZyKqprk+4ZD`bKM~!PJ^xaQG+KiT2@ER9=@;UskO3)ctGQf zgMvRa9<u>~+;D(jJaCy^kSb_c;$Wgr>X8_s($=pJ(MU{ty$HXc#|PE_Tq05kA<5Ga zO51#{eLFktMbS4{I+P-8!4YrWFm59TmP^iOCI)=^0-`TYQ+380<V|Zb;GNN}A)^k{ z66K9{O>1qHWA=fMusyVq#)(*hkt$aAZ^+!}4?2KypCml}WlPjX#&hB0u!M<{MAX!Y z(*V7gA!d2agF73tDq2W)&LV^Td9RoZDJ-aswt)S>a=0HK+k)eM5lxHUrmdtP4L(A= z93ocvx1-qWjYQM6Lu`T}5cY>iZrWs8Al}su8G|%`7Rb&A7uBVBYMHf(WQ4w=rdDtn zRDS~~5|6}3w32MfWG$pCx2*|k9@CY;B<EaWD($055pzd#PBEC`u^IB3^&eYet51yc z`n`}fPu-%tu1U|U;*0^><PXf{-}c$MKq+lT0nHaXDF%FiUJbmk*{k=2-Y=9H^3f{7 zRKMUjyr`WZSTzRam&3I=F&7m~BSa^~`sGR5ka64=T*-RlhSfF6ViSfK$0}>$Y#c?L zAUs*;Rc%Z*(aHXhyduVG3}gyW+ljPS0;{BT2{-JKNo&?rRi=4Hoqh&txZBF(MErso zX|4Q;&y;5Rl86zU<`)R)2PAZeh)i*+hr<m)S&^}6g-S?ZzFs`zQ6Po4h2sBnFMap} zLq&lJgT!{HmP_of+krLG#g_7&EFTjjMLZ3e%ID9M`JS@5Oza9)nN;_kj6K2wmZcUm zDFSJ^74TWLMlvaArC<r_v=@`EP_Yj?I^+uc!>e3J^2zkfFxiNr2Ug6LxiqKIoOOp) zph8H*Smo7Z1#%`Y!`qK!{l0x|Je}m_LS3zaLY$O$K}1}ZkY<`u(5D<mhSCt$go)s= zYANzY_|IyTaUyC^bwGH?F4<F?q)hki)*YR_;JrPJr=G-XWA7x?;Ml)E7de(t5K%8I z1&K``9?pcEpGpL&QFTy*DRY~C2DI$?)nnJC)u-vYQ`z()!B5{c*{naJc%M&lCtUDm zCePDO>rgm=@@U_aaGlk05TmaMXu#{LJ*4$Cd{Ge@N9h1x*74mYuBB^#a=}ml7uQW< zk3+sS?C0#JT*6K@f_i+o(ee_n>@1K1Dxs3FK`}Divl$A^$_q|2bZ^c)Ge&=ef^i1v zN}+qFwQlD4_z=QMccc;;^th-istyz+TdPu05oobZ*jGA|Cp1u*&0Agjx`+`Wm_9!t z7lLZLKhyj=$7vTPp`9xyZlcLF<A$+wEwqxa9E_n{i0s1-HLCdCkl$r-_zNms*-ca~ z)u4Ee*#yOLR^8sZpXDR=({r8pJ?fup=Wnln^)ITT6CQp#zrR|}ZNI;IoS+5117H{` z*{`6#1C?66DG|}HG%Gr#C{W5VV8IU+n>HI+pfh|{Fwb7N<@KCMrhRXWvDknsj3Rxz zq7|p2-#==#eKbTqq5f04sx=43*6-5)k`LpCFQUfl?R65jEdP2QAj2g4BG*X*5Wa+` z<Z)vK?jPY2Sg!rESNlB=kA{#Qs{0KMVYRJ7VoBxF^3XwkB^fl!mN@%&%*fTj)X|F_ z_XustgjElY8}}_T%%e&6Z!es?natE^?L0gqR0K<rZ?7ZwkEvmp*8Y*dhJas_sHjXo z(NFrfMzgeh%!3II;Tw99!nhFj42<^XJjr1Fu`%u~J$nfIbbd@+B6J0&!h$y=k$@My zJAuq5&cgZf4s5NOwAC%lJO$?}C8vfHL6S~r?gw&sVV{4EUS(DnlPIuNvsAg}<8?9H zD&hqWvSeC+-O#dumOsN8I0c?Nn>yJLee2?z&h}%d%Hu|GFqJ0#_vm|M9u-+)x7%?d zyGQqXja(ZF@I%AlK2B~5h8wuHZ$4nPHNP2%!|B@Ca1lgxhl}a9Zr#ukS}SMKioU^y z*U&gHPX!fWOutw0(#n~=GCUDh(hJRfw|s<vj-C+kg>zo*b?0pKA#bgymW5q1#qv4x z%yA<O3dr;EU1?^+fP(a|j0G9{+TLbht@yJ-VMk<E`#(dEnJ@M|O@}sO4QH{$nDB*n zG^^j?I%UI1ss99NWY{yYWJECuo<8HxFP!&lz7Hc%%3Zo~XQ<?5P<$uX<AC2mIw*ed zV%J=Dg67dNHcgOq9+_raQgMg6po~&1>q9B4S5N$H+wBRB+J`l!>@u>(v=ctkT7oF; zO~pN)io@$G_<1u`w53W6z{gf%1FetNheewZ4X?2L5RH!i?~(eL@{y$$nL#I#OZUn2 zm)I+U0u)3fsMZeJoOl&}?%9v(UGhNYw<7yvG<{X~N>RVB>xW3VNK7V4Q%K5qH0^tS zB||yyo7Yb8`(2$5b%*}OIDwQZ1zGS8akA1ww2^{qx;@bLg2%tlc?BD%ENVa=9R%-+ zt(oR^)cuJ#<{5I<!)CQbYZ_vS<!5j|BJJN8NLjSxOOwsIFZ@5{*IVGTa`V*pr_fjH zzEbL)^Oh%f?2hlg4GU)C#R}du2bsmJh3O+gHrK4nrrDR}-5&<GKCN17Mwh1*s?0^3 zQwW{r@a4&sTWd>gcnPW7%U9EH-AZ}?X=NQt>COz;n2aKzW#VL?d$%aYP<lR(3MHBI zJR&M$K~{uK9sYtnu8#l_xbFL|wq*>)RYhOH{v`ADUKN@5xW2;+2b`mtz<oizx^8Fl zK|?wcr}cI#()DBPBqW)uMh3Lzo(Z`UX41-0mt^|(8~cNaLxkz1UOm0AE=&lJ3Jct1 z;hlnvMyo-O-1d-=*~Ii9%JmVqUwTHX@YSkUi|p#{O>?QY`NV!sJf&Aua4ZGcAK!~e ziIEr5!s5!YEvF5CgoL&+%Q0pW{!rYhkPC1B1qWhxaxOmu0MxqKK6uhmAg}UpxD}yQ zr&u>lQ9exIPwRQj`?61KYGi4Wzq#9M2qk%3U_X;#KeoS<b8z_m_ZTM5yUbQx5ZQvo zxQr|_9mI$Oq-5#*<;%AwC2-EdcdFHj=Au;-SX4rcDCo=XQ@;}Clby@1e`bcyaU1a; z&+84uR?}BxNw+>8%=*28I~CS@r?Rz0nyz1@wjgEHvH{fN<|F4VG2LZ{#YY>7fv{%0 zeWJ##H#%+cv;n-PE995Birzceq6;^*LJxPh^NY<@(g<pl0>8&mMxHc1>CYq+wO~do zHxjfp{#y09NY!2X@lTtk&}b_$)b5Ne{pb>Tlcm~uv0O@jTDUNE6u&C}@y2>pE1aCz z@K{C1SW&!4YNNBh6&ix)5Nz0NN!305c;u@H*loiE?OC19-stE-11&me@i`u)KC@pJ z@qwgl1B>r2+Lamv+2(fOq{G_P=3yRbYG3R9R`>IbIJ=XSjJf{pHV&BJwPxs;_|J#i z`Pq+}!WZxMsCio`q6USqGn{Gt1F2TJlvEXuV7!_QvzI|py$SsAV#6RnBM8?Y9_o;& z*h^N<`KT<K>Z$>NHBR+RDDIT~-s->jd;2H$lF!93#JYww*~L1d4J~I3^?u)Qv~lo? z_|CJ%Xwn7;^j^sy`xEli{Aidu5mmJvJm03~y2bewpDx;Ir(%6eDfOk;1Dqf?B=iNu z?kLRA|LrFF>||AVavL{%f-e#Vqo3sw^+oi@Lb(Q~XJ`2*UN2B83M%IiioSw}iB!IM z>#O1qYj7m9Nt;EL8Wm$ZFTb31s?|<KPS^IYg7$w^#ooxE9ALt-tKp8P6Rfn!r&rLP zFcc51_9?7T&zOSy4++*n<@4$%11Gz)VT^9w!NS~|vi+Kj`e0qbTi*$OyuZvQHL#GR zXWS$?0qw*mP|hZqCDpyxOlqHtnE=0$Ds+VRD3?DLu(Xf;tnH!Ov8O?8<zDPD%k?t9 zY^Q^POu93hw3Q%XC@qX9?A?gWoIW`-)0_KFEqQ`ZMSY$rQnAEigtK!J;V;#lgWY?l za(dRHJ|eKVnI%C629osi-lVKf-31R^!ZdwvV+0SBG+TxTON4x4=#611KmX)t#qmNY zZJA{^p#pIGl}l#TY3{zXikr6=a`H<Q&SK<udW8*!^E{YVwG3;kaqgWlwAfN{nHDAl zFcpVZC%Be+<*bJYOzBLAl^z*;5%3emtz7SSA(}co`?5Tpf@boCoBvU^j1J_wd{rdV zvTDXwANy1XcI<Bm7Vc-F6QoRX)ha1{a9^l?48m5PLBbL?iQ8%P2)f1viWTDyn){{n z6Qf~W{QlkTd+&7oYa0(8U!Yky0i|I?Y1x9})84@=;Vw#_2@GL~y}o%1R>#_q(}`9! z=r*N49TxG1%&D!m{PPiNcc>aPqNAWfoR*s_xWq6~k`IHMzBlqlFD#@US~d<@R`>I8 ziH3@`;#|epy>8-G^HaSOf27PmKWV{0jFxL8T-?w;GEAti_u^qypBUTIhB|QA8CH=( zh}nFS<b(Rflc8dTprk0WXDJ63nWgL^oTXhjJ>kKaUr$i)%odY+OHmoe=z@y(K!WOW zKl?;?<vhS}X{w~dEf-h-{#23!DZu=?1VX8Wr|13AEWD%Mk|Op@7%<{bUaqLus-#TT z@D3p{CBNBVguXjk{EG;=7cENY+V8F3yU_@!(?4P35vUIcH)Iv-S+nIQ**r}`zaT!_ zGsK1_kgSQD#711-I`V3LqXy5W6}k4Sx>zyrC+tP<kR2+qyscOWgizK8JbodO`&y#} zrgeeh!6cSJACpxWpDG;1SV>R&sJgofDXY<AZ|UuQyWSlfjVJdd@8LJyWlL_b8!;F* z`F(j=NRCCcmt{xzR){GTaZQCI7*8q;hyMB`mgnVwj*c(2(zp~rLu^d^$x5Iy-c27J zHi%8SZ#E2yFlI2B{F$7vLkJz5Qjw*i-SRJx+J8zi)c@=JizSD3ZJT{}9jHjJ;2a-S zveOLKGJFTh3CTexjVNPn;hz8U&%b{{@PC)T&V1*ufIt9=5Ax>}Kf2J}C#N&AO249E z$wJx6hW4&J|6#x#N)NrlEINV0z!lvu?8A^TF!)BNEFjd7bx^j#fbUB|KAKbO9P#I) zt8_<aFr&&*_Qc>#C%;yB*Ho$Rx*!c&Ixp!~ZRepnh*1c@5se5=pwB$3yzq##i=$kv zdSK+fsbJ7LSwF7V)Ez&LBp%U&tspPB`7^rDBYm~~LzvI!Zb5l;6cKSoRv4uRr>J?< z?+4{hL+FW!s|puPrm4zcaGbC5x0ln`nQf%k-`FG;;iD%oBwQX21D9|WK|jgOTN*h( z`oJnF66-Br8}xJ%^!uOwz#CPW{+4pj4OIP@gqeqCpM#ujd!S~hrjG!W5_*P%Bn`9f zp#w|&<``47dNwtA3E*26c0_tu%tESQ{o~CVmM{s1=dR#+*!$3B95;)|xO@2m-ly8g z<eU<J34aa&s7OJ?1I%5wu}(6KzPLj1$>=1q);G}AL-%i+f}^)M1%hmSklQ4h7cpl~ zDv)Pyu3S0pDoRnwi1<1uVtIr}NZ01n=^XH^pv(m<9CXjP)oZ=A&I60n46JKV0EKey z8m?pLcwg^b4unx-i-jT`M-lL8I+IpyzHEx4LMkjN$?ILff6&YR`Zkb&gzA|%$ueb| z<NGJexJHj)X_K%ys~7u9W03$VJ^_Az-j44nxZ%oAlCCj7_XRECmV^h6eEum_xgS#I zebz8IG8`44Xa>I_ZXz<bpgTy`q+=HAD<yp%xL^Hm0OHW23N9(O@%V9KAMg7WA{D|u z`ZtCNzY|}Glvu|XCdBaZ7L_(O;L)<iDe7mOZ;u%zG-@0V;!NBW(izul5zFr-q-ytS z{XSDQ*hq;bt?y3VII*nf#Q#p}SVrm)zdaCku%U}yV$~%8>%ip{<<vTT4n}p*vR7;* zX}E&Og1)Ofli43ZbOghGbg<M+2_3k!DQSod)L0u^B`MangMx56%H~9D#&QpfX6~;K z<>8veD8%534H|BX()VO!QGoljVA^l~JZ4jdjw~2)c$c0*nTFx^2W{3fad%cSs{VZR zg|Js>NP*kC#7Z?Qs`oa;%QhbixNtB|eK#TDCCwYQ3rldQA-b`)d5e5IGC!3@wGMYc zshd}SPyqL0<*%ga2j%85)7rH;2sHKQcpE3tjvPWpG7WkJu5W|#aMF(b(9gI!&cM&_ zk&E?Kbq4nz3BxZ>{(dJpc+~|*QwKJac+u)>OrSZ2BTS&3e&w-Q#NDMWI`DH{#XzBu zRoqjRx-)5qg;hh!C{ztBpoZ#vlpHbQ6qmZR4heAF8{*CkE4|1V1Tx~)W~oN#1T-`R zt+Jvv!DpOh4cx@NTz^^wp@H2upU)mnP9AJosM<2yD*(@k0>Rywq}PZq*gFrd2!iBX zP6aWOeF#G6b3uu8t(<)D2yUZK`-t`QKHcud)lmUHcSnJJF7I5wVjQ`xF3jRT_a^!` z`{TJ@v(@|AkSvPrjE(aJj`xcy^K-1w6<gnYgaHex>~gnb#eEz^ki(IOwgp}Y1i12L zx*>=}@vG%wP{70UON{lWF*mr;W*u<1_xn+<jI7+1_Ggq%j33Kg#WO}nd5S^ksePhd zxFN(Pkd->4o`Ko>>>p5uc}Ao@Q0GOLg?}NwS3^^q#rx~ozr9{#!f&_CBOEPLt(4`u z-n~#}#dZQ?rSKT0HBv&viA#^yV)u?e!GmR%q4A=9@@n18n@wFf9sjY{w%2`?`>>wQ zp_Vq-M6B?;6$*nAwHkhS<ABV}%8-xQJ&$wGAzQxJ9PcZ}i+^|X(^-4~VLtN=-rdR} zJN3*wDm!SO)zIY%h5a6m@6%Z%5C<yPrV+C-hV^k<Hi|>)pn$=Q5%jVVhJ88VYJz3# z2dZ|DtGAd1seOqgTt=@{$@o#WwhYXO5waO-0yU-kBR|yXAbG^~NpbcS1JC25GY&Rm zx}AW$jo4BE7&9XH!v!NFb}eW}NmByRR8Ll|y*>`dk$8*%0ze>n_b7u)``-raf(HEr zTAiDL5xpWJ03;iom2(6)*9@Tt|E+y}#3@uN%iit{raqUKskZIz#~ZpW4e!@@&f^2~ z<<)wl)pl%Ngm>#J6g|DJ;A@K6!8KfDXB<kJk<bb@Ei|o4sqcgot;$g|0=BWk+H#$; z6HQKGX8ne^3)qosp?ehBI!}n5r$x9=q;k788~$BqnH_F!ZaqB5xf!_TyxZTGtZd|` z?~k${tq?H!E6p+@LvSN-uH?JuHGJLo-0&)ItG>Sc<@p&v6NQq0@mP!EFQUAH0pmap z>|(1%{XNp2n!+bSvP+uZJ&<C4Yr_ZoNxEi_cw8YO;D?4E7A~^Onk;aLSccf@)m<+| zG=Syr*62ZcqNj0fTpY?Ctwz{zi7gdyi&R)EW>^dR=VobDmO@D3e!odo^Po7gxFoQa zfJ|0;EGk3-u746$Bhp;EacmSTmA33y-YN9zFY;J`D8IurFHfsFmD-3p3ZZ$CU%nb( z4)Xb4)2=1lS%BxBF@VB&{J47^p%qhy*$xv?u}49lS(#kJb-^upW>47o?~@j98M|1O z!clkX@`~{`ev?j5stzb+y1D`01($vm!|lP><|lx_rTqx#Qo7O5^^XVA0>|sJYRvJf zG7Y5SqG~huER`<*woo<w4DU3>!BW!rdH;LWoW5uZ>mgJP`y~^nJsufE<)yZSC>J1# z!b_gVV+GXV6m6<FyyG-5a4WRF>B3QtM>5-KX|R?)@4eOK-+j2mSmK#EGMuhXEZk>k ziC_^vE(!i<zCUhx+D@rm;un5=Ox5F08<K02&BUPl9%fui;!%_L9hA~!Ge*{yiHNVu zFC6)q!%vQ_Ij}G@L=CV=uNVT78om72u~&>%&5BKr;DSWLo>O7-N8$>>rzJMl{Ldxx zfZ$odF!|MG6w&CWmlkbmTINS-3qcr%{h#ZF@m{pgFW0cct-tHBBD~^%c=XQSYg%dM z++F?X6E6Aax_24InxdwM_rOL>lM&iT)}5iv@NoNs_)m6#2r;ZGPE_gJ95Y$B4;MZG z%jagfVuL8ifrx5sE-fx5E%rF_s>H)ot<8eUKq3wwJd^QJA2PP|%cZsUC#vnr7gtX= zPEJ9!pm|zq;FmKDNHP56FTC_T74L_}&m?w^YrB*HXcw1@^qFsuzd6>OYatjs*CAKm zR?m+;c40Ozo!Tm&W`_QL!Q!b+M;B&am41ZiOE}O-rHAXVn+lbhoZ|I<1-n|r1cTU5 zpnKG-&2D3cu<zkiD+pUui+fNP>Opxh*Sc<C%(VqnW=av60uA;#8X91@%1uRxVj=vb zp`AbSN(Kqa^p6Y-2DVWZ?1=DihSfU}v+%D11%&>iYjiJo!N$l9*rZ%)5HZSg!%@AV z)fqdpFeb4Qe;E)No6flc2wcsCI(RPx?BP)dEajnpjtg!lzL{P2Dzu~lo^WX+Y#_IL z7>&=~lv=dK`#n~S3iIEME9QkJ;AVk1^Uzk!$SmcD)RBeDkIg>Q?qN|Lf?yb=$x$T% z3cO0ec6u_4`l1!9IDie119aw~951eA!q*o|jI4%^tFw#H!FxBBnK-5|S|tpiygQOd zv#$ZikEe3%sbiyNj{-H~X<|4LBRD~}9L^!T8jLV;`WK_fe^r~^W5^pB33;#mt2Egj z?cRbz!UnZ=MGAwvRYMD#QCK4qT|;FMDpB#O!9(J1`(gTam9bvmPHN)L%%GbbPabws z+``<D-oh*!svlm&t|iH62q_a$wsT0r7t~SS+5bBiLi_Qi2LS5tIG`z3|Dt^8KJMvc zPRmMSk*a(Dx_3CVTMiG0@>L>LRlGvL9u;pVu8~mAJ}qXiXFrb>o8j4DZ9tSMb$rru zfXhdpEmUsE$8iFmHEQmVi*fZN&xDbY^a`jX8jOVmX9nF*K%gGO0<k6#$hoOx(GLFD z{*5INR)RpZ%L_wYa*^E$EB1-@Y1&`4ZWdQigKbT*ok?RhY`r11U1jL7bV;vg3P`0D z9E}g4q9W8-BMJ&FhScb6Uu`bf*Nhe^Xp2j)^OX-xDF(fjJ}Q3<*Z08t0t0gzay|UG zSI*H?6)+vC*8X1gCpyVj;{$AUsJky$R~>sl#WZx3ky``5M&l*A7U<kON-e9Z4UJwh zcgXD@U41k>5ALB;?pCDOw=o$gY;tB$noB{zlBkGUQvEOR=JZPlD5*RvJ=mjcdVL2< zwbaX7jzV{P;Ipsn0*Uzl^$}_Yn{g19l65b94LI}GJI3PVM7r$!<zkWf8C!ex?6bvD z!PAMBlnx8)Vc^rrYE^uP-nMukO0mUjQE0KQ<0oPT{TA0j696`Ywt;R%;D(=1$(&uA z8B<+HCp_c$cB9FD$aO=77jrG){o4G9>)kQ`=udp(_UR5m#h)GFQastbUGJczopv&? z@Z<`mOtnL{+3@*rinwMqTxDNSchFz-lL{yo3*tkf+wg{$cHMDow*np2%2=Wxp8Ww% zqMBS)OWf|Gp5QP2Ff__JfLr4||JH-^%0U9L1USX<`CnWNPi)`23!}u%Px_BA#;lYI zq~wyed7LtLR>F12k63YF@s4@jHB^*$j$NqmLs77$KVt)eW%#1|fI3GapGs&n>e;jI z@b#^iqK5{^5&6-9O>K)w7}znSQ<Hm6Zv3V)Kr;S`|821P@j9)X`4gm9jvCz>$U7{j zM1@Leh37`hMBvIR3J=(cqdfPb!jvwBl;bPp{8~m8!XonFJ`vDv0-IQJ>I>SZHk}!{ zeMQYU{4V$o^C-qkl{KaLpX6ix9tKyy#+VoO*F`I6N;t&^81zI4y;T&$AHjk`Y{V75 z1cbg6`lTk0YOuyI7v4h^5i4R;YErO@=u8D0eoUUK9>FR{dwpO-+v>bz9bW|@r2A}C z*&Q|`JY4^r?aEa*GYw%qPJdEsUtkT$F+71(1|-vJEsUm1#j*MfQ*IbrDv03raNV9P z(xS_PLaLLRA?`rP-zab~pT&TJR~@^R_X{7rkRly)%VffyP^Gn&k`0&<TFNaZBJ!A( z^hozs)+1VtV!gO*<eibNR+$h@L+!{Z2tPdldRTN*wr2o0=;2j?VF7aRfI<t@L;XT+ zJ6-3Eg*UczNg634^r#7&yK4CJl|v)94tU0%$%Aufr$z6;yJ2_N$4V#Om055=u`+C> z<<XNXjE9ivaWnj+)lq#6UUj@wyM~gA9;Vm^U9QhmP$KLVKk~gcmXs#coYaMaS9=ke z*4CN8k7h>Tr;6BRqVSc?FbCYaiQlYr+iG=sb1B(x6YmyR-)(H#*Cq*cR(d{7|1yMg z&1)N;X!m;KOrmkgyYsIK;7z}gLe&W)#2R$4IlP8((KvU9gMVh6;xHY#jw3X)Bp!;c zK6;w3j$IB_8JFumqQ|fAOId`$SE_bBeE(^|c>(_sX~OZr@Z_h~h7mef)W;3a%9R$E zq+y>0(sbx#58*yBv2TfWY>GsWMRwVfdBut|4Ob^d5L(SQj(tV}p;M-c_Cv<b_rz=X zT$7YLR}7q>`DNr{%2jSuVfDS3T7km9HX4YC0NEYq{|vEdIDQ8Ju>WD^m`P$vcL_!R zr;CiqI9$7>&IX2kj8#`Bpk3uJZsL)k6VkR=`v*yZ{)Dw8z|QR}WNb@H(?FunK<bPu zJ>=Wh`aWtogn1U~`XvjKGdkm{mD&2BnsD3f4jh3DxyOz{+32;7g-Pg1QM!ns$^JUV zLUwd1RP)#NtN5SEj@7AqVdZ>Ws_&SYlLkr&vZcB#D*hUgsrJnGSuuYF*Q`(}7<51f z7h0L{v0v`w4Vb1~K|K#p>$5|JY&j<Km3?&DDGvu_xCk^+I=VBmQ$UMd*3Y{~uC>mT z&(sfVi8{1e-90tdqUC=2^si2kZEmnI`I59U71v4&dV&arjQo^+trK+e{rAI`BxDfn z8b7Ct4I1^T%fuV|0o87EVB#I{yg0>G#UHmSLrvQ2sEb`gFo?(RTcq(0MmfAoPA<7i z^$$9D<;%U9lh&`WAG0O`8De62GVE%yidGEr=t`JSGd49DgkLfOFXgZPlRDOf1JQyb zoz#GGwJmUb7)6(v%2kZ8xnL&x7mmx!SK-@v%uhS_)%zA3+4H{X!p`y7ZWb<6t2xvm z20b4&Mip&N)F0sisbP5uX2j`M&WX9z?Rr*!=|AJaG~q~pz+H6+2<vEw+NXoJjVqwj zYK3%W@-p*>MYnsZmG&Y=&@f#->EAE)x00vGDPcw=h=!NuF2^3WZu)ZLW-<bM<yw}0 z_uDhK1$N*der~56Qyxg1>h`qRn<W%Vm@=?(cFi{8otfc~9>$pjLQ-IJj(<sOGZpUn zyM+xkv_bo8<b$lCh8l!k%Z3EWLMo=AUv-h<1hf4wFS$mUfV$)wtc~loJ{|CAZ=@9; zzn1zID*3^3vq7Ja)Nh56lUHNh>3s=$NE(LZto{ECNh+<TKS}zB=debaD`1X#BDh5A zjmJ~p+{xSgn?DemT1nP9wE|!bI<|>bNQhQ!{=Mrvz-MhW^DsE*%7@*J$oF6PK-?nG znbV0QJr}Wk*Xi!lquY`D*R>&(TuyKXFEi!xiCwcT^WVFm9FaYd+?(74ddpSQ=%FCk zc6W~H^~c?lwaq5*X0VE?up-L`CSe7zp7ihO$*35|=!!t1LHL(sm4L?#LC^K<F_@#} zh5Dh1&ad+(&r4jMdZ3YOR`YXvd-o*@$aw6G6wvEwyx}gyBB3jcQtwAi(h3mf58|av zmjmJ@RRQdh3CB0q|Ev#hhuB|q+vYS=>TiBJV*>?(VY%YF&A6gcXl!Y~@(DfGC=m@> zQ56M^dL+mOYNg?B@JIkdZE9&uCv>XWL8idyKC4T=&nn}9fSvVS8+z614g8<>Xuvmd zy@}t7E3eLsIKK80>QTy=S^kpa9h)>o#*<^PaZf#f!;a`MY4=+Go-t(Vy}rSXCC4j+ zux3~LaPu+A_Rx1~so!I)n%r}#Grk-t+xy%9=q|G0Pn;F$T#SncPEM6<4eUR!u{k+j zTDJOeWFo^Fz2Yj5J)2D}V#mFL1!YK{V$NCdv__dh&EI`4PbcUu(@RZt>B`ZDDS`U2 z=l%a73fl_ASI+l6Fk!H9c2$<#48Z!0%aG|YVVcDoeDsf`_zD_<sS)hO7ext2CthQM z6*08{m?Q^9QKSR$KVWWCtx~hN&bmjxBuCBQxJtSLTHWDzldbj^d{C%OpB44CO=;9^ zy?&As;_p*`>&cOc)uVB)aw4e+${aL3sxPtI`ggX9F(3!nb}z$a0c1M*x@X)Dj?_wR z^g=PCyWW0nlk@L5rfZvwS+4z7TVMXu80yfDgx)Ukl!rsGL@WFxTzo=F;C=2-$IQ4? znS{{jmc_aNc?2fDWD81&O-IgOY!`R0^*DZ%4h89-Wq;V5StzJbr5mh1D751rhKEdL z*rMk7W=CY%X25^6FGJRpNtt79mWy8x#TH+c88Y4YRp9E?H&xXc{vb47N}Fj9%9?Oi zu7Nhv{BzXcTGKc(p2XqY6izgwNg4Z87P&^Zzt7YmJ}V!11@Ct;XNK!@I1M0f7s@v= zL*-G*?LAa{ogYJ#Zwg38ckPd=BJJVE;yQKjs1G`8@d-KzC3exES0#2)nX!tcI4%>d z62PIiVRHSur5Qo22?j{f)IEyyy?Q0dx$aCO_Y%rX0fKq{!vub{Xm1BD`?S|F`B~jG zo?niZE;bo*-7S9I?Ma!wqVb9AK%#W5T4Jg<A{pctCxx49Bmqp*34)o}OvCfO$VQSZ zdmRe%>46c0x33KmV{ahK#PSH{SbyCV{%?8MRWlLS74fyLA(ra$Mak;O`yNS2$W%*u zViL86#DHq8`X`u!&=AnFe;7>ccZ)z!jv%oKAR285OLUK{Fo`L84E84LXItRhw3R0q zV{H-<>cgAk<BfXf`WGcUeR1^Nt?{rK{`A6MdplS6yj%||Nw+_C$|~s$iK52(>rw%d z=(T1>@G~R#4UsmLH0ck``l~zGml3~?F`7u^8kS##@UV3T&;BQ?0AIT`HQB4w&o66K z_^c5+h4=mzR>14_nw}#`pI@AvXJi0pZq%Vf%004c8Gd#wX+K}bnP@*MA?d`q0T&+* ze!?S@pAZBT<BRnwtG5`!-vK0O|1Hbi{{B_ulvt5B%)%Pa*mZhp{d>lZ^>uGNgr+dO zqo?6s%>={vzIm13;TB;6*>mq2+9gn<;U}3HL>7w|P7)H=BFJ$|CFNw{pD|&8m>i@t z!GQ^0hbddEvZ^xOv=Sowh#FoN^-FmOUj_;^sD50oyY7Bu%Ki6(wk1Gf`>rl~;tiKg zTD=NfnF=VT)u<5mhzeqt1T?WDC=+oHbH_Le=cuvaXqRC+A8fQy?5LqYBI4gP&I{D- z1e4U<7Xf)hWRCxBVNhQR)_YYJ<IXlpT&I}X-EF6|iB3(p>7D~OG(^GH>Yr~pKzk1o z8Ggl-o|XlMV!L3613vXGDl)hhizSN7SL%Qg1AiI51`81Xlkqbh=&2bxa=E|T`EdAs z)&8TwQ<C1f-wBLHAJb1wG={rpfW<eU7s2jJ+8cx%*)u61<y-}W%e8%UY@s-&ZYW9E z*aBvUDl0|ZyFaGB0ovw4If4Xmlr7p~$;%)ep)ph9?NP*A{DZWLgB*^&^NgMZu6^g+ z&qx=LBRQ2pyADDXnSxyow~FHVU0kKKN9cl$I8hMi7{j}sc)Z>XjXm}pzk`miG`X;p z+}lrZDQTweEgiDVeh9$+U~m$w-^n4c!_Lhm53*#aI``7DnhMFh*J0ueB~!$-U*4{D zR44#RqIHZ%B9VPw;MQ3(x!Yb|B)_L&SE2F21MX8|!tpobE83f#%j2QR!2gN4ALRcB zdUbM1MDBp;5&1_#36<ZwMMwrLNo(IGFfUMYt8c}T)KHTK5I{{4<1m6Ih!`|1C2HKP zVw>Og&hZ}HaNIEHIc=Um@CUV=81k9_j>$pdGY})|KQ9*`TD`;Y*_@ft?%SdY8iENg z7=pTm3E>*z>;~~|Gsp5tX<rQOx_$Y`3$xApfaHU@azVtyC`fonui9qe{hBM5>k^z$ z^#qu*Poy)vA6|(1pBKXSW&rMQ<3==r#<JexPS6~~C~3T83{dNsr&9Wg?K!e)RDf(9 z=)cJ!eZkxlk{r7a+<ue6eq5yZHHCdsfsy9i&M_(Of4=hy$M;_zi~gsp{lL3Q_r_6Y zPT!m5JPKpQZmT3?V?DajO?<&Cu~IcwuR-3<?{Yxe5L!-&aQ9-BYMyh+<fOM8YqIH` zKBi3;!h~{)B^TtNsq%|jJ<h|Cq__9L{{aAVO`IF>>zpU+x1ww4VU>@(BXNfARt2u& zx8?SYe=aegGRq<8^87$vFr2469E5wK#jXY|O;y1Xj34o<?>o6iqA`)m*Tqik7`a2E z(#*$Xw$)bwum9WvE^tcV*IhusWxkBhK_8?f*5H9_N!sP}DqruFRfmY(UYxnRCf7dH zCk?%g0=$yha=OJTrUoTO`z3?Z?+mr@ugZ)j<H){k;Y^|C4Daa9A8S6O_uM_(R-x@b z3?uh?;}l1BVMhOPw})*GEI|)ycE@55ot=Y65f7*y2$o4vL%0#^8fpl&pep)1n&ilX z%2>&>5M%g>rTyA$?pr^q`JV9Jv%oQ3dBlR7R~P>J-s6)w5@PDm-OZ!W)xCcnePmaw zlzje-@++!uLy14Lx^mtE@9$2+sZ#VSx>g!lBA|^{ZFF&}6P&dA^V49LXTG4f9a2O+ zh^p1bQtgpl>B}xGF%~5cf)vcgi$nWv;GinrP^<K_*Xi~WTc<l8sPng5W{N<0;js?k z4&&^|o|Gg2Sn|5KR5b`A2Lqg{GE1al)U#p9x$18Y(Gk*VK+2GR=Wjr!WY=Xmm`Z6% zgat@zVxA8^)0IYbbsK3mq=)ABAMmCC+tDQhVP8T|oSR#smi|P`&I<x^eEq)Bf3tLY zUDG!H71nU%Go!hEHX$um8=WAY4-<}+HZYC+e*oS<A-~1U&qxk9992Qw6&a0``s%Qy zQJDgtZ`!BQDS1vyUz=88pDRw;__yeqBpn=AY%30W6h;N&P5LKyzxwJK6&w@}$y*c* zZdEJ-mJgHhLC;npHxi-6_}Ov80f(b12oF_Cn?{9Yil50mwrKwtCC}+9iCA~?5cWFG z_xzG7!W&7eLV`zW3gJU2I1KYW@GaMdiBvQK*2n0hQN6%`R!<22S!X2&9FD3Yu55>+ z{Y;S;jp8^}%x~X9Ef^zsOEft|6Z4S($57{$OTTB!wkq$7H7c!e0sp(_dcmRhTt{Z{ zC!pX~CBz5vVKN@s&{MS#Gw(f1ZaCm@R3)*#Fw7^G7V8a59Yyd#I9#w-ib@XQRhplQ zMM=$VlRcMPU~{8c^59T?KA0BR3iHyR+|>&X>bb)9h6ugn>TIQ_fbpPbOaE*~0Al86 zC<h#lswEcllyb$5EsRQf_NaYjqAx=suOh(FI5~FZQuoj1-He4j4tsFW#>c5)STGGv z<@q{}3;h0gz6aZ;)oU2s8mQD1FgF$&Y;II5v?ylYf41Ckz~QKBVsoC268d*r5O0zY z+X;2qKZs!tDmfa(GL`jq1V>Bj9jgEsfdfEb9RR}}w6IFDvuRxv9FM5r(4W;W!P92w zvZZfsV;y1gCS2XcnE9E?0f(dNi7k0HBu@-6-X!-Zi@_8yd!bp$mmILzaj5gw<(Af; zQ?}q}vjc~+PkU5^Q)z#M1&49I2kUavt|V;4RCWp&cX{a)nyb;kuF93Ol>-h(RTLZW zhWnUY9WgPQklmng>ai^?u%|A^>UT3uZJj+(a{O*GD{|l<qk=2p#45?BdWS=w@1bvX z#q4>sqEo<_KMYO<r<n(Klr!gs0}e;k6zks#%Vp2`rbp^xnB<if?$h?KX~X?yn%jg| zx!ltI^Bq+&NERHlntlowJ~saZ1&3*uWHeL|FsbkqFt#0rJO{?iAzOFWa=_uJs$y{4 zO`@<C@up3=*8v$bc<Qq%lpJ7I=G$P;k~oj;fxQMl`;6ad1V@u4IB4m;c<%C8<LYxN zI11-`@cu=;$bj&9Z^a^Dex|5VuZwFj^X>D%h64^q)fHDGVTt?oEG9qHm<D0li%)Au zvf>K7I4o&z5(zLUIa+@==FTO-!M{PHq8A*`zB{>^o+b6rSH&Y>9L}mSX6~L~$~njZ zhodTs^A3q97{r^T!7(SZLxk)7Q9Ndyq>|%~Vvrdelf{M=12=F}EOa<T!SQ59i*V@A z@m>7{7CWVpN=3jHA9E3k@iUdh7Z;P~!wm-<j;bzxS`>`pO>)8osuH$_U)TGiO`>@* zBuWn0-uUyr;d^B&4txeWquP;*C^#NHHLj*N-H7F`k;+X0n^l!9;Z$In`P?~i!vTk* z>WjrT?4w{5Z<3Z54Zpq6tWfYAh|o5v9jyGkY)GC<R2-N!$EEkJEmt}rZJs}h)gPlv zCAum$1q>r#{hkgcvLT_RbK^$&;Bfg9gUbIwuHoUV;^-{I5+0Au|0^-xWU5KZe>!!X zA8iz``B3K=?tMLxJST9p+JHla2nRfbq0vWosWWPr@4+H&LpQXdQ^4k8qjR5Z2WGp@ zjT_~I!}W3I^|^lK;wyXS<;&%76i1a77kX{L>#^+WQM^fBEGD&`m1i}xLgb*5qkG&C z<{)qkx5D~pm^v&TI{^+dDpT;x{15AQ?>?l?sNQGAQ5=dcykfsyxhY@~PjDwNGI)O6 zC>I>+mx(>0j6bMcY`J^~xm-GTkaCKSiU@hZK#Ce1@F$X+o{a^I(jDVXrMzXVD<pRx zZlBDGXmd1*l4E}C7M2`_<T+sBrVb8M#i1LO@fJ9WeR%iz*E1&~9N@JKoWPz(v|>}h zLY~dX0k7*ExltZC)PeZxdwZ|HF8-AK*ri-tsrxPI+*(7!S}xtPuPTnp5b=Vm!TzQA zL|<gf>+x)a!yd2KDhh_)L*Bhp1WZQiv00gHYlK>Y`lG2L;ApurhIPr1$*O=+!3YO* zMxT&TIk8KU?VLO!=H5z80pn4(cNSyj=cls3F&Li!Y=FeCi7zkg8#O(Cm`gXH(z(NH zPSNq|Vv4K3cP`o2u^IIWTmUe(A{`6yrLMvLO)GM6)$1+cwUCK`p)h%#AL-N9h$RQ~ zN5}Or2Z005OD+p=z@Z9R75(o)Mg=;fjZdG6L8FGOIf`z->#F1wFy1?|u^3U#l^bP% zLo_!C8+mlZFJ`MlG&j;3HV7Rr9dx{^cv2J?0v8(|Pjs`RFXrzWbSVtQnPn7=EkV3V zTGGS9wB$LNl_4rQz^v%Wa~&KlmwP6QfP-JpM>wD}+Wu4Cs5BdPNwOu=r8brbR4S{* zT=6A-zT9|aaHzd8feM2zW~)Q>9i(#&2Bp&nH!f^-b*5tRaA>PzJ2}_e?^4OKa3wFU zbcDBpOfgBso90RbhhOgWmckr)v(iQ-N4K6lKLL(L6F4YqenZQQu0PXm(>FH#QqU*C zQ5?pf0H=UOm{J*W#+38btAZon+%Tcz;|umi?cY93uQi;|TCU-?PjOVTcqFtqGWZGc z!YsZ}Gzy0CCPi8p0gK3dgPuIklcTc-`=jIeF@gqg%(t1q0Y(Kcw~d2QnRx^o5zwgk zj4u!k4b+A1MX6)G3OIt;+%OAZ68loQILeN%kV`S4<8a*ZD<z9{cy<G!UZz?;FtOn^ zUH)QS8zm2~h)Sa-rJI#DQF0vjM-`G09PmgXI4EmQozbtKKYua<1xGVx%}EvkbN(1s z@7JwL2Z!q;YHnDdBYsixU@A5@EVPzhS-!{zNoOJ!3&-upZ?m|^6F*thFNE<^^1=w1 zWXYkM6(mO|9LYkMLrb0$I7CGOdzRpVNx>EZ$B76>)6<8~DQiyS0!hUOez67kWZkM% zaHw6G*AW}m=$P<dgf~jv|6>hYilx$PFH;xHn4Ph(c6cqexR|gZhu`BdewoflN)n5W z#-v_K8Y4(%1-O7EhaTo2a9kZ1Y|+6%M#K=|5S`KI56xL~RCG4T%|EGo`~L%uff!)J zR^ow7{U6Ov-)=}Z*lR7_a4@Ynk`*RExA5+FpA9*By~ZdQ@ApJX<OYpImy>Q*fE-YA zV1AUs90U%$tTHw^G$hCZ;J~j@gagKYX`Rt$Pgc>W{KFMpc!717DMo2i!2T~*B{)Yt z(Nob88&K+5*;eR@p04y^tJCTzL0n{`IqRAYbTI3fXn!<ZxGR|@!zJG8C@rJTvw5>J zHV<H+l0!?L>)>d`qZd(d066yPON9}R)kn|Bs6f`dP;8>u$t%_&^-GQtz!CHdB1o#P zTODdj1{+j$9NxJI#_XI#b0frDOq;+G3yLV1N?%6Ulzxv?-ri91oXm;<2bCNY<^Vc? z8Nu#o=e$toSkEuW6n?#+Guqbvwb&(T%9^A2Zpi!-U<9nUe!Yq`IMgpQdlpR%`ep9~ zIzFn;H|qNS%N$}u79B606uPXKKfJ&ov1Bueo2G)%muYCAytGjJYZE0zKhzX$c0+Q^ z=SvQl%t7F|563FPt8{|KdafWi(5UF0(MJ!-sQjWB#runT5{!UdcyOo#bd+MIMkW(W zBw~q724G?MT3xm}vbQN-UIIFtR)?hcpw_S8N+jU5y39#YF#Ixx#^hcvx&^~UsC_9h z5s@A>2w@B|E70bcJT5uL?_@cG0|Q>;-C$;r8$JJg!{NIMJELL;E$ycN-Z%-!YD^%u zJ|Y(#9E0)V*mzw)BOXrxI1-6?%tV#sK%Jq(wG27YQk70SsSZg+y(*FewiI?*lLMxL z4d9nq!~-ALD1U1XfB~0a#GSd((T%MV`Ul)cW(CR7nJ+n(eF}jCyQ5H&jExCy^t5C- z8Wrk{!p_Hau}RXLHAk_>i$#7?y1-JmO%54wxaQD@n3Vx)#A2~zER#&e1Ue>6G4yz_ zj?f{R8;Fh4l{-vbR~(%x*0Dh^5nFJF{LK2nq!tC^L9f-&!2G@Z;J{L10f0fb=ENnK z#8Q|1D@kFF))s7Ybk37k>2AH2n&vt<TA?KA5xUj$ca~$;T!=cOGe150+MG2<@!+i2 z;%9su>c7C?pxbO_P2{nW$z<TqF;RZN=j*lAaee>AQM%z3wRZG})9N@)hJXc2hC*>0 zawKrIENvRnRbWX5mf{QfYqlHOt+}Ovph`R`MSL2<97K*z^eUHxSGnrD&Ji3i$_K%6 zOX$k2-?I?mpxg9#xo!Q?6EZ43Q^66pIDH0o)^7ytG;pZ>$-gXIN*uTW<Ph9QCNqGK zc&u0;?8|yUhnnpc*eFBkqwcJOj#I?C^ne8fIu=fef^kuz^l}Ac28Jg*y5YeJBj!H_ z#;aWur3LojMi3mDR~h#0(~34|av)ehmqqhK^%ZtTSD*a!on}=2HV3_S7JDtgu~f$q zFne&Q)Z8dS1L|#nl9^-%ei47fGsW({#rkXhjdI;dA2pPzTyEKEb=b-nuwcC-?mnyc z9HU_22}L}w_b?C`V(`ys7=f`c;q@#KPs+PjuA3FDk3mh2`@U%n9OP9lqb{Yg@L4EC zC^NeLWPQe%H7D83Ge;9szY#DyaHv85o&`5DfQ=Z^0{R<hRRA1`WYNd><_2pT9qRtd zk<AgTykBuz9riK?ELi_YV8{B6X9H1B#Ivnp4<iz#Nnuf~hY`dIq!-Acs7krQ<awSP zLfGUOzc%&0Pb~z8rq)!JI-_)(e)a2h(`tH>?S5$<opseKIc&h;`WQ1B7B(djOF~an z_!Rs#L#MI{tE@*2&+527eOtn%Ncxonr`2I6<BS~^+;u;8*+jv%1Sv!hL;U8^fH4rv zpQ30_4AS!1az$o^$Z<;p$MB8!eftOwjDU3`Ia*qlebf8&NxV(p{vC0n`5(n3%Sm7K zwR-g`mf&z<a-*n#8&F{YE6}89-O*S=v`6V+rH)!1YIZr7Yp9rVN8{5DIxJ<Jv4eq* zsP&Xx?ut-_q4zKpgIF*Uj+8&9my+iiIj-Egk_X4l_kGmNKyb7OY;?B{`+NnR(IK(! z{wX#%Xk4H{TpjUPl946cbsGV*0tYoWEb5H}a09$aB0<=Q;l~+jauoL~iT)ZyM>f?U z=~C7tA3JJDIcpTGWDJ60*2`@h=y2IKJ@vU^WlA?IqLCrEp@HM-%{Si9g9GXjAvkQg z`TlWd^wxZ1`|9e9zMB4oSnuKvQ!K=~M(ZE~Myxi-8XV+OiuX4X(A7vL1v(N?dSKC! z1coGIacXkZNvp%P|5DPWtfk>5y`*1R@i|>m3z=r@us-*Q&7BP$7?uz8ZNS{Ha>Z3J zD@YC@0>}L~KzJN`43298C&Uftj5f~@H}uu?#-DDES^pzFH9rN6^R6NllMOhm1l#~< z2uNUCBawu^!g?c#MTp(iH<9Y7rB=uF{gxvsmjcW<JUBR9OUwF|+fJ*axL8N%1SVK4 zG+S1lfh9d&e+9@feFy1q3D9v#1IH9%1D(pa4vr~}8{;sCw5ffj9l3$4>CN(5I~9n< z*7_7M&Li#-^S`4tI5Jl6{zN>UjA4m^%?+$GGD-9)&?hxzz)UIhnrU^Y)623hC7nKe zaqq!{doK>tX-U75zV^O@4wH(`*kN<C@VQqPo5SfpWy`m$;o%ZUL&VLSf)P45F12Vp znbPjd3Zv58PTct6=l4o9BXtk~<La(ERAlFzJUH}88<Z9Ww*rx`goceo1{BkeRjmC= zyf!YdWK%2hF6G5r4<5Yp&VvVUy(q!2+;Q%{nZ<g|Yt~q=XR)s=ax8f_`pVuAz^{vv z0|7zc5Qw-jb^rd<4KynBY5cr+4!8m9WPuxCRA@E5i44|6tNkfp%;gP)LhjuXDvk*o zqoTPKK?zZB061cz(*f8((}LizM@KCzo6X)hILb+5<K1@zHiX14@4i@*M#mq{#z>Qj zu32LPUUx@1FFsEHQF!@gWf{pq$0x1VhOdH#j|&k(hY;?$A8KrF25x{+Nfk3Hd~4Qv zE=bKsz}TS3*^Goj=Cn!a;7G<}nv#Ht1jf#Vc|mGm&5@YcI~^UFD$hb!ecccgm2@cw zgbhN+0r(ZkD5=xxFo|y#d6$@L%N<e6A%|--98sB4rc%qIw$PdxNRIJq!$JTPzy<|J zQM9YNSqQiRtLe?+10nliBD|KTfWfG??ZL&}9rM5;X>jOHB@sj6EfqlxM8`2VpyJ5v zoq`R_k5%=3nqEFUN=r94J_VPO7x<M=<y#%OhH=NQ7-X?#jk_Z5O&2T2jdz4M%iGtE zVUFSD@d9!Pbd0ycU(+#dUXV<mFW^QaWz9`(Tesa<klK!bv0l;L_+%lFNCcAd;K*2j zLmRyT<UnX3H^8@OO2UVGr<EHC|3`CG1cxj2@<{r<fAKb8!zgTZNK6T%jgiYvszaCM znl;Wl+}{3j$U!qa$_;ZseL>^^Pa-}BYydX^7o@RHSl~q5Xlld=he@aIPO0e#7@G?T z>hb7euq$ASqLgk`5E;<tz*<AQ>6XlZsOpGkPANBHb02-=uO2wm8@F>gS(mZ`%?;A0 zZ+-fy?pNMjS(ElF2hIf+U9e`Yc=^uzM$5}%@Fd>EFH35wkQ^k!1^`2w9ymV<OR5XF z@sHJyx~15P57cS|j3r==1@B+<a#zTdHYxp7B?Bc#TvMJPSZ~nP`Xoe0?Oe*7|0BP@ zdf@PNL#-g&+_-m)jeBoDxOwxzyZ2t9)ghXx-9D$)p(|<;ZD7f8c`rVT!?A4nW`)Q> z%s8$##sC@flVUDu8)1XE0a<g4dSZc{Vz5TMHTj<gn}EexDvJgBpz1JprR2du!sLeL zQWAN=;VfWdLi9$h!LbLSQ@}>`z>&SSl9P5Rh0Tq(@7@34wbwqFy7#uB)gj5CwcLu+ z>L~E_qh0K5UVOIX2`}*S$l+TS<UoUB#0Crp17-j;8k+zc$PFwwet*v*-vvLZt$3s+ zr+~5T0Os`AV|OnvvNGEm9DiAFTS_KS@i^qaKzMZp1x6-gomEc&HmU;-YHmnlW9`LT zg)Zglho8JA^vQ=;-+oIkI!Z`&q+edGmEc>o#bR!YxEBOE!msZ6Ip?1QH#Zhod0`IS ztQ2Bn46uQf21279ls78BsNDYKxy~YB#}i?B5L^nI3-n2Y<J&g@9Tu9H5G{}xbVad6 zDn!@-a4hUuHaGmBYJo#d9Z&*8zPUjz<+ne7e2w(upTE6*udvl2?^m2w$8nmngIRv9 z^gIU7j|Ni*d*iX4kSEB?O`Z#KK*?b&Hvk(=O~{Oy_8FZUFfPz4-gQc>tv08Cab+jq z4KgeNMQT*#1B+2<tMd70pM7gpI>7G$0=VEN@DY!RkB}Nkh@4wDH~iHE$9{|KmZddF zZs>aZo%@6hLdX4g3ej;;!r%7xzT(LKf5a@fHQJ$Yd0sF@4R-mHeLK4&p+$Efu(&u| zZtV|dg-Q;c8<Rtb4FQc+)Qkp>MvQP+dNK+?*hav1Ys{)}bvHlifb9hEw0Oi60kf_+ zKKtymFMi##UDgJH(Ioaq;}AKANSOH0s=48>COERoE9o`qpeXc2NpHP%;{$Xlx<2{f z#;4#{NcV(akzK&D;;c~+VulEqInWWd4RjDMxEjP!f{&vkA-4dAJ2X48yR(ppjz-E) zo`YG@!EwxuW<iao->nOM2RC9VGD=x<leo+4mB_T!+7z(=$UE1VHmfj>e`wg@7~^dw zGV5%cbPn69m4>tw$|t)TxoF(9;3~4ogw)Y);9@qXG9!q(De4Aei5f8LyiB7QgCUNn zF^hhf@iL=vUO#wUj9)cg;yG_0_V#f4o<47HAUvR3WR98F{`&m?=YO7uT0`z}J5B#I zs*OD)^-=^(2@Z}96**coXh58UF(e%f%Yu!T^)A;!f}^?jICiIFlA9Z>bd>_w5YWN& zN<5<{nd-r#WBZ~s(aTWsRddXM4H+0#zn3)_^?l)J%*HAfb%yHuJ6xUyE2V^1C$?FO zkUUTOqiJy5%KZ)C#<N@Z9y)U5&|Uxs<Ay#iP*x#Kk|C_(*rJMnX)$w3L2J3S{{qtD z?!bd1T|2<)Fgly%fpf@@rY(+p6y^rhZDj_>zW00Zt6*0H4d4hCREmU-n}^TmdIf4V zTCeo<yua-A3TS_2lFLH`UQlXbf+W3fi31}R@r4;LT3Wq+tA!BwCDhs%fu*#CCeNYe z0C4bzgLC7Fy+;lnIB?(y0|!$o5aFOXBeMUa2p9>3-PM%NLCx(VX(MKj32;CuT+;N+ zVlYVgPhlsMAZR*xazm`L2Eax(qi1)C*HYpGU~WhSR!2tD!L1JLMB|F(zA=*eSp-ZS zB1kwp$(e<Y?YzNoIua3E#20mh>Z>=hQG!;x1$dF+j}&PDDIX&^*K%-hTz(6WiE?fn zeD3JcqX!P|eRi(lcv4?YFO}1YXnsh*w`cKygLFnSp$^`L905~<18V2F##ToMhXxla zkSGPEqGJQh4FMbF1jopA_|5ZzxiJuLY+IqMb&Uf9`B@#4mn?Iu1E$+32W)gOL6TmE z5RA+XH+Om1VnCyH2qfSPBJS4XlIM&Z*XiKkN@dmBI~X^1vwH5x)^x*h9%Ri8j+U8H z!B~+_r)9AearrX(AL6w^td)j*qAP^~hsq^oGDIT>zoo*+A?;Ox<ObAjK#lT&qq(;W zjSXgQWMX6HgB3aJgPHh%V0B=>SE_6Ka!z&RK5ihcuq_w_UUay)Aj!3FiFlmC(zimB z=e*_6!NHWuO-~$oZukB7-@p60Lr>gvMyM#999%+!ES?A$Y4!Qmlgt!YE1CP5sJal~ z0Caq5NRB2J2!pju;wCrliHafxu)(S<;IMCaKZVAIU~a^RZ<ah!1FHkbfwwvU9mn@A z-&6-gz*I$@v5oCsKW;x8ghmrhMeF(LW6*Nw;8=Ud)`Lgy=ioT77a9&27ids@=|IW< zCj!P}<^mtWz8VTdao3szhsx>zI&g0A-74adigue#gogIPs!ZS**_=vZu_2fn164Qf zUxBRsH?m(Yr8-d8W;ZWey^_0&Cmvf!0|x%hGLgW&{_x53xt3!N9D5J!=HNJbgs*K= zWX(Z1CF&{8R*2Ou3UDxjMLS96Gl&h6Iaew+hz5sLx?Yj4y=f&H9QVw_29Tp{;IM8= zrYg|pMmz%>17L0-t1Z*&U>8`}Z->2nyIidfY7IMc{ZH&}A$Bu&ITP6Xaror<T+4Cg zwEzxKDtqq$aImbo;_W+vyLLls9DR#Hs_>Y(pNP)@4q@d87z!L}tAnRBAkT5n*>hhP zJyAdg|EpZ!80npyMXQvqm6_N8bHhZPGn0vqm0cBRy|P?W9dta}kYh4d%#83S8{q&K zRroQ2pjFs$EC<J-G&l}!g(DT7HCGHe!zNg1$g%JdFiQ8h!@?XS!4V~UY#!l@cyK_f z<Kb*^a_(|;WMBhSiogy2SuSui@0*x4p;Cs2b!-ejKoF>qj%J5-bPNx(H3~iGjgiaJ z>R`s9VSfOvafq54Duy26gD>84@D26?IJh<X>|Dd~%~k5fQ)sJr!6RVQu5Z+no&iL_ zkl@(46JVjXIshH;H~u4FL$)^b+EP+**hj9LO`)+dRh5B_s_WOS$g9>}UzLH5swp%& zQnQzgEI)LRcJ=iy(&3iAu8NvQ`Y=NS%_q;V0j<KveXZhBMQb>K8&9%vfeP&u=^$8p z2IdPcR6)$#Lgzn&jTtAi?makgoY<*VHofv?w#z6wLty5H?rWr};mY8~mMtX&hjmkG z7KsfoHxMcXb2K~8>OiBTXZy%<6D+jBr@Y!l#-TGtaic!chniMuKFq;d4jmjfF>`eH znT7+h=Eie264+HsG~ip{DPW|=>6Q|=WH1(>I$5HEE2RR*4gnoI)mDd$4JcrRKn>n; zlq$wBvSt#$Ev0L9rb?Mn9KoWFW@j?>%IYq3U^O+_yX;aO&ajm#{6e1-|7N)@f}W3V zUaatzLvu$NIM{LQ?xS-K2V~6^j;BSd|3L(dc*5>}N+q^Cvlt#w3UKV;1?<=<>6M4G zV*`>Kpir`z8(Y{Xs}g~udEaI<HbiqHKCH-><E@UkaN)iJe>A&hdFd5W9rF-HpYQG` z*gIK$Hf+q?eDWMxj$1i6v;f$12lhh4!L#NnEhbH5R(2-~837|+9y6D-HiBA|rhplP zgS8y&6AF3`h1Kye%puNHDROaWlnfm95xh##b~@_VsJdQx1dBhKt;#^h0N(1DO>Ww- zob-x%Zvd%xBke-scSi7=oXm?A-g3;XP+9xzp@Rpt3<s>HSAsDpfl+mG+rDsGg}9<I z`I?=0m0p?xrj{yz4JZ&S+4ai9pi*Q*RBSd%367CoSOtsT=?E3am>YPjBQC5_z+Ri3 ztyoTL--rk9TgnAvAdtU}GoqX^T6prDw;bH$(4wP<4sAWNnw~24lQU%IW?5u`rhq}r zyp?2q2I3iuZxAb0c*6l|MU*TuIshBD=^{nZZIlKaBWsT5XKuvfGjMsnD7F9QnRr~V zI?x*<kFQxaR);bIM%vxg1ovj?K%89^m^|k#$E_S3OslX7KG1MH`I~wtY|sP>Xbl|Q zE<llvn6I5=dj^79lp|njk0af606ZkKV+ThEgupUXim^t4@_N0+K2>Sna0NCfniTTo z1LqIlxNb#JYu$~*=L=Q`dIQTcvO35hH{0Zbfpso|I@FCO5b4aqlIOhT;3kK5J@$zw zpy9aS6{n*`p|$#hrlJ{r3lRZ>Kuy?7vOWV_ClRGfO!$Q=aO?zf2*ve^Xm#l3#%<ZK zu?4UpfTPGA$H*qEN=a(w#_$<z3^XEDipdoE8FUPDt0S4j>XmDj$*d056fk=jHBFB+ z`4BPl!owVzR^j^|`M6P-82Dt!;ZWSgwX25)%AA4Q!sRZ~Zwm)V_I)p5JDnHn=s<#l zmxvDelw~JF2dET?mCKEWhz;)+Z?VBK(u-Fq!cNEd`7`Hq7n>R|TQGjUu2)u0nb0fS zmxa}#h=9SoDTJlyD1G9RJhtiOD=vfu(`)%~^R!SIudX$o8bmsS)x?y~5Lt*RVAKLz zH!;sZ{3i%->`a>-Qt21&0UNRzs@b91Um`cQ6crrJy%V!&l_KnPTqzyF7Srk&7G|O2 zH%89BzZ|R%$!wEP{?tWlV-PbhWzj&>pPQIgNrMA+shqd!8$KO`2S~D$gVYAwiK*`b zpebun`#8kR<s#L>Gms)+2yg&BBzEYRW?fsdnxUK+^O*rkrHJ6L@4E!d4bwXvt8Q#t zQNn7wv1(<8UV)8~D63;xY>ado>XER|=quui>W0#Dqs5Wfww;?C=^fLsOGV3?+o`?U zXdZjWY09&pAZ^N8#6Aeq%(IoO7HLQrIAjQp$1|uQcOG}@>^R}tB6k~Hph(UJFZKhb z<G`C6lPRo9natejcz(R`gM3vAUyX;+D{YOLdL?dR!~NtXOWx`rdjzvh7y~g*a>vYV zeKn=$MuUTm#M;NT%C)eZUTZj5gaham3}vAg@gz((5TyJOFwzjR?J<yAFf>rn2&%yG zxQvdS*%Zr{3>+9^V~h5Yu3fI8fWx}|c*=yik*QK<&dE=uSiku3?Kj?e=Z!c1`r^af zdIi=ffL>W?0v*Sf`fNenY?DWEG?AP!a~r6Hk{0ngqRa)@{tb6WFNKA%=dIGm1=5WP zr-x*@<S!&6P<~CBr+^WE*k+uZBeibvxC*9#A;H0GhmqF-E~ybXWJ5Hg<=C~$WiNtC zxqfpBtx~!&k6@X(k>3&Qv7g@g_$;W8-}&iS?xR`J>R4?;uWasJ(t3q>W4hTUkAYAX zv4%>|4G37&v+c{rHhsrU4o(hcjIMfhgl6C`k;S3i=4hZMhl}GA>czUAVymSJ9m$6V z%B~a|96R{ue78g0aY(%eD_x>^HEa|G9Q&?F;#>cT%;jtYd72wFKmBl)P@lj34<gku zpl^8MRtI|Tb@JjhmZe)p5ilB%TvK_Pxee}QmAdFQhlLH|{Nj>VxXGbyoL=?nV|3nv z{dvs-^*b_$1}?@aU_557iu?y+<1~x!p<hf?frC>6=#gQOvJyKF5ghYd4aN=K+1Lft zC<Zu2u9-|>FQ2l@^MXpr&)guNYS<9#-$v>8Qm%ais{_0CZ7HWZ=%6&+8%D;okeqLp z#8UEtAeXnhH5S|0_)2=0+o~tOX{OSU<PIW=u%PLw$+WByFwzdw%%w6I+apf_Q+FIY z;4ff@u2}e|*m1}?uQR5G?reB>L3s)Uhqdu|GKp0wQ!53PlBc=x6^InEZeKfbv)Q9r z{Km*+@_6HtwK_;Gm~9eI0#rTCynLYt(jIIf#N~_CKDPb4S6+SfyLUHGD&Ln$2=`@Z zy#wKNnva?m(O!x~T?D~&2`5b$a6kb%1ad(4p?4h8$t(PzS)u?9phgio4twwW=s=aQ z(~+r^Jd+zAzO7+HuC1xbcpKuvJv;r)!|Gs!d4H)|9S{MNNBo48+-QyZ%I71JK%$!1 zi6`o=CbYS^*>V-ldOi^ZpHUtfh>w7kYYG@lGdDkGiFj>$u;9>r4$14_pJ{Mt&=A1k z6&emOHlW`qyyIB28NI2Mn;SYd;%qrvUMhwD`1x4|wUx7JW<TO+_WZbDbtKViDL408 zmSXY$JxR7v90E?HFGr%~x`Gbb@$}_=Hy;*6jRt6K3s&3d83wQ}B@aTCYY`-6*Hb)1 z-H}LYQHp>ezybJxrsMHBmxC98!z-PlK#7JZl*hw9^9RSsCj9CWZf@{`dnsUUn658= zxcw}nTFYPC$*BicV62Wzh?&_KdCk&Hq03Xi;4YQo%`z4)>#YuwmL0?%;vq{#tRx); z1Epdj(F*&f><wj_0!A&llXJ8_`;;ZBUrbbiLq~_`lZt859Zaft=V2qW-Pk2kgF}N? zzBvx-^<C%*;%x0frb?;G^YZ+$H*}RE)xo)OVyizuSRL#SA#999Phvmby995|GP8|C zKoxA3?_@cO88gSv*rAp^eCvqf<rsu{$<*rXGXad6KxdP-A~)D)DQV%8bF{|b8IXQ` zHodyz(Aja~&8JU2{U&cZ#At`yap?L);092mFmTw{Ordv{FmprLJfG*~dFxLKY}|h6 zE&baKuS2YTi^ucZ7+Ep3Z^>C5q{Y@j)W(M#GxwJ{C)F9OCGgGNst%vj!e$rJuH0Zt zX?j6jji+;c8W<72BbTknEk|^eS_f?qGgtX7!ZQ%3fFZ!4eE>F2{BmlvuI|(y=|ft< z>Hu(vuEt!uAxRXd{J^nc0>34#LfGjTpUKbM=>GKc+l{$#bgj5u>H6H?qirTWZ(}5S z+uX!bJDSy|fXP90Bj1i%VD(2C3uf#9=lIAQ)wLEUZ=gtZ!b{|@>cDVuU^pF)NF?as zz}UFH({Hs?QX+2PlXLPY4mkogj*u$A3`UI;f1DhxWK}o%8Apde4i1i801gov{6i8c z3UDBj8)$66+5@Qg@HyRi9>FTGasS^Hr|0F&rp`fKxX*KA<m44g%j(D?OQ;pbK*&Ye zovgt!W*y{!1!?lB4s=Mn!@<BJ4h^JplEfNtX_Cb02+jecwKD)a_{)=K;~uXfW-dH~ zTo)6K!SUsZ6ChPi{PD@yP-VJ?#-9G;aS<Im0UTbz*bu=1%qRpL&AnYovpXFD8&&xp z!M>ru#_dPmI-O-jN+V_#dR08r>HyOQ6$o2eRtK1E;?Rd`VsLT+ce2V>a=?PP_&9LY zAVWt}H)tEl!$>5UB5^Wgbd(Dia);-@B<F|=o`GCMcTH8`IH8G@H-C8{jSWD@sbAjI z^oj@$uUO*QYvJIqZ<t8+<hOZ#pfOK#<1dxDadef24VfI*qt?C+h<XK$j?|Lc7|G1G zb|TwvsykWbEID97ykQo0SB*{%cJwE_-IPg^0C*UT7r}&cuETIS9qYTx2@LbeIZ~}Z z1Noe`2>}jXZ~k#|x~?*_>V{5&)$zCvjyZt>01>buQzPIBm;#4=WOEAb1x!u}=0=|L z%jtWcpQTbMr%xNKIp}ILzxHjwgkG85ymYJ%;+mh?u)_(h;!akXiv|+)BqQquE6<G5 z7$Jw#*|9M#NrDO1U({<JMvWah5YCobOZf|*oTK)z!)konz8VJ(2^(pv<C8z&j26HF z#E_r?-G;=DfGKc{T$jXRWByLZ;ry1f(PQtZuyIIKDWcCYgI@cVr`3_#v{X{)Fa=C? zV^-G)rHq;5*Q^nKEMYY!hjm-R0l)y$6C{a_9+)^-<|6BTnB*MfLlLf&0vycT7#*sV z3#<+Zgr&g&B|rld$}YLzVBoNuFgMUDW!_H5svGk%H@ZK3`z*CeIjz{NG_gOg4fm@} z=#{SPmx@cu=S+zcj9W?8J6W-&@^eF8vj%57&Kku^n3f!-C$ZKC>&tyO1Or+NnIa9Y zR1{n(V{kBYV{E$8sHU0KaU!GRkb~tqFJx@s!O^@AREl|XqpGnjKXc<#mASDSREi-u zrar*WLT7Ljtq!zaDU;Pv+CxHl3RuV?jDgTkGZt>s8QI7pU}Dxw5!ptVp40+!!^%_; zGj|3^;ah!4E%+bC;5hr2Q@To#YjkMnq^4IGI646wqOl=sltB6uz=88bub54tu`xAJ zgw6AoFMh~Rr9h=7rSFTkI?(7y&0e#i4Co-9rjj0j!W1y|+IF~;wJ-${u%iBfD4!cv zp5VOs<Q(xt>Ivdvq9HgwnI5WC*U;#T932cC9<StU>@sLJpimx%{ju%nRj|z5SXqS4 z^YqvoDwXowQ>@)kS4!+S@Ky(Gj6^S+O_hF)0%`TRouvz`f}R$lq)kM%GN}9o5iqF* zinfx1faxgdMi@C}K8O)VK*c7abft2DW2`b~)lGA&V+R9=WNgULNK?aO0vsc~le0Zo zY)odF8}WRXvwir}?Fw#4Dh2IvsMo%URtI|7Y^rNb>CgdD$(Rp<oFyoEK`Gr9^;4;@ zcb9IOIeyKWWY(f?!K)%4iE_C%)V|HO%}&vQH*hi3LdF;zrz-2}5a>Ad%eiNJJt8+G zbOiVZK*NIp2bdfA?R1RiYi`thsyu?-3o1ofJ^HB%TCc!{d(#^ulc~+641|$dx6c=| zZ6ubGlss~u`lImPE?JQaS)@ARCGr&GSS>B6*K#Im%M#}xHGL7>F%GE3ajJHuz~3<h zM_t{Jk{n=lOrQMO6$l7PFC%PZN|oE}Ic~FE*JEO*V_eugkIR?K=Egf`sp`3k(-;MT zvN&YDBFq+?L~poHZrV^PDM9<)VRngKv8tfhQ@}{m{7Y}t%2t1r&}G4|S;MEd@!JVX zek==r&<OlN(H9SuBFom41016#Pga6Gs;ueJPhR&10ssw}8bYrD<@c+>v0*!415sdZ zKn={~moM)=21l@pW7xlQqhmIy$egQ>W~(wcMowaLE3=cmB?*L4%C3=H*^vBj*ixF3 z?_1LPpofTWmJqjE&>{g}mS6+n8yX5>8nwa<kCGM%I3s3SBRZaAaHBU?odX<Wk3Mt5 z;h|}aUK#s#y~iH_jUq4u`V6uBxxlfe3ylq?QW!RLZse&_KKu(*iV__M*Q!m9<ZRCj zw%d`{R99u7V`35?B|Tn(S?JU<&Ljd2`>cbpQeF23vn@n*7cw;OO*!nYUT|(0ty!aX zHrWFA!dK7mC{;ns+=n$|U=&9v2kzh@DLjtP9=iL{&&H;Q5KYJQsh__O_&q{p#fBf# zaWp^qYX!FWX-Z~z<K`84l>I$HrKo(43yjgxGn<kJf#K!K`BlQ^CMb+Ayt3#<2epRW z%!l{d2D@wBC7tjI5ipPhf}cXXVcw1`d>O1+qqIL#(DqtNVTMP^inK?A>xrp+X)aHT zZi9=73XkK3s~>&lwUc8gy~3=HE&hOx4B!SFrAXXRgX8PVo&t0rmmlz^1HiF=zgel$ z{greCt2$YED?2)pv$I_@`R=0Kzpm|pcs?davSM;#^>9(a0TN-{LYV>4v7+7GPb`Qk zd<qz;_hp)pq|;|x6x=Xgv&LWe-a?OMOBih<tqBvqJv;*-S&j&p@>FGL^zglR-~Gtp zx;o6!Y~_Qm?`rVt$FH(JfgiNG&8h;&MIT+X3TA8JcS!>{)~(xbN-i9O`Q_L;x|MYu zr{}?Ib~ZT$i8J#>*0r?(IPlx4;W%k(^~$1ygZRU4?x#_wuYthO@xltT!GrQa7GlhN z{i5K8V$B*^k9%b*XLywCzml{B9TL}&LPQw>Q-fn@n$_q__c6UP3gl4M5VJbI4>V|Q zs3cN=8c;bqj*Bk3?4ye=z@wulz2FhRVFn#FKSEH{MD0Fu#|0Iqp^~$#DyFI)Xv<fm z>}S~E;DF5uT|M|A##0lkSrr)^#2eMR3>t`qC}wqh;Sn(T<w-hXzShOT4Op{g^ukXR z^1`>Lk7X^TC{i0i2qDzqMtKUD${c;+@X60!dg<y%?tVxc$br!-hkyRQp#k)XKn?Z* zpHRQ6I}TQtUA7jlSCVkH!oi^xQm=dk=7!1oc=v(5f3IEj>#uM9+BG#%)p#=uCd^Nz z065a;DHV8?lEy}{r3y#{tr^%z?4;UV+6b60JQtUMi8*j87<DZYZt%2;;-a}DXhKlQ zqrn(Cg2h%VV7*2{4J7}_iaG*j430-1di3tQAARVqm!5y=`O3P=p`js+)iK1ZjvBwD zQM3;z6gYS>y<!F(Jk6nj1IR%zhbdCKfv?-|zkfHYw;x*v(8yb*066&NdUGm;W24v| z2Wg#?2xKr8pmx}?QL>_gu?CuXb^#fZsAth|!$SHaoy2$qN3h?-(GL|ygY6j%M}5M; zt>VSZBYic*EXCO~$n8o+*rPE9$KChcaP>=v55F*0$s?qrV`F2})2I~sC$9%;{312< zUIQytpup-dksk$cAoYq>0S;{Q;m;o%-5eWGH&>a-jDku@qob;b;2=$0BEY^RC)Fkj zmo@^{pN@bLZ!rD(fq~+I#lsB-Q^hn8V(p6{!X}hxMXi2sdrSYgGwiduS;eB^l6b)O z`iQxd38+P#Vaf=Y-54Av#~3hJo573C-+1uRhdz5@dI)26yznj4D>^l@VWT0JISR$} z%0;V8=#{RC54r&xICQ|BwnFN??t;t>sQu?mbeUBt6YK-qap1QD`Z@_9#9d3^I!OtO zz_AUf4Z6spiJ3zQw|13Dt{SS`hCnS19v3ti3>UVTFC41xZ)x>5SgR9##W#^iEyT>t z{#)=25D_rr<5*Vu%&)@_GU4*l=rl^NoML*VVeaG=upxp2AyssA{Awc95O3>-o&#rf z*db`1f4xl$FgKw7WAAK3nk}O^{$V^_UPOgOZ;aRmD@^^M8{(!eKZK63%raW#5a|WY z5AGqQMWATe7Vb+>IHU*)CL4po-i+v#h=`)s`BW5zL?wNQ-aiyU=el?F-sQFX+PQW2 z+C!bG?d`EgYrmcIKmY5T;YZ$?P0;t#-HzEt-7^kWQ6jL7a-)<xZ2^myr+`KLZoWUw zJmUS=ZC_G&eSU5Afde+wg2d$xO^sgD)*l&)MLh;D{2P^{!5D9opi{@<>L`+{-|yzM z&Wi>dh=H<qG@NS5EhLj$`4p*MX({b>ih2d9p@L(81P(-p9jRmHnJb1hNeB688$I4| z9YfqeY}|CkGl>~`^I6~mKkC_4!4g4ME%7*sV}WfO)&<+0arH;X#=mbDm4o*OwWSm9 z5d$_Vc`*P52_zW)STO4G#AAXNJ>%`2frCjuT=0myPevW_)N@Mxq~;QYN(HBY)dWX4 zn*$DrE8%Q@Ety<}4hv1{cx@n1riNOl(7}P|0I7rS2YceaM;@_*j_LRRx~;+BKyd@B zlt=D+VrG+CrGO?XMg73Ry-*^!nOs7^m3D_MVEvHUc-e$uvO*6@lW{{-aC&&M$vNK? z<L&`twt0WVKi3zHM(2F~yH<Ke+Piw)`$$pb5r;hW+-+avU_Fx2O>Y6ygCiWyrGXXO zDMUvxolNeukX#)pkU9beI^<Ntzy_sMk%KOEBsQOHeaBwC!qgLP^mv}zuTpN3s+3l8 zF9pR72f%?Pf}5M-IksWB^A<2r9{EY%fFZ@kI@+2I8$vaNy1u59tN*0mScV{YVF(!J zaC2VWXcy^o<Y+ynk5RiPVeaw;IMM7;GvmnOiIuQHj&NZovryFzrZ#I+Aa&du7?3gz z_!QI_AY>eB{9waM`jRYl)NIYV6hj9&zMDRlxN*}<wy<&DB@Tgu1tNG76)_S!SgGcB z*aFtE!g$En&&wW?iDr^T&9h&3@tUVRg1`$9Fxo=_ugm0xb_<JxKP>0-eUV;fXHFz8 zg3tzzP0@g(OafrVU?!O^g;Qm8tmg_s@qk-0HVW!Iboe76bqtu)0A3(Hjsy<6)G?Dt zJaa9%UO{x=A{E>5%5kcc;cH=KJ-JGG;ymDn1K_|CVTJR`l_x9AJWk@Y1&mGhL647( z#yyiw$PJvLTq|*!;HH2<I=DLL><<gSRH&cq>;Na4VEy2S)6C;2H&x(kVG(4}+%}R# z3>z)vvK8nEZ?BIf)9R5HIP6l~4Ino}iBi5mP{E-}9dvX&aiffmny+a0cOM<4QgI!* z1v@Onjf4$x1F+!`I9O<?W1dSM!UIW^jW}!pi^O|bzpt0G@p!yhZ01Urq82>4AASm3 z-VooM(?2X5nWK+371d%dC;Lk+!I4`49TZuyo`;UgSOH0r%B>}#d^tczs-*<w3_Pst zZORq91vpR-#X?0yfCvs19p~COHQV|Q9UZt&<u(Ts4prQkJ&_=9j6rNT0}j?61dEf^ zaraJ7zta{lukWM~-GWoi$qiuvn_xA%$}}a&{_(g5jW*@I(okl-1#Dac4xw#e{Q(t9 zaq01NE+w*y!dND`v?j_IK!%~8t_f@$7CFK#x#A#z!wtMZWur3egTub7V-utfBnMII zn6_;Q`()Z~3l>9&8#WeAp}64yIPfIuB$M-K6BgX-@D#Aoj*0f@<n(+;u&YVA0T!^R z9-eFx>~gjat~$OT0qdbYV!FsiqLYl?wzV!*3~eJ1a6qY}n9qixN+|(0^4ay=LI%ng zIKh$~OC}d`YNw@;A3Xnj0S>{9gUfydjsy<#>>GXO*|0sSgTY!AdffI2JDRvL4B`fT z9WII+PJx4sOAC+CykXY6%y|n~o39r<B)!eb4P^?L66^s_C$n{MwE>=b?A*+APTN=) z;^f2k`awR6ndHJjy%G*Xm68{E2;3D;8Lp18oZv_?tE3y*{Q1C*N^qDFfC~W}8gyKI zf*J`J%0;bLFgV!|cH0|Y9<fRpzVV68O)54}+;9vWXfv0?9}IArA`Zq7^dmMphMLM| zuDDI2I(YIx&~K|#8fg?H*#LS)2(ts|Y6w`sH0{{%x&enQ_Dg^y;5%PDkUFw3t0S3A z?^MA?t_avba3D3LI2JgJSsi3_Y$gs#9kp`=_xB&&M!?3WpRglh<DH9UHtmTU4uC_q z@Q8KBaY%kcEMO}g{up>jn$N!>wH!v7E@`9xiZ~oVBTOl7uoaBmjN?$KXId=5fo+lW z<C#)8Y}mhcU>ulPl)xS5uPvcuDrusH;-KILf<sO=@InEH9v$?0<<%3i)Im4~|NiTU z4h=T`a@nm?5E~$FylO|>0B$%34$iBU2yCLVk-`JcTEO@~Bo_bor<rR5M4x$9!~RO; z2H4CSb`}RGbJU)y%-YNm^AyNv!6DF5D0Y|D!yu1B>m+R!CBh4~wph$p+BdLyTNKDJ z!BGhfBZ%P8$A=$2Oh0h{>h0IwM3*{nr`xw5SySVqZ$CLQHm-k$ybkxolg}VFoB{`) zM77?NgssMy+fj13rn;KWW^QNvH+Q35j$S%6DsU)rL@TM_;6^&>=lXS}3Zla>oQu{; zcLg@Gz>y`u2Hs(2A^E|<YTyW%83zOb9E7BUKC5H%)hF&7rb-<c{IlmjHS!LX8n1tO zv=;2J9dTnuh#RfI1qZ>wy&Evioa>erpsB;*J}GNrd1IfY08h<qfHr1pKT>0ZP1I`Q zuy*nwGd#+y2M0zfp9D;7ALyhl`7Pi`A*^5{Cp1wN908<;ag7R&detkqDQWraVT#lt z8`1xI{#&5OZTrah=+keX|L#j>&tEQ!8}xO!fDK4D8~}%EGgo_y=vpu>U`_wZb~xC) zW{WP6wVlyy-MAmA!NErKwh<iMND8cLDByr@%F^0mKAYM<v0}7f53Ps{8{!5ML(Mpl z8SqgChkgPWEk3j*bv*f!sglwM8oOTk?32G<fBpIAUw{3tPd<B}+w+&p*Z^@OLEe_~ z1Y*NEaIgWtXQf)!%r@duy~{h}{r`Dzj9SB!d%-S8w3(w>qM^Y#KV!=88)t-eGu87k zq5+58UtLVEL1_Y!-N~p`3g84aQ576O3$sk2f`gcJe0cE>^m^qPkUC^^I2zNBNaDt| zba7(_#0}tvv*2KzLpZcf-&;fr*nd346fkbBoUSn1exzUnS3dCl@nhbBuJ)Tx`h3@L zYog)cM*8Fq8aUt>o7l0knp+p*222rDuz}7EDF%y+m~jL!*RThUdP^OzZi3Vyq2mk( zL&nB^mu$XD#s*d?j)H@A#ef?YZ?1<P;2ZH~ngROn1i(`_H}&X8M;zjX%j*uckHh$} zyZk<1U!Tvfna2(d)|;8Vsm4TbfY;n`b*#ajmBj*_j#b2sZkZd9eGDQvRBX6yfTO;x z*_q|DC0B<dNrx(Koc$oEEcAh*hz-ZUf$x4JjM7`gDPaF~aDWBO5}u?=g-t|#&fClx z_quywT;aT!4kE^b_;5PNR48<p^?rOD+(@^8%@M$XkrL~f03CUG_=d6ZO;jl=H@eSX zKyWBQ0tZ>@pu5l$8mXg>F)a@ied+dBH|aYaTY(!+f&;5mu$f!-78T9i)ApYS$Ar}u zUDibz1kZ6llC!}_PeuS25I$o%$mmq(fEQB`=C*Q>uudG@NOukPQNe*@H}ZI(UUF{a z2W4&ymZMvM!>dBW9dNsC3@euN3-~bZ#cP;!T-H=lha_%1a?|xsP^*-LDQ-9m4mKIL zTzJIV<=!G%z?$1<;e4<u37&F3Ho|JVuso3g=ktx5=c1ARHW*jfIpB7&L*s<FSByqx zRok_r%;vv`3Jy#zz||q&5iT4SH}<K~y|_52g2OE?wZVZ<xD3L$0ha@aAUhBr1gS&W zDu2m+!%RYlQ&kFdfNyL)fh}0FxZyZBIM~cPnPsodqcSBD3;f5)0g0FeJb45cxND7e zo`}O|ad2sLd?+w&@<Q<mSDgyR@A3_Bds4BF4h{^}xuIqo-3B&Ha7fgkWE{u{6Bd<U zO@bghur+%wy<Ry1QintiN3a2j%{vc1X-nJy$Cu;a;JnQvEj&_MC~mI8q-l@5H!8RV zJXr`AJm{da;c1A?oVEEPVp6@O5Wpwq)PjlkiouQcB4Rm@gMf_`oMyAkHVkmARe-~7 zVuJvVip=65lv`5LVMprN6jH~ugbqill$V~_+@x=l!YajKaB$ZOzWdR8i){RV3mCw2 zidjutu4T0IH0CT08|fRprX$$SY_)cb!Hsr*8P=l%*K2WOy|PLfG@*giKyaAY5X^uN zua^K06%mMs8m-wM=&f1Uz#^lg-q;wv{)vRcRSJT`?lg0-nd_$Hsj4Xpc~<`O;25ty z1&lus4DlK^b5A2|=D0|6dcp&`w{B*kPZl(A#Jo+B%nBU$eBPo(hb(RkVhCuM+*s&F zaA2Zge7M{J=rHTMD!>O*)j(KC6$?HAKE$W&>LAxE3E05Gs4jH-RSJk3<SGTR0Y}=- z6Q4+gY9NtLy}?uMf`hvssF5|}i8iHvX|nBV4G$ht{IjI>5v<GSz;;;8Sv58)20?14 z0p=<h)g(&~^8w<}K*>yO362Xs|J<4!!tjMv3VfB44HFx15#T^-AU3>r?0voK<$7?) zVg@pVkc8NkI-Z<Wq>g%u8=H2-4Z#h#AUq5{;I;DI2o=0;+`@m_0S6n<y!&Y;jIxbj z?|&T}2v4<&n_${*Of24@l@FLa7+WTKxbDEr+yt-8LHdqRhgyT<f(t$mo9IxS8wN2D z8Y(sxj96USbz%S2KnKV$&+eqQOMCae@6v&TSfyO1J|J4NHlz+Qmb5<g%Ji@zZp=_y zutMB0!lVXVq`NT8$IYiv!GY7vJ@dTAT%U1Pbxc^34j^w_u>N?6SG%{9>5X;``_19* zZZ9souzvTDtYEy~hd&oRwBV4?A-7-=8xW=%DnY{p2SNkF%LA`{47;7e+u_o)6mir9 z175XOM$Mb{TC<ym)Im9LPap9m#EqFvJ5>rYKn^1TF>grEkZ#ez!KQ}d=9>$-w}?}~ z{`26N5KL9Ow0@G&&iTL@I}^-EEIT%=YfG?#ndIPZ!q7l<2fr2^5Q@}MaV%xfY`#`1 z8!|ZD5C%G2-rcYFw@GeizrMGIj{|*PXyrgB2Y#s}23+u|;sYPHvoZ37EOk6$DRtbt zJ53We&O1TIhB!PA+&F5`!GZ67(GgZ_oc9K=I=dzIzXfbcIOEiXh#I1@YvMx<Tls)` zML$Og-0x-@KU&{Oe3;!#9>sBRXs)w;L=O&#yCtbZOeq%WhDi<7Ls8YJjJ34|00$-< zE`IMGOhq^S>$$y<B{(j_5C}jZ;5Gb*J|OA9H44OKv$OBi_Jg_iz5v?Qu2MkU*xaNV zMQ_I{r6J$|(JVH~YHo5>&wb+*u%;dg>OhdDfUy;5(rS!$zDA!8#8W5GbO%F+mK=8l zSh=%0*To3O=HR;q02n=OaA<BW8r6fttXB{luq_4EP;HF@&=9eZ#*D)Y;zkKd6v>2I zdN!Z|$MM3J)R9QklsfpcrEQ2W_S`j{8wskokw9_7d2k>TqA~5eANCe|xrK|NS+^xM zEO<oOqRZW=m|7U^{0>Yrr_B!KaAr5w#k5nwI+=E8Ag<VVc>x%cWnlD0;nW<M+OHWU zfCK9l@me>;4HFtzqA1kBSQ6ksabrh18iy3x+4VXF4)B9rhGR*o%VwFi)UmtMBB&SM z-Yz}s(o`weKZEnjiQ)#G8+35cr<qfGi`YD9(zULQ3WO)^1Pj{CaY%3jgH1-q*+HG8 zHFQkQ`KOqdO<|>?0E2r2Aps0r!te7(PPSch^Hi_fC|L;Lz^o%|I5&VB+GGO)sR6MD z;3$h5*;J~k^>p<PXTX8zK&gYIHXK?u%PPc;ud{eW2hfq)*)<<wQk8P!B`2tB4`gw} zd2nz(kMDj&lat!R3;sU^40g^j#V*&*tc`XJ_P(G6jG3FZ;^Rysc?m0+(TAzjFj!f` z0ANJK7!Np>Z)6x<y>4j-zco1Sz5oNIj;x7|ZcI0-C>v`gHUJ!%U6<E&?_QxAHgJmi z*C7YMfq}CHsVTs6RjI?f2a>KdUBHk!)E4Z6PbLx#6*uVMK$|&XombTCE&e|R>`*Y( z0_OGO!5+17fj0BTh1w%wQ({<?Zndm$oJaiLvWCHhhB1yMN#C5$2Xj1n{JtKSw*nX# z*5G*b?z`{4Kzw5Sd_i6y1F5lC5ehU6Y#=!9WxYZZ4Qmd(e6bfGg2Q=qyd<wtFvN}A z_TfPS+u1$$;TG&oSKPiy-#m}lXb3nkYu4DzNxenh9}NA+)lruMPu3N$Zp8;Dg)=sD z0{bic<E&HocDTk0=4<n{@v`VCCjS61FvFM{FiMhkzpq+}ss{%K<{k(RS=dmqv2?(V z^wLstcXtP}4Q+&5O0Rhx00)NHz(PmIGuKO2QntGzQP1oNJ?oW51K#&UB0(275F3pG z2Xo&=d-r2ETfafEiT|g7u?+!FSvVSHbfcZ~fos;N=j&K+WX>0flt+ajFi^w541<OI zeLX6AwBWevDia=1tCTdB4HFwCHQ<tw7DQ^Yj-5Na4uRuLK!=@Wvk6n`cw~6@W2qA) zp`*0>_wYdrwiQGRy0`(@a26cu;Y`{NAhu$?1Aw)A{<nZBQ@|oV<)}TD2>;e;V%9G0 za%67pnMUUB_rs_#5IsS|;0O%)8G)01>ft79aJ+XFa0AF;Mrl!}haxx3WP^qcj8qFs z9SDvy4_^0Y8ej1SUZe;2?>N)Eg16v;ciE{|HcwpiPMI7J?TJ>3Rcvp6ynB;ChuG;z zUIh!{256!U1qTb^E)Pn5Tv@4{-c!JY@u0q;_E1<TTJ>Ph&B6Fc!?>YZ_4>IiZ|P)l z?vh1MHJG<wog1dfIIcPffQI-|DyJIV7TADXqmmoxbb7TAZXw5Z_St}xahwUUPXmO9 zafkRP@<fJ;cmSVb{&Bqap)GU>spFA{p8W!_p^NR7y&G;4YYzY$)XnpVjRt~)b@`%{ zLssf&(bIVf7<XOMQ)j~(E{@>xDryxFqM6~8&75ullN)M7n&UJIFer1w^ce>R<{l+& zvVq9J8YP|1Y~={qhBQX~i(M~*<4g>E_17cpEt`Gj`rXoYittx{_R=Rd6SlUcKr{** zsGJ8Cb&EDM@HCzR#$6kpjty4-@9Pg%!jqqj_3|o5T4IiQ<>(eLiElVz_Nc)pe17>y zB7p<ZQPPwsa;_n;Ay(Y05#EpLy202TZUlz|@!^^0QWJv{-~6_{O)9ZY{r1PZ#BU1X z#w>E9ao}L1u^9c`&+l_{oyX&JnF7YWk&a;8fdon3qRV?@C%MjO*Z9CSYwYk{`oji< zAx1uVg`@@?S6+1}N(;4w4HFw6Zd6Bxa!ZQs)LyR_!Qntq>y=x651(ow#;H@kJw-r= z*y#w^a3Wd(92y@XZ3htc7Il>h3!N^DAX&iQF%*oW&|9xihi|Y+&m^ld&$Y2ObG64B zZDUH_8H-b>PoDmx1ILwD9tOvP)J9Qj6vRe)OwmLIB(k}Dacp%BVr#X#lrLmkRCa`g z)Zqqk)R`cRC7n5O-5=Rgc8aW1>%U(Pbx192w9ew|yw&(xzK)-G#rSB&$IK^{?-hZ! z<cBpG2b-Yp@=$w=ss+q{T1){G(<tWWJrOj))-!l0zQH7G3p;F>>F@{sO>S5mK4D!# zA?L?&q)KgB9XQNDaOjndeQcQGhO~R7w3^N&D<iWtRw}GlK}Tu#*9$MCqQHK=qMg+- zGxP2r@14SQgBsyeU;J@9z(Ff+EVmkgd=OWWAaWRY96SY~fe)3bf`7Q;h9x-od{l2U zr>mdnVi-6Lz`;6W9c_Fl*zT#T$e~UF;{jjf@WUG&5B%$gh(UQ7;N;P7^fXSI{zCx= zkVC*@XH6%FLX@#lYDuYM23G|%(pzh*<yctT+7kC<R!dn09jVlBf4t=+I?mN#<D1_! z*s#=RP6?^Q0v$6#+*rofdp$yd4S>T!43FB`0mMVnX_V7-3K(k-LaNc}*>J^%y!HR? z8=eq5(2oqeoLnL~Y%`}@z|=(Kq^JKlP~+}?oZ$gM0td3A430I^>LqnimIO7bh#TRQ zv2!-FwK~>av4Lf<du(h$zyrM=@;mtYZ$F;t2s(7F*%{D8e?O(GQnC>12oD7vzd!YE zm3n2y5I1IP!C-b7o<j~2IJmdp1OJ_E4!F|Sxu<~zjNKdu4HuTHO-?@$S6Uu*wScky zpi~F40T|f#?{h;~z$RGTmqOtT56oam;J`4zaVXWm0;Sx51#ttc56UUFRiMMF0gYll zmn(?Kf!t9P@L1hSCb#n8l#=`xeg||oCv`mh!x6-d>}neDw^PbNg_Q~`w96V&hgzky zE)%fv(@(9-M@7d=S6817XLAP-e*iOFjkV~3fB$7sOTCN-N114w_5wWWpCI8BFtp1> z<PvG9qo)~uKUP!A`LWm6a+u+P9V2_-P%9K{q!{VOYAzgB%;dQ=U_)dYMInc#Qt*lk z!`GJeLarz>k1;^U&U#AK4c`0R(Ru}39X7>{aCT{5ommBS27Z#mNymGCTz6td5jSe` zV0rnxU!MEm&7XiDM=D(maH#WWqgas=gZI|N0*^HN6fn?tgHz1Qd*czV?!cu7!9S~b zyTxenCP~O5&{nq?WqiDa`D_H+vKnyQbLExBhY5})CEG}2fbNOnhQf_Za<yB`8O&v+ zcj+)hwvZR-0R3Z3A;-F*8#srK4?*g9S;7X28ybCMy&Kv}@bhOfWpzf7LzOx(>A-=a z%Y-VW^{2OAfOzhg^Ol$ElyRWV+)l6&>@DhC4Dsfk0>*mEL$BC1&^6U8JUQMJumImT zT1_#@X5K85j#yi?i_x|**{=kBb0hHc>%d`z0S~ws;8>D88<p5dg1Aw|pq(nDGh^pN z6bn)^Vh$n{<4e1@k~=Nx!|SKAzy0`D1Eh|b1c)2!r*udEA%w;&qIiDy!om{#$byur zI`jKePbOxJZ#o0w2B}K9^Q;%{KkKZsUU=c{Um*LaN5;WA{e2VMt`<LsCqGYD3mB-u z9c2#%e;^*>qFx~<NcN|Iajze{)42XW*ffWS*$AjrnioDh#;<sK;4We4(1Jq{0|TxC zI25NB7AZ*-H`L^Q)!@cpemxbonBybJF}RgMqp8y8Y=G1uu<?bim$IFL+-PTKY^(^} z$U)>mo>@pIldA<a>43lTH!!FtkpOXnQl<R#%LjlBBkq6Uthaxfy=eB>83$`8{NJG; zV}2S=0W&=mkZbt4W{&VNr-1daa%qC2w(!tOu)S%1HSpi5jafb>{1~=*!HjSPLR0N4 zL0^DdgX1v-2I2$0?8rth6B{6ISa6|~SryzUW>Xcf!qhfI%7}1kyI}NK(py>l4$AAW z4pIkfPq3<29!|_$rxiCK+sN&#rjsJlka8^mK7bu%bfm=(uKtz(xNe42r7T|r;>HUv z7}P*?fYh<PJZm@OP~TPP`Ka7m)Q1;N&o*mt^ZYm)H(uOqq+_D~;1CutY<k|z%xUIB zolV0Hlx?j?aP-Z)IE@zv`w+Tro}6EafE~A^BOZ^1YJ$VeI81OLH4qzE?N?V5$F__; z3WczFR}LF1StHiN>v^G^jzP*{<;&Da9Yk!rWmY_j3H>c0ZiF@IMqvl2k;w>VKo}y= zVlh`J!W6}YWF}Xo0uxflt+NDdwEproU_%N+>bPk6I2i{U#eL+qf>jO;JPoIS2@l1F zi|?B)x|roQ%VSRgi+OqFAyh1pnui;T1x)F;MX}#jYr45R)IL7Z_JBVofZ>S;WB!e{ ziAeOM%ViCYr|)?bE@l8YAk~nRjdaGS^ikYUBV1TrG!hOon@H_s@K0}TZHbp6v^UQe zu{DNIsxEb$d1P{22H5!I#ZLeomsNS}%pZRX12#1IMn0X)EG;Z{7xP9G2jRTV($Ydc zD}c9{NgGg9(ed%0HNY_oRm$5!+>isM4nzkz<B%Q4zD`!BH!0QX(KLlTgoTHKyMsez z6(Z)qm{hg_`iY<tR4QhPG|*JP7S^LX=FH^*8|rX#cW>9|L|eZ|FgySZ;Kc(gJtOU% zZZYMgXYMYjR5ajt^ikl(qZRlVOIK2(9O<1eM7CiGj&1`S>jzKS-pODjF*4Arg;-pb z!J$eWv{2Ci*l0Va4bY*8CGZ%C8)5BevQj3qwm3Lg6v~DO6gZZaib#&t^{_>W_0{Zo zT5P=efr<@N>R6sVvc_>2t`xRCH;VAAc(ZgIMaUkCdDGE}*O@~Wuz%V+zmQ0)FpOU; zboyu`B6f@RLI;Kzb~kWb%+=NALP8{52E33^M7oJ75K(cBa7olGyH^&s=psSai;#xR zn2Rn<gki&|HOL4lyeO#XFGW{9@0nM>Idi`AdZu!muxI|{>Q-NF-_Q4b&U4<=rSvu+ zw1eCtwN}|49{zI@M&1_>*w{BP&b83-DHGH2SbJ|xP0gjJ;;j=6edp^MYxi3gf@Hfs z$4LUm7^6eKK~qMpfhXR+cn=4zxWSQ55fiqHD~?%Xb3Wqd=>j;M6$k$W-+1hAbtzx| z@=@XeQsSduaI&P?!TcsCH^8~Y*Jr3`T3o)H)P2hMQj<QCDmi=o?mXpCMqbBfT<*-H zp5}&KbZli{b^J|_BfwHD2Go|lg4eHn&N3USu3IE3L!l-v6n@?wNd%1JA;BP7gnF9! zg&S4I4RX2%<t$&r0Fqox12~?#zyL5v-SMHqaR~LNRLN+tAnbAka1c3IWAsd$)dqBJ z_3Te{R+BR^wL%p~GQAvnql+sC+CQ{fznCtrv+=+FWaHt#V{ZKN(F0nHj?n6On9Pm2 z&*tRaYjab?jnv|D3JH6VBeg_ZYnE5=x!GAbq|o)GlXkEC`sd3ob0a%xmm9LxAy*u7 z6D!MHTa?xMR24?R%nSu}D78W1^PVSVmp=t8Xv7(<yc0JORNuFRB4F~0?Lh46#b*lV zv&C>e+kifxt*5L1a(!*Uys+JoFjeRV2NQ!|cuXBo18)qD(VxzK{))TkSWKRQX1Bv= z*xdZwJhV)Y15qEa?8FA$sDA?-4|A7NEV4Rys35Q*bSYT*AuV1X*B;H8>m!)Ay0VCk zDij4<#MtKXnU&=gYF0+(o&OLRyMNkU$|Iq<A)({`EUb>_{VEQ-iESS&iyW%onBnl> zngXVtrkJ@|5**c-RGtD>I53TO;#S=^L>G`3)nQ4l-hutY5Xiu&uiYPR9!Tpk{8b4Y zrT`B3njtlS4Gj)HTh>)_P#-cibN9eMZ7LCe!hHwp<KzAYI5ajMC{Y6FprQj^inJ{S z?Z{oy{L%>J)0XCEM^F?k&GUs8l3?3Q`oAto;Bcd3{<r5#%Z(p1mbu}wI{f+-fFo)< zQj7YV8!F`pShd6>S$2j(CBkzY;@w9P0YfK*P6hUfs;i!ud1(afupp0W?HzuaW}BaK z6c~}ILdCx*4;(C}25oKa05~95zk;95XLP=6<(2oG`_u(=P+F4`Vh(VK<_544C9*ou zr;L5ZmmK}C-M&V;yO<<2tjv#(pFv4P*H{=tI!9_+PSID>^MbcJznFU5GB<z(FHMrw zfquoO;;{EKHODWjf2FiF{gd{ID!WmFh6^Pbil=m7l<)B)ngT}q$msb0>f<Qi<UGtx z8cEb@^Fkha-5lnIy}<!Z6=4I^fEXOmD9{mU5-jPPYvx*-PG7YnnN1J{!J_YBm>are zaezbiL?3VoRtLcGyS`+Hun0SYJt=A3j3j3lmzS0cUCKNyJ~Qy%TN>9`abp8M>euOK zi@TKPf6h{u;wk*rtjE$Uz~MSl*!%yp<_YEPg`BD)=?sNINL3f6H&ow+&ZC$DHvL=| zZX)c&?d_^cZb%1Rgx{J5Ra=gaWbASg!Ew_DM_6oVy{^H*=$M;}YF0Ekum$#Y%-sMe z!mnT&@ZuDuIi{v&X~EVK-FIL{+2D9gd!mv){pE+7zvGgdT<AbCfi>8X*=1cZ!3PE7 z3ZI{uS$gF?zP$7ZS-*?UO>uOzKfoa;H)Kst!s_6qS^tWIe=rWjJVO_pg7gt)P&8JN z6^KJa%nXHIN;$ZjgNsKnCY8)roU?dY^;A>LT#kU*QqwiE3nKsD<Oatr;>OKlcuZZ> z*eKGQyCFEp>WCu8{ysL^(6Y3QQXg@1JW#}MuTtfrLu66;OENcD3=V&DL&OHHuYCB< z?~Y66t6tK?NK;sY)?U+#bFV<}&0k0G1V?D=)918vdS>3;WI-V~2pa?fmOnbSHsusL zDh}t7!oE9JhOoBinPTXzq6k<}8<C;l6AX?t0(L$=q=qkCsy?GQ#HSq9gKu2UcSiL! zoAs*zj+;ac4G+f0sxCF~48c)Uaj?}92>?3eKCLmaI<>uW_wLGedWv@9&rCtHBS@Co zWj>i31~?w`D>p)OL)6&s7VT_Xcl>&Cp17Bu#cZ?mHtf>vk&ziHo|;}klx>#$8)lyC z@(CQz>uTen^(_ZBCbcAVtQV{f#MtSb|3Xjw0l?v$FWaNMif<hL<-7b+MQ$KxD6B>z z2!D0sC?a4DHCJK{4QP?7<~vc=DZt@&9)BOH-EzzXaIp5tv3rfFVS__P2b>B-HBuP& z6&5U5omovM@maWzO*S{!+$b9yVV5H7O55+kB|}Zx-Wa()zDNzn_y}>1Or3GmA6QMA zzc>B*^(5{4jr^O7nymEW&p!`tP;z533JPdlwzMX1<3lGpXlb@s1QGra6^C;}mfwCR ztS$PMCK%8=SS_uJYK+?%3Isd*RB_+(%n?MudSh`Mz))Yk+@P^cHv+Nc6n75W!)vX* zI1)G(=*jHR6-O~NuD$uD1rCRAfFb8g#ExVdS<zL}$W(zEE40Qb+;;*vWNgS<dx61W z8M_uaW>=OMH9GVxl96NzT3K3|xdv{eQcL$nHd%c63=W#Pk-a|(8whKx=MI!{8>f?S zNnd7kSOPd4QuRJ_z$gXT5_k`?iB(AiOkJkzm3@6MVTv;yM=>Tf-W<CSKUc-vfZ|BO z3FfJP4~Mn=c58U8XT_o4c8y{K4+e*Yj=9K|pV)CG#nRBg9@9u{(0wO@LpC@3D-QXR z(X9X&v)4xo8&xRkifdk?UyNf1OOnQ#MMLsTsFn2NNN&K~h=f5dpU-V(x3;pIna$12 zdOnYK#)S@@>TrNVoJ=i@wiaeo3elqK=<HQpcf`RdK_fC>Mk_yk1QD?MMC)+1#mv3` zoH$dPP`*CWV2zz7^a2NDf&<K;rv(nF_y-~8=4ncCLD*Zb2Zp<n8|8!JF~){}#UWoZ z`?|>yq|KAt;02@sLZ2DIq6_8EBl@zE%b$AULC_!y8=LvP9Ebwl4|0GTne1jRp94Bv zS<;M!4sKQC9~ZPMNp{TJJC*<3j_QamaLhbnmC>ZhQA`0tWGYbA%?*4bga{aK=MiMb z%uRWN1KMS3aJ6BALq-QHOp9tonv!g8lnai>Hhy7G)Vt!4FPR}mv)Iw5K$tf=&L06A zG<*48(VO85U){?_<-I1ia(lVZ_R#d$%w@JflMFs~paWLN%W}mL83k*VT|9M#h6egi zm#T)0HL_Qix>V$fhk0bdL=|S_D<PccIiZAer4Xt0^pV=5_TtFkc*g=q$P5V_>>HG= z!p>8uTyQ)lm>Y7%AzyM6NI*kIlRyRw8+(($#-gLiN?8}aWpV>l03~i`^Lv{xMvFui zXfB_<KexBejg2k*eL#nQ#ld!=JlYz5=TJF=Y~ocg1&q#Lx6C~r8d$n|P|agfk50k4 zr{dDun1d?5L$76UnCRGj6W}0SlfV(CIy`A%CpXFmhuo#e6^DGug<<TWJyWnbsLP75 zQ_-c^7oIgJu$9%K!UFHC43yPS$w=hjF+Z5qVO1RBET?-g+WNfI?^>fc<SAg?#~uO0 zf+(h$`>Zlz3Rtye<SV4$hC8aKhW!?sRDZ19(U>~H@y0th-+4!~LqDKh%?yu<LkNUP z)drgzA~-(Ypy&RJW$k7wyW)^DYy^pU?BRuI<Y5!!d-<tSaAY%?_4W1KUOod;BUC20 zw|Sc!&|H3ND^DLoo>m9I;hyExQb${-;{!qz3}gPwspeJZaZdrm9GV(OhC*FIXHt6D z>!}kdaS9l1=kf88y15^;B!NS#sOH!Wp}~KB>l(lz$iH7{Vsk?RM|hZ$p)Y?~OE>|s zCR7~dyECkaFI(mY&l<77fwTsc$>&fzgaQom`uE-5+{@g~?B#$EY401Iz+!^Kp5^p( zLt+rKSq89oI@UTEr<wNh;pYB3@GBkx^F0wB^?B)ev1+=iGV&FY905~xUgvSEtHP!Q z5gaV8Jpc|<07shu4u7iy_Z{2;2RGza1?Gku8>e4->GbK>)*|qMio<=$qWmvE1u-~G zk(aSKIca<%2P;H_BfpN9rieV|2NCvCa0Efi#r`hLa>8tuW{g@G05B2_eR}KkWgevv z6=!Pp2LW3m$9X4$8#K+_ca;$lu>ZhG*+(GQJ=4m0Zk0#i55o~-LP$&mhXIdW6B>BP z6$cmphoYm2Q|T-b92*}OUM$QZ1~wde?IjlBV`rxrA8TB3h?nf&WZ9RWVkM)%VUmIJ z9QizPLn9=U<uB70M5_bnFu)Ns4#s18loMvZ4R>DcZ#);ya>9|2&DN@#aUhw$hK@4= zrs`YWC&H_QRh}aPRy`T{$|~-f)`pOr82Dql^a=;fO5nIvf{xu%Y`lev<Lu~JA9VPe z8~zo?V>G^e!i9~U(*Q;%bU=^J9iigzzGNwQVspa@j?Ky9KnEI^gFb{D(mZ@qKx7MF zl&p@Dies?%QlhV`-<aiOOa-%}VBwg5f2rYPjDV?@_=SleaIP|1_X-^Zc_LdCT8WOn z@q^2pij(7_HLb!ZC<z=y4tg^y4u%Gv431Hm9XugSGB<2&$lze7;|Iyy(AenFVtVxK zh#rT0$+9=&q6Ty(s#QVGD-*gH=uQY1EI1fBfMgvfuB_+RkyMwgj$&{GE%8e=)4_8A zfDwIHC7L6W!>SHr{>zL|kkejyam>7CI4EzGF<$K_Wgn4LpChWLI(dm&><4RF<=miL zanOrZ3=Y=21P-mUhgcoredpkY1dfjda|7C8Y;@8?v!iEc?EosT?Qq2*U$Tr2PQ#M9 z;i3kVj;uHkH78GlDYBQNeQtQNP;g|j*tmkI#~wmr4sKA~H1l8x4jr(#K?eiX%26=; z0P`}3N(7e&j`|=-Ic6@@LbTvxw=dOwQua{^7HA^6;+U3>)#CEBW>Cbf0FGO?fDJtP zF963|8XEl6db90pN5?2j{0SbJ>9*VfUvOYI+oy>`%Z*Nc02{BZ8BjU>K-*8{)=ANq ze@4Ovl!~f2?gtz8vl?hjXoWU+pnN`$H)xMud+U>q{j#*MYk&j8Wm*y!x`mWz&@*7S ztwWAZMVbQEdg@rD`nw&)j!<0SAjqo7$X8Hu1dN+E*+;4&A4!l14(OeId_b=Q93eA8 za1c3I{=NZwqI}=U!d^2291n};#u}NTObq76>9u00Ku^Cm_7h$9KX7N73g$-2qDB%= z2^<jZZrfYut*~1~fer-0z>8c4t_Q<pJv$ja7i<&1+XRQ|#2BvzaVnMSDvg4vi?MRc z2M}uDSXMYy*Cm_?FAmzYR~cyvSQVd?eUu8OqdZVPQdjnoY7Rg0K?Vn~p+)f6HK_r; z`{vjvz(MH1Q_Jf|xPO<DVi7n@b3-ykJ9T?fcv6>QVgsM*JH7Bz;kx~+4!Ow!-IyDO z($U}mIj9SPwSiw4d5+B-jMLkjxh$r0tmiWLEm7D2Yyg>3aP(tcRrU4uUR8oWVNQ+& zZJHgwU0kO-jtCh3)4H8dG=~QM9|04lfMGjNosv(*^BC47wkpgFe!dP=IKTmo5<EIY zc#Psc^u|W2Sji%Ad?}e5Oa@n%(#cQ>!J#Ev9j-aVsgzZ0lqj8Ma72>>RtCkuv?EGF ztd#nc&B;wHx<FZ2qfyjhY?$ES89TIVRI~x=%qSQiNaimlROP`D^z@2bZlKo4Ih(<a z6B_};N_5mHj`$({V6VsAIM0fMoQ`jzz;U*%<3OWD5{rM_cg`+_ZpRQ9^dN=c_~D~9 zfg3$+ZZI|ME~Qg{t*>F>Y<S65;UP^XvM>Jt8l}|+DaqilcdM=E_jFg1-J(y>NRAvn zLlZeNdzt%PISw*62pcvy*sh>I_zMkzcsfS-Wj>H>UsXH>EJ)M{C&Ejsj3`8^XiRFQ z#1XKd+@XT%eD@`fbeIGVL#5z&mtItHw6(Q$81N9xQZD{o=0*zAZ%O^co0bWV?+3+A zD6e%M)Ejy&#mIv(HZ(Xi@eJtsS{-a|2&D#~!5SZDa76SQn?MJI8UxDfk7@lin`3UU zEOUdoVS_^rW7CN~mCzM+fXpbEdb(M34jr3d1}hx_3j!%tAg?m2^EJaK5*%a}*9LaH zLt150PlrB|ByVs)-x%0<7Xmms+MtdSiFL>4xbGZmn8XYI!A<Yc;CTD(7bJA-5HHx> zc+D&~=nG5~4UV>A+;s>&3op%bxlz<)6=5S~Q-cI>NDyFPKtv5xA1FjPjvgTs8#Xwu z7AT<V#dDBxv}`kZ=DZTq82AI@)VX@SX)Z?nO{K)kgRYplyvoQ^z)obV0!F~ih}zB* zNaG5;R_EQ|`1Tgifmc+;@h-4|R|pPz8FdFe86Bh6ZMc#;@DojFXmH@oQrZ9q&><Eb zgbsSGITvXA8t$C6h&Nh5o@jN1$ql^ZVgteq_wi4@yX}r}q3-|+GPImR69hF#tOFu# zb0Y)?h0b3laB#pPp$hSx8{sxEM-;4HSwjOQV6@<X;^D$3nD*vaytATrBBoH)NT+C< zLj!HKp4bQ&R-)~YoICIrG}O?kcpehL@dj}tM8`L}J=uSR6$i`cSj?3c^KR@YFoVS| z2EVyvf&=7uQ9{RQUQ01dQRaqz_6;wLMqRht-u?U)LI<B@3o+?rY@{_f-hbbX4${G* zte!whlLLk1My3=TKnH_^0~UNvku<y?g?}>&e_f+=DghV)ZL{rb(7=Fb6HKC$HqBL* z8!fFh++4}W+V-gb&PmxvFP;J>ZRar+u#e;;0UU2YKnFh<99(a(KG5JWWx^v|w-_w~ zM=Dg3{ZA1aX{tEx3&FufhlCEx6y;ijS6Uue=omAu+9;MtQSQvawiLnHFtEYkc%N$s zfgV}1Ix@73;<7~86SXRimqT+@g#imVg5CXxMZs!SV&I~(fe{3?Ep^zJuYrMWb9&bt zfYEa9RDmaz<;LYW$IL~kD;OH+Ldr><0%p%L*V}nqr{ZzU+($AvZiP<`4)!(<!12~t z$^GYK2NZ%MX?u$JSm1`)s`#M8G(|Nq`0XXKK3)Jgq|1)9Xg*&oTJy24I30lv1_z@< z(iW|*Op4|PWP{^nZdI&+1yT=^%Y~z5v1j^Re8>RCsoHw9BpMhP;{jsmZMFoApt8U) zBWk^lWdLE7@&74cq`(?RqUv06xZvFMg=z26?J_vH=wNgZI1Fq69J=B#*kKzUnjP#t zGB`q1NJ@t{qg8Rp=rFq!-nL@INC_PDFfZGxJj@;o?gmThP#75|IH+F{#XXB`ZrI>} z2psl|9UcQN9wL1Hd~?rpY<dzf5&#DEB!vp&d}l0vzVa1@eUPQFJm|H`7@Rw~5iqPo zmxjWwD%YuaWSM))100MEfTI)}9~8hbW}?G34oIArpslnWsl#|dZ>CZfI83WU2$BLA zT3m9l^|3(Mpewho-71$ti}U~-Qj4O=k+#4A0SuBPY(TDxgTY}3EL1-dfPpkmGBy-@ zrjaU)L7EiCz|ez#bOl0e;d{37lBb!=D+qR0@>0vmbVuz7SZjCWf|zRLn7OA!aF{Z{ z@d1Ma_n*G?_{X<wc(B@10yG@rierPpQBKjZh5>@`JbJ=B7=uHr&0<G~RW3oHIm5-0 zP;3|)VQ~2LD{_}2RvfHA&)6}KItzp-*gy;|$-se!(P(-YU`u?UrxN9c6f3~y8n1Rf zhE+y)_WFcQ0c$Lo0;VpuUr~;jd0Al>e{h5q2Z(_u#NdG1SmrIr9ZQ>8{sSBWF&yX^ zw<?ZutqzS3lp6*(LU@P;6FVLq+lLt&5#%6n$mo#E4aSBH4#(VKEJsMon5yy0(3J+s z^i+*}`0O!BHMC1Hb2H_YQ0^~Q(Mj2rRmu4&sx$JKCRN8Vb8nSZaeS~}YA`w&9IQ4j zJ#3jjzin_3E%1_*)Zo})a0uw|)y?q2!|S)0XA-Ytd)$Q$CPpbbR;NaG0S*HlWp^n8 zIG!&B$5r!8HdT8A!6{)`HZ(n@BP5UMrV9`&phMDS$*YW<z3x7-5ioNKSTK#VEu#9t zUhW5dRW>*n8Aipy;)-J|(ku<N4~{ew!;(~SY!EnXl@AWSaFco@Cp`>snAc9YV0M_; zfJ|`6R)?KR&#-*KagoM(nG@jr?maOq)>3hD@U?p{4<f=MrQm~;I|U38FyjpS!64E{ zDz}vr!SSsHjt__&MeKO%PFv)U?J=qLZ%Yv~%F>kfI5w<SMJ_tzieq7H49^m^*=sG~ zmA3&LqO)OYm)OA-hky>j+z_E*frF=j*=LZ%yuyIO+%Q5<WyRC$hPc@Ai#kd5NbiZA z0yd$FEu)A;i|XN1@ye52aeQll!_vEV=<ZvPYJU3`Y!j*B<#GITble<USRiy*@QAwd zQgEaX#l|XOL%$4g_*)$`bHm9D#zq7<)Rpei{TiyTz55^S4h{Nv`cFj_oEsGUnKJE9 z)pcU0fEnqQ;0m_$2&dxt%MFe{zAe>T7B{~7;EkI!$M`0mc#-blc?VCo7Vb=~maW-u zzT7D2`xjh-{pqWn2X5U7&y2yPv&4(Xh0kiOI<;$QbvOH6l(w?6u*u#-uWCJ61ddMo z22x$!-B&&CKyhvu{s9$L(9+sYTYP=hifwn|N!cei0@e}~%|oz;KJuw}<?AmhETy1Q SSi4jJ0000<MNUMnLSTZYgX~HG diff --git a/assets/readme/biconomy-sdk.png b/assets/readme/biconomy-sdk.png deleted file mode 100644 index 6c1fe2bcfc4bb266d090f8370bc02a1df9d891d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163491 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¨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%0AHAHG6ltxe$JYdV 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 diff --git a/biome.json b/biome.json new file mode 100644 index 000000000..20f2a72ce --- /dev/null +++ b/biome.json @@ -0,0 +1,46 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.5.3/schema.json", + "files": { + "ignore": [ + "node_modules", + "**/node_modules", + "cache", + "coverage", + "tsconfig.json", + "tsconfig.*.json", + "_cjs", + "_esm", + "_types", + "bun.lockb", + "docs" + ] + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "suspicious": { + "noExplicitAny": "warn" + }, + "style": { + "noUnusedTemplateLiteral": "warn" + } + } + }, + "formatter": { + "enabled": true, + "formatWithErrors": true, + "lineWidth": 80, + "indentWidth": 2, + "indentStyle": "space" + }, + "javascript": { + "formatter": { + "semicolons": "asNeeded", + "trailingComma": "none" + } + } +} diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..b5ff986bce2335154fdd941cc3017a64ea05c78c GIT binary patch literal 262560 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�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 K)ck+??|%XI3z#ba literal 0 HcmV?d00001 diff --git a/jest.config.e2e.ts b/jest.config.e2e.ts deleted file mode 100644 index 2fff1ca6d..000000000 --- a/jest.config.e2e.ts +++ /dev/null @@ -1,6 +0,0 @@ -import config from "./jest.config"; -const e2eConfig = { ...config }; -e2eConfig.testMatch = ["**/*.e2e.spec.ts"]; -e2eConfig.setupFilesAfterEnv = ["<rootDir>/tests/setup-e2e-tests.ts"]; - -export default e2eConfig; diff --git a/jest.config.ts b/jest.config.ts deleted file mode 100644 index 844398aba..000000000 --- a/jest.config.ts +++ /dev/null @@ -1,198 +0,0 @@ -/** - * For a detailed explanation regarding each configuration property, visit: - * https://jestjs.io/docs/configuration - */ - -import type { Config } from "jest"; - -const config: Config = { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "/private/var/folders/_y/33lkcttj3w3fd6v6xvg7f33m0000gn/T/jest_dx", - - // Automatically clear mock calls, instances, contexts and results before every test - clearMocks: true, - - // Indicates whether the coverage information should be collected while executing the test - collectCoverage: false, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - collectCoverageFrom: ["packages/**/*.{js,ts}", "!packages/**/node_modules/**", "!packages/**/dist/**"], - - // The directory where Jest should output its coverage files - coverageDirectory: "coverage", - - // An array of regexp pattern strings used to skip coverage collection - // coveragePathIgnorePatterns: [ - // "/node_modules/" - // ], - - // Indicates which provider should be used to instrument code for coverage - coverageProvider: "v8", - - // A list of reporter names that Jest uses when writing coverage reports - // coverageReporters: [ - // "json", - // "text", - // "lcov", - // "clover" - // ], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: undefined, - - // A path to a custom dependency extractor - // dependencyExtractor: undefined, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // The default configuration for fake timers - // fakeTimers: { - // "enableGlobally": false - // }, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: undefined, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: undefined, - - // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. - // maxWorkers: "50%", - - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // "node_modules" - // ], - - workerThreads: true, - // This is experimental feature. Keep in mind that the worker threads use structured clone instead of JSON.stringify() to serialize messages. - // This means that built-in JavaScript objects as BigInt, Map or Set will get serialized properly. - // However extra properties set on Error, Map or Set will not be passed on through the serialization step. - // For more details see the article on structured clone. - - // An array of file extensions your modules use - moduleFileExtensions: ["js", "mjs", "cjs", "jsx", "ts", "tsx", "json", "node"], - - // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - moduleNameMapper: { - '^(?!bn\.js$|hash\.js$)(.+)\\.js$': '$1' - }, - - extensionsToTreatAsEsm: ['.ts'], - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - preset: "ts-jest", - - // Run tests from one or more projects - // projects: undefined, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // Automatically reset mock state before every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: undefined, - - // Automatically restore mock state and implementation before every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within - // rootDir: undefined, - - // A list of paths to directories that Jest should use to search for files in - roots: ["<rootDir>/packages/"], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", - - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - setupFilesAfterEnv: ["<rootDir>/tests/setup-unit-tests.ts"], - - // The number of seconds after which a test is considered as slow and reported as such in the results. - // slowTestThreshold: 5, - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing - testEnvironment: "node", - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: {}, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - testMatch: ["**/*.spec.ts", "!**/*.e2e.spec.ts"], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // "/node_modules/" - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: undefined, - - // This option allows use of a custom test runner - // testRunner: "jest-circus/runner", - - // A map from regular expressions to paths to transformers - transform: { - "^.+\\.tsx?$": ["ts-jest", { useESM: true }], - }, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - // transformIgnorePatterns: [ - // "/node_modules/", - // "\\.pnp\\.[^\\/]+$" - // ], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - verbose: true, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, - - globals: { - testDataPerChain: [], - } -}; - -export default config; \ No newline at end of file diff --git a/lerna.json b/lerna.json deleted file mode 100644 index be069a470..000000000 --- a/lerna.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "packages": ["packages/*"], - "npmClient": "yarn", - "version": "independent", - "command": { - "publish": { - "conventionalCommits": true - } - }, - "ignoreChanges": ["**/CHANGELOG.md", "**/node_modules/**", "**/*.md", "**/perf/**"] -} diff --git a/link.sh b/link.sh deleted file mode 100755 index beaca34a1..000000000 --- a/link.sh +++ /dev/null @@ -1,5 +0,0 @@ -!/bin/sh -npm run unbuild -npm run build -npm link - diff --git a/linkAll.sh b/linkAll.sh deleted file mode 100755 index 3597ec1c0..000000000 --- a/linkAll.sh +++ /dev/null @@ -1,3 +0,0 @@ -!/bin/sh -for dir in ./packages/*; do (cd "$dir" && yarn link); done -cd ./packages/account && yarn link '@biconomy/bundler' '@biconomy/modules' '@biconomy/paymaster' '@biconomy/common' \ No newline at end of file diff --git a/package.json b/package.json index 72746e0a2..f8649f58c 100644 --- a/package.json +++ b/package.json @@ -1,86 +1,113 @@ { - "name": "biconomy-sdk", - "version": "1.0.0", + "type": "module", + "main": "./dist/_cjs/index.js", + "module": "./dist/_esm/index.js", + "types": "./dist/_types/index.d.ts", + "typings": "./dist/_types/index.d.ts", + "homepage": "https://biconomy.io", + "sideEffects": false, + "name": "@biconomy/account", + "author": "Biconomy", + "version": "4.1.2", "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ - "biconomy", - "sdk", - "blockchain", - "integration", + "erc-7579", + "modular smart account", "account abstraction", - "smart accounts", - "erc-4337", - "crosschain", - "cross-chain", - "metatransactions" + "biconomy", + "sdk" ], "license": "MIT", - "homepage": "https://biconomy.io/docs", - "bugs": { - "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" - }, - "repository": { - "type": "git", - "url": "https://github.com/bcnmy/biconomy-client-sdk" + "repository": "github:bcnmy/biconomy-client-sdk", + "exports": { + ".": { + "types": "./dist/_types/index.d.ts", + "import": "./dist/_esm/index.js", + "default": "./dist/_cjs/index.js" + }, + "./account": { + "types": "./_types/account/index.d.ts", + "import": "./_esm/account/index.js", + "default": "./_cjs/account/index.js" + }, + "./bundler": { + "types": "./_types/bundler/index.d.ts", + "import": "./_esm/bundler/index.js", + "default": "./_cjs/bundler/index.js" + }, + "./paymaster": { + "types": "./_types/paymaster/index.d.ts", + "import": "./_esm/paymaster/index.js", + "default": "./_cjs/paymaster/index.js" + }, + "./modules": { + "types": "./_types/modules/index.d.ts", + "import": "./_esm/modules/index.js", + "default": "./_cjs/modules/index.js" + } }, - "author": "Biconomy (https://biconomy.io)", - "private": true, + "files": ["dist/*", "README.md"], "scripts": { - "dev": "yarn rebuild && yarn install && lerna run build && yarn link:all", - "rebuild": "./rebuild.sh", - "link:all": "./linkAll.sh", - "build": "yarn rebuild && yarn install && lerna run build", - "clean": "lerna clean && lerna run unbuild", - "format": "lerna run format --npm-client=yarn", - "prettier": "npx prettier --write .", - "lint": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}'", - "lint:fix": "eslint -c .eslintrc.js 'packages/*/src/**/*.{ts,tsx}' --fix", - "test:run": "yarn jest --runInBand", - "test": "concurrently -k --success first 'yarn start:ganache' 'yarn test:run' && exit 0", - "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", - "test:ci": "FORCE_COLOR=1 lerna run test:ci --stream --npm-client=yarn", - "test:coverage": "concurrently -k --success first 'yarn start:ganache' 'yarn jest --runInBand --coverage'", - "test:e2e": "yarn test:run --config=jest.config.e2e.ts", - "diff": "lerna diff", - "release": "lerna version patch --no-git-tag-version --no-push --conventional-commits --yes" + "format": "biome format . --write", + "lint": "biome check .", + "lint:fix": "bun run lint --apply", + "dev": "concurrently \"bun run esm:watch\" \"bun run cjs:watch\" \"bun run esm:watch:aliases\" \"bun run cjs:watch:aliases\"", + "build": "bun run clean && bun run build:cjs && bun run build:esm && bun run build:types", + "clean": "rimraf ./dist/_esm ./dist/_cjs ./dist/_types ./dist/tsconfig", + "test": "vitest dev -c ./tests/vitest.config.ts", + "test:readOnly": "bun run test read", + "test:watch": "bun run test --watch", + "test:watch:readOnly": "bun run test:readOnly --watch", + "test:coverage": "CI=true vitest -c ./tests/vitest.config.ts --coverage", + "test:ci": "CI=true vitest -c ./tests/vitest.config.ts", + "size": "size-limit", + "docs": "typedoc --tsconfig ./tsconfig/tsconfig.esm.json", + "docs:deploy": "bun run docs && gh-pages -d docs", + "changeset": "changeset", + "changeset:release": "bun run build && changeset publish", + "changeset:version": "changeset version && bun install --lockfile-only", + "esm:watch": "tsc --project ./tsconfig/tsconfig.esm.json --watch", + "cjs:watch": "tsc --project ./tsconfig/tsconfig.cjs.json --watch", + "esm:watch:aliases": "tsc-alias -p ./tsconfig/tsconfig.esm.json --watch", + "cjs:watch:aliases": "tsc-alias -p ./tsconfig/tsconfig.cjs.json --watch", + "build:cjs": "tsc --project ./tsconfig/tsconfig.cjs.json && tsc-alias -p ./tsconfig/tsconfig.cjs.json && echo > ./dist/_cjs/package.json '{\"type\":\"commonjs\"}'", + "build:esm": "tsc --project ./tsconfig/tsconfig.esm.json && tsc-alias -p ./tsconfig/tsconfig.esm.json && echo > ./dist/_esm/package.json '{\"type\": \"module\",\"sideEffects\":false}'", + "build:types": "tsc --project ./tsconfig/tsconfig.types.json && tsc-alias -p ./tsconfig/tsconfig.types.json" }, - "changelog": { - "labels": { - "feature": "New Feature", - "bug": "Bug Fix" - } + "devDependencies": { + "@biomejs/biome": "1.6.0", + "@changesets/cli": "^2.27.1", + "@commitlint/cli": "^19.0.3", + "@commitlint/config-conventional": "^19.0.3", + "@ethersproject/abi": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/wallet": "^5.7.0", + "@size-limit/esbuild-why": "^11", + "@size-limit/preset-small-lib": "^11", + "@types/bun": "latest", + "@vitest/coverage-v8": "^1.3.1", + "concurrently": "^8.2.2", + "gh-pages": "^6.1.1", + "rimraf": "^5.0.5", + "simple-git-hooks": "^2.9.0", + "size-limit": "^11", + "tsc-alias": "^1.8.8", + "tslib": "^2.6.2", + "typedoc": "^0.25.9", + "vitest": "^1.3.1" }, - "workspaces": { - "packages": [ - "packages/*" - ] + "peerDependencies": { + "typescript": "^5", + "viem": "^2" }, - "dependencies": { - "node-gyp": "^9.4.0", - "typescript": "^5.3.3" + "commitlint": { + "extends": ["@commitlint/config-conventional"] }, - "devDependencies": { - "@types/debug": "^4.1.9", - "@types/jest": "^29.5.4", - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.6.0", - "concurrently": "^8.2.2", - "eslint": "^8.48.0", - "eslint-config-airbnb-base": "15.0.0", - "eslint-config-airbnb-typescript": "17.1.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-prettier": "^5.0.0", - "eslint-plugin-security": "^1.7.1", - "ganache": "^7.9.2", - "hardhat": "^2.17.3", - "jest": "^29.7.0", - "lerna": "^7.2.0", - "lerna-changelog": "^2.2.0", - "nx": "^16.8.1", - "prettier": "^3.0.3", - "rimraf": "^5.0.1", - "ts-jest": "^29.1.1", - "ts-node": "^10.9.1" + "simple-git-hooks": { + "pre-commit": "bun run format && bun run lint:fix", + "commit-msg": "npx --no -- commitlint --edit ${1}" + }, + "dependencies": { + "merkletreejs": "^0.3.11" } } diff --git a/packages/account/.esbuild.js b/packages/account/.esbuild.js deleted file mode 100644 index ca355e346..000000000 --- a/packages/account/.esbuild.js +++ /dev/null @@ -1,58 +0,0 @@ -const esbuildPluginTsc = require("esbuild-plugin-tsc"); -const esbuild = require("esbuild"); -const { dependencies, peerDependencies = {} } = require("./package.json"); -const { Generator } = require("npm-dts"); - -const COMMON_SETTINGS = { - entryPoints: ["src/index.ts"], - minify: true, - bundle: true, - plugins: [esbuildPluginTsc({ force: true })], -}; - -const ESM_SETTINGS = { - ...COMMON_SETTINGS, - sourcemap: true, - outfile: "dist/esm/index.js", - platform: "browser", - target: "esnext", - format: "esm", - mainFields: ["browser", "module", "main"], -}; -const buildForESM = async () => await esbuild.build(ESM_SETTINGS); - -const CJS_SETTINGS = { - ...COMMON_SETTINGS, - format: "cjs", - sourcemap: false, - outfile: "dist/cjs/index.js", - platform: "node", -}; - -const watchForCJS = async () => { - let ctx = await esbuild.context(CJS_SETTINGS); - await ctx.watch(); - await ctx.serve({ servedir: "dist/src" }); - console.log("watching..."); -}; - -const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); - -(async () => { - const buildType = process.argv.slice(2)[0]; - const shouldWatch = process.argv.slice(3)[0] === "--watch"; - if (!buildType) { - console.log("No build type provided"); - process.exit(1); - } - console.log(`Building for ${buildType}`); - if (buildType === "ESM") { - await buildForESM(); - } else if (buildType === "CJS") { - console.log("watching? " + shouldWatch); - await (shouldWatch ? watchForCJS : buildForCJS)(); - } else if (buildType === "TYP") { - await buildForTYP(); - } -})(); diff --git a/packages/account/CHANGELOG.md b/packages/account/CHANGELOG.md deleted file mode 100644 index 59678fcca..000000000 --- a/packages/account/CHANGELOG.md +++ /dev/null @@ -1,166 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 4.1.1 (2023-07-03) - -- Added missing extensions ([fdbec6](https://github.com/bcnmy/biconomy-client-sdk/pull/451/commits/fdbec68625f4d7f436dc39d4c1779cdbb7c53e6d)) -- Fixed issue reporting format ([815e9440](https://github.com/bcnmy/biconomy-client-sdk/pull/450/commits/815e9440db03ebae98bb24edfcb3bbcabf9b2a61)) - - -## 4.1.0 (2023-04-03) - -Features: - -- Added Speed optimisation, removing redundant gasEstimate call to bundler ([2371b2](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/2371b230cd5806ec4c7c95ba604d6f924b4be768)) -- Added smartAccount.getBalances() method ([4b8bae](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/4b8bae412577b846e700b168976cefa6b0803ff6)) -- Added smartAccount.getSupportedTokens() method ([6d2fb27](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/6d2fb27d6f9b424e440e45990ea06820a9d16d4b)) -- Added smartAccount.deploy() method ([be9dc4](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/be9dc4d74a3e5a22e69416983436997cf2ea417c)) -- Increased checking of the chainId from the bundler, paymaster and the provider ([5d2f3](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/5d2f34d8f0fb4f9ff7c7ddc00336471e57efdcfd)) -- Added entity name to Logger calls ([9278ec](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/9278ecc21e060ef75ab29a0d054d95d69cd4ae27)) -- Export a 'getChain' by id helper, which returns a viem chain ([ab2ba](https://github.com/bcnmy/biconomy-client-sdk/pull/449/commits/ab2ba2c518ce867c52bf90b9018dfc1b4ec3b4d4)) -- Add "stateOverride" optional param ([20fd54](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/20fd54c817d2dcbc6b7d9a247d890d91b19a9c2f)) - -Fixes: - -- Fix for encodeAbiParameters inside batched session module ([b27061](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/b27061e2eec7bafb0620e88e6d94e56e9a13cb76)) -- added flag to skip calldata approval patch ([75698](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/75698c827015533e32acb1f535bdf6b738876217)) -- Fixed the particle auth build - -Chores: - -- Added tests for ecdsa module ([1a8f29](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/1a8f296c26c9fedd57023f8f6423d7662a3adfee)) -- Increased test coverage ([329003](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/329003cebb6b4034496e41651985804cdec0d311)) -- Improved issue reporting guidelines ([8b9fb5d](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/8b9fb5de9556870611307c12e57df333619d9252)) -- Added e2e tests for optimism, ran from GH actions ([5051ba](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/5051ba5ff14220ad616f1ec3bc93a3f42d6f8887)) -- Added ABI SVM test ([49c96](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/49c968220e2db0aeee5cc6419f45df2b98f9792c)) -- Added tests for batched session router testing ([2eb9765](https://github.com/bcnmy/biconomy-client-sdk/pull/447/commits/2eb9765d066fcb7b35d08223257aeb9b38c7a78b)) - -## 4.0.3 (2023-28-02) - -VERSION Bump Only. - -## 4.0.2 (2023-26-02) - -### Bug Fixes - -Particle Auth Fix - -## 4.0.1 (2023-02-22) - -### Bug Fixes - -- Fix for RPC endpoints (Quiknode, Blast Sepolia etc) failing to respond because of custom headers being set - -## 4.0.0 (2023-02-06) - -### Features - -- Export bundler / paymaster instances + helpers from master package ([1d1f9d](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/1d1f9dafddf11bde0e1a75383bc935b22448bedd)) -- Export modules aliases from master package ([d6205c](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/d6205c4d76ab846ecdc10843c65e0277f3ceab00)) -- Added sendTransaction abstraction for buildUserOp + sendUserOp ([335c6e](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/335c6e7bfc5ca1ad240e7cbfd678d905c7f16812)) -- Reduced bundle size ([765a3e3](https://github.com/bcnmy/biconomy-client-sdk/commit/765a3e337fb9ad8f1f8dc92b5edcb1ed0940f94d)) -- Added bundler abstraction during SmartAccount init ([591bbb4](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/591bbb4e37774b16cbe801d583d31b3a14608bc1)) -- Added e2e tests that speak with prod bundler / paymasters ([4b4a53a](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/4b4a53aabdf9e22485599872332b3d63e8ddd87a)) -- Added support for simultaneous ethers + viem signers ([8e4b2c8](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/8e4b2c86b871130befbf3b733cf503d24f7226a5)) -- E2E tests for multichain modules ([ecc86e2](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/ecc86e2c7146046a981c3b6fd4bb29e4828b278b)) -- E2E tests for session validation modules ([4ad7ea7](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/4ad7ea7f8eb6a28854dcce83834b2b7ff9ad3287)) -- Added [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) ([638dae](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/638daee0ed6924f67c5151a2d0e5a02d32e4bf23)) -- Make txs more typesafe and default with valueOrData ([b1e5b5e](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b1e5b5e02ab3a7fb99faa1d45b55e3cbe8d6bc93)) -- Added createSmartAccountClient alias ([232472](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/232472c788bed0619cf6295ade076b6ec3a9e0f8)) -- Improve dx of using paymster to build userOps ([bb54888](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/bb548884e76a94a20329e49b18994503de9e3888)) -- Add ethers v6 signer support ([9727fd](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/9727fd51e47d62904399d17d48f5c9d6b9e591e5)) -- Improved dx of using gas payments with erc20 ([741806](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/741806da68457eba262e1a49be77fcc24360ba36)) - -### Chores - -- Removed SmartAccount Base class in favour of Alchemy's ([be82732](https://github.com/bcnmy/biconomy-client-sdk/commit/be827327fafa858b1551ade0c8389293034cacbb)) -- Migrate to viem v2 ([8ce04a](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/8ce04a56f6dcdfd1f44d9534f43e3c6eb8b3885d)) -- Remove common + core-types dependencies ([673514](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/6735141fbd21a855aadf69011bc06c69e20f811b)) -- Reincluded simulation flags ([25d2be](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/25d2bee339afd9d8c143fe6dad1898e28034be17)) - -### Bug Fixes - -- Make silently failing paymaster calls throw an error instead ([693bf0](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/693bf08591427c03e317d64d0491e23b1c96ea30)) -- Added string as a supported Transaction value type ([b905dc](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b905dcf3f7849396573fc8b51f808cc68061ee11)) -- Removed skipBundlerGasEstimation option ([b905dc](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b905dcf3f7849396573fc8b51f808cc68061ee11)) -- Ingest rpcUrl from SupportedSigners (ethers + viem) ([f56b4d](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/f56b4da08f47af577c01a641b81a3ef9e354cf97)) - -## 3.1.3 (2023-12-28) - -VERSION Bump Only. - -## 3.1.2 (2023-12-28) - -### Features - -- Make entryPointAddress optional in config([cf35c4a](https://github.com/bcnmy/biconomy-client-sdk/pull/336/commits/cf35c4a8266d27648035d8c9d63f1b9157553128)) - -### Bug Fixes - -- use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) -- change receipt status type from boolean to string to be compatible with bundler response. ([317f986](https://github.com/bcnmy/biconomy-client-sdk/pull/342/commits/317f986b7e8f08d3ccf1e68f12a0696f1116de6b)) - -## 3.1.1 (2023-11-09) - -### Bug Fixes - -- optimistic implementation for getNonce() and cache for isAccountDeployed ([5b1d4bf](https://github.com/bcnmy/biconomy-client-sdk/commit/5b1d4bfd7b5062d05bbb97286b833d879cd972b0)) - -### Reverts - -- update paymaster check in estimateUserOpGas ([2eb0237](https://github.com/bcnmy/biconomy-client-sdk/commit/2eb0237b37425da3558801bbe9d0ce5d6fd696c9)) - -## 3.1.0 (2023-09-20) - -Modular Account Abstraction is here. Contains BiconomySmartAccountV2 - an API for modular smart account. - -### Bug Fixes - -- add 10sec timeout limit for a test ([5d12fe7](https://github.com/bcnmy/biconomy-client-sdk/commit/5d12fe7d4b32e5c4628b971d22f6fc9cfcc6b414)) -- avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) -- BiconomySmartAccountV2 API Specs ([69a580e](https://github.com/bcnmy/biconomy-client-sdk/commit/69a580ea9e309141b500274aa95e20e24365b522)) -- build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) -- comments [#296](https://github.com/bcnmy/biconomy-client-sdk/issues/296) ([55b7376](https://github.com/bcnmy/biconomy-client-sdk/commit/55b7376336886226967b5bec5f11ba3ab750c5b6)) -- estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) -- gitInitCode cache issue ([4df3502](https://github.com/bcnmy/biconomy-client-sdk/commit/4df3502204e3c6c0c6faa90ba2c8aa0d6e826e48)) -- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -- unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) - -### Features - -- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) - -## 3.0.0 (2023-08-28) - -VERSION Bump Only. - -Modular SDK - consists stable version of below updates done in Alphas. - -## 3.1.1-alpha.0 (2023-08-02) - -### Bug Fixes - -VERSION Bump Only. - -# 3.1.0-alpha.0 (2023-07-24) - -### Bug Fixes - -- avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) - -## 3.0.0-alpha.0 (2023-07-12) - -### Bug Fixes - -- estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) -- unshift error for batch ([4d090e8](https://github.com/bcnmy/biconomy-client-sdk/commit/4d090e8fbc7e7bcc03805d8dd28c738d5c95dae7)) - -### Features - -- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) diff --git a/packages/account/Readme.md b/packages/account/Readme.md deleted file mode 100644 index dedd3e2e6..000000000 --- a/packages/account/Readme.md +++ /dev/null @@ -1,138 +0,0 @@ -# Biconomy SDK - -![Biconomy SDK](https://img.shields.io/badge/Biconomy-SDK-blue.svg) -![TypeScript](https://img.shields.io/badge/-TypeScript-blue) -![Test Coverage](https://img.shields.io/badge/Coverage-79.82%25-green.svg) - -## 👋 Introduction - -The Biconomy SDK is your all-in-one toolkit for building decentralized applications (dApps) with **ERC4337 Account Abstraction** and **Smart Accounts**. It is designed for seamless user experiences and offers non-custodial solutions for user onboarding, sending transactions (userOps), gas sponsorship and much more. - -## ⚙️ installation - -```bash -npm i @biconomy/account -``` - -## 🛠️ Quickstart - -```typescript -import { createSmartAccountClient } from "@biconomy/account"; - -const smartAccount = await createSmartAccountClient({ - signer: viemWalletOrEthersSigner, - bundlerUrl: "", // From dashboard.biconomy.io - paymasterUrl: "", // From dashboard.biconomy.io -}); - -const { wait } = await smartAccount.sendTransaction({ to: "0x...", value: 1 }); - -const { - receipt: { transactionHash }, - userOpHash, -} = await wait(); -``` - -## 🌟 Features - -- **ERC4337 Account Abstraction**: Simplify user operations and gas payments. -- **Smart Accounts**: Enhance user experience with modular smart accounts. -- **Paymaster Service**: Enable third-party gas sponsorship. -- **Bundler Infrastructure**: Ensure efficient and reliable transaction bundling. - -For a step-by-step guide on integrating **ERC4337 Account Abstraction** and **Smart Accounts** into your dApp using the Biconomy SDK, refer to the [official documentation](https://docs.biconomy.io/docs/overview). You can also start with Quick start [here](https://docs.biconomy.io/quickstart). - -## 📚 Resources - -- [Biconomy Documentation](https://docs.biconomy.io/) -- [Biconomy Dashboard](https://dashboard.biconomy.io) -- [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) - -## 💼 Example Usages - -### [Initialise the smartAccount](https://bcnmy.github.io/biconomy-client-sdk/functions/createSmartAccountClient.html) - -| Key | Description | -| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| [signer](https://bcnmy.github.io/biconomy-client-sdk/packages/account/docs/interfaces/SmartAccountSigner.html) | This signer will be used for signing userOps for any transactions you build. Will accept ethers.JsonRpcSigner as well as a viemWallet | -| [paymasterUrl](https://dashboard.biconomy.io) | You can pass in a paymasterUrl necessary for sponsoring transactions (retrieved from the biconomy dashboard) | -| [bundlerUrl](https://dashboard.biconomy.io) | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | - -```typescript -import { createSmartAccountClient } from "@biconomy/account"; -import { createWalletClient, http, createPublicClient } from "viem"; -import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; -import { mainnet as chain } from "viem/chains"; - -const account = privateKeyToAccount(generatePrivateKey()); -const signer = createWalletClient({ account, chain, transport: http() }); - -const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - paymasterUrl, -}); -``` - -### [Send some ETH, have gas sponsored](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#sendTransaction) - -| Key | Description | -| --------------------------------------------------------------------------------- | -------------------------------------------------------------- | -| [oneOrManyTx](https://bcnmy.github.io/biconomy-client-sdk/types/Transaction.html) | Submit multiple or one transactions | -| [userOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/types/UserOpReceipt) | Returned information about your tx, receipts, userOpHashes etc | - -```typescript -const oneOrManyTx = { to: "0x...", value: 1 }; - -const { wait } = await smartAccount.sendTransaction(oneOrManyTx, { - mode: PaymasterMode.SPONSORED, -}); - -const { - receipt: { transactionHash }, - userOpHash, -} = await wait(); -``` - -### [Mint two NFTs, pay gas with token](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#getTokenFees) - -| Key | Description | -| -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | -| [buildUseropDto](https://bcnmy.github.io/biconomy-client-sdk/types/BuildUserOpOptions.html) | Options for building a userOp | -| [paymasterServiceData](https://bcnmy.github.io/biconomy-client-sdk/types/PaymasterUserOperationDto.html) | PaymasterOptions set in the buildUseropDto | - -```typescript -import { encodeFunctionData, parseAbi } from "viem"; - -const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address to) public"]), - functionName: "safeMint", - args: ["0x..."], -}); - -const tx = { - to: nftAddress, - data: encodedCall, -}; -const oneOrManyTx = [tx, tx]; // Mint twice -const paymasterServiceData = { - mode: PaymasterMode.ERC20, - preferredToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC -}; -const buildUseropDto = { paymasterServiceData }; - -const { wait } = await smartAccount.sendTransaction(oneOrManyTx, buildUseropDto); - -const { - receipt: { transactionHash }, - userOpHash, -} = await wait(); -``` - -## 🤝 Contributing - -Community contributions are welcome! For guidelines on contributing, please read our [contribution guidelines](./CONTRIBUTING.md). - -## 📜 License - -This project is licensed under the MIT License. See the [LICENSE.md](./LICENSE.md) file for details. diff --git a/packages/account/package.json b/packages/account/package.json deleted file mode 100644 index 408ff4cef..000000000 --- a/packages/account/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "@biconomy/account", - "version": "4.1.1", - "description": "This package provides apis for ERC-4337 based smart account implementations", - "main": "./dist/cjs/index.js", - "module": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "typings": "./dist/types/index.d.ts", - "exports": { - ".": { - "import": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./package.json" - }, - "keywords": [ - "Ethereum", - "Smart Account", - "ERC-4337", - "Account Abstraction", - "Smart Contract Wallets", - "Biconomy", - "SDK" - ], - "scripts": { - "docs": "typedoc", - "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "yarn build:tsc --watch", - "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", - "build": "yarn unbuild && yarn build:tsc", - "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", - "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", - "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache' 'yarn test'", - "test:cov": "jest --coverage", - "test": "jest tests/**/*.spec.ts --runInBand", - "test:run": "yarn test:concurrently", - "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json", - "docs:deploy": "yarn docs && gh-pages -d docs" - }, - "author": "Biconomy", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "publishConfig": { - "access": "public" - }, - "devDependencies": { - "@ethersproject/providers": "^5.7.2", - "@ethersproject/wallet": "^5.7.0", - "@types/node": "^20.11.10", - "esbuild": "^0.19.11", - "esbuild-plugin-tsc": "^0.4.0", - "gh-pages": "^6.1.1", - "lru-cache": "^10.0.1", - "nock": "^13.2.9", - "npm-dts": "^1.3.12", - "typedoc": "^0.25.7" - }, - "dependencies": { - "@alchemy/aa-core": "^3.1.1", - "@biconomy/bundler": "^4.1.1", - "@biconomy/common": "^4.1.1", - "@biconomy/modules": "^4.1.1", - "@biconomy/paymaster": "^4.1.1", - "viem": "^2.7.12" - } -} diff --git a/packages/account/src/index.ts b/packages/account/src/index.ts deleted file mode 100644 index f46953a67..000000000 --- a/packages/account/src/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { BiconomySmartAccountV2 } from "./BiconomySmartAccountV2.js"; -import { type BiconomySmartAccountV2Config } from "./utils/Types.js"; - -export * from "./utils/Types.js"; -export * from "./utils/Constants.js"; -export * from "./utils/Utils.js"; -export * from "./BiconomySmartAccountV2.js"; - -export { WalletClientSigner, LocalAccountSigner, type SmartAccountSigner } from "@alchemy/aa-core"; -export { - BiconomyPaymaster as Paymaster, - type IPaymaster, - PaymasterMode, - type IHybridPaymaster, - type PaymasterFeeQuote, - type SponsorUserOperationDto, - type FeeQuotesOrDataResponse, - createPaymaster, -} from "@biconomy/paymaster"; -export { EthersSigner, convertSigner, type LightSigner, type SupportedSigner } from "@biconomy/common"; -export { - Bundler, - type IBundler, - extractChainIdFromBundlerUrl, - type UserOpResponse, - type UserOpStatus, - type UserOpReceipt, - createBundler, -} from "@biconomy/bundler"; -export { - createECDSAOwnershipValidationModule, - createERC20SessionValidationModule, - createBatchedSessionRouterModule, - createSessionKeyManagerModule, - createMultiChainValidationModule, - DEFAULT_ECDSA_OWNERSHIP_MODULE, - DEFAULT_SESSION_KEY_MANAGER_MODULE, - DEFAULT_MULTICHAIN_MODULE, - DEFAULT_BATCHED_SESSION_ROUTER_MODULE, - type ECDSAOwnershipValidationModuleConfig, - type BatchedSessionRouterModuleConfig, - type SessionKeyManagerModuleConfig, - type MultiChainValidationModuleConfig, - type SessionValidationModuleConfig, -} from "@biconomy/modules"; - -export const createSmartAccountClient = BiconomySmartAccountV2.create; - -export type SmartWalletConfig = BiconomySmartAccountV2Config; diff --git a/packages/account/src/utils/Types.ts b/packages/account/src/utils/Types.ts deleted file mode 100644 index be406b4cb..000000000 --- a/packages/account/src/utils/Types.ts +++ /dev/null @@ -1,313 +0,0 @@ -import { BigNumberish, SmartAccountSigner, UserOperationStruct } from "@alchemy/aa-core"; -import { IBundler } from "@biconomy/bundler"; -import { - type FeeQuotesOrDataDto, - type IPaymaster, - type PaymasterFeeQuote, - PaymasterMode, - type SmartAccountData, - type SponsorUserOperationDto, -} from "@biconomy/paymaster"; -import { BaseValidationModule, ModuleInfo } from "@biconomy/modules"; -import { Chain, Hex, WalletClient } from "viem"; -import { SupportedSigner, StateOverrideSet } from "@biconomy/common"; - -export type EntryPointAddresses = Record<string, string>; -export type BiconomyFactories = Record<string, string>; -export type BiconomyImplementations = Record<string, string>; -export type EntryPointAddressesByVersion = Record<string, string>; -export type BiconomyFactoriesByVersion = Record<string, string>; -export type BiconomyImplementationsByVersion = Record<string, string>; - -export type SmartAccountConfig = { - /** entryPointAddress: address of the entry point */ - entryPointAddress: string; - /** factoryAddress: address of the smart account factory */ - bundler?: IBundler; -}; - -export interface BalancePayload { - /** address: The address of the account */ - address: string; - /** chainId: The chainId of the network */ - chainId: number; - /** amount: The amount of the balance */ - amount: bigint; - /** decimals: The number of decimals */ - decimals: number; - /** formattedAmount: The amount of the balance formatted */ - formattedAmount: string; -} - -export interface WithdrawalRequest { - /** The address of the asset */ - address: Hex; - /** The amount to withdraw. Expects unformatted amount. Will use max amount if unset */ - amount?: bigint; - /** The destination address of the funds. The second argument from the `withdraw(...)` function will be used as the default if left unset. */ - recipient?: Hex; -} - -export interface GasOverheads { - /** fixed: fixed gas overhead */ - fixed: number; - /** perUserOp: per user operation gas overhead */ - perUserOp: number; - /** perUserOpWord: per user operation word gas overhead */ - perUserOpWord: number; - /** zeroByte: per byte gas overhead */ - zeroByte: number; - /** nonZeroByte: per non zero byte gas overhead */ - nonZeroByte: number; - /** bundleSize: per signature bundleSize */ - bundleSize: number; - /** sigSize: sigSize gas overhead */ - sigSize: number; -} - -export type BaseSmartAccountConfig = { - /** index: helps to not conflict with other smart account instances */ - index?: number; - /** provider: WalletClientSigner from viem */ - provider?: WalletClient; - /** entryPointAddress: address of the smart account entry point */ - entryPointAddress?: string; - /** accountAddress: address of the smart account, potentially counterfactual */ - accountAddress?: string; - /** overheads: {@link GasOverheads} */ - overheads?: Partial<GasOverheads>; - /** paymaster: {@link IPaymaster} interface */ - paymaster?: IPaymaster; - /** chainId: chainId of the network */ - chainId?: number; -}; - -export type BiconomyTokenPaymasterRequest = { - /** feeQuote: {@link PaymasterFeeQuote} */ - feeQuote: PaymasterFeeQuote; - /** spender: The address of the spender who is paying for the transaction, this can usually be set to feeQuotesResponse.tokenPaymasterAddress */ - spender: Hex; - /** maxApproval: If set to true, the paymaster will approve the maximum amount of tokens required for the transaction. Not recommended */ - maxApproval?: boolean; - /* skip option to patch callData if approval is already given to the paymaster */ - skipPatchCallData?: boolean; -}; - -export type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> & - { - [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>; - }[Keys]; - -export type ConditionalBundlerProps = RequireAtLeastOne< - { - bundler: IBundler; - bundlerUrl: string; - }, - "bundler" | "bundlerUrl" ->; -export type ResolvedBundlerProps = { - bundler: IBundler; -}; -export type ConditionalValidationProps = RequireAtLeastOne< - { - defaultValidationModule: BaseValidationModule; - signer: SupportedSigner; - }, - "defaultValidationModule" | "signer" ->; - -export type ResolvedValidationProps = { - /** defaultValidationModule: {@link BaseValidationModule} */ - defaultValidationModule: BaseValidationModule; - /** activeValidationModule: {@link BaseValidationModule}. The active validation module. Will default to the defaultValidationModule */ - activeValidationModule: BaseValidationModule; - /** signer: ethers Wallet, viemWallet or alchemys SmartAccountSigner */ - signer: SmartAccountSigner; - /** chainId: chainId of the network */ - chainId: number; -}; - -export type BiconomySmartAccountV2ConfigBaseProps = { - /** Factory address of biconomy factory contract or some other contract you have deployed on chain */ - factoryAddress?: Hex; - /** Sender address: If you want to override the Signer address with some other address and get counterfactual address can use this to pass the EOA and get SA address */ - senderAddress?: Hex; - /** implementation of smart contract address or some other contract you have deployed and want to override */ - implementationAddress?: Hex; - /** defaultFallbackHandler: override the default fallback contract address */ - defaultFallbackHandler?: Hex; - /** rpcUrl: Rpc url, optional, we set default rpc url if not passed. */ - rpcUrl?: string; // as good as Provider - /** paymasterUrl: The Paymaster URL retrieved from the Biconomy dashboard */ - paymasterUrl?: string; - /** biconomyPaymasterApiKey: The API key retrieved from the Biconomy dashboard */ - biconomyPaymasterApiKey?: string; - /** activeValidationModule: The active validation module. Will default to the defaultValidationModule */ - activeValidationModule?: BaseValidationModule; - /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ - scanForUpgradedAccountsFromV1?: boolean; - /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ - maxIndexForScan?: number; - /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains */ - viemChain?: Chain; -}; -export type BiconomySmartAccountV2Config = BiconomySmartAccountV2ConfigBaseProps & - BaseSmartAccountConfig & - ConditionalBundlerProps & - ConditionalValidationProps; - -export type BiconomySmartAccountV2ConfigConstructorProps = BiconomySmartAccountV2ConfigBaseProps & - BaseSmartAccountConfig & - ResolvedBundlerProps & - ResolvedValidationProps; - -export type BuildUserOpOptions = { - /** overrides: Explicitly set gas values */ - // overrides?: Overrides; - /** Not currently in use */ - // skipBundlerGasEstimation?: boolean; - /** params relevant to the module, mostly relevant to sessions */ - params?: ModuleInfo; - /** nonceOptions: For overriding the nonce */ - nonceOptions?: NonceOptions; - /** forceEncodeForBatch: For encoding the user operation for batch */ - forceEncodeForBatch?: boolean; - /** paymasterServiceData: Options specific to transactions that involve a paymaster */ - paymasterServiceData?: PaymasterUserOperationDto; - /** simulationType: Determine which parts of the tx a bundler will simulate: "validation" | "validation_and_execution". */ - simulationType?: SimulationType; - /** stateOverrideSet: For overriding the state */ - stateOverrideSet?: StateOverrideSet; - /** set to true if the tx is being used *only* to deploy the smartContract, so "0x" is set as the userOp.callData */ - useEmptyDeployCallData?: boolean; -}; - -export type NonceOptions = { - /** nonceKey: The key to use for nonce */ - nonceKey?: number; - /** nonceOverride: The nonce to use for the transaction */ - nonceOverride?: number; -}; - -export type SimulationType = "validation" | "validation_and_execution"; - -export type Overrides = { - /* Value used by inner account execution */ - callGasLimit?: Hex; - /* Actual gas used by the validation of this UserOperation */ - verificationGasLimit?: Hex; - /* Gas overhead of this UserOperation */ - preVerificationGas?: Hex; - /* Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) */ - maxFeePerGas?: Hex; - /* Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) */ - maxPriorityFeePerGas?: Hex; - /* Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster ("0x" for self-sponsored transaction) */ - paymasterData?: Hex; - /* Data passed into the account along with the nonce during the verification step */ - signature?: Hex; -}; - -export type InitilizationData = { - accountIndex?: number; - signerAddress?: string; -}; - -export type PaymasterUserOperationDto = SponsorUserOperationDto & - FeeQuotesOrDataDto & { - /** mode: sponsored or erc20 */ - mode: PaymasterMode; - /** Always recommended, especially when using token paymaster */ - calculateGasLimits?: boolean; - /** Expiry duration in seconds */ - expiryDuration?: number; - /** Webhooks to be fired after user op is sent */ - webhookData?: Record<string, any>; - /** Smart account meta data */ - smartAccountInfo?: SmartAccountData; - /** the fee-paying token address */ - feeTokenAddress?: string; - /** The fee quote */ - feeQuote?: PaymasterFeeQuote; - /** The address of the spender. This is usually set to FeeQuotesOrDataResponse.tokenPaymasterAddress */ - spender?: Hex; - /** Not recommended */ - maxApproval?: boolean; - /* skip option to patch callData if approval is already given to the paymaster */ - skipPatchCallData?: boolean; - }; - -export type InitializeV2Data = { - accountIndex?: number; -}; - -export type EstimateUserOpGasParams = { - userOp: Partial<UserOperationStruct>; - // overrides?: Overrides; - /** Currrently has no effect */ - // skipBundlerGasEstimation?: boolean; - /** paymasterServiceData: Options specific to transactions that involve a paymaster */ - paymasterServiceData?: SponsorUserOperationDto; -}; - -export interface TransactionDetailsForUserOp { - /** target: The address of the contract to call */ - target: string; - /** data: The data to send to the contract */ - data: string; - /** value: The value to send to the contract */ - value?: BigNumberish; - /** gasLimit: The gas limit to use for the transaction */ - gasLimit?: BigNumberish; - /** maxFeePerGas: The maximum fee per gas to use for the transaction */ - maxFeePerGas?: BigNumberish; - /** maxPriorityFeePerGas: The maximum priority fee per gas to use for the transaction */ - maxPriorityFeePerGas?: BigNumberish; - /** nonce: The nonce to use for the transaction */ - nonce?: BigNumberish; -} - -export type CounterFactualAddressParam = { - index?: number; - validationModule?: BaseValidationModule; - /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ - scanForUpgradedAccountsFromV1?: boolean; - /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ - maxIndexForScan?: number; -}; - -export type QueryParamsForAddressResolver = { - eoaAddress: Hex; - index: number; - moduleAddress: Hex; - moduleSetupData: Hex; - maxIndexForScan?: number; -}; - -export type SmartAccountInfo = { - /** accountAddress: The address of the smart account */ - accountAddress: Hex; - /** factoryAddress: The address of the smart account factory */ - factoryAddress: Hex; - /** currentImplementation: The address of the current implementation */ - currentImplementation: string; - /** currentVersion: The version of the smart account */ - currentVersion: string; - /** factoryVersion: The version of the factory */ - factoryVersion: string; - /** deploymentIndex: The index of the deployment */ - deploymentIndex: BigNumberish; -}; - -export type ValueOrData = RequireAtLeastOne< - { - value: BigNumberish | string; - data: string; - }, - "value" | "data" ->; -export type Transaction = { - to: string; -} & ValueOrData; - -export type SupportedToken = Omit<PaymasterFeeQuote, "maxGasFeeUSD" | "usdPayment" | "maxGasFee" | "validUntil">; diff --git a/packages/account/src/utils/Utils.ts b/packages/account/src/utils/Utils.ts deleted file mode 100644 index 6041a2fb9..000000000 --- a/packages/account/src/utils/Utils.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { encodeAbiParameters, parseAbiParameters, keccak256, Hex, Chain } from "viem"; -import type { UserOperationStruct } from "@alchemy/aa-core"; -import { SupportedSigner, convertSigner } from "@biconomy/common"; -import { extractChainIdFromBundlerUrl } from "@biconomy/bundler"; -import { BiconomySmartAccountV2Config } from "./Types.js"; -import { extractChainIdFromPaymasterUrl } from "@biconomy/bundler"; -import * as chains from "viem/chains"; -import { ERROR_MESSAGES } from "./Constants.js"; - -/** - * pack the userOperation - * @param op - * @param forSignature "true" if the hash is needed to calculate the getUserOpHash() - * "false" to pack entire UserOp, for calculating the calldata cost of putting it on-chain. - */ -export function packUserOp(op: Partial<UserOperationStruct>, forSignature = true): string { - if (!op.initCode || !op.callData || !op.paymasterAndData) throw new Error("Missing userOp properties"); - if (forSignature) { - return encodeAbiParameters(parseAbiParameters("address, uint256, bytes32, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32"), [ - op.sender as Hex, - BigInt(op.nonce as Hex), - keccak256(op.initCode as Hex), - keccak256(op.callData as Hex), - BigInt(op.callGasLimit as Hex), - BigInt(op.verificationGasLimit as Hex), - BigInt(op.preVerificationGas as Hex), - BigInt(op.maxFeePerGas as Hex), - BigInt(op.maxPriorityFeePerGas as Hex), - keccak256(op.paymasterAndData as Hex), - ]); - } else { - // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) - return encodeAbiParameters(parseAbiParameters("address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes, bytes"), [ - op.sender as Hex, - BigInt(op.nonce as Hex), - op.initCode as Hex, - op.callData as Hex, - BigInt(op.callGasLimit as Hex), - BigInt(op.verificationGasLimit as Hex), - BigInt(op.preVerificationGas as Hex), - BigInt(op.maxFeePerGas as Hex), - BigInt(op.maxPriorityFeePerGas as Hex), - op.paymasterAndData as Hex, - op.signature as Hex, - ]); - } -} - -export const addressEquals = (a?: string, b?: string): boolean => !!a && !!b && a?.toLowerCase() === b.toLowerCase(); - -export const isNullOrUndefined = (value: any): value is undefined => { - return value === null || value === undefined; -}; - -export const compareChainIds = async ( - signer: SupportedSigner, - biconomySmartAccountConfig: BiconomySmartAccountV2Config, - skipChainIdCalls: boolean, -): Promise<Error | void> => { - const signerResult = await convertSigner(signer, skipChainIdCalls); - - const chainIdFromBundler = biconomySmartAccountConfig.bundlerUrl - ? extractChainIdFromBundlerUrl(biconomySmartAccountConfig.bundlerUrl) - : biconomySmartAccountConfig.bundler - ? extractChainIdFromBundlerUrl(biconomySmartAccountConfig.bundler.getBundlerUrl()) - : undefined; - - const chainIdFromPaymasterUrl = biconomySmartAccountConfig.paymasterUrl - ? extractChainIdFromPaymasterUrl(biconomySmartAccountConfig.paymasterUrl) - : undefined; - - if (!isNullOrUndefined(signerResult.chainId)) { - if (chainIdFromBundler !== undefined && signerResult.chainId !== chainIdFromBundler) { - throw new Error(`Chain IDs from signer (${signerResult.chainId}) and bundler (${chainIdFromBundler}) do not match.`); - } - if (chainIdFromPaymasterUrl !== undefined && signerResult.chainId !== chainIdFromPaymasterUrl) { - throw new Error(`Chain IDs from signer (${signerResult.chainId}) and paymaster (${chainIdFromPaymasterUrl}) do not match.`); - } - } else { - if (chainIdFromBundler !== undefined && chainIdFromPaymasterUrl !== undefined && chainIdFromBundler !== chainIdFromPaymasterUrl) { - throw new Error(`Chain IDs from bundler (${chainIdFromBundler}) and paymaster (${chainIdFromPaymasterUrl}) do not match.`); - } - } -}; - -export const isValidRpcUrl = (url: string): boolean => { - const regex = /^(https:\/\/|wss:\/\/).*/; - return regex.test(url); -}; - -/** - * Utility method for converting a chainId to a {@link Chain} object - * - * @param chainId - * @returns a {@link Chain} object for the given chainId - * @throws if the chainId is not found - */ -export const getChain = (chainId: number): Chain => { - for (const chain of Object.values(chains)) { - if (chain.id === chainId) { - return chain; - } - } - throw new Error(ERROR_MESSAGES.CHAIN_NOT_FOUND); -}; diff --git a/packages/account/src/utils/index.ts b/packages/account/src/utils/index.ts deleted file mode 100644 index bc65ec9be..000000000 --- a/packages/account/src/utils/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./Types.js"; -export * from "./Utils.js"; -export * from "./Constants.js"; diff --git a/packages/account/tests/account.e2e.spec.ts b/packages/account/tests/account.e2e.spec.ts deleted file mode 100644 index 1b4dcc586..000000000 --- a/packages/account/tests/account.e2e.spec.ts +++ /dev/null @@ -1,995 +0,0 @@ -import { TestData } from "../../../tests"; -import { createSmartAccountClient, ERROR_MESSAGES, FeeQuotesOrDataResponse, IHybridPaymaster, NATIVE_TOKEN_ALIAS, PaymasterMode } from "../src/index"; -import { Hex, createWalletClient, encodeAbiParameters, encodeFunctionData, getContract, hashMessage, http, parseAbi, parseAbiParameters } from "viem"; -import { UserOperationStruct } from "@alchemy/aa-core"; -import { checkBalance, entryPointABI } from "../../../tests/utils"; -import { ERC20_ABI } from "@biconomy/modules"; -import { privateKeyToAccount, generatePrivateKey, signMessage } from "viem/accounts"; -import { BiconomyAccountAbi } from "../src/abi/SmartAccount"; - -describe("Account Tests", () => { - let baseSepolia: TestData; - let optimism: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-e2e-tests - [baseSepolia, optimism] = testDataPerChain; - }); - - it("should have addresses", async () => { - const { - whale: { viemWallet: signer, publicAddress: sender }, - minnow: { viemWallet: recipientSigner, publicAddress: recipient }, - bundlerUrl, - } = baseSepolia; - - const { - whale: { viemWallet: signerBase, publicAddress: senderBase }, - minnow: { viemWallet: recipientSignerBase, publicAddress: recipientBase }, - bundlerUrl: bundlerUrlBase, - } = baseSepolia; - - const { - whale: { viemWallet: signerOp, publicAddress: senderOp }, - minnow: { viemWallet: recipientSignerOp, publicAddress: recipientOp }, - bundlerUrl: bundlerUrlOp, - } = optimism; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - }); - - const recipientSmartAccount = await createSmartAccountClient({ - signer: recipientSigner, - bundlerUrl, - }); - - const smartAccountBase = await createSmartAccountClient({ - signer: signerBase, - bundlerUrl: bundlerUrlBase, - }); - - const recipientSmartAccountBase = await createSmartAccountClient({ - signer: recipientSignerBase, - bundlerUrl: bundlerUrlBase, - }); - - const smartAccountOp = await createSmartAccountClient({ - signer: signerOp, - bundlerUrl: bundlerUrlOp, - }); - - const reciepientSmartAccountOp = await createSmartAccountClient({ - signer: recipientSignerOp, - bundlerUrl: bundlerUrlOp, - }); - - const addresses = await Promise.all([ - sender, - smartAccount.getAddress(), - recipient, - recipientSmartAccount.getAddress(), - senderBase, - smartAccountBase.getAddress(), - recipientBase, - recipientSmartAccountBase.getAddress(), - senderOp, - smartAccountOp.getAddress(), - recipientOp, - reciepientSmartAccountOp.getAddress(), - ]); - expect(addresses.every(Boolean)).toBeTruthy(); - }); - - it("should send some native token to a recipient", async () => { - const { - whale: { viemWallet: signer }, - minnow: { publicAddress: recipient }, - bundlerUrl, - publicClient, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - }); - - const balance = (await checkBalance(publicClient, recipient)) as bigint; - const { wait } = await smartAccount.sendTransaction( - { - to: recipient, - value: 1, - }, - { - simulationType: "validation_and_execution", - }, - ); - - const result = await wait(); - const newBalance = (await checkBalance(publicClient, recipient)) as bigint; - - expect(result?.receipt?.transactionHash).toBeTruthy(); - expect(newBalance - balance).toBe(1n); - }, 50000); - - it("Create a smart account with paymaster with an api key", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - paymasterUrl, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - paymasterUrl, - bundlerUrl, - }); - - const paymaster = smartAccount.paymaster; - expect(paymaster).not.toBeNull(); - expect(paymaster).not.toBeUndefined(); - }); - - it("Should gaslessly mint an NFT on baseSepolia", async () => { - const { - whale: { viemWallet: signer, publicAddress: recipient }, - bundlerUrl, - publicClient, - paymasterUrl, - nftAddress, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - paymasterUrl, - }); - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address to) public"]), - functionName: "safeMint", - args: [recipient], - }); - - const transaction = { - to: nftAddress, // NFT address - data: encodedCall, - }; - - const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - - const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress()); - - const response = await smartAccount.sendTransaction(transaction, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - simulationType: "validation", - }); - - const userOpReceipt = await response.wait(3); - expect(userOpReceipt.userOpHash).toBeTruthy(); - expect(userOpReceipt.success).toBe("true"); - - const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress()); - - expect(maticBalanceAfter).toEqual(maticBalanceBefore); - - const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - - expect(newBalance - balance).toBe(1n); - }, 60000); - - // TODO(Remove when Yash fixes approvals issue) - it.skip("Should mint an NFT on baseSepolia and pay with ERC20 - with preferredToken", async () => { - const { - whale: { viemWallet: signer, publicAddress: recipient }, - bundlerUrl, - nftAddress, - publicClient, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - biconomyPaymasterApiKey: "7K_k68BFN.ed274da8-69a1-496d-a897-508fc2653666", - }); - - const accountAddress = await smartAccount.getAddress(); - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient], - }); - - const transaction = { - to: nftAddress, // NFT address - data: encodedCall, - }; - - const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const maticBalanceBefore = await checkBalance(publicClient, accountAddress); - const usdcBalanceBefore = await checkBalance(publicClient, accountAddress, "0xda5289fcaaf71d52a80a254da614a192b693e977"); - - const { wait } = await smartAccount.sendTransaction([transaction], { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", - }, - }); - - const { - receipt: { transactionHash }, - userOpHash, - success, - } = await wait(); - - expect(transactionHash).toBeTruthy(); - expect(userOpHash).toBeTruthy(); - expect(success).toBe("true"); - - const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress()); - expect(maticBalanceAfter).toEqual(maticBalanceBefore); - - const usdcBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress(), "0xda5289fcaaf71d52a80a254da614a192b693e977"); - expect(usdcBalanceAfter).toBeLessThan(usdcBalanceBefore); - - const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - expect(newBalance - balance).toBe(1n); - }, 60000); - - it("Should expect several feeQuotes in resonse to empty tokenInfo fields", async () => { - const { - whale: { viemWallet: signer, publicAddress: recipient }, - bundlerUrl, - biconomyPaymasterApiKey, - nftAddress, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - biconomyPaymasterApiKey, - }); - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient], - }); - - const transaction = { - to: nftAddress, // NFT address - data: encodedCall, - }; - - const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20 } }); - expect(feeQuotesResponse.feeQuotes?.length).toBeGreaterThan(1); - }); - - // TODO(Remove when Yash fixes approvals issue) - it.skip("Should mint an NFT on baseSepolia and pay with ERC20 - with token selection and no maxApproval", async () => { - const preferredToken: Hex = "0xda5289fcaaf71d52a80a254da614a192b693e977"; - const { - whale: { viemWallet: signer, publicAddress: recipient }, - bundlerUrl, - paymasterUrl, - publicClient, - nftAddress, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - paymasterUrl, - }); - - const smartAccountAddress = await smartAccount.getAddress(); - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient], - }); - - const transaction = { - to: nftAddress, // NFT address - data: encodedCall, - }; - - const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - preferredToken, - }, - }); - - const selectedFeeQuote = feeQuotesResponse.feeQuotes?.[0]; - const spender = feeQuotesResponse.tokenPaymasterAddress!; - - const contract = getContract({ - address: preferredToken, - abi: parseAbi(ERC20_ABI), - client: publicClient, - }); - - const allowanceBefore = (await contract.read.allowance([smartAccountAddress, spender])) as bigint; - - if (allowanceBefore > 0) { - const decreaseAllowanceData = encodeFunctionData({ - abi: parseAbi(["function decreaseAllowance(address spender, uint256 subtractedValue)"]), - functionName: "decreaseAllowance", - args: [spender, allowanceBefore], - }); - - const decreaseAllowanceTx = { - to: "0xda5289fcaaf71d52a80a254da614a192b693e977", - data: decreaseAllowanceData, - }; - - const { wait } = await smartAccount.sendTransaction(decreaseAllowanceTx, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); - const { success } = await wait(); - - expect(success).toBe("true"); - const allowanceAfter = (await contract.read.allowance([smartAccountAddress, spender])) as bigint; - expect(allowanceAfter).toBe(0n); - } - - const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - const maticBalanceBefore = await checkBalance(publicClient, smartAccountAddress); - const usdcBalanceBefore = await checkBalance(publicClient, smartAccountAddress, preferredToken); - - const { wait } = await smartAccount.sendTransaction(transaction, { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - feeQuote: selectedFeeQuote, - spender: feeQuotesResponse.tokenPaymasterAddress, - }, - }); - - const { - receipt: { transactionHash }, - userOpHash, - success, - } = await wait(); - - expect(userOpHash).toBeTruthy(); - expect(success).toBe("true"); - expect(transactionHash).toBeTruthy(); - - const maticBalanceAfter = await checkBalance(publicClient, smartAccountAddress); - expect(maticBalanceAfter).toEqual(maticBalanceBefore); - - const usdcBalanceAfter = await checkBalance(publicClient, smartAccountAddress, preferredToken); - expect(usdcBalanceAfter).toBeLessThan(usdcBalanceBefore); - - const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - expect(newBalance - balance).toBe(1n); - }, 60000); - - it("Should throw and error if missing field for ERC20 Paymaster user op", async () => { - const { - whale: { viemWallet: signer, publicAddress: recipient }, - bundlerUrl, - biconomyPaymasterApiKey, - nftAddress, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - biconomyPaymasterApiKey, - }); - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient], - }); - - const transaction = { - to: nftAddress, // NFT address - data: encodedCall, - }; - - const feeQuotesResponse: FeeQuotesOrDataResponse = await smartAccount.getTokenFees(transaction, { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - preferredToken: "0xda5289fcaaf71d52a80a254da614a192b693e977", - }, - }); - - expect(async () => - smartAccount.sendTransaction(transaction, { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - feeQuote: feeQuotesResponse.feeQuotes?.[0], - }, - simulationType: "validation", - }), - ).rejects.toThrow(ERROR_MESSAGES.SPENDER_REQUIRED); - }, 60000); - - it("#getUserOpHash should match entryPoint.getUserOpHash", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - entryPointAddress, - publicClient, - paymasterUrl, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - paymasterUrl, - bundlerUrl, - }); - - const userOp: UserOperationStruct = { - sender: "0x".padEnd(42, "1") as string, - nonce: 2, - initCode: "0x3333", - callData: "0x4444", - callGasLimit: 5, - verificationGasLimit: 6, - preVerificationGas: 7, - maxFeePerGas: 8, - maxPriorityFeePerGas: 9, - paymasterAndData: "0xaaaaaa", - signature: "0xbbbb", - }; - - const epHash = await publicClient.readContract({ - address: entryPointAddress as Hex, - abi: entryPointABI, - functionName: "getUserOpHash", - // @ts-ignore - args: [userOp], - }); - - const hash = await smartAccount.getUserOpHash(userOp); - expect(hash).toBe(epHash); - }, 30000); - - it("should be deployed to counterfactual address", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - publicClient, - paymasterUrl, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - paymasterUrl, - bundlerUrl, - }); - - const accountAddress = await smartAccount.getAccountAddress(); - const byteCode = await publicClient.getBytecode({ address: accountAddress as Hex }); - - expect(byteCode?.length).toBeGreaterThan(2); - }, 10000); // on github runner it takes more time than 5000ms - - it("should check if ecdsaOwnershipModule is enabled", async () => { - const ecdsaOwnershipModule = "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e"; - - const { - whale: { viemWallet: signer }, - bundlerUrl, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - }); - - expect(ecdsaOwnershipModule).toBe(smartAccount.activeValidationModule.getAddress()); - }); - - it("Should throw, chain id from signer and bundlerUrl do not match", async () => { - const { - whale: { viemWallet: signer }, - } = baseSepolia; - - const createAccount = createSmartAccountClient({ - signer, - bundlerUrl: "https://bundler.biconomy.io/api/v2/1/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", // mock - }); - - await expect(createAccount).rejects.toThrow(); - }); - - it("Should throw, chain id from paymasterUrl and bundlerUrl do not match", async () => { - const { - whale: { viemWallet: signer }, - } = baseSepolia; - - const createAccount = createSmartAccountClient({ - signer, - paymasterUrl: "https://paymaster.biconomy.io/api/v1/1/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71", - bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44", // mock - }); - - await expect(createAccount).rejects.toThrow(); - }); - it("should deploy a smart account with native token balance", async () => { - const { - bundlerUrl, - biconomyPaymasterApiKey, - viemChain, - publicClient, - whale: { viemWallet: signer, account }, - deploymentCost, - } = baseSepolia; - - const newPrivateKey = generatePrivateKey(); - const newAccount = privateKeyToAccount(newPrivateKey); - - const newViemWallet = createWalletClient({ - account: newAccount, - chain: viemChain, - transport: http(viemChain.rpcUrls.default.http[0]), - }); - - const smartAccount = await createSmartAccountClient({ - signer: newViemWallet, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - const smartAccountAddress = await smartAccount.getAccountAddress(); - - // Setup: - const hash = await signer.sendTransaction({ to: smartAccountAddress, value: BigInt(deploymentCost), account, chain: viemChain }); // Send enough native token to counterfactual address to deploy the smart account - const transaction = await publicClient.waitForTransactionReceipt({ hash }); - expect(transaction).toBeTruthy(); - - // Test: - const { wait } = await smartAccount.deploy(); - const { success } = await wait(); - - const byteCode = await publicClient.getBytecode({ address: smartAccountAddress }); - expect(success).toBe("true"); - expect(byteCode).toBeTruthy(); - }, 60000); - - it("should deploy a smart account with sponsorship", async () => { - const { bundlerUrl, biconomyPaymasterApiKey, viemChain, publicClient } = baseSepolia; - - const newPrivateKey = generatePrivateKey(); - const newAccount = privateKeyToAccount(newPrivateKey); - - const newViemWallet = createWalletClient({ - account: newAccount, - chain: viemChain, - transport: http(viemChain.rpcUrls.default.http[0]), - }); - - const smartAccount = await createSmartAccountClient({ - signer: newViemWallet, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - const smartAccountAddress = await smartAccount.getAccountAddress(); - const balance = await publicClient.getBalance({ address: smartAccountAddress }); - expect(balance).toBe(0n); - - const { wait } = await smartAccount.deploy({ - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - }); - const { success } = await wait(); - - const byteCode = await publicClient.getBytecode({ address: smartAccountAddress }); - expect(success).toBe("true"); - expect(byteCode).toBeTruthy(); - }, 60000); - - it("should fail to deploy a smart account if no native token balance or paymaster", async () => { - const { bundlerUrl, biconomyPaymasterApiKey, viemChain } = baseSepolia; - - const newPrivateKey = generatePrivateKey(); - const newAccount = privateKeyToAccount(newPrivateKey); - - const newViemWallet = createWalletClient({ - account: newAccount, - chain: viemChain, - transport: http(viemChain.rpcUrls.default.http[0]), - }); - - const smartAccount = await createSmartAccountClient({ - signer: newViemWallet, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - expect(async () => smartAccount.deploy()).rejects.toThrow(ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY); - }); - - it("should get supported tokens from the paymaster", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - biconomyPaymasterApiKey, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - bundlerUrl, - signer, - biconomyPaymasterApiKey, - }); - - const tokens = await smartAccount.getSupportedTokens(); - - expect(tokens.length).toBeGreaterThan(0); - expect(tokens[0]).toHaveProperty("tokenAddress"); - expect(tokens[0]).toHaveProperty("symbol"); - expect(tokens[0]).toHaveProperty("decimal"); - expect(tokens[0]).toHaveProperty("premiumPercentage"); - expect(tokens[0]).toHaveProperty("logoUrl"); - }); - - it("should fetch balances for smartAccount", async () => { - const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; - const { - whale: { viemWallet: signer }, - bundlerUrl, - publicClient, - biconomyPaymasterApiKey, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - const usdcBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress(), usdt); - const [usdtBalanceFromSmartAccount] = await smartAccount.getBalances([usdt]); - - expect(usdcBalanceBefore).toBe(usdtBalanceFromSmartAccount.amount); - }); - - it("should check native token balance for smartAccount", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - biconomyPaymasterApiKey, - chainId, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - const [ethBalanceFromSmartAccount] = await smartAccount.getBalances(); - - expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n); - expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS); - expect(ethBalanceFromSmartAccount.chainId).toBe(chainId); - expect(ethBalanceFromSmartAccount.decimals).toBe(18); - }, 60000); - - it("should fail to deploy a smart account if already deployed", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - biconomyPaymasterApiKey, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - expect(async () => smartAccount.deploy()).rejects.toThrow(ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED); - }, 60000); - - it("should fetch balances for smartAccount", async () => { - const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; - const { - whale: { viemWallet: signer }, - bundlerUrl, - biconomyPaymasterApiKey, - chainId, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - const [usdtBalanceFromSmartAccount, ethBalanceFromSmartAccount] = await smartAccount.getBalances([usdt]); // last result is always eth balance - - expect(usdtBalanceFromSmartAccount.amount).toBeGreaterThan(0n); - expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n); - expect(usdtBalanceFromSmartAccount.address).toBe(usdt); - expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS); - expect(usdtBalanceFromSmartAccount.chainId).toBe(chainId); - expect(ethBalanceFromSmartAccount.chainId).toBe(chainId); - expect(usdtBalanceFromSmartAccount.decimals).toBe(6); - expect(ethBalanceFromSmartAccount.decimals).toBe(18); - expect(usdtBalanceFromSmartAccount.formattedAmount).toBeTruthy(); - expect(ethBalanceFromSmartAccount.formattedAmount).toBeTruthy(); - }); - - it("should withdraw erc20 balances", async () => { - const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; - const { - whale: { viemWallet: signer, publicAddress: smartAccountOwner, account }, - bundlerUrl, - publicClient, - biconomyPaymasterApiKey, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - const smartAccountAddress = await smartAccount.getAddress(); - const usdtBalanceOfSABefore = await checkBalance(publicClient, smartAccountAddress, usdt); - const usdtBalanceOfRecipientBefore = await checkBalance(publicClient, smartAccountOwner, usdt); - - const { wait } = await smartAccount.withdraw([{ address: usdt, amount: BigInt(1), recipient: smartAccountOwner }]); - - const { - receipt: { transactionHash }, - userOpHash, - success, - } = await wait(); - - expect(userOpHash).toBeTruthy(); - expect(success).toBe("true"); - expect(transactionHash).toBeTruthy(); - - const usdtBalanceOfSAAfter = (await checkBalance(publicClient, smartAccountAddress, usdt)) as bigint; - const usdtBalanceOfRecipientAfter = (await checkBalance(publicClient, smartAccountOwner, usdt)) as bigint; - - expect(usdtBalanceOfSAAfter - usdtBalanceOfSABefore).toBe(-1n); - expect(usdtBalanceOfRecipientAfter - usdtBalanceOfRecipientBefore).toBe(1n); - }, 15000); - - it("should gaslessly withdraw nativeToken", async () => { - const { - whale: { viemWallet: signer, publicAddress: smartAccountOwner }, - bundlerUrl, - publicClient, - biconomyPaymasterApiKey, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - const smartAccountAddress = await smartAccount.getAddress(); - const balanceOfSABefore = (await checkBalance(publicClient, smartAccountAddress)) as bigint; - const balanceOfRecipientBefore = (await checkBalance(publicClient, smartAccountOwner)) as bigint; - - const { wait } = await smartAccount.withdraw([{ address: NATIVE_TOKEN_ALIAS, amount: BigInt(1), recipient: smartAccountAddress }], null, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - }); - - const { - receipt: { transactionHash }, - userOpHash, - success, - } = await wait(); - - expect(userOpHash).toBeTruthy(); - expect(success).toBe("true"); - expect(transactionHash).toBeTruthy(); - - const balanceOfSAAfter = (await checkBalance(publicClient, smartAccountAddress)) as bigint; - const balanceOfRecipientAfter = (await checkBalance(publicClient, smartAccountOwner)) as bigint; - - expect(balanceOfSABefore - balanceOfSAAfter).toBe(1n); - expect(balanceOfRecipientAfter - balanceOfRecipientBefore).toBe(1n); - }, 12000); - - it("should withdraw nativeToken and an erc20 token", async () => { - const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; - - const { - whale: { viemWallet: signer, publicAddress: smartAccountOwner }, - bundlerUrl, - publicClient, - biconomyPaymasterApiKey, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - const smartAccountAddress = await smartAccount.getAddress(); - const balanceOfSABefore = (await checkBalance(publicClient, smartAccountAddress)) as bigint; - const balanceOfRecipientBefore = (await checkBalance(publicClient, smartAccountOwner)) as bigint; - const usdtBalanceOfSABefore = await checkBalance(publicClient, smartAccountAddress, usdt); - const usdtBalanceOfRecipientBefore = await checkBalance(publicClient, smartAccountOwner, usdt); - - const { wait } = await smartAccount.withdraw( - [ - { address: usdt, amount: BigInt(1) }, - { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) }, - ], - smartAccountOwner, - { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - }, - ); - - const { - receipt: { transactionHash }, - userOpHash, - success, - } = await wait(); - - expect(userOpHash).toBeTruthy(); - expect(success).toBe("true"); - expect(transactionHash).toBeTruthy(); - - const balanceOfSAAfter = (await checkBalance(publicClient, smartAccountAddress)) as bigint; - const balanceOfRecipientAfter = (await checkBalance(publicClient, smartAccountOwner)) as bigint; - const usdtBalanceOfSAAfter = (await checkBalance(publicClient, smartAccountAddress, usdt)) as bigint; - const usdtBalanceOfRecipientAfter = (await checkBalance(publicClient, smartAccountOwner, usdt)) as bigint; - - expect(balanceOfSABefore - balanceOfSAAfter).toBe(1n); - expect(balanceOfRecipientAfter - balanceOfRecipientBefore).toBe(1n); - expect(usdtBalanceOfSAAfter - usdtBalanceOfSABefore).toBe(-1n); - expect(usdtBalanceOfRecipientAfter - usdtBalanceOfRecipientBefore).toBe(1n); - }, 60000); - - it("should withdraw all native token", async () => { - const { - whale: { viemWallet: signer, publicAddress: smartAccountOwner, account }, - bundlerUrl, - viemChain, - publicClient, - biconomyPaymasterApiKey, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - const smartAccountAddress = await smartAccount.getAddress(); - const balanceOfSABefore = (await checkBalance(publicClient, smartAccountAddress)) as bigint; - const balanceOfRecipientBefore = (await checkBalance(publicClient, smartAccountOwner)) as bigint; - - const { wait } = await smartAccount.withdraw([] /* null or undefined or [] */, smartAccountOwner, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, // Will leave no dust - }); - - const { - receipt: { transactionHash }, - userOpHash, - success, - } = await wait(); - - expect(userOpHash).toBeTruthy(); - expect(success).toBe("true"); - expect(transactionHash).toBeTruthy(); - - const balanceOfSAAfter = (await checkBalance(publicClient, smartAccountAddress)) as bigint; - const balanceOfRecipientAfter = (await checkBalance(publicClient, smartAccountOwner)) as bigint; - - expect(balanceOfSAAfter).toBe(0n); - expect(balanceOfRecipientAfter).toBe(balanceOfSABefore + balanceOfRecipientBefore); - - // Teardown: send back the native token to the smart account - const teardownHash = await signer.sendTransaction({ to: smartAccountAddress, value: balanceOfSABefore, account, chain: viemChain }); - expect(teardownHash).toBeTruthy(); - }, 60000); - - it("should error if no recipient exists", async () => { - const usdt: Hex = "0xda5289fcaaf71d52a80a254da614a192b693e977"; - - const { - whale: { viemWallet: signer, publicAddress: smartAccountOwner }, - bundlerUrl, - biconomyPaymasterApiKey, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - const txs = [ - { address: usdt, amount: BigInt(1), recipient: smartAccountOwner }, - { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) }, - ]; - - expect(async () => smartAccount.withdraw(txs)).rejects.toThrow(ERROR_MESSAGES.NO_RECIPIENT); - }); - - it("should error when withdraw all of native token is attempted without an amount explicitly set", async () => { - const { - whale: { viemWallet: signer, publicAddress: smartAccountOwner }, - bundlerUrl, - biconomyPaymasterApiKey, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - expect(async () => smartAccount.withdraw(null, smartAccountOwner)).rejects.toThrow(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT); - }, 6000); - - it("should verify a correct signature through isValidSignature", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - publicClient, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - }); - - const eip1271MagicValue = "0x1626ba7e"; - const message = "Some message from dApp"; - const messageHash = hashMessage(message); - const signature = await smartAccount.signMessage(messageHash); - - const response = await publicClient.readContract({ - address: await smartAccount.getAccountAddress(), - abi: BiconomyAccountAbi, - functionName: "isValidSignature", - args: [messageHash, signature], - }); - - expect(response).toBe(eip1271MagicValue); - }); - - it("should confirm that signature is not valid", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - publicClient, - } = baseSepolia; - - const randomPrivKey = generatePrivateKey(); - const randomWallet = privateKeyToAccount(randomPrivKey); - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - }); - - const eip1271MagicValue = "0xffffffff"; - const message = "Some message from dApp"; - const messageHash = hashMessage(message); - const signature = await randomWallet.signMessage({ message: messageHash }); - const signatureWithModuleAddress = encodeAbiParameters(parseAbiParameters("bytes, address"), [ - signature, - smartAccount.defaultValidationModule.getAddress(), - ]); - - const response = await publicClient.readContract({ - address: await smartAccount.getAccountAddress(), - abi: BiconomyAccountAbi, - functionName: "isValidSignature", - args: [messageHash, signatureWithModuleAddress], - }); - - expect(response).toBe(eip1271MagicValue); - }); -}); diff --git a/packages/account/tests/account.optimism.e2e.spec.ts b/packages/account/tests/account.optimism.e2e.spec.ts deleted file mode 100644 index d558ba4ed..000000000 --- a/packages/account/tests/account.optimism.e2e.spec.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { TestData } from "../../../tests"; -import { createSmartAccountClient, PaymasterMode } from "../src/index"; -import { encodeFunctionData, parseAbi } from "viem"; -import { checkBalance } from "../../../tests/utils"; - -const maybe = process.env.WITH_MAINNET_TESTS === "true" ? describe : describe.skip; - -maybe("Account Tests", () => { - let optimism: TestData; - let _: TestData; - let __: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-e2e-tests - [_, __, optimism] = testDataPerChain; - }); - - it("should send some native token to a recipient on optimism", async () => { - const { - whale: { viemWallet: signer, publicAddress: sender }, - minnow: { publicAddress: recipient }, - bundlerUrl, - publicClient, - } = optimism; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - }); - - const accountAddress = await smartAccount.getAddress(); - - const balanceOfRecipient = (await checkBalance(publicClient, recipient)) as bigint; - const smartAccountBalance = (await checkBalance(publicClient, accountAddress)) as bigint; - const { wait } = await smartAccount.sendTransaction( - { - to: recipient, - value: BigInt(1), - }, - { - simulationType: "validation_and_execution", - }, - ); - - const result = await wait(); - const newBalanceOfRecipient = (await checkBalance(publicClient, recipient)) as bigint; - - expect(result?.receipt?.transactionHash).toBeTruthy(); - expect(result.success).toBe("true"); - expect(newBalanceOfRecipient).toBeGreaterThan(balanceOfRecipient); - }, 50000); - - it("Create a smart account with paymaster with an api key on optimism", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - biconomyPaymasterApiKey, - } = optimism; - - const smartAccount = await createSmartAccountClient({ - signer, - biconomyPaymasterApiKey, - bundlerUrl, - }); - - const paymaster = smartAccount.paymaster; - expect(paymaster).not.toBeNull(); - expect(paymaster).not.toBeUndefined(); - }); - - it("Should gaslessly mint an NFT on optimism", async () => { - const { - whale: { viemWallet: signer, publicAddress: recipient }, - bundlerUrl, - biconomyPaymasterApiKey, - publicClient, - nftAddress, - } = optimism; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - biconomyPaymasterApiKey, - }); - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address to) public"]), - functionName: "safeMint", - args: [recipient], - }); - - const transaction = { - to: nftAddress, // NFT address - data: encodedCall, - }; - - const balance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - - const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAddress()); - - const response = await smartAccount.sendTransaction(transaction, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - simulationType: "validation_and_execution", - }); - - const userOpReceipt = await response.wait(3); - expect(userOpReceipt.userOpHash).toBeTruthy(); - expect(userOpReceipt.success).toBe("true"); - - const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAddress()); - - expect(maticBalanceAfter).toEqual(maticBalanceBefore); - - const newBalance = (await checkBalance(publicClient, recipient, nftAddress)) as bigint; - - expect(newBalance - balance).toBe(1n); - }, 50000); -}); diff --git a/packages/account/tests/account.read.e2e.spec.ts b/packages/account/tests/account.read.e2e.spec.ts deleted file mode 100644 index 32af9dc26..000000000 --- a/packages/account/tests/account.read.e2e.spec.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { TestData } from "../../../tests"; -import { createSmartAccountClient } from "../src/index"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE, createECDSAOwnershipValidationModule } from "@biconomy/modules"; - -describe("Account Tests", () => { - let baseSepolia: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-e2e-tests - [baseSepolia] = testDataPerChain; - }); - - it("should check if module is enabled on the smart account", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - } = baseSepolia; - - const smartWallet = await createSmartAccountClient({ - signer, - bundlerUrl, - }); - - const isEnabled = await smartWallet.isModuleEnabled(DEFAULT_ECDSA_OWNERSHIP_MODULE); - expect(isEnabled).toBeTruthy(); - }, 30000); - - it("should get all modules", async () => { - const { - whale: { - viemWallet: signer, - account: { address: accountAddress }, - }, - bundlerUrl, - biconomyPaymasterApiKey, - } = baseSepolia; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - biconomyPaymasterApiKey, - }); - - const modules = await smartAccount.getAllModules(); - - expect(modules).toContain(DEFAULT_SESSION_KEY_MANAGER_MODULE); // session manager module - expect(modules).toContain(DEFAULT_ECDSA_OWNERSHIP_MODULE); // ecdsa ownership module - }, 30000); - - it("should get disabled module data", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - } = baseSepolia; - - const smartWallet = await createSmartAccountClient({ - signer, - bundlerUrl, - }); - - const disableModuleData = await smartWallet.getDisableModuleData(DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_ECDSA_OWNERSHIP_MODULE); - expect(disableModuleData).toBeTruthy(); - }, 30000); - - it("should get setup and enable module data", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - } = baseSepolia; - - const smartWallet = await createSmartAccountClient({ - signer, - bundlerUrl, - }); - - const module = await createECDSAOwnershipValidationModule({ signer }); - const initData = await module.getInitData(); - const setupAndEnableModuleData = await smartWallet.getSetupAndEnableModuleData(DEFAULT_ECDSA_OWNERSHIP_MODULE, initData); - expect(setupAndEnableModuleData).toBeTruthy(); - }, 30000); - - it("should read estimated user op gas values", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - } = baseSepolia; - - const smartWallet = await createSmartAccountClient({ - signer, - bundlerUrl, - }); - - const tx = { - to: "0x000000D50C68705bd6897B2d17c7de32FB519fDA", - data: "0x", - }; - - const userOp = await smartWallet.buildUserOp([tx]); - - const estimatedGas = await smartWallet.estimateUserOpGas(userOp); - expect(estimatedGas.maxFeePerGas).toBeTruthy(); - expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy(); - expect(estimatedGas.verificationGasLimit).toBeTruthy(); - expect(estimatedGas.callGasLimit).toBeTruthy(); - expect(estimatedGas.preVerificationGas).toBeTruthy(); - expect(estimatedGas).toHaveProperty("paymasterAndData", "0x"); - }, 35000); -}); diff --git a/packages/account/tests/account.spec.ts b/packages/account/tests/account.spec.ts deleted file mode 100644 index 9e76f2f89..000000000 --- a/packages/account/tests/account.spec.ts +++ /dev/null @@ -1,283 +0,0 @@ -import { Paymaster, createBundler, createSmartAccountClient } from "../src"; -import { Chain, createWalletClient, http } from "viem"; -import { localhost } from "viem/chains"; -import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; -import { TestData } from "../../../tests"; -import { JsonRpcProvider } from "@ethersproject/providers"; -import { Wallet } from "@ethersproject/wallet"; -import { getMockBundlerUrl } from "../../../tests/utils"; - -describe("Account Tests", () => { - let ganache: TestData; - const mockBundlerUrl = "https://bundler.biconomy.io/api/v2/1337/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f14"; - - beforeEach(() => { - // @ts-ignore: Comes from setup-unit-tests - [ganache] = testDataPerChain; - }); - - it("should create a smartAccountClient from an ethers signer", async () => { - const { - minnow: { ethersSigner: signer }, - } = ganache; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl: mockBundlerUrl, - rpcUrl: localhost.rpcUrls.default.http[0], - }); - const address = await smartAccount.getAccountAddress(); - expect(address).toBeTruthy(); - }); - - it("should create a whale smartAccountClient from an ethers signer", async () => { - const { - whale: { ethersSigner: signer }, - } = ganache; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl: mockBundlerUrl, - rpcUrl: localhost.rpcUrls.default.http[0], - }); - const address = await smartAccount.getAccountAddress(); - expect(address).toBeTruthy(); - }); - - it("should create a smartAccountClient from a walletClient", async () => { - const { - whale: { viemWallet: signer }, - } = ganache; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl: mockBundlerUrl, - rpcUrl: localhost.rpcUrls.default.http[0], - }); - const address = await smartAccount.getAccountAddress(); - expect(address).toBeTruthy(); - }); - - it("should pickup the rpcUrl when a custom chain is used", async () => { - const customBlastChain = { - id: 81_457, - name: "Blast", - // network: "blast", - nativeCurrency: { - decimals: 18, - name: "Ethereum", - symbol: "ETH", - }, - rpcUrls: { - public: { http: ["https://rpc.blast.io"] }, - default: { http: ["https://rpc.blast.io"] }, - }, - blockExplorers: { - etherscan: { name: "Blastscan", url: "https://blastscan.io/" }, - default: { name: "Blastscan", url: "https://blastscan.io/" }, - }, - contracts: { - multicall3: { - address: "0xca11bde05977b3631167028862be2a173976ca11", - blockCreated: 88_189, - }, - }, - } as const satisfies Chain; - - const { - whale: { privateKey }, - } = ganache; - - const accountOne = privateKeyToAccount(privateKey); - - const walletClientWithCustomChain = createWalletClient({ - account: accountOne, - chain: customBlastChain, - transport: http(customBlastChain.rpcUrls.default.http[0]), - }); - - const blastBundler = await createBundler({ - bundlerUrl: getMockBundlerUrl(customBlastChain.id), - viemChain: customBlastChain, - }); - const smartAccountFromViemWithCustomChain = await createSmartAccountClient({ - viemChain: customBlastChain, - signer: walletClientWithCustomChain, - bundler: blastBundler, - rpcUrl: customBlastChain.rpcUrls.default.http[0], - }); - - expect(smartAccountFromViemWithCustomChain.rpcProvider.transport.url).toBe("https://rpc.blast.io"); - expect(blastBundler.getBundlerUrl()).toBe(getMockBundlerUrl(customBlastChain.id)); - }); - - it("should pickup the rpcUrl from viem wallet and ethers", async () => { - const { - chainId, - viemChain, - whale: { privateKey, viemWallet: originalViemSigner, ethersSigner: originalEthersSigner }, - } = ganache; - - const newRpcUrl = "http://localhost:8545"; - const defaultRpcUrl = viemChain.rpcUrls.default.http[0]; //http://127.0.0.1:8545" - - const ethersProvider = new JsonRpcProvider(newRpcUrl); - const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider); - - const accountOne = privateKeyToAccount(privateKey); - const walletClientWithNewRpcUrl = createWalletClient({ - account: accountOne, - chain: viemChain, - transport: http(newRpcUrl), - }); - - const [smartAccountFromEthersWithNewRpc, smartAccountFromViemWithNewRpc, smartAccountFromEthersWithOldRpc, smartAccountFromViemWithOldRpc] = - await Promise.all([ - createSmartAccountClient({ - chainId, - signer: ethersSignerWithNewRpcUrl, - bundlerUrl: mockBundlerUrl, - rpcUrl: newRpcUrl, - }), - createSmartAccountClient({ - chainId, - signer: walletClientWithNewRpcUrl, - bundlerUrl: mockBundlerUrl, - rpcUrl: newRpcUrl, - }), - createSmartAccountClient({ - chainId, - signer: originalEthersSigner, - bundlerUrl: mockBundlerUrl, - rpcUrl: viemChain.rpcUrls.default.http[0], - }), - createSmartAccountClient({ - chainId, - signer: originalViemSigner, - bundlerUrl: mockBundlerUrl, - rpcUrl: viemChain.rpcUrls.default.http[0], - }), - ]); - - const [ - smartAccountFromEthersWithNewRpcAddress, - smartAccountFromViemWithNewRpcAddress, - smartAccountFromEthersWithOldRpcAddress, - smartAccountFromViemWithOldRpcAddress, - ] = await Promise.all([ - smartAccountFromEthersWithNewRpc.getAccountAddress(), - smartAccountFromViemWithNewRpc.getAccountAddress(), - smartAccountFromEthersWithOldRpc.getAccountAddress(), - smartAccountFromViemWithOldRpc.getAccountAddress(), - ]); - - expect( - [ - smartAccountFromEthersWithNewRpcAddress, - smartAccountFromViemWithNewRpcAddress, - smartAccountFromEthersWithOldRpcAddress, - smartAccountFromViemWithOldRpcAddress, - ].every(Boolean), - ).toBeTruthy(); - - expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe(newRpcUrl); - expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe(newRpcUrl); - expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe(defaultRpcUrl); - expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe(defaultRpcUrl); - }); - - it("should create a smartAccountClient from a signer and chainId", async () => { - const { - chainId, - whale: { alchemyWalletClientSigner: signer }, - } = ganache; - - const smartAccount = await createSmartAccountClient({ - chainId, - signer, - bundlerUrl: mockBundlerUrl, - rpcUrl: localhost.rpcUrls.default.http[0], - }); - const address = await smartAccount.getAccountAddress(); - expect(address).toBeTruthy(); - }); - - it("should provide an account address", async () => { - const { - whale: { viemWallet: signer }, - } = ganache; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl: mockBundlerUrl, - rpcUrl: localhost.rpcUrls.default.http[0], - }); - const address = await smartAccount.getAccountAddress(); - expect(address).toBeTruthy(); - }); - - it("should have an active validation module", async () => { - const { - whale: { viemWallet: signer }, - } = ganache; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl: mockBundlerUrl, - rpcUrl: localhost.rpcUrls.default.http[0], - }); - - const module = smartAccount.activeValidationModule; - expect(module).toBeTruthy(); - }); - - it("Create a smart account with paymaster by creating instance", async () => { - const { - whale: { viemWallet: signer }, - paymasterUrl, - } = ganache; - - const paymaster = new Paymaster({ paymasterUrl }); - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl: mockBundlerUrl, - paymaster, - rpcUrl: localhost.rpcUrls.default.http[0], - }); - expect(smartAccount.paymaster).not.toBeNull(); - expect(smartAccount.paymaster).not.toBeUndefined(); - }, 10000); - - it("should fail to create a smartAccountClient from a walletClient without a chainId", async () => { - const account = privateKeyToAccount(generatePrivateKey()); - const viemWalletClientNoChainId = createWalletClient({ - account, - transport: http(localhost.rpcUrls.default.http[0]), - }); - - expect( - await expect( - createSmartAccountClient({ - signer: viemWalletClientNoChainId, - bundlerUrl: mockBundlerUrl, - rpcUrl: localhost.rpcUrls.default.http[0], - }), - ).rejects.toThrow("Cannot consume a viem wallet without a chainId"), - ); - }); - - it("should fail to create a smartAccountClient from a walletClient without an account", async () => { - const viemWalletNoAccount = createWalletClient({ - transport: http(localhost.rpcUrls.default.http[0]), - }); - - expect(async () => - createSmartAccountClient({ - signer: viemWalletNoAccount, - bundlerUrl: mockBundlerUrl, - rpcUrl: localhost.rpcUrls.default.http[0], - }), - ).rejects.toThrow("Cannot consume a viem wallet without an account"); - }); -}); diff --git a/packages/account/tests/utils.spec.ts b/packages/account/tests/utils.spec.ts deleted file mode 100644 index d8dfc2a79..000000000 --- a/packages/account/tests/utils.spec.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { BiconomySmartAccountV2Config, ERROR_MESSAGES, createECDSAOwnershipValidationModule } from "../src"; -import { TestData } from "../../../tests"; -import { compareChainIds, getChain } from "../src/utils"; -import { createWalletClient, http } from "viem"; -import { bsc } from "viem/chains"; - -describe("Utils tests", () => { - let ganache: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-unit-tests - [ganache] = testDataPerChain; - }); - - it("Should not throw and error, chain ids match", async () => { - const { - minnow: { viemWallet: walletClient }, - } = ganache; - - const mockBundlerUrl = "https://bundler.biconomy.io/api/v2/1337/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44"; - const mockPaymasterUrl = "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71"; - - const config: BiconomySmartAccountV2Config = { - signer: walletClient, - bundlerUrl: mockBundlerUrl, - paymasterUrl: mockPaymasterUrl, - }; - - await expect(compareChainIds(walletClient, config, false)).resolves.not.toThrow(); - }); - - it("Should throw and error, bundlerUrl chain id and signer chain id does not match", async () => { - const { - minnow: { viemWallet: walletClient }, - paymasterUrl, - } = ganache; - - const mockBundlerUrl = "https://bundler.biconomy.io/api/v2/1/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44"; - - const config: BiconomySmartAccountV2Config = { - signer: walletClient, - bundlerUrl: mockBundlerUrl, - paymasterUrl, - }; - - await expect(compareChainIds(walletClient, config, false)).rejects.toThrow(); - }); - - it("Should throw and error, bundlerUrl chain id and paymaster url chain id does not match", async () => { - const { - bundlerUrl, - minnow: { viemWallet: walletClient }, - } = ganache; - - const mockPaymasterUrl = "https://paymaster.biconomy.io/api/v1/80001/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71"; - - const config: BiconomySmartAccountV2Config = { - signer: walletClient, - bundlerUrl, - paymasterUrl: mockPaymasterUrl, - }; - - await expect(compareChainIds(walletClient, config, false)).rejects.toThrow(); - }); - - it("Should throw and error, bundlerUrl chain id and paymaster url chain id does not match", async () => { - const { - bundlerUrl, - minnow: { viemWallet: walletClient }, - } = ganache; - - const mockPaymasterUrl = "https://paymaster.biconomy.io/api/v1/80001/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71"; - - const ecdsaModule = await createECDSAOwnershipValidationModule({ - signer: walletClient, - }); - - const config: BiconomySmartAccountV2Config = { - defaultValidationModule: ecdsaModule, - activeValidationModule: ecdsaModule, - bundlerUrl, - paymasterUrl: mockPaymasterUrl, - }; - - await expect(compareChainIds(walletClient, config, false)).rejects.toThrow(); - }); - - it("Should throw and error, signer has chain id (56) and paymasterUrl has chain id (80001)", async () => { - const { bundlerUrl, whale } = ganache; - - const mockPaymasterUrl = "https://paymaster.biconomy.io/api/v1/80001/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71"; - - const walletClient = createWalletClient({ - account: whale.viemWallet.account, - chain: bsc, - transport: http(bsc.rpcUrls.default.http[0]), - }); - - const config: BiconomySmartAccountV2Config = { - signer: walletClient, - bundlerUrl, - paymasterUrl: mockPaymasterUrl, - }; - - await expect(compareChainIds(walletClient, config, false)).rejects.toThrow(); - }); - - // test chains - it("Should return chain object for chain id 1", () => { - const chainId = 1; - const chain = getChain(chainId); - expect(chain.id).toBe(chainId); - }); - - // should have correct fields - it("Should have correct fields", () => { - const chainId = 1; - const chain = getChain(chainId); - - ["blockExplorers", "contracts", "fees", "formatters", "id", "name", "nativeCurrency", "rpcUrls", "serializers"].every((field) => { - expect(chain).toHaveProperty(field); - }); - }); - - // Should throw an error, chain id not found - it("Should throw an error, chain id not found", () => { - const chainId = 0; - expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND); - }); -}); diff --git a/packages/account/tsconfig.build.json b/packages/account/tsconfig.build.json deleted file mode 100644 index 42d88a236..000000000 --- a/packages/account/tsconfig.build.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "Build", - "compilerOptions": { - "lib": ["es2022", "dom"], - "target": "es2021", - "types": ["node"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "verbatimModuleSyntax": false, - "useDefineForClassFields": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "useUnknownInCatchVariables": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "declaration": true, - "inlineSources": true, - "noEmit": false, - "sourceMap": true - }, - "exclude": ["**/*/node_modules", "**/*/tests", "tests", "tests/**/*"], - "include": ["src"] -} \ No newline at end of file diff --git a/packages/account/tsconfig.json b/packages/account/tsconfig.json deleted file mode 100644 index 53677da37..000000000 --- a/packages/account/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true, - "lib": ["es2020"], - "types": ["node"] - }, - "include": ["src", "src/**/*.json"], -} diff --git a/packages/bundler/.esbuild.js b/packages/bundler/.esbuild.js deleted file mode 100644 index ca355e346..000000000 --- a/packages/bundler/.esbuild.js +++ /dev/null @@ -1,58 +0,0 @@ -const esbuildPluginTsc = require("esbuild-plugin-tsc"); -const esbuild = require("esbuild"); -const { dependencies, peerDependencies = {} } = require("./package.json"); -const { Generator } = require("npm-dts"); - -const COMMON_SETTINGS = { - entryPoints: ["src/index.ts"], - minify: true, - bundle: true, - plugins: [esbuildPluginTsc({ force: true })], -}; - -const ESM_SETTINGS = { - ...COMMON_SETTINGS, - sourcemap: true, - outfile: "dist/esm/index.js", - platform: "browser", - target: "esnext", - format: "esm", - mainFields: ["browser", "module", "main"], -}; -const buildForESM = async () => await esbuild.build(ESM_SETTINGS); - -const CJS_SETTINGS = { - ...COMMON_SETTINGS, - format: "cjs", - sourcemap: false, - outfile: "dist/cjs/index.js", - platform: "node", -}; - -const watchForCJS = async () => { - let ctx = await esbuild.context(CJS_SETTINGS); - await ctx.watch(); - await ctx.serve({ servedir: "dist/src" }); - console.log("watching..."); -}; - -const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); - -(async () => { - const buildType = process.argv.slice(2)[0]; - const shouldWatch = process.argv.slice(3)[0] === "--watch"; - if (!buildType) { - console.log("No build type provided"); - process.exit(1); - } - console.log(`Building for ${buildType}`); - if (buildType === "ESM") { - await buildForESM(); - } else if (buildType === "CJS") { - console.log("watching? " + shouldWatch); - await (shouldWatch ? watchForCJS : buildForCJS)(); - } else if (buildType === "TYP") { - await buildForTYP(); - } -})(); diff --git a/packages/bundler/CHANGELOG.md b/packages/bundler/CHANGELOG.md deleted file mode 100644 index 7730bad6b..000000000 --- a/packages/bundler/CHANGELOG.md +++ /dev/null @@ -1,94 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 4.1.1 (2023-07-03) - -VERSION Bump Only. - -## 4.1.0 (2023-04-03) - -VERSION Bump Only. - -## 4.0.3 (2023-28-02) - -VERSION Bump Only. - -## 4.0.2 (2023-26-02) - -VERSION Bump Only. - -## 4.0.1 (2023-02-22) - -VERSION Bump Only. - -## 4.0.0 (2023-07-02) - -Export createBundler alias for static Bundler.create call - -## 3.1.3 (2023-12-28) - -VERSION Bump Only. - -## 3.1.2 (2023-12-28) - -### Features - -- Make entrypoint address optional in bundler config ([547724a](https://github.com/bcnmy/biconomy-client-sdk/pull/337/commits/547724a15366ee1e63aee80fdee0edc128a84c41)) - -### Bug Fixes - -- use undefined in place of ! + check on limits returned by paymaster and throw ([0376901](https://github.com/bcnmy/biconomy-client-sdk/commit/0376901b7aec8c268a6a3c654d147335974d78f3)) - -## 3.1.1 (2023-11-09) - -### Bug Fixes - -- resolve comments ([34fd6a3](https://github.com/bcnmy/biconomy-client-sdk/commit/34fd6a308805061d9faf408f1ce6da9cac0ee819)) - -### Features - -- add linea mainnet ([c3d1283](https://github.com/bcnmy/biconomy-client-sdk/commit/c3d12832002c18e187f910b5f7dac5ef5b797abf)) -- chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - -## 3.1.0 (2023-09-20) - -Modular Account Abstraction is here. - -### Bug Fixes - -- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) -- more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) - -### Features - -- base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) -- chain integration ([ddc5d91](https://github.com/bcnmy/biconomy-client-sdk/commit/ddc5d91d5df10a10266f4500644d24e0bc1ea684)) -- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - -## 3.0.0 (2023-08-28) - -Modular SDK - consists stable version of below updates done in Alphas. - -### Features - -- base mainnet integration ([c17f5d6](https://github.com/bcnmy/biconomy-client-sdk/commit/c17f5d6c2fe34b106e6d9755f54fab2493db6fbe)) - -## 3.0.0-alpha.0 (2023-08-02) - -VERSION Bump Only. - -# 3.1.0-alpha.0 (2023-07-24) - -### Features - -- chain integration ([738556e](https://github.com/bcnmy/biconomy-client-sdk/commit/738556efcfda70fedc652befc0b35f8835c5e360)) - -## 3.0.0-alpha.0 (2023-07-12) - -### Bug Fixes - -- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) diff --git a/packages/bundler/Readme.md b/packages/bundler/Readme.md deleted file mode 100644 index 06e0c4af6..000000000 --- a/packages/bundler/Readme.md +++ /dev/null @@ -1,99 +0,0 @@ -### Bundler - -In the context of (ERC4337), A bundler plays a main role in the infrastructure. This concept is integral to the operation of account abstraction across any network that utilizes the Ethereum Virtual Machine (EVM). - -## Installation - -Using `npm` package manager - -```bash -npm i @biconomy/bundler -``` - -OR - -Using `yarn` package manager - -```bash -yarn add @biconomy/bundler -``` - -## configuration - -| Key | Description | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -| bundlerUrl | Represent ERC4337 spec implemented bundler url. you can get one from biconomy dashboard. Alternatively you can supply any of your preferred | -| chainId | This represents the network your smart wallet transactions will be conducted on. Take a look following Link for supported chain id's | -| entryPointAddress | Since entrypoint can have different addresses you can call getSupportedEntryPoints() on bundler instance for supported addresses list | - -```typescript -// This is how you create bundler instance in your dapp's -import { IBundler, createBundler } from "@biconomy/bundler"; - -// Make use of core-types package -import { ChainId } from "@biconomy/core-types"; - -const bundler: IBundler = await createBundler({ bundlerUrl: "" }); // you can get this value from biconomy dashboard. https://dashboard.biconomy.io -``` - -Following are the methods that can be call on bundler instance - -```typescript -export interface IBundler { - estimateUserOpGas(userOp: Partial<UserOperation>): Promise<UserOpGasResponse>; - sendUserOp(userOp: UserOperation): Promise<UserOpResponse>; - getUserOpReceipt(userOpHash: string): Promise<UserOpReceipt>; - getUserOpByHash(userOpHash: string): Promise<UserOpByHashResponse>; -} -``` - -**[estimateUserOpGas](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#estimateUserOpGas)** -Estimate the gas values for a UserOperation. Given UserOperation optionally without gas limits and gas prices, return the needed gas limits. The signature field is ignored by the wallet, so that the operation will not require user's approval. Still, it might require putting a "semi-valid" signature (e.g. a signature in the right length) - -**Return Values** - -**preVerificationGas** gas overhead of this UserOperation -**verificationGasLimit** actual gas used by the validation of this UserOperation -**callGasLimit** limit used to execute userop.callData called from EntryPoint to the Smart Account - - -------------------------------- - -**[sendUserOp](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#sendUserOp)** -it submits a User Operation object to the User Operation pool of the client. The client MUST validate the UserOperation, and return a result accordingly. - -The result SHOULD be set to the userOpHash if and only if the request passed simulation and was accepted in the client's User Operation pool. If the validation, simulation, or User Operation pool inclusion fails, result SHOULD NOT be returned. Rather, the client SHOULD return the failure reason. - -**Return Values** -If the UserOperation is valid, the client MUST return the calculated userOpHash for it - - -------------------------------- - -**[getUserOpByHash](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#getUserOpByHash)** -Return a UserOperation based on a hash (userOpHash) returned by sendUserOp (eth_sendUserOperation) - -**Return Values** - -null in case the UserOperation is not yet included in a block, or a full UserOperation, with the addition of entryPoint, blockNumber, blockHash and transactionHash - - -------------------------------- - -**[getUserOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/classes/Bundler.html#getUserOpReceipt)** - -Return a UserOperation receipt based on a hash (userOpHash) returned by eth_sendUserOperation - -**Return Values** -null in case the UserOperation is not yet included in a block, or: - -**userOpHash** the request hash -**entryPoint** -**sender** -**nonce** -**paymaster** the paymaster used for this userOp (or empty) -**actualGasCost** - actual amount paid (by account or paymaster) for this UserOperation -**actualGasUsed** - total gas used by this UserOperation (including preVerification, creation, validation and execution) -**success** boolean - did this execution completed without revert -**reason** in case of revert, this is the revert reason -**logs** the logs generated by this UserOperation (not including logs of other UserOperations in the same bundle) -**receipt** the TransactionReceipt object. Note that the returned TransactionReceipt is for the entire bundle, not only for this UserOperation. - - -------------------------------- diff --git a/packages/bundler/package.json b/packages/bundler/package.json deleted file mode 100644 index a41dde75f..000000000 --- a/packages/bundler/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "@biconomy/bundler", - "version": "4.1.1", - "description": "Biconomy Bundler package to interact with any bundler node as per ERC4337 standard", - "main": "./dist/cjs/index.js", - "module": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "typings": "./dist/types/index.d.ts", - "exports": { - ".": { - "import": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./package.json" - }, - "keywords": [ - "Ethereum", - "Bundler", - "Relayer", - "ERC4337", - "Gasless Transaction", - "Biconomy", - "SDK" - ], - "scripts": { - "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "yarn build:tsc --watch", - "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", - "build": "yarn unbuild && yarn build:tsc", - "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", - "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", - "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", - "test:file": "jest --config=../../jest.config.js --runInBand", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", - "test:run": "jest tests/**/*.spec.ts --runInBand", - "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" - }, - "author": "Biconomy", - "repository": { - "type": "git", - "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" - }, - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@alchemy/aa-core": "^3.1.1", - "@biconomy/common": "^4.1.1", - "viem": "^2.7.12" - }, - "devDependencies": { - "@types/node": "^20.11.10", - "esbuild": "^0.19.11", - "esbuild-plugin-tsc": "^0.4.0", - "npm-dts": "^1.3.12" - } -} diff --git a/packages/bundler/src/index.ts b/packages/bundler/src/index.ts deleted file mode 100644 index 7a779f5d5..000000000 --- a/packages/bundler/src/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Bundler } from "./Bundler.js"; - -export * from "./interfaces/IBundler.js"; -export * from "./Bundler.js"; -export * from "./utils/Types.js"; -export * from "./utils/Utils.js"; - -export const createBundler = Bundler.create; diff --git a/packages/bundler/src/interfaces/IBundler.ts b/packages/bundler/src/interfaces/IBundler.ts deleted file mode 100644 index 75077e141..000000000 --- a/packages/bundler/src/interfaces/IBundler.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { StateOverrideSet } from "@biconomy/common"; -import { - UserOpResponse, - UserOpGasResponse, - UserOpReceipt, - UserOpByHashResponse, - UserOpStatus, - SimulationType, - GasFeeValues, -} from "../utils/Types.js"; -import { UserOperationStruct } from "@alchemy/aa-core"; - -export interface IBundler { - estimateUserOpGas(_userOp: Partial<UserOperationStruct>, stateOverrideSet?: StateOverrideSet): Promise<UserOpGasResponse>; - sendUserOp(_userOp: UserOperationStruct, _simulationType?: SimulationType): Promise<UserOpResponse>; - getUserOpReceipt(_userOpHash: string): Promise<UserOpReceipt>; - getUserOpByHash(_userOpHash: string): Promise<UserOpByHashResponse>; - getGasFeeValues(): Promise<GasFeeValues>; - getUserOpStatus(_userOpHash: string): Promise<UserOpStatus>; - getBundlerUrl(): string; -} diff --git a/packages/bundler/src/utils/Utils.ts b/packages/bundler/src/utils/Utils.ts deleted file mode 100644 index 692cf1bdd..000000000 --- a/packages/bundler/src/utils/Utils.ts +++ /dev/null @@ -1,22 +0,0 @@ -export const extractChainIdFromBundlerUrl = (url: string): number => { - try { - const regex = /\/api\/v2\/(\d+)\/[a-zA-Z0-9.-]+$/; - const match = regex.exec(url)!; - return parseInt(match[1]); - } catch (error) { - throw new Error("Invalid chain id"); - } -}; - -export const extractChainIdFromPaymasterUrl = (url: string): number => { - try { - const regex = /\/api\/v\d+\/(\d+)\//; - const match = regex.exec(url); - if (!match) { - throw new Error("Invalid URL format"); - } - return parseInt(match[1]); - } catch (error) { - throw new Error("Invalid chain id"); - } -}; diff --git a/packages/bundler/tests/bundler.e2e.spec.ts b/packages/bundler/tests/bundler.e2e.spec.ts deleted file mode 100644 index 7b9211dd0..000000000 --- a/packages/bundler/tests/bundler.e2e.spec.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TestData } from "../../../tests"; - -describe("Bundler Unit Tests", () => { - let mumbai: TestData; - let baseSepolia: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-e2e-tests - [mumbai, baseSepolia] = testDataPerChain; - }); - - it("should have chain data for mumbai", () => { - expect(mumbai).toHaveProperty("chainId"); - }); - - it("should also have chain data for base", () => { - expect(baseSepolia).toHaveProperty("chainId"); - }); -}); diff --git a/packages/bundler/tests/bundler.spec.ts b/packages/bundler/tests/bundler.spec.ts deleted file mode 100644 index e663dafb4..000000000 --- a/packages/bundler/tests/bundler.spec.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TestData } from "../../../tests"; - -describe("Bundler Unit Tests", () => { - let ganache: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-unit-tests - [ganache] = testDataPerChain; - }); - - it("should have chain data for ganache", () => { - expect(ganache).toHaveProperty("chainId"); - }); -}); diff --git a/packages/bundler/tsconfig.build.json b/packages/bundler/tsconfig.build.json deleted file mode 100644 index 4ac8b8026..000000000 --- a/packages/bundler/tsconfig.build.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "Build", - "compilerOptions": { - "lib": ["es2022", "dom"], - "target": "es2021", - "types": ["node"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "verbatimModuleSyntax": false, - "useDefineForClassFields": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "useUnknownInCatchVariables": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "declaration": true, - "inlineSources": true, - "noEmit": false, - "sourceMap": true - }, - "exclude": ["**/*/node_modules", "**/*/tests", "tests"], - "include": ["src"] -} \ No newline at end of file diff --git a/packages/bundler/tsconfig.json b/packages/bundler/tsconfig.json deleted file mode 100644 index d9b305a9a..000000000 --- a/packages/bundler/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true, - "lib": ["es2020"], - "types": ["node"] - }, - "include": ["src", "src/**/*.json"] -} diff --git a/packages/common/.esbuild.js b/packages/common/.esbuild.js deleted file mode 100644 index ca355e346..000000000 --- a/packages/common/.esbuild.js +++ /dev/null @@ -1,58 +0,0 @@ -const esbuildPluginTsc = require("esbuild-plugin-tsc"); -const esbuild = require("esbuild"); -const { dependencies, peerDependencies = {} } = require("./package.json"); -const { Generator } = require("npm-dts"); - -const COMMON_SETTINGS = { - entryPoints: ["src/index.ts"], - minify: true, - bundle: true, - plugins: [esbuildPluginTsc({ force: true })], -}; - -const ESM_SETTINGS = { - ...COMMON_SETTINGS, - sourcemap: true, - outfile: "dist/esm/index.js", - platform: "browser", - target: "esnext", - format: "esm", - mainFields: ["browser", "module", "main"], -}; -const buildForESM = async () => await esbuild.build(ESM_SETTINGS); - -const CJS_SETTINGS = { - ...COMMON_SETTINGS, - format: "cjs", - sourcemap: false, - outfile: "dist/cjs/index.js", - platform: "node", -}; - -const watchForCJS = async () => { - let ctx = await esbuild.context(CJS_SETTINGS); - await ctx.watch(); - await ctx.serve({ servedir: "dist/src" }); - console.log("watching..."); -}; - -const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); - -(async () => { - const buildType = process.argv.slice(2)[0]; - const shouldWatch = process.argv.slice(3)[0] === "--watch"; - if (!buildType) { - console.log("No build type provided"); - process.exit(1); - } - console.log(`Building for ${buildType}`); - if (buildType === "ESM") { - await buildForESM(); - } else if (buildType === "CJS") { - console.log("watching? " + shouldWatch); - await (shouldWatch ? watchForCJS : buildForCJS)(); - } else if (buildType === "TYP") { - await buildForTYP(); - } -})(); diff --git a/packages/common/README.md b/packages/common/README.md deleted file mode 100644 index db4c4a8c7..000000000 --- a/packages/common/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# `@biconomy/common` - -common utils - -common methods for other biconomy packages - -## Usage - -``` -no direct usage of this package -``` diff --git a/packages/common/package.json b/packages/common/package.json deleted file mode 100644 index 22010587c..000000000 --- a/packages/common/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "@biconomy/common", - "version": "4.1.1", - "description": "common utils to be used for aa transactions", - "keywords": [ - "utils" - ], - "author": "livingrockrises <chirag@biconomy.io>", - "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", - "license": "MIT", - "main": "./dist/cjs/index.js", - "module": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "typings": "./dist/types/index.d.ts", - "exports": { - ".": { - "import": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./package.json" - }, - "files": [ - "dist/*", - "README.md" - ], - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" - }, - "scripts": { - "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "yarn build:tsc --watch", - "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", - "build": "yarn unbuild && yarn build:tsc", - "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", - "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", - "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", - "test:file": "jest --config=../../jest.config.js --runInBand", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", - "test:run": "jest tests/**/*.spec.ts --runInBand", - "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" - }, - "bugs": { - "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" - }, - "dependencies": { - "@alchemy/aa-core": "^3.1.1", - "@ethersproject/abstract-signer": "^5.7.0", - "viem": "^2.7.12" - }, - "devDependencies": { - "@types/node": "^20.11.10", - "esbuild": "^0.19.11", - "esbuild-plugin-tsc": "^0.4.0", - "npm-dts": "^1.3.12" - } -} diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts deleted file mode 100644 index cca231168..000000000 --- a/packages/common/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from "./utils/Helpers/convertSigner.js"; -export * from "./utils/Types.js"; -export * from "./utils/Constants.js"; -export * from "./utils/Logger.js"; -export * from "./utils/HttpRequests.js"; -export { EthersSigner } from "./utils/EthersSigner.js"; diff --git a/packages/common/src/utils/Constants.ts b/packages/common/src/utils/Constants.ts deleted file mode 100644 index 4e3292cb5..000000000 --- a/packages/common/src/utils/Constants.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { SupportedSignerName } from "./Types.js"; - -export const UNIQUE_PROPERTIES_PER_SIGNER: Record<SupportedSignerName, string> = { - alchemy: "signerType", - ethers: "provider", - viem: "transport", -}; diff --git a/packages/common/src/utils/EthersSigner.ts b/packages/common/src/utils/EthersSigner.ts deleted file mode 100644 index d77e0eab1..000000000 --- a/packages/common/src/utils/EthersSigner.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { SmartAccountSigner } from "@alchemy/aa-core"; -import { Hex, SignableMessage } from "viem"; -import { Signer } from "@ethersproject/abstract-signer"; - -export class EthersSigner<T extends Signer> implements SmartAccountSigner<T> { - signerType: string = "ethers"; - - inner: T; - - constructor(inner: T, signerType: string) { - this.inner = inner; - this.signerType = signerType; - } - - async getAddress() { - return (await this.inner.getAddress()) as Hex; - } - - async signMessage(_message: SignableMessage): Promise<Hex> { - const message = typeof _message === "string" ? _message : _message.raw; - const signature = await this.inner?.signMessage(message); - return this.#correctSignature(signature as Hex); - } - - async signTypedData(_notUsed: any): Promise<Hex> { - throw new Error("signTypedData is not supported for Ethers Signer"); - } - - #correctSignature = (signature: Hex): Hex => { - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); - } - return signature; - }; -} - -export default EthersSigner; diff --git a/packages/common/src/utils/Helpers/convertSigner.ts b/packages/common/src/utils/Helpers/convertSigner.ts deleted file mode 100644 index 5aadb0803..000000000 --- a/packages/common/src/utils/Helpers/convertSigner.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { EthersSigner } from "../EthersSigner.js"; -import { SupportedSigner } from "../Types.js"; -import { WalletClient } from "viem"; -import { WalletClientSigner, SmartAccountSigner } from "@alchemy/aa-core"; -import { UNIQUE_PROPERTIES_PER_SIGNER } from "../Constants.js"; -import { Signer } from "@ethersproject/abstract-signer"; - -interface SmartAccountResult { - signer: SmartAccountSigner; - chainId: number | null; - rpcUrl: string | null; -} - -export const convertSigner = async (signer: SupportedSigner, skipChainIdCalls: boolean = false): Promise<SmartAccountResult> => { - let resolvedSmartAccountSigner: SmartAccountSigner; - let rpcUrl: string | null = null; - let chainId: number | null = null; - const isAnAlchemySigner = UNIQUE_PROPERTIES_PER_SIGNER.alchemy in signer; - const isAnEthersSigner = UNIQUE_PROPERTIES_PER_SIGNER.ethers in signer; - const isAViemSigner = UNIQUE_PROPERTIES_PER_SIGNER.viem in signer; - - if (!isAnAlchemySigner) { - if (isAnEthersSigner) { - const ethersSigner = signer as Signer; - if (!skipChainIdCalls) { - // If chainId not provided, get it from walletClient - if (!ethersSigner.provider) { - throw new Error("Cannot consume an ethers Wallet without a provider"); - } - const chainIdFromProvider = await ethersSigner.provider.getNetwork(); - if (!chainIdFromProvider?.chainId) { - throw new Error("Cannot consume an ethers Wallet without a chainId"); - } - chainId = Number(chainIdFromProvider.chainId); - } - // convert ethers Wallet to alchemy's SmartAccountSigner under the hood - resolvedSmartAccountSigner = new EthersSigner(ethersSigner, "ethers"); - // @ts-ignore - rpcUrl = ethersSigner.provider?.connection?.url ?? null; - } else if (isAViemSigner) { - const walletClient = signer as WalletClient; - if (!walletClient.account) { - throw new Error("Cannot consume a viem wallet without an account"); - } - if (!skipChainIdCalls) { - // If chainId not provided, get it from walletClient - if (!walletClient.chain) { - throw new Error("Cannot consume a viem wallet without a chainId"); - } - chainId = walletClient.chain.id; - } - // convert viems walletClient to alchemy's SmartAccountSigner under the hood - resolvedSmartAccountSigner = new WalletClientSigner(walletClient, "viem"); - rpcUrl = walletClient?.transport?.url ?? null; - } else { - throw new Error("Unsupported signer"); - } - } else { - resolvedSmartAccountSigner = signer as SmartAccountSigner; - } - return { signer: resolvedSmartAccountSigner, rpcUrl, chainId }; -}; diff --git a/packages/common/src/utils/Helpers/index.ts b/packages/common/src/utils/Helpers/index.ts deleted file mode 100644 index 235336dc3..000000000 --- a/packages/common/src/utils/Helpers/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./convertSigner.js"; diff --git a/packages/common/src/utils/HttpRequests.ts b/packages/common/src/utils/HttpRequests.ts deleted file mode 100644 index 192a33e4e..000000000 --- a/packages/common/src/utils/HttpRequests.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Logger } from "./Logger.js"; -import { Service } from "./Types.js"; - -export enum HttpMethod { - Get = "get", - Post = "post", - Delete = "delete", -} - -/* eslint-disable @typescript-eslint/no-explicit-any */ -export interface HttpRequest { - url: string; - method: HttpMethod; - body?: Record<string, any>; -} - -export async function sendRequest<T>({ url, method, body }: HttpRequest, service: Service): Promise<T> { - const response = await fetch(url, { - method, - headers: { - Accept: "application/json", - "Content-Type": "application/json", - }, - body: JSON.stringify(body), - }); - - let jsonResponse; - try { - jsonResponse = await response.json(); - Logger.log(`${service} RPC Response`, jsonResponse); - } catch (error) { - if (!response.ok) { - throw new Error(response.statusText); - } - } - - if (response.ok) { - return jsonResponse as T; - } - if (jsonResponse.error) { - throw new Error(`Error coming from ${service}: ${jsonResponse.error.message}`); - } - if (jsonResponse.message) { - throw new Error(jsonResponse.message); - } - if (jsonResponse.msg) { - throw new Error(jsonResponse.msg); - } - if (jsonResponse.data) { - throw new Error(jsonResponse.data); - } - if (jsonResponse.detail) { - throw new Error(jsonResponse.detail); - } - if (jsonResponse.message) { - throw new Error(jsonResponse.message); - } - if (jsonResponse.nonFieldErrors) { - throw new Error(jsonResponse.nonFieldErrors); - } - if (jsonResponse.delegate) { - throw new Error(jsonResponse.delegate); - } - throw new Error(response.statusText); -} diff --git a/packages/common/src/utils/Types.ts b/packages/common/src/utils/Types.ts deleted file mode 100644 index 52eac0216..000000000 --- a/packages/common/src/utils/Types.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { WalletClient } from "viem"; -import { Signer } from "@ethersproject/abstract-signer"; -import { SmartAccountSigner } from "@alchemy/aa-core"; - -export type SupportedSignerName = "alchemy" | "ethers" | "viem"; -export type SupportedSigner = SmartAccountSigner | WalletClient | Signer | LightSigner; - -export type Service = "Bundler" | "Paymaster"; - -export interface LightSigner { - getAddress(): Promise<string>; - signMessage(message: string | Uint8Array): Promise<string>; -} - -export type StateOverrideSet = { - [key: string]: { - balance?: string; - nonce?: string; - code?: string; - state?: object; - stateDiff?: object; - }; -}; diff --git a/packages/common/tsconfig.build.json b/packages/common/tsconfig.build.json deleted file mode 100644 index 4ac8b8026..000000000 --- a/packages/common/tsconfig.build.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "Build", - "compilerOptions": { - "lib": ["es2022", "dom"], - "target": "es2021", - "types": ["node"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "verbatimModuleSyntax": false, - "useDefineForClassFields": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "useUnknownInCatchVariables": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "declaration": true, - "inlineSources": true, - "noEmit": false, - "sourceMap": true - }, - "exclude": ["**/*/node_modules", "**/*/tests", "tests"], - "include": ["src"] -} \ No newline at end of file diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json deleted file mode 100644 index d9b305a9a..000000000 --- a/packages/common/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true, - "lib": ["es2020"], - "types": ["node"] - }, - "include": ["src", "src/**/*.json"] -} diff --git a/packages/modules/.esbuild.js b/packages/modules/.esbuild.js deleted file mode 100644 index ca355e346..000000000 --- a/packages/modules/.esbuild.js +++ /dev/null @@ -1,58 +0,0 @@ -const esbuildPluginTsc = require("esbuild-plugin-tsc"); -const esbuild = require("esbuild"); -const { dependencies, peerDependencies = {} } = require("./package.json"); -const { Generator } = require("npm-dts"); - -const COMMON_SETTINGS = { - entryPoints: ["src/index.ts"], - minify: true, - bundle: true, - plugins: [esbuildPluginTsc({ force: true })], -}; - -const ESM_SETTINGS = { - ...COMMON_SETTINGS, - sourcemap: true, - outfile: "dist/esm/index.js", - platform: "browser", - target: "esnext", - format: "esm", - mainFields: ["browser", "module", "main"], -}; -const buildForESM = async () => await esbuild.build(ESM_SETTINGS); - -const CJS_SETTINGS = { - ...COMMON_SETTINGS, - format: "cjs", - sourcemap: false, - outfile: "dist/cjs/index.js", - platform: "node", -}; - -const watchForCJS = async () => { - let ctx = await esbuild.context(CJS_SETTINGS); - await ctx.watch(); - await ctx.serve({ servedir: "dist/src" }); - console.log("watching..."); -}; - -const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); - -(async () => { - const buildType = process.argv.slice(2)[0]; - const shouldWatch = process.argv.slice(3)[0] === "--watch"; - if (!buildType) { - console.log("No build type provided"); - process.exit(1); - } - console.log(`Building for ${buildType}`); - if (buildType === "ESM") { - await buildForESM(); - } else if (buildType === "CJS") { - console.log("watching? " + shouldWatch); - await (shouldWatch ? watchForCJS : buildForCJS)(); - } else if (buildType === "TYP") { - await buildForTYP(); - } -})(); diff --git a/packages/modules/CHANGELOG.md b/packages/modules/CHANGELOG.md deleted file mode 100644 index 7c3d40af8..000000000 --- a/packages/modules/CHANGELOG.md +++ /dev/null @@ -1,64 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 4.1.1 (2023-07-03) - -VERSION Bump Only. - -## 4.1.0 (2023-04-03) - -VERSION Bump Only. - -## 4.0.3 (2023-28-02) - -VERSION Bump Only. - -## 4.0.2 (2023-26-02) - -VERSION Bump Only. - -## 4.0.1 (2023-02-22) - -VERSION Bump Only. - -## 4.0.0 (2024-02-12) - -### Features - -- Export module create aliases from modules package ([d6205c](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/d6205c4d76ab846ecdc10843c65e0277f3ceab00)) - -## 3.1.3 (2023-12-28) - -VERSION Bump Only. - -## 3.1.2 (2023-12-28) - -### Bug Fixes - -- Update import paths for consistency and fixing build issues ([ec5c3a3](https://github.com/bcnmy/biconomy-client-sdk/pull/332/commits/ec5c3a352e8caab6e94234264f4cd5cb32e5af3f)) - -## 3.1.1 (2023-11-09) - -### Bug Fixes - -- Fix update batched session router address and signing logic ([107b881](https://github.com/bcnmy/biconomy-client-sdk/commit/107b881da4b1a6da1f9db22ac54eda62f8c05b59)) - -## 3.1.0 (2023-09-20) - -Modular Account Abstraction is here. - -### Bug Fixes - -- incorrect data merkleRoot length ([2e9d2dd](https://github.com/bcnmy/biconomy-client-sdk/commit/2e9d2dd5876a4de61af390d6595e1ab2cf8c137c)) -- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) -- more lint issues ([10df908](https://github.com/bcnmy/biconomy-client-sdk/commit/10df90821b473fd668907cf3e447dfe3825317fc)) -- signing issue ([f67e339](https://github.com/bcnmy/biconomy-client-sdk/commit/f67e339bcff8d9712df8406b4d123affcd4d4aa4)) -- sorting leaves always ([1fb908c](https://github.com/bcnmy/biconomy-client-sdk/commit/1fb908cb3b90abe4588c3a162ecf45c8afc80d81)) -- use hexZeroPad in leaf ([b3da05f](https://github.com/bcnmy/biconomy-client-sdk/commit/b3da05f2e9c56973e96d0a7a3bc065aef23f9c18)) -- use proof instead of root ([3a40a9d](https://github.com/bcnmy/biconomy-client-sdk/commit/3a40a9d8b9fb1fba8f660e5eab1fae1369f9f289)) - -### Features - -- add session key manager ([af41480](https://github.com/bcnmy/biconomy-client-sdk/commit/af41480ff1c88e2a4d0ee8605f2f01b3a958a1d9)) diff --git a/packages/modules/README.md b/packages/modules/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/modules/package.json b/packages/modules/package.json deleted file mode 100644 index 7d73de383..000000000 --- a/packages/modules/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "@biconomy/modules", - "version": "4.1.1", - "description": "This package provides different validation modules/plugins for ERC4337 compatible modular account", - "main": "./dist/cjs/index.js", - "module": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "typings": "./dist/types/index.d.ts", - "exports": { - ".": { - "import": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./package.json" - }, - "keywords": [ - "Smart Account", - "ERC-4337", - "Account Abstraction", - "Smart Contract Wallets", - "Biconomy", - "Modules", - "Plugins" - ], - "scripts": { - "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "yarn build:tsc --watch", - "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", - "build": "yarn unbuild && yarn build:tsc", - "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", - "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", - "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", - "test:file": "TS_NODE_PROJECT=../../tsconfig.json mocha -r ts-node/register --timeout 30000", - "test:concurrently": "concurrently -k --success first 'yarn start:ganache > /dev/null'", - "test:cov": "jest --coverage", - "test:run": "yarn test:file tests/**/*.spec.ts", - "start:ganache": "ganache -m 'direct buyer cliff train rice spirit census refuse glare expire innocent quote'", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" - }, - "author": "Biconomy", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@alchemy/aa-core": "^3.1.1", - "@biconomy/common": "^4.1.1", - "@ethersproject/abi": "^5.7.0", - "merkletreejs": "^0.3.11", - "viem": "^2.7.12" - }, - "devDependencies": { - "@types/node": "^20.11.10", - "esbuild": "^0.19.11", - "esbuild-plugin-tsc": "^0.4.0", - "npm-dts": "^1.3.12", - "@biconomy/paymaster": "^4.1.1", - "@biconomy/modules": "^4.1.1" - } -} diff --git a/packages/modules/src/BaseValidationModule.ts b/packages/modules/src/BaseValidationModule.ts deleted file mode 100644 index 4f739f782..000000000 --- a/packages/modules/src/BaseValidationModule.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Hex } from "viem"; -import { SmartAccountSigner } from "@alchemy/aa-core"; -import { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types.js"; -import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants.js"; -import { IValidationModule } from "./interfaces/IValidationModule.js"; - -export abstract class BaseValidationModule implements IValidationModule { - entryPointAddress: Hex; - - constructor(moduleConfig: BaseValidationModuleConfig) { - const { entryPointAddress } = moduleConfig; - - this.entryPointAddress = entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS; - } - - abstract getAddress(): Hex; - - setEntryPointAddress(entryPointAddress: Hex): void { - this.entryPointAddress = entryPointAddress; - } - - abstract getInitData(): Promise<Hex>; - - // Anything required to get dummy signature can be passed as params - abstract getDummySignature(_params?: ModuleInfo): Promise<Hex>; - - abstract getSigner(): Promise<SmartAccountSigner>; - - // Signer specific or any other additional information can be passed as params - abstract signUserOpHash(_userOpHash: string, _params?: ModuleInfo): Promise<Hex>; - - abstract signMessage(_message: Uint8Array | string): Promise<string>; - - async signMessageSmartAccountSigner(_message: string | Uint8Array, signer: SmartAccountSigner): Promise<string> { - const message = typeof _message === "string" ? _message : { raw: _message }; - let signature: `0x${string}` = await signer.signMessage(message); - - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = `0x${signature.slice(0, -2) + correctV.toString(16)}`; - } - - return signature; - } -} diff --git a/packages/modules/src/BatchedSessionRouterModule.ts b/packages/modules/src/BatchedSessionRouterModule.ts deleted file mode 100644 index cec1cddd4..000000000 --- a/packages/modules/src/BatchedSessionRouterModule.ts +++ /dev/null @@ -1,278 +0,0 @@ -import { ModuleVersion, CreateSessionDataParams, BatchedSessionRouterModuleConfig, ModuleInfo, CreateSessionDataResponse } from "./utils/Types.js"; -import { - BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION, - DEFAULT_SESSION_KEY_MANAGER_MODULE, - DEFAULT_BATCHED_SESSION_ROUTER_MODULE, -} from "./utils/Constants.js"; -import { BaseValidationModule } from "./BaseValidationModule.js"; -import { SessionKeyManagerModule } from "./SessionKeyManagerModule.js"; -import { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage.js"; -import { Hex, concat, encodeAbiParameters, keccak256, pad, parseAbiParameters, toBytes, toHex } from "viem"; -import { SmartAccountSigner } from "@alchemy/aa-core"; -import { convertSigner } from "@biconomy/common"; -import { defaultAbiCoder } from "@ethersproject/abi"; - -export class BatchedSessionRouterModule extends BaseValidationModule { - version: ModuleVersion = "V1_0_0"; - - moduleAddress!: Hex; - - sessionManagerModuleAddress!: Hex; - - sessionKeyManagerModule!: SessionKeyManagerModule; - - readonly mockEcdsaSessionKeySig: Hex = - "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; - - /** - * This constructor is private. Use the static create method to instantiate SessionKeyManagerModule - * @param moduleConfig The configuration for the module - * @returns An instance of SessionKeyManagerModule - */ - private constructor(moduleConfig: BatchedSessionRouterModuleConfig) { - super(moduleConfig); - } - - /** - * Asynchronously creates and initializes an instance of SessionKeyManagerModule - * @param moduleConfig The configuration for the module - * @returns A Promise that resolves to an instance of SessionKeyManagerModule - */ - public static async create(moduleConfig: BatchedSessionRouterModuleConfig): Promise<BatchedSessionRouterModule> { - const instance = new BatchedSessionRouterModule(moduleConfig); - - if (moduleConfig.moduleAddress) { - instance.moduleAddress = moduleConfig.moduleAddress; - } else if (moduleConfig.version) { - const moduleAddr = BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; - if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`); - } - instance.moduleAddress = moduleAddr; - instance.version = moduleConfig.version as ModuleVersion; - } else { - instance.moduleAddress = DEFAULT_BATCHED_SESSION_ROUTER_MODULE; - // Note: in this case Version remains the default one - } - - instance.sessionManagerModuleAddress = moduleConfig.sessionManagerModuleAddress ?? DEFAULT_SESSION_KEY_MANAGER_MODULE; - - if (!moduleConfig.sessionKeyManagerModule) { - // generate sessionModule - const sessionModule = await SessionKeyManagerModule.create({ - moduleAddress: instance.sessionManagerModuleAddress, - smartAccountAddress: moduleConfig.smartAccountAddress, - storageType: moduleConfig.storageType, - }); - - instance.sessionKeyManagerModule = sessionModule; - } else { - instance.sessionKeyManagerModule = moduleConfig.sessionKeyManagerModule; - instance.sessionManagerModuleAddress = moduleConfig.sessionKeyManagerModule.getAddress(); - } - - return instance; - } - - /** - * Method to create session data for any module. The session data is used to create a leaf in the merkle tree - * @param leavesData The data of one or more leaves to be used to create session data - * @returns The session data - */ - createSessionData = async (leavesData: CreateSessionDataParams[]): Promise<CreateSessionDataResponse> => { - return this.sessionKeyManagerModule.createSessionData(leavesData); - }; - - /** - * This method is used to sign the user operation using the session signer - * @param userOp The user operation to be signed - * @param sessionParams Information about all the sessions to be used to sign the user operation which has a batch execution - * @returns The signature of the user operation - */ - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise<Hex> { - const sessionParams = params?.batchSessionParams; - if (!sessionParams || sessionParams.length === 0) { - throw new Error("Session parameters are not provided"); - } - - const sessionDataTupleArray = []; - - // signer must be the same for all the sessions - const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner, false); - - const signature = await sessionSigner.signMessage({ raw: toBytes(userOpHash) }); - - for (const sessionParam of sessionParams) { - if (!sessionParam.sessionSigner) { - throw new Error("Session signer is not provided."); - } - - const sessionDataTuple = []; - - let sessionSignerData; - - if (sessionParam.sessionID) { - sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ - sessionID: sessionParam.sessionID, - }); - } else if (sessionParam.sessionValidationModule) { - sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ - sessionValidationModule: sessionParam.sessionValidationModule, - sessionPublicKey: await sessionSigner.getAddress(), - }); - } else { - throw new Error("sessionID or sessionValidationModule should be provided."); - } - - sessionDataTuple.push(sessionSignerData.validUntil); - sessionDataTuple.push(sessionSignerData.validAfter); - sessionDataTuple.push(sessionSignerData.sessionValidationModule); - sessionDataTuple.push(sessionSignerData.sessionKeyData); - - const leafDataHex = concat([ - pad(toHex(sessionSignerData.validUntil), { size: 6 }), - pad(toHex(sessionSignerData.validAfter), { size: 6 }), - pad(sessionSignerData.sessionValidationModule, { size: 20 }), - sessionSignerData.sessionKeyData, - ]); - - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(keccak256(leafDataHex)); - - sessionDataTuple.push(proof); - sessionDataTuple.push(sessionParam.additionalSessionData ?? "0x"); - - sessionDataTupleArray.push(sessionDataTuple); - } - - // Generate the padded signature - - const paddedSignature = defaultAbiCoder.encode( - ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], - [this.getSessionKeyManagerAddress(), sessionDataTupleArray, signature], - ); - - return paddedSignature as Hex; - } - - /** - * Update the session data pending state to active - * @param param The search param to find the session data - * @param status The status to be updated - * @returns - */ - async updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise<void> { - this.sessionKeyManagerModule.sessionStorageClient.updateSessionStatus(param, status); - } - - /** - * @remarks This method is used to clear all the pending sessions - * @returns - */ - async clearPendingSessions(): Promise<void> { - this.sessionKeyManagerModule.sessionStorageClient.clearPendingSessions(); - } - - /** - * @returns SessionKeyManagerModule address - */ - getAddress(): Hex { - return this.moduleAddress; - } - - /** - * @returns SessionKeyManagerModule address - */ - getSessionKeyManagerAddress(): Hex { - return this.sessionManagerModuleAddress; - } - - /** - * @remarks This is the version of the module contract - */ - async getSigner(): Promise<SmartAccountSigner> { - throw new Error("Method not implemented."); - } - - /** - * @remarks This is the dummy signature for the module, used in buildUserOp for bundler estimation - * @returns Dummy signature - */ - async getDummySignature(params?: ModuleInfo): Promise<Hex> { - const sessionParams = params?.batchSessionParams; - if (!sessionParams || sessionParams.length === 0) { - throw new Error("Session parameters are not provided"); - } - - const sessionDataTupleArray = []; - - // if needed we could do mock signature over userOpHashAndModuleAddress - - // signer must be the same for all the sessions - const { signer: sessionSigner } = await convertSigner(sessionParams[0].sessionSigner, false); - - for (const sessionParam of sessionParams) { - if (!sessionParam.sessionSigner) { - throw new Error("Session signer is not provided."); - } - - const sessionDataTuple = []; - - let sessionSignerData; - - if (sessionParam.sessionID) { - sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ - sessionID: sessionParam.sessionID, - }); - } else if (sessionParam.sessionValidationModule) { - sessionSignerData = await this.sessionKeyManagerModule.sessionStorageClient.getSessionData({ - sessionValidationModule: sessionParam.sessionValidationModule, - sessionPublicKey: await sessionSigner.getAddress(), - }); - } else { - throw new Error("sessionID or sessionValidationModule should be provided."); - } - - sessionDataTuple.push(BigInt(sessionSignerData.validUntil)); - sessionDataTuple.push(BigInt(sessionSignerData.validAfter)); - sessionDataTuple.push(sessionSignerData.sessionValidationModule); - sessionDataTuple.push(sessionSignerData.sessionKeyData); - - const leafDataHex = concat([ - pad(toHex(sessionSignerData.validUntil), { size: 6 }), - pad(toHex(sessionSignerData.validAfter), { size: 6 }), - pad(sessionSignerData.sessionValidationModule, { size: 20 }), - sessionSignerData.sessionKeyData, - ]); - - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof(keccak256(leafDataHex)); - - sessionDataTuple.push(proof); - sessionDataTuple.push(sessionParam.additionalSessionData ?? "0x"); - - sessionDataTupleArray.push(sessionDataTuple); - } - - // Generate the padded signature - const paddedSignature = defaultAbiCoder.encode( - ["address", "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", "bytes"], - [this.getSessionKeyManagerAddress(), sessionDataTupleArray, this.mockEcdsaSessionKeySig], - ); - - const dummySig = encodeAbiParameters(parseAbiParameters("bytes, address"), [paddedSignature as Hex, this.getAddress()]); - return dummySig; - } - - /** - * @remarks Other modules may need additional attributes to build init data - */ - async getInitData(): Promise<Hex> { - throw new Error("Method not implemented."); - } - - /** - * @remarks This Module dont have knowledge of signer. So, this method is not implemented - */ - async signMessage(_message: Uint8Array | string): Promise<string> { - throw new Error("Method not implemented."); - } -} diff --git a/packages/modules/src/MultichainValidationModule.ts b/packages/modules/src/MultichainValidationModule.ts deleted file mode 100644 index 0846b0f83..000000000 --- a/packages/modules/src/MultichainValidationModule.ts +++ /dev/null @@ -1,163 +0,0 @@ -import { Hex, concat, encodeAbiParameters, encodeFunctionData, getAddress, keccak256, pad, parseAbi, parseAbiParameters, toBytes, toHex } from "viem"; -import { UserOperationStruct, SmartAccountSigner } from "@alchemy/aa-core"; -import { MerkleTree } from "merkletreejs"; -import { DEFAULT_MULTICHAIN_MODULE, MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants.js"; -import { - ModuleVersion, - MultiChainUserOpDto, - MultiChainValidationModuleConfig, - MultiChainValidationModuleConfigConstructorProps, -} from "./utils/Types.js"; -import { BaseValidationModule } from "./BaseValidationModule.js"; -import { getUserOpHash } from "./utils/Helper.js"; -import { convertSigner, Logger } from "@biconomy/common"; - -export class MultiChainValidationModule extends BaseValidationModule { - signer: SmartAccountSigner; - - moduleAddress!: Hex; - - version: ModuleVersion = "V1_0_0"; - - private constructor(moduleConfig: MultiChainValidationModuleConfigConstructorProps) { - super(moduleConfig); - this.signer = moduleConfig.signer; - } - - public static async create(moduleConfig: MultiChainValidationModuleConfig): Promise<MultiChainValidationModule> { - // Signer needs to be initialised here before defaultValidationModule is set - const { signer } = await convertSigner(moduleConfig.signer, false); - const configForConstructor: MultiChainValidationModuleConfigConstructorProps = { ...moduleConfig, signer }; - - // TODO: (Joe) stop doing things in a 'create' call after the instance has been created - const instance = new MultiChainValidationModule(configForConstructor); - if (moduleConfig.moduleAddress) { - instance.moduleAddress = moduleConfig.moduleAddress; - } else if (moduleConfig.version) { - const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; - if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`); - } - instance.moduleAddress = moduleAddr; - instance.version = moduleConfig.version as ModuleVersion; - } else { - instance.moduleAddress = DEFAULT_MULTICHAIN_MODULE; - // Note: in this case Version remains the default one - } - return instance; - } - - getAddress(): Hex { - return this.moduleAddress; - } - - async getSigner(): Promise<SmartAccountSigner> { - return Promise.resolve(this.signer); - } - - async getDummySignature(): Promise<Hex> { - const moduleAddress = getAddress(this.getAddress()); - const dynamicPart = moduleAddress.substring(2).padEnd(40, "0"); - return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000`; - } - - // Note: other modules may need additional attributes to build init data - async getInitData(): Promise<Hex> { - const ecdsaOwnerAddress = await this.signer.getAddress(); - const moduleRegistryParsedAbi = parseAbi(["function initForSmartAccount(address owner)"]); - const ecdsaOwnershipInitData = encodeFunctionData({ - abi: moduleRegistryParsedAbi, - functionName: "initForSmartAccount", - args: [ecdsaOwnerAddress], - }); - return ecdsaOwnershipInitData; - } - - async signUserOpHash(userOpHash: string): Promise<Hex> { - const sig = await this.signer.signMessage({ raw: toBytes(userOpHash) }); - return sig; - } - - /** - * Signs a message using the appropriate method based on the type of signer. - * - * @param {Uint8Array | string} message - The message to be signed. - * @returns {Promise<string>} A promise resolving to the signature or error message. - * @throws {Error} If the signer type is invalid or unsupported. - */ - async signMessage(_message: Uint8Array | string): Promise<string> { - const message = typeof _message === "string" ? _message : { raw: _message }; - let signature = await this.signer.signMessage(message); - - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); - } - return signature; - } - - async signUserOps(multiChainUserOps: MultiChainUserOpDto[]): Promise<UserOperationStruct[]> { - try { - const leaves: string[] = []; - - // Iterate over each userOp and process them - for (const multiChainOp of multiChainUserOps) { - const validUntil = multiChainOp.validUntil ?? 0; - const validAfter = multiChainOp.validAfter ?? 0; - const leaf = concat([ - pad(toHex(validUntil), { size: 6 }), - pad(toHex(validAfter), { size: 6 }), - pad(getUserOpHash(multiChainOp.userOp, this.entryPointAddress, multiChainOp.chainId), { size: 32 }), - ]); - - leaves.push(keccak256(leaf)); - } - - // Create a new Merkle tree using the leaves array - const merkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true }); - - let multichainSignature = await this.signer.signMessage({ raw: toBytes(merkleTree.getHexRoot()) }); - - const potentiallyIncorrectV = parseInt(multichainSignature.slice(-2), 16); - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - multichainSignature = multichainSignature.slice(0, -2) + correctV.toString(16); - } - - // Create an array to store updated userOps - const updatedUserOps: UserOperationStruct[] = []; - - for (let i = 0; i < leaves.length; i++) { - const merkleProof = merkleTree.getHexProof(leaves[i]); - - const validUntil = multiChainUserOps[i].validUntil ?? 0; - const validAfter = multiChainUserOps[i].validAfter ?? 0; - - // Create the moduleSignature - const moduleSignature = encodeAbiParameters(parseAbiParameters(["uint48, uint48, bytes32, bytes32[], bytes"]), [ - validUntil, - validAfter, - merkleTree.getHexRoot() as Hex, - merkleProof as Hex[], - multichainSignature as Hex, - ]); - - // Note: Because accountV2 does not directly call this method. hence we need to add validation module address to the signature - const signatureWithModuleAddress = encodeAbiParameters(parseAbiParameters(["bytes, address"]), [moduleSignature, this.getAddress()]); - - // Update userOp with the final signature - const updatedUserOp: UserOperationStruct = { - ...(multiChainUserOps[i].userOp as UserOperationStruct), - signature: signatureWithModuleAddress as `0x${string}`, - }; - - updatedUserOps.push(updatedUserOp); - } - return updatedUserOps; - } catch (error) { - Logger.error("Error in signing multi chain userops"); - throw new Error(JSON.stringify(error)); - } - } -} diff --git a/packages/modules/src/index.ts b/packages/modules/src/index.ts deleted file mode 100644 index ca954778b..000000000 --- a/packages/modules/src/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -export * from "./utils/Types.js"; -export * from "./utils/Constants.js"; -export * from "./interfaces/IValidationModule.js"; -export * from "./interfaces/ISessionValidationModule.js"; -export * from "./BaseValidationModule.js"; -export * from "./ECDSAOwnershipValidationModule.js"; -export * from "./MultichainValidationModule.js"; -export * from "./SessionKeyManagerModule.js"; -export * from "./BatchedSessionRouterModule.js"; -export * from "./session-validation-modules/ERC20SessionValidationModule.js"; - -import { - BatchedSessionRouterModule, - ECDSAOwnershipValidationModule, - MultiChainValidationModule, - SessionKeyManagerModule, - ERC20SessionValidationModule, -} from "./index.js"; - -export const createBatchedSessionRouterModule = BatchedSessionRouterModule.create; -export const createMultiChainValidationModule = MultiChainValidationModule.create; -export const createECDSAOwnershipValidationModule = ECDSAOwnershipValidationModule.create; -export const createSessionKeyManagerModule = SessionKeyManagerModule.create; -export const createERC20SessionValidationModule = ERC20SessionValidationModule.create; - -// export * from './PasskeyValidationModule' diff --git a/packages/modules/src/interfaces/IValidationModule.ts b/packages/modules/src/interfaces/IValidationModule.ts deleted file mode 100644 index ee3da28a9..000000000 --- a/packages/modules/src/interfaces/IValidationModule.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { SmartAccountSigner } from "@alchemy/aa-core"; -import { Hex } from "viem"; - -export interface IValidationModule { - getAddress(): Hex; - getInitData(): Promise<Hex>; - getSigner(): Promise<SmartAccountSigner>; - signUserOpHash(_userOpHash: string): Promise<Hex>; - signMessage(_message: string | Uint8Array): Promise<string>; - getDummySignature(): Promise<Hex>; -} diff --git a/packages/modules/src/session-storage/SessionLocalStorage.ts b/packages/modules/src/session-storage/SessionLocalStorage.ts deleted file mode 100644 index 97a1d6953..000000000 --- a/packages/modules/src/session-storage/SessionLocalStorage.ts +++ /dev/null @@ -1,179 +0,0 @@ -import { Hex, createWalletClient, http, toHex } from "viem"; -import { SmartAccountSigner, WalletClientSigner } from "@alchemy/aa-core"; -import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage.js"; -import { mainnet } from "viem/chains"; -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; -import { SignerData } from "../utils/Types.js"; - -export class SessionLocalStorage implements ISessionStorage { - private smartAccountAddress: string; - - constructor(smartAccountAddress: string) { - this.smartAccountAddress = smartAccountAddress.toLowerCase(); - } - - private validateSearchParam(param: SessionSearchParam): void { - if (param.sessionID) { - return; - } else if (!param.sessionID && param.sessionPublicKey && param.sessionValidationModule) { - return; - } else { - throw new Error("Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address."); - } - } - - private getSessionStore(): any { - // @ts-ignore: LocalStorage is not available in node - const data = localStorage.getItem(this.getStorageKey("sessions")); - return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] }; - } - - private getSignerStore(): any { - // @ts-ignore: LocalStorage is not available in node - const data = localStorage.getItem(this.getStorageKey("signers")); - return data ? JSON.parse(data) : {}; - } - - private getStorageKey(type: "sessions" | "signers"): string { - return `${this.smartAccountAddress}_${type}`; - } - - private toLowercaseAddress(address: string): string { - return address.toLowerCase(); - } - - async addSessionData(leaf: SessionLeafNode): Promise<void> { - const data = this.getSessionStore(); - leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule) as Hex; - leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey) as Hex; - data.leafNodes.push(leaf); - // @ts-ignore: LocalStorage is not available in node - localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); - } - - async getSessionData(param: SessionSearchParam): Promise<SessionLeafNode> { - this.validateSearchParam(param); - - const sessions = this.getSessionStore().leafNodes; - const session = sessions.find((s: SessionLeafNode) => { - if (param.sessionID) { - return s.sessionID === param.sessionID && (!param.status || s.status === param.status); - } else if (param.sessionPublicKey && param.sessionValidationModule) { - return ( - s.sessionPublicKey === this.toLowercaseAddress(param.sessionPublicKey) && - s.sessionValidationModule === this.toLowercaseAddress(param.sessionValidationModule) && - (!param.status || s.status === param.status) - ); - } else { - return undefined; - } - }); - - if (!session) { - throw new Error("Session not found."); - } - return session; - } - - async updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise<void> { - this.validateSearchParam(param); - - const data = this.getSessionStore(); - const session = data.leafNodes.find((s: SessionLeafNode) => { - if (param.sessionID) { - return s.sessionID === param.sessionID; - } else if (param.sessionPublicKey && param.sessionValidationModule) { - return ( - s.sessionPublicKey === this.toLowercaseAddress(param.sessionPublicKey) && - s.sessionValidationModule === this.toLowercaseAddress(param.sessionValidationModule) - ); - } else { - return undefined; - } - }); - - if (!session) { - throw new Error("Session not found."); - } - - session.status = status; - // @ts-ignore: LocalStorage is not available in node - localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); - } - - async clearPendingSessions(): Promise<void> { - const data = this.getSessionStore(); - data.leafNodes = data.leafNodes.filter((s: SessionLeafNode) => s.status !== "PENDING"); - // @ts-ignore: LocalStorage is not available in node - localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); - } - - async addSigner(signerData: SignerData): Promise<SmartAccountSigner> { - const signers = this.getSignerStore(); - let signer: SignerData; - if (!signerData) { - const pkey = generatePrivateKey(); - signer = { - pvKey: pkey, - pbKey: privateKeyToAccount(pkey).publicKey, - }; - } else { - signer = signerData; - } - const accountSigner = privateKeyToAccount(toHex(signer.pvKey)); - const client = createWalletClient({ - account: accountSigner, - chain: signerData.chainId, - transport: http(), - }); - const walletClientSigner = new WalletClientSigner( - client, - "json-rpc", // signerType - ); - signers[this.toLowercaseAddress(accountSigner.address)] = signerData; - // @ts-ignore: LocalStorage is not available in node - localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)); - return walletClientSigner; - } - - async getSignerByKey(sessionPublicKey: string): Promise<SmartAccountSigner> { - const signers = this.getSignerStore(); - const signerData = signers[this.toLowercaseAddress(sessionPublicKey)]; - if (!signerData) { - throw new Error("Signer not found."); - } - const account = privateKeyToAccount(signerData.privateKey); - const client = createWalletClient({ - account, - chain: mainnet, - transport: http(), - }); - const signer = new WalletClientSigner(client, "viem"); - return signer; - } - - async getSignerBySession(param: SessionSearchParam): Promise<SmartAccountSigner> { - const session = await this.getSessionData(param); - return this.getSignerByKey(session.sessionPublicKey); - } - - async getAllSessionData(param?: SessionSearchParam): Promise<SessionLeafNode[]> { - const sessions = this.getSessionStore().leafNodes; - if (!param || !param.status) { - return sessions; - } - return sessions.filter((s: SessionLeafNode) => s.status === param.status); - } - - async getMerkleRoot(): Promise<string> { - return this.getSessionStore().merkleRoot; - } - - setMerkleRoot(merkleRoot: string): Promise<void> { - const data = this.getSessionStore(); - data.merkleRoot = merkleRoot; - // @ts-ignore: LocalStorage is not available in node - localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)); - return Promise.resolve(); - } -} diff --git a/packages/modules/src/utils/Constants.ts b/packages/modules/src/utils/Constants.ts deleted file mode 100644 index 7a2a308fa..000000000 --- a/packages/modules/src/utils/Constants.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { ModuleVersion } from "./Types.js"; - -export const DEFAULT_MODULE_VERSION: ModuleVersion = "V1_0_0"; - -export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; -export const ENTRYPOINT_ADDRESSES = { - "0x27a4db290b89ae3373ce4313cbeae72112ae7da9": "V0_0_5", - "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789": "V0_0_6", -}; - -export const ENTRYPOINT_ADDRESSES_BY_VERSION = { - V0_0_5: "0x27a4db290b89ae3373ce4313cbeae72112ae7da9", - V0_0_6: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", -}; - -// Note: we could append these defaults with ADDRESS suffix -export const DEFAULT_ECDSA_OWNERSHIP_MODULE = "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e"; - -export const ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e", -}; - -export const DEFAULT_SESSION_KEY_MANAGER_MODULE = "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489"; - -export const SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: "0x000000456b395c4e107e0302553B90D1eF4a32e9", - V1_0_1: "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489", -}; - -export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = "0x00000D09967410f8C76752A104c9848b57ebba55"; - -export const BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: "0x00000D09967410f8C76752A104c9848b57ebba55", -}; - -export const DEFAULT_ERC20_MODULE = "0x000000D50C68705bd6897B2d17c7de32FB519fDA"; - -export const DEFAULT_MULTICHAIN_MODULE = "0x000000824dc138db84FD9109fc154bdad332Aa8E"; - -export const MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: "0x000000824dc138db84FD9109fc154bdad332Aa8E", -}; - -// similarly others here or in module / signer classes -// Mapping / Reverse mapping of version -> module address can be kept here - -export const ERC20_ABI = [ - "function transfer(address to, uint256 value) external returns (bool)", - "function transferFrom(address from, address to, uint256 value) external returns (bool)", - "function approve(address spender, uint256 value) external returns (bool)", - "function allowance(address owner, address spender) external view returns (uint256)", - "function balanceOf(address owner) external view returns (uint256)", -]; diff --git a/packages/modules/src/utils/Helper.ts b/packages/modules/src/utils/Helper.ts deleted file mode 100644 index b0b6fc43d..000000000 --- a/packages/modules/src/utils/Helper.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { UserOperationStruct } from "@alchemy/aa-core"; -import { Hex, encodeAbiParameters, keccak256, parseAbiParameters, concat, pad, toHex } from "viem"; - -export interface Rule { - offset: number; - condition: number; - referenceValue: `0x${string}`; -} - -export interface Permission { - destContract: `0x${string}`; - functionSelector: `0x${string}`; - valueLimit: bigint; - rules: Rule[]; -} - -function packUserOp(op: Partial<UserOperationStruct>, forSignature = true): string { - if (!op.initCode || !op.callData || !op.paymasterAndData) throw new Error("Missing userOp properties"); - if (forSignature) { - return encodeAbiParameters(parseAbiParameters("address, uint256, bytes32, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32"), [ - op.sender as Hex, - BigInt(op.nonce as Hex), - keccak256(op.initCode as Hex), - keccak256(op.callData as Hex), - BigInt(op.callGasLimit as Hex), - BigInt(op.verificationGasLimit as Hex), - BigInt(op.preVerificationGas as Hex), - BigInt(op.maxFeePerGas as Hex), - BigInt(op.maxPriorityFeePerGas as Hex), - keccak256(op.paymasterAndData as Hex), - ]); - } else { - // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) - return encodeAbiParameters(parseAbiParameters("address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes, bytes"), [ - op.sender as Hex, - BigInt(op.nonce as Hex), - op.initCode as Hex, - op.callData as Hex, - BigInt(op.callGasLimit as Hex), - BigInt(op.verificationGasLimit as Hex), - BigInt(op.preVerificationGas as Hex), - BigInt(op.maxFeePerGas as Hex), - BigInt(op.maxPriorityFeePerGas as Hex), - op.paymasterAndData as Hex, - op.signature as Hex, - ]); - } -} - -export const getUserOpHash = (userOp: Partial<UserOperationStruct>, entryPointAddress: Hex, chainId: number): Hex => { - const userOpHash = keccak256(packUserOp(userOp, true) as Hex); - const enc = encodeAbiParameters(parseAbiParameters("bytes32, address, uint256"), [userOpHash, entryPointAddress, BigInt(chainId)]); - return keccak256(enc); -}; - -export async function getABISVMSessionKeyData(sessionKey: `0x${string}` | Uint8Array, permission: Permission): Promise<`0x${string}` | Uint8Array> { - let sessionKeyData = concat([ - sessionKey, - permission.destContract, - permission.functionSelector, - pad(toHex(permission.valueLimit), { size: 16 }), - pad(toHex(permission.rules.length), { size: 2 }), // this can't be more 2**11 (see below), so uint16 (2 bytes) is enough - ]) as `0x${string}`; - - for (let i = 0; i < permission.rules.length; i++) { - sessionKeyData = concat([ - sessionKeyData, - pad(toHex(permission.rules[i].offset), { size: 2 }), // offset is uint16, so there can't be more than 2**16/32 args = 2**11 - pad(toHex(permission.rules[i].condition), { size: 1 }), // uint8 - permission.rules[i].referenceValue, - ]); - } - return sessionKeyData; -} diff --git a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts b/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts deleted file mode 100644 index 53b1c4027..000000000 --- a/packages/modules/tests/batchedSessionValidationModule.e2e.spec.ts +++ /dev/null @@ -1,217 +0,0 @@ -import { - DEFAULT_BATCHED_SESSION_ROUTER_MODULE, - DEFAULT_SESSION_KEY_MANAGER_MODULE, - createBatchedSessionRouterModule, - createSessionKeyManagerModule, -} from "@biconomy/modules"; -import { SessionFileStorage } from "./utils/customSession"; -import { WalletClientSigner, createSmartAccountClient } from "../../account/src/index"; -import { encodeAbiParameters, encodeFunctionData, parseAbi, parseUnits } from "viem"; -import { TestData } from "../../../tests"; -import { checkBalance } from "../../../tests/utils"; -import { PaymasterMode } from "@biconomy/paymaster"; -import { Logger } from "@biconomy/common"; - -describe("Batched Session Router Tests", () => { - let mumbai: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-e2e-tests - [mumbai] = testDataPerChain; - }); - - // TODO(Gabi): Fix Batched Session Router Module tests - it.skip("Should send a user op using Batched Session Validation Module", async () => { - let sessionSigner: WalletClientSigner; - - const { - whale: { - account: { address: sessionKeyEOA }, - privateKey: pvKey, - viemWallet, - }, - minnow: { publicAddress: recipient }, - publicClient, - bundlerUrl, - biconomyPaymasterApiKey, - chainId, - viemChain, - } = mumbai; - - // Create smart account - let smartAccount = await createSmartAccountClient({ - signer: viemWallet, - bundlerUrl, - biconomyPaymasterApiKey, - index: 3, // Increasing index to not conflict with other test cases and use a new smart account - }); - - const smartAccountAddress = await smartAccount.getAddress(); - - const sessionFileStorage: SessionFileStorage = new SessionFileStorage(smartAccountAddress); - - try { - sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); - } catch (error) { - sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey, chainId: viemChain }); - } - - expect(sessionSigner).toBeTruthy(); - - const smartAccountAddress = await smartAccount.getAddress(); - Logger.log("Smart Account Address: ", smartAccountAddress); - - // First we need to check if smart account is deployed - // if not deployed, send an empty transaction to deploy it - const isDeployed = await smartAccount.isAccountDeployed(); - - if (!isDeployed) { - const { wait } = await smartAccount.deploy({ paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); - const { success } = await wait(); - expect(success).toBe("true"); - } - - // Create session module - const sessionModule = await createSessionKeyManagerModule({ - moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, - smartAccountAddress, - sessionStorageClient: sessionFileStorage, - }); - - // Create batched session module - const batchedSessionModule = await createBatchedSessionRouterModule({ - moduleAddress: DEFAULT_BATCHED_SESSION_ROUTER_MODULE, - smartAccountAddress, - sessionKeyManagerModule: sessionModule, - }); - - // Set enabled call on session, only allows calling USDC contract transfer with <= 10 USDC - const sessionKeyData = encodeAbiParameters( - [{ type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }], - [ - sessionKeyEOA, - "0xdA5289fCAAF71d52a80A254da614a192b693e977", // erc20 token address - recipient, // receiver address - parseUnits("10", 6), - ], - ); - - // only requires that the caller is the session key - // can call anything using the mock session module - const sessionKeyData2 = encodeAbiParameters([{ type: "address" }], [sessionKeyEOA]); - - const erc20ModuleAddr = "0x000000D50C68705bd6897B2d17c7de32FB519fDA"; - const mockSessionModuleAddr = "0x7Ba4a7338D7A90dfA465cF975Cc6691812C3772E"; - - const sessionTxData = await batchedSessionModule.createSessionData([ - { - validUntil: 0, - validAfter: 0, - sessionValidationModule: erc20ModuleAddr, - sessionPublicKey: sessionKeyEOA, - sessionKeyData: sessionKeyData, - }, - { - validUntil: 0, - validAfter: 0, - sessionValidationModule: mockSessionModuleAddr, - sessionPublicKey: sessionKeyEOA, - sessionKeyData: sessionKeyData2, - }, - ]); - - const setSessionAllowedTrx = { - to: DEFAULT_SESSION_KEY_MANAGER_MODULE, - data: sessionTxData.data, - }; - - const txArray: any = []; - - // Check if session module is enabled - const isEnabled = await smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); - if (!isEnabled) { - const enableModuleTrx = await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); - txArray.push(enableModuleTrx); - } - - // Check if batched session module is enabled - const isBRMenabled = await smartAccount.isModuleEnabled(DEFAULT_BATCHED_SESSION_ROUTER_MODULE); - if (!isBRMenabled) { - // -----> enableModule batched session router module - const tx2 = await smartAccount.getEnableModuleData(DEFAULT_BATCHED_SESSION_ROUTER_MODULE); - txArray.push(tx2); - } - - txArray.push(setSessionAllowedTrx); - - const userOpResponse1 = await smartAccount.sendTransaction(txArray, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); // this user op will enable the modules and setup session allowed calls - const transactionDetails = await userOpResponse1.wait(); - expect(transactionDetails.success).toBe("true"); - Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash); - - const usdcBalance = await checkBalance(publicClient, smartAccountAddress, "0xdA5289fCAAF71d52a80A254da614a192b693e977"); - expect(usdcBalance).toBeGreaterThan(0); - - smartAccount = smartAccount.setActiveValidationModule(batchedSessionModule); - - // WARNING* If the smart account does not have enough USDC, user op execution will FAIL - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function transfer(address _to, uint256 _value)"]), - functionName: "transfer", - args: [recipient, parseUnits("0.001", 6)], - }); - - const encodedCall2 = encodeFunctionData({ - abi: parseAbi(["function transfer(address _to, uint256 _value)"]), - functionName: "transfer", - args: ["0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549", parseUnits("0.001", 6)], - }); - - const transferTx = { - to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", - data: encodedCall, - }; - - const transferTx2 = { - to: "0xdA5289fCAAF71d52a80A254da614a192b693e977", - data: encodedCall2, - }; - - const activeModule = smartAccount.activeValidationModule; - expect(activeModule).toEqual(batchedSessionModule); - - const maticBalanceBefore = await checkBalance(publicClient, smartAccountAddress); - - // failing with dummyTx because of invalid sessionKeyData - const userOpResponse2 = await smartAccount.sendTransaction([transferTx, transferTx2], { - params: { - batchSessionParams: [ - { - sessionSigner: sessionSigner, - sessionValidationModule: erc20ModuleAddr, - }, - { - sessionSigner: sessionSigner, - sessionValidationModule: mockSessionModuleAddr, - }, - ], - }, - paymasterServiceData: { - mode: PaymasterMode.SPONSORED, - }, - }); - - const receipt = await userOpResponse2.wait(); - console.log(receipt.userOpHash, "Batched user op hash"); - expect(receipt.success).toBe("true"); - - expect(userOpResponse2.userOpHash).toBeTruthy(); - expect(userOpResponse2.userOpHash).not.toBeNull(); - - const maticBalanceAfter = await checkBalance(publicClient, smartAccountAddress); - - expect(maticBalanceAfter).toEqual(maticBalanceBefore); - - Logger.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); - }, 60000); -}); diff --git a/packages/modules/tests/ecdsaValidationModule.e2e.spec.ts b/packages/modules/tests/ecdsaValidationModule.e2e.spec.ts deleted file mode 100644 index 84b3f627e..000000000 --- a/packages/modules/tests/ecdsaValidationModule.e2e.spec.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { PaymasterMode } from "@biconomy/paymaster"; -import { TestData } from "../../../tests"; -import { createSmartAccountClient } from "../../account/src/index"; -import { Hex, encodeFunctionData, parseAbi } from "viem"; -import { DEFAULT_MULTICHAIN_MODULE, createECDSAOwnershipValidationModule } from "@biconomy/modules"; - -describe("Account with ECDSAOwnershipValidationModule Module Tests", () => { - let mumbai: TestData; - let baseSepolia: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-e2e-tests - [mumbai, baseSepolia] = testDataPerChain; - }); - - it("should create a ECDSAOwnershipValidationModule with signer", async () => { - const { - bundlerUrl, - whale: { viemWallet: signer }, - } = mumbai; - - const defaultValidationModule = await createECDSAOwnershipValidationModule({ signer }); - // Should not require a signer or chainId - const smartAccount = await createSmartAccountClient({ - bundlerUrl, - defaultValidationModule, - signer, - }); - const address = await smartAccount.getAccountAddress(); - expect(address).toBeTruthy(); - expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); - }); - - it("should create a ECDSAOwnershipValidationModule without signer", async () => { - const { - bundlerUrl, - whale: { viemWallet: signer }, - } = mumbai; - - const defaultValidationModule = await createECDSAOwnershipValidationModule({ signer }); - // Should not require a signer or chainId - const smartAccount = await createSmartAccountClient({ - bundlerUrl, - defaultValidationModule, - }); - const address = await smartAccount.getAccountAddress(); - expect(address).toBeTruthy(); - expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); - }); - - it("should create a ECDSAOwnershipValidationModule by default, without explicitly setting it on the smart account", async () => { - const { - bundlerUrl, - whale: { viemWallet: signer }, - } = mumbai; - const defaultValidationModule = await createECDSAOwnershipValidationModule({ signer }); - const smartAccount = await createSmartAccountClient({ bundlerUrl, signer }); - const address = await smartAccount.getAccountAddress(); - expect(address).toBeTruthy(); - const smartAccountValidationModuleAddress = await smartAccount.activeValidationModule.getAddress(); - expect(smartAccountValidationModuleAddress).toEqual(defaultValidationModule.moduleAddress); - }); -}); diff --git a/packages/modules/tests/modules.e2e.spec.ts b/packages/modules/tests/modules.e2e.spec.ts deleted file mode 100644 index 9de6d50ee..000000000 --- a/packages/modules/tests/modules.e2e.spec.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { TestData } from "../../../tests"; -import { PaymasterMode, Transaction, createSmartAccountClient } from "@biconomy/account"; -import { DEFAULT_BATCHED_SESSION_ROUTER_MODULE, DEFAULT_ERC20_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "../src"; - -describe("Account Tests", () => { - let mumbai: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-unit-tests - [mumbai] = testDataPerChain; - }); - - it("should enable batched module", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - biconomyPaymasterApiKey, - } = mumbai; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - biconomyPaymasterApiKey, - }); - - const isBRMenabled = await smartAccount.isModuleEnabled(DEFAULT_BATCHED_SESSION_ROUTER_MODULE); - - if (!isBRMenabled) { - const tx = await smartAccount.getEnableModuleData(DEFAULT_BATCHED_SESSION_ROUTER_MODULE); - const { wait } = await smartAccount.sendTransaction(tx, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - }); - const { success } = await wait(); - expect(success).toBe("true"); - } - }, 50000); - - it("should enable session module", async () => { - const { - whale: { viemWallet: signer }, - bundlerUrl, - biconomyPaymasterApiKey, - } = mumbai; - - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - biconomyPaymasterApiKey, - }); - - const isSessionKeyEnabled = await smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); - - if (!isSessionKeyEnabled) { - const tx = await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); - const { wait } = await smartAccount.sendTransaction(tx, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - }); - const { success } = await wait(); - expect(success).toBe("true"); - } - }, 50000); -}); diff --git a/packages/modules/tests/modules.spec.ts b/packages/modules/tests/modules.spec.ts deleted file mode 100644 index a799a6760..000000000 --- a/packages/modules/tests/modules.spec.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { TestData } from "../../../tests"; -import { createSmartAccountClient } from "@biconomy/account"; -import { createECDSAOwnershipValidationModule, createMultiChainValidationModule } from "../src"; - -describe("Account Tests", () => { - let ganache: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-unit-tests - [ganache] = testDataPerChain; - }); - - it("should create a MultiChainValidationModule from an ethers signer using convertSigner", async () => { - const { - bundlerUrl, - whale: { ethersSigner: signer }, - viemChain, - } = ganache; - - const defaultValidationModule = await createMultiChainValidationModule({ signer }); - // Should not require a signer or chainId - const smartAccount = await createSmartAccountClient({ bundlerUrl, defaultValidationModule, rpcUrl: viemChain.rpcUrls.default.http[0], }); - const address = await smartAccount.getAccountAddress(); - expect(address).toBeTruthy(); - // expect the relevant module to be set - expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); - }, 50000); - - it("should create a ECDSAOwnershipValidationModule from a viem signer using convertSigner", async () => { - const { - bundlerUrl, - whale: { viemWallet: signer }, - viemChain, - } = ganache; - - const defaultValidationModule = await createECDSAOwnershipValidationModule({ signer }); - // Should not require a signer or chainId - const smartAccount = await createSmartAccountClient({ - bundlerUrl, - defaultValidationModule, - rpcUrl: viemChain.rpcUrls.default.http[0], - }); - const address = await smartAccount.getAccountAddress(); - expect(address).toBeTruthy(); - // expect the relevant module to be set - expect(smartAccount.activeValidationModule).toEqual(defaultValidationModule); - }, 50000); -}); diff --git a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts b/packages/modules/tests/multiChainValidationModule.e2e.spec.ts deleted file mode 100644 index 996be004c..000000000 --- a/packages/modules/tests/multiChainValidationModule.e2e.spec.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { PaymasterMode } from "@biconomy/paymaster"; -import { TestData } from "../../../tests"; -import { createSmartAccountClient } from "../../account/src/index"; -import { Hex, encodeFunctionData, parseAbi } from "viem"; -import { DEFAULT_MULTICHAIN_MODULE, MultiChainValidationModule } from "@biconomy/modules"; -import { Logger } from "@biconomy/common"; - -describe("MultiChainValidation Module Tests", () => { - let mumbai: TestData; - let baseSepolia: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-e2e-tests - [mumbai, baseSepolia] = testDataPerChain; - }); - - it("Should mint an NFT gasless on baseSepolia and mumbai", async () => { - const { - whale: { alchemyWalletClientSigner: signerMumbai, publicAddress: recipientForBothChains }, - paymasterUrl: biconomyPaymasterApiKeyMumbai, - bundlerUrl: bundlerUrlMumbai, - chainId: chainIdMumbai, - } = mumbai; - - const { - whale: { alchemyWalletClientSigner: signerBase }, - paymasterUrl: biconomyPaymasterApiKeyBase, - bundlerUrl: bundlerUrlBase, - chainId: chainIdBase, - } = baseSepolia; - - const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e"; - - const multiChainModule = await MultiChainValidationModule.create({ - signer: signerMumbai, - moduleAddress: DEFAULT_MULTICHAIN_MODULE, - }); - - const [polygonAccount, baseAccount] = await Promise.all([ - createSmartAccountClient({ - chainId: chainIdMumbai, - signer: signerMumbai, - bundlerUrl: bundlerUrlMumbai, - defaultValidationModule: multiChainModule, - activeValidationModule: multiChainModule, - paymasterUrl: biconomyPaymasterApiKeyMumbai, - }), - createSmartAccountClient({ - chainId: chainIdBase, - signer: signerBase, - bundlerUrl: bundlerUrlBase, - defaultValidationModule: multiChainModule, - activeValidationModule: multiChainModule, - paymasterUrl: biconomyPaymasterApiKeyBase, - }), - ]); - - // Check if the smart account has been deployed - const [isPolygonDeployed, isBaseDeployed] = await Promise.all([polygonAccount.isAccountDeployed(), baseAccount.isAccountDeployed()]); - if (!isPolygonDeployed) { - const { wait } = await polygonAccount.deploy({ paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); - const { success } = await wait(); - expect(success).toBe("true"); - } - if (!isBaseDeployed) { - const { wait } = await baseAccount.deploy({ paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); - const { success } = await wait(); - expect(success).toBe("true"); - } - - const moduleEnabled1 = await polygonAccount.isModuleEnabled(DEFAULT_MULTICHAIN_MODULE); - const moduleActive1 = polygonAccount.activeValidationModule; - expect(moduleEnabled1).toBeTruthy(); - expect(moduleActive1.getAddress()).toBe(DEFAULT_MULTICHAIN_MODULE); - - const moduleEnabled2 = await baseAccount.isModuleEnabled(DEFAULT_MULTICHAIN_MODULE); - const moduleActive2 = polygonAccount.activeValidationModule; - expect(moduleEnabled2).toBeTruthy(); - expect(moduleActive2.getAddress()).toBe(DEFAULT_MULTICHAIN_MODULE); - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address owner) view returns (uint balance)"]), - functionName: "safeMint", - args: [recipientForBothChains], - }); - - const transaction = { - to: nftAddress, - data: encodedCall, - }; - - const [partialUserOp1, partialUserOp2] = await Promise.all([ - baseAccount.buildUserOp([transaction], { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }), - polygonAccount.buildUserOp([transaction], { paymasterServiceData: { mode: PaymasterMode.SPONSORED } }), - ]); - - expect(partialUserOp1.paymasterAndData).not.toBe("0x"); - expect(partialUserOp2.paymasterAndData).not.toBe("0x"); - - // Sign the user ops using multiChainModule - const returnedOps = await multiChainModule.signUserOps([ - { userOp: partialUserOp1, chainId: chainIdBase }, - { userOp: partialUserOp2, chainId: chainIdMumbai }, - ]); - - // Send the signed user ops on both chains - const userOpResponse1 = await baseAccount.sendSignedUserOp(returnedOps[0] as any); - const userOpResponse2 = await polygonAccount.sendSignedUserOp(returnedOps[1] as any); - - Logger.log(userOpResponse1.userOpHash, "MULTICHAIN BASE USER OP HASH"); - Logger.log(userOpResponse2.userOpHash, "MULTICHAIN POLYGON USER OP HASH"); - - expect(userOpResponse1.userOpHash).toBeTruthy(); - expect(userOpResponse2.userOpHash).toBeTruthy(); - - const { success: success1 } = await userOpResponse1.wait(); - const { success: success2 } = await userOpResponse2.wait(); - - expect(success1).toBe("true"); - expect(success2).toBe("true"); - }, 50000); -}); diff --git a/packages/modules/tests/sessionValidationModule.e2e.spec.ts b/packages/modules/tests/sessionValidationModule.e2e.spec.ts deleted file mode 100644 index 286cfb9a7..000000000 --- a/packages/modules/tests/sessionValidationModule.e2e.spec.ts +++ /dev/null @@ -1,166 +0,0 @@ -import { DEFAULT_SESSION_KEY_MANAGER_MODULE, createSessionKeyManagerModule } from "@biconomy/modules"; -import { SessionFileStorage } from "./utils/customSession"; -import { WalletClientSigner, createSmartAccountClient } from "../../account/src/index"; -import { Hex, encodeAbiParameters, encodeFunctionData, pad, parseAbi, parseEther, parseUnits, slice, toFunctionSelector } from "viem"; -import { TestData } from "../../../tests"; -import { checkBalance } from "../../../tests/utils"; -import { PaymasterMode } from "@biconomy/paymaster"; -import { Logger } from "@biconomy/common"; -import { getABISVMSessionKeyData } from "../src/utils/Helper"; -import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; - -describe("Session Validation Module Tests", () => { - let mumbai: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-e2e-tests - [mumbai] = testDataPerChain; - }); - - // TODO(Gabi): Fix Session Validation Module tests - it.skip("Should send a user op using Session Validation Module", async () => { - let sessionSigner: WalletClientSigner; - const { - whale: { - account: { address: sessionKeyEOA }, - privateKey: pvKey, - viemWallet, - }, - viemChain, - minnow: { publicAddress: recipient }, - publicClient, - chainId, - bundlerUrl, - biconomyPaymasterApiKey, - } = mumbai; - - // Create smart account - let smartAccount = await createSmartAccountClient({ - chainId, - signer: viemWallet, - bundlerUrl, - biconomyPaymasterApiKey, - index: 1, // Increasing index to not conflict with other test cases and use a new smart account - }); - - const accountAddress = await smartAccount.getAccountAddress(); - const sessionFileStorage: SessionFileStorage = new SessionFileStorage(accountAddress); - - // First we need to check if smart account is deployed - // if not deployed, send an empty transaction to deploy it - const isDeployed = await smartAccount.isAccountDeployed(); - - Logger.log("session", { isDeployed }); - - if (!isDeployed) { - const { wait } = await smartAccount.deploy({ paymasterServiceData: { mode: PaymasterMode.SPONSORED } }); - const { success } = await wait(); - expect(success).toBe("true"); - } - - try { - sessionSigner = await sessionFileStorage.getSignerByKey(sessionKeyEOA); - } catch (error) { - sessionSigner = await sessionFileStorage.addSigner({ pbKey: sessionKeyEOA, pvKey, chainId: viemChain }); - } - expect(sessionSigner).toBeTruthy(); - - // Create session module - const sessionModule = await createSessionKeyManagerModule({ - moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, - smartAccountAddress: await smartAccount.getAddress(), - sessionStorageClient: sessionFileStorage, - }); - - const functionSelector = slice(toFunctionSelector("safeMint(address)"), 0, 4); - // Set enabled call on session - const sessionKeyData = await getABISVMSessionKeyData(sessionKeyEOA as Hex, { - destContract: "0xdd526eba63ef200ed95f0f0fb8993fe3e20a23d0" as Hex, // nft address - functionSelector: functionSelector, - valueLimit: parseEther("0"), - rules: [ - { - offset: 0, // offset 0 means we are checking first parameter of safeMint (recipient address) - condition: 0, // 0 = Condition.EQUAL - referenceValue: pad("0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549", { size: 32 }), // recipient address - }, - ], - }); - - const abiSvmAddress = "0x000006bC2eCdAe38113929293d241Cf252D91861"; - - const sessionTxData = await sessionModule.createSessionData([ - { - validUntil: 0, - validAfter: 0, - sessionValidationModule: abiSvmAddress, - sessionPublicKey: sessionKeyEOA as Hex, - sessionKeyData: sessionKeyData as Hex, - }, - ]); - - const setSessionAllowedTrx = { - to: DEFAULT_SESSION_KEY_MANAGER_MODULE, - data: sessionTxData.data, - }; - - const txArray: any = []; - - // Check if module is enabled - const isEnabled = await smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE); - - if (!isEnabled) { - const enableModuleTrx = await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE); - txArray.push(enableModuleTrx); - txArray.push(setSessionAllowedTrx); - } else { - Logger.log("MODULE ALREADY ENABLED"); - txArray.push(setSessionAllowedTrx); - } - - const userOp = await smartAccount.buildUserOp(txArray, { - paymasterServiceData: { - mode: PaymasterMode.SPONSORED, - }, - }); - - const userOpResponse1 = await smartAccount.sendUserOp(userOp); - const transactionDetails = await userOpResponse1.wait(); - expect(transactionDetails.success).toBe("true"); - Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash); - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: ["0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549"], - }); - - const nftMintTx = { - to: "0xdd526eba63ef200ed95f0f0fb8993fe3e20a23d0", - data: encodedCall, - }; - - smartAccount = smartAccount.setActiveValidationModule(sessionModule); - - const maticBalanceBefore = await checkBalance(publicClient, await smartAccount.getAccountAddress()); - - const userOpResponse2 = await smartAccount.sendTransaction(nftMintTx, { - params: { - sessionSigner: sessionSigner, - sessionValidationModule: abiSvmAddress, - }, - paymasterServiceData: { - mode: PaymasterMode.SPONSORED, - }, - }); - - expect(userOpResponse2.userOpHash).toBeTruthy(); - expect(userOpResponse2.userOpHash).not.toBeNull(); - - const maticBalanceAfter = await checkBalance(publicClient, await smartAccount.getAccountAddress()); - - expect(maticBalanceAfter).toEqual(maticBalanceBefore); - - Logger.log(`Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai`); - }, 60000); -}); diff --git a/packages/modules/tests/utils/customSession.ts b/packages/modules/tests/utils/customSession.ts deleted file mode 100644 index 1326c4871..000000000 --- a/packages/modules/tests/utils/customSession.ts +++ /dev/null @@ -1,230 +0,0 @@ -import * as fs from "fs"; -import { SmartAccountSigner, WalletClientSigner, getChain } from "@alchemy/aa-core"; -import { SignerData } from "@biconomy/modules/src"; -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; -import { Hex, createWalletClient, http } from "viem"; -import { polygonMumbai } from "viem/chains"; -import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "@biconomy/modules/src/interfaces/ISessionStorage.js"; -import { Logger } from "@biconomy/common"; - -export class SessionFileStorage implements ISessionStorage { - private smartAccountAddress: string; - - constructor(smartAccountAddress: string) { - this.smartAccountAddress = smartAccountAddress.toLowerCase(); - } - - // This method reads data from the file and returns it in the JSON format - private async readDataFromFile(type: "sessions" | "signers"): Promise<any> { - return new Promise((resolve) => { - fs.readFile(this.getStorageFilePath(type), "utf8", (err, data) => { - if (err) { - // Handle errors appropriately - resolve(undefined); - } else { - if (!data) { - resolve(null); - } else { - resolve(JSON.parse(data)); - } - // resolve(JSON.parse(data)); - } - }); - }); - } - - private getStorageFilePath(type: "sessions" | "signers"): string { - return `./packages/modules/tests/utils/sessionStorageData/${this.smartAccountAddress}_${type}.json`; - } - - private async writeDataToFile(data: any, type: "sessions" | "signers"): Promise<void> { - return new Promise((resolve, reject) => { - const filePath = this.getStorageFilePath(type); - fs.writeFile(filePath, JSON.stringify(data), "utf8", (err) => { - if (err) { - // Handle errors appropriately - reject(err); - } else { - resolve(); - } - }); - }); - } - - private validateSearchParam(param: SessionSearchParam): void { - if (param.sessionID) { - return; - } else if (!param.sessionID && param.sessionPublicKey && param.sessionValidationModule) { - return; - } else { - throw new Error("Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address."); - } - } - - // Session store is in the form of mekrleRoot and leafnodes, each object will have a root and an array of leafNodes. - private async getSessionStore(): Promise<any> { - // eslint-disable-next-line no-useless-catch - try { - const data = await this.readDataFromFile("sessions"); - return data || { merkleRoot: "", leafNodes: [] }; - } catch (error) { - // Handle errors appropriately - throw error; - } - } - - private async getSignerStore(): Promise<any> { - // eslint-disable-next-line no-useless-catch - try { - const data = await this.readDataFromFile("signers"); - return data || {}; - } catch (error) { - // Handle errors appropriately - throw error; - } - } - - private getStorageKey(type: "sessions" | "signers"): string { - return `${this.smartAccountAddress}_${type}`; - } - - private toLowercaseAddress(address: string): Hex { - return address.toLowerCase() as Hex; - } - - async getSessionData(param: SessionSearchParam): Promise<SessionLeafNode> { - const sessions = (await this.getSessionStore()).leafNodes; - const session = sessions.find((s: SessionLeafNode) => { - if (param.sessionID) { - return s.sessionID === param.sessionID && (!param.status || s.status === param.status); - } else if (param.sessionPublicKey && param.sessionValidationModule) { - return ( - s.sessionPublicKey === this.toLowercaseAddress(param.sessionPublicKey) && - s.sessionValidationModule === this.toLowercaseAddress(param.sessionValidationModule) && - (!param.status || s.status === param.status) - ); - } else { - return undefined; - } - }); - - if (!session) { - throw new Error("Session not found."); - } - return session; - } - - async addSessionData(leaf: SessionLeafNode): Promise<void> { - Logger.log("Add session Data", leaf); - const data = await this.getSessionStore(); - leaf.sessionValidationModule = this.toLowercaseAddress(leaf.sessionValidationModule); - leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey); - data.leafNodes.push(leaf); - await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type - } - - async updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise<void> { - this.validateSearchParam(param); - - const data = await this.getSessionStore(); - const session = data.leafNodes.find((s: SessionLeafNode) => { - if (param.sessionID) { - return s.sessionID === param.sessionID; - } else if (param.sessionPublicKey && param.sessionValidationModule) { - return ( - s.sessionPublicKey === this.toLowercaseAddress(param.sessionPublicKey) && - s.sessionValidationModule === this.toLowercaseAddress(param.sessionValidationModule) - ); - } else { - return undefined; - } - }); - - if (!session) { - throw new Error("Session not found."); - } - - session.status = status; - await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type - } - - async clearPendingSessions(): Promise<void> { - const data = await this.getSessionStore(); - data.leafNodes = data.leafNodes.filter((s: SessionLeafNode) => s.status !== "PENDING"); - await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type - } - - async addSigner(signerData: SignerData): Promise<WalletClientSigner> { - const signers = await this.getSignerStore(); - let signer: SignerData; - if (!signerData) { - const pkey = generatePrivateKey(); - signer = { - pvKey: pkey, - pbKey: privateKeyToAccount(pkey).publicKey, - }; - } else { - signer = signerData; - } - const accountSigner = privateKeyToAccount(signer.pvKey); - const viemChain = getChain(signerData?.chainId?.id || 1); - const client = createWalletClient({ - account: accountSigner, - chain: signerData.chainId, - transport: http(viemChain.rpcUrls.default.http[0]), - }); - const walletClientSigner: SmartAccountSigner = new WalletClientSigner( - client, - "json-rpc", // signerType - ); - signers[this.toLowercaseAddress(accountSigner.address)] = { - pvKey: signer.pvKey, - pbKey: signer.pbKey, - }; - await this.writeDataToFile(signers, "signers"); // Use 'signers' as the type - return walletClientSigner; - } - - async getSignerByKey(sessionPublicKey: string): Promise<WalletClientSigner> { - const signers = await this.getSignerStore(); - Logger.log("Got signers", signers); - - const signerData: SignerData = signers[this.toLowercaseAddress(sessionPublicKey)]; - if (!signerData) { - throw new Error("Signer not found."); - } - Logger.log(signerData.pvKey, "PVKEY"); - - const signer = privateKeyToAccount(signerData.pvKey); - const walletClient = createWalletClient({ - account: signer, - transport: http(polygonMumbai.rpcUrls.default.http[0]), - }); - return new WalletClientSigner(walletClient, "json-rpc"); - } - - async getSignerBySession(param: SessionSearchParam): Promise<WalletClientSigner> { - const session = await this.getSessionData(param); - Logger.log("got session", session); - const walletClientSinger = await this.getSignerByKey(session.sessionPublicKey); - return walletClientSinger; - } - - async getAllSessionData(param?: SessionSearchParam): Promise<SessionLeafNode[]> { - const sessions = (await this.getSessionStore()).leafNodes; - if (!param || !param.status) { - return sessions; - } - return sessions.filter((s: SessionLeafNode) => s.status === param.status); - } - - async getMerkleRoot(): Promise<string> { - return (await this.getSessionStore()).merkleRoot; - } - - async setMerkleRoot(merkleRoot: string): Promise<void> { - const data = await this.getSessionStore(); - data.merkleRoot = merkleRoot; - await this.writeDataToFile(data, "sessions"); // Use 'sessions' as the type - } -} diff --git a/packages/modules/tests/utils/sessionStorageData/.gitkeep b/packages/modules/tests/utils/sessionStorageData/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/modules/tsconfig.build.json b/packages/modules/tsconfig.build.json deleted file mode 100644 index 4ac8b8026..000000000 --- a/packages/modules/tsconfig.build.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "Build", - "compilerOptions": { - "lib": ["es2022", "dom"], - "target": "es2021", - "types": ["node"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "verbatimModuleSyntax": false, - "useDefineForClassFields": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "useUnknownInCatchVariables": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "declaration": true, - "inlineSources": true, - "noEmit": false, - "sourceMap": true - }, - "exclude": ["**/*/node_modules", "**/*/tests", "tests"], - "include": ["src"] -} \ No newline at end of file diff --git a/packages/modules/tsconfig.json b/packages/modules/tsconfig.json deleted file mode 100644 index adc19ded0..000000000 --- a/packages/modules/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true, - "lib": ["es2020"], - "types": ["node"], - }, - "include": ["src", "src/**/*.json"] -} diff --git a/packages/particle-auth/.esbuild.js b/packages/particle-auth/.esbuild.js deleted file mode 100644 index ca355e346..000000000 --- a/packages/particle-auth/.esbuild.js +++ /dev/null @@ -1,58 +0,0 @@ -const esbuildPluginTsc = require("esbuild-plugin-tsc"); -const esbuild = require("esbuild"); -const { dependencies, peerDependencies = {} } = require("./package.json"); -const { Generator } = require("npm-dts"); - -const COMMON_SETTINGS = { - entryPoints: ["src/index.ts"], - minify: true, - bundle: true, - plugins: [esbuildPluginTsc({ force: true })], -}; - -const ESM_SETTINGS = { - ...COMMON_SETTINGS, - sourcemap: true, - outfile: "dist/esm/index.js", - platform: "browser", - target: "esnext", - format: "esm", - mainFields: ["browser", "module", "main"], -}; -const buildForESM = async () => await esbuild.build(ESM_SETTINGS); - -const CJS_SETTINGS = { - ...COMMON_SETTINGS, - format: "cjs", - sourcemap: false, - outfile: "dist/cjs/index.js", - platform: "node", -}; - -const watchForCJS = async () => { - let ctx = await esbuild.context(CJS_SETTINGS); - await ctx.watch(); - await ctx.serve({ servedir: "dist/src" }); - console.log("watching..."); -}; - -const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); - -(async () => { - const buildType = process.argv.slice(2)[0]; - const shouldWatch = process.argv.slice(3)[0] === "--watch"; - if (!buildType) { - console.log("No build type provided"); - process.exit(1); - } - console.log(`Building for ${buildType}`); - if (buildType === "ESM") { - await buildForESM(); - } else if (buildType === "CJS") { - console.log("watching? " + shouldWatch); - await (shouldWatch ? watchForCJS : buildForCJS)(); - } else if (buildType === "TYP") { - await buildForTYP(); - } -})(); diff --git a/packages/particle-auth/CHANGELOG.md b/packages/particle-auth/CHANGELOG.md deleted file mode 100644 index 9ebd16ef1..000000000 --- a/packages/particle-auth/CHANGELOG.md +++ /dev/null @@ -1,66 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 4.1.1 (2023-07-03) - -VERSION Bump Only. - -## 4.1.0 (2023-04-03) - -VERSION Bump Only. - -## 4.0.3 (2023-28-02) - -Fix build - -## 4.0.2 (2023-12-28) - -Fix build - -## 4.0.1 (2023-02-22) - -VERSION Bump Only. - -## 4.0.0 (2023-12-28) - -VERSION Bump Only. - -## 3.1.3 (2023-12-28) - -VERSION Bump Only. - -## 3.1.2 (2023-12-28) - -VERSION Bump Only. - -## 3.1.1 (2023-11-09) - -### Features - -- Upgrade package version ([])(https://github.com/bcnmy/biconomy-client-sdk/commit/d467b85) - -## 3.1.0 (2023-09-20) - -Version Bump Only. - -# 3.0.0 (2023-08-28) - -### Features - -- particle auth integration ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) - -## 3.0.0-alpha.0 (2023-07-12) - -## 2.0.1 (2023-06-10) - -### Bug Fixes - -- typo ([0a63ff1](https://github.com/bcnmy/biconomy-client-sdk/commit/0a63ff17bb38b1bc2fd68669b74c2efd5a959d31)) - -## 2.0.0 (2023-30-05) - -### Features - -- particle-auth ([7b8fb1d](https://github.com/bcnmy/biconomy-client-sdk/commit/7b8fb1d05e3cc0196bc15806fa48100701af181e)) diff --git a/packages/particle-auth/README.md b/packages/particle-auth/README.md deleted file mode 100644 index 8d3a34187..000000000 --- a/packages/particle-auth/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# `@biconomy/particle-auth` - -> A library to import the particle-auth for web directly from [Biconomy SDK](https://github.com/bcnmy/biconomy-client-sdk) - -## Usage - -```ts -import { ParticleNetwork, WalletEntryPosition } from "@biconomy/particle-auth"; -import { ParticleProvider } from "@biconomy/particle-auth"; -import Web3 from "web3"; - -const particle = new ParticleNetwork({ - projectId: "xx", - clientKey: "xx", - appId: "xx", - chainName: "Ethereum", //optional: current chain name, default Ethereum. - chainId: 1, //optional: current chain id, default 1. - wallet: { - //optional: by default, the wallet entry is displayed in the bottom right corner of the webpage. - displayWalletEntry: true, //show wallet entry when connect particle. - defaultWalletEntryPosition: WalletEntryPosition.BR, //wallet entry position - uiMode: "dark", //optional: light or dark, if not set, the default is the same as web auth. - supportChains: [ - { id: 1, name: "Ethereum" }, - { id: 5, name: "Ethereum" }, - ], // optional: web wallet support chains. - customStyle: {}, //optional: custom wallet style - }, -}); - -const particleProvider = new ParticleProvider(particle.auth); - -//if you use web3.js -window.web3 = new Web3(particleProvider); -window.web3.currentProvider.isParticleNetwork; // => true - -//if you use ethers.js -import { ethers } from "ethers"; -const ethersProvider = new ethers.providers.Web3Provider(particleProvider, "any"); -const ethersSigner = ethersProvider.getSigner(); -``` diff --git a/packages/particle-auth/package.json b/packages/particle-auth/package.json deleted file mode 100644 index 87f407661..000000000 --- a/packages/particle-auth/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "@biconomy/particle-auth", - "version": "4.1.1", - "description": "Particle auth for Biconomy SDK", - "main": "./dist/cjs/index.js", - "module": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "typings": "./dist/types/index.d.ts", - "exports": { - ".": { - "import": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./package.json" - }, - "keywords": [ - "legos", - "batching", - "one-click", - "cross-chain", - "particle", - "particle-auth" - ], - "author": "Biconomy", - "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" - }, - "scripts": { - "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "yarn build:tsc --watch", - "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", - "build": "yarn unbuild && yarn build:tsc", - "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", - "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", - "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" - }, - "bugs": { - "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@particle-network/auth": "^1.2.1", - "@particle-network/biconomy": "^1.0.0", - "@particle-network/provider": "^1.2.0" - }, - "devDependencies": { - "@types/node": "^20.11.10", - "esbuild": "^0.19.11", - "esbuild-plugin-tsc": "^0.4.0", - "npm-dts": "^1.3.12" - } -} diff --git a/packages/particle-auth/src/index.ts b/packages/particle-auth/src/index.ts deleted file mode 100644 index 03966301b..000000000 --- a/packages/particle-auth/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as ParticleAuth from "@particle-network/auth"; -import * as BiconomyAccount from "@particle-network/biconomy"; -export { ParticleProvider, ParticleDelegateProvider } from "@particle-network/provider"; -export { ParticleAuth as ParticleAuthModule, BiconomyAccount as BiconomyAccountModule }; diff --git a/packages/particle-auth/tests/particle-auth.spec.ts b/packages/particle-auth/tests/particle-auth.spec.ts deleted file mode 100644 index 97866f6b6..000000000 --- a/packages/particle-auth/tests/particle-auth.spec.ts +++ /dev/null @@ -1,5 +0,0 @@ -describe("Particle Auth Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); - }); -}); diff --git a/packages/particle-auth/tsconfig.build.json b/packages/particle-auth/tsconfig.build.json deleted file mode 100644 index 4ac8b8026..000000000 --- a/packages/particle-auth/tsconfig.build.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "Build", - "compilerOptions": { - "lib": ["es2022", "dom"], - "target": "es2021", - "types": ["node"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "verbatimModuleSyntax": false, - "useDefineForClassFields": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "useUnknownInCatchVariables": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "declaration": true, - "inlineSources": true, - "noEmit": false, - "sourceMap": true - }, - "exclude": ["**/*/node_modules", "**/*/tests", "tests"], - "include": ["src"] -} \ No newline at end of file diff --git a/packages/particle-auth/tsconfig.json b/packages/particle-auth/tsconfig.json deleted file mode 100644 index cda17a184..000000000 --- a/packages/particle-auth/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true, - "lib": ["es2020"], - }, - "include": ["src", "src/**/*.json"] -} diff --git a/packages/paymaster/.esbuild.js b/packages/paymaster/.esbuild.js deleted file mode 100644 index ca355e346..000000000 --- a/packages/paymaster/.esbuild.js +++ /dev/null @@ -1,58 +0,0 @@ -const esbuildPluginTsc = require("esbuild-plugin-tsc"); -const esbuild = require("esbuild"); -const { dependencies, peerDependencies = {} } = require("./package.json"); -const { Generator } = require("npm-dts"); - -const COMMON_SETTINGS = { - entryPoints: ["src/index.ts"], - minify: true, - bundle: true, - plugins: [esbuildPluginTsc({ force: true })], -}; - -const ESM_SETTINGS = { - ...COMMON_SETTINGS, - sourcemap: true, - outfile: "dist/esm/index.js", - platform: "browser", - target: "esnext", - format: "esm", - mainFields: ["browser", "module", "main"], -}; -const buildForESM = async () => await esbuild.build(ESM_SETTINGS); - -const CJS_SETTINGS = { - ...COMMON_SETTINGS, - format: "cjs", - sourcemap: false, - outfile: "dist/cjs/index.js", - platform: "node", -}; - -const watchForCJS = async () => { - let ctx = await esbuild.context(CJS_SETTINGS); - await ctx.watch(); - await ctx.serve({ servedir: "dist/src" }); - console.log("watching..."); -}; - -const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); - -(async () => { - const buildType = process.argv.slice(2)[0]; - const shouldWatch = process.argv.slice(3)[0] === "--watch"; - if (!buildType) { - console.log("No build type provided"); - process.exit(1); - } - console.log(`Building for ${buildType}`); - if (buildType === "ESM") { - await buildForESM(); - } else if (buildType === "CJS") { - console.log("watching? " + shouldWatch); - await (shouldWatch ? watchForCJS : buildForCJS)(); - } else if (buildType === "TYP") { - await buildForTYP(); - } -})(); diff --git a/packages/paymaster/CHANGELOG.md b/packages/paymaster/CHANGELOG.md deleted file mode 100644 index f4db34b38..000000000 --- a/packages/paymaster/CHANGELOG.md +++ /dev/null @@ -1,78 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 4.1.1 (2023-07-03) - -VERSION Bump Only. - -## 4.1.0 (2023-04-03) - -VERSION Bump Only. - -## 4.0.3 (2023-28-02) - -VERSION Bump Only. - -## 4.0.2 (2023-26-02) - -VERSION Bump Only. - -## 4.0.1 (2023-02-22) - -VERSION Bump Only. - -## 4.0.0 (2023-07-02) - -Export createPaymaster alias for static Paymaster.create call - -## 3.1.3 (2023-12-28) - -VERSION Bump Only. - -## 3.1.2 (2023-12-28) - -VERSION Bump Only. - -## 3.1.1 (2023-11-09) - -### Bug Fixes - -- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) - -## 3.1.0 (2023-09-20) - -Version Bump Only. - -## 3.0.0 (2023-08-28) - -Modular SDK - consists stable version of below updates done in Alphas. - -## 3.0.0-alpha.0 (2023-08-02) - -### Features - -- letting maxFee and maxPriority not be undefined([46b985c](https://github.com/bcnmy/biconomy-client-sdk/commit/46b985c75fd135f151c9ac4380a65438cccc6f39)) -- passing on paymasterAndData([ae267f1])(https://github.com/bcnmy/biconomy-client-sdk/commit/ae267f1a103f37856eb233a38db7063bfcc4cb45) -- handle undefined values([e53d4a7])(https://github.com/bcnmy/biconomy-client-sdk/commit/e53d4a78aded8c8802786173daf12b27d445d4a0) -- handling userOp null values([c89ac42])(https://github.com/bcnmy/biconomy-client-sdk/commit/c89ac42ae1d7fd985ef2396d925cc63ec5cf926b) -- using signature provided by userop([0c40641])(https://github.com/bcnmy/biconomy-client-sdk/commit/0c40641e4cd6133f7348bb3e3022f8ab78fe299b) - -# 3.1.0-alpha.0 (2023-07-24) - -VERSION Bump Only. - -## 3.0.0-alpha.0 (2023-07-12) - -### Bug Fixes - -- linting ([563befe](https://github.com/bcnmy/biconomy-client-sdk/commit/563befedcc37aee4c531e01809b47e559a33f526)) -- linting ([d2f5f1a](https://github.com/bcnmy/biconomy-client-sdk/commit/d2f5f1afadc2a561c4ef01c0821a25b9d7fe776e)) - -### Features - -- covert gas limits to numbers for making pm service call ([b1fe96f](https://github.com/bcnmy/biconomy-client-sdk/commit/b1fe96f7a312ceaf7aa689939b7c69718c710dd1)) -- get fee quote or data method in biconomy paymaster ([47748a6](https://github.com/bcnmy/biconomy-client-sdk/commit/47748a6384c2b74e1d9be4d570554098e1ac02e7)) -- update responses to support calculateGasLimits flag + update interfaces ([55bbd38](https://github.com/bcnmy/biconomy-client-sdk/commit/55bbd38b4ef8acaf8da1d52e36846557b134aba4)) -- using hybrid paymaster interface ([5fc56a7](https://github.com/bcnmy/biconomy-client-sdk/commit/5fc56a7db2de4a3f4bb87cd4d75584e79010b206)) diff --git a/packages/paymaster/Readme.md b/packages/paymaster/Readme.md deleted file mode 100644 index 562a790f6..000000000 --- a/packages/paymaster/Readme.md +++ /dev/null @@ -1,74 +0,0 @@ -# **Paymaster** - -ERC4337, Account abstraction, introduces the concept of Paymasters. These specialised entities play a pivotal role in revolutionising the traditional gas payment system in EVM transactions. Paymasters, acting as third-party intermediaries, possess the capability to sponsor gas fees for an account, provided specific predefined conditions are satisfied. - -## Installation - -Using `npm` package manager - -```bash -npm i @biconomy/paymaster -``` - -OR - -Using `yarn` package manager - -```bash -yarn add @biconomy/paymaster -``` - -**Usage** - -```typescript -// This is how you create paymaster instance in your dapp's -import { IPaymaster, createPaymaster } from "@biconomy/paymaster"; - -// Currently this package only exports Biconomy Paymaster which acts as a Hybrid paymaster for gas abstraction. You can sponsor user transactions but can also make users pay gas in supported ERC20 tokens. - -const paymaster = await createPaymaster({ - paymasterUrl: "", // you can get this value from biconomy dashboard. https://dashboard.biconomy.io -}); -``` - -**paymasterUrl** you can get this value from biconomy dashboard. - -Following are the methods that can be called on paymaster instance - -```typescript -export interface IHybridPaymaster<T> extends IPaymaster { - getPaymasterAndData(userOp: Partial<UserOperation>, paymasterServiceData?: T): Promise<PaymasterAndDataResponse>; - buildTokenApprovalTransaction(tokenPaymasterRequest: BiconomyTokenPaymasterRequest): Promise<Transaction>; - getPaymasterFeeQuotesOrData(userOp: Partial<UserOperation>, paymasterServiceData: FeeQuotesOrDataDto): Promise<FeeQuotesOrDataResponse>; -} -``` - -One can also build their own Paymaster API class and submit a PR or just provide instance of it in the account package / use standalone to generate paymasterAndData - -It should follow below Interface. - -```typescript -export interface IPaymaster { - // Implementing class may add extra parameter (for example paymasterServiceData with it's own type) in below function signature - getPaymasterAndData(userOp: Partial<UserOperation>): Promise<PaymasterAndDataResponse>; - getDummyPaymasterAndData(userOp: Partial<UserOperation>): Promise<string>; -} -``` - -### Below API methods can be used for Biconomy Hybrid paymaster - -**[getPaymasterAndData](https://bcnmy.github.io/biconomy-client-sdk/classes/Paymaster.html#getPaymasterAndData)** - -This function accepts a **`Partial<UserOperation>`** object that includes all properties of **`userOp`** except for the **`signature`** and **`paymasterAndData`** field. It returns **`paymasterAndData`** as part of the **`PaymasterAndDataResponse`** - -**[buildTokenApprovalTransaction](https://bcnmy.github.io/biconomy-client-sdk/classes/Paymaster.html#buildTokenApprovalTransaction)** - -This function is specifically used for token paymaster sponsorship. The primary purpose of this function is to create an approve transaction for paymaster that gets batched with the rest of your transactions. - -Note: You don't need to call this function. It will automatically get called as part of the **`buildTokenPaymasterUserOp`** function call. - -**[getPaymasterFeeQuotesOrData](https://bcnmy.github.io/biconomy-client-sdk/classes/Paymaster.html#getPaymasterFeeQuotesOrData)** - -This function is used to fetch quote information or paymaster data based on provided userOperation and paymasterServiceData. If explicit mode is not provided it tries for sponsorship first and then falls back to serving fee quotes for supported/requested token/s - -Note: This function can return **paymasterAndData** as well in case all of the policies checks get passed. diff --git a/packages/paymaster/package.json b/packages/paymaster/package.json deleted file mode 100644 index 2b6008747..000000000 --- a/packages/paymaster/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "@biconomy/paymaster", - "version": "4.1.1", - "description": "Biconomy Paymaster to interact with Paymaster Services that interacts with ( veriying and token ) paymasters", - "main": "./dist/cjs/index.js", - "module": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "typings": "./dist/types/index.d.ts", - "exports": { - ".": { - "import": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./package.json" - }, - "keywords": [ - "Ethereum", - "Veriying Paymaster", - "Token Paymaster", - "ERC4337", - "Gasless Transaction", - "Biconomy", - "SDK" - ], - "scripts": { - "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "yarn build:tsc --watch", - "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", - "build": "yarn unbuild && yarn build:tsc", - "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", - "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", - "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json", - "test": "jest tests/**/*.spec.ts --runInBand" - }, - "author": "Biconomy", - "repository": { - "type": "git", - "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" - }, - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@alchemy/aa-core": "^3.1.1", - "@biconomy/common": "^4.1.1", - "viem": "^2.7.12" - }, - "devDependencies": { - "@types/node": "^20.11.10", - "esbuild": "^0.19.11", - "esbuild-plugin-tsc": "^0.4.0", - "npm-dts": "^1.3.12" - } -} diff --git a/packages/paymaster/src/index.ts b/packages/paymaster/src/index.ts deleted file mode 100644 index 4d78b3a0a..000000000 --- a/packages/paymaster/src/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { BiconomyPaymaster } from "./BiconomyPaymaster.js"; -export * from "./interfaces/IPaymaster.js"; -export * from "./interfaces/IHybridPaymaster.js"; -export * from "./utils/Types.js"; -export * from "./BiconomyPaymaster.js"; - -export const Paymaster = BiconomyPaymaster; -export const createPaymaster = Paymaster.create; diff --git a/packages/paymaster/src/interfaces/IHybridPaymaster.ts b/packages/paymaster/src/interfaces/IHybridPaymaster.ts deleted file mode 100644 index 5b73bfd5e..000000000 --- a/packages/paymaster/src/interfaces/IHybridPaymaster.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { type UserOperationStruct } from "@alchemy/aa-core"; -import { - FeeQuotesOrDataResponse, - BiconomyTokenPaymasterRequest, - FeeQuotesOrDataDto, - PaymasterAndDataResponse, - type Transaction, -} from "../utils/Types.js"; -import { IPaymaster } from "./IPaymaster.js"; - -export interface IHybridPaymaster<T> extends IPaymaster { - getPaymasterAndData(_userOp: Partial<UserOperationStruct>, _paymasterServiceData?: T): Promise<PaymasterAndDataResponse>; - getDummyPaymasterAndData(_userOp: Partial<UserOperationStruct>, _paymasterServiceData?: T): Promise<string>; - buildTokenApprovalTransaction(_tokenPaymasterRequest: BiconomyTokenPaymasterRequest): Promise<Transaction>; - getPaymasterFeeQuotesOrData(_userOp: Partial<UserOperationStruct>, _paymasterServiceData: FeeQuotesOrDataDto): Promise<FeeQuotesOrDataResponse>; -} diff --git a/packages/paymaster/src/interfaces/IPaymaster.ts b/packages/paymaster/src/interfaces/IPaymaster.ts deleted file mode 100644 index b9938797d..000000000 --- a/packages/paymaster/src/interfaces/IPaymaster.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { type UserOperationStruct } from "@alchemy/aa-core"; -import { PaymasterAndDataResponse } from "../utils/Types.js"; - -export interface IPaymaster { - // Implementing class may add extra parameter (for example paymasterServiceData with it's own type) in below function signature - getPaymasterAndData(_userOp: Partial<UserOperationStruct>): Promise<PaymasterAndDataResponse>; - getDummyPaymasterAndData(_userOp: Partial<UserOperationStruct>): Promise<string>; -} diff --git a/packages/paymaster/src/utils/Types.ts b/packages/paymaster/src/utils/Types.ts deleted file mode 100644 index 9d5f849d4..000000000 --- a/packages/paymaster/src/utils/Types.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { BigNumberish } from "@alchemy/aa-core"; -export type Hex = `0x${string}`; - -export type PaymasterServiceErrorResponse = { - jsonrpc: string; - id: number; - error: JsonRpcError; -}; - -export type JsonRpcResponse = { - jsonrpc: string; - id: number; - result?: any; - error?: JsonRpcError; -}; - -export type JsonRpcError = { - code: string; - message: string; - data: any; -}; - -export type PaymasterConfig = { - paymasterUrl: string; - strictMode?: boolean; -}; - -export type SponsorUserOperationDto = { - /** mode: sponsored or erc20 */ - mode: PaymasterMode; - /** Always recommended, especially when using token paymaster */ - calculateGasLimits?: boolean; - /** Expiry duration in seconds */ - expiryDuration?: number; - /** Webhooks to be fired after user op is sent */ - webhookData?: Record<string, any>; - /** Smart account meta data */ - smartAccountInfo?: SmartAccountData; - /** the fee-paying token address */ - feeTokenAddress?: string; -}; - -export type FeeQuotesOrDataDto = { - /** mode: sponsored or erc20 */ - mode?: PaymasterMode; - /** Expiry duration in seconds */ - expiryDuration?: number; - /** Always recommended, especially when using token paymaster */ - calculateGasLimits?: boolean; - /** List of tokens to be used for fee quotes, if ommitted fees for all supported will be returned */ - tokenList?: string[]; - /** preferredToken: Can be ommitted to return all quotes */ - preferredToken?: string; - /** Webhooks to be fired after user op is sent */ - webhookData?: Record<string, any>; - /** Smart account meta data */ - smartAccountInfo?: SmartAccountData; -}; - -export type FeeQuoteParams = { - tokenList?: string[]; - preferredToken?: string; -}; - -export type FeeTokenInfo = { - feeTokenAddress: string; -}; - -export type SponsorpshipInfo = { - /** Webhooks to be fired after user op is sent */ - webhookData?: Record<string, any>; - /** Smart account meta data */ - smartAccountInfo: SmartAccountData; -}; - -export type SmartAccountData = { - /** name: Name of the smart account */ - name: string; - /** version: Version of the smart account */ - version: string; -}; - -export type PaymasterFeeQuote = { - /** symbol: Token symbol */ - symbol: string; - /** tokenAddress: Token address */ - tokenAddress: string; - /** decimal: Token decimal */ - decimal: number; - logoUrl?: string; - /** maxGasFee: in wei */ - maxGasFee: number; - /** maxGasFee: in dollars */ - maxGasFeeUSD?: number; - usdPayment?: number; - /** The premium paid on the token */ - premiumPercentage: number; - /** validUntil: Unix timestamp */ - validUntil?: number; -}; - -export type BiconomyTokenPaymasterRequest = { - /** The feeQuote to be used for the transaction */ - feeQuote: PaymasterFeeQuote; - /** The address of the spender. This is usually set to {@link FeeQuotesOrDataResponse.tokenPaymasterAddress} */ - spender: Hex; - /** Not recommended */ - maxApproval?: boolean; - /* skip option to patch callData if approval is already given to the paymaster */ - skipPatchCallData?: boolean; -}; - -export type FeeQuotesOrDataResponse = { - /** Array of results from the paymaster */ - feeQuotes?: PaymasterFeeQuote[]; - /** Normally set to the spender in the proceeding call to send the tx */ - tokenPaymasterAddress?: Hex; - /** Relevant Data returned from the paymaster */ - paymasterAndData?: Uint8Array | Hex; - /* Gas overhead of this UserOperation */ - preVerificationGas?: BigNumberish; - /* Actual gas used by the validation of this UserOperation */ - verificationGasLimit?: BigNumberish; - /* Value used by inner account execution */ - callGasLimit?: BigNumberish; -}; - -export type PaymasterAndDataResponse = { - paymasterAndData: Hex; - /* Gas overhead of this UserOperation */ - preVerificationGas: number; - /* Actual gas used by the validation of this UserOperation */ - verificationGasLimit: number; - /* Value used by inner account execution */ - callGasLimit: number; -}; - -export enum PaymasterMode { - ERC20 = "ERC20", - SPONSORED = "SPONSORED", -} - -// Converted to JsonRpcResponse with strict type -export type EstimateUserOpGasResponse = { - jsonrpc: string; - id: number; - result: UserOpGasResponse; - error?: JsonRpcError; -}; - -export type UserOpGasResponse = { - paymasterAndData: string; - /* Gas overhead of this UserOperation */ - preVerificationGas: string; - maxPriorityFeePerGas: string; - maxFeePerGas: string; - /* Actual gas used by the validation of this UserOperation */ - verificationGasLimit: string; - callGasLimit: string; -}; - -type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> & - { - [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>; - }[Keys]; - -type ValueOrData = RequireAtLeastOne< - { - value: BigNumberish | string; - data: string; - }, - "value" | "data" ->; -export type Transaction = { - to: string; -} & ValueOrData; diff --git a/packages/paymaster/tests/paymaster.e2e.spec.ts b/packages/paymaster/tests/paymaster.e2e.spec.ts deleted file mode 100644 index 3a634f491..000000000 --- a/packages/paymaster/tests/paymaster.e2e.spec.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TestData } from "../../../tests"; - -describe("Paymaster Unit Tests", () => { - let mumbai: TestData; - let baseSepolia: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-e2e-tests - [mumbai, baseSepolia] = testDataPerChain; - }); - - it("should have chain data for mumbai", () => { - expect(mumbai).toHaveProperty("chainId"); - }); - - it("should also have chain data for base", () => { - expect(baseSepolia).toHaveProperty("chainId"); - }); -}); diff --git a/packages/paymaster/tests/paymaster.spec.ts b/packages/paymaster/tests/paymaster.spec.ts deleted file mode 100644 index 0b3508a6b..000000000 --- a/packages/paymaster/tests/paymaster.spec.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TestData } from "../../../tests"; - -describe("Paymaster Unit Tests", () => { - let ganache: TestData; - - beforeEach(() => { - // @ts-ignore: Comes from setup-unit-tests - [ganache] = testDataPerChain; - }); - - it("should have chain data for mumbai", () => { - expect(ganache).toHaveProperty("chainId"); - }); -}); diff --git a/packages/paymaster/tsconfig.build.json b/packages/paymaster/tsconfig.build.json deleted file mode 100644 index 4ac8b8026..000000000 --- a/packages/paymaster/tsconfig.build.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "Build", - "compilerOptions": { - "lib": ["es2022", "dom"], - "target": "es2021", - "types": ["node"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "verbatimModuleSyntax": false, - "useDefineForClassFields": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "useUnknownInCatchVariables": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "declaration": true, - "inlineSources": true, - "noEmit": false, - "sourceMap": true - }, - "exclude": ["**/*/node_modules", "**/*/tests", "tests"], - "include": ["src"] -} \ No newline at end of file diff --git a/packages/paymaster/tsconfig.json b/packages/paymaster/tsconfig.json deleted file mode 100644 index d6269c535..000000000 --- a/packages/paymaster/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true, - "types": ["node"] - }, - "include": ["src", "src/**/*.json"] -} diff --git a/packages/transak/.esbuild.js b/packages/transak/.esbuild.js deleted file mode 100644 index ca355e346..000000000 --- a/packages/transak/.esbuild.js +++ /dev/null @@ -1,58 +0,0 @@ -const esbuildPluginTsc = require("esbuild-plugin-tsc"); -const esbuild = require("esbuild"); -const { dependencies, peerDependencies = {} } = require("./package.json"); -const { Generator } = require("npm-dts"); - -const COMMON_SETTINGS = { - entryPoints: ["src/index.ts"], - minify: true, - bundle: true, - plugins: [esbuildPluginTsc({ force: true })], -}; - -const ESM_SETTINGS = { - ...COMMON_SETTINGS, - sourcemap: true, - outfile: "dist/esm/index.js", - platform: "browser", - target: "esnext", - format: "esm", - mainFields: ["browser", "module", "main"], -}; -const buildForESM = async () => await esbuild.build(ESM_SETTINGS); - -const CJS_SETTINGS = { - ...COMMON_SETTINGS, - format: "cjs", - sourcemap: false, - outfile: "dist/cjs/index.js", - platform: "node", -}; - -const watchForCJS = async () => { - let ctx = await esbuild.context(CJS_SETTINGS); - await ctx.watch(); - await ctx.serve({ servedir: "dist/src" }); - console.log("watching..."); -}; - -const buildForCJS = async () => await esbuild.build(CJS_SETTINGS); -const buildForTYP = async () => await new Generator({ entry: "src/index.ts", output: "dist/types/index.d.ts" }).generate(); - -(async () => { - const buildType = process.argv.slice(2)[0]; - const shouldWatch = process.argv.slice(3)[0] === "--watch"; - if (!buildType) { - console.log("No build type provided"); - process.exit(1); - } - console.log(`Building for ${buildType}`); - if (buildType === "ESM") { - await buildForESM(); - } else if (buildType === "CJS") { - console.log("watching? " + shouldWatch); - await (shouldWatch ? watchForCJS : buildForCJS)(); - } else if (buildType === "TYP") { - await buildForTYP(); - } -})(); diff --git a/packages/transak/CHANGELOG.md b/packages/transak/CHANGELOG.md deleted file mode 100644 index 4af2afc36..000000000 --- a/packages/transak/CHANGELOG.md +++ /dev/null @@ -1,62 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 4.1.1 (2023-07-03) - -VERSION Bump Only. - -## 4.1.0 (2023-04-03) - -VERSION Bump Only. - -## 4.0.3 (2023-28-02) - -VERSION Bump Only. - -## 4.0.2 (2023-26-02) - -VERSION Bump Only. - -## 4.0.1 (2023-26-02) - -VERSION Bump Only. - -## 4.0.0 (2023-12-28) - -VERSION Bump Only. - -## 3.1.3 (2023-12-28) - -VERSION Bump Only. - -## 3.1.2 (2023-12-28) - -VERSION Bump Only. - -## 3.1.1 (2023-11-09) - -VERSION Bump Only. - -## 3.1.0 (2023-09-20) - -### Bug Fixes - -- lint warning and errors ([2135498](https://github.com/bcnmy/biconomy-client-sdk/commit/2135498896beb54d25add820c1521ffa22d5db7c)) - -# 3.0.0 (2023-08-28) - -VERSION Bump Only. - -## 2.0.0 (2023-04-07) - -### Features - -- transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) - -## 1.0.0 (2023-01-03) - -### Features - -- transak wrapper module ([102e6eb](https://github.com/bcnmy/biconomy-client-sdk/commit/102e6eb5f179e4aff77d1e91973e0b32fa7b8f9a)) diff --git a/packages/transak/README.md b/packages/transak/README.md deleted file mode 100644 index ea5b73266..000000000 --- a/packages/transak/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# `@biconomy/transak` - -> A library to import the transak for web directly from [Biconomy SDK](https://github.com/bcnmy/biconomy-client-sdk) - -## Usage - -No need to create api key from transak dashboard. - -```ts -import Transak from "@biconomy/transak"; -const transak = new Transak("STAGING"); -transak.init(); -``` diff --git a/packages/transak/package.json b/packages/transak/package.json deleted file mode 100644 index 4232ed243..000000000 --- a/packages/transak/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "@biconomy/transak", - "version": "4.1.1", - "description": "transak for biconomy sdk", - "main": "./dist/cjs/index.js", - "module": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "typings": "./dist/types/index.d.ts", - "exports": { - ".": { - "import": "./dist/esm/index.js", - "types": "./dist/types/index.d.ts", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./package.json" - }, - "keywords": [ - "legos", - "batching", - "one-click", - "cross-chain", - "transak" - ], - "author": "Biconomy", - "homepage": "https://github.com/bcnmy/biconomy-client-sdk#readme", - "license": "MIT", - "files": [ - "dist/*", - "README.md" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/bcnmy/biconomy-client-sdk.git" - }, - "scripts": { - "unbuild": "rimraf dist *.tsbuildinfo", - "build:watch": "yarn build:tsc --watch", - "dist:minify": "esbuild ./dist/esm/**/*.js ./dist/esm/*.js --minify --outdir=./dist/esm --bundle=false --allow-overwrite", - "build": "yarn unbuild && yarn build:tsc", - "build:esbuild": "yarn build:esbuild:cjs && yarn build:esbuild:esm && yarn build:typ", - "build:tsc:cjs": "tsc --project tsconfig.build.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:tsc:esm": "tsc --project tsconfig.build.json --module esnext --outDir ./dist/esm --removeComments && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:esbuild:cjs": "node .esbuild.js CJS && echo > ./dist/cjs/package.json '{\"type\":\"commonjs\"}'", - "build:esbuild:esm": "node .esbuild.js ESM && echo > ./dist/esm/package.json '{\"type\":\"module\"}'", - "build:typ": "tsc --project tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", - "build:tsc": "yarn build:tsc:cjs && yarn build:tsc:esm && yarn build:typ && yarn dist:minify", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "lint": "tslint -p tsconfig.json" - }, - "bugs": { - "url": "https://github.com/bcnmy/biconomy-client-sdk/issues" - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "@transak/transak-sdk": "^1.2.3" - }, - "devDependencies": { - "@types/node": "^20.11.10", - "esbuild": "^0.19.11", - "esbuild-plugin-tsc": "^0.4.0", - "npm-dts": "^1.3.12" - } -} diff --git a/packages/transak/src/index.ts b/packages/transak/src/index.ts deleted file mode 100644 index 36f5dcfd9..000000000 --- a/packages/transak/src/index.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* eslint-disable @typescript-eslint/ban-ts-comment */ -// @ts-ignore -import transakSDK from "@transak/transak-sdk"; -import { ITransakDto, environments } from "./interface.js"; - -class TransakSDK { - apiKey: string; - - /* eslint-disable @typescript-eslint/no-explicit-any */ - transak: any; - - constructor(environment: environments, transakData: ITransakDto = {}) { - if (environment === "PRODUCTION") { - this.apiKey = "f7d64c91-8f89-4018-9577-9098e42290af"; - } else { - this.apiKey = "c71ecd4a-0819-46a7-8d63-c8b7148aaf63"; - } - const transak = new transakSDK({ - apiKey: this.apiKey, - widgetHeight: "625px", - widgetWidth: "500px", - environment: environment, - ...transakData, - }); - this.transak = transak; - } - - init(): void { - try { - this.transak.init(); - /* eslint-disable @typescript-eslint/no-explicit-any */ - } catch (err: any) { - throw new Error(`Error while init transakSDK ${err}`); - } - } - - getTransak(): any { - return this.transak; - } -} - -export default TransakSDK; diff --git a/packages/transak/src/interface.ts b/packages/transak/src/interface.ts deleted file mode 100644 index fd1218340..000000000 --- a/packages/transak/src/interface.ts +++ /dev/null @@ -1,64 +0,0 @@ -export type environments = "PRODUCTION" | "STAGING"; - -export interface IConfigBasic { - // apiKey: string - // environment: environments - redirectURL?: string; - cryptoCurrencyCode?: string; - fiatCurrencyCode?: string; - themeColor?: string; - defaultCryptoCurrency?: string; - defaultFiatCurrency?: string; - walletAddress?: string; - fiatAmount?: number; - defaultFiatAmount?: number; - defaultCryptoAmount?: number; - fiatCurrency?: string; - countryCode?: string; - paymentMethod?: string; - defaultPaymentMethod?: string; - isAutoFillUserData?: boolean; - isFeeCalculationHidden?: boolean; - email?: string; - disablePaymentMethods?: string; - partnerOrderId?: string; - partnerCustomerId?: string; - exchangeScreenTitle?: string; - hideMenu?: boolean; - accessToken?: string; - hideExchangeScreen?: boolean; - isDisableCrypto?: boolean; - disableWalletAddressForm?: boolean; - defaultNetwork?: string; - network?: string; - widgetWidth?: string | number; - widgetHeight?: string | number; -} - -export interface ITransakDto extends IConfigBasic { - networks?: string; - cryptoCurrencyList?: string; - userData?: { - firstName: string; - lastName: string; - email: string; - mobileNumber: string; - dob: string; - address: { - addressLine1: string; - addressLine2: string; - city: string; - state: string; - postCode: string; - countryCode: string; - }; - }; - walletAddressesData?: { - networks?: { - [key: string]: { address: string; addressAdditionalData?: string }; - }; - coins?: { - [key: string]: { address: string; addressAdditionalData?: string }; - }; - }; -} diff --git a/packages/transak/tests/transak.spec.ts b/packages/transak/tests/transak.spec.ts deleted file mode 100644 index 4c5cad00c..000000000 --- a/packages/transak/tests/transak.spec.ts +++ /dev/null @@ -1,5 +0,0 @@ -describe("Transak Tests", () => { - it("should have a basic test", () => { - expect(true).toBe(true); - }); -}); diff --git a/packages/transak/tsconfig.build.json b/packages/transak/tsconfig.build.json deleted file mode 100644 index 4ac8b8026..000000000 --- a/packages/transak/tsconfig.build.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "display": "Build", - "compilerOptions": { - "lib": ["es2022", "dom"], - "target": "es2021", - "types": ["node"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "verbatimModuleSyntax": false, - "useDefineForClassFields": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "useUnknownInCatchVariables": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "declaration": true, - "inlineSources": true, - "noEmit": false, - "sourceMap": true - }, - "exclude": ["**/*/node_modules", "**/*/tests", "tests"], - "include": ["src"] -} \ No newline at end of file diff --git a/packages/transak/tsconfig.json b/packages/transak/tsconfig.json deleted file mode 100644 index d9b305a9a..000000000 --- a/packages/transak/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.settings.json", - "compilerOptions": { - "composite": true, - "outDir": "dist", - "baseUrl": "src", - "resolveJsonModule": true, - "esModuleInterop": true, - "lib": ["es2020"], - "types": ["node"] - }, - "include": ["src", "src/**/*.json"] -} diff --git a/rebuild.sh b/rebuild.sh deleted file mode 100755 index 39c4c1a94..000000000 --- a/rebuild.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh -rm -rf package-lock.json -rm -rf yarn.lock -rm -rf node_modules - -rm -rf packages/account/node_modules -rm -rf packages/account/yarn.lock -rm -rf packages/account/package-lock.json -rm -rf packages/account/dist - -rm -rf packages/bundler/node_modules -rm -rf packages/bundler/yarn.lock -rm -rf packages/bundler/package-lock.json -rm -rf packages/bundler/dist - -rm -rf packages/common/node_modules -rm -rf packages/common/yarn.lock -rm -rf packages/common/package-lock.json -rm -rf packages/common/dist - -rm -rf packages/paymaster/node_modules -rm -rf packages/paymaster/yarn.lock -rm -rf packages/paymaster/package-lock.json -rm -rf packages/paymaster/dist - -rm -rf packages/modules/node_modules -rm -rf packages/modules/yarn.lock -rm -rf packages/modules/package-lock.json -rm -rf packages/modules/dist - -rm -rf packages/transak/node_modules -rm -rf packages/transak/yarn.lock -rm -rf packages/transak/package-lock.json -rm -rf packages/transak/dist - -rm -rf packages/particle-auth/node_modules -rm -rf packages/particle-auth/yarn.lock -rm -rf packages/particle-auth/package-lock.json -rm -rf packages/particle-auth/dist - -#npx lerna bootstrap --force-local -#npm run build -#npm link \ No newline at end of file diff --git a/src/account/BaseSmartContractAccount.ts b/src/account/BaseSmartContractAccount.ts new file mode 100644 index 000000000..c6b0568ff --- /dev/null +++ b/src/account/BaseSmartContractAccount.ts @@ -0,0 +1,354 @@ +import { + http, + type Address, + type GetContractReturnType, + type Hash, + type Hex, + type PublicClient, + createPublicClient, + getContract, + trim +} from "viem" +import { EntryPointAbi } from "./abi/EntryPointAbi.js" +import { Logger, type SmartAccountSigner, getChain } from "./index.js" +import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants.js" +import type { + BasSmartContractAccountProps, + BatchUserOperationCallData, + ISmartContractAccount, + SignTypedDataParams +} from "./utils/Types.js" +import { wrapSignatureWith6492 } from "./utils/Utils.js" + +export enum DeploymentState { + UNDEFINED = "0x0", + NOT_DEPLOYED = "0x1", + DEPLOYED = "0x2" +} + +export abstract class BaseSmartContractAccount< + TSigner extends SmartAccountSigner = SmartAccountSigner +> implements ISmartContractAccount<TSigner> +{ + protected factoryAddress: Address + + protected deploymentState: DeploymentState = DeploymentState.UNDEFINED + + protected accountAddress?: Address + + protected accountInitCode?: Hex + + protected signer: TSigner + + protected entryPoint: GetContractReturnType< + typeof EntryPointAbi, + PublicClient + > + + protected entryPointAddress: Address + + readonly rpcProvider: PublicClient + + constructor(params: BasSmartContractAccountProps) { + this.entryPointAddress = + params.entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS + + this.rpcProvider = createPublicClient({ + chain: params.viemChain ?? getChain(params.chainId), + transport: http( + params.rpcUrl || getChain(params.chainId).rpcUrls.default.http[0] + ) + }) as PublicClient + + this.accountAddress = params.accountAddress + this.factoryAddress = params.factoryAddress + this.signer = params.signer as TSigner + this.accountInitCode = params.initCode + + this.entryPoint = getContract({ + address: this.entryPointAddress, + abi: EntryPointAbi, + client: this.rpcProvider as PublicClient + }) + } + + //#region abstract-methods + + /** + * This method should return a signature that will not `revert` during validation. + * It does not have to pass validation, just not cause the contract to revert. + * This is required for gas estimation so that the gas estimate are accurate. + * + */ + abstract getDummySignature(): Hash + + /** + * this method should return the abi encoded function data for a call to your contract's `execute` method + * + * @param target -- equivalent to `to` in a normal transaction + * @param value -- equivalent to `value` in a normal transaction + * @param data -- equivalent to `data` in a normal transaction + * @returns abi encoded function data for a call to your contract's `execute` method + */ + abstract encodeExecute( + target: string, + value: bigint, + data: string + ): Promise<Hash> + + /** + * this should return an ERC-191 compliant message and is used to sign UO Hashes + * + * @param msg -- the message to sign + */ + abstract signMessage(msg: string | Uint8Array): Promise<Hash> + + /** + * this should return the init code that will be used to create an account if one does not exist. + * This is the concatenation of the account's factory address and the abi encoded function data of the account factory's `createAccount` method. + * https://github.com/eth-infinitism/account-abstraction/blob/abff2aca61a8f0934e533d0d352978055fddbd96/contracts/core/SenderCreator.sol#L12 + */ + protected abstract getAccountInitCode(): Promise<Hash> + + //#endregion abstract-methods + + //#region optional-methods + + /** + * If your account handles 1271 signatures of personal_sign differently + * than it does UserOperations, you can implement two different approaches to signing + * + * @param uoHash -- The hash of the UserOperation to sign + * @returns the signature of the UserOperation + */ + async signUserOperationHash(uoHash: Hash): Promise<Hash> { + return this.signMessage(uoHash) + } + + /** + * If your contract supports signing and verifying typed data, + * you should implement this method. + * + * @param _params -- Typed Data params to sign + */ + async signTypedData(_params: SignTypedDataParams): Promise<`0x${string}`> { + throw new Error("signTypedData not supported") + } + + /** + * This method should wrap the result of `signMessage` as per + * [EIP-6492](https://eips.ethereum.org/EIPS/eip-6492) + * + * @param msg -- the message to sign + */ + async signMessageWith6492(msg: string | Uint8Array): Promise<`0x${string}`> { + const [isDeployed, signature] = await Promise.all([ + this.isAccountDeployed(), + this.signMessage(msg) + ]) + + return this.create6492Signature(isDeployed, signature) + } + + /** + * Similar to the signMessageWith6492 method above, + * this method should wrap the result of `signTypedData` as per + * [EIP-6492](https://eips.ethereum.org/EIPS/eip-6492) + * + * @param params -- Typed Data params to sign + */ + async signTypedDataWith6492( + params: SignTypedDataParams + ): Promise<`0x${string}`> { + const [isDeployed, signature] = await Promise.all([ + this.isAccountDeployed(), + this.signTypedData(params) + ]) + + return this.create6492Signature(isDeployed, signature) + } + + /** + * Not all contracts support batch execution. + * If your contract does, this method should encode a list of + * transactions into the call data that will be passed to your + * contract's batch execution method. + * + * @param _txs -- the transactions to batch execute + */ + async encodeBatchExecute( + _txs: BatchUserOperationCallData + ): Promise<`0x${string}`> { + throw new Error("Batch execution not supported") + } + + /** + * If your contract supports UUPS, you can implement this method which can be + * used to upgrade the implementation of the account. + * + * @param upgradeToImplAddress -- the implementation address of the contract you want to upgrade to + * @param upgradeToInitData -- the initialization data required by that account + */ + encodeUpgradeToAndCall = async ( + _upgradeToImplAddress: Address, + _upgradeToInitData: Hex + ): Promise<Hex> => { + throw new Error("Upgrade ToAndCall Not Supported") + } + //#endregion optional-methods + + // Extra implementations + async getNonce(): Promise<bigint> { + if (!(await this.isAccountDeployed())) { + return 0n + } + const address = await this.getAddress() + return this.entryPoint.read.getNonce([address, BigInt(0)]) + } + + async getInitCode(): Promise<Hex> { + if (this.deploymentState === DeploymentState.DEPLOYED) { + return "0x" + } + + const contractCode = await this.rpcProvider.getBytecode({ + address: await this.getAddress() + }) + + if ((contractCode?.length ?? 0) > 2) { + this.deploymentState = DeploymentState.DEPLOYED + return "0x" + } + + this.deploymentState = DeploymentState.NOT_DEPLOYED + + return this._getAccountInitCode() + } + + async getAddress(): Promise<Address> { + if (!this.accountAddress) { + const initCode = await this._getAccountInitCode() + Logger.log("[BaseSmartContractAccount](getAddress) initCode: ", initCode) + try { + await this.entryPoint.simulate.getSenderAddress([initCode]) + } catch (err: any) { + Logger.log( + "[BaseSmartContractAccount](getAddress) getSenderAddress err: ", + err + ) + + if (err.cause?.data?.errorName === "SenderAddressResult") { + this.accountAddress = err.cause.data.args[0] as Address + Logger.log( + "[BaseSmartContractAccount](getAddress) entryPoint.getSenderAddress result:", + this.accountAddress + ) + return this.accountAddress + } + + if (err.details === "Invalid URL") { + throw new Error("Invalid URL") + } + } + + throw new Error("Failed to get counterfactual account address") + } + + return this.accountAddress + } + + extend = <R>(fn: (self: this) => R): this & R => { + const extended = fn(this) as any + // this should make it so extensions can't overwrite the base methods + for (const key in this) { + delete extended[key] + } + return Object.assign(this, extended) + } + + getSigner(): TSigner { + return this.signer + } + + getFactoryAddress(): Address { + return this.factoryAddress + } + + getEntryPointAddress(): Address { + return this.entryPointAddress + } + + async isAccountDeployed(): Promise<boolean> { + return (await this.getDeploymentState()) === DeploymentState.DEPLOYED + } + + async getDeploymentState(): Promise<DeploymentState> { + if (this.deploymentState === DeploymentState.UNDEFINED) { + const initCode = await this.getInitCode() + return initCode === "0x" + ? DeploymentState.DEPLOYED + : DeploymentState.NOT_DEPLOYED + } + return this.deploymentState + } + + /** + * https://eips.ethereum.org/EIPS/eip-4337#first-time-account-creation + * The initCode field (if non-zero length) is parsed as a 20-byte address, + * followed by calldata to pass to this address. + * The factory address is the first 40 char after the 0x, and the callData is the rest. + */ + protected async parseFactoryAddressFromAccountInitCode(): Promise< + [Address, Hex] + > { + const initCode = await this._getAccountInitCode() + const factoryAddress = `0x${initCode.substring(2, 42)}` as Address + const factoryCalldata = `0x${initCode.substring(42)}` as Hex + return [factoryAddress, factoryCalldata] + } + + protected async getImplementationAddress(): Promise<"0x0" | Address> { + const accountAddress = await this.getAddress() + + const storage = await this.rpcProvider.getStorageAt({ + address: accountAddress, + // This is the default slot for the implementation address for Proxies + slot: "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" + }) + + if (storage == null) { + throw new Error( + "Failed to get storage slot 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" + ) + } + + return trim(storage) + } + + private async _getAccountInitCode(): Promise<Hash> { + return this.accountInitCode ?? this.getAccountInitCode() + } + + private async create6492Signature( + isDeployed: boolean, + signature: Hash + ): Promise<Hash> { + if (isDeployed) { + return signature + } + + const [factoryAddress, factoryCalldata] = + await this.parseFactoryAddressFromAccountInitCode() + + Logger.log( + `[BaseSmartContractAccount](create6492Signature)\ + factoryAddress: ${factoryAddress}, factoryCalldata: ${factoryCalldata}` + ) + + return wrapSignatureWith6492({ + factoryAddress, + factoryCalldata, + signature + }) + } +} diff --git a/packages/account/src/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts similarity index 55% rename from packages/account/src/BiconomySmartAccountV2.ts rename to src/account/BiconomySmartAccountV2.ts index 465054880..f92040cfb 100644 --- a/packages/account/src/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -1,159 +1,205 @@ import { - Hex, - keccak256, - encodePacked, - getCreate2Address, - encodeAbiParameters, - parseAbiParameters, - toHex, - toBytes, - encodeFunctionData, - PublicClient, - createPublicClient, http, + type GetContractReturnType, + type Hex, + type PublicClient, concatHex, - GetContractReturnType, - getContract, + createPublicClient, decodeFunctionData, - parseAbi, + encodeAbiParameters, + encodeFunctionData, + encodePacked, formatUnits, -} from "viem"; + getContract, + getCreate2Address, + keccak256, + parseAbi, + parseAbiParameters, + toBytes, + toHex +} from "viem" +import type { IBundler } from "../bundler/IBundler.js" import { - BaseSmartContractAccount, - getChain, - type BigNumberish, - type UserOperationStruct, - BatchUserOperationCallData, - SmartAccountSigner, -} from "@alchemy/aa-core"; -import { isNullOrUndefined, isValidRpcUrl, packUserOp, compareChainIds, addressEquals } from "./utils/Utils.js"; -import { BaseValidationModule, ModuleInfo, SendUserOpParams, createECDSAOwnershipValidationModule } from "@biconomy/modules"; + Bundler, + type UserOpResponse, + extractChainIdFromBundlerUrl +} from "../bundler/index.js" +import { + BaseValidationModule, + type ModuleInfo, + type SendUserOpParams, + createECDSAOwnershipValidationModule +} from "../modules" import { - IHybridPaymaster, - IPaymaster, + BiconomyPaymaster, + type FeeQuotesOrDataDto, + type FeeQuotesOrDataResponse, + type IHybridPaymaster, + type IPaymaster, Paymaster, PaymasterMode, - SponsorUserOperationDto, - Bundler, - IBundler, - UserOpResponse, - extractChainIdFromBundlerUrl, + type SponsorUserOperationDto +} from "../paymaster" +import { + type BigNumberish, + Logger, + type SmartAccountSigner, + type StateOverrideSet, + type UserOperationStruct, convertSigner, - NATIVE_TOKEN_ALIAS, -} from "./index.js"; + getChain +} from "./" +import { BaseSmartContractAccount } from "./BaseSmartContractAccount.js" +import { AccountResolverAbi } from "./abi/AccountResolver.js" +import { BiconomyFactoryAbi } from "./abi/Factory.js" +import { BiconomyAccountAbi } from "./abi/SmartAccount.js" import { - BiconomyTokenPaymasterRequest, + ADDRESS_RESOLVER_ADDRESS, + ADDRESS_ZERO, + BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, + DEFAULT_BICONOMY_FACTORY_ADDRESS, + DEFAULT_ENTRYPOINT_ADDRESS, + DEFAULT_FALLBACK_HANDLER_ADDRESS, + ERC20_ABI, + ERROR_MESSAGES, + NATIVE_TOKEN_ALIAS, + PROXY_CREATION_CODE +} from "./utils/Constants.js" +import type { + BalancePayload, + BatchUserOperationCallData, BiconomySmartAccountV2Config, - CounterFactualAddressParam, + BiconomySmartAccountV2ConfigConstructorProps, + BiconomyTokenPaymasterRequest, BuildUserOpOptions, + CounterFactualAddressParam, NonceOptions, - Transaction, - QueryParamsForAddressResolver, - BiconomySmartAccountV2ConfigConstructorProps, PaymasterUserOperationDto, + QueryParamsForAddressResolver, SimulationType, - BalancePayload, SupportedToken, - WithdrawalRequest, -} from "./utils/Types.js"; + Transaction, + WithdrawalRequest +} from "./utils/Types.js" import { - ADDRESS_RESOLVER_ADDRESS, - BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, - DEFAULT_BICONOMY_FACTORY_ADDRESS, - DEFAULT_FALLBACK_HANDLER_ADDRESS, - PROXY_CREATION_CODE, - ADDRESS_ZERO, - DEFAULT_ENTRYPOINT_ADDRESS, - ERROR_MESSAGES, - ERC20_ABI, -} from "./utils/Constants.js"; -import { BiconomyFactoryAbi } from "./abi/Factory.js"; -import { BiconomyAccountAbi } from "./abi/SmartAccount.js"; -import { AccountResolverAbi } from "./abi/AccountResolver.js"; -import { Logger, StateOverrideSet } from "@biconomy/common"; -import { BiconomyPaymaster, FeeQuotesOrDataDto, FeeQuotesOrDataResponse } from "@biconomy/paymaster"; + addressEquals, + compareChainIds, + isNullOrUndefined, + isValidRpcUrl, + packUserOp +} from "./utils/Utils.js" -type UserOperationKey = keyof UserOperationStruct; +type UserOperationKey = keyof UserOperationStruct export class BiconomySmartAccountV2 extends BaseSmartContractAccount { - private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001"; + private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001" - private index: number; + private index: number - private chainId: number; + private chainId: number - private provider: PublicClient; + private provider: PublicClient - paymaster?: IPaymaster; + paymaster?: IPaymaster - bundler?: IBundler; + bundler?: IBundler - private accountContract?: GetContractReturnType<typeof BiconomyAccountAbi, PublicClient>; + private accountContract?: GetContractReturnType< + typeof BiconomyAccountAbi, + PublicClient + > - private defaultFallbackHandlerAddress: Hex; + private defaultFallbackHandlerAddress: Hex - private implementationAddress: Hex; + private implementationAddress: Hex - private scanForUpgradedAccountsFromV1!: boolean; + private scanForUpgradedAccountsFromV1!: boolean - private maxIndexForScan!: number; + private maxIndexForScan!: number // Validation module responsible for account deployment initCode. This acts as a default authorization module. - defaultValidationModule!: BaseValidationModule; + defaultValidationModule!: BaseValidationModule // Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature. - activeValidationModule!: BaseValidationModule; + activeValidationModule!: BaseValidationModule - private constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2ConfigConstructorProps) { + private constructor( + readonly biconomySmartAccountConfig: BiconomySmartAccountV2ConfigConstructorProps + ) { super({ ...biconomySmartAccountConfig, - chain: biconomySmartAccountConfig.viemChain ?? getChain(biconomySmartAccountConfig.chainId), - rpcClient: biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0], - entryPointAddress: (biconomySmartAccountConfig.entryPointAddress as Hex) ?? DEFAULT_ENTRYPOINT_ADDRESS, - accountAddress: (biconomySmartAccountConfig.accountAddress as Hex) ?? undefined, - factoryAddress: biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS, - }); - - this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; - this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule; - - this.index = biconomySmartAccountConfig.index ?? 0; - this.chainId = biconomySmartAccountConfig.chainId; - this.bundler = biconomySmartAccountConfig.bundler; - this.implementationAddress = biconomySmartAccountConfig.implementationAddress ?? (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex); + chain: + biconomySmartAccountConfig.viemChain ?? + getChain(biconomySmartAccountConfig.chainId), + rpcClient: + biconomySmartAccountConfig.rpcUrl || + getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0], + entryPointAddress: + (biconomySmartAccountConfig.entryPointAddress as Hex) ?? + DEFAULT_ENTRYPOINT_ADDRESS, + accountAddress: + (biconomySmartAccountConfig.accountAddress as Hex) ?? undefined, + factoryAddress: + biconomySmartAccountConfig.factoryAddress ?? + DEFAULT_BICONOMY_FACTORY_ADDRESS + }) + + this.defaultValidationModule = + biconomySmartAccountConfig.defaultValidationModule + this.activeValidationModule = + biconomySmartAccountConfig.activeValidationModule + + this.index = biconomySmartAccountConfig.index ?? 0 + this.chainId = biconomySmartAccountConfig.chainId + this.bundler = biconomySmartAccountConfig.bundler + this.implementationAddress = + biconomySmartAccountConfig.implementationAddress ?? + (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex) if (biconomySmartAccountConfig.paymasterUrl) { this.paymaster = new Paymaster({ - paymasterUrl: biconomySmartAccountConfig.paymasterUrl, - }); + paymasterUrl: biconomySmartAccountConfig.paymasterUrl + }) } else if (biconomySmartAccountConfig.biconomyPaymasterApiKey) { this.paymaster = new Paymaster({ - paymasterUrl: `https://paymaster.biconomy.io/api/v1/${biconomySmartAccountConfig.chainId}/${biconomySmartAccountConfig.biconomyPaymasterApiKey}`, - }); + paymasterUrl: `https://paymaster.biconomy.io/api/v1/${biconomySmartAccountConfig.chainId}/${biconomySmartAccountConfig.biconomyPaymasterApiKey}` + }) } else { - this.paymaster = biconomySmartAccountConfig.paymaster; + this.paymaster = biconomySmartAccountConfig.paymaster } - this.bundler = biconomySmartAccountConfig.bundler; + this.bundler = biconomySmartAccountConfig.bundler const defaultFallbackHandlerAddress = - this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS ? DEFAULT_FALLBACK_HANDLER_ADDRESS : biconomySmartAccountConfig.defaultFallbackHandler; + this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS + ? DEFAULT_FALLBACK_HANDLER_ADDRESS + : biconomySmartAccountConfig.defaultFallbackHandler if (!defaultFallbackHandlerAddress) { - throw new Error("Default Fallback Handler address is not provided"); + throw new Error("Default Fallback Handler address is not provided") } - this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress; + this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress // Added bang operator to avoid null check as the constructor have these params as optional - this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule!; - this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule!; + this.defaultValidationModule = + // biome-ignore lint/style/noNonNullAssertion: <explanation> + biconomySmartAccountConfig.defaultValidationModule! + this.activeValidationModule = + // biome-ignore lint/style/noNonNullAssertion: <explanation> + biconomySmartAccountConfig.activeValidationModule! this.provider = createPublicClient({ - chain: biconomySmartAccountConfig.viemChain ?? getChain(biconomySmartAccountConfig.chainId), - transport: http(biconomySmartAccountConfig.rpcUrl || getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0]), - }); - - this.scanForUpgradedAccountsFromV1 = biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false; - this.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10; + chain: + biconomySmartAccountConfig.viemChain ?? + getChain(biconomySmartAccountConfig.chainId), + transport: http( + biconomySmartAccountConfig.rpcUrl || + getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0] + ) + }) + + this.scanForUpgradedAccountsFromV1 = + biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false + this.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10 } /** @@ -172,11 +218,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * import { createClient } from "viem" * import { createSmartAccountClient, BiconomySmartAccountV2 } from "@biconomy/account" * import { createWalletClient, http } from "viem"; - * import { polygonMumbai } from "viem/chains"; + * import { polygonAmoy } from "viem/chains"; * * const signer = createWalletClient({ * account, - * chain: polygonMumbai, + * chain: polygonAmoy, * transport: http(), * }); * @@ -189,50 +235,71 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); * */ - public static async create(biconomySmartAccountConfig: BiconomySmartAccountV2Config): Promise<BiconomySmartAccountV2> { - let chainId = biconomySmartAccountConfig.chainId; - let rpcUrl = biconomySmartAccountConfig.rpcUrl; - let resolvedSmartAccountSigner!: SmartAccountSigner; + public static async create( + biconomySmartAccountConfig: BiconomySmartAccountV2Config + ): Promise<BiconomySmartAccountV2> { + let chainId = biconomySmartAccountConfig.chainId + let rpcUrl = biconomySmartAccountConfig.rpcUrl + let resolvedSmartAccountSigner!: SmartAccountSigner // Signer needs to be initialised here before defaultValidationModule is set if (biconomySmartAccountConfig.signer) { - const signerResult = await convertSigner(biconomySmartAccountConfig.signer, !!chainId); + const signerResult = await convertSigner( + biconomySmartAccountConfig.signer, + !!chainId, + rpcUrl + ) if (!chainId && !!signerResult.chainId) { - chainId = signerResult.chainId; + chainId = signerResult.chainId } if (!rpcUrl && !!signerResult.rpcUrl) { if (isValidRpcUrl(signerResult.rpcUrl)) { - rpcUrl = signerResult.rpcUrl; + rpcUrl = signerResult.rpcUrl } } - resolvedSmartAccountSigner = signerResult.signer; + resolvedSmartAccountSigner = signerResult.signer } if (!chainId) { // Get it from bundler if (biconomySmartAccountConfig.bundlerUrl) { - chainId = extractChainIdFromBundlerUrl(biconomySmartAccountConfig.bundlerUrl); + chainId = extractChainIdFromBundlerUrl( + biconomySmartAccountConfig.bundlerUrl + ) } else if (biconomySmartAccountConfig.bundler) { - const bundlerUrlFromBundler = biconomySmartAccountConfig.bundler.getBundlerUrl(); - chainId = extractChainIdFromBundlerUrl(bundlerUrlFromBundler); + const bundlerUrlFromBundler = + biconomySmartAccountConfig.bundler.getBundlerUrl() + chainId = extractChainIdFromBundlerUrl(bundlerUrlFromBundler) } } if (!chainId) { - throw new Error("chainId required"); + throw new Error("chainId required") } - const bundler: IBundler = biconomySmartAccountConfig.bundler ?? new Bundler({ bundlerUrl: biconomySmartAccountConfig.bundlerUrl!, chainId }); - let defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule; + const bundler: IBundler = + biconomySmartAccountConfig.bundler ?? + new Bundler({ + // biome-ignore lint/style/noNonNullAssertion: <explanation> + bundlerUrl: biconomySmartAccountConfig.bundlerUrl!, + chainId + }) + let defaultValidationModule = + biconomySmartAccountConfig.defaultValidationModule // Note: If no module is provided, we will use ECDSA_OWNERSHIP as default if (!defaultValidationModule) { - const newModule = await createECDSAOwnershipValidationModule({ signer: resolvedSmartAccountSigner! }); - defaultValidationModule = newModule; + const newModule = await createECDSAOwnershipValidationModule({ + // biome-ignore lint/style/noNonNullAssertion: <explanation> + signer: resolvedSmartAccountSigner! + }) + defaultValidationModule = newModule } - const activeValidationModule = biconomySmartAccountConfig?.activeValidationModule ?? defaultValidationModule; + const activeValidationModule = + biconomySmartAccountConfig?.activeValidationModule ?? + defaultValidationModule if (!resolvedSmartAccountSigner) { - resolvedSmartAccountSigner = await activeValidationModule.getSigner(); + resolvedSmartAccountSigner = await activeValidationModule.getSigner() } if (!resolvedSmartAccountSigner) { - throw new Error("signer required"); + throw new Error("signer required") } const config: BiconomySmartAccountV2ConfigConstructorProps = { ...biconomySmartAccountConfig, @@ -241,34 +308,40 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { chainId, bundler, signer: resolvedSmartAccountSigner, - rpcUrl, - }; + rpcUrl + } // We check if chain ids match (skip this if chainId is passed by in the config) // This check is at the end of the function for cases when the signer is not passed in the config but a validation modules is and we get the signer from the validation module in this case if (!biconomySmartAccountConfig.chainId) { - await compareChainIds(biconomySmartAccountConfig.signer || resolvedSmartAccountSigner, config, false); + await compareChainIds( + biconomySmartAccountConfig.signer || resolvedSmartAccountSigner, + config, + false + ) } - return new BiconomySmartAccountV2(config); + return new BiconomySmartAccountV2(config) } // Calls the getCounterFactualAddress - async getAddress(params?: CounterFactualAddressParam): Promise<Hex> { + override async getAddress(params?: CounterFactualAddressParam): Promise<Hex> { if (this.accountAddress == null) { // means it needs deployment - this.accountAddress = await this.getCounterFactualAddress(params); + this.accountAddress = await this.getCounterFactualAddress(params) } - return this.accountAddress; + return this.accountAddress } // Calls the getCounterFactualAddress - async getAccountAddress(params?: CounterFactualAddressParam): Promise<`0x${string}`> { - if (this.accountAddress == null || this.accountAddress == undefined) { + async getAccountAddress( + params?: CounterFactualAddressParam + ): Promise<`0x${string}`> { + if (this.accountAddress == null || this.accountAddress === undefined) { // means it needs deployment - this.accountAddress = await this.getCounterFactualAddress(params); + this.accountAddress = await this.getCounterFactualAddress(params) } - return this.accountAddress; + return this.accountAddress } /** @@ -284,25 +357,25 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * import { createClient } from "viem" * import { createSmartAccountClient } from "@biconomy/account" * import { createWalletClient, http } from "viem"; - * import { polygonMumbai } from "viem/chains"; + * import { polygonAmoy } from "viem/chains"; * * const signer = createWalletClient({ * account, - * chain: polygonMumbai, + * chain: polygonAmoy, * transport: http(), * }); * - * const usdt = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + * const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a"; * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); - * const [usdtBalanceFromSmartAccount, nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalances([usdt]); + * const [tokenBalanceFromSmartAccount, nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalances([token]); * - * console.log(usdtBalanceFromSmartAccount); + * console.log(tokenBalanceFromSmartAccount); * // { * // amount: 1000000000000000n, * // decimals: 6, - * // address: "0xda5289fcaaf71d52a80a254da614a192b693e977", + * // address: "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a", * // formattedAmount: "1000000", - * // chainId: 80001 + * // chainId: 80002 * // } * * // or to get the nativeToken balance @@ -315,26 +388,35 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * // decimals: 18, * // address: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", * // formattedAmount: "1", - * // chainId: 80001 + * // chainId: 80002 * // } * */ - public async getBalances(addresses?: Array<Hex>): Promise<Array<BalancePayload>> { - const accountAddress = await this.getAccountAddress(); - const result: BalancePayload[] = []; + public async getBalances( + addresses?: Array<Hex> + ): Promise<Array<BalancePayload>> { + const accountAddress = await this.getAccountAddress() + const result: BalancePayload[] = [] if (addresses) { const tokenContracts = addresses.map((address) => getContract({ address, abi: parseAbi(ERC20_ABI), - client: this.provider, - }), - ); - - const balancePromises = tokenContracts.map((tokenContract) => tokenContract.read.balanceOf([accountAddress])) as Promise<bigint>[]; - const decimalsPromises = tokenContracts.map((tokenContract) => tokenContract.read.decimals()) as Promise<number>[]; - const [balances, decimalsPerToken] = await Promise.all([Promise.all(balancePromises), Promise.all(decimalsPromises)]); + client: this.provider + }) + ) + + const balancePromises = tokenContracts.map((tokenContract) => + tokenContract.read.balanceOf([accountAddress]) + ) as Promise<bigint>[] + const decimalsPromises = tokenContracts.map((tokenContract) => + tokenContract.read.decimals() + ) as Promise<number>[] + const [balances, decimalsPerToken] = await Promise.all([ + Promise.all(balancePromises), + Promise.all(decimalsPromises) + ]) balances.forEach((amount, index) => result.push({ @@ -342,22 +424,22 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { decimals: decimalsPerToken[index], address: addresses[index], formattedAmount: formatUnits(amount, decimalsPerToken[index]), - chainId: this.chainId, - }), - ); + chainId: this.chainId + }) + ) } - const balance = await this.provider.getBalance({ address: accountAddress }); + const balance = await this.provider.getBalance({ address: accountAddress }) result.push({ amount: balance, decimals: 18, address: NATIVE_TOKEN_ALIAS, formattedAmount: formatUnits(balance, 18), - chainId: this.chainId, - }); + chainId: this.chainId + }) - return result; + return result } /** @@ -374,7 +456,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * import { createWalletClient, http } from "viem"; * import { polygonMumbai } from "viem/chains"; * - * const USDT = "0xda5289fcaaf71d52a80a254da614a192b693e977"; + * const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a"; * const signer = createWalletClient({ * account, * chain: polygonMumbai, @@ -385,7 +467,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * const { wait } = await smartAccount.withdraw( * [ - * { address: USDT }, // omit the amount to withdraw the full balance + * { address: token }, // omit the amount to withdraw the full balance * { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } * ], * account.pubKey, // Default recipient used if no recipient is present in the withdrawal request @@ -405,166 +487,219 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { public async withdraw( withdrawalRequests?: WithdrawalRequest[] | null, defaultRecipient?: Hex | null, - buildUseropDto?: BuildUserOpOptions, + buildUseropDto?: BuildUserOpOptions ): Promise<UserOpResponse> { - const accountAddress = this.accountAddress ?? (await this.getAccountAddress()); + const accountAddress = + this.accountAddress ?? (await this.getAccountAddress()) - if (!defaultRecipient && withdrawalRequests?.some(({ recipient }) => !recipient)) { - throw new Error(ERROR_MESSAGES.NO_RECIPIENT); + if ( + !defaultRecipient && + withdrawalRequests?.some(({ recipient }) => !recipient) + ) { + throw new Error(ERROR_MESSAGES.NO_RECIPIENT) } // Remove the native token from the withdrawal requests - let tokenRequests = withdrawalRequests?.filter(({ address }) => !addressEquals(address, NATIVE_TOKEN_ALIAS)) ?? []; + let tokenRequests = + withdrawalRequests?.filter( + ({ address }) => !addressEquals(address, NATIVE_TOKEN_ALIAS) + ) ?? [] // Check if the amount is not present in all withdrawal requests - const shouldFetchMaxBalances = tokenRequests.some(({ amount }) => !amount); + const shouldFetchMaxBalances = tokenRequests.some(({ amount }) => !amount) // Get the balances of the tokens if the amount is not present in the withdrawal requests if (shouldFetchMaxBalances) { - const balances = await this.getBalances(tokenRequests.map(({ address }) => address)); + const balances = await this.getBalances( + tokenRequests.map(({ address }) => address) + ) tokenRequests = tokenRequests.map(({ amount, address }, i) => ({ address, - amount: amount ?? balances[i].amount, - })); + amount: amount ?? balances[i].amount + })) } // Create the transactions - const txs: Transaction[] = tokenRequests.map(({ address, amount, recipient: recipientFromRequest }) => ({ - to: address, - data: encodeFunctionData({ - abi: parseAbi(ERC20_ABI), - functionName: "transfer", - args: [recipientFromRequest || defaultRecipient, amount], - }), - })); + const txs: Transaction[] = tokenRequests.map( + ({ address, amount, recipient: recipientFromRequest }) => ({ + to: address, + data: encodeFunctionData({ + abi: parseAbi(ERC20_ABI), + functionName: "transfer", + args: [recipientFromRequest || defaultRecipient, amount] + }) + }) + ) // Check if eth alias is present in the original withdrawal requests - const nativeTokenRequest = withdrawalRequests?.find(({ address }) => addressEquals(address, NATIVE_TOKEN_ALIAS)); - const hasNoRequests = !withdrawalRequests?.length; + const nativeTokenRequest = withdrawalRequests?.find(({ address }) => + addressEquals(address, NATIVE_TOKEN_ALIAS) + ) + const hasNoRequests = !withdrawalRequests?.length if (!!nativeTokenRequest || hasNoRequests) { // Check that an amount is present in the withdrawal request, if no paymaster service data is present, as max amounts cannot be calculated without a paymaster. - if (!nativeTokenRequest?.amount && !buildUseropDto?.paymasterServiceData?.mode) { - throw new Error(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT); + if ( + !nativeTokenRequest?.amount && + !buildUseropDto?.paymasterServiceData?.mode + ) { + throw new Error(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT) } // get eth balance if not present in withdrawal requests - const nativeTokenAmountToWithdraw = nativeTokenRequest?.amount ?? (await this.provider.getBalance({ address: accountAddress })); + const nativeTokenAmountToWithdraw = + nativeTokenRequest?.amount ?? + (await this.provider.getBalance({ address: accountAddress })) txs.push({ to: (nativeTokenRequest?.recipient ?? defaultRecipient) as Hex, - value: nativeTokenAmountToWithdraw, - }); + value: nativeTokenAmountToWithdraw + }) } - return this.sendTransaction(txs, buildUseropDto); + return this.sendTransaction(txs, buildUseropDto) } /** * Return the account's address. This value is valid even before deploying the contract. */ - async getCounterFactualAddress(params?: CounterFactualAddressParam): Promise<Hex> { - const validationModule = params?.validationModule ?? this.defaultValidationModule; - const index = params?.index ?? this.index; - - const maxIndexForScan = params?.maxIndexForScan ?? this.maxIndexForScan; + async getCounterFactualAddress( + params?: CounterFactualAddressParam + ): Promise<Hex> { + const validationModule = + params?.validationModule ?? this.defaultValidationModule + const index = params?.index ?? this.index + + const maxIndexForScan = params?.maxIndexForScan ?? this.maxIndexForScan // Review: default behavior - const scanForUpgradedAccountsFromV1 = params?.scanForUpgradedAccountsFromV1 ?? this.scanForUpgradedAccountsFromV1; + const scanForUpgradedAccountsFromV1 = + params?.scanForUpgradedAccountsFromV1 ?? + this.scanForUpgradedAccountsFromV1 // if it's intended to detect V1 upgraded accounts if (scanForUpgradedAccountsFromV1) { - const eoaSigner = await validationModule.getSigner(); - const eoaAddress = (await eoaSigner.getAddress()) as Hex; - const moduleAddress = validationModule.getAddress() as Hex; - const moduleSetupData = (await validationModule.getInitData()) as Hex; + const eoaSigner = await validationModule.getSigner() + const eoaAddress = (await eoaSigner.getAddress()) as Hex + const moduleAddress = validationModule.getAddress() as Hex + const moduleSetupData = (await validationModule.getInitData()) as Hex const queryParams = { eoaAddress, index, moduleAddress, moduleSetupData, - maxIndexForScan, - }; - const accountAddress = await this.getV1AccountsUpgradedToV2(queryParams); + maxIndexForScan + } + const accountAddress = await this.getV1AccountsUpgradedToV2(queryParams) if (accountAddress !== ADDRESS_ZERO) { - return accountAddress; + return accountAddress } } - const counterFactualAddressV2 = await this.getCounterFactualAddressV2({ validationModule, index }); - return counterFactualAddressV2; + const counterFactualAddressV2 = await this.getCounterFactualAddressV2({ + validationModule, + index + }) + return counterFactualAddressV2 } - private async getCounterFactualAddressV2(params?: CounterFactualAddressParam): Promise<Hex> { - const validationModule = params?.validationModule ?? this.defaultValidationModule; - const index = params?.index ?? this.index; + private async getCounterFactualAddressV2( + params?: CounterFactualAddressParam + ): Promise<Hex> { + const validationModule = + params?.validationModule ?? this.defaultValidationModule + const index = params?.index ?? this.index try { const initCalldata = encodeFunctionData({ abi: BiconomyAccountAbi, functionName: "init", - args: [this.defaultFallbackHandlerAddress, validationModule.getAddress() as Hex, (await validationModule.getInitData()) as Hex], - }); - - const proxyCreationCodeHash = keccak256(encodePacked(["bytes", "uint256"], [PROXY_CREATION_CODE, BigInt(this.implementationAddress)])); - - const salt = keccak256(encodePacked(["bytes32", "uint256"], [keccak256(initCalldata), BigInt(index)])); + args: [ + this.defaultFallbackHandlerAddress, + validationModule.getAddress() as Hex, + (await validationModule.getInitData()) as Hex + ] + }) + + const proxyCreationCodeHash = keccak256( + encodePacked( + ["bytes", "uint256"], + [PROXY_CREATION_CODE, BigInt(this.implementationAddress)] + ) + ) + + const salt = keccak256( + encodePacked( + ["bytes32", "uint256"], + [keccak256(initCalldata), BigInt(index)] + ) + ) const counterFactualAddress = getCreate2Address({ from: this.factoryAddress, salt: salt, - bytecodeHash: proxyCreationCodeHash, - }); + bytecodeHash: proxyCreationCodeHash + }) - return counterFactualAddress; + return counterFactualAddress } catch (e) { - throw new Error(`Failed to get counterfactual address, ${e}`); + throw new Error(`Failed to get counterfactual address, ${e}`) } } - async _getAccountContract(): Promise<GetContractReturnType<typeof BiconomyAccountAbi, PublicClient>> { + async _getAccountContract(): Promise< + GetContractReturnType<typeof BiconomyAccountAbi, PublicClient> + > { if (this.accountContract == null) { this.accountContract = getContract({ address: await this.getAddress(), abi: BiconomyAccountAbi, - client: this.provider as PublicClient, - }); + client: this.provider as PublicClient + }) } - return this.accountContract; + return this.accountContract } isActiveValidationModuleDefined(): boolean { - if (!this.activeValidationModule) throw new Error("Must provide an instance of active validation module."); - return true; + if (!this.activeValidationModule) + throw new Error("Must provide an instance of active validation module.") + return true } isDefaultValidationModuleDefined(): boolean { - if (!this.defaultValidationModule) throw new Error("Must provide an instance of default validation module."); - return true; + if (!this.defaultValidationModule) + throw new Error("Must provide an instance of default validation module.") + return true } - setActiveValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { + setActiveValidationModule( + validationModule: BaseValidationModule + ): BiconomySmartAccountV2 { if (validationModule instanceof BaseValidationModule) { - this.activeValidationModule = validationModule; + this.activeValidationModule = validationModule } - return this; + return this } - setDefaultValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 { + setDefaultValidationModule( + validationModule: BaseValidationModule + ): BiconomySmartAccountV2 { if (validationModule instanceof BaseValidationModule) { - this.defaultValidationModule = validationModule; + this.defaultValidationModule = validationModule } - return this; + return this } - async getV1AccountsUpgradedToV2(params: QueryParamsForAddressResolver): Promise<Hex> { - const maxIndexForScan = params.maxIndexForScan ?? this.maxIndexForScan; + async getV1AccountsUpgradedToV2( + params: QueryParamsForAddressResolver + ): Promise<Hex> { + const maxIndexForScan = params.maxIndexForScan ?? this.maxIndexForScan const addressResolver = getContract({ address: ADDRESS_RESOLVER_ADDRESS, abi: AccountResolverAbi, client: { - public: this.provider as PublicClient, - }, - }); + public: this.provider as PublicClient + } + }) // Note: depending on moduleAddress and moduleSetupData passed call this. otherwise could call resolveAddresses() if (params.moduleAddress && params.moduleSetupData) { @@ -572,25 +707,27 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { params.eoaAddress, maxIndexForScan, params.moduleAddress, - params.moduleSetupData, - ]); + params.moduleSetupData + ]) const desiredV1Account = result.find( - (smartAccountInfo: { factoryVersion: string; currentVersion: string; deploymentIndex: { toString: () => any } }) => + (smartAccountInfo: { + factoryVersion: string + currentVersion: string + deploymentIndex: { toString: () => any } + }) => smartAccountInfo.factoryVersion === "v1" && smartAccountInfo.currentVersion === "2.0.0" && - Number(smartAccountInfo.deploymentIndex.toString()) === params.index, - ); + Number(smartAccountInfo.deploymentIndex.toString()) === params.index + ) if (desiredV1Account) { - const smartAccountAddress = desiredV1Account.accountAddress; - return smartAccountAddress; - } else { - return ADDRESS_ZERO; + const smartAccountAddress = desiredV1Account.accountAddress + return smartAccountAddress } - } else { - return ADDRESS_ZERO; + return ADDRESS_ZERO } + return ADDRESS_ZERO } /** @@ -598,16 +735,20 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * This value holds the "factory" address, followed by this account's information */ async getAccountInitCode(): Promise<Hex> { - this.isDefaultValidationModuleDefined(); + this.isDefaultValidationModuleDefined() return concatHex([ this.factoryAddress as Hex, encodeFunctionData({ abi: BiconomyFactoryAbi, functionName: "deployCounterFactualAccount", - args: [this.defaultValidationModule.getAddress() as Hex, (await this.defaultValidationModule.getInitData()) as Hex, BigInt(this.index)], - }), - ]); + args: [ + this.defaultValidationModule.getAddress() as Hex, + (await this.defaultValidationModule.getInitData()) as Hex, + BigInt(this.index) + ] + }) + ]) } /** @@ -622,8 +763,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return encodeFunctionData({ abi: BiconomyAccountAbi, functionName: "execute_ncC", - args: [to, value, data], - }); + args: [to, value, data] + }) } /** @@ -633,56 +774,68 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param data represent array of data associated with each transaction * @returns encoded data for executeBatch function */ - async encodeExecuteBatch(to: Array<Hex>, value: Array<bigint>, data: Array<Hex>): Promise<Hex> { + async encodeExecuteBatch( + to: Array<Hex>, + value: Array<bigint>, + data: Array<Hex> + ): Promise<Hex> { return encodeFunctionData({ abi: BiconomyAccountAbi, functionName: "executeBatch_y6U", - args: [to, value, data], - }); + args: [to, value, data] + }) } - override async encodeBatchExecute(txs: BatchUserOperationCallData): Promise<Hex> { + override async encodeBatchExecute( + txs: BatchUserOperationCallData + ): Promise<Hex> { const [targets, datas, value] = txs.reduce( (accum, curr) => { - accum[0].push(curr.target); - accum[1].push(curr.data); - accum[2].push(curr.value || BigInt(0)); + accum[0].push(curr.target) + accum[1].push(curr.data) + accum[2].push(curr.value || BigInt(0)) - return accum; + return accum }, - [[], [], []] as [Hex[], Hex[], bigint[]], - ); + [[], [], []] as [Hex[], Hex[], bigint[]] + ) - return this.encodeExecuteBatch(targets, value, datas); + return this.encodeExecuteBatch(targets, value, datas) } // dummy signature depends on the validation module supplied. async getDummySignatures(params?: ModuleInfo): Promise<Hex> { - this.isActiveValidationModuleDefined(); - return (await this.activeValidationModule.getDummySignature(params)) as Hex; + this.isActiveValidationModuleDefined() + return (await this.activeValidationModule.getDummySignature(params)) as Hex } // TODO: review this getDummySignature(): Hex { - throw new Error("Method not implemented! Call getDummySignatures instead."); + throw new Error("Method not implemented! Call getDummySignatures instead.") } // Might use provided paymaster instance to get dummy data (from pm service) getDummyPaymasterData(): string { - return "0x"; + return "0x" } - validateUserOp(userOp: Partial<UserOperationStruct>, requiredFields: UserOperationKey[]): boolean { + validateUserOp( + userOp: Partial<UserOperationStruct>, + requiredFields: UserOperationKey[] + ): boolean { for (const field of requiredFields) { if (isNullOrUndefined(userOp[field])) { - throw new Error(`${String(field)} is missing in the UserOp`); + throw new Error(`${String(field)} is missing in the UserOp`) } } - return true; + return true } - async signUserOp(userOp: Partial<UserOperationStruct>, params?: SendUserOpParams): Promise<UserOperationStruct> { - this.isActiveValidationModuleDefined(); + async signUserOp( + userOp: Partial<UserOperationStruct>, + params?: SendUserOpParams + ): Promise<UserOperationStruct> { + this.isActiveValidationModuleDefined() const requiredFields: UserOperationKey[] = [ "sender", "nonce", @@ -693,90 +846,124 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { "preVerificationGas", "maxFeePerGas", "maxPriorityFeePerGas", - "paymasterAndData", - ]; - this.validateUserOp(userOp, requiredFields); - const userOpHash = await this.getUserOpHash(userOp); + "paymasterAndData" + ] + this.validateUserOp(userOp, requiredFields) + const userOpHash = await this.getUserOpHash(userOp) - const moduleSig = (await this.activeValidationModule.signUserOpHash(userOpHash, params)) as Hex; + const moduleSig = (await this.activeValidationModule.signUserOpHash( + userOpHash, + params + )) as Hex - const signatureWithModuleAddress = this.getSignatureWithModuleAddress(moduleSig, this.activeValidationModule.getAddress() as Hex); + const signatureWithModuleAddress = this.getSignatureWithModuleAddress( + moduleSig, + this.activeValidationModule.getAddress() as Hex + ) - userOp.signature = signatureWithModuleAddress; - return userOp as UserOperationStruct; + userOp.signature = signatureWithModuleAddress + return userOp as UserOperationStruct } - getSignatureWithModuleAddress(moduleSignature: Hex, moduleAddress?: Hex): Hex { - const moduleAddressToUse = moduleAddress ?? (this.activeValidationModule.getAddress() as Hex); - return encodeAbiParameters(parseAbiParameters("bytes, address"), [moduleSignature, moduleAddressToUse]); + getSignatureWithModuleAddress( + moduleSignature: Hex, + moduleAddress?: Hex + ): Hex { + const moduleAddressToUse = + moduleAddress ?? (this.activeValidationModule.getAddress() as Hex) + return encodeAbiParameters(parseAbiParameters("bytes, address"), [ + moduleSignature, + moduleAddressToUse + ]) } public async getPaymasterUserOp( userOp: Partial<UserOperationStruct>, - paymasterServiceData: PaymasterUserOperationDto, + paymasterServiceData: PaymasterUserOperationDto ): Promise<Partial<UserOperationStruct>> { if (paymasterServiceData.mode === PaymasterMode.SPONSORED) { - return this.getPaymasterAndData(userOp, paymasterServiceData); - } else if (paymasterServiceData.mode === PaymasterMode.ERC20) { + return this.getPaymasterAndData(userOp, paymasterServiceData) + } + if (paymasterServiceData.mode === PaymasterMode.ERC20) { if (paymasterServiceData?.feeQuote) { - const { feeQuote, spender, maxApproval = false } = paymasterServiceData; - Logger.log("there is a feeQuote: ", feeQuote); - if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED); - if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH); - if (paymasterServiceData.skipPatchCallData && paymasterServiceData.skipPatchCallData === true) { + const { feeQuote, spender, maxApproval = false } = paymasterServiceData + Logger.log("there is a feeQuote: ", feeQuote) + if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED) + if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH) + if ( + paymasterServiceData.skipPatchCallData && + paymasterServiceData.skipPatchCallData === true + ) { return this.getPaymasterAndData(userOp, { ...paymasterServiceData, - feeTokenAddress: feeQuote.tokenAddress, - }); + feeTokenAddress: feeQuote.tokenAddress + }) } const partialUserOp = await this.buildTokenPaymasterUserOp(userOp, { ...paymasterServiceData, spender, maxApproval, - feeQuote, - }); + feeQuote + }) return this.getPaymasterAndData(partialUserOp, { ...paymasterServiceData, feeTokenAddress: feeQuote.tokenAddress, - calculateGasLimits: true, // Always recommended and especially when using token paymaster - }); - } else if (paymasterServiceData?.preferredToken) { - const { preferredToken } = paymasterServiceData; - Logger.log("there is a preferred token: ", preferredToken); - const feeQuotesResponse = await this.getPaymasterFeeQuotesOrData(userOp, paymasterServiceData); - const spender = feeQuotesResponse.tokenPaymasterAddress; - const feeQuote = feeQuotesResponse.feeQuotes?.[0]; - if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED); - if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH); - return this.getPaymasterUserOp(userOp, { ...paymasterServiceData, feeQuote, spender }); // Recursively call getPaymasterUserOp with the feeQuote - } else { - Logger.log("ERC20 mode without feeQuote or preferredToken provided. Passing through unchanged."); - return userOp; + calculateGasLimits: true // Always recommended and especially when using token paymaster + }) + } + if (paymasterServiceData?.preferredToken) { + const { preferredToken } = paymasterServiceData + Logger.log("there is a preferred token: ", preferredToken) + const feeQuotesResponse = await this.getPaymasterFeeQuotesOrData( + userOp, + paymasterServiceData + ) + const spender = feeQuotesResponse.tokenPaymasterAddress + const feeQuote = feeQuotesResponse.feeQuotes?.[0] + if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED) + if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH) + return this.getPaymasterUserOp(userOp, { + ...paymasterServiceData, + feeQuote, + spender + }) // Recursively call getPaymasterUserOp with the feeQuote } + Logger.log( + "ERC20 mode without feeQuote or preferredToken provided. Passing through unchanged." + ) + return userOp } - throw new Error("Invalid paymaster mode"); + throw new Error("Invalid paymaster mode") } private async getPaymasterAndData( userOp: Partial<UserOperationStruct>, - paymasterServiceData: PaymasterUserOperationDto, + paymasterServiceData: PaymasterUserOperationDto ): Promise<Partial<UserOperationStruct>> { - const paymaster = this.paymaster as IHybridPaymaster<PaymasterUserOperationDto>; - const paymasterData = await paymaster.getPaymasterAndData(userOp, paymasterServiceData); - return { ...userOp, ...paymasterData }; + const paymaster = this + .paymaster as IHybridPaymaster<PaymasterUserOperationDto> + const paymasterData = await paymaster.getPaymasterAndData( + userOp, + paymasterServiceData + ) + return { ...userOp, ...paymasterData } } private async getPaymasterFeeQuotesOrData( userOp: Partial<UserOperationStruct>, - feeQuotesOrData: FeeQuotesOrDataDto, + feeQuotesOrData: FeeQuotesOrDataDto ): Promise<FeeQuotesOrDataResponse> { - const paymaster = this.paymaster as IHybridPaymaster<PaymasterUserOperationDto>; + const paymaster = this + .paymaster as IHybridPaymaster<PaymasterUserOperationDto> const tokenList = feeQuotesOrData?.preferredToken ? [feeQuotesOrData?.preferredToken] : feeQuotesOrData?.tokenList?.length ? feeQuotesOrData?.tokenList - : []; - return paymaster.getPaymasterFeeQuotesOrData(userOp, { ...feeQuotesOrData, tokenList }); + : [] + return paymaster.getPaymasterFeeQuotesOrData(userOp, { + ...feeQuotesOrData, + tokenList + }) } /** @@ -791,11 +978,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * import { createClient } from "viem" * import { createSmartAccountClient } from "@biconomy/account" * import { createWalletClient, http } from "viem"; - * import { polygonMumbai } from "viem/chains"; + * import { polygonAmoy } from "viem/chains"; * * const signer = createWalletClient({ * account, - * chain: polygonMumbai, + * chain: polygonAmoy, * transport: http(), * }); * @@ -828,12 +1015,18 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { */ public async getTokenFees( manyOrOneTransactions: Transaction | Transaction[], - buildUseropDto: BuildUserOpOptions, + buildUseropDto: BuildUserOpOptions ): Promise<FeeQuotesOrDataResponse> { - const txs = Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions : [manyOrOneTransactions]; - const userOp = await this.buildUserOp(txs, buildUseropDto); - if (!buildUseropDto.paymasterServiceData) throw new Error("paymasterServiceData was not provided"); - return this.getPaymasterFeeQuotesOrData(userOp, buildUseropDto.paymasterServiceData); + const txs = Array.isArray(manyOrOneTransactions) + ? manyOrOneTransactions + : [manyOrOneTransactions] + const userOp = await this.buildUserOp(txs, buildUseropDto) + if (!buildUseropDto.paymasterServiceData) + throw new Error("paymasterServiceData was not provided") + return this.getPaymasterFeeQuotesOrData( + userOp, + buildUseropDto.paymasterServiceData + ) } /** @@ -845,11 +1038,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * import { createClient } from "viem" * import { createSmartAccountClient } from "@biconomy/account" * import { createWalletClient, http } from "viem"; - * import { polygonMumbai } from "viem/chains"; + * import { polygonAmoy } from "viem/chains"; * * const signer = createWalletClient({ * account, - * chain: polygonMumbai, + * chain: polygonAmoy, * transport: http(), * }); * @@ -872,13 +1065,21 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { { data: "0x", value: BigInt(0), - to: await this.getAccountAddress(), + to: await this.getAccountAddress() }, { - paymasterServiceData: { mode: PaymasterMode.ERC20 }, - }, - ); - return (feeQuotesResponse?.feeQuotes ?? []).map(({ maxGasFee: _, maxGasFeeUSD: __, validUntil: ___, usdPayment: ____, ...rest }) => rest); + paymasterServiceData: { mode: PaymasterMode.ERC20 } + } + ) + return (feeQuotesResponse?.feeQuotes ?? []).map( + ({ + maxGasFee: _, + maxGasFeeUSD: __, + validUntil: ___, + usdPayment: ____, + ...rest + }) => rest + ) } /** @@ -899,11 +1100,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * import { createClient } from "viem" * import { createSmartAccountClient } from "@biconomy/account" * import { createWalletClient, http } from "viem"; - * import { polygonMumbai } from "viem/chains"; + * import { polygonAmoy } from "viem/chains"; * * const signer = createWalletClient({ * account, - * chain: polygonMumbai, + * chain: polygonAmoy, * transport: http(), * }); * @@ -925,11 +1126,18 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * const { success, receipt } = await wait(); * */ - async sendUserOp(userOp: Partial<UserOperationStruct>, params?: SendUserOpParams): Promise<UserOpResponse> { - delete userOp.signature; - const userOperation = await this.signUserOp(userOp, params); - const bundlerResponse = await this.sendSignedUserOp(userOperation, params?.simulationType); - return bundlerResponse; + async sendUserOp( + userOp: Partial<UserOperationStruct>, + params?: SendUserOpParams + ): Promise<UserOpResponse> { + // biome-ignore lint/performance/noDelete: <explanation> + delete userOp.signature + const userOperation = await this.signUserOp(userOp, params) + const bundlerResponse = await this.sendSignedUserOp( + userOperation, + params?.simulationType + ) + return bundlerResponse } /** @@ -939,7 +1147,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @description This function call will take 'signedUserOp' as input and send it to the bundler * @returns */ - async sendSignedUserOp(userOp: UserOperationStruct, simulationType?: SimulationType): Promise<UserOpResponse> { + async sendSignedUserOp( + userOp: UserOperationStruct, + simulationType?: SimulationType + ): Promise<UserOpResponse> { const requiredFields: UserOperationKey[] = [ "sender", "nonce", @@ -951,90 +1162,128 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { "maxFeePerGas", "maxPriorityFeePerGas", "paymasterAndData", - "signature", - ]; - this.validateUserOp(userOp, requiredFields); - if (!this.bundler) throw new Error("Bundler is not provided"); - Logger.warn("userOp being sent to the bundler", userOp); - const bundlerResponse = await this.bundler.sendUserOp(userOp, simulationType); - return bundlerResponse; + "signature" + ] + this.validateUserOp(userOp, requiredFields) + if (!this.bundler) throw new Error("Bundler is not provided") + Logger.warn("userOp being sent to the bundler", userOp) + const bundlerResponse = await this.bundler.sendUserOp( + userOp, + simulationType + ) + return bundlerResponse } async getUserOpHash(userOp: Partial<UserOperationStruct>): Promise<Hex> { - const userOpHash = keccak256(packUserOp(userOp, true) as Hex); - const enc = encodeAbiParameters(parseAbiParameters("bytes32, address, uint256"), [userOpHash, this.entryPoint.address, BigInt(this.chainId)]); - return keccak256(enc); + const userOpHash = keccak256(packUserOp(userOp, true) as Hex) + const enc = encodeAbiParameters( + parseAbiParameters("bytes32, address, uint256"), + [userOpHash, this.entryPoint.address, BigInt(this.chainId)] + ) + return keccak256(enc) } - async estimateUserOpGas(userOp: Partial<UserOperationStruct>, stateOverrideSet?: StateOverrideSet): Promise<Partial<UserOperationStruct>> { - if (!this.bundler) throw new Error("Bundler is not provided"); - const requiredFields: UserOperationKey[] = ["sender", "nonce", "initCode", "callData"]; - this.validateUserOp(userOp, requiredFields); + async estimateUserOpGas( + userOp: Partial<UserOperationStruct>, + stateOverrideSet?: StateOverrideSet + ): Promise<Partial<UserOperationStruct>> { + if (!this.bundler) throw new Error("Bundler is not provided") + const requiredFields: UserOperationKey[] = [ + "sender", + "nonce", + "initCode", + "callData" + ] + this.validateUserOp(userOp, requiredFields) - const finalUserOp = userOp; + const finalUserOp = userOp // Making call to bundler to get gas estimations for userOp - const { callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas } = await this.bundler.estimateUserOpGas( - userOp, - stateOverrideSet, - ); + const { + callGasLimit, + verificationGasLimit, + preVerificationGas, + maxFeePerGas, + maxPriorityFeePerGas + } = await this.bundler.estimateUserOpGas(userOp, stateOverrideSet) // if neither user sent gas fee nor the bundler, estimate gas from provider - if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas && (!maxFeePerGas || !maxPriorityFeePerGas)) { - const feeData = await this.provider.estimateFeesPerGas(); + if ( + !userOp.maxFeePerGas && + !userOp.maxPriorityFeePerGas && + (!maxFeePerGas || !maxPriorityFeePerGas) + ) { + const feeData = await this.provider.estimateFeesPerGas() if (feeData.maxFeePerGas?.toString()) { - finalUserOp.maxFeePerGas = ("0x" + feeData.maxFeePerGas.toString(16)) as Hex; + finalUserOp.maxFeePerGas = `0x${feeData.maxFeePerGas.toString( + 16 + )}` as Hex } else if (feeData.gasPrice?.toString()) { - finalUserOp.maxFeePerGas = ("0x" + feeData.gasPrice.toString(16)) as Hex; + finalUserOp.maxFeePerGas = `0x${feeData.gasPrice.toString(16)}` as Hex } else { - finalUserOp.maxFeePerGas = ("0x" + (await this.provider.getGasPrice()).toString(16)) as Hex; + finalUserOp.maxFeePerGas = `0x${( + await this.provider.getGasPrice() + ).toString(16)}` as Hex } if (feeData.maxPriorityFeePerGas?.toString()) { - finalUserOp.maxPriorityFeePerGas = ("0x" + feeData.maxPriorityFeePerGas?.toString()) as Hex; + finalUserOp.maxPriorityFeePerGas = + `0x${feeData.maxPriorityFeePerGas?.toString()}` as Hex } else if (feeData.gasPrice?.toString()) { - finalUserOp.maxPriorityFeePerGas = toHex(Number(feeData.gasPrice?.toString())); + finalUserOp.maxPriorityFeePerGas = toHex( + Number(feeData.gasPrice?.toString()) + ) } else { - finalUserOp.maxPriorityFeePerGas = ("0x" + (await this.provider.getGasPrice()).toString(16)) as Hex; + finalUserOp.maxPriorityFeePerGas = `0x${( + await this.provider.getGasPrice() + ).toString(16)}` as Hex } } else { - finalUserOp.maxFeePerGas = toHex(Number(maxFeePerGas)) ?? userOp.maxFeePerGas; - finalUserOp.maxPriorityFeePerGas = toHex(Number(maxPriorityFeePerGas)) ?? userOp.maxPriorityFeePerGas; + finalUserOp.maxFeePerGas = + toHex(Number(maxFeePerGas)) ?? userOp.maxFeePerGas + finalUserOp.maxPriorityFeePerGas = + toHex(Number(maxPriorityFeePerGas)) ?? userOp.maxPriorityFeePerGas } - finalUserOp.verificationGasLimit = toHex(Number(verificationGasLimit)) ?? userOp.verificationGasLimit; - finalUserOp.callGasLimit = toHex(Number(callGasLimit)) ?? userOp.callGasLimit; - finalUserOp.preVerificationGas = toHex(Number(preVerificationGas)) ?? userOp.preVerificationGas; + finalUserOp.verificationGasLimit = + toHex(Number(verificationGasLimit)) ?? userOp.verificationGasLimit + finalUserOp.callGasLimit = + toHex(Number(callGasLimit)) ?? userOp.callGasLimit + finalUserOp.preVerificationGas = + toHex(Number(preVerificationGas)) ?? userOp.preVerificationGas if (!finalUserOp.paymasterAndData) { - finalUserOp.paymasterAndData = "0x"; + finalUserOp.paymasterAndData = "0x" } - return finalUserOp; + return finalUserOp } - // Could call it nonce space - async getNonce(nonceKey?: number): Promise<bigint> { - const nonceSpace = nonceKey ?? 0; + override async getNonce(nonceKey?: number): Promise<bigint> { + const nonceSpace = nonceKey ?? 0 try { - const address = await this.getAddress(); - return await this.entryPoint.read.getNonce([address, BigInt(nonceSpace)]); + const address = await this.getAddress() + return await this.entryPoint.read.getNonce([address, BigInt(nonceSpace)]) } catch (e) { - return BigInt(0); + return BigInt(0) } } - private async getBuildUserOpNonce(nonceOptions: NonceOptions | undefined): Promise<BigNumberish> { - let nonce = BigInt(0); + private async getBuildUserOpNonce( + nonceOptions: NonceOptions | undefined + ): Promise<BigNumberish> { + let nonce = BigInt(0) try { if (nonceOptions?.nonceOverride) { - nonce = BigInt(nonceOptions?.nonceOverride); + nonce = BigInt(nonceOptions?.nonceOverride) } else { - const _nonceSpace = nonceOptions?.nonceKey ?? 0; - nonce = await this.getNonce(_nonceSpace); + const _nonceSpace = nonceOptions?.nonceKey ?? 0 + nonce = await this.getNonce(_nonceSpace) } } catch (error) { // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account - Logger.warn("Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0"); + Logger.warn( + "Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0" + ) } - return nonce; + return nonce } /** @@ -1050,11 +1299,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * import { createClient } from "viem" * import { createSmartAccountClient } from "@biconomy/account" * import { createWalletClient, http } from "viem"; - * import { polygonMumbai } from "viem/chains"; + * import { polygonAmoy } from "viem/chains"; * * const signer = createWalletClient({ * account, - * chain: polygonMumbai, + * chain: polygonAmoy, * transport: http(), * }); * @@ -1074,9 +1323,20 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * const { transactionHash, userOperationReceipt } = await wait(); * */ - async sendTransaction(manyOrOneTransactions: Transaction | Transaction[], buildUseropDto?: BuildUserOpOptions): Promise<UserOpResponse> { - const userOp = await this.buildUserOp(Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions : [manyOrOneTransactions], buildUseropDto); - return this.sendUserOp(userOp, { simulationType: buildUseropDto?.simulationType, ...buildUseropDto?.params }); + async sendTransaction( + manyOrOneTransactions: Transaction | Transaction[], + buildUseropDto?: BuildUserOpOptions + ): Promise<UserOpResponse> { + const userOp = await this.buildUserOp( + Array.isArray(manyOrOneTransactions) + ? manyOrOneTransactions + : [manyOrOneTransactions], + buildUseropDto + ) + return this.sendUserOp(userOp, { + simulationType: buildUseropDto?.simulationType, + ...buildUseropDto?.params + }) } /** @@ -1092,11 +1352,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * import { createClient } from "viem" * import { createSmartAccountClient } from "@biconomy/account" * import { createWalletClient, http } from "viem"; - * import { polygonMumbai } from "viem/chains"; + * import { polygonAmoy } from "viem/chains"; * * const signer = createWalletClient({ * account, - * chain: polygonMumbai, + * chain: polygonAmoy, * transport: http(), * }); * @@ -1115,30 +1375,39 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * const userOp = await smartAccount.buildUserOp([{ to: "0x...", data: encodedCall }]); * */ - async buildUserOp(transactions: Transaction[], buildUseropDto?: BuildUserOpOptions): Promise<Partial<UserOperationStruct>> { - const to = transactions.map((element: Transaction) => element.to as Hex); - const data = transactions.map((element: Transaction) => (element.data as Hex) ?? "0x"); - const value = transactions.map((element: Transaction) => (element.value as bigint) ?? BigInt(0)); - - const initCodeFetchPromise = this.getInitCode(); - const dummySignatureFetchPromise = this.getDummySignatures(buildUseropDto?.params); + async buildUserOp( + transactions: Transaction[], + buildUseropDto?: BuildUserOpOptions + ): Promise<Partial<UserOperationStruct>> { + const to = transactions.map((element: Transaction) => element.to as Hex) + const data = transactions.map( + (element: Transaction) => (element.data as Hex) ?? "0x" + ) + const value = transactions.map( + (element: Transaction) => (element.value as bigint) ?? BigInt(0) + ) + + const initCodeFetchPromise = this.getInitCode() + const dummySignatureFetchPromise = this.getDummySignatures( + buildUseropDto?.params + ) const [nonceFromFetch, initCode, signature] = await Promise.all([ this.getBuildUserOpNonce(buildUseropDto?.nonceOptions), initCodeFetchPromise, - dummySignatureFetchPromise, - ]); + dummySignatureFetchPromise + ]) if (transactions.length === 0) { - throw new Error("Transactions array cannot be empty"); + throw new Error("Transactions array cannot be empty") } - let callData: Hex = "0x"; + let callData: Hex = "0x" if (!buildUseropDto?.useEmptyDeployCallData) { if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { - callData = await this.encodeExecuteBatch(to, value, data); + callData = await this.encodeExecuteBatch(to, value, data) } else { // transactions.length must be 1 - callData = await this.encodeExecute(to[0], value[0], data[0]); + callData = await this.encodeExecute(to[0], value[0], data[0]) } } @@ -1146,52 +1415,64 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { sender: (await this.getAccountAddress()) as Hex, nonce: toHex(nonceFromFetch), initCode, - callData, - }; + callData + } // for this Smart Account current validation module dummy signature will be used to estimate gas - userOp.signature = signature; + userOp.signature = signature if ( buildUseropDto?.paymasterServiceData && buildUseropDto?.paymasterServiceData.mode === PaymasterMode.SPONSORED && this.paymaster instanceof BiconomyPaymaster ) { - const gasFeeValues = await this.bundler?.getGasFeeValues(); + const gasFeeValues = await this.bundler?.getGasFeeValues() // populate gasfee values and make a call to paymaster - userOp.maxFeePerGas = gasFeeValues?.maxFeePerGas as Hex; - userOp.maxPriorityFeePerGas = gasFeeValues?.maxPriorityFeePerGas as Hex; - - userOp = await this.getPaymasterUserOp(userOp, buildUseropDto.paymasterServiceData); - return userOp; - } else { - userOp = await this.estimateUserOpGas(userOp); + userOp.maxFeePerGas = gasFeeValues?.maxFeePerGas as Hex + userOp.maxPriorityFeePerGas = gasFeeValues?.maxPriorityFeePerGas as Hex + + userOp = await this.getPaymasterUserOp( + userOp, + buildUseropDto.paymasterServiceData + ) + return userOp + } + userOp = await this.estimateUserOpGas(userOp) - if (buildUseropDto?.paymasterServiceData) { - userOp = await this.getPaymasterUserOp(userOp, buildUseropDto.paymasterServiceData); - } - return userOp; + if (buildUseropDto?.paymasterServiceData) { + userOp = await this.getPaymasterUserOp( + userOp, + buildUseropDto.paymasterServiceData + ) } + return userOp } - private validateUserOpAndPaymasterRequest(userOp: Partial<UserOperationStruct>, tokenPaymasterRequest: BiconomyTokenPaymasterRequest): void { + private validateUserOpAndPaymasterRequest( + userOp: Partial<UserOperationStruct>, + tokenPaymasterRequest: BiconomyTokenPaymasterRequest + ): void { if (isNullOrUndefined(userOp.callData)) { - throw new Error("UserOp callData cannot be undefined"); + throw new Error("UserOp callData cannot be undefined") } - const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress; - Logger.warn("Requested fee token is ", feeTokenAddress); + const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress + Logger.warn("Requested fee token is ", feeTokenAddress) if (!feeTokenAddress || feeTokenAddress === ADDRESS_ZERO) { - throw new Error("Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest"); + throw new Error( + "Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest" + ) } - const spender = tokenPaymasterRequest?.spender; - Logger.warn("Spender address is ", spender); + const spender = tokenPaymasterRequest?.spender + Logger.warn("Spender address is ", spender) if (!spender || spender === ADDRESS_ZERO) { - throw new Error("Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest"); + throw new Error( + "Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest" + ) } } @@ -1206,96 +1487,127 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { */ async buildTokenPaymasterUserOp( userOp: Partial<UserOperationStruct>, - tokenPaymasterRequest: BiconomyTokenPaymasterRequest, + tokenPaymasterRequest: BiconomyTokenPaymasterRequest ): Promise<Partial<UserOperationStruct>> { - this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest); + this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest) try { - let batchTo: Array<Hex> = []; - let batchValue: Array<bigint> = []; - let batchData: Array<Hex> = []; + let batchTo: Array<Hex> = [] + let batchValue: Array<bigint> = [] + let batchData: Array<Hex> = [] - let newCallData = userOp.callData; - Logger.warn("Received information about fee token address and quote ", tokenPaymasterRequest); + let newCallData = userOp.callData + Logger.warn( + "Received information about fee token address and quote ", + tokenPaymasterRequest + ) if (this.paymaster && this.paymaster instanceof Paymaster) { // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details // Review: might request this form of an array of Transaction - const approvalRequest: Transaction = await (this.paymaster as IHybridPaymaster<SponsorUserOperationDto>).buildTokenApprovalTransaction( - tokenPaymasterRequest, - ); - Logger.warn("ApprovalRequest is for erc20 token ", approvalRequest.to); - - if (approvalRequest.data === "0x" || approvalRequest.to === ADDRESS_ZERO) { - return userOp; + const approvalRequest: Transaction = await ( + this.paymaster as IHybridPaymaster<SponsorUserOperationDto> + ).buildTokenApprovalTransaction(tokenPaymasterRequest) + Logger.warn("ApprovalRequest is for erc20 token ", approvalRequest.to) + + if ( + approvalRequest.data === "0x" || + approvalRequest.to === ADDRESS_ZERO + ) { + return userOp } if (isNullOrUndefined(userOp.callData)) { - throw new Error("UserOp callData cannot be undefined"); + throw new Error("UserOp callData cannot be undefined") } const decodedSmartAccountData = decodeFunctionData({ abi: BiconomyAccountAbi, - data: userOp.callData as Hex, - }); + data: userOp.callData as Hex + }) if (!decodedSmartAccountData) { - throw new Error("Could not parse userOp call data for this smart account"); + throw new Error( + "Could not parse userOp call data for this smart account" + ) } - const smartAccountExecFunctionName = decodedSmartAccountData.functionName; - - Logger.warn(`Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2`); - if (smartAccountExecFunctionName === "execute" || smartAccountExecFunctionName === "execute_ncC") { - const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; - const toOriginal = methodArgsSmartWalletExecuteCall[0]; - const valueOriginal = methodArgsSmartWalletExecuteCall[1]; - const dataOriginal = methodArgsSmartWalletExecuteCall[2]; - - batchTo.push(toOriginal); - batchValue.push(valueOriginal); - batchData.push(dataOriginal); - } else if (smartAccountExecFunctionName === "executeBatch" || smartAccountExecFunctionName === "executeBatch_y6U") { - const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args; - batchTo = [...methodArgsSmartWalletExecuteCall[0]]; - batchValue = [...methodArgsSmartWalletExecuteCall[1]]; - batchData = [...methodArgsSmartWalletExecuteCall[2]]; + const smartAccountExecFunctionName = + decodedSmartAccountData.functionName + + Logger.warn( + `Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2` + ) + if ( + smartAccountExecFunctionName === "execute" || + smartAccountExecFunctionName === "execute_ncC" + ) { + const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args + const toOriginal = methodArgsSmartWalletExecuteCall[0] + const valueOriginal = methodArgsSmartWalletExecuteCall[1] + const dataOriginal = methodArgsSmartWalletExecuteCall[2] + + batchTo.push(toOriginal) + batchValue.push(valueOriginal) + batchData.push(dataOriginal) + } else if ( + smartAccountExecFunctionName === "executeBatch" || + smartAccountExecFunctionName === "executeBatch_y6U" + ) { + const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args + batchTo = [...methodArgsSmartWalletExecuteCall[0]] + batchValue = [...methodArgsSmartWalletExecuteCall[1]] + batchData = [...methodArgsSmartWalletExecuteCall[2]] } - if (approvalRequest.to && approvalRequest.data && approvalRequest.value) { - batchTo = [approvalRequest.to as Hex, ...batchTo]; - batchValue = [BigInt(Number(approvalRequest.value.toString())), ...batchValue]; - batchData = [approvalRequest.data as Hex, ...batchData]; - - newCallData = await this.encodeExecuteBatch(batchTo, batchValue, batchData); + if ( + approvalRequest.to && + approvalRequest.data && + approvalRequest.value + ) { + batchTo = [approvalRequest.to as Hex, ...batchTo] + batchValue = [ + BigInt(Number(approvalRequest.value.toString())), + ...batchValue + ] + batchData = [approvalRequest.data as Hex, ...batchData] + + newCallData = await this.encodeExecuteBatch( + batchTo, + batchValue, + batchData + ) } const finalUserOp: Partial<UserOperationStruct> = { ...userOp, - callData: newCallData, - }; + callData: newCallData + } // Optionally Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) - return finalUserOp; + return finalUserOp } } catch (error) { - Logger.log("Failed to update userOp. Sending back original op"); - Logger.error("Failed to update callData with error", error); - return userOp; + Logger.log("Failed to update userOp. Sending back original op") + Logger.error("Failed to update callData with error", error) + return userOp } - return userOp; + return userOp } async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise<Hex> { - this.isActiveValidationModuleDefined(); - const moduleSig = (await this.activeValidationModule.signUserOpHash(userOpHash, params)) as Hex; - - const signatureWithModuleAddress = encodeAbiParameters(parseAbiParameters("bytes, address"), [ - moduleSig, - this.activeValidationModule.getAddress() as Hex, - ]); - - return signatureWithModuleAddress; + this.isActiveValidationModuleDefined() + const moduleSig = (await this.activeValidationModule.signUserOpHash( + userOpHash, + params + )) as Hex + + const signatureWithModuleAddress = encodeAbiParameters( + parseAbiParameters("bytes, address"), + [moduleSig, this.activeValidationModule.getAddress() as Hex] + ) + + return signatureWithModuleAddress } /** @@ -1314,11 +1626,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * import { createClient } from "viem" * import { createSmartAccountClient } from "@biconomy/account" * import { createWalletClient, http } from "viem"; - * import { polygonMumbai } from "viem/chains"; + * import { polygonAmoy } from "viem/chains"; * * const signer = createWalletClient({ * account, - * chain: polygonMumbai, + * chain: polygonAmoy, * transport: http(), * }); * @@ -1342,124 +1654,152 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * const { success, receipt } = await wait(); * */ - public async deploy(buildUseropDto?: BuildUserOpOptions): Promise<UserOpResponse> { - const accountAddress = this.accountAddress ?? (await this.getAccountAddress()); + public async deploy( + buildUseropDto?: BuildUserOpOptions + ): Promise<UserOpResponse> { + const accountAddress = + this.accountAddress ?? (await this.getAccountAddress()) // Check that the account has not already been deployed - const byteCode = await this.provider?.getBytecode({ address: accountAddress as Hex }); + const byteCode = await this.provider?.getBytecode({ + address: accountAddress as Hex + }) if (byteCode !== undefined) { - throw new Error(ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED); + throw new Error(ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED) } // Check that the account has enough native token balance to deploy, if not using a paymaster if (!buildUseropDto?.paymasterServiceData?.mode) { - const nativeTokenBalance = await this.provider?.getBalance({ address: accountAddress }); + const nativeTokenBalance = await this.provider?.getBalance({ + address: accountAddress + }) if (nativeTokenBalance === BigInt(0)) { - throw new Error(ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY); + throw new Error(ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY) } } - const useEmptyDeployCallData = true; + const useEmptyDeployCallData = true return this.sendTransaction( { to: accountAddress, - data: "0x", + data: "0x" }, - { ...buildUseropDto, useEmptyDeployCallData }, - ); + { ...buildUseropDto, useEmptyDeployCallData } + ) } async signMessage(message: string | Uint8Array): Promise<Hex> { - this.isActiveValidationModuleDefined(); - const dataHash = typeof message === "string" ? toBytes(message) : message; - let signature = await this.activeValidationModule.signMessage(dataHash); + this.isActiveValidationModuleDefined() + const dataHash = typeof message === "string" ? toBytes(message) : message + let signature = await this.activeValidationModule.signMessage(dataHash) - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); + const correctV = potentiallyIncorrectV + 27 + signature = signature.slice(0, -2) + correctV.toString(16) } if (signature.slice(0, 2) !== "0x") { - signature = "0x" + signature; + signature = `0x${signature}` } - signature = encodeAbiParameters(parseAbiParameters("bytes, address"), [signature as Hex, this.defaultValidationModule.getAddress()]); - return signature as Hex; + signature = encodeAbiParameters(parseAbiParameters("bytes, address"), [ + signature as Hex, + this.defaultValidationModule.getAddress() + ]) + return signature as Hex } - async getIsValidSignatureData(messageHash: Hex, signature: Hex): Promise<Hex> { + async getIsValidSignatureData( + messageHash: Hex, + signature: Hex + ): Promise<Hex> { return encodeFunctionData({ abi: BiconomyAccountAbi, functionName: "isValidSignature", - args: [messageHash, signature], - }); + args: [messageHash, signature] + }) } async enableModule(moduleAddress: Hex): Promise<UserOpResponse> { - const tx: Transaction = await this.getEnableModuleData(moduleAddress); - const partialUserOp = await this.buildUserOp([tx]); - return this.sendUserOp(partialUserOp); + const tx: Transaction = await this.getEnableModuleData(moduleAddress) + const partialUserOp = await this.buildUserOp([tx]) + return this.sendUserOp(partialUserOp) } async getEnableModuleData(moduleAddress: Hex): Promise<Transaction> { const callData = encodeFunctionData({ abi: BiconomyAccountAbi, functionName: "enableModule", - args: [moduleAddress], - }); + args: [moduleAddress] + }) const tx: Transaction = { to: await this.getAddress(), value: "0x00", - data: callData, - }; - return tx; + data: callData + } + return tx } - async getSetupAndEnableModuleData(moduleAddress: Hex, moduleSetupData: Hex): Promise<Transaction> { + async getSetupAndEnableModuleData( + moduleAddress: Hex, + moduleSetupData: Hex + ): Promise<Transaction> { const callData = encodeFunctionData({ abi: BiconomyAccountAbi, functionName: "setupAndEnableModule", - args: [moduleAddress, moduleSetupData], - }); + args: [moduleAddress, moduleSetupData] + }) const tx: Transaction = { to: await this.getAddress(), value: "0x00", - data: callData, - }; - return tx; + data: callData + } + return tx } - async disableModule(prevModule: Hex, moduleAddress: Hex): Promise<UserOpResponse> { - const tx: Transaction = await this.getDisableModuleData(prevModule, moduleAddress); - const partialUserOp = await this.buildUserOp([tx]); - return this.sendUserOp(partialUserOp); + async disableModule( + prevModule: Hex, + moduleAddress: Hex + ): Promise<UserOpResponse> { + const tx: Transaction = await this.getDisableModuleData( + prevModule, + moduleAddress + ) + const partialUserOp = await this.buildUserOp([tx]) + return this.sendUserOp(partialUserOp) } - async getDisableModuleData(prevModule: Hex, moduleAddress: Hex): Promise<Transaction> { + async getDisableModuleData( + prevModule: Hex, + moduleAddress: Hex + ): Promise<Transaction> { const callData = encodeFunctionData({ abi: BiconomyAccountAbi, functionName: "disableModule", - args: [prevModule, moduleAddress], - }); + args: [prevModule, moduleAddress] + }) const tx: Transaction = { to: await this.getAddress(), value: "0x00", - data: callData, - }; - return tx; + data: callData + } + return tx } async isModuleEnabled(moduleAddress: Hex): Promise<boolean> { - const accountContract = await this._getAccountContract(); - return accountContract.read.isModuleEnabled([moduleAddress]); + const accountContract = await this._getAccountContract() + return accountContract.read.isModuleEnabled([moduleAddress]) } // Review async getAllModules(pageSize?: number): Promise<Array<string>> { - pageSize = pageSize ?? 100; - const accountContract = await this._getAccountContract(); - const result = await accountContract.read.getModulesPaginated([this.SENTINEL_MODULE as Hex, BigInt(pageSize)]); - const modules: Array<string> = result[0] as Array<string>; - return modules; + const _pageSize = pageSize ?? 100 + const accountContract = await this._getAccountContract() + const result = await accountContract.read.getModulesPaginated([ + this.SENTINEL_MODULE as Hex, + BigInt(_pageSize) + ]) + const modules: Array<string> = result[0] as Array<string> + return modules } } diff --git a/packages/account/src/abi/Factory.ts b/src/account/Factory.ts similarity index 76% rename from packages/account/src/abi/Factory.ts rename to src/account/Factory.ts index 3498dd958..c7d148bb2 100644 --- a/packages/account/src/abi/Factory.ts +++ b/src/account/Factory.ts @@ -6,23 +6,23 @@ export const BiconomyFactoryAbi = [ indexed: true, internalType: "address", name: "account", - type: "address", + type: "address" }, { indexed: true, internalType: "address", name: "initialAuthModule", - type: "address", + type: "address" }, { indexed: true, internalType: "uint256", name: "index", - type: "uint256", - }, + type: "uint256" + } ], name: "AccountCreation", - type: "event", + type: "event" }, { anonymous: false, @@ -31,17 +31,17 @@ export const BiconomyFactoryAbi = [ indexed: true, internalType: "address", name: "account", - type: "address", + type: "address" }, { indexed: true, internalType: "address", name: "initialAuthModule", - type: "address", - }, + type: "address" + } ], name: "AccountCreationWithoutIndex", - type: "event", + type: "event" }, { inputs: [], @@ -50,92 +50,92 @@ export const BiconomyFactoryAbi = [ { internalType: "bytes", name: "", - type: "bytes", - }, + type: "bytes" + } ], stateMutability: "pure", - type: "function", + type: "function" }, { inputs: [ { internalType: "address", name: "moduleSetupContract", - type: "address", + type: "address" }, { internalType: "bytes", name: "moduleSetupData", - type: "bytes", - }, + type: "bytes" + } ], name: "deployAccount", outputs: [ { internalType: "address", name: "proxy", - type: "address", - }, + type: "address" + } ], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [ { internalType: "address", name: "moduleSetupContract", - type: "address", + type: "address" }, { internalType: "bytes", name: "moduleSetupData", - type: "bytes", + type: "bytes" }, { internalType: "uint256", name: "index", - type: "uint256", - }, + type: "uint256" + } ], name: "deployCounterFactualAccount", outputs: [ { internalType: "address", name: "proxy", - type: "address", - }, + type: "address" + } ], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [ { internalType: "address", name: "moduleSetupContract", - type: "address", + type: "address" }, { internalType: "bytes", name: "moduleSetupData", - type: "bytes", + type: "bytes" }, { internalType: "uint256", name: "index", - type: "uint256", - }, + type: "uint256" + } ], name: "getAddressForCounterFactualAccount", outputs: [ { internalType: "address", name: "_account", - type: "address", - }, + type: "address" + } ], stateMutability: "view", - type: "function", - }, -] as const; + type: "function" + } +] as const diff --git a/packages/account/src/abi/SmartAccount.ts b/src/account/SmartAccount.ts similarity index 58% rename from packages/account/src/abi/SmartAccount.ts rename to src/account/SmartAccount.ts index 73eb8fb91..541267158 100644 --- a/packages/account/src/abi/SmartAccount.ts +++ b/src/account/SmartAccount.ts @@ -1,30 +1,90 @@ export const BiconomyAccountAbi = [ - { inputs: [{ internalType: "contract IEntryPoint", name: "anEntryPoint", type: "address" }], stateMutability: "nonpayable", type: "constructor" }, + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, { inputs: [], name: "AlreadyInitialized", type: "error" }, { inputs: [], name: "BaseImplementationCannotBeZero", type: "error" }, - { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "CallerIsNotAnEntryPoint", type: "error" }, - { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "CallerIsNotEntryPoint", type: "error" }, - { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "CallerIsNotEntryPointOrOwner", type: "error" }, - { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "CallerIsNotEntryPointOrSelf", type: "error" }, - { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "CallerIsNotOwner", type: "error" }, - { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "CallerIsNotSelf", type: "error" }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "CallerIsNotAnEntryPoint", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "CallerIsNotEntryPoint", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "CallerIsNotEntryPointOrOwner", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "CallerIsNotEntryPointOrSelf", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "CallerIsNotOwner", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "CallerIsNotSelf", + type: "error" + }, { inputs: [], name: "DelegateCallsOnly", type: "error" }, { inputs: [], name: "EntryPointCannotBeZero", type: "error" }, { inputs: [], name: "HandlerCannotBeZero", type: "error" }, - { inputs: [{ internalType: "address", name: "implementationAddress", type: "address" }], name: "InvalidImplementation", type: "error" }, - { inputs: [{ internalType: "address", name: "caller", type: "address" }], name: "MixedAuthFail", type: "error" }, - { inputs: [{ internalType: "address", name: "module", type: "address" }], name: "ModuleAlreadyEnabled", type: "error" }, + { + inputs: [ + { + internalType: "address", + name: "implementationAddress", + type: "address" + } + ], + name: "InvalidImplementation", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "MixedAuthFail", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "module", type: "address" }], + name: "ModuleAlreadyEnabled", + type: "error" + }, { inputs: [ { internalType: "address", name: "expectedModule", type: "address" }, { internalType: "address", name: "returnedModule", type: "address" }, - { internalType: "address", name: "prevModule", type: "address" }, + { internalType: "address", name: "prevModule", type: "address" } ], name: "ModuleAndPrevModuleMismatch", - type: "error", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "module", type: "address" }], + name: "ModuleCannotBeZeroOrSentinel", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "module", type: "address" }], + name: "ModuleNotEnabled", + type: "error" }, - { inputs: [{ internalType: "address", name: "module", type: "address" }], name: "ModuleCannotBeZeroOrSentinel", type: "error" }, - { inputs: [{ internalType: "address", name: "module", type: "address" }], name: "ModuleNotEnabled", type: "error" }, { inputs: [], name: "ModulesAlreadyInitialized", type: "error" }, { inputs: [], name: "ModulesSetupExecutionFailed", type: "error" }, { inputs: [], name: "OwnerCanNotBeSelf", type: "error" }, @@ -36,137 +96,283 @@ export const BiconomyAccountAbi = [ { internalType: "uint256", name: "destLength", type: "uint256" }, { internalType: "uint256", name: "valueLength", type: "uint256" }, { internalType: "uint256", name: "funcLength", type: "uint256" }, - { internalType: "uint256", name: "operationLength", type: "uint256" }, + { internalType: "uint256", name: "operationLength", type: "uint256" } ], name: "WrongBatchProvided", - type: "error", + type: "error" + }, + { + inputs: [ + { internalType: "bytes", name: "contractSignature", type: "bytes" } + ], + name: "WrongContractSignature", + type: "error" }, - { inputs: [{ internalType: "bytes", name: "contractSignature", type: "bytes" }], name: "WrongContractSignature", type: "error" }, { inputs: [ { internalType: "uint256", name: "uintS", type: "uint256" }, - { internalType: "uint256", name: "contractSignatureLength", type: "uint256" }, - { internalType: "uint256", name: "signatureLength", type: "uint256" }, + { + internalType: "uint256", + name: "contractSignatureLength", + type: "uint256" + }, + { internalType: "uint256", name: "signatureLength", type: "uint256" } ], name: "WrongContractSignatureFormat", - type: "error", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "moduleAddressProvided", + type: "address" + } + ], + name: "WrongValidationModule", + type: "error" }, - { inputs: [{ internalType: "address", name: "moduleAddressProvided", type: "address" }], name: "WrongValidationModule", type: "error" }, { anonymous: false, inputs: [ - { indexed: true, internalType: "address", name: "previousHandler", type: "address" }, - { indexed: true, internalType: "address", name: "handler", type: "address" }, + { + indexed: true, + internalType: "address", + name: "previousHandler", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "handler", + type: "address" + } ], name: "ChangedFallbackHandler", - type: "event", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address" + } + ], + name: "DisabledModule", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address" + } + ], + name: "EnabledModule", + type: "event" }, - { anonymous: false, inputs: [{ indexed: false, internalType: "address", name: "module", type: "address" }], name: "DisabledModule", type: "event" }, - { anonymous: false, inputs: [{ indexed: false, internalType: "address", name: "module", type: "address" }], name: "EnabledModule", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "to", type: "address" }, - { indexed: true, internalType: "uint256", name: "value", type: "uint256" }, + { + indexed: true, + internalType: "uint256", + name: "value", + type: "uint256" + }, { indexed: true, internalType: "bytes", name: "data", type: "bytes" }, - { indexed: false, internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, - { indexed: false, internalType: "uint256", name: "txGas", type: "uint256" }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8" + }, + { + indexed: false, + internalType: "uint256", + name: "txGas", + type: "uint256" + } ], name: "ExecutionFailure", - type: "event", + type: "event" }, { anonymous: false, - inputs: [{ indexed: true, internalType: "address", name: "module", type: "address" }], + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address" + } + ], name: "ExecutionFromModuleFailure", - type: "event", + type: "event" }, { anonymous: false, - inputs: [{ indexed: true, internalType: "address", name: "module", type: "address" }], + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address" + } + ], name: "ExecutionFromModuleSuccess", - type: "event", + type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "to", type: "address" }, - { indexed: true, internalType: "uint256", name: "value", type: "uint256" }, + { + indexed: true, + internalType: "uint256", + name: "value", + type: "uint256" + }, { indexed: true, internalType: "bytes", name: "data", type: "bytes" }, - { indexed: false, internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, - { indexed: false, internalType: "uint256", name: "txGas", type: "uint256" }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8" + }, + { + indexed: false, + internalType: "uint256", + name: "txGas", + type: "uint256" + } ], name: "ExecutionSuccess", - type: "event", + type: "event" }, { anonymous: false, inputs: [ - { indexed: true, internalType: "address", name: "oldImplementation", type: "address" }, - { indexed: true, internalType: "address", name: "newImplementation", type: "address" }, + { + indexed: true, + internalType: "address", + name: "oldImplementation", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "newImplementation", + type: "address" + } ], name: "ImplementationUpdated", - type: "event", + type: "event" }, { anonymous: false, inputs: [ - { indexed: false, internalType: "address", name: "module", type: "address" }, + { + indexed: false, + internalType: "address", + name: "module", + type: "address" + }, { indexed: false, internalType: "address", name: "to", type: "address" }, - { indexed: false, internalType: "uint256", name: "value", type: "uint256" }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + }, { indexed: false, internalType: "bytes", name: "data", type: "bytes" }, - { indexed: false, internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8" + } ], name: "ModuleTransaction", - type: "event", + type: "event" }, { anonymous: false, inputs: [ - { indexed: true, internalType: "address", name: "sender", type: "address" }, - { indexed: true, internalType: "uint256", name: "value", type: "uint256" }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { indexed: true, internalType: "uint256", name: "value", type: "uint256" } ], name: "SmartAccountReceivedNativeToken", - type: "event", + type: "event" }, { stateMutability: "nonpayable", type: "fallback" }, - { inputs: [], name: "VERSION", outputs: [{ internalType: "string", name: "", type: "string" }], stateMutability: "view", type: "function" }, - { inputs: [], name: "addDeposit", outputs: [], stateMutability: "payable", type: "function" }, + { + inputs: [], + name: "VERSION", + outputs: [{ internalType: "string", name: "", type: "string" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function" + }, { inputs: [ { internalType: "address", name: "prevModule", type: "address" }, - { internalType: "address", name: "module", type: "address" }, + { internalType: "address", name: "module", type: "address" } ], name: "disableModule", outputs: [], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [{ internalType: "address", name: "module", type: "address" }], name: "enableModule", outputs: [], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [], name: "entryPoint", - outputs: [{ internalType: "contract IEntryPoint", name: "", type: "address" }], + outputs: [ + { internalType: "contract IEntryPoint", name: "", type: "address" } + ], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [ { internalType: "address[]", name: "to", type: "address[]" }, { internalType: "uint256[]", name: "value", type: "uint256[]" }, { internalType: "bytes[]", name: "data", type: "bytes[]" }, - { internalType: "enum Enum.Operation[]", name: "operations", type: "uint8[]" }, + { + internalType: "enum Enum.Operation[]", + name: "operations", + type: "uint8[]" + } ], name: "execBatchTransactionFromModule", outputs: [{ internalType: "bool", name: "success", type: "bool" }], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [ @@ -174,191 +380,201 @@ export const BiconomyAccountAbi = [ { internalType: "uint256", name: "value", type: "uint256" }, { internalType: "bytes", name: "data", type: "bytes" }, { internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, - { internalType: "uint256", name: "txGas", type: "uint256" }, + { internalType: "uint256", name: "txGas", type: "uint256" } ], name: "execTransactionFromModule", outputs: [{ internalType: "bool", name: "success", type: "bool" }], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [ { internalType: "address", name: "to", type: "address" }, { internalType: "uint256", name: "value", type: "uint256" }, { internalType: "bytes", name: "data", type: "bytes" }, - { internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, + { internalType: "enum Enum.Operation", name: "operation", type: "uint8" } ], name: "execTransactionFromModule", outputs: [{ internalType: "bool", name: "", type: "bool" }], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [ { internalType: "address", name: "to", type: "address" }, { internalType: "uint256", name: "value", type: "uint256" }, { internalType: "bytes", name: "data", type: "bytes" }, - { internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, + { internalType: "enum Enum.Operation", name: "operation", type: "uint8" } ], name: "execTransactionFromModuleReturnData", outputs: [ { internalType: "bool", name: "success", type: "bool" }, - { internalType: "bytes", name: "returnData", type: "bytes" }, + { internalType: "bytes", name: "returnData", type: "bytes" } ], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [ { internalType: "address", name: "dest", type: "address" }, { internalType: "uint256", name: "value", type: "uint256" }, - { internalType: "bytes", name: "func", type: "bytes" }, + { internalType: "bytes", name: "func", type: "bytes" } ], name: "execute", outputs: [], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [ { internalType: "address[]", name: "dest", type: "address[]" }, { internalType: "uint256[]", name: "value", type: "uint256[]" }, - { internalType: "bytes[]", name: "func", type: "bytes[]" }, + { internalType: "bytes[]", name: "func", type: "bytes[]" } ], name: "executeBatch", outputs: [], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [ { internalType: "address[]", name: "dest", type: "address[]" }, { internalType: "uint256[]", name: "value", type: "uint256[]" }, - { internalType: "bytes[]", name: "func", type: "bytes[]" }, + { internalType: "bytes[]", name: "func", type: "bytes[]" } ], name: "executeBatch_y6U", outputs: [], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [ { internalType: "address", name: "dest", type: "address" }, { internalType: "uint256", name: "value", type: "uint256" }, - { internalType: "bytes", name: "func", type: "bytes" }, + { internalType: "bytes", name: "func", type: "bytes" } ], name: "execute_ncC", outputs: [], stateMutability: "nonpayable", - type: "function", + type: "function" + }, + { + inputs: [], + name: "getDeposit", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function" }, - { inputs: [], name: "getDeposit", outputs: [{ internalType: "uint256", name: "", type: "uint256" }], stateMutability: "view", type: "function" }, { inputs: [], name: "getFallbackHandler", outputs: [{ internalType: "address", name: "_handler", type: "address" }], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [], name: "getImplementation", - outputs: [{ internalType: "address", name: "_implementation", type: "address" }], + outputs: [ + { internalType: "address", name: "_implementation", type: "address" } + ], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [ { internalType: "address", name: "start", type: "address" }, - { internalType: "uint256", name: "pageSize", type: "uint256" }, + { internalType: "uint256", name: "pageSize", type: "uint256" } ], name: "getModulesPaginated", outputs: [ { internalType: "address[]", name: "array", type: "address[]" }, - { internalType: "address", name: "next", type: "address" }, + { internalType: "address", name: "next", type: "address" } ], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [ { internalType: "address", name: "handler", type: "address" }, { internalType: "address", name: "moduleSetupContract", type: "address" }, - { internalType: "bytes", name: "moduleSetupData", type: "bytes" }, + { internalType: "bytes", name: "moduleSetupData", type: "bytes" } ], name: "init", outputs: [{ internalType: "address", name: "", type: "address" }], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [{ internalType: "address", name: "module", type: "address" }], name: "isModuleEnabled", outputs: [{ internalType: "bool", name: "", type: "bool" }], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [ { internalType: "bytes32", name: "dataHash", type: "bytes32" }, - { internalType: "bytes", name: "signature", type: "bytes" }, + { internalType: "bytes", name: "signature", type: "bytes" } ], name: "isValidSignature", outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [{ internalType: "uint192", name: "_key", type: "uint192" }], name: "nonce", outputs: [{ internalType: "uint256", name: "", type: "uint256" }], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [{ internalType: "uint256", name: "", type: "uint256" }], name: "noncesDeprecated", outputs: [{ internalType: "uint256", name: "", type: "uint256" }], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [], name: "ownerDeprecated", outputs: [{ internalType: "address", name: "", type: "address" }], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [{ internalType: "address", name: "handler", type: "address" }], name: "setFallbackHandler", outputs: [], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [ { internalType: "address", name: "setupContract", type: "address" }, - { internalType: "bytes", name: "setupData", type: "bytes" }, + { internalType: "bytes", name: "setupData", type: "bytes" } ], name: "setupAndEnableModule", outputs: [{ internalType: "address", name: "", type: "address" }], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [{ internalType: "bytes4", name: "_interfaceId", type: "bytes4" }], name: "supportsInterface", outputs: [{ internalType: "bool", name: "", type: "bool" }], stateMutability: "view", - type: "function", + type: "function" }, { - inputs: [{ internalType: "address", name: "_implementation", type: "address" }], + inputs: [ + { internalType: "address", name: "_implementation", type: "address" } + ], name: "updateImplementation", outputs: [], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [ @@ -369,34 +585,52 @@ export const BiconomyAccountAbi = [ { internalType: "bytes", name: "initCode", type: "bytes" }, { internalType: "bytes", name: "callData", type: "bytes" }, { internalType: "uint256", name: "callGasLimit", type: "uint256" }, - { internalType: "uint256", name: "verificationGasLimit", type: "uint256" }, - { internalType: "uint256", name: "preVerificationGas", type: "uint256" }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" + }, { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, - { internalType: "uint256", name: "maxPriorityFeePerGas", type: "uint256" }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256" + }, { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, - { internalType: "bytes", name: "signature", type: "bytes" }, + { internalType: "bytes", name: "signature", type: "bytes" } ], internalType: "struct UserOperation", name: "userOp", - type: "tuple", + type: "tuple" }, { internalType: "bytes32", name: "userOpHash", type: "bytes32" }, - { internalType: "uint256", name: "missingAccountFunds", type: "uint256" }, + { internalType: "uint256", name: "missingAccountFunds", type: "uint256" } ], name: "validateUserOp", - outputs: [{ internalType: "uint256", name: "validationData", type: "uint256" }], + outputs: [ + { internalType: "uint256", name: "validationData", type: "uint256" } + ], stateMutability: "nonpayable", - type: "function", + type: "function" }, { inputs: [ - { internalType: "address payable", name: "withdrawAddress", type: "address" }, - { internalType: "uint256", name: "amount", type: "uint256" }, + { + internalType: "address payable", + name: "withdrawAddress", + type: "address" + }, + { internalType: "uint256", name: "amount", type: "uint256" } ], name: "withdrawDepositTo", outputs: [], stateMutability: "payable", - type: "function", + type: "function" }, - { stateMutability: "payable", type: "receive" }, -] as const; + { stateMutability: "payable", type: "receive" } +] as const diff --git a/packages/account/src/abi/AccountResolver.ts b/src/account/abi/AccountResolver.ts similarity index 81% rename from packages/account/src/abi/AccountResolver.ts rename to src/account/abi/AccountResolver.ts index 0cbffc749..2dfd45303 100644 --- a/packages/account/src/abi/AccountResolver.ts +++ b/src/account/abi/AccountResolver.ts @@ -3,22 +3,22 @@ export const AccountResolverAbi = [ inputs: [ { internalType: "address", name: "_v1Factory", type: "address" }, { internalType: "address", name: "_v2Factory", type: "address" }, - { internalType: "address", name: "_ecdsaModule", type: "address" }, + { internalType: "address", name: "_ecdsaModule", type: "address" } ], stateMutability: "nonpayable", - type: "constructor", + type: "constructor" }, { inputs: [], name: "ecdsaOwnershipModule", outputs: [{ internalType: "address", name: "", type: "address" }], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [ { internalType: "address", name: "_eoa", type: "address" }, - { internalType: "uint8", name: "_maxIndex", type: "uint8" }, + { internalType: "uint8", name: "_maxIndex", type: "uint8" } ], name: "resolveAddresses", outputs: [ @@ -26,25 +26,29 @@ export const AccountResolverAbi = [ components: [ { internalType: "address", name: "accountAddress", type: "address" }, { internalType: "address", name: "factoryAddress", type: "address" }, - { internalType: "address", name: "currentImplementation", type: "address" }, + { + internalType: "address", + name: "currentImplementation", + type: "address" + }, { internalType: "string", name: "currentVersion", type: "string" }, { internalType: "string", name: "factoryVersion", type: "string" }, - { internalType: "uint256", name: "deploymentIndex", type: "uint256" }, + { internalType: "uint256", name: "deploymentIndex", type: "uint256" } ], internalType: "struct IAddressResolver.SmartAccountResult[]", name: "", - type: "tuple[]", - }, + type: "tuple[]" + } ], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [ { internalType: "address", name: "_eoa", type: "address" }, { internalType: "uint8", name: "_maxIndex", type: "uint8" }, { internalType: "address", name: "_moduleAddress", type: "address" }, - { internalType: "bytes", name: "_moduleSetupData", type: "bytes" }, + { internalType: "bytes", name: "_moduleSetupData", type: "bytes" } ], name: "resolveAddressesFlexibleForV2", outputs: [ @@ -52,23 +56,27 @@ export const AccountResolverAbi = [ components: [ { internalType: "address", name: "accountAddress", type: "address" }, { internalType: "address", name: "factoryAddress", type: "address" }, - { internalType: "address", name: "currentImplementation", type: "address" }, + { + internalType: "address", + name: "currentImplementation", + type: "address" + }, { internalType: "string", name: "currentVersion", type: "string" }, { internalType: "string", name: "factoryVersion", type: "string" }, - { internalType: "uint256", name: "deploymentIndex", type: "uint256" }, + { internalType: "uint256", name: "deploymentIndex", type: "uint256" } ], internalType: "struct IAddressResolver.SmartAccountResult[]", name: "", - type: "tuple[]", - }, + type: "tuple[]" + } ], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [ { internalType: "address", name: "_eoa", type: "address" }, - { internalType: "uint8", name: "_maxIndex", type: "uint8" }, + { internalType: "uint8", name: "_maxIndex", type: "uint8" } ], name: "resolveAddressesV1", outputs: [ @@ -76,31 +84,35 @@ export const AccountResolverAbi = [ components: [ { internalType: "address", name: "accountAddress", type: "address" }, { internalType: "address", name: "factoryAddress", type: "address" }, - { internalType: "address", name: "currentImplementation", type: "address" }, + { + internalType: "address", + name: "currentImplementation", + type: "address" + }, { internalType: "string", name: "currentVersion", type: "string" }, { internalType: "string", name: "factoryVersion", type: "string" }, - { internalType: "uint256", name: "deploymentIndex", type: "uint256" }, + { internalType: "uint256", name: "deploymentIndex", type: "uint256" } ], internalType: "struct IAddressResolver.SmartAccountResult[]", name: "", - type: "tuple[]", - }, + type: "tuple[]" + } ], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [], name: "smartAccountFactoryV1", outputs: [{ internalType: "address", name: "", type: "address" }], stateMutability: "view", - type: "function", + type: "function" }, { inputs: [], name: "smartAccountFactoryV2", outputs: [{ internalType: "address", name: "", type: "address" }], stateMutability: "view", - type: "function", - }, -] as const; + type: "function" + } +] as const diff --git a/src/account/abi/EntryPointAbi.ts b/src/account/abi/EntryPointAbi.ts new file mode 100644 index 000000000..695b3e7e7 --- /dev/null +++ b/src/account/abi/EntryPointAbi.ts @@ -0,0 +1,1309 @@ +export const EntryPointAbi = [ + { + inputs: [ + { + internalType: "uint256", + name: "preOpGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "paid", + type: "uint256" + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48" + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48" + }, + { + internalType: "bool", + name: "targetSuccess", + type: "bool" + }, + { + internalType: "bytes", + name: "targetResult", + type: "bytes" + } + ], + name: "ExecutionResult", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "opIndex", + type: "uint256" + }, + { + internalType: "string", + name: "reason", + type: "string" + } + ], + name: "FailedOp", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + } + ], + name: "SenderAddressResult", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "aggregator", + type: "address" + } + ], + name: "SignatureValidationFailed", + type: "error" + }, + { + inputs: [ + { + components: [ + { + internalType: "uint256", + name: "preOpGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256" + }, + { + internalType: "bool", + name: "sigFailed", + type: "bool" + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48" + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48" + }, + { + internalType: "bytes", + name: "paymasterContext", + type: "bytes" + } + ], + internalType: "struct IEntryPoint.ReturnInfo", + name: "returnInfo", + type: "tuple" + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256" + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256" + } + ], + internalType: "struct IStakeManager.StakeInfo", + name: "senderInfo", + type: "tuple" + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256" + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256" + } + ], + internalType: "struct IStakeManager.StakeInfo", + name: "factoryInfo", + type: "tuple" + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256" + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256" + } + ], + internalType: "struct IStakeManager.StakeInfo", + name: "paymasterInfo", + type: "tuple" + } + ], + name: "ValidationResult", + type: "error" + }, + { + inputs: [ + { + components: [ + { + internalType: "uint256", + name: "preOpGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256" + }, + { + internalType: "bool", + name: "sigFailed", + type: "bool" + }, + { + internalType: "uint48", + name: "validAfter", + type: "uint48" + }, + { + internalType: "uint48", + name: "validUntil", + type: "uint48" + }, + { + internalType: "bytes", + name: "paymasterContext", + type: "bytes" + } + ], + internalType: "struct IEntryPoint.ReturnInfo", + name: "returnInfo", + type: "tuple" + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256" + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256" + } + ], + internalType: "struct IStakeManager.StakeInfo", + name: "senderInfo", + type: "tuple" + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256" + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256" + } + ], + internalType: "struct IStakeManager.StakeInfo", + name: "factoryInfo", + type: "tuple" + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256" + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256" + } + ], + internalType: "struct IStakeManager.StakeInfo", + name: "paymasterInfo", + type: "tuple" + }, + { + components: [ + { + internalType: "address", + name: "aggregator", + type: "address" + }, + { + components: [ + { + internalType: "uint256", + name: "stake", + type: "uint256" + }, + { + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256" + } + ], + internalType: "struct IStakeManager.StakeInfo", + name: "stakeInfo", + type: "tuple" + } + ], + internalType: "struct IEntryPoint.AggregatorStakeInfo", + name: "aggregatorInfo", + type: "tuple" + } + ], + name: "ValidationResultWithAggregation", + type: "error" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32" + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "factory", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "paymaster", + type: "address" + } + ], + name: "AccountDeployed", + type: "event" + }, + { + anonymous: false, + inputs: [], + name: "BeforeExecution", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "totalDeposit", + type: "uint256" + } + ], + name: "Deposited", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "aggregator", + type: "address" + } + ], + name: "SignatureAggregatorChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "totalStaked", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "unstakeDelaySec", + type: "uint256" + } + ], + name: "StakeLocked", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "withdrawTime", + type: "uint256" + } + ], + name: "StakeUnlocked", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "withdrawAddress", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "StakeWithdrawn", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32" + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "paymaster", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "nonce", + type: "uint256" + }, + { + indexed: false, + internalType: "bool", + name: "success", + type: "bool" + }, + { + indexed: false, + internalType: "uint256", + name: "actualGasCost", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "actualGasUsed", + type: "uint256" + } + ], + name: "UserOperationEvent", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32" + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "nonce", + type: "uint256" + }, + { + indexed: false, + internalType: "bytes", + name: "revertReason", + type: "bytes" + } + ], + name: "UserOperationRevertReason", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "withdrawAddress", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "Withdrawn", + type: "event" + }, + { + inputs: [], + name: "SIG_VALIDATION_FAILED", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "initCode", + type: "bytes" + }, + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes" + } + ], + name: "_validateSenderAndPaymaster", + outputs: [], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32" + } + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "depositTo", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "deposits", + outputs: [ + { + internalType: "uint112", + name: "deposit", + type: "uint112" + }, + { + internalType: "bool", + name: "staked", + type: "bool" + }, + { + internalType: "uint112", + name: "stake", + type: "uint112" + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32" + }, + { + internalType: "uint48", + name: "withdrawTime", + type: "uint48" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "getDepositInfo", + outputs: [ + { + components: [ + { + internalType: "uint112", + name: "deposit", + type: "uint112" + }, + { + internalType: "bool", + name: "staked", + type: "bool" + }, + { + internalType: "uint112", + name: "stake", + type: "uint112" + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32" + }, + { + internalType: "uint48", + name: "withdrawTime", + type: "uint48" + } + ], + internalType: "struct IStakeManager.DepositInfo", + name: "info", + type: "tuple" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint192", + name: "key", + type: "uint192" + } + ], + name: "getNonce", + outputs: [ + { + internalType: "uint256", + name: "nonce", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "initCode", + type: "bytes" + } + ], + name: "getSenderAddress", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256" + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256" + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple" + } + ], + name: "getUserOpHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + components: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256" + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256" + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + internalType: "struct UserOperation[]", + name: "userOps", + type: "tuple[]" + }, + { + internalType: "contract IAggregator", + name: "aggregator", + type: "address" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + internalType: "struct IEntryPoint.UserOpsPerAggregator[]", + name: "opsPerAggregator", + type: "tuple[]" + }, + { + internalType: "address payable", + name: "beneficiary", + type: "address" + } + ], + name: "handleAggregatedOps", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256" + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256" + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + internalType: "struct UserOperation[]", + name: "ops", + type: "tuple[]" + }, + { + internalType: "address payable", + name: "beneficiary", + type: "address" + } + ], + name: "handleOps", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "uint192", + name: "key", + type: "uint192" + } + ], + name: "incrementNonce", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "callData", + type: "bytes" + }, + { + components: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256" + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" + }, + { + internalType: "address", + name: "paymaster", + type: "address" + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256" + } + ], + internalType: "struct EntryPoint.MemoryUserOp", + name: "mUserOp", + type: "tuple" + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32" + }, + { + internalType: "uint256", + name: "prefund", + type: "uint256" + }, + { + internalType: "uint256", + name: "contextOffset", + type: "uint256" + }, + { + internalType: "uint256", + name: "preOpGas", + type: "uint256" + } + ], + internalType: "struct EntryPoint.UserOpInfo", + name: "opInfo", + type: "tuple" + }, + { + internalType: "bytes", + name: "context", + type: "bytes" + } + ], + name: "innerHandleOp", + outputs: [ + { + internalType: "uint256", + name: "actualGasCost", + type: "uint256" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "uint192", + name: "", + type: "uint192" + } + ], + name: "nonceSequenceNumber", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256" + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256" + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + internalType: "struct UserOperation", + name: "op", + type: "tuple" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "bytes", + name: "targetCallData", + type: "bytes" + } + ], + name: "simulateHandleOp", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256" + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256" + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple" + } + ], + name: "simulateValidation", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address" + } + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address" + }, + { + internalType: "uint256", + name: "withdrawAmount", + type: "uint256" + } + ], + name: "withdrawTo", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +] as const diff --git a/src/account/abi/Factory.ts b/src/account/abi/Factory.ts new file mode 100644 index 000000000..c7d148bb2 --- /dev/null +++ b/src/account/abi/Factory.ts @@ -0,0 +1,141 @@ +export const BiconomyFactoryAbi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "initialAuthModule", + type: "address" + }, + { + indexed: true, + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "AccountCreation", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "initialAuthModule", + type: "address" + } + ], + name: "AccountCreationWithoutIndex", + type: "event" + }, + { + inputs: [], + name: "accountCreationCode", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address" + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes" + } + ], + name: "deployAccount", + outputs: [ + { + internalType: "address", + name: "proxy", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address" + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes" + }, + { + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "deployCounterFactualAccount", + outputs: [ + { + internalType: "address", + name: "proxy", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "moduleSetupContract", + type: "address" + }, + { + internalType: "bytes", + name: "moduleSetupData", + type: "bytes" + }, + { + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "getAddressForCounterFactualAccount", + outputs: [ + { + internalType: "address", + name: "_account", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } +] as const diff --git a/src/account/abi/SmartAccount.ts b/src/account/abi/SmartAccount.ts new file mode 100644 index 000000000..541267158 --- /dev/null +++ b/src/account/abi/SmartAccount.ts @@ -0,0 +1,636 @@ +export const BiconomyAccountAbi = [ + { + inputs: [ + { + internalType: "contract IEntryPoint", + name: "anEntryPoint", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { inputs: [], name: "AlreadyInitialized", type: "error" }, + { inputs: [], name: "BaseImplementationCannotBeZero", type: "error" }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "CallerIsNotAnEntryPoint", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "CallerIsNotEntryPoint", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "CallerIsNotEntryPointOrOwner", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "CallerIsNotEntryPointOrSelf", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "CallerIsNotOwner", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "CallerIsNotSelf", + type: "error" + }, + { inputs: [], name: "DelegateCallsOnly", type: "error" }, + { inputs: [], name: "EntryPointCannotBeZero", type: "error" }, + { inputs: [], name: "HandlerCannotBeZero", type: "error" }, + { + inputs: [ + { + internalType: "address", + name: "implementationAddress", + type: "address" + } + ], + name: "InvalidImplementation", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "caller", type: "address" }], + name: "MixedAuthFail", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "module", type: "address" }], + name: "ModuleAlreadyEnabled", + type: "error" + }, + { + inputs: [ + { internalType: "address", name: "expectedModule", type: "address" }, + { internalType: "address", name: "returnedModule", type: "address" }, + { internalType: "address", name: "prevModule", type: "address" } + ], + name: "ModuleAndPrevModuleMismatch", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "module", type: "address" }], + name: "ModuleCannotBeZeroOrSentinel", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "module", type: "address" }], + name: "ModuleNotEnabled", + type: "error" + }, + { inputs: [], name: "ModulesAlreadyInitialized", type: "error" }, + { inputs: [], name: "ModulesSetupExecutionFailed", type: "error" }, + { inputs: [], name: "OwnerCanNotBeSelf", type: "error" }, + { inputs: [], name: "OwnerCannotBeZero", type: "error" }, + { inputs: [], name: "OwnerProvidedIsSame", type: "error" }, + { inputs: [], name: "TransferToZeroAddressAttempt", type: "error" }, + { + inputs: [ + { internalType: "uint256", name: "destLength", type: "uint256" }, + { internalType: "uint256", name: "valueLength", type: "uint256" }, + { internalType: "uint256", name: "funcLength", type: "uint256" }, + { internalType: "uint256", name: "operationLength", type: "uint256" } + ], + name: "WrongBatchProvided", + type: "error" + }, + { + inputs: [ + { internalType: "bytes", name: "contractSignature", type: "bytes" } + ], + name: "WrongContractSignature", + type: "error" + }, + { + inputs: [ + { internalType: "uint256", name: "uintS", type: "uint256" }, + { + internalType: "uint256", + name: "contractSignatureLength", + type: "uint256" + }, + { internalType: "uint256", name: "signatureLength", type: "uint256" } + ], + name: "WrongContractSignatureFormat", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "moduleAddressProvided", + type: "address" + } + ], + name: "WrongValidationModule", + type: "error" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousHandler", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "handler", + type: "address" + } + ], + name: "ChangedFallbackHandler", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address" + } + ], + name: "DisabledModule", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address" + } + ], + name: "EnabledModule", + type: "event" + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "address", name: "to", type: "address" }, + { + indexed: true, + internalType: "uint256", + name: "value", + type: "uint256" + }, + { indexed: true, internalType: "bytes", name: "data", type: "bytes" }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8" + }, + { + indexed: false, + internalType: "uint256", + name: "txGas", + type: "uint256" + } + ], + name: "ExecutionFailure", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address" + } + ], + name: "ExecutionFromModuleFailure", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "module", + type: "address" + } + ], + name: "ExecutionFromModuleSuccess", + type: "event" + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "address", name: "to", type: "address" }, + { + indexed: true, + internalType: "uint256", + name: "value", + type: "uint256" + }, + { indexed: true, internalType: "bytes", name: "data", type: "bytes" }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8" + }, + { + indexed: false, + internalType: "uint256", + name: "txGas", + type: "uint256" + } + ], + name: "ExecutionSuccess", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "oldImplementation", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "newImplementation", + type: "address" + } + ], + name: "ImplementationUpdated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "module", + type: "address" + }, + { indexed: false, internalType: "address", name: "to", type: "address" }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + }, + { indexed: false, internalType: "bytes", name: "data", type: "bytes" }, + { + indexed: false, + internalType: "enum Enum.Operation", + name: "operation", + type: "uint8" + } + ], + name: "ModuleTransaction", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { indexed: true, internalType: "uint256", name: "value", type: "uint256" } + ], + name: "SmartAccountReceivedNativeToken", + type: "event" + }, + { stateMutability: "nonpayable", type: "fallback" }, + { + inputs: [], + name: "VERSION", + outputs: [{ internalType: "string", name: "", type: "string" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { internalType: "address", name: "prevModule", type: "address" }, + { internalType: "address", name: "module", type: "address" } + ], + name: "disableModule", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [{ internalType: "address", name: "module", type: "address" }], + name: "enableModule", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "entryPoint", + outputs: [ + { internalType: "contract IEntryPoint", name: "", type: "address" } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { internalType: "address[]", name: "to", type: "address[]" }, + { internalType: "uint256[]", name: "value", type: "uint256[]" }, + { internalType: "bytes[]", name: "data", type: "bytes[]" }, + { + internalType: "enum Enum.Operation[]", + name: "operations", + type: "uint8[]" + } + ], + name: "execBatchTransactionFromModule", + outputs: [{ internalType: "bool", name: "success", type: "bool" }], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + { internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, + { internalType: "uint256", name: "txGas", type: "uint256" } + ], + name: "execTransactionFromModule", + outputs: [{ internalType: "bool", name: "success", type: "bool" }], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + { internalType: "enum Enum.Operation", name: "operation", type: "uint8" } + ], + name: "execTransactionFromModule", + outputs: [{ internalType: "bool", name: "", type: "bool" }], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "data", type: "bytes" }, + { internalType: "enum Enum.Operation", name: "operation", type: "uint8" } + ], + name: "execTransactionFromModuleReturnData", + outputs: [ + { internalType: "bool", name: "success", type: "bool" }, + { internalType: "bytes", name: "returnData", type: "bytes" } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { internalType: "address", name: "dest", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "func", type: "bytes" } + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { internalType: "address[]", name: "dest", type: "address[]" }, + { internalType: "uint256[]", name: "value", type: "uint256[]" }, + { internalType: "bytes[]", name: "func", type: "bytes[]" } + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { internalType: "address[]", name: "dest", type: "address[]" }, + { internalType: "uint256[]", name: "value", type: "uint256[]" }, + { internalType: "bytes[]", name: "func", type: "bytes[]" } + ], + name: "executeBatch_y6U", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { internalType: "address", name: "dest", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "bytes", name: "func", type: "bytes" } + ], + name: "execute_ncC", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "getDeposit", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getFallbackHandler", + outputs: [{ internalType: "address", name: "_handler", type: "address" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getImplementation", + outputs: [ + { internalType: "address", name: "_implementation", type: "address" } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { internalType: "address", name: "start", type: "address" }, + { internalType: "uint256", name: "pageSize", type: "uint256" } + ], + name: "getModulesPaginated", + outputs: [ + { internalType: "address[]", name: "array", type: "address[]" }, + { internalType: "address", name: "next", type: "address" } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { internalType: "address", name: "handler", type: "address" }, + { internalType: "address", name: "moduleSetupContract", type: "address" }, + { internalType: "bytes", name: "moduleSetupData", type: "bytes" } + ], + name: "init", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [{ internalType: "address", name: "module", type: "address" }], + name: "isModuleEnabled", + outputs: [{ internalType: "bool", name: "", type: "bool" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { internalType: "bytes32", name: "dataHash", type: "bytes32" }, + { internalType: "bytes", name: "signature", type: "bytes" } + ], + name: "isValidSignature", + outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [{ internalType: "uint192", name: "_key", type: "uint192" }], + name: "nonce", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [{ internalType: "uint256", name: "", type: "uint256" }], + name: "noncesDeprecated", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "ownerDeprecated", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [{ internalType: "address", name: "handler", type: "address" }], + name: "setFallbackHandler", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { internalType: "address", name: "setupContract", type: "address" }, + { internalType: "bytes", name: "setupData", type: "bytes" } + ], + name: "setupAndEnableModule", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [{ internalType: "bytes4", name: "_interfaceId", type: "bytes4" }], + name: "supportsInterface", + outputs: [{ internalType: "bool", name: "", type: "bool" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { internalType: "address", name: "_implementation", type: "address" } + ], + name: "updateImplementation", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + components: [ + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, + { internalType: "uint256", name: "callGasLimit", type: "uint256" }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" + }, + { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256" + }, + { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, + { internalType: "bytes", name: "signature", type: "bytes" } + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple" + }, + { internalType: "bytes32", name: "userOpHash", type: "bytes32" }, + { internalType: "uint256", name: "missingAccountFunds", type: "uint256" } + ], + name: "validateUserOp", + outputs: [ + { internalType: "uint256", name: "validationData", type: "uint256" } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address payable", + name: "withdrawAddress", + type: "address" + }, + { internalType: "uint256", name: "amount", type: "uint256" } + ], + name: "withdrawDepositTo", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { stateMutability: "payable", type: "receive" } +] as const diff --git a/src/account/index.ts b/src/account/index.ts new file mode 100644 index 000000000..50364553f --- /dev/null +++ b/src/account/index.ts @@ -0,0 +1,11 @@ +import { BiconomySmartAccountV2 } from "./BiconomySmartAccountV2.js" +import type { BiconomySmartAccountV2Config } from "./utils/Types.js" + +export * from "./utils/index.js" +export * from "./signers/local-account.js" +export * from "./signers/wallet-client.js" +export * from "./BiconomySmartAccountV2.js" + +export const createSmartAccountClient = BiconomySmartAccountV2.create + +export type SmartWalletConfig = BiconomySmartAccountV2Config diff --git a/src/account/signers/local-account.ts b/src/account/signers/local-account.ts new file mode 100644 index 000000000..65bf3c521 --- /dev/null +++ b/src/account/signers/local-account.ts @@ -0,0 +1,55 @@ +import type { + HDAccount, + Hex, + LocalAccount, + PrivateKeyAccount, + SignableMessage, + TypedData, + TypedDataDefinition +} from "viem" +import { mnemonicToAccount, privateKeyToAccount } from "viem/accounts" +import type { SmartAccountSigner } from "../utils/Types.js" + +export class LocalAccountSigner< + T extends HDAccount | PrivateKeyAccount | LocalAccount +> implements SmartAccountSigner<T> +{ + inner: T + signerType: string + + constructor(inner: T) { + this.inner = inner + this.signerType = inner.type // type: "local" + } + + readonly signMessage: (message: SignableMessage) => Promise<`0x${string}`> = ( + message + ) => { + return this.inner.signMessage({ message }) + } + + readonly signTypedData = async < + const TTypedData extends TypedData | { [key: string]: unknown }, + TPrimaryType extends string = string + >( + params: TypedDataDefinition<TTypedData, TPrimaryType> + ): Promise<Hex> => { + return this.inner.signTypedData(params) + } + + readonly getAddress: () => Promise<`0x${string}`> = async () => { + return this.inner.address + } + + static mnemonicToAccountSigner(key: string): LocalAccountSigner<HDAccount> { + const signer = mnemonicToAccount(key) + return new LocalAccountSigner(signer) + } + + static privateKeyToAccountSigner( + key: Hex + ): LocalAccountSigner<PrivateKeyAccount> { + const signer = privateKeyToAccount(key) + return new LocalAccountSigner(signer) + } +} diff --git a/src/account/signers/wallet-client.ts b/src/account/signers/wallet-client.ts new file mode 100644 index 000000000..69c10fe5a --- /dev/null +++ b/src/account/signers/wallet-client.ts @@ -0,0 +1,48 @@ +import { + type Hex, + type SignableMessage, + type TypedData, + type TypedDataDefinition, + type WalletClient, + getAddress +} from "viem" +import type { SmartAccountSigner } from "../utils/Types.js" + +export class WalletClientSigner implements SmartAccountSigner<WalletClient> { + signerType: string + inner: WalletClient + + constructor(client: WalletClient, signerType: string) { + this.inner = client + if (!signerType) { + throw new Error(`InvalidSignerTypeError: ${signerType}`) + } + this.signerType = signerType + } + + getAddress: () => Promise<`0x${string}`> = async () => { + const addresses = await this.inner.getAddresses() + return getAddress(addresses[0]) + } + + readonly signMessage: (message: SignableMessage) => Promise<`0x${string}`> = + async (message) => { + const account = this.inner.account ?? (await this.getAddress()) + + return this.inner.signMessage({ message, account }) + } + + signTypedData = async < + const TTypedData extends TypedData | { [key: string]: unknown }, + TPrimaryType extends string = string + >( + typedData: TypedDataDefinition<TTypedData, TPrimaryType> + ): Promise<Hex> => { + const account = this.inner.account ?? (await this.getAddress()) + + return this.inner.signTypedData({ + account, + ...typedData + }) + } +} diff --git a/packages/account/src/utils/Constants.ts b/src/account/utils/Constants.ts similarity index 58% rename from packages/account/src/utils/Constants.ts rename to src/account/utils/Constants.ts index 3f594ded6..edd7ef64b 100644 --- a/packages/account/src/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -1,80 +1,93 @@ -import { Hex } from "viem"; -import { - EntryPointAddresses, +import type { Hex } from "viem" +import type { BiconomyFactories, - BiconomyImplementations, - EntryPointAddressesByVersion, BiconomyFactoriesByVersion, + BiconomyImplementations, BiconomyImplementationsByVersion, -} from "./Types.js"; + EntryPointAddresses, + EntryPointAddressesByVersion +} from "./Types.js" -export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000"; +export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000" // will always be latest entrypoint address -export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; +export const DEFAULT_ENTRYPOINT_ADDRESS = + "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789" export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { "0x27a4db290b89ae3373ce4313cbeae72112ae7da9": "V0_0_5", - "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789": "V0_0_6", -}; + "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789": "V0_0_6" +} // will always be latest factory address -export const DEFAULT_BICONOMY_FACTORY_ADDRESS = "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5"; -export const DEFAULT_FALLBACK_HANDLER_ADDRESS = "0x0bBa6d96BD616BedC6BFaa341742FD43c60b83C1"; +export const DEFAULT_BICONOMY_FACTORY_ADDRESS = + "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5" +export const DEFAULT_FALLBACK_HANDLER_ADDRESS = + "0x0bBa6d96BD616BedC6BFaa341742FD43c60b83C1" export const BICONOMY_FACTORY_ADDRESSES: BiconomyFactories = { "0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c": "V1_0_0", - "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5": "V2_0_0", -}; + "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5": "V2_0_0" +} // will always be latest implementation address -export const DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS = "0x0000002512019Dafb59528B82CB92D3c5D2423aC"; +export const DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS = + "0x0000002512019Dafb59528B82CB92D3c5D2423aC" export const BICONOMY_IMPLEMENTATION_ADDRESSES: BiconomyImplementations = { "0x00006b7e42e01957da540dc6a8f7c30c4d816af5": "V1_0_0", - "0x0000002512019Dafb59528B82CB92D3c5D2423aC": "V2_0_0", -}; + "0x0000002512019Dafb59528B82CB92D3c5D2423aC": "V2_0_0" +} export const ENTRYPOINT_ADDRESSES_BY_VERSION: EntryPointAddressesByVersion = { V0_0_5: "0x27a4db290b89ae3373ce4313cbeae72112ae7da9", - V0_0_6: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", -}; + V0_0_6: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789" +} -export const BICONOMY_FACTORY_ADDRESSES_BY_VERSION: BiconomyFactoriesByVersion = Object.fromEntries( - Object.entries(BICONOMY_FACTORY_ADDRESSES).map(([k, v]) => [v, k]), -); +export const BICONOMY_FACTORY_ADDRESSES_BY_VERSION: BiconomyFactoriesByVersion = + Object.fromEntries( + Object.entries(BICONOMY_FACTORY_ADDRESSES).map(([k, v]) => [v, k]) + ) -export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementationsByVersion = Object.fromEntries( - Object.entries(BICONOMY_IMPLEMENTATION_ADDRESSES).map(([k, v]) => [v, k]), -); +export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementationsByVersion = + Object.fromEntries( + Object.entries(BICONOMY_IMPLEMENTATION_ADDRESSES).map(([k, v]) => [v, k]) + ) -export const EIP1559_UNSUPPORTED_NETWORKS: Array<number> = [97, 56, 1442, 1101]; +export const EIP1559_UNSUPPORTED_NETWORKS: Array<number> = [97, 56, 1442, 1101] export const PROXY_CREATION_CODE = - "0x6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033"; + "0x6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033" -export const ADDRESS_RESOLVER_ADDRESS = "0x00000E81673606e07fC79CE5F1b3B26957844468"; +export const ADDRESS_RESOLVER_ADDRESS = + "0x00000E81673606e07fC79CE5F1b3B26957844468" export const DefaultGasLimit = { callGasLimit: 800000, verificationGasLimit: 1000000, - preVerificationGas: 100000, -}; + preVerificationGas: 100000 +} export const ERROR_MESSAGES = { ACCOUNT_ALREADY_DEPLOYED: "Account already deployed", - NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY: "Native token balance is not available during deploy", - NO_RECIPIENT: "One or more of your withdrawals is missing a recipient", + NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY: + "Native token balance is not available during deploy", SPENDER_REQUIRED: "spender is required for ERC20 mode", - NO_FEE_QUOTE: "FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote", + NO_FEE_QUOTE: + "FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote", FAILED_FEE_QUOTE_FETCH: "Failed to fetch fee quote", CHAIN_NOT_FOUND: "Chain not found", - NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT: "'Amount' is required for withdrawal of native token without using a paymaster", -}; + NO_RECIPIENT: "Recipient is required", + NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT: + "'Amount' is required for withdrawal of native token without using a paymaster", + MISSING_RPC_URL: + "rpcUrl is required for PrivateKeyAccount signer type, please provide it in the config" +} -export const NATIVE_TOKEN_ALIAS: Hex = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; +export const NATIVE_TOKEN_ALIAS: Hex = + "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" export const ERC20_ABI = [ "function transfer(address to, uint256 value) external returns (bool)", "function transferFrom(address from, address to, uint256 value) external returns (bool)", "function approve(address spender, uint256 value) external returns (bool)", "function allowance(address owner, address spender) external view returns (uint256)", "function balanceOf(address owner) external view returns (uint256)", - "function decimals() external view returns (uint8)", -]; + "function decimals() external view returns (uint8)" +] diff --git a/src/account/utils/EthersSigner.ts b/src/account/utils/EthersSigner.ts new file mode 100644 index 000000000..5019597be --- /dev/null +++ b/src/account/utils/EthersSigner.ts @@ -0,0 +1,41 @@ +import type { Hex, SignableMessage } from "viem" +import type { LightSigner, SmartAccountSigner } from "../utils/Types.js" + +export class EthersSigner<T extends LightSigner> + implements SmartAccountSigner<T> +{ + signerType = "ethers" + + inner: T + + constructor(inner: T, signerType: string) { + this.inner = inner + this.signerType = signerType + } + + async getAddress() { + return (await this.inner.getAddress()) as Hex + } + + async signMessage(_message: SignableMessage): Promise<Hex> { + const message = typeof _message === "string" ? _message : _message.raw + const signature = await this.inner?.signMessage(message) + return this.#correctSignature(signature as Hex) + } + + async signTypedData(_notUsed: any): Promise<Hex> { + throw new Error("signTypedData is not supported for Ethers Signer") + } + + #correctSignature = (_signature: Hex): Hex => { + let signature = _signature + const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27 + signature = signature.slice(0, -2) + correctV.toString(16) + } + return signature as Hex + } +} + +export default EthersSigner diff --git a/src/account/utils/HttpRequests.ts b/src/account/utils/HttpRequests.ts new file mode 100644 index 000000000..07e900225 --- /dev/null +++ b/src/account/utils/HttpRequests.ts @@ -0,0 +1,72 @@ +import { getAAError } from "../../bundler/utils/getAAError.js" +import { Logger } from "./Logger.js" +import type { Service } from "./Types.js" + +export enum HttpMethod { + Get = "get", + Post = "post", + Delete = "delete" +} + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export interface HttpRequest { + url: string + method: HttpMethod + body?: Record<string, any> +} + +export async function sendRequest<T>( + { url, method, body }: HttpRequest, + service: Service +): Promise<T> { + const response = await fetch(url, { + method, + headers: { + Accept: "application/json", + "Content-Type": "application/json" + }, + body: JSON.stringify(body) + }) + + // biome-ignore lint/suspicious/noImplicitAnyLet: <explanation> + let jsonResponse: any + try { + jsonResponse = await response.json() + Logger.log(`${service} RPC Response`, jsonResponse) + } catch (error) { + if (!response.ok) { + throw await getAAError(response.statusText, service) + } + } + + if (response.ok) { + return jsonResponse as T + } + if (jsonResponse.error) { + throw await getAAError( + `Error coming from ${service}: ${jsonResponse.error.message}` + ) + } + if (jsonResponse.message) { + throw await getAAError(jsonResponse.message) + } + if (jsonResponse.msg) { + throw await getAAError(jsonResponse.msg) + } + if (jsonResponse.data) { + throw await getAAError(jsonResponse.data) + } + if (jsonResponse.detail) { + throw await getAAError(jsonResponse.detail) + } + if (jsonResponse.message) { + throw await getAAError(jsonResponse.message) + } + if (jsonResponse.nonFieldErrors) { + throw await getAAError(jsonResponse.nonFieldErrors) + } + if (jsonResponse.delegate) { + throw await getAAError(jsonResponse.delegate) + } + throw await getAAError(response.statusText) +} diff --git a/packages/common/src/utils/Logger.ts b/src/account/utils/Logger.ts similarity index 69% rename from packages/common/src/utils/Logger.ts rename to src/account/utils/Logger.ts index 0bdcae373..fd0aad9cb 100644 --- a/packages/common/src/utils/Logger.ts +++ b/src/account/utils/Logger.ts @@ -4,9 +4,15 @@ * * @param {any} message Message to be logged */ + +// biome-ignore lint/complexity/noStaticOnlyClass: <explanation> class Logger { // By default, the logger is not in debug mode. - static isDebug: boolean = process.env.BICONOMY_SDK_DEBUG === "true" ? true : process.env.REACT_APP_BICONOMY_SDK_DEBUG === "true" ? true : false; + static isDebug: boolean = [ + "BICONOMY_SDK_DEBUG", + "REACT_APP_BICONOMY_SDK_DEBUG", + "NEXT_PUBLIC_BICONOMY_SDK_DEBUG" + ].some((key) => process.env[key]?.toString() === "true") /** * \x1b[0m is an escape sequence to reset the color of the text @@ -17,33 +23,33 @@ class Logger { */ /* eslint-disable @typescript-eslint/no-explicit-any */ static log(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const logMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[36m${message}\x1b[0m:`; + const timestamp = new Date().toISOString() + const logMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[36m${message}\x1b[0m:` if (Logger.isDebug) { - console.log(logMessage, value === undefined ? "" : value); + console.log(logMessage, value === undefined ? "" : value) } } /* eslint-disable @typescript-eslint/no-explicit-any */ static warn(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const warnMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[33mWARN\x1b[0m: \x1b[36m${message}\x1b[0m`; + const timestamp = new Date().toISOString() + const warnMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[33mWARN\x1b[0m: \x1b[36m${message}\x1b[0m` if (Logger.isDebug) { - console.warn(warnMessage, value === undefined ? "" : value); + console.warn(warnMessage, value === undefined ? "" : value) } } /* eslint-disable @typescript-eslint/no-explicit-any */ static error(message: string, value?: any): void { - const timestamp = new Date().toISOString(); - const errorMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[31mERROR\x1b[0m: \x1b[36m${message}\x1b[0m`; + const timestamp = new Date().toISOString() + const errorMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[31mERROR\x1b[0m: \x1b[36m${message}\x1b[0m` if (Logger.isDebug) { - console.error(errorMessage, value === undefined ? "" : value); + console.error(errorMessage, value === undefined ? "" : value) } } } -export { Logger }; +export { Logger } diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts new file mode 100644 index 000000000..857e51167 --- /dev/null +++ b/src/account/utils/Types.ts @@ -0,0 +1,597 @@ +import type { + Address, + Chain, + Hash, + Hex, + PrivateKeyAccount, + PublicClient, + SignTypedDataParameters, + SignableMessage, + TypedData, + TypedDataDefinition, + WalletClient +} from "viem" +import type { IBundler } from "../../bundler" +import type { BaseValidationModule, ModuleInfo } from "../../modules" +import type { + FeeQuotesOrDataDto, + IPaymaster, + PaymasterFeeQuote, + PaymasterMode, + SmartAccountData, + SponsorUserOperationDto +} from "../../paymaster" + +export type EntryPointAddresses = Record<string, string> +export type BiconomyFactories = Record<string, string> +export type BiconomyImplementations = Record<string, string> +export type EntryPointAddressesByVersion = Record<string, string> +export type BiconomyFactoriesByVersion = Record<string, string> +export type BiconomyImplementationsByVersion = Record<string, string> + +export type SmartAccountConfig = { + /** entryPointAddress: address of the entry point */ + entryPointAddress: string + /** factoryAddress: address of the smart account factory */ + bundler?: IBundler +} + +export interface BalancePayload { + /** address: The address of the account */ + address: string + /** chainId: The chainId of the network */ + chainId: number + /** amount: The amount of the balance */ + amount: bigint + /** decimals: The number of decimals */ + decimals: number + /** formattedAmount: The amount of the balance formatted */ + formattedAmount: string +} + +export interface WithdrawalRequest { + /** The address of the asset */ + address: Hex + /** The amount to withdraw. Expects unformatted amount. Will use max amount if unset */ + amount?: bigint + /** The destination address of the funds. The second argument from the `withdraw(...)` function will be used as the default if left unset. */ + recipient?: Hex +} + +export interface GasOverheads { + /** fixed: fixed gas overhead */ + fixed: number + /** perUserOp: per user operation gas overhead */ + perUserOp: number + /** perUserOpWord: per user operation word gas overhead */ + perUserOpWord: number + /** zeroByte: per byte gas overhead */ + zeroByte: number + /** nonZeroByte: per non zero byte gas overhead */ + nonZeroByte: number + /** bundleSize: per signature bundleSize */ + bundleSize: number + /** sigSize: sigSize gas overhead */ + sigSize: number +} + +export type BaseSmartAccountConfig = { + /** index: helps to not conflict with other smart account instances */ + index?: number + /** provider: WalletClientSigner from viem */ + provider?: WalletClient + /** entryPointAddress: address of the smart account entry point */ + entryPointAddress?: string + /** accountAddress: address of the smart account, potentially counterfactual */ + accountAddress?: string + /** overheads: {@link GasOverheads} */ + overheads?: Partial<GasOverheads> + /** paymaster: {@link IPaymaster} interface */ + paymaster?: IPaymaster + /** chainId: chainId of the network */ + chainId?: number +} + +export type BiconomyTokenPaymasterRequest = { + /** feeQuote: {@link PaymasterFeeQuote} */ + feeQuote: PaymasterFeeQuote + /** spender: The address of the spender who is paying for the transaction, this can usually be set to feeQuotesResponse.tokenPaymasterAddress */ + spender: Hex + /** maxApproval: If set to true, the paymaster will approve the maximum amount of tokens required for the transaction. Not recommended */ + maxApproval?: boolean + /* skip option to patch callData if approval is already given to the paymaster */ + skipPatchCallData?: boolean +} + +export type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick< + T, + Exclude<keyof T, Keys> +> & + { + [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>> + }[Keys] + +export type ConditionalBundlerProps = RequireAtLeastOne< + { + bundler: IBundler + bundlerUrl: string + }, + "bundler" | "bundlerUrl" +> +export type ResolvedBundlerProps = { + bundler: IBundler +} +export type ConditionalValidationProps = RequireAtLeastOne< + { + defaultValidationModule: BaseValidationModule + signer: SupportedSigner + }, + "defaultValidationModule" | "signer" +> + +export type ResolvedValidationProps = { + /** defaultValidationModule: {@link BaseValidationModule} */ + defaultValidationModule: BaseValidationModule + /** activeValidationModule: {@link BaseValidationModule}. The active validation module. Will default to the defaultValidationModule */ + activeValidationModule: BaseValidationModule + /** signer: ethers Wallet, viemWallet or alchemys SmartAccountSigner */ + signer: SmartAccountSigner + /** chainId: chainId of the network */ + chainId: number +} + +export type BiconomySmartAccountV2ConfigBaseProps = { + /** Factory address of biconomy factory contract or some other contract you have deployed on chain */ + factoryAddress?: Hex + /** Sender address: If you want to override the Signer address with some other address and get counterfactual address can use this to pass the EOA and get SA address */ + senderAddress?: Hex + /** implementation of smart contract address or some other contract you have deployed and want to override */ + implementationAddress?: Hex + /** defaultFallbackHandler: override the default fallback contract address */ + defaultFallbackHandler?: Hex + /** rpcUrl: Rpc url, optional, we set default rpc url if not passed. */ + rpcUrl?: string // as good as Provider + /** paymasterUrl: The Paymaster URL retrieved from the Biconomy dashboard */ + paymasterUrl?: string + /** biconomyPaymasterApiKey: The API key retrieved from the Biconomy dashboard */ + biconomyPaymasterApiKey?: string + /** activeValidationModule: The active validation module. Will default to the defaultValidationModule */ + activeValidationModule?: BaseValidationModule + /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ + scanForUpgradedAccountsFromV1?: boolean + /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ + maxIndexForScan?: number + /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains */ + viemChain?: Chain + /** The initial code to be used for the smart account */ + initCode?: Hex +} +export type BiconomySmartAccountV2Config = + BiconomySmartAccountV2ConfigBaseProps & + BaseSmartAccountConfig & + ConditionalBundlerProps & + ConditionalValidationProps + +export type BiconomySmartAccountV2ConfigConstructorProps = + BiconomySmartAccountV2ConfigBaseProps & + BaseSmartAccountConfig & + ResolvedBundlerProps & + ResolvedValidationProps + +export type BuildUserOpOptions = { + /** overrides: Explicitly set gas values */ + // overrides?: Overrides; + /** Not currently in use */ + // skipBundlerGasEstimation?: boolean; + /** params relevant to the module, mostly relevant to sessions */ + params?: ModuleInfo + /** nonceOptions: For overriding the nonce */ + nonceOptions?: NonceOptions + /** forceEncodeForBatch: For encoding the user operation for batch */ + forceEncodeForBatch?: boolean + /** paymasterServiceData: Options specific to transactions that involve a paymaster */ + paymasterServiceData?: PaymasterUserOperationDto + /** simulationType: Determine which parts of the tx a bundler will simulate: "validation" | "validation_and_execution". */ + simulationType?: SimulationType + /** stateOverrideSet: For overriding the state */ + stateOverrideSet?: StateOverrideSet + /** set to true if the tx is being used *only* to deploy the smartContract, so "0x" is set as the userOp.callData */ + useEmptyDeployCallData?: boolean +} + +export type NonceOptions = { + /** nonceKey: The key to use for nonce */ + nonceKey?: number + /** nonceOverride: The nonce to use for the transaction */ + nonceOverride?: number +} + +export type SimulationType = "validation" | "validation_and_execution" + +export type Overrides = { + /* Value used by inner account execution */ + callGasLimit?: Hex + /* Actual gas used by the validation of this UserOperation */ + verificationGasLimit?: Hex + /* Gas overhead of this UserOperation */ + preVerificationGas?: Hex + /* Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) */ + maxFeePerGas?: Hex + /* Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) */ + maxPriorityFeePerGas?: Hex + /* Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster ("0x" for self-sponsored transaction) */ + paymasterData?: Hex + /* Data passed into the account along with the nonce during the verification step */ + signature?: Hex +} + +export type InitilizationData = { + accountIndex?: number + signerAddress?: string +} + +export type PaymasterUserOperationDto = SponsorUserOperationDto & + FeeQuotesOrDataDto & { + /** mode: sponsored or erc20 */ + mode: PaymasterMode + /** Always recommended, especially when using token paymaster */ + calculateGasLimits?: boolean + /** Expiry duration in seconds */ + expiryDuration?: number + /** Webhooks to be fired after user op is sent */ + webhookData?: Record<string, any> + /** Smart account meta data */ + smartAccountInfo?: SmartAccountData + /** the fee-paying token address */ + feeTokenAddress?: string + /** The fee quote */ + feeQuote?: PaymasterFeeQuote + /** The address of the spender. This is usually set to FeeQuotesOrDataResponse.tokenPaymasterAddress */ + spender?: Hex + /** Not recommended */ + maxApproval?: boolean + /* skip option to patch callData if approval is already given to the paymaster */ + skipPatchCallData?: boolean + } + +export type InitializeV2Data = { + accountIndex?: number +} + +export type EstimateUserOpGasParams = { + userOp: Partial<UserOperationStruct> + // overrides?: Overrides; + /** Currrently has no effect */ + // skipBundlerGasEstimation?: boolean; + /** paymasterServiceData: Options specific to transactions that involve a paymaster */ + paymasterServiceData?: SponsorUserOperationDto +} + +export interface TransactionDetailsForUserOp { + /** target: The address of the contract to call */ + target: string + /** data: The data to send to the contract */ + data: string + /** value: The value to send to the contract */ + value?: BigNumberish + /** gasLimit: The gas limit to use for the transaction */ + gasLimit?: BigNumberish + /** maxFeePerGas: The maximum fee per gas to use for the transaction */ + maxFeePerGas?: BigNumberish + /** maxPriorityFeePerGas: The maximum priority fee per gas to use for the transaction */ + maxPriorityFeePerGas?: BigNumberish + /** nonce: The nonce to use for the transaction */ + nonce?: BigNumberish +} + +export type CounterFactualAddressParam = { + index?: number + validationModule?: BaseValidationModule + /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ + scanForUpgradedAccountsFromV1?: boolean + /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ + maxIndexForScan?: number +} + +export type QueryParamsForAddressResolver = { + eoaAddress: Hex + index: number + moduleAddress: Hex + moduleSetupData: Hex + maxIndexForScan?: number +} + +export type SmartAccountInfo = { + /** accountAddress: The address of the smart account */ + accountAddress: Hex + /** factoryAddress: The address of the smart account factory */ + factoryAddress: Hex + /** currentImplementation: The address of the current implementation */ + currentImplementation: string + /** currentVersion: The version of the smart account */ + currentVersion: string + /** factoryVersion: The version of the factory */ + factoryVersion: string + /** deploymentIndex: The index of the deployment */ + deploymentIndex: BigNumberish +} + +export type ValueOrData = RequireAtLeastOne< + { + value: BigNumberish | string + data: string + }, + "value" | "data" +> +export type Transaction = { + to: string +} & ValueOrData + +export type SupportedToken = Omit< + PaymasterFeeQuote, + "maxGasFeeUSD" | "usdPayment" | "maxGasFee" | "validUntil" +> + +export type Signer = LightSigner & { + // biome-ignore lint/suspicious/noExplicitAny: any is used here to allow for the ethers provider + provider: any +} +export type SupportedSignerName = "alchemy" | "ethers" | "viem" +export type SupportedSigner = + | SmartAccountSigner + | WalletClient + | Signer + | LightSigner + | PrivateKeyAccount +export type Service = "Bundler" | "Paymaster" + +export interface LightSigner { + getAddress(): Promise<string> + signMessage(message: string | Uint8Array): Promise<string> +} + +export type StateOverrideSet = { + [key: string]: { + balance?: string + nonce?: string + code?: string + state?: object + stateDiff?: object + } +} + +export type BigNumberish = Hex | number | bigint +export type BytesLike = Uint8Array | Hex + +//#region UserOperationStruct +// based on @account-abstraction/common +// this is used for building requests +export interface UserOperationStruct { + /* the origin of the request */ + sender: string + /* nonce of the transaction, returned from the entry point for this Address */ + nonce: BigNumberish + /* the initCode for creating the sender if it does not exist yet, otherwise "0x" */ + initCode: BytesLike | "0x" + /* the callData passed to the target */ + callData: BytesLike + /* Value used by inner account execution */ + callGasLimit?: BigNumberish + /* Actual gas used by the validation of this UserOperation */ + verificationGasLimit?: BigNumberish + /* Gas overhead of this UserOperation */ + preVerificationGas?: BigNumberish + /* Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) */ + maxFeePerGas?: BigNumberish + /* Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) */ + maxPriorityFeePerGas?: BigNumberish + /* Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster ("0x" for self-sponsored transaction) */ + paymasterAndData: BytesLike | "0x" + /* Data passed into the account along with the nonce during the verification step */ + signature: BytesLike +} +//#endregion UserOperationStruct + +//#region SmartAccountSigner +/** + * A signer that can sign messages and typed data. + * + * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc. + * + * @var signerType - the type of the signer (e.g. local, hardware, etc.) + * @var inner - the inner client of @type {Inner} + * + * @method getAddress - get the address of the signer + * @method signMessage - sign a message + * @method signTypedData - sign typed data + */ +export interface SmartAccountSigner<Inner = any> { + signerType: string + inner: Inner + + getAddress: () => Promise<Address> + + signMessage: (message: SignableMessage) => Promise<Hex> + + signTypedData: < + const TTypedData extends TypedData | { [key: string]: unknown }, + TPrimaryType extends string = string + >( + params: TypedDataDefinition<TTypedData, TPrimaryType> + ) => Promise<Hex> +} +//#endregion SmartAccountSigner + +//#region UserOperationCallData +export type UserOperationCallData = + | { + /* the target of the call */ + target: Address + /* the data passed to the target */ + data: Hex + /* the amount of native token to send to the target (default: 0) */ + value?: bigint + } + | Hex +//#endregion UserOperationCallData + +//#region BatchUserOperationCallData +export type BatchUserOperationCallData = Exclude<UserOperationCallData, Hex>[] +//#endregion BatchUserOperationCallData + +export type SignTypedDataParams = Omit<SignTypedDataParameters, "privateKey"> + +export type BasSmartContractAccountProps = + BiconomySmartAccountV2ConfigConstructorProps & { + /** chain: The chain from viem */ + chain: Chain + /** rpcClient: The rpc url string */ + rpcClient: string + /** factoryAddress: The address of the factory */ + factoryAddress: Hex + /** entryPointAddress: The address of the entry point */ + entryPointAddress: Hex + /** accountAddress: The address of the account */ + accountAddress?: Address + } + +export interface ISmartContractAccount< + TSigner extends SmartAccountSigner = SmartAccountSigner +> { + /** + * The RPC provider the account uses to make RPC calls + */ + readonly rpcProvider: PublicClient + + /** + * @returns the init code for the account + */ + getInitCode(): Promise<Hex> + + /** + * This is useful for estimating gas costs. It should return a signature that doesn't cause the account to revert + * when validation is run during estimation. + * + * @returns a dummy signature that doesn't cause the account to revert during estimation + */ + getDummySignature(): Hex + + /** + * Encodes a call to the account's execute function. + * + * @param target - the address receiving the call data + * @param value - optionally the amount of native token to send + * @param data - the call data or "0x" if empty + */ + encodeExecute(target: string, value: bigint, data: string): Promise<Hex> + + /** + * Encodes a batch of transactions to the account's batch execute function. + * NOTE: not all accounts support batching. + * @param txs - An Array of objects containing the target, value, and data for each transaction + * @returns the encoded callData for a UserOperation + */ + encodeBatchExecute(txs: BatchUserOperationCallData): Promise<Hex> + + /** + * @returns the nonce of the account + */ + getNonce(): Promise<bigint> + + /** + * If your account handles 1271 signatures of personal_sign differently + * than it does UserOperations, you can implement two different approaches to signing + * + * @param uoHash -- The hash of the UserOperation to sign + * @returns the signature of the UserOperation + */ + signUserOperationHash(uoHash: Hash): Promise<Hash> + + /** + * Returns a signed and prefixed message. + * + * @param msg - the message to sign + * @returns the signature of the message + */ + signMessage(msg: string | Uint8Array | Hex): Promise<Hex> + + /** + * Signs a typed data object as per ERC-712 + * + * @param params - {@link SignTypedDataParams} + * @returns the signed hash for the message passed + */ + signTypedData(params: SignTypedDataParams): Promise<Hash> + + /** + * If the account is not deployed, it will sign the message and then wrap it in 6492 format + * + * @param msg - the message to sign + * @returns ths signature wrapped in 6492 format + */ + signMessageWith6492(msg: string | Uint8Array | Hex): Promise<Hex> + + /** + * If the account is not deployed, it will sign the typed data blob and then wrap it in 6492 format + * + * @param params - {@link SignTypedDataParams} + * @returns the signed hash for the params passed in wrapped in 6492 format + */ + signTypedDataWith6492(params: SignTypedDataParams): Promise<Hash> + + /** + * @returns the address of the account + */ + getAddress(): Promise<Address> + + /** + * @returns the current account signer instance that the smart account client + * operations are being signed with. + * + * The signer is expected to be the owner or one of the owners of the account + * for the signatures to be valid for the acting account. + */ + getSigner(): TSigner + + /** + * @returns the address of the factory contract for the smart account + */ + getFactoryAddress(): Address + + /** + * @returns the address of the entry point contract for the smart account + */ + getEntryPointAddress(): Address + + /** + * Allows you to add additional functionality and utility methods to this account + * via a decorator pattern. + * + * NOTE: this method does not allow you to override existing methods on the account. + * + * @example + * ```ts + * const account = new BaseSmartCobntractAccount(...).extend((account) => ({ + * readAccountState: async (...args) => { + * return this.rpcProvider.readContract({ + * address: await this.getAddress(), + * abi: ThisContractsAbi + * args: args + * }); + * } + * })); + * + * account.debugSendUserOperation(...); + * ``` + * + * @param extendFn -- this function gives you access to the created account instance and returns an object + * with the extension methods + * @returns -- the account with the extension methods added + */ + extend: <R>(extendFn: (self: this) => R) => this & R + + encodeUpgradeToAndCall: ( + upgradeToImplAddress: Address, + upgradeToInitData: Hex + ) => Promise<Hex> +} diff --git a/src/account/utils/Utils.ts b/src/account/utils/Utils.ts new file mode 100644 index 000000000..979368c75 --- /dev/null +++ b/src/account/utils/Utils.ts @@ -0,0 +1,160 @@ +import { + type Address, + type Hash, + type Hex, + concat, + encodeAbiParameters, + keccak256, + parseAbiParameters +} from "viem" +import type { UserOperationStruct } from "../../account" +import { type SupportedSigner, convertSigner } from "../../account" +import { extractChainIdFromBundlerUrl } from "../../bundler" +import { extractChainIdFromPaymasterUrl } from "../../bundler" +import type { BiconomySmartAccountV2Config } from "./Types.js" + +/** + * pack the userOperation + * @param op + * @param forSignature "true" if the hash is needed to calculate the getUserOpHash() + * "false" to pack entire UserOp, for calculating the calldata cost of putting it on-chain. + */ +export function packUserOp( + op: Partial<UserOperationStruct>, + forSignature = true +): string { + if (!op.initCode || !op.callData || !op.paymasterAndData) + throw new Error("Missing userOp properties") + if (forSignature) { + return encodeAbiParameters( + parseAbiParameters( + "address, uint256, bytes32, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32" + ), + [ + op.sender as Hex, + BigInt(op.nonce as Hex), + keccak256(op.initCode as Hex), + keccak256(op.callData as Hex), + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + keccak256(op.paymasterAndData as Hex) + ] + ) + } + // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) + return encodeAbiParameters( + parseAbiParameters( + "address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes, bytes" + ), + [ + op.sender as Hex, + BigInt(op.nonce as Hex), + op.initCode as Hex, + op.callData as Hex, + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + op.paymasterAndData as Hex, + op.signature as Hex + ] + ) +} + +export const isNullOrUndefined = (value: any): value is undefined => { + return value === null || value === undefined +} + +export const compareChainIds = async ( + signer: SupportedSigner, + biconomySmartAccountConfig: BiconomySmartAccountV2Config, + skipChainIdCalls: boolean + // biome-ignore lint/suspicious/noConfusingVoidType: <explanation> +): Promise<Error | void> => { + const signerResult = await convertSigner( + signer, + skipChainIdCalls, + biconomySmartAccountConfig.rpcUrl + ) + + const chainIdFromBundler = biconomySmartAccountConfig.bundlerUrl + ? extractChainIdFromBundlerUrl(biconomySmartAccountConfig.bundlerUrl) + : biconomySmartAccountConfig.bundler + ? extractChainIdFromBundlerUrl( + biconomySmartAccountConfig.bundler.getBundlerUrl() + ) + : undefined + + const chainIdFromPaymasterUrl = biconomySmartAccountConfig.paymasterUrl + ? extractChainIdFromPaymasterUrl(biconomySmartAccountConfig.paymasterUrl) + : undefined + + if (!isNullOrUndefined(signerResult.chainId)) { + if ( + chainIdFromBundler !== undefined && + signerResult.chainId !== chainIdFromBundler + ) { + throw new Error( + `Chain IDs from signer (${signerResult.chainId}) and bundler (${chainIdFromBundler}) do not match.` + ) + } + if ( + chainIdFromPaymasterUrl !== undefined && + signerResult.chainId !== chainIdFromPaymasterUrl + ) { + throw new Error( + `Chain IDs from signer (${signerResult.chainId}) and paymaster (${chainIdFromPaymasterUrl}) do not match.` + ) + } + } else { + if ( + chainIdFromBundler !== undefined && + chainIdFromPaymasterUrl !== undefined && + chainIdFromBundler !== chainIdFromPaymasterUrl + ) { + throw new Error( + `Chain IDs from bundler (${chainIdFromBundler}) and paymaster (${chainIdFromPaymasterUrl}) do not match.` + ) + } + } +} + +export const isValidRpcUrl = (url: string): boolean => { + const regex = /^(https:\/\/|wss:\/\/).*/ + return regex.test(url) +} + +export const addressEquals = (a?: string, b?: string): boolean => + !!a && !!b && a?.toLowerCase() === b.toLowerCase() + +export type SignWith6492Params = { + factoryAddress: Address + factoryCalldata: Hex + signature: Hash +} + +export const wrapSignatureWith6492 = ({ + factoryAddress, + factoryCalldata, + signature +}: SignWith6492Params): Hash => { + // wrap the signature as follows: https://eips.ethereum.org/EIPS/eip-6492 + // concat( + // abi.encode( + // (create2Factory, factoryCalldata, originalERC1271Signature), + // (address, bytes, bytes)), + // magicBytes + // ) + return concat([ + encodeAbiParameters(parseAbiParameters("address, bytes, bytes"), [ + factoryAddress, + factoryCalldata, + signature + ]), + "0x6492649264926492649264926492649264926492649264926492649264926492" + ]) +} diff --git a/src/account/utils/convertSigner.ts b/src/account/utils/convertSigner.ts new file mode 100644 index 000000000..191c84ebd --- /dev/null +++ b/src/account/utils/convertSigner.ts @@ -0,0 +1,101 @@ +import { + http, + type PrivateKeyAccount, + type WalletClient, + createWalletClient +} from "viem" +import { WalletClientSigner } from "../../account" +import type { Signer, SmartAccountSigner, SupportedSigner } from "../../account" +import { EthersSigner } from "./EthersSigner.js" + +interface SmartAccountResult { + signer: SmartAccountSigner + chainId: number | null + rpcUrl: string | undefined +} + +function isPrivateKeyAccount( + signer: SupportedSigner +): signer is PrivateKeyAccount { + return (signer as PrivateKeyAccount).type === "local" +} + +function isWalletClient(signer: SupportedSigner): signer is WalletClient { + return (signer as WalletClient).type === "walletClient" +} + +function isEthersSigner(signer: SupportedSigner): signer is Signer { + return (signer as Signer).provider !== undefined +} + +function isAlchemySigner( + signer: SupportedSigner +): signer is SmartAccountSigner { + return (signer as SmartAccountSigner).signerType !== undefined +} + +export const convertSigner = async ( + signer: SupportedSigner, + skipChainIdCalls = false, + _rpcUrl?: string +): Promise<SmartAccountResult> => { + let resolvedSmartAccountSigner: SmartAccountSigner + let rpcUrl: string | undefined = _rpcUrl + let chainId: number | null = null + + if (!isAlchemySigner(signer)) { + if (isEthersSigner(signer)) { + const ethersSigner = signer as Signer + if (!skipChainIdCalls) { + // If chainId not provided, get it from walletClient + if (!ethersSigner.provider) { + throw new Error("Cannot consume an ethers Wallet without a provider") + } + const chainIdFromProvider = await ethersSigner.provider.getNetwork() + if (!chainIdFromProvider?.chainId) { + throw new Error("Cannot consume an ethers Wallet without a chainId") + } + chainId = Number(chainIdFromProvider.chainId) + } + // convert ethers Wallet to alchemy's SmartAccountSigner under the hood + resolvedSmartAccountSigner = new EthersSigner(ethersSigner, "ethers") + // @ts-ignore + rpcUrl = ethersSigner.provider?.connection?.url ?? undefined + } else if (isWalletClient(signer)) { + const walletClient = signer as WalletClient + if (!walletClient.account) { + throw new Error("Cannot consume a viem wallet without an account") + } + if (!skipChainIdCalls) { + // If chainId not provided, get it from walletClient + if (!walletClient.chain) { + throw new Error("Cannot consume a viem wallet without a chainId") + } + chainId = walletClient.chain.id + } + // convert viems walletClient to alchemy's SmartAccountSigner under the hood + resolvedSmartAccountSigner = new WalletClientSigner(walletClient, "viem") + rpcUrl = walletClient?.transport?.url ?? undefined + } else if (isPrivateKeyAccount(signer)) { + if (rpcUrl !== null && rpcUrl !== undefined) { + const walletClient = createWalletClient({ + account: signer as PrivateKeyAccount, + transport: http(rpcUrl) + }) + resolvedSmartAccountSigner = new WalletClientSigner( + walletClient, + "viem" + ) + } else { + throw new Error( + "rpcUrl is required for PrivateKeyAccount signer type, please provide it in the config" + ) + } + } else { + throw new Error("Unsupported signer") + } + } else { + resolvedSmartAccountSigner = signer as SmartAccountSigner + } + return { signer: resolvedSmartAccountSigner, rpcUrl, chainId } +} diff --git a/src/account/utils/getChain.ts b/src/account/utils/getChain.ts new file mode 100644 index 000000000..63bb51401 --- /dev/null +++ b/src/account/utils/getChain.ts @@ -0,0 +1,18 @@ +import * as chains from "viem/chains" +import type { Chain } from "viem/chains" + +/** + * Utility method for converting a chainId to a {@link Chain} object + * + * @param chainId + * @returns a {@link Chain} object for the given chainId + * @throws if the chainId is not found + */ +export const getChain = (chainId: number): Chain => { + for (const chain of Object.values(chains)) { + if (chain.id === chainId) { + return chain + } + } + throw new Error("Chain not found") +} diff --git a/src/account/utils/index.ts b/src/account/utils/index.ts new file mode 100644 index 000000000..b1f3d8378 --- /dev/null +++ b/src/account/utils/index.ts @@ -0,0 +1,8 @@ +export * from "./Types.js" +export * from "./Utils.js" +export * from "./Constants.js" +export * from "./convertSigner.js" +export * from "./getChain.js" +export * from "./Logger.js" +export * from "./HttpRequests.js" +export * from "./EthersSigner.js" diff --git a/packages/bundler/src/Bundler.ts b/src/bundler/Bundler.ts similarity index 55% rename from packages/bundler/src/Bundler.ts rename to src/bundler/Bundler.ts index 3782d7066..6772b131f 100644 --- a/packages/bundler/src/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -1,33 +1,36 @@ -import { getChain, type UserOperationStruct } from "@alchemy/aa-core"; -import { createPublicClient, http, PublicClient } from "viem"; -import { IBundler } from "./interfaces/IBundler.js"; +import { http, type PublicClient, createPublicClient } from "viem" +import type { StateOverrideSet, UserOperationStruct } from "../account" +import type { SimulationType } from "../account" +import { HttpMethod, getChain, sendRequest } from "../account" +import type { IBundler } from "./interfaces/IBundler.js" import { - GetUserOperationReceiptResponse, - GetUserOpByHashResponse, + DEFAULT_ENTRYPOINT_ADDRESS, + UserOpReceiptIntervals, + UserOpReceiptMaxDurationIntervals, + UserOpWaitForTxHashIntervals, + UserOpWaitForTxHashMaxDurationIntervals +} from "./utils/Constants.js" +import { + getTimestampInSeconds, + transformUserOP +} from "./utils/HelperFunction.js" +import type { + BundlerConfigWithChainId, Bundlerconfig, - UserOpResponse, EstimateUserOpGasResponse, - UserOpReceipt, - SendUserOpResponse, - UserOpGasResponse, - UserOpByHashResponse, - GetGasFeeValuesResponse, GasFeeValues, - UserOpStatus, + GetGasFeeValuesResponse, + GetUserOpByHashResponse, + GetUserOperationReceiptResponse, GetUserOperationStatusResponse, - SimulationType, - BundlerConfigWithChainId, -} from "./utils/Types.js"; -import { transformUserOP, getTimestampInSeconds } from "./utils/HelperFunction.js"; -import { - UserOpReceiptIntervals, - UserOpWaitForTxHashIntervals, - UserOpWaitForTxHashMaxDurationIntervals, - UserOpReceiptMaxDurationIntervals, - DEFAULT_ENTRYPOINT_ADDRESS, -} from "./utils/Constants.js"; -import { extractChainIdFromBundlerUrl } from "./utils/Utils.js"; -import { sendRequest, HttpMethod, StateOverrideSet } from "@biconomy/common"; + SendUserOpResponse, + UserOpByHashResponse, + UserOpGasResponse, + UserOpReceipt, + UserOpResponse, + UserOpStatus +} from "./utils/Types.js" +import { extractChainIdFromBundlerUrl } from "./utils/Utils.js" /** * This class implements IBundler interface. @@ -35,53 +38,59 @@ import { sendRequest, HttpMethod, StateOverrideSet } from "@biconomy/common"; * Checkout the proposal for more details on Bundlers. */ export class Bundler implements IBundler { - private bundlerConfig: BundlerConfigWithChainId; + private bundlerConfig: BundlerConfigWithChainId // eslint-disable-next-line no-unused-vars - UserOpReceiptIntervals!: { [key in number]?: number }; + UserOpReceiptIntervals!: { [key in number]?: number } - UserOpWaitForTxHashIntervals!: { [key in number]?: number }; + UserOpWaitForTxHashIntervals!: { [key in number]?: number } - UserOpReceiptMaxDurationIntervals!: { [key in number]?: number }; + UserOpReceiptMaxDurationIntervals!: { [key in number]?: number } - UserOpWaitForTxHashMaxDurationIntervals!: { [key in number]?: number }; + UserOpWaitForTxHashMaxDurationIntervals!: { [key in number]?: number } - private provider: PublicClient; + private provider: PublicClient constructor(bundlerConfig: Bundlerconfig) { - const parsedChainId: number = bundlerConfig?.chainId || extractChainIdFromBundlerUrl(bundlerConfig.bundlerUrl); - this.bundlerConfig = { ...bundlerConfig, chainId: parsedChainId }; + const parsedChainId: number = + bundlerConfig?.chainId || + extractChainIdFromBundlerUrl(bundlerConfig.bundlerUrl) + this.bundlerConfig = { ...bundlerConfig, chainId: parsedChainId } this.provider = createPublicClient({ chain: bundlerConfig.viemChain ?? getChain(parsedChainId), - transport: http((bundlerConfig.viemChain || getChain(parsedChainId)).rpcUrls.default.http[0]), - }); + transport: http( + (bundlerConfig.viemChain || getChain(parsedChainId)).rpcUrls.default + .http[0] + ) + }) this.UserOpReceiptIntervals = { ...UserOpReceiptIntervals, - ...bundlerConfig.userOpReceiptIntervals, - }; + ...bundlerConfig.userOpReceiptIntervals + } this.UserOpWaitForTxHashIntervals = { ...UserOpWaitForTxHashIntervals, - ...bundlerConfig.userOpWaitForTxHashIntervals, - }; + ...bundlerConfig.userOpWaitForTxHashIntervals + } this.UserOpReceiptMaxDurationIntervals = { ...UserOpReceiptMaxDurationIntervals, - ...bundlerConfig.userOpReceiptMaxDurationIntervals, - }; + ...bundlerConfig.userOpReceiptMaxDurationIntervals + } this.UserOpWaitForTxHashMaxDurationIntervals = { ...UserOpWaitForTxHashMaxDurationIntervals, - ...bundlerConfig.userOpWaitForTxHashMaxDurationIntervals, - }; + ...bundlerConfig.userOpWaitForTxHashMaxDurationIntervals + } - this.bundlerConfig.entryPointAddress = bundlerConfig.entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS; + this.bundlerConfig.entryPointAddress = + bundlerConfig.entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS } public getBundlerUrl(): string { - return `${this.bundlerConfig.bundlerUrl}`; + return `${this.bundlerConfig.bundlerUrl}` } /** @@ -89,11 +98,14 @@ export class Bundler implements IBundler { * @description This function will fetch gasPrices from bundler * @returns Promise<UserOpGasPricesResponse> */ - async estimateUserOpGas(userOp: UserOperationStruct, stateOverrideSet?: StateOverrideSet): Promise<UserOpGasResponse> { + async estimateUserOpGas( + _userOp: UserOperationStruct, + stateOverrideSet?: StateOverrideSet + ): Promise<UserOpGasResponse> { // expected dummySig and possibly dummmy paymasterAndData should be provided by the caller // bundler doesn't know account and paymaster implementation - userOp = transformUserOP(userOp); - const bundlerUrl = this.getBundlerUrl(); + const userOp = transformUserOP(_userOp) + const bundlerUrl = this.getBundlerUrl() const response: EstimateUserOpGasResponse = await sendRequest( { @@ -105,20 +117,23 @@ export class Bundler implements IBundler { ? [userOp, this.bundlerConfig.entryPointAddress, stateOverrideSet] : [userOp, this.bundlerConfig.entryPointAddress], id: getTimestampInSeconds(), - jsonrpc: "2.0", - }, + jsonrpc: "2.0" + } }, - "Bundler", - ); + "Bundler" + ) - const userOpGasResponse = response.result; + const userOpGasResponse = response.result for (const key in userOpGasResponse) { - if (key === "maxFeePerGas" || key === "maxPriorityFeePerGas") continue; - if (userOpGasResponse[key as keyof UserOpGasResponse] === undefined || userOpGasResponse[key as keyof UserOpGasResponse] === null) { - throw new Error(`Got undefined ${key} from bundler`); + if (key === "maxFeePerGas" || key === "maxPriorityFeePerGas") continue + if ( + userOpGasResponse[key as keyof UserOpGasResponse] === undefined || + userOpGasResponse[key as keyof UserOpGasResponse] === null + ) { + throw new Error(`Got undefined ${key} from bundler`) } } - return userOpGasResponse; + return userOpGasResponse } /** @@ -127,15 +142,18 @@ export class Bundler implements IBundler { * @description This function will send signed userOp to bundler to get mined on chain * @returns Promise<UserOpResponse> */ - async sendUserOp(userOp: UserOperationStruct, simulationParam?: SimulationType): Promise<UserOpResponse> { - const chainId = this.bundlerConfig.chainId; + async sendUserOp( + _userOp: UserOperationStruct, + simulationParam?: SimulationType + ): Promise<UserOpResponse> { + const chainId = this.bundlerConfig.chainId // transformUserOP will convert all bigNumber values to string - userOp = transformUserOP(userOp); + const userOp = transformUserOP(_userOp) const simType = { - simulation_type: simulationParam || "validation", - }; - const params = [userOp, this.bundlerConfig.entryPointAddress, simType]; - const bundlerUrl = this.getBundlerUrl(); + simulation_type: simulationParam || "validation" + } + const params = [userOp, this.bundlerConfig.entryPointAddress, simType] + const bundlerUrl = this.getBundlerUrl() const sendUserOperationResponse: SendUserOpResponse = await sendRequest( { url: bundlerUrl, @@ -144,94 +162,106 @@ export class Bundler implements IBundler { method: "eth_sendUserOperation", params: params, id: getTimestampInSeconds(), - jsonrpc: "2.0", - }, + jsonrpc: "2.0" + } }, - "Bundler", - ); + "Bundler" + ) const response: UserOpResponse = { userOpHash: sendUserOperationResponse.result, wait: (confirmations?: number): Promise<UserOpReceipt> => { // Note: maxDuration can be defined per chainId - const maxDuration = this.UserOpReceiptMaxDurationIntervals[chainId] || 30000; // default 30 seconds - let totalDuration = 0; + const maxDuration = + this.UserOpReceiptMaxDurationIntervals[chainId] || 30000 // default 30 seconds + let totalDuration = 0 return new Promise<UserOpReceipt>((resolve, reject) => { - const intervalValue = this.UserOpReceiptIntervals[chainId] || 5000; // default 5 seconds + const intervalValue = this.UserOpReceiptIntervals[chainId] || 5000 // default 5 seconds const intervalId = setInterval(async () => { try { - const userOpResponse = await this.getUserOpReceipt(sendUserOperationResponse.result); - if (userOpResponse && userOpResponse.receipt && userOpResponse.receipt.blockNumber) { + const userOpResponse = await this.getUserOpReceipt( + sendUserOperationResponse.result + ) + if (userOpResponse?.receipt?.blockNumber) { if (confirmations) { - const latestBlock = await this.provider.getBlockNumber(); - const confirmedBlocks = Number(latestBlock) - userOpResponse.receipt.blockNumber; + const latestBlock = await this.provider.getBlockNumber() + const confirmedBlocks = + Number(latestBlock) - userOpResponse.receipt.blockNumber if (confirmations >= confirmedBlocks) { - clearInterval(intervalId); - resolve(userOpResponse); - return; + clearInterval(intervalId) + resolve(userOpResponse) + return } } else { - clearInterval(intervalId); - resolve(userOpResponse); - return; + clearInterval(intervalId) + resolve(userOpResponse) + return } } } catch (error) { - clearInterval(intervalId); - reject(error); - return; + clearInterval(intervalId) + reject(error) + return } - totalDuration += intervalValue; + totalDuration += intervalValue if (totalDuration >= maxDuration) { - clearInterval(intervalId); + clearInterval(intervalId) reject( new Error( - `Exceeded maximum duration (${maxDuration / 1000} sec) waiting to get receipt for userOpHash ${ + `Exceeded maximum duration (${ + maxDuration / 1000 + } sec) waiting to get receipt for userOpHash ${ sendUserOperationResponse.result - }. Try getting the receipt manually using eth_getUserOperationReceipt rpc method on bundler`, - ), - ); + }. Try getting the receipt manually using eth_getUserOperationReceipt rpc method on bundler` + ) + ) } - }, intervalValue); - }); + }, intervalValue) + }) }, waitForTxHash: (): Promise<UserOpStatus> => { - const maxDuration = this.UserOpWaitForTxHashMaxDurationIntervals[chainId] || 20000; // default 20 seconds - let totalDuration = 0; + const maxDuration = + this.UserOpWaitForTxHashMaxDurationIntervals[chainId] || 20000 // default 20 seconds + let totalDuration = 0 return new Promise<UserOpStatus>((resolve, reject) => { - const intervalValue = this.UserOpWaitForTxHashIntervals[chainId] || 500; // default 0.5 seconds + const intervalValue = + this.UserOpWaitForTxHashIntervals[chainId] || 500 // default 0.5 seconds const intervalId = setInterval(async () => { try { - const userOpStatus = await this.getUserOpStatus(sendUserOperationResponse.result); - if (userOpStatus && userOpStatus.state && userOpStatus.transactionHash) { - clearInterval(intervalId); - resolve(userOpStatus); - return; + const userOpStatus = await this.getUserOpStatus( + sendUserOperationResponse.result + ) + if (userOpStatus?.state && userOpStatus.transactionHash) { + clearInterval(intervalId) + resolve(userOpStatus) + return } } catch (error) { - clearInterval(intervalId); - reject(error); - return; + clearInterval(intervalId) + reject(error) + return } - totalDuration += intervalValue; + totalDuration += intervalValue if (totalDuration >= maxDuration) { - clearInterval(intervalId); + clearInterval(intervalId) reject( new Error( - `Exceeded maximum duration (${maxDuration / 1000} sec) waiting to get receipt for userOpHash ${ + `Exceeded maximum duration (${ + maxDuration / 1000 + } sec) waiting to get receipt for userOpHash ${ sendUserOperationResponse.result - }. Try getting the receipt manually using eth_getUserOperationReceipt rpc method on bundler`, - ), - ); + }. Try getting the receipt manually using eth_getUserOperationReceipt rpc method on bundler` + ) + ) } - }, intervalValue); - }); - }, - }; - return response; + }, intervalValue) + }) + } + } + return response } /** @@ -241,7 +271,7 @@ export class Bundler implements IBundler { * @returns Promise<UserOpReceipt> */ async getUserOpReceipt(userOpHash: string): Promise<UserOpReceipt> { - const bundlerUrl = this.getBundlerUrl(); + const bundlerUrl = this.getBundlerUrl() const response: GetUserOperationReceiptResponse = await sendRequest( { url: bundlerUrl, @@ -250,13 +280,13 @@ export class Bundler implements IBundler { method: "eth_getUserOperationReceipt", params: [userOpHash], id: getTimestampInSeconds(), - jsonrpc: "2.0", - }, + jsonrpc: "2.0" + } }, - "Bundler", - ); - const userOpReceipt: UserOpReceipt = response.result; - return userOpReceipt; + "Bundler" + ) + const userOpReceipt: UserOpReceipt = response.result + return userOpReceipt } /** @@ -266,7 +296,7 @@ export class Bundler implements IBundler { * @returns Promise<UserOpReceipt> */ async getUserOpStatus(userOpHash: string): Promise<UserOpStatus> { - const bundlerUrl = this.getBundlerUrl(); + const bundlerUrl = this.getBundlerUrl() const response: GetUserOperationStatusResponse = await sendRequest( { url: bundlerUrl, @@ -275,13 +305,13 @@ export class Bundler implements IBundler { method: "biconomy_getUserOperationStatus", params: [userOpHash], id: getTimestampInSeconds(), - jsonrpc: "2.0", - }, + jsonrpc: "2.0" + } }, - "Bundler", - ); - const userOpStatus: UserOpStatus = response.result; - return userOpStatus; + "Bundler" + ) + const userOpStatus: UserOpStatus = response.result + return userOpStatus } /** @@ -291,7 +321,7 @@ export class Bundler implements IBundler { * @returns Promise<UserOpByHashResponse> */ async getUserOpByHash(userOpHash: string): Promise<UserOpByHashResponse> { - const bundlerUrl = this.getBundlerUrl(); + const bundlerUrl = this.getBundlerUrl() const response: GetUserOpByHashResponse = await sendRequest( { url: bundlerUrl, @@ -300,20 +330,20 @@ export class Bundler implements IBundler { method: "eth_getUserOperationByHash", params: [userOpHash], id: getTimestampInSeconds(), - jsonrpc: "2.0", - }, + jsonrpc: "2.0" + } }, - "Bundler", - ); - const userOpByHashResponse: UserOpByHashResponse = response.result; - return userOpByHashResponse; + "Bundler" + ) + const userOpByHashResponse: UserOpByHashResponse = response.result + return userOpByHashResponse } /** * @description This function will return the gas fee values */ async getGasFeeValues(): Promise<GasFeeValues> { - const bundlerUrl = this.getBundlerUrl(); + const bundlerUrl = this.getBundlerUrl() const response: GetGasFeeValuesResponse = await sendRequest( { url: bundlerUrl, @@ -322,15 +352,15 @@ export class Bundler implements IBundler { method: "biconomy_getGasFeeValues", params: [], id: getTimestampInSeconds(), - jsonrpc: "2.0", - }, + jsonrpc: "2.0" + } }, - "Bundler", - ); - return response.result; + "Bundler" + ) + return response.result } public static async create(config: Bundlerconfig): Promise<Bundler> { - return new Bundler(config); + return new Bundler(config) } } diff --git a/src/bundler/IBundler.ts b/src/bundler/IBundler.ts new file mode 100644 index 000000000..1e15c7c19 --- /dev/null +++ b/src/bundler/IBundler.ts @@ -0,0 +1,26 @@ +import type { SimulationType } from "../account" +import type { StateOverrideSet, UserOperationStruct } from "../account" +import type { + GasFeeValues, + UserOpByHashResponse, + UserOpGasResponse, + UserOpReceipt, + UserOpResponse, + UserOpStatus +} from "./utils/Types.js" + +export interface IBundler { + estimateUserOpGas( + _userOp: Partial<UserOperationStruct>, + stateOverrideSet?: StateOverrideSet + ): Promise<UserOpGasResponse> + sendUserOp( + _userOp: UserOperationStruct, + _simulationType?: SimulationType + ): Promise<UserOpResponse> + getUserOpReceipt(_userOpHash: string): Promise<UserOpReceipt> + getUserOpByHash(_userOpHash: string): Promise<UserOpByHashResponse> + getGasFeeValues(): Promise<GasFeeValues> + getUserOpStatus(_userOpHash: string): Promise<UserOpStatus> + getBundlerUrl(): string +} diff --git a/src/bundler/index.ts b/src/bundler/index.ts new file mode 100644 index 000000000..5986083f4 --- /dev/null +++ b/src/bundler/index.ts @@ -0,0 +1,8 @@ +import { Bundler } from "./Bundler.js" + +export * from "./interfaces/IBundler.js" +export * from "./Bundler.js" +export * from "./utils/Utils.js" +export * from "./utils/Types.js" + +export const createBundler = Bundler.create diff --git a/src/bundler/interfaces/IBundler.ts b/src/bundler/interfaces/IBundler.ts new file mode 100644 index 000000000..aa7f551fe --- /dev/null +++ b/src/bundler/interfaces/IBundler.ts @@ -0,0 +1,29 @@ +import type { + SimulationType, + StateOverrideSet, + UserOperationStruct +} from "../../account" +import type { + GasFeeValues, + UserOpByHashResponse, + UserOpGasResponse, + UserOpReceipt, + UserOpResponse, + UserOpStatus +} from "../utils/Types.js" + +export interface IBundler { + estimateUserOpGas( + _userOp: Partial<UserOperationStruct>, + stateOverrideSet?: StateOverrideSet + ): Promise<UserOpGasResponse> + sendUserOp( + _userOp: UserOperationStruct, + _simulationType?: SimulationType + ): Promise<UserOpResponse> + getUserOpReceipt(_userOpHash: string): Promise<UserOpReceipt> + getUserOpByHash(_userOpHash: string): Promise<UserOpByHashResponse> + getGasFeeValues(): Promise<GasFeeValues> + getUserOpStatus(_userOpHash: string): Promise<UserOpStatus> + getBundlerUrl(): string +} diff --git a/packages/bundler/src/utils/Constants.ts b/src/bundler/utils/Constants.ts similarity index 61% rename from packages/bundler/src/utils/Constants.ts rename to src/bundler/utils/Constants.ts index 8ffd436a5..7c0510526 100644 --- a/packages/bundler/src/utils/Constants.ts +++ b/src/bundler/utils/Constants.ts @@ -1,27 +1,30 @@ export const UserOpReceiptIntervals: { [key in number]?: number } = { - [1]: 10000, -}; + [1]: 10000 +} // Note: Default value is 500(0.5sec) export const UserOpWaitForTxHashIntervals: { [key in number]?: number } = { - [1]: 1000, -}; + [1]: 1000 +} // Note: Default value is 30000 (30sec) export const UserOpReceiptMaxDurationIntervals: { [key in number]?: number } = { [1]: 300000, - [80001]: 50000, + [80002]: 50000, [137]: 60000, [56]: 50000, [97]: 50000, [421613]: 50000, [42161]: 50000, - [59140]: 50000, // linea testnet -}; + [59140]: 50000 // linea testnet +} // Note: Default value is 20000 (20sec) -export const UserOpWaitForTxHashMaxDurationIntervals: { [key in number]?: number } = { - [1]: 20000, -}; +export const UserOpWaitForTxHashMaxDurationIntervals: { + [key in number]?: number +} = { + [1]: 20000 +} -export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"; +export const DEFAULT_ENTRYPOINT_ADDRESS = + "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789" diff --git a/packages/bundler/src/utils/HelperFunction.ts b/src/bundler/utils/HelperFunction.ts similarity index 52% rename from packages/bundler/src/utils/HelperFunction.ts rename to src/bundler/utils/HelperFunction.ts index 670e04d31..ecdaf688d 100644 --- a/packages/bundler/src/utils/HelperFunction.ts +++ b/src/bundler/utils/HelperFunction.ts @@ -1,32 +1,36 @@ -import type { BigNumberish, UserOperationStruct } from "@alchemy/aa-core"; +import type { BigNumberish, UserOperationStruct } from "../../account" // Will convert the userOp hex, bigInt and number values to hex strings -export const transformUserOP = (userOp: UserOperationStruct): UserOperationStruct => { +export const transformUserOP = ( + userOp: UserOperationStruct +): UserOperationStruct => { try { - const userOperation = { ...userOp }; + const userOperation = { ...userOp } const keys: (keyof UserOperationStruct)[] = [ "nonce", "callGasLimit", "verificationGasLimit", "preVerificationGas", "maxFeePerGas", - "maxPriorityFeePerGas", - ]; + "maxPriorityFeePerGas" + ] for (const key of keys) { if (userOperation[key] && userOperation[key] !== "0x") { - userOperation[key] = ("0x" + BigInt(userOp[key] as BigNumberish).toString(16)) as `0x${string}`; + userOperation[key] = `0x${BigInt(userOp[key] as BigNumberish).toString( + 16 + )}` as `0x${string}` } } - return userOperation; + return userOperation } catch (error) { - throw `Failed to transform user operation: ${error}`; + throw `Failed to transform user operation: ${error}` } -}; +} /** * @description this function will return current timestamp in seconds * @returns Number */ export const getTimestampInSeconds = (): number => { - return Math.floor(Date.now() / 1000); -}; + return Math.floor(Date.now() / 1000) +} diff --git a/packages/bundler/src/utils/Types.ts b/src/bundler/utils/Types.ts similarity index 51% rename from packages/bundler/src/utils/Types.ts rename to src/bundler/utils/Types.ts index 1da57281f..d04b4505d 100644 --- a/packages/bundler/src/utils/Types.ts +++ b/src/bundler/utils/Types.ts @@ -1,124 +1,122 @@ -import { UserOperationStruct } from "@alchemy/aa-core"; -import { Chain, Hex } from "viem"; +import type { Chain, Hex } from "viem" +import type { UserOperationStruct } from "../../account" export type Bundlerconfig = { - bundlerUrl: string; - entryPointAddress?: string; - chainId?: number; + bundlerUrl: string + entryPointAddress?: string + chainId?: number // eslint-disable-next-line no-unused-vars - userOpReceiptIntervals?: { [key in number]?: number }; - userOpWaitForTxHashIntervals?: { [key in number]?: number }; - userOpReceiptMaxDurationIntervals?: { [key in number]?: number }; - userOpWaitForTxHashMaxDurationIntervals?: { [key in number]?: number }; + userOpReceiptIntervals?: { [key in number]?: number } + userOpWaitForTxHashIntervals?: { [key in number]?: number } + userOpReceiptMaxDurationIntervals?: { [key in number]?: number } + userOpWaitForTxHashMaxDurationIntervals?: { [key in number]?: number } /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains */ - viemChain?: Chain; -}; -export type BundlerConfigWithChainId = Bundlerconfig & { chainId: number }; + viemChain?: Chain +} +export type BundlerConfigWithChainId = Bundlerconfig & { chainId: number } export type UserOpReceipt = { /* The request hash of the UserOperation. */ - userOpHash: string; + userOpHash: string /* The entry point address used for the UserOperation. */ - entryPoint: string; + entryPoint: string /* The paymaster used for this UserOperation (or empty). */ - paymaster: string; + paymaster: string /* The actual amount paid (by account or paymaster) for this UserOperation. */ - actualGasCost: Hex; + actualGasCost: Hex /* The total gas used by this UserOperation (including preVerification, creation, validation, and execution). */ - actualGasUsed: Hex; + actualGasUsed: Hex /* Indicates whether the execution completed without reverting. */ - success: "true" | "false"; + success: "true" | "false" /* In case of revert, this is the revert reason. */ - reason: string; + reason: string /* The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle). */ - logs: Array<any>; // The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle) + logs: Array<any> // The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle) /* The TransactionReceipt object for the entire bundle, not only for this UserOperation. */ - receipt: any; -}; + receipt: any +} // review export type UserOpStatus = { - state: string; // for now // could be an enum - transactionHash?: string; - userOperationReceipt?: UserOpReceipt; -}; - -export type SimulationType = "validation" | "validation_and_execution"; + state: string // for now // could be an enum + transactionHash?: string + userOperationReceipt?: UserOpReceipt +} // Converted to JsonRpcResponse with strict type export type GetUserOperationReceiptResponse = { - jsonrpc: string; - id: number; - result: UserOpReceipt; - error?: JsonRpcError; -}; + jsonrpc: string + id: number + result: UserOpReceipt + error?: JsonRpcError +} export type GetUserOperationStatusResponse = { - jsonrpc: string; - id: number; - result: UserOpStatus; - error?: JsonRpcError; -}; + jsonrpc: string + id: number + result: UserOpStatus + error?: JsonRpcError +} // Converted to JsonRpcResponse with strict type export type SendUserOpResponse = { - jsonrpc: string; - id: number; - result: string; - error?: JsonRpcError; -}; + jsonrpc: string + id: number + result: string + error?: JsonRpcError +} export type UserOpResponse = { - userOpHash: string; - wait(_confirmations?: number): Promise<UserOpReceipt>; + userOpHash: string + wait(_confirmations?: number): Promise<UserOpReceipt> // Review: waitForTxHash(): vs waitForTxHash?(): - waitForTxHash(): Promise<UserOpStatus>; -}; + waitForTxHash(): Promise<UserOpStatus> +} // Converted to JsonRpcResponse with strict type export type EstimateUserOpGasResponse = { - jsonrpc: string; - id: number; - result: UserOpGasResponse; - error?: JsonRpcError; -}; + jsonrpc: string + id: number + result: UserOpGasResponse + error?: JsonRpcError +} export type UserOpGasResponse = { - preVerificationGas: string; - verificationGasLimit: string; - callGasLimit: string; - maxPriorityFeePerGas: string; - maxFeePerGas: string; -}; + preVerificationGas: string + verificationGasLimit: string + callGasLimit: string + maxPriorityFeePerGas: string + maxFeePerGas: string +} // Converted to JsonRpcResponse with strict type export type GetUserOpByHashResponse = { - jsonrpc: string; - id: number; - result: UserOpByHashResponse; - error?: JsonRpcError; -}; + jsonrpc: string + id: number + result: UserOpByHashResponse + error?: JsonRpcError +} export type UserOpByHashResponse = UserOperationStruct & { - transactionHash: string; - blockNumber: number; - blockHash: string; - entryPoint: string; -}; + transactionHash: string + blockNumber: number + blockHash: string + entryPoint: string +} /* eslint-disable @typescript-eslint/no-explicit-any */ export type JsonRpcError = { - code: string; - message: string; - data: any; -}; + code: string + message: string + data: any +} export type GetGasFeeValuesResponse = { - jsonrpc: string; - id: number; - result: GasFeeValues; - error?: JsonRpcError; -}; + jsonrpc: string + id: number + result: GasFeeValues + error?: JsonRpcError +} export type GasFeeValues = { - maxPriorityFeePerGas: string; - maxFeePerGas: string; -}; + maxPriorityFeePerGas: string + maxFeePerGas: string +} diff --git a/src/bundler/utils/Utils.ts b/src/bundler/utils/Utils.ts new file mode 100644 index 000000000..700a2bb59 --- /dev/null +++ b/src/bundler/utils/Utils.ts @@ -0,0 +1,23 @@ +export const extractChainIdFromBundlerUrl = (url: string): number => { + try { + const regex = /\/api\/v2\/(\d+)\/[a-zA-Z0-9.-]+$/ + // biome-ignore lint/style/noNonNullAssertion: <explanation> + const match = regex.exec(url)! + return Number.parseInt(match[1]) + } catch (error) { + throw new Error("Invalid chain id") + } +} + +export const extractChainIdFromPaymasterUrl = (url: string): number => { + try { + const regex = /\/api\/v\d+\/(\d+)\// + const match = regex.exec(url) + if (!match) { + throw new Error("Invalid URL format") + } + return Number.parseInt(match[1]) + } catch (error) { + throw new Error("Invalid chain id") + } +} diff --git a/src/bundler/utils/getAAError.ts b/src/bundler/utils/getAAError.ts new file mode 100644 index 000000000..051d5bbd2 --- /dev/null +++ b/src/bundler/utils/getAAError.ts @@ -0,0 +1,68 @@ +import { BaseError } from "viem" +import type { Service } from "../../account" + +export type KnownError = { + name: string + regex: string + description: string + causes: string[] + solutions: string[] + docsUrl?: string +} + +export const ERRORS_URL = "https://bcnmy.github.io/aa-errors/errors.json" +export const DOCS_URL = "https://docs.biconomy.io/troubleshooting/commonerrors" + +const knownErrors: KnownError[] = [] + +const matchError = (message: string): null | KnownError => + knownErrors.find( + (knownError: KnownError) => + message.toLowerCase().indexOf(knownError.regex) > -1 + ) ?? null + +const buildErrorStrings = (error: KnownError, service?: Service): string[] => + [ + `${error.description}\n`, + error.causes?.length + ? ["Potential cause(s): \n", ...error.causes, ""].join("\n") + : "", + error.solutions?.length + ? ["Potential solution(s): \n", ...error.solutions].join("\n") + : "", + service ? `\nSent via: ${service}` : "" + ].filter(Boolean) + +type AccountAbstractionErrorParams = { + docsSlug?: string + metaMessages?: string[] + details?: string +} + +class AccountAbstractionError extends BaseError { + override name = "AccountAbstractionError" + + constructor(title: string, params: AccountAbstractionErrorParams = {}) { + super(title, params) + } +} + +export const getAAError = async (message: string, service?: Service) => { + if (!knownErrors.length) { + const errors = (await (await fetch(ERRORS_URL)).json()) as KnownError[] + knownErrors.push(...errors) + } + + const details: string = + `${service} - ${typeof message}` === "string" + ? message + : JSON.stringify(message) + const matchedError = matchError(details) + const metaMessages = matchedError + ? buildErrorStrings(matchedError, service) + : [] + const title = matchedError ? matchedError.name : "Unknown Error" + const docsSlug = matchedError?.docsUrl ?? DOCS_URL + + return new AccountAbstractionError(title, { docsSlug, metaMessages, details }) +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 000000000..b7976357d --- /dev/null +++ b/src/index.ts @@ -0,0 +1,4 @@ +export * from "./account" +export * from "./bundler" +export * from "./paymaster" +export * from "./modules" diff --git a/src/modules/BaseValidationModule.ts b/src/modules/BaseValidationModule.ts new file mode 100644 index 000000000..265a4f9cf --- /dev/null +++ b/src/modules/BaseValidationModule.ts @@ -0,0 +1,51 @@ +import type { Hex } from "viem" +import { DEFAULT_ENTRYPOINT_ADDRESS, type SmartAccountSigner } from "../account" +import type { IValidationModule } from "./interfaces/IValidationModule.js" +import type { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types.js" + +export abstract class BaseValidationModule implements IValidationModule { + entryPointAddress: Hex + + constructor(moduleConfig: BaseValidationModuleConfig) { + const { entryPointAddress } = moduleConfig + + this.entryPointAddress = entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS + } + + abstract getAddress(): Hex + + setEntryPointAddress(entryPointAddress: Hex): void { + this.entryPointAddress = entryPointAddress + } + + abstract getInitData(): Promise<Hex> + + // Anything required to get dummy signature can be passed as params + abstract getDummySignature(_params?: ModuleInfo): Promise<Hex> + + abstract getSigner(): Promise<SmartAccountSigner> + + // Signer specific or any other additional information can be passed as params + abstract signUserOpHash( + _userOpHash: string, + _params?: ModuleInfo + ): Promise<Hex> + + abstract signMessage(_message: Uint8Array | string): Promise<string> + + async signMessageSmartAccountSigner( + _message: string | Uint8Array, + signer: SmartAccountSigner + ): Promise<string> { + const message = typeof _message === "string" ? _message : { raw: _message } + let signature: `0x${string}` = await signer.signMessage(message) + + const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27 + signature = `0x${signature.slice(0, -2) + correctV.toString(16)}` + } + + return signature + } +} diff --git a/src/modules/BatchedSessionRouterModule.ts b/src/modules/BatchedSessionRouterModule.ts new file mode 100644 index 000000000..42f607d80 --- /dev/null +++ b/src/modules/BatchedSessionRouterModule.ts @@ -0,0 +1,363 @@ +import { + type Hex, + concat, + encodeAbiParameters, + keccak256, + pad, + parseAbiParameters, + toBytes, + toHex +} from "viem" +import { type SmartAccountSigner, convertSigner } from "../account" +import { BaseValidationModule } from "./BaseValidationModule.js" +import { SessionKeyManagerModule } from "./SessionKeyManagerModule.js" +import type { + SessionSearchParam, + SessionStatus +} from "./interfaces/ISessionStorage.js" +import { + BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION, + DEFAULT_BATCHED_SESSION_ROUTER_MODULE, + DEFAULT_SESSION_KEY_MANAGER_MODULE +} from "./utils/Constants.js" +// @ts-nocheck +import type { + BatchedSessionRouterModuleConfig, + CreateSessionDataParams, + CreateSessionDataResponse, + ModuleInfo, + ModuleVersion, + SessionDataTuple +} from "./utils/Types.js" + +export class BatchedSessionRouterModule extends BaseValidationModule { + version: ModuleVersion = "V1_0_0" + + moduleAddress!: Hex + + sessionManagerModuleAddress!: Hex + + sessionKeyManagerModule!: SessionKeyManagerModule + + readonly mockEcdsaSessionKeySig: Hex = + "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b" + + /** + * This constructor is private. Use the static create method to instantiate SessionKeyManagerModule + * @param moduleConfig The configuration for the module + * @returns An instance of SessionKeyManagerModule + */ + private constructor(moduleConfig: BatchedSessionRouterModuleConfig) { + super(moduleConfig) + } + + /** + * Asynchronously creates and initializes an instance of SessionKeyManagerModule + * @param moduleConfig The configuration for the module + * @returns A Promise that resolves to an instance of SessionKeyManagerModule + */ + public static async create( + moduleConfig: BatchedSessionRouterModuleConfig + ): Promise<BatchedSessionRouterModule> { + const instance = new BatchedSessionRouterModule(moduleConfig) + + if (moduleConfig.moduleAddress) { + instance.moduleAddress = moduleConfig.moduleAddress + } else if (moduleConfig.version) { + const moduleAddr = BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION[ + moduleConfig.version + ] as Hex + if (!moduleAddr) { + throw new Error(`Invalid version ${moduleConfig.version}`) + } + instance.moduleAddress = moduleAddr + instance.version = moduleConfig.version as ModuleVersion + } else { + instance.moduleAddress = DEFAULT_BATCHED_SESSION_ROUTER_MODULE + // Note: in this case Version remains the default one + } + + instance.sessionManagerModuleAddress = + moduleConfig.sessionManagerModuleAddress ?? + DEFAULT_SESSION_KEY_MANAGER_MODULE + + if (!moduleConfig.sessionKeyManagerModule) { + // generate sessionModule + const sessionModule = await SessionKeyManagerModule.create({ + moduleAddress: instance.sessionManagerModuleAddress, + smartAccountAddress: moduleConfig.smartAccountAddress, + storageType: moduleConfig.storageType + }) + + instance.sessionKeyManagerModule = sessionModule + } else { + instance.sessionKeyManagerModule = moduleConfig.sessionKeyManagerModule + instance.sessionManagerModuleAddress = + moduleConfig.sessionKeyManagerModule.getAddress() + } + + return instance + } + + /** + * Method to create session data for any module. The session data is used to create a leaf in the merkle tree + * @param leavesData The data of one or more leaves to be used to create session data + * @returns The session data + */ + createSessionData = async ( + leavesData: CreateSessionDataParams[] + ): Promise<CreateSessionDataResponse> => { + return this.sessionKeyManagerModule.createSessionData(leavesData) + } + + /** + * This method is used to sign the user operation using the session signer + * @param userOp The user operation to be signed + * @param sessionParams Information about all the sessions to be used to sign the user operation which has a batch execution + * @returns The signature of the user operation + */ + async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise<Hex> { + const sessionParams = params?.batchSessionParams + if (!sessionParams || sessionParams.length === 0) { + throw new Error("Session parameters are not provided") + } + + const sessionDataTupleArray: SessionDataTuple[] = [] + + // signer must be the same for all the sessions + const { signer: sessionSigner } = await convertSigner( + sessionParams[0].sessionSigner, + false + ) + + const signature = await sessionSigner.signMessage({ + raw: toBytes(userOpHash) + }) + + for (const sessionParam of sessionParams) { + if (!sessionParam.sessionSigner) { + throw new Error("Session signer is not provided.") + } + if (!sessionParam.sessionID && !sessionParam.sessionValidationModule) { + throw new Error( + "sessionID or sessionValidationModule should be provided." + ) + } + + const sessionSignerData = + await this.sessionKeyManagerModule.sessionStorageClient.getSessionData( + sessionParam.sessionID + ? { + sessionID: sessionParam.sessionID + } + : { + sessionValidationModule: sessionParam.sessionValidationModule, + sessionPublicKey: await sessionSigner.getAddress() + } + ) + + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), + sessionSignerData.sessionKeyData + ]) + + const proof = this.sessionKeyManagerModule.merkleTree.getHexProof( + keccak256(leafDataHex) + ) + + const sessionDataTuple: SessionDataTuple = [ + sessionSignerData.validUntil, + sessionSignerData.validAfter, + sessionSignerData.sessionValidationModule, + sessionSignerData.sessionKeyData, + proof, + sessionParam.additionalSessionData ?? "0x" + ] + + sessionDataTupleArray.push(sessionDataTuple) + } + + // Generate the padded signature + const abiParameters = [ + { type: "address" }, + { + type: "tuple[]", + components: [ + { type: "uint48" }, + { type: "uint48" }, + { type: "address" }, + { type: "bytes" }, + { type: "bytes32[]" }, + { type: "bytes" } + ] + }, + { type: "bytes" } + ] + + const paddedSignature = encodeAbiParameters(abiParameters, [ + this.getSessionKeyManagerAddress(), + sessionDataTupleArray, + signature + ]) + + return paddedSignature as Hex + } + + /** + * Update the session data pending state to active + * @param param The search param to find the session data + * @param status The status to be updated + * @returns + */ + async updateSessionStatus( + param: SessionSearchParam, + status: SessionStatus + ): Promise<void> { + this.sessionKeyManagerModule.sessionStorageClient.updateSessionStatus( + param, + status + ) + } + + /** + * @remarks This method is used to clear all the pending sessions + * @returns + */ + async clearPendingSessions(): Promise<void> { + this.sessionKeyManagerModule.sessionStorageClient.clearPendingSessions() + } + + /** + * @returns SessionKeyManagerModule address + */ + getAddress(): Hex { + return this.moduleAddress + } + + /** + * @returns SessionKeyManagerModule address + */ + getSessionKeyManagerAddress(): Hex { + return this.sessionManagerModuleAddress + } + + /** + * @remarks This is the version of the module contract + */ + async getSigner(): Promise<SmartAccountSigner> { + throw new Error("Method not implemented.") + } + + /** + * @remarks This is the dummy signature for the module, used in buildUserOp for bundler estimation + * @returns Dummy signature + */ + async getDummySignature(params?: ModuleInfo): Promise<Hex> { + const sessionParams = params?.batchSessionParams + if (!sessionParams || sessionParams.length === 0) { + throw new Error("Session parameters are not provided") + } + + const sessionDataTupleArray: SessionDataTuple[] = [] + + // if needed we could do mock signature over userOpHashAndModuleAddress + + // signer must be the same for all the sessions + const { signer: sessionSigner } = await convertSigner( + sessionParams[0].sessionSigner, + false + ) + + for (const sessionParam of sessionParams) { + if (!sessionParam.sessionSigner) { + throw new Error("Session signer is not provided.") + } + + if (!sessionParam.sessionID && !sessionParam.sessionValidationModule) { + throw new Error( + "sessionID or sessionValidationModule should be provided." + ) + } + + const sessionSignerData = + await this.sessionKeyManagerModule.sessionStorageClient.getSessionData( + sessionParam.sessionID + ? { + sessionID: sessionParam.sessionID + } + : { + sessionValidationModule: sessionParam.sessionValidationModule, + sessionPublicKey: await sessionSigner.getAddress() + } + ) + + const leafDataHex = concat([ + pad(toHex(sessionSignerData.validUntil), { size: 6 }), + pad(toHex(sessionSignerData.validAfter), { size: 6 }), + pad(sessionSignerData.sessionValidationModule, { size: 20 }), + sessionSignerData.sessionKeyData + ]) + + const proof = this.sessionKeyManagerModule.merkleTree.getHexProof( + keccak256(leafDataHex) + ) + + const sessionDataTuple: SessionDataTuple = [ + BigInt(sessionSignerData.validUntil), + BigInt(sessionSignerData.validAfter), + sessionSignerData.sessionValidationModule, + sessionSignerData.sessionKeyData, + proof, + sessionParam.additionalSessionData ?? "0x" + ] + + sessionDataTupleArray.push(sessionDataTuple) + } + + // Generate the padded signature + + const abiParameters = [ + { type: "address" }, + { + type: "tuple[]", + components: [ + { type: "uint48" }, + { type: "uint48" }, + { type: "address" }, + { type: "bytes" }, + { type: "bytes32[]" }, + { type: "bytes" } + ] + }, + { type: "bytes" } + ] + + const paddedSignature = encodeAbiParameters(abiParameters, [ + this.getSessionKeyManagerAddress(), + sessionDataTupleArray, + this.mockEcdsaSessionKeySig + ]) + + const dummySig = encodeAbiParameters(parseAbiParameters("bytes, address"), [ + paddedSignature as Hex, + this.getAddress() + ]) + return dummySig + } + + /** + * @remarks Other modules may need additional attributes to build init data + */ + async getInitData(): Promise<Hex> { + throw new Error("Method not implemented.") + } + + /** + * @remarks This Module dont have knowledge of signer. So, this method is not implemented + */ + async signMessage(_message: Uint8Array | string): Promise<string> { + throw new Error("Method not implemented.") + } +} diff --git a/packages/modules/src/ECDSAOwnershipValidationModule.ts b/src/modules/ECDSAOwnershipValidationModule.ts similarity index 55% rename from packages/modules/src/ECDSAOwnershipValidationModule.ts rename to src/modules/ECDSAOwnershipValidationModule.ts index 32cfc9af2..0d472c3e6 100644 --- a/packages/modules/src/ECDSAOwnershipValidationModule.ts +++ b/src/modules/ECDSAOwnershipValidationModule.ts @@ -1,75 +1,96 @@ -import { Hex, encodeFunctionData, getAddress, parseAbi, toBytes } from "viem"; -import { SmartAccountSigner } from "@alchemy/aa-core"; -import { ECDSAOwnershipValidationModuleConfig, ECDSAOwnershipValidationModuleConfigConstructorProps, ModuleVersion } from "./utils/Types.js"; -import { DEFAULT_ECDSA_OWNERSHIP_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants.js"; -import { convertSigner } from "@biconomy/common"; -import { BaseValidationModule } from "./BaseValidationModule.js"; +import { + type Hex, + encodeFunctionData, + getAddress, + parseAbi, + toBytes +} from "viem" +import { type SmartAccountSigner, convertSigner } from "../account" +import { BaseValidationModule } from "./BaseValidationModule.js" +import { + DEFAULT_ECDSA_OWNERSHIP_MODULE, + ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION +} from "./utils/Constants.js" +import type { + ECDSAOwnershipValidationModuleConfig, + ECDSAOwnershipValidationModuleConfigConstructorProps, + ModuleVersion +} from "./utils/Types.js" // Could be renamed with suffix API export class ECDSAOwnershipValidationModule extends BaseValidationModule { - signer: SmartAccountSigner; + signer: SmartAccountSigner - moduleAddress!: Hex; + moduleAddress!: Hex - version: ModuleVersion = "V1_0_0"; + version: ModuleVersion = "V1_0_0" - private constructor(moduleConfig: ECDSAOwnershipValidationModuleConfigConstructorProps) { - super(moduleConfig); - this.signer = moduleConfig.signer; + private constructor( + moduleConfig: ECDSAOwnershipValidationModuleConfigConstructorProps + ) { + super(moduleConfig) + this.signer = moduleConfig.signer } - public static async create(moduleConfig: ECDSAOwnershipValidationModuleConfig): Promise<ECDSAOwnershipValidationModule> { + public static async create( + moduleConfig: ECDSAOwnershipValidationModuleConfig + ): Promise<ECDSAOwnershipValidationModule> { // Signer needs to be initialised here before defaultValidationModule is set - const { signer } = await convertSigner(moduleConfig.signer, false); - const configForConstructor: ECDSAOwnershipValidationModuleConfigConstructorProps = { ...moduleConfig, signer }; + const { signer } = await convertSigner(moduleConfig.signer, false) + const configForConstructor: ECDSAOwnershipValidationModuleConfigConstructorProps = + { ...moduleConfig, signer } // TODO: (Joe) stop doing things in a 'create' call after the instance has been created - const instance = new ECDSAOwnershipValidationModule(configForConstructor); + const instance = new ECDSAOwnershipValidationModule(configForConstructor) if (moduleConfig.moduleAddress) { - instance.moduleAddress = moduleConfig.moduleAddress; + instance.moduleAddress = moduleConfig.moduleAddress } else if (moduleConfig.version) { - const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; + const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[ + moduleConfig.version + ] as Hex if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`); + throw new Error(`Invalid version ${moduleConfig.version}`) } - instance.moduleAddress = moduleAddr; - instance.version = moduleConfig.version as ModuleVersion; + instance.moduleAddress = moduleAddr + instance.version = moduleConfig.version as ModuleVersion } else { - instance.moduleAddress = DEFAULT_ECDSA_OWNERSHIP_MODULE; + instance.moduleAddress = DEFAULT_ECDSA_OWNERSHIP_MODULE // Note: in this case Version remains the default one } - return instance; + return instance } getAddress(): Hex { - return this.moduleAddress; + return this.moduleAddress } async getSigner(): Promise<SmartAccountSigner> { - return Promise.resolve(this.signer); + return Promise.resolve(this.signer) } async getDummySignature(): Promise<Hex> { - const moduleAddress = getAddress(this.getAddress()); - const dynamicPart = moduleAddress.substring(2).padEnd(40, "0"); - return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000`; + const moduleAddress = getAddress(this.getAddress()) + const dynamicPart = moduleAddress.substring(2).padEnd(40, "0") + return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000` } // Note: other modules may need additional attributes to build init data async getInitData(): Promise<Hex> { - const ecdsaOwnerAddress = await this.signer.getAddress(); - const moduleRegistryParsedAbi = parseAbi(["function initForSmartAccount(address owner)"]); + const ecdsaOwnerAddress = await this.signer.getAddress() + const moduleRegistryParsedAbi = parseAbi([ + "function initForSmartAccount(address owner)" + ]) const ecdsaOwnershipInitData = encodeFunctionData({ abi: moduleRegistryParsedAbi, functionName: "initForSmartAccount", - args: [ecdsaOwnerAddress], - }); - return ecdsaOwnershipInitData; + args: [ecdsaOwnerAddress] + }) + return ecdsaOwnershipInitData } async signUserOpHash(userOpHash: string): Promise<Hex> { - const sig = await this.signer.signMessage({ raw: toBytes(userOpHash) }); - return sig; + const sig = await this.signer.signMessage({ raw: toBytes(userOpHash) }) + return sig } /** @@ -80,14 +101,14 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { * @throws {Error} If the signer type is invalid or unsupported. */ async signMessage(_message: Uint8Array | string): Promise<string> { - const message = typeof _message === "string" ? _message : { raw: _message }; - let signature = await this.signer.signMessage(message); + const message = typeof _message === "string" ? _message : { raw: _message } + let signature = await this.signer.signMessage(message) - const potentiallyIncorrectV = parseInt(signature.slice(-2), 16); + const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27; - signature = signature.slice(0, -2) + correctV.toString(16); + const correctV = potentiallyIncorrectV + 27 + signature = signature.slice(0, -2) + correctV.toString(16) } - return signature; + return signature } } diff --git a/src/modules/MultichainValidationModule.ts b/src/modules/MultichainValidationModule.ts new file mode 100644 index 000000000..1affc9c6f --- /dev/null +++ b/src/modules/MultichainValidationModule.ts @@ -0,0 +1,212 @@ +import { MerkleTree } from "merkletreejs" +import { + type Hex, + concat, + encodeAbiParameters, + encodeFunctionData, + getAddress, + keccak256, + pad, + parseAbi, + parseAbiParameters, + toBytes, + toHex +} from "viem" +import { + Logger, + type SmartAccountSigner, + type UserOperationStruct, + convertSigner +} from "../account" +import { BaseValidationModule } from "./BaseValidationModule.js" +import { + DEFAULT_MULTICHAIN_MODULE, + MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION +} from "./utils/Constants.js" +import { getUserOpHash } from "./utils/Helper.js" +import type { + ModuleVersion, + MultiChainUserOpDto, + MultiChainValidationModuleConfig, + MultiChainValidationModuleConfigConstructorProps +} from "./utils/Types.js" + +export class MultiChainValidationModule extends BaseValidationModule { + signer: SmartAccountSigner + + moduleAddress!: Hex + + version: ModuleVersion = "V1_0_0" + + private constructor( + moduleConfig: MultiChainValidationModuleConfigConstructorProps + ) { + super(moduleConfig) + this.signer = moduleConfig.signer + } + + public static async create( + moduleConfig: MultiChainValidationModuleConfig + ): Promise<MultiChainValidationModule> { + // Signer needs to be initialised here before defaultValidationModule is set + const { signer } = await convertSigner(moduleConfig.signer, false) + const configForConstructor: MultiChainValidationModuleConfigConstructorProps = + { ...moduleConfig, signer } + + // TODO: (Joe) stop doing things in a 'create' call after the instance has been created + const instance = new MultiChainValidationModule(configForConstructor) + if (moduleConfig.moduleAddress) { + instance.moduleAddress = moduleConfig.moduleAddress + } else if (moduleConfig.version) { + const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[ + moduleConfig.version + ] as Hex + if (!moduleAddr) { + throw new Error(`Invalid version ${moduleConfig.version}`) + } + instance.moduleAddress = moduleAddr + instance.version = moduleConfig.version as ModuleVersion + } else { + instance.moduleAddress = DEFAULT_MULTICHAIN_MODULE + // Note: in this case Version remains the default one + } + return instance + } + + getAddress(): Hex { + return this.moduleAddress + } + + async getSigner(): Promise<SmartAccountSigner> { + return Promise.resolve(this.signer) + } + + async getDummySignature(): Promise<Hex> { + const moduleAddress = getAddress(this.getAddress()) + const dynamicPart = moduleAddress.substring(2).padEnd(40, "0") + return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000` + } + + // Note: other modules may need additional attributes to build init data + async getInitData(): Promise<Hex> { + const ecdsaOwnerAddress = await this.signer.getAddress() + const moduleRegistryParsedAbi = parseAbi([ + "function initForSmartAccount(address owner)" + ]) + const ecdsaOwnershipInitData = encodeFunctionData({ + abi: moduleRegistryParsedAbi, + functionName: "initForSmartAccount", + args: [ecdsaOwnerAddress] + }) + return ecdsaOwnershipInitData + } + + async signUserOpHash(userOpHash: string): Promise<Hex> { + const sig = await this.signer.signMessage({ raw: toBytes(userOpHash) }) + return sig + } + + /** + * Signs a message using the appropriate method based on the type of signer. + * + * @param {Uint8Array | string} message - The message to be signed. + * @returns {Promise<string>} A promise resolving to the signature or error message. + * @throws {Error} If the signer type is invalid or unsupported. + */ + async signMessage(_message: Uint8Array | string): Promise<string> { + const message = typeof _message === "string" ? _message : { raw: _message } + let signature = await this.signer.signMessage(message) + + const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27 + signature = signature.slice(0, -2) + correctV.toString(16) + } + return signature + } + + async signUserOps( + multiChainUserOps: MultiChainUserOpDto[] + ): Promise<UserOperationStruct[]> { + try { + const leaves: string[] = [] + + // Iterate over each userOp and process them + for (const multiChainOp of multiChainUserOps) { + const validUntil = multiChainOp.validUntil ?? 0 + const validAfter = multiChainOp.validAfter ?? 0 + const leaf = concat([ + pad(toHex(validUntil), { size: 6 }), + pad(toHex(validAfter), { size: 6 }), + pad( + getUserOpHash( + multiChainOp.userOp, + this.entryPointAddress, + multiChainOp.chainId + ), + { size: 32 } + ) + ]) + + leaves.push(keccak256(leaf)) + } + + // Create a new Merkle tree using the leaves array + const merkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true }) + + let multichainSignature = await this.signer.signMessage({ + raw: toBytes(merkleTree.getHexRoot()) + }) + + const potentiallyIncorrectV = Number.parseInt( + multichainSignature.slice(-2), + 16 + ) + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27 + multichainSignature = + multichainSignature.slice(0, -2) + correctV.toString(16) + } + + // Create an array to store updated userOps + const updatedUserOps: UserOperationStruct[] = [] + + for (let i = 0; i < leaves.length; i++) { + const merkleProof = merkleTree.getHexProof(leaves[i]) + + const validUntil = multiChainUserOps[i].validUntil ?? 0 + const validAfter = multiChainUserOps[i].validAfter ?? 0 + + // Create the moduleSignature + const moduleSignature = encodeAbiParameters( + parseAbiParameters(["uint48, uint48, bytes32, bytes32[], bytes"]), + [ + validUntil, + validAfter, + merkleTree.getHexRoot() as Hex, + merkleProof as Hex[], + multichainSignature as Hex + ] + ) + + // Note: Because accountV2 does not directly call this method. hence we need to add validation module address to the signature + const signatureWithModuleAddress = encodeAbiParameters( + parseAbiParameters(["bytes, address"]), + [moduleSignature, this.getAddress()] + ) + + // Update userOp with the final signature + const updatedUserOp: UserOperationStruct = { + ...(multiChainUserOps[i].userOp as UserOperationStruct), + signature: signatureWithModuleAddress as `0x${string}` + } + + updatedUserOps.push(updatedUserOp) + } + return updatedUserOps + } catch (error) { + Logger.error("Error in signing multi chain userops") + throw new Error(JSON.stringify(error)) + } + } +} diff --git a/packages/modules/src/PasskeyValidationModule.ts b/src/modules/PasskeyValidationModule.ts similarity index 100% rename from packages/modules/src/PasskeyValidationModule.ts rename to src/modules/PasskeyValidationModule.ts diff --git a/packages/modules/src/SessionKeyManagerModule.ts b/src/modules/SessionKeyManagerModule.ts similarity index 54% rename from packages/modules/src/SessionKeyManagerModule.ts rename to src/modules/SessionKeyManagerModule.ts index 560c9ac60..c325c4dd5 100644 --- a/packages/modules/src/SessionKeyManagerModule.ts +++ b/src/modules/SessionKeyManagerModule.ts @@ -1,32 +1,50 @@ -import { Hex, concat, encodeAbiParameters, encodeFunctionData, keccak256, pad, parseAbi, parseAbiParameters, toBytes, toHex } from "viem"; -import { MerkleTree } from "merkletreejs"; -import { SmartAccountSigner } from "@alchemy/aa-core"; +import { MerkleTree } from "merkletreejs" import { - SessionKeyManagerModuleConfig, - ModuleVersion, - CreateSessionDataParams, - ModuleInfo, - CreateSessionDataResponse, - StorageType, -} from "./utils/Types.js"; -import { SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "./utils/Constants.js"; -import { generateRandomHex } from "./utils/Uid.js"; -import { BaseValidationModule } from "./BaseValidationModule.js"; -import { SessionLocalStorage } from "./session-storage/SessionLocalStorage.js"; -import { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage.js"; -import { convertSigner } from "@biconomy/common"; + type Hex, + concat, + encodeAbiParameters, + encodeFunctionData, + keccak256, + pad, + parseAbi, + parseAbiParameters, + toBytes, + toHex +} from "viem" +import { type SmartAccountSigner, convertSigner } from "../account" +import { BaseValidationModule } from "./BaseValidationModule.js" +import type { + ISessionStorage, + SessionLeafNode, + SessionSearchParam, + SessionStatus +} from "./interfaces/ISessionStorage.js" +import { SessionLocalStorage } from "./session-storage/SessionLocalStorage.js" +import { + DEFAULT_SESSION_KEY_MANAGER_MODULE, + SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION +} from "./utils/Constants.js" +import { + type CreateSessionDataParams, + type CreateSessionDataResponse, + type ModuleInfo, + type ModuleVersion, + type SessionKeyManagerModuleConfig, + StorageType +} from "./utils/Types.js" +import { generateRandomHex } from "./utils/Uid.js" export class SessionKeyManagerModule extends BaseValidationModule { - version: ModuleVersion = "V1_0_0"; + version: ModuleVersion = "V1_0_0" - moduleAddress!: Hex; + moduleAddress!: Hex - merkleTree!: MerkleTree; + merkleTree!: MerkleTree - sessionStorageClient!: ISessionStorage; + sessionStorageClient!: ISessionStorage readonly mockEcdsaSessionKeySig: Hex = - "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b"; + "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b" /** * This constructor is private. Use the static create method to instantiate SessionKeyManagerModule @@ -34,7 +52,7 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns An instance of SessionKeyManagerModule */ private constructor(moduleConfig: SessionKeyManagerModuleConfig) { - super(moduleConfig); + super(moduleConfig) } /** @@ -42,53 +60,62 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @param moduleConfig The configuration for the module * @returns A Promise that resolves to an instance of SessionKeyManagerModule */ - public static async create(moduleConfig: SessionKeyManagerModuleConfig): Promise<SessionKeyManagerModule> { + public static async create( + moduleConfig: SessionKeyManagerModuleConfig + ): Promise<SessionKeyManagerModule> { // TODO: (Joe) stop doing things in a 'create' call after the instance has been created - const instance = new SessionKeyManagerModule(moduleConfig); + const instance = new SessionKeyManagerModule(moduleConfig) if (moduleConfig.moduleAddress) { - instance.moduleAddress = moduleConfig.moduleAddress; + instance.moduleAddress = moduleConfig.moduleAddress } else if (moduleConfig.version) { - const moduleAddr = SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION[moduleConfig.version] as Hex; + const moduleAddr = SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION[ + moduleConfig.version + ] as Hex if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`); + throw new Error(`Invalid version ${moduleConfig.version}`) } - instance.moduleAddress = moduleAddr; - instance.version = moduleConfig.version as ModuleVersion; + instance.moduleAddress = moduleAddr + instance.version = moduleConfig.version as ModuleVersion } else { - instance.moduleAddress = DEFAULT_SESSION_KEY_MANAGER_MODULE; + instance.moduleAddress = DEFAULT_SESSION_KEY_MANAGER_MODULE // Note: in this case Version remains the default one } if (moduleConfig.sessionStorageClient) { - instance.sessionStorageClient = moduleConfig.sessionStorageClient; + instance.sessionStorageClient = moduleConfig.sessionStorageClient } else { switch (moduleConfig.storageType) { case StorageType.LOCAL_STORAGE: - instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); - break; + instance.sessionStorageClient = new SessionLocalStorage( + moduleConfig.smartAccountAddress + ) + break default: - instance.sessionStorageClient = new SessionLocalStorage(moduleConfig.smartAccountAddress); + instance.sessionStorageClient = new SessionLocalStorage( + moduleConfig.smartAccountAddress + ) } } - const existingSessionData = await instance.sessionStorageClient.getAllSessionData(); + const existingSessionData = + await instance.sessionStorageClient.getAllSessionData() const existingSessionDataLeafs = existingSessionData.map((sessionData) => { const leafDataHex = concat([ pad(toHex(sessionData.validUntil), { size: 6 }), pad(toHex(sessionData.validAfter), { size: 6 }), pad(sessionData.sessionValidationModule, { size: 20 }), - sessionData.sessionKeyData, - ]); - return keccak256(leafDataHex); - }); + sessionData.sessionKeyData + ]) + return keccak256(leafDataHex) + }) instance.merkleTree = new MerkleTree(existingSessionDataLeafs, keccak256, { sortPairs: true, - hashLeaves: false, - }); + hashLeaves: false + }) - return instance; + return instance } /** @@ -96,58 +123,63 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @param leavesData The data of one or more leaves to be used to create session data * @returns The session data */ - createSessionData = async (leavesData: CreateSessionDataParams[]): Promise<CreateSessionDataResponse> => { - const sessionKeyManagerModuleABI = parseAbi(["function setMerkleRoot(bytes32 _merkleRoot)"]); + createSessionData = async ( + leavesData: CreateSessionDataParams[] + ): Promise<CreateSessionDataResponse> => { + const sessionKeyManagerModuleABI = parseAbi([ + "function setMerkleRoot(bytes32 _merkleRoot)" + ]) - const leavesToAdd: Buffer[] = []; - const sessionIDInfo: string[] = []; + const leavesToAdd: Buffer[] = [] + const sessionIDInfo: string[] = [] for (const leafData of leavesData) { const leafDataHex = concat([ pad(toHex(leafData.validUntil), { size: 6 }), pad(toHex(leafData.validAfter), { size: 6 }), pad(leafData.sessionValidationModule, { size: 20 }), - leafData.sessionKeyData, - ]); + leafData.sessionKeyData + ]) - const generatedSessionId = leafData.preferredSessionId ?? generateRandomHex(); + const generatedSessionId = + leafData.preferredSessionId ?? generateRandomHex() // TODO: verify this, might not be buffer - leavesToAdd.push(keccak256(leafDataHex) as unknown as Buffer); - sessionIDInfo.push(generatedSessionId); + leavesToAdd.push(keccak256(leafDataHex) as unknown as Buffer) + sessionIDInfo.push(generatedSessionId) const sessionLeafNode = { ...leafData, sessionID: generatedSessionId, - status: "PENDING" as SessionStatus, - }; + status: "PENDING" as SessionStatus + } - await this.sessionStorageClient.addSessionData(sessionLeafNode); + await this.sessionStorageClient.addSessionData(sessionLeafNode) } - this.merkleTree.addLeaves(leavesToAdd); + this.merkleTree.addLeaves(leavesToAdd) - const leaves = this.merkleTree.getLeaves(); + const leaves = this.merkleTree.getLeaves() const newMerkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true, - hashLeaves: false, - }); + hashLeaves: false + }) - this.merkleTree = newMerkleTree; + this.merkleTree = newMerkleTree const setMerkleRootData = encodeFunctionData({ abi: sessionKeyManagerModuleABI, functionName: "setMerkleRoot", - args: [this.merkleTree.getHexRoot() as Hex], - }); + args: [this.merkleTree.getHexRoot() as Hex] + }) - await this.sessionStorageClient.setMerkleRoot(this.merkleTree.getHexRoot()); + await this.sessionStorageClient.setMerkleRoot(this.merkleTree.getHexRoot()) return { data: setMerkleRootData, - sessionIDInfo: sessionIDInfo, - }; - }; + sessionIDInfo: sessionIDInfo + } + } /** * This method is used to sign the user operation using the session signer @@ -156,60 +188,74 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns The signature of the user operation */ async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise<Hex> { - if (!(params && params.sessionSigner)) { - throw new Error("Session signer is not provided."); + if (!params?.sessionSigner) { + throw new Error("Session signer is not provided.") } - const { signer: sessionSigner } = await convertSigner(params.sessionSigner, false); + const { signer: sessionSigner } = await convertSigner( + params.sessionSigner, + false + ) // Use the sessionSigner to sign the user operation - const signature = await sessionSigner.signMessage({ raw: toBytes(userOpHash) }); + const signature = await sessionSigner.signMessage({ + raw: toBytes(userOpHash) + }) - const sessionSignerData = await this.getLeafInfo(params); + const sessionSignerData = await this.getLeafInfo(params) const leafDataHex = concat([ pad(toHex(sessionSignerData.validUntil), { size: 6 }), pad(toHex(sessionSignerData.validAfter), { size: 6 }), pad(sessionSignerData.sessionValidationModule, { size: 20 }), - sessionSignerData.sessionKeyData, - ]); + sessionSignerData.sessionKeyData + ]) // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) - let paddedSignature: Hex = encodeAbiParameters(parseAbiParameters("uint48, uint48, address, bytes, bytes32[], bytes"), [ - sessionSignerData.validUntil, - sessionSignerData.validAfter, - sessionSignerData.sessionValidationModule, - sessionSignerData.sessionKeyData, - this.merkleTree.getHexProof(keccak256(leafDataHex)) as Hex[], - signature, - ]); + let paddedSignature: Hex = encodeAbiParameters( + parseAbiParameters("uint48, uint48, address, bytes, bytes32[], bytes"), + [ + sessionSignerData.validUntil, + sessionSignerData.validAfter, + sessionSignerData.sessionValidationModule, + sessionSignerData.sessionKeyData, + this.merkleTree.getHexProof(keccak256(leafDataHex)) as Hex[], + signature + ] + ) if (params?.additionalSessionData) { - paddedSignature += params.additionalSessionData; + paddedSignature += params.additionalSessionData } - return paddedSignature as Hex; + return paddedSignature as Hex } private async getLeafInfo(params: ModuleInfo): Promise<SessionLeafNode> { - if (!(params && params.sessionSigner)) { - throw new Error("Session signer is not provided."); + if (!params?.sessionSigner) { + throw new Error("Session signer is not provided.") } - const { signer: sessionSigner } = await convertSigner(params.sessionSigner, false); - let sessionSignerData; + const { signer: sessionSigner } = await convertSigner( + params.sessionSigner, + false + ) + // biome-ignore lint/suspicious/noImplicitAnyLet: <explanation> + let sessionSignerData if (params?.sessionID) { sessionSignerData = await this.sessionStorageClient.getSessionData({ - sessionID: params.sessionID, - }); + sessionID: params.sessionID + }) } else if (params?.sessionValidationModule) { sessionSignerData = await this.sessionStorageClient.getSessionData({ sessionValidationModule: params.sessionValidationModule, - sessionPublicKey: await sessionSigner.getAddress(), - }); + sessionPublicKey: await sessionSigner.getAddress() + }) } else { - throw new Error("sessionID or sessionValidationModule should be provided."); + throw new Error( + "sessionID or sessionValidationModule should be provided." + ) } - return sessionSignerData; + return sessionSignerData } /** @@ -218,8 +264,11 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @param status The status to be updated * @returns */ - async updateSessionStatus(param: SessionSearchParam, status: SessionStatus): Promise<void> { - this.sessionStorageClient.updateSessionStatus(param, status); + async updateSessionStatus( + param: SessionSearchParam, + status: SessionStatus + ): Promise<void> { + this.sessionStorageClient.updateSessionStatus(param, status) } /** @@ -227,21 +276,21 @@ export class SessionKeyManagerModule extends BaseValidationModule { * @returns */ async clearPendingSessions(): Promise<void> { - this.sessionStorageClient.clearPendingSessions(); + this.sessionStorageClient.clearPendingSessions() } /** * @returns SessionKeyManagerModule address */ getAddress(): Hex { - return this.moduleAddress; + return this.moduleAddress } /** * @remarks This is the version of the module contract */ async getSigner(): Promise<SmartAccountSigner> { - throw new Error("Method not implemented."); + throw new Error("Method not implemented.") } /** @@ -250,45 +299,51 @@ export class SessionKeyManagerModule extends BaseValidationModule { */ async getDummySignature(params?: ModuleInfo): Promise<Hex> { if (!params) { - throw new Error("Session signer is not provided."); + throw new Error("Session signer is not provided.") } - const sessionSignerData = await this.getLeafInfo(params); + const sessionSignerData = await this.getLeafInfo(params) const leafDataHex = concat([ pad(toHex(sessionSignerData.validUntil), { size: 6 }), pad(toHex(sessionSignerData.validAfter), { size: 6 }), pad(sessionSignerData.sessionValidationModule, { size: 20 }), - sessionSignerData.sessionKeyData, - ]); + sessionSignerData.sessionKeyData + ]) // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) - let paddedSignature: Hex = encodeAbiParameters(parseAbiParameters("uint48, uint48, address, bytes, bytes32[], bytes"), [ - sessionSignerData.validUntil, - sessionSignerData.validAfter, - sessionSignerData.sessionValidationModule, - sessionSignerData.sessionKeyData, - this.merkleTree.getHexProof(keccak256(leafDataHex)) as Hex[], - this.mockEcdsaSessionKeySig, - ]); + let paddedSignature: Hex = encodeAbiParameters( + parseAbiParameters("uint48, uint48, address, bytes, bytes32[], bytes"), + [ + sessionSignerData.validUntil, + sessionSignerData.validAfter, + sessionSignerData.sessionValidationModule, + sessionSignerData.sessionKeyData, + this.merkleTree.getHexProof(keccak256(leafDataHex)) as Hex[], + this.mockEcdsaSessionKeySig + ] + ) if (params?.additionalSessionData) { - paddedSignature += params.additionalSessionData; + paddedSignature += params.additionalSessionData } - const dummySig = encodeAbiParameters(parseAbiParameters(["bytes, address"]), [paddedSignature as Hex, this.getAddress()]); + const dummySig = encodeAbiParameters( + parseAbiParameters(["bytes, address"]), + [paddedSignature as Hex, this.getAddress()] + ) - return dummySig; + return dummySig } /** * @remarks Other modules may need additional attributes to build init data */ async getInitData(): Promise<Hex> { - throw new Error("Method not implemented."); + throw new Error("Method not implemented.") } /** * @remarks This Module dont have knowledge of signer. So, this method is not implemented */ async signMessage(_message: Uint8Array | string): Promise<string> { - throw new Error("Method not implemented."); + throw new Error("Method not implemented.") } } diff --git a/src/modules/index.ts b/src/modules/index.ts new file mode 100644 index 000000000..3279ad1fa --- /dev/null +++ b/src/modules/index.ts @@ -0,0 +1,30 @@ +export * from "./utils/Types.js" +export * from "./utils/Constants.js" +export * from "./interfaces/IValidationModule.js" +export * from "./interfaces/ISessionValidationModule.js" +export * from "./BaseValidationModule.js" +export * from "./ECDSAOwnershipValidationModule.js" +export * from "./MultichainValidationModule.js" +export * from "./SessionKeyManagerModule.js" +export * from "./BatchedSessionRouterModule.js" +export * from "./session-validation-modules/ERC20SessionValidationModule.js" + +import { + BatchedSessionRouterModule, + ECDSAOwnershipValidationModule, + ERC20SessionValidationModule, + MultiChainValidationModule, + SessionKeyManagerModule +} from "./index.js" + +export const createBatchedSessionRouterModule = + BatchedSessionRouterModule.create +export const createMultiChainValidationModule = + MultiChainValidationModule.create +export const createECDSAOwnershipValidationModule = + ECDSAOwnershipValidationModule.create +export const createSessionKeyManagerModule = SessionKeyManagerModule.create +export const createERC20SessionValidationModule = + ERC20SessionValidationModule.create + +// export * from './PasskeyValidationModule' diff --git a/packages/modules/src/interfaces/ISessionStorage.ts b/src/modules/interfaces/ISessionStorage.ts similarity index 71% rename from packages/modules/src/interfaces/ISessionStorage.ts rename to src/modules/interfaces/ISessionStorage.ts index 41505fb1d..6372b77e3 100644 --- a/packages/modules/src/interfaces/ISessionStorage.ts +++ b/src/modules/interfaces/ISessionStorage.ts @@ -1,85 +1,88 @@ -import { Hex } from "viem"; -import { SmartAccountSigner } from "@alchemy/aa-core"; -import { SignerData } from "../utils/Types.js"; +import type { Hex } from "viem" +import type { SmartAccountSigner } from "../../account" +import type { SignerData } from "../utils/Types.js" -export type SessionStatus = "PENDING" | "ACTIVE" | "INACTIVE" | "EXPIRED"; +export type SessionStatus = "PENDING" | "ACTIVE" | "INACTIVE" | "EXPIRED" export type SessionLeafNode = { - validUntil: number; - validAfter: number; - sessionValidationModule: Hex; - sessionKeyData: Hex; - sessionPublicKey: Hex; - sessionID?: string; - status: SessionStatus; -}; + validUntil: number + validAfter: number + sessionValidationModule: Hex + sessionKeyData: Hex + sessionPublicKey: Hex + sessionID?: string + status: SessionStatus +} export type SessionSearchParam = { - sessionID?: string; - sessionPublicKey?: Hex; - sessionValidationModule?: Hex; - status?: SessionStatus; -}; + sessionID?: string + sessionPublicKey?: Hex + sessionValidationModule?: Hex + status?: SessionStatus +} export interface ISessionStorage { /** * Adds a session leaf node to the session storage * @param leaf SessionLeafNode to be added to the session storage */ - addSessionData(_leaf: SessionLeafNode): Promise<void>; + addSessionData(_leaf: SessionLeafNode): Promise<void> /** * Fetch a session leaf node from the session storage * @param param SessionSearchParam to be used to fetch the session leaf node */ - getSessionData(_param: SessionSearchParam): Promise<SessionLeafNode>; + getSessionData(_param: SessionSearchParam): Promise<SessionLeafNode> /** * Updates the session status of a session leaf node in the session storage * @param param SessionSearchParam to be used to fetch the session leaf node * @param status New session status to be updated */ - updateSessionStatus(_param: SessionSearchParam, _status: SessionStatus): Promise<void>; + updateSessionStatus( + _param: SessionSearchParam, + _status: SessionStatus + ): Promise<void> /** * Clears all the pending sessions from the session storage */ - clearPendingSessions(): Promise<void>; + clearPendingSessions(): Promise<void> /** * If a signer object is passed, it will be added to the session storage * If no signer object is passed, it'll create a random signer and add it to the session storage * @param signer Optional signer to be added to the session storage */ - addSigner(_signer?: SignerData): Promise<SmartAccountSigner>; + addSigner(_signer?: SignerData): Promise<SmartAccountSigner> /** * Fetch a signer from the session storage * @param signerPublicKey Public key of the signer to be fetched */ - getSignerByKey(_signerPublicKey: string): Promise<SmartAccountSigner>; + getSignerByKey(_signerPublicKey: string): Promise<SmartAccountSigner> /** * Fetch a signer from the session storage based on the session search param * @param param SessionSearchParam to be used to fetch the signer */ - getSignerBySession(_param: SessionSearchParam): Promise<SmartAccountSigner>; + getSignerBySession(_param: SessionSearchParam): Promise<SmartAccountSigner> /** * Fetch all the session leaf nodes from the session storage based on the session search param. * If no param is passed, it'll fetch all the session leaf nodes from the session storage * @param param SessionSearchParam to be used to fetch the session leaf nodes */ - getAllSessionData(_param?: SessionSearchParam): Promise<SessionLeafNode[]>; + getAllSessionData(_param?: SessionSearchParam): Promise<SessionLeafNode[]> /** * Fetch merkle root from the session storage */ - getMerkleRoot(): Promise<string>; + getMerkleRoot(): Promise<string> /** * Set merkle root in the session storage * @param merkleRoot Merkle root to be set in the session storage */ - setMerkleRoot(_merkleRoot: string): Promise<void>; + setMerkleRoot(_merkleRoot: string): Promise<void> } diff --git a/packages/modules/src/interfaces/ISessionValidationModule.ts b/src/modules/interfaces/ISessionValidationModule.ts similarity index 84% rename from packages/modules/src/interfaces/ISessionValidationModule.ts rename to src/modules/interfaces/ISessionValidationModule.ts index ee1c3abef..d0e8f5be8 100644 --- a/packages/modules/src/interfaces/ISessionValidationModule.ts +++ b/src/modules/interfaces/ISessionValidationModule.ts @@ -9,6 +9,6 @@ * @author Sachin Tomar <sachin.tomar@biconomy.io> */ export interface ISessionValidationModule<T> { - getSessionKeyData(_sessionData: T): Promise<string>; - getAddress(): string; + getSessionKeyData(_sessionData: T): Promise<string> + getAddress(): string } diff --git a/src/modules/interfaces/IValidationModule.ts b/src/modules/interfaces/IValidationModule.ts new file mode 100644 index 000000000..a6bedc379 --- /dev/null +++ b/src/modules/interfaces/IValidationModule.ts @@ -0,0 +1,11 @@ +import type { Hex } from "viem" +import type { SmartAccountSigner } from "../../account" + +export interface IValidationModule { + getAddress(): Hex + getInitData(): Promise<Hex> + getSigner(): Promise<SmartAccountSigner> + signUserOpHash(_userOpHash: string): Promise<Hex> + signMessage(_message: string | Uint8Array): Promise<string> + getDummySignature(): Promise<Hex> +} diff --git a/src/modules/session-storage/SessionFileStorage.ts b/src/modules/session-storage/SessionFileStorage.ts new file mode 100644 index 000000000..932e2d2c6 --- /dev/null +++ b/src/modules/session-storage/SessionFileStorage.ts @@ -0,0 +1,273 @@ +import { http, type Hex, createWalletClient } from "viem" +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" +import { polygonMumbai } from "viem/chains" +import { + Logger, + type SmartAccountSigner, + WalletClientSigner, + getChain +} from "../../account" +import type { + ISessionStorage, + SessionLeafNode, + SessionSearchParam, + SessionStatus +} from "../interfaces/ISessionStorage" +import type { SignerData } from "../utils/Types" + +export class SessionFileStorage implements ISessionStorage { + private smartAccountAddress: string + + constructor(smartAccountAddress: string) { + this.smartAccountAddress = smartAccountAddress.toLowerCase() + } + + // This method reads data from the file and returns it in the JSON format + private async readDataFromFile(type: "sessions" | "signers"): Promise<any> { + return new Promise((resolve) => { + // @ts-ignore + fs.readFile(this.getStorageFilePath(type), "utf8", (err, data) => { + if (err) { + // Handle errors appropriately + resolve(undefined) + } else { + if (!data) { + resolve(null) + } else { + resolve(JSON.parse(data)) + } + // resolve(JSON.parse(data)); + } + }) + }) + } + + private getStorageFilePath(type: "sessions" | "signers"): string { + return `${__dirname}/sessionStorageData/${this.smartAccountAddress}_${type}.json` + } + + private async writeDataToFile( + data: any, + type: "sessions" | "signers" + ): Promise<void> { + console.log("") + return new Promise((resolve, reject) => { + const filePath = this.getStorageFilePath(type) + // @ts-ignore + fs.writeFile(filePath, JSON.stringify(data), "utf8", (err) => { + if (err) { + // Handle errors appropriately + console.log({ err }, JSON.stringify(data)) + reject(err) + } else { + resolve() + } + }) + }) + } + + private validateSearchParam(param: SessionSearchParam): void { + if (param.sessionID) { + return + } + if ( + !param.sessionID && + param.sessionPublicKey && + param.sessionValidationModule + ) { + return + } + throw new Error( + "Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address." + ) + } + + // Session store is in the form of mekrleRoot and leafnodes, each object will have a root and an array of leafNodes. + private async getSessionStore(): Promise<any> { + // eslint-disable-next-line no-useless-catch + try { + const data = await this.readDataFromFile("sessions") + return data || { merkleRoot: "", leafNodes: [] } + } catch (error) { + // Handle errors appropriately + console.log({ error }) + } + } + + private async getSignerStore(): Promise<any> { + // eslint-disable-next-line no-useless-catch + try { + const data = await this.readDataFromFile("signers") + return data || {} + } catch (error) { + console.log({ error }) + // Handle errors appropriately + } + } + + // private getStorageKey(type: "sessions" | "signers"): string { + // return `${this.smartAccountAddress}_${type}` + // } + + private toLowercaseAddress(address: string): Hex { + return address.toLowerCase() as Hex + } + + async getSessionData(param: SessionSearchParam): Promise<SessionLeafNode> { + const sessions = (await this.getSessionStore()).leafNodes + const session = sessions.find((s: SessionLeafNode) => { + if (param.sessionID) { + return ( + s.sessionID === param.sessionID && + (!param.status || s.status === param.status) + ) + } + if (param.sessionPublicKey && param.sessionValidationModule) { + return ( + s.sessionPublicKey === + this.toLowercaseAddress(param.sessionPublicKey) && + s.sessionValidationModule === + this.toLowercaseAddress(param.sessionValidationModule) && + (!param.status || s.status === param.status) + ) + } + return undefined + }) + + if (!session) { + throw new Error("Session not found.") + } + return session + } + + async addSessionData(leaf: SessionLeafNode): Promise<void> { + Logger.log("Add session Data", leaf) + const data = await this.getSessionStore() + leaf.sessionValidationModule = this.toLowercaseAddress( + leaf.sessionValidationModule + ) + leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey) + data.leafNodes.push(leaf) + await this.writeDataToFile(data, "sessions") // Use 'sessions' as the type + } + + async updateSessionStatus( + param: SessionSearchParam, + status: SessionStatus + ): Promise<void> { + this.validateSearchParam(param) + + const data = await this.getSessionStore() + const session = data.leafNodes.find((s: SessionLeafNode) => { + if (param.sessionID) { + return s.sessionID === param.sessionID + } + if (param.sessionPublicKey && param.sessionValidationModule) { + return ( + s.sessionPublicKey === + this.toLowercaseAddress(param.sessionPublicKey) && + s.sessionValidationModule === + this.toLowercaseAddress(param.sessionValidationModule) + ) + } + return undefined + }) + + if (!session) { + throw new Error("Session not found.") + } + + session.status = status + await this.writeDataToFile(data, "sessions") // Use 'sessions' as the type + } + + async clearPendingSessions(): Promise<void> { + const data = await this.getSessionStore() + data.leafNodes = data.leafNodes.filter( + (s: SessionLeafNode) => s.status !== "PENDING" + ) + await this.writeDataToFile(data, "sessions") // Use 'sessions' as the type + } + + async addSigner(signerData: SignerData): Promise<WalletClientSigner> { + const signers = await this.getSignerStore() + let signer: SignerData + if (!signerData) { + const pkey = generatePrivateKey() + signer = { + pvKey: pkey, + pbKey: privateKeyToAccount(pkey).publicKey + } + } else { + signer = signerData + } + const accountSigner = privateKeyToAccount(signer.pvKey) + const viemChain = getChain(signerData?.chainId?.id || 1) + const client = createWalletClient({ + account: accountSigner, + chain: signerData.chainId, + transport: http(viemChain.rpcUrls.default.http[0]) + }) + const walletClientSigner: SmartAccountSigner = new WalletClientSigner( + client, + "json-rpc" // signerType + ) + signers[this.toLowercaseAddress(accountSigner.address)] = { + pvKey: signer.pvKey, + pbKey: signer.pbKey + } + await this.writeDataToFile(signers, "signers") // Use 'signers' as the type + return walletClientSigner + } + + async getSignerByKey(sessionPublicKey: string): Promise<WalletClientSigner> { + const signers = await this.getSignerStore() + Logger.log("Got signers", signers) + + const signerData: SignerData = + signers[this.toLowercaseAddress(sessionPublicKey)] + + if (!signerData) { + throw new Error("Signer not found.") + } + Logger.log(signerData.pvKey, "PVKEY") + + const signer = privateKeyToAccount(signerData.pvKey) + const walletClient = createWalletClient({ + account: signer, + transport: http(polygonMumbai.rpcUrls.default.http[0]) + }) + return new WalletClientSigner(walletClient, "json-rpc") + } + + async getSignerBySession( + param: SessionSearchParam + ): Promise<WalletClientSigner> { + const session = await this.getSessionData(param) + Logger.log("got session", session) + const walletClientSinger = await this.getSignerByKey( + session.sessionPublicKey + ) + return walletClientSinger + } + + async getAllSessionData( + param?: SessionSearchParam + ): Promise<SessionLeafNode[]> { + const sessions = (await this.getSessionStore()).leafNodes + if (!param || !param.status) { + return sessions + } + return sessions.filter((s: SessionLeafNode) => s.status === param.status) + } + + async getMerkleRoot(): Promise<string> { + return (await this.getSessionStore()).merkleRoot + } + + async setMerkleRoot(merkleRoot: string): Promise<void> { + const data = await this.getSessionStore() + data.merkleRoot = merkleRoot + await this.writeDataToFile(data, "sessions") // Use 'sessions' as the type + } +} diff --git a/src/modules/session-storage/SessionLocalStorage.ts b/src/modules/session-storage/SessionLocalStorage.ts new file mode 100644 index 000000000..82fe10121 --- /dev/null +++ b/src/modules/session-storage/SessionLocalStorage.ts @@ -0,0 +1,208 @@ +import { http, type Hex, createWalletClient, toHex } from "viem" +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" +import { mainnet } from "viem/chains" +import { type SmartAccountSigner, WalletClientSigner } from "../../account" +import type { + ISessionStorage, + SessionLeafNode, + SessionSearchParam, + SessionStatus +} from "../interfaces/ISessionStorage.js" +import type { SignerData } from "../utils/Types.js" + +export class SessionLocalStorage implements ISessionStorage { + private smartAccountAddress: string + + constructor(smartAccountAddress: string) { + this.smartAccountAddress = smartAccountAddress.toLowerCase() + } + + private validateSearchParam(param: SessionSearchParam): void { + if ( + param.sessionID || + (!param.sessionID && + param.sessionPublicKey && + param.sessionValidationModule) + ) { + return + } + throw new Error( + "Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address." + ) + } + + private getSessionStore(): any { + // @ts-ignore: LocalStorage is not available in node + const data = localStorage.getItem(this.getStorageKey("sessions")) + return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] } + } + + private getSignerStore(): any { + // @ts-ignore: LocalStorage is not available in node + const data = localStorage.getItem(this.getStorageKey("signers")) + return data ? JSON.parse(data) : {} + } + + private getStorageKey(type: "sessions" | "signers"): string { + return `${this.smartAccountAddress}_${type}` + } + + private toLowercaseAddress(address: string): string { + return address.toLowerCase() + } + + async addSessionData(leaf: SessionLeafNode): Promise<void> { + const data = this.getSessionStore() + leaf.sessionValidationModule = this.toLowercaseAddress( + leaf.sessionValidationModule + ) as Hex + leaf.sessionPublicKey = this.toLowercaseAddress( + leaf.sessionPublicKey + ) as Hex + data.leafNodes.push(leaf) + // @ts-ignore: LocalStorage is not available in node + localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) + } + + async getSessionData(param: SessionSearchParam): Promise<SessionLeafNode> { + this.validateSearchParam(param) + + const sessions = this.getSessionStore().leafNodes + const session = sessions.find((s: SessionLeafNode) => { + if (param.sessionID) { + return ( + s.sessionID === param.sessionID && + (!param.status || s.status === param.status) + ) + } + if (param.sessionPublicKey && param.sessionValidationModule) { + return ( + s.sessionPublicKey === + this.toLowercaseAddress(param.sessionPublicKey) && + s.sessionValidationModule === + this.toLowercaseAddress(param.sessionValidationModule) && + (!param.status || s.status === param.status) + ) + } + return undefined + }) + + if (!session) { + throw new Error("Session not found.") + } + return session + } + + async updateSessionStatus( + param: SessionSearchParam, + status: SessionStatus + ): Promise<void> { + this.validateSearchParam(param) + + const data = this.getSessionStore() + const session = data.leafNodes.find((s: SessionLeafNode) => { + if (param.sessionID) { + return s.sessionID === param.sessionID + } + if (param.sessionPublicKey && param.sessionValidationModule) { + return ( + s.sessionPublicKey === + this.toLowercaseAddress(param.sessionPublicKey) && + s.sessionValidationModule === + this.toLowercaseAddress(param.sessionValidationModule) + ) + } + return undefined + }) + + if (!session) { + throw new Error("Session not found.") + } + + session.status = status + // @ts-ignore: LocalStorage is not available in node + localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) + } + + async clearPendingSessions(): Promise<void> { + const data = this.getSessionStore() + data.leafNodes = data.leafNodes.filter( + (s: SessionLeafNode) => s.status !== "PENDING" + ) + // @ts-ignore: LocalStorage is not available in node + localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) + } + + async addSigner(signerData: SignerData): Promise<SmartAccountSigner> { + const signers = this.getSignerStore() + let signer: SignerData + if (!signerData) { + const pkey = generatePrivateKey() + signer = { + pvKey: pkey, + pbKey: privateKeyToAccount(pkey).publicKey + } + } else { + signer = signerData + } + const accountSigner = privateKeyToAccount(toHex(signer.pvKey)) + const client = createWalletClient({ + account: accountSigner, + chain: signerData.chainId, + transport: http() + }) + const walletClientSigner = new WalletClientSigner( + client, + "json-rpc" // signerType + ) + signers[this.toLowercaseAddress(accountSigner.address)] = signerData + // @ts-ignore: LocalStorage is not available in node + localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)) + return walletClientSigner + } + + async getSignerByKey(sessionPublicKey: string): Promise<SmartAccountSigner> { + const signers = this.getSignerStore() + const signerData = signers[this.toLowercaseAddress(sessionPublicKey)] + if (!signerData) { + throw new Error("Signer not found.") + } + const account = privateKeyToAccount(signerData.privateKey) + const client = createWalletClient({ + account, + chain: mainnet, + transport: http() + }) + const signer = new WalletClientSigner(client, "viem") + return signer + } + + async getSignerBySession( + param: SessionSearchParam + ): Promise<SmartAccountSigner> { + const session = await this.getSessionData(param) + return this.getSignerByKey(session.sessionPublicKey) + } + + async getAllSessionData( + param?: SessionSearchParam + ): Promise<SessionLeafNode[]> { + const sessions = this.getSessionStore().leafNodes + if (!param || !param.status) { + return sessions + } + return sessions.filter((s: SessionLeafNode) => s.status === param.status) + } + + async getMerkleRoot(): Promise<string> { + return this.getSessionStore().merkleRoot + } + + setMerkleRoot(merkleRoot: string): Promise<void> { + const data = this.getSessionStore() + data.merkleRoot = merkleRoot + // @ts-ignore: LocalStorage is not available in node + localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) + return Promise.resolve() + } +} diff --git a/src/modules/session-storage/SessionMemoryStorage.ts b/src/modules/session-storage/SessionMemoryStorage.ts new file mode 100644 index 000000000..b6d6e4196 --- /dev/null +++ b/src/modules/session-storage/SessionMemoryStorage.ts @@ -0,0 +1,219 @@ +import { http, type Hex, createWalletClient } from "viem" +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" +import { mainnet } from "viem/chains" +import { type SmartAccountSigner, WalletClientSigner } from "../../account" +import type { + ISessionStorage, + SessionLeafNode, + SessionSearchParam, + SessionStatus +} from "../interfaces/ISessionStorage.js" +import type { SignerData } from "../utils/Types.js" + +type MemoryStore = { + _store: Record<string, string> + getItem: (key: string) => string | undefined + setItem: (key: string, value: string) => void +} +const memoryStorage: MemoryStore = { + _store: {}, + getItem: (key: string): string => { + return memoryStorage._store[key] + }, + setItem: (key: string, value: string) => { + memoryStorage._store[key] = value + } +} + +export class SessionMemoryStorage implements ISessionStorage { + private smartAccountAddress: string + + constructor(smartAccountAddress: string) { + this.smartAccountAddress = smartAccountAddress.toLowerCase() + } + + private validateSearchParam(param: SessionSearchParam): void { + if ( + param.sessionID || + (!param.sessionID && + param.sessionPublicKey && + param.sessionValidationModule) + ) { + return + } + throw new Error( + "Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address." + ) + } + + private getSessionStore(): any { + const data = memoryStorage.getItem(this.getStorageKey("sessions")) + return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] } + } + + private getSignerStore(): any { + const data = memoryStorage.getItem(this.getStorageKey("signers")) + return data ? JSON.parse(data) : {} + } + + private getStorageKey(type: "sessions" | "signers"): string { + return `${this.smartAccountAddress}_${type}` + } + + private toLowercaseAddress(address: string): string { + return address.toLowerCase() + } + + async addSessionData(leaf: SessionLeafNode): Promise<void> { + const data = this.getSessionStore() + leaf.sessionValidationModule = this.toLowercaseAddress( + leaf.sessionValidationModule + ) as Hex + leaf.sessionPublicKey = this.toLowercaseAddress( + leaf.sessionPublicKey + ) as Hex + data.leafNodes.push(leaf) + memoryStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) + } + + async getSessionData(param: SessionSearchParam): Promise<SessionLeafNode> { + this.validateSearchParam(param) + + const sessions = this.getSessionStore().leafNodes + const session = sessions.find((s: SessionLeafNode) => { + if (param.sessionID) { + return ( + s.sessionID === param.sessionID && + (!param.status || s.status === param.status) + ) + } + if (param.sessionPublicKey && param.sessionValidationModule) { + return ( + s.sessionPublicKey === + this.toLowercaseAddress(param.sessionPublicKey) && + s.sessionValidationModule === + this.toLowercaseAddress(param.sessionValidationModule) && + (!param.status || s.status === param.status) + ) + } + return undefined + }) + + if (!session) { + throw new Error("Session not found.") + } + return session + } + + async updateSessionStatus( + param: SessionSearchParam, + status: SessionStatus + ): Promise<void> { + this.validateSearchParam(param) + + const data = this.getSessionStore() + const session = data.leafNodes.find((s: SessionLeafNode) => { + if (param.sessionID) { + return s.sessionID === param.sessionID + } + if (param.sessionPublicKey && param.sessionValidationModule) { + return ( + s.sessionPublicKey === + this.toLowercaseAddress(param.sessionPublicKey) && + s.sessionValidationModule === + this.toLowercaseAddress(param.sessionValidationModule) + ) + } + return undefined + }) + + if (!session) { + throw new Error("Session not found.") + } + + session.status = status + memoryStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) + } + + async clearPendingSessions(): Promise<void> { + const data = this.getSessionStore() + data.leafNodes = data.leafNodes.filter( + (s: SessionLeafNode) => s.status !== "PENDING" + ) + memoryStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) + } + + async addSigner(signerData: SignerData): Promise<SmartAccountSigner> { + const signers = this.getSignerStore() + let signer: SignerData + if (!signerData) { + const pkey = generatePrivateKey() + signer = { + pvKey: pkey, + pbKey: privateKeyToAccount(pkey).publicKey + } + } else { + signer = signerData + } + const accountSigner = privateKeyToAccount(signer.pvKey) + const client = createWalletClient({ + account: accountSigner, + chain: signerData.chainId, + transport: http() + }) + const walletClientSigner = new WalletClientSigner( + client, + "json-rpc" // signerType + ) + signers[this.toLowercaseAddress(accountSigner.address)] = signerData + memoryStorage.setItem( + this.getStorageKey("signers"), + JSON.stringify(signers) + ) + return walletClientSigner + } + + async getSignerByKey(sessionPublicKey: string): Promise<SmartAccountSigner> { + const signers = this.getSignerStore() + const signerData = signers[this.toLowercaseAddress(sessionPublicKey)] + if (!signerData) { + throw new Error("Signer not found.") + } + const account = privateKeyToAccount(signerData.privateKey) + const client = createWalletClient({ + account, + chain: mainnet, + transport: http() + }) + const signer = new WalletClientSigner(client, "viem") + return signer + } + + async getSignerBySession( + param: SessionSearchParam + ): Promise<SmartAccountSigner> { + const session = await this.getSessionData(param) + return this.getSignerByKey(session.sessionPublicKey) + } + + async getAllSessionData( + param?: SessionSearchParam + ): Promise<SessionLeafNode[]> { + const sessions = this.getSessionStore().leafNodes + if (!param || !param.status) { + return sessions + } + return sessions.filter((s: SessionLeafNode) => s.status === param.status) + } + + async getMerkleRoot(): Promise<string> { + return this.getSessionStore().merkleRoot + } + + setMerkleRoot(merkleRoot: string): Promise<void> { + const data = this.getSessionStore() + data.merkleRoot = merkleRoot + memoryStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) + return Promise.resolve() + } +} diff --git a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts b/src/modules/session-validation-modules/ERC20SessionValidationModule.ts similarity index 54% rename from packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts rename to src/modules/session-validation-modules/ERC20SessionValidationModule.ts index 7791f1967..1e047cc6e 100644 --- a/packages/modules/src/session-validation-modules/ERC20SessionValidationModule.ts +++ b/src/modules/session-validation-modules/ERC20SessionValidationModule.ts @@ -1,6 +1,9 @@ -import { ISessionValidationModule } from "../interfaces/ISessionValidationModule.js"; -import { ERC20SessionKeyData, SessionValidationModuleConfig } from "../utils/Types.js"; -import { encodeAbiParameters, parseAbiParameters } from "viem"; +import { encodeAbiParameters, parseAbiParameters } from "viem" +import type { ISessionValidationModule } from "../interfaces/ISessionValidationModule.js" +import type { + ERC20SessionKeyData, + SessionValidationModuleConfig +} from "../utils/Types.js" /** * Session validation module for ERC20 token transfers. @@ -8,10 +11,12 @@ import { encodeAbiParameters, parseAbiParameters } from "viem"; * * @author Sachin Tomar <sachin.tomar@biconomy.io> */ -export class ERC20SessionValidationModule implements ISessionValidationModule<ERC20SessionKeyData> { - moduleAddress!: string; +export class ERC20SessionValidationModule + implements ISessionValidationModule<ERC20SessionKeyData> +{ + moduleAddress!: string - version = "V1_0_0"; + version = "V1_0_0" /** * This constructor is private. Use the static create method to instantiate ERC20SessionValidationModule @@ -20,9 +25,9 @@ export class ERC20SessionValidationModule implements ISessionValidationModule<ER */ private constructor(moduleConfig: SessionValidationModuleConfig) { if (!moduleConfig.moduleAddress) { - throw new Error("Module address is required"); + throw new Error("Module address is required") } - this.moduleAddress = moduleConfig.moduleAddress; + this.moduleAddress = moduleConfig.moduleAddress } /** @@ -30,41 +35,46 @@ export class ERC20SessionValidationModule implements ISessionValidationModule<ER * @param moduleConfig The configuration for the module * @returns A Promise that resolves to an instance of ERC20SessionValidationModule */ - public static async create(moduleConfig: SessionValidationModuleConfig): Promise<ERC20SessionValidationModule> { - const module = new ERC20SessionValidationModule(moduleConfig); - return module; + public static async create( + moduleConfig: SessionValidationModuleConfig + ): Promise<ERC20SessionValidationModule> { + const module = new ERC20SessionValidationModule(moduleConfig) + return module } async getSessionKeyData(sessionData: ERC20SessionKeyData): Promise<string> { - this._validateSessionKeyData(sessionData); - const sessionKeyData = encodeAbiParameters(parseAbiParameters("address, address, address, uint256"), [ - sessionData.sessionKey, - sessionData.token, - sessionData.recipient, - sessionData.maxAmount, - ]); - return sessionKeyData; + this._validateSessionKeyData(sessionData) + const sessionKeyData = encodeAbiParameters( + parseAbiParameters("address, address, address, uint256"), + [ + sessionData.sessionKey, + sessionData.token, + sessionData.recipient, + sessionData.maxAmount + ] + ) + return sessionKeyData } private _validateSessionKeyData(sessionData: ERC20SessionKeyData): void { if (!sessionData) { - throw new Error("Session data is required"); + throw new Error("Session data is required") } if (!sessionData.sessionKey) { - throw new Error("Session key is required in sessionData"); + throw new Error("Session key is required in sessionData") } if (!sessionData.token) { - throw new Error("Token address is required in sessionData"); + throw new Error("Token address is required in sessionData") } if (!sessionData.recipient) { - throw new Error("Recipient address is required in sessionData"); + throw new Error("Recipient address is required in sessionData") } if (!sessionData.maxAmount) { - throw new Error("MaxAmount is required in sessionData"); + throw new Error("MaxAmount is required in sessionData") } } getAddress(): string { - return this.moduleAddress; + return this.moduleAddress } } diff --git a/src/modules/utils/Constants.ts b/src/modules/utils/Constants.ts new file mode 100644 index 000000000..4c8c34192 --- /dev/null +++ b/src/modules/utils/Constants.ts @@ -0,0 +1,35 @@ +import type { ModuleVersion } from "./Types.js" + +export const DEFAULT_MODULE_VERSION: ModuleVersion = "V1_0_0" + +// Note: we could append these defaults with ADDRESS suffix +export const DEFAULT_ECDSA_OWNERSHIP_MODULE = + "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" + +export const ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION = { + V1_0_0: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" +} + +export const DEFAULT_SESSION_KEY_MANAGER_MODULE = + "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489" + +export const SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION = { + V1_0_0: "0x000000456b395c4e107e0302553B90D1eF4a32e9", + V1_0_1: "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489" +} + +export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = + "0x00000D09967410f8C76752A104c9848b57ebba55" + +export const BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION = { + V1_0_0: "0x00000D09967410f8C76752A104c9848b57ebba55" +} + +export const DEFAULT_ERC20_MODULE = "0x000000D50C68705bd6897B2d17c7de32FB519fDA" + +export const DEFAULT_MULTICHAIN_MODULE = + "0x000000824dc138db84FD9109fc154bdad332Aa8E" + +export const MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION = { + V1_0_0: "0x000000824dc138db84FD9109fc154bdad332Aa8E" +} diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts new file mode 100644 index 000000000..aa125e759 --- /dev/null +++ b/src/modules/utils/Helper.ts @@ -0,0 +1,105 @@ +import { + type Hex, + concat, + encodeAbiParameters, + keccak256, + pad, + parseAbiParameters, + toHex +} from "viem" +import type { UserOperationStruct } from "../../account" + +export interface Rule { + offset: number + condition: number + referenceValue: `0x${string}` +} + +export interface Permission { + destContract: `0x${string}` + functionSelector: `0x${string}` + valueLimit: bigint + rules: Rule[] +} + +function packUserOp( + op: Partial<UserOperationStruct>, + forSignature = true +): string { + if (!op.initCode || !op.callData || !op.paymasterAndData) + throw new Error("Missing userOp properties") + if (forSignature) { + return encodeAbiParameters( + parseAbiParameters( + "address, uint256, bytes32, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32" + ), + [ + op.sender as Hex, + BigInt(op.nonce as Hex), + keccak256(op.initCode as Hex), + keccak256(op.callData as Hex), + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + keccak256(op.paymasterAndData as Hex) + ] + ) + } + // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) + return encodeAbiParameters( + parseAbiParameters( + "address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes, bytes" + ), + [ + op.sender as Hex, + BigInt(op.nonce as Hex), + op.initCode as Hex, + op.callData as Hex, + BigInt(op.callGasLimit as Hex), + BigInt(op.verificationGasLimit as Hex), + BigInt(op.preVerificationGas as Hex), + BigInt(op.maxFeePerGas as Hex), + BigInt(op.maxPriorityFeePerGas as Hex), + op.paymasterAndData as Hex, + op.signature as Hex + ] + ) +} + +export const getUserOpHash = ( + userOp: Partial<UserOperationStruct>, + entryPointAddress: Hex, + chainId: number +): Hex => { + const userOpHash = keccak256(packUserOp(userOp, true) as Hex) + const enc = encodeAbiParameters( + parseAbiParameters("bytes32, address, uint256"), + [userOpHash, entryPointAddress, BigInt(chainId)] + ) + return keccak256(enc) +} + +export async function getABISVMSessionKeyData( + sessionKey: `0x${string}` | Uint8Array, + permission: Permission +): Promise<`0x${string}` | Uint8Array> { + let sessionKeyData = concat([ + sessionKey, + permission.destContract, + permission.functionSelector, + pad(toHex(permission.valueLimit), { size: 16 }), + pad(toHex(permission.rules.length), { size: 2 }) // this can't be more 2**11 (see below), so uint16 (2 bytes) is enough + ]) as `0x${string}` + + for (let i = 0; i < permission.rules.length; i++) { + sessionKeyData = concat([ + sessionKeyData, + pad(toHex(permission.rules[i].offset), { size: 2 }), // offset is uint16, so there can't be more than 2**16/32 args = 2**11 + pad(toHex(permission.rules[i].condition), { size: 1 }), // uint8 + permission.rules[i].referenceValue + ]) + } + return sessionKeyData +} diff --git a/packages/modules/src/utils/Types.ts b/src/modules/utils/Types.ts similarity index 58% rename from packages/modules/src/utils/Types.ts rename to src/modules/utils/Types.ts index 68adf5194..26c0badcf 100644 --- a/packages/modules/src/utils/Types.ts +++ b/src/modules/utils/Types.ts @@ -1,160 +1,177 @@ -import { Chain, Hex } from "viem"; -import { SmartAccountSigner, UserOperationStruct } from "@alchemy/aa-core"; -import { SessionKeyManagerModule } from "../SessionKeyManagerModule.js"; -import { ISessionStorage } from "../interfaces/ISessionStorage.js"; -import { SupportedSigner } from "@biconomy/common"; -export type ModuleVersion = "V1_0_0"; // | 'V1_0_1' +import type { Chain, Hex } from "viem" +import type { + SimulationType, + SmartAccountSigner, + SupportedSigner, + UserOperationStruct +} from "../../account" +import type { SessionKeyManagerModule } from "../SessionKeyManagerModule.js" +import type { ISessionStorage } from "../interfaces/ISessionStorage.js" +export type ModuleVersion = "V1_0_0" // | 'V1_0_1' export interface BaseValidationModuleConfig { /** entryPointAddress: address of the entry point */ - entryPointAddress?: Hex; + entryPointAddress?: Hex } -export interface ECDSAOwnershipValidationModuleConfig extends BaseValidationModuleConfig { +export interface ECDSAOwnershipValidationModuleConfig + extends BaseValidationModuleConfig { /** Address of the module */ - moduleAddress?: Hex; + moduleAddress?: Hex /** Version of the module */ - version?: ModuleVersion; + version?: ModuleVersion /** Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - signer: SupportedSigner; + signer: SupportedSigner } -export interface ECDSAOwnershipValidationModuleConfigConstructorProps extends BaseValidationModuleConfig { +export interface ECDSAOwnershipValidationModuleConfigConstructorProps + extends BaseValidationModuleConfig { /** Address of the module */ - moduleAddress?: Hex; + moduleAddress?: Hex /** Version of the module */ - version?: ModuleVersion; + version?: ModuleVersion /** Signer: Converted from viemWallet or ethers signer to SmartAccountSigner */ - signer: SmartAccountSigner; + signer: SmartAccountSigner } -export interface SessionKeyManagerModuleConfig extends BaseValidationModuleConfig { +export interface SessionKeyManagerModuleConfig + extends BaseValidationModuleConfig { /** Address of the module */ - moduleAddress?: Hex; + moduleAddress?: Hex /** Version of the module */ - version?: ModuleVersion; + version?: ModuleVersion /** SmartAccount address */ - smartAccountAddress: string; - storageType?: StorageType; - sessionStorageClient?: ISessionStorage; + smartAccountAddress: string + storageType?: StorageType + sessionStorageClient?: ISessionStorage } -export interface BatchedSessionRouterModuleConfig extends BaseValidationModuleConfig { +export interface BatchedSessionRouterModuleConfig + extends BaseValidationModuleConfig { /** Address of the module */ - moduleAddress?: Hex; + moduleAddress?: Hex /** Version of the module */ - version?: ModuleVersion; + version?: ModuleVersion /** Session Key Manager module: Could be BaseValidationModule */ - sessionKeyManagerModule?: SessionKeyManagerModule; + sessionKeyManagerModule?: SessionKeyManagerModule /** Session Key Manager module address */ - sessionManagerModuleAddress?: Hex; + sessionManagerModuleAddress?: Hex /** Address of the associated smart account */ - smartAccountAddress: string; + smartAccountAddress: string /** Storage type, e.g. local storage */ - storageType?: StorageType; + storageType?: StorageType } export enum StorageType { - LOCAL_STORAGE, + LOCAL_STORAGE = 0 } +export type SessionDataTuple = [ + bigint | number, + bigint | number, + Hex, + Hex, + string[], + string +] + export type SessionParams = { /** Redundant now as we've favoured uuid() */ - sessionID?: string; + sessionID?: string /** Session Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - sessionSigner: SupportedSigner; + sessionSigner: SupportedSigner /** The session validation module is a sub-module smart-contract which works with session key manager validation module. It validates the userop calldata against the defined session permissions (session key data) within the contract. */ - sessionValidationModule?: Hex; + sessionValidationModule?: Hex /** Additional info if needed to be appended in signature */ - additionalSessionData?: string; -}; + additionalSessionData?: string +} export type ModuleInfo = { // Could be a full object of below params and that way it can be an array too! // sessionParams?: SessionParams[] // where SessionParams is below four - sessionID?: string; + sessionID?: string /** Session Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - sessionSigner?: SupportedSigner; + sessionSigner?: SupportedSigner /** The session validation module is a sub-module smart-contract which works with session key manager validation module. It validates the userop calldata against the defined session permissions (session key data) within the contract. */ - sessionValidationModule?: Hex; + sessionValidationModule?: Hex /** Additional info if needed to be appended in signature */ - additionalSessionData?: string; - batchSessionParams?: SessionParams[]; -}; + additionalSessionData?: string + batchSessionParams?: SessionParams[] +} export interface SendUserOpParams extends ModuleInfo { /** "validation_and_execution" is recommended during development for improved debugging & devEx, but will add some additional latency to calls. "validation" can be used in production ro remove this latency once flows have been tested. */ - simulationType?: SimulationType; + simulationType?: SimulationType } -export type SimulationType = "validation" | "validation_and_execution"; - export type SignerData = { /** Public key */ - pbKey: string; + pbKey: string /** Private key */ - pvKey: `0x${string}`; + pvKey: `0x${string}` /** Network Id */ - chainId?: Chain; -}; + chainId?: Chain +} export type CreateSessionDataResponse = { - data: string; - sessionIDInfo: Array<string>; -}; + data: string + sessionIDInfo: Array<string> +} export interface CreateSessionDataParams { /** window end for the session key */ - validUntil: number; + validUntil: number /** window start for the session key */ - validAfter: number; - sessionValidationModule: Hex; - sessionPublicKey: Hex; - sessionKeyData: Hex; + validAfter: number + sessionValidationModule: Hex + sessionPublicKey: Hex + sessionKeyData: Hex /** we generate uuid based sessionId. but if you prefer to track it on your side and attach custom session identifier this can be passed */ - preferredSessionId?: string; + preferredSessionId?: string } -export interface MultiChainValidationModuleConfig extends BaseValidationModuleConfig { +export interface MultiChainValidationModuleConfig + extends BaseValidationModuleConfig { /** Address of the module */ - moduleAddress?: Hex; + moduleAddress?: Hex /** Version of the module */ - version?: ModuleVersion; + version?: ModuleVersion /** Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - signer: SupportedSigner; + signer: SupportedSigner } -export interface MultiChainValidationModuleConfigConstructorProps extends BaseValidationModuleConfig { +export interface MultiChainValidationModuleConfigConstructorProps + extends BaseValidationModuleConfig { /** Address of the module */ - moduleAddress?: Hex; + moduleAddress?: Hex /** Version of the module */ - version?: ModuleVersion; + version?: ModuleVersion /** Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - signer: SmartAccountSigner; + signer: SmartAccountSigner } export type MultiChainUserOpDto = { /** window end timestamp */ - validUntil?: number; + validUntil?: number /** window start timestamp */ - validAfter?: number; - chainId: number; - userOp: Partial<UserOperationStruct>; -}; + validAfter?: number + chainId: number + userOp: Partial<UserOperationStruct> +} export interface BaseSessionKeyData { - sessionKey: Hex; + sessionKey: Hex } export interface ERC20SessionKeyData extends BaseSessionKeyData { /** ERC20 token address */ - token: Hex; + token: Hex /** Recipient address */ - recipient: Hex; + recipient: Hex /** ERC20 amount (Bigint) */ - maxAmount: bigint; + maxAmount: bigint } export interface SessionValidationModuleConfig { /** Address of the module */ - moduleAddress: string; + moduleAddress: string } diff --git a/packages/modules/src/utils/Uid.ts b/src/modules/utils/Uid.ts similarity index 62% rename from packages/modules/src/utils/Uid.ts rename to src/modules/utils/Uid.ts index 5cf4a6cca..58080849d 100644 --- a/packages/modules/src/utils/Uid.ts +++ b/src/modules/utils/Uid.ts @@ -1,12 +1,12 @@ // small uid generator, hex: 0-9, a-f (10 chars) export const generateRandomHex = (): string => { - const hexChars = "0123456789abcdef"; - let result = ""; + const hexChars = "0123456789abcdef" + let result = "" for (let i = 0; i < 10; i++) { - const randomIndex = Math.floor(Math.random() * hexChars.length); - result += hexChars[randomIndex]; + const randomIndex = Math.floor(Math.random() * hexChars.length) + result += hexChars[randomIndex] } - return result; -}; + return result +} diff --git a/packages/paymaster/src/BiconomyPaymaster.ts b/src/paymaster/BiconomyPaymaster.ts similarity index 55% rename from packages/paymaster/src/BiconomyPaymaster.ts rename to src/paymaster/BiconomyPaymaster.ts index aa0af3f86..36e3e55ad 100644 --- a/packages/paymaster/src/BiconomyPaymaster.ts +++ b/src/paymaster/BiconomyPaymaster.ts @@ -1,39 +1,46 @@ -import { encodeFunctionData, parseAbi } from "viem"; -import type { BigNumberish, UserOperationStruct } from "@alchemy/aa-core"; +import { encodeFunctionData, parseAbi } from "viem" import { - PaymasterFeeQuote, - PaymasterConfig, - FeeQuotesOrDataResponse, - FeeQuotesOrDataDto, - SponsorUserOperationDto, - JsonRpcResponse, - BiconomyTokenPaymasterRequest, + type BiconomyTokenPaymasterRequest, + type BigNumberish, + HttpMethod, + Logger, + type Transaction, + type UserOperationStruct, + sendRequest +} from "../account" +import type { IHybridPaymaster } from "./interfaces/IHybridPaymaster.js" +import { ADDRESS_ZERO, ERC20_ABI, MAX_UINT256 } from "./utils/Constants.js" +import { getTimestampInSeconds } from "./utils/Helpers.js" +import { + type FeeQuotesOrDataDto, + type FeeQuotesOrDataResponse, + type Hex, + type JsonRpcResponse, + type PaymasterAndDataResponse, + type PaymasterConfig, + type PaymasterFeeQuote, PaymasterMode, - PaymasterAndDataResponse, - Transaction, - Hex, -} from "./utils/Types.js"; -import { IHybridPaymaster } from "./interfaces/IHybridPaymaster.js"; -import { MAX_UINT256, ERC20_ABI, ADDRESS_ZERO } from "./utils/Constants.js"; -import { sendRequest, HttpMethod, Logger } from "@biconomy/common"; -import { getTimestampInSeconds } from "./utils/Helpers.js"; + type SponsorUserOperationDto +} from "./utils/Types.js" const defaultPaymasterConfig: PaymasterConfig = { paymasterUrl: "", - strictMode: false, // Set your desired default value for strictMode here -}; + strictMode: false // Set your desired default value for strictMode here +} /** * @dev Hybrid - Generic Gas Abstraction paymaster */ -export class BiconomyPaymaster implements IHybridPaymaster<SponsorUserOperationDto> { - paymasterConfig: PaymasterConfig; +export class BiconomyPaymaster + implements IHybridPaymaster<SponsorUserOperationDto> +{ + paymasterConfig: PaymasterConfig constructor(config: PaymasterConfig) { const mergedConfig: PaymasterConfig = { ...defaultPaymasterConfig, - ...config, - }; - this.paymasterConfig = mergedConfig; + ...config + } + this.paymasterConfig = mergedConfig } /** @@ -41,27 +48,41 @@ export class BiconomyPaymaster implements IHybridPaymaster<SponsorUserOperationD * @param userOp The partial user operation. * @returns A Promise that resolves to the prepared partial user operation. */ - private async prepareUserOperation(userOp: Partial<UserOperationStruct>): Promise<Partial<UserOperationStruct>> { - const userOperation = { ...userOp }; + private async prepareUserOperation( + userOp: Partial<UserOperationStruct> + ): Promise<Partial<UserOperationStruct>> { + const userOperation = { ...userOp } try { - const keys1: (keyof UserOperationStruct)[] = ["nonce", "maxFeePerGas", "maxPriorityFeePerGas"]; + const keys1: (keyof UserOperationStruct)[] = [ + "nonce", + "maxFeePerGas", + "maxPriorityFeePerGas" + ] for (const key of keys1) { if (userOperation[key] && userOperation[key] !== "0x") { - userOperation[key] = ("0x" + BigInt(userOp[key] as BigNumberish).toString(16)) as `0x${string}`; + userOperation[key] = `0x${BigInt( + userOp[key] as BigNumberish + ).toString(16)}` as `0x${string}` } } - const keys2: (keyof UserOperationStruct)[] = ["callGasLimit", "verificationGasLimit", "preVerificationGas"]; + const keys2: (keyof UserOperationStruct)[] = [ + "callGasLimit", + "verificationGasLimit", + "preVerificationGas" + ] for (const key of keys2) { if (userOperation[key] && userOperation[key] !== "0x") { - userOperation[key] = BigInt(userOp[key] as BigNumberish).toString() as `0x${string}`; + userOperation[key] = BigInt( + userOp[key] as BigNumberish + ).toString() as `0x${string}` } } } catch (error) { - throw `Failed to transform user operation: ${error}`; + throw `Failed to transform user operation: ${error}` } - userOperation.signature = userOp.signature || "0x"; - userOperation.paymasterAndData = userOp.paymasterAndData || "0x"; - return userOperation; + userOperation.signature = userOp.signature || "0x" + userOperation.paymasterAndData = userOp.paymasterAndData || "0x" + return userOperation } /** @@ -70,10 +91,12 @@ export class BiconomyPaymaster implements IHybridPaymaster<SponsorUserOperationD * @param provider Optional provider object. * @returns A Promise that resolves to the built transaction object. */ - async buildTokenApprovalTransaction(tokenPaymasterRequest: BiconomyTokenPaymasterRequest): Promise<Transaction> { - const feeTokenAddress: string = tokenPaymasterRequest.feeQuote.tokenAddress; + async buildTokenApprovalTransaction( + tokenPaymasterRequest: BiconomyTokenPaymasterRequest + ): Promise<Transaction> { + const feeTokenAddress: string = tokenPaymasterRequest.feeQuote.tokenAddress - const spender = tokenPaymasterRequest.spender; + const spender = tokenPaymasterRequest.spender // logging provider object isProvider // Logger.log("provider object passed - is provider", provider?._isProvider); @@ -82,21 +105,29 @@ export class BiconomyPaymaster implements IHybridPaymaster<SponsorUserOperationD // Note: should also check in caller if the approval is already given, if yes return object with address or data 0 // Note: we would need userOp here to get the account/owner info to check allowance - let requiredApproval = BigInt(0); + let requiredApproval = BigInt(0) - if (tokenPaymasterRequest.maxApproval && tokenPaymasterRequest.maxApproval == true) { - requiredApproval = BigInt(MAX_UINT256); + if ( + tokenPaymasterRequest.maxApproval && + tokenPaymasterRequest.maxApproval === true + ) { + requiredApproval = BigInt(MAX_UINT256) } else { - requiredApproval = BigInt(Math.ceil(tokenPaymasterRequest.feeQuote.maxGasFee * Math.pow(10, tokenPaymasterRequest.feeQuote.decimal))); + requiredApproval = BigInt( + Math.ceil( + tokenPaymasterRequest.feeQuote.maxGasFee * + 10 ** tokenPaymasterRequest.feeQuote.decimal + ) + ) } try { - const parsedAbi = parseAbi(ERC20_ABI); + const parsedAbi = parseAbi(ERC20_ABI) const data = encodeFunctionData({ abi: parsedAbi, functionName: "approve", - args: [spender, requiredApproval], - }); + args: [spender, requiredApproval] + }) // TODO? // Note: For some tokens we may need to set allowance to 0 first so that would return batch of transactions and changes the return type to Transaction[] @@ -114,10 +145,10 @@ export class BiconomyPaymaster implements IHybridPaymaster<SponsorUserOperationD return { to: feeTokenAddress, value: "0x00", - data: data, - }; + data: data + } } catch (error) { - throw new Error("Failed to encode function data"); + throw new Error("Failed to encode function data") } } @@ -128,39 +159,46 @@ export class BiconomyPaymaster implements IHybridPaymaster<SponsorUserOperationD * @returns A Promise that resolves to the fee quotes or data response. */ async getPaymasterFeeQuotesOrData( - userOp: Partial<UserOperationStruct>, - paymasterServiceData: FeeQuotesOrDataDto, + _userOp: Partial<UserOperationStruct>, + paymasterServiceData: FeeQuotesOrDataDto ): Promise<FeeQuotesOrDataResponse> { - userOp = await this.prepareUserOperation(userOp); + const userOp = await this.prepareUserOperation(_userOp) - let mode = null; - let expiryDuration = null; - const calculateGasLimits = paymasterServiceData.calculateGasLimits ?? true; - let preferredToken = null; - let feeTokensArray: string[] = []; + let mode: PaymasterMode | null = null + let expiryDuration: number | null = null + const calculateGasLimits = paymasterServiceData.calculateGasLimits ?? true + let preferredToken: string | null = null + let feeTokensArray: string[] = [] // could make below null let smartAccountInfo = { name: "BICONOMY", - version: "2.0.0", - }; - let webhookData = null; + version: "2.0.0" + } + let webhookData: Record<string, any> | null = null if (paymasterServiceData.mode) { - mode = paymasterServiceData.mode; + mode = paymasterServiceData.mode // Validation on the mode passed / define allowed enums } if (paymasterServiceData.expiryDuration) { - expiryDuration = paymasterServiceData.expiryDuration; + expiryDuration = paymasterServiceData.expiryDuration } - preferredToken = paymasterServiceData?.preferredToken ? paymasterServiceData?.preferredToken : preferredToken; + preferredToken = paymasterServiceData?.preferredToken + ? paymasterServiceData?.preferredToken + : preferredToken - feeTokensArray = (paymasterServiceData?.tokenList?.length !== 0 ? paymasterServiceData?.tokenList : feeTokensArray) as string[]; + feeTokensArray = ( + paymasterServiceData?.tokenList?.length !== 0 + ? paymasterServiceData?.tokenList + : feeTokensArray + ) as string[] - webhookData = paymasterServiceData?.webhookData ?? webhookData; + webhookData = paymasterServiceData?.webhookData ?? webhookData - smartAccountInfo = paymasterServiceData?.smartAccountInfo ?? smartAccountInfo; + smartAccountInfo = + paymasterServiceData?.smartAccountInfo ?? smartAccountInfo try { const response: JsonRpcResponse = await sendRequest( @@ -177,67 +215,78 @@ export class BiconomyPaymaster implements IHybridPaymaster<SponsorUserOperationD ...(expiryDuration !== null && { expiryDuration }), tokenInfo: { tokenList: feeTokensArray, - ...(preferredToken !== null && { preferredToken }), + ...(preferredToken !== null && { preferredToken }) }, sponsorshipInfo: { ...(webhookData !== null && { webhookData }), - smartAccountInfo: smartAccountInfo, - }, - }, + smartAccountInfo: smartAccountInfo + } + } ], // As per current API id: getTimestampInSeconds(), - jsonrpc: "2.0", - }, + jsonrpc: "2.0" + } }, - "Paymaster", - ); - - if (response && response.result) { - if (response.result.mode == PaymasterMode.ERC20) { - const feeQuotesResponse: Array<PaymasterFeeQuote> = response.result.feeQuotes; - const paymasterAddress: Hex = response.result.paymasterAddress; + "Paymaster" + ) + + if (response?.result) { + if (response.result.mode === PaymasterMode.ERC20) { + const feeQuotesResponse: Array<PaymasterFeeQuote> = + response.result.feeQuotes + const paymasterAddress: Hex = response.result.paymasterAddress // check all objects iterate and populate below calculation for all tokens - return { feeQuotes: feeQuotesResponse, tokenPaymasterAddress: paymasterAddress }; - } else if (response.result.mode == PaymasterMode.SPONSORED) { - const paymasterAndData: Hex = response.result.paymasterAndData; - const preVerificationGas = response.result.preVerificationGas; - const verificationGasLimit = response.result.verificationGasLimit; - const callGasLimit = response.result.callGasLimit; + return { + feeQuotes: feeQuotesResponse, + tokenPaymasterAddress: paymasterAddress + } + } + if (response.result.mode === PaymasterMode.SPONSORED) { + const paymasterAndData: Hex = response.result.paymasterAndData + const preVerificationGas = response.result.preVerificationGas + const verificationGasLimit = response.result.verificationGasLimit + const callGasLimit = response.result.callGasLimit return { paymasterAndData: paymasterAndData, preVerificationGas: preVerificationGas, verificationGasLimit: verificationGasLimit, - callGasLimit: callGasLimit, - }; - } else { - const errorObject = { - code: 417, - message: "Expectation Failed: Invalid mode in Paymaster service response", - }; - throw errorObject; + callGasLimit: callGasLimit + } } + const errorObject = { + code: 417, + message: + "Expectation Failed: Invalid mode in Paymaster service response" + } + throw errorObject } } catch (error: any) { - Logger.error("Failed to fetch Fee Quotes or Paymaster data - reason: ", JSON.stringify(error)); + Logger.error( + "Failed to fetch Fee Quotes or Paymaster data - reason: ", + JSON.stringify(error) + ) // Note: we may not throw if we include strictMode off and return paymasterData '0x'. if ( !this.paymasterConfig.strictMode && - paymasterServiceData.mode == PaymasterMode.SPONSORED && - (error?.message.includes("Smart contract data not found") || error?.message.includes("No policies were set")) + paymasterServiceData.mode === PaymasterMode.SPONSORED && + (error?.message.includes("Smart contract data not found") || + error?.message.includes("No policies were set")) // can also check based on error.code being -32xxx ) { - Logger.warn(`Strict mode is ${this.paymasterConfig.strictMode}. sending paymasterAndData 0x`); + Logger.warn( + `Strict mode is ${this.paymasterConfig.strictMode}. sending paymasterAndData 0x` + ) return { paymasterAndData: "0x", // send below values same as userOp gasLimits preVerificationGas: userOp.preVerificationGas, verificationGasLimit: userOp.verificationGasLimit, - callGasLimit: userOp.callGasLimit, - }; + callGasLimit: userOp.callGasLimit + } } - throw error; + throw error } - throw new Error("Failed to fetch feeQuote or paymaster data"); + throw new Error("Failed to fetch feeQuote or paymaster data") } /** @@ -247,40 +296,44 @@ export class BiconomyPaymaster implements IHybridPaymaster<SponsorUserOperationD * @returns A Promise that resolves to the paymaster and data string. */ async getPaymasterAndData( - userOp: Partial<UserOperationStruct>, - paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying + _userOp: Partial<UserOperationStruct>, + paymasterServiceData?: SponsorUserOperationDto // mode is necessary. partial context of token paymaster or verifying ): Promise<PaymasterAndDataResponse> { - userOp = await this.prepareUserOperation(userOp); + const userOp = await this.prepareUserOperation(_userOp) if (paymasterServiceData?.mode === undefined) { - throw new Error("mode is required in paymasterServiceData"); + throw new Error("mode is required in paymasterServiceData") } - const mode = paymasterServiceData.mode; + const mode = paymasterServiceData.mode - const calculateGasLimits = paymasterServiceData.calculateGasLimits ?? true; + const calculateGasLimits = paymasterServiceData.calculateGasLimits ?? true - let tokenInfo = null; - let expiryDuration = null; + let tokenInfo: Record<string, string | undefined> | null = null // could make below null let smartAccountInfo = { name: "BICONOMY", - version: "2.0.0", - }; - let webhookData = null; + version: "2.0.0" + } + let webhookData: Record<string, any> | null = null + let expiryDuration: number | null = null if (mode === PaymasterMode.ERC20) { - if (!paymasterServiceData?.feeTokenAddress && paymasterServiceData?.feeTokenAddress === ADDRESS_ZERO) { - throw new Error("feeTokenAddress is required and should be non-zero"); + if ( + !paymasterServiceData?.feeTokenAddress && + paymasterServiceData?.feeTokenAddress === ADDRESS_ZERO + ) { + throw new Error("feeTokenAddress is required and should be non-zero") } tokenInfo = { - feeTokenAddress: paymasterServiceData.feeTokenAddress, - }; + feeTokenAddress: paymasterServiceData.feeTokenAddress + } } - webhookData = paymasterServiceData?.webhookData ?? webhookData; - smartAccountInfo = paymasterServiceData?.smartAccountInfo ?? smartAccountInfo; - expiryDuration = paymasterServiceData?.expiryDuration ?? expiryDuration; + webhookData = paymasterServiceData?.webhookData ?? webhookData + smartAccountInfo = + paymasterServiceData?.smartAccountInfo ?? smartAccountInfo + expiryDuration = paymasterServiceData?.expiryDuration ?? expiryDuration // Note: The idea is before calling this below rpc, userOp values presense and types should be in accordance with how we call eth_estimateUseropGas on the bundler @@ -300,34 +353,38 @@ export class BiconomyPaymaster implements IHybridPaymaster<SponsorUserOperationD ...(tokenInfo !== null && { tokenInfo }), sponsorshipInfo: { ...(webhookData !== null && { webhookData }), - smartAccountInfo: smartAccountInfo, - }, - }, + smartAccountInfo: smartAccountInfo + } + } ], id: getTimestampInSeconds(), - jsonrpc: "2.0", - }, + jsonrpc: "2.0" + } }, - "Paymaster", - ); - - if (response && response.result) { - const paymasterAndData = response.result.paymasterAndData; - const preVerificationGas = response.result.preVerificationGas; - const verificationGasLimit = response.result.verificationGasLimit; - const callGasLimit = response.result.callGasLimit; + "Paymaster" + ) + + if (response?.result) { + const paymasterAndData = response.result.paymasterAndData + const preVerificationGas = response.result.preVerificationGas + const verificationGasLimit = response.result.verificationGasLimit + const callGasLimit = response.result.callGasLimit return { paymasterAndData: paymasterAndData, preVerificationGas: preVerificationGas, verificationGasLimit: verificationGasLimit, - callGasLimit: callGasLimit, - }; + callGasLimit: callGasLimit + } } + // biome-ignore lint/suspicious/noExplicitAny: caught error is any } catch (error: any) { - Logger.error("Error in generating paymasterAndData - reason: ", JSON.stringify(error)); - throw error; + Logger.error( + "Error in generating paymasterAndData - reason: ", + JSON.stringify(error) + ) + throw error } - throw new Error("Error in generating paymasterAndData"); + throw new Error("Error in generating paymasterAndData") } /** @@ -338,12 +395,14 @@ export class BiconomyPaymaster implements IHybridPaymaster<SponsorUserOperationD */ async getDummyPaymasterAndData( _userOp: Partial<UserOperationStruct>, - _paymasterServiceData?: SponsorUserOperationDto, // mode is necessary. partial context of token paymaster or verifying + _paymasterServiceData?: SponsorUserOperationDto // mode is necessary. partial context of token paymaster or verifying ): Promise<string> { - return "0x"; + return "0x" } - public static async create(config: PaymasterConfig): Promise<BiconomyPaymaster> { - return new BiconomyPaymaster(config); + public static async create( + config: PaymasterConfig + ): Promise<BiconomyPaymaster> { + return new BiconomyPaymaster(config) } } diff --git a/src/paymaster/index.ts b/src/paymaster/index.ts new file mode 100644 index 000000000..2cebd53f5 --- /dev/null +++ b/src/paymaster/index.ts @@ -0,0 +1,8 @@ +import { BiconomyPaymaster } from "./BiconomyPaymaster.js" +export * from "./interfaces/IPaymaster.js" +export * from "./interfaces/IHybridPaymaster.js" +export * from "./utils/Types.js" +export * from "./BiconomyPaymaster.js" + +export const Paymaster = BiconomyPaymaster +export const createPaymaster = Paymaster.create diff --git a/src/paymaster/interfaces/IHybridPaymaster.ts b/src/paymaster/interfaces/IHybridPaymaster.ts new file mode 100644 index 000000000..104029e0a --- /dev/null +++ b/src/paymaster/interfaces/IHybridPaymaster.ts @@ -0,0 +1,29 @@ +import type { UserOperationStruct } from "../../account" +import type { + BiconomyTokenPaymasterRequest, + Transaction +} from "../../account/utils/Types.js" +import type { + FeeQuotesOrDataDto, + FeeQuotesOrDataResponse, + PaymasterAndDataResponse +} from "../utils/Types.js" +import type { IPaymaster } from "./IPaymaster.js" + +export interface IHybridPaymaster<T> extends IPaymaster { + getPaymasterAndData( + _userOp: Partial<UserOperationStruct>, + _paymasterServiceData?: T + ): Promise<PaymasterAndDataResponse> + getDummyPaymasterAndData( + _userOp: Partial<UserOperationStruct>, + _paymasterServiceData?: T + ): Promise<string> + buildTokenApprovalTransaction( + _tokenPaymasterRequest: BiconomyTokenPaymasterRequest + ): Promise<Transaction> + getPaymasterFeeQuotesOrData( + _userOp: Partial<UserOperationStruct>, + _paymasterServiceData: FeeQuotesOrDataDto + ): Promise<FeeQuotesOrDataResponse> +} diff --git a/src/paymaster/interfaces/IPaymaster.ts b/src/paymaster/interfaces/IPaymaster.ts new file mode 100644 index 000000000..3aee820b2 --- /dev/null +++ b/src/paymaster/interfaces/IPaymaster.ts @@ -0,0 +1,12 @@ +import type { UserOperationStruct } from "../../account" +import type { PaymasterAndDataResponse } from "../utils/Types.js" + +export interface IPaymaster { + // Implementing class may add extra parameter (for example paymasterServiceData with it's own type) in below function signature + getPaymasterAndData( + _userOp: Partial<UserOperationStruct> + ): Promise<PaymasterAndDataResponse> + getDummyPaymasterAndData( + _userOp: Partial<UserOperationStruct> + ): Promise<string> +} diff --git a/packages/paymaster/src/utils/Constants.ts b/src/paymaster/utils/Constants.ts similarity index 83% rename from packages/paymaster/src/utils/Constants.ts rename to src/paymaster/utils/Constants.ts index 9a534ee8f..cdf1e4837 100644 --- a/packages/paymaster/src/utils/Constants.ts +++ b/src/paymaster/utils/Constants.ts @@ -1,6 +1,7 @@ -export const MAX_UINT256 = "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; -export const ENTRYPOINT_ADDRESS = "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"; -export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000"; +export const MAX_UINT256 = + "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" +export const ENTRYPOINT_ADDRESS = "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" +export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000" // export const ERC20_PAYMASTER_ADDRESS = '0xE9f6Ffc87cac92bc94f704AE017e85cB83DBe4EC' // likely to be same address on all chains export const ERC20_ABI = [ @@ -8,5 +9,5 @@ export const ERC20_ABI = [ "function transferFrom(address from, address to, uint256 value) external returns (bool)", "function approve(address spender, uint256 value) external returns (bool)", "function allowance(address owner, address spender) external view returns (uint256)", - "function balanceOf(address owner) external view returns (uint256)", -]; + "function balanceOf(address owner) external view returns (uint256)" +] diff --git a/packages/paymaster/src/utils/Helpers.ts b/src/paymaster/utils/Helpers.ts similarity index 77% rename from packages/paymaster/src/utils/Helpers.ts rename to src/paymaster/utils/Helpers.ts index b6f5568d2..d9aeceea9 100644 --- a/packages/paymaster/src/utils/Helpers.ts +++ b/src/paymaster/utils/Helpers.ts @@ -3,5 +3,5 @@ * @returns Number */ export const getTimestampInSeconds = (): number => { - return Math.floor(Date.now() / 1000); -}; + return Math.floor(Date.now() / 1000) +} diff --git a/src/paymaster/utils/Types.ts b/src/paymaster/utils/Types.ts new file mode 100644 index 000000000..6115a94bb --- /dev/null +++ b/src/paymaster/utils/Types.ts @@ -0,0 +1,125 @@ +export type Hex = `0x${string}` +import type { BigNumberish } from "../../account" +import type { JsonRpcError } from "../../bundler/utils/Types" + +export type PaymasterServiceErrorResponse = { + jsonrpc: string + id: number + error: JsonRpcError +} + +export type JsonRpcResponse = { + jsonrpc: string + id: number + result?: any + error?: JsonRpcError +} + +export type PaymasterConfig = { + paymasterUrl: string + strictMode?: boolean +} + +export type SponsorUserOperationDto = { + /** mode: sponsored or erc20 */ + mode: PaymasterMode + /** Always recommended, especially when using token paymaster */ + calculateGasLimits?: boolean + /** Expiry duration in seconds */ + expiryDuration?: number + /** Webhooks to be fired after user op is sent */ + webhookData?: Record<string, any> + /** Smart account meta data */ + smartAccountInfo?: SmartAccountData + /** the fee-paying token address */ + feeTokenAddress?: string +} + +export type FeeQuotesOrDataDto = { + /** mode: sponsored or erc20 */ + mode?: PaymasterMode + /** Expiry duration in seconds */ + expiryDuration?: number + /** Always recommended, especially when using token paymaster */ + calculateGasLimits?: boolean + /** List of tokens to be used for fee quotes, if ommitted fees for all supported will be returned */ + tokenList?: string[] + /** preferredToken: Can be ommitted to return all quotes */ + preferredToken?: string + /** Webhooks to be fired after user op is sent */ + webhookData?: Record<string, any> + /** Smart account meta data */ + smartAccountInfo?: SmartAccountData +} + +export type FeeQuoteParams = { + tokenList?: string[] + preferredToken?: string +} + +export type FeeTokenInfo = { + feeTokenAddress: string +} + +export type SponsorpshipInfo = { + /** Webhooks to be fired after user op is sent */ + webhookData?: Record<string, any> + /** Smart account meta data */ + smartAccountInfo: SmartAccountData +} + +export type SmartAccountData = { + /** name: Name of the smart account */ + name: string + /** version: Version of the smart account */ + version: string +} + +export type PaymasterFeeQuote = { + /** symbol: Token symbol */ + symbol: string + /** tokenAddress: Token address */ + tokenAddress: string + /** decimal: Token decimal */ + decimal: number + logoUrl?: string + /** maxGasFee: in wei */ + maxGasFee: number + /** maxGasFee: in dollars */ + maxGasFeeUSD?: number + usdPayment?: number + /** The premium paid on the token */ + premiumPercentage: number + /** validUntil: Unix timestamp */ + validUntil?: number +} + +export type FeeQuotesOrDataResponse = { + /** Array of results from the paymaster */ + feeQuotes?: PaymasterFeeQuote[] + /** Normally set to the spender in the proceeding call to send the tx */ + tokenPaymasterAddress?: Hex + /** Relevant Data returned from the paymaster */ + paymasterAndData?: Uint8Array | Hex + /* Gas overhead of this UserOperation */ + preVerificationGas?: BigNumberish + /* Actual gas used by the validation of this UserOperation */ + verificationGasLimit?: BigNumberish + /* Value used by inner account execution */ + callGasLimit?: BigNumberish +} + +export type PaymasterAndDataResponse = { + paymasterAndData: Hex + /* Gas overhead of this UserOperation */ + preVerificationGas: number + /* Actual gas used by the validation of this UserOperation */ + verificationGasLimit: number + /* Value used by inner account execution */ + callGasLimit: number +} + +export enum PaymasterMode { + ERC20 = "ERC20", + SPONSORED = "SPONSORED" +} diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts new file mode 100644 index 000000000..9d9f9847f --- /dev/null +++ b/tests/account/read.test.ts @@ -0,0 +1,705 @@ +import { JsonRpcProvider } from "@ethersproject/providers" +import { Wallet } from "@ethersproject/wallet" +import { + http, + type Hex, + createPublicClient, + createWalletClient, + encodeAbiParameters, + hashMessage, + parseAbiParameters +} from "viem" +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" +import { bsc } from "viem/chains" +import { beforeAll, describe, expect, test } from "vitest" +import { + type BiconomySmartAccountV2, + type BiconomySmartAccountV2Config, + DEFAULT_ENTRYPOINT_ADDRESS, + ERROR_MESSAGES, + NATIVE_TOKEN_ALIAS, + compareChainIds, + createSmartAccountClient +} from "../../src/account" +import { type UserOperationStruct, getChain } from "../../src/account" +import { BiconomyAccountAbi } from "../../src/account/abi/SmartAccount" +import { + DEFAULT_ECDSA_OWNERSHIP_MODULE, + DEFAULT_SESSION_KEY_MANAGER_MODULE, + createECDSAOwnershipValidationModule +} from "../../src/modules" +import { Paymaster } from "../../src/paymaster" +import { checkBalance, getBundlerUrl, getConfig } from "../utils" + +describe("Account: Read", () => { + const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const { + chain, + chainId, + privateKey, + privateKeyTwo, + bundlerUrl, + paymasterUrl + } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + const sender = account.address + const recipient = accountTwo.address + const publicClient = createPublicClient({ + chain, + transport: http() + }) + let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] + let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] + + const [walletClient, walletClientTwo] = [ + createWalletClient({ + account, + chain, + transport: http() + }), + createWalletClient({ + account: accountTwo, + chain, + transport: http() + }) + ] + + beforeAll(async () => { + ;[smartAccount, smartAccountTwo] = await Promise.all( + [walletClient, walletClientTwo].map((client) => + createSmartAccountClient({ + chainId, + signer: client, + bundlerUrl, + paymasterUrl + }) + ) + ) + ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( + [smartAccount, smartAccountTwo].map((account) => + account.getAccountAddress() + ) + ) + }) + + test.concurrent( + "should accept PrivateKeyAccount as signer and sign a message", + async () => { + const account = privateKeyToAccount(`0x${privateKey}`) + + const smartAccount = await createSmartAccountClient({ + signer: account, + bundlerUrl, + rpcUrl: chain.rpcUrls.default.http[0] + }) + + const message = "hello world" + const signature = await smartAccount.signMessage(message) + expect(signature).toBeTruthy() + }, + 50000 + ) + + test.concurrent( + "should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", + async () => { + const account = privateKeyToAccount(`0x${privateKey}`) + + const createSmartAccount = createSmartAccountClient({ + signer: account, + bundlerUrl + }) + + await expect(createSmartAccount).rejects.toThrow( + ERROR_MESSAGES.MISSING_RPC_URL + ) + }, + 50000 + ) + + test.concurrent( + "should get all modules", + async () => { + const modules = await smartAccount.getAllModules() + expect(modules).toContain(DEFAULT_SESSION_KEY_MANAGER_MODULE) // session manager module + expect(modules).toContain(DEFAULT_ECDSA_OWNERSHIP_MODULE) // ecdsa ownership module + }, + 30000 + ) + + test.concurrent( + "should check if module is enabled on the smart account", + async () => { + const isEnabled = await smartAccount.isModuleEnabled( + DEFAULT_ECDSA_OWNERSHIP_MODULE + ) + expect(isEnabled).toBeTruthy() + }, + 30000 + ) + + test.concurrent( + "should get disabled module data", + async () => { + const disableModuleData = await smartAccount.getDisableModuleData( + DEFAULT_ECDSA_OWNERSHIP_MODULE, + DEFAULT_ECDSA_OWNERSHIP_MODULE + ) + expect(disableModuleData).toBeTruthy() + }, + 30000 + ) + + test.concurrent( + "should get setup and enable module data", + async () => { + const module = await createECDSAOwnershipValidationModule({ + signer: walletClient + }) + const initData = await module.getInitData() + const setupAndEnableModuleData = + await smartAccount.getSetupAndEnableModuleData( + DEFAULT_ECDSA_OWNERSHIP_MODULE, + initData + ) + expect(setupAndEnableModuleData).toBeTruthy() + }, + 30000 + ) + + test.concurrent( + "should create a smartAccountClient from an ethers signer", + async () => { + const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) + const ethersSigner = new Wallet(privateKey, ethersProvider) + + const smartAccount = await createSmartAccountClient({ + signer: ethersSigner, + bundlerUrl, + rpcUrl: chain.rpcUrls.default.http[0] + }) + const address = await smartAccount.getAccountAddress() + expect(address).toBeTruthy() + } + ) + + test.concurrent( + "should pickup the rpcUrl from viem wallet and ethers", + async () => { + const newRpcUrl = "http://localhost:8545" + const defaultRpcUrl = chain.rpcUrls.default.http[0] //http://127.0.0.1:8545" + + const ethersProvider = new JsonRpcProvider(newRpcUrl) + const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider) + + const originalEthersProvider = new JsonRpcProvider( + chain.rpcUrls.default.http[0] + ) + const ethersSigner = new Wallet(privateKey, originalEthersProvider) + + const accountOne = privateKeyToAccount(`0x${privateKey}`) + const walletClientWithNewRpcUrl = createWalletClient({ + account: accountOne, + chain, + transport: http(newRpcUrl) + }) + const [ + smartAccountFromEthersWithNewRpc, + smartAccountFromViemWithNewRpc, + smartAccountFromEthersWithOldRpc, + smartAccountFromViemWithOldRpc + ] = await Promise.all([ + createSmartAccountClient({ + chainId, + signer: ethersSignerWithNewRpcUrl, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: newRpcUrl + }), + createSmartAccountClient({ + chainId, + signer: walletClientWithNewRpcUrl, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: newRpcUrl + }), + createSmartAccountClient({ + chainId, + signer: ethersSigner, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: chain.rpcUrls.default.http[0] + }), + createSmartAccountClient({ + chainId, + signer: walletClient, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: chain.rpcUrls.default.http[0] + }) + ]) + + const [ + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress + ] = await Promise.all([ + smartAccountFromEthersWithNewRpc.getAccountAddress(), + smartAccountFromViemWithNewRpc.getAccountAddress(), + smartAccountFromEthersWithOldRpc.getAccountAddress(), + smartAccountFromViemWithOldRpc.getAccountAddress() + ]) + + expect( + [ + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress + ].every(Boolean) + ).toBeTruthy() + + expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe( + newRpcUrl + ) + expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe( + newRpcUrl + ) + expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe( + defaultRpcUrl + ) + expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe( + defaultRpcUrl + ) + } + ) + + test.concurrent( + "should read estimated user op gas values", + async () => { + const tx = { + to: recipient, + data: "0x" + } + + const userOp = await smartAccount.buildUserOp([tx]) + + const estimatedGas = await smartAccount.estimateUserOpGas(userOp) + expect(estimatedGas.maxFeePerGas).toBeTruthy() + expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() + expect(estimatedGas.verificationGasLimit).toBeTruthy() + expect(estimatedGas.callGasLimit).toBeTruthy() + expect(estimatedGas.preVerificationGas).toBeTruthy() + expect(estimatedGas).toHaveProperty("paymasterAndData", "0x") + }, + 30000 + ) + + test.concurrent("should have an active validation module", async () => { + const module = smartAccount.activeValidationModule + expect(module).toBeTruthy() + }) + + test.concurrent( + "should create a smart account with paymaster by creating instance", + async () => { + const paymaster = new Paymaster({ paymasterUrl }) + + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + paymaster + }) + expect(smartAccount.paymaster).not.toBeNull() + expect(smartAccount.paymaster).not.toBeUndefined() + } + ) + test.concurrent( + "should fail to create a smartAccountClient from a walletClient without a chainId", + async () => { + const account = privateKeyToAccount(generatePrivateKey()) + const viemWalletClientNoChainId = createWalletClient({ + account, + transport: http(chain.rpcUrls.default.http[0]) + }) + + expect( + await expect( + createSmartAccountClient({ + signer: viemWalletClientNoChainId, + bundlerUrl, + rpcUrl: chain.rpcUrls.default.http[0] + }) + ).rejects.toThrow("Cannot consume a viem wallet without a chainId") + ) + } + ) + + test.concurrent( + "should fail to create a smartAccountClient from a walletClient without an account", + async () => { + const viemWalletNoAccount = createWalletClient({ + transport: http(chain.rpcUrls.default.http[0]) + }) + + expect(async () => + createSmartAccountClient({ + signer: viemWalletNoAccount, + bundlerUrl, + rpcUrl: chain.rpcUrls.default.http[0] + }) + ).rejects.toThrow("Cannot consume a viem wallet without an account") + } + ) + + test.concurrent("should have account addresses", async () => { + const addresses = await Promise.all([ + sender, + smartAccount.getAddress(), + recipient, + smartAccountTwo.getAddress() + ]) + /* + * addresses: [ + * '0xFA66E705cf2582cF56528386Bb9dFCA119767262', // sender + * '0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC', // smartAccountSender + * '0x3079B249DFDE4692D7844aA261f8cf7D927A0DA5', // recipient + * '0x5F141ee1390D4c9d033a00CB940E509A4811a5E0' // smartAccountRecipient + * ] + */ + expect(addresses.every(Boolean)).toBeTruthy() + }) + + test.concurrent( + "should create a smart account with paymaster with an api key", + async () => { + const paymaster = smartAccount.paymaster + expect(paymaster).not.toBeNull() + expect(paymaster).not.toBeUndefined() + } + ) + + test.concurrent("should not throw and error, chain ids match", async () => { + const mockBundlerUrl = + "https://bundler.biconomy.io/api/v2/80002/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" + const mockPaymasterUrl = + "https://paymaster.biconomy.io/api/v1/80002/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + + const config: BiconomySmartAccountV2Config = { + signer: walletClient, + bundlerUrl: mockBundlerUrl, + paymasterUrl: mockPaymasterUrl + } + + await expect( + compareChainIds(walletClient, config, false) + ).resolves.not.toThrow() + }) + + test.concurrent( + "should throw and error, bundlerUrl chain id and paymaster url chain id does not match with validation module", + async () => { + const mockPaymasterUrl = + "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + + const ecdsaModule = await createECDSAOwnershipValidationModule({ + signer: walletClient + }) + + const config: BiconomySmartAccountV2Config = { + defaultValidationModule: ecdsaModule, + activeValidationModule: ecdsaModule, + bundlerUrl, + paymasterUrl: mockPaymasterUrl + } + + await expect( + compareChainIds(walletClient, config, false) + ).rejects.toThrow() + } + ) + + test.concurrent( + "should throw and error, signer has chain id (56) and paymasterUrl has chain id (80002)", + async () => { + const mockPaymasterUrl = + "https://paymaster.biconomy.io/api/v1/80002/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + + const walletClientBsc = createWalletClient({ + account: walletClient.account, + chain: bsc, + transport: http(bsc.rpcUrls.default.http[0]) + }) + + const config: BiconomySmartAccountV2Config = { + signer: walletClientBsc, + bundlerUrl, + paymasterUrl: mockPaymasterUrl + } + + await expect( + compareChainIds(walletClientBsc, config, false) + ).rejects.toThrow() + } + ) + + test.concurrent("should return chain object for chain id 1", async () => { + const chainId = 1 + const chain = getChain(chainId) + expect(chain.id).toBe(chainId) + }) + + test.concurrent("should have correct fields", async () => { + const chainId = 1 + const chain = getChain(chainId) + ;[ + "blockExplorers", + "contracts", + "fees", + "formatters", + "id", + "name", + "nativeCurrency", + "rpcUrls", + "serializers" + ].every((field) => { + expect(chain).toHaveProperty(field) + }) + }) + + test.concurrent("should throw an error, chain id not found", async () => { + const chainId = 0 + expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) + }) + + test.concurrent( + "should have matching #getUserOpHash and entryPoint.getUserOpHash", + async () => { + const userOp: UserOperationStruct = { + sender: "0x".padEnd(42, "1") as string, + nonce: 2, + initCode: "0x3333", + callData: "0x4444", + callGasLimit: 5, + verificationGasLimit: 6, + preVerificationGas: 7, + maxFeePerGas: 8, + maxPriorityFeePerGas: 9, + paymasterAndData: "0xaaaaaa", + signature: "0xbbbb" + } + + const epHash = await publicClient.readContract({ + address: DEFAULT_ENTRYPOINT_ADDRESS, + abi: [ + { + inputs: [ + { + components: [ + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, + { + internalType: "uint256", + name: "callGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256" + }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256" + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes" + }, + { internalType: "bytes", name: "signature", type: "bytes" } + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple" + } + ], + name: "getUserOpHash", + outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], + stateMutability: "view", + type: "function" + } + ], + functionName: "getUserOpHash", + // @ts-ignore + args: [userOp] + }) + + const hash = await smartAccount.getUserOpHash(userOp) + expect(hash).toBe(epHash) + }, + 30000 + ) + + test.concurrent( + "should be deployed to counterfactual address", + async () => { + const accountAddress = await smartAccount.getAccountAddress() + const byteCode = await publicClient.getBytecode({ + address: accountAddress as Hex + }) + + expect(byteCode?.length).toBeGreaterThan(2) + }, + 10000 + ) + + test.concurrent( + "should check if ecdsaOwnershipModule is enabled", + async () => { + const ecdsaOwnershipModule = "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" + + expect(ecdsaOwnershipModule).toBe( + smartAccount.activeValidationModule.getAddress() + ) + } + ) + + test.concurrent( + "should fail to deploy a smart account if no native token balance or paymaster", + async () => { + const newPrivateKey = generatePrivateKey() + const newAccount = privateKeyToAccount(newPrivateKey) + + const newViemWallet = createWalletClient({ + account: newAccount, + chain, + transport: http() + }) + + const smartAccount = await createSmartAccountClient({ + signer: newViemWallet, + paymasterUrl, + bundlerUrl + }) + + expect(async () => smartAccount.deploy()).rejects.toThrow( + ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY + ) + } + ) + + test.concurrent( + "should fail to deploy a smart account if already deployed", + async () => { + expect(async () => smartAccount.deploy()).rejects.toThrow( + ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED + ) + }, + 60000 + ) + + test.concurrent("should fetch balances for smartAccount", async () => { + const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) + const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ + token + ]) + + expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) + }) + + test.concurrent("should error if no recipient exists", async () => { + const token: Hex = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + + const txs = [ + { address: token, amount: BigInt(1), recipient: sender }, + { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } + ] + + expect(async () => smartAccount.withdraw(txs)).rejects.toThrow( + ERROR_MESSAGES.NO_RECIPIENT + ) + }) + + test.concurrent( + "should error when withdraw all of native token is attempted without an amount explicitly set", + async () => { + expect(async () => smartAccount.withdraw(null, sender)).rejects.toThrow( + ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT + ) + }, + 6000 + ) + + test.concurrent( + "should check native token balance for smartAccount", + async () => { + const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() + + expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) + expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) + expect(ethBalanceFromSmartAccount.chainId).toBe(chainId) + expect(ethBalanceFromSmartAccount.decimals).toBe(18) + }, + 60000 + ) + + test.concurrent( + "should verify a correct signature through isValidSignature", + async () => { + const eip1271MagicValue = "0x1626ba7e" + const message = "Some message from dApp" + const messageHash = hashMessage(message) + const signature = await smartAccount.signMessage(messageHash) + + const response = await publicClient.readContract({ + address: await smartAccount.getAccountAddress(), + abi: BiconomyAccountAbi, + functionName: "isValidSignature", + args: [messageHash, signature] + }) + + expect(response).toBe(eip1271MagicValue) + } + ) + + test.concurrent("should confirm that signature is not valid", async () => { + const randomPrivKey = generatePrivateKey() + const randomWallet = privateKeyToAccount(randomPrivKey) + + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl + }) + + const eip1271MagicValue = "0xffffffff" + const message = "Some message from dApp" + const messageHash = hashMessage(message) + const signature = await randomWallet.signMessage({ message: messageHash }) + const signatureWithModuleAddress = encodeAbiParameters( + parseAbiParameters("bytes, address"), + [signature, smartAccount.defaultValidationModule.getAddress()] + ) + + const response = await publicClient.readContract({ + address: await smartAccount.getAccountAddress(), + abi: BiconomyAccountAbi, + functionName: "isValidSignature", + args: [messageHash, signatureWithModuleAddress] + }) + + expect(response).toBe(eip1271MagicValue) + }) +}) diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts new file mode 100644 index 000000000..c0ddadff5 --- /dev/null +++ b/tests/account/write.test.ts @@ -0,0 +1,264 @@ +import { + http, + type Hex, + createPublicClient, + createWalletClient, + encodeFunctionData, + getContract, + parseAbi +} from "viem" +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" +import { beforeAll, describe, expect, test } from "vitest" +import { + type BiconomySmartAccountV2, + ERC20_ABI, + createSmartAccountClient +} from "../../src/account" +import { PaymasterMode } from "../../src/paymaster" +import { testOnlyOnOptimism } from "../setupFiles" +import { checkBalance, getConfig, nonZeroBalance, topUp } from "../utils" + +describe("Account:Write", () => { + const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + const { + chain, + chainId, + privateKey, + privateKeyTwo, + bundlerUrl, + paymasterUrl + } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + const sender = account.address + const recipient = accountTwo.address + const publicClient = createPublicClient({ + chain, + transport: http() + }) + let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] + let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] + + const [walletClient, walletClientTwo] = [ + createWalletClient({ + account, + chain, + transport: http() + }), + createWalletClient({ + account: accountTwo, + chain, + transport: http() + }) + ] + + beforeAll(async () => { + ;[smartAccount, smartAccountTwo] = await Promise.all( + [walletClient, walletClientTwo].map((client) => + createSmartAccountClient({ + chainId, + signer: client, + bundlerUrl, + paymasterUrl + }) + ) + ) + ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( + [smartAccount, smartAccountTwo].map((account) => + account.getAccountAddress() + ) + ) + }) + + test("should deploy a smart account with native token balance", async () => { + const newPrivateKey = generatePrivateKey() + const newAccount = privateKeyToAccount(newPrivateKey) + + const newViemWallet = createWalletClient({ + account: newAccount, + chain, + transport: http() + }) + + const newSmartAccount = await createSmartAccountClient({ + signer: newViemWallet, + paymasterUrl, + bundlerUrl + }) + + const newSmartAccountAddress = await newSmartAccount.getAccountAddress() + + // Setup: + await topUp(newSmartAccountAddress, BigInt(100000000000000000)) + + const balanceCheck = await checkBalance(newSmartAccountAddress) + + // Test: + const { wait } = await newSmartAccount.deploy() + const { success } = await wait() + + const byteCode = await publicClient.getBytecode({ + address: newSmartAccountAddress + }) + expect(success).toBe("true") + expect(byteCode).toBeTruthy() + }, 60000) + + testOnlyOnOptimism( + "should send some native token to a recipient on optimism", + async () => { + const balanceOfRecipient = await checkBalance(recipient) + + const { wait } = await smartAccount.sendTransaction( + { + to: recipient, + value: BigInt(1) + }, + { + simulationType: "validation_and_execution" + } + ) + + const result = await wait() + const newBalanceOfRecipient = await checkBalance(recipient) + + expect(result?.receipt?.transactionHash).toBeTruthy() + expect(result.success).toBe("true") + expect(newBalanceOfRecipient).toBeGreaterThan(balanceOfRecipient) + }, + 50000 + ) + + testOnlyOnOptimism( + "should create a smart account with paymaster with an api key on optimism", + async () => { + const paymaster = smartAccount.paymaster + expect(paymaster).not.toBeNull() + expect(paymaster).not.toBeUndefined() + } + ) + + test("should withdraw erc20 balances", async () => { + await nonZeroBalance(smartAccountAddress, token) + + const tokenBalanceOfSABefore = await checkBalance( + smartAccountAddress, + token + ) + const tokenBalanceOfRecipientBefore = await checkBalance(sender, token) + const { wait } = await smartAccount.withdraw( + [{ address: token, amount: BigInt(1), recipient: sender }], + undefined, + { + paymasterServiceData: { + mode: PaymasterMode.SPONSORED + } + } + ) + + const { + receipt: { transactionHash }, + userOpHash, + success + } = await wait() + + expect(userOpHash).toBeTruthy() + expect(success).toBe("true") + expect(transactionHash).toBeTruthy() + + const tokenBalanceOfSAAfter = await checkBalance(smartAccountAddress, token) + const tokenBalanceOfRecipientAfter = await checkBalance(sender, token) + + expect(tokenBalanceOfSAAfter - tokenBalanceOfSABefore).toBe(-1n) + expect(tokenBalanceOfRecipientAfter - tokenBalanceOfRecipientBefore).toBe( + 1n + ) + }, 25000) + + test("should mint an NFT and pay with ERC20 - with token", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const balance = await checkBalance(recipient, nftAddress) + const nativeBalanceBefore = await checkBalance(smartAccountAddress) + const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) + const { wait } = await smartAccount.sendTransaction([transaction], { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken: token + } + }) + const { + receipt: { transactionHash }, + userOpHash, + success + } = await wait() + expect(transactionHash).toBeTruthy() + expect(userOpHash).toBeTruthy() + expect(success).toBe("true") + const nativeBalanceAfter = await checkBalance(smartAccountAddress) + expect(nativeBalanceAfter).toEqual(nativeBalanceBefore) + const tokenBalanceAfter = await checkBalance(smartAccountAddress, token) + expect(tokenBalanceAfter).toBeLessThan(tokenBalanceBefore) + const newBalance = await checkBalance(recipient, nftAddress) + expect(newBalance - balance).toBe(1n) + }, 60000) + + test("should mint an NFT and pay with ERC20 - with token selection and no maxApproval", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken: token + } + }) + const selectedFeeQuote = feeQuotesResponse.feeQuotes?.[0] + // biome-ignore lint/style/noNonNullAssertion: <explanation> + const spender = feeQuotesResponse.tokenPaymasterAddress! + const contract = getContract({ + address: token, + abi: parseAbi(ERC20_ABI), + client: publicClient + }) + + const balance = await checkBalance(recipient, nftAddress) + const nativeBalanceBefore = await checkBalance(smartAccountAddress) + const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) + const { wait } = await smartAccount.sendTransaction(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + feeQuote: selectedFeeQuote, + spender: feeQuotesResponse.tokenPaymasterAddress + } + }) + const { + receipt: { transactionHash }, + userOpHash, + success + } = await wait() + expect(userOpHash).toBeTruthy() + expect(success).toBe("true") + expect(transactionHash).toBeTruthy() + const nativeBalanceAfter = await checkBalance(smartAccountAddress) + expect(nativeBalanceAfter).toEqual(nativeBalanceBefore) + const tokenBalanceAfter = await checkBalance(smartAccountAddress, token) + expect(tokenBalanceAfter).toBeLessThan(tokenBalanceBefore) + const newBalance = await checkBalance(recipient, nftAddress) + expect(newBalance - balance).toBe(1n) + }, 60000) +}) diff --git a/tests/bundler/read.test.ts b/tests/bundler/read.test.ts new file mode 100644 index 000000000..16b8ecf58 --- /dev/null +++ b/tests/bundler/read.test.ts @@ -0,0 +1,202 @@ +import { http, type Chain, createWalletClient } from "viem" +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" +import { beforeAll, describe, expect, test } from "vitest" +import { + type BiconomySmartAccountV2, + type BiconomySmartAccountV2Config, + compareChainIds, + createSmartAccountClient +} from "../../src/account" +import { createBundler } from "../../src/bundler" +import { getBundlerUrl, getConfig } from "../utils" + +describe("Bundler: Read", () => { + const { + chain, + chainId, + privateKey, + privateKeyTwo, + bundlerUrl, + paymasterUrl + } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + const recipient = accountTwo.address + + let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] + let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] + + const [walletClient, walletClientTwo] = [ + createWalletClient({ + account, + chain, + transport: http() + }), + createWalletClient({ + account: accountTwo, + chain, + transport: http() + }) + ] + + beforeAll(async () => { + ;[smartAccount, smartAccountTwo] = await Promise.all( + [walletClient, walletClientTwo].map((client) => + createSmartAccountClient({ + chainId, + signer: client, + bundlerUrl, + paymasterUrl + }) + ) + ) + ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( + [smartAccount, smartAccountTwo].map((account) => + account.getAccountAddress() + ) + ) + }) + + test.concurrent( + "Should throw and give advice", + async () => { + const randomPrivateKey = generatePrivateKey() + const unfundedAccount = privateKeyToAccount(randomPrivateKey) + + const unfundedSmartAccountClient = await createSmartAccountClient({ + signer: createWalletClient({ + account: unfundedAccount, + chain, + transport: http() + }), + paymasterUrl, + bundlerUrl + }) + + await expect( + unfundedSmartAccountClient.sendTransaction({ + to: recipient, + value: 1 + }) + ).rejects.toThrow("Send some native tokens in your smart wallet") + }, + 20000 + ) + + test.concurrent( + "should parse the rpcUrl when a custom chain and bundler are used", + async () => { + const customBlastChain = { + id: 81_457, + name: "Blast", + // network: "blast", + nativeCurrency: { + decimals: 18, + name: "Ethereum", + symbol: "ETH" + }, + rpcUrls: { + public: { http: ["https://rpc.blast.io"] }, + default: { http: ["https://rpc.blast.io"] } + }, + blockExplorers: { + etherscan: { name: "Blastscan", url: "https://blastscan.io/" }, + default: { name: "Blastscan", url: "https://blastscan.io/" } + }, + contracts: { + multicall3: { + address: "0xca11bde05977b3631167028862be2a173976ca11", + blockCreated: 88_189 + } + } + } as const satisfies Chain + + const accountOne = privateKeyToAccount(`0x${privateKey}`) + + const walletClientWithCustomChain = createWalletClient({ + account: accountOne, + chain: customBlastChain, + transport: http() + }) + + const blastBundler = await createBundler({ + bundlerUrl: getBundlerUrl(customBlastChain.id), + viemChain: customBlastChain + }) + const smartAccountFromViemWithCustomChain = + await createSmartAccountClient({ + viemChain: customBlastChain, + signer: walletClientWithCustomChain, + bundler: blastBundler, + rpcUrl: customBlastChain.rpcUrls.default.http[0] + }) + + expect( + smartAccountFromViemWithCustomChain.rpcProvider.transport.url + ).toBe("https://rpc.blast.io") + expect(blastBundler.getBundlerUrl()).toBe( + getBundlerUrl(customBlastChain.id) + ) + } + ) + + test.concurrent( + "should throw an error, bundlerUrl chain id and signer chain id does not match", + async () => { + const config: BiconomySmartAccountV2Config = { + signer: walletClient, + bundlerUrl: getBundlerUrl(1337), + paymasterUrl + } + + await expect( + compareChainIds(walletClient, config, false) + ).rejects.toThrow() + } + ) + test.concurrent( + "should throw an error, bundlerUrl chainId and paymasterUrl + chainId does not match", + async () => { + const mockPaymasterUrl = + "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + + const config: BiconomySmartAccountV2Config = { + signer: walletClient, + bundlerUrl, + paymasterUrl: mockPaymasterUrl + } + + await expect( + compareChainIds(walletClient, config, false) + ).rejects.toThrow() + } + ) + + test.concurrent( + "should throw, chain id from signer and bundlerUrl do not match", + async () => { + const createAccount = createSmartAccountClient({ + signer: walletClient, + bundlerUrl: + "https://bundler.biconomy.io/api/v2/1/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" // mock + }) + + await expect(createAccount).rejects.toThrow() + } + ) + + test.concurrent( + "should throw, chain id from paymasterUrl and bundlerUrl do not match", + async () => { + const createAccount = createSmartAccountClient({ + signer: walletClient, + paymasterUrl: + "https://paymaster.biconomy.io/api/v1/1/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71", + bundlerUrl: + "https://bundler.biconomy.io/api/v2/80002/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" // mock + }) + + await expect(createAccount).rejects.toThrow() + } + ) +}) diff --git a/tests/bundler/write.test.ts b/tests/bundler/write.test.ts new file mode 100644 index 000000000..a67f25e32 --- /dev/null +++ b/tests/bundler/write.test.ts @@ -0,0 +1,119 @@ +import { http, type Hex, createPublicClient, createWalletClient } from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { beforeAll, describe, expect, test } from "vitest" +import { + type BiconomySmartAccountV2, + createSmartAccountClient +} from "../../src/account" +import { createBundler } from "../../src/bundler" +import { checkBalance, getConfig, nonZeroBalance, topUp } from "../utils" + +describe("Bundler:Write", () => { + const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const { + chain, + chainId, + privateKey, + privateKeyTwo, + bundlerUrl, + paymasterUrl + } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + const recipient = accountTwo.address + const publicClient = createPublicClient({ + chain, + transport: http() + }) + let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] + let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] + + const [walletClient, walletClientTwo] = [ + createWalletClient({ + account, + chain, + transport: http() + }), + createWalletClient({ + account: accountTwo, + chain, + transport: http() + }) + ] + + beforeAll(async () => { + ;[smartAccount, smartAccountTwo] = await Promise.all( + [walletClient, walletClientTwo].map((client) => + createSmartAccountClient({ + chainId, + signer: client, + bundlerUrl, + paymasterUrl + }) + ) + ) + ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( + [smartAccount, smartAccountTwo].map((account) => + account.getAccountAddress() + ) + ) + }) + + test("should send some native token to a recipient", async () => { + await topUp(smartAccountAddress, BigInt(1000000000000000000)) + const balanceOfRecipient = await checkBalance(recipient) + + const { wait } = await smartAccount.sendTransaction({ + to: recipient, + value: 1n + }) + + const { + receipt: { transactionHash }, + success + } = await wait(3) + + expect(success).toBe("true") + + const newBalanceOfRecipient = await checkBalance(recipient) + + expect(transactionHash).toBeTruthy() + expect(newBalanceOfRecipient - balanceOfRecipient).toBe(1n) + }, 50000) + + test("should send some native token to a recipient with a bundler instance", async () => { + await topUp(smartAccountAddress, BigInt(1000000000000000000)) + + const balanceOfRecipient = await checkBalance(recipient) + + const smartAccountClientWithBundlerInstance = + await createSmartAccountClient({ + signer: walletClient, + bundler: await createBundler({ + bundlerUrl, + userOpReceiptMaxDurationIntervals: { + [chainId]: 50000 + } + }), + paymasterUrl + }) + + const { wait } = + await smartAccountClientWithBundlerInstance.sendTransaction({ + to: recipient, + value: 1 + }) + + const { + receipt: { transactionHash }, + success + } = await wait(3) + + expect(success).toBe("true") + + const newBalanceOfRecipient = await checkBalance(recipient) + + expect(transactionHash).toBeTruthy() + expect(newBalanceOfRecipient - balanceOfRecipient).toBe(1n) + }, 70000) +}) diff --git a/tests/chains.config.ts b/tests/chains.config.ts deleted file mode 100644 index 97e453c29..000000000 --- a/tests/chains.config.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { localhost, Chain } from "viem/chains"; -import { polygonMumbai, baseSepolia, optimism } from "viem/chains"; -import { config } from "dotenv"; - -config(); - -export type SupportedTestChain = "ganache" | "baseSepolia" | "mumbai" | "optimism"; -type BaseChainConfig = { - chainId: number; - entryPointAddress: string; - bundlerUrl: string; - paymasterUrl?: string; - viemChain: Chain; - biconomyPaymasterApiKey?: string; - deploymentCost: number; - nftAddress: string; -}; -export const CHAIN_CONFIG: Record<SupportedTestChain, BaseChainConfig> = { - ganache: { // No useful bundler or paymaster tests for ganache - chainId: 1337, - entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", - bundlerUrl: "https://bundler.biconomy.io/api/v2/1/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", - viemChain: localhost, - deploymentCost: 100000000000000000, - nftAddress: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e", - }, - baseSepolia: { - chainId: 84532, - entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", - bundlerUrl: "https://bundler.biconomy.io/api/v2/84532/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", - paymasterUrl: "https://paymaster.biconomy.io/api/v1/84532/" + process.env.E2E_BICO_PAYMASTER_KEY_BASE!, - viemChain: baseSepolia, - biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_BASE!, - deploymentCost: 100000000000000000, - nftAddress: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e", - }, - mumbai: { - chainId: 80001, - entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", - bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", - paymasterUrl: "https://paymaster.biconomy.io/api/v1/80001/" + process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, - viemChain: polygonMumbai, - biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_MUMBAI!, - deploymentCost: 100000000000000000, - nftAddress: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e", - }, - optimism: { - chainId: 10, - entryPointAddress: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", - bundlerUrl: "https://bundler.biconomy.io/api/v2/10/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44", - paymasterUrl: "https://paymaster.biconomy.io/api/v1/10/" + process.env.E2E_BICO_PAYMASTER_KEY_OP!, - viemChain: optimism, - biconomyPaymasterApiKey: process.env.E2E_BICO_PAYMASTER_KEY_OP!, - deploymentCost: 100000000000000000, - nftAddress: "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e", - } -}; -export const E2E_TEST_CHAINS = [CHAIN_CONFIG.mumbai, CHAIN_CONFIG.baseSepolia, CHAIN_CONFIG.optimism]; -export const UNIT_TEST_CHAIN = CHAIN_CONFIG.ganache; - -export default CHAIN_CONFIG; \ No newline at end of file diff --git a/tests/globalSetup.ts b/tests/globalSetup.ts new file mode 100644 index 000000000..7b2602c67 --- /dev/null +++ b/tests/globalSetup.ts @@ -0,0 +1,5 @@ +import { getConfig } from "./utils.js" + +export default function setup({ provide: _ }) { + getConfig() +} diff --git a/tests/index.d.ts b/tests/index.d.ts deleted file mode 100644 index 25e39cf50..000000000 --- a/tests/index.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Chain, Hex, PrivateKeyAccount, PublicClient, WalletClient } from "viem"; -import { WalletClientSigner } from "@alchemy/aa-core"; -import { JsonRpcProvider } from "@ethersproject/providers"; -import { Signer } from "@ethersproject/abstract-signer"; - -interface WalletProps { - alchemyWalletClientSigner: WalletClientSigner; - viemWallet: WalletClient; - balance: bigint; - publicAddress: Hex; - account: PrivateKeyAccount; - privateKey: Hex; - ethersSigner: Signer; -} - -export type TestData = { - nftAddress: Hex; - deploymentCost: number; - whale: WalletProps; - minnow: WalletProps; - publicClient: PublicClient; - chainId: number; - bundlerUrl: string; - entryPointAddress: string; - viemChain: Chain; - paymasterUrl: string; - biconomyPaymasterApiKey: string; - ethersProvider: JsonRpcProvider; -}; diff --git a/tests/modules/read.test.ts b/tests/modules/read.test.ts new file mode 100644 index 000000000..78d72affd --- /dev/null +++ b/tests/modules/read.test.ts @@ -0,0 +1,247 @@ +import { defaultAbiCoder } from "@ethersproject/abi" +import { JsonRpcProvider } from "@ethersproject/providers" +import { Wallet } from "@ethersproject/wallet" +import { + http, + createWalletClient, + encodeAbiParameters, + parseAbiParameters +} from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { beforeAll, describe, expect, test } from "vitest" +import { + type BiconomySmartAccountV2, + createSmartAccountClient +} from "../../src/account" +import { + createECDSAOwnershipValidationModule, + createMultiChainValidationModule +} from "../../src/modules" +import { getConfig } from "../utils" + +describe("Modules: Read", () => { + const { + chain, + chainId, + privateKey, + privateKeyTwo, + bundlerUrl, + paymasterUrl + } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] + let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] + + const [walletClient, walletClientTwo] = [ + createWalletClient({ + account, + chain, + transport: http() + }), + createWalletClient({ + account: accountTwo, + chain, + transport: http() + }) + ] + + beforeAll(async () => { + ;[smartAccount, smartAccountTwo] = await Promise.all( + [walletClient, walletClientTwo].map((client) => + createSmartAccountClient({ + chainId, + signer: client, + bundlerUrl, + paymasterUrl + }) + ) + ) + ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( + [smartAccount, smartAccountTwo].map((account) => + account.getAccountAddress() + ) + ) + }) + + test.concurrent("should encode params successfully", async () => { + const hardcodedPaddedSignature = + "0x000000000000000000000000000002fbffedd9b33f4e7156f2de8d48945e74890000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d50c68705bd6897b2d17c7de32fb519fda00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000fa66e705cf2582cf56528386bb9dfca119767262000000000000000000000000da5289fcaaf71d52a80a254da614a192b693e9770000000000000000000000003079b249dfde4692d7844aa261f8cf7d927a0da500000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000000000000000000003ca2b0ef4564d7ca7044b8c9d75685659975c0cab591408cb20e4a2ab278ab282633eb23075a8cb9bc5b01a5a4fa367b73da76821105f67a62ed7eedd335f6c0e361e73015ce4bb83439ab0742bdfed338ec39e2e8dd0819528f02be218fc1db90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ba4a7338d7a90dfa465cf975cc6691812c3772e00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000fa66e705cf2582cf56528386bb9dfca1197672620000000000000000000000000000000000000000000000000000000000000003b91f47666ba9b0b6b2cfbb60bf39b241d269786aa01f388021057d080863dd40633eb23075a8cb9bc5b01a5a4fa367b73da76821105f67a62ed7eedd335f6c0e361e73015ce4bb83439ab0742bdfed338ec39e2e8dd0819528f02be218fc1db90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004173c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b00000000000000000000000000000000000000000000000000000000000000" + + const sessionKeyManagerAddress = + "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489" + const mockEcdsaSessionKeySig = + "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b" + const sessionDataTupleArray = [ + [ + 0n, + 0n, + "0x000000d50c68705bd6897b2d17c7de32fb519fda", + "0x000000000000000000000000fa66e705cf2582cf56528386bb9dfca119767262000000000000000000000000da5289fcaaf71d52a80a254da614a192b693e9770000000000000000000000003079b249dfde4692d7844aa261f8cf7d927a0da50000000000000000000000000000000000000000000000000000000000989680", + [ + "0xca2b0ef4564d7ca7044b8c9d75685659975c0cab591408cb20e4a2ab278ab282", + "0x633eb23075a8cb9bc5b01a5a4fa367b73da76821105f67a62ed7eedd335f6c0e", + "0x361e73015ce4bb83439ab0742bdfed338ec39e2e8dd0819528f02be218fc1db9" + ], + "0x" + ], + [ + 0n, + 0n, + "0x7ba4a7338d7a90dfa465cf975cc6691812c3772e", + "0x000000000000000000000000fa66e705cf2582cf56528386bb9dfca119767262", + [ + "0xb91f47666ba9b0b6b2cfbb60bf39b241d269786aa01f388021057d080863dd40", + "0x633eb23075a8cb9bc5b01a5a4fa367b73da76821105f67a62ed7eedd335f6c0e", + "0x361e73015ce4bb83439ab0742bdfed338ec39e2e8dd0819528f02be218fc1db9" + ], + "0x" + ] + ] + + const paddedSignature = defaultAbiCoder.encode( + [ + "address", + "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", + "bytes" + ], + [sessionKeyManagerAddress, sessionDataTupleArray, mockEcdsaSessionKeySig] + ) + + const abiParameters = [ + { type: "address" }, + { + type: "tuple[]", + components: [ + { type: "uint48" }, + { type: "uint48" }, + { type: "address" }, + { type: "bytes" }, + { type: "bytes32[]" }, + { type: "bytes" } + ] + }, + { type: "bytes" } + ] + + const paddedSignatureWithViem = encodeAbiParameters(abiParameters, [ + sessionKeyManagerAddress, + sessionDataTupleArray, + mockEcdsaSessionKeySig + ]) + + expect(paddedSignature).toEqual(hardcodedPaddedSignature) + expect(paddedSignatureWithViem).toEqual(hardcodedPaddedSignature) + }) + + test.concurrent( + "should create a ECDSAOwnershipValidationModule with signer", + async () => { + const defaultValidationModule = + await createECDSAOwnershipValidationModule({ + signer: walletClient + }) + // Should not require a signer or chainId + const smartAccount = await createSmartAccountClient({ + bundlerUrl, + defaultValidationModule, + signer: walletClient + }) + const address = await smartAccount.getAccountAddress() + expect(address).toBeTruthy() + expect(smartAccount.activeValidationModule).toEqual( + defaultValidationModule + ) + } + ) + + test.concurrent( + "should create a ECDSAOwnershipValidationModule without signer", + async () => { + const defaultValidationModule = + await createECDSAOwnershipValidationModule({ + signer: walletClient + }) + // Should not require a signer or chainId + const smartAccount = await createSmartAccountClient({ + bundlerUrl, + defaultValidationModule + }) + const address = await smartAccount.getAccountAddress() + expect(address).toBeTruthy() + expect(smartAccount.activeValidationModule).toEqual( + defaultValidationModule + ) + } + ) + + test.concurrent( + "should create a ECDSAOwnershipValidationModule by default, without explicitly setting it on the smart account", + async () => { + const defaultValidationModule = + await createECDSAOwnershipValidationModule({ + signer: walletClient + }) + const smartAccount = await createSmartAccountClient({ + bundlerUrl, + signer: walletClient + }) + const address = await smartAccount.getAccountAddress() + expect(address).toBeTruthy() + const smartAccountValidationModuleAddress = + await smartAccount.activeValidationModule.getAddress() + expect(smartAccountValidationModuleAddress).toEqual( + defaultValidationModule.moduleAddress + ) + } + ) + + test.concurrent( + "should create a MultiChainValidationModule from an ethers signer using convertSigner", + async () => { + const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) + const ethersSigner = new Wallet(privateKey, ethersProvider) + + const defaultValidationModule = await createMultiChainValidationModule({ + signer: ethersSigner + }) + // Should not require a signer or chainId + const newSmartAccount = await createSmartAccountClient({ + bundlerUrl, + defaultValidationModule, + rpcUrl: chain.rpcUrls.default.http[0] + }) + + const address = await newSmartAccount.getAccountAddress() + expect(address).toBeTruthy() + // expect the relevant module to be set + expect(newSmartAccount.activeValidationModule).toEqual( + defaultValidationModule + ) + }, + 50000 + ) + + test.concurrent( + "should create a ECDSAOwnershipValidationModule from a viem signer using convertSigner", + async () => { + const defaultValidationModule = + await createECDSAOwnershipValidationModule({ + signer: walletClient + }) + // Should not require a signer or chainId + const smartAccount = await createSmartAccountClient({ + bundlerUrl, + defaultValidationModule, + rpcUrl: chain.rpcUrls.default.http[0] + }) + const address = await smartAccount.getAccountAddress() + expect(address).toBeTruthy() + // expect the relevant module to be set + expect(smartAccount.activeValidationModule).toEqual( + defaultValidationModule + ) + }, + 50000 + ) +}) diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts new file mode 100644 index 000000000..37e498fe5 --- /dev/null +++ b/tests/modules/write.test.ts @@ -0,0 +1,585 @@ +import { + http, + type Hex, + createPublicClient, + createWalletClient, + encodeAbiParameters, + encodeFunctionData, + pad, + parseAbi, + parseEther, + parseUnits, + slice, + toFunctionSelector +} from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { beforeAll, describe, expect, test } from "vitest" +import { + type BiconomySmartAccountV2, + type Transaction, + type WalletClientSigner, + createSmartAccountClient +} from "../../src/account" +import { Logger, getChain } from "../../src/account" +import { + DEFAULT_BATCHED_SESSION_ROUTER_MODULE, + DEFAULT_MULTICHAIN_MODULE, + DEFAULT_SESSION_KEY_MANAGER_MODULE, + createBatchedSessionRouterModule, + createMultiChainValidationModule, + createSessionKeyManagerModule +} from "../../src/modules" +import { SessionMemoryStorage } from "../../src/modules/session-storage/SessionMemoryStorage" +import { getABISVMSessionKeyData } from "../../src/modules/utils/Helper" +import { PaymasterMode } from "../../src/paymaster" +import { checkBalance, getBundlerUrl, getConfig, topUp } from "../utils" + +describe("Modules:Write", () => { + const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const { + chain, + chainId, + privateKey, + privateKeyTwo, + bundlerUrl, + paymasterUrl, + paymasterUrlTwo + } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + const publicClient = createPublicClient({ + chain, + transport: http() + }) + + let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] + let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] + + const [walletClient, walletClientTwo] = [ + createWalletClient({ + account, + chain, + transport: http() + }), + createWalletClient({ + account: accountTwo, + chain, + transport: http() + }) + ] + + beforeAll(async () => { + ;[smartAccount, smartAccountTwo] = await Promise.all( + [walletClient, walletClientTwo].map((client) => + createSmartAccountClient({ + chainId, + signer: client, + bundlerUrl, + paymasterUrl + }) + ) + ) + ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( + [smartAccount, smartAccountTwo].map((account) => + account.getAccountAddress() + ) + ) + }) + + test("should enable session module", async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + paymasterUrl + }) + + const isSessionKeyEnabled = await smartAccount.isModuleEnabled( + DEFAULT_SESSION_KEY_MANAGER_MODULE + ) + + if (!isSessionKeyEnabled) { + const tx = await smartAccount.getEnableModuleData( + DEFAULT_SESSION_KEY_MANAGER_MODULE + ) + const { wait } = await smartAccount.sendTransaction(tx, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const { success } = await wait() + expect(success).toBe("true") + } + }, 50000) + + test.skip("should use MultichainValidationModule to mint an NFT on two chains with sponsorship", async () => { + const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const recipientForBothChains = walletClient.account.address + + const chainIdBase = 84532 + const bundlerUrlBase = getBundlerUrl(chainIdBase) + + const signerBase = createWalletClient({ + account: privateKeyToAccount(`0x${privateKey}`), + chain: getChain(84532), + transport: http() + }) + + const paymasterUrlBase = paymasterUrlTwo + + const multiChainModule = await createMultiChainValidationModule({ + signer: walletClient, + moduleAddress: DEFAULT_MULTICHAIN_MODULE + }) + + const [polygonAccount, baseAccount] = await Promise.all([ + createSmartAccountClient({ + chainId, + signer: walletClient, + bundlerUrl, + defaultValidationModule: multiChainModule, + activeValidationModule: multiChainModule, + paymasterUrl + }), + createSmartAccountClient({ + chainId: chainIdBase, + signer: signerBase, + bundlerUrl: bundlerUrlBase, + defaultValidationModule: multiChainModule, + activeValidationModule: multiChainModule, + paymasterUrl: paymasterUrlBase + }) + ]) + + // Check if the smart account has been deployed + const [isPolygonDeployed, isBaseDeployed] = await Promise.all([ + polygonAccount.isAccountDeployed(), + baseAccount.isAccountDeployed() + ]) + if (!isPolygonDeployed) { + const { wait } = await polygonAccount.deploy({ + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const { success } = await wait() + expect(success).toBe("true") + } + if (!isBaseDeployed) { + const { wait } = await baseAccount.deploy({ + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const { success } = await wait() + expect(success).toBe("true") + } + + const moduleEnabled1 = await polygonAccount.isModuleEnabled( + DEFAULT_MULTICHAIN_MODULE + ) + const moduleActive1 = polygonAccount.activeValidationModule + expect(moduleEnabled1).toBeTruthy() + expect(moduleActive1.getAddress()).toBe(DEFAULT_MULTICHAIN_MODULE) + + const moduleEnabled2 = await baseAccount.isModuleEnabled( + DEFAULT_MULTICHAIN_MODULE + ) + const moduleActive2 = polygonAccount.activeValidationModule + expect(moduleEnabled2).toBeTruthy() + expect(moduleActive2.getAddress()).toBe(DEFAULT_MULTICHAIN_MODULE) + + const encodedCall = encodeFunctionData({ + abi: parseAbi([ + "function safeMint(address owner) view returns (uint balance)" + ]), + functionName: "safeMint", + args: [recipientForBothChains] + }) + + const transaction = { + to: nftAddress, + data: encodedCall + } + + const [partialUserOp1, partialUserOp2] = await Promise.all([ + baseAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }), + polygonAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + ]) + + expect(partialUserOp1.paymasterAndData).not.toBe("0x") + expect(partialUserOp2.paymasterAndData).not.toBe("0x") + + // Sign the user ops using multiChainModule + const returnedOps = await multiChainModule.signUserOps([ + { userOp: partialUserOp1, chainId: chainIdBase }, + { userOp: partialUserOp2, chainId } + ]) + + // Send the signed user ops on both chains + const userOpResponse1 = await baseAccount.sendSignedUserOp( + returnedOps[0] as any + ) + const userOpResponse2 = await polygonAccount.sendSignedUserOp( + returnedOps[1] as any + ) + + Logger.log(userOpResponse1.userOpHash, "MULTICHAIN BASE USER OP HASH") + Logger.log(userOpResponse2.userOpHash, "MULTICHAIN POLYGON USER OP HASH") + + expect(userOpResponse1.userOpHash).toBeTruthy() + expect(userOpResponse2.userOpHash).toBeTruthy() + + const { success: success1 } = await userOpResponse1.wait() + const { success: success2 } = await userOpResponse2.wait() + + expect(success1).toBe("true") + expect(success2).toBe("true") + }, 50000) + + test("should use SessionValidationModule to send a user op", async () => { + let sessionSigner: WalletClientSigner + const sessionKeyEOA = walletClient.account.address + const recipient = walletClientTwo.account.address + + // Create smart account + let smartAccount = await createSmartAccountClient({ + chainId, + signer: walletClient, + bundlerUrl, + paymasterUrl, + index: 5 // Increasing index to not conflict with other test cases and use a new smart account + }) + const accountAddress = await smartAccount.getAccountAddress() + const sessionMemoryStorage: SessionMemoryStorage = new SessionMemoryStorage( + accountAddress + ) + // First we need to check if smart account is deployed + // if not deployed, send an empty transaction to deploy it + const isDeployed = await smartAccount.isAccountDeployed() + Logger.log("session", { isDeployed }) + if (!isDeployed) { + const { wait } = await smartAccount.deploy({ + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const { success } = await wait() + expect(success).toBe("true") + } + + try { + sessionSigner = await sessionMemoryStorage.getSignerByKey(sessionKeyEOA) + } catch (error) { + sessionSigner = await sessionMemoryStorage.addSigner({ + pbKey: sessionKeyEOA, + pvKey: `0x${privateKey}`, + chainId: chain + }) + } + + expect(sessionSigner).toBeTruthy() + // Create session module + const sessionModule = await createSessionKeyManagerModule({ + moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, + smartAccountAddress: await smartAccount.getAddress(), + sessionStorageClient: sessionMemoryStorage + }) + const functionSelector = slice( + toFunctionSelector("safeMint(address)"), + 0, + 4 + ) + // Set enabled call on session + const sessionKeyData = await getABISVMSessionKeyData(sessionKeyEOA as Hex, { + destContract: "0xdd526eba63ef200ed95f0f0fb8993fe3e20a23d0" as Hex, // nft address + functionSelector: functionSelector, + valueLimit: parseEther("0"), + rules: [ + { + offset: 0, // offset 0 means we are checking first parameter of safeMint (recipient address) + condition: 0, // 0 = Condition.EQUAL + referenceValue: pad("0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549", { + size: 32 + }) // recipient address + } + ] + }) + const abiSvmAddress = "0x000006bC2eCdAe38113929293d241Cf252D91861" + const sessionTxData = await sessionModule.createSessionData([ + { + validUntil: 0, + validAfter: 0, + sessionValidationModule: abiSvmAddress, + sessionPublicKey: sessionKeyEOA as Hex, + sessionKeyData: sessionKeyData as Hex + } + ]) + const setSessionAllowedTrx = { + to: DEFAULT_SESSION_KEY_MANAGER_MODULE, + data: sessionTxData.data + } + const txArray: any = [] + // Check if module is enabled + const isEnabled = await smartAccount.isModuleEnabled( + DEFAULT_SESSION_KEY_MANAGER_MODULE + ) + if (!isEnabled) { + const enableModuleTrx = await smartAccount.getEnableModuleData( + DEFAULT_SESSION_KEY_MANAGER_MODULE + ) + txArray.push(enableModuleTrx) + txArray.push(setSessionAllowedTrx) + } else { + Logger.log("MODULE ALREADY ENABLED") + txArray.push(setSessionAllowedTrx) + } + const userOp = await smartAccount.buildUserOp(txArray, { + paymasterServiceData: { + mode: PaymasterMode.SPONSORED + } + }) + const userOpResponse1 = await smartAccount.sendUserOp(userOp) + const transactionDetails = await userOpResponse1.wait() + expect(transactionDetails.success).toBe("true") + Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash) + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: ["0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549"] + }) + const nftMintTx = { + to: "0xdd526eba63ef200ed95f0f0fb8993fe3e20a23d0", + data: encodedCall + } + smartAccount = smartAccount.setActiveValidationModule(sessionModule) + const maticBalanceBefore = await checkBalance(smartAccountAddress) + const userOpResponse2 = await smartAccount.sendTransaction(nftMintTx, { + params: { + sessionSigner: sessionSigner, + sessionValidationModule: abiSvmAddress + }, + paymasterServiceData: { + mode: PaymasterMode.SPONSORED + } + }) + expect(userOpResponse2.userOpHash).toBeTruthy() + expect(userOpResponse2.userOpHash).not.toBeNull() + const maticBalanceAfter = await checkBalance(smartAccountAddress) + expect(maticBalanceAfter).toEqual(maticBalanceBefore) + Logger.log( + `Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai` + ) + }, 60000) + + test("should enable batched module", async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + paymasterUrl + }) + + const isBRMenabled = await smartAccount.isModuleEnabled( + DEFAULT_BATCHED_SESSION_ROUTER_MODULE + ) + + if (!isBRMenabled) { + const tx = await smartAccount.getEnableModuleData( + DEFAULT_BATCHED_SESSION_ROUTER_MODULE + ) + const { wait } = await smartAccount.sendTransaction(tx, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const { success } = await wait() + expect(success).toBe("true") + } + }, 50000) + + test.skip("should use BatchedSessionValidationModule to send a user op", async () => { + let sessionSigner: WalletClientSigner + const sessionKeyEOA = walletClient.account.address + const recipient = walletClientTwo.account.address + const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + + let smartAccount = await createSmartAccountClient({ + chainId, + signer: walletClient, + bundlerUrl, + paymasterUrl, + index: 6 // Increasing index to not conflict with other test cases and use a new smart account + }) + + // const accountAddress = await smartAccount.getAccountAddress() + const smartAccountAddress = await smartAccount.getAddress() + await topUp(smartAccountAddress, undefined, token) + await topUp(smartAccountAddress, undefined) + + const sessionMemoryStorage: SessionMemoryStorage = new SessionMemoryStorage( + smartAccountAddress + ) + + try { + sessionSigner = await sessionMemoryStorage.getSignerByKey(sessionKeyEOA) + } catch (error) { + sessionSigner = await sessionMemoryStorage.addSigner({ + pbKey: sessionKeyEOA, + pvKey: `0x${privateKey}`, + chainId: chain + }) + } + + expect(sessionSigner).toBeTruthy() + const sessionModule = await createSessionKeyManagerModule({ + moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, + smartAccountAddress, + sessionStorageClient: sessionMemoryStorage + }) + // Create batched session module + const batchedSessionModule = await createBatchedSessionRouterModule({ + moduleAddress: DEFAULT_BATCHED_SESSION_ROUTER_MODULE, + smartAccountAddress, + sessionKeyManagerModule: sessionModule + }) + + // Set enabled call on session, only allows calling USDC contract transfer with <= 10 USDC + const sessionKeyData = encodeAbiParameters( + [ + { type: "address" }, + { type: "address" }, + { type: "address" }, + { type: "uint256" } + ], + [ + sessionKeyEOA, + token, // erc20 token address + recipient, // receiver address + parseUnits("10", 6) + ] + ) + // only requires that the caller is the session key + // can call anything using the mock session module + const sessionKeyData2 = encodeAbiParameters( + [{ type: "address" }], + [sessionKeyEOA] + ) + const erc20ModuleAddr = "0x000000D50C68705bd6897B2d17c7de32FB519fDA" + const mockSessionModuleAddr = "0x7Ba4a7338D7A90dfA465cF975Cc6691812C3772E" + const sessionTxData = await batchedSessionModule.createSessionData([ + { + validUntil: 0, + validAfter: 0, + sessionValidationModule: erc20ModuleAddr, + sessionPublicKey: sessionKeyEOA, + sessionKeyData: sessionKeyData + }, + { + validUntil: 0, + validAfter: 0, + sessionValidationModule: mockSessionModuleAddr, + sessionPublicKey: sessionKeyEOA, + sessionKeyData: sessionKeyData2 + } + ]) + + const setSessionAllowedTrx = { + to: DEFAULT_SESSION_KEY_MANAGER_MODULE, + data: sessionTxData.data + } + + const isDeployed = await smartAccount.isAccountDeployed() + if (!isDeployed) { + const { wait } = await smartAccount.deploy() + const { success } = await wait() + expect(success).toBe("true") + } + + const txArray: Transaction[] = [] + // Check if session module is enabled + const isEnabled = await smartAccount.isModuleEnabled( + DEFAULT_SESSION_KEY_MANAGER_MODULE + ) + if (!isEnabled) { + const enableModuleTrx = await smartAccount.getEnableModuleData( + DEFAULT_SESSION_KEY_MANAGER_MODULE + ) + txArray.push(enableModuleTrx) + } + // Check if batched session module is enabled + const isBRMenabled = await smartAccount.isModuleEnabled( + DEFAULT_BATCHED_SESSION_ROUTER_MODULE + ) + if (!isBRMenabled) { + // -----> enableModule batched session router module + const tx2 = await smartAccount.getEnableModuleData( + DEFAULT_BATCHED_SESSION_ROUTER_MODULE + ) + txArray.push(tx2) + } + txArray.push(setSessionAllowedTrx) + const userOpResponse1 = await smartAccount.sendTransaction(txArray, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) // this user op will enable the modules and setup session allowed calls + const transactionDetails = await userOpResponse1.wait() + expect(transactionDetails.success).toBe("true") + Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash) + + const usdcBalance = await checkBalance(smartAccountAddress, token) + const nativeTokenBalance = await checkBalance(smartAccountAddress) + + console.log({ usdcBalance, nativeTokenBalance }) + + expect(usdcBalance).toBeGreaterThan(0) + smartAccount = smartAccount.setActiveValidationModule(batchedSessionModule) + // WARNING* If the smart account does not have enough USDC, user op execution will FAIL + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function transfer(address _to, uint256 _value)"]), + functionName: "transfer", + args: [recipient, parseUnits("0.001", 6)] + }) + const encodedCall2 = encodeFunctionData({ + abi: parseAbi(["function transfer(address _to, uint256 _value)"]), + functionName: "transfer", + args: [ + "0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549", + parseUnits("0.001", 6) + ] + }) + const transferTx = { + to: "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a", + data: encodedCall + } + const transferTx2 = { + to: "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a", + data: encodedCall2 + } + const activeModule = smartAccount.activeValidationModule + expect(activeModule).toEqual(batchedSessionModule) + const maticBalanceBefore = await checkBalance(smartAccountAddress) + // failing with dummyTx because of invalid sessionKeyData + const userOpResponse2 = await smartAccount.sendTransaction( + [transferTx, transferTx2], + { + params: { + batchSessionParams: [ + { + sessionSigner: walletClient, + sessionValidationModule: erc20ModuleAddr + }, + { + sessionSigner: walletClient, + sessionValidationModule: mockSessionModuleAddr + } + ] + }, + paymasterServiceData: { + mode: PaymasterMode.SPONSORED + } + } + ) + const receipt = await userOpResponse2.wait() + console.log(receipt.userOpHash, "Batched user op hash") + expect(receipt.success).toBe("true") + expect(userOpResponse2.userOpHash).toBeTruthy() + expect(userOpResponse2.userOpHash).not.toBeNull() + const maticBalanceAfter = await checkBalance(smartAccountAddress) + expect(maticBalanceAfter).toEqual(maticBalanceBefore) + Logger.log( + `Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai` + ) + }, 60000) +}) diff --git a/tests/paymaster/read.test.ts b/tests/paymaster/read.test.ts new file mode 100644 index 000000000..a57af2d4d --- /dev/null +++ b/tests/paymaster/read.test.ts @@ -0,0 +1,145 @@ +import { + http, + type Hex, + createPublicClient, + createWalletClient, + encodeFunctionData, + parseAbi +} from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { beforeAll, describe, expect, test } from "vitest" +import { + type BiconomySmartAccountV2, + ERROR_MESSAGES, + createSmartAccountClient +} from "../../src/account" +import { + type FeeQuotesOrDataResponse, + PaymasterMode +} from "../../src/paymaster" +import { getConfig } from "../utils" + +describe.skip("Paymaster: Read", () => { + const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const { + chain, + chainId, + privateKey, + privateKeyTwo, + bundlerUrl, + paymasterUrl + } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + const sender = account.address + const recipient = accountTwo.address + const publicClient = createPublicClient({ + chain, + transport: http() + }) + let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] + let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] + + const [walletClient, walletClientTwo] = [ + createWalletClient({ + account, + chain, + transport: http() + }), + createWalletClient({ + account: accountTwo, + chain, + transport: http() + }) + ] + + beforeAll(async () => { + ;[smartAccount, smartAccountTwo] = await Promise.all( + [walletClient, walletClientTwo].map((client) => + createSmartAccountClient({ + chainId, + signer: client, + bundlerUrl, + paymasterUrl + }) + ) + ) + ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( + [smartAccount, smartAccountTwo].map((account) => + account.getAccountAddress() + ) + ) + }) + + test.concurrent( + "should expect several feeQuotes in resonse to empty tokenInfo fields", + async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + + const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { + paymasterServiceData: { mode: PaymasterMode.ERC20 } + }) + + expect(feeQuotesResponse.feeQuotes?.length).toBeGreaterThan(1) + } + ) + + test.concurrent( + "should get supported tokens from the paymaster", + async () => { + const tokens = await smartAccount.getSupportedTokens() + + expect(tokens.length).toBeGreaterThan(0) + expect(tokens[0]).toHaveProperty("tokenAddress") + expect(tokens[0]).toHaveProperty("symbol") + expect(tokens[0]).toHaveProperty("decimal") + expect(tokens[0]).toHaveProperty("premiumPercentage") + expect(tokens[0]).toHaveProperty("logoUrl") + }, + 60000 + ) + + test.concurrent( + "should throw and error if missing field for ERC20 Paymaster user op", + async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + + const feeQuotesResponse: FeeQuotesOrDataResponse = + await smartAccount.getTokenFees(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken: "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + } + }) + + expect(async () => + smartAccount.sendTransaction(transaction, { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + feeQuote: feeQuotesResponse.feeQuotes?.[0] + }, + simulationType: "validation" + }) + ).rejects.toThrow(ERROR_MESSAGES.SPENDER_REQUIRED) + }, + 60000 + ) +}) diff --git a/tests/paymaster/write.test.ts b/tests/paymaster/write.test.ts new file mode 100644 index 000000000..cb1170318 --- /dev/null +++ b/tests/paymaster/write.test.ts @@ -0,0 +1,303 @@ +import { + http, + type Hex, + createPublicClient, + createWalletClient, + encodeFunctionData, + parseAbi +} from "viem" +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" +import { beforeAll, describe, expect, test } from "vitest" +import { + type BiconomySmartAccountV2, + NATIVE_TOKEN_ALIAS, + createSmartAccountClient +} from "../../src/account" +import { PaymasterMode } from "../../src/paymaster" +import { testOnlyOnOptimism } from "../setupFiles" +import { checkBalance, getConfig, nonZeroBalance, topUp } from "../utils" + +describe("Paymaster:Write", () => { + const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const { + chain, + chainId, + privateKey, + privateKeyTwo, + bundlerUrl, + paymasterUrl + } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + const sender = account.address + const recipient = accountTwo.address + const publicClient = createPublicClient({ + chain, + transport: http() + }) + let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] + let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] + + const [walletClient, walletClientTwo] = [ + createWalletClient({ + account, + chain, + transport: http() + }), + createWalletClient({ + account: accountTwo, + chain, + transport: http() + }) + ] + + beforeAll(async () => { + ;[smartAccount, smartAccountTwo] = await Promise.all( + [walletClient, walletClientTwo].map((client) => + createSmartAccountClient({ + chainId, + signer: client, + bundlerUrl, + paymasterUrl + }) + ) + ) + ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( + [smartAccount, smartAccountTwo].map((account) => + account.getAccountAddress() + ) + ) + }) + + test("should mint an NFT with sponsorship", async () => { + await nonZeroBalance(smartAccountAddress) + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: [recipient] + }) + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + + const balance = await checkBalance(recipient, nftAddress) + const maticBalanceBefore = await checkBalance(smartAccountAddress) + + const response = await smartAccount.sendTransaction(transaction, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + simulationType: "validation" + }) + + const userOpReceipt = await response.wait(3) + expect(userOpReceipt.userOpHash).toBeTruthy() + expect(userOpReceipt.success).toBe("true") + + const maticBalanceAfter = await checkBalance(smartAccountAddress) + + expect(maticBalanceAfter).toEqual(maticBalanceBefore) + + const newBalance = (await checkBalance(recipient, nftAddress)) as bigint + + expect(newBalance - balance).toBe(1n) + }, 60000) + + test("should deploy a smart account with sponsorship", async () => { + const newPrivateKey = generatePrivateKey() + const newAccount = privateKeyToAccount(newPrivateKey) + + const newViemWallet = createWalletClient({ + account: newAccount, + chain, + transport: http() + }) + + const smartAccount = await createSmartAccountClient({ + signer: newViemWallet, + paymasterUrl, + bundlerUrl + }) + + const smartAccountAddress = await smartAccount.getAccountAddress() + const balance = await publicClient.getBalance({ + address: smartAccountAddress + }) + expect(balance).toBe(0n) + + const { wait } = await smartAccount.deploy({ + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const { success } = await wait() + + const byteCode = await publicClient.getBytecode({ + address: smartAccountAddress + }) + expect(success).toBe("true") + expect(byteCode).toBeTruthy() + }, 60000) + + test("should withdraw nativeToken with sponsorship", async () => { + await nonZeroBalance(smartAccountAddress) + + const balanceOfSABefore = await checkBalance(smartAccountAddress) + const balanceOfRecipientBefore = await checkBalance(sender) + + const { wait } = await smartAccount.withdraw( + [ + { + address: NATIVE_TOKEN_ALIAS, + amount: BigInt(1), + recipient: sender + } + ], + null, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + } + ) + + const { + receipt: { transactionHash }, + userOpHash, + success + } = await wait() + + expect(userOpHash).toBeTruthy() + expect(success).toBe("true") + expect(transactionHash).toBeTruthy() + + const balanceOfSAAfter = await checkBalance(smartAccountAddress) + const balanceOfRecipientAfter = await checkBalance(sender) + + expect(balanceOfSABefore - balanceOfSAAfter).toBe(1n) + expect(balanceOfRecipientAfter - balanceOfRecipientBefore).toBe(1n) + }, 25000) + + testOnlyOnOptimism( + "should mint an NFT on optimism with sponsorship", + async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: [recipient] + }) + + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + + const balance = await checkBalance(recipient, nftAddress) + + const maticBalanceBefore = await checkBalance(smartAccountAddress) + + const response = await smartAccount.sendTransaction(transaction, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + simulationType: "validation_and_execution" + }) + + const userOpReceipt = await response.wait(3) + expect(userOpReceipt.userOpHash).toBeTruthy() + expect(userOpReceipt.success).toBe("true") + + const maticBalanceAfter = await checkBalance(smartAccountAddress) + expect(maticBalanceAfter).toEqual(maticBalanceBefore) + const newBalance = (await checkBalance(recipient, nftAddress)) as bigint + + expect(newBalance - balance).toBe(1n) + }, + 50000 + ) + + test("should withdraw nativeToken and an erc20 token", async () => { + const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + + await nonZeroBalance(smartAccountAddress, token) + await nonZeroBalance(smartAccountAddress) + + const balanceOfSABefore = await checkBalance(smartAccountAddress) + const balanceOfRecipientBefore = await checkBalance(sender) + const tokenBalanceOfSABefore = await checkBalance( + smartAccountAddress, + token + ) + const tokenBalanceOfRecipientBefore = await checkBalance(sender, token) + + const { wait } = await smartAccount.withdraw( + [ + { address: token, amount: BigInt(1) }, + { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } + ], + sender, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + } + ) + + const { + receipt: { transactionHash }, + userOpHash, + success + } = await wait() + + expect(userOpHash).toBeTruthy() + expect(success).toBe("true") + expect(transactionHash).toBeTruthy() + + const balanceOfSAAfter = await checkBalance(smartAccountAddress) + const balanceOfRecipientAfter = await checkBalance(sender) + const tokenBalanceOfSAAfter = await checkBalance(smartAccountAddress, token) + const tokenBalanceOfRecipientAfter = await checkBalance(sender, token) + + expect(balanceOfSABefore - balanceOfSAAfter).toBe(1n) + expect(balanceOfRecipientAfter - balanceOfRecipientBefore).toBe(1n) + + expect(tokenBalanceOfSAAfter - tokenBalanceOfSABefore).toBe(-1n) + expect(tokenBalanceOfRecipientAfter - tokenBalanceOfRecipientBefore).toBe( + 1n + ) + }, 60000) + + test("should withdraw all native token", async () => { + await nonZeroBalance(smartAccountAddress) + const balanceOfSABefore = await checkBalance(smartAccountAddress) + const balanceOfRecipientBefore = await checkBalance(sender) + + const { wait } = await smartAccount.withdraw( + [] /* null or undefined or [] */, + sender, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } // Will leave no dust + } + ) + + const { + receipt: { transactionHash }, + userOpHash, + success + } = await wait() + + expect(userOpHash).toBeTruthy() + expect(success).toBe("true") + expect(transactionHash).toBeTruthy() + + const balanceOfSAAfter = await checkBalance(smartAccountAddress) + const balanceOfRecipientAfter = await checkBalance(sender) + + expect(balanceOfSAAfter).toBe(0n) + expect(balanceOfRecipientAfter).toBe( + balanceOfSABefore + balanceOfRecipientBefore + ) + + // Teardown: send back the native token to the smart account + const teardownHash = await walletClient.sendTransaction({ + to: smartAccountAddress, + value: balanceOfSABefore, + account, + chain + }) + expect(teardownHash).toBeTruthy() + }, 60000) +}) diff --git a/tests/setup-e2e-tests.ts b/tests/setup-e2e-tests.ts deleted file mode 100644 index 4d3d8af77..000000000 --- a/tests/setup-e2e-tests.ts +++ /dev/null @@ -1,150 +0,0 @@ -import { createWalletClient, http, createPublicClient } from "viem"; -import { JsonRpcProvider } from "@ethersproject/providers"; -import { Wallet } from "@ethersproject/wallet"; -import { privateKeyToAccount } from "viem/accounts"; -import { WalletClientSigner } from "@alchemy/aa-core"; -import { config } from "dotenv"; -import { E2E_TEST_CHAINS } from "./chains.config"; - -config(); - -beforeAll(async () => { - envVarCheck(); - - const privateKeyOne: `0x${string}` = `0x${process.env.E2E_PRIVATE_KEY_ONE}`; - const privateKeyTwo: `0x${string}` = `0x${process.env.E2E_PRIVATE_KEY_TWO}`; - const walletOne = privateKeyToAccount(privateKeyOne); - const walletTwo = privateKeyToAccount(privateKeyTwo); - - const promises = E2E_TEST_CHAINS.map((chain) => { - const ethersProvider = new JsonRpcProvider(chain.viemChain.rpcUrls.default.http[0]); - const ethersSignerOne = new Wallet(privateKeyOne, ethersProvider); - const ethersSignerTwo = new Wallet(privateKeyTwo, ethersProvider); - - const publicClient = createPublicClient({ - chain: chain.viemChain, - transport: http(), - }); - - const viemWalletClientOne = createWalletClient({ - account: walletOne, - chain: chain.viemChain, - transport: http(chain.viemChain.rpcUrls.default.http[0]), - }); - const viemWalletClientTwo = createWalletClient({ - account: walletTwo, - chain: chain.viemChain, - transport: http(chain.viemChain.rpcUrls.default.http[0]), - }); - const walletClientSignerOne = new WalletClientSigner(viemWalletClientOne, "viem"); - const walletClientSignerTwo = new WalletClientSigner(viemWalletClientTwo, "viem"); - - return Promise.all([ - Promise.all([ - { - ...chain, - publicClient, - account: walletOne, - publicAddress: walletOne.address, - viemWallet: viemWalletClientOne, - alchemyWalletClientSigner: walletClientSignerOne, - ethersProvider, - ethersSigner: ethersSignerOne, - privateKey: privateKeyOne, - }, - publicClient.getBalance({ - address: walletOne.address, - }), - ]), - Promise.all([ - { - ...chain, - publicClient, - account: walletTwo, - publicAddress: walletTwo.address, - viemWallet: viemWalletClientTwo, - alchemyWalletClientSigner: walletClientSignerTwo, - ethersProvider, - ethersSigner: ethersSignerTwo, - privateKey: privateKeyTwo, - }, - publicClient.getBalance({ - address: walletTwo.address, - }), - ]), - ]); - }); - const balancesPerChain = await Promise.all(promises); - - // @ts-ignore - testDataPerChain = balancesPerChain.map((dataAndBalanceArray) => { - const sortedBalances = dataAndBalanceArray - .map(([datum, balance]) => ({ - ...datum, - balance, - })) - .sort((a, b) => { - if (a.balance > b.balance) { - return -1; - } else if (a.balance > b.balance) { - return 1; - } else { - return 0; - } - }); - - const whaleBalance = sortedBalances[0]; - const minnowBalance = sortedBalances[1]; - - const commonData = { - publicClient: whaleBalance.publicClient, - chainId: whaleBalance.chainId, - bundlerUrl: whaleBalance.bundlerUrl, - deploymentCost: whaleBalance.deploymentCost, - nftAddress: whaleBalance.nftAddress, - entryPointAddress: whaleBalance.entryPointAddress, - viemChain: whaleBalance.viemChain, - ethersProvider: whaleBalance.ethersProvider, - paymasterUrl: whaleBalance.paymasterUrl, - biconomyPaymasterApiKey: whaleBalance.biconomyPaymasterApiKey, - }; - - const datum = { - ...commonData, - whale: { - balance: whaleBalance.balance, - viemWallet: whaleBalance.viemWallet, - alchemyWalletClientSigner: whaleBalance.alchemyWalletClientSigner, - publicAddress: whaleBalance.publicAddress, - account: whaleBalance.account, - ethersSigner: whaleBalance.ethersSigner, - privateKey: whaleBalance.privateKey, - }, - minnow: { - balance: minnowBalance.balance, - viemWallet: minnowBalance.viemWallet, - alchemyWalletClientSigner: minnowBalance.alchemyWalletClientSigner, - publicAddress: minnowBalance.publicAddress, - account: minnowBalance.account, - ethersSigner: whaleBalance.ethersSigner, - privateKey: minnowBalance.privateKey, - }, - }; - return datum; - }); -}); - -const envVarCheck = () => { - const REQUIRED_FIELDS = [ - "E2E_PRIVATE_KEY_ONE", - "E2E_PRIVATE_KEY_TWO", - "E2E_BICO_PAYMASTER_KEY_MUMBAI", - "E2E_BICO_PAYMASTER_KEY_BASE", - "E2E_BICO_PAYMASTER_KEY_OP", - ]; - const hasFields = REQUIRED_FIELDS.every((field) => !!process.env[field]); - if (!hasFields) { - console.error("Missing env var"); - process.exit(1); - } -}; diff --git a/tests/setup-unit-tests.ts b/tests/setup-unit-tests.ts deleted file mode 100644 index d2fdba7d3..000000000 --- a/tests/setup-unit-tests.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { createWalletClient, http, createPublicClient } from "viem"; -import { WalletClientSigner } from "@alchemy/aa-core"; -import { JsonRpcProvider } from "@ethersproject/providers"; -import { Wallet } from "@ethersproject/wallet"; -import { UNIT_TEST_CHAIN } from "./chains.config"; -import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; - -beforeAll(() => { - const { chainId, bundlerUrl, viemChain, entryPointAddress, deploymentCost, nftAddress } = UNIT_TEST_CHAIN; - const privateKeyOne = generatePrivateKey(); - const accountOne = privateKeyToAccount(privateKeyOne); - - const ethersProvider = new JsonRpcProvider(viemChain.rpcUrls.default.http[0]); - const ethersSignerOne = new Wallet(privateKeyOne, ethersProvider); - - const viemWalletClientOne = createWalletClient({ - account: accountOne, - chain: viemChain, - transport: http(viemChain.rpcUrls.default.http[0]), - }); - - const walletClientSignerOne = new WalletClientSigner(viemWalletClientOne, "viem"); - const publicAddressOne = accountOne.address; - const publicClient = createPublicClient({ - chain: viemChain, - transport: http(), - }); - - const privateKeyTwo = generatePrivateKey(); - const accountTwo = privateKeyToAccount(privateKeyTwo); - - const ethersSignerTwo = new Wallet(privateKeyTwo, ethersProvider); - - const viemWalletClientTwo = createWalletClient({ - account: accountTwo, - chain: viemChain, - transport: http(viemChain.rpcUrls.default.http[0]), - }); - const walletClientSignerTwo = new WalletClientSigner(viemWalletClientTwo, "viem"); - const publicAddressTwo = accountTwo.address; - - const whale = { - viemWallet: viemWalletClientOne, - alchemyWalletClientSigner: walletClientSignerOne, - balance: 0, - publicAddress: publicAddressOne, - ethersSigner: ethersSignerOne, - account: accountOne, - privateKey: privateKeyOne, - }; - - const minnow = { - viemWallet: viemWalletClientTwo, - alchemyWalletClientSigner: walletClientSignerTwo, - balance: 0, - publicAddress: publicAddressTwo, - ethersSigner: ethersSignerTwo, - account: accountTwo, - privateKey: privateKeyTwo, - }; - - // @ts-ignore - testDataPerChain = [{ nftAddress, deploymentCost, whale, minnow, publicClient, chainId, bundlerUrl, entryPointAddress, viemChain, ethersProvider }]; -}); diff --git a/tests/setupFiles.ts b/tests/setupFiles.ts new file mode 100644 index 000000000..fea74d4a2 --- /dev/null +++ b/tests/setupFiles.ts @@ -0,0 +1,9 @@ +import { test } from "vitest" + +export const testOnlyOnSpecificNetwork = (chainId: number) => { + return Number(process.env.CHAIN_ID || 0) === chainId ? test : test.skip +} + +export const testOnlyOnOptimism = testOnlyOnSpecificNetwork(10) +export const testOnlyOnArbitrum = testOnlyOnSpecificNetwork(42161) +export const testOnlyOnBaseSopelia = testOnlyOnSpecificNetwork(84532) diff --git a/tests/utils.ts b/tests/utils.ts index 846278d95..69b88d31b 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -1,46 +1,189 @@ -import { Hex, PublicClient, parseAbi } from "viem"; +import { + http, + type Chain, + type Hex, + createPublicClient, + createWalletClient, + parseAbi +} from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { Logger, getChain } from "../src/account" +import { + extractChainIdFromBundlerUrl, + extractChainIdFromPaymasterUrl +} from "../src/bundler" + +export const getEnvVars = () => { + const fields = [ + "BUNDLER_URL", + "E2E_PRIVATE_KEY_ONE", + "E2E_PRIVATE_KEY_TWO", + "E2E_BICO_PAYMASTER_KEY_AMOY", + "E2E_BICO_PAYMASTER_KEY_BASE", + "CHAIN_ID" + ] + const errorFields = fields.filter((field) => !process.env[field]) + if (errorFields.length) { + throw new Error( + `Missing environment variable${ + errorFields.length > 1 ? "s" : "" + }: ${errorFields.join(", ")}` + ) + } + return { + bundlerUrl: process.env.BUNDLER_URL || "", + privateKey: process.env.E2E_PRIVATE_KEY_ONE || "", + privateKeyTwo: process.env.E2E_PRIVATE_KEY_TWO || "", + paymasterUrl: `https://paymaster.biconomy.io/api/v1/80002/${ + process.env.E2E_BICO_PAYMASTER_KEY_AMOY || "" + }`, + paymasterUrlTwo: `https://paymaster.biconomy.io/api/v1/84532/${ + process.env.E2E_BICO_PAYMASTER_KEY_BASE || "" + }`, + chainId: process.env.CHAIN_ID || "0" + } +} + +export type TestConfig = { + chain: Chain + chainId: number + paymasterUrl: string + paymasterUrlTwo: string + bundlerUrl: string + privateKey: string + privateKeyTwo: string +} +export const getConfig = (): TestConfig => { + const { + paymasterUrl, + paymasterUrlTwo, + bundlerUrl, + chainId: chainIdFromEnv, + privateKey, + privateKeyTwo + } = getEnvVars() + const chains = [Number.parseInt(chainIdFromEnv)] + const chainId = chains[0] + const chain = getChain(chainId) + + try { + const chainIdFromBundlerUrl = extractChainIdFromBundlerUrl(bundlerUrl) + chains.push(chainIdFromBundlerUrl) + } catch (e) {} + + try { + const chainIdFromPaymasterUrl = extractChainIdFromPaymasterUrl(paymasterUrl) + chains.push(chainIdFromPaymasterUrl) + } catch (e) {} + + const allChainsMatch = chains.every((chain) => chain === chains[0]) + + if (!allChainsMatch) { + throw new Error("Chain IDs do not match") + } + + return { + chain, + chainId, + paymasterUrl, + paymasterUrlTwo, + bundlerUrl, + privateKey, + privateKeyTwo + } +} + +export const checkBalance = (owner: Hex, tokenAddress?: Hex) => { + const { chain } = getConfig() + + const publicClient = createPublicClient({ + chain, + transport: http() + }) -export const checkBalance = (publicClient: PublicClient, address: Hex, tokenAddress?: Hex): Promise<bigint> => { if (!tokenAddress) { - return publicClient.getBalance({ address }); + return publicClient.getBalance({ address: owner }) } return publicClient.readContract({ address: tokenAddress, - abi: parseAbi(["function balanceOf(address owner) view returns (uint balance)"]), + abi: parseAbi([ + "function balanceOf(address owner) view returns (uint balance)" + ]), functionName: "balanceOf", - // @ts-ignore - args: [address], - }); -}; - -export const getMockBundlerUrl = (chainId: number) => `https://bundler.biconomy.io/api/v2/${chainId}/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f14`; - -// TODO(Joe): Make human readable -export const entryPointABI = [ - { - inputs: [ - { - components: [ - { internalType: "address", name: "sender", type: "address" }, - { internalType: "uint256", name: "nonce", type: "uint256" }, - { internalType: "bytes", name: "initCode", type: "bytes" }, - { internalType: "bytes", name: "callData", type: "bytes" }, - { internalType: "uint256", name: "callGasLimit", type: "uint256" }, - { internalType: "uint256", name: "verificationGasLimit", type: "uint256" }, - { internalType: "uint256", name: "preVerificationGas", type: "uint256" }, - { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, - { internalType: "uint256", name: "maxPriorityFeePerGas", type: "uint256" }, - { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, - { internalType: "bytes", name: "signature", type: "bytes" }, - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple", - }, - ], - name: "getUserOpHash", - outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], - stateMutability: "view", - type: "function", - }, -]; + args: [owner] + }) +} + +export const nonZeroBalance = async (address: Hex, tokenAddress?: Hex) => { + const balance = await checkBalance(address, tokenAddress) + if (balance > BigInt(0)) return + throw new Error( + `Insufficient balance ${ + tokenAddress ? `of token ${tokenAddress}` : "of native token" + } during test setup of owner: ${address}` + ) +} + +export const topUp = async ( + recipient: Hex, + amount = BigInt(1000000), + token?: Hex +) => { + const { chain, privateKey } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const sender = account.address + + const publicClient = createPublicClient({ + chain, + transport: http() + }) + + const balanceOfSender = await checkBalance(sender, token) + const balanceOfRecipient = await checkBalance(recipient, token) + + if (balanceOfRecipient > amount) { + Logger.log( + `balanceOfRecipient (${recipient}) already has enough ${ + token ?? "native token" + } (${balanceOfRecipient}) during topUp` + ) + return await Promise.resolve() + } + + if (balanceOfSender < amount) { + throw new Error( + `Insufficient ${ + token ? token : "" + }balance during test setup: ${balanceOfSender}` + ) + } + + Logger.log(`topping up (${recipient}): (${balanceOfRecipient}).`) + + const walletClient = createWalletClient({ + account, + chain, + transport: http() + }) + + if (token) { + const hash = await walletClient.writeContract({ + address: token, + abi: parseAbi([ + "function transfer(address recipient, uint256 amount) external" + ]), + functionName: "transfer", + args: [recipient, amount] + }) + await publicClient.waitForTransactionReceipt({ hash }) + } else { + const hash = await walletClient.sendTransaction({ + to: recipient, + value: amount + }) + await publicClient.waitForTransactionReceipt({ hash }) + } +} + +export const getBundlerUrl = (chainId: number) => + `https://bundler.biconomy.io/api/v2/${chainId}/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f14` diff --git a/tests/vitest.config.ts b/tests/vitest.config.ts new file mode 100644 index 000000000..d7dd2a794 --- /dev/null +++ b/tests/vitest.config.ts @@ -0,0 +1,35 @@ +import { join } from "node:path" +import { defineConfig } from "vitest/config" + +export default defineConfig({ + test: { + coverage: { + all: false, + provider: "v8", + reporter: process.env.CI + ? ["json-summary", "json"] + : ["text", "json", "html"], + exclude: [ + "**/errors/utils.ts", + "**/_cjs/**", + "**/_esm/**", + "**/_types/**", + "**/*.test.ts", + "**/test/**" + ], + include: ["src/**/*.ts"], + thresholds: { + lines: 80, + functions: 50, + branches: 60, + statements: 80 + } + }, + environment: "node", + include: ["tests/**/*.test.ts"], + setupFiles: [join(__dirname, "./setupFiles.ts")], + globalSetup: [join(__dirname, "./globalSetup.ts")], + // hookTimeout: 20_000, + testTimeout: 20_000 + } +}) diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json deleted file mode 100644 index e4b76f44d..000000000 --- a/tsconfig.eslint.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["packages/**/*"] -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 8172cdac6..000000000 --- a/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "module": "commonjs", - "declaration": true, - "sourceMap": true, - "strict": true, - "esModuleInterop": true, - "lib": ["es2020"], - "types": ["node", "jest"] - }, - "include": ["packages/**/*"], - "references": [ - { "path": "./packages/transak" }, - { "path": "./packages/bundler" }, - { "path": "./packages/particle-auth" }, - { "path": "./packages/paymaster" }, - { "path": "./packages/account" }, - { "path": "./packages/common" }, - { "path": "./packages/modules" }, - ] -} diff --git a/tsconfig.settings.json b/tsconfig.settings.json deleted file mode 100644 index fbd122a5e..000000000 --- a/tsconfig.settings.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2019" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, - "module": "CommonJS" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, - "allowJs": false /* Allow javascript files to be compiled. */, - "declaration": true /* Generates corresponding '.d.ts' file. */, - "sourceMap": true /* Generates corresponding '.map' file. */, - "strict": true /* Enable all strict type-checking options. */, - "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, - "strictNullChecks": true /* Enable strict null checks. */, - "strictFunctionTypes": true /* Enable strict checking of function types. */, - "strictBindCallApply": true /* Enable strict 'bind', 'call', and 'apply' methods on functions. */, - "strictPropertyInitialization": true /* Enable strict checking of property initialization in classes. */, - "noImplicitThis": true /* Raise error on 'this' expressions with an implied 'any' type. */, - "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */, - "noUnusedParameters": true /* Report errors on unused parameters. */, - "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, - "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, - "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, - "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - "experimentalDecorators": true /* Enables experimental support for ES7 decorators. */, - "skipLibCheck": true /* Skip type checking of declaration files. */, - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */, - "resolveJsonModule": true - } -} diff --git a/tsconfig/tsconfig.base.json b/tsconfig/tsconfig.base.json new file mode 100644 index 000000000..671115660 --- /dev/null +++ b/tsconfig/tsconfig.base.json @@ -0,0 +1,32 @@ +{ + "include": [], + "compilerOptions": { + "incremental": false, + "useDefineForClassFields": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "useUnknownInCatchVariables": true, + "noImplicitOverride": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "allowJs": false, + "checkJs": false, + "esModuleInterop": false, + "allowSyntheticDefaultImports": false, + "forceConsistentCasingInFileNames": true, + "verbatimModuleSyntax": true, + "importHelpers": true, + "moduleResolution": "NodeNext", + "module": "NodeNext", + "target": "ES2021", + "lib": ["ES2022"], + "skipLibCheck": true, + "noErrorTruncation": true, + "noEmit": true, + "strict": true + }, + "tsc-alias": { + "resolveFullPaths": true, + "verbose": false + } +} \ No newline at end of file diff --git a/tsconfig/tsconfig.cjs.json b/tsconfig/tsconfig.cjs.json new file mode 100644 index 000000000..d5607ac12 --- /dev/null +++ b/tsconfig/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "outDir": "../dist/_cjs", + "removeComments": true, + "verbatimModuleSyntax": false, + "noEmit": false + } +} diff --git a/tsconfig/tsconfig.esm.json b/tsconfig/tsconfig.esm.json new file mode 100644 index 000000000..136a81fc1 --- /dev/null +++ b/tsconfig/tsconfig.esm.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "es2015", + "outDir": "../dist/_esm", + "noEmit": false + } +} diff --git a/tsconfig/tsconfig.json b/tsconfig/tsconfig.json new file mode 100644 index 000000000..2c9c1e634 --- /dev/null +++ b/tsconfig/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.base.json", + "include": [ + "../src/" + ], + "exclude": [ + "../src/**/*.test.ts", + "../src/**/*.test-d.ts", + "../src/**/*.bench.ts" + ], + "compilerOptions": { + "moduleResolution": "node", + "sourceMap": true, + "rootDir": "../src" + } +} \ No newline at end of file diff --git a/tsconfig/tsconfig.types.json b/tsconfig/tsconfig.types.json new file mode 100644 index 000000000..bb70b996d --- /dev/null +++ b/tsconfig/tsconfig.types.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "esnext", + "outDir": "../dist/_esm", + "declarationDir": "../dist/_types", + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true, + "noEmit": false + } +} diff --git a/packages/account/typedoc.json b/typedoc.json similarity index 100% rename from packages/account/typedoc.json rename to typedoc.json diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 6224f5ea9..000000000 --- a/yarn.lock +++ /dev/null @@ -1,9707 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# 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== - -"@adraffy/ens-normalize@1.10.0": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" - integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== - -"@alchemy/aa-core@^3.1.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@alchemy/aa-core/-/aa-core-3.6.1.tgz#af718313276458910d06030ee0aa946168e442f9" - integrity sha512-WVDacDuXcuePTHQSlKZ0nZvRHNSB48iUhh7fVSqchiStjq7BybdGg35AZf8eg5vcepkwSHekNKCp5LxKwpFCQg== - dependencies: - abitype "^0.8.3" - eventemitter3 "^5.0.1" - viem "^2.8.6" - zod "^3.22.4" - -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" - integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== - dependencies: - "@babel/highlight" "^7.24.2" - picocolors "^1.0.0" - -"@babel/compat-data@^7.23.5": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.1.tgz#31c1f66435f2a9c329bb5716a6d6186c516c3742" - integrity sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA== - -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.3.tgz#568864247ea10fbd4eff04dda1e05f9e2ea985c3" - integrity sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.1" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.1" - "@babel/parser" "^7.24.1" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.24.1", "@babel/generator@^7.7.2": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.1.tgz#e67e06f68568a4ebf194d1c6014235344f0476d0" - integrity sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A== - dependencies: - "@babel/types" "^7.24.0" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.22.15": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" - integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== - dependencies: - "@babel/types" "^7.24.0" - -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" - integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" - integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== - -"@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/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helpers@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.1.tgz#183e44714b9eba36c3038e442516587b1e0a1a94" - integrity sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg== - dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" - -"@babel/highlight@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" - integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.1.tgz#1e416d3627393fab1cb5b0f2f1796a100ae9133a" - integrity sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.7.2": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" - integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" - integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/runtime@^7.21.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.1.tgz#431f9a794d173b53720e69a6464abc6f0e2a5c57" - integrity sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" - -"@babel/traverse@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" - integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== - dependencies: - "@babel/code-frame" "^7.24.1" - "@babel/generator" "^7.24.1" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.1" - "@babel/types" "^7.24.0" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.3.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@colors/colors@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" - integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@dabh/diagnostics@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" - integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== - dependencies: - colorspace "1.1.x" - enabled "2.0.x" - kuler "^2.0.0" - -"@esbuild/aix-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" - integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== - -"@esbuild/android-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" - integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== - -"@esbuild/android-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" - integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== - -"@esbuild/android-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" - integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== - -"@esbuild/darwin-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" - integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== - -"@esbuild/darwin-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" - integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== - -"@esbuild/freebsd-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" - integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== - -"@esbuild/freebsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" - integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== - -"@esbuild/linux-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" - integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== - -"@esbuild/linux-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" - integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== - -"@esbuild/linux-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" - integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== - -"@esbuild/linux-loong64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" - integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== - -"@esbuild/linux-mips64el@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" - integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== - -"@esbuild/linux-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" - integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== - -"@esbuild/linux-riscv64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" - integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== - -"@esbuild/linux-s390x@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" - integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== - -"@esbuild/linux-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" - integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== - -"@esbuild/netbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" - integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== - -"@esbuild/openbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" - integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== - -"@esbuild/sunos-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" - integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== - -"@esbuild/win32-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" - integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== - -"@esbuild/win32-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" - integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== - -"@esbuild/win32-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" - integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== - -"@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.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - 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.57.0": - version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== - -"@ethereumjs/rlp@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" - integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== - -"@ethereumjs/util@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" - integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== - dependencies: - "@ethereumjs/rlp" "^4.0.1" - ethereum-cryptography "^2.0.0" - micro-ftch "^0.3.1" - -"@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@^5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/wallet@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== - -"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== - dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.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.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== - -"@hutson/parse-repository-url@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" - integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" - -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@lerna/child-process@7.4.2": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-7.4.2.tgz#a2fd013ac2150dc288270d3e0d0b850c06bec511" - integrity sha512-je+kkrfcvPcwL5Tg8JRENRqlbzjdlZXyaR88UcnCdNW0AJ1jX9IfHRys1X7AwSroU2ug8ESNC+suoBw1vX833Q== - dependencies: - chalk "^4.1.0" - execa "^5.0.0" - strong-log-transformer "^2.1.0" - -"@lerna/create@7.4.2": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-7.4.2.tgz#f845fad1480e46555af98bd39af29571605dddc9" - integrity sha512-1wplFbQ52K8E/unnqB0Tq39Z4e+NEoNrpovEnl6GpsTUrC6WDp8+w0Le2uCBV0hXyemxChduCkLz4/y1H1wTeg== - dependencies: - "@lerna/child-process" "7.4.2" - "@npmcli/run-script" "6.0.2" - "@nx/devkit" ">=16.5.1 < 17" - "@octokit/plugin-enterprise-rest" "6.0.1" - "@octokit/rest" "19.0.11" - byte-size "8.1.1" - chalk "4.1.0" - clone-deep "4.0.1" - cmd-shim "6.0.1" - columnify "1.6.0" - conventional-changelog-core "5.0.1" - conventional-recommended-bump "7.0.1" - cosmiconfig "^8.2.0" - dedent "0.7.0" - execa "5.0.0" - fs-extra "^11.1.1" - get-stream "6.0.0" - git-url-parse "13.1.0" - glob-parent "5.1.2" - globby "11.1.0" - graceful-fs "4.2.11" - has-unicode "2.0.1" - ini "^1.3.8" - init-package-json "5.0.0" - inquirer "^8.2.4" - is-ci "3.0.1" - is-stream "2.0.0" - js-yaml "4.1.0" - libnpmpublish "7.3.0" - load-json-file "6.2.0" - lodash "^4.17.21" - make-dir "4.0.0" - minimatch "3.0.5" - multimatch "5.0.0" - node-fetch "2.6.7" - npm-package-arg "8.1.1" - npm-packlist "5.1.1" - npm-registry-fetch "^14.0.5" - npmlog "^6.0.2" - nx ">=16.5.1 < 17" - p-map "4.0.0" - p-map-series "2.1.0" - p-queue "6.6.2" - p-reduce "^2.1.0" - pacote "^15.2.0" - pify "5.0.0" - read-cmd-shim "4.0.0" - read-package-json "6.0.4" - resolve-from "5.0.0" - rimraf "^4.4.1" - semver "^7.3.4" - signal-exit "3.0.7" - slash "^3.0.0" - ssri "^9.0.1" - strong-log-transformer "2.1.0" - tar "6.1.11" - temp-dir "1.0.0" - upath "2.0.1" - uuid "^9.0.0" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "5.0.0" - write-file-atomic "5.0.1" - write-pkg "4.0.0" - yargs "16.2.0" - yargs-parser "20.2.4" - -"@metamask/eth-sig-util@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" - integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^6.2.1" - ethjs-util "^0.1.6" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.1" - -"@noble/curves@1.2.0", "@noble/curves@~1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/curves@1.3.0", "@noble/curves@~1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" - integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== - dependencies: - "@noble/hashes" "1.3.3" - -"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" - integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== - -"@noble/hashes@1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - -"@noble/hashes@1.3.3", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" - integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== - -"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" - integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@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.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@nomicfoundation/edr-darwin-arm64@0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.3.3.tgz#0618dbdf1c832f8e61c77540e7188c13fdd5b658" - integrity sha512-E9VGsUD+1Ga4mn/5ooHsMi8JEfhZbKP6CXN/BhJ8kXbIC10NqTD1RuhCKGRtYq4vqH/3Nfq25Xg8E8RWOF4KBQ== - -"@nomicfoundation/edr-darwin-x64@0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.3.3.tgz#567ee0bca8d019085e8dd95330e7c03f16c66a79" - integrity sha512-vkZXZ1ydPg+Ijb2iyqENA+KCkxGTCUWG5itCSliiA0Li2YE7ujDMGhheEpFp1WVlZadviz0bfk1rZXbCqlirpg== - -"@nomicfoundation/edr-linux-arm64-gnu@0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.3.3.tgz#3956b4d7a0127e2259351626c92698c4ce6ecf05" - integrity sha512-gdIg0Yj1qqS9wVuywc5B/+DqKylfUGB6/CQn/shMqwAfsAVAVpchkhy66PR+REEx7fh/GkNctxLlENXPeLzDiA== - -"@nomicfoundation/edr-linux-arm64-musl@0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.3.3.tgz#139f801939ed467f1719a2ab014993838008eefb" - integrity sha512-AXZ08MFvhNeBZbOBNmz1SJ/DMrMOE2mHEJtaNnsctlxIunjxfrWww4q+WXB34jbr9iaVYYlPsaWe5sueuw6s3Q== - -"@nomicfoundation/edr-linux-x64-gnu@0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.3.3.tgz#b5994caa1a8bb4afca5f079ad7dd99edb26c6c45" - integrity sha512-xElOs1U+E6lBLtv1mnJ+E8nr2MxZgKiLo8bZAgBboy9odYtmkDVwhMjtsFKSuZbGxFtsSyGRT4cXw3JAbtUDeA== - -"@nomicfoundation/edr-linux-x64-musl@0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.3.3.tgz#536c1d1dfd2fc7d7ad6ed6e14ed9a12322d88ba6" - integrity sha512-2Fe6gwm1RAGQ/PfMYiaSba2OrFp8zzYWh+am9lYObOFjV9D+A1zhIzfy0UC74glPks5eV8eY4pBPrVR042m2Nw== - -"@nomicfoundation/edr-win32-arm64-msvc@0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.3.3.tgz#f71609644d8585c2ec71580bf75c2fd036ee58b0" - integrity sha512-8NHyxIsFrl0ufSQ/ErqF2lKIa/gz1gaaa1a2vKkDEqvqCUcPhBTYhA5NHgTPhLETFTnCFr0z+YbctFCyjh4qrA== - -"@nomicfoundation/edr-win32-ia32-msvc@0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.3.3.tgz#baa5eaacb1fff107d02f0e6a33dee9521fd2bf37" - integrity sha512-0F6hM0kGia4dQVb/kauho9JcP1ozWisY2/She+ISR5ceuhzmAwQJluM0g+0TYDME0LtxBxiMPq/yPiZMQeq31w== - -"@nomicfoundation/edr-win32-x64-msvc@0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.3.3.tgz#7562e061b2481f87bb1ace30513a2ad38c469836" - integrity sha512-d75q1uaMb6z9i+GQZoblbOfFBvlBnWc+5rB13UWRkCOJSnoYwyFWhGJx5GeM59gC7aIblc5VD9qOAhHuvM9N+w== - -"@nomicfoundation/edr@^0.3.1": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.3.3.tgz#0ed8619ea2ac644bf87cdc09dd1a8f465a859bcc" - integrity sha512-zP+e+3B1nEUx6bW5BPnIzCQbkhmYfdMBJdiVggTqqTfAA82sOkdOG7wsOMcz5qF3fYfx/irNRM1kgc9HVFIbpQ== - optionalDependencies: - "@nomicfoundation/edr-darwin-arm64" "0.3.3" - "@nomicfoundation/edr-darwin-x64" "0.3.3" - "@nomicfoundation/edr-linux-arm64-gnu" "0.3.3" - "@nomicfoundation/edr-linux-arm64-musl" "0.3.3" - "@nomicfoundation/edr-linux-x64-gnu" "0.3.3" - "@nomicfoundation/edr-linux-x64-musl" "0.3.3" - "@nomicfoundation/edr-win32-arm64-msvc" "0.3.3" - "@nomicfoundation/edr-win32-ia32-msvc" "0.3.3" - "@nomicfoundation/edr-win32-x64-msvc" "0.3.3" - -"@nomicfoundation/ethereumjs-common@4.0.4": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb" - integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg== - dependencies: - "@nomicfoundation/ethereumjs-util" "9.0.4" - -"@nomicfoundation/ethereumjs-rlp@5.0.4": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" - integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== - -"@nomicfoundation/ethereumjs-tx@5.0.4": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" - integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-util@9.0.4": - version "9.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38" - integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.4" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" - integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== - -"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" - integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== - -"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" - integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== - -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" - integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== - -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" - integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== - -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" - integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== - -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" - integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== - -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" - integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== - -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" - integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== - -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" - integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== - -"@nomicfoundation/solidity-analyzer@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" - integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== - optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" - -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/fs@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" - integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== - dependencies: - "@gar/promisify" "^1.1.3" - semver "^7.3.5" - -"@npmcli/fs@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" - integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== - dependencies: - semver "^7.3.5" - -"@npmcli/git@^4.0.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.1.0.tgz#ab0ad3fd82bc4d8c1351b6c62f0fa56e8fe6afa6" - integrity sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ== - dependencies: - "@npmcli/promise-spawn" "^6.0.0" - lru-cache "^7.4.4" - npm-pick-manifest "^8.0.0" - proc-log "^3.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^3.0.0" - -"@npmcli/installed-package-contents@^2.0.1": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" - integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== - dependencies: - npm-bundled "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/move-file@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" - integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/node-gyp@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" - integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== - -"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" - integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== - dependencies: - which "^3.0.0" - -"@npmcli/run-script@6.0.2", "@npmcli/run-script@^6.0.0": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885" - integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== - dependencies: - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/promise-spawn" "^6.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^3.0.0" - which "^3.0.0" - -"@nrwl/devkit@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-16.10.0.tgz#ac8c5b4db00f12c4b817c937be2f7c4eb8f2593c" - integrity sha512-fRloARtsDQoQgQ7HKEy0RJiusg/HSygnmg4gX/0n/Z+SUS+4KoZzvHjXc6T5ZdEiSjvLypJ+HBM8dQzIcVACPQ== - dependencies: - "@nx/devkit" "16.10.0" - -"@nrwl/tao@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-16.10.0.tgz#94642a0380709b8e387e1e33705a5a9624933375" - integrity sha512-QNAanpINbr+Pod6e1xNgFbzK1x5wmZl+jMocgiEFXZ67KHvmbD6MAQQr0MMz+GPhIu7EE4QCTLTyCEMlAG+K5Q== - dependencies: - nx "16.10.0" - tslib "^2.3.0" - -"@nx/devkit@16.10.0", "@nx/devkit@>=16.5.1 < 17": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-16.10.0.tgz#7e466be2dee2dcb1ccaf286786ca2a0a639aa007" - integrity sha512-IvKQqRJFDDiaj33SPfGd3ckNHhHi6ceEoqCbAP4UuMXOPPVOX6H0KVk+9tknkPb48B7jWIw6/AgOeWkBxPRO5w== - dependencies: - "@nrwl/devkit" "16.10.0" - ejs "^3.1.7" - enquirer "~2.3.6" - ignore "^5.0.4" - semver "7.5.3" - tmp "~0.2.1" - tslib "^2.3.0" - -"@nx/nx-darwin-arm64@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.10.0.tgz#0c73010cac7a502549483b12bad347da9014e6f1" - integrity sha512-YF+MIpeuwFkyvM5OwgY/rTNRpgVAI/YiR0yTYCZR+X3AAvP775IVlusNgQ3oedTBRUzyRnI4Tknj1WniENFsvQ== - -"@nx/nx-darwin-x64@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-16.10.0.tgz#2ccf270418d552fd0a8e0d6089aee4944315adaa" - integrity sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg== - -"@nx/nx-freebsd-x64@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.10.0.tgz#c3ee6914256e69493fed9355b0d6661d0e86da44" - integrity sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw== - -"@nx/nx-linux-arm-gnueabihf@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.10.0.tgz#a961eccbb38acb2da7fc125b29d1fead0b39152f" - integrity sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA== - -"@nx/nx-linux-arm64-gnu@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.10.0.tgz#795f20072549d03822b5c4639ef438e473dbb541" - integrity sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g== - -"@nx/nx-linux-arm64-musl@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.10.0.tgz#f2428ee6dbe2b2c326e8973f76c97666def33607" - integrity sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ== - -"@nx/nx-linux-x64-gnu@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.10.0.tgz#d36c2bcf94d49eaa24e3880ddaf6f1f617de539b" - integrity sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA== - -"@nx/nx-linux-x64-musl@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.10.0.tgz#78bd2ab97a583b3d4ea3387b67fd7b136907493c" - integrity sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q== - -"@nx/nx-win32-arm64-msvc@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.10.0.tgz#ef20ec8d0c83d66e73e20df12d2c788b8f866396" - integrity sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA== - -"@nx/nx-win32-x64-msvc@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.10.0.tgz#7410a51d0f8be631eec9552f01b2e5946285927c" - integrity sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA== - -"@octokit/auth-token@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" - integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== - -"@octokit/core@^4.2.1": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" - integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" - integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== - dependencies: - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^5.0.0": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" - integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== - dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^18.0.0": - version "18.1.1" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz#09bdfdabfd8e16d16324326da5148010d765f009" - integrity sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw== - -"@octokit/plugin-enterprise-rest@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" - integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== - -"@octokit/plugin-paginate-rest@^6.1.2": - version "6.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" - integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== - dependencies: - "@octokit/tsconfig" "^1.0.2" - "@octokit/types" "^9.2.3" - -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== - -"@octokit/plugin-rest-endpoint-methods@^7.1.2": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz#37a84b171a6cb6658816c82c4082ac3512021797" - integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== - dependencies: - "@octokit/types" "^10.0.0" - -"@octokit/request-error@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" - integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^6.0.0": - version "6.2.8" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" - integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@19.0.11": - version "19.0.11" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.11.tgz#2ae01634fed4bd1fca5b642767205ed3fd36177c" - integrity sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw== - dependencies: - "@octokit/core" "^4.2.1" - "@octokit/plugin-paginate-rest" "^6.1.2" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^7.1.2" - -"@octokit/tsconfig@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" - integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== - -"@octokit/types@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" - integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== - dependencies: - "@octokit/openapi-types" "^18.0.0" - -"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" - integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== - dependencies: - "@octokit/openapi-types" "^18.0.0" - -"@parcel/watcher@2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" - integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== - dependencies: - node-addon-api "^3.2.1" - node-gyp-build "^4.3.0" - -"@particle-network/analytics@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@particle-network/analytics/-/analytics-1.0.1.tgz#b3657cf7aaea57f90a7ac2c03f72b8786c298012" - integrity sha512-ApcSMo1BXQlywO+lvOpG3Y2/SVGNCpJzXO/4e3zHzE/9j+uMehsilDzPwWQwLhrCXZYwVm7mmE71Gs36yobiNw== - dependencies: - hash.js "^1.1.7" - uuidv4 "^6.2.13" - -"@particle-network/auth@^1.2.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@particle-network/auth/-/auth-1.3.1.tgz#f9ee51749e3b10e700e0d8c51a8c0769ab0b9851" - integrity sha512-hu6ie5RjjN4X+6y/vfjyCsSX3pQuS8k8ZoMb61QWwhWsnZXKzpBUVeAEk55aGfxxXY+KfBkSmZosyaZHGoHnfw== - dependencies: - "@particle-network/analytics" "^1.0.1" - "@particle-network/chains" "*" - "@particle-network/crypto" "^1.0.1" - buffer "^6.0.3" - draggabilly "^3.0.0" - -"@particle-network/biconomy@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@particle-network/biconomy/-/biconomy-1.0.0.tgz#91f79c6341db0fc9b23d3ed9c61fbb08df727c31" - integrity sha512-MvYdTGT48WJB72SqkmZbx3NI8HdjWb8EZNKIkbddcusws/Uqy4dHV2+tP7UWup+vGltCXK/55KAdvgcwFTsZrQ== - dependencies: - axios "^1.3.6" - uuid "^8.3.2" - -"@particle-network/chains@*": - version "1.3.27" - resolved "https://registry.yarnpkg.com/@particle-network/chains/-/chains-1.3.27.tgz#dca4f2714d23957cc68cb1301de1f310895658db" - integrity sha512-+my+i0jqZjUoP+mNXxsPc2D7o3Cijl6uRvvWyTT0DmpyK1P+9yFpUuhEHUVmZMriTGKXv6synner16CD8/AkpQ== - -"@particle-network/crypto@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@particle-network/crypto/-/crypto-1.0.1.tgz#26afef622a3eb906dca5c810fef8001ffee29029" - integrity sha512-GgvHmHcFiNkCLZdcJOgctSbgvs251yp+EAdUydOE3gSoIxN6KEr/Snu9DebENhd/nFb7FDk5ap0Hg49P7pj1fg== - dependencies: - crypto-js "^4.1.1" - uuidv4 "^6.2.13" - -"@particle-network/provider@^1.2.0": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@particle-network/provider/-/provider-1.3.2.tgz#68ae98cca471c7612206cb43c915719cd321fb25" - integrity sha512-3XAUMCISTMYE57LZik7PrVanLIUyyU1ufb5eHtsoQw5ORfH0IeX3E5o6x5mxtfOXKfxVQ0tsIoLRMw0jMmSDpA== - dependencies: - "@particle-network/chains" "*" - axios "^1.3.6" - uuid "^8.3.2" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@pkgr/core@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" - integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== - -"@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" - integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== - -"@scure/bip32@1.1.5": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" - integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== - dependencies: - "@noble/hashes" "~1.2.0" - "@noble/secp256k1" "~1.7.0" - "@scure/base" "~1.1.0" - -"@scure/bip32@1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.2.tgz#90e78c027d5e30f0b22c1f8d50ff12f3fb7559f8" - integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== - dependencies: - "@noble/curves" "~1.2.0" - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.2" - -"@scure/bip32@1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" - integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== - dependencies: - "@noble/curves" "~1.3.0" - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.4" - -"@scure/bip39@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" - integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== - dependencies: - "@noble/hashes" "~1.2.0" - "@scure/base" "~1.1.0" - -"@scure/bip39@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" - integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== - dependencies: - "@noble/hashes" "~1.3.0" - "@scure/base" "~1.1.0" - -"@scure/bip39@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" - integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== - dependencies: - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.4" - -"@sentry/core@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" - integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/hub@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" - integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== - dependencies: - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/minimal@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" - integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@sentry/node@^5.18.1": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" - integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== - dependencies: - "@sentry/core" "5.30.0" - "@sentry/hub" "5.30.0" - "@sentry/tracing" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/tracing@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" - integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/types@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" - integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== - -"@sentry/utils@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" - integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== - dependencies: - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@sigstore/bundle@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-1.1.0.tgz#17f8d813b09348b16eeed66a8cf1c3d6bd3d04f1" - integrity sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog== - dependencies: - "@sigstore/protobuf-specs" "^0.2.0" - -"@sigstore/protobuf-specs@^0.2.0": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b" - integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== - -"@sigstore/sign@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-1.0.0.tgz#6b08ebc2f6c92aa5acb07a49784cb6738796f7b4" - integrity sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA== - dependencies: - "@sigstore/bundle" "^1.1.0" - "@sigstore/protobuf-specs" "^0.2.0" - make-fetch-happen "^11.0.1" - -"@sigstore/tuf@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.3.tgz#2a65986772ede996485728f027b0514c0b70b160" - integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg== - dependencies: - "@sigstore/protobuf-specs" "^0.2.0" - tuf-js "^1.1.7" - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sinonjs/commons@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" - integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@transak/transak-sdk@^1.2.3": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@transak/transak-sdk/-/transak-sdk-1.4.1.tgz#90dee041b772c71c35cfb22df9ef51970b780db4" - integrity sha512-/BKzb9orz1xDxa41oOPW+4KpjSHNEXgtaFazX/aIjQbr7LLbRqfXC/IHzpPmjR9OmFm8pFhV2Y86Rg0aZt5ZUA== - dependencies: - events "^3.3.0" - query-string "^8.1.0" - -"@trufflesuite/bigint-buffer@1.1.10": - version "1.1.10" - resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" - integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== - dependencies: - node-gyp-build "4.4.0" - -"@trufflesuite/uws-js-unofficial@20.30.0-unofficial.0": - version "20.30.0-unofficial.0" - resolved "https://registry.yarnpkg.com/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz#2fbc2f8ef7e82fbeea6abaf7e8a9d42a02b479d3" - integrity sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA== - dependencies: - ws "8.13.0" - optionalDependencies: - bufferutil "4.0.7" - utf-8-validate "6.0.3" - -"@tsconfig/node10@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" - integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@tufjs/canonical-json@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" - integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== - -"@tufjs/models@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" - integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== - dependencies: - "@tufjs/canonical-json" "1.0.0" - minimatch "^9.0.0" - -"@types/babel__core@^7.1.14": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" - integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" - integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== - dependencies: - "@babel/types" "^7.20.7" - -"@types/bn.js@^4.11.3": - version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== - dependencies: - "@types/node" "*" - -"@types/bn.js@^5.1.0": - version "5.1.5" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" - integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== - dependencies: - "@types/node" "*" - -"@types/debug@^4.1.9": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^29.5.4": - version "29.5.12" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" - integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.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.1", "@types/lru-cache@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== - -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@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/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - -"@types/node@*", "@types/node@^20.11.10": - version "20.12.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.3.tgz#d6658c2c7776c1cad93534bb45428195ed840c65" - integrity sha512-sD+ia2ubTeWrOu+YMF+MTAB7E+O7qsMqAbMfW7DG3K1URwhZ5hN1pLlRVGbf4wDFzSfikL05M17EyorS86jShw== - 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.2" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" - integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== - dependencies: - "@types/node" "*" - -"@types/secp256k1@^4.0.1": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" - integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== - dependencies: - "@types/node" "*" - -"@types/seedrandom@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" - integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== - -"@types/semver@^7.5.0": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@types/stack-utils@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" - integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== - -"@types/triple-beam@^1.3.2": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" - integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== - -"@types/uuid@8.3.4": - version "8.3.4" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" - integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^6.7.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" - integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/type-utils" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.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.6.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" - integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== - dependencies: - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== - dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - -"@typescript-eslint/type-utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" - integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== - dependencies: - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== - -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== - dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" - integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - semver "^7.5.4" - -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== - dependencies: - "@typescript-eslint/types" "6.21.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== - -"@yarnpkg/lockfile@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== - -"@yarnpkg/parsers@3.0.0-rc.46": - version "3.0.0-rc.46" - resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01" - integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== - dependencies: - js-yaml "^3.10.0" - tslib "^2.4.0" - -"@zkochan/js-yaml@0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" - integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== - dependencies: - argparse "^2.0.1" - -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abitype@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" - integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== - -abitype@^0.8.3: - version "0.8.11" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.8.11.tgz#66e1cf2cbf46f48d0e57132d7c1c392447536cc1" - integrity sha512-bM4v2dKvX08sZ9IU38IN5BKmN+ZkOSd2oI4a9f0ejHYZQYV6cDr7j+d95ga0z2XHG36Y4jzoG5Z7qDqxp7fi/A== - -abstract-level@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" - integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== - dependencies: - buffer "^6.0.3" - catering "^2.1.0" - is-buffer "^2.0.5" - level-supports "^4.0.0" - level-transcoder "^1.0.1" - module-error "^1.0.1" - queue-microtask "^1.2.3" - -abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" - integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== - dependencies: - buffer "^6.0.3" - catering "^2.0.0" - is-buffer "^2.0.5" - level-concat-iterator "^3.0.0" - level-supports "^2.0.1" - queue-microtask "^1.2.3" - -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.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== - -adm-zip@^0.4.16: - version "0.4.16" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" - integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== - -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - 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-align@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/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-sequence-parser@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" - integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -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== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -args@5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/args/-/args-5.0.3.tgz#943256db85021a85684be2f0882f25d796278702" - integrity sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA== - dependencies: - camelcase "5.0.0" - chalk "2.4.2" - leven "2.1.0" - mri "1.1.4" - -array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== - dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" - -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" - integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -array-includes@^3.1.7: - version "3.1.8" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== - -array.prototype.findlastindex@^1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -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.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" - is-array-buffer "^3.0.4" - 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== - -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -async-eventemitter@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" - -async@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -async@^3.2.3, async@^3.2.4: - version "3.2.5" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" - integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -axios@^1.0.0, axios@^1.3.6: - version "1.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -before-after-hook@^2.2.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" - integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== - -bignumber.js@^9.0.1: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -blakejs@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -boxen@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserslist@^4.22.2: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== - dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bs58@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58check@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-reverse@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" - integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bufferutil@4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" - integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== - dependencies: - node-gyp-build "^4.3.0" - -bufferutil@4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" - integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== - dependencies: - node-gyp-build "^4.3.0" - -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -byte-size@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.1.tgz#3424608c62d59de5bfda05d31e0313c6174842ae" - integrity sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -cacache@^16.1.0: - version "16.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" - integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== - dependencies: - "@npmcli/fs" "^2.1.0" - "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - unique-filename "^2.0.0" - -cacache@^17.0.0: - version "17.1.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" - integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^7.7.1" - minipass "^7.0.3" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.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: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== - -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, camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001587: - version "1.0.30001605" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz#ca12d7330dd8bcb784557eb9aa64f0037870d9d6" - integrity sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ== - -catering@^2.0.0, catering@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - -chalk@2.4.2, chalk@^2.4.2: - version "2.4.2" - 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" - -chalk@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -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: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chokidar@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.2.0, ci-info@^3.6.1: - 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.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -cli-cursor@3.1.0, cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-highlight@^2.1.11: - version "2.1.11" - resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" - integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== - dependencies: - chalk "^4.0.0" - highlight.js "^10.7.1" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^6.0.0" - yargs "^16.0.0" - -cli-spinners@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-spinners@^2.5.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - 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-deep@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.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== - -cmd-shim@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" - integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -color-convert@^1.9.0, color-convert@^1.9.3: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.6.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -color@^3.1.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - -colorspace@1.1.x: - version "1.1.4" - resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" - integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== - dependencies: - color "^3.1.3" - text-hex "1.0.x" - -columnify@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - -commander@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - -commander@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" - integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== - -commander@^2.9.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -concurrently@^8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.2.tgz#353141985c198cfa5e4a3ef90082c336b5851784" - integrity sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg== - dependencies: - chalk "^4.1.2" - date-fns "^2.30.0" - lodash "^4.17.21" - rxjs "^7.8.1" - shell-quote "^1.8.1" - spawn-command "0.0.2" - supports-color "^8.1.1" - tree-kill "^1.2.2" - yargs "^17.7.2" - -confusing-browser-globals@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" - integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== - -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -conventional-changelog-angular@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" - integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== - dependencies: - compare-func "^2.0.0" - -conventional-changelog-core@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz#3c331b155d5b9850f47b4760aeddfc983a92ad49" - integrity sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A== - dependencies: - add-stream "^1.0.0" - conventional-changelog-writer "^6.0.0" - conventional-commits-parser "^4.0.0" - dateformat "^3.0.3" - get-pkg-repo "^4.2.1" - git-raw-commits "^3.0.0" - git-remote-origin-url "^2.0.0" - git-semver-tags "^5.0.0" - normalize-package-data "^3.0.3" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - -conventional-changelog-preset-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz#14975ef759d22515d6eabae6396c2ae721d4c105" - integrity sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== - -conventional-changelog-writer@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" - integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== - dependencies: - conventional-commits-filter "^3.0.0" - dateformat "^3.0.3" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - meow "^8.1.2" - semver "^7.0.0" - split "^1.0.1" - -conventional-commits-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" - integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.1" - -conventional-commits-parser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" - integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== - dependencies: - JSONStream "^1.3.5" - is-text-path "^1.0.1" - meow "^8.1.2" - split2 "^3.2.2" - -conventional-recommended-bump@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz#ec01f6c7f5d0e2491c2d89488b0d757393392424" - integrity sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^3.0.0" - conventional-commits-filter "^3.0.0" - conventional-commits-parser "^4.0.0" - git-raw-commits "^3.0.0" - git-semver-tags "^5.0.0" - meow "^8.1.2" - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^8.2.0: - version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - 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" - -crypto-js@^4.1.1, crypto-js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" - integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== - -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - -data-view-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" - integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" - integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" - integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -date-fns@^2.30.0: - version "2.30.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" - integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== - dependencies: - "@babel/runtime" "^7.21.0" - -dateformat@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -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: - 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.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -decode-uri-component@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.4.1.tgz#2ac4859663c704be22bf7db760a1494a49ab2cc5" - integrity sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ== - -dedent@0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -dedent@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== - -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== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -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.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: - 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.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -deprecation@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - 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" - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv-expand@~10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" - integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== - -dotenv@~16.3.1: - version "16.3.2" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" - integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== - -draggabilly@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/draggabilly/-/draggabilly-3.0.0.tgz#48defe10a67f346a0338caaa40c0765c4d3912d6" - integrity sha512-aEs+B6prbMZQMxc9lgTpCBfyCUhRur/VFucHhIOvlvvdARTj7TcDmX/cdOUtqbjJJUh7+agyJXR5Z6IFe1MxwQ== - dependencies: - get-size "^3.0.0" - unidragger "^3.0.0" - -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -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.7: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.4.668: - version "1.4.724" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.724.tgz#e0a86fe4d3d0e05a4d7b032549d79608078f830d" - integrity sha512-RTRvkmRkGhNBPPpdrgtDKvmOEYTrPlXDfc0J/Nfq5s29tEahAwhiX4mmhNzj6febWMleulxVYPh7QwCSL/EldA== - -elliptic@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -elliptic@^6.5.2, elliptic@^6.5.4: - version "6.5.5" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" - integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -email-addresses@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-5.0.0.tgz#7ae9e7f58eef7d5e3e2c2c2d3ea49b78dc854fa6" - integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw== - -emittery@0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" - integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== - -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/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== - -enabled@2.0.x: - version "2.0.0" - resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" - integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== - -encoding@^0.1.12, encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - -enquirer@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@7.8.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -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, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: - version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== - dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" - es-define-property "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - hasown "^2.0.2" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" - is-callable "^1.2.7" - is-data-view "^1.0.1" - is-negative-zero "^2.0.3" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.2" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.9" - string.prototype.trimend "^1.0.8" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.6" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.15" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.2.1, es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-object-atoms@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" - integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== - dependencies: - get-intrinsic "^1.2.4" - has-tostringtag "^1.0.2" - hasown "^2.0.1" - -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: - 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" - -esbuild-plugin-tsc@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/esbuild-plugin-tsc/-/esbuild-plugin-tsc-0.4.0.tgz#d7d516fda0e0b05c8e0b442152deebdee01ddc61" - integrity sha512-q9gWIovt1nkwchMLc2zhyksaiHOv3kDK4b0AUol8lkMCRhJ1zavgfb2fad6BKp7FT9rh/OHmEBXVjczLoi/0yw== - dependencies: - strip-comments "^2.0.1" - -esbuild@^0.19.11: - version "0.19.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" - integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== - optionalDependencies: - "@esbuild/aix-ppc64" "0.19.12" - "@esbuild/android-arm" "0.19.12" - "@esbuild/android-arm64" "0.19.12" - "@esbuild/android-x64" "0.19.12" - "@esbuild/darwin-arm64" "0.19.12" - "@esbuild/darwin-x64" "0.19.12" - "@esbuild/freebsd-arm64" "0.19.12" - "@esbuild/freebsd-x64" "0.19.12" - "@esbuild/linux-arm" "0.19.12" - "@esbuild/linux-arm64" "0.19.12" - "@esbuild/linux-ia32" "0.19.12" - "@esbuild/linux-loong64" "0.19.12" - "@esbuild/linux-mips64el" "0.19.12" - "@esbuild/linux-ppc64" "0.19.12" - "@esbuild/linux-riscv64" "0.19.12" - "@esbuild/linux-s390x" "0.19.12" - "@esbuild/linux-x64" "0.19.12" - "@esbuild/netbsd-x64" "0.19.12" - "@esbuild/openbsd-x64" "0.19.12" - "@esbuild/sunos-x64" "0.19.12" - "@esbuild/win32-arm64" "0.19.12" - "@esbuild/win32-ia32" "0.19.12" - "@esbuild/win32-x64" "0.19.12" - -escalade@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -eslint-config-airbnb-base@15.0.0, eslint-config-airbnb-base@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" - integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== - dependencies: - confusing-browser-globals "^1.0.10" - object.assign "^4.1.2" - object.entries "^1.1.5" - semver "^6.3.0" - -eslint-config-airbnb-typescript@17.1.0: - version "17.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz#fda960eee4a510f092a9a1c139035ac588937ddc" - integrity sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig== - dependencies: - eslint-config-airbnb-base "^15.0.0" - -eslint-config-prettier@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" - integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== - -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: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-module-utils@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" - integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@^2.28.1: - version "2.29.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== - 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.15.0" - -eslint-plugin-prettier@^5.0.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" - integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.8.6" - -eslint-plugin-security@^1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz#0e9c4a471f6e4d3ca16413c7a4a51f3966ba16e4" - integrity sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ== - dependencies: - safe-regex "^2.1.1" - -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-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.48.0: - version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" - "@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: - version "4.0.1" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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.yarnpkg.com/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" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - -ethereum-cryptography@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" - integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== - dependencies: - "@noble/hashes" "1.2.0" - "@noble/secp256k1" "1.7.1" - "@scure/bip32" "1.1.5" - "@scure/bip39" "1.1.1" - -ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" - integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== - dependencies: - "@noble/curves" "1.3.0" - "@noble/hashes" "1.3.3" - "@scure/bip32" "1.3.3" - "@scure/bip39" "1.2.2" - -ethereumjs-abi@^0.6.8: - version "0.6.8" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" - integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== - dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" - -ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - -ethjs-util@0.1.6, ethjs-util@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" - integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== - dependencies: - is-hex-prefixed "1.0.0" - strip-hex-prefix "1.0.0" - -ev-emitter@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ev-emitter/-/ev-emitter-2.1.2.tgz#91737a2deae9fa95453e7e86cfae976f8c3ced38" - integrity sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q== - -eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" - integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== - dependencies: - homedir-polyfill "^1.0.1" - -expect@^29.0.0, expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - -external-editor@^3.0.3: - 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" - -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.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.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.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.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -fecha@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" - integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== - -figures@3.2.0, figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -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.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -filename-reserved-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" - integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== - -filenamify@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" - integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== - dependencies: - filename-reserved-regex "^2.0.0" - strip-outer "^1.0.1" - trim-repeated "^1.0.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -filter-obj@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-5.1.0.tgz#5bd89676000a713d7db2e197f660274428e524ed" - integrity sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng== - -find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-node-modules@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44" - integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== - dependencies: - findup-sync "^4.0.0" - merge "^2.1.1" - -find-up@5.0.0, find-up@^5.0.0: - version "5.0.0" - 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" - path-exists "^4.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - 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" - -findup-sync@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" - integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^4.0.2" - resolve-dir "^1.0.1" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== - -fn.name@1.x.x: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" - integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== - -follow-redirects@^1.12.1, follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -fp-ts@1.19.3: - version "1.19.3" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" - integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== - -fp-ts@^1.0.0: - version "1.19.5" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" - integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@^11.1.0, fs-extra@^11.1.1: - version "11.2.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^2.0.0, fs-minipass@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-minipass@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== - dependencies: - minipass "^7.0.3" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/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" - -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== - -ganache@^7.9.2: - version "7.9.2" - resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.9.2.tgz#77f506ad2735dd9109696ffa1834a9dd2f806449" - integrity sha512-7gsVVDpO9AhrFyDMWWl7SpMsPpqGcnAzjxz3k32LheIPNd64p2XsY9GYRdhWmKuryb60W1iaWPZWDkFKlbRWHA== - dependencies: - "@trufflesuite/bigint-buffer" "1.1.10" - "@trufflesuite/uws-js-unofficial" "20.30.0-unofficial.0" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "5.1.1" - "@types/seedrandom" "3.0.1" - abstract-level "1.0.3" - abstract-leveldown "7.2.0" - async-eventemitter "0.2.4" - emittery "0.10.0" - keccak "3.0.2" - leveldown "6.1.0" - secp256k1 "4.0.3" - optionalDependencies: - bufferutil "4.0.5" - utf-8-validate "5.0.7" - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - 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.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-pkg-repo@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" - integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== - dependencies: - "@hutson/parse-repository-url" "^3.0.0" - hosted-git-info "^4.0.0" - through2 "^2.0.0" - yargs "^16.2.0" - -get-port@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - -get-size@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-size/-/get-size-3.0.0.tgz#00e39a8042a3de237b2fcf288eaf55d3f472417c" - integrity sha512-Y8aiXLq4leR7807UY0yuKEwif5s3kbVp1nTv+i4jBeoUzByTLKkLWu/HorS6/pB+7gsB0o7OTogC8AoOOeT0Hw== - -get-stream@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" - integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== - dependencies: - call-bind "^1.0.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - -gh-pages@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-6.1.1.tgz#e80af927a081cb480657fde5a0b87ea2e77d6c74" - integrity sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw== - dependencies: - async "^3.2.4" - commander "^11.0.0" - email-addresses "^5.0.0" - filenamify "^4.3.0" - find-cache-dir "^3.3.1" - fs-extra "^11.1.1" - globby "^6.1.0" - -git-raw-commits@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-3.0.0.tgz#5432f053a9744f67e8db03dbc48add81252cfdeb" - integrity sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw== - dependencies: - dargs "^7.0.0" - meow "^8.1.2" - split2 "^3.2.2" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" - integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== - dependencies: - meow "^8.1.2" - semver "^7.0.0" - -git-up@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" - integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== - dependencies: - is-ssh "^1.4.0" - parse-url "^8.1.0" - -git-url-parse@13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" - integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== - dependencies: - git-up "^7.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== - dependencies: - ini "^1.3.2" - -glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - 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.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@8.1.0, glob@^8.0.1: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^10.2.2, glob@^10.3.7: - version "10.3.12" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" - integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.6" - minimatch "^9.0.1" - minipass "^7.0.4" - path-scurry "^1.10.2" - -glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^9.2.0: - version "9.3.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== - dependencies: - fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - 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.1.0, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -handlebars@^4.7.7: - version "4.7.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.2" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -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@^2.17.3: - version "2.22.2" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.2.tgz#0cadd7ec93bf39bab09f81603e75bc5e92acea3d" - integrity sha512-0xZ7MdCZ5sJem4MrvpQWLR3R3zGDoHw5lsR+pBFimqwagimIOn3bWuZv69KA+veXClwI1s/zpqgwPwiFrd4Dxw== - dependencies: - "@ethersproject/abi" "^5.1.2" - "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/edr" "^0.3.1" - "@nomicfoundation/ethereumjs-common" "4.0.4" - "@nomicfoundation/ethereumjs-tx" "5.0.4" - "@nomicfoundation/ethereumjs-util" "9.0.4" - "@nomicfoundation/solidity-analyzer" "^0.1.0" - "@sentry/node" "^5.18.1" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "^5.1.0" - adm-zip "^0.4.16" - aggregate-error "^3.0.0" - ansi-escapes "^4.3.0" - boxen "^5.1.2" - chalk "^2.4.2" - chokidar "^3.4.0" - ci-info "^2.0.0" - debug "^4.1.1" - enquirer "^2.3.0" - env-paths "^2.2.0" - ethereum-cryptography "^1.0.3" - ethereumjs-abi "^0.6.8" - find-up "^2.1.0" - fp-ts "1.19.3" - fs-extra "^7.0.1" - glob "7.2.0" - immutable "^4.0.0-rc.12" - io-ts "1.10.4" - keccak "^3.0.2" - lodash "^4.17.11" - mnemonist "^0.38.0" - mocha "^10.0.0" - p-map "^4.0.0" - raw-body "^2.4.1" - resolve "1.17.0" - semver "^6.3.0" - solc "0.7.3" - source-map-support "^0.5.13" - stacktrace-parser "^0.1.10" - tsort "0.0.1" - undici "^5.14.0" - 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.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1, has-proto@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -has-unicode@2.0.1, has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -highlight.js@^10.7.1: - version "10.7.3" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -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== - -hosted-git-info@^3.0.6: - version "3.0.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" - integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" - integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== - dependencies: - lru-cache "^7.5.1" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - 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" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-walk@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" - integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== - dependencies: - minimatch "^5.0.1" - -ignore-walk@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.4.tgz#89950be94b4f522225eb63a13c56badb639190e9" - integrity sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw== - dependencies: - minimatch "^9.0.0" - -ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -immutable@^4.0.0-rc.12: - version "4.3.5" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" - integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== - -import-fresh@^3.2.1, import-fresh@^3.3.0: - 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" - -import-local@3.1.0, import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -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.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.2, ini@^1.3.4, ini@^1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -init-package-json@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" - integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== - dependencies: - npm-package-arg "^10.0.0" - promzard "^1.0.0" - read "^2.0.0" - read-package-json "^6.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^5.0.0" - -inquirer@^8.2.4: - version "8.2.6" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" - integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^6.0.1" - -internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" - -io-ts@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" - integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== - dependencies: - fp-ts "^1.0.0" - -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - -is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - -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-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -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.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - 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.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - 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, is-core-module@^2.5.0, is-core-module@^2.8.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-data-view@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" - integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== - dependencies: - is-typed-array "^1.1.13" - -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, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -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.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -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.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -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.0.0, 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.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -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, is-shared-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== - dependencies: - call-bind "^1.0.7" - -is-ssh@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== - dependencies: - protocols "^2.0.1" - -is-stream@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -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-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-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== - dependencies: - text-extensions "^1.0.0" - -is-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/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.1: - 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.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - 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== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isows@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" - integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-instrument@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" - integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== - dependencies: - "@babel/core" "^7.23.9" - "@babel/parser" "^7.23.9" - "@istanbuljs/schema" "^0.1.3" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jackspeak@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1, jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" - -jest-util@^29.0.0, jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" - -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - -js-sha3@0.8.0, js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -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.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -js-yaml@^3.10.0, js-yaml@^3.13.1: - version "3.14.1" - 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" - -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -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-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -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-parse-even-better-errors@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz#02bb29fb5da90b5444581749c22cedd3597c6cb0" - integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg== - -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== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -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" - -json5@^2.2.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonc-parser@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -jsonc-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" - integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -keccak@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - -keccak@^3.0.0, keccak@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" - integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== - dependencies: - node-addon-api "^2.0.0" - 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.2, 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.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== - optionalDependencies: - graceful-fs "^4.1.9" - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -kuler@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" - integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== - -lerna-changelog@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/lerna-changelog/-/lerna-changelog-2.2.0.tgz#c43813bba81e30cdeb20aabaef4da390f0f38e41" - integrity sha512-yjYNAHrbnw8xYFKmYWJEP52Tk4xSdlNmzpYr26+3glbSGDmpe8UMo8f9DlEntjGufL+opup421oVTXcLshwAaQ== - dependencies: - chalk "^4.0.0" - cli-highlight "^2.1.11" - execa "^5.0.0" - hosted-git-info "^4.0.0" - make-fetch-happen "^9.0.0" - p-map "^3.0.0" - progress "^2.0.0" - yargs "^17.1.0" - -lerna@^7.2.0: - version "7.4.2" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-7.4.2.tgz#03497125d7b7c8d463eebfe17a701b16bde2ad09" - integrity sha512-gxavfzHfJ4JL30OvMunmlm4Anw7d7Tq6tdVHzUukLdS9nWnxCN/QB21qR+VJYp5tcyXogHKbdUEGh6qmeyzxSA== - dependencies: - "@lerna/child-process" "7.4.2" - "@lerna/create" "7.4.2" - "@npmcli/run-script" "6.0.2" - "@nx/devkit" ">=16.5.1 < 17" - "@octokit/plugin-enterprise-rest" "6.0.1" - "@octokit/rest" "19.0.11" - byte-size "8.1.1" - chalk "4.1.0" - clone-deep "4.0.1" - cmd-shim "6.0.1" - columnify "1.6.0" - conventional-changelog-angular "7.0.0" - conventional-changelog-core "5.0.1" - conventional-recommended-bump "7.0.1" - cosmiconfig "^8.2.0" - dedent "0.7.0" - envinfo "7.8.1" - execa "5.0.0" - fs-extra "^11.1.1" - get-port "5.1.1" - get-stream "6.0.0" - git-url-parse "13.1.0" - glob-parent "5.1.2" - globby "11.1.0" - graceful-fs "4.2.11" - has-unicode "2.0.1" - import-local "3.1.0" - ini "^1.3.8" - init-package-json "5.0.0" - inquirer "^8.2.4" - is-ci "3.0.1" - is-stream "2.0.0" - jest-diff ">=29.4.3 < 30" - js-yaml "4.1.0" - libnpmaccess "7.0.2" - libnpmpublish "7.3.0" - load-json-file "6.2.0" - lodash "^4.17.21" - make-dir "4.0.0" - minimatch "3.0.5" - multimatch "5.0.0" - node-fetch "2.6.7" - npm-package-arg "8.1.1" - npm-packlist "5.1.1" - npm-registry-fetch "^14.0.5" - npmlog "^6.0.2" - nx ">=16.5.1 < 17" - p-map "4.0.0" - p-map-series "2.1.0" - p-pipe "3.1.0" - p-queue "6.6.2" - p-reduce "2.1.0" - p-waterfall "2.1.1" - pacote "^15.2.0" - pify "5.0.0" - read-cmd-shim "4.0.0" - read-package-json "6.0.4" - resolve-from "5.0.0" - rimraf "^4.4.1" - semver "^7.3.8" - signal-exit "3.0.7" - slash "3.0.0" - ssri "^9.0.1" - strong-log-transformer "2.1.0" - tar "6.1.11" - temp-dir "1.0.0" - typescript ">=3 < 6" - upath "2.0.1" - uuid "^9.0.0" - validate-npm-package-license "3.0.4" - validate-npm-package-name "5.0.0" - write-file-atomic "5.0.1" - write-pkg "4.0.0" - yargs "16.2.0" - yargs-parser "20.2.4" - -level-concat-iterator@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" - integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== - dependencies: - catering "^2.1.0" - -level-supports@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" - integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== - -level-supports@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" - integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== - -level-transcoder@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" - integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== - dependencies: - buffer "^6.0.3" - module-error "^1.0.1" - -leveldown@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" - integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== - dependencies: - abstract-leveldown "^7.2.0" - napi-macros "~2.0.0" - node-gyp-build "^4.3.0" - -leven@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -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" - -libnpmaccess@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-7.0.2.tgz#7f056c8c933dd9c8ba771fa6493556b53c5aac52" - integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw== - dependencies: - npm-package-arg "^10.1.0" - npm-registry-fetch "^14.0.3" - -libnpmpublish@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.3.0.tgz#2ceb2b36866d75a6cd7b4aa748808169f4d17e37" - integrity sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg== - dependencies: - ci-info "^3.6.1" - normalize-package-data "^5.0.0" - npm-package-arg "^10.1.0" - npm-registry-fetch "^14.0.3" - proc-log "^3.0.0" - semver "^7.3.7" - sigstore "^1.4.0" - ssri "^10.0.1" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lines-and-columns@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" - integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== - -load-json-file@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" - integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== - dependencies: - graceful-fs "^4.1.15" - parse-json "^5.0.0" - strip-bom "^4.0.0" - type-fest "^0.6.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - 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.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -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@^4.17.11, lodash@^4.17.14, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@4.1.0, log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -logform@^2.3.2, logform@^2.4.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" - integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== - dependencies: - "@colors/colors" "1.6.0" - "@types/triple-beam" "^1.3.2" - fecha "^4.2.0" - ms "^2.1.1" - safe-stable-stringify "^2.3.1" - triple-beam "^1.3.0" - -lru-cache@^10.0.1, lru-cache@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - -lunr@^2.3.9: - version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== - -make-dir@4.0.0, make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@1.x, make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^10.0.3: - version "10.2.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" - integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^16.1.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-fetch "^2.0.3" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^9.0.0" - -make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" - integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^17.0.0" - http-cache-semantics "^4.1.1" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^5.0.0" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^10.0.0" - -make-fetch-happen@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -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== - -marked@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -meow@^8.1.2: - version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -merge@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" - integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== - -merkletreejs@^0.3.11: - version "0.3.11" - resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.11.tgz#e0de05c3ca1fd368de05a12cb8efb954ef6fc04f" - integrity sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ== - dependencies: - bignumber.js "^9.0.1" - buffer-reverse "^1.0.1" - crypto-js "^4.2.0" - treeify "^1.1.0" - web3-utils "^1.3.4" - -micro-ftch@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" - integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== - -micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -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.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" - integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^8.0.2: - version "8.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" - integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - dependencies: - brace-expansion "^2.0.1" - -minimist-options@4.1.0: - 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.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-fetch@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" - integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== - dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-fetch@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" - integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3, minipass@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@1.0.4, mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mnemonist@^0.38.0: - version "0.38.5" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" - integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== - dependencies: - obliterator "^2.0.0" - -mocha@^10.0.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261" - integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "8.1.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -modify-values@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -module-error@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" - integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== - -mri@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" - integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.0.0, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multimatch@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" - integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== - dependencies: - "@types/minimatch" "^3.0.3" - array-differ "^3.0.0" - array-union "^2.1.0" - arrify "^2.0.1" - minimatch "^3.0.4" - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mute-stream@^1.0.0, mute-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -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== - -negotiator@^0.6.2, negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nock@^13.2.9: - version "13.5.4" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.4.tgz#8918f0addc70a63736170fef7106a9721e0dc479" - integrity sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw== - dependencies: - debug "^4.1.0" - json-stringify-safe "^5.0.1" - propagate "^2.0.0" - -node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - -node-addon-api@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== - -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" - integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== - -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" - integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== - -node-gyp@^9.0.0, node-gyp@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" - integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== - dependencies: - env-paths "^2.2.0" - exponential-backoff "^3.1.1" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^6.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-machine-id@1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" - integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== - -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -nopt@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" - integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== - dependencies: - abbrev "^1.0.0" - -normalize-package-data@^2.3.2, 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-package-data@^3.0.0, normalize-package-data@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" - integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== - dependencies: - hosted-git-info "^6.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-bundled@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-bundled@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" - integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== - dependencies: - npm-normalize-package-bin "^3.0.0" - -npm-dts@^1.3.12: - version "1.3.12" - resolved "https://registry.yarnpkg.com/npm-dts/-/npm-dts-1.3.12.tgz#e422b1188fb616f41fe5c566c3d636c1aafb2ed8" - integrity sha512-3pFsz7Gf1u0cyQE2czXt8Y0hKe6kczHxlFbVrr74xWweNUit2tCDbOcL4n6KaWxyimGNJ4gzOa8KkShFA8hrdA== - dependencies: - args "5.0.3" - find-node-modules "2.1.3" - mkdirp "1.0.4" - npm-run "5.0.1" - rimraf "3.0.2" - tmp "0.2.1" - winston "3.7.2" - -npm-install-checks@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" - integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-normalize-package-bin@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" - integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== - -npm-package-arg@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" - integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== - dependencies: - hosted-git-info "^3.0.6" - semver "^7.0.0" - validate-npm-package-name "^3.0.0" - -npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" - integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== - dependencies: - hosted-git-info "^6.0.0" - proc-log "^3.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - -npm-packlist@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" - integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== - dependencies: - glob "^8.0.1" - ignore-walk "^5.0.1" - npm-bundled "^1.1.2" - npm-normalize-package-bin "^1.0.1" - -npm-packlist@^7.0.0: - version "7.0.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" - integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== - dependencies: - ignore-walk "^6.0.0" - -npm-path@^2.0.2, npm-path@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== - dependencies: - which "^1.2.10" - -npm-pick-manifest@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz#2159778d9c7360420c925c1a2287b5a884c713aa" - integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg== - dependencies: - npm-install-checks "^6.0.0" - npm-normalize-package-bin "^3.0.0" - npm-package-arg "^10.0.0" - semver "^7.3.5" - -npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: - version "14.0.5" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" - integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== - dependencies: - make-fetch-happen "^11.0.0" - minipass "^5.0.0" - minipass-fetch "^3.0.0" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^10.0.0" - proc-log "^3.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-run@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npm-run/-/npm-run-5.0.1.tgz#1baea93389b50ae25a32382c8ca322398e50cd16" - integrity sha512-s7FyRpHUgaJfzkRgOnevX8rAWWsv1dofY1XS7hliWCF6LSQh+HtDfBvpigPS1krLvXw+Fi17CYMY8mUtblnyWw== - dependencies: - minimist "^1.2.0" - npm-path "^2.0.4" - npm-which "^3.0.1" - serializerr "^1.0.3" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - integrity sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A== - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -npmlog@^6.0.0, npmlog@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -number-to-bn@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - -nx@16.10.0, "nx@>=16.5.1 < 17", nx@^16.8.1: - version "16.10.0" - resolved "https://registry.yarnpkg.com/nx/-/nx-16.10.0.tgz#b070461f7de0a3d7988bd78558ea84cda3543ace" - integrity sha512-gZl4iCC0Hx0Qe1VWmO4Bkeul2nttuXdPpfnlcDKSACGu3ZIo+uySqwOF8yBAxSTIf8xe2JRhgzJN1aFkuezEBg== - dependencies: - "@nrwl/tao" "16.10.0" - "@parcel/watcher" "2.0.4" - "@yarnpkg/lockfile" "^1.1.0" - "@yarnpkg/parsers" "3.0.0-rc.46" - "@zkochan/js-yaml" "0.0.6" - axios "^1.0.0" - chalk "^4.1.0" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - cliui "^8.0.1" - dotenv "~16.3.1" - dotenv-expand "~10.0.0" - enquirer "~2.3.6" - figures "3.2.0" - flat "^5.0.2" - fs-extra "^11.1.0" - glob "7.1.4" - ignore "^5.0.4" - jest-diff "^29.4.1" - js-yaml "4.1.0" - jsonc-parser "3.2.0" - lines-and-columns "~2.0.3" - minimatch "3.0.5" - node-machine-id "1.1.12" - npm-run-path "^4.0.1" - open "^8.4.0" - semver "7.5.3" - string-width "^4.2.3" - strong-log-transformer "^2.1.0" - tar-stream "~2.2.0" - tmp "~0.2.1" - tsconfig-paths "^4.1.2" - tslib "^2.3.0" - v8-compile-cache "2.3.0" - yargs "^17.6.2" - yargs-parser "21.1.1" - optionalDependencies: - "@nx/nx-darwin-arm64" "16.10.0" - "@nx/nx-darwin-x64" "16.10.0" - "@nx/nx-freebsd-x64" "16.10.0" - "@nx/nx-linux-arm-gnueabihf" "16.10.0" - "@nx/nx-linux-arm64-gnu" "16.10.0" - "@nx/nx-linux-arm64-musl" "16.10.0" - "@nx/nx-linux-x64-gnu" "16.10.0" - "@nx/nx-linux-x64-musl" "16.10.0" - "@nx/nx-win32-arm64-msvc" "16.10.0" - "@nx/nx-win32-x64-msvc" "16.10.0" - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/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-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.assign@^4.1.2, object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.5: - version "1.1.8" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" - integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -object.fromentries@^2.0.7: - version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.groupby@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - -object.values@^1.1.7: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" - integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -obliterator@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" - integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -one-time@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" - integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== - dependencies: - fn.name "1.x.x" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.4.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - 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" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - 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, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - 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.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map-series@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" - integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== - -p-map@4.0.0, p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== - dependencies: - aggregate-error "^3.0.0" - -p-pipe@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" - integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== - -p-queue@6.6.2: - version "6.6.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" - integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== - dependencies: - eventemitter3 "^4.0.4" - p-timeout "^3.2.0" - -p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== - -p-timeout@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/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== - -p-waterfall@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" - integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== - dependencies: - p-reduce "^2.0.0" - -pacote@^15.2.0: - version "15.2.0" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" - integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== - dependencies: - "@npmcli/git" "^4.0.0" - "@npmcli/installed-package-contents" "^2.0.1" - "@npmcli/promise-spawn" "^6.0.1" - "@npmcli/run-script" "^6.0.0" - cacache "^17.0.0" - fs-minipass "^3.0.0" - minipass "^5.0.0" - npm-package-arg "^10.0.0" - npm-packlist "^7.0.0" - npm-pick-manifest "^8.0.0" - npm-registry-fetch "^14.0.0" - proc-log "^3.0.0" - promise-retry "^2.0.1" - read-package-json "^6.0.0" - read-package-json-fast "^3.0.0" - sigstore "^1.3.0" - ssri "^10.0.0" - tar "^6.1.11" - -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@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0, parse-json@^5.2.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" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== - -parse-path@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" - integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== - dependencies: - protocols "^2.0.0" - -parse-url@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" - integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== - dependencies: - parse-path "^7.0.0" - -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6, path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.10.2, path-scurry@^1.6.1: - version "1.10.2" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" - integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pbkdf2@^3.0.17: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - 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.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -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== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== - -pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.1.0, 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" - -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - -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@^3.0.3: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== - -pretty-format@^29.0.0, pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -proc-log@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" - integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -promzard@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.1.tgz#3b77251a24f988c0886f5649d4f642bcdd53e558" - integrity sha512-ulDF77aULEHUoJkN5XZgRV5loHXBaqd9eorMvLNLvi2gXMuRAtwH6Gh4zsMHQY1kTt7tyv/YZwZW5C2gtj8F2A== - dependencies: - read "^3.0.1" - -propagate@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" - integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== - -protochain@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/protochain/-/protochain-1.0.5.tgz#991c407e99de264aadf8f81504b5e7faf7bfa260" - integrity sha512-4hDwFSX50C4NE6f/6zg8EPr/WLPTkFPUtG0ulWZu6bwzV2hmb50fpdQLr0HiKBAUehapaFpItzWoCLjraLJhUA== - -protocols@^2.0.0, protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pure-rand@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" - integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== - -query-string@^8.1.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-8.2.0.tgz#f0b0ef6caa85f525dbdb745a67d3f8c08d71cc6b" - integrity sha512-tUZIw8J0CawM5wyGBiDOAp7ObdRQh4uBor/fUR9ZjmbZVvw95OD9If4w3MQxr99rg0DJZ/9CIORcpEqU5hQG7g== - dependencies: - decode-uri-component "^0.4.1" - filter-obj "^5.1.0" - split-on-first "^3.0.0" - -queue-microtask@^1.2.2, queue-microtask@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/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== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -raw-body@^2.4.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -read-cmd-shim@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" - integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== - -read-package-json-fast@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" - integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== - dependencies: - json-parse-even-better-errors "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -read-package-json@6.0.4, read-package-json@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" - integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== - dependencies: - glob "^10.2.2" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^5.0.0" - npm-normalize-package-bin "^3.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== - dependencies: - find-up "^2.0.0" - read-pkg "^3.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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -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@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" - integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== - dependencies: - mute-stream "~1.0.0" - -read@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read/-/read-3.0.1.tgz#926808f0f7c83fa95f1ef33c0e2c09dbb28fd192" - integrity sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw== - dependencies: - mute-stream "^1.0.0" - -readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - 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" - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regexp-tree@~0.1.1: - version "0.1.27" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" - integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== - -regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== - dependencies: - call-bind "^1.0.6" - define-properties "^1.2.1" - es-errors "^1.3.0" - set-function-name "^2.0.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.0: - version "2.0.2" - 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== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@5.0.0, resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -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.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - -resolve@1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.10.0, resolve@^1.20.0, 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@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@3.0.2, rimraf@^3.0.0, 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" - -rimraf@^2.2.8: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" - integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== - dependencies: - glob "^9.2.0" - -rimraf@^5.0.1: - version "5.0.5" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf" - integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== - dependencies: - glob "^10.3.7" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rlp@^2.2.3: - version "2.2.7" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.5, rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-array-concat@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" - integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - 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.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-regex "^1.1.4" - -safe-regex@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" - integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== - dependencies: - regexp-tree "~0.1.1" - -safe-stable-stringify@^2.3.1: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scrypt-js@3.0.1, scrypt-js@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -secp256k1@4.0.3, secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@7.5.3: - version "7.5.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serializerr@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/serializerr/-/serializerr-1.0.3.tgz#12d4c5aa1c3ffb8f6d1dc5f395aa9455569c3f91" - integrity sha512-yXUlHj0fjbndhACj2XWtIH5eJv7b/uadyl7CJA8b9wL5mIKm+g0/sL7rDzEmjC+k5y8ggcaP8i049F4FxA0U9Q== - dependencies: - protochain "^1.0.5" - -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.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-function-name@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -shiki@^0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" - integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== - dependencies: - ansi-sequence-parser "^1.1.0" - jsonc-parser "^3.2.0" - vscode-oniguruma "^1.7.0" - vscode-textmate "^8.0.0" - -side-channel@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -signal-exit@3.0.7, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -sigstore@^1.3.0, sigstore@^1.4.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.9.0.tgz#1e7ad8933aa99b75c6898ddd0eeebc3eb0d59875" - integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A== - dependencies: - "@sigstore/bundle" "^1.1.0" - "@sigstore/protobuf-specs" "^0.2.0" - "@sigstore/sign" "^1.0.0" - "@sigstore/tuf" "^1.0.3" - make-fetch-happen "^11.0.1" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@3.0.0, slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.8.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.1.tgz#22c7d9dd7882649043cba0eafb49ae144e3457af" - integrity sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - -solc@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - follow-redirects "^1.12.1" - fs-extra "^0.30.0" - js-sha3 "0.8.0" - memorystream "^0.3.1" - require-from-string "^2.0.0" - semver "^5.5.0" - tmp "0.0.33" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== - dependencies: - is-plain-obj "^1.0.0" - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.5.13: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spawn-command@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" - integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== - -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.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -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.17" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" - integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== - -split-on-first@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-3.0.0.tgz#f04959c9ea8101b9b0bbf35a61b9ebea784a23e7" - integrity sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA== - -split2@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -ssri@^10.0.0, ssri@^10.0.1: - version "10.0.5" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" - integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== - dependencies: - minipass "^7.0.3" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -ssri@^9.0.0, ssri@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - -stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== - -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -stacktrace-parser@^0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" - integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== - dependencies: - type-fest "^0.7.1" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - 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.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" - integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.0" - es-object-atoms "^1.0.0" - -string.prototype.trimend@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" - integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - 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-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" - integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-hex-prefix@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - -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.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-outer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== - dependencies: - escape-string-regexp "^1.0.2" - -strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" - -supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.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.6: - version "0.8.8" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" - integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== - dependencies: - "@pkgr/core" "^0.1.0" - tslib "^2.6.2" - -tar-stream@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@6.1.11: - version "6.1.11" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -text-hex@1.0.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" - integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== - -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.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tmp@0.0.33, tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmp@0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -tmp@~0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -treeify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" - integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== - -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== - -trim-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== - dependencies: - escape-string-regexp "^1.0.2" - -triple-beam@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" - integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== - -ts-api-utils@^1.0.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== - -ts-jest@^29.1.1: - version "29.1.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.2.tgz#7613d8c81c43c8cb312c6904027257e814c40e09" - integrity sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g== - dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" - jest-util "^29.0.0" - json5 "^2.2.3" - lodash.memoize "4.x" - make-error "1.x" - semver "^7.5.3" - yargs-parser "^21.0.1" - -ts-node@^10.9.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tsconfig-paths@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" - integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== - dependencies: - json5 "^2.2.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tsort@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" - integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== - -tuf-js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" - integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== - dependencies: - "@tufjs/models" "1.0.4" - debug "^4.3.4" - make-fetch-happen "^11.1.1" - -tweetnacl-util@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" - integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== - -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/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-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -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.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" - integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== - -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.yarnpkg.com/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== - -typed-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-typed-array "^1.1.13" - -typed-array-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-byte-offset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-length@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" - integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typedoc@^0.25.7: - version "0.25.12" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.12.tgz#f73f0a8d3731d418cc604d4230f95a857799e27a" - integrity sha512-F+qhkK2VoTweDXd1c42GS/By2DvI2uDF4/EpG424dTexSHdtCH52C6IcAvMA6jR3DzAWZjHpUOW+E02kyPNUNw== - dependencies: - lunr "^2.3.9" - marked "^4.3.0" - minimatch "^9.0.3" - shiki "^0.14.7" - -"typescript@>=3 < 6", typescript@^5.3.3: - version "5.4.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" - integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== - -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -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.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.14.0: - version "5.28.4" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" - integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== - dependencies: - "@fastify/busboy" "^2.0.0" - -unidragger@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/unidragger/-/unidragger-3.0.1.tgz#72b2e63f2571ca6e95a884b139dfec764e08c7f3" - integrity sha512-RngbGSwBFmqGBWjkaH+yB677uzR95blSQyxq6hYbrQCejH3Mx1nm8DVOuh3M9k2fQyTstWUG5qlgCnNqV/9jVw== - dependencies: - ev-emitter "^2.0.0" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-filename@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" - integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== - dependencies: - unique-slug "^3.0.0" - -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unique-slug@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" - integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== - dependencies: - imurmurhash "^0.1.4" - -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - -universal-user-agent@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" - integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -upath@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" - integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -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.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" - integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== - dependencies: - node-gyp-build "^4.3.0" - -utf-8-validate@6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.3.tgz#7d8c936d854e86b24d1d655f138ee27d2636d777" - integrity sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA== - dependencies: - node-gyp-build "^4.3.0" - -utf8@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@8.3.2, uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -uuidv4@^6.2.13: - version "6.2.13" - resolved "https://registry.yarnpkg.com/uuidv4/-/uuidv4-6.2.13.tgz#8f95ec5ef22d1f92c8e5d4c70b735d1c89572cb7" - integrity sha512-AXyzMjazYB3ovL3q051VLH06Ixj//Knx7QnUSi1T//Ie3io6CpsPu9nVMOx5MoLWh6xV0B9J0hIaxungxXUbPQ== - dependencies: - "@types/uuid" "8.3.4" - uuid "8.3.2" - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -v8-compile-cache@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -v8-to-istanbul@^9.0.1: - version "9.2.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" - integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - -validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - 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" - -validate-npm-package-name@5.0.0, validate-npm-package-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" - integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== - dependencies: - builtins "^5.0.0" - -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== - dependencies: - builtins "^1.0.3" - -viem@^2.7.12, viem@^2.8.6: - version "2.9.8" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.9.8.tgz#15288cc5332292617786d21db0aa3571db29c4c9" - integrity sha512-vetoTZ6UF2okS/1I0+1p/QYdC4yA6uf4PeWwTBp3kD5wC6eQcmeh7zP+unNdnYHGGC63x7BTGldK1ep2IFVKcQ== - dependencies: - "@adraffy/ens-normalize" "1.10.0" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@scure/bip32" "1.3.2" - "@scure/bip39" "1.2.1" - abitype "1.0.0" - isows "1.0.3" - ws "8.13.0" - -vscode-oniguruma@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" - integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== - -vscode-textmate@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" - integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== - -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -wcwidth@^1.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-utils@^1.3.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" - integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== - dependencies: - "@ethereumjs/util" "^8.1.0" - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereum-cryptography "^2.1.2" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -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-typed-array@^1.1.14, which-typed-array@^1.1.15: - version "1.1.15" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.2" - -which@^1.2.10, which@^1.2.14: - 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, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -which@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" - integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -winston-transport@^4.5.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" - integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== - dependencies: - logform "^2.3.2" - readable-stream "^3.6.0" - triple-beam "^1.3.0" - -winston@3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.7.2.tgz#95b4eeddbec902b3db1424932ac634f887c400b1" - integrity sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng== - dependencies: - "@dabh/diagnostics" "^2.0.2" - async "^3.2.3" - is-stream "^2.0.0" - logform "^2.4.0" - one-time "^1.0.0" - readable-stream "^3.4.0" - safe-stable-stringify "^2.3.1" - stack-trace "0.0.x" - triple-beam "^1.3.0" - winston-transport "^4.5.0" - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^6.0.1: - 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@^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.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" - integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - -write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -write-json-file@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" - integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.15" - make-dir "^2.1.0" - pify "^4.0.1" - sort-keys "^2.0.0" - write-file-atomic "^2.4.2" - -write-pkg@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" - integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== - dependencies: - sort-keys "^2.0.0" - type-fest "^0.4.1" - write-json-file "^3.2.0" - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@8.13.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@21.1.1, yargs-parser@^21.0.1, 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-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0, yargs@^16.0.0, yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.1.0, yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.2: - 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.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zod@^3.22.4: - version "3.22.4" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" - integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== From 539269e60f33790a9753644feff729902fea1349 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Fri, 19 Apr 2024 17:10:01 +0100 Subject: [PATCH 1165/1247] chore: add further tests (#471) * chore: add further tests --- .../actions/install-dependencies/action.yml | 1 - .github/workflows/size-report.yml | 8 ++- .github/workflows/test-read.yml | 2 +- .github/workflows/test-write.yml | 2 + .size-limit.json | 6 +- biome.json | 3 +- bun.lockb | Bin 262560 -> 263597 bytes package.json | 1 + src/account/BiconomySmartAccountV2.ts | 16 +++-- src/account/utils/EthersSigner.ts | 3 +- src/account/utils/HttpRequests.ts | 4 +- src/account/utils/Logger.ts | 9 +-- src/account/utils/Types.ts | 3 + src/account/utils/Utils.ts | 1 + .../session-storage/SessionFileStorage.ts | 12 ++-- .../session-storage/SessionLocalStorage.ts | 5 +- .../session-storage/SessionMemoryStorage.ts | 4 +- src/paymaster/utils/Types.ts | 3 + tests/account/read.test.ts | 56 +----------------- tests/account/write.test.ts | 56 +++++++++++++++++- tests/bundler/read.test.ts | 4 +- tests/bundler/write.test.ts | 44 +++++++++++++- tests/modules/read.test.ts | 2 +- tests/modules/write.test.ts | 5 +- tests/paymaster/read.test.ts | 2 +- 25 files changed, 158 insertions(+), 94 deletions(-) diff --git a/.github/actions/install-dependencies/action.yml b/.github/actions/install-dependencies/action.yml index 303914370..3dbb2bd0b 100644 --- a/.github/actions/install-dependencies/action.yml +++ b/.github/actions/install-dependencies/action.yml @@ -10,5 +10,4 @@ runs: - name: Install dependencies shell: bash run: | - bun install buffer bun install --frozen-lockfile diff --git a/.github/workflows/size-report.yml b/.github/workflows/size-report.yml index 5dabd450e..99d8cb94f 100644 --- a/.github/workflows/size-report.yml +++ b/.github/workflows/size-report.yml @@ -19,8 +19,14 @@ jobs: - name: Clone repository uses: actions/checkout@v3 + - name: Set up Bun + uses: oven-sh/setup-bun@v1 + - name: Install dependencies - uses: ./.github/actions/install-dependencies + shell: bash + run: | + bun install buffer + bun install --frozen-lockfile --production - name: Report bundle size uses: andresz1/size-limit-action@master diff --git a/.github/workflows/test-read.yml b/.github/workflows/test-read.yml index a972a2fea..4a36c8c45 100644 --- a/.github/workflows/test-read.yml +++ b/.github/workflows/test-read.yml @@ -1,4 +1,4 @@ -name: test:read +name: test-read on: workflow_dispatch: pull_request: diff --git a/.github/workflows/test-write.yml b/.github/workflows/test-write.yml index 12487e077..ee749bdbe 100644 --- a/.github/workflows/test-write.yml +++ b/.github/workflows/test-write.yml @@ -3,6 +3,8 @@ on: workflow_dispatch: pull_request_review: types: [submitted] + pull_request: + types: [opened] jobs: test-write: name: test-write diff --git a/.size-limit.json b/.size-limit.json index 86c157518..97fe21ed6 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -2,18 +2,18 @@ { "name": "core (esm)", "path": "./dist/_esm/index.js", - "limit": "10 kB", + "limit": "60 kB", "import": "*" }, { "name": "core (cjs)", "path": "./dist/_cjs/index.js", - "limit": "25 kB" + "limit": "60 kB" }, { "name": "smartAccount (tree-shaking)", "path": "./dist/_esm/index.js", - "limit": "5 kB", + "limit": "60 kB", "import": "{ createSmartAccountClient }" }, { diff --git a/biome.json b/biome.json index 20f2a72ce..dfd9300dc 100644 --- a/biome.json +++ b/biome.json @@ -12,7 +12,8 @@ "_esm", "_types", "bun.lockb", - "docs" + "docs", + "dist" ] }, "organizeImports": { diff --git a/bun.lockb b/bun.lockb index b5ff986bce2335154fdd941cc3017a64ea05c78c..d4c0bada894740cb93b5cf72198f651cd50f3078 100755 GIT binary patch delta 49611 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 delta 49259 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 diff --git a/package.json b/package.json index f8649f58c..a3d38bc83 100644 --- a/package.json +++ b/package.json @@ -108,6 +108,7 @@ "commit-msg": "npx --no -- commitlint --edit ${1}" }, "dependencies": { + "buffer": "^6.0.3", "merkletreejs": "^0.3.11" } } diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index f92040cfb..981f88da9 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -714,7 +714,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { (smartAccountInfo: { factoryVersion: string currentVersion: string - deploymentIndex: { toString: () => any } + deploymentIndex: { toString: () => string } }) => smartAccountInfo.factoryVersion === "v1" && smartAccountInfo.currentVersion === "2.0.0" && @@ -887,7 +887,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { if (paymasterServiceData.mode === PaymasterMode.ERC20) { if (paymasterServiceData?.feeQuote) { const { feeQuote, spender, maxApproval = false } = paymasterServiceData - Logger.log("there is a feeQuote: ", feeQuote) + Logger.log("there is a feeQuote: ", JSON.stringify(feeQuote, null, 2)) if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED) if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH) if ( @@ -1166,7 +1166,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ] this.validateUserOp(userOp, requiredFields) if (!this.bundler) throw new Error("Bundler is not provided") - Logger.warn("userOp being sent to the bundler", userOp) + Logger.warn( + "userOp being sent to the bundler", + JSON.stringify(userOp, null, 2) + ) const bundlerResponse = await this.bundler.sendUserOp( userOp, simulationType @@ -1498,7 +1501,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { let newCallData = userOp.callData Logger.warn( "Received information about fee token address and quote ", - tokenPaymasterRequest + tokenPaymasterRequest.toString() ) if (this.paymaster && this.paymaster instanceof Paymaster) { @@ -1589,7 +1592,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } } catch (error) { Logger.log("Failed to update userOp. Sending back original op") - Logger.error("Failed to update callData with error", error) + Logger.error( + "Failed to update callData with error", + JSON.stringify(error) + ) return userOp } return userOp diff --git a/src/account/utils/EthersSigner.ts b/src/account/utils/EthersSigner.ts index 5019597be..8af82cb10 100644 --- a/src/account/utils/EthersSigner.ts +++ b/src/account/utils/EthersSigner.ts @@ -23,7 +23,8 @@ export class EthersSigner<T extends LightSigner> return this.#correctSignature(signature as Hex) } - async signTypedData(_notUsed: any): Promise<Hex> { + // biome-ignore lint/suspicious/noExplicitAny: <explanation> + async signTypedData(_: any): Promise<Hex> { throw new Error("signTypedData is not supported for Ethers Signer") } diff --git a/src/account/utils/HttpRequests.ts b/src/account/utils/HttpRequests.ts index 07e900225..0b641aff1 100644 --- a/src/account/utils/HttpRequests.ts +++ b/src/account/utils/HttpRequests.ts @@ -8,10 +8,10 @@ export enum HttpMethod { Delete = "delete" } -/* eslint-disable @typescript-eslint/no-explicit-any */ export interface HttpRequest { url: string method: HttpMethod + // biome-ignore lint/suspicious/noExplicitAny: <explanation> body?: Record<string, any> } @@ -28,7 +28,7 @@ export async function sendRequest<T>( body: JSON.stringify(body) }) - // biome-ignore lint/suspicious/noImplicitAnyLet: <explanation> + // biome-ignore lint/suspicious/noExplicitAny: <explanation> let jsonResponse: any try { jsonResponse = await response.json() diff --git a/src/account/utils/Logger.ts b/src/account/utils/Logger.ts index fd0aad9cb..c096cc270 100644 --- a/src/account/utils/Logger.ts +++ b/src/account/utils/Logger.ts @@ -21,8 +21,7 @@ class Logger { * warn - Magenta[time] Yellow[WARN]: Cyan[message]: [value] * error - Magenta[time] Red[ERROR]: Cyan[message]: [value] */ - /* eslint-disable @typescript-eslint/no-explicit-any */ - static log(message: string, value?: any): void { + static log(message: string, value = ""): void { const timestamp = new Date().toISOString() const logMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[36m${message}\x1b[0m:` @@ -31,8 +30,7 @@ class Logger { } } - /* eslint-disable @typescript-eslint/no-explicit-any */ - static warn(message: string, value?: any): void { + static warn(message: string, value = ""): void { const timestamp = new Date().toISOString() const warnMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[33mWARN\x1b[0m: \x1b[36m${message}\x1b[0m` @@ -41,8 +39,7 @@ class Logger { } } - /* eslint-disable @typescript-eslint/no-explicit-any */ - static error(message: string, value?: any): void { + static error(message: string, value = ""): void { const timestamp = new Date().toISOString() const errorMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[31mERROR\x1b[0m: \x1b[36m${message}\x1b[0m` diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 857e51167..305783750 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -239,6 +239,7 @@ export type PaymasterUserOperationDto = SponsorUserOperationDto & /** Expiry duration in seconds */ expiryDuration?: number /** Webhooks to be fired after user op is sent */ + // biome-ignore lint/suspicious/noExplicitAny: <explanation> webhookData?: Record<string, any> /** Smart account meta data */ smartAccountInfo?: SmartAccountData @@ -405,6 +406,8 @@ export interface UserOperationStruct { * @method signMessage - sign a message * @method signTypedData - sign typed data */ + +// biome-ignore lint/suspicious/noExplicitAny: <explanation> export interface SmartAccountSigner<Inner = any> { signerType: string inner: Inner diff --git a/src/account/utils/Utils.ts b/src/account/utils/Utils.ts index 979368c75..aa6c54845 100644 --- a/src/account/utils/Utils.ts +++ b/src/account/utils/Utils.ts @@ -65,6 +65,7 @@ export function packUserOp( ) } +// biome-ignore lint/suspicious/noExplicitAny: <explanation> export const isNullOrUndefined = (value: any): value is undefined => { return value === null || value === undefined } diff --git a/src/modules/session-storage/SessionFileStorage.ts b/src/modules/session-storage/SessionFileStorage.ts index 932e2d2c6..9dafc67ef 100644 --- a/src/modules/session-storage/SessionFileStorage.ts +++ b/src/modules/session-storage/SessionFileStorage.ts @@ -23,6 +23,7 @@ export class SessionFileStorage implements ISessionStorage { } // This method reads data from the file and returns it in the JSON format + // biome-ignore lint/suspicious/noExplicitAny: <explanation> private async readDataFromFile(type: "sessions" | "signers"): Promise<any> { return new Promise((resolve) => { // @ts-ignore @@ -47,6 +48,7 @@ export class SessionFileStorage implements ISessionStorage { } private async writeDataToFile( + // biome-ignore lint/suspicious/noExplicitAny: <explanation> data: any, type: "sessions" | "signers" ): Promise<void> { @@ -83,8 +85,7 @@ export class SessionFileStorage implements ISessionStorage { } // Session store is in the form of mekrleRoot and leafnodes, each object will have a root and an array of leafNodes. - private async getSessionStore(): Promise<any> { - // eslint-disable-next-line no-useless-catch + private async getSessionStore() { try { const data = await this.readDataFromFile("sessions") return data || { merkleRoot: "", leafNodes: [] } @@ -94,8 +95,7 @@ export class SessionFileStorage implements ISessionStorage { } } - private async getSignerStore(): Promise<any> { - // eslint-disable-next-line no-useless-catch + private async getSignerStore() { try { const data = await this.readDataFromFile("signers") return data || {} @@ -141,7 +141,7 @@ export class SessionFileStorage implements ISessionStorage { } async addSessionData(leaf: SessionLeafNode): Promise<void> { - Logger.log("Add session Data", leaf) + Logger.log("Add session Data") const data = await this.getSessionStore() leaf.sessionValidationModule = this.toLowercaseAddress( leaf.sessionValidationModule @@ -244,7 +244,7 @@ export class SessionFileStorage implements ISessionStorage { param: SessionSearchParam ): Promise<WalletClientSigner> { const session = await this.getSessionData(param) - Logger.log("got session", session) + Logger.log("got session") const walletClientSinger = await this.getSignerByKey( session.sessionPublicKey ) diff --git a/src/modules/session-storage/SessionLocalStorage.ts b/src/modules/session-storage/SessionLocalStorage.ts index 82fe10121..8501c2112 100644 --- a/src/modules/session-storage/SessionLocalStorage.ts +++ b/src/modules/session-storage/SessionLocalStorage.ts @@ -30,14 +30,13 @@ export class SessionLocalStorage implements ISessionStorage { "Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address." ) } - - private getSessionStore(): any { + private getSessionStore() { // @ts-ignore: LocalStorage is not available in node const data = localStorage.getItem(this.getStorageKey("sessions")) return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] } } - private getSignerStore(): any { + private getSignerStore() { // @ts-ignore: LocalStorage is not available in node const data = localStorage.getItem(this.getStorageKey("signers")) return data ? JSON.parse(data) : {} diff --git a/src/modules/session-storage/SessionMemoryStorage.ts b/src/modules/session-storage/SessionMemoryStorage.ts index b6d6e4196..b046ee4fb 100644 --- a/src/modules/session-storage/SessionMemoryStorage.ts +++ b/src/modules/session-storage/SessionMemoryStorage.ts @@ -46,12 +46,12 @@ export class SessionMemoryStorage implements ISessionStorage { ) } - private getSessionStore(): any { + private getSessionStore() { const data = memoryStorage.getItem(this.getStorageKey("sessions")) return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] } } - private getSignerStore(): any { + private getSignerStore() { const data = memoryStorage.getItem(this.getStorageKey("signers")) return data ? JSON.parse(data) : {} } diff --git a/src/paymaster/utils/Types.ts b/src/paymaster/utils/Types.ts index 6115a94bb..1d19d4773 100644 --- a/src/paymaster/utils/Types.ts +++ b/src/paymaster/utils/Types.ts @@ -11,6 +11,7 @@ export type PaymasterServiceErrorResponse = { export type JsonRpcResponse = { jsonrpc: string id: number + // biome-ignore lint/suspicious/noExplicitAny: <explanation> result?: any error?: JsonRpcError } @@ -47,6 +48,7 @@ export type FeeQuotesOrDataDto = { /** preferredToken: Can be ommitted to return all quotes */ preferredToken?: string /** Webhooks to be fired after user op is sent */ + // biome-ignore lint/suspicious/noExplicitAny: <explanation> webhookData?: Record<string, any> /** Smart account meta data */ smartAccountInfo?: SmartAccountData @@ -63,6 +65,7 @@ export type FeeTokenInfo = { export type SponsorpshipInfo = { /** Webhooks to be fired after user op is sent */ + // biome-ignore lint/suspicious/noExplicitAny: <explanation> webhookData?: Record<string, any> /** Smart account meta data */ smartAccountInfo: SmartAccountData diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index 9d9f9847f..56c4f166a 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -22,6 +22,7 @@ import { createSmartAccountClient } from "../../src/account" import { type UserOperationStruct, getChain } from "../../src/account" +import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" import { BiconomyAccountAbi } from "../../src/account/abi/SmartAccount" import { DEFAULT_ECDSA_OWNERSHIP_MODULE, @@ -31,7 +32,7 @@ import { import { Paymaster } from "../../src/paymaster" import { checkBalance, getBundlerUrl, getConfig } from "../utils" -describe("Account: Read", () => { +describe("Account:Read", () => { const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" const { chain, @@ -489,58 +490,7 @@ describe("Account: Read", () => { const epHash = await publicClient.readContract({ address: DEFAULT_ENTRYPOINT_ADDRESS, - abi: [ - { - inputs: [ - { - components: [ - { internalType: "address", name: "sender", type: "address" }, - { internalType: "uint256", name: "nonce", type: "uint256" }, - { internalType: "bytes", name: "initCode", type: "bytes" }, - { internalType: "bytes", name: "callData", type: "bytes" }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256" - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256" - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256" - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes" - }, - { internalType: "bytes", name: "signature", type: "bytes" } - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple" - } - ], - name: "getUserOpHash", - outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], - stateMutability: "view", - type: "function" - } - ], + abi: EntryPointAbi, functionName: "getUserOpHash", // @ts-ignore args: [userOp] diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index c0ddadff5..2ea34e67e 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -5,15 +5,18 @@ import { createWalletClient, encodeFunctionData, getContract, - parseAbi + parseAbi, + zeroAddress } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { beforeAll, describe, expect, test } from "vitest" import { type BiconomySmartAccountV2, + DEFAULT_ENTRYPOINT_ADDRESS, ERC20_ABI, createSmartAccountClient } from "../../src/account" +import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" import { PaymasterMode } from "../../src/paymaster" import { testOnlyOnOptimism } from "../setupFiles" import { checkBalance, getConfig, nonZeroBalance, topUp } from "../utils" @@ -71,6 +74,57 @@ describe("Account:Write", () => { ) }) + test("should send some native token to recipient via the entrypoint", async () => { + const balanceOfRecipient = await checkBalance(recipient) + + // biome-ignore lint/style/useConst: <explanation> + let userOp = await smartAccount.buildUserOp([ + { + to: recipient, + value: 1n + } + ]) + + userOp.signature = undefined + + const signedUserOp = await smartAccount.signUserOp(userOp) + + const entrypointContract = getContract({ + address: DEFAULT_ENTRYPOINT_ADDRESS, + abi: EntryPointAbi, + client: { public: publicClient, wallet: walletClient } + }) + + const hash = await entrypointContract.write.handleOps([ + [ + { + sender: signedUserOp.sender as Hex, + nonce: BigInt(signedUserOp.nonce ?? 0), + callGasLimit: BigInt(signedUserOp.callGasLimit ?? 0), + verificationGasLimit: BigInt(signedUserOp.verificationGasLimit ?? 0), + preVerificationGas: BigInt(signedUserOp.preVerificationGas ?? 0), + maxFeePerGas: BigInt(signedUserOp.maxFeePerGas ?? 0), + maxPriorityFeePerGas: BigInt(signedUserOp.maxPriorityFeePerGas ?? 0), + initCode: signedUserOp.initCode as Hex, + callData: signedUserOp.callData as Hex, + paymasterAndData: signedUserOp.paymasterAndData as Hex, + signature: signedUserOp.signature as Hex + } + ], + sender + ]) + + const { status, transactionHash } = + await publicClient.waitForTransactionReceipt({ hash }) + + expect(status).toBe("success") + expect(transactionHash).toBeTruthy() + + const balanceOfRecipientAfter = await checkBalance(recipient) + + expect(balanceOfRecipientAfter - balanceOfRecipient).toBe(1n) + }, 50000) + test("should deploy a smart account with native token balance", async () => { const newPrivateKey = generatePrivateKey() const newAccount = privateKeyToAccount(newPrivateKey) diff --git a/tests/bundler/read.test.ts b/tests/bundler/read.test.ts index 16b8ecf58..9a0604976 100644 --- a/tests/bundler/read.test.ts +++ b/tests/bundler/read.test.ts @@ -1,4 +1,4 @@ -import { http, type Chain, createWalletClient } from "viem" +import { http, type Chain, type Hex, createWalletClient } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { beforeAll, describe, expect, test } from "vitest" import { @@ -10,7 +10,7 @@ import { import { createBundler } from "../../src/bundler" import { getBundlerUrl, getConfig } from "../utils" -describe("Bundler: Read", () => { +describe("Bundler:Read", () => { const { chain, chainId, diff --git a/tests/bundler/write.test.ts b/tests/bundler/write.test.ts index a67f25e32..cc3ba35cd 100644 --- a/tests/bundler/write.test.ts +++ b/tests/bundler/write.test.ts @@ -3,10 +3,17 @@ import { privateKeyToAccount } from "viem/accounts" import { beforeAll, describe, expect, test } from "vitest" import { type BiconomySmartAccountV2, - createSmartAccountClient + createSmartAccountClient, + getChain } from "../../src/account" import { createBundler } from "../../src/bundler" -import { checkBalance, getConfig, nonZeroBalance, topUp } from "../utils" +import { + checkBalance, + getBundlerUrl, + getConfig, + nonZeroBalance, + topUp +} from "../utils" describe("Bundler:Write", () => { const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" @@ -116,4 +123,37 @@ describe("Bundler:Write", () => { expect(transactionHash).toBeTruthy() expect(newBalanceOfRecipient - balanceOfRecipient).toBe(1n) }, 70000) + + test("should test a new network", async () => { + /* Set the network id and paymaster key */ + const NETWORK_ID = 80002 + const PAYMASTER_KEY = "<API_KEY>" + /****************************************/ + const chain = getChain(NETWORK_ID) + const bundlerUrl = getBundlerUrl(NETWORK_ID) + const paymasterUrl = `https://paymaster.biconomy.io/api/v1/${NETWORK_ID}/${PAYMASTER_KEY}` + + const newWalletClient = createWalletClient({ + account, + chain, + transport: http() + }) + + const newSmartAccount = await createSmartAccountClient({ + signer: newWalletClient, + bundlerUrl + // paymasterUrl + }) + + expect(chain.id).toBe(NETWORK_ID) + + const { wait } = await newSmartAccount.sendTransaction({ + to: recipient, + value: 1n + }) + + const { success } = await wait() + + expect(success).toBe("true") + }, 70000) }) diff --git a/tests/modules/read.test.ts b/tests/modules/read.test.ts index 78d72affd..a5d5c1a5e 100644 --- a/tests/modules/read.test.ts +++ b/tests/modules/read.test.ts @@ -19,7 +19,7 @@ import { } from "../../src/modules" import { getConfig } from "../utils" -describe("Modules: Read", () => { +describe("Modules:Read", () => { const { chain, chainId, diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts index 37e498fe5..5902775ba 100644 --- a/tests/modules/write.test.ts +++ b/tests/modules/write.test.ts @@ -215,9 +215,11 @@ describe("Modules:Write", () => { // Send the signed user ops on both chains const userOpResponse1 = await baseAccount.sendSignedUserOp( + // biome-ignore lint/suspicious/noExplicitAny: <explanation> returnedOps[0] as any ) const userOpResponse2 = await polygonAccount.sendSignedUserOp( + // biome-ignore lint/suspicious/noExplicitAny: <explanation> returnedOps[1] as any ) @@ -314,6 +316,7 @@ describe("Modules:Write", () => { to: DEFAULT_SESSION_KEY_MANAGER_MODULE, data: sessionTxData.data } + // biome-ignore lint/suspicious/noExplicitAny: <explanation> const txArray: any = [] // Check if module is enabled const isEnabled = await smartAccount.isModuleEnabled( @@ -521,8 +524,6 @@ describe("Modules:Write", () => { const usdcBalance = await checkBalance(smartAccountAddress, token) const nativeTokenBalance = await checkBalance(smartAccountAddress) - console.log({ usdcBalance, nativeTokenBalance }) - expect(usdcBalance).toBeGreaterThan(0) smartAccount = smartAccount.setActiveValidationModule(batchedSessionModule) // WARNING* If the smart account does not have enough USDC, user op execution will FAIL diff --git a/tests/paymaster/read.test.ts b/tests/paymaster/read.test.ts index a57af2d4d..99f060f1d 100644 --- a/tests/paymaster/read.test.ts +++ b/tests/paymaster/read.test.ts @@ -19,7 +19,7 @@ import { } from "../../src/paymaster" import { getConfig } from "../utils" -describe.skip("Paymaster: Read", () => { +describe("Paymaster:Read", () => { const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" const { chain, From facab25b36e9c3e182d68f7b58eddc988f50869d Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Fri, 19 Apr 2024 18:39:40 +0200 Subject: [PATCH 1166/1247] chore: add 6492 signature (#468) * chore: add 6492 signature --- src/account/BiconomySmartAccountV2.ts | 69 ++++++++++++++++++++------- src/account/utils/Constants.ts | 2 + tests/account/read.test.ts | 40 ++++++++++++++++ tests/bundler/write.test.ts | 2 +- 4 files changed, 94 insertions(+), 19 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 981f88da9..633698265 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -16,7 +16,8 @@ import { parseAbi, parseAbiParameters, toBytes, - toHex + toHex, + concat } from "viem" import type { IBundler } from "../bundler/IBundler.js" import { @@ -62,6 +63,7 @@ import { DEFAULT_FALLBACK_HANDLER_ADDRESS, ERC20_ABI, ERROR_MESSAGES, + MAGIC_BYTES, NATIVE_TOKEN_ALIAS, PROXY_CREATION_CODE } from "./utils/Constants.js" @@ -737,17 +739,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async getAccountInitCode(): Promise<Hex> { this.isDefaultValidationModuleDefined() + if(await this.isAccountDeployed()) return "0x"; + return concatHex([ this.factoryAddress as Hex, - encodeFunctionData({ - abi: BiconomyFactoryAbi, - functionName: "deployCounterFactualAccount", - args: [ - this.defaultValidationModule.getAddress() as Hex, - (await this.defaultValidationModule.getInitData()) as Hex, - BigInt(this.index) - ] - }) + await this.getFactoryData() ?? "0x" ]) } @@ -1695,10 +1691,29 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ) } + async getFactoryData() { + if (await this.isAccountDeployed()) return undefined + + this.isDefaultValidationModuleDefined() + + return ( + encodeFunctionData({ + abi: BiconomyFactoryAbi, + functionName: "deployCounterFactualAccount", + args: [ + this.defaultValidationModule.getAddress() as Hex, + (await this.defaultValidationModule.getInitData()) as Hex, + BigInt(this.index) + ] + }) + ) + } + async signMessage(message: string | Uint8Array): Promise<Hex> { - this.isActiveValidationModuleDefined() - const dataHash = typeof message === "string" ? toBytes(message) : message - let signature = await this.activeValidationModule.signMessage(dataHash) + let signature: any; + this.isActiveValidationModuleDefined(); + const dataHash = typeof message === "string" ? toBytes(message) : message; + signature = await this.activeValidationModule.signMessage(dataHash); const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) if (![27, 28].includes(potentiallyIncorrectV)) { @@ -1708,11 +1723,29 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { if (signature.slice(0, 2) !== "0x") { signature = `0x${signature}` } - signature = encodeAbiParameters(parseAbiParameters("bytes, address"), [ - signature as Hex, - this.defaultValidationModule.getAddress() - ]) - return signature as Hex + signature = encodeAbiParameters([{ type: "bytes" }, { type: "address" }], [signature as Hex, this.defaultValidationModule.getAddress()]); + if (await this.isAccountDeployed()) { + return signature as Hex; + } else { + const abiEncodedMessage = encodeAbiParameters( + [ + { + type: "address", + name: "create2Factory", + }, + { + type: "bytes", + name: "factoryCalldata", + }, + { + type: "bytes", + name: "originalERC1271Signature", + }, + ], + [this.getFactoryAddress() ?? "0x", (await this.getFactoryData()) ?? "0x", signature] + ); + return concat([abiEncodedMessage, MAGIC_BYTES]); + } } async getIsValidSignatureData( diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index edd7ef64b..814b6dedf 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -10,6 +10,8 @@ import type { export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000" +export const MAGIC_BYTES = "0x6492649264926492649264926492649264926492649264926492649264926492"; + // will always be latest entrypoint address export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789" diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index 56c4f166a..c2fa84b36 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -652,4 +652,44 @@ describe("Account:Read", () => { expect(response).toBe(eip1271MagicValue) }) + + test.concurrent("should verifySignature of deployed", async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + index: 1, + }); + + const message = "hello world"; + + const signature = await smartAccount.signMessage(message); + + const isVerified = await publicClient.verifyMessage({ + address: await smartAccount.getAddress(), + message, + signature, + }); + + expect(isVerified).toBeTruthy(); + }); + + test.concurrent("should verifySignature of not deployed", async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + index: 100, + }); + + const message = "hello world"; + + const signature = await smartAccount.signMessage(message); + + const isVerified = await publicClient.verifyMessage({ + address: await smartAccount.getAddress(), + message, + signature, + }); + + expect(isVerified).toBeTruthy(); + }); }) diff --git a/tests/bundler/write.test.ts b/tests/bundler/write.test.ts index cc3ba35cd..5fd3b3d9d 100644 --- a/tests/bundler/write.test.ts +++ b/tests/bundler/write.test.ts @@ -86,7 +86,7 @@ describe("Bundler:Write", () => { expect(transactionHash).toBeTruthy() expect(newBalanceOfRecipient - balanceOfRecipient).toBe(1n) - }, 50000) + }, 60000) test("should send some native token to a recipient with a bundler instance", async () => { await topUp(smartAccountAddress, BigInt(1000000000000000000)) From 6c6583fdfe77f6a72b59f0f27256e2279c5dc884 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Fri, 19 Apr 2024 18:05:43 +0100 Subject: [PATCH 1167/1247] chore: remove buffer (#473) chore: remove buffer --- .github/workflows/size-report.yml | 3 +- bun.lockb | Bin 263597 -> 263597 bytes package.json | 6 +-- src/account/BiconomySmartAccountV2.ts | 61 ++++++++++++++------------ src/account/utils/Constants.ts | 3 +- tests/account/read.test.ts | 36 +++++++-------- 6 files changed, 57 insertions(+), 52 deletions(-) diff --git a/.github/workflows/size-report.yml b/.github/workflows/size-report.yml index 99d8cb94f..0cbdac716 100644 --- a/.github/workflows/size-report.yml +++ b/.github/workflows/size-report.yml @@ -25,8 +25,7 @@ jobs: - name: Install dependencies shell: bash run: | - bun install buffer - bun install --frozen-lockfile --production + bun install --frozen-lockfile - name: Report bundle size uses: andresz1/size-limit-action@master diff --git a/bun.lockb b/bun.lockb index d4c0bada894740cb93b5cf72198f651cd50f3078..1784ac93e6885f3b9ebf417939f3fe7293049a23 100755 GIT binary patch delta 19487 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 bnKH7w{aN{KS9`Eb8DXzm(`~+e+|>UAVQ7J; delta 19351 zcmeHvd0bW1`u^GL0J2e3L<9t!2Sh;z;ef~i6%`Of9I@0wKskwmqA59mT}#c(VOJ~7 zF)QcFOwp^RHYpkoIplDiDoaf*vq8P7-{;wTpYYzF_x`^3{_*?c_i5|HyWVF_?|Ro- z@7iY{HXCNw-7vfEd)Z3Fu<^r(=a02m9QpbAw&)I)jqVnUYO$0*?HHF|GR|TN@vvBG zLZ1g&3-Z1;MrmBO$kSp8f;JU05HiQqQy~4Jhd?%hbc1XG`7Nq8f!qg4{%y!+kTW0~ zLl&4a&CG9W>UAL5{?9NW0P;IXG+9<&TvReHx1_|f)LSRYXTWAySUx&ubde*^V#zNV zHr`Q~XUT71vD5?K2NFfg?U3~$+nKzdsk@r_w|tE9=OJ0H5)xVEn@xQwq_5?1OZiMQ zV>~1q&M^yQLbAhnQ*Q~$2I@hw+"Wcd|Hc5oCwn7_-^H)vNx>#~~|4#rvj08XYH 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 YE~xP7YMq!S-y3LkujulUb>xKq0rh?_h5!Hn diff --git a/package.json b/package.json index a3d38bc83..dfd5d83b1 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "sideEffects": false, "name": "@biconomy/account", "author": "Biconomy", - "version": "4.1.2", + "version": "4.1.3", "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ "erc-7579", @@ -94,7 +94,8 @@ "tsc-alias": "^1.8.8", "tslib": "^2.6.2", "typedoc": "^0.25.9", - "vitest": "^1.3.1" + "vitest": "^1.3.1", + "buffer": "^6.0.3" }, "peerDependencies": { "typescript": "^5", @@ -108,7 +109,6 @@ "commit-msg": "npx --no -- commitlint --edit ${1}" }, "dependencies": { - "buffer": "^6.0.3", "merkletreejs": "^0.3.11" } } diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 633698265..6b7cd373e 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -3,6 +3,7 @@ import { type GetContractReturnType, type Hex, type PublicClient, + concat, concatHex, createPublicClient, decodeFunctionData, @@ -16,8 +17,7 @@ import { parseAbi, parseAbiParameters, toBytes, - toHex, - concat + toHex } from "viem" import type { IBundler } from "../bundler/IBundler.js" import { @@ -739,11 +739,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async getAccountInitCode(): Promise<Hex> { this.isDefaultValidationModuleDefined() - if(await this.isAccountDeployed()) return "0x"; + if (await this.isAccountDeployed()) return "0x" return concatHex([ this.factoryAddress as Hex, - await this.getFactoryData() ?? "0x" + (await this.getFactoryData()) ?? "0x" ]) } @@ -1696,24 +1696,22 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.isDefaultValidationModuleDefined() - return ( - encodeFunctionData({ - abi: BiconomyFactoryAbi, - functionName: "deployCounterFactualAccount", - args: [ - this.defaultValidationModule.getAddress() as Hex, - (await this.defaultValidationModule.getInitData()) as Hex, - BigInt(this.index) - ] - }) - ) + return encodeFunctionData({ + abi: BiconomyFactoryAbi, + functionName: "deployCounterFactualAccount", + args: [ + this.defaultValidationModule.getAddress() as Hex, + (await this.defaultValidationModule.getInitData()) as Hex, + BigInt(this.index) + ] + }) } async signMessage(message: string | Uint8Array): Promise<Hex> { - let signature: any; - this.isActiveValidationModuleDefined(); - const dataHash = typeof message === "string" ? toBytes(message) : message; - signature = await this.activeValidationModule.signMessage(dataHash); + let signature: any + this.isActiveValidationModuleDefined() + const dataHash = typeof message === "string" ? toBytes(message) : message + signature = await this.activeValidationModule.signMessage(dataHash) const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) if (![27, 28].includes(potentiallyIncorrectV)) { @@ -1723,28 +1721,35 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { if (signature.slice(0, 2) !== "0x") { signature = `0x${signature}` } - signature = encodeAbiParameters([{ type: "bytes" }, { type: "address" }], [signature as Hex, this.defaultValidationModule.getAddress()]); + signature = encodeAbiParameters( + [{ type: "bytes" }, { type: "address" }], + [signature as Hex, this.defaultValidationModule.getAddress()] + ) if (await this.isAccountDeployed()) { - return signature as Hex; + return signature as Hex } else { const abiEncodedMessage = encodeAbiParameters( [ { type: "address", - name: "create2Factory", + name: "create2Factory" }, { type: "bytes", - name: "factoryCalldata", + name: "factoryCalldata" }, { type: "bytes", - name: "originalERC1271Signature", - }, + name: "originalERC1271Signature" + } ], - [this.getFactoryAddress() ?? "0x", (await this.getFactoryData()) ?? "0x", signature] - ); - return concat([abiEncodedMessage, MAGIC_BYTES]); + [ + this.getFactoryAddress() ?? "0x", + (await this.getFactoryData()) ?? "0x", + signature + ] + ) + return concat([abiEncodedMessage, MAGIC_BYTES]) } } diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index 814b6dedf..320a89ac0 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -10,7 +10,8 @@ import type { export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000" -export const MAGIC_BYTES = "0x6492649264926492649264926492649264926492649264926492649264926492"; +export const MAGIC_BYTES = + "0x6492649264926492649264926492649264926492649264926492649264926492" // will always be latest entrypoint address export const DEFAULT_ENTRYPOINT_ADDRESS = diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index c2fa84b36..bff2d861b 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -657,39 +657,39 @@ describe("Account:Read", () => { const smartAccount = await createSmartAccountClient({ signer: walletClient, bundlerUrl, - index: 1, - }); + index: 1 + }) + + const message = "hello world" - const message = "hello world"; + const signature = await smartAccount.signMessage(message) - const signature = await smartAccount.signMessage(message); - const isVerified = await publicClient.verifyMessage({ address: await smartAccount.getAddress(), message, - signature, - }); + signature + }) - expect(isVerified).toBeTruthy(); - }); + expect(isVerified).toBeTruthy() + }) test.concurrent("should verifySignature of not deployed", async () => { const smartAccount = await createSmartAccountClient({ signer: walletClient, bundlerUrl, - index: 100, - }); + index: 100 + }) + + const message = "hello world" - const message = "hello world"; + const signature = await smartAccount.signMessage(message) - const signature = await smartAccount.signMessage(message); - const isVerified = await publicClient.verifyMessage({ address: await smartAccount.getAddress(), message, - signature, - }); + signature + }) - expect(isVerified).toBeTruthy(); - }); + expect(isVerified).toBeTruthy() + }) }) From e290fd15d2f2114a3678bb89bffcf5cf2371d59a Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Thu, 25 Apr 2024 13:38:57 +0100 Subject: [PATCH 1168/1247] chore: export abi svm helper (#476) * chore: export abi svm helper from modules * chore: smart contract -> sdk * chore: add tree-shaking for modules * fix walletClient signer --- .github/PULL_REQUEST_TEMPLATE/pull_request_template.md | 2 +- .size-limit.json | 8 +++++++- SECURITY.md | 2 +- src/account/utils/convertSigner.ts | 2 +- src/bundler/utils/Constants.ts | 2 ++ src/bundler/utils/getAAError.ts | 3 ++- src/modules/index.ts | 1 + tests/modules/write.test.ts | 4 ++-- 8 files changed, 17 insertions(+), 7 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md index fca427abe..35e920656 100644 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -1,4 +1,4 @@ -## Pull Request for Smart Contract Improvement +## Pull Request for SDK Improvement **Describe your changes:** diff --git a/.size-limit.json b/.size-limit.json index 97fe21ed6..a2bdf369c 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -11,7 +11,7 @@ "limit": "60 kB" }, { - "name": "smartAccount (tree-shaking)", + "name": "account (tree-shaking)", "path": "./dist/_esm/index.js", "limit": "60 kB", "import": "{ createSmartAccountClient }" @@ -27,5 +27,11 @@ "path": "./dist/_esm/paymaster/index.js", "limit": "5 kB", "import": "{ createPaymaster }" + }, + { + "name": "modules (tree-shaking)", + "path": "./dist/_esm/modules/index.js", + "limit": "60 kB", + "import": "{ createSessionKeyManagerModule }" } ] diff --git a/SECURITY.md b/SECURITY.md index 937edcaaf..74aa0598b 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,7 +2,7 @@ ## Reporting a Vulnerability -The safety and security of our smart contract platform is our top priority. If you have discovered a security vulnerability, we appreciate your help in disclosing it to us responsibly. +The safety and security of our sdk is our top priority. If you have discovered a security vulnerability, we appreciate your help in disclosing it to us responsibly. ### Contact Us Directly for Critical or High-Risk Findings diff --git a/src/account/utils/convertSigner.ts b/src/account/utils/convertSigner.ts index 191c84ebd..440d82ede 100644 --- a/src/account/utils/convertSigner.ts +++ b/src/account/utils/convertSigner.ts @@ -21,7 +21,7 @@ function isPrivateKeyAccount( } function isWalletClient(signer: SupportedSigner): signer is WalletClient { - return (signer as WalletClient).type === "walletClient" + return (signer as WalletClient).transport !== undefined } function isEthersSigner(signer: SupportedSigner): signer is Signer { diff --git a/src/bundler/utils/Constants.ts b/src/bundler/utils/Constants.ts index 7c0510526..297fff8f7 100644 --- a/src/bundler/utils/Constants.ts +++ b/src/bundler/utils/Constants.ts @@ -28,3 +28,5 @@ export const UserOpWaitForTxHashMaxDurationIntervals: { export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789" + +export const SDK_VERSION = "4.2.0" diff --git a/src/bundler/utils/getAAError.ts b/src/bundler/utils/getAAError.ts index 051d5bbd2..bda4bb792 100644 --- a/src/bundler/utils/getAAError.ts +++ b/src/bundler/utils/getAAError.ts @@ -1,6 +1,6 @@ import { BaseError } from "viem" import type { Service } from "../../account" - +import { SDK_VERSION } from "./Constants" export type KnownError = { name: string regex: string @@ -41,6 +41,7 @@ type AccountAbstractionErrorParams = { class AccountAbstractionError extends BaseError { override name = "AccountAbstractionError" + override version = `@biconomy/account@${SDK_VERSION}` constructor(title: string, params: AccountAbstractionErrorParams = {}) { super(title, params) diff --git a/src/modules/index.ts b/src/modules/index.ts index 3279ad1fa..bf655585f 100644 --- a/src/modules/index.ts +++ b/src/modules/index.ts @@ -1,5 +1,6 @@ export * from "./utils/Types.js" export * from "./utils/Constants.js" +export * from "./utils/Helper.js" export * from "./interfaces/IValidationModule.js" export * from "./interfaces/ISessionValidationModule.js" export * from "./BaseValidationModule.js" diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts index 5902775ba..5d66994ab 100644 --- a/tests/modules/write.test.ts +++ b/tests/modules/write.test.ts @@ -27,10 +27,10 @@ import { DEFAULT_SESSION_KEY_MANAGER_MODULE, createBatchedSessionRouterModule, createMultiChainValidationModule, - createSessionKeyManagerModule + createSessionKeyManagerModule, + getABISVMSessionKeyData } from "../../src/modules" import { SessionMemoryStorage } from "../../src/modules/session-storage/SessionMemoryStorage" -import { getABISVMSessionKeyData } from "../../src/modules/utils/Helper" import { PaymasterMode } from "../../src/paymaster" import { checkBalance, getBundlerUrl, getConfig, topUp } from "../utils" From 8694366165208cac6bbf7e560fe2abefce0eaa3a Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Thu, 25 Apr 2024 16:17:59 +0300 Subject: [PATCH 1169/1247] chore: add token balances in getSupportedTokens (#470) * added fetch for token balance in getSupportedTokens * refactor for getting supported tokens balance --------- Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: Joe Pegler <joepegler123@gmail.com> --- src/account/BiconomySmartAccountV2.ts | 36 ++++++++++++++----------- src/account/utils/Types.ts | 2 +- tests/account/read.test.ts | 39 ++++++++++++++++++++++----- tests/paymaster/read.test.ts | 1 + 4 files changed, 55 insertions(+), 23 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 6b7cd373e..adf18b6df 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -347,9 +347,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } /** - * Returns token balances (and native token balance) of the smartAccount instance. + * Returns tokens balance and information of the tokens (for native and erc20 tokens) for the smartAccount instance. * - * This method will fetch the token balances of the smartAccount instance. + * This method will fetch tokens info given an array of token addresses for the smartAccount instance. * The balance of the native token will always be returned as the last element in the reponse array, with the address set to 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE. * * @param addresses - Optional. Array of asset addresses to fetch the balances of. If not provided, the method will return only the balance of the native token. @@ -369,7 +369,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a"; * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); - * const [tokenBalanceFromSmartAccount, nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalances([token]); + * const [tokenBalanceFromSmartAccount, nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalance([token]); * * console.log(tokenBalanceFromSmartAccount); * // { @@ -382,7 +382,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * // or to get the nativeToken balance * - * const [nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalances(); + * const [nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalance(); * * console.log(nativeTokenBalanceFromSmartAccount); * // { @@ -394,7 +394,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * // } * */ - public async getBalances( + public async getBalance( addresses?: Array<Hex> ): Promise<Array<BalancePayload>> { const accountAddress = await this.getAccountAddress() @@ -512,7 +512,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Get the balances of the tokens if the amount is not present in the withdrawal requests if (shouldFetchMaxBalances) { - const balances = await this.getBalances( + const balances = await this.getBalance( tokenRequests.map(({ address }) => address) ) tokenRequests = tokenRequests.map(({ amount, address }, i) => ({ @@ -1067,16 +1067,20 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { paymasterServiceData: { mode: PaymasterMode.ERC20 } } ) - return (feeQuotesResponse?.feeQuotes ?? []).map( - ({ - maxGasFee: _, - maxGasFeeUSD: __, - validUntil: ___, - usdPayment: ____, - ...rest - }) => rest - ) - } + + return await Promise.all( + (feeQuotesResponse?.feeQuotes ?? []).map(async (quote) => { + const [tokenBalance] = await this.getBalance([quote.tokenAddress as Hex]) + return { + symbol: quote.symbol, + tokenAddress: quote.tokenAddress, + decimal: quote.decimal, + logoUrl: quote.logoUrl, + premiumPercentage: quote.premiumPercentage, + balance: tokenBalance + }; + }) + )} /** * diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 305783750..e9fc72d5f 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -331,7 +331,7 @@ export type Transaction = { export type SupportedToken = Omit< PaymasterFeeQuote, "maxGasFeeUSD" | "usdPayment" | "maxGasFee" | "validUntil" -> +> & { balance: BalancePayload }; export type Signer = LightSigner & { // biome-ignore lint/suspicious/noExplicitAny: any is used here to allow for the ethers provider diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index bff2d861b..24ac7ffb1 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -19,7 +19,8 @@ import { ERROR_MESSAGES, NATIVE_TOKEN_ALIAS, compareChainIds, - createSmartAccountClient + createSmartAccountClient, + isNullOrUndefined } from "../../src/account" import { type UserOperationStruct, getChain } from "../../src/account" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" @@ -563,13 +564,25 @@ describe("Account:Read", () => { test.concurrent("should fetch balances for smartAccount", async () => { const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ - token - ]) + const [tokenBalanceFromSmartAccount] = + await smartAccount.getBalance([token]) expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) }) + test.concurrent( + "should fetch only token balance for a smartAccount", + async () => { + const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) + const tokenBalanceFromSmartAccount = + await smartAccount.getBalance([token]) + console.log(tokenBalanceFromSmartAccount); + + // expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount) + } + ) + test.concurrent("should error if no recipient exists", async () => { const token: Hex = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" @@ -594,9 +607,10 @@ describe("Account:Read", () => { ) test.concurrent( - "should check native token balance for smartAccount", + "should check native token balance and more token info for smartAccount", async () => { - const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() + const [ethBalanceFromSmartAccount] = + await smartAccount.getBalance() expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) @@ -606,6 +620,19 @@ describe("Account:Read", () => { 60000 ) + test.concurrent( + "should check balance of supported token", + async () => { + const tokens = await smartAccount.getSupportedTokens() + const [firstToken] = tokens; + + expect(tokens.length).toBeGreaterThan(0); + expect(tokens[0]).toHaveProperty("balance"); + expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n); + }, + 60000 + ) + test.concurrent( "should verify a correct signature through isValidSignature", async () => { diff --git a/tests/paymaster/read.test.ts b/tests/paymaster/read.test.ts index 99f060f1d..3b851100b 100644 --- a/tests/paymaster/read.test.ts +++ b/tests/paymaster/read.test.ts @@ -104,6 +104,7 @@ describe("Paymaster:Read", () => { expect(tokens[0]).toHaveProperty("decimal") expect(tokens[0]).toHaveProperty("premiumPercentage") expect(tokens[0]).toHaveProperty("logoUrl") + expect(tokens[0]).toHaveProperty("balance") }, 60000 ) From 950a521af63d7a719edcbae4df57259d3fe110e7 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Thu, 25 Apr 2024 14:24:00 +0100 Subject: [PATCH 1170/1247] feat: gas estimates (#477) * feat: gas estimates --- src/account/BiconomySmartAccountV2.ts | 146 ++++++++++++++++++++------ src/account/utils/HttpRequests.ts | 22 ++-- src/bundler/utils/getAAError.ts | 26 ++++- tests/account/read.test.ts | 53 +++++++++- 4 files changed, 197 insertions(+), 50 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index adf18b6df..d1f2c0b7f 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -228,7 +228,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * transport: http(), * }); * - * const bundlerUrl = "" // Retrieve bundler url from dasboard + * const bundlerUrl = "" // Retrieve bundler url from dashboard * * const smartAccountFromStaticCreate = await BiconomySmartAccountV2.create({ signer, bundlerUrl }); * @@ -347,7 +347,81 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } /** - * Returns tokens balance and information of the tokens (for native and erc20 tokens) for the smartAccount instance. + * Returns an upper estimate for the gas spent on a specific user operation + * + * This method will fetch an approximate gas estimate for the user operation, given the current state of the network. + * It is regularly an overestimate, and the actual gas spent will likely be lower. + * It is unlikely to be an underestimate unless the network conditions rapidly change. + * + * @param transactions Array of {@link Transaction} to be sent. + * @param buildUseropDto {@link BuildUserOpOptions}. + * @returns Promise<bigint> - The estimated gas cost in wei. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonAmoy } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonAmoy, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, paymasterUrl }); // Retrieve bundler/paymaster url from dashboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const tx = { + * to: nftAddress, + * data: encodedCall + * } + * + * const amountInWei = await smartAccount.getGasEstimates([tx, tx], { + * paymasterServiceData: { + * mode: PaymasterMode.SPONSORED, + * }, + * }); + * + * console.log(amountInWei.toString()); + * + */ + public async getGasEstimate( + transactions: Transaction[], + buildUseropDto?: BuildUserOpOptions + ): Promise<bigint> { + const { + callGasLimit, + preVerificationGas, + verificationGasLimit, + maxFeePerGas + } = await this.buildUserOp(transactions, buildUseropDto) + + const _callGasLimit = BigInt(callGasLimit || 0) + const _preVerificationGas = BigInt(preVerificationGas || 0) + const _verificationGasLimit = BigInt(verificationGasLimit || 0) + const _maxFeePerGas = BigInt(maxFeePerGas || 0) + + if (!buildUseropDto?.paymasterServiceData?.mode) { + return ( + (_callGasLimit + _preVerificationGas + _verificationGasLimit) * + _maxFeePerGas + ) + } + return ( + (_callGasLimit + + BigInt(3) * _verificationGasLimit + + _preVerificationGas) * + _maxFeePerGas + ) + } + + /** + * Returns balances for the smartAccount instance. * * This method will fetch tokens info given an array of token addresses for the smartAccount instance. * The balance of the native token will always be returned as the last element in the reponse array, with the address set to 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE. @@ -982,7 +1056,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * transport: http(), * }); * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard * const encodedCall = encodeFunctionData({ * abi: parseAbi(["function safeMint(address to) public"]), * functionName: "safeMint", @@ -1042,7 +1116,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * transport: http(), * }); * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); // Retrieve bundler url from dasboard + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); // Retrieve bundler url from dashboard * const tokens = await smartAccount.getSupportedTokens(); * * // [ @@ -1067,10 +1141,12 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { paymasterServiceData: { mode: PaymasterMode.ERC20 } } ) - + return await Promise.all( (feeQuotesResponse?.feeQuotes ?? []).map(async (quote) => { - const [tokenBalance] = await this.getBalance([quote.tokenAddress as Hex]) + const [tokenBalance] = await this.getBalance([ + quote.tokenAddress as Hex + ]) return { symbol: quote.symbol, tokenAddress: quote.tokenAddress, @@ -1078,9 +1154,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { logoUrl: quote.logoUrl, premiumPercentage: quote.premiumPercentage, balance: tokenBalance - }; - }) - )} + } + }) + ) + } /** * @@ -1108,7 +1185,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * transport: http(), * }); * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard * const encodedCall = encodeFunctionData({ * abi: parseAbi(["function safeMint(address to) public"]), * functionName: "safeMint", @@ -1310,7 +1387,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * transport: http(), * }); * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard * const encodedCall = encodeFunctionData({ * abi: parseAbi(["function safeMint(address to) public"]), * functionName: "safeMint", @@ -1363,7 +1440,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * transport: http(), * }); * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dasboard + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard * const encodedCall = encodeFunctionData({ * abi: parseAbi(["function safeMint(address to) public"]), * functionName: "safeMint", @@ -1731,30 +1808,29 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ) if (await this.isAccountDeployed()) { return signature as Hex - } else { - const abiEncodedMessage = encodeAbiParameters( - [ - { - type: "address", - name: "create2Factory" - }, - { - type: "bytes", - name: "factoryCalldata" - }, - { - type: "bytes", - name: "originalERC1271Signature" - } - ], - [ - this.getFactoryAddress() ?? "0x", - (await this.getFactoryData()) ?? "0x", - signature - ] - ) - return concat([abiEncodedMessage, MAGIC_BYTES]) } + const abiEncodedMessage = encodeAbiParameters( + [ + { + type: "address", + name: "create2Factory" + }, + { + type: "bytes", + name: "factoryCalldata" + }, + { + type: "bytes", + name: "originalERC1271Signature" + } + ], + [ + this.getFactoryAddress() ?? "0x", + (await this.getFactoryData()) ?? "0x", + signature + ] + ) + return concat([abiEncodedMessage, MAGIC_BYTES]) } async getIsValidSignatureData( diff --git a/src/account/utils/HttpRequests.ts b/src/account/utils/HttpRequests.ts index 0b641aff1..cdcbe07f4 100644 --- a/src/account/utils/HttpRequests.ts +++ b/src/account/utils/HttpRequests.ts @@ -35,7 +35,7 @@ export async function sendRequest<T>( Logger.log(`${service} RPC Response`, jsonResponse) } catch (error) { if (!response.ok) { - throw await getAAError(response.statusText, service) + throw await getAAError(response.statusText, response.status, service) } } @@ -48,25 +48,29 @@ export async function sendRequest<T>( ) } if (jsonResponse.message) { - throw await getAAError(jsonResponse.message) + throw await getAAError(jsonResponse.message, response.status, service) } if (jsonResponse.msg) { - throw await getAAError(jsonResponse.msg) + throw await getAAError(jsonResponse.msg, response.status, service) } if (jsonResponse.data) { - throw await getAAError(jsonResponse.data) + throw await getAAError(jsonResponse.data, response.status, service) } if (jsonResponse.detail) { - throw await getAAError(jsonResponse.detail) + throw await getAAError(jsonResponse.detail, response.status, service) } if (jsonResponse.message) { - throw await getAAError(jsonResponse.message) + throw await getAAError(jsonResponse.message, response.status, service) } if (jsonResponse.nonFieldErrors) { - throw await getAAError(jsonResponse.nonFieldErrors) + throw await getAAError( + jsonResponse.nonFieldErrors, + response.status, + service + ) } if (jsonResponse.delegate) { - throw await getAAError(jsonResponse.delegate) + throw await getAAError(jsonResponse.delegate, response.status, service) } - throw await getAAError(response.statusText) + throw await getAAError(response.statusText, response.status, service) } diff --git a/src/bundler/utils/getAAError.ts b/src/bundler/utils/getAAError.ts index bda4bb792..7a04be10f 100644 --- a/src/bundler/utils/getAAError.ts +++ b/src/bundler/utils/getAAError.ts @@ -12,6 +12,7 @@ export type KnownError = { export const ERRORS_URL = "https://bcnmy.github.io/aa-errors/errors.json" export const DOCS_URL = "https://docs.biconomy.io/troubleshooting/commonerrors" +const UNKOWN_ERROR_CODE = "520" const knownErrors: KnownError[] = [] @@ -21,9 +22,13 @@ const matchError = (message: string): null | KnownError => message.toLowerCase().indexOf(knownError.regex) > -1 ) ?? null -const buildErrorStrings = (error: KnownError, service?: Service): string[] => +const buildErrorStrings = ( + error: KnownError, + status: string, + service?: Service +): string[] => [ - `${error.description}\n`, + `${status}: ${error.description}\n`, error.causes?.length ? ["Potential cause(s): \n", ...error.causes, ""].join("\n") : "", @@ -48,7 +53,11 @@ class AccountAbstractionError extends BaseError { } } -export const getAAError = async (message: string, service?: Service) => { +export const getAAError = async ( + message: string, + httpStatus?: number, + service?: Service +) => { if (!knownErrors.length) { const errors = (await (await fetch(ERRORS_URL)).json()) as KnownError[] knownErrors.push(...errors) @@ -59,11 +68,18 @@ export const getAAError = async (message: string, service?: Service) => { ? message : JSON.stringify(message) const matchedError = matchError(details) + const status = + matchedError?.regex ?? (httpStatus ?? UNKOWN_ERROR_CODE).toString() + const metaMessages = matchedError - ? buildErrorStrings(matchedError, service) + ? buildErrorStrings(matchedError, status, service) : [] const title = matchedError ? matchedError.name : "Unknown Error" const docsSlug = matchedError?.docsUrl ?? DOCS_URL - return new AccountAbstractionError(title, { docsSlug, metaMessages, details }) + return new AccountAbstractionError(title, { + docsSlug, + metaMessages, + details + }) } diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index 24ac7ffb1..37c5593f9 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -6,7 +6,9 @@ import { createPublicClient, createWalletClient, encodeAbiParameters, + encodeFunctionData, hashMessage, + parseAbi, parseAbiParameters } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" @@ -30,11 +32,12 @@ import { DEFAULT_SESSION_KEY_MANAGER_MODULE, createECDSAOwnershipValidationModule } from "../../src/modules" -import { Paymaster } from "../../src/paymaster" +import { Paymaster, PaymasterMode } from "../../src/paymaster" import { checkBalance, getBundlerUrl, getConfig } from "../utils" describe("Account:Read", () => { const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" const { chain, chainId, @@ -103,6 +106,54 @@ describe("Account:Read", () => { 50000 ) + test.concurrent( + "should estimate gas for minting an NFT", + async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const results = await Promise.all([ + smartAccount.getGasEstimate([transaction]), + smartAccount.getGasEstimate([transaction, transaction]), + smartAccount.getGasEstimate([transaction], { + paymasterServiceData: { + mode: PaymasterMode.SPONSORED + } + }), + smartAccount.getGasEstimate([transaction, transaction], { + paymasterServiceData: { + mode: PaymasterMode.SPONSORED + } + }), + smartAccount.getGasEstimate([transaction], { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken: token + } + }), + await smartAccount.getGasEstimate([transaction, transaction], { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken: token + } + }) + ]) + + const increasingGasExpenditure = results.every( + (result, i) => result > (results[i - 1] ?? 0) + ) + + expect(increasingGasExpenditure).toBeTruthy() + }, + 60000 + ) + test.concurrent( "should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", async () => { From e39bb88aa46f282871879bb7021c627862974d81 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Thu, 25 Apr 2024 14:46:12 +0100 Subject: [PATCH 1171/1247] update docs link (#480) Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Co-authored-by: himanshugarg06 <garg91824@gmail.com> --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 889c0a096..986466f0f 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ For a comprehensive understanding of our project and to contribute effectively, - [**Contributing Guidelines**](./CONTRIBUTING.md): Learn how to contribute to our project, from code contributions to documentation improvements. - [**Code of Conduct**](./CODE_OF_CONDUCT.md): Our commitment to fostering an open and welcoming environment. - [**Security Policy**](./SECURITY.md): Guidelines for reporting security vulnerabilities. -- [**Changelog**](./CHANGELOG.md): Stay updated with the changes and versions. +- [**Changelog**](./CHANGELOG.md): Stay updated with the changes and versions ## 💼 Examples @@ -159,7 +159,7 @@ const { ## License -This project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details. +This project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details ## Connect with Biconomy 🍊 From 8d34d148862510fdb76c58852c55a48bc7c20b4c Mon Sep 17 00:00:00 2001 From: livingrockrises <90545960+livingrockrises@users.noreply.github.com> Date: Thu, 25 Apr 2024 19:02:49 +0400 Subject: [PATCH 1172/1247] chore: dumy pnd override (#481) --- src/account/BiconomySmartAccountV2.ts | 1 + src/account/utils/Types.ts | 4 +++- tests/account/read.test.ts | 25 +++++++++++++------------ 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index d1f2c0b7f..aff655ea6 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -1500,6 +1500,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // for this Smart Account current validation module dummy signature will be used to estimate gas userOp.signature = signature + userOp.paymasterAndData = buildUseropDto?.dummyPndOverride ?? "0x" if ( buildUseropDto?.paymasterServiceData && diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index e9fc72d5f..1fb265ac3 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -193,6 +193,8 @@ export type BuildUserOpOptions = { paymasterServiceData?: PaymasterUserOperationDto /** simulationType: Determine which parts of the tx a bundler will simulate: "validation" | "validation_and_execution". */ simulationType?: SimulationType + /** dummy pnd override */ + dummyPndOverride?: BytesLike /** stateOverrideSet: For overriding the state */ stateOverrideSet?: StateOverrideSet /** set to true if the tx is being used *only* to deploy the smartContract, so "0x" is set as the userOp.callData */ @@ -331,7 +333,7 @@ export type Transaction = { export type SupportedToken = Omit< PaymasterFeeQuote, "maxGasFeeUSD" | "usdPayment" | "maxGasFee" | "validUntil" -> & { balance: BalancePayload }; +> & { balance: BalancePayload } export type Signer = LightSigner & { // biome-ignore lint/suspicious/noExplicitAny: any is used here to allow for the ethers provider diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index 37c5593f9..67e2346cb 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -615,8 +615,9 @@ describe("Account:Read", () => { test.concurrent("should fetch balances for smartAccount", async () => { const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - const [tokenBalanceFromSmartAccount] = - await smartAccount.getBalance([token]) + const [tokenBalanceFromSmartAccount] = await smartAccount.getBalance([ + token + ]) expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) }) @@ -626,10 +627,11 @@ describe("Account:Read", () => { async () => { const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - const tokenBalanceFromSmartAccount = - await smartAccount.getBalance([token]) - console.log(tokenBalanceFromSmartAccount); - + const tokenBalanceFromSmartAccount = await smartAccount.getBalance([ + token + ]) + console.log(tokenBalanceFromSmartAccount) + // expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount) } ) @@ -660,8 +662,7 @@ describe("Account:Read", () => { test.concurrent( "should check native token balance and more token info for smartAccount", async () => { - const [ethBalanceFromSmartAccount] = - await smartAccount.getBalance() + const [ethBalanceFromSmartAccount] = await smartAccount.getBalance() expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) @@ -675,11 +676,11 @@ describe("Account:Read", () => { "should check balance of supported token", async () => { const tokens = await smartAccount.getSupportedTokens() - const [firstToken] = tokens; + const [firstToken] = tokens - expect(tokens.length).toBeGreaterThan(0); - expect(tokens[0]).toHaveProperty("balance"); - expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n); + expect(tokens.length).toBeGreaterThan(0) + expect(tokens[0]).toHaveProperty("balance") + expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) }, 60000 ) From b44a7bfa611aa9cf1049ee5186e2519ae24c2f0e Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Fri, 26 Apr 2024 09:44:32 +0100 Subject: [PATCH 1173/1247] chore: update readme (#482) --- README.md | 4 +++- src/account/BiconomySmartAccountV2.ts | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 986466f0f..8d8bd5bca 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,9 @@ const smartAccount = await createSmartAccountClient({ const oneOrManyTx = { to: "0x...", value: 1 }; const { wait } = await smartAccount.sendTransaction(oneOrManyTx, { - mode: PaymasterMode.SPONSORED, + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + }, }); const { diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index aff655ea6..517e12268 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -546,7 +546,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * { address: token }, // omit the amount to withdraw the full balance * { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } * ], - * account.pubKey, // Default recipient used if no recipient is present in the withdrawal request + * account.address, // Default recipient used if no recipient is present in the withdrawal request * { * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, * } @@ -554,7 +554,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * // OR to withdraw all of the native token, leaving no dust in the smart account * - * const { wait } = await smartAccount.withdraw([], account.pubKey, { + * const { wait } = await smartAccount.withdraw([], account.address, { * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, * }); * From c06a8d476d9ffeb52a24de2ac7c51ad306454df0 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Mon, 29 Apr 2024 09:54:45 +0100 Subject: [PATCH 1174/1247] chore: version bump (#483) * chore: version bump --- CHANGELOG.md | 40 +++++++++++++++++++++++++++ package.json | 11 ++++++-- src/account/BiconomySmartAccountV2.ts | 10 +++---- tests/account/read.test.ts | 18 ++---------- 4 files changed, 55 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34ab2aa28..96cc7c818 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,45 @@ # @biconomy/account +## 4.2.0 + +### Minor Changes + +- Features: + + - Improved getBalances utility helper ([da340f](https://github.com/bcnmy/biconomy-client-sdk/pull/479/commits/da340fbcc20778c9810dd8980061a6bb7b4cf097)) + - Added 1271 Signature support ([fd832fe](https://github.com/bcnmy/biconomy-client-sdk/pull/479/commits/fd832fe2e286a5d3e57d3292cfa395e388b07b96)) + - Added withdrawal utility helper ([7a93d87](https://github.com/bcnmy/biconomy-client-sdk/pull/479/commits/7a93d871ecefbce8ed5ef63349c055072877189e)) + - Reduce bundle size ([7c594fa](https://github.com/bcnmy/biconomy-client-sdk/pull/479/commits/7c594fa74e81650b4cb5043afb4cd1153e638a19)) + - Integrate [AAErrors](https://github.com/bcnmy/aa-errors) ([7c594fa](https://github.com/bcnmy/biconomy-client-sdk/pull/479/commits/7c594fa74e81650b4cb5043afb4cd1153e638a19)) + - Added 6492 Signature support ([fd832fe](https://github.com/bcnmy/biconomy-client-sdk/pull/479/commits/fd832fe2e286a5d3e57d3292cfa395e388b07b96)) + - Added Token Balances to getSupportedTokens payload ([869436](https://github.com/bcnmy/biconomy-client-sdk/pull/479/commits/8694366165208cac6bbf7e560fe2abefce0eaa3a)) + - Added gas estimates utility helper ([950a521](https://github.com/bcnmy/biconomy-client-sdk/pull/479/commits/950a521af63d7a719edcbae4df57259d3fe110e7)) + - Added dummy pnd override ([8d34d14](https://github.com/bcnmy/biconomy-client-sdk/pull/479/commits/8d34d148862510fdb76c58852c55a48bc7c20b4c)) + + Chores: + + - Modernise tooling ([7c594fa](https://github.com/bcnmy/biconomy-client-sdk/pull/479/commits/7c594fa74e81650b4cb5043afb4cd1153e638a19)) + - Add changesets + - Migrate tests to Amoy + - Add pr lint + - Add size report + - Add tree shaking + - Add code of conduct + - Update README (table of contents) + - Add SECURITY.md + - Replace prettier with biome + - Replace yarn with bun + - Remove deprecated Base class + - Added "NEXT_PUBLIC_BICONOMY_SDK_DEBUG" to support NextJS debugging information + - Replace jest with vitest + - Added size threshold checks to PRs + - Added test coverage checks to PRs + - Added tsdoc auto-deploy + + Fixes: + + - Fix wrong falsy check for user op nonce ([f2567](https://github.com/bcnmy/biconomy-client-sdk/pull/479/commits/f256712bbf7dc0de40b82c70ad183c59bf5f39f9)) + ## 4.1.1 (2023-07-03) - Added missing extensions ([fdbec6](https://github.com/bcnmy/biconomy-client-sdk/pull/451/commits/fdbec68625f4d7f436dc39d4c1779cdbb7c53e6d)) diff --git a/package.json b/package.json index dfd5d83b1..361af2fe7 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "sideEffects": false, "name": "@biconomy/account", "author": "Biconomy", - "version": "4.1.3", + "version": "4.2.0", "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ "erc-7579", @@ -46,7 +46,10 @@ "default": "./_cjs/modules/index.js" } }, - "files": ["dist/*", "README.md"], + "files": [ + "dist/*", + "README.md" + ], "scripts": { "format": "biome format . --write", "lint": "biome check .", @@ -102,7 +105,9 @@ "viem": "^2" }, "commitlint": { - "extends": ["@commitlint/config-conventional"] + "extends": [ + "@commitlint/config-conventional" + ] }, "simple-git-hooks": { "pre-commit": "bun run format && bun run lint:fix", diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 517e12268..b6899f1b7 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -443,7 +443,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a"; * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); - * const [tokenBalanceFromSmartAccount, nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalance([token]); + * const [tokenBalanceFromSmartAccount, nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalances([token]); * * console.log(tokenBalanceFromSmartAccount); * // { @@ -456,7 +456,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * // or to get the nativeToken balance * - * const [nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalance(); + * const [nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalances(); * * console.log(nativeTokenBalanceFromSmartAccount); * // { @@ -468,7 +468,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * // } * */ - public async getBalance( + public async getBalances( addresses?: Array<Hex> ): Promise<Array<BalancePayload>> { const accountAddress = await this.getAccountAddress() @@ -586,7 +586,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Get the balances of the tokens if the amount is not present in the withdrawal requests if (shouldFetchMaxBalances) { - const balances = await this.getBalance( + const balances = await this.getBalances( tokenRequests.map(({ address }) => address) ) tokenRequests = tokenRequests.map(({ amount, address }, i) => ({ @@ -1144,7 +1144,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return await Promise.all( (feeQuotesResponse?.feeQuotes ?? []).map(async (quote) => { - const [tokenBalance] = await this.getBalance([ + const [tokenBalance] = await this.getBalances([ quote.tokenAddress as Hex ]) return { diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index 67e2346cb..ca24cc709 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -615,27 +615,13 @@ describe("Account:Read", () => { test.concurrent("should fetch balances for smartAccount", async () => { const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - const [tokenBalanceFromSmartAccount] = await smartAccount.getBalance([ + const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ token ]) expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) }) - test.concurrent( - "should fetch only token balance for a smartAccount", - async () => { - const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - const tokenBalanceFromSmartAccount = await smartAccount.getBalance([ - token - ]) - console.log(tokenBalanceFromSmartAccount) - - // expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount) - } - ) - test.concurrent("should error if no recipient exists", async () => { const token: Hex = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" @@ -662,7 +648,7 @@ describe("Account:Read", () => { test.concurrent( "should check native token balance and more token info for smartAccount", async () => { - const [ethBalanceFromSmartAccount] = await smartAccount.getBalance() + const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) From 73965abdc5028f9b10ee6fe7b76bcaf9b514deda Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Thu, 9 May 2024 13:27:47 +0300 Subject: [PATCH 1175/1247] feat: gas offset param for sendTransaction and sendUserOp (#474) * feat - gas offset param for sendTransaction * added percentage based gas offsets * added dummyPndOverride * refactor gas offset percentage * refactor names and ts doc + lint * improved tsdoc & fixed comments * refactor sendTransaction example tsdoc comment * refactor sendTransaction test --------- Co-authored-by: GabiDev <gv@popoo.io> --- package.json | 9 +- src/account/BiconomySmartAccountV2.ts | 158 +++++++++++++++++++++- src/account/utils/Types.ts | 67 ++++++---- src/account/utils/Utils.ts | 19 +++ src/paymaster/BiconomyPaymaster.ts | 9 +- tests/account/write.test.ts | 183 +++++++++++++++++++++++++- tests/modules/read.test.ts | 7 +- 7 files changed, 403 insertions(+), 49 deletions(-) diff --git a/package.json b/package.json index 361af2fe7..f8e03da04 100644 --- a/package.json +++ b/package.json @@ -46,10 +46,7 @@ "default": "./_cjs/modules/index.js" } }, - "files": [ - "dist/*", - "README.md" - ], + "files": ["dist/*", "README.md"], "scripts": { "format": "biome format . --write", "lint": "biome check .", @@ -105,9 +102,7 @@ "viem": "^2" }, "commitlint": { - "extends": [ - "@commitlint/config-conventional" - ] + "extends": ["@commitlint/config-conventional"] }, "simple-git-hooks": { "pre-commit": "bun run format && bun run lint:fix", diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index b6899f1b7..fb7e631e0 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -86,6 +86,7 @@ import type { import { addressEquals, compareChainIds, + convertToFactor, isNullOrUndefined, isValidRpcUrl, packUserOp @@ -978,7 +979,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return this.getPaymasterAndData(partialUserOp, { ...paymasterServiceData, feeTokenAddress: feeQuote.tokenAddress, - calculateGasLimits: true // Always recommended and especially when using token paymaster + calculateGasLimits: paymasterServiceData.calculateGasLimits ?? true // Always recommended and especially when using token paymaster }) } if (paymasterServiceData?.preferredToken) { @@ -1402,6 +1403,40 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * const { waitForTxHash } = await smartAccount.sendTransaction(transaction); * const { transactionHash, userOperationReceipt } = await wait(); * + * @remarks + * This example shows how to increase the estimated gas values for a transaction using `gasOffset` parameter. + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonAmoy } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonAmoy, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * const { waitForTxHash } = await smartAccount.sendTransaction(transaction, { + * gasOffset: { + * verificationGasLimitOffsetPct: 25, // 25% increase for the already estimated gas limit + * preVerificationGasOffsetPct: 10 // 10% increase for the already estimated gas limit + * } + * }); + * const { transactionHash, userOperationReceipt } = await wait(); + * */ async sendTransaction( manyOrOneTransactions: Transaction | Transaction[], @@ -1513,14 +1548,135 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { userOp.maxFeePerGas = gasFeeValues?.maxFeePerGas as Hex userOp.maxPriorityFeePerGas = gasFeeValues?.maxPriorityFeePerGas as Hex + if (buildUseropDto.gasOffset) { + userOp = await this.estimateUserOpGas(userOp) + + const { + verificationGasLimitOffsetPct, + preVerificationGasOffsetPct, + callGasLimitOffsetPct, + maxFeePerGasOffsetPct, + maxPriorityFeePerGasOffsetPct + } = buildUseropDto.gasOffset + userOp.verificationGasLimit = toHex( + Number.parseInt( + ( + Number(userOp.verificationGasLimit ?? 0) * + convertToFactor(verificationGasLimitOffsetPct) + ).toString() + ) + ) + userOp.preVerificationGas = toHex( + Number.parseInt( + ( + Number(userOp.preVerificationGas ?? 0) * + convertToFactor(preVerificationGasOffsetPct) + ).toString() + ) + ) + userOp.callGasLimit = toHex( + Number.parseInt( + ( + Number(userOp.callGasLimit ?? 0) * + convertToFactor(callGasLimitOffsetPct) + ).toString() + ) + ) + userOp.maxFeePerGas = toHex( + Number.parseInt( + ( + Number(userOp.maxFeePerGas ?? 0) * + convertToFactor(maxFeePerGasOffsetPct) + ).toString() + ) + ) + userOp.maxPriorityFeePerGas = toHex( + Number.parseInt( + ( + Number(userOp.maxPriorityFeePerGas ?? 0) * + convertToFactor(maxPriorityFeePerGasOffsetPct) + ).toString() + ) + ) + + userOp = await this.getPaymasterUserOp(userOp, { + ...buildUseropDto.paymasterServiceData, + calculateGasLimits: false + }) + return userOp + } + if (buildUseropDto.paymasterServiceData.calculateGasLimits === false) { + userOp = await this.estimateUserOpGas(userOp) + } + userOp = await this.getPaymasterUserOp( userOp, buildUseropDto.paymasterServiceData ) + return userOp } + userOp = await this.estimateUserOpGas(userOp) + if (buildUseropDto?.gasOffset) { + if (buildUseropDto?.paymasterServiceData) { + userOp = await this.getPaymasterUserOp(userOp, { + ...buildUseropDto.paymasterServiceData, + calculateGasLimits: false + }) + } + + const { + verificationGasLimitOffsetPct, + preVerificationGasOffsetPct, + callGasLimitOffsetPct, + maxFeePerGasOffsetPct, + maxPriorityFeePerGasOffsetPct + } = buildUseropDto.gasOffset + userOp.verificationGasLimit = toHex( + Number.parseInt( + ( + Number(userOp.verificationGasLimit ?? 0) * + convertToFactor(verificationGasLimitOffsetPct) + ).toString() + ) + ) + userOp.preVerificationGas = toHex( + Number.parseInt( + ( + Number(userOp.preVerificationGas ?? 0) * + convertToFactor(preVerificationGasOffsetPct) + ).toString() + ) + ) + userOp.callGasLimit = toHex( + Number.parseInt( + ( + Number(userOp.callGasLimit ?? 0) * + convertToFactor(callGasLimitOffsetPct) + ).toString() + ) + ) + userOp.maxFeePerGas = toHex( + Number.parseInt( + ( + Number(userOp.maxFeePerGas ?? 0) * + convertToFactor(maxFeePerGasOffsetPct) + ).toString() + ) + ) + userOp.maxPriorityFeePerGas = toHex( + Number.parseInt( + ( + Number(userOp.maxPriorityFeePerGas ?? 0) * + convertToFactor(maxPriorityFeePerGasOffsetPct) + ).toString() + ) + ) + + return userOp + } if (buildUseropDto?.paymasterServiceData) { userOp = await this.getPaymasterUserOp( userOp, diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 1fb265ac3..7a1f2d1fd 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -178,26 +178,27 @@ export type BiconomySmartAccountV2ConfigConstructorProps = ResolvedBundlerProps & ResolvedValidationProps +/** + * Represents options for building a user operation. + * @typedef BuildUserOpOptions + * @property {GasOffset} [gasOffset] - Increment gas values by giving an offset, the given value will be an increment to the current estimated gas values, not an override. + * @property {ModuleInfo} [params] - Parameters relevant to the module, mostly relevant to sessions. + * @property {NonceOptions} [nonceOptions] - Options for overriding the nonce. + * @property {boolean} [forceEncodeForBatch] - Whether to encode the user operation for batch. + * @property {PaymasterUserOperationDto} [paymasterServiceData] - Options specific to transactions that involve a paymaster. + * @property {SimulationType} [simulationType] - Determine which parts of the transaction a bundler will simulate: "validation" | "validation_and_execution". + * @property {StateOverrideSet} [stateOverrideSet] - For overriding the state. + * @property {boolean} [useEmptyDeployCallData] - Set to true if the transaction is being used only to deploy the smart contract, so "0x" is set as the user operation call data. + */ export type BuildUserOpOptions = { - /** overrides: Explicitly set gas values */ - // overrides?: Overrides; - /** Not currently in use */ - // skipBundlerGasEstimation?: boolean; - /** params relevant to the module, mostly relevant to sessions */ + gasOffset?: GasOffsetPct params?: ModuleInfo - /** nonceOptions: For overriding the nonce */ nonceOptions?: NonceOptions - /** forceEncodeForBatch: For encoding the user operation for batch */ forceEncodeForBatch?: boolean - /** paymasterServiceData: Options specific to transactions that involve a paymaster */ paymasterServiceData?: PaymasterUserOperationDto - /** simulationType: Determine which parts of the tx a bundler will simulate: "validation" | "validation_and_execution". */ simulationType?: SimulationType - /** dummy pnd override */ - dummyPndOverride?: BytesLike - /** stateOverrideSet: For overriding the state */ stateOverrideSet?: StateOverrideSet - /** set to true if the tx is being used *only* to deploy the smartContract, so "0x" is set as the userOp.callData */ + dummyPndOverride?: BytesLike useEmptyDeployCallData?: boolean } @@ -210,21 +211,30 @@ export type NonceOptions = { export type SimulationType = "validation" | "validation_and_execution" -export type Overrides = { - /* Value used by inner account execution */ - callGasLimit?: Hex - /* Actual gas used by the validation of this UserOperation */ - verificationGasLimit?: Hex - /* Gas overhead of this UserOperation */ - preVerificationGas?: Hex - /* Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) */ - maxFeePerGas?: Hex - /* Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) */ - maxPriorityFeePerGas?: Hex - /* Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster ("0x" for self-sponsored transaction) */ - paymasterData?: Hex - /* Data passed into the account along with the nonce during the verification step */ - signature?: Hex +/** + * Represents an offset percentage value used for gas-related calculations. + * @remarks + * This type defines offset percentages for various gas-related parameters. Each percentage represents a proportion of the current estimated gas values. + * For example: + * - A value of `1` represents a 1% offset. + * - A value of `100` represents a 100% offset. + * @public + */ +/** + * Represents an object containing offset percentages for gas-related parameters. + * @typedef GasOffsetPct + * @property {number} [callGasLimitOffsetPct] - Percentage offset for the gas limit used by inner account execution. + * @property {number} [verificationGasLimitOffsetPct] - Percentage offset for the actual gas used by the validation of a UserOperation. + * @property {number} [preVerificationGasOffsetPct] - Percentage offset representing the gas overhead of a UserOperation. + * @property {number} [maxFeePerGasOffsetPct] - Percentage offset for the maximum fee per gas (similar to EIP-1559 max_fee_per_gas). + * @property {number} [maxPriorityFeePerGasOffsetPct] - Percentage offset for the maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas). + */ +export type GasOffsetPct = { + callGasLimitOffsetPct?: number + verificationGasLimitOffsetPct?: number + preVerificationGasOffsetPct?: number + maxFeePerGasOffsetPct?: number + maxPriorityFeePerGasOffsetPct?: number } export type InitilizationData = { @@ -263,7 +273,6 @@ export type InitializeV2Data = { export type EstimateUserOpGasParams = { userOp: Partial<UserOperationStruct> - // overrides?: Overrides; /** Currrently has no effect */ // skipBundlerGasEstimation?: boolean; /** paymasterServiceData: Options specific to transactions that involve a paymaster */ diff --git a/src/account/utils/Utils.ts b/src/account/utils/Utils.ts index aa6c54845..b9cc56d9c 100644 --- a/src/account/utils/Utils.ts +++ b/src/account/utils/Utils.ts @@ -159,3 +159,22 @@ export const wrapSignatureWith6492 = ({ "0x6492649264926492649264926492649264926492649264926492649264926492" ]) } + +export function percentage(partialValue: number, totalValue: number) { + return (100 * partialValue) / totalValue +} + +export function convertToFactor(percentage: number | undefined): number { + // Check if the input is within the valid range + if (percentage) { + if (percentage < 1 || percentage > 100) { + throw new Error("The percentage value should be between 1 and 100.") + } + + // Calculate the factor + const factor = percentage / 100 + 1 + + return factor + } + return 1 +} diff --git a/src/paymaster/BiconomyPaymaster.ts b/src/paymaster/BiconomyPaymaster.ts index 36e3e55ad..e0cbb8999 100644 --- a/src/paymaster/BiconomyPaymaster.ts +++ b/src/paymaster/BiconomyPaymaster.ts @@ -366,9 +366,12 @@ export class BiconomyPaymaster if (response?.result) { const paymasterAndData = response.result.paymasterAndData - const preVerificationGas = response.result.preVerificationGas - const verificationGasLimit = response.result.verificationGasLimit - const callGasLimit = response.result.callGasLimit + const preVerificationGas = + response.result.preVerificationGas ?? _userOp.preVerificationGas + const verificationGasLimit = + response.result.verificationGasLimit ?? _userOp.verificationGasLimit + const callGasLimit = + response.result.callGasLimit ?? _userOp.callGasLimit return { paymasterAndData: paymasterAndData, preVerificationGas: preVerificationGas, diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 2ea34e67e..140484dcb 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -5,8 +5,7 @@ import { createWalletClient, encodeFunctionData, getContract, - parseAbi, - zeroAddress + parseAbi } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { beforeAll, describe, expect, test } from "vitest" @@ -14,7 +13,8 @@ import { type BiconomySmartAccountV2, DEFAULT_ENTRYPOINT_ADDRESS, ERC20_ABI, - createSmartAccountClient + createSmartAccountClient, + percentage } from "../../src/account" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" import { PaymasterMode } from "../../src/paymaster" @@ -315,4 +315,181 @@ describe("Account:Write", () => { const newBalance = await checkBalance(recipient, nftAddress) expect(newBalance - balance).toBe(1n) }, 60000) + + describe("Account:User Op Gas Offset", () => { + test("should increment user op verificationGasLimit by 50%. Paymaster OFF", async () => { + const transaction = { + to: recipient, + data: "0x" + } + + const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) + const userOpWithOffset = await smartAccount.buildUserOp([transaction], { + gasOffset: { + verificationGasLimitOffsetPct: 50 // 50% increase + } + }) + + const difference = Math.round( + Number(userOpWithOffset.verificationGasLimit) - + Number(userOpWithNoOffset.verificationGasLimit) + ) + const percentageValue = Math.round( + percentage(difference, Number(userOpWithNoOffset.verificationGasLimit)) + ) + + expect(percentageValue).toBe(50) + }, 60000) + + test("should increment user op gas values. Paymaster OFF", async () => { + const transaction = { + to: recipient, + data: "0x" + } + + const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) + const userOpWithOffset = await smartAccount.buildUserOp([transaction], { + gasOffset: { + verificationGasLimitOffsetPct: 50, // 50% increase + preVerificationGasOffsetPct: 100 // 100% increase + } + }) + + const vglDifference = Math.round( + Number(userOpWithOffset.verificationGasLimit) - + Number(userOpWithNoOffset.verificationGasLimit) + ) + const cgllDifference = Math.round( + Number(userOpWithOffset.callGasLimit) - + Number(userOpWithNoOffset.callGasLimit) + ) + const pvgDifference = Math.round( + Number(userOpWithOffset.preVerificationGas) - + Number(userOpWithNoOffset.preVerificationGas) + ) + + const vglPercentageValue = Math.round( + percentage( + vglDifference, + Number(userOpWithNoOffset.verificationGasLimit) + ) + ) + const cglPercentageValue = Math.round( + percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) + ) + const pvgPercentageValue = Math.round( + percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) + ) + + expect(vglPercentageValue).toBe(50) + expect(cglPercentageValue).toBe(0) + expect(pvgPercentageValue).toBe(100) + }, 60000) + + test("should increment user op gas values. Paymaster ON", async () => { + const transaction = { + to: recipient, + data: "0x" + } + + const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + gasOffset: { + verificationGasLimitOffsetPct: 0 // no increment but provided to avoid paymaster gas calculation (just for testing purposes) + } + }) // Passing gasOffset to avoid paymaster gas calculation + const userOpWithOffset = await smartAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + gasOffset: { + verificationGasLimitOffsetPct: 13.2, // 13.2% increase + preVerificationGasOffsetPct: 81 // 81% increase + } + }) + + const vglDifference = Math.round( + Number(userOpWithOffset.verificationGasLimit) - + Number(userOpWithNoOffset.verificationGasLimit) + ) + const cgllDifference = Math.round( + Number(userOpWithOffset.callGasLimit) - + Number(userOpWithNoOffset.callGasLimit) + ) + const pvgDifference = Math.round( + Number(userOpWithOffset.preVerificationGas) - + Number(userOpWithNoOffset.preVerificationGas) + ) + + const vglPercentageValue = Math.round( + percentage( + vglDifference, + Number(userOpWithNoOffset.verificationGasLimit) + ) + ) + const cglPercentageValue = Math.round( + percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) + ) + const pvgPercentageValue = Math.round( + percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) + ) + + expect(vglPercentageValue).toBe(13) + expect(cglPercentageValue).toBe(0) + expect(pvgPercentageValue).toBe(81) + }, 60000) + + test("should throw if percentage given is bigger than 100. Paymaster ON", async () => { + const transaction = { + to: recipient, + data: "0x" + } + + const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + gasOffset: { + verificationGasLimitOffsetPct: 0 // no increment, just for testing purposes + } + }) // Passing gasOffset to avoid paymaster gas calculation + const userOpWithOffset = smartAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + gasOffset: { + verificationGasLimitOffsetPct: 110 // 110% increase (not allowed) + } + }) + + expect(userOpWithOffset).rejects.toThrowError( + "The percentage value should be between 1 and 100." + ) + }, 60000) + + test("should increment user op gas with no paymaster using sendTransaction", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + + const { wait } = await smartAccount.sendTransaction(transaction, { + gasOffset: { + verificationGasLimitOffsetPct: 10, // 10% increase + preVerificationGasOffsetPct: 20, // 20% increase + maxFeePerGasOffsetPct: 30, // 30% increase + callGasLimitOffsetPct: 40, // 40% increase + maxPriorityFeePerGasOffsetPct: 50 // 50% increase + } + }) + const { + receipt: { transactionHash }, + userOpHash, + success + } = await wait() + + expect(userOpHash).toBeTruthy() + expect(success).toBe("true") + expect(transactionHash).toBeTruthy() + }, 60000) + }) }) diff --git a/tests/modules/read.test.ts b/tests/modules/read.test.ts index a5d5c1a5e..ad1c21649 100644 --- a/tests/modules/read.test.ts +++ b/tests/modules/read.test.ts @@ -1,12 +1,7 @@ import { defaultAbiCoder } from "@ethersproject/abi" import { JsonRpcProvider } from "@ethersproject/providers" import { Wallet } from "@ethersproject/wallet" -import { - http, - createWalletClient, - encodeAbiParameters, - parseAbiParameters -} from "viem" +import { http, type Hex, createWalletClient, encodeAbiParameters } from "viem" import { privateKeyToAccount } from "viem/accounts" import { beforeAll, describe, expect, test } from "vitest" import { From 000fa869320bd657487763f2c02e376ead272cc6 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Fri, 10 May 2024 15:02:55 +0300 Subject: [PATCH 1176/1247] feat: transfer ownership (#484) feat: transfer ownership (#484) --- src/account/BiconomySmartAccountV2.ts | 43 ++++++++ src/account/abi/ECDSAModule.ts | 152 ++++++++++++++++++++++++++ tests/account/write.test.ts | 141 +++++++++++++++++++++++- tests/modules/write.test.ts | 151 ++++++++++++++++++++++++- tests/utils.ts | 1 + 5 files changed, 486 insertions(+), 2 deletions(-) create mode 100644 src/account/abi/ECDSAModule.ts diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index fb7e631e0..75984044d 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -1,5 +1,6 @@ import { http, + type Address, type GetContractReturnType, type Hex, type PublicClient, @@ -27,6 +28,7 @@ import { } from "../bundler/index.js" import { BaseValidationModule, + ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION, type ModuleInfo, type SendUserOpParams, createECDSAOwnershipValidationModule @@ -1367,6 +1369,47 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return nonce } + /** + * Transfers ownership of the smart account to a new owner. + * @param newOwner The address of the new owner. + * @param buildUseropDto {@link BuildUserOpOptions}. Optional parameter + * @returns A Promise that resolves to a TransferOwnershipResponse or rejects with an Error. + * @example + * ```typescript + * const walletClient = createWalletClient({ + * account, + * chain: baseSepolia, + * transport: http() + * }); + * const smartAccount = await createSmartAccountClient({ + * signer: walletClient, + * paymasterUrl: "https://paymaster.biconomy.io/api/v1/...", + * bundlerUrl: `https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44`, + * chainId: 84532 + * }); + * const response = await smartAccount.transferOwnership(newOwner, {paymasterServiceData: {mode: PaymasterMode.SPONSORED}}); + * ``` + */ + async transferOwnership( + newOwner: Address, + buildUseropDto?: BuildUserOpOptions + ): Promise<UserOpResponse> { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function transferOwnership(address newOwner) public"]), + functionName: "transferOwnership", + args: [newOwner] + }) + const transaction = { + to: ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION.V1_0_0, + data: encodedCall + } + const userOpResponse: UserOpResponse = await this.sendTransaction( + transaction, + buildUseropDto + ) + return userOpResponse + } + /** * Sends a transaction (builds and sends a user op in sequence) * diff --git a/src/account/abi/ECDSAModule.ts b/src/account/abi/ECDSAModule.ts new file mode 100644 index 000000000..228aa3f92 --- /dev/null +++ b/src/account/abi/ECDSAModule.ts @@ -0,0 +1,152 @@ +export const ECDSAModuleAbi = [ + { + inputs: [ + { internalType: "address", name: "smartAccount", type: "address" } + ], + name: "AlreadyInitedForSmartAccount", + type: "error" + }, + { + inputs: [ + { internalType: "address", name: "smartAccount", type: "address" } + ], + name: "NoOwnerRegisteredForSmartAccount", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "account", type: "address" }], + name: "NotEOA", + type: "error" + }, + { inputs: [], name: "WrongSignatureLength", type: "error" }, + { inputs: [], name: "ZeroAddressNotAllowedAsOwner", type: "error" }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "smartAccount", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "oldOwner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "OwnershipTransferred", + type: "event" + }, + { + inputs: [], + name: "NAME", + outputs: [{ internalType: "string", name: "", type: "string" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VERSION", + outputs: [{ internalType: "string", name: "", type: "string" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { internalType: "address", name: "smartAccount", type: "address" } + ], + name: "getOwner", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [{ internalType: "address", name: "eoaOwner", type: "address" }], + name: "initForSmartAccount", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { internalType: "bytes32", name: "dataHash", type: "bytes32" }, + { internalType: "bytes", name: "moduleSignature", type: "bytes" } + ], + name: "isValidSignature", + outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { internalType: "bytes32", name: "dataHash", type: "bytes32" }, + { internalType: "bytes", name: "moduleSignature", type: "bytes" }, + { internalType: "address", name: "smartAccount", type: "address" } + ], + name: "isValidSignatureForAddress", + outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [{ internalType: "address", name: "owner", type: "address" }], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + components: [ + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, + { internalType: "uint256", name: "callGasLimit", type: "uint256" }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" + }, + { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256" + }, + { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, + { internalType: "bytes", name: "signature", type: "bytes" } + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple" + }, + { internalType: "bytes32", name: "userOpHash", type: "bytes32" } + ], + name: "validateUserOp", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function" + } +] diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 140484dcb..b4862b100 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -8,6 +8,7 @@ import { parseAbi } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" +import { readContract } from "viem/actions" import { beforeAll, describe, expect, test } from "vitest" import { type BiconomySmartAccountV2, @@ -16,7 +17,13 @@ import { createSmartAccountClient, percentage } from "../../src/account" +import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" +import { getAAError } from "../../src/bundler/utils/getAAError" +import { + DEFAULT_ECDSA_OWNERSHIP_MODULE, + DEFAULT_SESSION_KEY_MANAGER_MODULE +} from "../../src/modules" import { PaymasterMode } from "../../src/paymaster" import { testOnlyOnOptimism } from "../setupFiles" import { checkBalance, getConfig, nonZeroBalance, topUp } from "../utils" @@ -85,6 +92,9 @@ describe("Account:Write", () => { } ]) + console.log(await smartAccount.getAccountAddress()) + console.log(await smartAccount.getSigner().getAddress(), "signer address") + userOp.signature = undefined const signedUserOp = await smartAccount.signUserOp(userOp) @@ -228,7 +238,7 @@ describe("Account:Write", () => { expect(tokenBalanceOfRecipientAfter - tokenBalanceOfRecipientBefore).toBe( 1n ) - }, 25000) + }, 40000) test("should mint an NFT and pay with ERC20 - with token", async () => { const encodedCall = encodeFunctionData({ @@ -492,4 +502,133 @@ describe("Account:Write", () => { expect(transactionHash).toBeTruthy() }, 60000) }) + + describe("Transfer ownership", () => { + test("should transfer ownership of smart account to accountTwo", async () => { + const newOwner = accountTwo.address + const _smartAccount = await createSmartAccountClient({ + signer: walletClient, + paymasterUrl, + bundlerUrl, + accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" + }) + + const signerOfAccount = walletClient.account.address + const ownerOfAccount = await publicClient.readContract({ + address: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e", + abi: ECDSAModuleAbi, + functionName: "getOwner", + args: [await _smartAccount.getAccountAddress()] + }) + + expect(ownerOfAccount).toBe(signerOfAccount) + const response = await _smartAccount.transferOwnership(newOwner, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const receipt = await response.wait() + expect(receipt.success).toBe("true") + }, 35000) + + test("should revert transfer ownership with signer that is not the owner", async () => { + const newOwner = accountTwo.address + const _smartAccount = await createSmartAccountClient({ + signer: walletClient, + paymasterUrl, + bundlerUrl, + accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" + }) + + const signerOfAccount = walletClient.account.address + const ownerOfAccount = await publicClient.readContract({ + address: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e", + abi: ECDSAModuleAbi, + functionName: "getOwner", + args: [await _smartAccount.getAccountAddress()] + }) + + expect(ownerOfAccount).not.toBe(signerOfAccount) + expect( + _smartAccount.transferOwnership(newOwner, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + ).rejects.toThrowError() + }, 35000) + + test("send an user op with the new owner", async () => { + const _smartAccount = await createSmartAccountClient({ + signer: walletClientTwo, + paymasterUrl, + bundlerUrl, + accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" + }) + const newOwner = accountTwo.address + const currentSmartAccountInstanceSigner = await _smartAccount + .getSigner() + .getAddress() + expect(currentSmartAccountInstanceSigner).toBe(newOwner) + const tx = { + to: nftAddress, + data: encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [smartAccountAddressTwo] + }) + } + const { wait } = await _smartAccount.sendTransaction(tx, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const response = await wait() + expect(response.success).toBe("true") + }, 35000) + + test("should revert if sending an user op with the old owner", async () => { + const _smartAccount = await createSmartAccountClient({ + signer: walletClient, + paymasterUrl, + bundlerUrl, + accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" + }) + const tx = { + to: nftAddress, + data: encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [smartAccountAddressTwo] + }) + } + await expect( + _smartAccount.sendTransaction(tx, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + ).rejects.toThrowError( + await getAAError("Error coming from Bundler: AA24 signature error") + ) + }, 35000) + + test("should transfer ownership of smart account back to EOA 1", async () => { + const newOwner = account.address + const _smartAccount = await createSmartAccountClient({ + signer: walletClientTwo, + paymasterUrl, + bundlerUrl, + accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" // account address at index 0 of EOA 1 + }) + + const signerOfAccount = walletClientTwo.account.address + const ownerOfAccount = await publicClient.readContract({ + address: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e", + abi: ECDSAModuleAbi, + functionName: "getOwner", + args: [await _smartAccount.getAccountAddress()] + }) + + expect(ownerOfAccount).toBe(signerOfAccount) + + const response = await _smartAccount.transferOwnership(newOwner, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const receipt = await response.wait() + expect(receipt.success).toBe("true") + }, 45000) + }) }) diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts index 5d66994ab..3407dd1a7 100644 --- a/tests/modules/write.test.ts +++ b/tests/modules/write.test.ts @@ -21,11 +21,15 @@ import { createSmartAccountClient } from "../../src/account" import { Logger, getChain } from "../../src/account" +import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" import { DEFAULT_BATCHED_SESSION_ROUTER_MODULE, + DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_MULTICHAIN_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE, + ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION, createBatchedSessionRouterModule, + createECDSAOwnershipValidationModule, createMultiChainValidationModule, createSessionKeyManagerModule, getABISVMSessionKeyData @@ -256,7 +260,6 @@ describe("Modules:Write", () => { // First we need to check if smart account is deployed // if not deployed, send an empty transaction to deploy it const isDeployed = await smartAccount.isAccountDeployed() - Logger.log("session", { isDeployed }) if (!isDeployed) { const { wait } = await smartAccount.deploy({ paymasterServiceData: { mode: PaymasterMode.SPONSORED } @@ -583,4 +586,150 @@ describe("Modules:Write", () => { `Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai` ) }, 60000) + + describe("Transfer ownership", () => { + test("should use ABI SVM to allow transfer ownership of smart account", async () => { + const smartAccount = await createSmartAccountClient({ + chainId, + signer: walletClient, + bundlerUrl, + paymasterUrl, + index: 10 // Increasing index to not conflict with other test cases and use a new smart account + }) + + const smartAccountAddressForPreviousOwner = + await smartAccount.getAccountAddress() + + const signerOfAccount = walletClient.account.address + const ownerOfAccount = await publicClient.readContract({ + address: DEFAULT_ECDSA_OWNERSHIP_MODULE, + abi: ECDSAModuleAbi, + functionName: "getOwner", + args: [await smartAccount.getAccountAddress()] + }) + + if (ownerOfAccount !== signerOfAccount) { + // Re-create the smart account instance with the new owner + const smartAccountWithOtherOwner = await createSmartAccountClient({ + chainId, + signer: walletClientTwo, + bundlerUrl, + paymasterUrl, + accountAddress: smartAccountAddressForPreviousOwner + }) + + // Transfer ownership back to walletClient 1 + await smartAccountWithOtherOwner.transferOwnership( + walletClient.account.address, + { paymasterServiceData: { mode: PaymasterMode.SPONSORED } } + ) + } + + let sessionSigner: WalletClientSigner + const sessionKeyEOA = walletClient.account.address + const newOwner = walletClientTwo.account.address + + const accountAddress = await smartAccount.getAccountAddress() + const sessionMemoryStorage: SessionMemoryStorage = + new SessionMemoryStorage(accountAddress) + // First we need to check if smart account is deployed + // if not deployed, send an empty transaction to deploy it + const isDeployed = await smartAccount.isAccountDeployed() + if (!isDeployed) { + const { wait } = await smartAccount.deploy({ + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const { success } = await wait() + expect(success).toBe("true") + } + + try { + sessionSigner = await sessionMemoryStorage.getSignerByKey(sessionKeyEOA) + } catch (error) { + sessionSigner = await sessionMemoryStorage.addSigner({ + pbKey: sessionKeyEOA, + pvKey: `0x${privateKeyTwo}`, + chainId: chain + }) + } + + expect(sessionSigner).toBeTruthy() + // Create session module + const sessionModule = await createSessionKeyManagerModule({ + moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, + smartAccountAddress: await smartAccount.getAddress(), + sessionStorageClient: sessionMemoryStorage + }) + const functionSelectorTransferOwnership = slice( + toFunctionSelector("transferOwnership(address) public"), + 0, + 4 + ) + const sessionKeyDataTransferOwnership = await getABISVMSessionKeyData( + sessionKeyEOA as Hex, + { + destContract: + ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION.V1_0_0 as Hex, // ECDSA module address + functionSelector: functionSelectorTransferOwnership, + valueLimit: parseEther("0"), + rules: [ + { + offset: 0, // offset 0 means we are checking first parameter of transferOwnership (recipient address) + condition: 0, // 0 = Condition.EQUAL + referenceValue: pad(walletClient.account.address, { + size: 32 + }) // new owner address + } + ] + } + ) + const abiSvmAddress = "0x000006bC2eCdAe38113929293d241Cf252D91861" + const sessionTxDataTransferOwnership = + await sessionModule.createSessionData([ + { + validUntil: 0, + validAfter: 0, + sessionValidationModule: abiSvmAddress, + sessionPublicKey: sessionKeyEOA as Hex, + sessionKeyData: sessionKeyDataTransferOwnership as Hex + } + ]) + const setSessionAllowedTransferOwnerhsipTrx = { + to: DEFAULT_SESSION_KEY_MANAGER_MODULE, + data: sessionTxDataTransferOwnership.data + } + // biome-ignore lint/suspicious/noExplicitAny: <explanation> + const txArray: any = [] + // Check if module is enabled + const isEnabled = await smartAccount.isModuleEnabled( + DEFAULT_SESSION_KEY_MANAGER_MODULE + ) + + if (!isEnabled) { + const enableModuleTrx = await smartAccount.getEnableModuleData( + DEFAULT_SESSION_KEY_MANAGER_MODULE + ) + txArray.push(enableModuleTrx) + txArray.push(setSessionAllowedTransferOwnerhsipTrx) + } else { + Logger.log("MODULE ALREADY ENABLED") + txArray.push(setSessionAllowedTransferOwnerhsipTrx) + } + const userOpResponse1 = await smartAccount.sendTransaction(txArray, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const transactionDetails = await userOpResponse1.wait() + expect(transactionDetails.success).toBe("true") + Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash) + + // Transfer ownership back to walletClient + const resp = await smartAccount.transferOwnership(newOwner, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + params: { + sessionSigner: sessionSigner, + sessionValidationModule: abiSvmAddress + } + }) + }, 60000) + }) }) diff --git a/tests/utils.ts b/tests/utils.ts index 69b88d31b..2a89b0121 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -32,6 +32,7 @@ export const getEnvVars = () => { } return { bundlerUrl: process.env.BUNDLER_URL || "", + bundlerUrlTwo: getBundlerUrl(84532) || "", privateKey: process.env.E2E_PRIVATE_KEY_ONE || "", privateKeyTwo: process.env.E2E_PRIVATE_KEY_TWO || "", paymasterUrl: `https://paymaster.biconomy.io/api/v1/80002/${ From 76be2c0ce623e5a16bc333ed7b8f2dcb2f3b9a43 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Mon, 13 May 2024 16:03:34 +0300 Subject: [PATCH 1177/1247] feat: transfer_ownership_v2 (#488) * feat/transfer_ownership(in progress) * cleanup * fix linting * added test for transferOwnership with session key manager module * Fix linting * refactor: refactor based on PR review * improve ts doc + refactor tests * added "moduleAddress" param to transferOwnership() * fix module tests * removed console.logs * fixed lint + removed unused import * remove unused import * added argument type for module address --------- Co-authored-by: GabiDev <gv@popoo.io> --- src/account/BiconomySmartAccountV2.ts | 50 ++++++++++++----- src/account/utils/Types.ts | 4 ++ tests/account/write.test.ts | 79 ++++++++++++++++----------- tests/modules/write.test.ts | 17 ++++-- 4 files changed, 96 insertions(+), 54 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 75984044d..048a05e68 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -28,7 +28,6 @@ import { } from "../bundler/index.js" import { BaseValidationModule, - ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION, type ModuleInfo, type SendUserOpParams, createECDSAOwnershipValidationModule @@ -83,6 +82,7 @@ import type { SimulationType, SupportedToken, Transaction, + TransferOwnershipCompatibleModule, WithdrawalRequest } from "./utils/Types.js" import { @@ -1372,26 +1372,46 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { /** * Transfers ownership of the smart account to a new owner. * @param newOwner The address of the new owner. + * @param moduleAddress {@link TransferOwnershipCompatibleModule} The address of the validation module (ECDSA Ownership Module or Multichain Validation Module). * @param buildUseropDto {@link BuildUserOpOptions}. Optional parameter - * @returns A Promise that resolves to a TransferOwnershipResponse or rejects with an Error. + * @returns A Promise that resolves to a UserOpResponse or rejects with an Error. + * @description This function will transfer ownership of the smart account to a new owner. If you use session key manager module, after transferring the ownership + * you will need to re-create a session for the smart account with the new owner (signer) and specify "accountAddress" in "createSmartAccountClient" function. * @example * ```typescript - * const walletClient = createWalletClient({ - * account, - * chain: baseSepolia, - * transport: http() - * }); - * const smartAccount = await createSmartAccountClient({ - * signer: walletClient, - * paymasterUrl: "https://paymaster.biconomy.io/api/v1/...", - * bundlerUrl: `https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44`, - * chainId: 84532 - * }); - * const response = await smartAccount.transferOwnership(newOwner, {paymasterServiceData: {mode: PaymasterMode.SPONSORED}}); + * + * let walletClient = createWalletClient({ + account, + chain: baseSepolia, + transport: http() + }); + + let smartAccount = await createSmartAccountClient({ + signer: walletClient, + paymasterUrl: "https://paymaster.biconomy.io/api/v1/...", + bundlerUrl: `https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44`, + chainId: 84532 + }); + const response = await smartAccount.transferOwnership(newOwner, DEFAULT_ECDSA_OWNERSHIP_MODULE, {paymasterServiceData: {mode: PaymasterMode.SPONSORED}}); + + walletClient = createWalletClient({ + newOwnerAccount, + chain: baseSepolia, + transport: http() + }) + + smartAccount = await createSmartAccountClient({ + signer: walletClient, + paymasterUrl: "https://paymaster.biconomy.io/api/v1/...", + bundlerUrl: `https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44`, + chainId: 84532, + accountAddress: await smartAccount.getAccountAddress() + }) * ``` */ async transferOwnership( newOwner: Address, + moduleAddress: TransferOwnershipCompatibleModule, buildUseropDto?: BuildUserOpOptions ): Promise<UserOpResponse> { const encodedCall = encodeFunctionData({ @@ -1400,7 +1420,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { args: [newOwner] }) const transaction = { - to: ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION.V1_0_0, + to: moduleAddress, data: encodedCall } const userOpResponse: UserOpResponse = await this.sendTransaction( diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 7a1f2d1fd..e28ed8b3a 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -609,3 +609,7 @@ export interface ISmartContractAccount< upgradeToInitData: Hex ) => Promise<Hex> } + +export type TransferOwnershipCompatibleModule = + | "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" + | "0x000000824dc138db84FD9109fc154bdad332Aa8E" diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index b4862b100..72e28d643 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -22,7 +22,8 @@ import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" import { getAAError } from "../../src/bundler/utils/getAAError" import { DEFAULT_ECDSA_OWNERSHIP_MODULE, - DEFAULT_SESSION_KEY_MANAGER_MODULE + DEFAULT_MULTICHAIN_MODULE, + createMultiChainValidationModule } from "../../src/modules" import { PaymasterMode } from "../../src/paymaster" import { testOnlyOnOptimism } from "../setupFiles" @@ -503,44 +504,50 @@ describe("Account:Write", () => { }, 60000) }) - describe("Transfer ownership", () => { - test("should transfer ownership of smart account to accountTwo", async () => { - const newOwner = accountTwo.address - const _smartAccount = await createSmartAccountClient({ - signer: walletClient, - paymasterUrl, - bundlerUrl, - accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" - }) + describe("Transfer ownership", async () => { + const firstOwner = account.address + const newOwner = accountTwo.address + let _smartAccount = await createSmartAccountClient({ + signer: walletClient, + paymasterUrl, + bundlerUrl + // accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" + }) + + const smartAccountAddress = await _smartAccount.getAccountAddress() + test("should transfer ownership of smart account to accountTwo", async () => { const signerOfAccount = walletClient.account.address const ownerOfAccount = await publicClient.readContract({ - address: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e", + address: DEFAULT_ECDSA_OWNERSHIP_MODULE, abi: ECDSAModuleAbi, functionName: "getOwner", args: [await _smartAccount.getAccountAddress()] }) expect(ownerOfAccount).toBe(signerOfAccount) - const response = await _smartAccount.transferOwnership(newOwner, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) + const response = await _smartAccount.transferOwnership( + newOwner, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + } + ) const receipt = await response.wait() expect(receipt.success).toBe("true") }, 35000) test("should revert transfer ownership with signer that is not the owner", async () => { - const newOwner = accountTwo.address - const _smartAccount = await createSmartAccountClient({ + _smartAccount = await createSmartAccountClient({ signer: walletClient, paymasterUrl, bundlerUrl, - accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" + accountAddress: smartAccountAddress }) const signerOfAccount = walletClient.account.address const ownerOfAccount = await publicClient.readContract({ - address: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e", + address: DEFAULT_ECDSA_OWNERSHIP_MODULE, abi: ECDSAModuleAbi, functionName: "getOwner", args: [await _smartAccount.getAccountAddress()] @@ -548,20 +555,23 @@ describe("Account:Write", () => { expect(ownerOfAccount).not.toBe(signerOfAccount) expect( - _smartAccount.transferOwnership(newOwner, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) + _smartAccount.transferOwnership( + newOwner, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + } + ) ).rejects.toThrowError() }, 35000) test("send an user op with the new owner", async () => { - const _smartAccount = await createSmartAccountClient({ + _smartAccount = await createSmartAccountClient({ signer: walletClientTwo, paymasterUrl, bundlerUrl, - accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" + accountAddress: smartAccountAddress }) - const newOwner = accountTwo.address const currentSmartAccountInstanceSigner = await _smartAccount .getSigner() .getAddress() @@ -582,11 +592,11 @@ describe("Account:Write", () => { }, 35000) test("should revert if sending an user op with the old owner", async () => { - const _smartAccount = await createSmartAccountClient({ + _smartAccount = await createSmartAccountClient({ signer: walletClient, paymasterUrl, bundlerUrl, - accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" + accountAddress: smartAccountAddress }) const tx = { to: nftAddress, @@ -606,17 +616,16 @@ describe("Account:Write", () => { }, 35000) test("should transfer ownership of smart account back to EOA 1", async () => { - const newOwner = account.address - const _smartAccount = await createSmartAccountClient({ + _smartAccount = await createSmartAccountClient({ signer: walletClientTwo, paymasterUrl, bundlerUrl, - accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" // account address at index 0 of EOA 1 + accountAddress: smartAccountAddress }) const signerOfAccount = walletClientTwo.account.address const ownerOfAccount = await publicClient.readContract({ - address: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e", + address: DEFAULT_ECDSA_OWNERSHIP_MODULE, abi: ECDSAModuleAbi, functionName: "getOwner", args: [await _smartAccount.getAccountAddress()] @@ -624,9 +633,13 @@ describe("Account:Write", () => { expect(ownerOfAccount).toBe(signerOfAccount) - const response = await _smartAccount.transferOwnership(newOwner, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) + const response = await _smartAccount.transferOwnership( + firstOwner, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + } + ) const receipt = await response.wait() expect(receipt.success).toBe("true") }, 45000) diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts index 3407dd1a7..9f1e32357 100644 --- a/tests/modules/write.test.ts +++ b/tests/modules/write.test.ts @@ -621,6 +621,7 @@ describe("Modules:Write", () => { // Transfer ownership back to walletClient 1 await smartAccountWithOtherOwner.transferOwnership( walletClient.account.address, + DEFAULT_ECDSA_OWNERSHIP_MODULE, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } } ) } @@ -723,13 +724,17 @@ describe("Modules:Write", () => { Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash) // Transfer ownership back to walletClient - const resp = await smartAccount.transferOwnership(newOwner, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - params: { - sessionSigner: sessionSigner, - sessionValidationModule: abiSvmAddress + const resp = await smartAccount.transferOwnership( + newOwner, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + params: { + sessionSigner: sessionSigner, + sessionValidationModule: abiSvmAddress + } } - }) + ) }, 60000) }) }) From 498b79bab7816c894e5b9ef94b04f10406bd9132 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Mon, 13 May 2024 17:43:07 +0300 Subject: [PATCH 1178/1247] chore: r11 - v4.2.1 (#489) * feat: gas offset param for sendTransaction and sendUserOp (#474) * feat - gas offset param for sendTransaction * added percentage based gas offsets * added dummyPndOverride * refactor gas offset percentage * refactor names and ts doc + lint * improved tsdoc & fixed comments * refactor sendTransaction example tsdoc comment * refactor sendTransaction test --------- Co-authored-by: GabiDev <gv@popoo.io> * feat: transfer ownership (#484) feat: transfer ownership (#484) * feat: transfer_ownership_v2 (#488) * feat/transfer_ownership(in progress) * cleanup * fix linting * added test for transferOwnership with session key manager module * Fix linting * refactor: refactor based on PR review * improve ts doc + refactor tests * added "moduleAddress" param to transferOwnership() * fix module tests * removed console.logs * fixed lint + removed unused import * remove unused import * added argument type for module address --------- Co-authored-by: GabiDev <gv@popoo.io> --------- Co-authored-by: GabiDev <gv@popoo.io> --- package.json | 9 +- src/account/BiconomySmartAccountV2.ts | 221 ++++++++++++++++- src/account/abi/ECDSAModule.ts | 152 ++++++++++++ src/account/utils/Types.ts | 71 +++--- src/account/utils/Utils.ts | 19 ++ src/paymaster/BiconomyPaymaster.ts | 9 +- tests/account/write.test.ts | 337 +++++++++++++++++++++++++- tests/modules/read.test.ts | 7 +- tests/modules/write.test.ts | 156 +++++++++++- tests/utils.ts | 1 + 10 files changed, 931 insertions(+), 51 deletions(-) create mode 100644 src/account/abi/ECDSAModule.ts diff --git a/package.json b/package.json index 361af2fe7..f8e03da04 100644 --- a/package.json +++ b/package.json @@ -46,10 +46,7 @@ "default": "./_cjs/modules/index.js" } }, - "files": [ - "dist/*", - "README.md" - ], + "files": ["dist/*", "README.md"], "scripts": { "format": "biome format . --write", "lint": "biome check .", @@ -105,9 +102,7 @@ "viem": "^2" }, "commitlint": { - "extends": [ - "@commitlint/config-conventional" - ] + "extends": ["@commitlint/config-conventional"] }, "simple-git-hooks": { "pre-commit": "bun run format && bun run lint:fix", diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index b6899f1b7..048a05e68 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -1,5 +1,6 @@ import { http, + type Address, type GetContractReturnType, type Hex, type PublicClient, @@ -81,11 +82,13 @@ import type { SimulationType, SupportedToken, Transaction, + TransferOwnershipCompatibleModule, WithdrawalRequest } from "./utils/Types.js" import { addressEquals, compareChainIds, + convertToFactor, isNullOrUndefined, isValidRpcUrl, packUserOp @@ -978,7 +981,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return this.getPaymasterAndData(partialUserOp, { ...paymasterServiceData, feeTokenAddress: feeQuote.tokenAddress, - calculateGasLimits: true // Always recommended and especially when using token paymaster + calculateGasLimits: paymasterServiceData.calculateGasLimits ?? true // Always recommended and especially when using token paymaster }) } if (paymasterServiceData?.preferredToken) { @@ -1366,6 +1369,67 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return nonce } + /** + * Transfers ownership of the smart account to a new owner. + * @param newOwner The address of the new owner. + * @param moduleAddress {@link TransferOwnershipCompatibleModule} The address of the validation module (ECDSA Ownership Module or Multichain Validation Module). + * @param buildUseropDto {@link BuildUserOpOptions}. Optional parameter + * @returns A Promise that resolves to a UserOpResponse or rejects with an Error. + * @description This function will transfer ownership of the smart account to a new owner. If you use session key manager module, after transferring the ownership + * you will need to re-create a session for the smart account with the new owner (signer) and specify "accountAddress" in "createSmartAccountClient" function. + * @example + * ```typescript + * + * let walletClient = createWalletClient({ + account, + chain: baseSepolia, + transport: http() + }); + + let smartAccount = await createSmartAccountClient({ + signer: walletClient, + paymasterUrl: "https://paymaster.biconomy.io/api/v1/...", + bundlerUrl: `https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44`, + chainId: 84532 + }); + const response = await smartAccount.transferOwnership(newOwner, DEFAULT_ECDSA_OWNERSHIP_MODULE, {paymasterServiceData: {mode: PaymasterMode.SPONSORED}}); + + walletClient = createWalletClient({ + newOwnerAccount, + chain: baseSepolia, + transport: http() + }) + + smartAccount = await createSmartAccountClient({ + signer: walletClient, + paymasterUrl: "https://paymaster.biconomy.io/api/v1/...", + bundlerUrl: `https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44`, + chainId: 84532, + accountAddress: await smartAccount.getAccountAddress() + }) + * ``` + */ + async transferOwnership( + newOwner: Address, + moduleAddress: TransferOwnershipCompatibleModule, + buildUseropDto?: BuildUserOpOptions + ): Promise<UserOpResponse> { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function transferOwnership(address newOwner) public"]), + functionName: "transferOwnership", + args: [newOwner] + }) + const transaction = { + to: moduleAddress, + data: encodedCall + } + const userOpResponse: UserOpResponse = await this.sendTransaction( + transaction, + buildUseropDto + ) + return userOpResponse + } + /** * Sends a transaction (builds and sends a user op in sequence) * @@ -1402,6 +1466,40 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * const { waitForTxHash } = await smartAccount.sendTransaction(transaction); * const { transactionHash, userOperationReceipt } = await wait(); * + * @remarks + * This example shows how to increase the estimated gas values for a transaction using `gasOffset` parameter. + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonAmoy } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonAmoy, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard + * const encodedCall = encodeFunctionData({ + * abi: parseAbi(["function safeMint(address to) public"]), + * functionName: "safeMint", + * args: ["0x..."], + * }); + * + * const transaction = { + * to: nftAddress, + * data: encodedCall + * } + * + * const { waitForTxHash } = await smartAccount.sendTransaction(transaction, { + * gasOffset: { + * verificationGasLimitOffsetPct: 25, // 25% increase for the already estimated gas limit + * preVerificationGasOffsetPct: 10 // 10% increase for the already estimated gas limit + * } + * }); + * const { transactionHash, userOperationReceipt } = await wait(); + * */ async sendTransaction( manyOrOneTransactions: Transaction | Transaction[], @@ -1513,14 +1611,135 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { userOp.maxFeePerGas = gasFeeValues?.maxFeePerGas as Hex userOp.maxPriorityFeePerGas = gasFeeValues?.maxPriorityFeePerGas as Hex + if (buildUseropDto.gasOffset) { + userOp = await this.estimateUserOpGas(userOp) + + const { + verificationGasLimitOffsetPct, + preVerificationGasOffsetPct, + callGasLimitOffsetPct, + maxFeePerGasOffsetPct, + maxPriorityFeePerGasOffsetPct + } = buildUseropDto.gasOffset + userOp.verificationGasLimit = toHex( + Number.parseInt( + ( + Number(userOp.verificationGasLimit ?? 0) * + convertToFactor(verificationGasLimitOffsetPct) + ).toString() + ) + ) + userOp.preVerificationGas = toHex( + Number.parseInt( + ( + Number(userOp.preVerificationGas ?? 0) * + convertToFactor(preVerificationGasOffsetPct) + ).toString() + ) + ) + userOp.callGasLimit = toHex( + Number.parseInt( + ( + Number(userOp.callGasLimit ?? 0) * + convertToFactor(callGasLimitOffsetPct) + ).toString() + ) + ) + userOp.maxFeePerGas = toHex( + Number.parseInt( + ( + Number(userOp.maxFeePerGas ?? 0) * + convertToFactor(maxFeePerGasOffsetPct) + ).toString() + ) + ) + userOp.maxPriorityFeePerGas = toHex( + Number.parseInt( + ( + Number(userOp.maxPriorityFeePerGas ?? 0) * + convertToFactor(maxPriorityFeePerGasOffsetPct) + ).toString() + ) + ) + + userOp = await this.getPaymasterUserOp(userOp, { + ...buildUseropDto.paymasterServiceData, + calculateGasLimits: false + }) + return userOp + } + if (buildUseropDto.paymasterServiceData.calculateGasLimits === false) { + userOp = await this.estimateUserOpGas(userOp) + } + userOp = await this.getPaymasterUserOp( userOp, buildUseropDto.paymasterServiceData ) + return userOp } + userOp = await this.estimateUserOpGas(userOp) + if (buildUseropDto?.gasOffset) { + if (buildUseropDto?.paymasterServiceData) { + userOp = await this.getPaymasterUserOp(userOp, { + ...buildUseropDto.paymasterServiceData, + calculateGasLimits: false + }) + } + + const { + verificationGasLimitOffsetPct, + preVerificationGasOffsetPct, + callGasLimitOffsetPct, + maxFeePerGasOffsetPct, + maxPriorityFeePerGasOffsetPct + } = buildUseropDto.gasOffset + userOp.verificationGasLimit = toHex( + Number.parseInt( + ( + Number(userOp.verificationGasLimit ?? 0) * + convertToFactor(verificationGasLimitOffsetPct) + ).toString() + ) + ) + userOp.preVerificationGas = toHex( + Number.parseInt( + ( + Number(userOp.preVerificationGas ?? 0) * + convertToFactor(preVerificationGasOffsetPct) + ).toString() + ) + ) + userOp.callGasLimit = toHex( + Number.parseInt( + ( + Number(userOp.callGasLimit ?? 0) * + convertToFactor(callGasLimitOffsetPct) + ).toString() + ) + ) + userOp.maxFeePerGas = toHex( + Number.parseInt( + ( + Number(userOp.maxFeePerGas ?? 0) * + convertToFactor(maxFeePerGasOffsetPct) + ).toString() + ) + ) + userOp.maxPriorityFeePerGas = toHex( + Number.parseInt( + ( + Number(userOp.maxPriorityFeePerGas ?? 0) * + convertToFactor(maxPriorityFeePerGasOffsetPct) + ).toString() + ) + ) + + return userOp + } if (buildUseropDto?.paymasterServiceData) { userOp = await this.getPaymasterUserOp( userOp, diff --git a/src/account/abi/ECDSAModule.ts b/src/account/abi/ECDSAModule.ts new file mode 100644 index 000000000..228aa3f92 --- /dev/null +++ b/src/account/abi/ECDSAModule.ts @@ -0,0 +1,152 @@ +export const ECDSAModuleAbi = [ + { + inputs: [ + { internalType: "address", name: "smartAccount", type: "address" } + ], + name: "AlreadyInitedForSmartAccount", + type: "error" + }, + { + inputs: [ + { internalType: "address", name: "smartAccount", type: "address" } + ], + name: "NoOwnerRegisteredForSmartAccount", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "account", type: "address" }], + name: "NotEOA", + type: "error" + }, + { inputs: [], name: "WrongSignatureLength", type: "error" }, + { inputs: [], name: "ZeroAddressNotAllowedAsOwner", type: "error" }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "smartAccount", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "oldOwner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "OwnershipTransferred", + type: "event" + }, + { + inputs: [], + name: "NAME", + outputs: [{ internalType: "string", name: "", type: "string" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VERSION", + outputs: [{ internalType: "string", name: "", type: "string" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { internalType: "address", name: "smartAccount", type: "address" } + ], + name: "getOwner", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [{ internalType: "address", name: "eoaOwner", type: "address" }], + name: "initForSmartAccount", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { internalType: "bytes32", name: "dataHash", type: "bytes32" }, + { internalType: "bytes", name: "moduleSignature", type: "bytes" } + ], + name: "isValidSignature", + outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { internalType: "bytes32", name: "dataHash", type: "bytes32" }, + { internalType: "bytes", name: "moduleSignature", type: "bytes" }, + { internalType: "address", name: "smartAccount", type: "address" } + ], + name: "isValidSignatureForAddress", + outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [{ internalType: "address", name: "owner", type: "address" }], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + components: [ + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, + { internalType: "uint256", name: "callGasLimit", type: "uint256" }, + { + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256" + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" + }, + { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, + { + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256" + }, + { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, + { internalType: "bytes", name: "signature", type: "bytes" } + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple" + }, + { internalType: "bytes32", name: "userOpHash", type: "bytes32" } + ], + name: "validateUserOp", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function" + } +] diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 1fb265ac3..e28ed8b3a 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -178,26 +178,27 @@ export type BiconomySmartAccountV2ConfigConstructorProps = ResolvedBundlerProps & ResolvedValidationProps +/** + * Represents options for building a user operation. + * @typedef BuildUserOpOptions + * @property {GasOffset} [gasOffset] - Increment gas values by giving an offset, the given value will be an increment to the current estimated gas values, not an override. + * @property {ModuleInfo} [params] - Parameters relevant to the module, mostly relevant to sessions. + * @property {NonceOptions} [nonceOptions] - Options for overriding the nonce. + * @property {boolean} [forceEncodeForBatch] - Whether to encode the user operation for batch. + * @property {PaymasterUserOperationDto} [paymasterServiceData] - Options specific to transactions that involve a paymaster. + * @property {SimulationType} [simulationType] - Determine which parts of the transaction a bundler will simulate: "validation" | "validation_and_execution". + * @property {StateOverrideSet} [stateOverrideSet] - For overriding the state. + * @property {boolean} [useEmptyDeployCallData] - Set to true if the transaction is being used only to deploy the smart contract, so "0x" is set as the user operation call data. + */ export type BuildUserOpOptions = { - /** overrides: Explicitly set gas values */ - // overrides?: Overrides; - /** Not currently in use */ - // skipBundlerGasEstimation?: boolean; - /** params relevant to the module, mostly relevant to sessions */ + gasOffset?: GasOffsetPct params?: ModuleInfo - /** nonceOptions: For overriding the nonce */ nonceOptions?: NonceOptions - /** forceEncodeForBatch: For encoding the user operation for batch */ forceEncodeForBatch?: boolean - /** paymasterServiceData: Options specific to transactions that involve a paymaster */ paymasterServiceData?: PaymasterUserOperationDto - /** simulationType: Determine which parts of the tx a bundler will simulate: "validation" | "validation_and_execution". */ simulationType?: SimulationType - /** dummy pnd override */ - dummyPndOverride?: BytesLike - /** stateOverrideSet: For overriding the state */ stateOverrideSet?: StateOverrideSet - /** set to true if the tx is being used *only* to deploy the smartContract, so "0x" is set as the userOp.callData */ + dummyPndOverride?: BytesLike useEmptyDeployCallData?: boolean } @@ -210,21 +211,30 @@ export type NonceOptions = { export type SimulationType = "validation" | "validation_and_execution" -export type Overrides = { - /* Value used by inner account execution */ - callGasLimit?: Hex - /* Actual gas used by the validation of this UserOperation */ - verificationGasLimit?: Hex - /* Gas overhead of this UserOperation */ - preVerificationGas?: Hex - /* Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) */ - maxFeePerGas?: Hex - /* Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) */ - maxPriorityFeePerGas?: Hex - /* Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster ("0x" for self-sponsored transaction) */ - paymasterData?: Hex - /* Data passed into the account along with the nonce during the verification step */ - signature?: Hex +/** + * Represents an offset percentage value used for gas-related calculations. + * @remarks + * This type defines offset percentages for various gas-related parameters. Each percentage represents a proportion of the current estimated gas values. + * For example: + * - A value of `1` represents a 1% offset. + * - A value of `100` represents a 100% offset. + * @public + */ +/** + * Represents an object containing offset percentages for gas-related parameters. + * @typedef GasOffsetPct + * @property {number} [callGasLimitOffsetPct] - Percentage offset for the gas limit used by inner account execution. + * @property {number} [verificationGasLimitOffsetPct] - Percentage offset for the actual gas used by the validation of a UserOperation. + * @property {number} [preVerificationGasOffsetPct] - Percentage offset representing the gas overhead of a UserOperation. + * @property {number} [maxFeePerGasOffsetPct] - Percentage offset for the maximum fee per gas (similar to EIP-1559 max_fee_per_gas). + * @property {number} [maxPriorityFeePerGasOffsetPct] - Percentage offset for the maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas). + */ +export type GasOffsetPct = { + callGasLimitOffsetPct?: number + verificationGasLimitOffsetPct?: number + preVerificationGasOffsetPct?: number + maxFeePerGasOffsetPct?: number + maxPriorityFeePerGasOffsetPct?: number } export type InitilizationData = { @@ -263,7 +273,6 @@ export type InitializeV2Data = { export type EstimateUserOpGasParams = { userOp: Partial<UserOperationStruct> - // overrides?: Overrides; /** Currrently has no effect */ // skipBundlerGasEstimation?: boolean; /** paymasterServiceData: Options specific to transactions that involve a paymaster */ @@ -600,3 +609,7 @@ export interface ISmartContractAccount< upgradeToInitData: Hex ) => Promise<Hex> } + +export type TransferOwnershipCompatibleModule = + | "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" + | "0x000000824dc138db84FD9109fc154bdad332Aa8E" diff --git a/src/account/utils/Utils.ts b/src/account/utils/Utils.ts index aa6c54845..b9cc56d9c 100644 --- a/src/account/utils/Utils.ts +++ b/src/account/utils/Utils.ts @@ -159,3 +159,22 @@ export const wrapSignatureWith6492 = ({ "0x6492649264926492649264926492649264926492649264926492649264926492" ]) } + +export function percentage(partialValue: number, totalValue: number) { + return (100 * partialValue) / totalValue +} + +export function convertToFactor(percentage: number | undefined): number { + // Check if the input is within the valid range + if (percentage) { + if (percentage < 1 || percentage > 100) { + throw new Error("The percentage value should be between 1 and 100.") + } + + // Calculate the factor + const factor = percentage / 100 + 1 + + return factor + } + return 1 +} diff --git a/src/paymaster/BiconomyPaymaster.ts b/src/paymaster/BiconomyPaymaster.ts index 36e3e55ad..e0cbb8999 100644 --- a/src/paymaster/BiconomyPaymaster.ts +++ b/src/paymaster/BiconomyPaymaster.ts @@ -366,9 +366,12 @@ export class BiconomyPaymaster if (response?.result) { const paymasterAndData = response.result.paymasterAndData - const preVerificationGas = response.result.preVerificationGas - const verificationGasLimit = response.result.verificationGasLimit - const callGasLimit = response.result.callGasLimit + const preVerificationGas = + response.result.preVerificationGas ?? _userOp.preVerificationGas + const verificationGasLimit = + response.result.verificationGasLimit ?? _userOp.verificationGasLimit + const callGasLimit = + response.result.callGasLimit ?? _userOp.callGasLimit return { paymasterAndData: paymasterAndData, preVerificationGas: preVerificationGas, diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 2ea34e67e..72e28d643 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -5,18 +5,26 @@ import { createWalletClient, encodeFunctionData, getContract, - parseAbi, - zeroAddress + parseAbi } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" +import { readContract } from "viem/actions" import { beforeAll, describe, expect, test } from "vitest" import { type BiconomySmartAccountV2, DEFAULT_ENTRYPOINT_ADDRESS, ERC20_ABI, - createSmartAccountClient + createSmartAccountClient, + percentage } from "../../src/account" +import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" +import { getAAError } from "../../src/bundler/utils/getAAError" +import { + DEFAULT_ECDSA_OWNERSHIP_MODULE, + DEFAULT_MULTICHAIN_MODULE, + createMultiChainValidationModule +} from "../../src/modules" import { PaymasterMode } from "../../src/paymaster" import { testOnlyOnOptimism } from "../setupFiles" import { checkBalance, getConfig, nonZeroBalance, topUp } from "../utils" @@ -85,6 +93,9 @@ describe("Account:Write", () => { } ]) + console.log(await smartAccount.getAccountAddress()) + console.log(await smartAccount.getSigner().getAddress(), "signer address") + userOp.signature = undefined const signedUserOp = await smartAccount.signUserOp(userOp) @@ -228,7 +239,7 @@ describe("Account:Write", () => { expect(tokenBalanceOfRecipientAfter - tokenBalanceOfRecipientBefore).toBe( 1n ) - }, 25000) + }, 40000) test("should mint an NFT and pay with ERC20 - with token", async () => { const encodedCall = encodeFunctionData({ @@ -315,4 +326,322 @@ describe("Account:Write", () => { const newBalance = await checkBalance(recipient, nftAddress) expect(newBalance - balance).toBe(1n) }, 60000) + + describe("Account:User Op Gas Offset", () => { + test("should increment user op verificationGasLimit by 50%. Paymaster OFF", async () => { + const transaction = { + to: recipient, + data: "0x" + } + + const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) + const userOpWithOffset = await smartAccount.buildUserOp([transaction], { + gasOffset: { + verificationGasLimitOffsetPct: 50 // 50% increase + } + }) + + const difference = Math.round( + Number(userOpWithOffset.verificationGasLimit) - + Number(userOpWithNoOffset.verificationGasLimit) + ) + const percentageValue = Math.round( + percentage(difference, Number(userOpWithNoOffset.verificationGasLimit)) + ) + + expect(percentageValue).toBe(50) + }, 60000) + + test("should increment user op gas values. Paymaster OFF", async () => { + const transaction = { + to: recipient, + data: "0x" + } + + const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) + const userOpWithOffset = await smartAccount.buildUserOp([transaction], { + gasOffset: { + verificationGasLimitOffsetPct: 50, // 50% increase + preVerificationGasOffsetPct: 100 // 100% increase + } + }) + + const vglDifference = Math.round( + Number(userOpWithOffset.verificationGasLimit) - + Number(userOpWithNoOffset.verificationGasLimit) + ) + const cgllDifference = Math.round( + Number(userOpWithOffset.callGasLimit) - + Number(userOpWithNoOffset.callGasLimit) + ) + const pvgDifference = Math.round( + Number(userOpWithOffset.preVerificationGas) - + Number(userOpWithNoOffset.preVerificationGas) + ) + + const vglPercentageValue = Math.round( + percentage( + vglDifference, + Number(userOpWithNoOffset.verificationGasLimit) + ) + ) + const cglPercentageValue = Math.round( + percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) + ) + const pvgPercentageValue = Math.round( + percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) + ) + + expect(vglPercentageValue).toBe(50) + expect(cglPercentageValue).toBe(0) + expect(pvgPercentageValue).toBe(100) + }, 60000) + + test("should increment user op gas values. Paymaster ON", async () => { + const transaction = { + to: recipient, + data: "0x" + } + + const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + gasOffset: { + verificationGasLimitOffsetPct: 0 // no increment but provided to avoid paymaster gas calculation (just for testing purposes) + } + }) // Passing gasOffset to avoid paymaster gas calculation + const userOpWithOffset = await smartAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + gasOffset: { + verificationGasLimitOffsetPct: 13.2, // 13.2% increase + preVerificationGasOffsetPct: 81 // 81% increase + } + }) + + const vglDifference = Math.round( + Number(userOpWithOffset.verificationGasLimit) - + Number(userOpWithNoOffset.verificationGasLimit) + ) + const cgllDifference = Math.round( + Number(userOpWithOffset.callGasLimit) - + Number(userOpWithNoOffset.callGasLimit) + ) + const pvgDifference = Math.round( + Number(userOpWithOffset.preVerificationGas) - + Number(userOpWithNoOffset.preVerificationGas) + ) + + const vglPercentageValue = Math.round( + percentage( + vglDifference, + Number(userOpWithNoOffset.verificationGasLimit) + ) + ) + const cglPercentageValue = Math.round( + percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) + ) + const pvgPercentageValue = Math.round( + percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) + ) + + expect(vglPercentageValue).toBe(13) + expect(cglPercentageValue).toBe(0) + expect(pvgPercentageValue).toBe(81) + }, 60000) + + test("should throw if percentage given is bigger than 100. Paymaster ON", async () => { + const transaction = { + to: recipient, + data: "0x" + } + + const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + gasOffset: { + verificationGasLimitOffsetPct: 0 // no increment, just for testing purposes + } + }) // Passing gasOffset to avoid paymaster gas calculation + const userOpWithOffset = smartAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + gasOffset: { + verificationGasLimitOffsetPct: 110 // 110% increase (not allowed) + } + }) + + expect(userOpWithOffset).rejects.toThrowError( + "The percentage value should be between 1 and 100." + ) + }, 60000) + + test("should increment user op gas with no paymaster using sendTransaction", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + + const { wait } = await smartAccount.sendTransaction(transaction, { + gasOffset: { + verificationGasLimitOffsetPct: 10, // 10% increase + preVerificationGasOffsetPct: 20, // 20% increase + maxFeePerGasOffsetPct: 30, // 30% increase + callGasLimitOffsetPct: 40, // 40% increase + maxPriorityFeePerGasOffsetPct: 50 // 50% increase + } + }) + const { + receipt: { transactionHash }, + userOpHash, + success + } = await wait() + + expect(userOpHash).toBeTruthy() + expect(success).toBe("true") + expect(transactionHash).toBeTruthy() + }, 60000) + }) + + describe("Transfer ownership", async () => { + const firstOwner = account.address + const newOwner = accountTwo.address + let _smartAccount = await createSmartAccountClient({ + signer: walletClient, + paymasterUrl, + bundlerUrl + // accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" + }) + + const smartAccountAddress = await _smartAccount.getAccountAddress() + + test("should transfer ownership of smart account to accountTwo", async () => { + const signerOfAccount = walletClient.account.address + const ownerOfAccount = await publicClient.readContract({ + address: DEFAULT_ECDSA_OWNERSHIP_MODULE, + abi: ECDSAModuleAbi, + functionName: "getOwner", + args: [await _smartAccount.getAccountAddress()] + }) + + expect(ownerOfAccount).toBe(signerOfAccount) + const response = await _smartAccount.transferOwnership( + newOwner, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + } + ) + const receipt = await response.wait() + expect(receipt.success).toBe("true") + }, 35000) + + test("should revert transfer ownership with signer that is not the owner", async () => { + _smartAccount = await createSmartAccountClient({ + signer: walletClient, + paymasterUrl, + bundlerUrl, + accountAddress: smartAccountAddress + }) + + const signerOfAccount = walletClient.account.address + const ownerOfAccount = await publicClient.readContract({ + address: DEFAULT_ECDSA_OWNERSHIP_MODULE, + abi: ECDSAModuleAbi, + functionName: "getOwner", + args: [await _smartAccount.getAccountAddress()] + }) + + expect(ownerOfAccount).not.toBe(signerOfAccount) + expect( + _smartAccount.transferOwnership( + newOwner, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + } + ) + ).rejects.toThrowError() + }, 35000) + + test("send an user op with the new owner", async () => { + _smartAccount = await createSmartAccountClient({ + signer: walletClientTwo, + paymasterUrl, + bundlerUrl, + accountAddress: smartAccountAddress + }) + const currentSmartAccountInstanceSigner = await _smartAccount + .getSigner() + .getAddress() + expect(currentSmartAccountInstanceSigner).toBe(newOwner) + const tx = { + to: nftAddress, + data: encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [smartAccountAddressTwo] + }) + } + const { wait } = await _smartAccount.sendTransaction(tx, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const response = await wait() + expect(response.success).toBe("true") + }, 35000) + + test("should revert if sending an user op with the old owner", async () => { + _smartAccount = await createSmartAccountClient({ + signer: walletClient, + paymasterUrl, + bundlerUrl, + accountAddress: smartAccountAddress + }) + const tx = { + to: nftAddress, + data: encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [smartAccountAddressTwo] + }) + } + await expect( + _smartAccount.sendTransaction(tx, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + ).rejects.toThrowError( + await getAAError("Error coming from Bundler: AA24 signature error") + ) + }, 35000) + + test("should transfer ownership of smart account back to EOA 1", async () => { + _smartAccount = await createSmartAccountClient({ + signer: walletClientTwo, + paymasterUrl, + bundlerUrl, + accountAddress: smartAccountAddress + }) + + const signerOfAccount = walletClientTwo.account.address + const ownerOfAccount = await publicClient.readContract({ + address: DEFAULT_ECDSA_OWNERSHIP_MODULE, + abi: ECDSAModuleAbi, + functionName: "getOwner", + args: [await _smartAccount.getAccountAddress()] + }) + + expect(ownerOfAccount).toBe(signerOfAccount) + + const response = await _smartAccount.transferOwnership( + firstOwner, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + } + ) + const receipt = await response.wait() + expect(receipt.success).toBe("true") + }, 45000) + }) }) diff --git a/tests/modules/read.test.ts b/tests/modules/read.test.ts index a5d5c1a5e..ad1c21649 100644 --- a/tests/modules/read.test.ts +++ b/tests/modules/read.test.ts @@ -1,12 +1,7 @@ import { defaultAbiCoder } from "@ethersproject/abi" import { JsonRpcProvider } from "@ethersproject/providers" import { Wallet } from "@ethersproject/wallet" -import { - http, - createWalletClient, - encodeAbiParameters, - parseAbiParameters -} from "viem" +import { http, type Hex, createWalletClient, encodeAbiParameters } from "viem" import { privateKeyToAccount } from "viem/accounts" import { beforeAll, describe, expect, test } from "vitest" import { diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts index 5d66994ab..9f1e32357 100644 --- a/tests/modules/write.test.ts +++ b/tests/modules/write.test.ts @@ -21,11 +21,15 @@ import { createSmartAccountClient } from "../../src/account" import { Logger, getChain } from "../../src/account" +import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" import { DEFAULT_BATCHED_SESSION_ROUTER_MODULE, + DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_MULTICHAIN_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE, + ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION, createBatchedSessionRouterModule, + createECDSAOwnershipValidationModule, createMultiChainValidationModule, createSessionKeyManagerModule, getABISVMSessionKeyData @@ -256,7 +260,6 @@ describe("Modules:Write", () => { // First we need to check if smart account is deployed // if not deployed, send an empty transaction to deploy it const isDeployed = await smartAccount.isAccountDeployed() - Logger.log("session", { isDeployed }) if (!isDeployed) { const { wait } = await smartAccount.deploy({ paymasterServiceData: { mode: PaymasterMode.SPONSORED } @@ -583,4 +586,155 @@ describe("Modules:Write", () => { `Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai` ) }, 60000) + + describe("Transfer ownership", () => { + test("should use ABI SVM to allow transfer ownership of smart account", async () => { + const smartAccount = await createSmartAccountClient({ + chainId, + signer: walletClient, + bundlerUrl, + paymasterUrl, + index: 10 // Increasing index to not conflict with other test cases and use a new smart account + }) + + const smartAccountAddressForPreviousOwner = + await smartAccount.getAccountAddress() + + const signerOfAccount = walletClient.account.address + const ownerOfAccount = await publicClient.readContract({ + address: DEFAULT_ECDSA_OWNERSHIP_MODULE, + abi: ECDSAModuleAbi, + functionName: "getOwner", + args: [await smartAccount.getAccountAddress()] + }) + + if (ownerOfAccount !== signerOfAccount) { + // Re-create the smart account instance with the new owner + const smartAccountWithOtherOwner = await createSmartAccountClient({ + chainId, + signer: walletClientTwo, + bundlerUrl, + paymasterUrl, + accountAddress: smartAccountAddressForPreviousOwner + }) + + // Transfer ownership back to walletClient 1 + await smartAccountWithOtherOwner.transferOwnership( + walletClient.account.address, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + { paymasterServiceData: { mode: PaymasterMode.SPONSORED } } + ) + } + + let sessionSigner: WalletClientSigner + const sessionKeyEOA = walletClient.account.address + const newOwner = walletClientTwo.account.address + + const accountAddress = await smartAccount.getAccountAddress() + const sessionMemoryStorage: SessionMemoryStorage = + new SessionMemoryStorage(accountAddress) + // First we need to check if smart account is deployed + // if not deployed, send an empty transaction to deploy it + const isDeployed = await smartAccount.isAccountDeployed() + if (!isDeployed) { + const { wait } = await smartAccount.deploy({ + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const { success } = await wait() + expect(success).toBe("true") + } + + try { + sessionSigner = await sessionMemoryStorage.getSignerByKey(sessionKeyEOA) + } catch (error) { + sessionSigner = await sessionMemoryStorage.addSigner({ + pbKey: sessionKeyEOA, + pvKey: `0x${privateKeyTwo}`, + chainId: chain + }) + } + + expect(sessionSigner).toBeTruthy() + // Create session module + const sessionModule = await createSessionKeyManagerModule({ + moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, + smartAccountAddress: await smartAccount.getAddress(), + sessionStorageClient: sessionMemoryStorage + }) + const functionSelectorTransferOwnership = slice( + toFunctionSelector("transferOwnership(address) public"), + 0, + 4 + ) + const sessionKeyDataTransferOwnership = await getABISVMSessionKeyData( + sessionKeyEOA as Hex, + { + destContract: + ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION.V1_0_0 as Hex, // ECDSA module address + functionSelector: functionSelectorTransferOwnership, + valueLimit: parseEther("0"), + rules: [ + { + offset: 0, // offset 0 means we are checking first parameter of transferOwnership (recipient address) + condition: 0, // 0 = Condition.EQUAL + referenceValue: pad(walletClient.account.address, { + size: 32 + }) // new owner address + } + ] + } + ) + const abiSvmAddress = "0x000006bC2eCdAe38113929293d241Cf252D91861" + const sessionTxDataTransferOwnership = + await sessionModule.createSessionData([ + { + validUntil: 0, + validAfter: 0, + sessionValidationModule: abiSvmAddress, + sessionPublicKey: sessionKeyEOA as Hex, + sessionKeyData: sessionKeyDataTransferOwnership as Hex + } + ]) + const setSessionAllowedTransferOwnerhsipTrx = { + to: DEFAULT_SESSION_KEY_MANAGER_MODULE, + data: sessionTxDataTransferOwnership.data + } + // biome-ignore lint/suspicious/noExplicitAny: <explanation> + const txArray: any = [] + // Check if module is enabled + const isEnabled = await smartAccount.isModuleEnabled( + DEFAULT_SESSION_KEY_MANAGER_MODULE + ) + + if (!isEnabled) { + const enableModuleTrx = await smartAccount.getEnableModuleData( + DEFAULT_SESSION_KEY_MANAGER_MODULE + ) + txArray.push(enableModuleTrx) + txArray.push(setSessionAllowedTransferOwnerhsipTrx) + } else { + Logger.log("MODULE ALREADY ENABLED") + txArray.push(setSessionAllowedTransferOwnerhsipTrx) + } + const userOpResponse1 = await smartAccount.sendTransaction(txArray, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const transactionDetails = await userOpResponse1.wait() + expect(transactionDetails.success).toBe("true") + Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash) + + // Transfer ownership back to walletClient + const resp = await smartAccount.transferOwnership( + newOwner, + DEFAULT_ECDSA_OWNERSHIP_MODULE, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + params: { + sessionSigner: sessionSigner, + sessionValidationModule: abiSvmAddress + } + } + ) + }, 60000) + }) }) diff --git a/tests/utils.ts b/tests/utils.ts index 69b88d31b..2a89b0121 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -32,6 +32,7 @@ export const getEnvVars = () => { } return { bundlerUrl: process.env.BUNDLER_URL || "", + bundlerUrlTwo: getBundlerUrl(84532) || "", privateKey: process.env.E2E_PRIVATE_KEY_ONE || "", privateKeyTwo: process.env.E2E_PRIVATE_KEY_TWO || "", paymasterUrl: `https://paymaster.biconomy.io/api/v1/80002/${ From 99411159d007eb30f0366ae5020ba00fabbd9a7a Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Tue, 14 May 2024 13:20:49 +0300 Subject: [PATCH 1179/1247] chore: release v4.3.0 (#491) * release v4.3.0 * refactor: increase timeout for transferOwnership tests --------- Co-authored-by: GabiDev <gv@popoo.io> --- CHANGELOG.md | 9 +++++++++ package.json | 11 ++++++++--- tests/account/write.test.ts | 10 +++++----- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 96cc7c818..22c1ec14a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # @biconomy/account +## 4.3.0 + +### Minor Changes + +- Added transferOwnership and gasOffsets + + - added transferOwnerhsip() method on the Smart Account + - added gasOffsets parameter to increase gas values + ## 4.2.0 ### Minor Changes diff --git a/package.json b/package.json index f8e03da04..f34eec0a4 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "sideEffects": false, "name": "@biconomy/account", "author": "Biconomy", - "version": "4.2.0", + "version": "4.3.0", "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ "erc-7579", @@ -46,7 +46,10 @@ "default": "./_cjs/modules/index.js" } }, - "files": ["dist/*", "README.md"], + "files": [ + "dist/*", + "README.md" + ], "scripts": { "format": "biome format . --write", "lint": "biome check .", @@ -102,7 +105,9 @@ "viem": "^2" }, "commitlint": { - "extends": ["@commitlint/config-conventional"] + "extends": [ + "@commitlint/config-conventional" + ] }, "simple-git-hooks": { "pre-commit": "bun run format && bun run lint:fix", diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 72e28d643..8467a5e27 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -535,7 +535,7 @@ describe("Account:Write", () => { ) const receipt = await response.wait() expect(receipt.success).toBe("true") - }, 35000) + }, 50000) test("should revert transfer ownership with signer that is not the owner", async () => { _smartAccount = await createSmartAccountClient({ @@ -563,7 +563,7 @@ describe("Account:Write", () => { } ) ).rejects.toThrowError() - }, 35000) + }, 50000) test("send an user op with the new owner", async () => { _smartAccount = await createSmartAccountClient({ @@ -589,7 +589,7 @@ describe("Account:Write", () => { }) const response = await wait() expect(response.success).toBe("true") - }, 35000) + }, 50000) test("should revert if sending an user op with the old owner", async () => { _smartAccount = await createSmartAccountClient({ @@ -613,7 +613,7 @@ describe("Account:Write", () => { ).rejects.toThrowError( await getAAError("Error coming from Bundler: AA24 signature error") ) - }, 35000) + }, 50000) test("should transfer ownership of smart account back to EOA 1", async () => { _smartAccount = await createSmartAccountClient({ @@ -642,6 +642,6 @@ describe("Account:Write", () => { ) const receipt = await response.wait() expect(receipt.success).toBe("true") - }, 45000) + }, 50000) }) }) From b9b2077b8a368456b51bf6b9b7af5bb79fffc072 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Tue, 14 May 2024 13:16:02 +0100 Subject: [PATCH 1180/1247] chore: sessions dx (#486) * feat: SMA-792 sessions devex --- .changeset/yellow-snails-exist.md | 7 + .size-limit.json | 6 +- CHANGELOG.md | 17 + README.md | 94 +-- bun.lockb | Bin 263597 -> 265869 bytes examples/CREATE_AND_USE_A_BATCH_SESSION.md | 138 +++ examples/CREATE_AND_USE_A_SESSION.md | 116 +++ examples/INITIALISE_A_SMART_CONTRACT.md | 23 + .../SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md | 56 ++ examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md | 35 + package.json | 9 +- src/account/BiconomySmartAccountV2.ts | 12 +- src/account/utils/Constants.ts | 5 +- src/account/utils/Logger.ts | 14 +- src/account/utils/Types.ts | 11 + src/bundler/utils/getAAError.ts | 5 +- src/modules/SessionKeyManagerModule.ts | 12 + src/modules/index.ts | 7 +- src/modules/interfaces/ISessionStorage.ts | 19 +- .../session-storage/SessionFileStorage.ts | 58 +- .../session-storage/SessionLocalStorage.ts | 54 +- .../session-storage/SessionMemoryStorage.ts | 48 +- src/modules/session-storage/index.ts | 4 + src/modules/session-storage/utils.ts | 39 + src/modules/sessions/abi.ts | 322 +++++++ src/modules/sessions/batch.ts | 232 ++++++ src/modules/sessions/erc20.ts | 32 + .../sessions/sessionSmartAccountClient.ts | 119 +++ src/modules/utils/Constants.ts | 22 +- src/modules/utils/Helper.ts | 78 +- src/modules/utils/Types.ts | 22 +- tests/account/read.test.ts | 4 +- tests/account/write.test.ts | 10 +- tests/bundler/read.test.ts | 2 +- tests/modules/read.test.ts | 67 +- tests/modules/write.test.ts | 783 ++++++++++-------- tests/paymaster/read.test.ts | 3 +- tests/utils.ts | 5 +- 38 files changed, 1899 insertions(+), 591 deletions(-) create mode 100644 .changeset/yellow-snails-exist.md create mode 100644 examples/CREATE_AND_USE_A_BATCH_SESSION.md create mode 100644 examples/CREATE_AND_USE_A_SESSION.md create mode 100644 examples/INITIALISE_A_SMART_CONTRACT.md create mode 100644 examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md create mode 100644 examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md create mode 100644 src/modules/session-storage/index.ts create mode 100644 src/modules/session-storage/utils.ts create mode 100644 src/modules/sessions/abi.ts create mode 100644 src/modules/sessions/batch.ts create mode 100644 src/modules/sessions/erc20.ts create mode 100644 src/modules/sessions/sessionSmartAccountClient.ts diff --git a/.changeset/yellow-snails-exist.md b/.changeset/yellow-snails-exist.md new file mode 100644 index 000000000..916b7bcc0 --- /dev/null +++ b/.changeset/yellow-snails-exist.md @@ -0,0 +1,7 @@ +--- +"@biconomy/account": minor +--- + +Sessions DevEx + +- Improved DevEx related to the creating and using of sessions [chore: sessions dx](https://github.com/bcnmy/biconomy-client-sdk/pull/486) diff --git a/.size-limit.json b/.size-limit.json index a2bdf369c..7fa63ece7 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -2,18 +2,18 @@ { "name": "core (esm)", "path": "./dist/_esm/index.js", - "limit": "60 kB", + "limit": "65 kB", "import": "*" }, { "name": "core (cjs)", "path": "./dist/_cjs/index.js", - "limit": "60 kB" + "limit": "65 kB" }, { "name": "account (tree-shaking)", "path": "./dist/_esm/index.js", - "limit": "60 kB", + "limit": "65 kB", "import": "{ createSmartAccountClient }" }, { diff --git a/CHANGELOG.md b/CHANGELOG.md index 96cc7c818..2f0425a35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # @biconomy/account +## 4.4.0 + +### Minor Changes + +- Sessions DevEx + + - Improved DevEx related to the creating and using of sessions + +## 4.3.0 + +### Minor Changes + +- Added transferOwnership and gasOffsets + + - added transferOwnerhsip() method on the Smart Account + - added gasOffsets parameter to increase gas values + ## 4.2.0 ### Minor Changes diff --git a/README.md b/README.md index 8d8bd5bca..db77d8f2d 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,6 @@ The Biconomy SDK is your all-in-one toolkit for building decentralized applicati - [📄 Documentation and Resources](#-documentation-and-resources) - [💼 Examples](#-examples) - - - [🛠️ Initialise a smartAccount](#-initialise-a-smartAccount) - - [📨 send some eth with sponsorship](#-send-some-eth-with-sponsorship) - - [🔢 send a multi tx and pay gas with a token](#️-send-a-multi-tx-and-pay-gas-with-a-token) - - [License](#license) - [Connect with Biconomy 🍊](#connect-with-biconomy-🍊) @@ -73,91 +68,10 @@ For a comprehensive understanding of our project and to contribute effectively, ## 💼 Examples -### [Initialise a smartAccount](https://bcnmy.github.io/biconomy-client-sdk/functions/createSmartAccountClient.html) - -| Key | Description | -| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| [signer](https://bcnmy.github.io/biconomy-client-sdk/packages/account/docs/interfaces/SmartAccountSigner.html) | This signer will be used for signing userOps for any transactions you build. Will accept ethers.JsonRpcSigner as well as a viemWallet | -| [paymasterUrl](https://dashboard.biconomy.io) | You can pass in a paymasterUrl necessary for sponsoring transactions (retrieved from the biconomy dashboard) | -| [bundlerUrl](https://dashboard.biconomy.io) | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | - -```typescript -import { createSmartAccountClient } from "@biconomy/account"; -import { createWalletClient, http, createPublicClient } from "viem"; -import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; -import { mainnet as chain } from "viem/chains"; - -const account = privateKeyToAccount(generatePrivateKey()); -const signer = createWalletClient({ account, chain, transport: http() }); - -const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - paymasterUrl, -}); -``` - -### [Send some eth with sponsorship](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#sendTransaction) - -| Key | Description | -| --------------------------------------------------------------------------------- | -------------------------------------------------------------- | -| [oneOrManyTx](https://bcnmy.github.io/biconomy-client-sdk/types/Transaction.html) | Submit multiple or one transactions | -| [userOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/types/UserOpReceipt) | Returned information about your tx, receipts, userOpHashes etc | - -```typescript -const oneOrManyTx = { to: "0x...", value: 1 }; - -const { wait } = await smartAccount.sendTransaction(oneOrManyTx, { - paymasterServiceData: { - mode: PaymasterMode.SPONSORED, - }, -}); - -const { - receipt: { transactionHash }, - userOpHash, - success, -} = await wait(); -``` - -### [Send a multi tx and pay gas with a token](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#getTokenFees) - -| Key | Description | -| -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | -| [buildUseropDto](https://bcnmy.github.io/biconomy-client-sdk/types/BuildUserOpOptions.html) | Options for building a userOp | -| [paymasterServiceData](https://bcnmy.github.io/biconomy-client-sdk/types/PaymasterUserOperationDto.html) | PaymasterOptions set in the buildUseropDto | - -```typescript -import { encodeFunctionData, parseAbi } from "viem"; -const preferredToken = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a"; // USDC - -const tx = { - to: nftAddress, - data: encodeFunctionData({ - abi: parseAbi(["function safeMint(address to) public"]), - functionName: "safeMint", - args: ["0x..."], - }), -}; - -const buildUseropDto = { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - preferredToken, - }, -}; - -const { wait } = await smartAccount.sendTransaction( - [tx, tx] /* Mint twice */, - buildUseropDto -); - -const { - receipt: { transactionHash }, - userOpHash, - success, -} = await wait(); -``` +- [Initialise a smartAccount](examples/INITIALISE_A_SMART_CONTRACT.md) +- [send some eth with sponsorship](examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md) +- [send a multi tx and pay gas with an erc20 token](examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md) +- [create and use a session](examples/CREATE_AND_USE_A_SESSION.md) ## License diff --git a/bun.lockb b/bun.lockb index 1784ac93e6885f3b9ebf417939f3fe7293049a23..0136a98d92eb4aa9d5843973ef79a2606b323c6a 100755 GIT binary patch delta 39097 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 H_^tQM7I>f1RPMK{^ a75j>>nmbh%=eIh!<_vRkE@q`&{{I7Jyj^kt delta 37790 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 N6I#_=D3tGs{{!i4q;miO diff --git a/examples/CREATE_AND_USE_A_BATCH_SESSION.md b/examples/CREATE_AND_USE_A_BATCH_SESSION.md new file mode 100644 index 000000000..584203304 --- /dev/null +++ b/examples/CREATE_AND_USE_A_BATCH_SESSION.md @@ -0,0 +1,138 @@ +### Create and Use a Batch Session + +| Key | Description | +| ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | +| [sessionConfigs](https://bcnmy.github.io/biconomy-client-sdk/interfaces/CreateSessionDataParams.html) | svm criteria | +| [createERC20SessionDatum](https://bcnmy.github.io/biconomy-client-sdk/functions/createERC20SessionDatum.html) | helper that returns erc20 svm data (not recommended) | +| [createABISessionDatum](https://bcnmy.github.io/biconomy-client-sdk/types/createABISessionDatum.html) | helper that returns abi svm data (recommended) | + +```typescript +import { + createSmartAccountClient, + createSession, + createSessionSmartAccountClient, + Rule, + PaymasterMode, + Policy, +} from "@biconomy/account"; +import { createWalletClient, http, createPublicClient } from "viem"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { mainnet as chain } from "viem/chains"; + +const withSponsorship = { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, +}; + +const account = privateKeyToAccount(generatePrivateKey()); +const signer = createWalletClient({ account, chain, transport: http() }); +const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + paymasterUrl, +}); + +// Retrieve bundler and pymaster urls from dashboard +const smartAccountAddress = await smartAccount.getAccountAddress(); + +// creates a store for the session, and saves the keys to it to be later retrieved +const { sessionKeyAddress, sessionStorageClient } = await createSessionKeyEOA( + smartAccount, + chain +); + +const leaves: CreateSessionParams[] = [ + createERC20SessionDatum({ + interval: { + validUntil: 0, + validAfter: 0, + }, + sessionKeyAddress, + sessionKeyData: encodeAbiParameters( + [ + { type: "address" }, + { type: "address" }, + { type: "address" }, + { type: "uint256" }, + ], + [sessionKeyAddress, token, recipient, amount] + ), + }), + createABISessionDatum({ + interval: { + validUntil: 0, + validAfter: 0, + }, + sessionKeyAddress, + contractAddress: nftAddress, + functionSelector: "safeMint(address)", + rules: [ + { + offset: 0, + condition: 0, + referenceValue: smartAccountAddress, + }, + ], + valueLimit: 0n, + }), +]; + +const { wait, session } = await createBatchSession( + smartAccount, + sessionKeyAddress, + sessionStorageClient, + leaves, + withSponsorship +); + +const { + receipt: { transactionHash }, + success, +} = await wait(); + +const smartAccountWithSession = await createSessionSmartAccountClient( + { + accountAddress: smartAccountAddress, // Set the account address on behalf of the user + bundlerUrl, + paymasterUrl, + chainId, + }, + session, + true // if batching +); + +const transferTx: Transaction = { + to: token, + data: encodeFunctionData({ + abi: parseAbi(["function transfer(address _to, uint256 _value)"]), + functionName: "transfer", + args: [recipient, amount], + }), +}; +const nftMintTx: Transaction = { + to: nftAddress, + data: encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [smartAccountAddress], + }), +}; + +const txs = [transferTx, nftMintTx]; + +const batchSessionParams = await getBatchSessionTxParams( + ["ERC20", "ABI"], + txs, + session, + chain +); + +const { wait: sessionWait } = await smartAccountWithSession.sendTransaction( + txs, + { + ...batchSessionParams, + ...withSponsorship, + } +); + +const { success } = await sessionWait(); +``` diff --git a/examples/CREATE_AND_USE_A_SESSION.md b/examples/CREATE_AND_USE_A_SESSION.md new file mode 100644 index 000000000..124b039b7 --- /dev/null +++ b/examples/CREATE_AND_USE_A_SESSION.md @@ -0,0 +1,116 @@ +### Create and Use a Session + +| Key | Description | +| ------------------------------------------------------------------------------- | ----------- | +| [sessionConfigs](https://bcnmy.github.io/biconomy-client-sdk/types/Policy.html) | Policy[] | +| [rules](https://bcnmy.github.io/biconomy-client-sdk/types/Policy.html) | Rule[] | + +```typescript +import { + createSmartAccountClient, + createSession, + createSessionSmartAccountClient, + Rule, + Policy, +} from "@biconomy/account"; +import { createWalletClient, http, createPublicClient } from "viem"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { mainnet as chain } from "viem/chains"; + +const account = privateKeyToAccount(generatePrivateKey()); +const signer = createWalletClient({ account, chain, transport: http() }); +const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + paymasterUrl, +}); // Retrieve bundler and pymaster urls from dashboard +const smartAccountAddress = await smartAccount.getAccountAddress(); + +// creates a store for the session, and saves the keys to it to be later retrieved +const { sessionKeyAddress, sessionStorageClient } = await createSessionKeyEOA( + smartAccount, + chain +); + +// The rules that govern the method from the whitelisted contract +const rules: Rule = [ + { + /** The index of the param from the selected contract function upon which the condition will be applied */ + offset: 0, + /** + * Conditions: + * + * 0 - Equal + * 1 - Less than or equal + * 2 - Less than + * 3 - Greater than or equal + * 4 - Greater than + * 5 - Not equal + */ + condition: 0, + /** The value to compare against */ + referenceValue: smartAccountAddress, + }, +]; + +/** The policy is made up of a list of rules applied to the contract method with and interval */ +const policy: Policy[] = [ + { + /** The address of the sessionKey upon which the policy is to be imparted */ + sessionKeyAddress, + /** The address of the contract to be included in the policy */ + contractAddress: nftAddress, + /** The specific function selector from the contract to be included in the policy */ + functionSelector: "safeMint(address)", + /** The list of rules which make up the policy */ + rules, + /** The time interval within which the session is valid */ + interval: { + validUntil: 0, + validAfter: 0, + }, + /** The maximum value that can be transferred in a single transaction */ + valueLimit: 0n, + }, +]; + +const { wait, session } = await createSession( + smartAccount, + policy, + sessionKeyAddress, + sessionStorageClient, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + } +); + +const { + receipt: { transactionHash }, +} = await wait(); + +const smartAccountWithSession = await createSessionSmartAccountClient( + { + accountAddress: smartAccountAddress, // Set the account address on behalf of the user + bundlerUrl, + paymasterUrl, + chainId, + }, + session +); + +const { wait: mintWait } = await smartAccountWithSession.sendTransaction( + { + to: nftAddress, + data: encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [smartAccountAddress], + }), + }, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + } +); + +const { success } = await mintWait(); +``` diff --git a/examples/INITIALISE_A_SMART_CONTRACT.md b/examples/INITIALISE_A_SMART_CONTRACT.md new file mode 100644 index 000000000..6b036e308 --- /dev/null +++ b/examples/INITIALISE_A_SMART_CONTRACT.md @@ -0,0 +1,23 @@ +### [Initialise a smartAccount](https://bcnmy.github.io/biconomy-client-sdk/functions/createSmartAccountClient.html) + +| Key | Description | +| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| [signer](https://bcnmy.github.io/biconomy-client-sdk/packages/account/docs/interfaces/SmartAccountSigner.html) | This signer will be used for signing userOps for any transactions you build. Will accept ethers.JsonRpcSigner as well as a viemWallet | +| [paymasterUrl](https://dashboard.biconomy.io) | You can pass in a paymasterUrl necessary for sponsoring transactions (retrieved from the biconomy dashboard) | +| [bundlerUrl](https://dashboard.biconomy.io) | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | + +```typescript +import { createSmartAccountClient } from "@biconomy/account"; +import { createWalletClient, http, createPublicClient } from "viem"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { mainnet as chain } from "viem/chains"; + +const account = privateKeyToAccount(generatePrivateKey()); +const signer = createWalletClient({ account, chain, transport: http() }); + +const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + paymasterUrl, +}); // Retrieve bundler and pymaster urls from dashboard +``` diff --git a/examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md b/examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md new file mode 100644 index 000000000..911f80fc4 --- /dev/null +++ b/examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md @@ -0,0 +1,56 @@ +### [Send a multi tx and pay gas with a token](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#getTokenFees) + +| Key | Description | +| -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| [buildUseropDto](https://bcnmy.github.io/biconomy-client-sdk/types/BuildUserOpOptions.html) | Options for building a userOp | +| [paymasterServiceData](https://bcnmy.github.io/biconomy-client-sdk/types/PaymasterUserOperationDto.html) | PaymasterOptions set in the buildUseropDto | + +```typescript +import { + encodeFunctionData, + parseAbi, + createWalletClient, + http, + createPublicClient, +} from "viem"; +import { createSmartAccountClient } from "@biconomy/account"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { mainnet as chain } from "viem/chains"; + +const account = privateKeyToAccount(generatePrivateKey()); +const signer = createWalletClient({ account, chain, transport: http() }); +const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + paymasterUrl, +}); // Retrieve bundler and pymaster urls from dashboard + +const preferredToken = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a"; // USDC + +const tx = { + to: nftAddress, + data: encodeFunctionData({ + abi: parseAbi(["function safeMint(address to) public"]), + functionName: "safeMint", + args: ["0x..."], + }), +}; + +const buildUseropDto = { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken, + }, +}; + +const { wait } = await smartAccount.sendTransaction( + [tx, tx] /* Mint twice */, + buildUseropDto +); + +const { + receipt: { transactionHash }, + userOpHash, + success, +} = await wait(); +``` diff --git a/examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md b/examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md new file mode 100644 index 000000000..33d35d323 --- /dev/null +++ b/examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md @@ -0,0 +1,35 @@ +### [Send some eth with sponsorship](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#sendTransaction) + +| Key | Description | +| --------------------------------------------------------------------------------- | -------------------------------------------------------------- | +| [oneOrManyTx](https://bcnmy.github.io/biconomy-client-sdk/types/Transaction.html) | Submit multiple or one transactions | +| [userOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/types/UserOpReceipt) | Returned information about your tx, receipts, userOpHashes etc | + +```typescript +import { createSmartAccountClient } from "@biconomy/account"; +import { createWalletClient, http, createPublicClient } from "viem"; +import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; +import { mainnet as chain } from "viem/chains"; + +const account = privateKeyToAccount(generatePrivateKey()); +const signer = createWalletClient({ account, chain, transport: http() }); +const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl, + paymasterUrl, +}); // Retrieve bundler and paymaster urls from dashboard + +const oneOrManyTx = { to: "0x...", value: 1 }; + +const { wait } = await smartAccount.sendTransaction(oneOrManyTx, { + paymasterServiceData: { + mode: PaymasterMode.SPONSORED, + }, +}); + +const { + receipt: { transactionHash }, + userOpHash, + success, +} = await wait(); +``` diff --git a/package.json b/package.json index f8e03da04..8749ac31d 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "sideEffects": false, "name": "@biconomy/account", "author": "Biconomy", - "version": "4.2.0", + "version": "4.4.0", "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ "erc-7579", @@ -51,7 +51,7 @@ "format": "biome format . --write", "lint": "biome check .", "lint:fix": "bun run lint --apply", - "dev": "concurrently \"bun run esm:watch\" \"bun run cjs:watch\" \"bun run esm:watch:aliases\" \"bun run cjs:watch:aliases\"", + "dev": "bun link && concurrently \"bun run esm:watch\" \"bun run cjs:watch\" \"bun run esm:watch:aliases\" \"bun run cjs:watch:aliases\"", "build": "bun run clean && bun run build:cjs && bun run build:esm && bun run build:types", "clean": "rimraf ./dist/_esm ./dist/_cjs ./dist/_types ./dist/tsconfig", "test": "vitest dev -c ./tests/vitest.config.ts", @@ -86,7 +86,9 @@ "@size-limit/preset-small-lib": "^11", "@types/bun": "latest", "@vitest/coverage-v8": "^1.3.1", + "buffer": "^6.0.3", "concurrently": "^8.2.2", + "ethers": "^6.12.0", "gh-pages": "^6.1.1", "rimraf": "^5.0.5", "simple-git-hooks": "^2.9.0", @@ -94,8 +96,7 @@ "tsc-alias": "^1.8.8", "tslib": "^2.6.2", "typedoc": "^0.25.9", - "vitest": "^1.3.1", - "buffer": "^6.0.3" + "vitest": "^1.3.1" }, "peerDependencies": { "typescript": "^5", diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 048a05e68..7ce77c339 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -97,6 +97,8 @@ import { type UserOperationKey = keyof UserOperationStruct export class BiconomySmartAccountV2 extends BaseSmartContractAccount { + private sessionData?: ModuleInfo + private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001" private index: number @@ -149,6 +151,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { DEFAULT_BICONOMY_FACTORY_ADDRESS }) + this.sessionData = biconomySmartAccountConfig.sessionData + this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule this.activeValidationModule = @@ -215,7 +219,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * - Docs: https://docs.biconomy.io/Account/integration#integration-1 * - * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance. + * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance {@link BiconomySmartAccountV2Config}. * @returns A promise that resolves to a new instance of BiconomySmartAccountV2. * @throws An error if something is wrong with the smart account instance creation. * @@ -877,7 +881,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } // dummy signature depends on the validation module supplied. - async getDummySignatures(params?: ModuleInfo): Promise<Hex> { + async getDummySignatures(_params?: ModuleInfo): Promise<Hex> { + const params = { ..._params, ...(this.sessionData ? this.sessionData : {}) } this.isActiveValidationModuleDefined() return (await this.activeValidationModule.getDummySignature(params)) as Hex } @@ -906,8 +911,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async signUserOp( userOp: Partial<UserOperationStruct>, - params?: SendUserOpParams + _params?: SendUserOpParams ): Promise<UserOperationStruct> { + const params = { ..._params, ...(this.sessionData ? this.sessionData : {}) } this.isActiveValidationModuleDefined() const requiredFields: UserOperationKey[] = [ "sender", diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index 320a89ac0..d2bae4697 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -69,6 +69,7 @@ export const DefaultGasLimit = { } export const ERROR_MESSAGES = { + ACCOUNT_NOT_DEPLOYED: "Account has not yet been deployed", ACCOUNT_ALREADY_DEPLOYED: "Account already deployed", NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY: "Native token balance is not available during deploy", @@ -81,7 +82,9 @@ export const ERROR_MESSAGES = { NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT: "'Amount' is required for withdrawal of native token without using a paymaster", MISSING_RPC_URL: - "rpcUrl is required for PrivateKeyAccount signer type, please provide it in the config" + "rpcUrl is required for PrivateKeyAccount signer type, please provide it in the config", + INVALID_SESSION_TYPES: + "Session types and transactions must be of the same length" } export const NATIVE_TOKEN_ALIAS: Hex = diff --git a/src/account/utils/Logger.ts b/src/account/utils/Logger.ts index c096cc270..7925028c4 100644 --- a/src/account/utils/Logger.ts +++ b/src/account/utils/Logger.ts @@ -12,7 +12,7 @@ class Logger { "BICONOMY_SDK_DEBUG", "REACT_APP_BICONOMY_SDK_DEBUG", "NEXT_PUBLIC_BICONOMY_SDK_DEBUG" - ].some((key) => process.env[key]?.toString() === "true") + ].some((key) => process?.env?.[key]?.toString() === "true") /** * \x1b[0m is an escape sequence to reset the color of the text @@ -21,7 +21,9 @@ class Logger { * warn - Magenta[time] Yellow[WARN]: Cyan[message]: [value] * error - Magenta[time] Red[ERROR]: Cyan[message]: [value] */ - static log(message: string, value = ""): void { + + // biome-ignore lint/suspicious/noExplicitAny: <explanation> + static log(message: string, value: any = ""): void { const timestamp = new Date().toISOString() const logMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[36m${message}\x1b[0m:` @@ -29,8 +31,8 @@ class Logger { console.log(logMessage, value === undefined ? "" : value) } } - - static warn(message: string, value = ""): void { + // biome-ignore lint/suspicious/noExplicitAny: <explanation> + static warn(message: string, value: any = ""): void { const timestamp = new Date().toISOString() const warnMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[33mWARN\x1b[0m: \x1b[36m${message}\x1b[0m` @@ -38,8 +40,8 @@ class Logger { console.warn(warnMessage, value === undefined ? "" : value) } } - - static error(message: string, value = ""): void { + // biome-ignore lint/suspicious/noExplicitAny: <explanation> + static error(message: string, value: any = ""): void { const timestamp = new Date().toISOString() const errorMessage = `\x1b[35m[${timestamp}]\x1b[0m \x1b[31mERROR\x1b[0m: \x1b[36m${message}\x1b[0m` diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index e28ed8b3a..dda36373d 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -13,6 +13,10 @@ import type { } from "viem" import type { IBundler } from "../../bundler" import type { BaseValidationModule, ModuleInfo } from "../../modules" +import type { + ISessionStorage, + SessionLeafNode +} from "../../modules/interfaces/ISessionStorage" import type { FeeQuotesOrDataDto, IPaymaster, @@ -165,6 +169,8 @@ export type BiconomySmartAccountV2ConfigBaseProps = { viemChain?: Chain /** The initial code to be used for the smart account */ initCode?: Hex + /** Used for session key manager module */ + sessionData?: ModuleInfo } export type BiconomySmartAccountV2Config = BiconomySmartAccountV2ConfigBaseProps & @@ -202,6 +208,11 @@ export type BuildUserOpOptions = { useEmptyDeployCallData?: boolean } +export type SessionDataForAccount = { + sessionStorageClient: ISessionStorage + session: SessionLeafNode +} + export type NonceOptions = { /** nonceKey: The key to use for nonce */ nonceKey?: number diff --git a/src/bundler/utils/getAAError.ts b/src/bundler/utils/getAAError.ts index 7a04be10f..2f0425b3c 100644 --- a/src/bundler/utils/getAAError.ts +++ b/src/bundler/utils/getAAError.ts @@ -10,7 +10,8 @@ export type KnownError = { docsUrl?: string } -export const ERRORS_URL = "https://bcnmy.github.io/aa-errors/errors.json" +export const ERRORS_URL = + "https://raw.githubusercontent.com/bcnmy/aa-errors/main/docs/errors.json" export const DOCS_URL = "https://docs.biconomy.io/troubleshooting/commonerrors" const UNKOWN_ERROR_CODE = "520" @@ -19,7 +20,7 @@ const knownErrors: KnownError[] = [] const matchError = (message: string): null | KnownError => knownErrors.find( (knownError: KnownError) => - message.toLowerCase().indexOf(knownError.regex) > -1 + message.toLowerCase().indexOf(knownError.regex.toLowerCase()) > -1 ) ?? null const buildErrorStrings = ( diff --git a/src/modules/SessionKeyManagerModule.ts b/src/modules/SessionKeyManagerModule.ts index c325c4dd5..8d57370b0 100644 --- a/src/modules/SessionKeyManagerModule.ts +++ b/src/modules/SessionKeyManagerModule.ts @@ -19,7 +19,9 @@ import type { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage.js" +import { SessionFileStorage } from "./session-storage/SessionFileStorage.js" import { SessionLocalStorage } from "./session-storage/SessionLocalStorage.js" +import { SessionMemoryStorage } from "./session-storage/SessionMemoryStorage.js" import { DEFAULT_SESSION_KEY_MANAGER_MODULE, SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION @@ -86,6 +88,16 @@ export class SessionKeyManagerModule extends BaseValidationModule { instance.sessionStorageClient = moduleConfig.sessionStorageClient } else { switch (moduleConfig.storageType) { + case StorageType.MEMORY_STORAGE: + instance.sessionStorageClient = new SessionMemoryStorage( + moduleConfig.smartAccountAddress + ) + break + case StorageType.FILE_STORAGE: + instance.sessionStorageClient = new SessionFileStorage( + moduleConfig.smartAccountAddress + ) + break case StorageType.LOCAL_STORAGE: instance.sessionStorageClient = new SessionLocalStorage( moduleConfig.smartAccountAddress diff --git a/src/modules/index.ts b/src/modules/index.ts index bf655585f..b31dc4981 100644 --- a/src/modules/index.ts +++ b/src/modules/index.ts @@ -9,7 +9,11 @@ export * from "./MultichainValidationModule.js" export * from "./SessionKeyManagerModule.js" export * from "./BatchedSessionRouterModule.js" export * from "./session-validation-modules/ERC20SessionValidationModule.js" - +export * from "./sessions/abi.js" +export * from "./sessions/erc20.js" +export * from "./sessions/batch.js" +export * from "./sessions/sessionSmartAccountClient.js" +export * from "./session-storage/index.js" import { BatchedSessionRouterModule, ECDSAOwnershipValidationModule, @@ -27,5 +31,4 @@ export const createECDSAOwnershipValidationModule = export const createSessionKeyManagerModule = SessionKeyManagerModule.create export const createERC20SessionValidationModule = ERC20SessionValidationModule.create - // export * from './PasskeyValidationModule' diff --git a/src/modules/interfaces/ISessionStorage.ts b/src/modules/interfaces/ISessionStorage.ts index 6372b77e3..a2076e5a5 100644 --- a/src/modules/interfaces/ISessionStorage.ts +++ b/src/modules/interfaces/ISessionStorage.ts @@ -1,4 +1,4 @@ -import type { Hex } from "viem" +import type { Chain, Hex } from "viem" import type { SmartAccountSigner } from "../../account" import type { SignerData } from "../utils/Types.js" @@ -22,6 +22,11 @@ export type SessionSearchParam = { } export interface ISessionStorage { + /** + * The address of the smartAccount + */ + smartAccountAddress: Hex + /** * Adds a session leaf node to the session storage * @param leaf SessionLeafNode to be added to the session storage @@ -54,19 +59,25 @@ export interface ISessionStorage { * If no signer object is passed, it'll create a random signer and add it to the session storage * @param signer Optional signer to be added to the session storage */ - addSigner(_signer?: SignerData): Promise<SmartAccountSigner> + addSigner(_signer?: SignerData, chain?: Chain): Promise<SmartAccountSigner> /** * Fetch a signer from the session storage * @param signerPublicKey Public key of the signer to be fetched */ - getSignerByKey(_signerPublicKey: string): Promise<SmartAccountSigner> + getSignerByKey( + _signerPublicKey: string, + chain: Chain + ): Promise<SmartAccountSigner> /** * Fetch a signer from the session storage based on the session search param * @param param SessionSearchParam to be used to fetch the signer */ - getSignerBySession(_param: SessionSearchParam): Promise<SmartAccountSigner> + getSignerBySession( + _param: SessionSearchParam, + chain: Chain + ): Promise<SmartAccountSigner> /** * Fetch all the session leaf nodes from the session storage based on the session search param. diff --git a/src/modules/session-storage/SessionFileStorage.ts b/src/modules/session-storage/SessionFileStorage.ts index 9dafc67ef..63c33cd6b 100644 --- a/src/modules/session-storage/SessionFileStorage.ts +++ b/src/modules/session-storage/SessionFileStorage.ts @@ -1,11 +1,10 @@ -import { http, type Hex, createWalletClient } from "viem" -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { polygonMumbai } from "viem/chains" +import { http, type Chain, type Hex, createWalletClient } from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { getRandomSigner } from "../.." import { Logger, type SmartAccountSigner, - WalletClientSigner, - getChain + WalletClientSigner } from "../../account" import type { ISessionStorage, @@ -16,10 +15,10 @@ import type { import type { SignerData } from "../utils/Types" export class SessionFileStorage implements ISessionStorage { - private smartAccountAddress: string + public smartAccountAddress: Hex - constructor(smartAccountAddress: string) { - this.smartAccountAddress = smartAccountAddress.toLowerCase() + constructor(smartAccountAddress: Hex) { + this.smartAccountAddress = smartAccountAddress.toLowerCase() as Hex } // This method reads data from the file and returns it in the JSON format @@ -189,38 +188,31 @@ export class SessionFileStorage implements ISessionStorage { await this.writeDataToFile(data, "sessions") // Use 'sessions' as the type } - async addSigner(signerData: SignerData): Promise<WalletClientSigner> { + async addSigner( + signerData: SignerData | undefined, + chain: Chain + ): Promise<SmartAccountSigner> { const signers = await this.getSignerStore() - let signer: SignerData - if (!signerData) { - const pkey = generatePrivateKey() - signer = { - pvKey: pkey, - pbKey: privateKeyToAccount(pkey).publicKey - } - } else { - signer = signerData - } + const signer: SignerData = signerData ?? getRandomSigner() const accountSigner = privateKeyToAccount(signer.pvKey) - const viemChain = getChain(signerData?.chainId?.id || 1) const client = createWalletClient({ account: accountSigner, - chain: signerData.chainId, - transport: http(viemChain.rpcUrls.default.http[0]) + chain, + transport: http() }) const walletClientSigner: SmartAccountSigner = new WalletClientSigner( client, "json-rpc" // signerType ) - signers[this.toLowercaseAddress(accountSigner.address)] = { - pvKey: signer.pvKey, - pbKey: signer.pbKey - } + signers[this.toLowercaseAddress(accountSigner.address)] = signer await this.writeDataToFile(signers, "signers") // Use 'signers' as the type return walletClientSigner } - async getSignerByKey(sessionPublicKey: string): Promise<WalletClientSigner> { + async getSignerByKey( + sessionPublicKey: string, + chain: Chain + ): Promise<WalletClientSigner> { const signers = await this.getSignerStore() Logger.log("Got signers", signers) @@ -235,20 +227,20 @@ export class SessionFileStorage implements ISessionStorage { const signer = privateKeyToAccount(signerData.pvKey) const walletClient = createWalletClient({ account: signer, - transport: http(polygonMumbai.rpcUrls.default.http[0]) + chain, + transport: http() }) return new WalletClientSigner(walletClient, "json-rpc") } async getSignerBySession( - param: SessionSearchParam + param: SessionSearchParam, + chain: Chain ): Promise<WalletClientSigner> { const session = await this.getSessionData(param) Logger.log("got session") - const walletClientSinger = await this.getSignerByKey( - session.sessionPublicKey - ) - return walletClientSinger + const signer = await this.getSignerByKey(session.sessionPublicKey, chain) + return signer } async getAllSessionData( diff --git a/src/modules/session-storage/SessionLocalStorage.ts b/src/modules/session-storage/SessionLocalStorage.ts index 8501c2112..a1cbe76fb 100644 --- a/src/modules/session-storage/SessionLocalStorage.ts +++ b/src/modules/session-storage/SessionLocalStorage.ts @@ -1,7 +1,7 @@ -import { http, type Hex, createWalletClient, toHex } from "viem" -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { mainnet } from "viem/chains" +import { http, type Chain, type Hex, createWalletClient } from "viem" +import { privateKeyToAccount } from "viem/accounts" import { type SmartAccountSigner, WalletClientSigner } from "../../account" +import { getRandomSigner } from "../../index.js" import type { ISessionStorage, SessionLeafNode, @@ -10,11 +10,15 @@ import type { } from "../interfaces/ISessionStorage.js" import type { SignerData } from "../utils/Types.js" +export const supportsLocalStorage = + // @ts-ignore: LocalStorage is not available in node + typeof window !== "undefined" && typeof window.localStorage !== "undefined" + export class SessionLocalStorage implements ISessionStorage { - private smartAccountAddress: string + public smartAccountAddress: Hex - constructor(smartAccountAddress: string) { - this.smartAccountAddress = smartAccountAddress.toLowerCase() + constructor(smartAccountAddress: Hex) { + this.smartAccountAddress = smartAccountAddress.toLowerCase() as Hex } private validateSearchParam(param: SessionSearchParam): void { @@ -36,7 +40,7 @@ export class SessionLocalStorage implements ISessionStorage { return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] } } - private getSignerStore() { + private getSignerStore(): Record<string, SignerData> { // @ts-ignore: LocalStorage is not available in node const data = localStorage.getItem(this.getStorageKey("signers")) return data ? JSON.parse(data) : {} @@ -132,44 +136,41 @@ export class SessionLocalStorage implements ISessionStorage { localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) } - async addSigner(signerData: SignerData): Promise<SmartAccountSigner> { + async addSigner( + signerData: SignerData, + chain: Chain + ): Promise<SmartAccountSigner> { const signers = this.getSignerStore() - let signer: SignerData - if (!signerData) { - const pkey = generatePrivateKey() - signer = { - pvKey: pkey, - pbKey: privateKeyToAccount(pkey).publicKey - } - } else { - signer = signerData - } - const accountSigner = privateKeyToAccount(toHex(signer.pvKey)) + const signer: SignerData = signerData ?? getRandomSigner() + const accountSigner = privateKeyToAccount(signer.pvKey) const client = createWalletClient({ account: accountSigner, - chain: signerData.chainId, + chain, transport: http() }) const walletClientSigner = new WalletClientSigner( client, "json-rpc" // signerType ) - signers[this.toLowercaseAddress(accountSigner.address)] = signerData + signers[this.toLowercaseAddress(accountSigner.address)] = signer // @ts-ignore: LocalStorage is not available in node localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)) return walletClientSigner } - async getSignerByKey(sessionPublicKey: string): Promise<SmartAccountSigner> { + async getSignerByKey( + sessionPublicKey: string, + chain: Chain + ): Promise<SmartAccountSigner> { const signers = this.getSignerStore() const signerData = signers[this.toLowercaseAddress(sessionPublicKey)] if (!signerData) { throw new Error("Signer not found.") } - const account = privateKeyToAccount(signerData.privateKey) + const account = privateKeyToAccount(signerData.pvKey) const client = createWalletClient({ account, - chain: mainnet, + chain, transport: http() }) const signer = new WalletClientSigner(client, "viem") @@ -177,10 +178,11 @@ export class SessionLocalStorage implements ISessionStorage { } async getSignerBySession( - param: SessionSearchParam + param: SessionSearchParam, + chain: Chain ): Promise<SmartAccountSigner> { const session = await this.getSessionData(param) - return this.getSignerByKey(session.sessionPublicKey) + return this.getSignerByKey(session.sessionPublicKey, chain) } async getAllSessionData( diff --git a/src/modules/session-storage/SessionMemoryStorage.ts b/src/modules/session-storage/SessionMemoryStorage.ts index b046ee4fb..670f14297 100644 --- a/src/modules/session-storage/SessionMemoryStorage.ts +++ b/src/modules/session-storage/SessionMemoryStorage.ts @@ -1,7 +1,7 @@ -import { http, type Hex, createWalletClient } from "viem" -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { mainnet } from "viem/chains" +import { http, type Chain, type Hex, createWalletClient } from "viem" +import { privateKeyToAccount } from "viem/accounts" import { type SmartAccountSigner, WalletClientSigner } from "../../account" +import { getRandomSigner } from "../../index.js" import type { ISessionStorage, SessionLeafNode, @@ -26,10 +26,10 @@ const memoryStorage: MemoryStore = { } export class SessionMemoryStorage implements ISessionStorage { - private smartAccountAddress: string + public smartAccountAddress: Hex - constructor(smartAccountAddress: string) { - this.smartAccountAddress = smartAccountAddress.toLowerCase() + constructor(smartAccountAddress: Hex) { + this.smartAccountAddress = smartAccountAddress.toLowerCase() as Hex } private validateSearchParam(param: SessionSearchParam): void { @@ -51,7 +51,7 @@ export class SessionMemoryStorage implements ISessionStorage { return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] } } - private getSignerStore() { + public getSignerStore(): Record<string, SignerData> { const data = memoryStorage.getItem(this.getStorageKey("signers")) return data ? JSON.parse(data) : {} } @@ -143,29 +143,23 @@ export class SessionMemoryStorage implements ISessionStorage { memoryStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) } - async addSigner(signerData: SignerData): Promise<SmartAccountSigner> { + async addSigner( + signerData: SignerData, + chain: Chain + ): Promise<SmartAccountSigner> { const signers = this.getSignerStore() - let signer: SignerData - if (!signerData) { - const pkey = generatePrivateKey() - signer = { - pvKey: pkey, - pbKey: privateKeyToAccount(pkey).publicKey - } - } else { - signer = signerData - } + const signer: SignerData = signerData ?? getRandomSigner() const accountSigner = privateKeyToAccount(signer.pvKey) const client = createWalletClient({ account: accountSigner, - chain: signerData.chainId, + chain, transport: http() }) const walletClientSigner = new WalletClientSigner( client, "json-rpc" // signerType ) - signers[this.toLowercaseAddress(accountSigner.address)] = signerData + signers[this.toLowercaseAddress(accountSigner.address)] = signer memoryStorage.setItem( this.getStorageKey("signers"), JSON.stringify(signers) @@ -173,16 +167,19 @@ export class SessionMemoryStorage implements ISessionStorage { return walletClientSigner } - async getSignerByKey(sessionPublicKey: string): Promise<SmartAccountSigner> { + async getSignerByKey( + sessionPublicKey: string, + chain: Chain + ): Promise<SmartAccountSigner> { const signers = this.getSignerStore() const signerData = signers[this.toLowercaseAddress(sessionPublicKey)] if (!signerData) { throw new Error("Signer not found.") } - const account = privateKeyToAccount(signerData.privateKey) + const account = privateKeyToAccount(signerData.pvKey) const client = createWalletClient({ account, - chain: mainnet, + chain, transport: http() }) const signer = new WalletClientSigner(client, "viem") @@ -190,10 +187,11 @@ export class SessionMemoryStorage implements ISessionStorage { } async getSignerBySession( - param: SessionSearchParam + param: SessionSearchParam, + chain: Chain ): Promise<SmartAccountSigner> { const session = await this.getSessionData(param) - return this.getSignerByKey(session.sessionPublicKey) + return this.getSignerByKey(session.sessionPublicKey, chain) } async getAllSessionData( diff --git a/src/modules/session-storage/index.ts b/src/modules/session-storage/index.ts new file mode 100644 index 000000000..05f1b359d --- /dev/null +++ b/src/modules/session-storage/index.ts @@ -0,0 +1,4 @@ +export { SessionFileStorage } from "./SessionFileStorage.js" +export { SessionLocalStorage } from "./SessionLocalStorage.js" +export { SessionMemoryStorage } from "./SessionMemoryStorage.js" +export * from "./utils.js" diff --git a/src/modules/session-storage/utils.ts b/src/modules/session-storage/utils.ts new file mode 100644 index 000000000..196821f72 --- /dev/null +++ b/src/modules/session-storage/utils.ts @@ -0,0 +1,39 @@ +import type { Chain, Hex } from "viem" +import { SessionFileStorage, SessionLocalStorage } from "../.." +import type { BiconomySmartAccountV2, SmartAccountSigner } from "../../account" +import type { ISessionStorage } from "../interfaces/ISessionStorage" +import { supportsLocalStorage } from "./SessionLocalStorage" + +export type SessionStoragePayload = { + sessionKeyAddress: Hex + signer: SmartAccountSigner + sessionStorageClient: ISessionStorage +} + +/** + * createSessionKeyEOA + * + * This function is used to store a new session key in the session storage. + * If the session storage client is not provided as the third argument, it will create a new session storage client based on the environment. + * When localStorage is supported, it will return SessionLocalStorage, otherwise it will assume you are in a backend and use SessionFileStorage. + * + * @param smartAccount: BiconomySmartAccountV2 + * @param chain: Chain + * @param _sessionStorageClient: ISessionStorage + * @returns + */ +export const createSessionKeyEOA = async ( + smartAccount: BiconomySmartAccountV2, + chain: Chain, + _sessionStorageClient?: ISessionStorage +): Promise<SessionStoragePayload> => { + const userAccountAddress = await smartAccount.getAddress() + const sessionStorageClient = + _sessionStorageClient ?? + new (supportsLocalStorage ? SessionLocalStorage : SessionFileStorage)( + userAccountAddress + ) + const newSigner = await sessionStorageClient.addSigner(undefined, chain) + const sessionKeyAddress = await newSigner.getAddress() + return { sessionKeyAddress, signer: newSigner, sessionStorageClient } +} diff --git a/src/modules/sessions/abi.ts b/src/modules/sessions/abi.ts new file mode 100644 index 000000000..d65beb785 --- /dev/null +++ b/src/modules/sessions/abi.ts @@ -0,0 +1,322 @@ +import { + type AbiFunction, + type ByteArray, + type Hex, + concat, + isAddress, + pad, + slice, + toFunctionSelector, + toHex +} from "viem" +import type { + CreateSessionDataParams, + Permission, + UserOpResponse +} from "../../" +import { + type BiconomySmartAccountV2, + type BuildUserOpOptions, + ERROR_MESSAGES, + type Transaction +} from "../../account" +import { createSessionKeyManagerModule } from "../index" +import type { ISessionStorage } from "../interfaces/ISessionStorage" +import { + DEFAULT_ABI_SVM_MODULE, + DEFAULT_SESSION_KEY_MANAGER_MODULE +} from "../utils/Constants" +import type { DeprecatedPermission, Rule } from "../utils/Helper" + +export type SessionConfig = { + usersAccountAddress: Hex + smartAccount: BiconomySmartAccountV2 +} + +export type Session = { + /** The storage client specific to the smartAccountAddress which stores the session keys */ + sessionStorageClient: ISessionStorage + /** The relevant sessionID for the chosen session */ + sessionID: string +} + +export type SessionEpoch = { + /** The time at which the session is no longer valid */ + validUntil?: number + /** The time at which the session becomes valid */ + validAfter?: number +} + +export type Policy = { + /** The address of the contract to be included in the policy */ + contractAddress: Hex + /** The address of the sessionKey upon which the policy is to be imparted */ + sessionKeyAddress: Hex + /** The specific function selector from the contract to be included in the policy */ + functionSelector: string | AbiFunction + /** The rules to be included in the policy */ + rules: Rule[] + /** The time interval within which the session is valid. If left unset the session will remain invalid indefinitely */ + interval?: SessionEpoch + /** The maximum value that can be transferred in a single transaction */ + valueLimit: bigint +} + +export type SessionGrantedPayload = UserOpResponse & { session: Session } + +/** + * + * createSession + * + * Creates a session for a user's smart account. + * This grants a dapp permission to execute a specific function on a specific contract on behalf of a user. + * Permissions can be specified by the dapp in the form of rules{@link Rule}, and then submitted to the user for approval via signing. + * The session keys granted with the imparted policy are stored in a StorageClient {@link ISessionStorage}. They can later be retrieved and used to validate userops. + * + * @param smartAccount - The user's {@link BiconomySmartAccountV2} smartAccount instance. + * @param sessionKeyAddress - The address of the sessionKey upon which the policy is to be imparted. + * @param policy - An array of session configurations {@link Policy}. + * @param sessionStorageClient - The storage client to store the session keys. {@link ISessionStorage} + * @param buildUseropDto - Optional. {@link BuildUserOpOptions} + * @returns Promise<{@link SessionGrantedPayload}> - An object containing the status of the transaction and the sessionID. + * + * @example + * + * ```typescript + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonAmoy } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonAmoy, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, paymasterUrl }); // Retrieve bundler/paymaster url from dashboard + * const smartAccountAddress = await smartAccount.getAccountAddress(); + * const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + * const sessionStorage = new SessionFileStorage(smartAccountAddress) + * const sessionKeyAddress = (await sessionStorage.addSigner(undefined, polygonAmoy)).getAddress(); + * + * const { wait, sessionID } = await createSession( + * smartAccount, + * [ + * { + * sessionKeyAddress, + * contractAddress: nftAddress, + * functionSelector: "safeMint(address)", + * rules: [ + * { + * offset: 0, + * condition: 0, + * referenceValue: smartAccountAddress + * } + * ], + * interval: { + * validUntil: 0, + * validAfter: 0 + * }, + * valueLimit: 0n + * } + * ], + * sessionKeyAddress, + * sessionStorage, + * { + * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + * } + * ) + * + * const { + * receipt: { transactionHash }, + * success + * } = await wait(); + * + * console.log({ sessionID, success }); // Use the sessionID later to retrieve the sessionKey from the storage client + * ``` + */ +export const createSession = async ( + smartAccount: BiconomySmartAccountV2, + policy: Policy[], + sessionKeyAddress: Hex, + sessionStorageClient: ISessionStorage, + buildUseropDto?: BuildUserOpOptions +): Promise<SessionGrantedPayload> => { + const userAccountAddress = await smartAccount.getAddress() + const sessionsModule = await createSessionKeyManagerModule({ + smartAccountAddress: userAccountAddress, + sessionStorageClient + }) + + const { data: policyData } = await sessionsModule.createSessionData( + policy.map(createABISessionDatum) + ) + + const permitTx = { + to: DEFAULT_SESSION_KEY_MANAGER_MODULE, + data: policyData + } + + const txs: Transaction[] = [] + + const isDeployed = await smartAccount.isAccountDeployed() + if (!isDeployed) throw new Error(ERROR_MESSAGES.ACCOUNT_NOT_DEPLOYED) + + const enabled = await smartAccount.isModuleEnabled( + DEFAULT_SESSION_KEY_MANAGER_MODULE + ) + + if (!enabled) { + txs.push( + await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE) + ) + } + txs.push(permitTx) + + const userOpResponse = await smartAccount.sendTransaction(txs, buildUseropDto) + + const sessionID = + ( + await sessionStorageClient.getSessionData({ + sessionPublicKey: sessionKeyAddress, + sessionValidationModule: DEFAULT_ABI_SVM_MODULE + }) + ).sessionID ?? "" + + return { + session: { + sessionStorageClient, + sessionID + }, + ...userOpResponse + } +} + +export type CreateSessionDatumParams = { + interval?: SessionEpoch + sessionKeyAddress: Hex + contractAddress: Hex + functionSelector: string | AbiFunction + rules: Rule[] + valueLimit: bigint +} + +/** + * + * createABISessionDatum + * + * Used to create a session datum for the ABI Session Validation Module. + * It can also be used to create a session datum for batchSession mode. + * + * @param createSessionDataParams - {@link CreateSessionDatumParams} + * @returns {@link CreateSessionDataParams} + */ +export const createABISessionDatum = ({ + /** The time interval within which the session is valid. If left unset the session will remain invalid indefinitely {@link SessionEpoch} */ + interval, + /** The sessionKeyAddress upon which the policy is to be imparted. Used as a reference to the stored session keys */ + sessionKeyAddress, + /** The address of the contract to be included in the policy */ + contractAddress, + /** The specific function selector from the contract to be included in the policy */ + functionSelector, + /** The rules to be included in the policy */ + rules, + /** The maximum value that can be transferred in a single transaction */ + valueLimit +}: CreateSessionDatumParams): CreateSessionDataParams => { + const { validUntil = 0, validAfter = 0 } = interval ?? {} + return { + validUntil, + validAfter, + sessionValidationModule: DEFAULT_ABI_SVM_MODULE, + sessionPublicKey: sessionKeyAddress, + sessionKeyData: getSessionDatum(sessionKeyAddress, { + destContract: contractAddress, + functionSelector: slice(toFunctionSelector(functionSelector), 0, 4), + valueLimit, + rules + }) + } +} + +/** + * @deprecated + */ +export async function getABISVMSessionKeyData( + sessionKey: `0x${string}` | Uint8Array, + permission: DeprecatedPermission +): Promise<`0x${string}` | Uint8Array> { + let sessionKeyData = concat([ + sessionKey, + permission.destContract, + permission.functionSelector, + pad(toHex(permission.valueLimit), { size: 16 }), + pad(toHex(permission.rules.length), { size: 2 }) // this can't be more 2**11 (see below), so uint16 (2 bytes) is enough + ]) as `0x${string}` + + for (let i = 0; i < permission.rules.length; i++) { + sessionKeyData = concat([ + sessionKeyData, + pad(toHex(permission.rules[i].offset), { size: 2 }), // offset is uint16, so there can't be more than 2**16/32 args = 2**11 + pad(toHex(permission.rules[i].condition), { size: 1 }), // uint8 + permission.rules[i].referenceValue + ]) + } + return sessionKeyData +} + +export function getSessionDatum( + sessionKeyAddress: Hex, + permission: Permission +): Hex { + let sessionKeyData = concat([ + sessionKeyAddress, + permission.destContract, + permission.functionSelector, + pad(toHex(permission.valueLimit), { size: 16 }), + pad(toHex(permission.rules.length), { size: 2 }) // this can't be more 2**11 (see below), so uint16 (2 bytes) is enough + ]) as Hex + + for (let i = 0; i < permission.rules.length; i++) { + sessionKeyData = concat([ + sessionKeyData, + pad(toHex(permission.rules[i].offset), { size: 2 }), // offset is uint16, so there can't be more than 2**16/32 args = 2**11 + pad(toHex(permission.rules[i].condition), { size: 1 }), // uint8 + parseReferenceValue(permission.rules[i].referenceValue) + ]) as Hex + } + return sessionKeyData +} + +type HardcodedReference = { + raw: Hex +} +type BaseReferenceValue = string | number | bigint | boolean | ByteArray +type AnyReferenceValue = BaseReferenceValue | HardcodedReference + +/** + * + * parseReferenceValue + * + * Parses the reference value to a hex string. + * The reference value can be hardcoded using the {@link HardcodedReference} type. + * Otherwise, it can be a string, number, bigint, boolean, or ByteArray. + * + * @param referenceValue {@link AnyReferenceValue} + * @returns Hex + */ +export function parseReferenceValue(referenceValue: AnyReferenceValue): Hex { + try { + if ((referenceValue as HardcodedReference)?.raw) { + return (referenceValue as HardcodedReference)?.raw + } + if (isAddress(referenceValue as string)) { + return pad(referenceValue as Hex, { size: 32 }) + } + return toHex(referenceValue as BaseReferenceValue) + } catch (e) { + return toHex(referenceValue as BaseReferenceValue) + } +} diff --git a/src/modules/sessions/batch.ts b/src/modules/sessions/batch.ts new file mode 100644 index 000000000..feef5f063 --- /dev/null +++ b/src/modules/sessions/batch.ts @@ -0,0 +1,232 @@ +import type { Chain, Hex } from "viem" +import { + type CreateSessionDataParams, + DEFAULT_ABI_SVM_MODULE, + DEFAULT_BATCHED_SESSION_ROUTER_MODULE, + DEFAULT_SESSION_KEY_MANAGER_MODULE, + MODULE_ADDRESSES, + type Session, + type SessionGrantedPayload, + type SessionParams, + createBatchedSessionRouterModule, + createSessionKeyManagerModule +} from ".." +import { + type BiconomySmartAccountV2, + type BuildUserOpOptions, + ERROR_MESSAGES, + type Transaction +} from "../../account" +import type { ISessionStorage } from "../interfaces/ISessionStorage" + +export type CreateBatchSessionConfig = { + /** The storage client to be used for storing the session data */ + sessionStorageClient: ISessionStorage + /** An array of session configurations */ + leaves: CreateSessionDataParams[] +} + +/** + * + * createBatchSession + * + * Creates a session manager that handles multiple sessions at once for a given user's smart account. + * Useful for handling multiple granted sessions at once. + * + * @param smartAccount - The user's {@link BiconomySmartAccountV2} smartAccount instance. + * @param sessionKeyAddress - The address of the sessionKey upon which the policy is to be imparted. + * @param batchSessionConfig - An array of session configurations {@link CreateBatchSessionConfig}. + * @param buildUseropDto - Optional. {@link BuildUserOpOptions} + * @returns Promise<{@link SessionGrantedPayload}> - An object containing the status of the transaction and the sessionID. + * + * @example + * + * ```typescript + * import { createClient } from "viem" + * import { createSmartAccountClient } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonAmoy } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonAmoy, + * transport: http(), + * }); + * + * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, paymasterUrl }); // Retrieve bundler/paymaster url from dashboard + * const smartAccountAddress = await smartAccount.getAccountAddress(); + * const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + * const sessionStorage = new SessionFileStorage(smartAccountAddress); + * const sessionKeyAddress = (await sessionStorage.addSigner(undefined, polygonAmoy)).getAddress(); + * + * const leaves: CreateSessionDataParams[] = [ + * createERC20SessionDatum({ + * interval: { + * validUntil: 0, + * validAfter: 0 + * }, + * sessionKeyAddress, + * sessionKeyData: encodeAbiParameters( + * [ + * { type: "address" }, + * { type: "address" }, + * { type: "address" }, + * { type: "uint256" } + * ], + * [sessionKeyAddress, token, recipient, amount] + * ) + * }), + * createABISessionDatum({ + * interval: { + * validUntil: 0, + * validAfter: 0 + * }, + * sessionKeyAddress, + * contractAddress: nftAddress, + * functionSelector: "safeMint(address)", + * rules: [ + * { + * offset: 0, + * condition: 0, + * referenceValue: smartAccountAddress + * } + * ], + * valueLimit: 0n + * }) + * ] + * + * const { wait, sessionID } = await createBatchSession( + * smartAccount, + * sessionKeyAddress, + * sessionStorageClient: sessionStorage, + * leaves, + * { + * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + * } + * ) + * + * const { + * receipt: { transactionHash }, + * success + * } = await wait(); + * + * console.log({ sessionID, success }); // Use the sessionID later to retrieve the sessionKey from the storage client + * + * ``` + */ + +export const createBatchSession = async ( + smartAccount: BiconomySmartAccountV2, + sessionKeyAddress: Hex, + /** The storage client to be used for storing the session data */ + sessionStorageClient: ISessionStorage, + /** An array of session configurations */ + leaves: CreateSessionDataParams[], + buildUseropDto?: BuildUserOpOptions +): Promise<SessionGrantedPayload> => { + const userAccountAddress = await smartAccount.getAddress() + + const sessionsModule = await createSessionKeyManagerModule({ + smartAccountAddress: userAccountAddress, + sessionStorageClient + }) + + // Create batched session module + const batchedSessionModule = await createBatchedSessionRouterModule({ + smartAccountAddress: userAccountAddress, + sessionKeyManagerModule: sessionsModule + }) + + const { data: policyData } = + await batchedSessionModule.createSessionData(leaves) + + const permitTx = { + to: DEFAULT_SESSION_KEY_MANAGER_MODULE, + data: policyData + } + + const isDeployed = await smartAccount.isAccountDeployed() + if (!isDeployed) throw new Error(ERROR_MESSAGES.ACCOUNT_NOT_DEPLOYED) + + const txs: Transaction[] = [] + const [isSessionModuleEnabled, isBatchedSessionModuleEnabled] = + await Promise.all([ + smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE), + smartAccount.isModuleEnabled(DEFAULT_BATCHED_SESSION_ROUTER_MODULE) + ]) + + if (!isSessionModuleEnabled) { + txs.push( + await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE) + ) + } + if (!isBatchedSessionModuleEnabled) { + txs.push( + await smartAccount.getEnableModuleData( + DEFAULT_BATCHED_SESSION_ROUTER_MODULE + ) + ) + } + txs.push(permitTx) + + const userOpResponse = await smartAccount.sendTransaction(txs, buildUseropDto) + + const sessionID = + ( + await sessionStorageClient.getSessionData({ + sessionPublicKey: sessionKeyAddress, + sessionValidationModule: DEFAULT_ABI_SVM_MODULE + }) + ).sessionID ?? "" + + return { + session: { + sessionStorageClient, + sessionID + }, + ...userOpResponse + } +} + +const types = ["ERC20", "ABI"] as const +export type BatchSessionParamsPayload = { + params: { batchSessionParams: SessionParams[] } +} +export type SessionValidationType = (typeof types)[number] +/** + * getBatchSessionTxParams + * + * Retrieves the transaction parameters for a batched session. + * + * @param sessionTypes - An array of session types. + * @param transactions - An array of {@link Transaction}s. + * @param session - {@link Session}. + * @param chain - The chain. + * @returns Promise<{@link BatchSessionParamsPayload}> - session parameters. + * + */ +export const getBatchSessionTxParams = async ( + sessionValidationTypes: SessionValidationType[], + transactions: Transaction[], + { sessionID, sessionStorageClient }: Session, + chain: Chain +): Promise<BatchSessionParamsPayload> => { + if (sessionValidationTypes.length !== transactions.length) { + throw new Error(ERROR_MESSAGES.INVALID_SESSION_TYPES) + } + const sessionSigner = await sessionStorageClient.getSignerBySession( + { + sessionID + }, + chain + ) + + return { + params: { + batchSessionParams: sessionValidationTypes.map((sessionType) => ({ + sessionSigner, + sessionValidationModule: MODULE_ADDRESSES[sessionType] + })) + } + } +} diff --git a/src/modules/sessions/erc20.ts b/src/modules/sessions/erc20.ts new file mode 100644 index 000000000..eac4ff675 --- /dev/null +++ b/src/modules/sessions/erc20.ts @@ -0,0 +1,32 @@ +import type { EncodeAbiParametersReturnType, Hex } from "viem" +import type { SessionEpoch } from ".." +import { DEFAULT_ERC20_MODULE } from "../utils/Constants" +import type { CreateSessionDataParams } from "../utils/Types" + +export type CreateERC20SessionConfig = { + interval: SessionEpoch + sessionKeyAddress: Hex + sessionKeyData: EncodeAbiParametersReturnType +} +/** + * + * @param erc20SessionConfig {@link CreateERC20SessionConfig} + * @returns {@link CreateSessionDataParams} + */ +export const createERC20SessionDatum = ({ + /** The time interval within which the session is valid. If left unset the session will remain invalid indefinitely {@link SessionEpoch} */ + interval, + /** The sessionKeyAddress upon which the policy is to be imparted. Used as a reference to the stored session keys */ + sessionKeyAddress, + /** The sessionKeyData to be included in the policy {@link EncodeAbiParametersReturnType}*/ + sessionKeyData +}: CreateERC20SessionConfig): CreateSessionDataParams => { + const { validUntil = 0, validAfter = 0 } = interval ?? {} + return { + validUntil, + validAfter, + sessionValidationModule: DEFAULT_ERC20_MODULE, + sessionPublicKey: sessionKeyAddress, + sessionKeyData + } +} diff --git a/src/modules/sessions/sessionSmartAccountClient.ts b/src/modules/sessions/sessionSmartAccountClient.ts new file mode 100644 index 000000000..aa3155515 --- /dev/null +++ b/src/modules/sessions/sessionSmartAccountClient.ts @@ -0,0 +1,119 @@ +import { http, type Hex, createWalletClient } from "viem" +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" +import { + createBatchedSessionRouterModule, + createSessionKeyManagerModule +} from ".." +import { + type BiconomySmartAccountV2, + type BiconomySmartAccountV2Config, + createSmartAccountClient, + getChain +} from "../../account" +import type { ModuleInfo } from "../utils/Types" +import type { Session } from "./abi" + +export type ImpersonatedSmartAccountConfig = Omit< + BiconomySmartAccountV2Config, + "signer" +> & { + accountAddress: Hex + chainId: number + bundlerUrl: string +} +/** + * + * createSessionSmartAccountClient + * + * Creates a new instance of BiconomySmartAccountV2 class. This is used to impersonate a users smart account by a dapp, for use + * with a valid session that has previously been granted by the user. A dummy signer is passed into the smart account instance, which cannot be used. + * The sessionSigner is used instead for signing transactions, which is fetched from the session storage using the sessionID. {@link ISessionStorage} + * + * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance {@link ImpersonatedSmartAccountConfig}. + * @returns A promise that resolves to a new instance of {@link BiconomySmartAccountV2}. + * @throws An error if something is wrong with the smart account instance creation. + * + * @example + * import { createClient } from "viem" + * import { createSmartAccountClient, BiconomySmartAccountV2 } from "@biconomy/account" + * import { createWalletClient, http } from "viem"; + * import { polygonAmoy } from "viem/chains"; + * + * const signer = createWalletClient({ + * account, + * chain: polygonAmoy, + * transport: http(), + * }); + * + * + * // The following fields are required to create a session smart account client + * const smartAccountAddress = '0x...'; + * const sessionStorage = new SessionFileStorage(smartAccountAddress); + * const sessionKeyAddress = '0x...'; + * const sessionID = '0x...'; + * + * const smartAccountWithSession = await createSessionSmartAccountClient( + * { + * accountAddress: smartAccountAddress, // Set the account address on behalf of the user + * bundlerUrl, + * paymasterUrl, + * chainId + * }, + * { + * sessionStorageClient: storeForSingleSession, + * sessionID + * } + * ) + * + * // The smartAccountWithSession instance can now be used to interact with the blockchain on behalf of the user in the same manner as a regular smart account instance. + * // smartAccountWithSession.sendTransaction(...) etc. + * + */ +export const createSessionSmartAccountClient = async ( + biconomySmartAccountConfig: ImpersonatedSmartAccountConfig, + { sessionStorageClient, sessionID }: Session, + multiMode = false +): Promise<BiconomySmartAccountV2> => { + const account = privateKeyToAccount(generatePrivateKey()) + + const chain = + biconomySmartAccountConfig.viemChain ?? + getChain(biconomySmartAccountConfig.chainId) + + const incompatibleSigner = createWalletClient({ + account, + chain, + transport: http() + }) + + const sessionSigner = await sessionStorageClient.getSignerBySession( + { + sessionID + }, + chain + ) + + const sessionData: ModuleInfo | undefined = multiMode + ? undefined + : { + sessionID, + sessionSigner + } + + const sessionModule = await createSessionKeyManagerModule({ + smartAccountAddress: biconomySmartAccountConfig.accountAddress, + sessionStorageClient + }) + + const batchedSessionModule = await createBatchedSessionRouterModule({ + smartAccountAddress: biconomySmartAccountConfig.accountAddress, + sessionKeyManagerModule: sessionModule + }) + + return await createSmartAccountClient({ + ...biconomySmartAccountConfig, + signer: incompatibleSigner, // This is a dummy signer, it will remain unused + activeValidationModule: multiMode ? batchedSessionModule : sessionModule, + sessionData // contains the sessionSigner that will be used for txs + }) +} diff --git a/src/modules/utils/Constants.ts b/src/modules/utils/Constants.ts index 4c8c34192..93d11684b 100644 --- a/src/modules/utils/Constants.ts +++ b/src/modules/utils/Constants.ts @@ -1,16 +1,17 @@ +import type { Hex } from "viem" +import type { SessionValidationType } from "../../index.js" import type { ModuleVersion } from "./Types.js" export const DEFAULT_MODULE_VERSION: ModuleVersion = "V1_0_0" -// Note: we could append these defaults with ADDRESS suffix -export const DEFAULT_ECDSA_OWNERSHIP_MODULE = +export const DEFAULT_ECDSA_OWNERSHIP_MODULE: Hex = "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" export const ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION = { V1_0_0: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" } -export const DEFAULT_SESSION_KEY_MANAGER_MODULE = +export const DEFAULT_SESSION_KEY_MANAGER_MODULE: Hex = "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489" export const SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION = { @@ -18,18 +19,27 @@ export const SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION = { V1_0_1: "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489" } -export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE = +export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE: Hex = "0x00000D09967410f8C76752A104c9848b57ebba55" export const BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION = { V1_0_0: "0x00000D09967410f8C76752A104c9848b57ebba55" } -export const DEFAULT_ERC20_MODULE = "0x000000D50C68705bd6897B2d17c7de32FB519fDA" +export const DEFAULT_ERC20_MODULE: Hex = + "0x000000D50C68705bd6897B2d17c7de32FB519fDA" -export const DEFAULT_MULTICHAIN_MODULE = +export const DEFAULT_MULTICHAIN_MODULE: Hex = "0x000000824dc138db84FD9109fc154bdad332Aa8E" export const MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION = { V1_0_0: "0x000000824dc138db84FD9109fc154bdad332Aa8E" } + +export const DEFAULT_ABI_SVM_MODULE: Hex = + "0x000006bC2eCdAe38113929293d241Cf252D91861" + +export const MODULE_ADDRESSES: Record<SessionValidationType, Hex> = { + ERC20: DEFAULT_ERC20_MODULE, + ABI: DEFAULT_ABI_SVM_MODULE +} diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index aa125e759..4f79a1e2b 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -1,24 +1,59 @@ import { + type ByteArray, + type Chain, type Hex, - concat, encodeAbiParameters, keccak256, - pad, - parseAbiParameters, - toHex + parseAbiParameters } from "viem" -import type { UserOperationStruct } from "../../account" +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" +import type { ChainInfo, SignerData } from "../.." +import { type UserOperationStruct, getChain } from "../../account" export interface Rule { + /** The index of the param from the selected contract function upon which the condition will be applied */ offset: number + /** + * Conditions: + * + * 0 - Equal + * 1 - Less than or equal + * 2 - Less than + * 3 - Greater than or equal + * 4 - Greater than + * 5 - Not equal + */ condition: number - referenceValue: `0x${string}` + /** The value to compare against */ + referenceValue: string | number | bigint | boolean | ByteArray +} + +/** + * @deprecated + */ +export interface DeprecatedRule { + offset: number + condition: number + referenceValue: Hex +} +/** + * @deprecated + */ +export interface DeprecatedPermission { + destContract: `0x${string}` + functionSelector: `0x${string}` + valueLimit: bigint + rules: DeprecatedRule[] } export interface Permission { + /** The address of the contract to which the permission applies */ destContract: `0x${string}` + /** The function selector of the contract to which the permission applies */ functionSelector: `0x${string}` + /** The maximum value that can be transferred in a single transaction */ valueLimit: bigint + /** The rules that define the conditions under which the permission is granted */ rules: Rule[] } @@ -81,25 +116,16 @@ export const getUserOpHash = ( return keccak256(enc) } -export async function getABISVMSessionKeyData( - sessionKey: `0x${string}` | Uint8Array, - permission: Permission -): Promise<`0x${string}` | Uint8Array> { - let sessionKeyData = concat([ - sessionKey, - permission.destContract, - permission.functionSelector, - pad(toHex(permission.valueLimit), { size: 16 }), - pad(toHex(permission.rules.length), { size: 2 }) // this can't be more 2**11 (see below), so uint16 (2 bytes) is enough - ]) as `0x${string}` - - for (let i = 0; i < permission.rules.length; i++) { - sessionKeyData = concat([ - sessionKeyData, - pad(toHex(permission.rules[i].offset), { size: 2 }), // offset is uint16, so there can't be more than 2**16/32 args = 2**11 - pad(toHex(permission.rules[i].condition), { size: 1 }), // uint8 - permission.rules[i].referenceValue - ]) +export const getRandomSigner = (): SignerData => { + const pkey = generatePrivateKey() + const account = privateKeyToAccount(pkey) + return { + pvKey: pkey, + pbKey: account.address } - return sessionKeyData +} + +export const parseChain = (chainInfo: ChainInfo): Chain => { + if (typeof chainInfo === "number") return getChain(chainInfo) + return chainInfo } diff --git a/src/modules/utils/Types.ts b/src/modules/utils/Types.ts index 26c0badcf..57879056e 100644 --- a/src/modules/utils/Types.ts +++ b/src/modules/utils/Types.ts @@ -41,7 +41,7 @@ export interface SessionKeyManagerModuleConfig /** Version of the module */ version?: ModuleVersion /** SmartAccount address */ - smartAccountAddress: string + smartAccountAddress: Hex storageType?: StorageType sessionStorageClient?: ISessionStorage } @@ -57,13 +57,15 @@ export interface BatchedSessionRouterModuleConfig /** Session Key Manager module address */ sessionManagerModuleAddress?: Hex /** Address of the associated smart account */ - smartAccountAddress: string + smartAccountAddress: Hex /** Storage type, e.g. local storage */ storageType?: StorageType } export enum StorageType { - LOCAL_STORAGE = 0 + LOCAL_STORAGE = 0, + MEMORY_STORAGE = 1, + FILE_STORAGE = 2 } export type SessionDataTuple = [ @@ -96,6 +98,7 @@ export type ModuleInfo = { sessionValidationModule?: Hex /** Additional info if needed to be appended in signature */ additionalSessionData?: string + /** Batch session params */ batchSessionParams?: SessionParams[] } @@ -105,14 +108,14 @@ export interface SendUserOpParams extends ModuleInfo { } export type SignerData = { - /** Public key */ - pbKey: string + /** This is not the public as provided by viem, key but address for the given pvKey */ + pbKey: Hex /** Private key */ - pvKey: `0x${string}` - /** Network Id */ - chainId?: Chain + pvKey: Hex } +export type ChainInfo = number | Chain + export type CreateSessionDataResponse = { data: string sessionIDInfo: Array<string> @@ -123,8 +126,11 @@ export interface CreateSessionDataParams { validUntil: number /** window start for the session key */ validAfter: number + /** Address of the session validation module */ sessionValidationModule: Hex + /** Public key of the session */ sessionPublicKey: Hex + /** The hex of the rules {@link Rule} that make up the policy */ sessionKeyData: Hex /** we generate uuid based sessionId. but if you prefer to track it on your side and attach custom session identifier this can be passed */ preferredSessionId?: string diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index ca24cc709..dd53d1cfc 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -8,8 +8,10 @@ import { encodeAbiParameters, encodeFunctionData, hashMessage, + pad, parseAbi, - parseAbiParameters + parseAbiParameters, + toHex } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { bsc } from "viem/chains" diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 72e28d643..8467a5e27 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -535,7 +535,7 @@ describe("Account:Write", () => { ) const receipt = await response.wait() expect(receipt.success).toBe("true") - }, 35000) + }, 50000) test("should revert transfer ownership with signer that is not the owner", async () => { _smartAccount = await createSmartAccountClient({ @@ -563,7 +563,7 @@ describe("Account:Write", () => { } ) ).rejects.toThrowError() - }, 35000) + }, 50000) test("send an user op with the new owner", async () => { _smartAccount = await createSmartAccountClient({ @@ -589,7 +589,7 @@ describe("Account:Write", () => { }) const response = await wait() expect(response.success).toBe("true") - }, 35000) + }, 50000) test("should revert if sending an user op with the old owner", async () => { _smartAccount = await createSmartAccountClient({ @@ -613,7 +613,7 @@ describe("Account:Write", () => { ).rejects.toThrowError( await getAAError("Error coming from Bundler: AA24 signature error") ) - }, 35000) + }, 50000) test("should transfer ownership of smart account back to EOA 1", async () => { _smartAccount = await createSmartAccountClient({ @@ -642,6 +642,6 @@ describe("Account:Write", () => { ) const receipt = await response.wait() expect(receipt.success).toBe("true") - }, 45000) + }, 50000) }) }) diff --git a/tests/bundler/read.test.ts b/tests/bundler/read.test.ts index 9a0604976..73d2f415c 100644 --- a/tests/bundler/read.test.ts +++ b/tests/bundler/read.test.ts @@ -58,7 +58,7 @@ describe("Bundler:Read", () => { }) test.concurrent( - "Should throw and give advice", + "should throw and give advice", async () => { const randomPrivateKey = generatePrivateKey() const unfundedAccount = privateKeyToAccount(randomPrivateKey) diff --git a/tests/modules/read.test.ts b/tests/modules/read.test.ts index ad1c21649..e54381ce8 100644 --- a/tests/modules/read.test.ts +++ b/tests/modules/read.test.ts @@ -1,7 +1,14 @@ import { defaultAbiCoder } from "@ethersproject/abi" import { JsonRpcProvider } from "@ethersproject/providers" import { Wallet } from "@ethersproject/wallet" -import { http, type Hex, createWalletClient, encodeAbiParameters } from "viem" +import { + http, + type Hex, + createWalletClient, + encodeAbiParameters, + slice, + toFunctionSelector +} from "viem" import { privateKeyToAccount } from "viem/accounts" import { beforeAll, describe, expect, test } from "vitest" import { @@ -9,8 +16,10 @@ import { createSmartAccountClient } from "../../src/account" import { + DEFAULT_ERC20_MODULE, createECDSAOwnershipValidationModule, - createMultiChainValidationModule + createMultiChainValidationModule, + getSessionDatum } from "../../src/modules" import { getConfig } from "../utils" @@ -59,10 +68,60 @@ describe("Modules:Read", () => { ) }) + test.concurrent("should check session key helpers", async () => { + const EXPECTED_SESSION_KEY_DATA = + "0x000000000000000000000000fa66e705cf2582cf56528386bb9dfca119767262000000000000000000000000747a4168db14f57871fa8cda8b5455d8c2a8e90a0000000000000000000000003079b249dfde4692d7844aa261f8cf7d927a0da50000000000000000000000000000000000000000000000000000000000989680" + const EXPECTED_ABI_SESSION_DATA = + "0xFA66E705cf2582cF56528386Bb9dFCA119767262747A4168DB14F57871fa8cda8B5455D8C2a8e90aa9059cbb0000000000000000000000000098968000020000000000000000000000000000003079B249DFDE4692D7844aA261f8cf7D927A0DA5000101989680" + const sessionKeyEOA = "0xFA66E705cf2582cF56528386Bb9dFCA119767262" + const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + const recipient = "0x3079B249DFDE4692D7844aA261f8cf7D927A0DA5" + const amount = 10000000n + + const sessionKeyData = encodeAbiParameters( + [ + { type: "address" }, + { type: "address" }, + { type: "address" }, + { type: "uint256" } + ], + [ + sessionKeyEOA, + token, // erc20 token address + recipient, // receiver address + amount + ] + ) + + const abiSessionData = await getSessionDatum(sessionKeyEOA, { + destContract: token, + functionSelector: slice( + toFunctionSelector("transfer(address,uint256)"), + 0, + 4 + ), + valueLimit: amount, + rules: [ + { + offset: 0, + condition: 0, + referenceValue: recipient + }, + { + offset: 1, + condition: 1, + referenceValue: amount + } + ] + }) + + expect(EXPECTED_ABI_SESSION_DATA).toEqual(abiSessionData) + expect(EXPECTED_SESSION_KEY_DATA).toEqual(sessionKeyData) + }) + test.concurrent("should encode params successfully", async () => { const hardcodedPaddedSignature = "0x000000000000000000000000000002fbffedd9b33f4e7156f2de8d48945e74890000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d50c68705bd6897b2d17c7de32fb519fda00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000fa66e705cf2582cf56528386bb9dfca119767262000000000000000000000000da5289fcaaf71d52a80a254da614a192b693e9770000000000000000000000003079b249dfde4692d7844aa261f8cf7d927a0da500000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000000000000000000003ca2b0ef4564d7ca7044b8c9d75685659975c0cab591408cb20e4a2ab278ab282633eb23075a8cb9bc5b01a5a4fa367b73da76821105f67a62ed7eedd335f6c0e361e73015ce4bb83439ab0742bdfed338ec39e2e8dd0819528f02be218fc1db90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ba4a7338d7a90dfa465cf975cc6691812c3772e00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000fa66e705cf2582cf56528386bb9dfca1197672620000000000000000000000000000000000000000000000000000000000000003b91f47666ba9b0b6b2cfbb60bf39b241d269786aa01f388021057d080863dd40633eb23075a8cb9bc5b01a5a4fa367b73da76821105f67a62ed7eedd335f6c0e361e73015ce4bb83439ab0742bdfed338ec39e2e8dd0819528f02be218fc1db90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004173c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b00000000000000000000000000000000000000000000000000000000000000" - const sessionKeyManagerAddress = "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489" const mockEcdsaSessionKeySig = @@ -71,7 +130,7 @@ describe("Modules:Read", () => { [ 0n, 0n, - "0x000000d50c68705bd6897b2d17c7de32fb519fda", + DEFAULT_ERC20_MODULE, "0x000000000000000000000000fa66e705cf2582cf56528386bb9dfca119767262000000000000000000000000da5289fcaaf71d52a80a254da614a192b693e9770000000000000000000000003079b249dfde4692d7844aa261f8cf7d927a0da50000000000000000000000000000000000000000000000000000000000989680", [ "0xca2b0ef4564d7ca7044b8c9d75685659975c0cab591408cb20e4a2ab278ab282", diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts index 9f1e32357..32fef3b22 100644 --- a/tests/modules/write.test.ts +++ b/tests/modules/write.test.ts @@ -17,29 +17,64 @@ import { beforeAll, describe, expect, test } from "vitest" import { type BiconomySmartAccountV2, type Transaction, + type TransferOwnershipCompatibleModule, type WalletClientSigner, createSmartAccountClient } from "../../src/account" import { Logger, getChain } from "../../src/account" -import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" import { + type CreateSessionDataParams, DEFAULT_BATCHED_SESSION_ROUTER_MODULE, DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_MULTICHAIN_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION, createBatchedSessionRouterModule, - createECDSAOwnershipValidationModule, createMultiChainValidationModule, createSessionKeyManagerModule, getABISVMSessionKeyData } from "../../src/modules" + +import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" import { SessionMemoryStorage } from "../../src/modules/session-storage/SessionMemoryStorage" +import { createSessionKeyEOA } from "../../src/modules/session-storage/utils" +import { + type Session, + createABISessionDatum, + createSession +} from "../../src/modules/sessions/abi" +import { + createBatchSession, + getBatchSessionTxParams +} from "../../src/modules/sessions/batch" +import { createERC20SessionDatum } from "../../src/modules/sessions/erc20" +import { createSessionSmartAccountClient } from "../../src/modules/sessions/sessionSmartAccountClient" import { PaymasterMode } from "../../src/paymaster" import { checkBalance, getBundlerUrl, getConfig, topUp } from "../utils" describe("Modules:Write", () => { const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + const amount = parseUnits(".0001", 6) + + const withSponsorship = { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + } + + const stores: { + single: Session + batch: Session + } = { + single: { + sessionStorageClient: new SessionMemoryStorage("0x"), + sessionID: "0x" + }, + batch: { + sessionStorageClient: new SessionMemoryStorage("0x"), + sessionID: "0x" + } + } + const { chain, chainId, @@ -56,8 +91,18 @@ describe("Modules:Write", () => { transport: http() }) - let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] - let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] + let [ + smartAccount, + smartAccountTwo, + smartAccountThree, + smartAccountFour + ]: BiconomySmartAccountV2[] = [] + let [ + smartAccountAddress, + smartAccountAddressTwo, + smartAccountAddressThree, + smartAccountAddressFour + ]: Hex[] = [] const [walletClient, walletClientTwo] = [ createWalletClient({ @@ -72,6 +117,8 @@ describe("Modules:Write", () => { }) ] + const recipient = walletClientTwo.account.address + beforeAll(async () => { ;[smartAccount, smartAccountTwo] = await Promise.all( [walletClient, walletClientTwo].map((client) => @@ -88,34 +135,288 @@ describe("Modules:Write", () => { account.getAccountAddress() ) ) - }) - test("should enable session module", async () => { - const smartAccount = await createSmartAccountClient({ + // Same user as smartAccount, but different smart account + smartAccountThree = await createSmartAccountClient({ signer: walletClient, bundlerUrl, - paymasterUrl + paymasterUrl, + index: 7 }) - const isSessionKeyEnabled = await smartAccount.isModuleEnabled( - DEFAULT_SESSION_KEY_MANAGER_MODULE + smartAccountFour = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + paymasterUrl, + index: 6 + }) + + smartAccountAddressThree = await smartAccountThree.getAccountAddress() + smartAccountAddressFour = await smartAccountFour.getAccountAddress() + + stores.single.sessionStorageClient = new SessionMemoryStorage( + smartAccountAddressThree + ) + stores.batch.sessionStorageClient = new SessionMemoryStorage( + smartAccountAddressFour ) - if (!isSessionKeyEnabled) { - const tx = await smartAccount.getEnableModuleData( - DEFAULT_SESSION_KEY_MANAGER_MODULE + await Promise.all([ + topUp(smartAccountAddress, undefined, token), + topUp(smartAccountAddress, undefined), + topUp(smartAccountAddressTwo, undefined, token), + topUp(smartAccountAddressTwo, undefined), + topUp(smartAccountAddressThree, undefined, token), + topUp(smartAccountAddressThree, undefined), + topUp(smartAccountAddressFour, undefined, token), + topUp(smartAccountAddressFour, undefined) + ]) + }) + + // User must be connected with a wallet to grant permissions + test("should create a single session on behalf of a user", async () => { + const { sessionKeyAddress, sessionStorageClient } = + await createSessionKeyEOA( + smartAccountThree, + chain, + stores.single.sessionStorageClient ) - const { wait } = await smartAccount.sendTransaction(tx, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } + + const { wait, session } = await createSession( + smartAccountThree, + [ + { + sessionKeyAddress, + contractAddress: nftAddress, + functionSelector: "safeMint(address)", + rules: [ + { + offset: 0, + condition: 0, + referenceValue: smartAccountAddressThree + } + ], + interval: { + validUntil: 0, + validAfter: 0 + }, + valueLimit: 0n + } + ], + sessionKeyAddress, + sessionStorageClient, + withSponsorship + ) + + const { + receipt: { transactionHash }, + success + } = await wait() + + // Save the sessionID for the next test + stores.single.sessionID = session.sessionID + + expect(success).toBe("true") + Logger.log("Tx Hash: ", transactionHash) + }, 50000) + + // User no longer has to be connected, + // Only the reference to the relevant sessionID and the store from the previous step is needed to execute txs on the user's behalf + test("should use the session to mint an NFT for the user", async () => { + // Setup + const session = stores.single + expect(stores.single.sessionID).toBeTruthy() // Should have been set in the previous test + + // Assume the real signer for userSmartAccountThree is no longer available (ie. user has logged out) + const smartAccountThreeWithSession = await createSessionSmartAccountClient( + { + accountAddress: smartAccountAddressThree, // Set the account address on behalf of the user + bundlerUrl, + paymasterUrl, + chainId + }, + session + ) + + const sessionSmartAccountThreeAddress = + await smartAccountThreeWithSession.getAccountAddress() + + expect(sessionSmartAccountThreeAddress).toEqual(smartAccountAddressThree) + + const nftMintTx = { + to: nftAddress, + data: encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [smartAccountAddressThree] + }) + } + + const nftBalanceBefore = await checkBalance( + smartAccountAddressThree, + nftAddress + ) + + const { wait } = await smartAccountThreeWithSession.sendTransaction( + nftMintTx, + withSponsorship + ) + + const { success } = await wait() + + expect(success).toBe("true") + + const nftBalanceAfter = await checkBalance( + smartAccountAddressThree, + nftAddress + ) + + expect(nftBalanceAfter - nftBalanceBefore).toBe(1n) + }) + + // User must be connected with a wallet to grant permissions + test("should create a batch session on behalf of a user", async () => { + const { sessionKeyAddress, sessionStorageClient } = + await createSessionKeyEOA( + smartAccountFour, + chain, + stores.batch.sessionStorageClient + ) + + const leaves: CreateSessionDataParams[] = [ + createERC20SessionDatum({ + interval: { + validUntil: 0, + validAfter: 0 + }, + sessionKeyAddress, + sessionKeyData: encodeAbiParameters( + [ + { type: "address" }, + { type: "address" }, + { type: "address" }, + { type: "uint256" } + ], + [sessionKeyAddress, token, recipient, amount] + ) + }), + createABISessionDatum({ + interval: { + validUntil: 0, + validAfter: 0 + }, + sessionKeyAddress, + contractAddress: nftAddress, + functionSelector: "safeMint(address)", + rules: [ + { + offset: 0, + condition: 0, + referenceValue: smartAccountAddressFour + } + ], + valueLimit: 0n + }) + ] + + const { wait, session } = await createBatchSession( + smartAccountFour, + sessionKeyAddress, + sessionStorageClient, + leaves, + withSponsorship + ) + + const { + receipt: { transactionHash }, + success + } = await wait() + + expect(success).toBe("true") + stores.batch.sessionID = session.sessionID // Save the sessionID for the next test + + expect(session.sessionID).toBeTruthy() + // Save the sessionID for the next test + + Logger.log("Tx Hash: ", transactionHash) + Logger.log("session: ", { session }) + }, 50000) + + // User no longer has to be connected, + // Only the reference to the relevant sessionID and the store from the previous step is needed to execute txs on the user's behalf + test("should use the batch session to mint an NFT, and pay some token for the user", async () => { + // Setup + // Setup + const session = stores.batch + expect(session.sessionID).toBeTruthy() // Should have been set in the previous test + + // Assume the real signer for userSmartAccountFour is no longer available (ie. user has logged out); + const smartAccountFourWithSession = await createSessionSmartAccountClient( + { + accountAddress: smartAccountAddressFour, // Set the account address on behalf of the user + bundlerUrl, + paymasterUrl, + chainId + }, + session, + true // if batching + ) + + const sessionSmartAccountFourAddress = + await smartAccountFourWithSession.getAccountAddress() + + expect(sessionSmartAccountFourAddress).toEqual(smartAccountAddressFour) + + const transferTx: Transaction = { + to: token, + data: encodeFunctionData({ + abi: parseAbi(["function transfer(address _to, uint256 _value)"]), + functionName: "transfer", + args: [recipient, amount] + }) + } + const nftMintTx: Transaction = { + to: nftAddress, + data: encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [smartAccountAddressFour] }) - const { success } = await wait() - expect(success).toBe("true") } + + const nftBalanceBefore = await checkBalance( + smartAccountAddressFour, + nftAddress + ) + const tokenBalanceBefore = await checkBalance(recipient, token) + + const txs = [transferTx, nftMintTx] + + const batchSessionParams = await getBatchSessionTxParams( + ["ERC20", "ABI"], + txs, + session, + chain + ) + + const { wait } = await smartAccountFourWithSession.sendTransaction(txs, { + ...batchSessionParams, + ...withSponsorship + }) + const { success } = await wait() + expect(success).toBe("true") + + const tokenBalanceAfter = await checkBalance(recipient, token) + const nftBalanceAfter = await checkBalance( + smartAccountAddressFour, + nftAddress + ) + expect(tokenBalanceAfter - tokenBalanceBefore).toBe(amount) + expect(nftBalanceAfter - nftBalanceBefore).toBe(1n) }, 50000) - test.skip("should use MultichainValidationModule to mint an NFT on two chains with sponsorship", async () => { + test("should use MultichainValidationModule to mint an NFT on two chains with sponsorship", async () => { const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const recipientForBothChains = walletClient.account.address const chainIdBase = 84532 const bundlerUrlBase = getBundlerUrl(chainIdBase) @@ -158,16 +459,12 @@ describe("Modules:Write", () => { baseAccount.isAccountDeployed() ]) if (!isPolygonDeployed) { - const { wait } = await polygonAccount.deploy({ - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) + const { wait } = await polygonAccount.deploy(withSponsorship) const { success } = await wait() expect(success).toBe("true") } if (!isBaseDeployed) { - const { wait } = await baseAccount.deploy({ - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) + const { wait } = await baseAccount.deploy(withSponsorship) const { success } = await wait() expect(success).toBe("true") } @@ -191,7 +488,7 @@ describe("Modules:Write", () => { "function safeMint(address owner) view returns (uint balance)" ]), functionName: "safeMint", - args: [recipientForBothChains] + args: [recipient] }) const transaction = { @@ -200,12 +497,8 @@ describe("Modules:Write", () => { } const [partialUserOp1, partialUserOp2] = await Promise.all([ - baseAccount.buildUserOp([transaction], { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }), - polygonAccount.buildUserOp([transaction], { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) + baseAccount.buildUserOp([transaction], withSponsorship), + polygonAccount.buildUserOp([transaction], withSponsorship) ]) expect(partialUserOp1.paymasterAndData).not.toBe("0x") @@ -251,7 +544,7 @@ describe("Modules:Write", () => { signer: walletClient, bundlerUrl, paymasterUrl, - index: 5 // Increasing index to not conflict with other test cases and use a new smart account + index: 11 // Increasing index to not conflict with other test cases and use a new smart account }) const accountAddress = await smartAccount.getAccountAddress() const sessionMemoryStorage: SessionMemoryStorage = new SessionMemoryStorage( @@ -269,13 +562,18 @@ describe("Modules:Write", () => { } try { - sessionSigner = await sessionMemoryStorage.getSignerByKey(sessionKeyEOA) + sessionSigner = await sessionMemoryStorage.getSignerByKey( + sessionKeyEOA, + chain + ) } catch (error) { - sessionSigner = await sessionMemoryStorage.addSigner({ - pbKey: sessionKeyEOA, - pvKey: `0x${privateKey}`, - chainId: chain - }) + sessionSigner = await sessionMemoryStorage.addSigner( + { + pbKey: sessionKeyEOA, + pvKey: `0x${privateKey}` + }, + chain + ) } expect(sessionSigner).toBeTruthy() @@ -368,9 +666,6 @@ describe("Modules:Write", () => { expect(userOpResponse2.userOpHash).not.toBeNull() const maticBalanceAfter = await checkBalance(smartAccountAddress) expect(maticBalanceAfter).toEqual(maticBalanceBefore) - Logger.log( - `Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai` - ) }, 60000) test("should enable batched module", async () => { @@ -396,345 +691,157 @@ describe("Modules:Write", () => { } }, 50000) - test.skip("should use BatchedSessionValidationModule to send a user op", async () => { - let sessionSigner: WalletClientSigner - const sessionKeyEOA = walletClient.account.address - const recipient = walletClientTwo.account.address - const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - - let smartAccount = await createSmartAccountClient({ + test("should use ABI SVM to allow transfer ownership of smart account", async () => { + const smartAccount = await createSmartAccountClient({ chainId, signer: walletClient, bundlerUrl, paymasterUrl, - index: 6 // Increasing index to not conflict with other test cases and use a new smart account + index: 10 // Increasing index to not conflict with other test cases and use a new smart account }) - // const accountAddress = await smartAccount.getAccountAddress() - const smartAccountAddress = await smartAccount.getAddress() - await topUp(smartAccountAddress, undefined, token) - await topUp(smartAccountAddress, undefined) + const smartAccountAddressForPreviousOwner = + await smartAccount.getAccountAddress() + + const signerOfAccount = walletClient.account.address + const ownerOfAccount = await publicClient.readContract({ + address: DEFAULT_ECDSA_OWNERSHIP_MODULE, + abi: ECDSAModuleAbi, + functionName: "getOwner", + args: [await smartAccount.getAccountAddress()] + }) + if (ownerOfAccount !== signerOfAccount) { + // Re-create the smart account instance with the new owner + const smartAccountWithOtherOwner = await createSmartAccountClient({ + chainId, + signer: walletClientTwo, + bundlerUrl, + paymasterUrl, + accountAddress: smartAccountAddressForPreviousOwner + }) + + // Transfer ownership back to walletClient 1 + await smartAccountWithOtherOwner.transferOwnership( + walletClient.account.address, + DEFAULT_ECDSA_OWNERSHIP_MODULE as TransferOwnershipCompatibleModule, + { paymasterServiceData: { mode: PaymasterMode.SPONSORED } } + ) + } + + let sessionSigner: WalletClientSigner + const sessionKeyEOA = walletClient.account.address + const newOwner = walletClientTwo.account.address + + const accountAddress = await smartAccount.getAccountAddress() const sessionMemoryStorage: SessionMemoryStorage = new SessionMemoryStorage( - smartAccountAddress + accountAddress ) + // First we need to check if smart account is deployed + // if not deployed, send an empty transaction to deploy it + const isDeployed = await smartAccount.isAccountDeployed() + if (!isDeployed) { + const { wait } = await smartAccount.deploy({ + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const { success } = await wait() + expect(success).toBe("true") + } try { - sessionSigner = await sessionMemoryStorage.getSignerByKey(sessionKeyEOA) + sessionSigner = await sessionMemoryStorage.getSignerByKey( + sessionKeyEOA, + chain + ) } catch (error) { - sessionSigner = await sessionMemoryStorage.addSigner({ - pbKey: sessionKeyEOA, - pvKey: `0x${privateKey}`, - chainId: chain - }) + sessionSigner = await sessionMemoryStorage.addSigner( + { + pbKey: sessionKeyEOA, + pvKey: `0x${privateKeyTwo}` + }, + chain + ) } expect(sessionSigner).toBeTruthy() + // Create session module const sessionModule = await createSessionKeyManagerModule({ moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, - smartAccountAddress, + smartAccountAddress: await smartAccount.getAddress(), sessionStorageClient: sessionMemoryStorage }) - // Create batched session module - const batchedSessionModule = await createBatchedSessionRouterModule({ - moduleAddress: DEFAULT_BATCHED_SESSION_ROUTER_MODULE, - smartAccountAddress, - sessionKeyManagerModule: sessionModule - }) - - // Set enabled call on session, only allows calling USDC contract transfer with <= 10 USDC - const sessionKeyData = encodeAbiParameters( - [ - { type: "address" }, - { type: "address" }, - { type: "address" }, - { type: "uint256" } - ], - [ - sessionKeyEOA, - token, // erc20 token address - recipient, // receiver address - parseUnits("10", 6) - ] - ) - // only requires that the caller is the session key - // can call anything using the mock session module - const sessionKeyData2 = encodeAbiParameters( - [{ type: "address" }], - [sessionKeyEOA] + const functionSelectorTransferOwnership = slice( + toFunctionSelector("transferOwnership(address) public"), + 0, + 4 ) - const erc20ModuleAddr = "0x000000D50C68705bd6897B2d17c7de32FB519fDA" - const mockSessionModuleAddr = "0x7Ba4a7338D7A90dfA465cF975Cc6691812C3772E" - const sessionTxData = await batchedSessionModule.createSessionData([ + const sessionKeyDataTransferOwnership = await getABISVMSessionKeyData( + sessionKeyEOA as Hex, { - validUntil: 0, - validAfter: 0, - sessionValidationModule: erc20ModuleAddr, - sessionPublicKey: sessionKeyEOA, - sessionKeyData: sessionKeyData - }, - { - validUntil: 0, - validAfter: 0, - sessionValidationModule: mockSessionModuleAddr, - sessionPublicKey: sessionKeyEOA, - sessionKeyData: sessionKeyData2 + destContract: ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION.V1_0_0 as Hex, // ECDSA module address + functionSelector: functionSelectorTransferOwnership, + valueLimit: parseEther("0"), + rules: [ + { + offset: 0, // offset 0 means we are checking first parameter of transferOwnership (recipient address) + condition: 0, // 0 = Condition.EQUAL + referenceValue: pad(walletClient.account.address, { + size: 32 + }) // new owner address + } + ] } - ]) - - const setSessionAllowedTrx = { + ) + const abiSvmAddress = "0x000006bC2eCdAe38113929293d241Cf252D91861" + const sessionTxDataTransferOwnership = + await sessionModule.createSessionData([ + { + validUntil: 0, + validAfter: 0, + sessionValidationModule: abiSvmAddress, + sessionPublicKey: sessionKeyEOA as Hex, + sessionKeyData: sessionKeyDataTransferOwnership as Hex + } + ]) + const setSessionAllowedTransferOwnerhsipTrx = { to: DEFAULT_SESSION_KEY_MANAGER_MODULE, - data: sessionTxData.data - } - - const isDeployed = await smartAccount.isAccountDeployed() - if (!isDeployed) { - const { wait } = await smartAccount.deploy() - const { success } = await wait() - expect(success).toBe("true") + data: sessionTxDataTransferOwnership.data } - - const txArray: Transaction[] = [] - // Check if session module is enabled + // biome-ignore lint/suspicious/noExplicitAny: <explanation> + const txArray: any = [] + // Check if module is enabled const isEnabled = await smartAccount.isModuleEnabled( DEFAULT_SESSION_KEY_MANAGER_MODULE ) + if (!isEnabled) { const enableModuleTrx = await smartAccount.getEnableModuleData( DEFAULT_SESSION_KEY_MANAGER_MODULE ) txArray.push(enableModuleTrx) + txArray.push(setSessionAllowedTransferOwnerhsipTrx) + } else { + Logger.log("MODULE ALREADY ENABLED") + txArray.push(setSessionAllowedTransferOwnerhsipTrx) } - // Check if batched session module is enabled - const isBRMenabled = await smartAccount.isModuleEnabled( - DEFAULT_BATCHED_SESSION_ROUTER_MODULE - ) - if (!isBRMenabled) { - // -----> enableModule batched session router module - const tx2 = await smartAccount.getEnableModuleData( - DEFAULT_BATCHED_SESSION_ROUTER_MODULE - ) - txArray.push(tx2) - } - txArray.push(setSessionAllowedTrx) const userOpResponse1 = await smartAccount.sendTransaction(txArray, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) // this user op will enable the modules and setup session allowed calls + }) const transactionDetails = await userOpResponse1.wait() expect(transactionDetails.success).toBe("true") Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash) - const usdcBalance = await checkBalance(smartAccountAddress, token) - const nativeTokenBalance = await checkBalance(smartAccountAddress) - - expect(usdcBalance).toBeGreaterThan(0) - smartAccount = smartAccount.setActiveValidationModule(batchedSessionModule) - // WARNING* If the smart account does not have enough USDC, user op execution will FAIL - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function transfer(address _to, uint256 _value)"]), - functionName: "transfer", - args: [recipient, parseUnits("0.001", 6)] - }) - const encodedCall2 = encodeFunctionData({ - abi: parseAbi(["function transfer(address _to, uint256 _value)"]), - functionName: "transfer", - args: [ - "0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549", - parseUnits("0.001", 6) - ] - }) - const transferTx = { - to: "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a", - data: encodedCall - } - const transferTx2 = { - to: "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a", - data: encodedCall2 - } - const activeModule = smartAccount.activeValidationModule - expect(activeModule).toEqual(batchedSessionModule) - const maticBalanceBefore = await checkBalance(smartAccountAddress) - // failing with dummyTx because of invalid sessionKeyData - const userOpResponse2 = await smartAccount.sendTransaction( - [transferTx, transferTx2], + // Transfer ownership back to walletClient + await smartAccount.transferOwnership( + newOwner, + DEFAULT_ECDSA_OWNERSHIP_MODULE as TransferOwnershipCompatibleModule, { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, params: { - batchSessionParams: [ - { - sessionSigner: walletClient, - sessionValidationModule: erc20ModuleAddr - }, - { - sessionSigner: walletClient, - sessionValidationModule: mockSessionModuleAddr - } - ] - }, - paymasterServiceData: { - mode: PaymasterMode.SPONSORED + sessionSigner: sessionSigner, + sessionValidationModule: abiSvmAddress } } ) - const receipt = await userOpResponse2.wait() - console.log(receipt.userOpHash, "Batched user op hash") - expect(receipt.success).toBe("true") - expect(userOpResponse2.userOpHash).toBeTruthy() - expect(userOpResponse2.userOpHash).not.toBeNull() - const maticBalanceAfter = await checkBalance(smartAccountAddress) - expect(maticBalanceAfter).toEqual(maticBalanceBefore) - Logger.log( - `Tx at: https://jiffyscan.xyz/userOpHash/${userOpResponse2.userOpHash}?network=mumbai` - ) }, 60000) - - describe("Transfer ownership", () => { - test("should use ABI SVM to allow transfer ownership of smart account", async () => { - const smartAccount = await createSmartAccountClient({ - chainId, - signer: walletClient, - bundlerUrl, - paymasterUrl, - index: 10 // Increasing index to not conflict with other test cases and use a new smart account - }) - - const smartAccountAddressForPreviousOwner = - await smartAccount.getAccountAddress() - - const signerOfAccount = walletClient.account.address - const ownerOfAccount = await publicClient.readContract({ - address: DEFAULT_ECDSA_OWNERSHIP_MODULE, - abi: ECDSAModuleAbi, - functionName: "getOwner", - args: [await smartAccount.getAccountAddress()] - }) - - if (ownerOfAccount !== signerOfAccount) { - // Re-create the smart account instance with the new owner - const smartAccountWithOtherOwner = await createSmartAccountClient({ - chainId, - signer: walletClientTwo, - bundlerUrl, - paymasterUrl, - accountAddress: smartAccountAddressForPreviousOwner - }) - - // Transfer ownership back to walletClient 1 - await smartAccountWithOtherOwner.transferOwnership( - walletClient.account.address, - DEFAULT_ECDSA_OWNERSHIP_MODULE, - { paymasterServiceData: { mode: PaymasterMode.SPONSORED } } - ) - } - - let sessionSigner: WalletClientSigner - const sessionKeyEOA = walletClient.account.address - const newOwner = walletClientTwo.account.address - - const accountAddress = await smartAccount.getAccountAddress() - const sessionMemoryStorage: SessionMemoryStorage = - new SessionMemoryStorage(accountAddress) - // First we need to check if smart account is deployed - // if not deployed, send an empty transaction to deploy it - const isDeployed = await smartAccount.isAccountDeployed() - if (!isDeployed) { - const { wait } = await smartAccount.deploy({ - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) - const { success } = await wait() - expect(success).toBe("true") - } - - try { - sessionSigner = await sessionMemoryStorage.getSignerByKey(sessionKeyEOA) - } catch (error) { - sessionSigner = await sessionMemoryStorage.addSigner({ - pbKey: sessionKeyEOA, - pvKey: `0x${privateKeyTwo}`, - chainId: chain - }) - } - - expect(sessionSigner).toBeTruthy() - // Create session module - const sessionModule = await createSessionKeyManagerModule({ - moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, - smartAccountAddress: await smartAccount.getAddress(), - sessionStorageClient: sessionMemoryStorage - }) - const functionSelectorTransferOwnership = slice( - toFunctionSelector("transferOwnership(address) public"), - 0, - 4 - ) - const sessionKeyDataTransferOwnership = await getABISVMSessionKeyData( - sessionKeyEOA as Hex, - { - destContract: - ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION.V1_0_0 as Hex, // ECDSA module address - functionSelector: functionSelectorTransferOwnership, - valueLimit: parseEther("0"), - rules: [ - { - offset: 0, // offset 0 means we are checking first parameter of transferOwnership (recipient address) - condition: 0, // 0 = Condition.EQUAL - referenceValue: pad(walletClient.account.address, { - size: 32 - }) // new owner address - } - ] - } - ) - const abiSvmAddress = "0x000006bC2eCdAe38113929293d241Cf252D91861" - const sessionTxDataTransferOwnership = - await sessionModule.createSessionData([ - { - validUntil: 0, - validAfter: 0, - sessionValidationModule: abiSvmAddress, - sessionPublicKey: sessionKeyEOA as Hex, - sessionKeyData: sessionKeyDataTransferOwnership as Hex - } - ]) - const setSessionAllowedTransferOwnerhsipTrx = { - to: DEFAULT_SESSION_KEY_MANAGER_MODULE, - data: sessionTxDataTransferOwnership.data - } - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - const txArray: any = [] - // Check if module is enabled - const isEnabled = await smartAccount.isModuleEnabled( - DEFAULT_SESSION_KEY_MANAGER_MODULE - ) - - if (!isEnabled) { - const enableModuleTrx = await smartAccount.getEnableModuleData( - DEFAULT_SESSION_KEY_MANAGER_MODULE - ) - txArray.push(enableModuleTrx) - txArray.push(setSessionAllowedTransferOwnerhsipTrx) - } else { - Logger.log("MODULE ALREADY ENABLED") - txArray.push(setSessionAllowedTransferOwnerhsipTrx) - } - const userOpResponse1 = await smartAccount.sendTransaction(txArray, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) - const transactionDetails = await userOpResponse1.wait() - expect(transactionDetails.success).toBe("true") - Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash) - - // Transfer ownership back to walletClient - const resp = await smartAccount.transferOwnership( - newOwner, - DEFAULT_ECDSA_OWNERSHIP_MODULE, - { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - params: { - sessionSigner: sessionSigner, - sessionValidationModule: abiSvmAddress - } - } - ) - }, 60000) - }) }) diff --git a/tests/paymaster/read.test.ts b/tests/paymaster/read.test.ts index 3b851100b..1509ee322 100644 --- a/tests/paymaster/read.test.ts +++ b/tests/paymaster/read.test.ts @@ -90,7 +90,8 @@ describe("Paymaster:Read", () => { }) expect(feeQuotesResponse.feeQuotes?.length).toBeGreaterThan(1) - } + }, + 30000 ) test.concurrent( diff --git a/tests/utils.ts b/tests/utils.ts index 2a89b0121..908982e3b 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -7,7 +7,8 @@ import { parseAbi } from "viem" import { privateKeyToAccount } from "viem/accounts" -import { Logger, getChain } from "../src/account" +import { Logger } from "../src/account/utils/Logger" +import { getChain } from "../src/account/utils/getChain" import { extractChainIdFromBundlerUrl, extractChainIdFromPaymasterUrl @@ -22,7 +23,7 @@ export const getEnvVars = () => { "E2E_BICO_PAYMASTER_KEY_BASE", "CHAIN_ID" ] - const errorFields = fields.filter((field) => !process.env[field]) + const errorFields = fields.filter((field) => !process?.env?.[field]) if (errorFields.length) { throw new Error( `Missing environment variable${ From 71b5b0430fab8fd9d55b994a773ed463d5580e0a Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Thu, 16 May 2024 12:02:26 +0100 Subject: [PATCH 1181/1247] fix: process.env errors (#494) * chore: release v4.3.0 (#492) --- src/account/utils/Helpers.ts | 16 ++++++++++++++++ src/account/utils/HttpRequests.ts | 5 ++++- src/account/utils/Logger.ts | 8 +++----- 3 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 src/account/utils/Helpers.ts diff --git a/src/account/utils/Helpers.ts b/src/account/utils/Helpers.ts new file mode 100644 index 000000000..38dc3e01d --- /dev/null +++ b/src/account/utils/Helpers.ts @@ -0,0 +1,16 @@ +const VARS_T0_CHECK = [ + "BICONOMY_SDK_DEBUG", + "REACT_APP_BICONOMY_SDK_DEBUG", + "NEXT_PUBLIC_BICONOMY_SDK_DEBUG" +] + +export const isDebugging = (): boolean => { + try { + // @ts-ignore + return VARS_T0_CHECK.some( + (key) => process?.env?.[key]?.toString() === "true" + ) + } catch (e) { + return false + } +} diff --git a/src/account/utils/HttpRequests.ts b/src/account/utils/HttpRequests.ts index cdcbe07f4..c5de9659d 100644 --- a/src/account/utils/HttpRequests.ts +++ b/src/account/utils/HttpRequests.ts @@ -19,13 +19,16 @@ export async function sendRequest<T>( { url, method, body }: HttpRequest, service: Service ): Promise<T> { + const stringifiedBody = JSON.stringify(body) + Logger.log(`${service} RPC Request`, { url, body: stringifiedBody }) + const response = await fetch(url, { method, headers: { Accept: "application/json", "Content-Type": "application/json" }, - body: JSON.stringify(body) + body: stringifiedBody }) // biome-ignore lint/suspicious/noExplicitAny: <explanation> diff --git a/src/account/utils/Logger.ts b/src/account/utils/Logger.ts index 7925028c4..532656566 100644 --- a/src/account/utils/Logger.ts +++ b/src/account/utils/Logger.ts @@ -5,14 +5,12 @@ * @param {any} message Message to be logged */ +import { isDebugging } from "./Helpers" + // biome-ignore lint/complexity/noStaticOnlyClass: <explanation> class Logger { // By default, the logger is not in debug mode. - static isDebug: boolean = [ - "BICONOMY_SDK_DEBUG", - "REACT_APP_BICONOMY_SDK_DEBUG", - "NEXT_PUBLIC_BICONOMY_SDK_DEBUG" - ].some((key) => process?.env?.[key]?.toString() === "true") + static isDebug: boolean = isDebugging() /** * \x1b[0m is an escape sequence to reset the color of the text From 81854a1abfdd34c75c55067a97e28fb2e28976fa Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Thu, 16 May 2024 12:06:53 +0100 Subject: [PATCH 1182/1247] chore: tests counterfactual address (#485) * chore: add test for counterfactual address --- tests/account/read.test.ts | 54 ++++++++++++++++++++++++++++++++++--- tests/modules/write.test.ts | 4 +-- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index dd53d1cfc..b0320aace 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -7,11 +7,10 @@ import { createWalletClient, encodeAbiParameters, encodeFunctionData, + getContract, hashMessage, - pad, parseAbi, - parseAbiParameters, - toHex + parseAbiParameters } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { bsc } from "viem/chains" @@ -19,6 +18,7 @@ import { beforeAll, describe, expect, test } from "vitest" import { type BiconomySmartAccountV2, type BiconomySmartAccountV2Config, + DEFAULT_BICONOMY_FACTORY_ADDRESS, DEFAULT_ENTRYPOINT_ADDRESS, ERROR_MESSAGES, NATIVE_TOKEN_ALIAS, @@ -28,6 +28,7 @@ import { } from "../../src/account" import { type UserOperationStruct, getChain } from "../../src/account" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" +import { BiconomyFactoryAbi } from "../../src/account/abi/Factory" import { BiconomyAccountAbi } from "../../src/account/abi/SmartAccount" import { DEFAULT_ECDSA_OWNERSHIP_MODULE, @@ -525,6 +526,53 @@ describe("Account:Read", () => { expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) }) + test.concurrent( + "should having matching counterFactual address from the contracts with smartAccount.getAddress()", + async () => { + const client = createWalletClient({ + account, + chain, + transport: http() + }) + + const ecdsaModule = await createECDSAOwnershipValidationModule({ + signer: client + }) + + const smartAccount = await createSmartAccountClient({ + signer: client, + bundlerUrl, + paymasterUrl, + activeValidationModule: ecdsaModule + }) + + const owner = await ecdsaModule.getAddress() + const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() + + const moduleSetupData = (await ecdsaModule.getInitData()) as Hex + + const publicClient = createPublicClient({ + chain, + transport: http() + }) + + const factoryContract = getContract({ + address: DEFAULT_BICONOMY_FACTORY_ADDRESS, + abi: BiconomyFactoryAbi, + client: { public: publicClient, wallet: client } + }) + + const smartAccountAddressFromContracts = + await factoryContract.read.getAddressForCounterFactualAccount([ + owner, + moduleSetupData, + BigInt(0) + ]) + + expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) + } + ) + test.concurrent( "should have matching #getUserOpHash and entryPoint.getUserOpHash", async () => { diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts index 32fef3b22..fa19cffc3 100644 --- a/tests/modules/write.test.ts +++ b/tests/modules/write.test.ts @@ -29,7 +29,6 @@ import { DEFAULT_MULTICHAIN_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE, ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION, - createBatchedSessionRouterModule, createMultiChainValidationModule, createSessionKeyManagerModule, getABISVMSessionKeyData @@ -135,8 +134,9 @@ describe("Modules:Write", () => { account.getAccountAddress() ) ) + }) - // Same user as smartAccount, but different smart account + test("should enable session module", async () => { smartAccountThree = await createSmartAccountClient({ signer: walletClient, bundlerUrl, From c172a40ac62eae02a04256961b7bb8823f109fa0 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Thu, 16 May 2024 12:11:30 +0100 Subject: [PATCH 1183/1247] chore: v4.4.1 (#495) --- .changeset/yellow-snails-exist.md | 7 ------- CHANGELOG.md | 10 ++++++++-- package.json | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) delete mode 100644 .changeset/yellow-snails-exist.md diff --git a/.changeset/yellow-snails-exist.md b/.changeset/yellow-snails-exist.md deleted file mode 100644 index 916b7bcc0..000000000 --- a/.changeset/yellow-snails-exist.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@biconomy/account": minor ---- - -Sessions DevEx - -- Improved DevEx related to the creating and using of sessions [chore: sessions dx](https://github.com/bcnmy/biconomy-client-sdk/pull/486) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f0425a35..a89572922 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,18 @@ # @biconomy/account +## 4.4.1 + +### Patch Changes + +- fix process.env bug + ## 4.4.0 ### Minor Changes -- Sessions DevEx +- b9b2077: Sessions DevEx - - Improved DevEx related to the creating and using of sessions + - Improved DevEx related to the creating and using of sessions [chore: sessions dx](https://github.com/bcnmy/biconomy-client-sdk/pull/486) ## 4.3.0 diff --git a/package.json b/package.json index 8749ac31d..c22bbdcd4 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "sideEffects": false, "name": "@biconomy/account", "author": "Biconomy", - "version": "4.4.0", + "version": "4.4.1", "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ "erc-7579", From c70febbe626eeb39915afdfa976ffc6df0b9b9b8 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Thu, 16 May 2024 12:28:23 +0100 Subject: [PATCH 1184/1247] ci: tests --- tests/modules/write.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts index fa19cffc3..3bcd99aa7 100644 --- a/tests/modules/write.test.ts +++ b/tests/modules/write.test.ts @@ -134,9 +134,7 @@ describe("Modules:Write", () => { account.getAccountAddress() ) ) - }) - test("should enable session module", async () => { smartAccountThree = await createSmartAccountClient({ signer: walletClient, bundlerUrl, From 39761a7bd833fc3e93bb0a86bae9173fa5505ca9 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Fri, 17 May 2024 17:28:28 +0100 Subject: [PATCH 1185/1247] fix: reference value (#498) fix: reference value (#498) --- CHANGELOG.md | 6 + biome.json | 1 + examples/CREATE_AND_USE_A_BATCH_SESSION.md | 6 +- examples/CREATE_AND_USE_A_SESSION.md | 1 - package.json | 2 +- src/account/BiconomySmartAccountV2.ts | 1 + src/account/utils/Constants.ts | 5 +- src/modules/BatchedSessionRouterModule.ts | 3 - .../session-storage/SessionFileStorage.ts | 3 - src/modules/sessions/abi.ts | 52 +++---- src/modules/sessions/batch.ts | 91 ++++++----- .../sessions/sessionSmartAccountClient.ts | 3 +- src/modules/utils/Constants.ts | 6 - src/modules/utils/Helper.ts | 10 +- tests/account/write.test.ts | 3 - tests/modules/read.test.ts | 2 +- tests/modules/write.test.ts | 145 ++++++++++++++++-- 17 files changed, 224 insertions(+), 116 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a89572922..0eb5011ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # @biconomy/account +## 4.4.2 + +### Patch Changes + +- fix referenceValue padding + ## 4.4.1 ### Patch Changes diff --git a/biome.json b/biome.json index dfd9300dc..262693997 100644 --- a/biome.json +++ b/biome.json @@ -2,6 +2,7 @@ "$schema": "https://biomejs.dev/schemas/1.5.3/schema.json", "files": { "ignore": [ + "package.json", "node_modules", "**/node_modules", "cache", diff --git a/examples/CREATE_AND_USE_A_BATCH_SESSION.md b/examples/CREATE_AND_USE_A_BATCH_SESSION.md index 584203304..aa195d642 100644 --- a/examples/CREATE_AND_USE_A_BATCH_SESSION.md +++ b/examples/CREATE_AND_USE_A_BATCH_SESSION.md @@ -78,7 +78,6 @@ const leaves: CreateSessionParams[] = [ const { wait, session } = await createBatchSession( smartAccount, - sessionKeyAddress, sessionStorageClient, leaves, withSponsorship @@ -117,11 +116,12 @@ const nftMintTx: Transaction = { }), }; -const txs = [transferTx, nftMintTx]; +const txs = [nftMintTx, transferTx]; +const correspondingIndexes = [1, 0]; // The order of the txs from the sessionBatch const batchSessionParams = await getBatchSessionTxParams( - ["ERC20", "ABI"], txs, + correspondingIndexes, session, chain ); diff --git a/examples/CREATE_AND_USE_A_SESSION.md b/examples/CREATE_AND_USE_A_SESSION.md index 124b039b7..8b2e1c4c1 100644 --- a/examples/CREATE_AND_USE_A_SESSION.md +++ b/examples/CREATE_AND_USE_A_SESSION.md @@ -77,7 +77,6 @@ const policy: Policy[] = [ const { wait, session } = await createSession( smartAccount, policy, - sessionKeyAddress, sessionStorageClient, { paymasterServiceData: { mode: PaymasterMode.SPONSORED }, diff --git a/package.json b/package.json index c22bbdcd4..0ea4a4cb7 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "sideEffects": false, "name": "@biconomy/account", "author": "Biconomy", - "version": "4.4.1", + "version": "4.4.2", "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ "erc-7579", diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 7ce77c339..d3c7bf626 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -914,6 +914,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { _params?: SendUserOpParams ): Promise<UserOperationStruct> { const params = { ..._params, ...(this.sessionData ? this.sessionData : {}) } + this.isActiveValidationModuleDefined() const requiredFields: UserOperationKey[] = [ "sender", diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index d2bae4697..50ddb5826 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -83,8 +83,9 @@ export const ERROR_MESSAGES = { "'Amount' is required for withdrawal of native token without using a paymaster", MISSING_RPC_URL: "rpcUrl is required for PrivateKeyAccount signer type, please provide it in the config", - INVALID_SESSION_TYPES: - "Session types and transactions must be of the same length" + INVALID_SESSION_INDEXES: + "Session indexes and transactions must be of the same length and correspond to each other", + SIGNER_REQUIRED: "Signer is required for creating a smart account" } export const NATIVE_TOKEN_ALIAS: Hex = diff --git a/src/modules/BatchedSessionRouterModule.ts b/src/modules/BatchedSessionRouterModule.ts index 42f607d80..53181c728 100644 --- a/src/modules/BatchedSessionRouterModule.ts +++ b/src/modules/BatchedSessionRouterModule.ts @@ -261,9 +261,6 @@ export class BatchedSessionRouterModule extends BaseValidationModule { } const sessionDataTupleArray: SessionDataTuple[] = [] - - // if needed we could do mock signature over userOpHashAndModuleAddress - // signer must be the same for all the sessions const { signer: sessionSigner } = await convertSigner( sessionParams[0].sessionSigner, diff --git a/src/modules/session-storage/SessionFileStorage.ts b/src/modules/session-storage/SessionFileStorage.ts index 63c33cd6b..0a66b8302 100644 --- a/src/modules/session-storage/SessionFileStorage.ts +++ b/src/modules/session-storage/SessionFileStorage.ts @@ -51,14 +51,12 @@ export class SessionFileStorage implements ISessionStorage { data: any, type: "sessions" | "signers" ): Promise<void> { - console.log("") return new Promise((resolve, reject) => { const filePath = this.getStorageFilePath(type) // @ts-ignore fs.writeFile(filePath, JSON.stringify(data), "utf8", (err) => { if (err) { // Handle errors appropriately - console.log({ err }, JSON.stringify(data)) reject(err) } else { resolve() @@ -90,7 +88,6 @@ export class SessionFileStorage implements ISessionStorage { return data || { merkleRoot: "", leafNodes: [] } } catch (error) { // Handle errors appropriately - console.log({ error }) } } diff --git a/src/modules/sessions/abi.ts b/src/modules/sessions/abi.ts index d65beb785..a6a6e9bed 100644 --- a/src/modules/sessions/abi.ts +++ b/src/modules/sessions/abi.ts @@ -3,7 +3,6 @@ import { type ByteArray, type Hex, concat, - isAddress, pad, slice, toFunctionSelector, @@ -18,6 +17,7 @@ import { type BiconomySmartAccountV2, type BuildUserOpOptions, ERROR_MESSAGES, + Logger, type Transaction } from "../../account" import { createSessionKeyManagerModule } from "../index" @@ -37,7 +37,7 @@ export type Session = { /** The storage client specific to the smartAccountAddress which stores the session keys */ sessionStorageClient: ISessionStorage /** The relevant sessionID for the chosen session */ - sessionID: string + sessionIDInfo: string[] } export type SessionEpoch = { @@ -121,7 +121,6 @@ export type SessionGrantedPayload = UserOpResponse & { session: Session } * valueLimit: 0n * } * ], - * sessionKeyAddress, * sessionStorage, * { * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, @@ -139,19 +138,17 @@ export type SessionGrantedPayload = UserOpResponse & { session: Session } export const createSession = async ( smartAccount: BiconomySmartAccountV2, policy: Policy[], - sessionKeyAddress: Hex, sessionStorageClient: ISessionStorage, buildUseropDto?: BuildUserOpOptions ): Promise<SessionGrantedPayload> => { - const userAccountAddress = await smartAccount.getAddress() + const smartAccountAddress = await smartAccount.getAddress() const sessionsModule = await createSessionKeyManagerModule({ - smartAccountAddress: userAccountAddress, + smartAccountAddress, sessionStorageClient }) - const { data: policyData } = await sessionsModule.createSessionData( - policy.map(createABISessionDatum) - ) + const { data: policyData, sessionIDInfo } = + await sessionsModule.createSessionData(policy.map(createABISessionDatum)) const permitTx = { to: DEFAULT_SESSION_KEY_MANAGER_MODULE, @@ -161,33 +158,30 @@ export const createSession = async ( const txs: Transaction[] = [] const isDeployed = await smartAccount.isAccountDeployed() - if (!isDeployed) throw new Error(ERROR_MESSAGES.ACCOUNT_NOT_DEPLOYED) - - const enabled = await smartAccount.isModuleEnabled( + const enableSessionTx = await smartAccount.getEnableModuleData( DEFAULT_SESSION_KEY_MANAGER_MODULE ) - if (!enabled) { - txs.push( - await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE) + if (isDeployed) { + const enabled = await smartAccount.isModuleEnabled( + DEFAULT_SESSION_KEY_MANAGER_MODULE ) + if (!enabled) { + txs.push(enableSessionTx) + } + } else { + Logger.log(ERROR_MESSAGES.ACCOUNT_NOT_DEPLOYED) + txs.push(enableSessionTx) } + txs.push(permitTx) const userOpResponse = await smartAccount.sendTransaction(txs, buildUseropDto) - const sessionID = - ( - await sessionStorageClient.getSessionData({ - sessionPublicKey: sessionKeyAddress, - sessionValidationModule: DEFAULT_ABI_SVM_MODULE - }) - ).sessionID ?? "" - return { session: { sessionStorageClient, - sessionID + sessionIDInfo }, ...userOpResponse } @@ -290,7 +284,7 @@ export function getSessionDatum( return sessionKeyData } -type HardcodedReference = { +export type HardcodedReference = { raw: Hex } type BaseReferenceValue = string | number | bigint | boolean | ByteArray @@ -312,11 +306,11 @@ export function parseReferenceValue(referenceValue: AnyReferenceValue): Hex { if ((referenceValue as HardcodedReference)?.raw) { return (referenceValue as HardcodedReference)?.raw } - if (isAddress(referenceValue as string)) { - return pad(referenceValue as Hex, { size: 32 }) + if (typeof referenceValue === "bigint") { + return pad(toHex(referenceValue), { size: 32 }) as Hex } - return toHex(referenceValue as BaseReferenceValue) + return pad(referenceValue as Hex, { size: 32 }) } catch (e) { - return toHex(referenceValue as BaseReferenceValue) + return pad(referenceValue as Hex, { size: 32 }) } } diff --git a/src/modules/sessions/batch.ts b/src/modules/sessions/batch.ts index feef5f063..a2e2687c7 100644 --- a/src/modules/sessions/batch.ts +++ b/src/modules/sessions/batch.ts @@ -1,10 +1,8 @@ -import type { Chain, Hex } from "viem" +import type { Chain } from "viem" import { type CreateSessionDataParams, - DEFAULT_ABI_SVM_MODULE, DEFAULT_BATCHED_SESSION_ROUTER_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE, - MODULE_ADDRESSES, type Session, type SessionGrantedPayload, type SessionParams, @@ -15,6 +13,7 @@ import { type BiconomySmartAccountV2, type BuildUserOpOptions, ERROR_MESSAGES, + Logger, type Transaction } from "../../account" import type { ISessionStorage } from "../interfaces/ISessionStorage" @@ -97,7 +96,6 @@ export type CreateBatchSessionConfig = { * * const { wait, sessionID } = await createBatchSession( * smartAccount, - * sessionKeyAddress, * sessionStorageClient: sessionStorage, * leaves, * { @@ -117,27 +115,26 @@ export type CreateBatchSessionConfig = { export const createBatchSession = async ( smartAccount: BiconomySmartAccountV2, - sessionKeyAddress: Hex, /** The storage client to be used for storing the session data */ sessionStorageClient: ISessionStorage, /** An array of session configurations */ leaves: CreateSessionDataParams[], buildUseropDto?: BuildUserOpOptions ): Promise<SessionGrantedPayload> => { - const userAccountAddress = await smartAccount.getAddress() + const smartAccountAddress = await smartAccount.getAddress() const sessionsModule = await createSessionKeyManagerModule({ - smartAccountAddress: userAccountAddress, + smartAccountAddress, sessionStorageClient }) // Create batched session module const batchedSessionModule = await createBatchedSessionRouterModule({ - smartAccountAddress: userAccountAddress, + smartAccountAddress, sessionKeyManagerModule: sessionsModule }) - const { data: policyData } = + const { data: policyData, sessionIDInfo } = await batchedSessionModule.createSessionData(leaves) const permitTx = { @@ -146,87 +143,85 @@ export const createBatchSession = async ( } const isDeployed = await smartAccount.isAccountDeployed() - if (!isDeployed) throw new Error(ERROR_MESSAGES.ACCOUNT_NOT_DEPLOYED) const txs: Transaction[] = [] - const [isSessionModuleEnabled, isBatchedSessionModuleEnabled] = - await Promise.all([ - smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE), - smartAccount.isModuleEnabled(DEFAULT_BATCHED_SESSION_ROUTER_MODULE) - ]) - - if (!isSessionModuleEnabled) { - txs.push( - await smartAccount.getEnableModuleData(DEFAULT_SESSION_KEY_MANAGER_MODULE) - ) - } - if (!isBatchedSessionModuleEnabled) { - txs.push( - await smartAccount.getEnableModuleData( - DEFAULT_BATCHED_SESSION_ROUTER_MODULE - ) - ) + const enableSessionKeyTx = await smartAccount.getEnableModuleData( + DEFAULT_SESSION_KEY_MANAGER_MODULE + ) + const enableBatchedSessionTx = await smartAccount.getEnableModuleData( + DEFAULT_BATCHED_SESSION_ROUTER_MODULE + ) + if (isDeployed) { + const [isSessionModuleEnabled, isBatchedSessionModuleEnabled] = + await Promise.all([ + smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE), + smartAccount.isModuleEnabled(DEFAULT_BATCHED_SESSION_ROUTER_MODULE) + ]) + + if (!isSessionModuleEnabled) { + txs.push(enableSessionKeyTx) + } + if (!isBatchedSessionModuleEnabled) { + txs.push(enableBatchedSessionTx) + } + } else { + Logger.log(ERROR_MESSAGES.ACCOUNT_NOT_DEPLOYED) + txs.push(enableSessionKeyTx, enableBatchedSessionTx) } + txs.push(permitTx) const userOpResponse = await smartAccount.sendTransaction(txs, buildUseropDto) - const sessionID = - ( - await sessionStorageClient.getSessionData({ - sessionPublicKey: sessionKeyAddress, - sessionValidationModule: DEFAULT_ABI_SVM_MODULE - }) - ).sessionID ?? "" - return { session: { sessionStorageClient, - sessionID + sessionIDInfo }, ...userOpResponse } } -const types = ["ERC20", "ABI"] as const export type BatchSessionParamsPayload = { params: { batchSessionParams: SessionParams[] } } -export type SessionValidationType = (typeof types)[number] /** * getBatchSessionTxParams * * Retrieves the transaction parameters for a batched session. * - * @param sessionTypes - An array of session types. * @param transactions - An array of {@link Transaction}s. + * @param correspondingIndexes - An array of indexes for the transactions corresponding to the relevant session * @param session - {@link Session}. * @param chain - The chain. * @returns Promise<{@link BatchSessionParamsPayload}> - session parameters. * */ export const getBatchSessionTxParams = async ( - sessionValidationTypes: SessionValidationType[], transactions: Transaction[], - { sessionID, sessionStorageClient }: Session, + correspondingIndexes: number[], + { sessionIDInfo, sessionStorageClient }: Session, chain: Chain ): Promise<BatchSessionParamsPayload> => { - if (sessionValidationTypes.length !== transactions.length) { - throw new Error(ERROR_MESSAGES.INVALID_SESSION_TYPES) + if (correspondingIndexes.length !== transactions.length) { + throw new Error(ERROR_MESSAGES.INVALID_SESSION_INDEXES) } + const sessionSigner = await sessionStorageClient.getSignerBySession( { - sessionID + sessionID: sessionIDInfo[0] }, chain ) return { params: { - batchSessionParams: sessionValidationTypes.map((sessionType) => ({ - sessionSigner, - sessionValidationModule: MODULE_ADDRESSES[sessionType] - })) + batchSessionParams: correspondingIndexes.map( + (i): SessionParams => ({ + sessionSigner, + sessionID: sessionIDInfo[i] + }) + ) } } } diff --git a/src/modules/sessions/sessionSmartAccountClient.ts b/src/modules/sessions/sessionSmartAccountClient.ts index aa3155515..38dd6080a 100644 --- a/src/modules/sessions/sessionSmartAccountClient.ts +++ b/src/modules/sessions/sessionSmartAccountClient.ts @@ -71,9 +71,10 @@ export type ImpersonatedSmartAccountConfig = Omit< */ export const createSessionSmartAccountClient = async ( biconomySmartAccountConfig: ImpersonatedSmartAccountConfig, - { sessionStorageClient, sessionID }: Session, + { sessionStorageClient, sessionIDInfo }: Session, multiMode = false ): Promise<BiconomySmartAccountV2> => { + const sessionID = sessionIDInfo[0] // For a single session default to the first element const account = privateKeyToAccount(generatePrivateKey()) const chain = diff --git a/src/modules/utils/Constants.ts b/src/modules/utils/Constants.ts index 93d11684b..36ff89ca9 100644 --- a/src/modules/utils/Constants.ts +++ b/src/modules/utils/Constants.ts @@ -1,5 +1,4 @@ import type { Hex } from "viem" -import type { SessionValidationType } from "../../index.js" import type { ModuleVersion } from "./Types.js" export const DEFAULT_MODULE_VERSION: ModuleVersion = "V1_0_0" @@ -38,8 +37,3 @@ export const MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION = { export const DEFAULT_ABI_SVM_MODULE: Hex = "0x000006bC2eCdAe38113929293d241Cf252D91861" - -export const MODULE_ADDRESSES: Record<SessionValidationType, Hex> = { - ERC20: DEFAULT_ERC20_MODULE, - ABI: DEFAULT_ABI_SVM_MODULE -} diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index 4f79a1e2b..a6e7538ae 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -7,7 +7,7 @@ import { parseAbiParameters } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import type { ChainInfo, SignerData } from "../.." +import type { ChainInfo, HardcodedReference, SignerData } from "../.." import { type UserOperationStruct, getChain } from "../../account" export interface Rule { @@ -25,7 +25,13 @@ export interface Rule { */ condition: number /** The value to compare against */ - referenceValue: string | number | bigint | boolean | ByteArray + referenceValue: + | string + | number + | bigint + | boolean + | ByteArray + | HardcodedReference } /** diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 8467a5e27..6f3bdeb7c 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -93,9 +93,6 @@ describe("Account:Write", () => { } ]) - console.log(await smartAccount.getAccountAddress()) - console.log(await smartAccount.getSigner().getAddress(), "signer address") - userOp.signature = undefined const signedUserOp = await smartAccount.signUserOp(userOp) diff --git a/tests/modules/read.test.ts b/tests/modules/read.test.ts index e54381ce8..19307f3cc 100644 --- a/tests/modules/read.test.ts +++ b/tests/modules/read.test.ts @@ -72,7 +72,7 @@ describe("Modules:Read", () => { const EXPECTED_SESSION_KEY_DATA = "0x000000000000000000000000fa66e705cf2582cf56528386bb9dfca119767262000000000000000000000000747a4168db14f57871fa8cda8b5455d8c2a8e90a0000000000000000000000003079b249dfde4692d7844aa261f8cf7d927a0da50000000000000000000000000000000000000000000000000000000000989680" const EXPECTED_ABI_SESSION_DATA = - "0xFA66E705cf2582cF56528386Bb9dFCA119767262747A4168DB14F57871fa8cda8B5455D8C2a8e90aa9059cbb0000000000000000000000000098968000020000000000000000000000000000003079B249DFDE4692D7844aA261f8cf7D927A0DA5000101989680" + "0xFA66E705cf2582cF56528386Bb9dFCA119767262747A4168DB14F57871fa8cda8B5455D8C2a8e90aa9059cbb0000000000000000000000000098968000020000000000000000000000000000003079B249DFDE4692D7844aA261f8cf7D927A0DA50001010000000000000000000000000000000000000000000000000000000000989680" const sessionKeyEOA = "0xFA66E705cf2582cF56528386Bb9dFCA119767262" const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" const recipient = "0x3079B249DFDE4692D7844aA261f8cf7D927A0DA5" diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts index 3bcd99aa7..934caac17 100644 --- a/tests/modules/write.test.ts +++ b/tests/modules/write.test.ts @@ -5,12 +5,14 @@ import { createWalletClient, encodeAbiParameters, encodeFunctionData, + getContract, pad, parseAbi, parseEther, parseUnits, slice, - toFunctionSelector + toFunctionSelector, + toHex } from "viem" import { privateKeyToAccount } from "viem/accounts" import { beforeAll, describe, expect, test } from "vitest" @@ -66,11 +68,11 @@ describe("Modules:Write", () => { } = { single: { sessionStorageClient: new SessionMemoryStorage("0x"), - sessionID: "0x" + sessionIDInfo: ["0x"] }, batch: { sessionStorageClient: new SessionMemoryStorage("0x"), - sessionID: "0x" + sessionIDInfo: ["0x"] } } @@ -201,7 +203,6 @@ describe("Modules:Write", () => { valueLimit: 0n } ], - sessionKeyAddress, sessionStorageClient, withSponsorship ) @@ -212,7 +213,7 @@ describe("Modules:Write", () => { } = await wait() // Save the sessionID for the next test - stores.single.sessionID = session.sessionID + stores.single = session expect(success).toBe("true") Logger.log("Tx Hash: ", transactionHash) @@ -223,7 +224,7 @@ describe("Modules:Write", () => { test("should use the session to mint an NFT for the user", async () => { // Setup const session = stores.single - expect(stores.single.sessionID).toBeTruthy() // Should have been set in the previous test + expect(stores.single.sessionIDInfo).toHaveLength(1) // Should have been set in the previous test // Assume the real signer for userSmartAccountThree is no longer available (ie. user has logged out) const smartAccountThreeWithSession = await createSessionSmartAccountClient( @@ -319,7 +320,6 @@ describe("Modules:Write", () => { const { wait, session } = await createBatchSession( smartAccountFour, - sessionKeyAddress, sessionStorageClient, leaves, withSponsorship @@ -331,10 +331,9 @@ describe("Modules:Write", () => { } = await wait() expect(success).toBe("true") - stores.batch.sessionID = session.sessionID // Save the sessionID for the next test + stores.batch = session // Save the sessionID for the next test - expect(session.sessionID).toBeTruthy() - // Save the sessionID for the next test + expect(session.sessionIDInfo).toHaveLength(2) // Save the sessionID for the next test Logger.log("Tx Hash: ", transactionHash) Logger.log("session: ", { session }) @@ -343,10 +342,8 @@ describe("Modules:Write", () => { // User no longer has to be connected, // Only the reference to the relevant sessionID and the store from the previous step is needed to execute txs on the user's behalf test("should use the batch session to mint an NFT, and pay some token for the user", async () => { - // Setup // Setup const session = stores.batch - expect(session.sessionID).toBeTruthy() // Should have been set in the previous test // Assume the real signer for userSmartAccountFour is no longer available (ie. user has logged out); const smartAccountFourWithSession = await createSessionSmartAccountClient( @@ -391,8 +388,8 @@ describe("Modules:Write", () => { const txs = [transferTx, nftMintTx] const batchSessionParams = await getBatchSessionTxParams( - ["ERC20", "ABI"], txs, + [0, 1], session, chain ) @@ -842,4 +839,126 @@ describe("Modules:Write", () => { } ) }, 60000) + + test("should correctly parse the reference value", async () => { + const DUMMY_CONTRACT_ADDRESS: Hex = + "0xC834b3804817883a6b7072e815C3faf8682bFA13" + const byteCode = await publicClient.getBytecode({ + address: DUMMY_CONTRACT_ADDRESS as Hex + }) + + expect(byteCode).toBeTruthy() + + const { sessionKeyAddress, sessionStorageClient } = + await createSessionKeyEOA( + smartAccount, + chain, + new SessionMemoryStorage(smartAccountAddress) + ) + + const order = parseAbi(["function submitOrder(uint256 _orderNum)"]) + const cancel = parseAbi(["function submitCancel(uint256 _orderNum)"]) + + const sessionBatch: CreateSessionDataParams[] = [ + createABISessionDatum({ + interval: { + validUntil: 0, + validAfter: 0 + }, + sessionKeyAddress, + contractAddress: DUMMY_CONTRACT_ADDRESS, + functionSelector: cancel[0], + rules: [ + { + offset: 0, + condition: 0, + referenceValue: BigInt(1) + } + ], + valueLimit: 0n + }), + createABISessionDatum({ + interval: { + validUntil: 0, + validAfter: 0 + }, + sessionKeyAddress, + contractAddress: DUMMY_CONTRACT_ADDRESS, + functionSelector: order[0], + rules: [ + { + offset: 0, + condition: 0, + referenceValue: BigInt(1) + } + ], + valueLimit: 0n + }) + ] + + const { wait, session } = await createBatchSession( + smartAccount, + sessionStorageClient, + sessionBatch, + withSponsorship + ) + + const { + receipt: { transactionHash }, + success + } = await wait() + + expect(success).toBe("true") + expect(transactionHash).toBeTruthy() + + const smartAccountWithSession = await createSessionSmartAccountClient( + { + accountAddress: await smartAccount.getAccountAddress(), // Set the account address on behalf of the user + bundlerUrl, + paymasterUrl, + chainId: chain.id + }, + session, + true + ) + + const submitCancelTx: Transaction = { + to: DUMMY_CONTRACT_ADDRESS, + data: encodeFunctionData({ + abi: cancel, + functionName: "submitCancel", + args: [BigInt(1)] + }) + } + + const submitOrderTx: Transaction = { + to: DUMMY_CONTRACT_ADDRESS, + data: encodeFunctionData({ + abi: order, + functionName: "submitOrder", + args: [BigInt(1)] + }) + } + + const txs = [submitOrderTx, submitCancelTx] + const correspondingIndexes = [1, 0] // The order of the txs from the sessionBatch + + const batchSessionParams = await getBatchSessionTxParams( + txs, + correspondingIndexes, + session, + chain + ) + + const { wait: waitForTx } = await smartAccountWithSession.sendTransaction( + txs, + { + ...batchSessionParams, + ...withSponsorship + } + ) + + const { success: txSuccess } = await waitForTx() + expect(txSuccess).toBe("true") + }, 60000) }) From 5d4406e19d797b97405ec9395f9474c1240caf9e Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Thu, 23 May 2024 20:19:42 +0100 Subject: [PATCH 1186/1247] chore: improve useSession dx (#502) --- .env.example | 3 +- .github/workflows/coverage.yml | 1 + .github/workflows/size-report.yml | 4 + .github/workflows/test-read.yml | 1 + .github/workflows/test-write.yml | 3 + .size-limit.json | 18 +- CHANGELOG.md | 6 + examples/CREATE_AND_USE_A_BATCH_SESSION.md | 4 +- examples/CREATE_AND_USE_A_SESSION.md | 2 +- package.json | 11 +- src/account/BiconomySmartAccountV2.ts | 4 +- src/account/utils/Constants.ts | 4 +- .../session-storage/SessionFileStorage.ts | 48 +++-- .../session-storage/SessionMemoryStorage.ts | 2 +- src/modules/session-storage/utils.ts | 42 +++- src/modules/sessions/abi.ts | 42 +++- src/modules/sessions/batch.ts | 28 +-- .../sessions/sessionSmartAccountClient.ts | 27 ++- src/modules/utils/Helper.ts | 81 ++++++- tests/modules/write.test.ts | 202 +++++++++++++----- tests/utils.ts | 1 + 21 files changed, 409 insertions(+), 125 deletions(-) diff --git a/.env.example b/.env.example index 764c9ab79..d1e8fcfe8 100644 --- a/.env.example +++ b/.env.example @@ -4,4 +4,5 @@ BUNDLER_URL=https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45i E2E_BICO_PAYMASTER_KEY_AMOY= E2E_BICO_PAYMASTER_KEY_BASE= CHAIN_ID=80002 -CODECOV_TOKEN= \ No newline at end of file +CODECOV_TOKEN= +TESTING=false diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 653e7b1e3..6b2c9aebc 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -27,6 +27,7 @@ jobs: E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} CHAIN_ID: 80002 + TESTING: true - name: report coverage uses: davelosert/vitest-coverage-report-action@v2 diff --git a/.github/workflows/size-report.yml b/.github/workflows/size-report.yml index 0cbdac716..68718940e 100644 --- a/.github/workflows/size-report.yml +++ b/.github/workflows/size-report.yml @@ -19,6 +19,10 @@ jobs: - name: Clone repository uses: actions/checkout@v3 + - uses: actions/setup-node@v4 + with: + node-version: 18 + - name: Set up Bun uses: oven-sh/setup-bun@v1 diff --git a/.github/workflows/test-read.yml b/.github/workflows/test-read.yml index 4a36c8c45..f6338828d 100644 --- a/.github/workflows/test-read.yml +++ b/.github/workflows/test-read.yml @@ -26,3 +26,4 @@ jobs: E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} CHAIN_ID: 80002 + TESTING: true diff --git a/.github/workflows/test-write.yml b/.github/workflows/test-write.yml index ee749bdbe..33c230deb 100644 --- a/.github/workflows/test-write.yml +++ b/.github/workflows/test-write.yml @@ -38,6 +38,7 @@ jobs: E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} CHAIN_ID: 80002 + TESTING: true - name: Run the paymaster tests run: bun run test:ci -t=Paymaster:Write @@ -48,6 +49,7 @@ jobs: E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} CHAIN_ID: 80002 + TESTING: true - name: Run the modules tests run: bun run test:ci -t=Modules:Write @@ -58,3 +60,4 @@ jobs: E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} CHAIN_ID: 80002 + TESTING: true diff --git a/.size-limit.json b/.size-limit.json index 7fa63ece7..2fa7e747b 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -3,35 +3,41 @@ "name": "core (esm)", "path": "./dist/_esm/index.js", "limit": "65 kB", - "import": "*" + "import": "*", + "ignore": ["node:fs"] }, { "name": "core (cjs)", "path": "./dist/_cjs/index.js", - "limit": "65 kB" + "limit": "65 kB", + "ignore": ["node:fs"] }, { "name": "account (tree-shaking)", "path": "./dist/_esm/index.js", "limit": "65 kB", - "import": "{ createSmartAccountClient }" + "import": "{ createSmartAccountClient }", + "ignore": ["node:fs"] }, { "name": "bundler (tree-shaking)", "path": "./dist/_esm/bundler/index.js", "limit": "5 kB", - "import": "{ createBundler }" + "import": "{ createBundler }", + "ignore": ["node:fs"] }, { "name": "paymaster (tree-shaking)", "path": "./dist/_esm/paymaster/index.js", "limit": "5 kB", - "import": "{ createPaymaster }" + "import": "{ createPaymaster }", + "ignore": ["node:fs"] }, { "name": "modules (tree-shaking)", "path": "./dist/_esm/modules/index.js", "limit": "60 kB", - "import": "{ createSessionKeyManagerModule }" + "import": "{ createSessionKeyManagerModule }", + "ignore": ["node:fs"] } ] diff --git a/CHANGELOG.md b/CHANGELOG.md index 0eb5011ac..5da3d47f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # @biconomy/account +## 4.4.3 + +### Patch Changes + +- Abstract away SessionStorageClient and SessionIDInfo + ## 4.4.2 ### Patch Changes diff --git a/examples/CREATE_AND_USE_A_BATCH_SESSION.md b/examples/CREATE_AND_USE_A_BATCH_SESSION.md index aa195d642..b62f6cbd8 100644 --- a/examples/CREATE_AND_USE_A_BATCH_SESSION.md +++ b/examples/CREATE_AND_USE_A_BATCH_SESSION.md @@ -95,7 +95,7 @@ const smartAccountWithSession = await createSessionSmartAccountClient( paymasterUrl, chainId, }, - session, + smartAccountAddress // Storage client, full Session or smartAccount address if using default storage true // if batching ); @@ -122,7 +122,7 @@ const correspondingIndexes = [1, 0]; // The order of the txs from the sessionBat const batchSessionParams = await getBatchSessionTxParams( txs, correspondingIndexes, - session, + smartAccountAddress, // Storage client, full Session or smartAccount address if using default storage chain ); diff --git a/examples/CREATE_AND_USE_A_SESSION.md b/examples/CREATE_AND_USE_A_SESSION.md index 8b2e1c4c1..15258630d 100644 --- a/examples/CREATE_AND_USE_A_SESSION.md +++ b/examples/CREATE_AND_USE_A_SESSION.md @@ -94,7 +94,7 @@ const smartAccountWithSession = await createSessionSmartAccountClient( paymasterUrl, chainId, }, - session + smartAccountAddress // Storage client, full Session or smartAccount address if using default storage ); const { wait: mintWait } = await smartAccountWithSession.sendTransaction( diff --git a/package.json b/package.json index 0ea4a4cb7..e5e7f1384 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "sideEffects": false, "name": "@biconomy/account", "author": "Biconomy", - "version": "4.4.2", + "version": "4.4.3", "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ "erc-7579", @@ -46,7 +46,10 @@ "default": "./_cjs/modules/index.js" } }, - "files": ["dist/*", "README.md"], + "files": [ + "dist/*", + "README.md" + ], "scripts": { "format": "biome format . --write", "lint": "biome check .", @@ -103,7 +106,9 @@ "viem": "^2" }, "commitlint": { - "extends": ["@commitlint/config-conventional"] + "extends": [ + "@commitlint/config-conventional" + ] }, "simple-git-hooks": { "pre-commit": "bun run format && bun run lint:fix", diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index d3c7bf626..d39e2264b 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -882,7 +882,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // dummy signature depends on the validation module supplied. async getDummySignatures(_params?: ModuleInfo): Promise<Hex> { - const params = { ..._params, ...(this.sessionData ? this.sessionData : {}) } + const params = { ...(this.sessionData ? this.sessionData : {}), ..._params } this.isActiveValidationModuleDefined() return (await this.activeValidationModule.getDummySignature(params)) as Hex } @@ -913,7 +913,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { userOp: Partial<UserOperationStruct>, _params?: SendUserOpParams ): Promise<UserOperationStruct> { - const params = { ..._params, ...(this.sessionData ? this.sessionData : {}) } + const params = { ...(this.sessionData ? this.sessionData : {}), ..._params } this.isActiveValidationModuleDefined() const requiredFields: UserOperationKey[] = [ diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index 50ddb5826..a9608670d 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -85,7 +85,9 @@ export const ERROR_MESSAGES = { "rpcUrl is required for PrivateKeyAccount signer type, please provide it in the config", INVALID_SESSION_INDEXES: "Session indexes and transactions must be of the same length and correspond to each other", - SIGNER_REQUIRED: "Signer is required for creating a smart account" + SIGNER_REQUIRED: "Signer is required for creating a smart account", + UNKNOW_SESSION_ARGUMENTS: + "You have not provided the necessary information to find and use a session" } export const NATIVE_TOKEN_ALIAS: Hex = diff --git a/src/modules/session-storage/SessionFileStorage.ts b/src/modules/session-storage/SessionFileStorage.ts index 0a66b8302..fb92d0a1d 100644 --- a/src/modules/session-storage/SessionFileStorage.ts +++ b/src/modules/session-storage/SessionFileStorage.ts @@ -1,3 +1,4 @@ +import * as nodeFs from "node:fs" import { http, type Chain, type Hex, createWalletClient } from "viem" import { privateKeyToAccount } from "viem/accounts" import { getRandomSigner } from "../.." @@ -25,20 +26,24 @@ export class SessionFileStorage implements ISessionStorage { // biome-ignore lint/suspicious/noExplicitAny: <explanation> private async readDataFromFile(type: "sessions" | "signers"): Promise<any> { return new Promise((resolve) => { - // @ts-ignore - fs.readFile(this.getStorageFilePath(type), "utf8", (err, data) => { - if (err) { - // Handle errors appropriately - resolve(undefined) - } else { - if (!data) { - resolve(null) + nodeFs.readFile( + this.getStorageFilePath(type), + "utf8", + // biome-ignore lint/suspicious/noExplicitAny: <explanation> + (err: any, data: any) => { + if (err) { + // Handle errors appropriately + resolve(undefined) } else { - resolve(JSON.parse(data)) + if (!data) { + resolve(null) + } else { + resolve(JSON.parse(data)) + } + // resolve(JSON.parse(data)); } - // resolve(JSON.parse(data)); } - }) + ) }) } @@ -53,15 +58,20 @@ export class SessionFileStorage implements ISessionStorage { ): Promise<void> { return new Promise((resolve, reject) => { const filePath = this.getStorageFilePath(type) - // @ts-ignore - fs.writeFile(filePath, JSON.stringify(data), "utf8", (err) => { - if (err) { - // Handle errors appropriately - reject(err) - } else { - resolve() + nodeFs.writeFile( + filePath, + JSON.stringify(data), + "utf8", + // biome-ignore lint/suspicious/noExplicitAny: <explanation> + (err: any) => { + if (err) { + // Handle errors appropriately + reject(err) + } else { + resolve() + } } - }) + ) }) } diff --git a/src/modules/session-storage/SessionMemoryStorage.ts b/src/modules/session-storage/SessionMemoryStorage.ts index 670f14297..1278352bd 100644 --- a/src/modules/session-storage/SessionMemoryStorage.ts +++ b/src/modules/session-storage/SessionMemoryStorage.ts @@ -1,13 +1,13 @@ import { http, type Chain, type Hex, createWalletClient } from "viem" import { privateKeyToAccount } from "viem/accounts" import { type SmartAccountSigner, WalletClientSigner } from "../../account" -import { getRandomSigner } from "../../index.js" import type { ISessionStorage, SessionLeafNode, SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage.js" +import { getRandomSigner } from "../utils/Helper.js" import type { SignerData } from "../utils/Types.js" type MemoryStore = { diff --git a/src/modules/session-storage/utils.ts b/src/modules/session-storage/utils.ts index 196821f72..3348f00e9 100644 --- a/src/modules/session-storage/utils.ts +++ b/src/modules/session-storage/utils.ts @@ -1,8 +1,12 @@ -import type { Chain, Hex } from "viem" -import { SessionFileStorage, SessionLocalStorage } from "../.." +import type { Address, Chain, Hex } from "viem" import type { BiconomySmartAccountV2, SmartAccountSigner } from "../../account" import type { ISessionStorage } from "../interfaces/ISessionStorage" import { supportsLocalStorage } from "./SessionLocalStorage" +import { + SessionFileStorage, + SessionLocalStorage, + SessionMemoryStorage +} from "./index.js" export type SessionStoragePayload = { sessionKeyAddress: Hex @@ -29,11 +33,37 @@ export const createSessionKeyEOA = async ( ): Promise<SessionStoragePayload> => { const userAccountAddress = await smartAccount.getAddress() const sessionStorageClient = - _sessionStorageClient ?? - new (supportsLocalStorage ? SessionLocalStorage : SessionFileStorage)( - userAccountAddress - ) + _sessionStorageClient ?? getDefaultStorageClient(userAccountAddress) const newSigner = await sessionStorageClient.addSigner(undefined, chain) const sessionKeyAddress = await newSigner.getAddress() return { sessionKeyAddress, signer: newSigner, sessionStorageClient } } + +export const inTesting = (): boolean => { + try { + return process?.env?.TESTING?.toString() === "true" + } catch (e) { + return false + } +} + +export const inNodeBackend = (): boolean => { + try { + return typeof process === "object" && process?.release?.name === "node" + } catch (e) { + return false + } +} + +export const getDefaultStorageClient = (address: Address): ISessionStorage => { + if (inTesting()) { + return new SessionMemoryStorage(address) + } + if (supportsLocalStorage) { + return new SessionLocalStorage(address) + } + if (inNodeBackend()) { + return new SessionFileStorage(address) + } + throw new Error("No session storage client available") +} diff --git a/src/modules/sessions/abi.ts b/src/modules/sessions/abi.ts index a6a6e9bed..b80ed9454 100644 --- a/src/modules/sessions/abi.ts +++ b/src/modules/sessions/abi.ts @@ -1,6 +1,7 @@ import { type AbiFunction, type ByteArray, + type Chain, type Hex, concat, pad, @@ -11,6 +12,7 @@ import { import type { CreateSessionDataParams, Permission, + SessionParams, UserOpResponse } from "../../" import { @@ -20,12 +22,13 @@ import { Logger, type Transaction } from "../../account" -import { createSessionKeyManagerModule } from "../index" +import { createSessionKeyManagerModule, resumeSession } from "../index" import type { ISessionStorage } from "../interfaces/ISessionStorage" import { DEFAULT_ABI_SVM_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE } from "../utils/Constants" +import type { SessionSearchParam } from "../utils/Helper" import type { DeprecatedPermission, Rule } from "../utils/Helper" export type SessionConfig = { @@ -314,3 +317,40 @@ export function parseReferenceValue(referenceValue: AnyReferenceValue): Hex { return pad(referenceValue as Hex, { size: 32 }) } } + +export type SingleSessionParamsPayload = { + params: SessionParams +} +/** + * getSingleSessionTxParams + * + * Retrieves the transaction parameters for a batched session. + * + * @param correspondingIndex - An index for the transaction corresponding to the relevant session + * @param conditionalSession - {@link SessionSearchParam} The session data that contains the sessionID and sessionSigner. If not provided, The default session storage (localStorage in browser, fileStorage in node backend) is used to fetch the sessionIDInfo + * @param chain - The chain. + * @returns Promise<{@link BatchSessionParamsPayload}> - session parameters. + * + */ +export const getSingleSessionTxParams = async ( + conditionalSession: SessionSearchParam, + chain: Chain, + correspondingIndex = 0 +): Promise<SingleSessionParamsPayload> => { + const { sessionStorageClient, sessionIDInfo } = + await resumeSession(conditionalSession) + + const sessionSigner = await sessionStorageClient.getSignerBySession( + { + sessionID: sessionIDInfo[0] + }, + chain + ) + + return { + params: { + sessionSigner, + sessionID: sessionIDInfo[correspondingIndex] + } + } +} diff --git a/src/modules/sessions/batch.ts b/src/modules/sessions/batch.ts index a2e2687c7..af4635e2f 100644 --- a/src/modules/sessions/batch.ts +++ b/src/modules/sessions/batch.ts @@ -1,14 +1,4 @@ import type { Chain } from "viem" -import { - type CreateSessionDataParams, - DEFAULT_BATCHED_SESSION_ROUTER_MODULE, - DEFAULT_SESSION_KEY_MANAGER_MODULE, - type Session, - type SessionGrantedPayload, - type SessionParams, - createBatchedSessionRouterModule, - createSessionKeyManagerModule -} from ".." import { type BiconomySmartAccountV2, type BuildUserOpOptions, @@ -16,6 +6,17 @@ import { Logger, type Transaction } from "../../account" +import { + type CreateSessionDataParams, + DEFAULT_BATCHED_SESSION_ROUTER_MODULE, + DEFAULT_SESSION_KEY_MANAGER_MODULE, + type SessionGrantedPayload, + type SessionParams, + type SessionSearchParam, + createBatchedSessionRouterModule, + createSessionKeyManagerModule, + resumeSession +} from "../index.js" import type { ISessionStorage } from "../interfaces/ISessionStorage" export type CreateBatchSessionConfig = { @@ -192,7 +193,7 @@ export type BatchSessionParamsPayload = { * * @param transactions - An array of {@link Transaction}s. * @param correspondingIndexes - An array of indexes for the transactions corresponding to the relevant session - * @param session - {@link Session}. + * @param conditionalSession - {@link SessionSearchParam} The session data that contains the sessionID and sessionSigner. If not provided, The default session storage (localStorage in browser, fileStorage in node backend) is used to fetch the sessionIDInfo * @param chain - The chain. * @returns Promise<{@link BatchSessionParamsPayload}> - session parameters. * @@ -200,13 +201,16 @@ export type BatchSessionParamsPayload = { export const getBatchSessionTxParams = async ( transactions: Transaction[], correspondingIndexes: number[], - { sessionIDInfo, sessionStorageClient }: Session, + conditionalSession: SessionSearchParam, chain: Chain ): Promise<BatchSessionParamsPayload> => { if (correspondingIndexes.length !== transactions.length) { throw new Error(ERROR_MESSAGES.INVALID_SESSION_INDEXES) } + const { sessionStorageClient, sessionIDInfo } = + await resumeSession(conditionalSession) + const sessionSigner = await sessionStorageClient.getSignerBySession( { sessionID: sessionIDInfo[0] diff --git a/src/modules/sessions/sessionSmartAccountClient.ts b/src/modules/sessions/sessionSmartAccountClient.ts index 38dd6080a..e7804258b 100644 --- a/src/modules/sessions/sessionSmartAccountClient.ts +++ b/src/modules/sessions/sessionSmartAccountClient.ts @@ -1,17 +1,19 @@ import { http, type Hex, createWalletClient } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { - createBatchedSessionRouterModule, - createSessionKeyManagerModule -} from ".." import { type BiconomySmartAccountV2, type BiconomySmartAccountV2Config, createSmartAccountClient, getChain } from "../../account" +import { + type SessionSearchParam, + createBatchedSessionRouterModule, + createSessionKeyManagerModule, + resumeSession +} from "../index.js" +import type { ISessionStorage } from "../interfaces/ISessionStorage" import type { ModuleInfo } from "../utils/Types" -import type { Session } from "./abi" export type ImpersonatedSmartAccountConfig = Omit< BiconomySmartAccountV2Config, @@ -30,6 +32,8 @@ export type ImpersonatedSmartAccountConfig = Omit< * The sessionSigner is used instead for signing transactions, which is fetched from the session storage using the sessionID. {@link ISessionStorage} * * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance {@link ImpersonatedSmartAccountConfig}. + * @param conditionalSession - {@link SessionSearchParam} The session data that contains the sessionID and sessionSigner. If not provided, The default session storage (localStorage in browser, fileStorage in node backend) is used to fetch the sessionIDInfo + * @param multiMode - If true, the smart account instance will use the batchedSessionModule for validation, otherwise a single session is assumed. * @returns A promise that resolves to a new instance of {@link BiconomySmartAccountV2}. * @throws An error if something is wrong with the smart account instance creation. * @@ -59,10 +63,7 @@ export type ImpersonatedSmartAccountConfig = Omit< * paymasterUrl, * chainId * }, - * { - * sessionStorageClient: storeForSingleSession, - * sessionID - * } + * storeForSingleSession // Can be ommitted if using default session storage (localStorage in browser, fileStorage in node backend) * ) * * // The smartAccountWithSession instance can now be used to interact with the blockchain on behalf of the user in the same manner as a regular smart account instance. @@ -71,10 +72,14 @@ export type ImpersonatedSmartAccountConfig = Omit< */ export const createSessionSmartAccountClient = async ( biconomySmartAccountConfig: ImpersonatedSmartAccountConfig, - { sessionStorageClient, sessionIDInfo }: Session, + conditionalSession: SessionSearchParam, multiMode = false ): Promise<BiconomySmartAccountV2> => { - const sessionID = sessionIDInfo[0] // For a single session default to the first element + const { sessionStorageClient, sessionIDInfo } = await resumeSession( + conditionalSession ?? biconomySmartAccountConfig.accountAddress + ) + const sessionID = sessionIDInfo[0] // Default to the first element to find the signer + const account = privateKeyToAccount(generatePrivateKey()) const chain = diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index a6e7538ae..6d61b52e0 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -1,15 +1,27 @@ import { + type Address, type ByteArray, type Chain, type Hex, encodeAbiParameters, + isAddress, keccak256, parseAbiParameters } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import type { ChainInfo, HardcodedReference, SignerData } from "../.." -import { type UserOperationStruct, getChain } from "../../account" - +import { + ERROR_MESSAGES, + type UserOperationStruct, + getChain +} from "../../account" +import type { + ChainInfo, + HardcodedReference, + Session, + SignerData +} from "../../index.js" +import type { ISessionStorage } from "../interfaces/ISessionStorage" +import { getDefaultStorageClient } from "../session-storage/utils" export interface Rule { /** The index of the param from the selected contract function upon which the condition will be applied */ offset: number @@ -135,3 +147,66 @@ export const parseChain = (chainInfo: ChainInfo): Chain => { if (typeof chainInfo === "number") return getChain(chainInfo) return chainInfo } +/** + * + * SessionSearchParam - The arguments that can be used to reconstruct a session object + * + * It can be one of the following: + * A session object {@link Session} + * A session storage client {@link ISessionStorage} + * A smart account address {@link Address} + * + * When a session object is provided, it is returned as is + * When a session storage client is provided, the session object is reconstructed from the session storage client using **all** of the sessionIds found in the storage client + * When a smart account address is provided, the default session storage client is used to reconstruct the session object using **all** of the sessionIds found in the storage client + * + */ +export type SessionSearchParam = Session | ISessionStorage | Address +/** + * + * reconstructSession - Reconstructs a session object from the provided arguments + * + * If a session object is provided, it is returned as is + * If a session storage client is provided, the session object is reconstructed from the session storage client using **all** of the sessionIds found in the storage client + * If a smart account address is provided, the default session storage client is used to reconstruct the session object using **all** of the sessionIds found in the storage client + * + * @param searchParam - This can be a session object {@link Session}, a session storage client {@link ISessionStorage} or a smart account address {@link Address} + * @returns A session object + * @error If the provided arguments do not match any of the above cases + */ +export const resumeSession = async ( + searchParam: SessionSearchParam +): Promise<Session> => { + const providedFullSession = !!(searchParam as Session)?.sessionIDInfo?.length + const providedStorageClient = !!(searchParam as ISessionStorage) + .smartAccountAddress?.length + const providedSmartAccountAddress = isAddress(searchParam as Address) + + if (providedFullSession) { + const session = searchParam as Session + return session + } + if (providedStorageClient) { + const sessionStorageClient = searchParam as ISessionStorage + const leafArray = await sessionStorageClient.getAllSessionData() + const sessionIDInfo = leafArray.map(({ sessionID }) => sessionID as string) + const session: Session = { + sessionIDInfo, + sessionStorageClient + } + return session + } + if (providedSmartAccountAddress) { + const smartAccountAddress = searchParam as Address + // Use the default session storage client + const sessionStorageClient = getDefaultStorageClient(smartAccountAddress) + const leafArray = await sessionStorageClient.getAllSessionData() + const sessionIDInfo = leafArray.map(({ sessionID }) => sessionID as string) + const session: Session = { + sessionIDInfo, + sessionStorageClient + } + return session + } + throw new Error(ERROR_MESSAGES.UNKNOW_SESSION_ARGUMENTS) +} diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts index 934caac17..22ad24ccb 100644 --- a/tests/modules/write.test.ts +++ b/tests/modules/write.test.ts @@ -5,14 +5,12 @@ import { createWalletClient, encodeAbiParameters, encodeFunctionData, - getContract, pad, parseAbi, parseEther, parseUnits, slice, - toFunctionSelector, - toHex + toFunctionSelector } from "viem" import { privateKeyToAccount } from "viem/accounts" import { beforeAll, describe, expect, test } from "vitest" @@ -21,6 +19,7 @@ import { type Transaction, type TransferOwnershipCompatibleModule, type WalletClientSigner, + addressEquals, createSmartAccountClient } from "../../src/account" import { Logger, getChain } from "../../src/account" @@ -33,16 +32,19 @@ import { ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION, createMultiChainValidationModule, createSessionKeyManagerModule, - getABISVMSessionKeyData + getABISVMSessionKeyData, + resumeSession } from "../../src/modules" import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" import { SessionMemoryStorage } from "../../src/modules/session-storage/SessionMemoryStorage" import { createSessionKeyEOA } from "../../src/modules/session-storage/utils" import { + type Policy, type Session, createABISessionDatum, - createSession + createSession, + getSingleSessionTxParams } from "../../src/modules/sessions/abi" import { createBatchSession, @@ -62,20 +64,6 @@ describe("Modules:Write", () => { paymasterServiceData: { mode: PaymasterMode.SPONSORED } } - const stores: { - single: Session - batch: Session - } = { - single: { - sessionStorageClient: new SessionMemoryStorage("0x"), - sessionIDInfo: ["0x"] - }, - batch: { - sessionStorageClient: new SessionMemoryStorage("0x"), - sessionIDInfo: ["0x"] - } - } - const { chain, chainId, @@ -154,13 +142,6 @@ describe("Modules:Write", () => { smartAccountAddressThree = await smartAccountThree.getAccountAddress() smartAccountAddressFour = await smartAccountFour.getAccountAddress() - stores.single.sessionStorageClient = new SessionMemoryStorage( - smartAccountAddressThree - ) - stores.batch.sessionStorageClient = new SessionMemoryStorage( - smartAccountAddressFour - ) - await Promise.all([ topUp(smartAccountAddress, undefined, token), topUp(smartAccountAddress, undefined), @@ -176,11 +157,7 @@ describe("Modules:Write", () => { // User must be connected with a wallet to grant permissions test("should create a single session on behalf of a user", async () => { const { sessionKeyAddress, sessionStorageClient } = - await createSessionKeyEOA( - smartAccountThree, - chain, - stores.single.sessionStorageClient - ) + await createSessionKeyEOA(smartAccountThree, chain) const { wait, session } = await createSession( smartAccountThree, @@ -212,9 +189,6 @@ describe("Modules:Write", () => { success } = await wait() - // Save the sessionID for the next test - stores.single = session - expect(success).toBe("true") Logger.log("Tx Hash: ", transactionHash) }, 50000) @@ -222,10 +196,6 @@ describe("Modules:Write", () => { // User no longer has to be connected, // Only the reference to the relevant sessionID and the store from the previous step is needed to execute txs on the user's behalf test("should use the session to mint an NFT for the user", async () => { - // Setup - const session = stores.single - expect(stores.single.sessionIDInfo).toHaveLength(1) // Should have been set in the previous test - // Assume the real signer for userSmartAccountThree is no longer available (ie. user has logged out) const smartAccountThreeWithSession = await createSessionSmartAccountClient( { @@ -234,7 +204,7 @@ describe("Modules:Write", () => { paymasterUrl, chainId }, - session + smartAccountAddressThree // Storage client, full Session or smartAccount address if using default storage ) const sessionSmartAccountThreeAddress = @@ -276,11 +246,7 @@ describe("Modules:Write", () => { // User must be connected with a wallet to grant permissions test("should create a batch session on behalf of a user", async () => { const { sessionKeyAddress, sessionStorageClient } = - await createSessionKeyEOA( - smartAccountFour, - chain, - stores.batch.sessionStorageClient - ) + await createSessionKeyEOA(smartAccountFour, chain) const leaves: CreateSessionDataParams[] = [ createERC20SessionDatum({ @@ -331,9 +297,6 @@ describe("Modules:Write", () => { } = await wait() expect(success).toBe("true") - stores.batch = session // Save the sessionID for the next test - - expect(session.sessionIDInfo).toHaveLength(2) // Save the sessionID for the next test Logger.log("Tx Hash: ", transactionHash) Logger.log("session: ", { session }) @@ -342,25 +305,28 @@ describe("Modules:Write", () => { // User no longer has to be connected, // Only the reference to the relevant sessionID and the store from the previous step is needed to execute txs on the user's behalf test("should use the batch session to mint an NFT, and pay some token for the user", async () => { - // Setup - const session = stores.batch + const { sessionStorageClient } = await resumeSession( + smartAccountAddressFour // Use the store from the previous test, you could pass in the smartAccount address, the full session or your custom sessionStorageClient + ) // Assume the real signer for userSmartAccountFour is no longer available (ie. user has logged out); const smartAccountFourWithSession = await createSessionSmartAccountClient( { - accountAddress: smartAccountAddressFour, // Set the account address on behalf of the user + accountAddress: sessionStorageClient.smartAccountAddress, // Set the account address on behalf of the user bundlerUrl, paymasterUrl, chainId }, - session, + smartAccountAddressFour, // Storage client, full Session or smartAccount address if using default storage true // if batching ) const sessionSmartAccountFourAddress = await smartAccountFourWithSession.getAccountAddress() - expect(sessionSmartAccountFourAddress).toEqual(smartAccountAddressFour) + expect( + addressEquals(sessionSmartAccountFourAddress, smartAccountAddressFour) + ).toBe(true) const transferTx: Transaction = { to: token, @@ -390,7 +356,7 @@ describe("Modules:Write", () => { const batchSessionParams = await getBatchSessionTxParams( txs, [0, 1], - session, + smartAccountAddressFour, chain ) @@ -840,7 +806,7 @@ describe("Modules:Write", () => { ) }, 60000) - test("should correctly parse the reference value", async () => { + test("should correctly parse the reference value and explicitly pass the storage client while resuming the session", async () => { const DUMMY_CONTRACT_ADDRESS: Hex = "0xC834b3804817883a6b7072e815C3faf8682bFA13" const byteCode = await publicClient.getBytecode({ @@ -918,7 +884,7 @@ describe("Modules:Write", () => { paymasterUrl, chainId: chain.id }, - session, + sessionStorageClient, // Storage client, full Session or smartAccount address if using default storage true ) @@ -946,7 +912,7 @@ describe("Modules:Write", () => { const batchSessionParams = await getBatchSessionTxParams( txs, correspondingIndexes, - session, + sessionStorageClient, chain ) @@ -961,4 +927,128 @@ describe("Modules:Write", () => { const { success: txSuccess } = await waitForTx() expect(txSuccess).toBe("true") }, 60000) + + test("should use single session for submitting orders", async () => { + const DUMMY_CONTRACT_ADDRESS: Hex = + "0xC834b3804817883a6b7072e815C3faf8682bFA13" + const byteCode = await publicClient.getBytecode({ + address: DUMMY_CONTRACT_ADDRESS as Hex + }) + + expect(byteCode).toBeTruthy() + + const { sessionKeyAddress, sessionStorageClient } = + await createSessionKeyEOA(smartAccount, chain) + + const order = parseAbi(["function submitOrder(uint256 _orderNum)"]) + const cancel = parseAbi(["function submitCancel(uint256 _orderNum)"]) + + const policy: Policy[] = [ + { + interval: { + validUntil: 0, + validAfter: 0 + }, + sessionKeyAddress, + contractAddress: DUMMY_CONTRACT_ADDRESS, + functionSelector: cancel[0], + rules: [ + { + offset: 0, + condition: 0, + referenceValue: BigInt(1) + } + ], + valueLimit: 0n + }, + { + interval: { + validUntil: 0, + validAfter: 0 + }, + sessionKeyAddress, + contractAddress: DUMMY_CONTRACT_ADDRESS, + functionSelector: order[0], + rules: [ + { + offset: 0, + condition: 0, + referenceValue: BigInt(1) + } + ], + valueLimit: 0n + } + ] + + const { wait, session } = await createSession( + smartAccount, + policy, + sessionStorageClient, + withSponsorship + ) + + const { + receipt: { transactionHash }, + success + } = await wait() + + expect(success).toBe("true") + expect(transactionHash).toBeTruthy() + + const smartAccountWithSession = await createSessionSmartAccountClient( + { + accountAddress: smartAccountAddress, // Set the account address on behalf of the user + bundlerUrl, + paymasterUrl, + chainId: chain.id + }, + smartAccountAddress + ) + + const submitCancelTx: Transaction = { + to: DUMMY_CONTRACT_ADDRESS, + data: encodeFunctionData({ + abi: cancel, + functionName: "submitCancel", + args: [BigInt(1)] + }) + } + + const submitOrderTx: Transaction = { + to: DUMMY_CONTRACT_ADDRESS, + data: encodeFunctionData({ + abi: order, + functionName: "submitOrder", + args: [BigInt(1)] + }) + } + + const singleSessionParamsForCancel = await getSingleSessionTxParams( + session, + chain, + 0 + ) + + const singleSessionParamsForOrder = await getSingleSessionTxParams( + session, + chain, + 1 + ) + + const { wait: waitForCancelTx } = + await smartAccountWithSession.sendTransaction(submitCancelTx, { + ...singleSessionParamsForCancel, + ...withSponsorship + }) + const { wait: waitForOrderTx } = + await smartAccountWithSession.sendTransaction(submitOrderTx, { + ...singleSessionParamsForOrder, + ...withSponsorship + }) + + const { success: txCancelSuccess } = await waitForCancelTx() + const { success: txOrderSuccess } = await waitForOrderTx() + expect(txCancelSuccess).toBe("true") + expect(txOrderSuccess).toBe("true") + }, 60000) }) diff --git a/tests/utils.ts b/tests/utils.ts index 908982e3b..11b6228dd 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -23,6 +23,7 @@ export const getEnvVars = () => { "E2E_BICO_PAYMASTER_KEY_BASE", "CHAIN_ID" ] + const errorFields = fields.filter((field) => !process?.env?.[field]) if (errorFields.length) { throw new Error( From 6a0ddee6cf6fdc03cb1f267dbf34469b35335d5f Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Mon, 27 May 2024 11:53:25 +0300 Subject: [PATCH 1187/1247] feat: simulate user op tests + ts doc (#503) * feat - simulateUserOp execution * simulateUserOp tests refactor * refactor simulateUserOp * removed simulateUserOp method, replaced by buildUserOp * fix lint * fixed lint & build errors --------- Co-authored-by: GabiDev <gv@popoo.io> --- src/account/BiconomySmartAccountV2.ts | 2 + tests/account/read.test.ts | 72 + yarn.lock | 4949 +++++++++++++++++++++++++ 3 files changed, 5023 insertions(+) create mode 100644 yarn.lock diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index d39e2264b..4049b17dd 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -1527,6 +1527,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { /** * Builds a user operation * + * This method will also simulate the validation and execution of the user operation, telling the user if the user operation will be successful or not. + * * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#build-useroperation * * @param transactions Array of {@link Transaction} to be sent. diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index b0320aace..be9ba68a1 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -807,4 +807,76 @@ describe("Account:Read", () => { expect(isVerified).toBeTruthy() }) + + test.concurrent( + "should simulate a user operation execution, expecting to fail", + async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl + }) + + console.log(smartAccountAddress, "smartAccountAdderss") + + const balances = await smartAccount.getBalances() + expect(balances[0].amount).toBeGreaterThan(0n) + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function deposit()"]), + functionName: "deposit" + }) + + const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" + + // fail if value is not bigger than 1 + // the contract call requires a deposit of at least 1 wei + const tx1 = { + to: amoyTestContract as Hex, + data: encodedCall, + value: 0 + } + const tx2 = { + to: amoyTestContract as Hex, + data: encodedCall, + value: 2 + } + + await expect(smartAccount.buildUserOp([tx1, tx2])).rejects.toThrow() + } + ) + + test.concurrent( + "should simulate a user operation execution, expecting to pass execution", + async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl + }) + + const balances = await smartAccount.getBalances() + expect(balances[0].amount).toBeGreaterThan(0n) + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function deposit()"]), + functionName: "deposit" + }) + + const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" + + // fail if value is not bigger than 1 + // the contract call requires a deposit of at least 1 wei + const tx1 = { + to: amoyTestContract as Hex, + data: encodedCall, + value: 2 + } + const tx2 = { + to: amoyTestContract as Hex, + data: encodedCall, + value: 2 + } + + await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() + } + ) }) diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..b764a359f --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4949 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + +"@ampproject/remapping@^2.2.1": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@babel/code-frame@^7.0.0": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== + dependencies: + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" + +"@babel/helper-string-parser@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== + +"@babel/helper-validator-identifier@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz#918b1a7fa23056603506370089bd990d8720db62" + integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA== + +"@babel/highlight@^7.24.2": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.5.tgz#bc0613f98e1dd0720e99b2a9ee3760194a704b6e" + integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.5" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/parser@^7.24.4": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.5.tgz#4a4d5ab4315579e5398a82dcf636ca80c3392790" + integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg== + +"@babel/runtime@^7.20.1", "@babel/runtime@^7.21.0", "@babel/runtime@^7.5.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c" + integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/types@^7.24.0": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7" + integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ== + dependencies: + "@babel/helper-string-parser" "^7.24.1" + "@babel/helper-validator-identifier" "^7.24.5" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@biomejs/biome@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-1.6.0.tgz#b0f3bcc93451a7de74288af30f62f80aa74b1283" + integrity sha512-hvP8K1+CV8qc9eNdXtPwzScVxFSHB448CPKSqX6+8IW8G7bbhBVKGC80BowExJN5+vu+kzsj4xkWa780MAOlJw== + optionalDependencies: + "@biomejs/cli-darwin-arm64" "1.6.0" + "@biomejs/cli-darwin-x64" "1.6.0" + "@biomejs/cli-linux-arm64" "1.6.0" + "@biomejs/cli-linux-arm64-musl" "1.6.0" + "@biomejs/cli-linux-x64" "1.6.0" + "@biomejs/cli-linux-x64-musl" "1.6.0" + "@biomejs/cli-win32-arm64" "1.6.0" + "@biomejs/cli-win32-x64" "1.6.0" + +"@biomejs/cli-darwin-arm64@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.6.0.tgz#60f3620ccb2aac618afd9cd119291afa69d4aabf" + integrity sha512-K1Fjqye5pt+Ua+seC7V/2bFjfnqOaEOcQbBQSiiefB/VPNOb6lA5NFIfJ1PskTA3JrMXE1k7iqKQn56qrKFS6A== + +"@biomejs/cli-darwin-x64@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.6.0.tgz#dd3a0d66ff22f800bb13df33cb4dacf191eefe78" + integrity sha512-CjEALu6vN9RbcfhaBDoj481mesUIsUjxgQn+/kiMCea+Paypqslhez1I7OwRBJnkzz+Pa+PXdABd7S30eyy6+Q== + +"@biomejs/cli-linux-arm64-musl@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.6.0.tgz#cf2b171757f4f2062076ca323f2f23c1753208e9" + integrity sha512-prww6AUuJ+IO/GziN3WjtGM/DNOVuPFxqWrK97wKTZygEDdA+o1qHUN2HeCkSyk084xnzbMSbls5xscAKAn43A== + +"@biomejs/cli-linux-arm64@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.6.0.tgz#a7f2761d8566b2fdc78e09fc0d85cf1fccce602e" + integrity sha512-32LVrC7dAgQT39YZ0ieO/VzzpAflozs9mW5K0oKNef7S4ocCdk89E98eXApxOdei0JTf3vfseDCl1AUIp6MwJw== + +"@biomejs/cli-linux-x64-musl@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.6.0.tgz#95e17927d498af868cca32e3be79132ddeb3036f" + integrity sha512-NwitWeUKCy8G/rr+rgHPYirnrsOjJEJBWODdaRzweeFNcJjvO6de6AmNdSJzsewzLEaxjOWyoXU03MdzbGz/6Q== + +"@biomejs/cli-linux-x64@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-1.6.0.tgz#bcab0e71981a5601d85ea3ef09454b262764b776" + integrity sha512-b6mWu9Cu4w5B3K46wq9SlxKEZEEL6II/6HFNAuZ4YL8mOeQ0FTMU+wNMJFKkmkSE2zvim3xwW3PknmbLKbe3Mg== + +"@biomejs/cli-win32-arm64@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.6.0.tgz#af94814be3c15ae4d201c01708a4ef79378cad36" + integrity sha512-DlNOL6mG+76iZS1gL/UiuMme7jnt+auzo2+u0aUq6UXYsb75juchwlnVLy2UV5CQjVBRB8+RM+KVoXRZ8NlBjQ== + +"@biomejs/cli-win32-x64@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-1.6.0.tgz#a90b549170864eff030a6b7e395f48ead5193170" + integrity sha512-sXBcXIOGuG8/XcHqmnkhLIs0oy6Dp+TkH4Alr4WH/P8mNsp5GcStI/ZwbEiEoxA0P3Fi+oUppQ6srxaY2rSCHg== + +"@changesets/apply-release-plan@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-7.0.1.tgz#a6dd7cc538ca6c0f142b33462252f2c2f34ae5ac" + integrity sha512-aPdSq/R++HOyfEeBGjEe6LNG8gs0KMSyRETD/J2092OkNq8mOioAxyKjMbvVUdzgr/HTawzMOz7lfw339KnsCA== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/config" "^3.0.0" + "@changesets/get-version-range-type" "^0.4.0" + "@changesets/git" "^3.0.0" + "@changesets/types" "^6.0.0" + "@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@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.0.tgz#c69969b4bef7c32a8544b6941d1053260ca47e05" + integrity sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/errors" "^0.2.0" + "@changesets/get-dependents-graph" "^2.0.0" + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" + semver "^7.5.3" + +"@changesets/changelog-git@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@changesets/changelog-git/-/changelog-git-0.2.0.tgz#1f3de11becafff5a38ebe295038a602403c93a86" + integrity sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ== + dependencies: + "@changesets/types" "^6.0.0" + +"@changesets/cli@^2.27.1": + version "2.27.3" + resolved "https://registry.yarnpkg.com/@changesets/cli/-/cli-2.27.3.tgz#2c9c88a514b024967d9c1b9b71e4efbacca2e2ad" + integrity sha512-ve/VpWApILlSs8cr0okNx5C2LKRawI9XZgvfmf58S8sar2nhx5DPJREFXYZBahs0FeTfvH0rdVl+nGe8QF45Ig== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/apply-release-plan" "^7.0.1" + "@changesets/assemble-release-plan" "^6.0.0" + "@changesets/changelog-git" "^0.2.0" + "@changesets/config" "^3.0.0" + "@changesets/errors" "^0.2.0" + "@changesets/get-dependents-graph" "^2.0.0" + "@changesets/get-release-plan" "^4.0.0" + "@changesets/git" "^3.0.0" + "@changesets/logger" "^0.1.0" + "@changesets/pre" "^2.0.0" + "@changesets/read" "^0.6.0" + "@changesets/types" "^6.0.0" + "@changesets/write" "^0.3.1" + "@manypkg/get-packages" "^1.1.3" + "@types/semver" "^7.5.0" + ansi-colors "^4.1.3" + chalk "^2.1.0" + ci-info "^3.7.0" + enquirer "^2.3.0" + external-editor "^3.1.0" + fs-extra "^7.0.1" + human-id "^1.0.2" + 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@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@changesets/config/-/config-3.0.0.tgz#a1a1cafc77134b117b4a9266459c84fdd360a6be" + integrity sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA== + dependencies: + "@changesets/errors" "^0.2.0" + "@changesets/get-dependents-graph" "^2.0.0" + "@changesets/logger" "^0.1.0" + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" + fs-extra "^7.0.1" + micromatch "^4.0.2" + +"@changesets/errors@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@changesets/errors/-/errors-0.2.0.tgz#3c545e802b0f053389cadcf0ed54e5636ff9026a" + integrity sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow== + dependencies: + extendable-error "^0.1.5" + +"@changesets/get-dependents-graph@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-2.0.0.tgz#97f0cc9fbec436e0d6ab95a6a59c08acf21ac714" + integrity sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA== + dependencies: + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" + chalk "^2.1.0" + fs-extra "^7.0.1" + semver "^7.5.3" + +"@changesets/get-release-plan@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-4.0.0.tgz#8cb057da90a08796a335dfd18073234d33902069" + integrity sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/assemble-release-plan" "^6.0.0" + "@changesets/config" "^3.0.0" + "@changesets/pre" "^2.0.0" + "@changesets/read" "^0.6.0" + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" + +"@changesets/get-version-range-type@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz#429a90410eefef4368502c41c63413e291740bf5" + integrity sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ== + +"@changesets/git@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@changesets/git/-/git-3.0.0.tgz#e71d003752a97bc27988db6d410e0038a4a88055" + integrity sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/errors" "^0.2.0" + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" + is-subdir "^1.1.1" + micromatch "^4.0.2" + spawndamnit "^2.0.0" + +"@changesets/logger@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@changesets/logger/-/logger-0.1.0.tgz#2d2a58536c5beeeaef52ab464931d99fcf24f17b" + integrity sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g== + dependencies: + chalk "^2.1.0" + +"@changesets/parse@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@changesets/parse/-/parse-0.4.0.tgz#5cabbd9844b3b213cb83f5edb5768454c70dd2b4" + integrity sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw== + dependencies: + "@changesets/types" "^6.0.0" + js-yaml "^3.13.1" + +"@changesets/pre@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@changesets/pre/-/pre-2.0.0.tgz#ad3edf3d6ac287991d7ef5e26cf280d03c9e3764" + integrity sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/errors" "^0.2.0" + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" + fs-extra "^7.0.1" + +"@changesets/read@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@changesets/read/-/read-0.6.0.tgz#27e13b58d0b0eb3b0a5cba48a3f4f71f05ef4610" + integrity sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/git" "^3.0.0" + "@changesets/logger" "^0.1.0" + "@changesets/parse" "^0.4.0" + "@changesets/types" "^6.0.0" + 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@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@changesets/types/-/types-6.0.0.tgz#e46abda9890610dd1fbe1617730173d2267544bd" + integrity sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ== + +"@changesets/write@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@changesets/write/-/write-0.3.1.tgz#438ef1dabc790cca35ce9fd36d26643b0f1786c9" + integrity sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw== + dependencies: + "@babel/runtime" "^7.20.1" + "@changesets/types" "^6.0.0" + fs-extra "^7.0.1" + human-id "^1.0.2" + prettier "^2.7.1" + +"@commitlint/cli@^19.0.3": + version "19.3.0" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.3.0.tgz#44e6da9823a01f0cdcc43054bbefdd2c6c5ddf39" + integrity sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g== + dependencies: + "@commitlint/format" "^19.3.0" + "@commitlint/lint" "^19.2.2" + "@commitlint/load" "^19.2.0" + "@commitlint/read" "^19.2.1" + "@commitlint/types" "^19.0.3" + execa "^8.0.1" + yargs "^17.0.0" + +"@commitlint/config-conventional@^19.0.3": + version "19.2.2" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-19.2.2.tgz#1f4e6975d428985deacf2b3ff6547e02c9302054" + integrity sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw== + dependencies: + "@commitlint/types" "^19.0.3" + conventional-changelog-conventionalcommits "^7.0.2" + +"@commitlint/config-validator@^19.0.3": + version "19.0.3" + resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-19.0.3.tgz#052b181a30da6b4fc16dc5230f4589ac95e0bc81" + integrity sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q== + dependencies: + "@commitlint/types" "^19.0.3" + ajv "^8.11.0" + +"@commitlint/ensure@^19.0.3": + version "19.0.3" + resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-19.0.3.tgz#d172b1b72ca88cbd317ea1ee79f3a03dbaccc76e" + integrity sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ== + dependencies: + "@commitlint/types" "^19.0.3" + lodash.camelcase "^4.3.0" + lodash.kebabcase "^4.1.1" + lodash.snakecase "^4.1.1" + lodash.startcase "^4.4.0" + lodash.upperfirst "^4.3.1" + +"@commitlint/execute-rule@^19.0.0": + version "19.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-19.0.0.tgz#928fb239ae8deec82a6e3b05ec9cfe20afa83856" + integrity sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw== + +"@commitlint/format@^19.3.0": + version "19.3.0" + resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-19.3.0.tgz#48dd9e6930d41eb0ca19f36159ee940c5b25d857" + integrity sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg== + dependencies: + "@commitlint/types" "^19.0.3" + chalk "^5.3.0" + +"@commitlint/is-ignored@^19.2.2": + version "19.2.2" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-19.2.2.tgz#503ddcf908ac6b2bc4586a49cb53893a1856f5b2" + integrity sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g== + dependencies: + "@commitlint/types" "^19.0.3" + semver "^7.6.0" + +"@commitlint/lint@^19.2.2": + version "19.2.2" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-19.2.2.tgz#57f69e24bd832a7dcce8ebf82d11e3bf03ccc2a9" + integrity sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA== + dependencies: + "@commitlint/is-ignored" "^19.2.2" + "@commitlint/parse" "^19.0.3" + "@commitlint/rules" "^19.0.3" + "@commitlint/types" "^19.0.3" + +"@commitlint/load@^19.2.0": + version "19.2.0" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-19.2.0.tgz#3ca51fdead4f1e1e09c9c7df343306412b1ef295" + integrity sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ== + dependencies: + "@commitlint/config-validator" "^19.0.3" + "@commitlint/execute-rule" "^19.0.0" + "@commitlint/resolve-extends" "^19.1.0" + "@commitlint/types" "^19.0.3" + chalk "^5.3.0" + cosmiconfig "^9.0.0" + cosmiconfig-typescript-loader "^5.0.0" + lodash.isplainobject "^4.0.6" + lodash.merge "^4.6.2" + lodash.uniq "^4.5.0" + +"@commitlint/message@^19.0.0": + version "19.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-19.0.0.tgz#f789dd1b7a1f9c784578e0111f46cc3fecf5a531" + integrity sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw== + +"@commitlint/parse@^19.0.3": + version "19.0.3" + resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-19.0.3.tgz#a2d09876d458e17ad0e1695b04f41af8b50a41c2" + integrity sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA== + dependencies: + "@commitlint/types" "^19.0.3" + conventional-changelog-angular "^7.0.0" + conventional-commits-parser "^5.0.0" + +"@commitlint/read@^19.2.1": + version "19.2.1" + resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-19.2.1.tgz#7296b99c9a989e60e5927fff8388a1dd44299c2f" + integrity sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw== + dependencies: + "@commitlint/top-level" "^19.0.0" + "@commitlint/types" "^19.0.3" + execa "^8.0.1" + git-raw-commits "^4.0.0" + minimist "^1.2.8" + +"@commitlint/resolve-extends@^19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-19.1.0.tgz#fa5b8f921e9c8d76f53624c35bf25b9676bd73fa" + integrity sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg== + dependencies: + "@commitlint/config-validator" "^19.0.3" + "@commitlint/types" "^19.0.3" + global-directory "^4.0.1" + import-meta-resolve "^4.0.0" + lodash.mergewith "^4.6.2" + resolve-from "^5.0.0" + +"@commitlint/rules@^19.0.3": + version "19.0.3" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-19.0.3.tgz#de647a9055847cae4f3ae32b4798096b604584f3" + integrity sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw== + dependencies: + "@commitlint/ensure" "^19.0.3" + "@commitlint/message" "^19.0.0" + "@commitlint/to-lines" "^19.0.0" + "@commitlint/types" "^19.0.3" + execa "^8.0.1" + +"@commitlint/to-lines@^19.0.0": + version "19.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-19.0.0.tgz#aa6618eb371bafbc0cd3b48f0db565c4a40462c6" + integrity sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw== + +"@commitlint/top-level@^19.0.0": + version "19.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-19.0.0.tgz#9c44d7cec533bb9598bfae9658737e2d6a903605" + integrity sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ== + dependencies: + find-up "^7.0.0" + +"@commitlint/types@^19.0.3": + version "19.0.3" + resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-19.0.3.tgz#feff4ecac2b5c359f2a57f9ab094b2ac80ef0266" + integrity sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA== + dependencies: + "@types/conventional-commits-parser" "^5.0.0" + chalk "^5.3.0" + +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== + +"@esbuild/aix-ppc64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.3.tgz#78d3e6dcd19c1cb91f3940143e86dad1094aee81" + integrity sha512-yTgnwQpFVYfvvo4SvRFB0SwrW8YjOxEoT7wfMT7Ol5v7v5LDNvSGo67aExmxOb87nQNeWPVvaGBNfQ7BXcrZ9w== + +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== + +"@esbuild/android-arm64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.3.tgz#5eea56c21d61734942e050840d881eb7bedc3993" + integrity sha512-c+ty9necz3zB1Y+d/N+mC6KVVkGUUOcm4ZmT5i/Fk5arOaY3i6CA3P5wo/7+XzV8cb4GrI/Zjp8NuOQ9Lfsosw== + +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== + +"@esbuild/android-arm@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.3.tgz#7fda92e3231043c071ea6aa76c92accea86439fd" + integrity sha512-bviJOLMgurLJtF1/mAoJLxDZDL6oU5/ztMHnJQRejbJrSc9FFu0QoUoFhvi6qSKJEw9y5oGyvr9fuDtzJ30rNQ== + +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== + +"@esbuild/android-x64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.3.tgz#625d139bde81b81f54ff493b1381ca0f540200f3" + integrity sha512-JReHfYCRK3FVX4Ra+y5EBH1b9e16TV2OxrPAvzMsGeES0X2Ndm9ImQRI4Ket757vhc5XBOuGperw63upesclRw== + +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== + +"@esbuild/darwin-arm64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.3.tgz#fa25f38a43ff4c469589d1dc93448d534d7f313b" + integrity sha512-U3fuQ0xNiAkXOmQ6w5dKpEvXQRSpHOnbw7gEfHCRXPeTKW9sBzVck6C5Yneb8LfJm0l6le4NQfkNPnWMSlTFUQ== + +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== + +"@esbuild/darwin-x64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.3.tgz#2e450b8214f179a56b4559b2f107060e2b792c7e" + integrity sha512-3m1CEB7F07s19wmaMNI2KANLcnaqryJxO1fXHUV5j1rWn+wMxdUYoPyO2TnAbfRZdi7ADRwJClmOwgT13qlP3Q== + +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== + +"@esbuild/freebsd-arm64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.3.tgz#f6b29e07bce25c545f6f7bb031d3be6a6ea1dc50" + integrity sha512-fsNAAl5pU6wmKHq91cHWQT0Fz0vtyE1JauMzKotrwqIKAswwP5cpHUCxZNSTuA/JlqtScq20/5KZ+TxQdovU/g== + +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== + +"@esbuild/freebsd-x64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.3.tgz#1a5da2bf89f8d67102820d893d271a270ae55751" + integrity sha512-tci+UJ4zP5EGF4rp8XlZIdq1q1a/1h9XuronfxTMCNBslpCtmk97Q/5qqy1Mu4zIc0yswN/yP/BLX+NTUC1bXA== + +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== + +"@esbuild/linux-arm64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.3.tgz#355f6624c1ac6f5f68841a327ac90b98c679626c" + integrity sha512-vvG6R5g5ieB4eCJBQevyDMb31LMHthLpXTc2IGkFnPWS/GzIFDnaYFp558O+XybTmYrVjxnryru7QRleJvmZ6Q== + +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== + +"@esbuild/linux-arm@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.3.tgz#872a476ca18a962a98700024c447a79279db1d45" + integrity sha512-f6kz2QpSuyHHg01cDawj0vkyMwuIvN62UAguQfnNVzbge2uWLhA7TCXOn83DT0ZvyJmBI943MItgTovUob36SQ== + +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== + +"@esbuild/linux-ia32@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.3.tgz#da713eb80ff6c011ed01aa4deebb5fc758906046" + integrity sha512-HjCWhH7K96Na+66TacDLJmOI9R8iDWDDiqe17C7znGvvE4sW1ECt9ly0AJ3dJH62jHyVqW9xpxZEU1jKdt+29A== + +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== + +"@esbuild/linux-loong64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.3.tgz#a7c5dc9e961009018d23ec53a43baa8c03c5a1d5" + integrity sha512-BGpimEccmHBZRcAhdlRIxMp7x9PyJxUtj7apL2IuoG9VxvU/l/v1z015nFs7Si7tXUwEsvjc1rOJdZCn4QTU+Q== + +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== + +"@esbuild/linux-mips64el@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.3.tgz#b97543f3d8655365729f3702ed07f6e41be5e48e" + integrity sha512-5rMOWkp7FQGtAH3QJddP4w3s47iT20hwftqdm7b+loe95o8JU8ro3qZbhgMRy0VuFU0DizymF1pBKkn3YHWtsw== + +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== + +"@esbuild/linux-ppc64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.3.tgz#23b9064d5bc0bf28a115a2f9cf69f3b01cdfe01c" + integrity sha512-h0zj1ldel89V5sjPLo5H1SyMzp4VrgN1tPkN29TmjvO1/r0MuMRwJxL8QY05SmfsZRs6TF0c/IDH3u7XYYmbAg== + +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== + +"@esbuild/linux-riscv64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.3.tgz#4f2536327f6d444c0573bd35bbd3a67897dbd5da" + integrity sha512-dkAKcTsTJ+CRX6bnO17qDJbLoW37npd5gSNtSzjYQr0svghLJYGYB0NF1SNcU1vDcjXLYS5pO4qOW4YbFama4A== + +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== + +"@esbuild/linux-s390x@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.3.tgz#05e6f3a12a0dcd60672f25e8789a83cd3affa487" + integrity sha512-vnD1YUkovEdnZWEuMmy2X2JmzsHQqPpZElXx6dxENcIwTu+Cu5ERax6+Ke1QsE814Zf3c6rxCfwQdCTQ7tPuXA== + +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== + +"@esbuild/linux-x64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.3.tgz#994d347e7f530c33628e35e48ccde8f299adbcb6" + integrity sha512-IOXOIm9WaK7plL2gMhsWJd+l2bfrhfilv0uPTptoRoSb2p09RghhQQp9YY6ZJhk/kqmeRt6siRdMSLLwzuT0KQ== + +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== + +"@esbuild/netbsd-x64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.3.tgz#309d8c323632e9c70ee92cf5414fa65b5eb7e00e" + integrity sha512-uTgCwsvQ5+vCQnqM//EfDSuomo2LhdWhFPS8VL8xKf+PKTCrcT/2kPPoWMTs22aB63MLdGMJiE3f1PHvCDmUOw== + +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== + +"@esbuild/openbsd-x64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.3.tgz#28820f9431fe00f2b04aac57511754213ff060eb" + integrity sha512-vNAkR17Ub2MgEud2Wag/OE4HTSI6zlb291UYzHez/psiKarp0J8PKGDnAhMBcHFoOHMXHfExzmjMojJNbAStrQ== + +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== + +"@esbuild/sunos-x64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.3.tgz#a1f7f98b85bd221fe0f545d01abc0e6123ae60dc" + integrity sha512-W8H9jlGiSBomkgmouaRoTXo49j4w4Kfbl6I1bIdO/vT0+0u4f20ko3ELzV3hPI6XV6JNBVX+8BC+ajHkvffIJA== + +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== + +"@esbuild/win32-arm64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.3.tgz#c6c3c0b1a1dfc6327ef4db6aa4fb6efd9df531f7" + integrity sha512-EjEomwyLSCg8Ag3LDILIqYCZAq/y3diJ04PnqGRgq8/4O3VNlXyMd54j/saShaN4h5o5mivOjAzmU6C3X4v0xw== + +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== + +"@esbuild/win32-ia32@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.3.tgz#471b8d2cad1bd6479eee5acf04bba2c0e4d37e24" + integrity sha512-WGiE/GgbsEwR33++5rzjiYsKyHywE8QSZPF7Rfx9EBfK3Qn3xyR6IjyCr5Uk38Kg8fG4/2phN7sXp4NPWd3fcw== + +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== + +"@esbuild/win32-x64@0.21.3": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.3.tgz#899c03576c4c28c83228f0e64dfa10edae99c9a2" + integrity sha512-xRxC0jaJWDLYvcUvjQmHCJSfMrgmUuvsoXgDeU/wTorQ1ngDdUBuFtgY3W1Pc5sprGAvZBtWdJX7RPg/iZZUqA== + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/wallet@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@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" + +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/curves@1.3.0", "@noble/curves@~1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== + dependencies: + "@noble/hashes" "1.3.3" + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/hashes@1.3.3", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + +"@noble/hashes@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@rollup/rollup-android-arm-eabi@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27" + integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ== + +"@rollup/rollup-android-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203" + integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA== + +"@rollup/rollup-darwin-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz#b6dd74e117510dfe94541646067b0545b42ff096" + integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w== + +"@rollup/rollup-darwin-x64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c" + integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA== + +"@rollup/rollup-linux-arm-gnueabihf@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8" + integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA== + +"@rollup/rollup-linux-arm-musleabihf@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549" + integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A== + +"@rollup/rollup-linux-arm64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577" + integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw== + +"@rollup/rollup-linux-arm64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c" + integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ== + +"@rollup/rollup-linux-powerpc64le-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf" + integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA== + +"@rollup/rollup-linux-riscv64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9" + integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg== + +"@rollup/rollup-linux-s390x-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec" + integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg== + +"@rollup/rollup-linux-x64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942" + integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w== + +"@rollup/rollup-linux-x64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d" + integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg== + +"@rollup/rollup-win32-arm64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf" + integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA== + +"@rollup/rollup-win32-ia32-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54" + integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg== + +"@rollup/rollup-win32-x64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz#5d694d345ce36b6ecf657349e03eb87297e68da4" + integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g== + +"@scure/base@~1.1.4": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" + integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== + +"@scure/bip32@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" + integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== + dependencies: + "@noble/curves" "~1.3.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@scure/bip39@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" + integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== + dependencies: + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sindresorhus/merge-streams@^2.1.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" + integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== + +"@size-limit/esbuild-why@^11": + version "11.1.4" + resolved "https://registry.yarnpkg.com/@size-limit/esbuild-why/-/esbuild-why-11.1.4.tgz#8ecb2aa3ecb8afcd510d06fa9fffaf22927995bf" + integrity sha512-bcT68pnfhqSZmNYGRMyer0c3FT33AVBsBHJhXzWGxxOzzQ6v1/Ke4bSr8iri4NZTFIZqLSV+/QB/5TKDy3v4Dg== + dependencies: + esbuild-visualizer "^0.6.0" + open "^10.1.0" + +"@size-limit/esbuild@11.1.4": + version "11.1.4" + resolved "https://registry.yarnpkg.com/@size-limit/esbuild/-/esbuild-11.1.4.tgz#b0325292c5a556f479bb88092ca1e12f1cf67f25" + integrity sha512-Nxh+Fw4Z7sFjRLeT7GDZIy297VXyJrMvG20UDSWP31QgglriEBDkW9U77T7W6js5FaEr89bYVrGzpHfmE1CLFw== + dependencies: + esbuild "^0.21.3" + nanoid "^5.0.7" + +"@size-limit/file@11.1.4": + version "11.1.4" + resolved "https://registry.yarnpkg.com/@size-limit/file/-/file-11.1.4.tgz#b5bba86918123783b730879362e78c8cb737d149" + integrity sha512-QxnGj9cxhCEuqMAV01gqonXIKcc+caZqFHZpV51oL2ZJNGSPP9Q/yyf+7HbVe00faOFd1dZZwMwzZmX7HQ9LbA== + +"@size-limit/preset-small-lib@^11": + version "11.1.4" + resolved "https://registry.yarnpkg.com/@size-limit/preset-small-lib/-/preset-small-lib-11.1.4.tgz#2629a0e689f4e2fbbf9fc4fdc61a2458caf8797f" + integrity sha512-wELW374esv+2Nlzf7g+qW4Af9L69duLoO9F52f0sGk/nzb6et7u8gLRvweWrBfm3itUrqHCpGSSVabTsIU8kNw== + dependencies: + "@size-limit/esbuild" "11.1.4" + "@size-limit/file" "11.1.4" + size-limit "11.1.4" + +"@types/bun@latest": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@types/bun/-/bun-1.1.3.tgz#729b88160a0a9b89b950c935ba454f314aeefc14" + integrity sha512-i+mVz8C/lx+RprDR6Mr402iE1kmajgJPnmSfJ/NvU85sGGXSylYZ/6yc+XhVLr2E/t8o6HmjwV0evtnUOR0CFA== + dependencies: + bun-types "1.1.9" + +"@types/conventional-commits-parser@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#8c9d23e0b415b24b91626d07017303755d542dc8" + integrity sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ== + dependencies: + "@types/node" "*" + +"@types/estree@1.0.5", "@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@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/node@*", "@types/node@~20.12.8": + version "20.12.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.12.tgz#7cbecdf902085cec634fdb362172dfe12b8f2050" + integrity sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw== + dependencies: + undici-types "~5.26.4" + +"@types/node@18.15.13": + version "18.15.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" + integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== + +"@types/node@^12.7.1": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@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/semver@^7.5.0": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + +"@types/ws@~8.5.10": + version "8.5.10" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" + integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== + dependencies: + "@types/node" "*" + +"@vitest/coverage-v8@^1.3.1": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.6.0.tgz#2f54ccf4c2d9f23a71294aba7f95b3d2e27d14e7" + integrity sha512-KvapcbMY/8GYIG0rlwwOKCVNRc0OL20rrhFkg/CHNzncV03TE2XWvO5w9uZYoxNiMEBacAJt3unSOiZ7svePew== + dependencies: + "@ampproject/remapping" "^2.2.1" + "@bcoe/v8-coverage" "^0.2.3" + debug "^4.3.4" + istanbul-lib-coverage "^3.2.2" + istanbul-lib-report "^3.0.1" + istanbul-lib-source-maps "^5.0.4" + istanbul-reports "^3.1.6" + magic-string "^0.30.5" + magicast "^0.3.3" + picocolors "^1.0.0" + std-env "^3.5.0" + strip-literal "^2.0.0" + test-exclude "^6.0.0" + +"@vitest/expect@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.6.0.tgz#0b3ba0914f738508464983f4d811bc122b51fb30" + integrity sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ== + dependencies: + "@vitest/spy" "1.6.0" + "@vitest/utils" "1.6.0" + chai "^4.3.10" + +"@vitest/runner@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.6.0.tgz#a6de49a96cb33b0e3ba0d9064a3e8d6ce2f08825" + integrity sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg== + dependencies: + "@vitest/utils" "1.6.0" + p-limit "^5.0.0" + pathe "^1.1.1" + +"@vitest/snapshot@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.6.0.tgz#deb7e4498a5299c1198136f56e6e0f692e6af470" + integrity sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ== + dependencies: + magic-string "^0.30.5" + pathe "^1.1.1" + pretty-format "^29.7.0" + +"@vitest/spy@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.6.0.tgz#362cbd42ccdb03f1613798fde99799649516906d" + integrity sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw== + dependencies: + tinyspy "^2.2.0" + +"@vitest/utils@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.6.0.tgz#5c5675ca7d6f546a7b4337de9ae882e6c57896a1" + integrity sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw== + dependencies: + diff-sequences "^29.6.3" + estree-walker "^3.0.3" + loupe "^2.3.7" + pretty-format "^29.7.0" + +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +acorn-walk@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.11.3: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + +ajv@^8.11.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91" + integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA== + dependencies: + fast-deep-equal "^3.1.3" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.4.1" + +ansi-colors@^4.1.1, ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/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-sequence-parser@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" + integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +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== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +array.prototype.flat@^1.2.3: + 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" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + 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== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +async@^3.2.4: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/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" + +bignumber.js@^9.0.1: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.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.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +buffer-reverse@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" + integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bun-types@1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/bun-types/-/bun-types-1.1.9.tgz#5a3728c91babe7d0a64283b07f03a58e4ea3b0ba" + integrity sha512-3YuLiH4Ne/ghk7K6mHiaqCqKOMrtB0Z5p1WAskHSVgi0iMZgsARV4yGkbfi565YsStvUq6GXTWB3ga7M8cznkA== + dependencies: + "@types/node" "~20.12.8" + "@types/ws" "~8.5.10" + +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + +bytes-iec@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/bytes-iec/-/bytes-iec-3.1.1.tgz#94cd36bf95c2c22a82002c247df8772d1d591083" + integrity sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA== + +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.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== + +chai@^4.3.10: + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.0.8" + +chalk@^2.1.0, chalk@^2.4.2: + version "2.4.2" + 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" + +chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +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== + +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== + +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@^3.5.3, chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +ci-info@^3.7.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +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@^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.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +commander@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + +commander@^9.0.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concurrently@^8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.2.tgz#353141985c198cfa5e4a3ef90082c336b5851784" + integrity sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg== + dependencies: + chalk "^4.1.2" + date-fns "^2.30.0" + lodash "^4.17.21" + rxjs "^7.8.1" + shell-quote "^1.8.1" + spawn-command "0.0.2" + supports-color "^8.1.1" + tree-kill "^1.2.2" + yargs "^17.7.2" + +confbox@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579" + integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== + +conventional-changelog-angular@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" + integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== + dependencies: + compare-func "^2.0.0" + +conventional-changelog-conventionalcommits@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz#aa5da0f1b2543094889e8cf7616ebe1a8f5c70d5" + integrity sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w== + dependencies: + compare-func "^2.0.0" + +conventional-commits-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#57f3594b81ad54d40c1b4280f04554df28627d9a" + integrity sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== + dependencies: + JSONStream "^1.3.5" + is-text-path "^2.0.0" + meow "^12.0.1" + split2 "^4.0.0" + +cosmiconfig-typescript-loader@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz#0d3becfe022a871f7275ceb2397d692e06045dc8" + integrity sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA== + dependencies: + jiti "^1.19.1" + +cosmiconfig@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + +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.0, cross-spawn@^7.0.3: + version "7.0.3" + 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" + +crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + +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" + +dargs@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-8.1.0.tgz#a34859ea509cbce45485e5aa356fef70bfcc7272" + integrity sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw== + +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +date-fns@^2.30.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + +debug@^4.1.1, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +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== + +deep-eql@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" + +default-browser-id@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" + integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + +default-browser@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" + integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.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.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +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.2.0, define-properties@^1.2.1: + 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" + +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-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +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== + +elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +email-addresses@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-5.0.0.tgz#7ae9e7f58eef7d5e3e2c2c2d3ea49b78dc854fa6" + integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/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== + +enquirer@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/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, es-abstract@^1.22.3, es-abstract@^1.23.0: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +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" + +esbuild-visualizer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/esbuild-visualizer/-/esbuild-visualizer-0.6.0.tgz#afe3053ce48ce20d4700fccdefea769f0f06acf0" + integrity sha512-oNK3JAhC7+re93VTtUdWJKTDVnA2qXPAjCAoaw9OxEFUXztszw3kcaK46u1U790T8FdUBAWv6F9Xt59P8nJCVA== + dependencies: + open "^8.4.0" + picomatch "^2.3.1" + yargs "^17.6.2" + +esbuild@^0.20.1: + version "0.20.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== + optionalDependencies: + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" + +esbuild@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.3.tgz#cbb10b100c768b0cfb35d61d9e70324553437c38" + integrity sha512-Kgq0/ZsAPzKrbOjCQcjoSmPoWhlcVnGAUo7jvaLHoxW1Drto0KGkR1xBNg2Cp43b9ImvxmPEJZ9xkfcnqPsfBw== + optionalDependencies: + "@esbuild/aix-ppc64" "0.21.3" + "@esbuild/android-arm" "0.21.3" + "@esbuild/android-arm64" "0.21.3" + "@esbuild/android-x64" "0.21.3" + "@esbuild/darwin-arm64" "0.21.3" + "@esbuild/darwin-x64" "0.21.3" + "@esbuild/freebsd-arm64" "0.21.3" + "@esbuild/freebsd-x64" "0.21.3" + "@esbuild/linux-arm" "0.21.3" + "@esbuild/linux-arm64" "0.21.3" + "@esbuild/linux-ia32" "0.21.3" + "@esbuild/linux-loong64" "0.21.3" + "@esbuild/linux-mips64el" "0.21.3" + "@esbuild/linux-ppc64" "0.21.3" + "@esbuild/linux-riscv64" "0.21.3" + "@esbuild/linux-s390x" "0.21.3" + "@esbuild/linux-x64" "0.21.3" + "@esbuild/netbsd-x64" "0.21.3" + "@esbuild/openbsd-x64" "0.21.3" + "@esbuild/sunos-x64" "0.21.3" + "@esbuild/win32-arm64" "0.21.3" + "@esbuild/win32-ia32" "0.21.3" + "@esbuild/win32-x64" "0.21.3" + +escalade@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + +ethereum-bloom-filters@^1.0.6: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz#b3fc1eb789509ee30db0bf99a2988ccacb8d0397" + integrity sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw== + dependencies: + "@noble/hashes" "^1.4.0" + +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" + integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== + dependencies: + "@noble/curves" "1.3.0" + "@noble/hashes" "1.3.3" + "@scure/bip32" "1.3.3" + "@scure/bip39" "1.2.2" + +ethers@^6.12.0: + version "6.12.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.1.tgz#517ff6d66d4fd5433e38e903051da3e57c87ff37" + integrity sha512-j6wcVoZf06nqEcBbDWkKg8Fp895SS96dSnTCjiXT+8vt2o02raTn4Lo9ERUuIVU5bAjoPYeA+7ytQFexFmLuVw== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "18.15.13" + aes-js "4.0.0-beta.5" + tslib "2.4.0" + ws "8.5.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +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" + +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" + +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-glob@^3.2.9, fast-glob@^3.3.2: + 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" + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== + +filenamify@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" + integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.1" + trim-repeated "^1.0.0" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.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-up@^5.0.0: + version "5.0.0" + 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" + path-exists "^4.0.0" + +find-up@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-7.0.0.tgz#e8dec1455f74f78d888ad65bf7ca13dd2b4e66fb" + integrity sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g== + dependencies: + locate-path "^7.2.0" + path-exists "^5.0.0" + unicorn-magic "^0.1.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" + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +fs-extra@^11.1.1: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + 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" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/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" + +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.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +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.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +gh-pages@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-6.1.1.tgz#e80af927a081cb480657fde5a0b87ea2e77d6c74" + integrity sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw== + dependencies: + async "^3.2.4" + commander "^11.0.0" + email-addresses "^5.0.0" + filenamify "^4.3.0" + find-cache-dir "^3.3.1" + fs-extra "^11.1.1" + globby "^6.1.0" + +git-raw-commits@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-4.0.0.tgz#b212fd2bff9726d27c1283a1157e829490593285" + integrity sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ== + dependencies: + dargs "^8.0.0" + meow "^12.0.1" + split2 "^4.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^10.3.7: + version "10.4.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.1.tgz#0cfb01ab6a6b438177bfe6a58e2576f6efe909c2" + integrity sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + path-scurry "^1.11.1" + +glob@^7.0.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-directory@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/global-directory/-/global-directory-4.0.1.tgz#4d7ac7cfd2cb73f304c53b8810891748df5e361e" + integrity sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== + dependencies: + ini "4.1.1" + +globalthis@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@^11.0.0, globby@^11.0.4: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-14.0.1.tgz#a1b44841aa7f4c6d8af2bc39951109d77301959b" + integrity sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ== + dependencies: + "@sindresorhus/merge-streams" "^2.1.0" + fast-glob "^3.3.2" + ignore "^5.2.4" + path-type "^5.0.0" + slash "^5.1.0" + unicorn-magic "^0.1.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/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== + +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== + +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.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + 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== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +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@^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== + +iconv-lite@^0.4.24: + version "0.4.24" + 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" + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0, ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +import-fresh@^3.3.0: + 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" + +import-meta-resolve@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706" + integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" + integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== + +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +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.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + 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-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0: + 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-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +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, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/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.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +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.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +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-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, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +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-text-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" + integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== + dependencies: + text-extensions "^2.0.0" + +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +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.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.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.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.4.tgz#1947003c72a91b6310efeb92d2a91be8804d92c2" + integrity sha512-wHOoEsNJTVltaJp8eVkm8w+GVkVNHT2YDYo53YdzQEL2gWm1hBX5cGFR9hQJtuGLebidVX7et3+dmDZrmclduw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.23" + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + +istanbul-reports@^3.1.6: + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jackspeak@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.1.2.tgz#eada67ea949c6b71de50f1b09c92a961897b90ab" + integrity sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jiti@^1.19.1, jiti@^1.21.0: + version "1.21.0" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" + integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== + +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +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-tokens@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.0.tgz#0f893996d6f3ed46df7f0a3b12a03f5fd84223c1" + integrity sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ== + +js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.6.1: + version "3.14.1" + 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" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +jsonc-parser@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +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== + +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== + +lilconfig@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" + integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +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" + +local-pkg@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" + integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== + dependencies: + mlly "^1.4.2" + pkg-types "^1.0.3" + +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.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +locate-path@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== + dependencies: + p-locate "^6.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== + +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.mergewith@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + +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.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash.upperfirst@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" + integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loupe@^2.3.6, loupe@^2.3.7: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + +lru-cache@^10.2.0: + version "10.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + +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" + +lunr@^2.3.9: + version "2.3.9" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" + integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== + +magic-string@^0.30.5: + version "0.30.10" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +magicast@^0.3.3: + version "0.3.4" + resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.4.tgz#bbda1791d03190a24b00ff3dd18151e7fd381d19" + integrity sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q== + dependencies: + "@babel/parser" "^7.24.4" + "@babel/types" "^7.24.0" + source-map-js "^1.2.0" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +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== + +marked@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== + +meow@^12.0.1: + version "12.1.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" + integrity sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== + +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.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +merkletreejs@^0.3.11: + version "0.3.11" + resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.11.tgz#e0de05c3ca1fd368de05a12cb8efb954ef6fc04f" + integrity sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ== + dependencies: + bignumber.js "^9.0.1" + buffer-reverse "^1.0.1" + crypto-js "^4.2.0" + treeify "^1.1.0" + web3-utils "^1.3.4" + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +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.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^9.0.3, minimatch@^9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + 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.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +mixme@^0.5.1: + version "0.5.10" + resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.10.tgz#d653b2984b75d9018828f1ea333e51717ead5f51" + integrity sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q== + +mlly@^1.4.2, mlly@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.0.tgz#587383ae40dda23cadb11c3c3cc972b277724271" + integrity sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ== + dependencies: + acorn "^8.11.3" + pathe "^1.1.2" + pkg-types "^1.1.0" + ufo "^1.5.3" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mylas@^2.1.9: + version "2.1.13" + resolved "https://registry.yarnpkg.com/mylas/-/mylas-2.1.13.tgz#1e23b37d58fdcc76e15d8a5ed23f9ae9fc0cbdf4" + integrity sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg== + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +nanoid@^5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.0.7.tgz#6452e8c5a816861fd9d2b898399f7e5fd6944cc6" + integrity sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ== + +nanospinner@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nanospinner/-/nanospinner-1.1.0.tgz#d17ff621cb1784b0a206b400da88a0ef6db39b97" + integrity sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA== + dependencies: + picocolors "^1.0.0" + +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.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + dependencies: + path-key "^4.0.0" + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/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-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.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +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@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1" + integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^3.1.0" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/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@^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.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + +p-limit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985" + integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== + dependencies: + yocto-queue "^1.0.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.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== + dependencies: + p-limit "^4.0.0" + +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-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, parse-json@^5.2.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" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +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.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +path-type@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-5.0.0.tgz#14b01ed7aea7ddf9c7c3f46181d4d04f9c785bb8" + integrity sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== + +pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +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== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +pkg-dir@^4.1.0, 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" + +pkg-types@^1.0.3, pkg-types@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.1.tgz#07b626880749beb607b0c817af63aac1845a73f2" + integrity sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ== + dependencies: + confbox "^0.1.7" + mlly "^1.7.0" + pathe "^1.1.2" + +plimit-lit@^1.2.6: + version "1.6.1" + resolved "https://registry.yarnpkg.com/plimit-lit/-/plimit-lit-1.6.1.tgz#a34594671b31ee8e93c72d505dfb6852eb72374a" + integrity sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA== + dependencies: + queue-lit "^1.5.1" + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +postcss@^8.4.38: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + +preferred-pm@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.1.3.tgz#4125ea5154603136c3b6444e5f5c94ecf90e4916" + integrity sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w== + dependencies: + find-up "^5.0.0" + find-yarn-workspace-root2 "1.2.16" + path-exists "^4.0.0" + which-pm "2.0.0" + +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== + +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +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.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +queue-lit@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/queue-lit/-/queue-lit-1.5.2.tgz#83c24d4f4764802377b05a6e5c73017caf3f8747" + integrity sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/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== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +react-is@^18.0.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +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" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + 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" + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + 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.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.10.0: + 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" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^5.0.5: + version "5.0.7" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.7.tgz#27bddf202e7d89cb2e0381656380d1734a854a74" + integrity sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg== + dependencies: + glob "^10.3.7" + +rollup@^4.13.0: + version "4.18.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.0.tgz#497f60f0c5308e4602cf41136339fbf87d5f5dda" + integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg== + dependencies: + "@types/estree" "1.0.5" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.18.0" + "@rollup/rollup-android-arm64" "4.18.0" + "@rollup/rollup-darwin-arm64" "4.18.0" + "@rollup/rollup-darwin-x64" "4.18.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.18.0" + "@rollup/rollup-linux-arm-musleabihf" "4.18.0" + "@rollup/rollup-linux-arm64-gnu" "4.18.0" + "@rollup/rollup-linux-arm64-musl" "4.18.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.18.0" + "@rollup/rollup-linux-riscv64-gnu" "4.18.0" + "@rollup/rollup-linux-s390x-gnu" "4.18.0" + "@rollup/rollup-linux-x64-gnu" "4.18.0" + "@rollup/rollup-linux-x64-musl" "4.18.0" + "@rollup/rollup-win32-arm64-msvc" "4.18.0" + "@rollup/rollup-win32-ia32-msvc" "4.18.0" + "@rollup/rollup-win32-x64-msvc" "4.18.0" + fsevents "~2.3.2" + +run-applescript@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" + integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +"semver@2 || 3 || 4 || 5": + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.0.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.5.3, semver@^7.6.0: + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== + +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.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +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.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + 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.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +shiki@^0.14.7: + version "0.14.7" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" + integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== + dependencies: + ansi-sequence-parser "^1.1.0" + jsonc-parser "^3.2.0" + vscode-oniguruma "^1.7.0" + vscode-textmate "^8.0.0" + +side-channel@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1, 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== + +simple-git-hooks@^2.9.0: + version "2.11.1" + resolved "https://registry.yarnpkg.com/simple-git-hooks/-/simple-git-hooks-2.11.1.tgz#4102f0b49dd72f148394a4446a958ad5ed461991" + integrity sha512-tgqwPUMDcNDhuf1Xf6KTUsyeqGdgKMhzaH4PAZZuzguOgTl5uuyeYe/8mWgAr6IBxB5V06uqEf6Dy37gIWDtDg== + +size-limit@11.1.4, size-limit@^11: + version "11.1.4" + resolved "https://registry.yarnpkg.com/size-limit/-/size-limit-11.1.4.tgz#0fd9418c7cae0cc77b6cb9bbe4f08cb2b3b0e126" + integrity sha512-V2JAI/Z7h8sEuxU3V+Ig3XKA5FcYbI4CZ7sh6s7wvuy+TUwDZYqw7sAqrHhQ4cgcNfPKIAHAaH8VaqOdbcwJDA== + dependencies: + bytes-iec "^3.1.1" + chokidar "^3.6.0" + globby "^14.0.1" + jiti "^1.21.0" + lilconfig "^3.1.1" + nanospinner "^1.1.0" + picocolors "^1.0.1" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== + +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" + +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +spawn-command@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" + integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== + +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.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +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.18" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" + integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== + +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + +std-env@^3.5.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" + integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== + +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-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + 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.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + 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@^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.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +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-literal@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.1.0.tgz#6d82ade5e2e74f5c7e8739b6c84692bd65f0bd2a" + integrity sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw== + dependencies: + js-tokens "^9.0.0" + +strip-outer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.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== + +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== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-extensions@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" + integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== + +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tinybench@^2.5.1: + version "2.8.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.8.0.tgz#30e19ae3a27508ee18273ffed9ac7018949acd7b" + integrity sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw== + +tinypool@^0.8.3: + version "0.8.4" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.4.tgz#e217fe1270d941b39e98c625dcecebb1408c9aa8" + integrity sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ== + +tinyspy@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1" + integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +treeify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" + integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== + +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== + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== + dependencies: + escape-string-regexp "^1.0.2" + +tsc-alias@^1.8.8: + version "1.8.10" + resolved "https://registry.yarnpkg.com/tsc-alias/-/tsc-alias-1.8.10.tgz#279f9bf0dd8bc10fb27820393d4881db5a303938" + integrity sha512-Ibv4KAWfFkFdKJxnWfVtdOmB0Zi1RJVxcbPGiCDsFpCQSsmpWyuzHG3rQyI5YkobWwxFPEyQfu1hdo4qLG2zPw== + dependencies: + chokidar "^3.5.3" + commander "^9.0.0" + globby "^11.0.4" + mylas "^2.1.9" + normalize-path "^3.0.0" + plimit-lit "^1.2.6" + +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tslib@^2.1.0, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +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" + +type-detect@^4.0.0, type-detect@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +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.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.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== + +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + +typedoc@^0.25.9: + version "0.25.13" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.13.tgz#9a98819e3b2d155a6d78589b46fa4c03768f0922" + integrity sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ== + dependencies: + lunr "^2.3.9" + marked "^4.3.0" + minimatch "^9.0.3" + shiki "^0.14.7" + +ufo@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" + integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== + +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.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== + +unicorn-magic@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +uri-js@^4.4.1: + 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" + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +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" + +vite-node@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.6.0.tgz#2c7e61129bfecc759478fa592754fd9704aaba7f" + integrity sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + pathe "^1.1.1" + picocolors "^1.0.0" + vite "^5.0.0" + +vite@^5.0.0: + version "5.2.11" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.11.tgz#726ec05555431735853417c3c0bfb36003ca0cbd" + integrity sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ== + dependencies: + esbuild "^0.20.1" + postcss "^8.4.38" + rollup "^4.13.0" + optionalDependencies: + fsevents "~2.3.3" + +vitest@^1.3.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.6.0.tgz#9d5ad4752a3c451be919e412c597126cffb9892f" + integrity sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA== + dependencies: + "@vitest/expect" "1.6.0" + "@vitest/runner" "1.6.0" + "@vitest/snapshot" "1.6.0" + "@vitest/spy" "1.6.0" + "@vitest/utils" "1.6.0" + acorn-walk "^8.3.2" + chai "^4.3.10" + debug "^4.3.4" + execa "^8.0.1" + local-pkg "^0.5.0" + magic-string "^0.30.5" + pathe "^1.1.1" + picocolors "^1.0.0" + std-env "^3.5.0" + strip-literal "^2.0.0" + tinybench "^2.5.1" + tinypool "^0.8.3" + vite "^5.0.0" + vite-node "1.6.0" + why-is-node-running "^2.2.2" + +vscode-oniguruma@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" + integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== + +vscode-textmate@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" + integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== + +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-utils@^1.3.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +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.14, which-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +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.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +why-is-node-running@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" + integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +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@^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.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +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.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +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== + +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@^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@^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.0.0, yargs@^17.6.2, yargs@^17.7.1, yargs@^17.7.2: + 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" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== From b969a9135cfe76b5dd2750b4610d518156627327 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Mon, 27 May 2024 11:45:54 +0100 Subject: [PATCH 1188/1247] feat: custom chains support (#500) * feat: sma-851 support custom chains --- .gitignore | 2 +- .size-limit.json | 12 +- CHANGELOG.md | 6 + package.json | 2 +- src/account/BaseSmartContractAccount.ts | 2 +- src/account/BiconomySmartAccountV2.ts | 11 +- src/account/utils/Types.ts | 4 +- src/account/utils/getChain.ts | 112 +++++++++++++++++- src/bundler/Bundler.ts | 12 +- src/bundler/utils/Types.ts | 4 +- .../session-storage/SessionFileStorage.ts | 37 +++++- .../sessions/sessionSmartAccountClient.ts | 1 + tests/account/write.test.ts | 51 +++++++- tests/bundler/read.test.ts | 3 +- 14 files changed, 235 insertions(+), 24 deletions(-) diff --git a/.gitignore b/.gitignore index 41980e0af..3a8fedd36 100644 --- a/.gitignore +++ b/.gitignore @@ -177,4 +177,4 @@ dist docs -tests/sessionStorageData \ No newline at end of file +sessionStorageData \ No newline at end of file diff --git a/.size-limit.json b/.size-limit.json index 2fa7e747b..aff9966a3 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -4,40 +4,40 @@ "path": "./dist/_esm/index.js", "limit": "65 kB", "import": "*", - "ignore": ["node:fs"] + "ignore": ["node:fs", "fs"] }, { "name": "core (cjs)", "path": "./dist/_cjs/index.js", "limit": "65 kB", - "ignore": ["node:fs"] + "ignore": ["node:fs", "fs"] }, { "name": "account (tree-shaking)", "path": "./dist/_esm/index.js", "limit": "65 kB", "import": "{ createSmartAccountClient }", - "ignore": ["node:fs"] + "ignore": ["node:fs", "fs"] }, { "name": "bundler (tree-shaking)", "path": "./dist/_esm/bundler/index.js", "limit": "5 kB", "import": "{ createBundler }", - "ignore": ["node:fs"] + "ignore": ["node:fs", "fs"] }, { "name": "paymaster (tree-shaking)", "path": "./dist/_esm/paymaster/index.js", "limit": "5 kB", "import": "{ createPaymaster }", - "ignore": ["node:fs"] + "ignore": ["node:fs", "fs"] }, { "name": "modules (tree-shaking)", "path": "./dist/_esm/modules/index.js", "limit": "60 kB", "import": "{ createSessionKeyManagerModule }", - "ignore": ["node:fs"] + "ignore": ["node:fs", "fs"] } ] diff --git a/CHANGELOG.md b/CHANGELOG.md index 5da3d47f5..03010e28d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # @biconomy/account +## 4.4.4 + +### Patch Changes + +- Add Support for Custom Chains + ## 4.4.3 ### Patch Changes diff --git a/package.json b/package.json index e5e7f1384..19c404866 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "sideEffects": false, "name": "@biconomy/account", "author": "Biconomy", - "version": "4.4.3", + "version": "4.4.4", "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ "erc-7579", diff --git a/src/account/BaseSmartContractAccount.ts b/src/account/BaseSmartContractAccount.ts index c6b0568ff..485f43f48 100644 --- a/src/account/BaseSmartContractAccount.ts +++ b/src/account/BaseSmartContractAccount.ts @@ -54,7 +54,7 @@ export abstract class BaseSmartContractAccount< params.entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS this.rpcProvider = createPublicClient({ - chain: params.viemChain ?? getChain(params.chainId), + chain: params.viemChain ?? params.customChain ?? getChain(params.chainId), transport: http( params.rpcUrl || getChain(params.chainId).rpcUrls.default.http[0] ) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 4049b17dd..01ae3f248 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -137,6 +137,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ...biconomySmartAccountConfig, chain: biconomySmartAccountConfig.viemChain ?? + biconomySmartAccountConfig.customChain ?? getChain(biconomySmartAccountConfig.chainId), rpcClient: biconomySmartAccountConfig.rpcUrl || @@ -199,6 +200,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.provider = createPublicClient({ chain: biconomySmartAccountConfig.viemChain ?? + biconomySmartAccountConfig.customChain ?? getChain(biconomySmartAccountConfig.chainId), transport: http( biconomySmartAccountConfig.rpcUrl || @@ -283,12 +285,17 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { if (!chainId) { throw new Error("chainId required") } + const bundler: IBundler = biconomySmartAccountConfig.bundler ?? new Bundler({ - // biome-ignore lint/style/noNonNullAssertion: <explanation> + // biome-ignore lint/style/noNonNullAssertion: always required bundlerUrl: biconomySmartAccountConfig.bundlerUrl!, - chainId + chainId, + customChain: + biconomySmartAccountConfig.viemChain ?? + biconomySmartAccountConfig.customChain ?? + getChain(chainId) }) let defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index dda36373d..29640f3ab 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -165,8 +165,10 @@ export type BiconomySmartAccountV2ConfigBaseProps = { scanForUpgradedAccountsFromV1?: boolean /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ maxIndexForScan?: number - /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains */ + /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains. Alias of customChain */ viemChain?: Chain + /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chain. Alias of viemChain */ + customChain?: Chain /** The initial code to be used for the smart account */ initCode?: Hex /** Used for session key manager module */ diff --git a/src/account/utils/getChain.ts b/src/account/utils/getChain.ts index 63bb51401..0ccb8be7e 100644 --- a/src/account/utils/getChain.ts +++ b/src/account/utils/getChain.ts @@ -1,6 +1,32 @@ import * as chains from "viem/chains" import type { Chain } from "viem/chains" +const CUSTOM_CHAINS: Chain[] = [ + { + id: 81_457, + name: "Blast", + nativeCurrency: { + decimals: 18, + name: "Ethereum", + symbol: "ETH" + }, + rpcUrls: { + public: { http: ["https://rpc.blast.io"] }, + default: { http: ["https://rpc.blast.io"] } + }, + blockExplorers: { + etherscan: { name: "Blastscan", url: "https://blastscan.io/" }, + default: { name: "Blastscan", url: "https://blastscan.io/" } + }, + contracts: { + multicall3: { + address: "0xca11bde05977b3631167028862be2a173976ca11", + blockCreated: 88_189 + } + } + } +] + /** * Utility method for converting a chainId to a {@link Chain} object * @@ -9,10 +35,92 @@ import type { Chain } from "viem/chains" * @throws if the chainId is not found */ export const getChain = (chainId: number): Chain => { - for (const chain of Object.values(chains)) { + const allChains = [...Object.values(chains), ...CUSTOM_CHAINS] + for (const chain of allChains) { if (chain.id === chainId) { return chain } } - throw new Error("Chain not found") + throw new Error( + "Chain not found. Please add a customChain into your config using the getCustomChain(...) helper, and the BiconomySmartAccountV2Config['customChain'] config option" + ) +} + +export const stringOrStringsToArray = (str: string | string[]): string[] => + Array.isArray(str) ? str : [str] + +type StringOrStrings = string | string[] +/** + * + * getCustomChain + * + * Utility method for creating a custom chain object + * + * @param name The name of the chain + * @param id The chainId (number) + * @param rpcUrl The RPC URL for the chain - may also be an array of URLs + * @param blockExplorer The block explorer URL for the chain - may also be an array of URLs + * @param nativeCurrency The native currency for the chain, ETH by default + * + * @example + * + * import { getCustomChain, createSmartAccountClient } from "@biconomy/account" + * + * const customChain = getCustomChain( + * "My Custom Chain", + * 123456, // id + * "https://rpc.my-custom-chain.io", // Can also pass an array of URLs + * "https://explorer.my-custom-chain.io" // Can also pass an array of URLs + * ) + * + * const account = privateKeyToAccount(`0x${privateKey}`) + * const walletClientWithCustomChain = createWalletClient({ + * account, + * chain: customChain, + * transport: http() + * }) + * + * const smartAccountCustomChain = await createSmartAccountClient({ + * signer: walletClientWithCustomChain, + * bundlerUrl, + * customChain + * }) + * + * const { wait } = await smartAccountCustomChain.sendTransaction({ + * to: recipient, + * value: BigInt(1) + * }) + * + * const { success, receipt } = await wait(); + * console.log(success); + * + */ +export const getCustomChain = ( + name: string, + id: number, + rpcUrl: StringOrStrings, + blockExplorer: StringOrStrings, + nativeCurrency?: Chain["nativeCurrency"], + contracts?: Chain["contracts"] +): Chain => { + const chain: Chain = { + id, + name, + nativeCurrency: nativeCurrency ?? { + decimals: 18, + name: "Ethereum", + symbol: "ETH" + }, + rpcUrls: { + default: { http: stringOrStringsToArray(rpcUrl) } + }, + blockExplorers: { + default: { + name: "Explorer", + url: stringOrStringsToArray(blockExplorer)[0] + } + }, + ...((contracts && { contracts }) || {}) + } + return chain } diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index 6772b131f..b9ced0b4b 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -58,10 +58,16 @@ export class Bundler implements IBundler { this.bundlerConfig = { ...bundlerConfig, chainId: parsedChainId } this.provider = createPublicClient({ - chain: bundlerConfig.viemChain ?? getChain(parsedChainId), + chain: + bundlerConfig.viemChain ?? + bundlerConfig.customChain ?? + getChain(parsedChainId), transport: http( - (bundlerConfig.viemChain || getChain(parsedChainId)).rpcUrls.default - .http[0] + ( + bundlerConfig.viemChain || + bundlerConfig.customChain || + getChain(parsedChainId) + ).rpcUrls.default.http[0] ) }) diff --git a/src/bundler/utils/Types.ts b/src/bundler/utils/Types.ts index d04b4505d..cbaba24e4 100644 --- a/src/bundler/utils/Types.ts +++ b/src/bundler/utils/Types.ts @@ -10,8 +10,10 @@ export type Bundlerconfig = { userOpWaitForTxHashIntervals?: { [key in number]?: number } userOpReceiptMaxDurationIntervals?: { [key in number]?: number } userOpWaitForTxHashMaxDurationIntervals?: { [key in number]?: number } - /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains */ + /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains. Alias of customChain */ viemChain?: Chain + /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains. Alias of viemChain */ + customChain?: Chain } export type BundlerConfigWithChainId = Bundlerconfig & { chainId: number } diff --git a/src/modules/session-storage/SessionFileStorage.ts b/src/modules/session-storage/SessionFileStorage.ts index fb92d0a1d..09d50bc31 100644 --- a/src/modules/session-storage/SessionFileStorage.ts +++ b/src/modules/session-storage/SessionFileStorage.ts @@ -1,7 +1,5 @@ -import * as nodeFs from "node:fs" import { http, type Chain, type Hex, createWalletClient } from "viem" import { privateKeyToAccount } from "viem/accounts" -import { getRandomSigner } from "../.." import { Logger, type SmartAccountSigner, @@ -13,19 +11,49 @@ import type { SessionSearchParam, SessionStatus } from "../interfaces/ISessionStorage" +import { getRandomSigner } from "../utils/Helper" import type { SignerData } from "../utils/Types" +const getNodeFs = () => { + // biome-ignore lint/suspicious/noImplicitAnyLet: <explanation> + let nodeFs + try { + //@ts-ignore + nodeFs = require("node:fs") + } catch (error) { + //@ts-ignore + // biome-ignore lint/style/useNodejsImportProtocol: <explanation> + nodeFs = require("fs") + } + return nodeFs +} + +const DIRECTORY_NAME = "sessionStorageData" + export class SessionFileStorage implements ISessionStorage { public smartAccountAddress: Hex + private storeUrl: string - constructor(smartAccountAddress: Hex) { + constructor(smartAccountAddress: Hex, url?: string) { this.smartAccountAddress = smartAccountAddress.toLowerCase() as Hex + + const defaultedDirectory = url ?? __dirname + this.storeUrl = [defaultedDirectory, DIRECTORY_NAME].join("/") + this.createDirectory() + } + + private createDirectory(): void { + const nodeFs = getNodeFs() + if (!nodeFs.existsSync(this.storeUrl)) { + nodeFs.mkdirSync(this.storeUrl) + } } // This method reads data from the file and returns it in the JSON format // biome-ignore lint/suspicious/noExplicitAny: <explanation> private async readDataFromFile(type: "sessions" | "signers"): Promise<any> { return new Promise((resolve) => { + const nodeFs = getNodeFs() nodeFs.readFile( this.getStorageFilePath(type), "utf8", @@ -48,7 +76,7 @@ export class SessionFileStorage implements ISessionStorage { } private getStorageFilePath(type: "sessions" | "signers"): string { - return `${__dirname}/sessionStorageData/${this.smartAccountAddress}_${type}.json` + return `${this.storeUrl}/${this.smartAccountAddress}_${type}.json` } private async writeDataToFile( @@ -58,6 +86,7 @@ export class SessionFileStorage implements ISessionStorage { ): Promise<void> { return new Promise((resolve, reject) => { const filePath = this.getStorageFilePath(type) + const nodeFs = getNodeFs() nodeFs.writeFile( filePath, JSON.stringify(data), diff --git a/src/modules/sessions/sessionSmartAccountClient.ts b/src/modules/sessions/sessionSmartAccountClient.ts index e7804258b..bbff46db4 100644 --- a/src/modules/sessions/sessionSmartAccountClient.ts +++ b/src/modules/sessions/sessionSmartAccountClient.ts @@ -84,6 +84,7 @@ export const createSessionSmartAccountClient = async ( const chain = biconomySmartAccountConfig.viemChain ?? + biconomySmartAccountConfig.customChain ?? getChain(biconomySmartAccountConfig.chainId) const incompatibleSigner = createWalletClient({ diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 6f3bdeb7c..c7c2a0dfb 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -9,12 +9,14 @@ import { } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { readContract } from "viem/actions" +import { polygonAmoy } from "viem/chains" import { beforeAll, describe, expect, test } from "vitest" import { type BiconomySmartAccountV2, DEFAULT_ENTRYPOINT_ADDRESS, ERC20_ABI, createSmartAccountClient, + getCustomChain, percentage } from "../../src/account" import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" @@ -27,7 +29,13 @@ import { } from "../../src/modules" import { PaymasterMode } from "../../src/paymaster" import { testOnlyOnOptimism } from "../setupFiles" -import { checkBalance, getConfig, nonZeroBalance, topUp } from "../utils" +import { + checkBalance, + getBundlerUrl, + getConfig, + nonZeroBalance, + topUp +} from "../utils" describe("Account:Write", () => { const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" @@ -167,6 +175,47 @@ describe("Account:Write", () => { expect(byteCode).toBeTruthy() }, 60000) + test.concurrent( + "should add a custom chain", + async () => { + const customChain = getCustomChain( + "Amoy", + polygonAmoy.id, + polygonAmoy.rpcUrls.default.http[0], + polygonAmoy.blockExplorers.default.url + ) + + const accountOne = privateKeyToAccount(`0x${privateKey}`) + const walletClientWithCustomChain = createWalletClient({ + account: accountOne, + chain: customChain, + transport: http() + }) + + const smartAccountCustomChain = await createSmartAccountClient({ + signer: walletClientWithCustomChain, + bundlerUrl, + customChain + }) + + expect(smartAccountCustomChain.rpcProvider.transport.url).toBe( + "https://rpc-amoy.polygon.technology" + ) + expect(walletClientWithCustomChain.chain).toEqual(customChain) + + const { wait } = await smartAccountCustomChain.sendTransaction({ + to: recipient, + value: BigInt(1) + }) + + const { success, receipt } = await wait() + + expect(receipt).toBeTruthy() + expect(success).toBe("true") + }, + 80000 + ) + testOnlyOnOptimism( "should send some native token to a recipient on optimism", async () => { diff --git a/tests/bundler/read.test.ts b/tests/bundler/read.test.ts index 73d2f415c..2b8c27b4b 100644 --- a/tests/bundler/read.test.ts +++ b/tests/bundler/read.test.ts @@ -5,7 +5,8 @@ import { type BiconomySmartAccountV2, type BiconomySmartAccountV2Config, compareChainIds, - createSmartAccountClient + createSmartAccountClient, + getCustomChain } from "../../src/account" import { createBundler } from "../../src/bundler" import { getBundlerUrl, getConfig } from "../utils" From 97c8fcdc848adb7ab7e132bc5123e108948b1f1e Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Thu, 30 May 2024 17:11:31 +0300 Subject: [PATCH 1189/1247] chore: add test concurrency using nonceOptions (#506) * chore: add test concurrency using nonceOptions (#506) --------- Co-authored-by: GabiDev <gv@popoo.io> Co-authored-by: Joe Pegler <joepegler123@gmail.com> --- tests/account/read.test.ts | 2 - tests/account/write.test.ts | 537 +++++++++++++++------------------- tests/bundler/write.test.ts | 38 ++- tests/modules/write.test.ts | 17 +- tests/paymaster/write.test.ts | 16 +- 5 files changed, 279 insertions(+), 331 deletions(-) diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index be9ba68a1..e2ca26ecf 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -816,8 +816,6 @@ describe("Account:Read", () => { bundlerUrl }) - console.log(smartAccountAddress, "smartAccountAdderss") - const balances = await smartAccount.getBalances() expect(balances[0].amount).toBeGreaterThan(0n) diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index c7c2a0dfb..8d18f2f35 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -8,36 +8,26 @@ import { parseAbi } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { readContract } from "viem/actions" import { polygonAmoy } from "viem/chains" import { beforeAll, describe, expect, test } from "vitest" import { type BiconomySmartAccountV2, DEFAULT_ENTRYPOINT_ADDRESS, ERC20_ABI, + type TransferOwnershipCompatibleModule, createSmartAccountClient, getCustomChain, percentage } from "../../src/account" import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" -import { getAAError } from "../../src/bundler/utils/getAAError" -import { - DEFAULT_ECDSA_OWNERSHIP_MODULE, - DEFAULT_MULTICHAIN_MODULE, - createMultiChainValidationModule -} from "../../src/modules" +import { DEFAULT_ECDSA_OWNERSHIP_MODULE } from "../../src/modules" import { PaymasterMode } from "../../src/paymaster" import { testOnlyOnOptimism } from "../setupFiles" -import { - checkBalance, - getBundlerUrl, - getConfig, - nonZeroBalance, - topUp -} from "../utils" - -describe("Account:Write", () => { +import { checkBalance, getConfig, nonZeroBalance, topUp } from "../utils" + +describe("Account:Write", async () => { + const nonceOptions = { nonceKey: Date.now() + 10 } const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" const { @@ -72,6 +62,16 @@ describe("Account:Write", () => { }) ] + const firstOwner = account.address + const newOwner = accountTwo.address + + let _smartAccount = await createSmartAccountClient({ + signer: walletClient, + paymasterUrl, + bundlerUrl + // accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" + }) + beforeAll(async () => { ;[smartAccount, smartAccountTwo] = await Promise.all( [walletClient, walletClientTwo].map((client) => @@ -203,10 +203,13 @@ describe("Account:Write", () => { ) expect(walletClientWithCustomChain.chain).toEqual(customChain) - const { wait } = await smartAccountCustomChain.sendTransaction({ - to: recipient, - value: BigInt(1) - }) + const { wait } = await smartAccountCustomChain.sendTransaction( + { + to: recipient, + value: BigInt(1) + }, + { nonceOptions } + ) const { success, receipt } = await wait() @@ -226,9 +229,7 @@ describe("Account:Write", () => { to: recipient, value: BigInt(1) }, - { - simulationType: "validation_and_execution" - } + { nonceOptions, simulationType: "validation_and_execution" } ) const result = await wait() @@ -262,6 +263,7 @@ describe("Account:Write", () => { [{ address: token, amount: BigInt(1), recipient: sender }], undefined, { + nonceOptions, paymasterServiceData: { mode: PaymasterMode.SPONSORED } @@ -301,6 +303,7 @@ describe("Account:Write", () => { const nativeBalanceBefore = await checkBalance(smartAccountAddress) const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) const { wait } = await smartAccount.sendTransaction([transaction], { + nonceOptions, paymasterServiceData: { mode: PaymasterMode.ERC20, preferredToken: token @@ -351,6 +354,7 @@ describe("Account:Write", () => { const nativeBalanceBefore = await checkBalance(smartAccountAddress) const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) const { wait } = await smartAccount.sendTransaction(transaction, { + nonceOptions, paymasterServiceData: { mode: PaymasterMode.ERC20, feeQuote: selectedFeeQuote, @@ -373,321 +377,248 @@ describe("Account:Write", () => { expect(newBalance - balance).toBe(1n) }, 60000) - describe("Account:User Op Gas Offset", () => { - test("should increment user op verificationGasLimit by 50%. Paymaster OFF", async () => { - const transaction = { - to: recipient, - data: "0x" + test("should increment user op verificationGasLimit by 50%. Paymaster OFF", async () => { + const transaction = { + to: recipient, + data: "0x" + } + + const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) + const userOpWithOffset = await smartAccount.buildUserOp([transaction], { + gasOffset: { + verificationGasLimitOffsetPct: 50 // 50% increase } + }) - const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) - const userOpWithOffset = await smartAccount.buildUserOp([transaction], { - gasOffset: { - verificationGasLimitOffsetPct: 50 // 50% increase - } - }) + const difference = Math.round( + Number(userOpWithOffset.verificationGasLimit) - + Number(userOpWithNoOffset.verificationGasLimit) + ) + const percentageValue = Math.round( + percentage(difference, Number(userOpWithNoOffset.verificationGasLimit)) + ) - const difference = Math.round( - Number(userOpWithOffset.verificationGasLimit) - - Number(userOpWithNoOffset.verificationGasLimit) - ) - const percentageValue = Math.round( - percentage(difference, Number(userOpWithNoOffset.verificationGasLimit)) - ) + expect(percentageValue).toBe(50) + }, 60000) - expect(percentageValue).toBe(50) - }, 60000) + test("should increment user op gas values. Paymaster OFF", async () => { + const transaction = { + to: recipient, + data: "0x" + } - test("should increment user op gas values. Paymaster OFF", async () => { - const transaction = { - to: recipient, - data: "0x" + const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) + const userOpWithOffset = await smartAccount.buildUserOp([transaction], { + gasOffset: { + verificationGasLimitOffsetPct: 50, // 50% increase + preVerificationGasOffsetPct: 100 // 100% increase } + }) - const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) - const userOpWithOffset = await smartAccount.buildUserOp([transaction], { - gasOffset: { - verificationGasLimitOffsetPct: 50, // 50% increase - preVerificationGasOffsetPct: 100 // 100% increase - } - }) + const vglDifference = Math.round( + Number(userOpWithOffset.verificationGasLimit) - + Number(userOpWithNoOffset.verificationGasLimit) + ) + const cgllDifference = Math.round( + Number(userOpWithOffset.callGasLimit) - + Number(userOpWithNoOffset.callGasLimit) + ) + const pvgDifference = Math.round( + Number(userOpWithOffset.preVerificationGas) - + Number(userOpWithNoOffset.preVerificationGas) + ) - const vglDifference = Math.round( - Number(userOpWithOffset.verificationGasLimit) - - Number(userOpWithNoOffset.verificationGasLimit) - ) - const cgllDifference = Math.round( - Number(userOpWithOffset.callGasLimit) - - Number(userOpWithNoOffset.callGasLimit) - ) - const pvgDifference = Math.round( - Number(userOpWithOffset.preVerificationGas) - - Number(userOpWithNoOffset.preVerificationGas) - ) + const vglPercentageValue = Math.round( + percentage(vglDifference, Number(userOpWithNoOffset.verificationGasLimit)) + ) + const cglPercentageValue = Math.round( + percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) + ) + const pvgPercentageValue = Math.round( + percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) + ) - const vglPercentageValue = Math.round( - percentage( - vglDifference, - Number(userOpWithNoOffset.verificationGasLimit) - ) - ) - const cglPercentageValue = Math.round( - percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) - ) - const pvgPercentageValue = Math.round( - percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) - ) + expect(vglPercentageValue).toBe(50) + expect(cglPercentageValue).toBe(0) + expect(pvgPercentageValue).toBe(100) + }, 60000) - expect(vglPercentageValue).toBe(50) - expect(cglPercentageValue).toBe(0) - expect(pvgPercentageValue).toBe(100) - }, 60000) + test("should increment user op gas values. Paymaster ON", async () => { + const transaction = { + to: recipient, + data: "0x" + } - test("should increment user op gas values. Paymaster ON", async () => { - const transaction = { - to: recipient, - data: "0x" + const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + gasOffset: { + verificationGasLimitOffsetPct: 0 // no increment but provided to avoid paymaster gas calculation (just for testing purposes) + } + }) // Passing gasOffset to avoid paymaster gas calculation + const userOpWithOffset = await smartAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + gasOffset: { + verificationGasLimitOffsetPct: 13.2, // 13.2% increase + preVerificationGasOffsetPct: 81 // 81% increase } + }) - const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - gasOffset: { - verificationGasLimitOffsetPct: 0 // no increment but provided to avoid paymaster gas calculation (just for testing purposes) - } - }) // Passing gasOffset to avoid paymaster gas calculation - const userOpWithOffset = await smartAccount.buildUserOp([transaction], { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - gasOffset: { - verificationGasLimitOffsetPct: 13.2, // 13.2% increase - preVerificationGasOffsetPct: 81 // 81% increase - } - }) + const vglDifference = Math.round( + Number(userOpWithOffset.verificationGasLimit) - + Number(userOpWithNoOffset.verificationGasLimit) + ) + const cgllDifference = Math.round( + Number(userOpWithOffset.callGasLimit) - + Number(userOpWithNoOffset.callGasLimit) + ) + const pvgDifference = Math.round( + Number(userOpWithOffset.preVerificationGas) - + Number(userOpWithNoOffset.preVerificationGas) + ) - const vglDifference = Math.round( - Number(userOpWithOffset.verificationGasLimit) - - Number(userOpWithNoOffset.verificationGasLimit) - ) - const cgllDifference = Math.round( - Number(userOpWithOffset.callGasLimit) - - Number(userOpWithNoOffset.callGasLimit) - ) - const pvgDifference = Math.round( - Number(userOpWithOffset.preVerificationGas) - - Number(userOpWithNoOffset.preVerificationGas) - ) + const vglPercentageValue = Math.round( + percentage(vglDifference, Number(userOpWithNoOffset.verificationGasLimit)) + ) + const cglPercentageValue = Math.round( + percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) + ) + const pvgPercentageValue = Math.round( + percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) + ) - const vglPercentageValue = Math.round( - percentage( - vglDifference, - Number(userOpWithNoOffset.verificationGasLimit) - ) - ) - const cglPercentageValue = Math.round( - percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) - ) - const pvgPercentageValue = Math.round( - percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) - ) + expect(vglPercentageValue).toBe(13) + expect(cglPercentageValue).toBe(0) + expect(pvgPercentageValue).toBe(81) + }, 60000) - expect(vglPercentageValue).toBe(13) - expect(cglPercentageValue).toBe(0) - expect(pvgPercentageValue).toBe(81) - }, 60000) + test("should throw if percentage given is bigger than 100. Paymaster ON", async () => { + const transaction = { + to: recipient, + data: "0x" + } - test("should throw if percentage given is bigger than 100. Paymaster ON", async () => { - const transaction = { - to: recipient, - data: "0x" + const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + gasOffset: { + verificationGasLimitOffsetPct: 0 // no increment, just for testing purposes } + }) // Passing gasOffset to avoid paymaster gas calculation + const userOpWithOffset = smartAccount.buildUserOp([transaction], { + paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + gasOffset: { + verificationGasLimitOffsetPct: 110 // 110% increase (not allowed) + } + }) - const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - gasOffset: { - verificationGasLimitOffsetPct: 0 // no increment, just for testing purposes - } - }) // Passing gasOffset to avoid paymaster gas calculation - const userOpWithOffset = smartAccount.buildUserOp([transaction], { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - gasOffset: { - verificationGasLimitOffsetPct: 110 // 110% increase (not allowed) - } - }) + expect(userOpWithOffset).rejects.toThrowError( + "The percentage value should be between 1 and 100." + ) + }, 60000) - expect(userOpWithOffset).rejects.toThrowError( - "The percentage value should be between 1 and 100." - ) - }, 60000) + test("should increment user op gas with no paymaster using sendTransaction", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } - test("should increment user op gas with no paymaster using sendTransaction", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall + const { wait } = await smartAccount.sendTransaction(transaction, { + nonceOptions, + gasOffset: { + verificationGasLimitOffsetPct: 10, // 10% increase + preVerificationGasOffsetPct: 20, // 20% increase + maxFeePerGasOffsetPct: 30, // 30% increase + callGasLimitOffsetPct: 40, // 40% increase + maxPriorityFeePerGasOffsetPct: 50 // 50% increase } + }) + const { + receipt: { transactionHash }, + userOpHash, + success + } = await wait() - const { wait } = await smartAccount.sendTransaction(transaction, { - gasOffset: { - verificationGasLimitOffsetPct: 10, // 10% increase - preVerificationGasOffsetPct: 20, // 20% increase - maxFeePerGasOffsetPct: 30, // 30% increase - callGasLimitOffsetPct: 40, // 40% increase - maxPriorityFeePerGasOffsetPct: 50 // 50% increase - } - }) - const { - receipt: { transactionHash }, - userOpHash, - success - } = await wait() + expect(userOpHash).toBeTruthy() + expect(success).toBe("true") + }, 60000) - expect(userOpHash).toBeTruthy() - expect(success).toBe("true") - expect(transactionHash).toBeTruthy() - }, 60000) - }) + test.skip("should transfer ownership of smart account to accountTwo", async () => { + const signerOfAccount = walletClient.account.address + const ownerOfAccount = await publicClient.readContract({ + address: DEFAULT_ECDSA_OWNERSHIP_MODULE, + abi: ECDSAModuleAbi, + functionName: "getOwner", + args: [await _smartAccount.getAccountAddress()] + }) - describe("Transfer ownership", async () => { - const firstOwner = account.address - const newOwner = accountTwo.address - let _smartAccount = await createSmartAccountClient({ + expect(ownerOfAccount).toBe(signerOfAccount) + const response = await _smartAccount.transferOwnership( + newOwner, + DEFAULT_ECDSA_OWNERSHIP_MODULE as TransferOwnershipCompatibleModule, + { + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + } + ) + const receipt = await response.wait() + expect(receipt.success).toBe("true") + }, 50000) + + test.skip("should revert transfer ownership with signer that is not the owner", async () => { + _smartAccount = await createSmartAccountClient({ signer: walletClient, paymasterUrl, - bundlerUrl - // accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" + bundlerUrl, + accountAddress: smartAccountAddress }) - const smartAccountAddress = await _smartAccount.getAccountAddress() - - test("should transfer ownership of smart account to accountTwo", async () => { - const signerOfAccount = walletClient.account.address - const ownerOfAccount = await publicClient.readContract({ - address: DEFAULT_ECDSA_OWNERSHIP_MODULE, - abi: ECDSAModuleAbi, - functionName: "getOwner", - args: [await _smartAccount.getAccountAddress()] - }) + const signerOfAccount = walletClient.account.address + const ownerOfAccount = await publicClient.readContract({ + address: DEFAULT_ECDSA_OWNERSHIP_MODULE, + abi: ECDSAModuleAbi, + functionName: "getOwner", + args: [await _smartAccount.getAccountAddress()] + }) - expect(ownerOfAccount).toBe(signerOfAccount) - const response = await _smartAccount.transferOwnership( + expect(ownerOfAccount).not.toBe(signerOfAccount) + expect( + _smartAccount.transferOwnership( newOwner, - DEFAULT_ECDSA_OWNERSHIP_MODULE, + DEFAULT_ECDSA_OWNERSHIP_MODULE as TransferOwnershipCompatibleModule, { paymasterServiceData: { mode: PaymasterMode.SPONSORED } } ) - const receipt = await response.wait() - expect(receipt.success).toBe("true") - }, 50000) - - test("should revert transfer ownership with signer that is not the owner", async () => { - _smartAccount = await createSmartAccountClient({ - signer: walletClient, - paymasterUrl, - bundlerUrl, - accountAddress: smartAccountAddress - }) - - const signerOfAccount = walletClient.account.address - const ownerOfAccount = await publicClient.readContract({ - address: DEFAULT_ECDSA_OWNERSHIP_MODULE, - abi: ECDSAModuleAbi, - functionName: "getOwner", - args: [await _smartAccount.getAccountAddress()] - }) - - expect(ownerOfAccount).not.toBe(signerOfAccount) - expect( - _smartAccount.transferOwnership( - newOwner, - DEFAULT_ECDSA_OWNERSHIP_MODULE, - { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - } - ) - ).rejects.toThrowError() - }, 50000) - - test("send an user op with the new owner", async () => { - _smartAccount = await createSmartAccountClient({ - signer: walletClientTwo, - paymasterUrl, - bundlerUrl, - accountAddress: smartAccountAddress - }) - const currentSmartAccountInstanceSigner = await _smartAccount - .getSigner() - .getAddress() - expect(currentSmartAccountInstanceSigner).toBe(newOwner) - const tx = { - to: nftAddress, - data: encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [smartAccountAddressTwo] - }) - } - const { wait } = await _smartAccount.sendTransaction(tx, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) - const response = await wait() - expect(response.success).toBe("true") - }, 50000) - - test("should revert if sending an user op with the old owner", async () => { - _smartAccount = await createSmartAccountClient({ - signer: walletClient, - paymasterUrl, - bundlerUrl, - accountAddress: smartAccountAddress - }) - const tx = { - to: nftAddress, - data: encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [smartAccountAddressTwo] - }) - } - await expect( - _smartAccount.sendTransaction(tx, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) - ).rejects.toThrowError( - await getAAError("Error coming from Bundler: AA24 signature error") - ) - }, 50000) - - test("should transfer ownership of smart account back to EOA 1", async () => { - _smartAccount = await createSmartAccountClient({ - signer: walletClientTwo, - paymasterUrl, - bundlerUrl, - accountAddress: smartAccountAddress - }) + ).rejects.toThrowError() + }, 50000) - const signerOfAccount = walletClientTwo.account.address - const ownerOfAccount = await publicClient.readContract({ - address: DEFAULT_ECDSA_OWNERSHIP_MODULE, - abi: ECDSAModuleAbi, - functionName: "getOwner", - args: [await _smartAccount.getAccountAddress()] + test.skip("send an user op with the new owner", async () => { + _smartAccount = await createSmartAccountClient({ + signer: walletClientTwo, + paymasterUrl, + bundlerUrl, + accountAddress: smartAccountAddress + }) + const currentSmartAccountInstanceSigner = await _smartAccount + .getSigner() + .getAddress() + expect(currentSmartAccountInstanceSigner).toBe(newOwner) + const tx = { + to: nftAddress, + data: encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [smartAccountAddressTwo] }) - - expect(ownerOfAccount).toBe(signerOfAccount) - - const response = await _smartAccount.transferOwnership( - firstOwner, - DEFAULT_ECDSA_OWNERSHIP_MODULE, - { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - } - ) - const receipt = await response.wait() - expect(receipt.success).toBe("true") - }, 50000) - }) + } + const { wait } = await _smartAccount.sendTransaction(tx, { + nonceOptions, + paymasterServiceData: { mode: PaymasterMode.SPONSORED } + }) + const response = await wait() + expect(response.success).toBe("true") + }, 50000) }) diff --git a/tests/bundler/write.test.ts b/tests/bundler/write.test.ts index 5fd3b3d9d..2527e33fb 100644 --- a/tests/bundler/write.test.ts +++ b/tests/bundler/write.test.ts @@ -16,6 +16,7 @@ import { } from "../utils" describe("Bundler:Write", () => { + const nonceOptions = { nonceKey: Date.now() + 20 } const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" const { chain, @@ -70,15 +71,18 @@ describe("Bundler:Write", () => { await topUp(smartAccountAddress, BigInt(1000000000000000000)) const balanceOfRecipient = await checkBalance(recipient) - const { wait } = await smartAccount.sendTransaction({ - to: recipient, - value: 1n - }) + const { wait } = await smartAccount.sendTransaction( + { + to: recipient, + value: 1n + }, + { nonceOptions } + ) const { receipt: { transactionHash }, success - } = await wait(3) + } = await wait() expect(success).toBe("true") @@ -106,15 +110,18 @@ describe("Bundler:Write", () => { }) const { wait } = - await smartAccountClientWithBundlerInstance.sendTransaction({ - to: recipient, - value: 1 - }) + await smartAccountClientWithBundlerInstance.sendTransaction( + { + to: recipient, + value: 1 + }, + { nonceOptions } + ) const { receipt: { transactionHash }, success - } = await wait(3) + } = await wait() expect(success).toBe("true") @@ -147,10 +154,13 @@ describe("Bundler:Write", () => { expect(chain.id).toBe(NETWORK_ID) - const { wait } = await newSmartAccount.sendTransaction({ - to: recipient, - value: 1n - }) + const { wait } = await newSmartAccount.sendTransaction( + { + to: recipient, + value: 1n + }, + { nonceOptions } + ) const { success } = await wait() diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts index 22ad24ccb..2daad3f4f 100644 --- a/tests/modules/write.test.ts +++ b/tests/modules/write.test.ts @@ -56,6 +56,7 @@ import { PaymasterMode } from "../../src/paymaster" import { checkBalance, getBundlerUrl, getConfig, topUp } from "../utils" describe("Modules:Write", () => { + const nonceOptions = { nonceKey: Date.now() + 30 } const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" const amount = parseUnits(".0001", 6) @@ -228,7 +229,7 @@ describe("Modules:Write", () => { const { wait } = await smartAccountThreeWithSession.sendTransaction( nftMintTx, - withSponsorship + { ...withSponsorship, nonceOptions } ) const { success } = await wait() @@ -362,7 +363,8 @@ describe("Modules:Write", () => { const { wait } = await smartAccountFourWithSession.sendTransaction(txs, { ...batchSessionParams, - ...withSponsorship + ...withSponsorship, + nonceOptions }) const { success } = await wait() expect(success).toBe("true") @@ -595,6 +597,7 @@ describe("Modules:Write", () => { txArray.push(setSessionAllowedTrx) } const userOp = await smartAccount.buildUserOp(txArray, { + nonceOptions, paymasterServiceData: { mode: PaymasterMode.SPONSORED } @@ -615,6 +618,7 @@ describe("Modules:Write", () => { smartAccount = smartAccount.setActiveValidationModule(sessionModule) const maticBalanceBefore = await checkBalance(smartAccountAddress) const userOpResponse2 = await smartAccount.sendTransaction(nftMintTx, { + nonceOptions, params: { sessionSigner: sessionSigner, sessionValidationModule: abiSvmAddress @@ -645,6 +649,7 @@ describe("Modules:Write", () => { DEFAULT_BATCHED_SESSION_ROUTER_MODULE ) const { wait } = await smartAccount.sendTransaction(tx, { + nonceOptions, paymasterServiceData: { mode: PaymasterMode.SPONSORED } }) const { success } = await wait() @@ -652,7 +657,7 @@ describe("Modules:Write", () => { } }, 50000) - test("should use ABI SVM to allow transfer ownership of smart account", async () => { + test.skip("should use ABI SVM to allow transfer ownership of smart account", async () => { const smartAccount = await createSmartAccountClient({ chainId, signer: walletClient, @@ -786,6 +791,7 @@ describe("Modules:Write", () => { txArray.push(setSessionAllowedTransferOwnerhsipTrx) } const userOpResponse1 = await smartAccount.sendTransaction(txArray, { + nonceOptions, paymasterServiceData: { mode: PaymasterMode.SPONSORED } }) const transactionDetails = await userOpResponse1.wait() @@ -920,7 +926,8 @@ describe("Modules:Write", () => { txs, { ...batchSessionParams, - ...withSponsorship + ...withSponsorship, + nonceOptions } ) @@ -1037,11 +1044,13 @@ describe("Modules:Write", () => { const { wait: waitForCancelTx } = await smartAccountWithSession.sendTransaction(submitCancelTx, { + nonceOptions, ...singleSessionParamsForCancel, ...withSponsorship }) const { wait: waitForOrderTx } = await smartAccountWithSession.sendTransaction(submitOrderTx, { + nonceOptions, ...singleSessionParamsForOrder, ...withSponsorship }) diff --git a/tests/paymaster/write.test.ts b/tests/paymaster/write.test.ts index cb1170318..fa63a82e9 100644 --- a/tests/paymaster/write.test.ts +++ b/tests/paymaster/write.test.ts @@ -18,6 +18,7 @@ import { testOnlyOnOptimism } from "../setupFiles" import { checkBalance, getConfig, nonZeroBalance, topUp } from "../utils" describe("Paymaster:Write", () => { + const nonceOptions = { nonceKey: Date.now() + 40 } const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" const { chain, @@ -87,8 +88,8 @@ describe("Paymaster:Write", () => { const maticBalanceBefore = await checkBalance(smartAccountAddress) const response = await smartAccount.sendTransaction(transaction, { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - simulationType: "validation" + nonceOptions, + paymasterServiceData: { mode: PaymasterMode.SPONSORED } }) const userOpReceipt = await response.wait(3) @@ -127,6 +128,7 @@ describe("Paymaster:Write", () => { expect(balance).toBe(0n) const { wait } = await smartAccount.deploy({ + nonceOptions, paymasterServiceData: { mode: PaymasterMode.SPONSORED } }) const { success } = await wait() @@ -153,9 +155,7 @@ describe("Paymaster:Write", () => { } ], null, - { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - } + { nonceOptions, paymasterServiceData: { mode: PaymasterMode.SPONSORED } } ) const { @@ -194,6 +194,7 @@ describe("Paymaster:Write", () => { const maticBalanceBefore = await checkBalance(smartAccountAddress) const response = await smartAccount.sendTransaction(transaction, { + nonceOptions, paymasterServiceData: { mode: PaymasterMode.SPONSORED }, simulationType: "validation_and_execution" }) @@ -231,9 +232,7 @@ describe("Paymaster:Write", () => { { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } ], sender, - { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - } + { nonceOptions, paymasterServiceData: { mode: PaymasterMode.SPONSORED } } ) const { @@ -269,6 +268,7 @@ describe("Paymaster:Write", () => { [] /* null or undefined or [] */, sender, { + nonceOptions, paymasterServiceData: { mode: PaymasterMode.SPONSORED } // Will leave no dust } ) From 6678f24080a134a916137dd66cd7a9381a0ecd5a Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Thu, 30 May 2024 15:56:39 +0100 Subject: [PATCH 1190/1247] chore: batch session with token gas payments (#505) * chore: support erc20 payment session --- README.md | 1 + bun.lockb | Bin 265869 -> 273554 bytes examples/CREATE_AND_USE_A_SESSION.md | 26 +- package.json | 5 +- src/account/BiconomySmartAccountV2.ts | 2 + src/account/utils/Constants.ts | 3 + src/modules/sessions/abi.ts | 50 +- src/modules/sessions/batch.ts | 37 +- .../sessions/sessionSmartAccountClient.ts | 44 +- src/modules/utils/Helper.ts | 33 +- src/modules/utils/Types.ts | 7 +- tests/modules/write.test.ts | 322 +- tests/paymaster/{read.test.ts => read.ts} | 0 tests/paymaster/{write.test.ts => write.ts} | 0 tests/playground/read.test.ts | 75 + tests/playground/write.test.ts | 75 + yarn.lock | 4949 ----------------- 17 files changed, 645 insertions(+), 4984 deletions(-) rename tests/paymaster/{read.test.ts => read.ts} (100%) rename tests/paymaster/{write.test.ts => write.ts} (100%) create mode 100644 tests/playground/read.test.ts create mode 100644 tests/playground/write.test.ts delete mode 100644 yarn.lock diff --git a/README.md b/README.md index db77d8f2d..88e5fabf8 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,7 @@ For a comprehensive understanding of our project and to contribute effectively, - [send some eth with sponsorship](examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md) - [send a multi tx and pay gas with an erc20 token](examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md) - [create and use a session](examples/CREATE_AND_USE_A_SESSION.md) +- [create and use a batch session](examples/CREATE_AND_USE_A_BATCH_SESSION.md) ## License diff --git a/bun.lockb b/bun.lockb index 0136a98d92eb4aa9d5843973ef79a2606b323c6a..c52c0c9f44f5d0113a8919c590c318700a7cf4a2 100755 GIT binary patch delta 64213 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%0D;! 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 delta 59986 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 b*b>Cg9i=IERI$}kv-8-3GK*KWjduTk;`F$u diff --git a/examples/CREATE_AND_USE_A_SESSION.md b/examples/CREATE_AND_USE_A_SESSION.md index 15258630d..738c6718f 100644 --- a/examples/CREATE_AND_USE_A_SESSION.md +++ b/examples/CREATE_AND_USE_A_SESSION.md @@ -32,10 +32,32 @@ const { sessionKeyAddress, sessionStorageClient } = await createSessionKeyEOA( chain ); -// The rules that govern the method from the whitelisted contract +/** + * Rule + * + * https://docs.biconomy.io/Modules/abiSessionValidationModule#rules + * + * Rules define permissions for the args of an allowed method. With rules, you can precisely define what should be the args of the transaction that is allowed for a given Session. Every Rule works with a single static arg or a 32-byte chunk of the dynamic arg. + * Since the ABI Encoding translates every static param into a 32-bytes word, even the shorter ones (like address or uint8), every Rule defines a desired relation (Condition) between n-th 32bytes word of the calldata and a reference Value (that is obviously a 32-bytes word as well). + * So, when dApp is creating a _sessionKeyData to enable a session, it should convert every shorter static arg to a 32bytes word to match how it will be actually ABI encoded in the userOp.callData. + * For the dynamic args, like bytes, every 32-bytes word of the calldata such as offset of the bytes arg, length of the bytes arg, and n-th 32-bytes word of the bytes arg can be controlled by a dedicated Rule. + */ const rules: Rule = [ { - /** The index of the param from the selected contract function upon which the condition will be applied */ + /** + * + * offset + * + * https://docs.biconomy.io/Modules/abiSessionValidationModule#rules + * + * The offset in the ABI SVM contract helps locate the relevant data within the function call data, it serves as a reference point from which to start reading or extracting specific information required for validation. When processing function call data, particularly in low-level languages like Solidity assembly, it's necessary to locate where specific parameters or arguments are stored. The offset is used to calculate the starting position within the calldata where the desired data resides. Suppose we have a function call with multiple arguments passed as calldata. Each argument occupies a certain number of bytes, and the offset helps determine where each argument begins within the calldata. + * Using the offset to Extract Data: In the contract, the offset is used to calculate the position within the calldata where specific parameters or arguments are located. Since every arg is a 32-bytes word, offsets are always multiplier of 32 (or of 0x20 in hex). + * Let's see how the offset is applied to extract the to and value arguments of a transfer(address to, uint256 value) method: + * - Extracting to Argument: The to argument is the first parameter of the transfer function, representing the recipient address. Every calldata starts with the 4-bytes method selector. However, the ABI SVM is adding the selector length itself, so for the first argument the offset will always be 0 (0x00); + * - Extracting value Argument: The value argument is the second parameter of the transfer function, representing the amount of tokens to be transferred. To extract this argument, the offset for the value parameter would be calculated based on its position in the function calldata. Despite to is a 20-bytes address, in the solidity abi encoding it is always appended with zeroes to a 32-bytes word. So the offset for the second 32-bytes argument (which isthe value in our case) will be 32 (or 0x20 in hex). + * + * If you need to deal with dynamic-length arguments, such as bytes, please refer to this document https://docs.soliditylang.org/en/v0.8.24/abi-spec.html#function-selector-and-argument-encoding to learn more about how dynamic arguments are represented in the calldata and which offsets should be used to access them. + */ offset: 0, /** * Conditions: diff --git a/package.json b/package.json index 19c404866..a8867b191 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,9 @@ "typings": "./dist/_types/index.d.ts", "homepage": "https://biconomy.io", "sideEffects": false, - "name": "@biconomy/account", + "name": "@biconomy-devx/account", "author": "Biconomy", - "version": "4.4.4", + "version": "4.4.27", "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ "erc-7579", @@ -58,6 +58,7 @@ "build": "bun run clean && bun run build:cjs && bun run build:esm && bun run build:types", "clean": "rimraf ./dist/_esm ./dist/_cjs ./dist/_types ./dist/tsconfig", "test": "vitest dev -c ./tests/vitest.config.ts", + "playground": "bun run test -t=Playground --watch", "test:readOnly": "bun run test read", "test:watch": "bun run test --watch", "test:watch:readOnly": "bun run test:readOnly --watch", diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 01ae3f248..5cdb43824 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -1227,10 +1227,12 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // biome-ignore lint/performance/noDelete: <explanation> delete userOp.signature const userOperation = await this.signUserOp(userOp, params) + const bundlerResponse = await this.sendSignedUserOp( userOperation, params?.simulationType ) + return bundlerResponse } diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index a9608670d..b568a9ca4 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -31,6 +31,9 @@ export const BICONOMY_FACTORY_ADDRESSES: BiconomyFactories = { "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5": "V2_0_0" } +export const BICONOMY_TOKEN_PAYMASTER = + "0x00000f7365cA6C59A2C93719ad53d567ed49c14C" + // will always be latest implementation address export const DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS = "0x0000002512019Dafb59528B82CB92D3c5D2423aC" diff --git a/src/modules/sessions/abi.ts b/src/modules/sessions/abi.ts index b80ed9454..dc38a4170 100644 --- a/src/modules/sessions/abi.ts +++ b/src/modules/sessions/abi.ts @@ -22,7 +22,11 @@ import { Logger, type Transaction } from "../../account" -import { createSessionKeyManagerModule, resumeSession } from "../index" +import { + createSessionKeyManagerModule, + didProvideFullSession, + resumeSession +} from "../index" import type { ISessionStorage } from "../interfaces/ISessionStorage" import { DEFAULT_ABI_SVM_MODULE, @@ -190,11 +194,15 @@ export const createSession = async ( } } +export type HardcodedFunctionSelector = { + raw: Hex +} + export type CreateSessionDatumParams = { interval?: SessionEpoch sessionKeyAddress: Hex contractAddress: Hex - functionSelector: string | AbiFunction + functionSelector: string | AbiFunction | HardcodedFunctionSelector rules: Rule[] valueLimit: bigint } @@ -224,6 +232,24 @@ export const createABISessionDatum = ({ valueLimit }: CreateSessionDatumParams): CreateSessionDataParams => { const { validUntil = 0, validAfter = 0 } = interval ?? {} + + let parsedFunctionSelector: Hex = "0x" + + const rawFunctionSelectorWasProvided = !!( + functionSelector as HardcodedFunctionSelector + )?.raw + + if (rawFunctionSelectorWasProvided) { + parsedFunctionSelector = (functionSelector as HardcodedFunctionSelector).raw + } else { + const unparsedFunctionSelector = functionSelector as AbiFunction | string + parsedFunctionSelector = slice( + toFunctionSelector(unparsedFunctionSelector), + 0, + 4 + ) + } + return { validUntil, validAfter, @@ -231,7 +257,7 @@ export const createABISessionDatum = ({ sessionPublicKey: sessionKeyAddress, sessionKeyData: getSessionDatum(sessionKeyAddress, { destContract: contractAddress, - functionSelector: slice(toFunctionSelector(functionSelector), 0, 4), + functionSelector: parsedFunctionSelector, valueLimit, rules }) @@ -284,6 +310,7 @@ export function getSessionDatum( parseReferenceValue(permission.rules[i].referenceValue) ]) as Hex } + return sessionKeyData } @@ -326,7 +353,7 @@ export type SingleSessionParamsPayload = { * * Retrieves the transaction parameters for a batched session. * - * @param correspondingIndex - An index for the transaction corresponding to the relevant session + * @param correspondingIndex - An index for the transaction corresponding to the relevant session. If not provided, the last session index is used. * @param conditionalSession - {@link SessionSearchParam} The session data that contains the sessionID and sessionSigner. If not provided, The default session storage (localStorage in browser, fileStorage in node backend) is used to fetch the sessionIDInfo * @param chain - The chain. * @returns Promise<{@link BatchSessionParamsPayload}> - session parameters. @@ -335,14 +362,19 @@ export type SingleSessionParamsPayload = { export const getSingleSessionTxParams = async ( conditionalSession: SessionSearchParam, chain: Chain, - correspondingIndex = 0 + correspondingIndex: number | null | undefined ): Promise<SingleSessionParamsPayload> => { - const { sessionStorageClient, sessionIDInfo } = - await resumeSession(conditionalSession) + const { sessionStorageClient } = await resumeSession(conditionalSession) + + // if correspondingIndex is null then use the last session. + const allSessions = await sessionStorageClient.getAllSessionData() + const sessionID = didProvideFullSession(conditionalSession) + ? (conditionalSession as Session).sessionIDInfo[correspondingIndex ?? 0] + : allSessions[correspondingIndex ?? allSessions.length - 1].sessionID const sessionSigner = await sessionStorageClient.getSignerBySession( { - sessionID: sessionIDInfo[0] + sessionID }, chain ) @@ -350,7 +382,7 @@ export const getSingleSessionTxParams = async ( return { params: { sessionSigner, - sessionID: sessionIDInfo[correspondingIndex] + sessionID } } } diff --git a/src/modules/sessions/batch.ts b/src/modules/sessions/batch.ts index af4635e2f..741135546 100644 --- a/src/modules/sessions/batch.ts +++ b/src/modules/sessions/batch.ts @@ -4,17 +4,20 @@ import { type BuildUserOpOptions, ERROR_MESSAGES, Logger, - type Transaction + type Transaction, + isNullOrUndefined } from "../../account" import { type CreateSessionDataParams, DEFAULT_BATCHED_SESSION_ROUTER_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE, + type Session, type SessionGrantedPayload, type SessionParams, type SessionSearchParam, createBatchedSessionRouterModule, createSessionKeyManagerModule, + didProvideFullSession, resumeSession } from "../index.js" import type { ISessionStorage } from "../interfaces/ISessionStorage" @@ -192,7 +195,7 @@ export type BatchSessionParamsPayload = { * Retrieves the transaction parameters for a batched session. * * @param transactions - An array of {@link Transaction}s. - * @param correspondingIndexes - An array of indexes for the transactions corresponding to the relevant session + * @param correspondingIndexes - An array of indexes for the transactions corresponding to the relevant session. If not provided, the last {transaction.length} sessions are used. * @param conditionalSession - {@link SessionSearchParam} The session data that contains the sessionID and sessionSigner. If not provided, The default session storage (localStorage in browser, fileStorage in node backend) is used to fetch the sessionIDInfo * @param chain - The chain. * @returns Promise<{@link BatchSessionParamsPayload}> - session parameters. @@ -200,16 +203,32 @@ export type BatchSessionParamsPayload = { */ export const getBatchSessionTxParams = async ( transactions: Transaction[], - correspondingIndexes: number[], + correspondingIndexes: number[] | null, conditionalSession: SessionSearchParam, chain: Chain ): Promise<BatchSessionParamsPayload> => { - if (correspondingIndexes.length !== transactions.length) { + if ( + correspondingIndexes && + correspondingIndexes.length !== transactions.length + ) { throw new Error(ERROR_MESSAGES.INVALID_SESSION_INDEXES) } - const { sessionStorageClient, sessionIDInfo } = - await resumeSession(conditionalSession) + const { sessionStorageClient } = await resumeSession(conditionalSession) + let sessionIDInfo: string[] = [] + + const allSessions = await sessionStorageClient.getAllSessionData() + if (didProvideFullSession(conditionalSession)) { + sessionIDInfo = (conditionalSession as Session).sessionIDInfo + } else if (isNullOrUndefined(correspondingIndexes)) { + sessionIDInfo = allSessions + .slice(-transactions.length) + .map(({ sessionID }) => sessionID as string) + } else { + sessionIDInfo = (correspondingIndexes ?? []).map( + (index) => allSessions[index].sessionID as string + ) + } const sessionSigner = await sessionStorageClient.getSignerBySession( { @@ -220,10 +239,10 @@ export const getBatchSessionTxParams = async ( return { params: { - batchSessionParams: correspondingIndexes.map( - (i): SessionParams => ({ + batchSessionParams: sessionIDInfo.map( + (sessionID): SessionParams => ({ sessionSigner, - sessionID: sessionIDInfo[i] + sessionID }) ) } diff --git a/src/modules/sessions/sessionSmartAccountClient.ts b/src/modules/sessions/sessionSmartAccountClient.ts index bbff46db4..0dd54595d 100644 --- a/src/modules/sessions/sessionSmartAccountClient.ts +++ b/src/modules/sessions/sessionSmartAccountClient.ts @@ -1,8 +1,10 @@ -import { http, type Hex, createWalletClient } from "viem" +import { http, type Chain, type Hex, createWalletClient } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { type BiconomySmartAccountV2, type BiconomySmartAccountV2Config, + type BuildUserOpOptions, + type SupportedSigner, createSmartAccountClient, getChain } from "../../account" @@ -13,7 +15,7 @@ import { resumeSession } from "../index.js" import type { ISessionStorage } from "../interfaces/ISessionStorage" -import type { ModuleInfo } from "../utils/Types" +import type { ModuleInfo, StrictSessionParams } from "../utils/Types" export type ImpersonatedSmartAccountConfig = Omit< BiconomySmartAccountV2Config, @@ -124,3 +126,41 @@ export const createSessionSmartAccountClient = async ( sessionData // contains the sessionSigner that will be used for txs }) } + +/** + * + * @param privateKey - The private key of the user's account + * @param chain - The chain object + * @returns {@link SupportedSigner} - A signer object that can be used to sign transactions + */ +export const toSupportedSigner = ( + privateKey: string, + chain: Chain +): SupportedSigner => { + const parsedPrivateKey: Hex = privateKey.startsWith("0x") + ? (privateKey as Hex) + : `0x${privateKey}` + const account = privateKeyToAccount(parsedPrivateKey) + return createWalletClient({ + account, + chain, + transport: http() + }) +} + +/** + * + * @param privateKey The private key of the user's account + * @param sessionIDs An array of sessionIDs + * @param chain The chain object + * @returns {@link StrictSessionParams[]} - An array of session parameters {@link StrictSessionParams} that can be used to sign transactions here {@link BuildUserOpOptions} + */ +export const toSessionParams = ( + privateKey: Hex, + sessionIDs: string[], + chain: Chain +): StrictSessionParams[] => + sessionIDs.map((sessionID) => ({ + sessionID, + sessionSigner: toSupportedSigner(privateKey, chain) + })) diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index 6d61b52e0..ba884e9e4 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -22,11 +22,35 @@ import type { } from "../../index.js" import type { ISessionStorage } from "../interfaces/ISessionStorage" import { getDefaultStorageClient } from "../session-storage/utils" + +/** + * Rule + * + * https://docs.biconomy.io/Modules/abiSessionValidationModule#rules + * + * Rules define permissions for the args of an allowed method. With rules, you can precisely define what should be the args of the transaction that is allowed for a given Session. Every Rule works with a single static arg or a 32-byte chunk of the dynamic arg. + * Since the ABI Encoding translates every static param into a 32-bytes word, even the shorter ones (like address or uint8), every Rule defines a desired relation (Condition) between n-th 32bytes word of the calldata and a reference Value (that is obviously a 32-bytes word as well). + * So, when dApp is creating a _sessionKeyData to enable a session, it should convert every shorter static arg to a 32bytes word to match how it will be actually ABI encoded in the userOp.callData. + * For the dynamic args, like bytes, every 32-bytes word of the calldata such as offset of the bytes arg, length of the bytes arg, and n-th 32-bytes word of the bytes arg can be controlled by a dedicated Rule. + */ export interface Rule { - /** The index of the param from the selected contract function upon which the condition will be applied */ + /** + * + * offset + * + * https://docs.biconomy.io/Modules/abiSessionValidationModule#rules + * + * The offset in the ABI SVM contract helps locate the relevant data within the function call data, it serves as a reference point from which to start reading or extracting specific information required for validation. When processing function call data, particularly in low-level languages like Solidity assembly, it's necessary to locate where specific parameters or arguments are stored. The offset is used to calculate the starting position within the calldata where the desired data resides. Suppose we have a function call with multiple arguments passed as calldata. Each argument occupies a certain number of bytes, and the offset helps determine where each argument begins within the calldata. + * Using the offset to Extract Data: In the contract, the offset is used to calculate the position within the calldata where specific parameters or arguments are located. Since every arg is a 32-bytes word, offsets are always multiplier of 32 (or of 0x20 in hex). + * Let's see how the offset is applied to extract the to and value arguments of a transfer(address to, uint256 value) method: + * - Extracting to Argument: The to argument is the first parameter of the transfer function, representing the recipient address. Every calldata starts with the 4-bytes method selector. However, the ABI SVM is adding the selector length itself, so for the first argument the offset will always be 0 (0x00); + * - Extracting value Argument: The value argument is the second parameter of the transfer function, representing the amount of tokens to be transferred. To extract this argument, the offset for the value parameter would be calculated based on its position in the function calldata. Despite to is a 20-bytes address, in the solidity abi encoding it is always appended with zeroes to a 32-bytes word. So the offset for the second 32-bytes argument (which isthe value in our case) will be 32 (or 0x20 in hex). + * + * If you need to deal with dynamic-length arguments, such as bytes, please refer to this document https://docs.soliditylang.org/en/v0.8.24/abi-spec.html#function-selector-and-argument-encoding to learn more about how dynamic arguments are represented in the calldata and which offsets should be used to access them. + */ offset: number /** - * Conditions: + * condition * * 0 - Equal * 1 - Less than or equal @@ -162,6 +186,9 @@ export const parseChain = (chainInfo: ChainInfo): Chain => { * */ export type SessionSearchParam = Session | ISessionStorage | Address +export const didProvideFullSession = ( + searchParam: SessionSearchParam +): boolean => !!(searchParam as Session)?.sessionIDInfo?.length /** * * reconstructSession - Reconstructs a session object from the provided arguments @@ -177,7 +204,7 @@ export type SessionSearchParam = Session | ISessionStorage | Address export const resumeSession = async ( searchParam: SessionSearchParam ): Promise<Session> => { - const providedFullSession = !!(searchParam as Session)?.sessionIDInfo?.length + const providedFullSession = didProvideFullSession(searchParam) const providedStorageClient = !!(searchParam as ISessionStorage) .smartAccountAddress?.length const providedSmartAccountAddress = isAddress(searchParam as Address) diff --git a/src/modules/utils/Types.ts b/src/modules/utils/Types.ts index 57879056e..40032c753 100644 --- a/src/modules/utils/Types.ts +++ b/src/modules/utils/Types.ts @@ -78,7 +78,7 @@ export type SessionDataTuple = [ ] export type SessionParams = { - /** Redundant now as we've favoured uuid() */ + /** ID of the session */ sessionID?: string /** Session Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ sessionSigner: SupportedSigner @@ -88,6 +88,11 @@ export type SessionParams = { additionalSessionData?: string } +export type StrictSessionParams = { + sessionID: string + sessionSigner: SupportedSigner +} + export type ModuleInfo = { // Could be a full object of below params and that way it can be an array too! // sessionParams?: SessionParams[] // where SessionParams is below four diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts index 2daad3f4f..80cdbf2b1 100644 --- a/tests/modules/write.test.ts +++ b/tests/modules/write.test.ts @@ -53,12 +53,20 @@ import { import { createERC20SessionDatum } from "../../src/modules/sessions/erc20" import { createSessionSmartAccountClient } from "../../src/modules/sessions/sessionSmartAccountClient" import { PaymasterMode } from "../../src/paymaster" -import { checkBalance, getBundlerUrl, getConfig, topUp } from "../utils" +import { + checkBalance, + getBundlerUrl, + getConfig, + nonZeroBalance, + topUp +} from "../utils" describe("Modules:Write", () => { const nonceOptions = { nonceKey: Date.now() + 30 } const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + const preferredToken = token + const BICONOMY_TOKEN_PAYMASTER = "0x00000f7365cA6C59A2C93719ad53d567ed49c14C" const amount = parseUnits(".0001", 6) const withSponsorship = { @@ -987,7 +995,7 @@ describe("Modules:Write", () => { } ] - const { wait, session } = await createSession( + const { wait } = await createSession( smartAccount, policy, sessionStorageClient, @@ -1009,7 +1017,7 @@ describe("Modules:Write", () => { paymasterUrl, chainId: chain.id }, - smartAccountAddress + sessionStorageClient ) const submitCancelTx: Transaction = { @@ -1030,14 +1038,18 @@ describe("Modules:Write", () => { }) } + const allSessionIds = (await sessionStorageClient.getAllSessionData()).map( + ({ sessionID }) => sessionID + ) + const singleSessionParamsForCancel = await getSingleSessionTxParams( - session, + sessionStorageClient, chain, 0 ) const singleSessionParamsForOrder = await getSingleSessionTxParams( - session, + sessionStorageClient, chain, 1 ) @@ -1048,6 +1060,10 @@ describe("Modules:Write", () => { ...singleSessionParamsForCancel, ...withSponsorship }) + + const { success: txCancelSuccess } = await waitForCancelTx() + expect(txCancelSuccess).toBe("true") + const { wait: waitForOrderTx } = await smartAccountWithSession.sendTransaction(submitOrderTx, { nonceOptions, @@ -1055,9 +1071,301 @@ describe("Modules:Write", () => { ...withSponsorship }) - const { success: txCancelSuccess } = await waitForCancelTx() const { success: txOrderSuccess } = await waitForOrderTx() - expect(txCancelSuccess).toBe("true") expect(txOrderSuccess).toBe("true") }, 60000) + + test("should combine erc20 token gas payments with a batch session", async () => { + await nonZeroBalance(smartAccountAddress, preferredToken) + + const balanceOfPreferredTokenBefore = await checkBalance( + smartAccountAddress, + preferredToken + ) + + const { sessionKeyAddress, sessionStorageClient } = + await createSessionKeyEOA(smartAccount, chain) + + const maxUnit256Value = + 115792089237316195423570985008687907853269984665640564039457584007913129639935n + const approval = parseAbi([ + "function approve(address spender, uint256 value) external returns (bool)" + ]) + const safeMint = parseAbi([ + "function safeMint(address owner) view returns (uint balance)" + ]) + + const leaves: CreateSessionDataParams[] = [ + createABISessionDatum({ + interval: { + validUntil: 0, + validAfter: 0 + }, + sessionKeyAddress, + contractAddress: preferredToken, + functionSelector: approval[0], + rules: [ + { + offset: 0, + condition: 0, // equal + referenceValue: BICONOMY_TOKEN_PAYMASTER + }, + { + offset: 32, + condition: 1, // less than or equal + referenceValue: maxUnit256Value // max amount + } + ], + valueLimit: 0n + }), + createABISessionDatum({ + interval: { + validUntil: 0, + validAfter: 0 + }, + sessionKeyAddress, + contractAddress: nftAddress, + functionSelector: safeMint[0], + rules: [ + { + offset: 0, + condition: 0, + referenceValue: smartAccountAddress + } + ], + valueLimit: 0n + }) + ] + + const { wait, session } = await createBatchSession( + smartAccount, + sessionStorageClient, + leaves, + withSponsorship + ) + + const { + receipt: { transactionHash }, + success + } = await wait() + + expect(success).toBe("true") + expect(transactionHash).toBeTruthy() + + const smartAccountWithSession = await createSessionSmartAccountClient( + { + accountAddress: smartAccountAddress, // Set the account address on behalf of the user + bundlerUrl, + paymasterUrl, + chainId: chain.id + }, + session, + true // for batching + ) + + const approvalTx = { + to: preferredToken, + data: encodeFunctionData({ + abi: approval, + functionName: "approve", + args: [BICONOMY_TOKEN_PAYMASTER, 1000000n] // Must be more than the expected value, could be retrieved from the getTokenFees() method + }) + } + + const nftMintTx = { + to: nftAddress, + data: encodeFunctionData({ + abi: safeMint, + functionName: "safeMint", + args: [smartAccountAddress] + }) + } + + const txs = [approvalTx, nftMintTx] + + const batchSessionParams = await getBatchSessionTxParams( + txs, + [0, 1], + session, + chain + ) + + const { wait: waitForMint } = await smartAccountWithSession.sendTransaction( + txs, + { + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken, + skipPatchCallData: true // This omits the automatic patching of the call data with approvals + }, + ...batchSessionParams + } + ) + const { + receipt: { transactionHash: mintTxHash }, + userOpHash, + success: mintSuccess + } = await waitForMint() + + const balanceOfPreferredTokenAfter = await checkBalance( + smartAccountAddress, + preferredToken + ) + + expect(mintSuccess).toBe("true") + expect( + balanceOfPreferredTokenBefore - balanceOfPreferredTokenAfter + ).toBeGreaterThan(0) + }, 60000) + + test("should use different policy leaves from a single session for a) approving token gas payment approvals and b) the main tx", async () => { + await nonZeroBalance(smartAccountAddress, preferredToken) + + const balanceOfPreferredTokenBefore = await checkBalance( + smartAccountAddress, + preferredToken + ) + + const { sessionKeyAddress, sessionStorageClient } = + await createSessionKeyEOA(smartAccount, chain) + + const maxUnit256Value = + 115792089237316195423570985008687907853269984665640564039457584007913129639935n + const approval = parseAbi([ + "function approve(address spender, uint256 value) external returns (bool)" + ]) + const safeMint = parseAbi([ + "function safeMint(address owner) view returns (uint balance)" + ]) + const policy: Policy[] = [ + { + interval: { + validUntil: 0, + validAfter: 0 + }, + sessionKeyAddress, + contractAddress: preferredToken, + functionSelector: approval[0], + rules: [ + { + offset: 0, + condition: 0, // equal + referenceValue: BICONOMY_TOKEN_PAYMASTER + }, + { + offset: 32, + condition: 1, // less than or equal + referenceValue: maxUnit256Value // max amount + } + ], + valueLimit: 0n + }, + { + interval: { + validUntil: 0, + validAfter: 0 + }, + sessionKeyAddress, + contractAddress: nftAddress, + functionSelector: safeMint[0], + rules: [ + { + offset: 0, + condition: 0, + referenceValue: smartAccountAddress + } + ], + valueLimit: 0n + } + ] + + const { wait, session } = await createSession( + smartAccount, + policy, + sessionStorageClient, + withSponsorship + ) + + const { + receipt: { transactionHash }, + success + } = await wait() + + expect(success).toBe("true") + expect(transactionHash).toBeTruthy() + + const smartAccountWithSession = await createSessionSmartAccountClient( + { + accountAddress: smartAccountAddress, // Set the account address on behalf of the user + bundlerUrl, + paymasterUrl, + chainId: chain.id + }, + smartAccountAddress + ) + + const approvalTx = { + to: preferredToken, + data: encodeFunctionData({ + abi: approval, + functionName: "approve", + args: [BICONOMY_TOKEN_PAYMASTER, 1000000n] // Must be more than the expected value, could be retrieved from the getTokenFees() method + }) + } + + const nftMintTx = { + to: nftAddress, + data: encodeFunctionData({ + abi: safeMint, + functionName: "safeMint", + args: [smartAccountAddress] + }) + } + + const singleSessionParamsForApproval = await getSingleSessionTxParams( + session, + chain, + 0 + ) + + const singleSessionParamsForMint = await getSingleSessionTxParams( + session, + chain, + 1 + ) + + const { wait: waitForApprovalTx } = + await smartAccountWithSession.sendTransaction(approvalTx, { + ...singleSessionParamsForApproval, + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken, + skipPatchCallData: true // This omits the automatic patching of the call data with approvals + } + }) + const { success: txApprovalSuccess } = await waitForApprovalTx() + expect(txApprovalSuccess).toBe("true") + + const { wait: waitForMintTx } = + await smartAccountWithSession.sendTransaction(nftMintTx, { + ...singleSessionParamsForMint, + paymasterServiceData: { + mode: PaymasterMode.ERC20, + preferredToken, + skipPatchCallData: true // This omits the automatic patching of the call data with approvals + } + }) + + const { success: txMintSuccess } = await waitForMintTx() + expect(txMintSuccess).toBe("true") + + const balanceOfPreferredTokenAfter = await checkBalance( + smartAccountAddress, + preferredToken + ) + + expect( + balanceOfPreferredTokenBefore - balanceOfPreferredTokenAfter + ).toBeGreaterThan(0) + }, 60000) }) diff --git a/tests/paymaster/read.test.ts b/tests/paymaster/read.ts similarity index 100% rename from tests/paymaster/read.test.ts rename to tests/paymaster/read.ts diff --git a/tests/paymaster/write.test.ts b/tests/paymaster/write.ts similarity index 100% rename from tests/paymaster/write.test.ts rename to tests/paymaster/write.ts diff --git a/tests/playground/read.test.ts b/tests/playground/read.test.ts new file mode 100644 index 000000000..c754b00f5 --- /dev/null +++ b/tests/playground/read.test.ts @@ -0,0 +1,75 @@ +import { http, type Hex, createPublicClient, createWalletClient } from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { beforeAll, describe, expect, test } from "vitest" +import { + type BiconomySmartAccountV2, + createSmartAccountClient +} from "../../src/account" +import { getConfig } from "../utils" + +describe("Playground:Read", () => { + const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const { + chain, + chainId, + privateKey, + privateKeyTwo, + bundlerUrl, + paymasterUrl + } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + const sender = account.address + const recipient = accountTwo.address + const publicClient = createPublicClient({ + chain, + transport: http() + }) + let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] + let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] + + const [walletClient, walletClientTwo] = [ + createWalletClient({ + account, + chain, + transport: http() + }), + createWalletClient({ + account: accountTwo, + chain, + transport: http() + }) + ] + + beforeAll(async () => { + ;[smartAccount, smartAccountTwo] = await Promise.all( + [walletClient, walletClientTwo].map((client) => + createSmartAccountClient({ + chainId, + signer: client, + bundlerUrl, + paymasterUrl + }) + ) + ) + ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( + [smartAccount, smartAccountTwo].map((account) => + account.getAccountAddress() + ) + ) + }) + + test.concurrent( + "should quickly run a read test in the playground ", + async () => { + const addresses = await Promise.all([ + walletClient.account.address, + smartAccountAddress, + walletClientTwo.account.address, + smartAccountAddressTwo + ]) + expect(addresses.every(Boolean)).toBe(true) + }, + 30000 + ) +}) diff --git a/tests/playground/write.test.ts b/tests/playground/write.test.ts new file mode 100644 index 000000000..963eaa6d7 --- /dev/null +++ b/tests/playground/write.test.ts @@ -0,0 +1,75 @@ +import { http, type Hex, createPublicClient, createWalletClient } from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { beforeAll, describe, expect, test } from "vitest" +import { + type BiconomySmartAccountV2, + createSmartAccountClient +} from "../../src/account" +import { getConfig } from "../utils" + +describe("Playground:Write", () => { + const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const { + chain, + chainId, + privateKey, + privateKeyTwo, + bundlerUrl, + paymasterUrl + } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + const sender = account.address + const recipient = accountTwo.address + const publicClient = createPublicClient({ + chain, + transport: http() + }) + let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] + let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] + + const [walletClient, walletClientTwo] = [ + createWalletClient({ + account, + chain, + transport: http() + }), + createWalletClient({ + account: accountTwo, + chain, + transport: http() + }) + ] + + beforeAll(async () => { + ;[smartAccount, smartAccountTwo] = await Promise.all( + [walletClient, walletClientTwo].map((client) => + createSmartAccountClient({ + chainId, + signer: client, + bundlerUrl, + paymasterUrl + }) + ) + ) + ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( + [smartAccount, smartAccountTwo].map((account) => + account.getAccountAddress() + ) + ) + }) + + test.concurrent( + "should quickly run a write test in the playground ", + async () => { + const addresses = await Promise.all([ + walletClient.account.address, + smartAccountAddress, + walletClientTwo.account.address, + smartAccountAddressTwo + ]) + expect(addresses.every(Boolean)).toBe(true) + }, + 30000 + ) +}) diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index b764a359f..000000000 --- a/yarn.lock +++ /dev/null @@ -1,4949 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@adraffy/ens-normalize@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" - integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== - -"@ampproject/remapping@^2.2.1": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.0.0": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" - integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== - dependencies: - "@babel/highlight" "^7.24.2" - picocolors "^1.0.0" - -"@babel/helper-string-parser@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" - integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== - -"@babel/helper-validator-identifier@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz#918b1a7fa23056603506370089bd990d8720db62" - integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA== - -"@babel/highlight@^7.24.2": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.5.tgz#bc0613f98e1dd0720e99b2a9ee3760194a704b6e" - integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.5" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/parser@^7.24.4": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.5.tgz#4a4d5ab4315579e5398a82dcf636ca80c3392790" - integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg== - -"@babel/runtime@^7.20.1", "@babel/runtime@^7.21.0", "@babel/runtime@^7.5.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c" - integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/types@^7.24.0": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7" - integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ== - dependencies: - "@babel/helper-string-parser" "^7.24.1" - "@babel/helper-validator-identifier" "^7.24.5" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@biomejs/biome@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-1.6.0.tgz#b0f3bcc93451a7de74288af30f62f80aa74b1283" - integrity sha512-hvP8K1+CV8qc9eNdXtPwzScVxFSHB448CPKSqX6+8IW8G7bbhBVKGC80BowExJN5+vu+kzsj4xkWa780MAOlJw== - optionalDependencies: - "@biomejs/cli-darwin-arm64" "1.6.0" - "@biomejs/cli-darwin-x64" "1.6.0" - "@biomejs/cli-linux-arm64" "1.6.0" - "@biomejs/cli-linux-arm64-musl" "1.6.0" - "@biomejs/cli-linux-x64" "1.6.0" - "@biomejs/cli-linux-x64-musl" "1.6.0" - "@biomejs/cli-win32-arm64" "1.6.0" - "@biomejs/cli-win32-x64" "1.6.0" - -"@biomejs/cli-darwin-arm64@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.6.0.tgz#60f3620ccb2aac618afd9cd119291afa69d4aabf" - integrity sha512-K1Fjqye5pt+Ua+seC7V/2bFjfnqOaEOcQbBQSiiefB/VPNOb6lA5NFIfJ1PskTA3JrMXE1k7iqKQn56qrKFS6A== - -"@biomejs/cli-darwin-x64@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.6.0.tgz#dd3a0d66ff22f800bb13df33cb4dacf191eefe78" - integrity sha512-CjEALu6vN9RbcfhaBDoj481mesUIsUjxgQn+/kiMCea+Paypqslhez1I7OwRBJnkzz+Pa+PXdABd7S30eyy6+Q== - -"@biomejs/cli-linux-arm64-musl@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.6.0.tgz#cf2b171757f4f2062076ca323f2f23c1753208e9" - integrity sha512-prww6AUuJ+IO/GziN3WjtGM/DNOVuPFxqWrK97wKTZygEDdA+o1qHUN2HeCkSyk084xnzbMSbls5xscAKAn43A== - -"@biomejs/cli-linux-arm64@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.6.0.tgz#a7f2761d8566b2fdc78e09fc0d85cf1fccce602e" - integrity sha512-32LVrC7dAgQT39YZ0ieO/VzzpAflozs9mW5K0oKNef7S4ocCdk89E98eXApxOdei0JTf3vfseDCl1AUIp6MwJw== - -"@biomejs/cli-linux-x64-musl@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.6.0.tgz#95e17927d498af868cca32e3be79132ddeb3036f" - integrity sha512-NwitWeUKCy8G/rr+rgHPYirnrsOjJEJBWODdaRzweeFNcJjvO6de6AmNdSJzsewzLEaxjOWyoXU03MdzbGz/6Q== - -"@biomejs/cli-linux-x64@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-1.6.0.tgz#bcab0e71981a5601d85ea3ef09454b262764b776" - integrity sha512-b6mWu9Cu4w5B3K46wq9SlxKEZEEL6II/6HFNAuZ4YL8mOeQ0FTMU+wNMJFKkmkSE2zvim3xwW3PknmbLKbe3Mg== - -"@biomejs/cli-win32-arm64@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.6.0.tgz#af94814be3c15ae4d201c01708a4ef79378cad36" - integrity sha512-DlNOL6mG+76iZS1gL/UiuMme7jnt+auzo2+u0aUq6UXYsb75juchwlnVLy2UV5CQjVBRB8+RM+KVoXRZ8NlBjQ== - -"@biomejs/cli-win32-x64@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-1.6.0.tgz#a90b549170864eff030a6b7e395f48ead5193170" - integrity sha512-sXBcXIOGuG8/XcHqmnkhLIs0oy6Dp+TkH4Alr4WH/P8mNsp5GcStI/ZwbEiEoxA0P3Fi+oUppQ6srxaY2rSCHg== - -"@changesets/apply-release-plan@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-7.0.1.tgz#a6dd7cc538ca6c0f142b33462252f2c2f34ae5ac" - integrity sha512-aPdSq/R++HOyfEeBGjEe6LNG8gs0KMSyRETD/J2092OkNq8mOioAxyKjMbvVUdzgr/HTawzMOz7lfw339KnsCA== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/config" "^3.0.0" - "@changesets/get-version-range-type" "^0.4.0" - "@changesets/git" "^3.0.0" - "@changesets/types" "^6.0.0" - "@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@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.0.tgz#c69969b4bef7c32a8544b6941d1053260ca47e05" - integrity sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/errors" "^0.2.0" - "@changesets/get-dependents-graph" "^2.0.0" - "@changesets/types" "^6.0.0" - "@manypkg/get-packages" "^1.1.3" - semver "^7.5.3" - -"@changesets/changelog-git@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@changesets/changelog-git/-/changelog-git-0.2.0.tgz#1f3de11becafff5a38ebe295038a602403c93a86" - integrity sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ== - dependencies: - "@changesets/types" "^6.0.0" - -"@changesets/cli@^2.27.1": - version "2.27.3" - resolved "https://registry.yarnpkg.com/@changesets/cli/-/cli-2.27.3.tgz#2c9c88a514b024967d9c1b9b71e4efbacca2e2ad" - integrity sha512-ve/VpWApILlSs8cr0okNx5C2LKRawI9XZgvfmf58S8sar2nhx5DPJREFXYZBahs0FeTfvH0rdVl+nGe8QF45Ig== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/apply-release-plan" "^7.0.1" - "@changesets/assemble-release-plan" "^6.0.0" - "@changesets/changelog-git" "^0.2.0" - "@changesets/config" "^3.0.0" - "@changesets/errors" "^0.2.0" - "@changesets/get-dependents-graph" "^2.0.0" - "@changesets/get-release-plan" "^4.0.0" - "@changesets/git" "^3.0.0" - "@changesets/logger" "^0.1.0" - "@changesets/pre" "^2.0.0" - "@changesets/read" "^0.6.0" - "@changesets/types" "^6.0.0" - "@changesets/write" "^0.3.1" - "@manypkg/get-packages" "^1.1.3" - "@types/semver" "^7.5.0" - ansi-colors "^4.1.3" - chalk "^2.1.0" - ci-info "^3.7.0" - enquirer "^2.3.0" - external-editor "^3.1.0" - fs-extra "^7.0.1" - human-id "^1.0.2" - 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@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@changesets/config/-/config-3.0.0.tgz#a1a1cafc77134b117b4a9266459c84fdd360a6be" - integrity sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA== - dependencies: - "@changesets/errors" "^0.2.0" - "@changesets/get-dependents-graph" "^2.0.0" - "@changesets/logger" "^0.1.0" - "@changesets/types" "^6.0.0" - "@manypkg/get-packages" "^1.1.3" - fs-extra "^7.0.1" - micromatch "^4.0.2" - -"@changesets/errors@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@changesets/errors/-/errors-0.2.0.tgz#3c545e802b0f053389cadcf0ed54e5636ff9026a" - integrity sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow== - dependencies: - extendable-error "^0.1.5" - -"@changesets/get-dependents-graph@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-2.0.0.tgz#97f0cc9fbec436e0d6ab95a6a59c08acf21ac714" - integrity sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA== - dependencies: - "@changesets/types" "^6.0.0" - "@manypkg/get-packages" "^1.1.3" - chalk "^2.1.0" - fs-extra "^7.0.1" - semver "^7.5.3" - -"@changesets/get-release-plan@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-4.0.0.tgz#8cb057da90a08796a335dfd18073234d33902069" - integrity sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/assemble-release-plan" "^6.0.0" - "@changesets/config" "^3.0.0" - "@changesets/pre" "^2.0.0" - "@changesets/read" "^0.6.0" - "@changesets/types" "^6.0.0" - "@manypkg/get-packages" "^1.1.3" - -"@changesets/get-version-range-type@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz#429a90410eefef4368502c41c63413e291740bf5" - integrity sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ== - -"@changesets/git@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@changesets/git/-/git-3.0.0.tgz#e71d003752a97bc27988db6d410e0038a4a88055" - integrity sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/errors" "^0.2.0" - "@changesets/types" "^6.0.0" - "@manypkg/get-packages" "^1.1.3" - is-subdir "^1.1.1" - micromatch "^4.0.2" - spawndamnit "^2.0.0" - -"@changesets/logger@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@changesets/logger/-/logger-0.1.0.tgz#2d2a58536c5beeeaef52ab464931d99fcf24f17b" - integrity sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g== - dependencies: - chalk "^2.1.0" - -"@changesets/parse@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@changesets/parse/-/parse-0.4.0.tgz#5cabbd9844b3b213cb83f5edb5768454c70dd2b4" - integrity sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw== - dependencies: - "@changesets/types" "^6.0.0" - js-yaml "^3.13.1" - -"@changesets/pre@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@changesets/pre/-/pre-2.0.0.tgz#ad3edf3d6ac287991d7ef5e26cf280d03c9e3764" - integrity sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/errors" "^0.2.0" - "@changesets/types" "^6.0.0" - "@manypkg/get-packages" "^1.1.3" - fs-extra "^7.0.1" - -"@changesets/read@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@changesets/read/-/read-0.6.0.tgz#27e13b58d0b0eb3b0a5cba48a3f4f71f05ef4610" - integrity sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/git" "^3.0.0" - "@changesets/logger" "^0.1.0" - "@changesets/parse" "^0.4.0" - "@changesets/types" "^6.0.0" - 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@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@changesets/types/-/types-6.0.0.tgz#e46abda9890610dd1fbe1617730173d2267544bd" - integrity sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ== - -"@changesets/write@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@changesets/write/-/write-0.3.1.tgz#438ef1dabc790cca35ce9fd36d26643b0f1786c9" - integrity sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/types" "^6.0.0" - fs-extra "^7.0.1" - human-id "^1.0.2" - prettier "^2.7.1" - -"@commitlint/cli@^19.0.3": - version "19.3.0" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.3.0.tgz#44e6da9823a01f0cdcc43054bbefdd2c6c5ddf39" - integrity sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g== - dependencies: - "@commitlint/format" "^19.3.0" - "@commitlint/lint" "^19.2.2" - "@commitlint/load" "^19.2.0" - "@commitlint/read" "^19.2.1" - "@commitlint/types" "^19.0.3" - execa "^8.0.1" - yargs "^17.0.0" - -"@commitlint/config-conventional@^19.0.3": - version "19.2.2" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-19.2.2.tgz#1f4e6975d428985deacf2b3ff6547e02c9302054" - integrity sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw== - dependencies: - "@commitlint/types" "^19.0.3" - conventional-changelog-conventionalcommits "^7.0.2" - -"@commitlint/config-validator@^19.0.3": - version "19.0.3" - resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-19.0.3.tgz#052b181a30da6b4fc16dc5230f4589ac95e0bc81" - integrity sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q== - dependencies: - "@commitlint/types" "^19.0.3" - ajv "^8.11.0" - -"@commitlint/ensure@^19.0.3": - version "19.0.3" - resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-19.0.3.tgz#d172b1b72ca88cbd317ea1ee79f3a03dbaccc76e" - integrity sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ== - dependencies: - "@commitlint/types" "^19.0.3" - lodash.camelcase "^4.3.0" - lodash.kebabcase "^4.1.1" - lodash.snakecase "^4.1.1" - lodash.startcase "^4.4.0" - lodash.upperfirst "^4.3.1" - -"@commitlint/execute-rule@^19.0.0": - version "19.0.0" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-19.0.0.tgz#928fb239ae8deec82a6e3b05ec9cfe20afa83856" - integrity sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw== - -"@commitlint/format@^19.3.0": - version "19.3.0" - resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-19.3.0.tgz#48dd9e6930d41eb0ca19f36159ee940c5b25d857" - integrity sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg== - dependencies: - "@commitlint/types" "^19.0.3" - chalk "^5.3.0" - -"@commitlint/is-ignored@^19.2.2": - version "19.2.2" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-19.2.2.tgz#503ddcf908ac6b2bc4586a49cb53893a1856f5b2" - integrity sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g== - dependencies: - "@commitlint/types" "^19.0.3" - semver "^7.6.0" - -"@commitlint/lint@^19.2.2": - version "19.2.2" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-19.2.2.tgz#57f69e24bd832a7dcce8ebf82d11e3bf03ccc2a9" - integrity sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA== - dependencies: - "@commitlint/is-ignored" "^19.2.2" - "@commitlint/parse" "^19.0.3" - "@commitlint/rules" "^19.0.3" - "@commitlint/types" "^19.0.3" - -"@commitlint/load@^19.2.0": - version "19.2.0" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-19.2.0.tgz#3ca51fdead4f1e1e09c9c7df343306412b1ef295" - integrity sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ== - dependencies: - "@commitlint/config-validator" "^19.0.3" - "@commitlint/execute-rule" "^19.0.0" - "@commitlint/resolve-extends" "^19.1.0" - "@commitlint/types" "^19.0.3" - chalk "^5.3.0" - cosmiconfig "^9.0.0" - cosmiconfig-typescript-loader "^5.0.0" - lodash.isplainobject "^4.0.6" - lodash.merge "^4.6.2" - lodash.uniq "^4.5.0" - -"@commitlint/message@^19.0.0": - version "19.0.0" - resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-19.0.0.tgz#f789dd1b7a1f9c784578e0111f46cc3fecf5a531" - integrity sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw== - -"@commitlint/parse@^19.0.3": - version "19.0.3" - resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-19.0.3.tgz#a2d09876d458e17ad0e1695b04f41af8b50a41c2" - integrity sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA== - dependencies: - "@commitlint/types" "^19.0.3" - conventional-changelog-angular "^7.0.0" - conventional-commits-parser "^5.0.0" - -"@commitlint/read@^19.2.1": - version "19.2.1" - resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-19.2.1.tgz#7296b99c9a989e60e5927fff8388a1dd44299c2f" - integrity sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw== - dependencies: - "@commitlint/top-level" "^19.0.0" - "@commitlint/types" "^19.0.3" - execa "^8.0.1" - git-raw-commits "^4.0.0" - minimist "^1.2.8" - -"@commitlint/resolve-extends@^19.1.0": - version "19.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-19.1.0.tgz#fa5b8f921e9c8d76f53624c35bf25b9676bd73fa" - integrity sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg== - dependencies: - "@commitlint/config-validator" "^19.0.3" - "@commitlint/types" "^19.0.3" - global-directory "^4.0.1" - import-meta-resolve "^4.0.0" - lodash.mergewith "^4.6.2" - resolve-from "^5.0.0" - -"@commitlint/rules@^19.0.3": - version "19.0.3" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-19.0.3.tgz#de647a9055847cae4f3ae32b4798096b604584f3" - integrity sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw== - dependencies: - "@commitlint/ensure" "^19.0.3" - "@commitlint/message" "^19.0.0" - "@commitlint/to-lines" "^19.0.0" - "@commitlint/types" "^19.0.3" - execa "^8.0.1" - -"@commitlint/to-lines@^19.0.0": - version "19.0.0" - resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-19.0.0.tgz#aa6618eb371bafbc0cd3b48f0db565c4a40462c6" - integrity sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw== - -"@commitlint/top-level@^19.0.0": - version "19.0.0" - resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-19.0.0.tgz#9c44d7cec533bb9598bfae9658737e2d6a903605" - integrity sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ== - dependencies: - find-up "^7.0.0" - -"@commitlint/types@^19.0.3": - version "19.0.3" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-19.0.3.tgz#feff4ecac2b5c359f2a57f9ab094b2ac80ef0266" - integrity sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA== - dependencies: - "@types/conventional-commits-parser" "^5.0.0" - chalk "^5.3.0" - -"@esbuild/aix-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" - integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== - -"@esbuild/aix-ppc64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.3.tgz#78d3e6dcd19c1cb91f3940143e86dad1094aee81" - integrity sha512-yTgnwQpFVYfvvo4SvRFB0SwrW8YjOxEoT7wfMT7Ol5v7v5LDNvSGo67aExmxOb87nQNeWPVvaGBNfQ7BXcrZ9w== - -"@esbuild/android-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" - integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== - -"@esbuild/android-arm64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.3.tgz#5eea56c21d61734942e050840d881eb7bedc3993" - integrity sha512-c+ty9necz3zB1Y+d/N+mC6KVVkGUUOcm4ZmT5i/Fk5arOaY3i6CA3P5wo/7+XzV8cb4GrI/Zjp8NuOQ9Lfsosw== - -"@esbuild/android-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" - integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== - -"@esbuild/android-arm@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.3.tgz#7fda92e3231043c071ea6aa76c92accea86439fd" - integrity sha512-bviJOLMgurLJtF1/mAoJLxDZDL6oU5/ztMHnJQRejbJrSc9FFu0QoUoFhvi6qSKJEw9y5oGyvr9fuDtzJ30rNQ== - -"@esbuild/android-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" - integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== - -"@esbuild/android-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.3.tgz#625d139bde81b81f54ff493b1381ca0f540200f3" - integrity sha512-JReHfYCRK3FVX4Ra+y5EBH1b9e16TV2OxrPAvzMsGeES0X2Ndm9ImQRI4Ket757vhc5XBOuGperw63upesclRw== - -"@esbuild/darwin-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" - integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== - -"@esbuild/darwin-arm64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.3.tgz#fa25f38a43ff4c469589d1dc93448d534d7f313b" - integrity sha512-U3fuQ0xNiAkXOmQ6w5dKpEvXQRSpHOnbw7gEfHCRXPeTKW9sBzVck6C5Yneb8LfJm0l6le4NQfkNPnWMSlTFUQ== - -"@esbuild/darwin-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" - integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== - -"@esbuild/darwin-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.3.tgz#2e450b8214f179a56b4559b2f107060e2b792c7e" - integrity sha512-3m1CEB7F07s19wmaMNI2KANLcnaqryJxO1fXHUV5j1rWn+wMxdUYoPyO2TnAbfRZdi7ADRwJClmOwgT13qlP3Q== - -"@esbuild/freebsd-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" - integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== - -"@esbuild/freebsd-arm64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.3.tgz#f6b29e07bce25c545f6f7bb031d3be6a6ea1dc50" - integrity sha512-fsNAAl5pU6wmKHq91cHWQT0Fz0vtyE1JauMzKotrwqIKAswwP5cpHUCxZNSTuA/JlqtScq20/5KZ+TxQdovU/g== - -"@esbuild/freebsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" - integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== - -"@esbuild/freebsd-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.3.tgz#1a5da2bf89f8d67102820d893d271a270ae55751" - integrity sha512-tci+UJ4zP5EGF4rp8XlZIdq1q1a/1h9XuronfxTMCNBslpCtmk97Q/5qqy1Mu4zIc0yswN/yP/BLX+NTUC1bXA== - -"@esbuild/linux-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" - integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== - -"@esbuild/linux-arm64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.3.tgz#355f6624c1ac6f5f68841a327ac90b98c679626c" - integrity sha512-vvG6R5g5ieB4eCJBQevyDMb31LMHthLpXTc2IGkFnPWS/GzIFDnaYFp558O+XybTmYrVjxnryru7QRleJvmZ6Q== - -"@esbuild/linux-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" - integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== - -"@esbuild/linux-arm@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.3.tgz#872a476ca18a962a98700024c447a79279db1d45" - integrity sha512-f6kz2QpSuyHHg01cDawj0vkyMwuIvN62UAguQfnNVzbge2uWLhA7TCXOn83DT0ZvyJmBI943MItgTovUob36SQ== - -"@esbuild/linux-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" - integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== - -"@esbuild/linux-ia32@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.3.tgz#da713eb80ff6c011ed01aa4deebb5fc758906046" - integrity sha512-HjCWhH7K96Na+66TacDLJmOI9R8iDWDDiqe17C7znGvvE4sW1ECt9ly0AJ3dJH62jHyVqW9xpxZEU1jKdt+29A== - -"@esbuild/linux-loong64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" - integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== - -"@esbuild/linux-loong64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.3.tgz#a7c5dc9e961009018d23ec53a43baa8c03c5a1d5" - integrity sha512-BGpimEccmHBZRcAhdlRIxMp7x9PyJxUtj7apL2IuoG9VxvU/l/v1z015nFs7Si7tXUwEsvjc1rOJdZCn4QTU+Q== - -"@esbuild/linux-mips64el@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" - integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== - -"@esbuild/linux-mips64el@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.3.tgz#b97543f3d8655365729f3702ed07f6e41be5e48e" - integrity sha512-5rMOWkp7FQGtAH3QJddP4w3s47iT20hwftqdm7b+loe95o8JU8ro3qZbhgMRy0VuFU0DizymF1pBKkn3YHWtsw== - -"@esbuild/linux-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" - integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== - -"@esbuild/linux-ppc64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.3.tgz#23b9064d5bc0bf28a115a2f9cf69f3b01cdfe01c" - integrity sha512-h0zj1ldel89V5sjPLo5H1SyMzp4VrgN1tPkN29TmjvO1/r0MuMRwJxL8QY05SmfsZRs6TF0c/IDH3u7XYYmbAg== - -"@esbuild/linux-riscv64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" - integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== - -"@esbuild/linux-riscv64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.3.tgz#4f2536327f6d444c0573bd35bbd3a67897dbd5da" - integrity sha512-dkAKcTsTJ+CRX6bnO17qDJbLoW37npd5gSNtSzjYQr0svghLJYGYB0NF1SNcU1vDcjXLYS5pO4qOW4YbFama4A== - -"@esbuild/linux-s390x@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" - integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== - -"@esbuild/linux-s390x@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.3.tgz#05e6f3a12a0dcd60672f25e8789a83cd3affa487" - integrity sha512-vnD1YUkovEdnZWEuMmy2X2JmzsHQqPpZElXx6dxENcIwTu+Cu5ERax6+Ke1QsE814Zf3c6rxCfwQdCTQ7tPuXA== - -"@esbuild/linux-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" - integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== - -"@esbuild/linux-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.3.tgz#994d347e7f530c33628e35e48ccde8f299adbcb6" - integrity sha512-IOXOIm9WaK7plL2gMhsWJd+l2bfrhfilv0uPTptoRoSb2p09RghhQQp9YY6ZJhk/kqmeRt6siRdMSLLwzuT0KQ== - -"@esbuild/netbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" - integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== - -"@esbuild/netbsd-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.3.tgz#309d8c323632e9c70ee92cf5414fa65b5eb7e00e" - integrity sha512-uTgCwsvQ5+vCQnqM//EfDSuomo2LhdWhFPS8VL8xKf+PKTCrcT/2kPPoWMTs22aB63MLdGMJiE3f1PHvCDmUOw== - -"@esbuild/openbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" - integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== - -"@esbuild/openbsd-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.3.tgz#28820f9431fe00f2b04aac57511754213ff060eb" - integrity sha512-vNAkR17Ub2MgEud2Wag/OE4HTSI6zlb291UYzHez/psiKarp0J8PKGDnAhMBcHFoOHMXHfExzmjMojJNbAStrQ== - -"@esbuild/sunos-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" - integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== - -"@esbuild/sunos-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.3.tgz#a1f7f98b85bd221fe0f545d01abc0e6123ae60dc" - integrity sha512-W8H9jlGiSBomkgmouaRoTXo49j4w4Kfbl6I1bIdO/vT0+0u4f20ko3ELzV3hPI6XV6JNBVX+8BC+ajHkvffIJA== - -"@esbuild/win32-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" - integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== - -"@esbuild/win32-arm64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.3.tgz#c6c3c0b1a1dfc6327ef4db6aa4fb6efd9df531f7" - integrity sha512-EjEomwyLSCg8Ag3LDILIqYCZAq/y3diJ04PnqGRgq8/4O3VNlXyMd54j/saShaN4h5o5mivOjAzmU6C3X4v0xw== - -"@esbuild/win32-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" - integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== - -"@esbuild/win32-ia32@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.3.tgz#471b8d2cad1bd6479eee5acf04bba2c0e4d37e24" - integrity sha512-WGiE/GgbsEwR33++5rzjiYsKyHywE8QSZPF7Rfx9EBfK3Qn3xyR6IjyCr5Uk38Kg8fG4/2phN7sXp4NPWd3fcw== - -"@esbuild/win32-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" - integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== - -"@esbuild/win32-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.3.tgz#899c03576c4c28c83228f0e64dfa10edae99c9a2" - integrity sha512-xRxC0jaJWDLYvcUvjQmHCJSfMrgmUuvsoXgDeU/wTorQ1ngDdUBuFtgY3W1Pc5sprGAvZBtWdJX7RPg/iZZUqA== - -"@ethereumjs/rlp@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" - integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== - -"@ethereumjs/util@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" - integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== - dependencies: - "@ethereumjs/rlp" "^4.0.1" - ethereum-cryptography "^2.0.0" - micro-ftch "^0.3.1" - -"@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@^5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/wallet@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@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" - -"@noble/curves@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/curves@1.3.0", "@noble/curves@~1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" - integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== - dependencies: - "@noble/hashes" "1.3.3" - -"@noble/hashes@1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - -"@noble/hashes@1.3.3", "@noble/hashes@~1.3.2": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" - integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== - -"@noble/hashes@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" - integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@rollup/rollup-android-arm-eabi@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27" - integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ== - -"@rollup/rollup-android-arm64@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203" - integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA== - -"@rollup/rollup-darwin-arm64@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz#b6dd74e117510dfe94541646067b0545b42ff096" - integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w== - -"@rollup/rollup-darwin-x64@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c" - integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA== - -"@rollup/rollup-linux-arm-gnueabihf@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8" - integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA== - -"@rollup/rollup-linux-arm-musleabihf@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549" - integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A== - -"@rollup/rollup-linux-arm64-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577" - integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw== - -"@rollup/rollup-linux-arm64-musl@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c" - integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ== - -"@rollup/rollup-linux-powerpc64le-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf" - integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA== - -"@rollup/rollup-linux-riscv64-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9" - integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg== - -"@rollup/rollup-linux-s390x-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec" - integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg== - -"@rollup/rollup-linux-x64-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942" - integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w== - -"@rollup/rollup-linux-x64-musl@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d" - integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg== - -"@rollup/rollup-win32-arm64-msvc@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf" - integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA== - -"@rollup/rollup-win32-ia32-msvc@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54" - integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg== - -"@rollup/rollup-win32-x64-msvc@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz#5d694d345ce36b6ecf657349e03eb87297e68da4" - integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g== - -"@scure/base@~1.1.4": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" - integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== - -"@scure/bip32@1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" - integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== - dependencies: - "@noble/curves" "~1.3.0" - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.4" - -"@scure/bip39@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" - integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== - dependencies: - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.4" - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sindresorhus/merge-streams@^2.1.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" - integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== - -"@size-limit/esbuild-why@^11": - version "11.1.4" - resolved "https://registry.yarnpkg.com/@size-limit/esbuild-why/-/esbuild-why-11.1.4.tgz#8ecb2aa3ecb8afcd510d06fa9fffaf22927995bf" - integrity sha512-bcT68pnfhqSZmNYGRMyer0c3FT33AVBsBHJhXzWGxxOzzQ6v1/Ke4bSr8iri4NZTFIZqLSV+/QB/5TKDy3v4Dg== - dependencies: - esbuild-visualizer "^0.6.0" - open "^10.1.0" - -"@size-limit/esbuild@11.1.4": - version "11.1.4" - resolved "https://registry.yarnpkg.com/@size-limit/esbuild/-/esbuild-11.1.4.tgz#b0325292c5a556f479bb88092ca1e12f1cf67f25" - integrity sha512-Nxh+Fw4Z7sFjRLeT7GDZIy297VXyJrMvG20UDSWP31QgglriEBDkW9U77T7W6js5FaEr89bYVrGzpHfmE1CLFw== - dependencies: - esbuild "^0.21.3" - nanoid "^5.0.7" - -"@size-limit/file@11.1.4": - version "11.1.4" - resolved "https://registry.yarnpkg.com/@size-limit/file/-/file-11.1.4.tgz#b5bba86918123783b730879362e78c8cb737d149" - integrity sha512-QxnGj9cxhCEuqMAV01gqonXIKcc+caZqFHZpV51oL2ZJNGSPP9Q/yyf+7HbVe00faOFd1dZZwMwzZmX7HQ9LbA== - -"@size-limit/preset-small-lib@^11": - version "11.1.4" - resolved "https://registry.yarnpkg.com/@size-limit/preset-small-lib/-/preset-small-lib-11.1.4.tgz#2629a0e689f4e2fbbf9fc4fdc61a2458caf8797f" - integrity sha512-wELW374esv+2Nlzf7g+qW4Af9L69duLoO9F52f0sGk/nzb6et7u8gLRvweWrBfm3itUrqHCpGSSVabTsIU8kNw== - dependencies: - "@size-limit/esbuild" "11.1.4" - "@size-limit/file" "11.1.4" - size-limit "11.1.4" - -"@types/bun@latest": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@types/bun/-/bun-1.1.3.tgz#729b88160a0a9b89b950c935ba454f314aeefc14" - integrity sha512-i+mVz8C/lx+RprDR6Mr402iE1kmajgJPnmSfJ/NvU85sGGXSylYZ/6yc+XhVLr2E/t8o6HmjwV0evtnUOR0CFA== - dependencies: - bun-types "1.1.9" - -"@types/conventional-commits-parser@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#8c9d23e0b415b24b91626d07017303755d542dc8" - integrity sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ== - dependencies: - "@types/node" "*" - -"@types/estree@1.0.5", "@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@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/node@*", "@types/node@~20.12.8": - version "20.12.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.12.tgz#7cbecdf902085cec634fdb362172dfe12b8f2050" - integrity sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw== - dependencies: - undici-types "~5.26.4" - -"@types/node@18.15.13": - version "18.15.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" - integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== - -"@types/node@^12.7.1": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== - -"@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/semver@^7.5.0": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@types/ws@~8.5.10": - version "8.5.10" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" - integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== - dependencies: - "@types/node" "*" - -"@vitest/coverage-v8@^1.3.1": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.6.0.tgz#2f54ccf4c2d9f23a71294aba7f95b3d2e27d14e7" - integrity sha512-KvapcbMY/8GYIG0rlwwOKCVNRc0OL20rrhFkg/CHNzncV03TE2XWvO5w9uZYoxNiMEBacAJt3unSOiZ7svePew== - dependencies: - "@ampproject/remapping" "^2.2.1" - "@bcoe/v8-coverage" "^0.2.3" - debug "^4.3.4" - istanbul-lib-coverage "^3.2.2" - istanbul-lib-report "^3.0.1" - istanbul-lib-source-maps "^5.0.4" - istanbul-reports "^3.1.6" - magic-string "^0.30.5" - magicast "^0.3.3" - picocolors "^1.0.0" - std-env "^3.5.0" - strip-literal "^2.0.0" - test-exclude "^6.0.0" - -"@vitest/expect@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.6.0.tgz#0b3ba0914f738508464983f4d811bc122b51fb30" - integrity sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ== - dependencies: - "@vitest/spy" "1.6.0" - "@vitest/utils" "1.6.0" - chai "^4.3.10" - -"@vitest/runner@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.6.0.tgz#a6de49a96cb33b0e3ba0d9064a3e8d6ce2f08825" - integrity sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg== - dependencies: - "@vitest/utils" "1.6.0" - p-limit "^5.0.0" - pathe "^1.1.1" - -"@vitest/snapshot@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.6.0.tgz#deb7e4498a5299c1198136f56e6e0f692e6af470" - integrity sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ== - dependencies: - magic-string "^0.30.5" - pathe "^1.1.1" - pretty-format "^29.7.0" - -"@vitest/spy@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.6.0.tgz#362cbd42ccdb03f1613798fde99799649516906d" - integrity sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw== - dependencies: - tinyspy "^2.2.0" - -"@vitest/utils@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.6.0.tgz#5c5675ca7d6f546a7b4337de9ae882e6c57896a1" - integrity sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw== - dependencies: - diff-sequences "^29.6.3" - estree-walker "^3.0.3" - loupe "^2.3.7" - pretty-format "^29.7.0" - -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -acorn-walk@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.11.3: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - -aes-js@4.0.0-beta.5: - version "4.0.0-beta.5" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" - integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== - -ajv@^8.11.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91" - integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA== - dependencies: - fast-deep-equal "^3.1.3" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.4.1" - -ansi-colors@^4.1.1, ansi-colors@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/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-sequence-parser@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" - integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -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== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== - dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== - -array.prototype.flat@^1.2.3: - 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" - -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" - is-array-buffer "^3.0.4" - 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== - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -async@^3.2.4: - version "3.2.5" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" - integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/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" - -bignumber.js@^9.0.1: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.3, braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.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.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -buffer-reverse@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" - integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bun-types@1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/bun-types/-/bun-types-1.1.9.tgz#5a3728c91babe7d0a64283b07f03a58e4ea3b0ba" - integrity sha512-3YuLiH4Ne/ghk7K6mHiaqCqKOMrtB0Z5p1WAskHSVgi0iMZgsARV4yGkbfi565YsStvUq6GXTWB3ga7M8cznkA== - dependencies: - "@types/node" "~20.12.8" - "@types/ws" "~8.5.10" - -bundle-name@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" - integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== - dependencies: - run-applescript "^7.0.0" - -bytes-iec@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/bytes-iec/-/bytes-iec-3.1.1.tgz#94cd36bf95c2c22a82002c247df8772d1d591083" - integrity sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA== - -cac@^6.7.14: - version "6.7.14" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.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== - -chai@^4.3.10: - version "4.4.1" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" - integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.3" - deep-eql "^4.1.3" - get-func-name "^2.0.2" - loupe "^2.3.6" - pathval "^1.1.1" - type-detect "^4.0.8" - -chalk@^2.1.0, chalk@^2.4.2: - version "2.4.2" - 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" - -chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -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== - -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== - -check-error@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" - integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== - dependencies: - get-func-name "^2.0.2" - -chokidar@^3.5.3, chokidar@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -ci-info@^3.7.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -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@^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.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -commander@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" - integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== - -commander@^9.0.0: - version "9.5.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concurrently@^8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.2.tgz#353141985c198cfa5e4a3ef90082c336b5851784" - integrity sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg== - dependencies: - chalk "^4.1.2" - date-fns "^2.30.0" - lodash "^4.17.21" - rxjs "^7.8.1" - shell-quote "^1.8.1" - spawn-command "0.0.2" - supports-color "^8.1.1" - tree-kill "^1.2.2" - yargs "^17.7.2" - -confbox@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579" - integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== - -conventional-changelog-angular@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" - integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== - dependencies: - compare-func "^2.0.0" - -conventional-changelog-conventionalcommits@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz#aa5da0f1b2543094889e8cf7616ebe1a8f5c70d5" - integrity sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w== - dependencies: - compare-func "^2.0.0" - -conventional-commits-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#57f3594b81ad54d40c1b4280f04554df28627d9a" - integrity sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== - dependencies: - JSONStream "^1.3.5" - is-text-path "^2.0.0" - meow "^12.0.1" - split2 "^4.0.0" - -cosmiconfig-typescript-loader@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz#0d3becfe022a871f7275ceb2397d692e06045dc8" - integrity sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA== - dependencies: - jiti "^1.19.1" - -cosmiconfig@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" - integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== - dependencies: - env-paths "^2.2.1" - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - -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.0, cross-spawn@^7.0.3: - version "7.0.3" - 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" - -crypto-js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" - integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== - -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" - -dargs@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-8.1.0.tgz#a34859ea509cbce45485e5aa356fef70bfcc7272" - integrity sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw== - -data-view-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" - integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" - integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" - integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -date-fns@^2.30.0: - version "2.30.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" - integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== - dependencies: - "@babel/runtime" "^7.21.0" - -debug@^4.1.1, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -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== - -deep-eql@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - dependencies: - type-detect "^4.0.0" - -default-browser-id@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" - integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== - -default-browser@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" - integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== - dependencies: - bundle-name "^4.1.0" - default-browser-id "^5.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.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -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.2.0, define-properties@^1.2.1: - 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" - -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-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -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== - -elliptic@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -email-addresses@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-5.0.0.tgz#7ae9e7f58eef7d5e3e2c2c2d3ea49b78dc854fa6" - integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/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== - -enquirer@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - -env-paths@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/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, es-abstract@^1.22.3, es-abstract@^1.23.0: - version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== - dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" - es-define-property "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - hasown "^2.0.2" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" - is-callable "^1.2.7" - is-data-view "^1.0.1" - is-negative-zero "^2.0.3" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.2" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.9" - string.prototype.trimend "^1.0.8" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.6" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.15" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.2.1, es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-object-atoms@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" - integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== - dependencies: - get-intrinsic "^1.2.4" - has-tostringtag "^1.0.2" - hasown "^2.0.1" - -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" - -esbuild-visualizer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/esbuild-visualizer/-/esbuild-visualizer-0.6.0.tgz#afe3053ce48ce20d4700fccdefea769f0f06acf0" - integrity sha512-oNK3JAhC7+re93VTtUdWJKTDVnA2qXPAjCAoaw9OxEFUXztszw3kcaK46u1U790T8FdUBAWv6F9Xt59P8nJCVA== - dependencies: - open "^8.4.0" - picomatch "^2.3.1" - yargs "^17.6.2" - -esbuild@^0.20.1: - version "0.20.2" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" - integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== - optionalDependencies: - "@esbuild/aix-ppc64" "0.20.2" - "@esbuild/android-arm" "0.20.2" - "@esbuild/android-arm64" "0.20.2" - "@esbuild/android-x64" "0.20.2" - "@esbuild/darwin-arm64" "0.20.2" - "@esbuild/darwin-x64" "0.20.2" - "@esbuild/freebsd-arm64" "0.20.2" - "@esbuild/freebsd-x64" "0.20.2" - "@esbuild/linux-arm" "0.20.2" - "@esbuild/linux-arm64" "0.20.2" - "@esbuild/linux-ia32" "0.20.2" - "@esbuild/linux-loong64" "0.20.2" - "@esbuild/linux-mips64el" "0.20.2" - "@esbuild/linux-ppc64" "0.20.2" - "@esbuild/linux-riscv64" "0.20.2" - "@esbuild/linux-s390x" "0.20.2" - "@esbuild/linux-x64" "0.20.2" - "@esbuild/netbsd-x64" "0.20.2" - "@esbuild/openbsd-x64" "0.20.2" - "@esbuild/sunos-x64" "0.20.2" - "@esbuild/win32-arm64" "0.20.2" - "@esbuild/win32-ia32" "0.20.2" - "@esbuild/win32-x64" "0.20.2" - -esbuild@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.3.tgz#cbb10b100c768b0cfb35d61d9e70324553437c38" - integrity sha512-Kgq0/ZsAPzKrbOjCQcjoSmPoWhlcVnGAUo7jvaLHoxW1Drto0KGkR1xBNg2Cp43b9ImvxmPEJZ9xkfcnqPsfBw== - optionalDependencies: - "@esbuild/aix-ppc64" "0.21.3" - "@esbuild/android-arm" "0.21.3" - "@esbuild/android-arm64" "0.21.3" - "@esbuild/android-x64" "0.21.3" - "@esbuild/darwin-arm64" "0.21.3" - "@esbuild/darwin-x64" "0.21.3" - "@esbuild/freebsd-arm64" "0.21.3" - "@esbuild/freebsd-x64" "0.21.3" - "@esbuild/linux-arm" "0.21.3" - "@esbuild/linux-arm64" "0.21.3" - "@esbuild/linux-ia32" "0.21.3" - "@esbuild/linux-loong64" "0.21.3" - "@esbuild/linux-mips64el" "0.21.3" - "@esbuild/linux-ppc64" "0.21.3" - "@esbuild/linux-riscv64" "0.21.3" - "@esbuild/linux-s390x" "0.21.3" - "@esbuild/linux-x64" "0.21.3" - "@esbuild/netbsd-x64" "0.21.3" - "@esbuild/openbsd-x64" "0.21.3" - "@esbuild/sunos-x64" "0.21.3" - "@esbuild/win32-arm64" "0.21.3" - "@esbuild/win32-ia32" "0.21.3" - "@esbuild/win32-x64" "0.21.3" - -escalade@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -estree-walker@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -ethereum-bloom-filters@^1.0.6: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz#b3fc1eb789509ee30db0bf99a2988ccacb8d0397" - integrity sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw== - dependencies: - "@noble/hashes" "^1.4.0" - -ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" - integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== - dependencies: - "@noble/curves" "1.3.0" - "@noble/hashes" "1.3.3" - "@scure/bip32" "1.3.3" - "@scure/bip39" "1.2.2" - -ethers@^6.12.0: - version "6.12.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.1.tgz#517ff6d66d4fd5433e38e903051da3e57c87ff37" - integrity sha512-j6wcVoZf06nqEcBbDWkKg8Fp895SS96dSnTCjiXT+8vt2o02raTn4Lo9ERUuIVU5bAjoPYeA+7ytQFexFmLuVw== - dependencies: - "@adraffy/ens-normalize" "1.10.1" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@types/node" "18.15.13" - aes-js "4.0.0-beta.5" - tslib "2.4.0" - ws "8.5.0" - -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - -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" - -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" - -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-glob@^3.2.9, fast-glob@^3.3.2: - 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" - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -filename-reserved-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" - integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== - -filenamify@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" - integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== - dependencies: - filename-reserved-regex "^2.0.0" - strip-outer "^1.0.1" - trim-repeated "^1.0.0" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.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-up@^5.0.0: - version "5.0.0" - 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" - path-exists "^4.0.0" - -find-up@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-7.0.0.tgz#e8dec1455f74f78d888ad65bf7ca13dd2b4e66fb" - integrity sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g== - dependencies: - locate-path "^7.2.0" - path-exists "^5.0.0" - unicorn-magic "^0.1.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" - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -fs-extra@^11.1.1: - version "11.2.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.1.0: - version "8.1.0" - 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" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/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" - -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.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.1, get-func-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" - integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -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.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== - dependencies: - call-bind "^1.0.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - -gh-pages@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-6.1.1.tgz#e80af927a081cb480657fde5a0b87ea2e77d6c74" - integrity sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw== - dependencies: - async "^3.2.4" - commander "^11.0.0" - email-addresses "^5.0.0" - filenamify "^4.3.0" - find-cache-dir "^3.3.1" - fs-extra "^11.1.1" - globby "^6.1.0" - -git-raw-commits@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-4.0.0.tgz#b212fd2bff9726d27c1283a1157e829490593285" - integrity sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ== - dependencies: - dargs "^8.0.0" - meow "^12.0.1" - split2 "^4.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^10.3.7: - version "10.4.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.1.tgz#0cfb01ab6a6b438177bfe6a58e2576f6efe909c2" - integrity sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - path-scurry "^1.11.1" - -glob@^7.0.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-directory@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/global-directory/-/global-directory-4.0.1.tgz#4d7ac7cfd2cb73f304c53b8810891748df5e361e" - integrity sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== - dependencies: - ini "4.1.1" - -globalthis@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -globby@^11.0.0, globby@^11.0.4: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^14.0.1: - version "14.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-14.0.1.tgz#a1b44841aa7f4c6d8af2bc39951109d77301959b" - integrity sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ== - dependencies: - "@sindresorhus/merge-streams" "^2.1.0" - fast-glob "^3.3.2" - ignore "^5.2.4" - path-type "^5.0.0" - slash "^5.1.0" - unicorn-magic "^0.1.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.yarnpkg.com/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== - -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== - -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.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1, has-proto@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - 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== - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -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@^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== - -iconv-lite@^0.4.24: - version "0.4.24" - 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" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0, ignore@^5.2.4: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -import-fresh@^3.3.0: - 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" - -import-meta-resolve@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706" - integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" - integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== - -internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" - -is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - -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.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - 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-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.13.0: - 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-data-view@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" - integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== - dependencies: - is-typed-array "^1.1.13" - -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, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/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.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -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.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -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-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, is-shared-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== - dependencies: - call-bind "^1.0.7" - -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-text-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" - integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== - dependencies: - text-extensions "^2.0.0" - -is-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -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.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -is-wsl@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" - integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== - dependencies: - is-inside-container "^1.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.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.4.tgz#1947003c72a91b6310efeb92d2a91be8804d92c2" - integrity sha512-wHOoEsNJTVltaJp8eVkm8w+GVkVNHT2YDYo53YdzQEL2gWm1hBX5cGFR9hQJtuGLebidVX7et3+dmDZrmclduw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.23" - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - -istanbul-reports@^3.1.6: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jackspeak@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.1.2.tgz#eada67ea949c6b71de50f1b09c92a961897b90ab" - integrity sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jiti@^1.19.1, jiti@^1.21.0: - version "1.21.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== - -js-sha3@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -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-tokens@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.0.tgz#0f893996d6f3ed46df7f0a3b12a03f5fd84223c1" - integrity sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ== - -js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.6.1: - version "3.14.1" - 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" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -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@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -jsonc-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" - integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -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== - -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== - -lilconfig@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" - integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -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" - -local-pkg@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" - integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== - dependencies: - mlly "^1.4.2" - pkg-types "^1.0.3" - -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.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -locate-path@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.kebabcase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== - -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.mergewith@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" - integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== - -lodash.snakecase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== - -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.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash.upperfirst@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" - integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loupe@^2.3.6, loupe@^2.3.7: - version "2.3.7" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" - integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== - dependencies: - get-func-name "^2.0.1" - -lru-cache@^10.2.0: - version "10.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" - integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== - -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" - -lunr@^2.3.9: - version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== - -magic-string@^0.30.5: - version "0.30.10" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" - integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - -magicast@^0.3.3: - version "0.3.4" - resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.4.tgz#bbda1791d03190a24b00ff3dd18151e7fd381d19" - integrity sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q== - dependencies: - "@babel/parser" "^7.24.4" - "@babel/types" "^7.24.0" - source-map-js "^1.2.0" - -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -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== - -marked@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== - -meow@^12.0.1: - version "12.1.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" - integrity sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== - -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.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -merkletreejs@^0.3.11: - version "0.3.11" - resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.3.11.tgz#e0de05c3ca1fd368de05a12cb8efb954ef6fc04f" - integrity sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ== - dependencies: - bignumber.js "^9.0.1" - buffer-reverse "^1.0.1" - crypto-js "^4.2.0" - treeify "^1.1.0" - web3-utils "^1.3.4" - -micro-ftch@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" - integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== - -micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" - integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -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.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^9.0.3, minimatch@^9.0.4: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - 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.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -mixme@^0.5.1: - version "0.5.10" - resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.10.tgz#d653b2984b75d9018828f1ea333e51717ead5f51" - integrity sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q== - -mlly@^1.4.2, mlly@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.0.tgz#587383ae40dda23cadb11c3c3cc972b277724271" - integrity sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ== - dependencies: - acorn "^8.11.3" - pathe "^1.1.2" - pkg-types "^1.1.0" - ufo "^1.5.3" - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mylas@^2.1.9: - version "2.1.13" - resolved "https://registry.yarnpkg.com/mylas/-/mylas-2.1.13.tgz#1e23b37d58fdcc76e15d8a5ed23f9ae9fc0cbdf4" - integrity sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg== - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -nanoid@^5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.0.7.tgz#6452e8c5a816861fd9d2b898399f7e5fd6944cc6" - integrity sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ== - -nanospinner@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/nanospinner/-/nanospinner-1.1.0.tgz#d17ff621cb1784b0a206b400da88a0ef6db39b97" - integrity sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA== - dependencies: - picocolors "^1.0.0" - -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.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" - integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== - dependencies: - path-key "^4.0.0" - -number-to-bn@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/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-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.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -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@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1" - integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== - dependencies: - default-browser "^5.2.1" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" - is-wsl "^3.1.0" - -open@^8.4.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/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@^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.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-limit@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985" - integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== - dependencies: - yocto-queue "^1.0.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.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -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-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, parse-json@^5.2.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" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -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.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -path-type@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-5.0.0.tgz#14b01ed7aea7ddf9c7c3f46181d4d04f9c785bb8" - integrity sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== - -pathe@^1.1.1, pathe@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" - integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -picocolors@^1.0.0, picocolors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -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== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== - -pkg-dir@^4.1.0, 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" - -pkg-types@^1.0.3, pkg-types@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.1.tgz#07b626880749beb607b0c817af63aac1845a73f2" - integrity sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ== - dependencies: - confbox "^0.1.7" - mlly "^1.7.0" - pathe "^1.1.2" - -plimit-lit@^1.2.6: - version "1.6.1" - resolved "https://registry.yarnpkg.com/plimit-lit/-/plimit-lit-1.6.1.tgz#a34594671b31ee8e93c72d505dfb6852eb72374a" - integrity sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA== - dependencies: - queue-lit "^1.5.1" - -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - -postcss@^8.4.38: - version "8.4.38" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.2.0" - -preferred-pm@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.1.3.tgz#4125ea5154603136c3b6444e5f5c94ecf90e4916" - integrity sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w== - dependencies: - find-up "^5.0.0" - find-yarn-workspace-root2 "1.2.16" - path-exists "^4.0.0" - which-pm "2.0.0" - -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== - -pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -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.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -queue-lit@^1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/queue-lit/-/queue-lit-1.5.2.tgz#83c24d4f4764802377b05a6e5c73017caf3f8747" - integrity sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/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== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -react-is@^18.0.0: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" - integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== - -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" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - 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" - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== - dependencies: - call-bind "^1.0.6" - define-properties "^1.2.1" - es-errors "^1.3.0" - set-function-name "^2.0.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - 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.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@^1.10.0: - 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" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^5.0.5: - version "5.0.7" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.7.tgz#27bddf202e7d89cb2e0381656380d1734a854a74" - integrity sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg== - dependencies: - glob "^10.3.7" - -rollup@^4.13.0: - version "4.18.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.0.tgz#497f60f0c5308e4602cf41136339fbf87d5f5dda" - integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg== - dependencies: - "@types/estree" "1.0.5" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.18.0" - "@rollup/rollup-android-arm64" "4.18.0" - "@rollup/rollup-darwin-arm64" "4.18.0" - "@rollup/rollup-darwin-x64" "4.18.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.18.0" - "@rollup/rollup-linux-arm-musleabihf" "4.18.0" - "@rollup/rollup-linux-arm64-gnu" "4.18.0" - "@rollup/rollup-linux-arm64-musl" "4.18.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.18.0" - "@rollup/rollup-linux-riscv64-gnu" "4.18.0" - "@rollup/rollup-linux-s390x-gnu" "4.18.0" - "@rollup/rollup-linux-x64-gnu" "4.18.0" - "@rollup/rollup-linux-x64-musl" "4.18.0" - "@rollup/rollup-win32-arm64-msvc" "4.18.0" - "@rollup/rollup-win32-ia32-msvc" "4.18.0" - "@rollup/rollup-win32-x64-msvc" "4.18.0" - fsevents "~2.3.2" - -run-applescript@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" - integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-array-concat@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" - integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-regex "^1.1.4" - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scrypt-js@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -"semver@2 || 3 || 4 || 5": - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.0.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.5.3, semver@^7.6.0: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== - -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.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-function-name@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -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.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - 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.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -shiki@^0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" - integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== - dependencies: - ansi-sequence-parser "^1.1.0" - jsonc-parser "^3.2.0" - vscode-oniguruma "^1.7.0" - vscode-textmate "^8.0.0" - -side-channel@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -siginfo@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" - integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== - -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1, 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== - -simple-git-hooks@^2.9.0: - version "2.11.1" - resolved "https://registry.yarnpkg.com/simple-git-hooks/-/simple-git-hooks-2.11.1.tgz#4102f0b49dd72f148394a4446a958ad5ed461991" - integrity sha512-tgqwPUMDcNDhuf1Xf6KTUsyeqGdgKMhzaH4PAZZuzguOgTl5uuyeYe/8mWgAr6IBxB5V06uqEf6Dy37gIWDtDg== - -size-limit@11.1.4, size-limit@^11: - version "11.1.4" - resolved "https://registry.yarnpkg.com/size-limit/-/size-limit-11.1.4.tgz#0fd9418c7cae0cc77b6cb9bbe4f08cb2b3b0e126" - integrity sha512-V2JAI/Z7h8sEuxU3V+Ig3XKA5FcYbI4CZ7sh6s7wvuy+TUwDZYqw7sAqrHhQ4cgcNfPKIAHAaH8VaqOdbcwJDA== - dependencies: - bytes-iec "^3.1.1" - chokidar "^3.6.0" - globby "^14.0.1" - jiti "^1.21.0" - lilconfig "^3.1.1" - nanospinner "^1.1.0" - picocolors "^1.0.1" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" - integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== - -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" - -source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== - -spawn-command@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" - integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== - -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.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -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.18" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" - integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stackback@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" - integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== - -std-env@^3.5.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" - integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== - -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-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - 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.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" - integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.0" - es-object-atoms "^1.0.0" - -string.prototype.trimend@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" - integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - 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@^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.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - -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-literal@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.1.0.tgz#6d82ade5e2e74f5c7e8739b6c84692bd65f0bd2a" - integrity sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw== - dependencies: - js-tokens "^9.0.0" - -strip-outer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== - dependencies: - escape-string-regexp "^1.0.2" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.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== - -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== - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-extensions@^2.0.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" - integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== - -"through@>=2.2.7 <3": - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tinybench@^2.5.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.8.0.tgz#30e19ae3a27508ee18273ffed9ac7018949acd7b" - integrity sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw== - -tinypool@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.4.tgz#e217fe1270d941b39e98c625dcecebb1408c9aa8" - integrity sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ== - -tinyspy@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1" - integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -treeify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" - integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== - -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== - -trim-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== - dependencies: - escape-string-regexp "^1.0.2" - -tsc-alias@^1.8.8: - version "1.8.10" - resolved "https://registry.yarnpkg.com/tsc-alias/-/tsc-alias-1.8.10.tgz#279f9bf0dd8bc10fb27820393d4881db5a303938" - integrity sha512-Ibv4KAWfFkFdKJxnWfVtdOmB0Zi1RJVxcbPGiCDsFpCQSsmpWyuzHG3rQyI5YkobWwxFPEyQfu1hdo4qLG2zPw== - dependencies: - chokidar "^3.5.3" - commander "^9.0.0" - globby "^11.0.4" - mylas "^2.1.9" - normalize-path "^3.0.0" - plimit-lit "^1.2.6" - -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tslib@^2.1.0, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -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" - -type-detect@^4.0.0, type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -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.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.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== - -typed-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-typed-array "^1.1.13" - -typed-array-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-byte-offset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-length@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" - integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - -typedoc@^0.25.9: - version "0.25.13" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.13.tgz#9a98819e3b2d155a6d78589b46fa4c03768f0922" - integrity sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ== - dependencies: - lunr "^2.3.9" - marked "^4.3.0" - minimatch "^9.0.3" - shiki "^0.14.7" - -ufo@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" - integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== - -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.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== - -unicorn-magic@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" - integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -uri-js@^4.4.1: - 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" - -utf8@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - -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" - -vite-node@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.6.0.tgz#2c7e61129bfecc759478fa592754fd9704aaba7f" - integrity sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw== - dependencies: - cac "^6.7.14" - debug "^4.3.4" - pathe "^1.1.1" - picocolors "^1.0.0" - vite "^5.0.0" - -vite@^5.0.0: - version "5.2.11" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.11.tgz#726ec05555431735853417c3c0bfb36003ca0cbd" - integrity sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ== - dependencies: - esbuild "^0.20.1" - postcss "^8.4.38" - rollup "^4.13.0" - optionalDependencies: - fsevents "~2.3.3" - -vitest@^1.3.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.6.0.tgz#9d5ad4752a3c451be919e412c597126cffb9892f" - integrity sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA== - dependencies: - "@vitest/expect" "1.6.0" - "@vitest/runner" "1.6.0" - "@vitest/snapshot" "1.6.0" - "@vitest/spy" "1.6.0" - "@vitest/utils" "1.6.0" - acorn-walk "^8.3.2" - chai "^4.3.10" - debug "^4.3.4" - execa "^8.0.1" - local-pkg "^0.5.0" - magic-string "^0.30.5" - pathe "^1.1.1" - picocolors "^1.0.0" - std-env "^3.5.0" - strip-literal "^2.0.0" - tinybench "^2.5.1" - tinypool "^0.8.3" - vite "^5.0.0" - vite-node "1.6.0" - why-is-node-running "^2.2.2" - -vscode-oniguruma@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" - integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== - -vscode-textmate@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" - integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== - -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-utils@^1.3.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" - integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== - dependencies: - "@ethereumjs/util" "^8.1.0" - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereum-cryptography "^2.1.2" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -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.14, which-typed-array@^1.1.15: - version "1.1.15" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.2" - -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.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -why-is-node-running@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" - integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== - dependencies: - siginfo "^2.0.0" - stackback "0.0.2" - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -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@^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.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -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.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -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== - -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@^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@^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.0.0, yargs@^17.6.2, yargs@^17.7.1, yargs@^17.7.2: - 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" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== From 56069549ef61d5f9108d61fc4bd01389efc0a446 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Thu, 30 May 2024 16:36:21 +0100 Subject: [PATCH 1191/1247] chore: release v4.4.5 (#511) * chore: release v4.4.5 --- CHANGELOG.md | 13 +++++ package.json | 4 +- src/account/BiconomySmartAccountV2.ts | 1 + tests/account/write.test.ts | 59 ++++++++++++++++++--- tests/paymaster/{read.ts => read.test.ts} | 0 tests/paymaster/{write.ts => write.test.ts} | 0 tests/utils.ts | 9 +++- 7 files changed, 76 insertions(+), 10 deletions(-) rename tests/paymaster/{read.ts => read.test.ts} (100%) rename tests/paymaster/{write.ts => write.test.ts} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03010e28d..9484ac4a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # @biconomy/account +## 4.4.5 + +### Patch Changes + +- modifications for token payment + session support + + - Added "toSupportedSigner" helper for privateKey -> supportedSigner translation + - Added "toSessionParams" helper for privateKey -> session params translation + - Tweaked getBatchSessionTxParams to return last n leaves by default, so users do not always have to find the correct session leaf + - Tweaked getSingleSessionTxParams to return last n leaves by default, so users do not always have to find the correct session leaf + - Tweaked createABISessionDatum to allow devs to manually input the functionSelector + - Exported BICONOMY_TOKEN_PAYMASTER, useful for manually building approvals + ## 4.4.4 ### Patch Changes diff --git a/package.json b/package.json index a8867b191..47debc268 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,9 @@ "typings": "./dist/_types/index.d.ts", "homepage": "https://biconomy.io", "sideEffects": false, - "name": "@biconomy-devx/account", + "name": "@biconomy/account", "author": "Biconomy", - "version": "4.4.27", + "version": "4.4.5", "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ "erc-7579", diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 5cdb43824..07a267323 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -211,6 +211,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.scanForUpgradedAccountsFromV1 = biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false this.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10 + this.getAccountAddress() } /** diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 8d18f2f35..7cecfc28a 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -8,7 +8,7 @@ import { parseAbi } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { polygonAmoy } from "viem/chains" +import { arbitrumSepolia, polygonAmoy } from "viem/chains" import { beforeAll, describe, expect, test } from "vitest" import { type BiconomySmartAccountV2, @@ -24,7 +24,13 @@ import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" import { DEFAULT_ECDSA_OWNERSHIP_MODULE } from "../../src/modules" import { PaymasterMode } from "../../src/paymaster" import { testOnlyOnOptimism } from "../setupFiles" -import { checkBalance, getConfig, nonZeroBalance, topUp } from "../utils" +import { + checkBalance, + getBundlerUrl, + getConfig, + nonZeroBalance, + topUp +} from "../utils" describe("Account:Write", async () => { const nonceOptions = { nonceKey: Date.now() + 10 } @@ -90,6 +96,47 @@ describe("Account:Write", async () => { ) }) + test("should test the nonce on arbSepolia", async () => { + const chain = arbitrumSepolia + const account = privateKeyToAccount(`0x${privateKey}`) + const signer = createWalletClient({ account, chain, transport: http() }) + const smartAccount = await createSmartAccountClient({ + signer, + bundlerUrl: getBundlerUrl(chain.id) + }) + + const address = await smartAccount.getAccountAddress() + + await nonZeroBalance(address) + + const nonceBefore = await smartAccount.getNonce() + const balanceOfRecipient = await checkBalance(recipient, undefined, chain) + + const { wait } = await smartAccount.sendTransaction( + { + to: recipient, + value: BigInt(1) + }, + { + nonceOptions + } + ) + + const result = await wait() + const newBalanceOfRecipient = await checkBalance( + recipient, + undefined, + chain + ) + const nonceAfter = await smartAccount.getNonce() + + expect(result?.receipt?.transactionHash).toBeTruthy() + expect(result.success).toBe("true") + expect(newBalanceOfRecipient).toBeGreaterThan(balanceOfRecipient) + + expect(nonceAfter - nonceBefore).toBe(1n) + }, 10000) + test("should send some native token to recipient via the entrypoint", async () => { const balanceOfRecipient = await checkBalance(recipient) @@ -287,7 +334,7 @@ describe("Account:Write", async () => { expect(tokenBalanceOfRecipientAfter - tokenBalanceOfRecipientBefore).toBe( 1n ) - }, 40000) + }, 60000) test("should mint an NFT and pay with ERC20 - with token", async () => { const encodedCall = encodeFunctionData({ @@ -546,7 +593,7 @@ describe("Account:Write", async () => { expect(success).toBe("true") }, 60000) - test.skip("should transfer ownership of smart account to accountTwo", async () => { + test("should transfer ownership of smart account to accountTwo", async () => { const signerOfAccount = walletClient.account.address const ownerOfAccount = await publicClient.readContract({ address: DEFAULT_ECDSA_OWNERSHIP_MODULE, @@ -567,7 +614,7 @@ describe("Account:Write", async () => { expect(receipt.success).toBe("true") }, 50000) - test.skip("should revert transfer ownership with signer that is not the owner", async () => { + test("should revert transfer ownership with signer that is not the owner", async () => { _smartAccount = await createSmartAccountClient({ signer: walletClient, paymasterUrl, @@ -595,7 +642,7 @@ describe("Account:Write", async () => { ).rejects.toThrowError() }, 50000) - test.skip("send an user op with the new owner", async () => { + test("send an user op with the new owner", async () => { _smartAccount = await createSmartAccountClient({ signer: walletClientTwo, paymasterUrl, diff --git a/tests/paymaster/read.ts b/tests/paymaster/read.test.ts similarity index 100% rename from tests/paymaster/read.ts rename to tests/paymaster/read.test.ts diff --git a/tests/paymaster/write.ts b/tests/paymaster/write.test.ts similarity index 100% rename from tests/paymaster/write.ts rename to tests/paymaster/write.test.ts diff --git a/tests/utils.ts b/tests/utils.ts index 11b6228dd..76d98544e 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -96,8 +96,13 @@ export const getConfig = (): TestConfig => { } } -export const checkBalance = (owner: Hex, tokenAddress?: Hex) => { - const { chain } = getConfig() +export const checkBalance = ( + owner: Hex, + tokenAddress?: Hex, + _chain?: Chain +) => { + const { chain: chainFromConfig } = getConfig() + const chain = _chain || chainFromConfig const publicClient = createPublicClient({ chain, From e74606a40c157fbf4a4fb049c7f3a0c3c7ba66bf Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Fri, 31 May 2024 15:21:46 +0100 Subject: [PATCH 1192/1247] chore: skip transfer tests (#514) chore: skip transfer tests --- src/bundler/utils/Constants.ts | 2 +- tests/account/write.test.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bundler/utils/Constants.ts b/src/bundler/utils/Constants.ts index 297fff8f7..5c530f57d 100644 --- a/src/bundler/utils/Constants.ts +++ b/src/bundler/utils/Constants.ts @@ -29,4 +29,4 @@ export const UserOpWaitForTxHashMaxDurationIntervals: { export const DEFAULT_ENTRYPOINT_ADDRESS = "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789" -export const SDK_VERSION = "4.2.0" +export const SDK_VERSION = "4.4.5" diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 7cecfc28a..8c8cc99ee 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -593,7 +593,7 @@ describe("Account:Write", async () => { expect(success).toBe("true") }, 60000) - test("should transfer ownership of smart account to accountTwo", async () => { + test.skip("should transfer ownership of smart account to accountTwo", async () => { const signerOfAccount = walletClient.account.address const ownerOfAccount = await publicClient.readContract({ address: DEFAULT_ECDSA_OWNERSHIP_MODULE, @@ -614,7 +614,7 @@ describe("Account:Write", async () => { expect(receipt.success).toBe("true") }, 50000) - test("should revert transfer ownership with signer that is not the owner", async () => { + test.skip("should revert transfer ownership with signer that is not the owner", async () => { _smartAccount = await createSmartAccountClient({ signer: walletClient, paymasterUrl, From ec082bd0d7889ebab0a5159dea64b4c260b73868 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Tue, 4 Jun 2024 15:44:22 +0100 Subject: [PATCH 1193/1247] fix: remove file storage (#515) * fix: remove file storage (#515) --- CHANGELOG.md | 6 + package.json | 2 +- src/modules/SessionKeyManagerModule.ts | 6 - .../session-storage/SessionFileStorage.ts | 301 ------------------ src/modules/session-storage/index.ts | 1 - src/modules/session-storage/utils.ts | 10 +- src/modules/sessions/abi.ts | 2 +- src/modules/sessions/batch.ts | 7 +- .../sessions/sessionSmartAccountClient.ts | 1 + src/modules/utils/Types.ts | 3 +- tests/account/write.test.ts | 4 +- tests/modules/write.test.ts | 2 +- 12 files changed, 20 insertions(+), 325 deletions(-) delete mode 100644 src/modules/session-storage/SessionFileStorage.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 9484ac4a7..b84e72447 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # @biconomy/account +## 4.4.6 + +### Patch Changes + +- Move SessionStorageClient to its own package (https://www.npmjs.com/package/@biconomy/session-file-storage) + ## 4.4.5 ### Patch Changes diff --git a/package.json b/package.json index 47debc268..a92631902 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "sideEffects": false, "name": "@biconomy/account", "author": "Biconomy", - "version": "4.4.5", + "version": "4.4.6", "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ "erc-7579", diff --git a/src/modules/SessionKeyManagerModule.ts b/src/modules/SessionKeyManagerModule.ts index 8d57370b0..223d2d8cd 100644 --- a/src/modules/SessionKeyManagerModule.ts +++ b/src/modules/SessionKeyManagerModule.ts @@ -19,7 +19,6 @@ import type { SessionSearchParam, SessionStatus } from "./interfaces/ISessionStorage.js" -import { SessionFileStorage } from "./session-storage/SessionFileStorage.js" import { SessionLocalStorage } from "./session-storage/SessionLocalStorage.js" import { SessionMemoryStorage } from "./session-storage/SessionMemoryStorage.js" import { @@ -93,11 +92,6 @@ export class SessionKeyManagerModule extends BaseValidationModule { moduleConfig.smartAccountAddress ) break - case StorageType.FILE_STORAGE: - instance.sessionStorageClient = new SessionFileStorage( - moduleConfig.smartAccountAddress - ) - break case StorageType.LOCAL_STORAGE: instance.sessionStorageClient = new SessionLocalStorage( moduleConfig.smartAccountAddress diff --git a/src/modules/session-storage/SessionFileStorage.ts b/src/modules/session-storage/SessionFileStorage.ts deleted file mode 100644 index 09d50bc31..000000000 --- a/src/modules/session-storage/SessionFileStorage.ts +++ /dev/null @@ -1,301 +0,0 @@ -import { http, type Chain, type Hex, createWalletClient } from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { - Logger, - type SmartAccountSigner, - WalletClientSigner -} from "../../account" -import type { - ISessionStorage, - SessionLeafNode, - SessionSearchParam, - SessionStatus -} from "../interfaces/ISessionStorage" -import { getRandomSigner } from "../utils/Helper" -import type { SignerData } from "../utils/Types" - -const getNodeFs = () => { - // biome-ignore lint/suspicious/noImplicitAnyLet: <explanation> - let nodeFs - try { - //@ts-ignore - nodeFs = require("node:fs") - } catch (error) { - //@ts-ignore - // biome-ignore lint/style/useNodejsImportProtocol: <explanation> - nodeFs = require("fs") - } - return nodeFs -} - -const DIRECTORY_NAME = "sessionStorageData" - -export class SessionFileStorage implements ISessionStorage { - public smartAccountAddress: Hex - private storeUrl: string - - constructor(smartAccountAddress: Hex, url?: string) { - this.smartAccountAddress = smartAccountAddress.toLowerCase() as Hex - - const defaultedDirectory = url ?? __dirname - this.storeUrl = [defaultedDirectory, DIRECTORY_NAME].join("/") - this.createDirectory() - } - - private createDirectory(): void { - const nodeFs = getNodeFs() - if (!nodeFs.existsSync(this.storeUrl)) { - nodeFs.mkdirSync(this.storeUrl) - } - } - - // This method reads data from the file and returns it in the JSON format - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - private async readDataFromFile(type: "sessions" | "signers"): Promise<any> { - return new Promise((resolve) => { - const nodeFs = getNodeFs() - nodeFs.readFile( - this.getStorageFilePath(type), - "utf8", - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - (err: any, data: any) => { - if (err) { - // Handle errors appropriately - resolve(undefined) - } else { - if (!data) { - resolve(null) - } else { - resolve(JSON.parse(data)) - } - // resolve(JSON.parse(data)); - } - } - ) - }) - } - - private getStorageFilePath(type: "sessions" | "signers"): string { - return `${this.storeUrl}/${this.smartAccountAddress}_${type}.json` - } - - private async writeDataToFile( - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - data: any, - type: "sessions" | "signers" - ): Promise<void> { - return new Promise((resolve, reject) => { - const filePath = this.getStorageFilePath(type) - const nodeFs = getNodeFs() - nodeFs.writeFile( - filePath, - JSON.stringify(data), - "utf8", - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - (err: any) => { - if (err) { - // Handle errors appropriately - reject(err) - } else { - resolve() - } - } - ) - }) - } - - private validateSearchParam(param: SessionSearchParam): void { - if (param.sessionID) { - return - } - if ( - !param.sessionID && - param.sessionPublicKey && - param.sessionValidationModule - ) { - return - } - throw new Error( - "Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address." - ) - } - - // Session store is in the form of mekrleRoot and leafnodes, each object will have a root and an array of leafNodes. - private async getSessionStore() { - try { - const data = await this.readDataFromFile("sessions") - return data || { merkleRoot: "", leafNodes: [] } - } catch (error) { - // Handle errors appropriately - } - } - - private async getSignerStore() { - try { - const data = await this.readDataFromFile("signers") - return data || {} - } catch (error) { - console.log({ error }) - // Handle errors appropriately - } - } - - // private getStorageKey(type: "sessions" | "signers"): string { - // return `${this.smartAccountAddress}_${type}` - // } - - private toLowercaseAddress(address: string): Hex { - return address.toLowerCase() as Hex - } - - async getSessionData(param: SessionSearchParam): Promise<SessionLeafNode> { - const sessions = (await this.getSessionStore()).leafNodes - const session = sessions.find((s: SessionLeafNode) => { - if (param.sessionID) { - return ( - s.sessionID === param.sessionID && - (!param.status || s.status === param.status) - ) - } - if (param.sessionPublicKey && param.sessionValidationModule) { - return ( - s.sessionPublicKey === - this.toLowercaseAddress(param.sessionPublicKey) && - s.sessionValidationModule === - this.toLowercaseAddress(param.sessionValidationModule) && - (!param.status || s.status === param.status) - ) - } - return undefined - }) - - if (!session) { - throw new Error("Session not found.") - } - return session - } - - async addSessionData(leaf: SessionLeafNode): Promise<void> { - Logger.log("Add session Data") - const data = await this.getSessionStore() - leaf.sessionValidationModule = this.toLowercaseAddress( - leaf.sessionValidationModule - ) - leaf.sessionPublicKey = this.toLowercaseAddress(leaf.sessionPublicKey) - data.leafNodes.push(leaf) - await this.writeDataToFile(data, "sessions") // Use 'sessions' as the type - } - - async updateSessionStatus( - param: SessionSearchParam, - status: SessionStatus - ): Promise<void> { - this.validateSearchParam(param) - - const data = await this.getSessionStore() - const session = data.leafNodes.find((s: SessionLeafNode) => { - if (param.sessionID) { - return s.sessionID === param.sessionID - } - if (param.sessionPublicKey && param.sessionValidationModule) { - return ( - s.sessionPublicKey === - this.toLowercaseAddress(param.sessionPublicKey) && - s.sessionValidationModule === - this.toLowercaseAddress(param.sessionValidationModule) - ) - } - return undefined - }) - - if (!session) { - throw new Error("Session not found.") - } - - session.status = status - await this.writeDataToFile(data, "sessions") // Use 'sessions' as the type - } - - async clearPendingSessions(): Promise<void> { - const data = await this.getSessionStore() - data.leafNodes = data.leafNodes.filter( - (s: SessionLeafNode) => s.status !== "PENDING" - ) - await this.writeDataToFile(data, "sessions") // Use 'sessions' as the type - } - - async addSigner( - signerData: SignerData | undefined, - chain: Chain - ): Promise<SmartAccountSigner> { - const signers = await this.getSignerStore() - const signer: SignerData = signerData ?? getRandomSigner() - const accountSigner = privateKeyToAccount(signer.pvKey) - const client = createWalletClient({ - account: accountSigner, - chain, - transport: http() - }) - const walletClientSigner: SmartAccountSigner = new WalletClientSigner( - client, - "json-rpc" // signerType - ) - signers[this.toLowercaseAddress(accountSigner.address)] = signer - await this.writeDataToFile(signers, "signers") // Use 'signers' as the type - return walletClientSigner - } - - async getSignerByKey( - sessionPublicKey: string, - chain: Chain - ): Promise<WalletClientSigner> { - const signers = await this.getSignerStore() - Logger.log("Got signers", signers) - - const signerData: SignerData = - signers[this.toLowercaseAddress(sessionPublicKey)] - - if (!signerData) { - throw new Error("Signer not found.") - } - Logger.log(signerData.pvKey, "PVKEY") - - const signer = privateKeyToAccount(signerData.pvKey) - const walletClient = createWalletClient({ - account: signer, - chain, - transport: http() - }) - return new WalletClientSigner(walletClient, "json-rpc") - } - - async getSignerBySession( - param: SessionSearchParam, - chain: Chain - ): Promise<WalletClientSigner> { - const session = await this.getSessionData(param) - Logger.log("got session") - const signer = await this.getSignerByKey(session.sessionPublicKey, chain) - return signer - } - - async getAllSessionData( - param?: SessionSearchParam - ): Promise<SessionLeafNode[]> { - const sessions = (await this.getSessionStore()).leafNodes - if (!param || !param.status) { - return sessions - } - return sessions.filter((s: SessionLeafNode) => s.status === param.status) - } - - async getMerkleRoot(): Promise<string> { - return (await this.getSessionStore()).merkleRoot - } - - async setMerkleRoot(merkleRoot: string): Promise<void> { - const data = await this.getSessionStore() - data.merkleRoot = merkleRoot - await this.writeDataToFile(data, "sessions") // Use 'sessions' as the type - } -} diff --git a/src/modules/session-storage/index.ts b/src/modules/session-storage/index.ts index 05f1b359d..1b7c6ad60 100644 --- a/src/modules/session-storage/index.ts +++ b/src/modules/session-storage/index.ts @@ -1,4 +1,3 @@ -export { SessionFileStorage } from "./SessionFileStorage.js" export { SessionLocalStorage } from "./SessionLocalStorage.js" export { SessionMemoryStorage } from "./SessionMemoryStorage.js" export * from "./utils.js" diff --git a/src/modules/session-storage/utils.ts b/src/modules/session-storage/utils.ts index 3348f00e9..526d2e3c4 100644 --- a/src/modules/session-storage/utils.ts +++ b/src/modules/session-storage/utils.ts @@ -2,11 +2,7 @@ import type { Address, Chain, Hex } from "viem" import type { BiconomySmartAccountV2, SmartAccountSigner } from "../../account" import type { ISessionStorage } from "../interfaces/ISessionStorage" import { supportsLocalStorage } from "./SessionLocalStorage" -import { - SessionFileStorage, - SessionLocalStorage, - SessionMemoryStorage -} from "./index.js" +import { SessionLocalStorage, SessionMemoryStorage } from "./index.js" export type SessionStoragePayload = { sessionKeyAddress: Hex @@ -19,7 +15,7 @@ export type SessionStoragePayload = { * * This function is used to store a new session key in the session storage. * If the session storage client is not provided as the third argument, it will create a new session storage client based on the environment. - * When localStorage is supported, it will return SessionLocalStorage, otherwise it will assume you are in a backend and use SessionFileStorage. + * When localStorage is supported, it will return SessionLocalStorage, otherwise it will assume you are in a backend and use SessionMemoryStorage. * * @param smartAccount: BiconomySmartAccountV2 * @param chain: Chain @@ -63,7 +59,7 @@ export const getDefaultStorageClient = (address: Address): ISessionStorage => { return new SessionLocalStorage(address) } if (inNodeBackend()) { - return new SessionFileStorage(address) + return new SessionMemoryStorage(address) // Fallback to memory storage } throw new Error("No session storage client available") } diff --git a/src/modules/sessions/abi.ts b/src/modules/sessions/abi.ts index dc38a4170..efad26cd0 100644 --- a/src/modules/sessions/abi.ts +++ b/src/modules/sessions/abi.ts @@ -94,7 +94,7 @@ export type SessionGrantedPayload = UserOpResponse & { session: Session } * import { createSmartAccountClient } from "@biconomy/account" * import { createWalletClient, http } from "viem"; * import { polygonAmoy } from "viem/chains"; - * + * import { SessionFileStorage } from "@biconomy/session-file-storage"; * const signer = createWalletClient({ * account, * chain: polygonAmoy, diff --git a/src/modules/sessions/batch.ts b/src/modules/sessions/batch.ts index 741135546..520b795b0 100644 --- a/src/modules/sessions/batch.ts +++ b/src/modules/sessions/batch.ts @@ -49,8 +49,9 @@ export type CreateBatchSessionConfig = { * import { createSmartAccountClient } from "@biconomy/account" * import { createWalletClient, http } from "viem"; * import { polygonAmoy } from "viem/chains"; - * - * const signer = createWalletClient({ + * import { SessionFileStorage } from "@biconomy/session-file-storage"; + +* const signer = createWalletClient({ * account, * chain: polygonAmoy, * transport: http(), @@ -59,7 +60,7 @@ export type CreateBatchSessionConfig = { * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, paymasterUrl }); // Retrieve bundler/paymaster url from dashboard * const smartAccountAddress = await smartAccount.getAccountAddress(); * const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - * const sessionStorage = new SessionFileStorage(smartAccountAddress); + * const sessionStorage = new SessionFileStorage(smartAccountAddress); * const sessionKeyAddress = (await sessionStorage.addSigner(undefined, polygonAmoy)).getAddress(); * * const leaves: CreateSessionDataParams[] = [ diff --git a/src/modules/sessions/sessionSmartAccountClient.ts b/src/modules/sessions/sessionSmartAccountClient.ts index 0dd54595d..0b8137ab3 100644 --- a/src/modules/sessions/sessionSmartAccountClient.ts +++ b/src/modules/sessions/sessionSmartAccountClient.ts @@ -44,6 +44,7 @@ export type ImpersonatedSmartAccountConfig = Omit< * import { createSmartAccountClient, BiconomySmartAccountV2 } from "@biconomy/account" * import { createWalletClient, http } from "viem"; * import { polygonAmoy } from "viem/chains"; + * import { SessionFileStorage } from "@biconomy/session-file-storage"; * * const signer = createWalletClient({ * account, diff --git a/src/modules/utils/Types.ts b/src/modules/utils/Types.ts index 40032c753..414dbeca0 100644 --- a/src/modules/utils/Types.ts +++ b/src/modules/utils/Types.ts @@ -64,8 +64,7 @@ export interface BatchedSessionRouterModuleConfig export enum StorageType { LOCAL_STORAGE = 0, - MEMORY_STORAGE = 1, - FILE_STORAGE = 2 + MEMORY_STORAGE = 1 } export type SessionDataTuple = [ diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 8c8cc99ee..e715ebe7a 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -96,7 +96,7 @@ describe("Account:Write", async () => { ) }) - test("should test the nonce on arbSepolia", async () => { + test.skip("should test the nonce on arbSepolia", async () => { const chain = arbitrumSepolia const account = privateKeyToAccount(`0x${privateKey}`) const signer = createWalletClient({ account, chain, transport: http() }) @@ -642,7 +642,7 @@ describe("Account:Write", async () => { ).rejects.toThrowError() }, 50000) - test("send an user op with the new owner", async () => { + test.skip("send an user op with the new owner", async () => { _smartAccount = await createSmartAccountClient({ signer: walletClientTwo, paymasterUrl, diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts index 80cdbf2b1..15d3f7fd2 100644 --- a/tests/modules/write.test.ts +++ b/tests/modules/write.test.ts @@ -1367,5 +1367,5 @@ describe("Modules:Write", () => { expect( balanceOfPreferredTokenBefore - balanceOfPreferredTokenAfter ).toBeGreaterThan(0) - }, 60000) + }, 80000) }) From 1af2f31d4d963f66a582ff5986cd87bb3ffc764c Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Wed, 12 Jun 2024 17:11:35 +0300 Subject: [PATCH 1194/1247] feat: nexus integration draft --- bun.lockb | Bin 273554 -> 273884 bytes package.json | 2 +- src/account/BiconomySmartAccountV2.ts | 826 ++++++----- src/account/abi/SmartAccount.ts | 1299 +++++++++++------ src/account/utils/Constants.ts | 45 +- src/account/utils/Types.ts | 65 +- src/account/utils/Utils.ts | 102 +- src/bundler/Bundler.ts | 167 +-- src/bundler/IBundler.ts | 26 - src/bundler/interfaces/IBundler.ts | 14 +- src/bundler/utils/Constants.ts | 2 +- src/bundler/utils/HelperFunction.ts | 50 +- src/bundler/utils/Types.ts | 37 +- src/bundler/utils/Utils.ts | 30 + src/modules/ECDSAOwnershipValidationModule.ts | 2 +- src/modules/utils/Constants.ts | 2 +- src/modules/utils/Helper.ts | 49 +- src/paymaster/BiconomyPaymaster.ts | 86 +- tests/account/write.test.ts | 1214 +++++++-------- tests/utils.ts | 37 +- tests/vitest.config.ts | 4 + 21 files changed, 2273 insertions(+), 1786 deletions(-) delete mode 100644 src/bundler/IBundler.ts diff --git a/bun.lockb b/bun.lockb index c52c0c9f44f5d0113a8919c590c318700a7cf4a2..ecdabd4198d311335cb822f14057539f60256997 100755 GIT binary patch delta 23213 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 F{|DRfnJxeT delta 22889 zcma)^3w(}cANcR*c{X-qB&W@cMnY`N%(m9dDGVby4J|FkhA~Vm)~1MIF?YHw2{|sO z<S-K<%0^4;<lMQCS5a@h=+*oG{_ev}|K9iie?I;CUBB=3yUxGsy6@-S<34}xo~38* zSrXFfUn@q=YEw7!>ubA?z7V-_^}~ynoWJt>$5j)0?tUz2)yO9fyW4na@_9RdXcKq; zooi<3{u3sRPMVscX`_=el7q)goSHRA(`ss3PN`9#x5)l%u%_u)7b#Q+U2UkQ)j$tH z--}L58k;&QX==t*o2MsOydSzL`C;e)^jGBjqHhh+w0qDe(NbSp()i@y(Wz6WCZ|1} zJVn#?!Rx`B4>#M%&iMx52l#A+rum~|9@n%6=t6jH^h<VumWdY6MN0)2=x{Z({}a{# z9=G*jcq6!Lq}7q1;L?$aNfRffj@Go~sZUKyoiJL9qp^E6<DF{9qaGY<xg12xTr@<> z7^<Udp;s__G8aqG)zJ~D7B4XlS8tI0*HX*qfOK%w1Z!YN(e<&fjJJ4`G>ebMmVwVg z*F|gi$pkFHmJWYn=Z~8jJT)aLOglBvD&G$-_5C`@>{aiac7Vo!d(iixt4_AM+lvZi zX+qEq(J6#M$hfImOO`<zNS-huH9aGB)NyQS_^`32MuRTb(ye*+r<4q1FSSZ7A7)sS zlaxF)m`b!_Y{{QL&8lrJeqsk2H*2)jk51RL2eHN(p}q~G_RO%#?u5#kj!H?IfV;LX z(+Z*((lXJXK4VRMTI$5qwA85?9gW$(O<Y078sD}_NA0|2&svL+i>^VLX=s_g1au%e z-p+59W5tI;OPkN2B|mw}lu1*9lV>cNZPk-%=ldI>HTw^5fF-q_o@40~XbI~vbFC57 zBws?LJ*~*BIDW%kuzKDDEpyw^wi$>fpFgvVvo#xMKR(~e?uC|4N1<il4XI9IVV6C~ z^aWO@zekJT$7rec5LzP9y~xV{WuevVH@5!R*6-SSq+QS1JhQvKa}r;)##M-xh6kdn zp)*pZOqw<}MSEzmHNO26Xbg{|0tvR)>6kPe!dRr-9OH1UCSAT=YI$cSO&L3toX`PQ z?VVn-YTbjD*~$!!oG7!9iY>F7XzN}^&^-;ZZyDBLuA{~K0=h2xRb>sDxScee@}bME zwaAB8Cx7M&tK2EH^y!xZi;ta@&ORr)ux0Hoqov+KwjLwvpEN4P{}t0eJ7+o-ii7r= z)nGY}vKn2{GUz0@bm$j4Ad_)mm9?QJ*bUEFZH0clHC8=Cs95Ur#+GyBpX5sjUO@}b zM9Tn%Q~q8pTgw?qftrABfClI`wr*%T&@psFcp@E=k>=20sc^0}f}Bfe>F_6L*@H*X z;+Hx#cuMlv<QY4$#Xogw(v&Glnc7Nh8AzXv@N5zrNXQ76kRekx9W5P7LrZvcwhOdF z%ZTnr%R*K|OGCHmn3M~B!{W!VrQ8m*G?a&yfjx^B|H92y{S&a$WQv1HNYDLj?Sqzv zPBG;H=!0k(;rI#3)23*eHfrkA{9n_?Z?pW;QfH(kV?Ti{9T|+4sg6TSM`zlRnr^JQ zH#TU)4l8#wRC1@Mq>f4nPEULDEvs8@!&Rq+-fNdNh>=EUo!IP)d#o~N(bB?{<k86! zGc;{mkyXbnv<!I-TJlfgCyVTqo06O~Iyim&SjR3Vzdrf@F1D^$bM{#?a0@LXzk-&j znt`T|**RBn6fh-u>ZA!zCu^DeHLVHuB(yY~gszEpuC(p(mjkbmhNQyrsS`&BPa2~= z`Ht0LLLqfbrlzeRU&<{)OZ{m{>A{np8mB#L^M;3H;MMPBOfoX-wg?)`+=+WeTDmNR z7WJ+*KN?!P^PX|IZiDRJc*!h`N)1k(IA)R-gDtbu5-sbUd(>)t%v6r#j44UevG0Xv zv3OFh3Vsr~4Q!o0B{?G_HF=7|FXmg5a0)GhOb;HDIw2!@N_sHEVAix2$E*tW;2;%m zL`%1amss6hiLQhFCtA8a%=Vj8YE@Wb`!7T{BEP4dKOTJ_wl6ve9fI~p|GdOHINN+6 z1MR~WAt5(PIGfY_ewno_o6!>423jIJ3tb;Q8Z8yYqh-s4+xbm)2Gx(ycRtx9GR*MH zXt%TEvF<@e-;9S{-HqIgSl2?MG$Yo1evnaZS|`2rU`=aJSudl!eT1Hf)g7y<F#u}~ zRtKyqMt*pN{smS?ESFI`G{RNah<iHLyWbE^>tXnYMeFs4YFcO0xAx))J;k;(BR@Do z--H!Oo@UhU7U6vp>mj2oBU*nhLDTxe-3Dd6Kg1d%+`GdtO-nFSYe+q8`d%Q_3tx{> z-aA4M9j<BpOe?=_gr1Eh^?OM@dJ&fNx~fq-BSOD|^_W#IIKn$-1iduk!=v>qQZ$(3 zZ44L?;r?lavEZ3b`k==(t+(aO@L$7{$<U1Qgb4i`tR7fyqdX+S6>H?qjMZODw3s<1 z`gd62c(`QHuBJxZtXNmFkvl8ayWj~;8*Jo_h<4W=X)GAg$-5tSoZSTIuaT18(vQIr z?vF<r$Fn+l>rc|Mk(cwZ7l|H5Syr^SL8_OTI%j4IYm(%!v7{`&t)#k}e%C8<qn=`( zO*WU5RZAJEekKbT<>ZbfW!FN=^81aHRbSL-hs`Es)mKK!Dp7|cwYOPcA}OovdQz6( z^$Hd>#;GrhR3CE=&XNjc4yqZoiI$kL){J<J+KG`q7_!jJFiTs4^$-?8pd!6eq#fVI z(cZmD5rv`A`c_gBQQoHeO{`8>#0B;CNW}|_xS*;PSmH@chDEq9rWy-g=%hCoXEp6M z!@m!fv_^P_M(A^~dRZ35%dom(c^l<zBlMXQG%e1t+-D~k3l_xsq*eBK2J4Q;ku>A@ zyjY)!n%2cBrN?9Ssj!w~#a3AVz^W*%hflILBAcsMggzeYPEWRBJyKE5n{zFu!s?2} z9=7|eu-H?U<?=Uj7sl#CCTm)Mhw1CF;w!9Qu&nJb8!&o`vo35vSFTaIDAxO1*l;7S z{lh*}t%+kJFgeq)?1JqgjnceW@2?;|jl6}?dJC?K6`gmF%P@{FjP-$8i!4>wHuS}@ z`XkdS`ROaL?o7_vyYfPxt~{wzu<VITk8r(h<SvQTFT!NU(Yp~5dcgF`Q<Q+k!H`qO zC?{fm!kUG}Y4~ZR&kXB;GY>2MAXcO`Hz5)Fzp$iAE3b8?GkgiOWGv}y9rF-<A4`r~ z;)ZfJu-F+`;yLyiO^Y@?CGR^dS-UzCecq4Eq&*{VC<hlQ31joH^FD&r!H91kt^bRZ zY@!-Qevb&fCH<Cme9X`vj@8qui+0vv$%0rL;S`o^5~~mOvMkHG01U*EQC2bgw-8Ip zS;y>QtQf31=3ZI-th3ef<G55{b+$Y?f*WUR+M|}05}{AT;_R{8`v^-~*Uc7!b2#qJ zJT5=3O-AnWSp656__HSora`l<9=VJG{UdaRC8gQK%+Y69993LET0N&}UCqnJcv2Ef zR-e~n$*j1I{1+nhQ&`=xybb#79q_!&Fvp2Lkd)NQ0mOwa--ufgtA7HMo|$L69yq6B zCJ2*(STalWa9E@dh76q}N*2+!ti`&2u5`;c?_nPjR*1{NRA^h)IrA;nKq_F}$xD5~ zs?J)SLM%ChsE&EPj@8e!${&yPnkT1WUfXDW9;px$OCapVl1*=hpR1Y?w<^|q(tHUT z-yYHWT2gk`+eUbw!|G>V9b4sEOJ*IrnOG8X9`kB`5KE2)I!G|pSm1<#?3meDcY^&U z)*}_3ofcYq*eW+0OAbG4Thv)(U3k6BMNY)BhB<&b*H>6Fo~spBIah}~$5AFb3+qnf zzhON=1J=x?zF2wp?!}S;v0^mvCzidoGb3E_M(Mg({rSbt9+s#(fHfL_YsUmFu?`jM zkQj$$4TL_pb{YDHSiNwm6LoUu@DD86H`a03)ToHy0TKFeEQv_sc|e5sTC9i61*ra# zriH<48MPVoG%RW3UTXoctp3VP+8<aFOWZ)v)9_`Q)(*?dJZ+M(Bp8Wz^43>avT)yH zJ!a;K74fpw4{N8VVo9A<%)Px9t2dU_$E%WO_@;1pD<?=~FK)-`XL*H3c;Ck2T;fKn z({h5|<lJDoa*W)~v93i%>E>AdhZWW;P%pQaZC<r@9kYZr4ok*i&YAZsSY3_0<<a_i zQqnWatNzLgYkZ^+hQzXF3}7MV8>L%g_4g|rxV!SM^P0qWS#Y#IjZ}hJjWk_`)z`FS zD*RVD!;<SmD%K#&b1+8+*5ehPVXG?-pa4rI)EZ9XHBQ%9SUus6MJ-FQB);*)I*VmZ zFB7ES|9a(ePhfSjJU@%{!su(x{3TMdv0O&^zz98ft)>mBX!!XGOV<1hmNhgPX!CVW z_XiMFv$13sSeyJ9memb8OKY#EVIz+tqCY8ns(M7YHX3oeV)dIatE8+|>;@;IWx}Ro z-5Jhdtd6w7T{BVfFRVdE{J?1M$2a07@!`FX)T2gOLbP6OlNBi(0tpeWzDDkzSUn&1 zaK+flu&l+9c7qD7X(YO-I~9vtdk$9;Jt*RlEv5gA)zzwi2#9$@oFsU&NZA$RRg7h? zGFAC*W<m|$kZ64rDXEJoniuJX!S#ih{)3dvs@byMbBnX^5<UeL7W41Evc>2<Ce~-G zbrxAsn~!D9sI1UsEI9$pQR@NQtizk#+&jX1CKiV}0egg$oCn<V&5CgUzRl>pzmqG{ z$lV|7nrf8pkJWc>x8laSh+M^zxUp|Y-n1-cgm_D}Ee=KwzqhdL1BlLihh>ddj+O^^ zICCchn}8)-&+6!QEPG+`{NB#9V!z2-*0Ez<FJ@rLzO?%C4pw(_AhpvYy>?Qic?<st zsdnb&YZ|Et9Ju;Ui|{^!)ls;smJxS2R)1`lvuv!n>qVm!b{QsJu}=CXyRE@;b{&ZH z!H~ACtYui@NY#w|gzd=91K$kwJ!V63(RwVYc6jlvmrZgFD;kT5-xHy?F0y8Xk+HaG zMMky7oxJw}2`cU!y!KY~j>+tdC81~Cdpw6FOH$Q5iw|MRWK!+a2>ljTBo?dAWcDw1 z^7v|^=VD1{5^LO9`R&uRC$X&HF2H)swCD~Ocl}tbKJaa82`&EuEV%;U-#)^9=56En zu}-cB4ZS2*U%sF3+hkeW|4%G?KM*4i9k31<Dq+;QSRL@>rj@(s14dkFtnT-YbLo}2 zoPZ@WYd$IPejSSmA#A@PB_+*cT(5u7T6-daGQ+W~SSwGC^udq{EXU7n$0~9g?rwI- zSkShUo_NS|;YkG-djl)hDljoZ{}@Xq(2Bomhb_yR>aJKa1$>QXa-XyFtVP*}C4Dd> zf(gtmi`BcnYfZmdmur@xe;BKm!=w(5G3uy&#Oet(vdlfPq;2MEP^1q=Ck(E?JOf~= zPR6=_Jz^|4*+~yMYTY(4L`JW$y5q>~uZ;A;kSff(b?-Xwaib*D=Ne*^eiW-O!M5tG z-8Rxo3?rTm5n$w&v)u1nnbw6nA8R-jnK7+j!ICvKzvJqW$DDpL``+nT?Tx&TW4)zn zu9@`dE0{G?;&ESzy*c$!lERA_Vf1feSr>Xa6?{r7;)Wx+JC;=gp58BE@g$%(mu*r~ zgLMYfKW>FICkbW7VM!TtPw8)9J#Kl@qbet?gOkmS=V&ZxncmWmx3ChhSY`5}KCm_$ z^FX<oSWjA>jO074Xn9KI{cRavdd<|sAIc*cVfm!`o2joz^)XYePioo#Gc}7;yqPK` zW%>DiWc%r(NQIicWuLfSGD^?H>W5+NVayg+mS3@~z?RwSP|nj&Gmnd`o>pOT1LfMV zQ$H82@9g{C>3Tcc+?w4*9Y}TcDY_BudM{Yj8|Uhye8#zaRT?Q*kSZSM8mjgR2pkV+ zrc%cPQpN+y1T<Iv699e_09g|NEmWz15&^+!fL1Cq4KO1Oa6v$8)oLQ3<wQW<L_n}Q zBjB`vm`Q-PDt8iK{v^Ov0ih}?9T1rgSeXt8Q<nu?5)eNb5UvU)1C~z)+!hd_;-&z4 zO#y730*F#K1>6vjI291B3a0`#O$GR70Akdz3_wB#;DCTwrB4I+Oar7%19VZv0`>|B zd>YVAr9KTvc^XhA;1T6N-8IzJLroUdQ<aM9rGjRl;#8)n-l|+wAJr-o)mP0H6|c^S z>Zd}VLG@R;q8?RWiyEM!W}+Tb`Jx7@%c2IUF0)XBRe`7>>bj_*DlQ9^pw@^Qrf!NF zt_D1d8lehBJ+55Ys6;gkr4q7btl4yYq|$Q$J~=Yh96*vP7O+=9;B3Gsl{y=cGF!$f zAX)i82k?6iko6p3tSS{yA|UvAK&r}o9x&s1zy$&0RjWCGmU94ka{y`TjDXVuV&(!S zsoc4M`EvnR1x!{^F90H60IYlgFjZX^a7jS?Jis(nFb}YN9^kfs=_+nMpx1oB*7<-; zbyL6%0g1VQnW``suqhYdy8w`-hAjXjEC3u3kgfEE0H1|`w1t4#s#w5Y0fCDE&#Tl$ zfRsgmG68dye;&Xu50I4yn5Rkwln4lZ5s<4gUj)o}5pY4kLe*+9pygsf-eN$WIwRn; zfS4tK#VU6RVEz)oRRQ@bDjyJ;4_KKGFw|uMmjuKw1uRnqO99K50&WXXD$W4(G5}i* zK!Lg`;D&(2mjEkN;Y)x`F9Cd)0amJE%K!<>00#uDQu@mPpO*n?F9X)7VgY*v1S-H< zm8t+K3Q#6sz4BiU@LLYZS`OH#N(Gb%2rd8=s>}kwi~_&~0h?8;R{$+v0pz^`*s9J5 zI4vM%1z@|%T>+TC0&rEp4i)t(Ao5kf%2xq9)nx&f1jMfd>{bOU0n1kcZVM<<ajyY- zy$0C&8lYI+6mUa8;wr$~s&Exx(<*@PYQO<CY&9TZHQ<1NgGyfm@L2;$TLU<(iUsTy z5coRah)R7Okn%d9Ou&1}e=WdoEg)+x;Fu~EP$D3B9iUWYt^>?i2e=^Mgle@O&~iN> zZ#|$)oe^+aK+FcfNtL?+Fn<H!s(^A8wGj}x5wLP2;1hLOz$F3kn*g7wf=z(sn*g^3 zoKkUxfL?`wt%ZOy>ZX7j0utW<oKuBw05-h=@ZAi!poVP*By0v85b&kaw*Y*$0MfPq zzE;Ho_6i8x3iwu~ZUv-l1(XT+UiohW_-zAZZ3A3Xr2<L>1aAjiR+-xYGqwXR2)LqJ zy$NXfCLr%kz*Tidz-a+7I{-hc+#P`VI{;S&Tvt(V0V3Z5tb7abtGX=Ul7RS~fZtTX zPQdb=fZGE8rQ&u0dhG&i-37R*ZVI>|AaOU~4^_AuuxU5IcMssU8ny?Jum^Ae;Qo(G zRV(6L_9=p-72)Di#YMR66%e==;8Cf20V#U{WdgjFe=)$X7?4#AsH#c@ln4mk2hdgK zKERB9fC~but5$CVTD}d)dmG@Z&ImXyAZ9<Hmdf1^n7<!zRX}YObpQ}~0I>1^ppLpM z;F5s&cL4QN!8?HE?*MKKXrST_0(u<;Y&{6@S2qRR5RiBX5TFVV0X7{1_#OrXs$qu# z35Nj(1T<0ly8xee0cr07f>g19y#fM{0Gg@PBY>16fHDEimH$zI-%&u;Q9uh-DxgF_ z@Oyw(D)T+SjQ0Q+1hiJI-UqaNACUJxAXuFda9TjjF+f|DdkirD7~raaP!&}Ih%5oD zECGb6%K|P5h%W_%tAbL%@>0NU0TC+hIH1>Yz}Dk{D0Nf74FQQK0MV-O1Ypw%fbR!@ z7&YtzK*9%r0|H`|UIy?f1EiG!x~O6Sdj$l32<WC#KLn(F2q+Wqi1I%P@H+{}Itl2h zN(Gb%2>u8Vr!qeR%=id!K|mkXsvOX=9FSKIh*xI>oE8xCF`&Q7{TML+W587b160%} zfXGh(D?b4YRF?%@5)l6>V6ZCq6tMhLz-<9TRorL%uh(aQt)Bsgsha|B2uS=KFhUi6 z4%qZL!1oj&Q4Ko<NH_&JAYi1@PXl~T1JX_dl2oyPy#fNy07j|QGk}ycfHDEe%Kt3D z?<^qeEMTlE6;L7|_#7ZrWu61fI0v{OV7zK|9?<eUAn!aNO`Q>NT0qPNz$BG>0Wkjp z;HrShD(VYB<QIUIUjU}6%K|P5i2o8WO%;3zSpFs8wt(p>?khmAuK-)W0%WS20&WOM z{2DM*6@Cra^fkcu8$gyC_6;E68^8ep*-HNw;PWjY?OVWXRV-kyfWYqn&#Tn$04d)A z$^^_+{@(-qz6WG|516M)1(XN~{sEAyGJgQf_yKT1z(UpPBB13(K;A__o;oAow1AjP zfW<2J5@7x%z*PbHD(W&I@-krMWq_eB3%Dd8{zt$vRq!KV`Hz6x0+foo0_b%Gu=NU{ zK;0B@LqOs`04r4CKLDHl0r0&FSgD3x1teSr91yTd=|2H{egdTZ1X!br1?&|N_%mRw zO8ps-@-v`Jz<T9>4d8bTkaZ2PQI!fP5fFSGP^dDm17=(YToABXwfcqI<1K2osIBUZ zsBJ3rSJZZuE9y=4wWu8`>Yu2$RKBR4>awU^s>^Sv-Kqekmj6bzw|}GBA{F;Lpx5t! zt-k|`)lC6607Z%aa(VnzPKevfd(kj{gQ9j+arZQG+IXqeE!{pvAJuYqcDeG4YS(tR zaMyEw7&>Y~s{C+Lb8DJ*P`T>5r%DOEWQ_Hjl0~YljyueCu!x+C9`D3w_$i4R01_|n zjx+hiiE;(H!-@|1x_7x$XO}z0Y;jgYw~u$NIs7i9D5$Y}l3SqrY@YhFk^3PIf~Y|E zbmnMBpu3JfXQ}mbl{{4z=<caIKfGI16xi4uP}O_moBUix?WpcPQBkq0R#CkN+}+&X zO?U`YU6lvAyO~4u&gQ{SHEB?p4eHKMYHAb>Xzf1Xa-aL4sBy6S_6yaP@09Us+6Ql| zA-mk2iWcv3m%Ch%Drt|qPIi<_)4a%>h>y7WBM-sklMaw%L*y({1(|I71(5E6$Y-kU z*NAkSNi;3PW`WovqyawDU><a1BoU^|4|`_V6*d7rVLLu!7rqa6m~=JtOq&IfZf^U{ zvRPADOPgictQoA8&7OtvpLRb|pB_|4=a{T5m0|cxxA;6~7k+^B1}VYkd7HH$y;Q9! zV$zn`S##~IR%Fe$*$Xy%5XK70kCe1|Fv)I>yo<;u*Y;~ey1iubSzxnZ(ifQdd(jJF zk{yD4ZY@krEzfqO``VkT%U=4loV<FNi|s6)d}z<Z>Z6y~j3*!3AXo!*zRki&54P&n zmfDP`g4)9{2?oPv;iT)>elNlJPoAA<4J`JA_Ok8B^I`2PL_W%9JU`P$ArdvqVbTE} zwaDM?%+Ge)kH=8jDx1A&vuN!5RA@0{Y-(q{WoN};%bLnZf?SrHCuZi73M;bxcowOp zkSW2q*Jhnbhr%RIifz_~bbG0U&pw-VC0)m2+1lGS>;{y{y&t{bX5C5OPaH`+9e|OP zzXNHPNXzGt?I*iN#wH&LZkfNH$PUsHckkM)7wK0>OWYknyV)$}_Tq7!{3cs_&vxuh z`dMogwD)b+2i6KEQE<#=eMt|2$%>cQES_|Cn5=lI&H9mU50e!?4&y)h;fdDpKA?O) zfK)+0iVTIx^nNUb)z|yn0onK2Gx(_>vIZj37n!urY&M8=b7n{;?Q@$ACf&kjr))L^ zwt}=w#%Y@kCEb+zWZY+L#<NDVD~vH)J8MI(3z|%p4CtKAhLdhYVHwbQn~fkHXtN78 z<1we!*k)hYED<JiAZ5R_*%PFLZ1xq*Bdau0AhYlo`di!aNzxq{os9fDn<bH!36zn4 zZ?mUJOFYWw2b+x|{TgYRjf*xLO<HDEW<x@Zr2Je(YubjC^y;z=$B+)E;V02Q+H5Ro zDV(g<?{_z;c0=Nt&z58Ac!~Rgq8bO>Z|WNlz3+BcJ1x<}r_njdY8w6`>0O}B$Pd); zDq<i@k;TXaBoXO?bV6Dp&5N3sx@UUp%}C4qHBp5hx_f39P?b!btmWsV??(q9EszJ0 zXhbeWvOM8viOC2g6iI@$Mt4SMAX5+-kQ^`%qA#MaAni!Ygh+_CMTa24NJp18)(Ucr zFhm;ffJ7orgK}+rih^<!3XidENyj3c5!r|$-AH#u<j5C!gtTm|1DZN}(mg!82kEiM z6DH#{L_dW*iHx*$5;_?fjf_E3koDAcFM2#O4oS83O!PCz3}iAg1<642kom|oWD+tJ zndc%X<%GyW(h$elahPbcbhI$1LP^)71ENKo2B%l@soaoL&(q{f8%{mbTx<%dAk)r} zw2Z)U5L<d$*?z%h(&<@<G%A%kzS3Cb(M#tmcShQhL7Qc=Nk{`Sn%QWve<GcOo{P+} z+4Gh7b2bwnNlU{{2b`G@Tc+G;cp+(f$~EbrbbbMnoy-5kd6BK9GU<d=^deGu<W42x zD<g0!a+XdSsJ#9%GnMO*nUGkJHtbo<mLM>vUn+GflxfXJmLUJJKYyK4smK|fG%RHc zke85U$a3UmL?J7XR}k3{-=jZ93Xzqv{!(Zr8TX>sB96U^^lQlL$QoodvJTmRtViCZ z%trJkL=L#)=yK#JB6UcE+mNlu7GyK>266~r>4@aLNc-9m5(kk3$aaCSUFf%v9mt!= zPGmRInY<8m5wgd&_o2Ozy+|?gHnJai2RV!!Lf%EBgVM1Q<QVcklKme4D@7#Z1o9Db z68RAM04YPhL(U_gAmaBq@)`1}ZOiNlKZl$}&LF3eQ;6_ykqgLI$QOt+n_tTQ{|4|i zB5Nkj9c(Sr7ldqbTerL$(d&@a$a-Wg@+u-%;nxwlrITAdxd)beL%9`Qgvh<C%$D4* z%DwILNDh*XJnm-xN07M92>POBHlzdHNOwgpl5U1POgb95LYlw7X_wFvFPD)YksHXr zklzs}{~x6PiTs4zq)dHuJ>*y97vvMzb=hjykgLegh&W4zRPq~Xx&An|G+KpDG(!GO z`X+J<`2%?f7KKzt#3vGoKsq8i;z0tCa3l<oJ9`(B9m@aOAsXU?xRL+Z6^D=xM!b<W zNNXerc@Vh=sgJZmS|Wi+3*>&JDRLju1Zj*kMEnsyqybV7@kMUS`a3=L0!SzRq;cth z^iFy$qpRF0>5MZX$rHb-NHxUq7v>B|e8qOk2(N+2EY+3um&R&h)Ish=Y9lhbT8QLH zheV`+=(=c0I~|tJ$xKM4jOhOwkdyy+WvWONO0T5?ageo@brL2ck|mL;t(@niB?iP- zZ1E4W(@tk))G~l(HkZ1^uQ}q(R`vrJ(uh;36mS|8=5$Odlfn{kZEb(Ch0FR&<ubKS zXM{U-N=F~SmZj@}$jnM7@yRw5QmIo=0`0%0CCV#T>U2PYRDx3SB;5t+jKm@_NGIeG zq&pIa^hA0f^J!n}MWPSV8ySKOMs6{fcyvEI{X6ym(vKqjk%7o#$RK1Lc{h-uq@`Q} zdKfYsc@~+8WFj+=3}h@a3K@w!A?u%r$o_u{{Unlv$bpfJ9*s;zq>x-2#-OJl@>nDd zNkJwcsmOR_oShau8A(SbAu_|$(N81O5IJX_L1)XMlSN_{BBOi`J=;#tN56o~LFOX! zkOhbwPI5FaCA|b$jI4sai2mzLRjyOY<l`fQlQP)Z=6RiiAv5uk1x=P`r(Z>{Kwd$X zA##?B|8k_jX0kNGrGeEplkzJOS)Oia`JS>0S%cj1WBtWZDipW@y$*RDQHV4s`BLe6 zL^|RyDI=9Tw$m}WemD(CnU^b-kv#F2d}-&6VE!i~tn5^XEtSh9bOc&v#kw%5<LBIs zL$_e>Lu!#<6DcOW7b!yaAiELgu1WN6Rqs4srXD>9=d&Q8sMC4(D7UM9(d%Ehzq+5N z)!X}f>UoETw9`t}N{?r(`?JBSikGK-fb(zTwK4A;y}D%bdAI9{_95*<Lb-cV1HC+9 z9i4w|zoOdo;?gniox~vw2cG9R|2}`u%&f~zN@{#$=CqTd-waXvy*z&ITSL_6UY=K6 z)zoBfPZ)n)Tkq|OZ{++t|61L8oU0XcHIi}>A?-VabkMF2RW+-4+VdBkE>%4K{JLTU zD!_SPK$p6kQyXp{GSlp0JBFe)SBu5rzjOqLeQIP?kH0!!#naFI*$CC9DwSJ|Kk#H$ zrB5x@Ry+cnR|jNX-+lUA?EYtIqg@E&?4aeUukrgI4*sgG51oBn#rb&R1DtmSbg24t ztHAK!K5kcNXh<ky(_BS6d_33Pt`fDjx+k8$1YWOBv4*O84b+3Gc@0lkxbw95k^Iqb zXHJdqq8qH44Apr>z>G_4UuyE_uVLhbSvgBo9yJ6wZy1Q$9i7<Jcfof!gj)^~>TnIu z*Z}911kW6-`&HfA^={(O-mY79^JR#C(}eACkIMI@lkHS~LsUOCpaE*MD!&IcOSwcX zQK7X^YgKSfkAEZQU;IC=71p|WbMb7mGZ8Y5PsXcjwF!+Y<JF`0c>G+Nx+<0VtL>C? zg{VL3qI#)X($FY%Ti{(S{I%dwRa;8fK23N??(whixvPr~RUPi}G;|C{-#xYf=S2zM z|JnEped8yu-s%6{RsNUJ+|?=dLTyh&r-T2qc!2#rhMf0*xIXXCa|>igg@>5aW{t0+ zxAubEUE5!#^lvlW*V5IjfIIVU&vaE4+K3qX@5BB}`}V5Y<NVuzu$SWRXXt;7)DD5a zZO~jgHLISdAN%%1J<nKv#SvED+{IY_uH$MpR)F(%ijxK7V^S8}n#VNSyU2976CZzR z<nH*kGVO?V|8*S2D$k!5?+#ykKCDSqgZzlI4>MG{AM<V3HeVf<Vs|&JuHorKV4(U^ zV*hVfk3U0IZq=^Lp0T?c|I6O7yZLwf_<t<=-*tuG1;`e&_q!92e+?^ZJO7VWw!40J zpUo(o{rBg~-Oc`WHSUhbovL;a(d@iHB(1p5*OxLrUrHFTm*mPdj=yCwhCS*^ASdxU z71fxN`}Jq|a=>M|`#)>#-duW6E&-uYTm#x^yVRP-xF1z-qXL{ajC}dqrY3q#zkQaU zTr#b8ReBRoL)Dc3xq?(o6AD)1u8u_un|LBz0e@z3LrrTR-2N$iP1KJWRxMm}w1(=! zeKg~|9z@Ig{m90yf1I`)<O*(97Z%{WrQ~4t@_&EbW%x)OqO9{gL5*bm;m&JKR+sNf zFRwZAMI1Wd(2+06&szU}f8x!k8}Z{F3ovs!%FHZNTZ5RAc=bmR+p4B&+m!w{P;pJM znyD;NscHu*;F%o0MKFNq1+SlPA9V9Db+k8UOH=AUlnPih+x%-+&hHaney(n{4b5<1 z^5yoxUxhWJBJ1*Al+(=P<!a=-C1rC^!t1x@{^x$Y?LB*Xj#_=c$1i-$T=UO%Iag}j z=U@G~=I!yYuYmu3F6~HgUZpbRs{<eZSiX51MP(-FN)Hv(oDmLF(I_`f4Qb9Tg1um` zH)jo_)B&;roY$?Kng76_okq;p@AU6+b-g)L7N=q#VA7q}rOf`~N^<{Cq8f>xEK8W? zypZL!7jI@BZ+GbTJ2_T!9i2C`6z{q?q1Mq`FWhl(-raI4=HU_b%R0U5<h0YiU!cxE z!0}@DSVGTEH*#L!^1+dB)_iwj%Q*^luomd!h3bhG%&7Cqm$m72k3Btaq0DFp?p2r; z=cO<m2X8*P{p$uj%^aqT?|*7@i;9qT?N?u7h1>6j$@%%7GwRbBIq%?Z-+MSOhe?0A z)}<N~=Da~pD4huBE0GFr$+Q)!nJuaBA+@Zfr?uW~vH2I*9D9S>qxyGCXH;R<oveR= z^Nxgdt`;Zut-eoIRQ7flPaRZtE7r?-nL^U)=Oen7`pNc@=wk#u)z6QaOFnrZYP`BI z2(?hT9z<<a0iyP(&__`vsy|k^^J0j{PVG4Q+DAj0npJg_s+?CxeE#Q8uMF?k_$4z( zwy0J`)gDYQoOe#_zxQH`%WWRrZ90U>47XI}(o&4NBC5BFjrY`70j)g)__a=2YtM>C zqnBEHwD0fNC!SyY^bv~M;ZBs^--aknSLFjJJ5x<=gPNljw&A}1+okHCZ9K2IFBob` zu*a{F^G2M^JvGjrx}@a3QT7!JaLZ6fgFQK}PU?{muB5%x))1;mRL4ThP5ws+XQK1= zoq66%Tb_$PCoyC%Y$r9Ut>+}aocTK1Q{Rh|BS+<Tp?tn7>*i_T3DsUzv)fTosB%Ss z52};xxG!|x#d0m@#G?;BaPt+rH!RyP%hjxK0@<w4Kfrl;%kfR~YMu7(dBJvM;{4Qr zP$~>o<3)8<O(Ic)RA@(3qM9AUtjjB5<Rq`z`Q;x2W)4iCu-wSf%CqV!r2?FH$vn~T ztAUpXwCrNm9x5l}Iu+EOigu`IQODHa_MR|zd4YO3mV4IA1!`L~`j-Ng)6vtmF{5_g zTGRTm;#H46@JyWDPyP^HO;r!0Df<mUIn~enb6LWk>XS`}_8~ajuVQiFvOg@0dFrh4 z#NB!CPu))!b$e&SiK}<&8>tS9dzv~YYPvet88uhc>Oh1#@7(Fw_nFoqt9}lllx$=c z*?CP*v+N$Ne*MRNb<O(1<)q)K5-HlzdC$+xwf%c1ZTld_ZjiZh-UPJiml^XC3WAEv zoc1A6JQ{sPZRz0g3vk{k<oCeEpf8rZA}74W7JqSXsJ@hbIWHlq+a<i~w0BQR_=p3m z=)9(A_PQhYp7qLm*v_F}!&Pv&tl<jt_X|1KYBU&^^6{<sI}S5d5)SUW14eBN_jG9F zyvAwZsG6U*e)S2f%jOl|S~5Sb^{j8*Dx5()*|CDgiqJ;RE1m)y-OkQ`<6`NZzFKA5 z^Bv{OF2p(|?~Xb<#I4W?aNYoQt!Vy|0-x{Y+ij?I*-KLWWh>m(tkofZwI_mmMLW)% zptfW2uEx}3k(`AG)Z&NCAaFKcrdq=`umjVt(VW%hpPO>(y*MN2&ogCT+?l*9tJSqg zj{bk*QJXDN{hR0?`xyDYriXcQd9ShFTH_f!eZdbeH!?3%tQlWmhp3n+_HaEM`1wrE z>Vj$=n-nkl*{+;vu_mgXH>-GRg$n7)R<X5xPE^X_Cw6qXz8A4zZFzGAoh`<%3(aV^ z2Wl>P1FsH$IVJwK$p5I#%5oOKZo-D<@nv?$Iz()*aOcHcpEWvke&DX7>+I3eZRZtV zuh(2&JT33-&UOxmzqKpvqs;Yx)qGcrjj73b8`;8=XRDto`{EC?ruK5@Y4>Hi3hh=A zIqJh0Lcpw~e&q?ZtF@xW2?aH-lj&@hzta;d1_R8Ocd?XjRzI6IWA2_$Xjl$Px^#D} zZcst7gqIVaR@+`2FIJ7-6mT|J<*}RB1-o07XWQgvKg|iZI-?Rgdm08fZ~yYGe`ENy zMPFsvlS=g2_1L?|-W&EYXmvwX@8SuxCq_E=S664VnBJAHRMzOM?d{*ud9PTb9<!gm zblTm-?g2ymFM)q2+U?COLH|@&F3@)^o6A1$?;b}5thB(6r*+M&G@v`{XI^FPqoi&X z^QL;8a&;$0?8}bxwl%-GB?a#!6n<-ug1+8aJloZIzuA{Rv`MZ1`Aq}Yun_JPc}%WW zQe}YiLbTAN-)n9AW0BlKgokvLtIK#*-raNAwL!i82)A<lBDe?YO*OQKXSU0&68rJ! z?Ux>&4%}O`=;=8bFlmo<rl&`(`gG>~ubSVStb4L&RqbAMevxX83UFR0mQa*=<(E1? zwWUFZD7RIGYNYrTs}pg=<H<ehrCy%)jhy$XjXF_vug7=NZF2<XQ?rYE)HiqpIB!%d z3ihn8b@IqBc*qw3YTTyUN>#UtRPQ)X-vH;;YKQNQ{%vI6r6+LYf+jnnz1o4J-E^a7 zeEX?J{HKJE+|aho)n)kEH%1rtyxiOKp!-6xYSY_upZjXD>eriVrSp!q71!!)K61W5 z4qUmNqv9EAc5f=4qgJ3AIqz(%8arXZzWd%8jh{XCTl>^U)MPul9WzM<_F>MPSGYa@ zX7b4gqxu(9PA;|FXJo1YeOQ(!)v7++XLM4Zh}xs7_C+;R(S1EDc#3gKtSD7Io~qt^ z*Shn(>DzR7z0Rwzxn0FJF>h1D0-V>s*8j8VBL}yCB3~>cLc%2=s;E3_AY?bj(`2st zEuK3|GZMyf=l)(lEb~#czstHoR!{clS<YRECp+eyu?_FOBX6Pl$c?#O_}NE2DR%nh z0fd=dWSBDV>@6p!y5VZ&0ETGaGp|%vxOEP2-q^M!{Jq#C%l7=oo;1Q@j%p%b68=Yx zYV~8BthR&orNd=^wXnW71pN2!4R?3V?yvn##QyGamy6k!sxgQLD|nYdcP8_$8Up@b z-%9K$QQZgMsm~sVJ%DOzE8kx1Z$tmT^|{)pwnMmE{$-&WJ;c*jzDlz=Au+uHhU zl`UuMhadjEU%8iyJ8ju|TDbbp5bhG4*VNVeRlVG#)5+C$9Gn-~9oW(<w$aeYRd;f- zRQymD(0TJ+Y;d8^xU-FazT>c2&Bnp?e$k4do-7yt@Wg+ZC%4+^1b&Ui=k&0mEyFx@ zT@P*9X}_ay!CU`6^5}pK`>|zTf1B}K>OG_5&b^Oa2Ydba5evuk?9#|*xK+We)<w65 cdtPkEUs!S%dJZ*HITt-uie_*3jCl6{06tzGrvLx| diff --git a/package.json b/package.json index a92631902..09d3987af 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "simple-git-hooks": "^2.9.0", "size-limit": "^11", "tsc-alias": "^1.8.8", - "tslib": "^2.6.2", + "tslib": "^2.6.3", "typedoc": "^0.25.9", "vitest": "^1.3.1" }, diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 07a267323..664f2fd26 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -18,13 +18,16 @@ import { parseAbi, parseAbiParameters, toBytes, - toHex + toHex, + getContractAddress, + Hash, + pad } from "viem" -import type { IBundler } from "../bundler/IBundler.js" +import type { IBundler } from "../bundler/interfaces/IBundler.js" import { Bundler, - type UserOpResponse, - extractChainIdFromBundlerUrl + extractChainIdFromBundlerUrl, + GetUserOperationGasPriceReturnType } from "../bundler/index.js" import { BaseValidationModule, @@ -49,7 +52,8 @@ import { type StateOverrideSet, type UserOperationStruct, convertSigner, - getChain + getChain, + ModuleType } from "./" import { BaseSmartContractAccount } from "./BaseSmartContractAccount.js" import { AccountResolverAbi } from "./abi/AccountResolver.js" @@ -59,14 +63,19 @@ import { ADDRESS_RESOLVER_ADDRESS, ADDRESS_ZERO, BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, + CALLTYPE_SINGLE, DEFAULT_BICONOMY_FACTORY_ADDRESS, DEFAULT_ENTRYPOINT_ADDRESS, DEFAULT_FALLBACK_HANDLER_ADDRESS, ERC20_ABI, ERROR_MESSAGES, + EXECTYPE_DEFAULT, MAGIC_BYTES, + MODE_DEFAULT, + MODE_PAYLOAD, NATIVE_TOKEN_ALIAS, - PROXY_CREATION_CODE + PROXY_CREATION_CODE, + UNUSED } from "./utils/Constants.js" import type { BalancePayload, @@ -93,6 +102,8 @@ import { isValidRpcUrl, packUserOp } from "./utils/Utils.js" +import { getUserOperationHash } from "permissionless" +import { zeroPadBytes } from "ethers" type UserOperationKey = keyof UserOperationStruct @@ -101,7 +112,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001" - private index: number + private index: bigint private chainId: number @@ -122,7 +133,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { private scanForUpgradedAccountsFromV1!: boolean - private maxIndexForScan!: number + private maxIndexForScan!: bigint // Validation module responsible for account deployment initCode. This acts as a default authorization module. defaultValidationModule!: BaseValidationModule @@ -159,7 +170,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule - this.index = biconomySmartAccountConfig.index ?? 0 + this.index = biconomySmartAccountConfig.index ?? 0n this.chainId = biconomySmartAccountConfig.chainId this.bundler = biconomySmartAccountConfig.bundler this.implementationAddress = @@ -178,7 +189,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.paymaster = biconomySmartAccountConfig.paymaster } - this.bundler = biconomySmartAccountConfig.bundler + this.bundler = biconomySmartAccountConfig.bundler const defaultFallbackHandlerAddress = this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS @@ -208,9 +219,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ) }) - this.scanForUpgradedAccountsFromV1 = - biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false - this.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10 + this.scanForUpgradedAccountsFromV1 = biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false + this.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10n this.getAccountAddress() } @@ -273,15 +283,15 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } if (!chainId) { // Get it from bundler - if (biconomySmartAccountConfig.bundlerUrl) { - chainId = extractChainIdFromBundlerUrl( - biconomySmartAccountConfig.bundlerUrl - ) - } else if (biconomySmartAccountConfig.bundler) { - const bundlerUrlFromBundler = - biconomySmartAccountConfig.bundler.getBundlerUrl() - chainId = extractChainIdFromBundlerUrl(bundlerUrlFromBundler) - } + // if (biconomySmartAccountConfig.bundlerUrl) { + // chainId = extractChainIdFromBundlerUrl( + // biconomySmartAccountConfig.bundlerUrl + // ) + // } else if (biconomySmartAccountConfig.bundler) { + // const bundlerUrlFromBundler = + // biconomySmartAccountConfig.bundler.getBundlerUrl() + // chainId = extractChainIdFromBundlerUrl(bundlerUrlFromBundler) + // } } if (!chainId) { throw new Error("chainId required") @@ -330,13 +340,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // We check if chain ids match (skip this if chainId is passed by in the config) // This check is at the end of the function for cases when the signer is not passed in the config but a validation modules is and we get the signer from the validation module in this case - if (!biconomySmartAccountConfig.chainId) { - await compareChainIds( - biconomySmartAccountConfig.signer || resolvedSmartAccountSigner, - config, - false - ) - } + // if (!biconomySmartAccountConfig.chainId) { + // await compareChainIds( + // biconomySmartAccountConfig.signer || resolvedSmartAccountSigner, + // config, + // false + // ) + // } return new BiconomySmartAccountV2(config) } @@ -539,7 +549,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param withdrawalRequests - Array of withdrawal requests {@link WithdrawalRequest}. If withdrawal request is an empty array, it will transfer the balance of the native token. Using a paymaster will ensure no dust remains in the smart account. * @param buildUseropDto - Optional. {@link BuildUserOpOptions} * - * @returns Promise<UserOpResponse> - An object containing the status of the transaction. + * @returns Promise<Hash> - An object containing the status of the transaction. * * @example * import { createClient } from "viem" @@ -579,7 +589,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { withdrawalRequests?: WithdrawalRequest[] | null, defaultRecipient?: Hex | null, buildUseropDto?: BuildUserOpOptions - ): Promise<UserOpResponse> { + ): Promise<Hash> { const accountAddress = this.accountAddress ?? (await this.getAccountAddress()) @@ -695,39 +705,20 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { private async getCounterFactualAddressV2( params?: CounterFactualAddressParam ): Promise<Hex> { - const validationModule = - params?.validationModule ?? this.defaultValidationModule const index = params?.index ?? this.index try { - const initCalldata = encodeFunctionData({ - abi: BiconomyAccountAbi, - functionName: "init", - args: [ - this.defaultFallbackHandlerAddress, - validationModule.getAddress() as Hex, - (await validationModule.getInitData()) as Hex - ] + // TODO: Improve this by computing address off-chain instead of making rpc call + const publicClient = createPublicClient({ + chain: getChain(this.chainId), + transport: http() }) - const proxyCreationCodeHash = keccak256( - encodePacked( - ["bytes", "uint256"], - [PROXY_CREATION_CODE, BigInt(this.implementationAddress)] - ) - ) - - const salt = keccak256( - encodePacked( - ["bytes32", "uint256"], - [keccak256(initCalldata), BigInt(index)] - ) - ) - - const counterFactualAddress = getCreate2Address({ - from: this.factoryAddress, - salt: salt, - bytecodeHash: proxyCreationCodeHash + const counterFactualAddress = await publicClient.readContract({ + address: this.factoryAddress, + abi: parseAbi(["function computeAccountAddress(address, uint256) external view returns (address expectedAddress)"]), + functionName: "computeAccountAddress", + args: [await this.signer.getAddress(), index] }) return counterFactualAddress @@ -796,7 +787,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { if (params.moduleAddress && params.moduleSetupData) { const result = await addressResolver.read.resolveAddressesFlexibleForV2([ params.eoaAddress, - maxIndexForScan, + parseInt(maxIndexForScan.toString()), // TODO: SHOULD BE A BIGINT BUT REQUIRED TO BE A NUMBER FOR THE CONTRACT params.moduleAddress, params.moduleSetupData ]) @@ -809,7 +800,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { }) => smartAccountInfo.factoryVersion === "v1" && smartAccountInfo.currentVersion === "2.0.0" && - Number(smartAccountInfo.deploymentIndex.toString()) === params.index + smartAccountInfo.deploymentIndex === params.index ) if (desiredV1Account) { @@ -830,10 +821,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { if (await this.isAccountDeployed()) return "0x" - return concatHex([ - this.factoryAddress as Hex, - (await this.getFactoryData()) ?? "0x" - ]) + const factoryData = encodeFunctionData({ + abi: parseAbi(["function createAccount(address eoaOwner, uint256 index) external payable returns (address payable)"]), + functionName: "createAccount", + args: [await this.signer.getAddress(), this.index] + }) + + return concatHex([this.factoryAddress, factoryData]) } /** @@ -845,10 +839,23 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { */ async encodeExecute(to: Hex, value: bigint, data: Hex): Promise<Hex> { // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; + const mode = concatHex([ + EXECTYPE_DEFAULT, + CALLTYPE_SINGLE, + UNUSED, + MODE_DEFAULT, + MODE_PAYLOAD + ]) + + const executionCalldata = encodePacked( + ["address", "uint256", "bytes"], + [to, value, data] + ) + // Encode a simple call return encodeFunctionData({ - abi: BiconomyAccountAbi, - functionName: "execute_ncC", - args: [to, value, data] + abi: parseAbi(["function execute(bytes32 mode, bytes calldata executionCalldata) external"]), + functionName: "execute", + args: [mode, executionCalldata] }) } @@ -909,11 +916,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { userOp: Partial<UserOperationStruct>, requiredFields: UserOperationKey[] ): boolean { - for (const field of requiredFields) { - if (isNullOrUndefined(userOp[field])) { - throw new Error(`${String(field)} is missing in the UserOp`) - } - } + // for (const field of requiredFields) { + // if (isNullOrUndefined(userOp[field])) { + // throw new Error(`${String(field)} is missing in the UserOp`) + // } + // } return true } @@ -924,19 +931,20 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const params = { ...(this.sessionData ? this.sessionData : {}), ..._params } this.isActiveValidationModuleDefined() - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData" - ] - this.validateUserOp(userOp, requiredFields) + // TODO REMOVE COMMENT AND CHECK FOR PIMLICO USER OP FIELDS + // const requiredFields: UserOperationKey[] = [ + // "sender", + // "nonce", + // "initCode", + // "callData", + // "callGasLimit", + // "verificationGasLimit", + // "preVerificationGas", + // "maxFeePerGas", + // "maxPriorityFeePerGas", + // "paymasterAndData" + // ] + // this.validateUserOp(userOp, requiredFields) const userOpHash = await this.getUserOpHash(userOp) const moduleSig = (await this.activeValidationModule.signUserOpHash( @@ -944,12 +952,12 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { params )) as Hex - const signatureWithModuleAddress = this.getSignatureWithModuleAddress( - moduleSig, - this.activeValidationModule.getAddress() as Hex - ) + // const signatureWithModuleAddress = this.getSignatureWithModuleAddress( + // moduleSig, + // this.activeValidationModule.getAddress() as Hex + // ) - userOp.signature = signatureWithModuleAddress + userOp.signature = moduleSig return userOp as UserOperationStruct } @@ -959,83 +967,84 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ): Hex { const moduleAddressToUse = moduleAddress ?? (this.activeValidationModule.getAddress() as Hex) + console.log("moduleAddressToUse: ", moduleAddressToUse); return encodeAbiParameters(parseAbiParameters("bytes, address"), [ moduleSignature, moduleAddressToUse ]) } - public async getPaymasterUserOp( - userOp: Partial<UserOperationStruct>, - paymasterServiceData: PaymasterUserOperationDto - ): Promise<Partial<UserOperationStruct>> { - if (paymasterServiceData.mode === PaymasterMode.SPONSORED) { - return this.getPaymasterAndData(userOp, paymasterServiceData) - } - if (paymasterServiceData.mode === PaymasterMode.ERC20) { - if (paymasterServiceData?.feeQuote) { - const { feeQuote, spender, maxApproval = false } = paymasterServiceData - Logger.log("there is a feeQuote: ", JSON.stringify(feeQuote, null, 2)) - if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED) - if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH) - if ( - paymasterServiceData.skipPatchCallData && - paymasterServiceData.skipPatchCallData === true - ) { - return this.getPaymasterAndData(userOp, { - ...paymasterServiceData, - feeTokenAddress: feeQuote.tokenAddress - }) - } - const partialUserOp = await this.buildTokenPaymasterUserOp(userOp, { - ...paymasterServiceData, - spender, - maxApproval, - feeQuote - }) - return this.getPaymasterAndData(partialUserOp, { - ...paymasterServiceData, - feeTokenAddress: feeQuote.tokenAddress, - calculateGasLimits: paymasterServiceData.calculateGasLimits ?? true // Always recommended and especially when using token paymaster - }) - } - if (paymasterServiceData?.preferredToken) { - const { preferredToken } = paymasterServiceData - Logger.log("there is a preferred token: ", preferredToken) - const feeQuotesResponse = await this.getPaymasterFeeQuotesOrData( - userOp, - paymasterServiceData - ) - const spender = feeQuotesResponse.tokenPaymasterAddress - const feeQuote = feeQuotesResponse.feeQuotes?.[0] - if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED) - if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH) - return this.getPaymasterUserOp(userOp, { - ...paymasterServiceData, - feeQuote, - spender - }) // Recursively call getPaymasterUserOp with the feeQuote - } - Logger.log( - "ERC20 mode without feeQuote or preferredToken provided. Passing through unchanged." - ) - return userOp - } - throw new Error("Invalid paymaster mode") - } - - private async getPaymasterAndData( - userOp: Partial<UserOperationStruct>, - paymasterServiceData: PaymasterUserOperationDto - ): Promise<Partial<UserOperationStruct>> { - const paymaster = this - .paymaster as IHybridPaymaster<PaymasterUserOperationDto> - const paymasterData = await paymaster.getPaymasterAndData( - userOp, - paymasterServiceData - ) - return { ...userOp, ...paymasterData } - } + // public async getPaymasterUserOp( + // userOp: Partial<UserOperationStruct>, + // paymasterServiceData: PaymasterUserOperationDto + // ): Promise<Partial<UserOperationStruct>> { + // if (paymasterServiceData.mode === PaymasterMode.SPONSORED) { + // return this.getPaymasterAndData(userOp, paymasterServiceData) + // } + // if (paymasterServiceData.mode === PaymasterMode.ERC20) { + // if (paymasterServiceData?.feeQuote) { + // const { feeQuote, spender, maxApproval = false } = paymasterServiceData + // Logger.log("there is a feeQuote: ", JSON.stringify(feeQuote, null, 2)) + // if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED) + // if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH) + // if ( + // paymasterServiceData.skipPatchCallData && + // paymasterServiceData.skipPatchCallData === true + // ) { + // return this.getPaymasterAndData(userOp, { + // ...paymasterServiceData, + // feeTokenAddress: feeQuote.tokenAddress + // }) + // } + // const partialUserOp = await this.buildTokenPaymasterUserOp(userOp, { + // ...paymasterServiceData, + // spender, + // maxApproval, + // feeQuote + // }) + // return this.getPaymasterAndData(partialUserOp, { + // ...paymasterServiceData, + // feeTokenAddress: feeQuote.tokenAddress, + // calculateGasLimits: paymasterServiceData.calculateGasLimits ?? true // Always recommended and especially when using token paymaster + // }) + // } + // if (paymasterServiceData?.preferredToken) { + // const { preferredToken } = paymasterServiceData + // Logger.log("there is a preferred token: ", preferredToken) + // const feeQuotesResponse = await this.getPaymasterFeeQuotesOrData( + // userOp, + // paymasterServiceData + // ) + // const spender = feeQuotesResponse.tokenPaymasterAddress + // const feeQuote = feeQuotesResponse.feeQuotes?.[0] + // if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED) + // if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH) + // return this.getPaymasterUserOp(userOp, { + // ...paymasterServiceData, + // feeQuote, + // spender + // }) // Recursively call getPaymasterUserOp with the feeQuote + // } + // Logger.log( + // "ERC20 mode without feeQuote or preferredToken provided. Passing through unchanged." + // ) + // return userOp + // } + // throw new Error("Invalid paymaster mode") + // } + + // private async getPaymasterAndData( + // userOp: Partial<UserOperationStruct>, + // paymasterServiceData: PaymasterUserOperationDto + // ): Promise<Partial<UserOperationStruct>> { + // const paymaster = this + // .paymaster as IHybridPaymaster<PaymasterUserOperationDto> + // const paymasterData = await paymaster.getPaymasterAndData( + // userOp, + // paymasterServiceData + // ) + // return { ...userOp, ...paymasterData } + // } private async getPaymasterFeeQuotesOrData( userOp: Partial<UserOperationStruct>, @@ -1182,14 +1191,14 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param userOp * @param params * @description This function will take a user op as an input, sign it with the owner key, and send it to the bundler. - * @returns Promise<UserOpResponse> + * @returns Promise<Hash> * Sends a user operation * * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#send-useroperation * * @param userOp Partial<{@link UserOperationStruct}> the userOp params to be sent. * @param params {@link SendUserOpParams}. - * @returns Promise<{@link UserOpResponse}> that you can use to track the user operation. + * @returns Promise<{@link Hash}> that you can use to track the user operation. * * @example * import { createClient } from "viem" @@ -1224,11 +1233,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async sendUserOp( userOp: Partial<UserOperationStruct>, params?: SendUserOpParams - ): Promise<UserOpResponse> { + ): Promise<Hash> { // biome-ignore lint/performance/noDelete: <explanation> delete userOp.signature const userOperation = await this.signUserOp(userOp, params) + console.log(userOp, "userOp 213"); + const bundlerResponse = await this.sendSignedUserOp( userOperation, params?.simulationType @@ -1247,26 +1258,27 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async sendSignedUserOp( userOp: UserOperationStruct, simulationType?: SimulationType - ): Promise<UserOpResponse> { - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData", - "signature" - ] - this.validateUserOp(userOp, requiredFields) + ): Promise<Hash> { + // TODO REMOVE COMMENT AND CHECK FOR PIMLICO USER OP FIELDS + // const requiredFields: UserOperationKey[] = [ + // "sender", + // "nonce", + // "initCode", + // "callData", + // "callGasLimit", + // "verificationGasLimit", + // "preVerificationGas", + // "maxFeePerGas", + // "maxPriorityFeePerGas", + // "paymasterAndData", + // "signature" + // ] + // this.validateUserOp(userOp, requiredFields) if (!this.bundler) throw new Error("Bundler is not provided") - Logger.warn( - "userOp being sent to the bundler", - JSON.stringify(userOp, null, 2) - ) + // Logger.warn( + // "userOp being sent to the bundler", + // JSON.stringify(userOp, null, 2) + // ) const bundlerResponse = await this.bundler.sendUserOp( userOp, simulationType @@ -1275,7 +1287,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } async getUserOpHash(userOp: Partial<UserOperationStruct>): Promise<Hex> { - const userOpHash = keccak256(packUserOp(userOp, true) as Hex) + const packedUserOp = packUserOp(userOp, true) + console.log(this.entryPoint.address, BigInt(this.chainId), "ARGUMENTS FOR USER OP HASH"); + const userOpHash = keccak256(packedUserOp as Hex) const enc = encodeAbiParameters( parseAbiParameters("bytes32, address, uint256"), [userOpHash, this.entryPoint.address, BigInt(this.chainId)] @@ -1298,69 +1312,53 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const finalUserOp = userOp - // Making call to bundler to get gas estimations for userOp - const { - callGasLimit, - verificationGasLimit, - preVerificationGas, - maxFeePerGas, - maxPriorityFeePerGas - } = await this.bundler.estimateUserOpGas(userOp, stateOverrideSet) // if neither user sent gas fee nor the bundler, estimate gas from provider if ( !userOp.maxFeePerGas && - !userOp.maxPriorityFeePerGas && - (!maxFeePerGas || !maxPriorityFeePerGas) + !userOp.maxPriorityFeePerGas ) { + console.log("Using provider to estimate gas"); const feeData = await this.provider.estimateFeesPerGas() if (feeData.maxFeePerGas?.toString()) { - finalUserOp.maxFeePerGas = `0x${feeData.maxFeePerGas.toString( - 16 - )}` as Hex + finalUserOp.maxFeePerGas = feeData.maxFeePerGas } else if (feeData.gasPrice?.toString()) { - finalUserOp.maxFeePerGas = `0x${feeData.gasPrice.toString(16)}` as Hex + finalUserOp.maxFeePerGas = feeData.gasPrice } else { - finalUserOp.maxFeePerGas = `0x${( - await this.provider.getGasPrice() - ).toString(16)}` as Hex + finalUserOp.maxFeePerGas = await this.provider.getGasPrice() } if (feeData.maxPriorityFeePerGas?.toString()) { - finalUserOp.maxPriorityFeePerGas = - `0x${feeData.maxPriorityFeePerGas?.toString()}` as Hex + finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas } else if (feeData.gasPrice?.toString()) { - finalUserOp.maxPriorityFeePerGas = toHex( - Number(feeData.gasPrice?.toString()) - ) + finalUserOp.maxPriorityFeePerGas = feeData.gasPrice ?? 0n } else { - finalUserOp.maxPriorityFeePerGas = `0x${( - await this.provider.getGasPrice() - ).toString(16)}` as Hex + finalUserOp.maxPriorityFeePerGas = await this.provider.getGasPrice() } - } else { - finalUserOp.maxFeePerGas = - toHex(Number(maxFeePerGas)) ?? userOp.maxFeePerGas - finalUserOp.maxPriorityFeePerGas = - toHex(Number(maxPriorityFeePerGas)) ?? userOp.maxPriorityFeePerGas - } - finalUserOp.verificationGasLimit = - toHex(Number(verificationGasLimit)) ?? userOp.verificationGasLimit - finalUserOp.callGasLimit = - toHex(Number(callGasLimit)) ?? userOp.callGasLimit - finalUserOp.preVerificationGas = - toHex(Number(preVerificationGas)) ?? userOp.preVerificationGas - if (!finalUserOp.paymasterAndData) { - finalUserOp.paymasterAndData = "0x" - } + } + + const { + callGasLimit, + verificationGasLimit, + preVerificationGas, + } = await this.bundler.estimateUserOpGas(userOp, stateOverrideSet) + // COMMENTED because pimlico bundler does not estimate maxFeePerGas and maxPriorityFeePerGas + // else { + // finalUserOp.maxFeePerGas = + // toHex(Number(maxFeePerGas)) ?? userOp.maxFeePerGas + // finalUserOp.maxPriorityFeePerGas = + // toHex(Number(maxPriorityFeePerGas)) ?? userOp.maxPriorityFeePerGas + // } + finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit + finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit + finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas return finalUserOp } - override async getNonce(nonceKey?: number): Promise<bigint> { - const nonceSpace = nonceKey ?? 0 + override async getNonce(): Promise<bigint> { try { const address = await this.getAddress() - return await this.entryPoint.read.getNonce([address, BigInt(nonceSpace)]) + return await this.entryPoint.read.getNonce([address, BigInt(zeroPadBytes(this.activeValidationModule.getAddress(), 24))]) } catch (e) { return BigInt(0) } @@ -1368,14 +1366,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { private async getBuildUserOpNonce( nonceOptions: NonceOptions | undefined - ): Promise<BigNumberish> { + ): Promise<bigint> { let nonce = BigInt(0) try { if (nonceOptions?.nonceOverride) { nonce = BigInt(nonceOptions?.nonceOverride) } else { - const _nonceSpace = nonceOptions?.nonceKey ?? 0 - nonce = await this.getNonce(_nonceSpace) + nonce = await this.getNonce() } } catch (error) { // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account @@ -1391,7 +1388,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param newOwner The address of the new owner. * @param moduleAddress {@link TransferOwnershipCompatibleModule} The address of the validation module (ECDSA Ownership Module or Multichain Validation Module). * @param buildUseropDto {@link BuildUserOpOptions}. Optional parameter - * @returns A Promise that resolves to a UserOpResponse or rejects with an Error. + * @returns A Promise that resolves to a Hash or rejects with an Error. * @description This function will transfer ownership of the smart account to a new owner. If you use session key manager module, after transferring the ownership * you will need to re-create a session for the smart account with the new owner (signer) and specify "accountAddress" in "createSmartAccountClient" function. * @example @@ -1430,7 +1427,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { newOwner: Address, moduleAddress: TransferOwnershipCompatibleModule, buildUseropDto?: BuildUserOpOptions - ): Promise<UserOpResponse> { + ): Promise<Hash> { const encodedCall = encodeFunctionData({ abi: parseAbi(["function transferOwnership(address newOwner) public"]), functionName: "transferOwnership", @@ -1440,7 +1437,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { to: moduleAddress, data: encodedCall } - const userOpResponse: UserOpResponse = await this.sendTransaction( + const userOpResponse: Hash = await this.sendTransaction( transaction, buildUseropDto ) @@ -1454,7 +1451,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * @param manyOrOneTransactions Array of {@link Transaction} to be batched and sent. Can also be a single {@link Transaction}. * @param buildUseropDto {@link BuildUserOpOptions}. - * @returns Promise<{@link UserOpResponse}> that you can use to track the user operation. + * @returns Promise<{@link Hash}> that you can use to track the user operation. * * @example * import { createClient } from "viem" @@ -1521,13 +1518,14 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async sendTransaction( manyOrOneTransactions: Transaction | Transaction[], buildUseropDto?: BuildUserOpOptions - ): Promise<UserOpResponse> { + ): Promise<Hash> { const userOp = await this.buildUserOp( Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions : [manyOrOneTransactions], buildUseropDto ) + return this.sendUserOp(userOp, { simulationType: buildUseropDto?.simulationType, ...buildUseropDto?.params @@ -1588,7 +1586,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const dummySignatureFetchPromise = this.getDummySignatures( buildUseropDto?.params ) - const [nonceFromFetch, initCode, signature] = await Promise.all([ this.getBuildUserOpNonce(buildUseropDto?.nonceOptions), initCodeFetchPromise, @@ -1608,163 +1605,171 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } } + const factoryData = await this.getFactoryData(); let userOp: Partial<UserOperationStruct> = { sender: (await this.getAccountAddress()) as Hex, - nonce: toHex(nonceFromFetch), - initCode, + nonce: nonceFromFetch, + factoryData, + factory: await this.isAccountDeployed() ? undefined : this.factoryAddress, callData } - + console.log(userOp, "userOp"); + // for this Smart Account current validation module dummy signature will be used to estimate gas userOp.signature = signature - userOp.paymasterAndData = buildUseropDto?.dummyPndOverride ?? "0x" - - if ( - buildUseropDto?.paymasterServiceData && - buildUseropDto?.paymasterServiceData.mode === PaymasterMode.SPONSORED && - this.paymaster instanceof BiconomyPaymaster - ) { - const gasFeeValues = await this.bundler?.getGasFeeValues() - - // populate gasfee values and make a call to paymaster - userOp.maxFeePerGas = gasFeeValues?.maxFeePerGas as Hex - userOp.maxPriorityFeePerGas = gasFeeValues?.maxPriorityFeePerGas as Hex - - if (buildUseropDto.gasOffset) { - userOp = await this.estimateUserOpGas(userOp) - - const { - verificationGasLimitOffsetPct, - preVerificationGasOffsetPct, - callGasLimitOffsetPct, - maxFeePerGasOffsetPct, - maxPriorityFeePerGasOffsetPct - } = buildUseropDto.gasOffset - userOp.verificationGasLimit = toHex( - Number.parseInt( - ( - Number(userOp.verificationGasLimit ?? 0) * - convertToFactor(verificationGasLimitOffsetPct) - ).toString() - ) - ) - userOp.preVerificationGas = toHex( - Number.parseInt( - ( - Number(userOp.preVerificationGas ?? 0) * - convertToFactor(preVerificationGasOffsetPct) - ).toString() - ) - ) - userOp.callGasLimit = toHex( - Number.parseInt( - ( - Number(userOp.callGasLimit ?? 0) * - convertToFactor(callGasLimitOffsetPct) - ).toString() - ) - ) - userOp.maxFeePerGas = toHex( - Number.parseInt( - ( - Number(userOp.maxFeePerGas ?? 0) * - convertToFactor(maxFeePerGasOffsetPct) - ).toString() - ) - ) - userOp.maxPriorityFeePerGas = toHex( - Number.parseInt( - ( - Number(userOp.maxPriorityFeePerGas ?? 0) * - convertToFactor(maxPriorityFeePerGasOffsetPct) - ).toString() - ) - ) - - userOp = await this.getPaymasterUserOp(userOp, { - ...buildUseropDto.paymasterServiceData, - calculateGasLimits: false - }) - return userOp - } - if (buildUseropDto.paymasterServiceData.calculateGasLimits === false) { - userOp = await this.estimateUserOpGas(userOp) - } - - userOp = await this.getPaymasterUserOp( - userOp, - buildUseropDto.paymasterServiceData - ) - - return userOp - } + // userOp.paymasterAndData = buildUseropDto?.dummyPndOverride ?? "0x" + + // if ( + // buildUseropDto?.paymasterServiceData && + // buildUseropDto?.paymasterServiceData.mode === PaymasterMode.SPONSORED && + // this.paymaster instanceof BiconomyPaymaster + // ) { + // const gasFeeValues = await this.bundler?.getGasFeeValues() + + // // populate gasfee values and make a call to paymaster + // userOp.maxFeePerGas = gasFeeValues?.standard.maxFeePerGas + // userOp.maxPriorityFeePerGas = gasFeeValues?.standard.maxPriorityFeePerGas + + // if (buildUseropDto.gasOffset) { + // userOp = await this.estimateUserOpGas(userOp) + + // const { + // verificationGasLimitOffsetPct, + // preVerificationGasOffsetPct, + // callGasLimitOffsetPct, + // maxFeePerGasOffsetPct, + // maxPriorityFeePerGasOffsetPct + // } = buildUseropDto.gasOffset + // userOp.verificationGasLimit = toHex( + // Number.parseInt( + // ( + // Number(userOp.verificationGasLimit ?? 0) * + // convertToFactor(verificationGasLimitOffsetPct) + // ).toString() + // ) + // ) + // userOp.preVerificationGas = toHex( + // Number.parseInt( + // ( + // Number(userOp.preVerificationGas ?? 0) * + // convertToFactor(preVerificationGasOffsetPct) + // ).toString() + // ) + // ) + // userOp.callGasLimit = toHex( + // Number.parseInt( + // ( + // Number(userOp.callGasLimit ?? 0) * + // convertToFactor(callGasLimitOffsetPct) + // ).toString() + // ) + // ) + // userOp.maxFeePerGas = toHex( + // Number.parseInt( + // ( + // Number(userOp.maxFeePerGas ?? 0) * + // convertToFactor(maxFeePerGasOffsetPct) + // ).toString() + // ) + // ) + // userOp.maxPriorityFeePerGas = toHex( + // Number.parseInt( + // ( + // Number(userOp.maxPriorityFeePerGas ?? 0) * + // convertToFactor(maxPriorityFeePerGasOffsetPct) + // ).toString() + // ) + // ) + + // userOp = await this.getPaymasterUserOp(userOp, { + // ...buildUseropDto.paymasterServiceData, + // calculateGasLimits: false + // }) + // return userOp + // } + // if (buildUseropDto.paymasterServiceData.calculateGasLimits === false) { + // userOp = await this.estimateUserOpGas(userOp) + // } + + // userOp = await this.getPaymasterUserOp( + // userOp, + // buildUseropDto.paymasterServiceData + // ) + + // return userOp + // } + + // get gas fee values from bundler + const gasFeeValues: GetUserOperationGasPriceReturnType = await this.bundler?.getGasFeeValues()! + userOp.maxFeePerGas = gasFeeValues?.fast.maxFeePerGas + userOp.maxPriorityFeePerGas = gasFeeValues?.fast.maxPriorityFeePerGas userOp = await this.estimateUserOpGas(userOp) - if (buildUseropDto?.gasOffset) { - if (buildUseropDto?.paymasterServiceData) { - userOp = await this.getPaymasterUserOp(userOp, { - ...buildUseropDto.paymasterServiceData, - calculateGasLimits: false - }) - } - - const { - verificationGasLimitOffsetPct, - preVerificationGasOffsetPct, - callGasLimitOffsetPct, - maxFeePerGasOffsetPct, - maxPriorityFeePerGasOffsetPct - } = buildUseropDto.gasOffset - userOp.verificationGasLimit = toHex( - Number.parseInt( - ( - Number(userOp.verificationGasLimit ?? 0) * - convertToFactor(verificationGasLimitOffsetPct) - ).toString() - ) - ) - userOp.preVerificationGas = toHex( - Number.parseInt( - ( - Number(userOp.preVerificationGas ?? 0) * - convertToFactor(preVerificationGasOffsetPct) - ).toString() - ) - ) - userOp.callGasLimit = toHex( - Number.parseInt( - ( - Number(userOp.callGasLimit ?? 0) * - convertToFactor(callGasLimitOffsetPct) - ).toString() - ) - ) - userOp.maxFeePerGas = toHex( - Number.parseInt( - ( - Number(userOp.maxFeePerGas ?? 0) * - convertToFactor(maxFeePerGasOffsetPct) - ).toString() - ) - ) - userOp.maxPriorityFeePerGas = toHex( - Number.parseInt( - ( - Number(userOp.maxPriorityFeePerGas ?? 0) * - convertToFactor(maxPriorityFeePerGasOffsetPct) - ).toString() - ) - ) - - return userOp - } - if (buildUseropDto?.paymasterServiceData) { - userOp = await this.getPaymasterUserOp( - userOp, - buildUseropDto.paymasterServiceData - ) - } + // if (buildUseropDto?.gasOffset) { + // if (buildUseropDto?.paymasterServiceData) { + // userOp = await this.getPaymasterUserOp(userOp, { + // ...buildUseropDto.paymasterServiceData, + // calculateGasLimits: false + // }) + // } + + // const { + // verificationGasLimitOffsetPct, + // preVerificationGasOffsetPct, + // callGasLimitOffsetPct, + // maxFeePerGasOffsetPct, + // maxPriorityFeePerGasOffsetPct + // } = buildUseropDto.gasOffset + // userOp.verificationGasLimit = toHex( + // Number.parseInt( + // ( + // Number(userOp.verificationGasLimit ?? 0) * + // convertToFactor(verificationGasLimitOffsetPct) + // ).toString() + // ) + // ) + // userOp.preVerificationGas = toHex( + // Number.parseInt( + // ( + // Number(userOp.preVerificationGas ?? 0) * + // convertToFactor(preVerificationGasOffsetPct) + // ).toString() + // ) + // ) + // userOp.callGasLimit = toHex( + // Number.parseInt( + // ( + // Number(userOp.callGasLimit ?? 0) * + // convertToFactor(callGasLimitOffsetPct) + // ).toString() + // ) + // ) + // userOp.maxFeePerGas = toHex( + // Number.parseInt( + // ( + // Number(userOp.maxFeePerGas ?? 0) * + // convertToFactor(maxFeePerGasOffsetPct) + // ).toString() + // ) + // ) + // userOp.maxPriorityFeePerGas = toHex( + // Number.parseInt( + // ( + // Number(userOp.maxPriorityFeePerGas ?? 0) * + // convertToFactor(maxPriorityFeePerGasOffsetPct) + // ).toString() + // ) + // ) + + // return userOp + // } + // if (buildUseropDto?.paymasterServiceData) { + // userOp = await this.getPaymasterUserOp( + // userOp, + // buildUseropDto.paymasterServiceData + // ) + // } return userOp } @@ -1919,17 +1924,12 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise<Hex> { this.isActiveValidationModuleDefined() - const moduleSig = (await this.activeValidationModule.signUserOpHash( + const moduleSig = (await this.signUserOpHash( userOpHash, params )) as Hex - const signatureWithModuleAddress = encodeAbiParameters( - parseAbiParameters("bytes, address"), - [moduleSig, this.activeValidationModule.getAddress() as Hex] - ) - - return signatureWithModuleAddress + return moduleSig; } /** @@ -1940,7 +1940,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * as the deployment will alternatively be bundled with the first user operation. * * @param buildUseropDto {@link BuildUserOpOptions}. - * @returns Promise<{@link UserOpResponse}> that you can use to track the user operation. + * @returns Promise<{@link Hash}> that you can use to track the user operation. * @error Throws an error if the account has already been deployed. * @error Throws an error if the account has not enough native token balance to deploy, if not using a paymaster. * @@ -1978,7 +1978,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { */ public async deploy( buildUseropDto?: BuildUserOpOptions - ): Promise<UserOpResponse> { + ): Promise<Hash> { const accountAddress = this.accountAddress ?? (await this.getAccountAddress()) @@ -2017,13 +2017,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.isDefaultValidationModuleDefined() return encodeFunctionData({ - abi: BiconomyFactoryAbi, - functionName: "deployCounterFactualAccount", - args: [ - this.defaultValidationModule.getAddress() as Hex, - (await this.defaultValidationModule.getInitData()) as Hex, - BigInt(this.index) - ] + abi: parseAbi(["function createAccount(address eoaOwner, uint256 index) external payable returns (address payable)"]), + functionName: "createAccount", + args: [await this.signer.getAddress(), this.index] }) } @@ -2083,7 +2079,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { }) } - async enableModule(moduleAddress: Hex): Promise<UserOpResponse> { + async enableModule(moduleAddress: Hex): Promise<Hash> { const tx: Transaction = await this.getEnableModuleData(moduleAddress) const partialUserOp = await this.buildUserOp([tx]) return this.sendUserOp(partialUserOp) @@ -2123,7 +2119,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async disableModule( prevModule: Hex, moduleAddress: Hex - ): Promise<UserOpResponse> { + ): Promise<Hash> { const tx: Transaction = await this.getDisableModuleData( prevModule, moduleAddress @@ -2149,20 +2145,20 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return tx } - async isModuleEnabled(moduleAddress: Hex): Promise<boolean> { + async isModuleEnabled(moduleAddress: Hex): Promise<any> { const accountContract = await this._getAccountContract() - return accountContract.read.isModuleEnabled([moduleAddress]) + return await accountContract.read.isModuleInstalled([ModuleType.Validation, moduleAddress, toHex("0x")]) } // Review - async getAllModules(pageSize?: number): Promise<Array<string>> { - const _pageSize = pageSize ?? 100 - const accountContract = await this._getAccountContract() - const result = await accountContract.read.getModulesPaginated([ - this.SENTINEL_MODULE as Hex, - BigInt(_pageSize) - ]) - const modules: Array<string> = result[0] as Array<string> - return modules - } + // async getAllModules(pageSize?: number): Promise<Array<string>> { + // const _pageSize = pageSize ?? 100 + // const accountContract = await this._getAccountContract() + // const result = await accountContract.read.getModulesPaginated([ + // this.SENTINEL_MODULE as Hex, + // BigInt(_pageSize) + // ]) + // const modules: Array<string> = result[0] as Array<string> + // return modules + // } } diff --git a/src/account/abi/SmartAccount.ts b/src/account/abi/SmartAccount.ts index 541267158..96d7bd990 100644 --- a/src/account/abi/SmartAccount.ts +++ b/src/account/abi/SmartAccount.ts @@ -1,636 +1,1061 @@ export const BiconomyAccountAbi = [ { - inputs: [ + "inputs": [ { - internalType: "contract IEntryPoint", - name: "anEntryPoint", - type: "address" + "internalType": "address", + "name": "anEntryPoint", + "type": "address" } ], - stateMutability: "nonpayable", - type: "constructor" + "stateMutability": "nonpayable", + "type": "constructor" }, - { inputs: [], name: "AlreadyInitialized", type: "error" }, - { inputs: [], name: "BaseImplementationCannotBeZero", type: "error" }, { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "CallerIsNotAnEntryPoint", - type: "error" + "inputs": [], + "name": "AccountAccessUnauthorized", + "type": "error" }, { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "CallerIsNotEntryPoint", - type: "error" + "inputs": [], + "name": "CannotRemoveLastValidator", + "type": "error" }, { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "CallerIsNotEntryPointOrOwner", - type: "error" + "inputs": [], + "name": "EntryPointCanNotBeZero", + "type": "error" }, { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "CallerIsNotEntryPointOrSelf", - type: "error" + "inputs": [], + "name": "ExecutionFailed", + "type": "error" }, { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "CallerIsNotOwner", - type: "error" + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "FallbackAlreadyInstalledForSelector", + "type": "error" }, { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "CallerIsNotSelf", - type: "error" + "inputs": [], + "name": "FallbackHandlerUninstallFailed", + "type": "error" }, - { inputs: [], name: "DelegateCallsOnly", type: "error" }, - { inputs: [], name: "EntryPointCannotBeZero", type: "error" }, - { inputs: [], name: "HandlerCannotBeZero", type: "error" }, { - inputs: [ + "inputs": [ { - internalType: "address", - name: "implementationAddress", - type: "address" + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" } ], - name: "InvalidImplementation", - type: "error" + "name": "FallbackNotInstalledForSelector", + "type": "error" }, { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "MixedAuthFail", - type: "error" + "inputs": [], + "name": "FallbackSelectorForbidden", + "type": "error" }, { - inputs: [{ internalType: "address", name: "module", type: "address" }], - name: "ModuleAlreadyEnabled", - type: "error" + "inputs": [ + { + "internalType": "address", + "name": "currentHook", + "type": "address" + } + ], + "name": "HookAlreadyInstalled", + "type": "error" }, { - inputs: [ - { internalType: "address", name: "expectedModule", type: "address" }, - { internalType: "address", name: "returnedModule", type: "address" }, - { internalType: "address", name: "prevModule", type: "address" } - ], - name: "ModuleAndPrevModuleMismatch", - type: "error" + "inputs": [], + "name": "HookPostCheckFailed", + "type": "error" }, { - inputs: [{ internalType: "address", name: "module", type: "address" }], - name: "ModuleCannotBeZeroOrSentinel", - type: "error" + "inputs": [], + "name": "ImplementationIsNotAContract", + "type": "error" }, { - inputs: [{ internalType: "address", name: "module", type: "address" }], - name: "ModuleNotEnabled", - type: "error" + "inputs": [], + "name": "InnerCallFailed", + "type": "error" }, - { inputs: [], name: "ModulesAlreadyInitialized", type: "error" }, - { inputs: [], name: "ModulesSetupExecutionFailed", type: "error" }, - { inputs: [], name: "OwnerCanNotBeSelf", type: "error" }, - { inputs: [], name: "OwnerCannotBeZero", type: "error" }, - { inputs: [], name: "OwnerProvidedIsSame", type: "error" }, - { inputs: [], name: "TransferToZeroAddressAttempt", type: "error" }, { - inputs: [ - { internalType: "uint256", name: "destLength", type: "uint256" }, - { internalType: "uint256", name: "valueLength", type: "uint256" }, - { internalType: "uint256", name: "funcLength", type: "uint256" }, - { internalType: "uint256", name: "operationLength", type: "uint256" } - ], - name: "WrongBatchProvided", - type: "error" + "inputs": [], + "name": "InvalidImplementationAddress", + "type": "error" }, { - inputs: [ - { internalType: "bytes", name: "contractSignature", type: "bytes" } + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } ], - name: "WrongContractSignature", - type: "error" + "name": "InvalidModule", + "type": "error" }, { - inputs: [ - { internalType: "uint256", name: "uintS", type: "uint256" }, + "inputs": [ { - internalType: "uint256", - name: "contractSignatureLength", - type: "uint256" - }, - { internalType: "uint256", name: "signatureLength", type: "uint256" } + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } ], - name: "WrongContractSignatureFormat", - type: "error" + "name": "InvalidModuleTypeId", + "type": "error" }, { - inputs: [ + "inputs": [], + "name": "LinkedList_AlreadyInitialized", + "type": "error" + }, + { + "inputs": [ { - internalType: "address", - name: "moduleAddressProvided", - type: "address" + "internalType": "address", + "name": "entry", + "type": "address" } ], - name: "WrongValidationModule", - type: "error" + "name": "LinkedList_EntryAlreadyInList", + "type": "error" }, { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousHandler", - type: "address" - }, + "inputs": [ { - indexed: true, - internalType: "address", - name: "handler", - type: "address" + "internalType": "address", + "name": "entry", + "type": "address" } ], - name: "ChangedFallbackHandler", - type: "event" + "name": "LinkedList_InvalidEntry", + "type": "error" + }, + { + "inputs": [], + "name": "LinkedList_InvalidPage", + "type": "error" }, { - anonymous: false, - inputs: [ + "inputs": [ { - indexed: false, - internalType: "address", - name: "module", - type: "address" + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" } ], - name: "DisabledModule", - type: "event" + "name": "MismatchModuleTypeId", + "type": "error" }, { - anonymous: false, - inputs: [ + "inputs": [ { - indexed: false, - internalType: "address", - name: "module", - type: "address" + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" } ], - name: "EnabledModule", - type: "event" + "name": "MissingFallbackHandler", + "type": "error" + }, + { + "inputs": [], + "name": "ModuleAddressCanNotBeZero", + "type": "error" }, { - anonymous: false, - inputs: [ - { indexed: true, internalType: "address", name: "to", type: "address" }, + "inputs": [ { - indexed: true, - internalType: "uint256", - name: "value", - type: "uint256" + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" }, - { indexed: true, internalType: "bytes", name: "data", type: "bytes" }, { - indexed: false, - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8" + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ModuleAlreadyInstalled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" }, { - indexed: false, - internalType: "uint256", - name: "txGas", - type: "uint256" + "internalType": "address", + "name": "module", + "type": "address" } ], - name: "ExecutionFailure", - type: "event" + "name": "ModuleNotInstalled", + "type": "error" + }, + { + "inputs": [], + "name": "NexusInitializationFailed", + "type": "error" }, { - anonymous: false, - inputs: [ + "inputs": [], + "name": "UnauthorizedCallContext", + "type": "error" + }, + { + "inputs": [ { - indexed: true, - internalType: "address", - name: "module", - type: "address" + "internalType": "address", + "name": "operator", + "type": "address" } ], - name: "ExecutionFromModuleFailure", - type: "event" + "name": "UnauthorizedOperation", + "type": "error" }, { - anonymous: false, - inputs: [ + "inputs": [ { - indexed: true, - internalType: "address", - name: "module", - type: "address" + "internalType": "CallType", + "name": "callType", + "type": "bytes1" } ], - name: "ExecutionFromModuleSuccess", - type: "event" + "name": "UnsupportedCallType", + "type": "error" }, { - anonymous: false, - inputs: [ - { indexed: true, internalType: "address", name: "to", type: "address" }, - { - indexed: true, - internalType: "uint256", - name: "value", - type: "uint256" - }, - { indexed: true, internalType: "bytes", name: "data", type: "bytes" }, + "inputs": [ { - indexed: false, - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8" - }, + "internalType": "ExecType", + "name": "execType", + "type": "bytes1" + } + ], + "name": "UnsupportedExecType", + "type": "error" + }, + { + "inputs": [ { - indexed: false, - internalType: "uint256", - name: "txGas", - type: "uint256" + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" } ], - name: "ExecutionSuccess", - type: "event" + "name": "UnsupportedModuleType", + "type": "error" + }, + { + "inputs": [], + "name": "UpgradeFailed", + "type": "error" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: true, - internalType: "address", - name: "oldImplementation", - type: "address" + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "indexed": false, + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple" }, { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address" + "indexed": false, + "internalType": "bytes", + "name": "innerCallRet", + "type": "bytes" } ], - name: "ImplementationUpdated", - type: "event" + "name": "Executed", + "type": "event" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: false, - internalType: "address", - name: "module", - type: "address" + "indexed": false, + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" }, - { indexed: false, internalType: "address", name: "to", type: "address" }, { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256" + "indexed": false, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ModuleInstalled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" }, - { indexed: false, internalType: "bytes", name: "data", type: "bytes" }, { - indexed: false, - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8" + "indexed": false, + "internalType": "address", + "name": "module", + "type": "address" } ], - name: "ModuleTransaction", - type: "event" + "name": "ModuleUninstalled", + "type": "event" }, { - anonymous: false, - inputs: [ + "anonymous": false, + "inputs": [ { - indexed: true, - internalType: "address", - name: "sender", - type: "address" + "indexed": false, + "internalType": "uint256", + "name": "batchExecutionindex", + "type": "uint256" }, - { indexed: true, internalType: "uint256", name: "value", type: "uint256" } + { + "indexed": false, + "internalType": "bytes", + "name": "result", + "type": "bytes" + } ], - name: "SmartAccountReceivedNativeToken", - type: "event" + "name": "TryExecuteUnsuccessful", + "type": "event" }, - { stateMutability: "nonpayable", type: "fallback" }, { - inputs: [], - name: "VERSION", - outputs: [{ internalType: "string", name: "", type: "string" }], - stateMutability: "view", - type: "function" + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" }, { - inputs: [], - name: "addDeposit", - outputs: [], - stateMutability: "payable", - type: "function" + "stateMutability": "payable", + "type": "fallback" }, { - inputs: [ - { internalType: "address", name: "prevModule", type: "address" }, - { internalType: "address", name: "module", type: "address" } + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } ], - name: "disableModule", - outputs: [], - stateMutability: "nonpayable", - type: "function" + "stateMutability": "view", + "type": "function" }, { - inputs: [{ internalType: "address", name: "module", type: "address" }], - name: "enableModule", - outputs: [], - stateMutability: "nonpayable", - type: "function" + "inputs": [], + "name": "accountId", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" }, { - inputs: [], - name: "entryPoint", - outputs: [ - { internalType: "contract IEntryPoint", name: "", type: "address" } - ], - stateMutability: "view", - type: "function" + "inputs": [], + "name": "addDeposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" }, { - inputs: [ - { internalType: "address[]", name: "to", type: "address[]" }, - { internalType: "uint256[]", name: "value", type: "uint256[]" }, - { internalType: "bytes[]", name: "data", type: "bytes[]" }, + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, { - internalType: "enum Enum.Operation[]", - name: "operations", - type: "uint8[]" + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" } ], - name: "execBatchTransactionFromModule", - outputs: [{ internalType: "bool", name: "success", type: "bool" }], - stateMutability: "nonpayable", - type: "function" + "stateMutability": "view", + "type": "function" }, { - inputs: [ - { internalType: "address", name: "to", type: "address" }, - { internalType: "uint256", name: "value", type: "uint256" }, - { internalType: "bytes", name: "data", type: "bytes" }, - { internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, - { internalType: "uint256", name: "txGas", type: "uint256" } + "inputs": [], + "name": "entryPoint", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } ], - name: "execTransactionFromModule", - outputs: [{ internalType: "bool", name: "success", type: "bool" }], - stateMutability: "nonpayable", - type: "function" + "stateMutability": "view", + "type": "function" }, { - inputs: [ - { internalType: "address", name: "to", type: "address" }, - { internalType: "uint256", name: "value", type: "uint256" }, - { internalType: "bytes", name: "data", type: "bytes" }, - { internalType: "enum Enum.Operation", name: "operation", type: "uint8" } + "inputs": [ + { + "internalType": "ExecutionMode", + "name": "mode", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } ], - name: "execTransactionFromModule", - outputs: [{ internalType: "bool", name: "", type: "bool" }], - stateMutability: "nonpayable", - type: "function" + "name": "execute", + "outputs": [], + "stateMutability": "payable", + "type": "function" }, { - inputs: [ - { internalType: "address", name: "to", type: "address" }, - { internalType: "uint256", name: "value", type: "uint256" }, - { internalType: "bytes", name: "data", type: "bytes" }, - { internalType: "enum Enum.Operation", name: "operation", type: "uint8" } + "inputs": [ + { + "internalType": "ExecutionMode", + "name": "mode", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } ], - name: "execTransactionFromModuleReturnData", - outputs: [ - { internalType: "bool", name: "success", type: "bool" }, - { internalType: "bytes", name: "returnData", type: "bytes" } + "name": "executeFromExecutor", + "outputs": [ + { + "internalType": "bytes[]", + "name": "returnData", + "type": "bytes[]" + } ], - stateMutability: "nonpayable", - type: "function" + "stateMutability": "payable", + "type": "function" }, { - inputs: [ - { internalType: "address", name: "dest", type: "address" }, - { internalType: "uint256", name: "value", type: "uint256" }, - { internalType: "bytes", name: "func", type: "bytes" } + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function" + "name": "executeUserOp", + "outputs": [], + "stateMutability": "payable", + "type": "function" }, { - inputs: [ - { internalType: "address[]", name: "dest", type: "address[]" }, - { internalType: "uint256[]", name: "value", type: "uint256[]" }, - { internalType: "bytes[]", name: "func", type: "bytes[]" } + "inputs": [], + "name": "getActiveHook", + "outputs": [ + { + "internalType": "address", + "name": "hook", + "type": "address" + } ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function" + "stateMutability": "view", + "type": "function" }, { - inputs: [ - { internalType: "address[]", name: "dest", type: "address[]" }, - { internalType: "uint256[]", name: "value", type: "uint256[]" }, - { internalType: "bytes[]", name: "func", type: "bytes[]" } + "inputs": [], + "name": "getDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "result", + "type": "uint256" + } ], - name: "executeBatch_y6U", - outputs: [], - stateMutability: "nonpayable", - type: "function" + "stateMutability": "view", + "type": "function" }, { - inputs: [ - { internalType: "address", name: "dest", type: "address" }, - { internalType: "uint256", name: "value", type: "uint256" }, - { internalType: "bytes", name: "func", type: "bytes" } + "inputs": [ + { + "internalType": "address", + "name": "cursor", + "type": "address" + }, + { + "internalType": "uint256", + "name": "size", + "type": "uint256" + } ], - name: "execute_ncC", - outputs: [], - stateMutability: "nonpayable", - type: "function" + "name": "getExecutorsPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { + "internalType": "address", + "name": "next", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" }, { - inputs: [], - name: "getDeposit", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "view", - type: "function" + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getFallbackHandlerBySelector", + "outputs": [ + { + "internalType": "CallType", + "name": "", + "type": "bytes1" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" }, { - inputs: [], - name: "getFallbackHandler", - outputs: [{ internalType: "address", name: "_handler", type: "address" }], - stateMutability: "view", - type: "function" + "inputs": [], + "name": "getImplementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" }, { - inputs: [], - name: "getImplementation", - outputs: [ - { internalType: "address", name: "_implementation", type: "address" } + "inputs": [ + { + "internalType": "address", + "name": "cursor", + "type": "address" + }, + { + "internalType": "uint256", + "name": "size", + "type": "uint256" + } + ], + "name": "getValidatorsPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { + "internalType": "address", + "name": "next", + "type": "address" + } ], - stateMutability: "view", - type: "function" + "stateMutability": "view", + "type": "function" }, { - inputs: [ - { internalType: "address", name: "start", type: "address" }, - { internalType: "uint256", name: "pageSize", type: "uint256" } + "inputs": [ + { + "internalType": "bytes32", + "name": "structHash", + "type": "bytes32" + } ], - name: "getModulesPaginated", - outputs: [ - { internalType: "address[]", name: "array", type: "address[]" }, - { internalType: "address", name: "next", type: "address" } + "name": "hashTypedData", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } ], - stateMutability: "view", - type: "function" + "stateMutability": "view", + "type": "function" }, { - inputs: [ - { internalType: "address", name: "handler", type: "address" }, - { internalType: "address", name: "moduleSetupContract", type: "address" }, - { internalType: "bytes", name: "moduleSetupData", type: "bytes" } + "inputs": [ + { + "internalType": "bytes", + "name": "initData", + "type": "bytes" + } + ], + "name": "initializeAccount", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { + "internalType": "bytes", + "name": "initData", + "type": "bytes" + } ], - name: "init", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "nonpayable", - type: "function" + "name": "installModule", + "outputs": [], + "stateMutability": "payable", + "type": "function" }, { - inputs: [{ internalType: "address", name: "module", type: "address" }], - name: "isModuleEnabled", - outputs: [{ internalType: "bool", name: "", type: "bool" }], - stateMutability: "view", - type: "function" + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { + "internalType": "bytes", + "name": "additionalContext", + "type": "bytes" + } + ], + "name": "isModuleInstalled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" }, { - inputs: [ - { internalType: "bytes32", name: "dataHash", type: "bytes32" }, - { internalType: "bytes", name: "signature", type: "bytes" } + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } ], - name: "isValidSignature", - outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], - stateMutability: "view", - type: "function" + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" }, { - inputs: [{ internalType: "uint192", name: "_key", type: "uint192" }], - name: "nonce", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "view", - type: "function" + "inputs": [ + { + "internalType": "uint192", + "name": "key", + "type": "uint192" + } + ], + "name": "nonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" }, { - inputs: [{ internalType: "uint256", name: "", type: "uint256" }], - name: "noncesDeprecated", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "view", - type: "function" + "inputs": [], + "name": "proxiableUUID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" }, { - inputs: [], - name: "ownerDeprecated", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "view", - type: "function" + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "replaySafeHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" }, { - inputs: [{ internalType: "address", name: "handler", type: "address" }], - name: "setFallbackHandler", - outputs: [], - stateMutability: "nonpayable", - type: "function" + "inputs": [ + { + "internalType": "ExecutionMode", + "name": "mode", + "type": "bytes32" + } + ], + "name": "supportsExecutionMode", + "outputs": [ + { + "internalType": "bool", + "name": "isSupported", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" }, { - inputs: [ - { internalType: "address", name: "setupContract", type: "address" }, - { internalType: "bytes", name: "setupData", type: "bytes" } + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } ], - name: "setupAndEnableModule", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "nonpayable", - type: "function" + "name": "supportsModule", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" }, { - inputs: [{ internalType: "bytes4", name: "_interfaceId", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ internalType: "bool", name: "", type: "bool" }], - stateMutability: "view", - type: "function" + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { + "internalType": "bytes", + "name": "deInitData", + "type": "bytes" + } + ], + "name": "uninstallModule", + "outputs": [], + "stateMutability": "payable", + "type": "function" }, { - inputs: [ - { internalType: "address", name: "_implementation", type: "address" } + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } ], - name: "updateImplementation", - outputs: [], - stateMutability: "nonpayable", - type: "function" + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" }, { - inputs: [ + "inputs": [ { - components: [ - { internalType: "address", name: "sender", type: "address" }, - { internalType: "uint256", name: "nonce", type: "uint256" }, - { internalType: "bytes", name: "initCode", type: "bytes" }, - { internalType: "bytes", name: "callData", type: "bytes" }, - { internalType: "uint256", name: "callGasLimit", type: "uint256" }, + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256" + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" }, { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256" + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" }, - { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256" + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" }, - { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, - { internalType: "bytes", name: "signature", type: "bytes" } + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple" + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" }, - { internalType: "bytes32", name: "userOpHash", type: "bytes32" }, - { internalType: "uint256", name: "missingAccountFunds", type: "uint256" } + { + "internalType": "uint256", + "name": "missingAccountFunds", + "type": "uint256" + } ], - name: "validateUserOp", - outputs: [ - { internalType: "uint256", name: "validationData", type: "uint256" } + "name": "validateUserOp", + "outputs": [ + { + "internalType": "uint256", + "name": "validationData", + "type": "uint256" + } ], - stateMutability: "nonpayable", - type: "function" + "stateMutability": "nonpayable", + "type": "function" }, { - inputs: [ + "inputs": [ { - internalType: "address payable", - name: "withdrawAddress", - type: "address" + "internalType": "address", + "name": "to", + "type": "address" }, - { internalType: "uint256", name: "amount", type: "uint256" } + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } ], - name: "withdrawDepositTo", - outputs: [], - stateMutability: "payable", - type: "function" + "name": "withdrawDepositTo", + "outputs": [], + "stateMutability": "payable", + "type": "function" }, - { stateMutability: "payable", type: "receive" } -] as const + { + "stateMutability": "payable", + "type": "receive" + } +] \ No newline at end of file diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index b568a9ca4..c52cd22ba 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -15,7 +15,7 @@ export const MAGIC_BYTES = // will always be latest entrypoint address export const DEFAULT_ENTRYPOINT_ADDRESS = - "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789" + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { "0x27a4db290b89ae3373ce4313cbeae72112ae7da9": "V0_0_5", "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789": "V0_0_6" @@ -23,7 +23,7 @@ export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { // will always be latest factory address export const DEFAULT_BICONOMY_FACTORY_ADDRESS = - "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5" + "0xf7cF950DA05431eC1F48fD682fa993Bbaeed9a9d" export const DEFAULT_FALLBACK_HANDLER_ADDRESS = "0x0bBa6d96BD616BedC6BFaa341742FD43c60b83C1" export const BICONOMY_FACTORY_ADDRESSES: BiconomyFactories = { @@ -39,7 +39,7 @@ export const DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS = "0x0000002512019Dafb59528B82CB92D3c5D2423aC" export const BICONOMY_IMPLEMENTATION_ADDRESSES: BiconomyImplementations = { "0x00006b7e42e01957da540dc6a8f7c30c4d816af5": "V1_0_0", - "0x0000002512019Dafb59528B82CB92D3c5D2423aC": "V2_0_0" + "0x66Ae45ad5BE4be08a70AD99e9cF41e6d6884B06F": "V2_0_0" } export const ENTRYPOINT_ADDRESSES_BY_VERSION: EntryPointAddressesByVersion = { @@ -60,7 +60,7 @@ export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementatio export const EIP1559_UNSUPPORTED_NETWORKS: Array<number> = [97, 56, 1442, 1101] export const PROXY_CREATION_CODE = - "0x6080346100aa57601f61012038819003918201601f19168301916001600160401b038311848410176100af578084926020946040528339810103126100aa57516001600160a01b0381168082036100aa5715610065573055604051605a90816100c68239f35b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c696420696d706c656d656e746174696f6e206164647265737300006044820152606490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060405230546000808092368280378136915af43d82803e156020573d90f35b3d90fdfea2646970667358221220a03b18dce0be0b4c9afe58a9eb85c35205e2cf087da098bbf1d23945bf89496064736f6c63430008110033" + "0x603d3d8160223d3973600966Ae45ad5BE4be08a70AD99e9cF41e6d6884B06F5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f3" export const ADDRESS_RESOLVER_ADDRESS = "0x00000E81673606e07fC79CE5F1b3B26957844468" @@ -103,3 +103,40 @@ export const ERC20_ABI = [ "function balanceOf(address owner) external view returns (uint256)", "function decimals() external view returns (uint8)" ] + +// BASE SEPOLIA CONTRACTS +export const K1_VALIDATOR = "0x9C08e1CE188C29bAaeBc64A08cF2Ec44207749B6" +export const NEXUS_IMPLEMENTATION = "0x66Ae45ad5BE4be08a70AD99e9cF41e6d6884B06F" +export const BOOTSTRAP = "0x1ad17f0Dc85Da8Ed2CBA7415D290cCb0D79355C9"; +export const BOOTSTRAP_LIB = "0x44965180dc3F703448bDB859D9F1a55f0B8E6C8F" +export const K1_VALIDATOR_FACTORY = "0xf7cF950DA05431eC1F48fD682fa993Bbaeed9a9d" +export const BICONOMY_META_FACTORY = "0x4F9218eD5329D586237B8cAFe3d8778b94874186" + +// export const ENTRYPOINT_ADDRESS_V07 = +// "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" + +export const ENTRYPOINT_ADDRESS_V07 = + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + +// define mode and exec type enums +export const CALLTYPE_SINGLE = "0x00" // 1 byte +export const CALLTYPE_BATCH = "0x01" // 1 byte +export const EXECTYPE_DEFAULT = "0x00" // 1 byte +export const EXECTYPE_TRY = "0x01" // 1 byte +export const EXECTYPE_DELEGATE = "0xFF" // 1 byte +export const MODE_DEFAULT = "0x00000000" // 4 bytes +export const UNUSED = "0x00000000" // 4 bytes +export const MODE_PAYLOAD = "0x00000000000000000000000000000000000000000000" // 22 bytes + +export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f"; +// address sender; +// uint256 nonce; +// bytes initCode; +// bytes callData; +// uint256 callGasLimit; +// uint256 verificationGasLimit; +// uint256 preVerificationGas; +// uint256 maxFeePerGas; +// uint256 maxPriorityFeePerGas; +// bytes paymasterAndData; +// bytes signature; \ No newline at end of file diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 29640f3ab..1ce175e6b 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -25,6 +25,7 @@ import type { SmartAccountData, SponsorUserOperationDto } from "../../paymaster" +import { UndefinedInitialDataOptions } from "@tanstack/react-query" export type EntryPointAddresses = Record<string, string> export type BiconomyFactories = Record<string, string> @@ -81,7 +82,7 @@ export interface GasOverheads { export type BaseSmartAccountConfig = { /** index: helps to not conflict with other smart account instances */ - index?: number + index?: bigint /** provider: WalletClientSigner from viem */ provider?: WalletClient /** entryPointAddress: address of the smart account entry point */ @@ -164,7 +165,7 @@ export type BiconomySmartAccountV2ConfigBaseProps = { /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ scanForUpgradedAccountsFromV1?: boolean /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ - maxIndexForScan?: number + maxIndexForScan?: bigint /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains. Alias of customChain */ viemChain?: Chain /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chain. Alias of viemChain */ @@ -217,9 +218,9 @@ export type SessionDataForAccount = { export type NonceOptions = { /** nonceKey: The key to use for nonce */ - nonceKey?: number + nonceKey?: bigint /** nonceOverride: The nonce to use for the transaction */ - nonceOverride?: number + nonceOverride?: bigint } export type SimulationType = "validation" | "validation_and_execution" @@ -310,20 +311,20 @@ export interface TransactionDetailsForUserOp { } export type CounterFactualAddressParam = { - index?: number + index?: bigint validationModule?: BaseValidationModule /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ scanForUpgradedAccountsFromV1?: boolean /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ - maxIndexForScan?: number + maxIndexForScan?: bigint } export type QueryParamsForAddressResolver = { eoaAddress: Hex - index: number + index: bigint moduleAddress: Hex moduleSetupData: Hex - maxIndexForScan?: number + maxIndexForScan?: bigint } export type SmartAccountInfo = { @@ -391,29 +392,24 @@ export type BytesLike = Uint8Array | Hex //#region UserOperationStruct // based on @account-abstraction/common // this is used for building requests -export interface UserOperationStruct { - /* the origin of the request */ - sender: string - /* nonce of the transaction, returned from the entry point for this Address */ - nonce: BigNumberish - /* the initCode for creating the sender if it does not exist yet, otherwise "0x" */ - initCode: BytesLike | "0x" - /* the callData passed to the target */ - callData: BytesLike - /* Value used by inner account execution */ - callGasLimit?: BigNumberish - /* Actual gas used by the validation of this UserOperation */ - verificationGasLimit?: BigNumberish - /* Gas overhead of this UserOperation */ - preVerificationGas?: BigNumberish - /* Maximum fee per gas (similar to EIP-1559 max_fee_per_gas) */ - maxFeePerGas?: BigNumberish - /* Maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas) */ - maxPriorityFeePerGas?: BigNumberish - /* Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster ("0x" for self-sponsored transaction) */ - paymasterAndData: BytesLike | "0x" - /* Data passed into the account along with the nonce during the verification step */ - signature: BytesLike +export type UserOperationStruct = { + sender: Address + nonce: bigint + factory?: Address + factoryData?: Hex + callData: Hex + callGasLimit: bigint + verificationGasLimit: bigint + preVerificationGas: bigint + maxFeePerGas: bigint + maxPriorityFeePerGas: bigint + paymaster?: Address + paymasterVerificationGasLimit?: bigint + paymasterPostOpGasLimit?: bigint + paymasterData?: Hex + signature: Hex + initCode?: never + paymasterAndData?: never } //#endregion UserOperationStruct @@ -626,3 +622,10 @@ export interface ISmartContractAccount< export type TransferOwnershipCompatibleModule = | "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" | "0x000000824dc138db84FD9109fc154bdad332Aa8E" + +export enum ModuleType { + Validation = 1, + Execution = 2, + Fallback = 3, + Hooks = 4, +} \ No newline at end of file diff --git a/src/account/utils/Utils.ts b/src/account/utils/Utils.ts index b9cc56d9c..4c7c1468d 100644 --- a/src/account/utils/Utils.ts +++ b/src/account/utils/Utils.ts @@ -5,7 +5,9 @@ import { concat, encodeAbiParameters, keccak256, - parseAbiParameters + parseAbiParameters, + pad, + toHex } from "viem" import type { UserOperationStruct } from "../../account" import { type SupportedSigner, convertSigner } from "../../account" @@ -20,48 +22,70 @@ import type { BiconomySmartAccountV2Config } from "./Types.js" * "false" to pack entire UserOp, for calculating the calldata cost of putting it on-chain. */ export function packUserOp( - op: Partial<UserOperationStruct>, + userOperation: Partial<UserOperationStruct>, forSignature = true ): string { - if (!op.initCode || !op.callData || !op.paymasterAndData) - throw new Error("Missing userOp properties") - if (forSignature) { - return encodeAbiParameters( - parseAbiParameters( - "address, uint256, bytes32, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32" - ), + const hashedInitCode = keccak256( + userOperation.factory && userOperation.factoryData + ? concat([userOperation.factory, userOperation.factoryData]) + : "0x" + ) + const hashedCallData = keccak256(userOperation.callData ?? "0x") + const hashedPaymasterAndData = keccak256( + userOperation.paymaster + ? concat([ + userOperation.paymaster, + pad( + toHex( + userOperation.paymasterVerificationGasLimit || + BigInt(0) + ), + { + size: 16 + } + ), + pad( + toHex(userOperation.paymasterPostOpGasLimit || BigInt(0)), + { + size: 16 + } + ), + userOperation.paymasterData || "0x" + ]) + : "0x" + ) + + return encodeAbiParameters( [ - op.sender as Hex, - BigInt(op.nonce as Hex), - keccak256(op.initCode as Hex), - keccak256(op.callData as Hex), - BigInt(op.callGasLimit as Hex), - BigInt(op.verificationGasLimit as Hex), - BigInt(op.preVerificationGas as Hex), - BigInt(op.maxFeePerGas as Hex), - BigInt(op.maxPriorityFeePerGas as Hex), - keccak256(op.paymasterAndData as Hex) + { type: "address" }, + { type: "uint256" }, + { type: "bytes32" }, + { type: "bytes32" }, + { type: "bytes32" }, + { type: "uint256" }, + { type: "bytes32" }, + { type: "bytes32" } + ], + [ + userOperation.sender as Address, + userOperation.nonce ?? 0n, + hashedInitCode, + hashedCallData, + concat([ + pad(toHex(userOperation.verificationGasLimit ?? 0n), { + size: 16 + }), + pad(toHex(userOperation.callGasLimit ?? 0n), { size: 16 }) + ]), + userOperation.preVerificationGas ?? 0n, + concat([ + pad(toHex(userOperation.maxPriorityFeePerGas ?? 0n), { + size: 16 + }), + pad(toHex(userOperation.maxFeePerGas ?? 0n), { size: 16 }) + ]), + hashedPaymasterAndData ] - ) - } - // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) - return encodeAbiParameters( - parseAbiParameters( - "address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes, bytes" - ), - [ - op.sender as Hex, - BigInt(op.nonce as Hex), - op.initCode as Hex, - op.callData as Hex, - BigInt(op.callGasLimit as Hex), - BigInt(op.verificationGasLimit as Hex), - BigInt(op.preVerificationGas as Hex), - BigInt(op.maxFeePerGas as Hex), - BigInt(op.maxPriorityFeePerGas as Hex), - op.paymasterAndData as Hex, - op.signature as Hex - ] ) } diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index b9ced0b4b..a6288e10a 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -1,4 +1,4 @@ -import { http, type PublicClient, createPublicClient } from "viem" +import { http, type PublicClient, createPublicClient, Hash } from "viem" import type { StateOverrideSet, UserOperationStruct } from "../account" import type { SimulationType } from "../account" import { HttpMethod, getChain, sendRequest } from "../account" @@ -12,15 +12,16 @@ import { } from "./utils/Constants.js" import { getTimestampInSeconds, - transformUserOP } from "./utils/HelperFunction.js" import type { BundlerConfigWithChainId, + BundlerEstimateUserOpGasResponse, Bundlerconfig, EstimateUserOpGasResponse, GasFeeValues, GetGasFeeValuesResponse, GetUserOpByHashResponse, + GetUserOperationGasPriceReturnType, GetUserOperationReceiptResponse, GetUserOperationStatusResponse, SendUserOpResponse, @@ -30,7 +31,7 @@ import type { UserOpResponse, UserOpStatus } from "./utils/Types.js" -import { extractChainIdFromBundlerUrl } from "./utils/Utils.js" +import { deepHexlify, extractChainIdFromBundlerUrl } from "./utils/Utils.js" /** * This class implements IBundler interface. @@ -53,8 +54,8 @@ export class Bundler implements IBundler { constructor(bundlerConfig: Bundlerconfig) { const parsedChainId: number = - bundlerConfig?.chainId || - extractChainIdFromBundlerUrl(bundlerConfig.bundlerUrl) + bundlerConfig?.chainId ?? 11155111 // TODO: remove hardcoded chainId + // || extractChainIdFromBundlerUrl(bundlerConfig.bundlerUrl) this.bundlerConfig = { ...bundlerConfig, chainId: parsedChainId } this.provider = createPublicClient({ @@ -110,18 +111,16 @@ export class Bundler implements IBundler { ): Promise<UserOpGasResponse> { // expected dummySig and possibly dummmy paymasterAndData should be provided by the caller // bundler doesn't know account and paymaster implementation - const userOp = transformUserOP(_userOp) + // const userOp = transformUserOP(_userOp) const bundlerUrl = this.getBundlerUrl() - const response: EstimateUserOpGasResponse = await sendRequest( + const response: {result: BundlerEstimateUserOpGasResponse} = await sendRequest( { url: bundlerUrl, method: HttpMethod.Post, body: { method: "eth_estimateUserOperationGas", - params: stateOverrideSet - ? [userOp, this.bundlerConfig.entryPointAddress, stateOverrideSet] - : [userOp, this.bundlerConfig.entryPointAddress], + params: [deepHexlify(_userOp), this.bundlerConfig.entryPointAddress], id: getTimestampInSeconds(), jsonrpc: "2.0" } @@ -129,9 +128,10 @@ export class Bundler implements IBundler { "Bundler" ) - const userOpGasResponse = response.result + console.log(response, "response"); + + const userOpGasResponse = response for (const key in userOpGasResponse) { - if (key === "maxFeePerGas" || key === "maxPriorityFeePerGas") continue if ( userOpGasResponse[key as keyof UserOpGasResponse] === undefined || userOpGasResponse[key as keyof UserOpGasResponse] === null @@ -139,7 +139,19 @@ export class Bundler implements IBundler { throw new Error(`Got undefined ${key} from bundler`) } } - return userOpGasResponse + + return { + preVerificationGas: BigInt(response.result.preVerificationGas || 0), + verificationGasLimit: BigInt(response.result.verificationGasLimit || 0), + callGasLimit: BigInt(response.result.callGasLimit || 0), + paymasterVerificationGasLimit: + response.result.paymasterVerificationGasLimit + ? BigInt(response.result.paymasterVerificationGasLimit) + : undefined, + paymasterPostOpGasLimit: response.result.paymasterPostOpGasLimit + ? BigInt(response.result.paymasterPostOpGasLimit) + : undefined + } } /** @@ -151,16 +163,10 @@ export class Bundler implements IBundler { async sendUserOp( _userOp: UserOperationStruct, simulationParam?: SimulationType - ): Promise<UserOpResponse> { - const chainId = this.bundlerConfig.chainId - // transformUserOP will convert all bigNumber values to string - const userOp = transformUserOP(_userOp) - const simType = { - simulation_type: simulationParam || "validation" - } - const params = [userOp, this.bundlerConfig.entryPointAddress, simType] + ): Promise<Hash> { + const params = [deepHexlify(_userOp), this.bundlerConfig.entryPointAddress] const bundlerUrl = this.getBundlerUrl() - const sendUserOperationResponse: SendUserOpResponse = await sendRequest( + const sendUserOperationResponse: {result: Hash} = await sendRequest( { url: bundlerUrl, method: HttpMethod.Post, @@ -173,101 +179,10 @@ export class Bundler implements IBundler { }, "Bundler" ) - const response: UserOpResponse = { - userOpHash: sendUserOperationResponse.result, - wait: (confirmations?: number): Promise<UserOpReceipt> => { - // Note: maxDuration can be defined per chainId - const maxDuration = - this.UserOpReceiptMaxDurationIntervals[chainId] || 30000 // default 30 seconds - let totalDuration = 0 - return new Promise<UserOpReceipt>((resolve, reject) => { - const intervalValue = this.UserOpReceiptIntervals[chainId] || 5000 // default 5 seconds - const intervalId = setInterval(async () => { - try { - const userOpResponse = await this.getUserOpReceipt( - sendUserOperationResponse.result - ) - if (userOpResponse?.receipt?.blockNumber) { - if (confirmations) { - const latestBlock = await this.provider.getBlockNumber() - const confirmedBlocks = - Number(latestBlock) - userOpResponse.receipt.blockNumber - if (confirmations >= confirmedBlocks) { - clearInterval(intervalId) - resolve(userOpResponse) - return - } - } else { - clearInterval(intervalId) - resolve(userOpResponse) - return - } - } - } catch (error) { - clearInterval(intervalId) - reject(error) - return - } + console.log(sendUserOperationResponse); - totalDuration += intervalValue - if (totalDuration >= maxDuration) { - clearInterval(intervalId) - reject( - new Error( - `Exceeded maximum duration (${ - maxDuration / 1000 - } sec) waiting to get receipt for userOpHash ${ - sendUserOperationResponse.result - }. Try getting the receipt manually using eth_getUserOperationReceipt rpc method on bundler` - ) - ) - } - }, intervalValue) - }) - }, - waitForTxHash: (): Promise<UserOpStatus> => { - const maxDuration = - this.UserOpWaitForTxHashMaxDurationIntervals[chainId] || 20000 // default 20 seconds - let totalDuration = 0 - - return new Promise<UserOpStatus>((resolve, reject) => { - const intervalValue = - this.UserOpWaitForTxHashIntervals[chainId] || 500 // default 0.5 seconds - const intervalId = setInterval(async () => { - try { - const userOpStatus = await this.getUserOpStatus( - sendUserOperationResponse.result - ) - if (userOpStatus?.state && userOpStatus.transactionHash) { - clearInterval(intervalId) - resolve(userOpStatus) - return - } - } catch (error) { - clearInterval(intervalId) - reject(error) - return - } - - totalDuration += intervalValue - if (totalDuration >= maxDuration) { - clearInterval(intervalId) - reject( - new Error( - `Exceeded maximum duration (${ - maxDuration / 1000 - } sec) waiting to get receipt for userOpHash ${ - sendUserOperationResponse.result - }. Try getting the receipt manually using eth_getUserOperationReceipt rpc method on bundler` - ) - ) - } - }, intervalValue) - }) - } - } - return response + return sendUserOperationResponse.result } /** @@ -348,14 +263,14 @@ export class Bundler implements IBundler { /** * @description This function will return the gas fee values */ - async getGasFeeValues(): Promise<GasFeeValues> { + async getGasFeeValues(): Promise<GetUserOperationGasPriceReturnType> { const bundlerUrl = this.getBundlerUrl() - const response: GetGasFeeValuesResponse = await sendRequest( + const response: {result: GetUserOperationGasPriceReturnType} = await sendRequest( { url: bundlerUrl, method: HttpMethod.Post, body: { - method: "biconomy_getGasFeeValues", + method: "pimlico_getUserOperationGasPrice", params: [], id: getTimestampInSeconds(), jsonrpc: "2.0" @@ -363,7 +278,21 @@ export class Bundler implements IBundler { }, "Bundler" ) - return response.result + + return { + slow: { + maxFeePerGas: BigInt(response.result.slow.maxFeePerGas), + maxPriorityFeePerGas: BigInt(response.result.slow.maxPriorityFeePerGas) + }, + standard: { + maxFeePerGas: BigInt(response.result.standard.maxFeePerGas), + maxPriorityFeePerGas: BigInt(response.result.standard.maxPriorityFeePerGas) + }, + fast: { + maxFeePerGas: BigInt(response.result.fast.maxFeePerGas), + maxPriorityFeePerGas: BigInt(response.result.fast.maxPriorityFeePerGas) + } + } } public static async create(config: Bundlerconfig): Promise<Bundler> { diff --git a/src/bundler/IBundler.ts b/src/bundler/IBundler.ts deleted file mode 100644 index 1e15c7c19..000000000 --- a/src/bundler/IBundler.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { SimulationType } from "../account" -import type { StateOverrideSet, UserOperationStruct } from "../account" -import type { - GasFeeValues, - UserOpByHashResponse, - UserOpGasResponse, - UserOpReceipt, - UserOpResponse, - UserOpStatus -} from "./utils/Types.js" - -export interface IBundler { - estimateUserOpGas( - _userOp: Partial<UserOperationStruct>, - stateOverrideSet?: StateOverrideSet - ): Promise<UserOpGasResponse> - sendUserOp( - _userOp: UserOperationStruct, - _simulationType?: SimulationType - ): Promise<UserOpResponse> - getUserOpReceipt(_userOpHash: string): Promise<UserOpReceipt> - getUserOpByHash(_userOpHash: string): Promise<UserOpByHashResponse> - getGasFeeValues(): Promise<GasFeeValues> - getUserOpStatus(_userOpHash: string): Promise<UserOpStatus> - getBundlerUrl(): string -} diff --git a/src/bundler/interfaces/IBundler.ts b/src/bundler/interfaces/IBundler.ts index aa7f551fe..1c257b3cd 100644 --- a/src/bundler/interfaces/IBundler.ts +++ b/src/bundler/interfaces/IBundler.ts @@ -1,10 +1,8 @@ +import { Hash } from "viem" +import type { SimulationType } from "../../account" +import type { StateOverrideSet, UserOperationStruct } from "../../account" import type { - SimulationType, - StateOverrideSet, - UserOperationStruct -} from "../../account" -import type { - GasFeeValues, + GetUserOperationGasPriceReturnType, UserOpByHashResponse, UserOpGasResponse, UserOpReceipt, @@ -20,10 +18,10 @@ export interface IBundler { sendUserOp( _userOp: UserOperationStruct, _simulationType?: SimulationType - ): Promise<UserOpResponse> + ): Promise<Hash> getUserOpReceipt(_userOpHash: string): Promise<UserOpReceipt> getUserOpByHash(_userOpHash: string): Promise<UserOpByHashResponse> - getGasFeeValues(): Promise<GasFeeValues> + getGasFeeValues(): Promise<GetUserOperationGasPriceReturnType> getUserOpStatus(_userOpHash: string): Promise<UserOpStatus> getBundlerUrl(): string } diff --git a/src/bundler/utils/Constants.ts b/src/bundler/utils/Constants.ts index 5c530f57d..72b96d71d 100644 --- a/src/bundler/utils/Constants.ts +++ b/src/bundler/utils/Constants.ts @@ -27,6 +27,6 @@ export const UserOpWaitForTxHashMaxDurationIntervals: { } export const DEFAULT_ENTRYPOINT_ADDRESS = - "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789" + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" export const SDK_VERSION = "4.4.5" diff --git a/src/bundler/utils/HelperFunction.ts b/src/bundler/utils/HelperFunction.ts index ecdaf688d..dd1b110be 100644 --- a/src/bundler/utils/HelperFunction.ts +++ b/src/bundler/utils/HelperFunction.ts @@ -1,31 +1,31 @@ import type { BigNumberish, UserOperationStruct } from "../../account" // Will convert the userOp hex, bigInt and number values to hex strings -export const transformUserOP = ( - userOp: UserOperationStruct -): UserOperationStruct => { - try { - const userOperation = { ...userOp } - const keys: (keyof UserOperationStruct)[] = [ - "nonce", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas" - ] - for (const key of keys) { - if (userOperation[key] && userOperation[key] !== "0x") { - userOperation[key] = `0x${BigInt(userOp[key] as BigNumberish).toString( - 16 - )}` as `0x${string}` - } - } - return userOperation - } catch (error) { - throw `Failed to transform user operation: ${error}` - } -} +// export const transformUserOP = ( +// userOp: UserOperationStruct +// ): UserOperationStruct => { +// try { +// const userOperation = { ...userOp } +// const keys: (keyof UserOperationStruct)[] = [ +// "nonce", +// "callGasLimit", +// "verificationGasLimit", +// "preVerificationGas", +// "maxFeePerGas", +// "maxPriorityFeePerGas" +// ] +// for (const key of keys) { +// if (userOperation[key] && userOperation[key] !== "0x") { +// userOperation[key] = `0x${BigInt(userOp[key] as BigNumberish).toString( +// 16 +// )}` as `0x${string}` +// } +// } +// return userOperation +// } catch (error) { +// throw `Failed to transform user operation: ${error}` +// } +// } /** * @description this function will return current timestamp in seconds diff --git a/src/bundler/utils/Types.ts b/src/bundler/utils/Types.ts index cbaba24e4..c61094c1c 100644 --- a/src/bundler/utils/Types.ts +++ b/src/bundler/utils/Types.ts @@ -84,11 +84,11 @@ export type EstimateUserOpGasResponse = { } export type UserOpGasResponse = { - preVerificationGas: string - verificationGasLimit: string - callGasLimit: string - maxPriorityFeePerGas: string - maxFeePerGas: string + preVerificationGas: bigint + verificationGasLimit: bigint + callGasLimit: bigint + paymasterVerificationGasLimit?: bigint + paymasterPostOpGasLimit?: bigint } // Converted to JsonRpcResponse with strict type @@ -119,6 +119,29 @@ export type GetGasFeeValuesResponse = { error?: JsonRpcError } export type GasFeeValues = { - maxPriorityFeePerGas: string - maxFeePerGas: string + maxPriorityFeePerGas: bigint + maxFeePerGas: bigint } + +export type GetUserOperationGasPriceReturnType = { + slow: { + maxFeePerGas: bigint + maxPriorityFeePerGas: bigint + } + standard: { + maxFeePerGas: bigint + maxPriorityFeePerGas: bigint + } + fast: { + maxFeePerGas: bigint + maxPriorityFeePerGas: bigint + } +} + +export type BundlerEstimateUserOpGasResponse = { + preVerificationGas: Hex + verificationGasLimit: Hex + callGasLimit?: Hex | null + paymasterVerificationGasLimit?: Hex | null + paymasterPostOpGasLimit?: Hex | null +} \ No newline at end of file diff --git a/src/bundler/utils/Utils.ts b/src/bundler/utils/Utils.ts index 700a2bb59..655993300 100644 --- a/src/bundler/utils/Utils.ts +++ b/src/bundler/utils/Utils.ts @@ -1,3 +1,5 @@ +import { toHex } from "viem" + export const extractChainIdFromBundlerUrl = (url: string): number => { try { const regex = /\/api\/v2\/(\d+)\/[a-zA-Z0-9.-]+$/ @@ -21,3 +23,31 @@ export const extractChainIdFromPaymasterUrl = (url: string): number => { throw new Error("Invalid chain id") } } + +export function deepHexlify(obj: any): any { + if (typeof obj === "function") { + return undefined + } + if (obj == null || typeof obj === "string" || typeof obj === "boolean") { + return obj + } + + if (typeof obj === "bigint") { + return toHex(obj) + } + + if (obj._isBigNumber != null || typeof obj !== "object") { + return toHex(obj).replace(/^0x0/, "0x") + } + if (Array.isArray(obj)) { + return obj.map((member) => deepHexlify(member)) + } + return Object.keys(obj).reduce( + // biome-ignore lint/suspicious/noExplicitAny: it's a recursive function, so it's hard to type + (set: any, key: string) => { + set[key] = deepHexlify(obj[key]) + return set + }, + {} + ) +} \ No newline at end of file diff --git a/src/modules/ECDSAOwnershipValidationModule.ts b/src/modules/ECDSAOwnershipValidationModule.ts index 0d472c3e6..835950e98 100644 --- a/src/modules/ECDSAOwnershipValidationModule.ts +++ b/src/modules/ECDSAOwnershipValidationModule.ts @@ -89,7 +89,7 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { } async signUserOpHash(userOpHash: string): Promise<Hex> { - const sig = await this.signer.signMessage({ raw: toBytes(userOpHash) }) + const sig = await this.signer.signMessage({raw: userOpHash as Hex}) return sig } diff --git a/src/modules/utils/Constants.ts b/src/modules/utils/Constants.ts index 36ff89ca9..dfbe9f1c0 100644 --- a/src/modules/utils/Constants.ts +++ b/src/modules/utils/Constants.ts @@ -4,7 +4,7 @@ import type { ModuleVersion } from "./Types.js" export const DEFAULT_MODULE_VERSION: ModuleVersion = "V1_0_0" export const DEFAULT_ECDSA_OWNERSHIP_MODULE: Hex = - "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" + "0x9C08e1CE188C29bAaeBc64A08cF2Ec44207749B6" export const ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION = { V1_0_0: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index ba884e9e4..43784b845 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -102,8 +102,8 @@ export interface Permission { function packUserOp( op: Partial<UserOperationStruct>, forSignature = true -): string { - if (!op.initCode || !op.callData || !op.paymasterAndData) +): Hex { + if (!op.callData) throw new Error("Missing userOp properties") if (forSignature) { return encodeAbiParameters( @@ -111,36 +111,35 @@ function packUserOp( "address, uint256, bytes32, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32" ), [ - op.sender as Hex, - BigInt(op.nonce as Hex), - keccak256(op.initCode as Hex), - keccak256(op.callData as Hex), - BigInt(op.callGasLimit as Hex), - BigInt(op.verificationGasLimit as Hex), - BigInt(op.preVerificationGas as Hex), - BigInt(op.maxFeePerGas as Hex), - BigInt(op.maxPriorityFeePerGas as Hex), - keccak256(op.paymasterAndData as Hex) + op.sender ?? "0x", + BigInt(op.nonce ?? 0n), + keccak256(op.initCode ?? "0x"), + keccak256(op.callData ), + BigInt(op.callGasLimit ?? 0n), + BigInt(op.verificationGasLimit ?? 0n), + BigInt(op.preVerificationGas ?? 0n), + BigInt(op.maxFeePerGas ?? 0n), + BigInt(op.maxPriorityFeePerGas ?? 0n), + keccak256(op.paymasterAndData ?? "0x") ] ) } // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) return encodeAbiParameters( parseAbiParameters( - "address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes, bytes" + "address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes" ), [ - op.sender as Hex, - BigInt(op.nonce as Hex), - op.initCode as Hex, - op.callData as Hex, - BigInt(op.callGasLimit as Hex), - BigInt(op.verificationGasLimit as Hex), - BigInt(op.preVerificationGas as Hex), - BigInt(op.maxFeePerGas as Hex), - BigInt(op.maxPriorityFeePerGas as Hex), - op.paymasterAndData as Hex, - op.signature as Hex + op.sender ?? "0x", + BigInt(op.nonce ?? 0n), + keccak256(op.initCode ?? "0x"), + keccak256(op.callData ), + BigInt(op.callGasLimit ?? 0n), + BigInt(op.verificationGasLimit ?? 0n), + BigInt(op.preVerificationGas ?? 0n), + BigInt(op.maxFeePerGas ?? 0n), + BigInt(op.maxPriorityFeePerGas ?? 0n), + keccak256(op.paymasterAndData ?? "0x") ] ) } @@ -150,7 +149,7 @@ export const getUserOpHash = ( entryPointAddress: Hex, chainId: number ): Hex => { - const userOpHash = keccak256(packUserOp(userOp, true) as Hex) + const userOpHash = keccak256(packUserOp(userOp, true)) const enc = encodeAbiParameters( parseAbiParameters("bytes32, address, uint256"), [userOpHash, entryPointAddress, BigInt(chainId)] diff --git a/src/paymaster/BiconomyPaymaster.ts b/src/paymaster/BiconomyPaymaster.ts index e0cbb8999..849301b3d 100644 --- a/src/paymaster/BiconomyPaymaster.ts +++ b/src/paymaster/BiconomyPaymaster.ts @@ -48,42 +48,42 @@ export class BiconomyPaymaster * @param userOp The partial user operation. * @returns A Promise that resolves to the prepared partial user operation. */ - private async prepareUserOperation( - userOp: Partial<UserOperationStruct> - ): Promise<Partial<UserOperationStruct>> { - const userOperation = { ...userOp } - try { - const keys1: (keyof UserOperationStruct)[] = [ - "nonce", - "maxFeePerGas", - "maxPriorityFeePerGas" - ] - for (const key of keys1) { - if (userOperation[key] && userOperation[key] !== "0x") { - userOperation[key] = `0x${BigInt( - userOp[key] as BigNumberish - ).toString(16)}` as `0x${string}` - } - } - const keys2: (keyof UserOperationStruct)[] = [ - "callGasLimit", - "verificationGasLimit", - "preVerificationGas" - ] - for (const key of keys2) { - if (userOperation[key] && userOperation[key] !== "0x") { - userOperation[key] = BigInt( - userOp[key] as BigNumberish - ).toString() as `0x${string}` - } - } - } catch (error) { - throw `Failed to transform user operation: ${error}` - } - userOperation.signature = userOp.signature || "0x" - userOperation.paymasterAndData = userOp.paymasterAndData || "0x" - return userOperation - } + // private async prepareUserOperation( + // userOp: Partial<UserOperationStruct> + // ): Promise<Partial<UserOperationStruct>> { + // const userOperation = { ...userOp } + // try { + // const keys1: (keyof UserOperationStruct)[] = [ + // "nonce", + // "maxFeePerGas", + // "maxPriorityFeePerGas" + // ] + // for (const key of keys1) { + // if (userOperation[key] && userOperation[key] !== "0x") { + // userOperation[key] = `0x${BigInt( + // userOp[key] as BigNumberish + // ).toString(16)}` as `0x${string}` + // } + // } + // const keys2: (keyof UserOperationStruct)[] = [ + // "callGasLimit", + // "verificationGasLimit", + // "preVerificationGas" + // ] + // for (const key of keys2) { + // if (userOperation[key] && userOperation[key] !== "0x") { + // userOperation[key] = BigInt( + // userOp[key] as BigNumberish + // ).toString() as `0x${string}` + // } + // } + // } catch (error) { + // throw `Failed to transform user operation: ${error}` + // } + // userOperation.signature = userOp.signature || "0x" + // userOperation.paymasterAndData = userOp.paymasterAndData || "0x" + // return userOperation + // } /** * @dev Builds a token approval transaction for the Biconomy token paymaster. @@ -159,10 +159,10 @@ export class BiconomyPaymaster * @returns A Promise that resolves to the fee quotes or data response. */ async getPaymasterFeeQuotesOrData( - _userOp: Partial<UserOperationStruct>, + userOp: Partial<UserOperationStruct>, paymasterServiceData: FeeQuotesOrDataDto ): Promise<FeeQuotesOrDataResponse> { - const userOp = await this.prepareUserOperation(_userOp) + // const userOp = await this.prepareUserOperation(_userOp) let mode: PaymasterMode | null = null let expiryDuration: number | null = null @@ -296,10 +296,10 @@ export class BiconomyPaymaster * @returns A Promise that resolves to the paymaster and data string. */ async getPaymasterAndData( - _userOp: Partial<UserOperationStruct>, + userOp: Partial<UserOperationStruct>, paymasterServiceData?: SponsorUserOperationDto // mode is necessary. partial context of token paymaster or verifying ): Promise<PaymasterAndDataResponse> { - const userOp = await this.prepareUserOperation(_userOp) + // const userOp = await this.prepareUserOperation(_userOp) if (paymasterServiceData?.mode === undefined) { throw new Error("mode is required in paymasterServiceData") @@ -367,11 +367,11 @@ export class BiconomyPaymaster if (response?.result) { const paymasterAndData = response.result.paymasterAndData const preVerificationGas = - response.result.preVerificationGas ?? _userOp.preVerificationGas + response.result.preVerificationGas ?? userOp.preVerificationGas const verificationGasLimit = - response.result.verificationGasLimit ?? _userOp.verificationGasLimit + response.result.verificationGasLimit ?? userOp.verificationGasLimit const callGasLimit = - response.result.callGasLimit ?? _userOp.callGasLimit + response.result.callGasLimit ?? userOp.callGasLimit return { paymasterAndData: paymasterAndData, preVerificationGas: preVerificationGas, diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index e715ebe7a..e6c54fc2c 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -8,7 +8,7 @@ import { parseAbi } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { arbitrumSepolia, polygonAmoy } from "viem/chains" +import { arbitrumSepolia, baseSepolia, polygonAmoy } from "viem/chains" import { beforeAll, describe, expect, test } from "vitest" import { type BiconomySmartAccountV2, @@ -33,7 +33,7 @@ import { } from "../utils" describe("Account:Write", async () => { - const nonceOptions = { nonceKey: Date.now() + 10 } + const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" const { @@ -52,13 +52,13 @@ describe("Account:Write", async () => { chain, transport: http() }) - let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] - let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] + // let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] + // let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] const [walletClient, walletClientTwo] = [ createWalletClient({ account, - chain, + chain: baseSepolia, transport: http() }), createWalletClient({ @@ -68,275 +68,58 @@ describe("Account:Write", async () => { }) ] - const firstOwner = account.address - const newOwner = accountTwo.address - - let _smartAccount = await createSmartAccountClient({ + let smartAccount = await createSmartAccountClient({ signer: walletClient, - paymasterUrl, - bundlerUrl + bundlerUrl: "https://api.pimlico.io/v2/84532/rpc?apikey=22c48af7-4886-4c7d-8d4c-5d50262a23f3" // accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" }) - beforeAll(async () => { - ;[smartAccount, smartAccountTwo] = await Promise.all( - [walletClient, walletClientTwo].map((client) => - createSmartAccountClient({ - chainId, - signer: client, - bundlerUrl, - paymasterUrl - }) - ) - ) - ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( - [smartAccount, smartAccountTwo].map((account) => - account.getAccountAddress() - ) - ) - }) - - test.skip("should test the nonce on arbSepolia", async () => { - const chain = arbitrumSepolia - const account = privateKeyToAccount(`0x${privateKey}`) - const signer = createWalletClient({ account, chain, transport: http() }) - const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl: getBundlerUrl(chain.id) - }) - - const address = await smartAccount.getAccountAddress() - - await nonZeroBalance(address) - - const nonceBefore = await smartAccount.getNonce() - const balanceOfRecipient = await checkBalance(recipient, undefined, chain) - - const { wait } = await smartAccount.sendTransaction( - { - to: recipient, - value: BigInt(1) - }, - { - nonceOptions - } - ) - - const result = await wait() - const newBalanceOfRecipient = await checkBalance( - recipient, - undefined, - chain - ) - const nonceAfter = await smartAccount.getNonce() - - expect(result?.receipt?.transactionHash).toBeTruthy() - expect(result.success).toBe("true") - expect(newBalanceOfRecipient).toBeGreaterThan(balanceOfRecipient) - - expect(nonceAfter - nonceBefore).toBe(1n) - }, 10000) - - test("should send some native token to recipient via the entrypoint", async () => { - const balanceOfRecipient = await checkBalance(recipient) - - // biome-ignore lint/style/useConst: <explanation> - let userOp = await smartAccount.buildUserOp([ - { - to: recipient, - value: 1n - } - ]) - - userOp.signature = undefined - - const signedUserOp = await smartAccount.signUserOp(userOp) - - const entrypointContract = getContract({ - address: DEFAULT_ENTRYPOINT_ADDRESS, - abi: EntryPointAbi, - client: { public: publicClient, wallet: walletClient } - }) - - const hash = await entrypointContract.write.handleOps([ - [ - { - sender: signedUserOp.sender as Hex, - nonce: BigInt(signedUserOp.nonce ?? 0), - callGasLimit: BigInt(signedUserOp.callGasLimit ?? 0), - verificationGasLimit: BigInt(signedUserOp.verificationGasLimit ?? 0), - preVerificationGas: BigInt(signedUserOp.preVerificationGas ?? 0), - maxFeePerGas: BigInt(signedUserOp.maxFeePerGas ?? 0), - maxPriorityFeePerGas: BigInt(signedUserOp.maxPriorityFeePerGas ?? 0), - initCode: signedUserOp.initCode as Hex, - callData: signedUserOp.callData as Hex, - paymasterAndData: signedUserOp.paymasterAndData as Hex, - signature: signedUserOp.signature as Hex - } - ], - sender - ]) - - const { status, transactionHash } = - await publicClient.waitForTransactionReceipt({ hash }) - - expect(status).toBe("success") - expect(transactionHash).toBeTruthy() - - const balanceOfRecipientAfter = await checkBalance(recipient) - - expect(balanceOfRecipientAfter - balanceOfRecipient).toBe(1n) - }, 50000) - - test("should deploy a smart account with native token balance", async () => { - const newPrivateKey = generatePrivateKey() - const newAccount = privateKeyToAccount(newPrivateKey) - - const newViemWallet = createWalletClient({ - account: newAccount, - chain, - transport: http() - }) - - const newSmartAccount = await createSmartAccountClient({ - signer: newViemWallet, - paymasterUrl, - bundlerUrl - }) - - const newSmartAccountAddress = await newSmartAccount.getAccountAddress() - - // Setup: - await topUp(newSmartAccountAddress, BigInt(100000000000000000)) - - const balanceCheck = await checkBalance(newSmartAccountAddress) - - // Test: - const { wait } = await newSmartAccount.deploy() - const { success } = await wait() - - const byteCode = await publicClient.getBytecode({ - address: newSmartAccountAddress - }) - expect(success).toBe("true") - expect(byteCode).toBeTruthy() - }, 60000) - - test.concurrent( - "should add a custom chain", - async () => { - const customChain = getCustomChain( - "Amoy", - polygonAmoy.id, - polygonAmoy.rpcUrls.default.http[0], - polygonAmoy.blockExplorers.default.url - ) - - const accountOne = privateKeyToAccount(`0x${privateKey}`) - const walletClientWithCustomChain = createWalletClient({ - account: accountOne, - chain: customChain, - transport: http() - }) - - const smartAccountCustomChain = await createSmartAccountClient({ - signer: walletClientWithCustomChain, - bundlerUrl, - customChain - }) - - expect(smartAccountCustomChain.rpcProvider.transport.url).toBe( - "https://rpc-amoy.polygon.technology" - ) - expect(walletClientWithCustomChain.chain).toEqual(customChain) - - const { wait } = await smartAccountCustomChain.sendTransaction( - { - to: recipient, - value: BigInt(1) - }, - { nonceOptions } - ) - - const { success, receipt } = await wait() - - expect(receipt).toBeTruthy() - expect(success).toBe("true") - }, - 80000 - ) - - testOnlyOnOptimism( - "should send some native token to a recipient on optimism", - async () => { - const balanceOfRecipient = await checkBalance(recipient) - - const { wait } = await smartAccount.sendTransaction( - { - to: recipient, - value: BigInt(1) - }, - { nonceOptions, simulationType: "validation_and_execution" } - ) - - const result = await wait() - const newBalanceOfRecipient = await checkBalance(recipient) - - expect(result?.receipt?.transactionHash).toBeTruthy() - expect(result.success).toBe("true") - expect(newBalanceOfRecipient).toBeGreaterThan(balanceOfRecipient) - }, - 50000 - ) - - testOnlyOnOptimism( - "should create a smart account with paymaster with an api key on optimism", - async () => { - const paymaster = smartAccount.paymaster - expect(paymaster).not.toBeNull() - expect(paymaster).not.toBeUndefined() - } - ) - - test("should withdraw erc20 balances", async () => { - await nonZeroBalance(smartAccountAddress, token) - - const tokenBalanceOfSABefore = await checkBalance( - smartAccountAddress, - token - ) - const tokenBalanceOfRecipientBefore = await checkBalance(sender, token) - const { wait } = await smartAccount.withdraw( - [{ address: token, amount: BigInt(1), recipient: sender }], - undefined, - { - nonceOptions, - paymasterServiceData: { - mode: PaymasterMode.SPONSORED - } - } - ) - - const { - receipt: { transactionHash }, - userOpHash, - success - } = await wait() - - expect(userOpHash).toBeTruthy() - expect(success).toBe("true") - expect(transactionHash).toBeTruthy() - - const tokenBalanceOfSAAfter = await checkBalance(smartAccountAddress, token) - const tokenBalanceOfRecipientAfter = await checkBalance(sender, token) - - expect(tokenBalanceOfSAAfter - tokenBalanceOfSABefore).toBe(-1n) - expect(tokenBalanceOfRecipientAfter - tokenBalanceOfRecipientBefore).toBe( - 1n - ) - }, 60000) + // const firstOwner = account.address + // const newOwner = accountTwo.address + + // let _smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl + // // accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" + // }) + + // beforeAll(async () => { + // ;[smartAccount, smartAccountTwo] = await Promise.all( + // [walletClient, walletClientTwo].map((client) => + // createSmartAccountClient({ + // chainId, + // signer: client, + // bundlerUrl, + // paymasterUrl + // }) + // ) + // ) + // ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( + // [smartAccount, smartAccountTwo].map((account) => + // account.getAccountAddress() + // ) + // ) + // }) + + // test("Build a user op with pimlico bundler", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall + // } + // const userOp = await smartAccount.buildUserOp([transaction]); + // expect(userOp).toBeTruthy() + // }, 60000) test("should mint an NFT and pay with ERC20 - with token", async () => { + console.log("CHAIN ID 2", baseSepolia.id); + + const smartAccountAddress = await smartAccount.getAccountAddress(); + console.log(smartAccountAddress, "smartAccountAddress"); const encodedCall = encodeFunctionData({ abi: parseAbi(["function safeMint(address _to)"]), functionName: "safeMint", @@ -346,326 +129,585 @@ describe("Account:Write", async () => { to: nftAddress, // NFT address data: encodedCall } - const balance = await checkBalance(recipient, nftAddress) - const nativeBalanceBefore = await checkBalance(smartAccountAddress) - const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - const { wait } = await smartAccount.sendTransaction([transaction], { - nonceOptions, - paymasterServiceData: { - mode: PaymasterMode.ERC20, - preferredToken: token - } - }) - const { - receipt: { transactionHash }, - userOpHash, - success - } = await wait() - expect(transactionHash).toBeTruthy() - expect(userOpHash).toBeTruthy() - expect(success).toBe("true") - const nativeBalanceAfter = await checkBalance(smartAccountAddress) - expect(nativeBalanceAfter).toEqual(nativeBalanceBefore) - const tokenBalanceAfter = await checkBalance(smartAccountAddress, token) - expect(tokenBalanceAfter).toBeLessThan(tokenBalanceBefore) - const newBalance = await checkBalance(recipient, nftAddress) - expect(newBalance - balance).toBe(1n) - }, 60000) - - test("should mint an NFT and pay with ERC20 - with token selection and no maxApproval", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - preferredToken: token - } - }) - const selectedFeeQuote = feeQuotesResponse.feeQuotes?.[0] - // biome-ignore lint/style/noNonNullAssertion: <explanation> - const spender = feeQuotesResponse.tokenPaymasterAddress! - const contract = getContract({ - address: token, - abi: parseAbi(ERC20_ABI), - client: publicClient - }) - - const balance = await checkBalance(recipient, nftAddress) - const nativeBalanceBefore = await checkBalance(smartAccountAddress) - const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - const { wait } = await smartAccount.sendTransaction(transaction, { - nonceOptions, - paymasterServiceData: { - mode: PaymasterMode.ERC20, - feeQuote: selectedFeeQuote, - spender: feeQuotesResponse.tokenPaymasterAddress - } - }) - const { - receipt: { transactionHash }, - userOpHash, - success - } = await wait() - expect(userOpHash).toBeTruthy() - expect(success).toBe("true") - expect(transactionHash).toBeTruthy() - const nativeBalanceAfter = await checkBalance(smartAccountAddress) - expect(nativeBalanceAfter).toEqual(nativeBalanceBefore) - const tokenBalanceAfter = await checkBalance(smartAccountAddress, token) - expect(tokenBalanceAfter).toBeLessThan(tokenBalanceBefore) - const newBalance = await checkBalance(recipient, nftAddress) - expect(newBalance - balance).toBe(1n) - }, 60000) - - test("should increment user op verificationGasLimit by 50%. Paymaster OFF", async () => { - const transaction = { - to: recipient, - data: "0x" - } - - const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) - const userOpWithOffset = await smartAccount.buildUserOp([transaction], { - gasOffset: { - verificationGasLimitOffsetPct: 50 // 50% increase - } - }) - - const difference = Math.round( - Number(userOpWithOffset.verificationGasLimit) - - Number(userOpWithNoOffset.verificationGasLimit) - ) - const percentageValue = Math.round( - percentage(difference, Number(userOpWithNoOffset.verificationGasLimit)) - ) - - expect(percentageValue).toBe(50) - }, 60000) - - test("should increment user op gas values. Paymaster OFF", async () => { - const transaction = { - to: recipient, - data: "0x" - } - - const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) - const userOpWithOffset = await smartAccount.buildUserOp([transaction], { - gasOffset: { - verificationGasLimitOffsetPct: 50, // 50% increase - preVerificationGasOffsetPct: 100 // 100% increase - } - }) - - const vglDifference = Math.round( - Number(userOpWithOffset.verificationGasLimit) - - Number(userOpWithNoOffset.verificationGasLimit) - ) - const cgllDifference = Math.round( - Number(userOpWithOffset.callGasLimit) - - Number(userOpWithNoOffset.callGasLimit) - ) - const pvgDifference = Math.round( - Number(userOpWithOffset.preVerificationGas) - - Number(userOpWithNoOffset.preVerificationGas) - ) - - const vglPercentageValue = Math.round( - percentage(vglDifference, Number(userOpWithNoOffset.verificationGasLimit)) - ) - const cglPercentageValue = Math.round( - percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) - ) - const pvgPercentageValue = Math.round( - percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) - ) - - expect(vglPercentageValue).toBe(50) - expect(cglPercentageValue).toBe(0) - expect(pvgPercentageValue).toBe(100) - }, 60000) - - test("should increment user op gas values. Paymaster ON", async () => { - const transaction = { - to: recipient, - data: "0x" - } - - const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - gasOffset: { - verificationGasLimitOffsetPct: 0 // no increment but provided to avoid paymaster gas calculation (just for testing purposes) - } - }) // Passing gasOffset to avoid paymaster gas calculation - const userOpWithOffset = await smartAccount.buildUserOp([transaction], { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - gasOffset: { - verificationGasLimitOffsetPct: 13.2, // 13.2% increase - preVerificationGasOffsetPct: 81 // 81% increase - } - }) - - const vglDifference = Math.round( - Number(userOpWithOffset.verificationGasLimit) - - Number(userOpWithNoOffset.verificationGasLimit) - ) - const cgllDifference = Math.round( - Number(userOpWithOffset.callGasLimit) - - Number(userOpWithNoOffset.callGasLimit) - ) - const pvgDifference = Math.round( - Number(userOpWithOffset.preVerificationGas) - - Number(userOpWithNoOffset.preVerificationGas) - ) - - const vglPercentageValue = Math.round( - percentage(vglDifference, Number(userOpWithNoOffset.verificationGasLimit)) - ) - const cglPercentageValue = Math.round( - percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) - ) - const pvgPercentageValue = Math.round( - percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) - ) - - expect(vglPercentageValue).toBe(13) - expect(cglPercentageValue).toBe(0) - expect(pvgPercentageValue).toBe(81) - }, 60000) - - test("should throw if percentage given is bigger than 100. Paymaster ON", async () => { - const transaction = { - to: recipient, - data: "0x" - } - - const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - gasOffset: { - verificationGasLimitOffsetPct: 0 // no increment, just for testing purposes - } - }) // Passing gasOffset to avoid paymaster gas calculation - const userOpWithOffset = smartAccount.buildUserOp([transaction], { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - gasOffset: { - verificationGasLimitOffsetPct: 110 // 110% increase (not allowed) - } - }) - - expect(userOpWithOffset).rejects.toThrowError( - "The percentage value should be between 1 and 100." - ) - }, 60000) - - test("should increment user op gas with no paymaster using sendTransaction", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - - const { wait } = await smartAccount.sendTransaction(transaction, { - nonceOptions, - gasOffset: { - verificationGasLimitOffsetPct: 10, // 10% increase - preVerificationGasOffsetPct: 20, // 20% increase - maxFeePerGasOffsetPct: 30, // 30% increase - callGasLimitOffsetPct: 40, // 40% increase - maxPriorityFeePerGasOffsetPct: 50 // 50% increase - } - }) - const { - receipt: { transactionHash }, - userOpHash, - success - } = await wait() + const gasCost = await smartAccount.getGasEstimate([transaction]) + console.log(gasCost, "gasCost"); + + const userOpHash = await smartAccount.sendTransaction([transaction]) + console.log(userOpHash, "userOpHash"); expect(userOpHash).toBeTruthy() - expect(success).toBe("true") }, 60000) - test.skip("should transfer ownership of smart account to accountTwo", async () => { - const signerOfAccount = walletClient.account.address - const ownerOfAccount = await publicClient.readContract({ - address: DEFAULT_ECDSA_OWNERSHIP_MODULE, - abi: ECDSAModuleAbi, - functionName: "getOwner", - args: [await _smartAccount.getAccountAddress()] - }) - - expect(ownerOfAccount).toBe(signerOfAccount) - const response = await _smartAccount.transferOwnership( - newOwner, - DEFAULT_ECDSA_OWNERSHIP_MODULE as TransferOwnershipCompatibleModule, - { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - } - ) - const receipt = await response.wait() - expect(receipt.success).toBe("true") - }, 50000) - - test.skip("should revert transfer ownership with signer that is not the owner", async () => { - _smartAccount = await createSmartAccountClient({ - signer: walletClient, - paymasterUrl, - bundlerUrl, - accountAddress: smartAccountAddress - }) - - const signerOfAccount = walletClient.account.address - const ownerOfAccount = await publicClient.readContract({ - address: DEFAULT_ECDSA_OWNERSHIP_MODULE, - abi: ECDSAModuleAbi, - functionName: "getOwner", - args: [await _smartAccount.getAccountAddress()] - }) - - expect(ownerOfAccount).not.toBe(signerOfAccount) - expect( - _smartAccount.transferOwnership( - newOwner, - DEFAULT_ECDSA_OWNERSHIP_MODULE as TransferOwnershipCompatibleModule, - { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - } - ) - ).rejects.toThrowError() - }, 50000) - - test.skip("send an user op with the new owner", async () => { - _smartAccount = await createSmartAccountClient({ - signer: walletClientTwo, - paymasterUrl, - bundlerUrl, - accountAddress: smartAccountAddress - }) - const currentSmartAccountInstanceSigner = await _smartAccount - .getSigner() - .getAddress() - expect(currentSmartAccountInstanceSigner).toBe(newOwner) - const tx = { - to: nftAddress, - data: encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [smartAccountAddressTwo] - }) - } - const { wait } = await _smartAccount.sendTransaction(tx, { - nonceOptions, - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) - const response = await wait() - expect(response.success).toBe("true") - }, 50000) + // test.skip("should test the nonce on arbSepolia", async () => { + // const chain = arbitrumSepolia + // const account = privateKeyToAccount(`0x${privateKey}`) + // const signer = createWalletClient({ account, chain, transport: http() }) + // const smartAccount = await createSmartAccountClient({ + // signer, + // bundlerUrl: getBundlerUrl(chain.id) + // }) + + // const address = await smartAccount.getAccountAddress() + + // await nonZeroBalance(address) + + // const nonceBefore = await smartAccount.getNonce() + // const balanceOfRecipient = await checkBalance(recipient, undefined, chain) + + // const { wait } = await smartAccount.sendTransaction( + // { + // to: recipient, + // value: BigInt(1) + // }, + // { + // nonceOptions + // } + // ) + + // const result = await wait() + // const newBalanceOfRecipient = await checkBalance( + // recipient, + // undefined, + // chain + // ) + // const nonceAfter = await smartAccount.getNonce() + + // expect(result?.receipt?.transactionHash).toBeTruthy() + // expect(result.success).toBe("true") + // expect(newBalanceOfRecipient).toBeGreaterThan(balanceOfRecipient) + + // expect(nonceAfter - nonceBefore).toBe(1n) + // }, 10000) + + // test("should send some native token to recipient via the entrypoint", async () => { + // const balanceOfRecipient = await checkBalance(recipient) + + // // biome-ignore lint/style/useConst: <explanation> + // let userOp = await smartAccount.buildUserOp([ + // { + // to: recipient, + // value: 1n + // } + // ]) + + // userOp.signature = undefined + + // const signedUserOp = await smartAccount.signUserOp(userOp) + + // const entrypointContract = getContract({ + // address: DEFAULT_ENTRYPOINT_ADDRESS, + // abi: EntryPointAbi, + // client: { public: publicClient, wallet: walletClient } + // }) + + // const hash = await entrypointContract.write.handleOps([ + // [ + // { + // sender: signedUserOp.sender as Hex, + // nonce: BigInt(signedUserOp.nonce ?? 0), + // callGasLimit: BigInt(signedUserOp.callGasLimit ?? 0), + // verificationGasLimit: BigInt(signedUserOp.verificationGasLimit ?? 0), + // preVerificationGas: BigInt(signedUserOp.preVerificationGas ?? 0), + // maxFeePerGas: BigInt(signedUserOp.maxFeePerGas ?? 0), + // maxPriorityFeePerGas: BigInt(signedUserOp.maxPriorityFeePerGas ?? 0), + // initCode: signedUserOp.initCode as Hex, + // callData: signedUserOp.callData as Hex, + // paymasterAndData: signedUserOp.paymasterAndData as Hex, + // signature: signedUserOp.signature as Hex + // } + // ], + // sender + // ]) + + // const { status, transactionHash } = + // await publicClient.waitForTransactionReceipt({ hash }) + + // expect(status).toBe("success") + // expect(transactionHash).toBeTruthy() + + // const balanceOfRecipientAfter = await checkBalance(recipient) + + // expect(balanceOfRecipientAfter - balanceOfRecipient).toBe(1n) + // }, 50000) + + // test("should deploy a smart account with native token balance", async () => { + // const newPrivateKey = generatePrivateKey() + // const newAccount = privateKeyToAccount(newPrivateKey) + + // const newViemWallet = createWalletClient({ + // account: newAccount, + // chain, + // transport: http() + // }) + + // const newSmartAccount = await createSmartAccountClient({ + // signer: newViemWallet, + // paymasterUrl, + // bundlerUrl + // }) + + // const newSmartAccountAddress = await newSmartAccount.getAccountAddress() + + // // Setup: + // await topUp(newSmartAccountAddress, BigInt(100000000000000000)) + + // const balanceCheck = await checkBalance(newSmartAccountAddress) + + // // Test: + // const { wait } = await newSmartAccount.deploy() + // const { success } = await wait() + + // const byteCode = await publicClient.getBytecode({ + // address: newSmartAccountAddress + // }) + // expect(success).toBe("true") + // expect(byteCode).toBeTruthy() + // }, 60000) + + // test.concurrent( + // "should add a custom chain", + // async () => { + // const customChain = getCustomChain( + // "Amoy", + // polygonAmoy.id, + // polygonAmoy.rpcUrls.default.http[0], + // polygonAmoy.blockExplorers.default.url + // ) + + // const accountOne = privateKeyToAccount(`0x${privateKey}`) + // const walletClientWithCustomChain = createWalletClient({ + // account: accountOne, + // chain: customChain, + // transport: http() + // }) + + // const smartAccountCustomChain = await createSmartAccountClient({ + // signer: walletClientWithCustomChain, + // bundlerUrl, + // customChain + // }) + + // expect(smartAccountCustomChain.rpcProvider.transport.url).toBe( + // "https://rpc-amoy.polygon.technology" + // ) + // expect(walletClientWithCustomChain.chain).toEqual(customChain) + + // const { wait } = await smartAccountCustomChain.sendTransaction( + // { + // to: recipient, + // value: BigInt(1) + // }, + // { nonceOptions } + // ) + + // const { success, receipt } = await wait() + + // expect(receipt).toBeTruthy() + // expect(success).toBe("true") + // }, + // 80000 + // ) + + // testOnlyOnOptimism( + // "should send some native token to a recipient on optimism", + // async () => { + // const balanceOfRecipient = await checkBalance(recipient) + + // const { wait } = await smartAccount.sendTransaction( + // { + // to: recipient, + // value: BigInt(1) + // }, + // { nonceOptions, simulationType: "validation_and_execution" } + // ) + + // const result = await wait() + // const newBalanceOfRecipient = await checkBalance(recipient) + + // expect(result?.receipt?.transactionHash).toBeTruthy() + // expect(result.success).toBe("true") + // expect(newBalanceOfRecipient).toBeGreaterThan(balanceOfRecipient) + // }, + // 50000 + // ) + + // testOnlyOnOptimism( + // "should create a smart account with paymaster with an api key on optimism", + // async () => { + // const paymaster = smartAccount.paymaster + // expect(paymaster).not.toBeNull() + // expect(paymaster).not.toBeUndefined() + // } + // ) + + // test("should withdraw erc20 balances", async () => { + // await nonZeroBalance(smartAccountAddress, token) + + // const tokenBalanceOfSABefore = await checkBalance( + // smartAccountAddress, + // token + // ) + // const tokenBalanceOfRecipientBefore = await checkBalance(sender, token) + // const { wait } = await smartAccount.withdraw( + // [{ address: token, amount: BigInt(1), recipient: sender }], + // undefined, + // { + // nonceOptions, + // paymasterServiceData: { + // mode: PaymasterMode.SPONSORED + // } + // } + // ) + + // const { + // receipt: { transactionHash }, + // userOpHash, + // success + // } = await wait() + + // expect(userOpHash).toBeTruthy() + // expect(success).toBe("true") + // expect(transactionHash).toBeTruthy() + + // const tokenBalanceOfSAAfter = await checkBalance(smartAccountAddress, token) + // const tokenBalanceOfRecipientAfter = await checkBalance(sender, token) + + // expect(tokenBalanceOfSAAfter - tokenBalanceOfSABefore).toBe(-1n) + // expect(tokenBalanceOfRecipientAfter - tokenBalanceOfRecipientBefore).toBe( + // 1n + // ) + // }, 60000) + + // test("should mint an NFT and pay with ERC20 - with token", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall + // } + // const balance = await checkBalance(recipient, nftAddress) + // const nativeBalanceBefore = await checkBalance(smartAccountAddress) + // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) + // const { wait } = await smartAccount.sendTransaction([transaction], { + // nonceOptions, + // paymasterServiceData: { + // mode: PaymasterMode.ERC20, + // preferredToken: token + // } + // }) + // const { + // receipt: { transactionHash }, + // userOpHash, + // success + // } = await wait() + // expect(transactionHash).toBeTruthy() + // expect(userOpHash).toBeTruthy() + // expect(success).toBe("true") + // const nativeBalanceAfter = await checkBalance(smartAccountAddress) + // expect(nativeBalanceAfter).toEqual(nativeBalanceBefore) + // const tokenBalanceAfter = await checkBalance(smartAccountAddress, token) + // expect(tokenBalanceAfter).toBeLessThan(tokenBalanceBefore) + // const newBalance = await checkBalance(recipient, nftAddress) + // expect(newBalance - balance).toBe(1n) + // }, 60000) + + // test("should mint an NFT and pay with ERC20 - with token selection and no maxApproval", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall + // } + // const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { + // paymasterServiceData: { + // mode: PaymasterMode.ERC20, + // preferredToken: token + // } + // }) + // const selectedFeeQuote = feeQuotesResponse.feeQuotes?.[0] + // // biome-ignore lint/style/noNonNullAssertion: <explanation> + // const spender = feeQuotesResponse.tokenPaymasterAddress! + // const contract = getContract({ + // address: token, + // abi: parseAbi(ERC20_ABI), + // client: publicClient + // }) + + // const balance = await checkBalance(recipient, nftAddress) + // const nativeBalanceBefore = await checkBalance(smartAccountAddress) + // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) + // const { wait } = await smartAccount.sendTransaction(transaction, { + // nonceOptions, + // paymasterServiceData: { + // mode: PaymasterMode.ERC20, + // feeQuote: selectedFeeQuote, + // spender: feeQuotesResponse.tokenPaymasterAddress + // } + // }) + // const { + // receipt: { transactionHash }, + // userOpHash, + // success + // } = await wait() + // expect(userOpHash).toBeTruthy() + // expect(success).toBe("true") + // expect(transactionHash).toBeTruthy() + // const nativeBalanceAfter = await checkBalance(smartAccountAddress) + // expect(nativeBalanceAfter).toEqual(nativeBalanceBefore) + // const tokenBalanceAfter = await checkBalance(smartAccountAddress, token) + // expect(tokenBalanceAfter).toBeLessThan(tokenBalanceBefore) + // const newBalance = await checkBalance(recipient, nftAddress) + // expect(newBalance - balance).toBe(1n) + // }, 60000) + + // test("should increment user op verificationGasLimit by 50%. Paymaster OFF", async () => { + // const transaction = { + // to: recipient, + // data: "0x" + // } + + // const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) + // const userOpWithOffset = await smartAccount.buildUserOp([transaction], { + // gasOffset: { + // verificationGasLimitOffsetPct: 50 // 50% increase + // } + // }) + + // const difference = Math.round( + // Number(userOpWithOffset.verificationGasLimit) - + // Number(userOpWithNoOffset.verificationGasLimit) + // ) + // const percentageValue = Math.round( + // percentage(difference, Number(userOpWithNoOffset.verificationGasLimit)) + // ) + + // expect(percentageValue).toBe(50) + // }, 60000) + + // test("should increment user op gas values. Paymaster OFF", async () => { + // const transaction = { + // to: recipient, + // data: "0x" + // } + + // const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) + // const userOpWithOffset = await smartAccount.buildUserOp([transaction], { + // gasOffset: { + // verificationGasLimitOffsetPct: 50, // 50% increase + // preVerificationGasOffsetPct: 100 // 100% increase + // } + // }) + + // const vglDifference = Math.round( + // Number(userOpWithOffset.verificationGasLimit) - + // Number(userOpWithNoOffset.verificationGasLimit) + // ) + // const cgllDifference = Math.round( + // Number(userOpWithOffset.callGasLimit) - + // Number(userOpWithNoOffset.callGasLimit) + // ) + // const pvgDifference = Math.round( + // Number(userOpWithOffset.preVerificationGas) - + // Number(userOpWithNoOffset.preVerificationGas) + // ) + + // const vglPercentageValue = Math.round( + // percentage(vglDifference, Number(userOpWithNoOffset.verificationGasLimit)) + // ) + // const cglPercentageValue = Math.round( + // percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) + // ) + // const pvgPercentageValue = Math.round( + // percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) + // ) + + // expect(vglPercentageValue).toBe(50) + // expect(cglPercentageValue).toBe(0) + // expect(pvgPercentageValue).toBe(100) + // }, 60000) + + // test("should increment user op gas values. Paymaster ON", async () => { + // const transaction = { + // to: recipient, + // data: "0x" + // } + + // const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { + // paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + // gasOffset: { + // verificationGasLimitOffsetPct: 0 // no increment but provided to avoid paymaster gas calculation (just for testing purposes) + // } + // }) // Passing gasOffset to avoid paymaster gas calculation + // const userOpWithOffset = await smartAccount.buildUserOp([transaction], { + // paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + // gasOffset: { + // verificationGasLimitOffsetPct: 13.2, // 13.2% increase + // preVerificationGasOffsetPct: 81 // 81% increase + // } + // }) + + // const vglDifference = Math.round( + // Number(userOpWithOffset.verificationGasLimit) - + // Number(userOpWithNoOffset.verificationGasLimit) + // ) + // const cgllDifference = Math.round( + // Number(userOpWithOffset.callGasLimit) - + // Number(userOpWithNoOffset.callGasLimit) + // ) + // const pvgDifference = Math.round( + // Number(userOpWithOffset.preVerificationGas) - + // Number(userOpWithNoOffset.preVerificationGas) + // ) + + // const vglPercentageValue = Math.round( + // percentage(vglDifference, Number(userOpWithNoOffset.verificationGasLimit)) + // ) + // const cglPercentageValue = Math.round( + // percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) + // ) + // const pvgPercentageValue = Math.round( + // percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) + // ) + + // expect(vglPercentageValue).toBe(13) + // expect(cglPercentageValue).toBe(0) + // expect(pvgPercentageValue).toBe(81) + // }, 60000) + + // test("should throw if percentage given is bigger than 100. Paymaster ON", async () => { + // const transaction = { + // to: recipient, + // data: "0x" + // } + + // const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { + // paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + // gasOffset: { + // verificationGasLimitOffsetPct: 0 // no increment, just for testing purposes + // } + // }) // Passing gasOffset to avoid paymaster gas calculation + // const userOpWithOffset = smartAccount.buildUserOp([transaction], { + // paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + // gasOffset: { + // verificationGasLimitOffsetPct: 110 // 110% increase (not allowed) + // } + // }) + + // expect(userOpWithOffset).rejects.toThrowError( + // "The percentage value should be between 1 and 100." + // ) + // }, 60000) + + // test("should increment user op gas with no paymaster using sendTransaction", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall + // } + + // const { wait } = await smartAccount.sendTransaction(transaction, { + // nonceOptions, + // gasOffset: { + // verificationGasLimitOffsetPct: 10, // 10% increase + // preVerificationGasOffsetPct: 20, // 20% increase + // maxFeePerGasOffsetPct: 30, // 30% increase + // callGasLimitOffsetPct: 40, // 40% increase + // maxPriorityFeePerGasOffsetPct: 50 // 50% increase + // } + // }) + // const { + // receipt: { transactionHash }, + // userOpHash, + // success + // } = await wait() + + // expect(userOpHash).toBeTruthy() + // expect(success).toBe("true") + // }, 60000) + + // test.skip("should transfer ownership of smart account to accountTwo", async () => { + // const signerOfAccount = walletClient.account.address + // const ownerOfAccount = await publicClient.readContract({ + // address: DEFAULT_ECDSA_OWNERSHIP_MODULE, + // abi: ECDSAModuleAbi, + // functionName: "getOwner", + // args: [await _smartAccount.getAccountAddress()] + // }) + + // expect(ownerOfAccount).toBe(signerOfAccount) + // const response = await _smartAccount.transferOwnership( + // newOwner, + // DEFAULT_ECDSA_OWNERSHIP_MODULE as TransferOwnershipCompatibleModule, + // { + // paymasterServiceData: { mode: PaymasterMode.SPONSORED } + // } + // ) + // const receipt = await response.wait() + // expect(receipt.success).toBe("true") + // }, 50000) + + // test.skip("should revert transfer ownership with signer that is not the owner", async () => { + // _smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // paymasterUrl, + // bundlerUrl, + // accountAddress: smartAccountAddress + // }) + + // const signerOfAccount = walletClient.account.address + // const ownerOfAccount = await publicClient.readContract({ + // address: DEFAULT_ECDSA_OWNERSHIP_MODULE, + // abi: ECDSAModuleAbi, + // functionName: "getOwner", + // args: [await _smartAccount.getAccountAddress()] + // }) + + // expect(ownerOfAccount).not.toBe(signerOfAccount) + // expect( + // _smartAccount.transferOwnership( + // newOwner, + // DEFAULT_ECDSA_OWNERSHIP_MODULE as TransferOwnershipCompatibleModule, + // { + // paymasterServiceData: { mode: PaymasterMode.SPONSORED } + // } + // ) + // ).rejects.toThrowError() + // }, 50000) + + // test.skip("send an user op with the new owner", async () => { + // _smartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // paymasterUrl, + // bundlerUrl, + // accountAddress: smartAccountAddress + // }) + // const currentSmartAccountInstanceSigner = await _smartAccount + // .getSigner() + // .getAddress() + // expect(currentSmartAccountInstanceSigner).toBe(newOwner) + // const tx = { + // to: nftAddress, + // data: encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [smartAccountAddressTwo] + // }) + // } + // const { wait } = await _smartAccount.sendTransaction(tx, { + // nonceOptions, + // paymasterServiceData: { mode: PaymasterMode.SPONSORED } + // }) + // const response = await wait() + // expect(response.success).toBe("true") + // }, 50000) }) diff --git a/tests/utils.ts b/tests/utils.ts index 76d98544e..c8f55d358 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -13,6 +13,7 @@ import { extractChainIdFromBundlerUrl, extractChainIdFromPaymasterUrl } from "../src/bundler" +import { baseSepolia } from "viem/chains" export const getEnvVars = () => { const fields = [ @@ -69,21 +70,22 @@ export const getConfig = (): TestConfig => { const chainId = chains[0] const chain = getChain(chainId) - try { - const chainIdFromBundlerUrl = extractChainIdFromBundlerUrl(bundlerUrl) - chains.push(chainIdFromBundlerUrl) - } catch (e) {} + // try { + // const chainIdFromBundlerUrl = extractChainIdFromBundlerUrl(bundlerUrl) + // chains.push(chainIdFromBundlerUrl) + // } catch (e) {} - try { - const chainIdFromPaymasterUrl = extractChainIdFromPaymasterUrl(paymasterUrl) - chains.push(chainIdFromPaymasterUrl) - } catch (e) {} + // try { + // const chainIdFromPaymasterUrl = extractChainIdFromPaymasterUrl(paymasterUrl) + // chains.push(chainIdFromPaymasterUrl) + // } catch (e) {} - const allChainsMatch = chains.every((chain) => chain === chains[0]) + // COMMNETED in order to use pimlico bundler url + // const allChainsMatch = chains.every((chain) => chain === chains[0]) - if (!allChainsMatch) { - throw new Error("Chain IDs do not match") - } + // if (!allChainsMatch) { + // throw new Error("Chain IDs do not match") + // } return { chain, @@ -101,11 +103,12 @@ export const checkBalance = ( tokenAddress?: Hex, _chain?: Chain ) => { - const { chain: chainFromConfig } = getConfig() - const chain = _chain || chainFromConfig - + // const { chain: chainFromConfig } = getConfig() + // const chain = _chain || chainFromConfig + console.log(tokenAddress, "tokenAddress"); + const publicClient = createPublicClient({ - chain, + chain: baseSepolia, transport: http() }) @@ -189,7 +192,7 @@ export const topUp = async ( to: recipient, value: amount }) - await publicClient.waitForTransactionReceipt({ hash }) + // await publicClient.waitForTransactionReceipt({ hash }) } } diff --git a/tests/vitest.config.ts b/tests/vitest.config.ts index d7dd2a794..bc3f78afb 100644 --- a/tests/vitest.config.ts +++ b/tests/vitest.config.ts @@ -10,6 +10,10 @@ export default defineConfig({ ? ["json-summary", "json"] : ["text", "json", "html"], exclude: [ + "**/tests/bundler", + "**/tests/modules", + "**/tests/paymaster", + "**/tests/playground", "**/errors/utils.ts", "**/_cjs/**", "**/_esm/**", From 49431dd0ba5fceecbf2dae11725918c2b0f8eb23 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Wed, 12 Jun 2024 17:12:08 +0300 Subject: [PATCH 1195/1247] fix: lint fixes --- src/account/BiconomySmartAccountV2.ts | 253 ++-- src/account/abi/SmartAccount.ts | 1254 ++++++++--------- src/account/utils/Constants.ts | 9 +- src/account/utils/Types.ts | 6 +- src/account/utils/Utils.ts | 99 +- src/bundler/Bundler.ts | 102 +- src/bundler/interfaces/IBundler.ts | 2 +- src/bundler/utils/Types.ts | 14 +- src/bundler/utils/Utils.ts | 24 +- src/modules/ECDSAOwnershipValidationModule.ts | 2 +- src/modules/utils/Helper.ts | 7 +- src/paymaster/BiconomyPaymaster.ts | 3 +- tests/account/write.test.ts | 19 +- tests/utils.ts | 6 +- 14 files changed, 903 insertions(+), 897 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 664f2fd26..f046f864f 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -1,7 +1,10 @@ +import { zeroPadBytes } from "ethers" +import { getUserOperationHash } from "permissionless" import { http, type Address, type GetContractReturnType, + type Hash, type Hex, type PublicClient, concat, @@ -13,22 +16,21 @@ import { encodePacked, formatUnits, getContract, + getContractAddress, getCreate2Address, keccak256, + pad, parseAbi, parseAbiParameters, toBytes, - toHex, - getContractAddress, - Hash, - pad + toHex } from "viem" -import type { IBundler } from "../bundler/interfaces/IBundler.js" import { Bundler, - extractChainIdFromBundlerUrl, - GetUserOperationGasPriceReturnType + type GetUserOperationGasPriceReturnType, + extractChainIdFromBundlerUrl } from "../bundler/index.js" +import type { IBundler } from "../bundler/interfaces/IBundler.js" import { BaseValidationModule, type ModuleInfo, @@ -48,12 +50,12 @@ import { import { type BigNumberish, Logger, + ModuleType, type SmartAccountSigner, type StateOverrideSet, type UserOperationStruct, convertSigner, - getChain, - ModuleType + getChain } from "./" import { BaseSmartContractAccount } from "./BaseSmartContractAccount.js" import { AccountResolverAbi } from "./abi/AccountResolver.js" @@ -102,8 +104,6 @@ import { isValidRpcUrl, packUserOp } from "./utils/Utils.js" -import { getUserOperationHash } from "permissionless" -import { zeroPadBytes } from "ethers" type UserOperationKey = keyof UserOperationStruct @@ -189,7 +189,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.paymaster = biconomySmartAccountConfig.paymaster } - this.bundler = biconomySmartAccountConfig.bundler + this.bundler = biconomySmartAccountConfig.bundler const defaultFallbackHandlerAddress = this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS @@ -219,7 +219,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ) }) - this.scanForUpgradedAccountsFromV1 = biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false + this.scanForUpgradedAccountsFromV1 = + biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false this.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10n this.getAccountAddress() } @@ -716,7 +717,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const counterFactualAddress = await publicClient.readContract({ address: this.factoryAddress, - abi: parseAbi(["function computeAccountAddress(address, uint256) external view returns (address expectedAddress)"]), + abi: parseAbi([ + "function computeAccountAddress(address, uint256) external view returns (address expectedAddress)" + ]), functionName: "computeAccountAddress", args: [await this.signer.getAddress(), index] }) @@ -787,7 +790,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { if (params.moduleAddress && params.moduleSetupData) { const result = await addressResolver.read.resolveAddressesFlexibleForV2([ params.eoaAddress, - parseInt(maxIndexForScan.toString()), // TODO: SHOULD BE A BIGINT BUT REQUIRED TO BE A NUMBER FOR THE CONTRACT + Number.parseInt(maxIndexForScan.toString()), // TODO: SHOULD BE A BIGINT BUT REQUIRED TO BE A NUMBER FOR THE CONTRACT params.moduleAddress, params.moduleSetupData ]) @@ -822,9 +825,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { if (await this.isAccountDeployed()) return "0x" const factoryData = encodeFunctionData({ - abi: parseAbi(["function createAccount(address eoaOwner, uint256 index) external payable returns (address payable)"]), + abi: parseAbi([ + "function createAccount(address eoaOwner, uint256 index) external payable returns (address payable)" + ]), functionName: "createAccount", - args: [await this.signer.getAddress(), this.index] + args: [await this.signer.getAddress(), this.index] }) return concatHex([this.factoryAddress, factoryData]) @@ -853,7 +858,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ) // Encode a simple call return encodeFunctionData({ - abi: parseAbi(["function execute(bytes32 mode, bytes calldata executionCalldata) external"]), + abi: parseAbi([ + "function execute(bytes32 mode, bytes calldata executionCalldata) external" + ]), functionName: "execute", args: [mode, executionCalldata] }) @@ -967,7 +974,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ): Hex { const moduleAddressToUse = moduleAddress ?? (this.activeValidationModule.getAddress() as Hex) - console.log("moduleAddressToUse: ", moduleAddressToUse); + console.log("moduleAddressToUse: ", moduleAddressToUse) return encodeAbiParameters(parseAbiParameters("bytes, address"), [ moduleSignature, moduleAddressToUse @@ -1238,8 +1245,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { delete userOp.signature const userOperation = await this.signUserOp(userOp, params) - console.log(userOp, "userOp 213"); - + console.log(userOp, "userOp 213") + const bundlerResponse = await this.sendSignedUserOp( userOperation, params?.simulationType @@ -1288,7 +1295,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async getUserOpHash(userOp: Partial<UserOperationStruct>): Promise<Hex> { const packedUserOp = packUserOp(userOp, true) - console.log(this.entryPoint.address, BigInt(this.chainId), "ARGUMENTS FOR USER OP HASH"); + console.log( + this.entryPoint.address, + BigInt(this.chainId), + "ARGUMENTS FOR USER OP HASH" + ) const userOpHash = keccak256(packedUserOp as Hex) const enc = encodeAbiParameters( parseAbiParameters("bytes32, address, uint256"), @@ -1313,11 +1324,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const finalUserOp = userOp // if neither user sent gas fee nor the bundler, estimate gas from provider - if ( - !userOp.maxFeePerGas && - !userOp.maxPriorityFeePerGas - ) { - console.log("Using provider to estimate gas"); + if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { + console.log("Using provider to estimate gas") const feeData = await this.provider.estimateFeesPerGas() if (feeData.maxFeePerGas?.toString()) { finalUserOp.maxFeePerGas = feeData.maxFeePerGas @@ -1334,13 +1342,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } else { finalUserOp.maxPriorityFeePerGas = await this.provider.getGasPrice() } - } + } - const { - callGasLimit, - verificationGasLimit, - preVerificationGas, - } = await this.bundler.estimateUserOpGas(userOp, stateOverrideSet) + const { callGasLimit, verificationGasLimit, preVerificationGas } = + await this.bundler.estimateUserOpGas(userOp, stateOverrideSet) // COMMENTED because pimlico bundler does not estimate maxFeePerGas and maxPriorityFeePerGas // else { // finalUserOp.maxFeePerGas = @@ -1348,9 +1353,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // finalUserOp.maxPriorityFeePerGas = // toHex(Number(maxPriorityFeePerGas)) ?? userOp.maxPriorityFeePerGas // } - finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit + finalUserOp.verificationGasLimit = + verificationGasLimit ?? userOp.verificationGasLimit finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit - finalUserOp.preVerificationGas = preVerificationGas ?? userOp.preVerificationGas + finalUserOp.preVerificationGas = + preVerificationGas ?? userOp.preVerificationGas return finalUserOp } @@ -1358,7 +1365,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { override async getNonce(): Promise<bigint> { try { const address = await this.getAddress() - return await this.entryPoint.read.getNonce([address, BigInt(zeroPadBytes(this.activeValidationModule.getAddress(), 24))]) + return await this.entryPoint.read.getNonce([ + address, + BigInt(zeroPadBytes(this.activeValidationModule.getAddress(), 24)) + ]) } catch (e) { return BigInt(0) } @@ -1605,16 +1615,18 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } } - const factoryData = await this.getFactoryData(); + const factoryData = await this.getFactoryData() let userOp: Partial<UserOperationStruct> = { sender: (await this.getAccountAddress()) as Hex, nonce: nonceFromFetch, factoryData, - factory: await this.isAccountDeployed() ? undefined : this.factoryAddress, + factory: (await this.isAccountDeployed()) + ? undefined + : this.factoryAddress, callData } - console.log(userOp, "userOp"); - + console.log(userOp, "userOp") + // for this Smart Account current validation module dummy signature will be used to estimate gas userOp.signature = signature // userOp.paymasterAndData = buildUseropDto?.dummyPndOverride ?? "0x" @@ -1630,79 +1642,80 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // userOp.maxFeePerGas = gasFeeValues?.standard.maxFeePerGas // userOp.maxPriorityFeePerGas = gasFeeValues?.standard.maxPriorityFeePerGas - // if (buildUseropDto.gasOffset) { - // userOp = await this.estimateUserOpGas(userOp) - - // const { - // verificationGasLimitOffsetPct, - // preVerificationGasOffsetPct, - // callGasLimitOffsetPct, - // maxFeePerGasOffsetPct, - // maxPriorityFeePerGasOffsetPct - // } = buildUseropDto.gasOffset - // userOp.verificationGasLimit = toHex( - // Number.parseInt( - // ( - // Number(userOp.verificationGasLimit ?? 0) * - // convertToFactor(verificationGasLimitOffsetPct) - // ).toString() - // ) - // ) - // userOp.preVerificationGas = toHex( - // Number.parseInt( - // ( - // Number(userOp.preVerificationGas ?? 0) * - // convertToFactor(preVerificationGasOffsetPct) - // ).toString() - // ) - // ) - // userOp.callGasLimit = toHex( - // Number.parseInt( - // ( - // Number(userOp.callGasLimit ?? 0) * - // convertToFactor(callGasLimitOffsetPct) - // ).toString() - // ) - // ) - // userOp.maxFeePerGas = toHex( - // Number.parseInt( - // ( - // Number(userOp.maxFeePerGas ?? 0) * - // convertToFactor(maxFeePerGasOffsetPct) - // ).toString() - // ) - // ) - // userOp.maxPriorityFeePerGas = toHex( - // Number.parseInt( - // ( - // Number(userOp.maxPriorityFeePerGas ?? 0) * - // convertToFactor(maxPriorityFeePerGasOffsetPct) - // ).toString() - // ) - // ) + // if (buildUseropDto.gasOffset) { + // userOp = await this.estimateUserOpGas(userOp) - // userOp = await this.getPaymasterUserOp(userOp, { - // ...buildUseropDto.paymasterServiceData, - // calculateGasLimits: false - // }) - // return userOp - // } - // if (buildUseropDto.paymasterServiceData.calculateGasLimits === false) { - // userOp = await this.estimateUserOpGas(userOp) - // } + // const { + // verificationGasLimitOffsetPct, + // preVerificationGasOffsetPct, + // callGasLimitOffsetPct, + // maxFeePerGasOffsetPct, + // maxPriorityFeePerGasOffsetPct + // } = buildUseropDto.gasOffset + // userOp.verificationGasLimit = toHex( + // Number.parseInt( + // ( + // Number(userOp.verificationGasLimit ?? 0) * + // convertToFactor(verificationGasLimitOffsetPct) + // ).toString() + // ) + // ) + // userOp.preVerificationGas = toHex( + // Number.parseInt( + // ( + // Number(userOp.preVerificationGas ?? 0) * + // convertToFactor(preVerificationGasOffsetPct) + // ).toString() + // ) + // ) + // userOp.callGasLimit = toHex( + // Number.parseInt( + // ( + // Number(userOp.callGasLimit ?? 0) * + // convertToFactor(callGasLimitOffsetPct) + // ).toString() + // ) + // ) + // userOp.maxFeePerGas = toHex( + // Number.parseInt( + // ( + // Number(userOp.maxFeePerGas ?? 0) * + // convertToFactor(maxFeePerGasOffsetPct) + // ).toString() + // ) + // ) + // userOp.maxPriorityFeePerGas = toHex( + // Number.parseInt( + // ( + // Number(userOp.maxPriorityFeePerGas ?? 0) * + // convertToFactor(maxPriorityFeePerGasOffsetPct) + // ).toString() + // ) + // ) + + // userOp = await this.getPaymasterUserOp(userOp, { + // ...buildUseropDto.paymasterServiceData, + // calculateGasLimits: false + // }) + // return userOp + // } + // if (buildUseropDto.paymasterServiceData.calculateGasLimits === false) { + // userOp = await this.estimateUserOpGas(userOp) + // } - // userOp = await this.getPaymasterUserOp( - // userOp, - // buildUseropDto.paymasterServiceData - // ) + // userOp = await this.getPaymasterUserOp( + // userOp, + // buildUseropDto.paymasterServiceData + // ) // return userOp // } // get gas fee values from bundler - const gasFeeValues: GetUserOperationGasPriceReturnType = await this.bundler?.getGasFeeValues()! - userOp.maxFeePerGas = gasFeeValues?.fast.maxFeePerGas - userOp.maxPriorityFeePerGas = gasFeeValues?.fast.maxPriorityFeePerGas + const gasFeeValues: GetUserOperationGasPriceReturnType | undefined = + await this.bundler?.getGasFeeValues() + userOp.maxFeePerGas = gasFeeValues?.fast.maxFeePerGas ?? 0n + userOp.maxPriorityFeePerGas = gasFeeValues?.fast.maxPriorityFeePerGas ?? 0n userOp = await this.estimateUserOpGas(userOp) @@ -1924,12 +1937,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise<Hex> { this.isActiveValidationModuleDefined() - const moduleSig = (await this.signUserOpHash( - userOpHash, - params - )) as Hex + const moduleSig = (await this.signUserOpHash(userOpHash, params)) as Hex - return moduleSig; + return moduleSig } /** @@ -1976,9 +1986,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * const { success, receipt } = await wait(); * */ - public async deploy( - buildUseropDto?: BuildUserOpOptions - ): Promise<Hash> { + public async deploy(buildUseropDto?: BuildUserOpOptions): Promise<Hash> { const accountAddress = this.accountAddress ?? (await this.getAccountAddress()) @@ -2017,9 +2025,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.isDefaultValidationModuleDefined() return encodeFunctionData({ - abi: parseAbi(["function createAccount(address eoaOwner, uint256 index) external payable returns (address payable)"]), + abi: parseAbi([ + "function createAccount(address eoaOwner, uint256 index) external payable returns (address payable)" + ]), functionName: "createAccount", - args: [await this.signer.getAddress(), this.index] + args: [await this.signer.getAddress(), this.index] }) } @@ -2116,10 +2126,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return tx } - async disableModule( - prevModule: Hex, - moduleAddress: Hex - ): Promise<Hash> { + async disableModule(prevModule: Hex, moduleAddress: Hex): Promise<Hash> { const tx: Transaction = await this.getDisableModuleData( prevModule, moduleAddress @@ -2147,7 +2154,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async isModuleEnabled(moduleAddress: Hex): Promise<any> { const accountContract = await this._getAccountContract() - return await accountContract.read.isModuleInstalled([ModuleType.Validation, moduleAddress, toHex("0x")]) + return await accountContract.read.isModuleInstalled([ + ModuleType.Validation, + moduleAddress, + toHex("0x") + ]) } // Review diff --git a/src/account/abi/SmartAccount.ts b/src/account/abi/SmartAccount.ts index 96d7bd990..02bb54892 100644 --- a/src/account/abi/SmartAccount.ts +++ b/src/account/abi/SmartAccount.ts @@ -1,1061 +1,1061 @@ export const BiconomyAccountAbi = [ { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "anEntryPoint", - "type": "address" + internalType: "address", + name: "anEntryPoint", + type: "address" } ], - "stateMutability": "nonpayable", - "type": "constructor" + stateMutability: "nonpayable", + type: "constructor" }, { - "inputs": [], - "name": "AccountAccessUnauthorized", - "type": "error" + inputs: [], + name: "AccountAccessUnauthorized", + type: "error" }, { - "inputs": [], - "name": "CannotRemoveLastValidator", - "type": "error" + inputs: [], + name: "CannotRemoveLastValidator", + type: "error" }, { - "inputs": [], - "name": "EntryPointCanNotBeZero", - "type": "error" + inputs: [], + name: "EntryPointCanNotBeZero", + type: "error" }, { - "inputs": [], - "name": "ExecutionFailed", - "type": "error" + inputs: [], + name: "ExecutionFailed", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" + internalType: "bytes4", + name: "selector", + type: "bytes4" } ], - "name": "FallbackAlreadyInstalledForSelector", - "type": "error" + name: "FallbackAlreadyInstalledForSelector", + type: "error" }, { - "inputs": [], - "name": "FallbackHandlerUninstallFailed", - "type": "error" + inputs: [], + name: "FallbackHandlerUninstallFailed", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" + internalType: "bytes4", + name: "selector", + type: "bytes4" } ], - "name": "FallbackNotInstalledForSelector", - "type": "error" + name: "FallbackNotInstalledForSelector", + type: "error" }, { - "inputs": [], - "name": "FallbackSelectorForbidden", - "type": "error" + inputs: [], + name: "FallbackSelectorForbidden", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "currentHook", - "type": "address" + internalType: "address", + name: "currentHook", + type: "address" } ], - "name": "HookAlreadyInstalled", - "type": "error" + name: "HookAlreadyInstalled", + type: "error" }, { - "inputs": [], - "name": "HookPostCheckFailed", - "type": "error" + inputs: [], + name: "HookPostCheckFailed", + type: "error" }, { - "inputs": [], - "name": "ImplementationIsNotAContract", - "type": "error" + inputs: [], + name: "ImplementationIsNotAContract", + type: "error" }, { - "inputs": [], - "name": "InnerCallFailed", - "type": "error" + inputs: [], + name: "InnerCallFailed", + type: "error" }, { - "inputs": [], - "name": "InvalidImplementationAddress", - "type": "error" + inputs: [], + name: "InvalidImplementationAddress", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "module", - "type": "address" + internalType: "address", + name: "module", + type: "address" } ], - "name": "InvalidModule", - "type": "error" + name: "InvalidModule", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "moduleTypeId", - "type": "uint256" + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" } ], - "name": "InvalidModuleTypeId", - "type": "error" + name: "InvalidModuleTypeId", + type: "error" }, { - "inputs": [], - "name": "LinkedList_AlreadyInitialized", - "type": "error" + inputs: [], + name: "LinkedList_AlreadyInitialized", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "entry", - "type": "address" + internalType: "address", + name: "entry", + type: "address" } ], - "name": "LinkedList_EntryAlreadyInList", - "type": "error" + name: "LinkedList_EntryAlreadyInList", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "entry", - "type": "address" + internalType: "address", + name: "entry", + type: "address" } ], - "name": "LinkedList_InvalidEntry", - "type": "error" + name: "LinkedList_InvalidEntry", + type: "error" }, { - "inputs": [], - "name": "LinkedList_InvalidPage", - "type": "error" + inputs: [], + name: "LinkedList_InvalidPage", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "moduleTypeId", - "type": "uint256" + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" } ], - "name": "MismatchModuleTypeId", - "type": "error" + name: "MismatchModuleTypeId", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" + internalType: "bytes4", + name: "selector", + type: "bytes4" } ], - "name": "MissingFallbackHandler", - "type": "error" + name: "MissingFallbackHandler", + type: "error" }, { - "inputs": [], - "name": "ModuleAddressCanNotBeZero", - "type": "error" + inputs: [], + name: "ModuleAddressCanNotBeZero", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "moduleTypeId", - "type": "uint256" + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" }, { - "internalType": "address", - "name": "module", - "type": "address" + internalType: "address", + name: "module", + type: "address" } ], - "name": "ModuleAlreadyInstalled", - "type": "error" + name: "ModuleAlreadyInstalled", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "moduleTypeId", - "type": "uint256" + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" }, { - "internalType": "address", - "name": "module", - "type": "address" + internalType: "address", + name: "module", + type: "address" } ], - "name": "ModuleNotInstalled", - "type": "error" + name: "ModuleNotInstalled", + type: "error" }, { - "inputs": [], - "name": "NexusInitializationFailed", - "type": "error" + inputs: [], + name: "NexusInitializationFailed", + type: "error" }, { - "inputs": [], - "name": "UnauthorizedCallContext", - "type": "error" + inputs: [], + name: "UnauthorizedCallContext", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "operator", - "type": "address" + internalType: "address", + name: "operator", + type: "address" } ], - "name": "UnauthorizedOperation", - "type": "error" + name: "UnauthorizedOperation", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "CallType", - "name": "callType", - "type": "bytes1" + internalType: "CallType", + name: "callType", + type: "bytes1" } ], - "name": "UnsupportedCallType", - "type": "error" + name: "UnsupportedCallType", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "ExecType", - "name": "execType", - "type": "bytes1" + internalType: "ExecType", + name: "execType", + type: "bytes1" } ], - "name": "UnsupportedExecType", - "type": "error" + name: "UnsupportedExecType", + type: "error" }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "moduleTypeId", - "type": "uint256" + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" } ], - "name": "UnsupportedModuleType", - "type": "error" + name: "UnsupportedModuleType", + type: "error" }, { - "inputs": [], - "name": "UpgradeFailed", - "type": "error" + inputs: [], + name: "UpgradeFailed", + type: "error" }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "components": [ + components: [ { - "internalType": "address", - "name": "sender", - "type": "address" + internalType: "address", + name: "sender", + type: "address" }, { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" + internalType: "uint256", + name: "nonce", + type: "uint256" }, { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" + internalType: "bytes", + name: "initCode", + type: "bytes" }, { - "internalType": "bytes", - "name": "callData", - "type": "bytes" + internalType: "bytes", + name: "callData", + type: "bytes" }, { - "internalType": "bytes32", - "name": "accountGasLimits", - "type": "bytes32" + internalType: "bytes32", + name: "accountGasLimits", + type: "bytes32" }, { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" }, { - "internalType": "bytes32", - "name": "gasFees", - "type": "bytes32" + internalType: "bytes32", + name: "gasFees", + type: "bytes32" }, { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" + internalType: "bytes", + name: "paymasterAndData", + type: "bytes" }, { - "internalType": "bytes", - "name": "signature", - "type": "bytes" + internalType: "bytes", + name: "signature", + type: "bytes" } ], - "indexed": false, - "internalType": "struct PackedUserOperation", - "name": "userOp", - "type": "tuple" + indexed: false, + internalType: "struct PackedUserOperation", + name: "userOp", + type: "tuple" }, { - "indexed": false, - "internalType": "bytes", - "name": "innerCallRet", - "type": "bytes" + indexed: false, + internalType: "bytes", + name: "innerCallRet", + type: "bytes" } ], - "name": "Executed", - "type": "event" + name: "Executed", + type: "event" }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "uint256", - "name": "moduleTypeId", - "type": "uint256" + indexed: false, + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" }, { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" + indexed: false, + internalType: "address", + name: "module", + type: "address" } ], - "name": "ModuleInstalled", - "type": "event" + name: "ModuleInstalled", + type: "event" }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "uint256", - "name": "moduleTypeId", - "type": "uint256" + indexed: false, + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" }, { - "indexed": false, - "internalType": "address", - "name": "module", - "type": "address" + indexed: false, + internalType: "address", + name: "module", + type: "address" } ], - "name": "ModuleUninstalled", - "type": "event" + name: "ModuleUninstalled", + type: "event" }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": false, - "internalType": "uint256", - "name": "batchExecutionindex", - "type": "uint256" + indexed: false, + internalType: "uint256", + name: "batchExecutionindex", + type: "uint256" }, { - "indexed": false, - "internalType": "bytes", - "name": "result", - "type": "bytes" + indexed: false, + internalType: "bytes", + name: "result", + type: "bytes" } ], - "name": "TryExecuteUnsuccessful", - "type": "event" + name: "TryExecuteUnsuccessful", + type: "event" }, { - "anonymous": false, - "inputs": [ + anonymous: false, + inputs: [ { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" + indexed: true, + internalType: "address", + name: "implementation", + type: "address" } ], - "name": "Upgraded", - "type": "event" + name: "Upgraded", + type: "event" }, { - "stateMutability": "payable", - "type": "fallback" + stateMutability: "payable", + type: "fallback" }, { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ + inputs: [], + name: "DOMAIN_SEPARATOR", + outputs: [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" + internalType: "bytes32", + name: "", + type: "bytes32" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [], - "name": "accountId", - "outputs": [ + inputs: [], + name: "accountId", + outputs: [ { - "internalType": "string", - "name": "", - "type": "string" + internalType: "string", + name: "", + type: "string" } ], - "stateMutability": "pure", - "type": "function" + stateMutability: "pure", + type: "function" }, { - "inputs": [], - "name": "addDeposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" + inputs: [], + name: "addDeposit", + outputs: [], + stateMutability: "payable", + type: "function" }, { - "inputs": [], - "name": "eip712Domain", - "outputs": [ + inputs: [], + name: "eip712Domain", + outputs: [ { - "internalType": "bytes1", - "name": "fields", - "type": "bytes1" + internalType: "bytes1", + name: "fields", + type: "bytes1" }, { - "internalType": "string", - "name": "name", - "type": "string" + internalType: "string", + name: "name", + type: "string" }, { - "internalType": "string", - "name": "version", - "type": "string" + internalType: "string", + name: "version", + type: "string" }, { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" + internalType: "uint256", + name: "chainId", + type: "uint256" }, { - "internalType": "address", - "name": "verifyingContract", - "type": "address" + internalType: "address", + name: "verifyingContract", + type: "address" }, { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" + internalType: "bytes32", + name: "salt", + type: "bytes32" }, { - "internalType": "uint256[]", - "name": "extensions", - "type": "uint256[]" + internalType: "uint256[]", + name: "extensions", + type: "uint256[]" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [], - "name": "entryPoint", - "outputs": [ + inputs: [], + name: "entryPoint", + outputs: [ { - "internalType": "address", - "name": "", - "type": "address" + internalType: "address", + name: "", + type: "address" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "ExecutionMode", - "name": "mode", - "type": "bytes32" + internalType: "ExecutionMode", + name: "mode", + type: "bytes32" }, { - "internalType": "bytes", - "name": "executionCalldata", - "type": "bytes" + internalType: "bytes", + name: "executionCalldata", + type: "bytes" } ], - "name": "execute", - "outputs": [], - "stateMutability": "payable", - "type": "function" + name: "execute", + outputs: [], + stateMutability: "payable", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "ExecutionMode", - "name": "mode", - "type": "bytes32" + internalType: "ExecutionMode", + name: "mode", + type: "bytes32" }, { - "internalType": "bytes", - "name": "executionCalldata", - "type": "bytes" + internalType: "bytes", + name: "executionCalldata", + type: "bytes" } ], - "name": "executeFromExecutor", - "outputs": [ + name: "executeFromExecutor", + outputs: [ { - "internalType": "bytes[]", - "name": "returnData", - "type": "bytes[]" + internalType: "bytes[]", + name: "returnData", + type: "bytes[]" } ], - "stateMutability": "payable", - "type": "function" + stateMutability: "payable", + type: "function" }, { - "inputs": [ + inputs: [ { - "components": [ + components: [ { - "internalType": "address", - "name": "sender", - "type": "address" + internalType: "address", + name: "sender", + type: "address" }, { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" + internalType: "uint256", + name: "nonce", + type: "uint256" }, { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" + internalType: "bytes", + name: "initCode", + type: "bytes" }, { - "internalType": "bytes", - "name": "callData", - "type": "bytes" + internalType: "bytes", + name: "callData", + type: "bytes" }, { - "internalType": "bytes32", - "name": "accountGasLimits", - "type": "bytes32" + internalType: "bytes32", + name: "accountGasLimits", + type: "bytes32" }, { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" }, { - "internalType": "bytes32", - "name": "gasFees", - "type": "bytes32" + internalType: "bytes32", + name: "gasFees", + type: "bytes32" }, { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" + internalType: "bytes", + name: "paymasterAndData", + type: "bytes" }, { - "internalType": "bytes", - "name": "signature", - "type": "bytes" + internalType: "bytes", + name: "signature", + type: "bytes" } ], - "internalType": "struct PackedUserOperation", - "name": "userOp", - "type": "tuple" + internalType: "struct PackedUserOperation", + name: "userOp", + type: "tuple" }, { - "internalType": "bytes32", - "name": "", - "type": "bytes32" + internalType: "bytes32", + name: "", + type: "bytes32" } ], - "name": "executeUserOp", - "outputs": [], - "stateMutability": "payable", - "type": "function" + name: "executeUserOp", + outputs: [], + stateMutability: "payable", + type: "function" }, { - "inputs": [], - "name": "getActiveHook", - "outputs": [ + inputs: [], + name: "getActiveHook", + outputs: [ { - "internalType": "address", - "name": "hook", - "type": "address" + internalType: "address", + name: "hook", + type: "address" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [], - "name": "getDeposit", - "outputs": [ + inputs: [], + name: "getDeposit", + outputs: [ { - "internalType": "uint256", - "name": "result", - "type": "uint256" + internalType: "uint256", + name: "result", + type: "uint256" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "cursor", - "type": "address" + internalType: "address", + name: "cursor", + type: "address" }, { - "internalType": "uint256", - "name": "size", - "type": "uint256" + internalType: "uint256", + name: "size", + type: "uint256" } ], - "name": "getExecutorsPaginated", - "outputs": [ + name: "getExecutorsPaginated", + outputs: [ { - "internalType": "address[]", - "name": "array", - "type": "address[]" + internalType: "address[]", + name: "array", + type: "address[]" }, { - "internalType": "address", - "name": "next", - "type": "address" + internalType: "address", + name: "next", + type: "address" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "bytes4", - "name": "selector", - "type": "bytes4" + internalType: "bytes4", + name: "selector", + type: "bytes4" } ], - "name": "getFallbackHandlerBySelector", - "outputs": [ + name: "getFallbackHandlerBySelector", + outputs: [ { - "internalType": "CallType", - "name": "", - "type": "bytes1" + internalType: "CallType", + name: "", + type: "bytes1" }, { - "internalType": "address", - "name": "", - "type": "address" + internalType: "address", + name: "", + type: "address" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [], - "name": "getImplementation", - "outputs": [ + inputs: [], + name: "getImplementation", + outputs: [ { - "internalType": "address", - "name": "implementation", - "type": "address" + internalType: "address", + name: "implementation", + type: "address" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "cursor", - "type": "address" + internalType: "address", + name: "cursor", + type: "address" }, { - "internalType": "uint256", - "name": "size", - "type": "uint256" + internalType: "uint256", + name: "size", + type: "uint256" } ], - "name": "getValidatorsPaginated", - "outputs": [ + name: "getValidatorsPaginated", + outputs: [ { - "internalType": "address[]", - "name": "array", - "type": "address[]" + internalType: "address[]", + name: "array", + type: "address[]" }, { - "internalType": "address", - "name": "next", - "type": "address" + internalType: "address", + name: "next", + type: "address" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "bytes32", - "name": "structHash", - "type": "bytes32" + internalType: "bytes32", + name: "structHash", + type: "bytes32" } ], - "name": "hashTypedData", - "outputs": [ + name: "hashTypedData", + outputs: [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" + internalType: "bytes32", + name: "", + type: "bytes32" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "bytes", - "name": "initData", - "type": "bytes" + internalType: "bytes", + name: "initData", + type: "bytes" } ], - "name": "initializeAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" + name: "initializeAccount", + outputs: [], + stateMutability: "payable", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "moduleTypeId", - "type": "uint256" + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" }, { - "internalType": "address", - "name": "module", - "type": "address" + internalType: "address", + name: "module", + type: "address" }, { - "internalType": "bytes", - "name": "initData", - "type": "bytes" + internalType: "bytes", + name: "initData", + type: "bytes" } ], - "name": "installModule", - "outputs": [], - "stateMutability": "payable", - "type": "function" + name: "installModule", + outputs: [], + stateMutability: "payable", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "moduleTypeId", - "type": "uint256" + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" }, { - "internalType": "address", - "name": "module", - "type": "address" + internalType: "address", + name: "module", + type: "address" }, { - "internalType": "bytes", - "name": "additionalContext", - "type": "bytes" + internalType: "bytes", + name: "additionalContext", + type: "bytes" } ], - "name": "isModuleInstalled", - "outputs": [ + name: "isModuleInstalled", + outputs: [ { - "internalType": "bool", - "name": "", - "type": "bool" + internalType: "bool", + name: "", + type: "bool" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" + internalType: "bytes32", + name: "hash", + type: "bytes32" }, { - "internalType": "bytes", - "name": "data", - "type": "bytes" + internalType: "bytes", + name: "data", + type: "bytes" } ], - "name": "isValidSignature", - "outputs": [ + name: "isValidSignature", + outputs: [ { - "internalType": "bytes4", - "name": "", - "type": "bytes4" + internalType: "bytes4", + name: "", + type: "bytes4" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "uint192", - "name": "key", - "type": "uint192" + internalType: "uint192", + name: "key", + type: "uint192" } ], - "name": "nonce", - "outputs": [ + name: "nonce", + outputs: [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + internalType: "uint256", + name: "", + type: "uint256" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ + inputs: [], + name: "proxiableUUID", + outputs: [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" + internalType: "bytes32", + name: "", + type: "bytes32" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" + internalType: "bytes32", + name: "hash", + type: "bytes32" } ], - "name": "replaySafeHash", - "outputs": [ + name: "replaySafeHash", + outputs: [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" + internalType: "bytes32", + name: "", + type: "bytes32" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "ExecutionMode", - "name": "mode", - "type": "bytes32" + internalType: "ExecutionMode", + name: "mode", + type: "bytes32" } ], - "name": "supportsExecutionMode", - "outputs": [ + name: "supportsExecutionMode", + outputs: [ { - "internalType": "bool", - "name": "isSupported", - "type": "bool" + internalType: "bool", + name: "isSupported", + type: "bool" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "moduleTypeId", - "type": "uint256" + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" } ], - "name": "supportsModule", - "outputs": [ + name: "supportsModule", + outputs: [ { - "internalType": "bool", - "name": "", - "type": "bool" + internalType: "bool", + name: "", + type: "bool" } ], - "stateMutability": "view", - "type": "function" + stateMutability: "view", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "uint256", - "name": "moduleTypeId", - "type": "uint256" + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" }, { - "internalType": "address", - "name": "module", - "type": "address" + internalType: "address", + name: "module", + type: "address" }, { - "internalType": "bytes", - "name": "deInitData", - "type": "bytes" + internalType: "bytes", + name: "deInitData", + type: "bytes" } ], - "name": "uninstallModule", - "outputs": [], - "stateMutability": "payable", - "type": "function" + name: "uninstallModule", + outputs: [], + stateMutability: "payable", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "newImplementation", - "type": "address" + internalType: "address", + name: "newImplementation", + type: "address" }, { - "internalType": "bytes", - "name": "data", - "type": "bytes" + internalType: "bytes", + name: "data", + type: "bytes" } ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" + name: "upgradeToAndCall", + outputs: [], + stateMutability: "payable", + type: "function" }, { - "inputs": [ + inputs: [ { - "components": [ + components: [ { - "internalType": "address", - "name": "sender", - "type": "address" + internalType: "address", + name: "sender", + type: "address" }, { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" + internalType: "uint256", + name: "nonce", + type: "uint256" }, { - "internalType": "bytes", - "name": "initCode", - "type": "bytes" + internalType: "bytes", + name: "initCode", + type: "bytes" }, { - "internalType": "bytes", - "name": "callData", - "type": "bytes" + internalType: "bytes", + name: "callData", + type: "bytes" }, { - "internalType": "bytes32", - "name": "accountGasLimits", - "type": "bytes32" + internalType: "bytes32", + name: "accountGasLimits", + type: "bytes32" }, { - "internalType": "uint256", - "name": "preVerificationGas", - "type": "uint256" + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" }, { - "internalType": "bytes32", - "name": "gasFees", - "type": "bytes32" + internalType: "bytes32", + name: "gasFees", + type: "bytes32" }, { - "internalType": "bytes", - "name": "paymasterAndData", - "type": "bytes" + internalType: "bytes", + name: "paymasterAndData", + type: "bytes" }, { - "internalType": "bytes", - "name": "signature", - "type": "bytes" + internalType: "bytes", + name: "signature", + type: "bytes" } ], - "internalType": "struct PackedUserOperation", - "name": "userOp", - "type": "tuple" + internalType: "struct PackedUserOperation", + name: "userOp", + type: "tuple" }, { - "internalType": "bytes32", - "name": "userOpHash", - "type": "bytes32" + internalType: "bytes32", + name: "userOpHash", + type: "bytes32" }, { - "internalType": "uint256", - "name": "missingAccountFunds", - "type": "uint256" + internalType: "uint256", + name: "missingAccountFunds", + type: "uint256" } ], - "name": "validateUserOp", - "outputs": [ + name: "validateUserOp", + outputs: [ { - "internalType": "uint256", - "name": "validationData", - "type": "uint256" + internalType: "uint256", + name: "validationData", + type: "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + stateMutability: "nonpayable", + type: "function" }, { - "inputs": [ + inputs: [ { - "internalType": "address", - "name": "to", - "type": "address" + internalType: "address", + name: "to", + type: "address" }, { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + internalType: "uint256", + name: "amount", + type: "uint256" } ], - "name": "withdrawDepositTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" + name: "withdrawDepositTo", + outputs: [], + stateMutability: "payable", + type: "function" }, { - "stateMutability": "payable", - "type": "receive" + stateMutability: "payable", + type: "receive" } -] \ No newline at end of file +] diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index c52cd22ba..d61493cf5 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -107,10 +107,11 @@ export const ERC20_ABI = [ // BASE SEPOLIA CONTRACTS export const K1_VALIDATOR = "0x9C08e1CE188C29bAaeBc64A08cF2Ec44207749B6" export const NEXUS_IMPLEMENTATION = "0x66Ae45ad5BE4be08a70AD99e9cF41e6d6884B06F" -export const BOOTSTRAP = "0x1ad17f0Dc85Da8Ed2CBA7415D290cCb0D79355C9"; +export const BOOTSTRAP = "0x1ad17f0Dc85Da8Ed2CBA7415D290cCb0D79355C9" export const BOOTSTRAP_LIB = "0x44965180dc3F703448bDB859D9F1a55f0B8E6C8F" export const K1_VALIDATOR_FACTORY = "0xf7cF950DA05431eC1F48fD682fa993Bbaeed9a9d" -export const BICONOMY_META_FACTORY = "0x4F9218eD5329D586237B8cAFe3d8778b94874186" +export const BICONOMY_META_FACTORY = + "0x4F9218eD5329D586237B8cAFe3d8778b94874186" // export const ENTRYPOINT_ADDRESS_V07 = // "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" @@ -128,7 +129,7 @@ export const MODE_DEFAULT = "0x00000000" // 4 bytes export const UNUSED = "0x00000000" // 4 bytes export const MODE_PAYLOAD = "0x00000000000000000000000000000000000000000000" // 22 bytes -export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f"; +export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f" // address sender; // uint256 nonce; // bytes initCode; @@ -139,4 +140,4 @@ export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f"; // uint256 maxFeePerGas; // uint256 maxPriorityFeePerGas; // bytes paymasterAndData; -// bytes signature; \ No newline at end of file +// bytes signature; diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 1ce175e6b..a35b4f94b 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -1,3 +1,4 @@ +import { UndefinedInitialDataOptions } from "@tanstack/react-query" import type { Address, Chain, @@ -25,7 +26,6 @@ import type { SmartAccountData, SponsorUserOperationDto } from "../../paymaster" -import { UndefinedInitialDataOptions } from "@tanstack/react-query" export type EntryPointAddresses = Record<string, string> export type BiconomyFactories = Record<string, string> @@ -627,5 +627,5 @@ export enum ModuleType { Validation = 1, Execution = 2, Fallback = 3, - Hooks = 4, -} \ No newline at end of file + Hooks = 4 +} diff --git a/src/account/utils/Utils.ts b/src/account/utils/Utils.ts index 4c7c1468d..274179d1e 100644 --- a/src/account/utils/Utils.ts +++ b/src/account/utils/Utils.ts @@ -5,8 +5,8 @@ import { concat, encodeAbiParameters, keccak256, - parseAbiParameters, pad, + parseAbiParameters, toHex } from "viem" import type { UserOperationStruct } from "../../account" @@ -27,65 +27,56 @@ export function packUserOp( ): string { const hashedInitCode = keccak256( userOperation.factory && userOperation.factoryData - ? concat([userOperation.factory, userOperation.factoryData]) - : "0x" + ? concat([userOperation.factory, userOperation.factoryData]) + : "0x" ) const hashedCallData = keccak256(userOperation.callData ?? "0x") const hashedPaymasterAndData = keccak256( - userOperation.paymaster - ? concat([ - userOperation.paymaster, - pad( - toHex( - userOperation.paymasterVerificationGasLimit || - BigInt(0) - ), - { - size: 16 - } - ), - pad( - toHex(userOperation.paymasterPostOpGasLimit || BigInt(0)), - { - size: 16 - } - ), - userOperation.paymasterData || "0x" - ]) - : "0x" + userOperation.paymaster + ? concat([ + userOperation.paymaster, + pad(toHex(userOperation.paymasterVerificationGasLimit || BigInt(0)), { + size: 16 + }), + pad(toHex(userOperation.paymasterPostOpGasLimit || BigInt(0)), { + size: 16 + }), + userOperation.paymasterData || "0x" + ]) + : "0x" ) return encodeAbiParameters( - [ - { type: "address" }, - { type: "uint256" }, - { type: "bytes32" }, - { type: "bytes32" }, - { type: "bytes32" }, - { type: "uint256" }, - { type: "bytes32" }, - { type: "bytes32" } - ], - [ - userOperation.sender as Address, - userOperation.nonce ?? 0n, - hashedInitCode, - hashedCallData, - concat([ - pad(toHex(userOperation.verificationGasLimit ?? 0n), { - size: 16 - }), - pad(toHex(userOperation.callGasLimit ?? 0n), { size: 16 }) - ]), - userOperation.preVerificationGas ?? 0n, - concat([ - pad(toHex(userOperation.maxPriorityFeePerGas ?? 0n), { - size: 16 - }), - pad(toHex(userOperation.maxFeePerGas ?? 0n), { size: 16 }) - ]), - hashedPaymasterAndData - ] + [ + { type: "address" }, + { type: "uint256" }, + { type: "bytes32" }, + { type: "bytes32" }, + { type: "bytes32" }, + { type: "uint256" }, + { type: "bytes32" }, + { type: "bytes32" } + ], + [ + userOperation.sender as Address, + userOperation.nonce ?? 0n, + hashedInitCode, + hashedCallData, + concat([ + pad(toHex(userOperation.verificationGasLimit ?? 0n), { + size: 16 + }), + pad(toHex(userOperation.callGasLimit ?? 0n), { size: 16 }) + ]), + userOperation.preVerificationGas ?? 0n, + concat([ + pad(toHex(userOperation.maxPriorityFeePerGas ?? 0n), { + size: 16 + }), + pad(toHex(userOperation.maxFeePerGas ?? 0n), { size: 16 }) + ]), + hashedPaymasterAndData + ] ) } diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index a6288e10a..7788bade5 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -1,4 +1,4 @@ -import { http, type PublicClient, createPublicClient, Hash } from "viem" +import { http, type Hash, type PublicClient, createPublicClient } from "viem" import type { StateOverrideSet, UserOperationStruct } from "../account" import type { SimulationType } from "../account" import { HttpMethod, getChain, sendRequest } from "../account" @@ -10,9 +10,7 @@ import { UserOpWaitForTxHashIntervals, UserOpWaitForTxHashMaxDurationIntervals } from "./utils/Constants.js" -import { - getTimestampInSeconds, -} from "./utils/HelperFunction.js" +import { getTimestampInSeconds } from "./utils/HelperFunction.js" import type { BundlerConfigWithChainId, BundlerEstimateUserOpGasResponse, @@ -53,9 +51,8 @@ export class Bundler implements IBundler { private provider: PublicClient constructor(bundlerConfig: Bundlerconfig) { - const parsedChainId: number = - bundlerConfig?.chainId ?? 11155111 // TODO: remove hardcoded chainId - // || extractChainIdFromBundlerUrl(bundlerConfig.bundlerUrl) + const parsedChainId: number = bundlerConfig?.chainId ?? 11155111 // TODO: remove hardcoded chainId + // || extractChainIdFromBundlerUrl(bundlerConfig.bundlerUrl) this.bundlerConfig = { ...bundlerConfig, chainId: parsedChainId } this.provider = createPublicClient({ @@ -114,22 +111,26 @@ export class Bundler implements IBundler { // const userOp = transformUserOP(_userOp) const bundlerUrl = this.getBundlerUrl() - const response: {result: BundlerEstimateUserOpGasResponse} = await sendRequest( - { - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_estimateUserOperationGas", - params: [deepHexlify(_userOp), this.bundlerConfig.entryPointAddress], - id: getTimestampInSeconds(), - jsonrpc: "2.0" - } - }, - "Bundler" - ) + const response: { result: BundlerEstimateUserOpGasResponse } = + await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_estimateUserOperationGas", + params: [ + deepHexlify(_userOp), + this.bundlerConfig.entryPointAddress + ], + id: getTimestampInSeconds(), + jsonrpc: "2.0" + } + }, + "Bundler" + ) + + console.log(response, "response") - console.log(response, "response"); - const userOpGasResponse = response for (const key in userOpGasResponse) { if ( @@ -144,13 +145,13 @@ export class Bundler implements IBundler { preVerificationGas: BigInt(response.result.preVerificationGas || 0), verificationGasLimit: BigInt(response.result.verificationGasLimit || 0), callGasLimit: BigInt(response.result.callGasLimit || 0), - paymasterVerificationGasLimit: - response.result.paymasterVerificationGasLimit - ? BigInt(response.result.paymasterVerificationGasLimit) - : undefined, + paymasterVerificationGasLimit: response.result + .paymasterVerificationGasLimit + ? BigInt(response.result.paymasterVerificationGasLimit) + : undefined, paymasterPostOpGasLimit: response.result.paymasterPostOpGasLimit - ? BigInt(response.result.paymasterPostOpGasLimit) - : undefined + ? BigInt(response.result.paymasterPostOpGasLimit) + : undefined } } @@ -166,7 +167,7 @@ export class Bundler implements IBundler { ): Promise<Hash> { const params = [deepHexlify(_userOp), this.bundlerConfig.entryPointAddress] const bundlerUrl = this.getBundlerUrl() - const sendUserOperationResponse: {result: Hash} = await sendRequest( + const sendUserOperationResponse: { result: Hash } = await sendRequest( { url: bundlerUrl, method: HttpMethod.Post, @@ -180,7 +181,7 @@ export class Bundler implements IBundler { "Bundler" ) - console.log(sendUserOperationResponse); + console.log(sendUserOperationResponse) return sendUserOperationResponse.result } @@ -265,32 +266,35 @@ export class Bundler implements IBundler { */ async getGasFeeValues(): Promise<GetUserOperationGasPriceReturnType> { const bundlerUrl = this.getBundlerUrl() - const response: {result: GetUserOperationGasPriceReturnType} = await sendRequest( - { - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "pimlico_getUserOperationGasPrice", - params: [], - id: getTimestampInSeconds(), - jsonrpc: "2.0" - } - }, - "Bundler" - ) + const response: { result: GetUserOperationGasPriceReturnType } = + await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "pimlico_getUserOperationGasPrice", + params: [], + id: getTimestampInSeconds(), + jsonrpc: "2.0" + } + }, + "Bundler" + ) return { slow: { - maxFeePerGas: BigInt(response.result.slow.maxFeePerGas), - maxPriorityFeePerGas: BigInt(response.result.slow.maxPriorityFeePerGas) + maxFeePerGas: BigInt(response.result.slow.maxFeePerGas), + maxPriorityFeePerGas: BigInt(response.result.slow.maxPriorityFeePerGas) }, standard: { - maxFeePerGas: BigInt(response.result.standard.maxFeePerGas), - maxPriorityFeePerGas: BigInt(response.result.standard.maxPriorityFeePerGas) + maxFeePerGas: BigInt(response.result.standard.maxFeePerGas), + maxPriorityFeePerGas: BigInt( + response.result.standard.maxPriorityFeePerGas + ) }, fast: { - maxFeePerGas: BigInt(response.result.fast.maxFeePerGas), - maxPriorityFeePerGas: BigInt(response.result.fast.maxPriorityFeePerGas) + maxFeePerGas: BigInt(response.result.fast.maxFeePerGas), + maxPriorityFeePerGas: BigInt(response.result.fast.maxPriorityFeePerGas) } } } diff --git a/src/bundler/interfaces/IBundler.ts b/src/bundler/interfaces/IBundler.ts index 1c257b3cd..c90efc926 100644 --- a/src/bundler/interfaces/IBundler.ts +++ b/src/bundler/interfaces/IBundler.ts @@ -1,4 +1,4 @@ -import { Hash } from "viem" +import type { Hash } from "viem" import type { SimulationType } from "../../account" import type { StateOverrideSet, UserOperationStruct } from "../../account" import type { diff --git a/src/bundler/utils/Types.ts b/src/bundler/utils/Types.ts index c61094c1c..65583621b 100644 --- a/src/bundler/utils/Types.ts +++ b/src/bundler/utils/Types.ts @@ -125,16 +125,16 @@ export type GasFeeValues = { export type GetUserOperationGasPriceReturnType = { slow: { - maxFeePerGas: bigint - maxPriorityFeePerGas: bigint + maxFeePerGas: bigint + maxPriorityFeePerGas: bigint } standard: { - maxFeePerGas: bigint - maxPriorityFeePerGas: bigint + maxFeePerGas: bigint + maxPriorityFeePerGas: bigint } fast: { - maxFeePerGas: bigint - maxPriorityFeePerGas: bigint + maxFeePerGas: bigint + maxPriorityFeePerGas: bigint } } @@ -144,4 +144,4 @@ export type BundlerEstimateUserOpGasResponse = { callGasLimit?: Hex | null paymasterVerificationGasLimit?: Hex | null paymasterPostOpGasLimit?: Hex | null -} \ No newline at end of file +} diff --git a/src/bundler/utils/Utils.ts b/src/bundler/utils/Utils.ts index 655993300..d9ae3321e 100644 --- a/src/bundler/utils/Utils.ts +++ b/src/bundler/utils/Utils.ts @@ -26,28 +26,28 @@ export const extractChainIdFromPaymasterUrl = (url: string): number => { export function deepHexlify(obj: any): any { if (typeof obj === "function") { - return undefined + return undefined } if (obj == null || typeof obj === "string" || typeof obj === "boolean") { - return obj + return obj } if (typeof obj === "bigint") { - return toHex(obj) + return toHex(obj) } if (obj._isBigNumber != null || typeof obj !== "object") { - return toHex(obj).replace(/^0x0/, "0x") + return toHex(obj).replace(/^0x0/, "0x") } if (Array.isArray(obj)) { - return obj.map((member) => deepHexlify(member)) + return obj.map((member) => deepHexlify(member)) } return Object.keys(obj).reduce( - // biome-ignore lint/suspicious/noExplicitAny: it's a recursive function, so it's hard to type - (set: any, key: string) => { - set[key] = deepHexlify(obj[key]) - return set - }, - {} + // biome-ignore lint/suspicious/noExplicitAny: it's a recursive function, so it's hard to type + (set: any, key: string) => { + set[key] = deepHexlify(obj[key]) + return set + }, + {} ) -} \ No newline at end of file +} diff --git a/src/modules/ECDSAOwnershipValidationModule.ts b/src/modules/ECDSAOwnershipValidationModule.ts index 835950e98..e4f028b7e 100644 --- a/src/modules/ECDSAOwnershipValidationModule.ts +++ b/src/modules/ECDSAOwnershipValidationModule.ts @@ -89,7 +89,7 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { } async signUserOpHash(userOpHash: string): Promise<Hex> { - const sig = await this.signer.signMessage({raw: userOpHash as Hex}) + const sig = await this.signer.signMessage({ raw: userOpHash as Hex }) return sig } diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index 43784b845..e049c4fbf 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -103,8 +103,7 @@ function packUserOp( op: Partial<UserOperationStruct>, forSignature = true ): Hex { - if (!op.callData) - throw new Error("Missing userOp properties") + if (!op.callData) throw new Error("Missing userOp properties") if (forSignature) { return encodeAbiParameters( parseAbiParameters( @@ -114,7 +113,7 @@ function packUserOp( op.sender ?? "0x", BigInt(op.nonce ?? 0n), keccak256(op.initCode ?? "0x"), - keccak256(op.callData ), + keccak256(op.callData), BigInt(op.callGasLimit ?? 0n), BigInt(op.verificationGasLimit ?? 0n), BigInt(op.preVerificationGas ?? 0n), @@ -133,7 +132,7 @@ function packUserOp( op.sender ?? "0x", BigInt(op.nonce ?? 0n), keccak256(op.initCode ?? "0x"), - keccak256(op.callData ), + keccak256(op.callData), BigInt(op.callGasLimit ?? 0n), BigInt(op.verificationGasLimit ?? 0n), BigInt(op.preVerificationGas ?? 0n), diff --git a/src/paymaster/BiconomyPaymaster.ts b/src/paymaster/BiconomyPaymaster.ts index 849301b3d..423b23ba5 100644 --- a/src/paymaster/BiconomyPaymaster.ts +++ b/src/paymaster/BiconomyPaymaster.ts @@ -370,8 +370,7 @@ export class BiconomyPaymaster response.result.preVerificationGas ?? userOp.preVerificationGas const verificationGasLimit = response.result.verificationGasLimit ?? userOp.verificationGasLimit - const callGasLimit = - response.result.callGasLimit ?? userOp.callGasLimit + const callGasLimit = response.result.callGasLimit ?? userOp.callGasLimit return { paymasterAndData: paymasterAndData, preVerificationGas: preVerificationGas, diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index e6c54fc2c..b32e23813 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -68,9 +68,10 @@ describe("Account:Write", async () => { }) ] - let smartAccount = await createSmartAccountClient({ + const smartAccount = await createSmartAccountClient({ signer: walletClient, - bundlerUrl: "https://api.pimlico.io/v2/84532/rpc?apikey=22c48af7-4886-4c7d-8d4c-5d50262a23f3" + bundlerUrl: + "https://api.pimlico.io/v2/84532/rpc?apikey=22c48af7-4886-4c7d-8d4c-5d50262a23f3" // accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" }) @@ -116,10 +117,10 @@ describe("Account:Write", async () => { // }, 60000) test("should mint an NFT and pay with ERC20 - with token", async () => { - console.log("CHAIN ID 2", baseSepolia.id); - - const smartAccountAddress = await smartAccount.getAccountAddress(); - console.log(smartAccountAddress, "smartAccountAddress"); + console.log("CHAIN ID 2", baseSepolia.id) + + const smartAccountAddress = await smartAccount.getAccountAddress() + console.log(smartAccountAddress, "smartAccountAddress") const encodedCall = encodeFunctionData({ abi: parseAbi(["function safeMint(address _to)"]), functionName: "safeMint", @@ -130,10 +131,10 @@ describe("Account:Write", async () => { data: encodedCall } const gasCost = await smartAccount.getGasEstimate([transaction]) - console.log(gasCost, "gasCost"); - + console.log(gasCost, "gasCost") + const userOpHash = await smartAccount.sendTransaction([transaction]) - console.log(userOpHash, "userOpHash"); + console.log(userOpHash, "userOpHash") expect(userOpHash).toBeTruthy() }, 60000) diff --git a/tests/utils.ts b/tests/utils.ts index c8f55d358..63e0399c1 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -7,13 +7,13 @@ import { parseAbi } from "viem" import { privateKeyToAccount } from "viem/accounts" +import { baseSepolia } from "viem/chains" import { Logger } from "../src/account/utils/Logger" import { getChain } from "../src/account/utils/getChain" import { extractChainIdFromBundlerUrl, extractChainIdFromPaymasterUrl } from "../src/bundler" -import { baseSepolia } from "viem/chains" export const getEnvVars = () => { const fields = [ @@ -105,8 +105,8 @@ export const checkBalance = ( ) => { // const { chain: chainFromConfig } = getConfig() // const chain = _chain || chainFromConfig - console.log(tokenAddress, "tokenAddress"); - + console.log(tokenAddress, "tokenAddress") + const publicClient = createPublicClient({ chain: baseSepolia, transport: http() From 21a693f132fc3cca1472f9ee4d063ef44757afdc Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Thu, 13 Jun 2024 13:37:27 +0300 Subject: [PATCH 1196/1247] refactor: refactor calldata encoding --- src/account/BaseSmartContractAccount.ts | 6 +- src/account/BiconomySmartAccountV2.ts | 137 +++++++----------------- src/account/utils/Types.ts | 4 +- src/bundler/utils/Constants.ts | 19 ++++ src/bundler/utils/Types.ts | 27 +++++ 5 files changed, 90 insertions(+), 103 deletions(-) diff --git a/src/account/BaseSmartContractAccount.ts b/src/account/BaseSmartContractAccount.ts index 485f43f48..38f05fb43 100644 --- a/src/account/BaseSmartContractAccount.ts +++ b/src/account/BaseSmartContractAccount.ts @@ -90,11 +90,7 @@ export abstract class BaseSmartContractAccount< * @param data -- equivalent to `data` in a normal transaction * @returns abi encoded function data for a call to your contract's `execute` method */ - abstract encodeExecute( - target: string, - value: bigint, - data: string - ): Promise<Hash> + abstract encodeExecute(Transaction): Promise<Hash> /** * this should return an ERC-191 compliant message and is used to sign UO Hashes diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index f046f864f..17c316e92 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -28,7 +28,8 @@ import { import { Bundler, type GetUserOperationGasPriceReturnType, - extractChainIdFromBundlerUrl + extractChainIdFromBundlerUrl, + Executions } from "../bundler/index.js" import type { IBundler } from "../bundler/interfaces/IBundler.js" import { @@ -104,6 +105,7 @@ import { isValidRpcUrl, packUserOp } from "./utils/Utils.js" +import { EXECUTE_BATCH, EXECUTE_SINGLE } from "../bundler/utils/Constants.js" type UserOperationKey = keyof UserOperationStruct @@ -842,19 +844,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param data represent data associated with transaction * @returns encoded data for execute function */ - async encodeExecute(to: Hex, value: bigint, data: Hex): Promise<Hex> { + async encodeExecute(transaction: Transaction): Promise<Hex> { // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; - const mode = concatHex([ - EXECTYPE_DEFAULT, - CALLTYPE_SINGLE, - UNUSED, - MODE_DEFAULT, - MODE_PAYLOAD - ]) + const mode = EXECUTE_SINGLE const executionCalldata = encodePacked( ["address", "uint256", "bytes"], - [to, value, data] + [transaction.to, BigInt(transaction.value ?? 0n), transaction.data ?? "0x"] ) // Encode a simple call return encodeFunctionData({ @@ -873,33 +869,22 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param data represent array of data associated with each transaction * @returns encoded data for executeBatch function */ - async encodeExecuteBatch( - to: Array<Hex>, - value: Array<bigint>, - data: Array<Hex> - ): Promise<Hex> { - return encodeFunctionData({ - abi: BiconomyAccountAbi, - functionName: "executeBatch_y6U", - args: [to, value, data] - }) - } - - override async encodeBatchExecute( - txs: BatchUserOperationCallData - ): Promise<Hex> { - const [targets, datas, value] = txs.reduce( - (accum, curr) => { - accum[0].push(curr.target) - accum[1].push(curr.data) - accum[2].push(curr.value || BigInt(0)) + async encodeExecuteBatch(transactions: Transaction[]): Promise<Hex> { + // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; + const mode = EXECUTE_BATCH - return accum - }, - [[], [], []] as [Hex[], Hex[], bigint[]] + const executionCalldata = encodePacked( + [Executions], + [transactions] ) - - return this.encodeExecuteBatch(targets, value, datas) + // Encode a simple call + return encodeFunctionData({ + abi: parseAbi([ + "function execute(bytes32 mode, bytes calldata executionCalldata) external" + ]), + functionName: "execute", + args: [mode, executionCalldata] + }) } // dummy signature depends on the validation module supplied. @@ -1367,7 +1352,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const address = await this.getAddress() return await this.entryPoint.read.getNonce([ address, - BigInt(zeroPadBytes(this.activeValidationModule.getAddress(), 24)) + BigInt(zeroPadBytes(this.activeValidationModule.getAddress(), 24)) // TODO: Use viem instead of ethers ]) } catch (e) { return BigInt(0) @@ -1584,21 +1569,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { transactions: Transaction[], buildUseropDto?: BuildUserOpOptions ): Promise<Partial<UserOperationStruct>> { - const to = transactions.map((element: Transaction) => element.to as Hex) - const data = transactions.map( - (element: Transaction) => (element.data as Hex) ?? "0x" - ) - const value = transactions.map( - (element: Transaction) => (element.value as bigint) ?? BigInt(0) - ) - - const initCodeFetchPromise = this.getInitCode() const dummySignatureFetchPromise = this.getDummySignatures( buildUseropDto?.params ) - const [nonceFromFetch, initCode, signature] = await Promise.all([ + const [nonceFromFetch, signature] = await Promise.all([ this.getBuildUserOpNonce(buildUseropDto?.nonceOptions), - initCodeFetchPromise, dummySignatureFetchPromise ]) @@ -1608,10 +1583,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { let callData: Hex = "0x" if (!buildUseropDto?.useEmptyDeployCallData) { if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { - callData = await this.encodeExecuteBatch(to, value, data) + callData = await this.encodeExecuteBatch(transactions) } else { // transactions.length must be 1 - callData = await this.encodeExecute(to[0], value[0], data[0]) + callData = await this.encodeExecute(transactions[0]) } } @@ -1625,7 +1600,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { : this.factoryAddress, callData } - console.log(userOp, "userOp") // for this Smart Account current validation module dummy signature will be used to estimate gas userOp.signature = signature @@ -1828,11 +1802,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ): Promise<Partial<UserOperationStruct>> { this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest) try { - let batchTo: Array<Hex> = [] - let batchValue: Array<bigint> = [] - let batchData: Array<Hex> = [] - - let newCallData = userOp.callData Logger.warn( "Received information about fee token address and quote ", tokenPaymasterRequest.toString() @@ -1860,7 +1829,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const decodedSmartAccountData = decodeFunctionData({ abi: BiconomyAccountAbi, - data: userOp.callData as Hex + data: userOp.callData as Hex ?? "0x" }) if (!decodedSmartAccountData) { @@ -1869,59 +1838,35 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ) } - const smartAccountExecFunctionName = - decodedSmartAccountData.functionName + const smartAccountExecFunctionName = decodedSmartAccountData.functionName Logger.warn( `Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2` ) - if ( - smartAccountExecFunctionName === "execute" || - smartAccountExecFunctionName === "execute_ncC" - ) { - const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args - const toOriginal = methodArgsSmartWalletExecuteCall[0] - const valueOriginal = methodArgsSmartWalletExecuteCall[1] - const dataOriginal = methodArgsSmartWalletExecuteCall[2] - - batchTo.push(toOriginal) - batchValue.push(valueOriginal) - batchData.push(dataOriginal) - } else if ( - smartAccountExecFunctionName === "executeBatch" || - smartAccountExecFunctionName === "executeBatch_y6U" - ) { - const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args - batchTo = [...methodArgsSmartWalletExecuteCall[0]] - batchValue = [...methodArgsSmartWalletExecuteCall[1]] - batchData = [...methodArgsSmartWalletExecuteCall[2]] - } + let initialTransaction: Transaction = {to: "0x", data: "0x", value: 0n}; if ( - approvalRequest.to && - approvalRequest.data && - approvalRequest.value + smartAccountExecFunctionName === "execute" ) { - batchTo = [approvalRequest.to as Hex, ...batchTo] - batchValue = [ - BigInt(Number(approvalRequest.value.toString())), - ...batchValue - ] - batchData = [approvalRequest.data as Hex, ...batchData] - - newCallData = await this.encodeExecuteBatch( - batchTo, - batchValue, - batchData + const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args ?? [] + const toOriginal = methodArgsSmartWalletExecuteCall[0] as Hex ?? "0x" + const valueOriginal = methodArgsSmartWalletExecuteCall[1] as bigint ?? 0n + const dataOriginal = methodArgsSmartWalletExecuteCall[2] as Hex ?? "0x" + + initialTransaction.to = toOriginal; + initialTransaction.value = valueOriginal; + initialTransaction.data = dataOriginal; + } else { + throw new Error( + `Unsupported method call: ${smartAccountExecFunctionName}` ) } + const finalUserOp: Partial<UserOperationStruct> = { ...userOp, - callData: newCallData + callData: await this.encodeExecuteBatch([approvalRequest, initialTransaction]), } - // Optionally Requesting to update gas limits again (especially callGasLimit needs to be re-calculated) - return finalUserOp } } catch (error) { diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index a35b4f94b..37f055632 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -345,12 +345,12 @@ export type SmartAccountInfo = { export type ValueOrData = RequireAtLeastOne< { value: BigNumberish | string - data: string + data: Hex }, "value" | "data" > export type Transaction = { - to: string + to: Hex } & ValueOrData export type SupportedToken = Omit< diff --git a/src/bundler/utils/Constants.ts b/src/bundler/utils/Constants.ts index 72b96d71d..687eb8c6e 100644 --- a/src/bundler/utils/Constants.ts +++ b/src/bundler/utils/Constants.ts @@ -1,3 +1,6 @@ +import { concat } from "viem" +import { CALLTYPE_BATCH, CALLTYPE_SINGLE, EXECTYPE_DEFAULT, MODE_DEFAULT, MODE_PAYLOAD, UNUSED } from "./Types" + export const UserOpReceiptIntervals: { [key in number]?: number } = { [1]: 10000 } @@ -30,3 +33,19 @@ export const DEFAULT_ENTRYPOINT_ADDRESS = "0x0000000071727De22E5E9d8BAf0edAc6f37da032" export const SDK_VERSION = "4.4.5" + +export const EXECUTE_SINGLE = concat([ + CALLTYPE_SINGLE, + EXECTYPE_DEFAULT, + MODE_DEFAULT, + UNUSED, + MODE_PAYLOAD, +]) + +export const EXECUTE_BATCH = concat([ + CALLTYPE_BATCH, + EXECTYPE_DEFAULT, + MODE_DEFAULT, + UNUSED, + MODE_PAYLOAD, +]); diff --git a/src/bundler/utils/Types.ts b/src/bundler/utils/Types.ts index 65583621b..4470e0eff 100644 --- a/src/bundler/utils/Types.ts +++ b/src/bundler/utils/Types.ts @@ -1,5 +1,6 @@ import type { Chain, Hex } from "viem" import type { UserOperationStruct } from "../../account" +import { ParamType } from "ethers" export type Bundlerconfig = { bundlerUrl: string @@ -145,3 +146,29 @@ export type BundlerEstimateUserOpGasResponse = { paymasterVerificationGasLimit?: Hex | null paymasterPostOpGasLimit?: Hex | null } + +// define mode and exec type enums +export const CALLTYPE_SINGLE = "0x00"; // 1 byte +export const CALLTYPE_BATCH = "0x01"; // 1 byte +export const EXECTYPE_DEFAULT = "0x00"; // 1 byte +export const EXECTYPE_TRY = "0x01"; // 1 byte +export const EXECTYPE_DELEGATE = "0xFF"; // 1 byte +export const MODE_DEFAULT = "0x00000000"; // 4 bytes +export const UNUSED = "0x00000000"; // 4 bytes +export const MODE_PAYLOAD = "0x00000000000000000000000000000000000000000000"; // 22 bytes +export const ERC1271_MAGICVALUE = "0x1626ba7e"; +export const ERC1271_INVALID = "0xffffffff"; + +export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f"; + +export const Executions = ParamType.from({ + type: "tuple(address,uint256,bytes)[]", + baseType: "tuple", + name: "executions", + arrayLength: null, + components: [ + { name: "target", type: "address" }, + { name: "value", type: "uint256" }, + { name: "callData", type: "bytes" }, + ], +}); \ No newline at end of file From 1d8e6512a5be7a753f63e9ae07ece6caca18b58b Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Thu, 13 Jun 2024 13:37:54 +0300 Subject: [PATCH 1197/1247] refactor: calldata encoding and types --- src/account/BiconomySmartAccountV2.ts | 59 ++++++++++++++++----------- src/bundler/utils/Constants.ts | 15 +++++-- src/bundler/utils/Types.ts | 32 +++++++-------- 3 files changed, 62 insertions(+), 44 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 17c316e92..12f67476b 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -27,11 +27,12 @@ import { } from "viem" import { Bundler, + Executions, type GetUserOperationGasPriceReturnType, - extractChainIdFromBundlerUrl, - Executions + extractChainIdFromBundlerUrl } from "../bundler/index.js" import type { IBundler } from "../bundler/interfaces/IBundler.js" +import { EXECUTE_BATCH, EXECUTE_SINGLE } from "../bundler/utils/Constants.js" import { BaseValidationModule, type ModuleInfo, @@ -105,7 +106,6 @@ import { isValidRpcUrl, packUserOp } from "./utils/Utils.js" -import { EXECUTE_BATCH, EXECUTE_SINGLE } from "../bundler/utils/Constants.js" type UserOperationKey = keyof UserOperationStruct @@ -850,7 +850,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const executionCalldata = encodePacked( ["address", "uint256", "bytes"], - [transaction.to, BigInt(transaction.value ?? 0n), transaction.data ?? "0x"] + [ + transaction.to, + BigInt(transaction.value ?? 0n), + transaction.data ?? "0x" + ] ) // Encode a simple call return encodeFunctionData({ @@ -873,10 +877,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; const mode = EXECUTE_BATCH - const executionCalldata = encodePacked( - [Executions], - [transactions] - ) + const executionCalldata = encodePacked([Executions], [transactions]) // Encode a simple call return encodeFunctionData({ abi: parseAbi([ @@ -1829,7 +1830,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const decodedSmartAccountData = decodeFunctionData({ abi: BiconomyAccountAbi, - data: userOp.callData as Hex ?? "0x" + data: (userOp.callData as Hex) ?? "0x" }) if (!decodedSmartAccountData) { @@ -1838,33 +1839,43 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ) } - const smartAccountExecFunctionName = decodedSmartAccountData.functionName + const smartAccountExecFunctionName = + decodedSmartAccountData.functionName Logger.warn( `Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2` ) - let initialTransaction: Transaction = {to: "0x", data: "0x", value: 0n}; - if ( - smartAccountExecFunctionName === "execute" - ) { - const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args ?? [] - const toOriginal = methodArgsSmartWalletExecuteCall[0] as Hex ?? "0x" - const valueOriginal = methodArgsSmartWalletExecuteCall[1] as bigint ?? 0n - const dataOriginal = methodArgsSmartWalletExecuteCall[2] as Hex ?? "0x" - - initialTransaction.to = toOriginal; - initialTransaction.value = valueOriginal; - initialTransaction.data = dataOriginal; + const initialTransaction: Transaction = { + to: "0x", + data: "0x", + value: 0n + } + if (smartAccountExecFunctionName === "execute") { + const methodArgsSmartWalletExecuteCall = + decodedSmartAccountData.args ?? [] + const toOriginal = + (methodArgsSmartWalletExecuteCall[0] as Hex) ?? "0x" + const valueOriginal = + (methodArgsSmartWalletExecuteCall[1] as bigint) ?? 0n + const dataOriginal = + (methodArgsSmartWalletExecuteCall[2] as Hex) ?? "0x" + + initialTransaction.to = toOriginal + initialTransaction.value = valueOriginal + initialTransaction.data = dataOriginal } else { throw new Error( `Unsupported method call: ${smartAccountExecFunctionName}` ) } - + const finalUserOp: Partial<UserOperationStruct> = { ...userOp, - callData: await this.encodeExecuteBatch([approvalRequest, initialTransaction]), + callData: await this.encodeExecuteBatch([ + approvalRequest, + initialTransaction + ]) } return finalUserOp diff --git a/src/bundler/utils/Constants.ts b/src/bundler/utils/Constants.ts index 687eb8c6e..8f0a36b46 100644 --- a/src/bundler/utils/Constants.ts +++ b/src/bundler/utils/Constants.ts @@ -1,5 +1,12 @@ import { concat } from "viem" -import { CALLTYPE_BATCH, CALLTYPE_SINGLE, EXECTYPE_DEFAULT, MODE_DEFAULT, MODE_PAYLOAD, UNUSED } from "./Types" +import { + CALLTYPE_BATCH, + CALLTYPE_SINGLE, + EXECTYPE_DEFAULT, + MODE_DEFAULT, + MODE_PAYLOAD, + UNUSED +} from "./Types" export const UserOpReceiptIntervals: { [key in number]?: number } = { [1]: 10000 @@ -39,7 +46,7 @@ export const EXECUTE_SINGLE = concat([ EXECTYPE_DEFAULT, MODE_DEFAULT, UNUSED, - MODE_PAYLOAD, + MODE_PAYLOAD ]) export const EXECUTE_BATCH = concat([ @@ -47,5 +54,5 @@ export const EXECUTE_BATCH = concat([ EXECTYPE_DEFAULT, MODE_DEFAULT, UNUSED, - MODE_PAYLOAD, -]); + MODE_PAYLOAD +]) diff --git a/src/bundler/utils/Types.ts b/src/bundler/utils/Types.ts index 4470e0eff..a18a7d9f0 100644 --- a/src/bundler/utils/Types.ts +++ b/src/bundler/utils/Types.ts @@ -1,6 +1,6 @@ +import { ParamType } from "ethers" import type { Chain, Hex } from "viem" import type { UserOperationStruct } from "../../account" -import { ParamType } from "ethers" export type Bundlerconfig = { bundlerUrl: string @@ -148,18 +148,18 @@ export type BundlerEstimateUserOpGasResponse = { } // define mode and exec type enums -export const CALLTYPE_SINGLE = "0x00"; // 1 byte -export const CALLTYPE_BATCH = "0x01"; // 1 byte -export const EXECTYPE_DEFAULT = "0x00"; // 1 byte -export const EXECTYPE_TRY = "0x01"; // 1 byte -export const EXECTYPE_DELEGATE = "0xFF"; // 1 byte -export const MODE_DEFAULT = "0x00000000"; // 4 bytes -export const UNUSED = "0x00000000"; // 4 bytes -export const MODE_PAYLOAD = "0x00000000000000000000000000000000000000000000"; // 22 bytes -export const ERC1271_MAGICVALUE = "0x1626ba7e"; -export const ERC1271_INVALID = "0xffffffff"; - -export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f"; +export const CALLTYPE_SINGLE = "0x00" // 1 byte +export const CALLTYPE_BATCH = "0x01" // 1 byte +export const EXECTYPE_DEFAULT = "0x00" // 1 byte +export const EXECTYPE_TRY = "0x01" // 1 byte +export const EXECTYPE_DELEGATE = "0xFF" // 1 byte +export const MODE_DEFAULT = "0x00000000" // 4 bytes +export const UNUSED = "0x00000000" // 4 bytes +export const MODE_PAYLOAD = "0x00000000000000000000000000000000000000000000" // 22 bytes +export const ERC1271_MAGICVALUE = "0x1626ba7e" +export const ERC1271_INVALID = "0xffffffff" + +export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f" export const Executions = ParamType.from({ type: "tuple(address,uint256,bytes)[]", @@ -169,6 +169,6 @@ export const Executions = ParamType.from({ components: [ { name: "target", type: "address" }, { name: "value", type: "uint256" }, - { name: "callData", type: "bytes" }, - ], -}); \ No newline at end of file + { name: "callData", type: "bytes" } + ] +}) From 3d6f494e7dc9b9e452d1050ce39446da9f45939a Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Thu, 13 Jun 2024 18:04:16 +0300 Subject: [PATCH 1198/1247] refactor: cleaning and removing unused code --- src/account/BiconomySmartAccountV2.ts | 196 ++- src/account/Factory.ts | 141 -- src/account/SmartAccount.ts | 636 -------- src/account/abi/Factory.ts | 141 -- src/account/abi/K1ValidatorFactory.ts | 343 +++++ src/account/utils/Constants.ts | 28 +- src/account/utils/Types.ts | 13 +- src/bundler/Bundler.ts | 5 - src/modules/BatchedSessionRouterModule.ts | 360 ----- ...lidationModule.ts => K1ValidatorModule.ts} | 19 +- src/modules/MultichainValidationModule.ts | 212 --- src/modules/PasskeyValidationModule.ts | 0 src/modules/SessionKeyManagerModule.ts | 355 ----- src/modules/index.ts | 30 +- src/modules/interfaces/ISessionStorage.ts | 99 -- .../interfaces/ISessionValidationModule.ts | 14 - .../session-storage/SessionLocalStorage.ts | 209 --- .../session-storage/SessionMemoryStorage.ts | 217 --- src/modules/session-storage/index.ts | 3 - src/modules/session-storage/utils.ts | 65 - .../ERC20SessionValidationModule.ts | 80 - src/modules/sessions/abi.ts | 388 ----- src/modules/sessions/batch.ts | 251 --- src/modules/sessions/erc20.ts | 32 - .../sessions/sessionSmartAccountClient.ts | 167 -- src/modules/utils/Constants.ts | 3 - src/modules/utils/Helper.ts | 167 +- tests/account/read.test.ts | 590 ++++--- tests/account/write.test.ts | 7 +- tests/bundler/read.test.ts | 203 --- tests/bundler/write.test.ts | 169 -- tests/modules/read.test.ts | 301 ---- tests/modules/write.test.ts | 1371 ----------------- tests/paymaster/read.test.ts | 147 -- tests/paymaster/write.test.ts | 303 ---- tests/playground/read.test.ts | 75 - tests/playground/write.test.ts | 75 - tests/vitest.config.ts | 4 - 38 files changed, 822 insertions(+), 6597 deletions(-) delete mode 100644 src/account/Factory.ts delete mode 100644 src/account/SmartAccount.ts delete mode 100644 src/account/abi/Factory.ts create mode 100644 src/account/abi/K1ValidatorFactory.ts delete mode 100644 src/modules/BatchedSessionRouterModule.ts rename src/modules/{ECDSAOwnershipValidationModule.ts => K1ValidatorModule.ts} (89%) delete mode 100644 src/modules/MultichainValidationModule.ts delete mode 100644 src/modules/PasskeyValidationModule.ts delete mode 100644 src/modules/SessionKeyManagerModule.ts delete mode 100644 src/modules/interfaces/ISessionStorage.ts delete mode 100644 src/modules/interfaces/ISessionValidationModule.ts delete mode 100644 src/modules/session-storage/SessionLocalStorage.ts delete mode 100644 src/modules/session-storage/SessionMemoryStorage.ts delete mode 100644 src/modules/session-storage/index.ts delete mode 100644 src/modules/session-storage/utils.ts delete mode 100644 src/modules/session-validation-modules/ERC20SessionValidationModule.ts delete mode 100644 src/modules/sessions/abi.ts delete mode 100644 src/modules/sessions/batch.ts delete mode 100644 src/modules/sessions/erc20.ts delete mode 100644 src/modules/sessions/sessionSmartAccountClient.ts delete mode 100644 tests/bundler/read.test.ts delete mode 100644 tests/bundler/write.test.ts delete mode 100644 tests/modules/read.test.ts delete mode 100644 tests/modules/write.test.ts delete mode 100644 tests/paymaster/read.test.ts delete mode 100644 tests/paymaster/write.test.ts delete mode 100644 tests/playground/read.test.ts delete mode 100644 tests/playground/write.test.ts diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 12f67476b..6239bf7bc 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -1,5 +1,4 @@ import { zeroPadBytes } from "ethers" -import { getUserOperationHash } from "permissionless" import { http, type Address, @@ -28,8 +27,7 @@ import { import { Bundler, Executions, - type GetUserOperationGasPriceReturnType, - extractChainIdFromBundlerUrl + type GetUserOperationGasPriceReturnType } from "../bundler/index.js" import type { IBundler } from "../bundler/interfaces/IBundler.js" import { EXECUTE_BATCH, EXECUTE_SINGLE } from "../bundler/utils/Constants.js" @@ -40,7 +38,6 @@ import { createECDSAOwnershipValidationModule } from "../modules" import { - BiconomyPaymaster, type FeeQuotesOrDataDto, type FeeQuotesOrDataResponse, type IHybridPaymaster, @@ -50,7 +47,6 @@ import { type SponsorUserOperationDto } from "../paymaster" import { - type BigNumberish, Logger, ModuleType, type SmartAccountSigner, @@ -61,29 +57,20 @@ import { } from "./" import { BaseSmartContractAccount } from "./BaseSmartContractAccount.js" import { AccountResolverAbi } from "./abi/AccountResolver.js" -import { BiconomyFactoryAbi } from "./abi/Factory.js" import { BiconomyAccountAbi } from "./abi/SmartAccount.js" import { - ADDRESS_RESOLVER_ADDRESS, ADDRESS_ZERO, BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, - CALLTYPE_SINGLE, DEFAULT_BICONOMY_FACTORY_ADDRESS, DEFAULT_ENTRYPOINT_ADDRESS, DEFAULT_FALLBACK_HANDLER_ADDRESS, ERC20_ABI, ERROR_MESSAGES, - EXECTYPE_DEFAULT, MAGIC_BYTES, - MODE_DEFAULT, - MODE_PAYLOAD, - NATIVE_TOKEN_ALIAS, - PROXY_CREATION_CODE, - UNUSED + NATIVE_TOKEN_ALIAS } from "./utils/Constants.js" import type { BalancePayload, - BatchUserOperationCallData, BiconomySmartAccountV2Config, BiconomySmartAccountV2ConfigConstructorProps, BiconomyTokenPaymasterRequest, @@ -91,7 +78,6 @@ import type { CounterFactualAddressParam, NonceOptions, PaymasterUserOperationDto, - QueryParamsForAddressResolver, SimulationType, SupportedToken, Transaction, @@ -100,8 +86,6 @@ import type { } from "./utils/Types.js" import { addressEquals, - compareChainIds, - convertToFactor, isNullOrUndefined, isValidRpcUrl, packUserOp @@ -284,18 +268,18 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } resolvedSmartAccountSigner = signerResult.signer } - if (!chainId) { - // Get it from bundler - // if (biconomySmartAccountConfig.bundlerUrl) { - // chainId = extractChainIdFromBundlerUrl( - // biconomySmartAccountConfig.bundlerUrl - // ) - // } else if (biconomySmartAccountConfig.bundler) { - // const bundlerUrlFromBundler = - // biconomySmartAccountConfig.bundler.getBundlerUrl() - // chainId = extractChainIdFromBundlerUrl(bundlerUrlFromBundler) - // } - } + // if (!chainId) { + // Get it from bundler + // if (biconomySmartAccountConfig.bundlerUrl) { + // chainId = extractChainIdFromBundlerUrl( + // biconomySmartAccountConfig.bundlerUrl + // ) + // } else if (biconomySmartAccountConfig.bundler) { + // const bundlerUrlFromBundler = + // biconomySmartAccountConfig.bundler.getBundlerUrl() + // chainId = extractChainIdFromBundlerUrl(bundlerUrlFromBundler) + // } + // } if (!chainId) { throw new Error("chainId required") } @@ -680,23 +664,23 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.scanForUpgradedAccountsFromV1 // if it's intended to detect V1 upgraded accounts - if (scanForUpgradedAccountsFromV1) { - const eoaSigner = await validationModule.getSigner() - const eoaAddress = (await eoaSigner.getAddress()) as Hex - const moduleAddress = validationModule.getAddress() as Hex - const moduleSetupData = (await validationModule.getInitData()) as Hex - const queryParams = { - eoaAddress, - index, - moduleAddress, - moduleSetupData, - maxIndexForScan - } - const accountAddress = await this.getV1AccountsUpgradedToV2(queryParams) - if (accountAddress !== ADDRESS_ZERO) { - return accountAddress - } - } + // if (scanForUpgradedAccountsFromV1) { + // const eoaSigner = await validationModule.getSigner() + // const eoaAddress = (await eoaSigner.getAddress()) as Hex + // const moduleAddress = validationModule.getAddress() as Hex + // const moduleSetupData = (await validationModule.getInitData()) as Hex + // const queryParams = { + // eoaAddress, + // index, + // moduleAddress, + // moduleSetupData, + // maxIndexForScan + // } + // const accountAddress = await this.getV1AccountsUpgradedToV2(queryParams) + // if (accountAddress !== ADDRESS_ZERO) { + // return accountAddress + // } + // } const counterFactualAddressV2 = await this.getCounterFactualAddressV2({ validationModule, @@ -775,47 +759,47 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return this } - async getV1AccountsUpgradedToV2( - params: QueryParamsForAddressResolver - ): Promise<Hex> { - const maxIndexForScan = params.maxIndexForScan ?? this.maxIndexForScan - - const addressResolver = getContract({ - address: ADDRESS_RESOLVER_ADDRESS, - abi: AccountResolverAbi, - client: { - public: this.provider as PublicClient - } - }) - // Note: depending on moduleAddress and moduleSetupData passed call this. otherwise could call resolveAddresses() - - if (params.moduleAddress && params.moduleSetupData) { - const result = await addressResolver.read.resolveAddressesFlexibleForV2([ - params.eoaAddress, - Number.parseInt(maxIndexForScan.toString()), // TODO: SHOULD BE A BIGINT BUT REQUIRED TO BE A NUMBER FOR THE CONTRACT - params.moduleAddress, - params.moduleSetupData - ]) + // async getV1AccountsUpgradedToV2( + // params: QueryParamsForAddressResolver + // ): Promise<Hex> { + // const maxIndexForScan = params.maxIndexForScan ?? this.maxIndexForScan - const desiredV1Account = result.find( - (smartAccountInfo: { - factoryVersion: string - currentVersion: string - deploymentIndex: { toString: () => string } - }) => - smartAccountInfo.factoryVersion === "v1" && - smartAccountInfo.currentVersion === "2.0.0" && - smartAccountInfo.deploymentIndex === params.index - ) + // const addressResolver = getContract({ + // address: ADDRESS_RESOLVER_ADDRESS, + // abi: AccountResolverAbi, + // client: { + // public: this.provider as PublicClient + // } + // }) + // // Note: depending on moduleAddress and moduleSetupData passed call this. otherwise could call resolveAddresses() + + // if (params.moduleAddress && params.moduleSetupData) { + // const result = await addressResolver.read.resolveAddressesFlexibleForV2([ + // params.eoaAddress, + // Number.parseInt(maxIndexForScan.toString()), // TODO: SHOULD BE A BIGINT BUT REQUIRED TO BE A NUMBER FOR THE CONTRACT + // params.moduleAddress, + // params.moduleSetupData + // ]) + + // const desiredV1Account = result.find( + // (smartAccountInfo: { + // factoryVersion: string + // currentVersion: string + // deploymentIndex: { toString: () => string } + // }) => + // smartAccountInfo.factoryVersion === "v1" && + // smartAccountInfo.currentVersion === "2.0.0" && + // smartAccountInfo.deploymentIndex === params.index + // ) - if (desiredV1Account) { - const smartAccountAddress = desiredV1Account.accountAddress - return smartAccountAddress - } - return ADDRESS_ZERO - } - return ADDRESS_ZERO - } + // if (desiredV1Account) { + // const smartAccountAddress = desiredV1Account.accountAddress + // return smartAccountAddress + // } + // return ADDRESS_ZERO + // } + // return ADDRESS_ZERO + // } /** * Return the value to put into the "initCode" field, if the account is not yet deployed. @@ -851,9 +835,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const executionCalldata = encodePacked( ["address", "uint256", "bytes"], [ - transaction.to, + transaction.to as Hex, BigInt(transaction.value ?? 0n), - transaction.data ?? "0x" + (transaction.data as Hex) ?? ("0x" as Hex) ] ) // Encode a simple call @@ -925,19 +909,19 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.isActiveValidationModuleDefined() // TODO REMOVE COMMENT AND CHECK FOR PIMLICO USER OP FIELDS - // const requiredFields: UserOperationKey[] = [ - // "sender", - // "nonce", - // "initCode", - // "callData", - // "callGasLimit", - // "verificationGasLimit", - // "preVerificationGas", - // "maxFeePerGas", - // "maxPriorityFeePerGas", - // "paymasterAndData" - // ] - // this.validateUserOp(userOp, requiredFields) + const requiredFields: UserOperationKey[] = [ + "sender", + "nonce", + "factory", + "factoryData", + "callGasLimit", + "verificationGasLimit", + "preVerificationGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "paymasterAndData" + ] + this.validateUserOp(userOp, requiredFields) const userOpHash = await this.getUserOpHash(userOp) const moduleSig = (await this.activeValidationModule.signUserOpHash( @@ -2108,7 +2092,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return tx } - async isModuleEnabled(moduleAddress: Hex): Promise<any> { + async isModuleInstalled(moduleAddress: Hex): Promise<any> { const accountContract = await this._getAccountContract() return await accountContract.read.isModuleInstalled([ ModuleType.Validation, @@ -2117,6 +2101,14 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ]) } + async installModule(moduleAddress: Hex): Promise<any> { + return true + } + + async uninstallModule(moduleAddress: Hex): Promise<any> { + return true + } + // Review // async getAllModules(pageSize?: number): Promise<Array<string>> { // const _pageSize = pageSize ?? 100 diff --git a/src/account/Factory.ts b/src/account/Factory.ts deleted file mode 100644 index c7d148bb2..000000000 --- a/src/account/Factory.ts +++ /dev/null @@ -1,141 +0,0 @@ -export const BiconomyFactoryAbi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "initialAuthModule", - type: "address" - }, - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "AccountCreation", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "initialAuthModule", - type: "address" - } - ], - name: "AccountCreationWithoutIndex", - type: "event" - }, - { - inputs: [], - name: "accountCreationCode", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "moduleSetupContract", - type: "address" - }, - { - internalType: "bytes", - name: "moduleSetupData", - type: "bytes" - } - ], - name: "deployAccount", - outputs: [ - { - internalType: "address", - name: "proxy", - type: "address" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "moduleSetupContract", - type: "address" - }, - { - internalType: "bytes", - name: "moduleSetupData", - type: "bytes" - }, - { - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "deployCounterFactualAccount", - outputs: [ - { - internalType: "address", - name: "proxy", - type: "address" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "moduleSetupContract", - type: "address" - }, - { - internalType: "bytes", - name: "moduleSetupData", - type: "bytes" - }, - { - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "getAddressForCounterFactualAccount", - outputs: [ - { - internalType: "address", - name: "_account", - type: "address" - } - ], - stateMutability: "view", - type: "function" - } -] as const diff --git a/src/account/SmartAccount.ts b/src/account/SmartAccount.ts deleted file mode 100644 index 541267158..000000000 --- a/src/account/SmartAccount.ts +++ /dev/null @@ -1,636 +0,0 @@ -export const BiconomyAccountAbi = [ - { - inputs: [ - { - internalType: "contract IEntryPoint", - name: "anEntryPoint", - type: "address" - } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { inputs: [], name: "AlreadyInitialized", type: "error" }, - { inputs: [], name: "BaseImplementationCannotBeZero", type: "error" }, - { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "CallerIsNotAnEntryPoint", - type: "error" - }, - { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "CallerIsNotEntryPoint", - type: "error" - }, - { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "CallerIsNotEntryPointOrOwner", - type: "error" - }, - { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "CallerIsNotEntryPointOrSelf", - type: "error" - }, - { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "CallerIsNotOwner", - type: "error" - }, - { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "CallerIsNotSelf", - type: "error" - }, - { inputs: [], name: "DelegateCallsOnly", type: "error" }, - { inputs: [], name: "EntryPointCannotBeZero", type: "error" }, - { inputs: [], name: "HandlerCannotBeZero", type: "error" }, - { - inputs: [ - { - internalType: "address", - name: "implementationAddress", - type: "address" - } - ], - name: "InvalidImplementation", - type: "error" - }, - { - inputs: [{ internalType: "address", name: "caller", type: "address" }], - name: "MixedAuthFail", - type: "error" - }, - { - inputs: [{ internalType: "address", name: "module", type: "address" }], - name: "ModuleAlreadyEnabled", - type: "error" - }, - { - inputs: [ - { internalType: "address", name: "expectedModule", type: "address" }, - { internalType: "address", name: "returnedModule", type: "address" }, - { internalType: "address", name: "prevModule", type: "address" } - ], - name: "ModuleAndPrevModuleMismatch", - type: "error" - }, - { - inputs: [{ internalType: "address", name: "module", type: "address" }], - name: "ModuleCannotBeZeroOrSentinel", - type: "error" - }, - { - inputs: [{ internalType: "address", name: "module", type: "address" }], - name: "ModuleNotEnabled", - type: "error" - }, - { inputs: [], name: "ModulesAlreadyInitialized", type: "error" }, - { inputs: [], name: "ModulesSetupExecutionFailed", type: "error" }, - { inputs: [], name: "OwnerCanNotBeSelf", type: "error" }, - { inputs: [], name: "OwnerCannotBeZero", type: "error" }, - { inputs: [], name: "OwnerProvidedIsSame", type: "error" }, - { inputs: [], name: "TransferToZeroAddressAttempt", type: "error" }, - { - inputs: [ - { internalType: "uint256", name: "destLength", type: "uint256" }, - { internalType: "uint256", name: "valueLength", type: "uint256" }, - { internalType: "uint256", name: "funcLength", type: "uint256" }, - { internalType: "uint256", name: "operationLength", type: "uint256" } - ], - name: "WrongBatchProvided", - type: "error" - }, - { - inputs: [ - { internalType: "bytes", name: "contractSignature", type: "bytes" } - ], - name: "WrongContractSignature", - type: "error" - }, - { - inputs: [ - { internalType: "uint256", name: "uintS", type: "uint256" }, - { - internalType: "uint256", - name: "contractSignatureLength", - type: "uint256" - }, - { internalType: "uint256", name: "signatureLength", type: "uint256" } - ], - name: "WrongContractSignatureFormat", - type: "error" - }, - { - inputs: [ - { - internalType: "address", - name: "moduleAddressProvided", - type: "address" - } - ], - name: "WrongValidationModule", - type: "error" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousHandler", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "handler", - type: "address" - } - ], - name: "ChangedFallbackHandler", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "module", - type: "address" - } - ], - name: "DisabledModule", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "module", - type: "address" - } - ], - name: "EnabledModule", - type: "event" - }, - { - anonymous: false, - inputs: [ - { indexed: true, internalType: "address", name: "to", type: "address" }, - { - indexed: true, - internalType: "uint256", - name: "value", - type: "uint256" - }, - { indexed: true, internalType: "bytes", name: "data", type: "bytes" }, - { - indexed: false, - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8" - }, - { - indexed: false, - internalType: "uint256", - name: "txGas", - type: "uint256" - } - ], - name: "ExecutionFailure", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "module", - type: "address" - } - ], - name: "ExecutionFromModuleFailure", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "module", - type: "address" - } - ], - name: "ExecutionFromModuleSuccess", - type: "event" - }, - { - anonymous: false, - inputs: [ - { indexed: true, internalType: "address", name: "to", type: "address" }, - { - indexed: true, - internalType: "uint256", - name: "value", - type: "uint256" - }, - { indexed: true, internalType: "bytes", name: "data", type: "bytes" }, - { - indexed: false, - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8" - }, - { - indexed: false, - internalType: "uint256", - name: "txGas", - type: "uint256" - } - ], - name: "ExecutionSuccess", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "oldImplementation", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "newImplementation", - type: "address" - } - ], - name: "ImplementationUpdated", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "module", - type: "address" - }, - { indexed: false, internalType: "address", name: "to", type: "address" }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256" - }, - { indexed: false, internalType: "bytes", name: "data", type: "bytes" }, - { - indexed: false, - internalType: "enum Enum.Operation", - name: "operation", - type: "uint8" - } - ], - name: "ModuleTransaction", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address" - }, - { indexed: true, internalType: "uint256", name: "value", type: "uint256" } - ], - name: "SmartAccountReceivedNativeToken", - type: "event" - }, - { stateMutability: "nonpayable", type: "fallback" }, - { - inputs: [], - name: "VERSION", - outputs: [{ internalType: "string", name: "", type: "string" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [], - name: "addDeposit", - outputs: [], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "prevModule", type: "address" }, - { internalType: "address", name: "module", type: "address" } - ], - name: "disableModule", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [{ internalType: "address", name: "module", type: "address" }], - name: "enableModule", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [], - name: "entryPoint", - outputs: [ - { internalType: "contract IEntryPoint", name: "", type: "address" } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { internalType: "address[]", name: "to", type: "address[]" }, - { internalType: "uint256[]", name: "value", type: "uint256[]" }, - { internalType: "bytes[]", name: "data", type: "bytes[]" }, - { - internalType: "enum Enum.Operation[]", - name: "operations", - type: "uint8[]" - } - ], - name: "execBatchTransactionFromModule", - outputs: [{ internalType: "bool", name: "success", type: "bool" }], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "to", type: "address" }, - { internalType: "uint256", name: "value", type: "uint256" }, - { internalType: "bytes", name: "data", type: "bytes" }, - { internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, - { internalType: "uint256", name: "txGas", type: "uint256" } - ], - name: "execTransactionFromModule", - outputs: [{ internalType: "bool", name: "success", type: "bool" }], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "to", type: "address" }, - { internalType: "uint256", name: "value", type: "uint256" }, - { internalType: "bytes", name: "data", type: "bytes" }, - { internalType: "enum Enum.Operation", name: "operation", type: "uint8" } - ], - name: "execTransactionFromModule", - outputs: [{ internalType: "bool", name: "", type: "bool" }], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "to", type: "address" }, - { internalType: "uint256", name: "value", type: "uint256" }, - { internalType: "bytes", name: "data", type: "bytes" }, - { internalType: "enum Enum.Operation", name: "operation", type: "uint8" } - ], - name: "execTransactionFromModuleReturnData", - outputs: [ - { internalType: "bool", name: "success", type: "bool" }, - { internalType: "bytes", name: "returnData", type: "bytes" } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "dest", type: "address" }, - { internalType: "uint256", name: "value", type: "uint256" }, - { internalType: "bytes", name: "func", type: "bytes" } - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { internalType: "address[]", name: "dest", type: "address[]" }, - { internalType: "uint256[]", name: "value", type: "uint256[]" }, - { internalType: "bytes[]", name: "func", type: "bytes[]" } - ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { internalType: "address[]", name: "dest", type: "address[]" }, - { internalType: "uint256[]", name: "value", type: "uint256[]" }, - { internalType: "bytes[]", name: "func", type: "bytes[]" } - ], - name: "executeBatch_y6U", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "dest", type: "address" }, - { internalType: "uint256", name: "value", type: "uint256" }, - { internalType: "bytes", name: "func", type: "bytes" } - ], - name: "execute_ncC", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [], - name: "getDeposit", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [], - name: "getFallbackHandler", - outputs: [{ internalType: "address", name: "_handler", type: "address" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [], - name: "getImplementation", - outputs: [ - { internalType: "address", name: "_implementation", type: "address" } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "start", type: "address" }, - { internalType: "uint256", name: "pageSize", type: "uint256" } - ], - name: "getModulesPaginated", - outputs: [ - { internalType: "address[]", name: "array", type: "address[]" }, - { internalType: "address", name: "next", type: "address" } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "handler", type: "address" }, - { internalType: "address", name: "moduleSetupContract", type: "address" }, - { internalType: "bytes", name: "moduleSetupData", type: "bytes" } - ], - name: "init", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [{ internalType: "address", name: "module", type: "address" }], - name: "isModuleEnabled", - outputs: [{ internalType: "bool", name: "", type: "bool" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { internalType: "bytes32", name: "dataHash", type: "bytes32" }, - { internalType: "bytes", name: "signature", type: "bytes" } - ], - name: "isValidSignature", - outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [{ internalType: "uint192", name: "_key", type: "uint192" }], - name: "nonce", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [{ internalType: "uint256", name: "", type: "uint256" }], - name: "noncesDeprecated", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [], - name: "ownerDeprecated", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [{ internalType: "address", name: "handler", type: "address" }], - name: "setFallbackHandler", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "setupContract", type: "address" }, - { internalType: "bytes", name: "setupData", type: "bytes" } - ], - name: "setupAndEnableModule", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [{ internalType: "bytes4", name: "_interfaceId", type: "bytes4" }], - name: "supportsInterface", - outputs: [{ internalType: "bool", name: "", type: "bool" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "_implementation", type: "address" } - ], - name: "updateImplementation", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - components: [ - { internalType: "address", name: "sender", type: "address" }, - { internalType: "uint256", name: "nonce", type: "uint256" }, - { internalType: "bytes", name: "initCode", type: "bytes" }, - { internalType: "bytes", name: "callData", type: "bytes" }, - { internalType: "uint256", name: "callGasLimit", type: "uint256" }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256" - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256" - }, - { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256" - }, - { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, - { internalType: "bytes", name: "signature", type: "bytes" } - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple" - }, - { internalType: "bytes32", name: "userOpHash", type: "bytes32" }, - { internalType: "uint256", name: "missingAccountFunds", type: "uint256" } - ], - name: "validateUserOp", - outputs: [ - { internalType: "uint256", name: "validationData", type: "uint256" } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address payable", - name: "withdrawAddress", - type: "address" - }, - { internalType: "uint256", name: "amount", type: "uint256" } - ], - name: "withdrawDepositTo", - outputs: [], - stateMutability: "payable", - type: "function" - }, - { stateMutability: "payable", type: "receive" } -] as const diff --git a/src/account/abi/Factory.ts b/src/account/abi/Factory.ts deleted file mode 100644 index c7d148bb2..000000000 --- a/src/account/abi/Factory.ts +++ /dev/null @@ -1,141 +0,0 @@ -export const BiconomyFactoryAbi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "initialAuthModule", - type: "address" - }, - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "AccountCreation", - type: "event" - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "initialAuthModule", - type: "address" - } - ], - name: "AccountCreationWithoutIndex", - type: "event" - }, - { - inputs: [], - name: "accountCreationCode", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes" - } - ], - stateMutability: "pure", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "moduleSetupContract", - type: "address" - }, - { - internalType: "bytes", - name: "moduleSetupData", - type: "bytes" - } - ], - name: "deployAccount", - outputs: [ - { - internalType: "address", - name: "proxy", - type: "address" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "moduleSetupContract", - type: "address" - }, - { - internalType: "bytes", - name: "moduleSetupData", - type: "bytes" - }, - { - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "deployCounterFactualAccount", - outputs: [ - { - internalType: "address", - name: "proxy", - type: "address" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "moduleSetupContract", - type: "address" - }, - { - internalType: "bytes", - name: "moduleSetupData", - type: "bytes" - }, - { - internalType: "uint256", - name: "index", - type: "uint256" - } - ], - name: "getAddressForCounterFactualAccount", - outputs: [ - { - internalType: "address", - name: "_account", - type: "address" - } - ], - stateMutability: "view", - type: "function" - } -] as const diff --git a/src/account/abi/K1ValidatorFactory.ts b/src/account/abi/K1ValidatorFactory.ts new file mode 100644 index 000000000..83cdd58d8 --- /dev/null +++ b/src/account/abi/K1ValidatorFactory.ts @@ -0,0 +1,343 @@ +export const BiconomyFactoryAbi = [ + { + inputs: [ + { + internalType: "address", + name: "implementation", + type: "address" + }, + { + internalType: "address", + name: "factoryOwner", + type: "address" + }, + { + internalType: "address", + name: "k1Validator", + type: "address" + }, + { + internalType: "contract Bootstrap", + name: "bootstrapper", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [], + name: "AlreadyInitialized", + type: "error" + }, + { + inputs: [], + name: "InvalidEntryPointAddress", + type: "error" + }, + { + inputs: [], + name: "NewOwnerIsZeroAddress", + type: "error" + }, + { + inputs: [], + name: "NoHandoverRequest", + type: "error" + }, + { + inputs: [], + name: "Unauthorized", + type: "error" + }, + { + inputs: [], + name: "ZeroAddressNotAllowed", + type: "error" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "AccountCreated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "OwnershipHandoverCanceled", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "OwnershipHandoverRequested", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "oldOwner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "OwnershipTransferred", + type: "event" + }, + { + inputs: [], + name: "ACCOUNT_IMPLEMENTATION", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "BOOTSTRAPPER", + outputs: [ + { + internalType: "contract Bootstrap", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "K1_VALIDATOR", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address" + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32" + } + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "cancelOwnershipHandover", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "completeOwnershipHandover", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "computeAccountAddress", + outputs: [ + { + internalType: "address payable", + name: "expectedAddress", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "eoaOwner", + type: "address" + }, + { + internalType: "uint256", + name: "index", + type: "uint256" + } + ], + name: "createAccount", + outputs: [ + { + internalType: "address payable", + name: "", + type: "address" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "result", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "ownershipHandoverExpiresAt", + outputs: [ + { + internalType: "uint256", + name: "result", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "requestOwnershipHandover", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "transferOwnership", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address" + } + ], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address" + }, + { + internalType: "address payable", + name: "withdrawAddress", + type: "address" + } + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +] diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index d61493cf5..f3a401c54 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -1,7 +1,5 @@ import type { Hex } from "viem" import type { - BiconomyFactories, - BiconomyFactoriesByVersion, BiconomyImplementations, BiconomyImplementationsByVersion, EntryPointAddresses, @@ -18,7 +16,8 @@ export const DEFAULT_ENTRYPOINT_ADDRESS = "0x0000000071727De22E5E9d8BAf0edAc6f37da032" export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { "0x27a4db290b89ae3373ce4313cbeae72112ae7da9": "V0_0_5", - "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789": "V0_0_6" + "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789": "V0_0_6", + "0x0000000071727De22E5E9d8BAf0edAc6f37da032": "V0_0_7" } // will always be latest factory address @@ -26,10 +25,6 @@ export const DEFAULT_BICONOMY_FACTORY_ADDRESS = "0xf7cF950DA05431eC1F48fD682fa993Bbaeed9a9d" export const DEFAULT_FALLBACK_HANDLER_ADDRESS = "0x0bBa6d96BD616BedC6BFaa341742FD43c60b83C1" -export const BICONOMY_FACTORY_ADDRESSES: BiconomyFactories = { - "0x000000f9ee1842bb72f6bbdd75e6d3d4e3e9594c": "V1_0_0", - "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5": "V2_0_0" -} export const BICONOMY_TOKEN_PAYMASTER = "0x00000f7365cA6C59A2C93719ad53d567ed49c14C" @@ -47,11 +42,6 @@ export const ENTRYPOINT_ADDRESSES_BY_VERSION: EntryPointAddressesByVersion = { V0_0_6: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789" } -export const BICONOMY_FACTORY_ADDRESSES_BY_VERSION: BiconomyFactoriesByVersion = - Object.fromEntries( - Object.entries(BICONOMY_FACTORY_ADDRESSES).map(([k, v]) => [v, k]) - ) - export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementationsByVersion = Object.fromEntries( Object.entries(BICONOMY_IMPLEMENTATION_ADDRESSES).map(([k, v]) => [v, k]) @@ -113,9 +103,6 @@ export const K1_VALIDATOR_FACTORY = "0xf7cF950DA05431eC1F48fD682fa993Bbaeed9a9d" export const BICONOMY_META_FACTORY = "0x4F9218eD5329D586237B8cAFe3d8778b94874186" -// export const ENTRYPOINT_ADDRESS_V07 = -// "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" - export const ENTRYPOINT_ADDRESS_V07 = "0x0000000071727De22E5E9d8BAf0edAc6f37da032" @@ -130,14 +117,3 @@ export const UNUSED = "0x00000000" // 4 bytes export const MODE_PAYLOAD = "0x00000000000000000000000000000000000000000000" // 22 bytes export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f" -// address sender; -// uint256 nonce; -// bytes initCode; -// bytes callData; -// uint256 callGasLimit; -// uint256 verificationGasLimit; -// uint256 preVerificationGas; -// uint256 maxFeePerGas; -// uint256 maxPriorityFeePerGas; -// bytes paymasterAndData; -// bytes signature; diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 37f055632..2bdbf0e89 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -14,10 +14,6 @@ import type { } from "viem" import type { IBundler } from "../../bundler" import type { BaseValidationModule, ModuleInfo } from "../../modules" -import type { - ISessionStorage, - SessionLeafNode -} from "../../modules/interfaces/ISessionStorage" import type { FeeQuotesOrDataDto, IPaymaster, @@ -211,11 +207,6 @@ export type BuildUserOpOptions = { useEmptyDeployCallData?: boolean } -export type SessionDataForAccount = { - sessionStorageClient: ISessionStorage - session: SessionLeafNode -} - export type NonceOptions = { /** nonceKey: The key to use for nonce */ nonceKey?: bigint @@ -345,12 +336,12 @@ export type SmartAccountInfo = { export type ValueOrData = RequireAtLeastOne< { value: BigNumberish | string - data: Hex + data: string }, "value" | "data" > export type Transaction = { - to: Hex + to: string } & ValueOrData export type SupportedToken = Omit< diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index 7788bade5..0e3c0bc6f 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -15,9 +15,6 @@ import type { BundlerConfigWithChainId, BundlerEstimateUserOpGasResponse, Bundlerconfig, - EstimateUserOpGasResponse, - GasFeeValues, - GetGasFeeValuesResponse, GetUserOpByHashResponse, GetUserOperationGasPriceReturnType, GetUserOperationReceiptResponse, @@ -129,8 +126,6 @@ export class Bundler implements IBundler { "Bundler" ) - console.log(response, "response") - const userOpGasResponse = response for (const key in userOpGasResponse) { if ( diff --git a/src/modules/BatchedSessionRouterModule.ts b/src/modules/BatchedSessionRouterModule.ts deleted file mode 100644 index 53181c728..000000000 --- a/src/modules/BatchedSessionRouterModule.ts +++ /dev/null @@ -1,360 +0,0 @@ -import { - type Hex, - concat, - encodeAbiParameters, - keccak256, - pad, - parseAbiParameters, - toBytes, - toHex -} from "viem" -import { type SmartAccountSigner, convertSigner } from "../account" -import { BaseValidationModule } from "./BaseValidationModule.js" -import { SessionKeyManagerModule } from "./SessionKeyManagerModule.js" -import type { - SessionSearchParam, - SessionStatus -} from "./interfaces/ISessionStorage.js" -import { - BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION, - DEFAULT_BATCHED_SESSION_ROUTER_MODULE, - DEFAULT_SESSION_KEY_MANAGER_MODULE -} from "./utils/Constants.js" -// @ts-nocheck -import type { - BatchedSessionRouterModuleConfig, - CreateSessionDataParams, - CreateSessionDataResponse, - ModuleInfo, - ModuleVersion, - SessionDataTuple -} from "./utils/Types.js" - -export class BatchedSessionRouterModule extends BaseValidationModule { - version: ModuleVersion = "V1_0_0" - - moduleAddress!: Hex - - sessionManagerModuleAddress!: Hex - - sessionKeyManagerModule!: SessionKeyManagerModule - - readonly mockEcdsaSessionKeySig: Hex = - "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b" - - /** - * This constructor is private. Use the static create method to instantiate SessionKeyManagerModule - * @param moduleConfig The configuration for the module - * @returns An instance of SessionKeyManagerModule - */ - private constructor(moduleConfig: BatchedSessionRouterModuleConfig) { - super(moduleConfig) - } - - /** - * Asynchronously creates and initializes an instance of SessionKeyManagerModule - * @param moduleConfig The configuration for the module - * @returns A Promise that resolves to an instance of SessionKeyManagerModule - */ - public static async create( - moduleConfig: BatchedSessionRouterModuleConfig - ): Promise<BatchedSessionRouterModule> { - const instance = new BatchedSessionRouterModule(moduleConfig) - - if (moduleConfig.moduleAddress) { - instance.moduleAddress = moduleConfig.moduleAddress - } else if (moduleConfig.version) { - const moduleAddr = BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION[ - moduleConfig.version - ] as Hex - if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`) - } - instance.moduleAddress = moduleAddr - instance.version = moduleConfig.version as ModuleVersion - } else { - instance.moduleAddress = DEFAULT_BATCHED_SESSION_ROUTER_MODULE - // Note: in this case Version remains the default one - } - - instance.sessionManagerModuleAddress = - moduleConfig.sessionManagerModuleAddress ?? - DEFAULT_SESSION_KEY_MANAGER_MODULE - - if (!moduleConfig.sessionKeyManagerModule) { - // generate sessionModule - const sessionModule = await SessionKeyManagerModule.create({ - moduleAddress: instance.sessionManagerModuleAddress, - smartAccountAddress: moduleConfig.smartAccountAddress, - storageType: moduleConfig.storageType - }) - - instance.sessionKeyManagerModule = sessionModule - } else { - instance.sessionKeyManagerModule = moduleConfig.sessionKeyManagerModule - instance.sessionManagerModuleAddress = - moduleConfig.sessionKeyManagerModule.getAddress() - } - - return instance - } - - /** - * Method to create session data for any module. The session data is used to create a leaf in the merkle tree - * @param leavesData The data of one or more leaves to be used to create session data - * @returns The session data - */ - createSessionData = async ( - leavesData: CreateSessionDataParams[] - ): Promise<CreateSessionDataResponse> => { - return this.sessionKeyManagerModule.createSessionData(leavesData) - } - - /** - * This method is used to sign the user operation using the session signer - * @param userOp The user operation to be signed - * @param sessionParams Information about all the sessions to be used to sign the user operation which has a batch execution - * @returns The signature of the user operation - */ - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise<Hex> { - const sessionParams = params?.batchSessionParams - if (!sessionParams || sessionParams.length === 0) { - throw new Error("Session parameters are not provided") - } - - const sessionDataTupleArray: SessionDataTuple[] = [] - - // signer must be the same for all the sessions - const { signer: sessionSigner } = await convertSigner( - sessionParams[0].sessionSigner, - false - ) - - const signature = await sessionSigner.signMessage({ - raw: toBytes(userOpHash) - }) - - for (const sessionParam of sessionParams) { - if (!sessionParam.sessionSigner) { - throw new Error("Session signer is not provided.") - } - if (!sessionParam.sessionID && !sessionParam.sessionValidationModule) { - throw new Error( - "sessionID or sessionValidationModule should be provided." - ) - } - - const sessionSignerData = - await this.sessionKeyManagerModule.sessionStorageClient.getSessionData( - sessionParam.sessionID - ? { - sessionID: sessionParam.sessionID - } - : { - sessionValidationModule: sessionParam.sessionValidationModule, - sessionPublicKey: await sessionSigner.getAddress() - } - ) - - const leafDataHex = concat([ - pad(toHex(sessionSignerData.validUntil), { size: 6 }), - pad(toHex(sessionSignerData.validAfter), { size: 6 }), - pad(sessionSignerData.sessionValidationModule, { size: 20 }), - sessionSignerData.sessionKeyData - ]) - - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof( - keccak256(leafDataHex) - ) - - const sessionDataTuple: SessionDataTuple = [ - sessionSignerData.validUntil, - sessionSignerData.validAfter, - sessionSignerData.sessionValidationModule, - sessionSignerData.sessionKeyData, - proof, - sessionParam.additionalSessionData ?? "0x" - ] - - sessionDataTupleArray.push(sessionDataTuple) - } - - // Generate the padded signature - const abiParameters = [ - { type: "address" }, - { - type: "tuple[]", - components: [ - { type: "uint48" }, - { type: "uint48" }, - { type: "address" }, - { type: "bytes" }, - { type: "bytes32[]" }, - { type: "bytes" } - ] - }, - { type: "bytes" } - ] - - const paddedSignature = encodeAbiParameters(abiParameters, [ - this.getSessionKeyManagerAddress(), - sessionDataTupleArray, - signature - ]) - - return paddedSignature as Hex - } - - /** - * Update the session data pending state to active - * @param param The search param to find the session data - * @param status The status to be updated - * @returns - */ - async updateSessionStatus( - param: SessionSearchParam, - status: SessionStatus - ): Promise<void> { - this.sessionKeyManagerModule.sessionStorageClient.updateSessionStatus( - param, - status - ) - } - - /** - * @remarks This method is used to clear all the pending sessions - * @returns - */ - async clearPendingSessions(): Promise<void> { - this.sessionKeyManagerModule.sessionStorageClient.clearPendingSessions() - } - - /** - * @returns SessionKeyManagerModule address - */ - getAddress(): Hex { - return this.moduleAddress - } - - /** - * @returns SessionKeyManagerModule address - */ - getSessionKeyManagerAddress(): Hex { - return this.sessionManagerModuleAddress - } - - /** - * @remarks This is the version of the module contract - */ - async getSigner(): Promise<SmartAccountSigner> { - throw new Error("Method not implemented.") - } - - /** - * @remarks This is the dummy signature for the module, used in buildUserOp for bundler estimation - * @returns Dummy signature - */ - async getDummySignature(params?: ModuleInfo): Promise<Hex> { - const sessionParams = params?.batchSessionParams - if (!sessionParams || sessionParams.length === 0) { - throw new Error("Session parameters are not provided") - } - - const sessionDataTupleArray: SessionDataTuple[] = [] - // signer must be the same for all the sessions - const { signer: sessionSigner } = await convertSigner( - sessionParams[0].sessionSigner, - false - ) - - for (const sessionParam of sessionParams) { - if (!sessionParam.sessionSigner) { - throw new Error("Session signer is not provided.") - } - - if (!sessionParam.sessionID && !sessionParam.sessionValidationModule) { - throw new Error( - "sessionID or sessionValidationModule should be provided." - ) - } - - const sessionSignerData = - await this.sessionKeyManagerModule.sessionStorageClient.getSessionData( - sessionParam.sessionID - ? { - sessionID: sessionParam.sessionID - } - : { - sessionValidationModule: sessionParam.sessionValidationModule, - sessionPublicKey: await sessionSigner.getAddress() - } - ) - - const leafDataHex = concat([ - pad(toHex(sessionSignerData.validUntil), { size: 6 }), - pad(toHex(sessionSignerData.validAfter), { size: 6 }), - pad(sessionSignerData.sessionValidationModule, { size: 20 }), - sessionSignerData.sessionKeyData - ]) - - const proof = this.sessionKeyManagerModule.merkleTree.getHexProof( - keccak256(leafDataHex) - ) - - const sessionDataTuple: SessionDataTuple = [ - BigInt(sessionSignerData.validUntil), - BigInt(sessionSignerData.validAfter), - sessionSignerData.sessionValidationModule, - sessionSignerData.sessionKeyData, - proof, - sessionParam.additionalSessionData ?? "0x" - ] - - sessionDataTupleArray.push(sessionDataTuple) - } - - // Generate the padded signature - - const abiParameters = [ - { type: "address" }, - { - type: "tuple[]", - components: [ - { type: "uint48" }, - { type: "uint48" }, - { type: "address" }, - { type: "bytes" }, - { type: "bytes32[]" }, - { type: "bytes" } - ] - }, - { type: "bytes" } - ] - - const paddedSignature = encodeAbiParameters(abiParameters, [ - this.getSessionKeyManagerAddress(), - sessionDataTupleArray, - this.mockEcdsaSessionKeySig - ]) - - const dummySig = encodeAbiParameters(parseAbiParameters("bytes, address"), [ - paddedSignature as Hex, - this.getAddress() - ]) - return dummySig - } - - /** - * @remarks Other modules may need additional attributes to build init data - */ - async getInitData(): Promise<Hex> { - throw new Error("Method not implemented.") - } - - /** - * @remarks This Module dont have knowledge of signer. So, this method is not implemented - */ - async signMessage(_message: Uint8Array | string): Promise<string> { - throw new Error("Method not implemented.") - } -} diff --git a/src/modules/ECDSAOwnershipValidationModule.ts b/src/modules/K1ValidatorModule.ts similarity index 89% rename from src/modules/ECDSAOwnershipValidationModule.ts rename to src/modules/K1ValidatorModule.ts index e4f028b7e..97f5c06ad 100644 --- a/src/modules/ECDSAOwnershipValidationModule.ts +++ b/src/modules/K1ValidatorModule.ts @@ -5,12 +5,13 @@ import { parseAbi, toBytes } from "viem" -import { type SmartAccountSigner, convertSigner } from "../account" -import { BaseValidationModule } from "./BaseValidationModule.js" import { - DEFAULT_ECDSA_OWNERSHIP_MODULE, - ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION -} from "./utils/Constants.js" + K1_VALIDATOR, + type SmartAccountSigner, + convertSigner +} from "../account/index.js" +import { BaseValidationModule } from "./BaseValidationModule.js" +import { ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants.js" import type { ECDSAOwnershipValidationModuleConfig, ECDSAOwnershipValidationModuleConfigConstructorProps, @@ -18,7 +19,7 @@ import type { } from "./utils/Types.js" // Could be renamed with suffix API -export class ECDSAOwnershipValidationModule extends BaseValidationModule { +export class K1ValidatorModule extends BaseValidationModule { signer: SmartAccountSigner moduleAddress!: Hex @@ -34,14 +35,14 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { public static async create( moduleConfig: ECDSAOwnershipValidationModuleConfig - ): Promise<ECDSAOwnershipValidationModule> { + ): Promise<K1ValidatorModule> { // Signer needs to be initialised here before defaultValidationModule is set const { signer } = await convertSigner(moduleConfig.signer, false) const configForConstructor: ECDSAOwnershipValidationModuleConfigConstructorProps = { ...moduleConfig, signer } // TODO: (Joe) stop doing things in a 'create' call after the instance has been created - const instance = new ECDSAOwnershipValidationModule(configForConstructor) + const instance = new K1ValidatorModule(configForConstructor) if (moduleConfig.moduleAddress) { instance.moduleAddress = moduleConfig.moduleAddress } else if (moduleConfig.version) { @@ -54,7 +55,7 @@ export class ECDSAOwnershipValidationModule extends BaseValidationModule { instance.moduleAddress = moduleAddr instance.version = moduleConfig.version as ModuleVersion } else { - instance.moduleAddress = DEFAULT_ECDSA_OWNERSHIP_MODULE + instance.moduleAddress = K1_VALIDATOR // Note: in this case Version remains the default one } return instance diff --git a/src/modules/MultichainValidationModule.ts b/src/modules/MultichainValidationModule.ts deleted file mode 100644 index 1affc9c6f..000000000 --- a/src/modules/MultichainValidationModule.ts +++ /dev/null @@ -1,212 +0,0 @@ -import { MerkleTree } from "merkletreejs" -import { - type Hex, - concat, - encodeAbiParameters, - encodeFunctionData, - getAddress, - keccak256, - pad, - parseAbi, - parseAbiParameters, - toBytes, - toHex -} from "viem" -import { - Logger, - type SmartAccountSigner, - type UserOperationStruct, - convertSigner -} from "../account" -import { BaseValidationModule } from "./BaseValidationModule.js" -import { - DEFAULT_MULTICHAIN_MODULE, - MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION -} from "./utils/Constants.js" -import { getUserOpHash } from "./utils/Helper.js" -import type { - ModuleVersion, - MultiChainUserOpDto, - MultiChainValidationModuleConfig, - MultiChainValidationModuleConfigConstructorProps -} from "./utils/Types.js" - -export class MultiChainValidationModule extends BaseValidationModule { - signer: SmartAccountSigner - - moduleAddress!: Hex - - version: ModuleVersion = "V1_0_0" - - private constructor( - moduleConfig: MultiChainValidationModuleConfigConstructorProps - ) { - super(moduleConfig) - this.signer = moduleConfig.signer - } - - public static async create( - moduleConfig: MultiChainValidationModuleConfig - ): Promise<MultiChainValidationModule> { - // Signer needs to be initialised here before defaultValidationModule is set - const { signer } = await convertSigner(moduleConfig.signer, false) - const configForConstructor: MultiChainValidationModuleConfigConstructorProps = - { ...moduleConfig, signer } - - // TODO: (Joe) stop doing things in a 'create' call after the instance has been created - const instance = new MultiChainValidationModule(configForConstructor) - if (moduleConfig.moduleAddress) { - instance.moduleAddress = moduleConfig.moduleAddress - } else if (moduleConfig.version) { - const moduleAddr = MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION[ - moduleConfig.version - ] as Hex - if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`) - } - instance.moduleAddress = moduleAddr - instance.version = moduleConfig.version as ModuleVersion - } else { - instance.moduleAddress = DEFAULT_MULTICHAIN_MODULE - // Note: in this case Version remains the default one - } - return instance - } - - getAddress(): Hex { - return this.moduleAddress - } - - async getSigner(): Promise<SmartAccountSigner> { - return Promise.resolve(this.signer) - } - - async getDummySignature(): Promise<Hex> { - const moduleAddress = getAddress(this.getAddress()) - const dynamicPart = moduleAddress.substring(2).padEnd(40, "0") - return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000` - } - - // Note: other modules may need additional attributes to build init data - async getInitData(): Promise<Hex> { - const ecdsaOwnerAddress = await this.signer.getAddress() - const moduleRegistryParsedAbi = parseAbi([ - "function initForSmartAccount(address owner)" - ]) - const ecdsaOwnershipInitData = encodeFunctionData({ - abi: moduleRegistryParsedAbi, - functionName: "initForSmartAccount", - args: [ecdsaOwnerAddress] - }) - return ecdsaOwnershipInitData - } - - async signUserOpHash(userOpHash: string): Promise<Hex> { - const sig = await this.signer.signMessage({ raw: toBytes(userOpHash) }) - return sig - } - - /** - * Signs a message using the appropriate method based on the type of signer. - * - * @param {Uint8Array | string} message - The message to be signed. - * @returns {Promise<string>} A promise resolving to the signature or error message. - * @throws {Error} If the signer type is invalid or unsupported. - */ - async signMessage(_message: Uint8Array | string): Promise<string> { - const message = typeof _message === "string" ? _message : { raw: _message } - let signature = await this.signer.signMessage(message) - - const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27 - signature = signature.slice(0, -2) + correctV.toString(16) - } - return signature - } - - async signUserOps( - multiChainUserOps: MultiChainUserOpDto[] - ): Promise<UserOperationStruct[]> { - try { - const leaves: string[] = [] - - // Iterate over each userOp and process them - for (const multiChainOp of multiChainUserOps) { - const validUntil = multiChainOp.validUntil ?? 0 - const validAfter = multiChainOp.validAfter ?? 0 - const leaf = concat([ - pad(toHex(validUntil), { size: 6 }), - pad(toHex(validAfter), { size: 6 }), - pad( - getUserOpHash( - multiChainOp.userOp, - this.entryPointAddress, - multiChainOp.chainId - ), - { size: 32 } - ) - ]) - - leaves.push(keccak256(leaf)) - } - - // Create a new Merkle tree using the leaves array - const merkleTree = new MerkleTree(leaves, keccak256, { sortPairs: true }) - - let multichainSignature = await this.signer.signMessage({ - raw: toBytes(merkleTree.getHexRoot()) - }) - - const potentiallyIncorrectV = Number.parseInt( - multichainSignature.slice(-2), - 16 - ) - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27 - multichainSignature = - multichainSignature.slice(0, -2) + correctV.toString(16) - } - - // Create an array to store updated userOps - const updatedUserOps: UserOperationStruct[] = [] - - for (let i = 0; i < leaves.length; i++) { - const merkleProof = merkleTree.getHexProof(leaves[i]) - - const validUntil = multiChainUserOps[i].validUntil ?? 0 - const validAfter = multiChainUserOps[i].validAfter ?? 0 - - // Create the moduleSignature - const moduleSignature = encodeAbiParameters( - parseAbiParameters(["uint48, uint48, bytes32, bytes32[], bytes"]), - [ - validUntil, - validAfter, - merkleTree.getHexRoot() as Hex, - merkleProof as Hex[], - multichainSignature as Hex - ] - ) - - // Note: Because accountV2 does not directly call this method. hence we need to add validation module address to the signature - const signatureWithModuleAddress = encodeAbiParameters( - parseAbiParameters(["bytes, address"]), - [moduleSignature, this.getAddress()] - ) - - // Update userOp with the final signature - const updatedUserOp: UserOperationStruct = { - ...(multiChainUserOps[i].userOp as UserOperationStruct), - signature: signatureWithModuleAddress as `0x${string}` - } - - updatedUserOps.push(updatedUserOp) - } - return updatedUserOps - } catch (error) { - Logger.error("Error in signing multi chain userops") - throw new Error(JSON.stringify(error)) - } - } -} diff --git a/src/modules/PasskeyValidationModule.ts b/src/modules/PasskeyValidationModule.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/modules/SessionKeyManagerModule.ts b/src/modules/SessionKeyManagerModule.ts deleted file mode 100644 index 223d2d8cd..000000000 --- a/src/modules/SessionKeyManagerModule.ts +++ /dev/null @@ -1,355 +0,0 @@ -import { MerkleTree } from "merkletreejs" -import { - type Hex, - concat, - encodeAbiParameters, - encodeFunctionData, - keccak256, - pad, - parseAbi, - parseAbiParameters, - toBytes, - toHex -} from "viem" -import { type SmartAccountSigner, convertSigner } from "../account" -import { BaseValidationModule } from "./BaseValidationModule.js" -import type { - ISessionStorage, - SessionLeafNode, - SessionSearchParam, - SessionStatus -} from "./interfaces/ISessionStorage.js" -import { SessionLocalStorage } from "./session-storage/SessionLocalStorage.js" -import { SessionMemoryStorage } from "./session-storage/SessionMemoryStorage.js" -import { - DEFAULT_SESSION_KEY_MANAGER_MODULE, - SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION -} from "./utils/Constants.js" -import { - type CreateSessionDataParams, - type CreateSessionDataResponse, - type ModuleInfo, - type ModuleVersion, - type SessionKeyManagerModuleConfig, - StorageType -} from "./utils/Types.js" -import { generateRandomHex } from "./utils/Uid.js" - -export class SessionKeyManagerModule extends BaseValidationModule { - version: ModuleVersion = "V1_0_0" - - moduleAddress!: Hex - - merkleTree!: MerkleTree - - sessionStorageClient!: ISessionStorage - - readonly mockEcdsaSessionKeySig: Hex = - "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b" - - /** - * This constructor is private. Use the static create method to instantiate SessionKeyManagerModule - * @param moduleConfig The configuration for the module - * @returns An instance of SessionKeyManagerModule - */ - private constructor(moduleConfig: SessionKeyManagerModuleConfig) { - super(moduleConfig) - } - - /** - * Asynchronously creates and initializes an instance of SessionKeyManagerModule - * @param moduleConfig The configuration for the module - * @returns A Promise that resolves to an instance of SessionKeyManagerModule - */ - public static async create( - moduleConfig: SessionKeyManagerModuleConfig - ): Promise<SessionKeyManagerModule> { - // TODO: (Joe) stop doing things in a 'create' call after the instance has been created - const instance = new SessionKeyManagerModule(moduleConfig) - - if (moduleConfig.moduleAddress) { - instance.moduleAddress = moduleConfig.moduleAddress - } else if (moduleConfig.version) { - const moduleAddr = SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION[ - moduleConfig.version - ] as Hex - if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`) - } - instance.moduleAddress = moduleAddr - instance.version = moduleConfig.version as ModuleVersion - } else { - instance.moduleAddress = DEFAULT_SESSION_KEY_MANAGER_MODULE - // Note: in this case Version remains the default one - } - - if (moduleConfig.sessionStorageClient) { - instance.sessionStorageClient = moduleConfig.sessionStorageClient - } else { - switch (moduleConfig.storageType) { - case StorageType.MEMORY_STORAGE: - instance.sessionStorageClient = new SessionMemoryStorage( - moduleConfig.smartAccountAddress - ) - break - case StorageType.LOCAL_STORAGE: - instance.sessionStorageClient = new SessionLocalStorage( - moduleConfig.smartAccountAddress - ) - break - default: - instance.sessionStorageClient = new SessionLocalStorage( - moduleConfig.smartAccountAddress - ) - } - } - - const existingSessionData = - await instance.sessionStorageClient.getAllSessionData() - const existingSessionDataLeafs = existingSessionData.map((sessionData) => { - const leafDataHex = concat([ - pad(toHex(sessionData.validUntil), { size: 6 }), - pad(toHex(sessionData.validAfter), { size: 6 }), - pad(sessionData.sessionValidationModule, { size: 20 }), - sessionData.sessionKeyData - ]) - return keccak256(leafDataHex) - }) - - instance.merkleTree = new MerkleTree(existingSessionDataLeafs, keccak256, { - sortPairs: true, - hashLeaves: false - }) - - return instance - } - - /** - * Method to create session data for any module. The session data is used to create a leaf in the merkle tree - * @param leavesData The data of one or more leaves to be used to create session data - * @returns The session data - */ - createSessionData = async ( - leavesData: CreateSessionDataParams[] - ): Promise<CreateSessionDataResponse> => { - const sessionKeyManagerModuleABI = parseAbi([ - "function setMerkleRoot(bytes32 _merkleRoot)" - ]) - - const leavesToAdd: Buffer[] = [] - const sessionIDInfo: string[] = [] - - for (const leafData of leavesData) { - const leafDataHex = concat([ - pad(toHex(leafData.validUntil), { size: 6 }), - pad(toHex(leafData.validAfter), { size: 6 }), - pad(leafData.sessionValidationModule, { size: 20 }), - leafData.sessionKeyData - ]) - - const generatedSessionId = - leafData.preferredSessionId ?? generateRandomHex() - - // TODO: verify this, might not be buffer - leavesToAdd.push(keccak256(leafDataHex) as unknown as Buffer) - sessionIDInfo.push(generatedSessionId) - - const sessionLeafNode = { - ...leafData, - sessionID: generatedSessionId, - status: "PENDING" as SessionStatus - } - - await this.sessionStorageClient.addSessionData(sessionLeafNode) - } - - this.merkleTree.addLeaves(leavesToAdd) - - const leaves = this.merkleTree.getLeaves() - - const newMerkleTree = new MerkleTree(leaves, keccak256, { - sortPairs: true, - hashLeaves: false - }) - - this.merkleTree = newMerkleTree - - const setMerkleRootData = encodeFunctionData({ - abi: sessionKeyManagerModuleABI, - functionName: "setMerkleRoot", - args: [this.merkleTree.getHexRoot() as Hex] - }) - - await this.sessionStorageClient.setMerkleRoot(this.merkleTree.getHexRoot()) - return { - data: setMerkleRootData, - sessionIDInfo: sessionIDInfo - } - } - - /** - * This method is used to sign the user operation using the session signer - * @param userOp The user operation to be signed - * @param sessionSigner The signer to be used to sign the user operation - * @returns The signature of the user operation - */ - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise<Hex> { - if (!params?.sessionSigner) { - throw new Error("Session signer is not provided.") - } - const { signer: sessionSigner } = await convertSigner( - params.sessionSigner, - false - ) - - // Use the sessionSigner to sign the user operation - const signature = await sessionSigner.signMessage({ - raw: toBytes(userOpHash) - }) - - const sessionSignerData = await this.getLeafInfo(params) - - const leafDataHex = concat([ - pad(toHex(sessionSignerData.validUntil), { size: 6 }), - pad(toHex(sessionSignerData.validAfter), { size: 6 }), - pad(sessionSignerData.sessionValidationModule, { size: 20 }), - sessionSignerData.sessionKeyData - ]) - - // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) - let paddedSignature: Hex = encodeAbiParameters( - parseAbiParameters("uint48, uint48, address, bytes, bytes32[], bytes"), - [ - sessionSignerData.validUntil, - sessionSignerData.validAfter, - sessionSignerData.sessionValidationModule, - sessionSignerData.sessionKeyData, - this.merkleTree.getHexProof(keccak256(leafDataHex)) as Hex[], - signature - ] - ) - - if (params?.additionalSessionData) { - paddedSignature += params.additionalSessionData - } - - return paddedSignature as Hex - } - - private async getLeafInfo(params: ModuleInfo): Promise<SessionLeafNode> { - if (!params?.sessionSigner) { - throw new Error("Session signer is not provided.") - } - const { signer: sessionSigner } = await convertSigner( - params.sessionSigner, - false - ) - // biome-ignore lint/suspicious/noImplicitAnyLet: <explanation> - let sessionSignerData - if (params?.sessionID) { - sessionSignerData = await this.sessionStorageClient.getSessionData({ - sessionID: params.sessionID - }) - } else if (params?.sessionValidationModule) { - sessionSignerData = await this.sessionStorageClient.getSessionData({ - sessionValidationModule: params.sessionValidationModule, - sessionPublicKey: await sessionSigner.getAddress() - }) - } else { - throw new Error( - "sessionID or sessionValidationModule should be provided." - ) - } - - return sessionSignerData - } - - /** - * Update the session data pending state to active - * @param param The search param to find the session data - * @param status The status to be updated - * @returns - */ - async updateSessionStatus( - param: SessionSearchParam, - status: SessionStatus - ): Promise<void> { - this.sessionStorageClient.updateSessionStatus(param, status) - } - - /** - * @remarks This method is used to clear all the pending sessions - * @returns - */ - async clearPendingSessions(): Promise<void> { - this.sessionStorageClient.clearPendingSessions() - } - - /** - * @returns SessionKeyManagerModule address - */ - getAddress(): Hex { - return this.moduleAddress - } - - /** - * @remarks This is the version of the module contract - */ - async getSigner(): Promise<SmartAccountSigner> { - throw new Error("Method not implemented.") - } - - /** - * @remarks This is the dummy signature for the module, used in buildUserOp for bundler estimation - * @returns Dummy signature - */ - async getDummySignature(params?: ModuleInfo): Promise<Hex> { - if (!params) { - throw new Error("Session signer is not provided.") - } - const sessionSignerData = await this.getLeafInfo(params) - const leafDataHex = concat([ - pad(toHex(sessionSignerData.validUntil), { size: 6 }), - pad(toHex(sessionSignerData.validAfter), { size: 6 }), - pad(sessionSignerData.sessionValidationModule, { size: 20 }), - sessionSignerData.sessionKeyData - ]) - - // Generate the padded signature with (validUntil,validAfter,sessionVerificationModuleAddress,validationData,merkleProof,signature) - let paddedSignature: Hex = encodeAbiParameters( - parseAbiParameters("uint48, uint48, address, bytes, bytes32[], bytes"), - [ - sessionSignerData.validUntil, - sessionSignerData.validAfter, - sessionSignerData.sessionValidationModule, - sessionSignerData.sessionKeyData, - this.merkleTree.getHexProof(keccak256(leafDataHex)) as Hex[], - this.mockEcdsaSessionKeySig - ] - ) - if (params?.additionalSessionData) { - paddedSignature += params.additionalSessionData - } - - const dummySig = encodeAbiParameters( - parseAbiParameters(["bytes, address"]), - [paddedSignature as Hex, this.getAddress()] - ) - - return dummySig - } - - /** - * @remarks Other modules may need additional attributes to build init data - */ - async getInitData(): Promise<Hex> { - throw new Error("Method not implemented.") - } - - /** - * @remarks This Module dont have knowledge of signer. So, this method is not implemented - */ - async signMessage(_message: Uint8Array | string): Promise<string> { - throw new Error("Method not implemented.") - } -} diff --git a/src/modules/index.ts b/src/modules/index.ts index b31dc4981..a91188930 100644 --- a/src/modules/index.ts +++ b/src/modules/index.ts @@ -2,33 +2,9 @@ export * from "./utils/Types.js" export * from "./utils/Constants.js" export * from "./utils/Helper.js" export * from "./interfaces/IValidationModule.js" -export * from "./interfaces/ISessionValidationModule.js" export * from "./BaseValidationModule.js" -export * from "./ECDSAOwnershipValidationModule.js" -export * from "./MultichainValidationModule.js" -export * from "./SessionKeyManagerModule.js" -export * from "./BatchedSessionRouterModule.js" -export * from "./session-validation-modules/ERC20SessionValidationModule.js" -export * from "./sessions/abi.js" -export * from "./sessions/erc20.js" -export * from "./sessions/batch.js" -export * from "./sessions/sessionSmartAccountClient.js" -export * from "./session-storage/index.js" -import { - BatchedSessionRouterModule, - ECDSAOwnershipValidationModule, - ERC20SessionValidationModule, - MultiChainValidationModule, - SessionKeyManagerModule -} from "./index.js" +export * from "./K1ValidatorModule.js" +import { K1ValidatorModule } from "./index.js" -export const createBatchedSessionRouterModule = - BatchedSessionRouterModule.create -export const createMultiChainValidationModule = - MultiChainValidationModule.create -export const createECDSAOwnershipValidationModule = - ECDSAOwnershipValidationModule.create -export const createSessionKeyManagerModule = SessionKeyManagerModule.create -export const createERC20SessionValidationModule = - ERC20SessionValidationModule.create +export const createECDSAOwnershipValidationModule = K1ValidatorModule.create // export * from './PasskeyValidationModule' diff --git a/src/modules/interfaces/ISessionStorage.ts b/src/modules/interfaces/ISessionStorage.ts deleted file mode 100644 index a2076e5a5..000000000 --- a/src/modules/interfaces/ISessionStorage.ts +++ /dev/null @@ -1,99 +0,0 @@ -import type { Chain, Hex } from "viem" -import type { SmartAccountSigner } from "../../account" -import type { SignerData } from "../utils/Types.js" - -export type SessionStatus = "PENDING" | "ACTIVE" | "INACTIVE" | "EXPIRED" - -export type SessionLeafNode = { - validUntil: number - validAfter: number - sessionValidationModule: Hex - sessionKeyData: Hex - sessionPublicKey: Hex - sessionID?: string - status: SessionStatus -} - -export type SessionSearchParam = { - sessionID?: string - sessionPublicKey?: Hex - sessionValidationModule?: Hex - status?: SessionStatus -} - -export interface ISessionStorage { - /** - * The address of the smartAccount - */ - smartAccountAddress: Hex - - /** - * Adds a session leaf node to the session storage - * @param leaf SessionLeafNode to be added to the session storage - */ - addSessionData(_leaf: SessionLeafNode): Promise<void> - - /** - * Fetch a session leaf node from the session storage - * @param param SessionSearchParam to be used to fetch the session leaf node - */ - getSessionData(_param: SessionSearchParam): Promise<SessionLeafNode> - - /** - * Updates the session status of a session leaf node in the session storage - * @param param SessionSearchParam to be used to fetch the session leaf node - * @param status New session status to be updated - */ - updateSessionStatus( - _param: SessionSearchParam, - _status: SessionStatus - ): Promise<void> - - /** - * Clears all the pending sessions from the session storage - */ - clearPendingSessions(): Promise<void> - - /** - * If a signer object is passed, it will be added to the session storage - * If no signer object is passed, it'll create a random signer and add it to the session storage - * @param signer Optional signer to be added to the session storage - */ - addSigner(_signer?: SignerData, chain?: Chain): Promise<SmartAccountSigner> - - /** - * Fetch a signer from the session storage - * @param signerPublicKey Public key of the signer to be fetched - */ - getSignerByKey( - _signerPublicKey: string, - chain: Chain - ): Promise<SmartAccountSigner> - - /** - * Fetch a signer from the session storage based on the session search param - * @param param SessionSearchParam to be used to fetch the signer - */ - getSignerBySession( - _param: SessionSearchParam, - chain: Chain - ): Promise<SmartAccountSigner> - - /** - * Fetch all the session leaf nodes from the session storage based on the session search param. - * If no param is passed, it'll fetch all the session leaf nodes from the session storage - * @param param SessionSearchParam to be used to fetch the session leaf nodes - */ - getAllSessionData(_param?: SessionSearchParam): Promise<SessionLeafNode[]> - - /** - * Fetch merkle root from the session storage - */ - getMerkleRoot(): Promise<string> - - /** - * Set merkle root in the session storage - * @param merkleRoot Merkle root to be set in the session storage - */ - setMerkleRoot(_merkleRoot: string): Promise<void> -} diff --git a/src/modules/interfaces/ISessionValidationModule.ts b/src/modules/interfaces/ISessionValidationModule.ts deleted file mode 100644 index d0e8f5be8..000000000 --- a/src/modules/interfaces/ISessionValidationModule.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Interface for implementing a Session Validation Module. - * Session Validation Modules works along with SessionKeyManager - * and generate module specific sessionKeyData which is to be - * verified by SessionValidationModule on chain. - * - * @remarks sessionData is of generic type T which is specific to the module - * - * @author Sachin Tomar <sachin.tomar@biconomy.io> - */ -export interface ISessionValidationModule<T> { - getSessionKeyData(_sessionData: T): Promise<string> - getAddress(): string -} diff --git a/src/modules/session-storage/SessionLocalStorage.ts b/src/modules/session-storage/SessionLocalStorage.ts deleted file mode 100644 index a1cbe76fb..000000000 --- a/src/modules/session-storage/SessionLocalStorage.ts +++ /dev/null @@ -1,209 +0,0 @@ -import { http, type Chain, type Hex, createWalletClient } from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { type SmartAccountSigner, WalletClientSigner } from "../../account" -import { getRandomSigner } from "../../index.js" -import type { - ISessionStorage, - SessionLeafNode, - SessionSearchParam, - SessionStatus -} from "../interfaces/ISessionStorage.js" -import type { SignerData } from "../utils/Types.js" - -export const supportsLocalStorage = - // @ts-ignore: LocalStorage is not available in node - typeof window !== "undefined" && typeof window.localStorage !== "undefined" - -export class SessionLocalStorage implements ISessionStorage { - public smartAccountAddress: Hex - - constructor(smartAccountAddress: Hex) { - this.smartAccountAddress = smartAccountAddress.toLowerCase() as Hex - } - - private validateSearchParam(param: SessionSearchParam): void { - if ( - param.sessionID || - (!param.sessionID && - param.sessionPublicKey && - param.sessionValidationModule) - ) { - return - } - throw new Error( - "Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address." - ) - } - private getSessionStore() { - // @ts-ignore: LocalStorage is not available in node - const data = localStorage.getItem(this.getStorageKey("sessions")) - return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] } - } - - private getSignerStore(): Record<string, SignerData> { - // @ts-ignore: LocalStorage is not available in node - const data = localStorage.getItem(this.getStorageKey("signers")) - return data ? JSON.parse(data) : {} - } - - private getStorageKey(type: "sessions" | "signers"): string { - return `${this.smartAccountAddress}_${type}` - } - - private toLowercaseAddress(address: string): string { - return address.toLowerCase() - } - - async addSessionData(leaf: SessionLeafNode): Promise<void> { - const data = this.getSessionStore() - leaf.sessionValidationModule = this.toLowercaseAddress( - leaf.sessionValidationModule - ) as Hex - leaf.sessionPublicKey = this.toLowercaseAddress( - leaf.sessionPublicKey - ) as Hex - data.leafNodes.push(leaf) - // @ts-ignore: LocalStorage is not available in node - localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) - } - - async getSessionData(param: SessionSearchParam): Promise<SessionLeafNode> { - this.validateSearchParam(param) - - const sessions = this.getSessionStore().leafNodes - const session = sessions.find((s: SessionLeafNode) => { - if (param.sessionID) { - return ( - s.sessionID === param.sessionID && - (!param.status || s.status === param.status) - ) - } - if (param.sessionPublicKey && param.sessionValidationModule) { - return ( - s.sessionPublicKey === - this.toLowercaseAddress(param.sessionPublicKey) && - s.sessionValidationModule === - this.toLowercaseAddress(param.sessionValidationModule) && - (!param.status || s.status === param.status) - ) - } - return undefined - }) - - if (!session) { - throw new Error("Session not found.") - } - return session - } - - async updateSessionStatus( - param: SessionSearchParam, - status: SessionStatus - ): Promise<void> { - this.validateSearchParam(param) - - const data = this.getSessionStore() - const session = data.leafNodes.find((s: SessionLeafNode) => { - if (param.sessionID) { - return s.sessionID === param.sessionID - } - if (param.sessionPublicKey && param.sessionValidationModule) { - return ( - s.sessionPublicKey === - this.toLowercaseAddress(param.sessionPublicKey) && - s.sessionValidationModule === - this.toLowercaseAddress(param.sessionValidationModule) - ) - } - return undefined - }) - - if (!session) { - throw new Error("Session not found.") - } - - session.status = status - // @ts-ignore: LocalStorage is not available in node - localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) - } - - async clearPendingSessions(): Promise<void> { - const data = this.getSessionStore() - data.leafNodes = data.leafNodes.filter( - (s: SessionLeafNode) => s.status !== "PENDING" - ) - // @ts-ignore: LocalStorage is not available in node - localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) - } - - async addSigner( - signerData: SignerData, - chain: Chain - ): Promise<SmartAccountSigner> { - const signers = this.getSignerStore() - const signer: SignerData = signerData ?? getRandomSigner() - const accountSigner = privateKeyToAccount(signer.pvKey) - const client = createWalletClient({ - account: accountSigner, - chain, - transport: http() - }) - const walletClientSigner = new WalletClientSigner( - client, - "json-rpc" // signerType - ) - signers[this.toLowercaseAddress(accountSigner.address)] = signer - // @ts-ignore: LocalStorage is not available in node - localStorage.setItem(this.getStorageKey("signers"), JSON.stringify(signers)) - return walletClientSigner - } - - async getSignerByKey( - sessionPublicKey: string, - chain: Chain - ): Promise<SmartAccountSigner> { - const signers = this.getSignerStore() - const signerData = signers[this.toLowercaseAddress(sessionPublicKey)] - if (!signerData) { - throw new Error("Signer not found.") - } - const account = privateKeyToAccount(signerData.pvKey) - const client = createWalletClient({ - account, - chain, - transport: http() - }) - const signer = new WalletClientSigner(client, "viem") - return signer - } - - async getSignerBySession( - param: SessionSearchParam, - chain: Chain - ): Promise<SmartAccountSigner> { - const session = await this.getSessionData(param) - return this.getSignerByKey(session.sessionPublicKey, chain) - } - - async getAllSessionData( - param?: SessionSearchParam - ): Promise<SessionLeafNode[]> { - const sessions = this.getSessionStore().leafNodes - if (!param || !param.status) { - return sessions - } - return sessions.filter((s: SessionLeafNode) => s.status === param.status) - } - - async getMerkleRoot(): Promise<string> { - return this.getSessionStore().merkleRoot - } - - setMerkleRoot(merkleRoot: string): Promise<void> { - const data = this.getSessionStore() - data.merkleRoot = merkleRoot - // @ts-ignore: LocalStorage is not available in node - localStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) - return Promise.resolve() - } -} diff --git a/src/modules/session-storage/SessionMemoryStorage.ts b/src/modules/session-storage/SessionMemoryStorage.ts deleted file mode 100644 index 1278352bd..000000000 --- a/src/modules/session-storage/SessionMemoryStorage.ts +++ /dev/null @@ -1,217 +0,0 @@ -import { http, type Chain, type Hex, createWalletClient } from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { type SmartAccountSigner, WalletClientSigner } from "../../account" -import type { - ISessionStorage, - SessionLeafNode, - SessionSearchParam, - SessionStatus -} from "../interfaces/ISessionStorage.js" -import { getRandomSigner } from "../utils/Helper.js" -import type { SignerData } from "../utils/Types.js" - -type MemoryStore = { - _store: Record<string, string> - getItem: (key: string) => string | undefined - setItem: (key: string, value: string) => void -} -const memoryStorage: MemoryStore = { - _store: {}, - getItem: (key: string): string => { - return memoryStorage._store[key] - }, - setItem: (key: string, value: string) => { - memoryStorage._store[key] = value - } -} - -export class SessionMemoryStorage implements ISessionStorage { - public smartAccountAddress: Hex - - constructor(smartAccountAddress: Hex) { - this.smartAccountAddress = smartAccountAddress.toLowerCase() as Hex - } - - private validateSearchParam(param: SessionSearchParam): void { - if ( - param.sessionID || - (!param.sessionID && - param.sessionPublicKey && - param.sessionValidationModule) - ) { - return - } - throw new Error( - "Either pass sessionId or a combination of sessionPublicKey and sessionValidationModule address." - ) - } - - private getSessionStore() { - const data = memoryStorage.getItem(this.getStorageKey("sessions")) - return data ? JSON.parse(data) : { merkleRoot: "", leafNodes: [] } - } - - public getSignerStore(): Record<string, SignerData> { - const data = memoryStorage.getItem(this.getStorageKey("signers")) - return data ? JSON.parse(data) : {} - } - - private getStorageKey(type: "sessions" | "signers"): string { - return `${this.smartAccountAddress}_${type}` - } - - private toLowercaseAddress(address: string): string { - return address.toLowerCase() - } - - async addSessionData(leaf: SessionLeafNode): Promise<void> { - const data = this.getSessionStore() - leaf.sessionValidationModule = this.toLowercaseAddress( - leaf.sessionValidationModule - ) as Hex - leaf.sessionPublicKey = this.toLowercaseAddress( - leaf.sessionPublicKey - ) as Hex - data.leafNodes.push(leaf) - memoryStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) - } - - async getSessionData(param: SessionSearchParam): Promise<SessionLeafNode> { - this.validateSearchParam(param) - - const sessions = this.getSessionStore().leafNodes - const session = sessions.find((s: SessionLeafNode) => { - if (param.sessionID) { - return ( - s.sessionID === param.sessionID && - (!param.status || s.status === param.status) - ) - } - if (param.sessionPublicKey && param.sessionValidationModule) { - return ( - s.sessionPublicKey === - this.toLowercaseAddress(param.sessionPublicKey) && - s.sessionValidationModule === - this.toLowercaseAddress(param.sessionValidationModule) && - (!param.status || s.status === param.status) - ) - } - return undefined - }) - - if (!session) { - throw new Error("Session not found.") - } - return session - } - - async updateSessionStatus( - param: SessionSearchParam, - status: SessionStatus - ): Promise<void> { - this.validateSearchParam(param) - - const data = this.getSessionStore() - const session = data.leafNodes.find((s: SessionLeafNode) => { - if (param.sessionID) { - return s.sessionID === param.sessionID - } - if (param.sessionPublicKey && param.sessionValidationModule) { - return ( - s.sessionPublicKey === - this.toLowercaseAddress(param.sessionPublicKey) && - s.sessionValidationModule === - this.toLowercaseAddress(param.sessionValidationModule) - ) - } - return undefined - }) - - if (!session) { - throw new Error("Session not found.") - } - - session.status = status - memoryStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) - } - - async clearPendingSessions(): Promise<void> { - const data = this.getSessionStore() - data.leafNodes = data.leafNodes.filter( - (s: SessionLeafNode) => s.status !== "PENDING" - ) - memoryStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) - } - - async addSigner( - signerData: SignerData, - chain: Chain - ): Promise<SmartAccountSigner> { - const signers = this.getSignerStore() - const signer: SignerData = signerData ?? getRandomSigner() - const accountSigner = privateKeyToAccount(signer.pvKey) - const client = createWalletClient({ - account: accountSigner, - chain, - transport: http() - }) - const walletClientSigner = new WalletClientSigner( - client, - "json-rpc" // signerType - ) - signers[this.toLowercaseAddress(accountSigner.address)] = signer - memoryStorage.setItem( - this.getStorageKey("signers"), - JSON.stringify(signers) - ) - return walletClientSigner - } - - async getSignerByKey( - sessionPublicKey: string, - chain: Chain - ): Promise<SmartAccountSigner> { - const signers = this.getSignerStore() - const signerData = signers[this.toLowercaseAddress(sessionPublicKey)] - if (!signerData) { - throw new Error("Signer not found.") - } - const account = privateKeyToAccount(signerData.pvKey) - const client = createWalletClient({ - account, - chain, - transport: http() - }) - const signer = new WalletClientSigner(client, "viem") - return signer - } - - async getSignerBySession( - param: SessionSearchParam, - chain: Chain - ): Promise<SmartAccountSigner> { - const session = await this.getSessionData(param) - return this.getSignerByKey(session.sessionPublicKey, chain) - } - - async getAllSessionData( - param?: SessionSearchParam - ): Promise<SessionLeafNode[]> { - const sessions = this.getSessionStore().leafNodes - if (!param || !param.status) { - return sessions - } - return sessions.filter((s: SessionLeafNode) => s.status === param.status) - } - - async getMerkleRoot(): Promise<string> { - return this.getSessionStore().merkleRoot - } - - setMerkleRoot(merkleRoot: string): Promise<void> { - const data = this.getSessionStore() - data.merkleRoot = merkleRoot - memoryStorage.setItem(this.getStorageKey("sessions"), JSON.stringify(data)) - return Promise.resolve() - } -} diff --git a/src/modules/session-storage/index.ts b/src/modules/session-storage/index.ts deleted file mode 100644 index 1b7c6ad60..000000000 --- a/src/modules/session-storage/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { SessionLocalStorage } from "./SessionLocalStorage.js" -export { SessionMemoryStorage } from "./SessionMemoryStorage.js" -export * from "./utils.js" diff --git a/src/modules/session-storage/utils.ts b/src/modules/session-storage/utils.ts deleted file mode 100644 index 526d2e3c4..000000000 --- a/src/modules/session-storage/utils.ts +++ /dev/null @@ -1,65 +0,0 @@ -import type { Address, Chain, Hex } from "viem" -import type { BiconomySmartAccountV2, SmartAccountSigner } from "../../account" -import type { ISessionStorage } from "../interfaces/ISessionStorage" -import { supportsLocalStorage } from "./SessionLocalStorage" -import { SessionLocalStorage, SessionMemoryStorage } from "./index.js" - -export type SessionStoragePayload = { - sessionKeyAddress: Hex - signer: SmartAccountSigner - sessionStorageClient: ISessionStorage -} - -/** - * createSessionKeyEOA - * - * This function is used to store a new session key in the session storage. - * If the session storage client is not provided as the third argument, it will create a new session storage client based on the environment. - * When localStorage is supported, it will return SessionLocalStorage, otherwise it will assume you are in a backend and use SessionMemoryStorage. - * - * @param smartAccount: BiconomySmartAccountV2 - * @param chain: Chain - * @param _sessionStorageClient: ISessionStorage - * @returns - */ -export const createSessionKeyEOA = async ( - smartAccount: BiconomySmartAccountV2, - chain: Chain, - _sessionStorageClient?: ISessionStorage -): Promise<SessionStoragePayload> => { - const userAccountAddress = await smartAccount.getAddress() - const sessionStorageClient = - _sessionStorageClient ?? getDefaultStorageClient(userAccountAddress) - const newSigner = await sessionStorageClient.addSigner(undefined, chain) - const sessionKeyAddress = await newSigner.getAddress() - return { sessionKeyAddress, signer: newSigner, sessionStorageClient } -} - -export const inTesting = (): boolean => { - try { - return process?.env?.TESTING?.toString() === "true" - } catch (e) { - return false - } -} - -export const inNodeBackend = (): boolean => { - try { - return typeof process === "object" && process?.release?.name === "node" - } catch (e) { - return false - } -} - -export const getDefaultStorageClient = (address: Address): ISessionStorage => { - if (inTesting()) { - return new SessionMemoryStorage(address) - } - if (supportsLocalStorage) { - return new SessionLocalStorage(address) - } - if (inNodeBackend()) { - return new SessionMemoryStorage(address) // Fallback to memory storage - } - throw new Error("No session storage client available") -} diff --git a/src/modules/session-validation-modules/ERC20SessionValidationModule.ts b/src/modules/session-validation-modules/ERC20SessionValidationModule.ts deleted file mode 100644 index 1e047cc6e..000000000 --- a/src/modules/session-validation-modules/ERC20SessionValidationModule.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { encodeAbiParameters, parseAbiParameters } from "viem" -import type { ISessionValidationModule } from "../interfaces/ISessionValidationModule.js" -import type { - ERC20SessionKeyData, - SessionValidationModuleConfig -} from "../utils/Types.js" - -/** - * Session validation module for ERC20 token transfers. - * It encodes session data into a sessionKeyData bytes to be verified by ERC20SessionValidationModule on chain. - * - * @author Sachin Tomar <sachin.tomar@biconomy.io> - */ -export class ERC20SessionValidationModule - implements ISessionValidationModule<ERC20SessionKeyData> -{ - moduleAddress!: string - - version = "V1_0_0" - - /** - * This constructor is private. Use the static create method to instantiate ERC20SessionValidationModule - * @param moduleConfig The configuration for the module - * @returns An instance of ERC20SessionValidationModule - */ - private constructor(moduleConfig: SessionValidationModuleConfig) { - if (!moduleConfig.moduleAddress) { - throw new Error("Module address is required") - } - this.moduleAddress = moduleConfig.moduleAddress - } - - /** - * Asynchronously creates and initializes an instance of ERC20SessionValidationModule - * @param moduleConfig The configuration for the module - * @returns A Promise that resolves to an instance of ERC20SessionValidationModule - */ - public static async create( - moduleConfig: SessionValidationModuleConfig - ): Promise<ERC20SessionValidationModule> { - const module = new ERC20SessionValidationModule(moduleConfig) - return module - } - - async getSessionKeyData(sessionData: ERC20SessionKeyData): Promise<string> { - this._validateSessionKeyData(sessionData) - const sessionKeyData = encodeAbiParameters( - parseAbiParameters("address, address, address, uint256"), - [ - sessionData.sessionKey, - sessionData.token, - sessionData.recipient, - sessionData.maxAmount - ] - ) - return sessionKeyData - } - - private _validateSessionKeyData(sessionData: ERC20SessionKeyData): void { - if (!sessionData) { - throw new Error("Session data is required") - } - if (!sessionData.sessionKey) { - throw new Error("Session key is required in sessionData") - } - if (!sessionData.token) { - throw new Error("Token address is required in sessionData") - } - if (!sessionData.recipient) { - throw new Error("Recipient address is required in sessionData") - } - if (!sessionData.maxAmount) { - throw new Error("MaxAmount is required in sessionData") - } - } - - getAddress(): string { - return this.moduleAddress - } -} diff --git a/src/modules/sessions/abi.ts b/src/modules/sessions/abi.ts deleted file mode 100644 index efad26cd0..000000000 --- a/src/modules/sessions/abi.ts +++ /dev/null @@ -1,388 +0,0 @@ -import { - type AbiFunction, - type ByteArray, - type Chain, - type Hex, - concat, - pad, - slice, - toFunctionSelector, - toHex -} from "viem" -import type { - CreateSessionDataParams, - Permission, - SessionParams, - UserOpResponse -} from "../../" -import { - type BiconomySmartAccountV2, - type BuildUserOpOptions, - ERROR_MESSAGES, - Logger, - type Transaction -} from "../../account" -import { - createSessionKeyManagerModule, - didProvideFullSession, - resumeSession -} from "../index" -import type { ISessionStorage } from "../interfaces/ISessionStorage" -import { - DEFAULT_ABI_SVM_MODULE, - DEFAULT_SESSION_KEY_MANAGER_MODULE -} from "../utils/Constants" -import type { SessionSearchParam } from "../utils/Helper" -import type { DeprecatedPermission, Rule } from "../utils/Helper" - -export type SessionConfig = { - usersAccountAddress: Hex - smartAccount: BiconomySmartAccountV2 -} - -export type Session = { - /** The storage client specific to the smartAccountAddress which stores the session keys */ - sessionStorageClient: ISessionStorage - /** The relevant sessionID for the chosen session */ - sessionIDInfo: string[] -} - -export type SessionEpoch = { - /** The time at which the session is no longer valid */ - validUntil?: number - /** The time at which the session becomes valid */ - validAfter?: number -} - -export type Policy = { - /** The address of the contract to be included in the policy */ - contractAddress: Hex - /** The address of the sessionKey upon which the policy is to be imparted */ - sessionKeyAddress: Hex - /** The specific function selector from the contract to be included in the policy */ - functionSelector: string | AbiFunction - /** The rules to be included in the policy */ - rules: Rule[] - /** The time interval within which the session is valid. If left unset the session will remain invalid indefinitely */ - interval?: SessionEpoch - /** The maximum value that can be transferred in a single transaction */ - valueLimit: bigint -} - -export type SessionGrantedPayload = UserOpResponse & { session: Session } - -/** - * - * createSession - * - * Creates a session for a user's smart account. - * This grants a dapp permission to execute a specific function on a specific contract on behalf of a user. - * Permissions can be specified by the dapp in the form of rules{@link Rule}, and then submitted to the user for approval via signing. - * The session keys granted with the imparted policy are stored in a StorageClient {@link ISessionStorage}. They can later be retrieved and used to validate userops. - * - * @param smartAccount - The user's {@link BiconomySmartAccountV2} smartAccount instance. - * @param sessionKeyAddress - The address of the sessionKey upon which the policy is to be imparted. - * @param policy - An array of session configurations {@link Policy}. - * @param sessionStorageClient - The storage client to store the session keys. {@link ISessionStorage} - * @param buildUseropDto - Optional. {@link BuildUserOpOptions} - * @returns Promise<{@link SessionGrantedPayload}> - An object containing the status of the transaction and the sessionID. - * - * @example - * - * ```typescript - * import { createClient } from "viem" - * import { createSmartAccountClient } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonAmoy } from "viem/chains"; - * import { SessionFileStorage } from "@biconomy/session-file-storage"; - * const signer = createWalletClient({ - * account, - * chain: polygonAmoy, - * transport: http(), - * }); - * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, paymasterUrl }); // Retrieve bundler/paymaster url from dashboard - * const smartAccountAddress = await smartAccount.getAccountAddress(); - * const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - * const sessionStorage = new SessionFileStorage(smartAccountAddress) - * const sessionKeyAddress = (await sessionStorage.addSigner(undefined, polygonAmoy)).getAddress(); - * - * const { wait, sessionID } = await createSession( - * smartAccount, - * [ - * { - * sessionKeyAddress, - * contractAddress: nftAddress, - * functionSelector: "safeMint(address)", - * rules: [ - * { - * offset: 0, - * condition: 0, - * referenceValue: smartAccountAddress - * } - * ], - * interval: { - * validUntil: 0, - * validAfter: 0 - * }, - * valueLimit: 0n - * } - * ], - * sessionStorage, - * { - * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - * } - * ) - * - * const { - * receipt: { transactionHash }, - * success - * } = await wait(); - * - * console.log({ sessionID, success }); // Use the sessionID later to retrieve the sessionKey from the storage client - * ``` - */ -export const createSession = async ( - smartAccount: BiconomySmartAccountV2, - policy: Policy[], - sessionStorageClient: ISessionStorage, - buildUseropDto?: BuildUserOpOptions -): Promise<SessionGrantedPayload> => { - const smartAccountAddress = await smartAccount.getAddress() - const sessionsModule = await createSessionKeyManagerModule({ - smartAccountAddress, - sessionStorageClient - }) - - const { data: policyData, sessionIDInfo } = - await sessionsModule.createSessionData(policy.map(createABISessionDatum)) - - const permitTx = { - to: DEFAULT_SESSION_KEY_MANAGER_MODULE, - data: policyData - } - - const txs: Transaction[] = [] - - const isDeployed = await smartAccount.isAccountDeployed() - const enableSessionTx = await smartAccount.getEnableModuleData( - DEFAULT_SESSION_KEY_MANAGER_MODULE - ) - - if (isDeployed) { - const enabled = await smartAccount.isModuleEnabled( - DEFAULT_SESSION_KEY_MANAGER_MODULE - ) - if (!enabled) { - txs.push(enableSessionTx) - } - } else { - Logger.log(ERROR_MESSAGES.ACCOUNT_NOT_DEPLOYED) - txs.push(enableSessionTx) - } - - txs.push(permitTx) - - const userOpResponse = await smartAccount.sendTransaction(txs, buildUseropDto) - - return { - session: { - sessionStorageClient, - sessionIDInfo - }, - ...userOpResponse - } -} - -export type HardcodedFunctionSelector = { - raw: Hex -} - -export type CreateSessionDatumParams = { - interval?: SessionEpoch - sessionKeyAddress: Hex - contractAddress: Hex - functionSelector: string | AbiFunction | HardcodedFunctionSelector - rules: Rule[] - valueLimit: bigint -} - -/** - * - * createABISessionDatum - * - * Used to create a session datum for the ABI Session Validation Module. - * It can also be used to create a session datum for batchSession mode. - * - * @param createSessionDataParams - {@link CreateSessionDatumParams} - * @returns {@link CreateSessionDataParams} - */ -export const createABISessionDatum = ({ - /** The time interval within which the session is valid. If left unset the session will remain invalid indefinitely {@link SessionEpoch} */ - interval, - /** The sessionKeyAddress upon which the policy is to be imparted. Used as a reference to the stored session keys */ - sessionKeyAddress, - /** The address of the contract to be included in the policy */ - contractAddress, - /** The specific function selector from the contract to be included in the policy */ - functionSelector, - /** The rules to be included in the policy */ - rules, - /** The maximum value that can be transferred in a single transaction */ - valueLimit -}: CreateSessionDatumParams): CreateSessionDataParams => { - const { validUntil = 0, validAfter = 0 } = interval ?? {} - - let parsedFunctionSelector: Hex = "0x" - - const rawFunctionSelectorWasProvided = !!( - functionSelector as HardcodedFunctionSelector - )?.raw - - if (rawFunctionSelectorWasProvided) { - parsedFunctionSelector = (functionSelector as HardcodedFunctionSelector).raw - } else { - const unparsedFunctionSelector = functionSelector as AbiFunction | string - parsedFunctionSelector = slice( - toFunctionSelector(unparsedFunctionSelector), - 0, - 4 - ) - } - - return { - validUntil, - validAfter, - sessionValidationModule: DEFAULT_ABI_SVM_MODULE, - sessionPublicKey: sessionKeyAddress, - sessionKeyData: getSessionDatum(sessionKeyAddress, { - destContract: contractAddress, - functionSelector: parsedFunctionSelector, - valueLimit, - rules - }) - } -} - -/** - * @deprecated - */ -export async function getABISVMSessionKeyData( - sessionKey: `0x${string}` | Uint8Array, - permission: DeprecatedPermission -): Promise<`0x${string}` | Uint8Array> { - let sessionKeyData = concat([ - sessionKey, - permission.destContract, - permission.functionSelector, - pad(toHex(permission.valueLimit), { size: 16 }), - pad(toHex(permission.rules.length), { size: 2 }) // this can't be more 2**11 (see below), so uint16 (2 bytes) is enough - ]) as `0x${string}` - - for (let i = 0; i < permission.rules.length; i++) { - sessionKeyData = concat([ - sessionKeyData, - pad(toHex(permission.rules[i].offset), { size: 2 }), // offset is uint16, so there can't be more than 2**16/32 args = 2**11 - pad(toHex(permission.rules[i].condition), { size: 1 }), // uint8 - permission.rules[i].referenceValue - ]) - } - return sessionKeyData -} - -export function getSessionDatum( - sessionKeyAddress: Hex, - permission: Permission -): Hex { - let sessionKeyData = concat([ - sessionKeyAddress, - permission.destContract, - permission.functionSelector, - pad(toHex(permission.valueLimit), { size: 16 }), - pad(toHex(permission.rules.length), { size: 2 }) // this can't be more 2**11 (see below), so uint16 (2 bytes) is enough - ]) as Hex - - for (let i = 0; i < permission.rules.length; i++) { - sessionKeyData = concat([ - sessionKeyData, - pad(toHex(permission.rules[i].offset), { size: 2 }), // offset is uint16, so there can't be more than 2**16/32 args = 2**11 - pad(toHex(permission.rules[i].condition), { size: 1 }), // uint8 - parseReferenceValue(permission.rules[i].referenceValue) - ]) as Hex - } - - return sessionKeyData -} - -export type HardcodedReference = { - raw: Hex -} -type BaseReferenceValue = string | number | bigint | boolean | ByteArray -type AnyReferenceValue = BaseReferenceValue | HardcodedReference - -/** - * - * parseReferenceValue - * - * Parses the reference value to a hex string. - * The reference value can be hardcoded using the {@link HardcodedReference} type. - * Otherwise, it can be a string, number, bigint, boolean, or ByteArray. - * - * @param referenceValue {@link AnyReferenceValue} - * @returns Hex - */ -export function parseReferenceValue(referenceValue: AnyReferenceValue): Hex { - try { - if ((referenceValue as HardcodedReference)?.raw) { - return (referenceValue as HardcodedReference)?.raw - } - if (typeof referenceValue === "bigint") { - return pad(toHex(referenceValue), { size: 32 }) as Hex - } - return pad(referenceValue as Hex, { size: 32 }) - } catch (e) { - return pad(referenceValue as Hex, { size: 32 }) - } -} - -export type SingleSessionParamsPayload = { - params: SessionParams -} -/** - * getSingleSessionTxParams - * - * Retrieves the transaction parameters for a batched session. - * - * @param correspondingIndex - An index for the transaction corresponding to the relevant session. If not provided, the last session index is used. - * @param conditionalSession - {@link SessionSearchParam} The session data that contains the sessionID and sessionSigner. If not provided, The default session storage (localStorage in browser, fileStorage in node backend) is used to fetch the sessionIDInfo - * @param chain - The chain. - * @returns Promise<{@link BatchSessionParamsPayload}> - session parameters. - * - */ -export const getSingleSessionTxParams = async ( - conditionalSession: SessionSearchParam, - chain: Chain, - correspondingIndex: number | null | undefined -): Promise<SingleSessionParamsPayload> => { - const { sessionStorageClient } = await resumeSession(conditionalSession) - - // if correspondingIndex is null then use the last session. - const allSessions = await sessionStorageClient.getAllSessionData() - const sessionID = didProvideFullSession(conditionalSession) - ? (conditionalSession as Session).sessionIDInfo[correspondingIndex ?? 0] - : allSessions[correspondingIndex ?? allSessions.length - 1].sessionID - - const sessionSigner = await sessionStorageClient.getSignerBySession( - { - sessionID - }, - chain - ) - - return { - params: { - sessionSigner, - sessionID - } - } -} diff --git a/src/modules/sessions/batch.ts b/src/modules/sessions/batch.ts deleted file mode 100644 index 520b795b0..000000000 --- a/src/modules/sessions/batch.ts +++ /dev/null @@ -1,251 +0,0 @@ -import type { Chain } from "viem" -import { - type BiconomySmartAccountV2, - type BuildUserOpOptions, - ERROR_MESSAGES, - Logger, - type Transaction, - isNullOrUndefined -} from "../../account" -import { - type CreateSessionDataParams, - DEFAULT_BATCHED_SESSION_ROUTER_MODULE, - DEFAULT_SESSION_KEY_MANAGER_MODULE, - type Session, - type SessionGrantedPayload, - type SessionParams, - type SessionSearchParam, - createBatchedSessionRouterModule, - createSessionKeyManagerModule, - didProvideFullSession, - resumeSession -} from "../index.js" -import type { ISessionStorage } from "../interfaces/ISessionStorage" - -export type CreateBatchSessionConfig = { - /** The storage client to be used for storing the session data */ - sessionStorageClient: ISessionStorage - /** An array of session configurations */ - leaves: CreateSessionDataParams[] -} - -/** - * - * createBatchSession - * - * Creates a session manager that handles multiple sessions at once for a given user's smart account. - * Useful for handling multiple granted sessions at once. - * - * @param smartAccount - The user's {@link BiconomySmartAccountV2} smartAccount instance. - * @param sessionKeyAddress - The address of the sessionKey upon which the policy is to be imparted. - * @param batchSessionConfig - An array of session configurations {@link CreateBatchSessionConfig}. - * @param buildUseropDto - Optional. {@link BuildUserOpOptions} - * @returns Promise<{@link SessionGrantedPayload}> - An object containing the status of the transaction and the sessionID. - * - * @example - * - * ```typescript - * import { createClient } from "viem" - * import { createSmartAccountClient } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonAmoy } from "viem/chains"; - * import { SessionFileStorage } from "@biconomy/session-file-storage"; - -* const signer = createWalletClient({ - * account, - * chain: polygonAmoy, - * transport: http(), - * }); - * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, paymasterUrl }); // Retrieve bundler/paymaster url from dashboard - * const smartAccountAddress = await smartAccount.getAccountAddress(); - * const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - * const sessionStorage = new SessionFileStorage(smartAccountAddress); - * const sessionKeyAddress = (await sessionStorage.addSigner(undefined, polygonAmoy)).getAddress(); - * - * const leaves: CreateSessionDataParams[] = [ - * createERC20SessionDatum({ - * interval: { - * validUntil: 0, - * validAfter: 0 - * }, - * sessionKeyAddress, - * sessionKeyData: encodeAbiParameters( - * [ - * { type: "address" }, - * { type: "address" }, - * { type: "address" }, - * { type: "uint256" } - * ], - * [sessionKeyAddress, token, recipient, amount] - * ) - * }), - * createABISessionDatum({ - * interval: { - * validUntil: 0, - * validAfter: 0 - * }, - * sessionKeyAddress, - * contractAddress: nftAddress, - * functionSelector: "safeMint(address)", - * rules: [ - * { - * offset: 0, - * condition: 0, - * referenceValue: smartAccountAddress - * } - * ], - * valueLimit: 0n - * }) - * ] - * - * const { wait, sessionID } = await createBatchSession( - * smartAccount, - * sessionStorageClient: sessionStorage, - * leaves, - * { - * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - * } - * ) - * - * const { - * receipt: { transactionHash }, - * success - * } = await wait(); - * - * console.log({ sessionID, success }); // Use the sessionID later to retrieve the sessionKey from the storage client - * - * ``` - */ - -export const createBatchSession = async ( - smartAccount: BiconomySmartAccountV2, - /** The storage client to be used for storing the session data */ - sessionStorageClient: ISessionStorage, - /** An array of session configurations */ - leaves: CreateSessionDataParams[], - buildUseropDto?: BuildUserOpOptions -): Promise<SessionGrantedPayload> => { - const smartAccountAddress = await smartAccount.getAddress() - - const sessionsModule = await createSessionKeyManagerModule({ - smartAccountAddress, - sessionStorageClient - }) - - // Create batched session module - const batchedSessionModule = await createBatchedSessionRouterModule({ - smartAccountAddress, - sessionKeyManagerModule: sessionsModule - }) - - const { data: policyData, sessionIDInfo } = - await batchedSessionModule.createSessionData(leaves) - - const permitTx = { - to: DEFAULT_SESSION_KEY_MANAGER_MODULE, - data: policyData - } - - const isDeployed = await smartAccount.isAccountDeployed() - - const txs: Transaction[] = [] - const enableSessionKeyTx = await smartAccount.getEnableModuleData( - DEFAULT_SESSION_KEY_MANAGER_MODULE - ) - const enableBatchedSessionTx = await smartAccount.getEnableModuleData( - DEFAULT_BATCHED_SESSION_ROUTER_MODULE - ) - if (isDeployed) { - const [isSessionModuleEnabled, isBatchedSessionModuleEnabled] = - await Promise.all([ - smartAccount.isModuleEnabled(DEFAULT_SESSION_KEY_MANAGER_MODULE), - smartAccount.isModuleEnabled(DEFAULT_BATCHED_SESSION_ROUTER_MODULE) - ]) - - if (!isSessionModuleEnabled) { - txs.push(enableSessionKeyTx) - } - if (!isBatchedSessionModuleEnabled) { - txs.push(enableBatchedSessionTx) - } - } else { - Logger.log(ERROR_MESSAGES.ACCOUNT_NOT_DEPLOYED) - txs.push(enableSessionKeyTx, enableBatchedSessionTx) - } - - txs.push(permitTx) - - const userOpResponse = await smartAccount.sendTransaction(txs, buildUseropDto) - - return { - session: { - sessionStorageClient, - sessionIDInfo - }, - ...userOpResponse - } -} - -export type BatchSessionParamsPayload = { - params: { batchSessionParams: SessionParams[] } -} -/** - * getBatchSessionTxParams - * - * Retrieves the transaction parameters for a batched session. - * - * @param transactions - An array of {@link Transaction}s. - * @param correspondingIndexes - An array of indexes for the transactions corresponding to the relevant session. If not provided, the last {transaction.length} sessions are used. - * @param conditionalSession - {@link SessionSearchParam} The session data that contains the sessionID and sessionSigner. If not provided, The default session storage (localStorage in browser, fileStorage in node backend) is used to fetch the sessionIDInfo - * @param chain - The chain. - * @returns Promise<{@link BatchSessionParamsPayload}> - session parameters. - * - */ -export const getBatchSessionTxParams = async ( - transactions: Transaction[], - correspondingIndexes: number[] | null, - conditionalSession: SessionSearchParam, - chain: Chain -): Promise<BatchSessionParamsPayload> => { - if ( - correspondingIndexes && - correspondingIndexes.length !== transactions.length - ) { - throw new Error(ERROR_MESSAGES.INVALID_SESSION_INDEXES) - } - - const { sessionStorageClient } = await resumeSession(conditionalSession) - let sessionIDInfo: string[] = [] - - const allSessions = await sessionStorageClient.getAllSessionData() - if (didProvideFullSession(conditionalSession)) { - sessionIDInfo = (conditionalSession as Session).sessionIDInfo - } else if (isNullOrUndefined(correspondingIndexes)) { - sessionIDInfo = allSessions - .slice(-transactions.length) - .map(({ sessionID }) => sessionID as string) - } else { - sessionIDInfo = (correspondingIndexes ?? []).map( - (index) => allSessions[index].sessionID as string - ) - } - - const sessionSigner = await sessionStorageClient.getSignerBySession( - { - sessionID: sessionIDInfo[0] - }, - chain - ) - - return { - params: { - batchSessionParams: sessionIDInfo.map( - (sessionID): SessionParams => ({ - sessionSigner, - sessionID - }) - ) - } - } -} diff --git a/src/modules/sessions/erc20.ts b/src/modules/sessions/erc20.ts deleted file mode 100644 index eac4ff675..000000000 --- a/src/modules/sessions/erc20.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type { EncodeAbiParametersReturnType, Hex } from "viem" -import type { SessionEpoch } from ".." -import { DEFAULT_ERC20_MODULE } from "../utils/Constants" -import type { CreateSessionDataParams } from "../utils/Types" - -export type CreateERC20SessionConfig = { - interval: SessionEpoch - sessionKeyAddress: Hex - sessionKeyData: EncodeAbiParametersReturnType -} -/** - * - * @param erc20SessionConfig {@link CreateERC20SessionConfig} - * @returns {@link CreateSessionDataParams} - */ -export const createERC20SessionDatum = ({ - /** The time interval within which the session is valid. If left unset the session will remain invalid indefinitely {@link SessionEpoch} */ - interval, - /** The sessionKeyAddress upon which the policy is to be imparted. Used as a reference to the stored session keys */ - sessionKeyAddress, - /** The sessionKeyData to be included in the policy {@link EncodeAbiParametersReturnType}*/ - sessionKeyData -}: CreateERC20SessionConfig): CreateSessionDataParams => { - const { validUntil = 0, validAfter = 0 } = interval ?? {} - return { - validUntil, - validAfter, - sessionValidationModule: DEFAULT_ERC20_MODULE, - sessionPublicKey: sessionKeyAddress, - sessionKeyData - } -} diff --git a/src/modules/sessions/sessionSmartAccountClient.ts b/src/modules/sessions/sessionSmartAccountClient.ts deleted file mode 100644 index 0b8137ab3..000000000 --- a/src/modules/sessions/sessionSmartAccountClient.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { http, type Chain, type Hex, createWalletClient } from "viem" -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { - type BiconomySmartAccountV2, - type BiconomySmartAccountV2Config, - type BuildUserOpOptions, - type SupportedSigner, - createSmartAccountClient, - getChain -} from "../../account" -import { - type SessionSearchParam, - createBatchedSessionRouterModule, - createSessionKeyManagerModule, - resumeSession -} from "../index.js" -import type { ISessionStorage } from "../interfaces/ISessionStorage" -import type { ModuleInfo, StrictSessionParams } from "../utils/Types" - -export type ImpersonatedSmartAccountConfig = Omit< - BiconomySmartAccountV2Config, - "signer" -> & { - accountAddress: Hex - chainId: number - bundlerUrl: string -} -/** - * - * createSessionSmartAccountClient - * - * Creates a new instance of BiconomySmartAccountV2 class. This is used to impersonate a users smart account by a dapp, for use - * with a valid session that has previously been granted by the user. A dummy signer is passed into the smart account instance, which cannot be used. - * The sessionSigner is used instead for signing transactions, which is fetched from the session storage using the sessionID. {@link ISessionStorage} - * - * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance {@link ImpersonatedSmartAccountConfig}. - * @param conditionalSession - {@link SessionSearchParam} The session data that contains the sessionID and sessionSigner. If not provided, The default session storage (localStorage in browser, fileStorage in node backend) is used to fetch the sessionIDInfo - * @param multiMode - If true, the smart account instance will use the batchedSessionModule for validation, otherwise a single session is assumed. - * @returns A promise that resolves to a new instance of {@link BiconomySmartAccountV2}. - * @throws An error if something is wrong with the smart account instance creation. - * - * @example - * import { createClient } from "viem" - * import { createSmartAccountClient, BiconomySmartAccountV2 } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonAmoy } from "viem/chains"; - * import { SessionFileStorage } from "@biconomy/session-file-storage"; - * - * const signer = createWalletClient({ - * account, - * chain: polygonAmoy, - * transport: http(), - * }); - * - * - * // The following fields are required to create a session smart account client - * const smartAccountAddress = '0x...'; - * const sessionStorage = new SessionFileStorage(smartAccountAddress); - * const sessionKeyAddress = '0x...'; - * const sessionID = '0x...'; - * - * const smartAccountWithSession = await createSessionSmartAccountClient( - * { - * accountAddress: smartAccountAddress, // Set the account address on behalf of the user - * bundlerUrl, - * paymasterUrl, - * chainId - * }, - * storeForSingleSession // Can be ommitted if using default session storage (localStorage in browser, fileStorage in node backend) - * ) - * - * // The smartAccountWithSession instance can now be used to interact with the blockchain on behalf of the user in the same manner as a regular smart account instance. - * // smartAccountWithSession.sendTransaction(...) etc. - * - */ -export const createSessionSmartAccountClient = async ( - biconomySmartAccountConfig: ImpersonatedSmartAccountConfig, - conditionalSession: SessionSearchParam, - multiMode = false -): Promise<BiconomySmartAccountV2> => { - const { sessionStorageClient, sessionIDInfo } = await resumeSession( - conditionalSession ?? biconomySmartAccountConfig.accountAddress - ) - const sessionID = sessionIDInfo[0] // Default to the first element to find the signer - - const account = privateKeyToAccount(generatePrivateKey()) - - const chain = - biconomySmartAccountConfig.viemChain ?? - biconomySmartAccountConfig.customChain ?? - getChain(biconomySmartAccountConfig.chainId) - - const incompatibleSigner = createWalletClient({ - account, - chain, - transport: http() - }) - - const sessionSigner = await sessionStorageClient.getSignerBySession( - { - sessionID - }, - chain - ) - - const sessionData: ModuleInfo | undefined = multiMode - ? undefined - : { - sessionID, - sessionSigner - } - - const sessionModule = await createSessionKeyManagerModule({ - smartAccountAddress: biconomySmartAccountConfig.accountAddress, - sessionStorageClient - }) - - const batchedSessionModule = await createBatchedSessionRouterModule({ - smartAccountAddress: biconomySmartAccountConfig.accountAddress, - sessionKeyManagerModule: sessionModule - }) - - return await createSmartAccountClient({ - ...biconomySmartAccountConfig, - signer: incompatibleSigner, // This is a dummy signer, it will remain unused - activeValidationModule: multiMode ? batchedSessionModule : sessionModule, - sessionData // contains the sessionSigner that will be used for txs - }) -} - -/** - * - * @param privateKey - The private key of the user's account - * @param chain - The chain object - * @returns {@link SupportedSigner} - A signer object that can be used to sign transactions - */ -export const toSupportedSigner = ( - privateKey: string, - chain: Chain -): SupportedSigner => { - const parsedPrivateKey: Hex = privateKey.startsWith("0x") - ? (privateKey as Hex) - : `0x${privateKey}` - const account = privateKeyToAccount(parsedPrivateKey) - return createWalletClient({ - account, - chain, - transport: http() - }) -} - -/** - * - * @param privateKey The private key of the user's account - * @param sessionIDs An array of sessionIDs - * @param chain The chain object - * @returns {@link StrictSessionParams[]} - An array of session parameters {@link StrictSessionParams} that can be used to sign transactions here {@link BuildUserOpOptions} - */ -export const toSessionParams = ( - privateKey: Hex, - sessionIDs: string[], - chain: Chain -): StrictSessionParams[] => - sessionIDs.map((sessionID) => ({ - sessionID, - sessionSigner: toSupportedSigner(privateKey, chain) - })) diff --git a/src/modules/utils/Constants.ts b/src/modules/utils/Constants.ts index dfbe9f1c0..665caadbf 100644 --- a/src/modules/utils/Constants.ts +++ b/src/modules/utils/Constants.ts @@ -3,9 +3,6 @@ import type { ModuleVersion } from "./Types.js" export const DEFAULT_MODULE_VERSION: ModuleVersion = "V1_0_0" -export const DEFAULT_ECDSA_OWNERSHIP_MODULE: Hex = - "0x9C08e1CE188C29bAaeBc64A08cF2Ec44207749B6" - export const ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION = { V1_0_0: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" } diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index e049c4fbf..c70cbfc58 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -1,27 +1,14 @@ import { type Address, - type ByteArray, type Chain, type Hex, encodeAbiParameters, - isAddress, keccak256, parseAbiParameters } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { - ERROR_MESSAGES, - type UserOperationStruct, - getChain -} from "../../account" -import type { - ChainInfo, - HardcodedReference, - Session, - SignerData -} from "../../index.js" -import type { ISessionStorage } from "../interfaces/ISessionStorage" -import { getDefaultStorageClient } from "../session-storage/utils" +import { type UserOperationStruct, getChain } from "../../account" +import type { ChainInfo, SignerData } from "../../index.js" /** * Rule @@ -33,42 +20,42 @@ import { getDefaultStorageClient } from "../session-storage/utils" * So, when dApp is creating a _sessionKeyData to enable a session, it should convert every shorter static arg to a 32bytes word to match how it will be actually ABI encoded in the userOp.callData. * For the dynamic args, like bytes, every 32-bytes word of the calldata such as offset of the bytes arg, length of the bytes arg, and n-th 32-bytes word of the bytes arg can be controlled by a dedicated Rule. */ -export interface Rule { - /** - * - * offset - * - * https://docs.biconomy.io/Modules/abiSessionValidationModule#rules - * - * The offset in the ABI SVM contract helps locate the relevant data within the function call data, it serves as a reference point from which to start reading or extracting specific information required for validation. When processing function call data, particularly in low-level languages like Solidity assembly, it's necessary to locate where specific parameters or arguments are stored. The offset is used to calculate the starting position within the calldata where the desired data resides. Suppose we have a function call with multiple arguments passed as calldata. Each argument occupies a certain number of bytes, and the offset helps determine where each argument begins within the calldata. - * Using the offset to Extract Data: In the contract, the offset is used to calculate the position within the calldata where specific parameters or arguments are located. Since every arg is a 32-bytes word, offsets are always multiplier of 32 (or of 0x20 in hex). - * Let's see how the offset is applied to extract the to and value arguments of a transfer(address to, uint256 value) method: - * - Extracting to Argument: The to argument is the first parameter of the transfer function, representing the recipient address. Every calldata starts with the 4-bytes method selector. However, the ABI SVM is adding the selector length itself, so for the first argument the offset will always be 0 (0x00); - * - Extracting value Argument: The value argument is the second parameter of the transfer function, representing the amount of tokens to be transferred. To extract this argument, the offset for the value parameter would be calculated based on its position in the function calldata. Despite to is a 20-bytes address, in the solidity abi encoding it is always appended with zeroes to a 32-bytes word. So the offset for the second 32-bytes argument (which isthe value in our case) will be 32 (or 0x20 in hex). - * - * If you need to deal with dynamic-length arguments, such as bytes, please refer to this document https://docs.soliditylang.org/en/v0.8.24/abi-spec.html#function-selector-and-argument-encoding to learn more about how dynamic arguments are represented in the calldata and which offsets should be used to access them. - */ - offset: number - /** - * condition - * - * 0 - Equal - * 1 - Less than or equal - * 2 - Less than - * 3 - Greater than or equal - * 4 - Greater than - * 5 - Not equal - */ - condition: number - /** The value to compare against */ - referenceValue: - | string - | number - | bigint - | boolean - | ByteArray - | HardcodedReference -} +// export interface Rule { +// /** +// * +// * offset +// * +// * https://docs.biconomy.io/Modules/abiSessionValidationModule#rules +// * +// * The offset in the ABI SVM contract helps locate the relevant data within the function call data, it serves as a reference point from which to start reading or extracting specific information required for validation. When processing function call data, particularly in low-level languages like Solidity assembly, it's necessary to locate where specific parameters or arguments are stored. The offset is used to calculate the starting position within the calldata where the desired data resides. Suppose we have a function call with multiple arguments passed as calldata. Each argument occupies a certain number of bytes, and the offset helps determine where each argument begins within the calldata. +// * Using the offset to Extract Data: In the contract, the offset is used to calculate the position within the calldata where specific parameters or arguments are located. Since every arg is a 32-bytes word, offsets are always multiplier of 32 (or of 0x20 in hex). +// * Let's see how the offset is applied to extract the to and value arguments of a transfer(address to, uint256 value) method: +// * - Extracting to Argument: The to argument is the first parameter of the transfer function, representing the recipient address. Every calldata starts with the 4-bytes method selector. However, the ABI SVM is adding the selector length itself, so for the first argument the offset will always be 0 (0x00); +// * - Extracting value Argument: The value argument is the second parameter of the transfer function, representing the amount of tokens to be transferred. To extract this argument, the offset for the value parameter would be calculated based on its position in the function calldata. Despite to is a 20-bytes address, in the solidity abi encoding it is always appended with zeroes to a 32-bytes word. So the offset for the second 32-bytes argument (which isthe value in our case) will be 32 (or 0x20 in hex). +// * +// * If you need to deal with dynamic-length arguments, such as bytes, please refer to this document https://docs.soliditylang.org/en/v0.8.24/abi-spec.html#function-selector-and-argument-encoding to learn more about how dynamic arguments are represented in the calldata and which offsets should be used to access them. +// */ +// offset: number +// /** +// * condition +// * +// * 0 - Equal +// * 1 - Less than or equal +// * 2 - Less than +// * 3 - Greater than or equal +// * 4 - Greater than +// * 5 - Not equal +// */ +// condition: number +// /** The value to compare against */ +// referenceValue: +// | string +// | number +// | bigint +// | boolean +// | ByteArray +// | HardcodedReference +// } /** * @deprecated @@ -183,10 +170,10 @@ export const parseChain = (chainInfo: ChainInfo): Chain => { * When a smart account address is provided, the default session storage client is used to reconstruct the session object using **all** of the sessionIds found in the storage client * */ -export type SessionSearchParam = Session | ISessionStorage | Address -export const didProvideFullSession = ( - searchParam: SessionSearchParam -): boolean => !!(searchParam as Session)?.sessionIDInfo?.length +// export type SessionSearchParam = Session | ISessionStorage | Address +// export const didProvideFullSession = ( +// searchParam: SessionSearchParam +// ): boolean => !!(searchParam as Session)?.sessionIDInfo?.length /** * * reconstructSession - Reconstructs a session object from the provided arguments @@ -199,39 +186,39 @@ export const didProvideFullSession = ( * @returns A session object * @error If the provided arguments do not match any of the above cases */ -export const resumeSession = async ( - searchParam: SessionSearchParam -): Promise<Session> => { - const providedFullSession = didProvideFullSession(searchParam) - const providedStorageClient = !!(searchParam as ISessionStorage) - .smartAccountAddress?.length - const providedSmartAccountAddress = isAddress(searchParam as Address) +// export const resumeSession = async ( +// searchParam: SessionSearchParam +// ): Promise<Session> => { +// const providedFullSession = didProvideFullSession(searchParam) +// const providedStorageClient = !!(searchParam as ISessionStorage) +// .smartAccountAddress?.length +// const providedSmartAccountAddress = isAddress(searchParam as Address) - if (providedFullSession) { - const session = searchParam as Session - return session - } - if (providedStorageClient) { - const sessionStorageClient = searchParam as ISessionStorage - const leafArray = await sessionStorageClient.getAllSessionData() - const sessionIDInfo = leafArray.map(({ sessionID }) => sessionID as string) - const session: Session = { - sessionIDInfo, - sessionStorageClient - } - return session - } - if (providedSmartAccountAddress) { - const smartAccountAddress = searchParam as Address - // Use the default session storage client - const sessionStorageClient = getDefaultStorageClient(smartAccountAddress) - const leafArray = await sessionStorageClient.getAllSessionData() - const sessionIDInfo = leafArray.map(({ sessionID }) => sessionID as string) - const session: Session = { - sessionIDInfo, - sessionStorageClient - } - return session - } - throw new Error(ERROR_MESSAGES.UNKNOW_SESSION_ARGUMENTS) -} +// if (providedFullSession) { +// const session = searchParam as Session +// return session +// } +// if (providedStorageClient) { +// const sessionStorageClient = searchParam as ISessionStorage +// const leafArray = await sessionStorageClient.getAllSessionData() +// const sessionIDInfo = leafArray.map(({ sessionID }) => sessionID as string) +// const session: Session = { +// sessionIDInfo, +// sessionStorageClient +// } +// return session +// } +// if (providedSmartAccountAddress) { +// const smartAccountAddress = searchParam as Address +// // Use the default session storage client +// const sessionStorageClient = getDefaultStorageClient(smartAccountAddress) +// const leafArray = await sessionStorageClient.getAllSessionData() +// const sessionIDInfo = leafArray.map(({ sessionID }) => sessionID as string) +// const session: Session = { +// sessionIDInfo, +// sessionStorageClient +// } +// return session +// } +// throw new Error(ERROR_MESSAGES.UNKNOW_SESSION_ARGUMENTS) +// } diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index e2ca26ecf..73432f5bf 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -21,6 +21,7 @@ import { DEFAULT_BICONOMY_FACTORY_ADDRESS, DEFAULT_ENTRYPOINT_ADDRESS, ERROR_MESSAGES, + K1_VALIDATOR, NATIVE_TOKEN_ALIAS, compareChainIds, createSmartAccountClient, @@ -28,10 +29,9 @@ import { } from "../../src/account" import { type UserOperationStruct, getChain } from "../../src/account" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" -import { BiconomyFactoryAbi } from "../../src/account/abi/Factory" +import { BiconomyFactoryAbi } from "../../src/account/abi/K1ValidatorFactory" import { BiconomyAccountAbi } from "../../src/account/abi/SmartAccount" import { - DEFAULT_ECDSA_OWNERSHIP_MODULE, DEFAULT_SESSION_KEY_MANAGER_MODULE, createECDSAOwnershipValidationModule } from "../../src/modules" @@ -99,7 +99,8 @@ describe("Account:Read", () => { const smartAccount = await createSmartAccountClient({ signer: account, bundlerUrl, - rpcUrl: chain.rpcUrls.default.http[0] + rpcUrl: chain.rpcUrls.default.http[0], + chainId }) const message = "hello world" @@ -109,53 +110,53 @@ describe("Account:Read", () => { 50000 ) - test.concurrent( - "should estimate gas for minting an NFT", - async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const results = await Promise.all([ - smartAccount.getGasEstimate([transaction]), - smartAccount.getGasEstimate([transaction, transaction]), - smartAccount.getGasEstimate([transaction], { - paymasterServiceData: { - mode: PaymasterMode.SPONSORED - } - }), - smartAccount.getGasEstimate([transaction, transaction], { - paymasterServiceData: { - mode: PaymasterMode.SPONSORED - } - }), - smartAccount.getGasEstimate([transaction], { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - preferredToken: token - } - }), - await smartAccount.getGasEstimate([transaction, transaction], { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - preferredToken: token - } - }) - ]) - - const increasingGasExpenditure = results.every( - (result, i) => result > (results[i - 1] ?? 0) - ) - - expect(increasingGasExpenditure).toBeTruthy() - }, - 60000 - ) + // test.concurrent( + // "should estimate gas for minting an NFT", + // async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall + // } + // const results = await Promise.all([ + // smartAccount.getGasEstimate([transaction]), + // smartAccount.getGasEstimate([transaction, transaction]), + // smartAccount.getGasEstimate([transaction], { + // paymasterServiceData: { + // mode: PaymasterMode.SPONSORED + // } + // }), + // smartAccount.getGasEstimate([transaction, transaction], { + // paymasterServiceData: { + // mode: PaymasterMode.SPONSORED + // } + // }), + // smartAccount.getGasEstimate([transaction], { + // paymasterServiceData: { + // mode: PaymasterMode.ERC20, + // preferredToken: token + // } + // }), + // await smartAccount.getGasEstimate([transaction, transaction], { + // paymasterServiceData: { + // mode: PaymasterMode.ERC20, + // preferredToken: token + // } + // }) + // ]) + + // const increasingGasExpenditure = results.every( + // (result, i) => result > (results[i - 1] ?? 0) + // ) + + // expect(increasingGasExpenditure).toBeTruthy() + // }, + // 60000 + // ) test.concurrent( "should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", @@ -174,55 +175,53 @@ describe("Account:Read", () => { 50000 ) - test.concurrent( - "should get all modules", - async () => { - const modules = await smartAccount.getAllModules() - expect(modules).toContain(DEFAULT_SESSION_KEY_MANAGER_MODULE) // session manager module - expect(modules).toContain(DEFAULT_ECDSA_OWNERSHIP_MODULE) // ecdsa ownership module - }, - 30000 - ) + // test.concurrent( + // "should get all modules", + // async () => { + // const modules = await smartAccount.getAllModules() + // expect(modules).toContain(DEFAULT_SESSION_KEY_MANAGER_MODULE) // session manager module + // expect(modules).toContain(DEFAULT_ECDSA_OWNERSHIP_MODULE) // ecdsa ownership module + // }, + // 30000 + // ) test.concurrent( "should check if module is enabled on the smart account", async () => { - const isEnabled = await smartAccount.isModuleEnabled( - DEFAULT_ECDSA_OWNERSHIP_MODULE - ) + const isEnabled = await smartAccount.isModuleInstalled(K1_VALIDATOR) expect(isEnabled).toBeTruthy() }, 30000 ) - test.concurrent( - "should get disabled module data", - async () => { - const disableModuleData = await smartAccount.getDisableModuleData( - DEFAULT_ECDSA_OWNERSHIP_MODULE, - DEFAULT_ECDSA_OWNERSHIP_MODULE - ) - expect(disableModuleData).toBeTruthy() - }, - 30000 - ) - - test.concurrent( - "should get setup and enable module data", - async () => { - const module = await createECDSAOwnershipValidationModule({ - signer: walletClient - }) - const initData = await module.getInitData() - const setupAndEnableModuleData = - await smartAccount.getSetupAndEnableModuleData( - DEFAULT_ECDSA_OWNERSHIP_MODULE, - initData - ) - expect(setupAndEnableModuleData).toBeTruthy() - }, - 30000 - ) + // test.concurrent( + // "should get disabled module data", + // async () => { + // const disableModuleData = await smartAccount.getDisableModuleData( + // DEFAULT_ECDSA_OWNERSHIP_MODULE, + // DEFAULT_ECDSA_OWNERSHIP_MODULE + // ) + // expect(disableModuleData).toBeTruthy() + // }, + // 30000 + // ) + + // test.concurrent( + // "should get setup and enable module data", + // async () => { + // const module = await createECDSAOwnershipValidationModule({ + // signer: walletClient + // }) + // const initData = await module.getInitData() + // const setupAndEnableModuleData = + // await smartAccount.getSetupAndEnableModuleData( + // DEFAULT_ECDSA_OWNERSHIP_MODULE, + // initData + // ) + // expect(setupAndEnableModuleData).toBeTruthy() + // }, + // 30000 + // ) test.concurrent( "should create a smartAccountClient from an ethers signer", @@ -339,12 +338,12 @@ describe("Account:Read", () => { const userOp = await smartAccount.buildUserOp([tx]) const estimatedGas = await smartAccount.estimateUserOpGas(userOp) + console.log(estimatedGas, "estimatedGas") expect(estimatedGas.maxFeePerGas).toBeTruthy() expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() expect(estimatedGas.verificationGasLimit).toBeTruthy() expect(estimatedGas.callGasLimit).toBeTruthy() expect(estimatedGas.preVerificationGas).toBeTruthy() - expect(estimatedGas).toHaveProperty("paymasterAndData", "0x") }, 30000 ) @@ -354,20 +353,20 @@ describe("Account:Read", () => { expect(module).toBeTruthy() }) - test.concurrent( - "should create a smart account with paymaster by creating instance", - async () => { - const paymaster = new Paymaster({ paymasterUrl }) - - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - paymaster - }) - expect(smartAccount.paymaster).not.toBeNull() - expect(smartAccount.paymaster).not.toBeUndefined() - } - ) + // test.concurrent( + // "should create a smart account with paymaster by creating instance", + // async () => { + // const paymaster = new Paymaster({ paymasterUrl }) + + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl, + // paymaster + // }) + // expect(smartAccount.paymaster).not.toBeNull() + // expect(smartAccount.paymaster).not.toBeUndefined() + // } + // ) test.concurrent( "should fail to create a smartAccountClient from a walletClient without a chainId", async () => { @@ -424,20 +423,20 @@ describe("Account:Read", () => { expect(addresses.every(Boolean)).toBeTruthy() }) - test.concurrent( - "should create a smart account with paymaster with an api key", - async () => { - const paymaster = smartAccount.paymaster - expect(paymaster).not.toBeNull() - expect(paymaster).not.toBeUndefined() - } - ) + // test.concurrent( + // "should create a smart account with paymaster with an api key", + // async () => { + // const paymaster = smartAccount.paymaster + // expect(paymaster).not.toBeNull() + // expect(paymaster).not.toBeUndefined() + // } + // ) test.concurrent("should not throw and error, chain ids match", async () => { const mockBundlerUrl = - "https://bundler.biconomy.io/api/v2/80002/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" + "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/80002/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" const config: BiconomySmartAccountV2Config = { signer: walletClient, @@ -527,7 +526,7 @@ describe("Account:Read", () => { }) test.concurrent( - "should having matching counterFactual address from the contracts with smartAccount.getAddress()", + "should have matching counterFactual address from the contracts with smartAccount.getAddress()", async () => { const client = createWalletClient({ account, @@ -535,22 +534,14 @@ describe("Account:Read", () => { transport: http() }) - const ecdsaModule = await createECDSAOwnershipValidationModule({ - signer: client - }) - const smartAccount = await createSmartAccountClient({ signer: client, bundlerUrl, - paymasterUrl, - activeValidationModule: ecdsaModule + paymasterUrl }) - const owner = await ecdsaModule.getAddress() const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() - const moduleSetupData = (await ecdsaModule.getInitData()) as Hex - const publicClient = createPublicClient({ chain, transport: http() @@ -563,9 +554,8 @@ describe("Account:Read", () => { }) const smartAccountAddressFromContracts = - await factoryContract.read.getAddressForCounterFactualAccount([ - owner, - moduleSetupData, + await factoryContract.read.computeAccountAddress([ + account.address, BigInt(0) ]) @@ -573,36 +563,36 @@ describe("Account:Read", () => { } ) - test.concurrent( - "should have matching #getUserOpHash and entryPoint.getUserOpHash", - async () => { - const userOp: UserOperationStruct = { - sender: "0x".padEnd(42, "1") as string, - nonce: 2, - initCode: "0x3333", - callData: "0x4444", - callGasLimit: 5, - verificationGasLimit: 6, - preVerificationGas: 7, - maxFeePerGas: 8, - maxPriorityFeePerGas: 9, - paymasterAndData: "0xaaaaaa", - signature: "0xbbbb" - } - - const epHash = await publicClient.readContract({ - address: DEFAULT_ENTRYPOINT_ADDRESS, - abi: EntryPointAbi, - functionName: "getUserOpHash", - // @ts-ignore - args: [userOp] - }) - - const hash = await smartAccount.getUserOpHash(userOp) - expect(hash).toBe(epHash) - }, - 30000 - ) + // test.concurrent( + // "should have matching #getUserOpHash and entryPoint.getUserOpHash", + // async () => { + // const userOp: UserOperationStruct = { + // sender: "0x".padEnd(42, "1") as string, + // nonce: 2, + // initCode: "0x3333", + // callData: "0x4444", + // callGasLimit: 5, + // verificationGasLimit: 6, + // preVerificationGas: 7, + // maxFeePerGas: 8, + // maxPriorityFeePerGas: 9, + // paymasterAndData: "0xaaaaaa", + // signature: "0xbbbb" + // } + + // const epHash = await publicClient.readContract({ + // address: DEFAULT_ENTRYPOINT_ADDRESS, + // abi: EntryPointAbi, + // functionName: "getUserOpHash", + // // @ts-ignore + // args: [userOp] + // }) + + // const hash = await smartAccount.getUserOpHash(userOp) + // expect(hash).toBe(epHash) + // }, + // 30000 + // ) test.concurrent( "should be deployed to counterfactual address", @@ -620,7 +610,7 @@ describe("Account:Read", () => { test.concurrent( "should check if ecdsaOwnershipModule is enabled", async () => { - const ecdsaOwnershipModule = "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" + const ecdsaOwnershipModule = K1_VALIDATOR expect(ecdsaOwnershipModule).toBe( smartAccount.activeValidationModule.getAddress() @@ -662,15 +652,15 @@ describe("Account:Read", () => { 60000 ) - test.concurrent("should fetch balances for smartAccount", async () => { - const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ - token - ]) + // test.concurrent("should fetch balances for smartAccount", async () => { + // const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) + // const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ + // token + // ]) - expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) - }) + // expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) + // }) test.concurrent("should error if no recipient exists", async () => { const token: Hex = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" @@ -708,105 +698,105 @@ describe("Account:Read", () => { 60000 ) - test.concurrent( - "should check balance of supported token", - async () => { - const tokens = await smartAccount.getSupportedTokens() - const [firstToken] = tokens - - expect(tokens.length).toBeGreaterThan(0) - expect(tokens[0]).toHaveProperty("balance") - expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) - }, - 60000 - ) - - test.concurrent( - "should verify a correct signature through isValidSignature", - async () => { - const eip1271MagicValue = "0x1626ba7e" - const message = "Some message from dApp" - const messageHash = hashMessage(message) - const signature = await smartAccount.signMessage(messageHash) - - const response = await publicClient.readContract({ - address: await smartAccount.getAccountAddress(), - abi: BiconomyAccountAbi, - functionName: "isValidSignature", - args: [messageHash, signature] - }) - - expect(response).toBe(eip1271MagicValue) - } - ) - - test.concurrent("should confirm that signature is not valid", async () => { - const randomPrivKey = generatePrivateKey() - const randomWallet = privateKeyToAccount(randomPrivKey) - - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl - }) - - const eip1271MagicValue = "0xffffffff" - const message = "Some message from dApp" - const messageHash = hashMessage(message) - const signature = await randomWallet.signMessage({ message: messageHash }) - const signatureWithModuleAddress = encodeAbiParameters( - parseAbiParameters("bytes, address"), - [signature, smartAccount.defaultValidationModule.getAddress()] - ) - - const response = await publicClient.readContract({ - address: await smartAccount.getAccountAddress(), - abi: BiconomyAccountAbi, - functionName: "isValidSignature", - args: [messageHash, signatureWithModuleAddress] - }) - - expect(response).toBe(eip1271MagicValue) - }) - - test.concurrent("should verifySignature of deployed", async () => { - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - index: 1 - }) - - const message = "hello world" - - const signature = await smartAccount.signMessage(message) - - const isVerified = await publicClient.verifyMessage({ - address: await smartAccount.getAddress(), - message, - signature - }) - - expect(isVerified).toBeTruthy() - }) - - test.concurrent("should verifySignature of not deployed", async () => { - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - index: 100 - }) - - const message = "hello world" - - const signature = await smartAccount.signMessage(message) - - const isVerified = await publicClient.verifyMessage({ - address: await smartAccount.getAddress(), - message, - signature - }) - - expect(isVerified).toBeTruthy() - }) + // test.concurrent( + // "should check balance of supported token", + // async () => { + // const tokens = await smartAccount.getSupportedTokens() + // const [firstToken] = tokens + + // expect(tokens.length).toBeGreaterThan(0) + // expect(tokens[0]).toHaveProperty("balance") + // expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) + // }, + // 60000 + // ) + + // test.concurrent( + // "should verify a correct signature through isValidSignature", + // async () => { + // const eip1271MagicValue = "0x1626ba7e" + // const message = "Some message from dApp" + // const messageHash = hashMessage(message) + // const signature = await smartAccount.signMessage(messageHash) + + // const response = await publicClient.readContract({ + // address: await smartAccount.getAccountAddress(), + // abi: BiconomyAccountAbi, + // functionName: "isValidSignature", + // args: [messageHash, signature] + // }) + + // expect(response).toBe(eip1271MagicValue) + // } + // ) + + // test.concurrent("should confirm that signature is not valid", async () => { + // const randomPrivKey = generatePrivateKey() + // const randomWallet = privateKeyToAccount(randomPrivKey) + + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl + // }) + + // const eip1271MagicValue = "0xffffffff" + // const message = "Some message from dApp" + // const messageHash = hashMessage(message) + // const signature = await randomWallet.signMessage({ message: messageHash }) + // const signatureWithModuleAddress = encodeAbiParameters( + // parseAbiParameters("bytes, address"), + // [signature, smartAccount.defaultValidationModule.getAddress()] + // ) + + // const response = await publicClient.readContract({ + // address: await smartAccount.getAccountAddress(), + // abi: BiconomyAccountAbi, + // functionName: "isValidSignature", + // args: [messageHash, signatureWithModuleAddress] + // }) + + // expect(response).toBe(eip1271MagicValue) + // }) + + // test.concurrent("should verifySignature of deployed", async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl, + // index: 1n + // }) + + // const message = "hello world" + + // const signature = await smartAccount.signMessage(message) + + // const isVerified = await publicClient.verifyMessage({ + // address: await smartAccount.getAddress(), + // message, + // signature + // }) + + // expect(isVerified).toBeTruthy() + // }) + + // test.concurrent("should verifySignature of not deployed", async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl, + // index: 100n + // }) + + // const message = "hello world" + + // const signature = await smartAccount.signMessage(message) + + // const isVerified = await publicClient.verifyMessage({ + // address: await smartAccount.getAccountAddress(), + // message, + // signature + // }) + + // expect(isVerified).toBeTruthy() + // }) test.concurrent( "should simulate a user operation execution, expecting to fail", @@ -843,38 +833,38 @@ describe("Account:Read", () => { } ) - test.concurrent( - "should simulate a user operation execution, expecting to pass execution", - async () => { - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl - }) - - const balances = await smartAccount.getBalances() - expect(balances[0].amount).toBeGreaterThan(0n) - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function deposit()"]), - functionName: "deposit" - }) - - const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" - - // fail if value is not bigger than 1 - // the contract call requires a deposit of at least 1 wei - const tx1 = { - to: amoyTestContract as Hex, - data: encodedCall, - value: 2 - } - const tx2 = { - to: amoyTestContract as Hex, - data: encodedCall, - value: 2 - } - - await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() - } - ) + // test.concurrent( + // "should simulate a user operation execution, expecting to pass execution", + // async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl + // }) + + // const balances = await smartAccount.getBalances() + // expect(balances[0].amount).toBeGreaterThan(0n) + + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function deposit()"]), + // functionName: "deposit" + // }) + + // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" + + // // fail if value is not bigger than 1 + // // the contract call requires a deposit of at least 1 wei + // const tx1 = { + // to: amoyTestContract as Hex, + // data: encodedCall, + // value: 2 + // } + // const tx2 = { + // to: amoyTestContract as Hex, + // data: encodedCall, + // value: 2 + // } + + // await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() + // } + // ) }) diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index b32e23813..4712c5d1e 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -21,7 +21,6 @@ import { } from "../../src/account" import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" -import { DEFAULT_ECDSA_OWNERSHIP_MODULE } from "../../src/modules" import { PaymasterMode } from "../../src/paymaster" import { testOnlyOnOptimism } from "../setupFiles" import { @@ -58,7 +57,7 @@ describe("Account:Write", async () => { const [walletClient, walletClientTwo] = [ createWalletClient({ account, - chain: baseSepolia, + chain, transport: http() }), createWalletClient({ @@ -117,10 +116,6 @@ describe("Account:Write", async () => { // }, 60000) test("should mint an NFT and pay with ERC20 - with token", async () => { - console.log("CHAIN ID 2", baseSepolia.id) - - const smartAccountAddress = await smartAccount.getAccountAddress() - console.log(smartAccountAddress, "smartAccountAddress") const encodedCall = encodeFunctionData({ abi: parseAbi(["function safeMint(address _to)"]), functionName: "safeMint", diff --git a/tests/bundler/read.test.ts b/tests/bundler/read.test.ts deleted file mode 100644 index 2b8c27b4b..000000000 --- a/tests/bundler/read.test.ts +++ /dev/null @@ -1,203 +0,0 @@ -import { http, type Chain, type Hex, createWalletClient } from "viem" -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { beforeAll, describe, expect, test } from "vitest" -import { - type BiconomySmartAccountV2, - type BiconomySmartAccountV2Config, - compareChainIds, - createSmartAccountClient, - getCustomChain -} from "../../src/account" -import { createBundler } from "../../src/bundler" -import { getBundlerUrl, getConfig } from "../utils" - -describe("Bundler:Read", () => { - const { - chain, - chainId, - privateKey, - privateKeyTwo, - bundlerUrl, - paymasterUrl - } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - const recipient = accountTwo.address - - let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] - let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] - - const [walletClient, walletClientTwo] = [ - createWalletClient({ - account, - chain, - transport: http() - }), - createWalletClient({ - account: accountTwo, - chain, - transport: http() - }) - ] - - beforeAll(async () => { - ;[smartAccount, smartAccountTwo] = await Promise.all( - [walletClient, walletClientTwo].map((client) => - createSmartAccountClient({ - chainId, - signer: client, - bundlerUrl, - paymasterUrl - }) - ) - ) - ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( - [smartAccount, smartAccountTwo].map((account) => - account.getAccountAddress() - ) - ) - }) - - test.concurrent( - "should throw and give advice", - async () => { - const randomPrivateKey = generatePrivateKey() - const unfundedAccount = privateKeyToAccount(randomPrivateKey) - - const unfundedSmartAccountClient = await createSmartAccountClient({ - signer: createWalletClient({ - account: unfundedAccount, - chain, - transport: http() - }), - paymasterUrl, - bundlerUrl - }) - - await expect( - unfundedSmartAccountClient.sendTransaction({ - to: recipient, - value: 1 - }) - ).rejects.toThrow("Send some native tokens in your smart wallet") - }, - 20000 - ) - - test.concurrent( - "should parse the rpcUrl when a custom chain and bundler are used", - async () => { - const customBlastChain = { - id: 81_457, - name: "Blast", - // network: "blast", - nativeCurrency: { - decimals: 18, - name: "Ethereum", - symbol: "ETH" - }, - rpcUrls: { - public: { http: ["https://rpc.blast.io"] }, - default: { http: ["https://rpc.blast.io"] } - }, - blockExplorers: { - etherscan: { name: "Blastscan", url: "https://blastscan.io/" }, - default: { name: "Blastscan", url: "https://blastscan.io/" } - }, - contracts: { - multicall3: { - address: "0xca11bde05977b3631167028862be2a173976ca11", - blockCreated: 88_189 - } - } - } as const satisfies Chain - - const accountOne = privateKeyToAccount(`0x${privateKey}`) - - const walletClientWithCustomChain = createWalletClient({ - account: accountOne, - chain: customBlastChain, - transport: http() - }) - - const blastBundler = await createBundler({ - bundlerUrl: getBundlerUrl(customBlastChain.id), - viemChain: customBlastChain - }) - const smartAccountFromViemWithCustomChain = - await createSmartAccountClient({ - viemChain: customBlastChain, - signer: walletClientWithCustomChain, - bundler: blastBundler, - rpcUrl: customBlastChain.rpcUrls.default.http[0] - }) - - expect( - smartAccountFromViemWithCustomChain.rpcProvider.transport.url - ).toBe("https://rpc.blast.io") - expect(blastBundler.getBundlerUrl()).toBe( - getBundlerUrl(customBlastChain.id) - ) - } - ) - - test.concurrent( - "should throw an error, bundlerUrl chain id and signer chain id does not match", - async () => { - const config: BiconomySmartAccountV2Config = { - signer: walletClient, - bundlerUrl: getBundlerUrl(1337), - paymasterUrl - } - - await expect( - compareChainIds(walletClient, config, false) - ).rejects.toThrow() - } - ) - test.concurrent( - "should throw an error, bundlerUrl chainId and paymasterUrl + chainId does not match", - async () => { - const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - - const config: BiconomySmartAccountV2Config = { - signer: walletClient, - bundlerUrl, - paymasterUrl: mockPaymasterUrl - } - - await expect( - compareChainIds(walletClient, config, false) - ).rejects.toThrow() - } - ) - - test.concurrent( - "should throw, chain id from signer and bundlerUrl do not match", - async () => { - const createAccount = createSmartAccountClient({ - signer: walletClient, - bundlerUrl: - "https://bundler.biconomy.io/api/v2/1/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" // mock - }) - - await expect(createAccount).rejects.toThrow() - } - ) - - test.concurrent( - "should throw, chain id from paymasterUrl and bundlerUrl do not match", - async () => { - const createAccount = createSmartAccountClient({ - signer: walletClient, - paymasterUrl: - "https://paymaster.biconomy.io/api/v1/1/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71", - bundlerUrl: - "https://bundler.biconomy.io/api/v2/80002/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" // mock - }) - - await expect(createAccount).rejects.toThrow() - } - ) -}) diff --git a/tests/bundler/write.test.ts b/tests/bundler/write.test.ts deleted file mode 100644 index 2527e33fb..000000000 --- a/tests/bundler/write.test.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { http, type Hex, createPublicClient, createWalletClient } from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { beforeAll, describe, expect, test } from "vitest" -import { - type BiconomySmartAccountV2, - createSmartAccountClient, - getChain -} from "../../src/account" -import { createBundler } from "../../src/bundler" -import { - checkBalance, - getBundlerUrl, - getConfig, - nonZeroBalance, - topUp -} from "../utils" - -describe("Bundler:Write", () => { - const nonceOptions = { nonceKey: Date.now() + 20 } - const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const { - chain, - chainId, - privateKey, - privateKeyTwo, - bundlerUrl, - paymasterUrl - } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - const recipient = accountTwo.address - const publicClient = createPublicClient({ - chain, - transport: http() - }) - let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] - let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] - - const [walletClient, walletClientTwo] = [ - createWalletClient({ - account, - chain, - transport: http() - }), - createWalletClient({ - account: accountTwo, - chain, - transport: http() - }) - ] - - beforeAll(async () => { - ;[smartAccount, smartAccountTwo] = await Promise.all( - [walletClient, walletClientTwo].map((client) => - createSmartAccountClient({ - chainId, - signer: client, - bundlerUrl, - paymasterUrl - }) - ) - ) - ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( - [smartAccount, smartAccountTwo].map((account) => - account.getAccountAddress() - ) - ) - }) - - test("should send some native token to a recipient", async () => { - await topUp(smartAccountAddress, BigInt(1000000000000000000)) - const balanceOfRecipient = await checkBalance(recipient) - - const { wait } = await smartAccount.sendTransaction( - { - to: recipient, - value: 1n - }, - { nonceOptions } - ) - - const { - receipt: { transactionHash }, - success - } = await wait() - - expect(success).toBe("true") - - const newBalanceOfRecipient = await checkBalance(recipient) - - expect(transactionHash).toBeTruthy() - expect(newBalanceOfRecipient - balanceOfRecipient).toBe(1n) - }, 60000) - - test("should send some native token to a recipient with a bundler instance", async () => { - await topUp(smartAccountAddress, BigInt(1000000000000000000)) - - const balanceOfRecipient = await checkBalance(recipient) - - const smartAccountClientWithBundlerInstance = - await createSmartAccountClient({ - signer: walletClient, - bundler: await createBundler({ - bundlerUrl, - userOpReceiptMaxDurationIntervals: { - [chainId]: 50000 - } - }), - paymasterUrl - }) - - const { wait } = - await smartAccountClientWithBundlerInstance.sendTransaction( - { - to: recipient, - value: 1 - }, - { nonceOptions } - ) - - const { - receipt: { transactionHash }, - success - } = await wait() - - expect(success).toBe("true") - - const newBalanceOfRecipient = await checkBalance(recipient) - - expect(transactionHash).toBeTruthy() - expect(newBalanceOfRecipient - balanceOfRecipient).toBe(1n) - }, 70000) - - test("should test a new network", async () => { - /* Set the network id and paymaster key */ - const NETWORK_ID = 80002 - const PAYMASTER_KEY = "<API_KEY>" - /****************************************/ - const chain = getChain(NETWORK_ID) - const bundlerUrl = getBundlerUrl(NETWORK_ID) - const paymasterUrl = `https://paymaster.biconomy.io/api/v1/${NETWORK_ID}/${PAYMASTER_KEY}` - - const newWalletClient = createWalletClient({ - account, - chain, - transport: http() - }) - - const newSmartAccount = await createSmartAccountClient({ - signer: newWalletClient, - bundlerUrl - // paymasterUrl - }) - - expect(chain.id).toBe(NETWORK_ID) - - const { wait } = await newSmartAccount.sendTransaction( - { - to: recipient, - value: 1n - }, - { nonceOptions } - ) - - const { success } = await wait() - - expect(success).toBe("true") - }, 70000) -}) diff --git a/tests/modules/read.test.ts b/tests/modules/read.test.ts deleted file mode 100644 index 19307f3cc..000000000 --- a/tests/modules/read.test.ts +++ /dev/null @@ -1,301 +0,0 @@ -import { defaultAbiCoder } from "@ethersproject/abi" -import { JsonRpcProvider } from "@ethersproject/providers" -import { Wallet } from "@ethersproject/wallet" -import { - http, - type Hex, - createWalletClient, - encodeAbiParameters, - slice, - toFunctionSelector -} from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { beforeAll, describe, expect, test } from "vitest" -import { - type BiconomySmartAccountV2, - createSmartAccountClient -} from "../../src/account" -import { - DEFAULT_ERC20_MODULE, - createECDSAOwnershipValidationModule, - createMultiChainValidationModule, - getSessionDatum -} from "../../src/modules" -import { getConfig } from "../utils" - -describe("Modules:Read", () => { - const { - chain, - chainId, - privateKey, - privateKeyTwo, - bundlerUrl, - paymasterUrl - } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] - let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] - - const [walletClient, walletClientTwo] = [ - createWalletClient({ - account, - chain, - transport: http() - }), - createWalletClient({ - account: accountTwo, - chain, - transport: http() - }) - ] - - beforeAll(async () => { - ;[smartAccount, smartAccountTwo] = await Promise.all( - [walletClient, walletClientTwo].map((client) => - createSmartAccountClient({ - chainId, - signer: client, - bundlerUrl, - paymasterUrl - }) - ) - ) - ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( - [smartAccount, smartAccountTwo].map((account) => - account.getAccountAddress() - ) - ) - }) - - test.concurrent("should check session key helpers", async () => { - const EXPECTED_SESSION_KEY_DATA = - "0x000000000000000000000000fa66e705cf2582cf56528386bb9dfca119767262000000000000000000000000747a4168db14f57871fa8cda8b5455d8c2a8e90a0000000000000000000000003079b249dfde4692d7844aa261f8cf7d927a0da50000000000000000000000000000000000000000000000000000000000989680" - const EXPECTED_ABI_SESSION_DATA = - "0xFA66E705cf2582cF56528386Bb9dFCA119767262747A4168DB14F57871fa8cda8B5455D8C2a8e90aa9059cbb0000000000000000000000000098968000020000000000000000000000000000003079B249DFDE4692D7844aA261f8cf7D927A0DA50001010000000000000000000000000000000000000000000000000000000000989680" - const sessionKeyEOA = "0xFA66E705cf2582cF56528386Bb9dFCA119767262" - const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - const recipient = "0x3079B249DFDE4692D7844aA261f8cf7D927A0DA5" - const amount = 10000000n - - const sessionKeyData = encodeAbiParameters( - [ - { type: "address" }, - { type: "address" }, - { type: "address" }, - { type: "uint256" } - ], - [ - sessionKeyEOA, - token, // erc20 token address - recipient, // receiver address - amount - ] - ) - - const abiSessionData = await getSessionDatum(sessionKeyEOA, { - destContract: token, - functionSelector: slice( - toFunctionSelector("transfer(address,uint256)"), - 0, - 4 - ), - valueLimit: amount, - rules: [ - { - offset: 0, - condition: 0, - referenceValue: recipient - }, - { - offset: 1, - condition: 1, - referenceValue: amount - } - ] - }) - - expect(EXPECTED_ABI_SESSION_DATA).toEqual(abiSessionData) - expect(EXPECTED_SESSION_KEY_DATA).toEqual(sessionKeyData) - }) - - test.concurrent("should encode params successfully", async () => { - const hardcodedPaddedSignature = - "0x000000000000000000000000000002fbffedd9b33f4e7156f2de8d48945e74890000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d50c68705bd6897b2d17c7de32fb519fda00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000fa66e705cf2582cf56528386bb9dfca119767262000000000000000000000000da5289fcaaf71d52a80a254da614a192b693e9770000000000000000000000003079b249dfde4692d7844aa261f8cf7d927a0da500000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000000000000000000003ca2b0ef4564d7ca7044b8c9d75685659975c0cab591408cb20e4a2ab278ab282633eb23075a8cb9bc5b01a5a4fa367b73da76821105f67a62ed7eedd335f6c0e361e73015ce4bb83439ab0742bdfed338ec39e2e8dd0819528f02be218fc1db90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ba4a7338d7a90dfa465cf975cc6691812c3772e00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000fa66e705cf2582cf56528386bb9dfca1197672620000000000000000000000000000000000000000000000000000000000000003b91f47666ba9b0b6b2cfbb60bf39b241d269786aa01f388021057d080863dd40633eb23075a8cb9bc5b01a5a4fa367b73da76821105f67a62ed7eedd335f6c0e361e73015ce4bb83439ab0742bdfed338ec39e2e8dd0819528f02be218fc1db90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004173c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b00000000000000000000000000000000000000000000000000000000000000" - const sessionKeyManagerAddress = - "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489" - const mockEcdsaSessionKeySig = - "0x73c3ac716c487ca34bb858247b5ccf1dc354fbaabdd089af3b2ac8e78ba85a4959a2d76250325bd67c11771c31fccda87c33ceec17cc0de912690521bb95ffcb1b" - const sessionDataTupleArray = [ - [ - 0n, - 0n, - DEFAULT_ERC20_MODULE, - "0x000000000000000000000000fa66e705cf2582cf56528386bb9dfca119767262000000000000000000000000da5289fcaaf71d52a80a254da614a192b693e9770000000000000000000000003079b249dfde4692d7844aa261f8cf7d927a0da50000000000000000000000000000000000000000000000000000000000989680", - [ - "0xca2b0ef4564d7ca7044b8c9d75685659975c0cab591408cb20e4a2ab278ab282", - "0x633eb23075a8cb9bc5b01a5a4fa367b73da76821105f67a62ed7eedd335f6c0e", - "0x361e73015ce4bb83439ab0742bdfed338ec39e2e8dd0819528f02be218fc1db9" - ], - "0x" - ], - [ - 0n, - 0n, - "0x7ba4a7338d7a90dfa465cf975cc6691812c3772e", - "0x000000000000000000000000fa66e705cf2582cf56528386bb9dfca119767262", - [ - "0xb91f47666ba9b0b6b2cfbb60bf39b241d269786aa01f388021057d080863dd40", - "0x633eb23075a8cb9bc5b01a5a4fa367b73da76821105f67a62ed7eedd335f6c0e", - "0x361e73015ce4bb83439ab0742bdfed338ec39e2e8dd0819528f02be218fc1db9" - ], - "0x" - ] - ] - - const paddedSignature = defaultAbiCoder.encode( - [ - "address", - "tuple(uint48,uint48,address,bytes,bytes32[],bytes)[]", - "bytes" - ], - [sessionKeyManagerAddress, sessionDataTupleArray, mockEcdsaSessionKeySig] - ) - - const abiParameters = [ - { type: "address" }, - { - type: "tuple[]", - components: [ - { type: "uint48" }, - { type: "uint48" }, - { type: "address" }, - { type: "bytes" }, - { type: "bytes32[]" }, - { type: "bytes" } - ] - }, - { type: "bytes" } - ] - - const paddedSignatureWithViem = encodeAbiParameters(abiParameters, [ - sessionKeyManagerAddress, - sessionDataTupleArray, - mockEcdsaSessionKeySig - ]) - - expect(paddedSignature).toEqual(hardcodedPaddedSignature) - expect(paddedSignatureWithViem).toEqual(hardcodedPaddedSignature) - }) - - test.concurrent( - "should create a ECDSAOwnershipValidationModule with signer", - async () => { - const defaultValidationModule = - await createECDSAOwnershipValidationModule({ - signer: walletClient - }) - // Should not require a signer or chainId - const smartAccount = await createSmartAccountClient({ - bundlerUrl, - defaultValidationModule, - signer: walletClient - }) - const address = await smartAccount.getAccountAddress() - expect(address).toBeTruthy() - expect(smartAccount.activeValidationModule).toEqual( - defaultValidationModule - ) - } - ) - - test.concurrent( - "should create a ECDSAOwnershipValidationModule without signer", - async () => { - const defaultValidationModule = - await createECDSAOwnershipValidationModule({ - signer: walletClient - }) - // Should not require a signer or chainId - const smartAccount = await createSmartAccountClient({ - bundlerUrl, - defaultValidationModule - }) - const address = await smartAccount.getAccountAddress() - expect(address).toBeTruthy() - expect(smartAccount.activeValidationModule).toEqual( - defaultValidationModule - ) - } - ) - - test.concurrent( - "should create a ECDSAOwnershipValidationModule by default, without explicitly setting it on the smart account", - async () => { - const defaultValidationModule = - await createECDSAOwnershipValidationModule({ - signer: walletClient - }) - const smartAccount = await createSmartAccountClient({ - bundlerUrl, - signer: walletClient - }) - const address = await smartAccount.getAccountAddress() - expect(address).toBeTruthy() - const smartAccountValidationModuleAddress = - await smartAccount.activeValidationModule.getAddress() - expect(smartAccountValidationModuleAddress).toEqual( - defaultValidationModule.moduleAddress - ) - } - ) - - test.concurrent( - "should create a MultiChainValidationModule from an ethers signer using convertSigner", - async () => { - const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) - const ethersSigner = new Wallet(privateKey, ethersProvider) - - const defaultValidationModule = await createMultiChainValidationModule({ - signer: ethersSigner - }) - // Should not require a signer or chainId - const newSmartAccount = await createSmartAccountClient({ - bundlerUrl, - defaultValidationModule, - rpcUrl: chain.rpcUrls.default.http[0] - }) - - const address = await newSmartAccount.getAccountAddress() - expect(address).toBeTruthy() - // expect the relevant module to be set - expect(newSmartAccount.activeValidationModule).toEqual( - defaultValidationModule - ) - }, - 50000 - ) - - test.concurrent( - "should create a ECDSAOwnershipValidationModule from a viem signer using convertSigner", - async () => { - const defaultValidationModule = - await createECDSAOwnershipValidationModule({ - signer: walletClient - }) - // Should not require a signer or chainId - const smartAccount = await createSmartAccountClient({ - bundlerUrl, - defaultValidationModule, - rpcUrl: chain.rpcUrls.default.http[0] - }) - const address = await smartAccount.getAccountAddress() - expect(address).toBeTruthy() - // expect the relevant module to be set - expect(smartAccount.activeValidationModule).toEqual( - defaultValidationModule - ) - }, - 50000 - ) -}) diff --git a/tests/modules/write.test.ts b/tests/modules/write.test.ts deleted file mode 100644 index 15d3f7fd2..000000000 --- a/tests/modules/write.test.ts +++ /dev/null @@ -1,1371 +0,0 @@ -import { - http, - type Hex, - createPublicClient, - createWalletClient, - encodeAbiParameters, - encodeFunctionData, - pad, - parseAbi, - parseEther, - parseUnits, - slice, - toFunctionSelector -} from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { beforeAll, describe, expect, test } from "vitest" -import { - type BiconomySmartAccountV2, - type Transaction, - type TransferOwnershipCompatibleModule, - type WalletClientSigner, - addressEquals, - createSmartAccountClient -} from "../../src/account" -import { Logger, getChain } from "../../src/account" -import { - type CreateSessionDataParams, - DEFAULT_BATCHED_SESSION_ROUTER_MODULE, - DEFAULT_ECDSA_OWNERSHIP_MODULE, - DEFAULT_MULTICHAIN_MODULE, - DEFAULT_SESSION_KEY_MANAGER_MODULE, - ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION, - createMultiChainValidationModule, - createSessionKeyManagerModule, - getABISVMSessionKeyData, - resumeSession -} from "../../src/modules" - -import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" -import { SessionMemoryStorage } from "../../src/modules/session-storage/SessionMemoryStorage" -import { createSessionKeyEOA } from "../../src/modules/session-storage/utils" -import { - type Policy, - type Session, - createABISessionDatum, - createSession, - getSingleSessionTxParams -} from "../../src/modules/sessions/abi" -import { - createBatchSession, - getBatchSessionTxParams -} from "../../src/modules/sessions/batch" -import { createERC20SessionDatum } from "../../src/modules/sessions/erc20" -import { createSessionSmartAccountClient } from "../../src/modules/sessions/sessionSmartAccountClient" -import { PaymasterMode } from "../../src/paymaster" -import { - checkBalance, - getBundlerUrl, - getConfig, - nonZeroBalance, - topUp -} from "../utils" - -describe("Modules:Write", () => { - const nonceOptions = { nonceKey: Date.now() + 30 } - const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - const preferredToken = token - const BICONOMY_TOKEN_PAYMASTER = "0x00000f7365cA6C59A2C93719ad53d567ed49c14C" - const amount = parseUnits(".0001", 6) - - const withSponsorship = { - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - } - - const { - chain, - chainId, - privateKey, - privateKeyTwo, - bundlerUrl, - paymasterUrl, - paymasterUrlTwo - } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - const publicClient = createPublicClient({ - chain, - transport: http() - }) - - let [ - smartAccount, - smartAccountTwo, - smartAccountThree, - smartAccountFour - ]: BiconomySmartAccountV2[] = [] - let [ - smartAccountAddress, - smartAccountAddressTwo, - smartAccountAddressThree, - smartAccountAddressFour - ]: Hex[] = [] - - const [walletClient, walletClientTwo] = [ - createWalletClient({ - account, - chain, - transport: http() - }), - createWalletClient({ - account: accountTwo, - chain, - transport: http() - }) - ] - - const recipient = walletClientTwo.account.address - - beforeAll(async () => { - ;[smartAccount, smartAccountTwo] = await Promise.all( - [walletClient, walletClientTwo].map((client) => - createSmartAccountClient({ - chainId, - signer: client, - bundlerUrl, - paymasterUrl - }) - ) - ) - ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( - [smartAccount, smartAccountTwo].map((account) => - account.getAccountAddress() - ) - ) - - smartAccountThree = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - paymasterUrl, - index: 7 - }) - - smartAccountFour = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - paymasterUrl, - index: 6 - }) - - smartAccountAddressThree = await smartAccountThree.getAccountAddress() - smartAccountAddressFour = await smartAccountFour.getAccountAddress() - - await Promise.all([ - topUp(smartAccountAddress, undefined, token), - topUp(smartAccountAddress, undefined), - topUp(smartAccountAddressTwo, undefined, token), - topUp(smartAccountAddressTwo, undefined), - topUp(smartAccountAddressThree, undefined, token), - topUp(smartAccountAddressThree, undefined), - topUp(smartAccountAddressFour, undefined, token), - topUp(smartAccountAddressFour, undefined) - ]) - }) - - // User must be connected with a wallet to grant permissions - test("should create a single session on behalf of a user", async () => { - const { sessionKeyAddress, sessionStorageClient } = - await createSessionKeyEOA(smartAccountThree, chain) - - const { wait, session } = await createSession( - smartAccountThree, - [ - { - sessionKeyAddress, - contractAddress: nftAddress, - functionSelector: "safeMint(address)", - rules: [ - { - offset: 0, - condition: 0, - referenceValue: smartAccountAddressThree - } - ], - interval: { - validUntil: 0, - validAfter: 0 - }, - valueLimit: 0n - } - ], - sessionStorageClient, - withSponsorship - ) - - const { - receipt: { transactionHash }, - success - } = await wait() - - expect(success).toBe("true") - Logger.log("Tx Hash: ", transactionHash) - }, 50000) - - // User no longer has to be connected, - // Only the reference to the relevant sessionID and the store from the previous step is needed to execute txs on the user's behalf - test("should use the session to mint an NFT for the user", async () => { - // Assume the real signer for userSmartAccountThree is no longer available (ie. user has logged out) - const smartAccountThreeWithSession = await createSessionSmartAccountClient( - { - accountAddress: smartAccountAddressThree, // Set the account address on behalf of the user - bundlerUrl, - paymasterUrl, - chainId - }, - smartAccountAddressThree // Storage client, full Session or smartAccount address if using default storage - ) - - const sessionSmartAccountThreeAddress = - await smartAccountThreeWithSession.getAccountAddress() - - expect(sessionSmartAccountThreeAddress).toEqual(smartAccountAddressThree) - - const nftMintTx = { - to: nftAddress, - data: encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [smartAccountAddressThree] - }) - } - - const nftBalanceBefore = await checkBalance( - smartAccountAddressThree, - nftAddress - ) - - const { wait } = await smartAccountThreeWithSession.sendTransaction( - nftMintTx, - { ...withSponsorship, nonceOptions } - ) - - const { success } = await wait() - - expect(success).toBe("true") - - const nftBalanceAfter = await checkBalance( - smartAccountAddressThree, - nftAddress - ) - - expect(nftBalanceAfter - nftBalanceBefore).toBe(1n) - }) - - // User must be connected with a wallet to grant permissions - test("should create a batch session on behalf of a user", async () => { - const { sessionKeyAddress, sessionStorageClient } = - await createSessionKeyEOA(smartAccountFour, chain) - - const leaves: CreateSessionDataParams[] = [ - createERC20SessionDatum({ - interval: { - validUntil: 0, - validAfter: 0 - }, - sessionKeyAddress, - sessionKeyData: encodeAbiParameters( - [ - { type: "address" }, - { type: "address" }, - { type: "address" }, - { type: "uint256" } - ], - [sessionKeyAddress, token, recipient, amount] - ) - }), - createABISessionDatum({ - interval: { - validUntil: 0, - validAfter: 0 - }, - sessionKeyAddress, - contractAddress: nftAddress, - functionSelector: "safeMint(address)", - rules: [ - { - offset: 0, - condition: 0, - referenceValue: smartAccountAddressFour - } - ], - valueLimit: 0n - }) - ] - - const { wait, session } = await createBatchSession( - smartAccountFour, - sessionStorageClient, - leaves, - withSponsorship - ) - - const { - receipt: { transactionHash }, - success - } = await wait() - - expect(success).toBe("true") - - Logger.log("Tx Hash: ", transactionHash) - Logger.log("session: ", { session }) - }, 50000) - - // User no longer has to be connected, - // Only the reference to the relevant sessionID and the store from the previous step is needed to execute txs on the user's behalf - test("should use the batch session to mint an NFT, and pay some token for the user", async () => { - const { sessionStorageClient } = await resumeSession( - smartAccountAddressFour // Use the store from the previous test, you could pass in the smartAccount address, the full session or your custom sessionStorageClient - ) - - // Assume the real signer for userSmartAccountFour is no longer available (ie. user has logged out); - const smartAccountFourWithSession = await createSessionSmartAccountClient( - { - accountAddress: sessionStorageClient.smartAccountAddress, // Set the account address on behalf of the user - bundlerUrl, - paymasterUrl, - chainId - }, - smartAccountAddressFour, // Storage client, full Session or smartAccount address if using default storage - true // if batching - ) - - const sessionSmartAccountFourAddress = - await smartAccountFourWithSession.getAccountAddress() - - expect( - addressEquals(sessionSmartAccountFourAddress, smartAccountAddressFour) - ).toBe(true) - - const transferTx: Transaction = { - to: token, - data: encodeFunctionData({ - abi: parseAbi(["function transfer(address _to, uint256 _value)"]), - functionName: "transfer", - args: [recipient, amount] - }) - } - const nftMintTx: Transaction = { - to: nftAddress, - data: encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [smartAccountAddressFour] - }) - } - - const nftBalanceBefore = await checkBalance( - smartAccountAddressFour, - nftAddress - ) - const tokenBalanceBefore = await checkBalance(recipient, token) - - const txs = [transferTx, nftMintTx] - - const batchSessionParams = await getBatchSessionTxParams( - txs, - [0, 1], - smartAccountAddressFour, - chain - ) - - const { wait } = await smartAccountFourWithSession.sendTransaction(txs, { - ...batchSessionParams, - ...withSponsorship, - nonceOptions - }) - const { success } = await wait() - expect(success).toBe("true") - - const tokenBalanceAfter = await checkBalance(recipient, token) - const nftBalanceAfter = await checkBalance( - smartAccountAddressFour, - nftAddress - ) - expect(tokenBalanceAfter - tokenBalanceBefore).toBe(amount) - expect(nftBalanceAfter - nftBalanceBefore).toBe(1n) - }, 50000) - - test("should use MultichainValidationModule to mint an NFT on two chains with sponsorship", async () => { - const nftAddress: Hex = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - - const chainIdBase = 84532 - const bundlerUrlBase = getBundlerUrl(chainIdBase) - - const signerBase = createWalletClient({ - account: privateKeyToAccount(`0x${privateKey}`), - chain: getChain(84532), - transport: http() - }) - - const paymasterUrlBase = paymasterUrlTwo - - const multiChainModule = await createMultiChainValidationModule({ - signer: walletClient, - moduleAddress: DEFAULT_MULTICHAIN_MODULE - }) - - const [polygonAccount, baseAccount] = await Promise.all([ - createSmartAccountClient({ - chainId, - signer: walletClient, - bundlerUrl, - defaultValidationModule: multiChainModule, - activeValidationModule: multiChainModule, - paymasterUrl - }), - createSmartAccountClient({ - chainId: chainIdBase, - signer: signerBase, - bundlerUrl: bundlerUrlBase, - defaultValidationModule: multiChainModule, - activeValidationModule: multiChainModule, - paymasterUrl: paymasterUrlBase - }) - ]) - - // Check if the smart account has been deployed - const [isPolygonDeployed, isBaseDeployed] = await Promise.all([ - polygonAccount.isAccountDeployed(), - baseAccount.isAccountDeployed() - ]) - if (!isPolygonDeployed) { - const { wait } = await polygonAccount.deploy(withSponsorship) - const { success } = await wait() - expect(success).toBe("true") - } - if (!isBaseDeployed) { - const { wait } = await baseAccount.deploy(withSponsorship) - const { success } = await wait() - expect(success).toBe("true") - } - - const moduleEnabled1 = await polygonAccount.isModuleEnabled( - DEFAULT_MULTICHAIN_MODULE - ) - const moduleActive1 = polygonAccount.activeValidationModule - expect(moduleEnabled1).toBeTruthy() - expect(moduleActive1.getAddress()).toBe(DEFAULT_MULTICHAIN_MODULE) - - const moduleEnabled2 = await baseAccount.isModuleEnabled( - DEFAULT_MULTICHAIN_MODULE - ) - const moduleActive2 = polygonAccount.activeValidationModule - expect(moduleEnabled2).toBeTruthy() - expect(moduleActive2.getAddress()).toBe(DEFAULT_MULTICHAIN_MODULE) - - const encodedCall = encodeFunctionData({ - abi: parseAbi([ - "function safeMint(address owner) view returns (uint balance)" - ]), - functionName: "safeMint", - args: [recipient] - }) - - const transaction = { - to: nftAddress, - data: encodedCall - } - - const [partialUserOp1, partialUserOp2] = await Promise.all([ - baseAccount.buildUserOp([transaction], withSponsorship), - polygonAccount.buildUserOp([transaction], withSponsorship) - ]) - - expect(partialUserOp1.paymasterAndData).not.toBe("0x") - expect(partialUserOp2.paymasterAndData).not.toBe("0x") - - // Sign the user ops using multiChainModule - const returnedOps = await multiChainModule.signUserOps([ - { userOp: partialUserOp1, chainId: chainIdBase }, - { userOp: partialUserOp2, chainId } - ]) - - // Send the signed user ops on both chains - const userOpResponse1 = await baseAccount.sendSignedUserOp( - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - returnedOps[0] as any - ) - const userOpResponse2 = await polygonAccount.sendSignedUserOp( - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - returnedOps[1] as any - ) - - Logger.log(userOpResponse1.userOpHash, "MULTICHAIN BASE USER OP HASH") - Logger.log(userOpResponse2.userOpHash, "MULTICHAIN POLYGON USER OP HASH") - - expect(userOpResponse1.userOpHash).toBeTruthy() - expect(userOpResponse2.userOpHash).toBeTruthy() - - const { success: success1 } = await userOpResponse1.wait() - const { success: success2 } = await userOpResponse2.wait() - - expect(success1).toBe("true") - expect(success2).toBe("true") - }, 50000) - - test("should use SessionValidationModule to send a user op", async () => { - let sessionSigner: WalletClientSigner - const sessionKeyEOA = walletClient.account.address - const recipient = walletClientTwo.account.address - - // Create smart account - let smartAccount = await createSmartAccountClient({ - chainId, - signer: walletClient, - bundlerUrl, - paymasterUrl, - index: 11 // Increasing index to not conflict with other test cases and use a new smart account - }) - const accountAddress = await smartAccount.getAccountAddress() - const sessionMemoryStorage: SessionMemoryStorage = new SessionMemoryStorage( - accountAddress - ) - // First we need to check if smart account is deployed - // if not deployed, send an empty transaction to deploy it - const isDeployed = await smartAccount.isAccountDeployed() - if (!isDeployed) { - const { wait } = await smartAccount.deploy({ - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) - const { success } = await wait() - expect(success).toBe("true") - } - - try { - sessionSigner = await sessionMemoryStorage.getSignerByKey( - sessionKeyEOA, - chain - ) - } catch (error) { - sessionSigner = await sessionMemoryStorage.addSigner( - { - pbKey: sessionKeyEOA, - pvKey: `0x${privateKey}` - }, - chain - ) - } - - expect(sessionSigner).toBeTruthy() - // Create session module - const sessionModule = await createSessionKeyManagerModule({ - moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, - smartAccountAddress: await smartAccount.getAddress(), - sessionStorageClient: sessionMemoryStorage - }) - const functionSelector = slice( - toFunctionSelector("safeMint(address)"), - 0, - 4 - ) - // Set enabled call on session - const sessionKeyData = await getABISVMSessionKeyData(sessionKeyEOA as Hex, { - destContract: "0xdd526eba63ef200ed95f0f0fb8993fe3e20a23d0" as Hex, // nft address - functionSelector: functionSelector, - valueLimit: parseEther("0"), - rules: [ - { - offset: 0, // offset 0 means we are checking first parameter of safeMint (recipient address) - condition: 0, // 0 = Condition.EQUAL - referenceValue: pad("0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549", { - size: 32 - }) // recipient address - } - ] - }) - const abiSvmAddress = "0x000006bC2eCdAe38113929293d241Cf252D91861" - const sessionTxData = await sessionModule.createSessionData([ - { - validUntil: 0, - validAfter: 0, - sessionValidationModule: abiSvmAddress, - sessionPublicKey: sessionKeyEOA as Hex, - sessionKeyData: sessionKeyData as Hex - } - ]) - const setSessionAllowedTrx = { - to: DEFAULT_SESSION_KEY_MANAGER_MODULE, - data: sessionTxData.data - } - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - const txArray: any = [] - // Check if module is enabled - const isEnabled = await smartAccount.isModuleEnabled( - DEFAULT_SESSION_KEY_MANAGER_MODULE - ) - if (!isEnabled) { - const enableModuleTrx = await smartAccount.getEnableModuleData( - DEFAULT_SESSION_KEY_MANAGER_MODULE - ) - txArray.push(enableModuleTrx) - txArray.push(setSessionAllowedTrx) - } else { - Logger.log("MODULE ALREADY ENABLED") - txArray.push(setSessionAllowedTrx) - } - const userOp = await smartAccount.buildUserOp(txArray, { - nonceOptions, - paymasterServiceData: { - mode: PaymasterMode.SPONSORED - } - }) - const userOpResponse1 = await smartAccount.sendUserOp(userOp) - const transactionDetails = await userOpResponse1.wait() - expect(transactionDetails.success).toBe("true") - Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash) - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: ["0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020549"] - }) - const nftMintTx = { - to: "0xdd526eba63ef200ed95f0f0fb8993fe3e20a23d0", - data: encodedCall - } - smartAccount = smartAccount.setActiveValidationModule(sessionModule) - const maticBalanceBefore = await checkBalance(smartAccountAddress) - const userOpResponse2 = await smartAccount.sendTransaction(nftMintTx, { - nonceOptions, - params: { - sessionSigner: sessionSigner, - sessionValidationModule: abiSvmAddress - }, - paymasterServiceData: { - mode: PaymasterMode.SPONSORED - } - }) - expect(userOpResponse2.userOpHash).toBeTruthy() - expect(userOpResponse2.userOpHash).not.toBeNull() - const maticBalanceAfter = await checkBalance(smartAccountAddress) - expect(maticBalanceAfter).toEqual(maticBalanceBefore) - }, 60000) - - test("should enable batched module", async () => { - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - paymasterUrl - }) - - const isBRMenabled = await smartAccount.isModuleEnabled( - DEFAULT_BATCHED_SESSION_ROUTER_MODULE - ) - - if (!isBRMenabled) { - const tx = await smartAccount.getEnableModuleData( - DEFAULT_BATCHED_SESSION_ROUTER_MODULE - ) - const { wait } = await smartAccount.sendTransaction(tx, { - nonceOptions, - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) - const { success } = await wait() - expect(success).toBe("true") - } - }, 50000) - - test.skip("should use ABI SVM to allow transfer ownership of smart account", async () => { - const smartAccount = await createSmartAccountClient({ - chainId, - signer: walletClient, - bundlerUrl, - paymasterUrl, - index: 10 // Increasing index to not conflict with other test cases and use a new smart account - }) - - const smartAccountAddressForPreviousOwner = - await smartAccount.getAccountAddress() - - const signerOfAccount = walletClient.account.address - const ownerOfAccount = await publicClient.readContract({ - address: DEFAULT_ECDSA_OWNERSHIP_MODULE, - abi: ECDSAModuleAbi, - functionName: "getOwner", - args: [await smartAccount.getAccountAddress()] - }) - - if (ownerOfAccount !== signerOfAccount) { - // Re-create the smart account instance with the new owner - const smartAccountWithOtherOwner = await createSmartAccountClient({ - chainId, - signer: walletClientTwo, - bundlerUrl, - paymasterUrl, - accountAddress: smartAccountAddressForPreviousOwner - }) - - // Transfer ownership back to walletClient 1 - await smartAccountWithOtherOwner.transferOwnership( - walletClient.account.address, - DEFAULT_ECDSA_OWNERSHIP_MODULE as TransferOwnershipCompatibleModule, - { paymasterServiceData: { mode: PaymasterMode.SPONSORED } } - ) - } - - let sessionSigner: WalletClientSigner - const sessionKeyEOA = walletClient.account.address - const newOwner = walletClientTwo.account.address - - const accountAddress = await smartAccount.getAccountAddress() - const sessionMemoryStorage: SessionMemoryStorage = new SessionMemoryStorage( - accountAddress - ) - // First we need to check if smart account is deployed - // if not deployed, send an empty transaction to deploy it - const isDeployed = await smartAccount.isAccountDeployed() - if (!isDeployed) { - const { wait } = await smartAccount.deploy({ - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) - const { success } = await wait() - expect(success).toBe("true") - } - - try { - sessionSigner = await sessionMemoryStorage.getSignerByKey( - sessionKeyEOA, - chain - ) - } catch (error) { - sessionSigner = await sessionMemoryStorage.addSigner( - { - pbKey: sessionKeyEOA, - pvKey: `0x${privateKeyTwo}` - }, - chain - ) - } - - expect(sessionSigner).toBeTruthy() - // Create session module - const sessionModule = await createSessionKeyManagerModule({ - moduleAddress: DEFAULT_SESSION_KEY_MANAGER_MODULE, - smartAccountAddress: await smartAccount.getAddress(), - sessionStorageClient: sessionMemoryStorage - }) - const functionSelectorTransferOwnership = slice( - toFunctionSelector("transferOwnership(address) public"), - 0, - 4 - ) - const sessionKeyDataTransferOwnership = await getABISVMSessionKeyData( - sessionKeyEOA as Hex, - { - destContract: ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION.V1_0_0 as Hex, // ECDSA module address - functionSelector: functionSelectorTransferOwnership, - valueLimit: parseEther("0"), - rules: [ - { - offset: 0, // offset 0 means we are checking first parameter of transferOwnership (recipient address) - condition: 0, // 0 = Condition.EQUAL - referenceValue: pad(walletClient.account.address, { - size: 32 - }) // new owner address - } - ] - } - ) - const abiSvmAddress = "0x000006bC2eCdAe38113929293d241Cf252D91861" - const sessionTxDataTransferOwnership = - await sessionModule.createSessionData([ - { - validUntil: 0, - validAfter: 0, - sessionValidationModule: abiSvmAddress, - sessionPublicKey: sessionKeyEOA as Hex, - sessionKeyData: sessionKeyDataTransferOwnership as Hex - } - ]) - const setSessionAllowedTransferOwnerhsipTrx = { - to: DEFAULT_SESSION_KEY_MANAGER_MODULE, - data: sessionTxDataTransferOwnership.data - } - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - const txArray: any = [] - // Check if module is enabled - const isEnabled = await smartAccount.isModuleEnabled( - DEFAULT_SESSION_KEY_MANAGER_MODULE - ) - - if (!isEnabled) { - const enableModuleTrx = await smartAccount.getEnableModuleData( - DEFAULT_SESSION_KEY_MANAGER_MODULE - ) - txArray.push(enableModuleTrx) - txArray.push(setSessionAllowedTransferOwnerhsipTrx) - } else { - Logger.log("MODULE ALREADY ENABLED") - txArray.push(setSessionAllowedTransferOwnerhsipTrx) - } - const userOpResponse1 = await smartAccount.sendTransaction(txArray, { - nonceOptions, - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) - const transactionDetails = await userOpResponse1.wait() - expect(transactionDetails.success).toBe("true") - Logger.log("Tx Hash: ", transactionDetails.receipt.transactionHash) - - // Transfer ownership back to walletClient - await smartAccount.transferOwnership( - newOwner, - DEFAULT_ECDSA_OWNERSHIP_MODULE as TransferOwnershipCompatibleModule, - { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - params: { - sessionSigner: sessionSigner, - sessionValidationModule: abiSvmAddress - } - } - ) - }, 60000) - - test("should correctly parse the reference value and explicitly pass the storage client while resuming the session", async () => { - const DUMMY_CONTRACT_ADDRESS: Hex = - "0xC834b3804817883a6b7072e815C3faf8682bFA13" - const byteCode = await publicClient.getBytecode({ - address: DUMMY_CONTRACT_ADDRESS as Hex - }) - - expect(byteCode).toBeTruthy() - - const { sessionKeyAddress, sessionStorageClient } = - await createSessionKeyEOA( - smartAccount, - chain, - new SessionMemoryStorage(smartAccountAddress) - ) - - const order = parseAbi(["function submitOrder(uint256 _orderNum)"]) - const cancel = parseAbi(["function submitCancel(uint256 _orderNum)"]) - - const sessionBatch: CreateSessionDataParams[] = [ - createABISessionDatum({ - interval: { - validUntil: 0, - validAfter: 0 - }, - sessionKeyAddress, - contractAddress: DUMMY_CONTRACT_ADDRESS, - functionSelector: cancel[0], - rules: [ - { - offset: 0, - condition: 0, - referenceValue: BigInt(1) - } - ], - valueLimit: 0n - }), - createABISessionDatum({ - interval: { - validUntil: 0, - validAfter: 0 - }, - sessionKeyAddress, - contractAddress: DUMMY_CONTRACT_ADDRESS, - functionSelector: order[0], - rules: [ - { - offset: 0, - condition: 0, - referenceValue: BigInt(1) - } - ], - valueLimit: 0n - }) - ] - - const { wait, session } = await createBatchSession( - smartAccount, - sessionStorageClient, - sessionBatch, - withSponsorship - ) - - const { - receipt: { transactionHash }, - success - } = await wait() - - expect(success).toBe("true") - expect(transactionHash).toBeTruthy() - - const smartAccountWithSession = await createSessionSmartAccountClient( - { - accountAddress: await smartAccount.getAccountAddress(), // Set the account address on behalf of the user - bundlerUrl, - paymasterUrl, - chainId: chain.id - }, - sessionStorageClient, // Storage client, full Session or smartAccount address if using default storage - true - ) - - const submitCancelTx: Transaction = { - to: DUMMY_CONTRACT_ADDRESS, - data: encodeFunctionData({ - abi: cancel, - functionName: "submitCancel", - args: [BigInt(1)] - }) - } - - const submitOrderTx: Transaction = { - to: DUMMY_CONTRACT_ADDRESS, - data: encodeFunctionData({ - abi: order, - functionName: "submitOrder", - args: [BigInt(1)] - }) - } - - const txs = [submitOrderTx, submitCancelTx] - const correspondingIndexes = [1, 0] // The order of the txs from the sessionBatch - - const batchSessionParams = await getBatchSessionTxParams( - txs, - correspondingIndexes, - sessionStorageClient, - chain - ) - - const { wait: waitForTx } = await smartAccountWithSession.sendTransaction( - txs, - { - ...batchSessionParams, - ...withSponsorship, - nonceOptions - } - ) - - const { success: txSuccess } = await waitForTx() - expect(txSuccess).toBe("true") - }, 60000) - - test("should use single session for submitting orders", async () => { - const DUMMY_CONTRACT_ADDRESS: Hex = - "0xC834b3804817883a6b7072e815C3faf8682bFA13" - const byteCode = await publicClient.getBytecode({ - address: DUMMY_CONTRACT_ADDRESS as Hex - }) - - expect(byteCode).toBeTruthy() - - const { sessionKeyAddress, sessionStorageClient } = - await createSessionKeyEOA(smartAccount, chain) - - const order = parseAbi(["function submitOrder(uint256 _orderNum)"]) - const cancel = parseAbi(["function submitCancel(uint256 _orderNum)"]) - - const policy: Policy[] = [ - { - interval: { - validUntil: 0, - validAfter: 0 - }, - sessionKeyAddress, - contractAddress: DUMMY_CONTRACT_ADDRESS, - functionSelector: cancel[0], - rules: [ - { - offset: 0, - condition: 0, - referenceValue: BigInt(1) - } - ], - valueLimit: 0n - }, - { - interval: { - validUntil: 0, - validAfter: 0 - }, - sessionKeyAddress, - contractAddress: DUMMY_CONTRACT_ADDRESS, - functionSelector: order[0], - rules: [ - { - offset: 0, - condition: 0, - referenceValue: BigInt(1) - } - ], - valueLimit: 0n - } - ] - - const { wait } = await createSession( - smartAccount, - policy, - sessionStorageClient, - withSponsorship - ) - - const { - receipt: { transactionHash }, - success - } = await wait() - - expect(success).toBe("true") - expect(transactionHash).toBeTruthy() - - const smartAccountWithSession = await createSessionSmartAccountClient( - { - accountAddress: smartAccountAddress, // Set the account address on behalf of the user - bundlerUrl, - paymasterUrl, - chainId: chain.id - }, - sessionStorageClient - ) - - const submitCancelTx: Transaction = { - to: DUMMY_CONTRACT_ADDRESS, - data: encodeFunctionData({ - abi: cancel, - functionName: "submitCancel", - args: [BigInt(1)] - }) - } - - const submitOrderTx: Transaction = { - to: DUMMY_CONTRACT_ADDRESS, - data: encodeFunctionData({ - abi: order, - functionName: "submitOrder", - args: [BigInt(1)] - }) - } - - const allSessionIds = (await sessionStorageClient.getAllSessionData()).map( - ({ sessionID }) => sessionID - ) - - const singleSessionParamsForCancel = await getSingleSessionTxParams( - sessionStorageClient, - chain, - 0 - ) - - const singleSessionParamsForOrder = await getSingleSessionTxParams( - sessionStorageClient, - chain, - 1 - ) - - const { wait: waitForCancelTx } = - await smartAccountWithSession.sendTransaction(submitCancelTx, { - nonceOptions, - ...singleSessionParamsForCancel, - ...withSponsorship - }) - - const { success: txCancelSuccess } = await waitForCancelTx() - expect(txCancelSuccess).toBe("true") - - const { wait: waitForOrderTx } = - await smartAccountWithSession.sendTransaction(submitOrderTx, { - nonceOptions, - ...singleSessionParamsForOrder, - ...withSponsorship - }) - - const { success: txOrderSuccess } = await waitForOrderTx() - expect(txOrderSuccess).toBe("true") - }, 60000) - - test("should combine erc20 token gas payments with a batch session", async () => { - await nonZeroBalance(smartAccountAddress, preferredToken) - - const balanceOfPreferredTokenBefore = await checkBalance( - smartAccountAddress, - preferredToken - ) - - const { sessionKeyAddress, sessionStorageClient } = - await createSessionKeyEOA(smartAccount, chain) - - const maxUnit256Value = - 115792089237316195423570985008687907853269984665640564039457584007913129639935n - const approval = parseAbi([ - "function approve(address spender, uint256 value) external returns (bool)" - ]) - const safeMint = parseAbi([ - "function safeMint(address owner) view returns (uint balance)" - ]) - - const leaves: CreateSessionDataParams[] = [ - createABISessionDatum({ - interval: { - validUntil: 0, - validAfter: 0 - }, - sessionKeyAddress, - contractAddress: preferredToken, - functionSelector: approval[0], - rules: [ - { - offset: 0, - condition: 0, // equal - referenceValue: BICONOMY_TOKEN_PAYMASTER - }, - { - offset: 32, - condition: 1, // less than or equal - referenceValue: maxUnit256Value // max amount - } - ], - valueLimit: 0n - }), - createABISessionDatum({ - interval: { - validUntil: 0, - validAfter: 0 - }, - sessionKeyAddress, - contractAddress: nftAddress, - functionSelector: safeMint[0], - rules: [ - { - offset: 0, - condition: 0, - referenceValue: smartAccountAddress - } - ], - valueLimit: 0n - }) - ] - - const { wait, session } = await createBatchSession( - smartAccount, - sessionStorageClient, - leaves, - withSponsorship - ) - - const { - receipt: { transactionHash }, - success - } = await wait() - - expect(success).toBe("true") - expect(transactionHash).toBeTruthy() - - const smartAccountWithSession = await createSessionSmartAccountClient( - { - accountAddress: smartAccountAddress, // Set the account address on behalf of the user - bundlerUrl, - paymasterUrl, - chainId: chain.id - }, - session, - true // for batching - ) - - const approvalTx = { - to: preferredToken, - data: encodeFunctionData({ - abi: approval, - functionName: "approve", - args: [BICONOMY_TOKEN_PAYMASTER, 1000000n] // Must be more than the expected value, could be retrieved from the getTokenFees() method - }) - } - - const nftMintTx = { - to: nftAddress, - data: encodeFunctionData({ - abi: safeMint, - functionName: "safeMint", - args: [smartAccountAddress] - }) - } - - const txs = [approvalTx, nftMintTx] - - const batchSessionParams = await getBatchSessionTxParams( - txs, - [0, 1], - session, - chain - ) - - const { wait: waitForMint } = await smartAccountWithSession.sendTransaction( - txs, - { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - preferredToken, - skipPatchCallData: true // This omits the automatic patching of the call data with approvals - }, - ...batchSessionParams - } - ) - const { - receipt: { transactionHash: mintTxHash }, - userOpHash, - success: mintSuccess - } = await waitForMint() - - const balanceOfPreferredTokenAfter = await checkBalance( - smartAccountAddress, - preferredToken - ) - - expect(mintSuccess).toBe("true") - expect( - balanceOfPreferredTokenBefore - balanceOfPreferredTokenAfter - ).toBeGreaterThan(0) - }, 60000) - - test("should use different policy leaves from a single session for a) approving token gas payment approvals and b) the main tx", async () => { - await nonZeroBalance(smartAccountAddress, preferredToken) - - const balanceOfPreferredTokenBefore = await checkBalance( - smartAccountAddress, - preferredToken - ) - - const { sessionKeyAddress, sessionStorageClient } = - await createSessionKeyEOA(smartAccount, chain) - - const maxUnit256Value = - 115792089237316195423570985008687907853269984665640564039457584007913129639935n - const approval = parseAbi([ - "function approve(address spender, uint256 value) external returns (bool)" - ]) - const safeMint = parseAbi([ - "function safeMint(address owner) view returns (uint balance)" - ]) - const policy: Policy[] = [ - { - interval: { - validUntil: 0, - validAfter: 0 - }, - sessionKeyAddress, - contractAddress: preferredToken, - functionSelector: approval[0], - rules: [ - { - offset: 0, - condition: 0, // equal - referenceValue: BICONOMY_TOKEN_PAYMASTER - }, - { - offset: 32, - condition: 1, // less than or equal - referenceValue: maxUnit256Value // max amount - } - ], - valueLimit: 0n - }, - { - interval: { - validUntil: 0, - validAfter: 0 - }, - sessionKeyAddress, - contractAddress: nftAddress, - functionSelector: safeMint[0], - rules: [ - { - offset: 0, - condition: 0, - referenceValue: smartAccountAddress - } - ], - valueLimit: 0n - } - ] - - const { wait, session } = await createSession( - smartAccount, - policy, - sessionStorageClient, - withSponsorship - ) - - const { - receipt: { transactionHash }, - success - } = await wait() - - expect(success).toBe("true") - expect(transactionHash).toBeTruthy() - - const smartAccountWithSession = await createSessionSmartAccountClient( - { - accountAddress: smartAccountAddress, // Set the account address on behalf of the user - bundlerUrl, - paymasterUrl, - chainId: chain.id - }, - smartAccountAddress - ) - - const approvalTx = { - to: preferredToken, - data: encodeFunctionData({ - abi: approval, - functionName: "approve", - args: [BICONOMY_TOKEN_PAYMASTER, 1000000n] // Must be more than the expected value, could be retrieved from the getTokenFees() method - }) - } - - const nftMintTx = { - to: nftAddress, - data: encodeFunctionData({ - abi: safeMint, - functionName: "safeMint", - args: [smartAccountAddress] - }) - } - - const singleSessionParamsForApproval = await getSingleSessionTxParams( - session, - chain, - 0 - ) - - const singleSessionParamsForMint = await getSingleSessionTxParams( - session, - chain, - 1 - ) - - const { wait: waitForApprovalTx } = - await smartAccountWithSession.sendTransaction(approvalTx, { - ...singleSessionParamsForApproval, - paymasterServiceData: { - mode: PaymasterMode.ERC20, - preferredToken, - skipPatchCallData: true // This omits the automatic patching of the call data with approvals - } - }) - const { success: txApprovalSuccess } = await waitForApprovalTx() - expect(txApprovalSuccess).toBe("true") - - const { wait: waitForMintTx } = - await smartAccountWithSession.sendTransaction(nftMintTx, { - ...singleSessionParamsForMint, - paymasterServiceData: { - mode: PaymasterMode.ERC20, - preferredToken, - skipPatchCallData: true // This omits the automatic patching of the call data with approvals - } - }) - - const { success: txMintSuccess } = await waitForMintTx() - expect(txMintSuccess).toBe("true") - - const balanceOfPreferredTokenAfter = await checkBalance( - smartAccountAddress, - preferredToken - ) - - expect( - balanceOfPreferredTokenBefore - balanceOfPreferredTokenAfter - ).toBeGreaterThan(0) - }, 80000) -}) diff --git a/tests/paymaster/read.test.ts b/tests/paymaster/read.test.ts deleted file mode 100644 index 1509ee322..000000000 --- a/tests/paymaster/read.test.ts +++ /dev/null @@ -1,147 +0,0 @@ -import { - http, - type Hex, - createPublicClient, - createWalletClient, - encodeFunctionData, - parseAbi -} from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { beforeAll, describe, expect, test } from "vitest" -import { - type BiconomySmartAccountV2, - ERROR_MESSAGES, - createSmartAccountClient -} from "../../src/account" -import { - type FeeQuotesOrDataResponse, - PaymasterMode -} from "../../src/paymaster" -import { getConfig } from "../utils" - -describe("Paymaster:Read", () => { - const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const { - chain, - chainId, - privateKey, - privateKeyTwo, - bundlerUrl, - paymasterUrl - } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - const sender = account.address - const recipient = accountTwo.address - const publicClient = createPublicClient({ - chain, - transport: http() - }) - let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] - let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] - - const [walletClient, walletClientTwo] = [ - createWalletClient({ - account, - chain, - transport: http() - }), - createWalletClient({ - account: accountTwo, - chain, - transport: http() - }) - ] - - beforeAll(async () => { - ;[smartAccount, smartAccountTwo] = await Promise.all( - [walletClient, walletClientTwo].map((client) => - createSmartAccountClient({ - chainId, - signer: client, - bundlerUrl, - paymasterUrl - }) - ) - ) - ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( - [smartAccount, smartAccountTwo].map((account) => - account.getAccountAddress() - ) - ) - }) - - test.concurrent( - "should expect several feeQuotes in resonse to empty tokenInfo fields", - async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - - const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { - paymasterServiceData: { mode: PaymasterMode.ERC20 } - }) - - expect(feeQuotesResponse.feeQuotes?.length).toBeGreaterThan(1) - }, - 30000 - ) - - test.concurrent( - "should get supported tokens from the paymaster", - async () => { - const tokens = await smartAccount.getSupportedTokens() - - expect(tokens.length).toBeGreaterThan(0) - expect(tokens[0]).toHaveProperty("tokenAddress") - expect(tokens[0]).toHaveProperty("symbol") - expect(tokens[0]).toHaveProperty("decimal") - expect(tokens[0]).toHaveProperty("premiumPercentage") - expect(tokens[0]).toHaveProperty("logoUrl") - expect(tokens[0]).toHaveProperty("balance") - }, - 60000 - ) - - test.concurrent( - "should throw and error if missing field for ERC20 Paymaster user op", - async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - - const feeQuotesResponse: FeeQuotesOrDataResponse = - await smartAccount.getTokenFees(transaction, { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - preferredToken: "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - } - }) - - expect(async () => - smartAccount.sendTransaction(transaction, { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - feeQuote: feeQuotesResponse.feeQuotes?.[0] - }, - simulationType: "validation" - }) - ).rejects.toThrow(ERROR_MESSAGES.SPENDER_REQUIRED) - }, - 60000 - ) -}) diff --git a/tests/paymaster/write.test.ts b/tests/paymaster/write.test.ts deleted file mode 100644 index fa63a82e9..000000000 --- a/tests/paymaster/write.test.ts +++ /dev/null @@ -1,303 +0,0 @@ -import { - http, - type Hex, - createPublicClient, - createWalletClient, - encodeFunctionData, - parseAbi -} from "viem" -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { beforeAll, describe, expect, test } from "vitest" -import { - type BiconomySmartAccountV2, - NATIVE_TOKEN_ALIAS, - createSmartAccountClient -} from "../../src/account" -import { PaymasterMode } from "../../src/paymaster" -import { testOnlyOnOptimism } from "../setupFiles" -import { checkBalance, getConfig, nonZeroBalance, topUp } from "../utils" - -describe("Paymaster:Write", () => { - const nonceOptions = { nonceKey: Date.now() + 40 } - const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const { - chain, - chainId, - privateKey, - privateKeyTwo, - bundlerUrl, - paymasterUrl - } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - const sender = account.address - const recipient = accountTwo.address - const publicClient = createPublicClient({ - chain, - transport: http() - }) - let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] - let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] - - const [walletClient, walletClientTwo] = [ - createWalletClient({ - account, - chain, - transport: http() - }), - createWalletClient({ - account: accountTwo, - chain, - transport: http() - }) - ] - - beforeAll(async () => { - ;[smartAccount, smartAccountTwo] = await Promise.all( - [walletClient, walletClientTwo].map((client) => - createSmartAccountClient({ - chainId, - signer: client, - bundlerUrl, - paymasterUrl - }) - ) - ) - ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( - [smartAccount, smartAccountTwo].map((account) => - account.getAccountAddress() - ) - ) - }) - - test("should mint an NFT with sponsorship", async () => { - await nonZeroBalance(smartAccountAddress) - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address to) public"]), - functionName: "safeMint", - args: [recipient] - }) - - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - - const balance = await checkBalance(recipient, nftAddress) - const maticBalanceBefore = await checkBalance(smartAccountAddress) - - const response = await smartAccount.sendTransaction(transaction, { - nonceOptions, - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) - - const userOpReceipt = await response.wait(3) - expect(userOpReceipt.userOpHash).toBeTruthy() - expect(userOpReceipt.success).toBe("true") - - const maticBalanceAfter = await checkBalance(smartAccountAddress) - - expect(maticBalanceAfter).toEqual(maticBalanceBefore) - - const newBalance = (await checkBalance(recipient, nftAddress)) as bigint - - expect(newBalance - balance).toBe(1n) - }, 60000) - - test("should deploy a smart account with sponsorship", async () => { - const newPrivateKey = generatePrivateKey() - const newAccount = privateKeyToAccount(newPrivateKey) - - const newViemWallet = createWalletClient({ - account: newAccount, - chain, - transport: http() - }) - - const smartAccount = await createSmartAccountClient({ - signer: newViemWallet, - paymasterUrl, - bundlerUrl - }) - - const smartAccountAddress = await smartAccount.getAccountAddress() - const balance = await publicClient.getBalance({ - address: smartAccountAddress - }) - expect(balance).toBe(0n) - - const { wait } = await smartAccount.deploy({ - nonceOptions, - paymasterServiceData: { mode: PaymasterMode.SPONSORED } - }) - const { success } = await wait() - - const byteCode = await publicClient.getBytecode({ - address: smartAccountAddress - }) - expect(success).toBe("true") - expect(byteCode).toBeTruthy() - }, 60000) - - test("should withdraw nativeToken with sponsorship", async () => { - await nonZeroBalance(smartAccountAddress) - - const balanceOfSABefore = await checkBalance(smartAccountAddress) - const balanceOfRecipientBefore = await checkBalance(sender) - - const { wait } = await smartAccount.withdraw( - [ - { - address: NATIVE_TOKEN_ALIAS, - amount: BigInt(1), - recipient: sender - } - ], - null, - { nonceOptions, paymasterServiceData: { mode: PaymasterMode.SPONSORED } } - ) - - const { - receipt: { transactionHash }, - userOpHash, - success - } = await wait() - - expect(userOpHash).toBeTruthy() - expect(success).toBe("true") - expect(transactionHash).toBeTruthy() - - const balanceOfSAAfter = await checkBalance(smartAccountAddress) - const balanceOfRecipientAfter = await checkBalance(sender) - - expect(balanceOfSABefore - balanceOfSAAfter).toBe(1n) - expect(balanceOfRecipientAfter - balanceOfRecipientBefore).toBe(1n) - }, 25000) - - testOnlyOnOptimism( - "should mint an NFT on optimism with sponsorship", - async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address to) public"]), - functionName: "safeMint", - args: [recipient] - }) - - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - - const balance = await checkBalance(recipient, nftAddress) - - const maticBalanceBefore = await checkBalance(smartAccountAddress) - - const response = await smartAccount.sendTransaction(transaction, { - nonceOptions, - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - simulationType: "validation_and_execution" - }) - - const userOpReceipt = await response.wait(3) - expect(userOpReceipt.userOpHash).toBeTruthy() - expect(userOpReceipt.success).toBe("true") - - const maticBalanceAfter = await checkBalance(smartAccountAddress) - expect(maticBalanceAfter).toEqual(maticBalanceBefore) - const newBalance = (await checkBalance(recipient, nftAddress)) as bigint - - expect(newBalance - balance).toBe(1n) - }, - 50000 - ) - - test("should withdraw nativeToken and an erc20 token", async () => { - const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - - await nonZeroBalance(smartAccountAddress, token) - await nonZeroBalance(smartAccountAddress) - - const balanceOfSABefore = await checkBalance(smartAccountAddress) - const balanceOfRecipientBefore = await checkBalance(sender) - const tokenBalanceOfSABefore = await checkBalance( - smartAccountAddress, - token - ) - const tokenBalanceOfRecipientBefore = await checkBalance(sender, token) - - const { wait } = await smartAccount.withdraw( - [ - { address: token, amount: BigInt(1) }, - { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } - ], - sender, - { nonceOptions, paymasterServiceData: { mode: PaymasterMode.SPONSORED } } - ) - - const { - receipt: { transactionHash }, - userOpHash, - success - } = await wait() - - expect(userOpHash).toBeTruthy() - expect(success).toBe("true") - expect(transactionHash).toBeTruthy() - - const balanceOfSAAfter = await checkBalance(smartAccountAddress) - const balanceOfRecipientAfter = await checkBalance(sender) - const tokenBalanceOfSAAfter = await checkBalance(smartAccountAddress, token) - const tokenBalanceOfRecipientAfter = await checkBalance(sender, token) - - expect(balanceOfSABefore - balanceOfSAAfter).toBe(1n) - expect(balanceOfRecipientAfter - balanceOfRecipientBefore).toBe(1n) - - expect(tokenBalanceOfSAAfter - tokenBalanceOfSABefore).toBe(-1n) - expect(tokenBalanceOfRecipientAfter - tokenBalanceOfRecipientBefore).toBe( - 1n - ) - }, 60000) - - test("should withdraw all native token", async () => { - await nonZeroBalance(smartAccountAddress) - const balanceOfSABefore = await checkBalance(smartAccountAddress) - const balanceOfRecipientBefore = await checkBalance(sender) - - const { wait } = await smartAccount.withdraw( - [] /* null or undefined or [] */, - sender, - { - nonceOptions, - paymasterServiceData: { mode: PaymasterMode.SPONSORED } // Will leave no dust - } - ) - - const { - receipt: { transactionHash }, - userOpHash, - success - } = await wait() - - expect(userOpHash).toBeTruthy() - expect(success).toBe("true") - expect(transactionHash).toBeTruthy() - - const balanceOfSAAfter = await checkBalance(smartAccountAddress) - const balanceOfRecipientAfter = await checkBalance(sender) - - expect(balanceOfSAAfter).toBe(0n) - expect(balanceOfRecipientAfter).toBe( - balanceOfSABefore + balanceOfRecipientBefore - ) - - // Teardown: send back the native token to the smart account - const teardownHash = await walletClient.sendTransaction({ - to: smartAccountAddress, - value: balanceOfSABefore, - account, - chain - }) - expect(teardownHash).toBeTruthy() - }, 60000) -}) diff --git a/tests/playground/read.test.ts b/tests/playground/read.test.ts deleted file mode 100644 index c754b00f5..000000000 --- a/tests/playground/read.test.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { http, type Hex, createPublicClient, createWalletClient } from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { beforeAll, describe, expect, test } from "vitest" -import { - type BiconomySmartAccountV2, - createSmartAccountClient -} from "../../src/account" -import { getConfig } from "../utils" - -describe("Playground:Read", () => { - const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const { - chain, - chainId, - privateKey, - privateKeyTwo, - bundlerUrl, - paymasterUrl - } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - const sender = account.address - const recipient = accountTwo.address - const publicClient = createPublicClient({ - chain, - transport: http() - }) - let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] - let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] - - const [walletClient, walletClientTwo] = [ - createWalletClient({ - account, - chain, - transport: http() - }), - createWalletClient({ - account: accountTwo, - chain, - transport: http() - }) - ] - - beforeAll(async () => { - ;[smartAccount, smartAccountTwo] = await Promise.all( - [walletClient, walletClientTwo].map((client) => - createSmartAccountClient({ - chainId, - signer: client, - bundlerUrl, - paymasterUrl - }) - ) - ) - ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( - [smartAccount, smartAccountTwo].map((account) => - account.getAccountAddress() - ) - ) - }) - - test.concurrent( - "should quickly run a read test in the playground ", - async () => { - const addresses = await Promise.all([ - walletClient.account.address, - smartAccountAddress, - walletClientTwo.account.address, - smartAccountAddressTwo - ]) - expect(addresses.every(Boolean)).toBe(true) - }, - 30000 - ) -}) diff --git a/tests/playground/write.test.ts b/tests/playground/write.test.ts deleted file mode 100644 index 963eaa6d7..000000000 --- a/tests/playground/write.test.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { http, type Hex, createPublicClient, createWalletClient } from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { beforeAll, describe, expect, test } from "vitest" -import { - type BiconomySmartAccountV2, - createSmartAccountClient -} from "../../src/account" -import { getConfig } from "../utils" - -describe("Playground:Write", () => { - const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const { - chain, - chainId, - privateKey, - privateKeyTwo, - bundlerUrl, - paymasterUrl - } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - const sender = account.address - const recipient = accountTwo.address - const publicClient = createPublicClient({ - chain, - transport: http() - }) - let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] - let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] - - const [walletClient, walletClientTwo] = [ - createWalletClient({ - account, - chain, - transport: http() - }), - createWalletClient({ - account: accountTwo, - chain, - transport: http() - }) - ] - - beforeAll(async () => { - ;[smartAccount, smartAccountTwo] = await Promise.all( - [walletClient, walletClientTwo].map((client) => - createSmartAccountClient({ - chainId, - signer: client, - bundlerUrl, - paymasterUrl - }) - ) - ) - ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( - [smartAccount, smartAccountTwo].map((account) => - account.getAccountAddress() - ) - ) - }) - - test.concurrent( - "should quickly run a write test in the playground ", - async () => { - const addresses = await Promise.all([ - walletClient.account.address, - smartAccountAddress, - walletClientTwo.account.address, - smartAccountAddressTwo - ]) - expect(addresses.every(Boolean)).toBe(true) - }, - 30000 - ) -}) diff --git a/tests/vitest.config.ts b/tests/vitest.config.ts index bc3f78afb..d7dd2a794 100644 --- a/tests/vitest.config.ts +++ b/tests/vitest.config.ts @@ -10,10 +10,6 @@ export default defineConfig({ ? ["json-summary", "json"] : ["text", "json", "html"], exclude: [ - "**/tests/bundler", - "**/tests/modules", - "**/tests/paymaster", - "**/tests/playground", "**/errors/utils.ts", "**/_cjs/**", "**/_esm/**", From c74a61225e09a983c106f7364ba81d09155d21bc Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Fri, 14 Jun 2024 13:48:33 +0300 Subject: [PATCH 1199/1247] feat: install & uninstall module --- src/account/BiconomySmartAccountV2.ts | 81 ++++++++++++------- src/account/abi/SmartAccount.ts | 2 +- tests/account/read.test.ts | 5 +- tests/account/write.test.ts | 111 +++++++++++++++++++++----- 4 files changed, 145 insertions(+), 54 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 6239bf7bc..9f5bf5b3f 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -6,9 +6,11 @@ import { type Hash, type Hex, type PublicClient, + type WalletClient, concat, concatHex, createPublicClient, + createWalletClient, decodeFunctionData, encodeAbiParameters, encodeFunctionData, @@ -21,9 +23,9 @@ import { pad, parseAbi, parseAbiParameters, - toBytes, - toHex + toBytes } from "viem" +import { toAccount } from "viem/accounts" import { Bundler, Executions, @@ -48,7 +50,7 @@ import { } from "../paymaster" import { Logger, - ModuleType, + type ModuleType, type SmartAccountSigner, type StateOverrideSet, type UserOperationStruct, @@ -56,8 +58,7 @@ import { getChain } from "./" import { BaseSmartContractAccount } from "./BaseSmartContractAccount.js" -import { AccountResolverAbi } from "./abi/AccountResolver.js" -import { BiconomyAccountAbi } from "./abi/SmartAccount.js" +import { NexusAccountAbi } from "./abi/SmartAccount.js" import { ADDRESS_ZERO, BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, @@ -109,8 +110,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { bundler?: IBundler private accountContract?: GetContractReturnType< - typeof BiconomyAccountAbi, - PublicClient + typeof NexusAccountAbi, + PublicClient | WalletClient > private defaultFallbackHandlerAddress: Hex @@ -717,12 +718,12 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } async _getAccountContract(): Promise< - GetContractReturnType<typeof BiconomyAccountAbi, PublicClient> + GetContractReturnType<typeof NexusAccountAbi, PublicClient> > { if (this.accountContract == null) { this.accountContract = getContract({ address: await this.getAddress(), - abi: BiconomyAccountAbi, + abi: NexusAccountAbi, client: this.provider as PublicClient }) } @@ -944,7 +945,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ): Hex { const moduleAddressToUse = moduleAddress ?? (this.activeValidationModule.getAddress() as Hex) - console.log("moduleAddressToUse: ", moduleAddressToUse) return encodeAbiParameters(parseAbiParameters("bytes, address"), [ moduleSignature, moduleAddressToUse @@ -1215,8 +1215,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { delete userOp.signature const userOperation = await this.signUserOp(userOp, params) - console.log(userOp, "userOp 213") - const bundlerResponse = await this.sendSignedUserOp( userOperation, params?.simulationType @@ -1265,11 +1263,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async getUserOpHash(userOp: Partial<UserOperationStruct>): Promise<Hex> { const packedUserOp = packUserOp(userOp, true) - console.log( - this.entryPoint.address, - BigInt(this.chainId), - "ARGUMENTS FOR USER OP HASH" - ) const userOpHash = keccak256(packedUserOp as Hex) const enc = encodeAbiParameters( parseAbiParameters("bytes32, address, uint256"), @@ -1295,7 +1288,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // if neither user sent gas fee nor the bundler, estimate gas from provider if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { - console.log("Using provider to estimate gas") const feeData = await this.provider.estimateFeesPerGas() if (feeData.maxFeePerGas?.toString()) { finalUserOp.maxFeePerGas = feeData.maxFeePerGas @@ -1669,7 +1661,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // return userOp // } - // get gas fee values from bundler const gasFeeValues: GetUserOperationGasPriceReturnType | undefined = await this.bundler?.getGasFeeValues() @@ -1813,7 +1804,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } const decodedSmartAccountData = decodeFunctionData({ - abi: BiconomyAccountAbi, + abi: NexusAccountAbi, data: (userOp.callData as Hex) ?? "0x" }) @@ -2023,7 +2014,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { signature: Hex ): Promise<Hex> { return encodeFunctionData({ - abi: BiconomyAccountAbi, + abi: NexusAccountAbi, functionName: "isValidSignature", args: [messageHash, signature] }) @@ -2037,7 +2028,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async getEnableModuleData(moduleAddress: Hex): Promise<Transaction> { const callData = encodeFunctionData({ - abi: BiconomyAccountAbi, + abi: NexusAccountAbi, functionName: "enableModule", args: [moduleAddress] }) @@ -2054,7 +2045,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { moduleSetupData: Hex ): Promise<Transaction> { const callData = encodeFunctionData({ - abi: BiconomyAccountAbi, + abi: NexusAccountAbi, functionName: "setupAndEnableModule", args: [moduleAddress, moduleSetupData] }) @@ -2080,7 +2071,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { moduleAddress: Hex ): Promise<Transaction> { const callData = encodeFunctionData({ - abi: BiconomyAccountAbi, + abi: NexusAccountAbi, functionName: "disableModule", args: [prevModule, moduleAddress] }) @@ -2092,21 +2083,49 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return tx } - async isModuleInstalled(moduleAddress: Hex): Promise<any> { + async isModuleInstalled( + moduleType: ModuleType, + moduleAddress: Hex, + data?: Hex + ): Promise<boolean> { const accountContract = await this._getAccountContract() return await accountContract.read.isModuleInstalled([ - ModuleType.Validation, + moduleType, moduleAddress, - toHex("0x") + data ?? "0x" ]) } - async installModule(moduleAddress: Hex): Promise<any> { - return true + async installModule( + moduleType: ModuleType, + moduleAddress: Hex, + data?: Hex + ): Promise<Hash> { + const installModuleData = encodeFunctionData({ + abi: NexusAccountAbi, + functionName: "installModule", + args: [moduleType, moduleAddress, data ?? "0x"] + }) + return await this.sendTransaction({ + to: await this.getAddress(), + data: installModuleData + }) } - async uninstallModule(moduleAddress: Hex): Promise<any> { - return true + async uninstallModule( + moduleType: ModuleType, + moduleAddress: Hex, + deInitData?: Hex + ): Promise<Hash> { + const uninstallModuleData = encodeFunctionData({ + abi: NexusAccountAbi, + functionName: "uninstallModule", + args: [moduleType, moduleAddress, deInitData ?? "0x"] + }) + return await this.sendTransaction({ + to: await this.getAddress(), + data: uninstallModuleData + }) } // Review diff --git a/src/account/abi/SmartAccount.ts b/src/account/abi/SmartAccount.ts index 02bb54892..b459aca92 100644 --- a/src/account/abi/SmartAccount.ts +++ b/src/account/abi/SmartAccount.ts @@ -1,4 +1,4 @@ -export const BiconomyAccountAbi = [ +export const NexusAccountAbi = [ { inputs: [ { diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index 73432f5bf..62de2aa6b 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -30,7 +30,6 @@ import { import { type UserOperationStruct, getChain } from "../../src/account" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" import { BiconomyFactoryAbi } from "../../src/account/abi/K1ValidatorFactory" -import { BiconomyAccountAbi } from "../../src/account/abi/SmartAccount" import { DEFAULT_SESSION_KEY_MANAGER_MODULE, createECDSAOwnershipValidationModule @@ -721,7 +720,7 @@ describe("Account:Read", () => { // const response = await publicClient.readContract({ // address: await smartAccount.getAccountAddress(), - // abi: BiconomyAccountAbi, + // abi: NexusAccountAbi, // functionName: "isValidSignature", // args: [messageHash, signature] // }) @@ -750,7 +749,7 @@ describe("Account:Read", () => { // const response = await publicClient.readContract({ // address: await smartAccount.getAccountAddress(), - // abi: BiconomyAccountAbi, + // abi: NexusAccountAbi, // functionName: "isValidSignature", // args: [messageHash, signatureWithModuleAddress] // }) diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 4712c5d1e..b86180631 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -3,9 +3,14 @@ import { type Hex, createPublicClient, createWalletClient, + decodeFunctionData, + encodeAbiParameters, encodeFunctionData, getContract, - parseAbi + parseAbi, + stringToBytes, + toBytes, + toHex } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { arbitrumSepolia, baseSepolia, polygonAmoy } from "viem/chains" @@ -14,6 +19,8 @@ import { type BiconomySmartAccountV2, DEFAULT_ENTRYPOINT_ADDRESS, ERC20_ABI, + K1_VALIDATOR, + ModuleType, type TransferOwnershipCompatibleModule, createSmartAccountClient, getCustomChain, @@ -21,6 +28,7 @@ import { } from "../../src/account" import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" +import { NexusAccountAbi } from "../../src/account/abi/SmartAccount" import { PaymasterMode } from "../../src/paymaster" import { testOnlyOnOptimism } from "../setupFiles" import { @@ -115,24 +123,89 @@ describe("Account:Write", async () => { // expect(userOp).toBeTruthy() // }, 60000) - test("should mint an NFT and pay with ERC20 - with token", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const gasCost = await smartAccount.getGasEstimate([transaction]) - console.log(gasCost, "gasCost") - - const userOpHash = await smartAccount.sendTransaction([transaction]) - console.log(userOpHash, "userOpHash") - - expect(userOpHash).toBeTruthy() - }, 60000) + // test("should mint an NFT without a paymaster", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall + // } + // const gasCost = await smartAccount.getGasEstimate([transaction]) + // console.log(gasCost, "gasCost") + + // const userOpHash = await smartAccount.sendTransaction([transaction]) + + // expect(userOpHash).toBeTruthy() + // }, 60000) + + test.sequential( + "should install a dummy K1Validator module", + async () => { + const newK1ValidatorContract = + "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + await smartAccount.installModule( + ModuleType.Validation, + newK1ValidatorContract, + account.address + ) + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + newK1ValidatorContract + ) + console.log(isInstalled) + expect(isInstalled).toBeFalsy() + }, + 60000 + ) + + test.sequential( + "should uninstall K1Validator module", + async () => { + const newK1ValidatorContract = + "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + const isModuleInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + newK1ValidatorContract + ) + console.log("isModuleInstalled", isModuleInstalled) + + const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + const deInitData = encodeAbiParameters( + [ + { name: "prev", type: "address" }, + { name: "disableModuleData", type: "bytes" } + ], + [prevAddress, toHex(stringToBytes(""))] + ) + const isUninstalledHash = await smartAccount.uninstallModule( + ModuleType.Validation, + newK1ValidatorContract, + deInitData + ) + const isInstalledHash = await smartAccount.isModuleInstalled( + ModuleType.Validation, + newK1ValidatorContract + ) + + console.log(isInstalledHash) + console.log(isUninstalledHash) + + expect(isInstalledHash).toBeTruthy() + expect(isUninstalledHash).toBeTruthy() + }, + 60000 + ) + + // test("should install K1Validator module", async () => { + // const isUninstalled = await smartAccount.uninstallModule(ModuleType.Validation, K1_VALIDATOR) + // const isInstalled = await smartAccount.isModuleInstalled(ModuleType.Validation, K1_VALIDATOR) + + // expect(isInstalled).toBeFalsy() + // expect(isUninstalled).toBeTruthy() + // }, 60000) // test.skip("should test the nonce on arbSepolia", async () => { // const chain = arbitrumSepolia From 78b73276fca5868b821f2258d37f06272730178e Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Mon, 17 Jun 2024 11:21:29 +0300 Subject: [PATCH 1200/1247] feat: added batch execution, wait() for receipt, account modes ++ --- src/account/BiconomySmartAccountV2.ts | 59 +- src/bundler/Bundler.ts | 69 ++- src/bundler/interfaces/IBundler.ts | 5 +- src/bundler/utils/Constants.ts | 42 +- src/bundler/utils/Types.ts | 50 +- tests/account/read.test.ts | 35 +- tests/account/write.test.ts | 859 +++++--------------------- 7 files changed, 365 insertions(+), 754 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 9f5bf5b3f..63a3b94ff 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -1,4 +1,5 @@ -import { zeroPadBytes } from "ethers" +import type { UserOpResponse } from "@biconomy/account" +import { ParamType, ethers, zeroPadBytes } from "ethers" import { http, type Address, @@ -861,15 +862,32 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async encodeExecuteBatch(transactions: Transaction[]): Promise<Hex> { // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; const mode = EXECUTE_BATCH - - const executionCalldata = encodePacked([Executions], [transactions]) - // Encode a simple call + // TODO: Use viem instead of ethers + const execution = ParamType.from({ + type: "tuple(address,uint256,bytes)[]", + baseType: "tuple", + name: "executions", + arrayLength: null, + components: [ + { name: "target", type: "address" }, + { name: "value", type: "uint256" }, + { name: "callData", type: "bytes" }, + ], + }); + let execs: { target: Hex, value: bigint, callData: Hex }[] = []; + transactions.forEach((tx) => { + execs.push({target: tx.to as Hex, callData: (tx.data ?? "0x") as Hex, value: BigInt(tx.value ?? 0n)}) + }) + const executionCalldataPrep = ethers.AbiCoder.defaultAbiCoder().encode( + [Executions], + [execs], + ) as Hex return encodeFunctionData({ abi: parseAbi([ "function execute(bytes32 mode, bytes calldata executionCalldata) external" ]), functionName: "execute", - args: [mode, executionCalldata] + args: [mode, executionCalldataPrep] }) } @@ -1210,7 +1228,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async sendUserOp( userOp: Partial<UserOperationStruct>, params?: SendUserOpParams - ): Promise<Hash> { + ): Promise<UserOpResponse> { // biome-ignore lint/performance/noDelete: <explanation> delete userOp.signature const userOperation = await this.signUserOp(userOp, params) @@ -1233,7 +1251,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async sendSignedUserOp( userOp: UserOperationStruct, simulationType?: SimulationType - ): Promise<Hash> { + ): Promise<UserOpResponse> { // TODO REMOVE COMMENT AND CHECK FOR PIMLICO USER OP FIELDS // const requiredFields: UserOperationKey[] = [ // "sender", @@ -1254,10 +1272,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // "userOp being sent to the bundler", // JSON.stringify(userOp, null, 2) // ) - const bundlerResponse = await this.bundler.sendUserOp( - userOp, - simulationType - ) + const bundlerResponse = await this.bundler.sendUserOp(userOp) return bundlerResponse } @@ -1490,7 +1505,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { async sendTransaction( manyOrOneTransactions: Transaction | Transaction[], buildUseropDto?: BuildUserOpOptions - ): Promise<Hash> { + ): Promise<UserOpResponse> { const userOp = await this.buildUserOp( Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions @@ -2020,7 +2035,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { }) } - async enableModule(moduleAddress: Hex): Promise<Hash> { + async enableModule(moduleAddress: Hex): Promise<UserOpResponse> { const tx: Transaction = await this.getEnableModuleData(moduleAddress) const partialUserOp = await this.buildUserOp([tx]) return this.sendUserOp(partialUserOp) @@ -2057,7 +2072,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return tx } - async disableModule(prevModule: Hex, moduleAddress: Hex): Promise<Hash> { + async disableModule( + prevModule: Hex, + moduleAddress: Hex + ): Promise<UserOpResponse> { const tx: Transaction = await this.getDisableModuleData( prevModule, moduleAddress @@ -2087,7 +2105,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { moduleType: ModuleType, moduleAddress: Hex, data?: Hex - ): Promise<boolean> { + ): Promise<any> { const accountContract = await this._getAccountContract() return await accountContract.read.isModuleInstalled([ moduleType, @@ -2100,7 +2118,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { moduleType: ModuleType, moduleAddress: Hex, data?: Hex - ): Promise<Hash> { + ): Promise<UserOpResponse> { const installModuleData = encodeFunctionData({ abi: NexusAccountAbi, functionName: "installModule", @@ -2116,7 +2134,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { moduleType: ModuleType, moduleAddress: Hex, deInitData?: Hex - ): Promise<Hash> { + ): Promise<UserOpResponse> { const uninstallModuleData = encodeFunctionData({ abi: NexusAccountAbi, functionName: "uninstallModule", @@ -2128,6 +2146,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { }) } + async supportsExecutionMode( + mode: Hex + ): Promise<boolean> { + const accountContract = await this._getAccountContract() + return await accountContract.read.supportsExecutionMode([mode]) as boolean; + } + // Review // async getAllModules(pageSize?: number): Promise<Array<string>> { // const _pageSize = pageSize ?? 100 diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index 0e3c0bc6f..0992e5f86 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -1,7 +1,7 @@ import { http, type Hash, type PublicClient, createPublicClient } from "viem" import type { StateOverrideSet, UserOperationStruct } from "../account" import type { SimulationType } from "../account" -import { HttpMethod, getChain, sendRequest } from "../account" +import { HttpMethod, getChain, isNullOrUndefined, sendRequest } from "../account" import type { IBundler } from "./interfaces/IBundler.js" import { DEFAULT_ENTRYPOINT_ADDRESS, @@ -108,7 +108,7 @@ export class Bundler implements IBundler { // const userOp = transformUserOP(_userOp) const bundlerUrl = this.getBundlerUrl() - const response: { result: BundlerEstimateUserOpGasResponse } = + const response: { result: BundlerEstimateUserOpGasResponse, error: { message: string } } = await sendRequest( { url: bundlerUrl, @@ -136,6 +136,10 @@ export class Bundler implements IBundler { } } + if(isNullOrUndefined(response.result)) { + throw new Error(`Error from Bundler: ${JSON.stringify(response?.error?.message)}`) + } + return { preVerificationGas: BigInt(response.result.preVerificationGas || 0), verificationGasLimit: BigInt(response.result.verificationGasLimit || 0), @@ -156,10 +160,8 @@ export class Bundler implements IBundler { * @description This function will send signed userOp to bundler to get mined on chain * @returns Promise<UserOpResponse> */ - async sendUserOp( - _userOp: UserOperationStruct, - simulationParam?: SimulationType - ): Promise<Hash> { + async sendUserOp(_userOp: UserOperationStruct): Promise<UserOpResponse> { + const chainId = this.bundlerConfig.chainId const params = [deepHexlify(_userOp), this.bundlerConfig.entryPointAddress] const bundlerUrl = this.getBundlerUrl() const sendUserOperationResponse: { result: Hash } = await sendRequest( @@ -176,9 +178,60 @@ export class Bundler implements IBundler { "Bundler" ) - console.log(sendUserOperationResponse) + return { + userOpHash: sendUserOperationResponse.result, + wait: (confirmations?: number): Promise<UserOpReceipt> => { + // Note: maxDuration can be defined per chainId + const maxDuration = + this.UserOpReceiptMaxDurationIntervals[chainId] || 30000 // default 30 seconds + let totalDuration = 0 - return sendUserOperationResponse.result + return new Promise<UserOpReceipt>((resolve, reject) => { + const intervalValue = this.UserOpReceiptIntervals[chainId] || 5000 // default 5 seconds + const intervalId = setInterval(async () => { + try { + const userOpResponse = await this.getUserOpReceipt( + sendUserOperationResponse.result + ) + if (userOpResponse?.receipt?.blockNumber) { + if (confirmations) { + const latestBlock = await this.provider.getBlockNumber() + const confirmedBlocks = + latestBlock - userOpResponse.receipt.blockNumber + if (confirmations >= confirmedBlocks) { + clearInterval(intervalId) + resolve(userOpResponse) + return + } + } else { + clearInterval(intervalId) + resolve(userOpResponse) + return + } + } + } catch (error) { + clearInterval(intervalId) + reject(error) + return + } + + totalDuration += intervalValue + if (totalDuration >= maxDuration) { + clearInterval(intervalId) + reject( + new Error( + `Exceeded maximum duration (${ + maxDuration / 1000 + } sec) waiting to get receipt for userOpHash ${ + sendUserOperationResponse.result + }. Try getting the receipt manually using eth_getUserOperationReceipt rpc method on bundler` + ) + ) + } + }, intervalValue) + }) + } + } } /** diff --git a/src/bundler/interfaces/IBundler.ts b/src/bundler/interfaces/IBundler.ts index c90efc926..8b997ab5a 100644 --- a/src/bundler/interfaces/IBundler.ts +++ b/src/bundler/interfaces/IBundler.ts @@ -15,10 +15,7 @@ export interface IBundler { _userOp: Partial<UserOperationStruct>, stateOverrideSet?: StateOverrideSet ): Promise<UserOpGasResponse> - sendUserOp( - _userOp: UserOperationStruct, - _simulationType?: SimulationType - ): Promise<Hash> + sendUserOp(_userOp: UserOperationStruct): Promise<UserOpResponse> getUserOpReceipt(_userOpHash: string): Promise<UserOpReceipt> getUserOpByHash(_userOpHash: string): Promise<UserOpByHashResponse> getGasFeeValues(): Promise<GetUserOperationGasPriceReturnType> diff --git a/src/bundler/utils/Constants.ts b/src/bundler/utils/Constants.ts index 8f0a36b46..c377dfd96 100644 --- a/src/bundler/utils/Constants.ts +++ b/src/bundler/utils/Constants.ts @@ -1,8 +1,10 @@ -import { concat } from "viem" +import { concat, pad, toHex } from "viem" import { CALLTYPE_BATCH, CALLTYPE_SINGLE, EXECTYPE_DEFAULT, + EXECTYPE_DELEGATE, + EXECTYPE_TRY, MODE_DEFAULT, MODE_PAYLOAD, UNUSED @@ -56,3 +58,41 @@ export const EXECUTE_BATCH = concat([ UNUSED, MODE_PAYLOAD ]) + +export const ACCOUNT_MODES = { + DEFAULT_SINGLE: concat([ + pad(EXECTYPE_DEFAULT, {size: 1}), + pad(CALLTYPE_SINGLE, {size: 1}), + pad(UNUSED, {size: 4}), + pad(MODE_DEFAULT, {size: 4}), + pad(MODE_PAYLOAD, {size: 22}) + ]), + DEFAULT_BATCH: concat([ + pad(EXECTYPE_DEFAULT, {size: 1}), + pad(CALLTYPE_BATCH, {size: 1}), + pad(UNUSED, {size: 4}), + pad(MODE_DEFAULT, {size: 4}), + pad(MODE_PAYLOAD, {size: 22}) + ]), + TRY_BATCH: concat([ + pad(EXECTYPE_TRY, {size: 1}), + pad(CALLTYPE_BATCH, {size: 1}), + pad(UNUSED, {size: 4}), + pad(MODE_DEFAULT, {size: 4}), + pad(MODE_PAYLOAD, {size: 22}) + ]), + TRY_SINGLE: concat([ + pad(EXECTYPE_TRY, {size: 1}), + pad(CALLTYPE_SINGLE, {size: 1}), + pad(UNUSED, {size: 4}), + pad(MODE_DEFAULT, {size: 4}), + pad(MODE_PAYLOAD, {size: 22}) + ]), + DELEGATE_SINGLE: concat([ + pad(EXECTYPE_DELEGATE, {size: 1}), + pad(CALLTYPE_SINGLE, {size: 1}), + pad(UNUSED, {size: 4}), + pad(MODE_DEFAULT, {size: 4}), + pad(MODE_PAYLOAD, {size: 22}) + ]) +} \ No newline at end of file diff --git a/src/bundler/utils/Types.ts b/src/bundler/utils/Types.ts index a18a7d9f0..ee0f811c3 100644 --- a/src/bundler/utils/Types.ts +++ b/src/bundler/utils/Types.ts @@ -1,5 +1,5 @@ import { ParamType } from "ethers" -import type { Chain, Hex } from "viem" +import type { Address, Chain, Hash, Hex, Log } from "viem" import type { UserOperationStruct } from "../../account" export type Bundlerconfig = { @@ -18,25 +18,33 @@ export type Bundlerconfig = { } export type BundlerConfigWithChainId = Bundlerconfig & { chainId: number } +export type TStatus = "success" | "reverted" + export type UserOpReceipt = { - /* The request hash of the UserOperation. */ - userOpHash: string - /* The entry point address used for the UserOperation. */ - entryPoint: string - /* The paymaster used for this UserOperation (or empty). */ - paymaster: string - /* The actual amount paid (by account or paymaster) for this UserOperation. */ - actualGasCost: Hex - /* The total gas used by this UserOperation (including preVerification, creation, validation, and execution). */ - actualGasUsed: Hex - /* Indicates whether the execution completed without reverting. */ - success: "true" | "false" - /* In case of revert, this is the revert reason. */ - reason: string - /* The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle). */ - logs: Array<any> // The logs generated by this UserOperation (not including logs of other UserOperations in the same bundle) - /* The TransactionReceipt object for the entire bundle, not only for this UserOperation. */ - receipt: any + userOpHash: Hash + entryPoint: Address + sender: Address + nonce: bigint + paymaster?: Address + actualGasUsed: bigint + actualGasCost: bigint + success: boolean + reason?: string + receipt: { + transactionHash: Hex + transactionIndex: bigint + blockHash: Hash + blockNumber: bigint + from: Address + to: Address | null + cumulativeGasUsed: bigint + status: TStatus + gasUsed: bigint + contractAddress: Address | null + logsBloom: Hex + effectiveGasPrice: bigint + } + logs: Log[] } // review @@ -70,10 +78,8 @@ export type SendUserOpResponse = { } export type UserOpResponse = { - userOpHash: string + userOpHash: Hash wait(_confirmations?: number): Promise<UserOpReceipt> - // Review: waitForTxHash(): vs waitForTxHash?(): - waitForTxHash(): Promise<UserOpStatus> } // Converted to JsonRpcResponse with strict type diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index 62de2aa6b..e3d071864 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -25,7 +25,8 @@ import { NATIVE_TOKEN_ALIAS, compareChainIds, createSmartAccountClient, - isNullOrUndefined + isNullOrUndefined, + ModuleType } from "../../src/account" import { type UserOperationStruct, getChain } from "../../src/account" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" @@ -36,6 +37,7 @@ import { } from "../../src/modules" import { Paymaster, PaymasterMode } from "../../src/paymaster" import { checkBalance, getBundlerUrl, getConfig } from "../utils" +import { ACCOUNT_MODES } from "../../src/bundler/utils/Constants" describe("Account:Read", () => { const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" @@ -187,7 +189,7 @@ describe("Account:Read", () => { test.concurrent( "should check if module is enabled on the smart account", async () => { - const isEnabled = await smartAccount.isModuleInstalled(K1_VALIDATOR) + const isEnabled = await smartAccount.isModuleInstalled(ModuleType.Validation, K1_VALIDATOR) expect(isEnabled).toBeTruthy() }, 30000 @@ -866,4 +868,33 @@ describe("Account:Read", () => { // await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() // } // ) + + test.concurrent("Should verify supported modes", async () => { + expect( + await smartAccount.supportsExecutionMode( + ACCOUNT_MODES.DEFAULT_SINGLE + ), + ).to.be.true; + expect( + await smartAccount.supportsExecutionMode( + ACCOUNT_MODES.DEFAULT_BATCH + ), + ).to.be.true; + expect( + await smartAccount.supportsExecutionMode( + ACCOUNT_MODES.TRY_BATCH + ), + ).to.be.true; + expect( + await smartAccount.supportsExecutionMode( + ACCOUNT_MODES.TRY_SINGLE + ), + ).to.be.true; + + expect( + await smartAccount.supportsExecutionMode( + ACCOUNT_MODES.DELEGATE_SINGLE + ), + ).to.be.false; + }) }) diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index b86180631..f23b373f0 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -10,7 +10,8 @@ import { parseAbi, stringToBytes, toBytes, - toHex + toHex, + Address } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { arbitrumSepolia, baseSepolia, polygonAmoy } from "viem/chains" @@ -38,6 +39,7 @@ import { nonZeroBalance, topUp } from "../utils" +import { UserOpReceipt, UserOpResponse } from "../../src" describe("Account:Write", async () => { const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } @@ -75,708 +77,165 @@ describe("Account:Write", async () => { }) ] - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl: - "https://api.pimlico.io/v2/84532/rpc?apikey=22c48af7-4886-4c7d-8d4c-5d50262a23f3" - // accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" - }) - - // const firstOwner = account.address - // const newOwner = accountTwo.address - - // let _smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl - // // accountAddress: "0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC" - // }) - - // beforeAll(async () => { - // ;[smartAccount, smartAccountTwo] = await Promise.all( - // [walletClient, walletClientTwo].map((client) => - // createSmartAccountClient({ - // chainId, - // signer: client, - // bundlerUrl, - // paymasterUrl - // }) - // ) - // ) - // ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( - // [smartAccount, smartAccountTwo].map((account) => - // account.getAccountAddress() - // ) - // ) - // }) - - // test("Build a user op with pimlico bundler", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall - // } - // const userOp = await smartAccount.buildUserOp([transaction]); - // expect(userOp).toBeTruthy() - // }, 60000) - - // test("should mint an NFT without a paymaster", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall - // } - // const gasCost = await smartAccount.getGasEstimate([transaction]) - // console.log(gasCost, "gasCost") - - // const userOpHash = await smartAccount.sendTransaction([transaction]) - - // expect(userOpHash).toBeTruthy() - // }, 60000) - - test.sequential( - "should install a dummy K1Validator module", - async () => { - const newK1ValidatorContract = - "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - await smartAccount.installModule( - ModuleType.Validation, - newK1ValidatorContract, - account.address + let smartAccount: BiconomySmartAccountV2, smartAccountTwo: BiconomySmartAccountV2; + let smartAccountAddress: Address, smartAccountAddressTwo: Address; + + beforeAll(async () => { + ;[smartAccount, smartAccountTwo] = await Promise.all( + [walletClient, walletClientTwo].map((client) => + createSmartAccountClient({ + chainId, + signer: client, + bundlerUrl, + paymasterUrl + }) ) - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - newK1ValidatorContract + ) + ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( + [smartAccount, smartAccountTwo].map((account) => + account.getAccountAddress() ) - console.log(isInstalled) - expect(isInstalled).toBeFalsy() - }, - 60000 - ) + ) + }) - test.sequential( - "should uninstall K1Validator module", - async () => { - const newK1ValidatorContract = - "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - const isModuleInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - newK1ValidatorContract - ) - console.log("isModuleInstalled", isModuleInstalled) + describe("Account:Basics", async () => { + test("Build a user op with pimlico bundler", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const userOp = await smartAccount.buildUserOp([transaction]); + expect(userOp).toBeTruthy() + }, 60000) + + test("Mint NFT - Single Call", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const gasCost = await smartAccount.getGasEstimate([transaction]) + console.log(gasCost, "gasCost") + + const userOpHash = await smartAccount.sendTransaction([transaction]) + + expect(userOpHash).toBeTruthy() + }, 60000) + + test("Mint NFT's - Batch Call", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + value: 0n + } + const userOpResponse = await smartAccount.sendTransaction([transaction, transaction]) + const userOpReceipt: UserOpReceipt = await userOpResponse.wait() + console.log(userOpReceipt.userOpHash, "user op hash"); + + expect(userOpReceipt.success).toBe(true) + }, 60000) + + // test("Approve & Transfer - Batch Call", async () => { + // const approveCalldata = encodeFunctionData({ + // abi: parseAbi(["function approve(address spender, uint256 amount)"]), + // functionName: "approve", + // args: [smartAccountAddress, 10n] + // }) + // const transferCalldata = encodeFunctionData({ + // abi: parseAbi(["function transferFrom(address from, address to, uint256 amount)"]), + // functionName: "transferFrom", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall, + // value: 0n + // } + // const userOpResponse = await smartAccount.sendTransaction([transaction, transaction]) + // const userOpReceipt: UserOpReceipt = await userOpResponse.wait() + // console.log(userOpReceipt.userOpHash, "user op hash"); + + // expect(userOpReceipt.success).toBe(true) + // }, 60000) + }) - const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - const deInitData = encodeAbiParameters( - [ - { name: "prev", type: "address" }, - { name: "disableModuleData", type: "bytes" } - ], - [prevAddress, toHex(stringToBytes(""))] + describe("Account:Validation Module", async () => { + test( + "should install a dummy K1Validator module", + async () => { + const newK1ValidatorContract = + "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + const userOpResponse: UserOpResponse = await smartAccount.installModule( + ModuleType.Validation, + newK1ValidatorContract, + account.address + ) + const userOpReceipt = await userOpResponse.wait(); + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + newK1ValidatorContract + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeTruthy() + }, + 60000 ) - const isUninstalledHash = await smartAccount.uninstallModule( - ModuleType.Validation, - newK1ValidatorContract, - deInitData + + test( + "should uninstall dummy K1Validator module", + async () => { + const newK1ValidatorContract = + "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + + const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + const deInitData = encodeAbiParameters( + [ + { name: "prev", type: "address" }, + { name: "disableModuleData", type: "bytes" } + ], + [prevAddress, toHex(stringToBytes(""))] + ) + const userOpResponse = await smartAccount.uninstallModule( + ModuleType.Validation, + newK1ValidatorContract, + deInitData + ) + const userOpReceipt = await userOpResponse.wait(); + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + newK1ValidatorContract + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeFalsy() + expect(userOpReceipt).toBeTruthy() + }, + 60000 ) - const isInstalledHash = await smartAccount.isModuleInstalled( - ModuleType.Validation, - newK1ValidatorContract - ) - - console.log(isInstalledHash) - console.log(isUninstalledHash) - - expect(isInstalledHash).toBeTruthy() - expect(isUninstalledHash).toBeTruthy() - }, - 60000 - ) - - // test("should install K1Validator module", async () => { - // const isUninstalled = await smartAccount.uninstallModule(ModuleType.Validation, K1_VALIDATOR) - // const isInstalled = await smartAccount.isModuleInstalled(ModuleType.Validation, K1_VALIDATOR) - - // expect(isInstalled).toBeFalsy() - // expect(isUninstalled).toBeTruthy() - // }, 60000) - - // test.skip("should test the nonce on arbSepolia", async () => { - // const chain = arbitrumSepolia - // const account = privateKeyToAccount(`0x${privateKey}`) - // const signer = createWalletClient({ account, chain, transport: http() }) - // const smartAccount = await createSmartAccountClient({ - // signer, - // bundlerUrl: getBundlerUrl(chain.id) - // }) - - // const address = await smartAccount.getAccountAddress() - - // await nonZeroBalance(address) - - // const nonceBefore = await smartAccount.getNonce() - // const balanceOfRecipient = await checkBalance(recipient, undefined, chain) - - // const { wait } = await smartAccount.sendTransaction( - // { - // to: recipient, - // value: BigInt(1) - // }, - // { - // nonceOptions - // } - // ) - - // const result = await wait() - // const newBalanceOfRecipient = await checkBalance( - // recipient, - // undefined, - // chain - // ) - // const nonceAfter = await smartAccount.getNonce() - - // expect(result?.receipt?.transactionHash).toBeTruthy() - // expect(result.success).toBe("true") - // expect(newBalanceOfRecipient).toBeGreaterThan(balanceOfRecipient) - - // expect(nonceAfter - nonceBefore).toBe(1n) - // }, 10000) - - // test("should send some native token to recipient via the entrypoint", async () => { - // const balanceOfRecipient = await checkBalance(recipient) - - // // biome-ignore lint/style/useConst: <explanation> - // let userOp = await smartAccount.buildUserOp([ - // { - // to: recipient, - // value: 1n - // } - // ]) - - // userOp.signature = undefined - - // const signedUserOp = await smartAccount.signUserOp(userOp) - - // const entrypointContract = getContract({ - // address: DEFAULT_ENTRYPOINT_ADDRESS, - // abi: EntryPointAbi, - // client: { public: publicClient, wallet: walletClient } - // }) - - // const hash = await entrypointContract.write.handleOps([ - // [ - // { - // sender: signedUserOp.sender as Hex, - // nonce: BigInt(signedUserOp.nonce ?? 0), - // callGasLimit: BigInt(signedUserOp.callGasLimit ?? 0), - // verificationGasLimit: BigInt(signedUserOp.verificationGasLimit ?? 0), - // preVerificationGas: BigInt(signedUserOp.preVerificationGas ?? 0), - // maxFeePerGas: BigInt(signedUserOp.maxFeePerGas ?? 0), - // maxPriorityFeePerGas: BigInt(signedUserOp.maxPriorityFeePerGas ?? 0), - // initCode: signedUserOp.initCode as Hex, - // callData: signedUserOp.callData as Hex, - // paymasterAndData: signedUserOp.paymasterAndData as Hex, - // signature: signedUserOp.signature as Hex - // } - // ], - // sender - // ]) - - // const { status, transactionHash } = - // await publicClient.waitForTransactionReceipt({ hash }) - - // expect(status).toBe("success") - // expect(transactionHash).toBeTruthy() - - // const balanceOfRecipientAfter = await checkBalance(recipient) - - // expect(balanceOfRecipientAfter - balanceOfRecipient).toBe(1n) - // }, 50000) - - // test("should deploy a smart account with native token balance", async () => { - // const newPrivateKey = generatePrivateKey() - // const newAccount = privateKeyToAccount(newPrivateKey) - - // const newViemWallet = createWalletClient({ - // account: newAccount, - // chain, - // transport: http() - // }) - - // const newSmartAccount = await createSmartAccountClient({ - // signer: newViemWallet, - // paymasterUrl, - // bundlerUrl - // }) - - // const newSmartAccountAddress = await newSmartAccount.getAccountAddress() - - // // Setup: - // await topUp(newSmartAccountAddress, BigInt(100000000000000000)) - - // const balanceCheck = await checkBalance(newSmartAccountAddress) - - // // Test: - // const { wait } = await newSmartAccount.deploy() - // const { success } = await wait() - - // const byteCode = await publicClient.getBytecode({ - // address: newSmartAccountAddress - // }) - // expect(success).toBe("true") - // expect(byteCode).toBeTruthy() - // }, 60000) - - // test.concurrent( - // "should add a custom chain", - // async () => { - // const customChain = getCustomChain( - // "Amoy", - // polygonAmoy.id, - // polygonAmoy.rpcUrls.default.http[0], - // polygonAmoy.blockExplorers.default.url - // ) - - // const accountOne = privateKeyToAccount(`0x${privateKey}`) - // const walletClientWithCustomChain = createWalletClient({ - // account: accountOne, - // chain: customChain, - // transport: http() - // }) - - // const smartAccountCustomChain = await createSmartAccountClient({ - // signer: walletClientWithCustomChain, - // bundlerUrl, - // customChain - // }) - - // expect(smartAccountCustomChain.rpcProvider.transport.url).toBe( - // "https://rpc-amoy.polygon.technology" - // ) - // expect(walletClientWithCustomChain.chain).toEqual(customChain) - - // const { wait } = await smartAccountCustomChain.sendTransaction( - // { - // to: recipient, - // value: BigInt(1) - // }, - // { nonceOptions } - // ) - - // const { success, receipt } = await wait() - - // expect(receipt).toBeTruthy() - // expect(success).toBe("true") - // }, - // 80000 - // ) - - // testOnlyOnOptimism( - // "should send some native token to a recipient on optimism", - // async () => { - // const balanceOfRecipient = await checkBalance(recipient) - - // const { wait } = await smartAccount.sendTransaction( - // { - // to: recipient, - // value: BigInt(1) - // }, - // { nonceOptions, simulationType: "validation_and_execution" } - // ) - - // const result = await wait() - // const newBalanceOfRecipient = await checkBalance(recipient) - - // expect(result?.receipt?.transactionHash).toBeTruthy() - // expect(result.success).toBe("true") - // expect(newBalanceOfRecipient).toBeGreaterThan(balanceOfRecipient) - // }, - // 50000 - // ) - - // testOnlyOnOptimism( - // "should create a smart account with paymaster with an api key on optimism", - // async () => { - // const paymaster = smartAccount.paymaster - // expect(paymaster).not.toBeNull() - // expect(paymaster).not.toBeUndefined() - // } - // ) - - // test("should withdraw erc20 balances", async () => { - // await nonZeroBalance(smartAccountAddress, token) - - // const tokenBalanceOfSABefore = await checkBalance( - // smartAccountAddress, - // token - // ) - // const tokenBalanceOfRecipientBefore = await checkBalance(sender, token) - // const { wait } = await smartAccount.withdraw( - // [{ address: token, amount: BigInt(1), recipient: sender }], - // undefined, - // { - // nonceOptions, - // paymasterServiceData: { - // mode: PaymasterMode.SPONSORED - // } - // } - // ) - - // const { - // receipt: { transactionHash }, - // userOpHash, - // success - // } = await wait() - - // expect(userOpHash).toBeTruthy() - // expect(success).toBe("true") - // expect(transactionHash).toBeTruthy() - - // const tokenBalanceOfSAAfter = await checkBalance(smartAccountAddress, token) - // const tokenBalanceOfRecipientAfter = await checkBalance(sender, token) - - // expect(tokenBalanceOfSAAfter - tokenBalanceOfSABefore).toBe(-1n) - // expect(tokenBalanceOfRecipientAfter - tokenBalanceOfRecipientBefore).toBe( - // 1n - // ) - // }, 60000) - - // test("should mint an NFT and pay with ERC20 - with token", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall - // } - // const balance = await checkBalance(recipient, nftAddress) - // const nativeBalanceBefore = await checkBalance(smartAccountAddress) - // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - // const { wait } = await smartAccount.sendTransaction([transaction], { - // nonceOptions, - // paymasterServiceData: { - // mode: PaymasterMode.ERC20, - // preferredToken: token - // } - // }) - // const { - // receipt: { transactionHash }, - // userOpHash, - // success - // } = await wait() - // expect(transactionHash).toBeTruthy() - // expect(userOpHash).toBeTruthy() - // expect(success).toBe("true") - // const nativeBalanceAfter = await checkBalance(smartAccountAddress) - // expect(nativeBalanceAfter).toEqual(nativeBalanceBefore) - // const tokenBalanceAfter = await checkBalance(smartAccountAddress, token) - // expect(tokenBalanceAfter).toBeLessThan(tokenBalanceBefore) - // const newBalance = await checkBalance(recipient, nftAddress) - // expect(newBalance - balance).toBe(1n) - // }, 60000) - - // test("should mint an NFT and pay with ERC20 - with token selection and no maxApproval", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall - // } - // const feeQuotesResponse = await smartAccount.getTokenFees(transaction, { - // paymasterServiceData: { - // mode: PaymasterMode.ERC20, - // preferredToken: token - // } - // }) - // const selectedFeeQuote = feeQuotesResponse.feeQuotes?.[0] - // // biome-ignore lint/style/noNonNullAssertion: <explanation> - // const spender = feeQuotesResponse.tokenPaymasterAddress! - // const contract = getContract({ - // address: token, - // abi: parseAbi(ERC20_ABI), - // client: publicClient - // }) - - // const balance = await checkBalance(recipient, nftAddress) - // const nativeBalanceBefore = await checkBalance(smartAccountAddress) - // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - // const { wait } = await smartAccount.sendTransaction(transaction, { - // nonceOptions, - // paymasterServiceData: { - // mode: PaymasterMode.ERC20, - // feeQuote: selectedFeeQuote, - // spender: feeQuotesResponse.tokenPaymasterAddress - // } - // }) - // const { - // receipt: { transactionHash }, - // userOpHash, - // success - // } = await wait() - // expect(userOpHash).toBeTruthy() - // expect(success).toBe("true") - // expect(transactionHash).toBeTruthy() - // const nativeBalanceAfter = await checkBalance(smartAccountAddress) - // expect(nativeBalanceAfter).toEqual(nativeBalanceBefore) - // const tokenBalanceAfter = await checkBalance(smartAccountAddress, token) - // expect(tokenBalanceAfter).toBeLessThan(tokenBalanceBefore) - // const newBalance = await checkBalance(recipient, nftAddress) - // expect(newBalance - balance).toBe(1n) - // }, 60000) - - // test("should increment user op verificationGasLimit by 50%. Paymaster OFF", async () => { - // const transaction = { - // to: recipient, - // data: "0x" - // } - - // const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) - // const userOpWithOffset = await smartAccount.buildUserOp([transaction], { - // gasOffset: { - // verificationGasLimitOffsetPct: 50 // 50% increase - // } - // }) - - // const difference = Math.round( - // Number(userOpWithOffset.verificationGasLimit) - - // Number(userOpWithNoOffset.verificationGasLimit) - // ) - // const percentageValue = Math.round( - // percentage(difference, Number(userOpWithNoOffset.verificationGasLimit)) - // ) - - // expect(percentageValue).toBe(50) - // }, 60000) - - // test("should increment user op gas values. Paymaster OFF", async () => { - // const transaction = { - // to: recipient, - // data: "0x" - // } - - // const userOpWithNoOffset = await smartAccount.buildUserOp([transaction]) - // const userOpWithOffset = await smartAccount.buildUserOp([transaction], { - // gasOffset: { - // verificationGasLimitOffsetPct: 50, // 50% increase - // preVerificationGasOffsetPct: 100 // 100% increase - // } - // }) - - // const vglDifference = Math.round( - // Number(userOpWithOffset.verificationGasLimit) - - // Number(userOpWithNoOffset.verificationGasLimit) - // ) - // const cgllDifference = Math.round( - // Number(userOpWithOffset.callGasLimit) - - // Number(userOpWithNoOffset.callGasLimit) - // ) - // const pvgDifference = Math.round( - // Number(userOpWithOffset.preVerificationGas) - - // Number(userOpWithNoOffset.preVerificationGas) - // ) - - // const vglPercentageValue = Math.round( - // percentage(vglDifference, Number(userOpWithNoOffset.verificationGasLimit)) - // ) - // const cglPercentageValue = Math.round( - // percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) - // ) - // const pvgPercentageValue = Math.round( - // percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) - // ) - - // expect(vglPercentageValue).toBe(50) - // expect(cglPercentageValue).toBe(0) - // expect(pvgPercentageValue).toBe(100) - // }, 60000) - - // test("should increment user op gas values. Paymaster ON", async () => { - // const transaction = { - // to: recipient, - // data: "0x" - // } - - // const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { - // paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - // gasOffset: { - // verificationGasLimitOffsetPct: 0 // no increment but provided to avoid paymaster gas calculation (just for testing purposes) - // } - // }) // Passing gasOffset to avoid paymaster gas calculation - // const userOpWithOffset = await smartAccount.buildUserOp([transaction], { - // paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - // gasOffset: { - // verificationGasLimitOffsetPct: 13.2, // 13.2% increase - // preVerificationGasOffsetPct: 81 // 81% increase - // } - // }) - - // const vglDifference = Math.round( - // Number(userOpWithOffset.verificationGasLimit) - - // Number(userOpWithNoOffset.verificationGasLimit) - // ) - // const cgllDifference = Math.round( - // Number(userOpWithOffset.callGasLimit) - - // Number(userOpWithNoOffset.callGasLimit) - // ) - // const pvgDifference = Math.round( - // Number(userOpWithOffset.preVerificationGas) - - // Number(userOpWithNoOffset.preVerificationGas) - // ) - - // const vglPercentageValue = Math.round( - // percentage(vglDifference, Number(userOpWithNoOffset.verificationGasLimit)) - // ) - // const cglPercentageValue = Math.round( - // percentage(cgllDifference, Number(userOpWithNoOffset.callGasLimit)) - // ) - // const pvgPercentageValue = Math.round( - // percentage(pvgDifference, Number(userOpWithNoOffset.preVerificationGas)) - // ) - - // expect(vglPercentageValue).toBe(13) - // expect(cglPercentageValue).toBe(0) - // expect(pvgPercentageValue).toBe(81) - // }, 60000) - - // test("should throw if percentage given is bigger than 100. Paymaster ON", async () => { - // const transaction = { - // to: recipient, - // data: "0x" - // } - - // const userOpWithNoOffset = await smartAccount.buildUserOp([transaction], { - // paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - // gasOffset: { - // verificationGasLimitOffsetPct: 0 // no increment, just for testing purposes - // } - // }) // Passing gasOffset to avoid paymaster gas calculation - // const userOpWithOffset = smartAccount.buildUserOp([transaction], { - // paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - // gasOffset: { - // verificationGasLimitOffsetPct: 110 // 110% increase (not allowed) - // } - // }) - - // expect(userOpWithOffset).rejects.toThrowError( - // "The percentage value should be between 1 and 100." - // ) - // }, 60000) - - // test("should increment user op gas with no paymaster using sendTransaction", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall - // } - - // const { wait } = await smartAccount.sendTransaction(transaction, { - // nonceOptions, - // gasOffset: { - // verificationGasLimitOffsetPct: 10, // 10% increase - // preVerificationGasOffsetPct: 20, // 20% increase - // maxFeePerGasOffsetPct: 30, // 30% increase - // callGasLimitOffsetPct: 40, // 40% increase - // maxPriorityFeePerGasOffsetPct: 50 // 50% increase - // } - // }) - // const { - // receipt: { transactionHash }, - // userOpHash, - // success - // } = await wait() - - // expect(userOpHash).toBeTruthy() - // expect(success).toBe("true") - // }, 60000) - - // test.skip("should transfer ownership of smart account to accountTwo", async () => { - // const signerOfAccount = walletClient.account.address - // const ownerOfAccount = await publicClient.readContract({ - // address: DEFAULT_ECDSA_OWNERSHIP_MODULE, - // abi: ECDSAModuleAbi, - // functionName: "getOwner", - // args: [await _smartAccount.getAccountAddress()] - // }) - - // expect(ownerOfAccount).toBe(signerOfAccount) - // const response = await _smartAccount.transferOwnership( - // newOwner, - // DEFAULT_ECDSA_OWNERSHIP_MODULE as TransferOwnershipCompatibleModule, - // { - // paymasterServiceData: { mode: PaymasterMode.SPONSORED } - // } - // ) - // const receipt = await response.wait() - // expect(receipt.success).toBe("true") - // }, 50000) - - // test.skip("should revert transfer ownership with signer that is not the owner", async () => { - // _smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // paymasterUrl, - // bundlerUrl, - // accountAddress: smartAccountAddress - // }) - - // const signerOfAccount = walletClient.account.address - // const ownerOfAccount = await publicClient.readContract({ - // address: DEFAULT_ECDSA_OWNERSHIP_MODULE, - // abi: ECDSAModuleAbi, - // functionName: "getOwner", - // args: [await _smartAccount.getAccountAddress()] - // }) - - // expect(ownerOfAccount).not.toBe(signerOfAccount) - // expect( - // _smartAccount.transferOwnership( - // newOwner, - // DEFAULT_ECDSA_OWNERSHIP_MODULE as TransferOwnershipCompatibleModule, - // { - // paymasterServiceData: { mode: PaymasterMode.SPONSORED } - // } - // ) - // ).rejects.toThrowError() - // }, 50000) - - // test.skip("send an user op with the new owner", async () => { - // _smartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // paymasterUrl, - // bundlerUrl, - // accountAddress: smartAccountAddress - // }) - // const currentSmartAccountInstanceSigner = await _smartAccount - // .getSigner() - // .getAddress() - // expect(currentSmartAccountInstanceSigner).toBe(newOwner) - // const tx = { - // to: nftAddress, - // data: encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [smartAccountAddressTwo] - // }) - // } - // const { wait } = await _smartAccount.sendTransaction(tx, { - // nonceOptions, - // paymasterServiceData: { mode: PaymasterMode.SPONSORED } - // }) - // const response = await wait() - // expect(response.success).toBe("true") - // }, 50000) -}) + + test("should fail to install an already installed Validator", async () => { + const isInstalled = await smartAccount.isModuleInstalled(ModuleType.Validation, K1_VALIDATOR) + expect(isInstalled).toBeTruthy() + + const userOpResponse = smartAccount.installModule(ModuleType.Validation, K1_VALIDATOR, account.address) + await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") + }, 60000) + }) + }); From 1527f79def86d2ef10110b1a968d9addf15bd986 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Mon, 17 Jun 2024 11:22:02 +0300 Subject: [PATCH 1201/1247] refactor: lint fixes --- src/account/BiconomySmartAccountV2.ts | 24 ++- src/bundler/Bundler.ts | 46 +++-- src/bundler/utils/Constants.ts | 52 ++--- tests/account/read.test.ts | 51 ++--- tests/account/write.test.ts | 286 +++++++++++++------------- 5 files changed, 231 insertions(+), 228 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 63a3b94ff..57df0c379 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -871,16 +871,20 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { components: [ { name: "target", type: "address" }, { name: "value", type: "uint256" }, - { name: "callData", type: "bytes" }, - ], - }); - let execs: { target: Hex, value: bigint, callData: Hex }[] = []; - transactions.forEach((tx) => { - execs.push({target: tx.to as Hex, callData: (tx.data ?? "0x") as Hex, value: BigInt(tx.value ?? 0n)}) + { name: "callData", type: "bytes" } + ] }) + const execs: { target: Hex; value: bigint; callData: Hex }[] = [] + for (const tx of transactions) { + execs.push({ + target: tx.to as Hex, + callData: (tx.data ?? "0x") as Hex, + value: BigInt(tx.value ?? 0n) + }) + } const executionCalldataPrep = ethers.AbiCoder.defaultAbiCoder().encode( [Executions], - [execs], + [execs] ) as Hex return encodeFunctionData({ abi: parseAbi([ @@ -2146,11 +2150,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { }) } - async supportsExecutionMode( - mode: Hex - ): Promise<boolean> { + async supportsExecutionMode(mode: Hex): Promise<boolean> { const accountContract = await this._getAccountContract() - return await accountContract.read.supportsExecutionMode([mode]) as boolean; + return (await accountContract.read.supportsExecutionMode([mode])) as boolean } // Review diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index 0992e5f86..3cb8c1c86 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -1,7 +1,12 @@ import { http, type Hash, type PublicClient, createPublicClient } from "viem" import type { StateOverrideSet, UserOperationStruct } from "../account" import type { SimulationType } from "../account" -import { HttpMethod, getChain, isNullOrUndefined, sendRequest } from "../account" +import { + HttpMethod, + getChain, + isNullOrUndefined, + sendRequest +} from "../account" import type { IBundler } from "./interfaces/IBundler.js" import { DEFAULT_ENTRYPOINT_ADDRESS, @@ -108,23 +113,22 @@ export class Bundler implements IBundler { // const userOp = transformUserOP(_userOp) const bundlerUrl = this.getBundlerUrl() - const response: { result: BundlerEstimateUserOpGasResponse, error: { message: string } } = - await sendRequest( - { - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_estimateUserOperationGas", - params: [ - deepHexlify(_userOp), - this.bundlerConfig.entryPointAddress - ], - id: getTimestampInSeconds(), - jsonrpc: "2.0" - } - }, - "Bundler" - ) + const response: { + result: BundlerEstimateUserOpGasResponse + error: { message: string } + } = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "eth_estimateUserOperationGas", + params: [deepHexlify(_userOp), this.bundlerConfig.entryPointAddress], + id: getTimestampInSeconds(), + jsonrpc: "2.0" + } + }, + "Bundler" + ) const userOpGasResponse = response for (const key in userOpGasResponse) { @@ -136,8 +140,10 @@ export class Bundler implements IBundler { } } - if(isNullOrUndefined(response.result)) { - throw new Error(`Error from Bundler: ${JSON.stringify(response?.error?.message)}`) + if (isNullOrUndefined(response.result)) { + throw new Error( + `Error from Bundler: ${JSON.stringify(response?.error?.message)}` + ) } return { diff --git a/src/bundler/utils/Constants.ts b/src/bundler/utils/Constants.ts index c377dfd96..0fe405419 100644 --- a/src/bundler/utils/Constants.ts +++ b/src/bundler/utils/Constants.ts @@ -61,38 +61,38 @@ export const EXECUTE_BATCH = concat([ export const ACCOUNT_MODES = { DEFAULT_SINGLE: concat([ - pad(EXECTYPE_DEFAULT, {size: 1}), - pad(CALLTYPE_SINGLE, {size: 1}), - pad(UNUSED, {size: 4}), - pad(MODE_DEFAULT, {size: 4}), - pad(MODE_PAYLOAD, {size: 22}) + pad(EXECTYPE_DEFAULT, { size: 1 }), + pad(CALLTYPE_SINGLE, { size: 1 }), + pad(UNUSED, { size: 4 }), + pad(MODE_DEFAULT, { size: 4 }), + pad(MODE_PAYLOAD, { size: 22 }) ]), DEFAULT_BATCH: concat([ - pad(EXECTYPE_DEFAULT, {size: 1}), - pad(CALLTYPE_BATCH, {size: 1}), - pad(UNUSED, {size: 4}), - pad(MODE_DEFAULT, {size: 4}), - pad(MODE_PAYLOAD, {size: 22}) + pad(EXECTYPE_DEFAULT, { size: 1 }), + pad(CALLTYPE_BATCH, { size: 1 }), + pad(UNUSED, { size: 4 }), + pad(MODE_DEFAULT, { size: 4 }), + pad(MODE_PAYLOAD, { size: 22 }) ]), TRY_BATCH: concat([ - pad(EXECTYPE_TRY, {size: 1}), - pad(CALLTYPE_BATCH, {size: 1}), - pad(UNUSED, {size: 4}), - pad(MODE_DEFAULT, {size: 4}), - pad(MODE_PAYLOAD, {size: 22}) + pad(EXECTYPE_TRY, { size: 1 }), + pad(CALLTYPE_BATCH, { size: 1 }), + pad(UNUSED, { size: 4 }), + pad(MODE_DEFAULT, { size: 4 }), + pad(MODE_PAYLOAD, { size: 22 }) ]), TRY_SINGLE: concat([ - pad(EXECTYPE_TRY, {size: 1}), - pad(CALLTYPE_SINGLE, {size: 1}), - pad(UNUSED, {size: 4}), - pad(MODE_DEFAULT, {size: 4}), - pad(MODE_PAYLOAD, {size: 22}) + pad(EXECTYPE_TRY, { size: 1 }), + pad(CALLTYPE_SINGLE, { size: 1 }), + pad(UNUSED, { size: 4 }), + pad(MODE_DEFAULT, { size: 4 }), + pad(MODE_PAYLOAD, { size: 22 }) ]), DELEGATE_SINGLE: concat([ - pad(EXECTYPE_DELEGATE, {size: 1}), - pad(CALLTYPE_SINGLE, {size: 1}), - pad(UNUSED, {size: 4}), - pad(MODE_DEFAULT, {size: 4}), - pad(MODE_PAYLOAD, {size: 22}) + pad(EXECTYPE_DELEGATE, { size: 1 }), + pad(CALLTYPE_SINGLE, { size: 1 }), + pad(UNUSED, { size: 4 }), + pad(MODE_DEFAULT, { size: 4 }), + pad(MODE_PAYLOAD, { size: 22 }) ]) -} \ No newline at end of file +} diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index e3d071864..942c8281d 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -22,22 +22,22 @@ import { DEFAULT_ENTRYPOINT_ADDRESS, ERROR_MESSAGES, K1_VALIDATOR, + ModuleType, NATIVE_TOKEN_ALIAS, compareChainIds, createSmartAccountClient, - isNullOrUndefined, - ModuleType + isNullOrUndefined } from "../../src/account" import { type UserOperationStruct, getChain } from "../../src/account" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" import { BiconomyFactoryAbi } from "../../src/account/abi/K1ValidatorFactory" +import { ACCOUNT_MODES } from "../../src/bundler/utils/Constants" import { DEFAULT_SESSION_KEY_MANAGER_MODULE, createECDSAOwnershipValidationModule } from "../../src/modules" import { Paymaster, PaymasterMode } from "../../src/paymaster" import { checkBalance, getBundlerUrl, getConfig } from "../utils" -import { ACCOUNT_MODES } from "../../src/bundler/utils/Constants" describe("Account:Read", () => { const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" @@ -189,7 +189,10 @@ describe("Account:Read", () => { test.concurrent( "should check if module is enabled on the smart account", async () => { - const isEnabled = await smartAccount.isModuleInstalled(ModuleType.Validation, K1_VALIDATOR) + const isEnabled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + K1_VALIDATOR + ) expect(isEnabled).toBeTruthy() }, 30000 @@ -870,31 +873,19 @@ describe("Account:Read", () => { // ) test.concurrent("Should verify supported modes", async () => { - expect( - await smartAccount.supportsExecutionMode( - ACCOUNT_MODES.DEFAULT_SINGLE - ), - ).to.be.true; - expect( - await smartAccount.supportsExecutionMode( - ACCOUNT_MODES.DEFAULT_BATCH - ), - ).to.be.true; - expect( - await smartAccount.supportsExecutionMode( - ACCOUNT_MODES.TRY_BATCH - ), - ).to.be.true; - expect( - await smartAccount.supportsExecutionMode( - ACCOUNT_MODES.TRY_SINGLE - ), - ).to.be.true; - - expect( - await smartAccount.supportsExecutionMode( - ACCOUNT_MODES.DELEGATE_SINGLE - ), - ).to.be.false; + expect( + await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_SINGLE) + ).to.be.true + expect( + await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_BATCH) + ).to.be.true + expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_BATCH)).to + .be.true + expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_SINGLE)) + .to.be.true + + expect( + await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DELEGATE_SINGLE) + ).to.be.false }) }) diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index f23b373f0..149771735 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -1,5 +1,6 @@ import { http, + type Address, type Hex, createPublicClient, createWalletClient, @@ -10,12 +11,12 @@ import { parseAbi, stringToBytes, toBytes, - toHex, - Address + toHex } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { arbitrumSepolia, baseSepolia, polygonAmoy } from "viem/chains" import { beforeAll, describe, expect, test } from "vitest" +import type { UserOpReceipt, UserOpResponse } from "../../src" import { type BiconomySmartAccountV2, DEFAULT_ENTRYPOINT_ADDRESS, @@ -39,7 +40,6 @@ import { nonZeroBalance, topUp } from "../utils" -import { UserOpReceipt, UserOpResponse } from "../../src" describe("Account:Write", async () => { const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } @@ -77,8 +77,10 @@ describe("Account:Write", async () => { }) ] - let smartAccount: BiconomySmartAccountV2, smartAccountTwo: BiconomySmartAccountV2; - let smartAccountAddress: Address, smartAccountAddressTwo: Address; + let smartAccount: BiconomySmartAccountV2 + let smartAccountTwo: BiconomySmartAccountV2 + let smartAccountAddress: Address + let smartAccountAddressTwo: Address beforeAll(async () => { ;[smartAccount, smartAccountTwo] = await Promise.all( @@ -99,143 +101,145 @@ describe("Account:Write", async () => { }) describe("Account:Basics", async () => { - test("Build a user op with pimlico bundler", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const userOp = await smartAccount.buildUserOp([transaction]); - expect(userOp).toBeTruthy() - }, 60000) - - test("Mint NFT - Single Call", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const gasCost = await smartAccount.getGasEstimate([transaction]) - console.log(gasCost, "gasCost") - - const userOpHash = await smartAccount.sendTransaction([transaction]) - - expect(userOpHash).toBeTruthy() - }, 60000) - - test("Mint NFT's - Batch Call", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall, - value: 0n - } - const userOpResponse = await smartAccount.sendTransaction([transaction, transaction]) - const userOpReceipt: UserOpReceipt = await userOpResponse.wait() - console.log(userOpReceipt.userOpHash, "user op hash"); - - expect(userOpReceipt.success).toBe(true) - }, 60000) - - // test("Approve & Transfer - Batch Call", async () => { - // const approveCalldata = encodeFunctionData({ - // abi: parseAbi(["function approve(address spender, uint256 amount)"]), - // functionName: "approve", - // args: [smartAccountAddress, 10n] - // }) - // const transferCalldata = encodeFunctionData({ - // abi: parseAbi(["function transferFrom(address from, address to, uint256 amount)"]), - // functionName: "transferFrom", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall, - // value: 0n - // } - // const userOpResponse = await smartAccount.sendTransaction([transaction, transaction]) - // const userOpReceipt: UserOpReceipt = await userOpResponse.wait() - // console.log(userOpReceipt.userOpHash, "user op hash"); - - // expect(userOpReceipt.success).toBe(true) - // }, 60000) - }) + test("Build a user op with pimlico bundler", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const userOp = await smartAccount.buildUserOp([transaction]) + expect(userOp).toBeTruthy() + }, 60000) + + test("Mint NFT - Single Call", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const gasCost = await smartAccount.getGasEstimate([transaction]) + console.log(gasCost, "gasCost") + + const userOpHash = await smartAccount.sendTransaction([transaction]) + + expect(userOpHash).toBeTruthy() + }, 60000) + + test("Mint NFT's - Batch Call", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + value: 0n + } + const userOpResponse = await smartAccount.sendTransaction([ + transaction, + transaction + ]) + const userOpReceipt: UserOpReceipt = await userOpResponse.wait() + console.log(userOpReceipt.userOpHash, "user op hash") + + expect(userOpReceipt.success).toBe(true) + }, 60000) + + // test("Approve & Transfer - Batch Call", async () => { + // const approveCalldata = encodeFunctionData({ + // abi: parseAbi(["function approve(address spender, uint256 amount)"]), + // functionName: "approve", + // args: [smartAccountAddress, 10n] + // }) + // const transferCalldata = encodeFunctionData({ + // abi: parseAbi(["function transferFrom(address from, address to, uint256 amount)"]), + // functionName: "transferFrom", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall, + // value: 0n + // } + // const userOpResponse = await smartAccount.sendTransaction([transaction, transaction]) + // const userOpReceipt: UserOpReceipt = await userOpResponse.wait() + // console.log(userOpReceipt.userOpHash, "user op hash"); + + // expect(userOpReceipt.success).toBe(true) + // }, 60000) + }) describe("Account:Validation Module", async () => { - test( - "should install a dummy K1Validator module", - async () => { - const newK1ValidatorContract = - "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - const userOpResponse: UserOpResponse = await smartAccount.installModule( - ModuleType.Validation, - newK1ValidatorContract, - account.address - ) - const userOpReceipt = await userOpResponse.wait(); - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - newK1ValidatorContract - ) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeTruthy() - }, - 60000 + test("should install a dummy K1Validator module", async () => { + const newK1ValidatorContract = + "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + const userOpResponse: UserOpResponse = await smartAccount.installModule( + ModuleType.Validation, + newK1ValidatorContract, + account.address ) - - test( - "should uninstall dummy K1Validator module", - async () => { - const newK1ValidatorContract = - "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - - const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - const deInitData = encodeAbiParameters( - [ - { name: "prev", type: "address" }, - { name: "disableModuleData", type: "bytes" } - ], - [prevAddress, toHex(stringToBytes(""))] - ) - const userOpResponse = await smartAccount.uninstallModule( - ModuleType.Validation, - newK1ValidatorContract, - deInitData - ) - const userOpReceipt = await userOpResponse.wait(); - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - newK1ValidatorContract - ) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeFalsy() - expect(userOpReceipt).toBeTruthy() - }, - 60000 + const userOpReceipt = await userOpResponse.wait() + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + newK1ValidatorContract ) - - test("should fail to install an already installed Validator", async () => { - const isInstalled = await smartAccount.isModuleInstalled(ModuleType.Validation, K1_VALIDATOR) - expect(isInstalled).toBeTruthy() - - const userOpResponse = smartAccount.installModule(ModuleType.Validation, K1_VALIDATOR, account.address) - await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") - }, 60000) - }) - }); + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeTruthy() + }, 60000) + + test("should uninstall dummy K1Validator module", async () => { + const newK1ValidatorContract = + "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + + const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + const deInitData = encodeAbiParameters( + [ + { name: "prev", type: "address" }, + { name: "disableModuleData", type: "bytes" } + ], + [prevAddress, toHex(stringToBytes(""))] + ) + const userOpResponse = await smartAccount.uninstallModule( + ModuleType.Validation, + newK1ValidatorContract, + deInitData + ) + const userOpReceipt = await userOpResponse.wait() + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + newK1ValidatorContract + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeFalsy() + expect(userOpReceipt).toBeTruthy() + }, 60000) + + test("should fail to install an already installed Validator", async () => { + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + K1_VALIDATOR + ) + expect(isInstalled).toBeTruthy() + + const userOpResponse = smartAccount.installModule( + ModuleType.Validation, + K1_VALIDATOR, + account.address + ) + await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") + }, 60000) + }) +}) From eab0825296ae1f7995c403344ce9c9ad6db8b630 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Mon, 17 Jun 2024 18:15:39 +0300 Subject: [PATCH 1202/1247] feat: added executor module + more module helper metods --- src/account/BaseSmartContractAccount.ts | 8 +- src/account/BiconomySmartAccountV2.ts | 114 ++++-- src/account/utils/Types.ts | 3 +- src/modules/utils/Constants.ts | 5 + tests/account/read.test.ts | 88 ++--- tests/account/write.test.ts | 500 ++++++++++++++++++------ 6 files changed, 501 insertions(+), 217 deletions(-) diff --git a/src/account/BaseSmartContractAccount.ts b/src/account/BaseSmartContractAccount.ts index 38f05fb43..5f0de9ad6 100644 --- a/src/account/BaseSmartContractAccount.ts +++ b/src/account/BaseSmartContractAccount.ts @@ -16,7 +16,8 @@ import type { BasSmartContractAccountProps, BatchUserOperationCallData, ISmartContractAccount, - SignTypedDataParams + SignTypedDataParams, + Transaction } from "./utils/Types.js" import { wrapSignatureWith6492 } from "./utils/Utils.js" @@ -90,7 +91,10 @@ export abstract class BaseSmartContractAccount< * @param data -- equivalent to `data` in a normal transaction * @returns abi encoded function data for a call to your contract's `execute` method */ - abstract encodeExecute(Transaction): Promise<Hash> + abstract encodeExecute( + transaction: Transaction, + useExecutor: boolean + ): Promise<Hash> /** * this should return an ERC-191 compliant message and is used to sign UO Hashes diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 57df0c379..003578bb6 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -36,6 +36,7 @@ import type { IBundler } from "../bundler/interfaces/IBundler.js" import { EXECUTE_BATCH, EXECUTE_SINGLE } from "../bundler/utils/Constants.js" import { BaseValidationModule, + MOCK_EXECUTOR, type ModuleInfo, type SendUserOpParams, createECDSAOwnershipValidationModule @@ -830,19 +831,32 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param data represent data associated with transaction * @returns encoded data for execute function */ - async encodeExecute(transaction: Transaction): Promise<Hex> { + async encodeExecute( + transaction: Transaction, + useExecutor?: boolean + ): Promise<Hex> { // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; const mode = EXECUTE_SINGLE const executionCalldata = encodePacked( - ["address", "uint256", "bytes"], + ["address", "address", "uint256", "bytes"], [ + MOCK_EXECUTOR, transaction.to as Hex, BigInt(transaction.value ?? 0n), (transaction.data as Hex) ?? ("0x" as Hex) ] ) - // Encode a simple call + if (useExecutor) { + return encodeFunctionData({ + abi: parseAbi([ + "function executeFromExecutor(bytes32 mode, bytes calldata executionCalldata) external" + ]), + functionName: "executeFromExecutor", + args: [mode, executionCalldata] + }) + } + return encodeFunctionData({ abi: parseAbi([ "function execute(bytes32 mode, bytes calldata executionCalldata) external" @@ -859,21 +873,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param data represent array of data associated with each transaction * @returns encoded data for executeBatch function */ - async encodeExecuteBatch(transactions: Transaction[]): Promise<Hex> { + async encodeExecuteBatch( + transactions: Transaction[], + useExecutor?: boolean + ): Promise<Hex> { // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; const mode = EXECUTE_BATCH // TODO: Use viem instead of ethers - const execution = ParamType.from({ - type: "tuple(address,uint256,bytes)[]", - baseType: "tuple", - name: "executions", - arrayLength: null, - components: [ - { name: "target", type: "address" }, - { name: "value", type: "uint256" }, - { name: "callData", type: "bytes" } - ] - }) const execs: { target: Hex; value: bigint; callData: Hex }[] = [] for (const tx of transactions) { execs.push({ @@ -886,6 +892,15 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { [Executions], [execs] ) as Hex + if (useExecutor) { + return encodeFunctionData({ + abi: parseAbi([ + "function executeFromExecutor(bytes32 mode, bytes calldata executionCalldata) external" + ]), + functionName: "executeFromExecutor", + args: [mode, executionCalldataPrep] + }) + } return encodeFunctionData({ abi: parseAbi([ "function execute(bytes32 mode, bytes calldata executionCalldata) external" @@ -1579,10 +1594,16 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { let callData: Hex = "0x" if (!buildUseropDto?.useEmptyDeployCallData) { if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { - callData = await this.encodeExecuteBatch(transactions) + callData = await this.encodeExecuteBatch( + transactions, + buildUseropDto?.useExecutor ?? false + ) } else { // transactions.length must be 1 - callData = await this.encodeExecute(transactions[0]) + callData = await this.encodeExecute( + transactions[0], + buildUseropDto?.useExecutor ?? false + ) } } @@ -1845,7 +1866,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { data: "0x", value: 0n } - if (smartAccountExecFunctionName === "execute") { + if ( + smartAccountExecFunctionName === "execute" || + smartAccountExecFunctionName === "executeFromExecutor" + ) { const methodArgsSmartWalletExecuteCall = decodedSmartAccountData.args ?? [] const toOriginal = @@ -1866,10 +1890,12 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const finalUserOp: Partial<UserOperationStruct> = { ...userOp, - callData: await this.encodeExecuteBatch([ - approvalRequest, - initialTransaction - ]) + callData: await this.encodeExecuteBatch( + [approvalRequest, initialTransaction], + smartAccountExecFunctionName === "executeFromExecutor" + ? true + : false + ) } return finalUserOp @@ -1936,7 +1962,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * const { success, receipt } = await wait(); * */ - public async deploy(buildUseropDto?: BuildUserOpOptions): Promise<Hash> { + public async deploy( + buildUseropDto?: BuildUserOpOptions + ): Promise<UserOpResponse> { const accountAddress = this.accountAddress ?? (await this.getAccountAddress()) @@ -2155,15 +2183,33 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { return (await accountContract.read.supportsExecutionMode([mode])) as boolean } - // Review - // async getAllModules(pageSize?: number): Promise<Array<string>> { - // const _pageSize = pageSize ?? 100 - // const accountContract = await this._getAccountContract() - // const result = await accountContract.read.getModulesPaginated([ - // this.SENTINEL_MODULE as Hex, - // BigInt(_pageSize) - // ]) - // const modules: Array<string> = result[0] as Array<string> - // return modules - // } + async getInstalledValidators(): Promise<Address[]> { + const accountContract = await this._getAccountContract() + return ( + (await accountContract.read.getValidatorsPaginated([ + "0x0000000000000000000000000000000000000001", + 100 + ])) as Address[][] + )[0] as Address[] + } + + async getInstalledExecutors(): Promise<Address[]> { + const accountContract = await this._getAccountContract() + return ( + (await accountContract.read.getExecutorsPaginated([ + "0x0000000000000000000000000000000000000001", + 100 + ])) as Address[][] + )[0] as Address[] + } + + async getActiveHook(): Promise<Address> { + const accountContract = await this._getAccountContract() + return (await accountContract.read.getActiveHook()) as Address + } + + async supportsModule(moduleType: ModuleType): Promise<boolean> { + const accountContract = await this._getAccountContract() + return (await accountContract.read.supportsModule([moduleType])) as boolean + } } diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 2bdbf0e89..0426d2c7e 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -205,6 +205,7 @@ export type BuildUserOpOptions = { stateOverrideSet?: StateOverrideSet dummyPndOverride?: BytesLike useEmptyDeployCallData?: boolean + useExecutor?: boolean } export type NonceOptions = { @@ -497,7 +498,7 @@ export interface ISmartContractAccount< * @param value - optionally the amount of native token to send * @param data - the call data or "0x" if empty */ - encodeExecute(target: string, value: bigint, data: string): Promise<Hex> + encodeExecute(transaction: Transaction, useExecutor: boolean): Promise<Hex> /** * Encodes a batch of transactions to the account's batch execute function. diff --git a/src/modules/utils/Constants.ts b/src/modules/utils/Constants.ts index 665caadbf..51a1087fc 100644 --- a/src/modules/utils/Constants.ts +++ b/src/modules/utils/Constants.ts @@ -34,3 +34,8 @@ export const MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION = { export const DEFAULT_ABI_SVM_MODULE: Hex = "0x000006bC2eCdAe38113929293d241Cf252D91861" + +export const MOCK_EXECUTOR: Hex = "0xA975e69917A4c856b17Fc8Cc4C352f326Ef21C6B" +export const MOCK_HOOK: Hex = "0x64587c60A3D19B0D73EFfd7660ee07cb76Ca465C" +export const MOCK_FALLBACK_HANDLER: Hex = + "0x56B7080ef4221FdBE210160efFd33F81B19926E0" diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index 942c8281d..f6bb7bad4 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -31,6 +31,7 @@ import { import { type UserOperationStruct, getChain } from "../../src/account" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" import { BiconomyFactoryAbi } from "../../src/account/abi/K1ValidatorFactory" +import { NexusAccountAbi } from "../../src/account/abi/SmartAccount" import { ACCOUNT_MODES } from "../../src/bundler/utils/Constants" import { DEFAULT_SESSION_KEY_MANAGER_MODULE, @@ -734,73 +735,44 @@ describe("Account:Read", () => { // } // ) - // test.concurrent("should confirm that signature is not valid", async () => { - // const randomPrivKey = generatePrivateKey() - // const randomWallet = privateKeyToAccount(randomPrivKey) - - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl - // }) - - // const eip1271MagicValue = "0xffffffff" - // const message = "Some message from dApp" - // const messageHash = hashMessage(message) - // const signature = await randomWallet.signMessage({ message: messageHash }) - // const signatureWithModuleAddress = encodeAbiParameters( - // parseAbiParameters("bytes, address"), - // [signature, smartAccount.defaultValidationModule.getAddress()] - // ) - - // const response = await publicClient.readContract({ - // address: await smartAccount.getAccountAddress(), - // abi: NexusAccountAbi, - // functionName: "isValidSignature", - // args: [messageHash, signatureWithModuleAddress] - // }) - - // expect(response).toBe(eip1271MagicValue) - // }) - - // test.concurrent("should verifySignature of deployed", async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl, - // index: 1n - // }) + test.concurrent("should verifySignature of deployed", async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl + }) - // const message = "hello world" + const message = "hello world" - // const signature = await smartAccount.signMessage(message) + const signature = await smartAccount.signMessage(message) - // const isVerified = await publicClient.verifyMessage({ - // address: await smartAccount.getAddress(), - // message, - // signature - // }) + const isVerified = await publicClient.verifyMessage({ + address: await smartAccount.getAddress(), + message, + signature + }) - // expect(isVerified).toBeTruthy() - // }) + expect(isVerified).toBeTruthy() + }) - // test.concurrent("should verifySignature of not deployed", async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl, - // index: 100n - // }) + test.concurrent("should verifySignature of not deployed", async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + index: 100n + }) - // const message = "hello world" + const message = "hello world" - // const signature = await smartAccount.signMessage(message) + const signature = await smartAccount.signMessage(message) - // const isVerified = await publicClient.verifyMessage({ - // address: await smartAccount.getAccountAddress(), - // message, - // signature - // }) + const isVerified = await publicClient.verifyMessage({ + address: await smartAccount.getAccountAddress(), + message, + signature + }) - // expect(isVerified).toBeTruthy() - // }) + expect(isVerified).toBeTruthy() + }) test.concurrent( "should simulate a user operation execution, expecting to fail", diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 149771735..061e79f10 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -11,12 +11,18 @@ import { parseAbi, stringToBytes, toBytes, - toHex + toHex, + zeroAddress } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { arbitrumSepolia, baseSepolia, polygonAmoy } from "viem/chains" import { beforeAll, describe, expect, test } from "vitest" -import type { UserOpReceipt, UserOpResponse } from "../../src" +import { + MOCK_EXECUTOR, + MOCK_FALLBACK_HANDLER, + MOCK_HOOK, + type UserOpReceipt, + type UserOpResponse +} from "../../src" import { type BiconomySmartAccountV2, DEFAULT_ENTRYPOINT_ADDRESS, @@ -100,146 +106,396 @@ describe("Account:Write", async () => { ) }) - describe("Account:Basics", async () => { - test("Build a user op with pimlico bundler", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const userOp = await smartAccount.buildUserOp([transaction]) - expect(userOp).toBeTruthy() - }, 60000) + // describe("Account:Basics", async () => { + // test("Build a user op with pimlico bundler", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall + // } + // const userOp = await smartAccount.buildUserOp([transaction]) + // expect(userOp).toBeTruthy() + // }, 60000) - test("Mint NFT - Single Call", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const gasCost = await smartAccount.getGasEstimate([transaction]) - console.log(gasCost, "gasCost") + // test("Mint NFT - Single Call", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall + // } + // const gasCost = await smartAccount.getGasEstimate([transaction]) + // console.log(gasCost, "gasCost") + + // const userOpHash = await smartAccount.sendTransaction([transaction]) + + // expect(userOpHash).toBeTruthy() + // }, 60000) - const userOpHash = await smartAccount.sendTransaction([transaction]) + // test("Mint NFT's - Batch Call", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall, + // value: 0n + // } + // const userOpResponse = await smartAccount.sendTransaction([ + // transaction, + // transaction + // ]) + // const userOpReceipt: UserOpReceipt = await userOpResponse.wait() + // console.log(userOpReceipt.userOpHash, "user op hash") - expect(userOpHash).toBeTruthy() + // expect(userOpReceipt.success).toBe(true) + // }, 60000) + // }) + + // describe("Account:Validation Module", async () => { + // test("should install a dummy K1Validator module", async () => { + // const newK1ValidatorContract = + // "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + // const userOpResponse: UserOpResponse = await smartAccount.installModule( + // ModuleType.Validation, + // newK1ValidatorContract, + // account.address + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // newK1ValidatorContract + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test("should uninstall dummy K1Validator module", async () => { + // const newK1ValidatorContract = + // "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + + // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // const deInitData = encodeAbiParameters( + // [ + // { name: "prev", type: "address" }, + // { name: "disableModuleData", type: "bytes" } + // ], + // [prevAddress, toHex(stringToBytes(""))] + // ) + // const userOpResponse = await smartAccount.uninstallModule( + // ModuleType.Validation, + // newK1ValidatorContract, + // deInitData + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // newK1ValidatorContract + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) + + // test("should fail to install an already installed Validator", async () => { + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // K1_VALIDATOR + // ) + // expect(isInstalled).toBeTruthy() + + // const userOpResponse = smartAccount.installModule( + // ModuleType.Validation, + // K1_VALIDATOR, + // account.address + // ) + // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") + // }, 60000) + // }) + + describe("Account:Execution Module Tests", async () => { + // test("install a mock Execution module", async () => { + // const userOpResponse: UserOpResponse = await smartAccount.installModule( + // ModuleType.Execution, + // MOCK_EXECUTOR, + // account.address + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Execution, + // MOCK_EXECUTOR + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) + + test("get installed executors", async () => { + const installedExecutors: Address[] = + await smartAccount.getInstalledExecutors() + console.log(installedExecutors, "installed executors") + expect(installedExecutors.includes(MOCK_EXECUTOR)).toBeTruthy() }, 60000) - test("Mint NFT's - Batch Call", async () => { + // test("uninstall executor module", async () => { + // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // const deInitData = encodeAbiParameters( + // [ + // { name: "prev", type: "address" }, + // { name: "disableModuleData", type: "bytes" } + // ], + // [prevAddress, toHex(stringToBytes(""))] + // ) + // const userOpResponse = await smartAccount.uninstallModule( + // ModuleType.Execution, + // MOCK_EXECUTOR, + // deInitData + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Execution, + // MOCK_EXECUTOR + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) + + // test("should fail to install same executor module", async () => { + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // K1_VALIDATOR + // ) + // expect(isInstalled).toBeTruthy() + + // const userOpResponse = smartAccount.installModule( + // ModuleType.Validation, + // K1_VALIDATOR, + // account.address + // ) + // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") + // }, 60000) + + test("send user op using the executor", async () => { const encodedCall = encodeFunctionData({ abi: parseAbi(["function safeMint(address _to)"]), functionName: "safeMint", args: [recipient] }) const transaction = { - to: nftAddress, // NFT address - data: encodedCall, - value: 0n + to: nftAddress, + data: encodedCall } - const userOpResponse = await smartAccount.sendTransaction([ - transaction, - transaction - ]) - const userOpReceipt: UserOpReceipt = await userOpResponse.wait() - console.log(userOpReceipt.userOpHash, "user op hash") - - expect(userOpReceipt.success).toBe(true) + + const userOpResponse2 = await smartAccount.sendTransaction(transaction, { + useExecutor: true + }) + const userOpReceipt2: UserOpReceipt = await userOpResponse2.wait() + console.log(userOpReceipt2.userOpHash, "user op hash 2") }, 60000) + }) - // test("Approve & Transfer - Batch Call", async () => { - // const approveCalldata = encodeFunctionData({ - // abi: parseAbi(["function approve(address spender, uint256 amount)"]), - // functionName: "approve", - // args: [smartAccountAddress, 10n] - // }) - // const transferCalldata = encodeFunctionData({ - // abi: parseAbi(["function transferFrom(address from, address to, uint256 amount)"]), - // functionName: "transferFrom", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall, - // value: 0n - // } - // const userOpResponse = await smartAccount.sendTransaction([transaction, transaction]) - // const userOpReceipt: UserOpReceipt = await userOpResponse.wait() - // console.log(userOpReceipt.userOpHash, "user op hash"); + // describe("Account:Hook Module Tests", async () => { + // test("install a mock Hook module", async () => { + // const isSupported = await smartAccount.supportsModule(ModuleType.Hooks) + // console.log(isSupported, "is supported") - // expect(userOpReceipt.success).toBe(true) - // }, 60000) - }) + // const isInstalledBefore = await smartAccount.isModuleInstalled( + // ModuleType.Hooks, + // MOCK_HOOK + // ) + // console.log(isInstalledBefore, "is installed before") - describe("Account:Validation Module", async () => { - test("should install a dummy K1Validator module", async () => { - const newK1ValidatorContract = - "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - const userOpResponse: UserOpResponse = await smartAccount.installModule( - ModuleType.Validation, - newK1ValidatorContract, - account.address - ) - const userOpReceipt = await userOpResponse.wait() + // const userOpResponse: UserOpResponse = await smartAccount.installModule( + // ModuleType.Hooks, + // MOCK_HOOK + // ) + // const userOpReceipt = await userOpResponse.wait() + // console.log(userOpReceipt, "user op receipt") - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - newK1ValidatorContract - ) + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Hooks, + // MOCK_HOOK + // ) - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeTruthy() - }, 60000) + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) - test("should uninstall dummy K1Validator module", async () => { - const newK1ValidatorContract = - "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - - const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - const deInitData = encodeAbiParameters( - [ - { name: "prev", type: "address" }, - { name: "disableModuleData", type: "bytes" } - ], - [prevAddress, toHex(stringToBytes(""))] - ) - const userOpResponse = await smartAccount.uninstallModule( - ModuleType.Validation, - newK1ValidatorContract, - deInitData - ) - const userOpReceipt = await userOpResponse.wait() + // test("get active hook", async () => { + // const activeHook: Address = await smartAccount.getActiveHook() + // console.log(activeHook, "active hook") + // expect(activeHook).toBe(MOCK_HOOK) + // }, 60000) - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - newK1ValidatorContract - ) + // test("uninstall executor module", async () => { + // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // const deInitData = encodeAbiParameters( + // [ + // { name: "prev", type: "address" }, + // { name: "disableModuleData", type: "bytes" } + // ], + // [prevAddress, toHex(stringToBytes(""))] + // ) + // const userOpResponse = await smartAccount.uninstallModule( + // ModuleType.Hooks, + // MOCK_HOOK, + // deInitData + // ) + // const userOpReceipt = await userOpResponse.wait() - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeFalsy() - expect(userOpReceipt).toBeTruthy() - }, 60000) + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Hooks, + // MOCK_HOOK + // ) - test("should fail to install an already installed Validator", async () => { - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - K1_VALIDATOR - ) - expect(isInstalled).toBeTruthy() + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) - const userOpResponse = smartAccount.installModule( - ModuleType.Validation, - K1_VALIDATOR, - account.address - ) - await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") - }, 60000) - }) + // test("should fail to install same executor module", async () => { + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // K1_VALIDATOR + // ) + // expect(isInstalled).toBeTruthy() + + // const userOpResponse = smartAccount.installModule( + // ModuleType.Validation, + // K1_VALIDATOR, + // account.address + // ) + // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") + // }, 60000) + + // test("send user op using the executor", async () => { + // // const encodedCall = encodeFunctionData({ + // // abi: parseAbi(["function safeMint(address _to)"]), + // // functionName: "safeMint", + // // args: [recipient] + // // }) + // const transaction = { + // to: zeroAddress, + // data: "0x" + // } + + // const userOpResponse2 = await smartAccount.sendTransaction(transaction, { + // useExecutor: true + // }) + // const userOpReceipt2: UserOpReceipt = await userOpResponse2.wait() + + // console.log(userOpReceipt2.userOpHash, "user op hash 2") + // }, 60000) + // }) + + // describe("Account:Fallback Handler Module Tests", async () => { + // test("install a fallback handler Hook module", async () => { + // const isSupported = await smartAccount.supportsModule(ModuleType.Fallback) + // console.log(isSupported, "is supported") + + // const isInstalledBefore = await smartAccount.isModuleInstalled( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER + // ) + // console.log(isInstalledBefore, "is installed before") + + // const userOpResponse: UserOpResponse = await smartAccount.installModule( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER + // ) + // const userOpReceipt = await userOpResponse.wait() + // console.log(userOpReceipt, "user op receipt") + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test("get active hook", async () => { + // const activeHook: Address = await smartAccount.getActiveHook() + // console.log(activeHook, "active hook") + // expect(activeHook).toBe(MOCK_HOOK) + // }, 60000) + + // test("uninstall executor module", async () => { + // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // const deInitData = encodeAbiParameters( + // [ + // { name: "prev", type: "address" }, + // { name: "disableModuleData", type: "bytes" } + // ], + // [prevAddress, toHex(stringToBytes(""))] + // ) + // const userOpResponse = await smartAccount.uninstallModule( + // ModuleType.Hooks, + // MOCK_HOOK, + // deInitData + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Hooks, + // MOCK_HOOK + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) + + // test("should fail to install same executor module", async () => { + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // K1_VALIDATOR + // ) + // expect(isInstalled).toBeTruthy() + + // const userOpResponse = smartAccount.installModule( + // ModuleType.Validation, + // K1_VALIDATOR, + // account.address + // ) + // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") + // }, 60000) + + // test("send user op using the executor", async () => { + // // const encodedCall = encodeFunctionData({ + // // abi: parseAbi(["function safeMint(address _to)"]), + // // functionName: "safeMint", + // // args: [recipient] + // // }) + // const transaction = { + // to: zeroAddress, + // data: "0x" + // } + + // const userOpResponse2 = await smartAccount.sendTransaction(transaction, { + // useExecutor: true + // }) + // const userOpReceipt2: UserOpReceipt = await userOpResponse2.wait() + + // console.log(userOpReceipt2.userOpHash, "user op hash 2") + // }, 60000) + // }) }) From 5f3ce6e59c24ef260d949315450f1318f76e2017 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Tue, 18 Jun 2024 18:32:21 +0300 Subject: [PATCH 1203/1247] refactor: lint fix --- src/account/BiconomySmartAccountV2.ts | 90 +++++++++++++++++---------- src/bundler/Bundler.ts | 1 - tests/account/write.test.ts | 30 ++++++--- 3 files changed, 77 insertions(+), 44 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 003578bb6..16d68261b 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -36,7 +36,6 @@ import type { IBundler } from "../bundler/interfaces/IBundler.js" import { EXECUTE_BATCH, EXECUTE_SINGLE } from "../bundler/utils/Constants.js" import { BaseValidationModule, - MOCK_EXECUTOR, type ModuleInfo, type SendUserOpParams, createECDSAOwnershipValidationModule @@ -832,31 +831,18 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @returns encoded data for execute function */ async encodeExecute( - transaction: Transaction, - useExecutor?: boolean + transaction: Transaction ): Promise<Hex> { - // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; - const mode = EXECUTE_SINGLE + const mode = EXECUTE_BATCH const executionCalldata = encodePacked( - ["address", "address", "uint256", "bytes"], + ["address", "uint256", "bytes"], [ - MOCK_EXECUTOR, transaction.to as Hex, BigInt(transaction.value ?? 0n), (transaction.data as Hex) ?? ("0x" as Hex) ] ) - if (useExecutor) { - return encodeFunctionData({ - abi: parseAbi([ - "function executeFromExecutor(bytes32 mode, bytes calldata executionCalldata) external" - ]), - functionName: "executeFromExecutor", - args: [mode, executionCalldata] - }) - } - return encodeFunctionData({ abi: parseAbi([ "function execute(bytes32 mode, bytes calldata executionCalldata) external" @@ -874,8 +860,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @returns encoded data for executeBatch function */ async encodeExecuteBatch( - transactions: Transaction[], - useExecutor?: boolean + transactions: Transaction[] ): Promise<Hex> { // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; const mode = EXECUTE_BATCH @@ -892,15 +877,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { [Executions], [execs] ) as Hex - if (useExecutor) { - return encodeFunctionData({ - abi: parseAbi([ - "function executeFromExecutor(bytes32 mode, bytes calldata executionCalldata) external" - ]), - functionName: "executeFromExecutor", - args: [mode, executionCalldataPrep] - }) - } + return encodeFunctionData({ abi: parseAbi([ "function execute(bytes32 mode, bytes calldata executionCalldata) external" @@ -1538,6 +1515,19 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { }) } + async sendTransactionWithExecutor( + manyOrOneTransactions: Transaction | Transaction[], + executorAddress: Address, + buildUseropDto?: BuildUserOpOptions + ): Promise<UserOpResponse> { + return await this.executeFromExecutor(Array.isArray(manyOrOneTransactions) + ? manyOrOneTransactions + : [manyOrOneTransactions], + executorAddress, + buildUseropDto + ); + } + /** * Builds a user operation * @@ -1596,13 +1586,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { callData = await this.encodeExecuteBatch( transactions, - buildUseropDto?.useExecutor ?? false ) } else { - // transactions.length must be 1 callData = await this.encodeExecute( transactions[0], - buildUseropDto?.useExecutor ?? false ) } } @@ -1892,9 +1879,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ...userOp, callData: await this.encodeExecuteBatch( [approvalRequest, initialTransaction], - smartAccountExecFunctionName === "executeFromExecutor" - ? true - : false ) } @@ -2178,6 +2162,44 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { }) } + private async executeFromExecutor( + transactions: Transaction[], + executorAddress: Address, + buildUseropDto?: BuildUserOpOptions + ): Promise<UserOpResponse> { + let executorCalldata: Hex = "0x"; + if(transactions.length > 1){ + const execs: { target: Hex; value: bigint; callData: Hex }[] = [] + for (const tx of transactions) { + execs.push({ + target: tx.to as Hex, + callData: (tx.data ?? "0x") as Hex, + value: BigInt(tx.value ?? 0n) + }) + } + const executionCalldataPrep = ethers.AbiCoder.defaultAbiCoder().encode( + [Executions], + [execs] + ) as Hex + + executorCalldata = encodeFunctionData({ + abi: parseAbi(["function executeBatchViaAccount(address account, bytes calldata execs) external"]), + functionName: "executeBatchViaAccount", + args: [this.accountAddress! as Hex, executionCalldataPrep] + }) + } else { + executorCalldata = encodeFunctionData({ + abi: parseAbi(["function executeViaAccount(address account, address target, uint256 value, bytes calldata callData) external"]), + functionName: "executeViaAccount", + args: [this.accountAddress! as Hex, transactions[0].to as Hex, BigInt(transactions[0].value ?? 0), transactions[0].data as Hex] + }) + } + return await this.sendTransaction({ + to: executorAddress, + data: executorCalldata + }, buildUseropDto) + } + async supportsExecutionMode(mode: Hex): Promise<boolean> { const accountContract = await this._getAccountContract() return (await accountContract.read.supportsExecutionMode([mode])) as boolean diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index 3cb8c1c86..8480cfaa8 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -129,7 +129,6 @@ export class Bundler implements IBundler { }, "Bundler" ) - const userOpGasResponse = response for (const key in userOpGasResponse) { if ( diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 061e79f10..846c260df 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -292,7 +292,22 @@ describe("Account:Write", async () => { // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") // }, 60000) - test("send user op using the executor", async () => { + // test("send user op using the executor call type single", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, + // data: encodedCall + // } + // const userOpResponse = await smartAccount.sendTransactionWithExecutor(transaction, MOCK_EXECUTOR); + // const userOpReceipt: UserOpReceipt = await userOpResponse.wait() + // console.log(userOpReceipt.userOpHash, "user op hash"); + // }, 60000) + + test("send user op using the executor call type batch", async () => { const encodedCall = encodeFunctionData({ abi: parseAbi(["function safeMint(address _to)"]), functionName: "safeMint", @@ -302,14 +317,11 @@ describe("Account:Write", async () => { to: nftAddress, data: encodedCall } - - const userOpResponse2 = await smartAccount.sendTransaction(transaction, { - useExecutor: true - }) - const userOpReceipt2: UserOpReceipt = await userOpResponse2.wait() - console.log(userOpReceipt2.userOpHash, "user op hash 2") + const userOpResponse = await smartAccount.sendTransactionWithExecutor([transaction, transaction], MOCK_EXECUTOR); + const userOpReceipt: UserOpReceipt = await userOpResponse.wait() + console.log(userOpReceipt.userOpHash, "user op hash"); }, 60000) - }) + // }) // describe("Account:Hook Module Tests", async () => { // test("install a mock Hook module", async () => { @@ -497,5 +509,5 @@ describe("Account:Write", async () => { // console.log(userOpReceipt2.userOpHash, "user op hash 2") // }, 60000) - // }) + }) }) From 0f0c0220001134f3d9b20e4d050a283ff8fcb3d4 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Tue, 18 Jun 2024 18:32:26 +0300 Subject: [PATCH 1204/1247] feat: executor module --- src/account/BiconomySmartAccountV2.ts | 66 +++-- tests/account/write.test.ts | 383 +++++++++++++------------- 2 files changed, 229 insertions(+), 220 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 16d68261b..450f9806f 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -830,9 +830,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param data represent data associated with transaction * @returns encoded data for execute function */ - async encodeExecute( - transaction: Transaction - ): Promise<Hex> { + async encodeExecute(transaction: Transaction): Promise<Hex> { const mode = EXECUTE_BATCH const executionCalldata = encodePacked( @@ -859,9 +857,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @param data represent array of data associated with each transaction * @returns encoded data for executeBatch function */ - async encodeExecuteBatch( - transactions: Transaction[] - ): Promise<Hex> { + async encodeExecuteBatch(transactions: Transaction[]): Promise<Hex> { // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; const mode = EXECUTE_BATCH // TODO: Use viem instead of ethers @@ -877,7 +873,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { [Executions], [execs] ) as Hex - + return encodeFunctionData({ abi: parseAbi([ "function execute(bytes32 mode, bytes calldata executionCalldata) external" @@ -1520,12 +1516,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { executorAddress: Address, buildUseropDto?: BuildUserOpOptions ): Promise<UserOpResponse> { - return await this.executeFromExecutor(Array.isArray(manyOrOneTransactions) - ? manyOrOneTransactions - : [manyOrOneTransactions], + return await this.executeFromExecutor( + Array.isArray(manyOrOneTransactions) + ? manyOrOneTransactions + : [manyOrOneTransactions], executorAddress, buildUseropDto - ); + ) } /** @@ -1584,13 +1581,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { let callData: Hex = "0x" if (!buildUseropDto?.useEmptyDeployCallData) { if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { - callData = await this.encodeExecuteBatch( - transactions, - ) + callData = await this.encodeExecuteBatch(transactions) } else { - callData = await this.encodeExecute( - transactions[0], - ) + callData = await this.encodeExecute(transactions[0]) } } @@ -1877,9 +1870,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const finalUserOp: Partial<UserOperationStruct> = { ...userOp, - callData: await this.encodeExecuteBatch( - [approvalRequest, initialTransaction], - ) + callData: await this.encodeExecuteBatch([ + approvalRequest, + initialTransaction + ]) } return finalUserOp @@ -2167,8 +2161,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { executorAddress: Address, buildUseropDto?: BuildUserOpOptions ): Promise<UserOpResponse> { - let executorCalldata: Hex = "0x"; - if(transactions.length > 1){ + let executorCalldata: Hex = "0x" + if (transactions.length > 1) { const execs: { target: Hex; value: bigint; callData: Hex }[] = [] for (const tx of transactions) { execs.push({ @@ -2183,21 +2177,33 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ) as Hex executorCalldata = encodeFunctionData({ - abi: parseAbi(["function executeBatchViaAccount(address account, bytes calldata execs) external"]), + abi: parseAbi([ + "function executeBatchViaAccount(address account, bytes calldata execs) external" + ]), functionName: "executeBatchViaAccount", - args: [this.accountAddress! as Hex, executionCalldataPrep] + args: [(await this.getAddress()) as Hex, executionCalldataPrep] }) } else { executorCalldata = encodeFunctionData({ - abi: parseAbi(["function executeViaAccount(address account, address target, uint256 value, bytes calldata callData) external"]), + abi: parseAbi([ + "function executeViaAccount(address account, address target, uint256 value, bytes calldata callData) external" + ]), functionName: "executeViaAccount", - args: [this.accountAddress! as Hex, transactions[0].to as Hex, BigInt(transactions[0].value ?? 0), transactions[0].data as Hex] + args: [ + (await this.getAddress()) as Hex, + transactions[0].to as Hex, + BigInt(transactions[0].value ?? 0), + transactions[0].data as Hex + ] }) } - return await this.sendTransaction({ - to: executorAddress, - data: executorCalldata - }, buildUseropDto) + return await this.sendTransaction( + { + to: executorAddress, + data: executorCalldata + }, + buildUseropDto + ) } async supportsExecutionMode(mode: Hex): Promise<boolean> { diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 846c260df..4098dc613 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -317,197 +317,200 @@ describe("Account:Write", async () => { to: nftAddress, data: encodedCall } - const userOpResponse = await smartAccount.sendTransactionWithExecutor([transaction, transaction], MOCK_EXECUTOR); + const userOpResponse = await smartAccount.sendTransactionWithExecutor( + [transaction, transaction], + MOCK_EXECUTOR + ) const userOpReceipt: UserOpReceipt = await userOpResponse.wait() - console.log(userOpReceipt.userOpHash, "user op hash"); + console.log(userOpReceipt.userOpHash, "user op hash") }, 60000) - // }) - - // describe("Account:Hook Module Tests", async () => { - // test("install a mock Hook module", async () => { - // const isSupported = await smartAccount.supportsModule(ModuleType.Hooks) - // console.log(isSupported, "is supported") - - // const isInstalledBefore = await smartAccount.isModuleInstalled( - // ModuleType.Hooks, - // MOCK_HOOK - // ) - // console.log(isInstalledBefore, "is installed before") - - // const userOpResponse: UserOpResponse = await smartAccount.installModule( - // ModuleType.Hooks, - // MOCK_HOOK - // ) - // const userOpReceipt = await userOpResponse.wait() - // console.log(userOpReceipt, "user op receipt") - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Hooks, - // MOCK_HOOK - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) - - // test("get active hook", async () => { - // const activeHook: Address = await smartAccount.getActiveHook() - // console.log(activeHook, "active hook") - // expect(activeHook).toBe(MOCK_HOOK) - // }, 60000) - - // test("uninstall executor module", async () => { - // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - // const deInitData = encodeAbiParameters( - // [ - // { name: "prev", type: "address" }, - // { name: "disableModuleData", type: "bytes" } - // ], - // [prevAddress, toHex(stringToBytes(""))] - // ) - // const userOpResponse = await smartAccount.uninstallModule( - // ModuleType.Hooks, - // MOCK_HOOK, - // deInitData - // ) - // const userOpReceipt = await userOpResponse.wait() - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Hooks, - // MOCK_HOOK - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) - - // test("should fail to install same executor module", async () => { - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR - // ) - // expect(isInstalled).toBeTruthy() - - // const userOpResponse = smartAccount.installModule( - // ModuleType.Validation, - // K1_VALIDATOR, - // account.address - // ) - // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") - // }, 60000) - - // test("send user op using the executor", async () => { - // // const encodedCall = encodeFunctionData({ - // // abi: parseAbi(["function safeMint(address _to)"]), - // // functionName: "safeMint", - // // args: [recipient] - // // }) - // const transaction = { - // to: zeroAddress, - // data: "0x" - // } - - // const userOpResponse2 = await smartAccount.sendTransaction(transaction, { - // useExecutor: true - // }) - // const userOpReceipt2: UserOpReceipt = await userOpResponse2.wait() - - // console.log(userOpReceipt2.userOpHash, "user op hash 2") - // }, 60000) - // }) - - // describe("Account:Fallback Handler Module Tests", async () => { - // test("install a fallback handler Hook module", async () => { - // const isSupported = await smartAccount.supportsModule(ModuleType.Fallback) - // console.log(isSupported, "is supported") - - // const isInstalledBefore = await smartAccount.isModuleInstalled( - // ModuleType.Fallback, - // MOCK_FALLBACK_HANDLER - // ) - // console.log(isInstalledBefore, "is installed before") - - // const userOpResponse: UserOpResponse = await smartAccount.installModule( - // ModuleType.Fallback, - // MOCK_FALLBACK_HANDLER - // ) - // const userOpReceipt = await userOpResponse.wait() - // console.log(userOpReceipt, "user op receipt") - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Fallback, - // MOCK_FALLBACK_HANDLER - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) - - // test("get active hook", async () => { - // const activeHook: Address = await smartAccount.getActiveHook() - // console.log(activeHook, "active hook") - // expect(activeHook).toBe(MOCK_HOOK) - // }, 60000) - - // test("uninstall executor module", async () => { - // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - // const deInitData = encodeAbiParameters( - // [ - // { name: "prev", type: "address" }, - // { name: "disableModuleData", type: "bytes" } - // ], - // [prevAddress, toHex(stringToBytes(""))] - // ) - // const userOpResponse = await smartAccount.uninstallModule( - // ModuleType.Hooks, - // MOCK_HOOK, - // deInitData - // ) - // const userOpReceipt = await userOpResponse.wait() - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Hooks, - // MOCK_HOOK - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) - - // test("should fail to install same executor module", async () => { - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR - // ) - // expect(isInstalled).toBeTruthy() - - // const userOpResponse = smartAccount.installModule( - // ModuleType.Validation, - // K1_VALIDATOR, - // account.address - // ) - // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") - // }, 60000) - - // test("send user op using the executor", async () => { - // // const encodedCall = encodeFunctionData({ - // // abi: parseAbi(["function safeMint(address _to)"]), - // // functionName: "safeMint", - // // args: [recipient] - // // }) - // const transaction = { - // to: zeroAddress, - // data: "0x" - // } - - // const userOpResponse2 = await smartAccount.sendTransaction(transaction, { - // useExecutor: true - // }) - // const userOpReceipt2: UserOpReceipt = await userOpResponse2.wait() - - // console.log(userOpReceipt2.userOpHash, "user op hash 2") - // }, 60000) + // }) + + // describe("Account:Hook Module Tests", async () => { + // test("install a mock Hook module", async () => { + // const isSupported = await smartAccount.supportsModule(ModuleType.Hooks) + // console.log(isSupported, "is supported") + + // const isInstalledBefore = await smartAccount.isModuleInstalled( + // ModuleType.Hooks, + // MOCK_HOOK + // ) + // console.log(isInstalledBefore, "is installed before") + + // const userOpResponse: UserOpResponse = await smartAccount.installModule( + // ModuleType.Hooks, + // MOCK_HOOK + // ) + // const userOpReceipt = await userOpResponse.wait() + // console.log(userOpReceipt, "user op receipt") + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Hooks, + // MOCK_HOOK + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test("get active hook", async () => { + // const activeHook: Address = await smartAccount.getActiveHook() + // console.log(activeHook, "active hook") + // expect(activeHook).toBe(MOCK_HOOK) + // }, 60000) + + // test("uninstall executor module", async () => { + // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // const deInitData = encodeAbiParameters( + // [ + // { name: "prev", type: "address" }, + // { name: "disableModuleData", type: "bytes" } + // ], + // [prevAddress, toHex(stringToBytes(""))] + // ) + // const userOpResponse = await smartAccount.uninstallModule( + // ModuleType.Hooks, + // MOCK_HOOK, + // deInitData + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Hooks, + // MOCK_HOOK + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) + + // test("should fail to install same executor module", async () => { + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // K1_VALIDATOR + // ) + // expect(isInstalled).toBeTruthy() + + // const userOpResponse = smartAccount.installModule( + // ModuleType.Validation, + // K1_VALIDATOR, + // account.address + // ) + // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") + // }, 60000) + + // test("send user op using the executor", async () => { + // // const encodedCall = encodeFunctionData({ + // // abi: parseAbi(["function safeMint(address _to)"]), + // // functionName: "safeMint", + // // args: [recipient] + // // }) + // const transaction = { + // to: zeroAddress, + // data: "0x" + // } + + // const userOpResponse2 = await smartAccount.sendTransaction(transaction, { + // useExecutor: true + // }) + // const userOpReceipt2: UserOpReceipt = await userOpResponse2.wait() + + // console.log(userOpReceipt2.userOpHash, "user op hash 2") + // }, 60000) + // }) + + // describe("Account:Fallback Handler Module Tests", async () => { + // test("install a fallback handler Hook module", async () => { + // const isSupported = await smartAccount.supportsModule(ModuleType.Fallback) + // console.log(isSupported, "is supported") + + // const isInstalledBefore = await smartAccount.isModuleInstalled( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER + // ) + // console.log(isInstalledBefore, "is installed before") + + // const userOpResponse: UserOpResponse = await smartAccount.installModule( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER + // ) + // const userOpReceipt = await userOpResponse.wait() + // console.log(userOpReceipt, "user op receipt") + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test("get active hook", async () => { + // const activeHook: Address = await smartAccount.getActiveHook() + // console.log(activeHook, "active hook") + // expect(activeHook).toBe(MOCK_HOOK) + // }, 60000) + + // test("uninstall executor module", async () => { + // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // const deInitData = encodeAbiParameters( + // [ + // { name: "prev", type: "address" }, + // { name: "disableModuleData", type: "bytes" } + // ], + // [prevAddress, toHex(stringToBytes(""))] + // ) + // const userOpResponse = await smartAccount.uninstallModule( + // ModuleType.Hooks, + // MOCK_HOOK, + // deInitData + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Hooks, + // MOCK_HOOK + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) + + // test("should fail to install same executor module", async () => { + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // K1_VALIDATOR + // ) + // expect(isInstalled).toBeTruthy() + + // const userOpResponse = smartAccount.installModule( + // ModuleType.Validation, + // K1_VALIDATOR, + // account.address + // ) + // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") + // }, 60000) + + // test("send user op using the executor", async () => { + // // const encodedCall = encodeFunctionData({ + // // abi: parseAbi(["function safeMint(address _to)"]), + // // functionName: "safeMint", + // // args: [recipient] + // // }) + // const transaction = { + // to: zeroAddress, + // data: "0x" + // } + + // const userOpResponse2 = await smartAccount.sendTransaction(transaction, { + // useExecutor: true + // }) + // const userOpReceipt2: UserOpReceipt = await userOpResponse2.wait() + + // console.log(userOpReceipt2.userOpHash, "user op hash 2") + // }, 60000) }) }) From f9cb2617851f7afc9e46125d3d449c632cd3c46d Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Tue, 18 Jun 2024 18:42:21 +0300 Subject: [PATCH 1205/1247] fix: fix mode --- src/account/BiconomySmartAccountV2.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 450f9806f..f50e2e55b 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -831,7 +831,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @returns encoded data for execute function */ async encodeExecute(transaction: Transaction): Promise<Hex> { - const mode = EXECUTE_BATCH + const mode = EXECUTE_SINGLE const executionCalldata = encodePacked( ["address", "uint256", "bytes"], @@ -2163,14 +2163,13 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ): Promise<UserOpResponse> { let executorCalldata: Hex = "0x" if (transactions.length > 1) { - const execs: { target: Hex; value: bigint; callData: Hex }[] = [] - for (const tx of transactions) { - execs.push({ + const execs: { target: Hex; value: bigint; callData: Hex }[] = transactions.map((tx) => { + return { target: tx.to as Hex, callData: (tx.data ?? "0x") as Hex, value: BigInt(tx.value ?? 0n) - }) - } + } + }) const executionCalldataPrep = ethers.AbiCoder.defaultAbiCoder().encode( [Executions], [execs] @@ -2181,7 +2180,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { "function executeBatchViaAccount(address account, bytes calldata execs) external" ]), functionName: "executeBatchViaAccount", - args: [(await this.getAddress()) as Hex, executionCalldataPrep] + args: [await this.getAddress(), executionCalldataPrep] }) } else { executorCalldata = encodeFunctionData({ @@ -2190,7 +2189,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ]), functionName: "executeViaAccount", args: [ - (await this.getAddress()) as Hex, + await this.getAddress(), transactions[0].to as Hex, BigInt(transactions[0].value ?? 0), transactions[0].data as Hex From 330d3ac54e1ed48db8eb270d921625cb32bcb560 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Tue, 18 Jun 2024 18:42:52 +0300 Subject: [PATCH 1206/1247] fix: lint --- src/account/BiconomySmartAccountV2.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index f50e2e55b..08db08c2a 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -2163,13 +2163,14 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ): Promise<UserOpResponse> { let executorCalldata: Hex = "0x" if (transactions.length > 1) { - const execs: { target: Hex; value: bigint; callData: Hex }[] = transactions.map((tx) => { - return { - target: tx.to as Hex, - callData: (tx.data ?? "0x") as Hex, - value: BigInt(tx.value ?? 0n) - } - }) + const execs: { target: Hex; value: bigint; callData: Hex }[] = + transactions.map((tx) => { + return { + target: tx.to as Hex, + callData: (tx.data ?? "0x") as Hex, + value: BigInt(tx.value ?? 0n) + } + }) const executionCalldataPrep = ethers.AbiCoder.defaultAbiCoder().encode( [Executions], [execs] From 7363f52419f642f62b02f8afb4456a8e5ae04b06 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Wed, 19 Jun 2024 11:44:06 +0300 Subject: [PATCH 1207/1247] feat: added tests for hook and handler --- tests/account/write.test.ts | 699 +++++++++++++++++------------------- 1 file changed, 321 insertions(+), 378 deletions(-) diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 4098dc613..57de21ec1 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -1,3 +1,4 @@ +import { ethers } from "ethers" import { http, type Address, @@ -17,6 +18,7 @@ import { import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { beforeAll, describe, expect, test } from "vitest" import { + GENERIC_FALLBACK_SELECTOR, MOCK_EXECUTOR, MOCK_FALLBACK_HANDLER, MOCK_HOOK, @@ -106,143 +108,143 @@ describe("Account:Write", async () => { ) }) - // describe("Account:Basics", async () => { - // test("Build a user op with pimlico bundler", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall - // } - // const userOp = await smartAccount.buildUserOp([transaction]) - // expect(userOp).toBeTruthy() - // }, 60000) - - // test("Mint NFT - Single Call", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall - // } - // const gasCost = await smartAccount.getGasEstimate([transaction]) - // console.log(gasCost, "gasCost") - - // const userOpHash = await smartAccount.sendTransaction([transaction]) - - // expect(userOpHash).toBeTruthy() - // }, 60000) - - // test("Mint NFT's - Batch Call", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall, - // value: 0n - // } - // const userOpResponse = await smartAccount.sendTransaction([ - // transaction, - // transaction - // ]) - // const userOpReceipt: UserOpReceipt = await userOpResponse.wait() - // console.log(userOpReceipt.userOpHash, "user op hash") - - // expect(userOpReceipt.success).toBe(true) - // }, 60000) - // }) - - // describe("Account:Validation Module", async () => { - // test("should install a dummy K1Validator module", async () => { - // const newK1ValidatorContract = - // "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - // const userOpResponse: UserOpResponse = await smartAccount.installModule( - // ModuleType.Validation, - // newK1ValidatorContract, - // account.address - // ) - // const userOpReceipt = await userOpResponse.wait() - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // newK1ValidatorContract - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) - - // test("should uninstall dummy K1Validator module", async () => { - // const newK1ValidatorContract = - // "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - - // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - // const deInitData = encodeAbiParameters( - // [ - // { name: "prev", type: "address" }, - // { name: "disableModuleData", type: "bytes" } - // ], - // [prevAddress, toHex(stringToBytes(""))] - // ) - // const userOpResponse = await smartAccount.uninstallModule( - // ModuleType.Validation, - // newK1ValidatorContract, - // deInitData - // ) - // const userOpReceipt = await userOpResponse.wait() - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // newK1ValidatorContract - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) - - // test("should fail to install an already installed Validator", async () => { - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR - // ) - // expect(isInstalled).toBeTruthy() - - // const userOpResponse = smartAccount.installModule( - // ModuleType.Validation, - // K1_VALIDATOR, - // account.address - // ) - // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") - // }, 60000) - // }) + describe("Account:Basics", async () => { + test("Build a user op with pimlico bundler", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const userOp = await smartAccount.buildUserOp([transaction]) + expect(userOp).toBeTruthy() + }, 60000) + + test("Mint NFT - Single Call", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const gasCost = await smartAccount.getGasEstimate([transaction]) + console.log(gasCost, "gasCost") + + const userOpHash = await smartAccount.sendTransaction([transaction]) + + expect(userOpHash).toBeTruthy() + }, 60000) + + test("Mint NFT's - Batch Call", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + value: 0n + } + const userOpResponse = await smartAccount.sendTransaction([ + transaction, + transaction + ]) + const userOpReceipt: UserOpReceipt = await userOpResponse.wait() + console.log(userOpReceipt.userOpHash, "user op hash") + + expect(userOpReceipt.success).toBe(true) + }, 60000) + }) + + describe("Account:Validation Module", async () => { + test("should install a dummy K1Validator module", async () => { + const newK1ValidatorContract = + "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + const userOpResponse: UserOpResponse = await smartAccount.installModule( + ModuleType.Validation, + newK1ValidatorContract, + account.address + ) + const userOpReceipt = await userOpResponse.wait() + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + newK1ValidatorContract + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeTruthy() + }, 60000) + + test("should uninstall dummy K1Validator module", async () => { + const newK1ValidatorContract = + "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + + const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + const deInitData = encodeAbiParameters( + [ + { name: "prev", type: "address" }, + { name: "disableModuleData", type: "bytes" } + ], + [prevAddress, toHex(stringToBytes(""))] + ) + const userOpResponse = await smartAccount.uninstallModule( + ModuleType.Validation, + newK1ValidatorContract, + deInitData + ) + const userOpReceipt = await userOpResponse.wait() + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + newK1ValidatorContract + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeFalsy() + expect(userOpReceipt).toBeTruthy() + }, 60000) + + test("should fail to install an already installed Validator", async () => { + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + K1_VALIDATOR + ) + expect(isInstalled).toBeTruthy() + + const userOpResponse = smartAccount.installModule( + ModuleType.Validation, + K1_VALIDATOR, + account.address + ) + await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") + }, 60000) + }) describe("Account:Execution Module Tests", async () => { - // test("install a mock Execution module", async () => { - // const userOpResponse: UserOpResponse = await smartAccount.installModule( - // ModuleType.Execution, - // MOCK_EXECUTOR, - // account.address - // ) - // const userOpReceipt = await userOpResponse.wait() - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Execution, - // MOCK_EXECUTOR - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) + test("install a mock Execution module", async () => { + const userOpResponse: UserOpResponse = await smartAccount.installModule( + ModuleType.Execution, + MOCK_EXECUTOR, + account.address + ) + const userOpReceipt = await userOpResponse.wait() + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Execution, + MOCK_EXECUTOR + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeTruthy() + }, 60000) test("get installed executors", async () => { const installedExecutors: Address[] = @@ -251,61 +253,64 @@ describe("Account:Write", async () => { expect(installedExecutors.includes(MOCK_EXECUTOR)).toBeTruthy() }, 60000) - // test("uninstall executor module", async () => { - // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - // const deInitData = encodeAbiParameters( - // [ - // { name: "prev", type: "address" }, - // { name: "disableModuleData", type: "bytes" } - // ], - // [prevAddress, toHex(stringToBytes(""))] - // ) - // const userOpResponse = await smartAccount.uninstallModule( - // ModuleType.Execution, - // MOCK_EXECUTOR, - // deInitData - // ) - // const userOpReceipt = await userOpResponse.wait() - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Execution, - // MOCK_EXECUTOR - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) - - // test("should fail to install same executor module", async () => { - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR - // ) - // expect(isInstalled).toBeTruthy() - - // const userOpResponse = smartAccount.installModule( - // ModuleType.Validation, - // K1_VALIDATOR, - // account.address - // ) - // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") - // }, 60000) - - // test("send user op using the executor call type single", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, - // data: encodedCall - // } - // const userOpResponse = await smartAccount.sendTransactionWithExecutor(transaction, MOCK_EXECUTOR); - // const userOpReceipt: UserOpReceipt = await userOpResponse.wait() - // console.log(userOpReceipt.userOpHash, "user op hash"); - // }, 60000) + test("uninstall executor module", async () => { + const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + const deInitData = encodeAbiParameters( + [ + { name: "prev", type: "address" }, + { name: "disableModuleData", type: "bytes" } + ], + [prevAddress, toHex(stringToBytes(""))] + ) + const userOpResponse = await smartAccount.uninstallModule( + ModuleType.Execution, + MOCK_EXECUTOR, + deInitData + ) + const userOpReceipt = await userOpResponse.wait() + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Execution, + MOCK_EXECUTOR + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeFalsy() + expect(userOpReceipt).toBeTruthy() + }, 60000) + + test("should fail to install same executor module", async () => { + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + K1_VALIDATOR + ) + expect(isInstalled).toBeTruthy() + + const userOpResponse = smartAccount.installModule( + ModuleType.Validation, + K1_VALIDATOR, + account.address + ) + await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") + }, 60000) + + test("send user op using the executor call type single", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, + data: encodedCall + } + const userOpResponse = await smartAccount.sendTransactionWithExecutor( + transaction, + MOCK_EXECUTOR + ) + const userOpReceipt: UserOpReceipt = await userOpResponse.wait() + console.log(userOpReceipt.userOpHash, "user op hash") + }, 60000) test("send user op using the executor call type batch", async () => { const encodedCall = encodeFunctionData({ @@ -324,193 +329,131 @@ describe("Account:Write", async () => { const userOpReceipt: UserOpReceipt = await userOpResponse.wait() console.log(userOpReceipt.userOpHash, "user op hash") }, 60000) - // }) - - // describe("Account:Hook Module Tests", async () => { - // test("install a mock Hook module", async () => { - // const isSupported = await smartAccount.supportsModule(ModuleType.Hooks) - // console.log(isSupported, "is supported") - - // const isInstalledBefore = await smartAccount.isModuleInstalled( - // ModuleType.Hooks, - // MOCK_HOOK - // ) - // console.log(isInstalledBefore, "is installed before") - - // const userOpResponse: UserOpResponse = await smartAccount.installModule( - // ModuleType.Hooks, - // MOCK_HOOK - // ) - // const userOpReceipt = await userOpResponse.wait() - // console.log(userOpReceipt, "user op receipt") - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Hooks, - // MOCK_HOOK - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) - - // test("get active hook", async () => { - // const activeHook: Address = await smartAccount.getActiveHook() - // console.log(activeHook, "active hook") - // expect(activeHook).toBe(MOCK_HOOK) - // }, 60000) - - // test("uninstall executor module", async () => { - // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - // const deInitData = encodeAbiParameters( - // [ - // { name: "prev", type: "address" }, - // { name: "disableModuleData", type: "bytes" } - // ], - // [prevAddress, toHex(stringToBytes(""))] - // ) - // const userOpResponse = await smartAccount.uninstallModule( - // ModuleType.Hooks, - // MOCK_HOOK, - // deInitData - // ) - // const userOpReceipt = await userOpResponse.wait() - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Hooks, - // MOCK_HOOK - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) - - // test("should fail to install same executor module", async () => { - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR - // ) - // expect(isInstalled).toBeTruthy() - - // const userOpResponse = smartAccount.installModule( - // ModuleType.Validation, - // K1_VALIDATOR, - // account.address - // ) - // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") - // }, 60000) - - // test("send user op using the executor", async () => { - // // const encodedCall = encodeFunctionData({ - // // abi: parseAbi(["function safeMint(address _to)"]), - // // functionName: "safeMint", - // // args: [recipient] - // // }) - // const transaction = { - // to: zeroAddress, - // data: "0x" - // } - - // const userOpResponse2 = await smartAccount.sendTransaction(transaction, { - // useExecutor: true - // }) - // const userOpReceipt2: UserOpReceipt = await userOpResponse2.wait() - - // console.log(userOpReceipt2.userOpHash, "user op hash 2") - // }, 60000) - // }) - - // describe("Account:Fallback Handler Module Tests", async () => { - // test("install a fallback handler Hook module", async () => { - // const isSupported = await smartAccount.supportsModule(ModuleType.Fallback) - // console.log(isSupported, "is supported") - - // const isInstalledBefore = await smartAccount.isModuleInstalled( - // ModuleType.Fallback, - // MOCK_FALLBACK_HANDLER - // ) - // console.log(isInstalledBefore, "is installed before") - - // const userOpResponse: UserOpResponse = await smartAccount.installModule( - // ModuleType.Fallback, - // MOCK_FALLBACK_HANDLER - // ) - // const userOpReceipt = await userOpResponse.wait() - // console.log(userOpReceipt, "user op receipt") - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Fallback, - // MOCK_FALLBACK_HANDLER - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) - - // test("get active hook", async () => { - // const activeHook: Address = await smartAccount.getActiveHook() - // console.log(activeHook, "active hook") - // expect(activeHook).toBe(MOCK_HOOK) - // }, 60000) - - // test("uninstall executor module", async () => { - // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - // const deInitData = encodeAbiParameters( - // [ - // { name: "prev", type: "address" }, - // { name: "disableModuleData", type: "bytes" } - // ], - // [prevAddress, toHex(stringToBytes(""))] - // ) - // const userOpResponse = await smartAccount.uninstallModule( - // ModuleType.Hooks, - // MOCK_HOOK, - // deInitData - // ) - // const userOpReceipt = await userOpResponse.wait() - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Hooks, - // MOCK_HOOK - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) - - // test("should fail to install same executor module", async () => { - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR - // ) - // expect(isInstalled).toBeTruthy() - - // const userOpResponse = smartAccount.installModule( - // ModuleType.Validation, - // K1_VALIDATOR, - // account.address - // ) - // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") - // }, 60000) - - // test("send user op using the executor", async () => { - // // const encodedCall = encodeFunctionData({ - // // abi: parseAbi(["function safeMint(address _to)"]), - // // functionName: "safeMint", - // // args: [recipient] - // // }) - // const transaction = { - // to: zeroAddress, - // data: "0x" - // } - - // const userOpResponse2 = await smartAccount.sendTransaction(transaction, { - // useExecutor: true - // }) - // const userOpReceipt2: UserOpReceipt = await userOpResponse2.wait() - - // console.log(userOpReceipt2.userOpHash, "user op hash 2") - // }, 60000) + }) + + describe("Account:Hook Module Tests", async () => { + test("install a mock Hook module", async () => { + const isSupported = await smartAccount.supportsModule(ModuleType.Hooks) + console.log(isSupported, "is supported") + + const isInstalledBefore = await smartAccount.isModuleInstalled( + ModuleType.Hooks, + MOCK_HOOK + ) + console.log(isInstalledBefore, "is installed before") + + const userOpResponse: UserOpResponse = await smartAccount.installModule( + ModuleType.Hooks, + MOCK_HOOK + ) + const userOpReceipt = await userOpResponse.wait() + console.log(userOpReceipt, "user op receipt") + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Hooks, + MOCK_HOOK + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeTruthy() + }, 60000) + + test("get active hook", async () => { + const activeHook: Address = await smartAccount.getActiveHook() + console.log(activeHook, "active hook") + expect(activeHook).toBe(MOCK_HOOK) + }, 60000) + + test("uninstall hook module", async () => { + const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + const deInitData = encodeAbiParameters( + [ + { name: "prev", type: "address" }, + { name: "disableModuleData", type: "bytes" } + ], + [prevAddress, toHex(stringToBytes(""))] + ) + const userOpResponse = await smartAccount.uninstallModule( + ModuleType.Hooks, + MOCK_HOOK, + deInitData + ) + const userOpReceipt = await userOpResponse.wait() + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Hooks, + MOCK_HOOK + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeFalsy() + expect(userOpReceipt).toBeTruthy() + }, 60000) + }) + + describe("Account:Fallback Handler Module Tests", async () => { + test("install a fallback handler Hook module", async () => { + const isSupported = await smartAccount.supportsModule(ModuleType.Fallback) + console.log(isSupported, "is supported") + + const isInstalledBefore = await smartAccount.isModuleInstalled( + ModuleType.Fallback, + MOCK_FALLBACK_HANDLER, + ethers.AbiCoder.defaultAbiCoder().encode( + ["bytes4"], + [GENERIC_FALLBACK_SELECTOR as Hex] + ) as Hex + ) + console.log(isInstalledBefore, "is installed before") + + const userOpResponse: UserOpResponse = await smartAccount.installModule( + ModuleType.Fallback, + MOCK_FALLBACK_HANDLER, + ethers.AbiCoder.defaultAbiCoder().encode( + ["bytes4"], + [GENERIC_FALLBACK_SELECTOR as Hex] + ) as Hex + ) + const userOpReceipt = await userOpResponse.wait() + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Fallback, + MOCK_FALLBACK_HANDLER, + ethers.AbiCoder.defaultAbiCoder().encode( + ["bytes4"], + [GENERIC_FALLBACK_SELECTOR as Hex] + ) as Hex + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeTruthy() + }, 60000) + + test("uninstall handler module", async () => { + const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + const deInitData = ethers.AbiCoder.defaultAbiCoder().encode( + ["bytes4"], + [GENERIC_FALLBACK_SELECTOR as Hex] + ) as Hex + const userOpResponse = await smartAccount.uninstallModule( + ModuleType.Fallback, + MOCK_FALLBACK_HANDLER, + deInitData + ) + const userOpReceipt = await userOpResponse.wait() + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Fallback, + MOCK_FALLBACK_HANDLER, + ethers.AbiCoder.defaultAbiCoder().encode( + ["bytes4"], + [GENERIC_FALLBACK_SELECTOR as Hex] + ) as Hex + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeFalsy() + expect(userOpReceipt).toBeTruthy() + }, 60000) }) }) From 9d1ece27659a86c9d2d0e2a5aa05361031de53b4 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Wed, 19 Jun 2024 20:27:39 +0300 Subject: [PATCH 1208/1247] feat: cleaning & fix batch call from executor --- src/account/BiconomySmartAccountV2.ts | 150 +++++++++++--------------- src/account/utils/Types.ts | 1 - src/account/utils/Utils.ts | 3 +- src/bundler/Bundler.ts | 18 ++-- src/bundler/interfaces/IBundler.ts | 2 - src/bundler/utils/Constants.ts | 2 +- src/bundler/utils/HelperFunction.ts | 2 - src/index.ts | 1 - src/modules/K1ValidatorModule.ts | 8 +- src/modules/utils/Helper.ts | 20 ++-- src/modules/utils/Types.ts | 56 +++++----- src/paymaster/BiconomyPaymaster.ts | 1 - 12 files changed, 107 insertions(+), 157 deletions(-) diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/BiconomySmartAccountV2.ts index 08db08c2a..5bfe9f5bc 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/BiconomySmartAccountV2.ts @@ -1,5 +1,4 @@ -import type { UserOpResponse } from "@biconomy/account" -import { ParamType, ethers, zeroPadBytes } from "ethers" +import { ethers, zeroPadBytes } from "ethers" import { http, type Address, @@ -11,26 +10,23 @@ import { concat, concatHex, createPublicClient, - createWalletClient, decodeFunctionData, encodeAbiParameters, encodeFunctionData, encodePacked, formatUnits, getContract, - getContractAddress, - getCreate2Address, keccak256, - pad, parseAbi, + parseAbiItem, parseAbiParameters, toBytes } from "viem" -import { toAccount } from "viem/accounts" import { Bundler, Executions, - type GetUserOperationGasPriceReturnType + type GetUserOperationGasPriceReturnType, + type UserOpResponse } from "../bundler/index.js" import type { IBundler } from "../bundler/interfaces/IBundler.js" import { EXECUTE_BATCH, EXECUTE_SINGLE } from "../bundler/utils/Constants.js" @@ -62,10 +58,8 @@ import { BaseSmartContractAccount } from "./BaseSmartContractAccount.js" import { NexusAccountAbi } from "./abi/SmartAccount.js" import { ADDRESS_ZERO, - BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION, DEFAULT_BICONOMY_FACTORY_ADDRESS, DEFAULT_ENTRYPOINT_ADDRESS, - DEFAULT_FALLBACK_HANDLER_ADDRESS, ERC20_ABI, ERROR_MESSAGES, MAGIC_BYTES, @@ -80,7 +74,6 @@ import type { CounterFactualAddressParam, NonceOptions, PaymasterUserOperationDto, - SimulationType, SupportedToken, Transaction, TransferOwnershipCompatibleModule, @@ -93,8 +86,7 @@ import { packUserOp } from "./utils/Utils.js" -type UserOperationKey = keyof UserOperationStruct - +// type UserOperationKey = keyof UserOperationStruct export class BiconomySmartAccountV2 extends BaseSmartContractAccount { private sessionData?: ModuleInfo @@ -115,13 +107,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { PublicClient | WalletClient > - private defaultFallbackHandlerAddress: Hex - - private implementationAddress: Hex + // private scanForUpgradedAccountsFromV1!: boolean - private scanForUpgradedAccountsFromV1!: boolean - - private maxIndexForScan!: bigint + // private maxIndexForScan!: bigint // Validation module responsible for account deployment initCode. This acts as a default authorization module. defaultValidationModule!: BaseValidationModule @@ -161,9 +149,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.index = biconomySmartAccountConfig.index ?? 0n this.chainId = biconomySmartAccountConfig.chainId this.bundler = biconomySmartAccountConfig.bundler - this.implementationAddress = - biconomySmartAccountConfig.implementationAddress ?? - (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex) + // this.implementationAddress = + // biconomySmartAccountConfig.implementationAddress ?? + // (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex) if (biconomySmartAccountConfig.paymasterUrl) { this.paymaster = new Paymaster({ @@ -179,14 +167,14 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.bundler = biconomySmartAccountConfig.bundler - const defaultFallbackHandlerAddress = - this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS - ? DEFAULT_FALLBACK_HANDLER_ADDRESS - : biconomySmartAccountConfig.defaultFallbackHandler - if (!defaultFallbackHandlerAddress) { - throw new Error("Default Fallback Handler address is not provided") - } - this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress + // const defaultFallbackHandlerAddress = + // this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS + // ? DEFAULT_FALLBACK_HANDLER_ADDRESS + // : biconomySmartAccountConfig.defaultFallbackHandler + // if (!defaultFallbackHandlerAddress) { + // throw new Error("Default Fallback Handler address is not provided") + // } + // this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress // Added bang operator to avoid null check as the constructor have these params as optional this.defaultValidationModule = @@ -207,10 +195,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { ) }) - this.scanForUpgradedAccountsFromV1 = - biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false - this.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10n - this.getAccountAddress() + // this.scanForUpgradedAccountsFromV1 = + // biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false + // this.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10n + // this.getAccountAddress() } /** @@ -578,7 +566,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { withdrawalRequests?: WithdrawalRequest[] | null, defaultRecipient?: Hex | null, buildUseropDto?: BuildUserOpOptions - ): Promise<Hash> { + ): Promise<UserOpResponse> { const accountAddress = this.accountAddress ?? (await this.getAccountAddress()) @@ -659,11 +647,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { params?.validationModule ?? this.defaultValidationModule const index = params?.index ?? this.index - const maxIndexForScan = params?.maxIndexForScan ?? this.maxIndexForScan - // Review: default behavior - const scanForUpgradedAccountsFromV1 = - params?.scanForUpgradedAccountsFromV1 ?? - this.scanForUpgradedAccountsFromV1 + // const maxIndexForScan = params?.maxIndexForScan ?? this.maxIndexForScan + // // Review: default behavior + // const scanForUpgradedAccountsFromV1 = + // params?.scanForUpgradedAccountsFromV1 ?? + // this.scanForUpgradedAccountsFromV1 // if it's intended to detect V1 upgraded accounts // if (scanForUpgradedAccountsFromV1) { @@ -832,7 +820,6 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { */ async encodeExecute(transaction: Transaction): Promise<Hex> { const mode = EXECUTE_SINGLE - const executionCalldata = encodePacked( ["address", "uint256", "bytes"], [ @@ -901,9 +888,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } validateUserOp( - userOp: Partial<UserOperationStruct>, - requiredFields: UserOperationKey[] + // userOp: Partial<UserOperationStruct>, + // requiredFields: UserOperationKey[] ): boolean { + // console.log(userOp, "userOp"); // for (const field of requiredFields) { // if (isNullOrUndefined(userOp[field])) { // throw new Error(`${String(field)} is missing in the UserOp`) @@ -920,19 +908,15 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.isActiveValidationModuleDefined() // TODO REMOVE COMMENT AND CHECK FOR PIMLICO USER OP FIELDS - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "factory", - "factoryData", - "callGasLimit", - "verificationGasLimit", - "preVerificationGas", - "maxFeePerGas", - "maxPriorityFeePerGas", - "paymasterAndData" - ] - this.validateUserOp(userOp, requiredFields) + // const requiredFields: UserOperationKey[] = [ + // "sender", + // "nonce", + // "callGasLimit", + // "signature", + // "maxFeePerGas", + // "maxPriorityFeePerGas", + // ] + // this.validateUserOp(userOp, requiredFields) const userOpHash = await this.getUserOpHash(userOp) const moduleSig = (await this.activeValidationModule.signUserOpHash( @@ -1225,10 +1209,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { delete userOp.signature const userOperation = await this.signUserOp(userOp, params) - const bundlerResponse = await this.sendSignedUserOp( - userOperation, - params?.simulationType - ) + const bundlerResponse = await this.sendSignedUserOp(userOperation) return bundlerResponse } @@ -1240,23 +1221,16 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * @description This function call will take 'signedUserOp' as input and send it to the bundler * @returns */ - async sendSignedUserOp( - userOp: UserOperationStruct, - simulationType?: SimulationType - ): Promise<UserOpResponse> { + async sendSignedUserOp(userOp: UserOperationStruct): Promise<UserOpResponse> { // TODO REMOVE COMMENT AND CHECK FOR PIMLICO USER OP FIELDS // const requiredFields: UserOperationKey[] = [ // "sender", // "nonce", - // "initCode", - // "callData", - // "callGasLimit", // "verificationGasLimit", // "preVerificationGas", // "maxFeePerGas", // "maxPriorityFeePerGas", - // "paymasterAndData", - // "signature" + // "signature", // ] // this.validateUserOp(userOp, requiredFields) if (!this.bundler) throw new Error("Bundler is not provided") @@ -1269,7 +1243,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } async getUserOpHash(userOp: Partial<UserOperationStruct>): Promise<Hex> { - const packedUserOp = packUserOp(userOp, true) + const packedUserOp = packUserOp(userOp) const userOpHash = keccak256(packedUserOp as Hex) const enc = encodeAbiParameters( parseAbiParameters("bytes32, address, uint256"), @@ -1283,13 +1257,12 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { stateOverrideSet?: StateOverrideSet ): Promise<Partial<UserOperationStruct>> { if (!this.bundler) throw new Error("Bundler is not provided") - const requiredFields: UserOperationKey[] = [ - "sender", - "nonce", - "initCode", - "callData" - ] - this.validateUserOp(userOp, requiredFields) + // const requiredFields: UserOperationKey[] = [ + // "sender", + // "nonce", + // "callData" + // ] + // this.validateUserOp(userOp, requiredFields) const finalUserOp = userOp @@ -1406,7 +1379,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { newOwner: Address, moduleAddress: TransferOwnershipCompatibleModule, buildUseropDto?: BuildUserOpOptions - ): Promise<Hash> { + ): Promise<UserOpResponse> { const encodedCall = encodeFunctionData({ abi: parseAbi(["function transferOwnership(address newOwner) public"]), functionName: "transferOwnership", @@ -1416,7 +1389,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { to: moduleAddress, data: encodedCall } - const userOpResponse: Hash = await this.sendTransaction( + const userOpResponse: UserOpResponse = await this.sendTransaction( transaction, buildUseropDto ) @@ -2171,17 +2144,16 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { value: BigInt(tx.value ?? 0n) } }) - const executionCalldataPrep = ethers.AbiCoder.defaultAbiCoder().encode( - [Executions], - [execs] - ) as Hex + + const executeBatchViaAccountAbi = parseAbiItem([ + "function executeBatchViaAccount(address account, Execution[] calldata execs) external", + "struct Execution { address target; uint256 value; bytes callData; }" + ]) executorCalldata = encodeFunctionData({ - abi: parseAbi([ - "function executeBatchViaAccount(address account, bytes calldata execs) external" - ]), + abi: [executeBatchViaAccountAbi], functionName: "executeBatchViaAccount", - args: [await this.getAddress(), executionCalldataPrep] + args: [await this.getAddress(), execs] }) } else { executorCalldata = encodeFunctionData({ @@ -2215,7 +2187,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const accountContract = await this._getAccountContract() return ( (await accountContract.read.getValidatorsPaginated([ - "0x0000000000000000000000000000000000000001", + this.SENTINEL_MODULE, 100 ])) as Address[][] )[0] as Address[] @@ -2225,7 +2197,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const accountContract = await this._getAccountContract() return ( (await accountContract.read.getExecutorsPaginated([ - "0x0000000000000000000000000000000000000001", + this.SENTINEL_MODULE, 100 ])) as Address[][] )[0] as Address[] diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 0426d2c7e..1fd0ff046 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -1,4 +1,3 @@ -import { UndefinedInitialDataOptions } from "@tanstack/react-query" import type { Address, Chain, diff --git a/src/account/utils/Utils.ts b/src/account/utils/Utils.ts index 274179d1e..1d82035e6 100644 --- a/src/account/utils/Utils.ts +++ b/src/account/utils/Utils.ts @@ -22,8 +22,7 @@ import type { BiconomySmartAccountV2Config } from "./Types.js" * "false" to pack entire UserOp, for calculating the calldata cost of putting it on-chain. */ export function packUserOp( - userOperation: Partial<UserOperationStruct>, - forSignature = true + userOperation: Partial<UserOperationStruct> ): string { const hashedInitCode = keccak256( userOperation.factory && userOperation.factoryData diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index 8480cfaa8..0f70a4826 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -1,6 +1,5 @@ import { http, type Hash, type PublicClient, createPublicClient } from "viem" -import type { StateOverrideSet, UserOperationStruct } from "../account" -import type { SimulationType } from "../account" +import type { UserOperationStruct } from "../account" import { HttpMethod, getChain, @@ -24,14 +23,13 @@ import type { GetUserOperationGasPriceReturnType, GetUserOperationReceiptResponse, GetUserOperationStatusResponse, - SendUserOpResponse, UserOpByHashResponse, UserOpGasResponse, UserOpReceipt, UserOpResponse, UserOpStatus } from "./utils/Types.js" -import { deepHexlify, extractChainIdFromBundlerUrl } from "./utils/Utils.js" +import { deepHexlify } from "./utils/Utils.js" /** * This class implements IBundler interface. @@ -105,12 +103,8 @@ export class Bundler implements IBundler { * @returns Promise<UserOpGasPricesResponse> */ async estimateUserOpGas( - _userOp: UserOperationStruct, - stateOverrideSet?: StateOverrideSet + _userOp: UserOperationStruct ): Promise<UserOpGasResponse> { - // expected dummySig and possibly dummmy paymasterAndData should be provided by the caller - // bundler doesn't know account and paymaster implementation - // const userOp = transformUserOP(_userOp) const bundlerUrl = this.getBundlerUrl() const response: { @@ -130,10 +124,10 @@ export class Bundler implements IBundler { "Bundler" ) const userOpGasResponse = response - for (const key in userOpGasResponse) { + for (const key in userOpGasResponse.result) { if ( - userOpGasResponse[key as keyof UserOpGasResponse] === undefined || - userOpGasResponse[key as keyof UserOpGasResponse] === null + userOpGasResponse.result[key as keyof UserOpGasResponse] === null || + userOpGasResponse.result[key as keyof UserOpGasResponse] === undefined ) { throw new Error(`Got undefined ${key} from bundler`) } diff --git a/src/bundler/interfaces/IBundler.ts b/src/bundler/interfaces/IBundler.ts index 8b997ab5a..bb465ee15 100644 --- a/src/bundler/interfaces/IBundler.ts +++ b/src/bundler/interfaces/IBundler.ts @@ -1,5 +1,3 @@ -import type { Hash } from "viem" -import type { SimulationType } from "../../account" import type { StateOverrideSet, UserOperationStruct } from "../../account" import type { GetUserOperationGasPriceReturnType, diff --git a/src/bundler/utils/Constants.ts b/src/bundler/utils/Constants.ts index 0fe405419..41badd160 100644 --- a/src/bundler/utils/Constants.ts +++ b/src/bundler/utils/Constants.ts @@ -1,4 +1,4 @@ -import { concat, pad, toHex } from "viem" +import { concat, pad } from "viem" import { CALLTYPE_BATCH, CALLTYPE_SINGLE, diff --git a/src/bundler/utils/HelperFunction.ts b/src/bundler/utils/HelperFunction.ts index dd1b110be..83e2e0745 100644 --- a/src/bundler/utils/HelperFunction.ts +++ b/src/bundler/utils/HelperFunction.ts @@ -1,5 +1,3 @@ -import type { BigNumberish, UserOperationStruct } from "../../account" - // Will convert the userOp hex, bigInt and number values to hex strings // export const transformUserOP = ( // userOp: UserOperationStruct diff --git a/src/index.ts b/src/index.ts index b7976357d..903f1f5b4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,3 @@ export * from "./account" -export * from "./bundler" export * from "./paymaster" export * from "./modules" diff --git a/src/modules/K1ValidatorModule.ts b/src/modules/K1ValidatorModule.ts index 97f5c06ad..e11a323d3 100644 --- a/src/modules/K1ValidatorModule.ts +++ b/src/modules/K1ValidatorModule.ts @@ -1,10 +1,4 @@ -import { - type Hex, - encodeFunctionData, - getAddress, - parseAbi, - toBytes -} from "viem" +import { type Hex, encodeFunctionData, getAddress, parseAbi } from "viem" import { K1_VALIDATOR, type SmartAccountSigner, diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index c70cbfc58..8f3a142b4 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -75,16 +75,16 @@ export interface DeprecatedPermission { rules: DeprecatedRule[] } -export interface Permission { - /** The address of the contract to which the permission applies */ - destContract: `0x${string}` - /** The function selector of the contract to which the permission applies */ - functionSelector: `0x${string}` - /** The maximum value that can be transferred in a single transaction */ - valueLimit: bigint - /** The rules that define the conditions under which the permission is granted */ - rules: Rule[] -} +// export interface Permission { +// /** The address of the contract to which the permission applies */ +// destContract: `0x${string}` +// /** The function selector of the contract to which the permission applies */ +// functionSelector: `0x${string}` +// /** The maximum value that can be transferred in a single transaction */ +// valueLimit: bigint +// /** The rules that define the conditions under which the permission is granted */ +// rules: Rule[] +// } function packUserOp( op: Partial<UserOperationStruct>, diff --git a/src/modules/utils/Types.ts b/src/modules/utils/Types.ts index 414dbeca0..68cb0dfc4 100644 --- a/src/modules/utils/Types.ts +++ b/src/modules/utils/Types.ts @@ -5,8 +5,6 @@ import type { SupportedSigner, UserOperationStruct } from "../../account" -import type { SessionKeyManagerModule } from "../SessionKeyManagerModule.js" -import type { ISessionStorage } from "../interfaces/ISessionStorage.js" export type ModuleVersion = "V1_0_0" // | 'V1_0_1' export interface BaseValidationModuleConfig { @@ -34,33 +32,33 @@ export interface ECDSAOwnershipValidationModuleConfigConstructorProps signer: SmartAccountSigner } -export interface SessionKeyManagerModuleConfig - extends BaseValidationModuleConfig { - /** Address of the module */ - moduleAddress?: Hex - /** Version of the module */ - version?: ModuleVersion - /** SmartAccount address */ - smartAccountAddress: Hex - storageType?: StorageType - sessionStorageClient?: ISessionStorage -} - -export interface BatchedSessionRouterModuleConfig - extends BaseValidationModuleConfig { - /** Address of the module */ - moduleAddress?: Hex - /** Version of the module */ - version?: ModuleVersion - /** Session Key Manager module: Could be BaseValidationModule */ - sessionKeyManagerModule?: SessionKeyManagerModule - /** Session Key Manager module address */ - sessionManagerModuleAddress?: Hex - /** Address of the associated smart account */ - smartAccountAddress: Hex - /** Storage type, e.g. local storage */ - storageType?: StorageType -} +// export interface SessionKeyManagerModuleConfig +// extends BaseValidationModuleConfig { +// /** Address of the module */ +// moduleAddress?: Hex +// /** Version of the module */ +// version?: ModuleVersion +// /** SmartAccount address */ +// smartAccountAddress: Hex +// storageType?: StorageType +// sessionStorageClient?: ISessionStorage +// } + +// export interface BatchedSessionRouterModuleConfig +// extends BaseValidationModuleConfig { +// /** Address of the module */ +// moduleAddress?: Hex +// /** Version of the module */ +// version?: ModuleVersion +// /** Session Key Manager module: Could be BaseValidationModule */ +// sessionKeyManagerModule?: SessionKeyManagerModule +// /** Session Key Manager module address */ +// sessionManagerModuleAddress?: Hex +// /** Address of the associated smart account */ +// smartAccountAddress: Hex +// /** Storage type, e.g. local storage */ +// storageType?: StorageType +// } export enum StorageType { LOCAL_STORAGE = 0, diff --git a/src/paymaster/BiconomyPaymaster.ts b/src/paymaster/BiconomyPaymaster.ts index 423b23ba5..042c7ba50 100644 --- a/src/paymaster/BiconomyPaymaster.ts +++ b/src/paymaster/BiconomyPaymaster.ts @@ -1,7 +1,6 @@ import { encodeFunctionData, parseAbi } from "viem" import { type BiconomyTokenPaymasterRequest, - type BigNumberish, HttpMethod, Logger, type Transaction, From bdb8444842852aeb2debf4f5eaf0cec35682cd4e Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Fri, 21 Jun 2024 17:25:59 +0300 Subject: [PATCH 1209/1247] feat: modules integration +++ --- CHANGELOG.md | 4 +- bun.lockb | Bin 273884 -> 274842 bytes .../SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md | 2 +- examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md | 2 +- ...SmartAccountV2.ts => NexusSmartAccount.ts} | 272 +++---- src/account/index.ts | 5 +- src/account/utils/Constants.ts | 5 +- src/account/utils/Types.ts | 3 +- src/bundler/Bundler.ts | 2 +- src/modules/BaseValidationModule.ts | 51 -- src/modules/K1ValidatorModule.ts | 109 --- src/modules/base/BaseExecutionModule.ts | 7 + src/modules/base/BaseModule.ts | 62 ++ src/modules/base/BaseValidationModule.ts | 60 ++ src/modules/executors/OwnableExecutor.ts | 101 +++ src/modules/index.ts | 10 +- src/modules/interfaces/IExecutorModule.ts | 6 + src/modules/utils/Constants.ts | 5 +- src/modules/utils/Helper.ts | 30 +- src/modules/utils/Types.ts | 36 +- src/modules/validators/K1ValidatorModule.ts | 82 ++ tests/account/read.test.ts | 34 +- tests/account/write.test.ts | 703 +++++++++--------- .../modules/ownableExecutor.ts/write.test.ts | 103 +++ tests/utils.ts | 2 +- 25 files changed, 1005 insertions(+), 691 deletions(-) rename src/account/{BiconomySmartAccountV2.ts => NexusSmartAccount.ts} (92%) delete mode 100644 src/modules/BaseValidationModule.ts delete mode 100644 src/modules/K1ValidatorModule.ts create mode 100644 src/modules/base/BaseExecutionModule.ts create mode 100644 src/modules/base/BaseModule.ts create mode 100644 src/modules/base/BaseValidationModule.ts create mode 100644 src/modules/executors/OwnableExecutor.ts create mode 100644 src/modules/interfaces/IExecutorModule.ts create mode 100644 src/modules/validators/K1ValidatorModule.ts create mode 100644 tests/modules/ownableExecutor.ts/write.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index b84e72447..e751d84a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -210,13 +210,13 @@ VERSION Bump Only. ## 3.1.0 (2023-09-20) -Modular Account Abstraction is here. Contains BiconomySmartAccountV2 - an API for modular smart account. +Modular Account Abstraction is here. Contains NexusSmartAccount - an API for modular smart account. ### Bug Fixes - add 10sec timeout limit for a test ([5d12fe7](https://github.com/bcnmy/biconomy-client-sdk/commit/5d12fe7d4b32e5c4628b971d22f6fc9cfcc6b414)) - avoid sending populated values of gas prices when estimating from bundler ([c58c9fc](https://github.com/bcnmy/biconomy-client-sdk/commit/c58c9fc29ee83978e1a90305e839002431db2b7b)) -- BiconomySmartAccountV2 API Specs ([69a580e](https://github.com/bcnmy/biconomy-client-sdk/commit/69a580ea9e309141b500274aa95e20e24365b522)) +- NexusSmartAccount API Specs ([69a580e](https://github.com/bcnmy/biconomy-client-sdk/commit/69a580ea9e309141b500274aa95e20e24365b522)) - build errors ([9fb0475](https://github.com/bcnmy/biconomy-client-sdk/commit/9fb047534935b0600bd08a4de7e68fd91a8a089a)) - comments [#296](https://github.com/bcnmy/biconomy-client-sdk/issues/296) ([55b7376](https://github.com/bcnmy/biconomy-client-sdk/commit/55b7376336886226967b5bec5f11ba3ab750c5b6)) - estimation without bundler ([5e49473](https://github.com/bcnmy/biconomy-client-sdk/commit/5e49473e7745c2e87e241731ef8ca1f65ee90388)) diff --git a/bun.lockb b/bun.lockb index ecdabd4198d311335cb822f14057539f60256997..f761888cba0e05cf8b3f63703d6cc8b3e599551b 100755 GIT binary patch delta 54553 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 aU>tCI?UC!z1T23rV3)i;nYufet@%IJ`_bY6 delta 53655 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 Wy5gw|or@4`Xl%GJfK&sFHvS)ZXyK6n diff --git a/examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md b/examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md index 911f80fc4..d5eb9fdf8 100644 --- a/examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md +++ b/examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md @@ -1,4 +1,4 @@ -### [Send a multi tx and pay gas with a token](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#getTokenFees) +### [Send a multi tx and pay gas with a token](https://bcnmy.github.io/biconomy-client-sdk/classes/NexusSmartAccount.html#getTokenFees) | Key | Description | | -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | diff --git a/examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md b/examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md index 33d35d323..43ef500cd 100644 --- a/examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md +++ b/examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md @@ -1,4 +1,4 @@ -### [Send some eth with sponsorship](https://bcnmy.github.io/biconomy-client-sdk/classes/BiconomySmartAccountV2.html#sendTransaction) +### [Send some eth with sponsorship](https://bcnmy.github.io/biconomy-client-sdk/classes/NexusSmartAccount.html#sendTransaction) | Key | Description | | --------------------------------------------------------------------------------- | -------------------------------------------------------------- | diff --git a/src/account/BiconomySmartAccountV2.ts b/src/account/NexusSmartAccount.ts similarity index 92% rename from src/account/BiconomySmartAccountV2.ts rename to src/account/NexusSmartAccount.ts index 5bfe9f5bc..4844d26d8 100644 --- a/src/account/BiconomySmartAccountV2.ts +++ b/src/account/NexusSmartAccount.ts @@ -18,24 +18,30 @@ import { getContract, keccak256, parseAbi, - parseAbiItem, parseAbiParameters, - toBytes + stringToBytes, + toBytes, + toHex } from "viem" import { Bundler, Executions, type GetUserOperationGasPriceReturnType, + type UserOpReceipt, type UserOpResponse } from "../bundler/index.js" import type { IBundler } from "../bundler/interfaces/IBundler.js" import { EXECUTE_BATCH, EXECUTE_SINGLE } from "../bundler/utils/Constants.js" +import type { BaseExecutionModule } from "../modules/base/BaseExecutionModule.js" +import type { BaseModule } from "../modules/base/BaseModule.js" +import { BaseValidationModule } from "../modules/base/BaseValidationModule.js" import { - BaseValidationModule, type ModuleInfo, + type ModuleName, type SendUserOpParams, - createECDSAOwnershipValidationModule -} from "../modules" + createK1ValidatorModule, + createModuleInstace +} from "../modules/index.js" import { type FeeQuotesOrDataDto, type FeeQuotesOrDataResponse, @@ -44,7 +50,9 @@ import { Paymaster, PaymasterMode, type SponsorUserOperationDto -} from "../paymaster" +} from "../paymaster/index.js" +import { BaseSmartContractAccount } from "./BaseSmartContractAccount.js" +import { NexusAccountAbi } from "./abi/SmartAccount.js" import { Logger, type ModuleType, @@ -53,9 +61,7 @@ import { type UserOperationStruct, convertSigner, getChain -} from "./" -import { BaseSmartContractAccount } from "./BaseSmartContractAccount.js" -import { NexusAccountAbi } from "./abi/SmartAccount.js" +} from "./index.js" import { ADDRESS_ZERO, DEFAULT_BICONOMY_FACTORY_ADDRESS, @@ -87,8 +93,8 @@ import { } from "./utils/Utils.js" // type UserOperationKey = keyof UserOperationStruct -export class BiconomySmartAccountV2 extends BaseSmartContractAccount { - private sessionData?: ModuleInfo +export class NexusSmartAccount extends BaseSmartContractAccount { + // private sessionData?: ModuleInfo private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001" @@ -102,6 +108,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { bundler?: IBundler + publicClient!: PublicClient + private accountContract?: GetContractReturnType< typeof NexusAccountAbi, PublicClient | WalletClient @@ -117,6 +125,9 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature. activeValidationModule!: BaseValidationModule + installedExecutors: BaseExecutionModule[] = [] + activeExecutorModule?: BaseExecutionModule + private constructor( readonly biconomySmartAccountConfig: BiconomySmartAccountV2ConfigConstructorProps ) { @@ -139,7 +150,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { DEFAULT_BICONOMY_FACTORY_ADDRESS }) - this.sessionData = biconomySmartAccountConfig.sessionData + // this.sessionData = biconomySmartAccountConfig.sessionData this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule @@ -149,6 +160,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { this.index = biconomySmartAccountConfig.index ?? 0n this.chainId = biconomySmartAccountConfig.chainId this.bundler = biconomySmartAccountConfig.bundler + this.publicClient = createPublicClient({ + chain: getChain(biconomySmartAccountConfig.chainId), + transport: http() + }) + // this.implementationAddress = // biconomySmartAccountConfig.implementationAddress ?? // (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex) @@ -202,20 +218,20 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } /** - * Creates a new instance of BiconomySmartAccountV2 + * Creates a new instance of NexusSmartAccount * - * This method will create a BiconomySmartAccountV2 instance but will not deploy the Smart Account + * This method will create a NexusSmartAccount instance but will not deploy the Smart Account * Deployment of the Smart Account will be donewith the first user operation. * * - Docs: https://docs.biconomy.io/Account/integration#integration-1 * - * @param biconomySmartAccountConfig - Configuration for initializing the BiconomySmartAccountV2 instance {@link BiconomySmartAccountV2Config}. - * @returns A promise that resolves to a new instance of BiconomySmartAccountV2. + * @param biconomySmartAccountConfig - Configuration for initializing the NexusSmartAccount instance {@link BiconomySmartAccountV2Config}. + * @returns A promise that resolves to a new instance of NexusSmartAccount. * @throws An error if something is wrong with the smart account instance creation. * * @example * import { createClient } from "viem" - * import { createSmartAccountClient, BiconomySmartAccountV2 } from "@biconomy/account" + * import { createSmartAccountClient, NexusSmartAccount } from "@biconomy/account" * import { createWalletClient, http } from "viem"; * import { polygonAmoy } from "viem/chains"; * @@ -227,7 +243,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * * const bundlerUrl = "" // Retrieve bundler url from dashboard * - * const smartAccountFromStaticCreate = await BiconomySmartAccountV2.create({ signer, bundlerUrl }); + * const smartAccountFromStaticCreate = await NexusSmartAccount.create({ signer, bundlerUrl }); * * // Is the same as... * @@ -236,7 +252,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { */ public static async create( biconomySmartAccountConfig: BiconomySmartAccountV2Config - ): Promise<BiconomySmartAccountV2> { + ): Promise<NexusSmartAccount> { let chainId = biconomySmartAccountConfig.chainId let rpcUrl = biconomySmartAccountConfig.rpcUrl let resolvedSmartAccountSigner!: SmartAccountSigner @@ -290,21 +306,21 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // Note: If no module is provided, we will use ECDSA_OWNERSHIP as default if (!defaultValidationModule) { - const newModule = await createECDSAOwnershipValidationModule({ - // biome-ignore lint/style/noNonNullAssertion: <explanation> - signer: resolvedSmartAccountSigner! - }) - defaultValidationModule = newModule + const newModule = await createK1ValidatorModule( + resolvedSmartAccountSigner + ) + defaultValidationModule = newModule as BaseValidationModule } const activeValidationModule = biconomySmartAccountConfig?.activeValidationModule ?? defaultValidationModule if (!resolvedSmartAccountSigner) { - resolvedSmartAccountSigner = await activeValidationModule.getSigner() + resolvedSmartAccountSigner = activeValidationModule.getSigner() } if (!resolvedSmartAccountSigner) { throw new Error("signer required") } + const config: BiconomySmartAccountV2ConfigConstructorProps = { ...biconomySmartAccountConfig, defaultValidationModule, @@ -325,7 +341,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { // ) // } - return new BiconomySmartAccountV2(config) + return new NexusSmartAccount(config) } // Calls the getCounterFactualAddress @@ -686,12 +702,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { try { // TODO: Improve this by computing address off-chain instead of making rpc call - const publicClient = createPublicClient({ - chain: getChain(this.chainId), - transport: http() - }) - - const counterFactualAddress = await publicClient.readContract({ + const counterFactualAddress = await this.publicClient.readContract({ address: this.factoryAddress, abi: parseAbi([ "function computeAccountAddress(address, uint256) external view returns (address expectedAddress)" @@ -733,16 +744,23 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { setActiveValidationModule( validationModule: BaseValidationModule - ): BiconomySmartAccountV2 { + ): NexusSmartAccount { if (validationModule instanceof BaseValidationModule) { this.activeValidationModule = validationModule } return this } + async setActiveExecutorModule( + executorModule: BaseExecutionModule + ): Promise<BaseModule> { + this.activeExecutorModule = executorModule + return executorModule + } + setDefaultValidationModule( validationModule: BaseValidationModule - ): BiconomySmartAccountV2 { + ): NexusSmartAccount { if (validationModule instanceof BaseValidationModule) { this.defaultValidationModule = validationModule } @@ -871,10 +889,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } // dummy signature depends on the validation module supplied. - async getDummySignatures(_params?: ModuleInfo): Promise<Hex> { - const params = { ...(this.sessionData ? this.sessionData : {}), ..._params } + async getDummySignatures(): Promise<Hex> { + // const params = { ...(this.sessionData ? this.sessionData : {}), ..._params } this.isActiveValidationModuleDefined() - return (await this.activeValidationModule.getDummySignature(params)) as Hex + return (await this.activeValidationModule.getDummySignature()) as Hex } // TODO: review this @@ -901,11 +919,8 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } async signUserOp( - userOp: Partial<UserOperationStruct>, - _params?: SendUserOpParams + userOp: Partial<UserOperationStruct> ): Promise<UserOperationStruct> { - const params = { ...(this.sessionData ? this.sessionData : {}), ..._params } - this.isActiveValidationModuleDefined() // TODO REMOVE COMMENT AND CHECK FOR PIMLICO USER OP FIELDS // const requiredFields: UserOperationKey[] = [ @@ -920,8 +935,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { const userOpHash = await this.getUserOpHash(userOp) const moduleSig = (await this.activeValidationModule.signUserOpHash( - userOpHash, - params + userOpHash )) as Hex // const signatureWithModuleAddress = this.getSignatureWithModuleAddress( @@ -1202,12 +1216,11 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { * */ async sendUserOp( - userOp: Partial<UserOperationStruct>, - params?: SendUserOpParams + userOp: Partial<UserOperationStruct> ): Promise<UserOpResponse> { // biome-ignore lint/performance/noDelete: <explanation> delete userOp.signature - const userOperation = await this.signUserOp(userOp, params) + const userOperation = await this.signUserOp(userOp) const bundlerResponse = await this.sendSignedUserOp(userOperation) @@ -1478,23 +1491,18 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { buildUseropDto ) - return this.sendUserOp(userOp, { - simulationType: buildUseropDto?.simulationType, - ...buildUseropDto?.params - }) + return this.sendUserOp(userOp) } async sendTransactionWithExecutor( manyOrOneTransactions: Transaction | Transaction[], - executorAddress: Address, - buildUseropDto?: BuildUserOpOptions - ): Promise<UserOpResponse> { + // buildUseropDto?: BuildUserOpOptions + ): Promise<UserOpReceipt> { return await this.executeFromExecutor( Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions : [manyOrOneTransactions], - executorAddress, - buildUseropDto + // buildUseropDto ) } @@ -1540,9 +1548,7 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { transactions: Transaction[], buildUseropDto?: BuildUserOpOptions ): Promise<Partial<UserOperationStruct>> { - const dummySignatureFetchPromise = this.getDummySignatures( - buildUseropDto?.params - ) + const dummySignatureFetchPromise = this.getDummySignatures() const [nonceFromFetch, signature] = await Promise.all([ this.getBuildUserOpNonce(buildUseropDto?.nonceOptions), dummySignatureFetchPromise @@ -1963,10 +1969,10 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { } async signMessage(message: string | Uint8Array): Promise<Hex> { - let signature: any + let signature: Hex this.isActiveValidationModuleDefined() const dataHash = typeof message === "string" ? toBytes(message) : message - signature = await this.activeValidationModule.signMessage(dataHash) + signature = (await this.activeValidationModule.signMessage(dataHash)) as Hex const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) if (![27, 28].includes(potentiallyIncorrectV)) { @@ -2088,94 +2094,100 @@ export class BiconomySmartAccountV2 extends BaseSmartContractAccount { moduleType: ModuleType, moduleAddress: Hex, data?: Hex - ): Promise<any> { + ): Promise<boolean> { const accountContract = await this._getAccountContract() - return await accountContract.read.isModuleInstalled([ + return (await accountContract.read.isModuleInstalled([ moduleType, moduleAddress, data ?? "0x" - ]) + ])) as boolean } - async installModule( - moduleType: ModuleType, - moduleAddress: Hex, - data?: Hex - ): Promise<UserOpResponse> { - const installModuleData = encodeFunctionData({ - abi: NexusAccountAbi, - functionName: "installModule", - args: [moduleType, moduleAddress, data ?? "0x"] - }) - return await this.sendTransaction({ + getSmartAccountOwner(): SmartAccountSigner { + return this.signer + } + + // async installOwnableExecutor(): Promise<UserOpReceipt> { + // const ownableExecutor = await OwnableExecutorModule.create(this); + // const installModuleData = encodeFunctionData({ + // abi: NexusAccountAbi, + // functionName: "installModule", + // args: [ModuleType.Execution, ownableExecutor.moduleInfo.module, ownableExecutor.moduleInfo.data ?? "0x"] + // }) + // const response = await this.sendTransaction({ + // to: await this.getAddress(), + // data: installModuleData + // }) + // console.log("Got response: ", response); + + // const receipt = await response.wait(); + // if(receipt.success) { + // this.installedExecutors.push(ownableExecutor); + // this.activeExecutorModule = ownableExecutor; + // } + // return receipt; + // } + + async installModule(moduleName: ModuleName): Promise<UserOpReceipt> { + const moduleInstance = await createModuleInstace(moduleName, this) + const installModuleData = moduleInstance.installModule() + const response = await this.sendTransaction({ to: await this.getAddress(), - data: installModuleData + data: installModuleData, + value: 0n }) + const receipt = response.wait() + return receipt } async uninstallModule( - moduleType: ModuleType, - moduleAddress: Hex, - deInitData?: Hex - ): Promise<UserOpResponse> { - const uninstallModuleData = encodeFunctionData({ - abi: NexusAccountAbi, - functionName: "uninstallModule", - args: [moduleType, moduleAddress, deInitData ?? "0x"] - }) - return await this.sendTransaction({ + moduleName: ModuleName, + uninstallData?: Hex + ): Promise<UserOpReceipt> { + const moduleInstance = await createModuleInstace(moduleName, this) + const deInitData = encodeAbiParameters( + [ + { name: "prev", type: "address" }, + { name: "disableModuleData", type: "bytes" } + ], + [this.SENTINEL_MODULE as Hex, toHex(stringToBytes(""))] + ) + const uninstallModuleData = moduleInstance.uninstallModule( + uninstallData ?? deInitData + ) + const response = await this.sendTransaction({ to: await this.getAddress(), - data: uninstallModuleData + data: uninstallModuleData, + value: 0n }) + const receipt = response.wait() + return receipt } private async executeFromExecutor( transactions: Transaction[], - executorAddress: Address, - buildUseropDto?: BuildUserOpOptions - ): Promise<UserOpResponse> { - let executorCalldata: Hex = "0x" - if (transactions.length > 1) { - const execs: { target: Hex; value: bigint; callData: Hex }[] = - transactions.map((tx) => { - return { - target: tx.to as Hex, - callData: (tx.data ?? "0x") as Hex, - value: BigInt(tx.value ?? 0n) - } - }) - - const executeBatchViaAccountAbi = parseAbiItem([ - "function executeBatchViaAccount(address account, Execution[] calldata execs) external", - "struct Execution { address target; uint256 value; bytes callData; }" - ]) - - executorCalldata = encodeFunctionData({ - abi: [executeBatchViaAccountAbi], - functionName: "executeBatchViaAccount", - args: [await this.getAddress(), execs] - }) - } else { - executorCalldata = encodeFunctionData({ - abi: parseAbi([ - "function executeViaAccount(address account, address target, uint256 value, bytes calldata callData) external" - ]), - functionName: "executeViaAccount", - args: [ - await this.getAddress(), - transactions[0].to as Hex, - BigInt(transactions[0].value ?? 0), - transactions[0].data as Hex - ] - }) + // buildUseropDto?: BuildUserOpOptions + ): Promise<UserOpReceipt> { + if(this.activeExecutorModule){ + if (transactions.length > 1) { + const executions: { target: Hex; value: bigint; callData: Hex }[] = + transactions.map((tx) => { + return { + target: tx.to as Hex, + callData: (tx.data ?? "0x") as Hex, + value: BigInt(tx.value ?? 0n) + } + }) + return await this.activeExecutorModule?.executeFromExecutor(executions) + } + const execution = { + target: transactions[0].to as Hex, + callData: (transactions[0].data ?? "0x") as Hex, + value: BigInt(transactions[0].value ?? 0n) + } + return await this.activeExecutorModule?.executeFromExecutor(execution) } - return await this.sendTransaction( - { - to: executorAddress, - data: executorCalldata - }, - buildUseropDto - ) + throw new Error("Please set an active executor module before running this method.") } async supportsExecutionMode(mode: Hex): Promise<boolean> { diff --git a/src/account/index.ts b/src/account/index.ts index 50364553f..476ee1f1e 100644 --- a/src/account/index.ts +++ b/src/account/index.ts @@ -1,11 +1,10 @@ -import { BiconomySmartAccountV2 } from "./BiconomySmartAccountV2.js" +import { NexusSmartAccount } from "./NexusSmartAccount.js" import type { BiconomySmartAccountV2Config } from "./utils/Types.js" export * from "./utils/index.js" export * from "./signers/local-account.js" export * from "./signers/wallet-client.js" -export * from "./BiconomySmartAccountV2.js" -export const createSmartAccountClient = BiconomySmartAccountV2.create +export const createSmartAccountClient = NexusSmartAccount.create export type SmartWalletConfig = BiconomySmartAccountV2Config diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index f3a401c54..610571c22 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -32,6 +32,8 @@ export const BICONOMY_TOKEN_PAYMASTER = // will always be latest implementation address export const DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS = "0x0000002512019Dafb59528B82CB92D3c5D2423aC" +export const ENTRYPOINT_V07_ADDRESS = + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" export const BICONOMY_IMPLEMENTATION_ADDRESSES: BiconomyImplementations = { "0x00006b7e42e01957da540dc6a8f7c30c4d816af5": "V1_0_0", "0x66Ae45ad5BE4be08a70AD99e9cF41e6d6884B06F": "V2_0_0" @@ -39,7 +41,8 @@ export const BICONOMY_IMPLEMENTATION_ADDRESSES: BiconomyImplementations = { export const ENTRYPOINT_ADDRESSES_BY_VERSION: EntryPointAddressesByVersion = { V0_0_5: "0x27a4db290b89ae3373ce4313cbeae72112ae7da9", - V0_0_6: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789" + V0_0_6: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + V0_0_7: "0x0000000071727De22E5E9d8BAf0edAc6f37da032" } export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementationsByVersion = diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 1fd0ff046..bb1b8a97b 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -12,7 +12,8 @@ import type { WalletClient } from "viem" import type { IBundler } from "../../bundler" -import type { BaseValidationModule, ModuleInfo } from "../../modules" +import type { ModuleInfo } from "../../modules" +import type { BaseValidationModule } from "../../modules/base/BaseValidationModule" import type { FeeQuotesOrDataDto, IPaymaster, diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index 0f70a4826..2a8e9e82e 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -182,7 +182,7 @@ export class Bundler implements IBundler { wait: (confirmations?: number): Promise<UserOpReceipt> => { // Note: maxDuration can be defined per chainId const maxDuration = - this.UserOpReceiptMaxDurationIntervals[chainId] || 30000 // default 30 seconds + this.UserOpReceiptMaxDurationIntervals[chainId] || 50000 // default 50 seconds let totalDuration = 0 return new Promise<UserOpReceipt>((resolve, reject) => { diff --git a/src/modules/BaseValidationModule.ts b/src/modules/BaseValidationModule.ts deleted file mode 100644 index 265a4f9cf..000000000 --- a/src/modules/BaseValidationModule.ts +++ /dev/null @@ -1,51 +0,0 @@ -import type { Hex } from "viem" -import { DEFAULT_ENTRYPOINT_ADDRESS, type SmartAccountSigner } from "../account" -import type { IValidationModule } from "./interfaces/IValidationModule.js" -import type { BaseValidationModuleConfig, ModuleInfo } from "./utils/Types.js" - -export abstract class BaseValidationModule implements IValidationModule { - entryPointAddress: Hex - - constructor(moduleConfig: BaseValidationModuleConfig) { - const { entryPointAddress } = moduleConfig - - this.entryPointAddress = entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS - } - - abstract getAddress(): Hex - - setEntryPointAddress(entryPointAddress: Hex): void { - this.entryPointAddress = entryPointAddress - } - - abstract getInitData(): Promise<Hex> - - // Anything required to get dummy signature can be passed as params - abstract getDummySignature(_params?: ModuleInfo): Promise<Hex> - - abstract getSigner(): Promise<SmartAccountSigner> - - // Signer specific or any other additional information can be passed as params - abstract signUserOpHash( - _userOpHash: string, - _params?: ModuleInfo - ): Promise<Hex> - - abstract signMessage(_message: Uint8Array | string): Promise<string> - - async signMessageSmartAccountSigner( - _message: string | Uint8Array, - signer: SmartAccountSigner - ): Promise<string> { - const message = typeof _message === "string" ? _message : { raw: _message } - let signature: `0x${string}` = await signer.signMessage(message) - - const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27 - signature = `0x${signature.slice(0, -2) + correctV.toString(16)}` - } - - return signature - } -} diff --git a/src/modules/K1ValidatorModule.ts b/src/modules/K1ValidatorModule.ts deleted file mode 100644 index e11a323d3..000000000 --- a/src/modules/K1ValidatorModule.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { type Hex, encodeFunctionData, getAddress, parseAbi } from "viem" -import { - K1_VALIDATOR, - type SmartAccountSigner, - convertSigner -} from "../account/index.js" -import { BaseValidationModule } from "./BaseValidationModule.js" -import { ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION } from "./utils/Constants.js" -import type { - ECDSAOwnershipValidationModuleConfig, - ECDSAOwnershipValidationModuleConfigConstructorProps, - ModuleVersion -} from "./utils/Types.js" - -// Could be renamed with suffix API -export class K1ValidatorModule extends BaseValidationModule { - signer: SmartAccountSigner - - moduleAddress!: Hex - - version: ModuleVersion = "V1_0_0" - - private constructor( - moduleConfig: ECDSAOwnershipValidationModuleConfigConstructorProps - ) { - super(moduleConfig) - this.signer = moduleConfig.signer - } - - public static async create( - moduleConfig: ECDSAOwnershipValidationModuleConfig - ): Promise<K1ValidatorModule> { - // Signer needs to be initialised here before defaultValidationModule is set - const { signer } = await convertSigner(moduleConfig.signer, false) - const configForConstructor: ECDSAOwnershipValidationModuleConfigConstructorProps = - { ...moduleConfig, signer } - - // TODO: (Joe) stop doing things in a 'create' call after the instance has been created - const instance = new K1ValidatorModule(configForConstructor) - if (moduleConfig.moduleAddress) { - instance.moduleAddress = moduleConfig.moduleAddress - } else if (moduleConfig.version) { - const moduleAddr = ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION[ - moduleConfig.version - ] as Hex - if (!moduleAddr) { - throw new Error(`Invalid version ${moduleConfig.version}`) - } - instance.moduleAddress = moduleAddr - instance.version = moduleConfig.version as ModuleVersion - } else { - instance.moduleAddress = K1_VALIDATOR - // Note: in this case Version remains the default one - } - return instance - } - - getAddress(): Hex { - return this.moduleAddress - } - - async getSigner(): Promise<SmartAccountSigner> { - return Promise.resolve(this.signer) - } - - async getDummySignature(): Promise<Hex> { - const moduleAddress = getAddress(this.getAddress()) - const dynamicPart = moduleAddress.substring(2).padEnd(40, "0") - return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000` - } - - // Note: other modules may need additional attributes to build init data - async getInitData(): Promise<Hex> { - const ecdsaOwnerAddress = await this.signer.getAddress() - const moduleRegistryParsedAbi = parseAbi([ - "function initForSmartAccount(address owner)" - ]) - const ecdsaOwnershipInitData = encodeFunctionData({ - abi: moduleRegistryParsedAbi, - functionName: "initForSmartAccount", - args: [ecdsaOwnerAddress] - }) - return ecdsaOwnershipInitData - } - - async signUserOpHash(userOpHash: string): Promise<Hex> { - const sig = await this.signer.signMessage({ raw: userOpHash as Hex }) - return sig - } - - /** - * Signs a message using the appropriate method based on the type of signer. - * - * @param {Uint8Array | string} message - The message to be signed. - * @returns {Promise<string>} A promise resolving to the signature or error message. - * @throws {Error} If the signer type is invalid or unsupported. - */ - async signMessage(_message: Uint8Array | string): Promise<string> { - const message = typeof _message === "string" ? _message : { raw: _message } - let signature = await this.signer.signMessage(message) - - const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27 - signature = signature.slice(0, -2) + correctV.toString(16) - } - return signature - } -} diff --git a/src/modules/base/BaseExecutionModule.ts b/src/modules/base/BaseExecutionModule.ts new file mode 100644 index 000000000..20272beef --- /dev/null +++ b/src/modules/base/BaseExecutionModule.ts @@ -0,0 +1,7 @@ +import { type UserOpReceipt } from "../../bundler/index.js" +import { BaseModule } from "../base/BaseModule.js" +import type { Execution } from "../utils/Types.js" + +export abstract class BaseExecutionModule extends BaseModule { + abstract executeFromExecutor(execution: Execution | Execution[]): Promise<UserOpReceipt>; +} diff --git a/src/modules/base/BaseModule.ts b/src/modules/base/BaseModule.ts new file mode 100644 index 000000000..e6df47db7 --- /dev/null +++ b/src/modules/base/BaseModule.ts @@ -0,0 +1,62 @@ +import { type Address, type Hex, encodeFunctionData, parseAbi } from "viem" +import { + ENTRYPOINT_V07_ADDRESS, + type ModuleType, + type SmartAccountSigner +} from "../../account/index.js" +import type { ModuleVersion, V3ModuleInfo } from "../utils/Types.js" + +export abstract class BaseModule { + moduleAddress: Address + data: Hex + additionalContext: Hex + type: ModuleType + hook?: Address + version: ModuleVersion = "1.0.0-beta" + entryPoint: Address = ENTRYPOINT_V07_ADDRESS + signer: SmartAccountSigner + + constructor(moduleInfo: V3ModuleInfo, signer: SmartAccountSigner) { + this.moduleAddress = moduleInfo.module + this.data = moduleInfo.data + this.additionalContext = moduleInfo.additionalContext + this.hook = moduleInfo.hook + this.type = moduleInfo.type + this.signer = signer + } + + public installModule(): Hex { + const installModuleData = encodeFunctionData({ + abi: parseAbi([ + "function installModule(uint256 moduleTypeId, address module, bytes calldata initData) external" + ]), + functionName: "installModule", + args: [BigInt(this.type), this.moduleAddress, this.data ?? "0x"] + }) + + return installModuleData + } + + public uninstallModule(uninstallData?: Hex): Hex { + const uninstallModuleData = encodeFunctionData({ + abi: parseAbi([ + "function uninstallModule(uint256 moduleTypeId, address module, bytes calldata initData) external" + ]), + functionName: "uninstallModule", + args: [BigInt(this.type), this.moduleAddress, uninstallData ?? "0x"] + }) + return uninstallModuleData + } + + public getAddress(): Hex { + return this.moduleAddress + } + + public getVersion(): string { + return this.version + } + + public getEntryPoint(): string { + return this.version + } +} diff --git a/src/modules/base/BaseValidationModule.ts b/src/modules/base/BaseValidationModule.ts new file mode 100644 index 000000000..91160594d --- /dev/null +++ b/src/modules/base/BaseValidationModule.ts @@ -0,0 +1,60 @@ +import { type Hex, getAddress } from "viem" +import type { SmartAccountSigner } from "../../account/index.js" +import { BaseModule } from "../base/BaseModule.js" + +export abstract class BaseValidationModule extends BaseModule { + public getSigner(): SmartAccountSigner { + return this.signer + } + + async getDummySignature(): Promise<Hex> { + const moduleAddress = getAddress(this.getAddress()) + const dynamicPart = moduleAddress.substring(2).padEnd(40, "0") + return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000` + } + + // TODO: To be implemented + async getInitData(): Promise<Hex> { + return "0x" + } + + async signUserOpHash(userOpHash: string): Promise<Hex> { + const sig = await this.signer.signMessage({ raw: userOpHash as Hex }) + return sig + } + + async signMessageSmartAccountSigner( + _message: string | Uint8Array, + signer: SmartAccountSigner + ): Promise<string> { + const message = typeof _message === "string" ? _message : { raw: _message } + let signature: `0x${string}` = await signer.signMessage(message) + + const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27 + signature = `0x${signature.slice(0, -2) + correctV.toString(16)}` + } + + return signature + } + + /** + * Signs a message using the appropriate method based on the type of signer. + * + * @param {Uint8Array | string} message - The message to be signed. + * @returns {Promise<string>} A promise resolving to the signature or error message. + * @throws {Error} If the signer type is invalid or unsupported. + */ + async signMessage(_message: Uint8Array | string): Promise<string> { + const message = typeof _message === "string" ? _message : { raw: _message } + let signature = await this.signer.signMessage(message) + + const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27 + signature = signature.slice(0, -2) + correctV.toString(16) + } + return signature + } +} diff --git a/src/modules/executors/OwnableExecutor.ts b/src/modules/executors/OwnableExecutor.ts new file mode 100644 index 000000000..8ac01c0dc --- /dev/null +++ b/src/modules/executors/OwnableExecutor.ts @@ -0,0 +1,101 @@ +import { + getAddOwnableExecutorOwnerAction, + getExecuteBatchOnOwnedAccountAction, + getExecuteOnOwnedAccountAction, + getOwnableExecutorOwners, + getRemoveOwnableExecutorOwnerAction +} from "@rhinestone/module-sdk" +import type { Address } from "viem" +import { ModuleType } from "../../account" +import type { NexusSmartAccount } from "../../account/NexusSmartAccount" +import type { UserOpReceipt } from "../../bundler" +import { BaseExecutionModule } from "../base/BaseExecutionModule" +import { OWNABLE_EXECUTOR } from "../utils/Constants" +import type { Execution, V3ModuleInfo } from "../utils/Types" + +export class OwnableExecutorModule extends BaseExecutionModule { + smartAccount!: NexusSmartAccount + public constructor( + moduleInfo: V3ModuleInfo, + smartAccount: NexusSmartAccount + ) { + super(moduleInfo, smartAccount.getSigner()) + this.smartAccount = smartAccount + } + + public static async create( + smartAccount: NexusSmartAccount + ): Promise<OwnableExecutorModule> { + const signer = smartAccount.getSigner() + const moduleInfo: V3ModuleInfo = { + module: OWNABLE_EXECUTOR, + type: ModuleType.Execution, + data: await signer.getAddress(), + additionalContext: "0x" + } + const instance = new OwnableExecutorModule(moduleInfo, smartAccount) + return instance + } + + public async executeFromExecutor( + execution: Execution | Execution[] + ): Promise<UserOpReceipt> { + let executorExecution: Execution + if (Array.isArray(execution)) { + executorExecution = getExecuteBatchOnOwnedAccountAction({ + ownedAccount: await this.smartAccount.getAddress(), + executions: execution + }) + } else { + executorExecution = getExecuteOnOwnedAccountAction({ + ownedAccount: await this.smartAccount.getAddress(), + execution + }) + } + const response = await this.smartAccount.sendTransaction({ + to: this.moduleAddress, + data: executorExecution.callData, + value: 0n + }) + const receipt = await response.wait() + return receipt + } + + public async addOwner(newOwner: Address): Promise<UserOpReceipt> { + const execution: Execution = getAddOwnableExecutorOwnerAction({ + owner: newOwner + }) + const response = await this.smartAccount.sendTransaction({ + to: this.moduleAddress, + data: execution.callData, + value: 0n + }) + const receipt = await response.wait() + return receipt + } + + public async removeOwner(ownerToRemove: Address): Promise<UserOpReceipt> { + const execution: Execution = await getRemoveOwnableExecutorOwnerAction({ + // @ts-ignore + client: this.smartAccount.publicClient, + owner: ownerToRemove, + account: await this.smartAccount.getAddress() + }) + const response = await this.smartAccount.sendTransaction({ + to: this.moduleAddress, + data: execution.callData, + value: 0n + }) + const receipt = await response.wait() + return receipt + } + + public async getOwners(): Promise<Address[]> { + const owners = await getOwnableExecutorOwners({ + account: await this.smartAccount.getAddress(), + // @ts-ignore + client: this.smartAccount.publicClient + }) + return owners + } +} diff --git a/src/modules/index.ts b/src/modules/index.ts index a91188930..37e99ca66 100644 --- a/src/modules/index.ts +++ b/src/modules/index.ts @@ -1,10 +1,10 @@ +import { OwnableExecutorModule } from "./executors/OwnableExecutor.js" +import { K1ValidatorModule } from "./validators/K1ValidatorModule.js" + export * from "./utils/Types.js" export * from "./utils/Constants.js" export * from "./utils/Helper.js" export * from "./interfaces/IValidationModule.js" -export * from "./BaseValidationModule.js" -export * from "./K1ValidatorModule.js" -import { K1ValidatorModule } from "./index.js" -export const createECDSAOwnershipValidationModule = K1ValidatorModule.create -// export * from './PasskeyValidationModule' +export const createOwnableExecutorModule = OwnableExecutorModule.create +export const createK1ValidatorModule = K1ValidatorModule.create diff --git a/src/modules/interfaces/IExecutorModule.ts b/src/modules/interfaces/IExecutorModule.ts new file mode 100644 index 000000000..100710f1d --- /dev/null +++ b/src/modules/interfaces/IExecutorModule.ts @@ -0,0 +1,6 @@ +import type { Hex } from "viem" + +export interface IExecutorModule { + getAddress(): Hex + getVersion(): string +} diff --git a/src/modules/utils/Constants.ts b/src/modules/utils/Constants.ts index 51a1087fc..3185f6ded 100644 --- a/src/modules/utils/Constants.ts +++ b/src/modules/utils/Constants.ts @@ -1,7 +1,7 @@ import type { Hex } from "viem" import type { ModuleVersion } from "./Types.js" -export const DEFAULT_MODULE_VERSION: ModuleVersion = "V1_0_0" +export const DEFAULT_MODULE_VERSION: ModuleVersion = "1.0.0-beta" export const ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION = { V1_0_0: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" @@ -39,3 +39,6 @@ export const MOCK_EXECUTOR: Hex = "0xA975e69917A4c856b17Fc8Cc4C352f326Ef21C6B" export const MOCK_HOOK: Hex = "0x64587c60A3D19B0D73EFfd7660ee07cb76Ca465C" export const MOCK_FALLBACK_HANDLER: Hex = "0x56B7080ef4221FdBE210160efFd33F81B19926E0" + +// BASE SEPOLIA +export const OWNABLE_EXECUTOR = "0x858F46775858edB4cE40CE58863dBDf366b7F374" diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index 8f3a142b4..b1e523887 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -1,3 +1,4 @@ +import type { Execution } from "@rhinestone/module-sdk" import { type Address, type Chain, @@ -8,7 +9,16 @@ import { } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { type UserOperationStruct, getChain } from "../../account" -import type { ChainInfo, SignerData } from "../../index.js" +import type { NexusSmartAccount } from "../../account/NexusSmartAccount.js" +import { + type ChainInfo, + ModuleName, + type SignerData, + type Transaction +} from "../../index.js" +import type { BaseModule } from "../base/BaseModule.js" +import { OwnableExecutorModule } from "../executors/OwnableExecutor.js" +import { K1ValidatorModule } from "../validators/K1ValidatorModule.js" /** * Rule @@ -222,3 +232,21 @@ export const parseChain = (chainInfo: ChainInfo): Chain => { // } // throw new Error(ERROR_MESSAGES.UNKNOW_SESSION_ARGUMENTS) // } + +export const toTransaction = (execution: Execution): Transaction => { + return { + to: execution.target, + value: execution.value, + data: execution.callData + } +} + +export const createModuleInstace = async ( + moduleName: ModuleName, + smartAccount: NexusSmartAccount +): Promise<BaseModule> => { + if (moduleName === ModuleName.OwnableExecutor) { + return await OwnableExecutorModule.create(smartAccount) + } + return await K1ValidatorModule.create(smartAccount.getSigner()) +} diff --git a/src/modules/utils/Types.ts b/src/modules/utils/Types.ts index 68cb0dfc4..d87e84198 100644 --- a/src/modules/utils/Types.ts +++ b/src/modules/utils/Types.ts @@ -1,19 +1,19 @@ -import type { Chain, Hex } from "viem" +import type { Address, Chain, Hex } from "viem" import type { + ModuleType, SimulationType, SmartAccountSigner, SupportedSigner, UserOperationStruct } from "../../account" -export type ModuleVersion = "V1_0_0" // | 'V1_0_1' +export type ModuleVersion = "1.0.0-beta" // | 'V1_0_1' export interface BaseValidationModuleConfig { /** entryPointAddress: address of the entry point */ entryPointAddress?: Hex } -export interface ECDSAOwnershipValidationModuleConfig - extends BaseValidationModuleConfig { +export interface K1ValidationModuleConfig extends BaseValidationModuleConfig { /** Address of the module */ moduleAddress?: Hex /** Version of the module */ @@ -22,7 +22,7 @@ export interface ECDSAOwnershipValidationModuleConfig signer: SupportedSigner } -export interface ECDSAOwnershipValidationModuleConfigConstructorProps +export interface K1ValidatorModuleConfigConstructorProps extends BaseValidationModuleConfig { /** Address of the module */ moduleAddress?: Hex @@ -183,3 +183,29 @@ export interface SessionValidationModuleConfig { /** Address of the module */ moduleAddress: string } + +export enum ModuleTypeName { + execution = 0, + validation = 1, + hook = 2, + handler = 3 +} + +export type V3ModuleInfo = { + module: Address + data: Hex + additionalContext: Hex + type: ModuleType + hook?: Address +} + +export enum ModuleName { + OwnableExecutor = 0, + K1Validator = 1 +} + +export type Execution = { + target: Address + value: bigint + callData: Hex +} diff --git a/src/modules/validators/K1ValidatorModule.ts b/src/modules/validators/K1ValidatorModule.ts new file mode 100644 index 000000000..7990cfdc9 --- /dev/null +++ b/src/modules/validators/K1ValidatorModule.ts @@ -0,0 +1,82 @@ +import { type Hex, getAddress } from "viem" +import { + K1_VALIDATOR, + ModuleType, + type SmartAccountSigner +} from "../../account/index.js" +import { BaseModule } from "../base/BaseModule.js" +import type { V3ModuleInfo } from "../utils/Types.js" + +export class K1ValidatorModule extends BaseModule { + private constructor(moduleConfig: V3ModuleInfo, signer: SmartAccountSigner) { + super(moduleConfig, signer) + } + + public static async create( + signer: SmartAccountSigner + ): Promise<K1ValidatorModule> { + const moduleInfo: V3ModuleInfo = { + module: K1_VALIDATOR, + type: ModuleType.Validation, + data: await signer.getAddress(), + additionalContext: "0x" + } + const instance = new K1ValidatorModule(moduleInfo, signer) + return instance + } + + public getSigner(): SmartAccountSigner { + return this.signer + } + + async getDummySignature(): Promise<Hex> { + const moduleAddress = getAddress(this.getAddress()) + const dynamicPart = moduleAddress.substring(2).padEnd(40, "0") + return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000` + } + + // TODO: To be implemented + async getInitData(): Promise<Hex> { + return "0x" + } + + async signUserOpHash(userOpHash: string): Promise<Hex> { + const sig = await this.signer.signMessage({ raw: userOpHash as Hex }) + return sig + } + + async signMessageSmartAccountSigner( + _message: string | Uint8Array, + signer: SmartAccountSigner + ): Promise<string> { + const message = typeof _message === "string" ? _message : { raw: _message } + let signature: `0x${string}` = await signer.signMessage(message) + + const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27 + signature = `0x${signature.slice(0, -2) + correctV.toString(16)}` + } + + return signature + } + + /** + * Signs a message using the appropriate method based on the type of signer. + * + * @param {Uint8Array | string} message - The message to be signed. + * @returns {Promise<string>} A promise resolving to the signature or error message. + * @throws {Error} If the signer type is invalid or unsupported. + */ + async signMessage(_message: Uint8Array | string): Promise<string> { + const message = typeof _message === "string" ? _message : { raw: _message } + let signature = await this.signer.signMessage(message) + + const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) + if (![27, 28].includes(potentiallyIncorrectV)) { + const correctV = potentiallyIncorrectV + 27 + signature = signature.slice(0, -2) + correctV.toString(16) + } + return signature + } +} diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index f6bb7bad4..d2e3220ea 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -5,40 +5,30 @@ import { type Hex, createPublicClient, createWalletClient, - encodeAbiParameters, encodeFunctionData, getContract, hashMessage, - parseAbi, - parseAbiParameters + parseAbi } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { bsc } from "viem/chains" import { beforeAll, describe, expect, test } from "vitest" import { - type BiconomySmartAccountV2, type BiconomySmartAccountV2Config, DEFAULT_BICONOMY_FACTORY_ADDRESS, - DEFAULT_ENTRYPOINT_ADDRESS, ERROR_MESSAGES, K1_VALIDATOR, ModuleType, NATIVE_TOKEN_ALIAS, compareChainIds, - createSmartAccountClient, - isNullOrUndefined + createSmartAccountClient } from "../../src/account" -import { type UserOperationStruct, getChain } from "../../src/account" -import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" +import { getChain } from "../../src/account" +import type { NexusSmartAccount } from "../../src/account/NexusSmartAccount" import { BiconomyFactoryAbi } from "../../src/account/abi/K1ValidatorFactory" -import { NexusAccountAbi } from "../../src/account/abi/SmartAccount" import { ACCOUNT_MODES } from "../../src/bundler/utils/Constants" -import { - DEFAULT_SESSION_KEY_MANAGER_MODULE, - createECDSAOwnershipValidationModule -} from "../../src/modules" -import { Paymaster, PaymasterMode } from "../../src/paymaster" -import { checkBalance, getBundlerUrl, getConfig } from "../utils" +import { createK1ValidatorModule } from "../../src/modules" +import { getBundlerUrl, getConfig } from "../utils" describe("Account:Read", () => { const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" @@ -59,7 +49,7 @@ describe("Account:Read", () => { chain, transport: http() }) - let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] + let [smartAccount, smartAccountTwo]: NexusSmartAccount[] = [] let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] const [walletClient, walletClientTwo] = [ @@ -460,13 +450,13 @@ describe("Account:Read", () => { const mockPaymasterUrl = "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - const ecdsaModule = await createECDSAOwnershipValidationModule({ - signer: walletClient - }) + const k1ValidationModule = await createK1ValidatorModule( + smartAccount.getSigner() + ) const config: BiconomySmartAccountV2Config = { - defaultValidationModule: ecdsaModule, - activeValidationModule: ecdsaModule, + defaultValidationModule: k1ValidationModule, + activeValidationModule: k1ValidationModule, bundlerUrl, paymasterUrl: mockPaymasterUrl } diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 57de21ec1..b1b7f7d47 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -22,11 +22,9 @@ import { MOCK_EXECUTOR, MOCK_FALLBACK_HANDLER, MOCK_HOOK, - type UserOpReceipt, - type UserOpResponse + createOwnableExecutorModule } from "../../src" import { - type BiconomySmartAccountV2, DEFAULT_ENTRYPOINT_ADDRESS, ERC20_ABI, K1_VALIDATOR, @@ -36,9 +34,11 @@ import { getCustomChain, percentage } from "../../src/account" +import { NexusSmartAccount } from "../../src/account/NexusSmartAccount" import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" import { NexusAccountAbi } from "../../src/account/abi/SmartAccount" +import { UserOpReceipt } from "../../src/bundler" import { PaymasterMode } from "../../src/paymaster" import { testOnlyOnOptimism } from "../setupFiles" import { @@ -69,8 +69,6 @@ describe("Account:Write", async () => { chain, transport: http() }) - // let [smartAccount, smartAccountTwo]: BiconomySmartAccountV2[] = [] - // let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] const [walletClient, walletClientTwo] = [ createWalletClient({ @@ -85,216 +83,227 @@ describe("Account:Write", async () => { }) ] - let smartAccount: BiconomySmartAccountV2 - let smartAccountTwo: BiconomySmartAccountV2 - let smartAccountAddress: Address - let smartAccountAddressTwo: Address - - beforeAll(async () => { - ;[smartAccount, smartAccountTwo] = await Promise.all( - [walletClient, walletClientTwo].map((client) => - createSmartAccountClient({ - chainId, - signer: client, - bundlerUrl, - paymasterUrl - }) - ) - ) - ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( - [smartAccount, smartAccountTwo].map((account) => - account.getAccountAddress() - ) - ) - }) - - describe("Account:Basics", async () => { - test("Build a user op with pimlico bundler", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const userOp = await smartAccount.buildUserOp([transaction]) - expect(userOp).toBeTruthy() - }, 60000) - - test("Mint NFT - Single Call", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const gasCost = await smartAccount.getGasEstimate([transaction]) - console.log(gasCost, "gasCost") - - const userOpHash = await smartAccount.sendTransaction([transaction]) - - expect(userOpHash).toBeTruthy() - }, 60000) - - test("Mint NFT's - Batch Call", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall, - value: 0n - } - const userOpResponse = await smartAccount.sendTransaction([ - transaction, - transaction - ]) - const userOpReceipt: UserOpReceipt = await userOpResponse.wait() - console.log(userOpReceipt.userOpHash, "user op hash") - - expect(userOpReceipt.success).toBe(true) - }, 60000) + const smartAccount = await createSmartAccountClient({ + chainId, + signer: walletClient, + bundlerUrl, + paymasterUrl }) - describe("Account:Validation Module", async () => { - test("should install a dummy K1Validator module", async () => { - const newK1ValidatorContract = - "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - const userOpResponse: UserOpResponse = await smartAccount.installModule( - ModuleType.Validation, - newK1ValidatorContract, - account.address - ) - const userOpReceipt = await userOpResponse.wait() - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - newK1ValidatorContract - ) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeTruthy() - }, 60000) - - test("should uninstall dummy K1Validator module", async () => { - const newK1ValidatorContract = - "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - - const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - const deInitData = encodeAbiParameters( - [ - { name: "prev", type: "address" }, - { name: "disableModuleData", type: "bytes" } - ], - [prevAddress, toHex(stringToBytes(""))] - ) - const userOpResponse = await smartAccount.uninstallModule( - ModuleType.Validation, - newK1ValidatorContract, - deInitData - ) - const userOpReceipt = await userOpResponse.wait() - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - newK1ValidatorContract - ) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeFalsy() - expect(userOpReceipt).toBeTruthy() - }, 60000) - - test("should fail to install an already installed Validator", async () => { - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - K1_VALIDATOR - ) - expect(isInstalled).toBeTruthy() - - const userOpResponse = smartAccount.installModule( - ModuleType.Validation, - K1_VALIDATOR, - account.address - ) - await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") - }, 60000) - }) + const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) + smartAccount.setActiveExecutorModule(ownableExecutorModule) + + // describe("Account:Basics", async () => { + // test("Build a user op with pimlico bundler", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall + // } + // const userOp = await smartAccount.buildUserOp([transaction]) + // expect(userOp).toBeTruthy() + // }, 60000) + + // test("Mint NFT - Single Call", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall + // } + // const gasCost = await smartAccount.getGasEstimate([transaction]) + // console.log(gasCost, "gasCost") + + // const userOpHash = await smartAccount.sendTransaction([transaction]) + + // expect(userOpHash).toBeTruthy() + // }, 60000) + + // test("Mint NFT's - Batch Call", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall, + // value: 0n + // } + // const userOpResponse = await smartAccount.sendTransaction([ + // transaction, + // transaction + // ]) + // const userOpReceipt: UserOpReceipt = await userOpResponse.wait() + // console.log(userOpReceipt.userOpHash, "user op hash") + + // expect(userOpReceipt.success).toBe(true) + // }, 60000) + // }) + + // describe("Account:Validation Module", async () => { + // test("should install a dummy K1Validator module", async () => { + // const newK1ValidatorContract = + // "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + // const userOpResponse: UserOpResponse = await smartAccount.installModule( + // ModuleType.Validation, + // newK1ValidatorContract, + // account.address + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // newK1ValidatorContract + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test("should uninstall dummy K1Validator module", async () => { + // const newK1ValidatorContract = + // "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + + // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // const deInitData = encodeAbiParameters( + // [ + // { name: "prev", type: "address" }, + // { name: "disableModuleData", type: "bytes" } + // ], + // [prevAddress, toHex(stringToBytes(""))] + // ) + // const userOpResponse = await smartAccount.uninstallModule( + // ModuleType.Validation, + // newK1ValidatorContract, + // deInitData + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // newK1ValidatorContract + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) + + // test("should fail to install an already installed Validator", async () => { + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // K1_VALIDATOR + // ) + // expect(isInstalled).toBeTruthy() + + // const userOpResponse = smartAccount.installModule( + // ModuleType.Validation, + // K1_VALIDATOR, + // account.address + // ) + // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") + // }, 60000) + // }) describe("Account:Execution Module Tests", async () => { - test("install a mock Execution module", async () => { - const userOpResponse: UserOpResponse = await smartAccount.installModule( - ModuleType.Execution, - MOCK_EXECUTOR, - account.address - ) - const userOpReceipt = await userOpResponse.wait() - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Execution, - MOCK_EXECUTOR - ) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeTruthy() - }, 60000) - - test("get installed executors", async () => { - const installedExecutors: Address[] = - await smartAccount.getInstalledExecutors() - console.log(installedExecutors, "installed executors") - expect(installedExecutors.includes(MOCK_EXECUTOR)).toBeTruthy() - }, 60000) + // test("install a mock Execution module", async () => { + // const userOpResponse: UserOpResponse = await smartAccount.installModule( + // ModuleType.Execution, + // MOCK_EXECUTOR, + // account.address + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Execution, + // MOCK_EXECUTOR + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test("get installed executors", async () => { + // const installedExecutors: Address[] = + // await smartAccount.getInstalledExecutors() + // console.log(installedExecutors, "installed executors") + // expect(installedExecutors.includes(MOCK_EXECUTOR)).toBeTruthy() + // }, 60000) + + // test("uninstall executor module", async () => { + // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // const deInitData = encodeAbiParameters( + // [ + // { name: "prev", type: "address" }, + // { name: "disableModuleData", type: "bytes" } + // ], + // [prevAddress, toHex(stringToBytes(""))] + // ) + // const userOpResponse = await smartAccount.uninstallModule( + // ModuleType.Execution, + // MOCK_EXECUTOR, + // deInitData + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Execution, + // MOCK_EXECUTOR + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) + + // test("should fail to install same executor module", async () => { + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // K1_VALIDATOR + // ) + // expect(isInstalled).toBeTruthy() + + // const userOpResponse = smartAccount.installModule( + // ModuleType.Validation, + // K1_VALIDATOR, + // account.address + // ) + // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") + // }, 60000) + + // test("send user op using the executor call type single", async () => { + // const authorizedOwners = await ownableExecutorModule.getOwners(); + // expect(authorizedOwners).contains(await smartAccount.getAddress()); + + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + + // const transaction = { + // to: nftAddress, + // data: encodedCall + // } + // const userOpReceipt = await smartAccount.sendTransactionWithExecutor( + // transaction, + // ) + + // expect(userOpReceipt.success).toBeTruthy(); + // }, 60000) - test("uninstall executor module", async () => { - const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - const deInitData = encodeAbiParameters( - [ - { name: "prev", type: "address" }, - { name: "disableModuleData", type: "bytes" } - ], - [prevAddress, toHex(stringToBytes(""))] - ) - const userOpResponse = await smartAccount.uninstallModule( - ModuleType.Execution, - MOCK_EXECUTOR, - deInitData - ) - const userOpReceipt = await userOpResponse.wait() - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Execution, - MOCK_EXECUTOR - ) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeFalsy() - expect(userOpReceipt).toBeTruthy() - }, 60000) - - test("should fail to install same executor module", async () => { - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - K1_VALIDATOR - ) - expect(isInstalled).toBeTruthy() - - const userOpResponse = smartAccount.installModule( - ModuleType.Validation, - K1_VALIDATOR, - account.address - ) - await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") - }, 60000) + test("send user op using the executor call type batch", async () => { + const authorizedOwners = await ownableExecutorModule.getOwners() + expect(authorizedOwners).contains(await smartAccount.getAddress()) - test("send user op using the executor call type single", async () => { const encodedCall = encodeFunctionData({ abi: parseAbi(["function safeMint(address _to)"]), functionName: "safeMint", @@ -304,156 +313,138 @@ describe("Account:Write", async () => { to: nftAddress, data: encodedCall } - const userOpResponse = await smartAccount.sendTransactionWithExecutor( + const userOpReceipt = await smartAccount.sendTransactionWithExecutor([ transaction, - MOCK_EXECUTOR - ) - const userOpReceipt: UserOpReceipt = await userOpResponse.wait() - console.log(userOpReceipt.userOpHash, "user op hash") - }, 60000) - - test("send user op using the executor call type batch", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, - data: encodedCall - } - const userOpResponse = await smartAccount.sendTransactionWithExecutor( - [transaction, transaction], - MOCK_EXECUTOR - ) - const userOpReceipt: UserOpReceipt = await userOpResponse.wait() - console.log(userOpReceipt.userOpHash, "user op hash") - }, 60000) - }) - - describe("Account:Hook Module Tests", async () => { - test("install a mock Hook module", async () => { - const isSupported = await smartAccount.supportsModule(ModuleType.Hooks) - console.log(isSupported, "is supported") - - const isInstalledBefore = await smartAccount.isModuleInstalled( - ModuleType.Hooks, - MOCK_HOOK - ) - console.log(isInstalledBefore, "is installed before") - - const userOpResponse: UserOpResponse = await smartAccount.installModule( - ModuleType.Hooks, - MOCK_HOOK - ) - const userOpReceipt = await userOpResponse.wait() - console.log(userOpReceipt, "user op receipt") - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Hooks, - MOCK_HOOK - ) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeTruthy() - }, 60000) - - test("get active hook", async () => { - const activeHook: Address = await smartAccount.getActiveHook() - console.log(activeHook, "active hook") - expect(activeHook).toBe(MOCK_HOOK) - }, 60000) + transaction + ]) - test("uninstall hook module", async () => { - const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - const deInitData = encodeAbiParameters( - [ - { name: "prev", type: "address" }, - { name: "disableModuleData", type: "bytes" } - ], - [prevAddress, toHex(stringToBytes(""))] - ) - const userOpResponse = await smartAccount.uninstallModule( - ModuleType.Hooks, - MOCK_HOOK, - deInitData - ) - const userOpReceipt = await userOpResponse.wait() - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Hooks, - MOCK_HOOK - ) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeFalsy() - expect(userOpReceipt).toBeTruthy() + expect(userOpReceipt.success).toBeTruthy() }, 60000) }) - describe("Account:Fallback Handler Module Tests", async () => { - test("install a fallback handler Hook module", async () => { - const isSupported = await smartAccount.supportsModule(ModuleType.Fallback) - console.log(isSupported, "is supported") - - const isInstalledBefore = await smartAccount.isModuleInstalled( - ModuleType.Fallback, - MOCK_FALLBACK_HANDLER, - ethers.AbiCoder.defaultAbiCoder().encode( - ["bytes4"], - [GENERIC_FALLBACK_SELECTOR as Hex] - ) as Hex - ) - console.log(isInstalledBefore, "is installed before") - - const userOpResponse: UserOpResponse = await smartAccount.installModule( - ModuleType.Fallback, - MOCK_FALLBACK_HANDLER, - ethers.AbiCoder.defaultAbiCoder().encode( - ["bytes4"], - [GENERIC_FALLBACK_SELECTOR as Hex] - ) as Hex - ) - const userOpReceipt = await userOpResponse.wait() - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Fallback, - MOCK_FALLBACK_HANDLER, - ethers.AbiCoder.defaultAbiCoder().encode( - ["bytes4"], - [GENERIC_FALLBACK_SELECTOR as Hex] - ) as Hex - ) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeTruthy() - }, 60000) - - test("uninstall handler module", async () => { - const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - const deInitData = ethers.AbiCoder.defaultAbiCoder().encode( - ["bytes4"], - [GENERIC_FALLBACK_SELECTOR as Hex] - ) as Hex - const userOpResponse = await smartAccount.uninstallModule( - ModuleType.Fallback, - MOCK_FALLBACK_HANDLER, - deInitData - ) - const userOpReceipt = await userOpResponse.wait() - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Fallback, - MOCK_FALLBACK_HANDLER, - ethers.AbiCoder.defaultAbiCoder().encode( - ["bytes4"], - [GENERIC_FALLBACK_SELECTOR as Hex] - ) as Hex - ) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeFalsy() - expect(userOpReceipt).toBeTruthy() - }, 60000) - }) + // describe("Account:Hook Module Tests", async () => { + // test("install a mock Hook module", async () => { + // const isSupported = await smartAccount.supportsModule(ModuleType.Hooks) + // console.log(isSupported, "is supported") + + // const isInstalledBefore = await smartAccount.isModuleInstalled( + // ModuleType.Hooks, + // MOCK_HOOK + // ) + // console.log(isInstalledBefore, "is installed before") + + // const userOpResponse: UserOpResponse = await smartAccount.installModule( + // ModuleType.Hooks, + // MOCK_HOOK + // ) + // const userOpReceipt = await userOpResponse.wait() + // console.log(userOpReceipt, "user op receipt") + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Hooks, + // MOCK_HOOK + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test("get active hook", async () => { + // const activeHook: Address = await smartAccount.getActiveHook() + // console.log(activeHook, "active hook") + // expect(activeHook).toBe(MOCK_HOOK) + // }, 60000) + + // test("uninstall hook module", async () => { + // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // const deInitData = encodeAbiParameters( + // [ + // { name: "prev", type: "address" }, + // { name: "disableModuleData", type: "bytes" } + // ], + // [prevAddress, toHex(stringToBytes(""))] + // ) + // const userOpResponse = await smartAccount.uninstallModule( + // ModuleType.Hooks, + // MOCK_HOOK, + // deInitData + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Hooks, + // MOCK_HOOK + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) + // }) + + // describe("Account:Fallback Handler Module Tests", async () => { + // test("install a fallback handler Hook module", async () => { + // const isSupported = await smartAccount.supportsModule(ModuleType.Fallback) + // console.log(isSupported, "is supported") + + // const isInstalledBefore = await smartAccount.isModuleInstalled( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER, + // ethers.AbiCoder.defaultAbiCoder().encode( + // ["bytes4"], + // [GENERIC_FALLBACK_SELECTOR as Hex] + // ) as Hex + // ) + // console.log(isInstalledBefore, "is installed before") + + // const userOpResponse: UserOpResponse = await smartAccount.installModule( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER, + // ethers.AbiCoder.defaultAbiCoder().encode( + // ["bytes4"], + // [GENERIC_FALLBACK_SELECTOR as Hex] + // ) as Hex + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER, + // ethers.AbiCoder.defaultAbiCoder().encode( + // ["bytes4"], + // [GENERIC_FALLBACK_SELECTOR as Hex] + // ) as Hex + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test("uninstall handler module", async () => { + // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // const deInitData = ethers.AbiCoder.defaultAbiCoder().encode( + // ["bytes4"], + // [GENERIC_FALLBACK_SELECTOR as Hex] + // ) as Hex + // const userOpResponse = await smartAccount.uninstallModule( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER, + // deInitData + // ) + // const userOpReceipt = await userOpResponse.wait() + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER, + // ethers.AbiCoder.defaultAbiCoder().encode( + // ["bytes4"], + // [GENERIC_FALLBACK_SELECTOR as Hex] + // ) as Hex + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) + // }) }) diff --git a/tests/modules/ownableExecutor.ts/write.test.ts b/tests/modules/ownableExecutor.ts/write.test.ts new file mode 100644 index 000000000..88a63ed45 --- /dev/null +++ b/tests/modules/ownableExecutor.ts/write.test.ts @@ -0,0 +1,103 @@ +import { http, createWalletClient } from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { baseSepolia } from "viem/chains" +import { beforeAll, describe, expect, test } from "vitest" +import { + ModuleName, + ModuleType, + createOwnableExecutorModule +} from "../../../src" +import { createSmartAccountClient } from "../../../src/account" +import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" +import type { UserOpReceipt } from "../../../src/bundler" +import { getConfig } from "../../utils" + +describe("Account:Modules:OwnableExecutor", async () => { + const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } + const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + const ownableExecutor = "0x858F46775858edB4cE40CE58863dBDf366b7F374" + const { privateKey } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + + const [walletClient] = [ + createWalletClient({ + account, + chain: baseSepolia, + transport: http() + }) + ] + + const smartAccount: NexusSmartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl: + "https://api.pimlico.io/v2/84532/rpc?apikey=22c48af7-4886-4c7d-8d4c-5d50262a23f3" + }) + + const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) + await smartAccount.setActiveExecutorModule(ownableExecutorModule) + + describe("Ownable Executor Module Tests", async () => { + test("install Ownable Executor", async () => { + const userOpReceipt: UserOpReceipt = await smartAccount.installModule( + ModuleName.OwnableExecutor + ) + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Execution, + ownableExecutor + ) + + const activeExecutor = smartAccount.activeExecutorModule + const installedExecutors = smartAccount.installedExecutors + + console.log(activeExecutor, installedExecutors) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeTruthy() + }, 60000) + + test("Ownable Executor Module should be installed", async () => { + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Execution, + ownableExecutor + ) + expect(isInstalled).toBeTruthy() + }, 60000) + + test("uninstall Ownable Executor Module", async () => { + const userOpReceipt = await smartAccount.uninstallModule( + ModuleName.OwnableExecutor + ) + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Execution, + ownableExecutor + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeFalsy() + expect(userOpReceipt).toBeTruthy() + }, 60000) + + test("should add an owner to the module", async () => { + const userOpReceipt = await ownableExecutorModule.addOwner( + "0x4D8249d21c9553b1bD23cABF611011376dd3416a" + ) + + expect(userOpReceipt.success).toBeTruthy() + }, 60000) + + test("should remove an owner from the module", async () => { + const userOpReceipt = await ownableExecutorModule.removeOwner( + "0x4D8249d21c9553b1bD23cABF611011376dd3416a" + ) + expect(userOpReceipt.success).toBeTruthy() + }, 60000) + + test("should get all the owners", async () => { + const owners = await ownableExecutorModule.getOwners() + console.log(owners, "owners") + }, 60000) + }) +}) diff --git a/tests/utils.ts b/tests/utils.ts index 63e0399c1..0165f64bf 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -7,7 +7,7 @@ import { parseAbi } from "viem" import { privateKeyToAccount } from "viem/accounts" -import { baseSepolia } from "viem/chains" +import { baseSepolia, sepolia } from "viem/chains" import { Logger } from "../src/account/utils/Logger" import { getChain } from "../src/account/utils/getChain" import { From c350fe415575483940f711cc41d06ad514db6940 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Fri, 21 Jun 2024 17:26:11 +0300 Subject: [PATCH 1210/1247] fix: linting --- src/account/NexusSmartAccount.ts | 12 +++++++----- src/modules/base/BaseExecutionModule.ts | 6 ++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index 4844d26d8..fe2829c46 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -1495,13 +1495,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { } async sendTransactionWithExecutor( - manyOrOneTransactions: Transaction | Transaction[], + manyOrOneTransactions: Transaction | Transaction[] // buildUseropDto?: BuildUserOpOptions ): Promise<UserOpReceipt> { return await this.executeFromExecutor( Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions - : [manyOrOneTransactions], + : [manyOrOneTransactions] // buildUseropDto ) } @@ -2165,10 +2165,10 @@ export class NexusSmartAccount extends BaseSmartContractAccount { } private async executeFromExecutor( - transactions: Transaction[], + transactions: Transaction[] // buildUseropDto?: BuildUserOpOptions ): Promise<UserOpReceipt> { - if(this.activeExecutorModule){ + if (this.activeExecutorModule) { if (transactions.length > 1) { const executions: { target: Hex; value: bigint; callData: Hex }[] = transactions.map((tx) => { @@ -2187,7 +2187,9 @@ export class NexusSmartAccount extends BaseSmartContractAccount { } return await this.activeExecutorModule?.executeFromExecutor(execution) } - throw new Error("Please set an active executor module before running this method.") + throw new Error( + "Please set an active executor module before running this method." + ) } async supportsExecutionMode(mode: Hex): Promise<boolean> { diff --git a/src/modules/base/BaseExecutionModule.ts b/src/modules/base/BaseExecutionModule.ts index 20272beef..c95822de7 100644 --- a/src/modules/base/BaseExecutionModule.ts +++ b/src/modules/base/BaseExecutionModule.ts @@ -1,7 +1,9 @@ -import { type UserOpReceipt } from "../../bundler/index.js" +import type { UserOpReceipt } from "../../bundler/index.js" import { BaseModule } from "../base/BaseModule.js" import type { Execution } from "../utils/Types.js" export abstract class BaseExecutionModule extends BaseModule { - abstract executeFromExecutor(execution: Execution | Execution[]): Promise<UserOpReceipt>; + abstract executeFromExecutor( + execution: Execution | Execution[] + ): Promise<UserOpReceipt> } From 32499444a6841b8ed95d3a7f7770a09533502cd2 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Tue, 25 Jun 2024 17:50:57 +0300 Subject: [PATCH 1211/1247] feat: added ownable validator module --- .size-limit.json | 7 - bun.lockb | Bin 274842 -> 283496 bytes package.json | 3 +- src/account/utils/Constants.ts | 1 + src/modules/index.ts | 4 +- src/modules/utils/Helper.ts | 16 +- src/modules/utils/Types.ts | 5 +- src/modules/validators/K1ValidatorModule.ts | 60 +- src/modules/validators/OwnableValidator.ts | 98 ++ tests/account/read.test.ts | 1171 +++++++++-------- .../modules/ownableValidator.ts/write.test.ts | 110 ++ 11 files changed, 822 insertions(+), 653 deletions(-) create mode 100644 src/modules/validators/OwnableValidator.ts create mode 100644 tests/modules/ownableValidator.ts/write.test.ts diff --git a/.size-limit.json b/.size-limit.json index aff9966a3..acf9835a6 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -32,12 +32,5 @@ "limit": "5 kB", "import": "{ createPaymaster }", "ignore": ["node:fs", "fs"] - }, - { - "name": "modules (tree-shaking)", - "path": "./dist/_esm/modules/index.js", - "limit": "60 kB", - "import": "{ createSessionKeyManagerModule }", - "ignore": ["node:fs", "fs"] } ] diff --git a/bun.lockb b/bun.lockb index f761888cba0e05cf8b3f63703d6cc8b3e599551b..08264cb631281bfea938dbdb13b9f04881365dc6 100755 GIT binary patch delta 60426 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 I7sEsU52|LjBme*a delta 55390 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 S;I8CKacA(-vX(_$<bMFTh2N|I diff --git a/package.json b/package.json index 09d3987af..650c63593 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,8 @@ "tsc-alias": "^1.8.8", "tslib": "^2.6.3", "typedoc": "^0.25.9", - "vitest": "^1.3.1" + "vitest": "^1.3.1", + "@rhinestone/module-sdk": "^0.1.3" }, "peerDependencies": { "typescript": "^5", diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index 610571c22..db27cfb9d 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -99,6 +99,7 @@ export const ERC20_ABI = [ // BASE SEPOLIA CONTRACTS export const K1_VALIDATOR = "0x9C08e1CE188C29bAaeBc64A08cF2Ec44207749B6" +export const OWNABLE_VALIDATOR = "0xBf2137a23F439Ca5Aa4360cC6970D70b24D07ea2" export const NEXUS_IMPLEMENTATION = "0x66Ae45ad5BE4be08a70AD99e9cF41e6d6884B06F" export const BOOTSTRAP = "0x1ad17f0Dc85Da8Ed2CBA7415D290cCb0D79355C9" export const BOOTSTRAP_LIB = "0x44965180dc3F703448bDB859D9F1a55f0B8E6C8F" diff --git a/src/modules/index.ts b/src/modules/index.ts index 37e99ca66..3d18ceb80 100644 --- a/src/modules/index.ts +++ b/src/modules/index.ts @@ -1,5 +1,6 @@ -import { OwnableExecutorModule } from "./executors/OwnableExecutor.js" +import { OwnableExecutorModule } from "./Executors/OwnableExecutor.js" import { K1ValidatorModule } from "./validators/K1ValidatorModule.js" +import { OwnableValidator } from "./validators/OwnableValidator.js" export * from "./utils/Types.js" export * from "./utils/Constants.js" @@ -8,3 +9,4 @@ export * from "./interfaces/IValidationModule.js" export const createOwnableExecutorModule = OwnableExecutorModule.create export const createK1ValidatorModule = K1ValidatorModule.create +export const createOwnableValidatorModule = OwnableValidator.create \ No newline at end of file diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index b1e523887..56b7450b8 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -14,11 +14,12 @@ import { type ChainInfo, ModuleName, type SignerData, - type Transaction + type Transaction, + createOwnableExecutorModule, + createK1ValidatorModule, + createOwnableValidatorModule } from "../../index.js" import type { BaseModule } from "../base/BaseModule.js" -import { OwnableExecutorModule } from "../executors/OwnableExecutor.js" -import { K1ValidatorModule } from "../validators/K1ValidatorModule.js" /** * Rule @@ -243,10 +244,13 @@ export const toTransaction = (execution: Execution): Transaction => { export const createModuleInstace = async ( moduleName: ModuleName, - smartAccount: NexusSmartAccount + smartAccount: NexusSmartAccount, + config?: any ): Promise<BaseModule> => { if (moduleName === ModuleName.OwnableExecutor) { - return await OwnableExecutorModule.create(smartAccount) + return await createOwnableExecutorModule(smartAccount) + } else if (moduleName === ModuleName.OwnableValidator) { + return await createOwnableValidatorModule(smartAccount, config.threshold, config.owners) } - return await K1ValidatorModule.create(smartAccount.getSigner()) + return await createK1ValidatorModule(smartAccount.getSigner()) } diff --git a/src/modules/utils/Types.ts b/src/modules/utils/Types.ts index d87e84198..06a5cdd82 100644 --- a/src/modules/utils/Types.ts +++ b/src/modules/utils/Types.ts @@ -200,8 +200,9 @@ export type V3ModuleInfo = { } export enum ModuleName { - OwnableExecutor = 0, - K1Validator = 1 + OwnableExecutor, + K1Validator, + OwnableValidator, } export type Execution = { diff --git a/src/modules/validators/K1ValidatorModule.ts b/src/modules/validators/K1ValidatorModule.ts index 7990cfdc9..7eaa1299b 100644 --- a/src/modules/validators/K1ValidatorModule.ts +++ b/src/modules/validators/K1ValidatorModule.ts @@ -1,13 +1,12 @@ -import { type Hex, getAddress } from "viem" import { K1_VALIDATOR, ModuleType, type SmartAccountSigner } from "../../account/index.js" -import { BaseModule } from "../base/BaseModule.js" import type { V3ModuleInfo } from "../utils/Types.js" +import { BaseValidationModule } from "../base/BaseValidationModule.js" -export class K1ValidatorModule extends BaseModule { +export class K1ValidatorModule extends BaseValidationModule { private constructor(moduleConfig: V3ModuleInfo, signer: SmartAccountSigner) { super(moduleConfig, signer) } @@ -24,59 +23,4 @@ export class K1ValidatorModule extends BaseModule { const instance = new K1ValidatorModule(moduleInfo, signer) return instance } - - public getSigner(): SmartAccountSigner { - return this.signer - } - - async getDummySignature(): Promise<Hex> { - const moduleAddress = getAddress(this.getAddress()) - const dynamicPart = moduleAddress.substring(2).padEnd(40, "0") - return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000` - } - - // TODO: To be implemented - async getInitData(): Promise<Hex> { - return "0x" - } - - async signUserOpHash(userOpHash: string): Promise<Hex> { - const sig = await this.signer.signMessage({ raw: userOpHash as Hex }) - return sig - } - - async signMessageSmartAccountSigner( - _message: string | Uint8Array, - signer: SmartAccountSigner - ): Promise<string> { - const message = typeof _message === "string" ? _message : { raw: _message } - let signature: `0x${string}` = await signer.signMessage(message) - - const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27 - signature = `0x${signature.slice(0, -2) + correctV.toString(16)}` - } - - return signature - } - - /** - * Signs a message using the appropriate method based on the type of signer. - * - * @param {Uint8Array | string} message - The message to be signed. - * @returns {Promise<string>} A promise resolving to the signature or error message. - * @throws {Error} If the signer type is invalid or unsupported. - */ - async signMessage(_message: Uint8Array | string): Promise<string> { - const message = typeof _message === "string" ? _message : { raw: _message } - let signature = await this.signer.signMessage(message) - - const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27 - signature = signature.slice(0, -2) + correctV.toString(16) - } - return signature - } } diff --git a/src/modules/validators/OwnableValidator.ts b/src/modules/validators/OwnableValidator.ts new file mode 100644 index 000000000..f07003bb9 --- /dev/null +++ b/src/modules/validators/OwnableValidator.ts @@ -0,0 +1,98 @@ +import { + ModuleType, + OWNABLE_VALIDATOR, +} from "../../account/index.js" +import type { V3ModuleInfo } from "../utils/Types.js" +import { BaseValidationModule } from "../base/BaseValidationModule.js" +import { getAddOwnableValidatorOwnerAction, getInstallOwnableValidator, getOwnableValidatorMockSignature, getOwnableValidatorOwners, getRemoveOwnableValidatorOwnerAction, getSetOwnableValidatorThresholdAction } from "@rhinestone/module-sdk" +import { Address, decodeAbiParameters, parseAbiParameters } from "viem" +import { UserOpReceipt } from "../../bundler/index.js" +import { NexusSmartAccount } from "../../account/NexusSmartAccount.js" +import { Hex } from "viem" + +export class OwnableValidator extends BaseValidationModule { + + public smartAccount: NexusSmartAccount + public owners: Address[]; + public threshold: number; + + private constructor(moduleConfig: V3ModuleInfo, smartAccount: NexusSmartAccount) { + const moduleData = decodeAbiParameters(parseAbiParameters('uint256 threshold, address[] owners'), moduleConfig.data); + super(moduleConfig, smartAccount.getSmartAccountOwner()) + this.threshold = Number(moduleData[0]); + this.owners = [...moduleData[1]] as Address[]; + this.smartAccount = smartAccount; + } + + public static async create( + smartAccount: NexusSmartAccount, + threshold: number, + owners: Address[], + hook?: Address + ): Promise<OwnableValidator> { + if(!owners.includes(await smartAccount.getSmartAccountOwner().getAddress())){ + throw Error("Signer needs to be one of the owners") + } + const installData = await getInstallOwnableValidator({ + threshold, + owners, + hook + }) + const moduleInfo: V3ModuleInfo = { + module: OWNABLE_VALIDATOR, + type: ModuleType.Validation, + data: installData, + additionalContext: "0x" + } + const instance = new OwnableValidator(moduleInfo, smartAccount) + return instance + } + + public async setThreshold(threshold: number): Promise<UserOpReceipt> { + const execution = getSetOwnableValidatorThresholdAction(threshold); + const response = await this.smartAccount.sendTransaction({ + to: this.moduleAddress, + data: execution.callData, + value: 0n + }) + const receipt = await response.wait() + return receipt + } + + public async removeOwner(owner: Address): Promise<UserOpReceipt> { + const execution = getRemoveOwnableValidatorOwnerAction(this.smartAccount.publicClient, this.smartAccount, owner); + const response = await this.smartAccount.sendTransaction({ + to: this.moduleAddress, + data: execution.callData, + value: 0n + }) + const receipt = await response.wait() + return receipt + } + + public async addOwner(owner: Address): Promise<UserOpReceipt> { + const execution = getAddOwnableValidatorOwnerAction(owner); + const response = await this.smartAccount.sendTransaction({ + to: this.moduleAddress, + data: execution.callData, + value: 0n + }) + const receipt = await response.wait() + return receipt + } + + public async getOwners(): Promise<UserOpReceipt> { + const execution = getOwnableValidatorOwners(this.smartAccount, this.smartAccount.publicClient); + const response = await this.smartAccount.sendTransaction({ + to: this.moduleAddress, + data: execution.callData, + value: 0n + }) + const receipt = await response.wait() + return receipt + } + + public getMockSignature(): Hex { + return getOwnableValidatorMockSignature(); + } +} diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index d2e3220ea..f1b233ada 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -7,8 +7,8 @@ import { createWalletClient, encodeFunctionData, getContract, - hashMessage, - parseAbi + parseAbi, + verifyMessage } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { bsc } from "viem/chains" @@ -96,8 +96,19 @@ describe("Account:Read", () => { }) const message = "hello world" + const saOwner = smartAccount.getSmartAccountOwner(); + console.log("SA owner ", await saOwner.getAddress()); + const signature = await smartAccount.signMessage(message) expect(signature).toBeTruthy() + + const isValid = await verifyMessage({ + address: smartAccountAddress, + message: "test", + signature + }) + + console.log(isValid, "isValid"); }, 50000 ) @@ -150,657 +161,626 @@ describe("Account:Read", () => { // 60000 // ) - test.concurrent( - "should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", - async () => { - const account = privateKeyToAccount(`0x${privateKey}`) - - const createSmartAccount = createSmartAccountClient({ - signer: account, - bundlerUrl - }) - - await expect(createSmartAccount).rejects.toThrow( - ERROR_MESSAGES.MISSING_RPC_URL - ) - }, - 50000 - ) - // test.concurrent( - // "should get all modules", + // "should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", // async () => { - // const modules = await smartAccount.getAllModules() - // expect(modules).toContain(DEFAULT_SESSION_KEY_MANAGER_MODULE) // session manager module - // expect(modules).toContain(DEFAULT_ECDSA_OWNERSHIP_MODULE) // ecdsa ownership module - // }, - // 30000 - // ) + // const account = privateKeyToAccount(`0x${privateKey}`) - test.concurrent( - "should check if module is enabled on the smart account", - async () => { - const isEnabled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - K1_VALIDATOR - ) - expect(isEnabled).toBeTruthy() - }, - 30000 - ) + // const createSmartAccount = createSmartAccountClient({ + // signer: account, + // bundlerUrl + // }) - // test.concurrent( - // "should get disabled module data", - // async () => { - // const disableModuleData = await smartAccount.getDisableModuleData( - // DEFAULT_ECDSA_OWNERSHIP_MODULE, - // DEFAULT_ECDSA_OWNERSHIP_MODULE + // await expect(createSmartAccount).rejects.toThrow( + // ERROR_MESSAGES.MISSING_RPC_URL // ) - // expect(disableModuleData).toBeTruthy() // }, - // 30000 + // 50000 // ) + // // test.concurrent( + // // "should get all modules", + // // async () => { + // // const modules = await smartAccount.getAllModules() + // // expect(modules).toContain(DEFAULT_SESSION_KEY_MANAGER_MODULE) // session manager module + // // expect(modules).toContain(DEFAULT_ECDSA_OWNERSHIP_MODULE) // ecdsa ownership module + // // }, + // // 30000 + // // ) + // test.concurrent( - // "should get setup and enable module data", + // "should check if module is enabled on the smart account", // async () => { - // const module = await createECDSAOwnershipValidationModule({ - // signer: walletClient - // }) - // const initData = await module.getInitData() - // const setupAndEnableModuleData = - // await smartAccount.getSetupAndEnableModuleData( - // DEFAULT_ECDSA_OWNERSHIP_MODULE, - // initData - // ) - // expect(setupAndEnableModuleData).toBeTruthy() + // const isEnabled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // K1_VALIDATOR + // ) + // expect(isEnabled).toBeTruthy() // }, // 30000 // ) - test.concurrent( - "should create a smartAccountClient from an ethers signer", - async () => { - const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) - const ethersSigner = new Wallet(privateKey, ethersProvider) - - const smartAccount = await createSmartAccountClient({ - signer: ethersSigner, - bundlerUrl, - rpcUrl: chain.rpcUrls.default.http[0] - }) - const address = await smartAccount.getAccountAddress() - expect(address).toBeTruthy() - } - ) - - test.concurrent( - "should pickup the rpcUrl from viem wallet and ethers", - async () => { - const newRpcUrl = "http://localhost:8545" - const defaultRpcUrl = chain.rpcUrls.default.http[0] //http://127.0.0.1:8545" - - const ethersProvider = new JsonRpcProvider(newRpcUrl) - const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider) - - const originalEthersProvider = new JsonRpcProvider( - chain.rpcUrls.default.http[0] - ) - const ethersSigner = new Wallet(privateKey, originalEthersProvider) - - const accountOne = privateKeyToAccount(`0x${privateKey}`) - const walletClientWithNewRpcUrl = createWalletClient({ - account: accountOne, - chain, - transport: http(newRpcUrl) - }) - const [ - smartAccountFromEthersWithNewRpc, - smartAccountFromViemWithNewRpc, - smartAccountFromEthersWithOldRpc, - smartAccountFromViemWithOldRpc - ] = await Promise.all([ - createSmartAccountClient({ - chainId, - signer: ethersSignerWithNewRpcUrl, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: newRpcUrl - }), - createSmartAccountClient({ - chainId, - signer: walletClientWithNewRpcUrl, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: newRpcUrl - }), - createSmartAccountClient({ - chainId, - signer: ethersSigner, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: chain.rpcUrls.default.http[0] - }), - createSmartAccountClient({ - chainId, - signer: walletClient, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: chain.rpcUrls.default.http[0] - }) - ]) - - const [ - smartAccountFromEthersWithNewRpcAddress, - smartAccountFromViemWithNewRpcAddress, - smartAccountFromEthersWithOldRpcAddress, - smartAccountFromViemWithOldRpcAddress - ] = await Promise.all([ - smartAccountFromEthersWithNewRpc.getAccountAddress(), - smartAccountFromViemWithNewRpc.getAccountAddress(), - smartAccountFromEthersWithOldRpc.getAccountAddress(), - smartAccountFromViemWithOldRpc.getAccountAddress() - ]) - - expect( - [ - smartAccountFromEthersWithNewRpcAddress, - smartAccountFromViemWithNewRpcAddress, - smartAccountFromEthersWithOldRpcAddress, - smartAccountFromViemWithOldRpcAddress - ].every(Boolean) - ).toBeTruthy() - - expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe( - newRpcUrl - ) - expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe( - newRpcUrl - ) - expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe( - defaultRpcUrl - ) - expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe( - defaultRpcUrl - ) - } - ) - - test.concurrent( - "should read estimated user op gas values", - async () => { - const tx = { - to: recipient, - data: "0x" - } - - const userOp = await smartAccount.buildUserOp([tx]) - - const estimatedGas = await smartAccount.estimateUserOpGas(userOp) - console.log(estimatedGas, "estimatedGas") - expect(estimatedGas.maxFeePerGas).toBeTruthy() - expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() - expect(estimatedGas.verificationGasLimit).toBeTruthy() - expect(estimatedGas.callGasLimit).toBeTruthy() - expect(estimatedGas.preVerificationGas).toBeTruthy() - }, - 30000 - ) - - test.concurrent("should have an active validation module", async () => { - const module = smartAccount.activeValidationModule - expect(module).toBeTruthy() - }) + // // test.concurrent( + // // "should get disabled module data", + // // async () => { + // // const disableModuleData = await smartAccount.getDisableModuleData( + // // DEFAULT_ECDSA_OWNERSHIP_MODULE, + // // DEFAULT_ECDSA_OWNERSHIP_MODULE + // // ) + // // expect(disableModuleData).toBeTruthy() + // // }, + // // 30000 + // // ) + + // // test.concurrent( + // // "should get setup and enable module data", + // // async () => { + // // const module = await createECDSAOwnershipValidationModule({ + // // signer: walletClient + // // }) + // // const initData = await module.getInitData() + // // const setupAndEnableModuleData = + // // await smartAccount.getSetupAndEnableModuleData( + // // DEFAULT_ECDSA_OWNERSHIP_MODULE, + // // initData + // // ) + // // expect(setupAndEnableModuleData).toBeTruthy() + // // }, + // // 30000 + // // ) // test.concurrent( - // "should create a smart account with paymaster by creating instance", + // "should create a smartAccountClient from an ethers signer", // async () => { - // const paymaster = new Paymaster({ paymasterUrl }) + // const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) + // const ethersSigner = new Wallet(privateKey, ethersProvider) // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, + // signer: ethersSigner, // bundlerUrl, - // paymaster + // rpcUrl: chain.rpcUrls.default.http[0] // }) - // expect(smartAccount.paymaster).not.toBeNull() - // expect(smartAccount.paymaster).not.toBeUndefined() - // } - // ) - test.concurrent( - "should fail to create a smartAccountClient from a walletClient without a chainId", - async () => { - const account = privateKeyToAccount(generatePrivateKey()) - const viemWalletClientNoChainId = createWalletClient({ - account, - transport: http(chain.rpcUrls.default.http[0]) - }) - expect( - await expect( - createSmartAccountClient({ - signer: viemWalletClientNoChainId, - bundlerUrl, - rpcUrl: chain.rpcUrls.default.http[0] - }) - ).rejects.toThrow("Cannot consume a viem wallet without a chainId") - ) - } - ) + // const sig = await smartAccount.signMessage("test"); + // console.log(sig, "Signature"); - test.concurrent( - "should fail to create a smartAccountClient from a walletClient without an account", - async () => { - const viemWalletNoAccount = createWalletClient({ - transport: http(chain.rpcUrls.default.http[0]) - }) - - expect(async () => - createSmartAccountClient({ - signer: viemWalletNoAccount, - bundlerUrl, - rpcUrl: chain.rpcUrls.default.http[0] - }) - ).rejects.toThrow("Cannot consume a viem wallet without an account") - } - ) - - test.concurrent("should have account addresses", async () => { - const addresses = await Promise.all([ - sender, - smartAccount.getAddress(), - recipient, - smartAccountTwo.getAddress() - ]) - /* - * addresses: [ - * '0xFA66E705cf2582cF56528386Bb9dFCA119767262', // sender - * '0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC', // smartAccountSender - * '0x3079B249DFDE4692D7844aA261f8cf7D927A0DA5', // recipient - * '0x5F141ee1390D4c9d033a00CB940E509A4811a5E0' // smartAccountRecipient - * ] - */ - expect(addresses.every(Boolean)).toBeTruthy() - }) - - // test.concurrent( - // "should create a smart account with paymaster with an api key", - // async () => { - // const paymaster = smartAccount.paymaster - // expect(paymaster).not.toBeNull() - // expect(paymaster).not.toBeUndefined() + // const address = await smartAccount.getAccountAddress() + // expect(address).toBeTruthy() // } // ) - test.concurrent("should not throw and error, chain ids match", async () => { - const mockBundlerUrl = - "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" - const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - - const config: BiconomySmartAccountV2Config = { - signer: walletClient, - bundlerUrl: mockBundlerUrl, - paymasterUrl: mockPaymasterUrl - } - - await expect( - compareChainIds(walletClient, config, false) - ).resolves.not.toThrow() - }) - - test.concurrent( - "should throw and error, bundlerUrl chain id and paymaster url chain id does not match with validation module", - async () => { - const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - - const k1ValidationModule = await createK1ValidatorModule( - smartAccount.getSigner() - ) + // test.concurrent( + // "should pickup the rpcUrl from viem wallet and ethers", + // async () => { + // const newRpcUrl = "http://localhost:8545" + // const defaultRpcUrl = chain.rpcUrls.default.http[0] //http://127.0.0.1:8545" - const config: BiconomySmartAccountV2Config = { - defaultValidationModule: k1ValidationModule, - activeValidationModule: k1ValidationModule, - bundlerUrl, - paymasterUrl: mockPaymasterUrl - } + // const ethersProvider = new JsonRpcProvider(newRpcUrl) + // const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider) - await expect( - compareChainIds(walletClient, config, false) - ).rejects.toThrow() - } - ) + // const originalEthersProvider = new JsonRpcProvider( + // chain.rpcUrls.default.http[0] + // ) + // const ethersSigner = new Wallet(privateKey, originalEthersProvider) - test.concurrent( - "should throw and error, signer has chain id (56) and paymasterUrl has chain id (80002)", - async () => { - const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/80002/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + // const accountOne = privateKeyToAccount(`0x${privateKey}`) + // const walletClientWithNewRpcUrl = createWalletClient({ + // account: accountOne, + // chain, + // transport: http(newRpcUrl) + // }) + // const [ + // smartAccountFromEthersWithNewRpc, + // smartAccountFromViemWithNewRpc, + // smartAccountFromEthersWithOldRpc, + // smartAccountFromViemWithOldRpc + // ] = await Promise.all([ + // createSmartAccountClient({ + // chainId, + // signer: ethersSignerWithNewRpcUrl, + // bundlerUrl: getBundlerUrl(1337), + // rpcUrl: newRpcUrl + // }), + // createSmartAccountClient({ + // chainId, + // signer: walletClientWithNewRpcUrl, + // bundlerUrl: getBundlerUrl(1337), + // rpcUrl: newRpcUrl + // }), + // createSmartAccountClient({ + // chainId, + // signer: ethersSigner, + // bundlerUrl: getBundlerUrl(1337), + // rpcUrl: chain.rpcUrls.default.http[0] + // }), + // createSmartAccountClient({ + // chainId, + // signer: walletClient, + // bundlerUrl: getBundlerUrl(1337), + // rpcUrl: chain.rpcUrls.default.http[0] + // }) + // ]) - const walletClientBsc = createWalletClient({ - account: walletClient.account, - chain: bsc, - transport: http(bsc.rpcUrls.default.http[0]) - }) + // const [ + // smartAccountFromEthersWithNewRpcAddress, + // smartAccountFromViemWithNewRpcAddress, + // smartAccountFromEthersWithOldRpcAddress, + // smartAccountFromViemWithOldRpcAddress + // ] = await Promise.all([ + // smartAccountFromEthersWithNewRpc.getAccountAddress(), + // smartAccountFromViemWithNewRpc.getAccountAddress(), + // smartAccountFromEthersWithOldRpc.getAccountAddress(), + // smartAccountFromViemWithOldRpc.getAccountAddress() + // ]) - const config: BiconomySmartAccountV2Config = { - signer: walletClientBsc, - bundlerUrl, - paymasterUrl: mockPaymasterUrl - } + // expect( + // [ + // smartAccountFromEthersWithNewRpcAddress, + // smartAccountFromViemWithNewRpcAddress, + // smartAccountFromEthersWithOldRpcAddress, + // smartAccountFromViemWithOldRpcAddress + // ].every(Boolean) + // ).toBeTruthy() + + // expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe( + // newRpcUrl + // ) + // expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe( + // newRpcUrl + // ) + // expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe( + // defaultRpcUrl + // ) + // expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe( + // defaultRpcUrl + // ) + // } + // ) - await expect( - compareChainIds(walletClientBsc, config, false) - ).rejects.toThrow() - } - ) + // test.concurrent( + // "should read estimated user op gas values", + // async () => { + // const tx = { + // to: recipient, + // data: "0x" + // } - test.concurrent("should return chain object for chain id 1", async () => { - const chainId = 1 - const chain = getChain(chainId) - expect(chain.id).toBe(chainId) - }) + // const userOp = await smartAccount.buildUserOp([tx]) - test.concurrent("should have correct fields", async () => { - const chainId = 1 - const chain = getChain(chainId) - ;[ - "blockExplorers", - "contracts", - "fees", - "formatters", - "id", - "name", - "nativeCurrency", - "rpcUrls", - "serializers" - ].every((field) => { - expect(chain).toHaveProperty(field) - }) - }) + // const estimatedGas = await smartAccount.estimateUserOpGas(userOp) + // console.log(estimatedGas, "estimatedGas") + // expect(estimatedGas.maxFeePerGas).toBeTruthy() + // expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() + // expect(estimatedGas.verificationGasLimit).toBeTruthy() + // expect(estimatedGas.callGasLimit).toBeTruthy() + // expect(estimatedGas.preVerificationGas).toBeTruthy() + // }, + // 30000 + // ) - test.concurrent("should throw an error, chain id not found", async () => { - const chainId = 0 - expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) - }) + // test.concurrent("should have an active validation module", async () => { + // const module = smartAccount.activeValidationModule + // expect(module).toBeTruthy() + // }) - test.concurrent( - "should have matching counterFactual address from the contracts with smartAccount.getAddress()", - async () => { - const client = createWalletClient({ - account, - chain, - transport: http() - }) + // // test.concurrent( + // // "should create a smart account with paymaster by creating instance", + // // async () => { + // // const paymaster = new Paymaster({ paymasterUrl }) + + // // const smartAccount = await createSmartAccountClient({ + // // signer: walletClient, + // // bundlerUrl, + // // paymaster + // // }) + // // expect(smartAccount.paymaster).not.toBeNull() + // // expect(smartAccount.paymaster).not.toBeUndefined() + // // } + // // ) + // test.concurrent( + // "should fail to create a smartAccountClient from a walletClient without a chainId", + // async () => { + // const account = privateKeyToAccount(generatePrivateKey()) + // const viemWalletClientNoChainId = createWalletClient({ + // account, + // transport: http(chain.rpcUrls.default.http[0]) + // }) - const smartAccount = await createSmartAccountClient({ - signer: client, - bundlerUrl, - paymasterUrl - }) + // expect( + // await expect( + // createSmartAccountClient({ + // signer: viemWalletClientNoChainId, + // bundlerUrl, + // rpcUrl: chain.rpcUrls.default.http[0] + // }) + // ).rejects.toThrow("Cannot consume a viem wallet without a chainId") + // ) + // } + // ) - const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() + // test.concurrent( + // "should fail to create a smartAccountClient from a walletClient without an account", + // async () => { + // const viemWalletNoAccount = createWalletClient({ + // transport: http(chain.rpcUrls.default.http[0]) + // }) - const publicClient = createPublicClient({ - chain, - transport: http() - }) + // expect(async () => + // createSmartAccountClient({ + // signer: viemWalletNoAccount, + // bundlerUrl, + // rpcUrl: chain.rpcUrls.default.http[0] + // }) + // ).rejects.toThrow("Cannot consume a viem wallet without an account") + // } + // ) - const factoryContract = getContract({ - address: DEFAULT_BICONOMY_FACTORY_ADDRESS, - abi: BiconomyFactoryAbi, - client: { public: publicClient, wallet: client } - }) + // test.concurrent("should have account addresses", async () => { + // const addresses = await Promise.all([ + // sender, + // smartAccount.getAddress(), + // recipient, + // smartAccountTwo.getAddress() + // ]) + // /* + // * addresses: [ + // * '0xFA66E705cf2582cF56528386Bb9dFCA119767262', // sender + // * '0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC', // smartAccountSender + // * '0x3079B249DFDE4692D7844aA261f8cf7D927A0DA5', // recipient + // * '0x5F141ee1390D4c9d033a00CB940E509A4811a5E0' // smartAccountRecipient + // * ] + // */ + // expect(addresses.every(Boolean)).toBeTruthy() + // }) - const smartAccountAddressFromContracts = - await factoryContract.read.computeAccountAddress([ - account.address, - BigInt(0) - ]) + // // test.concurrent( + // // "should create a smart account with paymaster with an api key", + // // async () => { + // // const paymaster = smartAccount.paymaster + // // expect(paymaster).not.toBeNull() + // // expect(paymaster).not.toBeUndefined() + // // } + // // ) + + // test.concurrent("should not throw and error, chain ids match", async () => { + // const mockBundlerUrl = + // "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" + // const mockPaymasterUrl = + // "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + + // const config: BiconomySmartAccountV2Config = { + // signer: walletClient, + // bundlerUrl: mockBundlerUrl, + // paymasterUrl: mockPaymasterUrl + // } - expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) - } - ) + // await expect( + // compareChainIds(walletClient, config, false) + // ).resolves.not.toThrow() + // }) // test.concurrent( - // "should have matching #getUserOpHash and entryPoint.getUserOpHash", + // "should throw and error, bundlerUrl chain id and paymaster url chain id does not match with validation module", // async () => { - // const userOp: UserOperationStruct = { - // sender: "0x".padEnd(42, "1") as string, - // nonce: 2, - // initCode: "0x3333", - // callData: "0x4444", - // callGasLimit: 5, - // verificationGasLimit: 6, - // preVerificationGas: 7, - // maxFeePerGas: 8, - // maxPriorityFeePerGas: 9, - // paymasterAndData: "0xaaaaaa", - // signature: "0xbbbb" - // } + // const mockPaymasterUrl = + // "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - // const epHash = await publicClient.readContract({ - // address: DEFAULT_ENTRYPOINT_ADDRESS, - // abi: EntryPointAbi, - // functionName: "getUserOpHash", - // // @ts-ignore - // args: [userOp] - // }) + // const k1ValidationModule = await createK1ValidatorModule( + // smartAccount.getSigner() + // ) - // const hash = await smartAccount.getUserOpHash(userOp) - // expect(hash).toBe(epHash) - // }, - // 30000 + // const config: BiconomySmartAccountV2Config = { + // defaultValidationModule: k1ValidationModule, + // activeValidationModule: k1ValidationModule, + // bundlerUrl, + // paymasterUrl: mockPaymasterUrl + // } + + // await expect( + // compareChainIds(walletClient, config, false) + // ).rejects.toThrow() + // } // ) - test.concurrent( - "should be deployed to counterfactual address", - async () => { - const accountAddress = await smartAccount.getAccountAddress() - const byteCode = await publicClient.getBytecode({ - address: accountAddress as Hex - }) + // test.concurrent( + // "should throw and error, signer has chain id (56) and paymasterUrl has chain id (80002)", + // async () => { + // const mockPaymasterUrl = + // "https://paymaster.biconomy.io/api/v1/80002/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - expect(byteCode?.length).toBeGreaterThan(2) - }, - 10000 - ) + // const walletClientBsc = createWalletClient({ + // account: walletClient.account, + // chain: bsc, + // transport: http(bsc.rpcUrls.default.http[0]) + // }) - test.concurrent( - "should check if ecdsaOwnershipModule is enabled", - async () => { - const ecdsaOwnershipModule = K1_VALIDATOR + // const config: BiconomySmartAccountV2Config = { + // signer: walletClientBsc, + // bundlerUrl, + // paymasterUrl: mockPaymasterUrl + // } - expect(ecdsaOwnershipModule).toBe( - smartAccount.activeValidationModule.getAddress() - ) - } - ) + // await expect( + // compareChainIds(walletClientBsc, config, false) + // ).rejects.toThrow() + // } + // ) - test.concurrent( - "should fail to deploy a smart account if no native token balance or paymaster", - async () => { - const newPrivateKey = generatePrivateKey() - const newAccount = privateKeyToAccount(newPrivateKey) + // test.concurrent("should return chain object for chain id 1", async () => { + // const chainId = 1 + // const chain = getChain(chainId) + // expect(chain.id).toBe(chainId) + // }) - const newViemWallet = createWalletClient({ - account: newAccount, - chain, - transport: http() - }) + // test.concurrent("should have correct fields", async () => { + // const chainId = 1 + // const chain = getChain(chainId) + // ;[ + // "blockExplorers", + // "contracts", + // "fees", + // "formatters", + // "id", + // "name", + // "nativeCurrency", + // "rpcUrls", + // "serializers" + // ].every((field) => { + // expect(chain).toHaveProperty(field) + // }) + // }) - const smartAccount = await createSmartAccountClient({ - signer: newViemWallet, - paymasterUrl, - bundlerUrl - }) + // test.concurrent("should throw an error, chain id not found", async () => { + // const chainId = 0 + // expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) + // }) - expect(async () => smartAccount.deploy()).rejects.toThrow( - ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY - ) - } - ) + // test.concurrent( + // "should have matching counterFactual address from the contracts with smartAccount.getAddress()", + // async () => { + // const client = createWalletClient({ + // account, + // chain, + // transport: http() + // }) - test.concurrent( - "should fail to deploy a smart account if already deployed", - async () => { - expect(async () => smartAccount.deploy()).rejects.toThrow( - ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED - ) - }, - 60000 - ) + // const smartAccount = await createSmartAccountClient({ + // signer: client, + // bundlerUrl, + // paymasterUrl + // }) - // test.concurrent("should fetch balances for smartAccount", async () => { - // const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - // const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ - // token - // ]) + // const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() - // expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) - // }) + // const publicClient = createPublicClient({ + // chain, + // transport: http() + // }) - test.concurrent("should error if no recipient exists", async () => { - const token: Hex = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + // const factoryContract = getContract({ + // address: DEFAULT_BICONOMY_FACTORY_ADDRESS, + // abi: BiconomyFactoryAbi, + // client: { public: publicClient, wallet: client } + // }) - const txs = [ - { address: token, amount: BigInt(1), recipient: sender }, - { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } - ] + // const smartAccountAddressFromContracts = + // await factoryContract.read.computeAccountAddress([ + // account.address, + // BigInt(0) + // ]) - expect(async () => smartAccount.withdraw(txs)).rejects.toThrow( - ERROR_MESSAGES.NO_RECIPIENT - ) - }) + // expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) + // } + // ) - test.concurrent( - "should error when withdraw all of native token is attempted without an amount explicitly set", - async () => { - expect(async () => smartAccount.withdraw(null, sender)).rejects.toThrow( - ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT - ) - }, - 6000 - ) + // // test.concurrent( + // // "should have matching #getUserOpHash and entryPoint.getUserOpHash", + // // async () => { + // // const userOp: UserOperationStruct = { + // // sender: "0x".padEnd(42, "1") as string, + // // nonce: 2, + // // initCode: "0x3333", + // // callData: "0x4444", + // // callGasLimit: 5, + // // verificationGasLimit: 6, + // // preVerificationGas: 7, + // // maxFeePerGas: 8, + // // maxPriorityFeePerGas: 9, + // // paymasterAndData: "0xaaaaaa", + // // signature: "0xbbbb" + // // } + + // // const epHash = await publicClient.readContract({ + // // address: DEFAULT_ENTRYPOINT_ADDRESS, + // // abi: EntryPointAbi, + // // functionName: "getUserOpHash", + // // // @ts-ignore + // // args: [userOp] + // // }) + + // // const hash = await smartAccount.getUserOpHash(userOp) + // // expect(hash).toBe(epHash) + // // }, + // // 30000 + // // ) - test.concurrent( - "should check native token balance and more token info for smartAccount", - async () => { - const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() + // test.concurrent( + // "should be deployed to counterfactual address", + // async () => { + // const accountAddress = await smartAccount.getAccountAddress() + // const byteCode = await publicClient.getBytecode({ + // address: accountAddress as Hex + // }) - expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) - expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) - expect(ethBalanceFromSmartAccount.chainId).toBe(chainId) - expect(ethBalanceFromSmartAccount.decimals).toBe(18) - }, - 60000 - ) + // expect(byteCode?.length).toBeGreaterThan(2) + // }, + // 10000 + // ) // test.concurrent( - // "should check balance of supported token", + // "should check if ecdsaOwnershipModule is enabled", // async () => { - // const tokens = await smartAccount.getSupportedTokens() - // const [firstToken] = tokens + // const ecdsaOwnershipModule = K1_VALIDATOR - // expect(tokens.length).toBeGreaterThan(0) - // expect(tokens[0]).toHaveProperty("balance") - // expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) - // }, - // 60000 + // expect(ecdsaOwnershipModule).toBe( + // smartAccount.activeValidationModule.getAddress() + // ) + // } // ) // test.concurrent( - // "should verify a correct signature through isValidSignature", + // "should fail to deploy a smart account if no native token balance or paymaster", // async () => { - // const eip1271MagicValue = "0x1626ba7e" - // const message = "Some message from dApp" - // const messageHash = hashMessage(message) - // const signature = await smartAccount.signMessage(messageHash) - - // const response = await publicClient.readContract({ - // address: await smartAccount.getAccountAddress(), - // abi: NexusAccountAbi, - // functionName: "isValidSignature", - // args: [messageHash, signature] + // const newPrivateKey = generatePrivateKey() + // const newAccount = privateKeyToAccount(newPrivateKey) + + // const newViemWallet = createWalletClient({ + // account: newAccount, + // chain, + // transport: http() + // }) + + // const smartAccount = await createSmartAccountClient({ + // signer: newViemWallet, + // paymasterUrl, + // bundlerUrl // }) - // expect(response).toBe(eip1271MagicValue) + // expect(async () => smartAccount.deploy()).rejects.toThrow( + // ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY + // ) // } // ) - test.concurrent("should verifySignature of deployed", async () => { - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl - }) + // test.concurrent( + // "should fail to deploy a smart account if already deployed", + // async () => { + // expect(async () => smartAccount.deploy()).rejects.toThrow( + // ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED + // ) + // }, + // 60000 + // ) - const message = "hello world" + // // test.concurrent("should fetch balances for smartAccount", async () => { + // // const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + // // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) + // // const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ + // // token + // // ]) - const signature = await smartAccount.signMessage(message) + // // expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) + // // }) - const isVerified = await publicClient.verifyMessage({ - address: await smartAccount.getAddress(), - message, - signature - }) + // test.concurrent("should error if no recipient exists", async () => { + // const token: Hex = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - expect(isVerified).toBeTruthy() - }) + // const txs = [ + // { address: token, amount: BigInt(1), recipient: sender }, + // { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } + // ] - test.concurrent("should verifySignature of not deployed", async () => { - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - index: 100n - }) + // expect(async () => smartAccount.withdraw(txs)).rejects.toThrow( + // ERROR_MESSAGES.NO_RECIPIENT + // ) + // }) - const message = "hello world" + // test.concurrent( + // "should error when withdraw all of native token is attempted without an amount explicitly set", + // async () => { + // expect(async () => smartAccount.withdraw(null, sender)).rejects.toThrow( + // ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT + // ) + // }, + // 6000 + // ) - const signature = await smartAccount.signMessage(message) + // test.concurrent( + // "should check native token balance and more token info for smartAccount", + // async () => { + // const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() - const isVerified = await publicClient.verifyMessage({ - address: await smartAccount.getAccountAddress(), - message, - signature - }) + // expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) + // expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) + // expect(ethBalanceFromSmartAccount.chainId).toBe(chainId) + // expect(ethBalanceFromSmartAccount.decimals).toBe(18) + // }, + // 60000 + // ) - expect(isVerified).toBeTruthy() - }) + // // test.concurrent( + // // "should check balance of supported token", + // // async () => { + // // const tokens = await smartAccount.getSupportedTokens() + // // const [firstToken] = tokens + + // // expect(tokens.length).toBeGreaterThan(0) + // // expect(tokens[0]).toHaveProperty("balance") + // // expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) + // // }, + // // 60000 + // // ) + + // // test.concurrent( + // // "should verify a correct signature through isValidSignature", + // // async () => { + // // const eip1271MagicValue = "0x1626ba7e" + // // const message = "Some message from dApp" + // // const messageHash = hashMessage(message) + // // const signature = await smartAccount.signMessage(messageHash) + + // // const response = await publicClient.readContract({ + // // address: await smartAccount.getAccountAddress(), + // // abi: NexusAccountAbi, + // // functionName: "isValidSignature", + // // args: [messageHash, signature] + // // }) + + // // expect(response).toBe(eip1271MagicValue) + // // } + // // ) + + // test.concurrent("should verifySignature of deployed", async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl + // }) + + // const message = "hello world" + + // const signature = await smartAccount.signMessage(message) + + // const isVerified = await publicClient.verifyMessage({ + // address: await smartAccount.getAddress(), + // message, + // signature + // }) + + // expect(isVerified).toBeTruthy() + // }) - test.concurrent( - "should simulate a user operation execution, expecting to fail", - async () => { - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl - }) + // test.concurrent("should verifySignature of not deployed", async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl, + // index: 100n + // }) - const balances = await smartAccount.getBalances() - expect(balances[0].amount).toBeGreaterThan(0n) + // const message = "hello world" - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function deposit()"]), - functionName: "deposit" - }) + // const signature = await smartAccount.signMessage(message) - const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" - - // fail if value is not bigger than 1 - // the contract call requires a deposit of at least 1 wei - const tx1 = { - to: amoyTestContract as Hex, - data: encodedCall, - value: 0 - } - const tx2 = { - to: amoyTestContract as Hex, - data: encodedCall, - value: 2 - } - - await expect(smartAccount.buildUserOp([tx1, tx2])).rejects.toThrow() - } - ) + // const isVerified = await publicClient.verifyMessage({ + // address: await smartAccount.getAccountAddress(), + // message, + // signature + // }) + + // expect(isVerified).toBeTruthy() + // }) // test.concurrent( - // "should simulate a user operation execution, expecting to pass execution", + // "should simulate a user operation execution, expecting to fail", // async () => { // const smartAccount = await createSmartAccountClient({ // signer: walletClient, @@ -822,7 +802,7 @@ describe("Account:Read", () => { // const tx1 = { // to: amoyTestContract as Hex, // data: encodedCall, - // value: 2 + // value: 0 // } // const tx2 = { // to: amoyTestContract as Hex, @@ -830,24 +810,59 @@ describe("Account:Read", () => { // value: 2 // } - // await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() + // await expect(smartAccount.buildUserOp([tx1, tx2])).rejects.toThrow() // } // ) - test.concurrent("Should verify supported modes", async () => { - expect( - await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_SINGLE) - ).to.be.true - expect( - await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_BATCH) - ).to.be.true - expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_BATCH)).to - .be.true - expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_SINGLE)) - .to.be.true - - expect( - await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DELEGATE_SINGLE) - ).to.be.false - }) + // // test.concurrent( + // // "should simulate a user operation execution, expecting to pass execution", + // // async () => { + // // const smartAccount = await createSmartAccountClient({ + // // signer: walletClient, + // // bundlerUrl + // // }) + + // // const balances = await smartAccount.getBalances() + // // expect(balances[0].amount).toBeGreaterThan(0n) + + // // const encodedCall = encodeFunctionData({ + // // abi: parseAbi(["function deposit()"]), + // // functionName: "deposit" + // // }) + + // // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" + + // // // fail if value is not bigger than 1 + // // // the contract call requires a deposit of at least 1 wei + // // const tx1 = { + // // to: amoyTestContract as Hex, + // // data: encodedCall, + // // value: 2 + // // } + // // const tx2 = { + // // to: amoyTestContract as Hex, + // // data: encodedCall, + // // value: 2 + // // } + + // // await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() + // // } + // // ) + + // test.concurrent("Should verify supported modes", async () => { + // expect( + // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_SINGLE) + // ).to.be.true + // expect( + // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_BATCH) + // ).to.be.true + // expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_BATCH)).to + // .be.true + // expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_SINGLE)) + // .to.be.true + + // expect( + // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DELEGATE_SINGLE) + // ).to.be.false + // }) }) diff --git a/tests/modules/ownableValidator.ts/write.test.ts b/tests/modules/ownableValidator.ts/write.test.ts new file mode 100644 index 000000000..ca466eaea --- /dev/null +++ b/tests/modules/ownableValidator.ts/write.test.ts @@ -0,0 +1,110 @@ +import { http, createWalletClient } from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { baseSepolia } from "viem/chains" +import { describe, expect, test } from "vitest" +import { + ModuleName, + ModuleType, + OWNABLE_VALIDATOR, + createOwnableValidatorModule +} from "../../../src" +import { createSmartAccountClient } from "../../../src/account" +import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" +import type { UserOpReceipt } from "../../../src/bundler" +import { getConfig } from "../../utils" + +describe("Account:Modules:OwnableValidator", async () => { + const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } + const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + const { privateKey, privateKeyTwo } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + + const [walletClient] = [ + createWalletClient({ + account, + chain: baseSepolia, + transport: http() + }) + ] + + const smartAccount: NexusSmartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl: + "https://api.pimlico.io/v2/84532/rpc?apikey=22c48af7-4886-4c7d-8d4c-5d50262a23f3" + }) + + const owners = [walletClient.account.address, accountTwo.address] + + const ownableValidatorModule = await createOwnableValidatorModule(smartAccount, 2, owners) + smartAccount.setActiveValidationModule(ownableValidatorModule) + + describe("Ownable Validator Module Tests", async () => { + test("install Ownable Executor", async () => { + + const isInstalledBefore = await smartAccount.isModuleInstalled( + ModuleType.Validation, + OWNABLE_VALIDATOR + ) + + if(!isInstalledBefore) { + const userOpReceipt: UserOpReceipt = await smartAccount.installModule( + ModuleName.OwnableValidator + ) + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + OWNABLE_VALIDATOR + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeTruthy() + } + + }, 60000) + + test("Ownable Validator Module should be installed", async () => { + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + OWNABLE_VALIDATOR + ) + expect(isInstalled).toBeTruthy() + }, 60000) + + test("uninstall Ownable Validator Module", async () => { + const userOpReceipt = await smartAccount.uninstallModule( + ModuleName.OwnableValidator + ) + + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + OWNABLE_VALIDATOR + ) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeFalsy() + expect(userOpReceipt).toBeTruthy() + }, 60000) + + test("should add an owner to the module", async () => { + const userOpReceipt = await ownableValidatorModule.addOwner( + "0x4D8249d21c9553b1bD23cABF611011376dd3416a" + ) + + expect(userOpReceipt.success).toBeTruthy() + }, 60000) + + test("should remove an owner from the module", async () => { + const userOpReceipt = await ownableValidatorModule.removeOwner( + "0x4D8249d21c9553b1bD23cABF611011376dd3416a" + ) + expect(userOpReceipt.success).toBeTruthy() + }, 60000) + + test("should get all the owners", async () => { + const owners = await ownableValidatorModule.getOwners() + console.log(owners, "owners") + }, 60000) + }) +}) From 9a5b8dfd481bbe52e8c2eadd631e535cc63c2c1c Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Tue, 25 Jun 2024 17:51:05 +0300 Subject: [PATCH 1212/1247] fix: lint --- src/modules/index.ts | 2 +- src/modules/utils/Helper.ts | 11 +++- src/modules/utils/Types.ts | 6 +- src/modules/validators/K1ValidatorModule.ts | 2 +- src/modules/validators/OwnableValidator.ts | 64 ++++++++++++------- tests/account/read.test.ts | 10 +-- .../modules/ownableValidator.ts/write.test.ts | 36 ++++++----- 7 files changed, 78 insertions(+), 53 deletions(-) diff --git a/src/modules/index.ts b/src/modules/index.ts index 3d18ceb80..0988488d3 100644 --- a/src/modules/index.ts +++ b/src/modules/index.ts @@ -9,4 +9,4 @@ export * from "./interfaces/IValidationModule.js" export const createOwnableExecutorModule = OwnableExecutorModule.create export const createK1ValidatorModule = K1ValidatorModule.create -export const createOwnableValidatorModule = OwnableValidator.create \ No newline at end of file +export const createOwnableValidatorModule = OwnableValidator.create diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index 56b7450b8..8d6b865c2 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -15,8 +15,8 @@ import { ModuleName, type SignerData, type Transaction, - createOwnableExecutorModule, createK1ValidatorModule, + createOwnableExecutorModule, createOwnableValidatorModule } from "../../index.js" import type { BaseModule } from "../base/BaseModule.js" @@ -249,8 +249,13 @@ export const createModuleInstace = async ( ): Promise<BaseModule> => { if (moduleName === ModuleName.OwnableExecutor) { return await createOwnableExecutorModule(smartAccount) - } else if (moduleName === ModuleName.OwnableValidator) { - return await createOwnableValidatorModule(smartAccount, config.threshold, config.owners) + } + if (moduleName === ModuleName.OwnableValidator) { + return await createOwnableValidatorModule( + smartAccount, + config.threshold, + config.owners + ) } return await createK1ValidatorModule(smartAccount.getSigner()) } diff --git a/src/modules/utils/Types.ts b/src/modules/utils/Types.ts index 06a5cdd82..93c5175a1 100644 --- a/src/modules/utils/Types.ts +++ b/src/modules/utils/Types.ts @@ -200,9 +200,9 @@ export type V3ModuleInfo = { } export enum ModuleName { - OwnableExecutor, - K1Validator, - OwnableValidator, + OwnableExecutor = 0, + K1Validator = 1, + OwnableValidator = 2 } export type Execution = { diff --git a/src/modules/validators/K1ValidatorModule.ts b/src/modules/validators/K1ValidatorModule.ts index 7eaa1299b..1ad8dae75 100644 --- a/src/modules/validators/K1ValidatorModule.ts +++ b/src/modules/validators/K1ValidatorModule.ts @@ -3,8 +3,8 @@ import { ModuleType, type SmartAccountSigner } from "../../account/index.js" -import type { V3ModuleInfo } from "../utils/Types.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" +import type { V3ModuleInfo } from "../utils/Types.js" export class K1ValidatorModule extends BaseValidationModule { private constructor(moduleConfig: V3ModuleInfo, signer: SmartAccountSigner) { diff --git a/src/modules/validators/OwnableValidator.ts b/src/modules/validators/OwnableValidator.ts index f07003bb9..d83d4ff95 100644 --- a/src/modules/validators/OwnableValidator.ts +++ b/src/modules/validators/OwnableValidator.ts @@ -1,27 +1,36 @@ import { - ModuleType, - OWNABLE_VALIDATOR, -} from "../../account/index.js" -import type { V3ModuleInfo } from "../utils/Types.js" + getAddOwnableValidatorOwnerAction, + getInstallOwnableValidator, + getOwnableValidatorMockSignature, + getOwnableValidatorOwners, + getRemoveOwnableValidatorOwnerAction, + getSetOwnableValidatorThresholdAction +} from "@rhinestone/module-sdk" +import { type Address, decodeAbiParameters, parseAbiParameters } from "viem" +import type { Hex } from "viem" +import type { NexusSmartAccount } from "../../account/NexusSmartAccount.js" +import { ModuleType, OWNABLE_VALIDATOR } from "../../account/index.js" +import type { UserOpReceipt } from "../../bundler/index.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" -import { getAddOwnableValidatorOwnerAction, getInstallOwnableValidator, getOwnableValidatorMockSignature, getOwnableValidatorOwners, getRemoveOwnableValidatorOwnerAction, getSetOwnableValidatorThresholdAction } from "@rhinestone/module-sdk" -import { Address, decodeAbiParameters, parseAbiParameters } from "viem" -import { UserOpReceipt } from "../../bundler/index.js" -import { NexusSmartAccount } from "../../account/NexusSmartAccount.js" -import { Hex } from "viem" +import type { V3ModuleInfo } from "../utils/Types.js" export class OwnableValidator extends BaseValidationModule { - public smartAccount: NexusSmartAccount - public owners: Address[]; - public threshold: number; + public owners: Address[] + public threshold: number - private constructor(moduleConfig: V3ModuleInfo, smartAccount: NexusSmartAccount) { - const moduleData = decodeAbiParameters(parseAbiParameters('uint256 threshold, address[] owners'), moduleConfig.data); + private constructor( + moduleConfig: V3ModuleInfo, + smartAccount: NexusSmartAccount + ) { + const moduleData = decodeAbiParameters( + parseAbiParameters("uint256 threshold, address[] owners"), + moduleConfig.data + ) super(moduleConfig, smartAccount.getSmartAccountOwner()) - this.threshold = Number(moduleData[0]); - this.owners = [...moduleData[1]] as Address[]; - this.smartAccount = smartAccount; + this.threshold = Number(moduleData[0]) + this.owners = [...moduleData[1]] as Address[] + this.smartAccount = smartAccount } public static async create( @@ -30,7 +39,9 @@ export class OwnableValidator extends BaseValidationModule { owners: Address[], hook?: Address ): Promise<OwnableValidator> { - if(!owners.includes(await smartAccount.getSmartAccountOwner().getAddress())){ + if ( + !owners.includes(await smartAccount.getSmartAccountOwner().getAddress()) + ) { throw Error("Signer needs to be one of the owners") } const installData = await getInstallOwnableValidator({ @@ -49,7 +60,7 @@ export class OwnableValidator extends BaseValidationModule { } public async setThreshold(threshold: number): Promise<UserOpReceipt> { - const execution = getSetOwnableValidatorThresholdAction(threshold); + const execution = getSetOwnableValidatorThresholdAction(threshold) const response = await this.smartAccount.sendTransaction({ to: this.moduleAddress, data: execution.callData, @@ -60,7 +71,11 @@ export class OwnableValidator extends BaseValidationModule { } public async removeOwner(owner: Address): Promise<UserOpReceipt> { - const execution = getRemoveOwnableValidatorOwnerAction(this.smartAccount.publicClient, this.smartAccount, owner); + const execution = getRemoveOwnableValidatorOwnerAction( + this.smartAccount.publicClient, + this.smartAccount, + owner + ) const response = await this.smartAccount.sendTransaction({ to: this.moduleAddress, data: execution.callData, @@ -71,7 +86,7 @@ export class OwnableValidator extends BaseValidationModule { } public async addOwner(owner: Address): Promise<UserOpReceipt> { - const execution = getAddOwnableValidatorOwnerAction(owner); + const execution = getAddOwnableValidatorOwnerAction(owner) const response = await this.smartAccount.sendTransaction({ to: this.moduleAddress, data: execution.callData, @@ -82,7 +97,10 @@ export class OwnableValidator extends BaseValidationModule { } public async getOwners(): Promise<UserOpReceipt> { - const execution = getOwnableValidatorOwners(this.smartAccount, this.smartAccount.publicClient); + const execution = getOwnableValidatorOwners( + this.smartAccount, + this.smartAccount.publicClient + ) const response = await this.smartAccount.sendTransaction({ to: this.moduleAddress, data: execution.callData, @@ -93,6 +111,6 @@ export class OwnableValidator extends BaseValidationModule { } public getMockSignature(): Hex { - return getOwnableValidatorMockSignature(); + return getOwnableValidatorMockSignature() } } diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index f1b233ada..c55f4982a 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -96,9 +96,9 @@ describe("Account:Read", () => { }) const message = "hello world" - const saOwner = smartAccount.getSmartAccountOwner(); - console.log("SA owner ", await saOwner.getAddress()); - + const saOwner = smartAccount.getSmartAccountOwner() + console.log("SA owner ", await saOwner.getAddress()) + const signature = await smartAccount.signMessage(message) expect(signature).toBeTruthy() @@ -106,9 +106,9 @@ describe("Account:Read", () => { address: smartAccountAddress, message: "test", signature - }) + }) - console.log(isValid, "isValid"); + console.log(isValid, "isValid") }, 50000 ) diff --git a/tests/modules/ownableValidator.ts/write.test.ts b/tests/modules/ownableValidator.ts/write.test.ts index ca466eaea..823e87205 100644 --- a/tests/modules/ownableValidator.ts/write.test.ts +++ b/tests/modules/ownableValidator.ts/write.test.ts @@ -37,31 +37,33 @@ describe("Account:Modules:OwnableValidator", async () => { const owners = [walletClient.account.address, accountTwo.address] - const ownableValidatorModule = await createOwnableValidatorModule(smartAccount, 2, owners) + const ownableValidatorModule = await createOwnableValidatorModule( + smartAccount, + 2, + owners + ) smartAccount.setActiveValidationModule(ownableValidatorModule) describe("Ownable Validator Module Tests", async () => { test("install Ownable Executor", async () => { + const isInstalledBefore = await smartAccount.isModuleInstalled( + ModuleType.Validation, + OWNABLE_VALIDATOR + ) - const isInstalledBefore = await smartAccount.isModuleInstalled( - ModuleType.Validation, - OWNABLE_VALIDATOR + if (!isInstalledBefore) { + const userOpReceipt: UserOpReceipt = await smartAccount.installModule( + ModuleName.OwnableValidator ) - if(!isInstalledBefore) { - const userOpReceipt: UserOpReceipt = await smartAccount.installModule( - ModuleName.OwnableValidator - ) - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - OWNABLE_VALIDATOR - ) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeTruthy() - } + const isInstalled = await smartAccount.isModuleInstalled( + ModuleType.Validation, + OWNABLE_VALIDATOR + ) + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeTruthy() + } }, 60000) test("Ownable Validator Module should be installed", async () => { From cc4530f069de808e354c189cf389ba3209520a4b Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Fri, 28 Jun 2024 16:17:26 +0300 Subject: [PATCH 1213/1247] feat: improve install/uninstall flow, renaming, error handling, refactor --- bun.lockb | Bin 283496 -> 273884 bytes package.json | 3 +- src/account/NexusSmartAccount.ts | 424 ++++-- src/account/index.ts | 5 +- src/account/utils/Constants.ts | 4 +- src/account/utils/Types.ts | 24 +- src/account/utils/Utils.ts | 4 +- src/bundler/Bundler.ts | 58 +- src/modules/executors/OwnableExecutor.ts | 132 +- src/modules/index.ts | 4 +- src/modules/utils/Helper.ts | 12 +- src/modules/utils/Types.ts | 16 +- src/modules/validators/OwnableValidator.ts | 110 +- src/modules/validators/ValidationModule.ts | 25 + tests/account/read.test.ts | 1223 ++++++++--------- tests/account/write.test.ts | 458 +++--- tests/modules/k1Validator.ts/write.test.ts | 0 .../modules/ownableExecutor.ts/write.test.ts | 95 +- .../modules/ownableValidator.ts/write.test.ts | 236 ++-- 19 files changed, 1573 insertions(+), 1260 deletions(-) create mode 100644 src/modules/validators/ValidationModule.ts create mode 100644 tests/modules/k1Validator.ts/write.test.ts diff --git a/bun.lockb b/bun.lockb index 08264cb631281bfea938dbdb13b9f04881365dc6..ecdabd4198d311335cb822f14057539f60256997 100755 GIT binary patch delta 48384 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 Dk-@rX delta 53974 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 diff --git a/package.json b/package.json index 650c63593..09d3987af 100644 --- a/package.json +++ b/package.json @@ -100,8 +100,7 @@ "tsc-alias": "^1.8.8", "tslib": "^2.6.3", "typedoc": "^0.25.9", - "vitest": "^1.3.1", - "@rhinestone/module-sdk": "^0.1.3" + "vitest": "^1.3.1" }, "peerDependencies": { "typescript": "^5", diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index fe2829c46..decbeb085 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -15,13 +15,12 @@ import { encodeFunctionData, encodePacked, formatUnits, + getAddress, getContract, keccak256, parseAbi, parseAbiParameters, - stringToBytes, - toBytes, - toHex + toBytes } from "viem" import { Bundler, @@ -36,11 +35,10 @@ import type { BaseExecutionModule } from "../modules/base/BaseExecutionModule.js import type { BaseModule } from "../modules/base/BaseModule.js" import { BaseValidationModule } from "../modules/base/BaseValidationModule.js" import { + type Execution, type ModuleInfo, - type ModuleName, type SendUserOpParams, - createK1ValidatorModule, - createModuleInstace + createK1ValidatorModule } from "../modules/index.js" import { type FeeQuotesOrDataDto, @@ -55,7 +53,7 @@ import { BaseSmartContractAccount } from "./BaseSmartContractAccount.js" import { NexusAccountAbi } from "./abi/SmartAccount.js" import { Logger, - type ModuleType, + ModuleType, type SmartAccountSigner, type StateOverrideSet, type UserOperationStruct, @@ -69,15 +67,17 @@ import { ERC20_ABI, ERROR_MESSAGES, MAGIC_BYTES, - NATIVE_TOKEN_ALIAS + NATIVE_TOKEN_ALIAS, + SENTINEL_ADDRESS } from "./utils/Constants.js" import type { BalancePayload, - BiconomySmartAccountV2Config, - BiconomySmartAccountV2ConfigConstructorProps, BiconomyTokenPaymasterRequest, BuildUserOpOptions, CounterFactualAddressParam, + ModuleInfoParams, + NexusSmartAccountConfig, + NexusSmartAccountConfigConstructorProps, NonceOptions, PaymasterUserOperationDto, SupportedToken, @@ -96,8 +96,6 @@ import { export class NexusSmartAccount extends BaseSmartContractAccount { // private sessionData?: ModuleInfo - private SENTINEL_MODULE = "0x0000000000000000000000000000000000000001" - private index: bigint private chainId: number @@ -129,64 +127,63 @@ export class NexusSmartAccount extends BaseSmartContractAccount { activeExecutorModule?: BaseExecutionModule private constructor( - readonly biconomySmartAccountConfig: BiconomySmartAccountV2ConfigConstructorProps + readonly nexusSmartAccountConfig: NexusSmartAccountConfigConstructorProps ) { super({ - ...biconomySmartAccountConfig, + ...nexusSmartAccountConfig, chain: - biconomySmartAccountConfig.viemChain ?? - biconomySmartAccountConfig.customChain ?? - getChain(biconomySmartAccountConfig.chainId), + nexusSmartAccountConfig.viemChain ?? + nexusSmartAccountConfig.customChain ?? + getChain(nexusSmartAccountConfig.chainId), rpcClient: - biconomySmartAccountConfig.rpcUrl || - getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0], + nexusSmartAccountConfig.rpcUrl || + getChain(nexusSmartAccountConfig.chainId).rpcUrls.default.http[0], entryPointAddress: - (biconomySmartAccountConfig.entryPointAddress as Hex) ?? + (nexusSmartAccountConfig.entryPointAddress as Hex) ?? DEFAULT_ENTRYPOINT_ADDRESS, accountAddress: - (biconomySmartAccountConfig.accountAddress as Hex) ?? undefined, + (nexusSmartAccountConfig.accountAddress as Hex) ?? undefined, factoryAddress: - biconomySmartAccountConfig.factoryAddress ?? + nexusSmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS }) - // this.sessionData = biconomySmartAccountConfig.sessionData + // this.sessionData = nexusSmartAccountConfig.sessionData this.defaultValidationModule = - biconomySmartAccountConfig.defaultValidationModule - this.activeValidationModule = - biconomySmartAccountConfig.activeValidationModule + nexusSmartAccountConfig.defaultValidationModule + this.activeValidationModule = nexusSmartAccountConfig.activeValidationModule - this.index = biconomySmartAccountConfig.index ?? 0n - this.chainId = biconomySmartAccountConfig.chainId - this.bundler = biconomySmartAccountConfig.bundler + this.index = nexusSmartAccountConfig.index ?? 0n + this.chainId = nexusSmartAccountConfig.chainId + this.bundler = nexusSmartAccountConfig.bundler this.publicClient = createPublicClient({ - chain: getChain(biconomySmartAccountConfig.chainId), + chain: getChain(nexusSmartAccountConfig.chainId), transport: http() }) // this.implementationAddress = - // biconomySmartAccountConfig.implementationAddress ?? + // nexusSmartAccountConfig.implementationAddress ?? // (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex) - if (biconomySmartAccountConfig.paymasterUrl) { + if (nexusSmartAccountConfig.paymasterUrl) { this.paymaster = new Paymaster({ - paymasterUrl: biconomySmartAccountConfig.paymasterUrl + paymasterUrl: nexusSmartAccountConfig.paymasterUrl }) - } else if (biconomySmartAccountConfig.biconomyPaymasterApiKey) { + } else if (nexusSmartAccountConfig.biconomyPaymasterApiKey) { this.paymaster = new Paymaster({ - paymasterUrl: `https://paymaster.biconomy.io/api/v1/${biconomySmartAccountConfig.chainId}/${biconomySmartAccountConfig.biconomyPaymasterApiKey}` + paymasterUrl: `https://paymaster.biconomy.io/api/v1/${nexusSmartAccountConfig.chainId}/${nexusSmartAccountConfig.biconomyPaymasterApiKey}` }) } else { - this.paymaster = biconomySmartAccountConfig.paymaster + this.paymaster = nexusSmartAccountConfig.paymaster } - this.bundler = biconomySmartAccountConfig.bundler + this.bundler = nexusSmartAccountConfig.bundler // const defaultFallbackHandlerAddress = // this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS // ? DEFAULT_FALLBACK_HANDLER_ADDRESS - // : biconomySmartAccountConfig.defaultFallbackHandler + // : nexusSmartAccountConfig.defaultFallbackHandler // if (!defaultFallbackHandlerAddress) { // throw new Error("Default Fallback Handler address is not provided") // } @@ -195,25 +192,25 @@ export class NexusSmartAccount extends BaseSmartContractAccount { // Added bang operator to avoid null check as the constructor have these params as optional this.defaultValidationModule = // biome-ignore lint/style/noNonNullAssertion: <explanation> - biconomySmartAccountConfig.defaultValidationModule! + nexusSmartAccountConfig.defaultValidationModule! this.activeValidationModule = // biome-ignore lint/style/noNonNullAssertion: <explanation> - biconomySmartAccountConfig.activeValidationModule! + nexusSmartAccountConfig.activeValidationModule! this.provider = createPublicClient({ chain: - biconomySmartAccountConfig.viemChain ?? - biconomySmartAccountConfig.customChain ?? - getChain(biconomySmartAccountConfig.chainId), + nexusSmartAccountConfig.viemChain ?? + nexusSmartAccountConfig.customChain ?? + getChain(nexusSmartAccountConfig.chainId), transport: http( - biconomySmartAccountConfig.rpcUrl || - getChain(biconomySmartAccountConfig.chainId).rpcUrls.default.http[0] + nexusSmartAccountConfig.rpcUrl || + getChain(nexusSmartAccountConfig.chainId).rpcUrls.default.http[0] ) }) // this.scanForUpgradedAccountsFromV1 = - // biconomySmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false - // this.maxIndexForScan = biconomySmartAccountConfig.maxIndexForScan ?? 10n + // nexusSmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false + // this.maxIndexForScan = nexusSmartAccountConfig.maxIndexForScan ?? 10n // this.getAccountAddress() } @@ -225,7 +222,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * * - Docs: https://docs.biconomy.io/Account/integration#integration-1 * - * @param biconomySmartAccountConfig - Configuration for initializing the NexusSmartAccount instance {@link BiconomySmartAccountV2Config}. + * @param nexusSmartAccountConfig - Configuration for initializing the NexusSmartAccount instance {@link NexusSmartAccountConfig}. * @returns A promise that resolves to a new instance of NexusSmartAccount. * @throws An error if something is wrong with the smart account instance creation. * @@ -251,16 +248,16 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * */ public static async create( - biconomySmartAccountConfig: BiconomySmartAccountV2Config + nexusSmartAccountConfig: NexusSmartAccountConfig ): Promise<NexusSmartAccount> { - let chainId = biconomySmartAccountConfig.chainId - let rpcUrl = biconomySmartAccountConfig.rpcUrl + let chainId = nexusSmartAccountConfig.chainId + let rpcUrl = nexusSmartAccountConfig.rpcUrl let resolvedSmartAccountSigner!: SmartAccountSigner // Signer needs to be initialised here before defaultValidationModule is set - if (biconomySmartAccountConfig.signer) { + if (nexusSmartAccountConfig.signer) { const signerResult = await convertSigner( - biconomySmartAccountConfig.signer, + nexusSmartAccountConfig.signer, !!chainId, rpcUrl ) @@ -276,13 +273,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { } // if (!chainId) { // Get it from bundler - // if (biconomySmartAccountConfig.bundlerUrl) { + // if (nexusSmartAccountConfig.bundlerUrl) { // chainId = extractChainIdFromBundlerUrl( - // biconomySmartAccountConfig.bundlerUrl + // nexusSmartAccountConfig.bundlerUrl // ) - // } else if (biconomySmartAccountConfig.bundler) { + // } else if (nexusSmartAccountConfig.bundler) { // const bundlerUrlFromBundler = - // biconomySmartAccountConfig.bundler.getBundlerUrl() + // nexusSmartAccountConfig.bundler.getBundlerUrl() // chainId = extractChainIdFromBundlerUrl(bundlerUrlFromBundler) // } // } @@ -291,18 +288,18 @@ export class NexusSmartAccount extends BaseSmartContractAccount { } const bundler: IBundler = - biconomySmartAccountConfig.bundler ?? + nexusSmartAccountConfig.bundler ?? new Bundler({ // biome-ignore lint/style/noNonNullAssertion: always required - bundlerUrl: biconomySmartAccountConfig.bundlerUrl!, + bundlerUrl: nexusSmartAccountConfig.bundlerUrl!, chainId, customChain: - biconomySmartAccountConfig.viemChain ?? - biconomySmartAccountConfig.customChain ?? + nexusSmartAccountConfig.viemChain ?? + nexusSmartAccountConfig.customChain ?? getChain(chainId) }) let defaultValidationModule = - biconomySmartAccountConfig.defaultValidationModule + nexusSmartAccountConfig.defaultValidationModule // Note: If no module is provided, we will use ECDSA_OWNERSHIP as default if (!defaultValidationModule) { @@ -312,8 +309,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { defaultValidationModule = newModule as BaseValidationModule } const activeValidationModule = - biconomySmartAccountConfig?.activeValidationModule ?? - defaultValidationModule + nexusSmartAccountConfig?.activeValidationModule ?? defaultValidationModule if (!resolvedSmartAccountSigner) { resolvedSmartAccountSigner = activeValidationModule.getSigner() } @@ -321,8 +317,8 @@ export class NexusSmartAccount extends BaseSmartContractAccount { throw new Error("signer required") } - const config: BiconomySmartAccountV2ConfigConstructorProps = { - ...biconomySmartAccountConfig, + const config: NexusSmartAccountConfigConstructorProps = { + ...nexusSmartAccountConfig, defaultValidationModule, activeValidationModule, chainId, @@ -333,9 +329,9 @@ export class NexusSmartAccount extends BaseSmartContractAccount { // We check if chain ids match (skip this if chainId is passed by in the config) // This check is at the end of the function for cases when the signer is not passed in the config but a validation modules is and we get the signer from the validation module in this case - // if (!biconomySmartAccountConfig.chainId) { + // if (!nexusSmartAccountConfig.chainId) { // await compareChainIds( - // biconomySmartAccountConfig.signer || resolvedSmartAccountSigner, + // nexusSmartAccountConfig.signer || resolvedSmartAccountSigner, // config, // false // ) @@ -938,11 +934,6 @@ export class NexusSmartAccount extends BaseSmartContractAccount { userOpHash )) as Hex - // const signatureWithModuleAddress = this.getSignatureWithModuleAddress( - // moduleSig, - // this.activeValidationModule.getAddress() as Hex - // ) - userOp.signature = moduleSig return userOp as UserOperationStruct } @@ -1322,7 +1313,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { const address = await this.getAddress() return await this.entryPoint.read.getNonce([ address, - BigInt(zeroPadBytes(this.activeValidationModule.getAddress(), 24)) // TODO: Use viem instead of ethers + BigInt( + zeroPadBytes( + this.activeValidationModule.getAddress() ?? + this.defaultValidationModule.getAddress(), + 24 + ) + ) // TODO: Use viem instead of ethers ]) } catch (e) { return BigInt(0) @@ -1984,7 +1981,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { } signature = encodeAbiParameters( [{ type: "bytes" }, { type: "address" }], - [signature as Hex, this.defaultValidationModule.getAddress()] + [signature as Hex, this.activeValidationModule.getAddress()] ) if (await this.isAccountDeployed()) { return signature as Hex @@ -2090,17 +2087,20 @@ export class NexusSmartAccount extends BaseSmartContractAccount { return tx } - async isModuleInstalled( - moduleType: ModuleType, - moduleAddress: Hex, - data?: Hex - ): Promise<boolean> { - const accountContract = await this._getAccountContract() - return (await accountContract.read.isModuleInstalled([ - moduleType, - moduleAddress, - data ?? "0x" - ])) as boolean + async isModuleInstalled({ + moduleType, + moduleAddress, + data + }: ModuleInfoParams): Promise<boolean> { + if (await this.isAccountDeployed()) { + const accountContract = await this._getAccountContract() + return (await accountContract.read.isModuleInstalled([ + moduleType, + moduleAddress, + data ?? "0x" + ])) as boolean + } + throw new Error("Account not yet deployed") } getSmartAccountOwner(): SmartAccountSigner { @@ -2128,40 +2128,228 @@ export class NexusSmartAccount extends BaseSmartContractAccount { // return receipt; // } - async installModule(moduleName: ModuleName): Promise<UserOpReceipt> { - const moduleInstance = await createModuleInstace(moduleName, this) - const installModuleData = moduleInstance.installModule() - const response = await this.sendTransaction({ - to: await this.getAddress(), - data: installModuleData, - value: 0n + async installModule({ + moduleAddress, + moduleType, + moduleSelector, + data + }: ModuleInfoParams): Promise<UserOpReceipt> { + let execution: Execution + switch (moduleType) { + case ModuleType.Validation: + case ModuleType.Execution: + case ModuleType.Hooks: + execution = await this._installModule({ + moduleAddress, + moduleType, + data + }) + return ( + await this.sendTransaction({ + to: execution.target, + data: execution.callData, + value: execution.value + }) + ).wait() + case ModuleType.Fallback: + if (!moduleSelector) { + throw new Error( + "Selector param is required for a Fallback Handler Module" + ) + } + execution = await this._uninstallFallback({ + moduleAddress, + moduleType: ModuleType.Fallback, + moduleSelector: moduleSelector ?? "0x", + data + }) + return ( + await this.sendTransaction({ + to: execution.target, + data: execution.callData, + value: execution.value + }) + ).wait() + default: + throw new Error(`Unknown module type ${moduleType}`) + } + } + + async _installModule({ + moduleAddress, + moduleType, + data + }: ModuleInfoParams): Promise<Execution> { + const isInstalled = await this.isModuleInstalled({ + moduleAddress, + moduleType, + data }) - const receipt = response.wait() - return receipt + + if (!isInstalled) { + const execution = { + target: await this.getAddress(), + value: BigInt(0), + callData: encodeFunctionData({ + functionName: "installModule", + abi: parseAbi([ + "function installModule(uint256 moduleTypeId, address module, bytes calldata initData) external payable" + ]), + args: [BigInt(moduleType), moduleAddress, data || "0x"] + }) + } + return execution + } + throw new Error("Module already installed") } - async uninstallModule( - moduleName: ModuleName, - uninstallData?: Hex - ): Promise<UserOpReceipt> { - const moduleInstance = await createModuleInstace(moduleName, this) - const deInitData = encodeAbiParameters( - [ - { name: "prev", type: "address" }, - { name: "disableModuleData", type: "bytes" } - ], - [this.SENTINEL_MODULE as Hex, toHex(stringToBytes(""))] - ) - const uninstallModuleData = moduleInstance.uninstallModule( - uninstallData ?? deInitData - ) - const response = await this.sendTransaction({ - to: await this.getAddress(), - data: uninstallModuleData, - value: 0n + async uninstallModule({ + moduleAddress, + moduleType, + moduleSelector, + data + }: ModuleInfoParams): Promise<UserOpReceipt> { + let execution: Execution + switch (moduleType) { + case ModuleType.Validation: + case ModuleType.Execution: + case ModuleType.Hooks: + execution = await this._uninstallModule(moduleAddress, moduleType, data) + return ( + await this.sendTransaction({ + to: execution.target, + data: execution.callData, + value: execution.value + }) + ).wait() + case ModuleType.Fallback: + if (!moduleSelector) { + throw new Error( + `Selector param is required for module type ${moduleType}` + ) + } + execution = await this._uninstallFallback({ + moduleAddress, + moduleType: ModuleType.Fallback, + moduleSelector: moduleSelector, + data + }) + return ( + await this.sendTransaction({ + to: execution.target, + data: execution.callData, + value: execution.value + }) + ).wait() + default: + throw new Error(`Unknown module type ${moduleType}`) + } + } + + async getPreviousModule({ + moduleAddress, + moduleType + }: { moduleAddress: Address; moduleType: ModuleType }) { + let installedModules: Address[] = [] + if (moduleType === ModuleType.Validation) { + installedModules = await this.getInstalledValidators() + } + if (moduleType === ModuleType.Execution) { + installedModules = await this.getInstalledExecutors() + } + const index = installedModules.indexOf(getAddress(moduleAddress)) + if (index === 0) { + return SENTINEL_ADDRESS + } + if (index > 0) { + return installedModules[index - 1] + } + throw new Error(`Module ${moduleAddress} not found in installed modules`) + } + + private async _uninstallFallback({ + moduleAddress, + moduleSelector, + data + }: ModuleInfoParams): Promise<Execution> { + let execution: Execution + + const isInstalled = await this.isModuleInstalled({ + moduleType: ModuleType.Fallback, + moduleAddress, + data: encodeAbiParameters( + [{ name: "functionSignature", type: "bytes4" }], + [moduleSelector ?? "0x"] + ) }) - const receipt = response.wait() - return receipt + + if (isInstalled) { + execution = { + target: await this.getAddress(), + value: BigInt(0), + callData: encodeFunctionData({ + functionName: "uninstallModule", + abi: parseAbi([ + "function uninstallModule(uint256 moduleTypeId, address module, bytes deInitData)" + ]), + args: [ + BigInt(ModuleType.Fallback), + moduleAddress, + encodePacked( + ["bytes4", "bytes"], + [moduleSelector ?? "0x", data ?? "0x"] + ) + ] + }) + } + return execution + } + throw new Error("Module is not installed") + } + + private async _uninstallModule( + moduleAddress: Address, + moduleType: ModuleType, + data?: Hex + ): Promise<Execution> { + let execution: Execution + const isInstalled = await this.isModuleInstalled({ + moduleType, + moduleAddress + }) + + if (isInstalled) { + let moduleData = data || "0x" + if ( + moduleType === ModuleType.Validation || + moduleType === ModuleType.Execution + ) { + const prev = await this.getPreviousModule({ + moduleAddress, + moduleType: moduleType + }) + moduleData = encodeAbiParameters( + [ + { name: "prev", type: "address" }, + { name: "disableModuleData", type: "bytes" } + ], + [prev, moduleData] + ) + } + execution = { + target: await this.getAddress(), + value: BigInt(0), + callData: encodeFunctionData({ + functionName: "uninstallModule", + abi: parseAbi([ + "function uninstallModule(uint256 moduleTypeId, address module, bytes deInitData)" + ]), + args: [BigInt(moduleType), moduleAddress, moduleData] + }) + } + return execution + } + throw new Error("Module is not installed") } private async executeFromExecutor( @@ -2201,7 +2389,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { const accountContract = await this._getAccountContract() return ( (await accountContract.read.getValidatorsPaginated([ - this.SENTINEL_MODULE, + SENTINEL_ADDRESS, 100 ])) as Address[][] )[0] as Address[] @@ -2211,7 +2399,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { const accountContract = await this._getAccountContract() return ( (await accountContract.read.getExecutorsPaginated([ - this.SENTINEL_MODULE, + SENTINEL_ADDRESS, 100 ])) as Address[][] )[0] as Address[] diff --git a/src/account/index.ts b/src/account/index.ts index 476ee1f1e..2a1325406 100644 --- a/src/account/index.ts +++ b/src/account/index.ts @@ -1,10 +1,11 @@ import { NexusSmartAccount } from "./NexusSmartAccount.js" -import type { BiconomySmartAccountV2Config } from "./utils/Types.js" +import type { NexusSmartAccountConfig } from "./utils/Types.js" +export * from "./NexusSmartAccount.js" export * from "./utils/index.js" export * from "./signers/local-account.js" export * from "./signers/wallet-client.js" export const createSmartAccountClient = NexusSmartAccount.create -export type SmartWalletConfig = BiconomySmartAccountV2Config +export type SmartWalletConfig = NexusSmartAccountConfig diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index db27cfb9d..fffee900d 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -99,7 +99,7 @@ export const ERC20_ABI = [ // BASE SEPOLIA CONTRACTS export const K1_VALIDATOR = "0x9C08e1CE188C29bAaeBc64A08cF2Ec44207749B6" -export const OWNABLE_VALIDATOR = "0xBf2137a23F439Ca5Aa4360cC6970D70b24D07ea2" +export const OWNABLE_VALIDATOR = "0xBf2137a23F439Ca5Aa4360cC6970D70b24D07ea2" // not deployed export const NEXUS_IMPLEMENTATION = "0x66Ae45ad5BE4be08a70AD99e9cF41e6d6884B06F" export const BOOTSTRAP = "0x1ad17f0Dc85Da8Ed2CBA7415D290cCb0D79355C9" export const BOOTSTRAP_LIB = "0x44965180dc3F703448bDB859D9F1a55f0B8E6C8F" @@ -121,3 +121,5 @@ export const UNUSED = "0x00000000" // 4 bytes export const MODE_PAYLOAD = "0x00000000000000000000000000000000000000000000" // 22 bytes export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f" + +export const SENTINEL_ADDRESS = "0x0000000000000000000000000000000000000001" diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index bb1b8a97b..9fa7b36eb 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -141,7 +141,7 @@ export type ResolvedValidationProps = { chainId: number } -export type BiconomySmartAccountV2ConfigBaseProps = { +export type NexusSmartAccountConfigBaseProps = { /** Factory address of biconomy factory contract or some other contract you have deployed on chain */ factoryAddress?: Hex /** Sender address: If you want to override the Signer address with some other address and get counterfactual address can use this to pass the EOA and get SA address */ @@ -171,14 +171,13 @@ export type BiconomySmartAccountV2ConfigBaseProps = { /** Used for session key manager module */ sessionData?: ModuleInfo } -export type BiconomySmartAccountV2Config = - BiconomySmartAccountV2ConfigBaseProps & - BaseSmartAccountConfig & - ConditionalBundlerProps & - ConditionalValidationProps +export type NexusSmartAccountConfig = NexusSmartAccountConfigBaseProps & + BaseSmartAccountConfig & + ConditionalBundlerProps & + ConditionalValidationProps -export type BiconomySmartAccountV2ConfigConstructorProps = - BiconomySmartAccountV2ConfigBaseProps & +export type NexusSmartAccountConfigConstructorProps = + NexusSmartAccountConfigBaseProps & BaseSmartAccountConfig & ResolvedBundlerProps & ResolvedValidationProps @@ -457,7 +456,7 @@ export type BatchUserOperationCallData = Exclude<UserOperationCallData, Hex>[] export type SignTypedDataParams = Omit<SignTypedDataParameters, "privateKey"> export type BasSmartContractAccountProps = - BiconomySmartAccountV2ConfigConstructorProps & { + NexusSmartAccountConfigConstructorProps & { /** chain: The chain from viem */ chain: Chain /** rpcClient: The rpc url string */ @@ -621,3 +620,10 @@ export enum ModuleType { Fallback = 3, Hooks = 4 } + +export type ModuleInfoParams = { + moduleAddress: Address + moduleType: ModuleType + moduleSelector?: Hex + data?: Hex +} diff --git a/src/account/utils/Utils.ts b/src/account/utils/Utils.ts index 1d82035e6..937c423b3 100644 --- a/src/account/utils/Utils.ts +++ b/src/account/utils/Utils.ts @@ -13,7 +13,7 @@ import type { UserOperationStruct } from "../../account" import { type SupportedSigner, convertSigner } from "../../account" import { extractChainIdFromBundlerUrl } from "../../bundler" import { extractChainIdFromPaymasterUrl } from "../../bundler" -import type { BiconomySmartAccountV2Config } from "./Types.js" +import type { NexusSmartAccountConfig } from "./Types.js" /** * pack the userOperation @@ -86,7 +86,7 @@ export const isNullOrUndefined = (value: any): value is undefined => { export const compareChainIds = async ( signer: SupportedSigner, - biconomySmartAccountConfig: BiconomySmartAccountV2Config, + biconomySmartAccountConfig: NexusSmartAccountConfig, skipChainIdCalls: boolean // biome-ignore lint/suspicious/noConfusingVoidType: <explanation> ): Promise<Error | void> => { diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index 2a8e9e82e..0348417bb 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -163,7 +163,10 @@ export class Bundler implements IBundler { const chainId = this.bundlerConfig.chainId const params = [deepHexlify(_userOp), this.bundlerConfig.entryPointAddress] const bundlerUrl = this.getBundlerUrl() - const sendUserOperationResponse: { result: Hash } = await sendRequest( + const sendUserOperationResponse: { + result: Hash + error: { message: string } + } = await sendRequest( { url: bundlerUrl, method: HttpMethod.Post, @@ -177,6 +180,10 @@ export class Bundler implements IBundler { "Bundler" ) + if (isNullOrUndefined(sendUserOperationResponse.result)) { + throw new Error(sendUserOperationResponse.error.message) + } + return { userOpHash: sendUserOperationResponse.result, wait: (confirmations?: number): Promise<UserOpReceipt> => { @@ -254,6 +261,11 @@ export class Bundler implements IBundler { }, "Bundler" ) + + if (isNullOrUndefined(response.result)) { + throw new Error(response?.error?.message) + } + const userOpReceipt: UserOpReceipt = response.result return userOpReceipt } @@ -279,6 +291,11 @@ export class Bundler implements IBundler { }, "Bundler" ) + + if (isNullOrUndefined(response.result)) { + throw new Error(response?.error?.message) + } + const userOpStatus: UserOpStatus = response.result return userOpStatus } @@ -304,6 +321,11 @@ export class Bundler implements IBundler { }, "Bundler" ) + + if (isNullOrUndefined(response.result)) { + throw new Error(response?.error?.message) + } + const userOpByHashResponse: UserOpByHashResponse = response.result return userOpByHashResponse } @@ -313,20 +335,26 @@ export class Bundler implements IBundler { */ async getGasFeeValues(): Promise<GetUserOperationGasPriceReturnType> { const bundlerUrl = this.getBundlerUrl() - const response: { result: GetUserOperationGasPriceReturnType } = - await sendRequest( - { - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "pimlico_getUserOperationGasPrice", - params: [], - id: getTimestampInSeconds(), - jsonrpc: "2.0" - } - }, - "Bundler" - ) + const response: { + result: GetUserOperationGasPriceReturnType + error: Error + } = await sendRequest( + { + url: bundlerUrl, + method: HttpMethod.Post, + body: { + method: "pimlico_getUserOperationGasPrice", + params: [], + id: getTimestampInSeconds(), + jsonrpc: "2.0" + } + }, + "Bundler" + ) + + if (isNullOrUndefined(response.result)) { + throw new Error(response?.error?.message) + } return { slow: { diff --git a/src/modules/executors/OwnableExecutor.ts b/src/modules/executors/OwnableExecutor.ts index 8ac01c0dc..3cadec6d3 100644 --- a/src/modules/executors/OwnableExecutor.ts +++ b/src/modules/executors/OwnableExecutor.ts @@ -1,12 +1,13 @@ import { - getAddOwnableExecutorOwnerAction, - getExecuteBatchOnOwnedAccountAction, - getExecuteOnOwnedAccountAction, - getOwnableExecutorOwners, - getRemoveOwnableExecutorOwnerAction -} from "@rhinestone/module-sdk" -import type { Address } from "viem" -import { ModuleType } from "../../account" + type Address, + type Hex, + encodeAbiParameters, + encodeFunctionData, + encodePacked, + getAddress, + parseAbi +} from "viem" +import { ModuleType, SENTINEL_ADDRESS } from "../../account" import type { NexusSmartAccount } from "../../account/NexusSmartAccount" import type { UserOpReceipt } from "../../bundler" import { BaseExecutionModule } from "../base/BaseExecutionModule" @@ -40,21 +41,63 @@ export class OwnableExecutorModule extends BaseExecutionModule { public async executeFromExecutor( execution: Execution | Execution[] ): Promise<UserOpReceipt> { - let executorExecution: Execution + let calldata: Hex if (Array.isArray(execution)) { - executorExecution = getExecuteBatchOnOwnedAccountAction({ - ownedAccount: await this.smartAccount.getAddress(), - executions: execution + calldata = encodeFunctionData({ + functionName: "executeBatchOnOwnedAccount", + abi: parseAbi([ + "function executeBatchOnOwnedAccount(address ownedAccount, bytes callData)" + ]), + args: [ + await this.smartAccount.getAccountAddress(), + encodeAbiParameters( + [ + { + components: [ + { + name: "target", + type: "address" + }, + { + name: "value", + type: "uint256" + }, + { + name: "callData", + type: "bytes" + } + ], + name: "Execution", + type: "tuple[]" + } + ], + // @ts-ignore + [executions] + ) + ] }) } else { - executorExecution = getExecuteOnOwnedAccountAction({ - ownedAccount: await this.smartAccount.getAddress(), - execution + calldata = encodeFunctionData({ + functionName: "executeOnOwnedAccount", + abi: parseAbi([ + "function executeOnOwnedAccount(address ownedAccount, bytes callData)" + ]), + args: [ + await this.smartAccount.getAccountAddress(), + encodePacked( + ["address", "uint256", "bytes"], + [ + execution.target, + BigInt(Number(execution.value)), + execution.callData + ] + ) + ] }) } const response = await this.smartAccount.sendTransaction({ to: this.moduleAddress, - data: executorExecution.callData, + data: calldata, value: 0n }) const receipt = await response.wait() @@ -62,12 +105,14 @@ export class OwnableExecutorModule extends BaseExecutionModule { } public async addOwner(newOwner: Address): Promise<UserOpReceipt> { - const execution: Execution = getAddOwnableExecutorOwnerAction({ - owner: newOwner + const callData = encodeFunctionData({ + functionName: "addOwner", + abi: parseAbi(["function addOwner(address owner)"]), + args: [newOwner] }) const response = await this.smartAccount.sendTransaction({ to: this.moduleAddress, - data: execution.callData, + data: callData, value: 0n }) const receipt = await response.wait() @@ -75,27 +120,52 @@ export class OwnableExecutorModule extends BaseExecutionModule { } public async removeOwner(ownerToRemove: Address): Promise<UserOpReceipt> { - const execution: Execution = await getRemoveOwnableExecutorOwnerAction({ - // @ts-ignore - client: this.smartAccount.publicClient, - owner: ownerToRemove, - account: await this.smartAccount.getAddress() + const owners = await this.getOwners() + let prevOwner: Address + + const currentOwnerIndex = owners.findIndex( + (o: Address) => o === ownerToRemove + ) + + if (currentOwnerIndex === -1) { + throw new Error("Owner not found") + } + if (currentOwnerIndex === 0) { + prevOwner = SENTINEL_ADDRESS + } else { + prevOwner = getAddress(owners[currentOwnerIndex - 1]) + } + + const calldata = encodeFunctionData({ + functionName: "removeOwner", + abi: parseAbi(["function removeOwner(address prevOwner, address owner)"]), + args: [prevOwner, ownerToRemove] }) + const response = await this.smartAccount.sendTransaction({ to: this.moduleAddress, - data: execution.callData, + data: calldata, value: 0n }) + const receipt = await response.wait() return receipt } public async getOwners(): Promise<Address[]> { - const owners = await getOwnableExecutorOwners({ - account: await this.smartAccount.getAddress(), - // @ts-ignore - client: this.smartAccount.publicClient - }) - return owners + try { + const owners = await this.smartAccount.publicClient.readContract({ + address: OWNABLE_EXECUTOR, + abi: parseAbi([ + "function getOwners(address account) external view returns (address[])" + ]), + functionName: "getOwners", + args: [await this.smartAccount.getAccountAddress()] + }) + + return owners as Address[] + } catch (err) { + return [] + } } } diff --git a/src/modules/index.ts b/src/modules/index.ts index 0988488d3..433ecaedb 100644 --- a/src/modules/index.ts +++ b/src/modules/index.ts @@ -1,6 +1,7 @@ -import { OwnableExecutorModule } from "./Executors/OwnableExecutor.js" +import { OwnableExecutorModule } from "./executors/OwnableExecutor.js" import { K1ValidatorModule } from "./validators/K1ValidatorModule.js" import { OwnableValidator } from "./validators/OwnableValidator.js" +import { ValidationModule } from "./validators/ValidationModule.js" export * from "./utils/Types.js" export * from "./utils/Constants.js" @@ -10,3 +11,4 @@ export * from "./interfaces/IValidationModule.js" export const createOwnableExecutorModule = OwnableExecutorModule.create export const createK1ValidatorModule = K1ValidatorModule.create export const createOwnableValidatorModule = OwnableValidator.create +export const createValidationModule = ValidationModule.create diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index 8d6b865c2..8d0ddcf06 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -1,4 +1,3 @@ -import type { Execution } from "@rhinestone/module-sdk" import { type Address, type Chain, @@ -12,7 +11,8 @@ import { type UserOperationStruct, getChain } from "../../account" import type { NexusSmartAccount } from "../../account/NexusSmartAccount.js" import { type ChainInfo, - ModuleName, + type Execution, + Module, type SignerData, type Transaction, createK1ValidatorModule, @@ -237,20 +237,20 @@ export const parseChain = (chainInfo: ChainInfo): Chain => { export const toTransaction = (execution: Execution): Transaction => { return { to: execution.target, - value: execution.value, + value: Number(execution.value), data: execution.callData } } export const createModuleInstace = async ( - moduleName: ModuleName, + module: Module, smartAccount: NexusSmartAccount, config?: any ): Promise<BaseModule> => { - if (moduleName === ModuleName.OwnableExecutor) { + if (module === Module.OwnableExecutor) { return await createOwnableExecutorModule(smartAccount) } - if (moduleName === ModuleName.OwnableValidator) { + if (module === Module.OwnableValidator) { return await createOwnableValidatorModule( smartAccount, config.threshold, diff --git a/src/modules/utils/Types.ts b/src/modules/utils/Types.ts index 93c5175a1..4fae39dd2 100644 --- a/src/modules/utils/Types.ts +++ b/src/modules/utils/Types.ts @@ -184,13 +184,6 @@ export interface SessionValidationModuleConfig { moduleAddress: string } -export enum ModuleTypeName { - execution = 0, - validation = 1, - hook = 2, - handler = 3 -} - export type V3ModuleInfo = { module: Address data: Hex @@ -199,10 +192,13 @@ export type V3ModuleInfo = { hook?: Address } -export enum ModuleName { +export enum Module { OwnableExecutor = 0, - K1Validator = 1, - OwnableValidator = 2 + MockExecutor = 1, + K1Validator = 2, + MockHook = 3, + MockFallbackHandler = 4, + OwnableValidator = 5 } export type Execution = { diff --git a/src/modules/validators/OwnableValidator.ts b/src/modules/validators/OwnableValidator.ts index d83d4ff95..de28fd23a 100644 --- a/src/modules/validators/OwnableValidator.ts +++ b/src/modules/validators/OwnableValidator.ts @@ -1,15 +1,19 @@ import { - getAddOwnableValidatorOwnerAction, - getInstallOwnableValidator, - getOwnableValidatorMockSignature, - getOwnableValidatorOwners, - getRemoveOwnableValidatorOwnerAction, - getSetOwnableValidatorThresholdAction -} from "@rhinestone/module-sdk" -import { type Address, decodeAbiParameters, parseAbiParameters } from "viem" + type Address, + decodeAbiParameters, + encodeAbiParameters, + encodeFunctionData, + getAddress, + parseAbi, + parseAbiParameters +} from "viem" import type { Hex } from "viem" import type { NexusSmartAccount } from "../../account/NexusSmartAccount.js" -import { ModuleType, OWNABLE_VALIDATOR } from "../../account/index.js" +import { + ModuleType, + OWNABLE_VALIDATOR, + SENTINEL_ADDRESS +} from "../../account/index.js" import type { UserOpReceipt } from "../../bundler/index.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" import type { V3ModuleInfo } from "../utils/Types.js" @@ -44,26 +48,33 @@ export class OwnableValidator extends BaseValidationModule { ) { throw Error("Signer needs to be one of the owners") } - const installData = await getInstallOwnableValidator({ - threshold, - owners, - hook - }) + const installData = encodeAbiParameters( + [ + { name: "threshold", type: "uint256" }, + { name: "owners", type: "address[]" } + ], + [BigInt(threshold), owners] + ) const moduleInfo: V3ModuleInfo = { module: OWNABLE_VALIDATOR, type: ModuleType.Validation, data: installData, - additionalContext: "0x" + additionalContext: "0x", + hook } const instance = new OwnableValidator(moduleInfo, smartAccount) return instance } public async setThreshold(threshold: number): Promise<UserOpReceipt> { - const execution = getSetOwnableValidatorThresholdAction(threshold) + const calldata = encodeFunctionData({ + functionName: "setThreshold", + abi: parseAbi(["function setThreshold(uint256 _threshold)"]), + args: [BigInt(threshold)] + }) const response = await this.smartAccount.sendTransaction({ to: this.moduleAddress, - data: execution.callData, + data: calldata, value: 0n }) const receipt = await response.wait() @@ -71,14 +82,29 @@ export class OwnableValidator extends BaseValidationModule { } public async removeOwner(owner: Address): Promise<UserOpReceipt> { - const execution = getRemoveOwnableValidatorOwnerAction( - this.smartAccount.publicClient, - this.smartAccount, - owner - ) + const owners = await this.getOwners() + let prevOwner: Address + + const currentOwnerIndex = owners.findIndex((o: Address) => o === owner) + + if (currentOwnerIndex === -1) { + throw new Error("Owner not found") + } + if (currentOwnerIndex === 0) { + prevOwner = SENTINEL_ADDRESS + } else { + prevOwner = getAddress(owners[currentOwnerIndex - 1]) + } + + const calldata = encodeFunctionData({ + functionName: "removeOwner", + abi: parseAbi(["function removeOwner(address prevOwner, address owner)"]), + args: [prevOwner, owner] + }) + const response = await this.smartAccount.sendTransaction({ to: this.moduleAddress, - data: execution.callData, + data: calldata, value: 0n }) const receipt = await response.wait() @@ -86,31 +112,39 @@ export class OwnableValidator extends BaseValidationModule { } public async addOwner(owner: Address): Promise<UserOpReceipt> { - const execution = getAddOwnableValidatorOwnerAction(owner) + const calldata = encodeFunctionData({ + functionName: "addOwner", + abi: parseAbi(["function addOwner(address owner)"]), + args: [owner] + }) const response = await this.smartAccount.sendTransaction({ to: this.moduleAddress, - data: execution.callData, + data: calldata, value: 0n }) const receipt = await response.wait() return receipt } - public async getOwners(): Promise<UserOpReceipt> { - const execution = getOwnableValidatorOwners( - this.smartAccount, - this.smartAccount.publicClient - ) - const response = await this.smartAccount.sendTransaction({ - to: this.moduleAddress, - data: execution.callData, - value: 0n - }) - const receipt = await response.wait() - return receipt + public async getOwners(): Promise<Address[]> { + try { + const owners = (await this.smartAccount.publicClient.readContract({ + address: OWNABLE_VALIDATOR, + abi: parseAbi([ + "function getOwners(address account) external view returns (address[])" + ]), + functionName: "getOwners", + args: [await this.smartAccount.getAccountAddress()] + })) as Address[] + + return owners + } catch (err) { + console.error(err) + return [] + } } public getMockSignature(): Hex { - return getOwnableValidatorMockSignature() + return "0xe8b94748580ca0b4993c9a1b86b5be851bfc076ff5ce3a1ff65bf16392acfcb800f9b4f1aef1555c7fce5599fffb17e7c635502154a0333ba21f3ae491839af51c" } } diff --git a/src/modules/validators/ValidationModule.ts b/src/modules/validators/ValidationModule.ts new file mode 100644 index 000000000..0f9f78a72 --- /dev/null +++ b/src/modules/validators/ValidationModule.ts @@ -0,0 +1,25 @@ +import type { Address, Hex } from "viem" +import { ModuleType, type SmartAccountSigner } from "../../account/index.js" +import { BaseValidationModule } from "../base/BaseValidationModule.js" +import type { V3ModuleInfo } from "../utils/Types.js" + +export class ValidationModule extends BaseValidationModule { + private constructor(moduleConfig: V3ModuleInfo, signer: SmartAccountSigner) { + super(moduleConfig, signer) + } + + public static async create( + signer: SmartAccountSigner, + moduleAddress: Address, + data: Hex + ): Promise<ValidationModule> { + const moduleInfo: V3ModuleInfo = { + module: moduleAddress, + type: ModuleType.Validation, + data, + additionalContext: "0x" + } + const instance = new ValidationModule(moduleInfo, signer) + return instance + } +} diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index c55f4982a..bc1a7d12e 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -1,3 +1,4 @@ +import { PaymasterMode } from "@biconomy/account" import { JsonRpcProvider } from "@ethersproject/providers" import { Wallet } from "@ethersproject/wallet" import { @@ -14,12 +15,12 @@ import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { bsc } from "viem/chains" import { beforeAll, describe, expect, test } from "vitest" import { - type BiconomySmartAccountV2Config, DEFAULT_BICONOMY_FACTORY_ADDRESS, ERROR_MESSAGES, K1_VALIDATOR, ModuleType, NATIVE_TOKEN_ALIAS, + type NexusSmartAccountConfig, compareChainIds, createSmartAccountClient } from "../../src/account" @@ -84,700 +85,670 @@ describe("Account:Read", () => { }) test.concurrent( - "should accept PrivateKeyAccount as signer and sign a message", + "should estimate gas for minting an NFT", async () => { - const account = privateKeyToAccount(`0x${privateKey}`) - - const smartAccount = await createSmartAccountClient({ - signer: account, - bundlerUrl, - rpcUrl: chain.rpcUrls.default.http[0], - chainId + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const results = await Promise.all([ + smartAccount.getGasEstimate([transaction]), + smartAccount.getGasEstimate([transaction, transaction]) + // smartAccount.getGasEstimate([transaction], { + // paymasterServiceData: { + // mode: PaymasterMode.SPONSORED + // } + // }), + // smartAccount.getGasEstimate([transaction, transaction], { + // paymasterServiceData: { + // mode: PaymasterMode.SPONSORED + // } + // }), + // smartAccount.getGasEstimate([transaction], { + // paymasterServiceData: { + // mode: PaymasterMode.ERC20, + // preferredToken: token + // } + // }), + // await smartAccount.getGasEstimate([transaction, transaction], { + // paymasterServiceData: { + // mode: PaymasterMode.ERC20, + // preferredToken: token + // } + // }) + ]) + + const increasingGasExpenditure = results.every( + (result, i) => result > (results[i - 1] ?? 0) + ) - const message = "hello world" - const saOwner = smartAccount.getSmartAccountOwner() - console.log("SA owner ", await saOwner.getAddress()) + expect(increasingGasExpenditure).toBeTruthy() + }, + 60000 + ) - const signature = await smartAccount.signMessage(message) - expect(signature).toBeTruthy() + test.concurrent( + "should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", + async () => { + const account = privateKeyToAccount(`0x${privateKey}`) - const isValid = await verifyMessage({ - address: smartAccountAddress, - message: "test", - signature + const createSmartAccount = createSmartAccountClient({ + signer: account, + bundlerUrl }) - console.log(isValid, "isValid") + await expect(createSmartAccount).rejects.toThrow( + ERROR_MESSAGES.MISSING_RPC_URL + ) }, 50000 ) // test.concurrent( - // "should estimate gas for minting an NFT", - // async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall - // } - // const results = await Promise.all([ - // smartAccount.getGasEstimate([transaction]), - // smartAccount.getGasEstimate([transaction, transaction]), - // smartAccount.getGasEstimate([transaction], { - // paymasterServiceData: { - // mode: PaymasterMode.SPONSORED - // } - // }), - // smartAccount.getGasEstimate([transaction, transaction], { - // paymasterServiceData: { - // mode: PaymasterMode.SPONSORED - // } - // }), - // smartAccount.getGasEstimate([transaction], { - // paymasterServiceData: { - // mode: PaymasterMode.ERC20, - // preferredToken: token - // } - // }), - // await smartAccount.getGasEstimate([transaction, transaction], { - // paymasterServiceData: { - // mode: PaymasterMode.ERC20, - // preferredToken: token - // } - // }) - // ]) - - // const increasingGasExpenditure = results.every( - // (result, i) => result > (results[i - 1] ?? 0) - // ) - - // expect(increasingGasExpenditure).toBeTruthy() - // }, - // 60000 - // ) - - // test.concurrent( - // "should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", + // "should get all modules", // async () => { - // const account = privateKeyToAccount(`0x${privateKey}`) - - // const createSmartAccount = createSmartAccountClient({ - // signer: account, - // bundlerUrl - // }) - - // await expect(createSmartAccount).rejects.toThrow( - // ERROR_MESSAGES.MISSING_RPC_URL - // ) + // const modules = await smartAccount.getAllModules() + // expect(modules).toContain(DEFAULT_SESSION_KEY_MANAGER_MODULE) // session manager module + // expect(modules).toContain(DEFAULT_ECDSA_OWNERSHIP_MODULE) // ecdsa ownership module // }, - // 50000 + // 30000 // ) - // // test.concurrent( - // // "should get all modules", - // // async () => { - // // const modules = await smartAccount.getAllModules() - // // expect(modules).toContain(DEFAULT_SESSION_KEY_MANAGER_MODULE) // session manager module - // // expect(modules).toContain(DEFAULT_ECDSA_OWNERSHIP_MODULE) // ecdsa ownership module - // // }, - // // 30000 - // // ) + test.concurrent( + "should check if module is enabled on the smart account", + async () => { + const isEnabled = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Validation, + moduleAddress: K1_VALIDATOR + }) + expect(isEnabled).toBeTruthy() + }, + 30000 + ) // test.concurrent( - // "should check if module is enabled on the smart account", + // "should get disabled module data", // async () => { - // const isEnabled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR + // const disableModuleData = await smartAccount.getDisableModuleData( + // DEFAULT_ECDSA_OWNERSHIP_MODULE, + // DEFAULT_ECDSA_OWNERSHIP_MODULE // ) - // expect(isEnabled).toBeTruthy() + // expect(disableModuleData).toBeTruthy() // }, // 30000 // ) - // // test.concurrent( - // // "should get disabled module data", - // // async () => { - // // const disableModuleData = await smartAccount.getDisableModuleData( - // // DEFAULT_ECDSA_OWNERSHIP_MODULE, - // // DEFAULT_ECDSA_OWNERSHIP_MODULE - // // ) - // // expect(disableModuleData).toBeTruthy() - // // }, - // // 30000 - // // ) - - // // test.concurrent( - // // "should get setup and enable module data", - // // async () => { - // // const module = await createECDSAOwnershipValidationModule({ - // // signer: walletClient - // // }) - // // const initData = await module.getInitData() - // // const setupAndEnableModuleData = - // // await smartAccount.getSetupAndEnableModuleData( - // // DEFAULT_ECDSA_OWNERSHIP_MODULE, - // // initData - // // ) - // // expect(setupAndEnableModuleData).toBeTruthy() - // // }, - // // 30000 - // // ) - // test.concurrent( - // "should create a smartAccountClient from an ethers signer", + // "should get setup and enable module data", // async () => { - // const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) - // const ethersSigner = new Wallet(privateKey, ethersProvider) - - // const smartAccount = await createSmartAccountClient({ - // signer: ethersSigner, - // bundlerUrl, - // rpcUrl: chain.rpcUrls.default.http[0] + // const module = await createECDSAOwnershipValidationModule({ + // signer: walletClient // }) - - // const sig = await smartAccount.signMessage("test"); - // console.log(sig, "Signature"); - - // const address = await smartAccount.getAccountAddress() - // expect(address).toBeTruthy() - // } + // const initData = await module.getInitData() + // const setupAndEnableModuleData = + // await smartAccount.getSetupAndEnableModuleData( + // DEFAULT_ECDSA_OWNERSHIP_MODULE, + // initData + // ) + // expect(setupAndEnableModuleData).toBeTruthy() + // }, + // 30000 // ) - // test.concurrent( - // "should pickup the rpcUrl from viem wallet and ethers", - // async () => { - // const newRpcUrl = "http://localhost:8545" - // const defaultRpcUrl = chain.rpcUrls.default.http[0] //http://127.0.0.1:8545" + test.concurrent( + "should create a smartAccountClient from an ethers signer", + async () => { + const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) + const ethersSigner = new Wallet(privateKey, ethersProvider) - // const ethersProvider = new JsonRpcProvider(newRpcUrl) - // const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider) + const smartAccount = await createSmartAccountClient({ + signer: ethersSigner, + bundlerUrl, + rpcUrl: chain.rpcUrls.default.http[0] + }) - // const originalEthersProvider = new JsonRpcProvider( - // chain.rpcUrls.default.http[0] - // ) - // const ethersSigner = new Wallet(privateKey, originalEthersProvider) + const sig = await smartAccount.signMessage("test") + console.log(sig, "Signature") - // const accountOne = privateKeyToAccount(`0x${privateKey}`) - // const walletClientWithNewRpcUrl = createWalletClient({ - // account: accountOne, - // chain, - // transport: http(newRpcUrl) - // }) - // const [ - // smartAccountFromEthersWithNewRpc, - // smartAccountFromViemWithNewRpc, - // smartAccountFromEthersWithOldRpc, - // smartAccountFromViemWithOldRpc - // ] = await Promise.all([ - // createSmartAccountClient({ - // chainId, - // signer: ethersSignerWithNewRpcUrl, - // bundlerUrl: getBundlerUrl(1337), - // rpcUrl: newRpcUrl - // }), - // createSmartAccountClient({ - // chainId, - // signer: walletClientWithNewRpcUrl, - // bundlerUrl: getBundlerUrl(1337), - // rpcUrl: newRpcUrl - // }), - // createSmartAccountClient({ - // chainId, - // signer: ethersSigner, - // bundlerUrl: getBundlerUrl(1337), - // rpcUrl: chain.rpcUrls.default.http[0] - // }), - // createSmartAccountClient({ - // chainId, - // signer: walletClient, - // bundlerUrl: getBundlerUrl(1337), - // rpcUrl: chain.rpcUrls.default.http[0] - // }) - // ]) - - // const [ - // smartAccountFromEthersWithNewRpcAddress, - // smartAccountFromViemWithNewRpcAddress, - // smartAccountFromEthersWithOldRpcAddress, - // smartAccountFromViemWithOldRpcAddress - // ] = await Promise.all([ - // smartAccountFromEthersWithNewRpc.getAccountAddress(), - // smartAccountFromViemWithNewRpc.getAccountAddress(), - // smartAccountFromEthersWithOldRpc.getAccountAddress(), - // smartAccountFromViemWithOldRpc.getAccountAddress() - // ]) - - // expect( - // [ - // smartAccountFromEthersWithNewRpcAddress, - // smartAccountFromViemWithNewRpcAddress, - // smartAccountFromEthersWithOldRpcAddress, - // smartAccountFromViemWithOldRpcAddress - // ].every(Boolean) - // ).toBeTruthy() - - // expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe( - // newRpcUrl - // ) - // expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe( - // newRpcUrl - // ) - // expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe( - // defaultRpcUrl - // ) - // expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe( - // defaultRpcUrl - // ) - // } - // ) + const address = await smartAccount.getAccountAddress() + expect(address).toBeTruthy() + } + ) - // test.concurrent( - // "should read estimated user op gas values", - // async () => { - // const tx = { - // to: recipient, - // data: "0x" - // } + test.concurrent( + "should pickup the rpcUrl from viem wallet and ethers", + async () => { + const newRpcUrl = "http://localhost:8545" + const defaultRpcUrl = chain.rpcUrls.default.http[0] //http://127.0.0.1:8545" - // const userOp = await smartAccount.buildUserOp([tx]) + const ethersProvider = new JsonRpcProvider(newRpcUrl) + const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider) - // const estimatedGas = await smartAccount.estimateUserOpGas(userOp) - // console.log(estimatedGas, "estimatedGas") - // expect(estimatedGas.maxFeePerGas).toBeTruthy() - // expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() - // expect(estimatedGas.verificationGasLimit).toBeTruthy() - // expect(estimatedGas.callGasLimit).toBeTruthy() - // expect(estimatedGas.preVerificationGas).toBeTruthy() - // }, - // 30000 - // ) + const originalEthersProvider = new JsonRpcProvider( + chain.rpcUrls.default.http[0] + ) + const ethersSigner = new Wallet(privateKey, originalEthersProvider) - // test.concurrent("should have an active validation module", async () => { - // const module = smartAccount.activeValidationModule - // expect(module).toBeTruthy() - // }) + const accountOne = privateKeyToAccount(`0x${privateKey}`) + const walletClientWithNewRpcUrl = createWalletClient({ + account: accountOne, + chain, + transport: http(newRpcUrl) + }) + const [ + smartAccountFromEthersWithNewRpc, + smartAccountFromViemWithNewRpc, + smartAccountFromEthersWithOldRpc, + smartAccountFromViemWithOldRpc + ] = await Promise.all([ + createSmartAccountClient({ + chainId, + signer: ethersSignerWithNewRpcUrl, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: newRpcUrl + }), + createSmartAccountClient({ + chainId, + signer: walletClientWithNewRpcUrl, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: newRpcUrl + }), + createSmartAccountClient({ + chainId, + signer: ethersSigner, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: chain.rpcUrls.default.http[0] + }), + createSmartAccountClient({ + chainId, + signer: walletClient, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: chain.rpcUrls.default.http[0] + }) + ]) + + const [ + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress + ] = await Promise.all([ + smartAccountFromEthersWithNewRpc.getAccountAddress(), + smartAccountFromViemWithNewRpc.getAccountAddress(), + smartAccountFromEthersWithOldRpc.getAccountAddress(), + smartAccountFromViemWithOldRpc.getAccountAddress() + ]) + + expect( + [ + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress + ].every(Boolean) + ).toBeTruthy() + + expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe( + newRpcUrl + ) + expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe( + newRpcUrl + ) + expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe( + defaultRpcUrl + ) + expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe( + defaultRpcUrl + ) + } + ) - // // test.concurrent( - // // "should create a smart account with paymaster by creating instance", - // // async () => { - // // const paymaster = new Paymaster({ paymasterUrl }) - - // // const smartAccount = await createSmartAccountClient({ - // // signer: walletClient, - // // bundlerUrl, - // // paymaster - // // }) - // // expect(smartAccount.paymaster).not.toBeNull() - // // expect(smartAccount.paymaster).not.toBeUndefined() - // // } - // // ) - // test.concurrent( - // "should fail to create a smartAccountClient from a walletClient without a chainId", - // async () => { - // const account = privateKeyToAccount(generatePrivateKey()) - // const viemWalletClientNoChainId = createWalletClient({ - // account, - // transport: http(chain.rpcUrls.default.http[0]) - // }) + test.concurrent( + "should read estimated user op gas values", + async () => { + const tx = { + to: recipient, + data: "0x" + } + + const userOp = await smartAccount.buildUserOp([tx]) + + const estimatedGas = await smartAccount.estimateUserOpGas(userOp) + console.log(estimatedGas, "estimatedGas") + expect(estimatedGas.maxFeePerGas).toBeTruthy() + expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() + expect(estimatedGas.verificationGasLimit).toBeTruthy() + expect(estimatedGas.callGasLimit).toBeTruthy() + expect(estimatedGas.preVerificationGas).toBeTruthy() + }, + 30000 + ) - // expect( - // await expect( - // createSmartAccountClient({ - // signer: viemWalletClientNoChainId, - // bundlerUrl, - // rpcUrl: chain.rpcUrls.default.http[0] - // }) - // ).rejects.toThrow("Cannot consume a viem wallet without a chainId") - // ) - // } - // ) + test.concurrent("should have an active validation module", async () => { + const module = smartAccount.activeValidationModule + expect(module).toBeTruthy() + }) // test.concurrent( - // "should fail to create a smartAccountClient from a walletClient without an account", + // "should create a smart account with paymaster by creating instance", // async () => { - // const viemWalletNoAccount = createWalletClient({ - // transport: http(chain.rpcUrls.default.http[0]) - // }) + // const paymaster = new Paymaster({ paymasterUrl }) - // expect(async () => - // createSmartAccountClient({ - // signer: viemWalletNoAccount, - // bundlerUrl, - // rpcUrl: chain.rpcUrls.default.http[0] - // }) - // ).rejects.toThrow("Cannot consume a viem wallet without an account") + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl, + // paymaster + // }) + // expect(smartAccount.paymaster).not.toBeNull() + // expect(smartAccount.paymaster).not.toBeUndefined() // } // ) + test.concurrent( + "should fail to create a smartAccountClient from a walletClient without a chainId", + async () => { + const account = privateKeyToAccount(generatePrivateKey()) + const viemWalletClientNoChainId = createWalletClient({ + account, + transport: http(chain.rpcUrls.default.http[0]) + }) - // test.concurrent("should have account addresses", async () => { - // const addresses = await Promise.all([ - // sender, - // smartAccount.getAddress(), - // recipient, - // smartAccountTwo.getAddress() - // ]) - // /* - // * addresses: [ - // * '0xFA66E705cf2582cF56528386Bb9dFCA119767262', // sender - // * '0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC', // smartAccountSender - // * '0x3079B249DFDE4692D7844aA261f8cf7D927A0DA5', // recipient - // * '0x5F141ee1390D4c9d033a00CB940E509A4811a5E0' // smartAccountRecipient - // * ] - // */ - // expect(addresses.every(Boolean)).toBeTruthy() - // }) + expect( + await expect( + createSmartAccountClient({ + signer: viemWalletClientNoChainId, + bundlerUrl, + rpcUrl: chain.rpcUrls.default.http[0] + }) + ).rejects.toThrow("Cannot consume a viem wallet without a chainId") + ) + } + ) - // // test.concurrent( - // // "should create a smart account with paymaster with an api key", - // // async () => { - // // const paymaster = smartAccount.paymaster - // // expect(paymaster).not.toBeNull() - // // expect(paymaster).not.toBeUndefined() - // // } - // // ) - - // test.concurrent("should not throw and error, chain ids match", async () => { - // const mockBundlerUrl = - // "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" - // const mockPaymasterUrl = - // "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - - // const config: BiconomySmartAccountV2Config = { - // signer: walletClient, - // bundlerUrl: mockBundlerUrl, - // paymasterUrl: mockPaymasterUrl - // } + test.concurrent( + "should fail to create a smartAccountClient from a walletClient without an account", + async () => { + const viemWalletNoAccount = createWalletClient({ + transport: http(chain.rpcUrls.default.http[0]) + }) - // await expect( - // compareChainIds(walletClient, config, false) - // ).resolves.not.toThrow() - // }) + expect(async () => + createSmartAccountClient({ + signer: viemWalletNoAccount, + bundlerUrl, + rpcUrl: chain.rpcUrls.default.http[0] + }) + ).rejects.toThrow("Cannot consume a viem wallet without an account") + } + ) + + test.concurrent("should have account addresses", async () => { + const addresses = await Promise.all([ + sender, + smartAccount.getAddress(), + recipient, + smartAccountTwo.getAddress() + ]) + /* + * addresses: [ + * '0xFA66E705cf2582cF56528386Bb9dFCA119767262', // sender + * '0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC', // smartAccountSender + * '0x3079B249DFDE4692D7844aA261f8cf7D927A0DA5', // recipient + * '0x5F141ee1390D4c9d033a00CB940E509A4811a5E0' // smartAccountRecipient + * ] + */ + expect(addresses.every(Boolean)).toBeTruthy() + }) // test.concurrent( - // "should throw and error, bundlerUrl chain id and paymaster url chain id does not match with validation module", + // "should create a smart account with paymaster with an api key", // async () => { - // const mockPaymasterUrl = - // "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + // const paymaster = smartAccount.paymaster + // expect(paymaster).not.toBeNull() + // expect(paymaster).not.toBeUndefined() + // } + // ) - // const k1ValidationModule = await createK1ValidatorModule( - // smartAccount.getSigner() - // ) + test.concurrent("should not throw and error, chain ids match", async () => { + const mockBundlerUrl = + "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" + const mockPaymasterUrl = + "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + + const config: NexusSmartAccountConfig = { + signer: walletClient, + bundlerUrl: mockBundlerUrl, + paymasterUrl: mockPaymasterUrl + } + + await expect( + compareChainIds(walletClient, config, false) + ).resolves.not.toThrow() + }) - // const config: BiconomySmartAccountV2Config = { - // defaultValidationModule: k1ValidationModule, - // activeValidationModule: k1ValidationModule, - // bundlerUrl, - // paymasterUrl: mockPaymasterUrl - // } + test.concurrent( + "should throw and error, bundlerUrl chain id and paymaster url chain id does not match with validation module", + async () => { + const mockPaymasterUrl = + "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - // await expect( - // compareChainIds(walletClient, config, false) - // ).rejects.toThrow() - // } - // ) + const k1ValidationModule = await createK1ValidatorModule( + smartAccount.getSigner() + ) - // test.concurrent( - // "should throw and error, signer has chain id (56) and paymasterUrl has chain id (80002)", - // async () => { - // const mockPaymasterUrl = - // "https://paymaster.biconomy.io/api/v1/80002/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + const config: NexusSmartAccountConfig = { + defaultValidationModule: k1ValidationModule, + activeValidationModule: k1ValidationModule, + bundlerUrl, + paymasterUrl: mockPaymasterUrl + } - // const walletClientBsc = createWalletClient({ - // account: walletClient.account, - // chain: bsc, - // transport: http(bsc.rpcUrls.default.http[0]) - // }) + await expect( + compareChainIds(walletClient, config, false) + ).rejects.toThrow() + } + ) - // const config: BiconomySmartAccountV2Config = { - // signer: walletClientBsc, - // bundlerUrl, - // paymasterUrl: mockPaymasterUrl - // } + test.concurrent( + "should throw and error, signer has chain id (56) and paymasterUrl has chain id (80002)", + async () => { + const mockPaymasterUrl = + "https://paymaster.biconomy.io/api/v1/80002/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - // await expect( - // compareChainIds(walletClientBsc, config, false) - // ).rejects.toThrow() - // } - // ) + const walletClientBsc = createWalletClient({ + account: walletClient.account, + chain: bsc, + transport: http(bsc.rpcUrls.default.http[0]) + }) - // test.concurrent("should return chain object for chain id 1", async () => { - // const chainId = 1 - // const chain = getChain(chainId) - // expect(chain.id).toBe(chainId) - // }) + const config: NexusSmartAccountConfig = { + signer: walletClientBsc, + bundlerUrl, + paymasterUrl: mockPaymasterUrl + } - // test.concurrent("should have correct fields", async () => { - // const chainId = 1 - // const chain = getChain(chainId) - // ;[ - // "blockExplorers", - // "contracts", - // "fees", - // "formatters", - // "id", - // "name", - // "nativeCurrency", - // "rpcUrls", - // "serializers" - // ].every((field) => { - // expect(chain).toHaveProperty(field) - // }) - // }) + await expect( + compareChainIds(walletClientBsc, config, false) + ).rejects.toThrow() + } + ) - // test.concurrent("should throw an error, chain id not found", async () => { - // const chainId = 0 - // expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) - // }) + test.concurrent("should return chain object for chain id 1", async () => { + const chainId = 1 + const chain = getChain(chainId) + expect(chain.id).toBe(chainId) + }) - // test.concurrent( - // "should have matching counterFactual address from the contracts with smartAccount.getAddress()", - // async () => { - // const client = createWalletClient({ - // account, - // chain, - // transport: http() - // }) + test.concurrent("should have correct fields", async () => { + const chainId = 1 + const chain = getChain(chainId) + ;[ + "blockExplorers", + "contracts", + "fees", + "formatters", + "id", + "name", + "nativeCurrency", + "rpcUrls", + "serializers" + ].every((field) => { + expect(chain).toHaveProperty(field) + }) + }) - // const smartAccount = await createSmartAccountClient({ - // signer: client, - // bundlerUrl, - // paymasterUrl - // }) + test.concurrent("should throw an error, chain id not found", async () => { + const chainId = 0 + expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) + }) - // const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() + test.concurrent( + "should have matching counterFactual address from the contracts with smartAccount.getAddress()", + async () => { + const client = createWalletClient({ + account, + chain, + transport: http() + }) - // const publicClient = createPublicClient({ - // chain, - // transport: http() - // }) + const smartAccount = await createSmartAccountClient({ + signer: client, + bundlerUrl, + paymasterUrl + }) - // const factoryContract = getContract({ - // address: DEFAULT_BICONOMY_FACTORY_ADDRESS, - // abi: BiconomyFactoryAbi, - // client: { public: publicClient, wallet: client } - // }) + const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() - // const smartAccountAddressFromContracts = - // await factoryContract.read.computeAccountAddress([ - // account.address, - // BigInt(0) - // ]) + const publicClient = createPublicClient({ + chain, + transport: http() + }) - // expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) - // } - // ) + const factoryContract = getContract({ + address: DEFAULT_BICONOMY_FACTORY_ADDRESS, + abi: BiconomyFactoryAbi, + client: { public: publicClient, wallet: client } + }) + + const smartAccountAddressFromContracts = + await factoryContract.read.computeAccountAddress([ + account.address, + BigInt(0) + ]) - // // test.concurrent( - // // "should have matching #getUserOpHash and entryPoint.getUserOpHash", - // // async () => { - // // const userOp: UserOperationStruct = { - // // sender: "0x".padEnd(42, "1") as string, - // // nonce: 2, - // // initCode: "0x3333", - // // callData: "0x4444", - // // callGasLimit: 5, - // // verificationGasLimit: 6, - // // preVerificationGas: 7, - // // maxFeePerGas: 8, - // // maxPriorityFeePerGas: 9, - // // paymasterAndData: "0xaaaaaa", - // // signature: "0xbbbb" - // // } - - // // const epHash = await publicClient.readContract({ - // // address: DEFAULT_ENTRYPOINT_ADDRESS, - // // abi: EntryPointAbi, - // // functionName: "getUserOpHash", - // // // @ts-ignore - // // args: [userOp] - // // }) - - // // const hash = await smartAccount.getUserOpHash(userOp) - // // expect(hash).toBe(epHash) - // // }, - // // 30000 - // // ) + expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) + } + ) // test.concurrent( - // "should be deployed to counterfactual address", + // "should have matching #getUserOpHash and entryPoint.getUserOpHash", // async () => { - // const accountAddress = await smartAccount.getAccountAddress() - // const byteCode = await publicClient.getBytecode({ - // address: accountAddress as Hex + // const userOp: UserOperationStruct = { + // sender: "0x".padEnd(42, "1") as string, + // nonce: 2, + // initCode: "0x3333", + // callData: "0x4444", + // callGasLimit: 5, + // verificationGasLimit: 6, + // preVerificationGas: 7, + // maxFeePerGas: 8, + // maxPriorityFeePerGas: 9, + // paymasterAndData: "0xaaaaaa", + // signature: "0xbbbb" + // } + + // const epHash = await publicClient.readContract({ + // address: DEFAULT_ENTRYPOINT_ADDRESS, + // abi: EntryPointAbi, + // functionName: "getUserOpHash", + // // @ts-ignore + // args: [userOp] // }) - // expect(byteCode?.length).toBeGreaterThan(2) + // const hash = await smartAccount.getUserOpHash(userOp) + // expect(hash).toBe(epHash) // }, - // 10000 + // 30000 // ) - // test.concurrent( - // "should check if ecdsaOwnershipModule is enabled", - // async () => { - // const ecdsaOwnershipModule = K1_VALIDATOR - - // expect(ecdsaOwnershipModule).toBe( - // smartAccount.activeValidationModule.getAddress() - // ) - // } - // ) + test.concurrent( + "should be deployed to counterfactual address", + async () => { + const accountAddress = await smartAccount.getAccountAddress() + const byteCode = await publicClient.getBytecode({ + address: accountAddress as Hex + }) - // test.concurrent( - // "should fail to deploy a smart account if no native token balance or paymaster", - // async () => { - // const newPrivateKey = generatePrivateKey() - // const newAccount = privateKeyToAccount(newPrivateKey) + expect(byteCode?.length).toBeGreaterThan(2) + }, + 10000 + ) - // const newViemWallet = createWalletClient({ - // account: newAccount, - // chain, - // transport: http() - // }) + test.concurrent( + "should check if ecdsaOwnershipModule is enabled", + async () => { + const ecdsaOwnershipModule = K1_VALIDATOR - // const smartAccount = await createSmartAccountClient({ - // signer: newViemWallet, - // paymasterUrl, - // bundlerUrl - // }) + expect(ecdsaOwnershipModule).toBe( + smartAccount.activeValidationModule.getAddress() + ) + } + ) - // expect(async () => smartAccount.deploy()).rejects.toThrow( - // ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY - // ) - // } - // ) + test.concurrent( + "should fail to deploy a smart account if no native token balance or paymaster", + async () => { + const newPrivateKey = generatePrivateKey() + const newAccount = privateKeyToAccount(newPrivateKey) - // test.concurrent( - // "should fail to deploy a smart account if already deployed", - // async () => { - // expect(async () => smartAccount.deploy()).rejects.toThrow( - // ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED - // ) - // }, - // 60000 - // ) + const newViemWallet = createWalletClient({ + account: newAccount, + chain, + transport: http() + }) - // // test.concurrent("should fetch balances for smartAccount", async () => { - // // const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - // // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - // // const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ - // // token - // // ]) + const smartAccount = await createSmartAccountClient({ + signer: newViemWallet, + paymasterUrl, + bundlerUrl + }) - // // expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) - // // }) + expect(async () => smartAccount.deploy()).rejects.toThrow( + ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY + ) + } + ) - // test.concurrent("should error if no recipient exists", async () => { - // const token: Hex = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + test.concurrent( + "should fail to deploy a smart account if already deployed", + async () => { + expect(async () => smartAccount.deploy()).rejects.toThrow( + ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED + ) + }, + 60000 + ) - // const txs = [ - // { address: token, amount: BigInt(1), recipient: sender }, - // { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } - // ] + // test.concurrent("should fetch balances for smartAccount", async () => { + // const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) + // const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ + // token + // ]) - // expect(async () => smartAccount.withdraw(txs)).rejects.toThrow( - // ERROR_MESSAGES.NO_RECIPIENT - // ) + // expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) // }) + test.concurrent("should error if no recipient exists", async () => { + const token: Hex = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + + const txs = [ + { address: token, amount: BigInt(1), recipient: sender }, + { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } + ] + + expect(async () => smartAccount.withdraw(txs)).rejects.toThrow( + ERROR_MESSAGES.NO_RECIPIENT + ) + }) + + test.concurrent( + "should error when withdraw all of native token is attempted without an amount explicitly set", + async () => { + expect(async () => smartAccount.withdraw(null, sender)).rejects.toThrow( + ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT + ) + }, + 6000 + ) + + test.concurrent( + "should check native token balance and more token info for smartAccount", + async () => { + const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() + + expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) + expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) + expect(ethBalanceFromSmartAccount.chainId).toBe(chainId) + expect(ethBalanceFromSmartAccount.decimals).toBe(18) + }, + 60000 + ) + // test.concurrent( - // "should error when withdraw all of native token is attempted without an amount explicitly set", + // "should check balance of supported token", // async () => { - // expect(async () => smartAccount.withdraw(null, sender)).rejects.toThrow( - // ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT - // ) + // const tokens = await smartAccount.getSupportedTokens() + // const [firstToken] = tokens + + // expect(tokens.length).toBeGreaterThan(0) + // expect(tokens[0]).toHaveProperty("balance") + // expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) // }, - // 6000 + // 60000 // ) // test.concurrent( - // "should check native token balance and more token info for smartAccount", + // "should verify a correct signature through isValidSignature", // async () => { - // const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() + // const eip1271MagicValue = "0x1626ba7e" + // const message = "Some message from dApp" + // const messageHash = hashMessage(message) + // const signature = await smartAccount.signMessage(messageHash) + + // const response = await publicClient.readContract({ + // address: await smartAccount.getAccountAddress(), + // abi: NexusAccountAbi, + // functionName: "isValidSignature", + // args: [messageHash, signature] + // }) - // expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) - // expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) - // expect(ethBalanceFromSmartAccount.chainId).toBe(chainId) - // expect(ethBalanceFromSmartAccount.decimals).toBe(18) - // }, - // 60000 + // expect(response).toBe(eip1271MagicValue) + // } // ) - // // test.concurrent( - // // "should check balance of supported token", - // // async () => { - // // const tokens = await smartAccount.getSupportedTokens() - // // const [firstToken] = tokens - - // // expect(tokens.length).toBeGreaterThan(0) - // // expect(tokens[0]).toHaveProperty("balance") - // // expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) - // // }, - // // 60000 - // // ) - - // // test.concurrent( - // // "should verify a correct signature through isValidSignature", - // // async () => { - // // const eip1271MagicValue = "0x1626ba7e" - // // const message = "Some message from dApp" - // // const messageHash = hashMessage(message) - // // const signature = await smartAccount.signMessage(messageHash) - - // // const response = await publicClient.readContract({ - // // address: await smartAccount.getAccountAddress(), - // // abi: NexusAccountAbi, - // // functionName: "isValidSignature", - // // args: [messageHash, signature] - // // }) - - // // expect(response).toBe(eip1271MagicValue) - // // } - // // ) - - // test.concurrent("should verifySignature of deployed", async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl - // }) - - // const message = "hello world" - - // const signature = await smartAccount.signMessage(message) - - // const isVerified = await publicClient.verifyMessage({ - // address: await smartAccount.getAddress(), - // message, - // signature - // }) - - // expect(isVerified).toBeTruthy() - // }) + test.concurrent("should verifySignature of deployed", async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl + }) - // test.concurrent("should verifySignature of not deployed", async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl, - // index: 100n - // }) + const message = "hello world" - // const message = "hello world" + const signature = await smartAccount.signMessage(message) - // const signature = await smartAccount.signMessage(message) + const isVerified = await publicClient.verifyMessage({ + address: await smartAccount.getSigner().getAddress(), + message, + signature + }) - // const isVerified = await publicClient.verifyMessage({ - // address: await smartAccount.getAccountAddress(), - // message, - // signature - // }) + expect(isVerified).toBeTruthy() + }) - // expect(isVerified).toBeTruthy() - // }) + test.concurrent("should verifySignature of not deployed", async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + index: 100n + }) + + const message = "hello world" + + const signature = await smartAccount.signMessage(message) + + const isVerified = await publicClient.verifyMessage({ + address: await smartAccount.getSigner().getAddress(), + message, + signature + }) + + expect(isVerified).toBeTruthy() + }) // test.concurrent( // "should simulate a user operation execution, expecting to fail", @@ -814,40 +785,40 @@ describe("Account:Read", () => { // } // ) - // // test.concurrent( - // // "should simulate a user operation execution, expecting to pass execution", - // // async () => { - // // const smartAccount = await createSmartAccountClient({ - // // signer: walletClient, - // // bundlerUrl - // // }) - - // // const balances = await smartAccount.getBalances() - // // expect(balances[0].amount).toBeGreaterThan(0n) - - // // const encodedCall = encodeFunctionData({ - // // abi: parseAbi(["function deposit()"]), - // // functionName: "deposit" - // // }) - - // // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" - - // // // fail if value is not bigger than 1 - // // // the contract call requires a deposit of at least 1 wei - // // const tx1 = { - // // to: amoyTestContract as Hex, - // // data: encodedCall, - // // value: 2 - // // } - // // const tx2 = { - // // to: amoyTestContract as Hex, - // // data: encodedCall, - // // value: 2 - // // } - - // // await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() - // // } - // // ) + // test.concurrent( + // "should simulate a user operation execution, expecting to pass execution", + // async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl + // }) + + // const balances = await smartAccount.getBalances() + // expect(balances[0].amount).toBeGreaterThan(0n) + + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function deposit()"]), + // functionName: "deposit" + // }) + + // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" + + // // fail if value is not bigger than 1 + // // the contract call requires a deposit of at least 1 wei + // const tx1 = { + // to: amoyTestContract as Hex, + // data: encodedCall, + // value: 2 + // } + // const tx2 = { + // to: amoyTestContract as Hex, + // data: encodedCall, + // value: 2 + // } + + // await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() + // } + // ) // test.concurrent("Should verify supported modes", async () => { // expect( diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index b1b7f7d47..2a1d2046e 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -5,18 +5,15 @@ import { type Hex, createPublicClient, createWalletClient, - decodeFunctionData, encodeAbiParameters, encodeFunctionData, - getContract, + encodePacked, parseAbi, stringToBytes, - toBytes, - toHex, - zeroAddress + toHex } from "viem" -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { beforeAll, describe, expect, test } from "vitest" +import { privateKeyToAccount } from "viem/accounts" +import { describe, expect, test } from "vitest" import { GENERIC_FALLBACK_SELECTOR, MOCK_EXECUTOR, @@ -25,29 +22,12 @@ import { createOwnableExecutorModule } from "../../src" import { - DEFAULT_ENTRYPOINT_ADDRESS, - ERC20_ABI, K1_VALIDATOR, ModuleType, - type TransferOwnershipCompatibleModule, - createSmartAccountClient, - getCustomChain, - percentage + createSmartAccountClient } from "../../src/account" -import { NexusSmartAccount } from "../../src/account/NexusSmartAccount" -import { ECDSAModuleAbi } from "../../src/account/abi/ECDSAModule" -import { EntryPointAbi } from "../../src/account/abi/EntryPointAbi" -import { NexusAccountAbi } from "../../src/account/abi/SmartAccount" import { UserOpReceipt } from "../../src/bundler" -import { PaymasterMode } from "../../src/paymaster" -import { testOnlyOnOptimism } from "../setupFiles" -import { - checkBalance, - getBundlerUrl, - getConfig, - nonZeroBalance, - topUp -} from "../utils" +import { getConfig } from "../utils" describe("Account:Write", async () => { const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } @@ -70,16 +50,11 @@ describe("Account:Write", async () => { transport: http() }) - const [walletClient, walletClientTwo] = [ + const [walletClient] = [ createWalletClient({ account, chain, transport: http() - }), - createWalletClient({ - account: accountTwo, - chain, - transport: http() }) ] @@ -93,153 +68,89 @@ describe("Account:Write", async () => { const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) smartAccount.setActiveExecutorModule(ownableExecutorModule) - // describe("Account:Basics", async () => { - // test("Build a user op with pimlico bundler", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall - // } - // const userOp = await smartAccount.buildUserOp([transaction]) - // expect(userOp).toBeTruthy() - // }, 60000) + console.log(`Using SA at address : ${await smartAccount.getAddress()}`) + console.log(`Using Signer with address : ${await account.address}`) - // test("Mint NFT - Single Call", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall - // } - // const gasCost = await smartAccount.getGasEstimate([transaction]) - // console.log(gasCost, "gasCost") - - // const userOpHash = await smartAccount.sendTransaction([transaction]) - - // expect(userOpHash).toBeTruthy() - // }, 60000) - - // test("Mint NFT's - Batch Call", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall, - // value: 0n - // } - // const userOpResponse = await smartAccount.sendTransaction([ - // transaction, - // transaction - // ]) - // const userOpReceipt: UserOpReceipt = await userOpResponse.wait() - // console.log(userOpReceipt.userOpHash, "user op hash") - - // expect(userOpReceipt.success).toBe(true) - // }, 60000) - // }) + describe("Account:Basics", async () => { + // test("Build a user op with pimlico bundler", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall + // } + // const userOp = await smartAccount.buildUserOp([transaction]) + // expect(userOp).toBeTruthy() + // }, 60000) - // describe("Account:Validation Module", async () => { - // test("should install a dummy K1Validator module", async () => { - // const newK1ValidatorContract = - // "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - // const userOpResponse: UserOpResponse = await smartAccount.installModule( - // ModuleType.Validation, - // newK1ValidatorContract, - // account.address - // ) - // const userOpReceipt = await userOpResponse.wait() + test("Mint NFT - Single Call", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // newK1ValidatorContract - // ) + console.log(recipient, "recipient") - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) + // smartAccount.setActiveValidationModule() - // test("should uninstall dummy K1Validator module", async () => { - // const newK1ValidatorContract = - // "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + // const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: K1_VALIDATOR}); + // console.log(isInstalled); - // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - // const deInitData = encodeAbiParameters( - // [ - // { name: "prev", type: "address" }, - // { name: "disableModuleData", type: "bytes" } - // ], - // [prevAddress, toHex(stringToBytes(""))] - // ) - // const userOpResponse = await smartAccount.uninstallModule( - // ModuleType.Validation, - // newK1ValidatorContract, - // deInitData - // ) - // const userOpReceipt = await userOpResponse.wait() + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const gasCost = await smartAccount.getGasEstimate([transaction]) + console.log(gasCost, "gasCost") - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // newK1ValidatorContract - // ) + const response = await smartAccount.sendTransaction([transaction]) + const receipt = await response.wait() - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) + console.log(receipt, "receipt") - // test("should fail to install an already installed Validator", async () => { - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR - // ) - // expect(isInstalled).toBeTruthy() + expect(receipt.userOpHash).toBeTruthy() + }, 60000) - // const userOpResponse = smartAccount.installModule( - // ModuleType.Validation, - // K1_VALIDATOR, - // account.address - // ) - // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") - // }, 60000) - // }) + // test("Mint NFT's - Batch Call", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall, + // value: 0n + // } + // const userOpResponse = await smartAccount.sendTransaction([ + // transaction, + // transaction + // ]) + // const userOpReceipt: UserOpReceipt = await userOpResponse.wait() + // console.log(userOpReceipt.userOpHash, "user op hash") - describe("Account:Execution Module Tests", async () => { - // test("install a mock Execution module", async () => { - // const userOpResponse: UserOpResponse = await smartAccount.installModule( - // ModuleType.Execution, - // MOCK_EXECUTOR, - // account.address - // ) - // const userOpReceipt = await userOpResponse.wait() + // expect(userOpReceipt.success).toBe(true) + // }, 60000) + }) + describe("Account:Validation Module", async () => { + // test("should install a dummy K1Validator module", async () => { + // const userOpReceipt = await smartAccount.installModule(K1_VALIDATOR, ModuleType.Validation, encodePacked(['address'], [await smartAccount.getAddress() as Hex])) // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Execution, - // MOCK_EXECUTOR + // ModuleType.Validation, + // K1_VALIDATOR // ) - // expect(userOpReceipt.success).toBe(true) // expect(isInstalled).toBeTruthy() // }, 60000) - - // test("get installed executors", async () => { - // const installedExecutors: Address[] = - // await smartAccount.getInstalledExecutors() - // console.log(installedExecutors, "installed executors") - // expect(installedExecutors.includes(MOCK_EXECUTOR)).toBeTruthy() - // }, 60000) - - // test("uninstall executor module", async () => { - // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // test("should uninstall dummy K1Validator module", async () => { + // const newK1ValidatorContract = + // "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + // const prevAddress: Hex = "0x9C08e1CE188C29bAaeBc64A08cF2Ec44207749B6" // const deInitData = encodeAbiParameters( // [ // { name: "prev", type: "address" }, @@ -247,81 +158,129 @@ describe("Account:Write", async () => { // ], // [prevAddress, toHex(stringToBytes(""))] // ) - // const userOpResponse = await smartAccount.uninstallModule( - // ModuleType.Execution, - // MOCK_EXECUTOR, - // deInitData - // ) - // const userOpReceipt = await userOpResponse.wait() - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Execution, - // MOCK_EXECUTOR - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) - - // test("should fail to install same executor module", async () => { - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR - // ) - // expect(isInstalled).toBeTruthy() - - // const userOpResponse = smartAccount.installModule( - // ModuleType.Validation, - // K1_VALIDATOR, - // account.address - // ) - // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") - // }, 60000) - - // test("send user op using the executor call type single", async () => { - // const authorizedOwners = await ownableExecutorModule.getOwners(); - // expect(authorizedOwners).contains(await smartAccount.getAddress()); - - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - - // const transaction = { - // to: nftAddress, - // data: encodedCall - // } - // const userOpReceipt = await smartAccount.sendTransactionWithExecutor( - // transaction, - // ) - - // expect(userOpReceipt.success).toBeTruthy(); + // console.log(deInitData, "deInitData"); + // const userOpReceipt = await smartAccount.uninstallModule(newK1ValidatorContract, ModuleType.Validation, deInitData); + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // newK1ValidatorContract + // ) + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() // }, 60000) - - test("send user op using the executor call type batch", async () => { - const authorizedOwners = await ownableExecutorModule.getOwners() - expect(authorizedOwners).contains(await smartAccount.getAddress()) - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, - data: encodedCall - } - const userOpReceipt = await smartAccount.sendTransactionWithExecutor([ - transaction, - transaction - ]) - - expect(userOpReceipt.success).toBeTruthy() - }, 60000) + // test("should fail to install an already installed Validator", async () => { + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // K1_VALIDATOR + // ) + // expect(isInstalled).toBeTruthy() + // const receiptPromise = smartAccount.installModule(K1_VALIDATOR, ModuleType.Validation) + // await expect(receiptPromise).rejects.toThrowError("Error from Bundler:") + // }, 60000) }) + // describe("Account:Execution Module Tests", async () => { + // test("install a mock Execution module", async () => { + // const userOpReceipt = await smartAccount.installModule(K1_VALIDATOR, ModuleType.Validation) + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Execution, + // MOCK_EXECUTOR + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test("get installed executors", async () => { + // const installedExecutors: Address[] = + // await smartAccount.getInstalledExecutors() + // console.log(installedExecutors, "installed executors") + // expect(installedExecutors.includes(MOCK_EXECUTOR)).toBeTruthy() + // }, 60000) + + // test("uninstall executor module", async () => { + + // const isInstalledBefore = await smartAccount.isModuleInstalled( + // ModuleType.Execution, + // MOCK_EXECUTOR + // ) + // console.log(isInstalledBefore, "isInstalledBefore"); + + // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // const deInitData = encodeAbiParameters( + // [ + // { name: "prev", type: "address" }, + // { name: "disableModuleData", type: "bytes" } + // ], + // [prevAddress, toHex(stringToBytes(""))] + // ) + // const userOpReceipt = await smartAccount.uninstallModule(MOCK_EXECUTOR, ModuleType.Execution, deInitData) + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Execution, + // MOCK_EXECUTOR + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) + + // test("should fail to install same executor module", async () => { + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // K1_VALIDATOR + // ) + // expect(isInstalled).toBeTruthy() + + // const userOpResponse = smartAccount.installModule(MOCK_EXECUTOR, ModuleType.Execution) + // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") + // }, 60000) + + // test("send user op using the executor call type single", async () => { + // const authorizedOwners = await ownableExecutorModule.getOwners(); + // expect(authorizedOwners).contains(await smartAccount.getAddress()); + + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + + // const transaction = { + // to: nftAddress, + // data: encodedCall + // } + // const userOpReceipt = await smartAccount.sendTransactionWithExecutor( + // transaction, + // ) + + // expect(userOpReceipt.success).toBeTruthy(); + // }, 60000) + + // test("send user op using the executor call type batch", async () => { + // const authorizedOwners = await ownableExecutorModule.getOwners() + // expect(authorizedOwners).contains(await smartAccount.getAddress()) + + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, + // data: encodedCall + // } + // const userOpReceipt = await smartAccount.sendTransactionWithExecutor([ + // transaction, + // transaction + // ]) + + // expect(userOpReceipt.success).toBeTruthy() + // }, 60000) + // }) + // describe("Account:Hook Module Tests", async () => { // test("install a mock Hook module", async () => { // const isSupported = await smartAccount.supportsModule(ModuleType.Hooks) @@ -333,11 +292,7 @@ describe("Account:Write", async () => { // ) // console.log(isInstalledBefore, "is installed before") - // const userOpResponse: UserOpResponse = await smartAccount.installModule( - // ModuleType.Hooks, - // MOCK_HOOK - // ) - // const userOpReceipt = await userOpResponse.wait() + // const userOpReceipt = await smartAccount.installModule(MOCK_HOOK, ModuleType.Hooks) // console.log(userOpReceipt, "user op receipt") // const isInstalled = await smartAccount.isModuleInstalled( @@ -364,12 +319,7 @@ describe("Account:Write", async () => { // ], // [prevAddress, toHex(stringToBytes(""))] // ) - // const userOpResponse = await smartAccount.uninstallModule( - // ModuleType.Hooks, - // MOCK_HOOK, - // deInitData - // ) - // const userOpReceipt = await userOpResponse.wait() + // const userOpReceipt = await smartAccount.uninstallModule(MOCK_HOOK, ModuleType.Hooks, deInitData) // const isInstalled = await smartAccount.isModuleInstalled( // ModuleType.Hooks, @@ -397,15 +347,10 @@ describe("Account:Write", async () => { // ) // console.log(isInstalledBefore, "is installed before") - // const userOpResponse: UserOpResponse = await smartAccount.installModule( - // ModuleType.Fallback, - // MOCK_FALLBACK_HANDLER, - // ethers.AbiCoder.defaultAbiCoder().encode( - // ["bytes4"], - // [GENERIC_FALLBACK_SELECTOR as Hex] - // ) as Hex - // ) - // const userOpReceipt = await userOpResponse.wait() + // const userOpReceipt = await smartAccount.installModule(MOCK_FALLBACK_HANDLER, ModuleType.Fallback, ethers.AbiCoder.defaultAbiCoder().encode( + // ["bytes4"], + // [GENERIC_FALLBACK_SELECTOR as Hex] + // ) as Hex) // const isInstalled = await smartAccount.isModuleInstalled( // ModuleType.Fallback, @@ -426,12 +371,11 @@ describe("Account:Write", async () => { // ["bytes4"], // [GENERIC_FALLBACK_SELECTOR as Hex] // ) as Hex - // const userOpResponse = await smartAccount.uninstallModule( - // ModuleType.Fallback, + // const userOpReceipt = await smartAccount.uninstallModule( // MOCK_FALLBACK_HANDLER, + // ModuleType.Fallback, // deInitData // ) - // const userOpReceipt = await userOpResponse.wait() // const isInstalled = await smartAccount.isModuleInstalled( // ModuleType.Fallback, diff --git a/tests/modules/k1Validator.ts/write.test.ts b/tests/modules/k1Validator.ts/write.test.ts new file mode 100644 index 000000000..e69de29bb diff --git a/tests/modules/ownableExecutor.ts/write.test.ts b/tests/modules/ownableExecutor.ts/write.test.ts index 88a63ed45..7666162a9 100644 --- a/tests/modules/ownableExecutor.ts/write.test.ts +++ b/tests/modules/ownableExecutor.ts/write.test.ts @@ -1,13 +1,26 @@ -import { http, createWalletClient } from "viem" +import { + http, + Hex, + createWalletClient, + encodeAbiParameters, + encodePacked, + parseAbi, + stringToBytes, + toHex +} from "viem" import { privateKeyToAccount } from "viem/accounts" import { baseSepolia } from "viem/chains" import { beforeAll, describe, expect, test } from "vitest" import { - ModuleName, + Module, ModuleType, + OWNABLE_EXECUTOR, createOwnableExecutorModule } from "../../../src" -import { createSmartAccountClient } from "../../../src/account" +import { + SENTINEL_ADDRESS, + createSmartAccountClient +} from "../../../src/account" import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" import type { UserOpReceipt } from "../../../src/bundler" import { getConfig } from "../../utils" @@ -39,41 +52,47 @@ describe("Account:Modules:OwnableExecutor", async () => { describe("Ownable Executor Module Tests", async () => { test("install Ownable Executor", async () => { - const userOpReceipt: UserOpReceipt = await smartAccount.installModule( - ModuleName.OwnableExecutor - ) - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Execution, - ownableExecutor - ) - - const activeExecutor = smartAccount.activeExecutorModule - const installedExecutors = smartAccount.installedExecutors - - console.log(activeExecutor, installedExecutors) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeTruthy() + const signerAddress = await smartAccount.getSigner().getAddress() + console.log(signerAddress, "signerAddress from tests") + + const isInstalled = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Execution, + moduleAddress: ownableExecutor + }) + + if (!isInstalled) { + const userOpReceipt: UserOpReceipt = await smartAccount.installModule({ + moduleAddress: OWNABLE_EXECUTOR, + moduleType: ModuleType.Execution, + data: encodePacked( + ["address"], + [await smartAccount.getAccountAddress()] + ) + }) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeTruthy() + } }, 60000) test("Ownable Executor Module should be installed", async () => { - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Execution, - ownableExecutor - ) + const isInstalled = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Execution, + moduleAddress: ownableExecutor + }) expect(isInstalled).toBeTruthy() }, 60000) test("uninstall Ownable Executor Module", async () => { - const userOpReceipt = await smartAccount.uninstallModule( - ModuleName.OwnableExecutor - ) + const userOpReceipt = await smartAccount.uninstallModule({ + moduleAddress: OWNABLE_EXECUTOR, + moduleType: ModuleType.Execution + }) - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Execution, - ownableExecutor - ) + const isInstalled = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Execution, + moduleAddress: ownableExecutor + }) expect(userOpReceipt.success).toBe(true) expect(isInstalled).toBeFalsy() @@ -81,6 +100,22 @@ describe("Account:Modules:OwnableExecutor", async () => { }, 60000) test("should add an owner to the module", async () => { + const isInstalled = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Execution, + moduleAddress: ownableExecutor + }) + + expect(isInstalled).to.be.false + + await smartAccount.installModule({ + moduleAddress: OWNABLE_EXECUTOR, + moduleType: ModuleType.Execution, + data: encodePacked( + ["address"], + [await smartAccount.getAccountAddress()] + ) + }) + const userOpReceipt = await ownableExecutorModule.addOwner( "0x4D8249d21c9553b1bD23cABF611011376dd3416a" ) diff --git a/tests/modules/ownableValidator.ts/write.test.ts b/tests/modules/ownableValidator.ts/write.test.ts index 823e87205..c5af19f79 100644 --- a/tests/modules/ownableValidator.ts/write.test.ts +++ b/tests/modules/ownableValidator.ts/write.test.ts @@ -1,112 +1,124 @@ -import { http, createWalletClient } from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { baseSepolia } from "viem/chains" -import { describe, expect, test } from "vitest" -import { - ModuleName, - ModuleType, - OWNABLE_VALIDATOR, - createOwnableValidatorModule -} from "../../../src" -import { createSmartAccountClient } from "../../../src/account" -import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" -import type { UserOpReceipt } from "../../../src/bundler" -import { getConfig } from "../../utils" - -describe("Account:Modules:OwnableValidator", async () => { - const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } - const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - const { privateKey, privateKeyTwo } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - - const [walletClient] = [ - createWalletClient({ - account, - chain: baseSepolia, - transport: http() - }) - ] - - const smartAccount: NexusSmartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl: - "https://api.pimlico.io/v2/84532/rpc?apikey=22c48af7-4886-4c7d-8d4c-5d50262a23f3" - }) - - const owners = [walletClient.account.address, accountTwo.address] - - const ownableValidatorModule = await createOwnableValidatorModule( - smartAccount, - 2, - owners - ) - smartAccount.setActiveValidationModule(ownableValidatorModule) - - describe("Ownable Validator Module Tests", async () => { - test("install Ownable Executor", async () => { - const isInstalledBefore = await smartAccount.isModuleInstalled( - ModuleType.Validation, - OWNABLE_VALIDATOR - ) - - if (!isInstalledBefore) { - const userOpReceipt: UserOpReceipt = await smartAccount.installModule( - ModuleName.OwnableValidator - ) - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - OWNABLE_VALIDATOR - ) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeTruthy() - } - }, 60000) - - test("Ownable Validator Module should be installed", async () => { - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - OWNABLE_VALIDATOR - ) - expect(isInstalled).toBeTruthy() - }, 60000) - - test("uninstall Ownable Validator Module", async () => { - const userOpReceipt = await smartAccount.uninstallModule( - ModuleName.OwnableValidator - ) - - const isInstalled = await smartAccount.isModuleInstalled( - ModuleType.Validation, - OWNABLE_VALIDATOR - ) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeFalsy() - expect(userOpReceipt).toBeTruthy() - }, 60000) - - test("should add an owner to the module", async () => { - const userOpReceipt = await ownableValidatorModule.addOwner( - "0x4D8249d21c9553b1bD23cABF611011376dd3416a" - ) - - expect(userOpReceipt.success).toBeTruthy() - }, 60000) - - test("should remove an owner from the module", async () => { - const userOpReceipt = await ownableValidatorModule.removeOwner( - "0x4D8249d21c9553b1bD23cABF611011376dd3416a" - ) - expect(userOpReceipt.success).toBeTruthy() - }, 60000) - - test("should get all the owners", async () => { - const owners = await ownableValidatorModule.getOwners() - console.log(owners, "owners") - }, 60000) - }) -}) +// import { http, createWalletClient, encodeAbiParameters } from "viem" +// import { privateKeyToAccount } from "viem/accounts" +// import { baseSepolia } from "viem/chains" +// import { describe, expect, test } from "vitest" +// import { +// Module, +// ModuleType, +// OWNABLE_VALIDATOR, +// createOwnableValidatorModule +// } from "../../../src" +// import { createSmartAccountClient } from "../../../src/account" +// import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" +// import type { UserOpReceipt } from "../../../src/bundler" +// import { getConfig } from "../../utils" + +// describe("Account:Modules:OwnableValidator", async () => { +// const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } +// const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" +// const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" +// const { privateKey, privateKeyTwo } = getConfig() +// const account = privateKeyToAccount(`0x${privateKey}`) +// const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + +// const [walletClient] = [ +// createWalletClient({ +// account, +// chain: baseSepolia, +// transport: http() +// }) +// ] + +// const smartAccount: NexusSmartAccount = await createSmartAccountClient({ +// signer: walletClient, +// bundlerUrl: +// "https://api.pimlico.io/v2/84532/rpc?apikey=22c48af7-4886-4c7d-8d4c-5d50262a23f3" +// }) + +// const owners = [walletClient.account.address, accountTwo.address] + +// const ownableValidatorModule = await createOwnableValidatorModule( +// smartAccount, +// 2, +// owners +// ) +// smartAccount.setActiveValidationModule(ownableValidatorModule) + +// describe("Ownable Validator Module Tests", async () => { +// test("install Ownable Executor", async () => { +// const isInstalledBefore = await smartAccount.isModuleInstalled( +// ModuleType.Validation, +// OWNABLE_VALIDATOR +// ) + +// const threshold = 2; +// const installData = encodeAbiParameters( +// [ +// { name: 'threshold', type: 'uint256' }, +// { name: 'owners', type: 'address[]' }, +// ], +// [BigInt(threshold), owners], +// ) + +// if (!isInstalledBefore) { +// const userOpReceipt: UserOpReceipt = await smartAccount.installModule( +// OWNABLE_VALIDATOR, +// ModuleType.Validation, +// installData +// ) + +// const isInstalled = await smartAccount.isModuleInstalled( +// ModuleType.Validation, +// OWNABLE_VALIDATOR +// ) + +// expect(userOpReceipt.success).toBe(true) +// expect(isInstalled).toBeTruthy() +// } +// }, 60000) + +// test("Ownable Validator Module should be installed", async () => { +// const isInstalled = await smartAccount.isModuleInstalled( +// ModuleType.Validation, +// OWNABLE_VALIDATOR +// ) +// expect(isInstalled).toBeTruthy() +// }, 60000) + +// test("uninstall Ownable Validator Module", async () => { +// const userOpReceipt = await smartAccount.uninstallModule( +// OWNABLE_VALIDATOR, +// ModuleType.Validation +// ) + +// const isInstalled = await smartAccount.isModuleInstalled( +// ModuleType.Validation, +// OWNABLE_VALIDATOR +// ) + +// expect(userOpReceipt.success).toBe(true) +// expect(isInstalled).toBeFalsy() +// expect(userOpReceipt).toBeTruthy() +// }, 60000) + +// test("should add an owner to the module", async () => { +// const userOpReceipt = await ownableValidatorModule.addOwner( +// "0x4D8249d21c9553b1bD23cABF611011376dd3416a" +// ) + +// expect(userOpReceipt.success).toBeTruthy() +// }, 60000) + +// test("should remove an owner from the module", async () => { +// const userOpReceipt = await ownableValidatorModule.removeOwner( +// "0x4D8249d21c9553b1bD23cABF611011376dd3416a" +// ) +// expect(userOpReceipt.success).toBeTruthy() +// }, 60000) + +// test("should get all the owners", async () => { +// const owners = await ownableValidatorModule.getOwners() +// console.log(owners, "owners") +// }, 60000) +// }) +// }) From 2268af267430222e2d61c76ac83e8dfd068b8938 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Thu, 4 Jul 2024 12:30:20 +0300 Subject: [PATCH 1214/1247] feat: add account address argument --- src/modules/executors/OwnableExecutor.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/executors/OwnableExecutor.ts b/src/modules/executors/OwnableExecutor.ts index 3cadec6d3..4e98f5c60 100644 --- a/src/modules/executors/OwnableExecutor.ts +++ b/src/modules/executors/OwnableExecutor.ts @@ -152,7 +152,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { return receipt } - public async getOwners(): Promise<Address[]> { + public async getOwners(accountAddress?: Address): Promise<Address[]> { try { const owners = await this.smartAccount.publicClient.readContract({ address: OWNABLE_EXECUTOR, @@ -160,7 +160,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { "function getOwners(address account) external view returns (address[])" ]), functionName: "getOwners", - args: [await this.smartAccount.getAccountAddress()] + args: [accountAddress ?? await this.smartAccount.getAccountAddress()] }) return owners as Address[] From 21dab0d475da28843a2e539a1a66b6afe0a52006 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Thu, 4 Jul 2024 12:30:33 +0300 Subject: [PATCH 1215/1247] refactor: lint --- src/modules/executors/OwnableExecutor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/executors/OwnableExecutor.ts b/src/modules/executors/OwnableExecutor.ts index 4e98f5c60..dbf9b444e 100644 --- a/src/modules/executors/OwnableExecutor.ts +++ b/src/modules/executors/OwnableExecutor.ts @@ -160,7 +160,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { "function getOwners(address account) external view returns (address[])" ]), functionName: "getOwners", - args: [accountAddress ?? await this.smartAccount.getAccountAddress()] + args: [accountAddress ?? (await this.smartAccount.getAccountAddress())] }) return owners as Address[] From 4f329f71ece1fad9372f17b6ec1d377c922c5970 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Mon, 8 Jul 2024 19:50:24 +0300 Subject: [PATCH 1216/1247] feat: extra argument to executor + test case --- src/account/NexusSmartAccount.ts | 13 +- src/modules/base/BaseExecutionModule.ts | 4 +- src/modules/executors/OwnableExecutor.ts | 7 +- .../modules/ownableExecutor.ts/write.test.ts | 119 +++++++++++++----- 4 files changed, 105 insertions(+), 38 deletions(-) diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index decbeb085..2d18c811e 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -1492,13 +1492,15 @@ export class NexusSmartAccount extends BaseSmartContractAccount { } async sendTransactionWithExecutor( - manyOrOneTransactions: Transaction | Transaction[] + manyOrOneTransactions: Transaction | Transaction[], + ownedAccountAddress?: Address // buildUseropDto?: BuildUserOpOptions ): Promise<UserOpReceipt> { return await this.executeFromExecutor( Array.isArray(manyOrOneTransactions) ? manyOrOneTransactions - : [manyOrOneTransactions] + : [manyOrOneTransactions], + ownedAccountAddress // buildUseropDto ) } @@ -2353,7 +2355,8 @@ export class NexusSmartAccount extends BaseSmartContractAccount { } private async executeFromExecutor( - transactions: Transaction[] + transactions: Transaction[], + ownedAccountAddress?: Address // buildUseropDto?: BuildUserOpOptions ): Promise<UserOpReceipt> { if (this.activeExecutorModule) { @@ -2366,14 +2369,14 @@ export class NexusSmartAccount extends BaseSmartContractAccount { value: BigInt(tx.value ?? 0n) } }) - return await this.activeExecutorModule?.executeFromExecutor(executions) + return await this.activeExecutorModule?.executeFromExecutor(executions, ownedAccountAddress) } const execution = { target: transactions[0].to as Hex, callData: (transactions[0].data ?? "0x") as Hex, value: BigInt(transactions[0].value ?? 0n) } - return await this.activeExecutorModule?.executeFromExecutor(execution) + return await this.activeExecutorModule?.executeFromExecutor(execution, ownedAccountAddress) } throw new Error( "Please set an active executor module before running this method." diff --git a/src/modules/base/BaseExecutionModule.ts b/src/modules/base/BaseExecutionModule.ts index c95822de7..422a5ad01 100644 --- a/src/modules/base/BaseExecutionModule.ts +++ b/src/modules/base/BaseExecutionModule.ts @@ -1,9 +1,11 @@ +import { Address } from "viem" import type { UserOpReceipt } from "../../bundler/index.js" import { BaseModule } from "../base/BaseModule.js" import type { Execution } from "../utils/Types.js" export abstract class BaseExecutionModule extends BaseModule { abstract executeFromExecutor( - execution: Execution | Execution[] + execution: Execution | Execution[], + ownedAccountAddress?: Address ): Promise<UserOpReceipt> } diff --git a/src/modules/executors/OwnableExecutor.ts b/src/modules/executors/OwnableExecutor.ts index dbf9b444e..400790381 100644 --- a/src/modules/executors/OwnableExecutor.ts +++ b/src/modules/executors/OwnableExecutor.ts @@ -39,7 +39,8 @@ export class OwnableExecutorModule extends BaseExecutionModule { } public async executeFromExecutor( - execution: Execution | Execution[] + execution: Execution | Execution[], + accountAddress?: Address ): Promise<UserOpReceipt> { let calldata: Hex if (Array.isArray(execution)) { @@ -49,7 +50,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { "function executeBatchOnOwnedAccount(address ownedAccount, bytes callData)" ]), args: [ - await this.smartAccount.getAccountAddress(), + accountAddress ?? await this.smartAccount.getAccountAddress(), encodeAbiParameters( [ { @@ -83,7 +84,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { "function executeOnOwnedAccount(address ownedAccount, bytes callData)" ]), args: [ - await this.smartAccount.getAccountAddress(), + accountAddress ?? await this.smartAccount.getAccountAddress(), encodePacked( ["address", "uint256", "bytes"], [ diff --git a/tests/modules/ownableExecutor.ts/write.test.ts b/tests/modules/ownableExecutor.ts/write.test.ts index 7666162a9..0a8f4f049 100644 --- a/tests/modules/ownableExecutor.ts/write.test.ts +++ b/tests/modules/ownableExecutor.ts/write.test.ts @@ -1,24 +1,20 @@ import { http, - Hex, createWalletClient, - encodeAbiParameters, encodePacked, + encodeFunctionData, parseAbi, - stringToBytes, - toHex + parseEther, } from "viem" import { privateKeyToAccount } from "viem/accounts" import { baseSepolia } from "viem/chains" -import { beforeAll, describe, expect, test } from "vitest" +import { describe, expect, test } from "vitest" import { - Module, ModuleType, OWNABLE_EXECUTOR, createOwnableExecutorModule } from "../../../src" import { - SENTINEL_ADDRESS, createSmartAccountClient } from "../../../src/account" import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" @@ -26,18 +22,23 @@ import type { UserOpReceipt } from "../../../src/bundler" import { getConfig } from "../../utils" describe("Account:Modules:OwnableExecutor", async () => { - const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + const token = "0xECF8B93B9b56F9105C329381C573E42640a27A73" const ownableExecutor = "0x858F46775858edB4cE40CE58863dBDf366b7F374" - const { privateKey } = getConfig() + const { privateKey, privateKeyTwo } = getConfig() const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - const [walletClient] = [ + const [walletClient, walletClientTwo] = [ createWalletClient({ account, chain: baseSepolia, transport: http() + }), + createWalletClient({ + account: accountTwo, + chain: baseSepolia, + transport: http() }) ] @@ -73,6 +74,7 @@ describe("Account:Modules:OwnableExecutor", async () => { expect(userOpReceipt.success).toBe(true) expect(isInstalled).toBeTruthy() } + expect(isInstalled).toBeTruthy(); }, 60000) test("Ownable Executor Module should be installed", async () => { @@ -84,40 +86,56 @@ describe("Account:Modules:OwnableExecutor", async () => { }, 60000) test("uninstall Ownable Executor Module", async () => { - const userOpReceipt = await smartAccount.uninstallModule({ - moduleAddress: OWNABLE_EXECUTOR, - moduleType: ModuleType.Execution - }) - const isInstalled = await smartAccount.isModuleInstalled({ + let isInstalled = await smartAccount.isModuleInstalled({ moduleType: ModuleType.Execution, moduleAddress: ownableExecutor }) - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeFalsy() - expect(userOpReceipt).toBeTruthy() + if (isInstalled) { + const userOpReceipt = await smartAccount.uninstallModule({ + moduleAddress: OWNABLE_EXECUTOR, + moduleType: ModuleType.Execution + }) + + isInstalled = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Execution, + moduleAddress: ownableExecutor + }) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeFalsy() + expect(userOpReceipt).toBeTruthy() + } + expect(isInstalled).toBeFalsy(); }, 60000) test("should add an owner to the module", async () => { - const isInstalled = await smartAccount.isModuleInstalled({ + let isInstalled = await smartAccount.isModuleInstalled({ moduleType: ModuleType.Execution, moduleAddress: ownableExecutor }) - expect(isInstalled).to.be.false + if(!isInstalled) { + await smartAccount.installModule({ + moduleAddress: OWNABLE_EXECUTOR, + moduleType: ModuleType.Execution, + data: encodePacked( + ["address"], + [await smartAccount.getAccountAddress()] + ) + }) + } - await smartAccount.installModule({ - moduleAddress: OWNABLE_EXECUTOR, + isInstalled = await smartAccount.isModuleInstalled({ moduleType: ModuleType.Execution, - data: encodePacked( - ["address"], - [await smartAccount.getAccountAddress()] - ) + moduleAddress: ownableExecutor }) + expect(isInstalled).to.be.true + const userOpReceipt = await ownableExecutorModule.addOwner( - "0x4D8249d21c9553b1bD23cABF611011376dd3416a" + accountTwo.address ) expect(userOpReceipt.success).toBeTruthy() @@ -125,7 +143,7 @@ describe("Account:Modules:OwnableExecutor", async () => { test("should remove an owner from the module", async () => { const userOpReceipt = await ownableExecutorModule.removeOwner( - "0x4D8249d21c9553b1bD23cABF611011376dd3416a" + accountTwo.address ) expect(userOpReceipt.success).toBeTruthy() }, 60000) @@ -134,5 +152,48 @@ describe("Account:Modules:OwnableExecutor", async () => { const owners = await ownableExecutorModule.getOwners() console.log(owners, "owners") }, 60000) + + test("added owner executes token transfer on Smart Account", async () => { + const valueToTransfer = parseEther("0.1"); + const recipient = accountTwo.address; + const transferEncodedCall = encodeFunctionData({ + abi: parseAbi(["function transfer(address to, uint256 value)"]), + functionName: "transfer", + args: [recipient, valueToTransfer] + }) + + await ownableExecutorModule.addOwner( + accountTwo.address + ) + + const owners = await ownableExecutorModule.getOwners() + const isOwner = owners.includes(accountTwo.address); + expect(isOwner).toBeTruthy(); + + const calldata = encodeFunctionData({ + abi: parseAbi(["function executeOnOwnedAccount(address ownedAccount, bytes callData)"]), + functionName: "executeOnOwnedAccount", + args: [ + await smartAccount.getAddress(), + encodePacked( + ["address", "uint256", "bytes"], + [ + token, + BigInt(Number(0)), + transferEncodedCall + ] + ) + ] + }) + + const txHash = await walletClientTwo.sendTransaction({ + account: accountTwo, // Called by second owner + to: ownableExecutorModule.moduleAddress, + data: calldata, + value: 0n + }) + + expect(txHash).toBeTruthy(); + }, 60000) }) }) From 35778eebc4485d675df0538c0bc4868803bcf62c Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Mon, 8 Jul 2024 19:50:40 +0300 Subject: [PATCH 1217/1247] refactor: fix lint issues --- src/account/NexusSmartAccount.ts | 10 ++++- src/modules/base/BaseExecutionModule.ts | 2 +- src/modules/executors/OwnableExecutor.ts | 4 +- .../modules/ownableExecutor.ts/write.test.ts | 41 ++++++++----------- 4 files changed, 28 insertions(+), 29 deletions(-) diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index 2d18c811e..a485c5717 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -2369,14 +2369,20 @@ export class NexusSmartAccount extends BaseSmartContractAccount { value: BigInt(tx.value ?? 0n) } }) - return await this.activeExecutorModule?.executeFromExecutor(executions, ownedAccountAddress) + return await this.activeExecutorModule?.executeFromExecutor( + executions, + ownedAccountAddress + ) } const execution = { target: transactions[0].to as Hex, callData: (transactions[0].data ?? "0x") as Hex, value: BigInt(transactions[0].value ?? 0n) } - return await this.activeExecutorModule?.executeFromExecutor(execution, ownedAccountAddress) + return await this.activeExecutorModule?.executeFromExecutor( + execution, + ownedAccountAddress + ) } throw new Error( "Please set an active executor module before running this method." diff --git a/src/modules/base/BaseExecutionModule.ts b/src/modules/base/BaseExecutionModule.ts index 422a5ad01..c4a9a5ff0 100644 --- a/src/modules/base/BaseExecutionModule.ts +++ b/src/modules/base/BaseExecutionModule.ts @@ -1,4 +1,4 @@ -import { Address } from "viem" +import type { Address } from "viem" import type { UserOpReceipt } from "../../bundler/index.js" import { BaseModule } from "../base/BaseModule.js" import type { Execution } from "../utils/Types.js" diff --git a/src/modules/executors/OwnableExecutor.ts b/src/modules/executors/OwnableExecutor.ts index 400790381..bd3b979a8 100644 --- a/src/modules/executors/OwnableExecutor.ts +++ b/src/modules/executors/OwnableExecutor.ts @@ -50,7 +50,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { "function executeBatchOnOwnedAccount(address ownedAccount, bytes callData)" ]), args: [ - accountAddress ?? await this.smartAccount.getAccountAddress(), + accountAddress ?? (await this.smartAccount.getAccountAddress()), encodeAbiParameters( [ { @@ -84,7 +84,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { "function executeOnOwnedAccount(address ownedAccount, bytes callData)" ]), args: [ - accountAddress ?? await this.smartAccount.getAccountAddress(), + accountAddress ?? (await this.smartAccount.getAccountAddress()), encodePacked( ["address", "uint256", "bytes"], [ diff --git a/tests/modules/ownableExecutor.ts/write.test.ts b/tests/modules/ownableExecutor.ts/write.test.ts index 0a8f4f049..b0ede136c 100644 --- a/tests/modules/ownableExecutor.ts/write.test.ts +++ b/tests/modules/ownableExecutor.ts/write.test.ts @@ -1,10 +1,10 @@ import { http, createWalletClient, - encodePacked, encodeFunctionData, + encodePacked, parseAbi, - parseEther, + parseEther } from "viem" import { privateKeyToAccount } from "viem/accounts" import { baseSepolia } from "viem/chains" @@ -14,9 +14,7 @@ import { OWNABLE_EXECUTOR, createOwnableExecutorModule } from "../../../src" -import { - createSmartAccountClient -} from "../../../src/account" +import { createSmartAccountClient } from "../../../src/account" import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" import type { UserOpReceipt } from "../../../src/bundler" import { getConfig } from "../../utils" @@ -74,7 +72,7 @@ describe("Account:Modules:OwnableExecutor", async () => { expect(userOpReceipt.success).toBe(true) expect(isInstalled).toBeTruthy() } - expect(isInstalled).toBeTruthy(); + expect(isInstalled).toBeTruthy() }, 60000) test("Ownable Executor Module should be installed", async () => { @@ -86,7 +84,6 @@ describe("Account:Modules:OwnableExecutor", async () => { }, 60000) test("uninstall Ownable Executor Module", async () => { - let isInstalled = await smartAccount.isModuleInstalled({ moduleType: ModuleType.Execution, moduleAddress: ownableExecutor @@ -102,12 +99,12 @@ describe("Account:Modules:OwnableExecutor", async () => { moduleType: ModuleType.Execution, moduleAddress: ownableExecutor }) - + expect(userOpReceipt.success).toBe(true) expect(isInstalled).toBeFalsy() expect(userOpReceipt).toBeTruthy() } - expect(isInstalled).toBeFalsy(); + expect(isInstalled).toBeFalsy() }, 60000) test("should add an owner to the module", async () => { @@ -116,7 +113,7 @@ describe("Account:Modules:OwnableExecutor", async () => { moduleAddress: ownableExecutor }) - if(!isInstalled) { + if (!isInstalled) { await smartAccount.installModule({ moduleAddress: OWNABLE_EXECUTOR, moduleType: ModuleType.Execution, @@ -154,34 +151,30 @@ describe("Account:Modules:OwnableExecutor", async () => { }, 60000) test("added owner executes token transfer on Smart Account", async () => { - const valueToTransfer = parseEther("0.1"); - const recipient = accountTwo.address; + const valueToTransfer = parseEther("0.1") + const recipient = accountTwo.address const transferEncodedCall = encodeFunctionData({ abi: parseAbi(["function transfer(address to, uint256 value)"]), functionName: "transfer", args: [recipient, valueToTransfer] }) - await ownableExecutorModule.addOwner( - accountTwo.address - ) + await ownableExecutorModule.addOwner(accountTwo.address) const owners = await ownableExecutorModule.getOwners() - const isOwner = owners.includes(accountTwo.address); - expect(isOwner).toBeTruthy(); + const isOwner = owners.includes(accountTwo.address) + expect(isOwner).toBeTruthy() const calldata = encodeFunctionData({ - abi: parseAbi(["function executeOnOwnedAccount(address ownedAccount, bytes callData)"]), + abi: parseAbi([ + "function executeOnOwnedAccount(address ownedAccount, bytes callData)" + ]), functionName: "executeOnOwnedAccount", args: [ await smartAccount.getAddress(), encodePacked( ["address", "uint256", "bytes"], - [ - token, - BigInt(Number(0)), - transferEncodedCall - ] + [token, BigInt(Number(0)), transferEncodedCall] ) ] }) @@ -193,7 +186,7 @@ describe("Account:Modules:OwnableExecutor", async () => { value: 0n }) - expect(txHash).toBeTruthy(); + expect(txHash).toBeTruthy() }, 60000) }) }) From e102c3de2ab2d99cb171fde92d8398b3921c7477 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Thu, 18 Jul 2024 15:09:21 +0200 Subject: [PATCH 1218/1247] feat: nexus enable mode (#543) * feat: refactoring * feat: enableMode implementation * refactor: commented tests * fix: fix broken tests * refactor: fix linting * refactor: removed hardcoded module params from makeInstallDataAndHash --------- Co-authored-by: GabiDev <gv@popoo.io> --- src/account/BaseSmartContractAccount.ts | 16 +- src/account/NexusSmartAccount.ts | 189 ++-- src/account/utils/Constants.ts | 12 +- src/account/utils/Types.ts | 7 +- src/account/utils/Utils.ts | 82 +- src/modules/base/BaseModule.ts | 34 + tests/account/read.test.ts | 1104 ++++++++++++----------- tests/account/write.test.ts | 230 +++-- 8 files changed, 972 insertions(+), 702 deletions(-) diff --git a/src/account/BaseSmartContractAccount.ts b/src/account/BaseSmartContractAccount.ts index 5f0de9ad6..603f56f83 100644 --- a/src/account/BaseSmartContractAccount.ts +++ b/src/account/BaseSmartContractAccount.ts @@ -11,7 +11,11 @@ import { } from "viem" import { EntryPointAbi } from "./abi/EntryPointAbi.js" import { Logger, type SmartAccountSigner, getChain } from "./index.js" -import { DEFAULT_ENTRYPOINT_ADDRESS } from "./utils/Constants.js" +import { + DEFAULT_ENTRYPOINT_ADDRESS, + type MODE_MODULE_ENABLE, + type MODE_VALIDATION +} from "./utils/Constants.js" import type { BasSmartContractAccountProps, BatchUserOperationCallData, @@ -198,13 +202,9 @@ export abstract class BaseSmartContractAccount< //#endregion optional-methods // Extra implementations - async getNonce(): Promise<bigint> { - if (!(await this.isAccountDeployed())) { - return 0n - } - const address = await this.getAddress() - return this.entryPoint.read.getNonce([address, BigInt(0)]) - } + abstract getNonce( + validationMode?: typeof MODE_VALIDATION | typeof MODE_MODULE_ENABLE + ): Promise<bigint> async getInitCode(): Promise<Hex> { if (this.deploymentState === DeploymentState.DEPLOYED) { diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index a485c5717..2a4b6ac5f 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -1,4 +1,4 @@ -import { ethers, zeroPadBytes } from "ethers" +import { ethers } from "ethers" import { http, type Address, @@ -32,14 +32,15 @@ import { import type { IBundler } from "../bundler/interfaces/IBundler.js" import { EXECUTE_BATCH, EXECUTE_SINGLE } from "../bundler/utils/Constants.js" import type { BaseExecutionModule } from "../modules/base/BaseExecutionModule.js" -import type { BaseModule } from "../modules/base/BaseModule.js" import { BaseValidationModule } from "../modules/base/BaseValidationModule.js" import { type Execution, type ModuleInfo, type SendUserOpParams, - createK1ValidatorModule + createK1ValidatorModule, + createValidationModule } from "../modules/index.js" +import type { K1ValidatorModule } from "../modules/validators/K1ValidatorModule.js" import { type FeeQuotesOrDataDto, type FeeQuotesOrDataResponse, @@ -60,6 +61,7 @@ import { convertSigner, getChain } from "./index.js" +import { type MODE_MODULE_ENABLE, MODE_VALIDATION } from "./utils/Constants.js" import { ADDRESS_ZERO, DEFAULT_BICONOMY_FACTORY_ADDRESS, @@ -124,7 +126,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { activeValidationModule!: BaseValidationModule installedExecutors: BaseExecutionModule[] = [] - activeExecutorModule?: BaseExecutionModule + activeExecutionModule?: BaseExecutionModule private constructor( readonly nexusSmartAccountConfig: NexusSmartAccountConfigConstructorProps @@ -271,6 +273,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { } resolvedSmartAccountSigner = signerResult.signer } + // @note Skipped this check untill we have our Bundler ready for EP V7 // if (!chainId) { // Get it from bundler // if (nexusSmartAccountConfig.bundlerUrl) { @@ -301,12 +304,12 @@ export class NexusSmartAccount extends BaseSmartContractAccount { let defaultValidationModule = nexusSmartAccountConfig.defaultValidationModule - // Note: If no module is provided, we will use ECDSA_OWNERSHIP as default + // @note If no module is provided, we will use K1_VALIDATOR as default if (!defaultValidationModule) { const newModule = await createK1ValidatorModule( resolvedSmartAccountSigner ) - defaultValidationModule = newModule as BaseValidationModule + defaultValidationModule = newModule as K1ValidatorModule } const activeValidationModule = nexusSmartAccountConfig?.activeValidationModule ?? defaultValidationModule @@ -327,6 +330,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { rpcUrl } + // @note Skipped this check untill we have our Bundler ready for EP V7 // We check if chain ids match (skip this if chainId is passed by in the config) // This check is at the end of the function for cases when the signer is not passed in the config but a validation modules is and we get the signer from the validation module in this case // if (!nexusSmartAccountConfig.chainId) { @@ -659,6 +663,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { params?.validationModule ?? this.defaultValidationModule const index = params?.index ?? this.index + // @note Skipped this check untill we have our implementation of V2 to V3 (Nexus) upgrade // const maxIndexForScan = params?.maxIndexForScan ?? this.maxIndexForScan // // Review: default behavior // const scanForUpgradedAccountsFromV1 = @@ -698,6 +703,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { try { // TODO: Improve this by computing address off-chain instead of making rpc call + // https://viem.sh/docs/utilities/getContractAddress#opcode-optional const counterFactualAddress = await this.publicClient.readContract({ address: this.factoryAddress, abi: parseAbi([ @@ -738,20 +744,58 @@ export class NexusSmartAccount extends BaseSmartContractAccount { return true } + /** + * Sets the active validation module on the NexusSmartAccount instance + * @param validationModule - BaseValidationModule instance + * + * @returns Promise<BaseValidationModule> - The BaseValidationModule instance. + */ setActiveValidationModule( validationModule: BaseValidationModule - ): NexusSmartAccount { + ): BaseValidationModule { if (validationModule instanceof BaseValidationModule) { this.activeValidationModule = validationModule } - return this + return this.activeValidationModule } - async setActiveExecutorModule( + /** + * Sets the active validation module on the NexusSmartAccount instance + * @param validationModuleAddress - Address of the validation module + * @param data - Initialization data for the validation module + * + * @returns Promise<BaseValidationModule> - The BaseValidationModule instance. + */ + async setActiveValidationModuleByAddress({ + validationModuleAddress, + data + }: { + validationModuleAddress: Address + data: Hex + }): Promise<BaseValidationModule> { + if (validationModuleAddress) { + this.activeValidationModule = await createValidationModule( + this.signer, + validationModuleAddress, + data + ) + return this.activeValidationModule + } + throw new Error("Validation module address is required") + } + + /** + * Sets the active executor module on the NexusSmartAccount instance + * @param executorModule - Address of the executor module + * @param data - Initialization data for the executor module + * + * @returns Promise<BaseExecutionModule> - The BaseExecutionModule instance. + */ + setactiveExecutionModule( executorModule: BaseExecutionModule - ): Promise<BaseModule> { - this.activeExecutorModule = executorModule - return executorModule + ): BaseExecutionModule { + this.activeExecutionModule = executorModule + return this.activeExecutionModule } setDefaultValidationModule( @@ -1292,7 +1336,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { const { callGasLimit, verificationGasLimit, preVerificationGas } = await this.bundler.estimateUserOpGas(userOp, stateOverrideSet) - // COMMENTED because pimlico bundler does not estimate maxFeePerGas and maxPriorityFeePerGas + // @note COMMENTED because pimlico bundler does not estimate maxFeePerGas and maxPriorityFeePerGas // else { // finalUserOp.maxFeePerGas = // toHex(Number(maxFeePerGas)) ?? userOp.maxFeePerGas @@ -1308,19 +1352,14 @@ export class NexusSmartAccount extends BaseSmartContractAccount { return finalUserOp } - override async getNonce(): Promise<bigint> { + override async getNonce( + validationMode?: typeof MODE_VALIDATION | typeof MODE_MODULE_ENABLE + ): Promise<bigint> { try { - const address = await this.getAddress() - return await this.entryPoint.read.getNonce([ - address, - BigInt( - zeroPadBytes( - this.activeValidationModule.getAddress() ?? - this.defaultValidationModule.getAddress(), - 24 - ) - ) // TODO: Use viem instead of ethers - ]) + const vm = this.activeValidationModule.moduleAddress + const key = concat(["0x000000", validationMode ?? MODE_VALIDATION, vm]) + const accountAddress = await this.getAddress() + return await this.entryPoint.read.getNonce([accountAddress, BigInt(key)]) } catch (e) { return BigInt(0) } @@ -1334,7 +1373,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { if (nonceOptions?.nonceOverride) { nonce = BigInt(nonceOptions?.nonceOverride) } else { - nonce = await this.getNonce() + nonce = await this.getNonce(nonceOptions?.validationMode) } } catch (error) { // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account @@ -2023,25 +2062,25 @@ export class NexusSmartAccount extends BaseSmartContractAccount { }) } - async enableModule(moduleAddress: Hex): Promise<UserOpResponse> { - const tx: Transaction = await this.getEnableModuleData(moduleAddress) - const partialUserOp = await this.buildUserOp([tx]) - return this.sendUserOp(partialUserOp) - } + // async enableModule(moduleAddress: Hex): Promise<UserOpResponse> { + // const tx: Transaction = await this.getEnableModuleData(moduleAddress) + // const partialUserOp = await this.buildUserOp([tx]) + // return this.sendUserOp(partialUserOp) + // } - async getEnableModuleData(moduleAddress: Hex): Promise<Transaction> { - const callData = encodeFunctionData({ - abi: NexusAccountAbi, - functionName: "enableModule", - args: [moduleAddress] - }) - const tx: Transaction = { - to: await this.getAddress(), - value: "0x00", - data: callData - } - return tx - } + // async getEnableModuleData(moduleAddress: Hex, value?: bigint): Promise<Transaction> { + // const callData = encodeFunctionData({ + // abi: NexusAccountAbi, + // functionName: "enableModule", + // args: [moduleAddress] + // }) + // const tx: Transaction = { + // to: await this.getAddress(), + // value: value ?? 0n, + // data: callData + // } + // return tx + // } async getSetupAndEnableModuleData( moduleAddress: Hex, @@ -2060,34 +2099,34 @@ export class NexusSmartAccount extends BaseSmartContractAccount { return tx } - async disableModule( - prevModule: Hex, - moduleAddress: Hex - ): Promise<UserOpResponse> { - const tx: Transaction = await this.getDisableModuleData( - prevModule, - moduleAddress - ) - const partialUserOp = await this.buildUserOp([tx]) - return this.sendUserOp(partialUserOp) - } + // async disableModule( + // prevModule: Hex, + // moduleAddress: Hex + // ): Promise<UserOpResponse> { + // const tx: Transaction = await this.getDisableModuleData( + // prevModule, + // moduleAddress + // ) + // const partialUserOp = await this.buildUserOp([tx]) + // return this.sendUserOp(partialUserOp) + // } - async getDisableModuleData( - prevModule: Hex, - moduleAddress: Hex - ): Promise<Transaction> { - const callData = encodeFunctionData({ - abi: NexusAccountAbi, - functionName: "disableModule", - args: [prevModule, moduleAddress] - }) - const tx: Transaction = { - to: await this.getAddress(), - value: "0x00", - data: callData - } - return tx - } + // async getDisableModuleData( + // prevModule: Hex, + // moduleAddress: Hex + // ): Promise<Transaction> { + // const callData = encodeFunctionData({ + // abi: NexusAccountAbi, + // functionName: "disableModule", + // args: [prevModule, moduleAddress] + // }) + // const tx: Transaction = { + // to: await this.getAddress(), + // value: "0x00", + // data: callData + // } + // return tx + // } async isModuleInstalled({ moduleType, @@ -2125,7 +2164,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { // const receipt = await response.wait(); // if(receipt.success) { // this.installedExecutors.push(ownableExecutor); - // this.activeExecutorModule = ownableExecutor; + // this.activeExecutionModule = ownableExecutor; // } // return receipt; // } @@ -2359,7 +2398,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { ownedAccountAddress?: Address // buildUseropDto?: BuildUserOpOptions ): Promise<UserOpReceipt> { - if (this.activeExecutorModule) { + if (this.activeExecutionModule) { if (transactions.length > 1) { const executions: { target: Hex; value: bigint; callData: Hex }[] = transactions.map((tx) => { @@ -2369,7 +2408,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { value: BigInt(tx.value ?? 0n) } }) - return await this.activeExecutorModule?.executeFromExecutor( + return await this.activeExecutionModule?.executeFromExecutor( executions, ownedAccountAddress ) @@ -2379,7 +2418,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { callData: (transactions[0].data ?? "0x") as Hex, value: BigInt(transactions[0].value ?? 0n) } - return await this.activeExecutorModule?.executeFromExecutor( + return await this.activeExecutionModule.executeFromExecutor( execution, ownedAccountAddress ) diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index fffee900d..7712d679b 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -1,4 +1,4 @@ -import type { Hex } from "viem" +import { type Hex, keccak256, toHex } from "viem" import type { BiconomyImplementations, BiconomyImplementationsByVersion, @@ -123,3 +123,13 @@ export const MODE_PAYLOAD = "0x00000000000000000000000000000000000000000000" // export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f" export const SENTINEL_ADDRESS = "0x0000000000000000000000000000000000000001" + +export const MODE_VALIDATION = "0x00" as Hex +export const MODE_MODULE_ENABLE = "0x01" as Hex + +export const MODULE_ENABLE_MODE_TYPE_HASH = keccak256( + toHex("ModuleEnableMode(address module, bytes32 initDataHash)") +) +export const MOCK_MULTI_MODULE_ADDRESS = + "0x9C992f91E7Cd4697B81E137007f446E826b8378b" +export const MODULE_TYPE_MULTI = 0 diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 9fa7b36eb..7a06ceae7 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -22,6 +22,7 @@ import type { SmartAccountData, SponsorUserOperationDto } from "../../paymaster" +import type { MODE_MODULE_ENABLE, MODE_VALIDATION } from "../utils/Constants" export type EntryPointAddresses = Record<string, string> export type BiconomyFactories = Record<string, string> @@ -210,6 +211,8 @@ export type BuildUserOpOptions = { export type NonceOptions = { /** nonceKey: The key to use for nonce */ nonceKey?: bigint + /** validationMode: Mode of the validation module */ + validationMode?: typeof MODE_VALIDATION | typeof MODE_MODULE_ENABLE /** nonceOverride: The nonce to use for the transaction */ nonceOverride?: bigint } @@ -510,7 +513,9 @@ export interface ISmartContractAccount< /** * @returns the nonce of the account */ - getNonce(): Promise<bigint> + getNonce( + validationMode?: typeof MODE_VALIDATION | typeof MODE_MODULE_ENABLE + ): Promise<bigint> /** * If your account handles 1271 signatures of personal_sign differently diff --git a/src/account/utils/Utils.ts b/src/account/utils/Utils.ts index 937c423b3..769ac38fc 100644 --- a/src/account/utils/Utils.ts +++ b/src/account/utils/Utils.ts @@ -4,13 +4,22 @@ import { type Hex, concat, encodeAbiParameters, + hexToBytes, keccak256, pad, parseAbiParameters, + stringToBytes, + toBytes, toHex } from "viem" import type { UserOperationStruct } from "../../account" -import { type SupportedSigner, convertSigner } from "../../account" +import { + MOCK_MULTI_MODULE_ADDRESS, + MODULE_ENABLE_MODE_TYPE_HASH, + type ModuleType, + type SupportedSigner, + convertSigner +} from "../../account" import { extractChainIdFromBundlerUrl } from "../../bundler" import { extractChainIdFromPaymasterUrl } from "../../bundler" import type { NexusSmartAccountConfig } from "./Types.js" @@ -192,3 +201,74 @@ export function convertToFactor(percentage: number | undefined): number { } return 1 } + +export function makeInstallDataAndHash( + accountOwner: Address, + modules: { moduleType: ModuleType; config: Hex }[] +): [string, string] { + const types = modules.map((module) => BigInt(module.moduleType)) + const initDatas = modules.map((module) => + toHex(concat([toBytes(module.moduleType), module.config])) + ) + + const multiInstallData = encodeAbiParameters( + [{ type: "uint256[]" }, { type: "bytes[]" }], + [types, initDatas] + ) + + const structHash = keccak256( + encodeAbiParameters( + [{ type: "bytes32" }, { type: "address" }, { type: "bytes32" }], + [ + MODULE_ENABLE_MODE_TYPE_HASH, + MOCK_MULTI_MODULE_ADDRESS, + keccak256(multiInstallData) + ] + ) + ) + + const hashToSign = _hashTypedData( + structHash, + "Nexus", + "1.0.0-beta", + accountOwner + ) + + return [multiInstallData, hashToSign] +} + +export function _hashTypedData( + structHash: Hex, + name: string, + version: string, + verifyingContract: Address +): string { + const DOMAIN_SEPARATOR = keccak256( + encodeAbiParameters( + [ + { type: "bytes32" }, + { type: "bytes32" }, + { type: "bytes32" }, + { type: "address" } + ], + [ + keccak256( + stringToBytes( + "EIP712Domain(string name,string version,address verifyingContract)" + ) + ), + keccak256(stringToBytes(name)), + keccak256(stringToBytes(version)), + verifyingContract + ] + ) + ) + + return keccak256( + concat([ + stringToBytes("\x19\x01"), + hexToBytes(DOMAIN_SEPARATOR), + hexToBytes(structHash) + ]) + ) +} diff --git a/src/modules/base/BaseModule.ts b/src/modules/base/BaseModule.ts index e6df47db7..5422257b7 100644 --- a/src/modules/base/BaseModule.ts +++ b/src/modules/base/BaseModule.ts @@ -48,6 +48,40 @@ export abstract class BaseModule { return uninstallModuleData } + /** + * Determines if the module matches a specific module type. + * @dev Should return true if the module corresponds to the type ID, false otherwise. + * @param moduleTypeId Numeric ID of the module type as per ERC-7579 specifications. + * @returns True if the module is of the specified type, false otherwise. + */ + public isModuleType(moduleTypeId: bigint): Hex { + const isModuleTypeData = encodeFunctionData({ + abi: parseAbi([ + "function isModuleType(uint256 moduleTypeId) external view returns (bool)" + ]), + functionName: "isModuleType", + args: [moduleTypeId] + }) + return isModuleTypeData + } + + /** + * Checks if the module has been initialized for a specific smart account. + * @dev Returns true if initialized, false otherwise. + * @param smartAccount Address of the smart account to check for initialization status. + * @returns True if the module is initialized for the given smart account, false otherwise. + */ + public isInitialized(smartAccount: Address): Hex { + const isInitializedeData = encodeFunctionData({ + abi: parseAbi([ + "function isInitialized(address smartAccount) external view returns (bool)" + ]), + functionName: "isInitialized", + args: [smartAccount] + }) + return isInitializedeData + } + public getAddress(): Hex { return this.moduleAddress } diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index bc1a7d12e..e481d3aba 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -22,7 +22,8 @@ import { NATIVE_TOKEN_ALIAS, type NexusSmartAccountConfig, compareChainIds, - createSmartAccountClient + createSmartAccountClient, + makeInstallDataAndHash } from "../../src/account" import { getChain } from "../../src/account" import type { NexusSmartAccount } from "../../src/account/NexusSmartAccount" @@ -84,70 +85,70 @@ describe("Account:Read", () => { ) }) - test.concurrent( - "should estimate gas for minting an NFT", - async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const results = await Promise.all([ - smartAccount.getGasEstimate([transaction]), - smartAccount.getGasEstimate([transaction, transaction]) - // smartAccount.getGasEstimate([transaction], { - // paymasterServiceData: { - // mode: PaymasterMode.SPONSORED - // } - // }), - // smartAccount.getGasEstimate([transaction, transaction], { - // paymasterServiceData: { - // mode: PaymasterMode.SPONSORED - // } - // }), - // smartAccount.getGasEstimate([transaction], { - // paymasterServiceData: { - // mode: PaymasterMode.ERC20, - // preferredToken: token - // } - // }), - // await smartAccount.getGasEstimate([transaction, transaction], { - // paymasterServiceData: { - // mode: PaymasterMode.ERC20, - // preferredToken: token - // } - // }) - ]) - - const increasingGasExpenditure = results.every( - (result, i) => result > (results[i - 1] ?? 0) - ) + // test.concurrent( + // "should estimate gas for minting an NFT", + // async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall + // } + // const results = await Promise.all([ + // smartAccount.getGasEstimate([transaction]), + // smartAccount.getGasEstimate([transaction, transaction]) + // // smartAccount.getGasEstimate([transaction], { + // // paymasterServiceData: { + // // mode: PaymasterMode.SPONSORED + // // } + // // }), + // // smartAccount.getGasEstimate([transaction, transaction], { + // // paymasterServiceData: { + // // mode: PaymasterMode.SPONSORED + // // } + // // }), + // // smartAccount.getGasEstimate([transaction], { + // // paymasterServiceData: { + // // mode: PaymasterMode.ERC20, + // // preferredToken: token + // // } + // // }), + // // await smartAccount.getGasEstimate([transaction, transaction], { + // // paymasterServiceData: { + // // mode: PaymasterMode.ERC20, + // // preferredToken: token + // // } + // // }) + // ]) + + // const increasingGasExpenditure = results.every( + // (result, i) => result > (results[i - 1] ?? 0) + // ) - expect(increasingGasExpenditure).toBeTruthy() - }, - 60000 - ) + // expect(increasingGasExpenditure).toBeTruthy() + // }, + // 60000 + // ) - test.concurrent( - "should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", - async () => { - const account = privateKeyToAccount(`0x${privateKey}`) + // test.concurrent( + // "should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", + // async () => { + // const account = privateKeyToAccount(`0x${privateKey}`) - const createSmartAccount = createSmartAccountClient({ - signer: account, - bundlerUrl - }) + // const createSmartAccount = createSmartAccountClient({ + // signer: account, + // bundlerUrl + // }) - await expect(createSmartAccount).rejects.toThrow( - ERROR_MESSAGES.MISSING_RPC_URL - ) - }, - 50000 - ) + // await expect(createSmartAccount).rejects.toThrow( + // ERROR_MESSAGES.MISSING_RPC_URL + // ) + // }, + // 50000 + // ) // test.concurrent( // "should get all modules", @@ -159,14 +160,23 @@ describe("Account:Read", () => { // 30000 // ) + // test.concurrent( + // "should check if module is enabled on the smart account", + // async () => { + // const isEnabled = await smartAccount.isModuleInstalled({ + // moduleType: ModuleType.Validation, + // moduleAddress: K1_VALIDATOR + // }) + // expect(isEnabled).toBeTruthy() + // }, + // 30000 + // ) + test.concurrent( - "should check if module is enabled on the smart account", + "enable mode", async () => { - const isEnabled = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Validation, - moduleAddress: K1_VALIDATOR - }) - expect(isEnabled).toBeTruthy() + const result = makeInstallDataAndHash(walletClient.account.address) + console.log(result, "result") }, 30000 ) @@ -200,555 +210,555 @@ describe("Account:Read", () => { // 30000 // ) - test.concurrent( - "should create a smartAccountClient from an ethers signer", - async () => { - const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) - const ethersSigner = new Wallet(privateKey, ethersProvider) - - const smartAccount = await createSmartAccountClient({ - signer: ethersSigner, - bundlerUrl, - rpcUrl: chain.rpcUrls.default.http[0] - }) - - const sig = await smartAccount.signMessage("test") - console.log(sig, "Signature") - - const address = await smartAccount.getAccountAddress() - expect(address).toBeTruthy() - } - ) - - test.concurrent( - "should pickup the rpcUrl from viem wallet and ethers", - async () => { - const newRpcUrl = "http://localhost:8545" - const defaultRpcUrl = chain.rpcUrls.default.http[0] //http://127.0.0.1:8545" - - const ethersProvider = new JsonRpcProvider(newRpcUrl) - const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider) + // test.concurrent( + // "should create a smartAccountClient from an ethers signer", + // async () => { + // const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) + // const ethersSigner = new Wallet(privateKey, ethersProvider) - const originalEthersProvider = new JsonRpcProvider( - chain.rpcUrls.default.http[0] - ) - const ethersSigner = new Wallet(privateKey, originalEthersProvider) - - const accountOne = privateKeyToAccount(`0x${privateKey}`) - const walletClientWithNewRpcUrl = createWalletClient({ - account: accountOne, - chain, - transport: http(newRpcUrl) - }) - const [ - smartAccountFromEthersWithNewRpc, - smartAccountFromViemWithNewRpc, - smartAccountFromEthersWithOldRpc, - smartAccountFromViemWithOldRpc - ] = await Promise.all([ - createSmartAccountClient({ - chainId, - signer: ethersSignerWithNewRpcUrl, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: newRpcUrl - }), - createSmartAccountClient({ - chainId, - signer: walletClientWithNewRpcUrl, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: newRpcUrl - }), - createSmartAccountClient({ - chainId, - signer: ethersSigner, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: chain.rpcUrls.default.http[0] - }), - createSmartAccountClient({ - chainId, - signer: walletClient, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: chain.rpcUrls.default.http[0] - }) - ]) - - const [ - smartAccountFromEthersWithNewRpcAddress, - smartAccountFromViemWithNewRpcAddress, - smartAccountFromEthersWithOldRpcAddress, - smartAccountFromViemWithOldRpcAddress - ] = await Promise.all([ - smartAccountFromEthersWithNewRpc.getAccountAddress(), - smartAccountFromViemWithNewRpc.getAccountAddress(), - smartAccountFromEthersWithOldRpc.getAccountAddress(), - smartAccountFromViemWithOldRpc.getAccountAddress() - ]) - - expect( - [ - smartAccountFromEthersWithNewRpcAddress, - smartAccountFromViemWithNewRpcAddress, - smartAccountFromEthersWithOldRpcAddress, - smartAccountFromViemWithOldRpcAddress - ].every(Boolean) - ).toBeTruthy() - - expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe( - newRpcUrl - ) - expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe( - newRpcUrl - ) - expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe( - defaultRpcUrl - ) - expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe( - defaultRpcUrl - ) - } - ) + // const smartAccount = await createSmartAccountClient({ + // signer: ethersSigner, + // bundlerUrl, + // rpcUrl: chain.rpcUrls.default.http[0] + // }) - test.concurrent( - "should read estimated user op gas values", - async () => { - const tx = { - to: recipient, - data: "0x" - } - - const userOp = await smartAccount.buildUserOp([tx]) - - const estimatedGas = await smartAccount.estimateUserOpGas(userOp) - console.log(estimatedGas, "estimatedGas") - expect(estimatedGas.maxFeePerGas).toBeTruthy() - expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() - expect(estimatedGas.verificationGasLimit).toBeTruthy() - expect(estimatedGas.callGasLimit).toBeTruthy() - expect(estimatedGas.preVerificationGas).toBeTruthy() - }, - 30000 - ) + // const sig = await smartAccount.signMessage("test") + // console.log(sig, "Signature") - test.concurrent("should have an active validation module", async () => { - const module = smartAccount.activeValidationModule - expect(module).toBeTruthy() - }) + // const address = await smartAccount.getAccountAddress() + // expect(address).toBeTruthy() + // } + // ) // test.concurrent( - // "should create a smart account with paymaster by creating instance", + // "should pickup the rpcUrl from viem wallet and ethers", // async () => { - // const paymaster = new Paymaster({ paymasterUrl }) + // const newRpcUrl = "http://localhost:8545" + // const defaultRpcUrl = chain.rpcUrls.default.http[0] //http://127.0.0.1:8545" - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl, - // paymaster + // const ethersProvider = new JsonRpcProvider(newRpcUrl) + // const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider) + + // const originalEthersProvider = new JsonRpcProvider( + // chain.rpcUrls.default.http[0] + // ) + // const ethersSigner = new Wallet(privateKey, originalEthersProvider) + + // const accountOne = privateKeyToAccount(`0x${privateKey}`) + // const walletClientWithNewRpcUrl = createWalletClient({ + // account: accountOne, + // chain, + // transport: http(newRpcUrl) // }) - // expect(smartAccount.paymaster).not.toBeNull() - // expect(smartAccount.paymaster).not.toBeUndefined() + // const [ + // smartAccountFromEthersWithNewRpc, + // smartAccountFromViemWithNewRpc, + // smartAccountFromEthersWithOldRpc, + // smartAccountFromViemWithOldRpc + // ] = await Promise.all([ + // createSmartAccountClient({ + // chainId, + // signer: ethersSignerWithNewRpcUrl, + // bundlerUrl: getBundlerUrl(1337), + // rpcUrl: newRpcUrl + // }), + // createSmartAccountClient({ + // chainId, + // signer: walletClientWithNewRpcUrl, + // bundlerUrl: getBundlerUrl(1337), + // rpcUrl: newRpcUrl + // }), + // createSmartAccountClient({ + // chainId, + // signer: ethersSigner, + // bundlerUrl: getBundlerUrl(1337), + // rpcUrl: chain.rpcUrls.default.http[0] + // }), + // createSmartAccountClient({ + // chainId, + // signer: walletClient, + // bundlerUrl: getBundlerUrl(1337), + // rpcUrl: chain.rpcUrls.default.http[0] + // }) + // ]) + + // const [ + // smartAccountFromEthersWithNewRpcAddress, + // smartAccountFromViemWithNewRpcAddress, + // smartAccountFromEthersWithOldRpcAddress, + // smartAccountFromViemWithOldRpcAddress + // ] = await Promise.all([ + // smartAccountFromEthersWithNewRpc.getAccountAddress(), + // smartAccountFromViemWithNewRpc.getAccountAddress(), + // smartAccountFromEthersWithOldRpc.getAccountAddress(), + // smartAccountFromViemWithOldRpc.getAccountAddress() + // ]) + + // expect( + // [ + // smartAccountFromEthersWithNewRpcAddress, + // smartAccountFromViemWithNewRpcAddress, + // smartAccountFromEthersWithOldRpcAddress, + // smartAccountFromViemWithOldRpcAddress + // ].every(Boolean) + // ).toBeTruthy() + + // expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe( + // newRpcUrl + // ) + // expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe( + // newRpcUrl + // ) + // expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe( + // defaultRpcUrl + // ) + // expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe( + // defaultRpcUrl + // ) // } // ) - test.concurrent( - "should fail to create a smartAccountClient from a walletClient without a chainId", - async () => { - const account = privateKeyToAccount(generatePrivateKey()) - const viemWalletClientNoChainId = createWalletClient({ - account, - transport: http(chain.rpcUrls.default.http[0]) - }) - - expect( - await expect( - createSmartAccountClient({ - signer: viemWalletClientNoChainId, - bundlerUrl, - rpcUrl: chain.rpcUrls.default.http[0] - }) - ).rejects.toThrow("Cannot consume a viem wallet without a chainId") - ) - } - ) - test.concurrent( - "should fail to create a smartAccountClient from a walletClient without an account", - async () => { - const viemWalletNoAccount = createWalletClient({ - transport: http(chain.rpcUrls.default.http[0]) - }) + // test.concurrent( + // "should read estimated user op gas values", + // async () => { + // const tx = { + // to: recipient, + // data: "0x" + // } - expect(async () => - createSmartAccountClient({ - signer: viemWalletNoAccount, - bundlerUrl, - rpcUrl: chain.rpcUrls.default.http[0] - }) - ).rejects.toThrow("Cannot consume a viem wallet without an account") - } - ) + // const userOp = await smartAccount.buildUserOp([tx]) - test.concurrent("should have account addresses", async () => { - const addresses = await Promise.all([ - sender, - smartAccount.getAddress(), - recipient, - smartAccountTwo.getAddress() - ]) - /* - * addresses: [ - * '0xFA66E705cf2582cF56528386Bb9dFCA119767262', // sender - * '0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC', // smartAccountSender - * '0x3079B249DFDE4692D7844aA261f8cf7D927A0DA5', // recipient - * '0x5F141ee1390D4c9d033a00CB940E509A4811a5E0' // smartAccountRecipient - * ] - */ - expect(addresses.every(Boolean)).toBeTruthy() - }) + // const estimatedGas = await smartAccount.estimateUserOpGas(userOp) + // console.log(estimatedGas, "estimatedGas") + // expect(estimatedGas.maxFeePerGas).toBeTruthy() + // expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() + // expect(estimatedGas.verificationGasLimit).toBeTruthy() + // expect(estimatedGas.callGasLimit).toBeTruthy() + // expect(estimatedGas.preVerificationGas).toBeTruthy() + // }, + // 30000 + // ) + // test.concurrent("should have an active validation module", async () => { + // const module = smartAccount.activeValidationModule + // expect(module).toBeTruthy() + // }) + + // // test.concurrent( + // // "should create a smart account with paymaster by creating instance", + // // async () => { + // // const paymaster = new Paymaster({ paymasterUrl }) + + // // const smartAccount = await createSmartAccountClient({ + // // signer: walletClient, + // // bundlerUrl, + // // paymaster + // // }) + // // expect(smartAccount.paymaster).not.toBeNull() + // // expect(smartAccount.paymaster).not.toBeUndefined() + // // } + // // ) // test.concurrent( - // "should create a smart account with paymaster with an api key", + // "should fail to create a smartAccountClient from a walletClient without a chainId", // async () => { - // const paymaster = smartAccount.paymaster - // expect(paymaster).not.toBeNull() - // expect(paymaster).not.toBeUndefined() + // const account = privateKeyToAccount(generatePrivateKey()) + // const viemWalletClientNoChainId = createWalletClient({ + // account, + // transport: http(chain.rpcUrls.default.http[0]) + // }) + + // expect( + // await expect( + // createSmartAccountClient({ + // signer: viemWalletClientNoChainId, + // bundlerUrl, + // rpcUrl: chain.rpcUrls.default.http[0] + // }) + // ).rejects.toThrow("Cannot consume a viem wallet without a chainId") + // ) // } // ) - test.concurrent("should not throw and error, chain ids match", async () => { - const mockBundlerUrl = - "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" - const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - - const config: NexusSmartAccountConfig = { - signer: walletClient, - bundlerUrl: mockBundlerUrl, - paymasterUrl: mockPaymasterUrl - } - - await expect( - compareChainIds(walletClient, config, false) - ).resolves.not.toThrow() - }) + // test.concurrent( + // "should fail to create a smartAccountClient from a walletClient without an account", + // async () => { + // const viemWalletNoAccount = createWalletClient({ + // transport: http(chain.rpcUrls.default.http[0]) + // }) - test.concurrent( - "should throw and error, bundlerUrl chain id and paymaster url chain id does not match with validation module", - async () => { - const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + // expect(async () => + // createSmartAccountClient({ + // signer: viemWalletNoAccount, + // bundlerUrl, + // rpcUrl: chain.rpcUrls.default.http[0] + // }) + // ).rejects.toThrow("Cannot consume a viem wallet without an account") + // } + // ) - const k1ValidationModule = await createK1ValidatorModule( - smartAccount.getSigner() - ) + // test.concurrent("should have account addresses", async () => { + // const addresses = await Promise.all([ + // sender, + // smartAccount.getAddress(), + // recipient, + // smartAccountTwo.getAddress() + // ]) + // /* + // * addresses: [ + // * '0xFA66E705cf2582cF56528386Bb9dFCA119767262', // sender + // * '0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC', // smartAccountSender + // * '0x3079B249DFDE4692D7844aA261f8cf7D927A0DA5', // recipient + // * '0x5F141ee1390D4c9d033a00CB940E509A4811a5E0' // smartAccountRecipient + // * ] + // */ + // expect(addresses.every(Boolean)).toBeTruthy() + // }) - const config: NexusSmartAccountConfig = { - defaultValidationModule: k1ValidationModule, - activeValidationModule: k1ValidationModule, - bundlerUrl, - paymasterUrl: mockPaymasterUrl - } - - await expect( - compareChainIds(walletClient, config, false) - ).rejects.toThrow() - } - ) + // // test.concurrent( + // // "should create a smart account with paymaster with an api key", + // // async () => { + // // const paymaster = smartAccount.paymaster + // // expect(paymaster).not.toBeNull() + // // expect(paymaster).not.toBeUndefined() + // // } + // // ) + + // test.concurrent("should not throw and error, chain ids match", async () => { + // const mockBundlerUrl = + // "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" + // const mockPaymasterUrl = + // "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + + // const config: NexusSmartAccountConfig = { + // signer: walletClient, + // bundlerUrl: mockBundlerUrl, + // paymasterUrl: mockPaymasterUrl + // } - test.concurrent( - "should throw and error, signer has chain id (56) and paymasterUrl has chain id (80002)", - async () => { - const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/80002/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - - const walletClientBsc = createWalletClient({ - account: walletClient.account, - chain: bsc, - transport: http(bsc.rpcUrls.default.http[0]) - }) - - const config: NexusSmartAccountConfig = { - signer: walletClientBsc, - bundlerUrl, - paymasterUrl: mockPaymasterUrl - } - - await expect( - compareChainIds(walletClientBsc, config, false) - ).rejects.toThrow() - } - ) + // await expect( + // compareChainIds(walletClient, config, false) + // ).resolves.not.toThrow() + // }) - test.concurrent("should return chain object for chain id 1", async () => { - const chainId = 1 - const chain = getChain(chainId) - expect(chain.id).toBe(chainId) - }) + // test.concurrent( + // "should throw and error, bundlerUrl chain id and paymaster url chain id does not match with validation module", + // async () => { + // const mockPaymasterUrl = + // "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - test.concurrent("should have correct fields", async () => { - const chainId = 1 - const chain = getChain(chainId) - ;[ - "blockExplorers", - "contracts", - "fees", - "formatters", - "id", - "name", - "nativeCurrency", - "rpcUrls", - "serializers" - ].every((field) => { - expect(chain).toHaveProperty(field) - }) - }) + // const k1ValidationModule = await createK1ValidatorModule( + // smartAccount.getSigner() + // ) - test.concurrent("should throw an error, chain id not found", async () => { - const chainId = 0 - expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) - }) + // const config: NexusSmartAccountConfig = { + // defaultValidationModule: k1ValidationModule, + // activeValidationModule: k1ValidationModule, + // bundlerUrl, + // paymasterUrl: mockPaymasterUrl + // } - test.concurrent( - "should have matching counterFactual address from the contracts with smartAccount.getAddress()", - async () => { - const client = createWalletClient({ - account, - chain, - transport: http() - }) - - const smartAccount = await createSmartAccountClient({ - signer: client, - bundlerUrl, - paymasterUrl - }) - - const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() - - const publicClient = createPublicClient({ - chain, - transport: http() - }) - - const factoryContract = getContract({ - address: DEFAULT_BICONOMY_FACTORY_ADDRESS, - abi: BiconomyFactoryAbi, - client: { public: publicClient, wallet: client } - }) - - const smartAccountAddressFromContracts = - await factoryContract.read.computeAccountAddress([ - account.address, - BigInt(0) - ]) - - expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) - } - ) + // await expect( + // compareChainIds(walletClient, config, false) + // ).rejects.toThrow() + // } + // ) // test.concurrent( - // "should have matching #getUserOpHash and entryPoint.getUserOpHash", + // "should throw and error, signer has chain id (56) and paymasterUrl has chain id (80002)", // async () => { - // const userOp: UserOperationStruct = { - // sender: "0x".padEnd(42, "1") as string, - // nonce: 2, - // initCode: "0x3333", - // callData: "0x4444", - // callGasLimit: 5, - // verificationGasLimit: 6, - // preVerificationGas: 7, - // maxFeePerGas: 8, - // maxPriorityFeePerGas: 9, - // paymasterAndData: "0xaaaaaa", - // signature: "0xbbbb" - // } + // const mockPaymasterUrl = + // "https://paymaster.biconomy.io/api/v1/80002/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - // const epHash = await publicClient.readContract({ - // address: DEFAULT_ENTRYPOINT_ADDRESS, - // abi: EntryPointAbi, - // functionName: "getUserOpHash", - // // @ts-ignore - // args: [userOp] + // const walletClientBsc = createWalletClient({ + // account: walletClient.account, + // chain: bsc, + // transport: http(bsc.rpcUrls.default.http[0]) // }) - // const hash = await smartAccount.getUserOpHash(userOp) - // expect(hash).toBe(epHash) - // }, - // 30000 - // ) + // const config: NexusSmartAccountConfig = { + // signer: walletClientBsc, + // bundlerUrl, + // paymasterUrl: mockPaymasterUrl + // } - test.concurrent( - "should be deployed to counterfactual address", - async () => { - const accountAddress = await smartAccount.getAccountAddress() - const byteCode = await publicClient.getBytecode({ - address: accountAddress as Hex - }) + // await expect( + // compareChainIds(walletClientBsc, config, false) + // ).rejects.toThrow() + // } + // ) - expect(byteCode?.length).toBeGreaterThan(2) - }, - 10000 - ) + // test.concurrent("should return chain object for chain id 1", async () => { + // const chainId = 1 + // const chain = getChain(chainId) + // expect(chain.id).toBe(chainId) + // }) - test.concurrent( - "should check if ecdsaOwnershipModule is enabled", - async () => { - const ecdsaOwnershipModule = K1_VALIDATOR + // test.concurrent("should have correct fields", async () => { + // const chainId = 1 + // const chain = getChain(chainId) + // ;[ + // "blockExplorers", + // "contracts", + // "fees", + // "formatters", + // "id", + // "name", + // "nativeCurrency", + // "rpcUrls", + // "serializers" + // ].every((field) => { + // expect(chain).toHaveProperty(field) + // }) + // }) - expect(ecdsaOwnershipModule).toBe( - smartAccount.activeValidationModule.getAddress() - ) - } - ) + // test.concurrent("should throw an error, chain id not found", async () => { + // const chainId = 0 + // expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) + // }) - test.concurrent( - "should fail to deploy a smart account if no native token balance or paymaster", - async () => { - const newPrivateKey = generatePrivateKey() - const newAccount = privateKeyToAccount(newPrivateKey) - - const newViemWallet = createWalletClient({ - account: newAccount, - chain, - transport: http() - }) - - const smartAccount = await createSmartAccountClient({ - signer: newViemWallet, - paymasterUrl, - bundlerUrl - }) - - expect(async () => smartAccount.deploy()).rejects.toThrow( - ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY - ) - } - ) + // test.concurrent( + // "should have matching counterFactual address from the contracts with smartAccount.getAddress()", + // async () => { + // const client = createWalletClient({ + // account, + // chain, + // transport: http() + // }) - test.concurrent( - "should fail to deploy a smart account if already deployed", - async () => { - expect(async () => smartAccount.deploy()).rejects.toThrow( - ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED - ) - }, - 60000 - ) + // const smartAccount = await createSmartAccountClient({ + // signer: client, + // bundlerUrl, + // paymasterUrl + // }) - // test.concurrent("should fetch balances for smartAccount", async () => { - // const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - // const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ - // token - // ]) + // const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() - // expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) - // }) + // const publicClient = createPublicClient({ + // chain, + // transport: http() + // }) - test.concurrent("should error if no recipient exists", async () => { - const token: Hex = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + // const factoryContract = getContract({ + // address: DEFAULT_BICONOMY_FACTORY_ADDRESS, + // abi: BiconomyFactoryAbi, + // client: { public: publicClient, wallet: client } + // }) - const txs = [ - { address: token, amount: BigInt(1), recipient: sender }, - { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } - ] + // const smartAccountAddressFromContracts = + // await factoryContract.read.computeAccountAddress([ + // account.address, + // BigInt(0) + // ]) - expect(async () => smartAccount.withdraw(txs)).rejects.toThrow( - ERROR_MESSAGES.NO_RECIPIENT - ) - }) + // expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) + // } + // ) - test.concurrent( - "should error when withdraw all of native token is attempted without an amount explicitly set", - async () => { - expect(async () => smartAccount.withdraw(null, sender)).rejects.toThrow( - ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT - ) - }, - 6000 - ) + // // test.concurrent( + // // "should have matching #getUserOpHash and entryPoint.getUserOpHash", + // // async () => { + // // const userOp: UserOperationStruct = { + // // sender: "0x".padEnd(42, "1") as string, + // // nonce: 2, + // // initCode: "0x3333", + // // callData: "0x4444", + // // callGasLimit: 5, + // // verificationGasLimit: 6, + // // preVerificationGas: 7, + // // maxFeePerGas: 8, + // // maxPriorityFeePerGas: 9, + // // paymasterAndData: "0xaaaaaa", + // // signature: "0xbbbb" + // // } + + // // const epHash = await publicClient.readContract({ + // // address: DEFAULT_ENTRYPOINT_ADDRESS, + // // abi: EntryPointAbi, + // // functionName: "getUserOpHash", + // // // @ts-ignore + // // args: [userOp] + // // }) + + // // const hash = await smartAccount.getUserOpHash(userOp) + // // expect(hash).toBe(epHash) + // // }, + // // 30000 + // // ) - test.concurrent( - "should check native token balance and more token info for smartAccount", - async () => { - const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() + // test.concurrent( + // "should be deployed to counterfactual address", + // async () => { + // const accountAddress = await smartAccount.getAccountAddress() + // const byteCode = await publicClient.getBytecode({ + // address: accountAddress as Hex + // }) - expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) - expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) - expect(ethBalanceFromSmartAccount.chainId).toBe(chainId) - expect(ethBalanceFromSmartAccount.decimals).toBe(18) - }, - 60000 - ) + // expect(byteCode?.length).toBeGreaterThan(2) + // }, + // 10000 + // ) // test.concurrent( - // "should check balance of supported token", + // "should check if ecdsaOwnershipModule is enabled", // async () => { - // const tokens = await smartAccount.getSupportedTokens() - // const [firstToken] = tokens + // const ecdsaOwnershipModule = K1_VALIDATOR - // expect(tokens.length).toBeGreaterThan(0) - // expect(tokens[0]).toHaveProperty("balance") - // expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) - // }, - // 60000 + // expect(ecdsaOwnershipModule).toBe( + // smartAccount.activeValidationModule.getAddress() + // ) + // } // ) // test.concurrent( - // "should verify a correct signature through isValidSignature", + // "should fail to deploy a smart account if no native token balance or paymaster", // async () => { - // const eip1271MagicValue = "0x1626ba7e" - // const message = "Some message from dApp" - // const messageHash = hashMessage(message) - // const signature = await smartAccount.signMessage(messageHash) - - // const response = await publicClient.readContract({ - // address: await smartAccount.getAccountAddress(), - // abi: NexusAccountAbi, - // functionName: "isValidSignature", - // args: [messageHash, signature] + // const newPrivateKey = generatePrivateKey() + // const newAccount = privateKeyToAccount(newPrivateKey) + + // const newViemWallet = createWalletClient({ + // account: newAccount, + // chain, + // transport: http() // }) - // expect(response).toBe(eip1271MagicValue) + // const smartAccount = await createSmartAccountClient({ + // signer: newViemWallet, + // paymasterUrl, + // bundlerUrl + // }) + + // expect(async () => smartAccount.deploy()).rejects.toThrow( + // ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY + // ) // } // ) - test.concurrent("should verifySignature of deployed", async () => { - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl - }) + // test.concurrent( + // "should fail to deploy a smart account if already deployed", + // async () => { + // expect(async () => smartAccount.deploy()).rejects.toThrow( + // ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED + // ) + // }, + // 60000 + // ) - const message = "hello world" + // // test.concurrent("should fetch balances for smartAccount", async () => { + // // const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + // // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) + // // const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ + // // token + // // ]) - const signature = await smartAccount.signMessage(message) + // // expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) + // // }) - const isVerified = await publicClient.verifyMessage({ - address: await smartAccount.getSigner().getAddress(), - message, - signature - }) + // test.concurrent("should error if no recipient exists", async () => { + // const token: Hex = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - expect(isVerified).toBeTruthy() - }) + // const txs = [ + // { address: token, amount: BigInt(1), recipient: sender }, + // { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } + // ] - test.concurrent("should verifySignature of not deployed", async () => { - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - index: 100n - }) + // expect(async () => smartAccount.withdraw(txs)).rejects.toThrow( + // ERROR_MESSAGES.NO_RECIPIENT + // ) + // }) + + // test.concurrent( + // "should error when withdraw all of native token is attempted without an amount explicitly set", + // async () => { + // expect(async () => smartAccount.withdraw(null, sender)).rejects.toThrow( + // ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT + // ) + // }, + // 6000 + // ) - const message = "hello world" + // test.concurrent( + // "should check native token balance and more token info for smartAccount", + // async () => { + // const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() - const signature = await smartAccount.signMessage(message) + // expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) + // expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) + // expect(ethBalanceFromSmartAccount.chainId).toBe(chainId) + // expect(ethBalanceFromSmartAccount.decimals).toBe(18) + // }, + // 60000 + // ) - const isVerified = await publicClient.verifyMessage({ - address: await smartAccount.getSigner().getAddress(), - message, - signature - }) + // // test.concurrent( + // // "should check balance of supported token", + // // async () => { + // // const tokens = await smartAccount.getSupportedTokens() + // // const [firstToken] = tokens + + // // expect(tokens.length).toBeGreaterThan(0) + // // expect(tokens[0]).toHaveProperty("balance") + // // expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) + // // }, + // // 60000 + // // ) + + // // test.concurrent( + // // "should verify a correct signature through isValidSignature", + // // async () => { + // // const eip1271MagicValue = "0x1626ba7e" + // // const message = "Some message from dApp" + // // const messageHash = hashMessage(message) + // // const signature = await smartAccount.signMessage(messageHash) + + // // const response = await publicClient.readContract({ + // // address: await smartAccount.getAccountAddress(), + // // abi: NexusAccountAbi, + // // functionName: "isValidSignature", + // // args: [messageHash, signature] + // // }) + + // // expect(response).toBe(eip1271MagicValue) + // // } + // // ) + + // test.concurrent("should verifySignature of deployed", async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl + // }) + + // const message = "hello world" + + // const signature = await smartAccount.signMessage(message) + + // const isVerified = await publicClient.verifyMessage({ + // address: await smartAccount.getSigner().getAddress(), + // message, + // signature + // }) + + // expect(isVerified).toBeTruthy() + // }) - expect(isVerified).toBeTruthy() - }) + // test.concurrent("should verifySignature of not deployed", async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl, + // index: 100n + // }) + + // const message = "hello world" + + // const signature = await smartAccount.signMessage(message) + + // const isVerified = await publicClient.verifyMessage({ + // address: await smartAccount.getSigner().getAddress(), + // message, + // signature + // }) + + // expect(isVerified).toBeTruthy() + // }) // test.concurrent( // "should simulate a user operation execution, expecting to fail", diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 2a1d2046e..4ce0c2f0a 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -3,13 +3,17 @@ import { http, type Address, type Hex, + concat, createPublicClient, createWalletClient, encodeAbiParameters, encodeFunctionData, encodePacked, + hexToBytes, + pad, parseAbi, stringToBytes, + toBytes, toHex } from "viem" import { privateKeyToAccount } from "viem/accounts" @@ -19,14 +23,17 @@ import { MOCK_EXECUTOR, MOCK_FALLBACK_HANDLER, MOCK_HOOK, - createOwnableExecutorModule + MODE_MODULE_ENABLE, + MODULE_TYPE_MULTI, + createOwnableExecutorModule, + makeInstallDataAndHash } from "../../src" import { K1_VALIDATOR, ModuleType, createSmartAccountClient } from "../../src/account" -import { UserOpReceipt } from "../../src/bundler" +import type { UserOpReceipt } from "../../src/bundler" import { getConfig } from "../utils" describe("Account:Write", async () => { @@ -66,53 +73,138 @@ describe("Account:Write", async () => { }) const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) - smartAccount.setActiveExecutorModule(ownableExecutorModule) + smartAccount.setactiveExecutionModule(ownableExecutorModule) console.log(`Using SA at address : ${await smartAccount.getAddress()}`) console.log(`Using Signer with address : ${await account.address}`) describe("Account:Basics", async () => { - // test("Build a user op with pimlico bundler", async () => { + test("Build a user op with pimlico bundler", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const userOp = await smartAccount.buildUserOp([transaction]) + expect(userOp).toBeTruthy() + }, 60000) + + // test("Mint NFT - Single Call", async () => { // const encodedCall = encodeFunctionData({ // abi: parseAbi(["function safeMint(address _to)"]), // functionName: "safeMint", // args: [recipient] // }) + + // console.log(recipient, "recipient") + + // // smartAccount.setActiveValidationModule() + + // // const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: K1_VALIDATOR}); + // // console.log(isInstalled); + // const transaction = { // to: nftAddress, // NFT address // data: encodedCall // } - // const userOp = await smartAccount.buildUserOp([transaction]) - // expect(userOp).toBeTruthy() - // }, 60000) + // const gasCost = await smartAccount.getGasEstimate([transaction]) + // console.log(gasCost, "gasCost") - test("Mint NFT - Single Call", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) + // const response = await smartAccount.sendTransaction([transaction]) + // const receipt = await response.wait() - console.log(recipient, "recipient") + // console.log(receipt, "receipt") - // smartAccount.setActiveValidationModule() - - // const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: K1_VALIDATOR}); - // console.log(isInstalled); + // expect(receipt.userOpHash).toBeTruthy() + // }, 60000) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const gasCost = await smartAccount.getGasEstimate([transaction]) - console.log(gasCost, "gasCost") + test("Use enable mode", async () => { + const counterAddress = "0x6BFE41FF0605a87911c0542bF958691ea2ac77f8" // base sepolia - const response = await smartAccount.sendTransaction([transaction]) - const receipt = await response.wait() + const counterBefore = await publicClient.readContract({ + address: counterAddress, + abi: parseAbi(["function getCount() external view returns(uint256)"]), + functionName: "getCount" + }) - console.log(receipt, "receipt") + console.log(counterBefore, "counter before") - expect(receipt.userOpHash).toBeTruthy() + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function increment() external view returns(uint256)"]), + functionName: "increment" + }) + const userOp = await smartAccount.buildUserOp( + [{ to: counterAddress, data: encodedCall }], + { nonceOptions: { validationMode: MODE_MODULE_ENABLE } } + ) + + // Prepare Enable Mode Data + const validatorConfig = pad( + toBytes("0xdB9426d6cE27071b3a806f95B0d9430455d4d4c6"), + { size: 32 } + ) + const executorConfig = pad(hexToBytes("0x2222"), { size: 32 }) + + const validatorInstallData = concat([ + toBytes(ModuleType.Validation), + validatorConfig + ]) + + const executorInstallData = concat([ + toBytes(ModuleType.Execution), + executorConfig + ]) + + const [multiInstallData, hashToSign] = makeInstallDataAndHash( + walletClient.account?.address, + [ + { + moduleType: ModuleType.Validation, + config: toHex(validatorInstallData) + }, + { + moduleType: ModuleType.Execution, + config: toHex(executorInstallData) + } + ] + ) + const enableModeSig = encodePacked( + ["address", "bytes"], + [K1_VALIDATOR, await smartAccount.signMessage(hashToSign)] + ) + + const enableModeSigPrefix = concat([ + toBytes(MODULE_TYPE_MULTI), + pad(toBytes(BigInt(hexToBytes(multiInstallData as Hex).length)), { + size: 4, + dir: "right" + }), + hexToBytes(multiInstallData as Hex), + pad(toBytes(BigInt(hexToBytes(enableModeSig).length)), { + size: 4, + dir: "right" + }), + hexToBytes(enableModeSig) + ]) + + // userOp.signature = encodePacked(['bytes', 'bytes'], [toHex(enableModeSigPrefix), userOp.signature!]); + + // const response = await smartAccount.sendUserOp(userOp); + // const receipt = await response.wait(); + + // console.log(receipt, "receipt"); + + // const counterAfter = await publicClient.readContract({ + // address: counterAddress, + // abi: parseAbi(["function getCount() external view returns(uint256)"]), + // functionName: "getCount" + // }) + + // console.log(counterAfter, "counter after"); }, 60000) // test("Mint NFT's - Batch Call", async () => { @@ -137,47 +229,47 @@ describe("Account:Write", async () => { // }, 60000) }) - describe("Account:Validation Module", async () => { - // test("should install a dummy K1Validator module", async () => { - // const userOpReceipt = await smartAccount.installModule(K1_VALIDATOR, ModuleType.Validation, encodePacked(['address'], [await smartAccount.getAddress() as Hex])) - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR - // ) - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) - // test("should uninstall dummy K1Validator module", async () => { - // const newK1ValidatorContract = - // "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - // const prevAddress: Hex = "0x9C08e1CE188C29bAaeBc64A08cF2Ec44207749B6" - // const deInitData = encodeAbiParameters( - // [ - // { name: "prev", type: "address" }, - // { name: "disableModuleData", type: "bytes" } - // ], - // [prevAddress, toHex(stringToBytes(""))] - // ) - // console.log(deInitData, "deInitData"); - // const userOpReceipt = await smartAccount.uninstallModule(newK1ValidatorContract, ModuleType.Validation, deInitData); - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // newK1ValidatorContract - // ) - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) - // test("should fail to install an already installed Validator", async () => { - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR - // ) - // expect(isInstalled).toBeTruthy() - // const receiptPromise = smartAccount.installModule(K1_VALIDATOR, ModuleType.Validation) - // await expect(receiptPromise).rejects.toThrowError("Error from Bundler:") - // }, 60000) - }) + // describe("Account:Validation Module", async () => { + // test("should install a dummy K1Validator module", async () => { + // const userOpReceipt = await smartAccount.installModule(K1_VALIDATOR, ModuleType.Validation, encodePacked(['address'], [await smartAccount.getAddress() as Hex])) + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // K1_VALIDATOR + // ) + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) + // test("should uninstall dummy K1Validator module", async () => { + // const newK1ValidatorContract = + // "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" + // const prevAddress: Hex = "0x9C08e1CE188C29bAaeBc64A08cF2Ec44207749B6" + // const deInitData = encodeAbiParameters( + // [ + // { name: "prev", type: "address" }, + // { name: "disableModuleData", type: "bytes" } + // ], + // [prevAddress, toHex(stringToBytes(""))] + // ) + // console.log(deInitData, "deInitData"); + // const userOpReceipt = await smartAccount.uninstallModule(newK1ValidatorContract, ModuleType.Validation, deInitData); + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // newK1ValidatorContract + // ) + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) + // test("should fail to install an already installed Validator", async () => { + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Validation, + // K1_VALIDATOR + // ) + // expect(isInstalled).toBeTruthy() + // const receiptPromise = smartAccount.installModule(K1_VALIDATOR, ModuleType.Validation) + // await expect(receiptPromise).rejects.toThrowError("Error from Bundler:") + // }, 60000) + // }) // describe("Account:Execution Module Tests", async () => { // test("install a mock Execution module", async () => { From 99463a3a2f050340f36856ea307723f5b27a7d6d Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Mon, 29 Jul 2024 14:25:04 +0300 Subject: [PATCH 1219/1247] feat: added getInstalledModules function + minor refactor --- src/account/NexusSmartAccount.ts | 22 +- tests/account/read.test.ts | 1295 +++++++++++++++--------------- 2 files changed, 666 insertions(+), 651 deletions(-) diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index 2a4b6ac5f..094f4bbc8 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -61,7 +61,7 @@ import { convertSigner, getChain } from "./index.js" -import { type MODE_MODULE_ENABLE, MODE_VALIDATION } from "./utils/Constants.js" +import { GENERIC_FALLBACK_SELECTOR, type MODE_MODULE_ENABLE, MODE_VALIDATION } from "./utils/Constants.js" import { ADDRESS_ZERO, DEFAULT_BICONOMY_FACTORY_ADDRESS, @@ -689,14 +689,14 @@ export class NexusSmartAccount extends BaseSmartContractAccount { // } // } - const counterFactualAddressV2 = await this.getCounterFactualAddressV2({ + const counterFactualAddressV2 = await this.getCounterFactualAddressV3({ validationModule, index }) return counterFactualAddressV2 } - private async getCounterFactualAddressV2( + private async getCounterFactualAddressV3( params?: CounterFactualAddressParam ): Promise<Hex> { const index = params?.index ?? this.index @@ -791,7 +791,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * * @returns Promise<BaseExecutionModule> - The BaseExecutionModule instance. */ - setactiveExecutionModule( + setActiveExecutionModule( executorModule: BaseExecutionModule ): BaseExecutionModule { this.activeExecutionModule = executorModule @@ -2453,11 +2453,25 @@ export class NexusSmartAccount extends BaseSmartContractAccount { )[0] as Address[] } + async getInstalledModules(): Promise<Address[]> { + const validators = await this.getInstalledValidators(); + const executors = await this.getInstalledExecutors(); + const hook = await this.getActiveHook(); + const fallbackHandler = await this.getFallbackBySelector(); + + return [...validators, ...executors, hook, fallbackHandler]; + } + async getActiveHook(): Promise<Address> { const accountContract = await this._getAccountContract() return (await accountContract.read.getActiveHook()) as Address } + async getFallbackBySelector(selector?: Hex): Promise<Address> { + const accountContract = await this._getAccountContract() + return (await accountContract.read.getFallbackHandlerBySelector([selector ?? GENERIC_FALLBACK_SELECTOR])) as Address + } + async supportsModule(moduleType: ModuleType): Promise<boolean> { const accountContract = await this._getAccountContract() return (await accountContract.read.supportsModule([moduleType])) as boolean diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index e481d3aba..ed5cba155 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -85,97 +85,96 @@ describe("Account:Read", () => { ) }) - // test.concurrent( - // "should estimate gas for minting an NFT", - // async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall - // } - // const results = await Promise.all([ - // smartAccount.getGasEstimate([transaction]), - // smartAccount.getGasEstimate([transaction, transaction]) - // // smartAccount.getGasEstimate([transaction], { - // // paymasterServiceData: { - // // mode: PaymasterMode.SPONSORED - // // } - // // }), - // // smartAccount.getGasEstimate([transaction, transaction], { - // // paymasterServiceData: { - // // mode: PaymasterMode.SPONSORED - // // } - // // }), - // // smartAccount.getGasEstimate([transaction], { - // // paymasterServiceData: { - // // mode: PaymasterMode.ERC20, - // // preferredToken: token - // // } - // // }), - // // await smartAccount.getGasEstimate([transaction, transaction], { - // // paymasterServiceData: { - // // mode: PaymasterMode.ERC20, - // // preferredToken: token - // // } - // // }) - // ]) - - // const increasingGasExpenditure = results.every( - // (result, i) => result > (results[i - 1] ?? 0) - // ) + test.concurrent( + "should estimate gas for minting an NFT", + async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const results = await Promise.all([ + smartAccount.getGasEstimate([transaction]), + smartAccount.getGasEstimate([transaction, transaction]) + // smartAccount.getGasEstimate([transaction], { + // paymasterServiceData: { + // mode: PaymasterMode.SPONSORED + // } + // }), + // smartAccount.getGasEstimate([transaction, transaction], { + // paymasterServiceData: { + // mode: PaymasterMode.SPONSORED + // } + // }), + // smartAccount.getGasEstimate([transaction], { + // paymasterServiceData: { + // mode: PaymasterMode.ERC20, + // preferredToken: token + // } + // }), + // await smartAccount.getGasEstimate([transaction, transaction], { + // paymasterServiceData: { + // mode: PaymasterMode.ERC20, + // preferredToken: token + // } + // }) + ]) + + const increasingGasExpenditure = results.every( + (result, i) => result > (results[i - 1] ?? 0) + ) - // expect(increasingGasExpenditure).toBeTruthy() - // }, - // 60000 - // ) + expect(increasingGasExpenditure).toBeTruthy() + }, + 60000 + ) - // test.concurrent( - // "should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", - // async () => { - // const account = privateKeyToAccount(`0x${privateKey}`) + test.concurrent( + "should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", + async () => { + const account = privateKeyToAccount(`0x${privateKey}`) - // const createSmartAccount = createSmartAccountClient({ - // signer: account, - // bundlerUrl - // }) + const createSmartAccount = createSmartAccountClient({ + signer: account, + bundlerUrl + }) - // await expect(createSmartAccount).rejects.toThrow( - // ERROR_MESSAGES.MISSING_RPC_URL - // ) - // }, - // 50000 - // ) + await expect(createSmartAccount).rejects.toThrow( + ERROR_MESSAGES.MISSING_RPC_URL + ) + }, + 50000 + ) - // test.concurrent( - // "should get all modules", - // async () => { - // const modules = await smartAccount.getAllModules() - // expect(modules).toContain(DEFAULT_SESSION_KEY_MANAGER_MODULE) // session manager module - // expect(modules).toContain(DEFAULT_ECDSA_OWNERSHIP_MODULE) // ecdsa ownership module - // }, - // 30000 - // ) + test.concurrent( + "should get all modules", + async () => { + const modules = await smartAccount.getInstalledModules() + console.log(modules, "modules"); + }, + 30000 + ) - // test.concurrent( - // "should check if module is enabled on the smart account", - // async () => { - // const isEnabled = await smartAccount.isModuleInstalled({ - // moduleType: ModuleType.Validation, - // moduleAddress: K1_VALIDATOR - // }) - // expect(isEnabled).toBeTruthy() - // }, - // 30000 - // ) + test.concurrent( + "should check if module is enabled on the smart account", + async () => { + const isEnabled = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Validation, + moduleAddress: K1_VALIDATOR + }) + expect(isEnabled).toBeTruthy() + }, + 30000 + ) test.concurrent( "enable mode", async () => { - const result = makeInstallDataAndHash(walletClient.account.address) + const result = makeInstallDataAndHash(walletClient.account.address, [{moduleType: ModuleType.Validation, config: walletClient.account.address}]) console.log(result, "result") }, 30000 @@ -210,640 +209,642 @@ describe("Account:Read", () => { // 30000 // ) - // test.concurrent( - // "should create a smartAccountClient from an ethers signer", - // async () => { - // const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) - // const ethersSigner = new Wallet(privateKey, ethersProvider) - - // const smartAccount = await createSmartAccountClient({ - // signer: ethersSigner, - // bundlerUrl, - // rpcUrl: chain.rpcUrls.default.http[0] - // }) - - // const sig = await smartAccount.signMessage("test") - // console.log(sig, "Signature") - - // const address = await smartAccount.getAccountAddress() - // expect(address).toBeTruthy() - // } - // ) - - // test.concurrent( - // "should pickup the rpcUrl from viem wallet and ethers", - // async () => { - // const newRpcUrl = "http://localhost:8545" - // const defaultRpcUrl = chain.rpcUrls.default.http[0] //http://127.0.0.1:8545" - - // const ethersProvider = new JsonRpcProvider(newRpcUrl) - // const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider) - - // const originalEthersProvider = new JsonRpcProvider( - // chain.rpcUrls.default.http[0] - // ) - // const ethersSigner = new Wallet(privateKey, originalEthersProvider) - - // const accountOne = privateKeyToAccount(`0x${privateKey}`) - // const walletClientWithNewRpcUrl = createWalletClient({ - // account: accountOne, - // chain, - // transport: http(newRpcUrl) - // }) - // const [ - // smartAccountFromEthersWithNewRpc, - // smartAccountFromViemWithNewRpc, - // smartAccountFromEthersWithOldRpc, - // smartAccountFromViemWithOldRpc - // ] = await Promise.all([ - // createSmartAccountClient({ - // chainId, - // signer: ethersSignerWithNewRpcUrl, - // bundlerUrl: getBundlerUrl(1337), - // rpcUrl: newRpcUrl - // }), - // createSmartAccountClient({ - // chainId, - // signer: walletClientWithNewRpcUrl, - // bundlerUrl: getBundlerUrl(1337), - // rpcUrl: newRpcUrl - // }), - // createSmartAccountClient({ - // chainId, - // signer: ethersSigner, - // bundlerUrl: getBundlerUrl(1337), - // rpcUrl: chain.rpcUrls.default.http[0] - // }), - // createSmartAccountClient({ - // chainId, - // signer: walletClient, - // bundlerUrl: getBundlerUrl(1337), - // rpcUrl: chain.rpcUrls.default.http[0] - // }) - // ]) - - // const [ - // smartAccountFromEthersWithNewRpcAddress, - // smartAccountFromViemWithNewRpcAddress, - // smartAccountFromEthersWithOldRpcAddress, - // smartAccountFromViemWithOldRpcAddress - // ] = await Promise.all([ - // smartAccountFromEthersWithNewRpc.getAccountAddress(), - // smartAccountFromViemWithNewRpc.getAccountAddress(), - // smartAccountFromEthersWithOldRpc.getAccountAddress(), - // smartAccountFromViemWithOldRpc.getAccountAddress() - // ]) - - // expect( - // [ - // smartAccountFromEthersWithNewRpcAddress, - // smartAccountFromViemWithNewRpcAddress, - // smartAccountFromEthersWithOldRpcAddress, - // smartAccountFromViemWithOldRpcAddress - // ].every(Boolean) - // ).toBeTruthy() - - // expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe( - // newRpcUrl - // ) - // expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe( - // newRpcUrl - // ) - // expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe( - // defaultRpcUrl - // ) - // expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe( - // defaultRpcUrl - // ) - // } - // ) - - // test.concurrent( - // "should read estimated user op gas values", - // async () => { - // const tx = { - // to: recipient, - // data: "0x" - // } - - // const userOp = await smartAccount.buildUserOp([tx]) - - // const estimatedGas = await smartAccount.estimateUserOpGas(userOp) - // console.log(estimatedGas, "estimatedGas") - // expect(estimatedGas.maxFeePerGas).toBeTruthy() - // expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() - // expect(estimatedGas.verificationGasLimit).toBeTruthy() - // expect(estimatedGas.callGasLimit).toBeTruthy() - // expect(estimatedGas.preVerificationGas).toBeTruthy() - // }, - // 30000 - // ) + test.concurrent( + "should create a smartAccountClient from an ethers signer", + async () => { + const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) + const ethersSigner = new Wallet(privateKey, ethersProvider) - // test.concurrent("should have an active validation module", async () => { - // const module = smartAccount.activeValidationModule - // expect(module).toBeTruthy() - // }) + const smartAccount = await createSmartAccountClient({ + signer: ethersSigner, + bundlerUrl, + rpcUrl: chain.rpcUrls.default.http[0] + }) - // // test.concurrent( - // // "should create a smart account with paymaster by creating instance", - // // async () => { - // // const paymaster = new Paymaster({ paymasterUrl }) - - // // const smartAccount = await createSmartAccountClient({ - // // signer: walletClient, - // // bundlerUrl, - // // paymaster - // // }) - // // expect(smartAccount.paymaster).not.toBeNull() - // // expect(smartAccount.paymaster).not.toBeUndefined() - // // } - // // ) - // test.concurrent( - // "should fail to create a smartAccountClient from a walletClient without a chainId", - // async () => { - // const account = privateKeyToAccount(generatePrivateKey()) - // const viemWalletClientNoChainId = createWalletClient({ - // account, - // transport: http(chain.rpcUrls.default.http[0]) - // }) + const sig = await smartAccount.signMessage("test") + console.log(sig, "Signature") - // expect( - // await expect( - // createSmartAccountClient({ - // signer: viemWalletClientNoChainId, - // bundlerUrl, - // rpcUrl: chain.rpcUrls.default.http[0] - // }) - // ).rejects.toThrow("Cannot consume a viem wallet without a chainId") - // ) - // } - // ) + const address = await smartAccount.getAccountAddress() + expect(address).toBeTruthy() + } + ) - // test.concurrent( - // "should fail to create a smartAccountClient from a walletClient without an account", - // async () => { - // const viemWalletNoAccount = createWalletClient({ - // transport: http(chain.rpcUrls.default.http[0]) - // }) + test.concurrent( + "should pickup the rpcUrl from viem wallet and ethers", + async () => { + const newRpcUrl = "http://localhost:8545" + const defaultRpcUrl = chain.rpcUrls.default.http[0] //http://127.0.0.1:8545" - // expect(async () => - // createSmartAccountClient({ - // signer: viemWalletNoAccount, - // bundlerUrl, - // rpcUrl: chain.rpcUrls.default.http[0] - // }) - // ).rejects.toThrow("Cannot consume a viem wallet without an account") - // } - // ) + const ethersProvider = new JsonRpcProvider(newRpcUrl) + const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider) - // test.concurrent("should have account addresses", async () => { - // const addresses = await Promise.all([ - // sender, - // smartAccount.getAddress(), - // recipient, - // smartAccountTwo.getAddress() - // ]) - // /* - // * addresses: [ - // * '0xFA66E705cf2582cF56528386Bb9dFCA119767262', // sender - // * '0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC', // smartAccountSender - // * '0x3079B249DFDE4692D7844aA261f8cf7D927A0DA5', // recipient - // * '0x5F141ee1390D4c9d033a00CB940E509A4811a5E0' // smartAccountRecipient - // * ] - // */ - // expect(addresses.every(Boolean)).toBeTruthy() - // }) + const originalEthersProvider = new JsonRpcProvider( + chain.rpcUrls.default.http[0] + ) + const ethersSigner = new Wallet(privateKey, originalEthersProvider) + + const accountOne = privateKeyToAccount(`0x${privateKey}`) + const walletClientWithNewRpcUrl = createWalletClient({ + account: accountOne, + chain, + transport: http(newRpcUrl) + }) + const [ + smartAccountFromEthersWithNewRpc, + smartAccountFromViemWithNewRpc, + smartAccountFromEthersWithOldRpc, + smartAccountFromViemWithOldRpc + ] = await Promise.all([ + createSmartAccountClient({ + chainId, + signer: ethersSignerWithNewRpcUrl, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: newRpcUrl + }), + createSmartAccountClient({ + chainId, + signer: walletClientWithNewRpcUrl, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: newRpcUrl + }), + createSmartAccountClient({ + chainId, + signer: ethersSigner, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: chain.rpcUrls.default.http[0] + }), + createSmartAccountClient({ + chainId, + signer: walletClient, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: chain.rpcUrls.default.http[0] + }) + ]) + + const [ + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress + ] = await Promise.all([ + smartAccountFromEthersWithNewRpc.getAccountAddress(), + smartAccountFromViemWithNewRpc.getAccountAddress(), + smartAccountFromEthersWithOldRpc.getAccountAddress(), + smartAccountFromViemWithOldRpc.getAccountAddress() + ]) + + expect( + [ + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress + ].every(Boolean) + ).toBeTruthy() + + expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe( + newRpcUrl + ) + expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe( + newRpcUrl + ) + expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe( + defaultRpcUrl + ) + expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe( + defaultRpcUrl + ) + } + ) - // // test.concurrent( - // // "should create a smart account with paymaster with an api key", - // // async () => { - // // const paymaster = smartAccount.paymaster - // // expect(paymaster).not.toBeNull() - // // expect(paymaster).not.toBeUndefined() - // // } - // // ) - - // test.concurrent("should not throw and error, chain ids match", async () => { - // const mockBundlerUrl = - // "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" - // const mockPaymasterUrl = - // "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - - // const config: NexusSmartAccountConfig = { - // signer: walletClient, - // bundlerUrl: mockBundlerUrl, - // paymasterUrl: mockPaymasterUrl - // } + test.concurrent( + "should read estimated user op gas values", + async () => { + const tx = { + to: recipient, + data: "0x" + } + + const userOp = await smartAccount.buildUserOp([tx]) + + const estimatedGas = await smartAccount.estimateUserOpGas(userOp) + console.log(estimatedGas, "estimatedGas") + expect(estimatedGas.maxFeePerGas).toBeTruthy() + expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() + expect(estimatedGas.verificationGasLimit).toBeTruthy() + expect(estimatedGas.callGasLimit).toBeTruthy() + expect(estimatedGas.preVerificationGas).toBeTruthy() + }, + 30000 + ) - // await expect( - // compareChainIds(walletClient, config, false) - // ).resolves.not.toThrow() - // }) + test.concurrent("should have an active validation module", async () => { + const module = smartAccount.activeValidationModule + expect(module).toBeTruthy() + }) // test.concurrent( - // "should throw and error, bundlerUrl chain id and paymaster url chain id does not match with validation module", + // "should create a smart account with paymaster by creating instance", // async () => { - // const mockPaymasterUrl = - // "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + // const paymaster = new Paymaster({ paymasterUrl }) - // const k1ValidationModule = await createK1ValidatorModule( - // smartAccount.getSigner() - // ) - - // const config: NexusSmartAccountConfig = { - // defaultValidationModule: k1ValidationModule, - // activeValidationModule: k1ValidationModule, + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, // bundlerUrl, - // paymasterUrl: mockPaymasterUrl - // } - - // await expect( - // compareChainIds(walletClient, config, false) - // ).rejects.toThrow() + // paymaster + // }) + // expect(smartAccount.paymaster).not.toBeNull() + // expect(smartAccount.paymaster).not.toBeUndefined() // } // ) - // test.concurrent( - // "should throw and error, signer has chain id (56) and paymasterUrl has chain id (80002)", - // async () => { - // const mockPaymasterUrl = - // "https://paymaster.biconomy.io/api/v1/80002/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + test.concurrent( + "should fail to create a smartAccountClient from a walletClient without a chainId", + async () => { + const account = privateKeyToAccount(generatePrivateKey()) + const viemWalletClientNoChainId = createWalletClient({ + account, + transport: http(chain.rpcUrls.default.http[0]) + }) + + expect( + await expect( + createSmartAccountClient({ + signer: viemWalletClientNoChainId, + bundlerUrl, + rpcUrl: chain.rpcUrls.default.http[0] + }) + ).rejects.toThrow("Cannot consume a viem wallet without a chainId") + ) + } - // const walletClientBsc = createWalletClient({ - // account: walletClient.account, - // chain: bsc, - // transport: http(bsc.rpcUrls.default.http[0]) - // }) + ) - // const config: NexusSmartAccountConfig = { - // signer: walletClientBsc, - // bundlerUrl, - // paymasterUrl: mockPaymasterUrl - // } + test.concurrent( + "should fail to create a smartAccountClient from a walletClient without an account", + async () => { + const viemWalletNoAccount = createWalletClient({ + transport: http(chain.rpcUrls.default.http[0]) + }) - // await expect( - // compareChainIds(walletClientBsc, config, false) - // ).rejects.toThrow() - // } - // ) + expect(async () => + createSmartAccountClient({ + signer: viemWalletNoAccount, + bundlerUrl, + rpcUrl: chain.rpcUrls.default.http[0] + }) + ).rejects.toThrow("Cannot consume a viem wallet without an account") + } + ) - // test.concurrent("should return chain object for chain id 1", async () => { - // const chainId = 1 - // const chain = getChain(chainId) - // expect(chain.id).toBe(chainId) - // }) + test.concurrent("should have account addresses", async () => { + const addresses = await Promise.all([ + sender, + smartAccount.getAddress(), + recipient, + smartAccountTwo.getAddress() + ]) + /* + * addresses: [ + * '0xFA66E705cf2582cF56528386Bb9dFCA119767262', // sender + * '0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC', // smartAccountSender + * '0x3079B249DFDE4692D7844aA261f8cf7D927A0DA5', // recipient + * '0x5F141ee1390D4c9d033a00CB940E509A4811a5E0' // smartAccountRecipient + * ] + */ + expect(addresses.every(Boolean)).toBeTruthy() + }) - // test.concurrent("should have correct fields", async () => { - // const chainId = 1 - // const chain = getChain(chainId) - // ;[ - // "blockExplorers", - // "contracts", - // "fees", - // "formatters", - // "id", - // "name", - // "nativeCurrency", - // "rpcUrls", - // "serializers" - // ].every((field) => { - // expect(chain).toHaveProperty(field) - // }) - // }) + test.concurrent( + "should create a smart account with paymaster with an api key", + async () => { + const paymaster = smartAccount.paymaster + expect(paymaster).not.toBeNull() + expect(paymaster).not.toBeUndefined() + } + ) - // test.concurrent("should throw an error, chain id not found", async () => { - // const chainId = 0 - // expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) - // }) + test.concurrent("should not throw and error, chain ids match", async () => { + const mockBundlerUrl = + "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" + const mockPaymasterUrl = + "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + + const config: NexusSmartAccountConfig = { + signer: walletClient, + bundlerUrl: mockBundlerUrl, + paymasterUrl: mockPaymasterUrl + } + + await expect( + compareChainIds(walletClient, config, false) + ).resolves.not.toThrow() + }) - // test.concurrent( - // "should have matching counterFactual address from the contracts with smartAccount.getAddress()", - // async () => { - // const client = createWalletClient({ - // account, - // chain, - // transport: http() - // }) + test.concurrent( + "should throw and error, bundlerUrl chain id and paymaster url chain id does not match with validation module", + async () => { + const mockPaymasterUrl = + "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - // const smartAccount = await createSmartAccountClient({ - // signer: client, - // bundlerUrl, - // paymasterUrl - // }) + const k1ValidationModule = await createK1ValidatorModule( + smartAccount.getSigner() + ) - // const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() + const config: NexusSmartAccountConfig = { + defaultValidationModule: k1ValidationModule, + activeValidationModule: k1ValidationModule, + bundlerUrl, + paymasterUrl: mockPaymasterUrl + } + + await expect( + compareChainIds(walletClient, config, false) + ).rejects.toThrow() + } + ) - // const publicClient = createPublicClient({ - // chain, - // transport: http() - // }) + test.concurrent( + "should throw and error, signer has chain id (56) and paymasterUrl has chain id (80002)", + async () => { + const mockPaymasterUrl = + "https://paymaster.biconomy.io/api/v1/80002/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + + const walletClientBsc = createWalletClient({ + account: walletClient.account, + chain: bsc, + transport: http(bsc.rpcUrls.default.http[0]) + }) + + const config: NexusSmartAccountConfig = { + signer: walletClientBsc, + bundlerUrl, + paymasterUrl: mockPaymasterUrl + } + + await expect( + compareChainIds(walletClientBsc, config, false) + ).rejects.toThrow() + } + ) - // const factoryContract = getContract({ - // address: DEFAULT_BICONOMY_FACTORY_ADDRESS, - // abi: BiconomyFactoryAbi, - // client: { public: publicClient, wallet: client } - // }) + test.concurrent("should return chain object for chain id 1", async () => { + const chainId = 1 + const chain = getChain(chainId) + expect(chain.id).toBe(chainId) + }) - // const smartAccountAddressFromContracts = - // await factoryContract.read.computeAccountAddress([ - // account.address, - // BigInt(0) - // ]) + test.concurrent("should have correct fields", async () => { + const chainId = 1 + const chain = getChain(chainId) + ;[ + "blockExplorers", + "contracts", + "fees", + "formatters", + "id", + "name", + "nativeCurrency", + "rpcUrls", + "serializers" + ].every((field) => { + expect(chain).toHaveProperty(field) + }) + }) - // expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) - // } - // ) + test.concurrent("should throw an error, chain id not found", async () => { + const chainId = 0 + expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) + }) - // // test.concurrent( - // // "should have matching #getUserOpHash and entryPoint.getUserOpHash", - // // async () => { - // // const userOp: UserOperationStruct = { - // // sender: "0x".padEnd(42, "1") as string, - // // nonce: 2, - // // initCode: "0x3333", - // // callData: "0x4444", - // // callGasLimit: 5, - // // verificationGasLimit: 6, - // // preVerificationGas: 7, - // // maxFeePerGas: 8, - // // maxPriorityFeePerGas: 9, - // // paymasterAndData: "0xaaaaaa", - // // signature: "0xbbbb" - // // } - - // // const epHash = await publicClient.readContract({ - // // address: DEFAULT_ENTRYPOINT_ADDRESS, - // // abi: EntryPointAbi, - // // functionName: "getUserOpHash", - // // // @ts-ignore - // // args: [userOp] - // // }) - - // // const hash = await smartAccount.getUserOpHash(userOp) - // // expect(hash).toBe(epHash) - // // }, - // // 30000 - // // ) + test.concurrent( + "should have matching counterFactual address from the contracts with smartAccount.getAddress()", + async () => { + const client = createWalletClient({ + account, + chain, + transport: http() + }) + + const smartAccount = await createSmartAccountClient({ + signer: client, + bundlerUrl, + paymasterUrl + }) + + const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() + + const publicClient = createPublicClient({ + chain, + transport: http() + }) + + const factoryContract = getContract({ + address: DEFAULT_BICONOMY_FACTORY_ADDRESS, + abi: BiconomyFactoryAbi, + client: { public: publicClient, wallet: client } + }) + + const smartAccountAddressFromContracts = + await factoryContract.read.computeAccountAddress([ + account.address, + BigInt(0) + ]) + + expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) + } + ) // test.concurrent( - // "should be deployed to counterfactual address", + // "should have matching #getUserOpHash and entryPoint.getUserOpHash", // async () => { - // const accountAddress = await smartAccount.getAccountAddress() - // const byteCode = await publicClient.getBytecode({ - // address: accountAddress as Hex + // const userOp: UserOperationStruct = { + // sender: "0x".padEnd(42, "1") as string, + // nonce: 2, + // initCode: "0x3333", + // callData: "0x4444", + // callGasLimit: 5, + // verificationGasLimit: 6, + // preVerificationGas: 7, + // maxFeePerGas: 8, + // maxPriorityFeePerGas: 9, + // paymasterAndData: "0xaaaaaa", + // signature: "0xbbbb" + // } + + // const epHash = await publicClient.readContract({ + // address: DEFAULT_ENTRYPOINT_ADDRESS, + // abi: EntryPointAbi, + // functionName: "getUserOpHash", + // // @ts-ignore + // args: [userOp] // }) - // expect(byteCode?.length).toBeGreaterThan(2) + // const hash = await smartAccount.getUserOpHash(userOp) + // expect(hash).toBe(epHash) // }, - // 10000 - // ) - - // test.concurrent( - // "should check if ecdsaOwnershipModule is enabled", - // async () => { - // const ecdsaOwnershipModule = K1_VALIDATOR - - // expect(ecdsaOwnershipModule).toBe( - // smartAccount.activeValidationModule.getAddress() - // ) - // } + // 30000 // ) - // test.concurrent( - // "should fail to deploy a smart account if no native token balance or paymaster", - // async () => { - // const newPrivateKey = generatePrivateKey() - // const newAccount = privateKeyToAccount(newPrivateKey) - - // const newViemWallet = createWalletClient({ - // account: newAccount, - // chain, - // transport: http() - // }) - - // const smartAccount = await createSmartAccountClient({ - // signer: newViemWallet, - // paymasterUrl, - // bundlerUrl - // }) + test.concurrent( + "should be deployed to counterfactual address", + async () => { + const accountAddress = await smartAccount.getAccountAddress() + const byteCode = await publicClient.getBytecode({ + address: accountAddress as Hex + }) - // expect(async () => smartAccount.deploy()).rejects.toThrow( - // ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY - // ) - // } - // ) + expect(byteCode?.length).toBeGreaterThan(2) + }, + 10000 + ) - // test.concurrent( - // "should fail to deploy a smart account if already deployed", - // async () => { - // expect(async () => smartAccount.deploy()).rejects.toThrow( - // ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED - // ) - // }, - // 60000 - // ) + test.concurrent( + "should check if ecdsaOwnershipModule is enabled", + async () => { + const ecdsaOwnershipModule = K1_VALIDATOR - // // test.concurrent("should fetch balances for smartAccount", async () => { - // // const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - // // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - // // const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ - // // token - // // ]) + expect(ecdsaOwnershipModule).toBe( + smartAccount.activeValidationModule.getAddress() + ) + } + ) - // // expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) - // // }) + test.concurrent( + "should fail to deploy a smart account if no native token balance or paymaster", + async () => { + const newPrivateKey = generatePrivateKey() + const newAccount = privateKeyToAccount(newPrivateKey) + + const newViemWallet = createWalletClient({ + account: newAccount, + chain, + transport: http() + }) + + const smartAccount = await createSmartAccountClient({ + signer: newViemWallet, + paymasterUrl, + bundlerUrl + }) + + expect(async () => smartAccount.deploy()).rejects.toThrow( + ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY + ) + } + ) - // test.concurrent("should error if no recipient exists", async () => { - // const token: Hex = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + test.concurrent( + "should fail to deploy a smart account if already deployed", + async () => { + expect(async () => smartAccount.deploy()).rejects.toThrow( + ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED + ) + }, + 60000 + ) - // const txs = [ - // { address: token, amount: BigInt(1), recipient: sender }, - // { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } - // ] + // test.concurrent("should fetch balances for smartAccount", async () => { + // const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) + // const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ + // token + // ]) - // expect(async () => smartAccount.withdraw(txs)).rejects.toThrow( - // ERROR_MESSAGES.NO_RECIPIENT - // ) + // expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) // }) - // test.concurrent( - // "should error when withdraw all of native token is attempted without an amount explicitly set", - // async () => { - // expect(async () => smartAccount.withdraw(null, sender)).rejects.toThrow( - // ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT - // ) - // }, - // 6000 - // ) - - // test.concurrent( - // "should check native token balance and more token info for smartAccount", - // async () => { - // const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() + test.concurrent("should error if no recipient exists", async () => { + const token: Hex = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - // expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) - // expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) - // expect(ethBalanceFromSmartAccount.chainId).toBe(chainId) - // expect(ethBalanceFromSmartAccount.decimals).toBe(18) - // }, - // 60000 - // ) + const txs = [ + { address: token, amount: BigInt(1), recipient: sender }, + { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } + ] - // // test.concurrent( - // // "should check balance of supported token", - // // async () => { - // // const tokens = await smartAccount.getSupportedTokens() - // // const [firstToken] = tokens - - // // expect(tokens.length).toBeGreaterThan(0) - // // expect(tokens[0]).toHaveProperty("balance") - // // expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) - // // }, - // // 60000 - // // ) - - // // test.concurrent( - // // "should verify a correct signature through isValidSignature", - // // async () => { - // // const eip1271MagicValue = "0x1626ba7e" - // // const message = "Some message from dApp" - // // const messageHash = hashMessage(message) - // // const signature = await smartAccount.signMessage(messageHash) - - // // const response = await publicClient.readContract({ - // // address: await smartAccount.getAccountAddress(), - // // abi: NexusAccountAbi, - // // functionName: "isValidSignature", - // // args: [messageHash, signature] - // // }) - - // // expect(response).toBe(eip1271MagicValue) - // // } - // // ) - - // test.concurrent("should verifySignature of deployed", async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl - // }) - - // const message = "hello world" - - // const signature = await smartAccount.signMessage(message) - - // const isVerified = await publicClient.verifyMessage({ - // address: await smartAccount.getSigner().getAddress(), - // message, - // signature - // }) - - // expect(isVerified).toBeTruthy() - // }) + expect(async () => smartAccount.withdraw(txs)).rejects.toThrow( + ERROR_MESSAGES.NO_RECIPIENT + ) + }) - // test.concurrent("should verifySignature of not deployed", async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl, - // index: 100n - // }) + test.concurrent( + "should error when withdraw all of native token is attempted without an amount explicitly set", + async () => { + expect(async () => smartAccount.withdraw(null, sender)).rejects.toThrow( + ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT + ) + }, + 6000 + ) - // const message = "hello world" + test.concurrent( + "should check native token balance and more token info for smartAccount", + async () => { + const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() - // const signature = await smartAccount.signMessage(message) + expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) + expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) + expect(ethBalanceFromSmartAccount.chainId).toBe(chainId) + expect(ethBalanceFromSmartAccount.decimals).toBe(18) + }, + 60000 + ) - // const isVerified = await publicClient.verifyMessage({ - // address: await smartAccount.getSigner().getAddress(), - // message, - // signature - // }) + test.concurrent( + "should check balance of supported token", + async () => { + const tokens = await smartAccount.getSupportedTokens() + const [firstToken] = tokens - // expect(isVerified).toBeTruthy() - // }) + expect(tokens.length).toBeGreaterThan(0) + expect(tokens[0]).toHaveProperty("balance") + expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) + }, + 60000 + ) // test.concurrent( - // "should simulate a user operation execution, expecting to fail", + // "should verify a correct signature through isValidSignature", // async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl + // const eip1271MagicValue = "0x1626ba7e" + // const message = "Some message from dApp" + // const messageHash = hashMessage(message) + // const signature = await smartAccount.signMessage(messageHash) + + // const response = await publicClient.readContract({ + // address: await smartAccount.getAccountAddress(), + // abi: NexusAccountAbi, + // functionName: "isValidSignature", + // args: [messageHash, signature] // }) - // const balances = await smartAccount.getBalances() - // expect(balances[0].amount).toBeGreaterThan(0n) + // expect(response).toBe(eip1271MagicValue) + // } + // ) - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function deposit()"]), - // functionName: "deposit" - // }) + test.concurrent("should verifySignature of deployed", async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl + }) - // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" + const message = "hello world" - // // fail if value is not bigger than 1 - // // the contract call requires a deposit of at least 1 wei - // const tx1 = { - // to: amoyTestContract as Hex, - // data: encodedCall, - // value: 0 - // } - // const tx2 = { - // to: amoyTestContract as Hex, - // data: encodedCall, - // value: 2 - // } + const signature = await smartAccount.signMessage(message) - // await expect(smartAccount.buildUserOp([tx1, tx2])).rejects.toThrow() - // } - // ) + const isVerified = await publicClient.verifyMessage({ + address: await smartAccount.getSigner().getAddress(), + message, + signature + }) - // test.concurrent( - // "should simulate a user operation execution, expecting to pass execution", - // async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl - // }) + expect(isVerified).toBeTruthy() + }) - // const balances = await smartAccount.getBalances() - // expect(balances[0].amount).toBeGreaterThan(0n) + test.concurrent("should verifySignature of not deployed", async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + index: 100n + }) - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function deposit()"]), - // functionName: "deposit" - // }) + const message = "hello world" - // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" + const signature = await smartAccount.signMessage(message) - // // fail if value is not bigger than 1 - // // the contract call requires a deposit of at least 1 wei - // const tx1 = { - // to: amoyTestContract as Hex, - // data: encodedCall, - // value: 2 - // } - // const tx2 = { - // to: amoyTestContract as Hex, - // data: encodedCall, - // value: 2 - // } + const isVerified = await publicClient.verifyMessage({ + address: await smartAccount.getSigner().getAddress(), + message, + signature + }) - // await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() - // } - // ) + expect(isVerified).toBeTruthy() + }) - // test.concurrent("Should verify supported modes", async () => { - // expect( - // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_SINGLE) - // ).to.be.true - // expect( - // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_BATCH) - // ).to.be.true - // expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_BATCH)).to - // .be.true - // expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_SINGLE)) - // .to.be.true - - // expect( - // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DELEGATE_SINGLE) - // ).to.be.false - // }) + test.concurrent( + "should simulate a user operation execution, expecting to fail", + async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl + }) + + const balances = await smartAccount.getBalances() + expect(balances[0].amount).toBeGreaterThan(0n) + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function deposit()"]), + functionName: "deposit" + }) + + const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" + + // fail if value is not bigger than 1 + // the contract call requires a deposit of at least 1 wei + const tx1 = { + to: amoyTestContract as Hex, + data: encodedCall, + value: 0 + } + const tx2 = { + to: amoyTestContract as Hex, + data: encodedCall, + value: 2 + } + + await expect(smartAccount.buildUserOp([tx1, tx2])).rejects.toThrow() + } + ) + + test.concurrent( + "should simulate a user operation execution, expecting to pass execution", + async () => { + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl + }) + + const balances = await smartAccount.getBalances() + expect(balances[0].amount).toBeGreaterThan(0n) + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function deposit()"]), + functionName: "deposit" + }) + + const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" + + // fail if value is not bigger than 1 + // the contract call requires a deposit of at least 1 wei + const tx1 = { + to: amoyTestContract as Hex, + data: encodedCall, + value: 2 + } + const tx2 = { + to: amoyTestContract as Hex, + data: encodedCall, + value: 2 + } + + await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() + } + ) + + test.concurrent("Should verify supported modes", async () => { + expect( + await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_SINGLE) + ).to.be.true + expect( + await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_BATCH) + ).to.be.true + expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_BATCH)).to + .be.true + expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_SINGLE)) + .to.be.true + + expect( + await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DELEGATE_SINGLE) + ).to.be.false + }) }) From 60cddcd7b8898b396e09d5f882f0a1c691f51071 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Wed, 31 Jul 2024 18:40:34 +0300 Subject: [PATCH 1220/1247] refactor: refactor after new contracts --- .env.example | 4 +- .github/workflows/coverage.yml | 4 +- .github/workflows/test-read.yml | 4 +- .github/workflows/test-write.yml | 16 +- bun.lockb | Bin 273884 -> 273884 bytes src/account/NexusSmartAccount.ts | 71 +- src/account/abi/EntryPointAbi.ts | 988 +++--------------- src/account/abi/K1ValidatorFactory.ts | 38 + src/account/utils/Constants.ts | 19 +- src/bundler/utils/Constants.ts | 2 +- tests/account/read.test.ts | 453 ++++---- tests/account/write.test.ts | 210 ++-- .../modules/ownableExecutor.ts/write.test.ts | 6 +- .../modules/ownableValidator.ts/write.test.ts | 4 +- tests/utils.ts | 14 +- 15 files changed, 625 insertions(+), 1208 deletions(-) diff --git a/.env.example b/.env.example index d1e8fcfe8..c0487f4f5 100644 --- a/.env.example +++ b/.env.example @@ -1,8 +1,8 @@ E2E_PRIVATE_KEY_ONE= E2E_PRIVATE_KEY_TWO= -BUNDLER_URL=https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 +BUNDLER_URL=https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 E2E_BICO_PAYMASTER_KEY_AMOY= E2E_BICO_PAYMASTER_KEY_BASE= -CHAIN_ID=80002 +CHAIN_ID=11155111 CODECOV_TOKEN= TESTING=false diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 6b2c9aebc..d573adff2 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -23,10 +23,10 @@ jobs: env: E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - BUNDLER_URL: https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 + BUNDLER_URL: https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} - CHAIN_ID: 80002 + CHAIN_ID: 11155111 TESTING: true - name: report coverage diff --git a/.github/workflows/test-read.yml b/.github/workflows/test-read.yml index f6338828d..639b6d406 100644 --- a/.github/workflows/test-read.yml +++ b/.github/workflows/test-read.yml @@ -22,8 +22,8 @@ jobs: env: E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - BUNDLER_URL: https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 + BUNDLER_URL: https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} - CHAIN_ID: 80002 + CHAIN_ID: 11155111 TESTING: true diff --git a/.github/workflows/test-write.yml b/.github/workflows/test-write.yml index 33c230deb..a0d1a13db 100644 --- a/.github/workflows/test-write.yml +++ b/.github/workflows/test-write.yml @@ -24,20 +24,20 @@ jobs: env: E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - BUNDLER_URL: https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 + BUNDLER_URL: https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} - CHAIN_ID: 80002 + CHAIN_ID: 11155111 - name: Run the bundler tests run: bun run test:ci -t=Bundler:Write env: E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - BUNDLER_URL: https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 + BUNDLER_URL: https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} - CHAIN_ID: 80002 + CHAIN_ID: 11155111 TESTING: true - name: Run the paymaster tests @@ -45,10 +45,10 @@ jobs: env: E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - BUNDLER_URL: https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 + BUNDLER_URL: https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} - CHAIN_ID: 80002 + CHAIN_ID: 11155111 TESTING: true - name: Run the modules tests @@ -56,8 +56,8 @@ jobs: env: E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - BUNDLER_URL: https://bundler.biconomy.io/api/v2/80002/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 + BUNDLER_URL: https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} - CHAIN_ID: 80002 + CHAIN_ID: 11155111 TESTING: true diff --git a/bun.lockb b/bun.lockb index ecdabd4198d311335cb822f14057539f60256997..f0634fdd70abc6a4e0fee1357db508a6ecd64e9c 100755 GIT binary patch delta 29 lcmca}Tj0)Zfrb{wElktyu<99F=$W<8zQeSA_8n%&Kmf>j41WLs delta 29 jcmca}Tj0)Zfrb{wElktyurh!^`|LYR+h^Zlb_@gnyT=QJ diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index 094f4bbc8..a90b5d552 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -61,7 +61,11 @@ import { convertSigner, getChain } from "./index.js" -import { GENERIC_FALLBACK_SELECTOR, type MODE_MODULE_ENABLE, MODE_VALIDATION } from "./utils/Constants.js" +import { + GENERIC_FALLBACK_SELECTOR, + type MODE_MODULE_ENABLE, + MODE_VALIDATION +} from "./utils/Constants.js" import { ADDRESS_ZERO, DEFAULT_BICONOMY_FACTORY_ADDRESS, @@ -469,7 +473,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * // decimals: 6, * // address: "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a", * // formattedAmount: "1000000", - * // chainId: 80002 + * // chainId: 11155111 * // } * * // or to get the nativeToken balance @@ -482,7 +486,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * // decimals: 18, * // address: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", * // formattedAmount: "1", - * // chainId: 80002 + * // chainId: 11155111 * // } * */ @@ -707,10 +711,10 @@ export class NexusSmartAccount extends BaseSmartContractAccount { const counterFactualAddress = await this.publicClient.readContract({ address: this.factoryAddress, abi: parseAbi([ - "function computeAccountAddress(address, uint256) external view returns (address expectedAddress)" + "function computeAccountAddress(address, uint256, address[], uint8) external view returns (address expectedAddress)" ]), functionName: "computeAccountAddress", - args: [await this.signer.getAddress(), index] + args: [await this.signer.getAddress(), index, [], 0] }) return counterFactualAddress @@ -722,14 +726,17 @@ export class NexusSmartAccount extends BaseSmartContractAccount { async _getAccountContract(): Promise< GetContractReturnType<typeof NexusAccountAbi, PublicClient> > { - if (this.accountContract == null) { - this.accountContract = getContract({ - address: await this.getAddress(), - abi: NexusAccountAbi, - client: this.provider as PublicClient - }) + if (await this.isAccountDeployed()) { + if (this.accountContract == null) { + this.accountContract = getContract({ + address: await this.getAddress(), + abi: NexusAccountAbi, + client: this.provider as PublicClient + }) + } + return this.accountContract } - return this.accountContract + throw new Error("Account is not deployed") } isActiveValidationModuleDefined(): boolean { @@ -1359,7 +1366,10 @@ export class NexusSmartAccount extends BaseSmartContractAccount { const vm = this.activeValidationModule.moduleAddress const key = concat(["0x000000", validationMode ?? MODE_VALIDATION, vm]) const accountAddress = await this.getAddress() - return await this.entryPoint.read.getNonce([accountAddress, BigInt(key)]) + return (await this.entryPoint.read.getNonce([ + accountAddress, + BigInt(key) + ])) as bigint } catch (e) { return BigInt(0) } @@ -1397,7 +1407,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * * let walletClient = createWalletClient({ account, - chain: baseSepolia, + chain: sepolia, transport: http() }); @@ -1411,7 +1421,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { walletClient = createWalletClient({ newOwnerAccount, - chain: baseSepolia, + chain: sepolia, transport: http() }) @@ -1999,10 +2009,10 @@ export class NexusSmartAccount extends BaseSmartContractAccount { return encodeFunctionData({ abi: parseAbi([ - "function createAccount(address eoaOwner, uint256 index) external payable returns (address payable)" + "function createAccount(address eoaOwner, uint256 index, address[] calldata attesters, uint8 threshold) external payable returns (address payable)" ]), functionName: "createAccount", - args: [await this.signer.getAddress(), this.index] + args: [await this.signer.getAddress(), this.index, [], 0] }) } @@ -2020,10 +2030,15 @@ export class NexusSmartAccount extends BaseSmartContractAccount { if (signature.slice(0, 2) !== "0x") { signature = `0x${signature}` } - signature = encodeAbiParameters( - [{ type: "bytes" }, { type: "address" }], - [signature as Hex, this.activeValidationModule.getAddress()] + // @note Signature specific to Nexus Account + signature = encodePacked( + ["address", "bytes"], + [this.activeValidationModule.getAddress(), signature as Hex] ) + // signature = encodeAbiParameters( + // [{ type: "bytes" }, { type: "address" }], + // [signature as Hex, this.activeValidationModule.getAddress()] + // ) if (await this.isAccountDeployed()) { return signature as Hex } @@ -2141,7 +2156,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { data ?? "0x" ])) as boolean } - throw new Error("Account not yet deployed") + throw new Error("Account is not deployed") } getSmartAccountOwner(): SmartAccountSigner { @@ -2454,12 +2469,12 @@ export class NexusSmartAccount extends BaseSmartContractAccount { } async getInstalledModules(): Promise<Address[]> { - const validators = await this.getInstalledValidators(); - const executors = await this.getInstalledExecutors(); - const hook = await this.getActiveHook(); - const fallbackHandler = await this.getFallbackBySelector(); + const validators = await this.getInstalledValidators() + const executors = await this.getInstalledExecutors() + const hook = await this.getActiveHook() + const fallbackHandler = await this.getFallbackBySelector() - return [...validators, ...executors, hook, fallbackHandler]; + return [...validators, ...executors, hook, fallbackHandler] } async getActiveHook(): Promise<Address> { @@ -2469,7 +2484,9 @@ export class NexusSmartAccount extends BaseSmartContractAccount { async getFallbackBySelector(selector?: Hex): Promise<Address> { const accountContract = await this._getAccountContract() - return (await accountContract.read.getFallbackHandlerBySelector([selector ?? GENERIC_FALLBACK_SELECTOR])) as Address + return (await accountContract.read.getFallbackHandlerBySelector([ + selector ?? GENERIC_FALLBACK_SELECTOR + ])) as Address } async supportsModule(moduleType: ModuleType): Promise<boolean> { diff --git a/src/account/abi/EntryPointAbi.ts b/src/account/abi/EntryPointAbi.ts index 695b3e7e7..c803ad1c7 100644 --- a/src/account/abi/EntryPointAbi.ts +++ b/src/account/abi/EntryPointAbi.ts @@ -1,293 +1,43 @@ export const EntryPointAbi = [ { inputs: [ - { - internalType: "uint256", - name: "preOpGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "paid", - type: "uint256" - }, - { - internalType: "uint48", - name: "validAfter", - type: "uint48" - }, - { - internalType: "uint48", - name: "validUntil", - type: "uint48" - }, - { - internalType: "bool", - name: "targetSuccess", - type: "bool" - }, - { - internalType: "bytes", - name: "targetResult", - type: "bytes" - } + { internalType: "bool", name: "success", type: "bool" }, + { internalType: "bytes", name: "ret", type: "bytes" } ], - name: "ExecutionResult", + name: "DelegateAndRevert", type: "error" }, { inputs: [ - { - internalType: "uint256", - name: "opIndex", - type: "uint256" - }, - { - internalType: "string", - name: "reason", - type: "string" - } + { internalType: "uint256", name: "opIndex", type: "uint256" }, + { internalType: "string", name: "reason", type: "string" } ], name: "FailedOp", type: "error" }, { inputs: [ - { - internalType: "address", - name: "sender", - type: "address" - } + { internalType: "uint256", name: "opIndex", type: "uint256" }, + { internalType: "string", name: "reason", type: "string" }, + { internalType: "bytes", name: "inner", type: "bytes" } ], - name: "SenderAddressResult", + name: "FailedOpWithRevert", type: "error" }, { - inputs: [ - { - internalType: "address", - name: "aggregator", - type: "address" - } - ], - name: "SignatureValidationFailed", + inputs: [{ internalType: "bytes", name: "returnData", type: "bytes" }], + name: "PostOpReverted", type: "error" }, + { inputs: [], name: "ReentrancyGuardReentrantCall", type: "error" }, { - inputs: [ - { - components: [ - { - internalType: "uint256", - name: "preOpGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "prefund", - type: "uint256" - }, - { - internalType: "bool", - name: "sigFailed", - type: "bool" - }, - { - internalType: "uint48", - name: "validAfter", - type: "uint48" - }, - { - internalType: "uint48", - name: "validUntil", - type: "uint48" - }, - { - internalType: "bytes", - name: "paymasterContext", - type: "bytes" - } - ], - internalType: "struct IEntryPoint.ReturnInfo", - name: "returnInfo", - type: "tuple" - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256" - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256" - } - ], - internalType: "struct IStakeManager.StakeInfo", - name: "senderInfo", - type: "tuple" - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256" - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256" - } - ], - internalType: "struct IStakeManager.StakeInfo", - name: "factoryInfo", - type: "tuple" - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256" - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256" - } - ], - internalType: "struct IStakeManager.StakeInfo", - name: "paymasterInfo", - type: "tuple" - } - ], - name: "ValidationResult", + inputs: [{ internalType: "address", name: "sender", type: "address" }], + name: "SenderAddressResult", type: "error" }, { - inputs: [ - { - components: [ - { - internalType: "uint256", - name: "preOpGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "prefund", - type: "uint256" - }, - { - internalType: "bool", - name: "sigFailed", - type: "bool" - }, - { - internalType: "uint48", - name: "validAfter", - type: "uint48" - }, - { - internalType: "uint48", - name: "validUntil", - type: "uint48" - }, - { - internalType: "bytes", - name: "paymasterContext", - type: "bytes" - } - ], - internalType: "struct IEntryPoint.ReturnInfo", - name: "returnInfo", - type: "tuple" - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256" - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256" - } - ], - internalType: "struct IStakeManager.StakeInfo", - name: "senderInfo", - type: "tuple" - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256" - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256" - } - ], - internalType: "struct IStakeManager.StakeInfo", - name: "factoryInfo", - type: "tuple" - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256" - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256" - } - ], - internalType: "struct IStakeManager.StakeInfo", - name: "paymasterInfo", - type: "tuple" - }, - { - components: [ - { - internalType: "address", - name: "aggregator", - type: "address" - }, - { - components: [ - { - internalType: "uint256", - name: "stake", - type: "uint256" - }, - { - internalType: "uint256", - name: "unstakeDelaySec", - type: "uint256" - } - ], - internalType: "struct IStakeManager.StakeInfo", - name: "stakeInfo", - type: "tuple" - } - ], - internalType: "struct IEntryPoint.AggregatorStakeInfo", - name: "aggregatorInfo", - type: "tuple" - } - ], - name: "ValidationResultWithAggregation", + inputs: [{ internalType: "address", name: "aggregator", type: "address" }], + name: "SignatureValidationFailed", type: "error" }, { @@ -321,29 +71,55 @@ export const EntryPointAbi = [ name: "AccountDeployed", type: "event" }, + { anonymous: false, inputs: [], name: "BeforeExecution", type: "event" }, { anonymous: false, - inputs: [], - name: "BeforeExecution", + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "totalDeposit", + type: "uint256" + } + ], + name: "Deposited", type: "event" }, { anonymous: false, inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32" + }, { indexed: true, internalType: "address", - name: "account", + name: "sender", type: "address" }, { indexed: false, internalType: "uint256", - name: "totalDeposit", + name: "nonce", type: "uint256" + }, + { + indexed: false, + internalType: "bytes", + name: "revertReason", + type: "bytes" } ], - name: "Deposited", + name: "PostOpRevertReason", type: "event" }, { @@ -455,12 +231,7 @@ export const EntryPointAbi = [ name: "nonce", type: "uint256" }, - { - indexed: false, - internalType: "bool", - name: "success", - type: "bool" - }, + { indexed: false, internalType: "bool", name: "success", type: "bool" }, { indexed: false, internalType: "uint256", @@ -477,6 +248,31 @@ export const EntryPointAbi = [ name: "UserOperationEvent", type: "event" }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32" + }, + { + indexed: true, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "nonce", + type: "uint256" + } + ], + name: "UserOperationPrefundTooLow", + type: "event" + }, { anonymous: false, inputs: [ @@ -534,162 +330,62 @@ export const EntryPointAbi = [ type: "event" }, { - inputs: [], - name: "SIG_VALIDATION_FAILED", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } + inputs: [ + { internalType: "uint32", name: "unstakeDelaySec", type: "uint32" } ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [{ internalType: "address", name: "account", type: "address" }], + name: "balanceOf", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], stateMutability: "view", type: "function" }, { inputs: [ - { - internalType: "bytes", - name: "initCode", - type: "bytes" - }, - { - internalType: "address", - name: "sender", - type: "address" - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes" - } - ], - name: "_validateSenderAndPaymaster", - outputs: [], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint32", - name: "unstakeDelaySec", - type: "uint32" - } + { internalType: "address", name: "target", type: "address" }, + { internalType: "bytes", name: "data", type: "bytes" } ], - name: "addStake", + name: "delegateAndRevert", outputs: [], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address" - } - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], - stateMutability: "view", + stateMutability: "nonpayable", type: "function" }, { - inputs: [ - { - internalType: "address", - name: "account", - type: "address" - } - ], + inputs: [{ internalType: "address", name: "account", type: "address" }], name: "depositTo", outputs: [], stateMutability: "payable", type: "function" }, { - inputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], + inputs: [{ internalType: "address", name: "", type: "address" }], name: "deposits", outputs: [ - { - internalType: "uint112", - name: "deposit", - type: "uint112" - }, - { - internalType: "bool", - name: "staked", - type: "bool" - }, - { - internalType: "uint112", - name: "stake", - type: "uint112" - }, - { - internalType: "uint32", - name: "unstakeDelaySec", - type: "uint32" - }, - { - internalType: "uint48", - name: "withdrawTime", - type: "uint48" - } + { internalType: "uint256", name: "deposit", type: "uint256" }, + { internalType: "bool", name: "staked", type: "bool" }, + { internalType: "uint112", name: "stake", type: "uint112" }, + { internalType: "uint32", name: "unstakeDelaySec", type: "uint32" }, + { internalType: "uint48", name: "withdrawTime", type: "uint48" } ], stateMutability: "view", type: "function" }, { - inputs: [ - { - internalType: "address", - name: "account", - type: "address" - } - ], + inputs: [{ internalType: "address", name: "account", type: "address" }], name: "getDepositInfo", outputs: [ { components: [ - { - internalType: "uint112", - name: "deposit", - type: "uint112" - }, - { - internalType: "bool", - name: "staked", - type: "bool" - }, - { - internalType: "uint112", - name: "stake", - type: "uint112" - }, - { - internalType: "uint32", - name: "unstakeDelaySec", - type: "uint32" - }, - { - internalType: "uint48", - name: "withdrawTime", - type: "uint48" - } + { internalType: "uint256", name: "deposit", type: "uint256" }, + { internalType: "bool", name: "staked", type: "bool" }, + { internalType: "uint112", name: "stake", type: "uint112" }, + { internalType: "uint32", name: "unstakeDelaySec", type: "uint32" }, + { internalType: "uint48", name: "withdrawTime", type: "uint48" } ], internalType: "struct IStakeManager.DepositInfo", name: "info", @@ -701,36 +397,16 @@ export const EntryPointAbi = [ }, { inputs: [ - { - internalType: "address", - name: "sender", - type: "address" - }, - { - internalType: "uint192", - name: "key", - type: "uint192" - } + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint192", name: "key", type: "uint192" } ], name: "getNonce", - outputs: [ - { - internalType: "uint256", - name: "nonce", - type: "uint256" - } - ], + outputs: [{ internalType: "uint256", name: "nonce", type: "uint256" }], stateMutability: "view", type: "function" }, { - inputs: [ - { - internalType: "bytes", - name: "initCode", - type: "bytes" - } - ], + inputs: [{ internalType: "bytes", name: "initCode", type: "bytes" }], name: "getSenderAddress", outputs: [], stateMutability: "nonpayable", @@ -740,75 +416,31 @@ export const EntryPointAbi = [ inputs: [ { components: [ + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, { - internalType: "address", - name: "sender", - type: "address" - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256" - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes" - }, - { - internalType: "bytes", - name: "callData", - type: "bytes" - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256" - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256" + internalType: "bytes32", + name: "accountGasLimits", + type: "bytes32" }, { internalType: "uint256", name: "preVerificationGas", type: "uint256" }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256" - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes" - }, - { - internalType: "bytes", - name: "signature", - type: "bytes" - } + { internalType: "bytes32", name: "gasFees", type: "bytes32" }, + { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, + { internalType: "bytes", name: "signature", type: "bytes" } ], - internalType: "struct UserOperation", + internalType: "struct PackedUserOperation", name: "userOp", type: "tuple" } ], name: "getUserOpHash", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], + outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], stateMutability: "view", type: "function" }, @@ -818,63 +450,29 @@ export const EntryPointAbi = [ components: [ { components: [ + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, { - internalType: "address", - name: "sender", - type: "address" - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256" - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes" - }, - { - internalType: "bytes", - name: "callData", - type: "bytes" - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256" - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256" + internalType: "bytes32", + name: "accountGasLimits", + type: "bytes32" }, { internalType: "uint256", name: "preVerificationGas", type: "uint256" }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256" - }, + { internalType: "bytes32", name: "gasFees", type: "bytes32" }, { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, - { - internalType: "bytes", - name: "signature", - type: "bytes" - } + { internalType: "bytes", name: "signature", type: "bytes" } ], - internalType: "struct UserOperation[]", + internalType: "struct PackedUserOperation[]", name: "userOps", type: "tuple[]" }, @@ -883,21 +481,13 @@ export const EntryPointAbi = [ name: "aggregator", type: "address" }, - { - internalType: "bytes", - name: "signature", - type: "bytes" - } + { internalType: "bytes", name: "signature", type: "bytes" } ], internalType: "struct IEntryPoint.UserOpsPerAggregator[]", name: "opsPerAggregator", type: "tuple[]" }, - { - internalType: "address payable", - name: "beneficiary", - type: "address" - } + { internalType: "address payable", name: "beneficiary", type: "address" } ], name: "handleAggregatedOps", outputs: [], @@ -908,71 +498,29 @@ export const EntryPointAbi = [ inputs: [ { components: [ + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, { - internalType: "address", - name: "sender", - type: "address" - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256" - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes" - }, - { - internalType: "bytes", - name: "callData", - type: "bytes" - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256" - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256" + internalType: "bytes32", + name: "accountGasLimits", + type: "bytes32" }, { internalType: "uint256", name: "preVerificationGas", type: "uint256" }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256" - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes" - }, - { - internalType: "bytes", - name: "signature", - type: "bytes" - } + { internalType: "bytes32", name: "gasFees", type: "bytes32" }, + { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, + { internalType: "bytes", name: "signature", type: "bytes" } ], - internalType: "struct UserOperation[]", + internalType: "struct PackedUserOperation[]", name: "ops", type: "tuple[]" }, - { - internalType: "address payable", - name: "beneficiary", - type: "address" - } + { internalType: "address payable", name: "beneficiary", type: "address" } ], name: "handleOps", outputs: [], @@ -980,13 +528,7 @@ export const EntryPointAbi = [ type: "function" }, { - inputs: [ - { - internalType: "uint192", - name: "key", - type: "uint192" - } - ], + inputs: [{ internalType: "uint192", name: "key", type: "uint192" }], name: "incrementNonce", outputs: [], stateMutability: "nonpayable", @@ -994,23 +536,16 @@ export const EntryPointAbi = [ }, { inputs: [ - { - internalType: "bytes", - name: "callData", - type: "bytes" - }, + { internalType: "bytes", name: "callData", type: "bytes" }, { components: [ { components: [ - { - internalType: "address", - name: "sender", - type: "address" - }, + { internalType: "address", name: "sender", type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, { internalType: "uint256", - name: "nonce", + name: "verificationGasLimit", type: "uint256" }, { @@ -1020,19 +555,20 @@ export const EntryPointAbi = [ }, { internalType: "uint256", - name: "verificationGasLimit", + name: "paymasterVerificationGasLimit", type: "uint256" }, { internalType: "uint256", - name: "preVerificationGas", + name: "paymasterPostOpGasLimit", type: "uint256" }, { - internalType: "address", - name: "paymaster", - type: "address" + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" }, + { internalType: "address", name: "paymaster", type: "address" }, { internalType: "uint256", name: "maxFeePerGas", @@ -1048,220 +584,39 @@ export const EntryPointAbi = [ name: "mUserOp", type: "tuple" }, - { - internalType: "bytes32", - name: "userOpHash", - type: "bytes32" - }, - { - internalType: "uint256", - name: "prefund", - type: "uint256" - }, - { - internalType: "uint256", - name: "contextOffset", - type: "uint256" - }, - { - internalType: "uint256", - name: "preOpGas", - type: "uint256" - } + { internalType: "bytes32", name: "userOpHash", type: "bytes32" }, + { internalType: "uint256", name: "prefund", type: "uint256" }, + { internalType: "uint256", name: "contextOffset", type: "uint256" }, + { internalType: "uint256", name: "preOpGas", type: "uint256" } ], internalType: "struct EntryPoint.UserOpInfo", name: "opInfo", type: "tuple" }, - { - internalType: "bytes", - name: "context", - type: "bytes" - } + { internalType: "bytes", name: "context", type: "bytes" } ], name: "innerHandleOp", outputs: [ - { - internalType: "uint256", - name: "actualGasCost", - type: "uint256" - } + { internalType: "uint256", name: "actualGasCost", type: "uint256" } ], stateMutability: "nonpayable", type: "function" }, { inputs: [ - { - internalType: "address", - name: "", - type: "address" - }, - { - internalType: "uint192", - name: "", - type: "uint192" - } + { internalType: "address", name: "", type: "address" }, + { internalType: "uint192", name: "", type: "uint192" } ], name: "nonceSequenceNumber", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256" - } - ], + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], stateMutability: "view", type: "function" }, { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address" - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256" - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes" - }, - { - internalType: "bytes", - name: "callData", - type: "bytes" - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256" - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256" - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256" - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes" - }, - { - internalType: "bytes", - name: "signature", - type: "bytes" - } - ], - internalType: "struct UserOperation", - name: "op", - type: "tuple" - }, - { - internalType: "address", - name: "target", - type: "address" - }, - { - internalType: "bytes", - name: "targetCallData", - type: "bytes" - } - ], - name: "simulateHandleOp", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - components: [ - { - internalType: "address", - name: "sender", - type: "address" - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256" - }, - { - internalType: "bytes", - name: "initCode", - type: "bytes" - }, - { - internalType: "bytes", - name: "callData", - type: "bytes" - }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256" - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256" - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256" - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes" - }, - { - internalType: "bytes", - name: "signature", - type: "bytes" - } - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple" - } - ], - name: "simulateValidation", - outputs: [], - stateMutability: "nonpayable", + inputs: [{ internalType: "bytes4", name: "interfaceId", type: "bytes4" }], + name: "supportsInterface", + outputs: [{ internalType: "bool", name: "", type: "bool" }], + stateMutability: "view", type: "function" }, { @@ -1291,19 +646,12 @@ export const EntryPointAbi = [ name: "withdrawAddress", type: "address" }, - { - internalType: "uint256", - name: "withdrawAmount", - type: "uint256" - } + { internalType: "uint256", name: "withdrawAmount", type: "uint256" } ], name: "withdrawTo", outputs: [], stateMutability: "nonpayable", type: "function" }, - { - stateMutability: "payable", - type: "receive" - } -] as const + { stateMutability: "payable", type: "receive" } +] diff --git a/src/account/abi/K1ValidatorFactory.ts b/src/account/abi/K1ValidatorFactory.ts index 83cdd58d8..dea3c39c6 100644 --- a/src/account/abi/K1ValidatorFactory.ts +++ b/src/account/abi/K1ValidatorFactory.ts @@ -20,6 +20,11 @@ export const BiconomyFactoryAbi = [ internalType: "contract Bootstrap", name: "bootstrapper", type: "address" + }, + { + internalType: "contract IERC7484", + name: "registry", + type: "address" } ], stateMutability: "nonpayable", @@ -164,6 +169,19 @@ export const BiconomyFactoryAbi = [ stateMutability: "view", type: "function" }, + { + inputs: [], + name: "REGISTRY", + outputs: [ + { + internalType: "contract IERC7484", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, { inputs: [ { @@ -213,6 +231,16 @@ export const BiconomyFactoryAbi = [ internalType: "uint256", name: "", type: "uint256" + }, + { + internalType: "address[]", + name: "", + type: "address[]" + }, + { + internalType: "uint8", + name: "", + type: "uint8" } ], name: "computeAccountAddress", @@ -237,6 +265,16 @@ export const BiconomyFactoryAbi = [ internalType: "uint256", name: "index", type: "uint256" + }, + { + internalType: "address[]", + name: "attesters", + type: "address[]" + }, + { + internalType: "uint8", + name: "threshold", + type: "uint8" } ], name: "createAccount", diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index 7712d679b..5aee77b14 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -22,7 +22,7 @@ export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { // will always be latest factory address export const DEFAULT_BICONOMY_FACTORY_ADDRESS = - "0xf7cF950DA05431eC1F48fD682fa993Bbaeed9a9d" + "0x838eA1C60B57e967F14bF84141596A6FdB1909aa" // K1ValidatorFactory export const DEFAULT_FALLBACK_HANDLER_ADDRESS = "0x0bBa6d96BD616BedC6BFaa341742FD43c60b83C1" @@ -97,15 +97,16 @@ export const ERC20_ABI = [ "function decimals() external view returns (uint8)" ] -// BASE SEPOLIA CONTRACTS -export const K1_VALIDATOR = "0x9C08e1CE188C29bAaeBc64A08cF2Ec44207749B6" -export const OWNABLE_VALIDATOR = "0xBf2137a23F439Ca5Aa4360cC6970D70b24D07ea2" // not deployed -export const NEXUS_IMPLEMENTATION = "0x66Ae45ad5BE4be08a70AD99e9cF41e6d6884B06F" -export const BOOTSTRAP = "0x1ad17f0Dc85Da8Ed2CBA7415D290cCb0D79355C9" -export const BOOTSTRAP_LIB = "0x44965180dc3F703448bDB859D9F1a55f0B8E6C8F" -export const K1_VALIDATOR_FACTORY = "0xf7cF950DA05431eC1F48fD682fa993Bbaeed9a9d" +// SEPOLIA CONTRACTS +export const K1_VALIDATOR = "0x0839518b94038b0B6044f71830b0c79D2fD8D07d" +export const OWNABLE_VALIDATOR = "0xBf2137a23F439Ca5Aa4360cC6970D70b24D07ea2" +export const NEXUS_IMPLEMENTATION = "0x5f22E8c476Cc95A8015296a304bf3410ab04D1fA" +export const BOOTSTRAP = "0x2adC3A47AC2E1235374CB6F7A9aD83e7De11F6C3" +export const BOOTSTRAP_LIB = "0xbcFEc7E020F7cfD6F316c351a0AAc39e7d3A2314" +export const K1_VALIDATOR_FACTORY = "0x838eA1C60B57e967F14bF84141596A6FdB1909aa" export const BICONOMY_META_FACTORY = - "0x4F9218eD5329D586237B8cAFe3d8778b94874186" + "0x50E77b227D036B277AfDB9F4B4bBcF0a1f22A51f" +export const MOCK_REGISTRY = "0x5d79F6247683fE309219e7399c26A63A72361CF0" export const ENTRYPOINT_ADDRESS_V07 = "0x0000000071727De22E5E9d8BAf0edAc6f37da032" diff --git a/src/bundler/utils/Constants.ts b/src/bundler/utils/Constants.ts index 41badd160..fa1b3f6ea 100644 --- a/src/bundler/utils/Constants.ts +++ b/src/bundler/utils/Constants.ts @@ -22,7 +22,7 @@ export const UserOpWaitForTxHashIntervals: { [key in number]?: number } = { // Note: Default value is 30000 (30sec) export const UserOpReceiptMaxDurationIntervals: { [key in number]?: number } = { [1]: 300000, - [80002]: 50000, + [11155111]: 50000, [137]: 60000, [56]: 50000, [97]: 50000, diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index ed5cba155..dd9131e78 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -1,18 +1,23 @@ -import { PaymasterMode } from "@biconomy/account" import { JsonRpcProvider } from "@ethersproject/providers" import { Wallet } from "@ethersproject/wallet" import { http, + Address, type Hex, + concat, createPublicClient, createWalletClient, + encodeAbiParameters, encodeFunctionData, getContract, + hashMessage, + keccak256, parseAbi, - verifyMessage + parseAbiParameters, + toBytes } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { bsc } from "viem/chains" +import { bsc, sepolia } from "viem/chains" import { beforeAll, describe, expect, test } from "vitest" import { DEFAULT_BICONOMY_FACTORY_ADDRESS, @@ -21,6 +26,7 @@ import { ModuleType, NATIVE_TOKEN_ALIAS, type NexusSmartAccountConfig, + UserOperationStruct, compareChainIds, createSmartAccountClient, makeInstallDataAndHash @@ -28,13 +34,12 @@ import { import { getChain } from "../../src/account" import type { NexusSmartAccount } from "../../src/account/NexusSmartAccount" import { BiconomyFactoryAbi } from "../../src/account/abi/K1ValidatorFactory" -import { ACCOUNT_MODES } from "../../src/bundler/utils/Constants" +import { NexusAccountAbi } from "../../src/account/abi/SmartAccount" import { createK1ValidatorModule } from "../../src/modules" -import { getBundlerUrl, getConfig } from "../utils" +import { checkBalance, getBundlerUrl, getConfig } from "../utils" describe("Account:Read", () => { const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" const { chain, chainId, @@ -83,6 +88,22 @@ describe("Account:Read", () => { account.getAccountAddress() ) ) + + if (!(await smartAccount.isAccountDeployed())) { + // await walletClient.sendTransaction({ + // to: smartAccountAddress, + // value: parseEther("0.01") + // }) + await smartAccount.deploy() + } + + if (!(await smartAccountTwo.isAccountDeployed())) { + // await walletClientTwo.sendTransaction({ + // to: smartAccountAddressTwo, + // value: parseEther("0.01") + // }) + await smartAccountTwo.deploy() + } }) test.concurrent( @@ -153,8 +174,12 @@ describe("Account:Read", () => { test.concurrent( "should get all modules", async () => { - const modules = await smartAccount.getInstalledModules() - console.log(modules, "modules"); + const modules = smartAccount.getInstalledModules() + if (await smartAccount.isAccountDeployed()) { + expect(modules).resolves + } else { + expect(modules).rejects.toThrow("Account is not deployed") + } }, 30000 ) @@ -162,11 +187,15 @@ describe("Account:Read", () => { test.concurrent( "should check if module is enabled on the smart account", async () => { - const isEnabled = await smartAccount.isModuleInstalled({ + const isEnabled = smartAccount.isModuleInstalled({ moduleType: ModuleType.Validation, moduleAddress: K1_VALIDATOR }) - expect(isEnabled).toBeTruthy() + if (await smartAccount.isAccountDeployed()) { + expect(isEnabled).resolves.toBeTruthy() + } else { + expect(isEnabled).rejects.toThrow("Account is not deployed") + } }, 30000 ) @@ -174,41 +203,18 @@ describe("Account:Read", () => { test.concurrent( "enable mode", async () => { - const result = makeInstallDataAndHash(walletClient.account.address, [{moduleType: ModuleType.Validation, config: walletClient.account.address}]) + const result = makeInstallDataAndHash(walletClient.account.address, [ + { + moduleType: ModuleType.Validation, + config: walletClient.account.address + } + ]) console.log(result, "result") + expect(result).toBeTruthy() }, 30000 ) - // test.concurrent( - // "should get disabled module data", - // async () => { - // const disableModuleData = await smartAccount.getDisableModuleData( - // DEFAULT_ECDSA_OWNERSHIP_MODULE, - // DEFAULT_ECDSA_OWNERSHIP_MODULE - // ) - // expect(disableModuleData).toBeTruthy() - // }, - // 30000 - // ) - - // test.concurrent( - // "should get setup and enable module data", - // async () => { - // const module = await createECDSAOwnershipValidationModule({ - // signer: walletClient - // }) - // const initData = await module.getInitData() - // const setupAndEnableModuleData = - // await smartAccount.getSetupAndEnableModuleData( - // DEFAULT_ECDSA_OWNERSHIP_MODULE, - // initData - // ) - // expect(setupAndEnableModuleData).toBeTruthy() - // }, - // 30000 - // ) - test.concurrent( "should create a smartAccountClient from an ethers signer", async () => { @@ -220,12 +226,6 @@ describe("Account:Read", () => { bundlerUrl, rpcUrl: chain.rpcUrls.default.http[0] }) - - const sig = await smartAccount.signMessage("test") - console.log(sig, "Signature") - - const address = await smartAccount.getAccountAddress() - expect(address).toBeTruthy() } ) @@ -343,6 +343,7 @@ describe("Account:Read", () => { expect(module).toBeTruthy() }) + // @note Ignored untill we implement Paymaster // test.concurrent( // "should create a smart account with paymaster by creating instance", // async () => { @@ -377,7 +378,6 @@ describe("Account:Read", () => { ).rejects.toThrow("Cannot consume a viem wallet without a chainId") ) } - ) test.concurrent( @@ -426,9 +426,9 @@ describe("Account:Read", () => { test.concurrent("should not throw and error, chain ids match", async () => { const mockBundlerUrl = - "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" + "https://bundler.biconomy.io/api/v2/11155111/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + "https://paymaster.biconomy.io/api/v1/11155111/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" const config: NexusSmartAccountConfig = { signer: walletClient, @@ -465,10 +465,10 @@ describe("Account:Read", () => { ) test.concurrent( - "should throw and error, signer has chain id (56) and paymasterUrl has chain id (80002)", + "should throw and error, signer has chain id (56) and paymasterUrl has chain id (11155111)", async () => { const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/80002/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + "https://paymaster.biconomy.io/api/v1/11155111/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" const walletClientBsc = createWalletClient({ account: walletClient.account, @@ -547,45 +547,16 @@ describe("Account:Read", () => { const smartAccountAddressFromContracts = await factoryContract.read.computeAccountAddress([ - account.address, - BigInt(0) + await smartAccount.getSmartAccountOwner().getAddress(), + BigInt(0), + [], + 0 ]) expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) } ) - // test.concurrent( - // "should have matching #getUserOpHash and entryPoint.getUserOpHash", - // async () => { - // const userOp: UserOperationStruct = { - // sender: "0x".padEnd(42, "1") as string, - // nonce: 2, - // initCode: "0x3333", - // callData: "0x4444", - // callGasLimit: 5, - // verificationGasLimit: 6, - // preVerificationGas: 7, - // maxFeePerGas: 8, - // maxPriorityFeePerGas: 9, - // paymasterAndData: "0xaaaaaa", - // signature: "0xbbbb" - // } - - // const epHash = await publicClient.readContract({ - // address: DEFAULT_ENTRYPOINT_ADDRESS, - // abi: EntryPointAbi, - // functionName: "getUserOpHash", - // // @ts-ignore - // args: [userOp] - // }) - - // const hash = await smartAccount.getUserOpHash(userOp) - // expect(hash).toBe(epHash) - // }, - // 30000 - // ) - test.concurrent( "should be deployed to counterfactual address", async () => { @@ -593,8 +564,11 @@ describe("Account:Read", () => { const byteCode = await publicClient.getBytecode({ address: accountAddress as Hex }) - - expect(byteCode?.length).toBeGreaterThan(2) + if (await smartAccount.isAccountDeployed()) { + expect(byteCode?.length).toBeGreaterThan(2) + } else { + expect(byteCode?.length).toBe(undefined) + } }, 10000 ) @@ -637,25 +611,29 @@ describe("Account:Read", () => { test.concurrent( "should fail to deploy a smart account if already deployed", async () => { - expect(async () => smartAccount.deploy()).rejects.toThrow( - ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED - ) + if (await smartAccount.isAccountDeployed()) { + expect(async () => smartAccount.deploy()).rejects.toThrow( + ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED + ) + } else { + expect(smartAccount.deploy()).resolves + } }, 60000 ) - // test.concurrent("should fetch balances for smartAccount", async () => { - // const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - // const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - // const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ - // token - // ]) + test.concurrent("should fetch balances for smartAccount", async () => { + const token = "0x69835C1f31ed0721A05d5711C1d669C10802a3E1" + const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) + const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ + token + ]) - // expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) - // }) + expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) + }) test.concurrent("should error if no recipient exists", async () => { - const token: Hex = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + const token: Hex = "0x69835C1f31ed0721A05d5711C1d669C10802a3E1" const txs = [ { address: token, amount: BigInt(1), recipient: sender }, @@ -690,38 +668,78 @@ describe("Account:Read", () => { 60000 ) - test.concurrent( - "should check balance of supported token", - async () => { - const tokens = await smartAccount.getSupportedTokens() - const [firstToken] = tokens - - expect(tokens.length).toBeGreaterThan(0) - expect(tokens[0]).toHaveProperty("balance") - expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) - }, - 60000 - ) - + // @note Skip until we implement the Paymaster // test.concurrent( - // "should verify a correct signature through isValidSignature", + // "should check balance of supported token", // async () => { - // const eip1271MagicValue = "0x1626ba7e" - // const message = "Some message from dApp" - // const messageHash = hashMessage(message) - // const signature = await smartAccount.signMessage(messageHash) - - // const response = await publicClient.readContract({ - // address: await smartAccount.getAccountAddress(), - // abi: NexusAccountAbi, - // functionName: "isValidSignature", - // args: [messageHash, signature] - // }) + // const tokens = await smartAccount.getSupportedTokens() + // const [firstToken] = tokens - // expect(response).toBe(eip1271MagicValue) - // } + // expect(tokens.length).toBeGreaterThan(0) + // expect(tokens[0]).toHaveProperty("balance") + // expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) + // }, + // 60000 // ) + // @note Nexus SA signature needs to contain the validator module address in the first 20 bytes + test.concurrent( + "should verify a correct 712 signature through isValidSignature", + async () => { + if (await smartAccount.isAccountDeployed()) { + const eip1271MagicValue = "0x1626ba7e" + const data = keccak256("0x1234") + + // Define constants as per the original Solidity function + const DOMAIN_NAME = "Nexus" + const DOMAIN_VERSION = "1.0.0-beta" + const DOMAIN_TYPEHASH = + "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" + const PARENT_TYPEHASH = "PersonalSign(bytes prefixed)" + const ALICE_ACCOUNT = smartAccountAddress + const chainId = sepolia.id + + // Calculate the domain separator + const domainSeparator = keccak256( + encodeAbiParameters( + parseAbiParameters("bytes32, bytes32, bytes32, uint256, address"), + [ + keccak256(toBytes(DOMAIN_TYPEHASH)), + keccak256(toBytes(DOMAIN_NAME)), + keccak256(toBytes(DOMAIN_VERSION)), + BigInt(chainId), + ALICE_ACCOUNT + ] + ) + ) + + // Calculate the parent struct hash + const parentStructHash = keccak256( + encodeAbiParameters(parseAbiParameters("bytes32, bytes32"), [ + keccak256(toBytes(PARENT_TYPEHASH)), + data + ]) + ) + + // Calculate the final hash + const resultHash: Hex = keccak256( + concat(["0x1901", domainSeparator, parentStructHash]) + ) + + const signature = await smartAccount.signMessage(resultHash) + + const response = await publicClient.readContract({ + address: await smartAccount.getAddress(), + abi: NexusAccountAbi, + functionName: "isValidSignature", + args: [data, signature] + }) + + expect(response).toBe(eip1271MagicValue) + } + } + ) + test.concurrent("should verifySignature of deployed", async () => { const smartAccount = await createSmartAccountClient({ signer: walletClient, @@ -729,122 +747,127 @@ describe("Account:Read", () => { }) const message = "hello world" - const signature = await smartAccount.signMessage(message) - const isVerified = await publicClient.verifyMessage({ - address: await smartAccount.getSigner().getAddress(), - message, - signature + const isVerified = await publicClient.readContract({ + address: await smartAccount.getAddress(), + abi: NexusAccountAbi, + functionName: "isValidSignature", + args: [hashMessage(message), signature] }) expect(isVerified).toBeTruthy() }) test.concurrent("should verifySignature of not deployed", async () => { - const smartAccount = await createSmartAccountClient({ + const undeployedSmartAccount = await createSmartAccountClient({ signer: walletClient, bundlerUrl, - index: 100n + index: 99n }) + const isDeployed = await undeployedSmartAccount.isAccountDeployed() + if (!isDeployed) { + const message = "hello world" - const message = "hello world" + const signature = await smartAccount.signMessage(message) - const signature = await smartAccount.signMessage(message) - - const isVerified = await publicClient.verifyMessage({ - address: await smartAccount.getSigner().getAddress(), - message, - signature - }) + const isVerified = await publicClient.readContract({ + address: await smartAccount.getAddress(), + abi: NexusAccountAbi, + functionName: "isValidSignature", + args: [hashMessage(message), signature] + }) - expect(isVerified).toBeTruthy() + expect(isVerified).toBeTruthy() + } }) - test.concurrent( - "should simulate a user operation execution, expecting to fail", - async () => { - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl - }) + // @note Removed untill we implement the Bundler (Pimlico's bundler does no behave as expected in this test) + // test.concurrent( + // "should simulate a user operation execution, expecting to fail", + // async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl + // }) - const balances = await smartAccount.getBalances() - expect(balances[0].amount).toBeGreaterThan(0n) + // const balances = await smartAccount.getBalances() + // expect(balances[0].amount).toBeGreaterThan(0n) - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function deposit()"]), - functionName: "deposit" - }) + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function deposit()"]), + // functionName: "deposit" + // }) - const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" + // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" - // fail if value is not bigger than 1 - // the contract call requires a deposit of at least 1 wei - const tx1 = { - to: amoyTestContract as Hex, - data: encodedCall, - value: 0 - } - const tx2 = { - to: amoyTestContract as Hex, - data: encodedCall, - value: 2 - } + // // fail if value is not bigger than 1 + // // the contract call requires a deposit of at least 1 wei + // const tx1 = { + // to: amoyTestContract as Hex, + // data: encodedCall, + // value: 0 + // } + // const tx2 = { + // to: amoyTestContract as Hex, + // data: encodedCall, + // value: 2 + // } - await expect(smartAccount.buildUserOp([tx1, tx2])).rejects.toThrow() - } - ) + // await expect(smartAccount.buildUserOp([tx1, tx2])).rejects.toThrow() + // } + // ) - test.concurrent( - "should simulate a user operation execution, expecting to pass execution", - async () => { - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl - }) + // @note Removed untill we implement the Bundler (Pimlico's bundler does no behave as expected in this test) + // test.concurrent( + // "should simulate a user operation execution, expecting to pass execution", + // async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl + // }) - const balances = await smartAccount.getBalances() - expect(balances[0].amount).toBeGreaterThan(0n) + // const balances = await smartAccount.getBalances() + // expect(balances[0].amount).toBeGreaterThan(0n) - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function deposit()"]), - functionName: "deposit" - }) + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function deposit()"]), + // functionName: "deposit" + // }) - const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" + // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" - // fail if value is not bigger than 1 - // the contract call requires a deposit of at least 1 wei - const tx1 = { - to: amoyTestContract as Hex, - data: encodedCall, - value: 2 - } - const tx2 = { - to: amoyTestContract as Hex, - data: encodedCall, - value: 2 - } + // // fail if value is not bigger than 1 + // // the contract call requires a deposit of at least 1 wei + // const tx1 = { + // to: amoyTestContract as Hex, + // data: encodedCall, + // value: 2 + // } + // const tx2 = { + // to: amoyTestContract as Hex, + // data: encodedCall, + // value: 2 + // } - await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() - } - ) + // await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() + // } + // ) - test.concurrent("Should verify supported modes", async () => { - expect( - await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_SINGLE) - ).to.be.true - expect( - await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_BATCH) - ).to.be.true - expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_BATCH)).to - .be.true - expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_SINGLE)) - .to.be.true - - expect( - await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DELEGATE_SINGLE) - ).to.be.false - }) + // test.concurrent("Should verify supported modes", async () => { + // expect( + // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_SINGLE) + // ).to.be.true + // expect( + // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_BATCH) + // ).to.be.true + // expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_BATCH)).to + // .be.true + // expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_SINGLE)) + // .to.be.true + + // expect( + // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DELEGATE_SINGLE) + // ).to.be.false + // }) }) diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 4ce0c2f0a..f8ffb3e79 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -39,7 +39,7 @@ import { getConfig } from "../utils" describe("Account:Write", async () => { const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + const token = "0x69835C1f31ed0721A05d5711C1d669C10802a3E1" const { chain, chainId, @@ -73,10 +73,7 @@ describe("Account:Write", async () => { }) const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) - smartAccount.setactiveExecutionModule(ownableExecutorModule) - - console.log(`Using SA at address : ${await smartAccount.getAddress()}`) - console.log(`Using Signer with address : ${await account.address}`) + smartAccount.setActiveExecutionModule(ownableExecutorModule) describe("Account:Basics", async () => { test("Build a user op with pimlico bundler", async () => { @@ -93,119 +90,118 @@ describe("Account:Write", async () => { expect(userOp).toBeTruthy() }, 60000) - // test("Mint NFT - Single Call", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) + test("Mint NFT - Single Call", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) - // console.log(recipient, "recipient") + // smartAccount.setActiveValidationModule() - // // smartAccount.setActiveValidationModule() + // const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: K1_VALIDATOR}); + // console.log(isInstalled); - // // const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: K1_VALIDATOR}); - // // console.log(isInstalled); + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } + const gasCost = await smartAccount.getGasEstimate([transaction]) + console.log(gasCost, "gasCost") - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall - // } - // const gasCost = await smartAccount.getGasEstimate([transaction]) - // console.log(gasCost, "gasCost") + const response = await smartAccount.sendTransaction([transaction]) + console.log(response, "response") - // const response = await smartAccount.sendTransaction([transaction]) - // const receipt = await response.wait() + const receipt = await response.wait() + console.log(receipt, "receipt") - // console.log(receipt, "receipt") + // expect(receipt.userOpHash).toBeTruthy() + }, 60000) - // expect(receipt.userOpHash).toBeTruthy() - // }, 60000) + // test("Use enable mode", async () => { + // const counterAddress = "0x6BFE41FF0605a87911c0542bF958691ea2ac77f8" // base sepolia - test("Use enable mode", async () => { - const counterAddress = "0x6BFE41FF0605a87911c0542bF958691ea2ac77f8" // base sepolia + // const counterBefore = await publicClient.readContract({ + // address: counterAddress, + // abi: parseAbi(["function getCount() external view returns(uint256)"]), + // functionName: "getCount" + // }) - const counterBefore = await publicClient.readContract({ - address: counterAddress, - abi: parseAbi(["function getCount() external view returns(uint256)"]), - functionName: "getCount" - }) + // console.log(counterBefore, "counter before") - console.log(counterBefore, "counter before") + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function increment() external view returns(uint256)"]), + // functionName: "increment" + // }) + // const userOp = await smartAccount.buildUserOp( + // [{ to: counterAddress, data: encodedCall }], + // { nonceOptions: { validationMode: MODE_MODULE_ENABLE } } + // ) + + // // Prepare Enable Mode Data + // const validatorConfig = pad( + // toBytes("0xdB9426d6cE27071b3a806f95B0d9430455d4d4c6"), + // { size: 32 } + // ) + // const executorConfig = pad(hexToBytes("0x2222"), { size: 32 }) + + // const validatorInstallData = concat([ + // toBytes(ModuleType.Validation), + // validatorConfig + // ]) - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function increment() external view returns(uint256)"]), - functionName: "increment" - }) - const userOp = await smartAccount.buildUserOp( - [{ to: counterAddress, data: encodedCall }], - { nonceOptions: { validationMode: MODE_MODULE_ENABLE } } - ) - - // Prepare Enable Mode Data - const validatorConfig = pad( - toBytes("0xdB9426d6cE27071b3a806f95B0d9430455d4d4c6"), - { size: 32 } - ) - const executorConfig = pad(hexToBytes("0x2222"), { size: 32 }) - - const validatorInstallData = concat([ - toBytes(ModuleType.Validation), - validatorConfig - ]) - - const executorInstallData = concat([ - toBytes(ModuleType.Execution), - executorConfig - ]) - - const [multiInstallData, hashToSign] = makeInstallDataAndHash( - walletClient.account?.address, - [ - { - moduleType: ModuleType.Validation, - config: toHex(validatorInstallData) - }, - { - moduleType: ModuleType.Execution, - config: toHex(executorInstallData) - } - ] - ) - const enableModeSig = encodePacked( - ["address", "bytes"], - [K1_VALIDATOR, await smartAccount.signMessage(hashToSign)] - ) - - const enableModeSigPrefix = concat([ - toBytes(MODULE_TYPE_MULTI), - pad(toBytes(BigInt(hexToBytes(multiInstallData as Hex).length)), { - size: 4, - dir: "right" - }), - hexToBytes(multiInstallData as Hex), - pad(toBytes(BigInt(hexToBytes(enableModeSig).length)), { - size: 4, - dir: "right" - }), - hexToBytes(enableModeSig) - ]) - - // userOp.signature = encodePacked(['bytes', 'bytes'], [toHex(enableModeSigPrefix), userOp.signature!]); - - // const response = await smartAccount.sendUserOp(userOp); - // const receipt = await response.wait(); - - // console.log(receipt, "receipt"); - - // const counterAfter = await publicClient.readContract({ - // address: counterAddress, - // abi: parseAbi(["function getCount() external view returns(uint256)"]), - // functionName: "getCount" - // }) - - // console.log(counterAfter, "counter after"); - }, 60000) + // const executorInstallData = concat([ + // toBytes(ModuleType.Execution), + // executorConfig + // ]) + + // const [multiInstallData, hashToSign] = makeInstallDataAndHash( + // walletClient.account?.address, + // [ + // { + // moduleType: ModuleType.Validation, + // config: toHex(validatorInstallData) + // }, + // { + // moduleType: ModuleType.Execution, + // config: toHex(executorInstallData) + // } + // ] + // ) + // const enableModeSig = encodePacked( + // ["address", "bytes"], + // [K1_VALIDATOR, await smartAccount.signMessage(hashToSign)] + // ) + + // const enableModeSigPrefix = concat([ + // toBytes(MODULE_TYPE_MULTI), + // pad(toBytes(BigInt(hexToBytes(multiInstallData as Hex).length)), { + // size: 4, + // dir: "right" + // }), + // hexToBytes(multiInstallData as Hex), + // pad(toBytes(BigInt(hexToBytes(enableModeSig).length)), { + // size: 4, + // dir: "right" + // }), + // hexToBytes(enableModeSig) + // ]) + + // // userOp.signature = encodePacked(['bytes', 'bytes'], [toHex(enableModeSigPrefix), userOp.signature!]); + + // // const response = await smartAccount.sendUserOp(userOp); + // // const receipt = await response.wait(); + + // // console.log(receipt, "receipt"); + + // // const counterAfter = await publicClient.readContract({ + // // address: counterAddress, + // // abi: parseAbi(["function getCount() external view returns(uint256)"]), + // // functionName: "getCount" + // // }) + + // // console.log(counterAfter, "counter after"); + // }, 60000) // test("Mint NFT's - Batch Call", async () => { // const encodedCall = encodeFunctionData({ diff --git a/tests/modules/ownableExecutor.ts/write.test.ts b/tests/modules/ownableExecutor.ts/write.test.ts index b0ede136c..955cecfcb 100644 --- a/tests/modules/ownableExecutor.ts/write.test.ts +++ b/tests/modules/ownableExecutor.ts/write.test.ts @@ -7,7 +7,7 @@ import { parseEther } from "viem" import { privateKeyToAccount } from "viem/accounts" -import { baseSepolia } from "viem/chains" +import { sepolia } from "viem/chains" import { describe, expect, test } from "vitest" import { ModuleType, @@ -30,12 +30,12 @@ describe("Account:Modules:OwnableExecutor", async () => { const [walletClient, walletClientTwo] = [ createWalletClient({ account, - chain: baseSepolia, + chain: sepolia, transport: http() }), createWalletClient({ account: accountTwo, - chain: baseSepolia, + chain: sepolia, transport: http() }) ] diff --git a/tests/modules/ownableValidator.ts/write.test.ts b/tests/modules/ownableValidator.ts/write.test.ts index c5af19f79..59f6f6a08 100644 --- a/tests/modules/ownableValidator.ts/write.test.ts +++ b/tests/modules/ownableValidator.ts/write.test.ts @@ -1,6 +1,6 @@ // import { http, createWalletClient, encodeAbiParameters } from "viem" // import { privateKeyToAccount } from "viem/accounts" -// import { baseSepolia } from "viem/chains" +// import { sepolia } from "viem/chains" // import { describe, expect, test } from "vitest" // import { // Module, @@ -24,7 +24,7 @@ // const [walletClient] = [ // createWalletClient({ // account, -// chain: baseSepolia, +// chain: sepolia, // transport: http() // }) // ] diff --git a/tests/utils.ts b/tests/utils.ts index 0165f64bf..41d30f1d8 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -7,13 +7,9 @@ import { parseAbi } from "viem" import { privateKeyToAccount } from "viem/accounts" -import { baseSepolia, sepolia } from "viem/chains" +import { sepolia } from "viem/chains" import { Logger } from "../src/account/utils/Logger" import { getChain } from "../src/account/utils/getChain" -import { - extractChainIdFromBundlerUrl, - extractChainIdFromPaymasterUrl -} from "../src/bundler" export const getEnvVars = () => { const fields = [ @@ -38,7 +34,7 @@ export const getEnvVars = () => { bundlerUrlTwo: getBundlerUrl(84532) || "", privateKey: process.env.E2E_PRIVATE_KEY_ONE || "", privateKeyTwo: process.env.E2E_PRIVATE_KEY_TWO || "", - paymasterUrl: `https://paymaster.biconomy.io/api/v1/80002/${ + paymasterUrl: `https://paymaster.biconomy.io/api/v1/11155111/${ process.env.E2E_BICO_PAYMASTER_KEY_AMOY || "" }`, paymasterUrlTwo: `https://paymaster.biconomy.io/api/v1/84532/${ @@ -105,10 +101,8 @@ export const checkBalance = ( ) => { // const { chain: chainFromConfig } = getConfig() // const chain = _chain || chainFromConfig - console.log(tokenAddress, "tokenAddress") - const publicClient = createPublicClient({ - chain: baseSepolia, + chain: sepolia, transport: http() }) @@ -118,7 +112,7 @@ export const checkBalance = ( return publicClient.readContract({ address: tokenAddress, abi: parseAbi([ - "function balanceOf(address owner) view returns (uint balance)" + "function balanceOf(address owner) public view returns (uint256 balance)" ]), functionName: "balanceOf", args: [owner] From d5855fd712b2906b5186483d305b22a767f4c457 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Thu, 1 Aug 2024 15:25:38 +0300 Subject: [PATCH 1221/1247] feat: Nexus signature tests (draft) --- bun.lockb | Bin 273884 -> 273884 bytes src/account/NexusSmartAccount.ts | 20 +- src/account/utils/Types.ts | 10 + src/modules/base/BaseValidationModule.ts | 7 +- tests/account/read.test.ts | 242 +++++++++++++++++------ tests/utils.ts | 38 +++- 6 files changed, 242 insertions(+), 75 deletions(-) diff --git a/bun.lockb b/bun.lockb index f0634fdd70abc6a4e0fee1357db508a6ecd64e9c..ecdabd4198d311335cb822f14057539f60256997 100755 GIT binary patch delta 29 jcmca}Tj0)Zfrb{wElktyurh!^`|LYR+h^Zlb_@gnyT=QJ delta 29 lcmca}Tj0)Zfrb{wElktyu<99F=$W<8zQeSA_8n%&Kmf>j41WLs diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index a90b5d552..a6290c020 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -2020,28 +2020,16 @@ export class NexusSmartAccount extends BaseSmartContractAccount { let signature: Hex this.isActiveValidationModuleDefined() const dataHash = typeof message === "string" ? toBytes(message) : message - signature = (await this.activeValidationModule.signMessage(dataHash)) as Hex - const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27 - signature = signature.slice(0, -2) + correctV.toString(16) - } - if (signature.slice(0, 2) !== "0x") { - signature = `0x${signature}` - } - // @note Signature specific to Nexus Account + signature = await this.activeValidationModule.signMessage(dataHash) signature = encodePacked( ["address", "bytes"], - [this.activeValidationModule.getAddress(), signature as Hex] + [this.activeValidationModule.getAddress(), signature] ) - // signature = encodeAbiParameters( - // [{ type: "bytes" }, { type: "address" }], - // [signature as Hex, this.activeValidationModule.getAddress()] - // ) if (await this.isAccountDeployed()) { - return signature as Hex + return signature } + // If the account is not deployed, follow ERC 6492 const abiEncodedMessage = encodeAbiParameters( [ { diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 7a06ceae7..2d784a315 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -632,3 +632,13 @@ export type ModuleInfoParams = { moduleSelector?: Hex data?: Hex } + +export type EIP712DomainReturn = [ + Hex, + string, + string, + bigint, + Address, + Hex, + bigint[] +] diff --git a/src/modules/base/BaseValidationModule.ts b/src/modules/base/BaseValidationModule.ts index 91160594d..3be88d43f 100644 --- a/src/modules/base/BaseValidationModule.ts +++ b/src/modules/base/BaseValidationModule.ts @@ -46,7 +46,7 @@ export abstract class BaseValidationModule extends BaseModule { * @returns {Promise<string>} A promise resolving to the signature or error message. * @throws {Error} If the signer type is invalid or unsupported. */ - async signMessage(_message: Uint8Array | string): Promise<string> { + async signMessage(_message: Uint8Array | string): Promise<Hex> { const message = typeof _message === "string" ? _message : { raw: _message } let signature = await this.signer.signMessage(message) @@ -55,6 +55,9 @@ export abstract class BaseValidationModule extends BaseModule { const correctV = potentiallyIncorrectV + 27 signature = signature.slice(0, -2) + correctV.toString(16) } - return signature + if (signature.slice(0, 2) !== "0x") { + signature = `0x${signature}` + } + return signature as Hex } } diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index dd9131e78..d9b71ac5f 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -9,14 +9,17 @@ import { createWalletClient, encodeAbiParameters, encodeFunctionData, + encodePacked, getContract, hashMessage, keccak256, parseAbi, parseAbiParameters, - toBytes + toBytes, + toHex } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" +import { verifyMessage } from "viem/actions" import { bsc, sepolia } from "viem/chains" import { beforeAll, describe, expect, test } from "vitest" import { @@ -36,9 +39,15 @@ import type { NexusSmartAccount } from "../../src/account/NexusSmartAccount" import { BiconomyFactoryAbi } from "../../src/account/abi/K1ValidatorFactory" import { NexusAccountAbi } from "../../src/account/abi/SmartAccount" import { createK1ValidatorModule } from "../../src/modules" -import { checkBalance, getBundlerUrl, getConfig } from "../utils" +import { + checkBalance, + getAccountDomainStructFields, + getBundlerUrl, + getConfig +} from "../utils" describe("Account:Read", () => { + const eip1271MagicValue = "0x1626ba7e" const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" const { chain, @@ -78,8 +87,8 @@ describe("Account:Read", () => { createSmartAccountClient({ chainId, signer: client, - bundlerUrl, - paymasterUrl + bundlerUrl + // paymasterUrl }) ) ) @@ -209,7 +218,6 @@ describe("Account:Read", () => { config: walletClient.account.address } ]) - console.log(result, "result") expect(result).toBeTruthy() }, 30000 @@ -328,7 +336,6 @@ describe("Account:Read", () => { const userOp = await smartAccount.buildUserOp([tx]) const estimatedGas = await smartAccount.estimateUserOpGas(userOp) - console.log(estimatedGas, "estimatedGas") expect(estimatedGas.maxFeePerGas).toBeTruthy() expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() expect(estimatedGas.verificationGasLimit).toBeTruthy() @@ -415,14 +422,14 @@ describe("Account:Read", () => { expect(addresses.every(Boolean)).toBeTruthy() }) - test.concurrent( - "should create a smart account with paymaster with an api key", - async () => { - const paymaster = smartAccount.paymaster - expect(paymaster).not.toBeNull() - expect(paymaster).not.toBeUndefined() - } - ) + // test.concurrent( + // "should create a smart account with paymaster with an api key", + // async () => { + // const paymaster = smartAccount.paymaster + // expect(paymaster).not.toBeNull() + // expect(paymaster).not.toBeUndefined() + // } + // ) test.concurrent("should not throw and error, chain ids match", async () => { const mockBundlerUrl = @@ -684,11 +691,10 @@ describe("Account:Read", () => { // @note Nexus SA signature needs to contain the validator module address in the first 20 bytes test.concurrent( - "should verify a correct 712 signature through isValidSignature", + "should test isValidSignature PersonalSign to be valid", async () => { if (await smartAccount.isAccountDeployed()) { - const eip1271MagicValue = "0x1626ba7e" - const data = keccak256("0x1234") + const data = hashMessage("0x1234") // Define constants as per the original Solidity function const DOMAIN_NAME = "Nexus" @@ -696,7 +702,6 @@ describe("Account:Read", () => { const DOMAIN_TYPEHASH = "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" const PARENT_TYPEHASH = "PersonalSign(bytes prefixed)" - const ALICE_ACCOUNT = smartAccountAddress const chainId = sepolia.id // Calculate the domain separator @@ -708,7 +713,7 @@ describe("Account:Read", () => { keccak256(toBytes(DOMAIN_NAME)), keccak256(toBytes(DOMAIN_VERSION)), BigInt(chainId), - ALICE_ACCOUNT + smartAccountAddress ] ) ) @@ -717,7 +722,7 @@ describe("Account:Read", () => { const parentStructHash = keccak256( encodeAbiParameters(parseAbiParameters("bytes32, bytes32"), [ keccak256(toBytes(PARENT_TYPEHASH)), - data + hashMessage(data) ]) ) @@ -728,59 +733,184 @@ describe("Account:Read", () => { const signature = await smartAccount.signMessage(resultHash) - const response = await publicClient.readContract({ + const contractResponse = await publicClient.readContract({ address: await smartAccount.getAddress(), abi: NexusAccountAbi, functionName: "isValidSignature", - args: [data, signature] + args: [hashMessage(data), signature] }) - expect(response).toBe(eip1271MagicValue) + const viemResponse = await publicClient.verifyMessage({ + address: smartAccountAddress, + message: data, + signature + }) + + expect(contractResponse).toBe(eip1271MagicValue) + expect(viemResponse).toBe(true) } } ) - test.concurrent("should verifySignature of deployed", async () => { - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl - }) + test.concurrent( + "should test isValidSignature EIP712Sign to be valid", + async () => { + if (await smartAccount.isAccountDeployed()) { + const data = hashMessage("0x1234") - const message = "hello world" - const signature = await smartAccount.signMessage(message) + // Define constants as per the original Solidity function + const DOMAIN_NAME = "Nexus" + const DOMAIN_VERSION = "1.0.0-beta" + const DOMAIN_TYPEHASH = + "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" + const PARENT_TYPEHASH = + "TypedDataSign(Contents contents,bytes1 fields,string name,string version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] extensions)Contents(bytes32 stuff)" + const chainId = sepolia.id - const isVerified = await publicClient.readContract({ - address: await smartAccount.getAddress(), - abi: NexusAccountAbi, - functionName: "isValidSignature", - args: [hashMessage(message), signature] - }) + // Calculate the domain separator + const domainSeparator = keccak256( + encodeAbiParameters( + parseAbiParameters("bytes32, bytes32, bytes32, uint256, address"), + [ + keccak256(toBytes(DOMAIN_TYPEHASH)), + keccak256(toBytes(DOMAIN_NAME)), + keccak256(toBytes(DOMAIN_VERSION)), + BigInt(chainId), + smartAccountAddress + ] + ) + ) - expect(isVerified).toBeTruthy() - }) + const encodedAccountDomainStructFields = + await getAccountDomainStructFields(publicClient, smartAccountAddress) - test.concurrent("should verifySignature of not deployed", async () => { - const undeployedSmartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - index: 99n - }) - const isDeployed = await undeployedSmartAccount.isAccountDeployed() - if (!isDeployed) { - const message = "hello world" + // Calculate the parent struct hash + const parentStructHash = keccak256( + encodePacked( + ["bytes", "bytes"], + [ + encodeAbiParameters(parseAbiParameters("bytes32, bytes32"), [ + keccak256(toBytes(PARENT_TYPEHASH)), + hashMessage(data) + ]), + encodedAccountDomainStructFields + ] + ) + ) + + const dataToSign: Hex = keccak256( + concat(["0x1901", domainSeparator, parentStructHash]) + ) - const signature = await smartAccount.signMessage(message) + let signature = await smartAccount.signMessage(dataToSign) + const contentsType: Hex = toHex("Contents(bytes32 stuff)") + signature = encodePacked( + ["bytes", "bytes", "bytes", "bytes", "uint"], + [ + signature, + domainSeparator, + data, + contentsType, + BigInt(contentsType.length) + ] + ) - const isVerified = await publicClient.readContract({ - address: await smartAccount.getAddress(), - abi: NexusAccountAbi, - functionName: "isValidSignature", - args: [hashMessage(message), signature] - }) + const finalSignature = encodePacked( + ["address", "bytes"], + [smartAccount.activeValidationModule.moduleAddress, signature] + ) - expect(isVerified).toBeTruthy() + const contractResponse = await publicClient.readContract({ + address: await smartAccount.getAddress(), + abi: NexusAccountAbi, + functionName: "isValidSignature", + args: [data, finalSignature] + }) + + const viemResponse = await publicClient.verifyMessage({ + address: smartAccountAddress, + message: data, + signature: finalSignature + }) + + expect(contractResponse).toBe(eip1271MagicValue) + expect(viemResponse).toBe(true) + } } - }) + ) + + // test.concurrent("should call isValidSignature for deployed smart account", async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl + // }) + + // const message = "hello world" + // const signature = await smartAccount.signMessage(message) + + // const isVerified = await publicClient.readContract({ + // address: await smartAccount.getAddress(), + // abi: NexusAccountAbi, + // functionName: "isValidSignature", + // args: [hashMessage(message), signature] + // }) + + // expect(isVerified).toBe(eip1271MagicValue) + // }) + + // test.concurrent("should verifySignature of not deployed", async () => { + // const undeployedSmartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl, + // index: 99n + // }) + // const isDeployed = await undeployedSmartAccount.isAccountDeployed() + // if (!isDeployed) { + // const message = "hello world" + + // const signature = await smartAccount.signMessage(message) + // // OR + // // const signature = await smartAccount.signMessageWith6492(message) + + // const isVerified = await publicClient.readContract({ + // address: await smartAccount.getAddress(), + // abi: NexusAccountAbi, + // functionName: "isValidSignature", + // args: [hashMessage(message), signature] + // }) + + // expect(isVerified).toBe(eip1271MagicValue) + // } + // }) + + // test.concurrent("should verifySignature using viem", async () => { + // const isDeployed = await smartAccount.isAccountDeployed() + // if (isDeployed) { + // const message = "0x123" + + // const signature = await smartAccount.signMessage(message) + + // console.log(signature, 'signature'); + // console.log(hashMessage(message), 'hashMessage(message)'); + + // // const isVerified = await verifyMessage(publicClient, { + // // address: await smartAccount.getAddress(), + // // message, + // // signature, + // // }) + + // const isVerified = await publicClient.readContract({ + // address: await smartAccount.getAddress(), + // abi: NexusAccountAbi, + // functionName: "isValidSignature", + // args: [hashMessage(message), signature] + // }) + + // console.log(isVerified, "isVerified"); + + // expect(isVerified).toBe(eip1271MagicValue) + // } + // }) // @note Removed untill we implement the Bundler (Pimlico's bundler does no behave as expected in this test) // test.concurrent( diff --git a/tests/utils.ts b/tests/utils.ts index 41d30f1d8..e993ab8f4 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -1,13 +1,18 @@ import { http, + type Address, type Chain, type Hex, + type PublicClient, createPublicClient, createWalletClient, - parseAbi + encodeAbiParameters, + parseAbi, + parseAbiParameters } from "viem" import { privateKeyToAccount } from "viem/accounts" import { sepolia } from "viem/chains" +import type { EIP712DomainReturn } from "../src" import { Logger } from "../src/account/utils/Logger" import { getChain } from "../src/account/utils/getChain" @@ -190,5 +195,36 @@ export const topUp = async ( } } +// Returns the encoded EIP-712 domain struct fields. +export const getAccountDomainStructFields = async ( + publicClient: PublicClient, + accountAddress: Address +) => { + const accountDomainStructFields = (await publicClient.readContract({ + address: accountAddress, + abi: parseAbi([ + "function eip712Domain() public view returns (bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions)" + ]), + functionName: "eip712Domain" + })) as EIP712DomainReturn + + const [fields, name, version, chainId, verifyingContract, salt, extensions] = + accountDomainStructFields + + const params = parseAbiParameters( + "bytes1, string, string, uint256, address, bytes32, uint256[]" + ) + + return encodeAbiParameters(params, [ + fields, + name, + version, + chainId, + verifyingContract, + salt, + extensions + ]) +} + export const getBundlerUrl = (chainId: number) => `https://bundler.biconomy.io/api/v2/${chainId}/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f14` From 2ecb68255660686ba9605b69a26c33f0cf8dc005 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Fri, 2 Aug 2024 16:54:42 +0300 Subject: [PATCH 1222/1247] refactor: eip712 signature tests (draft) --- tests/account/read.test.ts | 17 +++++++------- tests/account/write.test.ts | 45 +++++++++++++++++++------------------ 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index d9b71ac5f..95eb9f25c 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -717,7 +717,7 @@ describe("Account:Read", () => { ] ) ) - + // Calculate the parent struct hash const parentStructHash = keccak256( encodeAbiParameters(parseAbiParameters("bytes32, bytes32"), [ @@ -756,7 +756,7 @@ describe("Account:Read", () => { "should test isValidSignature EIP712Sign to be valid", async () => { if (await smartAccount.isAccountDeployed()) { - const data = hashMessage("0x1234") + const data = keccak256("0x1234") // Define constants as per the original Solidity function const DOMAIN_NAME = "Nexus" @@ -764,7 +764,7 @@ describe("Account:Read", () => { const DOMAIN_TYPEHASH = "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" const PARENT_TYPEHASH = - "TypedDataSign(Contents contents,bytes1 fields,string name,string version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] extensions)Contents(bytes32 stuff)" + "TypedDataSign(Contents contents,bytes1 fields,string name,string version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] extensions) Contents(bytes32 stuff)" const chainId = sepolia.id // Calculate the domain separator @@ -781,9 +781,8 @@ describe("Account:Read", () => { ) ) - const encodedAccountDomainStructFields = - await getAccountDomainStructFields(publicClient, smartAccountAddress) - + const encodedAccountDomainStructFields = await getAccountDomainStructFields(publicClient, smartAccountAddress) + // Calculate the parent struct hash const parentStructHash = keccak256( encodePacked( @@ -799,7 +798,7 @@ describe("Account:Read", () => { ) const dataToSign: Hex = keccak256( - concat(["0x1901", domainSeparator, parentStructHash]) + concat(["0x1901" as Hex, domainSeparator, parentStructHash]) ) let signature = await smartAccount.signMessage(dataToSign) @@ -820,11 +819,13 @@ describe("Account:Read", () => { [smartAccount.activeValidationModule.moduleAddress, signature] ) + const contents = keccak256(encodePacked(["bytes", "bytes", "bytes"], ["0x1901", domainSeparator, data])); + const contractResponse = await publicClient.readContract({ address: await smartAccount.getAddress(), abi: NexusAccountAbi, functionName: "isValidSignature", - args: [data, finalSignature] + args: [contents, finalSignature] }) const viemResponse = await publicClient.verifyMessage({ diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index f8ffb3e79..20f8a8042 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -14,7 +14,8 @@ import { parseAbi, stringToBytes, toBytes, - toHex + toHex, + parseEther } from "viem" import { privateKeyToAccount } from "viem/accounts" import { describe, expect, test } from "vitest" @@ -90,33 +91,33 @@ describe("Account:Write", async () => { expect(userOp).toBeTruthy() }, 60000) - test("Mint NFT - Single Call", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) + // test("Mint NFT - Single Call", async () => { + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function safeMint(address _to)"]), + // functionName: "safeMint", + // args: [recipient] + // }) - // smartAccount.setActiveValidationModule() + // // smartAccount.setActiveValidationModule() - // const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: K1_VALIDATOR}); - // console.log(isInstalled); + // // const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: K1_VALIDATOR}); + // // console.log(isInstalled); - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const gasCost = await smartAccount.getGasEstimate([transaction]) - console.log(gasCost, "gasCost") + // const transaction = { + // to: nftAddress, // NFT address + // data: encodedCall + // } + // const gasCost = await smartAccount.getGasEstimate([transaction]) + // console.log(gasCost, "gasCost") - const response = await smartAccount.sendTransaction([transaction]) - console.log(response, "response") + // const response = await smartAccount.sendTransaction([transaction]) + // console.log(response, "response") - const receipt = await response.wait() - console.log(receipt, "receipt") + // const receipt = await response.wait() + // console.log(receipt, "receipt") - // expect(receipt.userOpHash).toBeTruthy() - }, 60000) + // // expect(receipt.userOpHash).toBeTruthy() + // }, 60000) // test("Use enable mode", async () => { // const counterAddress = "0x6BFE41FF0605a87911c0542bF958691ea2ac77f8" // base sepolia From d42a1dea5ce325d5f12dded23820590c93c1818e Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Thu, 8 Aug 2024 11:40:09 +0300 Subject: [PATCH 1223/1247] refactor: fixed signature methods & tests --- src/account/NexusSmartAccount.ts | 20 +- src/account/utils/Constants.ts | 2 - src/bundler/Bundler.ts | 7 +- src/bundler/utils/HelperFunction.ts | 23 +++ src/modules/base/BaseValidationModule.ts | 4 +- src/modules/utils/Constants.ts | 46 ++--- src/modules/validators/K1ValidatorModule.ts | 2 +- src/modules/validators/OwnableValidator.ts | 2 +- tests/account/read.test.ts | 26 +-- tests/account/write.test.ts | 41 ++-- tests/modules/k1Validator.ts/write.test.ts | 86 ++++++++ .../modules/ownableExecutor.ts/write.test.ts | 187 ++++++++++-------- .../modules/ownableValidator.ts/write.test.ts | 124 ------------ .../write/installed-module.test.ts | 128 ++++++++++++ .../write/uninstalled-module.test.ts | 109 ++++++++++ 15 files changed, 502 insertions(+), 305 deletions(-) delete mode 100644 tests/modules/ownableValidator.ts/write.test.ts create mode 100644 tests/modules/ownableValidator.ts/write/installed-module.test.ts create mode 100644 tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index a6290c020..633e1daf9 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -981,11 +981,11 @@ export class NexusSmartAccount extends BaseSmartContractAccount { // this.validateUserOp(userOp, requiredFields) const userOpHash = await this.getUserOpHash(userOp) - const moduleSig = (await this.activeValidationModule.signUserOpHash( + const eoaSignature = (await this.activeValidationModule.signUserOpHash( userOpHash )) as Hex - userOp.signature = moduleSig + userOp.signature = eoaSignature return userOp as UserOperationStruct } @@ -995,10 +995,10 @@ export class NexusSmartAccount extends BaseSmartContractAccount { ): Hex { const moduleAddressToUse = moduleAddress ?? (this.activeValidationModule.getAddress() as Hex) - return encodeAbiParameters(parseAbiParameters("bytes, address"), [ - moduleSignature, - moduleAddressToUse - ]) + return encodePacked( + ["address", "bytes"], + [moduleAddressToUse, moduleSignature] + ) } // public async getPaymasterUserOp( @@ -1363,7 +1363,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { validationMode?: typeof MODE_VALIDATION | typeof MODE_MODULE_ENABLE ): Promise<bigint> { try { - const vm = this.activeValidationModule.moduleAddress + const vm = this.activeValidationModule.moduleAddress ?? this.defaultValidationModule.moduleAddress const key = concat(["0x000000", validationMode ?? MODE_VALIDATION, vm]) const accountAddress = await this.getAddress() return (await this.entryPoint.read.getNonce([ @@ -2021,10 +2021,10 @@ export class NexusSmartAccount extends BaseSmartContractAccount { this.isActiveValidationModuleDefined() const dataHash = typeof message === "string" ? toBytes(message) : message - signature = await this.activeValidationModule.signMessage(dataHash) + signature = await this.activeValidationModule.signMessage(dataHash) ?? this.defaultValidationModule.signMessage(dataHash) signature = encodePacked( ["address", "bytes"], - [this.activeValidationModule.getAddress(), signature] + [this.activeValidationModule.getAddress() ?? this.defaultValidationModule.getAddress(), signature] ) if (await this.isAccountDeployed()) { return signature @@ -2177,7 +2177,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { moduleType, moduleSelector, data - }: ModuleInfoParams): Promise<UserOpReceipt> { + }: ModuleInfoParams): Promise<UserOpReceipt> { let execution: Execution switch (moduleType) { case ModuleType.Validation: diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index 5aee77b14..8788e2333 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -98,8 +98,6 @@ export const ERC20_ABI = [ ] // SEPOLIA CONTRACTS -export const K1_VALIDATOR = "0x0839518b94038b0B6044f71830b0c79D2fD8D07d" -export const OWNABLE_VALIDATOR = "0xBf2137a23F439Ca5Aa4360cC6970D70b24D07ea2" export const NEXUS_IMPLEMENTATION = "0x5f22E8c476Cc95A8015296a304bf3410ab04D1fA" export const BOOTSTRAP = "0x2adC3A47AC2E1235374CB6F7A9aD83e7De11F6C3" export const BOOTSTRAP_LIB = "0xbcFEc7E020F7cfD6F316c351a0AAc39e7d3A2314" diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index 0348417bb..097fec483 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -14,7 +14,7 @@ import { UserOpWaitForTxHashIntervals, UserOpWaitForTxHashMaxDurationIntervals } from "./utils/Constants.js" -import { getTimestampInSeconds } from "./utils/HelperFunction.js" +import { decodeUserOperationError, getTimestampInSeconds } from "./utils/HelperFunction.js" import type { BundlerConfigWithChainId, BundlerEstimateUserOpGasResponse, @@ -106,7 +106,7 @@ export class Bundler implements IBundler { _userOp: UserOperationStruct ): Promise<UserOpGasResponse> { const bundlerUrl = this.getBundlerUrl() - + const response: { result: BundlerEstimateUserOpGasResponse error: { message: string } @@ -134,8 +134,9 @@ export class Bundler implements IBundler { } if (isNullOrUndefined(response.result)) { + const decodedError = decodeUserOperationError(JSON.stringify(response?.error?.message)); throw new Error( - `Error from Bundler: ${JSON.stringify(response?.error?.message)}` + `Error from Bundler: ${decodedError}` ) } diff --git a/src/bundler/utils/HelperFunction.ts b/src/bundler/utils/HelperFunction.ts index 83e2e0745..d801b5d89 100644 --- a/src/bundler/utils/HelperFunction.ts +++ b/src/bundler/utils/HelperFunction.ts @@ -32,3 +32,26 @@ export const getTimestampInSeconds = (): number => { return Math.floor(Date.now() / 1000) } + +export function decodeUserOperationError(errorFromBundler: string) { + const prefix = "UserOperation reverted during simulation with reason: "; + if (errorFromBundler.includes(prefix)) { + const errorCode = errorFromBundler.slice(prefix.length).trim().replace(/"/g, ''); + return decodeErrorCode(errorCode); + } + return errorFromBundler; // Return original error if it doesn't match the expected format +} + +function decodeErrorCode(errorCode: string) { + const errorMap: { [key: string]: string } = { + "0xe7190273": "NotSortedAndUnique: The owners array must contain unique addresses.", + "0xf91bd6f1000000000000000000000000da6959da394b1bddb068923a9a214dc0cd193d2e" : "NotInitialized: The module is not initialized on this smart account.", + "0xaabd5a09": "InvalidThreshold: The threshold must be greater than or equal to the number of owners.", + "0x71448bfe000000000000000000000000bf2137a23f439ca5aa4360cc6970d70b24d07ea2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0": "WrongContractSignatureFormat", + "0x40d3d1a40000000000000000000000004d8249d21c9553b1bd23cabf611011376dd3416a" : "LinkedList_EntryAlreadyInList", + "0x40d3d1a40000000000000000000000004b8306128aed3d49a9d17b99bf8082d4e406fa1f": "LinkedList_EntryAlreadyInList" + // Add more error codes and their corresponding human-readable messages here + }; + const decodedError = errorMap[errorCode] || errorCode; + return `User operation reverted during simulation with reason: ${decodedError}`; +} \ No newline at end of file diff --git a/src/modules/base/BaseValidationModule.ts b/src/modules/base/BaseValidationModule.ts index 3be88d43f..bd3604215 100644 --- a/src/modules/base/BaseValidationModule.ts +++ b/src/modules/base/BaseValidationModule.ts @@ -19,8 +19,8 @@ export abstract class BaseValidationModule extends BaseModule { } async signUserOpHash(userOpHash: string): Promise<Hex> { - const sig = await this.signer.signMessage({ raw: userOpHash as Hex }) - return sig + let signature = await this.signer.signMessage({raw: userOpHash as Hex}) + return signature as Hex } async signMessageSmartAccountSigner( diff --git a/src/modules/utils/Constants.ts b/src/modules/utils/Constants.ts index 3185f6ded..5066263cd 100644 --- a/src/modules/utils/Constants.ts +++ b/src/modules/utils/Constants.ts @@ -3,42 +3,20 @@ import type { ModuleVersion } from "./Types.js" export const DEFAULT_MODULE_VERSION: ModuleVersion = "1.0.0-beta" -export const ECDSA_OWNERSHIP_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" -} - -export const DEFAULT_SESSION_KEY_MANAGER_MODULE: Hex = - "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489" - -export const SESSION_MANAGER_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: "0x000000456b395c4e107e0302553B90D1eF4a32e9", - V1_0_1: "0x000002FbFfedd9B33F4E7156F2DE8D48945E7489" -} - -export const DEFAULT_BATCHED_SESSION_ROUTER_MODULE: Hex = - "0x00000D09967410f8C76752A104c9848b57ebba55" - -export const BATCHED_SESSION_ROUTER_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: "0x00000D09967410f8C76752A104c9848b57ebba55" -} - -export const DEFAULT_ERC20_MODULE: Hex = - "0x000000D50C68705bd6897B2d17c7de32FB519fDA" - -export const DEFAULT_MULTICHAIN_MODULE: Hex = - "0x000000824dc138db84FD9109fc154bdad332Aa8E" - -export const MULTICHAIN_VALIDATION_MODULE_ADDRESSES_BY_VERSION = { - V1_0_0: "0x000000824dc138db84FD9109fc154bdad332Aa8E" -} - -export const DEFAULT_ABI_SVM_MODULE: Hex = - "0x000006bC2eCdAe38113929293d241Cf252D91861" +// VALIDATORS +export const K1_VALIDATOR = "0x0839518b94038b0B6044f71830b0c79D2fD8D07d" +export const OWNABLE_VALIDATOR = "0xBf2137a23F439Ca5Aa4360cC6970D70b24D07ea2" +// EXECUTORS export const MOCK_EXECUTOR: Hex = "0xA975e69917A4c856b17Fc8Cc4C352f326Ef21C6B" -export const MOCK_HOOK: Hex = "0x64587c60A3D19B0D73EFfd7660ee07cb76Ca465C" +export const OWNABLE_EXECUTOR = "0xc98B026383885F41d9a995f85FC480E9bb8bB891" + +// FALLBACKS export const MOCK_FALLBACK_HANDLER: Hex = "0x56B7080ef4221FdBE210160efFd33F81B19926E0" + +// HOOKS +export const MOCK_HOOK: Hex = "0x64587c60A3D19B0D73EFfd7660ee07cb76Ca465C" + + -// BASE SEPOLIA -export const OWNABLE_EXECUTOR = "0x858F46775858edB4cE40CE58863dBDf366b7F374" diff --git a/src/modules/validators/K1ValidatorModule.ts b/src/modules/validators/K1ValidatorModule.ts index 1ad8dae75..537632cfc 100644 --- a/src/modules/validators/K1ValidatorModule.ts +++ b/src/modules/validators/K1ValidatorModule.ts @@ -1,9 +1,9 @@ import { - K1_VALIDATOR, ModuleType, type SmartAccountSigner } from "../../account/index.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" +import { K1_VALIDATOR } from "../utils/Constants.js" import type { V3ModuleInfo } from "../utils/Types.js" export class K1ValidatorModule extends BaseValidationModule { diff --git a/src/modules/validators/OwnableValidator.ts b/src/modules/validators/OwnableValidator.ts index de28fd23a..36c8618b7 100644 --- a/src/modules/validators/OwnableValidator.ts +++ b/src/modules/validators/OwnableValidator.ts @@ -11,12 +11,12 @@ import type { Hex } from "viem" import type { NexusSmartAccount } from "../../account/NexusSmartAccount.js" import { ModuleType, - OWNABLE_VALIDATOR, SENTINEL_ADDRESS } from "../../account/index.js" import type { UserOpReceipt } from "../../bundler/index.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" import type { V3ModuleInfo } from "../utils/Types.js" +import { OWNABLE_VALIDATOR } from "../utils/Constants.js" export class OwnableValidator extends BaseValidationModule { public smartAccount: NexusSmartAccount diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index 95eb9f25c..b1875b85a 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -2,7 +2,6 @@ import { JsonRpcProvider } from "@ethersproject/providers" import { Wallet } from "@ethersproject/wallet" import { http, - Address, type Hex, concat, createPublicClient, @@ -19,17 +18,14 @@ import { toHex } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { verifyMessage } from "viem/actions" import { bsc, sepolia } from "viem/chains" import { beforeAll, describe, expect, test } from "vitest" import { DEFAULT_BICONOMY_FACTORY_ADDRESS, ERROR_MESSAGES, - K1_VALIDATOR, ModuleType, NATIVE_TOKEN_ALIAS, type NexusSmartAccountConfig, - UserOperationStruct, compareChainIds, createSmartAccountClient, makeInstallDataAndHash @@ -38,7 +34,7 @@ import { getChain } from "../../src/account" import type { NexusSmartAccount } from "../../src/account/NexusSmartAccount" import { BiconomyFactoryAbi } from "../../src/account/abi/K1ValidatorFactory" import { NexusAccountAbi } from "../../src/account/abi/SmartAccount" -import { createK1ValidatorModule } from "../../src/modules" +import { createK1ValidatorModule, K1_VALIDATOR } from "../../src/modules" import { checkBalance, getAccountDomainStructFields, @@ -97,22 +93,6 @@ describe("Account:Read", () => { account.getAccountAddress() ) ) - - if (!(await smartAccount.isAccountDeployed())) { - // await walletClient.sendTransaction({ - // to: smartAccountAddress, - // value: parseEther("0.01") - // }) - await smartAccount.deploy() - } - - if (!(await smartAccountTwo.isAccountDeployed())) { - // await walletClientTwo.sendTransaction({ - // to: smartAccountAddressTwo, - // value: parseEther("0.01") - // }) - await smartAccountTwo.deploy() - } }) test.concurrent( @@ -808,7 +788,7 @@ describe("Account:Read", () => { [ signature, domainSeparator, - data, + hashMessage(data), contentsType, BigInt(contentsType.length) ] @@ -819,7 +799,7 @@ describe("Account:Read", () => { [smartAccount.activeValidationModule.moduleAddress, signature] ) - const contents = keccak256(encodePacked(["bytes", "bytes", "bytes"], ["0x1901", domainSeparator, data])); + const contents = keccak256(encodePacked(["bytes", "bytes", "bytes"], ["0x1901", domainSeparator, hashMessage(data)])); const contractResponse = await publicClient.readContract({ address: await smartAccount.getAddress(), diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 20f8a8042..1cb714e8a 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -30,7 +30,6 @@ import { makeInstallDataAndHash } from "../../src" import { - K1_VALIDATOR, ModuleType, createSmartAccountClient } from "../../src/account" @@ -91,33 +90,31 @@ describe("Account:Write", async () => { expect(userOp).toBeTruthy() }, 60000) - // test("Mint NFT - Single Call", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) + test("Mint NFT - Single Call", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) - // // smartAccount.setActiveValidationModule() + // smartAccount.setActiveValidationModule() - // // const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: K1_VALIDATOR}); - // // console.log(isInstalled); + // const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: K1_VALIDATOR}); + // console.log(isInstalled); - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall - // } - // const gasCost = await smartAccount.getGasEstimate([transaction]) - // console.log(gasCost, "gasCost") + const transaction = { + to: nftAddress, // NFT address + data: encodedCall + } - // const response = await smartAccount.sendTransaction([transaction]) - // console.log(response, "response") + const response = await smartAccount.sendTransaction([transaction]) + console.log(response, "response") - // const receipt = await response.wait() - // console.log(receipt, "receipt") + // const receipt = await response.wait() + // console.log(receipt, "receipt") - // // expect(receipt.userOpHash).toBeTruthy() - // }, 60000) + // expect(receipt.userOpHash).toBeTruthy() + }, 60000) // test("Use enable mode", async () => { // const counterAddress = "0x6BFE41FF0605a87911c0542bF958691ea2ac77f8" // base sepolia diff --git a/tests/modules/k1Validator.ts/write.test.ts b/tests/modules/k1Validator.ts/write.test.ts index e69de29bb..96c906949 100644 --- a/tests/modules/k1Validator.ts/write.test.ts +++ b/tests/modules/k1Validator.ts/write.test.ts @@ -0,0 +1,86 @@ +import { http, createWalletClient, encodeAbiParameters, encodePacked } from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { sepolia } from "viem/chains" +import { afterEach, describe, expect, test } from "vitest" +import { + K1_VALIDATOR, + Module, + ModuleType, + OWNABLE_VALIDATOR, + createK1ValidatorModule, + createOwnableValidatorModule +} from "../../../src" +import { createSmartAccountClient } from "../../../src/account" +import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" +import type { UserOpReceipt } from "../../../src/bundler" +import { getConfig } from "../../utils" + +describe("Account:Modules:OwnableValidator", async () => { + const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + + const [walletClient] = [ + createWalletClient({ + account, + chain: sepolia, + transport: http() + }) + ] + + const smartAccount: NexusSmartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl + }) + + const owners = [walletClient.account.address, accountTwo.address] + + const k1ValidationModule = await createK1ValidatorModule( + smartAccount.getSigner() + ) + + describe("K1 Validator Module Tests", async () => { + test("install k1 Validator with 1 owner", async () => { + const isInstalledBefore = await smartAccount.isModuleInstalled( + { + moduleType: ModuleType.Validation, + moduleAddress: K1_VALIDATOR + } + ) + + console.log(isInstalledBefore, "isInstalledBefore"); + + if (!isInstalledBefore) { + const userOpReceipt: UserOpReceipt = await smartAccount.installModule( + { + moduleAddress: K1_VALIDATOR, + moduleType: ModuleType.Validation, + data: encodePacked(['address'], [await smartAccount.getAddress()]) + } + ) + + // const isInstalled = await smartAccount.isModuleInstalled( + // { + // moduleType: ModuleType.Validation, + // moduleAddress: K1_VALIDATOR + // } + // ) + + smartAccount.setActiveValidationModule(k1ValidationModule) + + expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + } + }, 60000) + + test("Ownable Validator Module should be installed", async () => { + const isInstalled = await smartAccount.isModuleInstalled( + { + moduleType: ModuleType.Validation, + moduleAddress: OWNABLE_VALIDATOR + } + ) + expect(isInstalled).toBeTruthy() + }, 60000) + }) +}) diff --git a/tests/modules/ownableExecutor.ts/write.test.ts b/tests/modules/ownableExecutor.ts/write.test.ts index 955cecfcb..b92779f45 100644 --- a/tests/modules/ownableExecutor.ts/write.test.ts +++ b/tests/modules/ownableExecutor.ts/write.test.ts @@ -16,14 +16,11 @@ import { } from "../../../src" import { createSmartAccountClient } from "../../../src/account" import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" -import type { UserOpReceipt } from "../../../src/bundler" import { getConfig } from "../../utils" describe("Account:Modules:OwnableExecutor", async () => { - const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const token = "0xECF8B93B9b56F9105C329381C573E42640a27A73" - const ownableExecutor = "0x858F46775858edB4cE40CE58863dBDf366b7F374" - const { privateKey, privateKeyTwo } = getConfig() + const token = "0x5a80620D47e4b786C4eC070837cb712486FEE857" + const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() const account = privateKeyToAccount(`0x${privateKey}`) const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) @@ -42,115 +39,123 @@ describe("Account:Modules:OwnableExecutor", async () => { const smartAccount: NexusSmartAccount = await createSmartAccountClient({ signer: walletClient, - bundlerUrl: - "https://api.pimlico.io/v2/84532/rpc?apikey=22c48af7-4886-4c7d-8d4c-5d50262a23f3" + bundlerUrl }) const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) - await smartAccount.setActiveExecutorModule(ownableExecutorModule) describe("Ownable Executor Module Tests", async () => { - test("install Ownable Executor", async () => { - const signerAddress = await smartAccount.getSigner().getAddress() - console.log(signerAddress, "signerAddress from tests") - - const isInstalled = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Execution, - moduleAddress: ownableExecutor - }) - - if (!isInstalled) { - const userOpReceipt: UserOpReceipt = await smartAccount.installModule({ - moduleAddress: OWNABLE_EXECUTOR, - moduleType: ModuleType.Execution, - data: encodePacked( - ["address"], - [await smartAccount.getAccountAddress()] - ) - }) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeTruthy() - } - expect(isInstalled).toBeTruthy() - }, 60000) + // test("install Ownable Executor", async () => { + // let isInstalled = await smartAccount.isModuleInstalled({ + // moduleType: ModuleType.Execution, + // moduleAddress: OWNABLE_EXECUTOR + // }) + + // console.log("init data", encodePacked( + // ["address"], + // [await smartAccount.getAddress()] + // )); + + // if (!isInstalled) { + // const receipt = await smartAccount.installModule({ + // moduleAddress: OWNABLE_EXECUTOR, + // moduleType: ModuleType.Execution, + // data: encodePacked( + // ["address"], + // [await smartAccount.getAddress()] + // ) + // }) + + // isInstalled = await smartAccount.isModuleInstalled({ + // moduleType: ModuleType.Execution, + // moduleAddress: OWNABLE_EXECUTOR + // }) + + // smartAccount.setActiveExecutionModule(ownableExecutorModule) + + // expect(receipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // } + // expect(isInstalled).toBeTruthy() + // }, 60000) test("Ownable Executor Module should be installed", async () => { const isInstalled = await smartAccount.isModuleInstalled({ moduleType: ModuleType.Execution, - moduleAddress: ownableExecutor + moduleAddress: OWNABLE_EXECUTOR }) + console.log(isInstalled, "isInstalled"); expect(isInstalled).toBeTruthy() }, 60000) - test("uninstall Ownable Executor Module", async () => { - let isInstalled = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Execution, - moduleAddress: ownableExecutor - }) - - if (isInstalled) { - const userOpReceipt = await smartAccount.uninstallModule({ - moduleAddress: OWNABLE_EXECUTOR, - moduleType: ModuleType.Execution - }) - - isInstalled = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Execution, - moduleAddress: ownableExecutor - }) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeFalsy() - expect(userOpReceipt).toBeTruthy() - } - expect(isInstalled).toBeFalsy() - }, 60000) + // test("uninstall Ownable Executor Module", async () => { + // let isInstalled = await smartAccount.isModuleInstalled({ + // moduleType: ModuleType.Execution, + // moduleAddress: OWNABLE_EXECUTOR + // }) + + // if (isInstalled) { + // const userOpReceipt = await smartAccount.uninstallModule({ + // moduleAddress: OWNABLE_EXECUTOR, + // moduleType: ModuleType.Execution + // }) + + // isInstalled = await smartAccount.isModuleInstalled({ + // moduleType: ModuleType.Execution, + // moduleAddress: OWNABLE_EXECUTOR + // }) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // } + // expect(isInstalled).toBeFalsy() + // }, 60000) test("should add an owner to the module", async () => { let isInstalled = await smartAccount.isModuleInstalled({ moduleType: ModuleType.Execution, - moduleAddress: ownableExecutor + moduleAddress: OWNABLE_EXECUTOR }) - if (!isInstalled) { - await smartAccount.installModule({ - moduleAddress: OWNABLE_EXECUTOR, - moduleType: ModuleType.Execution, - data: encodePacked( - ["address"], - [await smartAccount.getAccountAddress()] - ) - }) - } + // if (!isInstalled) { + // await smartAccount.installModule({ + // moduleAddress: OWNABLE_EXECUTOR, + // moduleType: ModuleType.Execution, + // data: encodePacked( + // ["address"], + // [await smartAccount.getAccountAddress()] + // ) + // }) + // } isInstalled = await smartAccount.isModuleInstalled({ moduleType: ModuleType.Execution, - moduleAddress: ownableExecutor + moduleAddress: OWNABLE_EXECUTOR }) expect(isInstalled).to.be.true - const userOpReceipt = await ownableExecutorModule.addOwner( - accountTwo.address - ) + const ownersBefore = await ownableExecutorModule.getOwners() + const isOwnerBefore = ownersBefore.includes(accountTwo.address) - expect(userOpReceipt.success).toBeTruthy() - }, 60000) + if(isOwnerBefore) { + console.log("Owner already exists in list, skipping test case ...") + return + } - test("should remove an owner from the module", async () => { - const userOpReceipt = await ownableExecutorModule.removeOwner( + const userOpReceipt = await ownableExecutorModule.addOwner( accountTwo.address ) - expect(userOpReceipt.success).toBeTruthy() - }, 60000) - test("should get all the owners", async () => { const owners = await ownableExecutorModule.getOwners() - console.log(owners, "owners") + const isOwner = owners.includes(accountTwo.address) + + expect(isOwner).toBeTruthy() + expect(userOpReceipt.success).toBeTruthy() }, 60000) - test("added owner executes token transfer on Smart Account", async () => { + test("delegated owner transfers tokens from smart account", async () => { const valueToTransfer = parseEther("0.1") const recipient = accountTwo.address const transferEncodedCall = encodeFunctionData({ @@ -159,12 +164,13 @@ describe("Account:Modules:OwnableExecutor", async () => { args: [recipient, valueToTransfer] }) - await ownableExecutorModule.addOwner(accountTwo.address) - const owners = await ownableExecutorModule.getOwners() const isOwner = owners.includes(accountTwo.address) expect(isOwner).toBeTruthy() + const balanceBefore = await smartAccount.getBalances([token]) + console.log("balanceBefore", balanceBefore); + const calldata = encodeFunctionData({ abi: parseAbi([ "function executeOnOwnedAccount(address ownedAccount, bytes callData)" @@ -180,13 +186,28 @@ describe("Account:Modules:OwnableExecutor", async () => { }) const txHash = await walletClientTwo.sendTransaction({ - account: accountTwo, // Called by second owner + account: accountTwo, // Called by delegated owner to: ownableExecutorModule.moduleAddress, data: calldata, value: 0n }) + const balanceAfter = await smartAccount.getBalances([token]) + console.log("balanceAfter", balanceAfter); + + console.log("txHash", txHash); expect(txHash).toBeTruthy() }, 60000) + + // test("should remove an owner from the module", async () => { + // const userOpReceipt = await ownableExecutorModule.removeOwner( + // accountTwo.address + // ) + // const owners = await ownableExecutorModule.getOwners() + // const isOwner = owners.includes(accountTwo.address) + + // expect(isOwner).toBeFalsy() + // expect(userOpReceipt.success).toBeTruthy() + // }, 60000) }) }) diff --git a/tests/modules/ownableValidator.ts/write.test.ts b/tests/modules/ownableValidator.ts/write.test.ts deleted file mode 100644 index 59f6f6a08..000000000 --- a/tests/modules/ownableValidator.ts/write.test.ts +++ /dev/null @@ -1,124 +0,0 @@ -// import { http, createWalletClient, encodeAbiParameters } from "viem" -// import { privateKeyToAccount } from "viem/accounts" -// import { sepolia } from "viem/chains" -// import { describe, expect, test } from "vitest" -// import { -// Module, -// ModuleType, -// OWNABLE_VALIDATOR, -// createOwnableValidatorModule -// } from "../../../src" -// import { createSmartAccountClient } from "../../../src/account" -// import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" -// import type { UserOpReceipt } from "../../../src/bundler" -// import { getConfig } from "../../utils" - -// describe("Account:Modules:OwnableValidator", async () => { -// const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } -// const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" -// const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" -// const { privateKey, privateKeyTwo } = getConfig() -// const account = privateKeyToAccount(`0x${privateKey}`) -// const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - -// const [walletClient] = [ -// createWalletClient({ -// account, -// chain: sepolia, -// transport: http() -// }) -// ] - -// const smartAccount: NexusSmartAccount = await createSmartAccountClient({ -// signer: walletClient, -// bundlerUrl: -// "https://api.pimlico.io/v2/84532/rpc?apikey=22c48af7-4886-4c7d-8d4c-5d50262a23f3" -// }) - -// const owners = [walletClient.account.address, accountTwo.address] - -// const ownableValidatorModule = await createOwnableValidatorModule( -// smartAccount, -// 2, -// owners -// ) -// smartAccount.setActiveValidationModule(ownableValidatorModule) - -// describe("Ownable Validator Module Tests", async () => { -// test("install Ownable Executor", async () => { -// const isInstalledBefore = await smartAccount.isModuleInstalled( -// ModuleType.Validation, -// OWNABLE_VALIDATOR -// ) - -// const threshold = 2; -// const installData = encodeAbiParameters( -// [ -// { name: 'threshold', type: 'uint256' }, -// { name: 'owners', type: 'address[]' }, -// ], -// [BigInt(threshold), owners], -// ) - -// if (!isInstalledBefore) { -// const userOpReceipt: UserOpReceipt = await smartAccount.installModule( -// OWNABLE_VALIDATOR, -// ModuleType.Validation, -// installData -// ) - -// const isInstalled = await smartAccount.isModuleInstalled( -// ModuleType.Validation, -// OWNABLE_VALIDATOR -// ) - -// expect(userOpReceipt.success).toBe(true) -// expect(isInstalled).toBeTruthy() -// } -// }, 60000) - -// test("Ownable Validator Module should be installed", async () => { -// const isInstalled = await smartAccount.isModuleInstalled( -// ModuleType.Validation, -// OWNABLE_VALIDATOR -// ) -// expect(isInstalled).toBeTruthy() -// }, 60000) - -// test("uninstall Ownable Validator Module", async () => { -// const userOpReceipt = await smartAccount.uninstallModule( -// OWNABLE_VALIDATOR, -// ModuleType.Validation -// ) - -// const isInstalled = await smartAccount.isModuleInstalled( -// ModuleType.Validation, -// OWNABLE_VALIDATOR -// ) - -// expect(userOpReceipt.success).toBe(true) -// expect(isInstalled).toBeFalsy() -// expect(userOpReceipt).toBeTruthy() -// }, 60000) - -// test("should add an owner to the module", async () => { -// const userOpReceipt = await ownableValidatorModule.addOwner( -// "0x4D8249d21c9553b1bD23cABF611011376dd3416a" -// ) - -// expect(userOpReceipt.success).toBeTruthy() -// }, 60000) - -// test("should remove an owner from the module", async () => { -// const userOpReceipt = await ownableValidatorModule.removeOwner( -// "0x4D8249d21c9553b1bD23cABF611011376dd3416a" -// ) -// expect(userOpReceipt.success).toBeTruthy() -// }, 60000) - -// test("should get all the owners", async () => { -// const owners = await ownableValidatorModule.getOwners() -// console.log(owners, "owners") -// }, 60000) -// }) -// }) diff --git a/tests/modules/ownableValidator.ts/write/installed-module.test.ts b/tests/modules/ownableValidator.ts/write/installed-module.test.ts new file mode 100644 index 000000000..d85dd8ed9 --- /dev/null +++ b/tests/modules/ownableValidator.ts/write/installed-module.test.ts @@ -0,0 +1,128 @@ +import { http, createWalletClient, encodeAbiParameters } from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { sepolia } from "viem/chains" +import { afterEach, describe, expect, test } from "vitest" +import { + Module, + ModuleType, + OWNABLE_VALIDATOR, + createOwnableValidatorModule +} from "../../../../src" +import { createSmartAccountClient } from "../../../../src/account" +import type { NexusSmartAccount } from "../../../../src/account/NexusSmartAccount" +import type { UserOpReceipt } from "../../../../src/bundler" +import { getConfig } from "../../../utils" + +describe("Account:Modules:OwnableValidator", async () => { + const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } + const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" + const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" + const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + + const [walletClient] = [ + createWalletClient({ + account, + chain: sepolia, + transport: http() + }) + ] + + const smartAccount: NexusSmartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl + }) + + const owners = [walletClient.account.address, accountTwo.address] + + const ownableValidatorModule = await createOwnableValidatorModule( + smartAccount, + 1, + owners + ) + + describe("Ownable Validator Module Tests", async () => { + test("install Ownable Validator with 1 owner", async () => { + const isInstalledBefore = await smartAccount.isModuleInstalled( + { + moduleType: ModuleType.Validation, + moduleAddress: OWNABLE_VALIDATOR + } + ) + + const threshold = 1; + const installData = encodeAbiParameters( + [ + { name: 'threshold', type: 'uint256' }, + { name: 'owners', type: 'address[]' }, + ], + [BigInt(threshold), [walletClient.account.address]], + ) + + // 866077811418299683029716658306608038086113973150706820694579085353n + // 866077811418299683029716658306608038086113973150706820694579085354n + console.log(isInstalledBefore, "isInstalledBefore"); + + if (!isInstalledBefore) { + const userOpReceipt: UserOpReceipt = await smartAccount.installModule( + { + moduleAddress: OWNABLE_VALIDATOR, + moduleType: ModuleType.Validation, + data: installData + } + ) + + const isInstalled = await smartAccount.isModuleInstalled( + { + moduleType: ModuleType.Validation, + moduleAddress: OWNABLE_VALIDATOR + } + ) + + smartAccount.setActiveValidationModule(ownableValidatorModule) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeTruthy() + } + }, 60000) + + test("Ownable Validator Module should be installed", async () => { + const isInstalled = await smartAccount.isModuleInstalled( + { + moduleType: ModuleType.Validation, + moduleAddress: OWNABLE_VALIDATOR + } + ) + expect(isInstalled).toBeTruthy() + }, 60000) + + // test("should add an owner to the module", async () => { + // const owners = await ownableValidatorModule.getOwners() + // if(owners.includes("0x4D8249d21c9553b1bD23cABF611011376dd3416a")) { + // console.log("Owner already exists in list, skipping test case ...") + // return + // } + // const userOpReceipt = await ownableValidatorModule.addOwner( + // "0x4D8249d21c9553b1bD23cABF611011376dd3416a" + // ) + // expect(userOpReceipt.success).toBeTruthy() + // }, 60000) + + // test("should remove an owner from the module", async () => { + // const ownersBefore = await ownableValidatorModule.getOwners(); + // console.log(ownersBefore, "ownersBefore"); + // const userOpReceipt = await ownableValidatorModule.removeOwner( + // "0x4D8249d21c9553b1bD23cABF611011376dd3416a" + // ) + // const ownersAfter = await ownableValidatorModule.getOwners(); + // console.log(ownersAfter, "ownersAfter"); + // expect(userOpReceipt.success).toBeTruthy() + // }, 60000) + + // test("should get all the owners", async () => { + // const owners = await ownableValidatorModule.getOwners() + // console.log(owners, "owners") + // }, 60000) + }) +}) diff --git a/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts b/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts new file mode 100644 index 000000000..6e3466038 --- /dev/null +++ b/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts @@ -0,0 +1,109 @@ +import { http, createWalletClient } from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { sepolia } from "viem/chains" +import { describe, expect, test } from "vitest" +import { + ModuleType, + OWNABLE_VALIDATOR, + createOwnableValidatorModule +} from "../../../../src" +import { createSmartAccountClient } from "../../../../src/account" +import type { NexusSmartAccount } from "../../../../src/account/NexusSmartAccount" +import { getConfig } from "../../../utils" + +describe("Account:Modules:OwnableValidator", async () => { + const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + + const [walletClient] = [ + createWalletClient({ + account, + chain: sepolia, + transport: http() + }) + ] + + const smartAccount: NexusSmartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl + }) + + const owners = [walletClient.account.address, accountTwo.address] + + const ownableValidatorModule = await createOwnableValidatorModule( + smartAccount, + 1, + owners + ) + + describe("Uninstalled Ownable Validator Module - Tests", async () => { + test("uninstall Ownable Validator Module", async () => { + + const isInstalledBefore = await smartAccount.isModuleInstalled( + { + moduleType: ModuleType.Validation, + moduleAddress: OWNABLE_VALIDATOR + } + ) + // { + // sender: '0xda6959DA394B1BDdB068923A9A214dC0CD193D2E', + // nonce: 866077811418299683029716658306608038086113973150706820694579085355n, + // factoryData: undefined, + // factory: undefined, + // callData: '0xe9ae5c53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000138da6959da394b1bddb068923a9a214dc0cd193d2e00000000000000000000000000000000000000000000000000000000000000009517e29f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bf2137a23f439ca5aa4360cc6970d70b24d07ea200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fa66e705cf2582cf56528386bb9dfca1197672620000000000000000', + // signature: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000839518b94038b0B6044f71830b0c79D2fD8D07d000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000', + // maxFeePerGas: 37233087784n, + // maxPriorityFeePerGas: 14400000n + // } + + // { + // sender: '0xda6959DA394B1BDdB068923A9A214dC0CD193D2E', + // nonce: 866077811418299683029716658306608038086113973150706820694579085356n, + // factoryData: undefined, + // factory: undefined, + // callData: '0xe9ae5c530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000b8da6959da394b1bddb068923a9a214dc0cd193d2e00000000000000000000000000000000000000000000000000000000000000009517e29f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a975e69917a4c856b17fc8cc4c352f326ef21c6b000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000', + // signature: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000839518b94038b0B6044f71830b0c79D2fD8D07d000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000', + // maxFeePerGas: 11771639n, + // maxPriorityFeePerGas: 1000000n + // } + + console.log(isInstalledBefore, "isInstalledBefore"); + + const userOpReceipt = await smartAccount.uninstallModule( + { + moduleAddress: OWNABLE_VALIDATOR, + moduleType: ModuleType.Validation + } + ) + + const isInstalled = await smartAccount.isModuleInstalled( + { + moduleType: ModuleType.Validation, + moduleAddress: OWNABLE_VALIDATOR + } + ) + + // after uninstalling the module, the SDK should setup the active module to the default module (K1 Validator) + + expect(userOpReceipt.success).toBe(true) + expect(isInstalled).toBeFalsy() + expect(userOpReceipt).toBeTruthy() + }, 60000) + + test("should revert adding an owner to the module", async () => { + const userOpReceipt = await ownableValidatorModule.addOwner( + "0x4D8249d21c9553b1bD23cABF611011376dd3416a" + ) + + expect(userOpReceipt.success).rejects.toThrowError() + }, 60000) + + test("should remove an owner from the module", async () => { + const userOpReceipt = await ownableValidatorModule.removeOwner( + "0x4D8249d21c9553b1bD23cABF611011376dd3416a" + ) + expect(userOpReceipt.success).rejects.toThrowError() + }, 60000) + }) +}) From 4eb51f45439f68acf4dd76893143aed3e2ad0b2e Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Thu, 8 Aug 2024 11:40:59 +0300 Subject: [PATCH 1224/1247] refactor: lint fixes --- src/account/NexusSmartAccount.ts | 16 +++- src/bundler/Bundler.ts | 13 ++-- src/bundler/utils/HelperFunction.ts | 37 +++++---- src/modules/base/BaseValidationModule.ts | 2 +- src/modules/utils/Constants.ts | 7 +- src/modules/validators/K1ValidatorModule.ts | 5 +- src/modules/validators/OwnableValidator.ts | 7 +- tests/account/read.test.ts | 16 ++-- tests/account/write.test.ts | 9 +-- tests/modules/k1Validator.ts/write.test.ts | 45 ++++++----- .../modules/ownableExecutor.ts/write.test.ts | 12 +-- .../write/installed-module.test.ts | 56 ++++++-------- .../write/uninstalled-module.test.ts | 75 +++++++++---------- 13 files changed, 149 insertions(+), 151 deletions(-) diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index 633e1daf9..ea3b8263e 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -1363,7 +1363,9 @@ export class NexusSmartAccount extends BaseSmartContractAccount { validationMode?: typeof MODE_VALIDATION | typeof MODE_MODULE_ENABLE ): Promise<bigint> { try { - const vm = this.activeValidationModule.moduleAddress ?? this.defaultValidationModule.moduleAddress + const vm = + this.activeValidationModule.moduleAddress ?? + this.defaultValidationModule.moduleAddress const key = concat(["0x000000", validationMode ?? MODE_VALIDATION, vm]) const accountAddress = await this.getAddress() return (await this.entryPoint.read.getNonce([ @@ -2021,10 +2023,16 @@ export class NexusSmartAccount extends BaseSmartContractAccount { this.isActiveValidationModuleDefined() const dataHash = typeof message === "string" ? toBytes(message) : message - signature = await this.activeValidationModule.signMessage(dataHash) ?? this.defaultValidationModule.signMessage(dataHash) + signature = + (await this.activeValidationModule.signMessage(dataHash)) ?? + this.defaultValidationModule.signMessage(dataHash) signature = encodePacked( ["address", "bytes"], - [this.activeValidationModule.getAddress() ?? this.defaultValidationModule.getAddress(), signature] + [ + this.activeValidationModule.getAddress() ?? + this.defaultValidationModule.getAddress(), + signature + ] ) if (await this.isAccountDeployed()) { return signature @@ -2177,7 +2185,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { moduleType, moduleSelector, data - }: ModuleInfoParams): Promise<UserOpReceipt> { + }: ModuleInfoParams): Promise<UserOpReceipt> { let execution: Execution switch (moduleType) { case ModuleType.Validation: diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index 097fec483..35841fb8c 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -14,7 +14,10 @@ import { UserOpWaitForTxHashIntervals, UserOpWaitForTxHashMaxDurationIntervals } from "./utils/Constants.js" -import { decodeUserOperationError, getTimestampInSeconds } from "./utils/HelperFunction.js" +import { + decodeUserOperationError, + getTimestampInSeconds +} from "./utils/HelperFunction.js" import type { BundlerConfigWithChainId, BundlerEstimateUserOpGasResponse, @@ -106,7 +109,7 @@ export class Bundler implements IBundler { _userOp: UserOperationStruct ): Promise<UserOpGasResponse> { const bundlerUrl = this.getBundlerUrl() - + const response: { result: BundlerEstimateUserOpGasResponse error: { message: string } @@ -134,10 +137,10 @@ export class Bundler implements IBundler { } if (isNullOrUndefined(response.result)) { - const decodedError = decodeUserOperationError(JSON.stringify(response?.error?.message)); - throw new Error( - `Error from Bundler: ${decodedError}` + const decodedError = decodeUserOperationError( + JSON.stringify(response?.error?.message) ) + throw new Error(`Error from Bundler: ${decodedError}`) } return { diff --git a/src/bundler/utils/HelperFunction.ts b/src/bundler/utils/HelperFunction.ts index d801b5d89..9c57546a0 100644 --- a/src/bundler/utils/HelperFunction.ts +++ b/src/bundler/utils/HelperFunction.ts @@ -34,24 +34,33 @@ export const getTimestampInSeconds = (): number => { } export function decodeUserOperationError(errorFromBundler: string) { - const prefix = "UserOperation reverted during simulation with reason: "; + const prefix = "UserOperation reverted during simulation with reason: " if (errorFromBundler.includes(prefix)) { - const errorCode = errorFromBundler.slice(prefix.length).trim().replace(/"/g, ''); - return decodeErrorCode(errorCode); + const errorCode = errorFromBundler + .slice(prefix.length) + .trim() + .replace(/"/g, "") + return decodeErrorCode(errorCode) } - return errorFromBundler; // Return original error if it doesn't match the expected format + return errorFromBundler // Return original error if it doesn't match the expected format } function decodeErrorCode(errorCode: string) { const errorMap: { [key: string]: string } = { - "0xe7190273": "NotSortedAndUnique: The owners array must contain unique addresses.", - "0xf91bd6f1000000000000000000000000da6959da394b1bddb068923a9a214dc0cd193d2e" : "NotInitialized: The module is not initialized on this smart account.", - "0xaabd5a09": "InvalidThreshold: The threshold must be greater than or equal to the number of owners.", - "0x71448bfe000000000000000000000000bf2137a23f439ca5aa4360cc6970d70b24d07ea2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0": "WrongContractSignatureFormat", - "0x40d3d1a40000000000000000000000004d8249d21c9553b1bd23cabf611011376dd3416a" : "LinkedList_EntryAlreadyInList", - "0x40d3d1a40000000000000000000000004b8306128aed3d49a9d17b99bf8082d4e406fa1f": "LinkedList_EntryAlreadyInList" + "0xe7190273": + "NotSortedAndUnique: The owners array must contain unique addresses.", + "0xf91bd6f1000000000000000000000000da6959da394b1bddb068923a9a214dc0cd193d2e": + "NotInitialized: The module is not initialized on this smart account.", + "0xaabd5a09": + "InvalidThreshold: The threshold must be greater than or equal to the number of owners.", + "0x71448bfe000000000000000000000000bf2137a23f439ca5aa4360cc6970d70b24d07ea2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0": + "WrongContractSignatureFormat", + "0x40d3d1a40000000000000000000000004d8249d21c9553b1bd23cabf611011376dd3416a": + "LinkedList_EntryAlreadyInList", + "0x40d3d1a40000000000000000000000004b8306128aed3d49a9d17b99bf8082d4e406fa1f": + "LinkedList_EntryAlreadyInList" // Add more error codes and their corresponding human-readable messages here - }; - const decodedError = errorMap[errorCode] || errorCode; - return `User operation reverted during simulation with reason: ${decodedError}`; -} \ No newline at end of file + } + const decodedError = errorMap[errorCode] || errorCode + return `User operation reverted during simulation with reason: ${decodedError}` +} diff --git a/src/modules/base/BaseValidationModule.ts b/src/modules/base/BaseValidationModule.ts index bd3604215..b5760a0e2 100644 --- a/src/modules/base/BaseValidationModule.ts +++ b/src/modules/base/BaseValidationModule.ts @@ -19,7 +19,7 @@ export abstract class BaseValidationModule extends BaseModule { } async signUserOpHash(userOpHash: string): Promise<Hex> { - let signature = await this.signer.signMessage({raw: userOpHash as Hex}) + const signature = await this.signer.signMessage({ raw: userOpHash as Hex }) return signature as Hex } diff --git a/src/modules/utils/Constants.ts b/src/modules/utils/Constants.ts index 5066263cd..f1e5ecd6e 100644 --- a/src/modules/utils/Constants.ts +++ b/src/modules/utils/Constants.ts @@ -14,9 +14,6 @@ export const OWNABLE_EXECUTOR = "0xc98B026383885F41d9a995f85FC480E9bb8bB891" // FALLBACKS export const MOCK_FALLBACK_HANDLER: Hex = "0x56B7080ef4221FdBE210160efFd33F81B19926E0" - -// HOOKS -export const MOCK_HOOK: Hex = "0x64587c60A3D19B0D73EFfd7660ee07cb76Ca465C" - - +// HOOKS +export const MOCK_HOOK: Hex = "0x64587c60A3D19B0D73EFfd7660ee07cb76Ca465C" diff --git a/src/modules/validators/K1ValidatorModule.ts b/src/modules/validators/K1ValidatorModule.ts index 537632cfc..204ee3ecc 100644 --- a/src/modules/validators/K1ValidatorModule.ts +++ b/src/modules/validators/K1ValidatorModule.ts @@ -1,7 +1,4 @@ -import { - ModuleType, - type SmartAccountSigner -} from "../../account/index.js" +import { ModuleType, type SmartAccountSigner } from "../../account/index.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" import { K1_VALIDATOR } from "../utils/Constants.js" import type { V3ModuleInfo } from "../utils/Types.js" diff --git a/src/modules/validators/OwnableValidator.ts b/src/modules/validators/OwnableValidator.ts index 36c8618b7..64015cd91 100644 --- a/src/modules/validators/OwnableValidator.ts +++ b/src/modules/validators/OwnableValidator.ts @@ -9,14 +9,11 @@ import { } from "viem" import type { Hex } from "viem" import type { NexusSmartAccount } from "../../account/NexusSmartAccount.js" -import { - ModuleType, - SENTINEL_ADDRESS -} from "../../account/index.js" +import { ModuleType, SENTINEL_ADDRESS } from "../../account/index.js" import type { UserOpReceipt } from "../../bundler/index.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" -import type { V3ModuleInfo } from "../utils/Types.js" import { OWNABLE_VALIDATOR } from "../utils/Constants.js" +import type { V3ModuleInfo } from "../utils/Types.js" export class OwnableValidator extends BaseValidationModule { public smartAccount: NexusSmartAccount diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index b1875b85a..b8ef86b29 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -34,7 +34,7 @@ import { getChain } from "../../src/account" import type { NexusSmartAccount } from "../../src/account/NexusSmartAccount" import { BiconomyFactoryAbi } from "../../src/account/abi/K1ValidatorFactory" import { NexusAccountAbi } from "../../src/account/abi/SmartAccount" -import { createK1ValidatorModule, K1_VALIDATOR } from "../../src/modules" +import { K1_VALIDATOR, createK1ValidatorModule } from "../../src/modules" import { checkBalance, getAccountDomainStructFields, @@ -697,7 +697,7 @@ describe("Account:Read", () => { ] ) ) - + // Calculate the parent struct hash const parentStructHash = keccak256( encodeAbiParameters(parseAbiParameters("bytes32, bytes32"), [ @@ -761,8 +761,9 @@ describe("Account:Read", () => { ) ) - const encodedAccountDomainStructFields = await getAccountDomainStructFields(publicClient, smartAccountAddress) - + const encodedAccountDomainStructFields = + await getAccountDomainStructFields(publicClient, smartAccountAddress) + // Calculate the parent struct hash const parentStructHash = keccak256( encodePacked( @@ -799,7 +800,12 @@ describe("Account:Read", () => { [smartAccount.activeValidationModule.moduleAddress, signature] ) - const contents = keccak256(encodePacked(["bytes", "bytes", "bytes"], ["0x1901", domainSeparator, hashMessage(data)])); + const contents = keccak256( + encodePacked( + ["bytes", "bytes", "bytes"], + ["0x1901", domainSeparator, hashMessage(data)] + ) + ) const contractResponse = await publicClient.readContract({ address: await smartAccount.getAddress(), diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 1cb714e8a..c989999b6 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -12,10 +12,10 @@ import { hexToBytes, pad, parseAbi, + parseEther, stringToBytes, toBytes, - toHex, - parseEther + toHex } from "viem" import { privateKeyToAccount } from "viem/accounts" import { describe, expect, test } from "vitest" @@ -29,10 +29,7 @@ import { createOwnableExecutorModule, makeInstallDataAndHash } from "../../src" -import { - ModuleType, - createSmartAccountClient -} from "../../src/account" +import { ModuleType, createSmartAccountClient } from "../../src/account" import type { UserOpReceipt } from "../../src/bundler" import { getConfig } from "../utils" diff --git a/tests/modules/k1Validator.ts/write.test.ts b/tests/modules/k1Validator.ts/write.test.ts index 96c906949..31503be42 100644 --- a/tests/modules/k1Validator.ts/write.test.ts +++ b/tests/modules/k1Validator.ts/write.test.ts @@ -1,9 +1,14 @@ -import { http, createWalletClient, encodeAbiParameters, encodePacked } from "viem" +import { + http, + createWalletClient, + encodeAbiParameters, + encodePacked +} from "viem" import { privateKeyToAccount } from "viem/accounts" import { sepolia } from "viem/chains" import { afterEach, describe, expect, test } from "vitest" import { - K1_VALIDATOR, + K1_VALIDATOR, Module, ModuleType, OWNABLE_VALIDATOR, @@ -38,26 +43,22 @@ describe("Account:Modules:OwnableValidator", async () => { const k1ValidationModule = await createK1ValidatorModule( smartAccount.getSigner() ) - + describe("K1 Validator Module Tests", async () => { test("install k1 Validator with 1 owner", async () => { - const isInstalledBefore = await smartAccount.isModuleInstalled( - { - moduleType: ModuleType.Validation, - moduleAddress: K1_VALIDATOR - } - ) + const isInstalledBefore = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Validation, + moduleAddress: K1_VALIDATOR + }) - console.log(isInstalledBefore, "isInstalledBefore"); + console.log(isInstalledBefore, "isInstalledBefore") if (!isInstalledBefore) { - const userOpReceipt: UserOpReceipt = await smartAccount.installModule( - { - moduleAddress: K1_VALIDATOR, - moduleType: ModuleType.Validation, - data: encodePacked(['address'], [await smartAccount.getAddress()]) - } - ) + const userOpReceipt: UserOpReceipt = await smartAccount.installModule({ + moduleAddress: K1_VALIDATOR, + moduleType: ModuleType.Validation, + data: encodePacked(["address"], [await smartAccount.getAddress()]) + }) // const isInstalled = await smartAccount.isModuleInstalled( // { @@ -74,12 +75,10 @@ describe("Account:Modules:OwnableValidator", async () => { }, 60000) test("Ownable Validator Module should be installed", async () => { - const isInstalled = await smartAccount.isModuleInstalled( - { - moduleType: ModuleType.Validation, - moduleAddress: OWNABLE_VALIDATOR - } - ) + const isInstalled = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Validation, + moduleAddress: OWNABLE_VALIDATOR + }) expect(isInstalled).toBeTruthy() }, 60000) }) diff --git a/tests/modules/ownableExecutor.ts/write.test.ts b/tests/modules/ownableExecutor.ts/write.test.ts index b92779f45..2a1185828 100644 --- a/tests/modules/ownableExecutor.ts/write.test.ts +++ b/tests/modules/ownableExecutor.ts/write.test.ts @@ -55,7 +55,7 @@ describe("Account:Modules:OwnableExecutor", async () => { // ["address"], // [await smartAccount.getAddress()] // )); - + // if (!isInstalled) { // const receipt = await smartAccount.installModule({ // moduleAddress: OWNABLE_EXECUTOR, @@ -84,7 +84,7 @@ describe("Account:Modules:OwnableExecutor", async () => { moduleType: ModuleType.Execution, moduleAddress: OWNABLE_EXECUTOR }) - console.log(isInstalled, "isInstalled"); + console.log(isInstalled, "isInstalled") expect(isInstalled).toBeTruthy() }, 60000) @@ -139,7 +139,7 @@ describe("Account:Modules:OwnableExecutor", async () => { const ownersBefore = await ownableExecutorModule.getOwners() const isOwnerBefore = ownersBefore.includes(accountTwo.address) - if(isOwnerBefore) { + if (isOwnerBefore) { console.log("Owner already exists in list, skipping test case ...") return } @@ -169,7 +169,7 @@ describe("Account:Modules:OwnableExecutor", async () => { expect(isOwner).toBeTruthy() const balanceBefore = await smartAccount.getBalances([token]) - console.log("balanceBefore", balanceBefore); + console.log("balanceBefore", balanceBefore) const calldata = encodeFunctionData({ abi: parseAbi([ @@ -193,9 +193,9 @@ describe("Account:Modules:OwnableExecutor", async () => { }) const balanceAfter = await smartAccount.getBalances([token]) - console.log("balanceAfter", balanceAfter); + console.log("balanceAfter", balanceAfter) - console.log("txHash", txHash); + console.log("txHash", txHash) expect(txHash).toBeTruthy() }, 60000) diff --git a/tests/modules/ownableValidator.ts/write/installed-module.test.ts b/tests/modules/ownableValidator.ts/write/installed-module.test.ts index d85dd8ed9..2a0113b0d 100644 --- a/tests/modules/ownableValidator.ts/write/installed-module.test.ts +++ b/tests/modules/ownableValidator.ts/write/installed-module.test.ts @@ -41,44 +41,38 @@ describe("Account:Modules:OwnableValidator", async () => { 1, owners ) - + describe("Ownable Validator Module Tests", async () => { test("install Ownable Validator with 1 owner", async () => { - const isInstalledBefore = await smartAccount.isModuleInstalled( - { - moduleType: ModuleType.Validation, - moduleAddress: OWNABLE_VALIDATOR - } - ) + const isInstalledBefore = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Validation, + moduleAddress: OWNABLE_VALIDATOR + }) - const threshold = 1; + const threshold = 1 const installData = encodeAbiParameters( [ - { name: 'threshold', type: 'uint256' }, - { name: 'owners', type: 'address[]' }, + { name: "threshold", type: "uint256" }, + { name: "owners", type: "address[]" } ], - [BigInt(threshold), [walletClient.account.address]], + [BigInt(threshold), [walletClient.account.address]] ) // 866077811418299683029716658306608038086113973150706820694579085353n // 866077811418299683029716658306608038086113973150706820694579085354n - console.log(isInstalledBefore, "isInstalledBefore"); + console.log(isInstalledBefore, "isInstalledBefore") if (!isInstalledBefore) { - const userOpReceipt: UserOpReceipt = await smartAccount.installModule( - { - moduleAddress: OWNABLE_VALIDATOR, - moduleType: ModuleType.Validation, - data: installData - } - ) - - const isInstalled = await smartAccount.isModuleInstalled( - { - moduleType: ModuleType.Validation, - moduleAddress: OWNABLE_VALIDATOR - } - ) + const userOpReceipt: UserOpReceipt = await smartAccount.installModule({ + moduleAddress: OWNABLE_VALIDATOR, + moduleType: ModuleType.Validation, + data: installData + }) + + const isInstalled = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Validation, + moduleAddress: OWNABLE_VALIDATOR + }) smartAccount.setActiveValidationModule(ownableValidatorModule) @@ -88,12 +82,10 @@ describe("Account:Modules:OwnableValidator", async () => { }, 60000) test("Ownable Validator Module should be installed", async () => { - const isInstalled = await smartAccount.isModuleInstalled( - { - moduleType: ModuleType.Validation, - moduleAddress: OWNABLE_VALIDATOR - } - ) + const isInstalled = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Validation, + moduleAddress: OWNABLE_VALIDATOR + }) expect(isInstalled).toBeTruthy() }, 60000) diff --git a/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts b/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts index 6e3466038..8c15c7ae1 100644 --- a/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts +++ b/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts @@ -36,53 +36,46 @@ describe("Account:Modules:OwnableValidator", async () => { 1, owners ) - + describe("Uninstalled Ownable Validator Module - Tests", async () => { test("uninstall Ownable Validator Module", async () => { + const isInstalledBefore = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Validation, + moduleAddress: OWNABLE_VALIDATOR + }) + // { + // sender: '0xda6959DA394B1BDdB068923A9A214dC0CD193D2E', + // nonce: 866077811418299683029716658306608038086113973150706820694579085355n, + // factoryData: undefined, + // factory: undefined, + // callData: '0xe9ae5c53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000138da6959da394b1bddb068923a9a214dc0cd193d2e00000000000000000000000000000000000000000000000000000000000000009517e29f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bf2137a23f439ca5aa4360cc6970d70b24d07ea200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fa66e705cf2582cf56528386bb9dfca1197672620000000000000000', + // signature: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000839518b94038b0B6044f71830b0c79D2fD8D07d000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000', + // maxFeePerGas: 37233087784n, + // maxPriorityFeePerGas: 14400000n + // } - const isInstalledBefore = await smartAccount.isModuleInstalled( - { - moduleType: ModuleType.Validation, - moduleAddress: OWNABLE_VALIDATOR - } - ) - // { - // sender: '0xda6959DA394B1BDdB068923A9A214dC0CD193D2E', - // nonce: 866077811418299683029716658306608038086113973150706820694579085355n, - // factoryData: undefined, - // factory: undefined, - // callData: '0xe9ae5c53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000138da6959da394b1bddb068923a9a214dc0cd193d2e00000000000000000000000000000000000000000000000000000000000000009517e29f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bf2137a23f439ca5aa4360cc6970d70b24d07ea200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fa66e705cf2582cf56528386bb9dfca1197672620000000000000000', - // signature: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000839518b94038b0B6044f71830b0c79D2fD8D07d000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000', - // maxFeePerGas: 37233087784n, - // maxPriorityFeePerGas: 14400000n - // } + // { + // sender: '0xda6959DA394B1BDdB068923A9A214dC0CD193D2E', + // nonce: 866077811418299683029716658306608038086113973150706820694579085356n, + // factoryData: undefined, + // factory: undefined, + // callData: '0xe9ae5c530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000b8da6959da394b1bddb068923a9a214dc0cd193d2e00000000000000000000000000000000000000000000000000000000000000009517e29f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a975e69917a4c856b17fc8cc4c352f326ef21c6b000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000', + // signature: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000839518b94038b0B6044f71830b0c79D2fD8D07d000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000', + // maxFeePerGas: 11771639n, + // maxPriorityFeePerGas: 1000000n + // } - // { - // sender: '0xda6959DA394B1BDdB068923A9A214dC0CD193D2E', - // nonce: 866077811418299683029716658306608038086113973150706820694579085356n, - // factoryData: undefined, - // factory: undefined, - // callData: '0xe9ae5c530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000b8da6959da394b1bddb068923a9a214dc0cd193d2e00000000000000000000000000000000000000000000000000000000000000009517e29f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a975e69917a4c856b17fc8cc4c352f326ef21c6b000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000', - // signature: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000839518b94038b0B6044f71830b0c79D2fD8D07d000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000', - // maxFeePerGas: 11771639n, - // maxPriorityFeePerGas: 1000000n - // } + console.log(isInstalledBefore, "isInstalledBefore") - console.log(isInstalledBefore, "isInstalledBefore"); + const userOpReceipt = await smartAccount.uninstallModule({ + moduleAddress: OWNABLE_VALIDATOR, + moduleType: ModuleType.Validation + }) - const userOpReceipt = await smartAccount.uninstallModule( - { - moduleAddress: OWNABLE_VALIDATOR, - moduleType: ModuleType.Validation - } - ) - - const isInstalled = await smartAccount.isModuleInstalled( - { - moduleType: ModuleType.Validation, - moduleAddress: OWNABLE_VALIDATOR - } - ) + const isInstalled = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Validation, + moduleAddress: OWNABLE_VALIDATOR + }) // after uninstalling the module, the SDK should setup the active module to the default module (K1 Validator) From 7278f08ac69b2688946206a40bbf0dc5c4bf4aec Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Thu, 8 Aug 2024 10:31:25 +0100 Subject: [PATCH 1225/1247] chore: add dotenv --- bun.lockb | Bin 273884 -> 274185 bytes package.json | 1 + tests/globalSetup.ts | 2 ++ 3 files changed, 3 insertions(+) diff --git a/bun.lockb b/bun.lockb index ecdabd4198d311335cb822f14057539f60256997..8fe603049059b3a67d032b043c7be44a309fd92e 100755 GIT binary patch delta 41966 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 Gtp5j)PyYS@ delta 41572 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 diff --git a/package.json b/package.json index 09d3987af..37c9b20c2 100644 --- a/package.json +++ b/package.json @@ -92,6 +92,7 @@ "@vitest/coverage-v8": "^1.3.1", "buffer": "^6.0.3", "concurrently": "^8.2.2", + "dotenv": "^16.4.5", "ethers": "^6.12.0", "gh-pages": "^6.1.1", "rimraf": "^5.0.5", diff --git a/tests/globalSetup.ts b/tests/globalSetup.ts index 7b2602c67..4f11ec5ae 100644 --- a/tests/globalSetup.ts +++ b/tests/globalSetup.ts @@ -1,5 +1,7 @@ +import { config } from "dotenv" import { getConfig } from "./utils.js" export default function setup({ provide: _ }) { + config() getConfig() } From 36bad84bef4df00d5d2a0b3721c029f2d2f3634d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Veljko=20Vrani=C4=87?= <byblos94@gmail.com> Date: Fri, 9 Aug 2024 13:28:26 +0200 Subject: [PATCH 1226/1247] Update parsing of the URL from config (#554) --- src/bundler/utils/Utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundler/utils/Utils.ts b/src/bundler/utils/Utils.ts index d9ae3321e..a5971ff93 100644 --- a/src/bundler/utils/Utils.ts +++ b/src/bundler/utils/Utils.ts @@ -2,7 +2,7 @@ import { toHex } from "viem" export const extractChainIdFromBundlerUrl = (url: string): number => { try { - const regex = /\/api\/v2\/(\d+)\/[a-zA-Z0-9.-]+$/ + const regex = /\/api\/v[2-3]\/(\d+)\/[a-zA-Z0-9.-]+$/ // biome-ignore lint/style/noNonNullAssertion: <explanation> const match = regex.exec(url)! return Number.parseInt(match[1]) From 8da8bd217b2b4b56b37683314044bd39033445d5 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Tue, 13 Aug 2024 16:06:46 +0300 Subject: [PATCH 1227/1247] feat: added sendUserOperation script --- scripts/sendUserOperation.ts | 57 ++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 scripts/sendUserOperation.ts diff --git a/scripts/sendUserOperation.ts b/scripts/sendUserOperation.ts new file mode 100644 index 000000000..fb4836bb6 --- /dev/null +++ b/scripts/sendUserOperation.ts @@ -0,0 +1,57 @@ +import { privateKeyToAccount } from "viem/accounts" +import { getConfig } from "../tests/utils" +import { createWalletClient, http, parseEther } from "viem" +import { createK1ValidatorModule, createSmartAccountClient, ModuleType } from "../src" + + +const { + chain, + chainId, + privateKey, + privateKeyTwo, + bundlerUrl, + paymasterUrl + } = getConfig() + + const account = privateKeyToAccount(`0x${privateKey}`) + const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + const recipient = accountTwo.address + + const [walletClient] = [ + createWalletClient({ + account, + chain, + transport: http() + }) + ] + + const smartAccount = await createSmartAccountClient({ + chainId, + signer: walletClient, + bundlerUrl, + paymasterUrl + }) + +const sendUserOperation = async () => { + const k1ValidatorModule = await createK1ValidatorModule(smartAccount.getSigner()) + + const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: k1ValidatorModule.moduleAddress}); + console.log("Is k1ValidatorModule installed: ", isInstalled); + + smartAccount.setActiveValidationModule(k1ValidatorModule); + + const transaction = { + to: recipient, // NFT address + data: "0x", + value: parseEther("0.0001") + } + + const response = await smartAccount.sendTransaction([transaction]) + console.log(response, "response") + + const receipt = await response.wait() + console.log("Receipt: ", receipt) +} + +sendUserOperation(); + From 95f8862baa3d5302617447b2e5972c8fecbfa510 Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Tue, 13 Aug 2024 17:47:19 +0300 Subject: [PATCH 1228/1247] refactor: change testing chain to baseSepolia --- scripts/sendUserOperation.ts | 9 ++------- src/account/NexusSmartAccount.ts | 6 +++--- src/account/utils/Constants.ts | 18 +++++++++--------- src/modules/utils/Constants.ts | 2 +- tests/account/read.test.ts | 6 +++--- tests/account/write.test.ts | 2 +- tests/modules/k1Validator.ts/write.test.ts | 4 ++-- tests/modules/ownableExecutor.ts/write.test.ts | 6 +++--- .../write/installed-module.test.ts | 4 ++-- .../write/uninstalled-module.test.ts | 4 ++-- tests/utils.ts | 4 ++-- 11 files changed, 30 insertions(+), 35 deletions(-) diff --git a/scripts/sendUserOperation.ts b/scripts/sendUserOperation.ts index fb4836bb6..149f7a1bd 100644 --- a/scripts/sendUserOperation.ts +++ b/scripts/sendUserOperation.ts @@ -10,7 +10,6 @@ const { privateKey, privateKeyTwo, bundlerUrl, - paymasterUrl } = getConfig() const account = privateKeyToAccount(`0x${privateKey}`) @@ -29,15 +28,11 @@ const { chainId, signer: walletClient, bundlerUrl, - paymasterUrl }) const sendUserOperation = async () => { const k1ValidatorModule = await createK1ValidatorModule(smartAccount.getSigner()) - const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: k1ValidatorModule.moduleAddress}); - console.log("Is k1ValidatorModule installed: ", isInstalled); - smartAccount.setActiveValidationModule(k1ValidatorModule); const transaction = { @@ -45,9 +40,9 @@ const sendUserOperation = async () => { data: "0x", value: parseEther("0.0001") } - + console.log("Your smart account will be deployed at address, make sure it has some funds to pay for user ops: ", await smartAccount.getAddress()); + const response = await smartAccount.sendTransaction([transaction]) - console.log(response, "response") const receipt = await response.wait() console.log("Receipt: ", receipt) diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index ea3b8263e..970561c8b 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -1409,7 +1409,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * * let walletClient = createWalletClient({ account, - chain: sepolia, + chain: baseSepolia, transport: http() }); @@ -1423,7 +1423,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { walletClient = createWalletClient({ newOwnerAccount, - chain: sepolia, + chain: baseSepolia, transport: http() }) @@ -1538,7 +1538,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { : [manyOrOneTransactions], buildUseropDto ) - + return this.sendUserOp(userOp) } diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index 8788e2333..ac90a26e9 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -22,7 +22,7 @@ export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { // will always be latest factory address export const DEFAULT_BICONOMY_FACTORY_ADDRESS = - "0x838eA1C60B57e967F14bF84141596A6FdB1909aa" // K1ValidatorFactory + "0x887Ca6FaFD62737D0E79A2b8Da41f0B15A864778" // K1ValidatorFactory export const DEFAULT_FALLBACK_HANDLER_ADDRESS = "0x0bBa6d96BD616BedC6BFaa341742FD43c60b83C1" @@ -31,7 +31,7 @@ export const BICONOMY_TOKEN_PAYMASTER = // will always be latest implementation address export const DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS = - "0x0000002512019Dafb59528B82CB92D3c5D2423aC" + "0x8EBDcA5ce92f9aBF1D1ab21de24068B2a2EaF808" export const ENTRYPOINT_V07_ADDRESS = "0x0000000071727De22E5E9d8BAf0edAc6f37da032" export const BICONOMY_IMPLEMENTATION_ADDRESSES: BiconomyImplementations = { @@ -97,14 +97,14 @@ export const ERC20_ABI = [ "function decimals() external view returns (uint8)" ] -// SEPOLIA CONTRACTS -export const NEXUS_IMPLEMENTATION = "0x5f22E8c476Cc95A8015296a304bf3410ab04D1fA" -export const BOOTSTRAP = "0x2adC3A47AC2E1235374CB6F7A9aD83e7De11F6C3" -export const BOOTSTRAP_LIB = "0xbcFEc7E020F7cfD6F316c351a0AAc39e7d3A2314" -export const K1_VALIDATOR_FACTORY = "0x838eA1C60B57e967F14bF84141596A6FdB1909aa" +// BASE SEPOLIA CONTRACTS +export const NEXUS_IMPLEMENTATION = "0x8EBDcA5ce92f9aBF1D1ab21de24068B2a2EaF808" +export const BOOTSTRAP = "0xBCe1Ff9bA78870FBd41DED89a5E618D86440fd94" +export const BOOTSTRAP_LIB = "0xdA76AA9A299a2C7cA40976817b6C7D57cb198613" +export const K1_VALIDATOR_FACTORY = "0x887Ca6FaFD62737D0E79A2b8Da41f0B15A864778" export const BICONOMY_META_FACTORY = - "0x50E77b227D036B277AfDB9F4B4bBcF0a1f22A51f" -export const MOCK_REGISTRY = "0x5d79F6247683fE309219e7399c26A63A72361CF0" + "0x69c06775D109126e6Ff97B1f95CBd4eaDF7e71bD" +export const MOCK_REGISTRY = "0x5d79F6247683fE309219e7399c26A63A72361CF0" // to update export const ENTRYPOINT_ADDRESS_V07 = "0x0000000071727De22E5E9d8BAf0edAc6f37da032" diff --git a/src/modules/utils/Constants.ts b/src/modules/utils/Constants.ts index f1e5ecd6e..2cdbe4401 100644 --- a/src/modules/utils/Constants.ts +++ b/src/modules/utils/Constants.ts @@ -4,7 +4,7 @@ import type { ModuleVersion } from "./Types.js" export const DEFAULT_MODULE_VERSION: ModuleVersion = "1.0.0-beta" // VALIDATORS -export const K1_VALIDATOR = "0x0839518b94038b0B6044f71830b0c79D2fD8D07d" +export const K1_VALIDATOR = "0x663E709f60477f07885230E213b8149a7027239B" export const OWNABLE_VALIDATOR = "0xBf2137a23F439Ca5Aa4360cC6970D70b24D07ea2" // EXECUTORS diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index b8ef86b29..adade958f 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -18,7 +18,7 @@ import { toHex } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { bsc, sepolia } from "viem/chains" +import { bsc, baseSepolia } from "viem/chains" import { beforeAll, describe, expect, test } from "vitest" import { DEFAULT_BICONOMY_FACTORY_ADDRESS, @@ -682,7 +682,7 @@ describe("Account:Read", () => { const DOMAIN_TYPEHASH = "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" const PARENT_TYPEHASH = "PersonalSign(bytes prefixed)" - const chainId = sepolia.id + const chainId = baseSepolia.id // Calculate the domain separator const domainSeparator = keccak256( @@ -745,7 +745,7 @@ describe("Account:Read", () => { "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" const PARENT_TYPEHASH = "TypedDataSign(Contents contents,bytes1 fields,string name,string version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] extensions) Contents(bytes32 stuff)" - const chainId = sepolia.id + const chainId = baseSepolia.id // Calculate the domain separator const domainSeparator = keccak256( diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index c989999b6..1de93a46c 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -114,7 +114,7 @@ describe("Account:Write", async () => { }, 60000) // test("Use enable mode", async () => { - // const counterAddress = "0x6BFE41FF0605a87911c0542bF958691ea2ac77f8" // base sepolia + // const counterAddress = "0x6BFE41FF0605a87911c0542bF958691ea2ac77f8" // base baseSepolia // const counterBefore = await publicClient.readContract({ // address: counterAddress, diff --git a/tests/modules/k1Validator.ts/write.test.ts b/tests/modules/k1Validator.ts/write.test.ts index 31503be42..2b3114daa 100644 --- a/tests/modules/k1Validator.ts/write.test.ts +++ b/tests/modules/k1Validator.ts/write.test.ts @@ -5,7 +5,7 @@ import { encodePacked } from "viem" import { privateKeyToAccount } from "viem/accounts" -import { sepolia } from "viem/chains" +import { baseSepolia } from "viem/chains" import { afterEach, describe, expect, test } from "vitest" import { K1_VALIDATOR, @@ -28,7 +28,7 @@ describe("Account:Modules:OwnableValidator", async () => { const [walletClient] = [ createWalletClient({ account, - chain: sepolia, + chain: baseSepolia, transport: http() }) ] diff --git a/tests/modules/ownableExecutor.ts/write.test.ts b/tests/modules/ownableExecutor.ts/write.test.ts index 2a1185828..f3c440e59 100644 --- a/tests/modules/ownableExecutor.ts/write.test.ts +++ b/tests/modules/ownableExecutor.ts/write.test.ts @@ -7,7 +7,7 @@ import { parseEther } from "viem" import { privateKeyToAccount } from "viem/accounts" -import { sepolia } from "viem/chains" +import { baseSepolia } from "viem/chains" import { describe, expect, test } from "vitest" import { ModuleType, @@ -27,12 +27,12 @@ describe("Account:Modules:OwnableExecutor", async () => { const [walletClient, walletClientTwo] = [ createWalletClient({ account, - chain: sepolia, + chain: baseSepolia, transport: http() }), createWalletClient({ account: accountTwo, - chain: sepolia, + chain: baseSepolia, transport: http() }) ] diff --git a/tests/modules/ownableValidator.ts/write/installed-module.test.ts b/tests/modules/ownableValidator.ts/write/installed-module.test.ts index 2a0113b0d..7c21ca800 100644 --- a/tests/modules/ownableValidator.ts/write/installed-module.test.ts +++ b/tests/modules/ownableValidator.ts/write/installed-module.test.ts @@ -1,6 +1,6 @@ import { http, createWalletClient, encodeAbiParameters } from "viem" import { privateKeyToAccount } from "viem/accounts" -import { sepolia } from "viem/chains" +import { baseSepolia } from "viem/chains" import { afterEach, describe, expect, test } from "vitest" import { Module, @@ -24,7 +24,7 @@ describe("Account:Modules:OwnableValidator", async () => { const [walletClient] = [ createWalletClient({ account, - chain: sepolia, + chain: baseSepolia, transport: http() }) ] diff --git a/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts b/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts index 8c15c7ae1..13882ec93 100644 --- a/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts +++ b/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts @@ -1,6 +1,6 @@ import { http, createWalletClient } from "viem" import { privateKeyToAccount } from "viem/accounts" -import { sepolia } from "viem/chains" +import { baseSepolia } from "viem/chains" import { describe, expect, test } from "vitest" import { ModuleType, @@ -19,7 +19,7 @@ describe("Account:Modules:OwnableValidator", async () => { const [walletClient] = [ createWalletClient({ account, - chain: sepolia, + chain: baseSepolia, transport: http() }) ] diff --git a/tests/utils.ts b/tests/utils.ts index e993ab8f4..e166e22a1 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -11,7 +11,7 @@ import { parseAbiParameters } from "viem" import { privateKeyToAccount } from "viem/accounts" -import { sepolia } from "viem/chains" +import { baseSepolia } from "viem/chains" import type { EIP712DomainReturn } from "../src" import { Logger } from "../src/account/utils/Logger" import { getChain } from "../src/account/utils/getChain" @@ -107,7 +107,7 @@ export const checkBalance = ( // const { chain: chainFromConfig } = getConfig() // const chain = _chain || chainFromConfig const publicClient = createPublicClient({ - chain: sepolia, + chain: baseSepolia, transport: http() }) From c2af94a9e28e321d215593ec2684722c20ae0f1d Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Thu, 15 Aug 2024 18:09:04 +0300 Subject: [PATCH 1229/1247] refactor: cleanup --- src/account/NexusSmartAccount.ts | 81 +---- src/account/utils/Types.ts | 2 +- src/bundler/Bundler.ts | 2 +- src/modules/base/BaseValidationModule.ts | 2 +- src/modules/index.ts | 4 +- src/modules/utils/Constants.ts | 5 +- src/modules/validators/OwnableValidator.ts | 326 ++++++++++-------- .../write.test.ts | 44 ++- .../write.test.ts | 123 ++----- .../write/installed-module.test.ts | 120 ------- .../write/uninstalled-module.test.ts | 102 ------ .../write/installed-module.test.ts | 204 +++++++++++ .../write/uninstalled-module.test.ts | 102 ++++++ 13 files changed, 562 insertions(+), 555 deletions(-) rename tests/modules/{k1Validator.ts => k1Validator}/write.test.ts (71%) rename tests/modules/{ownableExecutor.ts => ownableExecutor}/write.test.ts (57%) delete mode 100644 tests/modules/ownableValidator.ts/write/installed-module.test.ts delete mode 100644 tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts create mode 100644 tests/modules/ownableValidator/write/installed-module.test.ts create mode 100644 tests/modules/ownableValidator/write/uninstalled-module.test.ts diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index 970561c8b..1df916226 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -939,7 +939,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { async getDummySignatures(): Promise<Hex> { // const params = { ...(this.sessionData ? this.sessionData : {}), ..._params } this.isActiveValidationModuleDefined() - return (await this.activeValidationModule.getDummySignature()) as Hex + return (this.activeValidationModule.getDummySignature()) as Hex } // TODO: review this @@ -1538,7 +1538,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { : [manyOrOneTransactions], buildUseropDto ) - + return this.sendUserOp(userOp) } @@ -1599,7 +1599,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { buildUseropDto?: BuildUserOpOptions ): Promise<Partial<UserOperationStruct>> { const dummySignatureFetchPromise = this.getDummySignatures() - const [nonceFromFetch, signature] = await Promise.all([ + const [nonceFromFetch, dummySignature] = await Promise.all([ this.getBuildUserOpNonce(buildUseropDto?.nonceOptions), dummySignatureFetchPromise ]) @@ -1628,7 +1628,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { } // for this Smart Account current validation module dummy signature will be used to estimate gas - userOp.signature = signature + userOp.signature = dummySignature // userOp.paymasterAndData = buildUseropDto?.dummyPndOverride ?? "0x" // if ( @@ -2073,26 +2073,6 @@ export class NexusSmartAccount extends BaseSmartContractAccount { }) } - // async enableModule(moduleAddress: Hex): Promise<UserOpResponse> { - // const tx: Transaction = await this.getEnableModuleData(moduleAddress) - // const partialUserOp = await this.buildUserOp([tx]) - // return this.sendUserOp(partialUserOp) - // } - - // async getEnableModuleData(moduleAddress: Hex, value?: bigint): Promise<Transaction> { - // const callData = encodeFunctionData({ - // abi: NexusAccountAbi, - // functionName: "enableModule", - // args: [moduleAddress] - // }) - // const tx: Transaction = { - // to: await this.getAddress(), - // value: value ?? 0n, - // data: callData - // } - // return tx - // } - async getSetupAndEnableModuleData( moduleAddress: Hex, moduleSetupData: Hex @@ -2110,35 +2090,6 @@ export class NexusSmartAccount extends BaseSmartContractAccount { return tx } - // async disableModule( - // prevModule: Hex, - // moduleAddress: Hex - // ): Promise<UserOpResponse> { - // const tx: Transaction = await this.getDisableModuleData( - // prevModule, - // moduleAddress - // ) - // const partialUserOp = await this.buildUserOp([tx]) - // return this.sendUserOp(partialUserOp) - // } - - // async getDisableModuleData( - // prevModule: Hex, - // moduleAddress: Hex - // ): Promise<Transaction> { - // const callData = encodeFunctionData({ - // abi: NexusAccountAbi, - // functionName: "disableModule", - // args: [prevModule, moduleAddress] - // }) - // const tx: Transaction = { - // to: await this.getAddress(), - // value: "0x00", - // data: callData - // } - // return tx - // } - async isModuleInstalled({ moduleType, moduleAddress, @@ -2152,34 +2103,14 @@ export class NexusSmartAccount extends BaseSmartContractAccount { data ?? "0x" ])) as boolean } - throw new Error("Account is not deployed") + Logger.warn("A module cannot be installed on an undeployed account") + return false } getSmartAccountOwner(): SmartAccountSigner { return this.signer } - // async installOwnableExecutor(): Promise<UserOpReceipt> { - // const ownableExecutor = await OwnableExecutorModule.create(this); - // const installModuleData = encodeFunctionData({ - // abi: NexusAccountAbi, - // functionName: "installModule", - // args: [ModuleType.Execution, ownableExecutor.moduleInfo.module, ownableExecutor.moduleInfo.data ?? "0x"] - // }) - // const response = await this.sendTransaction({ - // to: await this.getAddress(), - // data: installModuleData - // }) - // console.log("Got response: ", response); - - // const receipt = await response.wait(); - // if(receipt.success) { - // this.installedExecutors.push(ownableExecutor); - // this.activeExecutionModule = ownableExecutor; - // } - // return receipt; - // } - async installModule({ moduleAddress, moduleType, diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 2d784a315..b9d4c7e6e 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -402,7 +402,7 @@ export type UserOperationStruct = { paymasterPostOpGasLimit?: bigint paymasterData?: Hex signature: Hex - initCode?: never + // initCode?: never paymasterAndData?: never } //#endregion UserOperationStruct diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index 35841fb8c..cc55424ad 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -207,7 +207,7 @@ export class Bundler implements IBundler { if (confirmations) { const latestBlock = await this.provider.getBlockNumber() const confirmedBlocks = - latestBlock - userOpResponse.receipt.blockNumber + BigInt(latestBlock) - BigInt(userOpResponse.receipt.blockNumber) if (confirmations >= confirmedBlocks) { clearInterval(intervalId) resolve(userOpResponse) diff --git a/src/modules/base/BaseValidationModule.ts b/src/modules/base/BaseValidationModule.ts index b5760a0e2..67f5af00d 100644 --- a/src/modules/base/BaseValidationModule.ts +++ b/src/modules/base/BaseValidationModule.ts @@ -7,7 +7,7 @@ export abstract class BaseValidationModule extends BaseModule { return this.signer } - async getDummySignature(): Promise<Hex> { + getDummySignature(): Hex { const moduleAddress = getAddress(this.getAddress()) const dynamicPart = moduleAddress.substring(2).padEnd(40, "0") return `0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000${dynamicPart}000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000` diff --git a/src/modules/index.ts b/src/modules/index.ts index 433ecaedb..0883b747e 100644 --- a/src/modules/index.ts +++ b/src/modules/index.ts @@ -1,6 +1,6 @@ import { OwnableExecutorModule } from "./executors/OwnableExecutor.js" import { K1ValidatorModule } from "./validators/K1ValidatorModule.js" -import { OwnableValidator } from "./validators/OwnableValidator.js" +// import { OwnableValidator } from "./validators/OwnableValidator.js" import { ValidationModule } from "./validators/ValidationModule.js" export * from "./utils/Types.js" @@ -10,5 +10,5 @@ export * from "./interfaces/IValidationModule.js" export const createOwnableExecutorModule = OwnableExecutorModule.create export const createK1ValidatorModule = K1ValidatorModule.create -export const createOwnableValidatorModule = OwnableValidator.create +// export const createOwnableValidatorModule = OwnableValidator.create export const createValidationModule = ValidationModule.create diff --git a/src/modules/utils/Constants.ts b/src/modules/utils/Constants.ts index 2cdbe4401..387f52851 100644 --- a/src/modules/utils/Constants.ts +++ b/src/modules/utils/Constants.ts @@ -5,11 +5,12 @@ export const DEFAULT_MODULE_VERSION: ModuleVersion = "1.0.0-beta" // VALIDATORS export const K1_VALIDATOR = "0x663E709f60477f07885230E213b8149a7027239B" -export const OWNABLE_VALIDATOR = "0xBf2137a23F439Ca5Aa4360cC6970D70b24D07ea2" +export const OWNABLE_VALIDATOR = "0xfb11d7ca9161F1DF508787BA45951225B6C0a681" +export const MULTI_FACTOR = "0x0D579C69CFB662D9EB6B0c69fa7abAA6d706f6F2"; // EXECUTORS export const MOCK_EXECUTOR: Hex = "0xA975e69917A4c856b17Fc8Cc4C352f326Ef21C6B" -export const OWNABLE_EXECUTOR = "0xc98B026383885F41d9a995f85FC480E9bb8bB891" +export const OWNABLE_EXECUTOR = "0x989110e958902f619148b8171fbDF1Dca0c5AE0B" // FALLBACKS export const MOCK_FALLBACK_HANDLER: Hex = diff --git a/src/modules/validators/OwnableValidator.ts b/src/modules/validators/OwnableValidator.ts index 64015cd91..399a53a64 100644 --- a/src/modules/validators/OwnableValidator.ts +++ b/src/modules/validators/OwnableValidator.ts @@ -1,147 +1,179 @@ -import { - type Address, - decodeAbiParameters, - encodeAbiParameters, - encodeFunctionData, - getAddress, - parseAbi, - parseAbiParameters -} from "viem" -import type { Hex } from "viem" -import type { NexusSmartAccount } from "../../account/NexusSmartAccount.js" -import { ModuleType, SENTINEL_ADDRESS } from "../../account/index.js" -import type { UserOpReceipt } from "../../bundler/index.js" -import { BaseValidationModule } from "../base/BaseValidationModule.js" -import { OWNABLE_VALIDATOR } from "../utils/Constants.js" -import type { V3ModuleInfo } from "../utils/Types.js" - -export class OwnableValidator extends BaseValidationModule { - public smartAccount: NexusSmartAccount - public owners: Address[] - public threshold: number - - private constructor( - moduleConfig: V3ModuleInfo, - smartAccount: NexusSmartAccount - ) { - const moduleData = decodeAbiParameters( - parseAbiParameters("uint256 threshold, address[] owners"), - moduleConfig.data - ) - super(moduleConfig, smartAccount.getSmartAccountOwner()) - this.threshold = Number(moduleData[0]) - this.owners = [...moduleData[1]] as Address[] - this.smartAccount = smartAccount - } - - public static async create( - smartAccount: NexusSmartAccount, - threshold: number, - owners: Address[], - hook?: Address - ): Promise<OwnableValidator> { - if ( - !owners.includes(await smartAccount.getSmartAccountOwner().getAddress()) - ) { - throw Error("Signer needs to be one of the owners") - } - const installData = encodeAbiParameters( - [ - { name: "threshold", type: "uint256" }, - { name: "owners", type: "address[]" } - ], - [BigInt(threshold), owners] - ) - const moduleInfo: V3ModuleInfo = { - module: OWNABLE_VALIDATOR, - type: ModuleType.Validation, - data: installData, - additionalContext: "0x", - hook - } - const instance = new OwnableValidator(moduleInfo, smartAccount) - return instance - } - - public async setThreshold(threshold: number): Promise<UserOpReceipt> { - const calldata = encodeFunctionData({ - functionName: "setThreshold", - abi: parseAbi(["function setThreshold(uint256 _threshold)"]), - args: [BigInt(threshold)] - }) - const response = await this.smartAccount.sendTransaction({ - to: this.moduleAddress, - data: calldata, - value: 0n - }) - const receipt = await response.wait() - return receipt - } - - public async removeOwner(owner: Address): Promise<UserOpReceipt> { - const owners = await this.getOwners() - let prevOwner: Address - - const currentOwnerIndex = owners.findIndex((o: Address) => o === owner) - - if (currentOwnerIndex === -1) { - throw new Error("Owner not found") - } - if (currentOwnerIndex === 0) { - prevOwner = SENTINEL_ADDRESS - } else { - prevOwner = getAddress(owners[currentOwnerIndex - 1]) - } - - const calldata = encodeFunctionData({ - functionName: "removeOwner", - abi: parseAbi(["function removeOwner(address prevOwner, address owner)"]), - args: [prevOwner, owner] - }) - - const response = await this.smartAccount.sendTransaction({ - to: this.moduleAddress, - data: calldata, - value: 0n - }) - const receipt = await response.wait() - return receipt - } - - public async addOwner(owner: Address): Promise<UserOpReceipt> { - const calldata = encodeFunctionData({ - functionName: "addOwner", - abi: parseAbi(["function addOwner(address owner)"]), - args: [owner] - }) - const response = await this.smartAccount.sendTransaction({ - to: this.moduleAddress, - data: calldata, - value: 0n - }) - const receipt = await response.wait() - return receipt - } - - public async getOwners(): Promise<Address[]> { - try { - const owners = (await this.smartAccount.publicClient.readContract({ - address: OWNABLE_VALIDATOR, - abi: parseAbi([ - "function getOwners(address account) external view returns (address[])" - ]), - functionName: "getOwners", - args: [await this.smartAccount.getAccountAddress()] - })) as Address[] - - return owners - } catch (err) { - console.error(err) - return [] - } - } - - public getMockSignature(): Hex { - return "0xe8b94748580ca0b4993c9a1b86b5be851bfc076ff5ce3a1ff65bf16392acfcb800f9b4f1aef1555c7fce5599fffb17e7c635502154a0333ba21f3ae491839af51c" - } -} +// import { +// type Address, +// concat, +// decodeAbiParameters, +// encodeAbiParameters, +// encodeFunctionData, +// getAddress, +// parseAbi, +// parseAbiParameters +// } from "viem" +// import type { Hex } from "viem" +// import type { NexusSmartAccount } from "../../account/NexusSmartAccount.js" +// import { ModuleType, SENTINEL_ADDRESS } from "../../account/index.js" +// import type { UserOpReceipt } from "../../bundler/index.js" +// import { BaseValidationModule } from "../base/BaseValidationModule.js" +// import { OWNABLE_VALIDATOR } from "../utils/Constants.js" +// import type { V3ModuleInfo } from "../utils/Types.js" + +// export class OwnableValidator extends BaseValidationModule { +// public smartAccount: NexusSmartAccount +// public owners: Address[] +// public threshold: number + +// private constructor( +// moduleConfig: V3ModuleInfo, +// smartAccount: NexusSmartAccount +// ) { +// const moduleData = decodeAbiParameters( +// parseAbiParameters("uint256 threshold, address[] owners"), +// moduleConfig.data +// ) +// super(moduleConfig, smartAccount.getSmartAccountOwner()) +// this.threshold = Number(moduleData[0]) +// this.owners = [...moduleData[1]] as Address[] +// this.smartAccount = smartAccount +// } + +// public static async create( +// smartAccount: NexusSmartAccount, +// threshold: number, +// owners: Address[], +// hook?: Address +// ): Promise<OwnableValidator> { +// if ( +// !owners.includes(await smartAccount.getSmartAccountOwner().getAddress()) +// ) { +// throw Error("Signer needs to be one of the owners") +// } +// const installData = encodeAbiParameters( +// [ +// { name: "threshold", type: "uint256" }, +// { name: "owners", type: "address[]" } +// ], +// [BigInt(threshold), owners] +// ) +// const moduleInfo: V3ModuleInfo = { +// module: OWNABLE_VALIDATOR, +// type: ModuleType.Validation, +// data: installData, +// additionalContext: "0x", +// hook +// } +// const instance = new OwnableValidator(moduleInfo, smartAccount) +// return instance +// } + +// public async setThreshold(threshold: number): Promise<UserOpReceipt> { +// const calldata = encodeFunctionData({ +// functionName: "setThreshold", +// abi: parseAbi(["function setThreshold(uint256 _threshold)"]), +// args: [BigInt(threshold)] +// }) +// const response = await this.smartAccount.sendTransaction({ +// to: this.moduleAddress, +// data: calldata, +// value: 0n +// }) +// const receipt = await response.wait(5) +// if(receipt.success) { +// this.threshold = threshold +// } +// return receipt +// } + +// public async removeOwner(owner: Address, signatures?: Hex[]): Promise<UserOpReceipt> { +// const owners = await this.getOwners() +// let prevOwner: Address + +// const currentOwnerIndex = owners.findIndex((o: Address) => o === owner) + +// if (currentOwnerIndex === -1) { +// throw new Error("Owner not found") +// } +// if (currentOwnerIndex === 0) { +// prevOwner = SENTINEL_ADDRESS +// } else { +// prevOwner = getAddress(owners[currentOwnerIndex - 1]) +// } + +// const calldata = encodeFunctionData({ +// functionName: "removeOwner", +// abi: parseAbi(["function removeOwner(address prevOwner, address owner)"]), +// args: [prevOwner, owner] +// }) + +// const transaction = { +// to: this.moduleAddress, +// data: calldata, +// value: 0n +// } + +// let receipt: UserOpReceipt; +// if(owners.length > 1) { +// if(signatures?.length === owners.length) { +// let userOp = await this.smartAccount.buildUserOp([transaction]); +// const finalSignature = concat(signatures); +// userOp.signature = finalSignature; +// const response = await this.smartAccount.sendUserOp(userOp); +// receipt = await response.wait(5); +// } else { +// throw new Error("Signatures must be provided for all owners") +// } +// } else { +// const response = await this.smartAccount.sendTransaction([transaction]) +// receipt = await response.wait(5) +// } + +// if(receipt.success) { +// this.owners = this.owners.filter((o: Address) => o !== owner) +// } +// return receipt + +// } + +// public async addOwner(owner: Address): Promise<UserOpReceipt> { +// const calldata = encodeFunctionData({ +// functionName: "addOwner", +// abi: parseAbi(["function addOwner(address owner)"]), +// args: [owner] +// }) +// const response = await this.smartAccount.sendTransaction({ +// to: this.moduleAddress, +// data: calldata, +// value: 0n +// }) +// const receipt = await response.wait(5) +// if(receipt.success) { +// this.owners.push(owner) +// } +// return receipt +// } + +// public async getOwners(): Promise<Address[]> { +// try { +// const owners = (await this.smartAccount.publicClient.readContract({ +// address: OWNABLE_VALIDATOR, +// abi: parseAbi([ +// "function getOwners(address account) external view returns (address[])" +// ]), +// functionName: "getOwners", +// args: [await this.smartAccount.getAccountAddress()] +// })) as Address[] + +// return owners +// } catch (err) { +// console.error(err) +// return [] +// } +// } + +// public getDummySignature(): Hex { +// return "0xfe68e79dbbc872d7a22c6f3eb24f8145edf8d8333092c666221db79bf236e25626e9b05d8230aee0baee7e8b15d60b51e408f1e640b1e0c89deb874b17e269d91b199dfd0340577f695639a048a231a64d181f4e2d66acd5c29ecd0a9b25593c291eb4aba21a15fa4fded885e2c44a49887de1cc9adced5088bcac65cf8c1f29c71c" as Hex +// } + +// async signUserOpHash(userOpHash: string): Promise<Hex> { +// const signature = await this.signer.signMessage({ raw: userOpHash as Hex }) +// return signature as Hex +// } +// } diff --git a/tests/modules/k1Validator.ts/write.test.ts b/tests/modules/k1Validator/write.test.ts similarity index 71% rename from tests/modules/k1Validator.ts/write.test.ts rename to tests/modules/k1Validator/write.test.ts index 2b3114daa..b4f35c77d 100644 --- a/tests/modules/k1Validator.ts/write.test.ts +++ b/tests/modules/k1Validator/write.test.ts @@ -1,8 +1,9 @@ import { http, createWalletClient, - encodeAbiParameters, - encodePacked + encodePacked, + encodeFunctionData, + parseAbi } from "viem" import { privateKeyToAccount } from "viem/accounts" import { baseSepolia } from "viem/chains" @@ -13,7 +14,7 @@ import { ModuleType, OWNABLE_VALIDATOR, createK1ValidatorModule, - createOwnableValidatorModule + getRandomSigner, } from "../../../src" import { createSmartAccountClient } from "../../../src/account" import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" @@ -23,7 +24,7 @@ import { getConfig } from "../../utils" describe("Account:Modules:OwnableValidator", async () => { const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" const [walletClient] = [ createWalletClient({ @@ -38,12 +39,12 @@ describe("Account:Modules:OwnableValidator", async () => { bundlerUrl }) - const owners = [walletClient.account.address, accountTwo.address] - const k1ValidationModule = await createK1ValidatorModule( smartAccount.getSigner() ) + smartAccount.setActiveValidationModule(k1ValidationModule); + describe("K1 Validator Module Tests", async () => { test("install k1 Validator with 1 owner", async () => { const isInstalledBefore = await smartAccount.isModuleInstalled({ @@ -60,17 +61,9 @@ describe("Account:Modules:OwnableValidator", async () => { data: encodePacked(["address"], [await smartAccount.getAddress()]) }) - // const isInstalled = await smartAccount.isModuleInstalled( - // { - // moduleType: ModuleType.Validation, - // moduleAddress: K1_VALIDATOR - // } - // ) - smartAccount.setActiveValidationModule(k1ValidationModule) expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() } }, 60000) @@ -81,5 +74,28 @@ describe("Account:Modules:OwnableValidator", async () => { }) expect(isInstalled).toBeTruthy() }, 60000) + + test("Mint an NFT using K1Validator as Validation Module", async () => { + const randomAccount = getRandomSigner(); + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [randomAccount.pbKey] + }) + + const transaction = { + to: nftAddress, + data: encodedCall + } + + const response = await smartAccount.sendTransaction([transaction]) + console.log(response, "response") + + const receipt = await response.wait() + console.log(receipt, "receipt") + + expect(receipt.success).toBe(true) + }, 60000) }) }) diff --git a/tests/modules/ownableExecutor.ts/write.test.ts b/tests/modules/ownableExecutor/write.test.ts similarity index 57% rename from tests/modules/ownableExecutor.ts/write.test.ts rename to tests/modules/ownableExecutor/write.test.ts index f3c440e59..711e2349d 100644 --- a/tests/modules/ownableExecutor.ts/write.test.ts +++ b/tests/modules/ownableExecutor/write.test.ts @@ -19,7 +19,7 @@ import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" import { getConfig } from "../../utils" describe("Account:Modules:OwnableExecutor", async () => { - const token = "0x5a80620D47e4b786C4eC070837cb712486FEE857" + const token = "0xfA5E6d39e46328961d625f6334726F057c94812A" const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() const account = privateKeyToAccount(`0x${privateKey}`) const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) @@ -42,42 +42,32 @@ describe("Account:Modules:OwnableExecutor", async () => { bundlerUrl }) + console.log(await smartAccount.getAddress(), "smartAccount.getAddress()"); + const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) describe("Ownable Executor Module Tests", async () => { - // test("install Ownable Executor", async () => { - // let isInstalled = await smartAccount.isModuleInstalled({ - // moduleType: ModuleType.Execution, - // moduleAddress: OWNABLE_EXECUTOR - // }) - - // console.log("init data", encodePacked( - // ["address"], - // [await smartAccount.getAddress()] - // )); - - // if (!isInstalled) { - // const receipt = await smartAccount.installModule({ - // moduleAddress: OWNABLE_EXECUTOR, - // moduleType: ModuleType.Execution, - // data: encodePacked( - // ["address"], - // [await smartAccount.getAddress()] - // ) - // }) - - // isInstalled = await smartAccount.isModuleInstalled({ - // moduleType: ModuleType.Execution, - // moduleAddress: OWNABLE_EXECUTOR - // }) - - // smartAccount.setActiveExecutionModule(ownableExecutorModule) - - // expect(receipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // } - // expect(isInstalled).toBeTruthy() - // }, 60000) + test("install Ownable Executor", async () => { + let isInstalled = await smartAccount.isModuleInstalled({ + moduleType: ModuleType.Execution, + moduleAddress: OWNABLE_EXECUTOR + }) + + if (!isInstalled) { + const receipt = await smartAccount.installModule({ + moduleAddress: OWNABLE_EXECUTOR, + moduleType: ModuleType.Execution, + data: encodePacked( + ["address"], + [await smartAccount.getAddress()] + ) + }) + + smartAccount.setActiveExecutionModule(ownableExecutorModule) + + expect(receipt.success).toBe(true) + } + }, 60000) test("Ownable Executor Module should be installed", async () => { const isInstalled = await smartAccount.isModuleInstalled({ @@ -88,54 +78,7 @@ describe("Account:Modules:OwnableExecutor", async () => { expect(isInstalled).toBeTruthy() }, 60000) - // test("uninstall Ownable Executor Module", async () => { - // let isInstalled = await smartAccount.isModuleInstalled({ - // moduleType: ModuleType.Execution, - // moduleAddress: OWNABLE_EXECUTOR - // }) - - // if (isInstalled) { - // const userOpReceipt = await smartAccount.uninstallModule({ - // moduleAddress: OWNABLE_EXECUTOR, - // moduleType: ModuleType.Execution - // }) - - // isInstalled = await smartAccount.isModuleInstalled({ - // moduleType: ModuleType.Execution, - // moduleAddress: OWNABLE_EXECUTOR - // }) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // } - // expect(isInstalled).toBeFalsy() - // }, 60000) - test("should add an owner to the module", async () => { - let isInstalled = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Execution, - moduleAddress: OWNABLE_EXECUTOR - }) - - // if (!isInstalled) { - // await smartAccount.installModule({ - // moduleAddress: OWNABLE_EXECUTOR, - // moduleType: ModuleType.Execution, - // data: encodePacked( - // ["address"], - // [await smartAccount.getAccountAddress()] - // ) - // }) - // } - - isInstalled = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Execution, - moduleAddress: OWNABLE_EXECUTOR - }) - - expect(isInstalled).to.be.true - const ownersBefore = await ownableExecutorModule.getOwners() const isOwnerBefore = ownersBefore.includes(accountTwo.address) @@ -199,15 +142,15 @@ describe("Account:Modules:OwnableExecutor", async () => { expect(txHash).toBeTruthy() }, 60000) - // test("should remove an owner from the module", async () => { - // const userOpReceipt = await ownableExecutorModule.removeOwner( - // accountTwo.address - // ) - // const owners = await ownableExecutorModule.getOwners() - // const isOwner = owners.includes(accountTwo.address) + test("should remove an owner from the module", async () => { + const userOpReceipt = await ownableExecutorModule.removeOwner( + accountTwo.address + ) + const owners = await ownableExecutorModule.getOwners() + const isOwner = owners.includes(accountTwo.address) - // expect(isOwner).toBeFalsy() - // expect(userOpReceipt.success).toBeTruthy() - // }, 60000) + expect(isOwner).toBeFalsy() + expect(userOpReceipt.success).toBeTruthy() + }, 60000) }) }) diff --git a/tests/modules/ownableValidator.ts/write/installed-module.test.ts b/tests/modules/ownableValidator.ts/write/installed-module.test.ts deleted file mode 100644 index 7c21ca800..000000000 --- a/tests/modules/ownableValidator.ts/write/installed-module.test.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { http, createWalletClient, encodeAbiParameters } from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { baseSepolia } from "viem/chains" -import { afterEach, describe, expect, test } from "vitest" -import { - Module, - ModuleType, - OWNABLE_VALIDATOR, - createOwnableValidatorModule -} from "../../../../src" -import { createSmartAccountClient } from "../../../../src/account" -import type { NexusSmartAccount } from "../../../../src/account/NexusSmartAccount" -import type { UserOpReceipt } from "../../../../src/bundler" -import { getConfig } from "../../../utils" - -describe("Account:Modules:OwnableValidator", async () => { - const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } - const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" - const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - - const [walletClient] = [ - createWalletClient({ - account, - chain: baseSepolia, - transport: http() - }) - ] - - const smartAccount: NexusSmartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl - }) - - const owners = [walletClient.account.address, accountTwo.address] - - const ownableValidatorModule = await createOwnableValidatorModule( - smartAccount, - 1, - owners - ) - - describe("Ownable Validator Module Tests", async () => { - test("install Ownable Validator with 1 owner", async () => { - const isInstalledBefore = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Validation, - moduleAddress: OWNABLE_VALIDATOR - }) - - const threshold = 1 - const installData = encodeAbiParameters( - [ - { name: "threshold", type: "uint256" }, - { name: "owners", type: "address[]" } - ], - [BigInt(threshold), [walletClient.account.address]] - ) - - // 866077811418299683029716658306608038086113973150706820694579085353n - // 866077811418299683029716658306608038086113973150706820694579085354n - console.log(isInstalledBefore, "isInstalledBefore") - - if (!isInstalledBefore) { - const userOpReceipt: UserOpReceipt = await smartAccount.installModule({ - moduleAddress: OWNABLE_VALIDATOR, - moduleType: ModuleType.Validation, - data: installData - }) - - const isInstalled = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Validation, - moduleAddress: OWNABLE_VALIDATOR - }) - - smartAccount.setActiveValidationModule(ownableValidatorModule) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeTruthy() - } - }, 60000) - - test("Ownable Validator Module should be installed", async () => { - const isInstalled = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Validation, - moduleAddress: OWNABLE_VALIDATOR - }) - expect(isInstalled).toBeTruthy() - }, 60000) - - // test("should add an owner to the module", async () => { - // const owners = await ownableValidatorModule.getOwners() - // if(owners.includes("0x4D8249d21c9553b1bD23cABF611011376dd3416a")) { - // console.log("Owner already exists in list, skipping test case ...") - // return - // } - // const userOpReceipt = await ownableValidatorModule.addOwner( - // "0x4D8249d21c9553b1bD23cABF611011376dd3416a" - // ) - // expect(userOpReceipt.success).toBeTruthy() - // }, 60000) - - // test("should remove an owner from the module", async () => { - // const ownersBefore = await ownableValidatorModule.getOwners(); - // console.log(ownersBefore, "ownersBefore"); - // const userOpReceipt = await ownableValidatorModule.removeOwner( - // "0x4D8249d21c9553b1bD23cABF611011376dd3416a" - // ) - // const ownersAfter = await ownableValidatorModule.getOwners(); - // console.log(ownersAfter, "ownersAfter"); - // expect(userOpReceipt.success).toBeTruthy() - // }, 60000) - - // test("should get all the owners", async () => { - // const owners = await ownableValidatorModule.getOwners() - // console.log(owners, "owners") - // }, 60000) - }) -}) diff --git a/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts b/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts deleted file mode 100644 index 13882ec93..000000000 --- a/tests/modules/ownableValidator.ts/write/uninstalled-module.test.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { http, createWalletClient } from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { baseSepolia } from "viem/chains" -import { describe, expect, test } from "vitest" -import { - ModuleType, - OWNABLE_VALIDATOR, - createOwnableValidatorModule -} from "../../../../src" -import { createSmartAccountClient } from "../../../../src/account" -import type { NexusSmartAccount } from "../../../../src/account/NexusSmartAccount" -import { getConfig } from "../../../utils" - -describe("Account:Modules:OwnableValidator", async () => { - const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - - const [walletClient] = [ - createWalletClient({ - account, - chain: baseSepolia, - transport: http() - }) - ] - - const smartAccount: NexusSmartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl - }) - - const owners = [walletClient.account.address, accountTwo.address] - - const ownableValidatorModule = await createOwnableValidatorModule( - smartAccount, - 1, - owners - ) - - describe("Uninstalled Ownable Validator Module - Tests", async () => { - test("uninstall Ownable Validator Module", async () => { - const isInstalledBefore = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Validation, - moduleAddress: OWNABLE_VALIDATOR - }) - // { - // sender: '0xda6959DA394B1BDdB068923A9A214dC0CD193D2E', - // nonce: 866077811418299683029716658306608038086113973150706820694579085355n, - // factoryData: undefined, - // factory: undefined, - // callData: '0xe9ae5c53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000138da6959da394b1bddb068923a9a214dc0cd193d2e00000000000000000000000000000000000000000000000000000000000000009517e29f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bf2137a23f439ca5aa4360cc6970d70b24d07ea200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fa66e705cf2582cf56528386bb9dfca1197672620000000000000000', - // signature: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000839518b94038b0B6044f71830b0c79D2fD8D07d000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000', - // maxFeePerGas: 37233087784n, - // maxPriorityFeePerGas: 14400000n - // } - - // { - // sender: '0xda6959DA394B1BDdB068923A9A214dC0CD193D2E', - // nonce: 866077811418299683029716658306608038086113973150706820694579085356n, - // factoryData: undefined, - // factory: undefined, - // callData: '0xe9ae5c530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000b8da6959da394b1bddb068923a9a214dc0cd193d2e00000000000000000000000000000000000000000000000000000000000000009517e29f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a975e69917a4c856b17fc8cc4c352f326ef21c6b000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000', - // signature: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000839518b94038b0B6044f71830b0c79D2fD8D07d000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000', - // maxFeePerGas: 11771639n, - // maxPriorityFeePerGas: 1000000n - // } - - console.log(isInstalledBefore, "isInstalledBefore") - - const userOpReceipt = await smartAccount.uninstallModule({ - moduleAddress: OWNABLE_VALIDATOR, - moduleType: ModuleType.Validation - }) - - const isInstalled = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Validation, - moduleAddress: OWNABLE_VALIDATOR - }) - - // after uninstalling the module, the SDK should setup the active module to the default module (K1 Validator) - - expect(userOpReceipt.success).toBe(true) - expect(isInstalled).toBeFalsy() - expect(userOpReceipt).toBeTruthy() - }, 60000) - - test("should revert adding an owner to the module", async () => { - const userOpReceipt = await ownableValidatorModule.addOwner( - "0x4D8249d21c9553b1bD23cABF611011376dd3416a" - ) - - expect(userOpReceipt.success).rejects.toThrowError() - }, 60000) - - test("should remove an owner from the module", async () => { - const userOpReceipt = await ownableValidatorModule.removeOwner( - "0x4D8249d21c9553b1bD23cABF611011376dd3416a" - ) - expect(userOpReceipt.success).rejects.toThrowError() - }, 60000) - }) -}) diff --git a/tests/modules/ownableValidator/write/installed-module.test.ts b/tests/modules/ownableValidator/write/installed-module.test.ts new file mode 100644 index 000000000..a386ab81b --- /dev/null +++ b/tests/modules/ownableValidator/write/installed-module.test.ts @@ -0,0 +1,204 @@ +// import { http, createWalletClient, encodeAbiParameters, encodeFunctionData, parseAbi, encodePacked, concat } from "viem" +// import { privateKeyToAccount } from "viem/accounts" +// import { baseSepolia } from "viem/chains" +// import { afterEach, describe, expect, test } from "vitest" +// import { +// K1_VALIDATOR, +// Module, +// ModuleType, +// OWNABLE_VALIDATOR, +// UserOperationStruct, +// createK1ValidatorModule, +// createOwnableValidatorModule, +// getRandomSigner +// } from "../../../../src" +// import { createSmartAccountClient } from "../../../../src/account" +// import type { NexusSmartAccount } from "../../../../src/account/NexusSmartAccount" +// import type { UserOpReceipt } from "../../../../src/bundler" +// import { getConfig } from "../../../utils" + +// describe("Account:Modules:OwnableValidator", async () => { +// const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } +// const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" +// const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" +// const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() +// const account = privateKeyToAccount(`0x${privateKey}`) +// const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + +// const [walletClient] = [ +// createWalletClient({ +// account, +// chain: baseSepolia, +// transport: http() +// }) +// ] + +// const smartAccount: NexusSmartAccount = await createSmartAccountClient({ +// signer: walletClient, +// bundlerUrl, +// }) + +// const owners = [walletClient.account.address] + +// const ownableValidatorModule = await createOwnableValidatorModule( +// smartAccount, +// 1, +// owners +// ) + +// const k1ValidationModule = await createK1ValidatorModule( +// smartAccount.getSigner() +// ) + +// smartAccount.setActiveValidationModule(ownableValidatorModule) + +// describe("Ownable Validator Module Tests", async () => { +// test.skip("install Ownable Validator with 1 owner", async () => { +// smartAccount.setActiveValidationModule(k1ValidationModule) +// const isInstalledBefore = await smartAccount.isModuleInstalled({ +// moduleType: ModuleType.Validation, +// moduleAddress: OWNABLE_VALIDATOR +// }) + +// const threshold = 1 +// const installData = encodeAbiParameters( +// [ +// { name: "threshold", type: "uint256" }, +// { name: "owners", type: "address[]" } +// ], +// [BigInt(threshold), [walletClient.account.address]] +// ) + +// console.log(isInstalledBefore, "isInstalledBefore") + +// if (!isInstalledBefore) { +// const userOpReceipt: UserOpReceipt = await smartAccount.installModule({ +// moduleAddress: OWNABLE_VALIDATOR, +// moduleType: ModuleType.Validation, +// data: installData +// }) + +// smartAccount.setActiveValidationModule(ownableValidatorModule) + +// expect(userOpReceipt.success).toBe(true) +// } +// }, 60000) + +// test.skip("Ownable Validator Module should be installed", async () => { +// const isInstalled = await smartAccount.isModuleInstalled({ +// moduleType: ModuleType.Validation, +// moduleAddress: OWNABLE_VALIDATOR +// }) +// expect(isInstalled).toBeTruthy() +// }, 60000) + +// test.skip("Mint NFT - Single Call", async () => { +// const randomAccount = getRandomSigner(); +// const encodedCall = encodeFunctionData({ +// abi: parseAbi(["function safeMint(address _to)"]), +// functionName: "safeMint", +// args: [randomAccount.pbKey] +// }) + +// smartAccount.setActiveValidationModule(ownableValidatorModule) + +// const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: ownableValidatorModule.moduleAddress}); +// console.log("Is the module installed ? ", isInstalled); + +// const transaction = { +// to: nftAddress, // NFT address +// data: encodedCall +// } + +// const response = await smartAccount.sendTransaction([transaction]) +// console.log(response, "response") + +// const receipt = await response.wait() +// console.log(receipt, "receipt") + +// expect(receipt.userOpHash).toBeTruthy() +// }, 60000) + +// test("Should execute a user op if threshold was met", async () => { +// const owners = await ownableValidatorModule.getOwners() +// console.log("owners: ", owners); + +// // if(!owners.includes(accountTwo.address)) { +// // const userOpReceipt = await ownableValidatorModule.addOwner( +// // accountTwo.address +// // ) +// // expect(userOpReceipt.success).toBeTruthy(); +// // } + +// // const receipt = await ownableValidatorModule.setThreshold(2); +// // expect(receipt.success).toBeTruthy(); +// // expect(ownableValidatorModule.threshold).toBe(2); + +// const randomAccount = getRandomSigner(); +// const encodedCall = encodeFunctionData({ +// abi: parseAbi(["function safeMint(address _to)"]), +// functionName: "safeMint", +// args: [randomAccount.pbKey] +// }) + +// const transaction = { +// to: nftAddress, // NFT address +// data: encodedCall +// } +// let userOp = await smartAccount.buildUserOp([transaction]) +// console.log(userOp, "userOp"); + +// const userOpHash = await smartAccount.getUserOpHash(userOp) +// const signature1 = await account.signMessage({message: userOpHash}); +// const signature2 = await accountTwo.signMessage({message: userOpHash}); + +// // const finalSignature = encodePacked(['bytes', 'bytes'],[signature1, signature2]); +// const finalSignature = encodePacked(['bytes', 'bytes'],[signature1, signature2]); +// console.log(finalSignature, "finalSignature"); + +// userOp.signature = finalSignature; +// console.log("userOp: ", userOp); + +// // const mintNFTResponse = await smartAccount.sendTransaction([transaction]) +// const mintNFTResponse = await smartAccount.sendSignedUserOp(userOp as UserOperationStruct) +// const mintNFTReceipt = await mintNFTResponse.wait() +// console.log(mintNFTReceipt, "receipt") + +// expect(mintNFTReceipt.userOpHash).toBeTruthy() +// expect(mintNFTReceipt.success).toBe(true) +// }, 60000) + +// test.skip("Should revert a user op if threshold was not met", async () => { +// const randomAccount = getRandomSigner(); +// const encodedCall = encodeFunctionData({ +// abi: parseAbi(["function safeMint(address _to)"]), +// functionName: "safeMint", +// args: [randomAccount.pbKey] +// }) + +// const transaction = { +// to: nftAddress, // NFT address +// data: encodedCall +// } + +// expect(smartAccount.buildUserOp([transaction])).rejects.toThrowError("User operation reverted during simulation with reason: 0x8baa579f"); +// }, 60000) + +// test.skip("should remove an owner from the module", async () => { +// const ownersBefore = await ownableValidatorModule.getOwners(); +// console.log(ownersBefore, "ownersBefore"); + +// const userOpReceipt = await ownableValidatorModule.removeOwner( +// accountTwo.address +// ) +// const ownersAfter = await ownableValidatorModule.getOwners(); +// console.log(ownersAfter, "ownersAfter"); +// expect(userOpReceipt.success).toBeTruthy() +// }, 60000) + +// test.skip("should get all the owners", async () => { +// const owners = await ownableValidatorModule.getOwners() +// console.log(owners, "owners") +// }, 60000) +// }) +// }) diff --git a/tests/modules/ownableValidator/write/uninstalled-module.test.ts b/tests/modules/ownableValidator/write/uninstalled-module.test.ts new file mode 100644 index 000000000..555828ebe --- /dev/null +++ b/tests/modules/ownableValidator/write/uninstalled-module.test.ts @@ -0,0 +1,102 @@ +// import { http, createWalletClient } from "viem" +// import { privateKeyToAccount } from "viem/accounts" +// import { baseSepolia } from "viem/chains" +// import { describe, expect, test } from "vitest" +// import { +// ModuleType, +// OWNABLE_VALIDATOR, +// createOwnableValidatorModule +// } from "../../../../src" +// import { createSmartAccountClient } from "../../../../src/account" +// import type { NexusSmartAccount } from "../../../../src/account/NexusSmartAccount" +// import { getConfig } from "../../../utils" + +// describe("Account:Modules:OwnableValidator", async () => { +// const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() +// const account = privateKeyToAccount(`0x${privateKey}`) +// const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) + +// const [walletClient] = [ +// createWalletClient({ +// account, +// chain: baseSepolia, +// transport: http() +// }) +// ] + +// const smartAccount: NexusSmartAccount = await createSmartAccountClient({ +// signer: walletClient, +// bundlerUrl +// }) + +// const owners = [walletClient.account.address, accountTwo.address] + +// const ownableValidatorModule = await createOwnableValidatorModule( +// smartAccount, +// 1, +// owners +// ) + +// describe("Uninstalled Ownable Validator Module - Tests", async () => { +// test("uninstall Ownable Validator Module", async () => { +// const isInstalledBefore = await smartAccount.isModuleInstalled({ +// moduleType: ModuleType.Validation, +// moduleAddress: OWNABLE_VALIDATOR +// }) +// // { +// // sender: '0xda6959DA394B1BDdB068923A9A214dC0CD193D2E', +// // nonce: 866077811418299683029716658306608038086113973150706820694579085355n, +// // factoryData: undefined, +// // factory: undefined, +// // callData: '0xe9ae5c53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000138da6959da394b1bddb068923a9a214dc0cd193d2e00000000000000000000000000000000000000000000000000000000000000009517e29f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bf2137a23f439ca5aa4360cc6970d70b24d07ea200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fa66e705cf2582cf56528386bb9dfca1197672620000000000000000', +// // signature: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000839518b94038b0B6044f71830b0c79D2fD8D07d000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000', +// // maxFeePerGas: 37233087784n, +// // maxPriorityFeePerGas: 14400000n +// // } + +// // { +// // sender: '0xda6959DA394B1BDdB068923A9A214dC0CD193D2E', +// // nonce: 866077811418299683029716658306608038086113973150706820694579085356n, +// // factoryData: undefined, +// // factory: undefined, +// // callData: '0xe9ae5c530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000b8da6959da394b1bddb068923a9a214dc0cd193d2e00000000000000000000000000000000000000000000000000000000000000009517e29f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a975e69917a4c856b17fc8cc4c352f326ef21c6b000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000', +// // signature: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000839518b94038b0B6044f71830b0c79D2fD8D07d000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000', +// // maxFeePerGas: 11771639n, +// // maxPriorityFeePerGas: 1000000n +// // } + +// console.log(isInstalledBefore, "isInstalledBefore") + +// const userOpReceipt = await smartAccount.uninstallModule({ +// moduleAddress: OWNABLE_VALIDATOR, +// moduleType: ModuleType.Validation +// }) + +// const isInstalled = await smartAccount.isModuleInstalled({ +// moduleType: ModuleType.Validation, +// moduleAddress: OWNABLE_VALIDATOR +// }) + +// // after uninstalling the module, the SDK should setup the active module to the default module (K1 Validator) + +// expect(userOpReceipt.success).toBe(true) +// expect(isInstalled).toBeFalsy() +// expect(userOpReceipt).toBeTruthy() +// }, 60000) + +// test("should revert adding an owner to the module", async () => { +// const userOpReceipt = await ownableValidatorModule.addOwner( +// "0x4D8249d21c9553b1bD23cABF611011376dd3416a" +// ) + +// expect(userOpReceipt.success).rejects.toThrowError() +// }, 60000) + +// test("should remove an owner from the module", async () => { +// const userOpReceipt = await ownableValidatorModule.removeOwner( +// "0x4D8249d21c9553b1bD23cABF611011376dd3416a" +// ) +// expect(userOpReceipt.success).rejects.toThrowError() +// }, 60000) +// }) +// }) From d283ea40b570e9c65c312cd5b06844011df172ed Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Fri, 16 Aug 2024 10:40:34 +0300 Subject: [PATCH 1230/1247] refactor: cleanup + tsdoc + tests --- src/account/NexusSmartAccount.ts | 37 +++++++++- src/modules/base/BaseExecutionModule.ts | 2 +- src/modules/executors/OwnableExecutor.ts | 24 ++++++- tests/modules/ownableExecutor/read.test.ts | 40 +++++++++++ tests/modules/ownableExecutor/write.test.ts | 78 ++++++++++++++++++--- 5 files changed, 165 insertions(+), 16 deletions(-) create mode 100644 tests/modules/ownableExecutor/read.test.ts diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index 1df916226..c4b06bfd0 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -2350,7 +2350,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { value: BigInt(tx.value ?? 0n) } }) - return await this.activeExecutionModule?.executeFromExecutor( + return await this.activeExecutionModule?.execute( executions, ownedAccountAddress ) @@ -2360,7 +2360,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { callData: (transactions[0].data ?? "0x") as Hex, value: BigInt(transactions[0].value ?? 0n) } - return await this.activeExecutionModule.executeFromExecutor( + return await this.activeExecutionModule.execute( execution, ownedAccountAddress ) @@ -2370,11 +2370,20 @@ export class NexusSmartAccount extends BaseSmartContractAccount { ) } - async supportsExecutionMode(mode: Hex): Promise<boolean> { + /** + * Checks if the account contract supports a specific execution mode. + * @param mode - The execution mode to check, represented as a viem Address. + * @returns A promise that resolves to a boolean indicating whether the execution mode is supported. + */ + async supportsExecutionMode(mode: Address): Promise<boolean> { const accountContract = await this._getAccountContract() return (await accountContract.read.supportsExecutionMode([mode])) as boolean } + /** + * Retrieves the list of installed validators for the account. + * @returns A promise that resolves to an array of validator addresses. + */ async getInstalledValidators(): Promise<Address[]> { const accountContract = await this._getAccountContract() return ( @@ -2385,6 +2394,10 @@ export class NexusSmartAccount extends BaseSmartContractAccount { )[0] as Address[] } + /** + * Retrieves the list of installed executors for the account. + * @returns A promise that resolves to an array of executor addresses. + */ async getInstalledExecutors(): Promise<Address[]> { const accountContract = await this._getAccountContract() return ( @@ -2395,6 +2408,10 @@ export class NexusSmartAccount extends BaseSmartContractAccount { )[0] as Address[] } + /** + * Retrieves all installed modules for the account, including validators, executors, active hook, and fallback handler. + * @returns A promise that resolves to an array of addresses representing all installed modules. + */ async getInstalledModules(): Promise<Address[]> { const validators = await this.getInstalledValidators() const executors = await this.getInstalledExecutors() @@ -2404,11 +2421,20 @@ export class NexusSmartAccount extends BaseSmartContractAccount { return [...validators, ...executors, hook, fallbackHandler] } + /** + * Retrieves the active hook for the account. + * @returns A promise that resolves to the address of the active hook. + */ async getActiveHook(): Promise<Address> { const accountContract = await this._getAccountContract() return (await accountContract.read.getActiveHook()) as Address } + /** + * Retrieves the fallback handler for a given selector. + * @param selector - Optional hexadecimal selector. If not provided, uses a generic fallback selector. + * @returns A promise that resolves to the address of the fallback handler. + */ async getFallbackBySelector(selector?: Hex): Promise<Address> { const accountContract = await this._getAccountContract() return (await accountContract.read.getFallbackHandlerBySelector([ @@ -2416,6 +2442,11 @@ export class NexusSmartAccount extends BaseSmartContractAccount { ])) as Address } + /** + * Checks if the account supports a specific module type. + * @param moduleType - The type of module to check for support. + * @returns A promise that resolves to a boolean indicating whether the module type is supported. + */ async supportsModule(moduleType: ModuleType): Promise<boolean> { const accountContract = await this._getAccountContract() return (await accountContract.read.supportsModule([moduleType])) as boolean diff --git a/src/modules/base/BaseExecutionModule.ts b/src/modules/base/BaseExecutionModule.ts index c4a9a5ff0..f63140753 100644 --- a/src/modules/base/BaseExecutionModule.ts +++ b/src/modules/base/BaseExecutionModule.ts @@ -4,7 +4,7 @@ import { BaseModule } from "../base/BaseModule.js" import type { Execution } from "../utils/Types.js" export abstract class BaseExecutionModule extends BaseModule { - abstract executeFromExecutor( + abstract execute( execution: Execution | Execution[], ownedAccountAddress?: Address ): Promise<UserOpReceipt> diff --git a/src/modules/executors/OwnableExecutor.ts b/src/modules/executors/OwnableExecutor.ts index bd3b979a8..1c96d0020 100644 --- a/src/modules/executors/OwnableExecutor.ts +++ b/src/modules/executors/OwnableExecutor.ts @@ -16,12 +16,16 @@ import type { Execution, V3ModuleInfo } from "../utils/Types" export class OwnableExecutorModule extends BaseExecutionModule { smartAccount!: NexusSmartAccount + public owners: Address[] + public constructor( moduleInfo: V3ModuleInfo, - smartAccount: NexusSmartAccount + smartAccount: NexusSmartAccount, + owners: Address[] ) { super(moduleInfo, smartAccount.getSigner()) this.smartAccount = smartAccount + this.owners = owners } public static async create( @@ -34,11 +38,19 @@ export class OwnableExecutorModule extends BaseExecutionModule { data: await signer.getAddress(), additionalContext: "0x" } - const instance = new OwnableExecutorModule(moduleInfo, smartAccount) + const owners = await smartAccount.publicClient.readContract({ + address: OWNABLE_EXECUTOR, + abi: parseAbi([ + "function getOwners(address account) external view returns (address[])" + ]), + functionName: "getOwners", + args: [await smartAccount.getAddress()] + }) + const instance = new OwnableExecutorModule(moduleInfo, smartAccount, owners as Address[]) return instance } - public async executeFromExecutor( + public async execute( execution: Execution | Execution[], accountAddress?: Address ): Promise<UserOpReceipt> { @@ -117,6 +129,9 @@ export class OwnableExecutorModule extends BaseExecutionModule { value: 0n }) const receipt = await response.wait() + if (receipt.success) { + this.owners.push(newOwner) + } return receipt } @@ -150,6 +165,9 @@ export class OwnableExecutorModule extends BaseExecutionModule { }) const receipt = await response.wait() + if (receipt.success) { + this.owners = this.owners.filter((o: Address) => o !== ownerToRemove) + } return receipt } diff --git a/tests/modules/ownableExecutor/read.test.ts b/tests/modules/ownableExecutor/read.test.ts new file mode 100644 index 000000000..ea5776764 --- /dev/null +++ b/tests/modules/ownableExecutor/read.test.ts @@ -0,0 +1,40 @@ +import { + http, + createWalletClient, + } from "viem" + import { privateKeyToAccount } from "viem/accounts" + import { baseSepolia } from "viem/chains" + import { describe, expect, test } from "vitest" + import { + createOwnableExecutorModule + } from "../../../src" + import { createSmartAccountClient } from "../../../src/account" + import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" + import { getConfig } from "../../utils" + + describe("Account:Modules:OwnableExecutor", async () => { + const { privateKey, bundlerUrl } = getConfig() + const account = privateKeyToAccount(`0x${privateKey}`) + + const [walletClient] = [ + createWalletClient({ + account, + chain: baseSepolia, + transport: http() + }) + ] + + const smartAccount: NexusSmartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl + }) + + describe("Ownable Executor Module Tests", async () => { + test("should initialize Ownable Executor Module with correct owners", async () => { + const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) + const owners = await ownableExecutorModule.getOwners(); + expect(owners).toStrictEqual(ownableExecutorModule.owners); + }) + }) + }) + \ No newline at end of file diff --git a/tests/modules/ownableExecutor/write.test.ts b/tests/modules/ownableExecutor/write.test.ts index 711e2349d..5a5a7ffbe 100644 --- a/tests/modules/ownableExecutor/write.test.ts +++ b/tests/modules/ownableExecutor/write.test.ts @@ -42,12 +42,10 @@ describe("Account:Modules:OwnableExecutor", async () => { bundlerUrl }) - console.log(await smartAccount.getAddress(), "smartAccount.getAddress()"); - const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) describe("Ownable Executor Module Tests", async () => { - test("install Ownable Executor", async () => { + test.skip("install Ownable Executor", async () => { let isInstalled = await smartAccount.isModuleInstalled({ moduleType: ModuleType.Execution, moduleAddress: OWNABLE_EXECUTOR @@ -69,7 +67,7 @@ describe("Account:Modules:OwnableExecutor", async () => { } }, 60000) - test("Ownable Executor Module should be installed", async () => { + test.skip("Ownable Executor Module should be installed", async () => { const isInstalled = await smartAccount.isModuleInstalled({ moduleType: ModuleType.Execution, moduleAddress: OWNABLE_EXECUTOR @@ -78,7 +76,7 @@ describe("Account:Modules:OwnableExecutor", async () => { expect(isInstalled).toBeTruthy() }, 60000) - test("should add an owner to the module", async () => { + test.skip("should add an owner to the module", async () => { const ownersBefore = await ownableExecutorModule.getOwners() const isOwnerBefore = ownersBefore.includes(accountTwo.address) @@ -98,7 +96,7 @@ describe("Account:Modules:OwnableExecutor", async () => { expect(userOpReceipt.success).toBeTruthy() }, 60000) - test("delegated owner transfers tokens from smart account", async () => { + test.skip("EOA 2 can execute actions on behalf of SA 1", async () => { const valueToTransfer = parseEther("0.1") const recipient = accountTwo.address const transferEncodedCall = encodeFunctionData({ @@ -128,8 +126,9 @@ describe("Account:Modules:OwnableExecutor", async () => { ] }) + // EOA 2 (walletClientTwo) executes an action on behalf of SA 1 which is owned by EOA 1 (walletClientOne) const txHash = await walletClientTwo.sendTransaction({ - account: accountTwo, // Called by delegated owner + account: accountTwo, // Called by delegated EOA owner to: ownableExecutorModule.moduleAddress, data: calldata, value: 0n @@ -138,11 +137,72 @@ describe("Account:Modules:OwnableExecutor", async () => { const balanceAfter = await smartAccount.getBalances([token]) console.log("balanceAfter", balanceAfter) - console.log("txHash", txHash) expect(txHash).toBeTruthy() }, 60000) - test("should remove an owner from the module", async () => { + test.skip("SA 2 can execute actions on behalf of SA 1", async () => { + + const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + signer: walletClientTwo, + bundlerUrl + }) + + const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2) + + // First, we need to install the OwnableExecutor module on SA 2 + let isInstalled = await smartAccount2.isModuleInstalled({ + moduleType: ModuleType.Execution, + moduleAddress: OWNABLE_EXECUTOR + }) + + if (!isInstalled) { + await smartAccount2.installModule({ + moduleAddress: OWNABLE_EXECUTOR, + moduleType: ModuleType.Execution, + data: encodePacked( + ["address"], + [await smartAccount2.getAddress()] + ) + }) + } + + smartAccount2.setActiveExecutionModule(ownableExecutorModule) + + const valueToTransfer = parseEther("0.1") + const recipient = accountTwo.address + const transferEncodedCall = encodeFunctionData({ + abi: parseAbi(["function transfer(address to, uint256 value)"]), + functionName: "transfer", + args: [recipient, valueToTransfer] + }) + + const owners = await ownableExecutorModule2.getOwners() + + // check if SA 2 is as an owner of SA 1 + const isOwner = owners.includes(await smartAccount2.getAddress()) + if(!isOwner) { + const userOpReceipt = await ownableExecutorModule2.addOwner( + await smartAccount2.getAddress() + ) + expect(userOpReceipt.success).toBeTruthy() + } + + const transferTransaction = { + to: token, + data: transferEncodedCall, + value: 0n + } + + smartAccount2.setActiveExecutionModule(ownableExecutorModule2) + // SA 2 will execute the transferTransaction on behalf of SA 1 (smartAccount) + const receipt = await smartAccount2.sendTransactionWithExecutor([transferTransaction], await smartAccount.getAddress()); + console.log(receipt, "receipt"); + + expect(receipt.userOpHash).toBeTruthy() + expect(receipt.success).toBe(true) + }, 60000) + + test.skip("should remove an owner from the module", async () => { const userOpReceipt = await ownableExecutorModule.removeOwner( accountTwo.address ) From dc9f53aa0bcbe832e4101bfe137575a547f900be Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Fri, 16 Aug 2024 16:02:56 +0300 Subject: [PATCH 1231/1247] fix: fixed script --- scripts/sendUserOperation.ts | 2 +- src/modules/utils/Helper.ts | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/scripts/sendUserOperation.ts b/scripts/sendUserOperation.ts index 149f7a1bd..d2d30875d 100644 --- a/scripts/sendUserOperation.ts +++ b/scripts/sendUserOperation.ts @@ -1,7 +1,7 @@ import { privateKeyToAccount } from "viem/accounts" import { getConfig } from "../tests/utils" import { createWalletClient, http, parseEther } from "viem" -import { createK1ValidatorModule, createSmartAccountClient, ModuleType } from "../src" +import { createK1ValidatorModule, createSmartAccountClient } from "../src" const { diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index 8d0ddcf06..6ee8f086e 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -17,7 +17,7 @@ import { type Transaction, createK1ValidatorModule, createOwnableExecutorModule, - createOwnableValidatorModule + // createOwnableValidatorModule } from "../../index.js" import type { BaseModule } from "../base/BaseModule.js" @@ -250,12 +250,12 @@ export const createModuleInstace = async ( if (module === Module.OwnableExecutor) { return await createOwnableExecutorModule(smartAccount) } - if (module === Module.OwnableValidator) { - return await createOwnableValidatorModule( - smartAccount, - config.threshold, - config.owners - ) - } + // if (module === Module.OwnableValidator) { + // return await createOwnableValidatorModule( + // smartAccount, + // config.threshold, + // config.owners + // ) + // } return await createK1ValidatorModule(smartAccount.getSigner()) } From b3fe78f74ec366f50bbbb5ad8cf043e689df6bff Mon Sep 17 00:00:00 2001 From: GabiDev <gv@popoo.io> Date: Fri, 16 Aug 2024 17:55:50 +0300 Subject: [PATCH 1232/1247] refactor: removed initCode from packing --- src/modules/utils/Helper.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index 6ee8f086e..26bbbcf2d 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -105,12 +105,11 @@ function packUserOp( if (forSignature) { return encodeAbiParameters( parseAbiParameters( - "address, uint256, bytes32, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32" + "address, uint256, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32" ), [ op.sender ?? "0x", BigInt(op.nonce ?? 0n), - keccak256(op.initCode ?? "0x"), keccak256(op.callData), BigInt(op.callGasLimit ?? 0n), BigInt(op.verificationGasLimit ?? 0n), @@ -124,12 +123,11 @@ function packUserOp( // for the purpose of calculating gas cost encode also signature (and no keccak of bytes) return encodeAbiParameters( parseAbiParameters( - "address, uint256, bytes, bytes, uint256, uint256, uint256, uint256, uint256, bytes" + "address, uint256, bytes, uint256, uint256, uint256, uint256, uint256, bytes" ), [ op.sender ?? "0x", BigInt(op.nonce ?? 0n), - keccak256(op.initCode ?? "0x"), keccak256(op.callData), BigInt(op.callGasLimit ?? 0n), BigInt(op.verificationGasLimit ?? 0n), From 43bca20de66cc28afc342c65049eb9086c0fbb25 Mon Sep 17 00:00:00 2001 From: VGabriel45 <vgabrielmarian21@gmai.com> Date: Tue, 20 Aug 2024 11:25:29 +0300 Subject: [PATCH 1233/1247] refactor: cleanup variable names and added 1 more test --- src/account/NexusSmartAccount.ts | 4 +- src/account/utils/Types.ts | 2 +- src/modules/executors/OwnableExecutor.ts | 3 +- tests/account/write.test.ts | 32 +++++------ tests/modules/k1Validator/write.test.ts | 8 ++- tests/modules/ownableExecutor/write.test.ts | 62 +++++++++++++++++++++ 6 files changed, 89 insertions(+), 22 deletions(-) diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index c4b06bfd0..f3d385d7a 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -2121,7 +2121,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { switch (moduleType) { case ModuleType.Validation: case ModuleType.Execution: - case ModuleType.Hooks: + case ModuleType.Hook: execution = await this._installModule({ moduleAddress, moduleType, @@ -2196,7 +2196,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { switch (moduleType) { case ModuleType.Validation: case ModuleType.Execution: - case ModuleType.Hooks: + case ModuleType.Hook: execution = await this._uninstallModule(moduleAddress, moduleType, data) return ( await this.sendTransaction({ diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index b9d4c7e6e..cbfc22a3e 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -623,7 +623,7 @@ export enum ModuleType { Validation = 1, Execution = 2, Fallback = 3, - Hooks = 4 + Hook = 4 } export type ModuleInfoParams = { diff --git a/src/modules/executors/OwnableExecutor.ts b/src/modules/executors/OwnableExecutor.ts index 1c96d0020..800c5c52c 100644 --- a/src/modules/executors/OwnableExecutor.ts +++ b/src/modules/executors/OwnableExecutor.ts @@ -84,8 +84,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { type: "tuple[]" } ], - // @ts-ignore - [executions] + [execution] ) ] }) diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 1de93a46c..62c100beb 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -233,16 +233,16 @@ describe("Account:Write", async () => { // test("should uninstall dummy K1Validator module", async () => { // const newK1ValidatorContract = // "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - // const prevAddress: Hex = "0x9C08e1CE188C29bAaeBc64A08cF2Ec44207749B6" - // const deInitData = encodeAbiParameters( - // [ - // { name: "prev", type: "address" }, - // { name: "disableModuleData", type: "bytes" } - // ], - // [prevAddress, toHex(stringToBytes(""))] - // ) - // console.log(deInitData, "deInitData"); - // const userOpReceipt = await smartAccount.uninstallModule(newK1ValidatorContract, ModuleType.Validation, deInitData); + const prevAddress: Hex = "0x9C08e1CE188C29bAaeBc64A08cF2Ec44207749B6" + const deInitData = encodeAbiParameters( + [ + { name: "prev", type: "address" }, + { name: "disableModuleData", type: "bytes" } + ], + [prevAddress, toHex(stringToBytes(""))] + ) + console.log(deInitData, "deInitData"); + const userOpReceipt = await smartAccount.uninstallModule(newK1ValidatorContract, ModuleType.Validation, deInitData); // const isInstalled = await smartAccount.isModuleInstalled( // ModuleType.Validation, // newK1ValidatorContract @@ -366,20 +366,20 @@ describe("Account:Write", async () => { // describe("Account:Hook Module Tests", async () => { // test("install a mock Hook module", async () => { - // const isSupported = await smartAccount.supportsModule(ModuleType.Hooks) + // const isSupported = await smartAccount.supportsModule(ModuleType.Hook) // console.log(isSupported, "is supported") // const isInstalledBefore = await smartAccount.isModuleInstalled( - // ModuleType.Hooks, + // ModuleType.Hook, // MOCK_HOOK // ) // console.log(isInstalledBefore, "is installed before") - // const userOpReceipt = await smartAccount.installModule(MOCK_HOOK, ModuleType.Hooks) + // const userOpReceipt = await smartAccount.installModule(MOCK_HOOK, ModuleType.Hook) // console.log(userOpReceipt, "user op receipt") // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Hooks, + // ModuleType.Hook, // MOCK_HOOK // ) @@ -402,10 +402,10 @@ describe("Account:Write", async () => { // ], // [prevAddress, toHex(stringToBytes(""))] // ) - // const userOpReceipt = await smartAccount.uninstallModule(MOCK_HOOK, ModuleType.Hooks, deInitData) + // const userOpReceipt = await smartAccount.uninstallModule(MOCK_HOOK, ModuleType.Hook, deInitData) // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Hooks, + // ModuleType.Hook, // MOCK_HOOK // ) diff --git a/tests/modules/k1Validator/write.test.ts b/tests/modules/k1Validator/write.test.ts index b4f35c77d..b4491aead 100644 --- a/tests/modules/k1Validator/write.test.ts +++ b/tests/modules/k1Validator/write.test.ts @@ -36,7 +36,7 @@ describe("Account:Modules:OwnableValidator", async () => { const smartAccount: NexusSmartAccount = await createSmartAccountClient({ signer: walletClient, - bundlerUrl + bundlerUrl, }) const k1ValidationModule = await createK1ValidatorModule( @@ -61,6 +61,12 @@ describe("Account:Modules:OwnableValidator", async () => { data: encodePacked(["address"], [await smartAccount.getAddress()]) }) + await smartAccount.uninstallModule({ + moduleAddress: K1_VALIDATOR, + moduleType: ModuleType.Validation, + data: encodePacked(["address"], [await smartAccount.getAddress()]) + }) + smartAccount.setActiveValidationModule(k1ValidationModule) expect(userOpReceipt.success).toBe(true) diff --git a/tests/modules/ownableExecutor/write.test.ts b/tests/modules/ownableExecutor/write.test.ts index 5a5a7ffbe..7c4cfccb0 100644 --- a/tests/modules/ownableExecutor/write.test.ts +++ b/tests/modules/ownableExecutor/write.test.ts @@ -202,6 +202,68 @@ describe("Account:Modules:OwnableExecutor", async () => { expect(receipt.success).toBe(true) }, 60000) + test.skip("SA 2 can execute actions on behalf of SA 1 using module instance instead of smart account instance", async () => { + + const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + signer: walletClientTwo, + bundlerUrl + }) + + const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2) + + // First, we need to install the OwnableExecutor module on SA 2 + let isInstalled = await smartAccount2.isModuleInstalled({ + moduleType: ModuleType.Execution, + moduleAddress: OWNABLE_EXECUTOR + }) + + if (!isInstalled) { + await smartAccount2.installModule({ + moduleAddress: OWNABLE_EXECUTOR, + moduleType: ModuleType.Execution, + data: encodePacked( + ["address"], + [await smartAccount2.getAddress()] + ) + }) + } + + smartAccount2.setActiveExecutionModule(ownableExecutorModule) + + const valueToTransfer = parseEther("0.1") + const recipient = accountTwo.address + const transferEncodedCall = encodeFunctionData({ + abi: parseAbi(["function transfer(address to, uint256 value)"]), + functionName: "transfer", + args: [recipient, valueToTransfer] + }) + + const owners = await ownableExecutorModule2.getOwners() + + // check if SA 2 is as an owner of SA 1 + const isOwner = owners.includes(await smartAccount2.getAddress()) + if(!isOwner) { + const userOpReceipt = await ownableExecutorModule2.addOwner( + await smartAccount2.getAddress() + ) + expect(userOpReceipt.success).toBeTruthy() + } + + const transferTransaction = { + target: token as `0x${string}`, + callData: transferEncodedCall, + value: 0n + } + + smartAccount2.setActiveExecutionModule(ownableExecutorModule2) + // SA 2 will execute the transferTransaction on behalf of SA 1 (smartAccount) + const receipt = await ownableExecutorModule2.execute(transferTransaction, await smartAccount.getAddress()); + console.log(receipt, "receipt"); + + expect(receipt.userOpHash).toBeTruthy() + expect(receipt.success).toBe(true) + }, 60000) + test.skip("should remove an owner from the module", async () => { const userOpReceipt = await ownableExecutorModule.removeOwner( accountTwo.address From 81acdef70390ae48f751fb7fffa1a644922a3828 Mon Sep 17 00:00:00 2001 From: VGabriel45 <vgabrielmarian21@gmai.com> Date: Tue, 20 Aug 2024 14:40:34 +0300 Subject: [PATCH 1234/1247] refactor: changes for interoperability between account sdks + removing redundant tests & skiping temporary tests --- bun.lockb | Bin 274185 -> 274217 bytes scripts/sendUserOperation.ts | 1 - src/account/NexusSmartAccount.ts | 160 +++------ src/account/utils/Types.ts | 15 +- src/account/utils/Utils.ts | 6 +- src/modules/base/BaseModule.ts | 19 +- src/modules/executors/OwnableExecutor.ts | 23 +- src/modules/utils/Helper.ts | 25 +- src/modules/utils/Types.ts | 55 ++- src/modules/validators/K1ValidatorModule.ts | 12 +- src/modules/validators/ValidationModule.ts | 12 +- tests/account/read.test.ts | 17 +- tests/account/write.test.ts | 374 ++++++-------------- tests/modules/k1Validator/write.test.ts | 17 +- tests/modules/ownableExecutor/write.test.ts | 95 +++-- 15 files changed, 349 insertions(+), 482 deletions(-) diff --git a/bun.lockb b/bun.lockb index 8fe603049059b3a67d032b043c7be44a309fd92e..f31953176484e2b312684984c55132e7dfd7f3c2 100755 GIT binary patch delta 6735 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 delta 6701 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 O6D}N^G=JRWcm5B3RU&Ty diff --git a/scripts/sendUserOperation.ts b/scripts/sendUserOperation.ts index d2d30875d..617d92985 100644 --- a/scripts/sendUserOperation.ts +++ b/scripts/sendUserOperation.ts @@ -3,7 +3,6 @@ import { getConfig } from "../tests/utils" import { createWalletClient, http, parseEther } from "viem" import { createK1ValidatorModule, createSmartAccountClient } from "../src" - const { chain, chainId, diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index f3d385d7a..b57e9e602 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -35,10 +35,12 @@ import type { BaseExecutionModule } from "../modules/base/BaseExecutionModule.js import { BaseValidationModule } from "../modules/base/BaseValidationModule.js" import { type Execution, + type Module, type ModuleInfo, type SendUserOpParams, createK1ValidatorModule, - createValidationModule + createValidationModule, + moduleTypeIds } from "../modules/index.js" import type { K1ValidatorModule } from "../modules/validators/K1ValidatorModule.js" import { @@ -54,7 +56,6 @@ import { BaseSmartContractAccount } from "./BaseSmartContractAccount.js" import { NexusAccountAbi } from "./abi/SmartAccount.js" import { Logger, - ModuleType, type SmartAccountSigner, type StateOverrideSet, type UserOperationStruct, @@ -81,7 +82,6 @@ import type { BiconomyTokenPaymasterRequest, BuildUserOpOptions, CounterFactualAddressParam, - ModuleInfoParams, NexusSmartAccountConfig, NexusSmartAccountConfigConstructorProps, NonceOptions, @@ -2090,17 +2090,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { return tx } - async isModuleInstalled({ - moduleType, - moduleAddress, - data - }: ModuleInfoParams): Promise<boolean> { + async isModuleInstalled(module: Module): Promise<boolean> { if (await this.isAccountDeployed()) { const accountContract = await this._getAccountContract() return (await accountContract.read.isModuleInstalled([ - moduleType, - moduleAddress, - data ?? "0x" + BigInt(moduleTypeIds[module.type]), + module.module, + module.data ?? "0x" ])) as boolean } Logger.warn("A module cannot be installed on an undeployed account") @@ -2111,21 +2107,16 @@ export class NexusSmartAccount extends BaseSmartContractAccount { return this.signer } - async installModule({ - moduleAddress, - moduleType, - moduleSelector, - data - }: ModuleInfoParams): Promise<UserOpReceipt> { + async installModule(module: Module): Promise<UserOpReceipt> { let execution: Execution - switch (moduleType) { - case ModuleType.Validation: - case ModuleType.Execution: - case ModuleType.Hook: + switch (module.type) { + case 'validator': + case 'executor': + case 'hook': execution = await this._installModule({ - moduleAddress, - moduleType, - data + module: module.module, + type: module.type, + data: module.data }) return ( await this.sendTransaction({ @@ -2134,18 +2125,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { value: execution.value }) ).wait() - case ModuleType.Fallback: - if (!moduleSelector) { + case 'fallback': + if (!module.selector || !module.callType) { throw new Error( "Selector param is required for a Fallback Handler Module" ) } - execution = await this._uninstallFallback({ - moduleAddress, - moduleType: ModuleType.Fallback, - moduleSelector: moduleSelector ?? "0x", - data - }) + execution = await this._uninstallFallback(module) return ( await this.sendTransaction({ to: execution.target, @@ -2154,20 +2140,12 @@ export class NexusSmartAccount extends BaseSmartContractAccount { }) ).wait() default: - throw new Error(`Unknown module type ${moduleType}`) + throw new Error(`Unknown module type ${module.type}`) } } - async _installModule({ - moduleAddress, - moduleType, - data - }: ModuleInfoParams): Promise<Execution> { - const isInstalled = await this.isModuleInstalled({ - moduleAddress, - moduleType, - data - }) + async _installModule(module: Module): Promise<Execution> { + const isInstalled = await this.isModuleInstalled(module) if (!isInstalled) { const execution = { @@ -2178,7 +2156,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { abi: parseAbi([ "function installModule(uint256 moduleTypeId, address module, bytes calldata initData) external payable" ]), - args: [BigInt(moduleType), moduleAddress, data || "0x"] + args: [BigInt(moduleTypeIds[module.type]), module.module, module.data || "0x"] }) } return execution @@ -2186,18 +2164,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { throw new Error("Module already installed") } - async uninstallModule({ - moduleAddress, - moduleType, - moduleSelector, - data - }: ModuleInfoParams): Promise<UserOpReceipt> { + async uninstallModule(module: Module): Promise<UserOpReceipt> { let execution: Execution - switch (moduleType) { - case ModuleType.Validation: - case ModuleType.Execution: - case ModuleType.Hook: - execution = await this._uninstallModule(moduleAddress, moduleType, data) + switch (module.type) { + case 'validator': + case 'executor': + case 'hook': + execution = await this._uninstallModule(module) return ( await this.sendTransaction({ to: execution.target, @@ -2205,18 +2178,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { value: execution.value }) ).wait() - case ModuleType.Fallback: - if (!moduleSelector) { + case 'fallback': + if (!module.selector) { throw new Error( - `Selector param is required for module type ${moduleType}` + `Selector param is required for module type ${module.type}` ) } - execution = await this._uninstallFallback({ - moduleAddress, - moduleType: ModuleType.Fallback, - moduleSelector: moduleSelector, - data - }) + execution = await this._uninstallFallback(module) return ( await this.sendTransaction({ to: execution.target, @@ -2225,46 +2193,32 @@ export class NexusSmartAccount extends BaseSmartContractAccount { }) ).wait() default: - throw new Error(`Unknown module type ${moduleType}`) + throw new Error(`Unknown module type ${module.type}`) } } - async getPreviousModule({ - moduleAddress, - moduleType - }: { moduleAddress: Address; moduleType: ModuleType }) { + async getPreviousModule(module: Module) { let installedModules: Address[] = [] - if (moduleType === ModuleType.Validation) { + if (module.type === 'validator') { installedModules = await this.getInstalledValidators() } - if (moduleType === ModuleType.Execution) { + if (module.type === 'executor') { installedModules = await this.getInstalledExecutors() } - const index = installedModules.indexOf(getAddress(moduleAddress)) + const index = installedModules.indexOf(getAddress(module.module)) if (index === 0) { return SENTINEL_ADDRESS } if (index > 0) { return installedModules[index - 1] } - throw new Error(`Module ${moduleAddress} not found in installed modules`) + throw new Error(`Module ${module.module} not found in installed modules`) } - private async _uninstallFallback({ - moduleAddress, - moduleSelector, - data - }: ModuleInfoParams): Promise<Execution> { + private async _uninstallFallback(module: Module): Promise<Execution> { let execution: Execution - const isInstalled = await this.isModuleInstalled({ - moduleType: ModuleType.Fallback, - moduleAddress, - data: encodeAbiParameters( - [{ name: "functionSignature", type: "bytes4" }], - [moduleSelector ?? "0x"] - ) - }) + const isInstalled = await this.isModuleInstalled(module) if (isInstalled) { execution = { @@ -2276,11 +2230,11 @@ export class NexusSmartAccount extends BaseSmartContractAccount { "function uninstallModule(uint256 moduleTypeId, address module, bytes deInitData)" ]), args: [ - BigInt(ModuleType.Fallback), - moduleAddress, + BigInt(moduleTypeIds[module.type]), + module.module, encodePacked( ["bytes4", "bytes"], - [moduleSelector ?? "0x", data ?? "0x"] + [module.selector ?? "0x", module.data ?? "0x"] ) ] }) @@ -2290,27 +2244,17 @@ export class NexusSmartAccount extends BaseSmartContractAccount { throw new Error("Module is not installed") } - private async _uninstallModule( - moduleAddress: Address, - moduleType: ModuleType, - data?: Hex - ): Promise<Execution> { + private async _uninstallModule(module: Module): Promise<Execution> { let execution: Execution - const isInstalled = await this.isModuleInstalled({ - moduleType, - moduleAddress - }) + const isInstalled = await this.isModuleInstalled(module) if (isInstalled) { - let moduleData = data || "0x" + let moduleData = module.data || "0x" if ( - moduleType === ModuleType.Validation || - moduleType === ModuleType.Execution + module.type === 'validator' || + module.type === 'executor' ) { - const prev = await this.getPreviousModule({ - moduleAddress, - moduleType: moduleType - }) + const prev = await this.getPreviousModule(module) moduleData = encodeAbiParameters( [ { name: "prev", type: "address" }, @@ -2327,7 +2271,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { abi: parseAbi([ "function uninstallModule(uint256 moduleTypeId, address module, bytes deInitData)" ]), - args: [BigInt(moduleType), moduleAddress, moduleData] + args: [BigInt(moduleTypeIds[module.type]), module.module, moduleData] }) } return execution @@ -2447,8 +2391,8 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * @param moduleType - The type of module to check for support. * @returns A promise that resolves to a boolean indicating whether the module type is supported. */ - async supportsModule(moduleType: ModuleType): Promise<boolean> { + async supportsModule(module: Module): Promise<boolean> { const accountContract = await this._getAccountContract() - return (await accountContract.read.supportsModule([moduleType])) as boolean + return (await accountContract.read.supportsModule([module.type])) as boolean } } diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index cbfc22a3e..be3cb4c8a 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -12,7 +12,7 @@ import type { WalletClient } from "viem" import type { IBundler } from "../../bundler" -import type { ModuleInfo } from "../../modules" +import type { ModuleInfo, ModuleType } from "../../modules" import type { BaseValidationModule } from "../../modules/base/BaseValidationModule" import type { FeeQuotesOrDataDto, @@ -619,12 +619,6 @@ export type TransferOwnershipCompatibleModule = | "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" | "0x000000824dc138db84FD9109fc154bdad332Aa8E" -export enum ModuleType { - Validation = 1, - Execution = 2, - Fallback = 3, - Hook = 4 -} export type ModuleInfoParams = { moduleAddress: Address @@ -642,3 +636,10 @@ export type EIP712DomainReturn = [ Hex, bigint[] ] + +export enum CallType { + CALLTYPE_SINGLE = '0x00', + CALLTYPE_BATCH = '0x01', + CALLTYPE_STATIC = '0xFE', + CALLTYPE_DELEGATECALL = '0xFF', +} diff --git a/src/account/utils/Utils.ts b/src/account/utils/Utils.ts index 769ac38fc..c8b29d035 100644 --- a/src/account/utils/Utils.ts +++ b/src/account/utils/Utils.ts @@ -16,13 +16,13 @@ import type { UserOperationStruct } from "../../account" import { MOCK_MULTI_MODULE_ADDRESS, MODULE_ENABLE_MODE_TYPE_HASH, - type ModuleType, type SupportedSigner, convertSigner } from "../../account" import { extractChainIdFromBundlerUrl } from "../../bundler" import { extractChainIdFromPaymasterUrl } from "../../bundler" import type { NexusSmartAccountConfig } from "./Types.js" +import { type ModuleType, moduleTypeIds } from "../../modules/index.js" /** * pack the userOperation @@ -206,9 +206,9 @@ export function makeInstallDataAndHash( accountOwner: Address, modules: { moduleType: ModuleType; config: Hex }[] ): [string, string] { - const types = modules.map((module) => BigInt(module.moduleType)) + const types = modules.map((module) => BigInt(moduleTypeIds[module.moduleType])) const initDatas = modules.map((module) => - toHex(concat([toBytes(module.moduleType), module.config])) + toHex(concat([toBytes(BigInt(moduleTypeIds[module.moduleType])), module.config])) ) const multiInstallData = encodeAbiParameters( diff --git a/src/modules/base/BaseModule.ts b/src/modules/base/BaseModule.ts index 5422257b7..c490e6805 100644 --- a/src/modules/base/BaseModule.ts +++ b/src/modules/base/BaseModule.ts @@ -1,10 +1,9 @@ import { type Address, type Hex, encodeFunctionData, parseAbi } from "viem" import { ENTRYPOINT_V07_ADDRESS, - type ModuleType, type SmartAccountSigner } from "../../account/index.js" -import type { ModuleVersion, V3ModuleInfo } from "../utils/Types.js" +import { moduleTypeIds, type Module, type ModuleType, type ModuleVersion } from "../utils/Types.js" export abstract class BaseModule { moduleAddress: Address @@ -16,12 +15,12 @@ export abstract class BaseModule { entryPoint: Address = ENTRYPOINT_V07_ADDRESS signer: SmartAccountSigner - constructor(moduleInfo: V3ModuleInfo, signer: SmartAccountSigner) { - this.moduleAddress = moduleInfo.module - this.data = moduleInfo.data - this.additionalContext = moduleInfo.additionalContext - this.hook = moduleInfo.hook - this.type = moduleInfo.type + constructor(module: Module, signer: SmartAccountSigner) { + this.moduleAddress = module.module + this.data = module.data ?? "0x" + this.additionalContext = module.additionalContext ?? "0x" + this.hook = module.hook + this.type = module.type this.signer = signer } @@ -31,7 +30,7 @@ export abstract class BaseModule { "function installModule(uint256 moduleTypeId, address module, bytes calldata initData) external" ]), functionName: "installModule", - args: [BigInt(this.type), this.moduleAddress, this.data ?? "0x"] + args: [BigInt(moduleTypeIds[this.type]), this.moduleAddress, this.data ?? "0x"] }) return installModuleData @@ -43,7 +42,7 @@ export abstract class BaseModule { "function uninstallModule(uint256 moduleTypeId, address module, bytes calldata initData) external" ]), functionName: "uninstallModule", - args: [BigInt(this.type), this.moduleAddress, uninstallData ?? "0x"] + args: [BigInt(moduleTypeIds[this.type]), this.moduleAddress, uninstallData ?? "0x"] }) return uninstallModuleData } diff --git a/src/modules/executors/OwnableExecutor.ts b/src/modules/executors/OwnableExecutor.ts index 800c5c52c..7e7abb089 100644 --- a/src/modules/executors/OwnableExecutor.ts +++ b/src/modules/executors/OwnableExecutor.ts @@ -7,35 +7,36 @@ import { getAddress, parseAbi } from "viem" -import { ModuleType, SENTINEL_ADDRESS } from "../../account" +import { SENTINEL_ADDRESS } from "../../account" import type { NexusSmartAccount } from "../../account/NexusSmartAccount" import type { UserOpReceipt } from "../../bundler" import { BaseExecutionModule } from "../base/BaseExecutionModule" import { OWNABLE_EXECUTOR } from "../utils/Constants" -import type { Execution, V3ModuleInfo } from "../utils/Types" +import type { Execution, Module } from "../utils/Types" export class OwnableExecutorModule extends BaseExecutionModule { smartAccount!: NexusSmartAccount public owners: Address[] public constructor( - moduleInfo: V3ModuleInfo, + module: Module, smartAccount: NexusSmartAccount, - owners: Address[] + owners: Address[], ) { - super(moduleInfo, smartAccount.getSigner()) + super(module, smartAccount.getSigner()) this.smartAccount = smartAccount this.owners = owners + this.data = module.data ?? "0x" } public static async create( - smartAccount: NexusSmartAccount + smartAccount: NexusSmartAccount, + data?: Hex ): Promise<OwnableExecutorModule> { - const signer = smartAccount.getSigner() - const moduleInfo: V3ModuleInfo = { + const module: Module = { module: OWNABLE_EXECUTOR, - type: ModuleType.Execution, - data: await signer.getAddress(), + type: 'executor', + data: data ?? "0x", additionalContext: "0x" } const owners = await smartAccount.publicClient.readContract({ @@ -46,7 +47,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { functionName: "getOwners", args: [await smartAccount.getAddress()] }) - const instance = new OwnableExecutorModule(moduleInfo, smartAccount, owners as Address[]) + const instance = new OwnableExecutorModule(module, smartAccount, owners as Address[]) return instance } diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index 26bbbcf2d..239a532cb 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -8,18 +8,13 @@ import { } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { type UserOperationStruct, getChain } from "../../account" -import type { NexusSmartAccount } from "../../account/NexusSmartAccount.js" import { type ChainInfo, type Execution, - Module, type SignerData, type Transaction, - createK1ValidatorModule, - createOwnableExecutorModule, // createOwnableValidatorModule } from "../../index.js" -import type { BaseModule } from "../base/BaseModule.js" /** * Rule @@ -238,22 +233,4 @@ export const toTransaction = (execution: Execution): Transaction => { value: Number(execution.value), data: execution.callData } -} - -export const createModuleInstace = async ( - module: Module, - smartAccount: NexusSmartAccount, - config?: any -): Promise<BaseModule> => { - if (module === Module.OwnableExecutor) { - return await createOwnableExecutorModule(smartAccount) - } - // if (module === Module.OwnableValidator) { - // return await createOwnableValidatorModule( - // smartAccount, - // config.threshold, - // config.owners - // ) - // } - return await createK1ValidatorModule(smartAccount.getSigner()) -} +} \ No newline at end of file diff --git a/src/modules/utils/Types.ts b/src/modules/utils/Types.ts index 4fae39dd2..25a586153 100644 --- a/src/modules/utils/Types.ts +++ b/src/modules/utils/Types.ts @@ -1,6 +1,6 @@ import type { Address, Chain, Hex } from "viem" import type { - ModuleType, + CallType, SimulationType, SmartAccountSigner, SupportedSigner, @@ -192,17 +192,52 @@ export type V3ModuleInfo = { hook?: Address } -export enum Module { - OwnableExecutor = 0, - MockExecutor = 1, - K1Validator = 2, - MockHook = 3, - MockFallbackHandler = 4, - OwnableValidator = 5 -} - export type Execution = { target: Address value: bigint callData: Hex } + + +export enum SafeHookType { + GLOBAL = 0, + SIG = 1, +} + +export type Module = { + module: Address + data?: Hex + additionalContext?: Hex + type: ModuleType + + /* ---- kernel module params ---- */ + // these param needed for installing validator, executor, fallback handler + hook?: Address + /* ---- end kernel module params ---- */ + + /* ---- safe module params ---- */ + + // these two params needed for installing hooks + hookType?: SafeHookType + selector?: Hex + + // these two params needed for installing fallback handlers + functionSig?: Hex + callType?: CallType + + /* ---- end safe module params ---- */ +} + + +export type ModuleType = 'validator' | 'executor' | 'fallback' | 'hook' + +type ModuleTypeIds = { + [index in ModuleType]: 1 | 2 | 3 | 4 +} + +export const moduleTypeIds: ModuleTypeIds = { + validator: 1, + executor: 2, + fallback: 3, + hook: 4, +} diff --git a/src/modules/validators/K1ValidatorModule.ts b/src/modules/validators/K1ValidatorModule.ts index 204ee3ecc..6193c5cc6 100644 --- a/src/modules/validators/K1ValidatorModule.ts +++ b/src/modules/validators/K1ValidatorModule.ts @@ -1,23 +1,23 @@ -import { ModuleType, type SmartAccountSigner } from "../../account/index.js" +import { type SmartAccountSigner } from "../../account/index.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" import { K1_VALIDATOR } from "../utils/Constants.js" -import type { V3ModuleInfo } from "../utils/Types.js" +import type { Module } from "../utils/Types.js" export class K1ValidatorModule extends BaseValidationModule { - private constructor(moduleConfig: V3ModuleInfo, signer: SmartAccountSigner) { + private constructor(moduleConfig: Module, signer: SmartAccountSigner) { super(moduleConfig, signer) } public static async create( signer: SmartAccountSigner ): Promise<K1ValidatorModule> { - const moduleInfo: V3ModuleInfo = { + const module: Module = { module: K1_VALIDATOR, - type: ModuleType.Validation, + type: 'validator', data: await signer.getAddress(), additionalContext: "0x" } - const instance = new K1ValidatorModule(moduleInfo, signer) + const instance = new K1ValidatorModule(module, signer) return instance } } diff --git a/src/modules/validators/ValidationModule.ts b/src/modules/validators/ValidationModule.ts index 0f9f78a72..83c734de6 100644 --- a/src/modules/validators/ValidationModule.ts +++ b/src/modules/validators/ValidationModule.ts @@ -1,10 +1,10 @@ import type { Address, Hex } from "viem" -import { ModuleType, type SmartAccountSigner } from "../../account/index.js" +import { type SmartAccountSigner } from "../../account/index.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" -import type { V3ModuleInfo } from "../utils/Types.js" +import type { Module } from "../utils/Types.js" export class ValidationModule extends BaseValidationModule { - private constructor(moduleConfig: V3ModuleInfo, signer: SmartAccountSigner) { + private constructor(moduleConfig: Module, signer: SmartAccountSigner) { super(moduleConfig, signer) } @@ -13,13 +13,13 @@ export class ValidationModule extends BaseValidationModule { moduleAddress: Address, data: Hex ): Promise<ValidationModule> { - const moduleInfo: V3ModuleInfo = { + const module: Module = { module: moduleAddress, - type: ModuleType.Validation, + type: 'validator', data, additionalContext: "0x" } - const instance = new ValidationModule(moduleInfo, signer) + const instance = new ValidationModule(module, signer) return instance } } diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index adade958f..6cf46901c 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -23,7 +23,6 @@ import { beforeAll, describe, expect, test } from "vitest" import { DEFAULT_BICONOMY_FACTORY_ADDRESS, ERROR_MESSAGES, - ModuleType, NATIVE_TOKEN_ALIAS, type NexusSmartAccountConfig, compareChainIds, @@ -177,8 +176,8 @@ describe("Account:Read", () => { "should check if module is enabled on the smart account", async () => { const isEnabled = smartAccount.isModuleInstalled({ - moduleType: ModuleType.Validation, - moduleAddress: K1_VALIDATOR + type: 'validator', + module: K1_VALIDATOR, }) if (await smartAccount.isAccountDeployed()) { expect(isEnabled).resolves.toBeTruthy() @@ -194,7 +193,7 @@ describe("Account:Read", () => { async () => { const result = makeInstallDataAndHash(walletClient.account.address, [ { - moduleType: ModuleType.Validation, + moduleType: 'validator', config: walletClient.account.address } ]) @@ -413,9 +412,9 @@ describe("Account:Read", () => { test.concurrent("should not throw and error, chain ids match", async () => { const mockBundlerUrl = - "https://bundler.biconomy.io/api/v2/11155111/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" + "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/11155111/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" const config: NexusSmartAccountConfig = { signer: walletClient, @@ -609,7 +608,7 @@ describe("Account:Read", () => { 60000 ) - test.concurrent("should fetch balances for smartAccount", async () => { + test.concurrent.skip("should fetch balances for smartAccount", async () => { const token = "0x69835C1f31ed0721A05d5711C1d669C10802a3E1" const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ @@ -670,7 +669,7 @@ describe("Account:Read", () => { // ) // @note Nexus SA signature needs to contain the validator module address in the first 20 bytes - test.concurrent( + test.skip.concurrent( "should test isValidSignature PersonalSign to be valid", async () => { if (await smartAccount.isAccountDeployed()) { @@ -732,7 +731,7 @@ describe("Account:Read", () => { } ) - test.concurrent( + test.skip.concurrent( "should test isValidSignature EIP712Sign to be valid", async () => { if (await smartAccount.isAccountDeployed()) { diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index 62c100beb..e9021c1e4 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -21,15 +21,18 @@ import { privateKeyToAccount } from "viem/accounts" import { describe, expect, test } from "vitest" import { GENERIC_FALLBACK_SELECTOR, + K1_VALIDATOR, MOCK_EXECUTOR, MOCK_FALLBACK_HANDLER, MOCK_HOOK, MODE_MODULE_ENABLE, MODULE_TYPE_MULTI, + createK1ValidatorModule, createOwnableExecutorModule, - makeInstallDataAndHash + makeInstallDataAndHash, + moduleTypeIds } from "../../src" -import { ModuleType, createSmartAccountClient } from "../../src/account" +import { createSmartAccountClient } from "../../src/account" import type { UserOpReceipt } from "../../src/bundler" import { getConfig } from "../utils" @@ -72,6 +75,9 @@ describe("Account:Write", async () => { const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) smartAccount.setActiveExecutionModule(ownableExecutorModule) + const k1ValidatorInstance = await createK1ValidatorModule(smartAccount.getSigner()) + const k1ValidatorModule = {type: k1ValidatorInstance.type, module: k1ValidatorInstance.moduleAddress, data: k1ValidatorInstance.data} + describe("Account:Basics", async () => { test("Build a user op with pimlico bundler", async () => { const encodedCall = encodeFunctionData({ @@ -94,10 +100,8 @@ describe("Account:Write", async () => { args: [recipient] }) - // smartAccount.setActiveValidationModule() - - // const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: K1_VALIDATOR}); - // console.log(isInstalled); + const isInstalled = await smartAccount.isModuleInstalled(k1ValidatorModule); + console.log(isInstalled); const transaction = { to: nftAddress, // NFT address @@ -107,262 +111,118 @@ describe("Account:Write", async () => { const response = await smartAccount.sendTransaction([transaction]) console.log(response, "response") - // const receipt = await response.wait() - // console.log(receipt, "receipt") + const receipt = await response.wait() + console.log(receipt, "receipt") - // expect(receipt.userOpHash).toBeTruthy() + expect(receipt.userOpHash).toBeTruthy() }, 60000) - // test("Use enable mode", async () => { - // const counterAddress = "0x6BFE41FF0605a87911c0542bF958691ea2ac77f8" // base baseSepolia - - // const counterBefore = await publicClient.readContract({ - // address: counterAddress, - // abi: parseAbi(["function getCount() external view returns(uint256)"]), - // functionName: "getCount" - // }) - - // console.log(counterBefore, "counter before") - - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function increment() external view returns(uint256)"]), - // functionName: "increment" - // }) - // const userOp = await smartAccount.buildUserOp( - // [{ to: counterAddress, data: encodedCall }], - // { nonceOptions: { validationMode: MODE_MODULE_ENABLE } } - // ) - - // // Prepare Enable Mode Data - // const validatorConfig = pad( - // toBytes("0xdB9426d6cE27071b3a806f95B0d9430455d4d4c6"), - // { size: 32 } - // ) - // const executorConfig = pad(hexToBytes("0x2222"), { size: 32 }) - - // const validatorInstallData = concat([ - // toBytes(ModuleType.Validation), - // validatorConfig - // ]) - - // const executorInstallData = concat([ - // toBytes(ModuleType.Execution), - // executorConfig - // ]) - - // const [multiInstallData, hashToSign] = makeInstallDataAndHash( - // walletClient.account?.address, - // [ - // { - // moduleType: ModuleType.Validation, - // config: toHex(validatorInstallData) - // }, - // { - // moduleType: ModuleType.Execution, - // config: toHex(executorInstallData) - // } - // ] - // ) - // const enableModeSig = encodePacked( - // ["address", "bytes"], - // [K1_VALIDATOR, await smartAccount.signMessage(hashToSign)] - // ) - - // const enableModeSigPrefix = concat([ - // toBytes(MODULE_TYPE_MULTI), - // pad(toBytes(BigInt(hexToBytes(multiInstallData as Hex).length)), { - // size: 4, - // dir: "right" - // }), - // hexToBytes(multiInstallData as Hex), - // pad(toBytes(BigInt(hexToBytes(enableModeSig).length)), { - // size: 4, - // dir: "right" - // }), - // hexToBytes(enableModeSig) - // ]) - - // // userOp.signature = encodePacked(['bytes', 'bytes'], [toHex(enableModeSigPrefix), userOp.signature!]); - - // // const response = await smartAccount.sendUserOp(userOp); - // // const receipt = await response.wait(); - - // // console.log(receipt, "receipt"); - - // // const counterAfter = await publicClient.readContract({ - // // address: counterAddress, - // // abi: parseAbi(["function getCount() external view returns(uint256)"]), - // // functionName: "getCount" - // // }) - - // // console.log(counterAfter, "counter after"); - // }, 60000) - - // test("Mint NFT's - Batch Call", async () => { - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, // NFT address - // data: encodedCall, - // value: 0n - // } - // const userOpResponse = await smartAccount.sendTransaction([ - // transaction, - // transaction - // ]) - // const userOpReceipt: UserOpReceipt = await userOpResponse.wait() - // console.log(userOpReceipt.userOpHash, "user op hash") - - // expect(userOpReceipt.success).toBe(true) - // }, 60000) - }) + test.skip("Use enable mode", async () => { + const counterAddress = "0x6BFE41FF0605a87911c0542bF958691ea2ac77f8" // base baseSepolia - // describe("Account:Validation Module", async () => { - // test("should install a dummy K1Validator module", async () => { - // const userOpReceipt = await smartAccount.installModule(K1_VALIDATOR, ModuleType.Validation, encodePacked(['address'], [await smartAccount.getAddress() as Hex])) - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR - // ) - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) - // test("should uninstall dummy K1Validator module", async () => { - // const newK1ValidatorContract = - // "0x26d3E02a086D5182F4921CF1917fe9E6462E0495" - const prevAddress: Hex = "0x9C08e1CE188C29bAaeBc64A08cF2Ec44207749B6" - const deInitData = encodeAbiParameters( - [ - { name: "prev", type: "address" }, - { name: "disableModuleData", type: "bytes" } - ], - [prevAddress, toHex(stringToBytes(""))] - ) - console.log(deInitData, "deInitData"); - const userOpReceipt = await smartAccount.uninstallModule(newK1ValidatorContract, ModuleType.Validation, deInitData); - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // newK1ValidatorContract - // ) - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) - // test("should fail to install an already installed Validator", async () => { - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR - // ) - // expect(isInstalled).toBeTruthy() - // const receiptPromise = smartAccount.installModule(K1_VALIDATOR, ModuleType.Validation) - // await expect(receiptPromise).rejects.toThrowError("Error from Bundler:") - // }, 60000) - // }) + const counterBefore = await publicClient.readContract({ + address: counterAddress, + abi: parseAbi(["function getCount() external view returns(uint256)"]), + functionName: "getCount" + }) - // describe("Account:Execution Module Tests", async () => { - // test("install a mock Execution module", async () => { - // const userOpReceipt = await smartAccount.installModule(K1_VALIDATOR, ModuleType.Validation) - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Execution, - // MOCK_EXECUTOR - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) - - // test("get installed executors", async () => { - // const installedExecutors: Address[] = - // await smartAccount.getInstalledExecutors() - // console.log(installedExecutors, "installed executors") - // expect(installedExecutors.includes(MOCK_EXECUTOR)).toBeTruthy() - // }, 60000) - - // test("uninstall executor module", async () => { - - // const isInstalledBefore = await smartAccount.isModuleInstalled( - // ModuleType.Execution, - // MOCK_EXECUTOR - // ) - // console.log(isInstalledBefore, "isInstalledBefore"); - - // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - // const deInitData = encodeAbiParameters( - // [ - // { name: "prev", type: "address" }, - // { name: "disableModuleData", type: "bytes" } - // ], - // [prevAddress, toHex(stringToBytes(""))] - // ) - // const userOpReceipt = await smartAccount.uninstallModule(MOCK_EXECUTOR, ModuleType.Execution, deInitData) - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Execution, - // MOCK_EXECUTOR - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) - - // test("should fail to install same executor module", async () => { - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Validation, - // K1_VALIDATOR - // ) - // expect(isInstalled).toBeTruthy() - - // const userOpResponse = smartAccount.installModule(MOCK_EXECUTOR, ModuleType.Execution) - // await expect(userOpResponse).rejects.toThrowError("Error from Bundler:") - // }, 60000) - - // test("send user op using the executor call type single", async () => { - // const authorizedOwners = await ownableExecutorModule.getOwners(); - // expect(authorizedOwners).contains(await smartAccount.getAddress()); - - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - - // const transaction = { - // to: nftAddress, - // data: encodedCall - // } - // const userOpReceipt = await smartAccount.sendTransactionWithExecutor( - // transaction, - // ) - - // expect(userOpReceipt.success).toBeTruthy(); - // }, 60000) - - // test("send user op using the executor call type batch", async () => { - // const authorizedOwners = await ownableExecutorModule.getOwners() - // expect(authorizedOwners).contains(await smartAccount.getAddress()) - - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function safeMint(address _to)"]), - // functionName: "safeMint", - // args: [recipient] - // }) - // const transaction = { - // to: nftAddress, - // data: encodedCall - // } - // const userOpReceipt = await smartAccount.sendTransactionWithExecutor([ - // transaction, - // transaction - // ]) - - // expect(userOpReceipt.success).toBeTruthy() - // }, 60000) - // }) + console.log(counterBefore, "counter before") + + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function increment() external view returns(uint256)"]), + functionName: "increment" + }) + const userOp = await smartAccount.buildUserOp( + [{ to: counterAddress, data: encodedCall }], + { nonceOptions: { validationMode: MODE_MODULE_ENABLE } } + ) + + // Prepare Enable Mode Data + const validatorConfig = pad( + toBytes("0xdB9426d6cE27071b3a806f95B0d9430455d4d4c6"), + { size: 32 } + ) + const executorConfig = pad(hexToBytes("0x2222"), { size: 32 }) + + const validatorInstallData = concat([ + toBytes(moduleTypeIds['validator']), + validatorConfig + ]) + + const executorInstallData = concat([ + toBytes(moduleTypeIds['executor']), + executorConfig + ]) + + const [multiInstallData, hashToSign] = makeInstallDataAndHash( + walletClient.account?.address, + [ + { + moduleType: 'validator', + config: toHex(validatorInstallData) + }, + { + moduleType: 'executor', + config: toHex(executorInstallData) + } + ] + ) + const enableModeSig = encodePacked( + ["address", "bytes"], + [K1_VALIDATOR, await smartAccount.signMessage(hashToSign)] + ) + + const enableModeSigPrefix = concat([ + toBytes(MODULE_TYPE_MULTI), + pad(toBytes(BigInt(hexToBytes(multiInstallData as Hex).length)), { + size: 4, + dir: "right" + }), + hexToBytes(multiInstallData as Hex), + pad(toBytes(BigInt(hexToBytes(enableModeSig).length)), { + size: 4, + dir: "right" + }), + hexToBytes(enableModeSig) + ]) + + userOp.signature = encodePacked(['bytes', 'bytes'], [toHex(enableModeSigPrefix), userOp.signature!]); + + const response = await smartAccount.sendUserOp(userOp); + const receipt = await response.wait(); + + console.log(receipt, "receipt"); + + const counterAfter = await publicClient.readContract({ + address: counterAddress, + abi: parseAbi(["function getCount() external view returns(uint256)"]), + functionName: "getCount" + }) + + console.log(counterAfter, "counter after"); + }, 60000) + + test("Mint NFT's - Batch Call", async () => { + const encodedCall = encodeFunctionData({ + abi: parseAbi(["function safeMint(address _to)"]), + functionName: "safeMint", + args: [recipient] + }) + const transaction = { + to: nftAddress, // NFT address + data: encodedCall, + value: 0n + } + const userOpResponse = await smartAccount.sendTransaction([ + transaction, + transaction + ]) + const userOpReceipt: UserOpReceipt = await userOpResponse.wait() + console.log(userOpReceipt.userOpHash, "user op hash") + + expect(userOpReceipt.success).toBe(true) + }, 60000) + }) // describe("Account:Hook Module Tests", async () => { // test("install a mock Hook module", async () => { diff --git a/tests/modules/k1Validator/write.test.ts b/tests/modules/k1Validator/write.test.ts index b4491aead..6defdf923 100644 --- a/tests/modules/k1Validator/write.test.ts +++ b/tests/modules/k1Validator/write.test.ts @@ -15,6 +15,7 @@ import { OWNABLE_VALIDATOR, createK1ValidatorModule, getRandomSigner, + moduleTypeIds, } from "../../../src" import { createSmartAccountClient } from "../../../src/account" import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" @@ -48,22 +49,22 @@ describe("Account:Modules:OwnableValidator", async () => { describe("K1 Validator Module Tests", async () => { test("install k1 Validator with 1 owner", async () => { const isInstalledBefore = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Validation, - moduleAddress: K1_VALIDATOR + type: 'validator', + module: K1_VALIDATOR }) console.log(isInstalledBefore, "isInstalledBefore") if (!isInstalledBefore) { const userOpReceipt: UserOpReceipt = await smartAccount.installModule({ - moduleAddress: K1_VALIDATOR, - moduleType: ModuleType.Validation, + module: K1_VALIDATOR, + type: 'validator', data: encodePacked(["address"], [await smartAccount.getAddress()]) }) await smartAccount.uninstallModule({ - moduleAddress: K1_VALIDATOR, - moduleType: ModuleType.Validation, + module: K1_VALIDATOR, + type: 'validator', data: encodePacked(["address"], [await smartAccount.getAddress()]) }) @@ -75,8 +76,8 @@ describe("Account:Modules:OwnableValidator", async () => { test("Ownable Validator Module should be installed", async () => { const isInstalled = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Validation, - moduleAddress: OWNABLE_VALIDATOR + type: 'validator', + module: OWNABLE_VALIDATOR }) expect(isInstalled).toBeTruthy() }, 60000) diff --git a/tests/modules/ownableExecutor/write.test.ts b/tests/modules/ownableExecutor/write.test.ts index 7c4cfccb0..2bec7ccf7 100644 --- a/tests/modules/ownableExecutor/write.test.ts +++ b/tests/modules/ownableExecutor/write.test.ts @@ -10,7 +10,6 @@ import { privateKeyToAccount } from "viem/accounts" import { baseSepolia } from "viem/chains" import { describe, expect, test } from "vitest" import { - ModuleType, OWNABLE_EXECUTOR, createOwnableExecutorModule } from "../../../src" @@ -47,14 +46,14 @@ describe("Account:Modules:OwnableExecutor", async () => { describe("Ownable Executor Module Tests", async () => { test.skip("install Ownable Executor", async () => { let isInstalled = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Execution, - moduleAddress: OWNABLE_EXECUTOR + type: 'executor', + module: OWNABLE_EXECUTOR }) if (!isInstalled) { const receipt = await smartAccount.installModule({ - moduleAddress: OWNABLE_EXECUTOR, - moduleType: ModuleType.Execution, + module: OWNABLE_EXECUTOR, + type: 'executor', data: encodePacked( ["address"], [await smartAccount.getAddress()] @@ -69,8 +68,8 @@ describe("Account:Modules:OwnableExecutor", async () => { test.skip("Ownable Executor Module should be installed", async () => { const isInstalled = await smartAccount.isModuleInstalled({ - moduleType: ModuleType.Execution, - moduleAddress: OWNABLE_EXECUTOR + type: 'executor', + module: OWNABLE_EXECUTOR }) console.log(isInstalled, "isInstalled") expect(isInstalled).toBeTruthy() @@ -151,14 +150,14 @@ describe("Account:Modules:OwnableExecutor", async () => { // First, we need to install the OwnableExecutor module on SA 2 let isInstalled = await smartAccount2.isModuleInstalled({ - moduleType: ModuleType.Execution, - moduleAddress: OWNABLE_EXECUTOR + type: 'executor', + module: OWNABLE_EXECUTOR }) if (!isInstalled) { await smartAccount2.installModule({ - moduleAddress: OWNABLE_EXECUTOR, - moduleType: ModuleType.Execution, + module: OWNABLE_EXECUTOR, + type: 'executor', data: encodePacked( ["address"], [await smartAccount2.getAddress()] @@ -202,29 +201,29 @@ describe("Account:Modules:OwnableExecutor", async () => { expect(receipt.success).toBe(true) }, 60000) - test.skip("SA 2 can execute actions on behalf of SA 1 using module instance instead of smart account instance", async () => { - + test("SA 2 can execute actions on behalf of SA 1 using module instance instead of smart account instance", async () => { const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ signer: walletClientTwo, bundlerUrl }) - const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2) + const initData = encodePacked( + ["address"], + [await smartAccount2.getAddress()] + ) + const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, initData) // First, we need to install the OwnableExecutor module on SA 2 let isInstalled = await smartAccount2.isModuleInstalled({ - moduleType: ModuleType.Execution, - moduleAddress: OWNABLE_EXECUTOR + type: 'executor', + module: OWNABLE_EXECUTOR }) if (!isInstalled) { await smartAccount2.installModule({ - moduleAddress: OWNABLE_EXECUTOR, - moduleType: ModuleType.Execution, - data: encodePacked( - ["address"], - [await smartAccount2.getAddress()] - ) + module: ownableExecutorModule2.moduleAddress, + type: ownableExecutorModule2.type, + data: ownableExecutorModule2.data }) } @@ -274,5 +273,57 @@ describe("Account:Modules:OwnableExecutor", async () => { expect(isOwner).toBeFalsy() expect(userOpReceipt.success).toBeTruthy() }, 60000) + + // test.skip("should use rhinestone to call ownable executor", async () => { + // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // bundlerUrl + // }) + + // const initData = encodePacked( + // ["address"], + // [await smartAccount2.getAddress()] + // ) + + // const ownableExecutorModule2 = getOwnableExecuter({ + // owner: await smartAccount2.getAddress(), + // }); + + // // First, we need to install the OwnableExecutor module on SA 2 + // let isInstalled = await smartAccount2.isModuleInstalled({ + // type: 'executor', + // module: OWNABLE_EXECUTOR + // }) + + // if (!isInstalled) { + // await smartAccount2.installModule({ + // module: ownableExecutorModule2.module, + // type: ownableExecutorModule2.type, + // data: ownableExecutorModule2.initData + // }) + // } + + // smartAccount2.setActiveExecutionModule(ownableExecutorModule) + + // const valueToTransfer = parseEther("0.1") + // const recipient = accountTwo.address + // const transferEncodedCall = encodeFunctionData({ + // abi: parseAbi(["function transfer(address to, uint256 value)"]), + // functionName: "transfer", + // args: [recipient, valueToTransfer] + // }) + + // const transferTransaction = { + // target: token as `0x${string}`, + // callData: transferEncodedCall, + // value: 0n + // } + + // const execution = getExecuteOnOwnedAccountAction({ownedAccount: await smartAccount.getAddress(), execution: transferTransaction}) + // const receipt = await smartAccount2.sendTransaction([{to: execution.target, data: execution.callData, value: 0n}]); + // console.log(receipt, "receipt"); + + // expect(receipt.userOpHash).toBeTruthy() + // }, 60000) }) }) From 8c25a8e9212c1a817d17a015df8462c3591ca939 Mon Sep 17 00:00:00 2001 From: VGabriel45 <vgabrielmarian21@gmai.com> Date: Tue, 20 Aug 2024 15:47:51 +0300 Subject: [PATCH 1235/1247] refactor: rename module field --- src/account/NexusSmartAccount.ts | 14 +++++++------- src/modules/base/BaseModule.ts | 2 +- src/modules/executors/OwnableExecutor.ts | 2 +- src/modules/utils/Types.ts | 2 +- src/modules/validators/K1ValidatorModule.ts | 2 +- src/modules/validators/ValidationModule.ts | 2 +- tests/account/read.test.ts | 2 +- tests/account/write.test.ts | 5 ++--- tests/modules/k1Validator/write.test.ts | 8 ++++---- tests/modules/ownableExecutor/write.test.ts | 14 +++++++------- .../write/installed-module.test.ts | 2 +- 11 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index b57e9e602..f4dff8781 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -2095,7 +2095,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { const accountContract = await this._getAccountContract() return (await accountContract.read.isModuleInstalled([ BigInt(moduleTypeIds[module.type]), - module.module, + module.moduleAddress, module.data ?? "0x" ])) as boolean } @@ -2114,7 +2114,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { case 'executor': case 'hook': execution = await this._installModule({ - module: module.module, + moduleAddress: module.moduleAddress, type: module.type, data: module.data }) @@ -2156,7 +2156,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { abi: parseAbi([ "function installModule(uint256 moduleTypeId, address module, bytes calldata initData) external payable" ]), - args: [BigInt(moduleTypeIds[module.type]), module.module, module.data || "0x"] + args: [BigInt(moduleTypeIds[module.type]), module.moduleAddress, module.data || "0x"] }) } return execution @@ -2205,14 +2205,14 @@ export class NexusSmartAccount extends BaseSmartContractAccount { if (module.type === 'executor') { installedModules = await this.getInstalledExecutors() } - const index = installedModules.indexOf(getAddress(module.module)) + const index = installedModules.indexOf(getAddress(module.moduleAddress)) if (index === 0) { return SENTINEL_ADDRESS } if (index > 0) { return installedModules[index - 1] } - throw new Error(`Module ${module.module} not found in installed modules`) + throw new Error(`Module ${module.moduleAddress} not found in installed modules`) } private async _uninstallFallback(module: Module): Promise<Execution> { @@ -2231,7 +2231,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { ]), args: [ BigInt(moduleTypeIds[module.type]), - module.module, + module.moduleAddress, encodePacked( ["bytes4", "bytes"], [module.selector ?? "0x", module.data ?? "0x"] @@ -2271,7 +2271,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { abi: parseAbi([ "function uninstallModule(uint256 moduleTypeId, address module, bytes deInitData)" ]), - args: [BigInt(moduleTypeIds[module.type]), module.module, moduleData] + args: [BigInt(moduleTypeIds[module.type]), module.moduleAddress, moduleData] }) } return execution diff --git a/src/modules/base/BaseModule.ts b/src/modules/base/BaseModule.ts index c490e6805..66223bd4e 100644 --- a/src/modules/base/BaseModule.ts +++ b/src/modules/base/BaseModule.ts @@ -16,7 +16,7 @@ export abstract class BaseModule { signer: SmartAccountSigner constructor(module: Module, signer: SmartAccountSigner) { - this.moduleAddress = module.module + this.moduleAddress = module.moduleAddress this.data = module.data ?? "0x" this.additionalContext = module.additionalContext ?? "0x" this.hook = module.hook diff --git a/src/modules/executors/OwnableExecutor.ts b/src/modules/executors/OwnableExecutor.ts index 7e7abb089..516dfc493 100644 --- a/src/modules/executors/OwnableExecutor.ts +++ b/src/modules/executors/OwnableExecutor.ts @@ -34,7 +34,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { data?: Hex ): Promise<OwnableExecutorModule> { const module: Module = { - module: OWNABLE_EXECUTOR, + moduleAddress: OWNABLE_EXECUTOR, type: 'executor', data: data ?? "0x", additionalContext: "0x" diff --git a/src/modules/utils/Types.ts b/src/modules/utils/Types.ts index 25a586153..ff578afe9 100644 --- a/src/modules/utils/Types.ts +++ b/src/modules/utils/Types.ts @@ -205,7 +205,7 @@ export enum SafeHookType { } export type Module = { - module: Address + moduleAddress: Address data?: Hex additionalContext?: Hex type: ModuleType diff --git a/src/modules/validators/K1ValidatorModule.ts b/src/modules/validators/K1ValidatorModule.ts index 6193c5cc6..39c2baf54 100644 --- a/src/modules/validators/K1ValidatorModule.ts +++ b/src/modules/validators/K1ValidatorModule.ts @@ -12,7 +12,7 @@ export class K1ValidatorModule extends BaseValidationModule { signer: SmartAccountSigner ): Promise<K1ValidatorModule> { const module: Module = { - module: K1_VALIDATOR, + moduleAddress: K1_VALIDATOR, type: 'validator', data: await signer.getAddress(), additionalContext: "0x" diff --git a/src/modules/validators/ValidationModule.ts b/src/modules/validators/ValidationModule.ts index 83c734de6..1b47a0993 100644 --- a/src/modules/validators/ValidationModule.ts +++ b/src/modules/validators/ValidationModule.ts @@ -14,7 +14,7 @@ export class ValidationModule extends BaseValidationModule { data: Hex ): Promise<ValidationModule> { const module: Module = { - module: moduleAddress, + moduleAddress, type: 'validator', data, additionalContext: "0x" diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts index 6cf46901c..2273f512b 100644 --- a/tests/account/read.test.ts +++ b/tests/account/read.test.ts @@ -177,7 +177,7 @@ describe("Account:Read", () => { async () => { const isEnabled = smartAccount.isModuleInstalled({ type: 'validator', - module: K1_VALIDATOR, + moduleAddress: K1_VALIDATOR, }) if (await smartAccount.isAccountDeployed()) { expect(isEnabled).resolves.toBeTruthy() diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts index e9021c1e4..3e03e1eef 100644 --- a/tests/account/write.test.ts +++ b/tests/account/write.test.ts @@ -75,8 +75,7 @@ describe("Account:Write", async () => { const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) smartAccount.setActiveExecutionModule(ownableExecutorModule) - const k1ValidatorInstance = await createK1ValidatorModule(smartAccount.getSigner()) - const k1ValidatorModule = {type: k1ValidatorInstance.type, module: k1ValidatorInstance.moduleAddress, data: k1ValidatorInstance.data} + const k1Validator = await createK1ValidatorModule(smartAccount.getSigner()) describe("Account:Basics", async () => { test("Build a user op with pimlico bundler", async () => { @@ -100,7 +99,7 @@ describe("Account:Write", async () => { args: [recipient] }) - const isInstalled = await smartAccount.isModuleInstalled(k1ValidatorModule); + const isInstalled = await smartAccount.isModuleInstalled({type: k1Validator.type, moduleAddress: k1Validator.moduleAddress, data: k1Validator.data}); console.log(isInstalled); const transaction = { diff --git a/tests/modules/k1Validator/write.test.ts b/tests/modules/k1Validator/write.test.ts index 6defdf923..7a36cfd88 100644 --- a/tests/modules/k1Validator/write.test.ts +++ b/tests/modules/k1Validator/write.test.ts @@ -50,20 +50,20 @@ describe("Account:Modules:OwnableValidator", async () => { test("install k1 Validator with 1 owner", async () => { const isInstalledBefore = await smartAccount.isModuleInstalled({ type: 'validator', - module: K1_VALIDATOR + moduleAddress: K1_VALIDATOR }) console.log(isInstalledBefore, "isInstalledBefore") if (!isInstalledBefore) { const userOpReceipt: UserOpReceipt = await smartAccount.installModule({ - module: K1_VALIDATOR, + moduleAddress: K1_VALIDATOR, type: 'validator', data: encodePacked(["address"], [await smartAccount.getAddress()]) }) await smartAccount.uninstallModule({ - module: K1_VALIDATOR, + moduleAddress: K1_VALIDATOR, type: 'validator', data: encodePacked(["address"], [await smartAccount.getAddress()]) }) @@ -77,7 +77,7 @@ describe("Account:Modules:OwnableValidator", async () => { test("Ownable Validator Module should be installed", async () => { const isInstalled = await smartAccount.isModuleInstalled({ type: 'validator', - module: OWNABLE_VALIDATOR + moduleAddress: OWNABLE_VALIDATOR }) expect(isInstalled).toBeTruthy() }, 60000) diff --git a/tests/modules/ownableExecutor/write.test.ts b/tests/modules/ownableExecutor/write.test.ts index 2bec7ccf7..7ce98a340 100644 --- a/tests/modules/ownableExecutor/write.test.ts +++ b/tests/modules/ownableExecutor/write.test.ts @@ -47,12 +47,12 @@ describe("Account:Modules:OwnableExecutor", async () => { test.skip("install Ownable Executor", async () => { let isInstalled = await smartAccount.isModuleInstalled({ type: 'executor', - module: OWNABLE_EXECUTOR + moduleAddress: OWNABLE_EXECUTOR }) if (!isInstalled) { const receipt = await smartAccount.installModule({ - module: OWNABLE_EXECUTOR, + moduleAddress: OWNABLE_EXECUTOR, type: 'executor', data: encodePacked( ["address"], @@ -69,7 +69,7 @@ describe("Account:Modules:OwnableExecutor", async () => { test.skip("Ownable Executor Module should be installed", async () => { const isInstalled = await smartAccount.isModuleInstalled({ type: 'executor', - module: OWNABLE_EXECUTOR + moduleAddress: OWNABLE_EXECUTOR }) console.log(isInstalled, "isInstalled") expect(isInstalled).toBeTruthy() @@ -151,12 +151,12 @@ describe("Account:Modules:OwnableExecutor", async () => { // First, we need to install the OwnableExecutor module on SA 2 let isInstalled = await smartAccount2.isModuleInstalled({ type: 'executor', - module: OWNABLE_EXECUTOR + moduleAddress: OWNABLE_EXECUTOR }) if (!isInstalled) { await smartAccount2.installModule({ - module: OWNABLE_EXECUTOR, + moduleAddress: OWNABLE_EXECUTOR, type: 'executor', data: encodePacked( ["address"], @@ -216,12 +216,12 @@ describe("Account:Modules:OwnableExecutor", async () => { // First, we need to install the OwnableExecutor module on SA 2 let isInstalled = await smartAccount2.isModuleInstalled({ type: 'executor', - module: OWNABLE_EXECUTOR + moduleAddress: OWNABLE_EXECUTOR }) if (!isInstalled) { await smartAccount2.installModule({ - module: ownableExecutorModule2.moduleAddress, + moduleAddress: ownableExecutorModule2.moduleAddress, type: ownableExecutorModule2.type, data: ownableExecutorModule2.data }) diff --git a/tests/modules/ownableValidator/write/installed-module.test.ts b/tests/modules/ownableValidator/write/installed-module.test.ts index a386ab81b..dcd109bd9 100644 --- a/tests/modules/ownableValidator/write/installed-module.test.ts +++ b/tests/modules/ownableValidator/write/installed-module.test.ts @@ -102,7 +102,7 @@ // smartAccount.setActiveValidationModule(ownableValidatorModule) -// const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: ownableValidatorModule.moduleAddress}); +// const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: ownableValidatormodule.moduleAddressAddress}); // console.log("Is the module installed ? ", isInstalled); // const transaction = { From b66b611aa35af13da879995078892827aabf30e4 Mon Sep 17 00:00:00 2001 From: VGabriel45 <vgabrielmarian21@gmai.com> Date: Tue, 20 Aug 2024 18:11:59 +0300 Subject: [PATCH 1236/1247] refactor: updated test case for OwnableExecutor --- tests/modules/ownableExecutor/write.test.ts | 78 +++++++++------------ 1 file changed, 34 insertions(+), 44 deletions(-) diff --git a/tests/modules/ownableExecutor/write.test.ts b/tests/modules/ownableExecutor/write.test.ts index 7ce98a340..a2da0644b 100644 --- a/tests/modules/ownableExecutor/write.test.ts +++ b/tests/modules/ownableExecutor/write.test.ts @@ -41,7 +41,11 @@ describe("Account:Modules:OwnableExecutor", async () => { bundlerUrl }) - const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) + const initData = encodePacked( + ["address"], + [await smartAccount.getAddress()] + ) + const ownableExecutorModule = await createOwnableExecutorModule(smartAccount, initData) describe("Ownable Executor Module Tests", async () => { test.skip("install Ownable Executor", async () => { @@ -52,12 +56,9 @@ describe("Account:Modules:OwnableExecutor", async () => { if (!isInstalled) { const receipt = await smartAccount.installModule({ - moduleAddress: OWNABLE_EXECUTOR, - type: 'executor', - data: encodePacked( - ["address"], - [await smartAccount.getAddress()] - ) + moduleAddress: ownableExecutorModule.moduleAddress, + type: ownableExecutorModule.type, + data: ownableExecutorModule.data }) smartAccount.setActiveExecutionModule(ownableExecutorModule) @@ -66,6 +67,29 @@ describe("Account:Modules:OwnableExecutor", async () => { } }, 60000) + test.skip("uninstall Ownable Executor", async () => { + const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + signer: walletClientTwo, + bundlerUrl + }) + + const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2) + + let isInstalled = await smartAccount2.isModuleInstalled({ + type: 'executor', + moduleAddress: OWNABLE_EXECUTOR + }) + + if (isInstalled) { + await smartAccount2.uninstallModule({ + moduleAddress: ownableExecutorModule2.moduleAddress, + type: ownableExecutorModule2.type, + data: ownableExecutorModule2.data + }) + } + + }, 60000) + test.skip("Ownable Executor Module should be installed", async () => { const isInstalled = await smartAccount.isModuleInstalled({ type: 'executor', @@ -139,34 +163,12 @@ describe("Account:Modules:OwnableExecutor", async () => { expect(txHash).toBeTruthy() }, 60000) - test.skip("SA 2 can execute actions on behalf of SA 1", async () => { - + test("SA 2 can execute actions on behalf of SA 1", async () => { const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ signer: walletClientTwo, bundlerUrl }) - const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2) - - // First, we need to install the OwnableExecutor module on SA 2 - let isInstalled = await smartAccount2.isModuleInstalled({ - type: 'executor', - moduleAddress: OWNABLE_EXECUTOR - }) - - if (!isInstalled) { - await smartAccount2.installModule({ - moduleAddress: OWNABLE_EXECUTOR, - type: 'executor', - data: encodePacked( - ["address"], - [await smartAccount2.getAddress()] - ) - }) - } - - smartAccount2.setActiveExecutionModule(ownableExecutorModule) - const valueToTransfer = parseEther("0.1") const recipient = accountTwo.address const transferEncodedCall = encodeFunctionData({ @@ -175,25 +177,13 @@ describe("Account:Modules:OwnableExecutor", async () => { args: [recipient, valueToTransfer] }) - const owners = await ownableExecutorModule2.getOwners() - - // check if SA 2 is as an owner of SA 1 - const isOwner = owners.includes(await smartAccount2.getAddress()) - if(!isOwner) { - const userOpReceipt = await ownableExecutorModule2.addOwner( - await smartAccount2.getAddress() - ) - expect(userOpReceipt.success).toBeTruthy() - } - const transferTransaction = { to: token, data: transferEncodedCall, value: 0n } - smartAccount2.setActiveExecutionModule(ownableExecutorModule2) - // SA 2 will execute the transferTransaction on behalf of SA 1 (smartAccount) + smartAccount2.setActiveExecutionModule(ownableExecutorModule) const receipt = await smartAccount2.sendTransactionWithExecutor([transferTransaction], await smartAccount.getAddress()); console.log(receipt, "receipt"); @@ -201,7 +191,7 @@ describe("Account:Modules:OwnableExecutor", async () => { expect(receipt.success).toBe(true) }, 60000) - test("SA 2 can execute actions on behalf of SA 1 using module instance instead of smart account instance", async () => { + test.skip("SA 2 can execute actions on behalf of SA 1 using module instance instead of smart account instance", async () => { const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ signer: walletClientTwo, bundlerUrl From a67103dffd87a34920d8ebcb7d2f71249e052f3d Mon Sep 17 00:00:00 2001 From: B Venkatesh <67518179+B-Venkatesh7210@users.noreply.github.com> Date: Sat, 24 Aug 2024 01:09:03 +0530 Subject: [PATCH 1237/1247] broken links fixed --- examples/CREATE_AND_USE_A_SESSION.md | 4 ++-- src/account/NexusSmartAccount.ts | 8 ++++---- src/modules/utils/Helper.ts | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/CREATE_AND_USE_A_SESSION.md b/examples/CREATE_AND_USE_A_SESSION.md index 738c6718f..fee45f72b 100644 --- a/examples/CREATE_AND_USE_A_SESSION.md +++ b/examples/CREATE_AND_USE_A_SESSION.md @@ -35,7 +35,7 @@ const { sessionKeyAddress, sessionStorageClient } = await createSessionKeyEOA( /** * Rule * - * https://docs.biconomy.io/Modules/abiSessionValidationModule#rules + * https://docs.biconomy.io/modules/sessions/abiSessionValidationModule#rules * * Rules define permissions for the args of an allowed method. With rules, you can precisely define what should be the args of the transaction that is allowed for a given Session. Every Rule works with a single static arg or a 32-byte chunk of the dynamic arg. * Since the ABI Encoding translates every static param into a 32-bytes word, even the shorter ones (like address or uint8), every Rule defines a desired relation (Condition) between n-th 32bytes word of the calldata and a reference Value (that is obviously a 32-bytes word as well). @@ -48,7 +48,7 @@ const rules: Rule = [ * * offset * - * https://docs.biconomy.io/Modules/abiSessionValidationModule#rules + * https://docs.biconomy.io/modules/sessions/abiSessionValidationModule#rules * * The offset in the ABI SVM contract helps locate the relevant data within the function call data, it serves as a reference point from which to start reading or extracting specific information required for validation. When processing function call data, particularly in low-level languages like Solidity assembly, it's necessary to locate where specific parameters or arguments are stored. The offset is used to calculate the starting position within the calldata where the desired data resides. Suppose we have a function call with multiple arguments passed as calldata. Each argument occupies a certain number of bytes, and the offset helps determine where each argument begins within the calldata. * Using the offset to Extract Data: In the contract, the offset is used to calculate the position within the calldata where specific parameters or arguments are located. Since every arg is a 32-bytes word, offsets are always multiplier of 32 (or of 0x20 in hex). diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index f4dff8781..913386047 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -226,7 +226,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * This method will create a NexusSmartAccount instance but will not deploy the Smart Account * Deployment of the Smart Account will be donewith the first user operation. * - * - Docs: https://docs.biconomy.io/Account/integration#integration-1 + * - Docs: https://docs.biconomy.io/account/integration#integration-1 * * @param nexusSmartAccountConfig - Configuration for initializing the NexusSmartAccount instance {@link NexusSmartAccountConfig}. * @returns A promise that resolves to a new instance of NexusSmartAccount. @@ -1221,7 +1221,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * @returns Promise<Hash> * Sends a user operation * - * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#send-useroperation + * - Docs: https://docs.biconomy.io/account/methods#senduserop- * * @param userOp Partial<{@link UserOperationStruct}> the userOp params to be sent. * @param params {@link SendUserOpParams}. @@ -1460,7 +1460,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { /** * Sends a transaction (builds and sends a user op in sequence) * - * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#send-transaction + * - Docs: https://docs.biconomy.io/account/methods#sendtransaction- * * @param manyOrOneTransactions Array of {@link Transaction} to be batched and sent. Can also be a single {@link Transaction}. * @param buildUseropDto {@link BuildUserOpOptions}. @@ -1561,7 +1561,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * * This method will also simulate the validation and execution of the user operation, telling the user if the user operation will be successful or not. * - * - Docs: https://docs.biconomy.io/Account/transactions/userpaid#build-useroperation + * - Docs: https://docs.biconomy.io/account/methods#builduserop- * * @param transactions Array of {@link Transaction} to be sent. * @param buildUseropDto {@link BuildUserOpOptions}. diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index 239a532cb..a4a965b1e 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -19,7 +19,7 @@ import { /** * Rule * - * https://docs.biconomy.io/Modules/abiSessionValidationModule#rules + * https://docs.biconomy.io/modules/sessions/sessionvalidationmodule * * Rules define permissions for the args of an allowed method. With rules, you can precisely define what should be the args of the transaction that is allowed for a given Session. Every Rule works with a single static arg or a 32-byte chunk of the dynamic arg. * Since the ABI Encoding translates every static param into a 32-bytes word, even the shorter ones (like address or uint8), every Rule defines a desired relation (Condition) between n-th 32bytes word of the calldata and a reference Value (that is obviously a 32-bytes word as well). @@ -31,7 +31,7 @@ import { // * // * offset // * -// * https://docs.biconomy.io/Modules/abiSessionValidationModule#rules +// * https://docs.biconomy.io/modules/sessions/sessionvalidationmodule // * // * The offset in the ABI SVM contract helps locate the relevant data within the function call data, it serves as a reference point from which to start reading or extracting specific information required for validation. When processing function call data, particularly in low-level languages like Solidity assembly, it's necessary to locate where specific parameters or arguments are stored. The offset is used to calculate the starting position within the calldata where the desired data resides. Suppose we have a function call with multiple arguments passed as calldata. Each argument occupies a certain number of bytes, and the offset helps determine where each argument begins within the calldata. // * Using the offset to Extract Data: In the contract, the offset is used to calculate the position within the calldata where specific parameters or arguments are located. Since every arg is a 32-bytes word, offsets are always multiplier of 32 (or of 0x20 in hex). From 678a5cccff25e5be256c2471c4e943fbc32ba772 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Fri, 30 Aug 2024 12:47:47 +0100 Subject: [PATCH 1238/1247] feat: testing framework (#561) * chore: testing framework --- .env.example | 12 +- .github/actions/build/action.yml | 3 + .../actions/install-dependencies/action.yml | 3 + .github/workflows/build.yml | 2 +- .github/workflows/coverage.yml | 15 +- .github/workflows/docs.yml | 2 +- .github/workflows/playground.yml | 29 + .github/workflows/pr-lint.yml | 2 +- .github/workflows/size-report.yml | 4 +- .github/workflows/test-read.yml | 29 - .github/workflows/test-write.yml | 63 -- .github/workflows/unit-tests.yml | 30 + .size-limit.json | 10 +- bun.lockb | Bin 274217 -> 352526 bytes examples/CREATE_AND_USE_A_BATCH_SESSION.md | 138 --- examples/CREATE_AND_USE_A_SESSION.md | 137 --- examples/INITIALISE_A_SMART_CONTRACT.md | 23 - .../SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md | 56 - examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md | 35 - package.json | 31 +- scripts/fetch:deployment.ts | 123 +++ scripts/sendUserOperation.ts | 51 - .../abi/EntryPointABI.ts} | 4 +- src/__contracts/abi/K1ValidatorAbi.ts | 244 +++++ .../abi/K1ValidatorFactoryAbi.ts} | 17 +- .../abi/NexusAbi.ts} | 127 ++- src/__contracts/abi/index.ts | 4 + src/__contracts/addresses.ts | 9 + src/__contracts/index.ts | 36 + src/account/BaseSmartContractAccount.ts | 56 +- src/account/NexusSmartAccount.ts | 918 ++++++---------- src/account/abi/AccountResolver.ts | 118 --- src/account/abi/ECDSAModule.ts | 152 --- src/account/utils/Constants.ts | 62 +- src/account/utils/HttpRequests.ts | 1 + src/account/utils/Types.ts | 50 +- src/account/utils/Utils.ts | 73 +- src/account/utils/convertSigner.ts | 63 +- src/account/utils/getChain.ts | 4 +- src/bundler/Bundler.ts | 41 +- src/bundler/utils/Constants.ts | 26 +- src/bundler/utils/HelperFunction.ts | 4 +- src/bundler/utils/Types.ts | 67 +- src/modules/base/BaseModule.ts | 25 +- src/modules/executors/OwnableExecutor.ts | 52 +- src/modules/utils/Constants.ts | 17 - src/modules/utils/Helper.ts | 12 +- src/modules/utils/Types.ts | 8 +- src/modules/validators/K1ValidatorModule.ts | 11 +- src/modules/validators/OwnableValidator.ts | 2 +- src/modules/validators/ValidationModule.ts | 4 +- src/paymaster/utils/Constants.ts | 1 - tests/account.read.test.ts | 936 +++++++++++++++++ tests/account.write.test.ts | 227 ++++ tests/account/read.test.ts | 989 ------------------ tests/account/write.test.ts | 336 ------ tests/globalSetup.ts | 7 - tests/modules.k1Validator.write.test.ts | 161 +++ tests/modules.ownableExecutor.read.test.ts | 114 ++ tests/modules.ownableExecutor.write.test.ts | 371 +++++++ ...les.ownableValidator.install.write.test.ts | 371 +++++++ ...s.ownableValidator.uninstall.write.test.ts | 371 +++++++ tests/modules/k1Validator/write.test.ts | 108 -- tests/modules/ownableExecutor/read.test.ts | 40 - tests/modules/ownableExecutor/write.test.ts | 319 ------ .../write/installed-module.test.ts | 204 ---- .../write/uninstalled-module.test.ts | 102 -- tests/playground.test.ts | 168 +++ tests/setupFiles.ts | 9 - tests/src/README.md | 93 ++ .../__contracts/abi/BiconomyMetaFactoryAbi.ts | 319 ++++++ tests/src/__contracts/abi/BootstrapAbi.ts | 802 ++++++++++++++ tests/src/__contracts/abi/BootstrapLibAbi.ts | 110 ++ tests/src/__contracts/abi/CounterAbi.ts | 36 + tests/src/__contracts/abi/MockExecutorAbi.ts | 309 ++++++ tests/src/__contracts/abi/MockHandlerAbi.ts | 227 ++++ tests/src/__contracts/abi/MockHookAbi.ts | 133 +++ tests/src/__contracts/abi/MockRegistryAbi.ts | 162 +++ tests/src/__contracts/abi/MockTokenAbi.ts | 344 ++++++ tests/src/__contracts/abi/MockValidatorAbi.ts | 228 ++++ .../__contracts/abi/NexusAccountFactoryAbi.ts | 323 ++++++ tests/src/__contracts/abi/StakeableAbi.ts | 211 ++++ tests/src/__contracts/abi/index.ts | 12 + tests/src/__contracts/addresses.ts | 16 + tests/src/__contracts/mockAddresses.ts | 18 + tests/src/callDatas.ts | 14 + tests/src/executables.ts | 22 + tests/src/globalSetup.ts | 25 + tests/src/testSetup.ts | 59 ++ tests/src/testUtils.ts | 466 +++++++++ tests/utils.ts | 230 ---- tests/vitest.config.ts | 9 +- tsconfig/tsconfig.base.json | 1 + 93 files changed, 7792 insertions(+), 4216 deletions(-) create mode 100644 .github/workflows/playground.yml delete mode 100644 .github/workflows/test-read.yml delete mode 100644 .github/workflows/test-write.yml create mode 100644 .github/workflows/unit-tests.yml delete mode 100644 examples/CREATE_AND_USE_A_BATCH_SESSION.md delete mode 100644 examples/CREATE_AND_USE_A_SESSION.md delete mode 100644 examples/INITIALISE_A_SMART_CONTRACT.md delete mode 100644 examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md delete mode 100644 examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md create mode 100644 scripts/fetch:deployment.ts delete mode 100644 scripts/sendUserOperation.ts rename src/{account/abi/EntryPointAbi.ts => __contracts/abi/EntryPointABI.ts} (99%) create mode 100644 src/__contracts/abi/K1ValidatorAbi.ts rename src/{account/abi/K1ValidatorFactory.ts => __contracts/abi/K1ValidatorFactoryAbi.ts} (96%) rename src/{account/abi/SmartAccount.ts => __contracts/abi/NexusAbi.ts} (90%) create mode 100644 src/__contracts/abi/index.ts create mode 100644 src/__contracts/addresses.ts create mode 100644 src/__contracts/index.ts delete mode 100644 src/account/abi/AccountResolver.ts delete mode 100644 src/account/abi/ECDSAModule.ts create mode 100644 tests/account.read.test.ts create mode 100644 tests/account.write.test.ts delete mode 100644 tests/account/read.test.ts delete mode 100644 tests/account/write.test.ts delete mode 100644 tests/globalSetup.ts create mode 100644 tests/modules.k1Validator.write.test.ts create mode 100644 tests/modules.ownableExecutor.read.test.ts create mode 100644 tests/modules.ownableExecutor.write.test.ts create mode 100644 tests/modules.ownableValidator.install.write.test.ts create mode 100644 tests/modules.ownableValidator.uninstall.write.test.ts delete mode 100644 tests/modules/k1Validator/write.test.ts delete mode 100644 tests/modules/ownableExecutor/read.test.ts delete mode 100644 tests/modules/ownableExecutor/write.test.ts delete mode 100644 tests/modules/ownableValidator/write/installed-module.test.ts delete mode 100644 tests/modules/ownableValidator/write/uninstalled-module.test.ts create mode 100644 tests/playground.test.ts delete mode 100644 tests/setupFiles.ts create mode 100644 tests/src/README.md create mode 100644 tests/src/__contracts/abi/BiconomyMetaFactoryAbi.ts create mode 100644 tests/src/__contracts/abi/BootstrapAbi.ts create mode 100644 tests/src/__contracts/abi/BootstrapLibAbi.ts create mode 100644 tests/src/__contracts/abi/CounterAbi.ts create mode 100644 tests/src/__contracts/abi/MockExecutorAbi.ts create mode 100644 tests/src/__contracts/abi/MockHandlerAbi.ts create mode 100644 tests/src/__contracts/abi/MockHookAbi.ts create mode 100644 tests/src/__contracts/abi/MockRegistryAbi.ts create mode 100644 tests/src/__contracts/abi/MockTokenAbi.ts create mode 100644 tests/src/__contracts/abi/MockValidatorAbi.ts create mode 100644 tests/src/__contracts/abi/NexusAccountFactoryAbi.ts create mode 100644 tests/src/__contracts/abi/StakeableAbi.ts create mode 100644 tests/src/__contracts/abi/index.ts create mode 100644 tests/src/__contracts/addresses.ts create mode 100644 tests/src/__contracts/mockAddresses.ts create mode 100644 tests/src/callDatas.ts create mode 100644 tests/src/executables.ts create mode 100644 tests/src/globalSetup.ts create mode 100644 tests/src/testSetup.ts create mode 100644 tests/src/testUtils.ts delete mode 100644 tests/utils.ts diff --git a/.env.example b/.env.example index c0487f4f5..61167deb8 100644 --- a/.env.example +++ b/.env.example @@ -1,8 +1,6 @@ E2E_PRIVATE_KEY_ONE= -E2E_PRIVATE_KEY_TWO= -BUNDLER_URL=https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 -E2E_BICO_PAYMASTER_KEY_AMOY= -E2E_BICO_PAYMASTER_KEY_BASE= -CHAIN_ID=11155111 -CODECOV_TOKEN= -TESTING=false +CHAIN_ID=84532 +RPC_URL= +BUNDLER_URL= +BICONOMY_SDK_DEBUG=false +RUN_PLAYGROUND=false \ No newline at end of file diff --git a/.github/actions/build/action.yml b/.github/actions/build/action.yml index 1cd962cb5..c0917e09a 100644 --- a/.github/actions/build/action.yml +++ b/.github/actions/build/action.yml @@ -7,6 +7,9 @@ runs: - name: Set up Bun uses: oven-sh/setup-bun@v1 + - name: Set up foundry + uses: foundry-rs/foundry-toolchain@v1 + - name: Install dependencies shell: bash run: bun install --frozen-lockfile diff --git a/.github/actions/install-dependencies/action.yml b/.github/actions/install-dependencies/action.yml index 3dbb2bd0b..85ebbac6e 100644 --- a/.github/actions/install-dependencies/action.yml +++ b/.github/actions/install-dependencies/action.yml @@ -7,6 +7,9 @@ runs: - name: Set up Bun uses: oven-sh/setup-bun@v1 + - name: Set up foundry + uses: foundry-rs/foundry-toolchain@v1 + - name: Install dependencies shell: bash run: | diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 08c18cd34..96f601a8f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,7 @@ jobs: name: build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Build uses: ./.github/actions/build diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index d573adff2..9267e8bfb 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - develop jobs: coverage: name: coverage @@ -13,21 +14,19 @@ jobs: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + - name: Install dependencies uses: ./.github/actions/install-dependencies - name: Run the tests - run: bun run test:coverage + run: bun run test --coverage env: E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} - E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - BUNDLER_URL: https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 - E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} - E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} - CHAIN_ID: 11155111 - TESTING: true + BUNDLER_URL: https://api.pimlico.io/v2/84532/rpc?apikey=pim_im13GpaqtMDSiJFhXMxcVn + CHAIN_ID: 84532 + CI: true - name: report coverage uses: davelosert/vitest-coverage-report-action@v2 diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 078b083ba..4428c2b9d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -11,7 +11,7 @@ jobs: deploy-docs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: git config --global user.email "gh@runner.com" - run: git config --global user.name "gh-runner" diff --git a/.github/workflows/playground.yml b/.github/workflows/playground.yml new file mode 100644 index 000000000..58987fb7a --- /dev/null +++ b/.github/workflows/playground.yml @@ -0,0 +1,29 @@ +name: playground +on: + workflow_dispatch: +jobs: + playground: + name: playground + permissions: write-all + runs-on: ubuntu-latest + concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-playground + cancel-in-progress: true + steps: + - uses: actions/setup-node@v4 + with: + node-version: 22 + + - uses: actions/checkout@v4 + + - name: Install dependencies + uses: ./.github/actions/install-dependencies + + - name: Run the playground + run: bun run test -t=playground + env: + E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} + BUNDLER_URL: https://api.pimlico.io/v2/84532/rpc?apikey=pim_im13GpaqtMDSiJFhXMxcVn + CHAIN_ID: 84532 + RUN_PLAYGROUND: true + CI: true diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml index 3e77f7837..0f591a7c5 100644 --- a/.github/workflows/pr-lint.yml +++ b/.github/workflows/pr-lint.yml @@ -8,7 +8,7 @@ jobs: name: pr lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install dependencies uses: ./.github/actions/install-dependencies diff --git a/.github/workflows/size-report.yml b/.github/workflows/size-report.yml index 68718940e..053e2d8b8 100644 --- a/.github/workflows/size-report.yml +++ b/.github/workflows/size-report.yml @@ -17,11 +17,11 @@ jobs: steps: - name: Clone repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 18 + node-version: 22 - name: Set up Bun uses: oven-sh/setup-bun@v1 diff --git a/.github/workflows/test-read.yml b/.github/workflows/test-read.yml deleted file mode 100644 index 639b6d406..000000000 --- a/.github/workflows/test-read.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: test-read -on: - workflow_dispatch: - pull_request: - types: [opened, reopened, synchronize, ready_for_review] -jobs: - test-read: - name: test-read - permissions: write-all - runs-on: ubuntu-latest - concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - steps: - - uses: actions/checkout@v3 - - - name: Install dependencies - uses: ./.github/actions/install-dependencies - - - name: Run the tests - run: bun run test:ci -t=Read - env: - E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} - E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - BUNDLER_URL: https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 - E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} - E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} - CHAIN_ID: 11155111 - TESTING: true diff --git a/.github/workflows/test-write.yml b/.github/workflows/test-write.yml deleted file mode 100644 index a0d1a13db..000000000 --- a/.github/workflows/test-write.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: test-write -on: - workflow_dispatch: - pull_request_review: - types: [submitted] - pull_request: - types: [opened] -jobs: - test-write: - name: test-write - permissions: write-all - runs-on: ubuntu-latest - concurrency: - group: ${{ github.workflow }}-${{ github.ref }}-test-write - cancel-in-progress: true - steps: - - uses: actions/checkout@v3 - - - name: Install dependencies - uses: ./.github/actions/install-dependencies - - - name: Run the account tests - run: bun run test:ci -t=Account:Write - env: - E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} - E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - BUNDLER_URL: https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 - E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} - E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} - CHAIN_ID: 11155111 - - - name: Run the bundler tests - run: bun run test:ci -t=Bundler:Write - env: - E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} - E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - BUNDLER_URL: https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 - E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} - E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} - CHAIN_ID: 11155111 - TESTING: true - - - name: Run the paymaster tests - run: bun run test:ci -t=Paymaster:Write - env: - E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} - E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - BUNDLER_URL: https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 - E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} - E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} - CHAIN_ID: 11155111 - TESTING: true - - - name: Run the modules tests - run: bun run test:ci -t=Modules:Write - env: - E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} - E2E_PRIVATE_KEY_TWO: ${{ secrets.E2E_PRIVATE_KEY_TWO }} - BUNDLER_URL: https://bundler.biconomy.io/api/v2/11155111/cJPK7B3ru.dd7f7861-190d-45ic-af80-6877f74b8f44 - E2E_BICO_PAYMASTER_KEY_BASE: ${{ secrets.E2E_BICO_PAYMASTER_KEY_BASE }} - E2E_BICO_PAYMASTER_KEY_AMOY: ${{ secrets.E2E_BICO_PAYMASTER_KEY_AMOY }} - CHAIN_ID: 11155111 - TESTING: true diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml new file mode 100644 index 000000000..55a919575 --- /dev/null +++ b/.github/workflows/unit-tests.yml @@ -0,0 +1,30 @@ +name: unit-tests +on: + workflow_dispatch: + pull_request: + types: [opened, reopened, synchronize, ready_for_review] +jobs: + unit-tests: + name: unit-tests + permissions: write-all + runs-on: ubuntu-latest + concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-unit-tests + cancel-in-progress: true + steps: + - uses: actions/setup-node@v4 + with: + node-version: 22 + + - uses: actions/checkout@v4 + + - name: Install dependencies + uses: ./.github/actions/install-dependencies + + - name: Run the tests + run: bun run test + env: + E2E_PRIVATE_KEY_ONE: ${{ secrets.E2E_PRIVATE_KEY_ONE }} + BUNDLER_URL: https://api.pimlico.io/v2/84532/rpc?apikey=pim_im13GpaqtMDSiJFhXMxcVn + CHAIN_ID: 84532 + CI: true diff --git a/.size-limit.json b/.size-limit.json index acf9835a6..254ab1c67 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -2,34 +2,34 @@ { "name": "core (esm)", "path": "./dist/_esm/index.js", - "limit": "65 kB", + "limit": "180 kB", "import": "*", "ignore": ["node:fs", "fs"] }, { "name": "core (cjs)", "path": "./dist/_cjs/index.js", - "limit": "65 kB", + "limit": "180 kB", "ignore": ["node:fs", "fs"] }, { "name": "account (tree-shaking)", "path": "./dist/_esm/index.js", - "limit": "65 kB", + "limit": "180 kB", "import": "{ createSmartAccountClient }", "ignore": ["node:fs", "fs"] }, { "name": "bundler (tree-shaking)", "path": "./dist/_esm/bundler/index.js", - "limit": "5 kB", + "limit": "15 kB", "import": "{ createBundler }", "ignore": ["node:fs", "fs"] }, { "name": "paymaster (tree-shaking)", "path": "./dist/_esm/paymaster/index.js", - "limit": "5 kB", + "limit": "15 kB", "import": "{ createPaymaster }", "ignore": ["node:fs", "fs"] } diff --git a/bun.lockb b/bun.lockb index f31953176484e2b312684984c55132e7dfd7f3c2..5f516548f3cea8f93140bc7bb8edd5cd5f3363e3 100755 GIT binary patch delta 109552 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 delta 60977 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 diff --git a/examples/CREATE_AND_USE_A_BATCH_SESSION.md b/examples/CREATE_AND_USE_A_BATCH_SESSION.md deleted file mode 100644 index b62f6cbd8..000000000 --- a/examples/CREATE_AND_USE_A_BATCH_SESSION.md +++ /dev/null @@ -1,138 +0,0 @@ -### Create and Use a Batch Session - -| Key | Description | -| ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | -| [sessionConfigs](https://bcnmy.github.io/biconomy-client-sdk/interfaces/CreateSessionDataParams.html) | svm criteria | -| [createERC20SessionDatum](https://bcnmy.github.io/biconomy-client-sdk/functions/createERC20SessionDatum.html) | helper that returns erc20 svm data (not recommended) | -| [createABISessionDatum](https://bcnmy.github.io/biconomy-client-sdk/types/createABISessionDatum.html) | helper that returns abi svm data (recommended) | - -```typescript -import { - createSmartAccountClient, - createSession, - createSessionSmartAccountClient, - Rule, - PaymasterMode, - Policy, -} from "@biconomy/account"; -import { createWalletClient, http, createPublicClient } from "viem"; -import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; -import { mainnet as chain } from "viem/chains"; - -const withSponsorship = { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, -}; - -const account = privateKeyToAccount(generatePrivateKey()); -const signer = createWalletClient({ account, chain, transport: http() }); -const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - paymasterUrl, -}); - -// Retrieve bundler and pymaster urls from dashboard -const smartAccountAddress = await smartAccount.getAccountAddress(); - -// creates a store for the session, and saves the keys to it to be later retrieved -const { sessionKeyAddress, sessionStorageClient } = await createSessionKeyEOA( - smartAccount, - chain -); - -const leaves: CreateSessionParams[] = [ - createERC20SessionDatum({ - interval: { - validUntil: 0, - validAfter: 0, - }, - sessionKeyAddress, - sessionKeyData: encodeAbiParameters( - [ - { type: "address" }, - { type: "address" }, - { type: "address" }, - { type: "uint256" }, - ], - [sessionKeyAddress, token, recipient, amount] - ), - }), - createABISessionDatum({ - interval: { - validUntil: 0, - validAfter: 0, - }, - sessionKeyAddress, - contractAddress: nftAddress, - functionSelector: "safeMint(address)", - rules: [ - { - offset: 0, - condition: 0, - referenceValue: smartAccountAddress, - }, - ], - valueLimit: 0n, - }), -]; - -const { wait, session } = await createBatchSession( - smartAccount, - sessionStorageClient, - leaves, - withSponsorship -); - -const { - receipt: { transactionHash }, - success, -} = await wait(); - -const smartAccountWithSession = await createSessionSmartAccountClient( - { - accountAddress: smartAccountAddress, // Set the account address on behalf of the user - bundlerUrl, - paymasterUrl, - chainId, - }, - smartAccountAddress // Storage client, full Session or smartAccount address if using default storage - true // if batching -); - -const transferTx: Transaction = { - to: token, - data: encodeFunctionData({ - abi: parseAbi(["function transfer(address _to, uint256 _value)"]), - functionName: "transfer", - args: [recipient, amount], - }), -}; -const nftMintTx: Transaction = { - to: nftAddress, - data: encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [smartAccountAddress], - }), -}; - -const txs = [nftMintTx, transferTx]; -const correspondingIndexes = [1, 0]; // The order of the txs from the sessionBatch - -const batchSessionParams = await getBatchSessionTxParams( - txs, - correspondingIndexes, - smartAccountAddress, // Storage client, full Session or smartAccount address if using default storage - chain -); - -const { wait: sessionWait } = await smartAccountWithSession.sendTransaction( - txs, - { - ...batchSessionParams, - ...withSponsorship, - } -); - -const { success } = await sessionWait(); -``` diff --git a/examples/CREATE_AND_USE_A_SESSION.md b/examples/CREATE_AND_USE_A_SESSION.md deleted file mode 100644 index fee45f72b..000000000 --- a/examples/CREATE_AND_USE_A_SESSION.md +++ /dev/null @@ -1,137 +0,0 @@ -### Create and Use a Session - -| Key | Description | -| ------------------------------------------------------------------------------- | ----------- | -| [sessionConfigs](https://bcnmy.github.io/biconomy-client-sdk/types/Policy.html) | Policy[] | -| [rules](https://bcnmy.github.io/biconomy-client-sdk/types/Policy.html) | Rule[] | - -```typescript -import { - createSmartAccountClient, - createSession, - createSessionSmartAccountClient, - Rule, - Policy, -} from "@biconomy/account"; -import { createWalletClient, http, createPublicClient } from "viem"; -import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; -import { mainnet as chain } from "viem/chains"; - -const account = privateKeyToAccount(generatePrivateKey()); -const signer = createWalletClient({ account, chain, transport: http() }); -const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - paymasterUrl, -}); // Retrieve bundler and pymaster urls from dashboard -const smartAccountAddress = await smartAccount.getAccountAddress(); - -// creates a store for the session, and saves the keys to it to be later retrieved -const { sessionKeyAddress, sessionStorageClient } = await createSessionKeyEOA( - smartAccount, - chain -); - -/** - * Rule - * - * https://docs.biconomy.io/modules/sessions/abiSessionValidationModule#rules - * - * Rules define permissions for the args of an allowed method. With rules, you can precisely define what should be the args of the transaction that is allowed for a given Session. Every Rule works with a single static arg or a 32-byte chunk of the dynamic arg. - * Since the ABI Encoding translates every static param into a 32-bytes word, even the shorter ones (like address or uint8), every Rule defines a desired relation (Condition) between n-th 32bytes word of the calldata and a reference Value (that is obviously a 32-bytes word as well). - * So, when dApp is creating a _sessionKeyData to enable a session, it should convert every shorter static arg to a 32bytes word to match how it will be actually ABI encoded in the userOp.callData. - * For the dynamic args, like bytes, every 32-bytes word of the calldata such as offset of the bytes arg, length of the bytes arg, and n-th 32-bytes word of the bytes arg can be controlled by a dedicated Rule. - */ -const rules: Rule = [ - { - /** - * - * offset - * - * https://docs.biconomy.io/modules/sessions/abiSessionValidationModule#rules - * - * The offset in the ABI SVM contract helps locate the relevant data within the function call data, it serves as a reference point from which to start reading or extracting specific information required for validation. When processing function call data, particularly in low-level languages like Solidity assembly, it's necessary to locate where specific parameters or arguments are stored. The offset is used to calculate the starting position within the calldata where the desired data resides. Suppose we have a function call with multiple arguments passed as calldata. Each argument occupies a certain number of bytes, and the offset helps determine where each argument begins within the calldata. - * Using the offset to Extract Data: In the contract, the offset is used to calculate the position within the calldata where specific parameters or arguments are located. Since every arg is a 32-bytes word, offsets are always multiplier of 32 (or of 0x20 in hex). - * Let's see how the offset is applied to extract the to and value arguments of a transfer(address to, uint256 value) method: - * - Extracting to Argument: The to argument is the first parameter of the transfer function, representing the recipient address. Every calldata starts with the 4-bytes method selector. However, the ABI SVM is adding the selector length itself, so for the first argument the offset will always be 0 (0x00); - * - Extracting value Argument: The value argument is the second parameter of the transfer function, representing the amount of tokens to be transferred. To extract this argument, the offset for the value parameter would be calculated based on its position in the function calldata. Despite to is a 20-bytes address, in the solidity abi encoding it is always appended with zeroes to a 32-bytes word. So the offset for the second 32-bytes argument (which isthe value in our case) will be 32 (or 0x20 in hex). - * - * If you need to deal with dynamic-length arguments, such as bytes, please refer to this document https://docs.soliditylang.org/en/v0.8.24/abi-spec.html#function-selector-and-argument-encoding to learn more about how dynamic arguments are represented in the calldata and which offsets should be used to access them. - */ - offset: 0, - /** - * Conditions: - * - * 0 - Equal - * 1 - Less than or equal - * 2 - Less than - * 3 - Greater than or equal - * 4 - Greater than - * 5 - Not equal - */ - condition: 0, - /** The value to compare against */ - referenceValue: smartAccountAddress, - }, -]; - -/** The policy is made up of a list of rules applied to the contract method with and interval */ -const policy: Policy[] = [ - { - /** The address of the sessionKey upon which the policy is to be imparted */ - sessionKeyAddress, - /** The address of the contract to be included in the policy */ - contractAddress: nftAddress, - /** The specific function selector from the contract to be included in the policy */ - functionSelector: "safeMint(address)", - /** The list of rules which make up the policy */ - rules, - /** The time interval within which the session is valid */ - interval: { - validUntil: 0, - validAfter: 0, - }, - /** The maximum value that can be transferred in a single transaction */ - valueLimit: 0n, - }, -]; - -const { wait, session } = await createSession( - smartAccount, - policy, - sessionStorageClient, - { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - } -); - -const { - receipt: { transactionHash }, -} = await wait(); - -const smartAccountWithSession = await createSessionSmartAccountClient( - { - accountAddress: smartAccountAddress, // Set the account address on behalf of the user - bundlerUrl, - paymasterUrl, - chainId, - }, - smartAccountAddress // Storage client, full Session or smartAccount address if using default storage -); - -const { wait: mintWait } = await smartAccountWithSession.sendTransaction( - { - to: nftAddress, - data: encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [smartAccountAddress], - }), - }, - { - paymasterServiceData: { mode: PaymasterMode.SPONSORED }, - } -); - -const { success } = await mintWait(); -``` diff --git a/examples/INITIALISE_A_SMART_CONTRACT.md b/examples/INITIALISE_A_SMART_CONTRACT.md deleted file mode 100644 index 6b036e308..000000000 --- a/examples/INITIALISE_A_SMART_CONTRACT.md +++ /dev/null @@ -1,23 +0,0 @@ -### [Initialise a smartAccount](https://bcnmy.github.io/biconomy-client-sdk/functions/createSmartAccountClient.html) - -| Key | Description | -| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| [signer](https://bcnmy.github.io/biconomy-client-sdk/packages/account/docs/interfaces/SmartAccountSigner.html) | This signer will be used for signing userOps for any transactions you build. Will accept ethers.JsonRpcSigner as well as a viemWallet | -| [paymasterUrl](https://dashboard.biconomy.io) | You can pass in a paymasterUrl necessary for sponsoring transactions (retrieved from the biconomy dashboard) | -| [bundlerUrl](https://dashboard.biconomy.io) | You can pass in a bundlerUrl (retrieved from the biconomy dashboard) for sending transactions | - -```typescript -import { createSmartAccountClient } from "@biconomy/account"; -import { createWalletClient, http, createPublicClient } from "viem"; -import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; -import { mainnet as chain } from "viem/chains"; - -const account = privateKeyToAccount(generatePrivateKey()); -const signer = createWalletClient({ account, chain, transport: http() }); - -const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - paymasterUrl, -}); // Retrieve bundler and pymaster urls from dashboard -``` diff --git a/examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md b/examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md deleted file mode 100644 index d5eb9fdf8..000000000 --- a/examples/SEND_A_MULTI_TX_AND_PAY_GAS_WITH_TOKEN.md +++ /dev/null @@ -1,56 +0,0 @@ -### [Send a multi tx and pay gas with a token](https://bcnmy.github.io/biconomy-client-sdk/classes/NexusSmartAccount.html#getTokenFees) - -| Key | Description | -| -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | -| [buildUseropDto](https://bcnmy.github.io/biconomy-client-sdk/types/BuildUserOpOptions.html) | Options for building a userOp | -| [paymasterServiceData](https://bcnmy.github.io/biconomy-client-sdk/types/PaymasterUserOperationDto.html) | PaymasterOptions set in the buildUseropDto | - -```typescript -import { - encodeFunctionData, - parseAbi, - createWalletClient, - http, - createPublicClient, -} from "viem"; -import { createSmartAccountClient } from "@biconomy/account"; -import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; -import { mainnet as chain } from "viem/chains"; - -const account = privateKeyToAccount(generatePrivateKey()); -const signer = createWalletClient({ account, chain, transport: http() }); -const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - paymasterUrl, -}); // Retrieve bundler and pymaster urls from dashboard - -const preferredToken = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a"; // USDC - -const tx = { - to: nftAddress, - data: encodeFunctionData({ - abi: parseAbi(["function safeMint(address to) public"]), - functionName: "safeMint", - args: ["0x..."], - }), -}; - -const buildUseropDto = { - paymasterServiceData: { - mode: PaymasterMode.ERC20, - preferredToken, - }, -}; - -const { wait } = await smartAccount.sendTransaction( - [tx, tx] /* Mint twice */, - buildUseropDto -); - -const { - receipt: { transactionHash }, - userOpHash, - success, -} = await wait(); -``` diff --git a/examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md b/examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md deleted file mode 100644 index 43ef500cd..000000000 --- a/examples/SEND_SOME_ETH_WITH_SPONSORSHIP.md +++ /dev/null @@ -1,35 +0,0 @@ -### [Send some eth with sponsorship](https://bcnmy.github.io/biconomy-client-sdk/classes/NexusSmartAccount.html#sendTransaction) - -| Key | Description | -| --------------------------------------------------------------------------------- | -------------------------------------------------------------- | -| [oneOrManyTx](https://bcnmy.github.io/biconomy-client-sdk/types/Transaction.html) | Submit multiple or one transactions | -| [userOpReceipt](https://bcnmy.github.io/biconomy-client-sdk/types/UserOpReceipt) | Returned information about your tx, receipts, userOpHashes etc | - -```typescript -import { createSmartAccountClient } from "@biconomy/account"; -import { createWalletClient, http, createPublicClient } from "viem"; -import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; -import { mainnet as chain } from "viem/chains"; - -const account = privateKeyToAccount(generatePrivateKey()); -const signer = createWalletClient({ account, chain, transport: http() }); -const smartAccount = await createSmartAccountClient({ - signer, - bundlerUrl, - paymasterUrl, -}); // Retrieve bundler and paymaster urls from dashboard - -const oneOrManyTx = { to: "0x...", value: 1 }; - -const { wait } = await smartAccount.sendTransaction(oneOrManyTx, { - paymasterServiceData: { - mode: PaymasterMode.SPONSORED, - }, -}); - -const { - receipt: { transactionHash }, - userOpHash, - success, -} = await wait(); -``` diff --git a/package.json b/package.json index 37c9b20c2..724764957 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,9 @@ "typings": "./dist/_types/index.d.ts", "homepage": "https://biconomy.io", "sideEffects": false, - "name": "@biconomy/account", + "name": "@biconomy/sdk", "author": "Biconomy", - "version": "4.4.6", + "version": "0.0.1", "description": "SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.", "keywords": [ "erc-7579", @@ -57,13 +57,10 @@ "dev": "bun link && concurrently \"bun run esm:watch\" \"bun run cjs:watch\" \"bun run esm:watch:aliases\" \"bun run cjs:watch:aliases\"", "build": "bun run clean && bun run build:cjs && bun run build:esm && bun run build:types", "clean": "rimraf ./dist/_esm ./dist/_cjs ./dist/_types ./dist/tsconfig", - "test": "vitest dev -c ./tests/vitest.config.ts", - "playground": "bun run test -t=Playground --watch", - "test:readOnly": "bun run test read", - "test:watch": "bun run test --watch", - "test:watch:readOnly": "bun run test:readOnly --watch", - "test:coverage": "CI=true vitest -c ./tests/vitest.config.ts --coverage", - "test:ci": "CI=true vitest -c ./tests/vitest.config.ts", + "test": "vitest -c ./tests/vitest.config.ts", + "test:watch": "bun run test dev", + "playground": "RUN_PLAYGROUND=true vitest -c ./tests/vitest.config.ts -t=playground", + "playground:watch": "RUN_PLAYGROUND=true bun run test -t=playground --watch", "size": "size-limit", "docs": "typedoc --tsconfig ./tsconfig/tsconfig.esm.json", "docs:deploy": "bun run docs && gh-pages -d docs", @@ -76,7 +73,9 @@ "cjs:watch:aliases": "tsc-alias -p ./tsconfig/tsconfig.cjs.json --watch", "build:cjs": "tsc --project ./tsconfig/tsconfig.cjs.json && tsc-alias -p ./tsconfig/tsconfig.cjs.json && echo > ./dist/_cjs/package.json '{\"type\":\"commonjs\"}'", "build:esm": "tsc --project ./tsconfig/tsconfig.esm.json && tsc-alias -p ./tsconfig/tsconfig.esm.json && echo > ./dist/_esm/package.json '{\"type\": \"module\",\"sideEffects\":false}'", - "build:types": "tsc --project ./tsconfig/tsconfig.types.json && tsc-alias -p ./tsconfig/tsconfig.types.json" + "build:types": "tsc --project ./tsconfig/tsconfig.types.json && tsc-alias -p ./tsconfig/tsconfig.types.json", + "fetch:deployment": "bun run ./scripts/fetch:deployment.ts && bun run lint --apply-unsafe", + "fetch:deployment:raw": "bun run ./scripts/fetch:deployment.ts" }, "devDependencies": { "@biomejs/biome": "1.6.0", @@ -86,22 +85,30 @@ "@ethersproject/abi": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@ethersproject/wallet": "^5.7.0", + "@pimlico/alto": "^0.0.4", "@size-limit/esbuild-why": "^11", "@size-limit/preset-small-lib": "^11", "@types/bun": "latest", + "@types/yargs": "^17.0.33", "@vitest/coverage-v8": "^1.3.1", "buffer": "^6.0.3", "concurrently": "^8.2.2", "dotenv": "^16.4.5", - "ethers": "^6.12.0", + "ethers": "^6.13.2", + "execa": "^9.3.1", + "get-port": "^7.1.0", "gh-pages": "^6.1.1", + "nexus": "github:bcnmy/nexus#dev", + "prool": "^0.0.16", "rimraf": "^5.0.5", "simple-git-hooks": "^2.9.0", "size-limit": "^11", + "ts-node": "^10.9.2", "tsc-alias": "^1.8.8", "tslib": "^2.6.3", "typedoc": "^0.25.9", - "vitest": "^1.3.1" + "vitest": "^1.3.1", + "yargs": "^17.7.2" }, "peerDependencies": { "typescript": "^5", diff --git a/scripts/fetch:deployment.ts b/scripts/fetch:deployment.ts new file mode 100644 index 000000000..9c6c52139 --- /dev/null +++ b/scripts/fetch:deployment.ts @@ -0,0 +1,123 @@ +import fs from "node:fs" + +import { hideBin } from "yargs/helpers" +import yargs from "yargs/yargs" + +type FetchDetails = { + nexusDeploymentPath: string + chainName: string + forSrc: string[] +} +const { + nexusDeploymentPath = "../node_modules/nexus/deployments", + chainName = "anvil-55000", + forSrc = ["K1ValidatorFactory", "Nexus", "K1Validator"] +} = yargs(hideBin(process.argv)).argv as unknown as FetchDetails + +type DeployedContract = { + address: string +} + +export const getDeployments = async () => { + const relativePath = `${__dirname}/${nexusDeploymentPath}/${chainName}` + console.log("Fetching deployments from:", relativePath) + const files = fs.readdirSync(relativePath) + const deployedContracts: Record<string, DeployedContract> = {} + + const coreFiles: string[] = [] + const testFiles: string[] = [] + + for (const file of files) { + if (file.includes(".json")) { + const name = `${file.split(".")[0]}` + const jsonFileNameWithExtension = `${name}.json` + const contents = fs.readFileSync( + `${relativePath}/${jsonFileNameWithExtension}`, + "utf8" + ) + const { address, abi } = JSON.parse(contents) + + const isForCore = forSrc.includes(name) + if (isForCore) { + coreFiles.push(name) + } else { + testFiles.push(name) + } + + const tsAbiContent = `export const ${name}Abi = ${JSON.stringify( + abi, + null, + 2 + )} as const;\n` + + const tsAbiPath = isForCore + ? `${__dirname}/../src/__contracts/abi/${name}Abi.ts` + : `${__dirname}/../tests/src/__contracts/abi/${name}Abi.ts` + + fs.writeFileSync(tsAbiPath, tsAbiContent) + + deployedContracts[name] = { + address + } + } + } + + // Write ABI index file... + const abiIndexContent = `export * from "./EntryPointABI"\n${coreFiles + .map((file) => `export * from "./${file}Abi"`) + .join("\n")}` + + // Write test ABI index file for tests + const testAbiIndexContent = `${testFiles + .map((file) => `export * from "./${file}Abi"`) + .join("\n")}` + + // Write the ABIs + const abiIndexPath = `${__dirname}/../src/__contracts/abi/index.ts` + fs.writeFileSync(abiIndexPath, abiIndexContent) + + const testAbiIndexPath = `${__dirname}/../tests/src/__contracts/abi/index.ts` + fs.writeFileSync(testAbiIndexPath, testAbiIndexContent) + + // Write addresses to src folder + const writeAddressesPath = `${__dirname}/../src/__contracts/addresses.ts` + const writeAddressesPathTest = `${__dirname}/../tests/src/__contracts/mockAddresses.ts` + + const addressesContent = `// The contents of this folder is auto-generated. Please do not edit as your changes are likely to be overwritten\n + import type { Hex } from "viem"\nexport const addresses: Record<string, Hex> = ${JSON.stringify( + Object.keys(deployedContracts) + .filter((key) => coreFiles.includes(key)) + .reduce((acc, key) => { + acc[key] = deployedContracts[key].address + return acc + }, {}), + null, + 2 + )} as const;\nexport default addresses\n` + + const testAddressesContent = `// The contents of this folder is auto-generated. Please do not edit as your changes are likely to be overwritten\n + import type { Hex } from "viem"\nexport const mockAddresses: Record<string, Hex> = ${JSON.stringify( + Object.keys(deployedContracts) + .filter((key) => testFiles.includes(key)) + .reduce((acc, key) => { + acc[key] = deployedContracts[key].address + return acc + }, {}), + null, + 2 + )} as const;\nexport default mockAddresses\n` + + fs.writeFileSync(writeAddressesPath, addressesContent) + fs.writeFileSync(writeAddressesPathTest, testAddressesContent) +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +getDeployments() + .then(() => { + process.exit(0) + }) + .catch((error) => { + console.error(error) + process.exitCode = 1 + }) diff --git a/scripts/sendUserOperation.ts b/scripts/sendUserOperation.ts deleted file mode 100644 index 617d92985..000000000 --- a/scripts/sendUserOperation.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { privateKeyToAccount } from "viem/accounts" -import { getConfig } from "../tests/utils" -import { createWalletClient, http, parseEther } from "viem" -import { createK1ValidatorModule, createSmartAccountClient } from "../src" - -const { - chain, - chainId, - privateKey, - privateKeyTwo, - bundlerUrl, - } = getConfig() - - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - const recipient = accountTwo.address - - const [walletClient] = [ - createWalletClient({ - account, - chain, - transport: http() - }) - ] - - const smartAccount = await createSmartAccountClient({ - chainId, - signer: walletClient, - bundlerUrl, - }) - -const sendUserOperation = async () => { - const k1ValidatorModule = await createK1ValidatorModule(smartAccount.getSigner()) - - smartAccount.setActiveValidationModule(k1ValidatorModule); - - const transaction = { - to: recipient, // NFT address - data: "0x", - value: parseEther("0.0001") - } - console.log("Your smart account will be deployed at address, make sure it has some funds to pay for user ops: ", await smartAccount.getAddress()); - - const response = await smartAccount.sendTransaction([transaction]) - - const receipt = await response.wait() - console.log("Receipt: ", receipt) -} - -sendUserOperation(); - diff --git a/src/account/abi/EntryPointAbi.ts b/src/__contracts/abi/EntryPointABI.ts similarity index 99% rename from src/account/abi/EntryPointAbi.ts rename to src/__contracts/abi/EntryPointABI.ts index c803ad1c7..674ada997 100644 --- a/src/account/abi/EntryPointAbi.ts +++ b/src/__contracts/abi/EntryPointABI.ts @@ -1,4 +1,4 @@ -export const EntryPointAbi = [ +export const EntrypointAbi = [ { inputs: [ { internalType: "bool", name: "success", type: "bool" }, @@ -654,4 +654,4 @@ export const EntryPointAbi = [ type: "function" }, { stateMutability: "payable", type: "receive" } -] +] as const diff --git a/src/__contracts/abi/K1ValidatorAbi.ts b/src/__contracts/abi/K1ValidatorAbi.ts new file mode 100644 index 000000000..bcbbcfb98 --- /dev/null +++ b/src/__contracts/abi/K1ValidatorAbi.ts @@ -0,0 +1,244 @@ +export const K1ValidatorAbi = [ + { + inputs: [], + name: "ModuleAlreadyInitialized", + type: "error" + }, + { + inputs: [], + name: "NewOwnerIsContract", + type: "error" + }, + { + inputs: [], + name: "NoOwnerProvided", + type: "error" + }, + { + inputs: [], + name: "ZeroAddressNotAllowed", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "smartAccount", + type: "address" + } + ], + name: "isInitialized", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "typeID", + type: "uint256" + } + ], + name: "isModuleType", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "bytes32", + name: "hash", + type: "bytes32" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "isValidSignatureWithSender", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "onInstall", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + name: "onUninstall", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "smartAccountOwners", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256" + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + }, + { + internalType: "bytes32", + name: "accountGasLimits", + type: "bytes32" + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" + }, + { + internalType: "bytes32", + name: "gasFees", + type: "bytes32" + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + internalType: "struct PackedUserOperation", + name: "userOp", + type: "tuple" + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32" + } + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "version", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "pure", + type: "function" + } +] as const diff --git a/src/account/abi/K1ValidatorFactory.ts b/src/__contracts/abi/K1ValidatorFactoryAbi.ts similarity index 96% rename from src/account/abi/K1ValidatorFactory.ts rename to src/__contracts/abi/K1ValidatorFactoryAbi.ts index dea3c39c6..f501b0a06 100644 --- a/src/account/abi/K1ValidatorFactory.ts +++ b/src/__contracts/abi/K1ValidatorFactoryAbi.ts @@ -1,4 +1,4 @@ -export const BiconomyFactoryAbi = [ +export const K1ValidatorFactoryAbi = [ { inputs: [ { @@ -35,6 +35,11 @@ export const BiconomyFactoryAbi = [ name: "AlreadyInitialized", type: "error" }, + { + inputs: [], + name: "InnerCallFailed", + type: "error" + }, { inputs: [], name: "InvalidEntryPointAddress", @@ -224,22 +229,22 @@ export const BiconomyFactoryAbi = [ inputs: [ { internalType: "address", - name: "", + name: "eoaOwner", type: "address" }, { internalType: "uint256", - name: "", + name: "index", type: "uint256" }, { internalType: "address[]", - name: "", + name: "attesters", type: "address[]" }, { internalType: "uint8", - name: "", + name: "threshold", type: "uint8" } ], @@ -378,4 +383,4 @@ export const BiconomyFactoryAbi = [ stateMutability: "nonpayable", type: "function" } -] +] as const diff --git a/src/account/abi/SmartAccount.ts b/src/__contracts/abi/NexusAbi.ts similarity index 90% rename from src/account/abi/SmartAccount.ts rename to src/__contracts/abi/NexusAbi.ts index b459aca92..5acc0e953 100644 --- a/src/account/abi/SmartAccount.ts +++ b/src/__contracts/abi/NexusAbi.ts @@ -1,4 +1,4 @@ -export const NexusAccountAbi = [ +export const NexusAbi = [ { inputs: [ { @@ -17,7 +17,12 @@ export const NexusAccountAbi = [ }, { inputs: [], - name: "CannotRemoveLastValidator", + name: "CanNotRemoveLastValidator", + type: "error" + }, + { + inputs: [], + name: "EnableModeSigError", type: "error" }, { @@ -41,6 +46,11 @@ export const NexusAccountAbi = [ name: "FallbackAlreadyInstalledForSelector", type: "error" }, + { + inputs: [], + name: "FallbackCallTypeInvalid", + type: "error" + }, { inputs: [], name: "FallbackHandlerUninstallFailed", @@ -93,6 +103,11 @@ export const NexusAccountAbi = [ name: "InvalidImplementationAddress", type: "error" }, + { + inputs: [], + name: "InvalidInput", + type: "error" + }, { inputs: [ { @@ -211,6 +226,11 @@ export const NexusAccountAbi = [ name: "NexusInitializationFailed", type: "error" }, + { + inputs: [], + name: "NoValidatorInstalled", + type: "error" + }, { inputs: [], name: "UnauthorizedCallContext", @@ -265,6 +285,30 @@ export const NexusAccountAbi = [ name: "UpgradeFailed", type: "error" }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address" + } + ], + name: "ValidatorNotInstalled", + type: "error" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "contract IERC7484", + name: "registry", + type: "address" + } + ], + name: "ERC7484RegistryConfigured", + type: "event" + }, { anonymous: false, inputs: [ @@ -374,9 +418,28 @@ export const NexusAccountAbi = [ inputs: [ { indexed: false, - internalType: "uint256", - name: "batchExecutionindex", - type: "uint256" + internalType: "bytes", + name: "callData", + type: "bytes" + }, + { + indexed: false, + internalType: "bytes", + name: "result", + type: "bytes" + } + ], + name: "TryDelegateCallUnsuccessful", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes", + name: "callData", + type: "bytes" }, { indexed: false, @@ -863,24 +926,41 @@ export const NexusAccountAbi = [ type: "function" }, { - inputs: [ - { - internalType: "bytes32", - name: "hash", - type: "bytes32" - } - ], - name: "replaySafeHash", + inputs: [], + name: "registry", outputs: [ { - internalType: "bytes32", + internalType: "contract IERC7484", name: "", - type: "bytes32" + type: "address" } ], stateMutability: "view", type: "function" }, + { + inputs: [ + { + internalType: "contract IERC7484", + name: "newRegistry", + type: "address" + }, + { + internalType: "address[]", + name: "attesters", + type: "address[]" + }, + { + internalType: "uint8", + name: "threshold", + type: "uint8" + } + ], + name: "setRegistry", + outputs: [], + stateMutability: "payable", + type: "function" + }, { inputs: [ { @@ -919,6 +999,19 @@ export const NexusAccountAbi = [ stateMutability: "view", type: "function" }, + { + inputs: [], + name: "supportsNestedTypedDataSign", + outputs: [ + { + internalType: "bytes32", + name: "result", + type: "bytes32" + } + ], + stateMutability: "pure", + type: "function" + }, { inputs: [ { @@ -1011,7 +1104,7 @@ export const NexusAccountAbi = [ } ], internalType: "struct PackedUserOperation", - name: "userOp", + name: "op", type: "tuple" }, { @@ -1058,4 +1151,4 @@ export const NexusAccountAbi = [ stateMutability: "payable", type: "receive" } -] +] as const diff --git a/src/__contracts/abi/index.ts b/src/__contracts/abi/index.ts new file mode 100644 index 000000000..d0c8f1558 --- /dev/null +++ b/src/__contracts/abi/index.ts @@ -0,0 +1,4 @@ +export * from "./EntryPointABI" +export * from "./NexusAbi" +export * from "./K1ValidatorAbi" +export * from "./K1ValidatorFactoryAbi" diff --git a/src/__contracts/addresses.ts b/src/__contracts/addresses.ts new file mode 100644 index 000000000..8950437ce --- /dev/null +++ b/src/__contracts/addresses.ts @@ -0,0 +1,9 @@ +// The contents of this folder is auto-generated. Please do not edit as your changes are likely to be overwritten + +import type { Hex } from "viem" +export const addresses: Record<string, Hex> = { + Nexus: "0x776d63154D2aa9256D72C420416c930F3B735464", + K1Validator: "0xd98238BBAeA4f91683d250003799EAd31d7F5c55", + K1ValidatorFactory: "0x8025afaD10209b8bEF3A3C94684AaE4D309c9996" +} as const +export default addresses diff --git a/src/__contracts/index.ts b/src/__contracts/index.ts new file mode 100644 index 000000000..eae2c5a65 --- /dev/null +++ b/src/__contracts/index.ts @@ -0,0 +1,36 @@ +import type { Hex } from "viem" +import { EntrypointAbi, K1ValidatorAbi, K1ValidatorFactoryAbi } from "./abi" +import addresses from "./addresses" + +export const ENTRYPOINT_SIMULATIONS: Hex = + "0x74Cb5e4eE81b86e70f9045036a1C5477de69eE87" +export const ENTRYPOINT_ADDRESS: Hex = + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + +const entryPoint = { + address: ENTRYPOINT_ADDRESS, + abi: EntrypointAbi +} as const + +const entryPointSimulations = { + address: ENTRYPOINT_SIMULATIONS +} as const + +const k1ValidatorFactory = { + address: addresses.K1ValidatorFactory, + abi: K1ValidatorFactoryAbi +} as const + +const k1Validator = { + address: addresses.K1Validator, + abi: K1ValidatorAbi +} as const + +export const contracts = { + entryPoint, + entryPointSimulations, + k1ValidatorFactory, + k1Validator +} as const + +export default contracts diff --git a/src/account/BaseSmartContractAccount.ts b/src/account/BaseSmartContractAccount.ts index 603f56f83..6cc829f72 100644 --- a/src/account/BaseSmartContractAccount.ts +++ b/src/account/BaseSmartContractAccount.ts @@ -9,15 +9,12 @@ import { getContract, trim } from "viem" -import { EntryPointAbi } from "./abi/EntryPointAbi.js" -import { Logger, type SmartAccountSigner, getChain } from "./index.js" -import { - DEFAULT_ENTRYPOINT_ADDRESS, - type MODE_MODULE_ENABLE, - type MODE_VALIDATION -} from "./utils/Constants.js" +import { EntrypointAbi } from "../__contracts/abi/EntryPointABI.js" +import contracts from "../__contracts/index.js" +import { Logger, type SmartAccountSigner } from "./index.js" +import type { MODE_MODULE_ENABLE, MODE_VALIDATION } from "./utils/Constants.js" import type { - BasSmartContractAccountProps, + BaseSmartContractAccountProps, BatchUserOperationCallData, ISmartContractAccount, SignTypedDataParams, @@ -46,24 +43,22 @@ export abstract class BaseSmartContractAccount< protected signer: TSigner protected entryPoint: GetContractReturnType< - typeof EntryPointAbi, + typeof contracts.entryPoint.abi, PublicClient > protected entryPointAddress: Address - readonly rpcProvider: PublicClient + public publicClient: PublicClient - constructor(params: BasSmartContractAccountProps) { + constructor(params: BaseSmartContractAccountProps) { this.entryPointAddress = - params.entryPointAddress ?? DEFAULT_ENTRYPOINT_ADDRESS + params.entryPointAddress ?? contracts.entryPoint.address - this.rpcProvider = createPublicClient({ - chain: params.viemChain ?? params.customChain ?? getChain(params.chainId), - transport: http( - params.rpcUrl || getChain(params.chainId).rpcUrls.default.http[0] - ) - }) as PublicClient + this.publicClient = createPublicClient({ + chain: params.chain, + transport: http(params.rpcUrl) + }) this.accountAddress = params.accountAddress this.factoryAddress = params.factoryAddress @@ -72,8 +67,8 @@ export abstract class BaseSmartContractAccount< this.entryPoint = getContract({ address: this.entryPointAddress, - abi: EntryPointAbi, - client: this.rpcProvider as PublicClient + abi: EntrypointAbi, + client: this.publicClient as PublicClient }) } @@ -206,16 +201,21 @@ export abstract class BaseSmartContractAccount< validationMode?: typeof MODE_VALIDATION | typeof MODE_MODULE_ENABLE ): Promise<bigint> + private async _isDeployed(): Promise<boolean> { + const contractCode = await this.publicClient.getBytecode({ + address: await this.getAddress() + }) + return (contractCode?.length ?? 0) > 2 + } + async getInitCode(): Promise<Hex> { if (this.deploymentState === DeploymentState.DEPLOYED) { return "0x" } - const contractCode = await this.rpcProvider.getBytecode({ - address: await this.getAddress() - }) + const isDeployed = await this._isDeployed() - if ((contractCode?.length ?? 0) > 2) { + if (isDeployed) { this.deploymentState = DeploymentState.DEPLOYED return "0x" } @@ -289,9 +289,13 @@ export abstract class BaseSmartContractAccount< ? DeploymentState.DEPLOYED : DeploymentState.NOT_DEPLOYED } + if (this.deploymentState === DeploymentState.NOT_DEPLOYED) { + if (await this._isDeployed()) { + this.deploymentState = DeploymentState.DEPLOYED + } + } return this.deploymentState } - /** * https://eips.ethereum.org/EIPS/eip-4337#first-time-account-creation * The initCode field (if non-zero length) is parsed as a 20-byte address, @@ -310,7 +314,7 @@ export abstract class BaseSmartContractAccount< protected async getImplementationAddress(): Promise<"0x0" | Address> { const accountAddress = await this.getAddress() - const storage = await this.rpcProvider.getStorageAt({ + const storage = await this.publicClient.getStorageAt({ address: accountAddress, // This is the default slot for the implementation address for Proxies slot: "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index 913386047..5798385f5 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -1,6 +1,5 @@ -import { ethers } from "ethers" import { - http, + type AbiParameter, type Address, type GetContractReturnType, type Hash, @@ -9,7 +8,6 @@ import { type WalletClient, concat, concatHex, - createPublicClient, decodeFunctionData, encodeAbiParameters, encodeFunctionData, @@ -18,13 +16,16 @@ import { getAddress, getContract, keccak256, + pad, parseAbi, parseAbiParameters, - toBytes + toBytes, + toHex } from "viem" +import contracts from "../__contracts" +import { NexusAbi } from "../__contracts/abi" import { Bundler, - Executions, type GetUserOperationGasPriceReturnType, type UserOpReceipt, type UserOpResponse @@ -52,15 +53,16 @@ import { PaymasterMode, type SponsorUserOperationDto } from "../paymaster/index.js" -import { BaseSmartContractAccount } from "./BaseSmartContractAccount.js" -import { NexusAccountAbi } from "./abi/SmartAccount.js" +import { + BaseSmartContractAccount, + DeploymentState +} from "./BaseSmartContractAccount.js" import { Logger, type SmartAccountSigner, type StateOverrideSet, type UserOperationStruct, - convertSigner, - getChain + convertSigner } from "./index.js" import { GENERIC_FALLBACK_SELECTOR, @@ -69,8 +71,6 @@ import { } from "./utils/Constants.js" import { ADDRESS_ZERO, - DEFAULT_BICONOMY_FACTORY_ADDRESS, - DEFAULT_ENTRYPOINT_ADDRESS, ERC20_ABI, ERROR_MESSAGES, MAGIC_BYTES, @@ -80,6 +80,7 @@ import { import type { BalancePayload, BiconomyTokenPaymasterRequest, + BigNumberish, BuildUserOpOptions, CounterFactualAddressParam, NexusSmartAccountConfig, @@ -91,31 +92,19 @@ import type { TransferOwnershipCompatibleModule, WithdrawalRequest } from "./utils/Types.js" -import { - addressEquals, - isNullOrUndefined, - isValidRpcUrl, - packUserOp -} from "./utils/Utils.js" +import { addressEquals, isNullOrUndefined, packUserOp } from "./utils/Utils.js" -// type UserOperationKey = keyof UserOperationStruct export class NexusSmartAccount extends BaseSmartContractAccount { - // private sessionData?: ModuleInfo - private index: bigint private chainId: number - private provider: PublicClient - paymaster?: IPaymaster bundler?: IBundler - publicClient!: PublicClient - private accountContract?: GetContractReturnType< - typeof NexusAccountAbi, + typeof NexusAbi, PublicClient | WalletClient > @@ -131,46 +120,33 @@ export class NexusSmartAccount extends BaseSmartContractAccount { installedExecutors: BaseExecutionModule[] = [] activeExecutionModule?: BaseExecutionModule + k1ValidatorAddress: Address private constructor( readonly nexusSmartAccountConfig: NexusSmartAccountConfigConstructorProps ) { + const resolvedEntryPointAddress = + (nexusSmartAccountConfig.entryPointAddress as Hex) ?? + contracts.entryPoint.address + super({ ...nexusSmartAccountConfig, - chain: - nexusSmartAccountConfig.viemChain ?? - nexusSmartAccountConfig.customChain ?? - getChain(nexusSmartAccountConfig.chainId), - rpcClient: - nexusSmartAccountConfig.rpcUrl || - getChain(nexusSmartAccountConfig.chainId).rpcUrls.default.http[0], - entryPointAddress: - (nexusSmartAccountConfig.entryPointAddress as Hex) ?? - DEFAULT_ENTRYPOINT_ADDRESS, + entryPointAddress: resolvedEntryPointAddress, accountAddress: (nexusSmartAccountConfig.accountAddress as Hex) ?? undefined, - factoryAddress: - nexusSmartAccountConfig.factoryAddress ?? - DEFAULT_BICONOMY_FACTORY_ADDRESS + factoryAddress: nexusSmartAccountConfig.factoryAddress }) - // this.sessionData = nexusSmartAccountConfig.sessionData + this.k1ValidatorAddress = nexusSmartAccountConfig.k1ValidatorAddress + const chain = nexusSmartAccountConfig.chain this.defaultValidationModule = nexusSmartAccountConfig.defaultValidationModule this.activeValidationModule = nexusSmartAccountConfig.activeValidationModule this.index = nexusSmartAccountConfig.index ?? 0n - this.chainId = nexusSmartAccountConfig.chainId + this.chainId = chain.id this.bundler = nexusSmartAccountConfig.bundler - this.publicClient = createPublicClient({ - chain: getChain(nexusSmartAccountConfig.chainId), - transport: http() - }) - - // this.implementationAddress = - // nexusSmartAccountConfig.implementationAddress ?? - // (BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION.V2_0_0 as Hex) if (nexusSmartAccountConfig.paymasterUrl) { this.paymaster = new Paymaster({ @@ -178,7 +154,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { }) } else if (nexusSmartAccountConfig.biconomyPaymasterApiKey) { this.paymaster = new Paymaster({ - paymasterUrl: `https://paymaster.biconomy.io/api/v1/${nexusSmartAccountConfig.chainId}/${nexusSmartAccountConfig.biconomyPaymasterApiKey}` + paymasterUrl: `https://paymaster.biconomy.io/api/v1/${nexusSmartAccountConfig.chain.id}/${nexusSmartAccountConfig.biconomyPaymasterApiKey}` }) } else { this.paymaster = nexusSmartAccountConfig.paymaster @@ -186,15 +162,6 @@ export class NexusSmartAccount extends BaseSmartContractAccount { this.bundler = nexusSmartAccountConfig.bundler - // const defaultFallbackHandlerAddress = - // this.factoryAddress === DEFAULT_BICONOMY_FACTORY_ADDRESS - // ? DEFAULT_FALLBACK_HANDLER_ADDRESS - // : nexusSmartAccountConfig.defaultFallbackHandler - // if (!defaultFallbackHandlerAddress) { - // throw new Error("Default Fallback Handler address is not provided") - // } - // this.defaultFallbackHandlerAddress = defaultFallbackHandlerAddress - // Added bang operator to avoid null check as the constructor have these params as optional this.defaultValidationModule = // biome-ignore lint/style/noNonNullAssertion: <explanation> @@ -202,22 +169,6 @@ export class NexusSmartAccount extends BaseSmartContractAccount { this.activeValidationModule = // biome-ignore lint/style/noNonNullAssertion: <explanation> nexusSmartAccountConfig.activeValidationModule! - - this.provider = createPublicClient({ - chain: - nexusSmartAccountConfig.viemChain ?? - nexusSmartAccountConfig.customChain ?? - getChain(nexusSmartAccountConfig.chainId), - transport: http( - nexusSmartAccountConfig.rpcUrl || - getChain(nexusSmartAccountConfig.chainId).rpcUrls.default.http[0] - ) - }) - - // this.scanForUpgradedAccountsFromV1 = - // nexusSmartAccountConfig.scanForUpgradedAccountsFromV1 ?? false - // this.maxIndexForScan = nexusSmartAccountConfig.maxIndexForScan ?? 10n - // this.getAccountAddress() } /** @@ -256,62 +207,46 @@ export class NexusSmartAccount extends BaseSmartContractAccount { public static async create( nexusSmartAccountConfig: NexusSmartAccountConfig ): Promise<NexusSmartAccount> { - let chainId = nexusSmartAccountConfig.chainId - let rpcUrl = nexusSmartAccountConfig.rpcUrl let resolvedSmartAccountSigner!: SmartAccountSigner + const defaultedRpcUrl = + nexusSmartAccountConfig.rpcUrl ?? + nexusSmartAccountConfig.chain.rpcUrls.default.http[0] + + const defaultedEntryPointAddress = + (nexusSmartAccountConfig.entryPointAddress ?? + contracts.entryPoint.address) as Hex // Signer needs to be initialised here before defaultValidationModule is set if (nexusSmartAccountConfig.signer) { const signerResult = await convertSigner( nexusSmartAccountConfig.signer, - !!chainId, - rpcUrl + nexusSmartAccountConfig.rpcUrl ) - if (!chainId && !!signerResult.chainId) { - chainId = signerResult.chainId - } - if (!rpcUrl && !!signerResult.rpcUrl) { - if (isValidRpcUrl(signerResult.rpcUrl)) { - rpcUrl = signerResult.rpcUrl - } - } resolvedSmartAccountSigner = signerResult.signer } - // @note Skipped this check untill we have our Bundler ready for EP V7 - // if (!chainId) { - // Get it from bundler - // if (nexusSmartAccountConfig.bundlerUrl) { - // chainId = extractChainIdFromBundlerUrl( - // nexusSmartAccountConfig.bundlerUrl - // ) - // } else if (nexusSmartAccountConfig.bundler) { - // const bundlerUrlFromBundler = - // nexusSmartAccountConfig.bundler.getBundlerUrl() - // chainId = extractChainIdFromBundlerUrl(bundlerUrlFromBundler) - // } - // } - if (!chainId) { - throw new Error("chainId required") - } const bundler: IBundler = nexusSmartAccountConfig.bundler ?? new Bundler({ // biome-ignore lint/style/noNonNullAssertion: always required bundlerUrl: nexusSmartAccountConfig.bundlerUrl!, - chainId, - customChain: - nexusSmartAccountConfig.viemChain ?? - nexusSmartAccountConfig.customChain ?? - getChain(chainId) + chain: nexusSmartAccountConfig.chain }) + let defaultValidationModule = nexusSmartAccountConfig.defaultValidationModule - // @note If no module is provided, we will use K1_VALIDATOR as default + const k1ValidatorAddress = + nexusSmartAccountConfig.k1ValidatorAddress ?? + (contracts.k1Validator.address as Hex) + const factoryAddress = + nexusSmartAccountConfig.factoryAddress ?? + (contracts.k1ValidatorFactory.address as Hex) + if (!defaultValidationModule) { const newModule = await createK1ValidatorModule( - resolvedSmartAccountSigner + resolvedSmartAccountSigner, + k1ValidatorAddress ) defaultValidationModule = newModule as K1ValidatorModule } @@ -326,47 +261,35 @@ export class NexusSmartAccount extends BaseSmartContractAccount { const config: NexusSmartAccountConfigConstructorProps = { ...nexusSmartAccountConfig, + factoryAddress, + k1ValidatorAddress, defaultValidationModule, activeValidationModule, - chainId, + rpcUrl: defaultedRpcUrl, bundler, signer: resolvedSmartAccountSigner, - rpcUrl + entryPointAddress: defaultedEntryPointAddress } - // @note Skipped this check untill we have our Bundler ready for EP V7 - // We check if chain ids match (skip this if chainId is passed by in the config) - // This check is at the end of the function for cases when the signer is not passed in the config but a validation modules is and we get the signer from the validation module in this case - // if (!nexusSmartAccountConfig.chainId) { - // await compareChainIds( - // nexusSmartAccountConfig.signer || resolvedSmartAccountSigner, - // config, - // false - // ) - // } - - return new NexusSmartAccount(config) + const smartAccount = new NexusSmartAccount(config) + await smartAccount.getDeploymentState() + return smartAccount } - // Calls the getCounterFactualAddress override async getAddress(params?: CounterFactualAddressParam): Promise<Hex> { - if (this.accountAddress == null) { - // means it needs deployment - this.accountAddress = await this.getCounterFactualAddress(params) - } - return this.accountAddress - } - - // Calls the getCounterFactualAddress - async getAccountAddress( - params?: CounterFactualAddressParam - ): Promise<`0x${string}`> { - if (this.accountAddress == null || this.accountAddress === undefined) { - // means it needs deployment - this.accountAddress = await this.getCounterFactualAddress(params) + if (isNullOrUndefined(this.accountAddress)) { + const signerAddress = await this.signer.getAddress() + const index = params?.index ?? this.index + this.accountAddress = (await this.publicClient.readContract({ + address: this.factoryAddress, + abi: contracts.k1ValidatorFactory.abi, + functionName: "computeAccountAddress", + args: [signerAddress, index, [], 0] + })) as Hex } return this.accountAddress } + public getAccountAddress = this.getAddress /** * Returns an upper estimate for the gas spent on a specific user operation @@ -393,13 +316,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, paymasterUrl }); // Retrieve bundler/paymaster url from dashboard * const encodedCall = encodeFunctionData({ - * abi: parseAbi(["function safeMint(address to) public"]), - * functionName: "safeMint", + * abi: CounterAbi, + * functionName: "incrementNumber", * args: ["0x..."], * }); * * const tx = { - * to: nftAddress, + * to: mockAddresses.Counter, * data: encodedCall * } * @@ -493,7 +416,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { public async getBalances( addresses?: Array<Hex> ): Promise<Array<BalancePayload>> { - const accountAddress = await this.getAccountAddress() + const accountAddress = await this.getAddress() const result: BalancePayload[] = [] if (addresses) { @@ -501,7 +424,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { getContract({ address, abi: parseAbi(ERC20_ABI), - client: this.provider + client: this.publicClient }) ) @@ -527,7 +450,9 @@ export class NexusSmartAccount extends BaseSmartContractAccount { ) } - const balance = await this.provider.getBalance({ address: accountAddress }) + const balance = await this.publicClient.getBalance({ + address: accountAddress + }) result.push({ amount: balance, @@ -587,8 +512,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { defaultRecipient?: Hex | null, buildUseropDto?: BuildUserOpOptions ): Promise<UserOpResponse> { - const accountAddress = - this.accountAddress ?? (await this.getAccountAddress()) + const accountAddress = this.accountAddress ?? (await this.getAddress()) if ( !defaultRecipient && @@ -646,7 +570,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { // get eth balance if not present in withdrawal requests const nativeTokenAmountToWithdraw = nativeTokenRequest?.amount ?? - (await this.provider.getBalance({ address: accountAddress })) + (await this.publicClient.getBalance({ address: accountAddress })) txs.push({ to: (nativeTokenRequest?.recipient ?? defaultRecipient) as Hex, @@ -657,86 +581,20 @@ export class NexusSmartAccount extends BaseSmartContractAccount { return this.sendTransaction(txs, buildUseropDto) } - /** - * Return the account's address. This value is valid even before deploying the contract. - */ - async getCounterFactualAddress( - params?: CounterFactualAddressParam - ): Promise<Hex> { - const validationModule = - params?.validationModule ?? this.defaultValidationModule - const index = params?.index ?? this.index - - // @note Skipped this check untill we have our implementation of V2 to V3 (Nexus) upgrade - // const maxIndexForScan = params?.maxIndexForScan ?? this.maxIndexForScan - // // Review: default behavior - // const scanForUpgradedAccountsFromV1 = - // params?.scanForUpgradedAccountsFromV1 ?? - // this.scanForUpgradedAccountsFromV1 - - // if it's intended to detect V1 upgraded accounts - // if (scanForUpgradedAccountsFromV1) { - // const eoaSigner = await validationModule.getSigner() - // const eoaAddress = (await eoaSigner.getAddress()) as Hex - // const moduleAddress = validationModule.getAddress() as Hex - // const moduleSetupData = (await validationModule.getInitData()) as Hex - // const queryParams = { - // eoaAddress, - // index, - // moduleAddress, - // moduleSetupData, - // maxIndexForScan - // } - // const accountAddress = await this.getV1AccountsUpgradedToV2(queryParams) - // if (accountAddress !== ADDRESS_ZERO) { - // return accountAddress - // } - // } - - const counterFactualAddressV2 = await this.getCounterFactualAddressV3({ - validationModule, - index - }) - return counterFactualAddressV2 - } - - private async getCounterFactualAddressV3( - params?: CounterFactualAddressParam - ): Promise<Hex> { - const index = params?.index ?? this.index - - try { - // TODO: Improve this by computing address off-chain instead of making rpc call - // https://viem.sh/docs/utilities/getContractAddress#opcode-optional - const counterFactualAddress = await this.publicClient.readContract({ - address: this.factoryAddress, - abi: parseAbi([ - "function computeAccountAddress(address, uint256, address[], uint8) external view returns (address expectedAddress)" - ]), - functionName: "computeAccountAddress", - args: [await this.signer.getAddress(), index, [], 0] - }) - - return counterFactualAddress - } catch (e) { - throw new Error(`Failed to get counterfactual address, ${e}`) - } - } - async _getAccountContract(): Promise< - GetContractReturnType<typeof NexusAccountAbi, PublicClient> + GetContractReturnType<typeof NexusAbi, PublicClient> > { if (await this.isAccountDeployed()) { - if (this.accountContract == null) { + if (!this.accountContract) { this.accountContract = getContract({ address: await this.getAddress(), - abi: NexusAccountAbi, - client: this.provider as PublicClient + abi: NexusAbi, + client: this.publicClient as PublicClient }) } return this.accountContract } - throw new Error("Account is not deployed") + throw new Error(ERROR_MESSAGES.ACCOUNT_NOT_DEPLOYED) } isActiveValidationModuleDefined(): boolean { @@ -823,7 +681,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { // address: ADDRESS_RESOLVER_ADDRESS, // abi: AccountResolverAbi, // client: { - // public: this.provider as PublicClient + // public: this.publicClient as PublicClient // } // }) // // Note: depending on moduleAddress and moduleSetupData passed call this. otherwise could call resolveAddresses() @@ -860,18 +718,12 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * Return the value to put into the "initCode" field, if the account is not yet deployed. * This value holds the "factory" address, followed by this account's information */ - async getAccountInitCode(): Promise<Hex> { + public override async getAccountInitCode(): Promise<Hex> { this.isDefaultValidationModuleDefined() if (await this.isAccountDeployed()) return "0x" - const factoryData = encodeFunctionData({ - abi: parseAbi([ - "function createAccount(address eoaOwner, uint256 index) external payable returns (address payable)" - ]), - functionName: "createAccount", - args: [await this.signer.getAddress(), this.index] - }) + const factoryData = (await this.getFactoryData()) as Hex return concatHex([this.factoryAddress, factoryData]) } @@ -910,28 +762,32 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * @returns encoded data for executeBatch function */ async encodeExecuteBatch(transactions: Transaction[]): Promise<Hex> { - // return accountContract.interface.encodeFunctionData("execute_ncC", [to, value, data]) as Hex; - const mode = EXECUTE_BATCH - // TODO: Use viem instead of ethers - const execs: { target: Hex; value: bigint; callData: Hex }[] = [] - for (const tx of transactions) { - execs.push({ - target: tx.to as Hex, - callData: (tx.data ?? "0x") as Hex, - value: BigInt(tx.value ?? 0n) - }) + const executionAbiParams: AbiParameter = { + type: "tuple[]", + components: [ + { name: "target", type: "address" }, + { name: "value", type: "uint256" }, + { name: "callData", type: "bytes" } + ] } - const executionCalldataPrep = ethers.AbiCoder.defaultAbiCoder().encode( - [Executions], - [execs] - ) as Hex + + const executions = transactions.map((tx) => ({ + target: tx.to, + callData: tx.data ?? "0x", + value: BigInt(tx.value ?? 0n) + })) + + const executionCalldataPrep = encodeAbiParameters( + [executionAbiParams], + [executions] + ) return encodeFunctionData({ abi: parseAbi([ "function execute(bytes32 mode, bytes calldata executionCalldata) external" ]), functionName: "execute", - args: [mode, executionCalldataPrep] + args: [EXECUTE_BATCH, executionCalldataPrep] }) } @@ -939,7 +795,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { async getDummySignatures(): Promise<Hex> { // const params = { ...(this.sessionData ? this.sessionData : {}), ..._params } this.isActiveValidationModuleDefined() - return (this.activeValidationModule.getDummySignature()) as Hex + return this.activeValidationModule.getDummySignature() as Hex } // TODO: review this @@ -1001,78 +857,6 @@ export class NexusSmartAccount extends BaseSmartContractAccount { ) } - // public async getPaymasterUserOp( - // userOp: Partial<UserOperationStruct>, - // paymasterServiceData: PaymasterUserOperationDto - // ): Promise<Partial<UserOperationStruct>> { - // if (paymasterServiceData.mode === PaymasterMode.SPONSORED) { - // return this.getPaymasterAndData(userOp, paymasterServiceData) - // } - // if (paymasterServiceData.mode === PaymasterMode.ERC20) { - // if (paymasterServiceData?.feeQuote) { - // const { feeQuote, spender, maxApproval = false } = paymasterServiceData - // Logger.log("there is a feeQuote: ", JSON.stringify(feeQuote, null, 2)) - // if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED) - // if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH) - // if ( - // paymasterServiceData.skipPatchCallData && - // paymasterServiceData.skipPatchCallData === true - // ) { - // return this.getPaymasterAndData(userOp, { - // ...paymasterServiceData, - // feeTokenAddress: feeQuote.tokenAddress - // }) - // } - // const partialUserOp = await this.buildTokenPaymasterUserOp(userOp, { - // ...paymasterServiceData, - // spender, - // maxApproval, - // feeQuote - // }) - // return this.getPaymasterAndData(partialUserOp, { - // ...paymasterServiceData, - // feeTokenAddress: feeQuote.tokenAddress, - // calculateGasLimits: paymasterServiceData.calculateGasLimits ?? true // Always recommended and especially when using token paymaster - // }) - // } - // if (paymasterServiceData?.preferredToken) { - // const { preferredToken } = paymasterServiceData - // Logger.log("there is a preferred token: ", preferredToken) - // const feeQuotesResponse = await this.getPaymasterFeeQuotesOrData( - // userOp, - // paymasterServiceData - // ) - // const spender = feeQuotesResponse.tokenPaymasterAddress - // const feeQuote = feeQuotesResponse.feeQuotes?.[0] - // if (!spender) throw new Error(ERROR_MESSAGES.SPENDER_REQUIRED) - // if (!feeQuote) throw new Error(ERROR_MESSAGES.FAILED_FEE_QUOTE_FETCH) - // return this.getPaymasterUserOp(userOp, { - // ...paymasterServiceData, - // feeQuote, - // spender - // }) // Recursively call getPaymasterUserOp with the feeQuote - // } - // Logger.log( - // "ERC20 mode without feeQuote or preferredToken provided. Passing through unchanged." - // ) - // return userOp - // } - // throw new Error("Invalid paymaster mode") - // } - - // private async getPaymasterAndData( - // userOp: Partial<UserOperationStruct>, - // paymasterServiceData: PaymasterUserOperationDto - // ): Promise<Partial<UserOperationStruct>> { - // const paymaster = this - // .paymaster as IHybridPaymaster<PaymasterUserOperationDto> - // const paymasterData = await paymaster.getPaymasterAndData( - // userOp, - // paymasterServiceData - // ) - // return { ...userOp, ...paymasterData } - // } - private async getPaymasterFeeQuotesOrData( userOp: Partial<UserOperationStruct>, feeQuotesOrData: FeeQuotesOrDataDto @@ -1112,13 +896,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard * const encodedCall = encodeFunctionData({ - * abi: parseAbi(["function safeMint(address to) public"]), - * functionName: "safeMint", + * abi: CounterAbi, + * functionName: "incrementNumber", * args: ["0x..."], * }); * * const transaction = { - * to: nftAddress, + * to: mockAddresses.Counter, * data: encodedCall * } * @@ -1189,7 +973,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { { data: "0x", value: BigInt(0), - to: await this.getAccountAddress() + to: await this.getAddress() }, { paymasterServiceData: { mode: PaymasterMode.ERC20 } @@ -1241,13 +1025,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard * const encodedCall = encodeFunctionData({ - * abi: parseAbi(["function safeMint(address to) public"]), - * functionName: "safeMint", + * abi: CounterAbi, + * functionName: "incrementNumber", * args: ["0x..."], * }); * * const transaction = { - * to: nftAddress, + * to: mockAddresses.Counter, * data: encodedCall * } * @@ -1257,16 +1041,12 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * const { success, receipt } = await wait(); * */ - async sendUserOp( - userOp: Partial<UserOperationStruct> - ): Promise<UserOpResponse> { - // biome-ignore lint/performance/noDelete: <explanation> - delete userOp.signature - const userOperation = await this.signUserOp(userOp) - - const bundlerResponse = await this.sendSignedUserOp(userOperation) - - return bundlerResponse + async sendUserOp({ + signature, + ...userOpWithoutSignature + }: Partial<UserOperationStruct>): Promise<UserOpResponse> { + const userOperation = await this.signUserOp(userOpWithoutSignature) + return await this.sendSignedUserOp(userOperation) } /** @@ -1289,12 +1069,37 @@ export class NexusSmartAccount extends BaseSmartContractAccount { // ] // this.validateUserOp(userOp, requiredFields) if (!this.bundler) throw new Error("Bundler is not provided") - // Logger.warn( - // "userOp being sent to the bundler", - // JSON.stringify(userOp, null, 2) - // ) - const bundlerResponse = await this.bundler.sendUserOp(userOp) - return bundlerResponse + return await this.bundler.sendUserOp(userOp) + } + + /** + * Packs gas values into the format required by PackedUserOperation. + * @param callGasLimit Call gas limit. + * @param verificationGasLimit Verification gas limit. + * @param maxFeePerGas Maximum fee per gas. + * @param maxPriorityFeePerGas Maximum priority fee per gas. + * @returns An object containing packed gasFees and accountGasLimits. + */ + public packGasValues( + callGasLimit: BigNumberish, + verificationGasLimit: BigNumberish, + maxFeePerGas: BigNumberish, + maxPriorityFeePerGas: BigNumberish + ) { + const gasFees = concat([ + pad(toHex(maxPriorityFeePerGas ?? 0n), { + size: 16 + }), + pad(toHex(maxFeePerGas ?? 0n), { size: 16 }) + ]) + const accountGasLimits = concat([ + pad(toHex(verificationGasLimit ?? 0n), { + size: 16 + }), + pad(toHex(callGasLimit ?? 0n), { size: 16 }) + ]) + + return { gasFees, accountGasLimits } } async getUserOpHash(userOp: Partial<UserOperationStruct>): Promise<Hex> { @@ -1312,24 +1117,16 @@ export class NexusSmartAccount extends BaseSmartContractAccount { stateOverrideSet?: StateOverrideSet ): Promise<Partial<UserOperationStruct>> { if (!this.bundler) throw new Error("Bundler is not provided") - // const requiredFields: UserOperationKey[] = [ - // "sender", - // "nonce", - // "callData" - // ] - // this.validateUserOp(userOp, requiredFields) - const finalUserOp = userOp - // if neither user sent gas fee nor the bundler, estimate gas from provider if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { - const feeData = await this.provider.estimateFeesPerGas() + const feeData = await this.publicClient.estimateFeesPerGas() if (feeData.maxFeePerGas?.toString()) { finalUserOp.maxFeePerGas = feeData.maxFeePerGas } else if (feeData.gasPrice?.toString()) { finalUserOp.maxFeePerGas = feeData.gasPrice } else { - finalUserOp.maxFeePerGas = await this.provider.getGasPrice() + finalUserOp.maxFeePerGas = await this.publicClient.getGasPrice() } if (feeData.maxPriorityFeePerGas?.toString()) { @@ -1337,19 +1134,12 @@ export class NexusSmartAccount extends BaseSmartContractAccount { } else if (feeData.gasPrice?.toString()) { finalUserOp.maxPriorityFeePerGas = feeData.gasPrice ?? 0n } else { - finalUserOp.maxPriorityFeePerGas = await this.provider.getGasPrice() + finalUserOp.maxPriorityFeePerGas = await this.publicClient.getGasPrice() } } const { callGasLimit, verificationGasLimit, preVerificationGas } = await this.bundler.estimateUserOpGas(userOp, stateOverrideSet) - // @note COMMENTED because pimlico bundler does not estimate maxFeePerGas and maxPriorityFeePerGas - // else { - // finalUserOp.maxFeePerGas = - // toHex(Number(maxFeePerGas)) ?? userOp.maxFeePerGas - // finalUserOp.maxPriorityFeePerGas = - // toHex(Number(maxPriorityFeePerGas)) ?? userOp.maxPriorityFeePerGas - // } finalUserOp.verificationGasLimit = verificationGasLimit ?? userOp.verificationGasLimit finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit @@ -1432,7 +1222,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { paymasterUrl: "https://paymaster.biconomy.io/api/v1/...", bundlerUrl: `https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44`, chainId: 84532, - accountAddress: await smartAccount.getAccountAddress() + accountAddress: await smartAccount.getAddress() }) * ``` */ @@ -1480,13 +1270,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard * const encodedCall = encodeFunctionData({ - * abi: parseAbi(["function safeMint(address to) public"]), - * functionName: "safeMint", + * abi: CounterAbi, + * functionName: "incrementNumber", * args: ["0x..."], * }); * * const transaction = { - * to: nftAddress, + * to: mockAddresses.Counter, * data: encodedCall * } * @@ -1509,13 +1299,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard * const encodedCall = encodeFunctionData({ - * abi: parseAbi(["function safeMint(address to) public"]), - * functionName: "safeMint", + * abi: CounterAbi, + * functionName: "incrementNumber", * args: ["0x..."], * }); * * const transaction = { - * to: nftAddress, + * to: mockAddresses.Counter, * data: encodedCall * } * @@ -1538,8 +1328,17 @@ export class NexusSmartAccount extends BaseSmartContractAccount { : [manyOrOneTransactions], buildUseropDto ) + const response = await this.sendUserOp(userOp) + this.setDeploymentState(response) // don't wait for this to finish... + return response + } - return this.sendUserOp(userOp) + public async setDeploymentState({ wait }: UserOpResponse) { + if (this.deploymentState === DeploymentState.DEPLOYED) return + const { success } = await wait() + if (success) { + this.deploymentState = DeploymentState.DEPLOYED + } } async sendTransactionWithExecutor( @@ -1581,13 +1380,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard * const encodedCall = encodeFunctionData({ - * abi: parseAbi(["function safeMint(address to) public"]), - * functionName: "safeMint", + * abi: CounterAbi, + * functionName: "incrementNumber", * args: ["0x..."], * }); * * const transaction = { - * to: nftAddress, + * to: mockAddresses.Counter, * data: encodedCall * } * @@ -1601,7 +1400,8 @@ export class NexusSmartAccount extends BaseSmartContractAccount { const dummySignatureFetchPromise = this.getDummySignatures() const [nonceFromFetch, dummySignature] = await Promise.all([ this.getBuildUserOpNonce(buildUseropDto?.nonceOptions), - dummySignatureFetchPromise + dummySignatureFetchPromise, + this.getInitCode() // Not used, but necessary to determine if the account is deployed. Will return immediately if the account is already deployed ]) if (transactions.length === 0) { @@ -1618,170 +1418,26 @@ export class NexusSmartAccount extends BaseSmartContractAccount { const factoryData = await this.getFactoryData() let userOp: Partial<UserOperationStruct> = { - sender: (await this.getAccountAddress()) as Hex, + sender: (await this.getAddress()) as Hex, nonce: nonceFromFetch, factoryData, - factory: (await this.isAccountDeployed()) - ? undefined - : this.factoryAddress, callData } - // for this Smart Account current validation module dummy signature will be used to estimate gas - userOp.signature = dummySignature - // userOp.paymasterAndData = buildUseropDto?.dummyPndOverride ?? "0x" - - // if ( - // buildUseropDto?.paymasterServiceData && - // buildUseropDto?.paymasterServiceData.mode === PaymasterMode.SPONSORED && - // this.paymaster instanceof BiconomyPaymaster - // ) { - // const gasFeeValues = await this.bundler?.getGasFeeValues() - - // // populate gasfee values and make a call to paymaster - // userOp.maxFeePerGas = gasFeeValues?.standard.maxFeePerGas - // userOp.maxPriorityFeePerGas = gasFeeValues?.standard.maxPriorityFeePerGas - - // if (buildUseropDto.gasOffset) { - // userOp = await this.estimateUserOpGas(userOp) - - // const { - // verificationGasLimitOffsetPct, - // preVerificationGasOffsetPct, - // callGasLimitOffsetPct, - // maxFeePerGasOffsetPct, - // maxPriorityFeePerGasOffsetPct - // } = buildUseropDto.gasOffset - // userOp.verificationGasLimit = toHex( - // Number.parseInt( - // ( - // Number(userOp.verificationGasLimit ?? 0) * - // convertToFactor(verificationGasLimitOffsetPct) - // ).toString() - // ) - // ) - // userOp.preVerificationGas = toHex( - // Number.parseInt( - // ( - // Number(userOp.preVerificationGas ?? 0) * - // convertToFactor(preVerificationGasOffsetPct) - // ).toString() - // ) - // ) - // userOp.callGasLimit = toHex( - // Number.parseInt( - // ( - // Number(userOp.callGasLimit ?? 0) * - // convertToFactor(callGasLimitOffsetPct) - // ).toString() - // ) - // ) - // userOp.maxFeePerGas = toHex( - // Number.parseInt( - // ( - // Number(userOp.maxFeePerGas ?? 0) * - // convertToFactor(maxFeePerGasOffsetPct) - // ).toString() - // ) - // ) - // userOp.maxPriorityFeePerGas = toHex( - // Number.parseInt( - // ( - // Number(userOp.maxPriorityFeePerGas ?? 0) * - // convertToFactor(maxPriorityFeePerGasOffsetPct) - // ).toString() - // ) - // ) - - // userOp = await this.getPaymasterUserOp(userOp, { - // ...buildUseropDto.paymasterServiceData, - // calculateGasLimits: false - // }) - // return userOp - // } - // if (buildUseropDto.paymasterServiceData.calculateGasLimits === false) { - // userOp = await this.estimateUserOpGas(userOp) - // } + if (!(await this.isAccountDeployed())) { + userOp.factory = this.factoryAddress + } - // userOp = await this.getPaymasterUserOp( - // userOp, - // buildUseropDto.paymasterServiceData - // ) + userOp.signature = dummySignature - // return userOp - // } - // get gas fee values from bundler const gasFeeValues: GetUserOperationGasPriceReturnType | undefined = await this.bundler?.getGasFeeValues() + userOp.maxFeePerGas = gasFeeValues?.fast.maxFeePerGas ?? 0n userOp.maxPriorityFeePerGas = gasFeeValues?.fast.maxPriorityFeePerGas ?? 0n userOp = await this.estimateUserOpGas(userOp) - // if (buildUseropDto?.gasOffset) { - // if (buildUseropDto?.paymasterServiceData) { - // userOp = await this.getPaymasterUserOp(userOp, { - // ...buildUseropDto.paymasterServiceData, - // calculateGasLimits: false - // }) - // } - - // const { - // verificationGasLimitOffsetPct, - // preVerificationGasOffsetPct, - // callGasLimitOffsetPct, - // maxFeePerGasOffsetPct, - // maxPriorityFeePerGasOffsetPct - // } = buildUseropDto.gasOffset - // userOp.verificationGasLimit = toHex( - // Number.parseInt( - // ( - // Number(userOp.verificationGasLimit ?? 0) * - // convertToFactor(verificationGasLimitOffsetPct) - // ).toString() - // ) - // ) - // userOp.preVerificationGas = toHex( - // Number.parseInt( - // ( - // Number(userOp.preVerificationGas ?? 0) * - // convertToFactor(preVerificationGasOffsetPct) - // ).toString() - // ) - // ) - // userOp.callGasLimit = toHex( - // Number.parseInt( - // ( - // Number(userOp.callGasLimit ?? 0) * - // convertToFactor(callGasLimitOffsetPct) - // ).toString() - // ) - // ) - // userOp.maxFeePerGas = toHex( - // Number.parseInt( - // ( - // Number(userOp.maxFeePerGas ?? 0) * - // convertToFactor(maxFeePerGasOffsetPct) - // ).toString() - // ) - // ) - // userOp.maxPriorityFeePerGas = toHex( - // Number.parseInt( - // ( - // Number(userOp.maxPriorityFeePerGas ?? 0) * - // convertToFactor(maxPriorityFeePerGasOffsetPct) - // ).toString() - // ) - // ) - - // return userOp - // } - // if (buildUseropDto?.paymasterServiceData) { - // userOp = await this.getPaymasterUserOp( - // userOp, - // buildUseropDto.paymasterServiceData - // ) - // } return userOp } @@ -1853,7 +1509,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { } const decodedSmartAccountData = decodeFunctionData({ - abi: NexusAccountAbi, + abi: NexusAbi, data: (userOp.callData as Hex) ?? "0x" }) @@ -1883,10 +1539,9 @@ export class NexusSmartAccount extends BaseSmartContractAccount { decodedSmartAccountData.args ?? [] const toOriginal = (methodArgsSmartWalletExecuteCall[0] as Hex) ?? "0x" - const valueOriginal = - (methodArgsSmartWalletExecuteCall[1] as bigint) ?? 0n - const dataOriginal = - (methodArgsSmartWalletExecuteCall[2] as Hex) ?? "0x" + const valueOriginal = methodArgsSmartWalletExecuteCall[1] ?? 0n + // @ts-ignore + const dataOriginal = methodArgsSmartWalletExecuteCall?.[2] ?? "0x" initialTransaction.to = toOriginal initialTransaction.value = valueOriginal @@ -1961,7 +1616,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * }); * * // Or if you can't use a paymaster send native token to this address: - * const counterfactualAddress = await smartAccount.getAccountAddress(); + * const counterfactualAddress = await smartAccount.getAddress(); * * // Then deploy the account * const { wait } = await smartAccount.deploy(); @@ -1972,22 +1627,23 @@ export class NexusSmartAccount extends BaseSmartContractAccount { public async deploy( buildUseropDto?: BuildUserOpOptions ): Promise<UserOpResponse> { - const accountAddress = - this.accountAddress ?? (await this.getAccountAddress()) + const accountAddress = this.accountAddress ?? (await this.getAddress()) // Check that the account has not already been deployed - const byteCode = await this.provider?.getBytecode({ + const byteCode = await this.publicClient?.getBytecode({ address: accountAddress as Hex }) + if (byteCode !== undefined) { throw new Error(ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED) } // Check that the account has enough native token balance to deploy, if not using a paymaster if (!buildUseropDto?.paymasterServiceData?.mode) { - const nativeTokenBalance = await this.provider?.getBalance({ + const nativeTokenBalance = await this.publicClient?.getBalance({ address: accountAddress }) + if (nativeTokenBalance === BigInt(0)) { throw new Error(ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY) } @@ -2006,15 +1662,14 @@ export class NexusSmartAccount extends BaseSmartContractAccount { async getFactoryData() { if (await this.isAccountDeployed()) return undefined - this.isDefaultValidationModuleDefined() + const signerAddress = await this.signer.getAddress() + return encodeFunctionData({ - abi: parseAbi([ - "function createAccount(address eoaOwner, uint256 index, address[] calldata attesters, uint8 threshold) external payable returns (address payable)" - ]), + abi: contracts.k1ValidatorFactory.abi, functionName: "createAccount", - args: [await this.signer.getAddress(), this.index, [], 0] + args: [signerAddress, this.index, [], 0] }) } @@ -2067,39 +1722,22 @@ export class NexusSmartAccount extends BaseSmartContractAccount { signature: Hex ): Promise<Hex> { return encodeFunctionData({ - abi: NexusAccountAbi, + abi: NexusAbi, functionName: "isValidSignature", args: [messageHash, signature] }) } - async getSetupAndEnableModuleData( - moduleAddress: Hex, - moduleSetupData: Hex - ): Promise<Transaction> { - const callData = encodeFunctionData({ - abi: NexusAccountAbi, - functionName: "setupAndEnableModule", - args: [moduleAddress, moduleSetupData] - }) - const tx: Transaction = { - to: await this.getAddress(), - value: "0x00", - data: callData - } - return tx - } - - async isModuleInstalled(module: Module): Promise<boolean> { + async isModuleInstalled(module: Module) { if (await this.isAccountDeployed()) { const accountContract = await this._getAccountContract() - return (await accountContract.read.isModuleInstalled([ + const result = await accountContract.read.isModuleInstalled([ BigInt(moduleTypeIds[module.type]), module.moduleAddress, module.data ?? "0x" - ])) as boolean + ]) + return result } - Logger.warn("A module cannot be installed on an undeployed account") return false } @@ -2107,38 +1745,43 @@ export class NexusSmartAccount extends BaseSmartContractAccount { return this.signer } - async installModule(module: Module): Promise<UserOpReceipt> { + async installModule( + module: Module, + buildUserOpOptions?: BuildUserOpOptions + ): Promise<UserOpResponse> { let execution: Execution switch (module.type) { - case 'validator': - case 'executor': - case 'hook': + case "validator": + case "executor": + case "hook": execution = await this._installModule({ moduleAddress: module.moduleAddress, type: module.type, data: module.data }) - return ( - await this.sendTransaction({ + return this.sendTransaction( + { to: execution.target, data: execution.callData, value: execution.value - }) - ).wait() - case 'fallback': + }, + buildUserOpOptions + ) + case "fallback": if (!module.selector || !module.callType) { throw new Error( "Selector param is required for a Fallback Handler Module" ) } execution = await this._uninstallFallback(module) - return ( - await this.sendTransaction({ + return this.sendTransaction( + { to: execution.target, data: execution.callData, value: execution.value - }) - ).wait() + }, + buildUserOpOptions + ) default: throw new Error(`Unknown module type ${module.type}`) } @@ -2156,7 +1799,11 @@ export class NexusSmartAccount extends BaseSmartContractAccount { abi: parseAbi([ "function installModule(uint256 moduleTypeId, address module, bytes calldata initData) external payable" ]), - args: [BigInt(moduleTypeIds[module.type]), module.moduleAddress, module.data || "0x"] + args: [ + BigInt(moduleTypeIds[module.type]), + module.moduleAddress, + module.data || "0x" + ] }) } return execution @@ -2164,55 +1811,73 @@ export class NexusSmartAccount extends BaseSmartContractAccount { throw new Error("Module already installed") } - async uninstallModule(module: Module): Promise<UserOpReceipt> { + async uninstallModule( + module: Module, + buildUserOpOptions?: BuildUserOpOptions + ): Promise<UserOpResponse> { let execution: Execution switch (module.type) { - case 'validator': - case 'executor': - case 'hook': + case "validator": + case "executor": + case "hook": execution = await this._uninstallModule(module) - return ( - await this.sendTransaction({ + return await this.sendTransaction( + { to: execution.target, data: execution.callData, value: execution.value - }) - ).wait() - case 'fallback': + }, + buildUserOpOptions + ) + case "fallback": if (!module.selector) { throw new Error( `Selector param is required for module type ${module.type}` ) } execution = await this._uninstallFallback(module) - return ( - await this.sendTransaction({ + return await this.sendTransaction( + { to: execution.target, data: execution.callData, value: execution.value - }) - ).wait() + }, + buildUserOpOptions + ) default: throw new Error(`Unknown module type ${module.type}`) } } - async getPreviousModule(module: Module) { - let installedModules: Address[] = [] - if (module.type === 'validator') { - installedModules = await this.getInstalledValidators() - } - if (module.type === 'executor') { - installedModules = await this.getInstalledExecutors() - } + private _getModuleIndex( + installedModules: + | Awaited<ReturnType<typeof this.getInstalledValidators>> + | Awaited<ReturnType<typeof this.getInstalledExecutors>>, + module: Module + ): Hex { const index = installedModules.indexOf(getAddress(module.moduleAddress)) if (index === 0) { return SENTINEL_ADDRESS } if (index > 0) { + // @ts-ignore: TODO: Gabi This looks wrong return installedModules[index - 1] } - throw new Error(`Module ${module.moduleAddress} not found in installed modules`) + throw new Error( + `Module ${module.moduleAddress} not found in installed modules` + ) + } + + async getPreviousModule(module: Module) { + if (module.type === "validator") { + const installedModules = await this.getInstalledValidators() + return this._getModuleIndex(installedModules, module) + } + if (module.type === "executor") { + const installedModules = await this.getInstalledExecutors() + return this._getModuleIndex(installedModules, module) + } + throw new Error(`Unknown module type ${module.type}`) } private async _uninstallFallback(module: Module): Promise<Execution> { @@ -2250,10 +1915,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { if (isInstalled) { let moduleData = module.data || "0x" - if ( - module.type === 'validator' || - module.type === 'executor' - ) { + if (module.type === "validator" || module.type === "executor") { const prev = await this.getPreviousModule(module) moduleData = encodeAbiParameters( [ @@ -2271,7 +1933,11 @@ export class NexusSmartAccount extends BaseSmartContractAccount { abi: parseAbi([ "function uninstallModule(uint256 moduleTypeId, address module, bytes deInitData)" ]), - args: [BigInt(moduleTypeIds[module.type]), module.moduleAddress, moduleData] + args: [ + BigInt(moduleTypeIds[module.type]), + module.moduleAddress, + moduleData + ] }) } return execution @@ -2304,7 +1970,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { callData: (transactions[0].data ?? "0x") as Hex, value: BigInt(transactions[0].value ?? 0n) } - return await this.activeExecutionModule.execute( + return await this.activeExecutionModule.execute( execution, ownedAccountAddress ) @@ -2314,7 +1980,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { ) } - /** + /** * Checks if the account contract supports a specific execution mode. * @param mode - The execution mode to check, represented as a viem Address. * @returns A promise that resolves to a boolean indicating whether the execution mode is supported. @@ -2324,54 +1990,44 @@ export class NexusSmartAccount extends BaseSmartContractAccount { return (await accountContract.read.supportsExecutionMode([mode])) as boolean } - /** - * Retrieves the list of installed validators for the account. - * @returns A promise that resolves to an array of validator addresses. - */ - async getInstalledValidators(): Promise<Address[]> { + async getInstalledValidators() { const accountContract = await this._getAccountContract() - return ( - (await accountContract.read.getValidatorsPaginated([ - SENTINEL_ADDRESS, - 100 - ])) as Address[][] - )[0] as Address[] + return await accountContract.read.getValidatorsPaginated([ + SENTINEL_ADDRESS, + 100n + ]) } - /** - * Retrieves the list of installed executors for the account. - * @returns A promise that resolves to an array of executor addresses. - */ - async getInstalledExecutors(): Promise<Address[]> { + async getInstalledExecutors() { const accountContract = await this._getAccountContract() - return ( - (await accountContract.read.getExecutorsPaginated([ - SENTINEL_ADDRESS, - 100 - ])) as Address[][] - )[0] as Address[] + return await accountContract.read.getExecutorsPaginated([ + SENTINEL_ADDRESS, + 100n + ]) } /** * Retrieves all installed modules for the account, including validators, executors, active hook, and fallback handler. * @returns A promise that resolves to an array of addresses representing all installed modules. */ - async getInstalledModules(): Promise<Address[]> { + async getInstalledModules() { const validators = await this.getInstalledValidators() const executors = await this.getInstalledExecutors() const hook = await this.getActiveHook() const fallbackHandler = await this.getFallbackBySelector() return [...validators, ...executors, hook, fallbackHandler] + .flat() + .filter(Boolean) } /** * Retrieves the active hook for the account. * @returns A promise that resolves to the address of the active hook. */ - async getActiveHook(): Promise<Address> { + async getActiveHook() { const accountContract = await this._getAccountContract() - return (await accountContract.read.getActiveHook()) as Address + return await accountContract.read.getActiveHook() } /** @@ -2379,11 +2035,11 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * @param selector - Optional hexadecimal selector. If not provided, uses a generic fallback selector. * @returns A promise that resolves to the address of the fallback handler. */ - async getFallbackBySelector(selector?: Hex): Promise<Address> { + async getFallbackBySelector(selector?: Hex) { const accountContract = await this._getAccountContract() - return (await accountContract.read.getFallbackHandlerBySelector([ + return await accountContract.read.getFallbackHandlerBySelector([ selector ?? GENERIC_FALLBACK_SELECTOR - ])) as Address + ]) } /** @@ -2393,6 +2049,14 @@ export class NexusSmartAccount extends BaseSmartContractAccount { */ async supportsModule(module: Module): Promise<boolean> { const accountContract = await this._getAccountContract() - return (await accountContract.read.supportsModule([module.type])) as boolean + const moduleIndex = + module.type === "validator" + ? 1n + : module.type === "executor" + ? 2n + : module.type === "fallback" + ? 3n + : 4n + return await accountContract.read.supportsModule([moduleIndex]) } } diff --git a/src/account/abi/AccountResolver.ts b/src/account/abi/AccountResolver.ts deleted file mode 100644 index 2dfd45303..000000000 --- a/src/account/abi/AccountResolver.ts +++ /dev/null @@ -1,118 +0,0 @@ -export const AccountResolverAbi = [ - { - inputs: [ - { internalType: "address", name: "_v1Factory", type: "address" }, - { internalType: "address", name: "_v2Factory", type: "address" }, - { internalType: "address", name: "_ecdsaModule", type: "address" } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { - inputs: [], - name: "ecdsaOwnershipModule", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "_eoa", type: "address" }, - { internalType: "uint8", name: "_maxIndex", type: "uint8" } - ], - name: "resolveAddresses", - outputs: [ - { - components: [ - { internalType: "address", name: "accountAddress", type: "address" }, - { internalType: "address", name: "factoryAddress", type: "address" }, - { - internalType: "address", - name: "currentImplementation", - type: "address" - }, - { internalType: "string", name: "currentVersion", type: "string" }, - { internalType: "string", name: "factoryVersion", type: "string" }, - { internalType: "uint256", name: "deploymentIndex", type: "uint256" } - ], - internalType: "struct IAddressResolver.SmartAccountResult[]", - name: "", - type: "tuple[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "_eoa", type: "address" }, - { internalType: "uint8", name: "_maxIndex", type: "uint8" }, - { internalType: "address", name: "_moduleAddress", type: "address" }, - { internalType: "bytes", name: "_moduleSetupData", type: "bytes" } - ], - name: "resolveAddressesFlexibleForV2", - outputs: [ - { - components: [ - { internalType: "address", name: "accountAddress", type: "address" }, - { internalType: "address", name: "factoryAddress", type: "address" }, - { - internalType: "address", - name: "currentImplementation", - type: "address" - }, - { internalType: "string", name: "currentVersion", type: "string" }, - { internalType: "string", name: "factoryVersion", type: "string" }, - { internalType: "uint256", name: "deploymentIndex", type: "uint256" } - ], - internalType: "struct IAddressResolver.SmartAccountResult[]", - name: "", - type: "tuple[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "_eoa", type: "address" }, - { internalType: "uint8", name: "_maxIndex", type: "uint8" } - ], - name: "resolveAddressesV1", - outputs: [ - { - components: [ - { internalType: "address", name: "accountAddress", type: "address" }, - { internalType: "address", name: "factoryAddress", type: "address" }, - { - internalType: "address", - name: "currentImplementation", - type: "address" - }, - { internalType: "string", name: "currentVersion", type: "string" }, - { internalType: "string", name: "factoryVersion", type: "string" }, - { internalType: "uint256", name: "deploymentIndex", type: "uint256" } - ], - internalType: "struct IAddressResolver.SmartAccountResult[]", - name: "", - type: "tuple[]" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [], - name: "smartAccountFactoryV1", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [], - name: "smartAccountFactoryV2", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "view", - type: "function" - } -] as const diff --git a/src/account/abi/ECDSAModule.ts b/src/account/abi/ECDSAModule.ts deleted file mode 100644 index 228aa3f92..000000000 --- a/src/account/abi/ECDSAModule.ts +++ /dev/null @@ -1,152 +0,0 @@ -export const ECDSAModuleAbi = [ - { - inputs: [ - { internalType: "address", name: "smartAccount", type: "address" } - ], - name: "AlreadyInitedForSmartAccount", - type: "error" - }, - { - inputs: [ - { internalType: "address", name: "smartAccount", type: "address" } - ], - name: "NoOwnerRegisteredForSmartAccount", - type: "error" - }, - { - inputs: [{ internalType: "address", name: "account", type: "address" }], - name: "NotEOA", - type: "error" - }, - { inputs: [], name: "WrongSignatureLength", type: "error" }, - { inputs: [], name: "ZeroAddressNotAllowedAsOwner", type: "error" }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "smartAccount", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "oldOwner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address" - } - ], - name: "OwnershipTransferred", - type: "event" - }, - { - inputs: [], - name: "NAME", - outputs: [{ internalType: "string", name: "", type: "string" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [], - name: "VERSION", - outputs: [{ internalType: "string", name: "", type: "string" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { internalType: "address", name: "smartAccount", type: "address" } - ], - name: "getOwner", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [{ internalType: "address", name: "eoaOwner", type: "address" }], - name: "initForSmartAccount", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { internalType: "bytes32", name: "dataHash", type: "bytes32" }, - { internalType: "bytes", name: "moduleSignature", type: "bytes" } - ], - name: "isValidSignature", - outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { internalType: "bytes32", name: "dataHash", type: "bytes32" }, - { internalType: "bytes", name: "moduleSignature", type: "bytes" }, - { internalType: "address", name: "smartAccount", type: "address" } - ], - name: "isValidSignatureForAddress", - outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [{ internalType: "address", name: "owner", type: "address" }], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - components: [ - { internalType: "address", name: "sender", type: "address" }, - { internalType: "uint256", name: "nonce", type: "uint256" }, - { internalType: "bytes", name: "initCode", type: "bytes" }, - { internalType: "bytes", name: "callData", type: "bytes" }, - { internalType: "uint256", name: "callGasLimit", type: "uint256" }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256" - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256" - }, - { internalType: "uint256", name: "maxFeePerGas", type: "uint256" }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256" - }, - { internalType: "bytes", name: "paymasterAndData", type: "bytes" }, - { internalType: "bytes", name: "signature", type: "bytes" } - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple" - }, - { internalType: "bytes32", name: "userOpHash", type: "bytes32" } - ], - name: "validateUserOp", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "view", - type: "function" - } -] diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index ac90a26e9..a2f7ffe7d 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -1,55 +1,11 @@ import { type Hex, keccak256, toHex } from "viem" -import type { - BiconomyImplementations, - BiconomyImplementationsByVersion, - EntryPointAddresses, - EntryPointAddressesByVersion -} from "./Types.js" - export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000" - export const MAGIC_BYTES = "0x6492649264926492649264926492649264926492649264926492649264926492" - -// will always be latest entrypoint address -export const DEFAULT_ENTRYPOINT_ADDRESS = - "0x0000000071727De22E5E9d8BAf0edAc6f37da032" -export const ENTRYPOINT_ADDRESSES: EntryPointAddresses = { - "0x27a4db290b89ae3373ce4313cbeae72112ae7da9": "V0_0_5", - "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789": "V0_0_6", - "0x0000000071727De22E5E9d8BAf0edAc6f37da032": "V0_0_7" -} - -// will always be latest factory address -export const DEFAULT_BICONOMY_FACTORY_ADDRESS = - "0x887Ca6FaFD62737D0E79A2b8Da41f0B15A864778" // K1ValidatorFactory -export const DEFAULT_FALLBACK_HANDLER_ADDRESS = - "0x0bBa6d96BD616BedC6BFaa341742FD43c60b83C1" - export const BICONOMY_TOKEN_PAYMASTER = "0x00000f7365cA6C59A2C93719ad53d567ed49c14C" - -// will always be latest implementation address export const DEFAULT_BICONOMY_IMPLEMENTATION_ADDRESS = "0x8EBDcA5ce92f9aBF1D1ab21de24068B2a2EaF808" -export const ENTRYPOINT_V07_ADDRESS = - "0x0000000071727De22E5E9d8BAf0edAc6f37da032" -export const BICONOMY_IMPLEMENTATION_ADDRESSES: BiconomyImplementations = { - "0x00006b7e42e01957da540dc6a8f7c30c4d816af5": "V1_0_0", - "0x66Ae45ad5BE4be08a70AD99e9cF41e6d6884B06F": "V2_0_0" -} - -export const ENTRYPOINT_ADDRESSES_BY_VERSION: EntryPointAddressesByVersion = { - V0_0_5: "0x27a4db290b89ae3373ce4313cbeae72112ae7da9", - V0_0_6: "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", - V0_0_7: "0x0000000071727De22E5E9d8BAf0edAc6f37da032" -} - -export const BICONOMY_IMPLEMENTATION_ADDRESSES_BY_VERSION: BiconomyImplementationsByVersion = - Object.fromEntries( - Object.entries(BICONOMY_IMPLEMENTATION_ADDRESSES).map(([k, v]) => [v, k]) - ) - export const EIP1559_UNSUPPORTED_NETWORKS: Array<number> = [97, 56, 1442, 1101] export const PROXY_CREATION_CODE = @@ -78,7 +34,7 @@ export const ERROR_MESSAGES = { NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT: "'Amount' is required for withdrawal of native token without using a paymaster", MISSING_RPC_URL: - "rpcUrl is required for PrivateKeyAccount signer type, please provide it in the config", + "rpcUrl is required for this signer type, please provide it in the config", INVALID_SESSION_INDEXES: "Session indexes and transactions must be of the same length and correspond to each other", SIGNER_REQUIRED: "Signer is required for creating a smart account", @@ -97,18 +53,6 @@ export const ERC20_ABI = [ "function decimals() external view returns (uint8)" ] -// BASE SEPOLIA CONTRACTS -export const NEXUS_IMPLEMENTATION = "0x8EBDcA5ce92f9aBF1D1ab21de24068B2a2EaF808" -export const BOOTSTRAP = "0xBCe1Ff9bA78870FBd41DED89a5E618D86440fd94" -export const BOOTSTRAP_LIB = "0xdA76AA9A299a2C7cA40976817b6C7D57cb198613" -export const K1_VALIDATOR_FACTORY = "0x887Ca6FaFD62737D0E79A2b8Da41f0B15A864778" -export const BICONOMY_META_FACTORY = - "0x69c06775D109126e6Ff97B1f95CBd4eaDF7e71bD" -export const MOCK_REGISTRY = "0x5d79F6247683fE309219e7399c26A63A72361CF0" // to update - -export const ENTRYPOINT_ADDRESS_V07 = - "0x0000000071727De22E5E9d8BAf0edAc6f37da032" - // define mode and exec type enums export const CALLTYPE_SINGLE = "0x00" // 1 byte export const CALLTYPE_BATCH = "0x01" // 1 byte @@ -121,7 +65,8 @@ export const MODE_PAYLOAD = "0x00000000000000000000000000000000000000000000" // export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f" -export const SENTINEL_ADDRESS = "0x0000000000000000000000000000000000000001" +export const SENTINEL_ADDRESS: Hex = + "0x0000000000000000000000000000000000000001" export const MODE_VALIDATION = "0x00" as Hex export const MODE_MODULE_ENABLE = "0x01" as Hex @@ -132,3 +77,4 @@ export const MODULE_ENABLE_MODE_TYPE_HASH = keccak256( export const MOCK_MULTI_MODULE_ADDRESS = "0x9C992f91E7Cd4697B81E137007f446E826b8378b" export const MODULE_TYPE_MULTI = 0 +export const eip1271MagicValue: Hex = "0x1626ba7e" diff --git a/src/account/utils/HttpRequests.ts b/src/account/utils/HttpRequests.ts index c5de9659d..0fcc51025 100644 --- a/src/account/utils/HttpRequests.ts +++ b/src/account/utils/HttpRequests.ts @@ -20,6 +20,7 @@ export async function sendRequest<T>( service: Service ): Promise<T> { const stringifiedBody = JSON.stringify(body) + Logger.log(`${service} RPC Request`, { url, body: stringifiedBody }) const response = await fetch(url, { diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index be3cb4c8a..725eb7ec6 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -26,14 +26,12 @@ import type { MODE_MODULE_ENABLE, MODE_VALIDATION } from "../utils/Constants" export type EntryPointAddresses = Record<string, string> export type BiconomyFactories = Record<string, string> -export type BiconomyImplementations = Record<string, string> export type EntryPointAddressesByVersion = Record<string, string> export type BiconomyFactoriesByVersion = Record<string, string> -export type BiconomyImplementationsByVersion = Record<string, string> export type SmartAccountConfig = { /** entryPointAddress: address of the entry point */ - entryPointAddress: string + entryPointAddress: Address /** factoryAddress: address of the smart account factory */ bundler?: IBundler } @@ -90,8 +88,6 @@ export type BaseSmartAccountConfig = { overheads?: Partial<GasOverheads> /** paymaster: {@link IPaymaster} interface */ paymaster?: IPaymaster - /** chainId: chainId of the network */ - chainId?: number } export type BiconomyTokenPaymasterRequest = { @@ -138,21 +134,31 @@ export type ResolvedValidationProps = { activeValidationModule: BaseValidationModule /** signer: ethers Wallet, viemWallet or alchemys SmartAccountSigner */ signer: SmartAccountSigner - /** chainId: chainId of the network */ - chainId: number + /** rpcUrl */ + rpcUrl: string +} + +export type ConfigurationAddresses = { + factoryAddress: Hex + k1ValidatorAddress: Hex + entryPointAddress: Hex } export type NexusSmartAccountConfigBaseProps = { + /** chain: The chain from viem */ + chain: Chain /** Factory address of biconomy factory contract or some other contract you have deployed on chain */ factoryAddress?: Hex + /** K1Validator Address */ + k1ValidatorAddress?: Hex /** Sender address: If you want to override the Signer address with some other address and get counterfactual address can use this to pass the EOA and get SA address */ senderAddress?: Hex /** implementation of smart contract address or some other contract you have deployed and want to override */ implementationAddress?: Hex /** defaultFallbackHandler: override the default fallback contract address */ defaultFallbackHandler?: Hex - /** rpcUrl: Rpc url, optional, we set default rpc url if not passed. */ - rpcUrl?: string // as good as Provider + /** rpcUrl */ + rpcUrl?: string /** paymasterUrl: The Paymaster URL retrieved from the Biconomy dashboard */ paymasterUrl?: string /** biconomyPaymasterApiKey: The API key retrieved from the Biconomy dashboard */ @@ -163,10 +169,6 @@ export type NexusSmartAccountConfigBaseProps = { scanForUpgradedAccountsFromV1?: boolean /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ maxIndexForScan?: bigint - /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains. Alias of customChain */ - viemChain?: Chain - /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chain. Alias of viemChain */ - customChain?: Chain /** The initial code to be used for the smart account */ initCode?: Hex /** Used for session key manager module */ @@ -181,7 +183,8 @@ export type NexusSmartAccountConfigConstructorProps = NexusSmartAccountConfigBaseProps & BaseSmartAccountConfig & ResolvedBundlerProps & - ResolvedValidationProps + ResolvedValidationProps & + ConfigurationAddresses /** * Represents options for building a user operation. @@ -281,8 +284,6 @@ export type InitializeV2Data = { export type EstimateUserOpGasParams = { userOp: Partial<UserOperationStruct> - /** Currrently has no effect */ - // skipBundlerGasEstimation?: boolean; /** paymasterServiceData: Options specific to transactions that involve a paymaster */ paymasterServiceData?: SponsorUserOperationDto } @@ -381,7 +382,7 @@ export type StateOverrideSet = { } export type BigNumberish = Hex | number | bigint -export type BytesLike = Uint8Array | Hex +export type BytesLike = Uint8Array | Hex | string //#region UserOperationStruct // based on @account-abstraction/common @@ -458,12 +459,10 @@ export type BatchUserOperationCallData = Exclude<UserOperationCallData, Hex>[] export type SignTypedDataParams = Omit<SignTypedDataParameters, "privateKey"> -export type BasSmartContractAccountProps = +export type BaseSmartContractAccountProps = NexusSmartAccountConfigConstructorProps & { /** chain: The chain from viem */ chain: Chain - /** rpcClient: The rpc url string */ - rpcClient: string /** factoryAddress: The address of the factory */ factoryAddress: Hex /** entryPointAddress: The address of the entry point */ @@ -478,7 +477,7 @@ export interface ISmartContractAccount< /** * The RPC provider the account uses to make RPC calls */ - readonly rpcProvider: PublicClient + publicClient: PublicClient /** * @returns the init code for the account @@ -619,7 +618,6 @@ export type TransferOwnershipCompatibleModule = | "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" | "0x000000824dc138db84FD9109fc154bdad332Aa8E" - export type ModuleInfoParams = { moduleAddress: Address moduleType: ModuleType @@ -638,8 +636,8 @@ export type EIP712DomainReturn = [ ] export enum CallType { - CALLTYPE_SINGLE = '0x00', - CALLTYPE_BATCH = '0x01', - CALLTYPE_STATIC = '0xFE', - CALLTYPE_DELEGATECALL = '0xFF', + CALLTYPE_SINGLE = "0x00", + CALLTYPE_BATCH = "0x01", + CALLTYPE_STATIC = "0xFE", + CALLTYPE_DELEGATECALL = "0xFF" } diff --git a/src/account/utils/Utils.ts b/src/account/utils/Utils.ts index c8b29d035..843d66c73 100644 --- a/src/account/utils/Utils.ts +++ b/src/account/utils/Utils.ts @@ -15,14 +15,9 @@ import { import type { UserOperationStruct } from "../../account" import { MOCK_MULTI_MODULE_ADDRESS, - MODULE_ENABLE_MODE_TYPE_HASH, - type SupportedSigner, - convertSigner + MODULE_ENABLE_MODE_TYPE_HASH } from "../../account" -import { extractChainIdFromBundlerUrl } from "../../bundler" -import { extractChainIdFromPaymasterUrl } from "../../bundler" -import type { NexusSmartAccountConfig } from "./Types.js" -import { type ModuleType, moduleTypeIds } from "../../modules/index.js" +import { type ModuleType, moduleTypeIds } from "../../modules/utils/Types" /** * pack the userOperation @@ -93,62 +88,8 @@ export const isNullOrUndefined = (value: any): value is undefined => { return value === null || value === undefined } -export const compareChainIds = async ( - signer: SupportedSigner, - biconomySmartAccountConfig: NexusSmartAccountConfig, - skipChainIdCalls: boolean - // biome-ignore lint/suspicious/noConfusingVoidType: <explanation> -): Promise<Error | void> => { - const signerResult = await convertSigner( - signer, - skipChainIdCalls, - biconomySmartAccountConfig.rpcUrl - ) - - const chainIdFromBundler = biconomySmartAccountConfig.bundlerUrl - ? extractChainIdFromBundlerUrl(biconomySmartAccountConfig.bundlerUrl) - : biconomySmartAccountConfig.bundler - ? extractChainIdFromBundlerUrl( - biconomySmartAccountConfig.bundler.getBundlerUrl() - ) - : undefined - - const chainIdFromPaymasterUrl = biconomySmartAccountConfig.paymasterUrl - ? extractChainIdFromPaymasterUrl(biconomySmartAccountConfig.paymasterUrl) - : undefined - - if (!isNullOrUndefined(signerResult.chainId)) { - if ( - chainIdFromBundler !== undefined && - signerResult.chainId !== chainIdFromBundler - ) { - throw new Error( - `Chain IDs from signer (${signerResult.chainId}) and bundler (${chainIdFromBundler}) do not match.` - ) - } - if ( - chainIdFromPaymasterUrl !== undefined && - signerResult.chainId !== chainIdFromPaymasterUrl - ) { - throw new Error( - `Chain IDs from signer (${signerResult.chainId}) and paymaster (${chainIdFromPaymasterUrl}) do not match.` - ) - } - } else { - if ( - chainIdFromBundler !== undefined && - chainIdFromPaymasterUrl !== undefined && - chainIdFromBundler !== chainIdFromPaymasterUrl - ) { - throw new Error( - `Chain IDs from bundler (${chainIdFromBundler}) and paymaster (${chainIdFromPaymasterUrl}) do not match.` - ) - } - } -} - export const isValidRpcUrl = (url: string): boolean => { - const regex = /^(https:\/\/|wss:\/\/).*/ + const regex = /^(http:\/\/|wss:\/\/|https:\/\/).*/ return regex.test(url) } @@ -206,9 +147,13 @@ export function makeInstallDataAndHash( accountOwner: Address, modules: { moduleType: ModuleType; config: Hex }[] ): [string, string] { - const types = modules.map((module) => BigInt(moduleTypeIds[module.moduleType])) + const types = modules.map((module) => + BigInt(moduleTypeIds[module.moduleType]) + ) const initDatas = modules.map((module) => - toHex(concat([toBytes(BigInt(moduleTypeIds[module.moduleType])), module.config])) + toHex( + concat([toBytes(BigInt(moduleTypeIds[module.moduleType])), module.config]) + ) ) const multiInstallData = encodeAbiParameters( diff --git a/src/account/utils/convertSigner.ts b/src/account/utils/convertSigner.ts index 440d82ede..3dd8bfd59 100644 --- a/src/account/utils/convertSigner.ts +++ b/src/account/utils/convertSigner.ts @@ -4,14 +4,12 @@ import { type WalletClient, createWalletClient } from "viem" -import { WalletClientSigner } from "../../account" +import { ERROR_MESSAGES, WalletClientSigner } from "../../account" import type { Signer, SmartAccountSigner, SupportedSigner } from "../../account" import { EthersSigner } from "./EthersSigner.js" interface SmartAccountResult { signer: SmartAccountSigner - chainId: number | null - rpcUrl: string | undefined } function isPrivateKeyAccount( @@ -20,8 +18,10 @@ function isPrivateKeyAccount( return (signer as PrivateKeyAccount).type === "local" } -function isWalletClient(signer: SupportedSigner): signer is WalletClient { - return (signer as WalletClient).transport !== undefined +export function isWalletClient( + signer: SupportedSigner +): signer is WalletClient { + return (signer as WalletClient).name === "Wallet Client" } function isEthersSigner(signer: SupportedSigner): signer is Signer { @@ -36,66 +36,41 @@ function isAlchemySigner( export const convertSigner = async ( signer: SupportedSigner, - skipChainIdCalls = false, - _rpcUrl?: string + rpcUrl?: string ): Promise<SmartAccountResult> => { let resolvedSmartAccountSigner: SmartAccountSigner - let rpcUrl: string | undefined = _rpcUrl - let chainId: number | null = null if (!isAlchemySigner(signer)) { if (isEthersSigner(signer)) { const ethersSigner = signer as Signer - if (!skipChainIdCalls) { - // If chainId not provided, get it from walletClient - if (!ethersSigner.provider) { - throw new Error("Cannot consume an ethers Wallet without a provider") - } - const chainIdFromProvider = await ethersSigner.provider.getNetwork() - if (!chainIdFromProvider?.chainId) { - throw new Error("Cannot consume an ethers Wallet without a chainId") - } - chainId = Number(chainIdFromProvider.chainId) + if (!rpcUrl) throw new Error(ERROR_MESSAGES.MISSING_RPC_URL) + if (!ethersSigner.provider) { + throw new Error("Cannot consume an ethers Wallet without a provider") } // convert ethers Wallet to alchemy's SmartAccountSigner under the hood resolvedSmartAccountSigner = new EthersSigner(ethersSigner, "ethers") - // @ts-ignore - rpcUrl = ethersSigner.provider?.connection?.url ?? undefined } else if (isWalletClient(signer)) { const walletClient = signer as WalletClient if (!walletClient.account) { throw new Error("Cannot consume a viem wallet without an account") } - if (!skipChainIdCalls) { - // If chainId not provided, get it from walletClient - if (!walletClient.chain) { - throw new Error("Cannot consume a viem wallet without a chainId") - } - chainId = walletClient.chain.id - } // convert viems walletClient to alchemy's SmartAccountSigner under the hood resolvedSmartAccountSigner = new WalletClientSigner(walletClient, "viem") - rpcUrl = walletClient?.transport?.url ?? undefined } else if (isPrivateKeyAccount(signer)) { - if (rpcUrl !== null && rpcUrl !== undefined) { - const walletClient = createWalletClient({ - account: signer as PrivateKeyAccount, - transport: http(rpcUrl) - }) - resolvedSmartAccountSigner = new WalletClientSigner( - walletClient, - "viem" - ) - } else { - throw new Error( - "rpcUrl is required for PrivateKeyAccount signer type, please provide it in the config" - ) - } + if (!rpcUrl) throw new Error(ERROR_MESSAGES.MISSING_RPC_URL) + const walletClient = createWalletClient({ + account: signer as PrivateKeyAccount, + transport: http(rpcUrl) + }) + resolvedSmartAccountSigner = new WalletClientSigner(walletClient, "viem") } else { throw new Error("Unsupported signer") } } else { + if (!rpcUrl) throw new Error(ERROR_MESSAGES.MISSING_RPC_URL) resolvedSmartAccountSigner = signer as SmartAccountSigner } - return { signer: resolvedSmartAccountSigner, rpcUrl, chainId } + return { + signer: resolvedSmartAccountSigner + } } diff --git a/src/account/utils/getChain.ts b/src/account/utils/getChain.ts index 0ccb8be7e..ede2ea4db 100644 --- a/src/account/utils/getChain.ts +++ b/src/account/utils/getChain.ts @@ -99,7 +99,7 @@ export const getCustomChain = ( name: string, id: number, rpcUrl: StringOrStrings, - blockExplorer: StringOrStrings, + blockExplorer?: StringOrStrings, nativeCurrency?: Chain["nativeCurrency"], contracts?: Chain["contracts"] ): Chain => { @@ -117,7 +117,7 @@ export const getCustomChain = ( blockExplorers: { default: { name: "Explorer", - url: stringOrStringsToArray(blockExplorer)[0] + url: blockExplorer ? stringOrStringsToArray(blockExplorer)[0] : "" } }, ...((contracts && { contracts }) || {}) diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index cc55424ad..0d312652b 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -1,14 +1,9 @@ import { http, type Hash, type PublicClient, createPublicClient } from "viem" +import contracts from "../__contracts/index.js" import type { UserOperationStruct } from "../account" -import { - HttpMethod, - getChain, - isNullOrUndefined, - sendRequest -} from "../account" +import { HttpMethod, isNullOrUndefined, sendRequest } from "../account" import type { IBundler } from "./interfaces/IBundler.js" import { - DEFAULT_ENTRYPOINT_ADDRESS, UserOpReceiptIntervals, UserOpReceiptMaxDurationIntervals, UserOpWaitForTxHashIntervals, @@ -19,9 +14,9 @@ import { getTimestampInSeconds } from "./utils/HelperFunction.js" import type { + BundlerConfig, BundlerConfigWithChainId, BundlerEstimateUserOpGasResponse, - Bundlerconfig, GetUserOpByHashResponse, GetUserOperationGasPriceReturnType, GetUserOperationReceiptResponse, @@ -51,25 +46,16 @@ export class Bundler implements IBundler { UserOpWaitForTxHashMaxDurationIntervals!: { [key in number]?: number } - private provider: PublicClient + private publicClient: PublicClient - constructor(bundlerConfig: Bundlerconfig) { - const parsedChainId: number = bundlerConfig?.chainId ?? 11155111 // TODO: remove hardcoded chainId + constructor(bundlerConfig: BundlerConfig) { + const parsedChainId: number = bundlerConfig.chain.id // || extractChainIdFromBundlerUrl(bundlerConfig.bundlerUrl) this.bundlerConfig = { ...bundlerConfig, chainId: parsedChainId } - this.provider = createPublicClient({ - chain: - bundlerConfig.viemChain ?? - bundlerConfig.customChain ?? - getChain(parsedChainId), - transport: http( - ( - bundlerConfig.viemChain || - bundlerConfig.customChain || - getChain(parsedChainId) - ).rpcUrls.default.http[0] - ) + this.publicClient = createPublicClient({ + chain: bundlerConfig.chain, + transport: http() }) this.UserOpReceiptIntervals = { @@ -93,7 +79,7 @@ export class Bundler implements IBundler { } this.bundlerConfig.entryPointAddress = - bundlerConfig.entryPointAddress || DEFAULT_ENTRYPOINT_ADDRESS + bundlerConfig.entryPointAddress || contracts.entryPoint.address } public getBundlerUrl(): string { @@ -205,9 +191,10 @@ export class Bundler implements IBundler { ) if (userOpResponse?.receipt?.blockNumber) { if (confirmations) { - const latestBlock = await this.provider.getBlockNumber() + const latestBlock = await this.publicClient.getBlockNumber() const confirmedBlocks = - BigInt(latestBlock) - BigInt(userOpResponse.receipt.blockNumber) + BigInt(latestBlock) - + BigInt(userOpResponse.receipt.blockNumber) if (confirmations >= confirmedBlocks) { clearInterval(intervalId) resolve(userOpResponse) @@ -378,7 +365,7 @@ export class Bundler implements IBundler { } } - public static async create(config: Bundlerconfig): Promise<Bundler> { + public static async create(config: BundlerConfig): Promise<Bundler> { return new Bundler(config) } } diff --git a/src/bundler/utils/Constants.ts b/src/bundler/utils/Constants.ts index fa1b3f6ea..c615713ab 100644 --- a/src/bundler/utils/Constants.ts +++ b/src/bundler/utils/Constants.ts @@ -1,14 +1,17 @@ import { concat, pad } from "viem" -import { - CALLTYPE_BATCH, - CALLTYPE_SINGLE, - EXECTYPE_DEFAULT, - EXECTYPE_DELEGATE, - EXECTYPE_TRY, - MODE_DEFAULT, - MODE_PAYLOAD, - UNUSED -} from "./Types" + +// define mode and exec type enums +export const CALLTYPE_SINGLE = "0x00" // 1 byte +export const CALLTYPE_BATCH = "0x01" // 1 byte +export const EXECTYPE_DEFAULT = "0x00" // 1 byte +export const EXECTYPE_TRY = "0x01" // 1 byte +export const EXECTYPE_DELEGATE = "0xFF" // 1 byte +export const MODE_DEFAULT = "0x00000000" // 4 bytes +export const UNUSED = "0x00000000" // 4 bytes +export const MODE_PAYLOAD = "0x00000000000000000000000000000000000000000000" // 22 bytes +export const ERC1271_MAGICVALUE = "0x1626ba7e" +export const ERC1271_INVALID = "0xffffffff" +export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f" export const UserOpReceiptIntervals: { [key in number]?: number } = { [1]: 10000 @@ -38,9 +41,6 @@ export const UserOpWaitForTxHashMaxDurationIntervals: { [1]: 20000 } -export const DEFAULT_ENTRYPOINT_ADDRESS = - "0x0000000071727De22E5E9d8BAf0edAc6f37da032" - export const SDK_VERSION = "4.4.5" export const EXECUTE_SINGLE = concat([ diff --git a/src/bundler/utils/HelperFunction.ts b/src/bundler/utils/HelperFunction.ts index 9c57546a0..cf96b536c 100644 --- a/src/bundler/utils/HelperFunction.ts +++ b/src/bundler/utils/HelperFunction.ts @@ -58,7 +58,9 @@ function decodeErrorCode(errorCode: string) { "0x40d3d1a40000000000000000000000004d8249d21c9553b1bd23cabf611011376dd3416a": "LinkedList_EntryAlreadyInList", "0x40d3d1a40000000000000000000000004b8306128aed3d49a9d17b99bf8082d4e406fa1f": - "LinkedList_EntryAlreadyInList" + "LinkedList_EntryAlreadyInList", + "0x40d3d1a4000000000000000000000000d98238bbaea4f91683d250003799ead31d7f5c55": + "Error: Custom error message about the K1Validator contract" // Add more error codes and their corresponding human-readable messages here } const decodedError = errorMap[errorCode] || errorCode diff --git a/src/bundler/utils/Types.ts b/src/bundler/utils/Types.ts index ee0f811c3..53688a28d 100644 --- a/src/bundler/utils/Types.ts +++ b/src/bundler/utils/Types.ts @@ -1,25 +1,35 @@ -import { ParamType } from "ethers" import type { Address, Chain, Hash, Hex, Log } from "viem" import type { UserOperationStruct } from "../../account" -export type Bundlerconfig = { +export type BundlerConfig = { bundlerUrl: string entryPointAddress?: string - chainId?: number + chain: Chain // eslint-disable-next-line no-unused-vars userOpReceiptIntervals?: { [key in number]?: number } userOpWaitForTxHashIntervals?: { [key in number]?: number } userOpReceiptMaxDurationIntervals?: { [key in number]?: number } userOpWaitForTxHashMaxDurationIntervals?: { [key in number]?: number } - /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains. Alias of customChain */ - viemChain?: Chain - /** Can be used to optionally override the chain with a custom chain if it doesn't already exist in viems list of supported chains. Alias of viemChain */ - customChain?: Chain } -export type BundlerConfigWithChainId = Bundlerconfig & { chainId: number } +export type BundlerConfigWithChainId = BundlerConfig & { chainId: number } export type TStatus = "success" | "reverted" +export type UserOpReceiptTransaction = { + transactionHash: Hex + transactionIndex: bigint + blockHash: Hash + blockNumber: bigint + from: Address + to: Address | null + cumulativeGasUsed: bigint + status: TStatus + gasUsed: bigint + contractAddress: Address | null + logsBloom: Hex + effectiveGasPrice: bigint +} + export type UserOpReceipt = { userOpHash: Hash entryPoint: Address @@ -30,20 +40,7 @@ export type UserOpReceipt = { actualGasCost: bigint success: boolean reason?: string - receipt: { - transactionHash: Hex - transactionIndex: bigint - blockHash: Hash - blockNumber: bigint - from: Address - to: Address | null - cumulativeGasUsed: bigint - status: TStatus - gasUsed: bigint - contractAddress: Address | null - logsBloom: Hex - effectiveGasPrice: bigint - } + receipt: UserOpReceiptTransaction logs: Log[] } @@ -152,29 +149,3 @@ export type BundlerEstimateUserOpGasResponse = { paymasterVerificationGasLimit?: Hex | null paymasterPostOpGasLimit?: Hex | null } - -// define mode and exec type enums -export const CALLTYPE_SINGLE = "0x00" // 1 byte -export const CALLTYPE_BATCH = "0x01" // 1 byte -export const EXECTYPE_DEFAULT = "0x00" // 1 byte -export const EXECTYPE_TRY = "0x01" // 1 byte -export const EXECTYPE_DELEGATE = "0xFF" // 1 byte -export const MODE_DEFAULT = "0x00000000" // 4 bytes -export const UNUSED = "0x00000000" // 4 bytes -export const MODE_PAYLOAD = "0x00000000000000000000000000000000000000000000" // 22 bytes -export const ERC1271_MAGICVALUE = "0x1626ba7e" -export const ERC1271_INVALID = "0xffffffff" - -export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f" - -export const Executions = ParamType.from({ - type: "tuple(address,uint256,bytes)[]", - baseType: "tuple", - name: "executions", - arrayLength: null, - components: [ - { name: "target", type: "address" }, - { name: "value", type: "uint256" }, - { name: "callData", type: "bytes" } - ] -}) diff --git a/src/modules/base/BaseModule.ts b/src/modules/base/BaseModule.ts index 66223bd4e..20eb272fc 100644 --- a/src/modules/base/BaseModule.ts +++ b/src/modules/base/BaseModule.ts @@ -1,9 +1,12 @@ import { type Address, type Hex, encodeFunctionData, parseAbi } from "viem" +import contracts from "../../__contracts/index.js" +import type { SmartAccountSigner } from "../../account/index.js" import { - ENTRYPOINT_V07_ADDRESS, - type SmartAccountSigner -} from "../../account/index.js" -import { moduleTypeIds, type Module, type ModuleType, type ModuleVersion } from "../utils/Types.js" + type Module, + type ModuleType, + type ModuleVersion, + moduleTypeIds +} from "../utils/Types.js" export abstract class BaseModule { moduleAddress: Address @@ -12,7 +15,7 @@ export abstract class BaseModule { type: ModuleType hook?: Address version: ModuleVersion = "1.0.0-beta" - entryPoint: Address = ENTRYPOINT_V07_ADDRESS + entryPoint: Address = contracts.entryPoint.address signer: SmartAccountSigner constructor(module: Module, signer: SmartAccountSigner) { @@ -30,7 +33,11 @@ export abstract class BaseModule { "function installModule(uint256 moduleTypeId, address module, bytes calldata initData) external" ]), functionName: "installModule", - args: [BigInt(moduleTypeIds[this.type]), this.moduleAddress, this.data ?? "0x"] + args: [ + BigInt(moduleTypeIds[this.type]), + this.moduleAddress, + this.data ?? "0x" + ] }) return installModuleData @@ -42,7 +49,11 @@ export abstract class BaseModule { "function uninstallModule(uint256 moduleTypeId, address module, bytes calldata initData) external" ]), functionName: "uninstallModule", - args: [BigInt(moduleTypeIds[this.type]), this.moduleAddress, uninstallData ?? "0x"] + args: [ + BigInt(moduleTypeIds[this.type]), + this.moduleAddress, + uninstallData ?? "0x" + ] }) return uninstallModuleData } diff --git a/src/modules/executors/OwnableExecutor.ts b/src/modules/executors/OwnableExecutor.ts index 516dfc493..76be22bb8 100644 --- a/src/modules/executors/OwnableExecutor.ts +++ b/src/modules/executors/OwnableExecutor.ts @@ -11,44 +11,51 @@ import { SENTINEL_ADDRESS } from "../../account" import type { NexusSmartAccount } from "../../account/NexusSmartAccount" import type { UserOpReceipt } from "../../bundler" import { BaseExecutionModule } from "../base/BaseExecutionModule" -import { OWNABLE_EXECUTOR } from "../utils/Constants" import type { Execution, Module } from "../utils/Types" export class OwnableExecutorModule extends BaseExecutionModule { smartAccount!: NexusSmartAccount public owners: Address[] + private address: Address public constructor( module: Module, smartAccount: NexusSmartAccount, owners: Address[], + address: Address ) { super(module, smartAccount.getSigner()) this.smartAccount = smartAccount this.owners = owners this.data = module.data ?? "0x" + this.address = address } public static async create( smartAccount: NexusSmartAccount, + address: Address, data?: Hex ): Promise<OwnableExecutorModule> { const module: Module = { - moduleAddress: OWNABLE_EXECUTOR, - type: 'executor', + moduleAddress: address, + type: "executor", data: data ?? "0x", additionalContext: "0x" } const owners = await smartAccount.publicClient.readContract({ - address: OWNABLE_EXECUTOR, + address, abi: parseAbi([ "function getOwners(address account) external view returns (address[])" ]), functionName: "getOwners", args: [await smartAccount.getAddress()] }) - const instance = new OwnableExecutorModule(module, smartAccount, owners as Address[]) - return instance + return new OwnableExecutorModule( + module, + smartAccount, + owners as Address[], + address + ) } public async execute( @@ -63,7 +70,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { "function executeBatchOnOwnedAccount(address ownedAccount, bytes callData)" ]), args: [ - accountAddress ?? (await this.smartAccount.getAccountAddress()), + accountAddress ?? (await this.smartAccount.getAddress()), encodeAbiParameters( [ { @@ -96,7 +103,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { "function executeOnOwnedAccount(address ownedAccount, bytes callData)" ]), args: [ - accountAddress ?? (await this.smartAccount.getAccountAddress()), + accountAddress ?? (await this.smartAccount.getAddress()), encodePacked( ["address", "uint256", "bytes"], [ @@ -136,7 +143,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { } public async removeOwner(ownerToRemove: Address): Promise<UserOpReceipt> { - const owners = await this.getOwners() + const owners = await this.getOwners(this.address) let prevOwner: Address const currentOwnerIndex = owners.findIndex( @@ -171,20 +178,19 @@ export class OwnableExecutorModule extends BaseExecutionModule { return receipt } - public async getOwners(accountAddress?: Address): Promise<Address[]> { - try { - const owners = await this.smartAccount.publicClient.readContract({ - address: OWNABLE_EXECUTOR, - abi: parseAbi([ - "function getOwners(address account) external view returns (address[])" - ]), - functionName: "getOwners", - args: [accountAddress ?? (await this.smartAccount.getAccountAddress())] - }) + public async getOwners( + moduleAddress: Address, + accountAddress?: Address + ): Promise<Address[]> { + const owners = await this.smartAccount.publicClient.readContract({ + address: moduleAddress, + abi: parseAbi([ + "function getOwners(address account) external view returns (address[])" + ]), + functionName: "getOwners", + args: [accountAddress ?? (await this.smartAccount.getAddress())] + }) - return owners as Address[] - } catch (err) { - return [] - } + return owners as Address[] } } diff --git a/src/modules/utils/Constants.ts b/src/modules/utils/Constants.ts index 387f52851..0f1d7ba38 100644 --- a/src/modules/utils/Constants.ts +++ b/src/modules/utils/Constants.ts @@ -1,20 +1,3 @@ -import type { Hex } from "viem" import type { ModuleVersion } from "./Types.js" export const DEFAULT_MODULE_VERSION: ModuleVersion = "1.0.0-beta" - -// VALIDATORS -export const K1_VALIDATOR = "0x663E709f60477f07885230E213b8149a7027239B" -export const OWNABLE_VALIDATOR = "0xfb11d7ca9161F1DF508787BA45951225B6C0a681" -export const MULTI_FACTOR = "0x0D579C69CFB662D9EB6B0c69fa7abAA6d706f6F2"; - -// EXECUTORS -export const MOCK_EXECUTOR: Hex = "0xA975e69917A4c856b17Fc8Cc4C352f326Ef21C6B" -export const OWNABLE_EXECUTOR = "0x989110e958902f619148b8171fbDF1Dca0c5AE0B" - -// FALLBACKS -export const MOCK_FALLBACK_HANDLER: Hex = - "0x56B7080ef4221FdBE210160efFd33F81B19926E0" - -// HOOKS -export const MOCK_HOOK: Hex = "0x64587c60A3D19B0D73EFfd7660ee07cb76Ca465C" diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index a4a965b1e..c18c49cfd 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -8,11 +8,11 @@ import { } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" import { type UserOperationStruct, getChain } from "../../account" -import { - type ChainInfo, - type Execution, - type SignerData, - type Transaction, +import type { + ChainInfo, + Execution, + SignerData, + Transaction // createOwnableValidatorModule } from "../../index.js" @@ -233,4 +233,4 @@ export const toTransaction = (execution: Execution): Transaction => { value: Number(execution.value), data: execution.callData } -} \ No newline at end of file +} diff --git a/src/modules/utils/Types.ts b/src/modules/utils/Types.ts index ff578afe9..ada55804c 100644 --- a/src/modules/utils/Types.ts +++ b/src/modules/utils/Types.ts @@ -198,10 +198,9 @@ export type Execution = { callData: Hex } - export enum SafeHookType { GLOBAL = 0, - SIG = 1, + SIG = 1 } export type Module = { @@ -228,8 +227,7 @@ export type Module = { /* ---- end safe module params ---- */ } - -export type ModuleType = 'validator' | 'executor' | 'fallback' | 'hook' +export type ModuleType = "validator" | "executor" | "fallback" | "hook" type ModuleTypeIds = { [index in ModuleType]: 1 | 2 | 3 | 4 @@ -239,5 +237,5 @@ export const moduleTypeIds: ModuleTypeIds = { validator: 1, executor: 2, fallback: 3, - hook: 4, + hook: 4 } diff --git a/src/modules/validators/K1ValidatorModule.ts b/src/modules/validators/K1ValidatorModule.ts index 39c2baf54..19b26a282 100644 --- a/src/modules/validators/K1ValidatorModule.ts +++ b/src/modules/validators/K1ValidatorModule.ts @@ -1,6 +1,6 @@ -import { type SmartAccountSigner } from "../../account/index.js" +import addresses from "../../__contracts/addresses.js" +import type { SmartAccountSigner } from "../../account/index.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" -import { K1_VALIDATOR } from "../utils/Constants.js" import type { Module } from "../utils/Types.js" export class K1ValidatorModule extends BaseValidationModule { @@ -9,11 +9,12 @@ export class K1ValidatorModule extends BaseValidationModule { } public static async create( - signer: SmartAccountSigner + signer: SmartAccountSigner, + k1ValidatorAddress = addresses.K1Validator ): Promise<K1ValidatorModule> { const module: Module = { - moduleAddress: K1_VALIDATOR, - type: 'validator', + moduleAddress: k1ValidatorAddress, + type: "validator", data: await signer.getAddress(), additionalContext: "0x" } diff --git a/src/modules/validators/OwnableValidator.ts b/src/modules/validators/OwnableValidator.ts index 399a53a64..3de563c37 100644 --- a/src/modules/validators/OwnableValidator.ts +++ b/src/modules/validators/OwnableValidator.ts @@ -129,7 +129,7 @@ // this.owners = this.owners.filter((o: Address) => o !== owner) // } // return receipt - + // } // public async addOwner(owner: Address): Promise<UserOpReceipt> { diff --git a/src/modules/validators/ValidationModule.ts b/src/modules/validators/ValidationModule.ts index 1b47a0993..8390243a0 100644 --- a/src/modules/validators/ValidationModule.ts +++ b/src/modules/validators/ValidationModule.ts @@ -1,5 +1,5 @@ import type { Address, Hex } from "viem" -import { type SmartAccountSigner } from "../../account/index.js" +import type { SmartAccountSigner } from "../../account/index.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" import type { Module } from "../utils/Types.js" @@ -15,7 +15,7 @@ export class ValidationModule extends BaseValidationModule { ): Promise<ValidationModule> { const module: Module = { moduleAddress, - type: 'validator', + type: "validator", data, additionalContext: "0x" } diff --git a/src/paymaster/utils/Constants.ts b/src/paymaster/utils/Constants.ts index cdf1e4837..a148d17ad 100644 --- a/src/paymaster/utils/Constants.ts +++ b/src/paymaster/utils/Constants.ts @@ -1,6 +1,5 @@ export const MAX_UINT256 = "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" -export const ENTRYPOINT_ADDRESS = "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789" export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000" // export const ERC20_PAYMASTER_ADDRESS = '0xE9f6Ffc87cac92bc94f704AE017e85cB83DBe4EC' // likely to be same address on all chains diff --git a/tests/account.read.test.ts b/tests/account.read.test.ts new file mode 100644 index 000000000..1533c32e2 --- /dev/null +++ b/tests/account.read.test.ts @@ -0,0 +1,936 @@ +import { JsonRpcProvider, ParamType, Wallet, ethers } from "ethers" +import { + http, + type AbiParameter, + type Account, + type Chain, + type Hex, + type WalletClient, + concat, + createPublicClient, + createWalletClient, + encodeAbiParameters, + encodeFunctionData, + encodePacked, + getContract, + hashMessage, + keccak256, + parseAbiParameters, + toBytes, + toHex +} from "viem" +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" +import { baseSepolia } from "viem/chains" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { K1ValidatorFactoryAbi, NexusAbi } from "../src/__contracts/abi" +import addresses from "../src/__contracts/addresses" +import { + ERROR_MESSAGES, + NATIVE_TOKEN_ALIAS, + type NexusSmartAccount, + type SupportedSigner, + type Transaction, + createSmartAccountClient, + eip1271MagicValue, + getChain, + makeInstallDataAndHash +} from "../src/account" +import { CounterAbi } from "./src/__contracts/abi" +import mockAddresses from "./src/__contracts/mockAddresses" +import { type TestFileNetworkType, toNetwork } from "./src/testSetup" +import { + checkBalance, + getAccountDomainStructFields, + getBundlerUrl, + getTestAccount, + killNetwork, + pKey, + toTestClient, + topUp +} from "./src/testUtils" +import type { + MasterClient, + NetworkConfig, + NetworkConfigWithBundler +} from "./src/testUtils" + +const NETWORK_TYPE: TestFileNetworkType = "COMMON_LOCALHOST" + +describe("account.read", () => { + let network: NetworkConfig + // Nexus Config + let chain: Chain + let bundlerUrl: string + let walletClient: WalletClient + + // Test utils + let testClient: MasterClient + let account: Account + let recipientAccount: Account + let smartAccount: NexusSmartAccount + let smartAccountAddress: Hex + + beforeAll(async () => { + network = (await toNetwork(NETWORK_TYPE)) as NetworkConfig + + chain = network.chain + bundlerUrl = network.bundlerUrl + + account = getTestAccount(0) + recipientAccount = getTestAccount(3) + + walletClient = createWalletClient({ + account, + chain, + transport: http() + }) + + testClient = toTestClient(chain, getTestAccount(0)) + + smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + chain + }) + + smartAccountAddress = await smartAccount.getAddress() + }) + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test("should fund the smart account", async () => { + await topUp(testClient, smartAccountAddress) + const [balance] = await smartAccount.getBalances() + expect(balance.amount > 0) + }) + + test("should have account addresses", async () => { + const addresses = await Promise.all([ + account.address, + smartAccount.getAddress() + ]) + expect(addresses.every(Boolean)).to.be.true + expect(addresses).toStrictEqual([ + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + ]) + }) + + test.skip("should estimate gas for minting an NFT", async () => { + const encodedCall = encodeFunctionData({ + abi: CounterAbi, + functionName: "incrementNumber" + }) + const transaction = { + to: mockAddresses.Counter, + data: encodedCall + } + const results = await Promise.all([ + smartAccount.getGasEstimate([transaction]), + smartAccount.getGasEstimate([transaction, transaction]) + ]) + + const increasingGasExpenditure = results.every( + (result, i) => result > (results[i - 1] ?? 0) + ) + + expect(increasingGasExpenditure).toBeTruthy() + }, 60000) + + test.skip("should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", async () => { + const createSmartAccount = createSmartAccountClient({ + chain, + signer: account as SupportedSigner, + bundlerUrl + }) + + await expect(createSmartAccount).rejects.toThrow( + ERROR_MESSAGES.MISSING_RPC_URL + ) + }, 50000) + + test.skip("should get all modules", async () => { + const modules = smartAccount.getInstalledModules() + if (await smartAccount.isAccountDeployed()) { + expect(modules).resolves + } else { + expect(modules).rejects.toThrow("Account is not deployed") + } + }, 30000) + + test.skip("should check if module is enabled on the smart account", async () => { + const isEnabled = smartAccount.isModuleInstalled({ + type: "validator", + moduleAddress: addresses.K1Validator + }) + if (await smartAccount.isAccountDeployed()) { + expect(isEnabled).resolves.toBeTruthy() + } else { + expect(isEnabled).rejects.toThrow("Account is not deployed") + } + }, 30000) + + test.skip("enable mode", async () => { + const result = makeInstallDataAndHash(account.address, [ + { + moduleType: "validator", + config: account.address + } + ]) + expect(result).toBeTruthy() + }, 30000) + + test.skip("should create a smartAccountClient from an ethers signer", async () => { + const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) + const ethersSigner = new Wallet(pKey, ethersProvider) + + const smartAccount = await createSmartAccountClient({ + chain, + signer: ethersSigner, + bundlerUrl, + rpcUrl: chain.rpcUrls.default.http[0] + }) + }) + + test.skip("should pickup the rpcUrl from viem wallet and ethers", async () => { + const newRpcUrl = "http://localhost:8545" + const defaultRpcUrl = chain.rpcUrls.default.http[0] //http://127.0.0.1:8545" + + const ethersProvider = new JsonRpcProvider(newRpcUrl) + const ethersSignerWithNewRpcUrl = new Wallet(pKey, ethersProvider) + + const originalEthersProvider = new JsonRpcProvider( + chain.rpcUrls.default.http[0] + ) + const ethersSigner = new Wallet(pKey, originalEthersProvider) + + const walletClientWithNewRpcUrl = createWalletClient({ + account, + chain, + transport: http(newRpcUrl) + }) + const [ + smartAccountFromEthersWithNewRpc, + smartAccountFromViemWithNewRpc, + smartAccountFromEthersWithOldRpc, + smartAccountFromViemWithOldRpc + ] = await Promise.all([ + createSmartAccountClient({ + chain, + signer: ethersSignerWithNewRpcUrl, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: newRpcUrl + }), + createSmartAccountClient({ + chain, + signer: walletClientWithNewRpcUrl, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: newRpcUrl + }), + createSmartAccountClient({ + chain, + signer: ethersSigner, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: chain.rpcUrls.default.http[0] + }), + createSmartAccountClient({ + chain, + signer: walletClient, + bundlerUrl: getBundlerUrl(1337), + rpcUrl: chain.rpcUrls.default.http[0] + }) + ]) + + const [ + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress + ] = await Promise.all([ + smartAccountFromEthersWithNewRpc.getAccountAddress(), + smartAccountFromViemWithNewRpc.getAccountAddress(), + smartAccountFromEthersWithOldRpc.getAccountAddress(), + smartAccountFromViemWithOldRpc.getAccountAddress() + ]) + + expect( + [ + smartAccountFromEthersWithNewRpcAddress, + smartAccountFromViemWithNewRpcAddress, + smartAccountFromEthersWithOldRpcAddress, + smartAccountFromViemWithOldRpcAddress + ].every(Boolean) + ).toBeTruthy() + + expect(smartAccountFromEthersWithNewRpc.publicClient.transport.url).toBe( + newRpcUrl + ) + expect(smartAccountFromViemWithNewRpc.publicClient.transport.url).toBe( + newRpcUrl + ) + expect(smartAccountFromEthersWithOldRpc.publicClient.transport.url).toBe( + defaultRpcUrl + ) + expect(smartAccountFromViemWithOldRpc.publicClient.transport.url).toBe( + defaultRpcUrl + ) + }) + + test.skip("should read estimated user op gas values", async () => { + const tx = { + to: recipientAccount.address, + data: "0x" + } + + const userOp = await smartAccount.buildUserOp([tx]) + + const estimatedGas = await smartAccount.estimateUserOpGas(userOp) + expect(estimatedGas.maxFeePerGas).toBeTruthy() + expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() + expect(estimatedGas.verificationGasLimit).toBeTruthy() + expect(estimatedGas.callGasLimit).toBeTruthy() + expect(estimatedGas.preVerificationGas).toBeTruthy() + }, 30000) + + test.skip("should have an active validation module", async () => { + const module = smartAccount.activeValidationModule + expect(module).toBeTruthy() + }) + + // @note Ignored untill we implement Paymaster + // test.skip( + // "should create a smart account with paymaster by creating instance", + // async () => { + // const paymaster = new Paymaster({ paymasterUrl }) + + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl, + // paymaster + // }) + // expect(smartAccount.paymaster).not.toBeNull() + // expect(smartAccount.paymaster).not.toBeUndefined() + // } + // ) + + test.skip("should fail to create a smartAccountClient from a walletClient without an account", async () => { + const viemWalletNoAccount = createWalletClient({ + transport: http(chain.rpcUrls.default.http[0]) + }) + + expect(async () => + createSmartAccountClient({ + chain, + signer: viemWalletNoAccount, + bundlerUrl, + rpcUrl: chain.rpcUrls.default.http[0] + }) + ).rejects.toThrow("Cannot consume a viem wallet without an account") + }) + + // test.skip( + // "should create a smart account with paymaster with an api key", + // async () => { + // const paymaster = smartAccount.paymaster + // expect(paymaster).not.toBeNull() + // expect(paymaster).not.toBeUndefined() + // } + // ) + + // test.skip("should not throw and error, chain ids match", async () => { + // const mockBundlerUrl = + // "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" + // const mockPaymasterUrl = + // "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + + // const config: NexusSmartAccountConfig = { + // signer: walletClient, + // bundlerUrl: mockBundlerUrl, + // paymasterUrl: mockPaymasterUrl + // } + + // await expect( + // compareChainIds(walletClient, config, false) + // ).resolves.not.toThrow() + // }) + + // test.skip( + // "should throw and error, bundlerUrl chain id and paymaster url chain id does not match with validation module", + // async () => { + // const mockPaymasterUrl = + // "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + + // const k1ValidationModule = await createK1ValidatorModule( + // smartAccount.getSigner() + // ) + + // const config: NexusSmartAccountConfig = { + // chain, + // defaultValidationModule: k1ValidationModule, + // activeValidationModule: k1ValidationModule, + // bundlerUrl, + // paymasterUrl: mockPaymasterUrl + // } + + // } + // ) + + // test.skip( + // "should throw and error, signer has chain id (56) and paymasterUrl has chain id (11155111)", + // async () => { + // const mockPaymasterUrl = + // "https://paymaster.biconomy.io/api/v1/11155111/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" + + // const walletClientBsc = createWalletClient({ + // account: walletClient.account, + // chain: bsc, + // transport: http(bsc.rpcUrls.default.http[0]) + // }) + + // const config: NexusSmartAccountConfig = { + // chain, + // signer: walletClientBsc, + // bundlerUrl, + // paymasterUrl: mockPaymasterUrl + // } + + // } + // ) + + test.skip("should return chain object for chain id 1", async () => { + const chainId = 1 + const chain = getChain(chainId) + expect(chain.id).toBe(chainId) + }) + + test.skip("should have correct fields", async () => { + const chainId = 1 + const chain = getChain(chainId) + ;[ + "blockExplorers", + "contracts", + "fees", + "formatters", + "id", + "name", + "nativeCurrency", + "rpcUrls", + "serializers" + ].every((field) => { + expect(chain).toHaveProperty(field) + }) + }) + + test.skip("should throw an error, chain id not found", async () => { + const chainId = 0 + expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) + }) + + test.skip("should have matching counterFactual address from the contracts with smartAccount.getAddress()", async () => { + const client = createWalletClient({ + account, + chain, + transport: http() + }) + + const smartAccount = await createSmartAccountClient({ + chain, + signer: client, + bundlerUrl + }) + + const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() + + const publicClient = createPublicClient({ + chain, + transport: http() + }) + + const factoryContract = getContract({ + address: addresses.K1ValidatorFactory, + abi: K1ValidatorFactoryAbi, + client: { public: publicClient, wallet: client } + }) + + const smartAccountAddressFromContracts = + await factoryContract.read.computeAccountAddress([ + await smartAccount.getSmartAccountOwner().getAddress(), + BigInt(0), + [], + 0 + ]) + + expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) + }) + + test.skip("should be deployed to counterfactual address", async () => { + const accountAddress = await smartAccount.getAccountAddress() + const byteCode = await testClient.getBytecode({ + address: accountAddress as Hex + }) + if (await smartAccount.isAccountDeployed()) { + expect(byteCode?.length).toBeGreaterThan(2) + } else { + expect(byteCode?.length).toBe(undefined) + } + }, 10000) + + test.skip("should check if ecdsaOwnershipModule is enabled", async () => { + const ecdsaOwnershipModule = addresses.K1Validator + + expect(ecdsaOwnershipModule).toBe( + smartAccount.activeValidationModule.getAddress() + ) + }) + + test.skip("should fail to deploy a smart account if no native token balance or paymaster", async () => { + const newPrivateKey = generatePrivateKey() + const newAccount = privateKeyToAccount(newPrivateKey) + + const newViemWallet = createWalletClient({ + account: newAccount, + chain, + transport: http() + }) + + const smartAccount = await createSmartAccountClient({ + chain, + signer: newViemWallet, + bundlerUrl + }) + + expect(async () => smartAccount.deploy()).rejects.toThrow( + ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY + ) + }) + + test.skip("should fail to deploy a smart account if already deployed", async () => { + if (await smartAccount.isAccountDeployed()) { + expect(async () => smartAccount.deploy()).rejects.toThrow( + ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED + ) + } else { + expect(smartAccount.deploy()).resolves + } + }, 60000) + + test.skip("should fetch balances for smartAccount", async () => { + const token = "0x69835C1f31ed0721A05d5711C1d669C10802a3E1" + const tokenBalanceBefore = await checkBalance( + testClient, + smartAccountAddress, + token + ) + const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ + token + ]) + + expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) + }) + + test.skip("should error if no recipient exists", async () => { + const token: Hex = "0x69835C1f31ed0721A05d5711C1d669C10802a3E1" + + const txs = [ + { address: token, amount: BigInt(1), recipient: account.address }, + { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } + ] + + expect(async () => smartAccount.withdraw(txs)).rejects.toThrow( + ERROR_MESSAGES.NO_RECIPIENT + ) + }) + + test.skip("should error when withdraw all of native token is attempted without an amount explicitly set", async () => { + expect(async () => + smartAccount.withdraw(null, account.address) + ).rejects.toThrow(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT) + }, 6000) + + test.skip("should check native token balance and more token info for smartAccount", async () => { + const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() + + expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) + expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) + expect(ethBalanceFromSmartAccount.chainId).toBe(chain.id) + expect(ethBalanceFromSmartAccount.decimals).toBe(18) + }, 60000) + + // @note Skip until we implement the Paymaster + // test.skip( + // "should check balance of supported token", + // async () => { + // const tokens = await smartAccount.getSupportedTokens() + // const [firstToken] = tokens + + // expect(tokens.length).toBeGreaterThan(0) + // expect(tokens[0]).toHaveProperty("balance") + // expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) + // }, + // 60000 + // ) + + // @note Nexus SA signature needs to contain the validator module address in the first 20 bytes + test.skip("should test isValidSignature PersonalSign to be valid", async () => { + if (await smartAccount.isAccountDeployed()) { + const data = hashMessage("0x1234") + + // Define constants as per the original Solidity function + const DOMAIN_NAME = "Nexus" + const DOMAIN_VERSION = "1.0.0-beta" + const DOMAIN_TYPEHASH = + "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" + const PARENT_TYPEHASH = "PersonalSign(bytes prefixed)" + const chainId = baseSepolia.id + + // Calculate the domain separator + const domainSeparator = keccak256( + encodeAbiParameters( + parseAbiParameters("bytes32, bytes32, bytes32, uint256, address"), + [ + keccak256(toBytes(DOMAIN_TYPEHASH)), + keccak256(toBytes(DOMAIN_NAME)), + keccak256(toBytes(DOMAIN_VERSION)), + BigInt(chainId), + smartAccountAddress + ] + ) + ) + + // Calculate the parent struct hash + const parentStructHash = keccak256( + encodeAbiParameters(parseAbiParameters("bytes32, bytes32"), [ + keccak256(toBytes(PARENT_TYPEHASH)), + hashMessage(data) + ]) + ) + + // Calculate the final hash + const resultHash: Hex = keccak256( + concat(["0x1901", domainSeparator, parentStructHash]) + ) + + const signature = await smartAccount.signMessage(resultHash) + + const contractResponse = await testClient.readContract({ + address: await smartAccount.getAddress(), + abi: NexusAbi, + functionName: "isValidSignature", + args: [hashMessage(data), signature] + }) + + const viemResponse = await testClient.verifyMessage({ + address: smartAccountAddress, + message: data, + signature + }) + + expect(contractResponse).toBe(eip1271MagicValue) + expect(viemResponse).toBe(true) + } + }) + + test.skip("should test isValidSignature EIP712Sign to be valid", async () => { + if (await smartAccount.isAccountDeployed()) { + const data = keccak256("0x1234") + + // Define constants as per the original Solidity function + const DOMAIN_NAME = "Nexus" + const DOMAIN_VERSION = "1.0.0-beta" + const DOMAIN_TYPEHASH = + "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" + const PARENT_TYPEHASH = + "TypedDataSign(Contents contents,bytes1 fields,string name,string version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] extensions) Contents(bytes32 stuff)" + const chainId = baseSepolia.id + + // Calculate the domain separator + const domainSeparator = keccak256( + encodeAbiParameters( + parseAbiParameters("bytes32, bytes32, bytes32, uint256, address"), + [ + keccak256(toBytes(DOMAIN_TYPEHASH)), + keccak256(toBytes(DOMAIN_NAME)), + keccak256(toBytes(DOMAIN_VERSION)), + BigInt(chainId), + smartAccountAddress + ] + ) + ) + + const encodedAccountDomainStructFields = + await getAccountDomainStructFields(testClient, smartAccountAddress) + + // Calculate the parent struct hash + const parentStructHash = keccak256( + encodePacked( + ["bytes", "bytes"], + [ + encodeAbiParameters(parseAbiParameters("bytes32, bytes32"), [ + keccak256(toBytes(PARENT_TYPEHASH)), + hashMessage(data) + ]), + encodedAccountDomainStructFields + ] + ) + ) + + const dataToSign: Hex = keccak256( + concat(["0x1901" as Hex, domainSeparator, parentStructHash]) + ) + + let signature = await smartAccount.signMessage(dataToSign) + const contentsType: Hex = toHex("Contents(bytes32 stuff)") + signature = encodePacked( + ["bytes", "bytes", "bytes", "bytes", "uint"], + [ + signature, + domainSeparator, + hashMessage(data), + contentsType, + BigInt(contentsType.length) + ] + ) + + const finalSignature = encodePacked( + ["address", "bytes"], + [smartAccount.activeValidationModule.moduleAddress, signature] + ) + + const contents = keccak256( + encodePacked( + ["bytes", "bytes", "bytes"], + ["0x1901", domainSeparator, hashMessage(data)] + ) + ) + + const contractResponse = await testClient.readContract({ + address: await smartAccount.getAddress(), + abi: NexusAbi, + functionName: "isValidSignature", + args: [contents, finalSignature] + }) + + const viemResponse = await testClient.verifyMessage({ + address: smartAccountAddress, + message: data, + signature: finalSignature + }) + + expect(contractResponse).toBe(eip1271MagicValue) + expect(viemResponse).toBe(true) + } + }) + + test("should have consistent behaviour between ethers.AbiCoder.defaultAbiCoder() and viem.encodeAbiParameters()", async () => { + const expectedResult = + "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b90600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b906000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + + const Executions = ParamType.from({ + type: "tuple(address,uint256,bytes)[]", + baseType: "tuple", + name: "executions", + arrayLength: null, + components: [ + { name: "target", type: "address" }, + { name: "value", type: "uint256" }, + { name: "callData", type: "bytes" } + ] + }) + + const viemExecutions: AbiParameter = { + type: "tuple[]", + components: [ + { name: "target", type: "address" }, + { name: "value", type: "uint256" }, + { name: "callData", type: "bytes" } + ] + } + + const txs = [ + { + target: "0x90F79bf6EB2c4f870365E785982E1f101E93b906", + callData: "0x", + value: 1n + }, + { + target: "0x90F79bf6EB2c4f870365E785982E1f101E93b906", + callData: "0x", + value: 1n + } + ] + + const executionCalldataPrepWithEthers = + ethers.AbiCoder.defaultAbiCoder().encode([Executions], [txs]) + + const executionCalldataPrepWithViem = encodeAbiParameters( + [viemExecutions], + [txs] + ) + + expect(executionCalldataPrepWithEthers).toBe(expectedResult) + expect(executionCalldataPrepWithViem).toBe(expectedResult) + }) + + // test.skip("should call isValidSignature for deployed smart account", async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl + // }) + + // const message = "hello world" + // const signature = await smartAccount.signMessage(message) + + // const isVerified = await publicClient.readContract({ + // address: await smartAccount.getAddress(), + // abi: NexusAccountAbi, + // functionName: "isValidSignature", + // args: [hashMessage(message), signature] + // }) + + // expect(isVerified).toBe(eip1271MagicValue) + // }) + + // test.skip("should verifySignature of not deployed", async () => { + // const undeployedSmartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl, + // index: 99n + // }) + // const isDeployed = await undeployedSmartAccount.isAccountDeployed() + // if (!isDeployed) { + // const message = "hello world" + + // const signature = await smartAccount.signMessage(message) + // // OR + // // const signature = await smartAccount.signMessageWith6492(message) + + // const isVerified = await publicClient.readContract({ + // address: await smartAccount.getAddress(), + // abi: NexusAccountAbi, + // functionName: "isValidSignature", + // args: [hashMessage(message), signature] + // }) + + // expect(isVerified).toBe(eip1271MagicValue) + // } + // }) + + // test.skip("should verifySignature using viem", async () => { + // const isDeployed = await smartAccount.isAccountDeployed() + // if (isDeployed) { + // const message = "0x123" + + // const signature = await smartAccount.signMessage(message) + + // console.log(signature, 'signature'); + // console.log(hashMessage(message), 'hashMessage(message)'); + + // // const isVerified = await verifyMessage(publicClient, { + // // address: await smartAccount.getAddress(), + // // message, + // // signature, + // // }) + + // const isVerified = await publicClient.readContract({ + // address: await smartAccount.getAddress(), + // abi: NexusAccountAbi, + // functionName: "isValidSignature", + // args: [hashMessage(message), signature] + // }) + + // console.log(isVerified, "isVerified"); + + // expect(isVerified).toBe(eip1271MagicValue) + // } + // }) + + // @note Removed untill we implement the Bundler (Pimlico's bundler does no behave as expected in this test) + // test.skip( + // "should simulate a user operation execution, expecting to fail", + // async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl + // }) + + // const balances = await smartAccount.getBalances() + // expect(balances[0].amount).toBeGreaterThan(0n) + + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function deposit()"]), + // functionName: "deposit" + // }) + + // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" + + // // fail if value is not bigger than 1 + // // the contract call requires a deposit of at least 1 wei + // const tx1 = { + // to: amoyTestContract as Hex, + // data: encodedCall, + // value: 0 + // } + // const tx2 = { + // to: amoyTestContract as Hex, + // data: encodedCall, + // value: 2 + // } + + // await expect(smartAccount.buildUserOp([tx1, tx2])).rejects.toThrow() + // } + // ) + + // @note Removed untill we implement the Bundler (Pimlico's bundler does no behave as expected in this test) + // test.skip( + // "should simulate a user operation execution, expecting to pass execution", + // async () => { + // const smartAccount = await createSmartAccountClient({ + // signer: walletClient, + // bundlerUrl + // }) + + // const balances = await smartAccount.getBalances() + // expect(balances[0].amount).toBeGreaterThan(0n) + + // const encodedCall = encodeFunctionData({ + // abi: parseAbi(["function deposit()"]), + // functionName: "deposit" + // }) + + // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" + + // // fail if value is not bigger than 1 + // // the contract call requires a deposit of at least 1 wei + // const tx1 = { + // to: amoyTestContract as Hex, + // data: encodedCall, + // value: 2 + // } + // const tx2 = { + // to: amoyTestContract as Hex, + // data: encodedCall, + // value: 2 + // } + + // await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() + // } + // ) + + // test.skip("Should verify supported modes", async () => { + // expect( + // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_SINGLE) + // ).to.be.true + // expect( + // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_BATCH) + // ).to.be.true + // expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_BATCH)).to + // .be.true + // expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_SINGLE)) + // .to.be.true + + // expect( + // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DELEGATE_SINGLE) + // ).to.be.false + // }) +}) diff --git a/tests/account.write.test.ts b/tests/account.write.test.ts new file mode 100644 index 000000000..065ff4dec --- /dev/null +++ b/tests/account.write.test.ts @@ -0,0 +1,227 @@ +import { + http, + type Account, + type Chain, + type Hex, + type WalletClient, + createWalletClient +} from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { + type NexusSmartAccount, + type Transaction, + createSmartAccountClient +} from "../src/account" +import { type TestFileNetworkType, toNetwork } from "./src/testSetup" +import { + getTestAccount, + killNetwork, + toTestClient, + topUp +} from "./src/testUtils" +import type { MasterClient, NetworkConfig } from "./src/testUtils" + +const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" + +describe("account.write", () => { + let network: NetworkConfig + // Nexus Config + let chain: Chain + let bundlerUrl: string + let walletClient: WalletClient + + // Test utils + let testClient: MasterClient + let account: Account + let recipientAccount: Account + let smartAccount: NexusSmartAccount + let smartAccountAddress: Hex + + beforeAll(async () => { + network = await toNetwork(NETWORK_TYPE) + + chain = network.chain + bundlerUrl = network.bundlerUrl + + account = getTestAccount(0) + recipientAccount = getTestAccount(3) + + walletClient = createWalletClient({ + account, + chain, + transport: http() + }) + + testClient = toTestClient(chain, getTestAccount(0)) + + smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + chain + }) + + smartAccountAddress = await smartAccount.getAddress() + }) + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test("should fund the smart account", async () => { + await topUp(testClient, smartAccountAddress) + const [balance] = await smartAccount.getBalances() + expect(balance.amount > 0) + }) + + test("should have account addresses", async () => { + const addresses = await Promise.all([ + account.address, + smartAccount.getAddress() + ]) + expect(addresses.every(Boolean)).to.be.true + expect(addresses).toStrictEqual([ + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + ]) + }) + + test("should send eth", async () => { + const balanceBefore = await testClient.getBalance({ + address: recipientAccount.address + }) + const tx: Transaction = { + to: recipientAccount.address, + value: 1n + } + const { wait } = await smartAccount.sendTransaction(tx) + const { success } = await wait() + const balanceAfter = await testClient.getBalance({ + address: recipientAccount.address + }) + expect(success).toBe(true) + expect(balanceAfter - balanceBefore).toBe(1n) + }) + + test("should send eth twice", async () => { + const balanceBefore = await testClient.getBalance({ + address: recipientAccount.address + }) + const tx: Transaction = { + to: recipientAccount.address, + value: 1n + } + const { wait } = await smartAccount.sendTransaction([tx, tx]) + const { success } = await wait() + const balanceAfter = await testClient.getBalance({ + address: recipientAccount.address + }) + expect(success).toBe(true) + expect(balanceAfter - balanceBefore).toBe(2n) + }) + + // test("install a mock Hook module", async () => { + // const isSupported = await smartAccount.supportsModule(ModuleType.Hook) + // console.log(isSupported, "is supported") + + // const isInstalledBefore = await smartAccount.isModuleInstalled( + // ModuleType.Hook, + // MOCK_HOOK + // ) + // console.log(isInstalledBefore, "is installed before") + + // const userOpReceipt = await smartAccount.installModule(MOCK_HOOK, ModuleType.Hook) + // console.log(userOpReceipt, "user op receipt") + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Hook, + // MOCK_HOOK + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test("get active hook", async () => { + // const activeHook: Address = await smartAccount.getActiveHook() + // console.log(activeHook, "active hook") + // expect(activeHook).toBe(MOCK_HOOK) + // }, 60000) + + // test("uninstall hook module", async () => { + // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // const deInitData = encodeAbiParameters( + // [ + // { name: "prev", type: "address" }, + // { name: "disableModuleData", type: "bytes" } + // ], + // [prevAddress, toHex(stringToBytes(""))] + // ) + // const userOpReceipt = await smartAccount.uninstallModule(MOCK_HOOK, ModuleType.Hook, deInitData) + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Hook, + // MOCK_HOOK + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) + + // test("install a fallback handler Hook module", async () => { + // const isSupported = await smartAccount.supportsModule(ModuleType.Fallback) + // console.log(isSupported, "is supported") + + // const isInstalledBefore = await smartAccount.isModuleInstalled( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER, + // ethers.AbiCoder.defaultAbiCoder().encode( + // ["bytes4"], + // [GENERIC_FALLBACK_SELECTOR as Hex] + // ) as Hex + // ) + // console.log(isInstalledBefore, "is installed before") + + // const userOpReceipt = await smartAccount.installModule(MOCK_FALLBACK_HANDLER, ModuleType.Fallback, ethers.AbiCoder.defaultAbiCoder().encode( + // ["bytes4"], + // [GENERIC_FALLBACK_SELECTOR as Hex] + // ) as Hex) + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER, + // ethers.AbiCoder.defaultAbiCoder().encode( + // ["bytes4"], + // [GENERIC_FALLBACK_SELECTOR as Hex] + // ) as Hex + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test("uninstall handler module", async () => { + // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" + // const deInitData = ethers.AbiCoder.defaultAbiCoder().encode( + // ["bytes4"], + // [GENERIC_FALLBACK_SELECTOR as Hex] + // ) as Hex + // const userOpReceipt = await smartAccount.uninstallModule( + // MOCK_FALLBACK_HANDLER, + // ModuleType.Fallback, + // deInitData + // ) + + // const isInstalled = await smartAccount.isModuleInstalled( + // ModuleType.Fallback, + // MOCK_FALLBACK_HANDLER, + // ethers.AbiCoder.defaultAbiCoder().encode( + // ["bytes4"], + // [GENERIC_FALLBACK_SELECTOR as Hex] + // ) as Hex + // ) + + // expect(userOpReceipt.success).toBe(true) + // expect(isInstalled).toBeFalsy() + // expect(userOpReceipt).toBeTruthy() + // }, 60000) +}) diff --git a/tests/account/read.test.ts b/tests/account/read.test.ts deleted file mode 100644 index 2273f512b..000000000 --- a/tests/account/read.test.ts +++ /dev/null @@ -1,989 +0,0 @@ -import { JsonRpcProvider } from "@ethersproject/providers" -import { Wallet } from "@ethersproject/wallet" -import { - http, - type Hex, - concat, - createPublicClient, - createWalletClient, - encodeAbiParameters, - encodeFunctionData, - encodePacked, - getContract, - hashMessage, - keccak256, - parseAbi, - parseAbiParameters, - toBytes, - toHex -} from "viem" -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { bsc, baseSepolia } from "viem/chains" -import { beforeAll, describe, expect, test } from "vitest" -import { - DEFAULT_BICONOMY_FACTORY_ADDRESS, - ERROR_MESSAGES, - NATIVE_TOKEN_ALIAS, - type NexusSmartAccountConfig, - compareChainIds, - createSmartAccountClient, - makeInstallDataAndHash -} from "../../src/account" -import { getChain } from "../../src/account" -import type { NexusSmartAccount } from "../../src/account/NexusSmartAccount" -import { BiconomyFactoryAbi } from "../../src/account/abi/K1ValidatorFactory" -import { NexusAccountAbi } from "../../src/account/abi/SmartAccount" -import { K1_VALIDATOR, createK1ValidatorModule } from "../../src/modules" -import { - checkBalance, - getAccountDomainStructFields, - getBundlerUrl, - getConfig -} from "../utils" - -describe("Account:Read", () => { - const eip1271MagicValue = "0x1626ba7e" - const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const { - chain, - chainId, - privateKey, - privateKeyTwo, - bundlerUrl, - paymasterUrl - } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - const sender = account.address - const recipient = accountTwo.address - const publicClient = createPublicClient({ - chain, - transport: http() - }) - let [smartAccount, smartAccountTwo]: NexusSmartAccount[] = [] - let [smartAccountAddress, smartAccountAddressTwo]: Hex[] = [] - - const [walletClient, walletClientTwo] = [ - createWalletClient({ - account, - chain, - transport: http() - }), - createWalletClient({ - account: accountTwo, - chain, - transport: http() - }) - ] - - beforeAll(async () => { - ;[smartAccount, smartAccountTwo] = await Promise.all( - [walletClient, walletClientTwo].map((client) => - createSmartAccountClient({ - chainId, - signer: client, - bundlerUrl - // paymasterUrl - }) - ) - ) - ;[smartAccountAddress, smartAccountAddressTwo] = await Promise.all( - [smartAccount, smartAccountTwo].map((account) => - account.getAccountAddress() - ) - ) - }) - - test.concurrent( - "should estimate gas for minting an NFT", - async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const results = await Promise.all([ - smartAccount.getGasEstimate([transaction]), - smartAccount.getGasEstimate([transaction, transaction]) - // smartAccount.getGasEstimate([transaction], { - // paymasterServiceData: { - // mode: PaymasterMode.SPONSORED - // } - // }), - // smartAccount.getGasEstimate([transaction, transaction], { - // paymasterServiceData: { - // mode: PaymasterMode.SPONSORED - // } - // }), - // smartAccount.getGasEstimate([transaction], { - // paymasterServiceData: { - // mode: PaymasterMode.ERC20, - // preferredToken: token - // } - // }), - // await smartAccount.getGasEstimate([transaction, transaction], { - // paymasterServiceData: { - // mode: PaymasterMode.ERC20, - // preferredToken: token - // } - // }) - ]) - - const increasingGasExpenditure = results.every( - (result, i) => result > (results[i - 1] ?? 0) - ) - - expect(increasingGasExpenditure).toBeTruthy() - }, - 60000 - ) - - test.concurrent( - "should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", - async () => { - const account = privateKeyToAccount(`0x${privateKey}`) - - const createSmartAccount = createSmartAccountClient({ - signer: account, - bundlerUrl - }) - - await expect(createSmartAccount).rejects.toThrow( - ERROR_MESSAGES.MISSING_RPC_URL - ) - }, - 50000 - ) - - test.concurrent( - "should get all modules", - async () => { - const modules = smartAccount.getInstalledModules() - if (await smartAccount.isAccountDeployed()) { - expect(modules).resolves - } else { - expect(modules).rejects.toThrow("Account is not deployed") - } - }, - 30000 - ) - - test.concurrent( - "should check if module is enabled on the smart account", - async () => { - const isEnabled = smartAccount.isModuleInstalled({ - type: 'validator', - moduleAddress: K1_VALIDATOR, - }) - if (await smartAccount.isAccountDeployed()) { - expect(isEnabled).resolves.toBeTruthy() - } else { - expect(isEnabled).rejects.toThrow("Account is not deployed") - } - }, - 30000 - ) - - test.concurrent( - "enable mode", - async () => { - const result = makeInstallDataAndHash(walletClient.account.address, [ - { - moduleType: 'validator', - config: walletClient.account.address - } - ]) - expect(result).toBeTruthy() - }, - 30000 - ) - - test.concurrent( - "should create a smartAccountClient from an ethers signer", - async () => { - const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) - const ethersSigner = new Wallet(privateKey, ethersProvider) - - const smartAccount = await createSmartAccountClient({ - signer: ethersSigner, - bundlerUrl, - rpcUrl: chain.rpcUrls.default.http[0] - }) - } - ) - - test.concurrent( - "should pickup the rpcUrl from viem wallet and ethers", - async () => { - const newRpcUrl = "http://localhost:8545" - const defaultRpcUrl = chain.rpcUrls.default.http[0] //http://127.0.0.1:8545" - - const ethersProvider = new JsonRpcProvider(newRpcUrl) - const ethersSignerWithNewRpcUrl = new Wallet(privateKey, ethersProvider) - - const originalEthersProvider = new JsonRpcProvider( - chain.rpcUrls.default.http[0] - ) - const ethersSigner = new Wallet(privateKey, originalEthersProvider) - - const accountOne = privateKeyToAccount(`0x${privateKey}`) - const walletClientWithNewRpcUrl = createWalletClient({ - account: accountOne, - chain, - transport: http(newRpcUrl) - }) - const [ - smartAccountFromEthersWithNewRpc, - smartAccountFromViemWithNewRpc, - smartAccountFromEthersWithOldRpc, - smartAccountFromViemWithOldRpc - ] = await Promise.all([ - createSmartAccountClient({ - chainId, - signer: ethersSignerWithNewRpcUrl, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: newRpcUrl - }), - createSmartAccountClient({ - chainId, - signer: walletClientWithNewRpcUrl, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: newRpcUrl - }), - createSmartAccountClient({ - chainId, - signer: ethersSigner, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: chain.rpcUrls.default.http[0] - }), - createSmartAccountClient({ - chainId, - signer: walletClient, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: chain.rpcUrls.default.http[0] - }) - ]) - - const [ - smartAccountFromEthersWithNewRpcAddress, - smartAccountFromViemWithNewRpcAddress, - smartAccountFromEthersWithOldRpcAddress, - smartAccountFromViemWithOldRpcAddress - ] = await Promise.all([ - smartAccountFromEthersWithNewRpc.getAccountAddress(), - smartAccountFromViemWithNewRpc.getAccountAddress(), - smartAccountFromEthersWithOldRpc.getAccountAddress(), - smartAccountFromViemWithOldRpc.getAccountAddress() - ]) - - expect( - [ - smartAccountFromEthersWithNewRpcAddress, - smartAccountFromViemWithNewRpcAddress, - smartAccountFromEthersWithOldRpcAddress, - smartAccountFromViemWithOldRpcAddress - ].every(Boolean) - ).toBeTruthy() - - expect(smartAccountFromEthersWithNewRpc.rpcProvider.transport.url).toBe( - newRpcUrl - ) - expect(smartAccountFromViemWithNewRpc.rpcProvider.transport.url).toBe( - newRpcUrl - ) - expect(smartAccountFromEthersWithOldRpc.rpcProvider.transport.url).toBe( - defaultRpcUrl - ) - expect(smartAccountFromViemWithOldRpc.rpcProvider.transport.url).toBe( - defaultRpcUrl - ) - } - ) - - test.concurrent( - "should read estimated user op gas values", - async () => { - const tx = { - to: recipient, - data: "0x" - } - - const userOp = await smartAccount.buildUserOp([tx]) - - const estimatedGas = await smartAccount.estimateUserOpGas(userOp) - expect(estimatedGas.maxFeePerGas).toBeTruthy() - expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() - expect(estimatedGas.verificationGasLimit).toBeTruthy() - expect(estimatedGas.callGasLimit).toBeTruthy() - expect(estimatedGas.preVerificationGas).toBeTruthy() - }, - 30000 - ) - - test.concurrent("should have an active validation module", async () => { - const module = smartAccount.activeValidationModule - expect(module).toBeTruthy() - }) - - // @note Ignored untill we implement Paymaster - // test.concurrent( - // "should create a smart account with paymaster by creating instance", - // async () => { - // const paymaster = new Paymaster({ paymasterUrl }) - - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl, - // paymaster - // }) - // expect(smartAccount.paymaster).not.toBeNull() - // expect(smartAccount.paymaster).not.toBeUndefined() - // } - // ) - - test.concurrent( - "should fail to create a smartAccountClient from a walletClient without a chainId", - async () => { - const account = privateKeyToAccount(generatePrivateKey()) - const viemWalletClientNoChainId = createWalletClient({ - account, - transport: http(chain.rpcUrls.default.http[0]) - }) - - expect( - await expect( - createSmartAccountClient({ - signer: viemWalletClientNoChainId, - bundlerUrl, - rpcUrl: chain.rpcUrls.default.http[0] - }) - ).rejects.toThrow("Cannot consume a viem wallet without a chainId") - ) - } - ) - - test.concurrent( - "should fail to create a smartAccountClient from a walletClient without an account", - async () => { - const viemWalletNoAccount = createWalletClient({ - transport: http(chain.rpcUrls.default.http[0]) - }) - - expect(async () => - createSmartAccountClient({ - signer: viemWalletNoAccount, - bundlerUrl, - rpcUrl: chain.rpcUrls.default.http[0] - }) - ).rejects.toThrow("Cannot consume a viem wallet without an account") - } - ) - - test.concurrent("should have account addresses", async () => { - const addresses = await Promise.all([ - sender, - smartAccount.getAddress(), - recipient, - smartAccountTwo.getAddress() - ]) - /* - * addresses: [ - * '0xFA66E705cf2582cF56528386Bb9dFCA119767262', // sender - * '0xe6dBb5C8696d2E0f90B875cbb6ef26E3bBa575AC', // smartAccountSender - * '0x3079B249DFDE4692D7844aA261f8cf7D927A0DA5', // recipient - * '0x5F141ee1390D4c9d033a00CB940E509A4811a5E0' // smartAccountRecipient - * ] - */ - expect(addresses.every(Boolean)).toBeTruthy() - }) - - // test.concurrent( - // "should create a smart account with paymaster with an api key", - // async () => { - // const paymaster = smartAccount.paymaster - // expect(paymaster).not.toBeNull() - // expect(paymaster).not.toBeUndefined() - // } - // ) - - test.concurrent("should not throw and error, chain ids match", async () => { - const mockBundlerUrl = - "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" - const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - - const config: NexusSmartAccountConfig = { - signer: walletClient, - bundlerUrl: mockBundlerUrl, - paymasterUrl: mockPaymasterUrl - } - - await expect( - compareChainIds(walletClient, config, false) - ).resolves.not.toThrow() - }) - - test.concurrent( - "should throw and error, bundlerUrl chain id and paymaster url chain id does not match with validation module", - async () => { - const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - - const k1ValidationModule = await createK1ValidatorModule( - smartAccount.getSigner() - ) - - const config: NexusSmartAccountConfig = { - defaultValidationModule: k1ValidationModule, - activeValidationModule: k1ValidationModule, - bundlerUrl, - paymasterUrl: mockPaymasterUrl - } - - await expect( - compareChainIds(walletClient, config, false) - ).rejects.toThrow() - } - ) - - test.concurrent( - "should throw and error, signer has chain id (56) and paymasterUrl has chain id (11155111)", - async () => { - const mockPaymasterUrl = - "https://paymaster.biconomy.io/api/v1/11155111/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - - const walletClientBsc = createWalletClient({ - account: walletClient.account, - chain: bsc, - transport: http(bsc.rpcUrls.default.http[0]) - }) - - const config: NexusSmartAccountConfig = { - signer: walletClientBsc, - bundlerUrl, - paymasterUrl: mockPaymasterUrl - } - - await expect( - compareChainIds(walletClientBsc, config, false) - ).rejects.toThrow() - } - ) - - test.concurrent("should return chain object for chain id 1", async () => { - const chainId = 1 - const chain = getChain(chainId) - expect(chain.id).toBe(chainId) - }) - - test.concurrent("should have correct fields", async () => { - const chainId = 1 - const chain = getChain(chainId) - ;[ - "blockExplorers", - "contracts", - "fees", - "formatters", - "id", - "name", - "nativeCurrency", - "rpcUrls", - "serializers" - ].every((field) => { - expect(chain).toHaveProperty(field) - }) - }) - - test.concurrent("should throw an error, chain id not found", async () => { - const chainId = 0 - expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) - }) - - test.concurrent( - "should have matching counterFactual address from the contracts with smartAccount.getAddress()", - async () => { - const client = createWalletClient({ - account, - chain, - transport: http() - }) - - const smartAccount = await createSmartAccountClient({ - signer: client, - bundlerUrl, - paymasterUrl - }) - - const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() - - const publicClient = createPublicClient({ - chain, - transport: http() - }) - - const factoryContract = getContract({ - address: DEFAULT_BICONOMY_FACTORY_ADDRESS, - abi: BiconomyFactoryAbi, - client: { public: publicClient, wallet: client } - }) - - const smartAccountAddressFromContracts = - await factoryContract.read.computeAccountAddress([ - await smartAccount.getSmartAccountOwner().getAddress(), - BigInt(0), - [], - 0 - ]) - - expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) - } - ) - - test.concurrent( - "should be deployed to counterfactual address", - async () => { - const accountAddress = await smartAccount.getAccountAddress() - const byteCode = await publicClient.getBytecode({ - address: accountAddress as Hex - }) - if (await smartAccount.isAccountDeployed()) { - expect(byteCode?.length).toBeGreaterThan(2) - } else { - expect(byteCode?.length).toBe(undefined) - } - }, - 10000 - ) - - test.concurrent( - "should check if ecdsaOwnershipModule is enabled", - async () => { - const ecdsaOwnershipModule = K1_VALIDATOR - - expect(ecdsaOwnershipModule).toBe( - smartAccount.activeValidationModule.getAddress() - ) - } - ) - - test.concurrent( - "should fail to deploy a smart account if no native token balance or paymaster", - async () => { - const newPrivateKey = generatePrivateKey() - const newAccount = privateKeyToAccount(newPrivateKey) - - const newViemWallet = createWalletClient({ - account: newAccount, - chain, - transport: http() - }) - - const smartAccount = await createSmartAccountClient({ - signer: newViemWallet, - paymasterUrl, - bundlerUrl - }) - - expect(async () => smartAccount.deploy()).rejects.toThrow( - ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY - ) - } - ) - - test.concurrent( - "should fail to deploy a smart account if already deployed", - async () => { - if (await smartAccount.isAccountDeployed()) { - expect(async () => smartAccount.deploy()).rejects.toThrow( - ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED - ) - } else { - expect(smartAccount.deploy()).resolves - } - }, - 60000 - ) - - test.concurrent.skip("should fetch balances for smartAccount", async () => { - const token = "0x69835C1f31ed0721A05d5711C1d669C10802a3E1" - const tokenBalanceBefore = await checkBalance(smartAccountAddress, token) - const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ - token - ]) - - expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) - }) - - test.concurrent("should error if no recipient exists", async () => { - const token: Hex = "0x69835C1f31ed0721A05d5711C1d669C10802a3E1" - - const txs = [ - { address: token, amount: BigInt(1), recipient: sender }, - { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } - ] - - expect(async () => smartAccount.withdraw(txs)).rejects.toThrow( - ERROR_MESSAGES.NO_RECIPIENT - ) - }) - - test.concurrent( - "should error when withdraw all of native token is attempted without an amount explicitly set", - async () => { - expect(async () => smartAccount.withdraw(null, sender)).rejects.toThrow( - ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT - ) - }, - 6000 - ) - - test.concurrent( - "should check native token balance and more token info for smartAccount", - async () => { - const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() - - expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) - expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) - expect(ethBalanceFromSmartAccount.chainId).toBe(chainId) - expect(ethBalanceFromSmartAccount.decimals).toBe(18) - }, - 60000 - ) - - // @note Skip until we implement the Paymaster - // test.concurrent( - // "should check balance of supported token", - // async () => { - // const tokens = await smartAccount.getSupportedTokens() - // const [firstToken] = tokens - - // expect(tokens.length).toBeGreaterThan(0) - // expect(tokens[0]).toHaveProperty("balance") - // expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) - // }, - // 60000 - // ) - - // @note Nexus SA signature needs to contain the validator module address in the first 20 bytes - test.skip.concurrent( - "should test isValidSignature PersonalSign to be valid", - async () => { - if (await smartAccount.isAccountDeployed()) { - const data = hashMessage("0x1234") - - // Define constants as per the original Solidity function - const DOMAIN_NAME = "Nexus" - const DOMAIN_VERSION = "1.0.0-beta" - const DOMAIN_TYPEHASH = - "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" - const PARENT_TYPEHASH = "PersonalSign(bytes prefixed)" - const chainId = baseSepolia.id - - // Calculate the domain separator - const domainSeparator = keccak256( - encodeAbiParameters( - parseAbiParameters("bytes32, bytes32, bytes32, uint256, address"), - [ - keccak256(toBytes(DOMAIN_TYPEHASH)), - keccak256(toBytes(DOMAIN_NAME)), - keccak256(toBytes(DOMAIN_VERSION)), - BigInt(chainId), - smartAccountAddress - ] - ) - ) - - // Calculate the parent struct hash - const parentStructHash = keccak256( - encodeAbiParameters(parseAbiParameters("bytes32, bytes32"), [ - keccak256(toBytes(PARENT_TYPEHASH)), - hashMessage(data) - ]) - ) - - // Calculate the final hash - const resultHash: Hex = keccak256( - concat(["0x1901", domainSeparator, parentStructHash]) - ) - - const signature = await smartAccount.signMessage(resultHash) - - const contractResponse = await publicClient.readContract({ - address: await smartAccount.getAddress(), - abi: NexusAccountAbi, - functionName: "isValidSignature", - args: [hashMessage(data), signature] - }) - - const viemResponse = await publicClient.verifyMessage({ - address: smartAccountAddress, - message: data, - signature - }) - - expect(contractResponse).toBe(eip1271MagicValue) - expect(viemResponse).toBe(true) - } - } - ) - - test.skip.concurrent( - "should test isValidSignature EIP712Sign to be valid", - async () => { - if (await smartAccount.isAccountDeployed()) { - const data = keccak256("0x1234") - - // Define constants as per the original Solidity function - const DOMAIN_NAME = "Nexus" - const DOMAIN_VERSION = "1.0.0-beta" - const DOMAIN_TYPEHASH = - "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" - const PARENT_TYPEHASH = - "TypedDataSign(Contents contents,bytes1 fields,string name,string version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] extensions) Contents(bytes32 stuff)" - const chainId = baseSepolia.id - - // Calculate the domain separator - const domainSeparator = keccak256( - encodeAbiParameters( - parseAbiParameters("bytes32, bytes32, bytes32, uint256, address"), - [ - keccak256(toBytes(DOMAIN_TYPEHASH)), - keccak256(toBytes(DOMAIN_NAME)), - keccak256(toBytes(DOMAIN_VERSION)), - BigInt(chainId), - smartAccountAddress - ] - ) - ) - - const encodedAccountDomainStructFields = - await getAccountDomainStructFields(publicClient, smartAccountAddress) - - // Calculate the parent struct hash - const parentStructHash = keccak256( - encodePacked( - ["bytes", "bytes"], - [ - encodeAbiParameters(parseAbiParameters("bytes32, bytes32"), [ - keccak256(toBytes(PARENT_TYPEHASH)), - hashMessage(data) - ]), - encodedAccountDomainStructFields - ] - ) - ) - - const dataToSign: Hex = keccak256( - concat(["0x1901" as Hex, domainSeparator, parentStructHash]) - ) - - let signature = await smartAccount.signMessage(dataToSign) - const contentsType: Hex = toHex("Contents(bytes32 stuff)") - signature = encodePacked( - ["bytes", "bytes", "bytes", "bytes", "uint"], - [ - signature, - domainSeparator, - hashMessage(data), - contentsType, - BigInt(contentsType.length) - ] - ) - - const finalSignature = encodePacked( - ["address", "bytes"], - [smartAccount.activeValidationModule.moduleAddress, signature] - ) - - const contents = keccak256( - encodePacked( - ["bytes", "bytes", "bytes"], - ["0x1901", domainSeparator, hashMessage(data)] - ) - ) - - const contractResponse = await publicClient.readContract({ - address: await smartAccount.getAddress(), - abi: NexusAccountAbi, - functionName: "isValidSignature", - args: [contents, finalSignature] - }) - - const viemResponse = await publicClient.verifyMessage({ - address: smartAccountAddress, - message: data, - signature: finalSignature - }) - - expect(contractResponse).toBe(eip1271MagicValue) - expect(viemResponse).toBe(true) - } - } - ) - - // test.concurrent("should call isValidSignature for deployed smart account", async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl - // }) - - // const message = "hello world" - // const signature = await smartAccount.signMessage(message) - - // const isVerified = await publicClient.readContract({ - // address: await smartAccount.getAddress(), - // abi: NexusAccountAbi, - // functionName: "isValidSignature", - // args: [hashMessage(message), signature] - // }) - - // expect(isVerified).toBe(eip1271MagicValue) - // }) - - // test.concurrent("should verifySignature of not deployed", async () => { - // const undeployedSmartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl, - // index: 99n - // }) - // const isDeployed = await undeployedSmartAccount.isAccountDeployed() - // if (!isDeployed) { - // const message = "hello world" - - // const signature = await smartAccount.signMessage(message) - // // OR - // // const signature = await smartAccount.signMessageWith6492(message) - - // const isVerified = await publicClient.readContract({ - // address: await smartAccount.getAddress(), - // abi: NexusAccountAbi, - // functionName: "isValidSignature", - // args: [hashMessage(message), signature] - // }) - - // expect(isVerified).toBe(eip1271MagicValue) - // } - // }) - - // test.concurrent("should verifySignature using viem", async () => { - // const isDeployed = await smartAccount.isAccountDeployed() - // if (isDeployed) { - // const message = "0x123" - - // const signature = await smartAccount.signMessage(message) - - // console.log(signature, 'signature'); - // console.log(hashMessage(message), 'hashMessage(message)'); - - // // const isVerified = await verifyMessage(publicClient, { - // // address: await smartAccount.getAddress(), - // // message, - // // signature, - // // }) - - // const isVerified = await publicClient.readContract({ - // address: await smartAccount.getAddress(), - // abi: NexusAccountAbi, - // functionName: "isValidSignature", - // args: [hashMessage(message), signature] - // }) - - // console.log(isVerified, "isVerified"); - - // expect(isVerified).toBe(eip1271MagicValue) - // } - // }) - - // @note Removed untill we implement the Bundler (Pimlico's bundler does no behave as expected in this test) - // test.concurrent( - // "should simulate a user operation execution, expecting to fail", - // async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl - // }) - - // const balances = await smartAccount.getBalances() - // expect(balances[0].amount).toBeGreaterThan(0n) - - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function deposit()"]), - // functionName: "deposit" - // }) - - // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" - - // // fail if value is not bigger than 1 - // // the contract call requires a deposit of at least 1 wei - // const tx1 = { - // to: amoyTestContract as Hex, - // data: encodedCall, - // value: 0 - // } - // const tx2 = { - // to: amoyTestContract as Hex, - // data: encodedCall, - // value: 2 - // } - - // await expect(smartAccount.buildUserOp([tx1, tx2])).rejects.toThrow() - // } - // ) - - // @note Removed untill we implement the Bundler (Pimlico's bundler does no behave as expected in this test) - // test.concurrent( - // "should simulate a user operation execution, expecting to pass execution", - // async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl - // }) - - // const balances = await smartAccount.getBalances() - // expect(balances[0].amount).toBeGreaterThan(0n) - - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function deposit()"]), - // functionName: "deposit" - // }) - - // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" - - // // fail if value is not bigger than 1 - // // the contract call requires a deposit of at least 1 wei - // const tx1 = { - // to: amoyTestContract as Hex, - // data: encodedCall, - // value: 2 - // } - // const tx2 = { - // to: amoyTestContract as Hex, - // data: encodedCall, - // value: 2 - // } - - // await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() - // } - // ) - - // test.concurrent("Should verify supported modes", async () => { - // expect( - // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_SINGLE) - // ).to.be.true - // expect( - // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_BATCH) - // ).to.be.true - // expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_BATCH)).to - // .be.true - // expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_SINGLE)) - // .to.be.true - - // expect( - // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DELEGATE_SINGLE) - // ).to.be.false - // }) -}) diff --git a/tests/account/write.test.ts b/tests/account/write.test.ts deleted file mode 100644 index 3e03e1eef..000000000 --- a/tests/account/write.test.ts +++ /dev/null @@ -1,336 +0,0 @@ -import { ethers } from "ethers" -import { - http, - type Address, - type Hex, - concat, - createPublicClient, - createWalletClient, - encodeAbiParameters, - encodeFunctionData, - encodePacked, - hexToBytes, - pad, - parseAbi, - parseEther, - stringToBytes, - toBytes, - toHex -} from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { describe, expect, test } from "vitest" -import { - GENERIC_FALLBACK_SELECTOR, - K1_VALIDATOR, - MOCK_EXECUTOR, - MOCK_FALLBACK_HANDLER, - MOCK_HOOK, - MODE_MODULE_ENABLE, - MODULE_TYPE_MULTI, - createK1ValidatorModule, - createOwnableExecutorModule, - makeInstallDataAndHash, - moduleTypeIds -} from "../../src" -import { createSmartAccountClient } from "../../src/account" -import type { UserOpReceipt } from "../../src/bundler" -import { getConfig } from "../utils" - -describe("Account:Write", async () => { - const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } - const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - const token = "0x69835C1f31ed0721A05d5711C1d669C10802a3E1" - const { - chain, - chainId, - privateKey, - privateKeyTwo, - bundlerUrl, - paymasterUrl - } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - const sender = account.address - const recipient = accountTwo.address - const publicClient = createPublicClient({ - chain, - transport: http() - }) - - const [walletClient] = [ - createWalletClient({ - account, - chain, - transport: http() - }) - ] - - const smartAccount = await createSmartAccountClient({ - chainId, - signer: walletClient, - bundlerUrl, - paymasterUrl - }) - - const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) - smartAccount.setActiveExecutionModule(ownableExecutorModule) - - const k1Validator = await createK1ValidatorModule(smartAccount.getSigner()) - - describe("Account:Basics", async () => { - test("Build a user op with pimlico bundler", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - const userOp = await smartAccount.buildUserOp([transaction]) - expect(userOp).toBeTruthy() - }, 60000) - - test("Mint NFT - Single Call", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - - const isInstalled = await smartAccount.isModuleInstalled({type: k1Validator.type, moduleAddress: k1Validator.moduleAddress, data: k1Validator.data}); - console.log(isInstalled); - - const transaction = { - to: nftAddress, // NFT address - data: encodedCall - } - - const response = await smartAccount.sendTransaction([transaction]) - console.log(response, "response") - - const receipt = await response.wait() - console.log(receipt, "receipt") - - expect(receipt.userOpHash).toBeTruthy() - }, 60000) - - test.skip("Use enable mode", async () => { - const counterAddress = "0x6BFE41FF0605a87911c0542bF958691ea2ac77f8" // base baseSepolia - - const counterBefore = await publicClient.readContract({ - address: counterAddress, - abi: parseAbi(["function getCount() external view returns(uint256)"]), - functionName: "getCount" - }) - - console.log(counterBefore, "counter before") - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function increment() external view returns(uint256)"]), - functionName: "increment" - }) - const userOp = await smartAccount.buildUserOp( - [{ to: counterAddress, data: encodedCall }], - { nonceOptions: { validationMode: MODE_MODULE_ENABLE } } - ) - - // Prepare Enable Mode Data - const validatorConfig = pad( - toBytes("0xdB9426d6cE27071b3a806f95B0d9430455d4d4c6"), - { size: 32 } - ) - const executorConfig = pad(hexToBytes("0x2222"), { size: 32 }) - - const validatorInstallData = concat([ - toBytes(moduleTypeIds['validator']), - validatorConfig - ]) - - const executorInstallData = concat([ - toBytes(moduleTypeIds['executor']), - executorConfig - ]) - - const [multiInstallData, hashToSign] = makeInstallDataAndHash( - walletClient.account?.address, - [ - { - moduleType: 'validator', - config: toHex(validatorInstallData) - }, - { - moduleType: 'executor', - config: toHex(executorInstallData) - } - ] - ) - const enableModeSig = encodePacked( - ["address", "bytes"], - [K1_VALIDATOR, await smartAccount.signMessage(hashToSign)] - ) - - const enableModeSigPrefix = concat([ - toBytes(MODULE_TYPE_MULTI), - pad(toBytes(BigInt(hexToBytes(multiInstallData as Hex).length)), { - size: 4, - dir: "right" - }), - hexToBytes(multiInstallData as Hex), - pad(toBytes(BigInt(hexToBytes(enableModeSig).length)), { - size: 4, - dir: "right" - }), - hexToBytes(enableModeSig) - ]) - - userOp.signature = encodePacked(['bytes', 'bytes'], [toHex(enableModeSigPrefix), userOp.signature!]); - - const response = await smartAccount.sendUserOp(userOp); - const receipt = await response.wait(); - - console.log(receipt, "receipt"); - - const counterAfter = await publicClient.readContract({ - address: counterAddress, - abi: parseAbi(["function getCount() external view returns(uint256)"]), - functionName: "getCount" - }) - - console.log(counterAfter, "counter after"); - }, 60000) - - test("Mint NFT's - Batch Call", async () => { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [recipient] - }) - const transaction = { - to: nftAddress, // NFT address - data: encodedCall, - value: 0n - } - const userOpResponse = await smartAccount.sendTransaction([ - transaction, - transaction - ]) - const userOpReceipt: UserOpReceipt = await userOpResponse.wait() - console.log(userOpReceipt.userOpHash, "user op hash") - - expect(userOpReceipt.success).toBe(true) - }, 60000) - }) - - // describe("Account:Hook Module Tests", async () => { - // test("install a mock Hook module", async () => { - // const isSupported = await smartAccount.supportsModule(ModuleType.Hook) - // console.log(isSupported, "is supported") - - // const isInstalledBefore = await smartAccount.isModuleInstalled( - // ModuleType.Hook, - // MOCK_HOOK - // ) - // console.log(isInstalledBefore, "is installed before") - - // const userOpReceipt = await smartAccount.installModule(MOCK_HOOK, ModuleType.Hook) - // console.log(userOpReceipt, "user op receipt") - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Hook, - // MOCK_HOOK - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) - - // test("get active hook", async () => { - // const activeHook: Address = await smartAccount.getActiveHook() - // console.log(activeHook, "active hook") - // expect(activeHook).toBe(MOCK_HOOK) - // }, 60000) - - // test("uninstall hook module", async () => { - // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - // const deInitData = encodeAbiParameters( - // [ - // { name: "prev", type: "address" }, - // { name: "disableModuleData", type: "bytes" } - // ], - // [prevAddress, toHex(stringToBytes(""))] - // ) - // const userOpReceipt = await smartAccount.uninstallModule(MOCK_HOOK, ModuleType.Hook, deInitData) - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Hook, - // MOCK_HOOK - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) - // }) - - // describe("Account:Fallback Handler Module Tests", async () => { - // test("install a fallback handler Hook module", async () => { - // const isSupported = await smartAccount.supportsModule(ModuleType.Fallback) - // console.log(isSupported, "is supported") - - // const isInstalledBefore = await smartAccount.isModuleInstalled( - // ModuleType.Fallback, - // MOCK_FALLBACK_HANDLER, - // ethers.AbiCoder.defaultAbiCoder().encode( - // ["bytes4"], - // [GENERIC_FALLBACK_SELECTOR as Hex] - // ) as Hex - // ) - // console.log(isInstalledBefore, "is installed before") - - // const userOpReceipt = await smartAccount.installModule(MOCK_FALLBACK_HANDLER, ModuleType.Fallback, ethers.AbiCoder.defaultAbiCoder().encode( - // ["bytes4"], - // [GENERIC_FALLBACK_SELECTOR as Hex] - // ) as Hex) - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Fallback, - // MOCK_FALLBACK_HANDLER, - // ethers.AbiCoder.defaultAbiCoder().encode( - // ["bytes4"], - // [GENERIC_FALLBACK_SELECTOR as Hex] - // ) as Hex - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) - - // test("uninstall handler module", async () => { - // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - // const deInitData = ethers.AbiCoder.defaultAbiCoder().encode( - // ["bytes4"], - // [GENERIC_FALLBACK_SELECTOR as Hex] - // ) as Hex - // const userOpReceipt = await smartAccount.uninstallModule( - // MOCK_FALLBACK_HANDLER, - // ModuleType.Fallback, - // deInitData - // ) - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Fallback, - // MOCK_FALLBACK_HANDLER, - // ethers.AbiCoder.defaultAbiCoder().encode( - // ["bytes4"], - // [GENERIC_FALLBACK_SELECTOR as Hex] - // ) as Hex - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) - // }) -}) diff --git a/tests/globalSetup.ts b/tests/globalSetup.ts deleted file mode 100644 index 4f11ec5ae..000000000 --- a/tests/globalSetup.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { config } from "dotenv" -import { getConfig } from "./utils.js" - -export default function setup({ provide: _ }) { - config() - getConfig() -} diff --git a/tests/modules.k1Validator.write.test.ts b/tests/modules.k1Validator.write.test.ts new file mode 100644 index 000000000..7995e8456 --- /dev/null +++ b/tests/modules.k1Validator.write.test.ts @@ -0,0 +1,161 @@ +import { + http, + type Account, + type Chain, + type Hex, + type WalletClient, + createWalletClient, + encodeFunctionData, + encodePacked +} from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import addresses from "../src/__contracts/addresses" +import { + type NexusSmartAccount, + type Transaction, + createSmartAccountClient +} from "../src/account" +import { CounterAbi } from "./src/__contracts/abi" +import { mockAddresses } from "./src/__contracts/mockAddresses" +import { OWNABLE_VALIDATOR } from "./src/callDatas" +import { type TestFileNetworkType, toNetwork } from "./src/testSetup" +import { + getTestAccount, + killNetwork, + toTestClient, + topUp +} from "./src/testUtils" +import type { MasterClient, NetworkConfig } from "./src/testUtils" + +const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" + +describe("modules.k1Validator.write", () => { + let network: NetworkConfig + // Nexus Config + let chain: Chain + let bundlerUrl: string + let walletClient: WalletClient + + // Test utils + let testClient: MasterClient + let account: Account + let recipientAccount: Account + let smartAccount: NexusSmartAccount + let smartAccountAddress: Hex + + beforeAll(async () => { + network = await toNetwork(NETWORK_TYPE) + + chain = network.chain + bundlerUrl = network.bundlerUrl + + account = getTestAccount(0) + recipientAccount = getTestAccount(3) + + walletClient = createWalletClient({ + account, + chain, + transport: http() + }) + + testClient = toTestClient(chain, getTestAccount(0)) + + smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + chain + }) + + smartAccountAddress = await smartAccount.getAddress() + }) + + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test("should fund the smart account", async () => { + await topUp(testClient, smartAccountAddress) + const [balance] = await smartAccount.getBalances() + expect(balance.amount > 0) + }) + + test("should have account addresses", async () => { + const addresses = await Promise.all([ + account.address, + smartAccount.getAddress() + ]) + expect(addresses.every(Boolean)).to.be.true + expect(addresses).toStrictEqual([ + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + ]) + }) + + test("should send eth", async () => { + const balanceBefore = await testClient.getBalance({ + address: recipientAccount.address + }) + const tx: Transaction = { + to: recipientAccount.address, + value: 1n + } + const { wait } = await smartAccount.sendTransaction(tx) + const { success } = await wait() + const balanceAfter = await testClient.getBalance({ + address: recipientAccount.address + }) + expect(success).toBe(true) + expect(balanceAfter - balanceBefore).toBe(1n) + }) + + test("should install k1 Validator with 1 owner", async () => { + const isInstalledBefore = await smartAccount.isModuleInstalled({ + type: "validator", + moduleAddress: addresses.K1Validator + }) + + if (!isInstalledBefore) { + const { wait } = await smartAccount.installModule({ + moduleAddress: addresses.K1Validator, + type: "validator", + data: encodePacked(["address"], [await smartAccount.getAddress()]) + }) + + const { success: installSuccess } = await wait() + expect(installSuccess).toBe(true) + + const { wait: uninstallWait } = await smartAccount.uninstallModule({ + moduleAddress: addresses.K1Validator, + type: "validator", + data: encodePacked(["address"], [await smartAccount.getAddress()]) + }) + const { success: uninstallSuccess } = await uninstallWait() + expect(uninstallSuccess).toBe(true) + } + }, 60000) + + test.skip("should have the Ownable Validator Module installed", async () => { + const isInstalled = await smartAccount.isModuleInstalled({ + type: "validator", + moduleAddress: OWNABLE_VALIDATOR + }) + expect(isInstalled).toBeTruthy() + }, 60000) + + test("should perform a contract interaction", async () => { + const encodedCall = encodeFunctionData({ + abi: CounterAbi, + functionName: "incrementNumber" + }) + + const transaction = { + to: mockAddresses.Counter, + data: encodedCall + } + + const response = await smartAccount.sendTransaction([transaction]) + const receipt = await response.wait() + + expect(receipt.success).toBe(true) + }, 60000) +}) diff --git a/tests/modules.ownableExecutor.read.test.ts b/tests/modules.ownableExecutor.read.test.ts new file mode 100644 index 000000000..1e9336d99 --- /dev/null +++ b/tests/modules.ownableExecutor.read.test.ts @@ -0,0 +1,114 @@ +import { + http, + type Account, + type Chain, + type Hex, + type WalletClient, + createWalletClient +} from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { + type NexusSmartAccount, + type Transaction, + createSmartAccountClient +} from "../src/account" +import { createOwnableExecutorModule } from "../src/modules" +import { OWNABLE_EXECUTOR } from "./src/callDatas" +import { type TestFileNetworkType, toNetwork } from "./src/testSetup" +import { + getTestAccount, + killNetwork, + toTestClient, + topUp +} from "./src/testUtils" +import type { MasterClient, NetworkConfig } from "./src/testUtils" + +const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" + +describe("modules.ownable.executor.read", () => { + let network: NetworkConfig + // Nexus Config + let chain: Chain + let bundlerUrl: string + let walletClient: WalletClient + + // Test utils + let testClient: MasterClient + let account: Account + let recipientAccount: Account + let smartAccount: NexusSmartAccount + let smartAccountAddress: Hex + + beforeAll(async () => { + network = await toNetwork(NETWORK_TYPE) + + chain = network.chain + bundlerUrl = network.bundlerUrl + + account = getTestAccount(0) + recipientAccount = getTestAccount(3) + + walletClient = createWalletClient({ + account, + chain, + transport: http() + }) + + testClient = toTestClient(chain, getTestAccount(0)) + + smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + chain + }) + + smartAccountAddress = await smartAccount.getAddress() + }) + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test("should fund the smart account", async () => { + await topUp(testClient, smartAccountAddress) + const [balance] = await smartAccount.getBalances() + expect(balance.amount > 0) + }) + + test("should have account addresses", async () => { + const addresses = await Promise.all([ + account.address, + smartAccount.getAddress() + ]) + expect(addresses.every(Boolean)).to.be.true + expect(addresses).toStrictEqual([ + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + ]) + }) + + test("should send eth", async () => { + const balanceBefore = await testClient.getBalance({ + address: recipientAccount.address + }) + const tx: Transaction = { + to: recipientAccount.address, + value: 1n + } + const { wait } = await smartAccount.sendTransaction(tx) + const { success } = await wait() + const balanceAfter = await testClient.getBalance({ + address: recipientAccount.address + }) + expect(success).toBe(true) + expect(balanceAfter - balanceBefore).toBe(1n) + }) + + test.skip("should initialize Ownable Executor Module with correct owners", async () => { + const ownableExecutorModule = await createOwnableExecutorModule( + smartAccount, + OWNABLE_EXECUTOR + ) + const owners = await ownableExecutorModule.getOwners(OWNABLE_EXECUTOR) + expect(owners).toStrictEqual(ownableExecutorModule.owners) + }) +}) diff --git a/tests/modules.ownableExecutor.write.test.ts b/tests/modules.ownableExecutor.write.test.ts new file mode 100644 index 000000000..415221823 --- /dev/null +++ b/tests/modules.ownableExecutor.write.test.ts @@ -0,0 +1,371 @@ +import { + http, + type Account, + type Chain, + type Hex, + type WalletClient, + createWalletClient +} from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { + type NexusSmartAccount, + type Transaction, + createSmartAccountClient +} from "../src/account" +import { type TestFileNetworkType, toNetwork } from "./src/testSetup" +import { + getTestAccount, + killNetwork, + toTestClient, + topUp +} from "./src/testUtils" +import type { MasterClient, NetworkConfig } from "./src/testUtils" + +const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" + +describe("modules.ownable.executor.write", () => { + let network: NetworkConfig + // Nexus Config + let chain: Chain + let bundlerUrl: string + let walletClient: WalletClient + + // Test utils + let testClient: MasterClient + let account: Account + let recipientAccount: Account + let smartAccount: NexusSmartAccount + let smartAccountAddress: Hex + + beforeAll(async () => { + network = await toNetwork(NETWORK_TYPE) + + chain = network.chain + bundlerUrl = network.bundlerUrl + + account = getTestAccount(0) + recipientAccount = getTestAccount(3) + + walletClient = createWalletClient({ + account, + chain, + transport: http() + }) + + testClient = toTestClient(chain, getTestAccount(0)) + + smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + chain + }) + + smartAccountAddress = await smartAccount.getAddress() + }) + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test("should fund the smart account", async () => { + await topUp(testClient, smartAccountAddress) + const [balance] = await smartAccount.getBalances() + expect(balance.amount > 0) + }) + + test("should have account addresses", async () => { + const addresses = await Promise.all([ + account.address, + smartAccount.getAddress() + ]) + expect(addresses.every(Boolean)).to.be.true + expect(addresses).toStrictEqual([ + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + ]) + }) + + test("should send eth", async () => { + const balanceBefore = await testClient.getBalance({ + address: recipientAccount.address + }) + const tx: Transaction = { + to: recipientAccount.address, + value: 1n + } + const { wait } = await smartAccount.sendTransaction(tx) + const { success } = await wait() + const balanceAfter = await testClient.getBalance({ + address: recipientAccount.address + }) + expect(success).toBe(true) + expect(balanceAfter - balanceBefore).toBe(1n) + }) + + // test.skip("install Ownable Executor", async () => { + // let isInstalled = await smartAccount.isModuleInstalled({ + // type: 'executor', + // moduleAddress: OWNABLE_EXECUTOR + // }) + + // if (!isInstalled) { + // const receipt = await smartAccount.installModule({ + // moduleAddress: ownableExecutorModule.moduleAddress, + // type: ownableExecutorModule.type, + // data: ownableExecutorModule.data + // }) + + // smartAccount.setActiveExecutionModule(ownableExecutorModule) + + // expect(receipt.success).toBe(true) + // } + // }, 60000) + + // test.skip("uninstall Ownable Executor", async () => { + // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // bundlerUrl + // }) + + // const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, OWNABLE_EXECUTOR) + + // let isInstalled = await smartAccount2.isModuleInstalled({ + // type: 'executor', + // moduleAddress: OWNABLE_EXECUTOR + // }) + + // if (isInstalled) { + // await smartAccount2.uninstallModule({ + // moduleAddress: ownableExecutorModule2.moduleAddress, + // type: ownableExecutorModule2.type, + // data: ownableExecutorModule2.data + // }) + // } + + // }, 60000) + + // test.skip("Ownable Executor Module should be installed", async () => { + // const isInstalled = await smartAccount.isModuleInstalled({ + // type: 'executor', + // moduleAddress: OWNABLE_EXECUTOR + // }) + // console.log(isInstalled, "isInstalled") + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test.skip("should add an owner to the module", async () => { + // const ownersBefore = await ownableExecutorModule.getOwners() + // const isOwnerBefore = ownersBefore.includes(accountTwo.address) + + // if (isOwnerBefore) { + // console.log("Owner already exists in list, skipping test case ...") + // return + // } + + // const userOpReceipt = await ownableExecutorModule.addOwner( + // accountTwo.address + // ) + + // const owners = await ownableExecutorModule.getOwners() + // const isOwner = owners.includes(accountTwo.address) + + // expect(isOwner).toBeTruthy() + // expect(userOpReceipt.success).toBeTruthy() + // }, 60000) + + // test.skip("EOA 2 can execute actions on behalf of SA 1", async () => { + // const valueToTransfer = parseEther("0.1") + // const recipient = accountTwo.address + // const transferEncodedCall = encodeFunctionData({ + // abi: parseAbi(["function transfer(address to, uint256 value)"]), + // functionName: "transfer", + // args: [recipient, valueToTransfer] + // }) + + // const owners = await ownableExecutorModule.getOwners() + // const isOwner = owners.includes(accountTwo.address) + // expect(isOwner).toBeTruthy() + + // const balanceBefore = await smartAccount.getBalances([token]) + // console.log("balanceBefore", balanceBefore) + + // const calldata = encodeFunctionData({ + // abi: parseAbi([ + // "function executeOnOwnedAccount(address ownedAccount, bytes callData)" + // ]), + // functionName: "executeOnOwnedAccount", + // args: [ + // await smartAccount.getAddress(), + // encodePacked( + // ["address", "uint256", "bytes"], + // [token, BigInt(Number(0)), transferEncodedCall] + // ) + // ] + // }) + + // // EOA 2 (walletClientTwo) executes an action on behalf of SA 1 which is owned by EOA 1 (walletClientOne) + // const txHash = await walletClientTwo.sendTransaction({ + // account: accountTwo, // Called by delegated EOA owner + // to: ownableExecutorModule.moduleAddress, + // data: calldata, + // value: 0n + // }) + + // const balanceAfter = await smartAccount.getBalances([token]) + // console.log("balanceAfter", balanceAfter) + + // expect(txHash).toBeTruthy() + // }, 60000) + + // test("SA 2 can execute actions on behalf of SA 1", async () => { + // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // bundlerUrl + // }) + + // const valueToTransfer = parseEther("0.1") + // const recipient = accountTwo.address + // const transferEncodedCall = encodeFunctionData({ + // abi: parseAbi(["function transfer(address to, uint256 value)"]), + // functionName: "transfer", + // args: [recipient, valueToTransfer] + // }) + + // const transferTransaction = { + // to: token, + // data: transferEncodedCall, + // value: 0n + // } + + // smartAccount2.setActiveExecutionModule(ownableExecutorModule) + // const receipt = await smartAccount2.sendTransactionWithExecutor([transferTransaction], await smartAccount.getAddress()); + // console.log(receipt, "receipt"); + + // expect(receipt.userOpHash).toBeTruthy() + // expect(receipt.success).toBe(true) + // }, 60000) + + // test.skip("SA 2 can execute actions on behalf of SA 1 using module instance instead of smart account instance", async () => { + // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // bundlerUrl + // }) + + // const initData = encodePacked( + // ["address"], + // [await smartAccount2.getAddress()] + // ) + // const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, OWNABLE_EXECUTOR, initData) + + // // First, we need to install the OwnableExecutor module on SA 2 + // let isInstalled = await smartAccount2.isModuleInstalled({ + // type: 'executor', + // moduleAddress: OWNABLE_EXECUTOR + // }) + + // if (!isInstalled) { + // await smartAccount2.installModule({ + // moduleAddress: ownableExecutorModule2.moduleAddress, + // type: ownableExecutorModule2.type, + // data: ownableExecutorModule2.data + // }) + // } + + // smartAccount2.setActiveExecutionModule(ownableExecutorModule) + + // const valueToTransfer = parseEther("0.1") + // const recipient = accountTwo.address + // const transferEncodedCall = encodeFunctionData({ + // abi: parseAbi(["function transfer(address to, uint256 value)"]), + // functionName: "transfer", + // args: [recipient, valueToTransfer] + // }) + + // const owners = await ownableExecutorModule2.getOwners() + + // // check if SA 2 is as an owner of SA 1 + // const isOwner = owners.includes(await smartAccount2.getAddress()) + // if(!isOwner) { + // const userOpReceipt = await ownableExecutorModule2.addOwner( + // await smartAccount2.getAddress() + // ) + // expect(userOpReceipt.success).toBeTruthy() + // } + + // const transferTransaction = { + // target: token as `0x${string}`, + // callData: transferEncodedCall, + // value: 0n + // } + + // smartAccount2.setActiveExecutionModule(ownableExecutorModule2) + // // SA 2 will execute the transferTransaction on behalf of SA 1 (smartAccount) + // const receipt = await ownableExecutorModule2.execute(transferTransaction, await smartAccount.getAddress()); + // console.log(receipt, "receipt"); + + // expect(receipt.userOpHash).toBeTruthy() + // expect(receipt.success).toBe(true) + // }, 60000) + + // test.skip("should remove an owner from the module", async () => { + // const userOpReceipt = await ownableExecutorModule.removeOwner( + // accountTwo.address + // ) + // const owners = await ownableExecutorModule.getOwners() + // const isOwner = owners.includes(accountTwo.address) + + // expect(isOwner).toBeFalsy() + // expect(userOpReceipt.success).toBeTruthy() + // }, 60000) + + // test.skip("should use rhinestone to call ownable executor", async () => { + // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // bundlerUrl + // }) + + // const initData = encodePacked( + // ["address"], + // [await smartAccount2.getAddress()] + // ) + + // const ownableExecutorModule2 = getOwnableExecuter({ + // owner: await smartAccount2.getAddress(), + // }); + + // // First, we need to install the OwnableExecutor module on SA 2 + // let isInstalled = await smartAccount2.isModuleInstalled({ + // type: 'executor', + // module: OWNABLE_EXECUTOR + // }) + + // if (!isInstalled) { + // await smartAccount2.installModule({ + // module: ownableExecutorModule2.module, + // type: ownableExecutorModule2.type, + // data: ownableExecutorModule2.initData + // }) + // } + + // smartAccount2.setActiveExecutionModule(ownableExecutorModule) + + // const valueToTransfer = parseEther("0.1") + // const recipient = accountTwo.address + // const transferEncodedCall = encodeFunctionData({ + // abi: parseAbi(["function transfer(address to, uint256 value)"]), + // functionName: "transfer", + // args: [recipient, valueToTransfer] + // }) + + // const transferTransaction = { + // target: token as `0x${string}`, + // callData: transferEncodedCall, + // value: 0n + // } + + // const execution = getExecuteOnOwnedAccountAction({ownedAccount: await smartAccount.getAddress(), execution: transferTransaction}) + // const receipt = await smartAccount2.sendTransaction([{to: execution.target, data: execution.callData, value: 0n}]); + // console.log(receipt, "receipt"); + + // expect(receipt.userOpHash).toBeTruthy() + // }, 60000) +}) diff --git a/tests/modules.ownableValidator.install.write.test.ts b/tests/modules.ownableValidator.install.write.test.ts new file mode 100644 index 000000000..680b4ca87 --- /dev/null +++ b/tests/modules.ownableValidator.install.write.test.ts @@ -0,0 +1,371 @@ +import { + http, + type Account, + type Chain, + type Hex, + type WalletClient, + createWalletClient +} from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { + type NexusSmartAccount, + type Transaction, + createSmartAccountClient +} from "../src/account" +import { type TestFileNetworkType, toNetwork } from "./src/testSetup" +import { + getTestAccount, + killNetwork, + toTestClient, + topUp +} from "./src/testUtils" +import type { MasterClient, NetworkConfig } from "./src/testUtils" + +const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" + +describe("modules.ownable.validator.install.write", () => { + let network: NetworkConfig + // Nexus Config + let chain: Chain + let bundlerUrl: string + let walletClient: WalletClient + + // Test utils + let testClient: MasterClient + let account: Account + let recipientAccount: Account + let smartAccount: NexusSmartAccount + let smartAccountAddress: Hex + + beforeAll(async () => { + network = await toNetwork(NETWORK_TYPE) + + chain = network.chain + bundlerUrl = network.bundlerUrl + + account = getTestAccount(0) + recipientAccount = getTestAccount(3) + + walletClient = createWalletClient({ + account, + chain, + transport: http() + }) + + testClient = toTestClient(chain, getTestAccount(0)) + + smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + chain + }) + + smartAccountAddress = await smartAccount.getAddress() + }) + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test("should fund the smart account", async () => { + await topUp(testClient, smartAccountAddress) + const [balance] = await smartAccount.getBalances() + expect(balance.amount > 0) + }) + + test("should have account addresses", async () => { + const addresses = await Promise.all([ + account.address, + smartAccount.getAddress() + ]) + expect(addresses.every(Boolean)).to.be.true + expect(addresses).toStrictEqual([ + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + ]) + }) + + test("should send eth", async () => { + const balanceBefore = await testClient.getBalance({ + address: recipientAccount.address + }) + const tx: Transaction = { + to: recipientAccount.address, + value: 1n + } + const { wait } = await smartAccount.sendTransaction(tx) + const { success } = await wait() + const balanceAfter = await testClient.getBalance({ + address: recipientAccount.address + }) + expect(success).toBe(true) + expect(balanceAfter - balanceBefore).toBe(1n) + }) + + // test.skip("install Ownable Executor", async () => { + // let isInstalled = await smartAccount.isModuleInstalled({ + // type: 'executor', + // moduleAddress: OWNABLE_EXECUTOR + // }) + + // if (!isInstalled) { + // const receipt = await smartAccount.installModule({ + // moduleAddress: ownableExecutorModule.moduleAddress, + // type: ownableExecutorModule.type, + // data: ownableExecutorModule.data + // }) + + // smartAccount.setActiveExecutionModule(ownableExecutorModule) + + // expect(receipt.success).toBe(true) + // } + // }, 60000) + + // test.skip("uninstall Ownable Executor", async () => { + // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // bundlerUrl + // }) + + // const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, OWNABLE_EXECUTOR) + + // let isInstalled = await smartAccount2.isModuleInstalled({ + // type: 'executor', + // moduleAddress: OWNABLE_EXECUTOR + // }) + + // if (isInstalled) { + // await smartAccount2.uninstallModule({ + // moduleAddress: ownableExecutorModule2.moduleAddress, + // type: ownableExecutorModule2.type, + // data: ownableExecutorModule2.data + // }) + // } + + // }, 60000) + + // test.skip("Ownable Executor Module should be installed", async () => { + // const isInstalled = await smartAccount.isModuleInstalled({ + // type: 'executor', + // moduleAddress: OWNABLE_EXECUTOR + // }) + // console.log(isInstalled, "isInstalled") + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test.skip("should add an owner to the module", async () => { + // const ownersBefore = await ownableExecutorModule.getOwners() + // const isOwnerBefore = ownersBefore.includes(accountTwo.address) + + // if (isOwnerBefore) { + // console.log("Owner already exists in list, skipping test case ...") + // return + // } + + // const userOpReceipt = await ownableExecutorModule.addOwner( + // accountTwo.address + // ) + + // const owners = await ownableExecutorModule.getOwners() + // const isOwner = owners.includes(accountTwo.address) + + // expect(isOwner).toBeTruthy() + // expect(userOpReceipt.success).toBeTruthy() + // }, 60000) + + // test.skip("EOA 2 can execute actions on behalf of SA 1", async () => { + // const valueToTransfer = parseEther("0.1") + // const recipient = accountTwo.address + // const transferEncodedCall = encodeFunctionData({ + // abi: parseAbi(["function transfer(address to, uint256 value)"]), + // functionName: "transfer", + // args: [recipient, valueToTransfer] + // }) + + // const owners = await ownableExecutorModule.getOwners() + // const isOwner = owners.includes(accountTwo.address) + // expect(isOwner).toBeTruthy() + + // const balanceBefore = await smartAccount.getBalances([token]) + // console.log("balanceBefore", balanceBefore) + + // const calldata = encodeFunctionData({ + // abi: parseAbi([ + // "function executeOnOwnedAccount(address ownedAccount, bytes callData)" + // ]), + // functionName: "executeOnOwnedAccount", + // args: [ + // await smartAccount.getAddress(), + // encodePacked( + // ["address", "uint256", "bytes"], + // [token, BigInt(Number(0)), transferEncodedCall] + // ) + // ] + // }) + + // // EOA 2 (walletClientTwo) executes an action on behalf of SA 1 which is owned by EOA 1 (walletClientOne) + // const txHash = await walletClientTwo.sendTransaction({ + // account: accountTwo, // Called by delegated EOA owner + // to: ownableExecutorModule.moduleAddress, + // data: calldata, + // value: 0n + // }) + + // const balanceAfter = await smartAccount.getBalances([token]) + // console.log("balanceAfter", balanceAfter) + + // expect(txHash).toBeTruthy() + // }, 60000) + + // test("SA 2 can execute actions on behalf of SA 1", async () => { + // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // bundlerUrl + // }) + + // const valueToTransfer = parseEther("0.1") + // const recipient = accountTwo.address + // const transferEncodedCall = encodeFunctionData({ + // abi: parseAbi(["function transfer(address to, uint256 value)"]), + // functionName: "transfer", + // args: [recipient, valueToTransfer] + // }) + + // const transferTransaction = { + // to: token, + // data: transferEncodedCall, + // value: 0n + // } + + // smartAccount2.setActiveExecutionModule(ownableExecutorModule) + // const receipt = await smartAccount2.sendTransactionWithExecutor([transferTransaction], await smartAccount.getAddress()); + // console.log(receipt, "receipt"); + + // expect(receipt.userOpHash).toBeTruthy() + // expect(receipt.success).toBe(true) + // }, 60000) + + // test.skip("SA 2 can execute actions on behalf of SA 1 using module instance instead of smart account instance", async () => { + // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // bundlerUrl + // }) + + // const initData = encodePacked( + // ["address"], + // [await smartAccount2.getAddress()] + // ) + // const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, OWNABLE_EXECUTOR, initData) + + // // First, we need to install the OwnableExecutor module on SA 2 + // let isInstalled = await smartAccount2.isModuleInstalled({ + // type: 'executor', + // moduleAddress: OWNABLE_EXECUTOR + // }) + + // if (!isInstalled) { + // await smartAccount2.installModule({ + // moduleAddress: ownableExecutorModule2.moduleAddress, + // type: ownableExecutorModule2.type, + // data: ownableExecutorModule2.data + // }) + // } + + // smartAccount2.setActiveExecutionModule(ownableExecutorModule) + + // const valueToTransfer = parseEther("0.1") + // const recipient = accountTwo.address + // const transferEncodedCall = encodeFunctionData({ + // abi: parseAbi(["function transfer(address to, uint256 value)"]), + // functionName: "transfer", + // args: [recipient, valueToTransfer] + // }) + + // const owners = await ownableExecutorModule2.getOwners() + + // // check if SA 2 is as an owner of SA 1 + // const isOwner = owners.includes(await smartAccount2.getAddress()) + // if(!isOwner) { + // const userOpReceipt = await ownableExecutorModule2.addOwner( + // await smartAccount2.getAddress() + // ) + // expect(userOpReceipt.success).toBeTruthy() + // } + + // const transferTransaction = { + // target: token as `0x${string}`, + // callData: transferEncodedCall, + // value: 0n + // } + + // smartAccount2.setActiveExecutionModule(ownableExecutorModule2) + // // SA 2 will execute the transferTransaction on behalf of SA 1 (smartAccount) + // const receipt = await ownableExecutorModule2.execute(transferTransaction, await smartAccount.getAddress()); + // console.log(receipt, "receipt"); + + // expect(receipt.userOpHash).toBeTruthy() + // expect(receipt.success).toBe(true) + // }, 60000) + + // test.skip("should remove an owner from the module", async () => { + // const userOpReceipt = await ownableExecutorModule.removeOwner( + // accountTwo.address + // ) + // const owners = await ownableExecutorModule.getOwners() + // const isOwner = owners.includes(accountTwo.address) + + // expect(isOwner).toBeFalsy() + // expect(userOpReceipt.success).toBeTruthy() + // }, 60000) + + // test.skip("should use rhinestone to call ownable executor", async () => { + // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // bundlerUrl + // }) + + // const initData = encodePacked( + // ["address"], + // [await smartAccount2.getAddress()] + // ) + + // const ownableExecutorModule2 = getOwnableExecuter({ + // owner: await smartAccount2.getAddress(), + // }); + + // // First, we need to install the OwnableExecutor module on SA 2 + // let isInstalled = await smartAccount2.isModuleInstalled({ + // type: 'executor', + // module: OWNABLE_EXECUTOR + // }) + + // if (!isInstalled) { + // await smartAccount2.installModule({ + // module: ownableExecutorModule2.module, + // type: ownableExecutorModule2.type, + // data: ownableExecutorModule2.initData + // }) + // } + + // smartAccount2.setActiveExecutionModule(ownableExecutorModule) + + // const valueToTransfer = parseEther("0.1") + // const recipient = accountTwo.address + // const transferEncodedCall = encodeFunctionData({ + // abi: parseAbi(["function transfer(address to, uint256 value)"]), + // functionName: "transfer", + // args: [recipient, valueToTransfer] + // }) + + // const transferTransaction = { + // target: token as `0x${string}`, + // callData: transferEncodedCall, + // value: 0n + // } + + // const execution = getExecuteOnOwnedAccountAction({ownedAccount: await smartAccount.getAddress(), execution: transferTransaction}) + // const receipt = await smartAccount2.sendTransaction([{to: execution.target, data: execution.callData, value: 0n}]); + // console.log(receipt, "receipt"); + + // expect(receipt.userOpHash).toBeTruthy() + // }, 60000) +}) diff --git a/tests/modules.ownableValidator.uninstall.write.test.ts b/tests/modules.ownableValidator.uninstall.write.test.ts new file mode 100644 index 000000000..09fbd4a78 --- /dev/null +++ b/tests/modules.ownableValidator.uninstall.write.test.ts @@ -0,0 +1,371 @@ +import { + http, + type Account, + type Chain, + type Hex, + type WalletClient, + createWalletClient +} from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { + type NexusSmartAccount, + type Transaction, + createSmartAccountClient +} from "../src/account" +import { type TestFileNetworkType, toNetwork } from "./src/testSetup" +import { + getTestAccount, + killNetwork, + toTestClient, + topUp +} from "./src/testUtils" +import type { MasterClient, NetworkConfig } from "./src/testUtils" + +const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" + +describe("modules.ownable.validator.uninstall.write", () => { + let network: NetworkConfig + // Nexus Config + let chain: Chain + let bundlerUrl: string + let walletClient: WalletClient + + // Test utils + let testClient: MasterClient + let account: Account + let recipientAccount: Account + let smartAccount: NexusSmartAccount + let smartAccountAddress: Hex + + beforeAll(async () => { + network = await toNetwork(NETWORK_TYPE) + + chain = network.chain + bundlerUrl = network.bundlerUrl + + account = getTestAccount(0) + recipientAccount = getTestAccount(3) + + walletClient = createWalletClient({ + account, + chain, + transport: http() + }) + + testClient = toTestClient(chain, getTestAccount(0)) + + smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + chain + }) + + smartAccountAddress = await smartAccount.getAddress() + }) + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test("should fund the smart account", async () => { + await topUp(testClient, smartAccountAddress) + const [balance] = await smartAccount.getBalances() + expect(balance.amount > 0) + }) + + test("should have account addresses", async () => { + const addresses = await Promise.all([ + account.address, + smartAccount.getAddress() + ]) + expect(addresses.every(Boolean)).to.be.true + expect(addresses).toStrictEqual([ + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + ]) + }) + + test("should send eth", async () => { + const balanceBefore = await testClient.getBalance({ + address: recipientAccount.address + }) + const tx: Transaction = { + to: recipientAccount.address, + value: 1n + } + const { wait } = await smartAccount.sendTransaction(tx) + const { success } = await wait() + const balanceAfter = await testClient.getBalance({ + address: recipientAccount.address + }) + expect(success).toBe(true) + expect(balanceAfter - balanceBefore).toBe(1n) + }) + + // test.skip("install Ownable Executor", async () => { + // let isInstalled = await smartAccount.isModuleInstalled({ + // type: 'executor', + // moduleAddress: OWNABLE_EXECUTOR + // }) + + // if (!isInstalled) { + // const receipt = await smartAccount.installModule({ + // moduleAddress: ownableExecutorModule.moduleAddress, + // type: ownableExecutorModule.type, + // data: ownableExecutorModule.data + // }) + + // smartAccount.setActiveExecutionModule(ownableExecutorModule) + + // expect(receipt.success).toBe(true) + // } + // }, 60000) + + // test.skip("uninstall Ownable Executor", async () => { + // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // bundlerUrl + // }) + + // const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, OWNABLE_EXECUTOR) + + // let isInstalled = await smartAccount2.isModuleInstalled({ + // type: 'executor', + // moduleAddress: OWNABLE_EXECUTOR + // }) + + // if (isInstalled) { + // await smartAccount2.uninstallModule({ + // moduleAddress: ownableExecutorModule2.moduleAddress, + // type: ownableExecutorModule2.type, + // data: ownableExecutorModule2.data + // }) + // } + + // }, 60000) + + // test.skip("Ownable Executor Module should be installed", async () => { + // const isInstalled = await smartAccount.isModuleInstalled({ + // type: 'executor', + // moduleAddress: OWNABLE_EXECUTOR + // }) + // console.log(isInstalled, "isInstalled") + // expect(isInstalled).toBeTruthy() + // }, 60000) + + // test.skip("should add an owner to the module", async () => { + // const ownersBefore = await ownableExecutorModule.getOwners() + // const isOwnerBefore = ownersBefore.includes(accountTwo.address) + + // if (isOwnerBefore) { + // console.log("Owner already exists in list, skipping test case ...") + // return + // } + + // const userOpReceipt = await ownableExecutorModule.addOwner( + // accountTwo.address + // ) + + // const owners = await ownableExecutorModule.getOwners() + // const isOwner = owners.includes(accountTwo.address) + + // expect(isOwner).toBeTruthy() + // expect(userOpReceipt.success).toBeTruthy() + // }, 60000) + + // test.skip("EOA 2 can execute actions on behalf of SA 1", async () => { + // const valueToTransfer = parseEther("0.1") + // const recipient = accountTwo.address + // const transferEncodedCall = encodeFunctionData({ + // abi: parseAbi(["function transfer(address to, uint256 value)"]), + // functionName: "transfer", + // args: [recipient, valueToTransfer] + // }) + + // const owners = await ownableExecutorModule.getOwners() + // const isOwner = owners.includes(accountTwo.address) + // expect(isOwner).toBeTruthy() + + // const balanceBefore = await smartAccount.getBalances([token]) + // console.log("balanceBefore", balanceBefore) + + // const calldata = encodeFunctionData({ + // abi: parseAbi([ + // "function executeOnOwnedAccount(address ownedAccount, bytes callData)" + // ]), + // functionName: "executeOnOwnedAccount", + // args: [ + // await smartAccount.getAddress(), + // encodePacked( + // ["address", "uint256", "bytes"], + // [token, BigInt(Number(0)), transferEncodedCall] + // ) + // ] + // }) + + // // EOA 2 (walletClientTwo) executes an action on behalf of SA 1 which is owned by EOA 1 (walletClientOne) + // const txHash = await walletClientTwo.sendTransaction({ + // account: accountTwo, // Called by delegated EOA owner + // to: ownableExecutorModule.moduleAddress, + // data: calldata, + // value: 0n + // }) + + // const balanceAfter = await smartAccount.getBalances([token]) + // console.log("balanceAfter", balanceAfter) + + // expect(txHash).toBeTruthy() + // }, 60000) + + // test("SA 2 can execute actions on behalf of SA 1", async () => { + // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // bundlerUrl + // }) + + // const valueToTransfer = parseEther("0.1") + // const recipient = accountTwo.address + // const transferEncodedCall = encodeFunctionData({ + // abi: parseAbi(["function transfer(address to, uint256 value)"]), + // functionName: "transfer", + // args: [recipient, valueToTransfer] + // }) + + // const transferTransaction = { + // to: token, + // data: transferEncodedCall, + // value: 0n + // } + + // smartAccount2.setActiveExecutionModule(ownableExecutorModule) + // const receipt = await smartAccount2.sendTransactionWithExecutor([transferTransaction], await smartAccount.getAddress()); + // console.log(receipt, "receipt"); + + // expect(receipt.userOpHash).toBeTruthy() + // expect(receipt.success).toBe(true) + // }, 60000) + + // test.skip("SA 2 can execute actions on behalf of SA 1 using module instance instead of smart account instance", async () => { + // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // bundlerUrl + // }) + + // const initData = encodePacked( + // ["address"], + // [await smartAccount2.getAddress()] + // ) + // const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, OWNABLE_EXECUTOR, initData) + + // // First, we need to install the OwnableExecutor module on SA 2 + // let isInstalled = await smartAccount2.isModuleInstalled({ + // type: 'executor', + // moduleAddress: OWNABLE_EXECUTOR + // }) + + // if (!isInstalled) { + // await smartAccount2.installModule({ + // moduleAddress: ownableExecutorModule2.moduleAddress, + // type: ownableExecutorModule2.type, + // data: ownableExecutorModule2.data + // }) + // } + + // smartAccount2.setActiveExecutionModule(ownableExecutorModule) + + // const valueToTransfer = parseEther("0.1") + // const recipient = accountTwo.address + // const transferEncodedCall = encodeFunctionData({ + // abi: parseAbi(["function transfer(address to, uint256 value)"]), + // functionName: "transfer", + // args: [recipient, valueToTransfer] + // }) + + // const owners = await ownableExecutorModule2.getOwners() + + // // check if SA 2 is as an owner of SA 1 + // const isOwner = owners.includes(await smartAccount2.getAddress()) + // if(!isOwner) { + // const userOpReceipt = await ownableExecutorModule2.addOwner( + // await smartAccount2.getAddress() + // ) + // expect(userOpReceipt.success).toBeTruthy() + // } + + // const transferTransaction = { + // target: token as `0x${string}`, + // callData: transferEncodedCall, + // value: 0n + // } + + // smartAccount2.setActiveExecutionModule(ownableExecutorModule2) + // // SA 2 will execute the transferTransaction on behalf of SA 1 (smartAccount) + // const receipt = await ownableExecutorModule2.execute(transferTransaction, await smartAccount.getAddress()); + // console.log(receipt, "receipt"); + + // expect(receipt.userOpHash).toBeTruthy() + // expect(receipt.success).toBe(true) + // }, 60000) + + // test.skip("should remove an owner from the module", async () => { + // const userOpReceipt = await ownableExecutorModule.removeOwner( + // accountTwo.address + // ) + // const owners = await ownableExecutorModule.getOwners() + // const isOwner = owners.includes(accountTwo.address) + + // expect(isOwner).toBeFalsy() + // expect(userOpReceipt.success).toBeTruthy() + // }, 60000) + + // test.skip("should use rhinestone to call ownable executor", async () => { + // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ + // signer: walletClientTwo, + // bundlerUrl + // }) + + // const initData = encodePacked( + // ["address"], + // [await smartAccount2.getAddress()] + // ) + + // const ownableExecutorModule2 = getOwnableExecuter({ + // owner: await smartAccount2.getAddress(), + // }); + + // // First, we need to install the OwnableExecutor module on SA 2 + // let isInstalled = await smartAccount2.isModuleInstalled({ + // type: 'executor', + // module: OWNABLE_EXECUTOR + // }) + + // if (!isInstalled) { + // await smartAccount2.installModule({ + // module: ownableExecutorModule2.module, + // type: ownableExecutorModule2.type, + // data: ownableExecutorModule2.initData + // }) + // } + + // smartAccount2.setActiveExecutionModule(ownableExecutorModule) + + // const valueToTransfer = parseEther("0.1") + // const recipient = accountTwo.address + // const transferEncodedCall = encodeFunctionData({ + // abi: parseAbi(["function transfer(address to, uint256 value)"]), + // functionName: "transfer", + // args: [recipient, valueToTransfer] + // }) + + // const transferTransaction = { + // target: token as `0x${string}`, + // callData: transferEncodedCall, + // value: 0n + // } + + // const execution = getExecuteOnOwnedAccountAction({ownedAccount: await smartAccount.getAddress(), execution: transferTransaction}) + // const receipt = await smartAccount2.sendTransaction([{to: execution.target, data: execution.callData, value: 0n}]); + // console.log(receipt, "receipt"); + + // expect(receipt.userOpHash).toBeTruthy() + // }, 60000) +}) diff --git a/tests/modules/k1Validator/write.test.ts b/tests/modules/k1Validator/write.test.ts deleted file mode 100644 index 7a36cfd88..000000000 --- a/tests/modules/k1Validator/write.test.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { - http, - createWalletClient, - encodePacked, - encodeFunctionData, - parseAbi -} from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { baseSepolia } from "viem/chains" -import { afterEach, describe, expect, test } from "vitest" -import { - K1_VALIDATOR, - Module, - ModuleType, - OWNABLE_VALIDATOR, - createK1ValidatorModule, - getRandomSigner, - moduleTypeIds, -} from "../../../src" -import { createSmartAccountClient } from "../../../src/account" -import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" -import type { UserOpReceipt } from "../../../src/bundler" -import { getConfig } from "../../utils" - -describe("Account:Modules:OwnableValidator", async () => { - const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" - - const [walletClient] = [ - createWalletClient({ - account, - chain: baseSepolia, - transport: http() - }) - ] - - const smartAccount: NexusSmartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - }) - - const k1ValidationModule = await createK1ValidatorModule( - smartAccount.getSigner() - ) - - smartAccount.setActiveValidationModule(k1ValidationModule); - - describe("K1 Validator Module Tests", async () => { - test("install k1 Validator with 1 owner", async () => { - const isInstalledBefore = await smartAccount.isModuleInstalled({ - type: 'validator', - moduleAddress: K1_VALIDATOR - }) - - console.log(isInstalledBefore, "isInstalledBefore") - - if (!isInstalledBefore) { - const userOpReceipt: UserOpReceipt = await smartAccount.installModule({ - moduleAddress: K1_VALIDATOR, - type: 'validator', - data: encodePacked(["address"], [await smartAccount.getAddress()]) - }) - - await smartAccount.uninstallModule({ - moduleAddress: K1_VALIDATOR, - type: 'validator', - data: encodePacked(["address"], [await smartAccount.getAddress()]) - }) - - smartAccount.setActiveValidationModule(k1ValidationModule) - - expect(userOpReceipt.success).toBe(true) - } - }, 60000) - - test("Ownable Validator Module should be installed", async () => { - const isInstalled = await smartAccount.isModuleInstalled({ - type: 'validator', - moduleAddress: OWNABLE_VALIDATOR - }) - expect(isInstalled).toBeTruthy() - }, 60000) - - test("Mint an NFT using K1Validator as Validation Module", async () => { - const randomAccount = getRandomSigner(); - - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function safeMint(address _to)"]), - functionName: "safeMint", - args: [randomAccount.pbKey] - }) - - const transaction = { - to: nftAddress, - data: encodedCall - } - - const response = await smartAccount.sendTransaction([transaction]) - console.log(response, "response") - - const receipt = await response.wait() - console.log(receipt, "receipt") - - expect(receipt.success).toBe(true) - }, 60000) - }) -}) diff --git a/tests/modules/ownableExecutor/read.test.ts b/tests/modules/ownableExecutor/read.test.ts deleted file mode 100644 index ea5776764..000000000 --- a/tests/modules/ownableExecutor/read.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { - http, - createWalletClient, - } from "viem" - import { privateKeyToAccount } from "viem/accounts" - import { baseSepolia } from "viem/chains" - import { describe, expect, test } from "vitest" - import { - createOwnableExecutorModule - } from "../../../src" - import { createSmartAccountClient } from "../../../src/account" - import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" - import { getConfig } from "../../utils" - - describe("Account:Modules:OwnableExecutor", async () => { - const { privateKey, bundlerUrl } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - - const [walletClient] = [ - createWalletClient({ - account, - chain: baseSepolia, - transport: http() - }) - ] - - const smartAccount: NexusSmartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl - }) - - describe("Ownable Executor Module Tests", async () => { - test("should initialize Ownable Executor Module with correct owners", async () => { - const ownableExecutorModule = await createOwnableExecutorModule(smartAccount) - const owners = await ownableExecutorModule.getOwners(); - expect(owners).toStrictEqual(ownableExecutorModule.owners); - }) - }) - }) - \ No newline at end of file diff --git a/tests/modules/ownableExecutor/write.test.ts b/tests/modules/ownableExecutor/write.test.ts deleted file mode 100644 index a2da0644b..000000000 --- a/tests/modules/ownableExecutor/write.test.ts +++ /dev/null @@ -1,319 +0,0 @@ -import { - http, - createWalletClient, - encodeFunctionData, - encodePacked, - parseAbi, - parseEther -} from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { baseSepolia } from "viem/chains" -import { describe, expect, test } from "vitest" -import { - OWNABLE_EXECUTOR, - createOwnableExecutorModule -} from "../../../src" -import { createSmartAccountClient } from "../../../src/account" -import type { NexusSmartAccount } from "../../../src/account/NexusSmartAccount" -import { getConfig } from "../../utils" - -describe("Account:Modules:OwnableExecutor", async () => { - const token = "0xfA5E6d39e46328961d625f6334726F057c94812A" - const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - - const [walletClient, walletClientTwo] = [ - createWalletClient({ - account, - chain: baseSepolia, - transport: http() - }), - createWalletClient({ - account: accountTwo, - chain: baseSepolia, - transport: http() - }) - ] - - const smartAccount: NexusSmartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl - }) - - const initData = encodePacked( - ["address"], - [await smartAccount.getAddress()] - ) - const ownableExecutorModule = await createOwnableExecutorModule(smartAccount, initData) - - describe("Ownable Executor Module Tests", async () => { - test.skip("install Ownable Executor", async () => { - let isInstalled = await smartAccount.isModuleInstalled({ - type: 'executor', - moduleAddress: OWNABLE_EXECUTOR - }) - - if (!isInstalled) { - const receipt = await smartAccount.installModule({ - moduleAddress: ownableExecutorModule.moduleAddress, - type: ownableExecutorModule.type, - data: ownableExecutorModule.data - }) - - smartAccount.setActiveExecutionModule(ownableExecutorModule) - - expect(receipt.success).toBe(true) - } - }, 60000) - - test.skip("uninstall Ownable Executor", async () => { - const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - signer: walletClientTwo, - bundlerUrl - }) - - const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2) - - let isInstalled = await smartAccount2.isModuleInstalled({ - type: 'executor', - moduleAddress: OWNABLE_EXECUTOR - }) - - if (isInstalled) { - await smartAccount2.uninstallModule({ - moduleAddress: ownableExecutorModule2.moduleAddress, - type: ownableExecutorModule2.type, - data: ownableExecutorModule2.data - }) - } - - }, 60000) - - test.skip("Ownable Executor Module should be installed", async () => { - const isInstalled = await smartAccount.isModuleInstalled({ - type: 'executor', - moduleAddress: OWNABLE_EXECUTOR - }) - console.log(isInstalled, "isInstalled") - expect(isInstalled).toBeTruthy() - }, 60000) - - test.skip("should add an owner to the module", async () => { - const ownersBefore = await ownableExecutorModule.getOwners() - const isOwnerBefore = ownersBefore.includes(accountTwo.address) - - if (isOwnerBefore) { - console.log("Owner already exists in list, skipping test case ...") - return - } - - const userOpReceipt = await ownableExecutorModule.addOwner( - accountTwo.address - ) - - const owners = await ownableExecutorModule.getOwners() - const isOwner = owners.includes(accountTwo.address) - - expect(isOwner).toBeTruthy() - expect(userOpReceipt.success).toBeTruthy() - }, 60000) - - test.skip("EOA 2 can execute actions on behalf of SA 1", async () => { - const valueToTransfer = parseEther("0.1") - const recipient = accountTwo.address - const transferEncodedCall = encodeFunctionData({ - abi: parseAbi(["function transfer(address to, uint256 value)"]), - functionName: "transfer", - args: [recipient, valueToTransfer] - }) - - const owners = await ownableExecutorModule.getOwners() - const isOwner = owners.includes(accountTwo.address) - expect(isOwner).toBeTruthy() - - const balanceBefore = await smartAccount.getBalances([token]) - console.log("balanceBefore", balanceBefore) - - const calldata = encodeFunctionData({ - abi: parseAbi([ - "function executeOnOwnedAccount(address ownedAccount, bytes callData)" - ]), - functionName: "executeOnOwnedAccount", - args: [ - await smartAccount.getAddress(), - encodePacked( - ["address", "uint256", "bytes"], - [token, BigInt(Number(0)), transferEncodedCall] - ) - ] - }) - - // EOA 2 (walletClientTwo) executes an action on behalf of SA 1 which is owned by EOA 1 (walletClientOne) - const txHash = await walletClientTwo.sendTransaction({ - account: accountTwo, // Called by delegated EOA owner - to: ownableExecutorModule.moduleAddress, - data: calldata, - value: 0n - }) - - const balanceAfter = await smartAccount.getBalances([token]) - console.log("balanceAfter", balanceAfter) - - expect(txHash).toBeTruthy() - }, 60000) - - test("SA 2 can execute actions on behalf of SA 1", async () => { - const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - signer: walletClientTwo, - bundlerUrl - }) - - const valueToTransfer = parseEther("0.1") - const recipient = accountTwo.address - const transferEncodedCall = encodeFunctionData({ - abi: parseAbi(["function transfer(address to, uint256 value)"]), - functionName: "transfer", - args: [recipient, valueToTransfer] - }) - - const transferTransaction = { - to: token, - data: transferEncodedCall, - value: 0n - } - - smartAccount2.setActiveExecutionModule(ownableExecutorModule) - const receipt = await smartAccount2.sendTransactionWithExecutor([transferTransaction], await smartAccount.getAddress()); - console.log(receipt, "receipt"); - - expect(receipt.userOpHash).toBeTruthy() - expect(receipt.success).toBe(true) - }, 60000) - - test.skip("SA 2 can execute actions on behalf of SA 1 using module instance instead of smart account instance", async () => { - const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - signer: walletClientTwo, - bundlerUrl - }) - - const initData = encodePacked( - ["address"], - [await smartAccount2.getAddress()] - ) - const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, initData) - - // First, we need to install the OwnableExecutor module on SA 2 - let isInstalled = await smartAccount2.isModuleInstalled({ - type: 'executor', - moduleAddress: OWNABLE_EXECUTOR - }) - - if (!isInstalled) { - await smartAccount2.installModule({ - moduleAddress: ownableExecutorModule2.moduleAddress, - type: ownableExecutorModule2.type, - data: ownableExecutorModule2.data - }) - } - - smartAccount2.setActiveExecutionModule(ownableExecutorModule) - - const valueToTransfer = parseEther("0.1") - const recipient = accountTwo.address - const transferEncodedCall = encodeFunctionData({ - abi: parseAbi(["function transfer(address to, uint256 value)"]), - functionName: "transfer", - args: [recipient, valueToTransfer] - }) - - const owners = await ownableExecutorModule2.getOwners() - - // check if SA 2 is as an owner of SA 1 - const isOwner = owners.includes(await smartAccount2.getAddress()) - if(!isOwner) { - const userOpReceipt = await ownableExecutorModule2.addOwner( - await smartAccount2.getAddress() - ) - expect(userOpReceipt.success).toBeTruthy() - } - - const transferTransaction = { - target: token as `0x${string}`, - callData: transferEncodedCall, - value: 0n - } - - smartAccount2.setActiveExecutionModule(ownableExecutorModule2) - // SA 2 will execute the transferTransaction on behalf of SA 1 (smartAccount) - const receipt = await ownableExecutorModule2.execute(transferTransaction, await smartAccount.getAddress()); - console.log(receipt, "receipt"); - - expect(receipt.userOpHash).toBeTruthy() - expect(receipt.success).toBe(true) - }, 60000) - - test.skip("should remove an owner from the module", async () => { - const userOpReceipt = await ownableExecutorModule.removeOwner( - accountTwo.address - ) - const owners = await ownableExecutorModule.getOwners() - const isOwner = owners.includes(accountTwo.address) - - expect(isOwner).toBeFalsy() - expect(userOpReceipt.success).toBeTruthy() - }, 60000) - - // test.skip("should use rhinestone to call ownable executor", async () => { - // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // bundlerUrl - // }) - - // const initData = encodePacked( - // ["address"], - // [await smartAccount2.getAddress()] - // ) - - // const ownableExecutorModule2 = getOwnableExecuter({ - // owner: await smartAccount2.getAddress(), - // }); - - // // First, we need to install the OwnableExecutor module on SA 2 - // let isInstalled = await smartAccount2.isModuleInstalled({ - // type: 'executor', - // module: OWNABLE_EXECUTOR - // }) - - // if (!isInstalled) { - // await smartAccount2.installModule({ - // module: ownableExecutorModule2.module, - // type: ownableExecutorModule2.type, - // data: ownableExecutorModule2.initData - // }) - // } - - // smartAccount2.setActiveExecutionModule(ownableExecutorModule) - - // const valueToTransfer = parseEther("0.1") - // const recipient = accountTwo.address - // const transferEncodedCall = encodeFunctionData({ - // abi: parseAbi(["function transfer(address to, uint256 value)"]), - // functionName: "transfer", - // args: [recipient, valueToTransfer] - // }) - - // const transferTransaction = { - // target: token as `0x${string}`, - // callData: transferEncodedCall, - // value: 0n - // } - - // const execution = getExecuteOnOwnedAccountAction({ownedAccount: await smartAccount.getAddress(), execution: transferTransaction}) - // const receipt = await smartAccount2.sendTransaction([{to: execution.target, data: execution.callData, value: 0n}]); - // console.log(receipt, "receipt"); - - // expect(receipt.userOpHash).toBeTruthy() - // }, 60000) - }) -}) diff --git a/tests/modules/ownableValidator/write/installed-module.test.ts b/tests/modules/ownableValidator/write/installed-module.test.ts deleted file mode 100644 index dcd109bd9..000000000 --- a/tests/modules/ownableValidator/write/installed-module.test.ts +++ /dev/null @@ -1,204 +0,0 @@ -// import { http, createWalletClient, encodeAbiParameters, encodeFunctionData, parseAbi, encodePacked, concat } from "viem" -// import { privateKeyToAccount } from "viem/accounts" -// import { baseSepolia } from "viem/chains" -// import { afterEach, describe, expect, test } from "vitest" -// import { -// K1_VALIDATOR, -// Module, -// ModuleType, -// OWNABLE_VALIDATOR, -// UserOperationStruct, -// createK1ValidatorModule, -// createOwnableValidatorModule, -// getRandomSigner -// } from "../../../../src" -// import { createSmartAccountClient } from "../../../../src/account" -// import type { NexusSmartAccount } from "../../../../src/account/NexusSmartAccount" -// import type { UserOpReceipt } from "../../../../src/bundler" -// import { getConfig } from "../../../utils" - -// describe("Account:Modules:OwnableValidator", async () => { -// const nonceOptions = { nonceKey: BigInt(Date.now() + 10) } -// const nftAddress = "0x1758f42Af7026fBbB559Dc60EcE0De3ef81f665e" -// const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a" -// const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() -// const account = privateKeyToAccount(`0x${privateKey}`) -// const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - -// const [walletClient] = [ -// createWalletClient({ -// account, -// chain: baseSepolia, -// transport: http() -// }) -// ] - -// const smartAccount: NexusSmartAccount = await createSmartAccountClient({ -// signer: walletClient, -// bundlerUrl, -// }) - -// const owners = [walletClient.account.address] - -// const ownableValidatorModule = await createOwnableValidatorModule( -// smartAccount, -// 1, -// owners -// ) - -// const k1ValidationModule = await createK1ValidatorModule( -// smartAccount.getSigner() -// ) - -// smartAccount.setActiveValidationModule(ownableValidatorModule) - -// describe("Ownable Validator Module Tests", async () => { -// test.skip("install Ownable Validator with 1 owner", async () => { -// smartAccount.setActiveValidationModule(k1ValidationModule) -// const isInstalledBefore = await smartAccount.isModuleInstalled({ -// moduleType: ModuleType.Validation, -// moduleAddress: OWNABLE_VALIDATOR -// }) - -// const threshold = 1 -// const installData = encodeAbiParameters( -// [ -// { name: "threshold", type: "uint256" }, -// { name: "owners", type: "address[]" } -// ], -// [BigInt(threshold), [walletClient.account.address]] -// ) - -// console.log(isInstalledBefore, "isInstalledBefore") - -// if (!isInstalledBefore) { -// const userOpReceipt: UserOpReceipt = await smartAccount.installModule({ -// moduleAddress: OWNABLE_VALIDATOR, -// moduleType: ModuleType.Validation, -// data: installData -// }) - -// smartAccount.setActiveValidationModule(ownableValidatorModule) - -// expect(userOpReceipt.success).toBe(true) -// } -// }, 60000) - -// test.skip("Ownable Validator Module should be installed", async () => { -// const isInstalled = await smartAccount.isModuleInstalled({ -// moduleType: ModuleType.Validation, -// moduleAddress: OWNABLE_VALIDATOR -// }) -// expect(isInstalled).toBeTruthy() -// }, 60000) - -// test.skip("Mint NFT - Single Call", async () => { -// const randomAccount = getRandomSigner(); -// const encodedCall = encodeFunctionData({ -// abi: parseAbi(["function safeMint(address _to)"]), -// functionName: "safeMint", -// args: [randomAccount.pbKey] -// }) - -// smartAccount.setActiveValidationModule(ownableValidatorModule) - -// const isInstalled = await smartAccount.isModuleInstalled({moduleType: ModuleType.Validation, moduleAddress: ownableValidatormodule.moduleAddressAddress}); -// console.log("Is the module installed ? ", isInstalled); - -// const transaction = { -// to: nftAddress, // NFT address -// data: encodedCall -// } - -// const response = await smartAccount.sendTransaction([transaction]) -// console.log(response, "response") - -// const receipt = await response.wait() -// console.log(receipt, "receipt") - -// expect(receipt.userOpHash).toBeTruthy() -// }, 60000) - -// test("Should execute a user op if threshold was met", async () => { -// const owners = await ownableValidatorModule.getOwners() -// console.log("owners: ", owners); - -// // if(!owners.includes(accountTwo.address)) { -// // const userOpReceipt = await ownableValidatorModule.addOwner( -// // accountTwo.address -// // ) -// // expect(userOpReceipt.success).toBeTruthy(); -// // } - -// // const receipt = await ownableValidatorModule.setThreshold(2); -// // expect(receipt.success).toBeTruthy(); -// // expect(ownableValidatorModule.threshold).toBe(2); - -// const randomAccount = getRandomSigner(); -// const encodedCall = encodeFunctionData({ -// abi: parseAbi(["function safeMint(address _to)"]), -// functionName: "safeMint", -// args: [randomAccount.pbKey] -// }) - -// const transaction = { -// to: nftAddress, // NFT address -// data: encodedCall -// } -// let userOp = await smartAccount.buildUserOp([transaction]) -// console.log(userOp, "userOp"); - -// const userOpHash = await smartAccount.getUserOpHash(userOp) -// const signature1 = await account.signMessage({message: userOpHash}); -// const signature2 = await accountTwo.signMessage({message: userOpHash}); - -// // const finalSignature = encodePacked(['bytes', 'bytes'],[signature1, signature2]); -// const finalSignature = encodePacked(['bytes', 'bytes'],[signature1, signature2]); -// console.log(finalSignature, "finalSignature"); - -// userOp.signature = finalSignature; -// console.log("userOp: ", userOp); - -// // const mintNFTResponse = await smartAccount.sendTransaction([transaction]) -// const mintNFTResponse = await smartAccount.sendSignedUserOp(userOp as UserOperationStruct) -// const mintNFTReceipt = await mintNFTResponse.wait() -// console.log(mintNFTReceipt, "receipt") - -// expect(mintNFTReceipt.userOpHash).toBeTruthy() -// expect(mintNFTReceipt.success).toBe(true) -// }, 60000) - -// test.skip("Should revert a user op if threshold was not met", async () => { -// const randomAccount = getRandomSigner(); -// const encodedCall = encodeFunctionData({ -// abi: parseAbi(["function safeMint(address _to)"]), -// functionName: "safeMint", -// args: [randomAccount.pbKey] -// }) - -// const transaction = { -// to: nftAddress, // NFT address -// data: encodedCall -// } - -// expect(smartAccount.buildUserOp([transaction])).rejects.toThrowError("User operation reverted during simulation with reason: 0x8baa579f"); -// }, 60000) - -// test.skip("should remove an owner from the module", async () => { -// const ownersBefore = await ownableValidatorModule.getOwners(); -// console.log(ownersBefore, "ownersBefore"); - -// const userOpReceipt = await ownableValidatorModule.removeOwner( -// accountTwo.address -// ) -// const ownersAfter = await ownableValidatorModule.getOwners(); -// console.log(ownersAfter, "ownersAfter"); -// expect(userOpReceipt.success).toBeTruthy() -// }, 60000) - -// test.skip("should get all the owners", async () => { -// const owners = await ownableValidatorModule.getOwners() -// console.log(owners, "owners") -// }, 60000) -// }) -// }) diff --git a/tests/modules/ownableValidator/write/uninstalled-module.test.ts b/tests/modules/ownableValidator/write/uninstalled-module.test.ts deleted file mode 100644 index 555828ebe..000000000 --- a/tests/modules/ownableValidator/write/uninstalled-module.test.ts +++ /dev/null @@ -1,102 +0,0 @@ -// import { http, createWalletClient } from "viem" -// import { privateKeyToAccount } from "viem/accounts" -// import { baseSepolia } from "viem/chains" -// import { describe, expect, test } from "vitest" -// import { -// ModuleType, -// OWNABLE_VALIDATOR, -// createOwnableValidatorModule -// } from "../../../../src" -// import { createSmartAccountClient } from "../../../../src/account" -// import type { NexusSmartAccount } from "../../../../src/account/NexusSmartAccount" -// import { getConfig } from "../../../utils" - -// describe("Account:Modules:OwnableValidator", async () => { -// const { privateKey, privateKeyTwo, bundlerUrl } = getConfig() -// const account = privateKeyToAccount(`0x${privateKey}`) -// const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) - -// const [walletClient] = [ -// createWalletClient({ -// account, -// chain: baseSepolia, -// transport: http() -// }) -// ] - -// const smartAccount: NexusSmartAccount = await createSmartAccountClient({ -// signer: walletClient, -// bundlerUrl -// }) - -// const owners = [walletClient.account.address, accountTwo.address] - -// const ownableValidatorModule = await createOwnableValidatorModule( -// smartAccount, -// 1, -// owners -// ) - -// describe("Uninstalled Ownable Validator Module - Tests", async () => { -// test("uninstall Ownable Validator Module", async () => { -// const isInstalledBefore = await smartAccount.isModuleInstalled({ -// moduleType: ModuleType.Validation, -// moduleAddress: OWNABLE_VALIDATOR -// }) -// // { -// // sender: '0xda6959DA394B1BDdB068923A9A214dC0CD193D2E', -// // nonce: 866077811418299683029716658306608038086113973150706820694579085355n, -// // factoryData: undefined, -// // factory: undefined, -// // callData: '0xe9ae5c53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000138da6959da394b1bddb068923a9a214dc0cd193d2e00000000000000000000000000000000000000000000000000000000000000009517e29f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bf2137a23f439ca5aa4360cc6970d70b24d07ea200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fa66e705cf2582cf56528386bb9dfca1197672620000000000000000', -// // signature: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000839518b94038b0B6044f71830b0c79D2fD8D07d000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000', -// // maxFeePerGas: 37233087784n, -// // maxPriorityFeePerGas: 14400000n -// // } - -// // { -// // sender: '0xda6959DA394B1BDdB068923A9A214dC0CD193D2E', -// // nonce: 866077811418299683029716658306608038086113973150706820694579085356n, -// // factoryData: undefined, -// // factory: undefined, -// // callData: '0xe9ae5c530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000b8da6959da394b1bddb068923a9a214dc0cd193d2e00000000000000000000000000000000000000000000000000000000000000009517e29f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a975e69917a4c856b17fc8cc4c352f326ef21c6b000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000', -// // signature: '0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000839518b94038b0B6044f71830b0c79D2fD8D07d000000000000000000000000000000000000000000000000000000000000004181d4b4981670cb18f99f0b4a66446df1bf5b204d24cfcb659bf38ba27a4359b5711649ec2423c5e1247245eba2964679b6a1dbb85c992ae40b9b00c6935b02ff1b00000000000000000000000000000000000000000000000000000000000000', -// // maxFeePerGas: 11771639n, -// // maxPriorityFeePerGas: 1000000n -// // } - -// console.log(isInstalledBefore, "isInstalledBefore") - -// const userOpReceipt = await smartAccount.uninstallModule({ -// moduleAddress: OWNABLE_VALIDATOR, -// moduleType: ModuleType.Validation -// }) - -// const isInstalled = await smartAccount.isModuleInstalled({ -// moduleType: ModuleType.Validation, -// moduleAddress: OWNABLE_VALIDATOR -// }) - -// // after uninstalling the module, the SDK should setup the active module to the default module (K1 Validator) - -// expect(userOpReceipt.success).toBe(true) -// expect(isInstalled).toBeFalsy() -// expect(userOpReceipt).toBeTruthy() -// }, 60000) - -// test("should revert adding an owner to the module", async () => { -// const userOpReceipt = await ownableValidatorModule.addOwner( -// "0x4D8249d21c9553b1bD23cABF611011376dd3416a" -// ) - -// expect(userOpReceipt.success).rejects.toThrowError() -// }, 60000) - -// test("should remove an owner from the module", async () => { -// const userOpReceipt = await ownableValidatorModule.removeOwner( -// "0x4D8249d21c9553b1bD23cABF611011376dd3416a" -// ) -// expect(userOpReceipt.success).rejects.toThrowError() -// }, 60000) -// }) -// }) diff --git a/tests/playground.test.ts b/tests/playground.test.ts new file mode 100644 index 000000000..bbfd7db50 --- /dev/null +++ b/tests/playground.test.ts @@ -0,0 +1,168 @@ +import { config } from "dotenv" +import { + http, + Account, + type Address, + type Chain, + type Hex, + type PrivateKeyAccount, + type PublicClient, + type WalletClient, + createPublicClient, + createWalletClient +} from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { beforeAll, describe, expect, test } from "vitest" +import { + type NexusSmartAccount, + createSmartAccountClient, + getChain, + getCustomChain +} from "../src/account" +import { createK1ValidatorModule } from "../src/modules" +import { + type TestFileNetworkType, + describeWithPlaygroundGuard, + toNetwork +} from "./src/testSetup" +import { + type MasterClient, + type NetworkConfig, + getBundlerUrl, + getTestAccount, + toTestClient, + topUp +} from "./src/testUtils" + +const NETWORK_TYPE: TestFileNetworkType = "PUBLIC_TESTNET" + +// Remove the following lines to use the default factory and validator addresses +// These are relevant only for now on base sopelia chain and are likely to change +const k1ValidatorAddress = "0x663E709f60477f07885230E213b8149a7027239B" +const factoryAddress = "0x887Ca6FaFD62737D0E79A2b8Da41f0B15A864778" + +describeWithPlaygroundGuard("playground", () => { + let network: NetworkConfig + // Nexus Config + let chain: Chain + let bundlerUrl: string + let walletClient: WalletClient + + // Test utils + let publicClient: PublicClient // testClient not available on public testnets + let account: PrivateKeyAccount + let smartAccount: NexusSmartAccount + let smartAccountAddress: Hex + + beforeAll(async () => { + network = await toNetwork(NETWORK_TYPE) + + chain = network.chain + bundlerUrl = network.bundlerUrl + account = network.account as PrivateKeyAccount + + walletClient = createWalletClient({ + account, + chain, + transport: http() + }) + + publicClient = createPublicClient({ + chain, + transport: http() + }) + + smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + chain, + k1ValidatorAddress, + factoryAddress + }) + + smartAccountAddress = await smartAccount.getAddress() + }) + + test("should have factory and k1Validator deployed", async () => { + const byteCodes = await Promise.all([ + publicClient.getBytecode({ + address: k1ValidatorAddress + }), + publicClient.getBytecode({ + address: factoryAddress + }) + ]) + + expect(byteCodes.every(Boolean)).toBeTruthy() + }) + + test("should init the smart account", async () => { + smartAccount = await createSmartAccountClient({ + signer: walletClient, + chain, + bundlerUrl, + // Remove the following lines to use the default factory and validator addresses + // These are relevant only for now on sopelia chain and are likely to change + k1ValidatorAddress, + factoryAddress + }) + }) + + test("should log relevant addresses", async () => { + smartAccountAddress = await smartAccount.getAddress() + console.log({ smartAccountAddress }) + }) + + test("should check balances and top up relevant addresses", async () => { + const [ownerBalance, smartAccountBalance] = await Promise.all([ + publicClient.getBalance({ + address: account.address + }), + publicClient.getBalance({ + address: smartAccountAddress + }) + ]) + console.log({ ownerBalance, smartAccountBalance }) + + const balancesAreOfCorrectType = [ownerBalance, smartAccountBalance].every( + (balance) => typeof balance === "bigint" + ) + if (smartAccountBalance === 0n) { + const hash = await walletClient.sendTransaction({ + chain, + account, + to: smartAccountAddress, + value: 1000000000000000000n + }) + const receipt = await publicClient.waitForTransactionReceipt({ hash }) + console.log({ receipt }) + } + expect(balancesAreOfCorrectType).toBeTruthy() + }) + + test("should send some native token", async () => { + const balanceBefore = await publicClient.getBalance({ + address: account.address + }) + + const { wait } = await smartAccount.sendTransaction({ + to: account.address, + data: "0x", + value: 1n + }) + + const { + success, + receipt: { transactionHash } + } = await wait() + expect(success).toBeTruthy() + + console.log({ transactionHash }) + + const balanceAfter = await publicClient.getBalance({ + address: account.address + }) + + expect(balanceAfter - balanceBefore).toBe(1n) + }) +}) diff --git a/tests/setupFiles.ts b/tests/setupFiles.ts deleted file mode 100644 index fea74d4a2..000000000 --- a/tests/setupFiles.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { test } from "vitest" - -export const testOnlyOnSpecificNetwork = (chainId: number) => { - return Number(process.env.CHAIN_ID || 0) === chainId ? test : test.skip -} - -export const testOnlyOnOptimism = testOnlyOnSpecificNetwork(10) -export const testOnlyOnArbitrum = testOnlyOnSpecificNetwork(42161) -export const testOnlyOnBaseSopelia = testOnlyOnSpecificNetwork(84532) diff --git a/tests/src/README.md b/tests/src/README.md new file mode 100644 index 000000000..128f91fd6 --- /dev/null +++ b/tests/src/README.md @@ -0,0 +1,93 @@ +# @biconomy/sdk Testing Framework + +## Testing Setup + +> **Note**: +> - Tests now must be run with node version >= v22 + +### Network Agnostic Tests +- Tests are executed against locally deployed ephemeral Anvil chains (each with a different ID) with relevant contracts pre-deployed for each test. +- Bundlers for testing are instantiated using [prool](https://github.com/wevm/prool), currently utilizing alto instances. We plan to switch to Biconomy's bundlers when they become available via `prool`. + +### Deployment Configuration +A custom script `bun run fetch:deployment` is provided to search for the bytecode of deployed contracts from a customizable location (default: `../../nexus/deployments`). This folder is **auto-generated** in Nexus whenever a new Hardhat deployment is made, ensuring that the SDK remains up-to-date with the latest contract changes. + +The script performs the following: +- **ABIs**: Moved to `./src/__contracts/{name}Abi.ts` +- **Addresses**: Moved to `./src/addresses.ts` +- **Additional Fixtures**: Copied to `tests__/contracts` + +The script accepts a number of args from the command line: + - nexusDeploymentPath (default: `"../node_modules/nexus/deployments"`) + - chainName (default: `"anvil-55000"`) + - forSrc (default: `["K1ValidatorFactory", "Nexus", "K1Validator"]`); + +Example usage: +```bash +bun run fetch:deployment:raw --chainName=anvil-52878 -forSrc=K1Validator -forSrc=Nexus --nexusDeploymentPath=../../nexus/deployments +bun run lint --apply-unsafe +``` + +> **Note**: +> - Do not edit these files manually; they will be overridden if/when a new Nexus deployment occurs. +> - Avoid hardcoding important addresses (e.g., `const K1_VALIDATOR_ADDRESS = "0x"`). Use `./src/addresses.ts` instead. + +## Network Scopes for Tests + +To prevent tests from conflicting with one another, tests can be scoped to different networks in different ways. + +### Global Scope +- Use by setting `const NETWORK_TYPE: TestFileNetworkType = "COMMON_LOCALHOST"` at the top of the test file. +- Suitable when you're sure that tests in the file will **not** conflict with other tests using the common localhost network. + +### Local Scope +- Use by setting `const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST"` for test files that may conflict with others. +- Networks scoped locally are isolated to the file in which they are used. +- Tests within the same file using a local network may conflict with each other. If needed, split tests into separate files or use the Test Scope. + +### Test Scope +- A network is spun up *only* for the individual test in which it is used. Access this via the `localhostTest`/`testnetTest` helpers in the same file as `"COMMON_LOCALHOST"` or `"FILE_LOCALHOST"` network types. + +Example usage: +```ts +localhostTest("should be used in the following way", async({ config: { bundlerUrl, chain, fundedClients }}) => { + // chain, bundlerUrl spun up just in time for this test only... + expect(await fundedClients.smartAccount.getAccountAddress()).toBeTruthy(); +}); +``` + +> **Note:** +> Please avoid using multiple nested describe() blocks in a single test file, as it is unnecessary and can lead to confusion regarding network scope. +> Using *many* test files is preferable, as describe blocks run in parallel. + +## Testing on Testnets or New Chains +- There is currently one area where SDK tests can be run against a remote testnet: the playground +- You can run the playground using the command: `bun run playground`. They playground is automatically ommitted from CICD. +- Additionally there are helpers for running tests on files on a public testnet: + - `const NETWORK_TYPE: TestFileNetworkType = "TESTNET"` will pick up relevant configuration from environment variables, and can be used at the top of a test file to have tests run against the specified testnet instead of the localhost + - If you want to run a single test on a public testnet *from inside a different describe block* you can use the: `testnetTest` helper: + +Example usage: +```ts +testnetTest("should be used in the following way", async({ config: { bundlerUrl, chain, account }}) => { + // chain, bundlerUrl etc taken from environment variables... + expect(account).toBeTruthy(); // from private key, please ensure it is funded if sending txs +}); +``` + +> **Note:** +> As testnetTest runs against a public testnet the account related to the privatekey (in your env var) must be funded, and the testnet is not 'ephemeral', meaning state is obviously persisted on the testnet after the test finishes. + +- The playground does not run in CI/CD but can be triggered manually from the GitHub Actions UI or locally via bun run playground. +- The playground network is configured with environment variables: + - E2E_PRIVATE_KEY_ONE + - CHAIN_ID + - RPC_URL (optional, inferred if unset) + - BUNDLER_URL (optional, inferred if unset) + +## Debugging and Client Issues +It is recommended to use the playground for debugging issues with clients. Please refer to the following guidelines for escalation and handover: [Debugging Client Issues](https://www.notion.so/biconomy/Debugging-Client-Issues-cc01c1cab0224c87b37a4d283370165b) + +## Testing Helpers +A [testClient](https://viem.sh/docs/clients/test#extending-with-public--wallet-actions) is available (funded and extended with walletActions and publicActions) during testing. Please use it as a master Client for all things network related. + diff --git a/tests/src/__contracts/abi/BiconomyMetaFactoryAbi.ts b/tests/src/__contracts/abi/BiconomyMetaFactoryAbi.ts new file mode 100644 index 000000000..78202292d --- /dev/null +++ b/tests/src/__contracts/abi/BiconomyMetaFactoryAbi.ts @@ -0,0 +1,319 @@ +export const BiconomyMetaFactoryAbi = [ + { + inputs: [ + { + internalType: "address", + name: "owner_", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [], + name: "AlreadyInitialized", + type: "error" + }, + { + inputs: [], + name: "CallToDeployWithFactoryFailed", + type: "error" + }, + { + inputs: [], + name: "FactoryNotWhitelisted", + type: "error" + }, + { + inputs: [], + name: "InvalidEntryPointAddress", + type: "error" + }, + { + inputs: [], + name: "InvalidFactoryAddress", + type: "error" + }, + { + inputs: [], + name: "NewOwnerIsZeroAddress", + type: "error" + }, + { + inputs: [], + name: "NoHandoverRequest", + type: "error" + }, + { + inputs: [], + name: "Unauthorized", + type: "error" + }, + { + inputs: [], + name: "ZeroAddressNotAllowed", + type: "error" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "OwnershipHandoverCanceled", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "OwnershipHandoverRequested", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "oldOwner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "OwnershipTransferred", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "factory", + type: "address" + } + ], + name: "addFactoryToWhitelist", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address" + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32" + } + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "cancelOwnershipHandover", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "completeOwnershipHandover", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "factory", + type: "address" + }, + { + internalType: "bytes", + name: "factoryData", + type: "bytes" + } + ], + name: "deployWithFactory", + outputs: [ + { + internalType: "address payable", + name: "createdAccount", + type: "address" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "factoryWhitelist", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "factory", + type: "address" + } + ], + name: "isFactoryWhitelisted", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "result", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "ownershipHandoverExpiresAt", + outputs: [ + { + internalType: "uint256", + name: "result", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "factory", + type: "address" + } + ], + name: "removeFactoryFromWhitelist", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "requestOwnershipHandover", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "transferOwnership", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address" + } + ], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address" + }, + { + internalType: "address payable", + name: "withdrawAddress", + type: "address" + } + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +] as const diff --git a/tests/src/__contracts/abi/BootstrapAbi.ts b/tests/src/__contracts/abi/BootstrapAbi.ts new file mode 100644 index 000000000..42f6c45ad --- /dev/null +++ b/tests/src/__contracts/abi/BootstrapAbi.ts @@ -0,0 +1,802 @@ +export const BootstrapAbi = [ + { + inputs: [], + name: "CanNotRemoveLastValidator", + type: "error" + }, + { + inputs: [], + name: "EnableModeSigError", + type: "error" + }, + { + inputs: [ + { + internalType: "bytes4", + name: "selector", + type: "bytes4" + } + ], + name: "FallbackAlreadyInstalledForSelector", + type: "error" + }, + { + inputs: [], + name: "FallbackCallTypeInvalid", + type: "error" + }, + { + inputs: [], + name: "FallbackHandlerUninstallFailed", + type: "error" + }, + { + inputs: [ + { + internalType: "bytes4", + name: "selector", + type: "bytes4" + } + ], + name: "FallbackNotInstalledForSelector", + type: "error" + }, + { + inputs: [], + name: "FallbackSelectorForbidden", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "currentHook", + type: "address" + } + ], + name: "HookAlreadyInstalled", + type: "error" + }, + { + inputs: [], + name: "HookPostCheckFailed", + type: "error" + }, + { + inputs: [], + name: "InvalidInput", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address" + } + ], + name: "InvalidModule", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" + } + ], + name: "InvalidModuleTypeId", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "entry", + type: "address" + } + ], + name: "LinkedList_EntryAlreadyInList", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "entry", + type: "address" + } + ], + name: "LinkedList_InvalidEntry", + type: "error" + }, + { + inputs: [], + name: "LinkedList_InvalidPage", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" + } + ], + name: "MismatchModuleTypeId", + type: "error" + }, + { + inputs: [ + { + internalType: "bytes4", + name: "selector", + type: "bytes4" + } + ], + name: "MissingFallbackHandler", + type: "error" + }, + { + inputs: [], + name: "ModuleAddressCanNotBeZero", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" + }, + { + internalType: "address", + name: "module", + type: "address" + } + ], + name: "ModuleAlreadyInstalled", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" + }, + { + internalType: "address", + name: "module", + type: "address" + } + ], + name: "ModuleNotInstalled", + type: "error" + }, + { + inputs: [], + name: "NoValidatorInstalled", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "operator", + type: "address" + } + ], + name: "UnauthorizedOperation", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address" + } + ], + name: "ValidatorNotInstalled", + type: "error" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "contract IERC7484", + name: "registry", + type: "address" + } + ], + name: "ERC7484RegistryConfigured", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" + }, + { + indexed: false, + internalType: "address", + name: "module", + type: "address" + } + ], + name: "ModuleInstalled", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" + }, + { + indexed: false, + internalType: "address", + name: "module", + type: "address" + } + ], + name: "ModuleUninstalled", + type: "event" + }, + { + stateMutability: "payable", + type: "fallback" + }, + { + inputs: [], + name: "eip712Domain", + outputs: [ + { + internalType: "bytes1", + name: "fields", + type: "bytes1" + }, + { + internalType: "string", + name: "name", + type: "string" + }, + { + internalType: "string", + name: "version", + type: "string" + }, + { + internalType: "uint256", + name: "chainId", + type: "uint256" + }, + { + internalType: "address", + name: "verifyingContract", + type: "address" + }, + { + internalType: "bytes32", + name: "salt", + type: "bytes32" + }, + { + internalType: "uint256[]", + name: "extensions", + type: "uint256[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getActiveHook", + outputs: [ + { + internalType: "address", + name: "hook", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "cursor", + type: "address" + }, + { + internalType: "uint256", + name: "size", + type: "uint256" + } + ], + name: "getExecutorsPaginated", + outputs: [ + { + internalType: "address[]", + name: "array", + type: "address[]" + }, + { + internalType: "address", + name: "next", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes4", + name: "selector", + type: "bytes4" + } + ], + name: "getFallbackHandlerBySelector", + outputs: [ + { + internalType: "CallType", + name: "", + type: "bytes1" + }, + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig[]", + name: "validators", + type: "tuple[]" + }, + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig[]", + name: "executors", + type: "tuple[]" + }, + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig", + name: "hook", + type: "tuple" + }, + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig[]", + name: "fallbacks", + type: "tuple[]" + }, + { + internalType: "contract IERC7484", + name: "registry", + type: "address" + }, + { + internalType: "address[]", + name: "attesters", + type: "address[]" + }, + { + internalType: "uint8", + name: "threshold", + type: "uint8" + } + ], + name: "getInitNexusCalldata", + outputs: [ + { + internalType: "bytes", + name: "init", + type: "bytes" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig[]", + name: "validators", + type: "tuple[]" + }, + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig", + name: "hook", + type: "tuple" + }, + { + internalType: "contract IERC7484", + name: "registry", + type: "address" + }, + { + internalType: "address[]", + name: "attesters", + type: "address[]" + }, + { + internalType: "uint8", + name: "threshold", + type: "uint8" + } + ], + name: "getInitNexusScopedCalldata", + outputs: [ + { + internalType: "bytes", + name: "init", + type: "bytes" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig", + name: "validator", + type: "tuple" + }, + { + internalType: "contract IERC7484", + name: "registry", + type: "address" + }, + { + internalType: "address[]", + name: "attesters", + type: "address[]" + }, + { + internalType: "uint8", + name: "threshold", + type: "uint8" + } + ], + name: "getInitNexusWithSingleValidatorCalldata", + outputs: [ + { + internalType: "bytes", + name: "init", + type: "bytes" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "cursor", + type: "address" + }, + { + internalType: "uint256", + name: "size", + type: "uint256" + } + ], + name: "getValidatorsPaginated", + outputs: [ + { + internalType: "address[]", + name: "array", + type: "address[]" + }, + { + internalType: "address", + name: "next", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig[]", + name: "validators", + type: "tuple[]" + }, + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig[]", + name: "executors", + type: "tuple[]" + }, + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig", + name: "hook", + type: "tuple" + }, + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig[]", + name: "fallbacks", + type: "tuple[]" + }, + { + internalType: "contract IERC7484", + name: "registry", + type: "address" + }, + { + internalType: "address[]", + name: "attesters", + type: "address[]" + }, + { + internalType: "uint8", + name: "threshold", + type: "uint8" + } + ], + name: "initNexus", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig[]", + name: "validators", + type: "tuple[]" + }, + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig", + name: "hook", + type: "tuple" + }, + { + internalType: "contract IERC7484", + name: "registry", + type: "address" + }, + { + internalType: "address[]", + name: "attesters", + type: "address[]" + }, + { + internalType: "uint8", + name: "threshold", + type: "uint8" + } + ], + name: "initNexusScoped", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract IModule", + name: "validator", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + }, + { + internalType: "contract IERC7484", + name: "registry", + type: "address" + }, + { + internalType: "address[]", + name: "attesters", + type: "address[]" + }, + { + internalType: "uint8", + name: "threshold", + type: "uint8" + } + ], + name: "initNexusWithSingleValidator", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "registry", + outputs: [ + { + internalType: "contract IERC7484", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +] as const diff --git a/tests/src/__contracts/abi/BootstrapLibAbi.ts b/tests/src/__contracts/abi/BootstrapLibAbi.ts new file mode 100644 index 000000000..6bd8aafdd --- /dev/null +++ b/tests/src/__contracts/abi/BootstrapLibAbi.ts @@ -0,0 +1,110 @@ +export const BootstrapLibAbi = [ + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "createArrayConfig", + outputs: [ + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig[]", + name: "config", + type: "tuple[]" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address[]", + name: "modules", + type: "address[]" + }, + { + internalType: "bytes[]", + name: "datas", + type: "bytes[]" + } + ], + name: "createMultipleConfigs", + outputs: [ + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig[]", + name: "configs", + type: "tuple[]" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "createSingleConfig", + outputs: [ + { + components: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + internalType: "struct BootstrapConfig", + name: "config", + type: "tuple" + } + ], + stateMutability: "pure", + type: "function" + } +] as const diff --git a/tests/src/__contracts/abi/CounterAbi.ts b/tests/src/__contracts/abi/CounterAbi.ts new file mode 100644 index 000000000..93c3650e1 --- /dev/null +++ b/tests/src/__contracts/abi/CounterAbi.ts @@ -0,0 +1,36 @@ +export const CounterAbi = [ + { + inputs: [], + name: "decrementNumber", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "getNumber", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "incrementNumber", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "revertOperation", + outputs: [], + stateMutability: "pure", + type: "function" + } +] as const diff --git a/tests/src/__contracts/abi/MockExecutorAbi.ts b/tests/src/__contracts/abi/MockExecutorAbi.ts new file mode 100644 index 000000000..ec9f7ba11 --- /dev/null +++ b/tests/src/__contracts/abi/MockExecutorAbi.ts @@ -0,0 +1,309 @@ +export const MockExecutorAbi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes32", + name: "dataFirstWord", + type: "bytes32" + } + ], + name: "ExecutorOnInstallCalled", + type: "event" + }, + { + inputs: [ + { + internalType: "ExecutionMode", + name: "mode", + type: "bytes32" + }, + { + internalType: "contract INexus", + name: "account", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + } + ], + name: "customExecuteViaAccount", + outputs: [ + { + internalType: "bytes[]", + name: "returnData", + type: "bytes[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract INexus", + name: "account", + type: "address" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + } + ], + name: "execDelegatecall", + outputs: [ + { + internalType: "bytes[]", + name: "returnData", + type: "bytes[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract INexus", + name: "account", + type: "address" + }, + { + components: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + } + ], + internalType: "struct Execution[]", + name: "execs", + type: "tuple[]" + } + ], + name: "executeBatchViaAccount", + outputs: [ + { + internalType: "bytes[]", + name: "returnData", + type: "bytes[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract INexus", + name: "account", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + } + ], + name: "executeViaAccount", + outputs: [ + { + internalType: "bytes[]", + name: "returnData", + type: "bytes[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "getModuleTypes", + outputs: [ + { + internalType: "EncodedModuleTypes", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "isInitialized", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" + } + ], + name: "isModuleType", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "onInstall", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "onUninstall", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract INexus", + name: "account", + type: "address" + }, + { + components: [ + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + } + ], + internalType: "struct Execution[]", + name: "execs", + type: "tuple[]" + } + ], + name: "tryExecuteBatchViaAccount", + outputs: [ + { + internalType: "bytes[]", + name: "returnData", + type: "bytes[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "contract INexus", + name: "account", + type: "address" + }, + { + internalType: "address", + name: "target", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + } + ], + name: "tryExecuteViaAccount", + outputs: [ + { + internalType: "bytes[]", + name: "returnData", + type: "bytes[]" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + stateMutability: "payable", + type: "receive" + } +] as const diff --git a/tests/src/__contracts/abi/MockHandlerAbi.ts b/tests/src/__contracts/abi/MockHandlerAbi.ts new file mode 100644 index 000000000..0daeaab6f --- /dev/null +++ b/tests/src/__contracts/abi/MockHandlerAbi.ts @@ -0,0 +1,227 @@ +export const MockHandlerAbi = [ + { + inputs: [ + { + internalType: "bytes4", + name: "selector", + type: "bytes4" + } + ], + name: "NonExistingMethodCalled", + type: "error" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "sender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "GenericFallbackCalled", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes32", + name: "dataFirstWord", + type: "bytes32" + } + ], + name: "HandlerOnInstallCalled", + type: "event" + }, + { + stateMutability: "nonpayable", + type: "fallback" + }, + { + inputs: [], + name: "NAME", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "VERSION", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "count", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "getState", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "isInitialized", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" + } + ], + name: "isModuleType", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "onGenericFallback", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "onInstall", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "onUninstall", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "revertingFunction", + outputs: [], + stateMutability: "pure", + type: "function" + }, + { + inputs: [], + name: "stateChangingFunction", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "successFunction", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "pure", + type: "function" + } +] as const diff --git a/tests/src/__contracts/abi/MockHookAbi.ts b/tests/src/__contracts/abi/MockHookAbi.ts new file mode 100644 index 000000000..11b57fabf --- /dev/null +++ b/tests/src/__contracts/abi/MockHookAbi.ts @@ -0,0 +1,133 @@ +export const MockHookAbi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes32", + name: "dataFirstWord", + type: "bytes32" + } + ], + name: "HookOnInstallCalled", + type: "event" + }, + { + anonymous: false, + inputs: [], + name: "PostCheckCalled", + type: "event" + }, + { + anonymous: false, + inputs: [], + name: "PreCheckCalled", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "isInitialized", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" + } + ], + name: "isModuleType", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "onInstall", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + name: "onUninstall", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "hookData", + type: "bytes" + } + ], + name: "postCheck", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "uint256", + name: "", + type: "uint256" + }, + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + name: "preCheck", + outputs: [ + { + internalType: "bytes", + name: "", + type: "bytes" + } + ], + stateMutability: "nonpayable", + type: "function" + } +] as const diff --git a/tests/src/__contracts/abi/MockRegistryAbi.ts b/tests/src/__contracts/abi/MockRegistryAbi.ts new file mode 100644 index 000000000..0b058e905 --- /dev/null +++ b/tests/src/__contracts/abi/MockRegistryAbi.ts @@ -0,0 +1,162 @@ +export const MockRegistryAbi = [ + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "sender", + type: "address" + } + ], + name: "Log", + type: "event" + }, + { + anonymous: false, + inputs: [], + name: "NewTrustedAttesters", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "address[]", + name: "attesters", + type: "address[]" + }, + { + internalType: "uint256", + name: "threshold", + type: "uint256" + } + ], + name: "check", + outputs: [], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "uint256", + name: "moduleType", + type: "uint256" + }, + { + internalType: "address[]", + name: "attesters", + type: "address[]" + }, + { + internalType: "uint256", + name: "threshold", + type: "uint256" + } + ], + name: "check", + outputs: [], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "uint256", + name: "moduleType", + type: "uint256" + } + ], + name: "check", + outputs: [], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "module", + type: "address" + } + ], + name: "check", + outputs: [], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "smartAccount", + type: "address" + }, + { + internalType: "address", + name: "module", + type: "address" + } + ], + name: "checkForAccount", + outputs: [], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "smartAccount", + type: "address" + }, + { + internalType: "address", + name: "module", + type: "address" + }, + { + internalType: "uint256", + name: "moduleType", + type: "uint256" + } + ], + name: "checkForAccount", + outputs: [], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + }, + { + internalType: "address[]", + name: "attesters", + type: "address[]" + } + ], + name: "trustAttesters", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +] as const diff --git a/tests/src/__contracts/abi/MockTokenAbi.ts b/tests/src/__contracts/abi/MockTokenAbi.ts new file mode 100644 index 000000000..213ee0cf4 --- /dev/null +++ b/tests/src/__contracts/abi/MockTokenAbi.ts @@ -0,0 +1,344 @@ +export const MockTokenAbi = [ + { + inputs: [ + { + internalType: "string", + name: "name", + type: "string" + }, + { + internalType: "string", + name: "symbol", + type: "string" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "allowance", + type: "uint256" + }, + { + internalType: "uint256", + name: "needed", + type: "uint256" + } + ], + name: "ERC20InsufficientAllowance", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "balance", + type: "uint256" + }, + { + internalType: "uint256", + name: "needed", + type: "uint256" + } + ], + name: "ERC20InsufficientBalance", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "approver", + type: "address" + } + ], + name: "ERC20InvalidApprover", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "receiver", + type: "address" + } + ], + name: "ERC20InvalidReceiver", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + } + ], + name: "ERC20InvalidSender", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "ERC20InvalidSpender", + type: "error" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "mint", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +] as const diff --git a/tests/src/__contracts/abi/MockValidatorAbi.ts b/tests/src/__contracts/abi/MockValidatorAbi.ts new file mode 100644 index 000000000..d3ae35043 --- /dev/null +++ b/tests/src/__contracts/abi/MockValidatorAbi.ts @@ -0,0 +1,228 @@ +export const MockValidatorAbi = [ + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "getOwner", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "isInitialized", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "uint256", + name: "moduleTypeId", + type: "uint256" + } + ], + name: "isModuleType", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "pure", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "isOwner", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "bytes32", + name: "hash", + type: "bytes32" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + name: "isValidSignatureWithSender", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "onInstall", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "onUninstall", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + name: "smartAccountOwners", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + components: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "nonce", + type: "uint256" + }, + { + internalType: "bytes", + name: "initCode", + type: "bytes" + }, + { + internalType: "bytes", + name: "callData", + type: "bytes" + }, + { + internalType: "bytes32", + name: "accountGasLimits", + type: "bytes32" + }, + { + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" + }, + { + internalType: "bytes32", + name: "gasFees", + type: "bytes32" + }, + { + internalType: "bytes", + name: "paymasterAndData", + type: "bytes" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + internalType: "struct PackedUserOperation", + name: "userOp", + type: "tuple" + }, + { + internalType: "bytes32", + name: "userOpHash", + type: "bytes32" + } + ], + name: "validateUserOp", + outputs: [ + { + internalType: "uint256", + name: "validation", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + } +] as const diff --git a/tests/src/__contracts/abi/NexusAccountFactoryAbi.ts b/tests/src/__contracts/abi/NexusAccountFactoryAbi.ts new file mode 100644 index 000000000..0e0c48d3c --- /dev/null +++ b/tests/src/__contracts/abi/NexusAccountFactoryAbi.ts @@ -0,0 +1,323 @@ +export const NexusAccountFactoryAbi = [ + { + inputs: [ + { + internalType: "address", + name: "implementation_", + type: "address" + }, + { + internalType: "address", + name: "owner_", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "AccountAlreadyDeployed", + type: "error" + }, + { + inputs: [], + name: "AlreadyInitialized", + type: "error" + }, + { + inputs: [], + name: "ImplementationAddressCanNotBeZero", + type: "error" + }, + { + inputs: [], + name: "InvalidEntryPointAddress", + type: "error" + }, + { + inputs: [], + name: "NewOwnerIsZeroAddress", + type: "error" + }, + { + inputs: [], + name: "NoHandoverRequest", + type: "error" + }, + { + inputs: [], + name: "Unauthorized", + type: "error" + }, + { + inputs: [], + name: "ZeroAddressNotAllowed", + type: "error" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "account", + type: "address" + }, + { + indexed: true, + internalType: "bytes", + name: "initData", + type: "bytes" + }, + { + indexed: true, + internalType: "bytes32", + name: "salt", + type: "bytes32" + } + ], + name: "AccountCreated", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "OwnershipHandoverCanceled", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "OwnershipHandoverRequested", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "oldOwner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "OwnershipTransferred", + type: "event" + }, + { + inputs: [], + name: "ACCOUNT_IMPLEMENTATION", + outputs: [ + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address" + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32" + } + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "cancelOwnershipHandover", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "completeOwnershipHandover", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "initData", + type: "bytes" + }, + { + internalType: "bytes32", + name: "salt", + type: "bytes32" + } + ], + name: "computeAccountAddress", + outputs: [ + { + internalType: "address payable", + name: "expectedAddress", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes", + name: "initData", + type: "bytes" + }, + { + internalType: "bytes32", + name: "salt", + type: "bytes32" + } + ], + name: "createAccount", + outputs: [ + { + internalType: "address payable", + name: "", + type: "address" + } + ], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "result", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "ownershipHandoverExpiresAt", + outputs: [ + { + internalType: "uint256", + name: "result", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "requestOwnershipHandover", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "transferOwnership", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address" + } + ], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address" + }, + { + internalType: "address payable", + name: "withdrawAddress", + type: "address" + } + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +] as const diff --git a/tests/src/__contracts/abi/StakeableAbi.ts b/tests/src/__contracts/abi/StakeableAbi.ts new file mode 100644 index 000000000..9dc5da90e --- /dev/null +++ b/tests/src/__contracts/abi/StakeableAbi.ts @@ -0,0 +1,211 @@ +export const StakeableAbi = [ + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [], + name: "AlreadyInitialized", + type: "error" + }, + { + inputs: [], + name: "InvalidEntryPointAddress", + type: "error" + }, + { + inputs: [], + name: "NewOwnerIsZeroAddress", + type: "error" + }, + { + inputs: [], + name: "NoHandoverRequest", + type: "error" + }, + { + inputs: [], + name: "Unauthorized", + type: "error" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "OwnershipHandoverCanceled", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "OwnershipHandoverRequested", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "oldOwner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "OwnershipTransferred", + type: "event" + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address" + }, + { + internalType: "uint32", + name: "unstakeDelaySec", + type: "uint32" + } + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "cancelOwnershipHandover", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "completeOwnershipHandover", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "result", + type: "address" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "pendingOwner", + type: "address" + } + ], + name: "ownershipHandoverExpiresAt", + outputs: [ + { + internalType: "uint256", + name: "result", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "requestOwnershipHandover", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address" + } + ], + name: "transferOwnership", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address" + } + ], + name: "unlockStake", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "epAddress", + type: "address" + }, + { + internalType: "address payable", + name: "withdrawAddress", + type: "address" + } + ], + name: "withdrawStake", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +] as const diff --git a/tests/src/__contracts/abi/index.ts b/tests/src/__contracts/abi/index.ts new file mode 100644 index 000000000..0b57abb40 --- /dev/null +++ b/tests/src/__contracts/abi/index.ts @@ -0,0 +1,12 @@ +export * from "./MockHookAbi" +export * from "./StakeableAbi" +export * from "./NexusAccountFactoryAbi" +export * from "./BiconomyMetaFactoryAbi" +export * from "./CounterAbi" +export * from "./MockValidatorAbi" +export * from "./MockTokenAbi" +export * from "./BootstrapLibAbi" +export * from "./MockRegistryAbi" +export * from "./MockHandlerAbi" +export * from "./BootstrapAbi" +export * from "./MockExecutorAbi" diff --git a/tests/src/__contracts/addresses.ts b/tests/src/__contracts/addresses.ts new file mode 100644 index 000000000..a2f4227d1 --- /dev/null +++ b/tests/src/__contracts/addresses.ts @@ -0,0 +1,16 @@ +import type { Hex } from "viem" +export const addresses: Record<string, Hex> = { + MockHook: "0xAB9733982E5b98bdDc4f00314E8EA4911A9D1BA5", + Stakeable: "0xc60F4C65a698C0FE5eddACfB71661B580D15BDaa", + NexusAccountFactory: "0x609e47C5404758D83102AB4fe58dbeD4AC39Ae78", + BiconomyMetaFactory: "0x98C8792cf50A93900d575842eDAFf3Ccc2C2902b", + Counter: "0x36023f0abe27eC68fD2c6a489A3e21772A08E120", + MockValidator: "0xa5ab9E06eB79805e6b20586e16285f10cA3274fB", + MockToken: "0x56623d18E54cBbCae340EC449E3c5D1DC0bF60cd", + BootstrapLib: "0x0c66e850AB4aB7e748bf48698a257aaB87d9a899", + MockRegistry: "0x25D55884BFA6380B0fCDc9E924c495C44Aa46415", + MockHandler: "0xBE52B87DA68EC967e977191bE125584b98c1Ea04", + Bootstrap: "0xC952c381C006D14395047A8aeE7F67fB59D38A10", + MockExecutor: "0x940C64D0c650615d3Af0053a4CD32AbAbD3F04e7" +} as const +export default addresses diff --git a/tests/src/__contracts/mockAddresses.ts b/tests/src/__contracts/mockAddresses.ts new file mode 100644 index 000000000..64cc26a32 --- /dev/null +++ b/tests/src/__contracts/mockAddresses.ts @@ -0,0 +1,18 @@ +// The contents of this folder is auto-generated. Please do not edit as your changes are likely to be overwritten + +import type { Hex } from "viem" +export const mockAddresses: Record<string, Hex> = { + MockHook: "0xAB9733982E5b98bdDc4f00314E8EA4911A9D1BA5", + Stakeable: "0xc60F4C65a698C0FE5eddACfB71661B580D15BDaa", + NexusAccountFactory: "0x609e47C5404758D83102AB4fe58dbeD4AC39Ae78", + BiconomyMetaFactory: "0x98C8792cf50A93900d575842eDAFf3Ccc2C2902b", + Counter: "0x36023f0abe27eC68fD2c6a489A3e21772A08E120", + MockValidator: "0xa5ab9E06eB79805e6b20586e16285f10cA3274fB", + MockToken: "0x56623d18E54cBbCae340EC449E3c5D1DC0bF60cd", + BootstrapLib: "0x0c66e850AB4aB7e748bf48698a257aaB87d9a899", + MockRegistry: "0x25D55884BFA6380B0fCDc9E924c495C44Aa46415", + MockHandler: "0xBE52B87DA68EC967e977191bE125584b98c1Ea04", + Bootstrap: "0xC952c381C006D14395047A8aeE7F67fB59D38A10", + MockExecutor: "0x940C64D0c650615d3Af0053a4CD32AbAbD3F04e7" +} as const +export default mockAddresses diff --git a/tests/src/callDatas.ts b/tests/src/callDatas.ts new file mode 100644 index 000000000..5af88824d --- /dev/null +++ b/tests/src/callDatas.ts @@ -0,0 +1,14 @@ +import type { Hex } from "viem" +export const ENTRY_POINT_SIMULATIONS_CREATECALL: Hex = + "0x313233340000000000000000000000000000000000000000000000000000000060806040526040516100109061005f565b604051809103906000f08015801561002c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b039290921691909117905534801561005957600080fd5b5061006c565b613d318061050783390190565b61048c8061007b6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c18f522614610030575b600080fd5b61004361003e366004610230565b610059565b60405161005091906103b0565b60405180910390f35b60606000825167ffffffffffffffff811115610077576100776101e9565b6040519080825280602002602001820160405280156100aa57816020015b60608152602001906001900390816100955790505b50905060005b835181101561019d57606060007f850aaf621a3721219c57b79d6077e318862cf95113b5637afaddb124884a5eb060008054906101000a90046001600160a01b031687858151811061010457610104610414565b602002602001015160405160240161011d92919061042a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050600061015f8882845a6101a5565b905080610174576101716000196101bd565b92505b8285858151811061018757610187610414565b60209081029190910101525050506001016100b0565b509392505050565b6000806000845160208601878987f195945050505050565b60603d828111156101cb5750815b604051602082018101604052818152816000602083013e9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610228576102286101e9565b604052919050565b600080604080848603121561024457600080fd5b83356001600160a01b038116811461025b57600080fd5b925060208481013567ffffffffffffffff8082111561027957600080fd5b8187019150601f88601f84011261028f57600080fd5b8235828111156102a1576102a16101e9565b8060051b6102b08682016101ff565b918252848101860191868101908c8411156102ca57600080fd5b87870192505b83831015610357578235868111156102e85760008081fd5b8701603f81018e136102fa5760008081fd5b888101358781111561030e5761030e6101e9565b61031f818801601f19168b016101ff565b8181528f8c8385010111156103345760008081fd5b818c84018c83013760009181018b019190915283525091870191908701906102d0565b8099505050505050505050509250929050565b6000815180845260005b8181101561039057602081850181015186830182015201610374565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561040757603f198886030184526103f585835161036a565b945092850192908501906001016103d9565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038316815260406020820181905260009061044e9083018461036a565b94935050505056fea26469706673582212207ddd3776bce2d23a4710581621f90634e5e2f38c35b4ba3416ba605ac54ef07b64736f6c6343000817003360a060405260405162000012906200009d565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b506001600160a01b0390811660805260408051808201825260008082528251808401909352808352602080840191825282018390529051600380546001600160a01b031916919094161790925551600455516005553480156200009157600080fd5b506001600255620000ab565b6102138062003b1e83390190565b608051613a5a620000c460003960005050613a5a6000f3fe6080604052600436106101395760003560e01c80635287ce12116100ab578063bb9fe6bf1161006f578063bb9fe6bf14610505578063c23a5cea1461051a578063c3bce0091461053a578063c5f996e614610567578063fc7e286d14610587578063fe2171cb1461062f57600080fd5b80635287ce12146103575780635895273b1461046f57806370a082311461048f578063b760faf9146104c5578063baa22044146104d857600080fd5b80631b2e01b8116100fd5780631b2e01b814610219578063205c28781461025f57806322cdde4c1461027f578063263934db1461029f57806330ec25d1146102cc57806335567e1a146102f957600080fd5b80630396cb601461014e5780630513fbf4146101615780630bd28e3b146101975780630da82661146101b75780630dbfc6bd146101ec57600080fd5b36610149576101473361064f565b005b600080fd5b61014761015c366004612c8c565b610670565b34801561016d57600080fd5b5061018161017c366004612cfd565b610904565b60405161018e9190612e11565b60405180910390f35b3480156101a357600080fd5b506101476101b2366004612e8c565b610a24565b3480156101c357600080fd5b506101d76101d2366004612fd8565b610a5b565b6040805192835260208301919091520161018e565b3480156101f857600080fd5b5061020c610207366004613127565b610b90565b60405161018e91906131c6565b34801561022557600080fd5b5061025161023436600461321d565b600160209081526000928352604080842090915290825290205481565b60405190815260200161018e565b34801561026b57600080fd5b5061014761027a366004613252565b610c4f565b34801561028b57600080fd5b5061025161029a366004613297565b610da0565b3480156102ab57600080fd5b506102bf6102ba366004613127565b610de2565b60405161018e91906132cb565b3480156102d857600080fd5b506102ec6102e7366004613127565b610e79565b60405161018e91906133a7565b34801561030557600080fd5b5061025161031436600461321d565b6001600160a01b039190911660009081526001602090815260408083206001600160c01b0385168452909152908190205491901b67ffffffffffffffff19161790565b34801561036357600080fd5b506104146103723660046133fe565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b031660009081526020818152604091829020825160a0810184528154815260019091015460ff811615159282019290925261010082046001600160701b031692810192909252600160781b810463ffffffff166060830152600160981b900465ffffffffffff16608082015290565b60405161018e9190600060a082019050825182526020830151151560208301526001600160701b03604084015116604083015263ffffffff606084015116606083015265ffffffffffff608084015116608083015292915050565b34801561047b57600080fd5b506102bf61048a366004613297565b610f2e565b34801561049b57600080fd5b506102516104aa3660046133fe565b6001600160a01b031660009081526020819052604090205490565b6101476104d33660046133fe565b61064f565b3480156104e457600080fd5b506104f86104f3366004612cfd565b610fe9565b60405161018e919061341b565b34801561051157600080fd5b50610147611046565b34801561052657600080fd5b506101476105353660046133fe565b61117a565b34801561054657600080fd5b5061055a610555366004613297565b61139e565b60405161018e919061342e565b34801561057357600080fd5b506104f8610582366004613441565b611563565b34801561059357600080fd5b506105ec6105a23660046133fe565b6000602081905290815260409020805460019091015460ff81169061010081046001600160701b031690600160781b810463ffffffff1690600160981b900465ffffffffffff1685565b6040805195865293151560208601526001600160701b039092169284019290925263ffffffff909116606083015265ffffffffffff16608082015260a00161018e565b34801561063b57600080fd5b5061055a61064a366004613127565b61164e565b60015b600581101561066357600101610652565b61066c82611662565b5050565b33600090815260208190526040902063ffffffff82166106d75760405162461bcd60e51b815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c617900000000000060448201526064015b60405180910390fd5b600181015463ffffffff600160781b9091048116908316101561073c5760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d650000000060448201526064016106ce565b600181015460009061075d90349061010090046001600160701b03166134fc565b9050600081116107a45760405162461bcd60e51b81526020600482015260126024820152711b9bc81cdd185ad9481cdc1958da599a595960721b60448201526064016106ce565b6001600160701b038111156107ec5760405162461bcd60e51b815260206004820152600e60248201526d7374616b65206f766572666c6f7760901b60448201526064016106ce565b6040805160a08101825283548152600160208083018281526001600160701b0386811685870190815263ffffffff8a811660608801818152600060808a0181815233808352828a52918c90209a518b55965199909801805494519151965165ffffffffffff16600160981b0265ffffffffffff60981b1997909416600160781b029690961669ffffffffffffffffffff60781b1991909516610100026effffffffffffffffffffffffffff0019991515999099166effffffffffffffffffffffffffffff1990941693909317979097179190911691909117179055835185815290810192909252917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050565b60606000866001600160401b0381111561092057610920612ea7565b60405190808252806020026020018201604052801561096d57816020015b6040805160608082018352600080835260208301529181019190915281526020019060019003908161093e5790505b50905060005b87811015610a185760006109ef8a8a848181106109925761099261350f565b90506020028101906109a49190613525565b8989858181106109b6576109b661350f565b90506020020160208101906109cb91906133fe565b8888868181106109dd576109dd61350f565b90506020028101906105829190613546565b905080838381518110610a0457610a0461350f565b602090810291909101015250600101610973565b50979650505050505050565b3360009081526001602090815260408083206001600160c01b03851684529091528120805491610a538361358c565b919050555050565b8251606081015160a08201516000928392909181016127100160405a603f0281610a8757610a876135a5565b041015610ad25760408051631101335b60e11b8152600060048201526024810191909152600f60448201526e41413935206f7574206f662067617360881b60648201526084016106ce565b875160009015610b66576000610aef846000015160008c866116ab565b905080610b64576000610b036108006116c3565b805190915015610b5e5784600001516001600160a01b03168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201876020015184604051610b559291906135bb565b60405180910390a35b60019250505b505b600088608001515a8803019050610b7f828a8a846116ef565b955095505050505094509492505050565b60606000826001600160401b03811115610bac57610bac612ea7565b604051908082528060200260200182016040528015610be557816020015b610bd2612ac0565b815260200190600190039081610bca5790505b50905060005b83811015610c45576000610c1c868684818110610c0a57610c0a61350f565b905060200281019061048a9190613525565b905080838381518110610c3157610c3161350f565b602090810291909101015250600101610beb565b5090505b92915050565b3360009081526020819052604090208054821115610caf5760405162461bcd60e51b815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c617267650000000000000060448201526064016106ce565b8054610cbc9083906135d4565b8155604080516001600160a01b03851681526020810184905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb910160405180910390a26000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114610d4f576040519150601f19603f3d011682016040523d82523d6000602084013e610d54565b606091505b5050905080610d9a5760405162461bcd60e51b81526020600482015260126024820152716661696c656420746f20776974686472617760701b60448201526064016106ce565b50505050565b6000610dab8261191b565b6040805160208101929092523090820152466060820152608001604051602081830303815290604052805190602001209050919050565b610dea612ac0565b6000826001600160401b03811115610e0457610e04612ea7565b604051908082528060200260200182016040528015610e3d57816020015b610e2a612ac0565b815260200190600190039081610e225790505b509050610e4a8484610b90565b905080610e586001856135d4565b81518110610e6857610e6861350f565b602002602001015191505092915050565b60606000826001600160401b03811115610e9557610e95612ea7565b604051908082528060200260200182016040528015610ece57816020015b610ebb612b07565b815260200190600190039081610eb35790505b50905060005b83811015610c45576000610f05868684818110610ef357610ef361350f565b90506020028101906105559190613525565b905080838381518110610f1a57610f1a61350f565b602090810291909101015250600101610ed4565b610f36612ac0565b610f3e611934565b610f46612bbc565b610f4f8361195c565b6000806000610f6060008786611a29565b925092509250600080610f738887611c57565b915091506040518061010001604052808760800151815260200183815260200186815260200185815260200184815260200182815260200160001515815260200160405180604001604052806002815260200161060f60f31b8152508152509650505050505050610fe46001600255565b919050565b60408051606080820183526000808352602083018190529282015290611013888888888888610904565b9050806110216001896135d4565b815181106110315761103161350f565b60200260200101519150509695505050505050565b33600090815260208190526040812060018101549091600160781b90910463ffffffff1690036110a55760405162461bcd60e51b815260206004820152600a6024820152691b9bdd081cdd185ad95960b21b60448201526064016106ce565b600181015460ff166110ed5760405162461bcd60e51b8152602060048201526011602482015270616c726561647920756e7374616b696e6760781b60448201526064016106ce565b600181015460009061110c90600160781b900463ffffffff16426135e7565b60018301805460ff65ffffffffffff60981b011916600160981b65ffffffffffff841690810260ff19169190911790915560405190815290915033907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a906020015b60405180910390a25050565b336000908152602081905260409020600181015461010090046001600160701b0316806111e05760405162461bcd60e51b81526020600482015260146024820152734e6f207374616b6520746f20776974686472617760601b60448201526064016106ce565b6001820154600160981b900465ffffffffffff166112405760405162461bcd60e51b815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b65282920666972737400000060448201526064016106ce565b600182015442600160981b90910465ffffffffffff1611156112a45760405162461bcd60e51b815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f7420647565000000000060448201526064016106ce565b600182018054610100600160c81b0319169055604080516001600160a01b03851681526020810183905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda3910160405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d8060008114611348576040519150601f19603f3d011682016040523d82523d6000602084013e61134d565b606091505b5050905080610d9a5760405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b65000000000000000060448201526064016106ce565b6113a6612b07565b6113ae612bbc565b6113b78361195c565b6000806113c660008685611a29565b50915091506113d9600083836000611d64565b60006113ec846000015160e00151611f00565b8451519091506000906113fe90611f00565b905061141d604051806040016040528060008152602001600081525090565b36600061142d60408b018b613546565b90925090506000601482101561144457600061145f565b61145260146000848661360d565b61145b91613637565b60601c5b905061146a81611f00565b9350505050600085905060006040518060a0016040528089608001518152602001896040015181526020018881526020018781526020016114ac8a6060015190565b90526040805180820182526003546001600160a01b0390811682528251808401909352600454835260055460208481019190915282019290925291925083161580159061150357506001836001600160a01b031614155b15611530576040518060400160405280846001600160a01b0316815260200161152b85611f00565b905290505b6040805160a081018252928352602083019590955293810192909252506060810192909252608082015295945050505050565b60408051606080820183526000808352602083015291810191909152611587612bbc565b6115908661195c565b61159c60008783611a29565b506000915060609050816001600160a01b0388161561162b5760005a9050886001600160a01b031688886040516115d492919061366c565b6000604051808303816000865af19150503d8060008114611611576040519150601f19603f3d011682016040523d82523d6000602084013e611616565b606091505b5090945092505a61162790826135d4565b9150505b604080516060810182529182529215156020820152918201529695505050505050565b611656612b07565b6000610e4a8484610e79565b600061166e8234611f52565b9050816001600160a01b03167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c48260405161116e91815260200190565b6000806000845160208601878987f195945050505050565b60603d828111156116d15750815b604051602082018101604052818152816000602083013e9392505050565b60008060005a86519091506000908161170782611f85565b60e08301519091506001600160a01b038116611726578251935061183e565b80935060008951111561183e57878202965060028b600281111561174c5761174c61367c565b1461183e5760005a9050816001600160a01b0316637c627b218560a001518e8d8c886040518663ffffffff1660e01b815260040161178d9493929190613692565b600060405180830381600088803b1580156117a757600080fd5b5087f1935050505080156117b9575060015b611838578a5180516020808e01519201516001600160a01b0390911691907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f4792906118046108006116c3565b6040516118129291906135bb565b60405180910390a38a608001515a870301985061183260028c8c8c6116ef565b90985096505b5a900395505b5a60a0840151606085015160808d01519288039a909a01990190890380821115611871576064600a828403020499909901985b505060408a01518883029750878110156118d75760028c60028111156118995761189961367c565b036118bc578097506118aa8b611fb7565b6118b78b60008a8c612006565b61190c565b8a608001515a87030198508a6040015197506118aa8b611fb7565b8781036118e48682611f52565b506000808e60028111156118fa576118fa61367c565b1490506119098d828c8e612006565b50505b50505050505094509492505050565b600061192682612081565b805190602001209050919050565b600280540361195657604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b6119cf6040516135a560f21b60208201526bffffffffffffffffffffffff193060601b166022820152600160f81b603682015260009060370160408051808303601f190181529190528051602090910120600680546001600160a01b0319166001600160a01b0390921691909117905550565b6000611a006119e16040840184613546565b6119ee60208601866133fe565b6119fb60e0870187613546565b612139565b9050805160001461066c57600081604051631101335b60e11b81526004016106ce9291906135bb565b6000806000805a8551909150611a3f8782612215565b611a4887610da0565b6020870152604081015161012082015161010083015160a08401516080850151606086015160c0870151861717171717176effffffffffffffffffffffffffffff811115611ad85760405162461bcd60e51b815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f77000000000000000060448201526064016106ce565b6000611b078460c081015160a08201516080830151606084015160408501516101009095015194010101010290565b9050611b168b8b8b8487612323565b9750611b2a846000015185602001516124ba565b611b80578a604051631101335b60e11b81526004016106ce918152604060208201819052601a908201527f4141323520696e76616c6964206163636f756e74206e6f6e6365000000000000606082015260800190565b825a86031115611bdc578a604051631101335b60e11b81526004016106ce918152604060208201819052601e908201527f41413236206f76657220766572696669636174696f6e4761734c696d69740000606082015260800190565b606060005a60e08701519091506001600160a01b031615611c0857611c038d8d8d86612507565b995091505b60408b018390528160608c015260a08c01355a88030160808c015260645a611c3090836135d4565b611c3b9060736136dc565b611c4591906136f3565b97505050505050505093509350939050565b60008060005a90506000611c6c856060015190565b604051909150366000611c8260608a018a613546565b915091506000816003811115611c9757833591505b506372288ed160e01b6001600160e01b0319821601611d0d5760008a8a60200151604051602401611cc9929190613862565b60408051601f198184030181529190526020810180516001600160e01b0316638dd7712f60e01b1790529050611d01818b888a610a5b565b9099509750611d579050565b611d5183838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508991508a9050610a5b565b90985096505b5050505050509250929050565b600080611d70856126b6565b91509150816001600160a01b0316836001600160a01b031614611dd65785604051631101335b60e11b81526004016106ce9181526040602082018190526014908201527320a0991a1039b4b3b730ba3ab9329032b93937b960611b606082015260800190565b8015611e2e5785604051631101335b60e11b81526004016106ce9181526040602082018190526017908201527f414132322065787069726564206f72206e6f7420647565000000000000000000606082015260800190565b6000611e39856126b6565b925090506001600160a01b03811615611e955786604051631101335b60e11b81526004016106ce9181526040602082018190526014908201527320a0999a1039b4b3b730ba3ab9329032b93937b960611b606082015260800190565b8115611ef75786604051631101335b60e11b81526004016106ce9181526040602082018190526021908201527f41413332207061796d61737465722065787069726564206f72206e6f742064756060820152606560f81b608082015260a00190565b50505050505050565b604080518082018252600080825260208083018281526001600160a01b03959095168252819052919091206001015461010081046001600160701b03168252600160781b900463ffffffff1690915290565b6001600160a01b038216600090815260208190526040812080548290611f799085906134fc565b91829055509392505050565b61010081015161012082015160009190808203611fa3575092915050565b611faf82488301612709565b949350505050565b80518051602080840151928101516040519081526001600160a01b0390921692917f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e910160405180910390a350565b835160e081015181516020808801519301516040516001600160a01b039384169492909316927f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f916120739189908990899093845291151560208401526040830152606082015260800190565b60405180910390a450505050565b60608135602083013560006120a161209c6040870187613546565b612721565b905060006120b561209c6060880188613546565b9050608086013560a087013560c088013560006120d861209c60e08c018c613546565b604080516001600160a01b039a909a1660208b015289810198909852606089019690965250608087019390935260a086019190915260c085015260e08401526101008084019190915281518084039091018152610120909201905292915050565b60608415801561215157506001600160a01b0384163b155b15612190575060408051808201909152601981527f41413230206163636f756e74206e6f74206465706c6f79656400000000000000602082015261220c565b601482106121fb5760006121a7601482858761360d565b6121b091613637565b60601c9050803b6000036121f957505060408051808201909152601b81527f41413330207061796d6173746572206e6f74206465706c6f7965640000000000602082015261220c565b505b506040805160208101909152600081525b95945050505050565b61222260208301836133fe565b6001600160a01b03168152602082810135908201526001600160801b036080808401358281166060850152811c604084015260a084013560c0808501919091528401359182166101008401521c61012082015236600061228560e0850185613546565b909250905080156123085760348110156122e15760405162461bcd60e51b815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e644461746100000060448201526064016106ce565b6122eb8282612734565b60a086015260808501526001600160a01b031660e0840152610d9a565b600060e084018190526080840181905260a084015250505050565b8251805160009190612342888761233d60408b018b613546565b61279c565b60e082015160006001600160a01b038216612386576001600160a01b03831660009081526020819052604090205487811161237f57808803612382565b60005b9150505b60208801516040516306608bdf60e21b81526001600160a01b038516916319822f7c9189916123bc918e91908790600401613884565b60206040518083038160008887f1935050505080156123f8575060408051601f3d908101601f191682019092526123f5918101906138a9565b60015b61242357896124086108006116c3565b6040516365c8fd4d60e01b81526004016106ce9291906138c2565b94506001600160a01b0382166124ad576001600160a01b03831660009081526020819052604090208054808911156124a7578b604051631101335b60e11b81526004016106ce9181526040602082018190526017908201527f41413231206469646e2774207061792070726566756e64000000000000000000606082015260800190565b88900390555b5050505095945050505050565b6001600160a01b038216600090815260016020908152604080832084821c80855292528220805484916001600160401b0383169190856124f98361358c565b909155501495945050505050565b60606000805a855160e08101516001600160a01b03811660009081526020819052604090208054939450919290919087811015612590578a604051631101335b60e11b81526004016106ce918152604060208201819052601e908201527f41413331207061796d6173746572206465706f73697420746f6f206c6f770000606082015260800190565b8781038260000181905550600084608001519050836001600160a01b03166352b7512c828d8d602001518d6040518563ffffffff1660e01b81526004016125d993929190613884565b60006040518083038160008887f19350505050801561261a57506040513d6000823e601f3d908101601f1916820160405261261791908101906138ff565b60015b612645578b61262a6108006116c3565b6040516365c8fd4d60e01b81526004016106ce92919061397f565b9098509650805a8703111561190c578b604051631101335b60e11b81526004016106ce9181526040602082018190526027908201527f41413336206f766572207061796d6173746572566572696669636174696f6e47606082015266185cd31a5b5a5d60ca1b608082015260a00190565b600080826000036126cc57506000928392509050565b60006126d784612a4f565b9050806040015165ffffffffffff164211806126fe5750806020015165ffffffffffff1642105b905194909350915050565b6000818310612718578161271a565b825b9392505050565b6000604051828085833790209392505050565b60008080612745601482868861360d565b61274e91613637565b60601c61275f60246014878961360d565b612768916139bc565b60801c61277960346024888a61360d565b612782916139bc565b9194506001600160801b0316925060801c90509250925092565b8015610d9a578251516001600160a01b0381163b156128075784604051631101335b60e11b81526004016106ce918152604060208201819052601f908201527f414131302073656e64657220616c726561647920636f6e737472756374656400606082015260800190565b600061281b6006546001600160a01b031690565b6001600160a01b031663570e1a3686600001516040015186866040518463ffffffff1660e01b81526004016128519291906139f3565b60206040518083038160008887f1158015612870573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128959190613a07565b90506001600160a01b0381166128f75785604051631101335b60e11b81526004016106ce918152604060208201819052601b908201527f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000606082015260800190565b816001600160a01b0316816001600160a01b0316146129615785604051631101335b60e11b81526004016106ce91815260406020808301829052908201527f4141313420696e6974436f6465206d7573742072657475726e2073656e646572606082015260800190565b806001600160a01b03163b6000036129c45785604051631101335b60e11b81526004016106ce91815260406020808301829052908201527f4141313520696e6974436f6465206d757374206372656174652073656e646572606082015260800190565b60006129d3601482868861360d565b6129dc91613637565b60601c9050826001600160a01b031686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160e00151604051612a3e9291906001600160a01b0392831681529116602082015260400190565b60405180910390a350505050505050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003612a8b575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b604051806101000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001606081525090565b6040518060a00160405280612b446040518060a0016040528060008152602001600081526020016000815260200160008152602001606081525090565b8152602001612b66604051806040016040528060008152602001600081525090565b8152602001612b88604051806040016040528060008152602001600081525090565b8152602001612baa604051806040016040528060008152602001600081525090565b8152602001612bb7612c54565b905290565b6040518060a00160405280612c2f60405180610140016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081525090565b8152602001600080191681526020016000815260200160008152602001600081525090565b604051806040016040528060006001600160a01b03168152602001612bb7604051806040016040528060008152602001600081525090565b600060208284031215612c9e57600080fd5b813563ffffffff8116811461271a57600080fd5b60008083601f840112612cc457600080fd5b5081356001600160401b03811115612cdb57600080fd5b6020830191508360208260051b8501011115612cf657600080fd5b9250929050565b60008060008060008060608789031215612d1657600080fd5b86356001600160401b0380821115612d2d57600080fd5b612d398a838b01612cb2565b90985096506020890135915080821115612d5257600080fd5b612d5e8a838b01612cb2565b90965094506040890135915080821115612d7757600080fd5b50612d8489828a01612cb2565b979a9699509497509295939492505050565b60005b83811015612db1578181015183820152602001612d99565b50506000910152565b60008151808452612dd2816020860160208601612d96565b601f01601f19169290920160200192915050565b805182526020810151151560208301526000604082015160606040850152611faf6060850182612dba565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612e6857603f19888603018452612e56858351612de6565b94509285019290850190600101612e3a565b5092979650505050505050565b80356001600160c01b0381168114610fe457600080fd5b600060208284031215612e9e57600080fd5b61271a82612e75565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715612edf57612edf612ea7565b60405290565b60405161014081016001600160401b0381118282101715612edf57612edf612ea7565b604051601f8201601f191681016001600160401b0381118282101715612f3057612f30612ea7565b604052919050565b60006001600160401b03821115612f5157612f51612ea7565b50601f01601f191660200190565b600082601f830112612f7057600080fd5b8135612f83612f7e82612f38565b612f08565b818152846020838601011115612f9857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114612fca57600080fd5b50565b8035610fe481612fb5565b600080600080848603610220811215612ff057600080fd5b85356001600160401b038082111561300757600080fd5b61301389838a01612f5f565b9650601f19830192506101c091508183121561302e57600080fd5b613036612ebd565b6101408085121561304657600080fd5b61304e612ee5565b945061305c60208b01612fcd565b855260408a0135602086015260608a0135604086015260808a0135606086015260a08a0135608086015260c08a013560a086015260e08a013560c08601526101006130a8818c01612fcd565b60e08701526101208b81013591870191909152908a013590850152928352610160880135602084015261018088013560408401526101a088013560608401528188013560808401529194506101e0870135918083111561310757600080fd5b505061311587828801612f5f565b94979396509394610200013593505050565b6000806020838503121561313a57600080fd5b82356001600160401b0381111561315057600080fd5b61315c85828601612cb2565b90969095509350505050565b6000610100825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c0830151151560c085015260e08301518160e086015261220c82860182612dba565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612e6857603f1988860301845261320b858351613168565b945092850192908501906001016131ef565b6000806040838503121561323057600080fd5b823561323b81612fb5565b915061324960208401612e75565b90509250929050565b6000806040838503121561326557600080fd5b823561327081612fb5565b946020939093013593505050565b6000610120828403121561329157600080fd5b50919050565b6000602082840312156132a957600080fd5b81356001600160401b038111156132bf57600080fd5b611faf8482850161327e565b60208152600061271a6020830184613168565b80516101408084528151908401526020810151610160840152604081015161018084015260608101516101a08401526080015160a06101c084015260009061332a6101e0850182612dba565b90506020830151613348602086018280518252602090810151910152565b5060408301518051606086015260208101516080860152506060830151805160a0860152602081015160c0860152506080830151610c4560e086018280516001600160a01b031682526020908101518051828401520151604090910152565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612e6857603f198886030184526133ec8583516132de565b945092850192908501906001016133d0565b60006020828403121561341057600080fd5b813561271a81612fb5565b60208152600061271a6020830184612de6565b60208152600061271a60208301846132de565b6000806000806060858703121561345757600080fd5b84356001600160401b038082111561346e57600080fd5b61347a8883890161327e565b95506020870135915061348c82612fb5565b909350604086013590808211156134a257600080fd5b818701915087601f8301126134b657600080fd5b8135818111156134c557600080fd5b8860208285010111156134d757600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c4957610c496134e6565b634e487b7160e01b600052603260045260246000fd5b6000823561011e1983360301811261353c57600080fd5b9190910192915050565b6000808335601e1984360301811261355d57600080fd5b8301803591506001600160401b0382111561357757600080fd5b602001915036819003821315612cf657600080fd5b60006001820161359e5761359e6134e6565b5060010190565b634e487b7160e01b600052601260045260246000fd5b828152604060208201526000611faf6040830184612dba565b81810381811115610c4957610c496134e6565b65ffffffffffff818116838216019080821115613606576136066134e6565b5092915050565b6000808585111561361d57600080fd5b8386111561362a57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156136645780818660140360031b1b83161692505b505092915050565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fd5b6000600386106136b257634e487b7160e01b600052602160045260246000fd5b858252608060208301526136c96080830186612dba565b6040830194909452506060015292915050565b8082028115828204841417610c4957610c496134e6565b60008261371057634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e1984360301811261372c57600080fd5b83016020810192503590506001600160401b0381111561374b57600080fd5b803603821315612cf657600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101206137a28461379585612fcd565b6001600160a01b03169052565b602083013560208501526137b96040840184613715565b8260408701526137cc838701828461375a565b925050506137dd6060840184613715565b85830360608701526137f083828461375a565b925050506080830135608085015260a083013560a085015260c083013560c085015261381f60e0840184613715565b85830360e087015261383283828461375a565b9250505061010061384581850185613715565b8684038388015261385784828461375a565b979650505050505050565b6040815260006138756040830185613783565b90508260208301529392505050565b6060815260006138976060830186613783565b60208301949094525060400152919050565b6000602082840312156138bb57600080fd5b5051919050565b82815260606020820152600d60608201526c10504c8cc81c995d995c9d1959609a1b608082015260a060408201526000611faf60a0830184612dba565b6000806040838503121561391257600080fd5b82516001600160401b0381111561392857600080fd5b8301601f8101851361393957600080fd5b8051613947612f7e82612f38565b81815286602083850101111561395c57600080fd5b61396d826020830160208601612d96565b60209590950151949694955050505050565b82815260606020820152600d60608201526c10504cccc81c995d995c9d1959609a1b608082015260a060408201526000611faf60a0830184612dba565b6fffffffffffffffffffffffffffffffff1981358181169160108510156136645760109490940360031b84901b1690921692915050565b602081526000611faf60208301848661375a565b600060208284031215613a1957600080fd5b815161271a81612fb556fea2646970667358221220c6ad4b2b56624cba321cec929c4bdd6329f5811c936f40e8ff5cfb92ef9b433f64736f6c63430008170033608060405234801561001057600080fd5b506101f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004361003e3660046100ec565b61005f565b6040516001600160a01b03909116815260200160405180910390f35b60008061006f601482858761015e565b61007891610188565b60601c9050600061008c846014818861015e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084519495509360209350849250905082850182875af190506000519350806100e357600093505b50505092915050565b600080602083850312156100ff57600080fd5b823567ffffffffffffffff8082111561011757600080fd5b818501915085601f83011261012b57600080fd5b81358181111561013a57600080fd5b86602082850101111561014c57600080fd5b60209290920196919550909350505050565b6000808585111561016e57600080fd5b8386111561017b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156101b55780818660140360031b1b83161692505b50509291505056fea2646970667358221220f5d91be997c659d0ef966f0c016a41e736500c794f93ad11197e128a54287a9964736f6c63430008170033" + +export const ENTRY_POINT_V07_CREATECALL: Hex = + "0x90d8084deab30c2a37c45e8d47f49f2f7965183cb6990a98943ef94940681de360a08060405234620000825760016002556101df8181016001600160401b038111838210176200006c57829162003f2b833903906000f080156200006057608052604051613ea39081620000888239608051818181610d22015261324b0152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610024575b361561001957600080fd5b61002233612748565b005b60003560e01c806242dc5314611b0057806301ffc9a7146119ae5780630396cb60146116765780630bd28e3b146115fa5780631b2e01b814611566578063205c2878146113d157806322cdde4c1461136b57806335567e1a146112b35780635287ce12146111a557806370a0823114611140578063765e827f14610e82578063850aaf6214610dc35780639b249f6914610c74578063b760faf914610c3a578063bb9fe6bf14610a68578063c23a5cea146107c4578063dbed18e0146101a15763fc7e286d0361000e573461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61013a61229f565b16600052600060205260a0604060002065ffffffffffff6001825492015460405192835260ff8116151560208401526dffffffffffffffffffffffffffff8160081c16604084015263ffffffff8160781c16606084015260981c166080820152f35b600080fd5b3461019c576101af36612317565b906101b86129bd565b60009160005b82811061056f57506101d08493612588565b6000805b8481106102fc5750507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000809360005b81811061024757610240868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2613ba7565b6001600255005b6102a261025582848a612796565b73ffffffffffffffffffffffffffffffffffffffff6102766020830161282a565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a2806127d6565b906000915b8083106102b957505050600101610209565b909194976102f36102ed6001926102e78c8b6102e0826102da8e8b8d61269d565b9261265a565b5191613597565b90612409565b99612416565b950191906102a7565b6020610309828789612796565b61031f61031682806127d6565b9390920161282a565b9160009273ffffffffffffffffffffffffffffffffffffffff8091165b8285106103505750505050506001016101d4565b909192939561037f83610378610366848c61265a565b516103728b898b61269d565b856129f6565b9290613dd7565b9116840361050a576104a5576103958491613dd7565b9116610440576103b5576103aa600191612416565b96019392919061033c565b60a487604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b61057a818487612796565b9361058585806127d6565b919095602073ffffffffffffffffffffffffffffffffffffffff6105aa82840161282a565b1697600192838a1461076657896105da575b5050505060019293949550906105d191612409565b939291016101be565b8060406105e892019061284b565b918a3b1561019c57929391906040519485937f2dd8113300000000000000000000000000000000000000000000000000000000855288604486016040600488015252606490818601918a60051b8701019680936000915b8c83106106e657505050505050838392610684927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8560009803016024860152612709565b03818a5afa90816106d7575b506106c657602486604051907f86a9f7500000000000000000000000000000000000000000000000000000000082526004820152fd5b93945084936105d1600189806105bc565b6106e0906121bd565b88610690565b91939596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c908a9294969a0301865288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181121561019c57836107538793858394016128ec565b9a0196019301909189979695949261063f565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b3461019c576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576107fc61229f565b33600052600082526001604060002001908154916dffffffffffffffffffffffffffff8360081c16928315610a0a5765ffffffffffff8160981c1680156109ac57421061094e5760009373ffffffffffffffffffffffffffffffffffffffff859485947fffffffffffffff000000000000000000000000000000000000000000000000ff86951690556040517fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda33391806108da8786836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a2165af16108e8612450565b50156108f057005b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b3461019c5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c573360005260006020526001604060002001805463ffffffff8160781c16908115610bdc5760ff1615610b7e5765ffffffffffff908142160191818311610b4f5780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609885901b161790556040519116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610022610c6f61229f565b612748565b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043567ffffffffffffffff811161019c576020610cc8610d1b9236906004016122c2565b919073ffffffffffffffffffffffffffffffffffffffff9260405194859283927f570e1a360000000000000000000000000000000000000000000000000000000084528560048501526024840191612709565b03816000857f0000000000000000000000000000000000000000000000000000000000000000165af1908115610db757602492600092610d86575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b610da991925060203d602011610db0575b610da181836121ed565b8101906126dd565b9083610d56565b503d610d97565b6040513d6000823e3d90fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610dfa61229f565b60243567ffffffffffffffff811161019c57600091610e1e839236906004016122c2565b90816040519283928337810184815203915af4610e39612450565b90610e7e6040519283927f99410554000000000000000000000000000000000000000000000000000000008452151560048401526040602484015260448301906123c6565b0390fd5b3461019c57610e9036612317565b610e9b9291926129bd565b610ea483612588565b60005b848110610f1c57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000915b858310610eec576102408585613ba7565b909193600190610f12610f0087898761269d565b610f0a888661265a565b519088613597565b0194019190610edb565b610f47610f40610f2e8385979561265a565b51610f3a84898761269d565b846129f6565b9190613dd7565b73ffffffffffffffffffffffffffffffffffffffff929183166110db5761107657610f7190613dd7565b911661101157610f8657600101929092610ea7565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61118c61229f565b1660005260006020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff6111f161229f565b6000608060405161120181612155565b828152826020820152826040820152826060820152015216600052600060205260a06040600020608060405161123681612155565b6001835493848352015490602081019060ff8316151582526dffffffffffffffffffffffffffff60408201818560081c16815263ffffffff936060840193858760781c16855265ffffffffffff978891019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206112ec61229f565b73ffffffffffffffffffffffffffffffffffffffff6113096122f0565b911660005260018252604060002077ffffffffffffffffffffffffffffffffffffffffffffffff821660005282526040600020547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b3461019c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60208136011261019c576004359067ffffffffffffffff821161019c5761012090823603011261019c576113c9602091600401612480565b604051908152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761140861229f565b60243590336000526000602052604060002090815491828411611508576000808573ffffffffffffffffffffffffffffffffffffffff8295839561144c848a612443565b90556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af16114a2612450565b50156114aa57005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761159d61229f565b73ffffffffffffffffffffffffffffffffffffffff6115ba6122f0565b9116600052600160205277ffffffffffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043577ffffffffffffffffffffffffffffffffffffffffffffffff811680910361019c5733600052600160205260406000209060005260205260406000206116728154612416565b9055005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043563ffffffff9182821680920361019c5733600052600081526040600020928215611950576001840154908160781c1683106118f2576116f86dffffffffffffffffffffffffffff9182349160081c16612409565b93841561189457818511611836579065ffffffffffff61180592546040519061172082612155565b8152848101926001845260408201908816815260608201878152600160808401936000855233600052600089526040600020905181550194511515917fffffffffffffffffffffffffff0000000000000000000000000000000000000060ff72ffffffff0000000000000000000000000000006effffffffffffffffffffffffffff008954945160081b16945160781b1694169116171717835551167fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff78ffffffffffff0000000000000000000000000000000000000083549260981b169116179055565b6040519283528201527fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0160403392a2005b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361019c57807f60fc6b6e0000000000000000000000000000000000000000000000000000000060209214908115611ad6575b8115611aac575b8115611a82575b8115611a58575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482611a4d565b7f3e84f0210000000000000000000000000000000000000000000000000000000081149150611a46565b7fcf28ef970000000000000000000000000000000000000000000000000000000081149150611a3f565b7f915074d80000000000000000000000000000000000000000000000000000000081149150611a38565b3461019c576102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5767ffffffffffffffff60043581811161019c573660238201121561019c57611b62903690602481600401359101612268565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101c0811261019c5761014060405191611b9e83612155565b1261019c5760405192611bb0846121a0565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361019c578452602093604435858201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043573ffffffffffffffffffffffffffffffffffffffff8116810361019c5760e08201526101243561010082015261014435610120820152825261016435848301526101843560408301526101a43560608301526101c43560808301526101e43590811161019c57611c7c9036906004016122c2565b905a3033036120f7578351606081015195603f5a0260061c61271060a0840151890101116120ce5760009681519182611ff0575b5050505090611cca915a9003608085015101923691612268565b925a90600094845193611cdc85613ccc565b9173ffffffffffffffffffffffffffffffffffffffff60e0870151168015600014611ea957505073ffffffffffffffffffffffffffffffffffffffff855116935b5a9003019360a06060820151910151016080860151850390818111611e95575b50508302604085015192818410600014611dce5750506003811015611da157600203611d79576113c99293508093611d7481613d65565b613cf6565b5050507fdeadaa51000000000000000000000000000000000000000000000000000000008152fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b81611dde92979396940390613c98565b506003841015611e6857507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f60808683015192519473ffffffffffffffffffffffffffffffffffffffff865116948873ffffffffffffffffffffffffffffffffffffffff60e0890151169701519160405192835215898301528760408301526060820152a46113c9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6064919003600a0204909301928780611d3d565b8095918051611eba575b5050611d1d565b6003861015611fc1576002860315611eb35760a088015190823b1561019c57600091611f2491836040519586809581947f7c627b210000000000000000000000000000000000000000000000000000000083528d60048401526080602484015260848301906123c6565b8b8b0260448301528b60648301520393f19081611fad575b50611fa65787893d610800808211611f9e575b506040519282828501016040528184528284013e610e7e6040519283927fad7954bc000000000000000000000000000000000000000000000000000000008452600484015260248301906123c6565b905083611f4f565b8980611eb3565b611fb89199506121bd565b6000978a611f3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092918380938c73ffffffffffffffffffffffffffffffffffffffff885116910192f115612023575b808080611cb0565b611cca929195503d6108008082116120c6575b5060405190888183010160405280825260008983013e805161205f575b5050600194909161201b565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20188870151918973ffffffffffffffffffffffffffffffffffffffff8551169401516120bc604051928392835260408d84015260408301906123c6565b0390a38680612053565b905088612036565b877fdeaddead000000000000000000000000000000000000000000000000000000006000526000fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b60a0810190811067ffffffffffffffff82111761217157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610140810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157604052565b6060810190811067ffffffffffffffff82111761217157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926122748261222e565b9161228260405193846121ed565b82948184528183011161019c578281602093846000960137010152565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9181601f8401121561019c5782359167ffffffffffffffff831161019c576020838186019501011161019c57565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261019c5760043567ffffffffffffffff9283821161019c578060238301121561019c57816004013593841161019c5760248460051b8301011161019c57602401919060243573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b60005b8381106123b65750506000910152565b81810151838201526020016123a6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612402815180928187528780880191016123a3565b0116010190565b91908201809211610b4f57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b4f5760010190565b91908203918211610b4f57565b3d1561247b573d906124618261222e565b9161246f60405193846121ed565b82523d6000602084013e565b606090565b604061248e8183018361284b565b90818351918237206124a3606084018461284b565b90818451918237209260c06124bb60e083018361284b565b908186519182372091845195602087019473ffffffffffffffffffffffffffffffffffffffff833516865260208301358789015260608801526080870152608081013560a087015260a081013582870152013560e08501526101009081850152835261012083019167ffffffffffffffff918484108385111761217157838252845190206101408501908152306101608601524661018086015260608452936101a00191821183831017612171575251902090565b67ffffffffffffffff81116121715760051b60200190565b9061259282612570565b6040906125a260405191826121ed565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125d08295612570565b019160005b8381106125e25750505050565b60209082516125f081612155565b83516125fb816121a0565b600081526000849181838201528187820152816060818184015260809282848201528260a08201528260c08201528260e082015282610100820152826101208201528652818587015281898701528501528301528286010152016125d5565b805182101561266e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561266e5760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18136030182121561019c570190565b9081602091031261019c575173ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b7f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602073ffffffffffffffffffffffffffffffffffffffff61278a3485613c98565b936040519485521692a2565b919081101561266e5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561019c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c57602001918160051b3603831361019c57565b3573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c5760200191813603831361019c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019c57016020813591019167ffffffffffffffff821161019c57813603831361019c57565b61012091813573ffffffffffffffffffffffffffffffffffffffff811680910361019c576129626129476129ba9561299b93855260208601356020860152612937604087018761289c565b9091806040880152860191612709565b612954606086018661289c565b908583036060870152612709565b6080840135608084015260a084013560a084015260c084013560c084015261298d60e085018561289c565b9084830360e0860152612709565b916129ac610100918281019061289c565b929091818503910152612709565b90565b60028054146129cc5760028055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b926000905a93805194843573ffffffffffffffffffffffffffffffffffffffff811680910361019c5786526020850135602087015260808501356fffffffffffffffffffffffffffffffff90818116606089015260801c604088015260a086013560c088015260c086013590811661010088015260801c610120870152612a8060e086018661284b565b801561357b576034811061351d578060141161019c578060241161019c5760341161019c57602481013560801c60a0880152601481013560801c60808801523560601c60e08701525b612ad285612480565b60208301526040860151946effffffffffffffffffffffffffffff8660c08901511760608901511760808901511760a0890151176101008901511761012089015117116134bf57604087015160608801510160808801510160a08801510160c0880151016101008801510296835173ffffffffffffffffffffffffffffffffffffffff81511690612b66604085018561284b565b806131e4575b505060e0015173ffffffffffffffffffffffffffffffffffffffff1690600082156131ac575b6020612bd7918b828a01516000868a604051978896879586937f19822f7c00000000000000000000000000000000000000000000000000000000855260048501613db5565b0393f160009181613178575b50612c8b573d8c610800808311612c83575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612bf5565b9a92939495969798999a91156130f2575b509773ffffffffffffffffffffffffffffffffffffffff835116602084015190600052600160205260406000208160401c60005260205267ffffffffffffffff604060002091825492612cee84612416565b9055160361308d575a8503116130285773ffffffffffffffffffffffffffffffffffffffff60e0606093015116612d42575b509060a09184959697986040608096015260608601520135905a900301910152565b969550505a9683519773ffffffffffffffffffffffffffffffffffffffff60e08a01511680600052600060205260406000208054848110612fc3576080612dcd9a9b9c600093878094039055015192602089015183604051809d819582947f52b7512c0000000000000000000000000000000000000000000000000000000084528c60048501613db5565b039286f1978860009160009a612f36575b50612e86573d8b610800808311612e7e575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612df0565b9991929394959697989998925a900311612eab57509096959094939291906080612d20565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b915098503d90816000823e612f4b82826121ed565b604081838101031261019c5780519067ffffffffffffffff821161019c57828101601f83830101121561019c578181015191612f868361222e565b93612f9460405195866121ed565b838552820160208483850101011161019c57602092612fba9184808701918501016123a3565b01519838612dde565b60848b604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b600052600060205260406000208054808c11613113578b9003905538612c9c565b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b9091506020813d6020116131a4575b81613194602093836121ed565b8101031261019c57519038612be3565b3d9150613187565b508060005260006020526040600020548a81116000146131d75750612bd7602060005b915050612b92565b6020612bd7918c036131cf565b833b61345a57604088510151602060405180927f570e1a360000000000000000000000000000000000000000000000000000000082528260048301528160008161323260248201898b612709565b039273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690f1908115610db75760009161343b575b5073ffffffffffffffffffffffffffffffffffffffff811680156133d6578503613371573b1561330c5760141161019c5773ffffffffffffffffffffffffffffffffffffffff9183887fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d604060e0958787602086015195510151168251913560601c82526020820152a391612b6c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152fd5b60848e604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313420696e6974436f6465206d7573742072657475726e2073656e6465726064820152fd5b60848f604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601b60448201527f4141313320696e6974436f6465206661696c6564206f72204f4f4700000000006064820152fd5b613454915060203d602011610db057610da181836121ed565b3861327c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b5050600060e087015260006080870152600060a0870152612ac9565b9092915a906060810151916040928351967fffffffff00000000000000000000000000000000000000000000000000000000886135d7606084018461284b565b600060038211613b9f575b7f8dd7712f0000000000000000000000000000000000000000000000000000000094168403613a445750505061379d6000926136b292602088015161363a8a5193849360208501528b602485015260648401906128ec565b90604483015203906136727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928381018352826121ed565b61379189519485927e42dc5300000000000000000000000000000000000000000000000000000000602085015261020060248501526102248401906123c6565b613760604484018b60806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152876123c6565b039081018352826121ed565b6020918183809351910182305af1600051988652156137bf575b505050505050565b909192939495965060003d8214613a3a575b7fdeaddead00000000000000000000000000000000000000000000000000000000810361385b57608487878051917f220266b600000000000000000000000000000000000000000000000000000000835260048301526024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b7fdeadaa510000000000000000000000000000000000000000000000000000000091929395949650146000146138c55750506138a961389e6138b8935a90612443565b608085015190612409565b9083015183611d748295613d65565b905b3880808080806137b7565b909261395290828601518651907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479273ffffffffffffffffffffffffffffffffffffffff9580878551169401516139483d610800808211613a32575b508a519084818301018c5280825260008583013e8a805194859485528401528a8301906123c6565b0390a35a90612443565b916139636080860193845190612409565b926000905a94829488519761397789613ccc565b948260e08b0151168015600014613a1857505050875116955b5a9003019560a06060820151910151019051860390818111613a04575b5050840290850151928184106000146139de57505080611e68575090816139d89293611d7481613d65565b906138ba565b6139ee9082849397950390613c98565b50611e68575090826139ff92613cf6565b6139d8565b6064919003600a02049094019338806139ad565b90919892509751613a2a575b50613990565b955038613a24565b905038613920565b8181803e516137d1565b613b97945082935090613a8c917e42dc53000000000000000000000000000000000000000000000000000000006020613b6b9501526102006024860152610224850191612709565b613b3a604484018860806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152846123c6565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018952886121ed565b60008761379d565b5081356135e2565b73ffffffffffffffffffffffffffffffffffffffff168015613c3a57600080809381935af1613bd4612450565b5015613bdc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052613cc66040600020918254612409565b80915590565b610120610100820151910151808214613cf257480180821015613ced575090565b905090565b5090565b9190917f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f6080602083015192519473ffffffffffffffffffffffffffffffffffffffff946020868851169660e089015116970151916040519283526000602084015260408301526060820152a4565b60208101519051907f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e60208073ffffffffffffffffffffffffffffffffffffffff855116940151604051908152a3565b613dcd604092959493956060835260608301906128ec565b9460208201520152565b8015613e6457600060408051613dec816121d1565b828152826020820152015273ffffffffffffffffffffffffffffffffffffffff811690604065ffffffffffff91828160a01c16908115613e5c575b60d01c92825191613e37836121d1565b8583528460208401521691829101524211908115613e5457509091565b905042109091565b839150613e27565b5060009060009056fea2646970667358221220b094fd69f04977ae9458e5ba422d01cd2d20dbcfca0992ff37f19aa07deec25464736f6c6343000817003360808060405234610016576101c3908161001c8239f35b600080fdfe6080600436101561000f57600080fd5b6000803560e01c63570e1a361461002557600080fd5b3461018a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576004359167ffffffffffffffff9081841161018657366023850112156101865783600401358281116101825736602482870101116101825780601411610182577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec810192808411610155577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8501160116830190838210908211176101555792846024819482600c60209a968b9960405286845289840196603889018837830101525193013560601c5af1908051911561014d575b5073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b90503861012e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8380fd5b8280fd5b80fdfea26469706673582212207adef8895ad3393b02fab10a111d85ea80ff35366aa43995f4ea20e67f29200664736f6c63430008170033" + +export const OWNABLE_VALIDATOR = "0xfb11d7ca9161F1DF508787BA45951225B6C0a681" +export const OWNABLE_VALIDATOR_BYTECODE = + "0x608060405234801561000f575f80fd5b50600436106100f0575f3560e01c80639700320311610093578063ecd0596111610063578063ecd059611461024d578063f551e2ee14610261578063fbe5ce0a1461028d578063fd8b84b1146102a0575f80fd5b806397003203146101c4578063c86ec2bf146101e5578063ccfdec8c14610204578063d60b347f14610223575f80fd5b80637065cb48116100ce5780637065cb48146101685780638a91b0e31461017b578063940d38401461018e578063960bfe04146101b1575f80fd5b806306fdde03146100f457806354fd4d50146101325780636d61fe7014610153575b5f80fd5b60408051808201909152601081526f27bbb730b13632ab30b634b230ba37b960811b60208201525b604051610129919061152e565b60405180910390f35b6040805180820190915260058152640312e302e360dc1b602082015261011c565b61016661016136600461158c565b6102c0565b005b6101666101763660046115e1565b61044c565b61016661018936600461158c565b610567565b6101a161019c3660046115fa565b6105c4565b6040519015158152602001610129565b6101666101bf36600461166e565b610705565b6101d76101d2366004611685565b6107e0565b604051908152602001610129565b6101d76101f33660046115e1565b60016020525f908152604090205481565b6101d76102123660046115e1565b60026020525f908152604090205481565b6101a16102313660046115e1565b6001600160a01b03165f90815260016020526040902054151590565b6101a161025b36600461166e565b60011490565b61027461026f3660046116cc565b610823565b6040516001600160e01b03199091168152602001610129565b61016661029b366004611722565b61085e565b6102b36102ae3660046115e1565b610910565b6040516101299190611753565b5f806102ce838501856117b3565b915091506102db81610927565b6102f85760405163e719027360e01b815260040160405180910390fd5b815f03610318576040516306968de960e31b815260040160405180910390fd5b80518281101561033b5760405163aabd5a0960e01b815260040160405180910390fd5b335f81815260016020908152604090912085905582111561036f57604051632414149d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526002602052604081208390556103939082610931565b5f5b82811015610410575f8482815181106103b0576103b061187f565b602002602001015190505f6001600160a01b0316816001600160a01b0316036103fc5760405163b20f76e360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6104075f84836109aa565b50600101610395565b506040516001600160a01b038216907f27b541a16df0902e262f34789782092ab25125513b8ed73608e802951771b928905f90a2505050505050565b335f818152600160205260409020546104835760405163f91bd6f160e01b81526001600160a01b03821660048201526024016103f3565b6001600160a01b0382166104b55760405163b20f76e360e01b81526001600160a01b03831660048201526024016103f3565b6001600160a01b0381165f90815260026020908152604090912054106104ee57604051632414149d60e01b815260040160405180910390fd5b6001600160a01b0381165f908152600260205260408120805491610511836118a7565b9091555061052290505f82846109aa565b6040516001600160a01b0383811682528216907fc82bdbbf677a2462f2a7e22e4ba9abd209496b69cd7b868b3b1d28f76e09a40a906020015b60405180910390a25050565b336105725f82610a9d565b6001600160a01b0381165f8181526001602090815260408083208390556002909152808220829055517f9d00629762554452d03c3b45626436df6ca1c3795d05d04df882f6db481b1be09190a2505050565b5f80806105d3848601866117b3565b915091506105e081610927565b6105ee575f925050506106fc565b815f036105ff575f925050506106fc565b5f61066e6106318a6020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610b0f915050565b905061067981610def565b61068281610dfb565b80515f90815b818110156106dd575f6106bd8583815181106106a6576106a661187f565b602002602001015187610e0490919063ffffffff16565b50905080156106d457836106d0816118a7565b9450505b50600101610688565b508482106106f3576001955050505050506106fc565b5f955050505050505b95945050505050565b335f8181526001602052604090205461073c5760405163f91bd6f160e01b81526001600160a01b03821660048201526024016103f3565b815f0361075c5760405163aabd5a0960e01b815260040160405180910390fd5b6001600160a01b0381165f908152600260205260409020548211156107945760405163aabd5a0960e01b815260040160405180910390fd5b6001600160a01b0381165f8181526001602052604090819020849055517ff7e18aa0532694077d6fc7df02e85d86b91ba964f958d1949d45c5776d36eb6e9061055b9085815260200190565b5f806108066107f260208601866115e1565b846108016101008801886118bf565b610e25565b90508015610817575f91505061081d565b60019150505b92915050565b5f8061083133868686610e25565b905080156108495750630b135d3f60e11b9050610856565b506001600160e01b031990505b949350505050565b335f818152600160209081526040808320546002909252909120540361089757604051630f368a7560e11b815260040160405180910390fd5b6108a35f828585610f4a565b6001600160a01b0381165f9081526002602052604081208054916108c683611902565b90915550506040516001600160a01b0383811682528216907fe594d081b4382713733fe631966432c9cea5199afb2db5c3c1931f9f930036799060200160405180910390a2505050565b60606109205f836001602061103f565b5092915050565b5f61081d826111ff565b60015f908152602083815260408083206001600160a01b0380861685529252909120541615610973576040516329e42f3360e11b815260040160405180910390fd5b60015f818152602093845260408082206001600160a01b0394909416825292909352912080546001600160a01b0319169091179055565b6001600160a01b03811615806109c957506001600160a01b0381166001145b156109f257604051637c84ecfb60e01b81526001600160a01b03821660048201526024016103f3565b6001600160a01b038181165f9081526020858152604080832086851684529091529020541615610a4057604051631034f46960e21b81526001600160a01b03821660048201526024016103f3565b60015f908152602084815260408083206001600160a01b039586168085528184528285208054968816808752988552838620918652908452919093208054949095166001600160a01b031994851617909455528154169091179055565b60015f908152602083815260408083206001600160a01b038581168552925290912054165b6001600160a01b03811615610b0a576001600160a01b039081165f908152602084815260408083208585168452909152902080546001600160a01b0319811690915516610ac2565b505050565b60605f610b1d836041611917565b84519091508367ffffffffffffffff811115610b3b57610b3b61179f565b604051908082528060200260200182016040528015610b64578160200160208202803683370190505b50925081811015610b8857604051638baa579f60e01b815260040160405180910390fd5b5f5b84811015610de5575f805f80610bb78a8660410201602081015160408201516060909201515f1a92909190565b9250925092508260ff165f03610d455790925082906041811015610bfe576040516338a245ff60e11b8152600481018290525f6024820181905260448201526064016103f3565b85610c0a82602061192e565b1115610c39576040516338a245ff60e11b8152600481018290525f6024820152604481018790526064016103f3565b6020818b018101519087908290610c5190859061192e565b610c5b919061192e565b1115610c8b576040516338a245ff60e11b81526004810183905260248101829052604481018890526064016103f3565b60606020838d01019050631626ba7e60e01b6001600160e01b031916866001600160a01b0316631626ba7e8f846040518363ffffffff1660e01b8152600401610cd5929190611941565b602060405180830381865afa158015610cf0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d149190611959565b6001600160e01b03191614610d3e578060405163605d348960e01b81526004016103f3919061152e565b5050610daa565b601e8360ff161115610d9b57610d94610d828c6020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b610d8d600486611980565b8484611237565b9350610daa565b610da78b848484611237565b93505b83888681518110610dbd57610dbd61187f565b6001600160a01b0390921660209283029190910190910152505060019092019150610b8a9050565b5050509392505050565b610df881611271565b50565b610df881611414565b5f80610e1a84846001600160a01b03165f61145d565b909590945092505050565b6001600160a01b0384165f90815260016020526040812054808203610e4d575f915050610856565b5f610ebc610e7f876020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250610b0f915050565b9050610ec781610def565b610ed081610dfb565b80515f90815b81811015610f2757610f0c8a858381518110610ef457610ef461187f565b60200260200101515f6114be9092919063ffffffff16565b15610f1f5782610f1b816118a7565b9350505b600101610ed6565b50838210610f3c576001945050505050610856565b505f98975050505050505050565b6001600160a01b0381161580610f6957506001600160a01b0381166001145b15610f9257604051637c84ecfb60e01b81526001600160a01b03831660048201526024016103f3565b6001600160a01b038281165f908152602086815260408083208785168452909152902054811690821614610fe457604051637c84ecfb60e01b81526001600160a01b03821660048201526024016103f3565b6001600160a01b039081165f908152602085815260408083209584168084528683528184208054968616855297835281842090845282529091208054939092166001600160a01b031993841617909155919091528154169055565b60605f6001600160a01b03841660011480159061106457506110628686866114be565b155b1561108d57604051637c84ecfb60e01b81526001600160a01b03851660048201526024016103f3565b825f036110ad5760405163f725081760e01b815260040160405180910390fd5b8267ffffffffffffffff8111156110c6576110c661179f565b6040519080825280602002602001820160405280156110ef578160200160208202803683370190505b506001600160a01b038086165f908152602089815260408083208a85168452909152812054929450911691505b6001600160a01b0382161580159061113e57506001600160a01b038216600114155b801561114957508381105b156111ad57818382815181106111615761116161187f565b6001600160a01b039283166020918202929092018101919091529281165f90815288845260408082208984168352909452929092205490911690806111a5816118a7565b91505061111c565b6001600160a01b0382166001148015906111c657505f81115b156111f257826111d7600183611999565b815181106111e7576111e761187f565b602002602001015191505b8083525094509492505050565b805160019060021161123257815160051b82016020830192505b8251602090930180519093109150808318820261121957505b919050565b5f604051855f5260ff851660205283604052826060526020604060805f60015afa505f6060523d6060185191508060405250949350505050565b601f19602082515f8452604051600282106112fe578285018260051b8601815b85810151815111828214176112a7578501611291565b8181036112b6575050506112fe565b50805b868101518151116112cb5786016112b9565b8281036112f2575b825182518452825291850191908601908183106112d3575050506112fe565b50908252838201526040015b6040515b80821461140b57604082039150815184830151610180828203116113765785820180518351106113355780518351825283525b5b860181811161136e578051888201805182811161135557505050611336565b5b818a0152890180518281116113565750880152611336565b505050611302565b81601f1681830160061c60051b018251825180821061139157905b825181811061139c57905b8083106113a557915b835283528352518190835b5b8801805182116113b157825b8a01805183106113bd579250828110156113de5780518351825283526113b0565b50508681018552818782011060061b85019450828552808786015282811160061b85019450505050611302565b50509092525050565b6002815110610df8576020810160408201600183510160051b83015b815183511461144457602083019250815183525b60208201915080820361143057505081900360051c9052565b5f805f19600186515f87870197505b81830160011c94508460051b89015187019050878114828411176114a65780881161149b57838501915061146c565b60018501925061146c565b84151597148716989290930190950295509350505050565b5f60016001600160a01b038316148015906108565750506001600160a01b039081165f9081526020938452604080822093831682529290935291205416151590565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6115406020830184611500565b9392505050565b5f8083601f840112611557575f80fd5b50813567ffffffffffffffff81111561156e575f80fd5b602083019150836020828501011115611585575f80fd5b9250929050565b5f806020838503121561159d575f80fd5b823567ffffffffffffffff8111156115b3575f80fd5b6115bf85828601611547565b90969095509350505050565b80356001600160a01b0381168114611232575f80fd5b5f602082840312156115f1575f80fd5b611540826115cb565b5f805f805f6060868803121561160e575f80fd5b85359450602086013567ffffffffffffffff8082111561162c575f80fd5b61163889838a01611547565b90965094506040880135915080821115611650575f80fd5b5061165d88828901611547565b969995985093965092949392505050565b5f6020828403121561167e575f80fd5b5035919050565b5f8060408385031215611696575f80fd5b823567ffffffffffffffff8111156116ac575f80fd5b830161012081860312156116be575f80fd5b946020939093013593505050565b5f805f80606085870312156116df575f80fd5b6116e8856115cb565b935060208501359250604085013567ffffffffffffffff81111561170a575f80fd5b61171687828801611547565b95989497509550505050565b5f8060408385031215611733575f80fd5b61173c836115cb565b915061174a602084016115cb565b90509250929050565b602080825282518282018190525f9190848201906040850190845b818110156117935783516001600160a01b03168352928401929184019160010161176e565b50909695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156117c4575f80fd5b8235915060208084013567ffffffffffffffff808211156117e3575f80fd5b818601915086601f8301126117f6575f80fd5b8135818111156118085761180861179f565b8060051b604051601f19603f8301168101818110858211171561182d5761182d61179f565b60405291825284820192508381018501918983111561184a575f80fd5b938501935b8285101561186f57611860856115cb565b8452938501939285019261184f565b8096505050505050509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016118b8576118b8611893565b5060010190565b5f808335601e198436030181126118d4575f80fd5b83018035915067ffffffffffffffff8211156118ee575f80fd5b602001915036819003821315611585575f80fd5b5f8161191057611910611893565b505f190190565b808202811582820484141761081d5761081d611893565b8082018082111561081d5761081d611893565b828152604060208201525f6108566040830184611500565b5f60208284031215611969575f80fd5b81516001600160e01b031981168114611540575f80fd5b60ff828116828216039081111561081d5761081d611893565b8181038181111561081d5761081d61189356fea2646970667358221220b82bc4d2f8213c159cea19836aa442c34ed4c7abc97ebbd8d454c3f36422e16564736f6c63430008190033" + +export const OWNABLE_EXECUTOR = "0x989110e958902f619148b8171fbDF1Dca0c5AE0B" +export const OWNABLE_EXECUTOR_BYTECODE = + "0x6080604052600436106100a5575f3560e01c8063d26cdce311610062578063d26cdce3146101b7578063d60b347f146101ca578063e5086003146101f9578063ecd059611461020c578063fbe5ce0a1461022c578063fd8b84b11461024b575f80fd5b806306fdde03146100a957806354fd4d50146100f25780636d61fe701461011f5780637065cb48146101405780638a91b0e31461015f578063ccfdec8c1461017e575b5f80fd5b3480156100b4575f80fd5b5060408051808201909152600f81526e27bbb730b13632a2bc32b1baba37b960891b60208201525b6040516100e99190610b67565b60405180910390f35b3480156100fd575f80fd5b506040805180820190915260058152640312e302e360dc1b60208201526100dc565b34801561012a575f80fd5b5061013e610139366004610be1565b610277565b005b34801561014b575f80fd5b5061013e61015a366004610c3b565b61036a565b34801561016a575f80fd5b5061013e610179366004610be1565b61045c565b348015610189575f80fd5b506101a9610198366004610c3b565b60016020525f908152604090205481565b6040519081526020016100e9565b61013e6101c5366004610c54565b6104ae565b3480156101d5575f80fd5b506101e96101e4366004610c3b565b61056d565b60405190151581526020016100e9565b61013e610207366004610c54565b61059c565b348015610217575f80fd5b506101e9610226366004610ca3565b60021490565b348015610237575f80fd5b5061013e610246366004610cba565b6105f2565b348015610256575f80fd5b5061026a610265366004610c3b565b610665565b6040516100e99190610ceb565b335f6102866014828587610d37565b61028f91610d5e565b60601c9050806102c25760405163b20f76e360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b0382165f9081526020819052604090206102e29061069b565b6001600160a01b0382165f90815260208190526040902061030390826106f6565b6001600160a01b0382165f8181526001602081905260409182902055517f1cd4a6da6e6a6f4dc754cedd54ead3b9cd0e2f5804cda2ba60506c2899fb29df9061035c9084906001600160a01b0391909116815260200190565b60405180910390a250505050565b336103748161056d565b61039c5760405163f91bd6f160e01b81526001600160a01b03821660048201526024016102b9565b6001600160a01b0382166103ce5760405163b20f76e360e01b81526001600160a01b03831660048201526024016102b9565b6001600160a01b0381165f9081526020819052604090206103ef90836106f6565b6001600160a01b0381165f90815260016020526040812080549161041283610da7565b90915550506040516001600160a01b0383811682528216907fc82bdbbf677a2462f2a7e22e4ba9abd209496b69cd7b868b3b1d28f76e09a40a906020015b60405180910390a25050565b335f908152602081905260409020610473906107ca565b335f81815260016020526040808220829055517f9d00629762554452d03c3b45626436df6ca1c3795d05d04df882f6db481b1be09190a25050565b6001600160a01b0383165f9081526020819052604090206104cf9033610825565b6104ec57604051631a27eac360e11b815260040160405180910390fd5b826001600160a01b031663d691c9643461050461085f565b85856040518563ffffffff1660e01b815260040161052493929190610dbf565b5f6040518083038185885af115801561053f573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526105679190810190610e39565b50505050565b6001600160a01b038181165f908152602081815260408083206001845290915281205490911615155b92915050565b6001600160a01b0383165f9081526020819052604090206105bd9033610825565b6105da57604051631a27eac360e11b815260040160405180910390fd5b826001600160a01b031663d691c96434610504610871565b335f90815260208190526040902061060b908383610882565b335f90815260016020526040812080549161062583610f47565b90915550506040516001600160a01b038216815233907fe594d081b4382713733fe631966432c9cea5199afb2db5c3c1931f9f9300367990602001610450565b6001600160a01b0381165f90815260016020818152604080842054918490529092206060926106949290610955565b5092915050565b60015f908152602082905260409020546001600160a01b0316156106d2576040516329e42f3360e11b815260040160405180910390fd5b60015f818152602092909252604090912080546001600160a01b0319169091179055565b6001600160a01b038116158061071557506001600160a01b0381166001145b1561073e57604051637c84ecfb60e01b81526001600160a01b03821660048201526024016102b9565b6001600160a01b038181165f90815260208490526040902054161561078157604051631034f46960e21b81526001600160a01b03821660048201526024016102b9565b60015f818152602093909352604080842080546001600160a01b039485168087529286208054959091166001600160a01b03199586161790559190935280549091169091179055565b60015f908152602082905260409020546001600160a01b03165b6001600160a01b03811615610821576001600160a01b039081165f90815260208390526040902080546001600160a01b03198116909155166107e4565b5050565b5f60016001600160a01b0383161480159061085857506001600160a01b038281165f908152602085905260409020541615155b9392505050565b5f61086c81808080610afd565b905090565b5f61086c600160f81b828080610afd565b6001600160a01b03811615806108a157506001600160a01b0381166001145b156108ca57604051637c84ecfb60e01b81526001600160a01b03831660048201526024016102b9565b6001600160a01b038281165f9081526020859052604090205481169082161461091157604051637c84ecfb60e01b81526001600160a01b03821660048201526024016102b9565b6001600160a01b039081165f8181526020949094526040808520805494841686529085208054949093166001600160a01b0319948516179092559092528154169055565b60605f6001600160a01b03841660011480159061097957506109778585610825565b155b156109a257604051637c84ecfb60e01b81526001600160a01b03851660048201526024016102b9565b825f036109c25760405163f725081760e01b815260040160405180910390fd5b8267ffffffffffffffff8111156109db576109db610df4565b604051908082528060200260200182016040528015610a04578160200160208202803683370190505b506001600160a01b038086165f90815260208890526040812054929450911691505b6001600160a01b03821615801590610a4857506001600160a01b038216600114155b8015610a5357508381105b15610aac5781838281518110610a6b57610a6b610f5c565b6001600160a01b039283166020918202929092018101919091529281165f908152928790526040909220549091169080610aa481610da7565b915050610a26565b6001600160a01b038216600114801590610ac557505f81115b15610af15782610ad6600183610f70565b81518110610ae657610ae6610f5c565b602002602001015191505b80835250935093915050565b604080516001600160f81b03198087166020830152851660218201525f602282018190526001600160e01b03198516602683015269ffffffffffffffffffff198416602a8301529101604051602081830303815290604052610b5e90610f83565b95945050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8083601f840112610bac575f80fd5b50813567ffffffffffffffff811115610bc3575f80fd5b602083019150836020828501011115610bda575f80fd5b9250929050565b5f8060208385031215610bf2575f80fd5b823567ffffffffffffffff811115610c08575f80fd5b610c1485828601610b9c565b90969095509350505050565b80356001600160a01b0381168114610c36575f80fd5b919050565b5f60208284031215610c4b575f80fd5b61085882610c20565b5f805f60408486031215610c66575f80fd5b610c6f84610c20565b9250602084013567ffffffffffffffff811115610c8a575f80fd5b610c9686828701610b9c565b9497909650939450505050565b5f60208284031215610cb3575f80fd5b5035919050565b5f8060408385031215610ccb575f80fd5b610cd483610c20565b9150610ce260208401610c20565b90509250929050565b602080825282518282018190525f9190848201906040850190845b81811015610d2b5783516001600160a01b031683529284019291840191600101610d06565b50909695505050505050565b5f8085851115610d45575f80fd5b83861115610d51575f80fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610d8b5780818660140360031b1b83161692505b505092915050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610db857610db8610d93565b5060010190565b83815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f1916010192915050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e3157610e31610df4565b604052919050565b5f6020808385031215610e4a575f80fd5b825167ffffffffffffffff80821115610e61575f80fd5b8185019150601f86601f840112610e76575f80fd5b825182811115610e8857610e88610df4565b8060051b610e97868201610e08565b918252848101860191868101908a841115610eb0575f80fd5b87870192505b83831015610f3957825186811115610ecc575f80fd5b8701603f81018c13610edc575f80fd5b88810151604088821115610ef257610ef2610df4565b610f03828901601f19168c01610e08565b8281528e82848601011115610f16575f80fd5b828285018d83015e5f9281018c0192909252508352509187019190870190610eb6565b9a9950505050505050505050565b5f81610f5557610f55610d93565b505f190190565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561059657610596610d93565b80516020808301519190811015610fa3575f198160200360031b1b821691505b5091905056fea2646970667358221220b4818563abaaf2d7c9426aa3c80814b09784cce89922dfe0c778fbe635c46e0a64736f6c63430008190033" diff --git a/tests/src/executables.ts b/tests/src/executables.ts new file mode 100644 index 000000000..40d5fdff0 --- /dev/null +++ b/tests/src/executables.ts @@ -0,0 +1,22 @@ +import { execa } from "execa" + +const cwd = "./node_modules/nexus" + +export const init = async () => await execa({ cwd })`yarn install` + +export const cleanOne = async (rpcPort: number) => + await execa({ cwd })`rm -rf ./deployments/anvil-${rpcPort}` + +export const deploy = async (rpcPort: number) => { + await cleanOne(rpcPort) + return await execa({ + cwd, + env: { + HH_RPC_URL: `http://localhost:${rpcPort}`, + HH_CHAIN_NAME: `anvil-${rpcPort}`, + HH_CHAIN_ID: rpcPort.toString() + } + })`yarn deploy:hardhat --network anvil-${rpcPort}` +} + +export const clean = async () => await execa({ cwd })`rm -rf ./deployments` diff --git a/tests/src/globalSetup.ts b/tests/src/globalSetup.ts new file mode 100644 index 000000000..b3e12288c --- /dev/null +++ b/tests/src/globalSetup.ts @@ -0,0 +1,25 @@ +import { + type NetworkConfig, + type NetworkConfigWithBundler, + initLocalhostNetwork +} from "./testUtils" + +let globalConfig: NetworkConfigWithBundler +export const setup = async ({ provide }) => { + globalConfig = await initLocalhostNetwork() + const { bundlerInstance, instance, ...serializeableConfig } = globalConfig + provide("globalNetwork", serializeableConfig) +} + +export const teardown = async () => { + await Promise.all([ + globalConfig.instance.stop(), + globalConfig.bundlerInstance.stop() + ]) +} + +declare module "vitest" { + export interface ProvidedContext { + globalNetwork: NetworkConfig + } +} diff --git a/tests/src/testSetup.ts b/tests/src/testSetup.ts new file mode 100644 index 000000000..e4f0e13c6 --- /dev/null +++ b/tests/src/testSetup.ts @@ -0,0 +1,59 @@ +import { describe, inject, test } from "vitest" +import { + type FundedTestClients, + type NetworkConfig, + type NetworkConfigWithBundler, + initLocalhostNetwork, + initTestnetNetwork, + toFundedTestClients +} from "./testUtils" + +export type NetworkConfigWithTestClients = NetworkConfigWithBundler & { + fundedTestClients: FundedTestClients +} + +export const localhostTest = test.extend<{ + config: NetworkConfigWithTestClients +}>({ + // biome-ignore lint/correctness/noEmptyPattern: Needed in vitest :/ + config: async ({}, use) => { + const testNetwork = await initLocalhostNetwork() + const fundedTestClients = await toFundedTestClients({ + chain: testNetwork.chain, + bundlerUrl: testNetwork.bundlerUrl + }) + await use({ ...testNetwork, fundedTestClients }) + await Promise.all([ + testNetwork.instance.stop(), + testNetwork.bundlerInstance.stop() + ]) + } +}) + +export const testnetTest = test.extend<{ + config: NetworkConfig +}>({ + // biome-ignore lint/correctness/noEmptyPattern: Needed in vitest :/ + config: async ({}, use) => { + const testNetwork = await toNetwork("PUBLIC_TESTNET") + await use(testNetwork) + } +}) + +export type TestFileNetworkType = + | "FILE_LOCALHOST" + | "COMMON_LOCALHOST" + | "PUBLIC_TESTNET" + +export const toNetwork = async ( + networkType: TestFileNetworkType +): Promise<NetworkConfig> => + await (networkType === "COMMON_LOCALHOST" + ? // @ts-ignore + inject("globalNetwork") + : networkType === "FILE_LOCALHOST" + ? initLocalhostNetwork() + : initTestnetNetwork()) + +export const describeWithPlaygroundGuard = + process.env.RUN_PLAYGROUND === "true" ? describe : describe.skip diff --git a/tests/src/testUtils.ts b/tests/src/testUtils.ts new file mode 100644 index 000000000..140bc473b --- /dev/null +++ b/tests/src/testUtils.ts @@ -0,0 +1,466 @@ +import { config } from "dotenv" +import getPort from "get-port" +import { alto, anvil } from "prool/instances" +import { + http, + type Account, + type Address, + type Chain, + type Hex, + type PrivateKeyAccount, + type PublicClient, + type WalletClient, + createPublicClient, + createTestClient, + createWalletClient, + encodeAbiParameters, + parseAbi, + parseAbiParameters, + publicActions, + walletActions +} from "viem" +import { mnemonicToAccount, privateKeyToAccount } from "viem/accounts" +import { + type EIP712DomainReturn, + type NexusSmartAccount, + createSmartAccountClient +} from "../../src" +import contracts from "../../src/__contracts" +import { getChain, getCustomChain } from "../../src/account/utils" +import { Logger } from "../../src/account/utils/Logger" +import { createBundler } from "../../src/bundler" +import { + ENTRY_POINT_SIMULATIONS_CREATECALL, + ENTRY_POINT_V07_CREATECALL, + OWNABLE_EXECUTOR, + OWNABLE_EXECUTOR_BYTECODE, + OWNABLE_VALIDATOR, + OWNABLE_VALIDATOR_BYTECODE +} from "./callDatas" + +import { clean, deploy, init } from "./executables" + +config() + +type AnvilInstance = ReturnType<typeof anvil> +type BundlerInstance = ReturnType<typeof alto> +type BundlerDto = { + bundlerInstance: BundlerInstance + bundlerUrl: string + bundlerPort: number +} +export type AnvilDto = { + rpcUrl: string + rpcPort: number + chain: Chain + instance: AnvilInstance +} +export type NetworkConfigWithBundler = AnvilDto & BundlerDto +export type NetworkConfig = Omit< + NetworkConfigWithBundler, + "instance" | "bundlerInstance" +> & { + account?: PrivateKeyAccount +} +export const pKey = + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" // This is a publicly available private key meant only for testing only + +export const getTestAccount = ( + addressIndex = 0 +): ReturnType<typeof mnemonicToAccount> => { + return mnemonicToAccount( + "test test test test test test test test test test test junk", + { + addressIndex + } + ) +} + +const allInstances = new Map<number, AnvilInstance>() + +export const killAllNetworks = () => + killNetwork(Array.from(allInstances.keys())) + +export const killNetwork = (ids: number[]) => + Promise.all( + ids.map(async (id) => { + const instance = allInstances.get(id) + if (instance) { + await instance.stop() + allInstances.delete(id) + } + }) + ) + +export const initTestnetNetwork = async (): Promise<NetworkConfig> => { + const privateKey = process.env.E2E_PRIVATE_KEY_ONE + const chainId = process.env.CHAIN_ID + const rpcUrl = process.env.RPC_URL //Optional, taken from chain (using chainId) if not provided + const _bundlerUrl = process.env.BUNDLER_URL // Optional, taken from chain (using chainId) if not provided + + let chain: Chain + + if (!privateKey) throw new Error("Missing env var E2E_PRIVATE_KEY_ONE") + if (!chainId) throw new Error("Missing env var CHAIN_ID") + + try { + chain = getChain(+chainId) + } catch (e) { + if (!rpcUrl) throw new Error("Missing env var RPC_URL") + chain = getCustomChain("Custom Chain", +chainId, rpcUrl) + } + const bundlerUrl = _bundlerUrl ?? getBundlerUrl(+chainId) + + return { + rpcUrl: chain.rpcUrls.default.http[0], + rpcPort: 0, + chain, + bundlerUrl, + bundlerPort: 0, + account: privateKeyToAccount( + privateKey?.startsWith("0x") ? (privateKey as Hex) : `0x${privateKey}` + ) + } +} + +export const initLocalhostNetwork = + async (): Promise<NetworkConfigWithBundler> => { + const configuredNetwork = await initAnvilPayload() + const bundlerConfig = await initBundlerInstance({ + rpcUrl: configuredNetwork.rpcUrl + }) + await ensureBundlerIsReady( + bundlerConfig.bundlerUrl, + getTestChainFromPort(configuredNetwork.rpcPort) + ) + allInstances.set( + configuredNetwork.instance.port, + configuredNetwork.instance + ) + allInstances.set( + bundlerConfig.bundlerInstance.port, + bundlerConfig.bundlerInstance + ) + return { ...configuredNetwork, ...bundlerConfig } + } + +export type MasterClient = ReturnType<typeof toTestClient> +export const toTestClient = (chain: Chain, account: Account) => + createTestClient({ + mode: "anvil", + chain, + account, + transport: http() + }) + .extend(publicActions) + .extend(walletActions) + +export const toBundlerInstance = async ({ + rpcUrl, + bundlerPort +}: { + rpcUrl: string + bundlerPort: number +}): Promise<BundlerInstance> => { + const instance = alto({ + entrypoints: [contracts.entryPoint.address], + rpcUrl: rpcUrl, + executorPrivateKeys: [pKey], + entrypointSimulationContract: contracts.entryPointSimulations.address, + safeMode: false, + port: bundlerPort + }) + await instance.start() + return instance +} + +export const ensureBundlerIsReady = async ( + bundlerUrl: string, + chain: Chain +) => { + const bundler = await createBundler({ + chain, + bundlerUrl + }) + + while (true) { + try { + await bundler.getGasFeeValues() + return + } catch { + await new Promise((resolve) => setTimeout(resolve, 1000)) + } + } +} + +export const toConfiguredAnvil = async ({ + rpcPort +}: { rpcPort: number }): Promise<AnvilInstance> => { + const instance = anvil({ + hardfork: "Paris", + chainId: rpcPort, + port: rpcPort, + codeSizeLimit: 1000000000000 + // forkUrl: "https://base-sepolia.gateway.tenderly.co/2oxlNZ7oiNCUpXzrWFuIHx" + }) + await instance.start() + await deployContracts(rpcPort) + await init() + await clean() + await deploy(rpcPort) + return instance +} + +const portOptions = { exclude: [] as number[] } +export const initAnvilPayload = async (): Promise<AnvilDto> => { + const rpcPort = await getPort(portOptions) + portOptions.exclude.push(rpcPort) + const rpcUrl = `http://localhost:${rpcPort}` + const chain = getTestChainFromPort(rpcPort) + const instance = await toConfiguredAnvil({ rpcPort }) + return { rpcUrl, chain, instance, rpcPort } +} + +export const initBundlerInstance = async ({ + rpcUrl +}: { rpcUrl: string }): Promise<BundlerDto> => { + const bundlerPort = await getPort(portOptions) + portOptions.exclude.push(bundlerPort) + const bundlerUrl = `http://localhost:${bundlerPort}` + const bundlerInstance = await toBundlerInstance({ rpcUrl, bundlerPort }) + return { bundlerInstance, bundlerUrl, bundlerPort } +} + +export const checkBalance = ( + testClient: MasterClient, + owner: Hex, + tokenAddress?: Hex +) => { + if (!tokenAddress) { + return testClient.getBalance({ address: owner }) + } + return testClient.readContract({ + address: tokenAddress, + abi: parseAbi([ + "function balanceOf(address owner) public view returns (uint256 balance)" + ]), + functionName: "balanceOf", + args: [owner] + }) +} + +export const nonZeroBalance = async ( + testClient: MasterClient, + address: Hex, + tokenAddress?: Hex +) => { + const balance = await checkBalance(testClient, address, tokenAddress) + if (balance > BigInt(0)) return + throw new Error( + `Insufficient balance ${ + tokenAddress ? `of token ${tokenAddress}` : "of native token" + } during test setup of owner: ${address}` + ) +} + +export type FundedTestClients = Awaited<ReturnType<typeof toFundedTestClients>> +export const toFundedTestClients = async ({ + chain, + bundlerUrl +}: { chain: Chain; bundlerUrl: string }) => { + const account = getTestAccount(2) + const recipientAccount = getTestAccount(3) + + const walletClient = createWalletClient({ + account, + chain, + transport: http() + }) + + const recipientWalletClient = createWalletClient({ + account: recipientAccount, + chain, + transport: http() + }) + + const testClient = toTestClient(chain, getTestAccount()) + + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + chain + }) + + const recipientSmartAccount = await createSmartAccountClient({ + signer: recipientWalletClient, + bundlerUrl, + chain + }) + + const smartAccountAddress = await smartAccount.getAddress() + const recipientSmartAccountAddress = await recipientSmartAccount.getAddress() + await fundAndDeploy(testClient, [smartAccount, recipientSmartAccount]) + + return { + account, + recipientAccount, + walletClient, + recipientWalletClient, + testClient, + smartAccount, + recipientSmartAccount, + smartAccountAddress, + recipientSmartAccountAddress + } +} + +export const fundAndDeploy = async ( + testClient: MasterClient, + smartAccounts: NexusSmartAccount[] +) => + Promise.all( + smartAccounts.map((smartAccount) => + fundAndDeploySingleAccount(testClient, smartAccount) + ) + ) + +export const fundAndDeploySingleAccount = async ( + testClient: MasterClient, + smartAccount: NexusSmartAccount +) => { + try { + const accountAddress = await smartAccount.getAddress() + await topUp(testClient, accountAddress) + const { wait } = await smartAccount.deploy() + const { success } = await wait() + if (!success) { + throw new Error("Failed to deploy smart account") + } + } catch (e) { + Logger.error(`Error initializing smart account: ${e}`) + } +} + +export const safeTopUp = async ( + testClient: MasterClient, + recipient: Hex, + amount = 100000000000000000000n, + token?: Hex +) => { + try { + return await topUp(testClient, recipient, amount, token) + } catch (error) { + Logger.error(`Error topping up account: ${error}`) + } +} + +export const topUp = async ( + testClient: MasterClient, + recipient: Hex, + amount = 100000000000000000000n, + token?: Hex +) => { + const balanceOfRecipient = await checkBalance(testClient, recipient, token) + + if (balanceOfRecipient > amount) { + Logger.log( + `balanceOfRecipient (${recipient}) already has enough ${ + token ?? "native token" + } (${balanceOfRecipient}) during safeTopUp` + ) + return await Promise.resolve() + } + + Logger.log(`topping up (${recipient}): (${balanceOfRecipient}).`) + + if (token) { + const hash = await testClient.writeContract({ + address: token, + abi: parseAbi([ + "function transfer(address recipient, uint256 amount) external" + ]), + functionName: "transfer", + args: [recipient, amount] + }) + await testClient.waitForTransactionReceipt({ hash }) + } + const hash = await testClient.sendTransaction({ + to: recipient, + value: amount + }) + return testClient.waitForTransactionReceipt({ hash }) +} + +// Returns the encoded EIP-712 domain struct fields. +export const getAccountDomainStructFields = async ( + testClient: MasterClient, + accountAddress: Address +) => { + const accountDomainStructFields = (await testClient.readContract({ + address: accountAddress, + abi: parseAbi([ + "function eip712Domain() public view returns (bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions)" + ]), + functionName: "eip712Domain" + })) as EIP712DomainReturn + + const [fields, name, version, chainId, verifyingContract, salt, extensions] = + accountDomainStructFields + + const params = parseAbiParameters( + "bytes1, string, string, uint256, address, bytes32, uint256[]" + ) + + return encodeAbiParameters(params, [ + fields, + name, + version, + chainId, + verifyingContract, + salt, + extensions + ]) +} + +export const getBundlerUrl = (chainId: number) => + `https://bundler.biconomy.io/api/v2/${chainId}/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f14` + +const getTestChainFromPort = (port: number): Chain => + getCustomChain(`Anvil-${port}`, port, `http://localhost:${port}`, "") + +const deployContracts = async (rpcPort: number): Promise<void> => { + const DETERMINISTIC_DEPLOYER = "0x4e59b44847b379578588920ca78fbf26c0b4956c" + const chain = getTestChainFromPort(rpcPort) + const account = getTestAccount() + const testClient = toTestClient(chain, account) + + const entrypointSimulationHash = await testClient.sendTransaction({ + to: DETERMINISTIC_DEPLOYER, + data: ENTRY_POINT_SIMULATIONS_CREATECALL, + gas: 15_000_000n + }) + + const entrypointHash = await testClient.sendTransaction({ + to: DETERMINISTIC_DEPLOYER, + data: ENTRY_POINT_V07_CREATECALL, + gas: 15_000_000n + }) + + await Promise.all([ + testClient.waitForTransactionReceipt({ hash: entrypointSimulationHash }), + testClient.waitForTransactionReceipt({ hash: entrypointHash }) + ]) + + await testClient.setCode({ + bytecode: OWNABLE_EXECUTOR_BYTECODE, + address: OWNABLE_EXECUTOR + }) + + await testClient.setCode({ + bytecode: OWNABLE_VALIDATOR_BYTECODE, + address: OWNABLE_VALIDATOR + }) +} + +export const sleep = (ms: number) => + new Promise((resolve) => setTimeout(resolve, ms)) diff --git a/tests/utils.ts b/tests/utils.ts deleted file mode 100644 index e166e22a1..000000000 --- a/tests/utils.ts +++ /dev/null @@ -1,230 +0,0 @@ -import { - http, - type Address, - type Chain, - type Hex, - type PublicClient, - createPublicClient, - createWalletClient, - encodeAbiParameters, - parseAbi, - parseAbiParameters -} from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { baseSepolia } from "viem/chains" -import type { EIP712DomainReturn } from "../src" -import { Logger } from "../src/account/utils/Logger" -import { getChain } from "../src/account/utils/getChain" - -export const getEnvVars = () => { - const fields = [ - "BUNDLER_URL", - "E2E_PRIVATE_KEY_ONE", - "E2E_PRIVATE_KEY_TWO", - "E2E_BICO_PAYMASTER_KEY_AMOY", - "E2E_BICO_PAYMASTER_KEY_BASE", - "CHAIN_ID" - ] - - const errorFields = fields.filter((field) => !process?.env?.[field]) - if (errorFields.length) { - throw new Error( - `Missing environment variable${ - errorFields.length > 1 ? "s" : "" - }: ${errorFields.join(", ")}` - ) - } - return { - bundlerUrl: process.env.BUNDLER_URL || "", - bundlerUrlTwo: getBundlerUrl(84532) || "", - privateKey: process.env.E2E_PRIVATE_KEY_ONE || "", - privateKeyTwo: process.env.E2E_PRIVATE_KEY_TWO || "", - paymasterUrl: `https://paymaster.biconomy.io/api/v1/11155111/${ - process.env.E2E_BICO_PAYMASTER_KEY_AMOY || "" - }`, - paymasterUrlTwo: `https://paymaster.biconomy.io/api/v1/84532/${ - process.env.E2E_BICO_PAYMASTER_KEY_BASE || "" - }`, - chainId: process.env.CHAIN_ID || "0" - } -} - -export type TestConfig = { - chain: Chain - chainId: number - paymasterUrl: string - paymasterUrlTwo: string - bundlerUrl: string - privateKey: string - privateKeyTwo: string -} -export const getConfig = (): TestConfig => { - const { - paymasterUrl, - paymasterUrlTwo, - bundlerUrl, - chainId: chainIdFromEnv, - privateKey, - privateKeyTwo - } = getEnvVars() - const chains = [Number.parseInt(chainIdFromEnv)] - const chainId = chains[0] - const chain = getChain(chainId) - - // try { - // const chainIdFromBundlerUrl = extractChainIdFromBundlerUrl(bundlerUrl) - // chains.push(chainIdFromBundlerUrl) - // } catch (e) {} - - // try { - // const chainIdFromPaymasterUrl = extractChainIdFromPaymasterUrl(paymasterUrl) - // chains.push(chainIdFromPaymasterUrl) - // } catch (e) {} - - // COMMNETED in order to use pimlico bundler url - // const allChainsMatch = chains.every((chain) => chain === chains[0]) - - // if (!allChainsMatch) { - // throw new Error("Chain IDs do not match") - // } - - return { - chain, - chainId, - paymasterUrl, - paymasterUrlTwo, - bundlerUrl, - privateKey, - privateKeyTwo - } -} - -export const checkBalance = ( - owner: Hex, - tokenAddress?: Hex, - _chain?: Chain -) => { - // const { chain: chainFromConfig } = getConfig() - // const chain = _chain || chainFromConfig - const publicClient = createPublicClient({ - chain: baseSepolia, - transport: http() - }) - - if (!tokenAddress) { - return publicClient.getBalance({ address: owner }) - } - return publicClient.readContract({ - address: tokenAddress, - abi: parseAbi([ - "function balanceOf(address owner) public view returns (uint256 balance)" - ]), - functionName: "balanceOf", - args: [owner] - }) -} - -export const nonZeroBalance = async (address: Hex, tokenAddress?: Hex) => { - const balance = await checkBalance(address, tokenAddress) - if (balance > BigInt(0)) return - throw new Error( - `Insufficient balance ${ - tokenAddress ? `of token ${tokenAddress}` : "of native token" - } during test setup of owner: ${address}` - ) -} - -export const topUp = async ( - recipient: Hex, - amount = BigInt(1000000), - token?: Hex -) => { - const { chain, privateKey } = getConfig() - const account = privateKeyToAccount(`0x${privateKey}`) - const sender = account.address - - const publicClient = createPublicClient({ - chain, - transport: http() - }) - - const balanceOfSender = await checkBalance(sender, token) - const balanceOfRecipient = await checkBalance(recipient, token) - - if (balanceOfRecipient > amount) { - Logger.log( - `balanceOfRecipient (${recipient}) already has enough ${ - token ?? "native token" - } (${balanceOfRecipient}) during topUp` - ) - return await Promise.resolve() - } - - if (balanceOfSender < amount) { - throw new Error( - `Insufficient ${ - token ? token : "" - }balance during test setup: ${balanceOfSender}` - ) - } - - Logger.log(`topping up (${recipient}): (${balanceOfRecipient}).`) - - const walletClient = createWalletClient({ - account, - chain, - transport: http() - }) - - if (token) { - const hash = await walletClient.writeContract({ - address: token, - abi: parseAbi([ - "function transfer(address recipient, uint256 amount) external" - ]), - functionName: "transfer", - args: [recipient, amount] - }) - await publicClient.waitForTransactionReceipt({ hash }) - } else { - const hash = await walletClient.sendTransaction({ - to: recipient, - value: amount - }) - // await publicClient.waitForTransactionReceipt({ hash }) - } -} - -// Returns the encoded EIP-712 domain struct fields. -export const getAccountDomainStructFields = async ( - publicClient: PublicClient, - accountAddress: Address -) => { - const accountDomainStructFields = (await publicClient.readContract({ - address: accountAddress, - abi: parseAbi([ - "function eip712Domain() public view returns (bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions)" - ]), - functionName: "eip712Domain" - })) as EIP712DomainReturn - - const [fields, name, version, chainId, verifyingContract, salt, extensions] = - accountDomainStructFields - - const params = parseAbiParameters( - "bytes1, string, string, uint256, address, bytes32, uint256[]" - ) - - return encodeAbiParameters(params, [ - fields, - name, - version, - chainId, - verifyingContract, - salt, - extensions - ]) -} - -export const getBundlerUrl = (chainId: number) => - `https://bundler.biconomy.io/api/v2/${chainId}/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f14` diff --git a/tests/vitest.config.ts b/tests/vitest.config.ts index d7dd2a794..ef719a810 100644 --- a/tests/vitest.config.ts +++ b/tests/vitest.config.ts @@ -25,11 +25,10 @@ export default defineConfig({ statements: 80 } }, - environment: "node", include: ["tests/**/*.test.ts"], - setupFiles: [join(__dirname, "./setupFiles.ts")], - globalSetup: [join(__dirname, "./globalSetup.ts")], - // hookTimeout: 20_000, - testTimeout: 20_000 + globalSetup: join(__dirname, "src/globalSetup.ts"), + environment: "node", + testTimeout: 60_000, + hookTimeout: 60_000 } }) diff --git a/tsconfig/tsconfig.base.json b/tsconfig/tsconfig.base.json index 671115660..4b41d4c54 100644 --- a/tsconfig/tsconfig.base.json +++ b/tsconfig/tsconfig.base.json @@ -12,6 +12,7 @@ "allowJs": false, "checkJs": false, "esModuleInterop": false, + "resolveJsonModule": true, "allowSyntheticDefaultImports": false, "forceConsistentCasingInFileNames": true, "verbatimModuleSyntax": true, From b2a3e28ce65d3a75ff03af1d2ba64931e8239390 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Tue, 3 Sep 2024 13:38:18 +0100 Subject: [PATCH 1239/1247] chore: test support for smart sessions (#565) * chore: add test support for smart sessions --- .../actions/install-dependencies/action.yml | 4 + .github/workflows/pr-lint.yml | 17 -- bun.lockb | Bin 352526 -> 352526 bytes package.json | 4 +- scripts/fetch:deployment.ts | 2 +- src/__contracts/abi/UniActionPolicyAbi.ts | 58 ++++++ src/__contracts/abi/index.ts | 1 + src/__contracts/addresses.ts | 3 +- src/account/utils/Constants.ts | 2 + src/modules/smartSessions.ts | 147 +++++++++++++++ src/modules/utils/Helper.ts | 117 +++++------- tests/modules.ownableExecutor.read.test.ts | 16 +- tests/smart.sessions.test.ts | 174 ++++++++++++++++++ tests/src/__contracts/addresses.ts | 16 -- tests/src/callDatas.ts | 75 +++++++- tests/src/testUtils.ts | 50 +++-- tsconfig/tsconfig.json | 3 +- 17 files changed, 546 insertions(+), 143 deletions(-) delete mode 100644 .github/workflows/pr-lint.yml create mode 100644 src/__contracts/abi/UniActionPolicyAbi.ts create mode 100644 src/modules/smartSessions.ts create mode 100644 tests/smart.sessions.test.ts delete mode 100644 tests/src/__contracts/addresses.ts diff --git a/.github/actions/install-dependencies/action.yml b/.github/actions/install-dependencies/action.yml index 85ebbac6e..588961205 100644 --- a/.github/actions/install-dependencies/action.yml +++ b/.github/actions/install-dependencies/action.yml @@ -10,6 +10,10 @@ runs: - name: Set up foundry uses: foundry-rs/foundry-toolchain@v1 + - name: Installs with yarn + shell: bash + run: yarn install + - name: Install dependencies shell: bash run: | diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml deleted file mode 100644 index 0f591a7c5..000000000 --- a/.github/workflows/pr-lint.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: pr lint -on: - workflow_dispatch: - pull_request: - types: [opened, reopened, synchronize, ready_for_review, edited] -jobs: - enforce_title: - name: pr lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Install dependencies - uses: ./.github/actions/install-dependencies - - - name: Use commitlint to check PR title - run: echo "${{ github.event.pull_request.title }}" | bun commitlint diff --git a/bun.lockb b/bun.lockb index 5f516548f3cea8f93140bc7bb8edd5cd5f3363e3..3b66649cb71dcd1fe68551fa39b10f370cad36c5 100755 GIT binary patch delta 751 zcmeA>B-(dKbb_8jPwE@Zr-l8_pFBOzrrdw!?>Rw7^su3<RZ;f)<@(=BUvBg}c4@Lm zn8{|3%REdV#^jExJd;B#O*Wsn>H`#bWV+e&hBpUT=EMUY5Z%o2a689C#;Z;a{8M)N z?^vol>&3~fZN*2wKY5VqT6EyhlQ$K$*^6Btta6^VPAufJ@&=aIs%vge;tRRnTJ-AU z$@{H5O^>r?1?W7D*)FTXbc3m0@YT_fCiB#j591D8{u<tYqTNZYqrAuGQ^Q^F`<s;= zEBI?tcGXO|rvIs(E7WJ<-Pq6k6;lGXPj5~9uUE7&!1x9u0|O(&KmLC}x|E3l4p`RT zOV)WPd1k?_iPh;&&;Fg2{n&f+_4L%wRhvJ|-mZB4yUde`t1fpJNoL%NdUa<Dr@*w* zs3#B9+}jquIJ@5{ooCyx?Y-(u2Fwo1olcPpB@>xSPd~G3ynS1Or*>)ct$oWJ((8Z! zKad$EKcVk9!~6rv8@;^4lRp(mvmD={w`^U4aYJZleBnVO&fVMpYB3dXJ4Bt62w^Mf zVVJysX>i-i4j)~QCyZNyRnJI0+rIMn&nGjdD^~8WGQSnFX34rW)$VG33`$d(&g=0C z=?I<J^JZH4&*^K;m?RvS*mdg-_{>@hXA4hv*9liz_fg>2-FHFzUwf2Qan<HAPBEOc zcfbFP6`LD=8vfH-Fza<$2G@R#1Ak{6Ynilrlfv9~R&%E9tme!c3uR683>kcY!6nbY z&=9z9hMdCI)}0)TafX(9K$+>6S1_O81oF)F4D^hRw=Y@A{FD(SYp!RmXS99dYG&3f zX^;uK_cJgE08I!uZZl=sr&$?H5EG_v6lIZQG@0%%%VNHrNsQ$Q8#Bn%Kv@>)?JTk^ z`R_s8?PWZyZ<xRmsr;-p>?T0FO46&QUl3pw-Ts%KHIxZ1bYGfPW_zg+t2!50`Ft7H M60iwkvaCOx0hCocwEzGB delta 753 zcmeA>B-(dKbb_A3<8!_o*Oqc#)j1yK*s0p|@61oTQ=*G~d|AvUB%M=Emf7fc?9${b zmL{7$F7q%=zG7uEx#KF&WD#4F%_pw<Fij4z1Ipa+;Q%R_eBuGm<SDKu%^VN6b3A0c z>f|tE>*LL$qPmT2&1N6-CFV%{P~dwr&CLDVlj^d2J>m-Wo5Qp6uRh8<vuXSG2<GI8 zD__lt6<({HRyrklx_-mnclFz4RhVut)$6f|S#vkLZwT_`_tTwQHhW|JD&dG9w;WD< zNLbv)YvjNrywh!`=R2phMcp@wuPm_mU7EGznd*ny?Bq{3w0qybV`N}pWcbJb4@j3X zF~9-K3YR;NAD_P9s{fYv*OY1Jr5}5C2)8wFnZ&)JlI`#{tMo-bY!=m@WszL_b;6~k zFQRWTwQrof)HrbA(!`E_!93|%=G%MKnGBd6;{FusOgXi3mNK_kqx0^)x0Y~=9F{EZ zU-@m-iPis8RBZO}ygHJ-`Ri%9%e~jlb|)1ouFUdp>XX_wwL#IkLXGp}_P<(81>6qD z_MDk*$GMtulP1&TB{5IU-3u=oDEV)Rnjij3K!Rn4$3I*Dnxf6E+qF3x`zMq>nbj=U z!Yi@Bq4i`~`D<mbTU(~DHDi)+@H^#|f7S8T=_k{Loix@Mwm3b1w<0$=>Zth1oaYDb zh~8!WzV(H)-^X3dk9)VK>#gjWC~=c_!-)ezYrk%fwfuC;zMa*aX*;Vq^TtA113hB~ zA7F6FGcYs+?wcW}u(fq32V<O}r5;db`sEeOCph83xqZn>=BJDtF#h(5tC?A|q>c29 z7<TVxU=RSB5OCaP%Cb+hGMK<77){?O$|A{Zq-QuiP?p7XJChj86E<d$xj?S;b{1Kd z{P#dvqwQrptZ$f@jr9zsr}DGbumd&dm84fqzaYRWy8SOdYbX;?$N(&KUz$~Bd#Mns WIu}Ue^!YNZB_IR0i^;P7a0US2ZZXOL diff --git a/package.json b/package.json index 724764957..c9015e4ae 100644 --- a/package.json +++ b/package.json @@ -80,8 +80,8 @@ "devDependencies": { "@biomejs/biome": "1.6.0", "@changesets/cli": "^2.27.1", - "@commitlint/cli": "^19.0.3", - "@commitlint/config-conventional": "^19.0.3", + "@commitlint/cli": "^19.4.1", + "@commitlint/config-conventional": "^19.4.1", "@ethersproject/abi": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@ethersproject/wallet": "^5.7.0", diff --git a/scripts/fetch:deployment.ts b/scripts/fetch:deployment.ts index 9c6c52139..1ea138b5a 100644 --- a/scripts/fetch:deployment.ts +++ b/scripts/fetch:deployment.ts @@ -63,7 +63,7 @@ export const getDeployments = async () => { } // Write ABI index file... - const abiIndexContent = `export * from "./EntryPointABI"\n${coreFiles + const abiIndexContent = `export * from "./UniActionPolicyAbi"\nexport * from "./EntryPointABI"\n${coreFiles .map((file) => `export * from "./${file}Abi"`) .join("\n")}` diff --git a/src/__contracts/abi/UniActionPolicyAbi.ts b/src/__contracts/abi/UniActionPolicyAbi.ts new file mode 100644 index 000000000..f3d352dd9 --- /dev/null +++ b/src/__contracts/abi/UniActionPolicyAbi.ts @@ -0,0 +1,58 @@ +export const UniActionPolicyAbi = [ + { + components: [ + { + name: "valueLimitPerUse", + type: "uint256" + }, + { + components: [ + { + name: "length", + type: "uint256" + }, + { + components: [ + { + name: "condition", + type: "uint8" + }, + { + name: "offset", + type: "uint64" + }, + { + name: "isLimited", + type: "bool" + }, + { + name: "ref", + type: "bytes32" + }, + { + components: [ + { + name: "limit", + type: "uint256" + }, + { + name: "used", + type: "uint256" + } + ], + name: "usage", + type: "tuple" + } + ], + name: "rules", + type: "tuple[]" + } + ], + name: "paramRules", + type: "tuple" + } + ], + name: "ActionConfig", + type: "tuple" + } +] as const diff --git a/src/__contracts/abi/index.ts b/src/__contracts/abi/index.ts index d0c8f1558..78bca202f 100644 --- a/src/__contracts/abi/index.ts +++ b/src/__contracts/abi/index.ts @@ -1,3 +1,4 @@ +export * from "./UniActionPolicyAbi" export * from "./EntryPointABI" export * from "./NexusAbi" export * from "./K1ValidatorAbi" diff --git a/src/__contracts/addresses.ts b/src/__contracts/addresses.ts index 8950437ce..9b61a7b5c 100644 --- a/src/__contracts/addresses.ts +++ b/src/__contracts/addresses.ts @@ -4,6 +4,7 @@ import type { Hex } from "viem" export const addresses: Record<string, Hex> = { Nexus: "0x776d63154D2aa9256D72C420416c930F3B735464", K1Validator: "0xd98238BBAeA4f91683d250003799EAd31d7F5c55", - K1ValidatorFactory: "0x8025afaD10209b8bEF3A3C94684AaE4D309c9996" + K1ValidatorFactory: "0x8025afaD10209b8bEF3A3C94684AaE4D309c9996", + UniActionPolicy: "0x28120dC008C36d95DE5fa0603526f219c1Ba80f6" } as const export default addresses diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index a2f7ffe7d..1f57e802c 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -21,6 +21,8 @@ export const DefaultGasLimit = { } export const ERROR_MESSAGES = { + INVALID_HEX: + "Invalid hex, if you are targeting a number, consider using pad() and toHex() from viem: pad(toHex(BigInt(2000))", ACCOUNT_NOT_DEPLOYED: "Account has not yet been deployed", ACCOUNT_ALREADY_DEPLOYED: "Account already deployed", NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY: diff --git a/src/modules/smartSessions.ts b/src/modules/smartSessions.ts new file mode 100644 index 000000000..deaf32206 --- /dev/null +++ b/src/modules/smartSessions.ts @@ -0,0 +1,147 @@ +import { type Address, type Hex, encodeAbiParameters } from "viem" +import { UniActionPolicyAbi } from "../__contracts/abi" +import { type AnyReferenceValue, parseReferenceValue } from "./utils/Helper" + +export type Rule = { + /** + * EQUAL = 0, + * GREATER_THAN = 1, + * LESS_THAN = 2, + * GREATER_THAN_OR_EQUAL = 3, + * LESS_THAN_OR_EQUAL = 4, + * NOT_EQUAL = 5 + */ + condition: ParamCondition + /** + * The offset in the calldata where the value to be checked is located. + * The offset is in multiples of 32 bytes. (Note: not the offsetIndex) + * The offsetIndex is generally the index of the arg in the method that you wish to target. + * The exception is when the arg is in an array + * In this case, the offsetIndex needs to be figured out using its position in the array + * (See the 'use-of-dynamic-types' example below for how to figure out the offsetIndex for an array) + * + * https://docs.soliditylang.org/en/develop/abi-spec.html#use-of-dynamic-types + * + * */ + offsetIndex: number + /** + * If the rule is limited, the usage object will contain the limit and the used values. + */ + isLimited: boolean + /** + * The reference value to compare against. You can pass in the raw hex value or a human-friendly value. + * Use the raw hex value if you are sure of the value you are passing in. + */ + ref: AnyReferenceValue + /** + * The usage object will contain the limit and the used values, and is only required if the isLimited property is true. + */ + usage: LimitUsage +} + +export type ActionConfig = { + valueLimitPerUse: bigint + paramRules: { + length: number + rules: Rule[] + } +} + +export const toActionConfig = (config: ActionConfig): RawActionConfig => ({ + valueLimitPerUse: BigInt(config.valueLimitPerUse), + paramRules: { + length: BigInt(config.paramRules.length), + rules: config.paramRules.rules.map((rule) => { + const parsedRef = parseReferenceValue(rule.ref) + return { + condition: rule.condition, + offset: BigInt(rule.offsetIndex) * BigInt(32), + isLimited: rule.isLimited, + ref: parsedRef, + usage: rule.usage + } + }) + } +}) + +export type RawActionConfig = { + valueLimitPerUse: bigint + paramRules: RawParamRules +} + +export type RawParamRules = { + length: bigint + rules: RawParamRule[] +} + +export type RawParamRule = { + condition: ParamCondition + offset: bigint + isLimited: boolean + ref: Hex + usage: LimitUsage +} + +export type LimitUsage = { + limit: bigint + used: bigint +} + +export enum ParamCondition { + EQUAL = 0, + GREATER_THAN = 1, + LESS_THAN = 2, + GREATER_THAN_OR_EQUAL = 3, + LESS_THAN_OR_EQUAL = 4, + NOT_EQUAL = 5 +} + +export type Policy = { + address: Hex + initData: Hex + deInitData: Hex +} + +export type Params = { + token: Address + limit: bigint +}[] + +export const MAX_RULES = 16 + +export const toUniversalActionPolicy = ( + actionConfig: ActionConfig +): Policy => ({ + address: "0x28120dC008C36d95DE5fa0603526f219c1Ba80f6", + initData: encodeAbiParameters(UniActionPolicyAbi, [ + toActionConfig(actionConfig) + ]), + deInitData: "0x" +}) + +export const sudoPolicy: Policy = { + address: "0x", + initData: "0x", + deInitData: "0x" +} + +export const toSpendingLimitsPolicy = (params: Params): Policy => { + return { + address: "0xDe9688b24c00699Ad51961ef90Ce5a9a8C49982B", + initData: encodeAbiParameters( + [{ type: "address[]" }, { type: "uint256[]" }], + [params.map(({ token }) => token), params.map(({ limit }) => limit)] + ), + deInitData: "0x" + } +} + +export const policies = { + to: { + universalAction: toUniversalActionPolicy, + spendingLimits: toSpendingLimitsPolicy + }, + sudo: sudoPolicy +} as const + +export default policies diff --git a/src/modules/utils/Helper.ts b/src/modules/utils/Helper.ts index c18c49cfd..a6250108c 100644 --- a/src/modules/utils/Helper.ts +++ b/src/modules/utils/Helper.ts @@ -1,18 +1,23 @@ import { - type Address, + type ByteArray, type Chain, type Hex, encodeAbiParameters, + isHex, keccak256, - parseAbiParameters + pad, + parseAbiParameters, + toHex } from "viem" import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { type UserOperationStruct, getChain } from "../../account" +import { + ERROR_MESSAGES, + type UserOperationStruct, + getChain +} from "../../account" import type { ChainInfo, - Execution, - SignerData, - Transaction + SignerData // createOwnableValidatorModule } from "../../index.js" @@ -160,77 +165,43 @@ export const parseChain = (chainInfo: ChainInfo): Chain => { if (typeof chainInfo === "number") return getChain(chainInfo) return chainInfo } + +export type HardcodedReference = { + raw: Hex +} +type BaseReferenceValue = string | number | bigint | boolean | ByteArray +export type AnyReferenceValue = BaseReferenceValue | HardcodedReference /** * - * SessionSearchParam - The arguments that can be used to reconstruct a session object - * - * It can be one of the following: - * A session object {@link Session} - * A session storage client {@link ISessionStorage} - * A smart account address {@link Address} - * - * When a session object is provided, it is returned as is - * When a session storage client is provided, the session object is reconstructed from the session storage client using **all** of the sessionIds found in the storage client - * When a smart account address is provided, the default session storage client is used to reconstruct the session object using **all** of the sessionIds found in the storage client - * - */ -// export type SessionSearchParam = Session | ISessionStorage | Address -// export const didProvideFullSession = ( -// searchParam: SessionSearchParam -// ): boolean => !!(searchParam as Session)?.sessionIDInfo?.length -/** - * - * reconstructSession - Reconstructs a session object from the provided arguments + * parseReferenceValue * - * If a session object is provided, it is returned as is - * If a session storage client is provided, the session object is reconstructed from the session storage client using **all** of the sessionIds found in the storage client - * If a smart account address is provided, the default session storage client is used to reconstruct the session object using **all** of the sessionIds found in the storage client + * Parses the reference value to a hex string. + * The reference value can be hardcoded using the {@link HardcodedReference} type. + * Otherwise, it can be a string, number, bigint, boolean, or ByteArray. * - * @param searchParam - This can be a session object {@link Session}, a session storage client {@link ISessionStorage} or a smart account address {@link Address} - * @returns A session object - * @error If the provided arguments do not match any of the above cases + * @param referenceValue {@link AnyReferenceValue} + * @returns Hex */ -// export const resumeSession = async ( -// searchParam: SessionSearchParam -// ): Promise<Session> => { -// const providedFullSession = didProvideFullSession(searchParam) -// const providedStorageClient = !!(searchParam as ISessionStorage) -// .smartAccountAddress?.length -// const providedSmartAccountAddress = isAddress(searchParam as Address) - -// if (providedFullSession) { -// const session = searchParam as Session -// return session -// } -// if (providedStorageClient) { -// const sessionStorageClient = searchParam as ISessionStorage -// const leafArray = await sessionStorageClient.getAllSessionData() -// const sessionIDInfo = leafArray.map(({ sessionID }) => sessionID as string) -// const session: Session = { -// sessionIDInfo, -// sessionStorageClient -// } -// return session -// } -// if (providedSmartAccountAddress) { -// const smartAccountAddress = searchParam as Address -// // Use the default session storage client -// const sessionStorageClient = getDefaultStorageClient(smartAccountAddress) -// const leafArray = await sessionStorageClient.getAllSessionData() -// const sessionIDInfo = leafArray.map(({ sessionID }) => sessionID as string) -// const session: Session = { -// sessionIDInfo, -// sessionStorageClient -// } -// return session -// } -// throw new Error(ERROR_MESSAGES.UNKNOW_SESSION_ARGUMENTS) -// } - -export const toTransaction = (execution: Execution): Transaction => { - return { - to: execution.target, - value: Number(execution.value), - data: execution.callData +export function parseReferenceValue(referenceValue: AnyReferenceValue): Hex { + let result: Hex + if ((referenceValue as HardcodedReference)?.raw) { + result = (referenceValue as HardcodedReference)?.raw + } else if (typeof referenceValue === "bigint") { + result = pad(toHex(referenceValue), { size: 32 }) as Hex + } else if (typeof referenceValue === "number") { + result = pad(toHex(BigInt(referenceValue)), { size: 32 }) as Hex + } else if (typeof referenceValue === "boolean") { + result = pad(toHex(referenceValue), { size: 32 }) as Hex + } else if (isHex(referenceValue)) { + result = referenceValue + } else if (typeof referenceValue === "string") { + result = pad(referenceValue as Hex, { size: 32 }) + } else { + // (typeof referenceValue === "object") + result = pad(toHex(referenceValue as ByteArray), { size: 32 }) as Hex + } + if (!isHex(result) || result.length !== 66) { + throw new Error(ERROR_MESSAGES.INVALID_HEX) } + return result } diff --git a/tests/modules.ownableExecutor.read.test.ts b/tests/modules.ownableExecutor.read.test.ts index 1e9336d99..042e12c5f 100644 --- a/tests/modules.ownableExecutor.read.test.ts +++ b/tests/modules.ownableExecutor.read.test.ts @@ -103,12 +103,12 @@ describe("modules.ownable.executor.read", () => { expect(balanceAfter - balanceBefore).toBe(1n) }) - test.skip("should initialize Ownable Executor Module with correct owners", async () => { - const ownableExecutorModule = await createOwnableExecutorModule( - smartAccount, - OWNABLE_EXECUTOR - ) - const owners = await ownableExecutorModule.getOwners(OWNABLE_EXECUTOR) - expect(owners).toStrictEqual(ownableExecutorModule.owners) - }) + // test.skip("should initialize Ownable Executor Module with correct owners", async () => { + // const ownableExecutorModule = await createOwnableExecutorModule( + // smartAccount, + // OWNABLE_EXECUTOR + // ) + // const owners = await ownableExecutorModule.getOwners(OWNABLE_EXECUTOR) + // expect(owners).toStrictEqual(ownableExecutorModule.owners) + // }) }) diff --git a/tests/smart.sessions.test.ts b/tests/smart.sessions.test.ts new file mode 100644 index 000000000..ce60eaf02 --- /dev/null +++ b/tests/smart.sessions.test.ts @@ -0,0 +1,174 @@ +import { + http, + type Account, + type Chain, + type Hex, + type WalletClient, + createWalletClient, + pad, + toBytes, + toHex +} from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { parseReferenceValue } from "../src" +import { + type NexusSmartAccount, + createSmartAccountClient +} from "../src/account" +import policies, { + ParamCondition, + type ActionConfig +} from "../src/modules/smartSessions" +import { TEST_CONTRACTS } from "./src/callDatas" +import { type TestFileNetworkType, toNetwork } from "./src/testSetup" +import { + getTestAccount, + killNetwork, + toTestClient, + topUp +} from "./src/testUtils" +import type { MasterClient, NetworkConfig } from "./src/testUtils" +const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" + +describe("smart.sessions", () => { + let network: NetworkConfig + // Nexus Config + let chain: Chain + let bundlerUrl: string + let walletClient: WalletClient + + // Test utils + let testClient: MasterClient + let account: Account + let recipientAccount: Account + let smartAccount: NexusSmartAccount + let smartAccountAddress: Hex + + beforeAll(async () => { + network = (await toNetwork(NETWORK_TYPE)) as NetworkConfig + + chain = network.chain + bundlerUrl = network.bundlerUrl + + account = getTestAccount(0) + recipientAccount = getTestAccount(3) + + walletClient = createWalletClient({ + account, + chain, + transport: http() + }) + + testClient = toTestClient(chain, getTestAccount(0)) + + smartAccount = await createSmartAccountClient({ + signer: walletClient, + bundlerUrl, + chain + }) + + smartAccountAddress = await smartAccount.getAddress() + }) + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test("should fund the smart account", async () => { + await topUp(testClient, smartAccountAddress) + const [balance] = await smartAccount.getBalances() + expect(balance.amount > 0) + }) + + test("should have account addresses", async () => { + const addresses = await Promise.all([ + account.address, + smartAccount.getAddress() + ]) + expect(addresses.every(Boolean)).toBeTruthy() + expect(addresses).toStrictEqual([ + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + ]) + }) + + test("should have smart account bytecode", async () => { + const bytecodes = await Promise.all( + [TEST_CONTRACTS.SmartSession, TEST_CONTRACTS.UniActionPolicy].map( + (address) => testClient.getBytecode(address) + ) + ) + expect(bytecodes.every((bytecode) => !!bytecode?.length)).toBeTruthy() + }) + + test("should parse a human friendly policy reference value to the hex version expected by the contracts", async () => { + const TWO_THOUSAND_AS_HEX = + "0x00000000000000000000000000000000000000000000000000000000000007d0" + + expect(parseReferenceValue(BigInt(2000))).toBe(TWO_THOUSAND_AS_HEX) + expect(parseReferenceValue(2000)).toBe(TWO_THOUSAND_AS_HEX) + expect(parseReferenceValue("7d0")).toBe(TWO_THOUSAND_AS_HEX) + expect( + parseReferenceValue( + parseReferenceValue(pad(toHex(BigInt(2000)), { size: 32 })) + ) + ).toBe(TWO_THOUSAND_AS_HEX) + }) + + test("should get a universal action policy", async () => { + const actionConfigData = { + valueLimitPerUse: BigInt(1000), + paramRules: { + length: 2, + rules: [ + { + condition: ParamCondition.EQUAL, + offsetIndex: 0, + isLimited: true, + ref: 1000, + usage: { + limit: BigInt(1000), + used: BigInt(10) + } + }, + { + condition: ParamCondition.LESS_THAN, + offsetIndex: 1, + isLimited: false, + ref: 2000, + usage: { + limit: BigInt(2000), + used: BigInt(100) + } + } + ] + } + } + const installUniversalPolicy = policies.to.universalAction(actionConfigData) + + expect(installUniversalPolicy.address).toEqual( + TEST_CONTRACTS.UniActionPolicy.address + ) + expect(installUniversalPolicy.initData).toBeDefined() + expect(installUniversalPolicy.deInitData).toEqual("0x") + }) + + test("should get a sudo action policy", async () => { + const installSudoActionPolicy = policies.sudo + expect(installSudoActionPolicy.address).toBeDefined() + expect(installSudoActionPolicy.initData).toEqual("0x") + expect(installSudoActionPolicy.deInitData).toEqual("0x") + }) + + test("should get a spending limit policy", async () => { + const installSpendingLimitPolicy = policies.to.spendingLimits([ + { + limit: BigInt(1000), + token: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" + } + ]) + + expect(installSpendingLimitPolicy.address).toBeDefined() + expect(installSpendingLimitPolicy.initData).toBeDefined() + expect(installSpendingLimitPolicy.deInitData).toEqual("0x") + }) +}) diff --git a/tests/src/__contracts/addresses.ts b/tests/src/__contracts/addresses.ts deleted file mode 100644 index a2f4227d1..000000000 --- a/tests/src/__contracts/addresses.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Hex } from "viem" -export const addresses: Record<string, Hex> = { - MockHook: "0xAB9733982E5b98bdDc4f00314E8EA4911A9D1BA5", - Stakeable: "0xc60F4C65a698C0FE5eddACfB71661B580D15BDaa", - NexusAccountFactory: "0x609e47C5404758D83102AB4fe58dbeD4AC39Ae78", - BiconomyMetaFactory: "0x98C8792cf50A93900d575842eDAFf3Ccc2C2902b", - Counter: "0x36023f0abe27eC68fD2c6a489A3e21772A08E120", - MockValidator: "0xa5ab9E06eB79805e6b20586e16285f10cA3274fB", - MockToken: "0x56623d18E54cBbCae340EC449E3c5D1DC0bF60cd", - BootstrapLib: "0x0c66e850AB4aB7e748bf48698a257aaB87d9a899", - MockRegistry: "0x25D55884BFA6380B0fCDc9E924c495C44Aa46415", - MockHandler: "0xBE52B87DA68EC967e977191bE125584b98c1Ea04", - Bootstrap: "0xC952c381C006D14395047A8aeE7F67fB59D38A10", - MockExecutor: "0x940C64D0c650615d3Af0053a4CD32AbAbD3F04e7" -} as const -export default addresses diff --git a/tests/src/callDatas.ts b/tests/src/callDatas.ts index 5af88824d..3d1a11aa6 100644 --- a/tests/src/callDatas.ts +++ b/tests/src/callDatas.ts @@ -1,14 +1,73 @@ import type { Hex } from "viem" +import type { DeployerParams } from "./testUtils" + +export const TEST_CONTRACTS: Record<string, DeployerParams> = { + // Rhinestone Ownables + OwnableValidator: { + chainId: 84532, + name: "OwnableValidator", + address: "0xfb11d7ca9161F1DF508787BA45951225B6C0a681" + }, + OwnableExecutor: { + chainId: 84532, + name: "OwnableExecutor", + address: "0x989110e958902f619148b8171fbDF1Dca0c5AE0B" + }, + // Smart sessions + SmartSession: { + chainId: 84532, + name: "SmartSession", + address: "0x0ce452fD9d0a20BCC14A2C4830E22bEB7EA4C8ee" + }, + SimpleSigner: { + chainId: 84532, + name: "Simple Signer", + address: "0xAAAdFd794A1781e4Fd3eA64985F107a7Ac2b3872" + }, + UniActionPolicy: { + chainId: 84532, + name: "UniActionPolicy", + address: "0x28120dC008C36d95DE5fa0603526f219c1Ba80f6" + }, + TimeFramePolicy: { + chainId: 84532, + name: "TimeFramePolicy", + address: "0x0B7BB9bD65858593D97f12001FaDa94828307805" + }, + UsageLimitPolicy: { + chainId: 84532, + name: "UsageLimitPolicy", + address: "0x80EF509D2F79eA332540e9698bDbc7B7FA3E1f74" + }, + ValueLimitPolicy: { + chainId: 84532, + name: "ValueLimitPolicy", + address: "0xDe9688b24c00699Ad51961ef90Ce5a9a8C49982B" + }, + WalletConnectCoSigner: { + chainId: 84532, + name: "WalletConnect CoSigner", + address: "0x24084171C36Fa6dfdf41D9C89A51F600ed35A731" + }, + MockK1Validator: { + chainId: 84532, + name: "MockK1Validator", + address: "0x2db5c5A93c71A2562b751Ad3eaB18BFB5fb96374" + }, + MockValidator: { + chainId: 84532, + name: "MockValidator", + address: "0x61Cb30337CB980383704f2Debfb8bea66d0f26b3" + }, + UserOperationBuilder: { + chainId: 84532, + name: "UserOperationBuilder", + address: "0xb07D7605a1AAeE4e56915363418229c127fF7C3D" + } +} + export const ENTRY_POINT_SIMULATIONS_CREATECALL: Hex = "0x313233340000000000000000000000000000000000000000000000000000000060806040526040516100109061005f565b604051809103906000f08015801561002c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b039290921691909117905534801561005957600080fd5b5061006c565b613d318061050783390190565b61048c8061007b6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c18f522614610030575b600080fd5b61004361003e366004610230565b610059565b60405161005091906103b0565b60405180910390f35b60606000825167ffffffffffffffff811115610077576100776101e9565b6040519080825280602002602001820160405280156100aa57816020015b60608152602001906001900390816100955790505b50905060005b835181101561019d57606060007f850aaf621a3721219c57b79d6077e318862cf95113b5637afaddb124884a5eb060008054906101000a90046001600160a01b031687858151811061010457610104610414565b602002602001015160405160240161011d92919061042a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050600061015f8882845a6101a5565b905080610174576101716000196101bd565b92505b8285858151811061018757610187610414565b60209081029190910101525050506001016100b0565b509392505050565b6000806000845160208601878987f195945050505050565b60603d828111156101cb5750815b604051602082018101604052818152816000602083013e9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610228576102286101e9565b604052919050565b600080604080848603121561024457600080fd5b83356001600160a01b038116811461025b57600080fd5b925060208481013567ffffffffffffffff8082111561027957600080fd5b8187019150601f88601f84011261028f57600080fd5b8235828111156102a1576102a16101e9565b8060051b6102b08682016101ff565b918252848101860191868101908c8411156102ca57600080fd5b87870192505b83831015610357578235868111156102e85760008081fd5b8701603f81018e136102fa5760008081fd5b888101358781111561030e5761030e6101e9565b61031f818801601f19168b016101ff565b8181528f8c8385010111156103345760008081fd5b818c84018c83013760009181018b019190915283525091870191908701906102d0565b8099505050505050505050509250929050565b6000815180845260005b8181101561039057602081850181015186830182015201610374565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561040757603f198886030184526103f585835161036a565b945092850192908501906001016103d9565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038316815260406020820181905260009061044e9083018461036a565b94935050505056fea26469706673582212207ddd3776bce2d23a4710581621f90634e5e2f38c35b4ba3416ba605ac54ef07b64736f6c6343000817003360a060405260405162000012906200009d565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b506001600160a01b0390811660805260408051808201825260008082528251808401909352808352602080840191825282018390529051600380546001600160a01b031916919094161790925551600455516005553480156200009157600080fd5b506001600255620000ab565b6102138062003b1e83390190565b608051613a5a620000c460003960005050613a5a6000f3fe6080604052600436106101395760003560e01c80635287ce12116100ab578063bb9fe6bf1161006f578063bb9fe6bf14610505578063c23a5cea1461051a578063c3bce0091461053a578063c5f996e614610567578063fc7e286d14610587578063fe2171cb1461062f57600080fd5b80635287ce12146103575780635895273b1461046f57806370a082311461048f578063b760faf9146104c5578063baa22044146104d857600080fd5b80631b2e01b8116100fd5780631b2e01b814610219578063205c28781461025f57806322cdde4c1461027f578063263934db1461029f57806330ec25d1146102cc57806335567e1a146102f957600080fd5b80630396cb601461014e5780630513fbf4146101615780630bd28e3b146101975780630da82661146101b75780630dbfc6bd146101ec57600080fd5b36610149576101473361064f565b005b600080fd5b61014761015c366004612c8c565b610670565b34801561016d57600080fd5b5061018161017c366004612cfd565b610904565b60405161018e9190612e11565b60405180910390f35b3480156101a357600080fd5b506101476101b2366004612e8c565b610a24565b3480156101c357600080fd5b506101d76101d2366004612fd8565b610a5b565b6040805192835260208301919091520161018e565b3480156101f857600080fd5b5061020c610207366004613127565b610b90565b60405161018e91906131c6565b34801561022557600080fd5b5061025161023436600461321d565b600160209081526000928352604080842090915290825290205481565b60405190815260200161018e565b34801561026b57600080fd5b5061014761027a366004613252565b610c4f565b34801561028b57600080fd5b5061025161029a366004613297565b610da0565b3480156102ab57600080fd5b506102bf6102ba366004613127565b610de2565b60405161018e91906132cb565b3480156102d857600080fd5b506102ec6102e7366004613127565b610e79565b60405161018e91906133a7565b34801561030557600080fd5b5061025161031436600461321d565b6001600160a01b039190911660009081526001602090815260408083206001600160c01b0385168452909152908190205491901b67ffffffffffffffff19161790565b34801561036357600080fd5b506104146103723660046133fe565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b031660009081526020818152604091829020825160a0810184528154815260019091015460ff811615159282019290925261010082046001600160701b031692810192909252600160781b810463ffffffff166060830152600160981b900465ffffffffffff16608082015290565b60405161018e9190600060a082019050825182526020830151151560208301526001600160701b03604084015116604083015263ffffffff606084015116606083015265ffffffffffff608084015116608083015292915050565b34801561047b57600080fd5b506102bf61048a366004613297565b610f2e565b34801561049b57600080fd5b506102516104aa3660046133fe565b6001600160a01b031660009081526020819052604090205490565b6101476104d33660046133fe565b61064f565b3480156104e457600080fd5b506104f86104f3366004612cfd565b610fe9565b60405161018e919061341b565b34801561051157600080fd5b50610147611046565b34801561052657600080fd5b506101476105353660046133fe565b61117a565b34801561054657600080fd5b5061055a610555366004613297565b61139e565b60405161018e919061342e565b34801561057357600080fd5b506104f8610582366004613441565b611563565b34801561059357600080fd5b506105ec6105a23660046133fe565b6000602081905290815260409020805460019091015460ff81169061010081046001600160701b031690600160781b810463ffffffff1690600160981b900465ffffffffffff1685565b6040805195865293151560208601526001600160701b039092169284019290925263ffffffff909116606083015265ffffffffffff16608082015260a00161018e565b34801561063b57600080fd5b5061055a61064a366004613127565b61164e565b60015b600581101561066357600101610652565b61066c82611662565b5050565b33600090815260208190526040902063ffffffff82166106d75760405162461bcd60e51b815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c617900000000000060448201526064015b60405180910390fd5b600181015463ffffffff600160781b9091048116908316101561073c5760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d650000000060448201526064016106ce565b600181015460009061075d90349061010090046001600160701b03166134fc565b9050600081116107a45760405162461bcd60e51b81526020600482015260126024820152711b9bc81cdd185ad9481cdc1958da599a595960721b60448201526064016106ce565b6001600160701b038111156107ec5760405162461bcd60e51b815260206004820152600e60248201526d7374616b65206f766572666c6f7760901b60448201526064016106ce565b6040805160a08101825283548152600160208083018281526001600160701b0386811685870190815263ffffffff8a811660608801818152600060808a0181815233808352828a52918c90209a518b55965199909801805494519151965165ffffffffffff16600160981b0265ffffffffffff60981b1997909416600160781b029690961669ffffffffffffffffffff60781b1991909516610100026effffffffffffffffffffffffffff0019991515999099166effffffffffffffffffffffffffffff1990941693909317979097179190911691909117179055835185815290810192909252917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050565b60606000866001600160401b0381111561092057610920612ea7565b60405190808252806020026020018201604052801561096d57816020015b6040805160608082018352600080835260208301529181019190915281526020019060019003908161093e5790505b50905060005b87811015610a185760006109ef8a8a848181106109925761099261350f565b90506020028101906109a49190613525565b8989858181106109b6576109b661350f565b90506020020160208101906109cb91906133fe565b8888868181106109dd576109dd61350f565b90506020028101906105829190613546565b905080838381518110610a0457610a0461350f565b602090810291909101015250600101610973565b50979650505050505050565b3360009081526001602090815260408083206001600160c01b03851684529091528120805491610a538361358c565b919050555050565b8251606081015160a08201516000928392909181016127100160405a603f0281610a8757610a876135a5565b041015610ad25760408051631101335b60e11b8152600060048201526024810191909152600f60448201526e41413935206f7574206f662067617360881b60648201526084016106ce565b875160009015610b66576000610aef846000015160008c866116ab565b905080610b64576000610b036108006116c3565b805190915015610b5e5784600001516001600160a01b03168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201876020015184604051610b559291906135bb565b60405180910390a35b60019250505b505b600088608001515a8803019050610b7f828a8a846116ef565b955095505050505094509492505050565b60606000826001600160401b03811115610bac57610bac612ea7565b604051908082528060200260200182016040528015610be557816020015b610bd2612ac0565b815260200190600190039081610bca5790505b50905060005b83811015610c45576000610c1c868684818110610c0a57610c0a61350f565b905060200281019061048a9190613525565b905080838381518110610c3157610c3161350f565b602090810291909101015250600101610beb565b5090505b92915050565b3360009081526020819052604090208054821115610caf5760405162461bcd60e51b815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c617267650000000000000060448201526064016106ce565b8054610cbc9083906135d4565b8155604080516001600160a01b03851681526020810184905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb910160405180910390a26000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114610d4f576040519150601f19603f3d011682016040523d82523d6000602084013e610d54565b606091505b5050905080610d9a5760405162461bcd60e51b81526020600482015260126024820152716661696c656420746f20776974686472617760701b60448201526064016106ce565b50505050565b6000610dab8261191b565b6040805160208101929092523090820152466060820152608001604051602081830303815290604052805190602001209050919050565b610dea612ac0565b6000826001600160401b03811115610e0457610e04612ea7565b604051908082528060200260200182016040528015610e3d57816020015b610e2a612ac0565b815260200190600190039081610e225790505b509050610e4a8484610b90565b905080610e586001856135d4565b81518110610e6857610e6861350f565b602002602001015191505092915050565b60606000826001600160401b03811115610e9557610e95612ea7565b604051908082528060200260200182016040528015610ece57816020015b610ebb612b07565b815260200190600190039081610eb35790505b50905060005b83811015610c45576000610f05868684818110610ef357610ef361350f565b90506020028101906105559190613525565b905080838381518110610f1a57610f1a61350f565b602090810291909101015250600101610ed4565b610f36612ac0565b610f3e611934565b610f46612bbc565b610f4f8361195c565b6000806000610f6060008786611a29565b925092509250600080610f738887611c57565b915091506040518061010001604052808760800151815260200183815260200186815260200185815260200184815260200182815260200160001515815260200160405180604001604052806002815260200161060f60f31b8152508152509650505050505050610fe46001600255565b919050565b60408051606080820183526000808352602083018190529282015290611013888888888888610904565b9050806110216001896135d4565b815181106110315761103161350f565b60200260200101519150509695505050505050565b33600090815260208190526040812060018101549091600160781b90910463ffffffff1690036110a55760405162461bcd60e51b815260206004820152600a6024820152691b9bdd081cdd185ad95960b21b60448201526064016106ce565b600181015460ff166110ed5760405162461bcd60e51b8152602060048201526011602482015270616c726561647920756e7374616b696e6760781b60448201526064016106ce565b600181015460009061110c90600160781b900463ffffffff16426135e7565b60018301805460ff65ffffffffffff60981b011916600160981b65ffffffffffff841690810260ff19169190911790915560405190815290915033907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a906020015b60405180910390a25050565b336000908152602081905260409020600181015461010090046001600160701b0316806111e05760405162461bcd60e51b81526020600482015260146024820152734e6f207374616b6520746f20776974686472617760601b60448201526064016106ce565b6001820154600160981b900465ffffffffffff166112405760405162461bcd60e51b815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b65282920666972737400000060448201526064016106ce565b600182015442600160981b90910465ffffffffffff1611156112a45760405162461bcd60e51b815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f7420647565000000000060448201526064016106ce565b600182018054610100600160c81b0319169055604080516001600160a01b03851681526020810183905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda3910160405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d8060008114611348576040519150601f19603f3d011682016040523d82523d6000602084013e61134d565b606091505b5050905080610d9a5760405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b65000000000000000060448201526064016106ce565b6113a6612b07565b6113ae612bbc565b6113b78361195c565b6000806113c660008685611a29565b50915091506113d9600083836000611d64565b60006113ec846000015160e00151611f00565b8451519091506000906113fe90611f00565b905061141d604051806040016040528060008152602001600081525090565b36600061142d60408b018b613546565b90925090506000601482101561144457600061145f565b61145260146000848661360d565b61145b91613637565b60601c5b905061146a81611f00565b9350505050600085905060006040518060a0016040528089608001518152602001896040015181526020018881526020018781526020016114ac8a6060015190565b90526040805180820182526003546001600160a01b0390811682528251808401909352600454835260055460208481019190915282019290925291925083161580159061150357506001836001600160a01b031614155b15611530576040518060400160405280846001600160a01b0316815260200161152b85611f00565b905290505b6040805160a081018252928352602083019590955293810192909252506060810192909252608082015295945050505050565b60408051606080820183526000808352602083015291810191909152611587612bbc565b6115908661195c565b61159c60008783611a29565b506000915060609050816001600160a01b0388161561162b5760005a9050886001600160a01b031688886040516115d492919061366c565b6000604051808303816000865af19150503d8060008114611611576040519150601f19603f3d011682016040523d82523d6000602084013e611616565b606091505b5090945092505a61162790826135d4565b9150505b604080516060810182529182529215156020820152918201529695505050505050565b611656612b07565b6000610e4a8484610e79565b600061166e8234611f52565b9050816001600160a01b03167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c48260405161116e91815260200190565b6000806000845160208601878987f195945050505050565b60603d828111156116d15750815b604051602082018101604052818152816000602083013e9392505050565b60008060005a86519091506000908161170782611f85565b60e08301519091506001600160a01b038116611726578251935061183e565b80935060008951111561183e57878202965060028b600281111561174c5761174c61367c565b1461183e5760005a9050816001600160a01b0316637c627b218560a001518e8d8c886040518663ffffffff1660e01b815260040161178d9493929190613692565b600060405180830381600088803b1580156117a757600080fd5b5087f1935050505080156117b9575060015b611838578a5180516020808e01519201516001600160a01b0390911691907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f4792906118046108006116c3565b6040516118129291906135bb565b60405180910390a38a608001515a870301985061183260028c8c8c6116ef565b90985096505b5a900395505b5a60a0840151606085015160808d01519288039a909a01990190890380821115611871576064600a828403020499909901985b505060408a01518883029750878110156118d75760028c60028111156118995761189961367c565b036118bc578097506118aa8b611fb7565b6118b78b60008a8c612006565b61190c565b8a608001515a87030198508a6040015197506118aa8b611fb7565b8781036118e48682611f52565b506000808e60028111156118fa576118fa61367c565b1490506119098d828c8e612006565b50505b50505050505094509492505050565b600061192682612081565b805190602001209050919050565b600280540361195657604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b6119cf6040516135a560f21b60208201526bffffffffffffffffffffffff193060601b166022820152600160f81b603682015260009060370160408051808303601f190181529190528051602090910120600680546001600160a01b0319166001600160a01b0390921691909117905550565b6000611a006119e16040840184613546565b6119ee60208601866133fe565b6119fb60e0870187613546565b612139565b9050805160001461066c57600081604051631101335b60e11b81526004016106ce9291906135bb565b6000806000805a8551909150611a3f8782612215565b611a4887610da0565b6020870152604081015161012082015161010083015160a08401516080850151606086015160c0870151861717171717176effffffffffffffffffffffffffffff811115611ad85760405162461bcd60e51b815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f77000000000000000060448201526064016106ce565b6000611b078460c081015160a08201516080830151606084015160408501516101009095015194010101010290565b9050611b168b8b8b8487612323565b9750611b2a846000015185602001516124ba565b611b80578a604051631101335b60e11b81526004016106ce918152604060208201819052601a908201527f4141323520696e76616c6964206163636f756e74206e6f6e6365000000000000606082015260800190565b825a86031115611bdc578a604051631101335b60e11b81526004016106ce918152604060208201819052601e908201527f41413236206f76657220766572696669636174696f6e4761734c696d69740000606082015260800190565b606060005a60e08701519091506001600160a01b031615611c0857611c038d8d8d86612507565b995091505b60408b018390528160608c015260a08c01355a88030160808c015260645a611c3090836135d4565b611c3b9060736136dc565b611c4591906136f3565b97505050505050505093509350939050565b60008060005a90506000611c6c856060015190565b604051909150366000611c8260608a018a613546565b915091506000816003811115611c9757833591505b506372288ed160e01b6001600160e01b0319821601611d0d5760008a8a60200151604051602401611cc9929190613862565b60408051601f198184030181529190526020810180516001600160e01b0316638dd7712f60e01b1790529050611d01818b888a610a5b565b9099509750611d579050565b611d5183838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508991508a9050610a5b565b90985096505b5050505050509250929050565b600080611d70856126b6565b91509150816001600160a01b0316836001600160a01b031614611dd65785604051631101335b60e11b81526004016106ce9181526040602082018190526014908201527320a0991a1039b4b3b730ba3ab9329032b93937b960611b606082015260800190565b8015611e2e5785604051631101335b60e11b81526004016106ce9181526040602082018190526017908201527f414132322065787069726564206f72206e6f7420647565000000000000000000606082015260800190565b6000611e39856126b6565b925090506001600160a01b03811615611e955786604051631101335b60e11b81526004016106ce9181526040602082018190526014908201527320a0999a1039b4b3b730ba3ab9329032b93937b960611b606082015260800190565b8115611ef75786604051631101335b60e11b81526004016106ce9181526040602082018190526021908201527f41413332207061796d61737465722065787069726564206f72206e6f742064756060820152606560f81b608082015260a00190565b50505050505050565b604080518082018252600080825260208083018281526001600160a01b03959095168252819052919091206001015461010081046001600160701b03168252600160781b900463ffffffff1690915290565b6001600160a01b038216600090815260208190526040812080548290611f799085906134fc565b91829055509392505050565b61010081015161012082015160009190808203611fa3575092915050565b611faf82488301612709565b949350505050565b80518051602080840151928101516040519081526001600160a01b0390921692917f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e910160405180910390a350565b835160e081015181516020808801519301516040516001600160a01b039384169492909316927f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f916120739189908990899093845291151560208401526040830152606082015260800190565b60405180910390a450505050565b60608135602083013560006120a161209c6040870187613546565b612721565b905060006120b561209c6060880188613546565b9050608086013560a087013560c088013560006120d861209c60e08c018c613546565b604080516001600160a01b039a909a1660208b015289810198909852606089019690965250608087019390935260a086019190915260c085015260e08401526101008084019190915281518084039091018152610120909201905292915050565b60608415801561215157506001600160a01b0384163b155b15612190575060408051808201909152601981527f41413230206163636f756e74206e6f74206465706c6f79656400000000000000602082015261220c565b601482106121fb5760006121a7601482858761360d565b6121b091613637565b60601c9050803b6000036121f957505060408051808201909152601b81527f41413330207061796d6173746572206e6f74206465706c6f7965640000000000602082015261220c565b505b506040805160208101909152600081525b95945050505050565b61222260208301836133fe565b6001600160a01b03168152602082810135908201526001600160801b036080808401358281166060850152811c604084015260a084013560c0808501919091528401359182166101008401521c61012082015236600061228560e0850185613546565b909250905080156123085760348110156122e15760405162461bcd60e51b815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e644461746100000060448201526064016106ce565b6122eb8282612734565b60a086015260808501526001600160a01b031660e0840152610d9a565b600060e084018190526080840181905260a084015250505050565b8251805160009190612342888761233d60408b018b613546565b61279c565b60e082015160006001600160a01b038216612386576001600160a01b03831660009081526020819052604090205487811161237f57808803612382565b60005b9150505b60208801516040516306608bdf60e21b81526001600160a01b038516916319822f7c9189916123bc918e91908790600401613884565b60206040518083038160008887f1935050505080156123f8575060408051601f3d908101601f191682019092526123f5918101906138a9565b60015b61242357896124086108006116c3565b6040516365c8fd4d60e01b81526004016106ce9291906138c2565b94506001600160a01b0382166124ad576001600160a01b03831660009081526020819052604090208054808911156124a7578b604051631101335b60e11b81526004016106ce9181526040602082018190526017908201527f41413231206469646e2774207061792070726566756e64000000000000000000606082015260800190565b88900390555b5050505095945050505050565b6001600160a01b038216600090815260016020908152604080832084821c80855292528220805484916001600160401b0383169190856124f98361358c565b909155501495945050505050565b60606000805a855160e08101516001600160a01b03811660009081526020819052604090208054939450919290919087811015612590578a604051631101335b60e11b81526004016106ce918152604060208201819052601e908201527f41413331207061796d6173746572206465706f73697420746f6f206c6f770000606082015260800190565b8781038260000181905550600084608001519050836001600160a01b03166352b7512c828d8d602001518d6040518563ffffffff1660e01b81526004016125d993929190613884565b60006040518083038160008887f19350505050801561261a57506040513d6000823e601f3d908101601f1916820160405261261791908101906138ff565b60015b612645578b61262a6108006116c3565b6040516365c8fd4d60e01b81526004016106ce92919061397f565b9098509650805a8703111561190c578b604051631101335b60e11b81526004016106ce9181526040602082018190526027908201527f41413336206f766572207061796d6173746572566572696669636174696f6e47606082015266185cd31a5b5a5d60ca1b608082015260a00190565b600080826000036126cc57506000928392509050565b60006126d784612a4f565b9050806040015165ffffffffffff164211806126fe5750806020015165ffffffffffff1642105b905194909350915050565b6000818310612718578161271a565b825b9392505050565b6000604051828085833790209392505050565b60008080612745601482868861360d565b61274e91613637565b60601c61275f60246014878961360d565b612768916139bc565b60801c61277960346024888a61360d565b612782916139bc565b9194506001600160801b0316925060801c90509250925092565b8015610d9a578251516001600160a01b0381163b156128075784604051631101335b60e11b81526004016106ce918152604060208201819052601f908201527f414131302073656e64657220616c726561647920636f6e737472756374656400606082015260800190565b600061281b6006546001600160a01b031690565b6001600160a01b031663570e1a3686600001516040015186866040518463ffffffff1660e01b81526004016128519291906139f3565b60206040518083038160008887f1158015612870573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128959190613a07565b90506001600160a01b0381166128f75785604051631101335b60e11b81526004016106ce918152604060208201819052601b908201527f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000606082015260800190565b816001600160a01b0316816001600160a01b0316146129615785604051631101335b60e11b81526004016106ce91815260406020808301829052908201527f4141313420696e6974436f6465206d7573742072657475726e2073656e646572606082015260800190565b806001600160a01b03163b6000036129c45785604051631101335b60e11b81526004016106ce91815260406020808301829052908201527f4141313520696e6974436f6465206d757374206372656174652073656e646572606082015260800190565b60006129d3601482868861360d565b6129dc91613637565b60601c9050826001600160a01b031686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160e00151604051612a3e9291906001600160a01b0392831681529116602082015260400190565b60405180910390a350505050505050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003612a8b575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b604051806101000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001606081525090565b6040518060a00160405280612b446040518060a0016040528060008152602001600081526020016000815260200160008152602001606081525090565b8152602001612b66604051806040016040528060008152602001600081525090565b8152602001612b88604051806040016040528060008152602001600081525090565b8152602001612baa604051806040016040528060008152602001600081525090565b8152602001612bb7612c54565b905290565b6040518060a00160405280612c2f60405180610140016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081525090565b8152602001600080191681526020016000815260200160008152602001600081525090565b604051806040016040528060006001600160a01b03168152602001612bb7604051806040016040528060008152602001600081525090565b600060208284031215612c9e57600080fd5b813563ffffffff8116811461271a57600080fd5b60008083601f840112612cc457600080fd5b5081356001600160401b03811115612cdb57600080fd5b6020830191508360208260051b8501011115612cf657600080fd5b9250929050565b60008060008060008060608789031215612d1657600080fd5b86356001600160401b0380821115612d2d57600080fd5b612d398a838b01612cb2565b90985096506020890135915080821115612d5257600080fd5b612d5e8a838b01612cb2565b90965094506040890135915080821115612d7757600080fd5b50612d8489828a01612cb2565b979a9699509497509295939492505050565b60005b83811015612db1578181015183820152602001612d99565b50506000910152565b60008151808452612dd2816020860160208601612d96565b601f01601f19169290920160200192915050565b805182526020810151151560208301526000604082015160606040850152611faf6060850182612dba565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612e6857603f19888603018452612e56858351612de6565b94509285019290850190600101612e3a565b5092979650505050505050565b80356001600160c01b0381168114610fe457600080fd5b600060208284031215612e9e57600080fd5b61271a82612e75565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715612edf57612edf612ea7565b60405290565b60405161014081016001600160401b0381118282101715612edf57612edf612ea7565b604051601f8201601f191681016001600160401b0381118282101715612f3057612f30612ea7565b604052919050565b60006001600160401b03821115612f5157612f51612ea7565b50601f01601f191660200190565b600082601f830112612f7057600080fd5b8135612f83612f7e82612f38565b612f08565b818152846020838601011115612f9857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114612fca57600080fd5b50565b8035610fe481612fb5565b600080600080848603610220811215612ff057600080fd5b85356001600160401b038082111561300757600080fd5b61301389838a01612f5f565b9650601f19830192506101c091508183121561302e57600080fd5b613036612ebd565b6101408085121561304657600080fd5b61304e612ee5565b945061305c60208b01612fcd565b855260408a0135602086015260608a0135604086015260808a0135606086015260a08a0135608086015260c08a013560a086015260e08a013560c08601526101006130a8818c01612fcd565b60e08701526101208b81013591870191909152908a013590850152928352610160880135602084015261018088013560408401526101a088013560608401528188013560808401529194506101e0870135918083111561310757600080fd5b505061311587828801612f5f565b94979396509394610200013593505050565b6000806020838503121561313a57600080fd5b82356001600160401b0381111561315057600080fd5b61315c85828601612cb2565b90969095509350505050565b6000610100825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c0830151151560c085015260e08301518160e086015261220c82860182612dba565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612e6857603f1988860301845261320b858351613168565b945092850192908501906001016131ef565b6000806040838503121561323057600080fd5b823561323b81612fb5565b915061324960208401612e75565b90509250929050565b6000806040838503121561326557600080fd5b823561327081612fb5565b946020939093013593505050565b6000610120828403121561329157600080fd5b50919050565b6000602082840312156132a957600080fd5b81356001600160401b038111156132bf57600080fd5b611faf8482850161327e565b60208152600061271a6020830184613168565b80516101408084528151908401526020810151610160840152604081015161018084015260608101516101a08401526080015160a06101c084015260009061332a6101e0850182612dba565b90506020830151613348602086018280518252602090810151910152565b5060408301518051606086015260208101516080860152506060830151805160a0860152602081015160c0860152506080830151610c4560e086018280516001600160a01b031682526020908101518051828401520151604090910152565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612e6857603f198886030184526133ec8583516132de565b945092850192908501906001016133d0565b60006020828403121561341057600080fd5b813561271a81612fb5565b60208152600061271a6020830184612de6565b60208152600061271a60208301846132de565b6000806000806060858703121561345757600080fd5b84356001600160401b038082111561346e57600080fd5b61347a8883890161327e565b95506020870135915061348c82612fb5565b909350604086013590808211156134a257600080fd5b818701915087601f8301126134b657600080fd5b8135818111156134c557600080fd5b8860208285010111156134d757600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c4957610c496134e6565b634e487b7160e01b600052603260045260246000fd5b6000823561011e1983360301811261353c57600080fd5b9190910192915050565b6000808335601e1984360301811261355d57600080fd5b8301803591506001600160401b0382111561357757600080fd5b602001915036819003821315612cf657600080fd5b60006001820161359e5761359e6134e6565b5060010190565b634e487b7160e01b600052601260045260246000fd5b828152604060208201526000611faf6040830184612dba565b81810381811115610c4957610c496134e6565b65ffffffffffff818116838216019080821115613606576136066134e6565b5092915050565b6000808585111561361d57600080fd5b8386111561362a57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156136645780818660140360031b1b83161692505b505092915050565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fd5b6000600386106136b257634e487b7160e01b600052602160045260246000fd5b858252608060208301526136c96080830186612dba565b6040830194909452506060015292915050565b8082028115828204841417610c4957610c496134e6565b60008261371057634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e1984360301811261372c57600080fd5b83016020810192503590506001600160401b0381111561374b57600080fd5b803603821315612cf657600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101206137a28461379585612fcd565b6001600160a01b03169052565b602083013560208501526137b96040840184613715565b8260408701526137cc838701828461375a565b925050506137dd6060840184613715565b85830360608701526137f083828461375a565b925050506080830135608085015260a083013560a085015260c083013560c085015261381f60e0840184613715565b85830360e087015261383283828461375a565b9250505061010061384581850185613715565b8684038388015261385784828461375a565b979650505050505050565b6040815260006138756040830185613783565b90508260208301529392505050565b6060815260006138976060830186613783565b60208301949094525060400152919050565b6000602082840312156138bb57600080fd5b5051919050565b82815260606020820152600d60608201526c10504c8cc81c995d995c9d1959609a1b608082015260a060408201526000611faf60a0830184612dba565b6000806040838503121561391257600080fd5b82516001600160401b0381111561392857600080fd5b8301601f8101851361393957600080fd5b8051613947612f7e82612f38565b81815286602083850101111561395c57600080fd5b61396d826020830160208601612d96565b60209590950151949694955050505050565b82815260606020820152600d60608201526c10504cccc81c995d995c9d1959609a1b608082015260a060408201526000611faf60a0830184612dba565b6fffffffffffffffffffffffffffffffff1981358181169160108510156136645760109490940360031b84901b1690921692915050565b602081526000611faf60208301848661375a565b600060208284031215613a1957600080fd5b815161271a81612fb556fea2646970667358221220c6ad4b2b56624cba321cec929c4bdd6329f5811c936f40e8ff5cfb92ef9b433f64736f6c63430008170033608060405234801561001057600080fd5b506101f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004361003e3660046100ec565b61005f565b6040516001600160a01b03909116815260200160405180910390f35b60008061006f601482858761015e565b61007891610188565b60601c9050600061008c846014818861015e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084519495509360209350849250905082850182875af190506000519350806100e357600093505b50505092915050565b600080602083850312156100ff57600080fd5b823567ffffffffffffffff8082111561011757600080fd5b818501915085601f83011261012b57600080fd5b81358181111561013a57600080fd5b86602082850101111561014c57600080fd5b60209290920196919550909350505050565b6000808585111561016e57600080fd5b8386111561017b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156101b55780818660140360031b1b83161692505b50509291505056fea2646970667358221220f5d91be997c659d0ef966f0c016a41e736500c794f93ad11197e128a54287a9964736f6c63430008170033" export const ENTRY_POINT_V07_CREATECALL: Hex = "0x90d8084deab30c2a37c45e8d47f49f2f7965183cb6990a98943ef94940681de360a08060405234620000825760016002556101df8181016001600160401b038111838210176200006c57829162003f2b833903906000f080156200006057608052604051613ea39081620000888239608051818181610d22015261324b0152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610024575b361561001957600080fd5b61002233612748565b005b60003560e01c806242dc5314611b0057806301ffc9a7146119ae5780630396cb60146116765780630bd28e3b146115fa5780631b2e01b814611566578063205c2878146113d157806322cdde4c1461136b57806335567e1a146112b35780635287ce12146111a557806370a0823114611140578063765e827f14610e82578063850aaf6214610dc35780639b249f6914610c74578063b760faf914610c3a578063bb9fe6bf14610a68578063c23a5cea146107c4578063dbed18e0146101a15763fc7e286d0361000e573461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61013a61229f565b16600052600060205260a0604060002065ffffffffffff6001825492015460405192835260ff8116151560208401526dffffffffffffffffffffffffffff8160081c16604084015263ffffffff8160781c16606084015260981c166080820152f35b600080fd5b3461019c576101af36612317565b906101b86129bd565b60009160005b82811061056f57506101d08493612588565b6000805b8481106102fc5750507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000809360005b81811061024757610240868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2613ba7565b6001600255005b6102a261025582848a612796565b73ffffffffffffffffffffffffffffffffffffffff6102766020830161282a565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a2806127d6565b906000915b8083106102b957505050600101610209565b909194976102f36102ed6001926102e78c8b6102e0826102da8e8b8d61269d565b9261265a565b5191613597565b90612409565b99612416565b950191906102a7565b6020610309828789612796565b61031f61031682806127d6565b9390920161282a565b9160009273ffffffffffffffffffffffffffffffffffffffff8091165b8285106103505750505050506001016101d4565b909192939561037f83610378610366848c61265a565b516103728b898b61269d565b856129f6565b9290613dd7565b9116840361050a576104a5576103958491613dd7565b9116610440576103b5576103aa600191612416565b96019392919061033c565b60a487604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b61057a818487612796565b9361058585806127d6565b919095602073ffffffffffffffffffffffffffffffffffffffff6105aa82840161282a565b1697600192838a1461076657896105da575b5050505060019293949550906105d191612409565b939291016101be565b8060406105e892019061284b565b918a3b1561019c57929391906040519485937f2dd8113300000000000000000000000000000000000000000000000000000000855288604486016040600488015252606490818601918a60051b8701019680936000915b8c83106106e657505050505050838392610684927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8560009803016024860152612709565b03818a5afa90816106d7575b506106c657602486604051907f86a9f7500000000000000000000000000000000000000000000000000000000082526004820152fd5b93945084936105d1600189806105bc565b6106e0906121bd565b88610690565b91939596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c908a9294969a0301865288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181121561019c57836107538793858394016128ec565b9a0196019301909189979695949261063f565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b3461019c576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576107fc61229f565b33600052600082526001604060002001908154916dffffffffffffffffffffffffffff8360081c16928315610a0a5765ffffffffffff8160981c1680156109ac57421061094e5760009373ffffffffffffffffffffffffffffffffffffffff859485947fffffffffffffff000000000000000000000000000000000000000000000000ff86951690556040517fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda33391806108da8786836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a2165af16108e8612450565b50156108f057005b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b3461019c5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c573360005260006020526001604060002001805463ffffffff8160781c16908115610bdc5760ff1615610b7e5765ffffffffffff908142160191818311610b4f5780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609885901b161790556040519116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610022610c6f61229f565b612748565b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043567ffffffffffffffff811161019c576020610cc8610d1b9236906004016122c2565b919073ffffffffffffffffffffffffffffffffffffffff9260405194859283927f570e1a360000000000000000000000000000000000000000000000000000000084528560048501526024840191612709565b03816000857f0000000000000000000000000000000000000000000000000000000000000000165af1908115610db757602492600092610d86575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b610da991925060203d602011610db0575b610da181836121ed565b8101906126dd565b9083610d56565b503d610d97565b6040513d6000823e3d90fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610dfa61229f565b60243567ffffffffffffffff811161019c57600091610e1e839236906004016122c2565b90816040519283928337810184815203915af4610e39612450565b90610e7e6040519283927f99410554000000000000000000000000000000000000000000000000000000008452151560048401526040602484015260448301906123c6565b0390fd5b3461019c57610e9036612317565b610e9b9291926129bd565b610ea483612588565b60005b848110610f1c57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000915b858310610eec576102408585613ba7565b909193600190610f12610f0087898761269d565b610f0a888661265a565b519088613597565b0194019190610edb565b610f47610f40610f2e8385979561265a565b51610f3a84898761269d565b846129f6565b9190613dd7565b73ffffffffffffffffffffffffffffffffffffffff929183166110db5761107657610f7190613dd7565b911661101157610f8657600101929092610ea7565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61118c61229f565b1660005260006020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff6111f161229f565b6000608060405161120181612155565b828152826020820152826040820152826060820152015216600052600060205260a06040600020608060405161123681612155565b6001835493848352015490602081019060ff8316151582526dffffffffffffffffffffffffffff60408201818560081c16815263ffffffff936060840193858760781c16855265ffffffffffff978891019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206112ec61229f565b73ffffffffffffffffffffffffffffffffffffffff6113096122f0565b911660005260018252604060002077ffffffffffffffffffffffffffffffffffffffffffffffff821660005282526040600020547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b3461019c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60208136011261019c576004359067ffffffffffffffff821161019c5761012090823603011261019c576113c9602091600401612480565b604051908152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761140861229f565b60243590336000526000602052604060002090815491828411611508576000808573ffffffffffffffffffffffffffffffffffffffff8295839561144c848a612443565b90556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af16114a2612450565b50156114aa57005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761159d61229f565b73ffffffffffffffffffffffffffffffffffffffff6115ba6122f0565b9116600052600160205277ffffffffffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043577ffffffffffffffffffffffffffffffffffffffffffffffff811680910361019c5733600052600160205260406000209060005260205260406000206116728154612416565b9055005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043563ffffffff9182821680920361019c5733600052600081526040600020928215611950576001840154908160781c1683106118f2576116f86dffffffffffffffffffffffffffff9182349160081c16612409565b93841561189457818511611836579065ffffffffffff61180592546040519061172082612155565b8152848101926001845260408201908816815260608201878152600160808401936000855233600052600089526040600020905181550194511515917fffffffffffffffffffffffffff0000000000000000000000000000000000000060ff72ffffffff0000000000000000000000000000006effffffffffffffffffffffffffff008954945160081b16945160781b1694169116171717835551167fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff78ffffffffffff0000000000000000000000000000000000000083549260981b169116179055565b6040519283528201527fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0160403392a2005b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361019c57807f60fc6b6e0000000000000000000000000000000000000000000000000000000060209214908115611ad6575b8115611aac575b8115611a82575b8115611a58575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482611a4d565b7f3e84f0210000000000000000000000000000000000000000000000000000000081149150611a46565b7fcf28ef970000000000000000000000000000000000000000000000000000000081149150611a3f565b7f915074d80000000000000000000000000000000000000000000000000000000081149150611a38565b3461019c576102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5767ffffffffffffffff60043581811161019c573660238201121561019c57611b62903690602481600401359101612268565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101c0811261019c5761014060405191611b9e83612155565b1261019c5760405192611bb0846121a0565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361019c578452602093604435858201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043573ffffffffffffffffffffffffffffffffffffffff8116810361019c5760e08201526101243561010082015261014435610120820152825261016435848301526101843560408301526101a43560608301526101c43560808301526101e43590811161019c57611c7c9036906004016122c2565b905a3033036120f7578351606081015195603f5a0260061c61271060a0840151890101116120ce5760009681519182611ff0575b5050505090611cca915a9003608085015101923691612268565b925a90600094845193611cdc85613ccc565b9173ffffffffffffffffffffffffffffffffffffffff60e0870151168015600014611ea957505073ffffffffffffffffffffffffffffffffffffffff855116935b5a9003019360a06060820151910151016080860151850390818111611e95575b50508302604085015192818410600014611dce5750506003811015611da157600203611d79576113c99293508093611d7481613d65565b613cf6565b5050507fdeadaa51000000000000000000000000000000000000000000000000000000008152fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b81611dde92979396940390613c98565b506003841015611e6857507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f60808683015192519473ffffffffffffffffffffffffffffffffffffffff865116948873ffffffffffffffffffffffffffffffffffffffff60e0890151169701519160405192835215898301528760408301526060820152a46113c9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6064919003600a0204909301928780611d3d565b8095918051611eba575b5050611d1d565b6003861015611fc1576002860315611eb35760a088015190823b1561019c57600091611f2491836040519586809581947f7c627b210000000000000000000000000000000000000000000000000000000083528d60048401526080602484015260848301906123c6565b8b8b0260448301528b60648301520393f19081611fad575b50611fa65787893d610800808211611f9e575b506040519282828501016040528184528284013e610e7e6040519283927fad7954bc000000000000000000000000000000000000000000000000000000008452600484015260248301906123c6565b905083611f4f565b8980611eb3565b611fb89199506121bd565b6000978a611f3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092918380938c73ffffffffffffffffffffffffffffffffffffffff885116910192f115612023575b808080611cb0565b611cca929195503d6108008082116120c6575b5060405190888183010160405280825260008983013e805161205f575b5050600194909161201b565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20188870151918973ffffffffffffffffffffffffffffffffffffffff8551169401516120bc604051928392835260408d84015260408301906123c6565b0390a38680612053565b905088612036565b877fdeaddead000000000000000000000000000000000000000000000000000000006000526000fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b60a0810190811067ffffffffffffffff82111761217157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610140810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157604052565b6060810190811067ffffffffffffffff82111761217157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926122748261222e565b9161228260405193846121ed565b82948184528183011161019c578281602093846000960137010152565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9181601f8401121561019c5782359167ffffffffffffffff831161019c576020838186019501011161019c57565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261019c5760043567ffffffffffffffff9283821161019c578060238301121561019c57816004013593841161019c5760248460051b8301011161019c57602401919060243573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b60005b8381106123b65750506000910152565b81810151838201526020016123a6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612402815180928187528780880191016123a3565b0116010190565b91908201809211610b4f57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b4f5760010190565b91908203918211610b4f57565b3d1561247b573d906124618261222e565b9161246f60405193846121ed565b82523d6000602084013e565b606090565b604061248e8183018361284b565b90818351918237206124a3606084018461284b565b90818451918237209260c06124bb60e083018361284b565b908186519182372091845195602087019473ffffffffffffffffffffffffffffffffffffffff833516865260208301358789015260608801526080870152608081013560a087015260a081013582870152013560e08501526101009081850152835261012083019167ffffffffffffffff918484108385111761217157838252845190206101408501908152306101608601524661018086015260608452936101a00191821183831017612171575251902090565b67ffffffffffffffff81116121715760051b60200190565b9061259282612570565b6040906125a260405191826121ed565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125d08295612570565b019160005b8381106125e25750505050565b60209082516125f081612155565b83516125fb816121a0565b600081526000849181838201528187820152816060818184015260809282848201528260a08201528260c08201528260e082015282610100820152826101208201528652818587015281898701528501528301528286010152016125d5565b805182101561266e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561266e5760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18136030182121561019c570190565b9081602091031261019c575173ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b7f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602073ffffffffffffffffffffffffffffffffffffffff61278a3485613c98565b936040519485521692a2565b919081101561266e5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561019c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c57602001918160051b3603831361019c57565b3573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c5760200191813603831361019c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019c57016020813591019167ffffffffffffffff821161019c57813603831361019c57565b61012091813573ffffffffffffffffffffffffffffffffffffffff811680910361019c576129626129476129ba9561299b93855260208601356020860152612937604087018761289c565b9091806040880152860191612709565b612954606086018661289c565b908583036060870152612709565b6080840135608084015260a084013560a084015260c084013560c084015261298d60e085018561289c565b9084830360e0860152612709565b916129ac610100918281019061289c565b929091818503910152612709565b90565b60028054146129cc5760028055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b926000905a93805194843573ffffffffffffffffffffffffffffffffffffffff811680910361019c5786526020850135602087015260808501356fffffffffffffffffffffffffffffffff90818116606089015260801c604088015260a086013560c088015260c086013590811661010088015260801c610120870152612a8060e086018661284b565b801561357b576034811061351d578060141161019c578060241161019c5760341161019c57602481013560801c60a0880152601481013560801c60808801523560601c60e08701525b612ad285612480565b60208301526040860151946effffffffffffffffffffffffffffff8660c08901511760608901511760808901511760a0890151176101008901511761012089015117116134bf57604087015160608801510160808801510160a08801510160c0880151016101008801510296835173ffffffffffffffffffffffffffffffffffffffff81511690612b66604085018561284b565b806131e4575b505060e0015173ffffffffffffffffffffffffffffffffffffffff1690600082156131ac575b6020612bd7918b828a01516000868a604051978896879586937f19822f7c00000000000000000000000000000000000000000000000000000000855260048501613db5565b0393f160009181613178575b50612c8b573d8c610800808311612c83575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612bf5565b9a92939495969798999a91156130f2575b509773ffffffffffffffffffffffffffffffffffffffff835116602084015190600052600160205260406000208160401c60005260205267ffffffffffffffff604060002091825492612cee84612416565b9055160361308d575a8503116130285773ffffffffffffffffffffffffffffffffffffffff60e0606093015116612d42575b509060a09184959697986040608096015260608601520135905a900301910152565b969550505a9683519773ffffffffffffffffffffffffffffffffffffffff60e08a01511680600052600060205260406000208054848110612fc3576080612dcd9a9b9c600093878094039055015192602089015183604051809d819582947f52b7512c0000000000000000000000000000000000000000000000000000000084528c60048501613db5565b039286f1978860009160009a612f36575b50612e86573d8b610800808311612e7e575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612df0565b9991929394959697989998925a900311612eab57509096959094939291906080612d20565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b915098503d90816000823e612f4b82826121ed565b604081838101031261019c5780519067ffffffffffffffff821161019c57828101601f83830101121561019c578181015191612f868361222e565b93612f9460405195866121ed565b838552820160208483850101011161019c57602092612fba9184808701918501016123a3565b01519838612dde565b60848b604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b600052600060205260406000208054808c11613113578b9003905538612c9c565b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b9091506020813d6020116131a4575b81613194602093836121ed565b8101031261019c57519038612be3565b3d9150613187565b508060005260006020526040600020548a81116000146131d75750612bd7602060005b915050612b92565b6020612bd7918c036131cf565b833b61345a57604088510151602060405180927f570e1a360000000000000000000000000000000000000000000000000000000082528260048301528160008161323260248201898b612709565b039273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690f1908115610db75760009161343b575b5073ffffffffffffffffffffffffffffffffffffffff811680156133d6578503613371573b1561330c5760141161019c5773ffffffffffffffffffffffffffffffffffffffff9183887fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d604060e0958787602086015195510151168251913560601c82526020820152a391612b6c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152fd5b60848e604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313420696e6974436f6465206d7573742072657475726e2073656e6465726064820152fd5b60848f604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601b60448201527f4141313320696e6974436f6465206661696c6564206f72204f4f4700000000006064820152fd5b613454915060203d602011610db057610da181836121ed565b3861327c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b5050600060e087015260006080870152600060a0870152612ac9565b9092915a906060810151916040928351967fffffffff00000000000000000000000000000000000000000000000000000000886135d7606084018461284b565b600060038211613b9f575b7f8dd7712f0000000000000000000000000000000000000000000000000000000094168403613a445750505061379d6000926136b292602088015161363a8a5193849360208501528b602485015260648401906128ec565b90604483015203906136727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928381018352826121ed565b61379189519485927e42dc5300000000000000000000000000000000000000000000000000000000602085015261020060248501526102248401906123c6565b613760604484018b60806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152876123c6565b039081018352826121ed565b6020918183809351910182305af1600051988652156137bf575b505050505050565b909192939495965060003d8214613a3a575b7fdeaddead00000000000000000000000000000000000000000000000000000000810361385b57608487878051917f220266b600000000000000000000000000000000000000000000000000000000835260048301526024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b7fdeadaa510000000000000000000000000000000000000000000000000000000091929395949650146000146138c55750506138a961389e6138b8935a90612443565b608085015190612409565b9083015183611d748295613d65565b905b3880808080806137b7565b909261395290828601518651907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479273ffffffffffffffffffffffffffffffffffffffff9580878551169401516139483d610800808211613a32575b508a519084818301018c5280825260008583013e8a805194859485528401528a8301906123c6565b0390a35a90612443565b916139636080860193845190612409565b926000905a94829488519761397789613ccc565b948260e08b0151168015600014613a1857505050875116955b5a9003019560a06060820151910151019051860390818111613a04575b5050840290850151928184106000146139de57505080611e68575090816139d89293611d7481613d65565b906138ba565b6139ee9082849397950390613c98565b50611e68575090826139ff92613cf6565b6139d8565b6064919003600a02049094019338806139ad565b90919892509751613a2a575b50613990565b955038613a24565b905038613920565b8181803e516137d1565b613b97945082935090613a8c917e42dc53000000000000000000000000000000000000000000000000000000006020613b6b9501526102006024860152610224850191612709565b613b3a604484018860806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152846123c6565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018952886121ed565b60008761379d565b5081356135e2565b73ffffffffffffffffffffffffffffffffffffffff168015613c3a57600080809381935af1613bd4612450565b5015613bdc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052613cc66040600020918254612409565b80915590565b610120610100820151910151808214613cf257480180821015613ced575090565b905090565b5090565b9190917f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f6080602083015192519473ffffffffffffffffffffffffffffffffffffffff946020868851169660e089015116970151916040519283526000602084015260408301526060820152a4565b60208101519051907f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e60208073ffffffffffffffffffffffffffffffffffffffff855116940151604051908152a3565b613dcd604092959493956060835260608301906128ec565b9460208201520152565b8015613e6457600060408051613dec816121d1565b828152826020820152015273ffffffffffffffffffffffffffffffffffffffff811690604065ffffffffffff91828160a01c16908115613e5c575b60d01c92825191613e37836121d1565b8583528460208401521691829101524211908115613e5457509091565b905042109091565b839150613e27565b5060009060009056fea2646970667358221220b094fd69f04977ae9458e5ba422d01cd2d20dbcfca0992ff37f19aa07deec25464736f6c6343000817003360808060405234610016576101c3908161001c8239f35b600080fdfe6080600436101561000f57600080fd5b6000803560e01c63570e1a361461002557600080fd5b3461018a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576004359167ffffffffffffffff9081841161018657366023850112156101865783600401358281116101825736602482870101116101825780601411610182577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec810192808411610155577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8501160116830190838210908211176101555792846024819482600c60209a968b9960405286845289840196603889018837830101525193013560601c5af1908051911561014d575b5073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b90503861012e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8380fd5b8280fd5b80fdfea26469706673582212207adef8895ad3393b02fab10a111d85ea80ff35366aa43995f4ea20e67f29200664736f6c63430008170033" - -export const OWNABLE_VALIDATOR = "0xfb11d7ca9161F1DF508787BA45951225B6C0a681" -export const OWNABLE_VALIDATOR_BYTECODE = - "0x608060405234801561000f575f80fd5b50600436106100f0575f3560e01c80639700320311610093578063ecd0596111610063578063ecd059611461024d578063f551e2ee14610261578063fbe5ce0a1461028d578063fd8b84b1146102a0575f80fd5b806397003203146101c4578063c86ec2bf146101e5578063ccfdec8c14610204578063d60b347f14610223575f80fd5b80637065cb48116100ce5780637065cb48146101685780638a91b0e31461017b578063940d38401461018e578063960bfe04146101b1575f80fd5b806306fdde03146100f457806354fd4d50146101325780636d61fe7014610153575b5f80fd5b60408051808201909152601081526f27bbb730b13632ab30b634b230ba37b960811b60208201525b604051610129919061152e565b60405180910390f35b6040805180820190915260058152640312e302e360dc1b602082015261011c565b61016661016136600461158c565b6102c0565b005b6101666101763660046115e1565b61044c565b61016661018936600461158c565b610567565b6101a161019c3660046115fa565b6105c4565b6040519015158152602001610129565b6101666101bf36600461166e565b610705565b6101d76101d2366004611685565b6107e0565b604051908152602001610129565b6101d76101f33660046115e1565b60016020525f908152604090205481565b6101d76102123660046115e1565b60026020525f908152604090205481565b6101a16102313660046115e1565b6001600160a01b03165f90815260016020526040902054151590565b6101a161025b36600461166e565b60011490565b61027461026f3660046116cc565b610823565b6040516001600160e01b03199091168152602001610129565b61016661029b366004611722565b61085e565b6102b36102ae3660046115e1565b610910565b6040516101299190611753565b5f806102ce838501856117b3565b915091506102db81610927565b6102f85760405163e719027360e01b815260040160405180910390fd5b815f03610318576040516306968de960e31b815260040160405180910390fd5b80518281101561033b5760405163aabd5a0960e01b815260040160405180910390fd5b335f81815260016020908152604090912085905582111561036f57604051632414149d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526002602052604081208390556103939082610931565b5f5b82811015610410575f8482815181106103b0576103b061187f565b602002602001015190505f6001600160a01b0316816001600160a01b0316036103fc5760405163b20f76e360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6104075f84836109aa565b50600101610395565b506040516001600160a01b038216907f27b541a16df0902e262f34789782092ab25125513b8ed73608e802951771b928905f90a2505050505050565b335f818152600160205260409020546104835760405163f91bd6f160e01b81526001600160a01b03821660048201526024016103f3565b6001600160a01b0382166104b55760405163b20f76e360e01b81526001600160a01b03831660048201526024016103f3565b6001600160a01b0381165f90815260026020908152604090912054106104ee57604051632414149d60e01b815260040160405180910390fd5b6001600160a01b0381165f908152600260205260408120805491610511836118a7565b9091555061052290505f82846109aa565b6040516001600160a01b0383811682528216907fc82bdbbf677a2462f2a7e22e4ba9abd209496b69cd7b868b3b1d28f76e09a40a906020015b60405180910390a25050565b336105725f82610a9d565b6001600160a01b0381165f8181526001602090815260408083208390556002909152808220829055517f9d00629762554452d03c3b45626436df6ca1c3795d05d04df882f6db481b1be09190a2505050565b5f80806105d3848601866117b3565b915091506105e081610927565b6105ee575f925050506106fc565b815f036105ff575f925050506106fc565b5f61066e6106318a6020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610b0f915050565b905061067981610def565b61068281610dfb565b80515f90815b818110156106dd575f6106bd8583815181106106a6576106a661187f565b602002602001015187610e0490919063ffffffff16565b50905080156106d457836106d0816118a7565b9450505b50600101610688565b508482106106f3576001955050505050506106fc565b5f955050505050505b95945050505050565b335f8181526001602052604090205461073c5760405163f91bd6f160e01b81526001600160a01b03821660048201526024016103f3565b815f0361075c5760405163aabd5a0960e01b815260040160405180910390fd5b6001600160a01b0381165f908152600260205260409020548211156107945760405163aabd5a0960e01b815260040160405180910390fd5b6001600160a01b0381165f8181526001602052604090819020849055517ff7e18aa0532694077d6fc7df02e85d86b91ba964f958d1949d45c5776d36eb6e9061055b9085815260200190565b5f806108066107f260208601866115e1565b846108016101008801886118bf565b610e25565b90508015610817575f91505061081d565b60019150505b92915050565b5f8061083133868686610e25565b905080156108495750630b135d3f60e11b9050610856565b506001600160e01b031990505b949350505050565b335f818152600160209081526040808320546002909252909120540361089757604051630f368a7560e11b815260040160405180910390fd5b6108a35f828585610f4a565b6001600160a01b0381165f9081526002602052604081208054916108c683611902565b90915550506040516001600160a01b0383811682528216907fe594d081b4382713733fe631966432c9cea5199afb2db5c3c1931f9f930036799060200160405180910390a2505050565b60606109205f836001602061103f565b5092915050565b5f61081d826111ff565b60015f908152602083815260408083206001600160a01b0380861685529252909120541615610973576040516329e42f3360e11b815260040160405180910390fd5b60015f818152602093845260408082206001600160a01b0394909416825292909352912080546001600160a01b0319169091179055565b6001600160a01b03811615806109c957506001600160a01b0381166001145b156109f257604051637c84ecfb60e01b81526001600160a01b03821660048201526024016103f3565b6001600160a01b038181165f9081526020858152604080832086851684529091529020541615610a4057604051631034f46960e21b81526001600160a01b03821660048201526024016103f3565b60015f908152602084815260408083206001600160a01b039586168085528184528285208054968816808752988552838620918652908452919093208054949095166001600160a01b031994851617909455528154169091179055565b60015f908152602083815260408083206001600160a01b038581168552925290912054165b6001600160a01b03811615610b0a576001600160a01b039081165f908152602084815260408083208585168452909152902080546001600160a01b0319811690915516610ac2565b505050565b60605f610b1d836041611917565b84519091508367ffffffffffffffff811115610b3b57610b3b61179f565b604051908082528060200260200182016040528015610b64578160200160208202803683370190505b50925081811015610b8857604051638baa579f60e01b815260040160405180910390fd5b5f5b84811015610de5575f805f80610bb78a8660410201602081015160408201516060909201515f1a92909190565b9250925092508260ff165f03610d455790925082906041811015610bfe576040516338a245ff60e11b8152600481018290525f6024820181905260448201526064016103f3565b85610c0a82602061192e565b1115610c39576040516338a245ff60e11b8152600481018290525f6024820152604481018790526064016103f3565b6020818b018101519087908290610c5190859061192e565b610c5b919061192e565b1115610c8b576040516338a245ff60e11b81526004810183905260248101829052604481018890526064016103f3565b60606020838d01019050631626ba7e60e01b6001600160e01b031916866001600160a01b0316631626ba7e8f846040518363ffffffff1660e01b8152600401610cd5929190611941565b602060405180830381865afa158015610cf0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d149190611959565b6001600160e01b03191614610d3e578060405163605d348960e01b81526004016103f3919061152e565b5050610daa565b601e8360ff161115610d9b57610d94610d828c6020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b610d8d600486611980565b8484611237565b9350610daa565b610da78b848484611237565b93505b83888681518110610dbd57610dbd61187f565b6001600160a01b0390921660209283029190910190910152505060019092019150610b8a9050565b5050509392505050565b610df881611271565b50565b610df881611414565b5f80610e1a84846001600160a01b03165f61145d565b909590945092505050565b6001600160a01b0384165f90815260016020526040812054808203610e4d575f915050610856565b5f610ebc610e7f876020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250610b0f915050565b9050610ec781610def565b610ed081610dfb565b80515f90815b81811015610f2757610f0c8a858381518110610ef457610ef461187f565b60200260200101515f6114be9092919063ffffffff16565b15610f1f5782610f1b816118a7565b9350505b600101610ed6565b50838210610f3c576001945050505050610856565b505f98975050505050505050565b6001600160a01b0381161580610f6957506001600160a01b0381166001145b15610f9257604051637c84ecfb60e01b81526001600160a01b03831660048201526024016103f3565b6001600160a01b038281165f908152602086815260408083208785168452909152902054811690821614610fe457604051637c84ecfb60e01b81526001600160a01b03821660048201526024016103f3565b6001600160a01b039081165f908152602085815260408083209584168084528683528184208054968616855297835281842090845282529091208054939092166001600160a01b031993841617909155919091528154169055565b60605f6001600160a01b03841660011480159061106457506110628686866114be565b155b1561108d57604051637c84ecfb60e01b81526001600160a01b03851660048201526024016103f3565b825f036110ad5760405163f725081760e01b815260040160405180910390fd5b8267ffffffffffffffff8111156110c6576110c661179f565b6040519080825280602002602001820160405280156110ef578160200160208202803683370190505b506001600160a01b038086165f908152602089815260408083208a85168452909152812054929450911691505b6001600160a01b0382161580159061113e57506001600160a01b038216600114155b801561114957508381105b156111ad57818382815181106111615761116161187f565b6001600160a01b039283166020918202929092018101919091529281165f90815288845260408082208984168352909452929092205490911690806111a5816118a7565b91505061111c565b6001600160a01b0382166001148015906111c657505f81115b156111f257826111d7600183611999565b815181106111e7576111e761187f565b602002602001015191505b8083525094509492505050565b805160019060021161123257815160051b82016020830192505b8251602090930180519093109150808318820261121957505b919050565b5f604051855f5260ff851660205283604052826060526020604060805f60015afa505f6060523d6060185191508060405250949350505050565b601f19602082515f8452604051600282106112fe578285018260051b8601815b85810151815111828214176112a7578501611291565b8181036112b6575050506112fe565b50805b868101518151116112cb5786016112b9565b8281036112f2575b825182518452825291850191908601908183106112d3575050506112fe565b50908252838201526040015b6040515b80821461140b57604082039150815184830151610180828203116113765785820180518351106113355780518351825283525b5b860181811161136e578051888201805182811161135557505050611336565b5b818a0152890180518281116113565750880152611336565b505050611302565b81601f1681830160061c60051b018251825180821061139157905b825181811061139c57905b8083106113a557915b835283528352518190835b5b8801805182116113b157825b8a01805183106113bd579250828110156113de5780518351825283526113b0565b50508681018552818782011060061b85019450828552808786015282811160061b85019450505050611302565b50509092525050565b6002815110610df8576020810160408201600183510160051b83015b815183511461144457602083019250815183525b60208201915080820361143057505081900360051c9052565b5f805f19600186515f87870197505b81830160011c94508460051b89015187019050878114828411176114a65780881161149b57838501915061146c565b60018501925061146c565b84151597148716989290930190950295509350505050565b5f60016001600160a01b038316148015906108565750506001600160a01b039081165f9081526020938452604080822093831682529290935291205416151590565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6115406020830184611500565b9392505050565b5f8083601f840112611557575f80fd5b50813567ffffffffffffffff81111561156e575f80fd5b602083019150836020828501011115611585575f80fd5b9250929050565b5f806020838503121561159d575f80fd5b823567ffffffffffffffff8111156115b3575f80fd5b6115bf85828601611547565b90969095509350505050565b80356001600160a01b0381168114611232575f80fd5b5f602082840312156115f1575f80fd5b611540826115cb565b5f805f805f6060868803121561160e575f80fd5b85359450602086013567ffffffffffffffff8082111561162c575f80fd5b61163889838a01611547565b90965094506040880135915080821115611650575f80fd5b5061165d88828901611547565b969995985093965092949392505050565b5f6020828403121561167e575f80fd5b5035919050565b5f8060408385031215611696575f80fd5b823567ffffffffffffffff8111156116ac575f80fd5b830161012081860312156116be575f80fd5b946020939093013593505050565b5f805f80606085870312156116df575f80fd5b6116e8856115cb565b935060208501359250604085013567ffffffffffffffff81111561170a575f80fd5b61171687828801611547565b95989497509550505050565b5f8060408385031215611733575f80fd5b61173c836115cb565b915061174a602084016115cb565b90509250929050565b602080825282518282018190525f9190848201906040850190845b818110156117935783516001600160a01b03168352928401929184019160010161176e565b50909695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156117c4575f80fd5b8235915060208084013567ffffffffffffffff808211156117e3575f80fd5b818601915086601f8301126117f6575f80fd5b8135818111156118085761180861179f565b8060051b604051601f19603f8301168101818110858211171561182d5761182d61179f565b60405291825284820192508381018501918983111561184a575f80fd5b938501935b8285101561186f57611860856115cb565b8452938501939285019261184f565b8096505050505050509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016118b8576118b8611893565b5060010190565b5f808335601e198436030181126118d4575f80fd5b83018035915067ffffffffffffffff8211156118ee575f80fd5b602001915036819003821315611585575f80fd5b5f8161191057611910611893565b505f190190565b808202811582820484141761081d5761081d611893565b8082018082111561081d5761081d611893565b828152604060208201525f6108566040830184611500565b5f60208284031215611969575f80fd5b81516001600160e01b031981168114611540575f80fd5b60ff828116828216039081111561081d5761081d611893565b8181038181111561081d5761081d61189356fea2646970667358221220b82bc4d2f8213c159cea19836aa442c34ed4c7abc97ebbd8d454c3f36422e16564736f6c63430008190033" - -export const OWNABLE_EXECUTOR = "0x989110e958902f619148b8171fbDF1Dca0c5AE0B" -export const OWNABLE_EXECUTOR_BYTECODE = - "0x6080604052600436106100a5575f3560e01c8063d26cdce311610062578063d26cdce3146101b7578063d60b347f146101ca578063e5086003146101f9578063ecd059611461020c578063fbe5ce0a1461022c578063fd8b84b11461024b575f80fd5b806306fdde03146100a957806354fd4d50146100f25780636d61fe701461011f5780637065cb48146101405780638a91b0e31461015f578063ccfdec8c1461017e575b5f80fd5b3480156100b4575f80fd5b5060408051808201909152600f81526e27bbb730b13632a2bc32b1baba37b960891b60208201525b6040516100e99190610b67565b60405180910390f35b3480156100fd575f80fd5b506040805180820190915260058152640312e302e360dc1b60208201526100dc565b34801561012a575f80fd5b5061013e610139366004610be1565b610277565b005b34801561014b575f80fd5b5061013e61015a366004610c3b565b61036a565b34801561016a575f80fd5b5061013e610179366004610be1565b61045c565b348015610189575f80fd5b506101a9610198366004610c3b565b60016020525f908152604090205481565b6040519081526020016100e9565b61013e6101c5366004610c54565b6104ae565b3480156101d5575f80fd5b506101e96101e4366004610c3b565b61056d565b60405190151581526020016100e9565b61013e610207366004610c54565b61059c565b348015610217575f80fd5b506101e9610226366004610ca3565b60021490565b348015610237575f80fd5b5061013e610246366004610cba565b6105f2565b348015610256575f80fd5b5061026a610265366004610c3b565b610665565b6040516100e99190610ceb565b335f6102866014828587610d37565b61028f91610d5e565b60601c9050806102c25760405163b20f76e360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b0382165f9081526020819052604090206102e29061069b565b6001600160a01b0382165f90815260208190526040902061030390826106f6565b6001600160a01b0382165f8181526001602081905260409182902055517f1cd4a6da6e6a6f4dc754cedd54ead3b9cd0e2f5804cda2ba60506c2899fb29df9061035c9084906001600160a01b0391909116815260200190565b60405180910390a250505050565b336103748161056d565b61039c5760405163f91bd6f160e01b81526001600160a01b03821660048201526024016102b9565b6001600160a01b0382166103ce5760405163b20f76e360e01b81526001600160a01b03831660048201526024016102b9565b6001600160a01b0381165f9081526020819052604090206103ef90836106f6565b6001600160a01b0381165f90815260016020526040812080549161041283610da7565b90915550506040516001600160a01b0383811682528216907fc82bdbbf677a2462f2a7e22e4ba9abd209496b69cd7b868b3b1d28f76e09a40a906020015b60405180910390a25050565b335f908152602081905260409020610473906107ca565b335f81815260016020526040808220829055517f9d00629762554452d03c3b45626436df6ca1c3795d05d04df882f6db481b1be09190a25050565b6001600160a01b0383165f9081526020819052604090206104cf9033610825565b6104ec57604051631a27eac360e11b815260040160405180910390fd5b826001600160a01b031663d691c9643461050461085f565b85856040518563ffffffff1660e01b815260040161052493929190610dbf565b5f6040518083038185885af115801561053f573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526105679190810190610e39565b50505050565b6001600160a01b038181165f908152602081815260408083206001845290915281205490911615155b92915050565b6001600160a01b0383165f9081526020819052604090206105bd9033610825565b6105da57604051631a27eac360e11b815260040160405180910390fd5b826001600160a01b031663d691c96434610504610871565b335f90815260208190526040902061060b908383610882565b335f90815260016020526040812080549161062583610f47565b90915550506040516001600160a01b038216815233907fe594d081b4382713733fe631966432c9cea5199afb2db5c3c1931f9f9300367990602001610450565b6001600160a01b0381165f90815260016020818152604080842054918490529092206060926106949290610955565b5092915050565b60015f908152602082905260409020546001600160a01b0316156106d2576040516329e42f3360e11b815260040160405180910390fd5b60015f818152602092909252604090912080546001600160a01b0319169091179055565b6001600160a01b038116158061071557506001600160a01b0381166001145b1561073e57604051637c84ecfb60e01b81526001600160a01b03821660048201526024016102b9565b6001600160a01b038181165f90815260208490526040902054161561078157604051631034f46960e21b81526001600160a01b03821660048201526024016102b9565b60015f818152602093909352604080842080546001600160a01b039485168087529286208054959091166001600160a01b03199586161790559190935280549091169091179055565b60015f908152602082905260409020546001600160a01b03165b6001600160a01b03811615610821576001600160a01b039081165f90815260208390526040902080546001600160a01b03198116909155166107e4565b5050565b5f60016001600160a01b0383161480159061085857506001600160a01b038281165f908152602085905260409020541615155b9392505050565b5f61086c81808080610afd565b905090565b5f61086c600160f81b828080610afd565b6001600160a01b03811615806108a157506001600160a01b0381166001145b156108ca57604051637c84ecfb60e01b81526001600160a01b03831660048201526024016102b9565b6001600160a01b038281165f9081526020859052604090205481169082161461091157604051637c84ecfb60e01b81526001600160a01b03821660048201526024016102b9565b6001600160a01b039081165f8181526020949094526040808520805494841686529085208054949093166001600160a01b0319948516179092559092528154169055565b60605f6001600160a01b03841660011480159061097957506109778585610825565b155b156109a257604051637c84ecfb60e01b81526001600160a01b03851660048201526024016102b9565b825f036109c25760405163f725081760e01b815260040160405180910390fd5b8267ffffffffffffffff8111156109db576109db610df4565b604051908082528060200260200182016040528015610a04578160200160208202803683370190505b506001600160a01b038086165f90815260208890526040812054929450911691505b6001600160a01b03821615801590610a4857506001600160a01b038216600114155b8015610a5357508381105b15610aac5781838281518110610a6b57610a6b610f5c565b6001600160a01b039283166020918202929092018101919091529281165f908152928790526040909220549091169080610aa481610da7565b915050610a26565b6001600160a01b038216600114801590610ac557505f81115b15610af15782610ad6600183610f70565b81518110610ae657610ae6610f5c565b602002602001015191505b80835250935093915050565b604080516001600160f81b03198087166020830152851660218201525f602282018190526001600160e01b03198516602683015269ffffffffffffffffffff198416602a8301529101604051602081830303815290604052610b5e90610f83565b95945050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8083601f840112610bac575f80fd5b50813567ffffffffffffffff811115610bc3575f80fd5b602083019150836020828501011115610bda575f80fd5b9250929050565b5f8060208385031215610bf2575f80fd5b823567ffffffffffffffff811115610c08575f80fd5b610c1485828601610b9c565b90969095509350505050565b80356001600160a01b0381168114610c36575f80fd5b919050565b5f60208284031215610c4b575f80fd5b61085882610c20565b5f805f60408486031215610c66575f80fd5b610c6f84610c20565b9250602084013567ffffffffffffffff811115610c8a575f80fd5b610c9686828701610b9c565b9497909650939450505050565b5f60208284031215610cb3575f80fd5b5035919050565b5f8060408385031215610ccb575f80fd5b610cd483610c20565b9150610ce260208401610c20565b90509250929050565b602080825282518282018190525f9190848201906040850190845b81811015610d2b5783516001600160a01b031683529284019291840191600101610d06565b50909695505050505050565b5f8085851115610d45575f80fd5b83861115610d51575f80fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610d8b5780818660140360031b1b83161692505b505092915050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610db857610db8610d93565b5060010190565b83815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f1916010192915050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e3157610e31610df4565b604052919050565b5f6020808385031215610e4a575f80fd5b825167ffffffffffffffff80821115610e61575f80fd5b8185019150601f86601f840112610e76575f80fd5b825182811115610e8857610e88610df4565b8060051b610e97868201610e08565b918252848101860191868101908a841115610eb0575f80fd5b87870192505b83831015610f3957825186811115610ecc575f80fd5b8701603f81018c13610edc575f80fd5b88810151604088821115610ef257610ef2610df4565b610f03828901601f19168c01610e08565b8281528e82848601011115610f16575f80fd5b828285018d83015e5f9281018c0192909252508352509187019190870190610eb6565b9a9950505050505050505050565b5f81610f5557610f55610d93565b505f190190565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561059657610596610d93565b80516020808301519190811015610fa3575f198160200360031b1b821691505b5091905056fea2646970667358221220b4818563abaaf2d7c9426aa3c80814b09784cce89922dfe0c778fbe635c46e0a64736f6c63430008190033" diff --git a/tests/src/testUtils.ts b/tests/src/testUtils.ts index 140bc473b..054233dc6 100644 --- a/tests/src/testUtils.ts +++ b/tests/src/testUtils.ts @@ -8,8 +8,6 @@ import { type Chain, type Hex, type PrivateKeyAccount, - type PublicClient, - type WalletClient, createPublicClient, createTestClient, createWalletClient, @@ -32,12 +30,8 @@ import { createBundler } from "../../src/bundler" import { ENTRY_POINT_SIMULATIONS_CREATECALL, ENTRY_POINT_V07_CREATECALL, - OWNABLE_EXECUTOR, - OWNABLE_EXECUTOR_BYTECODE, - OWNABLE_VALIDATOR, - OWNABLE_VALIDATOR_BYTECODE + TEST_CONTRACTS } from "./callDatas" - import { clean, deploy, init } from "./executables" config() @@ -451,16 +445,40 @@ const deployContracts = async (rpcPort: number): Promise<void> => { testClient.waitForTransactionReceipt({ hash: entrypointHash }) ]) - await testClient.setCode({ - bytecode: OWNABLE_EXECUTOR_BYTECODE, - address: OWNABLE_EXECUTOR - }) - - await testClient.setCode({ - bytecode: OWNABLE_VALIDATOR_BYTECODE, - address: OWNABLE_VALIDATOR - }) + await byteCodeDeployer(testClient, TEST_CONTRACTS) } export const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)) + +export type DeployerParams = { + name?: string + chainId: number + address: Address +} +export const byteCodeDeployer = async ( + testClient: MasterClient, + deployParams: Record<string, DeployerParams> +) => { + const deployParamsArray = Object.values(deployParams) + + const bytecodes = (await Promise.all( + deployParamsArray.map(({ chainId, address }) => { + const fetchChain = getChain(chainId) + const publicClient = createPublicClient({ + chain: fetchChain, + transport: http() + }) + return publicClient.getBytecode({ address }) + }) + )) as Hex[] + + await Promise.all( + deployParamsArray.map(({ address }, index) => + testClient.setCode({ + bytecode: bytecodes[index], + address + }) + ) + ) +} diff --git a/tsconfig/tsconfig.json b/tsconfig/tsconfig.json index 2c9c1e634..d820773c9 100644 --- a/tsconfig/tsconfig.json +++ b/tsconfig/tsconfig.json @@ -6,7 +6,8 @@ "exclude": [ "../src/**/*.test.ts", "../src/**/*.test-d.ts", - "../src/**/*.bench.ts" + "../src/**/*.bench.ts", + "../tests/**/*.*" ], "compilerOptions": { "moduleResolution": "node", From 1a85cb678335c4975b42245536c1966c5da95acf Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Tue, 3 Sep 2024 16:34:51 +0100 Subject: [PATCH 1240/1247] chore: add paymaster (#566) --- .env.example | 3 +- .size-limit.json | 2 +- src/account/NexusSmartAccount.ts | 52 +++++++++++++----- src/account/utils/Types.ts | 3 +- .../{BiconomyPaymaster.ts => Paymaster.ts} | 49 +++++++++-------- src/paymaster/index.ts | 5 +- src/paymaster/utils/Types.ts | 9 +-- tests/playground.test.ts | 55 +++++++++++++------ tests/src/README.md | 1 + tests/src/testSetup.ts | 4 ++ tests/src/testUtils.ts | 4 ++ 11 files changed, 119 insertions(+), 68 deletions(-) rename src/paymaster/{BiconomyPaymaster.ts => Paymaster.ts} (94%) diff --git a/.env.example b/.env.example index 61167deb8..ae99fef60 100644 --- a/.env.example +++ b/.env.example @@ -3,4 +3,5 @@ CHAIN_ID=84532 RPC_URL= BUNDLER_URL= BICONOMY_SDK_DEBUG=false -RUN_PLAYGROUND=false \ No newline at end of file +RUN_PLAYGROUND=false +PAYMASTER_URL= \ No newline at end of file diff --git a/.size-limit.json b/.size-limit.json index 254ab1c67..c261c3368 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -30,7 +30,7 @@ "name": "paymaster (tree-shaking)", "path": "./dist/_esm/paymaster/index.js", "limit": "15 kB", - "import": "{ createPaymaster }", + "import": "{ toPaymaster }", "ignore": ["node:fs", "fs"] } ] diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index 5798385f5..eb6c520f3 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -50,7 +50,6 @@ import { type IHybridPaymaster, type IPaymaster, Paymaster, - PaymasterMode, type SponsorUserOperationDto } from "../paymaster/index.js" import { @@ -152,10 +151,6 @@ export class NexusSmartAccount extends BaseSmartContractAccount { this.paymaster = new Paymaster({ paymasterUrl: nexusSmartAccountConfig.paymasterUrl }) - } else if (nexusSmartAccountConfig.biconomyPaymasterApiKey) { - this.paymaster = new Paymaster({ - paymasterUrl: `https://paymaster.biconomy.io/api/v1/${nexusSmartAccountConfig.chain.id}/${nexusSmartAccountConfig.biconomyPaymasterApiKey}` - }) } else { this.paymaster = nexusSmartAccountConfig.paymaster } @@ -328,7 +323,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * * const amountInWei = await smartAccount.getGasEstimates([tx, tx], { * paymasterServiceData: { - * mode: PaymasterMode.SPONSORED, + * mode: "SPONSORED", * }, * }); * @@ -495,14 +490,14 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * ], * account.address, // Default recipient used if no recipient is present in the withdrawal request * { - * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + * paymasterServiceData: { mode: "SPONSORED" }, * } * ); * * // OR to withdraw all of the native token, leaving no dust in the smart account * * const { wait } = await smartAccount.withdraw([], account.address, { - * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + * paymasterServiceData: { mode: "SPONSORED" }, * }); * * const { success } = await wait(); @@ -906,13 +901,13 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * data: encodedCall * } * - * const feeQuotesResponse: FeeQuotesOrDataResponse = await smartAccount.getTokenFees(transaction, { paymasterServiceData: { mode: PaymasterMode.ERC20 } }); + * const feeQuotesResponse: FeeQuotesOrDataResponse = await smartAccount.getTokenFees(transaction, { paymasterServiceData: { mode: "ERC20" } }); * * const userSeletedFeeQuote = feeQuotesResponse.feeQuotes?.[0]; * * const { wait } = await smartAccount.sendTransaction(transaction, { * paymasterServiceData: { - * mode: PaymasterMode.ERC20, + * mode: "ERC20", * feeQuote: userSeletedFeeQuote, * spender: feeQuotesResponse.tokenPaymasterAddress, * }, @@ -976,7 +971,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { to: await this.getAddress() }, { - paymasterServiceData: { mode: PaymasterMode.ERC20 } + paymasterServiceData: { mode: "ERC20" } } ) @@ -1209,7 +1204,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { bundlerUrl: `https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44`, chainId: 84532 }); - const response = await smartAccount.transferOwnership(newOwner, DEFAULT_ECDSA_OWNERSHIP_MODULE, {paymasterServiceData: {mode: PaymasterMode.SPONSORED}}); + const response = await smartAccount.transferOwnership(newOwner, DEFAULT_ECDSA_OWNERSHIP_MODULE, {paymasterServiceData: {mode: "SPONSORED"}}); walletClient = createWalletClient({ newOwnerAccount, @@ -1438,9 +1433,40 @@ export class NexusSmartAccount extends BaseSmartContractAccount { userOp = await this.estimateUserOpGas(userOp) + if (buildUseropDto?.paymasterServiceData?.mode === "SPONSORED") { + userOp = await this.getPaymasterAndData( + userOp, + buildUseropDto?.paymasterServiceData + ) + } + return userOp } + private async getPaymasterAndData( + userOp: Partial<UserOperationStruct>, + paymasterServiceData: PaymasterUserOperationDto + ): Promise<UserOperationStruct> { + const paymaster = this + .paymaster as IHybridPaymaster<PaymasterUserOperationDto> + const paymasterData = await paymaster.getPaymasterAndData( + userOp, + paymasterServiceData + ) + const userOpStruct = { + ...userOp, + ...paymasterData, + callGasLimit: BigInt(userOp.callGasLimit ?? 0n), + verificationGasLimit: BigInt(userOp.verificationGasLimit ?? 0n), + preVerificationGas: BigInt(userOp.preVerificationGas ?? 0n), + sender: (await this.getAddress()) as Hex, + paymasterAndData: undefined + // paymasterAndData: paymasterData?.paymasterAndData as Hex + } as UserOperationStruct + + return userOpStruct + } + private validateUserOpAndPaymasterRequest( userOp: Partial<UserOperationStruct>, tokenPaymasterRequest: BiconomyTokenPaymasterRequest @@ -1612,7 +1638,7 @@ export class NexusSmartAccount extends BaseSmartContractAccount { * * // If you want to use a paymaster... * const { wait } = await smartAccount.deploy({ - * paymasterServiceData: { mode: PaymasterMode.SPONSORED }, + * paymasterServiceData: { mode: "SPONSORED" }, * }); * * // Or if you can't use a paymaster send native token to this address: diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 725eb7ec6..2474d1f3e 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -18,7 +18,6 @@ import type { FeeQuotesOrDataDto, IPaymaster, PaymasterFeeQuote, - PaymasterMode, SmartAccountData, SponsorUserOperationDto } from "../../paymaster" @@ -256,7 +255,7 @@ export type InitilizationData = { export type PaymasterUserOperationDto = SponsorUserOperationDto & FeeQuotesOrDataDto & { /** mode: sponsored or erc20 */ - mode: PaymasterMode + mode: "SPONSORED" | "ERC20" /** Always recommended, especially when using token paymaster */ calculateGasLimits?: boolean /** Expiry duration in seconds */ diff --git a/src/paymaster/BiconomyPaymaster.ts b/src/paymaster/Paymaster.ts similarity index 94% rename from src/paymaster/BiconomyPaymaster.ts rename to src/paymaster/Paymaster.ts index 042c7ba50..f833ceee3 100644 --- a/src/paymaster/BiconomyPaymaster.ts +++ b/src/paymaster/Paymaster.ts @@ -6,20 +6,20 @@ import { type Transaction, type UserOperationStruct, sendRequest -} from "../account" +} from "../account/index.js" +import { deepHexlify } from "../bundler/index.js" import type { IHybridPaymaster } from "./interfaces/IHybridPaymaster.js" import { ADDRESS_ZERO, ERC20_ABI, MAX_UINT256 } from "./utils/Constants.js" import { getTimestampInSeconds } from "./utils/Helpers.js" -import { - type FeeQuotesOrDataDto, - type FeeQuotesOrDataResponse, - type Hex, - type JsonRpcResponse, - type PaymasterAndDataResponse, - type PaymasterConfig, - type PaymasterFeeQuote, - PaymasterMode, - type SponsorUserOperationDto +import type { + FeeQuotesOrDataDto, + FeeQuotesOrDataResponse, + Hex, + JsonRpcResponse, + PaymasterAndDataResponse, + PaymasterConfig, + PaymasterFeeQuote, + SponsorUserOperationDto } from "./utils/Types.js" const defaultPaymasterConfig: PaymasterConfig = { @@ -29,9 +29,7 @@ const defaultPaymasterConfig: PaymasterConfig = { /** * @dev Hybrid - Generic Gas Abstraction paymaster */ -export class BiconomyPaymaster - implements IHybridPaymaster<SponsorUserOperationDto> -{ +export class Paymaster implements IHybridPaymaster<SponsorUserOperationDto> { paymasterConfig: PaymasterConfig constructor(config: PaymasterConfig) { @@ -163,7 +161,7 @@ export class BiconomyPaymaster ): Promise<FeeQuotesOrDataResponse> { // const userOp = await this.prepareUserOperation(_userOp) - let mode: PaymasterMode | null = null + let mode: "SPONSORED" | "ERC20" | null = null let expiryDuration: number | null = null const calculateGasLimits = paymasterServiceData.calculateGasLimits ?? true let preferredToken: string | null = null @@ -230,7 +228,7 @@ export class BiconomyPaymaster ) if (response?.result) { - if (response.result.mode === PaymasterMode.ERC20) { + if (response.result.mode === "ERC20") { const feeQuotesResponse: Array<PaymasterFeeQuote> = response.result.feeQuotes const paymasterAddress: Hex = response.result.paymasterAddress @@ -240,7 +238,7 @@ export class BiconomyPaymaster tokenPaymasterAddress: paymasterAddress } } - if (response.result.mode === PaymasterMode.SPONSORED) { + if (response.result.mode === "SPONSORED") { const paymasterAndData: Hex = response.result.paymasterAndData const preVerificationGas = response.result.preVerificationGas const verificationGasLimit = response.result.verificationGasLimit @@ -267,7 +265,7 @@ export class BiconomyPaymaster // Note: we may not throw if we include strictMode off and return paymasterData '0x'. if ( !this.paymasterConfig.strictMode && - paymasterServiceData.mode === PaymasterMode.SPONSORED && + paymasterServiceData.mode === "SPONSORED" && (error?.message.includes("Smart contract data not found") || error?.message.includes("No policies were set")) // can also check based on error.code being -32xxx @@ -317,7 +315,7 @@ export class BiconomyPaymaster let webhookData: Record<string, any> | null = null let expiryDuration: number | null = null - if (mode === PaymasterMode.ERC20) { + if (mode === "ERC20") { if ( !paymasterServiceData?.feeTokenAddress && paymasterServiceData?.feeTokenAddress === ADDRESS_ZERO @@ -336,6 +334,8 @@ export class BiconomyPaymaster // Note: The idea is before calling this below rpc, userOp values presense and types should be in accordance with how we call eth_estimateUseropGas on the bundler + const hexlifiedUserOp = deepHexlify(userOp) + try { const response: JsonRpcResponse = await sendRequest( { @@ -344,7 +344,7 @@ export class BiconomyPaymaster body: { method: "pm_sponsorUserOperation", params: [ - userOp, + hexlifiedUserOp, { mode: mode, calculateGasLimits: calculateGasLimits, @@ -401,9 +401,10 @@ export class BiconomyPaymaster return "0x" } - public static async create( - config: PaymasterConfig - ): Promise<BiconomyPaymaster> { - return new BiconomyPaymaster(config) + public static async create(config: PaymasterConfig): Promise<Paymaster> { + return new Paymaster(config) } } + +export const toPaymaster = Paymaster.create +export default toPaymaster diff --git a/src/paymaster/index.ts b/src/paymaster/index.ts index 2cebd53f5..70cbb99d8 100644 --- a/src/paymaster/index.ts +++ b/src/paymaster/index.ts @@ -1,8 +1,7 @@ -import { BiconomyPaymaster } from "./BiconomyPaymaster.js" +import { Paymaster } from "./Paymaster.js" export * from "./interfaces/IPaymaster.js" export * from "./interfaces/IHybridPaymaster.js" export * from "./utils/Types.js" -export * from "./BiconomyPaymaster.js" +export * from "./Paymaster.js" -export const Paymaster = BiconomyPaymaster export const createPaymaster = Paymaster.create diff --git a/src/paymaster/utils/Types.ts b/src/paymaster/utils/Types.ts index 1d19d4773..25326220f 100644 --- a/src/paymaster/utils/Types.ts +++ b/src/paymaster/utils/Types.ts @@ -23,7 +23,7 @@ export type PaymasterConfig = { export type SponsorUserOperationDto = { /** mode: sponsored or erc20 */ - mode: PaymasterMode + mode: "SPONSORED" | "ERC20" /** Always recommended, especially when using token paymaster */ calculateGasLimits?: boolean /** Expiry duration in seconds */ @@ -38,7 +38,7 @@ export type SponsorUserOperationDto = { export type FeeQuotesOrDataDto = { /** mode: sponsored or erc20 */ - mode?: PaymasterMode + mode?: "SPONSORED" | "ERC20" /** Expiry duration in seconds */ expiryDuration?: number /** Always recommended, especially when using token paymaster */ @@ -121,8 +121,3 @@ export type PaymasterAndDataResponse = { /* Value used by inner account execution */ callGasLimit: number } - -export enum PaymasterMode { - ERC20 = "ERC20", - SPONSORED = "SPONSORED" -} diff --git a/tests/playground.test.ts b/tests/playground.test.ts index bbfd7db50..1a689c397 100644 --- a/tests/playground.test.ts +++ b/tests/playground.test.ts @@ -1,8 +1,5 @@ -import { config } from "dotenv" import { http, - Account, - type Address, type Chain, type Hex, type PrivateKeyAccount, @@ -11,28 +8,17 @@ import { createPublicClient, createWalletClient } from "viem" -import { privateKeyToAccount } from "viem/accounts" -import { beforeAll, describe, expect, test } from "vitest" +import { beforeAll, expect, test } from "vitest" import { type NexusSmartAccount, - createSmartAccountClient, - getChain, - getCustomChain + createSmartAccountClient } from "../src/account" -import { createK1ValidatorModule } from "../src/modules" import { type TestFileNetworkType, describeWithPlaygroundGuard, toNetwork } from "./src/testSetup" -import { - type MasterClient, - type NetworkConfig, - getBundlerUrl, - getTestAccount, - toTestClient, - topUp -} from "./src/testUtils" +import type { NetworkConfig } from "./src/testUtils" const NETWORK_TYPE: TestFileNetworkType = "PUBLIC_TESTNET" @@ -46,6 +32,7 @@ describeWithPlaygroundGuard("playground", () => { // Nexus Config let chain: Chain let bundlerUrl: string + let paymasterUrl: undefined | string let walletClient: WalletClient // Test utils @@ -59,6 +46,7 @@ describeWithPlaygroundGuard("playground", () => { chain = network.chain bundlerUrl = network.bundlerUrl + paymasterUrl = network.paymasterUrl account = network.account as PrivateKeyAccount walletClient = createWalletClient({ @@ -165,4 +153,37 @@ describeWithPlaygroundGuard("playground", () => { expect(balanceAfter - balanceBefore).toBe(1n) }) + + test("should send a userOp using pm_sponsorUserOperation", async () => { + if (!paymasterUrl) { + console.log("No paymaster url provided") + return + } + + const smartAccount = await createSmartAccountClient({ + signer: walletClient, + chain, + paymasterUrl, + bundlerUrl, + // Remove the following lines to use the default factory and validator addresses + // These are relevant only for now on sopelia chain and are likely to change + k1ValidatorAddress, + factoryAddress + }) + + expect(async () => + smartAccount.sendTransaction( + { + to: account.address, + data: "0x", + value: 1n + }, + { + paymasterServiceData: { + mode: "SPONSORED" + } + } + ) + ).rejects.toThrow("Error in generating paymasterAndData") + }) }) diff --git a/tests/src/README.md b/tests/src/README.md index 128f91fd6..b20eefe38 100644 --- a/tests/src/README.md +++ b/tests/src/README.md @@ -84,6 +84,7 @@ testnetTest("should be used in the following way", async({ config: { bundlerUrl, - CHAIN_ID - RPC_URL (optional, inferred if unset) - BUNDLER_URL (optional, inferred if unset) + - PAYMASTER_URL (tests skipped if unset) ## Debugging and Client Issues It is recommended to use the playground for debugging issues with clients. Please refer to the following guidelines for escalation and handover: [Debugging Client Issues](https://www.notion.so/biconomy/Debugging-Client-Issues-cc01c1cab0224c87b37a4d283370165b) diff --git a/tests/src/testSetup.ts b/tests/src/testSetup.ts index e4f0e13c6..53505827e 100644 --- a/tests/src/testSetup.ts +++ b/tests/src/testSetup.ts @@ -57,3 +57,7 @@ export const toNetwork = async ( export const describeWithPlaygroundGuard = process.env.RUN_PLAYGROUND === "true" ? describe : describe.skip + +export const describeWithPaymasterGuard = process.env.PAYMASTER_URL + ? describe + : describe.skip diff --git a/tests/src/testUtils.ts b/tests/src/testUtils.ts index 054233dc6..c2e4fcf5d 100644 --- a/tests/src/testUtils.ts +++ b/tests/src/testUtils.ts @@ -55,6 +55,7 @@ export type NetworkConfig = Omit< "instance" | "bundlerInstance" > & { account?: PrivateKeyAccount + paymasterUrl?: string } export const pKey = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" // This is a publicly available private key meant only for testing only @@ -91,11 +92,13 @@ export const initTestnetNetwork = async (): Promise<NetworkConfig> => { const chainId = process.env.CHAIN_ID const rpcUrl = process.env.RPC_URL //Optional, taken from chain (using chainId) if not provided const _bundlerUrl = process.env.BUNDLER_URL // Optional, taken from chain (using chainId) if not provided + const paymasterUrl = process.env.PAYMASTER_URL // Optional let chain: Chain if (!privateKey) throw new Error("Missing env var E2E_PRIVATE_KEY_ONE") if (!chainId) throw new Error("Missing env var CHAIN_ID") + if (!paymasterUrl) console.log("Missing env var PAYMASTER_URL") try { chain = getChain(+chainId) @@ -110,6 +113,7 @@ export const initTestnetNetwork = async (): Promise<NetworkConfig> => { rpcPort: 0, chain, bundlerUrl, + paymasterUrl, bundlerPort: 0, account: privateKeyToAccount( privateKey?.startsWith("0x") ? (privateKey as Hex) : `0x${privateKey}` From 7cb4ff8a26376f8d7adcfa9fdc5372728e8aaccf Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Tue, 3 Sep 2024 16:51:38 +0100 Subject: [PATCH 1241/1247] chore: fix nexus import (#567) --- .../actions/install-dependencies/action.yml | 4 ---- .size-limit.json | 11 ++--------- bun.lockb | Bin 352526 -> 352626 bytes package.json | 2 +- tests/src/executables.ts | 3 ++- tests/src/testUtils.ts | 5 +++++ 6 files changed, 10 insertions(+), 15 deletions(-) diff --git a/.github/actions/install-dependencies/action.yml b/.github/actions/install-dependencies/action.yml index 588961205..85ebbac6e 100644 --- a/.github/actions/install-dependencies/action.yml +++ b/.github/actions/install-dependencies/action.yml @@ -10,10 +10,6 @@ runs: - name: Set up foundry uses: foundry-rs/foundry-toolchain@v1 - - name: Installs with yarn - shell: bash - run: yarn install - - name: Install dependencies shell: bash run: | diff --git a/.size-limit.json b/.size-limit.json index c261c3368..35bf1e815 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -2,21 +2,14 @@ { "name": "core (esm)", "path": "./dist/_esm/index.js", - "limit": "180 kB", + "limit": "25 kB", "import": "*", "ignore": ["node:fs", "fs"] }, { "name": "core (cjs)", "path": "./dist/_cjs/index.js", - "limit": "180 kB", - "ignore": ["node:fs", "fs"] - }, - { - "name": "account (tree-shaking)", - "path": "./dist/_esm/index.js", - "limit": "180 kB", - "import": "{ createSmartAccountClient }", + "limit": "25 kB", "ignore": ["node:fs", "fs"] }, { diff --git a/bun.lockb b/bun.lockb index 3b66649cb71dcd1fe68551fa39b10f370cad36c5..f13bf97af633eafe847c7d91826756e9d8973153 100755 GIT binary patch delta 33976 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 Sg|V5RS-kQeEwp%U`F{Ww{-{>~ delta 33884 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 diff --git a/package.json b/package.json index c9015e4ae..d3490ba61 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "execa": "^9.3.1", "get-port": "^7.1.0", "gh-pages": "^6.1.1", - "nexus": "github:bcnmy/nexus#dev", + "nexus": "git@github.com:bcnmy/nexus.git#b8085a3d688afb9149c129a34b4bb9cefb93ae38", "prool": "^0.0.16", "rimraf": "^5.0.5", "simple-git-hooks": "^2.9.0", diff --git a/tests/src/executables.ts b/tests/src/executables.ts index 40d5fdff0..aae062216 100644 --- a/tests/src/executables.ts +++ b/tests/src/executables.ts @@ -2,7 +2,8 @@ import { execa } from "execa" const cwd = "./node_modules/nexus" -export const init = async () => await execa({ cwd })`yarn install` +export const init = async () => + await execa({ cwd })`yarn install --frozen-lockfile` export const cleanOne = async (rpcPort: number) => await execa({ cwd })`rm -rf ./deployments/anvil-${rpcPort}` diff --git a/tests/src/testUtils.ts b/tests/src/testUtils.ts index c2e4fcf5d..4463d4c7d 100644 --- a/tests/src/testUtils.ts +++ b/tests/src/testUtils.ts @@ -202,10 +202,15 @@ export const toConfiguredAnvil = async ({ // forkUrl: "https://base-sepolia.gateway.tenderly.co/2oxlNZ7oiNCUpXzrWFuIHx" }) await instance.start() + console.log("") + console.log(`configuring module bytecode on http://localhost:${rpcPort}`) await deployContracts(rpcPort) await init() await clean() + console.log(`deploying nexus contracts to http://localhost:${rpcPort}`) await deploy(rpcPort) + console.log("deployment complete") + console.log("") return instance } From 0175646f776fab382700da5214e4f9af9720e444 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Fri, 6 Sep 2024 12:42:54 +0100 Subject: [PATCH 1242/1247] chore: fix gas estimate endpoint --- src/bundler/Bundler.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts index 0d312652b..bce6491bc 100644 --- a/src/bundler/Bundler.ts +++ b/src/bundler/Bundler.ts @@ -334,7 +334,9 @@ export class Bundler implements IBundler { url: bundlerUrl, method: HttpMethod.Post, body: { - method: "pimlico_getUserOperationGasPrice", + method: process.env.BUNDLER_URL?.includes("pimlico") + ? "pimlico_getUserOperationGasPrice" + : "biconomy_getGasFeeValues", params: [], id: getTimestampInSeconds(), jsonrpc: "2.0" From ce0b0257f7f8791d4c932982fd58606b1b55f411 Mon Sep 17 00:00:00 2001 From: Joe Pegler <joepegler123@gmail.com> Date: Fri, 6 Sep 2024 14:07:16 +0100 Subject: [PATCH 1243/1247] chore: return script --- scripts/send:userOp.ts | 87 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 scripts/send:userOp.ts diff --git a/scripts/send:userOp.ts b/scripts/send:userOp.ts new file mode 100644 index 000000000..badbbfdd9 --- /dev/null +++ b/scripts/send:userOp.ts @@ -0,0 +1,87 @@ +import { http, createWalletClient, parseEther } from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { + createK1ValidatorModule, + createSmartAccountClient, + getChain +} from "../src" + +const k1ValidatorAddress = "0x663E709f60477f07885230E213b8149a7027239B" +const factoryAddress = "0x887Ca6FaFD62737D0E79A2b8Da41f0B15A864778" + +export const getEnvVars = () => { + return { + bundlerUrl: process.env.BUNDLER_URL || "", + privateKey: process.env.E2E_PRIVATE_KEY_ONE || "", + privateKeyTwo: process.env.E2E_PRIVATE_KEY_TWO || "", + paymasterUrl: process.env.PAYMASTER_URL || "", + chainId: process.env.CHAIN_ID || "0" + } +} + +export const getConfig = () => { + const { + paymasterUrl, + bundlerUrl, + chainId: chainIdFromEnv, + privateKey, + privateKeyTwo + } = getEnvVars() + + const chains = [Number.parseInt(chainIdFromEnv)] + const chainId = chains[0] + const chain = getChain(chainId) + + return { + chain, + chainId, + paymasterUrl, + bundlerUrl, + privateKey, + privateKeyTwo + } +} + +const { chain, privateKey, privateKeyTwo, bundlerUrl } = getConfig() + +if ([chain, privateKey, privateKeyTwo, bundlerUrl].every(Boolean) !== true) + throw new Error("Missing env vars") + +const account = privateKeyToAccount(`0x${privateKey}`) +const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) +const recipient = accountTwo.address + +const [walletClient] = [ + createWalletClient({ + account, + chain, + transport: http() + }) +] + +const smartAccount = await createSmartAccountClient({ + chain, + signer: walletClient, + bundlerUrl, + k1ValidatorAddress, + factoryAddress +}) + +const sendUserOperation = async () => { + const transaction = { + to: recipient, // NFT address + data: "0x", + value: parseEther("0.0001") + } + console.log( + "Your smart account will be deployed at address, make sure it has some funds to pay for user ops: ", + await smartAccount.getAddress() + ) + + const response = await smartAccount.sendTransaction([transaction]) + + const receipt = await response.wait() + console.log("Receipt: ", receipt) +} + +sendUserOperation() From 08365dabe7c49ecde24bf4016d90e00aa5fb6017 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:08:10 +0300 Subject: [PATCH 1244/1247] signTypedData implementation + tests + nexus contracts update (#573) * feat: eip 712 (draft) * feat: added signTypedData for Nexus (draft) * feat: signTypedData + tests on baseSepolia testnet * refactor: fix build errors * feat: updated to latest nexus contracts * fix tests --------- Co-authored-by: VGabriel45 <vgabrielmarian21@gmai.com> Co-authored-by: livingrockrises <90545960+livingrockrises@users.noreply.github.com> --- bun.lockb | Bin 352626 -> 352659 bytes package.json | 4 +- scripts/fetch:deployment.ts | 2 +- src/__contracts/abi/EIP1271Abi.ts | 31 + src/__contracts/abi/K1ValidatorAbi.ts | 76 +++ src/__contracts/abi/NexusAbi.ts | 67 +- src/__contracts/addresses.ts | 6 +- src/account/BaseSmartContractAccount.ts | 11 +- src/account/NexusSmartAccount.ts | 90 ++- src/account/utils/Constants.ts | 6 + src/account/utils/Types.ts | 23 +- src/account/utils/Utils.ts | 127 +++- tests/account.read.test.ts | 631 ++++++++---------- tests/account.write.test.ts | 2 +- tests/modules.k1Validator.write.test.ts | 2 +- tests/modules.ownableExecutor.read.test.ts | 2 +- tests/modules.ownableExecutor.write.test.ts | 2 +- ...les.ownableValidator.install.write.test.ts | 2 +- ...s.ownableValidator.uninstall.write.test.ts | 2 +- tests/smart.sessions.test.ts | 2 +- tests/src/__contracts/abi/MockHookAbi.ts | 6 +- tests/src/__contracts/abi/MockValidatorAbi.ts | 71 ++ .../src/__contracts/abi/TokenWithPermitAbi.ts | 611 +++++++++++++++++ tests/src/__contracts/abi/index.ts | 1 + tests/src/__contracts/mockAddresses.ts | 25 +- tests/src/testUtils.ts | 16 +- 26 files changed, 1397 insertions(+), 421 deletions(-) create mode 100644 src/__contracts/abi/EIP1271Abi.ts create mode 100644 tests/src/__contracts/abi/TokenWithPermitAbi.ts diff --git a/bun.lockb b/bun.lockb index f13bf97af633eafe847c7d91826756e9d8973153..951562036dad3a1f86819f65ad7d3516879c1305 100755 GIT binary patch delta 42669 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 delta 42520 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 diff --git a/package.json b/package.json index d3490ba61..843f9d48e 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "execa": "^9.3.1", "get-port": "^7.1.0", "gh-pages": "^6.1.1", - "nexus": "git@github.com:bcnmy/nexus.git#b8085a3d688afb9149c129a34b4bb9cefb93ae38", + "nexus": "github:bcnmy/nexus#7f8410d6f8037b698b9dd08e6da9008cbd30418a", "prool": "^0.0.16", "rimraf": "^5.0.5", "simple-git-hooks": "^2.9.0", @@ -126,4 +126,4 @@ "dependencies": { "merkletreejs": "^0.3.11" } -} +} \ No newline at end of file diff --git a/scripts/fetch:deployment.ts b/scripts/fetch:deployment.ts index 1ea138b5a..44b92b7ca 100644 --- a/scripts/fetch:deployment.ts +++ b/scripts/fetch:deployment.ts @@ -10,7 +10,7 @@ type FetchDetails = { } const { nexusDeploymentPath = "../node_modules/nexus/deployments", - chainName = "anvil-55000", + chainName = "anvil-51139", forSrc = ["K1ValidatorFactory", "Nexus", "K1Validator"] } = yargs(hideBin(process.argv)).argv as unknown as FetchDetails diff --git a/src/__contracts/abi/EIP1271Abi.ts b/src/__contracts/abi/EIP1271Abi.ts new file mode 100644 index 000000000..044ffe934 --- /dev/null +++ b/src/__contracts/abi/EIP1271Abi.ts @@ -0,0 +1,31 @@ +export const EIP1271Abi = [ + { + type: "function", + name: "eip712Domain", + inputs: [], + outputs: [ + { name: "fields", type: "bytes1", internalType: "bytes1" }, + { name: "name", type: "string", internalType: "string" }, + { name: "version", type: "string", internalType: "string" }, + { name: "chainId", type: "uint256", internalType: "uint256" }, + { + name: "verifyingContract", + type: "address", + internalType: "address" + }, + { name: "salt", type: "bytes32", internalType: "bytes32" }, + { name: "extensions", type: "uint256[]", internalType: "uint256[]" } + ], + stateMutability: "view" + }, + { + type: "function", + name: "isValidSignature", + inputs: [ + { name: "data", type: "bytes32", internalType: "bytes32" }, + { name: "signature", type: "bytes", internalType: "bytes" } + ], + outputs: [{ name: "magicValue", type: "bytes4", internalType: "bytes4" }], + stateMutability: "view" + } +] as const diff --git a/src/__contracts/abi/K1ValidatorAbi.ts b/src/__contracts/abi/K1ValidatorAbi.ts index bcbbcfb98..1e633578c 100644 --- a/src/__contracts/abi/K1ValidatorAbi.ts +++ b/src/__contracts/abi/K1ValidatorAbi.ts @@ -1,4 +1,9 @@ export const K1ValidatorAbi = [ + { + inputs: [], + name: "InvalidDataLength", + type: "error" + }, { inputs: [], name: "ModuleAlreadyInitialized", @@ -86,6 +91,35 @@ export const K1ValidatorAbi = [ stateMutability: "view", type: "function" }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "bytes32", + name: "hash", + type: "bytes32" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + name: "isValidSignatureWithSenderLegacy", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4" + } + ], + stateMutability: "view", + type: "function" + }, { inputs: [], name: "name", @@ -144,6 +178,19 @@ export const K1ValidatorAbi = [ stateMutability: "view", type: "function" }, + { + inputs: [], + name: "supportsNestedTypedDataSign", + outputs: [ + { + internalType: "bytes32", + name: "result", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, { inputs: [ { @@ -157,6 +204,35 @@ export const K1ValidatorAbi = [ stateMutability: "nonpayable", type: "function" }, + { + inputs: [ + { + internalType: "bytes32", + name: "hash", + type: "bytes32" + }, + { + internalType: "bytes", + name: "sig", + type: "bytes" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "validateSignatureWithData", + outputs: [ + { + internalType: "bool", + name: "validSig", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, { inputs: [ { diff --git a/src/__contracts/abi/NexusAbi.ts b/src/__contracts/abi/NexusAbi.ts index 5acc0e953..ce1bed919 100644 --- a/src/__contracts/abi/NexusAbi.ts +++ b/src/__contracts/abi/NexusAbi.ts @@ -20,6 +20,11 @@ export const NexusAbi = [ name: "CanNotRemoveLastValidator", type: "error" }, + { + inputs: [], + name: "EmergencyTimeLockNotExpired", + type: "error" + }, { inputs: [], name: "EnableModeSigError", @@ -309,6 +314,25 @@ export const NexusAbi = [ name: "ERC7484RegistryConfigured", type: "event" }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "hook", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "timestamp", + type: "uint256" + } + ], + name: "EmergencyHookUninstallRequest", + type: "event" + }, { anonymous: false, inputs: [ @@ -544,6 +568,24 @@ export const NexusAbi = [ stateMutability: "view", type: "function" }, + { + inputs: [ + { + internalType: "address", + name: "hook", + type: "address" + }, + { + internalType: "bytes", + name: "deInitData", + type: "bytes" + } + ], + name: "emergencyUninstallHook", + outputs: [], + stateMutability: "payable", + type: "function" + }, { inputs: [], name: "entryPoint", @@ -878,7 +920,7 @@ export const NexusAbi = [ }, { internalType: "bytes", - name: "data", + name: "signature", type: "bytes" } ], @@ -1005,11 +1047,30 @@ export const NexusAbi = [ outputs: [ { internalType: "bytes32", - name: "result", + name: "", type: "bytes32" } ], - stateMutability: "pure", + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "validator", + type: "address" + } + ], + name: "supportsNestedTypedDataSignWithValidator", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", type: "function" }, { diff --git a/src/__contracts/addresses.ts b/src/__contracts/addresses.ts index 9b61a7b5c..b4b39bfd3 100644 --- a/src/__contracts/addresses.ts +++ b/src/__contracts/addresses.ts @@ -2,9 +2,9 @@ import type { Hex } from "viem" export const addresses: Record<string, Hex> = { - Nexus: "0x776d63154D2aa9256D72C420416c930F3B735464", - K1Validator: "0xd98238BBAeA4f91683d250003799EAd31d7F5c55", - K1ValidatorFactory: "0x8025afaD10209b8bEF3A3C94684AaE4D309c9996", + Nexus: "0x21f4C007C9f091B93B7C1C6911E13ACcd3DAd403", + K1Validator: "0x6854688d3D9A87a33Addd5f4deB5cea1B97fa5b7", + K1ValidatorFactory: "0x976869CF9c5Dd5046b41963EF1bBcE62b5366869", UniActionPolicy: "0x28120dC008C36d95DE5fa0603526f219c1Ba80f6" } as const export default addresses diff --git a/src/account/BaseSmartContractAccount.ts b/src/account/BaseSmartContractAccount.ts index 6cc829f72..92d774138 100644 --- a/src/account/BaseSmartContractAccount.ts +++ b/src/account/BaseSmartContractAccount.ts @@ -17,7 +17,6 @@ import type { BaseSmartContractAccountProps, BatchUserOperationCallData, ISmartContractAccount, - SignTypedDataParams, Transaction } from "./utils/Types.js" import { wrapSignatureWith6492 } from "./utils/Utils.js" @@ -130,9 +129,7 @@ export abstract class BaseSmartContractAccount< * * @param _params -- Typed Data params to sign */ - async signTypedData(_params: SignTypedDataParams): Promise<`0x${string}`> { - throw new Error("signTypedData not supported") - } + abstract signTypedData(typedData: any): Promise<`0x${string}`> /** * This method should wrap the result of `signMessage` as per @@ -156,12 +153,10 @@ export abstract class BaseSmartContractAccount< * * @param params -- Typed Data params to sign */ - async signTypedDataWith6492( - params: SignTypedDataParams - ): Promise<`0x${string}`> { + async signTypedDataWith6492(typedData: any): Promise<`0x${string}`> { const [isDeployed, signature] = await Promise.all([ this.isAccountDeployed(), - this.signTypedData(params) + this.signTypedData(typedData) ]) return this.create6492Signature(isDeployed, signature) diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts index eb6c520f3..9d3ad3ff2 100644 --- a/src/account/NexusSmartAccount.ts +++ b/src/account/NexusSmartAccount.ts @@ -5,22 +5,26 @@ import { type Hash, type Hex, type PublicClient, + type TypedDataDefinition, type WalletClient, concat, concatHex, decodeFunctionData, + domainSeparator, encodeAbiParameters, encodeFunctionData, encodePacked, formatUnits, getAddress, getContract, + getTypesForEIP712Domain, keccak256, pad, parseAbi, parseAbiParameters, toBytes, - toHex + toHex, + validateTypedData } from "viem" import contracts from "../__contracts" import { NexusAbi } from "../__contracts/abi" @@ -66,7 +70,8 @@ import { import { GENERIC_FALLBACK_SELECTOR, type MODE_MODULE_ENABLE, - MODE_VALIDATION + MODE_VALIDATION, + PARENT_TYPEHASH } from "./utils/Constants.js" import { ADDRESS_ZERO, @@ -91,6 +96,8 @@ import type { TransferOwnershipCompatibleModule, WithdrawalRequest } from "./utils/Types.js" +import { eip712WrapHash, typeToString } from "./utils/Utils.js" +import { getAccountDomainStructFields } from "./utils/Utils.js" import { addressEquals, isNullOrUndefined, packUserOp } from "./utils/Utils.js" export class NexusSmartAccount extends BaseSmartContractAccount { @@ -1743,6 +1750,85 @@ export class NexusSmartAccount extends BaseSmartContractAccount { return concat([abiEncodedMessage, MAGIC_BYTES]) } + /** + * If your contract supports signing and verifying typed data, + * you should implement this method. + * + * @param _params -- Typed Data params to sign + */ + async signTypedData(typedData: any): Promise<`0x${string}`> { + const types = { + EIP712Domain: getTypesForEIP712Domain({ + domain: typedData.domain + }), + ...typedData.types + } + + validateTypedData({ + domain: typedData.domain, + message: typedData.message, + primaryType: typedData.primaryType, + types: types + } as TypedDataDefinition) + + const appDomainSeparator = domainSeparator({ + domain: { + name: typedData.domain.name, + version: typedData.domain.version, + chainId: typedData.domain.chainId, + verifyingContract: typedData.domain.verifyingContract + } + }) + + const accountDomainStructFields = await getAccountDomainStructFields( + this.publicClient, + await this.getAddress() + ) + + const parentStructHash = keccak256( + encodePacked( + ["bytes", "bytes"], + [ + encodeAbiParameters(parseAbiParameters(["bytes32, bytes32"]), [ + keccak256(toBytes(PARENT_TYPEHASH)), + typedData.message.stuff + ]), + accountDomainStructFields + ] + ) + ) + + const wrappedTypedHash = await eip712WrapHash( + parentStructHash, + appDomainSeparator + ) + + let signature = await this.activeValidationModule.signMessage( + toBytes(wrappedTypedHash) + ) + + const contentsType = toBytes(typeToString(types)[1]) + + const signatureData = concatHex([ + signature, + appDomainSeparator, + typedData.message.stuff, + toHex(contentsType), + toHex(contentsType.length, { size: 2 }) + ]) + + signature = encodePacked( + ["address", "bytes"], + [ + this.activeValidationModule.getAddress() ?? + this.defaultValidationModule.getAddress(), + signatureData + ] + ) + + return signature + } + async getIsValidSignatureData( messageHash: Hex, signature: Hex diff --git a/src/account/utils/Constants.ts b/src/account/utils/Constants.ts index 1f57e802c..d42eda820 100644 --- a/src/account/utils/Constants.ts +++ b/src/account/utils/Constants.ts @@ -79,4 +79,10 @@ export const MODULE_ENABLE_MODE_TYPE_HASH = keccak256( export const MOCK_MULTI_MODULE_ADDRESS = "0x9C992f91E7Cd4697B81E137007f446E826b8378b" export const MODULE_TYPE_MULTI = 0 + +export const NEXUS_DOMAIN_NAME = "Nexus" +export const NEXUS_DOMAIN_VERSION = "1.0.0-beta" + +export const PARENT_TYPEHASH = + "TypedDataSign(Contents contents,bytes1 fields,string name,string version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] extensions)Contents(bytes32 stuff)" export const eip1271MagicValue: Hex = "0x1626ba7e" diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts index 2474d1f3e..d65e619e1 100644 --- a/src/account/utils/Types.ts +++ b/src/account/utils/Types.ts @@ -535,10 +535,10 @@ export interface ISmartContractAccount< /** * Signs a typed data object as per ERC-712 * - * @param params - {@link SignTypedDataParams} + * @param typedData * @returns the signed hash for the message passed */ - signTypedData(params: SignTypedDataParams): Promise<Hash> + signTypedData(typedData: any): Promise<Hash> /** * If the account is not deployed, it will sign the message and then wrap it in 6492 format @@ -640,3 +640,22 @@ export enum CallType { CALLTYPE_STATIC = "0xFE", CALLTYPE_DELEGATECALL = "0xFF" } + +export type NEXUS_VERSION_TYPE = "1.0.0-beta" + +export type AccountMetadata = { + name: string + version: string + chainId: bigint +} + +export type WithRequired<T, K extends keyof T> = Required<Pick<T, K>> + +export type TypeField = { + name: string + type: string +} + +export type TypeDefinition = { + [key: string]: TypeField[] +} diff --git a/src/account/utils/Utils.ts b/src/account/utils/Utils.ts index 843d66c73..09511380c 100644 --- a/src/account/utils/Utils.ts +++ b/src/account/utils/Utils.ts @@ -1,21 +1,38 @@ import { type Address, + type Client, type Hash, type Hex, + type PublicClient, + type TypedDataDomain, + type TypedDataParameter, concat, + decodeFunctionResult, encodeAbiParameters, + encodeFunctionData, + encodePacked, hexToBytes, keccak256, pad, + parseAbi, parseAbiParameters, + publicActions, stringToBytes, toBytes, toHex } from "viem" -import type { UserOperationStruct } from "../../account" +import { EIP1271Abi } from "../../__contracts/abi/EIP1271Abi" +import type { + AccountMetadata, + EIP712DomainReturn, + TypeDefinition, + UserOperationStruct +} from "../../account" import { MOCK_MULTI_MODULE_ADDRESS, - MODULE_ENABLE_MODE_TYPE_HASH + MODULE_ENABLE_MODE_TYPE_HASH, + NEXUS_DOMAIN_NAME, + NEXUS_DOMAIN_VERSION } from "../../account" import { type ModuleType, moduleTypeIds } from "../../modules/utils/Types" @@ -217,3 +234,109 @@ export function _hashTypedData( ]) ) } + +export function getTypesForEIP712Domain({ + domain +}: { domain?: TypedDataDomain | undefined }): TypedDataParameter[] { + return [ + typeof domain?.name === "string" && { name: "name", type: "string" }, + domain?.version && { name: "version", type: "string" }, + typeof domain?.chainId === "number" && { + name: "chainId", + type: "uint256" + }, + domain?.verifyingContract && { + name: "verifyingContract", + type: "address" + }, + domain?.salt && { name: "salt", type: "bytes32" } + ].filter(Boolean) as TypedDataParameter[] +} +export const accountMetadata = async ( + client: Client, + accountAddress: Address +): Promise<AccountMetadata> => { + try { + const domain = await client.request({ + method: "eth_call", + params: [ + { + to: accountAddress, + data: encodeFunctionData({ + abi: EIP1271Abi, + functionName: "eip712Domain" + }) + }, + "latest" + ] + }) + + if (domain !== "0x") { + const decoded = decodeFunctionResult({ + abi: [...EIP1271Abi], + functionName: "eip712Domain", + data: domain + }) + return { + name: decoded[1], + version: decoded[2], + chainId: decoded[3] + } + } + } catch (error) {} + return { + name: NEXUS_DOMAIN_NAME, + version: NEXUS_DOMAIN_VERSION, + chainId: client.chain + ? BigInt(client.chain.id) + : BigInt(await client.extend(publicActions).getChainId()) + } +} + +export const eip712WrapHash = async ( + typedHash: Hex, + appDomainSeparator: Hex +): Promise<Hex> => { + const digest = keccak256(concat(["0x1901", appDomainSeparator, typedHash])) + + return digest +} + +export function typeToString(typeDef: TypeDefinition): string[] { + return Object.entries(typeDef).map(([key, fields]) => { + const fieldStrings = fields + .map((field) => `${field.type} ${field.name}`) + .join(",") + return `${key}(${fieldStrings})` + }) +} + +export const getAccountDomainStructFields = async ( + publicClient: PublicClient, + accountAddress: Address +) => { + const accountDomainStructFields = (await publicClient.readContract({ + address: accountAddress, + abi: parseAbi([ + "function eip712Domain() public view returns (bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions)" + ]), + functionName: "eip712Domain" + })) as EIP712DomainReturn + + const [fields, name, version, chainId, verifyingContract, salt, extensions] = + accountDomainStructFields + + const params = parseAbiParameters([ + "bytes1, bytes32, bytes32, uint256, address, bytes32, bytes32" + ]) + + return encodeAbiParameters(params, [ + fields, + keccak256(toBytes(name)), + keccak256(toBytes(version)), + chainId, + verifyingContract, + salt, + keccak256(encodePacked(["uint256[]"], [extensions])) + ]) +} diff --git a/tests/account.read.test.ts b/tests/account.read.test.ts index 1533c32e2..604344354 100644 --- a/tests/account.read.test.ts +++ b/tests/account.read.test.ts @@ -5,17 +5,22 @@ import { type Account, type Chain, type Hex, + type PublicClient, type WalletClient, concat, + concatHex, createPublicClient, createWalletClient, + domainSeparator, encodeAbiParameters, encodeFunctionData, encodePacked, getContract, hashMessage, keccak256, + parseAbi, parseAbiParameters, + parseEther, toBytes, toHex } from "viem" @@ -29,13 +34,12 @@ import { NATIVE_TOKEN_ALIAS, type NexusSmartAccount, type SupportedSigner, - type Transaction, createSmartAccountClient, eip1271MagicValue, getChain, makeInstallDataAndHash } from "../src/account" -import { CounterAbi } from "./src/__contracts/abi" +import { CounterAbi, TokenWithPermitAbi } from "./src/__contracts/abi" import mockAddresses from "./src/__contracts/mockAddresses" import { type TestFileNetworkType, toNetwork } from "./src/testSetup" import { @@ -48,13 +52,9 @@ import { toTestClient, topUp } from "./src/testUtils" -import type { - MasterClient, - NetworkConfig, - NetworkConfigWithBundler -} from "./src/testUtils" +import type { MasterClient, NetworkConfig } from "./src/testUtils" -const NETWORK_TYPE: TestFileNetworkType = "COMMON_LOCALHOST" +const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" describe("account.read", () => { let network: NetworkConfig @@ -62,6 +62,7 @@ describe("account.read", () => { let chain: Chain let bundlerUrl: string let walletClient: WalletClient + let publicClient: PublicClient // Test utils let testClient: MasterClient @@ -79,6 +80,11 @@ describe("account.read", () => { account = getTestAccount(0) recipientAccount = getTestAccount(3) + publicClient = createPublicClient({ + chain, + transport: http() + }) + walletClient = createWalletClient({ account, chain, @@ -99,13 +105,46 @@ describe("account.read", () => { await killNetwork([network?.rpcPort, network?.bundlerPort]) }) + test("should deploy smart account if not deployed", async () => { + const isDeployed = await smartAccount.isAccountDeployed() + + if (!isDeployed) { + console.log("Smart account not deployed. Deploying...") + + // Fund the account first + await topUp(testClient, smartAccountAddress, parseEther("0.01")) + + // Create a dummy transaction to trigger deployment + const dummyTx = { + to: smartAccountAddress, + value: 0n, + data: "0x" + } + + const userOp = await smartAccount.sendTransaction([dummyTx]) + await userOp.wait() + + const isNowDeployed = await smartAccount.isAccountDeployed() + expect(isNowDeployed).toBe(true) + + console.log("Smart account deployed successfully") + } else { + console.log("Smart account already deployed") + } + + // Verify the account is now deployed + const finalDeploymentStatus = await smartAccount.isAccountDeployed() + expect(finalDeploymentStatus).toBe(true) + }) + test("should fund the smart account", async () => { - await topUp(testClient, smartAccountAddress) + await topUp(testClient, smartAccountAddress, parseEther("0.01")) const [balance] = await smartAccount.getBalances() expect(balance.amount > 0) }) - test("should have account addresses", async () => { + // @note @todo this test is only valid for anvil + test.skip("should have account addresses", async () => { const addresses = await Promise.all([ account.address, smartAccount.getAddress() @@ -113,11 +152,11 @@ describe("account.read", () => { expect(addresses.every(Boolean)).to.be.true expect(addresses).toStrictEqual([ "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account ]) }) - test.skip("should estimate gas for minting an NFT", async () => { + test("should estimate gas for minting an NFT", async () => { const encodedCall = encodeFunctionData({ abi: CounterAbi, functionName: "incrementNumber" @@ -138,7 +177,7 @@ describe("account.read", () => { expect(increasingGasExpenditure).toBeTruthy() }, 60000) - test.skip("should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", async () => { + test("should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", async () => { const createSmartAccount = createSmartAccountClient({ chain, signer: account as SupportedSigner, @@ -150,7 +189,7 @@ describe("account.read", () => { ) }, 50000) - test.skip("should get all modules", async () => { + test("should get all modules", async () => { const modules = smartAccount.getInstalledModules() if (await smartAccount.isAccountDeployed()) { expect(modules).resolves @@ -159,7 +198,7 @@ describe("account.read", () => { } }, 30000) - test.skip("should check if module is enabled on the smart account", async () => { + test("should check if module is enabled on the smart account", async () => { const isEnabled = smartAccount.isModuleInstalled({ type: "validator", moduleAddress: addresses.K1Validator @@ -171,7 +210,7 @@ describe("account.read", () => { } }, 30000) - test.skip("enable mode", async () => { + test("enable mode", async () => { const result = makeInstallDataAndHash(account.address, [ { moduleType: "validator", @@ -181,7 +220,7 @@ describe("account.read", () => { expect(result).toBeTruthy() }, 30000) - test.skip("should create a smartAccountClient from an ethers signer", async () => { + test("should create a smartAccountClient from an ethers signer", async () => { const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) const ethersSigner = new Wallet(pKey, ethersProvider) @@ -191,6 +230,8 @@ describe("account.read", () => { bundlerUrl, rpcUrl: chain.rpcUrls.default.http[0] }) + + expect(smartAccount).toBeTruthy() }) test.skip("should pickup the rpcUrl from viem wallet and ethers", async () => { @@ -277,7 +318,7 @@ describe("account.read", () => { ) }) - test.skip("should read estimated user op gas values", async () => { + test("should read estimated user op gas values", async () => { const tx = { to: recipientAccount.address, data: "0x" @@ -293,12 +334,11 @@ describe("account.read", () => { expect(estimatedGas.preVerificationGas).toBeTruthy() }, 30000) - test.skip("should have an active validation module", async () => { + test("should have an active validation module", async () => { const module = smartAccount.activeValidationModule expect(module).toBeTruthy() }) - // @note Ignored untill we implement Paymaster // test.skip( // "should create a smart account with paymaster by creating instance", // async () => { @@ -314,7 +354,7 @@ describe("account.read", () => { // } // ) - test.skip("should fail to create a smartAccountClient from a walletClient without an account", async () => { + test("should fail to create a smartAccountClient from a walletClient without an account", async () => { const viemWalletNoAccount = createWalletClient({ transport: http(chain.rpcUrls.default.http[0]) }) @@ -329,105 +369,42 @@ describe("account.read", () => { ).rejects.toThrow("Cannot consume a viem wallet without an account") }) - // test.skip( - // "should create a smart account with paymaster with an api key", - // async () => { - // const paymaster = smartAccount.paymaster - // expect(paymaster).not.toBeNull() - // expect(paymaster).not.toBeUndefined() - // } - // ) - - // test.skip("should not throw and error, chain ids match", async () => { - // const mockBundlerUrl = - // "https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44" - // const mockPaymasterUrl = - // "https://paymaster.biconomy.io/api/v1/84532/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - - // const config: NexusSmartAccountConfig = { - // signer: walletClient, - // bundlerUrl: mockBundlerUrl, - // paymasterUrl: mockPaymasterUrl - // } - - // await expect( - // compareChainIds(walletClient, config, false) - // ).resolves.not.toThrow() - // }) - - // test.skip( - // "should throw and error, bundlerUrl chain id and paymaster url chain id does not match with validation module", - // async () => { - // const mockPaymasterUrl = - // "https://paymaster.biconomy.io/api/v1/1337/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - - // const k1ValidationModule = await createK1ValidatorModule( - // smartAccount.getSigner() - // ) - - // const config: NexusSmartAccountConfig = { - // chain, - // defaultValidationModule: k1ValidationModule, - // activeValidationModule: k1ValidationModule, - // bundlerUrl, - // paymasterUrl: mockPaymasterUrl - // } - - // } - // ) - - // test.skip( - // "should throw and error, signer has chain id (56) and paymasterUrl has chain id (11155111)", - // async () => { - // const mockPaymasterUrl = - // "https://paymaster.biconomy.io/api/v1/11155111/-RObQRX9ei.fc6918eb-c582-4417-9d5a-0507b17cfe71" - - // const walletClientBsc = createWalletClient({ - // account: walletClient.account, - // chain: bsc, - // transport: http(bsc.rpcUrls.default.http[0]) - // }) - - // const config: NexusSmartAccountConfig = { - // chain, - // signer: walletClientBsc, - // bundlerUrl, - // paymasterUrl: mockPaymasterUrl - // } - - // } - // ) + test.skip("should create a smart account with paymaster with an api key", async () => { + const paymaster = smartAccount.paymaster + expect(paymaster).not.toBeNull() + expect(paymaster).not.toBeUndefined() + }) - test.skip("should return chain object for chain id 1", async () => { + test("should return chain object for chain id 1", async () => { const chainId = 1 const chain = getChain(chainId) expect(chain.id).toBe(chainId) }) - test.skip("should have correct fields", async () => { + test("should have correct fields", async () => { const chainId = 1 const chain = getChain(chainId) - ;[ - "blockExplorers", - "contracts", - "fees", - "formatters", - "id", - "name", - "nativeCurrency", - "rpcUrls", - "serializers" - ].every((field) => { - expect(chain).toHaveProperty(field) - }) + ;[ + "blockExplorers", + "contracts", + "fees", + "formatters", + "id", + "name", + "nativeCurrency", + "rpcUrls", + "serializers" + ].every((field) => { + expect(chain).toHaveProperty(field) + }) }) - test.skip("should throw an error, chain id not found", async () => { + test("should throw an error, chain id not found", async () => { const chainId = 0 expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) }) - test.skip("should have matching counterFactual address from the contracts with smartAccount.getAddress()", async () => { + test("should have matching counterFactual address from the contracts with smartAccount.getAddress()", async () => { const client = createWalletClient({ account, chain, @@ -442,11 +419,6 @@ describe("account.read", () => { const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() - const publicClient = createPublicClient({ - chain, - transport: http() - }) - const factoryContract = getContract({ address: addresses.K1ValidatorFactory, abi: K1ValidatorFactoryAbi, @@ -464,7 +436,7 @@ describe("account.read", () => { expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) }) - test.skip("should be deployed to counterfactual address", async () => { + test("should be deployed to counterfactual address", async () => { const accountAddress = await smartAccount.getAccountAddress() const byteCode = await testClient.getBytecode({ address: accountAddress as Hex @@ -476,7 +448,7 @@ describe("account.read", () => { } }, 10000) - test.skip("should check if ecdsaOwnershipModule is enabled", async () => { + test("should check if K1Validator is enabled", async () => { const ecdsaOwnershipModule = addresses.K1Validator expect(ecdsaOwnershipModule).toBe( @@ -484,7 +456,7 @@ describe("account.read", () => { ) }) - test.skip("should fail to deploy a smart account if no native token balance or paymaster", async () => { + test("should fail to deploy a smart account if no native token balance or paymaster", async () => { const newPrivateKey = generatePrivateKey() const newAccount = privateKeyToAccount(newPrivateKey) @@ -505,7 +477,7 @@ describe("account.read", () => { ) }) - test.skip("should fail to deploy a smart account if already deployed", async () => { + test("should fail to deploy a smart account if already deployed", async () => { if (await smartAccount.isAccountDeployed()) { expect(async () => smartAccount.deploy()).rejects.toThrow( ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED @@ -529,7 +501,7 @@ describe("account.read", () => { expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) }) - test.skip("should error if no recipient exists", async () => { + test("should error if no recipient exists", async () => { const token: Hex = "0x69835C1f31ed0721A05d5711C1d669C10802a3E1" const txs = [ @@ -542,13 +514,13 @@ describe("account.read", () => { ) }) - test.skip("should error when withdraw all of native token is attempted without an amount explicitly set", async () => { + test("should error when withdraw all of native token is attempted without an amount explicitly set", async () => { expect(async () => smartAccount.withdraw(null, account.address) ).rejects.toThrow(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT) }, 6000) - test.skip("should check native token balance and more token info for smartAccount", async () => { + test("should check native token balance and more token info for smartAccount", async () => { const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) @@ -557,22 +529,17 @@ describe("account.read", () => { expect(ethBalanceFromSmartAccount.decimals).toBe(18) }, 60000) - // @note Skip until we implement the Paymaster - // test.skip( - // "should check balance of supported token", - // async () => { - // const tokens = await smartAccount.getSupportedTokens() - // const [firstToken] = tokens - - // expect(tokens.length).toBeGreaterThan(0) - // expect(tokens[0]).toHaveProperty("balance") - // expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) - // }, - // 60000 - // ) + test.skip("should check balance of supported token", async () => { + const tokens = await smartAccount.getSupportedTokens() + const [firstToken] = tokens + + expect(tokens.length).toBeGreaterThan(0) + expect(tokens[0]).toHaveProperty("balance") + expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) + }, 60000) // @note Nexus SA signature needs to contain the validator module address in the first 20 bytes - test.skip("should test isValidSignature PersonalSign to be valid", async () => { + test("should test isValidSignature PersonalSign to be valid", async () => { if (await smartAccount.isAccountDeployed()) { const data = hashMessage("0x1234") @@ -582,7 +549,6 @@ describe("account.read", () => { const DOMAIN_TYPEHASH = "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" const PARENT_TYPEHASH = "PersonalSign(bytes prefixed)" - const chainId = baseSepolia.id // Calculate the domain separator const domainSeparator = keccak256( @@ -592,7 +558,7 @@ describe("account.read", () => { keccak256(toBytes(DOMAIN_TYPEHASH)), keccak256(toBytes(DOMAIN_NAME)), keccak256(toBytes(DOMAIN_VERSION)), - BigInt(chainId), + BigInt(chain.id), smartAccountAddress ] ) @@ -631,97 +597,6 @@ describe("account.read", () => { } }) - test.skip("should test isValidSignature EIP712Sign to be valid", async () => { - if (await smartAccount.isAccountDeployed()) { - const data = keccak256("0x1234") - - // Define constants as per the original Solidity function - const DOMAIN_NAME = "Nexus" - const DOMAIN_VERSION = "1.0.0-beta" - const DOMAIN_TYPEHASH = - "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" - const PARENT_TYPEHASH = - "TypedDataSign(Contents contents,bytes1 fields,string name,string version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] extensions) Contents(bytes32 stuff)" - const chainId = baseSepolia.id - - // Calculate the domain separator - const domainSeparator = keccak256( - encodeAbiParameters( - parseAbiParameters("bytes32, bytes32, bytes32, uint256, address"), - [ - keccak256(toBytes(DOMAIN_TYPEHASH)), - keccak256(toBytes(DOMAIN_NAME)), - keccak256(toBytes(DOMAIN_VERSION)), - BigInt(chainId), - smartAccountAddress - ] - ) - ) - - const encodedAccountDomainStructFields = - await getAccountDomainStructFields(testClient, smartAccountAddress) - - // Calculate the parent struct hash - const parentStructHash = keccak256( - encodePacked( - ["bytes", "bytes"], - [ - encodeAbiParameters(parseAbiParameters("bytes32, bytes32"), [ - keccak256(toBytes(PARENT_TYPEHASH)), - hashMessage(data) - ]), - encodedAccountDomainStructFields - ] - ) - ) - - const dataToSign: Hex = keccak256( - concat(["0x1901" as Hex, domainSeparator, parentStructHash]) - ) - - let signature = await smartAccount.signMessage(dataToSign) - const contentsType: Hex = toHex("Contents(bytes32 stuff)") - signature = encodePacked( - ["bytes", "bytes", "bytes", "bytes", "uint"], - [ - signature, - domainSeparator, - hashMessage(data), - contentsType, - BigInt(contentsType.length) - ] - ) - - const finalSignature = encodePacked( - ["address", "bytes"], - [smartAccount.activeValidationModule.moduleAddress, signature] - ) - - const contents = keccak256( - encodePacked( - ["bytes", "bytes", "bytes"], - ["0x1901", domainSeparator, hashMessage(data)] - ) - ) - - const contractResponse = await testClient.readContract({ - address: await smartAccount.getAddress(), - abi: NexusAbi, - functionName: "isValidSignature", - args: [contents, finalSignature] - }) - - const viemResponse = await testClient.verifyMessage({ - address: smartAccountAddress, - message: data, - signature: finalSignature - }) - - expect(contractResponse).toBe(eip1271MagicValue) - expect(viemResponse).toBe(true) - } - }) - test("should have consistent behaviour between ethers.AbiCoder.defaultAbiCoder() and viem.encodeAbiParameters()", async () => { const expectedResult = "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b90600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b906000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" @@ -772,165 +647,183 @@ describe("account.read", () => { expect(executionCalldataPrepWithViem).toBe(expectedResult) }) - // test.skip("should call isValidSignature for deployed smart account", async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl - // }) - - // const message = "hello world" - // const signature = await smartAccount.signMessage(message) - - // const isVerified = await publicClient.readContract({ - // address: await smartAccount.getAddress(), - // abi: NexusAccountAbi, - // functionName: "isValidSignature", - // args: [hashMessage(message), signature] - // }) - - // expect(isVerified).toBe(eip1271MagicValue) - // }) - - // test.skip("should verifySignature of not deployed", async () => { - // const undeployedSmartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl, - // index: 99n - // }) - // const isDeployed = await undeployedSmartAccount.isAccountDeployed() - // if (!isDeployed) { - // const message = "hello world" - - // const signature = await smartAccount.signMessage(message) - // // OR - // // const signature = await smartAccount.signMessageWith6492(message) - - // const isVerified = await publicClient.readContract({ - // address: await smartAccount.getAddress(), - // abi: NexusAccountAbi, - // functionName: "isValidSignature", - // args: [hashMessage(message), signature] - // }) + test.concurrent( + "should test isValidSignature EIP712Sign to be valid with viem", + async () => { + if (await smartAccount.isAccountDeployed()) { + const PARENT_TYPEHASH = + "TypedDataSign(Contents contents,bytes1 fields,string name,string version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] extensions)Contents(bytes32 stuff)" + + const message = { + contents: keccak256(toBytes("test", { size: 32 })) + } + + const domainSeparator = await publicClient.readContract({ + address: await smartAccount.getAddress(), + abi: parseAbi([ + "function DOMAIN_SEPARATOR() external view returns (bytes32)" + ]), + functionName: "DOMAIN_SEPARATOR" + }) + + const typedHashHashed = keccak256( + concat(["0x1901", domainSeparator, message.contents]) + ) - // expect(isVerified).toBe(eip1271MagicValue) - // } - // }) + const accountDomainStructFields = await getAccountDomainStructFields( + testClient, + await smartAccount.getAddress() + ) - // test.skip("should verifySignature using viem", async () => { - // const isDeployed = await smartAccount.isAccountDeployed() - // if (isDeployed) { - // const message = "0x123" + const parentStructHash = keccak256( + encodePacked( + ["bytes", "bytes"], + [ + encodeAbiParameters(parseAbiParameters(["bytes32, bytes32"]), [ + keccak256(toBytes(PARENT_TYPEHASH)), + message.contents + ]), + accountDomainStructFields + ] + ) + ) - // const signature = await smartAccount.signMessage(message) + const dataToSign = keccak256( + concat(["0x1901", domainSeparator, parentStructHash]) + ) - // console.log(signature, 'signature'); - // console.log(hashMessage(message), 'hashMessage(message)'); + const signature = await walletClient.signMessage({ + message: { raw: toBytes(dataToSign) }, + account + }) - // // const isVerified = await verifyMessage(publicClient, { - // // address: await smartAccount.getAddress(), - // // message, - // // signature, - // // }) + const contentsType = toBytes("Contents(bytes32 stuff)") - // const isVerified = await publicClient.readContract({ - // address: await smartAccount.getAddress(), - // abi: NexusAccountAbi, - // functionName: "isValidSignature", - // args: [hashMessage(message), signature] - // }) + const signatureData = concatHex([ + signature, + domainSeparator, + message.contents, + toHex(contentsType), + toHex(contentsType.length, { size: 2 }) + ]) - // console.log(isVerified, "isVerified"); + const finalSignature = encodePacked( + ["address", "bytes"], + [addresses.K1Validator, signatureData] + ) - // expect(isVerified).toBe(eip1271MagicValue) - // } - // }) + const contractResponse = await publicClient.readContract({ + address: await smartAccount.getAddress(), + abi: NexusAbi, + functionName: "isValidSignature", + args: [typedHashHashed, finalSignature] + }) - // @note Removed untill we implement the Bundler (Pimlico's bundler does no behave as expected in this test) - // test.skip( - // "should simulate a user operation execution, expecting to fail", - // async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl - // }) + expect(contractResponse).toBe(eip1271MagicValue) + } else { + throw new Error("Smart account is not deployed") + } + } + ) + + test("should sign using signTypedData SDK method", async () => { + const permitTestTokenAddress = mockAddresses.TokenWithPermit; + const appDomain = { + chainId: network.chain.id, + name: "TokenWithPermit", + verifyingContract: permitTestTokenAddress, + version: "1" + } - // const balances = await smartAccount.getBalances() - // expect(balances[0].amount).toBeGreaterThan(0n) + const primaryType = "Contents" + const types = { + Contents: [ + { + name: "stuff", + type: "bytes32" + } + ] + } - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function deposit()"]), - // functionName: "deposit" - // }) + const permitTypehash = keccak256( + toBytes( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ) + ) + const nonce = (await publicClient.readContract({ + address: permitTestTokenAddress, + abi: TokenWithPermitAbi, + functionName: "nonces", + args: [smartAccountAddress] + })) as bigint - // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" - - // // fail if value is not bigger than 1 - // // the contract call requires a deposit of at least 1 wei - // const tx1 = { - // to: amoyTestContract as Hex, - // data: encodedCall, - // value: 0 - // } - // const tx2 = { - // to: amoyTestContract as Hex, - // data: encodedCall, - // value: 2 - // } - - // await expect(smartAccount.buildUserOp([tx1, tx2])).rejects.toThrow() - // } - // ) + const deadline = BigInt(Math.floor(Date.now() / 1000) + 3600) // 1 hour from now - // @note Removed untill we implement the Bundler (Pimlico's bundler does no behave as expected in this test) - // test.skip( - // "should simulate a user operation execution, expecting to pass execution", - // async () => { - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl - // }) + const message = { + stuff: keccak256( + encodeAbiParameters( + parseAbiParameters( + "bytes32, address, address, uint256, uint256, uint256" + ), + [ + permitTypehash, + smartAccountAddress, + smartAccountAddress, + parseEther("2"), + nonce, + deadline + ] + ) + ) + } - // const balances = await smartAccount.getBalances() - // expect(balances[0].amount).toBeGreaterThan(0n) + const appDomainSeparator = domainSeparator({ + domain: appDomain + }) - // const encodedCall = encodeFunctionData({ - // abi: parseAbi(["function deposit()"]), - // functionName: "deposit" - // }) + const contentsHash = keccak256( + concat(["0x1901", appDomainSeparator, message.stuff]) + ) - // const amoyTestContract = "0x59Dbe91FBa486CA10E4ad589688Fe547a48bd62A" - - // // fail if value is not bigger than 1 - // // the contract call requires a deposit of at least 1 wei - // const tx1 = { - // to: amoyTestContract as Hex, - // data: encodedCall, - // value: 2 - // } - // const tx2 = { - // to: amoyTestContract as Hex, - // data: encodedCall, - // value: 2 - // } - - // await expect(smartAccount.buildUserOp([tx1, tx2])).resolves.toBeTruthy() - // } - // ) + const finalSignature = await smartAccount.signTypedData({ + domain: appDomain, + primaryType, + types, + message + }) + + const nexusResponse = await publicClient.readContract({ + address: await smartAccount.getAddress(), + abi: NexusAbi, + functionName: "isValidSignature", + args: [contentsHash, finalSignature] + }) + + const permitTokenResponse = await walletClient.writeContract({ + account: account, + address: permitTestTokenAddress, + abi: TokenWithPermitAbi, + functionName: "permitWith1271", + chain: network.chain, + args: [ + await smartAccount.getAddress(), + await smartAccount.getAddress(), + parseEther("2"), + deadline, + finalSignature + ] + }) + + await publicClient.waitForTransactionReceipt({ hash: permitTokenResponse }) - // test.skip("Should verify supported modes", async () => { - // expect( - // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_SINGLE) - // ).to.be.true - // expect( - // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DEFAULT_BATCH) - // ).to.be.true - // expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_BATCH)).to - // .be.true - // expect(await smartAccount.supportsExecutionMode(ACCOUNT_MODES.TRY_SINGLE)) - // .to.be.true - - // expect( - // await smartAccount.supportsExecutionMode(ACCOUNT_MODES.DELEGATE_SINGLE) - // ).to.be.false - // }) + const allowance = await publicClient.readContract({ + address: permitTestTokenAddress, + abi: TokenWithPermitAbi, + functionName: "allowance", + args: [await smartAccount.getAddress(), await smartAccount.getAddress()] + }) + + expect(allowance).toEqual(parseEther("2")) + expect(nexusResponse).toEqual("0x1626ba7e") + }) }) diff --git a/tests/account.write.test.ts b/tests/account.write.test.ts index 065ff4dec..8af5a0fb8 100644 --- a/tests/account.write.test.ts +++ b/tests/account.write.test.ts @@ -80,7 +80,7 @@ describe("account.write", () => { expect(addresses.every(Boolean)).to.be.true expect(addresses).toStrictEqual([ "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account ]) }) diff --git a/tests/modules.k1Validator.write.test.ts b/tests/modules.k1Validator.write.test.ts index 7995e8456..d267c342e 100644 --- a/tests/modules.k1Validator.write.test.ts +++ b/tests/modules.k1Validator.write.test.ts @@ -87,7 +87,7 @@ describe("modules.k1Validator.write", () => { expect(addresses.every(Boolean)).to.be.true expect(addresses).toStrictEqual([ "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account ]) }) diff --git a/tests/modules.ownableExecutor.read.test.ts b/tests/modules.ownableExecutor.read.test.ts index 042e12c5f..9e9a13624 100644 --- a/tests/modules.ownableExecutor.read.test.ts +++ b/tests/modules.ownableExecutor.read.test.ts @@ -82,7 +82,7 @@ describe("modules.ownable.executor.read", () => { expect(addresses.every(Boolean)).to.be.true expect(addresses).toStrictEqual([ "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account ]) }) diff --git a/tests/modules.ownableExecutor.write.test.ts b/tests/modules.ownableExecutor.write.test.ts index 415221823..0094e7087 100644 --- a/tests/modules.ownableExecutor.write.test.ts +++ b/tests/modules.ownableExecutor.write.test.ts @@ -80,7 +80,7 @@ describe("modules.ownable.executor.write", () => { expect(addresses.every(Boolean)).to.be.true expect(addresses).toStrictEqual([ "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account ]) }) diff --git a/tests/modules.ownableValidator.install.write.test.ts b/tests/modules.ownableValidator.install.write.test.ts index 680b4ca87..6ccbf0969 100644 --- a/tests/modules.ownableValidator.install.write.test.ts +++ b/tests/modules.ownableValidator.install.write.test.ts @@ -80,7 +80,7 @@ describe("modules.ownable.validator.install.write", () => { expect(addresses.every(Boolean)).to.be.true expect(addresses).toStrictEqual([ "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account ]) }) diff --git a/tests/modules.ownableValidator.uninstall.write.test.ts b/tests/modules.ownableValidator.uninstall.write.test.ts index 09fbd4a78..136e2b340 100644 --- a/tests/modules.ownableValidator.uninstall.write.test.ts +++ b/tests/modules.ownableValidator.uninstall.write.test.ts @@ -80,7 +80,7 @@ describe("modules.ownable.validator.uninstall.write", () => { expect(addresses.every(Boolean)).to.be.true expect(addresses).toStrictEqual([ "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account ]) }) diff --git a/tests/smart.sessions.test.ts b/tests/smart.sessions.test.ts index ce60eaf02..5c7308c3c 100644 --- a/tests/smart.sessions.test.ts +++ b/tests/smart.sessions.test.ts @@ -87,7 +87,7 @@ describe("smart.sessions", () => { expect(addresses.every(Boolean)).toBeTruthy() expect(addresses).toStrictEqual([ "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0xa3962DB24D3cAb711e18d5A508591C6dB82a0f54" // Sender smart account + "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account ]) }) diff --git a/tests/src/__contracts/abi/MockHookAbi.ts b/tests/src/__contracts/abi/MockHookAbi.ts index 11b57fabf..cfc2f6344 100644 --- a/tests/src/__contracts/abi/MockHookAbi.ts +++ b/tests/src/__contracts/abi/MockHookAbi.ts @@ -105,17 +105,17 @@ export const MockHookAbi = [ inputs: [ { internalType: "address", - name: "", + name: "sender", type: "address" }, { internalType: "uint256", - name: "", + name: "value", type: "uint256" }, { internalType: "bytes", - name: "", + name: "data", type: "bytes" } ], diff --git a/tests/src/__contracts/abi/MockValidatorAbi.ts b/tests/src/__contracts/abi/MockValidatorAbi.ts index d3ae35043..68ed5ed75 100644 --- a/tests/src/__contracts/abi/MockValidatorAbi.ts +++ b/tests/src/__contracts/abi/MockValidatorAbi.ts @@ -109,6 +109,35 @@ export const MockValidatorAbi = [ stateMutability: "view", type: "function" }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address" + }, + { + internalType: "bytes32", + name: "hash", + type: "bytes32" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + name: "isValidSignatureWithSenderLegacy", + outputs: [ + { + internalType: "bytes4", + name: "", + type: "bytes4" + } + ], + stateMutability: "view", + type: "function" + }, { inputs: [ { @@ -154,6 +183,48 @@ export const MockValidatorAbi = [ stateMutability: "view", type: "function" }, + { + inputs: [], + name: "supportsNestedTypedDataSign", + outputs: [ + { + internalType: "bytes32", + name: "result", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "hash", + type: "bytes32" + }, + { + internalType: "bytes", + name: "sig", + type: "bytes" + }, + { + internalType: "bytes", + name: "data", + type: "bytes" + } + ], + name: "validateSignatureWithData", + outputs: [ + { + internalType: "bool", + name: "validSig", + type: "bool" + } + ], + stateMutability: "view", + type: "function" + }, { inputs: [ { diff --git a/tests/src/__contracts/abi/TokenWithPermitAbi.ts b/tests/src/__contracts/abi/TokenWithPermitAbi.ts new file mode 100644 index 000000000..2360d7b36 --- /dev/null +++ b/tests/src/__contracts/abi/TokenWithPermitAbi.ts @@ -0,0 +1,611 @@ +export const TokenWithPermitAbi = [ + { + inputs: [ + { + internalType: "string", + name: "name", + type: "string" + }, + { + internalType: "string", + name: "symbol", + type: "string" + } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { + inputs: [], + name: "ECDSAInvalidSignature", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "length", + type: "uint256" + } + ], + name: "ECDSAInvalidSignatureLength", + type: "error" + }, + { + inputs: [ + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "ECDSAInvalidSignatureS", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "signer", + type: "address" + } + ], + name: "ERC1271InvalidSigner", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "allowance", + type: "uint256" + }, + { + internalType: "uint256", + name: "needed", + type: "uint256" + } + ], + name: "ERC20InsufficientAllowance", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "balance", + type: "uint256" + }, + { + internalType: "uint256", + name: "needed", + type: "uint256" + } + ], + name: "ERC20InsufficientBalance", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "approver", + type: "address" + } + ], + name: "ERC20InvalidApprover", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "receiver", + type: "address" + } + ], + name: "ERC20InvalidReceiver", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + } + ], + name: "ERC20InvalidSender", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "ERC20InvalidSpender", + type: "error" + }, + { + inputs: [ + { + internalType: "uint256", + name: "deadline", + type: "uint256" + } + ], + name: "ERC2612ExpiredSignature", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "signer", + type: "address" + }, + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "ERC2612InvalidSigner", + type: "error" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + }, + { + internalType: "uint256", + name: "currentNonce", + type: "uint256" + } + ], + name: "InvalidAccountNonce", + type: "error" + }, + { + inputs: [], + name: "InvalidShortString", + type: "error" + }, + { + inputs: [ + { + internalType: "string", + name: "str", + type: "string" + } + ], + name: "StringTooLong", + type: "error" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Approval", + type: "event" + }, + { + anonymous: false, + inputs: [], + name: "EIP712DomainChanged", + type: "event" + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address" + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address" + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "Transfer", + type: "event" + }, + { + inputs: [], + name: "DOMAIN_SEPARATOR", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "PERMIT_TYPEHASH_LOCAL", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + } + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address" + } + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "eip712Domain", + outputs: [ + { + internalType: "bytes1", + name: "fields", + type: "bytes1" + }, + { + internalType: "string", + name: "name", + type: "string" + }, + { + internalType: "string", + name: "version", + type: "string" + }, + { + internalType: "uint256", + name: "chainId", + type: "uint256" + }, + { + internalType: "address", + name: "verifyingContract", + type: "address" + }, + { + internalType: "bytes32", + name: "salt", + type: "bytes32" + }, + { + internalType: "uint256[]", + name: "extensions", + type: "uint256[]" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "uint256", + name: "amount", + type: "uint256" + } + ], + name: "mint", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + } + ], + name: "nonces", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "uint8", + name: "v", + type: "uint8" + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32" + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32" + } + ], + name: "permit", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address" + }, + { + internalType: "address", + name: "spender", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "uint256", + name: "deadline", + type: "uint256" + }, + { + internalType: "bytes", + name: "signature", + type: "bytes" + } + ], + name: "permitWith1271", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address" + }, + { + internalType: "address", + name: "to", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + } + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool" + } + ], + stateMutability: "nonpayable", + type: "function" + } +] as const diff --git a/tests/src/__contracts/abi/index.ts b/tests/src/__contracts/abi/index.ts index 0b57abb40..50290d37d 100644 --- a/tests/src/__contracts/abi/index.ts +++ b/tests/src/__contracts/abi/index.ts @@ -8,5 +8,6 @@ export * from "./MockTokenAbi" export * from "./BootstrapLibAbi" export * from "./MockRegistryAbi" export * from "./MockHandlerAbi" +export * from "./TokenWithPermitAbi" export * from "./BootstrapAbi" export * from "./MockExecutorAbi" diff --git a/tests/src/__contracts/mockAddresses.ts b/tests/src/__contracts/mockAddresses.ts index 64cc26a32..b6dfb220a 100644 --- a/tests/src/__contracts/mockAddresses.ts +++ b/tests/src/__contracts/mockAddresses.ts @@ -2,17 +2,18 @@ import type { Hex } from "viem" export const mockAddresses: Record<string, Hex> = { - MockHook: "0xAB9733982E5b98bdDc4f00314E8EA4911A9D1BA5", - Stakeable: "0xc60F4C65a698C0FE5eddACfB71661B580D15BDaa", - NexusAccountFactory: "0x609e47C5404758D83102AB4fe58dbeD4AC39Ae78", - BiconomyMetaFactory: "0x98C8792cf50A93900d575842eDAFf3Ccc2C2902b", - Counter: "0x36023f0abe27eC68fD2c6a489A3e21772A08E120", - MockValidator: "0xa5ab9E06eB79805e6b20586e16285f10cA3274fB", - MockToken: "0x56623d18E54cBbCae340EC449E3c5D1DC0bF60cd", - BootstrapLib: "0x0c66e850AB4aB7e748bf48698a257aaB87d9a899", - MockRegistry: "0x25D55884BFA6380B0fCDc9E924c495C44Aa46415", - MockHandler: "0xBE52B87DA68EC967e977191bE125584b98c1Ea04", - Bootstrap: "0xC952c381C006D14395047A8aeE7F67fB59D38A10", - MockExecutor: "0x940C64D0c650615d3Af0053a4CD32AbAbD3F04e7" + MockHook: "0x4445134442b717275c06034D0e6A589C258a7CfC", + Stakeable: "0x251a414Fa6a2a719Cf79D370F9aEb2e0817FA086", + NexusAccountFactory: "0xA2cE66fB6bBA1828DbcE2114682286c82434e59E", + BiconomyMetaFactory: "0xDdb351881419426F0942921db482690Da5a47d22", + Counter: "0x61f70428b61864B38D9B45b7B032c700B960acCD", + MockValidator: "0x4713E68A85A2ED5FF28e61DD76f17E8Cd94f4992", + MockToken: "0xe22ed8281e84aeAA770eE04f0E07dAf6A028117F", + BootstrapLib: "0x15a93E4a5221e9aDe5B3E6A7A70060080cc464f0", + MockRegistry: "0xD270D6A18B9C6063dE7B92EBd25B11f74e8B75eB", + MockHandler: "0x67D49D2345A96890c2A986bE294e8808868C5057", + TokenWithPermit: "0xfD6345760Ff39EC6B19506a7b8486EcA74B3F82A", + Bootstrap: "0xF53a824Bb0508FBa3a599FaF5BD37CE70b0867Fc", + MockExecutor: "0x9A75Bc1C839164196Eb5668b38337712994A2c8A" } as const export default mockAddresses diff --git a/tests/src/testUtils.ts b/tests/src/testUtils.ts index 4463d4c7d..95b9e44a1 100644 --- a/tests/src/testUtils.ts +++ b/tests/src/testUtils.ts @@ -12,9 +12,12 @@ import { createTestClient, createWalletClient, encodeAbiParameters, + encodePacked, + keccak256, parseAbi, parseAbiParameters, publicActions, + toBytes, walletActions } from "viem" import { mnemonicToAccount, privateKeyToAccount } from "viem/accounts" @@ -394,7 +397,6 @@ export const topUp = async ( return testClient.waitForTransactionReceipt({ hash }) } -// Returns the encoded EIP-712 domain struct fields. export const getAccountDomainStructFields = async ( testClient: MasterClient, accountAddress: Address @@ -410,18 +412,18 @@ export const getAccountDomainStructFields = async ( const [fields, name, version, chainId, verifyingContract, salt, extensions] = accountDomainStructFields - const params = parseAbiParameters( - "bytes1, string, string, uint256, address, bytes32, uint256[]" - ) + const params = parseAbiParameters([ + "bytes1, bytes32, bytes32, uint256, address, bytes32, bytes32" + ]) return encodeAbiParameters(params, [ fields, - name, - version, + keccak256(toBytes(name)), + keccak256(toBytes(version)), chainId, verifyingContract, salt, - extensions + keccak256(encodePacked(["uint256[]"], [extensions])) ]) } From f548ab4c44e7ac2741b7dfb885299368f7594986 Mon Sep 17 00:00:00 2001 From: joepegler <joepegler123@gmail.com> Date: Thu, 19 Sep 2024 14:51:36 +0100 Subject: [PATCH 1245/1247] chore: refactor (#574) chore: refactor (#574) --- .github/workflows/coverage.yml | 2 +- .size-limit.json | 8 +- CHANGELOG.md | 2 +- README.md | 4 +- bun.lockb | Bin 352659 -> 355840 bytes package.json | 7 +- scripts/fetch:deployment.ts | 12 +- scripts/send:userOp.ts | 56 +- scripts/viem:bundler.ts | 147 ++ src/account/BaseSmartContractAccount.ts | 353 --- src/account/NexusSmartAccount.ts | 2174 ----------------- src/account/index.ts | 11 - src/account/signers/local-account.ts | 55 - src/account/signers/wallet-client.ts | 48 - src/account/utils/EthersSigner.ts | 42 - src/account/utils/Helpers.ts | 16 - src/account/utils/HttpRequests.ts | 80 - src/account/utils/Types.ts | 661 ----- src/account/utils/convertSigner.ts | 76 - src/bundler/Bundler.ts | 373 --- src/bundler/index.ts | 8 - src/bundler/interfaces/IBundler.ts | 22 - src/bundler/utils/Constants.ts | 98 - src/bundler/utils/HelperFunction.ts | 68 - src/bundler/utils/Types.ts | 151 -- src/bundler/utils/Utils.ts | 53 - src/modules/validators/K1ValidatorModule.ts | 24 - src/modules/validators/ValidationModule.ts | 25 - src/paymaster/Paymaster.ts | 410 ---- src/paymaster/index.ts | 7 - src/paymaster/interfaces/IHybridPaymaster.ts | 29 - src/paymaster/interfaces/IPaymaster.ts | 12 - src/paymaster/utils/Constants.ts | 12 - src/paymaster/utils/Helpers.ts | 7 - src/paymaster/utils/Types.ts | 123 - src/{ => sdk}/__contracts/abi/EIP1271Abi.ts | 6 +- .../__contracts/abi/EntryPointABI.ts | 0 .../__contracts/abi/K1ValidatorAbi.ts | 0 .../__contracts/abi/K1ValidatorFactoryAbi.ts | 0 src/{ => sdk}/__contracts/abi/NexusAbi.ts | 0 .../__contracts/abi/UniActionPolicyAbi.ts | 0 src/{ => sdk}/__contracts/abi/index.ts | 1 + src/{ => sdk}/__contracts/addresses.ts | 3 +- src/{ => sdk}/__contracts/index.ts | 5 +- src/sdk/account/index.ts | 2 + src/sdk/account/toNexusAccount.test.ts | 376 +++ src/sdk/account/toNexusAccount.ts | 517 ++++ src/sdk/account/utils/AccountNotFound.ts | 20 + src/{ => sdk}/account/utils/Constants.ts | 64 +- src/sdk/account/utils/Helpers.ts | 4 + src/{ => sdk}/account/utils/Logger.ts | 0 src/sdk/account/utils/Types.ts | 106 + src/{ => sdk}/account/utils/Utils.ts | 60 +- .../account}/utils/getAAError.ts | 5 +- src/{ => sdk}/account/utils/getChain.ts | 4 +- src/{ => sdk}/account/utils/index.ts | 4 +- src/sdk/account/utils/toHolder.ts | 85 + src/sdk/account/utils/utils.test.ts | 58 + .../clients/createBicoBundlerClient.test.ts | 85 + src/sdk/clients/createBicoBundlerClient.ts | 61 + src/sdk/clients/createBicoPaymasterClient.ts | 62 + src/sdk/clients/createNexusClient.test.ts | 275 +++ src/sdk/clients/createNexusClient.ts | 226 ++ .../clients/decorators/erc7579/accountId.ts | 108 + .../erc7579/erc7579.decorators.test.ts | 116 + .../decorators/erc7579/getActiveHook.ts | 69 + .../erc7579/getFallbackBySelector.ts | 90 + .../erc7579/getInstalledExecutors.ts | 96 + .../erc7579/getInstalledValidators.ts | 96 + src/sdk/clients/decorators/erc7579/index.ts | 148 ++ .../decorators/erc7579/installModule.ts | 105 + .../decorators/erc7579/installModules.ts | 113 + .../decorators/erc7579/isModuleInstalled.ts | 138 ++ .../erc7579/supportsExecutionMode.ts | 183 ++ .../decorators/erc7579/supportsModule.ts | 143 ++ .../decorators/erc7579/uninstallFallback.ts | 113 + .../decorators/erc7579/uninstallModule.ts | 113 + .../decorators/erc7579/uninstallModules.ts | 110 + .../smartAccount/account.decorators.test.ts | 139 ++ .../clients/decorators/smartAccount/index.ts | 324 +++ .../smartAccount/sendTransaction.ts | 105 + .../decorators/smartAccount/signMessage.ts | 46 + .../decorators/smartAccount/signTypedData.ts | 113 + .../decorators/smartAccount/writeContract.ts | 93 + src/sdk/clients/index.ts | 5 + src/{ => sdk}/index.ts | 2 +- .../modules/base/BaseExecutionModule.ts | 7 +- src/{ => sdk}/modules/base/BaseModule.ts | 26 +- .../modules/base/BaseValidationModule.ts | 24 +- .../modules/executors/OwnableExecutor.ts | 106 +- src/{ => sdk}/modules/index.ts | 0 .../modules/interfaces/IExecutorModule.ts | 0 .../modules/interfaces/IValidationModule.ts | 4 +- .../sdk/modules}/smart.sessions.test.ts | 97 +- src/{ => sdk}/modules/smartSessions.ts | 0 src/{ => sdk}/modules/utils/Constants.ts | 0 src/{ => sdk}/modules/utils/Helper.ts | 2 +- src/{ => sdk}/modules/utils/Types.ts | 96 +- src/{ => sdk}/modules/utils/Uid.ts | 0 .../modules/validators/K1ValidatorModule.ts | 25 + .../modules/validators/OwnableValidator.ts | 0 .../modules/validators/ValidationModule.ts | 25 + .../modules/validators/k1Validator.test.ts | 127 + {tests/src => src/test}/README.md | 0 .../__contracts/abi/BiconomyMetaFactoryAbi.ts | 0 .../test}/__contracts/abi/BootstrapAbi.ts | 0 .../test}/__contracts/abi/BootstrapLibAbi.ts | 0 .../test}/__contracts/abi/CounterAbi.ts | 0 .../test}/__contracts/abi/MockExecutorAbi.ts | 0 .../test}/__contracts/abi/MockHandlerAbi.ts | 0 .../test}/__contracts/abi/MockHookAbi.ts | 0 .../test}/__contracts/abi/MockRegistryAbi.ts | 0 .../test}/__contracts/abi/MockTokenAbi.ts | 0 .../test}/__contracts/abi/MockValidatorAbi.ts | 0 .../__contracts/abi/NexusAccountFactoryAbi.ts | 0 .../test}/__contracts/abi/StakeableAbi.ts | 0 .../__contracts/abi/TokenWithPermitAbi.ts | 0 .../src => src/test}/__contracts/abi/index.ts | 2 +- .../test}/__contracts/mockAddresses.ts | 0 {tests/src => src/test}/callDatas.ts | 0 {tests/src => src/test}/executables.ts | 0 {tests/src => src/test}/globalSetup.ts | 1 + {tests => src/test}/playground.test.ts | 126 +- {tests/src => src/test}/testSetup.ts | 12 +- {tests/src => src/test}/testUtils.ts | 188 +- {tests => src/test}/vitest.config.ts | 6 +- tests/account.read.test.ts | 829 ------- tests/account.write.test.ts | 227 -- tests/modules.k1Validator.write.test.ts | 161 -- tests/modules.ownableExecutor.read.test.ts | 114 - tests/modules.ownableExecutor.write.test.ts | 371 --- ...les.ownableValidator.install.write.test.ts | 371 --- ...s.ownableValidator.uninstall.write.test.ts | 371 --- tsconfig/tsconfig.cjs.json | 24 +- tsconfig/tsconfig.esm.json | 12 +- tsconfig/tsconfig.json | 1 - tsconfig/tsconfig.types.json | 12 +- typedoc.json | 5 + 138 files changed, 5227 insertions(+), 7918 deletions(-) create mode 100644 scripts/viem:bundler.ts delete mode 100644 src/account/BaseSmartContractAccount.ts delete mode 100644 src/account/NexusSmartAccount.ts delete mode 100644 src/account/index.ts delete mode 100644 src/account/signers/local-account.ts delete mode 100644 src/account/signers/wallet-client.ts delete mode 100644 src/account/utils/EthersSigner.ts delete mode 100644 src/account/utils/Helpers.ts delete mode 100644 src/account/utils/HttpRequests.ts delete mode 100644 src/account/utils/Types.ts delete mode 100644 src/account/utils/convertSigner.ts delete mode 100644 src/bundler/Bundler.ts delete mode 100644 src/bundler/index.ts delete mode 100644 src/bundler/interfaces/IBundler.ts delete mode 100644 src/bundler/utils/Constants.ts delete mode 100644 src/bundler/utils/HelperFunction.ts delete mode 100644 src/bundler/utils/Types.ts delete mode 100644 src/bundler/utils/Utils.ts delete mode 100644 src/modules/validators/K1ValidatorModule.ts delete mode 100644 src/modules/validators/ValidationModule.ts delete mode 100644 src/paymaster/Paymaster.ts delete mode 100644 src/paymaster/index.ts delete mode 100644 src/paymaster/interfaces/IHybridPaymaster.ts delete mode 100644 src/paymaster/interfaces/IPaymaster.ts delete mode 100644 src/paymaster/utils/Constants.ts delete mode 100644 src/paymaster/utils/Helpers.ts delete mode 100644 src/paymaster/utils/Types.ts rename src/{ => sdk}/__contracts/abi/EIP1271Abi.ts (89%) rename src/{ => sdk}/__contracts/abi/EntryPointABI.ts (100%) rename src/{ => sdk}/__contracts/abi/K1ValidatorAbi.ts (100%) rename src/{ => sdk}/__contracts/abi/K1ValidatorFactoryAbi.ts (100%) rename src/{ => sdk}/__contracts/abi/NexusAbi.ts (100%) rename src/{ => sdk}/__contracts/abi/UniActionPolicyAbi.ts (100%) rename src/{ => sdk}/__contracts/abi/index.ts (85%) rename src/{ => sdk}/__contracts/addresses.ts (83%) rename src/{ => sdk}/__contracts/index.ts (85%) create mode 100644 src/sdk/account/index.ts create mode 100644 src/sdk/account/toNexusAccount.test.ts create mode 100644 src/sdk/account/toNexusAccount.ts create mode 100644 src/sdk/account/utils/AccountNotFound.ts rename src/{ => sdk}/account/utils/Constants.ts (69%) create mode 100644 src/sdk/account/utils/Helpers.ts rename src/{ => sdk}/account/utils/Logger.ts (100%) create mode 100644 src/sdk/account/utils/Types.ts rename src/{ => sdk}/account/utils/Utils.ts (88%) rename src/{bundler => sdk/account}/utils/getAAError.ts (93%) rename src/{ => sdk}/account/utils/getChain.ts (95%) rename src/{ => sdk}/account/utils/index.ts (58%) create mode 100644 src/sdk/account/utils/toHolder.ts create mode 100644 src/sdk/account/utils/utils.test.ts create mode 100644 src/sdk/clients/createBicoBundlerClient.test.ts create mode 100644 src/sdk/clients/createBicoBundlerClient.ts create mode 100644 src/sdk/clients/createBicoPaymasterClient.ts create mode 100644 src/sdk/clients/createNexusClient.test.ts create mode 100644 src/sdk/clients/createNexusClient.ts create mode 100644 src/sdk/clients/decorators/erc7579/accountId.ts create mode 100644 src/sdk/clients/decorators/erc7579/erc7579.decorators.test.ts create mode 100644 src/sdk/clients/decorators/erc7579/getActiveHook.ts create mode 100644 src/sdk/clients/decorators/erc7579/getFallbackBySelector.ts create mode 100644 src/sdk/clients/decorators/erc7579/getInstalledExecutors.ts create mode 100644 src/sdk/clients/decorators/erc7579/getInstalledValidators.ts create mode 100644 src/sdk/clients/decorators/erc7579/index.ts create mode 100644 src/sdk/clients/decorators/erc7579/installModule.ts create mode 100644 src/sdk/clients/decorators/erc7579/installModules.ts create mode 100644 src/sdk/clients/decorators/erc7579/isModuleInstalled.ts create mode 100644 src/sdk/clients/decorators/erc7579/supportsExecutionMode.ts create mode 100644 src/sdk/clients/decorators/erc7579/supportsModule.ts create mode 100644 src/sdk/clients/decorators/erc7579/uninstallFallback.ts create mode 100644 src/sdk/clients/decorators/erc7579/uninstallModule.ts create mode 100644 src/sdk/clients/decorators/erc7579/uninstallModules.ts create mode 100644 src/sdk/clients/decorators/smartAccount/account.decorators.test.ts create mode 100644 src/sdk/clients/decorators/smartAccount/index.ts create mode 100644 src/sdk/clients/decorators/smartAccount/sendTransaction.ts create mode 100644 src/sdk/clients/decorators/smartAccount/signMessage.ts create mode 100644 src/sdk/clients/decorators/smartAccount/signTypedData.ts create mode 100644 src/sdk/clients/decorators/smartAccount/writeContract.ts create mode 100644 src/sdk/clients/index.ts rename src/{ => sdk}/index.ts (65%) rename src/{ => sdk}/modules/base/BaseExecutionModule.ts (54%) rename src/{ => sdk}/modules/base/BaseModule.ts (86%) rename src/{ => sdk}/modules/base/BaseValidationModule.ts (78%) rename src/{ => sdk}/modules/executors/OwnableExecutor.ts (64%) rename src/{ => sdk}/modules/index.ts (100%) rename src/{ => sdk}/modules/interfaces/IExecutorModule.ts (100%) rename src/{ => sdk}/modules/interfaces/IValidationModule.ts (73%) rename {tests => src/sdk/modules}/smart.sessions.test.ts (62%) rename src/{ => sdk}/modules/smartSessions.ts (100%) rename src/{ => sdk}/modules/utils/Constants.ts (100%) rename src/{ => sdk}/modules/utils/Helper.ts (99%) rename src/{ => sdk}/modules/utils/Types.ts (63%) rename src/{ => sdk}/modules/utils/Uid.ts (100%) create mode 100644 src/sdk/modules/validators/K1ValidatorModule.ts rename src/{ => sdk}/modules/validators/OwnableValidator.ts (100%) create mode 100644 src/sdk/modules/validators/ValidationModule.ts create mode 100644 src/sdk/modules/validators/k1Validator.test.ts rename {tests/src => src/test}/README.md (100%) rename {tests/src => src/test}/__contracts/abi/BiconomyMetaFactoryAbi.ts (100%) rename {tests/src => src/test}/__contracts/abi/BootstrapAbi.ts (100%) rename {tests/src => src/test}/__contracts/abi/BootstrapLibAbi.ts (100%) rename {tests/src => src/test}/__contracts/abi/CounterAbi.ts (100%) rename {tests/src => src/test}/__contracts/abi/MockExecutorAbi.ts (100%) rename {tests/src => src/test}/__contracts/abi/MockHandlerAbi.ts (100%) rename {tests/src => src/test}/__contracts/abi/MockHookAbi.ts (100%) rename {tests/src => src/test}/__contracts/abi/MockRegistryAbi.ts (100%) rename {tests/src => src/test}/__contracts/abi/MockTokenAbi.ts (100%) rename {tests/src => src/test}/__contracts/abi/MockValidatorAbi.ts (100%) rename {tests/src => src/test}/__contracts/abi/NexusAccountFactoryAbi.ts (100%) rename {tests/src => src/test}/__contracts/abi/StakeableAbi.ts (100%) rename {tests/src => src/test}/__contracts/abi/TokenWithPermitAbi.ts (100%) rename {tests/src => src/test}/__contracts/abi/index.ts (100%) rename {tests/src => src/test}/__contracts/mockAddresses.ts (100%) rename {tests/src => src/test}/callDatas.ts (100%) rename {tests/src => src/test}/executables.ts (100%) rename {tests/src => src/test}/globalSetup.ts (97%) rename {tests => src/test}/playground.test.ts (57%) rename {tests/src => src/test}/testSetup.ts (83%) rename {tests/src => src/test}/testUtils.ts (75%) rename {tests => src/test}/vitest.config.ts (77%) delete mode 100644 tests/account.read.test.ts delete mode 100644 tests/account.write.test.ts delete mode 100644 tests/modules.k1Validator.write.test.ts delete mode 100644 tests/modules.ownableExecutor.read.test.ts delete mode 100644 tests/modules.ownableExecutor.write.test.ts delete mode 100644 tests/modules.ownableValidator.install.write.test.ts delete mode 100644 tests/modules.ownableValidator.uninstall.write.test.ts diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 9267e8bfb..c20b2d6b6 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -33,7 +33,7 @@ jobs: with: json-summary-path: ./coverage/coverage-summary.json json-final-path: "./coverage/coverage-final.json" - vite-config-path: ./tests/vitest.config.ts + vite-config-path: ./test/vitest.config.ts github-token: ${{ secrets.GITHUB_TOKEN }} - name: Upload coverage reports to Codecov diff --git a/.size-limit.json b/.size-limit.json index 35bf1e815..7b8636597 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -14,16 +14,16 @@ }, { "name": "bundler (tree-shaking)", - "path": "./dist/_esm/bundler/index.js", + "path": "./dist/_esm/clients/createBicoBundlerClient.js", "limit": "15 kB", - "import": "{ createBundler }", + "import": "{ createBicoBundlerClient }", "ignore": ["node:fs", "fs"] }, { "name": "paymaster (tree-shaking)", - "path": "./dist/_esm/paymaster/index.js", + "path": "./dist/_esm/clients/createBicoPaymasterClient.js", "limit": "15 kB", - "import": "{ toPaymaster }", + "import": "{ createBicoPaymasterClient }", "ignore": ["node:fs", "fs"] } ] diff --git a/CHANGELOG.md b/CHANGELOG.md index e751d84a3..0b7ebd05f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -164,7 +164,7 @@ Particle Auth Fix - E2E tests for session validation modules ([4ad7ea7](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/4ad7ea7f8eb6a28854dcce83834b2b7ff9ad3287)) - Added [TSDoc](https://bcnmy.github.io/biconomy-client-sdk) ([638dae](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/638daee0ed6924f67c5151a2d0e5a02d32e4bf23)) - Make txs more typesafe and default with valueOrData ([b1e5b5e](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/b1e5b5e02ab3a7fb99faa1d45b55e3cbe8d6bc93)) -- Added createSmartAccountClient alias ([232472](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/232472c788bed0619cf6295ade076b6ec3a9e0f8)) +- Added createNexusClient alias ([232472](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/232472c788bed0619cf6295ade076b6ec3a9e0f8)) - Improve dx of using paymster to build userOps ([bb54888](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/bb548884e76a94a20329e49b18994503de9e3888)) - Add ethers v6 signer support ([9727fd](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/9727fd51e47d62904399d17d48f5c9d6b9e591e5)) - Improved dx of using gas payments with erc20 ([741806](https://github.com/bcnmy/biconomy-client-sdk/pull/401/commits/741806da68457eba262e1a49be77fcc24360ba36)) diff --git a/README.md b/README.md index 88e5fabf8..82ac2024c 100644 --- a/README.md +++ b/README.md @@ -38,9 +38,9 @@ bun i ``` ```typescript -import { createSmartAccountClient } from "@biconomy/account"; +import { createNexusClient } from "@biconomy/account"; -const smartAccount = await createSmartAccountClient({ +const smartAccount = await createNexusClient({ signer: viemWalletOrEthersSigner, bundlerUrl: "", // From dashboard.biconomy.io paymasterUrl: "", // From dashboard.biconomy.io diff --git a/bun.lockb b/bun.lockb index 951562036dad3a1f86819f65ad7d3516879c1305..db0ee96a0b9a070f57b7076eddfe24358dd1c3cf 100755 GIT binary patch delta 68716 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%0Dx6 z*UbP0uZ=4^-wW6r9n8BdWk;#}5KX|3+$yxhp6Pl4^+Kwv{!U(Jm-gCd+Ht)pey$M7 zHpM9M<J#jbag2)_AWzT|KW^h4E}~+IAGcXkQy;Op&iB2%Muj)~^|xvDR;jx@&~|-K zi+rGu|0opuu08&AF6aqAMk)8(p{QZm`y80^?4@;HW7J@9+|Shal!dms1)#74#fNVL ztKZ65z!4ljdSQx$_hi`$vTg+h>vTwR`GcA&V?Kd`cP*ee_?`lpV(bT*;(&{0y~Wkj zFF~Ok_M$$}wpKjhKG3;V(9A*b;yubqtLAS8`Y%ZaCI6fj3z+5;>3uPlvgMhL11#@e zLOcg<Xx!+<a<o-`5C}OUd~waY;}dQ26&(%7Kgk;F*WjdKMof=1Q1YlT+b*L<2OcZ) zt+$@eTEVN4a&G8UNQK;g&q8@c^WN$IpT}Rf9<NYfv`10Hdxi3?LKhr%#6QFIS(nL$ z6x|xSEW52tfw$J~w6`^OjM!B_;S{@UT^poP0(ENxJ;9SkavndEO!AZS2RT1Xr01N* zi{#iAJvp11N<Y{Ct4f`Hw!R7Zf~kX2f}=){w%8|j8YWxbuCPwK6FaZ-)dC+zFcbQv z%PaEIYc+<C`g*nlYS>z^K~_0B+7?#ID`zTs&8+r|1|B+MA@8UpuaQ07g}VERwRG1p zG1!;~7f0M_lQ1c!SXJ_`J{wk4yg(fd&Uv@}FbCE1o^p_)@$GQQVpOP}sy>$+AI=t5 zq#!=5sZ5r%$Bn3(vFU(an!-_6_K{FM$*Cu}6Xy7rGcclcKV3PsS@=obUrEPqdE#o- zLz*B|itPw*8B)nq^2u$UXIq_KzP|`6;F%6@`5iTuV72>PuFn4XzCNgdj#>ZzZ?ULc zXGD6XnW5~%aoLArql2vRu*+7Ea%TQ~A~tF%OQ!0^xH7DBv04AY2x=e3$7|Ur?y5~c zE1>LQj;U%Y{h;7*Z|5iDKY3e8I)@JypX^KTLn|z<N`C&BUyD*{vOgku$%DCJwuPw_ zBDdYP^E_D)a81M#A-%Vn#G!_dE!PZt+MKxZGO)O2w*~3HhJ#!L1;4)?+t#s_uD92( z#T54yt`GleGAg&OMkua%XF(BYtFyE;m41$NIBuA>!?Ka5izymfQX(kK6ZwD4h5y3) zQQFs{A87+bSK*Kcbq)|6qP$znYs~WfH52W=PjqUh<fk0k|7G`-{ETkMb36-Z)BDQU zQ_X%FsMLE^Y_?|2)^_@lN_}GXB<t3GH7-s;p4XDlIx%*UCr7RM9(gO|>HDPh7k0T_ zS%EySBwNz*;<pcUuA8(I1-2+i`TfqRX~9b`ok5;wSC8R62AI#@d+Ks)GVdxn)N$-3 z3)1U_#kJh#``0%{o;%uL-($v9SHBi5dr@c52}cIgNF`l>)O-3{`NH7Bg54iack904 zN91{dcrbqE2+N_JG6{KW<kyet|HJSOt#t|gWNn3vK5)OQ801E8!^9eP6Gsdi-Polu zCoZ@OWYdlho=SIih;~&b4I4aY!uXIdmvDDa11;_@)}X41qBGT5C)TL-w@PsMTi(T$ zPV^V+Qp26n-=F&8fLMoucj8XK>K(o`MWQ=%szeTtkc}x6t?>7q`0rBr7m2N9nw>>r zg{p(b4Fl)FNL&zxD5-~89ZD?1UuKfnK*mO<t_OT(h~X}@>#$gpo)$s6N;}0T2fPx+ kOwR+pkHphji9ap*MXX0)T8U;9i6OC~S=D`Q&AJWxKkaQATL1t6 delta 67432 zcmeFadz_V1|Np=Du3fVy#UP}Uq7q7_nyIN>BSk|obdYqIYO3ilQ&ZDH%oK8nB3ms& zBt;Gpl2C*kq6l$26d~jgA?NaYzSdfM%(Z{+`+I*rkMHC6`^WY0n%8>2U+cZDb-LEI zu4`xSnIF_nJXibrmdzLCthg|@-ixmtQu=nM0rynf|6IezcW>{r_q_7<-JWPSyYV4a z@}nUg7tinCFmh1Is%hU<&7C}bLcxgQ;h`h&r-wo_Cyg!~TS&UBO(=9Qb`g9CJPbYv z?hPLfU(z}hiov^1arrv7O&nUS>7h5YbH)4%mV9};L~gZ~<!`ii=6jh=J|@fA!%Fgp z7fcF;47Sd`9j*nR+`;Luk-r9Z;iML$#uX0>eTHB8p2n|Qjm)1kc_OtfDJY#(IC6Su zY{yXOF#IQFyV_2JX+^i05Bh)+g(bG6(>l2myhz1#f*HQP!$%j7EgX?wQc{pVg1i$l zJG%;P=$z<Sy+QdyU0myz!>Y%K!jU66eds1^)jPjrl+4go*s9+&&!at`?>QT;k3Q?v zP^b?41$-ntChW?+shg|Tb+Ec|OyOh=N_j}VFl>4#boXhYP)&qM<MJnsMoG5kTKskK zU*Q8Upg>imq;PymK2^27NdD(~xD$*oEGnFkKWS3U)7^=lz^@a2iLJQpu+Gz*v5$ok z{n8qr@Mcff)^WJhb@vjYtP@I#i^oy)<opu;hC<`cOx&5)w7l(^u1UX~<+6PRtHfsb z#iI%)x0p~|GPz({!SH;-`t)|i?mo#4<(b&3(S-bxNd+y&Pg;jxb{G5y!4F}poaL~F zr0+SQ&{6Qn!cnCq1(V7{-{a7XO?FN4#Pz6v>R(hat&}Mknp8ZFanGMVqIhya(Uedq z|6DgFqei!wkUy$mQnKq0>f_o!p|EIdVL>P~K@*ST&+~kPG*LOa^i_k)Lo<tuhLbH6 znp%=SVFFoGFP)3~xtbRijV>rDoII(pXymxUQKKifr2thhIY(Faclkz6YEdw4a!G#H z`K|}XOe!uKSvans1-A09qavD&6UL5eF`{;1NoZtY(TEnM6GBf9a2XyQkhmbdWyda< z>d8mQub%sPpld*n3tfkOjji&w!J3?Rkxxs)jCP4<)0;+?4^DiU-n7lsNopHo#Z1$9 ztQ_h}y#rP)M(0mzF>+k~s06mg>8hcLjy0N=ucwbBrw@0-JbZNixUm$I3>#KDa%2G$ zsj#4+AhTWD&=DhCu^~=#7;$IPr8=E~4~56)k18C_YS5BNF8?Z6{_Ehz@MKsQMkAPN zl+Vm2P}BAhSOt#HA6w9ZOMX(p_$fN^@0_qU{*hc>D)3nHX<j8S*)P#Eu($bq-;Qy; zbPlah+>bOyai3wU{4cT9%TvawA@xEt*V;sA<`#r{2!qGF3Y|GVanV7am0wxv;_5LK zHA+*lRo~IDM&TFyYT!4pM(M_>&ff%G{^AJ*MU)(3>6|)=Q>B)3FPg?9G9wf^9)6se zskpHhg+j-wgYHCVfMeUmu0dQ(#p9+FgjQY>3N^%k7pw*?g#ADlPvw+fl(~XC;a7)^ zC>U0%RdEC5=sIjP({)q^tOh-TU-8^|#*e4x-=hM@>$<6NX(-eTVG*nojVmrvIiV{r zbAeMmkMi6HR!?_>H8O2He?)w3?4z+&q3S;0KKyF&m$O2lM(`$jK=HN*%1OL}pq8dl zqx$e8*eYQAm7&nl@ZPK35Wj$}3*<r1kCMMB_SiXY&b<w*h4Z{Wd7?A0kHz1_bLI1t z>qL90kqZ83uIq`lo<E)EPVf$_F?{+u*R>D8YSE(WT@T$tehpz6tOopRzPlJ6hmXO& z71q?-&UrL67Zo#^IhIeS|5ecI30LzMVNJqmH@X%V!kUCfEpU3e=L_+xLdiwpW(t<w zZ=s7{1Z%R+#jlH_zi~a<9#+2Qp6eU>Um3dLP|Y5_$pwznipz1*&91;pDM$rQ9#O~= zJvlV2uxN5gLBXV{-v9C<*MpNLj4PbnhO5C>oSPLJk4d3|DFsE7Cxt=}-Qs#|@~v*} zJeEVCCc{$CH^7=yvpi3QH7T<fyNZtY_6S%#HE>bl(2S<#<9t1G8GqGtIJV?h?r`mT z3RXvQGbvWPK3o#gR&3@bSaWtAtd3a)t3Q^*Dn}b1-FF(?6$&-M{&1<QZi{7Z%2k6Y zw|r)85}HcClTm^BV^}XZN=ph`jG^HZN{glsFCJ0w)N)tAJ+L}lCul*Yl93~ZD}Qz3 zkHr5yCsM_d<-LZjt9aB3*FVFH*+3P9LQh*iSMe$mG=AoCSQU8jUdJT`lT~hL4Ymrn z;y$+(x|MwD*c&`wbieDdiJtSPOes`XC3`H{L&*V2_NeV)UB&ss3bn}%O(`rGuM-wd zDz?)z={Hqe*Iwg!`CvB$OljNFyH~j$Oncb*PsUac498Z_-t&;-XJGZ*Y3Oy}x3J4K zg^u(EjG5G8(&+qCLUkW?1>8UejdkW~chyeD*45evJ_bJXG3URQc-^{6;G<#gsH0ml zcH`E#AuAX+u5iNS!r`?ZcPEa*nq$LCiq9^|FB%aVR;28qP+JPr7!IN!wcrm<q=FB9 z!Ug0POtN!g|5~TNieC-*oP5fk|77C(!&;W7tqX-tz+4GyPO@QY!SytOJ5BMhF`>|J z_;voDpYl_}-`c-e?^d7AR7G?CsAt^BUj)k@Ur;<1Da7`Bl&V{RU#CskzLd{=bby;e z6IzTb9-cqB04^L~I60I?z##<WKj-vbutua6Tpw=Y{SQ9xrr5C?T?MPb(hEvTic8pA z9rc2X-$%X-{L8Ra?owJEqscS>+N>l_sNKGNDfw(iyzIC?tc&)0SRJtlU7XJO)!!rV zEB~%duG}|Z_4BjdW=~G@L!q~yb<6Yjux8pXPrLl5Z+7*13Z{MKGgpvM0S4Bx{qh!< zVJ)nRukd`c=k~sU0k69XeE_RM$8U8b@dkD}_T<qe#igT0ht}d(1G4dJh8{z_X6|QH z=umY?OKPhjtg<aJ=7<L6!?wBn)BQ-cB3R|Gd)t-U?j5hU&MHzvzrZj31J5tQ8u{Vl z3QN@$?&%{mb2@$v$OKsRxe(R>*L}~m{}7lprhMkq?Jnb+u<EtveK(?`iYJWF3GcwJ ziGLTYg3j?gQsbXLe01#(T>hWlb^0G4x)W?BpGG1MtD^^f<SMX-6CZ)ScBd{;R=v^w z#4|s3Ey?)A6?85I>x5zKL*Vbw)uPW~`AcD~lKqI+2?mnC7Tg6}m+tYNkMQ~*=ttup zK!w!MKdEqrR=rui1)svI@oTWU^ch$gxmZgIMioqZ5L*=}oMaz<LN{ZpC8zIp{ySlH z@wNEXW0PQ2s1Vi^>E!dD1gk;Ez~vgtY9w@`U#Xb_TYT-t_&IC^J^<@PSHo)AMX>TO z`^KGMG`4!6Ijo8w?zt+g6TL~7*M*;i)xfdi3Q9{D+ToL?WNL^*qrP()#}`f;&kZSb z0k$fV2dk^Q!>Z_SZ#nzhw-O!ev}}`n5}uyVvdWI)&L5oo3E7l=>gdAZJQ0q+|3_EP z13xAf)oFV4X+ODU4a8lCY{^B7XRY_@v@HMR7gx&LuqshfFoKOoD0J_yuGF7k^~!Cq z^jFBId610L`-m1i&?W8F=<2;+es@d6%s*T&{RAI^|8rQqIT@zb<uiAaQI6!}O-t<h z*vlwL0b})ySUfV6e5__R*ymb<uJOJKR{Z$<33ipg$ouc*flR%b^pExVMwgDyFKSUZ z!ab~(|G%GB-=aTl4aZNg!}W5+6?8qUp6FX8Z2OzFwqyi*g@U4qrG+I0B`*`Fo*7=) zf(PZ|&{NpzvAbc-lRD9`t#I-wxjOctx+0QWu-RnPj9=(^0y~k(g#{%^|494|(fh&b znF%d;xSm{4GNA=+q^fJGhi!a2bWPBvup07ZnrlFdSlBMc^I$dPUvJX?%6NEs*cN!Y z4@igW;eUY)(!Yd{fv<%d!4JTiN=2|%-KP!;+m<eZ8)K8#wzOZZupP>5SXacc@KJD0 zSaamZn&BgDLECGF?WML6R)z;_KC-CZo~n<0(ddk5TJ@?uFL``kr&k_n)hw-&m37iX zk>iJMXb>6j*rtL$1MVAl!--YzF8ku$GxA=XazyE-3xBD9&$RUG(m%+oIeyy751*XY zI?}y$B7Jx~@?q;lE>yQoV$Se*Y;K!Ss0XJ^OU&<-8GRG$j6|<a*|EB(ghE~MS4qt8 zoEaO4bq-cIv9(KP>^`iHSg}N2erD`PER_&RWOT}moza$eUM^?%%-GFX{5P{|A}>2D z+%~bPARgO~gVQK~_smFF-b0RzM{aGGm;>!>m)JBi9;@5l6~f6oWk!ayPvnk@$8Nyc zj<_0$`5iK2?_;SHn<ZA0l||<XC+7FdjOBPMn%J7187sw7ZL1`<4#|vsnwi)%Iv#7D z<(v^^i4MnVo2c0%JGO*WCo)&J4gCsBjfp1a7iXn)a3R%IsaOeC+)8=$$U|6Eh<0Z5 z$c%l5r9vpYOJ?Mxj*0ZK@mLvkpr@!}-q6hGDy;U2UisOP&pReIA!lW~{-%fHnXxOe z)Td<bni<`U)g`exCp&f!#Zo8QqQ35hrIuB-HM$Z@HHz5&+32-cBIAP0*q_NblXp}& zE3LCH#pKm-mKy2e-ayN>Rvvv<j{^PqI%Y<yc1ffc$764I;W3XabSO=aFiSKwY?UJC zc1>&|%RHQ|a8^xhWfrW*@^eA~IiXNXt7UY|jJCpxt0Q7XO5qQy4<q;IByuOlBVRc> z;nc*YiSgK?Q$wNNWC<m<7SJdxRkcb&L(sEZC`8?v9(mm|qf4>kiMbuJV>?Ot;b$<K zo|ed+6p!_%I+{zhY(GAVMOhT9ne`KvW)`!je^y#|7tIWy!-rw1tr4bkX6#|F*?x$8 z-93?B8jp2n*fbM~9-SGRj@23~-OkG`SoED*SehAYb-L@@>bCl$u^47@=5@@BEyZ$` zrfHGiPETx_5|4E{!#UFud6#9SRT!#s-JZ#5E33b^s@c{huowVpq;A@YrC#RR<vb1P zKbor!W!4SHl2*-L^GmQei5up~?%YJ~^mr_OrW-u2k9cOZ9IHp7Cd<V}Qh!a%{aCsj zT(9*w%XJC;^h;J+g`rD(<yndJ8SzM3uSD*Qcv@aBHx4HJXt>o49nzu+ITD*kXUDdY zQu$nbG_WR<Ktn_$7>6NPs<yq{Vz*&wj<}2BE0XF+a^9YmcD5_TN|8ZlC(=8`V+N<X z2PY-JgQcn9F7i4IHdhYOy4=QNA#0kj$UKFmHqu$dRm)4x49$~%-g0$Vj-@iAiHwi4 z!g+~J<-Kb*J=eY5>kS`fCf*ULd&A7M`Zr=7M9$<J?~p(4z+d0yN<6bVmWHLtdq^U0 zcxLQ-EDaMAj!SLad9I1o?6vs{mL{XC<I#QGV7rBSFqSmtGK=^PSgowJ_0+613{{w` zml;#FualUkT{B~6W9f9vVeS`3T4FPo*^8u99P1a=_#Nx7`P;5vV$)^u*cJU;Z-&g) z8Z0|l8c}=x$Z!1;b1sjkwdwDMGC2cc6THI}`#6@y!!8lAAF)_zx#Bf>Pdnd@qifye zSSsDNJo41}iQFsVvEOlOw%a>F^o#*of;Y#rV`WO=r@i-NrD13`xv@*Tz*&AKW2sa( zSIV#y=2nA8vD#QmwfW5F<o3kuIB{Td9CWuCg4HoG_t{QqB-9+;9W&FaUg&zgqU{&p zV3Mgzb24N1VyRxV{o|}O4Em2#Yr4e;xx0m{<mFgeNots_>EW#KphWsL@z`FRs$I<9 z5|171PGxWUk%GaAP1nRDPYq6_UmK654RPU|bx3Bc+h0~ZGg3Arv572ear&lq$c%h7 zB#}Eb9y?>G>wi`!mi0AQ9TUAeX2<rDQm3cc$<!{tq6c+FVQHeV{4i-A#Bwd%Ix#c$ z4VGpkE6v2rNc~}n^y}i0vxg;eq1nR{bD&p;B{o6zhbPjnkH^LhceSE7nYD|tbXvPm z#XiQ;>|{mc{@iec8#s0goiihSM<jCR$D`Nb?2(w;Ej!kqhmx)~vpRQ$w?YYSSFzn# zngOf<=VeAaj#Mi*UzZ(wjub1K8<6P1qe7vP@<;W8{d}AHm{cd5x54P-!kRabjRcm~ zD|btO2FuSd&ixCPs$D&iab0HYq{2|>T$@upT!z&(vAKJ8Y&|JvwifvO%*YXA5_1;B zV+CVe`$P7sU4g~T$4%8pwXuoZg=87)oUR-08=KgK^H-c_kh8Y!shn|csbSJ_|1Tex zm}BCRXU8QrnRx6cG%j;@!;KY<uXOv3-G{|}*K5CHsTua37&*Bpk$!VLI<klgCTiZC z9le(ncM($GkvhYsvWk=H#iX3?c~UN4`h=v~o0L-*k~+)Aeq7-@VIqBNebY!e^?6dh zl#*oZxujfO7FPInka7_xOiD&fAeC#&dxDfZZ)9>ZUvE;rE~IREvG+)EGxQyiSz56j zU{zRz)fUaJ5ouenG!H5+|0YwCYpAB-5G;+0-S0;4#$vK|&W@!|<@EU7wciiRFJ7Er zDV9dv-OPURIhnfMG9#x=OKe&ak4>KD>cG8|RqGzCjs#%+n3aa1GrBeAgz0XvWj=Ac zIAKO8gv?^ZJt6YUj709zcx3;K#2jeQ#feQz<FPL<cC(cWkVRt1C5ha-;%S>N;ld!! zHZn1@cPy<exuUaOiWHY6(wD_!kK$CvP>n~kltXI-r{c2CEO&F=-2tw{YJ<kYU7Q)& zP@c$L9*<_tWNl3JTACf3M@lVVDPx=PHdbe6(bU6cRayh0J+a0lHZRSNwz)JE8m(09 zE>fMyPXky8&1G&m;v!>5{vuW<Z7-u$F88Te7o}|Zs^|<XSM9BrWTjzfSnORa`nxQ< zH|;Rn4UlbHv>fX!>wkrmg5ABj<`r%|a=Ch8U8o91R$P(Dy)Pd98OP8>ulus2{jao( z4Xub?#pm_bH-J>GO)VwWTdCN7Qd;16TDdMW+WBftTeUrrOhw+mIx**gc;t#XiA~U_ za}wz*<B?;pN#w4KN3Xs{3(s6C@ULqUn{Z@Zs|u)qn@IJM6#bf1u1&R{n=HQiJm0m^ z;)+!Ib#|qsyC;xx!=ugdn^>pYDsEkp89DFzMDD71?B46$c-s4A^m{DEnRcHsKiS&f zNDa2W^KanAl1)8K>Rj9Is)^(cm1m+zpF|?}k$CJfoTqW7bi2pf;Vn)vKQq?&Mt42X zQLO!!W2xKR+<P9Y2Nvr#o!E4Nz2f(Fs%jIxva=&A7bJ35$0Oe@NX*HP$LcS1*H0`l zziU=_VPezjcx)LyO$)aL`eb1u_px}i*n~no6TKeGjy_JRlTH1YOhsDVWHXJq$&M<S zo+ib!;jrx30a7h(g|usHcXP$+ad~E}7^@3fEqj@-#A=VlwM@=Wv9hr2<c!r@<Z`Cl zYvv=YeokY%-~JY^OS@wlLrRV3!W+r;e@i0wiFoW6$vAl)<8nLcRySDg0ev<W&l4<D zY#U>*VQH;%PmuL*bC%n`kHu0>I)$98|FWp+pIExYh?|(1cKTvB9&W{)9!tZP%4o5h zcn(Wz8MXN)E4(<7yN;Q9J55d09LsDYr7m#G=5j1ob9LQ&SgmZN7T)wb+#uOqf8>li z5}Ve?W0&Go;cTErX2w3mItQzoeWp5jNpfN+ycDao&6zhTGqw+_4;IslTXoMn6S>dC zW4GK{akUe$9ZR#!J(AU5>dwwAW6BO(n#kP{k9E6?56fIB**q!VmDq&yjAib2OdM^v z4a?6?_6nb1oo{;82zN?bo-A+c)U5FGMEY~_=xg}eCg%3bj#ataO$A1ReQGvVZ|yMB zt|p}hR@|H3{VOB)nT&f}huOC;(HyLPb{R9IdJ@JI=$0A#2+PfORj|Pdr!fHBPo`o0 zHR#V`X*fbALvJgv&cKS8yeQVaZhK0ZJcLchQkiTnS<~O}78<oW<UV&jFw37|kBp^K z+->A`tP89)|I4g23^%JZ<J#TtEc$>u(q;E2=DZY-t;4DDW)ggrRTZO6V)KyfSn~&5 z!`W32$&3xaI+aZB^tWKS*|_!DtTYUFy=YF<U+KEj-j^feS0?6cibo&B**Z~kS$5>3 zm5JQ^c-o;4x+z-G>F43-;3~~4xoaydz1G_JU}Dp-cr4=~x9{RE#nai-tF)AC-qJ~* zkaj21xo2Q?OVoVbx_ef*t3P5Fo>x1ik;tiV&&N75vDvx1B;B!Ak0!@Yoi-iIttc4- z*vMmP_h(NR`yQ*}<guQs-7@dAE3o=j<a{4%K!r8vv5K6_*(_n5U7_v9>Q!O2U*pcs z*s`H6$I{}$GR+%?&1(|rTjQ~2k0%ElXKWUhhSO$=K8e+y3EL_Bcq09cc<i{f?%qQc zIq_JmzZ$a=>#u6meImKWsMNk#Z7G%U$GRG;A};zN7Rxk4@nj`;tQ4!Ft7DI0x$&6K zTc1ClOl*299zF3XU7fvnE*V0qb48<X#Ttlpn7t6%tm9vgVzF6a?Rx@CYlz#rRax(@ zYTCoPoQ<VgS}m;@t0Pv$BwK+)qkNd%|EE9gHdrpS6IKD5TQu*(%C<RmB_98btK4DQ z?!~Ug`fI+whNU&|AiFe$Hn=ibJIUDw>vUJjjI1;aO(VBqeGn^-<xcmFx7-8WiO;$= z@qABT564oRduG2GOa0`kGVVE73U`GIc#6i-N=8m@i@#wFt2o1j&%2!5qA7DNRwt{m zv_#r&Or(FnOWchvz%G!nkFflmlgt0u7hE`NMCZ(CKGtdW!EZGwUSjc(_%kVWwyS3A z7hOM4))Jb4b(%e$s(Ck-N_JD}Lo9U!7SF5oUrKD+5swXd$<>cJ%-&=LmhS;N^+PO$ zyLTZ+zU*d$yDv}hmaD`=Sf`THUJ0?^u~b2~g0<V^EM^MpO)=JaX!PpyS!o!WU~XvI zy^`FQ=`r;ZEM0$`phIT#6>0Vr;bE^P-}`F)&%x4_@8;P;EM3n`X1e|pEH{9fS?6y~ z&PZ9WV`(*UIcslmSCg~O$I7u<-t4S2j9d)1D9rlfUQ1R{({tQk7FBsPVEuvh*99>7 zbvBfg;u`t|mYVIZtIVx#k~4smc?p*03yaXg%*d--6LUU`$0BdIE_6>Iov=ob#ZB)! zuzF%0W_Jy{v3%XRr=Rj>V$<jG=<(YKPxR`V9UDtZ<Lg$eC0JSZ(}Q=n>0S|S{I)Xc zWxyO#r;zbryDa>OrBV;IlO+C5vWmJ}UWBE==Bb<xdK9Y_7MBTcNIu1K4b5OYj{8^A z(&&u9I+vWT6CT5AgXJ#7FR)Z5uOHbjHhz~OP&K3DNb$<+^6c1hQn~=yD_oJ4_Fi(S zX4Q&Z{9a<y*YU_z+Y{;E#A6?CcfISjrN{4ZmjLajdLyw^S=Sp2u})3Y{2)8_FH$<a z%@sZLL!FeZc<d}vS@_u-@fzdu4-@I%#$(S)wwbq%&Z_#6_BwiBHIdZ$a+|y(!dca^ z&caHrkI~vYslQ#03rO|x@tJ9FVqI7%W9;OQE7yMkmO9P0CVKQIs@diVozj#@mJyqW z<@PB0?BH!IO<?!fcg&}@F?>#P0jYRJQ8!`n&`8gIN=jD-`A20&oA0tuM+KeIl(23M z<u)v}$MtHX&s?SHudbPCmtgfkOSU!k91d3lEdVt?uQ)Fk&6!xXn-m&Z`gvl`zIb#W zPF_oV)2Zqgc7k%#nndcaR;<I~ooh~Z^aoOX5}QY6N6+7_S)#f77%4Y5c*c%Z`_e5< zT)<=bToKE)E@N3{Y%Z3)*z6#sVY!je<f#9Z>qQnntOBgA70q9Ur6#fzvg`Z`>r~en zqcfu&z9y&b$?2rrrM&gdtTYTi%-u7iv2X0=mU%LSl!~%%&ti{Yo#u+l$&CGsrCzpG zNb9!8jeSMGF7OUJePf?vonb>YKqr6e792Z;V{@^5FQe_k(zWJ#<jC*bddl^CL1uI+ z7V9h(dzzG104BT1jC}uHV$S|}r0w3srv33)@m|*(w4XikgIJn<Zh_y8rFrG9>t^3O zi$^WyVu80<23hJ>VyPZXB36!%uv|xQ&8Ic}!S!iHV@KoANnEAx!)k9&lE)<4=`}YS z>;9OmT*eJqX&6}*wRr+d-RmBTs_%0}+Ph;k2dkC6!%QTVNiH6iuFs5a!)h;oq{dHX zP9z+U_5LY2uFQ<coS#g36}-Ffs!DE&uluuWw_DE!V5t^Pn~$ZO^hrrpn$O7Xp4(jX z7kjb`vSZn#T9L_p0`oPNHc7laX4*FU)pZUPe<UjnqpdAXtLkG|ny0o+vCwZ7HAU-$ zrFrUZ*=1N7C+;G@XH~^uC7GBV`-zmRsuuS%e|KF(?RfN>jn#(`<|CVn!~fuYjXjkv zf(2OTT8rryskYzbrqL;9?{|ahA{Jn|%29S?+kTTCBTth9t^sroV>tk8pgl+4YHlZ3 zn$&g^5c>m59cN#^N89{KY4!oJgp|6#T?osuG{{UqCfS!*ep*p_EB-Z$N+9RptTYT| zw9ngB9tnjLH9B?X%5+)m+o9O8;jq1p6L1Y5++wM7+(cXCEnchByKi8raqex%p%ItU z^>r?mTQ5|lMOY`>oLd(Xht)AzX5^qMCbt%ylFz@6QE9xspxR5YRBg)UOz&W+7BrBZ z%)wQ|b{yTyrCwNWZsjfIv9qe#bTFl@$E!U8tzeVajDInsc85&{x27~Km1g(R(WO}3 z)Txorq9#3q*kh_C%hv=QEGw~@_fq#&Gn=G;;&nIE8}W~4E}%3!ontewv;w;6^AeV; zciyb5H2yV>E`B#kZLs1t<5oIo0+#E_j4N$M^^cp;KOp(uVwLF1Kf&pZR<TOlgu^en zJiok!<;u}E;yC_!4*w`+V0LUADHY<DsO4Ci)vPSU{D!3%_c=<(8ew}ocC}oHH5iR+ zlAJ$c>Ev!PIhB93b3PW6f!oE)Sf|>Y8N9aTpW_U58R@~vSlRl3C_0IMzcaw5UM1Dn zrWzd_4xMdN6G)wDQ%{o0v#Em)35R;w)BsX8U*w)c%$z#mj^&L*_FvzIqHr^i2AE~c zX1kE^*Kt*tizO5R%oKZ6<|=qP0L9TsA=&Jr?NON(-vuaNSN;VQWD^xEA;(&d70}Jw z{}ZlGOs<cs%&J%~p!4+h=huMP<G*1QkO#y}09#OB&;4K>;-kR?860Bu;AEh<sX)in zgB)8&*mSNNKH2ujMYuI0GHQT1Ko!0Q=%~zxV&7)H|5w<J$p5B5HS7*wk-y_3(bjnV z-?Kaaf05CZ^zRG$U+TyGA8W`^m_hZzN1A%|!-tfs)lUHp&pIC~mj4+b{|2B#EdTRB z^Yay;qcSW1t3bRN=n(5VcufXJCD!N%98~Us`r#vcD*qcm=i3G}{oVyS{*Gh#KelR+ z!=_1ta6>yPpL+T4Sf^qCZL7`Z+8$yxgN?O4{*E=v_jp~bYJTtSO6+DuC5J7T4V>j4 zeZYU>YUKIN=VwD=kH2H(<DP7fzu3=8IaFhAUUopZt=L1XBzF$W+zl+V*4sm@B<s6n z7IS-uHBc<o*3a^653&4*djDbNUeNzesY9&f;okl`)>2;2=d16zfzL12366m?;MU&% z@3{Qm3IEBjGTZnQwe=?uYwBmia&_|l%B&$c)%!h<Om+ONt(b27(GZ;htA)9~pvo-& zS>7+!3D1SAnEl6ukF=Nc05AU?D|{fj+A++BkA@Xe$RFurW&9h~wNm8uzhO7mB<SvN zk<VC}<(lFB|A|$ROME`Dl4aih_k5mPG-mmXf5&S1Rp{#Ixv;X%^ZEadtC`M?!wq$H zgckBAV&*ocpH;m@K1!_QE#4NZpB8&tto(O)TP%GkEZ1H9k-l7pXC?3EkN6(XD`arM zjjeF6cT{E-{D1<?eyVN9<3XRTGHZCA^nS5=<ymi6X1Sj8{>rTSZp5#pcZ=7>O1|c8 z*v*GZ4x8b1pP@3#wUs~OH@q&^iQe-5ZQg#z>y^0{`F7z~`@it|7h%pX$5&q1<Awjk zI^lOd{|~T2e)MsF$14A4bjAJZ^ND5uuC-4Y4tPPV<e%Oa+a$Ra5aEyPDzM_JdAqu| z(_tNA?MWJW``>Z-zZ3pH@|XX|8mfiI(E{B#kB8Or=AKXREvw9Oo#g#u<!|9_vC3=Z z`4p=&{%w7R%3P0(=lG20dA%}gQ61p*3q23<`6{z2FciNy-|LlG^Di_EK`k8VGmi2Z z|BiJT7Ww=ourAXwpZ|Zt3Yp0td;KY)<L_9~rTh_J?(>ONk!xU8{5n`&dxN(Z!aBs# z7s2X*TVSoKcX%Bxx55&iaTzS_ZqF-V1+0Ws(8I7!v>Mj+{2Z*Ico|lOUWb)`8_a*9 zcl5`z;@|hSSouDR(0&Dejzcy40#=?cJ%8=}-^j@!Rt3KEwpa!K=xwp|pS>+sxxaY+ z6_)h7=ly4S;efmxV%4k)rKq54{80hbWq4NB7`9Ga)9bawrgQUf!`8}{fvFB^2rGLd zSch1}H}$q<v#vQeEXmEh`|nt_INt038&)+=AYSF1==mgAt!Pz6|97oRRB#Pa+5Uu; zIc&aBeGfrC%a_v&)-d+*c3&SR*7^E*?hosH1HFAAtmA*e3K>$xPu!tcat!wc{U=tI zk^E7GM)~|=*`vK(nbl!qyuUKbKd#DQ?%{c=FJPM33_8*8JZ50(&U?9+XTyrS((~0Y z|AnsAAI}HFw_t02+~M`5UKgvLcX|Ka-oD543RvfRSRJDiJ&HqzSb?iy75oG&{V8v6 zfHiV2d3!Ugg5HL8Wq$xG{|;D(SowE(Tdd?4-u|MBoyg9i6YoY)0bjv2;a_~l$}Igi z{F3(bM~iBVc_M!e_;9$Pw;O5xaEMjW6TJT<Sm$d|?j0w4M=MxIWmds$ykD%qQ((2M zBdnh40;@u&!a6Fm@^|xk53h^mFF)NU&hXq5PDeNo)=`<|>dzmY@IqMjQ2j|^6`b$= zVl`kmEY~RS7gOQ#&=?X580!VG>~WsQd%sxzB5#XT@C0v*rBC#BW!Bu7>it1x{N+&K zG@n7Nf-my6SjjT}sO6V=e`VGQuJ-=_#2TV&$)~K>^T*!N=lejhPMq*|WmW}m^!h^2 zH^GhYuZ1-io`IEbgXd>q9b#4RC0NVko3PHa4Yu=N2_63ps|EiezxaJ0C)SBSfaUtg z+dJWw*ay>X>bb-DqkOexICgjRBYcLsUZ~6psOSA+B^&WaEouf!Ki+e5SQR_T+bv)n zVpXg)ELVH}D31Sg$|bVAqXVq2$@X?9Sch0AJk|TVdAldff1%#|(TVds_kneSzTQ3` z)*)8Dfv_qxq})4(!8-8>FN}tDh?Q}i=Ly~~mVdIh#X4cB=PBMVmVYX&@~6Y9z{RlQ z%V&DwQZLN*!qwis7FGdsy?wpsgy)5xZ-(`nWeKbkEroT6b)vgrm2;2xdoE9P1Z)*_ zuMZHb<`4LSR(gKW>tf|!<?YI>3as|}8d&y|HeY5k;aCN%^96`i<MrMaOMgae=C%nR zSx53lFIVOoW?LJcmL<RG<;tvPyzTvBRp&i#i)HVCb+(T@f9&<jEd5jO{~Ip1{q?!e z@Sj)(?e_V^s^Hh&{!grY-}-!FHTXLp|3max=lIcQ5G%tzZ(BCYP6;<OPn{A@E7$e4 zA5E<fW2o?|u<SI6DXd~@dVghB+#&ci8;^o@&N@DySdFdg{q<lioyS)5TeRc6&;-^Y zRsl`DE!K%ogcaDva|iE_d%HWVxE`>!)_q_dm01<M(EBf}=6520Ic)w)8UEgux3PyR z)(oiN|M4eRI={N^fAP^3QK3**``58rp5tw?y1bjW{~eeAouDqR{E?N)kgbaT_0g5Q z_8&0)*R1%IPp*3CpTXHN`yYRFWlzf*tN4FDx#9yWKbQZne<I~O`u|w&asNfee?Gag zo%E^iDzUDL&w(!AFMtlQ?A<ar{*JZo?6In2t=N@6ppt~`W<_N|1^@HO)#2&}j=y6q z<^OzgRrwPu^^|PgQ~vqnO1<%SpJe^>$(0tfe?Gag(}Pd2SbNnW|9o=QNb3g2|Hu5# zCs+S`a>dILCZ9G(|9o=w&nH)Q72=~T`%1R*Csq<<|MSV!Kc8Iv^U2jepIrU($<;rf zT>bOO)jywHh5q^E%I=v$l|RYS)7(FwT<Hbk|9_uc>7yo&|N4_F^J`xC!f?p+J2%`P zTIs0TdDa^2=rKpN`dH^kN9!FO(bqbQ9KGPEK|kx9;%JMbrv0t6%+cG9TApv6S2)_? zsQm!zoag8>NAU}+bD^U>j(QBV&c%*?a@6}m>s;>WfTMnctaGKKYJ;sc*wJH-Y7Mc@ zk&f0oI%24G7CCysQG<NzoZ@JUqo%{Gv&_-kj#>`4&MO@4aMXT;b<T72nWK1tbuM(Y z$5D@w*16cxPmX$zvd-m>4mj#J+B#P{s#a*N!HyntRBMcNj&!u%(Gg><v&hj4jv9=! z&MA(zIBGiHI?Eir?Wkpubzb3Uhoknz);Z77XO7|%taG8GJ&t-zw9dtjesa{i#5$Kd zI^d|^B<o!1sM=&}4R-XHqgtibInvR3M@LMt<%IIBGD}I;S|=;;88~>nwBhwxgEQ zt@8>;I~=vY$U5ga`pi*$hIKA<w8v48i>-69qn{l0zQj70J38Q~Uzv5TbX2X}T7w-u z=BU<8>m2E5y`v*$S!a=>7aTRX)H<g)+Ty6`W!72d=xs+WFSpJs9PMz_eztYabM%>` z_!ZW<(9s@8J+8FQ#gP8xT{v{$VEr@r+f1Wt!+aiKdSAu=k2d?-aM#M}?PjY}4@hk{ zH>fT#v*y~^l~<$gN>P`Z*7K}7cn<1<dBNCaW~WnYU4z>Fx}bWunSY&)T`zTCin_w& zTyNE)Yf+b7AB?@v>~(5`xu|{T2h|76lKD1vi`3{1LG?kCcY{^S=Ao`mQCFF8!m2H= zLoG-IV;?cAoVr75?HhyYYLkDXjh%Nr>c$jxjmcPG)%bkW(gnfTwPu4;_egEBFsMFh zCN8wGi*G>PmZGjRjf_=$Cs1dbVC>Uot5Xk1ZFf^p-C$<jWMfy}h`K99ea^JL*{XvV zpf0#M7`xHzbZV`IsNEL@)fdhDMK*T5)O{)H%O>X*s}>p5Ww!)lUom@~+TbSCzPAR| z&1T81Hg=2D=xssuHIsLnRm*NhU7e!R7mKahauI65;$ZBXW|dQSNUeQ)P~B$oZ@01Y zZb99cqP}A??yze7R@Blvg0b(K4Nl!7waJp8`o5XC#KtbZ4Ru?Jy4^Io)2h7}qt3oF z82h2w>eK^L+bs>MJI$=6Hg@IhsJl|sPfY8(tUCA()CG41V|SUIPOY^BwfnN5`nj3E z%*L*lx-UiDZE}`dwdhXNWy^!HUzxp5ZLk!z@7+Q58?)qY8@okn^q!#lt;xH`s%3Yf zu1-<+n(zv%wp@l<up$`ygIVR&9a3xG8}6!q$(&p#_l3-`d&6h4P|jP9yfH=oIb;sK z&&u(;kxTCjM*kWz&pLUJ<R<qA<=;c5<bE5y_#WhKDf0f1Y5ahdd#^yA{Xj7K&yab; z$p<92TN!Lu*vwjKTfOpL)LkiR71R1bs}8;ob-{zd*r?g*)LQqWc7G_SRyXq>va##$ z4<BWIdMMnb^1UNwa#mTj=mBDvtqR80FngWaU?pnbhl6TOv*ckLyG3gBk)V38$$P}A zWe=jRPEj-Tr3|{GwR|XiggNNZa8Bh~9cETJb;m=*)?OVfxwgq)ZDZ%HLfx369%(Wj zvugZd)Y8X-v31M_r|yy3WKB@5YbLI-v5Ox;-Ik)(H;o>*YVSv>^W~2R>)g<6b?Sjf ziEXzwSaKsXYpso4xf*p>ih8VR{e)EqKZd&CiC}CKv(u@y)}VHOGN?8)^PjY_>!t2X zQJb5br>t7^IO?*eg0Ux>y-sbg7ParXpxVMLS!ZLnNR6%!swbPg^;Ru=0(EtY+S-Jl zwra~KQ45|9#-3tUIdzBB+Rp^lb|(KB8$0hQ)Qu@>rpee~)%ZHp(hb4b4rYT>_egE> zY*5WM6Q8xQi`S!WOHn(UM$cKb_tU7ep9{uzF<YH_Kx(_^gKCbM^}LN;`3&l=6t$aa zz0s<JH=r)q7>w<1b~?4zv#14E1=Z6{hZk(@da1X)5LA1b-A*lf4z<^dLG?^?^NTjN z!Sks5Q`BCj=Sx=IBK3ing0W|tU!7XE5p~eZK{d~;c-h9bd;zuQrl5MB8L-K!JEX2l zQTv+MD^{KNBI@{8g0cP0TBpWeLaqO5P#s_jU$wD&q;5`82bwyYt-APS)Jrx8V+Wa+ zo!Wa7YKtvFb%>e1#l{|xx;;hBH_czO>dIG8=e`z<9d6!r>fl#VJHH-O3(VE8+t^y0 zQNKx1N0|;=t-4<7ZCit}g=V)?i?*QldLyWgH8;OuV;j7Nx<5r7Z+gCI)h$vVcrzGV zY<_iW+3To--U_M{&5E~dY|E|OHEL}O-Zdtf0o$y)V=J-iwgqELP3&!}&U*uO{M$)2 zls1!l^;EMK)vfkvA$g{mjCYcrs@5~z6jpdbX<f;4k=anma}1strp~{TQT87Nhb}e~ zD|z%k#a&`v{>u}Qr_3~Zw<1cv#}z6!(<?kPt!Jj$TH&!j0v4KOn!gu}y41|7@TA$O z%gnnKo~qV!xoQ1=GAd#{v(42No=}?p`P&s{XN9M#ZN`<R!w1QzP?|nazsk(7@Km)Q zv0rU=S9l2G32~0e*`ACd2G2F-<_Zrl67gJX_Evai+J9m;*Yw<xjB-z!^URVI&voY4 z6wmc0@55l!e6u3ObAt(g6wH$_15!LUnpG*D1tzvL7`4#kr+AE6o8r02WPBWqy4e)s zVRx}-2QzT<$H^J!+IWkp^NCd#e~5a?CqeZ#^RiQWe}vlN)1Z30nf|GbJs@>^in_!! z-(}U6J5lHE3dSxq?>cqx$Eck@3#!Y^)t}keTA!ePlcL^jI(%-`^-^#9JQ%ye>~?C= zr>MQY2&(s)o4>HJ4R)dKPf;H*J$GAmi_`~p2V);JzdE(-Gt@y}2Gvz&#g{g=<>#n1 zzY404m;ql|b%)e-De7ty``W7WzCa!Sbue~~S?kpJZq)kU1l6^s@EaSuN9yJj^+{7_ zk5w0ciF(PNVC*{cvQvA1h1%lVp!&3#{;iEYAa#3+y1_L6&Z;ZFMxFazF!nj~u2Tnp zgW7p-P~B**-fLrP?Lqw}MSan9_};4PrQY^^F!p7$+o?t0qW1bBsJ>!u{=vpJ_zrb{ zin`hK{L!jgq(1OtF!nX`t5eJNq7K>@RJWQH`)q8>?@??16ja|d1AemV4yo%>)NLmA zvsLH)fI9x?VC*|)tyAMaqSpT<sJ?3of3dN9q;5`8-#2xBwd&%1sF(a2jNNWtc53gR zP+R;KR6jJ+f3vX%q;5}9cbewETXp5nsB?c0#(rYnb?V?>P&@w-RCk%H|FE&OentHz zMg81#*l*SKQtQtN#_l%rom%u8>c0I!^(&Kez{WQC9d+4(p!$v3>(nh$`~DeJzcow# zw6SG>gpXVhjRamC?p=@<vCm-p(N+hwA51uG#T|&IARJWpnN?1mcL23^BocTG|2b@i zMIw3(kN=6hF-870Y!0nr<vo&1s|2He51VJLykK#JEqv9Wx<716s@mY*VdQNo@}FVT zIBMksl4qy1IBd2?ZL3yBP}@}twyKJmRn4k{tDx>mQKP1Hb*t8@in^eBFt)nc>D2X7 zyQc-!n3<nuV~e7w`%=^zCMRaq2GvlP#e%Ul&0eQ&k=i#ss2*&Vq}$lC>Zs8gK{dnV z)v#*IG}P58>R~2)kX3g`EjTC`TidL1>bw|g?V3ULNRwaF#>Uf8H>Rj{OhzrM?vYwr zD;QhXY;fx08mLVU4yybH-N81t_d%%JQq+c~(IHknAa(X3!PrJ-t5a9jL~WN5RF5^Y zGHmSNTBy5H)F!6&p;oPRFzSLsgR#xbPN%My+WoMg+T6@P%*GZSg1Rq7J<;SGZq)`E zsLKuy#<nnfow`M8-`YX-WV58UjV(JAHF`u)ZOvB`Tean3sH;=dQ+P9L)g4j`jts`O zGpn3B?{L)GM+MbPlYf+rjn_uqn4)$t8Fj3>M`~%EU~IP8;MB!Opf))=sCG6JkG8SB zk3`*uTKN@Tmxy`dYWo`PfaDf+gTXmwdR-g5@+j2psFj1eMa-saZ1CVZ$nEL{gS(qq z^=xphqfvLIsHdCO^{u*I>Vo>g*q&ymQ;X`Nc5e_=&ouKJ*w_a3Q1_*%y-ZF+t8S6H ztYI+rY_r#?W%W_}9urja%#velY|93y(MCb_Jd@YRsyn2vPEq@saAT{^YlvFVI2haC zta57n7}VOw2Gs#3|5zKlN9x8Db)d;O&Z>(Wp_U#Oj2&b)IJI|U)Fw@W>JT%riH$uV zbz6#>ZyGhV>dIqLXEzPT4mVq!I`}x$cFlrnftl6J#@1?rx+_H;Wm+F^)%8*r93PA= zG&`MI)D*RQ^PoD`%x`XE8#F`Rm!gh0IVV_ki_~Q&1Y?WMUZ<8FkJ|UdpgPekInl<p zY>pZ|DX2~|c_&$Qht$<6YN-jgu<E=MPzzcFW2c%`PK}?4TDxUXoo@15+Sol(H>RjF zOvcGpU3?O1>B+&^OUwqR_HKdNq*YKYHxpag*aK3xrKqz^qt;ek*%Ebj>tO6<W~);N zpN!hBO;DX}X0@@gwOXO>N>Q>xvJ)dZ`Oe3C3P+b~?4FHEQ>^LG>ClzpagJ&<1s1 ziaOWiw6p3Ksmt00W3MxNomzGZYTx!jb-r2B-p00UiyF-gstJ>qY1JK4SEr~8OgPJ` z^V*>nWCdf5S>@Dtd(_$;g6hpCzk`k4BXwhndW*^EXw}7;sHGi)vA3BGPVJqA+9W%u z-fkvl+t>qAx232{OruU#UD*M3cBf$MQnS^mgFB+O>l{><nOU7}Y^`k6T`B6_rghw^ z>!mJ;2V+;5olY(4gxbAJP`%I0?_y&cbVl8mqCQ}9x>|LM)MZ_Ru@9QPPA!Y0_RR^Z ztIU!d8{4uAYV_2g`iRLp)v7zBu1--`n{YR)&g+U=&@C9d#;kH`JO{P*X+d?Z$v@4; z?vc7NMSap_bhql_Q&CI12V>Wn4NmRd4Yf&+p!&3#*u%yikh(2J-C!D>Zq=2iq0T-% z82g;r>eRvAQQMsnR5zMgXV}<UJy3V0s4tq<J*~Q4>VlrZ*q6;trxu-#+C4X@zGCL* z+SmqXpzcdiH=CR@t-3|(vNMCRubI70E$fNe_pG40)hs#7#<t8wjrIzvZ<@SbR^1_W zb&9&pgnL_c-kGQcy@Rpum{m@VpM_fc?4bIt$v@l1?vc7NMSb67oMY9+y--Wf3C3<W z8=Ts^H)@l-p!%Vi=pOqHNZppA?lg_gwI#1S8+G=%!PrmCR;La=2esXKL3Njzb)Jo_ zm4~`3Mg82g?qk*UQWx|I#_l#domzA*YWKcD^(!;KuZ?YR9_qdn^&6AZ&#GIbF6$SJ z{nqStYFQuDzWsyhUbCdXjcwT%HF|zf{lVm&Z`B=ASEs1^On87*=k-G^7!Zv8*{pJE zygzE~3xZqKUn6GN1@0kO^2QYT_lP-kpp_S&k6b!17`;DYo^^8X0mw}*49b5-Ov#1r zDOmD0<b!yTocx$PY#I%+^<H@a>g+*5wTjv5)WHK$+YJt?Q8R0>jjeSd>aG;Ex@kSc zs_UgL7!r()nVn888id+?Xi%+T<`1>84F;p`OHpf@oP4Wpk-98D7<;hU>(sI#sC|b8 z)eN&_n2l{Y6g4_Ls2*nWhFf)q)YU0!Z4(}0)p_}-1tWs7N19bmjSoYuT@Y03nEV18 zyGQEA6t%9&7-`kT!%<5|24m}+4NmPn0=3DgpxV$(9A#q<NZppAHZqMyTXkgt>g>_M z*kjFBrw$&8+O9CDHZijbZEUSksJl|sW~TKRtFD*2U`#N!x!LK|qS2_`#|G6C&HS-8 zwm~84z7(~E$r)$WEmD__3&x&o_Byp}3~Jx;LAAA6GTz3v9E%z)3aY1=ydtaakh(fW zZD+#8R-HEvwV*f{n`u@#H9j7-_Jp9?!Q@Y{v3sO$Oi{B<#zd<wE<!Dx7>w;~HaN9+ zF=~^NpxVVuEU~c%q;5-5b4;U2R$Vy(b@rrSY&Wyjse>n?wwoMOyPH{)ZEUR))Lkj+ z>85q5Ro6>hP#TQwX?8lbXcB7oDM9s2Gk=PWZ7>;iUy9nx<V>~d7OBgo24l}Qd!1TV zirRNtP|Y(-rrFq*Q&6MRgX(!EZ@N`?NL`(x_BG*)tU7NhYQaUp*#2gfQ{&T6YtIO( z15Ex58@os9#uRm+$++06i>ITOUL1@aWHvap_eH2pE(xkb%*0D<>;b9UQq+9YsLZM> zXQ0k53&svNTb(-iV$^o!LAAilDz~w<E<xRuqK-1HXIgc=)CDtxv4v)*Q;W(_yUz-$ zW6k_oHnu@I>b?|pyve!Ls#~NkyEGVEZ1y^}Y$j^o%Yy1ev*a=x+j16a^zxuO$>d!g z@gEqw4^}6e6&0RP+9BN8N=<lnFwYb-pu*$wOf{=2Jnm!EX(o0>GRl3_I^E<~c-%+P z7n!vc9`^zE43lwX<g7J0*G8&`Z|G2U&FHHloobNCm^^(#!HDAFp^mNX|M$vI#^mLn zY|gnhayhCQx*(Dkxwfq-x+Bt3_N~~_liTqHwQF)-i98ur#_!hjxhXO<9IbmAC76kK zL}n;w)}lzgI_-MckD_NrXzi$R#lxVG^(nes6*1r4LW!rG#jghZRbr<#Ki(FZ7Kt_( z7z)*tdu-Uev?Ov=WaUsZ_@2n3HJr6;*nG4(QZ>4H6yIK`v!1Tf4!Mi^HW;{u`u0%q z=|%ZP#f2mI5}fgCik3y1Mvl0$lv9O5Gl!2WY&m9<`_htnQ&emT`D->oJ`{QPRK6rp z#h!>a;xa6c_PK;6x_Ul#XXGi{{Hqjp^!1_85rnmZkNvA5FDZEH^fmJyj9eN^yq<MD zc67<pe4nSuzbDdA>P642iLZ^ck3?^IiSH$Ip~;*BUgvw!OwQWKDa!fA>t^w~$dpDW zylKC=bmp+aqKXz&+2(u)!Sz(_E=1HE=DjuE=F7w@Rom8`KM&av7`KrTSo*ymyjKV` z<DQJ9)wC6&O;s7Rqxd1mlPj9sRe99a(Ygm{%U|vN03m%sNx|gFg#{(IR$CK)C9)|T z9m_9C#8jy_*Dz$Q+pZZ@wTda#)OkMroRTV<6roSc%z^1ua?AAv%wcSuR7cX*461HD zd|jQ-qsW-|{ZuJV*Ordtmp4aAGp6>?7dfl!YM{1rh5qodlwWSYbY1@a-kC=FXrEF4 zi@YkQlh*UTKk@OO{f5?t-WR53%2xxFx%P!3-lr{Xx%XA^zMA;%wk<BFb~vTi0{8lE zsO~c!jPD`uOY=Up_A&2^;ZtQYz~kOm!{<{EoZ@{4c^?--sGaxKl#lb<Z_91(owa;M zbycSK9qfI~_fQr-we%2tl8*!l(mD?J`HmvpQMKZz?R|AfXM5if-ltwJKixZz#L0i5 zy5J1&JKASd*V~_vk&aJtebCG2tMBtQz}MUR8u)w~qU0Bi9OLsHgU^3oKVJ&sosDq5 zucmP{_P)lXKk>d}eSyc~)9)mx^-a9*IMOfqe9e4p6MT<(-|^np6yI#`Yi@n?e>0p{ z;M5E~!54Tu=_`H4lYDS<e1q`ms%YVTCy*ZE^R@K86Y;gjr-^*B_nk!g7@x0|_qD+H zlg3}OyERVrTuU$jq=QrNsg);#VL(Tw4{k-ez<QVy-p36k^sBBtjt=<vPd|?q`W>HU zd?y?_$0^_spRYXbgWKXP<ZQYMx_DnZ(l7dqUA?b8zL&i($NMtzZSuZTy)O&jE8f=) zpHAEX=u1y^1$B46a{K#W`ubj7LZ|zT*`%LR(>Z$j0y~ku*!yz5uQR^h-gl<=#qsGY zp>>?)eO*X*!gn~_3!mh!pmSCAKS!R=m_xdi4?frXPQ~{gX&vWzUpLa~PF-q!V1=9p zR9PM8!y4}HV2_&4F~Iw{MTgdS-vwHkl<{=%xOWc3r{o!6t@jP``Fi4e()$Mce7X3Z z^1h+?_%C!Oc-s4h`+VH<L(h0$f%ld7!g&i$UC*O%sxrNm#;5CfwD+A&y3qRyz3&`+ zV|;;Qe1UoR#(Lj4pYL3J<GgRY_nn82UzjKlH6&5wgZq$f>N8I88T;b<oLV)8CwgB$ z()uZrV`1ITRO$X;2?<@}lf3VI(sxSanCyMJx~|5jOT1KHelGn2aJtVp#b;zM6#4_` znCg8OlGc>bB{>bBmft~OCeU%6&o`L#lh(tRTzlUTZ1tFq`QA5Fg=t~Yaf5f}lhz`l zLu<S0H4JFM&~YO^O}ODe>xGV+e7+H+tFe-4Ex6hH3P|g_cXdfF^1hLz-@>Q!+b^-# zNk##EN3f1tea6wGlixploA(vsyN`Ujo)>%H7}6S&j_~c?H<t8^)Kr)A9r#q~ao`#y zIPOaRD!_P*OL6KNU*<Cwkv`vNT;U5W#y0?;uKRnvZvyF4@#(t151*#bM4;c&(53c( z&sRb^flpV}O7EMb_V2{0%j!YzoJ{&-mBR6m_mz_V#OGV(eN*s#>hnG9eN*xE_r6EG zZyLT$_;g7=>V4Bmzbc>lf3<gBM0$%4e$4x3;M0$G=-OT5eHWA7=zWiS-zE6;D<hg< zYrU_G^wr+?g!k!uGx6y%eG;Gjg65eRML2bxKIJpcB0T}0j&<I5DQR7zy8PCA-({rr zvrD?vp7y@WNzccpOYIr&n@u|T9flk5F-JpJX#S}tL%@qZ<CUcK`%NR@m%Q&P?<;^` z_P(o0KkFy!ChwbrPZiW;e8u~&A+4`{*JOOv`>rLu$@=Jz&E7c|XE&UhP+Poj9%=ow ziRQ#>-gg~o{p^Xx|8?)Xp7a~|G=y8dZ$4=?<T7dAcLQnuEmcUp@uqwlj|AxDop1S! zH{$E<ecQZm0lss*?``i}h%e9k-oeLzAp_J4bg#W}A%|`P&(T}zwfBAO&7{lUp~dQ= z54>{`Y1LX?wB7q|A)Wj&gB{*?D?a^#f_m*k@4Jn(hEtXL$om$P)|ch$WIMg@cG9XK z`J074_Rc%JQvsiNpZh^Y7LR#m%fc#+%^_D-xwyO`8IA#szzi~83@!m>K)2JGU>3L( z=)0!-f_|VsI3ElE7l47_Ce;iq0=Ix$!EInMxE<U9mVi6KQgByQ?pMo5EC+gmxCg8N zdT_W8++WqacV(3}<=XhS1={RuZ?C=liJ%c^42}iIfhM3SXa<f4%|Q)t5U2$X2DQPF z;3!ZB)CKiGeV}`W?h#u5wYIlq61IzQb?E_se_?ZNmBY%rlFR|8f^Oh6&>i#u+Wu?1 zukC#<I1}h6cC@wER{m_D?R#TT1ylvvy6gWp){lk#3%m>71KPcR0Jei2;6v~c|Gdv! zU8QEZerfD&@B(-dXuJM0*aThyuYz?zKdJT*SOp#ikAO$PYM|}>8t^z+3!VV_LAp!9 zW#Dq4?Y(yHWnd;42>7Oja=T3*ig7Av3)+E9kOew`V?ZO&7#s_Z15H3v&<q?8nu8O- ziQpvgGgI&v@GIC2z64)^uR(us0nnCVXvmb!snWE5H`1qp?w|+Iu21(P-F_OI4RaW* zYZyfRYTFsi&R*bbkO#7WzKQ)9a2PleXtS@4{3s^EXz&whefRuc@IBD?)_()`0DU+A z3qbq%mw@*0+Ounq{wmlEwnXWtdpNm%IN)LM2zV4cLE%q=r@(rk-vgNeE(Se8E;tit zFMc*S2jqcsf%f8^K^$mny`8px2=x0e%W14`lYf8+_Rm$$bW2t%9IZhca0+M(+JW{! zk3d;Kk2oDcXAlQnK@QLph@LpQn|H6NQn&m>k{RGoa2U`N@e$xiPzTfl^})eF?;G@f zAw)V1B0#@9r56_3#y<wMb=OW^J9F*CwewyFwA+3L+zPZQ)+U%uZ+WOCiQ_;Mpv`SF zP#vU!U+L`Mz#7iE7uL_{Jw^HpcsKYGyoS9C-U2>V8hi%y8;&!;Mc`g=AGjaf0krA8 z3d{+g&GJs-S}+cb2gAT{Fai{Skzf?)22KN~1AP&5ZEyrQ5*!7N26at~IaQ7<|AX`Y z34R0LgFWC|@EzC-o(CJj3*bfY5_lPG0<VLuU?!LaHiIod`{l=h?xDH|PXy<HT)?!j z&*{zK6SQkMk;F-$1!xKQ^@7mRK)-gNy~S8&Q!kSG#f2Y$z98pI@D<RP=jgX0J_GNA z55RVy{qXBxD|iNIE3B=re!t@`una5*&+4i1IZp6Acm~V?*8u%Ij(*K(CYTN;fytm0 z^at9`UI6q<MLFPOD%b*U33UI}{Z{u<-6uZ<dZyCzm!7xu5H|wo!ELB+bHl*d;2dx+ zI1lJOM|02!91D&EO~4`GAfR__KLBlSKLxu$AJ7-{1KPU247LDm{#t_*z=<Fo)Bp#8 z@|ygq1r7#>fDCXbI1C&PYJ(%dk>Ds$2OJIRf_k7nXaE|5W5DlBt)IbH;A`*=m<O%{ z3Gf9y^*LBXdTy8z&n0mtNCWl3K_Cnw;0H4P3%miY0sQ|<*H`IM{tQX&<Fs$<3iQCx z5p)9j<{<qV%2PnUx^y9R8UzLd{S3*6KtEIR2GFKczqE2U_<+3I!4B{t*bKIS*TDv$ zA3B-~F0aa*olW8ja1}V8(HH<O08_Dxz=dEC7z~C0{UFxCv`3HSBf*WNo5D50PgHC; z7y$~vHt;qm0h7RFPzt7isbHFZxNka%i@*$U2{;KD3XOr9U@AS)1?XpAhM;`{e+24* z`k(=52#x`LK|jzR?4+U}gHOON@EQ0Vd<nh+UxROSVSEd|1AD;_;79Ni_!;~Heg(gQ z-@zYXKR5vX1R+io0aZX%5Czphb&v*PARW{I2Z5TP7SK;h-2lq3=Z{{kOn~#jP*4lI zA1zM@8Q>%W=7Blj8gLbu0mgz+AQ!X*t-zt=Zw<Err+_TVYXCaXa~si~1W$qWV1srb zddWBlv<LfW&`)3hm_sG51iw(oZ$R(s^eXN(Sg*@gfVJ2L^a7ngYw#Yi?}HD(PVf_D zbOI47uo^r8)`JJZy&C`fN!$WP0lmxN{YxkezNbQ;fzN@S;ok)Mh1pLibP0SbxD8wl zO2Amq3A6^klP3hHR)*8rUqFv?W$A@Pb^W+aGV`CbXbdg*0^SAmi$8ipu?^e@?gz<= zyhy%F!2ob7NIg+keELZ^J(x@Y6G17M0tSQcY2ZRot{>gJ9_S^2p7}ok?}P1N2iOE& z1<!$v;0|ypm<uikdX%0Cia;yS1~dl?XuY0hR=`Wad~gOh4BUZ#3AmHd%Un<;uUwBv zdYPcdq#V#0v;wU`8=!ZyCxg2P7T%>N)`Ew?N}v<HL~A#Jt>6tX52W@=F~0Gj8#oQ9 zA)wqQzQj<g^b|Y53D$n2Qaagk9~inAt*@_`T6`Ah1@w@5Hqe7<9#93B!-5_-74r@i zP-A*j9a>QnTM=dI56&V}U-(?0o;erj1)+kUr;vY9fbtf=rvsftkS@GFkAddsdXIfh z)Z7c{IWkVACm}rwYem$aYz)u^a2n90)@??Ux)_WH=L6M6yC4l=R}crfyVM3+CUoU~ z26h2mf!e~{3swL|culdX(xOWF-B@>l+ktAc6x<1xfIGl4upDS}q)pO;U?q3}+z0Ll zFM#L4Bj91M3Ood!1M9#OK)y%8V_-GVW|ECmd1x((CxLd9&w%ydX`tW@;90N{yb2Vo z!n8wEj4GiWo9>P(^c5hV(z?061KtMPz+2#Ia4UEd=*GKM)A)4~uK{iE{`5yj(&~+O zfo5$9_!PXvcLDMIqaB~{2}m~jW70dpN8od?4}1mGxx0aO2VeU1H}KbBFK7V11r5O- z&<y+tq{;ss_yK(H?S<;Jxfq8q#=7%rH=%LgkMC!oCj0?w9s3RF<iCPnd|I~Vg%-p= zp#z{6X$rPG6y0WYv(>JpI=CKx6xKPb!d3J>s2YhHKpAvb)>d2-@leniXywfYx{aI& zngMOon}E7N+w?jhxotm=v>s?1gNC3!s0SK=V}Pb$BUt_hdLP&noB*1G<2_`z1E+wK zKnrj(XbD;Y-3r<OJy~}IdZNw*db$=;d!Y-yzw3o^*A1){Wath~11C{KJ)E2hay%!e z(|Oohd$a~=J<__QjbTrqRk$v(xo~fw^+`+2@%Z|{@@x6g4qyx@)LnWkVgbf5Fbd>@ ziTDP>nwXb^OThr_6X6SBb-TKDD7X-ujeiI{7z_d<fyz_4!+}md0*nU9^SNu`G<SEE zFb?SAP`U_A026^OAYn4;N#K3b!W7b_);4$E&MT-{q-O#RX&JZ#TnuJ_i@<a+4NL_$ zf$M<Exe-o)`QUobH^2+Q0${++Kr4ZI_g2!kfJL4^gb&rNMyszf9EPJaX*~$20eWcA z!-F0oe!<=cz6QI&N8onwD%b(Gg4e(nuo>I|UI8zGhrnX61jw&A_3DFQrLLs=NZbh| z+zVC!-JzF*W#BGwH@F9kqoP{F9w2=`P+r+j!_R?d!3MA%tO6=in(T+Y{RF%YJO!RC z=g(U3I9LN71FONKK*RS4tN>{$NCiIQS@w(I1)!5Z4^#o=ktSc|yvg*&N_u(a%u1_3 z@h0#xsN8L;kh;9GFWIH?DNbGcw9k_~p<-SK$-J_Cy4+^|yH>nMrgwn~RzYuqH-N@d zC(=n$yIlTlf1|yHPnw1xscT4X*Z99f;%)FRpzc;CO~}e8NVX)|y6xmqSAPKB2P#}p zOlAHM`wQ?f*a<!djlrkj6Q#@f^BLF$4&$Wt;pC$AC20kH1-=8{f<0g__y$z=NlWUL z{omvN0sIJl0zU&io9h`}&+6qd{^%W(-ZfPNRl)CM(rerZ(9S;ue#IyMZ{Psv3-*IQ zfEw^8h>}k&R3lapmJPVZL&w2-_SZWAm9OW0<vl{zzg_}J)CrYAF9!62Kqn+aC<`<J znLyp&7Cr^E1bQ@4tR7Ld$ySB+0-+huOSI$*1-(E}8OMPJAo+5kuAX;f2+AZr7BmLO z0KL?fUxCN_v|e-Qq$dF7Zw*cc$=!Z?((QouQL3O?surt(YE&mU8>o>-l=DX|?g;cq zs1_?g6G!`>Zlt@BK2;!{1G<7PKod)ICCN&s5mQ}pXvy?><UJRh1A2m7a26;4<wN<? z3!Dzl1VcbS&=+(E$;?T;hxeTU%a<%r>DruFEF@2OcBMR(&*RG}x1S&AB*}u3ney<- zufo)Vq%K<(t!xkWK2^F8&`FcA%Bz!AZoMk+&cpaCgHEPaR}T7rI=d3M9JB9V&--SV zETzdyjeV(9>Q$r~QkEoyEJH{bX^g#?%5Llo&RB+QF^rUnETIuIQbHxEBzsJfbwc=m z&$FnB@ca9G&hNhWIm<oUJ@?+{KFyD<;d9SG0MA(;wEVVbsQhe5ndgJ$XH3JtSxH5f z;tB4v%M}Ah;df7tKf9bYWbH=+MgW-DPi|QlE5U;N0c9;0h2R;}vH^-5C3I|D+4!?( z%E}03S8y`$Ac`AVA@&FhRRpqI#{tFyIMMiDd6%*r#X809Kj2vaU;<zwfX~I>1119| z@%$H8IdrxH*c(#;%(MjV=Q12rrauk8s{&>KrUSSb1*4q>m<h-OJ-@OF0Zhg3Eoj35 z>j5ki1M18L%mK^>oZ<Q(h99{gW<?mu)9x3vYXGYO^W<kgp<M`A0GJP01Xv8<?cOjb zvJ}6U$o&;)?eT0G+U0<ifK`B>0qX#30R-5>7PDr*0yY6Q0yY3P1NgZq-~eC`U>ks+ z?F8%qY?u4&DSpli*l%ce19kx-0Q@`}uon;s_#L2lZXbS!M&W<<12{fR%q5mvc2ytz z=9eXbfbRkPr4GMo=C5<c1Ncodzj5X_(8B@zBIR2Ezd!2_@CNWpXZ8%gc<uw}3FroJ z2jE3?s7?#~u*N{fXxVaBfNxp&rQ1PfM867tR|XtG-xSs!Ld&@ki}o<!FTfeVX@G)1 zir=RIaR3X*;6<nj;7|190gdqcB-j5F=o|wa2QV=sSV#hX^BF+t^Ps7Ke85@2-+)~Z zTnUQl0j{9Wcr|{j0DLWU8T|`@djP&FdWZHc;5^_BpoHU}3`hs00FnSK^cC8dfJ=a4 zz`uZpfER!qz)iq&z%#&oz*9gGpb$_1_y_O+a2Id~a2s$7a074^kO*LfLs{dC09N80 zfE8fvSZm(#mQ{+CQ7mE{)1?72017=nQw(BS?kha}JQKiU<^eEPs7@AsTnFR=t^wG( zYyd053NbJPx6D*lVOEYk!9o>_K8CO8*#(Y23t$3{E60f~VT(8<?Ao$8<u}KlX}Qnz z59QyAvTQXQ@JN2nvYGBNK=IZS{7&ciD?*t;8IYeTim@<e=Dc`~RvDC^bNpF2ySD6e zMJ6ly1i+!=`%3mKE6KdvhO$tFkrS<=-<;)Tg|b2{gp-t$l5zZ-uO0XjsXCx4pc;TL zR{3&?FID++l`mO;fj;$k{__nh-?TOc@Qsuu6yh6K6Zv;*^!etMZ(th$OaYAmW&nPl zWez;wVlkg`lhqu3H$WG_Hvks^zw>SfXba%m-qwItD#V}Xz9l;501E~PvPNqK=m=mY zUIT2<@=fw~;Q3aWZ=3ms*$%+B&06_4x6S}3Kqmm#l+I|mzH~+F3SgsppzY3gblmYm z>k04x^aAjm9hXinL|lgX28eHi1_Jiu*#NZVJ@Z~DaLmIuM{Er9aGy)FQhJBV&qDbj z*J>tE>N#H;^7Ez8m>GNlBjjfd<>yR4R({6(qX8TaF5UisF#x`iEKkSs_!+M$SWiOV zFCK~_ER+`*URac8%*4W#zM>ef70Lk2qbxwI5aXDh@fb+_0+bCbOY?&YZ&FzJE?CM7 z5xYfMgl6J*Fdzsp127#h4KNij1u$_p{s;fg_M#I}s^*j*rQ%B;{EKZ6t$HrRwvJKF zsYlu*m96ljHLXln8Pe<|Ra>V8)`&6o9iBFr0%!x{o&EN=Oll_R4zsqjwzR@75SSXk z#PnSqng9Kyalo{*v|&u34HYJ-jI|-4s0E6ydn`6(_UN)06!w-@OmU~3gc)?QP;XQ2 z!<N8+(-LELuqDT2m5ngdjwU9nJcN06bRrqDR@-5kLe}~F@tsd@S=dI@!^TpJx(ZBH zV4D9?ut(+cPY)4e$Fly`QjPPFm8vC|^D2Ms{`Q#Spj_g&COR%F@wz-Jv^*(ePMUAb z>e$~{l3`;BEibgE9F~#Qo(xh{HX1W~X|(>n1@B(19PvVw(T+zWdm5IaGS*xJg+4}6 z``CD&ue9e3DC{KL+B(o`mT}iXvZdOuH?rnczST~Y0k2}i(t+|)VD<j?WO)Hro8xrK zK3-V4)#hH?59|UZdmsEWfMMTuH0?Glcy*7SBF4rNwzxXdtP3g+%>~$09Tb}v9P6_C zjedln8v?H|Mf*;4`vPo&Z;da4@}oA{us(lwqOgl9V<ie7r?j%PMG<nQ6i{k?oFyN3 zz1itZ+@@PcMZK&nq03kq6SCruWK(^U#-*4U&ZN17Q5HFq_L9n9_{EtvUxJ?^z`-#e z*K@pK+tojX$<{-!C}%1Fg>c%L%u>O5-kCb2!jjpYQJ29H^!Q+AwsTyFplfB>j@_k` z-<h_hf@47!%1Ff+E4q+V8aRLHLOyBWT#8AC-CEeRuh0Lu^p5F6j0F#Ht|EKl)4&P8 zKI3+mE9o~@8<R`A%0$@XMnlsP^rLQ4TEv?)t8{F*Zywl@6zptiR@rD0K*8adZ!k0< zV4m(K$rz4$O?S#oSG8_x<c<Xe6xYz!M7w#<>VJ$3Q|E({rwwF1a3}N2DjSn!-6SU$ zznVGrl+T)-g6=dtsSh5Sm7y}JcK|(3LBBx>r#9CL*AsMq?M4xoRc7_lfnnL!)gJ%T z+O3{i(2eg#S(jCTLRxp~k)a9`G(9Of1CD9YlkR396>WQx?G;su5YUs<nQ$DQ2V}zH ze>@~f+oIo9dmWr1C7?LDi#;eD6v9$hI+_WI&Yt9W6_R>-(qeACJt^}l9NFKCYGk2( z;zcf5pdZnf24|^Ug&BP*JWFM!nJG`~41I^dI)**Fv&Rq-#AHW5$^nPwkA6~uB<`Km zzxQud^g&^Zcq3@X`;kF5#zF}gmW?sq^`q6?*6^mkxV7z1uNaT$bjv~Cxj)U~_D(yB z%7HFY88Q}T4WQdONRP;Y(nuXP>JFOXmdR6=RY59R_>jjnaN7G&*fns<t;WJfino1_ zbA>h=O=hTBH)}3f&VwlBn#x}jGf1Ks&?m`rgh9;TkjaGt+MgUmUb(6;&E+9dROk1e z^mIn0bB#d3WfBwxL#QAZ9{3j&9M2`a^VXZZ38*LQ1q!#JWOg0;D6JHYAUc0tRrzBf znUtp*CTti+sd*}IAz~P{yaA((eaZ72gf#Z0<V2M**)&tvr3p7w{WXhxCFQGG)(h>{ zz27WxV0(7R&%Ts<1FD6Cf|Iao!l+T_TRfcv3gDRne~MY>CLC~Lq(ou#wsF^!`_q<# zqP?XJPr7QOXw6NGAMQ(qcQ9_=P0TeTKPusem;K1<7L<D6M?G$#|Jsj2xNk6;!tbaI zO))}~(KxGN>`@a#yhbeAlnBY}TCP*0DfyOagV1v{jlB(K8cmzHMIv0h4XwZSmmFHF zi(7WBP7m!RoovBs=}+oADjV$-P;jMab|#`<iw56e3bEF<i0ler8Uu6JD_GU5|N7Wc zOte1*zz&W7SgD@RSTf~!-GW!kKp_WIQr?)2If_wa%WZ_&o$16~l@ZzBRcSP@{lxcI zVH>MWKa%Kw<^tG}?VJxNZxipLWIp;%%9xFYu@6k<$BhRCS3t}pNszJNHJ&m-DGN5% z+#N5z)D7EnKWwu7^|lFuZflfF{x>avT<*cIM*?W@J<Nfg6C_I8%F|jkw6nmB$8@x2 zrw*GCd+MI5ND!J$rI-gG9XnN8omNz7l)rWI&MQ#E4toPcX8Kgp`~#s2r;_#`cvJbC z+ODhojs;C_&)$^gxQ=F;R8nW;Z(n2j_9;&}+1Q8EXftGJia}8a{&qOn@!Q5V7vB~~ z5#6z7I;BFoU}jI13gDLM(8mCj!6)nG)vImz5|pyv@#neTpx{5#T~we-(Hz0;3GXJh zC;bw%<-1hg)!18N-L%pf6-1LBLRLVKl=({rtx>rqclH7WGK+&SJ&58TVhx-lQ`q>8 znb1CcpcN>rZN;t8GGKT;AO8Jas{?!R-{0WevFD1lK8W-S!5aYzwn<Ym)4uP?DessU zCc$-wWz3MMDn6sf%?n_RWqTg?To4TfujU#kc(1m0@a1(LT}Iv)Da3O4IEYrV^eVwP zr+`8@-uC%O*ZG%43Tp=lX$DLaV8&(z8##|^@DvzWr3I#2Fy%7uc$s423Quj3+rMi{ zd6xsz9K3bfjBVbqq1jg=Z#x@gT}&{UKZ0giplAt-QQ1zt{6^n+Rw`YXNxq;Ew#_83 zVo-j36gKm45Jf&h$^K&&m9We|XGzv}TK06psl&&&ARXZjq?pd-S!7iNncxWf7u92A z5vqsdj}%gb@U8n%DmvT0n>ID*?U0601&PUC+VLYLGh5`3bQhFDeh8U7R(WV^he^p( z>(<)ljjaY=6Ac%)T3-XhtL}^WhkUI&O?WI~*qb`iXvP%t7(*jI7av3LAG68eIoc}0 z<n#({(rjw<1nq;_6pmI?eU5msA9n1w^M<bO7sTC*7y`E4w*-`mB!y!GICzIt|FX|x zmtX&mg94~Uyl+)F^5#$>WNV*;lJlxrt8O=E1YX9LK-@`UQ&D-YG_4z)T|Cq3RpaBp z@Z7+(HknI~Pob9$C~AZE_A`e?3#LDuA@jn_E^}!jC<O1h<nj!ZV?b#D%3X<`?SIu- z_ebd{)92C&rd&9eGM}PC<Ut=pP#W()YS7DZYzLVV;ge;(w^gxZd@wENG0M*a1Ks-z zq>w7!*}sr-Kq>sSkcwWSmHn={wouw&=>|FY=$jq?hBHP?ejPa?ACdhpcz6|4WGgZJ za&10O`FIgozJQ+P#`tn=v>*CpK5l$j@BPr9Q?z($!Q~^izx-sN>(mJ=f`g?s{Q4H7 zYKJbCYW2$TneP@{wfIiZ{RU5Xg&Qxo85b?<Y@F7fPibJ)Vvc=swu%)P(lPgJH0My0 z>OxknwH8x{o6M*q#u?jLyea<Fj4va@SbzsLTpK>LGI5EdyDaPdjGt3nX4(O{l&6~< z2!)8<9Vn-V8MmJwM&bA(N^#2nzf(~gvP>$~^~XNk_ohz*in)@k8-c<5-mql{tnM^( z=!89=f+=t5k!2JQ%f0fz(E=RW%`?0Hy!)q{d@Pa*%ZG(o!F=fKil#yZ<&6EzMN4yK zxwNIS8R8q!anAH;F$Kg*T`u9v7e>u(aPq=Zuw}`ZHE#-6mFg|a)>d2qKR>EmL=`=S zeJiMh^*y;lT3GyV{pizt@hS)Ci~S#;zc#ESt2bB~Hq0SEZY$EiG}G3-Ekm|x6?wiz zqP?#+tMG;p=53BzQ@eM}zLBMY%v?pAK>3k*t<<^?!=qqir9LuS%2Cw&m<;OiPSrv4 z_s`NU$S7v#&-agb;D9L}Uf_a@KU4TS*f4Yr9eoGe#;u`3?$21Wwu;(DsJ3>kquN+7 zUb}XH+N1pOK{H^TB-Z_T-Zay@gK?e_OA*dQvRKUqQ1B_a=G1O4ZfBbWVPIa2uq-qr zG7uoT7145CwXsG^QdYHD*RJ0R-}+I4E>g;xD@zw57p52p3O)oRgz0ZTw>x`oDaDt| zl1KZ3QNLVf%r7)dfUnHg(`rE-qaCtA@=DcrtG4(~xuGlD+#at7Wz5;4M<FhMCr$@O z-U3h9K(kb^aXKh?17I<5V9g<GJDe<~KwzRkp`8s1Uc67K3U(NpygnpK=QEbhY8i82 z%%Rwk6WZ(%G2%vc`v!W;yoW%+#k=>uOVb}-`N~d|j$(t03}AR!iQfKozgXL^a)6Py z?ee(fr&gN?Q5z{tt@hVeTPv+b$5QW(+&wvFp-3+7OsC*WOIFVyt)=ONrUQ9>kPpEf zH&de;2skoLtEb)|#D%Y`j&4#o73fuDxwsvU*h*%VK&c3b-b#)&(LcVG0{OWlNK>(6 zFhm>^p4&==tikoIRK)$n4HUqASs*!9R*%)J-Y!L8!s+cH&bgU=U;t+<qPJ-~#aD(G zBS6799pE=_y6?(kxuB3=gGK|xi}WvPNpseZ3mgGVJLxDP>8L#k0^UzewhvvlWbxh; zvTy|8f{ZcSz5PM#HwW$jgHsB}b@c`sS_KZe4hjyQ`?z-=C#pL*i4@|>`(!(<1ckQp z4k?K3VtcGucKPxGP$0OR8jXNy2Hrt;7KOSQJ~RhLez9_WJLOhU`)gi<f{jXR)_qJK z-TDC(oSM+A(oXWN3h9PBrRisI%~WXb;-<VH0)+)IyubJ^tLufMz1C^K3r-$a<`v|Y z@~R?<<c?-{gjAQWE^7YPX~?3gqPpTnAufWfs;R?-*E{GyHPjtB!ej7#59ijtt>XtK z^>=y<1{=7yR7W9p4|#G@{k@0AR>zcFu$MNWuleD3X-dv~mf;Y(ccKp$Dnu1$i{Rhs zA}BQ<4V{?LO4`Y3_=!A|^GTBwE*aLY(A&R~>-hE16N${j#f4LN*$h-tS<X!DN2Wg} zFk5(ht5hDHTHmZ&u=^ECtx`G^8M2-fSW{i6>5fP#oJKH_>&cd8Vdib-j~>a}Md{56 zUI|5>RhiSpn(8>RIj1tAN&0FNiqKcr5xVWCqx$Ma8t*7+LGzC87_#_})qF&>la8oU zqG(txIC^yydDTI?JBq>@p^c9sv$|;0qbP;@_o65dblMU~;uIOG^INT#FIUVil~g}k zN~_5}y;=u0Klx)RrfoEZ)rJh$XbS%dLHrh!e8gDU_W06XUEVe=rJNK^kw&0g8cl_u z6m~^ZlmXiE+LV(hR5?IV4a?AtIzV|E^cA}DR>{xlZf&HoLZr0iUD6<ih8jXxIU$-a zHn^O6Ht)^(-zBy`NVCcsD(n1-0GAu%y|r>M%3JjwZ+nO=c_f8S4vD7cA?du@sNTjR zi|hp<rNLADqy$Uxry@ZKQbnmI2kn3GtKtnMZ7LX93^Q5QS9=Npu@q8Y?JwvZrn~h~ zSERnNpnsTbjny{VfLN(EUsylB)7ZtYr1emo@%o3Q8w{7GvjcVA4@&1HaYie4mLI)* z9w~TvDt&>SZ;p^lgVGp$V&W*im7-*$sdH4Sld8flfi0@laTRpsML<W^LX!*%UWN8~ zKDM~hcmUU6xg;oh%68E<6HF4>7|n=dQc2u&dZN4gq$Op-Us0l!H=^Q!l`#I-m=CLf zQb)eLs>!MOKWML15T*VpK`u8fJ`oZ*IX~g(@^<z-M7JCMcX#f=wf8d<Myb(XkWl5P z;=gg^Ws0g^1%Kz$8p$x>NY5MjQ!-W~8F-<?u_6)}eldC{Y1SI=5z)M#<Xse&z*om< zvnjOAKS2d(wRcZSg~9b%t%G|LPjY799S*O&#lRRq#*0+nCd+@q_q8I1*ZV5*6ljJO z!8l%`xc+>%X;pn=@p95Z+;GVnl2c2pY3XLj#L@9o1RkL*2LHuHa{5}mLHm)b8-DKw zbx#hG7E<?Fb+?Wjc4HTmkoU9Fy`jG*;}pIVftty03hlN!JeVS>iGz^NlT)-3H;bBT z3DV-Hv+PB}uFkJBB?{gkDa!b^R-0&>fsD6cCqsWJx$({5;UL4iM^?fL7=F#`d;Z-7 zvnGSxN|or9K;}(gmGa7IL<0FXfp?oFP-GKqYc`ygCiDicOHT%;tg8l2yy@f(#rD%w z0t#XOX|igH_W5b@L#wTHMjET*;%zxLU%&iQ<PbMPO@OHlErPR64U$J$@L7(xmpJVi z|3%47p~cR>=q}4z;ZG*buz!>8ston)@I|CA9l|5+z(i>uv-fMCZLj9P<3${fU?cs2 z;gl&T9(iqe-72=g@ZJZQCy5l$9Dc0W(@H{~IwvK>fV|_W4=(MElx4u&RA9Jn?S1<1 zHml2z&X!8QbB+ojUGPgJ-+{OXHfw=wQ3B)59kcT^u?5mydtP$D?A(7w_fB)*eJ;Ol zM5Nti%;x1UgU(sS^H&7GaH>L3cyskvb|9#O;g7`J3#fJamAEyRSbqbC6}!^Oafs1* zr&EehE1kIWRHJ42jFlA=q*oWl!uk|i4kGPuDU#*eC)WFW+QKC^qJ84g?ud-h_TPJ9 z|Bd?YB1SwGCZ<qMnE`~37s;R%WQqT+QK<CD;3}oh2s;4|Ip<R^O54ea>uTlK2$;u5 zOl#>nD(4~%YlXyXd5M094B^Nn`m2??b<<OqB#w#;g5qj(%z^iQ=LsR47)ist5cj|| z=>^#i-4;nl!_7FVTxQzgW1%#PY7L5gp!f<Jj|iXJzH_26&oFs||5qAq?gxD`)5y#l z?SnL0+MnlSx-@Gq{n=f$;IPft;NWaS>1v)%9&JErmri*YU2spQF!VJ8z+r$f`d*1X zz4_t*{@%gLk}p(r{L^XW08q|Pr+AjV4wO7m;_BRMao^nQphzixQ?e_aidc)dbkdlk zO-v`PIrbIl>9pBgy+LyeoID3SUOW!WSuqWlcgikb%1#^M5wz)xF<ybPDk%4_Y1+-( zY>yu(<?kC*mnqHyGDlvfrj|Ho56z%>OK?ogkT`-4)yTS%Ps)`y=4Ma^J+s7gJ)S|+ z+Jf`%49aZ_?Q$}xxGko0eg>IasXa7yS0o7w^;Wmc?wFm8G3C4f=Nc<@itys<I%hDx zyGp*D)P|<;jX{=F)RvqLsea{r?rZSiGYYOi4YKHfHA>VmQ1ELV*E1y!&PhKk7AeFX zQd-tJ8z^1~0-R&QzF$8te@CPE8!`b-<l=CKdibTzCQs06>t#!4gp1k&UC$)L9;L!s z$(XFUe;OO5JmzzTTzH(aX%lz_uWSmlM>{B+F0!n#;NUr{@3QVegPHwsXcX5lq+KvD z{ISkMzuWg;ESl*d$`Y&UPubL{9b|+<A9zBu50tEXE%oM`!)-LuCof`}C1g`TJ2>}z zHid&ja|e_h(1w~fp{w@XOO*A)Xoa9~L1Bt)udZ*31bqq0nxJgc_sABn=E2=%N_e4C z4uy5a=!QAuXp7b?hw{3hHP4}mws5s$j--w8{Ily%`22RObd0_^bb>jC<WMeN_-V$0 zlFyA->yu@jF#p>!B}Si|LpAI`F&h-TS~aP6;@2%#E)|FrV!>IOLoT4uu9rt^66)6K zX@OZikpkDo_?QqFo**+U+Wa%CwMo9r3ru_tEoa^fpy0FK?k6)A`mFz&uilY1{N>MW zU^rbSy3E=eAKH<>5#c!6<Gbb@%3;lnu1RrAdoVromPzmZG6kf!yha9ENOuNBeaM)- zBcV=~dYNM>#Q>RCug;Xi;TzpH$QZ0~W3SOL@CwtfQG7?WQ6oE@&*dd8aa6Y#(ymca z2eqLdhL;1$$zj<ZqU40r<cCNB-MIdo$qy3_R~H8rKQ_9PO|zJ?ObVE24B-LxeD$l( z*7_W(&aY~C9Y&^<%j8c8mh)36xlSI)dCj+Z(*FFiCO)TM%;_DnOj~>;D$R<|%c5j^ z)NDDO1w|EQAf*p+UJgjbBR8bGyJIsR^vQI4<19NG6+@~anyEJ>D|H;6P21+aWTs3| z#*JY&slWlc-vcGjoChN!^*T+7kS@W+0#bC7%sL?6y0@g#t?EC0@!fSAad}40z`DNh zCG*xxU)tqFL=t}{#@U3TSo;<Qf>(CE7(XeL#&SrFm1-wHu1I5SKBPJ&=EEoExia@E zc8!#KpRb5tIFe+5;r~X>)mEvLvc|F;#z>X_eGOGoT=+JRB0IsGQhJChL&XK8w5*pG z_aVk0i$a_rST5R%Dwwdcl62b%X(=Vue<LR@97=vFGc3$mp*GZm5Jdr5nAZKiRJo$6 zXHA$f|4<t8h0isJ@n>g{u<btObbjvxP9JjNzA}ca!Y3-LY(=RT{u2Ok)p7g=5*5<} zzfqfLEDEGOMNOmP!9`2+l!Xt;Un)llsNxN|$SbN*)6Sw-Bz?;h%UVfhd}h&?eNa&i zgHk&mk^$B%O>N9so|)n6t7%P-EPYfu|CMQ|C@WW3TGmC~@Wc4OUj#q2R#_fpOli(2 zJfGN`lnb7wqJ2&~&cnB^FeqGJwhQ)m+FI{mf4+U^B@Ja;S+*T>$b*+}MYjB0+qFoF z;Pt!a<BT$1{tQmORsd%oVAx3(uXkVl*W81TWH@waff`&yDJ*MD5#@Kqo(><Sdbweb zx9usVx?!I_<QbW{1227=XiR<G5#isTQDB*e0=|Vj;i<Nu3+`%D;q5ajatEjD3v%iP zPU#D3Lz>VHZjTv6OZlNBt_@x4rtT<=FDCu&D8IqQ(zQr{Iw9kFWLzM$)WUL<@<qV# zM(W_DdvE^o&DV-PK>^0s*TpmxyqcY$FaU*PgwCa?dv2>l3&jo8!D3no3L&YO_H@Ta zDx;Wkxqqvein;&mOET{P342~j-t*5*`02obJ$y3ams%L(#Y^(-0gJ#9$&{9_rK9hY zS^Hd0_7V7y#`g=LRK~(#xdfEVVboLI+UY7dSi4E1Cx0I>ZM05H>zx-G<WK!qvV#Y? z4+^$$aEm{+vsZejiZaEI?22DgNKcG9r9{#%*rm<Qb{5{e`pf!-m8|o?VE0NWnF(Kj zkOym?)bz;7y!=@o5WXlO6AxI94|F}b#jbn~w{}<P5L(S19sHj!KtP{ceL`KU9)1M@ zeC9#%LZH>XKw<AA=~8l~htSnKWf3TVXAgj)FDQhS0xdwR#r{;3b#;{f?{iZ|#^7so zUN{lc{wiJZ4D+&P<Aa7S;YEUOclilUJB2*TN52!b<3$%IC`V72Tv?9>c;dwIm7cD6 zp*GiT`S2shYVnDKw>pwONKFqpD~&l-@!4)0YTHX)`4eW~NI9i9rh|O6RE}(<?}fL# z<sJ&kX-#=v?qsNmt*k3<V^>8stv1s-jst>C1#2gt1j)RQdhGi#BKxRq-;bf3M`g<Q zV?C%s9(~~fd3N!(Q9kl%Evo8@ZwekydE92z;2Zt;^8zuCb(RCeyY=7g&NwHmJ@ig= zlZdKUjZ#>gVnPMOQn)v!zd|IRss-ij{P`1bc`KA*<kR;1vvfH+Y1lHR{uf^wrt<R2 zowyb6(Ubl#LlL5wqnNRw1`Xw7x)R0;ga~mpD0cu-{YVPc8Hf~<kKUU7HFd?a-0xXN zc7ML`yrhQz#q+<;nVJ-dS4Y}wpx|>wt*5lk)agQaDaA8j_yxuB-@7?$2HI~a#njZN z67Xu8=<AB-8fS~&s(hE#=us&}M}4yLQ5!cM01AE!*nfq~oX8$Go0L)*d#Z8Ihd-U^ zO#wb?SBmse+k~cJUh}(zdG>b6x-<0OPMK^G_`Tm~oq0Z5|JrABhj}|m8|<}*8b%o{ zjA}Mq?gt$?)Ur=<QRa8(bLH~vJTPU_DTft7GTy$b!?taEyIRhZ@ln^N*Zsz|LE_Ko z>w`X^@k*nRKgWk|+lmKu@PHP^?>rlAo$?3zM(FQJE!@0sc<cB?^!bdJeE<5XnPYxF zmy14^CvSi6q1EQaoVtfT+Z(#E!<GC~y&}epwU{_!%;?Gc=K8mdNjrAFLqAEu0S{|k zy4~^6&hF^50ud(OvxBWdT^$GF0S}<*mXN>VmW6p;{8bivr1zpjlg6a3-eTn|9VK@k zOncnJzDL-o?*m7%8>?rw$gps3mrx!*dh)~(lO~VWN$%`)^tJnt_}$N?f_!%IfszET zJ`sn}=V^Fr%A9cq4gI=jpTdK>c(8N)kR|@^-)O3MNpX7Z8yh@W?Q0zyzg!()K`WN4 zjcCp(bp!roPLt!*`4l^eyT*D|sLxV$<Jcj`)!BAZKWv%08Aa*oRgHCisy=E=Zp+j* m^s>5M1Bzd!?nG`i^oG*P<!UP`c@7bIwe)JmM%B>s8u5SrRQB2c diff --git a/package.json b/package.json index 843f9d48e..7a488570e 100644 --- a/package.json +++ b/package.json @@ -57,9 +57,9 @@ "dev": "bun link && concurrently \"bun run esm:watch\" \"bun run cjs:watch\" \"bun run esm:watch:aliases\" \"bun run cjs:watch:aliases\"", "build": "bun run clean && bun run build:cjs && bun run build:esm && bun run build:types", "clean": "rimraf ./dist/_esm ./dist/_cjs ./dist/_types ./dist/tsconfig", - "test": "vitest -c ./tests/vitest.config.ts", + "test": "vitest -c ./src/test/vitest.config.ts", "test:watch": "bun run test dev", - "playground": "RUN_PLAYGROUND=true vitest -c ./tests/vitest.config.ts -t=playground", + "playground": "RUN_PLAYGROUND=true vitest -c ./src/test/vitest.config.ts -t=playground", "playground:watch": "RUN_PLAYGROUND=true bun run test -t=playground --watch", "size": "size-limit", "docs": "typedoc --tsconfig ./tsconfig/tsconfig.esm.json", @@ -107,12 +107,13 @@ "tsc-alias": "^1.8.8", "tslib": "^2.6.3", "typedoc": "^0.25.9", + "viem": "2.21.6", "vitest": "^1.3.1", "yargs": "^17.7.2" }, "peerDependencies": { "typescript": "^5", - "viem": "^2" + "viem": "^2.20.0" }, "commitlint": { "extends": [ diff --git a/scripts/fetch:deployment.ts b/scripts/fetch:deployment.ts index 44b92b7ca..81a0fb0ee 100644 --- a/scripts/fetch:deployment.ts +++ b/scripts/fetch:deployment.ts @@ -52,7 +52,7 @@ export const getDeployments = async () => { const tsAbiPath = isForCore ? `${__dirname}/../src/__contracts/abi/${name}Abi.ts` - : `${__dirname}/../tests/src/__contracts/abi/${name}Abi.ts` + : `${__dirname}/../test/__contracts/abi/${name}Abi.ts` fs.writeFileSync(tsAbiPath, tsAbiContent) @@ -63,7 +63,7 @@ export const getDeployments = async () => { } // Write ABI index file... - const abiIndexContent = `export * from "./UniActionPolicyAbi"\nexport * from "./EntryPointABI"\n${coreFiles + const abiIndexContent = `export * from "./EIP1271Abi"\nexport * from "./UniActionPolicyAbi"\nexport * from "./EntryPointABI"\n${coreFiles .map((file) => `export * from "./${file}Abi"`) .join("\n")}` @@ -76,15 +76,15 @@ export const getDeployments = async () => { const abiIndexPath = `${__dirname}/../src/__contracts/abi/index.ts` fs.writeFileSync(abiIndexPath, abiIndexContent) - const testAbiIndexPath = `${__dirname}/../tests/src/__contracts/abi/index.ts` + const testAbiIndexPath = `${__dirname}/../test/__contracts/abi/index.ts` fs.writeFileSync(testAbiIndexPath, testAbiIndexContent) // Write addresses to src folder const writeAddressesPath = `${__dirname}/../src/__contracts/addresses.ts` - const writeAddressesPathTest = `${__dirname}/../tests/src/__contracts/mockAddresses.ts` + const writeAddressesPathTest = `${__dirname}/../test/__contracts/mockAddresses.ts` const addressesContent = `// The contents of this folder is auto-generated. Please do not edit as your changes are likely to be overwritten\n - import type { Hex } from "viem"\nexport const addresses: Record<string, Hex> = ${JSON.stringify( + export const addresses = ${JSON.stringify( Object.keys(deployedContracts) .filter((key) => coreFiles.includes(key)) .reduce((acc, key) => { @@ -96,7 +96,7 @@ export const getDeployments = async () => { )} as const;\nexport default addresses\n` const testAddressesContent = `// The contents of this folder is auto-generated. Please do not edit as your changes are likely to be overwritten\n - import type { Hex } from "viem"\nexport const mockAddresses: Record<string, Hex> = ${JSON.stringify( + export const mockAddresses = ${JSON.stringify( Object.keys(deployedContracts) .filter((key) => testFiles.includes(key)) .reduce((acc, key) => { diff --git a/scripts/send:userOp.ts b/scripts/send:userOp.ts index badbbfdd9..0b18d941b 100644 --- a/scripts/send:userOp.ts +++ b/scripts/send:userOp.ts @@ -1,10 +1,7 @@ -import { http, createWalletClient, parseEther } from "viem" +import { http, type PublicClient, parseEther } from "viem" import { privateKeyToAccount } from "viem/accounts" -import { - createK1ValidatorModule, - createSmartAccountClient, - getChain -} from "../src" +import { getChain } from "../src/sdk/account/utils/getChain" +import { createNexusClient } from "../src/sdk/clients/createNexusClient" const k1ValidatorAddress = "0x663E709f60477f07885230E213b8149a7027239B" const factoryAddress = "0x887Ca6FaFD62737D0E79A2b8Da41f0B15A864778" @@ -51,37 +48,40 @@ const account = privateKeyToAccount(`0x${privateKey}`) const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) const recipient = accountTwo.address -const [walletClient] = [ - createWalletClient({ - account, - chain, - transport: http() - }) -] - -const smartAccount = await createSmartAccountClient({ +const nexusClient = await createNexusClient({ + holder: account, chain, - signer: walletClient, - bundlerUrl, + transport: http(), + bundlerTransport: http(bundlerUrl), k1ValidatorAddress, factoryAddress }) -const sendUserOperation = async () => { - const transaction = { - to: recipient, // NFT address - data: "0x", - value: parseEther("0.0001") - } +const main = async () => { console.log( "Your smart account will be deployed at address, make sure it has some funds to pay for user ops: ", - await smartAccount.getAddress() + await nexusClient.account.getAddress() ) - const response = await smartAccount.sendTransaction([transaction]) + const hash = await nexusClient.sendTransaction({ + calls: [ + { + to: recipient, + value: parseEther("0.0001") + } + ] + }) - const receipt = await response.wait() - console.log("Receipt: ", receipt) + const receipt = await ( + nexusClient.account.client as PublicClient + ).waitForTransactionReceipt({ hash }) } -sendUserOperation() +main() + .then(() => { + process.exit(0) + }) + .catch((error) => { + console.error(error) + process.exitCode = 1 + }) diff --git a/scripts/viem:bundler.ts b/scripts/viem:bundler.ts new file mode 100644 index 000000000..1daf93806 --- /dev/null +++ b/scripts/viem:bundler.ts @@ -0,0 +1,147 @@ +import { config } from "dotenv" +import { http, type PublicClient, createPublicClient } from "viem" +import { privateKeyToAccount } from "viem/accounts" +import { toNexusAccount } from "../src/sdk/account/toNexusAccount" +import { getChain } from "../src/sdk/account/utils/getChain" +import { createBicoBundlerClient } from "../src/sdk/clients/createBicoBundlerClient" + +config() + +const k1ValidatorAddress = "0x663E709f60477f07885230E213b8149a7027239B" +const factoryAddress = "0x887Ca6FaFD62737D0E79A2b8Da41f0B15A864778" + +const GAS_ESTIMATE = 1.25 + +const safeMultiplier = (bI: bigint, multiplier: number): bigint => + BigInt(Math.round(Number(bI) * multiplier)) + +export const getEnvVars = () => { + return { + bundlerUrl: process.env.BUNDLER_URL || "", + privateKey: process.env.E2E_PRIVATE_KEY_ONE || "", + privateKeyTwo: process.env.E2E_PRIVATE_KEY_TWO || "", + paymasterUrl: process.env.PAYMASTER_URL || "", + chainId: process.env.CHAIN_ID || "0" + } +} + +export const getConfig = () => { + const { + paymasterUrl, + bundlerUrl, + chainId: chainIdFromEnv, + privateKey, + privateKeyTwo + } = getEnvVars() + + const chainId = Number.parseInt(chainIdFromEnv) + + const chain = getChain(chainId) + + return { + chain, + chainId, + paymasterUrl, + bundlerUrl, + privateKey, + privateKeyTwo + } +} + +const { chain, privateKey, privateKeyTwo, bundlerUrl } = getConfig() + +if ([chain, privateKey, privateKeyTwo, bundlerUrl].every(Boolean) !== true) + throw new Error("Missing env vars") + +const account = privateKeyToAccount(`0x${privateKey}`) +const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) +const recipient = accountTwo.address + +const publicClient = createPublicClient({ + chain, + transport: http() +}) + +const main = async () => { + const nexusAccount = await toNexusAccount({ + holder: account, + chain, + transport: http(), + k1ValidatorAddress, + factoryAddress + }) + + const bicoBundler = createBicoBundlerClient({ + bundlerUrl, + account: nexusAccount, + userOperation: { + estimateFeesPerGas: async (parameters) => { + const feeData = await ( + parameters?.account?.client as PublicClient + )?.estimateFeesPerGas?.() + const gas = { + maxFeePerGas: safeMultiplier(feeData.maxFeePerGas, GAS_ESTIMATE), + maxPriorityFeePerGas: safeMultiplier( + feeData.maxPriorityFeePerGas, + GAS_ESTIMATE + ) + } + return gas + } + } + }) + + const usesAltoBundler = process.env.BUNDLER_URL?.includes("pimlico") + console.time("read methods") + const results = await Promise.allSettled([ + bicoBundler.getChainId(), + bicoBundler.getSupportedEntryPoints(), + bicoBundler.prepareUserOperation({ + sender: account.address, + nonce: 0n, + data: "0x", + signature: "0x", + verificationGasLimit: 1n, + preVerificationGas: 1n, + callData: "0x", + callGasLimit: 1n, + maxFeePerGas: 1n, + maxPriorityFeePerGas: 1n, + account: nexusAccount + }) + ]) + console.timeEnd("read methods") + + const successCount = results.filter((result) => result.status === "fulfilled") + console.log( + `running the ${usesAltoBundler ? "Alto" : "Bico"} bundler with ${ + successCount.length + } successful calls` + ) + + console.time("write methods") + const hash = await bicoBundler.sendUserOperation({ + calls: [ + { + to: account.address, + value: 1n + } + ], + account: nexusAccount + }) + const userOpReceipt = await bicoBundler.waitForUserOperationReceipt({ hash }) + const { transactionHash } = await publicClient.waitForTransactionReceipt({ + hash: userOpReceipt.receipt.transactionHash + }) + console.timeEnd("write methods") + console.log({ transactionHash }) +} + +main() + .then(() => { + process.exit(0) + }) + .catch((error) => { + console.error(error) + process.exitCode = 1 + }) diff --git a/src/account/BaseSmartContractAccount.ts b/src/account/BaseSmartContractAccount.ts deleted file mode 100644 index 92d774138..000000000 --- a/src/account/BaseSmartContractAccount.ts +++ /dev/null @@ -1,353 +0,0 @@ -import { - http, - type Address, - type GetContractReturnType, - type Hash, - type Hex, - type PublicClient, - createPublicClient, - getContract, - trim -} from "viem" -import { EntrypointAbi } from "../__contracts/abi/EntryPointABI.js" -import contracts from "../__contracts/index.js" -import { Logger, type SmartAccountSigner } from "./index.js" -import type { MODE_MODULE_ENABLE, MODE_VALIDATION } from "./utils/Constants.js" -import type { - BaseSmartContractAccountProps, - BatchUserOperationCallData, - ISmartContractAccount, - Transaction -} from "./utils/Types.js" -import { wrapSignatureWith6492 } from "./utils/Utils.js" - -export enum DeploymentState { - UNDEFINED = "0x0", - NOT_DEPLOYED = "0x1", - DEPLOYED = "0x2" -} - -export abstract class BaseSmartContractAccount< - TSigner extends SmartAccountSigner = SmartAccountSigner -> implements ISmartContractAccount<TSigner> -{ - protected factoryAddress: Address - - protected deploymentState: DeploymentState = DeploymentState.UNDEFINED - - protected accountAddress?: Address - - protected accountInitCode?: Hex - - protected signer: TSigner - - protected entryPoint: GetContractReturnType< - typeof contracts.entryPoint.abi, - PublicClient - > - - protected entryPointAddress: Address - - public publicClient: PublicClient - - constructor(params: BaseSmartContractAccountProps) { - this.entryPointAddress = - params.entryPointAddress ?? contracts.entryPoint.address - - this.publicClient = createPublicClient({ - chain: params.chain, - transport: http(params.rpcUrl) - }) - - this.accountAddress = params.accountAddress - this.factoryAddress = params.factoryAddress - this.signer = params.signer as TSigner - this.accountInitCode = params.initCode - - this.entryPoint = getContract({ - address: this.entryPointAddress, - abi: EntrypointAbi, - client: this.publicClient as PublicClient - }) - } - - //#region abstract-methods - - /** - * This method should return a signature that will not `revert` during validation. - * It does not have to pass validation, just not cause the contract to revert. - * This is required for gas estimation so that the gas estimate are accurate. - * - */ - abstract getDummySignature(): Hash - - /** - * this method should return the abi encoded function data for a call to your contract's `execute` method - * - * @param target -- equivalent to `to` in a normal transaction - * @param value -- equivalent to `value` in a normal transaction - * @param data -- equivalent to `data` in a normal transaction - * @returns abi encoded function data for a call to your contract's `execute` method - */ - abstract encodeExecute( - transaction: Transaction, - useExecutor: boolean - ): Promise<Hash> - - /** - * this should return an ERC-191 compliant message and is used to sign UO Hashes - * - * @param msg -- the message to sign - */ - abstract signMessage(msg: string | Uint8Array): Promise<Hash> - - /** - * this should return the init code that will be used to create an account if one does not exist. - * This is the concatenation of the account's factory address and the abi encoded function data of the account factory's `createAccount` method. - * https://github.com/eth-infinitism/account-abstraction/blob/abff2aca61a8f0934e533d0d352978055fddbd96/contracts/core/SenderCreator.sol#L12 - */ - protected abstract getAccountInitCode(): Promise<Hash> - - //#endregion abstract-methods - - //#region optional-methods - - /** - * If your account handles 1271 signatures of personal_sign differently - * than it does UserOperations, you can implement two different approaches to signing - * - * @param uoHash -- The hash of the UserOperation to sign - * @returns the signature of the UserOperation - */ - async signUserOperationHash(uoHash: Hash): Promise<Hash> { - return this.signMessage(uoHash) - } - - /** - * If your contract supports signing and verifying typed data, - * you should implement this method. - * - * @param _params -- Typed Data params to sign - */ - abstract signTypedData(typedData: any): Promise<`0x${string}`> - - /** - * This method should wrap the result of `signMessage` as per - * [EIP-6492](https://eips.ethereum.org/EIPS/eip-6492) - * - * @param msg -- the message to sign - */ - async signMessageWith6492(msg: string | Uint8Array): Promise<`0x${string}`> { - const [isDeployed, signature] = await Promise.all([ - this.isAccountDeployed(), - this.signMessage(msg) - ]) - - return this.create6492Signature(isDeployed, signature) - } - - /** - * Similar to the signMessageWith6492 method above, - * this method should wrap the result of `signTypedData` as per - * [EIP-6492](https://eips.ethereum.org/EIPS/eip-6492) - * - * @param params -- Typed Data params to sign - */ - async signTypedDataWith6492(typedData: any): Promise<`0x${string}`> { - const [isDeployed, signature] = await Promise.all([ - this.isAccountDeployed(), - this.signTypedData(typedData) - ]) - - return this.create6492Signature(isDeployed, signature) - } - - /** - * Not all contracts support batch execution. - * If your contract does, this method should encode a list of - * transactions into the call data that will be passed to your - * contract's batch execution method. - * - * @param _txs -- the transactions to batch execute - */ - async encodeBatchExecute( - _txs: BatchUserOperationCallData - ): Promise<`0x${string}`> { - throw new Error("Batch execution not supported") - } - - /** - * If your contract supports UUPS, you can implement this method which can be - * used to upgrade the implementation of the account. - * - * @param upgradeToImplAddress -- the implementation address of the contract you want to upgrade to - * @param upgradeToInitData -- the initialization data required by that account - */ - encodeUpgradeToAndCall = async ( - _upgradeToImplAddress: Address, - _upgradeToInitData: Hex - ): Promise<Hex> => { - throw new Error("Upgrade ToAndCall Not Supported") - } - //#endregion optional-methods - - // Extra implementations - abstract getNonce( - validationMode?: typeof MODE_VALIDATION | typeof MODE_MODULE_ENABLE - ): Promise<bigint> - - private async _isDeployed(): Promise<boolean> { - const contractCode = await this.publicClient.getBytecode({ - address: await this.getAddress() - }) - return (contractCode?.length ?? 0) > 2 - } - - async getInitCode(): Promise<Hex> { - if (this.deploymentState === DeploymentState.DEPLOYED) { - return "0x" - } - - const isDeployed = await this._isDeployed() - - if (isDeployed) { - this.deploymentState = DeploymentState.DEPLOYED - return "0x" - } - - this.deploymentState = DeploymentState.NOT_DEPLOYED - - return this._getAccountInitCode() - } - - async getAddress(): Promise<Address> { - if (!this.accountAddress) { - const initCode = await this._getAccountInitCode() - Logger.log("[BaseSmartContractAccount](getAddress) initCode: ", initCode) - try { - await this.entryPoint.simulate.getSenderAddress([initCode]) - } catch (err: any) { - Logger.log( - "[BaseSmartContractAccount](getAddress) getSenderAddress err: ", - err - ) - - if (err.cause?.data?.errorName === "SenderAddressResult") { - this.accountAddress = err.cause.data.args[0] as Address - Logger.log( - "[BaseSmartContractAccount](getAddress) entryPoint.getSenderAddress result:", - this.accountAddress - ) - return this.accountAddress - } - - if (err.details === "Invalid URL") { - throw new Error("Invalid URL") - } - } - - throw new Error("Failed to get counterfactual account address") - } - - return this.accountAddress - } - - extend = <R>(fn: (self: this) => R): this & R => { - const extended = fn(this) as any - // this should make it so extensions can't overwrite the base methods - for (const key in this) { - delete extended[key] - } - return Object.assign(this, extended) - } - - getSigner(): TSigner { - return this.signer - } - - getFactoryAddress(): Address { - return this.factoryAddress - } - - getEntryPointAddress(): Address { - return this.entryPointAddress - } - - async isAccountDeployed(): Promise<boolean> { - return (await this.getDeploymentState()) === DeploymentState.DEPLOYED - } - - async getDeploymentState(): Promise<DeploymentState> { - if (this.deploymentState === DeploymentState.UNDEFINED) { - const initCode = await this.getInitCode() - return initCode === "0x" - ? DeploymentState.DEPLOYED - : DeploymentState.NOT_DEPLOYED - } - if (this.deploymentState === DeploymentState.NOT_DEPLOYED) { - if (await this._isDeployed()) { - this.deploymentState = DeploymentState.DEPLOYED - } - } - return this.deploymentState - } - /** - * https://eips.ethereum.org/EIPS/eip-4337#first-time-account-creation - * The initCode field (if non-zero length) is parsed as a 20-byte address, - * followed by calldata to pass to this address. - * The factory address is the first 40 char after the 0x, and the callData is the rest. - */ - protected async parseFactoryAddressFromAccountInitCode(): Promise< - [Address, Hex] - > { - const initCode = await this._getAccountInitCode() - const factoryAddress = `0x${initCode.substring(2, 42)}` as Address - const factoryCalldata = `0x${initCode.substring(42)}` as Hex - return [factoryAddress, factoryCalldata] - } - - protected async getImplementationAddress(): Promise<"0x0" | Address> { - const accountAddress = await this.getAddress() - - const storage = await this.publicClient.getStorageAt({ - address: accountAddress, - // This is the default slot for the implementation address for Proxies - slot: "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" - }) - - if (storage == null) { - throw new Error( - "Failed to get storage slot 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" - ) - } - - return trim(storage) - } - - private async _getAccountInitCode(): Promise<Hash> { - return this.accountInitCode ?? this.getAccountInitCode() - } - - private async create6492Signature( - isDeployed: boolean, - signature: Hash - ): Promise<Hash> { - if (isDeployed) { - return signature - } - - const [factoryAddress, factoryCalldata] = - await this.parseFactoryAddressFromAccountInitCode() - - Logger.log( - `[BaseSmartContractAccount](create6492Signature)\ - factoryAddress: ${factoryAddress}, factoryCalldata: ${factoryCalldata}` - ) - - return wrapSignatureWith6492({ - factoryAddress, - factoryCalldata, - signature - }) - } -} diff --git a/src/account/NexusSmartAccount.ts b/src/account/NexusSmartAccount.ts deleted file mode 100644 index 9d3ad3ff2..000000000 --- a/src/account/NexusSmartAccount.ts +++ /dev/null @@ -1,2174 +0,0 @@ -import { - type AbiParameter, - type Address, - type GetContractReturnType, - type Hash, - type Hex, - type PublicClient, - type TypedDataDefinition, - type WalletClient, - concat, - concatHex, - decodeFunctionData, - domainSeparator, - encodeAbiParameters, - encodeFunctionData, - encodePacked, - formatUnits, - getAddress, - getContract, - getTypesForEIP712Domain, - keccak256, - pad, - parseAbi, - parseAbiParameters, - toBytes, - toHex, - validateTypedData -} from "viem" -import contracts from "../__contracts" -import { NexusAbi } from "../__contracts/abi" -import { - Bundler, - type GetUserOperationGasPriceReturnType, - type UserOpReceipt, - type UserOpResponse -} from "../bundler/index.js" -import type { IBundler } from "../bundler/interfaces/IBundler.js" -import { EXECUTE_BATCH, EXECUTE_SINGLE } from "../bundler/utils/Constants.js" -import type { BaseExecutionModule } from "../modules/base/BaseExecutionModule.js" -import { BaseValidationModule } from "../modules/base/BaseValidationModule.js" -import { - type Execution, - type Module, - type ModuleInfo, - type SendUserOpParams, - createK1ValidatorModule, - createValidationModule, - moduleTypeIds -} from "../modules/index.js" -import type { K1ValidatorModule } from "../modules/validators/K1ValidatorModule.js" -import { - type FeeQuotesOrDataDto, - type FeeQuotesOrDataResponse, - type IHybridPaymaster, - type IPaymaster, - Paymaster, - type SponsorUserOperationDto -} from "../paymaster/index.js" -import { - BaseSmartContractAccount, - DeploymentState -} from "./BaseSmartContractAccount.js" -import { - Logger, - type SmartAccountSigner, - type StateOverrideSet, - type UserOperationStruct, - convertSigner -} from "./index.js" -import { - GENERIC_FALLBACK_SELECTOR, - type MODE_MODULE_ENABLE, - MODE_VALIDATION, - PARENT_TYPEHASH -} from "./utils/Constants.js" -import { - ADDRESS_ZERO, - ERC20_ABI, - ERROR_MESSAGES, - MAGIC_BYTES, - NATIVE_TOKEN_ALIAS, - SENTINEL_ADDRESS -} from "./utils/Constants.js" -import type { - BalancePayload, - BiconomyTokenPaymasterRequest, - BigNumberish, - BuildUserOpOptions, - CounterFactualAddressParam, - NexusSmartAccountConfig, - NexusSmartAccountConfigConstructorProps, - NonceOptions, - PaymasterUserOperationDto, - SupportedToken, - Transaction, - TransferOwnershipCompatibleModule, - WithdrawalRequest -} from "./utils/Types.js" -import { eip712WrapHash, typeToString } from "./utils/Utils.js" -import { getAccountDomainStructFields } from "./utils/Utils.js" -import { addressEquals, isNullOrUndefined, packUserOp } from "./utils/Utils.js" - -export class NexusSmartAccount extends BaseSmartContractAccount { - private index: bigint - - private chainId: number - - paymaster?: IPaymaster - - bundler?: IBundler - - private accountContract?: GetContractReturnType< - typeof NexusAbi, - PublicClient | WalletClient - > - - // private scanForUpgradedAccountsFromV1!: boolean - - // private maxIndexForScan!: bigint - - // Validation module responsible for account deployment initCode. This acts as a default authorization module. - defaultValidationModule!: BaseValidationModule - - // Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature. - activeValidationModule!: BaseValidationModule - - installedExecutors: BaseExecutionModule[] = [] - activeExecutionModule?: BaseExecutionModule - k1ValidatorAddress: Address - - private constructor( - readonly nexusSmartAccountConfig: NexusSmartAccountConfigConstructorProps - ) { - const resolvedEntryPointAddress = - (nexusSmartAccountConfig.entryPointAddress as Hex) ?? - contracts.entryPoint.address - - super({ - ...nexusSmartAccountConfig, - entryPointAddress: resolvedEntryPointAddress, - accountAddress: - (nexusSmartAccountConfig.accountAddress as Hex) ?? undefined, - factoryAddress: nexusSmartAccountConfig.factoryAddress - }) - - this.k1ValidatorAddress = nexusSmartAccountConfig.k1ValidatorAddress - const chain = nexusSmartAccountConfig.chain - - this.defaultValidationModule = - nexusSmartAccountConfig.defaultValidationModule - this.activeValidationModule = nexusSmartAccountConfig.activeValidationModule - - this.index = nexusSmartAccountConfig.index ?? 0n - this.chainId = chain.id - this.bundler = nexusSmartAccountConfig.bundler - - if (nexusSmartAccountConfig.paymasterUrl) { - this.paymaster = new Paymaster({ - paymasterUrl: nexusSmartAccountConfig.paymasterUrl - }) - } else { - this.paymaster = nexusSmartAccountConfig.paymaster - } - - this.bundler = nexusSmartAccountConfig.bundler - - // Added bang operator to avoid null check as the constructor have these params as optional - this.defaultValidationModule = - // biome-ignore lint/style/noNonNullAssertion: <explanation> - nexusSmartAccountConfig.defaultValidationModule! - this.activeValidationModule = - // biome-ignore lint/style/noNonNullAssertion: <explanation> - nexusSmartAccountConfig.activeValidationModule! - } - - /** - * Creates a new instance of NexusSmartAccount - * - * This method will create a NexusSmartAccount instance but will not deploy the Smart Account - * Deployment of the Smart Account will be donewith the first user operation. - * - * - Docs: https://docs.biconomy.io/account/integration#integration-1 - * - * @param nexusSmartAccountConfig - Configuration for initializing the NexusSmartAccount instance {@link NexusSmartAccountConfig}. - * @returns A promise that resolves to a new instance of NexusSmartAccount. - * @throws An error if something is wrong with the smart account instance creation. - * - * @example - * import { createClient } from "viem" - * import { createSmartAccountClient, NexusSmartAccount } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonAmoy } from "viem/chains"; - * - * const signer = createWalletClient({ - * account, - * chain: polygonAmoy, - * transport: http(), - * }); - * - * const bundlerUrl = "" // Retrieve bundler url from dashboard - * - * const smartAccountFromStaticCreate = await NexusSmartAccount.create({ signer, bundlerUrl }); - * - * // Is the same as... - * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); - * - */ - public static async create( - nexusSmartAccountConfig: NexusSmartAccountConfig - ): Promise<NexusSmartAccount> { - let resolvedSmartAccountSigner!: SmartAccountSigner - const defaultedRpcUrl = - nexusSmartAccountConfig.rpcUrl ?? - nexusSmartAccountConfig.chain.rpcUrls.default.http[0] - - const defaultedEntryPointAddress = - (nexusSmartAccountConfig.entryPointAddress ?? - contracts.entryPoint.address) as Hex - - // Signer needs to be initialised here before defaultValidationModule is set - if (nexusSmartAccountConfig.signer) { - const signerResult = await convertSigner( - nexusSmartAccountConfig.signer, - nexusSmartAccountConfig.rpcUrl - ) - resolvedSmartAccountSigner = signerResult.signer - } - - const bundler: IBundler = - nexusSmartAccountConfig.bundler ?? - new Bundler({ - // biome-ignore lint/style/noNonNullAssertion: always required - bundlerUrl: nexusSmartAccountConfig.bundlerUrl!, - chain: nexusSmartAccountConfig.chain - }) - - let defaultValidationModule = - nexusSmartAccountConfig.defaultValidationModule - - const k1ValidatorAddress = - nexusSmartAccountConfig.k1ValidatorAddress ?? - (contracts.k1Validator.address as Hex) - const factoryAddress = - nexusSmartAccountConfig.factoryAddress ?? - (contracts.k1ValidatorFactory.address as Hex) - - if (!defaultValidationModule) { - const newModule = await createK1ValidatorModule( - resolvedSmartAccountSigner, - k1ValidatorAddress - ) - defaultValidationModule = newModule as K1ValidatorModule - } - const activeValidationModule = - nexusSmartAccountConfig?.activeValidationModule ?? defaultValidationModule - if (!resolvedSmartAccountSigner) { - resolvedSmartAccountSigner = activeValidationModule.getSigner() - } - if (!resolvedSmartAccountSigner) { - throw new Error("signer required") - } - - const config: NexusSmartAccountConfigConstructorProps = { - ...nexusSmartAccountConfig, - factoryAddress, - k1ValidatorAddress, - defaultValidationModule, - activeValidationModule, - rpcUrl: defaultedRpcUrl, - bundler, - signer: resolvedSmartAccountSigner, - entryPointAddress: defaultedEntryPointAddress - } - - const smartAccount = new NexusSmartAccount(config) - await smartAccount.getDeploymentState() - return smartAccount - } - - override async getAddress(params?: CounterFactualAddressParam): Promise<Hex> { - if (isNullOrUndefined(this.accountAddress)) { - const signerAddress = await this.signer.getAddress() - const index = params?.index ?? this.index - this.accountAddress = (await this.publicClient.readContract({ - address: this.factoryAddress, - abi: contracts.k1ValidatorFactory.abi, - functionName: "computeAccountAddress", - args: [signerAddress, index, [], 0] - })) as Hex - } - return this.accountAddress - } - public getAccountAddress = this.getAddress - - /** - * Returns an upper estimate for the gas spent on a specific user operation - * - * This method will fetch an approximate gas estimate for the user operation, given the current state of the network. - * It is regularly an overestimate, and the actual gas spent will likely be lower. - * It is unlikely to be an underestimate unless the network conditions rapidly change. - * - * @param transactions Array of {@link Transaction} to be sent. - * @param buildUseropDto {@link BuildUserOpOptions}. - * @returns Promise<bigint> - The estimated gas cost in wei. - * - * @example - * import { createClient } from "viem" - * import { createSmartAccountClient } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonAmoy } from "viem/chains"; - * - * const signer = createWalletClient({ - * account, - * chain: polygonAmoy, - * transport: http(), - * }); - * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, paymasterUrl }); // Retrieve bundler/paymaster url from dashboard - * const encodedCall = encodeFunctionData({ - * abi: CounterAbi, - * functionName: "incrementNumber", - * args: ["0x..."], - * }); - * - * const tx = { - * to: mockAddresses.Counter, - * data: encodedCall - * } - * - * const amountInWei = await smartAccount.getGasEstimates([tx, tx], { - * paymasterServiceData: { - * mode: "SPONSORED", - * }, - * }); - * - * console.log(amountInWei.toString()); - * - */ - public async getGasEstimate( - transactions: Transaction[], - buildUseropDto?: BuildUserOpOptions - ): Promise<bigint> { - const { - callGasLimit, - preVerificationGas, - verificationGasLimit, - maxFeePerGas - } = await this.buildUserOp(transactions, buildUseropDto) - - const _callGasLimit = BigInt(callGasLimit || 0) - const _preVerificationGas = BigInt(preVerificationGas || 0) - const _verificationGasLimit = BigInt(verificationGasLimit || 0) - const _maxFeePerGas = BigInt(maxFeePerGas || 0) - - if (!buildUseropDto?.paymasterServiceData?.mode) { - return ( - (_callGasLimit + _preVerificationGas + _verificationGasLimit) * - _maxFeePerGas - ) - } - return ( - (_callGasLimit + - BigInt(3) * _verificationGasLimit + - _preVerificationGas) * - _maxFeePerGas - ) - } - - /** - * Returns balances for the smartAccount instance. - * - * This method will fetch tokens info given an array of token addresses for the smartAccount instance. - * The balance of the native token will always be returned as the last element in the reponse array, with the address set to 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE. - * - * @param addresses - Optional. Array of asset addresses to fetch the balances of. If not provided, the method will return only the balance of the native token. - * @returns Promise<Array<BalancePayload>> - An array of token balances (plus the native token balance) of the smartAccount instance. - * - * @example - * import { createClient } from "viem" - * import { createSmartAccountClient } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonAmoy } from "viem/chains"; - * - * const signer = createWalletClient({ - * account, - * chain: polygonAmoy, - * transport: http(), - * }); - * - * const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a"; - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); - * const [tokenBalanceFromSmartAccount, nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalances([token]); - * - * console.log(tokenBalanceFromSmartAccount); - * // { - * // amount: 1000000000000000n, - * // decimals: 6, - * // address: "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a", - * // formattedAmount: "1000000", - * // chainId: 11155111 - * // } - * - * // or to get the nativeToken balance - * - * const [nativeTokenBalanceFromSmartAccount] = await smartAccount.getBalances(); - * - * console.log(nativeTokenBalanceFromSmartAccount); - * // { - * // amount: 1000000000000000n, - * // decimals: 18, - * // address: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", - * // formattedAmount: "1", - * // chainId: 11155111 - * // } - * - */ - public async getBalances( - addresses?: Array<Hex> - ): Promise<Array<BalancePayload>> { - const accountAddress = await this.getAddress() - const result: BalancePayload[] = [] - - if (addresses) { - const tokenContracts = addresses.map((address) => - getContract({ - address, - abi: parseAbi(ERC20_ABI), - client: this.publicClient - }) - ) - - const balancePromises = tokenContracts.map((tokenContract) => - tokenContract.read.balanceOf([accountAddress]) - ) as Promise<bigint>[] - const decimalsPromises = tokenContracts.map((tokenContract) => - tokenContract.read.decimals() - ) as Promise<number>[] - const [balances, decimalsPerToken] = await Promise.all([ - Promise.all(balancePromises), - Promise.all(decimalsPromises) - ]) - - balances.forEach((amount, index) => - result.push({ - amount, - decimals: decimalsPerToken[index], - address: addresses[index], - formattedAmount: formatUnits(amount, decimalsPerToken[index]), - chainId: this.chainId - }) - ) - } - - const balance = await this.publicClient.getBalance({ - address: accountAddress - }) - - result.push({ - amount: balance, - decimals: 18, - address: NATIVE_TOKEN_ALIAS, - formattedAmount: formatUnits(balance, 18), - chainId: this.chainId - }) - - return result - } - - /** - * Transfers funds from Smart Account to recipient (usually EOA) - * @param recipient - Address of the recipient - * @param withdrawalRequests - Array of withdrawal requests {@link WithdrawalRequest}. If withdrawal request is an empty array, it will transfer the balance of the native token. Using a paymaster will ensure no dust remains in the smart account. - * @param buildUseropDto - Optional. {@link BuildUserOpOptions} - * - * @returns Promise<Hash> - An object containing the status of the transaction. - * - * @example - * import { createClient } from "viem" - * import { createSmartAccountClient, NATIVE_TOKEN_ALIAS } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonMumbai } from "viem/chains"; - * - * const token = "0x747A4168DB14F57871fa8cda8B5455D8C2a8e90a"; - * const signer = createWalletClient({ - * account, - * chain: polygonMumbai, - * transport: http(), - * }); - * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); - * - * const { wait } = await smartAccount.withdraw( - * [ - * { address: token }, // omit the amount to withdraw the full balance - * { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } - * ], - * account.address, // Default recipient used if no recipient is present in the withdrawal request - * { - * paymasterServiceData: { mode: "SPONSORED" }, - * } - * ); - * - * // OR to withdraw all of the native token, leaving no dust in the smart account - * - * const { wait } = await smartAccount.withdraw([], account.address, { - * paymasterServiceData: { mode: "SPONSORED" }, - * }); - * - * const { success } = await wait(); - */ - public async withdraw( - withdrawalRequests?: WithdrawalRequest[] | null, - defaultRecipient?: Hex | null, - buildUseropDto?: BuildUserOpOptions - ): Promise<UserOpResponse> { - const accountAddress = this.accountAddress ?? (await this.getAddress()) - - if ( - !defaultRecipient && - withdrawalRequests?.some(({ recipient }) => !recipient) - ) { - throw new Error(ERROR_MESSAGES.NO_RECIPIENT) - } - - // Remove the native token from the withdrawal requests - let tokenRequests = - withdrawalRequests?.filter( - ({ address }) => !addressEquals(address, NATIVE_TOKEN_ALIAS) - ) ?? [] - - // Check if the amount is not present in all withdrawal requests - const shouldFetchMaxBalances = tokenRequests.some(({ amount }) => !amount) - - // Get the balances of the tokens if the amount is not present in the withdrawal requests - if (shouldFetchMaxBalances) { - const balances = await this.getBalances( - tokenRequests.map(({ address }) => address) - ) - tokenRequests = tokenRequests.map(({ amount, address }, i) => ({ - address, - amount: amount ?? balances[i].amount - })) - } - - // Create the transactions - const txs: Transaction[] = tokenRequests.map( - ({ address, amount, recipient: recipientFromRequest }) => ({ - to: address, - data: encodeFunctionData({ - abi: parseAbi(ERC20_ABI), - functionName: "transfer", - args: [recipientFromRequest || defaultRecipient, amount] - }) - }) - ) - - // Check if eth alias is present in the original withdrawal requests - const nativeTokenRequest = withdrawalRequests?.find(({ address }) => - addressEquals(address, NATIVE_TOKEN_ALIAS) - ) - const hasNoRequests = !withdrawalRequests?.length - if (!!nativeTokenRequest || hasNoRequests) { - // Check that an amount is present in the withdrawal request, if no paymaster service data is present, as max amounts cannot be calculated without a paymaster. - if ( - !nativeTokenRequest?.amount && - !buildUseropDto?.paymasterServiceData?.mode - ) { - throw new Error(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT) - } - - // get eth balance if not present in withdrawal requests - const nativeTokenAmountToWithdraw = - nativeTokenRequest?.amount ?? - (await this.publicClient.getBalance({ address: accountAddress })) - - txs.push({ - to: (nativeTokenRequest?.recipient ?? defaultRecipient) as Hex, - value: nativeTokenAmountToWithdraw - }) - } - - return this.sendTransaction(txs, buildUseropDto) - } - - async _getAccountContract(): Promise< - GetContractReturnType<typeof NexusAbi, PublicClient> - > { - if (await this.isAccountDeployed()) { - if (!this.accountContract) { - this.accountContract = getContract({ - address: await this.getAddress(), - abi: NexusAbi, - client: this.publicClient as PublicClient - }) - } - return this.accountContract - } - throw new Error(ERROR_MESSAGES.ACCOUNT_NOT_DEPLOYED) - } - - isActiveValidationModuleDefined(): boolean { - if (!this.activeValidationModule) - throw new Error("Must provide an instance of active validation module.") - return true - } - - isDefaultValidationModuleDefined(): boolean { - if (!this.defaultValidationModule) - throw new Error("Must provide an instance of default validation module.") - return true - } - - /** - * Sets the active validation module on the NexusSmartAccount instance - * @param validationModule - BaseValidationModule instance - * - * @returns Promise<BaseValidationModule> - The BaseValidationModule instance. - */ - setActiveValidationModule( - validationModule: BaseValidationModule - ): BaseValidationModule { - if (validationModule instanceof BaseValidationModule) { - this.activeValidationModule = validationModule - } - return this.activeValidationModule - } - - /** - * Sets the active validation module on the NexusSmartAccount instance - * @param validationModuleAddress - Address of the validation module - * @param data - Initialization data for the validation module - * - * @returns Promise<BaseValidationModule> - The BaseValidationModule instance. - */ - async setActiveValidationModuleByAddress({ - validationModuleAddress, - data - }: { - validationModuleAddress: Address - data: Hex - }): Promise<BaseValidationModule> { - if (validationModuleAddress) { - this.activeValidationModule = await createValidationModule( - this.signer, - validationModuleAddress, - data - ) - return this.activeValidationModule - } - throw new Error("Validation module address is required") - } - - /** - * Sets the active executor module on the NexusSmartAccount instance - * @param executorModule - Address of the executor module - * @param data - Initialization data for the executor module - * - * @returns Promise<BaseExecutionModule> - The BaseExecutionModule instance. - */ - setActiveExecutionModule( - executorModule: BaseExecutionModule - ): BaseExecutionModule { - this.activeExecutionModule = executorModule - return this.activeExecutionModule - } - - setDefaultValidationModule( - validationModule: BaseValidationModule - ): NexusSmartAccount { - if (validationModule instanceof BaseValidationModule) { - this.defaultValidationModule = validationModule - } - return this - } - - // async getV1AccountsUpgradedToV2( - // params: QueryParamsForAddressResolver - // ): Promise<Hex> { - // const maxIndexForScan = params.maxIndexForScan ?? this.maxIndexForScan - - // const addressResolver = getContract({ - // address: ADDRESS_RESOLVER_ADDRESS, - // abi: AccountResolverAbi, - // client: { - // public: this.publicClient as PublicClient - // } - // }) - // // Note: depending on moduleAddress and moduleSetupData passed call this. otherwise could call resolveAddresses() - - // if (params.moduleAddress && params.moduleSetupData) { - // const result = await addressResolver.read.resolveAddressesFlexibleForV2([ - // params.eoaAddress, - // Number.parseInt(maxIndexForScan.toString()), // TODO: SHOULD BE A BIGINT BUT REQUIRED TO BE A NUMBER FOR THE CONTRACT - // params.moduleAddress, - // params.moduleSetupData - // ]) - - // const desiredV1Account = result.find( - // (smartAccountInfo: { - // factoryVersion: string - // currentVersion: string - // deploymentIndex: { toString: () => string } - // }) => - // smartAccountInfo.factoryVersion === "v1" && - // smartAccountInfo.currentVersion === "2.0.0" && - // smartAccountInfo.deploymentIndex === params.index - // ) - - // if (desiredV1Account) { - // const smartAccountAddress = desiredV1Account.accountAddress - // return smartAccountAddress - // } - // return ADDRESS_ZERO - // } - // return ADDRESS_ZERO - // } - - /** - * Return the value to put into the "initCode" field, if the account is not yet deployed. - * This value holds the "factory" address, followed by this account's information - */ - public override async getAccountInitCode(): Promise<Hex> { - this.isDefaultValidationModuleDefined() - - if (await this.isAccountDeployed()) return "0x" - - const factoryData = (await this.getFactoryData()) as Hex - - return concatHex([this.factoryAddress, factoryData]) - } - - /** - * - * @param to { target } address of transaction - * @param value represents amount of native tokens - * @param data represent data associated with transaction - * @returns encoded data for execute function - */ - async encodeExecute(transaction: Transaction): Promise<Hex> { - const mode = EXECUTE_SINGLE - const executionCalldata = encodePacked( - ["address", "uint256", "bytes"], - [ - transaction.to as Hex, - BigInt(transaction.value ?? 0n), - (transaction.data as Hex) ?? ("0x" as Hex) - ] - ) - return encodeFunctionData({ - abi: parseAbi([ - "function execute(bytes32 mode, bytes calldata executionCalldata) external" - ]), - functionName: "execute", - args: [mode, executionCalldata] - }) - } - - /** - * - * @param to { target } array of addresses in transaction - * @param value represents array of amount of native tokens associated with each transaction - * @param data represent array of data associated with each transaction - * @returns encoded data for executeBatch function - */ - async encodeExecuteBatch(transactions: Transaction[]): Promise<Hex> { - const executionAbiParams: AbiParameter = { - type: "tuple[]", - components: [ - { name: "target", type: "address" }, - { name: "value", type: "uint256" }, - { name: "callData", type: "bytes" } - ] - } - - const executions = transactions.map((tx) => ({ - target: tx.to, - callData: tx.data ?? "0x", - value: BigInt(tx.value ?? 0n) - })) - - const executionCalldataPrep = encodeAbiParameters( - [executionAbiParams], - [executions] - ) - - return encodeFunctionData({ - abi: parseAbi([ - "function execute(bytes32 mode, bytes calldata executionCalldata) external" - ]), - functionName: "execute", - args: [EXECUTE_BATCH, executionCalldataPrep] - }) - } - - // dummy signature depends on the validation module supplied. - async getDummySignatures(): Promise<Hex> { - // const params = { ...(this.sessionData ? this.sessionData : {}), ..._params } - this.isActiveValidationModuleDefined() - return this.activeValidationModule.getDummySignature() as Hex - } - - // TODO: review this - getDummySignature(): Hex { - throw new Error("Method not implemented! Call getDummySignatures instead.") - } - - // Might use provided paymaster instance to get dummy data (from pm service) - getDummyPaymasterData(): string { - return "0x" - } - - validateUserOp( - // userOp: Partial<UserOperationStruct>, - // requiredFields: UserOperationKey[] - ): boolean { - // console.log(userOp, "userOp"); - // for (const field of requiredFields) { - // if (isNullOrUndefined(userOp[field])) { - // throw new Error(`${String(field)} is missing in the UserOp`) - // } - // } - return true - } - - async signUserOp( - userOp: Partial<UserOperationStruct> - ): Promise<UserOperationStruct> { - this.isActiveValidationModuleDefined() - // TODO REMOVE COMMENT AND CHECK FOR PIMLICO USER OP FIELDS - // const requiredFields: UserOperationKey[] = [ - // "sender", - // "nonce", - // "callGasLimit", - // "signature", - // "maxFeePerGas", - // "maxPriorityFeePerGas", - // ] - // this.validateUserOp(userOp, requiredFields) - const userOpHash = await this.getUserOpHash(userOp) - - const eoaSignature = (await this.activeValidationModule.signUserOpHash( - userOpHash - )) as Hex - - userOp.signature = eoaSignature - return userOp as UserOperationStruct - } - - getSignatureWithModuleAddress( - moduleSignature: Hex, - moduleAddress?: Hex - ): Hex { - const moduleAddressToUse = - moduleAddress ?? (this.activeValidationModule.getAddress() as Hex) - return encodePacked( - ["address", "bytes"], - [moduleAddressToUse, moduleSignature] - ) - } - - private async getPaymasterFeeQuotesOrData( - userOp: Partial<UserOperationStruct>, - feeQuotesOrData: FeeQuotesOrDataDto - ): Promise<FeeQuotesOrDataResponse> { - const paymaster = this - .paymaster as IHybridPaymaster<PaymasterUserOperationDto> - const tokenList = feeQuotesOrData?.preferredToken - ? [feeQuotesOrData?.preferredToken] - : feeQuotesOrData?.tokenList?.length - ? feeQuotesOrData?.tokenList - : [] - return paymaster.getPaymasterFeeQuotesOrData(userOp, { - ...feeQuotesOrData, - tokenList - }) - } - - /** - * - * @description This function will retrieve fees from the paymaster in erc20 mode - * - * @param manyOrOneTransactions Array of {@link Transaction} to be batched and sent. Can also be a single {@link Transaction}. - * @param buildUseropDto {@link BuildUserOpOptions}. - * @returns Promise<FeeQuotesOrDataResponse> - * - * @example - * import { createClient } from "viem" - * import { createSmartAccountClient } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonAmoy } from "viem/chains"; - * - * const signer = createWalletClient({ - * account, - * chain: polygonAmoy, - * transport: http(), - * }); - * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard - * const encodedCall = encodeFunctionData({ - * abi: CounterAbi, - * functionName: "incrementNumber", - * args: ["0x..."], - * }); - * - * const transaction = { - * to: mockAddresses.Counter, - * data: encodedCall - * } - * - * const feeQuotesResponse: FeeQuotesOrDataResponse = await smartAccount.getTokenFees(transaction, { paymasterServiceData: { mode: "ERC20" } }); - * - * const userSeletedFeeQuote = feeQuotesResponse.feeQuotes?.[0]; - * - * const { wait } = await smartAccount.sendTransaction(transaction, { - * paymasterServiceData: { - * mode: "ERC20", - * feeQuote: userSeletedFeeQuote, - * spender: feeQuotesResponse.tokenPaymasterAddress, - * }, - * }); - * - * const { success, receipt } = await wait(); - * - */ - public async getTokenFees( - manyOrOneTransactions: Transaction | Transaction[], - buildUseropDto: BuildUserOpOptions - ): Promise<FeeQuotesOrDataResponse> { - const txs = Array.isArray(manyOrOneTransactions) - ? manyOrOneTransactions - : [manyOrOneTransactions] - const userOp = await this.buildUserOp(txs, buildUseropDto) - if (!buildUseropDto.paymasterServiceData) - throw new Error("paymasterServiceData was not provided") - return this.getPaymasterFeeQuotesOrData( - userOp, - buildUseropDto.paymasterServiceData - ) - } - - /** - * - * @description This function will return an array of supported tokens from the erc20 paymaster associated with the Smart Account - * @returns Promise<{@link SupportedToken}> - * - * @example - * import { createClient } from "viem" - * import { createSmartAccountClient } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonAmoy } from "viem/chains"; - * - * const signer = createWalletClient({ - * account, - * chain: polygonAmoy, - * transport: http(), - * }); - * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl, biconomyPaymasterApiKey }); // Retrieve bundler url from dashboard - * const tokens = await smartAccount.getSupportedTokens(); - * - * // [ - * // { - * // symbol: "USDC", - * // tokenAddress: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", - * // decimal: 6, - * // logoUrl: "https://assets.coingecko.com/coins/images/279/large/usd-coin.png?1595353707", - * // premiumPercentage: 0.1, - * // } - * // ] - * - */ - public async getSupportedTokens(): Promise<SupportedToken[]> { - const feeQuotesResponse = await this.getTokenFees( - { - data: "0x", - value: BigInt(0), - to: await this.getAddress() - }, - { - paymasterServiceData: { mode: "ERC20" } - } - ) - - return await Promise.all( - (feeQuotesResponse?.feeQuotes ?? []).map(async (quote) => { - const [tokenBalance] = await this.getBalances([ - quote.tokenAddress as Hex - ]) - return { - symbol: quote.symbol, - tokenAddress: quote.tokenAddress, - decimal: quote.decimal, - logoUrl: quote.logoUrl, - premiumPercentage: quote.premiumPercentage, - balance: tokenBalance - } - }) - ) - } - - /** - * - * @param userOp - * @param params - * @description This function will take a user op as an input, sign it with the owner key, and send it to the bundler. - * @returns Promise<Hash> - * Sends a user operation - * - * - Docs: https://docs.biconomy.io/account/methods#senduserop- - * - * @param userOp Partial<{@link UserOperationStruct}> the userOp params to be sent. - * @param params {@link SendUserOpParams}. - * @returns Promise<{@link Hash}> that you can use to track the user operation. - * - * @example - * import { createClient } from "viem" - * import { createSmartAccountClient } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonAmoy } from "viem/chains"; - * - * const signer = createWalletClient({ - * account, - * chain: polygonAmoy, - * transport: http(), - * }); - * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard - * const encodedCall = encodeFunctionData({ - * abi: CounterAbi, - * functionName: "incrementNumber", - * args: ["0x..."], - * }); - * - * const transaction = { - * to: mockAddresses.Counter, - * data: encodedCall - * } - * - * const userOp = await smartAccount.buildUserOp([transaction]); - * - * const { wait } = await smartAccount.sendUserOp(userOp); - * const { success, receipt } = await wait(); - * - */ - async sendUserOp({ - signature, - ...userOpWithoutSignature - }: Partial<UserOperationStruct>): Promise<UserOpResponse> { - const userOperation = await this.signUserOp(userOpWithoutSignature) - return await this.sendSignedUserOp(userOperation) - } - - /** - * - * @param userOp - The signed user operation to send - * @param simulationType - The type of simulation to perform ("validation" | "validation_and_execution") - * @description This function call will take 'signedUserOp' as input and send it to the bundler - * @returns - */ - async sendSignedUserOp(userOp: UserOperationStruct): Promise<UserOpResponse> { - // TODO REMOVE COMMENT AND CHECK FOR PIMLICO USER OP FIELDS - // const requiredFields: UserOperationKey[] = [ - // "sender", - // "nonce", - // "verificationGasLimit", - // "preVerificationGas", - // "maxFeePerGas", - // "maxPriorityFeePerGas", - // "signature", - // ] - // this.validateUserOp(userOp, requiredFields) - if (!this.bundler) throw new Error("Bundler is not provided") - return await this.bundler.sendUserOp(userOp) - } - - /** - * Packs gas values into the format required by PackedUserOperation. - * @param callGasLimit Call gas limit. - * @param verificationGasLimit Verification gas limit. - * @param maxFeePerGas Maximum fee per gas. - * @param maxPriorityFeePerGas Maximum priority fee per gas. - * @returns An object containing packed gasFees and accountGasLimits. - */ - public packGasValues( - callGasLimit: BigNumberish, - verificationGasLimit: BigNumberish, - maxFeePerGas: BigNumberish, - maxPriorityFeePerGas: BigNumberish - ) { - const gasFees = concat([ - pad(toHex(maxPriorityFeePerGas ?? 0n), { - size: 16 - }), - pad(toHex(maxFeePerGas ?? 0n), { size: 16 }) - ]) - const accountGasLimits = concat([ - pad(toHex(verificationGasLimit ?? 0n), { - size: 16 - }), - pad(toHex(callGasLimit ?? 0n), { size: 16 }) - ]) - - return { gasFees, accountGasLimits } - } - - async getUserOpHash(userOp: Partial<UserOperationStruct>): Promise<Hex> { - const packedUserOp = packUserOp(userOp) - const userOpHash = keccak256(packedUserOp as Hex) - const enc = encodeAbiParameters( - parseAbiParameters("bytes32, address, uint256"), - [userOpHash, this.entryPoint.address, BigInt(this.chainId)] - ) - return keccak256(enc) - } - - async estimateUserOpGas( - userOp: Partial<UserOperationStruct>, - stateOverrideSet?: StateOverrideSet - ): Promise<Partial<UserOperationStruct>> { - if (!this.bundler) throw new Error("Bundler is not provided") - const finalUserOp = userOp - - if (!userOp.maxFeePerGas && !userOp.maxPriorityFeePerGas) { - const feeData = await this.publicClient.estimateFeesPerGas() - if (feeData.maxFeePerGas?.toString()) { - finalUserOp.maxFeePerGas = feeData.maxFeePerGas - } else if (feeData.gasPrice?.toString()) { - finalUserOp.maxFeePerGas = feeData.gasPrice - } else { - finalUserOp.maxFeePerGas = await this.publicClient.getGasPrice() - } - - if (feeData.maxPriorityFeePerGas?.toString()) { - finalUserOp.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas - } else if (feeData.gasPrice?.toString()) { - finalUserOp.maxPriorityFeePerGas = feeData.gasPrice ?? 0n - } else { - finalUserOp.maxPriorityFeePerGas = await this.publicClient.getGasPrice() - } - } - - const { callGasLimit, verificationGasLimit, preVerificationGas } = - await this.bundler.estimateUserOpGas(userOp, stateOverrideSet) - finalUserOp.verificationGasLimit = - verificationGasLimit ?? userOp.verificationGasLimit - finalUserOp.callGasLimit = callGasLimit ?? userOp.callGasLimit - finalUserOp.preVerificationGas = - preVerificationGas ?? userOp.preVerificationGas - - return finalUserOp - } - - override async getNonce( - validationMode?: typeof MODE_VALIDATION | typeof MODE_MODULE_ENABLE - ): Promise<bigint> { - try { - const vm = - this.activeValidationModule.moduleAddress ?? - this.defaultValidationModule.moduleAddress - const key = concat(["0x000000", validationMode ?? MODE_VALIDATION, vm]) - const accountAddress = await this.getAddress() - return (await this.entryPoint.read.getNonce([ - accountAddress, - BigInt(key) - ])) as bigint - } catch (e) { - return BigInt(0) - } - } - - private async getBuildUserOpNonce( - nonceOptions: NonceOptions | undefined - ): Promise<bigint> { - let nonce = BigInt(0) - try { - if (nonceOptions?.nonceOverride) { - nonce = BigInt(nonceOptions?.nonceOverride) - } else { - nonce = await this.getNonce(nonceOptions?.validationMode) - } - } catch (error) { - // Not throwing this error as nonce would be 0 if this.getNonce() throw exception, which is expected flow for undeployed account - Logger.warn( - "Error while getting nonce for the account. This is expected for undeployed accounts set nonce to 0" - ) - } - return nonce - } - - /** - * Transfers ownership of the smart account to a new owner. - * @param newOwner The address of the new owner. - * @param moduleAddress {@link TransferOwnershipCompatibleModule} The address of the validation module (ECDSA Ownership Module or Multichain Validation Module). - * @param buildUseropDto {@link BuildUserOpOptions}. Optional parameter - * @returns A Promise that resolves to a Hash or rejects with an Error. - * @description This function will transfer ownership of the smart account to a new owner. If you use session key manager module, after transferring the ownership - * you will need to re-create a session for the smart account with the new owner (signer) and specify "accountAddress" in "createSmartAccountClient" function. - * @example - * ```typescript - * - * let walletClient = createWalletClient({ - account, - chain: baseSepolia, - transport: http() - }); - - let smartAccount = await createSmartAccountClient({ - signer: walletClient, - paymasterUrl: "https://paymaster.biconomy.io/api/v1/...", - bundlerUrl: `https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44`, - chainId: 84532 - }); - const response = await smartAccount.transferOwnership(newOwner, DEFAULT_ECDSA_OWNERSHIP_MODULE, {paymasterServiceData: {mode: "SPONSORED"}}); - - walletClient = createWalletClient({ - newOwnerAccount, - chain: baseSepolia, - transport: http() - }) - - smartAccount = await createSmartAccountClient({ - signer: walletClient, - paymasterUrl: "https://paymaster.biconomy.io/api/v1/...", - bundlerUrl: `https://bundler.biconomy.io/api/v2/84532/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f44`, - chainId: 84532, - accountAddress: await smartAccount.getAddress() - }) - * ``` - */ - async transferOwnership( - newOwner: Address, - moduleAddress: TransferOwnershipCompatibleModule, - buildUseropDto?: BuildUserOpOptions - ): Promise<UserOpResponse> { - const encodedCall = encodeFunctionData({ - abi: parseAbi(["function transferOwnership(address newOwner) public"]), - functionName: "transferOwnership", - args: [newOwner] - }) - const transaction = { - to: moduleAddress, - data: encodedCall - } - const userOpResponse: UserOpResponse = await this.sendTransaction( - transaction, - buildUseropDto - ) - return userOpResponse - } - - /** - * Sends a transaction (builds and sends a user op in sequence) - * - * - Docs: https://docs.biconomy.io/account/methods#sendtransaction- - * - * @param manyOrOneTransactions Array of {@link Transaction} to be batched and sent. Can also be a single {@link Transaction}. - * @param buildUseropDto {@link BuildUserOpOptions}. - * @returns Promise<{@link Hash}> that you can use to track the user operation. - * - * @example - * import { createClient } from "viem" - * import { createSmartAccountClient } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonAmoy } from "viem/chains"; - * - * const signer = createWalletClient({ - * account, - * chain: polygonAmoy, - * transport: http(), - * }); - * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard - * const encodedCall = encodeFunctionData({ - * abi: CounterAbi, - * functionName: "incrementNumber", - * args: ["0x..."], - * }); - * - * const transaction = { - * to: mockAddresses.Counter, - * data: encodedCall - * } - * - * const { waitForTxHash } = await smartAccount.sendTransaction(transaction); - * const { transactionHash, userOperationReceipt } = await wait(); - * - * @remarks - * This example shows how to increase the estimated gas values for a transaction using `gasOffset` parameter. - * @example - * import { createClient } from "viem" - * import { createSmartAccountClient } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonAmoy } from "viem/chains"; - * - * const signer = createWalletClient({ - * account, - * chain: polygonAmoy, - * transport: http(), - * }); - * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard - * const encodedCall = encodeFunctionData({ - * abi: CounterAbi, - * functionName: "incrementNumber", - * args: ["0x..."], - * }); - * - * const transaction = { - * to: mockAddresses.Counter, - * data: encodedCall - * } - * - * const { waitForTxHash } = await smartAccount.sendTransaction(transaction, { - * gasOffset: { - * verificationGasLimitOffsetPct: 25, // 25% increase for the already estimated gas limit - * preVerificationGasOffsetPct: 10 // 10% increase for the already estimated gas limit - * } - * }); - * const { transactionHash, userOperationReceipt } = await wait(); - * - */ - async sendTransaction( - manyOrOneTransactions: Transaction | Transaction[], - buildUseropDto?: BuildUserOpOptions - ): Promise<UserOpResponse> { - const userOp = await this.buildUserOp( - Array.isArray(manyOrOneTransactions) - ? manyOrOneTransactions - : [manyOrOneTransactions], - buildUseropDto - ) - const response = await this.sendUserOp(userOp) - this.setDeploymentState(response) // don't wait for this to finish... - return response - } - - public async setDeploymentState({ wait }: UserOpResponse) { - if (this.deploymentState === DeploymentState.DEPLOYED) return - const { success } = await wait() - if (success) { - this.deploymentState = DeploymentState.DEPLOYED - } - } - - async sendTransactionWithExecutor( - manyOrOneTransactions: Transaction | Transaction[], - ownedAccountAddress?: Address - // buildUseropDto?: BuildUserOpOptions - ): Promise<UserOpReceipt> { - return await this.executeFromExecutor( - Array.isArray(manyOrOneTransactions) - ? manyOrOneTransactions - : [manyOrOneTransactions], - ownedAccountAddress - // buildUseropDto - ) - } - - /** - * Builds a user operation - * - * This method will also simulate the validation and execution of the user operation, telling the user if the user operation will be successful or not. - * - * - Docs: https://docs.biconomy.io/account/methods#builduserop- - * - * @param transactions Array of {@link Transaction} to be sent. - * @param buildUseropDto {@link BuildUserOpOptions}. - * @returns Promise<Partial{@link UserOperationStruct}>> the built user operation to be sent. - * - * @example - * import { createClient } from "viem" - * import { createSmartAccountClient } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonAmoy } from "viem/chains"; - * - * const signer = createWalletClient({ - * account, - * chain: polygonAmoy, - * transport: http(), - * }); - * - * const smartAccount = await createSmartAccountClient({ signer, bundlerUrl }); // Retrieve bundler url from dashboard - * const encodedCall = encodeFunctionData({ - * abi: CounterAbi, - * functionName: "incrementNumber", - * args: ["0x..."], - * }); - * - * const transaction = { - * to: mockAddresses.Counter, - * data: encodedCall - * } - * - * const userOp = await smartAccount.buildUserOp([{ to: "0x...", data: encodedCall }]); - * - */ - async buildUserOp( - transactions: Transaction[], - buildUseropDto?: BuildUserOpOptions - ): Promise<Partial<UserOperationStruct>> { - const dummySignatureFetchPromise = this.getDummySignatures() - const [nonceFromFetch, dummySignature] = await Promise.all([ - this.getBuildUserOpNonce(buildUseropDto?.nonceOptions), - dummySignatureFetchPromise, - this.getInitCode() // Not used, but necessary to determine if the account is deployed. Will return immediately if the account is already deployed - ]) - - if (transactions.length === 0) { - throw new Error("Transactions array cannot be empty") - } - let callData: Hex = "0x" - if (!buildUseropDto?.useEmptyDeployCallData) { - if (transactions.length > 1 || buildUseropDto?.forceEncodeForBatch) { - callData = await this.encodeExecuteBatch(transactions) - } else { - callData = await this.encodeExecute(transactions[0]) - } - } - - const factoryData = await this.getFactoryData() - let userOp: Partial<UserOperationStruct> = { - sender: (await this.getAddress()) as Hex, - nonce: nonceFromFetch, - factoryData, - callData - } - - if (!(await this.isAccountDeployed())) { - userOp.factory = this.factoryAddress - } - - userOp.signature = dummySignature - - const gasFeeValues: GetUserOperationGasPriceReturnType | undefined = - await this.bundler?.getGasFeeValues() - - userOp.maxFeePerGas = gasFeeValues?.fast.maxFeePerGas ?? 0n - userOp.maxPriorityFeePerGas = gasFeeValues?.fast.maxPriorityFeePerGas ?? 0n - - userOp = await this.estimateUserOpGas(userOp) - - if (buildUseropDto?.paymasterServiceData?.mode === "SPONSORED") { - userOp = await this.getPaymasterAndData( - userOp, - buildUseropDto?.paymasterServiceData - ) - } - - return userOp - } - - private async getPaymasterAndData( - userOp: Partial<UserOperationStruct>, - paymasterServiceData: PaymasterUserOperationDto - ): Promise<UserOperationStruct> { - const paymaster = this - .paymaster as IHybridPaymaster<PaymasterUserOperationDto> - const paymasterData = await paymaster.getPaymasterAndData( - userOp, - paymasterServiceData - ) - const userOpStruct = { - ...userOp, - ...paymasterData, - callGasLimit: BigInt(userOp.callGasLimit ?? 0n), - verificationGasLimit: BigInt(userOp.verificationGasLimit ?? 0n), - preVerificationGas: BigInt(userOp.preVerificationGas ?? 0n), - sender: (await this.getAddress()) as Hex, - paymasterAndData: undefined - // paymasterAndData: paymasterData?.paymasterAndData as Hex - } as UserOperationStruct - - return userOpStruct - } - - private validateUserOpAndPaymasterRequest( - userOp: Partial<UserOperationStruct>, - tokenPaymasterRequest: BiconomyTokenPaymasterRequest - ): void { - if (isNullOrUndefined(userOp.callData)) { - throw new Error("UserOp callData cannot be undefined") - } - - const feeTokenAddress = tokenPaymasterRequest?.feeQuote?.tokenAddress - Logger.warn("Requested fee token is ", feeTokenAddress) - - if (!feeTokenAddress || feeTokenAddress === ADDRESS_ZERO) { - throw new Error( - "Invalid or missing token address. Token address must be part of the feeQuote in tokenPaymasterRequest" - ) - } - - const spender = tokenPaymasterRequest?.spender - Logger.warn("Spender address is ", spender) - - if (!spender || spender === ADDRESS_ZERO) { - throw new Error( - "Invalid or missing spender address. Sepnder address must be part of tokenPaymasterRequest" - ) - } - } - - /** - * - * @param userOp partial user operation without signature and paymasterAndData - * @param tokenPaymasterRequest This dto provides information about fee quote. Fee quote is received from earlier request getFeeQuotesOrData() to the Biconomy paymaster. - * maxFee and token decimals from the quote, along with the spender is required to append approval transaction. - * @notice This method should be called when gas is paid in ERC20 token using TokenPaymaster - * @description Optional method to update the userOp.calldata with batched transaction which approves the paymaster spender with necessary amount(if required) - * @returns updated userOp with new callData, callGasLimit - */ - async buildTokenPaymasterUserOp( - userOp: Partial<UserOperationStruct>, - tokenPaymasterRequest: BiconomyTokenPaymasterRequest - ): Promise<Partial<UserOperationStruct>> { - this.validateUserOpAndPaymasterRequest(userOp, tokenPaymasterRequest) - try { - Logger.warn( - "Received information about fee token address and quote ", - tokenPaymasterRequest.toString() - ) - - if (this.paymaster && this.paymaster instanceof Paymaster) { - // Make a call to paymaster.buildTokenApprovalTransaction() with necessary details - - // Review: might request this form of an array of Transaction - const approvalRequest: Transaction = await ( - this.paymaster as IHybridPaymaster<SponsorUserOperationDto> - ).buildTokenApprovalTransaction(tokenPaymasterRequest) - Logger.warn("ApprovalRequest is for erc20 token ", approvalRequest.to) - - if ( - approvalRequest.data === "0x" || - approvalRequest.to === ADDRESS_ZERO - ) { - return userOp - } - - if (isNullOrUndefined(userOp.callData)) { - throw new Error("UserOp callData cannot be undefined") - } - - const decodedSmartAccountData = decodeFunctionData({ - abi: NexusAbi, - data: (userOp.callData as Hex) ?? "0x" - }) - - if (!decodedSmartAccountData) { - throw new Error( - "Could not parse userOp call data for this smart account" - ) - } - - const smartAccountExecFunctionName = - decodedSmartAccountData.functionName - - Logger.warn( - `Originally an ${smartAccountExecFunctionName} method call for Biconomy Account V2` - ) - - const initialTransaction: Transaction = { - to: "0x", - data: "0x", - value: 0n - } - if ( - smartAccountExecFunctionName === "execute" || - smartAccountExecFunctionName === "executeFromExecutor" - ) { - const methodArgsSmartWalletExecuteCall = - decodedSmartAccountData.args ?? [] - const toOriginal = - (methodArgsSmartWalletExecuteCall[0] as Hex) ?? "0x" - const valueOriginal = methodArgsSmartWalletExecuteCall[1] ?? 0n - // @ts-ignore - const dataOriginal = methodArgsSmartWalletExecuteCall?.[2] ?? "0x" - - initialTransaction.to = toOriginal - initialTransaction.value = valueOriginal - initialTransaction.data = dataOriginal - } else { - throw new Error( - `Unsupported method call: ${smartAccountExecFunctionName}` - ) - } - - const finalUserOp: Partial<UserOperationStruct> = { - ...userOp, - callData: await this.encodeExecuteBatch([ - approvalRequest, - initialTransaction - ]) - } - - return finalUserOp - } - } catch (error) { - Logger.log("Failed to update userOp. Sending back original op") - Logger.error( - "Failed to update callData with error", - JSON.stringify(error) - ) - return userOp - } - return userOp - } - - async signUserOpHash(userOpHash: string, params?: ModuleInfo): Promise<Hex> { - this.isActiveValidationModuleDefined() - const moduleSig = (await this.signUserOpHash(userOpHash, params)) as Hex - - return moduleSig - } - - /** - * Deploys the smart contract - * - * This method will deploy a Smart Account contract. It is useful for deploying in a moment when you know that gas prices are low, - * and you want to deploy the account before sending the first user operation. This step can otherwise be skipped, - * as the deployment will alternatively be bundled with the first user operation. - * - * @param buildUseropDto {@link BuildUserOpOptions}. - * @returns Promise<{@link Hash}> that you can use to track the user operation. - * @error Throws an error if the account has already been deployed. - * @error Throws an error if the account has not enough native token balance to deploy, if not using a paymaster. - * - * @example - * import { createClient } from "viem" - * import { createSmartAccountClient } from "@biconomy/account" - * import { createWalletClient, http } from "viem"; - * import { polygonAmoy } from "viem/chains"; - * - * const signer = createWalletClient({ - * account, - * chain: polygonAmoy, - * transport: http(), - * }); - * - * const smartAccount = await createSmartAccountClient({ - * signer, - * biconomyPaymasterApiKey, - * bundlerUrl - * }); - * - * // If you want to use a paymaster... - * const { wait } = await smartAccount.deploy({ - * paymasterServiceData: { mode: "SPONSORED" }, - * }); - * - * // Or if you can't use a paymaster send native token to this address: - * const counterfactualAddress = await smartAccount.getAddress(); - * - * // Then deploy the account - * const { wait } = await smartAccount.deploy(); - * - * const { success, receipt } = await wait(); - * - */ - public async deploy( - buildUseropDto?: BuildUserOpOptions - ): Promise<UserOpResponse> { - const accountAddress = this.accountAddress ?? (await this.getAddress()) - - // Check that the account has not already been deployed - const byteCode = await this.publicClient?.getBytecode({ - address: accountAddress as Hex - }) - - if (byteCode !== undefined) { - throw new Error(ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED) - } - - // Check that the account has enough native token balance to deploy, if not using a paymaster - if (!buildUseropDto?.paymasterServiceData?.mode) { - const nativeTokenBalance = await this.publicClient?.getBalance({ - address: accountAddress - }) - - if (nativeTokenBalance === BigInt(0)) { - throw new Error(ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY) - } - } - - const useEmptyDeployCallData = true - - return this.sendTransaction( - { - to: accountAddress, - data: "0x" - }, - { ...buildUseropDto, useEmptyDeployCallData } - ) - } - - async getFactoryData() { - if (await this.isAccountDeployed()) return undefined - this.isDefaultValidationModuleDefined() - - const signerAddress = await this.signer.getAddress() - - return encodeFunctionData({ - abi: contracts.k1ValidatorFactory.abi, - functionName: "createAccount", - args: [signerAddress, this.index, [], 0] - }) - } - - async signMessage(message: string | Uint8Array): Promise<Hex> { - let signature: Hex - this.isActiveValidationModuleDefined() - const dataHash = typeof message === "string" ? toBytes(message) : message - - signature = - (await this.activeValidationModule.signMessage(dataHash)) ?? - this.defaultValidationModule.signMessage(dataHash) - signature = encodePacked( - ["address", "bytes"], - [ - this.activeValidationModule.getAddress() ?? - this.defaultValidationModule.getAddress(), - signature - ] - ) - if (await this.isAccountDeployed()) { - return signature - } - // If the account is not deployed, follow ERC 6492 - const abiEncodedMessage = encodeAbiParameters( - [ - { - type: "address", - name: "create2Factory" - }, - { - type: "bytes", - name: "factoryCalldata" - }, - { - type: "bytes", - name: "originalERC1271Signature" - } - ], - [ - this.getFactoryAddress() ?? "0x", - (await this.getFactoryData()) ?? "0x", - signature - ] - ) - return concat([abiEncodedMessage, MAGIC_BYTES]) - } - - /** - * If your contract supports signing and verifying typed data, - * you should implement this method. - * - * @param _params -- Typed Data params to sign - */ - async signTypedData(typedData: any): Promise<`0x${string}`> { - const types = { - EIP712Domain: getTypesForEIP712Domain({ - domain: typedData.domain - }), - ...typedData.types - } - - validateTypedData({ - domain: typedData.domain, - message: typedData.message, - primaryType: typedData.primaryType, - types: types - } as TypedDataDefinition) - - const appDomainSeparator = domainSeparator({ - domain: { - name: typedData.domain.name, - version: typedData.domain.version, - chainId: typedData.domain.chainId, - verifyingContract: typedData.domain.verifyingContract - } - }) - - const accountDomainStructFields = await getAccountDomainStructFields( - this.publicClient, - await this.getAddress() - ) - - const parentStructHash = keccak256( - encodePacked( - ["bytes", "bytes"], - [ - encodeAbiParameters(parseAbiParameters(["bytes32, bytes32"]), [ - keccak256(toBytes(PARENT_TYPEHASH)), - typedData.message.stuff - ]), - accountDomainStructFields - ] - ) - ) - - const wrappedTypedHash = await eip712WrapHash( - parentStructHash, - appDomainSeparator - ) - - let signature = await this.activeValidationModule.signMessage( - toBytes(wrappedTypedHash) - ) - - const contentsType = toBytes(typeToString(types)[1]) - - const signatureData = concatHex([ - signature, - appDomainSeparator, - typedData.message.stuff, - toHex(contentsType), - toHex(contentsType.length, { size: 2 }) - ]) - - signature = encodePacked( - ["address", "bytes"], - [ - this.activeValidationModule.getAddress() ?? - this.defaultValidationModule.getAddress(), - signatureData - ] - ) - - return signature - } - - async getIsValidSignatureData( - messageHash: Hex, - signature: Hex - ): Promise<Hex> { - return encodeFunctionData({ - abi: NexusAbi, - functionName: "isValidSignature", - args: [messageHash, signature] - }) - } - - async isModuleInstalled(module: Module) { - if (await this.isAccountDeployed()) { - const accountContract = await this._getAccountContract() - const result = await accountContract.read.isModuleInstalled([ - BigInt(moduleTypeIds[module.type]), - module.moduleAddress, - module.data ?? "0x" - ]) - return result - } - return false - } - - getSmartAccountOwner(): SmartAccountSigner { - return this.signer - } - - async installModule( - module: Module, - buildUserOpOptions?: BuildUserOpOptions - ): Promise<UserOpResponse> { - let execution: Execution - switch (module.type) { - case "validator": - case "executor": - case "hook": - execution = await this._installModule({ - moduleAddress: module.moduleAddress, - type: module.type, - data: module.data - }) - return this.sendTransaction( - { - to: execution.target, - data: execution.callData, - value: execution.value - }, - buildUserOpOptions - ) - case "fallback": - if (!module.selector || !module.callType) { - throw new Error( - "Selector param is required for a Fallback Handler Module" - ) - } - execution = await this._uninstallFallback(module) - return this.sendTransaction( - { - to: execution.target, - data: execution.callData, - value: execution.value - }, - buildUserOpOptions - ) - default: - throw new Error(`Unknown module type ${module.type}`) - } - } - - async _installModule(module: Module): Promise<Execution> { - const isInstalled = await this.isModuleInstalled(module) - - if (!isInstalled) { - const execution = { - target: await this.getAddress(), - value: BigInt(0), - callData: encodeFunctionData({ - functionName: "installModule", - abi: parseAbi([ - "function installModule(uint256 moduleTypeId, address module, bytes calldata initData) external payable" - ]), - args: [ - BigInt(moduleTypeIds[module.type]), - module.moduleAddress, - module.data || "0x" - ] - }) - } - return execution - } - throw new Error("Module already installed") - } - - async uninstallModule( - module: Module, - buildUserOpOptions?: BuildUserOpOptions - ): Promise<UserOpResponse> { - let execution: Execution - switch (module.type) { - case "validator": - case "executor": - case "hook": - execution = await this._uninstallModule(module) - return await this.sendTransaction( - { - to: execution.target, - data: execution.callData, - value: execution.value - }, - buildUserOpOptions - ) - case "fallback": - if (!module.selector) { - throw new Error( - `Selector param is required for module type ${module.type}` - ) - } - execution = await this._uninstallFallback(module) - return await this.sendTransaction( - { - to: execution.target, - data: execution.callData, - value: execution.value - }, - buildUserOpOptions - ) - default: - throw new Error(`Unknown module type ${module.type}`) - } - } - - private _getModuleIndex( - installedModules: - | Awaited<ReturnType<typeof this.getInstalledValidators>> - | Awaited<ReturnType<typeof this.getInstalledExecutors>>, - module: Module - ): Hex { - const index = installedModules.indexOf(getAddress(module.moduleAddress)) - if (index === 0) { - return SENTINEL_ADDRESS - } - if (index > 0) { - // @ts-ignore: TODO: Gabi This looks wrong - return installedModules[index - 1] - } - throw new Error( - `Module ${module.moduleAddress} not found in installed modules` - ) - } - - async getPreviousModule(module: Module) { - if (module.type === "validator") { - const installedModules = await this.getInstalledValidators() - return this._getModuleIndex(installedModules, module) - } - if (module.type === "executor") { - const installedModules = await this.getInstalledExecutors() - return this._getModuleIndex(installedModules, module) - } - throw new Error(`Unknown module type ${module.type}`) - } - - private async _uninstallFallback(module: Module): Promise<Execution> { - let execution: Execution - - const isInstalled = await this.isModuleInstalled(module) - - if (isInstalled) { - execution = { - target: await this.getAddress(), - value: BigInt(0), - callData: encodeFunctionData({ - functionName: "uninstallModule", - abi: parseAbi([ - "function uninstallModule(uint256 moduleTypeId, address module, bytes deInitData)" - ]), - args: [ - BigInt(moduleTypeIds[module.type]), - module.moduleAddress, - encodePacked( - ["bytes4", "bytes"], - [module.selector ?? "0x", module.data ?? "0x"] - ) - ] - }) - } - return execution - } - throw new Error("Module is not installed") - } - - private async _uninstallModule(module: Module): Promise<Execution> { - let execution: Execution - const isInstalled = await this.isModuleInstalled(module) - - if (isInstalled) { - let moduleData = module.data || "0x" - if (module.type === "validator" || module.type === "executor") { - const prev = await this.getPreviousModule(module) - moduleData = encodeAbiParameters( - [ - { name: "prev", type: "address" }, - { name: "disableModuleData", type: "bytes" } - ], - [prev, moduleData] - ) - } - execution = { - target: await this.getAddress(), - value: BigInt(0), - callData: encodeFunctionData({ - functionName: "uninstallModule", - abi: parseAbi([ - "function uninstallModule(uint256 moduleTypeId, address module, bytes deInitData)" - ]), - args: [ - BigInt(moduleTypeIds[module.type]), - module.moduleAddress, - moduleData - ] - }) - } - return execution - } - throw new Error("Module is not installed") - } - - private async executeFromExecutor( - transactions: Transaction[], - ownedAccountAddress?: Address - // buildUseropDto?: BuildUserOpOptions - ): Promise<UserOpReceipt> { - if (this.activeExecutionModule) { - if (transactions.length > 1) { - const executions: { target: Hex; value: bigint; callData: Hex }[] = - transactions.map((tx) => { - return { - target: tx.to as Hex, - callData: (tx.data ?? "0x") as Hex, - value: BigInt(tx.value ?? 0n) - } - }) - return await this.activeExecutionModule?.execute( - executions, - ownedAccountAddress - ) - } - const execution = { - target: transactions[0].to as Hex, - callData: (transactions[0].data ?? "0x") as Hex, - value: BigInt(transactions[0].value ?? 0n) - } - return await this.activeExecutionModule.execute( - execution, - ownedAccountAddress - ) - } - throw new Error( - "Please set an active executor module before running this method." - ) - } - - /** - * Checks if the account contract supports a specific execution mode. - * @param mode - The execution mode to check, represented as a viem Address. - * @returns A promise that resolves to a boolean indicating whether the execution mode is supported. - */ - async supportsExecutionMode(mode: Address): Promise<boolean> { - const accountContract = await this._getAccountContract() - return (await accountContract.read.supportsExecutionMode([mode])) as boolean - } - - async getInstalledValidators() { - const accountContract = await this._getAccountContract() - return await accountContract.read.getValidatorsPaginated([ - SENTINEL_ADDRESS, - 100n - ]) - } - - async getInstalledExecutors() { - const accountContract = await this._getAccountContract() - return await accountContract.read.getExecutorsPaginated([ - SENTINEL_ADDRESS, - 100n - ]) - } - - /** - * Retrieves all installed modules for the account, including validators, executors, active hook, and fallback handler. - * @returns A promise that resolves to an array of addresses representing all installed modules. - */ - async getInstalledModules() { - const validators = await this.getInstalledValidators() - const executors = await this.getInstalledExecutors() - const hook = await this.getActiveHook() - const fallbackHandler = await this.getFallbackBySelector() - - return [...validators, ...executors, hook, fallbackHandler] - .flat() - .filter(Boolean) - } - - /** - * Retrieves the active hook for the account. - * @returns A promise that resolves to the address of the active hook. - */ - async getActiveHook() { - const accountContract = await this._getAccountContract() - return await accountContract.read.getActiveHook() - } - - /** - * Retrieves the fallback handler for a given selector. - * @param selector - Optional hexadecimal selector. If not provided, uses a generic fallback selector. - * @returns A promise that resolves to the address of the fallback handler. - */ - async getFallbackBySelector(selector?: Hex) { - const accountContract = await this._getAccountContract() - return await accountContract.read.getFallbackHandlerBySelector([ - selector ?? GENERIC_FALLBACK_SELECTOR - ]) - } - - /** - * Checks if the account supports a specific module type. - * @param moduleType - The type of module to check for support. - * @returns A promise that resolves to a boolean indicating whether the module type is supported. - */ - async supportsModule(module: Module): Promise<boolean> { - const accountContract = await this._getAccountContract() - const moduleIndex = - module.type === "validator" - ? 1n - : module.type === "executor" - ? 2n - : module.type === "fallback" - ? 3n - : 4n - return await accountContract.read.supportsModule([moduleIndex]) - } -} diff --git a/src/account/index.ts b/src/account/index.ts deleted file mode 100644 index 2a1325406..000000000 --- a/src/account/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NexusSmartAccount } from "./NexusSmartAccount.js" -import type { NexusSmartAccountConfig } from "./utils/Types.js" - -export * from "./NexusSmartAccount.js" -export * from "./utils/index.js" -export * from "./signers/local-account.js" -export * from "./signers/wallet-client.js" - -export const createSmartAccountClient = NexusSmartAccount.create - -export type SmartWalletConfig = NexusSmartAccountConfig diff --git a/src/account/signers/local-account.ts b/src/account/signers/local-account.ts deleted file mode 100644 index 65bf3c521..000000000 --- a/src/account/signers/local-account.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { - HDAccount, - Hex, - LocalAccount, - PrivateKeyAccount, - SignableMessage, - TypedData, - TypedDataDefinition -} from "viem" -import { mnemonicToAccount, privateKeyToAccount } from "viem/accounts" -import type { SmartAccountSigner } from "../utils/Types.js" - -export class LocalAccountSigner< - T extends HDAccount | PrivateKeyAccount | LocalAccount -> implements SmartAccountSigner<T> -{ - inner: T - signerType: string - - constructor(inner: T) { - this.inner = inner - this.signerType = inner.type // type: "local" - } - - readonly signMessage: (message: SignableMessage) => Promise<`0x${string}`> = ( - message - ) => { - return this.inner.signMessage({ message }) - } - - readonly signTypedData = async < - const TTypedData extends TypedData | { [key: string]: unknown }, - TPrimaryType extends string = string - >( - params: TypedDataDefinition<TTypedData, TPrimaryType> - ): Promise<Hex> => { - return this.inner.signTypedData(params) - } - - readonly getAddress: () => Promise<`0x${string}`> = async () => { - return this.inner.address - } - - static mnemonicToAccountSigner(key: string): LocalAccountSigner<HDAccount> { - const signer = mnemonicToAccount(key) - return new LocalAccountSigner(signer) - } - - static privateKeyToAccountSigner( - key: Hex - ): LocalAccountSigner<PrivateKeyAccount> { - const signer = privateKeyToAccount(key) - return new LocalAccountSigner(signer) - } -} diff --git a/src/account/signers/wallet-client.ts b/src/account/signers/wallet-client.ts deleted file mode 100644 index 69c10fe5a..000000000 --- a/src/account/signers/wallet-client.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { - type Hex, - type SignableMessage, - type TypedData, - type TypedDataDefinition, - type WalletClient, - getAddress -} from "viem" -import type { SmartAccountSigner } from "../utils/Types.js" - -export class WalletClientSigner implements SmartAccountSigner<WalletClient> { - signerType: string - inner: WalletClient - - constructor(client: WalletClient, signerType: string) { - this.inner = client - if (!signerType) { - throw new Error(`InvalidSignerTypeError: ${signerType}`) - } - this.signerType = signerType - } - - getAddress: () => Promise<`0x${string}`> = async () => { - const addresses = await this.inner.getAddresses() - return getAddress(addresses[0]) - } - - readonly signMessage: (message: SignableMessage) => Promise<`0x${string}`> = - async (message) => { - const account = this.inner.account ?? (await this.getAddress()) - - return this.inner.signMessage({ message, account }) - } - - signTypedData = async < - const TTypedData extends TypedData | { [key: string]: unknown }, - TPrimaryType extends string = string - >( - typedData: TypedDataDefinition<TTypedData, TPrimaryType> - ): Promise<Hex> => { - const account = this.inner.account ?? (await this.getAddress()) - - return this.inner.signTypedData({ - account, - ...typedData - }) - } -} diff --git a/src/account/utils/EthersSigner.ts b/src/account/utils/EthersSigner.ts deleted file mode 100644 index 8af82cb10..000000000 --- a/src/account/utils/EthersSigner.ts +++ /dev/null @@ -1,42 +0,0 @@ -import type { Hex, SignableMessage } from "viem" -import type { LightSigner, SmartAccountSigner } from "../utils/Types.js" - -export class EthersSigner<T extends LightSigner> - implements SmartAccountSigner<T> -{ - signerType = "ethers" - - inner: T - - constructor(inner: T, signerType: string) { - this.inner = inner - this.signerType = signerType - } - - async getAddress() { - return (await this.inner.getAddress()) as Hex - } - - async signMessage(_message: SignableMessage): Promise<Hex> { - const message = typeof _message === "string" ? _message : _message.raw - const signature = await this.inner?.signMessage(message) - return this.#correctSignature(signature as Hex) - } - - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - async signTypedData(_: any): Promise<Hex> { - throw new Error("signTypedData is not supported for Ethers Signer") - } - - #correctSignature = (_signature: Hex): Hex => { - let signature = _signature - const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) - if (![27, 28].includes(potentiallyIncorrectV)) { - const correctV = potentiallyIncorrectV + 27 - signature = signature.slice(0, -2) + correctV.toString(16) - } - return signature as Hex - } -} - -export default EthersSigner diff --git a/src/account/utils/Helpers.ts b/src/account/utils/Helpers.ts deleted file mode 100644 index 38dc3e01d..000000000 --- a/src/account/utils/Helpers.ts +++ /dev/null @@ -1,16 +0,0 @@ -const VARS_T0_CHECK = [ - "BICONOMY_SDK_DEBUG", - "REACT_APP_BICONOMY_SDK_DEBUG", - "NEXT_PUBLIC_BICONOMY_SDK_DEBUG" -] - -export const isDebugging = (): boolean => { - try { - // @ts-ignore - return VARS_T0_CHECK.some( - (key) => process?.env?.[key]?.toString() === "true" - ) - } catch (e) { - return false - } -} diff --git a/src/account/utils/HttpRequests.ts b/src/account/utils/HttpRequests.ts deleted file mode 100644 index 0fcc51025..000000000 --- a/src/account/utils/HttpRequests.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { getAAError } from "../../bundler/utils/getAAError.js" -import { Logger } from "./Logger.js" -import type { Service } from "./Types.js" - -export enum HttpMethod { - Get = "get", - Post = "post", - Delete = "delete" -} - -export interface HttpRequest { - url: string - method: HttpMethod - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - body?: Record<string, any> -} - -export async function sendRequest<T>( - { url, method, body }: HttpRequest, - service: Service -): Promise<T> { - const stringifiedBody = JSON.stringify(body) - - Logger.log(`${service} RPC Request`, { url, body: stringifiedBody }) - - const response = await fetch(url, { - method, - headers: { - Accept: "application/json", - "Content-Type": "application/json" - }, - body: stringifiedBody - }) - - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - let jsonResponse: any - try { - jsonResponse = await response.json() - Logger.log(`${service} RPC Response`, jsonResponse) - } catch (error) { - if (!response.ok) { - throw await getAAError(response.statusText, response.status, service) - } - } - - if (response.ok) { - return jsonResponse as T - } - if (jsonResponse.error) { - throw await getAAError( - `Error coming from ${service}: ${jsonResponse.error.message}` - ) - } - if (jsonResponse.message) { - throw await getAAError(jsonResponse.message, response.status, service) - } - if (jsonResponse.msg) { - throw await getAAError(jsonResponse.msg, response.status, service) - } - if (jsonResponse.data) { - throw await getAAError(jsonResponse.data, response.status, service) - } - if (jsonResponse.detail) { - throw await getAAError(jsonResponse.detail, response.status, service) - } - if (jsonResponse.message) { - throw await getAAError(jsonResponse.message, response.status, service) - } - if (jsonResponse.nonFieldErrors) { - throw await getAAError( - jsonResponse.nonFieldErrors, - response.status, - service - ) - } - if (jsonResponse.delegate) { - throw await getAAError(jsonResponse.delegate, response.status, service) - } - throw await getAAError(response.statusText, response.status, service) -} diff --git a/src/account/utils/Types.ts b/src/account/utils/Types.ts deleted file mode 100644 index d65e619e1..000000000 --- a/src/account/utils/Types.ts +++ /dev/null @@ -1,661 +0,0 @@ -import type { - Address, - Chain, - Hash, - Hex, - PrivateKeyAccount, - PublicClient, - SignTypedDataParameters, - SignableMessage, - TypedData, - TypedDataDefinition, - WalletClient -} from "viem" -import type { IBundler } from "../../bundler" -import type { ModuleInfo, ModuleType } from "../../modules" -import type { BaseValidationModule } from "../../modules/base/BaseValidationModule" -import type { - FeeQuotesOrDataDto, - IPaymaster, - PaymasterFeeQuote, - SmartAccountData, - SponsorUserOperationDto -} from "../../paymaster" -import type { MODE_MODULE_ENABLE, MODE_VALIDATION } from "../utils/Constants" - -export type EntryPointAddresses = Record<string, string> -export type BiconomyFactories = Record<string, string> -export type EntryPointAddressesByVersion = Record<string, string> -export type BiconomyFactoriesByVersion = Record<string, string> - -export type SmartAccountConfig = { - /** entryPointAddress: address of the entry point */ - entryPointAddress: Address - /** factoryAddress: address of the smart account factory */ - bundler?: IBundler -} - -export interface BalancePayload { - /** address: The address of the account */ - address: string - /** chainId: The chainId of the network */ - chainId: number - /** amount: The amount of the balance */ - amount: bigint - /** decimals: The number of decimals */ - decimals: number - /** formattedAmount: The amount of the balance formatted */ - formattedAmount: string -} - -export interface WithdrawalRequest { - /** The address of the asset */ - address: Hex - /** The amount to withdraw. Expects unformatted amount. Will use max amount if unset */ - amount?: bigint - /** The destination address of the funds. The second argument from the `withdraw(...)` function will be used as the default if left unset. */ - recipient?: Hex -} - -export interface GasOverheads { - /** fixed: fixed gas overhead */ - fixed: number - /** perUserOp: per user operation gas overhead */ - perUserOp: number - /** perUserOpWord: per user operation word gas overhead */ - perUserOpWord: number - /** zeroByte: per byte gas overhead */ - zeroByte: number - /** nonZeroByte: per non zero byte gas overhead */ - nonZeroByte: number - /** bundleSize: per signature bundleSize */ - bundleSize: number - /** sigSize: sigSize gas overhead */ - sigSize: number -} - -export type BaseSmartAccountConfig = { - /** index: helps to not conflict with other smart account instances */ - index?: bigint - /** provider: WalletClientSigner from viem */ - provider?: WalletClient - /** entryPointAddress: address of the smart account entry point */ - entryPointAddress?: string - /** accountAddress: address of the smart account, potentially counterfactual */ - accountAddress?: string - /** overheads: {@link GasOverheads} */ - overheads?: Partial<GasOverheads> - /** paymaster: {@link IPaymaster} interface */ - paymaster?: IPaymaster -} - -export type BiconomyTokenPaymasterRequest = { - /** feeQuote: {@link PaymasterFeeQuote} */ - feeQuote: PaymasterFeeQuote - /** spender: The address of the spender who is paying for the transaction, this can usually be set to feeQuotesResponse.tokenPaymasterAddress */ - spender: Hex - /** maxApproval: If set to true, the paymaster will approve the maximum amount of tokens required for the transaction. Not recommended */ - maxApproval?: boolean - /* skip option to patch callData if approval is already given to the paymaster */ - skipPatchCallData?: boolean -} - -export type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick< - T, - Exclude<keyof T, Keys> -> & - { - [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>> - }[Keys] - -export type ConditionalBundlerProps = RequireAtLeastOne< - { - bundler: IBundler - bundlerUrl: string - }, - "bundler" | "bundlerUrl" -> -export type ResolvedBundlerProps = { - bundler: IBundler -} -export type ConditionalValidationProps = RequireAtLeastOne< - { - defaultValidationModule: BaseValidationModule - signer: SupportedSigner - }, - "defaultValidationModule" | "signer" -> - -export type ResolvedValidationProps = { - /** defaultValidationModule: {@link BaseValidationModule} */ - defaultValidationModule: BaseValidationModule - /** activeValidationModule: {@link BaseValidationModule}. The active validation module. Will default to the defaultValidationModule */ - activeValidationModule: BaseValidationModule - /** signer: ethers Wallet, viemWallet or alchemys SmartAccountSigner */ - signer: SmartAccountSigner - /** rpcUrl */ - rpcUrl: string -} - -export type ConfigurationAddresses = { - factoryAddress: Hex - k1ValidatorAddress: Hex - entryPointAddress: Hex -} - -export type NexusSmartAccountConfigBaseProps = { - /** chain: The chain from viem */ - chain: Chain - /** Factory address of biconomy factory contract or some other contract you have deployed on chain */ - factoryAddress?: Hex - /** K1Validator Address */ - k1ValidatorAddress?: Hex - /** Sender address: If you want to override the Signer address with some other address and get counterfactual address can use this to pass the EOA and get SA address */ - senderAddress?: Hex - /** implementation of smart contract address or some other contract you have deployed and want to override */ - implementationAddress?: Hex - /** defaultFallbackHandler: override the default fallback contract address */ - defaultFallbackHandler?: Hex - /** rpcUrl */ - rpcUrl?: string - /** paymasterUrl: The Paymaster URL retrieved from the Biconomy dashboard */ - paymasterUrl?: string - /** biconomyPaymasterApiKey: The API key retrieved from the Biconomy dashboard */ - biconomyPaymasterApiKey?: string - /** activeValidationModule: The active validation module. Will default to the defaultValidationModule */ - activeValidationModule?: BaseValidationModule - /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ - scanForUpgradedAccountsFromV1?: boolean - /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ - maxIndexForScan?: bigint - /** The initial code to be used for the smart account */ - initCode?: Hex - /** Used for session key manager module */ - sessionData?: ModuleInfo -} -export type NexusSmartAccountConfig = NexusSmartAccountConfigBaseProps & - BaseSmartAccountConfig & - ConditionalBundlerProps & - ConditionalValidationProps - -export type NexusSmartAccountConfigConstructorProps = - NexusSmartAccountConfigBaseProps & - BaseSmartAccountConfig & - ResolvedBundlerProps & - ResolvedValidationProps & - ConfigurationAddresses - -/** - * Represents options for building a user operation. - * @typedef BuildUserOpOptions - * @property {GasOffset} [gasOffset] - Increment gas values by giving an offset, the given value will be an increment to the current estimated gas values, not an override. - * @property {ModuleInfo} [params] - Parameters relevant to the module, mostly relevant to sessions. - * @property {NonceOptions} [nonceOptions] - Options for overriding the nonce. - * @property {boolean} [forceEncodeForBatch] - Whether to encode the user operation for batch. - * @property {PaymasterUserOperationDto} [paymasterServiceData] - Options specific to transactions that involve a paymaster. - * @property {SimulationType} [simulationType] - Determine which parts of the transaction a bundler will simulate: "validation" | "validation_and_execution". - * @property {StateOverrideSet} [stateOverrideSet] - For overriding the state. - * @property {boolean} [useEmptyDeployCallData] - Set to true if the transaction is being used only to deploy the smart contract, so "0x" is set as the user operation call data. - */ -export type BuildUserOpOptions = { - gasOffset?: GasOffsetPct - params?: ModuleInfo - nonceOptions?: NonceOptions - forceEncodeForBatch?: boolean - paymasterServiceData?: PaymasterUserOperationDto - simulationType?: SimulationType - stateOverrideSet?: StateOverrideSet - dummyPndOverride?: BytesLike - useEmptyDeployCallData?: boolean - useExecutor?: boolean -} - -export type NonceOptions = { - /** nonceKey: The key to use for nonce */ - nonceKey?: bigint - /** validationMode: Mode of the validation module */ - validationMode?: typeof MODE_VALIDATION | typeof MODE_MODULE_ENABLE - /** nonceOverride: The nonce to use for the transaction */ - nonceOverride?: bigint -} - -export type SimulationType = "validation" | "validation_and_execution" - -/** - * Represents an offset percentage value used for gas-related calculations. - * @remarks - * This type defines offset percentages for various gas-related parameters. Each percentage represents a proportion of the current estimated gas values. - * For example: - * - A value of `1` represents a 1% offset. - * - A value of `100` represents a 100% offset. - * @public - */ -/** - * Represents an object containing offset percentages for gas-related parameters. - * @typedef GasOffsetPct - * @property {number} [callGasLimitOffsetPct] - Percentage offset for the gas limit used by inner account execution. - * @property {number} [verificationGasLimitOffsetPct] - Percentage offset for the actual gas used by the validation of a UserOperation. - * @property {number} [preVerificationGasOffsetPct] - Percentage offset representing the gas overhead of a UserOperation. - * @property {number} [maxFeePerGasOffsetPct] - Percentage offset for the maximum fee per gas (similar to EIP-1559 max_fee_per_gas). - * @property {number} [maxPriorityFeePerGasOffsetPct] - Percentage offset for the maximum priority fee per gas (similar to EIP-1559 max_priority_fee_per_gas). - */ -export type GasOffsetPct = { - callGasLimitOffsetPct?: number - verificationGasLimitOffsetPct?: number - preVerificationGasOffsetPct?: number - maxFeePerGasOffsetPct?: number - maxPriorityFeePerGasOffsetPct?: number -} - -export type InitilizationData = { - accountIndex?: number - signerAddress?: string -} - -export type PaymasterUserOperationDto = SponsorUserOperationDto & - FeeQuotesOrDataDto & { - /** mode: sponsored or erc20 */ - mode: "SPONSORED" | "ERC20" - /** Always recommended, especially when using token paymaster */ - calculateGasLimits?: boolean - /** Expiry duration in seconds */ - expiryDuration?: number - /** Webhooks to be fired after user op is sent */ - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - webhookData?: Record<string, any> - /** Smart account meta data */ - smartAccountInfo?: SmartAccountData - /** the fee-paying token address */ - feeTokenAddress?: string - /** The fee quote */ - feeQuote?: PaymasterFeeQuote - /** The address of the spender. This is usually set to FeeQuotesOrDataResponse.tokenPaymasterAddress */ - spender?: Hex - /** Not recommended */ - maxApproval?: boolean - /* skip option to patch callData if approval is already given to the paymaster */ - skipPatchCallData?: boolean - } - -export type InitializeV2Data = { - accountIndex?: number -} - -export type EstimateUserOpGasParams = { - userOp: Partial<UserOperationStruct> - /** paymasterServiceData: Options specific to transactions that involve a paymaster */ - paymasterServiceData?: SponsorUserOperationDto -} - -export interface TransactionDetailsForUserOp { - /** target: The address of the contract to call */ - target: string - /** data: The data to send to the contract */ - data: string - /** value: The value to send to the contract */ - value?: BigNumberish - /** gasLimit: The gas limit to use for the transaction */ - gasLimit?: BigNumberish - /** maxFeePerGas: The maximum fee per gas to use for the transaction */ - maxFeePerGas?: BigNumberish - /** maxPriorityFeePerGas: The maximum priority fee per gas to use for the transaction */ - maxPriorityFeePerGas?: BigNumberish - /** nonce: The nonce to use for the transaction */ - nonce?: BigNumberish -} - -export type CounterFactualAddressParam = { - index?: bigint - validationModule?: BaseValidationModule - /** scanForUpgradedAccountsFromV1: set to true if you you want the userwho was using biconomy SA v1 to upgrade to biconomy SA v2 */ - scanForUpgradedAccountsFromV1?: boolean - /** the index of SA the EOA have generated and till which indexes the upgraded SA should scan */ - maxIndexForScan?: bigint -} - -export type QueryParamsForAddressResolver = { - eoaAddress: Hex - index: bigint - moduleAddress: Hex - moduleSetupData: Hex - maxIndexForScan?: bigint -} - -export type SmartAccountInfo = { - /** accountAddress: The address of the smart account */ - accountAddress: Hex - /** factoryAddress: The address of the smart account factory */ - factoryAddress: Hex - /** currentImplementation: The address of the current implementation */ - currentImplementation: string - /** currentVersion: The version of the smart account */ - currentVersion: string - /** factoryVersion: The version of the factory */ - factoryVersion: string - /** deploymentIndex: The index of the deployment */ - deploymentIndex: BigNumberish -} - -export type ValueOrData = RequireAtLeastOne< - { - value: BigNumberish | string - data: string - }, - "value" | "data" -> -export type Transaction = { - to: string -} & ValueOrData - -export type SupportedToken = Omit< - PaymasterFeeQuote, - "maxGasFeeUSD" | "usdPayment" | "maxGasFee" | "validUntil" -> & { balance: BalancePayload } - -export type Signer = LightSigner & { - // biome-ignore lint/suspicious/noExplicitAny: any is used here to allow for the ethers provider - provider: any -} -export type SupportedSignerName = "alchemy" | "ethers" | "viem" -export type SupportedSigner = - | SmartAccountSigner - | WalletClient - | Signer - | LightSigner - | PrivateKeyAccount -export type Service = "Bundler" | "Paymaster" - -export interface LightSigner { - getAddress(): Promise<string> - signMessage(message: string | Uint8Array): Promise<string> -} - -export type StateOverrideSet = { - [key: string]: { - balance?: string - nonce?: string - code?: string - state?: object - stateDiff?: object - } -} - -export type BigNumberish = Hex | number | bigint -export type BytesLike = Uint8Array | Hex | string - -//#region UserOperationStruct -// based on @account-abstraction/common -// this is used for building requests -export type UserOperationStruct = { - sender: Address - nonce: bigint - factory?: Address - factoryData?: Hex - callData: Hex - callGasLimit: bigint - verificationGasLimit: bigint - preVerificationGas: bigint - maxFeePerGas: bigint - maxPriorityFeePerGas: bigint - paymaster?: Address - paymasterVerificationGasLimit?: bigint - paymasterPostOpGasLimit?: bigint - paymasterData?: Hex - signature: Hex - // initCode?: never - paymasterAndData?: never -} -//#endregion UserOperationStruct - -//#region SmartAccountSigner -/** - * A signer that can sign messages and typed data. - * - * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc. - * - * @var signerType - the type of the signer (e.g. local, hardware, etc.) - * @var inner - the inner client of @type {Inner} - * - * @method getAddress - get the address of the signer - * @method signMessage - sign a message - * @method signTypedData - sign typed data - */ - -// biome-ignore lint/suspicious/noExplicitAny: <explanation> -export interface SmartAccountSigner<Inner = any> { - signerType: string - inner: Inner - - getAddress: () => Promise<Address> - - signMessage: (message: SignableMessage) => Promise<Hex> - - signTypedData: < - const TTypedData extends TypedData | { [key: string]: unknown }, - TPrimaryType extends string = string - >( - params: TypedDataDefinition<TTypedData, TPrimaryType> - ) => Promise<Hex> -} -//#endregion SmartAccountSigner - -//#region UserOperationCallData -export type UserOperationCallData = - | { - /* the target of the call */ - target: Address - /* the data passed to the target */ - data: Hex - /* the amount of native token to send to the target (default: 0) */ - value?: bigint - } - | Hex -//#endregion UserOperationCallData - -//#region BatchUserOperationCallData -export type BatchUserOperationCallData = Exclude<UserOperationCallData, Hex>[] -//#endregion BatchUserOperationCallData - -export type SignTypedDataParams = Omit<SignTypedDataParameters, "privateKey"> - -export type BaseSmartContractAccountProps = - NexusSmartAccountConfigConstructorProps & { - /** chain: The chain from viem */ - chain: Chain - /** factoryAddress: The address of the factory */ - factoryAddress: Hex - /** entryPointAddress: The address of the entry point */ - entryPointAddress: Hex - /** accountAddress: The address of the account */ - accountAddress?: Address - } - -export interface ISmartContractAccount< - TSigner extends SmartAccountSigner = SmartAccountSigner -> { - /** - * The RPC provider the account uses to make RPC calls - */ - publicClient: PublicClient - - /** - * @returns the init code for the account - */ - getInitCode(): Promise<Hex> - - /** - * This is useful for estimating gas costs. It should return a signature that doesn't cause the account to revert - * when validation is run during estimation. - * - * @returns a dummy signature that doesn't cause the account to revert during estimation - */ - getDummySignature(): Hex - - /** - * Encodes a call to the account's execute function. - * - * @param target - the address receiving the call data - * @param value - optionally the amount of native token to send - * @param data - the call data or "0x" if empty - */ - encodeExecute(transaction: Transaction, useExecutor: boolean): Promise<Hex> - - /** - * Encodes a batch of transactions to the account's batch execute function. - * NOTE: not all accounts support batching. - * @param txs - An Array of objects containing the target, value, and data for each transaction - * @returns the encoded callData for a UserOperation - */ - encodeBatchExecute(txs: BatchUserOperationCallData): Promise<Hex> - - /** - * @returns the nonce of the account - */ - getNonce( - validationMode?: typeof MODE_VALIDATION | typeof MODE_MODULE_ENABLE - ): Promise<bigint> - - /** - * If your account handles 1271 signatures of personal_sign differently - * than it does UserOperations, you can implement two different approaches to signing - * - * @param uoHash -- The hash of the UserOperation to sign - * @returns the signature of the UserOperation - */ - signUserOperationHash(uoHash: Hash): Promise<Hash> - - /** - * Returns a signed and prefixed message. - * - * @param msg - the message to sign - * @returns the signature of the message - */ - signMessage(msg: string | Uint8Array | Hex): Promise<Hex> - - /** - * Signs a typed data object as per ERC-712 - * - * @param typedData - * @returns the signed hash for the message passed - */ - signTypedData(typedData: any): Promise<Hash> - - /** - * If the account is not deployed, it will sign the message and then wrap it in 6492 format - * - * @param msg - the message to sign - * @returns ths signature wrapped in 6492 format - */ - signMessageWith6492(msg: string | Uint8Array | Hex): Promise<Hex> - - /** - * If the account is not deployed, it will sign the typed data blob and then wrap it in 6492 format - * - * @param params - {@link SignTypedDataParams} - * @returns the signed hash for the params passed in wrapped in 6492 format - */ - signTypedDataWith6492(params: SignTypedDataParams): Promise<Hash> - - /** - * @returns the address of the account - */ - getAddress(): Promise<Address> - - /** - * @returns the current account signer instance that the smart account client - * operations are being signed with. - * - * The signer is expected to be the owner or one of the owners of the account - * for the signatures to be valid for the acting account. - */ - getSigner(): TSigner - - /** - * @returns the address of the factory contract for the smart account - */ - getFactoryAddress(): Address - - /** - * @returns the address of the entry point contract for the smart account - */ - getEntryPointAddress(): Address - - /** - * Allows you to add additional functionality and utility methods to this account - * via a decorator pattern. - * - * NOTE: this method does not allow you to override existing methods on the account. - * - * @example - * ```ts - * const account = new BaseSmartCobntractAccount(...).extend((account) => ({ - * readAccountState: async (...args) => { - * return this.rpcProvider.readContract({ - * address: await this.getAddress(), - * abi: ThisContractsAbi - * args: args - * }); - * } - * })); - * - * account.debugSendUserOperation(...); - * ``` - * - * @param extendFn -- this function gives you access to the created account instance and returns an object - * with the extension methods - * @returns -- the account with the extension methods added - */ - extend: <R>(extendFn: (self: this) => R) => this & R - - encodeUpgradeToAndCall: ( - upgradeToImplAddress: Address, - upgradeToInitData: Hex - ) => Promise<Hex> -} - -export type TransferOwnershipCompatibleModule = - | "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e" - | "0x000000824dc138db84FD9109fc154bdad332Aa8E" - -export type ModuleInfoParams = { - moduleAddress: Address - moduleType: ModuleType - moduleSelector?: Hex - data?: Hex -} - -export type EIP712DomainReturn = [ - Hex, - string, - string, - bigint, - Address, - Hex, - bigint[] -] - -export enum CallType { - CALLTYPE_SINGLE = "0x00", - CALLTYPE_BATCH = "0x01", - CALLTYPE_STATIC = "0xFE", - CALLTYPE_DELEGATECALL = "0xFF" -} - -export type NEXUS_VERSION_TYPE = "1.0.0-beta" - -export type AccountMetadata = { - name: string - version: string - chainId: bigint -} - -export type WithRequired<T, K extends keyof T> = Required<Pick<T, K>> - -export type TypeField = { - name: string - type: string -} - -export type TypeDefinition = { - [key: string]: TypeField[] -} diff --git a/src/account/utils/convertSigner.ts b/src/account/utils/convertSigner.ts deleted file mode 100644 index 3dd8bfd59..000000000 --- a/src/account/utils/convertSigner.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { - http, - type PrivateKeyAccount, - type WalletClient, - createWalletClient -} from "viem" -import { ERROR_MESSAGES, WalletClientSigner } from "../../account" -import type { Signer, SmartAccountSigner, SupportedSigner } from "../../account" -import { EthersSigner } from "./EthersSigner.js" - -interface SmartAccountResult { - signer: SmartAccountSigner -} - -function isPrivateKeyAccount( - signer: SupportedSigner -): signer is PrivateKeyAccount { - return (signer as PrivateKeyAccount).type === "local" -} - -export function isWalletClient( - signer: SupportedSigner -): signer is WalletClient { - return (signer as WalletClient).name === "Wallet Client" -} - -function isEthersSigner(signer: SupportedSigner): signer is Signer { - return (signer as Signer).provider !== undefined -} - -function isAlchemySigner( - signer: SupportedSigner -): signer is SmartAccountSigner { - return (signer as SmartAccountSigner).signerType !== undefined -} - -export const convertSigner = async ( - signer: SupportedSigner, - rpcUrl?: string -): Promise<SmartAccountResult> => { - let resolvedSmartAccountSigner: SmartAccountSigner - - if (!isAlchemySigner(signer)) { - if (isEthersSigner(signer)) { - const ethersSigner = signer as Signer - if (!rpcUrl) throw new Error(ERROR_MESSAGES.MISSING_RPC_URL) - if (!ethersSigner.provider) { - throw new Error("Cannot consume an ethers Wallet without a provider") - } - // convert ethers Wallet to alchemy's SmartAccountSigner under the hood - resolvedSmartAccountSigner = new EthersSigner(ethersSigner, "ethers") - } else if (isWalletClient(signer)) { - const walletClient = signer as WalletClient - if (!walletClient.account) { - throw new Error("Cannot consume a viem wallet without an account") - } - // convert viems walletClient to alchemy's SmartAccountSigner under the hood - resolvedSmartAccountSigner = new WalletClientSigner(walletClient, "viem") - } else if (isPrivateKeyAccount(signer)) { - if (!rpcUrl) throw new Error(ERROR_MESSAGES.MISSING_RPC_URL) - const walletClient = createWalletClient({ - account: signer as PrivateKeyAccount, - transport: http(rpcUrl) - }) - resolvedSmartAccountSigner = new WalletClientSigner(walletClient, "viem") - } else { - throw new Error("Unsupported signer") - } - } else { - if (!rpcUrl) throw new Error(ERROR_MESSAGES.MISSING_RPC_URL) - resolvedSmartAccountSigner = signer as SmartAccountSigner - } - return { - signer: resolvedSmartAccountSigner - } -} diff --git a/src/bundler/Bundler.ts b/src/bundler/Bundler.ts deleted file mode 100644 index bce6491bc..000000000 --- a/src/bundler/Bundler.ts +++ /dev/null @@ -1,373 +0,0 @@ -import { http, type Hash, type PublicClient, createPublicClient } from "viem" -import contracts from "../__contracts/index.js" -import type { UserOperationStruct } from "../account" -import { HttpMethod, isNullOrUndefined, sendRequest } from "../account" -import type { IBundler } from "./interfaces/IBundler.js" -import { - UserOpReceiptIntervals, - UserOpReceiptMaxDurationIntervals, - UserOpWaitForTxHashIntervals, - UserOpWaitForTxHashMaxDurationIntervals -} from "./utils/Constants.js" -import { - decodeUserOperationError, - getTimestampInSeconds -} from "./utils/HelperFunction.js" -import type { - BundlerConfig, - BundlerConfigWithChainId, - BundlerEstimateUserOpGasResponse, - GetUserOpByHashResponse, - GetUserOperationGasPriceReturnType, - GetUserOperationReceiptResponse, - GetUserOperationStatusResponse, - UserOpByHashResponse, - UserOpGasResponse, - UserOpReceipt, - UserOpResponse, - UserOpStatus -} from "./utils/Types.js" -import { deepHexlify } from "./utils/Utils.js" - -/** - * This class implements IBundler interface. - * Implementation sends UserOperation to a bundler URL as per ERC4337 standard. - * Checkout the proposal for more details on Bundlers. - */ -export class Bundler implements IBundler { - private bundlerConfig: BundlerConfigWithChainId - - // eslint-disable-next-line no-unused-vars - UserOpReceiptIntervals!: { [key in number]?: number } - - UserOpWaitForTxHashIntervals!: { [key in number]?: number } - - UserOpReceiptMaxDurationIntervals!: { [key in number]?: number } - - UserOpWaitForTxHashMaxDurationIntervals!: { [key in number]?: number } - - private publicClient: PublicClient - - constructor(bundlerConfig: BundlerConfig) { - const parsedChainId: number = bundlerConfig.chain.id - // || extractChainIdFromBundlerUrl(bundlerConfig.bundlerUrl) - this.bundlerConfig = { ...bundlerConfig, chainId: parsedChainId } - - this.publicClient = createPublicClient({ - chain: bundlerConfig.chain, - transport: http() - }) - - this.UserOpReceiptIntervals = { - ...UserOpReceiptIntervals, - ...bundlerConfig.userOpReceiptIntervals - } - - this.UserOpWaitForTxHashIntervals = { - ...UserOpWaitForTxHashIntervals, - ...bundlerConfig.userOpWaitForTxHashIntervals - } - - this.UserOpReceiptMaxDurationIntervals = { - ...UserOpReceiptMaxDurationIntervals, - ...bundlerConfig.userOpReceiptMaxDurationIntervals - } - - this.UserOpWaitForTxHashMaxDurationIntervals = { - ...UserOpWaitForTxHashMaxDurationIntervals, - ...bundlerConfig.userOpWaitForTxHashMaxDurationIntervals - } - - this.bundlerConfig.entryPointAddress = - bundlerConfig.entryPointAddress || contracts.entryPoint.address - } - - public getBundlerUrl(): string { - return `${this.bundlerConfig.bundlerUrl}` - } - - /** - * @param userOpHash - * @description This function will fetch gasPrices from bundler - * @returns Promise<UserOpGasPricesResponse> - */ - async estimateUserOpGas( - _userOp: UserOperationStruct - ): Promise<UserOpGasResponse> { - const bundlerUrl = this.getBundlerUrl() - - const response: { - result: BundlerEstimateUserOpGasResponse - error: { message: string } - } = await sendRequest( - { - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_estimateUserOperationGas", - params: [deepHexlify(_userOp), this.bundlerConfig.entryPointAddress], - id: getTimestampInSeconds(), - jsonrpc: "2.0" - } - }, - "Bundler" - ) - const userOpGasResponse = response - for (const key in userOpGasResponse.result) { - if ( - userOpGasResponse.result[key as keyof UserOpGasResponse] === null || - userOpGasResponse.result[key as keyof UserOpGasResponse] === undefined - ) { - throw new Error(`Got undefined ${key} from bundler`) - } - } - - if (isNullOrUndefined(response.result)) { - const decodedError = decodeUserOperationError( - JSON.stringify(response?.error?.message) - ) - throw new Error(`Error from Bundler: ${decodedError}`) - } - - return { - preVerificationGas: BigInt(response.result.preVerificationGas || 0), - verificationGasLimit: BigInt(response.result.verificationGasLimit || 0), - callGasLimit: BigInt(response.result.callGasLimit || 0), - paymasterVerificationGasLimit: response.result - .paymasterVerificationGasLimit - ? BigInt(response.result.paymasterVerificationGasLimit) - : undefined, - paymasterPostOpGasLimit: response.result.paymasterPostOpGasLimit - ? BigInt(response.result.paymasterPostOpGasLimit) - : undefined - } - } - - /** - * - * @param userOp - * @description This function will send signed userOp to bundler to get mined on chain - * @returns Promise<UserOpResponse> - */ - async sendUserOp(_userOp: UserOperationStruct): Promise<UserOpResponse> { - const chainId = this.bundlerConfig.chainId - const params = [deepHexlify(_userOp), this.bundlerConfig.entryPointAddress] - const bundlerUrl = this.getBundlerUrl() - const sendUserOperationResponse: { - result: Hash - error: { message: string } - } = await sendRequest( - { - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_sendUserOperation", - params: params, - id: getTimestampInSeconds(), - jsonrpc: "2.0" - } - }, - "Bundler" - ) - - if (isNullOrUndefined(sendUserOperationResponse.result)) { - throw new Error(sendUserOperationResponse.error.message) - } - - return { - userOpHash: sendUserOperationResponse.result, - wait: (confirmations?: number): Promise<UserOpReceipt> => { - // Note: maxDuration can be defined per chainId - const maxDuration = - this.UserOpReceiptMaxDurationIntervals[chainId] || 50000 // default 50 seconds - let totalDuration = 0 - - return new Promise<UserOpReceipt>((resolve, reject) => { - const intervalValue = this.UserOpReceiptIntervals[chainId] || 5000 // default 5 seconds - const intervalId = setInterval(async () => { - try { - const userOpResponse = await this.getUserOpReceipt( - sendUserOperationResponse.result - ) - if (userOpResponse?.receipt?.blockNumber) { - if (confirmations) { - const latestBlock = await this.publicClient.getBlockNumber() - const confirmedBlocks = - BigInt(latestBlock) - - BigInt(userOpResponse.receipt.blockNumber) - if (confirmations >= confirmedBlocks) { - clearInterval(intervalId) - resolve(userOpResponse) - return - } - } else { - clearInterval(intervalId) - resolve(userOpResponse) - return - } - } - } catch (error) { - clearInterval(intervalId) - reject(error) - return - } - - totalDuration += intervalValue - if (totalDuration >= maxDuration) { - clearInterval(intervalId) - reject( - new Error( - `Exceeded maximum duration (${ - maxDuration / 1000 - } sec) waiting to get receipt for userOpHash ${ - sendUserOperationResponse.result - }. Try getting the receipt manually using eth_getUserOperationReceipt rpc method on bundler` - ) - ) - } - }, intervalValue) - }) - } - } - } - - /** - * - * @param userOpHash - * @description This function will return userOpReceipt for a given userOpHash - * @returns Promise<UserOpReceipt> - */ - async getUserOpReceipt(userOpHash: string): Promise<UserOpReceipt> { - const bundlerUrl = this.getBundlerUrl() - const response: GetUserOperationReceiptResponse = await sendRequest( - { - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_getUserOperationReceipt", - params: [userOpHash], - id: getTimestampInSeconds(), - jsonrpc: "2.0" - } - }, - "Bundler" - ) - - if (isNullOrUndefined(response.result)) { - throw new Error(response?.error?.message) - } - - const userOpReceipt: UserOpReceipt = response.result - return userOpReceipt - } - - /** - * - * @param userOpHash - * @description This function will return userOpReceipt for a given userOpHash - * @returns Promise<UserOpReceipt> - */ - async getUserOpStatus(userOpHash: string): Promise<UserOpStatus> { - const bundlerUrl = this.getBundlerUrl() - const response: GetUserOperationStatusResponse = await sendRequest( - { - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "biconomy_getUserOperationStatus", - params: [userOpHash], - id: getTimestampInSeconds(), - jsonrpc: "2.0" - } - }, - "Bundler" - ) - - if (isNullOrUndefined(response.result)) { - throw new Error(response?.error?.message) - } - - const userOpStatus: UserOpStatus = response.result - return userOpStatus - } - - /** - * - * @param userOpHash - * @description this function will return UserOpByHashResponse for given UserOpHash - * @returns Promise<UserOpByHashResponse> - */ - async getUserOpByHash(userOpHash: string): Promise<UserOpByHashResponse> { - const bundlerUrl = this.getBundlerUrl() - const response: GetUserOpByHashResponse = await sendRequest( - { - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: "eth_getUserOperationByHash", - params: [userOpHash], - id: getTimestampInSeconds(), - jsonrpc: "2.0" - } - }, - "Bundler" - ) - - if (isNullOrUndefined(response.result)) { - throw new Error(response?.error?.message) - } - - const userOpByHashResponse: UserOpByHashResponse = response.result - return userOpByHashResponse - } - - /** - * @description This function will return the gas fee values - */ - async getGasFeeValues(): Promise<GetUserOperationGasPriceReturnType> { - const bundlerUrl = this.getBundlerUrl() - const response: { - result: GetUserOperationGasPriceReturnType - error: Error - } = await sendRequest( - { - url: bundlerUrl, - method: HttpMethod.Post, - body: { - method: process.env.BUNDLER_URL?.includes("pimlico") - ? "pimlico_getUserOperationGasPrice" - : "biconomy_getGasFeeValues", - params: [], - id: getTimestampInSeconds(), - jsonrpc: "2.0" - } - }, - "Bundler" - ) - - if (isNullOrUndefined(response.result)) { - throw new Error(response?.error?.message) - } - - return { - slow: { - maxFeePerGas: BigInt(response.result.slow.maxFeePerGas), - maxPriorityFeePerGas: BigInt(response.result.slow.maxPriorityFeePerGas) - }, - standard: { - maxFeePerGas: BigInt(response.result.standard.maxFeePerGas), - maxPriorityFeePerGas: BigInt( - response.result.standard.maxPriorityFeePerGas - ) - }, - fast: { - maxFeePerGas: BigInt(response.result.fast.maxFeePerGas), - maxPriorityFeePerGas: BigInt(response.result.fast.maxPriorityFeePerGas) - } - } - } - - public static async create(config: BundlerConfig): Promise<Bundler> { - return new Bundler(config) - } -} diff --git a/src/bundler/index.ts b/src/bundler/index.ts deleted file mode 100644 index 5986083f4..000000000 --- a/src/bundler/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Bundler } from "./Bundler.js" - -export * from "./interfaces/IBundler.js" -export * from "./Bundler.js" -export * from "./utils/Utils.js" -export * from "./utils/Types.js" - -export const createBundler = Bundler.create diff --git a/src/bundler/interfaces/IBundler.ts b/src/bundler/interfaces/IBundler.ts deleted file mode 100644 index bb465ee15..000000000 --- a/src/bundler/interfaces/IBundler.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { StateOverrideSet, UserOperationStruct } from "../../account" -import type { - GetUserOperationGasPriceReturnType, - UserOpByHashResponse, - UserOpGasResponse, - UserOpReceipt, - UserOpResponse, - UserOpStatus -} from "../utils/Types.js" - -export interface IBundler { - estimateUserOpGas( - _userOp: Partial<UserOperationStruct>, - stateOverrideSet?: StateOverrideSet - ): Promise<UserOpGasResponse> - sendUserOp(_userOp: UserOperationStruct): Promise<UserOpResponse> - getUserOpReceipt(_userOpHash: string): Promise<UserOpReceipt> - getUserOpByHash(_userOpHash: string): Promise<UserOpByHashResponse> - getGasFeeValues(): Promise<GetUserOperationGasPriceReturnType> - getUserOpStatus(_userOpHash: string): Promise<UserOpStatus> - getBundlerUrl(): string -} diff --git a/src/bundler/utils/Constants.ts b/src/bundler/utils/Constants.ts deleted file mode 100644 index c615713ab..000000000 --- a/src/bundler/utils/Constants.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { concat, pad } from "viem" - -// define mode and exec type enums -export const CALLTYPE_SINGLE = "0x00" // 1 byte -export const CALLTYPE_BATCH = "0x01" // 1 byte -export const EXECTYPE_DEFAULT = "0x00" // 1 byte -export const EXECTYPE_TRY = "0x01" // 1 byte -export const EXECTYPE_DELEGATE = "0xFF" // 1 byte -export const MODE_DEFAULT = "0x00000000" // 4 bytes -export const UNUSED = "0x00000000" // 4 bytes -export const MODE_PAYLOAD = "0x00000000000000000000000000000000000000000000" // 22 bytes -export const ERC1271_MAGICVALUE = "0x1626ba7e" -export const ERC1271_INVALID = "0xffffffff" -export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f" - -export const UserOpReceiptIntervals: { [key in number]?: number } = { - [1]: 10000 -} - -// Note: Default value is 500(0.5sec) -export const UserOpWaitForTxHashIntervals: { [key in number]?: number } = { - [1]: 1000 -} - -// Note: Default value is 30000 (30sec) -export const UserOpReceiptMaxDurationIntervals: { [key in number]?: number } = { - [1]: 300000, - [11155111]: 50000, - [137]: 60000, - [56]: 50000, - [97]: 50000, - [421613]: 50000, - [42161]: 50000, - [59140]: 50000 // linea testnet -} - -// Note: Default value is 20000 (20sec) -export const UserOpWaitForTxHashMaxDurationIntervals: { - [key in number]?: number -} = { - [1]: 20000 -} - -export const SDK_VERSION = "4.4.5" - -export const EXECUTE_SINGLE = concat([ - CALLTYPE_SINGLE, - EXECTYPE_DEFAULT, - MODE_DEFAULT, - UNUSED, - MODE_PAYLOAD -]) - -export const EXECUTE_BATCH = concat([ - CALLTYPE_BATCH, - EXECTYPE_DEFAULT, - MODE_DEFAULT, - UNUSED, - MODE_PAYLOAD -]) - -export const ACCOUNT_MODES = { - DEFAULT_SINGLE: concat([ - pad(EXECTYPE_DEFAULT, { size: 1 }), - pad(CALLTYPE_SINGLE, { size: 1 }), - pad(UNUSED, { size: 4 }), - pad(MODE_DEFAULT, { size: 4 }), - pad(MODE_PAYLOAD, { size: 22 }) - ]), - DEFAULT_BATCH: concat([ - pad(EXECTYPE_DEFAULT, { size: 1 }), - pad(CALLTYPE_BATCH, { size: 1 }), - pad(UNUSED, { size: 4 }), - pad(MODE_DEFAULT, { size: 4 }), - pad(MODE_PAYLOAD, { size: 22 }) - ]), - TRY_BATCH: concat([ - pad(EXECTYPE_TRY, { size: 1 }), - pad(CALLTYPE_BATCH, { size: 1 }), - pad(UNUSED, { size: 4 }), - pad(MODE_DEFAULT, { size: 4 }), - pad(MODE_PAYLOAD, { size: 22 }) - ]), - TRY_SINGLE: concat([ - pad(EXECTYPE_TRY, { size: 1 }), - pad(CALLTYPE_SINGLE, { size: 1 }), - pad(UNUSED, { size: 4 }), - pad(MODE_DEFAULT, { size: 4 }), - pad(MODE_PAYLOAD, { size: 22 }) - ]), - DELEGATE_SINGLE: concat([ - pad(EXECTYPE_DELEGATE, { size: 1 }), - pad(CALLTYPE_SINGLE, { size: 1 }), - pad(UNUSED, { size: 4 }), - pad(MODE_DEFAULT, { size: 4 }), - pad(MODE_PAYLOAD, { size: 22 }) - ]) -} diff --git a/src/bundler/utils/HelperFunction.ts b/src/bundler/utils/HelperFunction.ts deleted file mode 100644 index cf96b536c..000000000 --- a/src/bundler/utils/HelperFunction.ts +++ /dev/null @@ -1,68 +0,0 @@ -// Will convert the userOp hex, bigInt and number values to hex strings -// export const transformUserOP = ( -// userOp: UserOperationStruct -// ): UserOperationStruct => { -// try { -// const userOperation = { ...userOp } -// const keys: (keyof UserOperationStruct)[] = [ -// "nonce", -// "callGasLimit", -// "verificationGasLimit", -// "preVerificationGas", -// "maxFeePerGas", -// "maxPriorityFeePerGas" -// ] -// for (const key of keys) { -// if (userOperation[key] && userOperation[key] !== "0x") { -// userOperation[key] = `0x${BigInt(userOp[key] as BigNumberish).toString( -// 16 -// )}` as `0x${string}` -// } -// } -// return userOperation -// } catch (error) { -// throw `Failed to transform user operation: ${error}` -// } -// } - -/** - * @description this function will return current timestamp in seconds - * @returns Number - */ -export const getTimestampInSeconds = (): number => { - return Math.floor(Date.now() / 1000) -} - -export function decodeUserOperationError(errorFromBundler: string) { - const prefix = "UserOperation reverted during simulation with reason: " - if (errorFromBundler.includes(prefix)) { - const errorCode = errorFromBundler - .slice(prefix.length) - .trim() - .replace(/"/g, "") - return decodeErrorCode(errorCode) - } - return errorFromBundler // Return original error if it doesn't match the expected format -} - -function decodeErrorCode(errorCode: string) { - const errorMap: { [key: string]: string } = { - "0xe7190273": - "NotSortedAndUnique: The owners array must contain unique addresses.", - "0xf91bd6f1000000000000000000000000da6959da394b1bddb068923a9a214dc0cd193d2e": - "NotInitialized: The module is not initialized on this smart account.", - "0xaabd5a09": - "InvalidThreshold: The threshold must be greater than or equal to the number of owners.", - "0x71448bfe000000000000000000000000bf2137a23f439ca5aa4360cc6970d70b24d07ea2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0": - "WrongContractSignatureFormat", - "0x40d3d1a40000000000000000000000004d8249d21c9553b1bd23cabf611011376dd3416a": - "LinkedList_EntryAlreadyInList", - "0x40d3d1a40000000000000000000000004b8306128aed3d49a9d17b99bf8082d4e406fa1f": - "LinkedList_EntryAlreadyInList", - "0x40d3d1a4000000000000000000000000d98238bbaea4f91683d250003799ead31d7f5c55": - "Error: Custom error message about the K1Validator contract" - // Add more error codes and their corresponding human-readable messages here - } - const decodedError = errorMap[errorCode] || errorCode - return `User operation reverted during simulation with reason: ${decodedError}` -} diff --git a/src/bundler/utils/Types.ts b/src/bundler/utils/Types.ts deleted file mode 100644 index 53688a28d..000000000 --- a/src/bundler/utils/Types.ts +++ /dev/null @@ -1,151 +0,0 @@ -import type { Address, Chain, Hash, Hex, Log } from "viem" -import type { UserOperationStruct } from "../../account" - -export type BundlerConfig = { - bundlerUrl: string - entryPointAddress?: string - chain: Chain - // eslint-disable-next-line no-unused-vars - userOpReceiptIntervals?: { [key in number]?: number } - userOpWaitForTxHashIntervals?: { [key in number]?: number } - userOpReceiptMaxDurationIntervals?: { [key in number]?: number } - userOpWaitForTxHashMaxDurationIntervals?: { [key in number]?: number } -} -export type BundlerConfigWithChainId = BundlerConfig & { chainId: number } - -export type TStatus = "success" | "reverted" - -export type UserOpReceiptTransaction = { - transactionHash: Hex - transactionIndex: bigint - blockHash: Hash - blockNumber: bigint - from: Address - to: Address | null - cumulativeGasUsed: bigint - status: TStatus - gasUsed: bigint - contractAddress: Address | null - logsBloom: Hex - effectiveGasPrice: bigint -} - -export type UserOpReceipt = { - userOpHash: Hash - entryPoint: Address - sender: Address - nonce: bigint - paymaster?: Address - actualGasUsed: bigint - actualGasCost: bigint - success: boolean - reason?: string - receipt: UserOpReceiptTransaction - logs: Log[] -} - -// review -export type UserOpStatus = { - state: string // for now // could be an enum - transactionHash?: string - userOperationReceipt?: UserOpReceipt -} - -// Converted to JsonRpcResponse with strict type -export type GetUserOperationReceiptResponse = { - jsonrpc: string - id: number - result: UserOpReceipt - error?: JsonRpcError -} - -export type GetUserOperationStatusResponse = { - jsonrpc: string - id: number - result: UserOpStatus - error?: JsonRpcError -} - -// Converted to JsonRpcResponse with strict type -export type SendUserOpResponse = { - jsonrpc: string - id: number - result: string - error?: JsonRpcError -} - -export type UserOpResponse = { - userOpHash: Hash - wait(_confirmations?: number): Promise<UserOpReceipt> -} - -// Converted to JsonRpcResponse with strict type -export type EstimateUserOpGasResponse = { - jsonrpc: string - id: number - result: UserOpGasResponse - error?: JsonRpcError -} - -export type UserOpGasResponse = { - preVerificationGas: bigint - verificationGasLimit: bigint - callGasLimit: bigint - paymasterVerificationGasLimit?: bigint - paymasterPostOpGasLimit?: bigint -} - -// Converted to JsonRpcResponse with strict type -export type GetUserOpByHashResponse = { - jsonrpc: string - id: number - result: UserOpByHashResponse - error?: JsonRpcError -} - -export type UserOpByHashResponse = UserOperationStruct & { - transactionHash: string - blockNumber: number - blockHash: string - entryPoint: string -} -/* eslint-disable @typescript-eslint/no-explicit-any */ -export type JsonRpcError = { - code: string - message: string - data: any -} - -export type GetGasFeeValuesResponse = { - jsonrpc: string - id: number - result: GasFeeValues - error?: JsonRpcError -} -export type GasFeeValues = { - maxPriorityFeePerGas: bigint - maxFeePerGas: bigint -} - -export type GetUserOperationGasPriceReturnType = { - slow: { - maxFeePerGas: bigint - maxPriorityFeePerGas: bigint - } - standard: { - maxFeePerGas: bigint - maxPriorityFeePerGas: bigint - } - fast: { - maxFeePerGas: bigint - maxPriorityFeePerGas: bigint - } -} - -export type BundlerEstimateUserOpGasResponse = { - preVerificationGas: Hex - verificationGasLimit: Hex - callGasLimit?: Hex | null - paymasterVerificationGasLimit?: Hex | null - paymasterPostOpGasLimit?: Hex | null -} diff --git a/src/bundler/utils/Utils.ts b/src/bundler/utils/Utils.ts deleted file mode 100644 index a5971ff93..000000000 --- a/src/bundler/utils/Utils.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { toHex } from "viem" - -export const extractChainIdFromBundlerUrl = (url: string): number => { - try { - const regex = /\/api\/v[2-3]\/(\d+)\/[a-zA-Z0-9.-]+$/ - // biome-ignore lint/style/noNonNullAssertion: <explanation> - const match = regex.exec(url)! - return Number.parseInt(match[1]) - } catch (error) { - throw new Error("Invalid chain id") - } -} - -export const extractChainIdFromPaymasterUrl = (url: string): number => { - try { - const regex = /\/api\/v\d+\/(\d+)\// - const match = regex.exec(url) - if (!match) { - throw new Error("Invalid URL format") - } - return Number.parseInt(match[1]) - } catch (error) { - throw new Error("Invalid chain id") - } -} - -export function deepHexlify(obj: any): any { - if (typeof obj === "function") { - return undefined - } - if (obj == null || typeof obj === "string" || typeof obj === "boolean") { - return obj - } - - if (typeof obj === "bigint") { - return toHex(obj) - } - - if (obj._isBigNumber != null || typeof obj !== "object") { - return toHex(obj).replace(/^0x0/, "0x") - } - if (Array.isArray(obj)) { - return obj.map((member) => deepHexlify(member)) - } - return Object.keys(obj).reduce( - // biome-ignore lint/suspicious/noExplicitAny: it's a recursive function, so it's hard to type - (set: any, key: string) => { - set[key] = deepHexlify(obj[key]) - return set - }, - {} - ) -} diff --git a/src/modules/validators/K1ValidatorModule.ts b/src/modules/validators/K1ValidatorModule.ts deleted file mode 100644 index 19b26a282..000000000 --- a/src/modules/validators/K1ValidatorModule.ts +++ /dev/null @@ -1,24 +0,0 @@ -import addresses from "../../__contracts/addresses.js" -import type { SmartAccountSigner } from "../../account/index.js" -import { BaseValidationModule } from "../base/BaseValidationModule.js" -import type { Module } from "../utils/Types.js" - -export class K1ValidatorModule extends BaseValidationModule { - private constructor(moduleConfig: Module, signer: SmartAccountSigner) { - super(moduleConfig, signer) - } - - public static async create( - signer: SmartAccountSigner, - k1ValidatorAddress = addresses.K1Validator - ): Promise<K1ValidatorModule> { - const module: Module = { - moduleAddress: k1ValidatorAddress, - type: "validator", - data: await signer.getAddress(), - additionalContext: "0x" - } - const instance = new K1ValidatorModule(module, signer) - return instance - } -} diff --git a/src/modules/validators/ValidationModule.ts b/src/modules/validators/ValidationModule.ts deleted file mode 100644 index 8390243a0..000000000 --- a/src/modules/validators/ValidationModule.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { Address, Hex } from "viem" -import type { SmartAccountSigner } from "../../account/index.js" -import { BaseValidationModule } from "../base/BaseValidationModule.js" -import type { Module } from "../utils/Types.js" - -export class ValidationModule extends BaseValidationModule { - private constructor(moduleConfig: Module, signer: SmartAccountSigner) { - super(moduleConfig, signer) - } - - public static async create( - signer: SmartAccountSigner, - moduleAddress: Address, - data: Hex - ): Promise<ValidationModule> { - const module: Module = { - moduleAddress, - type: "validator", - data, - additionalContext: "0x" - } - const instance = new ValidationModule(module, signer) - return instance - } -} diff --git a/src/paymaster/Paymaster.ts b/src/paymaster/Paymaster.ts deleted file mode 100644 index f833ceee3..000000000 --- a/src/paymaster/Paymaster.ts +++ /dev/null @@ -1,410 +0,0 @@ -import { encodeFunctionData, parseAbi } from "viem" -import { - type BiconomyTokenPaymasterRequest, - HttpMethod, - Logger, - type Transaction, - type UserOperationStruct, - sendRequest -} from "../account/index.js" -import { deepHexlify } from "../bundler/index.js" -import type { IHybridPaymaster } from "./interfaces/IHybridPaymaster.js" -import { ADDRESS_ZERO, ERC20_ABI, MAX_UINT256 } from "./utils/Constants.js" -import { getTimestampInSeconds } from "./utils/Helpers.js" -import type { - FeeQuotesOrDataDto, - FeeQuotesOrDataResponse, - Hex, - JsonRpcResponse, - PaymasterAndDataResponse, - PaymasterConfig, - PaymasterFeeQuote, - SponsorUserOperationDto -} from "./utils/Types.js" - -const defaultPaymasterConfig: PaymasterConfig = { - paymasterUrl: "", - strictMode: false // Set your desired default value for strictMode here -} -/** - * @dev Hybrid - Generic Gas Abstraction paymaster - */ -export class Paymaster implements IHybridPaymaster<SponsorUserOperationDto> { - paymasterConfig: PaymasterConfig - - constructor(config: PaymasterConfig) { - const mergedConfig: PaymasterConfig = { - ...defaultPaymasterConfig, - ...config - } - this.paymasterConfig = mergedConfig - } - - /** - * @dev Prepares the user operation by resolving properties and converting certain values to hexadecimal format. - * @param userOp The partial user operation. - * @returns A Promise that resolves to the prepared partial user operation. - */ - // private async prepareUserOperation( - // userOp: Partial<UserOperationStruct> - // ): Promise<Partial<UserOperationStruct>> { - // const userOperation = { ...userOp } - // try { - // const keys1: (keyof UserOperationStruct)[] = [ - // "nonce", - // "maxFeePerGas", - // "maxPriorityFeePerGas" - // ] - // for (const key of keys1) { - // if (userOperation[key] && userOperation[key] !== "0x") { - // userOperation[key] = `0x${BigInt( - // userOp[key] as BigNumberish - // ).toString(16)}` as `0x${string}` - // } - // } - // const keys2: (keyof UserOperationStruct)[] = [ - // "callGasLimit", - // "verificationGasLimit", - // "preVerificationGas" - // ] - // for (const key of keys2) { - // if (userOperation[key] && userOperation[key] !== "0x") { - // userOperation[key] = BigInt( - // userOp[key] as BigNumberish - // ).toString() as `0x${string}` - // } - // } - // } catch (error) { - // throw `Failed to transform user operation: ${error}` - // } - // userOperation.signature = userOp.signature || "0x" - // userOperation.paymasterAndData = userOp.paymasterAndData || "0x" - // return userOperation - // } - - /** - * @dev Builds a token approval transaction for the Biconomy token paymaster. - * @param tokenPaymasterRequest The token paymaster request data. This will include information about chosen feeQuote, spender address and optional flag to provide maxApproval - * @param provider Optional provider object. - * @returns A Promise that resolves to the built transaction object. - */ - async buildTokenApprovalTransaction( - tokenPaymasterRequest: BiconomyTokenPaymasterRequest - ): Promise<Transaction> { - const feeTokenAddress: string = tokenPaymasterRequest.feeQuote.tokenAddress - - const spender = tokenPaymasterRequest.spender - - // logging provider object isProvider - // Logger.log("provider object passed - is provider", provider?._isProvider); - - // TODO move below notes to separate method - // Note: should also check in caller if the approval is already given, if yes return object with address or data 0 - // Note: we would need userOp here to get the account/owner info to check allowance - - let requiredApproval = BigInt(0) - - if ( - tokenPaymasterRequest.maxApproval && - tokenPaymasterRequest.maxApproval === true - ) { - requiredApproval = BigInt(MAX_UINT256) - } else { - requiredApproval = BigInt( - Math.ceil( - tokenPaymasterRequest.feeQuote.maxGasFee * - 10 ** tokenPaymasterRequest.feeQuote.decimal - ) - ) - } - - try { - const parsedAbi = parseAbi(ERC20_ABI) - const data = encodeFunctionData({ - abi: parsedAbi, - functionName: "approve", - args: [spender, requiredApproval] - }) - - // TODO? - // Note: For some tokens we may need to set allowance to 0 first so that would return batch of transactions and changes the return type to Transaction[] - // In that case we would return two objects in an array, first of them being.. - /* - { - to: erc20.address, - value: ethers.BigNumber.from(0), - data: erc20.interface.encodeFunctionData('approve', [spender, BigNumber.from("0")]) - } - */ - - // const zeroValue: ethers.BigNumber = ethers.BigNumber.from(0); - // const value: BigNumberish | undefined = zeroValue as any; - return { - to: feeTokenAddress, - value: "0x00", - data: data - } - } catch (error) { - throw new Error("Failed to encode function data") - } - } - - /** - * @dev Retrieves paymaster fee quotes or data based on the provided user operation and paymaster service data. - * @param userOp The partial user operation. - * @param paymasterServiceData The paymaster service data containing token information and sponsorship details. Devs can send just the preferred token or array of token addresses in case of mode "ERC20" and sartAccountInfo in case of "sponsored" mode. - * @returns A Promise that resolves to the fee quotes or data response. - */ - async getPaymasterFeeQuotesOrData( - userOp: Partial<UserOperationStruct>, - paymasterServiceData: FeeQuotesOrDataDto - ): Promise<FeeQuotesOrDataResponse> { - // const userOp = await this.prepareUserOperation(_userOp) - - let mode: "SPONSORED" | "ERC20" | null = null - let expiryDuration: number | null = null - const calculateGasLimits = paymasterServiceData.calculateGasLimits ?? true - let preferredToken: string | null = null - let feeTokensArray: string[] = [] - // could make below null - let smartAccountInfo = { - name: "BICONOMY", - version: "2.0.0" - } - let webhookData: Record<string, any> | null = null - - if (paymasterServiceData.mode) { - mode = paymasterServiceData.mode - // Validation on the mode passed / define allowed enums - } - - if (paymasterServiceData.expiryDuration) { - expiryDuration = paymasterServiceData.expiryDuration - } - - preferredToken = paymasterServiceData?.preferredToken - ? paymasterServiceData?.preferredToken - : preferredToken - - feeTokensArray = ( - paymasterServiceData?.tokenList?.length !== 0 - ? paymasterServiceData?.tokenList - : feeTokensArray - ) as string[] - - webhookData = paymasterServiceData?.webhookData ?? webhookData - - smartAccountInfo = - paymasterServiceData?.smartAccountInfo ?? smartAccountInfo - - try { - const response: JsonRpcResponse = await sendRequest( - { - url: `${this.paymasterConfig.paymasterUrl}`, - method: HttpMethod.Post, - body: { - method: "pm_getFeeQuoteOrData", - params: [ - userOp, - { - ...(mode !== null && { mode }), - calculateGasLimits: calculateGasLimits, - ...(expiryDuration !== null && { expiryDuration }), - tokenInfo: { - tokenList: feeTokensArray, - ...(preferredToken !== null && { preferredToken }) - }, - sponsorshipInfo: { - ...(webhookData !== null && { webhookData }), - smartAccountInfo: smartAccountInfo - } - } - ], // As per current API - id: getTimestampInSeconds(), - jsonrpc: "2.0" - } - }, - "Paymaster" - ) - - if (response?.result) { - if (response.result.mode === "ERC20") { - const feeQuotesResponse: Array<PaymasterFeeQuote> = - response.result.feeQuotes - const paymasterAddress: Hex = response.result.paymasterAddress - // check all objects iterate and populate below calculation for all tokens - return { - feeQuotes: feeQuotesResponse, - tokenPaymasterAddress: paymasterAddress - } - } - if (response.result.mode === "SPONSORED") { - const paymasterAndData: Hex = response.result.paymasterAndData - const preVerificationGas = response.result.preVerificationGas - const verificationGasLimit = response.result.verificationGasLimit - const callGasLimit = response.result.callGasLimit - return { - paymasterAndData: paymasterAndData, - preVerificationGas: preVerificationGas, - verificationGasLimit: verificationGasLimit, - callGasLimit: callGasLimit - } - } - const errorObject = { - code: 417, - message: - "Expectation Failed: Invalid mode in Paymaster service response" - } - throw errorObject - } - } catch (error: any) { - Logger.error( - "Failed to fetch Fee Quotes or Paymaster data - reason: ", - JSON.stringify(error) - ) - // Note: we may not throw if we include strictMode off and return paymasterData '0x'. - if ( - !this.paymasterConfig.strictMode && - paymasterServiceData.mode === "SPONSORED" && - (error?.message.includes("Smart contract data not found") || - error?.message.includes("No policies were set")) - // can also check based on error.code being -32xxx - ) { - Logger.warn( - `Strict mode is ${this.paymasterConfig.strictMode}. sending paymasterAndData 0x` - ) - return { - paymasterAndData: "0x", - // send below values same as userOp gasLimits - preVerificationGas: userOp.preVerificationGas, - verificationGasLimit: userOp.verificationGasLimit, - callGasLimit: userOp.callGasLimit - } - } - throw error - } - throw new Error("Failed to fetch feeQuote or paymaster data") - } - - /** - * @dev Retrieves the paymaster and data based on the provided user operation and paymaster service data. - * @param userOp The partial user operation. - * @param paymasterServiceData Optional paymaster service data. - * @returns A Promise that resolves to the paymaster and data string. - */ - async getPaymasterAndData( - userOp: Partial<UserOperationStruct>, - paymasterServiceData?: SponsorUserOperationDto // mode is necessary. partial context of token paymaster or verifying - ): Promise<PaymasterAndDataResponse> { - // const userOp = await this.prepareUserOperation(_userOp) - - if (paymasterServiceData?.mode === undefined) { - throw new Error("mode is required in paymasterServiceData") - } - - const mode = paymasterServiceData.mode - - const calculateGasLimits = paymasterServiceData.calculateGasLimits ?? true - - let tokenInfo: Record<string, string | undefined> | null = null - // could make below null - let smartAccountInfo = { - name: "BICONOMY", - version: "2.0.0" - } - let webhookData: Record<string, any> | null = null - let expiryDuration: number | null = null - - if (mode === "ERC20") { - if ( - !paymasterServiceData?.feeTokenAddress && - paymasterServiceData?.feeTokenAddress === ADDRESS_ZERO - ) { - throw new Error("feeTokenAddress is required and should be non-zero") - } - tokenInfo = { - feeTokenAddress: paymasterServiceData.feeTokenAddress - } - } - - webhookData = paymasterServiceData?.webhookData ?? webhookData - smartAccountInfo = - paymasterServiceData?.smartAccountInfo ?? smartAccountInfo - expiryDuration = paymasterServiceData?.expiryDuration ?? expiryDuration - - // Note: The idea is before calling this below rpc, userOp values presense and types should be in accordance with how we call eth_estimateUseropGas on the bundler - - const hexlifiedUserOp = deepHexlify(userOp) - - try { - const response: JsonRpcResponse = await sendRequest( - { - url: `${this.paymasterConfig.paymasterUrl}`, - method: HttpMethod.Post, - body: { - method: "pm_sponsorUserOperation", - params: [ - hexlifiedUserOp, - { - mode: mode, - calculateGasLimits: calculateGasLimits, - ...(expiryDuration !== null && { expiryDuration }), - ...(tokenInfo !== null && { tokenInfo }), - sponsorshipInfo: { - ...(webhookData !== null && { webhookData }), - smartAccountInfo: smartAccountInfo - } - } - ], - id: getTimestampInSeconds(), - jsonrpc: "2.0" - } - }, - "Paymaster" - ) - - if (response?.result) { - const paymasterAndData = response.result.paymasterAndData - const preVerificationGas = - response.result.preVerificationGas ?? userOp.preVerificationGas - const verificationGasLimit = - response.result.verificationGasLimit ?? userOp.verificationGasLimit - const callGasLimit = response.result.callGasLimit ?? userOp.callGasLimit - return { - paymasterAndData: paymasterAndData, - preVerificationGas: preVerificationGas, - verificationGasLimit: verificationGasLimit, - callGasLimit: callGasLimit - } - } - // biome-ignore lint/suspicious/noExplicitAny: caught error is any - } catch (error: any) { - Logger.error( - "Error in generating paymasterAndData - reason: ", - JSON.stringify(error) - ) - throw error - } - throw new Error("Error in generating paymasterAndData") - } - - /** - * - * @param userOp user operation - * @param paymasterServiceData optional extra information to be passed to paymaster service - * @returns "0x" - */ - async getDummyPaymasterAndData( - _userOp: Partial<UserOperationStruct>, - _paymasterServiceData?: SponsorUserOperationDto // mode is necessary. partial context of token paymaster or verifying - ): Promise<string> { - return "0x" - } - - public static async create(config: PaymasterConfig): Promise<Paymaster> { - return new Paymaster(config) - } -} - -export const toPaymaster = Paymaster.create -export default toPaymaster diff --git a/src/paymaster/index.ts b/src/paymaster/index.ts deleted file mode 100644 index 70cbb99d8..000000000 --- a/src/paymaster/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Paymaster } from "./Paymaster.js" -export * from "./interfaces/IPaymaster.js" -export * from "./interfaces/IHybridPaymaster.js" -export * from "./utils/Types.js" -export * from "./Paymaster.js" - -export const createPaymaster = Paymaster.create diff --git a/src/paymaster/interfaces/IHybridPaymaster.ts b/src/paymaster/interfaces/IHybridPaymaster.ts deleted file mode 100644 index 104029e0a..000000000 --- a/src/paymaster/interfaces/IHybridPaymaster.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { UserOperationStruct } from "../../account" -import type { - BiconomyTokenPaymasterRequest, - Transaction -} from "../../account/utils/Types.js" -import type { - FeeQuotesOrDataDto, - FeeQuotesOrDataResponse, - PaymasterAndDataResponse -} from "../utils/Types.js" -import type { IPaymaster } from "./IPaymaster.js" - -export interface IHybridPaymaster<T> extends IPaymaster { - getPaymasterAndData( - _userOp: Partial<UserOperationStruct>, - _paymasterServiceData?: T - ): Promise<PaymasterAndDataResponse> - getDummyPaymasterAndData( - _userOp: Partial<UserOperationStruct>, - _paymasterServiceData?: T - ): Promise<string> - buildTokenApprovalTransaction( - _tokenPaymasterRequest: BiconomyTokenPaymasterRequest - ): Promise<Transaction> - getPaymasterFeeQuotesOrData( - _userOp: Partial<UserOperationStruct>, - _paymasterServiceData: FeeQuotesOrDataDto - ): Promise<FeeQuotesOrDataResponse> -} diff --git a/src/paymaster/interfaces/IPaymaster.ts b/src/paymaster/interfaces/IPaymaster.ts deleted file mode 100644 index 3aee820b2..000000000 --- a/src/paymaster/interfaces/IPaymaster.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { UserOperationStruct } from "../../account" -import type { PaymasterAndDataResponse } from "../utils/Types.js" - -export interface IPaymaster { - // Implementing class may add extra parameter (for example paymasterServiceData with it's own type) in below function signature - getPaymasterAndData( - _userOp: Partial<UserOperationStruct> - ): Promise<PaymasterAndDataResponse> - getDummyPaymasterAndData( - _userOp: Partial<UserOperationStruct> - ): Promise<string> -} diff --git a/src/paymaster/utils/Constants.ts b/src/paymaster/utils/Constants.ts deleted file mode 100644 index a148d17ad..000000000 --- a/src/paymaster/utils/Constants.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const MAX_UINT256 = - "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" -export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000" -// export const ERC20_PAYMASTER_ADDRESS = '0xE9f6Ffc87cac92bc94f704AE017e85cB83DBe4EC' // likely to be same address on all chains - -export const ERC20_ABI = [ - "function transfer(address to, uint256 value) external returns (bool)", - "function transferFrom(address from, address to, uint256 value) external returns (bool)", - "function approve(address spender, uint256 value) external returns (bool)", - "function allowance(address owner, address spender) external view returns (uint256)", - "function balanceOf(address owner) external view returns (uint256)" -] diff --git a/src/paymaster/utils/Helpers.ts b/src/paymaster/utils/Helpers.ts deleted file mode 100644 index d9aeceea9..000000000 --- a/src/paymaster/utils/Helpers.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @description this function will return current timestamp in seconds - * @returns Number - */ -export const getTimestampInSeconds = (): number => { - return Math.floor(Date.now() / 1000) -} diff --git a/src/paymaster/utils/Types.ts b/src/paymaster/utils/Types.ts deleted file mode 100644 index 25326220f..000000000 --- a/src/paymaster/utils/Types.ts +++ /dev/null @@ -1,123 +0,0 @@ -export type Hex = `0x${string}` -import type { BigNumberish } from "../../account" -import type { JsonRpcError } from "../../bundler/utils/Types" - -export type PaymasterServiceErrorResponse = { - jsonrpc: string - id: number - error: JsonRpcError -} - -export type JsonRpcResponse = { - jsonrpc: string - id: number - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - result?: any - error?: JsonRpcError -} - -export type PaymasterConfig = { - paymasterUrl: string - strictMode?: boolean -} - -export type SponsorUserOperationDto = { - /** mode: sponsored or erc20 */ - mode: "SPONSORED" | "ERC20" - /** Always recommended, especially when using token paymaster */ - calculateGasLimits?: boolean - /** Expiry duration in seconds */ - expiryDuration?: number - /** Webhooks to be fired after user op is sent */ - webhookData?: Record<string, any> - /** Smart account meta data */ - smartAccountInfo?: SmartAccountData - /** the fee-paying token address */ - feeTokenAddress?: string -} - -export type FeeQuotesOrDataDto = { - /** mode: sponsored or erc20 */ - mode?: "SPONSORED" | "ERC20" - /** Expiry duration in seconds */ - expiryDuration?: number - /** Always recommended, especially when using token paymaster */ - calculateGasLimits?: boolean - /** List of tokens to be used for fee quotes, if ommitted fees for all supported will be returned */ - tokenList?: string[] - /** preferredToken: Can be ommitted to return all quotes */ - preferredToken?: string - /** Webhooks to be fired after user op is sent */ - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - webhookData?: Record<string, any> - /** Smart account meta data */ - smartAccountInfo?: SmartAccountData -} - -export type FeeQuoteParams = { - tokenList?: string[] - preferredToken?: string -} - -export type FeeTokenInfo = { - feeTokenAddress: string -} - -export type SponsorpshipInfo = { - /** Webhooks to be fired after user op is sent */ - // biome-ignore lint/suspicious/noExplicitAny: <explanation> - webhookData?: Record<string, any> - /** Smart account meta data */ - smartAccountInfo: SmartAccountData -} - -export type SmartAccountData = { - /** name: Name of the smart account */ - name: string - /** version: Version of the smart account */ - version: string -} - -export type PaymasterFeeQuote = { - /** symbol: Token symbol */ - symbol: string - /** tokenAddress: Token address */ - tokenAddress: string - /** decimal: Token decimal */ - decimal: number - logoUrl?: string - /** maxGasFee: in wei */ - maxGasFee: number - /** maxGasFee: in dollars */ - maxGasFeeUSD?: number - usdPayment?: number - /** The premium paid on the token */ - premiumPercentage: number - /** validUntil: Unix timestamp */ - validUntil?: number -} - -export type FeeQuotesOrDataResponse = { - /** Array of results from the paymaster */ - feeQuotes?: PaymasterFeeQuote[] - /** Normally set to the spender in the proceeding call to send the tx */ - tokenPaymasterAddress?: Hex - /** Relevant Data returned from the paymaster */ - paymasterAndData?: Uint8Array | Hex - /* Gas overhead of this UserOperation */ - preVerificationGas?: BigNumberish - /* Actual gas used by the validation of this UserOperation */ - verificationGasLimit?: BigNumberish - /* Value used by inner account execution */ - callGasLimit?: BigNumberish -} - -export type PaymasterAndDataResponse = { - paymasterAndData: Hex - /* Gas overhead of this UserOperation */ - preVerificationGas: number - /* Actual gas used by the validation of this UserOperation */ - verificationGasLimit: number - /* Value used by inner account execution */ - callGasLimit: number -} diff --git a/src/__contracts/abi/EIP1271Abi.ts b/src/sdk/__contracts/abi/EIP1271Abi.ts similarity index 89% rename from src/__contracts/abi/EIP1271Abi.ts rename to src/sdk/__contracts/abi/EIP1271Abi.ts index 044ffe934..304c5485b 100644 --- a/src/__contracts/abi/EIP1271Abi.ts +++ b/src/sdk/__contracts/abi/EIP1271Abi.ts @@ -8,11 +8,7 @@ export const EIP1271Abi = [ { name: "name", type: "string", internalType: "string" }, { name: "version", type: "string", internalType: "string" }, { name: "chainId", type: "uint256", internalType: "uint256" }, - { - name: "verifyingContract", - type: "address", - internalType: "address" - }, + { name: "verifyingContract", type: "address", internalType: "address" }, { name: "salt", type: "bytes32", internalType: "bytes32" }, { name: "extensions", type: "uint256[]", internalType: "uint256[]" } ], diff --git a/src/__contracts/abi/EntryPointABI.ts b/src/sdk/__contracts/abi/EntryPointABI.ts similarity index 100% rename from src/__contracts/abi/EntryPointABI.ts rename to src/sdk/__contracts/abi/EntryPointABI.ts diff --git a/src/__contracts/abi/K1ValidatorAbi.ts b/src/sdk/__contracts/abi/K1ValidatorAbi.ts similarity index 100% rename from src/__contracts/abi/K1ValidatorAbi.ts rename to src/sdk/__contracts/abi/K1ValidatorAbi.ts diff --git a/src/__contracts/abi/K1ValidatorFactoryAbi.ts b/src/sdk/__contracts/abi/K1ValidatorFactoryAbi.ts similarity index 100% rename from src/__contracts/abi/K1ValidatorFactoryAbi.ts rename to src/sdk/__contracts/abi/K1ValidatorFactoryAbi.ts diff --git a/src/__contracts/abi/NexusAbi.ts b/src/sdk/__contracts/abi/NexusAbi.ts similarity index 100% rename from src/__contracts/abi/NexusAbi.ts rename to src/sdk/__contracts/abi/NexusAbi.ts diff --git a/src/__contracts/abi/UniActionPolicyAbi.ts b/src/sdk/__contracts/abi/UniActionPolicyAbi.ts similarity index 100% rename from src/__contracts/abi/UniActionPolicyAbi.ts rename to src/sdk/__contracts/abi/UniActionPolicyAbi.ts diff --git a/src/__contracts/abi/index.ts b/src/sdk/__contracts/abi/index.ts similarity index 85% rename from src/__contracts/abi/index.ts rename to src/sdk/__contracts/abi/index.ts index 78bca202f..27aecc585 100644 --- a/src/__contracts/abi/index.ts +++ b/src/sdk/__contracts/abi/index.ts @@ -1,5 +1,6 @@ export * from "./UniActionPolicyAbi" export * from "./EntryPointABI" +export * from "./EIP1271Abi" export * from "./NexusAbi" export * from "./K1ValidatorAbi" export * from "./K1ValidatorFactoryAbi" diff --git a/src/__contracts/addresses.ts b/src/sdk/__contracts/addresses.ts similarity index 83% rename from src/__contracts/addresses.ts rename to src/sdk/__contracts/addresses.ts index b4b39bfd3..ed316626d 100644 --- a/src/__contracts/addresses.ts +++ b/src/sdk/__contracts/addresses.ts @@ -1,7 +1,6 @@ // The contents of this folder is auto-generated. Please do not edit as your changes are likely to be overwritten -import type { Hex } from "viem" -export const addresses: Record<string, Hex> = { +export const addresses = { Nexus: "0x21f4C007C9f091B93B7C1C6911E13ACcd3DAd403", K1Validator: "0x6854688d3D9A87a33Addd5f4deB5cea1B97fa5b7", K1ValidatorFactory: "0x976869CF9c5Dd5046b41963EF1bBcE62b5366869", diff --git a/src/__contracts/index.ts b/src/sdk/__contracts/index.ts similarity index 85% rename from src/__contracts/index.ts rename to src/sdk/__contracts/index.ts index eae2c5a65..38595002c 100644 --- a/src/__contracts/index.ts +++ b/src/sdk/__contracts/index.ts @@ -1,14 +1,13 @@ import type { Hex } from "viem" +import { entryPoint07Address } from "viem/account-abstraction" import { EntrypointAbi, K1ValidatorAbi, K1ValidatorFactoryAbi } from "./abi" import addresses from "./addresses" export const ENTRYPOINT_SIMULATIONS: Hex = "0x74Cb5e4eE81b86e70f9045036a1C5477de69eE87" -export const ENTRYPOINT_ADDRESS: Hex = - "0x0000000071727De22E5E9d8BAf0edAc6f37da032" const entryPoint = { - address: ENTRYPOINT_ADDRESS, + address: entryPoint07Address, abi: EntrypointAbi } as const diff --git a/src/sdk/account/index.ts b/src/sdk/account/index.ts new file mode 100644 index 000000000..57756f3eb --- /dev/null +++ b/src/sdk/account/index.ts @@ -0,0 +1,2 @@ +export * from "./utils/index.js" +export * from "./toNexusAccount.js" diff --git a/src/sdk/account/toNexusAccount.test.ts b/src/sdk/account/toNexusAccount.test.ts new file mode 100644 index 000000000..42d58a347 --- /dev/null +++ b/src/sdk/account/toNexusAccount.test.ts @@ -0,0 +1,376 @@ +import { + http, + type Account, + type Address, + type Chain, + type Hex, + type PublicClient, + type WalletClient, + concat, + concatHex, + createWalletClient, + domainSeparator, + encodeAbiParameters, + encodePacked, + hashMessage, + isAddress, + isHex, + keccak256, + parseAbi, + parseAbiParameters, + parseEther, + toBytes, + toHex +} from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { TokenWithPermitAbi } from "../../test/__contracts/abi/TokenWithPermitAbi" +import { mockAddresses } from "../../test/__contracts/mockAddresses" +import { toNetwork } from "../../test/testSetup" +import { + fundAndDeployClients, + getTestAccount, + killNetwork, + toTestClient +} from "../../test/testUtils" +import type { MasterClient, NetworkConfig } from "../../test/testUtils" +import { NexusAbi } from "../__contracts/abi/NexusAbi" +import { addresses } from "../__contracts/addresses" +import { + type NexusClient, + createNexusClient +} from "../clients/createNexusClient" +import { type NexusAccount, toNexusAccount } from "./toNexusAccount" +import { getAccountDomainStructFields } from "./utils" +import { + NEXUS_DOMAIN_NAME, + NEXUS_DOMAIN_TYPEHASH, + NEXUS_DOMAIN_VERSION, + PARENT_TYPEHASH, + eip1271MagicValue +} from "./utils/Constants" +import type { UserOperationStruct } from "./utils/Types" + +describe("nexus.account", async () => { + let network: NetworkConfig + let chain: Chain + let bundlerUrl: string + + // Test utils + let testClient: MasterClient + let account: Account + let nexusAccountAddress: Address + let nexusClient: NexusClient + let nexusAccount: NexusAccount + let walletClient: WalletClient + + beforeAll(async () => { + network = await toNetwork() + + chain = network.chain + bundlerUrl = network.bundlerUrl + account = getTestAccount(0) + testClient = toTestClient(chain, getTestAccount(5)) + + walletClient = createWalletClient({ + account, + chain, + transport: http() + }) + + nexusClient = await createNexusClient({ + holder: account, + chain, + transport: http(), + bundlerTransport: http(bundlerUrl) + }) + + nexusAccount = nexusClient.account + nexusAccountAddress = await nexusClient.account.getCounterFactualAddress() + await fundAndDeployClients(testClient, [nexusClient]) + }) + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test("should check isValidSignature PersonalSign is valid", async () => { + const data = hashMessage("0x1234") + + // Calculate the domain separator + const domainSeparator = keccak256( + encodeAbiParameters( + parseAbiParameters("bytes32, bytes32, bytes32, uint256, address"), + [ + keccak256(toBytes(NEXUS_DOMAIN_TYPEHASH)), + keccak256(toBytes(NEXUS_DOMAIN_NAME)), + keccak256(toBytes(NEXUS_DOMAIN_VERSION)), + BigInt(chain.id), + nexusAccountAddress + ] + ) + ) + + // Calculate the parent struct hash + const parentStructHash = keccak256( + encodeAbiParameters(parseAbiParameters("bytes32, bytes32"), [ + keccak256(toBytes("PersonalSign(bytes prefixed)")), + hashMessage(data) + ]) + ) + + // Calculate the final hash + const resultHash: Hex = keccak256( + concat(["0x1901", domainSeparator, parentStructHash]) + ) + + const signature = await nexusAccount.signMessage({ + message: { raw: toBytes(resultHash) } + }) + + const contractResponse = await testClient.readContract({ + address: nexusAccountAddress, + abi: NexusAbi, + functionName: "isValidSignature", + args: [hashMessage(data), signature] + }) + + const viemResponse = await testClient.verifyMessage({ + address: nexusAccountAddress, + message: data, + signature + }) + + expect(contractResponse).toBe(eip1271MagicValue) + expect(viemResponse).toBe(true) + }) + + test("should have 4337 account actions", async () => { + const [ + isDeployed, + counterfactualAddress, + userOpHash, + address, + factoryArgs, + stubSignature, + signedMessage, + nonce, + initCode, + encodedExecute, + encodedExecuteBatch + ] = await Promise.all([ + nexusAccount.isDeployed(), + nexusAccount.getCounterFactualAddress(), + nexusAccount.getUserOpHash({ + sender: account.address, + nonce: 0n, + data: "0x", + signature: "0x", + verificationGasLimit: 1n, + preVerificationGas: 1n, + callData: "0x", + callGasLimit: 1n, + maxFeePerGas: 1n, + maxPriorityFeePerGas: 1n + } as UserOperationStruct), + nexusAccount.getAddress(), + nexusAccount.getFactoryArgs(), + nexusAccount.getStubSignature(), + nexusAccount.signMessage({ message: "hello" }), + nexusAccount.getNonce(), + nexusAccount.getInitCode(), + nexusAccount.encodeExecute({ to: account.address, value: 100n }), + nexusAccount.encodeExecuteBatch([{ to: account.address, value: 100n }]) + ]) + + expect(isAddress(counterfactualAddress)).toBe(true) + expect(isHex(userOpHash)).toBe(true) + expect(isAddress(address)).toBe(true) + expect(address).toBe(nexusAccountAddress) + + if (isDeployed) { + expect(factoryArgs.factory).toBe(undefined) + expect(factoryArgs.factoryData).toBe(undefined) + } else { + // biome-ignore lint/style/noNonNullAssertion: <explanation> + expect(isAddress(factoryArgs.factory!)).toBe(true) + // biome-ignore lint/style/noNonNullAssertion: <explanation> + expect(isHex(factoryArgs.factoryData!)).toBe(true) + } + + expect(isHex(stubSignature)).toBe(true) + expect(isHex(signedMessage)).toBe(true) + expect(typeof nonce).toBe("bigint") + expect(initCode.indexOf(nexusAccount.factoryAddress) > -1).toBe(true) + expect(typeof isDeployed).toBe("boolean") + + expect(isHex(encodedExecute)).toBe(true) + expect(isHex(encodedExecuteBatch)).toBe(true) + }) + + test("should test isValidSignature EIP712Sign to be valid with viem", async () => { + const message = { + contents: keccak256(toBytes("test", { size: 32 })) + } + + const domainSeparator = await testClient.readContract({ + address: await nexusAccount.getAddress(), + abi: parseAbi([ + "function DOMAIN_SEPARATOR() external view returns (bytes32)" + ]), + functionName: "DOMAIN_SEPARATOR" + }) + + const typedHashHashed = keccak256( + concat(["0x1901", domainSeparator, message.contents]) + ) + + const accountDomainStructFields = await getAccountDomainStructFields( + testClient as unknown as PublicClient, + nexusAccountAddress + ) + + const parentStructHash = keccak256( + encodePacked( + ["bytes", "bytes"], + [ + encodeAbiParameters(parseAbiParameters(["bytes32, bytes32"]), [ + keccak256(toBytes(PARENT_TYPEHASH)), + message.contents + ]), + accountDomainStructFields + ] + ) + ) + + const dataToSign = keccak256( + concat(["0x1901", domainSeparator, parentStructHash]) + ) + + const signature = await walletClient.signMessage({ + account, + message: { raw: toBytes(dataToSign) } + }) + + const contentsType = toBytes("Contents(bytes32 stuff)") + + const signatureData = concatHex([ + signature, + domainSeparator, + message.contents, + toHex(contentsType), + toHex(contentsType.length, { size: 2 }) + ]) + + const finalSignature = encodePacked( + ["address", "bytes"], + [addresses.K1Validator, signatureData] + ) + + const contractResponse = await testClient.readContract({ + address: await nexusAccount.getAddress(), + abi: NexusAbi, + functionName: "isValidSignature", + args: [typedHashHashed, finalSignature] + }) + + expect(contractResponse).toBe(eip1271MagicValue) + }) + + test("should sign using signTypedData SDK method", async () => { + const appDomain = { + chainId: chain.id, + name: "TokenWithPermit", + verifyingContract: mockAddresses.TokenWithPermit, + version: "1" + } + + const primaryType = "Contents" + const types = { + Contents: [ + { + name: "stuff", + type: "bytes32" + } + ] + } + + const permitTypehash = keccak256( + toBytes( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ) + ) + const nonce = (await testClient.readContract({ + address: mockAddresses.TokenWithPermit, + abi: TokenWithPermitAbi, + functionName: "nonces", + args: [nexusAccountAddress] + })) as bigint + + const deadline = BigInt(Math.floor(Date.now() / 1000) + 3600) // 1 hour from now + + const message = { + stuff: keccak256( + encodeAbiParameters( + parseAbiParameters( + "bytes32, address, address, uint256, uint256, uint256" + ), + [ + permitTypehash, + nexusAccountAddress, + nexusAccountAddress, + parseEther("2"), + nonce, + deadline + ] + ) + ) + } + + const appDomainSeparator = domainSeparator({ + domain: appDomain + }) + + const contentsHash = keccak256( + concat(["0x1901", appDomainSeparator, message.stuff]) + ) + + const finalSignature = await nexusClient.signTypedData({ + domain: appDomain, + primaryType, + types, + message + }) + + const nexusResponse = await testClient.readContract({ + address: nexusAccountAddress, + abi: NexusAbi, + functionName: "isValidSignature", + args: [contentsHash, finalSignature] + }) + + const permitTokenResponse = await nexusClient.writeContract({ + address: mockAddresses.TokenWithPermit, + abi: TokenWithPermitAbi, + functionName: "permitWith1271", + chain: network.chain, + args: [ + nexusAccountAddress, + nexusAccountAddress, + parseEther("2"), + deadline, + finalSignature + ] + }) + + await testClient.waitForTransactionReceipt({ hash: permitTokenResponse }) + + const allowance = await testClient.readContract({ + address: mockAddresses.TokenWithPermit, + abi: TokenWithPermitAbi, + functionName: "allowance", + args: [nexusAccountAddress, nexusAccountAddress] + }) + + expect(allowance).toEqual(parseEther("2")) + expect(nexusResponse).toEqual("0x1626ba7e") + }) +}) diff --git a/src/sdk/account/toNexusAccount.ts b/src/sdk/account/toNexusAccount.ts new file mode 100644 index 000000000..fab2f3f7b --- /dev/null +++ b/src/sdk/account/toNexusAccount.ts @@ -0,0 +1,517 @@ +import { + type AbiParameter, + type Account, + type Address, + type Chain, + type ClientConfig, + type Hex, + type Prettify, + type PublicClient, + type RpcSchema, + type SignableMessage, + type Transport, + type TypedData, + type TypedDataDefinition, + type UnionPartialBy, + concat, + concatHex, + createWalletClient, + domainSeparator, + encodeAbiParameters, + encodeFunctionData, + encodePacked, + getContract, + keccak256, + parseAbi, + parseAbiParameters, + publicActions, + toBytes, + toHex, + validateTypedData, + walletActions +} from "viem" +import { + type SmartAccount, + type SmartAccountImplementation, + type UserOperation, + entryPoint07Address, + getUserOperationHash, + toSmartAccount +} from "viem/account-abstraction" +import contracts from "../__contracts" +import { EntrypointAbi, K1ValidatorFactoryAbi } from "../__contracts/abi" +import type { Call, GetNonceArgs, UserOperationStruct } from "./utils/Types" + +import { + EXECUTE_BATCH, + EXECUTE_SINGLE, + MAGIC_BYTES, + MODE_VALIDATION, + PARENT_TYPEHASH +} from "./utils/Constants" + +import type { BaseValidationModule } from "../modules/base/BaseValidationModule" +import { K1ValidatorModule } from "../modules/validators/K1ValidatorModule" +import { + type TypedDataWith712, + eip712WrapHash, + getAccountDomainStructFields, + getTypesForEIP712Domain, + packUserOp, + typeToString +} from "./utils/Utils" +import { type UnknownHolder, toHolder } from "./utils/toHolder" + +/** + * Parameters for creating a Nexus Smart Account + */ +export type ToNexusSmartAccountParameters = { + /** The blockchain network */ + chain: Chain + /** The transport configuration */ + transport: ClientConfig["transport"] + /** The holder account or address */ + holder: UnknownHolder + /** Optional index for the account */ + index?: bigint | undefined + /** Optional active validation module */ + activeModule?: BaseValidationModule + /** Optional factory address */ + factoryAddress?: Address + /** Optional K1 validator address */ + k1ValidatorAddress?: Address +} & Prettify< + Pick< + ClientConfig<Transport, Chain, Account, RpcSchema>, + | "account" + | "cacheTime" + | "chain" + | "key" + | "name" + | "pollingInterval" + | "rpcSchema" + > +> + +/** + * Nexus Smart Account type + */ +export type NexusAccount = Prettify< + SmartAccount<NexusSmartAccountImplementation> +> + +/** + * Nexus Smart Account Implementation + */ +export type NexusSmartAccountImplementation = SmartAccountImplementation< + typeof EntrypointAbi, + "0.7", + { + getCounterFactualAddress: () => Promise<Address> + isDeployed: () => Promise<boolean> + getInitCode: () => Hex + encodeExecute: (call: Call) => Promise<Hex> + encodeExecuteBatch: (calls: readonly Call[]) => Promise<Hex> + getUserOpHash: (userOp: Partial<UserOperationStruct>) => Promise<Hex> + factoryData: Hex + factoryAddress: Address + } +> + +/** + * @description Create a Nexus Smart Account. + * + * @param parameters - {@link ToNexusSmartAccountParameters} + * @returns Nexus Smart Account. {@link NexusAccount} + * + * @example + * import { toNexusAccount } from '@biconomy/sdk' + * import { createWalletClient, http } from 'viem' + * import { mainnet } from 'viem/chains' + * + * const account = await toNexusAccount({ + * chain: mainnet, + * transport: http(), + * holder: '0x...', + * }) + */ +export const toNexusAccount = async ( + parameters: ToNexusSmartAccountParameters +): Promise<NexusAccount> => { + const { + chain, + transport, + holder: holder_, + index = 0n, + activeModule, + factoryAddress = contracts.k1ValidatorFactory.address, + k1ValidatorAddress = contracts.k1Validator.address, + key = "nexus account", + name = "Nexus Account" + } = parameters + + const holder = await toHolder({ holder: holder_ }) + + const masterClient = createWalletClient({ + account: holder, + chain, + transport, + key, + name + }) + .extend(walletActions) + .extend(publicActions) + + const signerAddress = masterClient.account.address + const entryPointContract = getContract({ + address: contracts.entryPoint.address, + abi: EntrypointAbi, + client: { + public: masterClient, + wallet: masterClient + } + }) + + const factoryData = encodeFunctionData({ + abi: K1ValidatorFactoryAbi, + functionName: "createAccount", + args: [signerAddress, index, [], 0] + }) + + const defaultedActiveModule = + activeModule ?? + new K1ValidatorModule( + { + address: k1ValidatorAddress, + type: "validator", + context: signerAddress, + additionalContext: "0x" + }, + holder + ) + + let _accountAddress: Address + const getAddress = async () => { + if (_accountAddress) return _accountAddress + _accountAddress = (await masterClient.readContract({ + address: factoryAddress, + abi: K1ValidatorFactoryAbi, + functionName: "computeAccountAddress", + args: [signerAddress, index, [], 0] + })) as Address + return _accountAddress + } + + /** + * @description Gets the counterfactual address of the account + * @returns The counterfactual address + * @throws {Error} If unable to get the counterfactual address + */ + const getCounterFactualAddress = async (): Promise<Address> => { + try { + await entryPointContract.simulate.getSenderAddress([getInitCode()]) + } catch (e: any) { + if (e?.cause?.data?.errorName === "SenderAddressResult") { + _accountAddress = e?.cause.data.args[0] as Address + return _accountAddress + } + console.log("Im in here", e) + } + throw new Error("Failed to get counterfactual account address") + } + + /** + * @description Gets the init code for the account + * @returns The init code as a hexadecimal string + */ + const getInitCode = () => concatHex([factoryAddress, factoryData]) + + /** + * @description Checks if the account is deployed + * @returns True if the account is deployed, false otherwise + */ + const isDeployed = async (): Promise<boolean> => { + const address = await getCounterFactualAddress() + const contractCode = await masterClient.getCode({ address }) + return (contractCode?.length ?? 0) > 2 + } + + /** + * @description Calculates the hash of a user operation + * @param userOp - The user operation + * @returns The hash of the user operation + */ + const getUserOpHash = async ( + userOp: Partial<UserOperationStruct> + ): Promise<Hex> => { + const packedUserOp = packUserOp(userOp) + const userOpHash = keccak256(packedUserOp as Hex) + const enc = encodeAbiParameters( + parseAbiParameters("bytes32, address, uint256"), + [userOpHash, contracts.entryPoint.address, BigInt(chain.id)] + ) + return keccak256(enc) + } + + /** + * @description Encodes a batch of calls for execution + * @param calls - An array of calls to encode + * @param mode - The execution mode + * @returns The encoded calls + */ + const encodeExecuteBatch = async ( + calls: readonly Call[], + mode = EXECUTE_BATCH + ): Promise<Hex> => { + const executionAbiParams: AbiParameter = { + type: "tuple[]", + components: [ + { name: "target", type: "address" }, + { name: "value", type: "uint256" }, + { name: "callData", type: "bytes" } + ] + } + + const executions = calls.map((tx) => ({ + target: tx.to, + callData: tx.data ?? "0x", + value: BigInt(tx.value ?? 0n) + })) + + const executionCalldataPrep = encodeAbiParameters( + [executionAbiParams], + [executions] + ) + return encodeFunctionData({ + abi: parseAbi([ + "function execute(bytes32 mode, bytes calldata executionCalldata) external" + ]), + functionName: "execute", + args: [mode, executionCalldataPrep] + }) + } + + /** + * @description Encodes a single call for execution + * @param call - The call to encode + * @param mode - The execution mode + * @returns The encoded call + */ + const encodeExecute = async ( + call: Call, + mode = EXECUTE_SINGLE + ): Promise<Hex> => { + const executionCalldata = encodePacked( + ["address", "uint256", "bytes"], + [call.to as Hex, BigInt(call.value ?? 0n), (call.data ?? "0x") as Hex] + ) + + return encodeFunctionData({ + abi: parseAbi([ + "function execute(bytes32 mode, bytes calldata executionCalldata) external" + ]), + functionName: "execute", + args: [mode, executionCalldata] + }) + } + + /** + * @description Gets the nonce for the account + * @param args - Optional arguments for getting the nonce + * @returns The nonce + */ + const getNonce = async ({ + validationMode: _validationMode = MODE_VALIDATION, + nonceOptions + }: GetNonceArgs = {}): Promise<bigint> => { + if (nonceOptions) { + if (nonceOptions?.nonceOverride) return BigInt(nonceOptions.nonceOverride) + if (nonceOptions?.validationMode) + _validationMode = nonceOptions.validationMode + } + try { + const key: string = concat([ + "0x000000", + _validationMode, + defaultedActiveModule.address + ]) + const accountAddress = await getAddress() + return await entryPointContract.read.getNonce([ + accountAddress, + BigInt(key) + ]) + } catch (e) { + return BigInt(0) + } + } + + /** + * @description Signs a message + * @param params - The parameters for signing + * @param params.message - The message to sign + * @returns The signature + */ + const signMessage = async ({ + message + }: { message: SignableMessage }): Promise<Hex> => { + const tempSignature = await defaultedActiveModule + .getHolder() + .signMessage({ message }) + + const signature = encodePacked( + ["address", "bytes"], + [defaultedActiveModule.getAddress(), tempSignature] + ) + + const erc6492Signature = concat([ + encodeAbiParameters( + [ + { + type: "address", + name: "create2Factory" + }, + { + type: "bytes", + name: "factoryCalldata" + }, + { + type: "bytes", + name: "originalERC1271Signature" + } + ], + [factoryAddress, factoryData, signature] + ), + MAGIC_BYTES + ]) + + const accountIsDeployed = await isDeployed() + return accountIsDeployed ? signature : erc6492Signature + } + + /** + * @description Signs typed data + * @param parameters - The typed data parameters + * @returns The signature + */ + async function signTypedData< + const typedData extends TypedData | Record<string, unknown>, + primaryType extends keyof typedData | "EIP712Domain" = keyof typedData + >(parameters: TypedDataDefinition<typedData, primaryType>): Promise<Hex> { + const { message, primaryType, types: _types, domain } = parameters + + if (!domain) throw new Error("Missing domain") + if (!message) throw new Error("Missing message") + + const types = { + EIP712Domain: getTypesForEIP712Domain({ domain }), + ..._types + } + + // @ts-ignore: Comes from nexus parent typehash + const messageStuff: Hex = message.stuff + + // @ts-ignore + validateTypedData({ + domain, + message, + primaryType, + types + }) + + const appDomainSeparator = domainSeparator({ domain }) + const accountDomainStructFields = await getAccountDomainStructFields( + masterClient as unknown as PublicClient, + await getAddress() + ) + + const parentStructHash = keccak256( + encodePacked( + ["bytes", "bytes"], + [ + encodeAbiParameters(parseAbiParameters(["bytes32, bytes32"]), [ + keccak256(toBytes(PARENT_TYPEHASH)), + messageStuff + ]), + accountDomainStructFields + ] + ) + ) + + const wrappedTypedHash = eip712WrapHash( + parentStructHash, + appDomainSeparator + ) + + let signature = await defaultedActiveModule.signMessage( + toBytes(wrappedTypedHash) + ) + + const contentsType = toBytes(typeToString(types as TypedDataWith712)[1]) + + const signatureData = concatHex([ + signature, + appDomainSeparator, + messageStuff, + toHex(contentsType), + toHex(contentsType.length, { size: 2 }) + ]) + + signature = encodePacked( + ["address", "bytes"], + [defaultedActiveModule.getAddress(), signatureData] + ) + + return signature + } + + return toSmartAccount({ + client: masterClient, + entryPoint: { + abi: EntrypointAbi, + address: contracts.entryPoint.address, + version: "0.7" + }, + getAddress, + encodeCalls: (calls: readonly Call[]): Promise<Hex> => { + return calls.length === 1 + ? encodeExecute(calls[0]) + : encodeExecuteBatch(calls) + }, + getFactoryArgs: async () => { + return { factory: factoryAddress, factoryData } + }, + getStubSignature: async (): Promise<Hex> => { + return defaultedActiveModule.getDummySignature() + }, + signMessage, + signTypedData, + signUserOperation: async ( + parameters: UnionPartialBy<UserOperation, "sender"> & { + chainId?: number | undefined + } + ): Promise<Hex> => { + const { chainId = masterClient.chain.id, ...userOpWithoutSender } = + parameters + const address = await getCounterFactualAddress() + const userOperation = { ...userOpWithoutSender, sender: address } + const hash = getUserOperationHash({ + chainId, + entryPointAddress: entryPoint07Address, + entryPointVersion: "0.7", + userOperation + }) + return await defaultedActiveModule.signUserOpHash(hash) + }, + getNonce, + extend: { + getCounterFactualAddress, + isDeployed, + getInitCode, + encodeExecute, + encodeExecuteBatch, + getUserOpHash, + factoryData, + factoryAddress + } + }) +} diff --git a/src/sdk/account/utils/AccountNotFound.ts b/src/sdk/account/utils/AccountNotFound.ts new file mode 100644 index 000000000..e373fcac3 --- /dev/null +++ b/src/sdk/account/utils/AccountNotFound.ts @@ -0,0 +1,20 @@ +import { BaseError } from "viem" + +/** + * @ignore + */ +export class AccountNotFoundError extends BaseError { + constructor({ docsPath }: { docsPath?: string | undefined } = {}) { + super( + [ + "Could not find an Account to execute with this Action.", + "Please provide an Account with the `account` argument on the Action, or by supplying an `account` to the Client." + ].join("\n"), + { + docsPath, + docsSlug: "account", + name: "AccountNotFoundError" + } + ) + } +} diff --git a/src/account/utils/Constants.ts b/src/sdk/account/utils/Constants.ts similarity index 69% rename from src/account/utils/Constants.ts rename to src/sdk/account/utils/Constants.ts index d42eda820..19b692682 100644 --- a/src/account/utils/Constants.ts +++ b/src/sdk/account/utils/Constants.ts @@ -1,4 +1,4 @@ -import { type Hex, keccak256, toHex } from "viem" +import { type Hex, concat, keccak256, pad, toHex } from "viem" export const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000" export const MAGIC_BYTES = "0x6492649264926492649264926492649264926492649264926492649264926492" @@ -26,7 +26,7 @@ export const ERROR_MESSAGES = { ACCOUNT_NOT_DEPLOYED: "Account has not yet been deployed", ACCOUNT_ALREADY_DEPLOYED: "Account already deployed", NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY: - "Native token balance is not available during deploy", + "Smart Account does not have sufficient funds to execute the User Operation.", SPENDER_REQUIRED: "spender is required for ERC20 mode", NO_FEE_QUOTE: "FeeQuote was not provided, please call smartAccount.getTokenFees() to get feeQuote", @@ -70,8 +70,8 @@ export const GENERIC_FALLBACK_SELECTOR = "0xcb5baf0f" export const SENTINEL_ADDRESS: Hex = "0x0000000000000000000000000000000000000001" -export const MODE_VALIDATION = "0x00" as Hex -export const MODE_MODULE_ENABLE = "0x01" as Hex +export const MODE_VALIDATION = "0x00" +export const MODE_MODULE_ENABLE = "0x01" export const MODULE_ENABLE_MODE_TYPE_HASH = keccak256( toHex("ModuleEnableMode(address module, bytes32 initDataHash)") @@ -82,7 +82,63 @@ export const MODULE_TYPE_MULTI = 0 export const NEXUS_DOMAIN_NAME = "Nexus" export const NEXUS_DOMAIN_VERSION = "1.0.0-beta" +export const NEXUS_DOMAIN_TYPEHASH = + "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" export const PARENT_TYPEHASH = "TypedDataSign(Contents contents,bytes1 fields,string name,string version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] extensions)Contents(bytes32 stuff)" export const eip1271MagicValue: Hex = "0x1626ba7e" + +export const EXECUTE_SINGLE = concat([ + CALLTYPE_SINGLE, + EXECTYPE_DEFAULT, + MODE_DEFAULT, + UNUSED, + MODE_PAYLOAD +]) + +export const EXECUTE_BATCH = concat([ + CALLTYPE_BATCH, + EXECTYPE_DEFAULT, + MODE_DEFAULT, + UNUSED, + MODE_PAYLOAD +]) + +export const ACCOUNT_MODES = { + DEFAULT_SINGLE: concat([ + pad(EXECTYPE_DEFAULT, { size: 1 }), + pad(CALLTYPE_SINGLE, { size: 1 }), + pad(UNUSED, { size: 4 }), + pad(MODE_DEFAULT, { size: 4 }), + pad(MODE_PAYLOAD, { size: 22 }) + ]), + DEFAULT_BATCH: concat([ + pad(EXECTYPE_DEFAULT, { size: 1 }), + pad(CALLTYPE_BATCH, { size: 1 }), + pad(UNUSED, { size: 4 }), + pad(MODE_DEFAULT, { size: 4 }), + pad(MODE_PAYLOAD, { size: 22 }) + ]), + TRY_BATCH: concat([ + pad(EXECTYPE_TRY, { size: 1 }), + pad(CALLTYPE_BATCH, { size: 1 }), + pad(UNUSED, { size: 4 }), + pad(MODE_DEFAULT, { size: 4 }), + pad(MODE_PAYLOAD, { size: 22 }) + ]), + TRY_SINGLE: concat([ + pad(EXECTYPE_TRY, { size: 1 }), + pad(CALLTYPE_SINGLE, { size: 1 }), + pad(UNUSED, { size: 4 }), + pad(MODE_DEFAULT, { size: 4 }), + pad(MODE_PAYLOAD, { size: 22 }) + ]), + DELEGATE_SINGLE: concat([ + pad(EXECTYPE_DELEGATE, { size: 1 }), + pad(CALLTYPE_SINGLE, { size: 1 }), + pad(UNUSED, { size: 4 }), + pad(MODE_DEFAULT, { size: 4 }), + pad(MODE_PAYLOAD, { size: 22 }) + ]) +} diff --git a/src/sdk/account/utils/Helpers.ts b/src/sdk/account/utils/Helpers.ts new file mode 100644 index 000000000..85d5c3051 --- /dev/null +++ b/src/sdk/account/utils/Helpers.ts @@ -0,0 +1,4 @@ +export const isDebugging = () => + process.env.BICONOMY_SDK_DEBUG === "true" || + process.env.REACT_APP_BICONOMY_SDK_DEBUG === "true" || + process.env.NEXT_PUBLIC_BICONOMY_SDK_DEBUG === "true" diff --git a/src/account/utils/Logger.ts b/src/sdk/account/utils/Logger.ts similarity index 100% rename from src/account/utils/Logger.ts rename to src/sdk/account/utils/Logger.ts diff --git a/src/sdk/account/utils/Types.ts b/src/sdk/account/utils/Types.ts new file mode 100644 index 000000000..f1cd3a424 --- /dev/null +++ b/src/sdk/account/utils/Types.ts @@ -0,0 +1,106 @@ +import type { Address, Hash, Hex, Log } from "viem" +import type { MODE_MODULE_ENABLE, MODE_VALIDATION } from "./Constants" + +export type TStatus = "success" | "reverted" + +export type UserOpReceiptTransaction = { + transactionHash: Hex + transactionIndex: bigint + blockHash: Hash + blockNumber: bigint + from: Address + to: Address | null + cumulativeGasUsed: bigint + status: TStatus + gasUsed: bigint + contractAddress: Address | null + logsBloom: Hex + effectiveGasPrice: bigint +} + +export type UserOpReceipt = { + userOpHash: Hash + entryPoint: Address + sender: Address + nonce: bigint + paymaster?: Address + actualGasUsed: bigint + actualGasCost: bigint + success: boolean + reason?: string + receipt: UserOpReceiptTransaction + logs: Log[] +} + +export type NonceOptions = { + /** nonceKey: The key to use for nonce */ + nonceKey?: bigint + /** validationMode: Mode of the validation module */ + validationMode?: typeof MODE_VALIDATION | typeof MODE_MODULE_ENABLE + /** nonceOverride: The nonce to use for the transaction */ + nonceOverride?: bigint +} + +export type Service = "Bundler" | "Paymaster" +export type BigNumberish = Hex | number | bigint +export type BytesLike = Uint8Array | Hex | string + +//#region UserOperationStruct +// based on @account-abstraction/common +// this is used for building requests +export type UserOperationStruct = { + sender: Address + nonce: bigint + factory?: Address + factoryData?: Hex + callData: Hex + callGasLimit: bigint + verificationGasLimit: bigint + preVerificationGas: bigint + maxFeePerGas: bigint + maxPriorityFeePerGas: bigint + paymaster?: Address + paymasterVerificationGasLimit?: bigint + paymasterPostOpGasLimit?: bigint + paymasterData?: Hex + signature: Hex + // initCode?: never + paymasterAndData?: never +} +//#endregion UserOperationStruct + +export type EIP712DomainReturn = [ + Hex, + string, + string, + bigint, + Address, + Hex, + bigint[] +] + +export type AccountMetadata = { + name: string + version: string + chainId: bigint +} + +export type TypeField = { + name: string + type: string +} + +export type TypeDefinition = { + [key: string]: TypeField[] +} + +export type GetNonceArgs = { + key?: bigint | undefined + validationMode?: "0x00" | "0x01" + nonceOptions?: NonceOptions +} +export type Call = { + to: Hex + data?: Hex | undefined + value?: bigint | undefined +} diff --git a/src/account/utils/Utils.ts b/src/sdk/account/utils/Utils.ts similarity index 88% rename from src/account/utils/Utils.ts rename to src/sdk/account/utils/Utils.ts index 09511380c..a0c024c7b 100644 --- a/src/account/utils/Utils.ts +++ b/src/sdk/account/utils/Utils.ts @@ -4,6 +4,7 @@ import { type Hash, type Hex, type PublicClient, + type TypedData, type TypedDataDomain, type TypedDataParameter, concat, @@ -21,20 +22,20 @@ import { toBytes, toHex } from "viem" -import { EIP1271Abi } from "../../__contracts/abi/EIP1271Abi" -import type { - AccountMetadata, - EIP712DomainReturn, - TypeDefinition, - UserOperationStruct -} from "../../account" +import { EIP1271Abi } from "../../__contracts/abi" import { MOCK_MULTI_MODULE_ADDRESS, MODULE_ENABLE_MODE_TYPE_HASH, NEXUS_DOMAIN_NAME, + NEXUS_DOMAIN_TYPEHASH, NEXUS_DOMAIN_VERSION -} from "../../account" +} from "../../account/utils/Constants" import { type ModuleType, moduleTypeIds } from "../../modules/utils/Types" +import type { + AccountMetadata, + EIP712DomainReturn, + UserOperationStruct +} from "./Types" /** * pack the userOperation @@ -162,15 +163,11 @@ export function convertToFactor(percentage: number | undefined): number { export function makeInstallDataAndHash( accountOwner: Address, - modules: { moduleType: ModuleType; config: Hex }[] + modules: { type: ModuleType; config: Hex }[] ): [string, string] { - const types = modules.map((module) => - BigInt(moduleTypeIds[module.moduleType]) - ) + const types = modules.map((module) => BigInt(moduleTypeIds[module.type])) const initDatas = modules.map((module) => - toHex( - concat([toBytes(BigInt(moduleTypeIds[module.moduleType])), module.config]) - ) + toHex(concat([toBytes(BigInt(moduleTypeIds[module.type])), module.config])) ) const multiInstallData = encodeAbiParameters( @@ -214,11 +211,7 @@ export function _hashTypedData( { type: "address" } ], [ - keccak256( - stringToBytes( - "EIP712Domain(string name,string version,address verifyingContract)" - ) - ), + keccak256(stringToBytes(NEXUS_DOMAIN_TYPEHASH)), keccak256(stringToBytes(name)), keccak256(stringToBytes(version)), verifyingContract @@ -278,9 +271,9 @@ export const accountMetadata = async ( data: domain }) return { - name: decoded[1], - version: decoded[2], - chainId: decoded[3] + name: decoded?.[1], + version: decoded?.[2], + chainId: decoded?.[3] } } } catch (error) {} @@ -293,24 +286,27 @@ export const accountMetadata = async ( } } -export const eip712WrapHash = async ( - typedHash: Hex, - appDomainSeparator: Hex -): Promise<Hex> => { - const digest = keccak256(concat(["0x1901", appDomainSeparator, typedHash])) +export const eip712WrapHash = (typedHash: Hex, appDomainSeparator: Hex): Hex => + keccak256(concat(["0x1901", appDomainSeparator, typedHash])) - return digest -} +export type TypedDataWith712 = { + EIP712Domain: TypedDataParameter[] +} & TypedData -export function typeToString(typeDef: TypeDefinition): string[] { +export function typeToString(typeDef: TypedDataWith712): string[] { return Object.entries(typeDef).map(([key, fields]) => { - const fieldStrings = fields + const fieldStrings = (fields ?? []) .map((field) => `${field.type} ${field.name}`) .join(",") return `${key}(${fieldStrings})` }) } +/** @ignore */ +export function bigIntReplacer(_key: string, value: any): any { + return typeof value === "bigint" ? value.toString() : value +} + export const getAccountDomainStructFields = async ( publicClient: PublicClient, accountAddress: Address diff --git a/src/bundler/utils/getAAError.ts b/src/sdk/account/utils/getAAError.ts similarity index 93% rename from src/bundler/utils/getAAError.ts rename to src/sdk/account/utils/getAAError.ts index 2f0425b3c..8be4806c0 100644 --- a/src/bundler/utils/getAAError.ts +++ b/src/sdk/account/utils/getAAError.ts @@ -1,6 +1,5 @@ import { BaseError } from "viem" -import type { Service } from "../../account" -import { SDK_VERSION } from "./Constants" +import type { Service } from ".." export type KnownError = { name: string regex: string @@ -47,7 +46,7 @@ type AccountAbstractionErrorParams = { class AccountAbstractionError extends BaseError { override name = "AccountAbstractionError" - override version = `@biconomy/account@${SDK_VERSION}` + override version = "@biconomy/sdk" constructor(title: string, params: AccountAbstractionErrorParams = {}) { super(title, params) diff --git a/src/account/utils/getChain.ts b/src/sdk/account/utils/getChain.ts similarity index 95% rename from src/account/utils/getChain.ts rename to src/sdk/account/utils/getChain.ts index ede2ea4db..e3d83bf99 100644 --- a/src/account/utils/getChain.ts +++ b/src/sdk/account/utils/getChain.ts @@ -64,7 +64,7 @@ type StringOrStrings = string | string[] * * @example * - * import { getCustomChain, createSmartAccountClient } from "@biconomy/account" + * import { getCustomChain, createNexusClient } from "@biconomy/account" * * const customChain = getCustomChain( * "My Custom Chain", @@ -80,7 +80,7 @@ type StringOrStrings = string | string[] * transport: http() * }) * - * const smartAccountCustomChain = await createSmartAccountClient({ + * const smartAccountCustomChain = await createNexusClient({ * signer: walletClientWithCustomChain, * bundlerUrl, * customChain diff --git a/src/account/utils/index.ts b/src/sdk/account/utils/index.ts similarity index 58% rename from src/account/utils/index.ts rename to src/sdk/account/utils/index.ts index b1f3d8378..36c7543f6 100644 --- a/src/account/utils/index.ts +++ b/src/sdk/account/utils/index.ts @@ -1,8 +1,6 @@ export * from "./Types.js" export * from "./Utils.js" export * from "./Constants.js" -export * from "./convertSigner.js" export * from "./getChain.js" export * from "./Logger.js" -export * from "./HttpRequests.js" -export * from "./EthersSigner.js" +export * from "./toHolder.js" diff --git a/src/sdk/account/utils/toHolder.ts b/src/sdk/account/utils/toHolder.ts new file mode 100644 index 000000000..94d2948fa --- /dev/null +++ b/src/sdk/account/utils/toHolder.ts @@ -0,0 +1,85 @@ +import { + type Account, + type Address, + type Chain, + type EIP1193Provider, + type EIP1193RequestFn, + type EIP1474Methods, + type LocalAccount, + type OneOf, + type Transport, + type WalletClient, + createWalletClient, + custom +} from "viem" +import { toAccount } from "viem/accounts" + +import { signTypedData } from "viem/actions" +import { getAction } from "viem/utils" + +export type Holder = LocalAccount +export type UnknownHolder = OneOf< + | EIP1193Provider + | WalletClient<Transport, Chain | undefined, Account> + | LocalAccount +> +export async function toHolder({ + holder, + address +}: { + holder: UnknownHolder + address?: Address +}): Promise<LocalAccount> { + if ("type" in holder && holder.type === "local") { + return holder as LocalAccount + } + + let walletClient: + | WalletClient<Transport, Chain | undefined, Account> + | undefined = undefined + + if ("request" in holder) { + if (!address) { + try { + ;[address] = await (holder.request as EIP1193RequestFn<EIP1474Methods>)( + { + method: "eth_requestAccounts" + } + ) + } catch { + ;[address] = await (holder.request as EIP1193RequestFn<EIP1474Methods>)( + { + method: "eth_accounts" + } + ) + } + } + if (!address) throw new Error("address required") + + walletClient = createWalletClient({ + account: address, + transport: custom(holder as EIP1193Provider) + }) + } + + if (!walletClient) { + walletClient = holder as WalletClient<Transport, Chain | undefined, Account> + } + + return toAccount({ + address: walletClient.account.address, + async signMessage({ message }) { + return walletClient.signMessage({ message }) + }, + async signTypedData(typedData) { + return getAction( + walletClient, + signTypedData, + "signTypedData" + )(typedData as any) + }, + async signTransaction(_) { + throw new Error("Not supported") + } + }) +} diff --git a/src/sdk/account/utils/utils.test.ts b/src/sdk/account/utils/utils.test.ts new file mode 100644 index 000000000..3ae0f3882 --- /dev/null +++ b/src/sdk/account/utils/utils.test.ts @@ -0,0 +1,58 @@ +import { ParamType, ethers } from "ethers" +import { type AbiParameter, encodeAbiParameters } from "viem" +import { describe, expect, test } from "vitest" + +describe("utils", async () => { + test.concurrent( + "should have consistent behaviour between ethers.AbiCoder.defaultAbiCoder() and viem.encodeAbiParameters()", + async () => { + const expectedResult = + "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b90600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b906000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" + + const Executions = ParamType.from({ + type: "tuple(address,uint256,bytes)[]", + baseType: "tuple", + name: "executions", + arrayLength: null, + components: [ + { name: "target", type: "address" }, + { name: "value", type: "uint256" }, + { name: "callData", type: "bytes" } + ] + }) + + const viemExecutions: AbiParameter = { + type: "tuple[]", + components: [ + { name: "target", type: "address" }, + { name: "value", type: "uint256" }, + { name: "callData", type: "bytes" } + ] + } + + const txs = [ + { + target: "0x90F79bf6EB2c4f870365E785982E1f101E93b906", + callData: "0x", + value: 1n + }, + { + target: "0x90F79bf6EB2c4f870365E785982E1f101E93b906", + callData: "0x", + value: 1n + } + ] + + const executionCalldataPrepWithEthers = + ethers.AbiCoder.defaultAbiCoder().encode([Executions], [txs]) + + const executionCalldataPrepWithViem = encodeAbiParameters( + [viemExecutions], + [txs] + ) + + expect(executionCalldataPrepWithEthers).toBe(expectedResult) + expect(executionCalldataPrepWithViem).toBe(expectedResult) + } + ) +}) diff --git a/src/sdk/clients/createBicoBundlerClient.test.ts b/src/sdk/clients/createBicoBundlerClient.test.ts new file mode 100644 index 000000000..2592ff0d0 --- /dev/null +++ b/src/sdk/clients/createBicoBundlerClient.test.ts @@ -0,0 +1,85 @@ +import { http, type Account, type Address, type Chain, isHex } from "viem" +import type { BundlerClient } from "viem/account-abstraction" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { toNetwork } from "../../test/testSetup" +import { + getTestAccount, + killNetwork, + toTestClient, + topUp +} from "../../test/testUtils" +import type { MasterClient, NetworkConfig } from "../../test/testUtils" +import contracts from "../__contracts" +import { type NexusAccount, toNexusAccount } from "../account/toNexusAccount" +import { createBicoBundlerClient } from "./createBicoBundlerClient" + +describe("bico.bundler", async () => { + let network: NetworkConfig + let chain: Chain + let bundlerUrl: string + + // Test utils + let testClient: MasterClient + let account: Account + let nexusAccountAddress: Address + let bicoBundler: BundlerClient + let nexusAccount: NexusAccount + + beforeAll(async () => { + network = await toNetwork() + + chain = network.chain + bundlerUrl = network.bundlerUrl + account = getTestAccount(0) + testClient = toTestClient(chain, getTestAccount(5)) + + nexusAccount = await toNexusAccount({ + holder: account, + chain, + transport: http() + }) + + bicoBundler = createBicoBundlerClient({ bundlerUrl, account: nexusAccount }) + nexusAccountAddress = await nexusAccount.getCounterFactualAddress() + await topUp(testClient, nexusAccountAddress) + }) + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test.concurrent("should have 4337 bundler actions", async () => { + const [chainId, supportedEntrypoints, preparedUserOp] = await Promise.all([ + bicoBundler.getChainId(), + bicoBundler.getSupportedEntryPoints(), + bicoBundler.prepareUserOperation({ + sender: account.address, + nonce: 0n, + data: "0x", + signature: "0x", + verificationGasLimit: 1n, + preVerificationGas: 1n, + callData: "0x", + callGasLimit: 1n, + maxFeePerGas: 1n, + maxPriorityFeePerGas: 1n, + account: nexusAccount + }) + ]) + expect(chainId).toEqual(chain.id) + expect(supportedEntrypoints).to.include(contracts.entryPoint.address) + expect(preparedUserOp).toHaveProperty("signature") + }) + + test("should send a user operation and get the receipt", async () => { + const calls = [{ to: account.address, value: 1n }] + // Must find gas fees before sending the user operation + const gas = await testClient.estimateFeesPerGas() + const hash = await bicoBundler.sendUserOperation({ + ...gas, + calls, + account: nexusAccount + }) + const receipt = await bicoBundler.waitForUserOperationReceipt({ hash }) + expect(receipt.success).toBeTruthy() + }) +}) diff --git a/src/sdk/clients/createBicoBundlerClient.ts b/src/sdk/clients/createBicoBundlerClient.ts new file mode 100644 index 000000000..9a5d38846 --- /dev/null +++ b/src/sdk/clients/createBicoBundlerClient.ts @@ -0,0 +1,61 @@ +import { http, type OneOf, type Transport } from "viem" +import { + type BundlerClient, + type BundlerClientConfig, + createBundlerClient +} from "viem/account-abstraction" + +type BicoBundlerClientConfig = Omit<BundlerClientConfig, "transport"> & + OneOf< + | { + transport?: Transport + } + | { + bundlerUrl: string + } + | { + apiKey?: string + } + > + +/** + * Creates a Bico Bundler Client with a given Transport configured for a Chain. + * + * @param parameters - Configuration for the Bico Bundler Client + * @returns A Bico Bundler Client + * + * @example + * import { createBicoBundlerClient, http } from '@biconomy/sdk' + * import { mainnet } from 'viem/chains' + * + * const bundlerClient = createBicoBundlerClient({ chain: mainnet }); + */ +export const createBicoBundlerClient = ( + parameters: BicoBundlerClientConfig +): BundlerClient => { + if ( + !parameters.apiKey && + !parameters.bundlerUrl && + !parameters.transport && + !parameters?.chain + ) { + throw new Error( + "Cannot set determine a bundler url, please provide a chain." + ) + } + + return createBundlerClient({ + ...parameters, + transport: parameters.transport + ? parameters.transport + : parameters.bundlerUrl + ? http(parameters.bundlerUrl) + : http( + // @ts-ignore: Type saftey provided by the if statement above + `https://bundler.biconomy.io/api/v3/${parameters.chain.id}/${ + parameters.apiKey ?? + "nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f14" + }` + ) + }) +} diff --git a/src/sdk/clients/createBicoPaymasterClient.ts b/src/sdk/clients/createBicoPaymasterClient.ts new file mode 100644 index 000000000..01abfcc51 --- /dev/null +++ b/src/sdk/clients/createBicoPaymasterClient.ts @@ -0,0 +1,62 @@ +import { http, type OneOf, type Transport } from "viem" +import { + type PaymasterClient, + type PaymasterClientConfig, + createPaymasterClient +} from "viem/account-abstraction" + +/** + * Configuration options for creating a Bico Paymaster Client. + * @typedef {Object} BicoPaymasterClientConfig + * @property {Transport} [transport] - Optional custom transport. + * @property {string} [paymasterUrl] - URL of the paymaster service. + * @property {number} [chainId] - Chain ID for the network. + * @property {string} [apiKey] - API key for authentication. + */ +type BicoPaymasterClientConfig = Omit<PaymasterClientConfig, "transport"> & + OneOf< + | { + transport?: Transport + } + | { + paymasterUrl: string + } + | { + chainId: number + apiKey: string + } + > + +/** + * Creates a Bico Paymaster Client. + * + * This function sets up a client for interacting with Biconomy's paymaster service. + * It can be configured with a custom transport, a specific paymaster URL, or with a chain ID and API key. + * + * @param {BicoPaymasterClientConfig} parameters - Configuration options for the client. + * @returns {PaymasterClient} A configured Paymaster Client instance. + * + * @example + * // Create a client with a custom transport + * const client1 = createBicoPaymasterClient({ transport: customTransport }) + * + * @example + * // Create a client with a specific paymaster URL + * const client2 = createBicoPaymasterClient({ paymasterUrl: 'https://example.com/paymaster' }) + * + * @example + * // Create a client with chain ID and API key + * const client3 = createBicoPaymasterClient({ chainId: 1, apiKey: 'your-api-key' }) + */ +export const createBicoPaymasterClient = ( + parameters: BicoPaymasterClientConfig +): PaymasterClient => + createPaymasterClient({ + ...parameters, + transport: + parameters.transport ?? parameters.paymasterUrl + ? http(parameters.paymasterUrl) + : http( + `https://paymaster.biconomy.io/api/v3/${parameters.chainId}/${parameters.apiKey}` + ) + }) diff --git a/src/sdk/clients/createNexusClient.test.ts b/src/sdk/clients/createNexusClient.test.ts new file mode 100644 index 000000000..156819159 --- /dev/null +++ b/src/sdk/clients/createNexusClient.test.ts @@ -0,0 +1,275 @@ +import { AbiCoder, ParamType } from "ethers/abi" +import { JsonRpcProvider } from "ethers/providers" +import { Wallet } from "ethers/wallet" +import { + http, + type AbiParameter, + type Account, + type Address, + type Chain, + type Hex, + encodeAbiParameters, + encodeFunctionData, + parseEther +} from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { CounterAbi } from "../../test/__contracts/abi" +import mockAddresses from "../../test/__contracts/mockAddresses" +import { toNetwork } from "../../test/testSetup" +import { + getBalance, + getTestAccount, + killNetwork, + toTestClient, + topUp +} from "../../test/testUtils" +import type { MasterClient, NetworkConfig } from "../../test/testUtils" +import { pKey } from "../../test/testUtils" +import { addresses } from "../__contracts/addresses" +import { ERROR_MESSAGES } from "../account/utils/Constants" +import { makeInstallDataAndHash } from "../account/utils/Utils" +import { getChain } from "../account/utils/getChain" +import { type NexusClient, createNexusClient } from "./createNexusClient" + +describe("nexus.client", async () => { + let network: NetworkConfig + let chain: Chain + let bundlerUrl: string + + // Test utils + let testClient: MasterClient + let account: Account + let recipientAccount: Account + let recipientAddress: Address + let nexusClient: NexusClient + let nexusAccountAddress: Address + + beforeAll(async () => { + network = await toNetwork() + + chain = network.chain + bundlerUrl = network.bundlerUrl + account = getTestAccount(0) + recipientAccount = getTestAccount(1) + recipientAddress = recipientAccount.address + + testClient = toTestClient(chain, getTestAccount(5)) + + nexusClient = await createNexusClient({ + holder: account, + chain, + transport: http(), + bundlerTransport: http(bundlerUrl) + }) + + nexusAccountAddress = await nexusClient.account.getCounterFactualAddress() + }) + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test("should deploy smart account if not deployed", async () => { + const isDeployed = await nexusClient.account.isDeployed() + + if (!isDeployed) { + console.log("Smart account not deployed. Deploying...") + + // Fund the account first + await topUp(testClient, nexusAccountAddress, parseEther("0.01")) + + const hash = await nexusClient.sendTransaction({ + calls: [ + { + to: nexusAccountAddress, + value: 0n, + data: "0x" + } + ] + }) + const { status } = await testClient.waitForTransactionReceipt({ + hash + }) + expect(status).toBe("success") + + const isNowDeployed = await nexusClient.account.isDeployed() + expect(isNowDeployed).toBe(true) + + console.log("Smart account deployed successfully") + } else { + console.log("Smart account already deployed") + } + + // Verify the account is now deployed + const finalDeploymentStatus = await nexusClient.account.isDeployed() + expect(finalDeploymentStatus).toBe(true) + }) + + test("should fund the smart account", async () => { + await topUp(testClient, nexusAccountAddress, parseEther("0.01")) + + const balance = await getBalance(testClient, nexusAccountAddress) + expect(balance > 0) + }) + + // @note @todo this test is only valid for anvil + test("should have account addresses", async () => { + const addresses = await Promise.all([ + account.address, + nexusClient.account.getAddress() + ]) + expect(addresses.every(Boolean)).to.be.true + expect(addresses).toStrictEqual([ + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account + ]) + }) + + test("should estimate gas for writing to a contract", async () => { + const encodedCall = encodeFunctionData({ + abi: CounterAbi, + functionName: "incrementNumber" + }) + const call = { + to: mockAddresses.Counter, + data: encodedCall + } + const results = await Promise.all([ + nexusClient.estimateUserOperationGas({ calls: [call] }), + nexusClient.estimateUserOperationGas({ calls: [call, call] }) + ]) + + const increasingGasExpenditure = results.every( + ({ preVerificationGas }, i) => + preVerificationGas > (results[i - 1]?.preVerificationGas ?? 0) + ) + + expect(increasingGasExpenditure).toBeTruthy() + }, 60000) + + test("should check enable mode", async () => { + const result = makeInstallDataAndHash(account.address, [ + { + type: "validator", + config: account.address + } + ]) + + expect(result).toBeTruthy() + }, 30000) + + test.skip("should create a nexusAccount from an ethers signer", async () => { + const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) + const ethersSigner = new Wallet(pKey, ethersProvider) + + const ethOwnerNexusClient = await createNexusClient({ + chain, + owner: (await ethersSigner.getAddress()) as Hex, + bundlerTransport: http(bundlerUrl), + transport: http(chain.rpcUrls.default.http[0]) + }) + + expect(await ethOwnerNexusClient.account.getAddress()).toBeTruthy() + }) + + test("should read estimated user op gas values", async () => { + const userOp = await nexusClient.prepareUserOperation({ + calls: [ + { + to: recipientAccount.address, + data: "0x" + } + ] + }) + + const estimatedGas = await nexusClient.estimateUserOperationGas(userOp) + expect(estimatedGas.verificationGasLimit).toBeTruthy() + expect(estimatedGas.callGasLimit).toBeTruthy() + expect(estimatedGas.preVerificationGas).toBeTruthy() + }, 30000) + + test.skip("should create a smart account with paymaster with an api key", async () => { + const paymaster = nexusClient.paymaster + expect(paymaster).not.toBeNull() + expect(paymaster).not.toBeUndefined() + }) + + test("should return chain object for chain id 1", async () => { + const chainId = 1 + const chain = getChain(chainId) + expect(chain.id).toBe(chainId) + }) + + test("should have correct fields", async () => { + const chainId = 1 + const chain = getChain(chainId) + ;[ + "blockExplorers", + "contracts", + "fees", + "formatters", + "id", + "name", + "nativeCurrency", + "rpcUrls", + "serializers" + ].every((field) => { + expect(chain).toHaveProperty(field) + }) + }) + + test("should throw an error, chain id not found", async () => { + const chainId = 0 + expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) + }) + + test("should have attached erc757 actions", async () => { + const [ + accountId, + isModuleInstalled, + supportsExecutionMode, + supportsModule + ] = await Promise.all([ + nexusClient.accountId(), + nexusClient.isModuleInstalled({ + module: { + type: "validator", + address: addresses.K1Validator, + context: "0x" + } + }), + nexusClient.supportsExecutionMode({ + type: "delegatecall" + }), + nexusClient.supportsModule({ + type: "validator" + }) + ]) + expect(accountId).toBe("biconomy.nexus.1.0.0-beta") + expect(isModuleInstalled).toBe(true) + expect(supportsExecutionMode).toBe(true) + expect(supportsModule).toBe(true) + }) + + test("should send eth twice", async () => { + const balanceBefore = await getBalance(testClient, recipientAddress) + const tx = { to: recipientAddress, value: 1n } + const hash = await nexusClient.sendTransaction({ calls: [tx, tx] }) + const { status } = await testClient.waitForTransactionReceipt({ hash }) + const balanceAfter = await getBalance(testClient, recipientAddress) + expect(status).toBe("success") + expect(balanceAfter - balanceBefore).toBe(2n) + }) + + // Not working + test.skip("should uninstall modules", async () => { + const result = await nexusClient.uninstallModules({ + modules: [ + { + type: "validator", + address: addresses.K1Validator, + context: "0x" + } + ] + }) + }) +}) diff --git a/src/sdk/clients/createNexusClient.ts b/src/sdk/clients/createNexusClient.ts new file mode 100644 index 000000000..c6637f1f2 --- /dev/null +++ b/src/sdk/clients/createNexusClient.ts @@ -0,0 +1,226 @@ +import type { + Address, + Chain, + Client, + ClientConfig, + EstimateFeesPerGasReturnType, + Prettify, + PublicClient, + RpcSchema, + Transport +} from "viem" +import type { + BundlerActions, + BundlerClientConfig, + PaymasterActions, + SmartAccount, + UserOperationRequest +} from "viem/account-abstraction" +import contracts from "../__contracts" +import type { Call } from "../account/utils/Types" + +import { type NexusAccount, toNexusAccount } from "../account/toNexusAccount" +import type { UnknownHolder } from "../account/utils/toHolder" +import type { BaseExecutionModule } from "../modules/base/BaseExecutionModule" +import type { BaseValidationModule } from "../modules/base/BaseValidationModule" +import { createBicoBundlerClient } from "./createBicoBundlerClient" +import { type Erc7579Actions, erc7579Actions } from "./decorators/erc7579" +import { + type SmartAccountActions, + smartAccountActions +} from "./decorators/smartAccount" + +/** + * Parameters for sending a transaction + */ +export type SendTransactionParameters = { + calls: Call | Call[] +} + +/** + * Nexus Client type + */ +export type NexusClient< + transport extends Transport = Transport, + chain extends Chain | undefined = Chain | undefined, + account extends NexusAccount | undefined = NexusAccount | undefined, + client extends Client | undefined = Client | undefined, + rpcSchema extends RpcSchema | undefined = undefined +> = Prettify< + Pick< + ClientConfig<transport, chain, account, rpcSchema>, + "cacheTime" | "chain" | "key" | "name" | "pollingInterval" | "rpcSchema" + > & + BundlerActions<NexusAccount> & + Erc7579Actions<NexusAccount> & + SmartAccountActions<chain, NexusAccount> & { + /** + * The Nexus account associated with this client + */ + account: NexusAccount + /** + * Optional client for additional functionality + */ + client?: client | Client | undefined + /** + * Transport configuration for the bundler + */ + bundlerTransport?: BundlerClientConfig["transport"] + /** + * Optional paymaster configuration + */ + paymaster?: BundlerClientConfig["paymaster"] | undefined + /** + * Optional paymaster context + */ + paymasterContext?: BundlerClientConfig["paymasterContext"] | undefined + /** + * Optional user operation configuration + */ + userOperation?: BundlerClientConfig["userOperation"] | undefined + } +> + +/** + * Configuration for creating a Nexus Client + */ +export type NexusClientConfig< + transport extends Transport = Transport, + chain extends Chain | undefined = Chain | undefined, + account extends SmartAccount | undefined = SmartAccount | undefined, + client extends Client | undefined = Client | undefined, + rpcSchema extends RpcSchema | undefined = undefined +> = Prettify< + Pick< + ClientConfig<transport, chain, account, rpcSchema>, + | "account" + | "cacheTime" + | "chain" + | "key" + | "name" + | "pollingInterval" + | "rpcSchema" + > & { + /** RPC URL. */ + transport: transport + /** Bundler URL. */ + bundlerTransport: transport + /** Client that points to an Execution RPC URL. */ + client?: client | Client | undefined + /** Paymaster configuration. */ + paymaster?: + | true + | { + /** Retrieves paymaster-related User Operation properties to be used for sending the User Operation. */ + getPaymasterData?: PaymasterActions["getPaymasterData"] | undefined + /** Retrieves paymaster-related User Operation properties to be used for gas estimation. */ + getPaymasterStubData?: + | PaymasterActions["getPaymasterStubData"] + | undefined + } + | undefined + /** Paymaster context to pass to `getPaymasterData` and `getPaymasterStubData` calls. */ + paymasterContext?: unknown + /** User Operation configuration. */ + userOperation?: + | { + /** Prepares fee properties for the User Operation request. */ + estimateFeesPerGas?: + | ((parameters: { + account: account | SmartAccount + bundlerClient: Client + userOperation: UserOperationRequest + }) => Promise<EstimateFeesPerGasReturnType<"eip1559">>) + | undefined + } + | undefined + /** Owner of the account. */ + holder: UnknownHolder + /** Index of the account. */ + index?: bigint + /** Active module of the account. */ + activeModule?: BaseValidationModule + /** Executor module of the account. */ + executorModule?: BaseExecutionModule + /** Factory address of the account. */ + factoryAddress?: Address + /** Owner module */ + k1ValidatorAddress?: Address + } +> + +/** + * Creates a Nexus Client for interacting with the Nexus smart account system. + * + * @param parameters - {@link NexusClientConfig} + * @returns Nexus Client. {@link NexusClient} + * + * @example + * import { createNexusClient } from '@biconomy/sdk' + * import { http } from 'viem' + * import { mainnet } from 'viem/chains' + * + * const nexusClient = await createNexusClient({ + * chain: mainnet, + * transport: http('https://mainnet.infura.io/v3/YOUR-PROJECT-ID'), + * bundlerTransport: http('https://api.biconomy.io'), + * holder: '0x...', + * }) + */ +export async function createNexusClient( + parameters: NexusClientConfig +): Promise<NexusClient> { + const { + client: client_, + chain = parameters.chain ?? client_?.chain, + holder, + index = 0n, + key = "nexus client", + name = "Nexus Client", + activeModule, + factoryAddress = contracts.k1ValidatorFactory.address, + k1ValidatorAddress = contracts.k1Validator.address, + bundlerTransport, + paymaster, + transport, + paymasterContext, + userOperation = { + estimateFeesPerGas: async (parameters) => { + const feeData = await ( + parameters?.account?.client as PublicClient + )?.estimateFeesPerGas?.() + return { + maxFeePerGas: feeData.maxFeePerGas * 2n, + maxPriorityFeePerGas: feeData.maxPriorityFeePerGas * 2n + } + } + } + } = parameters + + if (!chain) throw new Error("Missing chain") + + const nexusAccount = await toNexusAccount({ + transport, + chain, + holder, + index, + activeModule, + factoryAddress, + k1ValidatorAddress + }) + + const bundler = createBicoBundlerClient({ + ...parameters, + key, + name, + account: nexusAccount, + paymaster, + paymasterContext, + transport: bundlerTransport, + userOperation + }) + .extend(erc7579Actions()) + .extend(smartAccountActions()) + + return bundler as unknown as NexusClient +} diff --git a/src/sdk/clients/decorators/erc7579/accountId.ts b/src/sdk/clients/decorators/erc7579/accountId.ts new file mode 100644 index 000000000..7068e9600 --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/accountId.ts @@ -0,0 +1,108 @@ +import { + type Chain, + type Client, + ContractFunctionExecutionError, + type Transport, + decodeFunctionResult, + encodeFunctionData +} from "viem" +import type { + GetSmartAccountParameter, + SmartAccount +} from "viem/account-abstraction" +import { call, readContract } from "viem/actions" +import { getAction } from "viem/utils" +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" + +/** + * Retrieves the account ID for a given smart account. + * + * @param client - The client instance. + * @param args - Optional parameters for getting the smart account. + * @returns The account ID as a string. + * @throws {AccountNotFoundError} If the account is not found. + * @throws {Error} If the accountId result is empty. + * + * @example + * import { accountId } from '@biconomy/sdk' + * + * const id = await accountId(nexusClient) + * console.log(id) // 'example_account_id' + */ +export async function accountId<TSmartAccount extends SmartAccount | undefined>( + client: Client<Transport, Chain | undefined, TSmartAccount>, + args?: GetSmartAccountParameter<TSmartAccount> +): Promise<string> { + let account_ = client.account + + if (args) { + account_ = args.account as TSmartAccount + } + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = account_ as SmartAccount + + const publicClient = account.client + + const abi = [ + { + name: "accountId", + type: "function", + stateMutability: "view", + inputs: [], + outputs: [ + { + type: "string", + name: "accountImplementationId" + } + ] + } + ] as const + + try { + return await getAction( + publicClient, + readContract, + "readContract" + )({ + abi, + functionName: "accountId", + address: await account.getAddress() + }) + } catch (error) { + if (error instanceof ContractFunctionExecutionError) { + const { factory, factoryData } = await account.getFactoryArgs() + + const result = await getAction( + publicClient, + call, + "call" + )({ + factory: factory, + factoryData: factoryData, + to: account.address, + data: encodeFunctionData({ + abi, + functionName: "accountId" + }) + }) + + if (!result || !result.data) { + throw new Error("accountId result is empty") + } + + return decodeFunctionResult({ + abi, + functionName: "accountId", + data: result.data + }) + } + + throw error + } +} diff --git a/src/sdk/clients/decorators/erc7579/erc7579.decorators.test.ts b/src/sdk/clients/decorators/erc7579/erc7579.decorators.test.ts new file mode 100644 index 000000000..e8d5c7cc5 --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/erc7579.decorators.test.ts @@ -0,0 +1,116 @@ +import { textSpanOverlapsWith } from "typescript" +import { http, type Account, type Address, type Chain, isHex } from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { toNetwork } from "../../../../test/testSetup" +import { + type MasterClient, + type NetworkConfig, + fundAndDeployClients, + getTestAccount, + killNetwork, + toTestClient +} from "../../../../test/testUtils" +import contracts from "../../../__contracts" +import { type NexusClient, createNexusClient } from "../../createNexusClient" + +describe("erc7579.decorators", async () => { + let network: NetworkConfig + let chain: Chain + let bundlerUrl: string + + // Test utils + let testClient: MasterClient + let account: Account + let nexusClient: NexusClient + let nexusAccountAddress: Address + let recipient: Account + let recipientAddress: Address + + beforeAll(async () => { + network = await toNetwork() + + chain = network.chain + bundlerUrl = network.bundlerUrl + account = getTestAccount(0) + recipient = getTestAccount(1) + recipientAddress = recipient.address + testClient = toTestClient(chain, getTestAccount(5)) + + nexusClient = await createNexusClient({ + holder: account, + chain, + transport: http(), + bundlerTransport: http(bundlerUrl) + }) + + nexusAccountAddress = await nexusClient.account.getCounterFactualAddress() + await fundAndDeployClients(testClient, [nexusClient]) + }) + + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test.concurrent("should test read methods", async () => { + const [ + installedValidators, + installedExecutors, + activeHook, + fallbackSelector, + supportsValidator, + supportsDelegateCall, + isK1ValidatorInstalled + ] = await Promise.all([ + nexusClient.getInstalledValidators({}), + nexusClient.getInstalledExecutors({}), + nexusClient.getActiveHook({}), + nexusClient.getFallbackBySelector({ selector: "0xcb5baf0f" }), + nexusClient.supportsModule({ type: "validator" }), + nexusClient.supportsExecutionMode({ type: "delegatecall" }), + nexusClient.isModuleInstalled({ + module: { + type: "validator", + address: contracts.k1Validator.address, + context: "0x" + } + }) + ]) + + expect(installedExecutors[0].length).toBeTypeOf("number") + expect(installedValidators[0]).toEqual([contracts.k1Validator.address]) + expect(isHex(activeHook)).toBe(true) + expect(fallbackSelector.length).toBeTypeOf("number") + expect(supportsValidator).toBe(true) + expect(supportsDelegateCall).toBe(true) + expect(isK1ValidatorInstalled).toBe(true) + }) + + test.skip("should uninstall a module", async () => { + const gas = await testClient.estimateFeesPerGas() + + const hash = await nexusClient.uninstallModule({ + ...gas, + module: { + type: "validator", + address: contracts.k1Validator.address, + context: "0x" + } + }) + + const { success } = await nexusClient.waitForUserOperationReceipt({ hash }) + expect(success).toBe(true) + }) + + test.skip("should install a module", async () => { + const hash = await nexusClient.installModule({ + module: { + type: "validator", + address: contracts.k1Validator.address, + context: "0x" + } + }) + + const { success } = await nexusClient.waitForUserOperationReceipt({ hash }) + expect(success).toBe(true) + }) +}) diff --git a/src/sdk/clients/decorators/erc7579/getActiveHook.ts b/src/sdk/clients/decorators/erc7579/getActiveHook.ts new file mode 100644 index 000000000..d13a27871 --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/getActiveHook.ts @@ -0,0 +1,69 @@ +import type { Chain, Client, Hex, Transport } from "viem" +import type { + GetSmartAccountParameter, + SmartAccount +} from "viem/account-abstraction" +import { readContract } from "viem/actions" +import { getAction, parseAccount } from "viem/utils" +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" + +export type GetActiveHookParameters< + TSmartAccount extends SmartAccount | undefined +> = GetSmartAccountParameter<TSmartAccount> + +/** + * Retrieves the active hook for a given smart account. + * + * @param client - The client instance. + * @param parameters - Parameters for getting the smart account. + * @returns The address of the active hook as a hexadecimal string. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { getActiveHook } from '@biconomy/sdk' + * + * const activeHook = await getActiveHook(nexusClient) + * console.log(activeHook) // '0x...' + */ +export async function getActiveHook< + TSmartAccount extends SmartAccount | undefined +>( + client: Client<Transport, Chain | undefined, TSmartAccount>, + parameters: GetActiveHookParameters<TSmartAccount> +): Promise<Hex> { + const { account: account_ = client.account } = parameters + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = parseAccount(account_) as SmartAccount + + const publicClient = account.client + + return getAction( + publicClient, + readContract, + "readContract" + )({ + address: account.address, + abi: [ + { + inputs: [], + name: "getActiveHook", + outputs: [ + { + internalType: "address", + name: "hook", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } + ], + functionName: "getActiveHook" + }) as Promise<Hex> +} diff --git a/src/sdk/clients/decorators/erc7579/getFallbackBySelector.ts b/src/sdk/clients/decorators/erc7579/getFallbackBySelector.ts new file mode 100644 index 000000000..22b925aef --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/getFallbackBySelector.ts @@ -0,0 +1,90 @@ +import type { Chain, Client, Hex, Transport } from "viem" +import type { + GetSmartAccountParameter, + SmartAccount +} from "viem/account-abstraction" +import { readContract } from "viem/actions" +import { getAction, parseAccount } from "viem/utils" +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" +import { GENERIC_FALLBACK_SELECTOR } from "../../../account/utils/Constants" + +export type GetFallbackBySelectorParameters< + TSmartAccount extends SmartAccount | undefined +> = GetSmartAccountParameter<TSmartAccount> & + Partial<{ + selector?: Hex + }> + +/** + * Retrieves the fallback handler for a given selector in a smart account. + * + * @param client - The client instance. + * @param parameters - Parameters including the smart account and optional selector. + * @returns A tuple containing the call type and address of the fallback handler. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { getFallbackBySelector } from '@biconomy/sdk' + * + * const [callType, handlerAddress] = await getFallbackBySelector(nexusClient, { + * selector: '0x12345678' + * }) + * console.log(callType, handlerAddress) // '0x1' '0x...' + */ +export async function getFallbackBySelector< + TSmartAccount extends SmartAccount | undefined +>( + client: Client<Transport, Chain | undefined, TSmartAccount>, + parameters: GetFallbackBySelectorParameters<TSmartAccount> +): Promise<[Hex, Hex]> { + const { + account: account_ = client.account, + selector = GENERIC_FALLBACK_SELECTOR + } = parameters + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = parseAccount(account_) as SmartAccount + + const publicClient = account.client + + return getAction( + publicClient, + readContract, + "readContract" + )({ + address: account.address, + abi: [ + { + inputs: [ + { + internalType: "bytes4", + name: "selector", + type: "bytes4" + } + ], + name: "getFallbackHandlerBySelector", + outputs: [ + { + internalType: "CallType", + name: "", + type: "bytes1" + }, + { + internalType: "address", + name: "", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } + ], + functionName: "getFallbackHandlerBySelector", + args: [selector] + }) as Promise<[Hex, Hex]> +} diff --git a/src/sdk/clients/decorators/erc7579/getInstalledExecutors.ts b/src/sdk/clients/decorators/erc7579/getInstalledExecutors.ts new file mode 100644 index 000000000..9c4adaca3 --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/getInstalledExecutors.ts @@ -0,0 +1,96 @@ +import type { Chain, Client, Hex, Transport } from "viem" +import type { + GetSmartAccountParameter, + SmartAccount +} from "viem/account-abstraction" +import { readContract } from "viem/actions" +import { getAction, parseAccount } from "viem/utils" +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" +import { SENTINEL_ADDRESS } from "../../../account/utils/Constants" + +export type GetInstalledExecutorsParameters< + TSmartAccount extends SmartAccount | undefined +> = GetSmartAccountParameter<TSmartAccount> & { + pageSize?: bigint + cursor?: Hex +} + +/** + * Retrieves the installed executors for a given smart account. + * + * @param client - The client instance. + * @param parameters - Parameters including the smart account, page size, and cursor. + * @returns A tuple containing an array of executor addresses and the next cursor. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { getInstalledExecutors } from '@biconomy/sdk' + * + * const [executors, nextCursor] = await getInstalledExecutors(nexusClient, { + * pageSize: 10n + * }) + * console.log(executors, nextCursor) // ['0x...', '0x...'], '0x...' + */ +export async function getInstalledExecutors< + TSmartAccount extends SmartAccount | undefined +>( + client: Client<Transport, Chain | undefined, TSmartAccount>, + parameters: GetInstalledExecutorsParameters<TSmartAccount> +): Promise<readonly [readonly Hex[], Hex]> { + const { + account: account_ = client.account, + pageSize = 100n, + cursor = SENTINEL_ADDRESS + } = parameters + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = parseAccount(account_) as SmartAccount + + const publicClient = account.client + + return getAction( + publicClient, + readContract, + "readContract" + )({ + address: account.address, + abi: [ + { + inputs: [ + { + internalType: "address", + name: "cursor", + type: "address" + }, + { + internalType: "uint256", + name: "size", + type: "uint256" + } + ], + name: "getExecutorsPaginated", + outputs: [ + { + internalType: "address[]", + name: "array", + type: "address[]" + }, + { + internalType: "address", + name: "next", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } + ], + functionName: "getExecutorsPaginated", + args: [cursor, pageSize] + }) as Promise<readonly [readonly Hex[], Hex]> +} diff --git a/src/sdk/clients/decorators/erc7579/getInstalledValidators.ts b/src/sdk/clients/decorators/erc7579/getInstalledValidators.ts new file mode 100644 index 000000000..960165782 --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/getInstalledValidators.ts @@ -0,0 +1,96 @@ +import type { Chain, Client, Hex, Transport } from "viem" +import type { + GetSmartAccountParameter, + SmartAccount +} from "viem/account-abstraction" +import { readContract } from "viem/actions" +import { getAction, parseAccount } from "viem/utils" +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" +import { SENTINEL_ADDRESS } from "../../../account/utils/Constants" + +export type GetInstalledValidatorsParameters< + TSmartAccount extends SmartAccount | undefined +> = GetSmartAccountParameter<TSmartAccount> & { + pageSize?: bigint + cursor?: Hex +} + +/** + * Retrieves the installed validators for a given smart account. + * + * @param client - The client instance. + * @param parameters - Parameters including the smart account, page size, and cursor. + * @returns A tuple containing an array of validator addresses and the next cursor. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { getInstalledValidators } from '@biconomy/sdk' + * + * const [validators, nextCursor] = await getInstalledValidators(nexusClient, { + * pageSize: 10n + * }) + * console.log(validators, nextCursor) // ['0x...', '0x...'], '0x...' + */ +export async function getInstalledValidators< + TSmartAccount extends SmartAccount | undefined +>( + client: Client<Transport, Chain | undefined, TSmartAccount>, + parameters: GetInstalledValidatorsParameters<TSmartAccount> +): Promise<readonly [readonly Hex[], Hex]> { + const { + account: account_ = client.account, + pageSize = 100n, + cursor = SENTINEL_ADDRESS + } = parameters + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = parseAccount(account_) as SmartAccount + + const publicClient = account.client + + return getAction( + publicClient, + readContract, + "readContract" + )({ + address: account.address, + abi: [ + { + inputs: [ + { + internalType: "address", + name: "cursor", + type: "address" + }, + { + internalType: "uint256", + name: "size", + type: "uint256" + } + ], + name: "getValidatorsPaginated", + outputs: [ + { + internalType: "address[]", + name: "array", + type: "address[]" + }, + { + internalType: "address", + name: "next", + type: "address" + } + ], + stateMutability: "view", + type: "function" + } + ], + functionName: "getValidatorsPaginated", + args: [cursor, pageSize] + }) as Promise<readonly [readonly Hex[], Hex]> +} diff --git a/src/sdk/clients/decorators/erc7579/index.ts b/src/sdk/clients/decorators/erc7579/index.ts new file mode 100644 index 000000000..a0e79cd96 --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/index.ts @@ -0,0 +1,148 @@ +import type { Address, Chain, Client, Hash, Hex, Transport } from "viem" +import type { + GetSmartAccountParameter, + SmartAccount +} from "viem/account-abstraction" +import type { ModuleType, SafeHookType } from "../../../modules/utils/Types.js" +import { accountId } from "./accountId.js" +import { type GetActiveHookParameters, getActiveHook } from "./getActiveHook.js" +import { + type GetFallbackBySelectorParameters, + getFallbackBySelector +} from "./getFallbackBySelector.js" +import { + type GetInstalledExecutorsParameters, + getInstalledExecutors +} from "./getInstalledExecutors.js" +import { + type GetInstalledValidatorsParameters, + getInstalledValidators +} from "./getInstalledValidators.js" +import { type InstallModuleParameters, installModule } from "./installModule.js" +import { + type InstallModulesParameters, + installModules +} from "./installModules.js" +import { + type IsModuleInstalledParameters, + isModuleInstalled +} from "./isModuleInstalled.js" +import { + type SupportsExecutionModeParameters, + supportsExecutionMode +} from "./supportsExecutionMode.js" +import type { CallType, ExecutionMode } from "./supportsExecutionMode.js" +import { + type SupportsModuleParameters, + supportsModule +} from "./supportsModule.js" +import { + type UninstallModuleParameters, + uninstallModule +} from "./uninstallModule.js" +import { + type UninstallModulesParameters, + uninstallModules +} from "./uninstallModules.js" + +export type Erc7579Actions<TSmartAccount extends SmartAccount | undefined> = { + accountId: (args?: GetSmartAccountParameter<TSmartAccount>) => Promise<string> + installModule: (args: InstallModuleParameters<TSmartAccount>) => Promise<Hash> + installModules: ( + args: InstallModulesParameters<TSmartAccount> + ) => Promise<Hash> + isModuleInstalled: ( + args: IsModuleInstalledParameters<TSmartAccount> + ) => Promise<boolean> + supportsExecutionMode: ( + args: SupportsExecutionModeParameters<TSmartAccount> + ) => Promise<boolean> + supportsModule: ( + args: SupportsModuleParameters<TSmartAccount> + ) => Promise<boolean> + uninstallModule: ( + args: UninstallModuleParameters<TSmartAccount> + ) => Promise<Hash> + uninstallModules: ( + args: UninstallModulesParameters<TSmartAccount> + ) => Promise<Hash> + getInstalledValidators: ( + args: GetInstalledValidatorsParameters<TSmartAccount> + ) => Promise<readonly [readonly Hex[], Hex]> + getInstalledExecutors: ( + args: GetInstalledExecutorsParameters<TSmartAccount> + ) => Promise<readonly [readonly Hex[], Hex]> + getActiveHook: (args: GetActiveHookParameters<TSmartAccount>) => Promise<Hex> + getFallbackBySelector: ( + args: GetFallbackBySelectorParameters<TSmartAccount> + ) => Promise<[Hex, Hex]> +} + +export type { + InstallModuleParameters, + IsModuleInstalledParameters, + CallType, + ExecutionMode, + SupportsExecutionModeParameters, + ModuleType, + SupportsModuleParameters, + UninstallModuleParameters, + GetInstalledValidatorsParameters, + GetInstalledExecutorsParameters, + GetActiveHookParameters +} + +export { + accountId, + installModule, + installModules, + isModuleInstalled, + supportsExecutionMode, + supportsModule, + uninstallModule, + uninstallModules, + getInstalledValidators, + getInstalledExecutors, + getActiveHook, + getFallbackBySelector +} + +export function erc7579Actions() { + return <TSmartAccount extends SmartAccount | undefined>( + client: Client<Transport, Chain | undefined, TSmartAccount> + ): Erc7579Actions<TSmartAccount> => ({ + accountId: (args) => accountId(client, args), + installModule: (args) => installModule(client, args), + installModules: (args) => installModules(client, args), + isModuleInstalled: (args) => isModuleInstalled(client, args), + supportsExecutionMode: (args) => supportsExecutionMode(client, args), + supportsModule: (args) => supportsModule(client, args), + uninstallModule: (args) => uninstallModule(client, args), + uninstallModules: (args) => uninstallModules(client, args), + getInstalledValidators: (args) => getInstalledValidators(client, args), + getInstalledExecutors: (args) => getInstalledExecutors(client, args), + getActiveHook: (args) => getActiveHook(client, args), + getFallbackBySelector: (args) => getFallbackBySelector(client, args) + }) +} + +export type Module = { + address: Address + context: Hex + additionalContext?: Hex + type: ModuleType + + /* ---- kernel module params ---- */ + // these param needed for installing validator, executor, fallback handler + hook?: Address + /* ---- end kernel module params ---- */ + + /* ---- safe module params ---- */ + // these two params needed for installing hooks + hookType?: SafeHookType + selector?: Hex + + // these two params needed for installing fallback handlers + functionSig?: Hex + callType?: CallType +} diff --git a/src/sdk/clients/decorators/erc7579/installModule.ts b/src/sdk/clients/decorators/erc7579/installModule.ts new file mode 100644 index 000000000..f5eb21548 --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/installModule.ts @@ -0,0 +1,105 @@ +import { type Client, type Hex, encodeFunctionData, getAddress } from "viem" +import { + type GetSmartAccountParameter, + type SmartAccount, + sendUserOperation +} from "viem/account-abstraction" +import { getAction, parseAccount } from "viem/utils" +import type { Module } from "." +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" +import { parseModuleTypeId } from "./supportsModule" + +export type InstallModuleParameters< + TSmartAccount extends SmartAccount | undefined +> = GetSmartAccountParameter<TSmartAccount> & { + module: Module + maxFeePerGas?: bigint + maxPriorityFeePerGas?: bigint + nonce?: bigint +} + +/** + * Installs a module on a given smart account. + * + * @param client - The client instance. + * @param parameters - Parameters including the smart account, module to install, and optional gas settings. + * @returns The hash of the user operation as a hexadecimal string. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { installModule } from '@biconomy/sdk' + * + * const userOpHash = await installModule(nexusClient, { + * module: { + * type: 'executor', + * address: '0x...', + * context: '0x' + * } + * }) + * console.log(userOpHash) // '0x...' + */ +export async function installModule< + TSmartAccount extends SmartAccount | undefined +>( + client: Client, + parameters: InstallModuleParameters<TSmartAccount> +): Promise<Hex> { + const { + account: account_ = client.account, + maxFeePerGas, + maxPriorityFeePerGas, + nonce, + module: { type, address, context } + } = parameters + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = parseAccount(account_) as SmartAccount + + return getAction( + client, + sendUserOperation, + "sendUserOperation" + )({ + calls: [ + { + to: account.address, + value: BigInt(0), + data: encodeFunctionData({ + abi: [ + { + name: "installModule", + type: "function", + stateMutability: "nonpayable", + inputs: [ + { + type: "uint256", + name: "moduleTypeId" + }, + { + type: "address", + name: "module" + }, + { + type: "bytes", + name: "initData" + } + ], + outputs: [] + } + ], + functionName: "installModule", + args: [parseModuleTypeId(type), getAddress(address), context] + }) + } + ], + maxFeePerGas, + maxPriorityFeePerGas, + nonce, + account + }) +} diff --git a/src/sdk/clients/decorators/erc7579/installModules.ts b/src/sdk/clients/decorators/erc7579/installModules.ts new file mode 100644 index 000000000..ac7366b8d --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/installModules.ts @@ -0,0 +1,113 @@ +import { + type Address, + type Chain, + type Client, + type Hex, + type Transport, + encodeFunctionData, + getAddress +} from "viem" +import { + type GetSmartAccountParameter, + type SmartAccount, + sendUserOperation +} from "viem/account-abstraction" +import { getAction, parseAccount } from "viem/utils" +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" +import type { ModuleType } from "../../../modules/utils/Types" +import { parseModuleTypeId } from "./supportsModule" + +export type InstallModulesParameters< + TSmartAccount extends SmartAccount | undefined +> = GetSmartAccountParameter<TSmartAccount> & { + modules: { + type: ModuleType + address: Address + context: Hex + }[] + maxFeePerGas?: bigint + maxPriorityFeePerGas?: bigint + nonce?: bigint +} + +/** + * Installs multiple modules on a given smart account. + * + * @param client - The client instance. + * @param parameters - Parameters including the smart account, modules to install, and optional gas settings. + * @returns The hash of the user operation as a hexadecimal string. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { installModules } from '@biconomy/sdk' + * + * const userOpHash = await installModules(nexusClient, { + * modules: [ + * { type: 'executor', address: '0x...', context: '0x' }, + * { type: 'validator', address: '0x...', context: '0x' } + * ] + * }) + * console.log(userOpHash) // '0x...' + */ +export async function installModules< + TSmartAccount extends SmartAccount | undefined +>( + client: Client<Transport, Chain | undefined, TSmartAccount>, + parameters: InstallModulesParameters<TSmartAccount> +): Promise<Hex> { + const { + account: account_ = client.account, + maxFeePerGas, + maxPriorityFeePerGas, + nonce, + modules + } = parameters + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = parseAccount(account_) as SmartAccount + return getAction( + client, + sendUserOperation, + "sendUserOperation" + )({ + calls: modules.map(({ type, address, context }) => ({ + to: account.address, + value: BigInt(0), + data: encodeFunctionData({ + abi: [ + { + name: "installModule", + type: "function", + stateMutability: "nonpayable", + inputs: [ + { + type: "uint256", + name: "moduleTypeId" + }, + { + type: "address", + name: "module" + }, + { + type: "bytes", + name: "initData" + } + ], + outputs: [] + } + ], + functionName: "installModule", + args: [parseModuleTypeId(type), getAddress(address), context] + }) + })), + maxFeePerGas, + maxPriorityFeePerGas, + nonce, + account: account + }) +} diff --git a/src/sdk/clients/decorators/erc7579/isModuleInstalled.ts b/src/sdk/clients/decorators/erc7579/isModuleInstalled.ts new file mode 100644 index 000000000..a135bb9bb --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/isModuleInstalled.ts @@ -0,0 +1,138 @@ +import { + type Chain, + type Client, + ContractFunctionExecutionError, + type Transport, + decodeFunctionResult, + encodeFunctionData, + getAddress +} from "viem" +import type { + GetSmartAccountParameter, + SmartAccount +} from "viem/account-abstraction" +import { call, readContract } from "viem/actions" +import { getAction, parseAccount } from "viem/utils" +import type { Module } from "." +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" +import { parseModuleTypeId } from "./supportsModule" + +export type IsModuleInstalledParameters< + TSmartAccount extends SmartAccount | undefined +> = GetSmartAccountParameter<TSmartAccount> & { + module: Module +} + +/** + * Checks if a specific module is installed on a given smart account. + * + * @param client - The client instance. + * @param parameters - Parameters including the smart account and the module to check. + * @returns A boolean indicating whether the module is installed. + * @throws {AccountNotFoundError} If the account is not found. + * @throws {Error} If the accountId result is empty. + * + * @example + * import { isModuleInstalled } from '@biconomy/sdk' + * + * const isInstalled = await isModuleInstalled(nexusClient, { + * module: { + * type: 'executor', + * address: '0x...', + * context: '0x' + * } + * }) + * console.log(isInstalled) // true or false + */ +export async function isModuleInstalled< + TSmartAccount extends SmartAccount | undefined +>( + client: Client<Transport, Chain | undefined, TSmartAccount>, + parameters: IsModuleInstalledParameters<TSmartAccount> +): Promise<boolean> { + const { + account: account_ = client.account, + module: { address, context, type } + } = parameters + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = parseAccount(account_) as SmartAccount + + const publicClient = account.client + + const abi = [ + { + name: "isModuleInstalled", + type: "function", + stateMutability: "view", + inputs: [ + { + type: "uint256", + name: "moduleTypeId" + }, + { + type: "address", + name: "module" + }, + { + type: "bytes", + name: "additionalContext" + } + ], + outputs: [ + { + type: "bool" + } + ] + } + ] as const + + try { + return (await getAction( + publicClient, + readContract, + "readContract" + )({ + abi, + functionName: "isModuleInstalled", + args: [parseModuleTypeId(type), getAddress(address), context], + address: account.address + })) as unknown as Promise<boolean> + } catch (error) { + if (error instanceof ContractFunctionExecutionError) { + const { factory, factoryData } = await account.getFactoryArgs() + + const result = await getAction( + publicClient, + call, + "call" + )({ + factory: factory, + factoryData: factoryData, + to: account.address, + data: encodeFunctionData({ + abi, + functionName: "isModuleInstalled", + args: [parseModuleTypeId(type), getAddress(address), context] + }) + }) + + if (!result || !result.data) { + throw new Error("accountId result is empty") + } + + return decodeFunctionResult({ + abi, + functionName: "isModuleInstalled", + data: result.data + }) as unknown as Promise<boolean> + } + + throw error + } +} diff --git a/src/sdk/clients/decorators/erc7579/supportsExecutionMode.ts b/src/sdk/clients/decorators/erc7579/supportsExecutionMode.ts new file mode 100644 index 000000000..23c788b85 --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/supportsExecutionMode.ts @@ -0,0 +1,183 @@ +import { + type Chain, + type Client, + ContractFunctionExecutionError, + type Hex, + type Transport, + decodeFunctionResult, + encodeFunctionData, + encodePacked, + toBytes, + toHex +} from "viem" +import type { + GetSmartAccountParameter, + SmartAccount +} from "viem/account-abstraction" +import { call, readContract } from "viem/actions" +import { getAction } from "viem/utils" +import { parseAccount } from "viem/utils" +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" + +export type CallType = "call" | "delegatecall" | "batchcall" + +export type ExecutionMode<callType extends CallType> = { + type: callType + revertOnError?: boolean + selector?: Hex + context?: Hex +} + +export type SupportsExecutionModeParameters< + TSmartAccount extends SmartAccount | undefined, + callType extends CallType = CallType +> = GetSmartAccountParameter<TSmartAccount> & ExecutionMode<callType> + +function parseCallType(callType: CallType) { + switch (callType) { + case "call": + return "0x00" + case "batchcall": + return "0x01" + case "delegatecall": + return "0xff" + } +} + +/** + * Encodes the execution mode for a smart account operation. + * + * @param mode - The execution mode parameters. + * @returns The encoded execution mode as a hexadecimal string. + */ +export function encodeExecutionMode<callType extends CallType>({ + type, + revertOnError, + selector, + context +}: ExecutionMode<callType>): Hex { + return encodePacked( + ["bytes1", "bytes1", "bytes4", "bytes4", "bytes22"], + [ + toHex(toBytes(parseCallType(type), { size: 1 })), + toHex(toBytes(revertOnError ? "0x01" : "0x00", { size: 1 })), + toHex(toBytes("0x0", { size: 4 })), + toHex(toBytes(selector ?? "0x", { size: 4 })), + toHex(toBytes(context ?? "0x", { size: 22 })) + ] + ) +} + +/** + * Checks if a smart account supports a specific execution mode. + * + * @param client - The client instance. + * @param args - Parameters including the smart account and execution mode details. + * @returns A boolean indicating whether the execution mode is supported. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { supportsExecutionMode } from '@biconomy/sdk' + * + * const isSupported = await supportsExecutionMode(nexusClient, { + * type: 'call', + * revertOnError: true, + * selector: '0x12345678' + * }) + * console.log(isSupported) // true or false + */ +export async function supportsExecutionMode< + TSmartAccount extends SmartAccount | undefined, + callType extends CallType = CallType +>( + client: Client<Transport, Chain | undefined, TSmartAccount>, + args: SupportsExecutionModeParameters<TSmartAccount, callType> +): Promise<boolean> { + const { + account: account_ = client.account, + type, + revertOnError, + selector, + context + } = args + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = parseAccount(account_) as SmartAccount + + const publicClient = account.client + + const encodedMode = encodeExecutionMode({ + type, + revertOnError, + selector, + context + }) + + const abi = [ + { + name: "supportsExecutionMode", + type: "function", + stateMutability: "view", + inputs: [ + { + type: "bytes32", + name: "encodedMode" + } + ], + outputs: [ + { + type: "bool" + } + ] + } + ] as const + + try { + return await getAction( + publicClient, + readContract, + "readContract" + )({ + abi, + functionName: "supportsExecutionMode", + args: [encodedMode], + address: account.address + }) + } catch (error) { + if (error instanceof ContractFunctionExecutionError) { + const { factory, factoryData } = await account.getFactoryArgs() + + const result = await getAction( + publicClient, + call, + "call" + )({ + factory: factory, + factoryData: factoryData, + to: account.address, + data: encodeFunctionData({ + abi, + functionName: "supportsExecutionMode", + args: [encodedMode] + }) + }) + + if (!result || !result.data) { + throw new Error("accountId result is empty") + } + + return decodeFunctionResult({ + abi, + functionName: "supportsExecutionMode", + data: result.data + }) + } + + throw error + } +} diff --git a/src/sdk/clients/decorators/erc7579/supportsModule.ts b/src/sdk/clients/decorators/erc7579/supportsModule.ts new file mode 100644 index 000000000..cf7da1cfa --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/supportsModule.ts @@ -0,0 +1,143 @@ +import { + type Chain, + type Client, + ContractFunctionExecutionError, + type Transport, + decodeFunctionResult, + encodeFunctionData +} from "viem" +import type { + GetSmartAccountParameter, + SmartAccount +} from "viem/account-abstraction" +import { call, readContract } from "viem/actions" +import { getAction } from "viem/utils" +import { parseAccount } from "viem/utils" +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" +import type { ModuleType } from "../../../modules/utils/Types" + +export type SupportsModuleParameters< + TSmartAccount extends SmartAccount | undefined +> = GetSmartAccountParameter<TSmartAccount> & { + type: ModuleType +} + +/** + * Parses a module type to its corresponding ID. + * + * @param type - The module type to parse. + * @returns The corresponding bigint ID for the module type. + * @throws {Error} If an invalid module type is provided. + */ +export function parseModuleTypeId(type: ModuleType): bigint { + switch (type) { + case "validator": + return BigInt(1) + case "executor": + return BigInt(2) + case "fallback": + return BigInt(3) + case "hook": + return BigInt(4) + default: + throw new Error("Invalid module type") + } +} + +/** + * Checks if a smart account supports a specific module type. + * + * @param client - The client instance. + * @param args - Parameters including the smart account and module type to check. + * @returns A boolean indicating whether the module type is supported. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { supportsModule } from '@biconomy/sdk' + * + * const isSupported = await supportsModule(nexusClient, { + * type: 'executor' + * }) + * console.log(isSupported) // true or false + */ +export async function supportsModule< + TSmartAccount extends SmartAccount | undefined +>( + client: Client<Transport, Chain | undefined, TSmartAccount>, + args: SupportsModuleParameters<TSmartAccount> +): Promise<boolean> { + const { account: account_ = client.account } = args + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = parseAccount(account_) as SmartAccount + + const publicClient = account.client + + const abi = [ + { + name: "supportsModule", + type: "function", + stateMutability: "view", + inputs: [ + { + type: "uint256", + name: "moduleTypeId" + } + ], + outputs: [ + { + type: "bool" + } + ] + } + ] as const + + try { + return await getAction( + publicClient, + readContract, + "readContract" + )({ + abi, + functionName: "supportsModule", + args: [parseModuleTypeId(args.type)], + address: account.address + }) + } catch (error) { + if (error instanceof ContractFunctionExecutionError) { + const { factory, factoryData } = await account.getFactoryArgs() + + const result = await getAction( + publicClient, + call, + "call" + )({ + factory: factory, + factoryData: factoryData, + to: account.address, + data: encodeFunctionData({ + abi, + functionName: "supportsModule", + args: [parseModuleTypeId(args.type)] + }) + }) + + if (!result || !result.data) { + throw new Error("accountId result is empty") + } + + return decodeFunctionResult({ + abi, + functionName: "supportsModule", + data: result.data + }) + } + + throw error + } +} diff --git a/src/sdk/clients/decorators/erc7579/uninstallFallback.ts b/src/sdk/clients/decorators/erc7579/uninstallFallback.ts new file mode 100644 index 000000000..7a4b6dc37 --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/uninstallFallback.ts @@ -0,0 +1,113 @@ +import { + type Chain, + type Client, + type Hex, + type Transport, + encodeFunctionData, + getAddress +} from "viem" +import { + type GetSmartAccountParameter, + type SmartAccount, + sendUserOperation +} from "viem/account-abstraction" +import { getAction } from "viem/utils" +import { parseAccount } from "viem/utils" +import type { Module } from "." +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" +import { parseModuleTypeId } from "./supportsModule" + +export type UninstallFallbackParameters< + TSmartAccount extends SmartAccount | undefined +> = GetSmartAccountParameter<TSmartAccount> & { + module: Module + maxFeePerGas?: bigint + maxPriorityFeePerGas?: bigint + nonce?: bigint +} + +/** + * Uninstalls a fallback module from a smart account. + * + * @param client - The client instance. + * @param parameters - Parameters including the smart account, module to uninstall, and optional gas settings. + * @returns The hash of the user operation as a hexadecimal string. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { uninstallFallback } from '@biconomy/sdk' + * + * const userOpHash = await uninstallFallback(nexusClient, { + * module: { + * type: 'fallback', + * address: '0x...', + * context: '0x' + * } + * }) + * console.log(userOpHash) // '0x...' + */ +export async function uninstallFallback< + TSmartAccount extends SmartAccount | undefined +>( + client: Client<Transport, Chain | undefined, TSmartAccount>, + parameters: UninstallFallbackParameters<TSmartAccount> +): Promise<Hex> { + const { + account: account_ = client.account, + maxFeePerGas, + maxPriorityFeePerGas, + nonce, + module: { address, context, type } + } = parameters + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = parseAccount(account_) as SmartAccount + + return getAction( + client, + sendUserOperation, + "sendUserOperation" + )({ + calls: [ + { + to: account.address, + value: BigInt(0), + data: encodeFunctionData({ + abi: [ + { + name: "uninstallFallback", + type: "function", + stateMutability: "nonpayable", + inputs: [ + { + type: "uint256", + name: "moduleTypeId" + }, + { + type: "address", + name: "module" + }, + { + type: "bytes", + name: "deInitData" + } + ], + outputs: [] + } + ], + functionName: "uninstallFallback", + args: [parseModuleTypeId(type), getAddress(address), context] + }) + } + ], + maxFeePerGas, + maxPriorityFeePerGas, + nonce, + account: account + }) +} diff --git a/src/sdk/clients/decorators/erc7579/uninstallModule.ts b/src/sdk/clients/decorators/erc7579/uninstallModule.ts new file mode 100644 index 000000000..03f29878f --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/uninstallModule.ts @@ -0,0 +1,113 @@ +import { + type Chain, + type Client, + type Hex, + type Transport, + encodeFunctionData, + getAddress +} from "viem" +import { + type GetSmartAccountParameter, + type SmartAccount, + sendUserOperation +} from "viem/account-abstraction" +import { getAction } from "viem/utils" +import { parseAccount } from "viem/utils" +import type { Module } from "." +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" +import { parseModuleTypeId } from "./supportsModule" + +export type UninstallModuleParameters< + TSmartAccount extends SmartAccount | undefined +> = GetSmartAccountParameter<TSmartAccount> & { + module: Module + maxFeePerGas?: bigint + maxPriorityFeePerGas?: bigint + nonce?: bigint +} + +/** + * Uninstalls a module from a smart account. + * + * @param client - The client instance. + * @param parameters - Parameters including the smart account, module to uninstall, and optional gas settings. + * @returns The hash of the user operation as a hexadecimal string. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { uninstallModule } from '@biconomy/sdk' + * + * const userOpHash = await uninstallModule(nexusClient, { + * module: { + * type: 'executor', + * address: '0x...', + * context: '0x' + * } + * }) + * console.log(userOpHash) // '0x...' + */ +export async function uninstallModule< + TSmartAccount extends SmartAccount | undefined +>( + client: Client<Transport, Chain | undefined, TSmartAccount>, + parameters: UninstallModuleParameters<TSmartAccount> +): Promise<Hex> { + const { + account: account_ = client.account, + maxFeePerGas, + maxPriorityFeePerGas, + nonce, + module: { address, context, type } + } = parameters + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = parseAccount(account_) as SmartAccount + + return getAction( + client, + sendUserOperation, + "sendUserOperation" + )({ + calls: [ + { + to: account.address, + value: BigInt(0), + data: encodeFunctionData({ + abi: [ + { + name: "uninstallModule", + type: "function", + stateMutability: "nonpayable", + inputs: [ + { + type: "uint256", + name: "moduleTypeId" + }, + { + type: "address", + name: "module" + }, + { + type: "bytes", + name: "deInitData" + } + ], + outputs: [] + } + ], + functionName: "uninstallModule", + args: [parseModuleTypeId(type), getAddress(address), context] + }) + } + ], + maxFeePerGas, + maxPriorityFeePerGas, + nonce, + account: account + }) +} diff --git a/src/sdk/clients/decorators/erc7579/uninstallModules.ts b/src/sdk/clients/decorators/erc7579/uninstallModules.ts new file mode 100644 index 000000000..0c28dd4de --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/uninstallModules.ts @@ -0,0 +1,110 @@ +import { + type Chain, + type Client, + type Hex, + type Transport, + encodeFunctionData, + getAddress +} from "viem" +import { + type GetSmartAccountParameter, + type SmartAccount, + sendUserOperation +} from "viem/account-abstraction" +import { getAction } from "viem/utils" +import { parseAccount } from "viem/utils" +import type { Module } from "." +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" +import { parseModuleTypeId } from "./supportsModule" + +export type UninstallModulesParameters< + TSmartAccount extends SmartAccount | undefined +> = GetSmartAccountParameter<TSmartAccount> & { + modules: Module[] + maxFeePerGas?: bigint + maxPriorityFeePerGas?: bigint + nonce?: bigint +} + +/** + * Uninstalls multiple modules from a smart account. + * + * @param client - The client instance. + * @param parameters - Parameters including the smart account, modules to uninstall, and optional gas settings. + * @returns The hash of the user operation as a hexadecimal string. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { uninstallModules } from '@biconomy/sdk' + * + * const userOpHash = await uninstallModules(nexusClient, { + * modules: [ + * { type: 'executor', address: '0x...', context: '0x' }, + * { type: 'validator', address: '0x...', context: '0x' } + * ] + * }) + * console.log(userOpHash) // '0x...' + */ +export async function uninstallModules< + TSmartAccount extends SmartAccount | undefined +>( + client: Client<Transport, Chain | undefined, TSmartAccount>, + parameters: UninstallModulesParameters<TSmartAccount> +): Promise<Hex> { + const { + account: account_ = client.account, + maxFeePerGas, + maxPriorityFeePerGas, + nonce, + modules + } = parameters + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = parseAccount(account_) as SmartAccount + + return getAction( + client, + sendUserOperation, + "sendUserOperation" + )({ + calls: modules.map(({ type, address, context }) => ({ + to: account.address, + value: BigInt(0), + data: encodeFunctionData({ + abi: [ + { + name: "uninstallModule", + type: "function", + stateMutability: "nonpayable", + inputs: [ + { + type: "uint256", + name: "moduleTypeId" + }, + { + type: "address", + name: "module" + }, + { + type: "bytes", + name: "deInitData" + } + ], + outputs: [] + } + ], + functionName: "uninstallModule", + args: [parseModuleTypeId(type), getAddress(address), context] + }) + })), + maxFeePerGas, + maxPriorityFeePerGas, + nonce, + account + }) +} diff --git a/src/sdk/clients/decorators/smartAccount/account.decorators.test.ts b/src/sdk/clients/decorators/smartAccount/account.decorators.test.ts new file mode 100644 index 000000000..7dfa9c8d8 --- /dev/null +++ b/src/sdk/clients/decorators/smartAccount/account.decorators.test.ts @@ -0,0 +1,139 @@ +import { http, type Account, type Address, type Chain, isHex } from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { CounterAbi } from "../../../../test/__contracts/abi" +import { mockAddresses } from "../../../../test/__contracts/mockAddresses" +import { toNetwork } from "../../../../test/testSetup" +import { + type MasterClient, + type NetworkConfig, + fundAndDeployClients, + getBalance, + getTestAccount, + killNetwork, + toTestClient +} from "../../../../test/testUtils" +import { type NexusClient, createNexusClient } from "../../createNexusClient" + +describe("account.decorators", async () => { + let network: NetworkConfig + let chain: Chain + let bundlerUrl: string + + // Test utils + let testClient: MasterClient + let account: Account + let nexusClient: NexusClient + let nexusAccountAddress: Address + let recipient: Account + let recipientAddress: Address + + beforeAll(async () => { + network = await toNetwork() + + chain = network.chain + bundlerUrl = network.bundlerUrl + account = getTestAccount(0) + recipient = getTestAccount(1) + recipientAddress = recipient.address + testClient = toTestClient(chain, getTestAccount(5)) + + nexusClient = await createNexusClient({ + holder: account, + chain, + transport: http(), + bundlerTransport: http(bundlerUrl) + }) + + nexusAccountAddress = await nexusClient.account.getCounterFactualAddress() + await fundAndDeployClients(testClient, [nexusClient]) + }) + + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test.concurrent("should sign a message", async () => { + const signedMessage = await nexusClient.signMessage({ message: "hello" }) + + expect(signedMessage).toEqual( + "0x6854688d3d9a87a33addd5f4deb5cea1b97fa5b7f16ea9a3478698f695fd1401bfe27e9e4a7e8e3da94aa72b021125e31fa899cc573c48ea3fe1d4ab61a9db10c19032026e3ed2dbccba5a178235ac27f94504311c" + ) + }) + + test.concurrent("should currently fail to sign with typed data", async () => { + expect( + nexusClient.signTypedData({ + domain: { + name: "Ether Mail", + version: "1", + chainId: 1, + verifyingContract: "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + types: { + Person: [ + { name: "name", type: "string" }, + { name: "wallet", type: "address" } + ], + Mail: [ + { name: "from", type: "Person" }, + { name: "to", type: "Person" }, + { name: "contents", type: "string" } + ] + }, + primaryType: "Mail", + message: { + from: { + name: "Cow", + wallet: "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + to: { + name: "Bob", + wallet: "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + contents: "Hello, Bob!" + } + }) + ).rejects.toThrow() + }) + + test("should send a user operation using sendTransaction", async () => { + const balanceBefore = await getBalance(testClient, recipientAddress) + const hash = await nexusClient.sendTransaction({ + calls: [ + { + to: recipientAddress, + value: 1n + } + ] + }) + const { status } = await testClient.waitForTransactionReceipt({ hash }) + const balanceAfter = await getBalance(testClient, recipientAddress) + expect(status).toBe("success") + expect(balanceAfter - balanceBefore).toBe(1n) + }) + + test("should write to a contract", async () => { + const counterValueBefore = await testClient.readContract({ + abi: CounterAbi, + functionName: "getNumber", + address: mockAddresses.Counter + }) + + expect(counterValueBefore).toBe(0n) + const hash = await nexusClient.writeContract({ + abi: CounterAbi, + functionName: "incrementNumber", + address: mockAddresses.Counter, + chain + }) + const { status } = await testClient.waitForTransactionReceipt({ hash }) + const counterValueAfter = await testClient.readContract({ + abi: CounterAbi, + functionName: "getNumber", + address: mockAddresses.Counter + }) + + expect(status).toBe("success") + expect(counterValueAfter).toBe(1n) + }) +}) diff --git a/src/sdk/clients/decorators/smartAccount/index.ts b/src/sdk/clients/decorators/smartAccount/index.ts new file mode 100644 index 000000000..d0bbb611d --- /dev/null +++ b/src/sdk/clients/decorators/smartAccount/index.ts @@ -0,0 +1,324 @@ +import type { + Abi, + Chain, + Client, + ContractFunctionArgs, + ContractFunctionName, + Hash, + SendTransactionParameters, + Transport, + TypedData, + WriteContractParameters +} from "viem" +import type { SmartAccount } from "viem/account-abstraction" +import { sendTransaction } from "./sendTransaction" +import { signMessage } from "./signMessage" +import { signTypedData } from "./signTypedData" +import { writeContract } from "./writeContract" + +export type SmartAccountActions< + TChain extends Chain | undefined = Chain | undefined, + TSmartAccount extends SmartAccount | undefined = SmartAccount | undefined +> = { + /** + * Creates, signs, and sends a new transaction to the network. + * This function also allows you to sponsor this transaction if sender is a smartAccount + * + * - Docs: https://viem.sh/docs/actions/wallet/sendTransaction.html + * - Examples: https://stackblitz.com/github/wagmi-dev/viem/tree/main/examples/transactions/sending-transactions + * - JSON-RPC Methods: + * - JSON-RPC Accounts: [`eth_sendTransaction`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sendtransaction) + * - Local Accounts: [`eth_sendRawTransaction`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sendrawtransaction) + * + * @param args - {@link SendTransactionParameters} + * @returns The [Transaction](https://viem.sh/docs/glossary/terms.html#transaction) hash. {@link SendTransactionReturnType} + * + * @example + * import { createWalletClient, custom } from 'viem' + * import { mainnet } from 'viem/chains' + * + * const client = createWalletClient({ + * chain: mainnet, + * transport: custom(window.ethereum), + * }) + * const hash = await client.sendTransaction({ + * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e', + * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8', + * value: 1000000000000000000n, + * }) + * + * @example + * // Account Hoisting + * import { createWalletClient, http } from 'viem' + * import { privateKeyToAccount } from 'viem/accounts' + * import { mainnet } from 'viem/chains' + * + * const client = createWalletClient({ + * account: privateKeyToAccount('0x…'), + * chain: mainnet, + * transport: http(), + * }) + * const hash = await client.sendTransaction({ + * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8', + * value: 1000000000000000000n, + * }) + */ + sendTransaction: < + TChainOverride extends Chain | undefined = undefined, + accountOverride extends SmartAccount | undefined = undefined, + calls extends readonly unknown[] = readonly unknown[] + >( + args: Parameters< + typeof sendTransaction< + TSmartAccount, + TChain, + accountOverride, + TChainOverride, + calls + > + >[1] + ) => Promise<Hash> + /** + * Calculates an Ethereum-specific signature in [EIP-191 format](https://eips.ethereum.org/EIPS/eip-191): `keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))`. + * + * - Docs: https://viem.sh/docs/actions/wallet/signMessage.html + * - JSON-RPC Methods: + * - JSON-RPC Accounts: [`personal_sign`](https://docs.metamask.io/guide/signing-data.html#personal-sign) + * - Local Accounts: Signs locally. No JSON-RPC request. + * + * With the calculated signature, you can: + * - use [`verifyMessage`](https://viem.sh/docs/utilities/verifyMessage.html) to verify the signature, + * - use [`recoverMessageAddress`](https://viem.sh/docs/utilities/recoverMessageAddress.html) to recover the signing address from a signature. + * + * @param args - {@link SignMessageParameters} + * @returns The signed message. {@link SignMessageReturnType} + * + * @example + * import { createWalletClient, custom } from 'viem' + * import { mainnet } from 'viem/chains' + * + * const client = createWalletClient({ + * chain: mainnet, + * transport: custom(window.ethereum), + * }) + * const signature = await client.signMessage({ + * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e', + * message: 'hello world', + * }) + * + * @example + * // Account Hoisting + * import { createWalletClient, http } from 'viem' + * import { privateKeyToAccount } from 'viem/accounts' + * import { mainnet } from 'viem/chains' + * + * const client = createWalletClient({ + * account: privateKeyToAccount('0x…'), + * chain: mainnet, + * transport: http(), + * }) + * const signature = await client.signMessage({ + * message: 'hello world', + * }) + */ + signMessage: ( + args: Parameters<typeof signMessage<TSmartAccount>>[1] + ) => ReturnType<typeof signMessage<TSmartAccount>> + /** + * Signs typed data and calculates an Ethereum-specific signature in [EIP-191 format](https://eips.ethereum.org/EIPS/eip-191): `keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))`. + * + * - Docs: https://viem.sh/docs/actions/wallet/signTypedData.html + * - JSON-RPC Methods: + * - JSON-RPC Accounts: [`eth_signTypedData_v4`](https://docs.metamask.io/guide/signing-data.html#signtypeddata-v4) + * - Local Accounts: Signs locally. No JSON-RPC request. + * + * @param client - Client to use + * @param args - {@link SignTypedDataParameters} + * @returns The signed data. {@link SignTypedDataReturnType} + * + * @example + * import { createWalletClient, custom } from 'viem' + * import { mainnet } from 'viem/chains' + * + * const client = createWalletClient({ + * chain: mainnet, + * transport: custom(window.ethereum), + * }) + * const signature = await client.signTypedData({ + * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e', + * domain: { + * name: 'Ether Mail', + * version: '1', + * chainId: 1, + * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + * }, + * types: { + * Person: [ + * { name: 'name', type: 'string' }, + * { name: 'wallet', type: 'address' }, + * ], + * Mail: [ + * { name: 'from', type: 'Person' }, + * { name: 'to', type: 'Person' }, + * { name: 'contents', type: 'string' }, + * ], + * }, + * primaryType: 'Mail', + * message: { + * from: { + * name: 'Cow', + * wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + * }, + * to: { + * name: 'Bob', + * wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + * }, + * contents: 'Hello, Bob!', + * }, + * }) + * + * @example + * // Account Hoisting + * import { createWalletClient, http } from 'viem' + * import { privateKeyToAccount } from 'viem/accounts' + * import { mainnet } from 'viem/chains' + * + * const client = createWalletClient({ + * account: privateKeyToAccount('0x…'), + * chain: mainnet, + * transport: http(), + * }) + * const signature = await client.signTypedData({ + * domain: { + * name: 'Ether Mail', + * version: '1', + * chainId: 1, + * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + * }, + * types: { + * Person: [ + * { name: 'name', type: 'string' }, + * { name: 'wallet', type: 'address' }, + * ], + * Mail: [ + * { name: 'from', type: 'Person' }, + * { name: 'to', type: 'Person' }, + * { name: 'contents', type: 'string' }, + * ], + * }, + * primaryType: 'Mail', + * message: { + * from: { + * name: 'Cow', + * wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + * }, + * to: { + * name: 'Bob', + * wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + * }, + * contents: 'Hello, Bob!', + * }, + * }) + */ + signTypedData: < + const TTypedData extends TypedData | { [key: string]: unknown }, + TPrimaryType extends string + >( + args: Parameters< + typeof signTypedData<TTypedData, TPrimaryType, TSmartAccount> + >[1] + ) => ReturnType<typeof signTypedData<TTypedData, TPrimaryType, TSmartAccount>> + /** + * Executes a write function on a contract. + * This function also allows you to sponsor this transaction if sender is a smartAccount + * + * - Docs: https://viem.sh/docs/contract/writeContract.html + * - Examples: https://stackblitz.com/github/wagmi-dev/viem/tree/main/examples/contracts/writing-to-contracts + * + * A "write" function on a Solidity contract modifies the state of the blockchain. These types of functions require gas to be executed, and hence a [Transaction](https://viem.sh/docs/glossary/terms.html) is needed to be broadcast in order to change the state. + * + * Internally, uses a [Wallet Client](https://viem.sh/docs/clients/wallet.html) to call the [`sendTransaction` action](https://viem.sh/docs/actions/wallet/sendTransaction.html) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData.html). + * + * __Warning: The `write` internally sends a transaction – it does not validate if the contract write will succeed (the contract may throw an error). It is highly recommended to [simulate the contract write with `contract.simulate`](https://viem.sh/docs/contract/writeContract.html#usage) before you execute it.__ + * + * @param args - {@link WriteContractParameters} + * @returns A [Transaction Hash](https://viem.sh/docs/glossary/terms.html#hash). {@link WriteContractReturnType} + * + * @example + * import { createWalletClient, custom, parseAbi } from 'viem' + * import { mainnet } from 'viem/chains' + * + * const client = createWalletClient({ + * chain: mainnet, + * transport: custom(window.ethereum), + * }) + * const hash = await client.writeContract({ + * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2', + * abi: parseAbi(['function mint(uint32 tokenId) nonpayable']), + * functionName: 'mint', + * args: [69420], + * }) + * + * @example + * // With Validation + * import { createWalletClient, custom, parseAbi } from 'viem' + * import { mainnet } from 'viem/chains' + * + * const client = createWalletClient({ + * chain: mainnet, + * transport: custom(window.ethereum), + * }) + * const { request } = await client.simulateContract({ + * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2', + * abi: parseAbi(['function mint(uint32 tokenId) nonpayable']), + * functionName: 'mint', + * args: [69420], + * } + * const hash = await client.writeContract(request) + */ + writeContract: < + const TAbi extends Abi | readonly unknown[], + TFunctionName extends ContractFunctionName< + TAbi, + "nonpayable" | "payable" + > = ContractFunctionName<TAbi, "nonpayable" | "payable">, + TArgs extends ContractFunctionArgs< + TAbi, + "nonpayable" | "payable", + TFunctionName + > = ContractFunctionArgs<TAbi, "nonpayable" | "payable", TFunctionName>, + TChainOverride extends Chain | undefined = undefined + >( + args: WriteContractParameters< + TAbi, + TFunctionName, + TArgs, + TChain, + TSmartAccount, + TChainOverride + > + ) => ReturnType< + typeof writeContract< + TChain, + TSmartAccount, + TAbi, + TFunctionName, + TArgs, + TChainOverride + > + > +} + +export function smartAccountActions() { + return < + TChain extends Chain | undefined = Chain | undefined, + TSmartAccount extends SmartAccount | undefined = SmartAccount | undefined + >( + client: Client<Transport, TChain, TSmartAccount> + ): SmartAccountActions<TChain, TSmartAccount> => ({ + sendTransaction: (args) => sendTransaction(client, args as any), + signMessage: (args) => signMessage(client, args), + signTypedData: (args) => signTypedData(client, args), + writeContract: (args) => writeContract(client, args) + }) +} diff --git a/src/sdk/clients/decorators/smartAccount/sendTransaction.ts b/src/sdk/clients/decorators/smartAccount/sendTransaction.ts new file mode 100644 index 000000000..c282896dc --- /dev/null +++ b/src/sdk/clients/decorators/smartAccount/sendTransaction.ts @@ -0,0 +1,105 @@ +import type { + Chain, + Client, + Hash, + SendTransactionParameters, + Transport +} from "viem" +import { + type SendUserOperationParameters, + type SmartAccount, + sendUserOperation, + waitForUserOperationReceipt +} from "viem/account-abstraction" +import { getAction, parseAccount } from "viem/utils" +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" + +/** + * Creates, signs, and sends a new transaction to the network using a smart account. + * This function also allows you to sponsor this transaction if the sender is a smart account. + * + * @param client - The client instance. + * @param args - Parameters for sending the transaction or user operation. + * @returns The transaction hash as a hexadecimal string. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { sendTransaction } from '@biconomy/sdk' + * + * const hash = await sendTransaction(nexusClient, { + * to: '0x...', + * value: parseEther('0.1'), + * data: '0x...' + * }) + * console.log(hash) // '0x...' + */ +export async function sendTransaction< + account extends SmartAccount | undefined, + chain extends Chain | undefined, + accountOverride extends SmartAccount | undefined = undefined, + chainOverride extends Chain | undefined = Chain | undefined, + calls extends readonly unknown[] = readonly unknown[] +>( + client: Client<Transport, chain, account>, + args: + | SendTransactionParameters<chain, account, chainOverride> + | SendUserOperationParameters<account, accountOverride, calls> +): Promise<Hash> { + let userOpHash: Hash + + if ("to" in args) { + const { + account: account_ = client.account, + data, + maxFeePerGas, + maxPriorityFeePerGas, + to, + value, + nonce + } = args + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + const account = parseAccount(account_) as SmartAccount + + if (!to) throw new Error("Missing to address") + + userOpHash = await getAction( + client, + sendUserOperation, + "sendUserOperation" + )({ + calls: [ + { + to, + value: value || BigInt(0), + data: data || "0x" + } + ], + account, + maxFeePerGas, + maxPriorityFeePerGas, + nonce: nonce ? BigInt(nonce) : undefined + }) + } else { + userOpHash = await getAction( + client, + sendUserOperation, + "sendUserOperation" + )({ ...args } as SendUserOperationParameters<account, accountOverride>) + } + + const userOperationReceipt = await getAction( + client, + waitForUserOperationReceipt, + "waitForUserOperationReceipt" + )({ + hash: userOpHash + }) + + return userOperationReceipt?.receipt.transactionHash +} diff --git a/src/sdk/clients/decorators/smartAccount/signMessage.ts b/src/sdk/clients/decorators/smartAccount/signMessage.ts new file mode 100644 index 000000000..bf5ebb556 --- /dev/null +++ b/src/sdk/clients/decorators/smartAccount/signMessage.ts @@ -0,0 +1,46 @@ +import type { + Chain, + Client, + SignMessageParameters, + SignMessageReturnType, + Transport +} from "viem" +import type { SmartAccount } from "viem/account-abstraction" +import { parseAccount } from "viem/utils" +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" + +/** + * Signs a message using the smart account. + * + * This function calculates an Ethereum-specific signature in [EIP-191 format](https://eips.ethereum.org/EIPS/eip-191): + * `keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))`. + * + * @param client - The client instance. + * @param parameters - Parameters for signing the message. + * @returns The signature as a hexadecimal string. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { signMessage } from '@biconomy/sdk' + * + * const signature = await signMessage(nexusClient, { + * message: 'Hello, Biconomy!' + * }) + * console.log(signature) // '0x...' + */ +export async function signMessage<TAccount extends SmartAccount | undefined>( + client: Client<Transport, Chain | undefined, TAccount>, + { + account: account_ = client.account, + message + }: SignMessageParameters<TAccount> +): Promise<SignMessageReturnType> { + if (!account_) + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/signMessage" + }) + + const account = parseAccount(account_) as SmartAccount + + return account.signMessage({ message }) +} diff --git a/src/sdk/clients/decorators/smartAccount/signTypedData.ts b/src/sdk/clients/decorators/smartAccount/signTypedData.ts new file mode 100644 index 000000000..b4db03271 --- /dev/null +++ b/src/sdk/clients/decorators/smartAccount/signTypedData.ts @@ -0,0 +1,113 @@ +import { + type Chain, + type Client, + type SignTypedDataParameters, + type SignTypedDataReturnType, + type Transport, + type TypedData, + type TypedDataDefinition, + type TypedDataDomain, + getTypesForEIP712Domain, + validateTypedData +} from "viem" +import type { SmartAccount } from "viem/account-abstraction" +import { parseAccount } from "viem/utils" +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" + +/** + * Signs typed data using the smart account. + * + * This function calculates an Ethereum-specific signature in [EIP-712 format](https://eips.ethereum.org/EIPS/eip-712): + * `sign(keccak256("\x19\x01" ‖ domainSeparator ‖ hashStruct(message)))` + * + * @param client - The client instance. + * @param parameters - Parameters for signing the typed data. + * @returns The signature as a hexadecimal string. + * @throws {AccountNotFoundError} If the account is not found. + * + * @example + * import { signTypedData } from '@biconomy/sdk' + * import { keccak256, encodeAbiParameters, parseAbiParameters } from 'viem' + * + * const domain = { + * name: 'Ether Mail', + * version: '1', + * chainId: 1, + * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC' + * } + * + * const types = { + * Person: [ + * { name: 'name', type: 'string' }, + * { name: 'wallet', type: 'address' } + * ], + * Mail: [ + * { name: 'from', type: 'Person' }, + * { name: 'to', type: 'Person' }, + * { name: 'contents', type: 'string' } + * ] + * } + * + * const message = { + * from: { + * name: 'Cow', + * wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826' + * }, + * to: { + * name: 'Bob', + * wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB' + * }, + * contents: 'Hello, Bob!' + * } + * + * const signature = await signTypedData(nexusClient, { + * domain, + * types, + * primaryType: 'Mail', + * message + * }) + * console.log(signature) // '0x...' + */ +export async function signTypedData< + const TTypedData extends TypedData | { [key: string]: unknown }, + TPrimaryType extends string, + TAccount extends SmartAccount | undefined = SmartAccount | undefined +>( + client: Client<Transport, Chain | undefined, TAccount>, + { + account: account_ = client.account, + domain, + message, + primaryType, + types: types_ + }: SignTypedDataParameters<TTypedData, TPrimaryType, TAccount> +): Promise<SignTypedDataReturnType> { + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/signMessage" + }) + } + + const account = parseAccount(account_) as SmartAccount + + const types = { + EIP712Domain: getTypesForEIP712Domain({ domain } as { + domain: TypedDataDomain + }), + ...(types_ as TTypedData) + } + + validateTypedData({ + domain, + message, + primaryType, + types + } as TypedDataDefinition) + + return account.signTypedData({ + domain, + primaryType, + types, + message + } as TypedDataDefinition) +} diff --git a/src/sdk/clients/decorators/smartAccount/writeContract.ts b/src/sdk/clients/decorators/smartAccount/writeContract.ts new file mode 100644 index 000000000..10470875b --- /dev/null +++ b/src/sdk/clients/decorators/smartAccount/writeContract.ts @@ -0,0 +1,93 @@ +import { + type Abi, + type Chain, + type Client, + type ContractFunctionArgs, + type ContractFunctionName, + type EncodeFunctionDataParameters, + type Hash, + type SendTransactionParameters, + type Transport, + type WriteContractParameters, + encodeFunctionData +} from "viem" +import type { SmartAccount } from "viem/account-abstraction" +import { getAction } from "viem/utils" +import { sendTransaction } from "./sendTransaction" + +/** + * Executes a write operation on a smart contract using a smart account. + * + * @param client - The client instance. + * @param parameters - Parameters for the contract write operation. + * @returns The transaction hash as a hexadecimal string. + * @throws {Error} If the 'to' address is missing in the request. + * + * @example + * import { writeContract } from '@biconomy/sdk' + * import { encodeFunctionData } from 'viem' + * + * const encodedCall = encodeFunctionData({ + * abi: CounterAbi, + * functionName: "incrementNumber" + * }) + * const call = { + * to: '0x61f70428b61864B38D9B45b7B032c700B960acCD', + * data: encodedCall + * } + * const hash = await writeContract(nexusClient, call) + * console.log(hash) // '0x...' + */ +export async function writeContract< + TChain extends Chain | undefined, + TAccount extends SmartAccount | undefined, + const TAbi extends Abi | readonly unknown[], + TFunctionName extends ContractFunctionName< + TAbi, + "nonpayable" | "payable" + > = ContractFunctionName<TAbi, "nonpayable" | "payable">, + TArgs extends ContractFunctionArgs< + TAbi, + "nonpayable" | "payable", + TFunctionName + > = ContractFunctionArgs<TAbi, "nonpayable" | "payable", TFunctionName>, + TChainOverride extends Chain | undefined = undefined +>( + client: Client<Transport, TChain, TAccount>, + { + abi, + address, + args, + dataSuffix, + functionName, + ...request + }: WriteContractParameters< + TAbi, + TFunctionName, + TArgs, + TChain, + TAccount, + TChainOverride + > +): Promise<Hash> { + const data = encodeFunctionData<TAbi, TFunctionName>({ + abi, + args, + functionName + } as EncodeFunctionDataParameters<TAbi, TFunctionName>) + + const hash = await getAction( + client, + sendTransaction<TAccount, undefined, undefined>, + "sendTransaction" + )({ + data: `${data}${dataSuffix ? dataSuffix.replace("0x", "") : ""}`, + to: address, + ...request + } as unknown as SendTransactionParameters< + Chain | undefined, + TAccount, + undefined + >) + return hash +} diff --git a/src/sdk/clients/index.ts b/src/sdk/clients/index.ts new file mode 100644 index 000000000..46973e1a4 --- /dev/null +++ b/src/sdk/clients/index.ts @@ -0,0 +1,5 @@ +export * from "./createBicoBundlerClient" +export * from "./createBicoPaymasterClient" +export * from "./createNexusClient" +export * from "./decorators/erc7579" +export * from "./decorators/smartAccount" diff --git a/src/index.ts b/src/sdk/index.ts similarity index 65% rename from src/index.ts rename to src/sdk/index.ts index 903f1f5b4..e5e14f2cb 100644 --- a/src/index.ts +++ b/src/sdk/index.ts @@ -1,3 +1,3 @@ export * from "./account" -export * from "./paymaster" export * from "./modules" +export * from "./clients" diff --git a/src/modules/base/BaseExecutionModule.ts b/src/sdk/modules/base/BaseExecutionModule.ts similarity index 54% rename from src/modules/base/BaseExecutionModule.ts rename to src/sdk/modules/base/BaseExecutionModule.ts index f63140753..678a7aa01 100644 --- a/src/modules/base/BaseExecutionModule.ts +++ b/src/sdk/modules/base/BaseExecutionModule.ts @@ -1,11 +1,10 @@ -import type { Address } from "viem" -import type { UserOpReceipt } from "../../bundler/index.js" -import { BaseModule } from "../base/BaseModule.js" +import type { Address, Hash } from "viem" import type { Execution } from "../utils/Types.js" +import { BaseModule } from "./BaseModule.js" export abstract class BaseExecutionModule extends BaseModule { abstract execute( execution: Execution | Execution[], ownedAccountAddress?: Address - ): Promise<UserOpReceipt> + ): Promise<Hash> } diff --git a/src/modules/base/BaseModule.ts b/src/sdk/modules/base/BaseModule.ts similarity index 86% rename from src/modules/base/BaseModule.ts rename to src/sdk/modules/base/BaseModule.ts index 20eb272fc..7b6e9d216 100644 --- a/src/modules/base/BaseModule.ts +++ b/src/sdk/modules/base/BaseModule.ts @@ -1,30 +1,30 @@ import { type Address, type Hex, encodeFunctionData, parseAbi } from "viem" import contracts from "../../__contracts/index.js" -import type { SmartAccountSigner } from "../../account/index.js" +import type { Holder } from "../../account/utils/toHolder.js" +import type { Module } from "../../clients/decorators/erc7579/index.js" import { - type Module, type ModuleType, type ModuleVersion, moduleTypeIds } from "../utils/Types.js" export abstract class BaseModule { - moduleAddress: Address - data: Hex + address: Address + context: Hex additionalContext: Hex type: ModuleType hook?: Address version: ModuleVersion = "1.0.0-beta" entryPoint: Address = contracts.entryPoint.address - signer: SmartAccountSigner + holder: Holder - constructor(module: Module, signer: SmartAccountSigner) { - this.moduleAddress = module.moduleAddress - this.data = module.data ?? "0x" + constructor(module: Module, holder: Holder) { + this.address = module.address + this.context = module.context ?? "0x" this.additionalContext = module.additionalContext ?? "0x" this.hook = module.hook this.type = module.type - this.signer = signer + this.holder = holder } public installModule(): Hex { @@ -35,8 +35,8 @@ export abstract class BaseModule { functionName: "installModule", args: [ BigInt(moduleTypeIds[this.type]), - this.moduleAddress, - this.data ?? "0x" + this.address, + this.context ?? "0x" ] }) @@ -51,7 +51,7 @@ export abstract class BaseModule { functionName: "uninstallModule", args: [ BigInt(moduleTypeIds[this.type]), - this.moduleAddress, + this.address, uninstallData ?? "0x" ] }) @@ -93,7 +93,7 @@ export abstract class BaseModule { } public getAddress(): Hex { - return this.moduleAddress + return this.address } public getVersion(): string { diff --git a/src/modules/base/BaseValidationModule.ts b/src/sdk/modules/base/BaseValidationModule.ts similarity index 78% rename from src/modules/base/BaseValidationModule.ts rename to src/sdk/modules/base/BaseValidationModule.ts index 67f5af00d..6bc74508d 100644 --- a/src/modules/base/BaseValidationModule.ts +++ b/src/sdk/modules/base/BaseValidationModule.ts @@ -1,10 +1,10 @@ import { type Hex, getAddress } from "viem" -import type { SmartAccountSigner } from "../../account/index.js" -import { BaseModule } from "../base/BaseModule.js" +import type { Holder } from "../../account/utils/toHolder.js" +import { BaseModule } from "./BaseModule.js" export abstract class BaseValidationModule extends BaseModule { - public getSigner(): SmartAccountSigner { - return this.signer + public getHolder(): Holder { + return this.holder } getDummySignature(): Hex { @@ -19,16 +19,18 @@ export abstract class BaseValidationModule extends BaseModule { } async signUserOpHash(userOpHash: string): Promise<Hex> { - const signature = await this.signer.signMessage({ raw: userOpHash as Hex }) + const signature = await this.holder.signMessage({ + message: { raw: userOpHash as Hex } + }) return signature as Hex } - async signMessageSmartAccountSigner( + async signMessageHolder( _message: string | Uint8Array, - signer: SmartAccountSigner + holder: Holder ): Promise<string> { const message = typeof _message === "string" ? _message : { raw: _message } - let signature: `0x${string}` = await signer.signMessage(message) + let signature: `0x${string}` = await holder.signMessage({ message }) const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) if (![27, 28].includes(potentiallyIncorrectV)) { @@ -40,15 +42,15 @@ export abstract class BaseValidationModule extends BaseModule { } /** - * Signs a message using the appropriate method based on the type of signer. + * Signs a message using the appropriate method based on the type of holder. * * @param {Uint8Array | string} message - The message to be signed. * @returns {Promise<string>} A promise resolving to the signature or error message. - * @throws {Error} If the signer type is invalid or unsupported. + * @throws {Error} If the holder type is invalid or unsupported. */ async signMessage(_message: Uint8Array | string): Promise<Hex> { const message = typeof _message === "string" ? _message : { raw: _message } - let signature = await this.signer.signMessage(message) + let signature = await this.holder.signMessage({ message }) const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) if (![27, 28].includes(potentiallyIncorrectV)) { diff --git a/src/modules/executors/OwnableExecutor.ts b/src/sdk/modules/executors/OwnableExecutor.ts similarity index 64% rename from src/modules/executors/OwnableExecutor.ts rename to src/sdk/modules/executors/OwnableExecutor.ts index 76be22bb8..fd9b94d9e 100644 --- a/src/modules/executors/OwnableExecutor.ts +++ b/src/sdk/modules/executors/OwnableExecutor.ts @@ -1,67 +1,80 @@ import { + type Account, type Address, + type Chain, + type Hash, type Hex, + type PublicClient, + type Transport, + type WalletClient, encodeAbiParameters, encodeFunctionData, encodePacked, getAddress, parseAbi } from "viem" -import { SENTINEL_ADDRESS } from "../../account" -import type { NexusSmartAccount } from "../../account/NexusSmartAccount" -import type { UserOpReceipt } from "../../bundler" +import { SENTINEL_ADDRESS } from "../../account/utils/Constants" +import { type Holder, toHolder } from "../../account/utils/toHolder" +import type { NexusClient } from "../../clients/createNexusClient" +import type { Module } from "../../clients/decorators/erc7579" import { BaseExecutionModule } from "../base/BaseExecutionModule" -import type { Execution, Module } from "../utils/Types" - +import type { Execution } from "../utils/Types" export class OwnableExecutorModule extends BaseExecutionModule { - smartAccount!: NexusSmartAccount + public nexusClient: NexusClient public owners: Address[] - private address: Address + public override address: Address public constructor( module: Module, - smartAccount: NexusSmartAccount, + nexusClient: NexusClient, owners: Address[], - address: Address + address: Address, + holder: Holder ) { - super(module, smartAccount.getSigner()) - this.smartAccount = smartAccount + super(module, holder) + this.nexusClient = nexusClient this.owners = owners - this.data = module.data ?? "0x" + this.context = module.context ?? "0x" this.address = address } public static async create( - smartAccount: NexusSmartAccount, + nexusClient: NexusClient, address: Address, - data?: Hex + context?: Hex ): Promise<OwnableExecutorModule> { const module: Module = { - moduleAddress: address, + address: address, type: "executor", - data: data ?? "0x", + context: context ?? "0x", additionalContext: "0x" } - const owners = await smartAccount.publicClient.readContract({ + const owners = await ( + nexusClient.account.client as PublicClient + ).readContract({ address, abi: parseAbi([ "function getOwners(address account) external view returns (address[])" ]), functionName: "getOwners", - args: [await smartAccount.getAddress()] + args: [await nexusClient.account.getAddress()] + }) + const holder = await toHolder({ holder: nexusClient.account.client } as { + holder: WalletClient<Transport, Chain | undefined, Account> }) return new OwnableExecutorModule( module, - smartAccount, + nexusClient, owners as Address[], - address + address, + holder ) } public async execute( execution: Execution | Execution[], accountAddress?: Address - ): Promise<UserOpReceipt> { + ): Promise<Hash> { let calldata: Hex if (Array.isArray(execution)) { calldata = encodeFunctionData({ @@ -70,7 +83,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { "function executeBatchOnOwnedAccount(address ownedAccount, bytes callData)" ]), args: [ - accountAddress ?? (await this.smartAccount.getAddress()), + accountAddress ?? (await this.nexusClient.account.getAddress()), encodeAbiParameters( [ { @@ -103,7 +116,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { "function executeOnOwnedAccount(address ownedAccount, bytes callData)" ]), args: [ - accountAddress ?? (await this.smartAccount.getAddress()), + accountAddress ?? (await this.nexusClient.account.getAddress()), encodePacked( ["address", "uint256", "bytes"], [ @@ -115,34 +128,23 @@ export class OwnableExecutorModule extends BaseExecutionModule { ] }) } - const response = await this.smartAccount.sendTransaction({ - to: this.moduleAddress, - data: calldata, - value: 0n + return this.nexusClient.sendTransaction({ + calls: [{ to: this.address, data: calldata, value: 0n }] }) - const receipt = await response.wait() - return receipt } - public async addOwner(newOwner: Address): Promise<UserOpReceipt> { + public async addOwner(newOwner: Address) { const callData = encodeFunctionData({ functionName: "addOwner", abi: parseAbi(["function addOwner(address owner)"]), args: [newOwner] }) - const response = await this.smartAccount.sendTransaction({ - to: this.moduleAddress, - data: callData, - value: 0n + return this.nexusClient.sendTransaction({ + calls: [{ to: this.address, data: callData, value: 0n }] }) - const receipt = await response.wait() - if (receipt.success) { - this.owners.push(newOwner) - } - return receipt } - public async removeOwner(ownerToRemove: Address): Promise<UserOpReceipt> { + public async removeOwner(ownerToRemove: Address) { const owners = await this.getOwners(this.address) let prevOwner: Address @@ -165,30 +167,30 @@ export class OwnableExecutorModule extends BaseExecutionModule { args: [prevOwner, ownerToRemove] }) - const response = await this.smartAccount.sendTransaction({ - to: this.moduleAddress, - data: calldata, - value: 0n + return this.nexusClient.sendTransaction({ + calls: [ + { + to: this.address, + data: calldata, + value: 0n + } + ] }) - - const receipt = await response.wait() - if (receipt.success) { - this.owners = this.owners.filter((o: Address) => o !== ownerToRemove) - } - return receipt } public async getOwners( moduleAddress: Address, accountAddress?: Address ): Promise<Address[]> { - const owners = await this.smartAccount.publicClient.readContract({ + const owners = await ( + this.nexusClient.account.client as PublicClient + ).readContract({ address: moduleAddress, abi: parseAbi([ "function getOwners(address account) external view returns (address[])" ]), functionName: "getOwners", - args: [accountAddress ?? (await this.smartAccount.getAddress())] + args: [accountAddress ?? (await this.nexusClient.account.getAddress())] }) return owners as Address[] diff --git a/src/modules/index.ts b/src/sdk/modules/index.ts similarity index 100% rename from src/modules/index.ts rename to src/sdk/modules/index.ts diff --git a/src/modules/interfaces/IExecutorModule.ts b/src/sdk/modules/interfaces/IExecutorModule.ts similarity index 100% rename from src/modules/interfaces/IExecutorModule.ts rename to src/sdk/modules/interfaces/IExecutorModule.ts diff --git a/src/modules/interfaces/IValidationModule.ts b/src/sdk/modules/interfaces/IValidationModule.ts similarity index 73% rename from src/modules/interfaces/IValidationModule.ts rename to src/sdk/modules/interfaces/IValidationModule.ts index a6bedc379..1ab6b5c67 100644 --- a/src/modules/interfaces/IValidationModule.ts +++ b/src/sdk/modules/interfaces/IValidationModule.ts @@ -1,10 +1,10 @@ import type { Hex } from "viem" -import type { SmartAccountSigner } from "../../account" +import type { Holder } from "../../account/utils/toHolder" export interface IValidationModule { getAddress(): Hex getInitData(): Promise<Hex> - getSigner(): Promise<SmartAccountSigner> + getHolder(): Promise<Holder> signUserOpHash(_userOpHash: string): Promise<Hex> signMessage(_message: string | Uint8Array): Promise<string> getDummySignature(): Promise<Hex> diff --git a/tests/smart.sessions.test.ts b/src/sdk/modules/smart.sessions.test.ts similarity index 62% rename from tests/smart.sessions.test.ts rename to src/sdk/modules/smart.sessions.test.ts index 5c7308c3c..de07b3101 100644 --- a/tests/smart.sessions.test.ts +++ b/src/sdk/modules/smart.sessions.test.ts @@ -1,100 +1,63 @@ -import { - http, - type Account, - type Chain, - type Hex, - type WalletClient, - createWalletClient, - pad, - toBytes, - toHex -} from "viem" +import { http, type Account, type Address, type Chain, pad, toHex } from "viem" import { afterAll, beforeAll, describe, expect, test } from "vitest" -import { parseReferenceValue } from "../src" -import { - type NexusSmartAccount, - createSmartAccountClient -} from "../src/account" -import policies, { - ParamCondition, - type ActionConfig -} from "../src/modules/smartSessions" -import { TEST_CONTRACTS } from "./src/callDatas" -import { type TestFileNetworkType, toNetwork } from "./src/testSetup" +import { parseReferenceValue } from ".." +import { TEST_CONTRACTS } from "../../test/callDatas" +import { toNetwork } from "../../test/testSetup" import { + fundAndDeployClients, getTestAccount, killNetwork, - toTestClient, - topUp -} from "./src/testUtils" -import type { MasterClient, NetworkConfig } from "./src/testUtils" -const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" + toTestClient +} from "../../test/testUtils" +import type { MasterClient, NetworkConfig } from "../../test/testUtils" +import { + type NexusClient, + createNexusClient +} from "../clients/createNexusClient" +import policies, { ParamCondition } from "./smartSessions" -describe("smart.sessions", () => { +describe("smart.sessions", async () => { let network: NetworkConfig - // Nexus Config let chain: Chain let bundlerUrl: string - let walletClient: WalletClient // Test utils let testClient: MasterClient let account: Account - let recipientAccount: Account - let smartAccount: NexusSmartAccount - let smartAccountAddress: Hex + let nexusClient: NexusClient + let nexusAccountAddress: Address + let recipient: Account + let recipientAddress: Address beforeAll(async () => { - network = (await toNetwork(NETWORK_TYPE)) as NetworkConfig + network = await toNetwork() chain = network.chain bundlerUrl = network.bundlerUrl - account = getTestAccount(0) - recipientAccount = getTestAccount(3) + recipient = getTestAccount(1) + recipientAddress = recipient.address + testClient = toTestClient(chain, getTestAccount(5)) - walletClient = createWalletClient({ - account, + nexusClient = await createNexusClient({ + holder: account, chain, - transport: http() - }) - - testClient = toTestClient(chain, getTestAccount(0)) - - smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - chain + transport: http(), + bundlerTransport: http(bundlerUrl) }) - smartAccountAddress = await smartAccount.getAddress() + nexusAccountAddress = await nexusClient.account.getCounterFactualAddress() + await fundAndDeployClients(testClient, [nexusClient]) }) + afterAll(async () => { await killNetwork([network?.rpcPort, network?.bundlerPort]) }) - test("should fund the smart account", async () => { - await topUp(testClient, smartAccountAddress) - const [balance] = await smartAccount.getBalances() - expect(balance.amount > 0) - }) - - test("should have account addresses", async () => { - const addresses = await Promise.all([ - account.address, - smartAccount.getAddress() - ]) - expect(addresses.every(Boolean)).toBeTruthy() - expect(addresses).toStrictEqual([ - "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account - ]) - }) - test("should have smart account bytecode", async () => { const bytecodes = await Promise.all( [TEST_CONTRACTS.SmartSession, TEST_CONTRACTS.UniActionPolicy].map( - (address) => testClient.getBytecode(address) + (address) => testClient.getCode(address) ) ) expect(bytecodes.every((bytecode) => !!bytecode?.length)).toBeTruthy() diff --git a/src/modules/smartSessions.ts b/src/sdk/modules/smartSessions.ts similarity index 100% rename from src/modules/smartSessions.ts rename to src/sdk/modules/smartSessions.ts diff --git a/src/modules/utils/Constants.ts b/src/sdk/modules/utils/Constants.ts similarity index 100% rename from src/modules/utils/Constants.ts rename to src/sdk/modules/utils/Constants.ts diff --git a/src/modules/utils/Helper.ts b/src/sdk/modules/utils/Helper.ts similarity index 99% rename from src/modules/utils/Helper.ts rename to src/sdk/modules/utils/Helper.ts index a6250108c..8975e154f 100644 --- a/src/modules/utils/Helper.ts +++ b/src/sdk/modules/utils/Helper.ts @@ -14,7 +14,7 @@ import { ERROR_MESSAGES, type UserOperationStruct, getChain -} from "../../account" +} from "../../account/index.js" import type { ChainInfo, SignerData diff --git a/src/modules/utils/Types.ts b/src/sdk/modules/utils/Types.ts similarity index 63% rename from src/modules/utils/Types.ts rename to src/sdk/modules/utils/Types.ts index ada55804c..ba723048c 100644 --- a/src/modules/utils/Types.ts +++ b/src/sdk/modules/utils/Types.ts @@ -1,11 +1,6 @@ import type { Address, Chain, Hex } from "viem" -import type { - CallType, - SimulationType, - SmartAccountSigner, - SupportedSigner, - UserOperationStruct -} from "../../account" +import type { Holder, UnknownHolder } from "../../account/utils/toHolder" + export type ModuleVersion = "1.0.0-beta" // | 'V1_0_1' export interface BaseValidationModuleConfig { @@ -19,7 +14,7 @@ export interface K1ValidationModuleConfig extends BaseValidationModuleConfig { /** Version of the module */ version?: ModuleVersion /** Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - signer: SupportedSigner + signer: UnknownHolder } export interface K1ValidatorModuleConfigConstructorProps @@ -28,41 +23,8 @@ export interface K1ValidatorModuleConfigConstructorProps moduleAddress?: Hex /** Version of the module */ version?: ModuleVersion - /** Signer: Converted from viemWallet or ethers signer to SmartAccountSigner */ - signer: SmartAccountSigner -} - -// export interface SessionKeyManagerModuleConfig -// extends BaseValidationModuleConfig { -// /** Address of the module */ -// moduleAddress?: Hex -// /** Version of the module */ -// version?: ModuleVersion -// /** SmartAccount address */ -// smartAccountAddress: Hex -// storageType?: StorageType -// sessionStorageClient?: ISessionStorage -// } - -// export interface BatchedSessionRouterModuleConfig -// extends BaseValidationModuleConfig { -// /** Address of the module */ -// moduleAddress?: Hex -// /** Version of the module */ -// version?: ModuleVersion -// /** Session Key Manager module: Could be BaseValidationModule */ -// sessionKeyManagerModule?: SessionKeyManagerModule -// /** Session Key Manager module address */ -// sessionManagerModuleAddress?: Hex -// /** Address of the associated smart account */ -// smartAccountAddress: Hex -// /** Storage type, e.g. local storage */ -// storageType?: StorageType -// } - -export enum StorageType { - LOCAL_STORAGE = 0, - MEMORY_STORAGE = 1 + /** Signer: Converted from viemWallet or ethers signer to Holder */ + holder: Holder } export type SessionDataTuple = [ @@ -78,7 +40,7 @@ export type SessionParams = { /** ID of the session */ sessionID?: string /** Session Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - sessionSigner: SupportedSigner + sessionSigner: UnknownHolder /** The session validation module is a sub-module smart-contract which works with session key manager validation module. It validates the userop calldata against the defined session permissions (session key data) within the contract. */ sessionValidationModule?: Hex /** Additional info if needed to be appended in signature */ @@ -87,7 +49,7 @@ export type SessionParams = { export type StrictSessionParams = { sessionID: string - sessionSigner: SupportedSigner + sessionSigner: UnknownHolder } export type ModuleInfo = { @@ -95,7 +57,7 @@ export type ModuleInfo = { // sessionParams?: SessionParams[] // where SessionParams is below four sessionID?: string /** Session Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - sessionSigner?: SupportedSigner + sessionHolder?: UnknownHolder /** The session validation module is a sub-module smart-contract which works with session key manager validation module. It validates the userop calldata against the defined session permissions (session key data) within the contract. */ sessionValidationModule?: Hex /** Additional info if needed to be appended in signature */ @@ -104,10 +66,7 @@ export type ModuleInfo = { batchSessionParams?: SessionParams[] } -export interface SendUserOpParams extends ModuleInfo { - /** "validation_and_execution" is recommended during development for improved debugging & devEx, but will add some additional latency to calls. "validation" can be used in production ro remove this latency once flows have been tested. */ - simulationType?: SimulationType -} +export interface SendUserOpParams extends ModuleInfo {} export type SignerData = { /** This is not the public as provided by viem, key but address for the given pvKey */ @@ -145,7 +104,7 @@ export interface MultiChainValidationModuleConfig /** Version of the module */ version?: ModuleVersion /** Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - signer: SupportedSigner + signer: UnknownHolder } export interface MultiChainValidationModuleConfigConstructorProps extends BaseValidationModuleConfig { @@ -154,16 +113,7 @@ export interface MultiChainValidationModuleConfigConstructorProps /** Version of the module */ version?: ModuleVersion /** Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - signer: SmartAccountSigner -} - -export type MultiChainUserOpDto = { - /** window end timestamp */ - validUntil?: number - /** window start timestamp */ - validAfter?: number - chainId: number - userOp: Partial<UserOperationStruct> + holder: Holder } export interface BaseSessionKeyData { @@ -203,30 +153,6 @@ export enum SafeHookType { SIG = 1 } -export type Module = { - moduleAddress: Address - data?: Hex - additionalContext?: Hex - type: ModuleType - - /* ---- kernel module params ---- */ - // these param needed for installing validator, executor, fallback handler - hook?: Address - /* ---- end kernel module params ---- */ - - /* ---- safe module params ---- */ - - // these two params needed for installing hooks - hookType?: SafeHookType - selector?: Hex - - // these two params needed for installing fallback handlers - functionSig?: Hex - callType?: CallType - - /* ---- end safe module params ---- */ -} - export type ModuleType = "validator" | "executor" | "fallback" | "hook" type ModuleTypeIds = { diff --git a/src/modules/utils/Uid.ts b/src/sdk/modules/utils/Uid.ts similarity index 100% rename from src/modules/utils/Uid.ts rename to src/sdk/modules/utils/Uid.ts diff --git a/src/sdk/modules/validators/K1ValidatorModule.ts b/src/sdk/modules/validators/K1ValidatorModule.ts new file mode 100644 index 000000000..eb9f7415f --- /dev/null +++ b/src/sdk/modules/validators/K1ValidatorModule.ts @@ -0,0 +1,25 @@ +import addresses from "../../__contracts/addresses.js" +import type { Holder } from "../../account/utils/toHolder.js" +import type { Module } from "../../clients/decorators/erc7579/index.js" +import { BaseValidationModule } from "../base/BaseValidationModule.js" + +export class K1ValidatorModule extends BaseValidationModule { + // biome-ignore lint/complexity/noUselessConstructor: <explanation> + public constructor(moduleConfig: Module, holder: Holder) { + super(moduleConfig, holder) + } + + public static async create( + holder: Holder, + k1ValidatorAddress = addresses.K1Validator + ): Promise<K1ValidatorModule> { + const module: Module = { + address: k1ValidatorAddress, + type: "validator", + context: holder.address, + additionalContext: "0x" + } + const instance = new K1ValidatorModule(module, holder) + return instance + } +} diff --git a/src/modules/validators/OwnableValidator.ts b/src/sdk/modules/validators/OwnableValidator.ts similarity index 100% rename from src/modules/validators/OwnableValidator.ts rename to src/sdk/modules/validators/OwnableValidator.ts diff --git a/src/sdk/modules/validators/ValidationModule.ts b/src/sdk/modules/validators/ValidationModule.ts new file mode 100644 index 000000000..4a57b9ce1 --- /dev/null +++ b/src/sdk/modules/validators/ValidationModule.ts @@ -0,0 +1,25 @@ +import type { Address, Hex } from "viem" +import type { Holder } from "../../account/utils/toHolder.js" +import type { Module } from "../../clients/decorators/erc7579/index.js" +import { BaseValidationModule } from "../base/BaseValidationModule.js" + +export class ValidationModule extends BaseValidationModule { + private constructor(moduleConfig: Module, holder: Holder) { + super(moduleConfig, holder) + } + + public static async create( + holder: Holder, + address: Address, + context: Hex + ): Promise<ValidationModule> { + const module: Module = { + address, + type: "validator", + context, + additionalContext: "0x" + } + const instance = new ValidationModule(module, holder) + return instance + } +} diff --git a/src/sdk/modules/validators/k1Validator.test.ts b/src/sdk/modules/validators/k1Validator.test.ts new file mode 100644 index 000000000..e50d06928 --- /dev/null +++ b/src/sdk/modules/validators/k1Validator.test.ts @@ -0,0 +1,127 @@ +import { http, type Account, type Address, type Chain } from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { toNetwork } from "../../../test/testSetup" +import { + fundAndDeployClients, + getBalance, + getTestAccount, + killNetwork, + toTestClient +} from "../../../test/testUtils" +import type { MasterClient, NetworkConfig } from "../../../test/testUtils" +import addresses from "../../__contracts/addresses" +import { + type NexusClient, + createNexusClient +} from "../../clients/createNexusClient" + +describe("modules.k1Validator.write", async () => { + let network: NetworkConfig + let chain: Chain + let bundlerUrl: string + + // Test utils + let testClient: MasterClient + let account: Account + let nexusClient: NexusClient + let nexusAccountAddress: Address + let recipient: Account + let recipientAddress: Address + + beforeAll(async () => { + network = await toNetwork() + + chain = network.chain + bundlerUrl = network.bundlerUrl + account = getTestAccount(0) + recipient = getTestAccount(1) + recipientAddress = recipient.address + + testClient = toTestClient(chain, getTestAccount(5)) + + nexusClient = await createNexusClient({ + holder: account, + chain, + transport: http(), + bundlerTransport: http(bundlerUrl) + }) + + nexusAccountAddress = await nexusClient.account.getCounterFactualAddress() + await fundAndDeployClients(testClient, [nexusClient]) + }) + + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test.skip("should send eth", async () => { + const balanceBefore = await getBalance(testClient, recipientAddress) + const hash = await nexusClient.sendTransaction({ + calls: [ + { + to: recipientAddress, + value: 1n + } + ] + }) + const { success } = await nexusClient.waitForUserOperationReceipt({ hash }) + const balanceAfter = await getBalance(testClient, recipientAddress) + expect(success).toBe(true) + expect(balanceAfter - balanceBefore).toBe(1n) + }) + + test.skip("should install k1 validator with 1 owner", async () => { + const isInstalledBefore = await nexusClient.isModuleInstalled({ + module: { + type: "validator", + address: addresses.K1Validator, + context: "0x" + } + }) + + if (!isInstalledBefore) { + const hash = await nexusClient.installModule({ + module: { + address: addresses.K1Validator, + type: "validator", + context: "0x" + } + }) + + const { success: installSuccess } = + await nexusClient.waitForUserOperationReceipt({ hash }) + expect(installSuccess).toBe(true) + + const hashUninstall = await nexusClient.uninstallModule({ + module: { + address: addresses.K1Validator, + type: "validator", + context: "0x" + } + }) + + const { success: uninstallSuccess } = + await nexusClient.waitForUserOperationReceipt({ hash: hashUninstall }) + expect(uninstallSuccess).toBe(true) + } else { + // Uninstall + + const byteCode = await testClient.getCode({ + address: addresses.K1Validator + }) + + const hash = await nexusClient.uninstallModule({ + module: { + address: addresses.K1Validator, + type: "validator", + context: "0x" + } + }) + const { success } = await nexusClient.waitForUserOperationReceipt({ + hash + }) + expect(success).toBe(true) + } + // Get installed modules + }) +}) diff --git a/tests/src/README.md b/src/test/README.md similarity index 100% rename from tests/src/README.md rename to src/test/README.md diff --git a/tests/src/__contracts/abi/BiconomyMetaFactoryAbi.ts b/src/test/__contracts/abi/BiconomyMetaFactoryAbi.ts similarity index 100% rename from tests/src/__contracts/abi/BiconomyMetaFactoryAbi.ts rename to src/test/__contracts/abi/BiconomyMetaFactoryAbi.ts diff --git a/tests/src/__contracts/abi/BootstrapAbi.ts b/src/test/__contracts/abi/BootstrapAbi.ts similarity index 100% rename from tests/src/__contracts/abi/BootstrapAbi.ts rename to src/test/__contracts/abi/BootstrapAbi.ts diff --git a/tests/src/__contracts/abi/BootstrapLibAbi.ts b/src/test/__contracts/abi/BootstrapLibAbi.ts similarity index 100% rename from tests/src/__contracts/abi/BootstrapLibAbi.ts rename to src/test/__contracts/abi/BootstrapLibAbi.ts diff --git a/tests/src/__contracts/abi/CounterAbi.ts b/src/test/__contracts/abi/CounterAbi.ts similarity index 100% rename from tests/src/__contracts/abi/CounterAbi.ts rename to src/test/__contracts/abi/CounterAbi.ts diff --git a/tests/src/__contracts/abi/MockExecutorAbi.ts b/src/test/__contracts/abi/MockExecutorAbi.ts similarity index 100% rename from tests/src/__contracts/abi/MockExecutorAbi.ts rename to src/test/__contracts/abi/MockExecutorAbi.ts diff --git a/tests/src/__contracts/abi/MockHandlerAbi.ts b/src/test/__contracts/abi/MockHandlerAbi.ts similarity index 100% rename from tests/src/__contracts/abi/MockHandlerAbi.ts rename to src/test/__contracts/abi/MockHandlerAbi.ts diff --git a/tests/src/__contracts/abi/MockHookAbi.ts b/src/test/__contracts/abi/MockHookAbi.ts similarity index 100% rename from tests/src/__contracts/abi/MockHookAbi.ts rename to src/test/__contracts/abi/MockHookAbi.ts diff --git a/tests/src/__contracts/abi/MockRegistryAbi.ts b/src/test/__contracts/abi/MockRegistryAbi.ts similarity index 100% rename from tests/src/__contracts/abi/MockRegistryAbi.ts rename to src/test/__contracts/abi/MockRegistryAbi.ts diff --git a/tests/src/__contracts/abi/MockTokenAbi.ts b/src/test/__contracts/abi/MockTokenAbi.ts similarity index 100% rename from tests/src/__contracts/abi/MockTokenAbi.ts rename to src/test/__contracts/abi/MockTokenAbi.ts diff --git a/tests/src/__contracts/abi/MockValidatorAbi.ts b/src/test/__contracts/abi/MockValidatorAbi.ts similarity index 100% rename from tests/src/__contracts/abi/MockValidatorAbi.ts rename to src/test/__contracts/abi/MockValidatorAbi.ts diff --git a/tests/src/__contracts/abi/NexusAccountFactoryAbi.ts b/src/test/__contracts/abi/NexusAccountFactoryAbi.ts similarity index 100% rename from tests/src/__contracts/abi/NexusAccountFactoryAbi.ts rename to src/test/__contracts/abi/NexusAccountFactoryAbi.ts diff --git a/tests/src/__contracts/abi/StakeableAbi.ts b/src/test/__contracts/abi/StakeableAbi.ts similarity index 100% rename from tests/src/__contracts/abi/StakeableAbi.ts rename to src/test/__contracts/abi/StakeableAbi.ts diff --git a/tests/src/__contracts/abi/TokenWithPermitAbi.ts b/src/test/__contracts/abi/TokenWithPermitAbi.ts similarity index 100% rename from tests/src/__contracts/abi/TokenWithPermitAbi.ts rename to src/test/__contracts/abi/TokenWithPermitAbi.ts diff --git a/tests/src/__contracts/abi/index.ts b/src/test/__contracts/abi/index.ts similarity index 100% rename from tests/src/__contracts/abi/index.ts rename to src/test/__contracts/abi/index.ts index 50290d37d..d4c21de13 100644 --- a/tests/src/__contracts/abi/index.ts +++ b/src/test/__contracts/abi/index.ts @@ -8,6 +8,6 @@ export * from "./MockTokenAbi" export * from "./BootstrapLibAbi" export * from "./MockRegistryAbi" export * from "./MockHandlerAbi" -export * from "./TokenWithPermitAbi" export * from "./BootstrapAbi" export * from "./MockExecutorAbi" +export * from "./TokenWithPermitAbi" diff --git a/tests/src/__contracts/mockAddresses.ts b/src/test/__contracts/mockAddresses.ts similarity index 100% rename from tests/src/__contracts/mockAddresses.ts rename to src/test/__contracts/mockAddresses.ts diff --git a/tests/src/callDatas.ts b/src/test/callDatas.ts similarity index 100% rename from tests/src/callDatas.ts rename to src/test/callDatas.ts diff --git a/tests/src/executables.ts b/src/test/executables.ts similarity index 100% rename from tests/src/executables.ts rename to src/test/executables.ts diff --git a/tests/src/globalSetup.ts b/src/test/globalSetup.ts similarity index 97% rename from tests/src/globalSetup.ts rename to src/test/globalSetup.ts index b3e12288c..ac4620817 100644 --- a/tests/src/globalSetup.ts +++ b/src/test/globalSetup.ts @@ -5,6 +5,7 @@ import { } from "./testUtils" let globalConfig: NetworkConfigWithBundler +// @ts-ignore export const setup = async ({ provide }) => { globalConfig = await initLocalhostNetwork() const { bundlerInstance, instance, ...serializeableConfig } = globalConfig diff --git a/tests/playground.test.ts b/src/test/playground.test.ts similarity index 57% rename from tests/playground.test.ts rename to src/test/playground.test.ts index 1a689c397..176280202 100644 --- a/tests/playground.test.ts +++ b/src/test/playground.test.ts @@ -1,33 +1,28 @@ import { http, + type Address, type Chain, - type Hex, type PrivateKeyAccount, type PublicClient, type WalletClient, createPublicClient, createWalletClient } from "viem" -import { beforeAll, expect, test } from "vitest" +import { beforeAll, describe, expect, test } from "vitest" +import { createBicoPaymasterClient } from "../sdk/clients/createBicoPaymasterClient" import { - type NexusSmartAccount, - createSmartAccountClient -} from "../src/account" -import { - type TestFileNetworkType, - describeWithPlaygroundGuard, - toNetwork -} from "./src/testSetup" -import type { NetworkConfig } from "./src/testUtils" - -const NETWORK_TYPE: TestFileNetworkType = "PUBLIC_TESTNET" + type NexusClient, + createNexusClient +} from "../sdk/clients/createNexusClient" +import { playgroundTrue, toNetwork } from "./testSetup" +import type { NetworkConfig } from "./testUtils" // Remove the following lines to use the default factory and validator addresses // These are relevant only for now on base sopelia chain and are likely to change const k1ValidatorAddress = "0x663E709f60477f07885230E213b8149a7027239B" const factoryAddress = "0x887Ca6FaFD62737D0E79A2b8Da41f0B15A864778" -describeWithPlaygroundGuard("playground", () => { +describe.skipIf(!playgroundTrue)("playground", () => { let network: NetworkConfig // Nexus Config let chain: Chain @@ -38,17 +33,20 @@ describeWithPlaygroundGuard("playground", () => { // Test utils let publicClient: PublicClient // testClient not available on public testnets let account: PrivateKeyAccount - let smartAccount: NexusSmartAccount - let smartAccountAddress: Hex + let recipientAddress: Address + let nexusClient: NexusClient + let nexusAccountAddress: Address beforeAll(async () => { - network = await toNetwork(NETWORK_TYPE) + network = await toNetwork("PUBLIC_TESTNET") chain = network.chain bundlerUrl = network.bundlerUrl paymasterUrl = network.paymasterUrl account = network.account as PrivateKeyAccount + recipientAddress = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" // vitalik.eth + walletClient = createWalletClient({ account, chain, @@ -59,24 +57,14 @@ describeWithPlaygroundGuard("playground", () => { chain, transport: http() }) - - smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - chain, - k1ValidatorAddress, - factoryAddress - }) - - smartAccountAddress = await smartAccount.getAddress() }) test("should have factory and k1Validator deployed", async () => { const byteCodes = await Promise.all([ - publicClient.getBytecode({ + publicClient.getCode({ address: k1ValidatorAddress }), - publicClient.getBytecode({ + publicClient.getCode({ address: factoryAddress }) ]) @@ -85,20 +73,19 @@ describeWithPlaygroundGuard("playground", () => { }) test("should init the smart account", async () => { - smartAccount = await createSmartAccountClient({ - signer: walletClient, + nexusClient = await createNexusClient({ + holder: account, chain, - bundlerUrl, - // Remove the following lines to use the default factory and validator addresses - // These are relevant only for now on sopelia chain and are likely to change + transport: http(), + bundlerTransport: http(bundlerUrl), k1ValidatorAddress, factoryAddress }) }) test("should log relevant addresses", async () => { - smartAccountAddress = await smartAccount.getAddress() - console.log({ smartAccountAddress }) + nexusAccountAddress = await nexusClient.account.getCounterFactualAddress() + console.log({ nexusAccountAddress }) }) test("should check balances and top up relevant addresses", async () => { @@ -107,10 +94,9 @@ describeWithPlaygroundGuard("playground", () => { address: account.address }), publicClient.getBalance({ - address: smartAccountAddress + address: nexusAccountAddress }) ]) - console.log({ ownerBalance, smartAccountBalance }) const balancesAreOfCorrectType = [ownerBalance, smartAccountBalance].every( (balance) => typeof balance === "bigint" @@ -119,7 +105,7 @@ describeWithPlaygroundGuard("playground", () => { const hash = await walletClient.sendTransaction({ chain, account, - to: smartAccountAddress, + to: nexusAccountAddress, value: 1000000000000000000n }) const receipt = await publicClient.waitForTransactionReceipt({ hash }) @@ -130,27 +116,21 @@ describeWithPlaygroundGuard("playground", () => { test("should send some native token", async () => { const balanceBefore = await publicClient.getBalance({ - address: account.address + address: recipientAddress }) - - const { wait } = await smartAccount.sendTransaction({ - to: account.address, - data: "0x", - value: 1n + const hash = await nexusClient.sendTransaction({ + calls: [ + { + to: recipientAddress, + value: 1n + } + ] }) - - const { - success, - receipt: { transactionHash } - } = await wait() - expect(success).toBeTruthy() - - console.log({ transactionHash }) - + const { status } = await publicClient.waitForTransactionReceipt({ hash }) const balanceAfter = await publicClient.getBalance({ - address: account.address + address: recipientAddress }) - + expect(status).toBe("success") expect(balanceAfter - balanceBefore).toBe(1n) }) @@ -160,30 +140,26 @@ describeWithPlaygroundGuard("playground", () => { return } - const smartAccount = await createSmartAccountClient({ - signer: walletClient, + nexusClient = await createNexusClient({ + holder: account, chain, - paymasterUrl, - bundlerUrl, - // Remove the following lines to use the default factory and validator addresses - // These are relevant only for now on sopelia chain and are likely to change + transport: http(), + bundlerTransport: http(bundlerUrl), k1ValidatorAddress, - factoryAddress + factoryAddress, + paymaster: createBicoPaymasterClient({ + paymasterUrl + }) }) - expect(async () => - smartAccount.sendTransaction( - { - to: account.address, - data: "0x", - value: 1n - }, - { - paymasterServiceData: { - mode: "SPONSORED" + nexusClient.sendTransaction({ + calls: [ + { + to: account.address, + value: 1n } - } - ) + ] + }) ).rejects.toThrow("Error in generating paymasterAndData") }) }) diff --git a/tests/src/testSetup.ts b/src/test/testSetup.ts similarity index 83% rename from tests/src/testSetup.ts rename to src/test/testSetup.ts index 53505827e..dd9813f80 100644 --- a/tests/src/testSetup.ts +++ b/src/test/testSetup.ts @@ -1,4 +1,4 @@ -import { describe, inject, test } from "vitest" +import { inject, test } from "vitest" import { type FundedTestClients, type NetworkConfig, @@ -46,7 +46,7 @@ export type TestFileNetworkType = | "PUBLIC_TESTNET" export const toNetwork = async ( - networkType: TestFileNetworkType + networkType: TestFileNetworkType = "FILE_LOCALHOST" ): Promise<NetworkConfig> => await (networkType === "COMMON_LOCALHOST" ? // @ts-ignore @@ -55,9 +55,5 @@ export const toNetwork = async ( ? initLocalhostNetwork() : initTestnetNetwork()) -export const describeWithPlaygroundGuard = - process.env.RUN_PLAYGROUND === "true" ? describe : describe.skip - -export const describeWithPaymasterGuard = process.env.PAYMASTER_URL - ? describe - : describe.skip +export const playgroundTrue = process.env.RUN_PLAYGROUND === "true" +export const paymasterTruthy = !!process.env.PAYMASTER_URL diff --git a/tests/src/testUtils.ts b/src/test/testUtils.ts similarity index 75% rename from tests/src/testUtils.ts rename to src/test/testUtils.ts index 95b9e44a1..ac6be0d16 100644 --- a/tests/src/testUtils.ts +++ b/src/test/testUtils.ts @@ -1,5 +1,6 @@ import { config } from "dotenv" import getPort from "get-port" +// @ts-ignore import { alto, anvil } from "prool/instances" import { http, @@ -18,24 +19,25 @@ import { parseAbiParameters, publicActions, toBytes, - walletActions + walletActions, + zeroAddress } from "viem" +import { createBundlerClient } from "viem/account-abstraction" import { mnemonicToAccount, privateKeyToAccount } from "viem/accounts" +import contracts from "../sdk/__contracts" +import { getChain, getCustomChain } from "../sdk/account/utils" +import { Logger } from "../sdk/account/utils/Logger" import { - type EIP712DomainReturn, - type NexusSmartAccount, - createSmartAccountClient -} from "../../src" -import contracts from "../../src/__contracts" -import { getChain, getCustomChain } from "../../src/account/utils" -import { Logger } from "../../src/account/utils/Logger" -import { createBundler } from "../../src/bundler" + type NexusClient, + createNexusClient +} from "../sdk/clients/createNexusClient" + import { ENTRY_POINT_SIMULATIONS_CREATECALL, ENTRY_POINT_V07_CREATECALL, TEST_CONTRACTS } from "./callDatas" -import { clean, deploy, init } from "./executables" +import * as hardhatExec from "./executables" config() @@ -179,14 +181,14 @@ export const ensureBundlerIsReady = async ( bundlerUrl: string, chain: Chain ) => { - const bundler = await createBundler({ + const bundler = await createBundlerClient({ chain, - bundlerUrl + transport: http(bundlerUrl) }) while (true) { try { - await bundler.getGasFeeValues() + await bundler.getChainId() return } catch { await new Promise((resolve) => setTimeout(resolve, 1000)) @@ -205,18 +207,35 @@ export const toConfiguredAnvil = async ({ // forkUrl: "https://base-sepolia.gateway.tenderly.co/2oxlNZ7oiNCUpXzrWFuIHx" }) await instance.start() - console.log("") - console.log(`configuring module bytecode on http://localhost:${rpcPort}`) - await deployContracts(rpcPort) - await init() - await clean() - console.log(`deploying nexus contracts to http://localhost:${rpcPort}`) - await deploy(rpcPort) - console.log("deployment complete") - console.log("") + await initDeployments(rpcPort) return instance } +export const initDeployments = async (rpcPort: number) => { + // Hardhat deployment of nexus repo: + console.log( + `using hardhat to deploy nexus contracts to http://localhost:${rpcPort}` + ) + await hardhatExec.init() + await hardhatExec.clean() + await hardhatExec.deploy(rpcPort) + console.log("hardhat deployment complete.") + + // Hardcoded bytecode deployment of contracts using setCode: + console.log("setting bytecode with hardcoded calldata.") + const chain = getTestChainFromPort(rpcPort) + const account = getTestAccount() + const testClient = toTestClient(chain, account) + + // Dynamic bytecode deployment of contracts using setCode: + console.log("setting bytecode with dynamic calldata from a testnet") + await setByteCodeHardcoded(testClient) + await setByteCodeDynamic(testClient, TEST_CONTRACTS) + + console.log("bytecode deployment complete.") + console.log("") +} + const portOptions = { exclude: [] as number[] } export const initAnvilPayload = async (): Promise<AnvilDto> => { const rpcPort = await getPort(portOptions) @@ -236,12 +255,11 @@ export const initBundlerInstance = async ({ const bundlerInstance = await toBundlerInstance({ rpcUrl, bundlerPort }) return { bundlerInstance, bundlerUrl, bundlerPort } } - -export const checkBalance = ( +export const getBalance = ( testClient: MasterClient, owner: Hex, tokenAddress?: Hex -) => { +): Promise<bigint> => { if (!tokenAddress) { return testClient.getBalance({ address: owner }) } @@ -252,7 +270,7 @@ export const checkBalance = ( ]), functionName: "balanceOf", args: [owner] - }) + }) as Promise<bigint> } export const nonZeroBalance = async ( @@ -260,7 +278,7 @@ export const nonZeroBalance = async ( address: Hex, tokenAddress?: Hex ) => { - const balance = await checkBalance(testClient, address, tokenAddress) + const balance = await getBalance(testClient, address, tokenAddress) if (balance > BigInt(0)) return throw new Error( `Insufficient balance ${ @@ -291,21 +309,15 @@ export const toFundedTestClients = async ({ const testClient = toTestClient(chain, getTestAccount()) - const smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, + const nexus = await createNexusClient({ + holder: account, + transport: http(), + bundlerTransport: http(bundlerUrl), chain }) - const recipientSmartAccount = await createSmartAccountClient({ - signer: recipientWalletClient, - bundlerUrl, - chain - }) - - const smartAccountAddress = await smartAccount.getAddress() - const recipientSmartAccountAddress = await recipientSmartAccount.getAddress() - await fundAndDeploy(testClient, [smartAccount, recipientSmartAccount]) + const smartAccountAddress = await nexus.account.getAddress() + await fundAndDeployClients(testClient, [nexus]) return { account, @@ -313,37 +325,50 @@ export const toFundedTestClients = async ({ walletClient, recipientWalletClient, testClient, - smartAccount, - recipientSmartAccount, - smartAccountAddress, - recipientSmartAccountAddress + nexus, + smartAccountAddress } } -export const fundAndDeploy = async ( +export const fundAndDeployClients = async ( testClient: MasterClient, - smartAccounts: NexusSmartAccount[] -) => - Promise.all( - smartAccounts.map((smartAccount) => - fundAndDeploySingleAccount(testClient, smartAccount) + nexusClients: NexusClient[] +) => { + return await Promise.all( + nexusClients.map((nexusClient) => + fundAndDeploySingleClient(testClient, nexusClient) ) ) +} -export const fundAndDeploySingleAccount = async ( +export const fundAndDeploySingleClient = async ( testClient: MasterClient, - smartAccount: NexusSmartAccount + nexusClient: NexusClient ) => { try { - const accountAddress = await smartAccount.getAddress() + const accountAddress = await nexusClient.account.getAddress() await topUp(testClient, accountAddress) - const { wait } = await smartAccount.deploy() - const { success } = await wait() - if (!success) { + + const hash = await nexusClient.sendTransaction({ + calls: [ + { + to: zeroAddress, + value: 0n + } + ] + }) + const { status, transactionHash } = + await testClient.waitForTransactionReceipt({ + hash + }) + + if (status !== "success") { throw new Error("Failed to deploy smart account") } + return transactionHash } catch (e) { - Logger.error(`Error initializing smart account: ${e}`) + console.error(`Error initializing smart account: ${e}`) + return Promise.resolve() } } @@ -366,7 +391,7 @@ export const topUp = async ( amount = 100000000000000000000n, token?: Hex ) => { - const balanceOfRecipient = await checkBalance(testClient, recipient, token) + const balanceOfRecipient = await getBalance(testClient, recipient, token) if (balanceOfRecipient > amount) { Logger.log( @@ -388,56 +413,25 @@ export const topUp = async ( functionName: "transfer", args: [recipient, amount] }) - await testClient.waitForTransactionReceipt({ hash }) + return await testClient.waitForTransactionReceipt({ hash }) } const hash = await testClient.sendTransaction({ to: recipient, value: amount }) - return testClient.waitForTransactionReceipt({ hash }) -} - -export const getAccountDomainStructFields = async ( - testClient: MasterClient, - accountAddress: Address -) => { - const accountDomainStructFields = (await testClient.readContract({ - address: accountAddress, - abi: parseAbi([ - "function eip712Domain() public view returns (bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions)" - ]), - functionName: "eip712Domain" - })) as EIP712DomainReturn - - const [fields, name, version, chainId, verifyingContract, salt, extensions] = - accountDomainStructFields - - const params = parseAbiParameters([ - "bytes1, bytes32, bytes32, uint256, address, bytes32, bytes32" - ]) - - return encodeAbiParameters(params, [ - fields, - keccak256(toBytes(name)), - keccak256(toBytes(version)), - chainId, - verifyingContract, - salt, - keccak256(encodePacked(["uint256[]"], [extensions])) - ]) + return await testClient.waitForTransactionReceipt({ hash }) } export const getBundlerUrl = (chainId: number) => - `https://bundler.biconomy.io/api/v2/${chainId}/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f14` + `https://bundler.biconomy.io/api/v3/${chainId}/nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f14` const getTestChainFromPort = (port: number): Chain => getCustomChain(`Anvil-${port}`, port, `http://localhost:${port}`, "") -const deployContracts = async (rpcPort: number): Promise<void> => { +const setByteCodeHardcoded = async ( + testClient: MasterClient +): Promise<void> => { const DETERMINISTIC_DEPLOYER = "0x4e59b44847b379578588920ca78fbf26c0b4956c" - const chain = getTestChainFromPort(rpcPort) - const account = getTestAccount() - const testClient = toTestClient(chain, account) const entrypointSimulationHash = await testClient.sendTransaction({ to: DETERMINISTIC_DEPLOYER, @@ -455,8 +449,6 @@ const deployContracts = async (rpcPort: number): Promise<void> => { testClient.waitForTransactionReceipt({ hash: entrypointSimulationHash }), testClient.waitForTransactionReceipt({ hash: entrypointHash }) ]) - - await byteCodeDeployer(testClient, TEST_CONTRACTS) } export const sleep = (ms: number) => @@ -467,7 +459,7 @@ export type DeployerParams = { chainId: number address: Address } -export const byteCodeDeployer = async ( +export const setByteCodeDynamic = async ( testClient: MasterClient, deployParams: Record<string, DeployerParams> ) => { @@ -480,7 +472,7 @@ export const byteCodeDeployer = async ( chain: fetchChain, transport: http() }) - return publicClient.getBytecode({ address }) + return publicClient.getCode({ address }) }) )) as Hex[] diff --git a/tests/vitest.config.ts b/src/test/vitest.config.ts similarity index 77% rename from tests/vitest.config.ts rename to src/test/vitest.config.ts index ef719a810..48ba25f39 100644 --- a/tests/vitest.config.ts +++ b/src/test/vitest.config.ts @@ -17,7 +17,7 @@ export default defineConfig({ "**/*.test.ts", "**/test/**" ], - include: ["src/**/*.ts"], + include: ["./src/test/**/*.test.ts", "./src/sdk/**/*.test.ts"], thresholds: { lines: 80, functions: 50, @@ -25,8 +25,8 @@ export default defineConfig({ statements: 80 } }, - include: ["tests/**/*.test.ts"], - globalSetup: join(__dirname, "src/globalSetup.ts"), + include: ["./src/test/**/*.test.ts", "./src/sdk/**/*.test.ts"], + globalSetup: join(__dirname, "globalSetup.ts"), environment: "node", testTimeout: 60_000, hookTimeout: 60_000 diff --git a/tests/account.read.test.ts b/tests/account.read.test.ts deleted file mode 100644 index 604344354..000000000 --- a/tests/account.read.test.ts +++ /dev/null @@ -1,829 +0,0 @@ -import { JsonRpcProvider, ParamType, Wallet, ethers } from "ethers" -import { - http, - type AbiParameter, - type Account, - type Chain, - type Hex, - type PublicClient, - type WalletClient, - concat, - concatHex, - createPublicClient, - createWalletClient, - domainSeparator, - encodeAbiParameters, - encodeFunctionData, - encodePacked, - getContract, - hashMessage, - keccak256, - parseAbi, - parseAbiParameters, - parseEther, - toBytes, - toHex -} from "viem" -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts" -import { baseSepolia } from "viem/chains" -import { afterAll, beforeAll, describe, expect, test } from "vitest" -import { K1ValidatorFactoryAbi, NexusAbi } from "../src/__contracts/abi" -import addresses from "../src/__contracts/addresses" -import { - ERROR_MESSAGES, - NATIVE_TOKEN_ALIAS, - type NexusSmartAccount, - type SupportedSigner, - createSmartAccountClient, - eip1271MagicValue, - getChain, - makeInstallDataAndHash -} from "../src/account" -import { CounterAbi, TokenWithPermitAbi } from "./src/__contracts/abi" -import mockAddresses from "./src/__contracts/mockAddresses" -import { type TestFileNetworkType, toNetwork } from "./src/testSetup" -import { - checkBalance, - getAccountDomainStructFields, - getBundlerUrl, - getTestAccount, - killNetwork, - pKey, - toTestClient, - topUp -} from "./src/testUtils" -import type { MasterClient, NetworkConfig } from "./src/testUtils" - -const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" - -describe("account.read", () => { - let network: NetworkConfig - // Nexus Config - let chain: Chain - let bundlerUrl: string - let walletClient: WalletClient - let publicClient: PublicClient - - // Test utils - let testClient: MasterClient - let account: Account - let recipientAccount: Account - let smartAccount: NexusSmartAccount - let smartAccountAddress: Hex - - beforeAll(async () => { - network = (await toNetwork(NETWORK_TYPE)) as NetworkConfig - - chain = network.chain - bundlerUrl = network.bundlerUrl - - account = getTestAccount(0) - recipientAccount = getTestAccount(3) - - publicClient = createPublicClient({ - chain, - transport: http() - }) - - walletClient = createWalletClient({ - account, - chain, - transport: http() - }) - - testClient = toTestClient(chain, getTestAccount(0)) - - smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - chain - }) - - smartAccountAddress = await smartAccount.getAddress() - }) - afterAll(async () => { - await killNetwork([network?.rpcPort, network?.bundlerPort]) - }) - - test("should deploy smart account if not deployed", async () => { - const isDeployed = await smartAccount.isAccountDeployed() - - if (!isDeployed) { - console.log("Smart account not deployed. Deploying...") - - // Fund the account first - await topUp(testClient, smartAccountAddress, parseEther("0.01")) - - // Create a dummy transaction to trigger deployment - const dummyTx = { - to: smartAccountAddress, - value: 0n, - data: "0x" - } - - const userOp = await smartAccount.sendTransaction([dummyTx]) - await userOp.wait() - - const isNowDeployed = await smartAccount.isAccountDeployed() - expect(isNowDeployed).toBe(true) - - console.log("Smart account deployed successfully") - } else { - console.log("Smart account already deployed") - } - - // Verify the account is now deployed - const finalDeploymentStatus = await smartAccount.isAccountDeployed() - expect(finalDeploymentStatus).toBe(true) - }) - - test("should fund the smart account", async () => { - await topUp(testClient, smartAccountAddress, parseEther("0.01")) - const [balance] = await smartAccount.getBalances() - expect(balance.amount > 0) - }) - - // @note @todo this test is only valid for anvil - test.skip("should have account addresses", async () => { - const addresses = await Promise.all([ - account.address, - smartAccount.getAddress() - ]) - expect(addresses.every(Boolean)).to.be.true - expect(addresses).toStrictEqual([ - "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account - ]) - }) - - test("should estimate gas for minting an NFT", async () => { - const encodedCall = encodeFunctionData({ - abi: CounterAbi, - functionName: "incrementNumber" - }) - const transaction = { - to: mockAddresses.Counter, - data: encodedCall - } - const results = await Promise.all([ - smartAccount.getGasEstimate([transaction]), - smartAccount.getGasEstimate([transaction, transaction]) - ]) - - const increasingGasExpenditure = results.every( - (result, i) => result > (results[i - 1] ?? 0) - ) - - expect(increasingGasExpenditure).toBeTruthy() - }, 60000) - - test("should throw if PrivateKeyAccount is used as signer and rpcUrl is not provided", async () => { - const createSmartAccount = createSmartAccountClient({ - chain, - signer: account as SupportedSigner, - bundlerUrl - }) - - await expect(createSmartAccount).rejects.toThrow( - ERROR_MESSAGES.MISSING_RPC_URL - ) - }, 50000) - - test("should get all modules", async () => { - const modules = smartAccount.getInstalledModules() - if (await smartAccount.isAccountDeployed()) { - expect(modules).resolves - } else { - expect(modules).rejects.toThrow("Account is not deployed") - } - }, 30000) - - test("should check if module is enabled on the smart account", async () => { - const isEnabled = smartAccount.isModuleInstalled({ - type: "validator", - moduleAddress: addresses.K1Validator - }) - if (await smartAccount.isAccountDeployed()) { - expect(isEnabled).resolves.toBeTruthy() - } else { - expect(isEnabled).rejects.toThrow("Account is not deployed") - } - }, 30000) - - test("enable mode", async () => { - const result = makeInstallDataAndHash(account.address, [ - { - moduleType: "validator", - config: account.address - } - ]) - expect(result).toBeTruthy() - }, 30000) - - test("should create a smartAccountClient from an ethers signer", async () => { - const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) - const ethersSigner = new Wallet(pKey, ethersProvider) - - const smartAccount = await createSmartAccountClient({ - chain, - signer: ethersSigner, - bundlerUrl, - rpcUrl: chain.rpcUrls.default.http[0] - }) - - expect(smartAccount).toBeTruthy() - }) - - test.skip("should pickup the rpcUrl from viem wallet and ethers", async () => { - const newRpcUrl = "http://localhost:8545" - const defaultRpcUrl = chain.rpcUrls.default.http[0] //http://127.0.0.1:8545" - - const ethersProvider = new JsonRpcProvider(newRpcUrl) - const ethersSignerWithNewRpcUrl = new Wallet(pKey, ethersProvider) - - const originalEthersProvider = new JsonRpcProvider( - chain.rpcUrls.default.http[0] - ) - const ethersSigner = new Wallet(pKey, originalEthersProvider) - - const walletClientWithNewRpcUrl = createWalletClient({ - account, - chain, - transport: http(newRpcUrl) - }) - const [ - smartAccountFromEthersWithNewRpc, - smartAccountFromViemWithNewRpc, - smartAccountFromEthersWithOldRpc, - smartAccountFromViemWithOldRpc - ] = await Promise.all([ - createSmartAccountClient({ - chain, - signer: ethersSignerWithNewRpcUrl, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: newRpcUrl - }), - createSmartAccountClient({ - chain, - signer: walletClientWithNewRpcUrl, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: newRpcUrl - }), - createSmartAccountClient({ - chain, - signer: ethersSigner, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: chain.rpcUrls.default.http[0] - }), - createSmartAccountClient({ - chain, - signer: walletClient, - bundlerUrl: getBundlerUrl(1337), - rpcUrl: chain.rpcUrls.default.http[0] - }) - ]) - - const [ - smartAccountFromEthersWithNewRpcAddress, - smartAccountFromViemWithNewRpcAddress, - smartAccountFromEthersWithOldRpcAddress, - smartAccountFromViemWithOldRpcAddress - ] = await Promise.all([ - smartAccountFromEthersWithNewRpc.getAccountAddress(), - smartAccountFromViemWithNewRpc.getAccountAddress(), - smartAccountFromEthersWithOldRpc.getAccountAddress(), - smartAccountFromViemWithOldRpc.getAccountAddress() - ]) - - expect( - [ - smartAccountFromEthersWithNewRpcAddress, - smartAccountFromViemWithNewRpcAddress, - smartAccountFromEthersWithOldRpcAddress, - smartAccountFromViemWithOldRpcAddress - ].every(Boolean) - ).toBeTruthy() - - expect(smartAccountFromEthersWithNewRpc.publicClient.transport.url).toBe( - newRpcUrl - ) - expect(smartAccountFromViemWithNewRpc.publicClient.transport.url).toBe( - newRpcUrl - ) - expect(smartAccountFromEthersWithOldRpc.publicClient.transport.url).toBe( - defaultRpcUrl - ) - expect(smartAccountFromViemWithOldRpc.publicClient.transport.url).toBe( - defaultRpcUrl - ) - }) - - test("should read estimated user op gas values", async () => { - const tx = { - to: recipientAccount.address, - data: "0x" - } - - const userOp = await smartAccount.buildUserOp([tx]) - - const estimatedGas = await smartAccount.estimateUserOpGas(userOp) - expect(estimatedGas.maxFeePerGas).toBeTruthy() - expect(estimatedGas.maxPriorityFeePerGas).toBeTruthy() - expect(estimatedGas.verificationGasLimit).toBeTruthy() - expect(estimatedGas.callGasLimit).toBeTruthy() - expect(estimatedGas.preVerificationGas).toBeTruthy() - }, 30000) - - test("should have an active validation module", async () => { - const module = smartAccount.activeValidationModule - expect(module).toBeTruthy() - }) - - // test.skip( - // "should create a smart account with paymaster by creating instance", - // async () => { - // const paymaster = new Paymaster({ paymasterUrl }) - - // const smartAccount = await createSmartAccountClient({ - // signer: walletClient, - // bundlerUrl, - // paymaster - // }) - // expect(smartAccount.paymaster).not.toBeNull() - // expect(smartAccount.paymaster).not.toBeUndefined() - // } - // ) - - test("should fail to create a smartAccountClient from a walletClient without an account", async () => { - const viemWalletNoAccount = createWalletClient({ - transport: http(chain.rpcUrls.default.http[0]) - }) - - expect(async () => - createSmartAccountClient({ - chain, - signer: viemWalletNoAccount, - bundlerUrl, - rpcUrl: chain.rpcUrls.default.http[0] - }) - ).rejects.toThrow("Cannot consume a viem wallet without an account") - }) - - test.skip("should create a smart account with paymaster with an api key", async () => { - const paymaster = smartAccount.paymaster - expect(paymaster).not.toBeNull() - expect(paymaster).not.toBeUndefined() - }) - - test("should return chain object for chain id 1", async () => { - const chainId = 1 - const chain = getChain(chainId) - expect(chain.id).toBe(chainId) - }) - - test("should have correct fields", async () => { - const chainId = 1 - const chain = getChain(chainId) - ;[ - "blockExplorers", - "contracts", - "fees", - "formatters", - "id", - "name", - "nativeCurrency", - "rpcUrls", - "serializers" - ].every((field) => { - expect(chain).toHaveProperty(field) - }) - }) - - test("should throw an error, chain id not found", async () => { - const chainId = 0 - expect(() => getChain(chainId)).toThrow(ERROR_MESSAGES.CHAIN_NOT_FOUND) - }) - - test("should have matching counterFactual address from the contracts with smartAccount.getAddress()", async () => { - const client = createWalletClient({ - account, - chain, - transport: http() - }) - - const smartAccount = await createSmartAccountClient({ - chain, - signer: client, - bundlerUrl - }) - - const smartAccountAddressFromSDK = await smartAccount.getAccountAddress() - - const factoryContract = getContract({ - address: addresses.K1ValidatorFactory, - abi: K1ValidatorFactoryAbi, - client: { public: publicClient, wallet: client } - }) - - const smartAccountAddressFromContracts = - await factoryContract.read.computeAccountAddress([ - await smartAccount.getSmartAccountOwner().getAddress(), - BigInt(0), - [], - 0 - ]) - - expect(smartAccountAddressFromSDK).toBe(smartAccountAddressFromContracts) - }) - - test("should be deployed to counterfactual address", async () => { - const accountAddress = await smartAccount.getAccountAddress() - const byteCode = await testClient.getBytecode({ - address: accountAddress as Hex - }) - if (await smartAccount.isAccountDeployed()) { - expect(byteCode?.length).toBeGreaterThan(2) - } else { - expect(byteCode?.length).toBe(undefined) - } - }, 10000) - - test("should check if K1Validator is enabled", async () => { - const ecdsaOwnershipModule = addresses.K1Validator - - expect(ecdsaOwnershipModule).toBe( - smartAccount.activeValidationModule.getAddress() - ) - }) - - test("should fail to deploy a smart account if no native token balance or paymaster", async () => { - const newPrivateKey = generatePrivateKey() - const newAccount = privateKeyToAccount(newPrivateKey) - - const newViemWallet = createWalletClient({ - account: newAccount, - chain, - transport: http() - }) - - const smartAccount = await createSmartAccountClient({ - chain, - signer: newViemWallet, - bundlerUrl - }) - - expect(async () => smartAccount.deploy()).rejects.toThrow( - ERROR_MESSAGES.NO_NATIVE_TOKEN_BALANCE_DURING_DEPLOY - ) - }) - - test("should fail to deploy a smart account if already deployed", async () => { - if (await smartAccount.isAccountDeployed()) { - expect(async () => smartAccount.deploy()).rejects.toThrow( - ERROR_MESSAGES.ACCOUNT_ALREADY_DEPLOYED - ) - } else { - expect(smartAccount.deploy()).resolves - } - }, 60000) - - test.skip("should fetch balances for smartAccount", async () => { - const token = "0x69835C1f31ed0721A05d5711C1d669C10802a3E1" - const tokenBalanceBefore = await checkBalance( - testClient, - smartAccountAddress, - token - ) - const [tokenBalanceFromSmartAccount] = await smartAccount.getBalances([ - token - ]) - - expect(tokenBalanceBefore).toBe(tokenBalanceFromSmartAccount.amount) - }) - - test("should error if no recipient exists", async () => { - const token: Hex = "0x69835C1f31ed0721A05d5711C1d669C10802a3E1" - - const txs = [ - { address: token, amount: BigInt(1), recipient: account.address }, - { address: NATIVE_TOKEN_ALIAS, amount: BigInt(1) } - ] - - expect(async () => smartAccount.withdraw(txs)).rejects.toThrow( - ERROR_MESSAGES.NO_RECIPIENT - ) - }) - - test("should error when withdraw all of native token is attempted without an amount explicitly set", async () => { - expect(async () => - smartAccount.withdraw(null, account.address) - ).rejects.toThrow(ERROR_MESSAGES.NATIVE_TOKEN_WITHDRAWAL_WITHOUT_AMOUNT) - }, 6000) - - test("should check native token balance and more token info for smartAccount", async () => { - const [ethBalanceFromSmartAccount] = await smartAccount.getBalances() - - expect(ethBalanceFromSmartAccount.amount).toBeGreaterThan(0n) - expect(ethBalanceFromSmartAccount.address).toBe(NATIVE_TOKEN_ALIAS) - expect(ethBalanceFromSmartAccount.chainId).toBe(chain.id) - expect(ethBalanceFromSmartAccount.decimals).toBe(18) - }, 60000) - - test.skip("should check balance of supported token", async () => { - const tokens = await smartAccount.getSupportedTokens() - const [firstToken] = tokens - - expect(tokens.length).toBeGreaterThan(0) - expect(tokens[0]).toHaveProperty("balance") - expect(firstToken.balance.amount).toBeGreaterThanOrEqual(0n) - }, 60000) - - // @note Nexus SA signature needs to contain the validator module address in the first 20 bytes - test("should test isValidSignature PersonalSign to be valid", async () => { - if (await smartAccount.isAccountDeployed()) { - const data = hashMessage("0x1234") - - // Define constants as per the original Solidity function - const DOMAIN_NAME = "Nexus" - const DOMAIN_VERSION = "1.0.0-beta" - const DOMAIN_TYPEHASH = - "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" - const PARENT_TYPEHASH = "PersonalSign(bytes prefixed)" - - // Calculate the domain separator - const domainSeparator = keccak256( - encodeAbiParameters( - parseAbiParameters("bytes32, bytes32, bytes32, uint256, address"), - [ - keccak256(toBytes(DOMAIN_TYPEHASH)), - keccak256(toBytes(DOMAIN_NAME)), - keccak256(toBytes(DOMAIN_VERSION)), - BigInt(chain.id), - smartAccountAddress - ] - ) - ) - - // Calculate the parent struct hash - const parentStructHash = keccak256( - encodeAbiParameters(parseAbiParameters("bytes32, bytes32"), [ - keccak256(toBytes(PARENT_TYPEHASH)), - hashMessage(data) - ]) - ) - - // Calculate the final hash - const resultHash: Hex = keccak256( - concat(["0x1901", domainSeparator, parentStructHash]) - ) - - const signature = await smartAccount.signMessage(resultHash) - - const contractResponse = await testClient.readContract({ - address: await smartAccount.getAddress(), - abi: NexusAbi, - functionName: "isValidSignature", - args: [hashMessage(data), signature] - }) - - const viemResponse = await testClient.verifyMessage({ - address: smartAccountAddress, - message: data, - signature - }) - - expect(contractResponse).toBe(eip1271MagicValue) - expect(viemResponse).toBe(true) - } - }) - - test("should have consistent behaviour between ethers.AbiCoder.defaultAbiCoder() and viem.encodeAbiParameters()", async () => { - const expectedResult = - "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b90600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b906000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000" - - const Executions = ParamType.from({ - type: "tuple(address,uint256,bytes)[]", - baseType: "tuple", - name: "executions", - arrayLength: null, - components: [ - { name: "target", type: "address" }, - { name: "value", type: "uint256" }, - { name: "callData", type: "bytes" } - ] - }) - - const viemExecutions: AbiParameter = { - type: "tuple[]", - components: [ - { name: "target", type: "address" }, - { name: "value", type: "uint256" }, - { name: "callData", type: "bytes" } - ] - } - - const txs = [ - { - target: "0x90F79bf6EB2c4f870365E785982E1f101E93b906", - callData: "0x", - value: 1n - }, - { - target: "0x90F79bf6EB2c4f870365E785982E1f101E93b906", - callData: "0x", - value: 1n - } - ] - - const executionCalldataPrepWithEthers = - ethers.AbiCoder.defaultAbiCoder().encode([Executions], [txs]) - - const executionCalldataPrepWithViem = encodeAbiParameters( - [viemExecutions], - [txs] - ) - - expect(executionCalldataPrepWithEthers).toBe(expectedResult) - expect(executionCalldataPrepWithViem).toBe(expectedResult) - }) - - test.concurrent( - "should test isValidSignature EIP712Sign to be valid with viem", - async () => { - if (await smartAccount.isAccountDeployed()) { - const PARENT_TYPEHASH = - "TypedDataSign(Contents contents,bytes1 fields,string name,string version,uint256 chainId,address verifyingContract,bytes32 salt,uint256[] extensions)Contents(bytes32 stuff)" - - const message = { - contents: keccak256(toBytes("test", { size: 32 })) - } - - const domainSeparator = await publicClient.readContract({ - address: await smartAccount.getAddress(), - abi: parseAbi([ - "function DOMAIN_SEPARATOR() external view returns (bytes32)" - ]), - functionName: "DOMAIN_SEPARATOR" - }) - - const typedHashHashed = keccak256( - concat(["0x1901", domainSeparator, message.contents]) - ) - - const accountDomainStructFields = await getAccountDomainStructFields( - testClient, - await smartAccount.getAddress() - ) - - const parentStructHash = keccak256( - encodePacked( - ["bytes", "bytes"], - [ - encodeAbiParameters(parseAbiParameters(["bytes32, bytes32"]), [ - keccak256(toBytes(PARENT_TYPEHASH)), - message.contents - ]), - accountDomainStructFields - ] - ) - ) - - const dataToSign = keccak256( - concat(["0x1901", domainSeparator, parentStructHash]) - ) - - const signature = await walletClient.signMessage({ - message: { raw: toBytes(dataToSign) }, - account - }) - - const contentsType = toBytes("Contents(bytes32 stuff)") - - const signatureData = concatHex([ - signature, - domainSeparator, - message.contents, - toHex(contentsType), - toHex(contentsType.length, { size: 2 }) - ]) - - const finalSignature = encodePacked( - ["address", "bytes"], - [addresses.K1Validator, signatureData] - ) - - const contractResponse = await publicClient.readContract({ - address: await smartAccount.getAddress(), - abi: NexusAbi, - functionName: "isValidSignature", - args: [typedHashHashed, finalSignature] - }) - - expect(contractResponse).toBe(eip1271MagicValue) - } else { - throw new Error("Smart account is not deployed") - } - } - ) - - test("should sign using signTypedData SDK method", async () => { - const permitTestTokenAddress = mockAddresses.TokenWithPermit; - const appDomain = { - chainId: network.chain.id, - name: "TokenWithPermit", - verifyingContract: permitTestTokenAddress, - version: "1" - } - - const primaryType = "Contents" - const types = { - Contents: [ - { - name: "stuff", - type: "bytes32" - } - ] - } - - const permitTypehash = keccak256( - toBytes( - "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" - ) - ) - const nonce = (await publicClient.readContract({ - address: permitTestTokenAddress, - abi: TokenWithPermitAbi, - functionName: "nonces", - args: [smartAccountAddress] - })) as bigint - - const deadline = BigInt(Math.floor(Date.now() / 1000) + 3600) // 1 hour from now - - const message = { - stuff: keccak256( - encodeAbiParameters( - parseAbiParameters( - "bytes32, address, address, uint256, uint256, uint256" - ), - [ - permitTypehash, - smartAccountAddress, - smartAccountAddress, - parseEther("2"), - nonce, - deadline - ] - ) - ) - } - - const appDomainSeparator = domainSeparator({ - domain: appDomain - }) - - const contentsHash = keccak256( - concat(["0x1901", appDomainSeparator, message.stuff]) - ) - - const finalSignature = await smartAccount.signTypedData({ - domain: appDomain, - primaryType, - types, - message - }) - - const nexusResponse = await publicClient.readContract({ - address: await smartAccount.getAddress(), - abi: NexusAbi, - functionName: "isValidSignature", - args: [contentsHash, finalSignature] - }) - - const permitTokenResponse = await walletClient.writeContract({ - account: account, - address: permitTestTokenAddress, - abi: TokenWithPermitAbi, - functionName: "permitWith1271", - chain: network.chain, - args: [ - await smartAccount.getAddress(), - await smartAccount.getAddress(), - parseEther("2"), - deadline, - finalSignature - ] - }) - - await publicClient.waitForTransactionReceipt({ hash: permitTokenResponse }) - - const allowance = await publicClient.readContract({ - address: permitTestTokenAddress, - abi: TokenWithPermitAbi, - functionName: "allowance", - args: [await smartAccount.getAddress(), await smartAccount.getAddress()] - }) - - expect(allowance).toEqual(parseEther("2")) - expect(nexusResponse).toEqual("0x1626ba7e") - }) -}) diff --git a/tests/account.write.test.ts b/tests/account.write.test.ts deleted file mode 100644 index 8af5a0fb8..000000000 --- a/tests/account.write.test.ts +++ /dev/null @@ -1,227 +0,0 @@ -import { - http, - type Account, - type Chain, - type Hex, - type WalletClient, - createWalletClient -} from "viem" -import { afterAll, beforeAll, describe, expect, test } from "vitest" -import { - type NexusSmartAccount, - type Transaction, - createSmartAccountClient -} from "../src/account" -import { type TestFileNetworkType, toNetwork } from "./src/testSetup" -import { - getTestAccount, - killNetwork, - toTestClient, - topUp -} from "./src/testUtils" -import type { MasterClient, NetworkConfig } from "./src/testUtils" - -const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" - -describe("account.write", () => { - let network: NetworkConfig - // Nexus Config - let chain: Chain - let bundlerUrl: string - let walletClient: WalletClient - - // Test utils - let testClient: MasterClient - let account: Account - let recipientAccount: Account - let smartAccount: NexusSmartAccount - let smartAccountAddress: Hex - - beforeAll(async () => { - network = await toNetwork(NETWORK_TYPE) - - chain = network.chain - bundlerUrl = network.bundlerUrl - - account = getTestAccount(0) - recipientAccount = getTestAccount(3) - - walletClient = createWalletClient({ - account, - chain, - transport: http() - }) - - testClient = toTestClient(chain, getTestAccount(0)) - - smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - chain - }) - - smartAccountAddress = await smartAccount.getAddress() - }) - afterAll(async () => { - await killNetwork([network?.rpcPort, network?.bundlerPort]) - }) - - test("should fund the smart account", async () => { - await topUp(testClient, smartAccountAddress) - const [balance] = await smartAccount.getBalances() - expect(balance.amount > 0) - }) - - test("should have account addresses", async () => { - const addresses = await Promise.all([ - account.address, - smartAccount.getAddress() - ]) - expect(addresses.every(Boolean)).to.be.true - expect(addresses).toStrictEqual([ - "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account - ]) - }) - - test("should send eth", async () => { - const balanceBefore = await testClient.getBalance({ - address: recipientAccount.address - }) - const tx: Transaction = { - to: recipientAccount.address, - value: 1n - } - const { wait } = await smartAccount.sendTransaction(tx) - const { success } = await wait() - const balanceAfter = await testClient.getBalance({ - address: recipientAccount.address - }) - expect(success).toBe(true) - expect(balanceAfter - balanceBefore).toBe(1n) - }) - - test("should send eth twice", async () => { - const balanceBefore = await testClient.getBalance({ - address: recipientAccount.address - }) - const tx: Transaction = { - to: recipientAccount.address, - value: 1n - } - const { wait } = await smartAccount.sendTransaction([tx, tx]) - const { success } = await wait() - const balanceAfter = await testClient.getBalance({ - address: recipientAccount.address - }) - expect(success).toBe(true) - expect(balanceAfter - balanceBefore).toBe(2n) - }) - - // test("install a mock Hook module", async () => { - // const isSupported = await smartAccount.supportsModule(ModuleType.Hook) - // console.log(isSupported, "is supported") - - // const isInstalledBefore = await smartAccount.isModuleInstalled( - // ModuleType.Hook, - // MOCK_HOOK - // ) - // console.log(isInstalledBefore, "is installed before") - - // const userOpReceipt = await smartAccount.installModule(MOCK_HOOK, ModuleType.Hook) - // console.log(userOpReceipt, "user op receipt") - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Hook, - // MOCK_HOOK - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) - - // test("get active hook", async () => { - // const activeHook: Address = await smartAccount.getActiveHook() - // console.log(activeHook, "active hook") - // expect(activeHook).toBe(MOCK_HOOK) - // }, 60000) - - // test("uninstall hook module", async () => { - // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - // const deInitData = encodeAbiParameters( - // [ - // { name: "prev", type: "address" }, - // { name: "disableModuleData", type: "bytes" } - // ], - // [prevAddress, toHex(stringToBytes(""))] - // ) - // const userOpReceipt = await smartAccount.uninstallModule(MOCK_HOOK, ModuleType.Hook, deInitData) - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Hook, - // MOCK_HOOK - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) - - // test("install a fallback handler Hook module", async () => { - // const isSupported = await smartAccount.supportsModule(ModuleType.Fallback) - // console.log(isSupported, "is supported") - - // const isInstalledBefore = await smartAccount.isModuleInstalled( - // ModuleType.Fallback, - // MOCK_FALLBACK_HANDLER, - // ethers.AbiCoder.defaultAbiCoder().encode( - // ["bytes4"], - // [GENERIC_FALLBACK_SELECTOR as Hex] - // ) as Hex - // ) - // console.log(isInstalledBefore, "is installed before") - - // const userOpReceipt = await smartAccount.installModule(MOCK_FALLBACK_HANDLER, ModuleType.Fallback, ethers.AbiCoder.defaultAbiCoder().encode( - // ["bytes4"], - // [GENERIC_FALLBACK_SELECTOR as Hex] - // ) as Hex) - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Fallback, - // MOCK_FALLBACK_HANDLER, - // ethers.AbiCoder.defaultAbiCoder().encode( - // ["bytes4"], - // [GENERIC_FALLBACK_SELECTOR as Hex] - // ) as Hex - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeTruthy() - // }, 60000) - - // test("uninstall handler module", async () => { - // const prevAddress: Hex = "0x0000000000000000000000000000000000000001" - // const deInitData = ethers.AbiCoder.defaultAbiCoder().encode( - // ["bytes4"], - // [GENERIC_FALLBACK_SELECTOR as Hex] - // ) as Hex - // const userOpReceipt = await smartAccount.uninstallModule( - // MOCK_FALLBACK_HANDLER, - // ModuleType.Fallback, - // deInitData - // ) - - // const isInstalled = await smartAccount.isModuleInstalled( - // ModuleType.Fallback, - // MOCK_FALLBACK_HANDLER, - // ethers.AbiCoder.defaultAbiCoder().encode( - // ["bytes4"], - // [GENERIC_FALLBACK_SELECTOR as Hex] - // ) as Hex - // ) - - // expect(userOpReceipt.success).toBe(true) - // expect(isInstalled).toBeFalsy() - // expect(userOpReceipt).toBeTruthy() - // }, 60000) -}) diff --git a/tests/modules.k1Validator.write.test.ts b/tests/modules.k1Validator.write.test.ts deleted file mode 100644 index d267c342e..000000000 --- a/tests/modules.k1Validator.write.test.ts +++ /dev/null @@ -1,161 +0,0 @@ -import { - http, - type Account, - type Chain, - type Hex, - type WalletClient, - createWalletClient, - encodeFunctionData, - encodePacked -} from "viem" -import { afterAll, beforeAll, describe, expect, test } from "vitest" -import addresses from "../src/__contracts/addresses" -import { - type NexusSmartAccount, - type Transaction, - createSmartAccountClient -} from "../src/account" -import { CounterAbi } from "./src/__contracts/abi" -import { mockAddresses } from "./src/__contracts/mockAddresses" -import { OWNABLE_VALIDATOR } from "./src/callDatas" -import { type TestFileNetworkType, toNetwork } from "./src/testSetup" -import { - getTestAccount, - killNetwork, - toTestClient, - topUp -} from "./src/testUtils" -import type { MasterClient, NetworkConfig } from "./src/testUtils" - -const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" - -describe("modules.k1Validator.write", () => { - let network: NetworkConfig - // Nexus Config - let chain: Chain - let bundlerUrl: string - let walletClient: WalletClient - - // Test utils - let testClient: MasterClient - let account: Account - let recipientAccount: Account - let smartAccount: NexusSmartAccount - let smartAccountAddress: Hex - - beforeAll(async () => { - network = await toNetwork(NETWORK_TYPE) - - chain = network.chain - bundlerUrl = network.bundlerUrl - - account = getTestAccount(0) - recipientAccount = getTestAccount(3) - - walletClient = createWalletClient({ - account, - chain, - transport: http() - }) - - testClient = toTestClient(chain, getTestAccount(0)) - - smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - chain - }) - - smartAccountAddress = await smartAccount.getAddress() - }) - - afterAll(async () => { - await killNetwork([network?.rpcPort, network?.bundlerPort]) - }) - - test("should fund the smart account", async () => { - await topUp(testClient, smartAccountAddress) - const [balance] = await smartAccount.getBalances() - expect(balance.amount > 0) - }) - - test("should have account addresses", async () => { - const addresses = await Promise.all([ - account.address, - smartAccount.getAddress() - ]) - expect(addresses.every(Boolean)).to.be.true - expect(addresses).toStrictEqual([ - "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account - ]) - }) - - test("should send eth", async () => { - const balanceBefore = await testClient.getBalance({ - address: recipientAccount.address - }) - const tx: Transaction = { - to: recipientAccount.address, - value: 1n - } - const { wait } = await smartAccount.sendTransaction(tx) - const { success } = await wait() - const balanceAfter = await testClient.getBalance({ - address: recipientAccount.address - }) - expect(success).toBe(true) - expect(balanceAfter - balanceBefore).toBe(1n) - }) - - test("should install k1 Validator with 1 owner", async () => { - const isInstalledBefore = await smartAccount.isModuleInstalled({ - type: "validator", - moduleAddress: addresses.K1Validator - }) - - if (!isInstalledBefore) { - const { wait } = await smartAccount.installModule({ - moduleAddress: addresses.K1Validator, - type: "validator", - data: encodePacked(["address"], [await smartAccount.getAddress()]) - }) - - const { success: installSuccess } = await wait() - expect(installSuccess).toBe(true) - - const { wait: uninstallWait } = await smartAccount.uninstallModule({ - moduleAddress: addresses.K1Validator, - type: "validator", - data: encodePacked(["address"], [await smartAccount.getAddress()]) - }) - const { success: uninstallSuccess } = await uninstallWait() - expect(uninstallSuccess).toBe(true) - } - }, 60000) - - test.skip("should have the Ownable Validator Module installed", async () => { - const isInstalled = await smartAccount.isModuleInstalled({ - type: "validator", - moduleAddress: OWNABLE_VALIDATOR - }) - expect(isInstalled).toBeTruthy() - }, 60000) - - test("should perform a contract interaction", async () => { - const encodedCall = encodeFunctionData({ - abi: CounterAbi, - functionName: "incrementNumber" - }) - - const transaction = { - to: mockAddresses.Counter, - data: encodedCall - } - - const response = await smartAccount.sendTransaction([transaction]) - const receipt = await response.wait() - - expect(receipt.success).toBe(true) - }, 60000) -}) diff --git a/tests/modules.ownableExecutor.read.test.ts b/tests/modules.ownableExecutor.read.test.ts deleted file mode 100644 index 9e9a13624..000000000 --- a/tests/modules.ownableExecutor.read.test.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { - http, - type Account, - type Chain, - type Hex, - type WalletClient, - createWalletClient -} from "viem" -import { afterAll, beforeAll, describe, expect, test } from "vitest" -import { - type NexusSmartAccount, - type Transaction, - createSmartAccountClient -} from "../src/account" -import { createOwnableExecutorModule } from "../src/modules" -import { OWNABLE_EXECUTOR } from "./src/callDatas" -import { type TestFileNetworkType, toNetwork } from "./src/testSetup" -import { - getTestAccount, - killNetwork, - toTestClient, - topUp -} from "./src/testUtils" -import type { MasterClient, NetworkConfig } from "./src/testUtils" - -const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" - -describe("modules.ownable.executor.read", () => { - let network: NetworkConfig - // Nexus Config - let chain: Chain - let bundlerUrl: string - let walletClient: WalletClient - - // Test utils - let testClient: MasterClient - let account: Account - let recipientAccount: Account - let smartAccount: NexusSmartAccount - let smartAccountAddress: Hex - - beforeAll(async () => { - network = await toNetwork(NETWORK_TYPE) - - chain = network.chain - bundlerUrl = network.bundlerUrl - - account = getTestAccount(0) - recipientAccount = getTestAccount(3) - - walletClient = createWalletClient({ - account, - chain, - transport: http() - }) - - testClient = toTestClient(chain, getTestAccount(0)) - - smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - chain - }) - - smartAccountAddress = await smartAccount.getAddress() - }) - afterAll(async () => { - await killNetwork([network?.rpcPort, network?.bundlerPort]) - }) - - test("should fund the smart account", async () => { - await topUp(testClient, smartAccountAddress) - const [balance] = await smartAccount.getBalances() - expect(balance.amount > 0) - }) - - test("should have account addresses", async () => { - const addresses = await Promise.all([ - account.address, - smartAccount.getAddress() - ]) - expect(addresses.every(Boolean)).to.be.true - expect(addresses).toStrictEqual([ - "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account - ]) - }) - - test("should send eth", async () => { - const balanceBefore = await testClient.getBalance({ - address: recipientAccount.address - }) - const tx: Transaction = { - to: recipientAccount.address, - value: 1n - } - const { wait } = await smartAccount.sendTransaction(tx) - const { success } = await wait() - const balanceAfter = await testClient.getBalance({ - address: recipientAccount.address - }) - expect(success).toBe(true) - expect(balanceAfter - balanceBefore).toBe(1n) - }) - - // test.skip("should initialize Ownable Executor Module with correct owners", async () => { - // const ownableExecutorModule = await createOwnableExecutorModule( - // smartAccount, - // OWNABLE_EXECUTOR - // ) - // const owners = await ownableExecutorModule.getOwners(OWNABLE_EXECUTOR) - // expect(owners).toStrictEqual(ownableExecutorModule.owners) - // }) -}) diff --git a/tests/modules.ownableExecutor.write.test.ts b/tests/modules.ownableExecutor.write.test.ts deleted file mode 100644 index 0094e7087..000000000 --- a/tests/modules.ownableExecutor.write.test.ts +++ /dev/null @@ -1,371 +0,0 @@ -import { - http, - type Account, - type Chain, - type Hex, - type WalletClient, - createWalletClient -} from "viem" -import { afterAll, beforeAll, describe, expect, test } from "vitest" -import { - type NexusSmartAccount, - type Transaction, - createSmartAccountClient -} from "../src/account" -import { type TestFileNetworkType, toNetwork } from "./src/testSetup" -import { - getTestAccount, - killNetwork, - toTestClient, - topUp -} from "./src/testUtils" -import type { MasterClient, NetworkConfig } from "./src/testUtils" - -const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" - -describe("modules.ownable.executor.write", () => { - let network: NetworkConfig - // Nexus Config - let chain: Chain - let bundlerUrl: string - let walletClient: WalletClient - - // Test utils - let testClient: MasterClient - let account: Account - let recipientAccount: Account - let smartAccount: NexusSmartAccount - let smartAccountAddress: Hex - - beforeAll(async () => { - network = await toNetwork(NETWORK_TYPE) - - chain = network.chain - bundlerUrl = network.bundlerUrl - - account = getTestAccount(0) - recipientAccount = getTestAccount(3) - - walletClient = createWalletClient({ - account, - chain, - transport: http() - }) - - testClient = toTestClient(chain, getTestAccount(0)) - - smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - chain - }) - - smartAccountAddress = await smartAccount.getAddress() - }) - afterAll(async () => { - await killNetwork([network?.rpcPort, network?.bundlerPort]) - }) - - test("should fund the smart account", async () => { - await topUp(testClient, smartAccountAddress) - const [balance] = await smartAccount.getBalances() - expect(balance.amount > 0) - }) - - test("should have account addresses", async () => { - const addresses = await Promise.all([ - account.address, - smartAccount.getAddress() - ]) - expect(addresses.every(Boolean)).to.be.true - expect(addresses).toStrictEqual([ - "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account - ]) - }) - - test("should send eth", async () => { - const balanceBefore = await testClient.getBalance({ - address: recipientAccount.address - }) - const tx: Transaction = { - to: recipientAccount.address, - value: 1n - } - const { wait } = await smartAccount.sendTransaction(tx) - const { success } = await wait() - const balanceAfter = await testClient.getBalance({ - address: recipientAccount.address - }) - expect(success).toBe(true) - expect(balanceAfter - balanceBefore).toBe(1n) - }) - - // test.skip("install Ownable Executor", async () => { - // let isInstalled = await smartAccount.isModuleInstalled({ - // type: 'executor', - // moduleAddress: OWNABLE_EXECUTOR - // }) - - // if (!isInstalled) { - // const receipt = await smartAccount.installModule({ - // moduleAddress: ownableExecutorModule.moduleAddress, - // type: ownableExecutorModule.type, - // data: ownableExecutorModule.data - // }) - - // smartAccount.setActiveExecutionModule(ownableExecutorModule) - - // expect(receipt.success).toBe(true) - // } - // }, 60000) - - // test.skip("uninstall Ownable Executor", async () => { - // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // bundlerUrl - // }) - - // const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, OWNABLE_EXECUTOR) - - // let isInstalled = await smartAccount2.isModuleInstalled({ - // type: 'executor', - // moduleAddress: OWNABLE_EXECUTOR - // }) - - // if (isInstalled) { - // await smartAccount2.uninstallModule({ - // moduleAddress: ownableExecutorModule2.moduleAddress, - // type: ownableExecutorModule2.type, - // data: ownableExecutorModule2.data - // }) - // } - - // }, 60000) - - // test.skip("Ownable Executor Module should be installed", async () => { - // const isInstalled = await smartAccount.isModuleInstalled({ - // type: 'executor', - // moduleAddress: OWNABLE_EXECUTOR - // }) - // console.log(isInstalled, "isInstalled") - // expect(isInstalled).toBeTruthy() - // }, 60000) - - // test.skip("should add an owner to the module", async () => { - // const ownersBefore = await ownableExecutorModule.getOwners() - // const isOwnerBefore = ownersBefore.includes(accountTwo.address) - - // if (isOwnerBefore) { - // console.log("Owner already exists in list, skipping test case ...") - // return - // } - - // const userOpReceipt = await ownableExecutorModule.addOwner( - // accountTwo.address - // ) - - // const owners = await ownableExecutorModule.getOwners() - // const isOwner = owners.includes(accountTwo.address) - - // expect(isOwner).toBeTruthy() - // expect(userOpReceipt.success).toBeTruthy() - // }, 60000) - - // test.skip("EOA 2 can execute actions on behalf of SA 1", async () => { - // const valueToTransfer = parseEther("0.1") - // const recipient = accountTwo.address - // const transferEncodedCall = encodeFunctionData({ - // abi: parseAbi(["function transfer(address to, uint256 value)"]), - // functionName: "transfer", - // args: [recipient, valueToTransfer] - // }) - - // const owners = await ownableExecutorModule.getOwners() - // const isOwner = owners.includes(accountTwo.address) - // expect(isOwner).toBeTruthy() - - // const balanceBefore = await smartAccount.getBalances([token]) - // console.log("balanceBefore", balanceBefore) - - // const calldata = encodeFunctionData({ - // abi: parseAbi([ - // "function executeOnOwnedAccount(address ownedAccount, bytes callData)" - // ]), - // functionName: "executeOnOwnedAccount", - // args: [ - // await smartAccount.getAddress(), - // encodePacked( - // ["address", "uint256", "bytes"], - // [token, BigInt(Number(0)), transferEncodedCall] - // ) - // ] - // }) - - // // EOA 2 (walletClientTwo) executes an action on behalf of SA 1 which is owned by EOA 1 (walletClientOne) - // const txHash = await walletClientTwo.sendTransaction({ - // account: accountTwo, // Called by delegated EOA owner - // to: ownableExecutorModule.moduleAddress, - // data: calldata, - // value: 0n - // }) - - // const balanceAfter = await smartAccount.getBalances([token]) - // console.log("balanceAfter", balanceAfter) - - // expect(txHash).toBeTruthy() - // }, 60000) - - // test("SA 2 can execute actions on behalf of SA 1", async () => { - // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // bundlerUrl - // }) - - // const valueToTransfer = parseEther("0.1") - // const recipient = accountTwo.address - // const transferEncodedCall = encodeFunctionData({ - // abi: parseAbi(["function transfer(address to, uint256 value)"]), - // functionName: "transfer", - // args: [recipient, valueToTransfer] - // }) - - // const transferTransaction = { - // to: token, - // data: transferEncodedCall, - // value: 0n - // } - - // smartAccount2.setActiveExecutionModule(ownableExecutorModule) - // const receipt = await smartAccount2.sendTransactionWithExecutor([transferTransaction], await smartAccount.getAddress()); - // console.log(receipt, "receipt"); - - // expect(receipt.userOpHash).toBeTruthy() - // expect(receipt.success).toBe(true) - // }, 60000) - - // test.skip("SA 2 can execute actions on behalf of SA 1 using module instance instead of smart account instance", async () => { - // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // bundlerUrl - // }) - - // const initData = encodePacked( - // ["address"], - // [await smartAccount2.getAddress()] - // ) - // const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, OWNABLE_EXECUTOR, initData) - - // // First, we need to install the OwnableExecutor module on SA 2 - // let isInstalled = await smartAccount2.isModuleInstalled({ - // type: 'executor', - // moduleAddress: OWNABLE_EXECUTOR - // }) - - // if (!isInstalled) { - // await smartAccount2.installModule({ - // moduleAddress: ownableExecutorModule2.moduleAddress, - // type: ownableExecutorModule2.type, - // data: ownableExecutorModule2.data - // }) - // } - - // smartAccount2.setActiveExecutionModule(ownableExecutorModule) - - // const valueToTransfer = parseEther("0.1") - // const recipient = accountTwo.address - // const transferEncodedCall = encodeFunctionData({ - // abi: parseAbi(["function transfer(address to, uint256 value)"]), - // functionName: "transfer", - // args: [recipient, valueToTransfer] - // }) - - // const owners = await ownableExecutorModule2.getOwners() - - // // check if SA 2 is as an owner of SA 1 - // const isOwner = owners.includes(await smartAccount2.getAddress()) - // if(!isOwner) { - // const userOpReceipt = await ownableExecutorModule2.addOwner( - // await smartAccount2.getAddress() - // ) - // expect(userOpReceipt.success).toBeTruthy() - // } - - // const transferTransaction = { - // target: token as `0x${string}`, - // callData: transferEncodedCall, - // value: 0n - // } - - // smartAccount2.setActiveExecutionModule(ownableExecutorModule2) - // // SA 2 will execute the transferTransaction on behalf of SA 1 (smartAccount) - // const receipt = await ownableExecutorModule2.execute(transferTransaction, await smartAccount.getAddress()); - // console.log(receipt, "receipt"); - - // expect(receipt.userOpHash).toBeTruthy() - // expect(receipt.success).toBe(true) - // }, 60000) - - // test.skip("should remove an owner from the module", async () => { - // const userOpReceipt = await ownableExecutorModule.removeOwner( - // accountTwo.address - // ) - // const owners = await ownableExecutorModule.getOwners() - // const isOwner = owners.includes(accountTwo.address) - - // expect(isOwner).toBeFalsy() - // expect(userOpReceipt.success).toBeTruthy() - // }, 60000) - - // test.skip("should use rhinestone to call ownable executor", async () => { - // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // bundlerUrl - // }) - - // const initData = encodePacked( - // ["address"], - // [await smartAccount2.getAddress()] - // ) - - // const ownableExecutorModule2 = getOwnableExecuter({ - // owner: await smartAccount2.getAddress(), - // }); - - // // First, we need to install the OwnableExecutor module on SA 2 - // let isInstalled = await smartAccount2.isModuleInstalled({ - // type: 'executor', - // module: OWNABLE_EXECUTOR - // }) - - // if (!isInstalled) { - // await smartAccount2.installModule({ - // module: ownableExecutorModule2.module, - // type: ownableExecutorModule2.type, - // data: ownableExecutorModule2.initData - // }) - // } - - // smartAccount2.setActiveExecutionModule(ownableExecutorModule) - - // const valueToTransfer = parseEther("0.1") - // const recipient = accountTwo.address - // const transferEncodedCall = encodeFunctionData({ - // abi: parseAbi(["function transfer(address to, uint256 value)"]), - // functionName: "transfer", - // args: [recipient, valueToTransfer] - // }) - - // const transferTransaction = { - // target: token as `0x${string}`, - // callData: transferEncodedCall, - // value: 0n - // } - - // const execution = getExecuteOnOwnedAccountAction({ownedAccount: await smartAccount.getAddress(), execution: transferTransaction}) - // const receipt = await smartAccount2.sendTransaction([{to: execution.target, data: execution.callData, value: 0n}]); - // console.log(receipt, "receipt"); - - // expect(receipt.userOpHash).toBeTruthy() - // }, 60000) -}) diff --git a/tests/modules.ownableValidator.install.write.test.ts b/tests/modules.ownableValidator.install.write.test.ts deleted file mode 100644 index 6ccbf0969..000000000 --- a/tests/modules.ownableValidator.install.write.test.ts +++ /dev/null @@ -1,371 +0,0 @@ -import { - http, - type Account, - type Chain, - type Hex, - type WalletClient, - createWalletClient -} from "viem" -import { afterAll, beforeAll, describe, expect, test } from "vitest" -import { - type NexusSmartAccount, - type Transaction, - createSmartAccountClient -} from "../src/account" -import { type TestFileNetworkType, toNetwork } from "./src/testSetup" -import { - getTestAccount, - killNetwork, - toTestClient, - topUp -} from "./src/testUtils" -import type { MasterClient, NetworkConfig } from "./src/testUtils" - -const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" - -describe("modules.ownable.validator.install.write", () => { - let network: NetworkConfig - // Nexus Config - let chain: Chain - let bundlerUrl: string - let walletClient: WalletClient - - // Test utils - let testClient: MasterClient - let account: Account - let recipientAccount: Account - let smartAccount: NexusSmartAccount - let smartAccountAddress: Hex - - beforeAll(async () => { - network = await toNetwork(NETWORK_TYPE) - - chain = network.chain - bundlerUrl = network.bundlerUrl - - account = getTestAccount(0) - recipientAccount = getTestAccount(3) - - walletClient = createWalletClient({ - account, - chain, - transport: http() - }) - - testClient = toTestClient(chain, getTestAccount(0)) - - smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - chain - }) - - smartAccountAddress = await smartAccount.getAddress() - }) - afterAll(async () => { - await killNetwork([network?.rpcPort, network?.bundlerPort]) - }) - - test("should fund the smart account", async () => { - await topUp(testClient, smartAccountAddress) - const [balance] = await smartAccount.getBalances() - expect(balance.amount > 0) - }) - - test("should have account addresses", async () => { - const addresses = await Promise.all([ - account.address, - smartAccount.getAddress() - ]) - expect(addresses.every(Boolean)).to.be.true - expect(addresses).toStrictEqual([ - "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account - ]) - }) - - test("should send eth", async () => { - const balanceBefore = await testClient.getBalance({ - address: recipientAccount.address - }) - const tx: Transaction = { - to: recipientAccount.address, - value: 1n - } - const { wait } = await smartAccount.sendTransaction(tx) - const { success } = await wait() - const balanceAfter = await testClient.getBalance({ - address: recipientAccount.address - }) - expect(success).toBe(true) - expect(balanceAfter - balanceBefore).toBe(1n) - }) - - // test.skip("install Ownable Executor", async () => { - // let isInstalled = await smartAccount.isModuleInstalled({ - // type: 'executor', - // moduleAddress: OWNABLE_EXECUTOR - // }) - - // if (!isInstalled) { - // const receipt = await smartAccount.installModule({ - // moduleAddress: ownableExecutorModule.moduleAddress, - // type: ownableExecutorModule.type, - // data: ownableExecutorModule.data - // }) - - // smartAccount.setActiveExecutionModule(ownableExecutorModule) - - // expect(receipt.success).toBe(true) - // } - // }, 60000) - - // test.skip("uninstall Ownable Executor", async () => { - // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // bundlerUrl - // }) - - // const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, OWNABLE_EXECUTOR) - - // let isInstalled = await smartAccount2.isModuleInstalled({ - // type: 'executor', - // moduleAddress: OWNABLE_EXECUTOR - // }) - - // if (isInstalled) { - // await smartAccount2.uninstallModule({ - // moduleAddress: ownableExecutorModule2.moduleAddress, - // type: ownableExecutorModule2.type, - // data: ownableExecutorModule2.data - // }) - // } - - // }, 60000) - - // test.skip("Ownable Executor Module should be installed", async () => { - // const isInstalled = await smartAccount.isModuleInstalled({ - // type: 'executor', - // moduleAddress: OWNABLE_EXECUTOR - // }) - // console.log(isInstalled, "isInstalled") - // expect(isInstalled).toBeTruthy() - // }, 60000) - - // test.skip("should add an owner to the module", async () => { - // const ownersBefore = await ownableExecutorModule.getOwners() - // const isOwnerBefore = ownersBefore.includes(accountTwo.address) - - // if (isOwnerBefore) { - // console.log("Owner already exists in list, skipping test case ...") - // return - // } - - // const userOpReceipt = await ownableExecutorModule.addOwner( - // accountTwo.address - // ) - - // const owners = await ownableExecutorModule.getOwners() - // const isOwner = owners.includes(accountTwo.address) - - // expect(isOwner).toBeTruthy() - // expect(userOpReceipt.success).toBeTruthy() - // }, 60000) - - // test.skip("EOA 2 can execute actions on behalf of SA 1", async () => { - // const valueToTransfer = parseEther("0.1") - // const recipient = accountTwo.address - // const transferEncodedCall = encodeFunctionData({ - // abi: parseAbi(["function transfer(address to, uint256 value)"]), - // functionName: "transfer", - // args: [recipient, valueToTransfer] - // }) - - // const owners = await ownableExecutorModule.getOwners() - // const isOwner = owners.includes(accountTwo.address) - // expect(isOwner).toBeTruthy() - - // const balanceBefore = await smartAccount.getBalances([token]) - // console.log("balanceBefore", balanceBefore) - - // const calldata = encodeFunctionData({ - // abi: parseAbi([ - // "function executeOnOwnedAccount(address ownedAccount, bytes callData)" - // ]), - // functionName: "executeOnOwnedAccount", - // args: [ - // await smartAccount.getAddress(), - // encodePacked( - // ["address", "uint256", "bytes"], - // [token, BigInt(Number(0)), transferEncodedCall] - // ) - // ] - // }) - - // // EOA 2 (walletClientTwo) executes an action on behalf of SA 1 which is owned by EOA 1 (walletClientOne) - // const txHash = await walletClientTwo.sendTransaction({ - // account: accountTwo, // Called by delegated EOA owner - // to: ownableExecutorModule.moduleAddress, - // data: calldata, - // value: 0n - // }) - - // const balanceAfter = await smartAccount.getBalances([token]) - // console.log("balanceAfter", balanceAfter) - - // expect(txHash).toBeTruthy() - // }, 60000) - - // test("SA 2 can execute actions on behalf of SA 1", async () => { - // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // bundlerUrl - // }) - - // const valueToTransfer = parseEther("0.1") - // const recipient = accountTwo.address - // const transferEncodedCall = encodeFunctionData({ - // abi: parseAbi(["function transfer(address to, uint256 value)"]), - // functionName: "transfer", - // args: [recipient, valueToTransfer] - // }) - - // const transferTransaction = { - // to: token, - // data: transferEncodedCall, - // value: 0n - // } - - // smartAccount2.setActiveExecutionModule(ownableExecutorModule) - // const receipt = await smartAccount2.sendTransactionWithExecutor([transferTransaction], await smartAccount.getAddress()); - // console.log(receipt, "receipt"); - - // expect(receipt.userOpHash).toBeTruthy() - // expect(receipt.success).toBe(true) - // }, 60000) - - // test.skip("SA 2 can execute actions on behalf of SA 1 using module instance instead of smart account instance", async () => { - // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // bundlerUrl - // }) - - // const initData = encodePacked( - // ["address"], - // [await smartAccount2.getAddress()] - // ) - // const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, OWNABLE_EXECUTOR, initData) - - // // First, we need to install the OwnableExecutor module on SA 2 - // let isInstalled = await smartAccount2.isModuleInstalled({ - // type: 'executor', - // moduleAddress: OWNABLE_EXECUTOR - // }) - - // if (!isInstalled) { - // await smartAccount2.installModule({ - // moduleAddress: ownableExecutorModule2.moduleAddress, - // type: ownableExecutorModule2.type, - // data: ownableExecutorModule2.data - // }) - // } - - // smartAccount2.setActiveExecutionModule(ownableExecutorModule) - - // const valueToTransfer = parseEther("0.1") - // const recipient = accountTwo.address - // const transferEncodedCall = encodeFunctionData({ - // abi: parseAbi(["function transfer(address to, uint256 value)"]), - // functionName: "transfer", - // args: [recipient, valueToTransfer] - // }) - - // const owners = await ownableExecutorModule2.getOwners() - - // // check if SA 2 is as an owner of SA 1 - // const isOwner = owners.includes(await smartAccount2.getAddress()) - // if(!isOwner) { - // const userOpReceipt = await ownableExecutorModule2.addOwner( - // await smartAccount2.getAddress() - // ) - // expect(userOpReceipt.success).toBeTruthy() - // } - - // const transferTransaction = { - // target: token as `0x${string}`, - // callData: transferEncodedCall, - // value: 0n - // } - - // smartAccount2.setActiveExecutionModule(ownableExecutorModule2) - // // SA 2 will execute the transferTransaction on behalf of SA 1 (smartAccount) - // const receipt = await ownableExecutorModule2.execute(transferTransaction, await smartAccount.getAddress()); - // console.log(receipt, "receipt"); - - // expect(receipt.userOpHash).toBeTruthy() - // expect(receipt.success).toBe(true) - // }, 60000) - - // test.skip("should remove an owner from the module", async () => { - // const userOpReceipt = await ownableExecutorModule.removeOwner( - // accountTwo.address - // ) - // const owners = await ownableExecutorModule.getOwners() - // const isOwner = owners.includes(accountTwo.address) - - // expect(isOwner).toBeFalsy() - // expect(userOpReceipt.success).toBeTruthy() - // }, 60000) - - // test.skip("should use rhinestone to call ownable executor", async () => { - // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // bundlerUrl - // }) - - // const initData = encodePacked( - // ["address"], - // [await smartAccount2.getAddress()] - // ) - - // const ownableExecutorModule2 = getOwnableExecuter({ - // owner: await smartAccount2.getAddress(), - // }); - - // // First, we need to install the OwnableExecutor module on SA 2 - // let isInstalled = await smartAccount2.isModuleInstalled({ - // type: 'executor', - // module: OWNABLE_EXECUTOR - // }) - - // if (!isInstalled) { - // await smartAccount2.installModule({ - // module: ownableExecutorModule2.module, - // type: ownableExecutorModule2.type, - // data: ownableExecutorModule2.initData - // }) - // } - - // smartAccount2.setActiveExecutionModule(ownableExecutorModule) - - // const valueToTransfer = parseEther("0.1") - // const recipient = accountTwo.address - // const transferEncodedCall = encodeFunctionData({ - // abi: parseAbi(["function transfer(address to, uint256 value)"]), - // functionName: "transfer", - // args: [recipient, valueToTransfer] - // }) - - // const transferTransaction = { - // target: token as `0x${string}`, - // callData: transferEncodedCall, - // value: 0n - // } - - // const execution = getExecuteOnOwnedAccountAction({ownedAccount: await smartAccount.getAddress(), execution: transferTransaction}) - // const receipt = await smartAccount2.sendTransaction([{to: execution.target, data: execution.callData, value: 0n}]); - // console.log(receipt, "receipt"); - - // expect(receipt.userOpHash).toBeTruthy() - // }, 60000) -}) diff --git a/tests/modules.ownableValidator.uninstall.write.test.ts b/tests/modules.ownableValidator.uninstall.write.test.ts deleted file mode 100644 index 136e2b340..000000000 --- a/tests/modules.ownableValidator.uninstall.write.test.ts +++ /dev/null @@ -1,371 +0,0 @@ -import { - http, - type Account, - type Chain, - type Hex, - type WalletClient, - createWalletClient -} from "viem" -import { afterAll, beforeAll, describe, expect, test } from "vitest" -import { - type NexusSmartAccount, - type Transaction, - createSmartAccountClient -} from "../src/account" -import { type TestFileNetworkType, toNetwork } from "./src/testSetup" -import { - getTestAccount, - killNetwork, - toTestClient, - topUp -} from "./src/testUtils" -import type { MasterClient, NetworkConfig } from "./src/testUtils" - -const NETWORK_TYPE: TestFileNetworkType = "FILE_LOCALHOST" - -describe("modules.ownable.validator.uninstall.write", () => { - let network: NetworkConfig - // Nexus Config - let chain: Chain - let bundlerUrl: string - let walletClient: WalletClient - - // Test utils - let testClient: MasterClient - let account: Account - let recipientAccount: Account - let smartAccount: NexusSmartAccount - let smartAccountAddress: Hex - - beforeAll(async () => { - network = await toNetwork(NETWORK_TYPE) - - chain = network.chain - bundlerUrl = network.bundlerUrl - - account = getTestAccount(0) - recipientAccount = getTestAccount(3) - - walletClient = createWalletClient({ - account, - chain, - transport: http() - }) - - testClient = toTestClient(chain, getTestAccount(0)) - - smartAccount = await createSmartAccountClient({ - signer: walletClient, - bundlerUrl, - chain - }) - - smartAccountAddress = await smartAccount.getAddress() - }) - afterAll(async () => { - await killNetwork([network?.rpcPort, network?.bundlerPort]) - }) - - test("should fund the smart account", async () => { - await topUp(testClient, smartAccountAddress) - const [balance] = await smartAccount.getBalances() - expect(balance.amount > 0) - }) - - test("should have account addresses", async () => { - const addresses = await Promise.all([ - account.address, - smartAccount.getAddress() - ]) - expect(addresses.every(Boolean)).to.be.true - expect(addresses).toStrictEqual([ - "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account - ]) - }) - - test("should send eth", async () => { - const balanceBefore = await testClient.getBalance({ - address: recipientAccount.address - }) - const tx: Transaction = { - to: recipientAccount.address, - value: 1n - } - const { wait } = await smartAccount.sendTransaction(tx) - const { success } = await wait() - const balanceAfter = await testClient.getBalance({ - address: recipientAccount.address - }) - expect(success).toBe(true) - expect(balanceAfter - balanceBefore).toBe(1n) - }) - - // test.skip("install Ownable Executor", async () => { - // let isInstalled = await smartAccount.isModuleInstalled({ - // type: 'executor', - // moduleAddress: OWNABLE_EXECUTOR - // }) - - // if (!isInstalled) { - // const receipt = await smartAccount.installModule({ - // moduleAddress: ownableExecutorModule.moduleAddress, - // type: ownableExecutorModule.type, - // data: ownableExecutorModule.data - // }) - - // smartAccount.setActiveExecutionModule(ownableExecutorModule) - - // expect(receipt.success).toBe(true) - // } - // }, 60000) - - // test.skip("uninstall Ownable Executor", async () => { - // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // bundlerUrl - // }) - - // const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, OWNABLE_EXECUTOR) - - // let isInstalled = await smartAccount2.isModuleInstalled({ - // type: 'executor', - // moduleAddress: OWNABLE_EXECUTOR - // }) - - // if (isInstalled) { - // await smartAccount2.uninstallModule({ - // moduleAddress: ownableExecutorModule2.moduleAddress, - // type: ownableExecutorModule2.type, - // data: ownableExecutorModule2.data - // }) - // } - - // }, 60000) - - // test.skip("Ownable Executor Module should be installed", async () => { - // const isInstalled = await smartAccount.isModuleInstalled({ - // type: 'executor', - // moduleAddress: OWNABLE_EXECUTOR - // }) - // console.log(isInstalled, "isInstalled") - // expect(isInstalled).toBeTruthy() - // }, 60000) - - // test.skip("should add an owner to the module", async () => { - // const ownersBefore = await ownableExecutorModule.getOwners() - // const isOwnerBefore = ownersBefore.includes(accountTwo.address) - - // if (isOwnerBefore) { - // console.log("Owner already exists in list, skipping test case ...") - // return - // } - - // const userOpReceipt = await ownableExecutorModule.addOwner( - // accountTwo.address - // ) - - // const owners = await ownableExecutorModule.getOwners() - // const isOwner = owners.includes(accountTwo.address) - - // expect(isOwner).toBeTruthy() - // expect(userOpReceipt.success).toBeTruthy() - // }, 60000) - - // test.skip("EOA 2 can execute actions on behalf of SA 1", async () => { - // const valueToTransfer = parseEther("0.1") - // const recipient = accountTwo.address - // const transferEncodedCall = encodeFunctionData({ - // abi: parseAbi(["function transfer(address to, uint256 value)"]), - // functionName: "transfer", - // args: [recipient, valueToTransfer] - // }) - - // const owners = await ownableExecutorModule.getOwners() - // const isOwner = owners.includes(accountTwo.address) - // expect(isOwner).toBeTruthy() - - // const balanceBefore = await smartAccount.getBalances([token]) - // console.log("balanceBefore", balanceBefore) - - // const calldata = encodeFunctionData({ - // abi: parseAbi([ - // "function executeOnOwnedAccount(address ownedAccount, bytes callData)" - // ]), - // functionName: "executeOnOwnedAccount", - // args: [ - // await smartAccount.getAddress(), - // encodePacked( - // ["address", "uint256", "bytes"], - // [token, BigInt(Number(0)), transferEncodedCall] - // ) - // ] - // }) - - // // EOA 2 (walletClientTwo) executes an action on behalf of SA 1 which is owned by EOA 1 (walletClientOne) - // const txHash = await walletClientTwo.sendTransaction({ - // account: accountTwo, // Called by delegated EOA owner - // to: ownableExecutorModule.moduleAddress, - // data: calldata, - // value: 0n - // }) - - // const balanceAfter = await smartAccount.getBalances([token]) - // console.log("balanceAfter", balanceAfter) - - // expect(txHash).toBeTruthy() - // }, 60000) - - // test("SA 2 can execute actions on behalf of SA 1", async () => { - // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // bundlerUrl - // }) - - // const valueToTransfer = parseEther("0.1") - // const recipient = accountTwo.address - // const transferEncodedCall = encodeFunctionData({ - // abi: parseAbi(["function transfer(address to, uint256 value)"]), - // functionName: "transfer", - // args: [recipient, valueToTransfer] - // }) - - // const transferTransaction = { - // to: token, - // data: transferEncodedCall, - // value: 0n - // } - - // smartAccount2.setActiveExecutionModule(ownableExecutorModule) - // const receipt = await smartAccount2.sendTransactionWithExecutor([transferTransaction], await smartAccount.getAddress()); - // console.log(receipt, "receipt"); - - // expect(receipt.userOpHash).toBeTruthy() - // expect(receipt.success).toBe(true) - // }, 60000) - - // test.skip("SA 2 can execute actions on behalf of SA 1 using module instance instead of smart account instance", async () => { - // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // bundlerUrl - // }) - - // const initData = encodePacked( - // ["address"], - // [await smartAccount2.getAddress()] - // ) - // const ownableExecutorModule2 = await createOwnableExecutorModule(smartAccount2, OWNABLE_EXECUTOR, initData) - - // // First, we need to install the OwnableExecutor module on SA 2 - // let isInstalled = await smartAccount2.isModuleInstalled({ - // type: 'executor', - // moduleAddress: OWNABLE_EXECUTOR - // }) - - // if (!isInstalled) { - // await smartAccount2.installModule({ - // moduleAddress: ownableExecutorModule2.moduleAddress, - // type: ownableExecutorModule2.type, - // data: ownableExecutorModule2.data - // }) - // } - - // smartAccount2.setActiveExecutionModule(ownableExecutorModule) - - // const valueToTransfer = parseEther("0.1") - // const recipient = accountTwo.address - // const transferEncodedCall = encodeFunctionData({ - // abi: parseAbi(["function transfer(address to, uint256 value)"]), - // functionName: "transfer", - // args: [recipient, valueToTransfer] - // }) - - // const owners = await ownableExecutorModule2.getOwners() - - // // check if SA 2 is as an owner of SA 1 - // const isOwner = owners.includes(await smartAccount2.getAddress()) - // if(!isOwner) { - // const userOpReceipt = await ownableExecutorModule2.addOwner( - // await smartAccount2.getAddress() - // ) - // expect(userOpReceipt.success).toBeTruthy() - // } - - // const transferTransaction = { - // target: token as `0x${string}`, - // callData: transferEncodedCall, - // value: 0n - // } - - // smartAccount2.setActiveExecutionModule(ownableExecutorModule2) - // // SA 2 will execute the transferTransaction on behalf of SA 1 (smartAccount) - // const receipt = await ownableExecutorModule2.execute(transferTransaction, await smartAccount.getAddress()); - // console.log(receipt, "receipt"); - - // expect(receipt.userOpHash).toBeTruthy() - // expect(receipt.success).toBe(true) - // }, 60000) - - // test.skip("should remove an owner from the module", async () => { - // const userOpReceipt = await ownableExecutorModule.removeOwner( - // accountTwo.address - // ) - // const owners = await ownableExecutorModule.getOwners() - // const isOwner = owners.includes(accountTwo.address) - - // expect(isOwner).toBeFalsy() - // expect(userOpReceipt.success).toBeTruthy() - // }, 60000) - - // test.skip("should use rhinestone to call ownable executor", async () => { - // const smartAccount2: NexusSmartAccount = await createSmartAccountClient({ - // signer: walletClientTwo, - // bundlerUrl - // }) - - // const initData = encodePacked( - // ["address"], - // [await smartAccount2.getAddress()] - // ) - - // const ownableExecutorModule2 = getOwnableExecuter({ - // owner: await smartAccount2.getAddress(), - // }); - - // // First, we need to install the OwnableExecutor module on SA 2 - // let isInstalled = await smartAccount2.isModuleInstalled({ - // type: 'executor', - // module: OWNABLE_EXECUTOR - // }) - - // if (!isInstalled) { - // await smartAccount2.installModule({ - // module: ownableExecutorModule2.module, - // type: ownableExecutorModule2.type, - // data: ownableExecutorModule2.initData - // }) - // } - - // smartAccount2.setActiveExecutionModule(ownableExecutorModule) - - // const valueToTransfer = parseEther("0.1") - // const recipient = accountTwo.address - // const transferEncodedCall = encodeFunctionData({ - // abi: parseAbi(["function transfer(address to, uint256 value)"]), - // functionName: "transfer", - // args: [recipient, valueToTransfer] - // }) - - // const transferTransaction = { - // target: token as `0x${string}`, - // callData: transferEncodedCall, - // value: 0n - // } - - // const execution = getExecuteOnOwnedAccountAction({ownedAccount: await smartAccount.getAddress(), execution: transferTransaction}) - // const receipt = await smartAccount2.sendTransaction([{to: execution.target, data: execution.callData, value: 0n}]); - // console.log(receipt, "receipt"); - - // expect(receipt.userOpHash).toBeTruthy() - // }, 60000) -}) diff --git a/tsconfig/tsconfig.cjs.json b/tsconfig/tsconfig.cjs.json index d5607ac12..0b9054568 100644 --- a/tsconfig/tsconfig.cjs.json +++ b/tsconfig/tsconfig.cjs.json @@ -1,10 +1,16 @@ { - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "commonjs", - "outDir": "../dist/_cjs", - "removeComments": true, - "verbatimModuleSyntax": false, - "noEmit": false - } -} + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "outDir": "../dist/_cjs", + "removeComments": true, + "verbatimModuleSyntax": false, + "noEmit": false, + "rootDir": "../src/sdk" + }, + "exclude": [ + "../src/test/**/*.*", + "../src/sdk/**/*.test.*", + "../src/sdk/**/*.spec.*", + ] +} \ No newline at end of file diff --git a/tsconfig/tsconfig.esm.json b/tsconfig/tsconfig.esm.json index 136a81fc1..35640e490 100644 --- a/tsconfig/tsconfig.esm.json +++ b/tsconfig/tsconfig.esm.json @@ -3,6 +3,12 @@ "compilerOptions": { "module": "es2015", "outDir": "../dist/_esm", - "noEmit": false - } -} + "noEmit": false, + "rootDir": "../src/sdk" + }, + "exclude": [ + "../src/test/**/*.*", + "../src/sdk/**/*.test.*", + "../src/sdk/**/*.spec.*", + ] +} \ No newline at end of file diff --git a/tsconfig/tsconfig.json b/tsconfig/tsconfig.json index d820773c9..4d8f6dbae 100644 --- a/tsconfig/tsconfig.json +++ b/tsconfig/tsconfig.json @@ -7,7 +7,6 @@ "../src/**/*.test.ts", "../src/**/*.test-d.ts", "../src/**/*.bench.ts", - "../tests/**/*.*" ], "compilerOptions": { "moduleResolution": "node", diff --git a/tsconfig/tsconfig.types.json b/tsconfig/tsconfig.types.json index bb70b996d..6ee2578c0 100644 --- a/tsconfig/tsconfig.types.json +++ b/tsconfig/tsconfig.types.json @@ -7,6 +7,12 @@ "emitDeclarationOnly": true, "declaration": true, "declarationMap": true, - "noEmit": false - } -} + "noEmit": false, + "rootDir": "../src/sdk" + }, + "exclude": [ + "../src/test/**/*.*", + "../src/sdk/**/*.test.*", + "../src/sdk/**/*.spec.*", + ] +} \ No newline at end of file diff --git a/typedoc.json b/typedoc.json index 6a717b22a..1b6162e2c 100644 --- a/typedoc.json +++ b/typedoc.json @@ -1,6 +1,11 @@ { "$schema": "https://typedoc.org/schema.json", "entryPoints": ["src/index.ts"], + "exclude": [ + "src/sdk/account/utils/**/*.ts", + "src/sdk/__contracts/**/*.ts", + "src/test/**/*.ts" + ], "basePath": "src", "includes": "src", "out": "docs", From 4ad18e4645de964f39d2efb40f54afbbdaa68b05 Mon Sep 17 00:00:00 2001 From: Vasile Gabriel Marian <56271768+VGabriel45@users.noreply.github.com> Date: Mon, 23 Sep 2024 22:52:39 +0300 Subject: [PATCH 1246/1247] Nexus fix: OwnableValidator & OwnableExecutor integration + tests, + add missing features after viem refactor + fix issues & conflicts +++ (#576) * fixed ownable validator implementation and tests * refactor: refactor OwnableValidator instance class * feat: added signature override to sendTransaction * refactor: switch to local network (draft) * fix: sort owners for module install data and change commit hash for deployed accounts * refactor: remove signature override for now * fix: fallback installation & get installed modules * feat: fix ownable validator initialization and add test * fixed conflicts + added missing functionality + tests * feat: ownable validator multi signature test + fixes * feat: add signatureOverride param * refactor: remove console.logs * feat: added tests for ownable executor & cleanup * refactor: cleanup * refactor: removed useless decorator * fix: fix build errors --------- Co-authored-by: VGabriel45 <vgabrielmarian21@gmai.com> --- bun.lockb | Bin 355840 -> 356999 bytes package.json | 3 +- scripts/fetch:deployment.ts | 14 +- scripts/send:userOp.ts | 2 +- scripts/viem:bundler.ts | 2 +- src/sdk/__contracts/abi/index.ts | 2 +- src/sdk/__contracts/addresses.ts | 7 +- src/sdk/account/toNexusAccount.test.ts | 2 +- src/sdk/account/toNexusAccount.ts | 44 +- src/sdk/account/utils/index.ts | 2 +- .../utils/{toHolder.ts => toSigner.ts} | 25 +- .../clients/createBicoBundlerClient.test.ts | 2 +- src/sdk/clients/createNexusClient.test.ts | 77 ++-- src/sdk/clients/createNexusClient.ts | 110 ++--- .../erc7579/erc7579.decorators.test.ts | 55 ++- .../decorators/erc7579/getPreviousModule.ts | 84 ++++ src/sdk/clients/decorators/erc7579/index.ts | 34 +- .../decorators/erc7579/installModule.ts | 8 +- .../decorators/erc7579/installModules.ts | 6 +- .../decorators/erc7579/isModuleInstalled.ts | 6 +- .../erc7579/supportsExecutionMode.ts | 10 +- .../decorators/erc7579/uninstallFallback.ts | 113 ----- .../decorators/erc7579/uninstallModule.ts | 12 +- .../decorators/erc7579/uninstallModules.ts | 4 +- .../smartAccount/account.decorators.test.ts | 5 +- .../smartAccount/sendTransaction.ts | 6 +- src/sdk/modules/base/BaseModule.ts | 22 +- src/sdk/modules/base/BaseValidationModule.ts | 18 +- src/sdk/modules/executors/OwnableExecutor.ts | 198 -------- .../modules/executors/ownableExecutor.test.ts | 154 +++++++ src/sdk/modules/index.ts | 7 +- .../modules/interfaces/IValidationModule.ts | 4 +- src/sdk/modules/smart.sessions.test.ts | 2 +- src/sdk/modules/utils/Helper.ts | 11 +- src/sdk/modules/utils/Types.ts | 18 +- .../modules/validators/K1ValidatorModule.ts | 12 +- .../modules/validators/OwnableValidator.ts | 421 ++++++++++-------- .../modules/validators/ValidationModule.ts | 14 +- .../modules/validators/k1Validator.test.ts | 64 ++- .../validators/ownableValidator.test.ts | 279 ++++++++++++ src/test/__contracts/abi/index.ts | 2 +- src/test/__contracts/mockAddresses.ts | 29 +- src/test/callDatas.ts | 8 +- src/test/playground.test.ts | 4 +- src/test/testUtils.ts | 28 +- 45 files changed, 1125 insertions(+), 805 deletions(-) rename src/sdk/account/utils/{toHolder.ts => toSigner.ts} (74%) create mode 100644 src/sdk/clients/decorators/erc7579/getPreviousModule.ts delete mode 100644 src/sdk/clients/decorators/erc7579/uninstallFallback.ts delete mode 100644 src/sdk/modules/executors/OwnableExecutor.ts create mode 100644 src/sdk/modules/executors/ownableExecutor.test.ts create mode 100644 src/sdk/modules/validators/ownableValidator.test.ts diff --git a/bun.lockb b/bun.lockb index db0ee96a0b9a070f57b7076eddfe24358dd1c3cf..04078b69f9547ca8675daad9343a70af6ceb13ab 100755 GIT binary patch delta 77730 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 C_cu%c delta 76752 zcmeFad0bUh+djU}fum=uIA%r)YNmz-P8st-98y#;Gc`0&1k|HU0uHDQYF3tzwzDOb zluc%()ze^DST-4zn)x(XVcBdwnl@u$-|Jdy9b}(RZ=d&lf8!tSPdC@P?`z#_p7!2$ z_Kjb4t@xzt`iQVHcjB<8AKB9Rx}A$f#~m~0v<?0|xx(;dOkdn_YN2@ZhJsv|!Rz`B z(|VTwToND^_2+!Us3>(9MmykfU>o2vr(w|kB`^q>4eSaOaAdqsfNfjww`hAAknyJ= zen;R1$d&1tzz)D9*xOx(z=tp}!k|`)n4K3fzX;{=AOaKq6?Wp~R&Pho@-I;=6WaU0 z_P{rFaZ54^=hABsNEWMPa8w>Eb+OhvAa7<rMdR<VcY}T$$ke+4I{^cMEM9g|W=2j% zR(58NcaazAgdtH-<rO&y(BT;%>lcVWOn9-kIJ>CWFvg)&<Szu0Z-vx|h1nUI#o^u} zpZ`>C?}oZF<DC3O1=+~xF6fNksQoVkN&S21?TvDyq7woriOi5S^kulJv#R-=qU^=l zdBsJA`8hd@3Jl{s^i~Ms|9+lf^Z<Sgr2aB682A7%6j%Yg7&r^q3phgCdjk7FZ|Y(g z7nLJ$1c9Ew7d37HGJ#cEp95q@<AL3Q1^GqAnMFm$C@8GSR{UX$<z?jMd$SB9yJ+?z zZ%&rc7Kxw^6~Ci&aIN?fh`cM_1=7A7SWd&EIzqK3)&ObG2Xd&+(E2DK`#3_|y91eU zYt8?HQZnJAK>EK0r2lh3#=9TLp?<68OL|~vFhaIAOzvTg2<%th3O&LuFZSk@6cv;h zzoLR1(RTqk7Crq`LwpMzQ7a0<bG*6UVk5M_^7}~JGv{S+s2Rt#y&$7_-r|fLBP%<* zAUu0v&ga^G2*@$I7k((`$cn{bYDg4$=X&$z<QptVL4JPDZbaZvc@l{KD()Yk;}vIx zXXh<8ZqxkKORWK}i1K5Xsd^s)vOf8F*~Q-6Y$F$?%?zKD_b%+L56cz4AiLyst=9pW z%@aUo^AM07d>4@EEScxcoQHaOi?Ww;h(9n;m4C?~6<?<}pyVcatGSe&%Z6A|#J`5I za<Gc%TZ781m5!bv{wt7g<ynB(=UWY~?t`<2sf?}xvO~rK+W{{JvcoekR|S9T3Kg%H z71pYM=cQ4q6uW_}*8C`IcB_c;=c1MRQjDTo#VUPvVMb;)3R()Cg?|OeUhW#F_-7EG zt>7&RpPQ3E+jtvx#(NNU7HUpLQSm}lvM_s5k#|msF)3d4LT8UEY&sCVU0$(KJ7jqa zWl94QR0i8oFlLaU%bPhbe}OkEqYx`j7UC9!3|9r(3dCYkk&#!Dn^BxOuec~YFFz~W zD9J<axb7ICT4f!O1<dl!nL~RSbh+|iiKTAj!N8KIYfRDT(byY^DONFev|3^I133@p zW36VwWml>KF9OO2_7;1YE}Lg|iD6WZQQcjXlTpNRBP+^*RR{u$NJY+-)`jlS@@+{f zom_98w;-da=qKn*?_Q1Xj8o-&1xR<jhFAFS1-?DPw-?k-Pz~l=s@Eeu*0-P#a|-1t z&M0JY1B|OvtX=MY<rk)?dL5al;vEDszaZF&bF+)X3-Sw#G5Rwz;21MWmD@Mp2194L z3o;6evcq$WeDkR<>>RHC^D1_-VO#+F9Pivkh1o?H8Xv;I@$73KU&c<W#Ozr<W{PV5 zx%0vcGUjF%`I`C1sj8X<-n<1~%*z6fK3reHE{o04imUIns#^JZnTUm1S(s6PRnG9A zJ+o6)GkEjnWfyvji?9^sc<0WWQG6j1-~jav)Z3@4h;xd<vzHbZW`xdA^_*XnpEt*w zlidY6<KOQq;DWi~7|6yPZ(de7wzLPYQ~aIRS%qyP%KJiP^Hn1{hgU<oD*t6ORja%U zoyk29<S@J$@i3v9=SxOWNnR%E<?9|_b7vQ$9+=p2Jwg2D)kmLfGO~-paZ<5*w(ZnA z8VRrrmjXHY=VcUy&&kP{8w#Cm*~OaFwtsLE+K=o;U>6`3{G0{I`BG~`+ivAsFx!}h zfoVeaeatp?|3#Ps+@^9f=6W-+SkywNJ<hA_7XmMW{uk_=9ghK-=j-t2u)Pb&^l~#6 zWV0QMvU3+_V+7v-dso;`&6nwwSL}d+<H|R07eVKOF-u2Wma7`@V;~)WM$uW2g?TE2 z@1U~-9QmpuqcrY^y$9^aptC^l16d&Z0igW9cLLxz|9|8FfIZ>Aa{}-`089@GE$_Tk zRcI@aJ?I3oqCYKBBW*Qi3wv-WkR!3@GG%`PJni`f*=Ry;kl{;;aty;iokzg2M=MJW z;}YP=70T~dU>|M`;brOwHmh9q3|58woW<EjbcH&q4Fs}hdILECF+B5^Aj_haD&f8G zW6x)0&t|6^6QHx9A6un*{B9sC<bj?3Mf1G5xfny)vOqYL-f_KQ^as&*jmjt|Kac4c zoo`T%PK`f;XF{I>IRy3tImGHTE&y_9JqTohZUZu21&}SZ2>J8|PC?CSmo0!oRZIoZ z6KH|p-s6GJ1m@jr7#9Lp+@i+nB<NfOVl*b82K}J_x=u}=j7n9*U~TthbVxOI#S<D^ z=2Om$R)Ao_3)ZWa7^N|PgUVnwkbOArHr2FIK-Q?QrCOvP;)g;vfviC0?P^w!1ond7 zAJ_vp5BacbmgQ%$fsMf{a8tm9X567lel?JTFhHmp{|vnY^!uT+?>1`u26h(cVkAg> zdXw_|9mqj?0qmUJ&s3|HydB7RH)>oCB)_E^?amT)zDqgga5KSmGjtXt$lB1cTe%a- zG1>l`RXY_G<ampR7>2KS*j#apDl*i~3yNB!+T~p!N62~bV~;yDp1fPxKh^jikVCxs zURA8OwEi*>r3k2~z1telsbBeT%T+miw@oLYvy@@?t6E$LWOHFx#4=?V@ein*f=hrL zncabGh7LehKM=@z@fgPqbj3s1F`>r;S>9W=s)3aSM7nJ&iV)y{N!@CF)G5@waGQ$P z%5rq>R-O$nj-so8%q<m>nR+<%j=<L*RkhB{#~BaJ9HQ+Vfb85rAmjJluCOq>n3XWP zLZ|<iz+m9%2UTmG)cD~J*$P7{4yZsy#^S|Z*5B6*zH0lL+1E^AR(<E5<-Vi1?+Ct; zSt6SiPpP^#0MCaW2&6sgX=N|{m%@!e4xwQ1EZ#QgU4Z}5{QRQuqInrZjg!wP|GBU; zy>>h0Br2~+f`PLq4A=|U>p3;MGLT?*=wpCf2C(qW<Ku<IT9rX|PL8*r*qiwUbY}b! zkfULCVSZsoUY6l|7-1qk_RA2Y!wMWkK1}zU=NZ2b4ioAyV7v<hBW!s=W$*$bQoq77 z&l_0Yup6gYXscgTgC{E=C&R-00xbObv*#Pe0oa-S+la?O?>ivWy`&a{c(f}A=kYzN zJ14%Z^xW+HC7=wP`sGuQ7}%Ms--)Tb;?C>TxWFxFer857?km-;XoF7hiq{l>5s)3? z0)_xjzpCulzplp3??4vtV<7qLLNpjobI13pcyDTc*&C{$>dq4zg|9~b2PNNG+yAi& zdcGthH^)H5<neeZ66UmveoNtHKu*WKK(<^yc;crhFgwT>Z`a!>NI48!5#Z1gGyrk$ zz?L%}g+mYMdx4yu`*e%+IG}2}0mv391JXYS*cn*!j^e9;Os`C1p2oJ?KjK|%)GX1H z2(SiCzz)EzKrURx^9u79&7Egd9a1&u2s?-LFZ<P4e;x(u3_SvcrQe6|t9VN?mw2;^ z=iw>AoQy>|#YLIed$SQI@&m=UcrsQlGrsLZm0_F1I)Z*wRtGx^_N2zUfgD7BkH9KY zU}xWt2C}IK1KBbsKUOXC6_9Jtgilqxhk-2cD-CFW5_9tlve@K{8dTry0y3e#8s~5* zWn|9#4m#t%g#^hTJgPFd5B3Y7cLB0RhJ3CH@X9BurK-MAlRaK%JmpJOk*~`UU_$+m zD109}`|LF!YxIKV#{rq~rAUAo3_|?&!1JJU6=;G^{2oaDAdss|1Pa8O{u>2mdQ)L% zI<-I+xcmVG*rXeQjEH$(m_0Xp>Gja*;4Q*!dq#<o2c7F%kMEUz36M>k0Xs+gSRf1J z0dnkg((xTYR_GTLgkAZuF3^4;{K_kwCls*>20E?+GNW`LYcvtaf-U<&We^XYH9Ui+ zWx<bWJPc$;4+Fac*8^F@1v%M^3emNhMT^<PM%<4oUaog39wedv2g1M_^aHXhE(Efq z2lQxu704#@J%jRphUEY3$al|Ql7W>R&tI4PqSAd1=`daS>?yn;cjd3BkPC)Gzgqta z?pGfCyJ~<zuyf(}t(5=O0_l5Jm%peu3r|-K--`R(X_eojK-Q};Thd1PA1eR1fNbbO zAo+U{5A`dr@Hz4+O?bhAxjy}7L^vN2_cf{YXv!JY@^1mz;x7Q%LrFkZa5v&n_ubV6 zKo5bw4Cyfb0^T&|&oO)t6EMJVOhHfNAOgow8juO(W)#RxXri{4I~}rzeD>iw-n>P* z8F}H}tpDoneH&Vy=@sV|$RSV@sM5&>vLyz%97a29O7||_8pLE@XL`fsW6KTD*+wgX z9Be0AIb;caIeh}XGwi;j+jPX^tXZJ30H>W|Z+4;29t(R<@RwQ#yLT&JXF6o;Hn1|4 zKi*U2e6fuxpR=t)F6@~=mUBCJ#ybX`4cP;Jtk<Wo_W<6d`4@q`pl1Mk16Kh#qDBHk zfg9R8SgY|B`3PJD10u_6UE0whd#WRlbLjUD4mpQD2c8eT9>|3L1?1ekQ}fq%u>RHK z$W!jnj)B&ukXcV%a8a*rj<r^Fbb|9YhqWx)<5+LiLOJEMPD8oOijGNe+;5fO?>AO0 z{)SqOF$u2JK*NZ(nqp!dw^=2z3FbcNamdDP?TL<bTx2!ICOFcq=(q&OCaWYa!Tl{} z&sgwc<+F}K)}Uy&JE4_fT-nm%SYt)UCz#K{?t$GYQ*v0fuqCussT<awm`K-hXhW>J z_*ip0LW2-Dz}gcR>1u#>g;f_F>*!)NdJ@cJw_%I|>#!2zBFzoZhC?$g$D>gWx3z4f z#~Ei@y8xx8b$X=7+>RxMF#@f`ZBcIYA}iENI?vRaOKNvPn+i^5Yo3C}0;B54W+2Ao zIA|#T$VjsU8Y}6vRt}FeUxXGV{Z=MKn!iCCqWn%oxiK4KptP2WEP=)(1Fe;@k><<L zMnH2ib7%V?D`t$xc}<YD46vlVwQG#W^(5wEj8!@&*6e~&HWHCTtd%HDCbVd1oh=8n zyP+{zm*q%^bbi#qIz86oyriQQljL!FJ6g*C4|lY70lw>Kolf$Y(U>5yaB#5ru3~7T zt){WDuGbNg**V*GwoZ@pILCIjV#a%%Rh_M6<2~j9jC|J9X*pseo#%J4PLKDv26r`# z8CKKySl2p)Qf25XWt$Keh#@;!nk<CUWauP9UKvWo0M4+QCdLIKpvZ36FXl?J454fp z`U0VuGBg4sUxl_Hq&&_v+tM!d<^L=~)9B$0>Tbnc<uNB=DzT|CWY$Kxp>PPO@zVh9 za%ch8%A`nVj~-UcB#$d36hq94pA_rLK<G*t+KSLv8Tz4_9g3Ai*_I=u;_X35`MNNv z6`PFE1nFDdY&(ijinI;H3ZdBL2<cQ1QoiOzzVwn2Qnrl<DUYKFDUberFhXT|3lUQB zY7tWLTo?On$q32vnHvz|NX0O~xOwGbYuPl9`3sDf!HA&^WADD!>1iI<Red=HISy}N zNYZ=aBV8{*8&13PPei=d<4o;m#iV*%kM%<n%lO|S#P}{w0C!k_HBy_G3)fs&WK8G% z{jFuwJ?8H^N}%N!6=_~^iE?+yX_o^n3W;GR$3&VBK=VLzSdMX#uFs)e$yLI<Bn%BJ zi?|Z8%As)vVvR|PG;5*h;$zPJ5N7SV&g1Mqz&d@M$IKYun~zxQ%*UY7&y+LwYiRVt zD8Yp5acOg!nEo@hhB7XSazo+L1tl%YajCT{9j~k}vrYqsUS`G2^q5|>u3jJBjB-O^ zS=Ev=F1&etm>1=S!Yo_K0_=vSs*ZLve}y(2oJ%ewS46br@}QB!N`;s^ps^Y%gKwdY zkbdL_3{(@rEmyxe(Ab=<WpnO>hQ&B3*8Gd1=JW=ma%$yc3fDtpdMfqTp|On6Mn*c% z46=4*dYmzXt<wouLIztg!#&PJgRNzNu0yO{fUAaZGjiTC#EMDuIO~R3%Mv~2cgT$O zR*Tc6L*<4P9qY^*YQ>E3xbA8;{ClXiYlH`F+?bi*eC={8Cd=b+SS48rX3;QJNV#;o zYN3s_O5<Wp2hwHJpn&m_W+Jq!WJX-lH$YSUotPMDegsWbGZEE{h{TjpF)@b9p>f5K ztGM&2NNd*|kNE|Rs+Al`k&b>=^xOpJswivOT#s{al(lQF$8=!9W+Jk!oTH<yn0X#^ zDU2vyMO*HQ<{oHFL^bD6(3lSzVtS<6ABCfaMII%Z0Znyl;_)a)jJ3<_F*{&MrwucA zY*ZkW%dIB#-;D@yxx*HOY955fQeZy55#@%R9%^^G78(Zt1{JokJD{NvP)p1%^L=Re zkArGtq@%OdxFEsIiZ={&2FjO+T|_{;!irCfb?%F|cI9}?P^87i#`HvTxzO04h>U6d z6to1H9QV&3p{a4h#vTfSg$k78Hy0XcW{d`URCAb=@cRmy@>@A3(!3Ozoz*g-v7XBB zIcRG4=Emzx^u@$7;`}brI-Tz^U%)u#x+e#(`7Jb#jQ~y!N0e1tkYE;L|HTMr!7vIQ zfTqU;n)O>~m|NhGr0aYT9=3&f4MVWYHOhJ0C@ZGW<2)$A(b1|cOfV}(s}%t2(;QR@ z8VibbCLz)_5G@vOHQf{EMnEN#xGIVY8%UPa(awr4PB7!gsBzSu<#pc)4Hc*m8(Ig* zQ<?b*EF4)bk=WJ|<sPe2kc+Z878>h{af8O$q&b<o^WCx5=|vv%(j?#D+vCN82W>DM z+Q@<VG&FPstGGDQJRhZJFSM3}C<Ph@9AjcBUJFeXoLkFh<E&jvJmy8?l@W6lt-AND zhVFJuXdb%I;<cuZZY9t-ywqsj3ylqA%8Xpes&5QA^pc>F!$OK#e<L(hQMI1)K(ZCH z%wt}hqPh=j-@{RXP_U(9y?7L%vjg)BXq*wM)h?T;ngl)dN|d`<*@JE6_KDW%<sRpW ziB`-Ck2?}=D?7t?M0S<XV%2$L&F2wPt;Ny(6Et=bDuIp|JxLW?PC0WmG~};m#X)Fn zNz4QIwY^%UB4><q<keP8oX0GMk?jK`qSQfSA=FI&3mRv$DHs09lMMsq#}3JL=00ew zC0hC3C^r-oin9naGwvFtshPPB8k3Y~XXpNFtX&l;X1gisWz^+Xr<MIfmO*QWD0uIr z9$^^jx&ihO(Ywmoowp3;{ZNM?T1P7}E7JTB8aoIJ-S1KEsj6xy&1$J|2}DPtO2#zb z3}0Cm<%U8EXKAe7OQ8*t8XNLqXe=m-jhXtL=32{zXxOzXGkF$tl|mb2HQ@}g9U-QN zZ5*TWD75B*>*#LPUY}s*q^dSFWE(yVEy|a_^RrZI*&2`gg6XOUn@>CDRBcho)<9!7 z$i>0@2pU#=Yz15|2h332CvOhS`OuiWthw{P8CJ}V9`h)ST!AoCGb3FQ*Kz%A^2C~1 z48g8?{t0Lt{i@SWXibmdwB~_>2F-#-KeZ0r32lhfSe&<YOyq@_ozhk7;PnKC#b{_T zh^fxg<<R0}erS95chK1OXPaR7Of`t)_HM3+=4tlb4-Flzhug)o)Rv*jIv*OB61h`4 zADm^KzQtpH03!>Dn?Dr9%ut!hZQnUQ!`ijZ<6M_vonGfLKLkg2w0vfy*=4p*L*<+) zv#ni~9&;^>y2e<n4nZ3Z2RBy~*N9Bi(JGCJHCG_SR!1fnO)o)X$Eeo*9oh(J>Z}=) z<*VDCLX1gh9Fv%Vg^|vOv#is%dYm6+SuyK9*a=G3Cpf2NTf5fdRxR5)z20N~maR&I zQwG{UY>vtm3luj~Xlf#GZ+-+C`wdl#$Fe%din-0>x^ONRF`n2zM~D?s=g7<FDGkFG zmBbTbS$s_WX_2nipv72q>toFnFYX)QBj>&APH1yzcNy~y<60TYMJP_j-G&h7E4Ip+ zk!BM#u2XX3G{-M!**vSEvDm1@`bcvpG^|66SrrwSgJQ|!W)eb}Zd_%vqZ~QbvO7HH zN!ZxtC^QZam*=W+A;+n6L#`Dg5JekhBRH<GYDI#1eV!^=S9yea8yZ&`4AYoMM;ohT zQ-U)&-`cgwW3J3M46HgBTZuSGG(wAS)~+Z}H{Oc70UE1-(s?7Dy9%t+)gIR=7)M!6 z)v>N&3)$)nEk|gq484MoVp|vbY!eYu@iro)*u%|i?;_r{F_m0|R4UIPlp<{b#Xfc- zLOK<MRJ;a+RC>J^`D|W<RC>=Kq&)sWXq-%M^kQGUN`zFr!_BtdOLTf>HbU5)btAnD zZ7{SpazW_3R5c6wGA*h#6b^y2bN&ffxI$p{z%>01ni??BTtiA&BtG@oh!6*zn(s%U zab-}eSi~~Kf~NMb)zBCd!xsH@02*f&X5^75H<Zhv;28xb%FyL1V~k^L{khPXvD(d^ zfyVU~g9=;5Go^-sa&dHwigb=Ivtl0bIBzPmmI1ykvvxh;F&CAq0gK_wV`I4$^PtCl zZ3X5A{LWT(H!NHLF%mIEPFGl`AN05qR-#yPd{-dEHA3EWn=eDVR%)Ed7q0Tn`8@@Z z&Izlmn5`byD=<#A;va}LgIBBaW4}N%W<cXGg@&5eKx<wET>pkP->Q2c)>U`CVa#L5 z9Jof63r&a>@S+=3qha?R73sPf8fJ4*T%ZbI2YizuUpZZ^ZbYf&-St?6)QXLr(RBkg zX@3==E1ToDxrsxGcjHqLVtv)lya^f?BUyXbhtRHL;T)G+(T^p#R;@LRSyudGv98Y% z!a{=ztiRbXu93Dc5yArwuo1U#G9YB$gb>riUCR1M*Bj8rO0Up$I^>+Q&RVv^<LG47 z?nrRvS6Zicc$_;bt(eC>uJfw6=#)MX>&&dOcERup46~$vpIezLDAy8%#>vnggjDLc zt=Em}I^7)FxPgmg)1z^21a!aPJe+=;VT_Rl+;d-~^T=&h%)dP5FiUl$yn}R=LPH0m zUWX7;bzO72VWdmj7YI$4q4<p$e=>9{LRVRJ!(*MFZnR>a_L%MOz$`^Bn2iUc+*-lC z$Ze74c4#rO09^1p2w(eiyiJ70J`0cw@{`b*2nH^C_7`eaX>6=BdXp9NtjAowNzE5| zXmr+XvUb53P_0IT>|JMKwH33|<Jt#fk`=!*)^+}!99Ilo?F%`otmvHyt~a2gGr@%1 zh5HAqZbYnk9YPVZINVw-Xe>Am*lQxqeT)UIy&UcB?pC863joIc2xw8hf}6{rF=iV% zOFWy^kwVTA*X_`7SByi_8wj!LSYGBv;^BAn^9knE8s93$W8=-x#v+DVw7!5g4w`yW z9Da{)mt#qnYYpoPw0dZaiR}rqw9CCdEpb7V8w%$Xk}QmLKL~9&w6jacSFn)BXvV3t z_ZD9Rpg){5wpcN{J+3=ojIx>*#G3mNx&o2aav6A^uk0*C6f`c0s_gTiamvaAzVo5` ztX(g9%+FwC^WuCn7xz~8t5aDkdH+-iO^pk#*N32SsmEiY;z)Dy0~n*wFuK-6IUcZL z_IS)j*havnsvP^Es+S?VYB@A!j-m{Ybk;s-#k}k>w>*Srz%miEH1^`!mlMo~wyI4S zhbPqF4``|g9JYxM`<BT>6sQ`SN)np$gNLotuXtSH+t{_G(__sHgg6|q1z>-vhL*yW z*ZmDbSHXU^y(1rKj)_e2p|R1_^Ok#{O_iGCz9=`8Bq$h**l;|L`UX8qx&j(G+=yZy zc^}$1XsRiCJ*Ij^ZB*Al<A_pc`n#dUsx+rZnjb)8o!qj~25tA%kjL#jXq*?=srKM$ zKQyMIme3|>)2-5X<J>!ZV{0Xv$kG~yBsQU=JFI2(9<%%7s>@}^xTZkE6TVD5Awq~1 z$K7Nm&SlWpndq?SNLM2?%wXIM4|}3{#vp^`(5^x(xgk5>dcs=vmd6$JBu0wW^kA&p zgAfO&ZtEXRHw@fu<@wCqepW+{Uqc%S4lRh3Z-1(}J)!*sZFDnt)zd9wTF`XMBjzVI zt?x62k=X1v2io{%?MY}{Ayj^@XIrL{0*wVn8>Qj-CbY99+Y7C^EUwU<d^l70cAOi5 zDb2|}0WGyz8}gjm46tl$#R!8ov6<TqExB21TdOk00R+eBYoMioa|nm&h;r0grw@9} zKVh6sqrByux=Zz@)LiSK$(Ll#*LPW`-^HASfg6v?dHC}!E3z8e*>aqO7K51T$UfkO z=7j`}nhx!313V3_x#1i?StW;tyX#uE^DWSHkKhULzw4}B?|EFtZqCej+=^U|P`oS? zJ9;6s8PK}O=MJr3G>jF{FrcvZ-3pCsqdKa62#qru9fpOu<4dZ9l5>xO#?qgi)n%}- zlwB;xpHXfoLz-PX?ZHbWsqH}lDxk&6h<xzT1dWA*8y17~ms^hZ2cQiG*G{fY??Gdl zIB-TsxnEK3+(n*kQ=oD9sB`M|&^W2p68*B))IFT>s;ZN^EsKIiKXo6O2kmT85?@oP zfWt%2a%h}*I6GilJOFKWa}I-FS25K)iz;YwlEVSfVOou!B$$);s`zqkG@pUScEzN` zH2fVJON#{<uXe6@gZn>k`ff%DXFuE)zKsyuT9vX@y=n&Z!+qFtppBBbv6L&IF=e#@ zJq?X1L&F{FkM-8BPd(=4Z>r*9{Gz?fpy>v{iuW`$x~rA)KhTCtcXt2ix0HqkcreNh zWdtZSCEkIiMlzSpHg78p<-_5B6tu~RiGBk2CNw6gdZx`j-+7ETrdLDb+(Rv~0NzVZ zE`Z-66rt=`_Rrt1W<7=rPEre?C9Bjiu%3ga`i}!E{D5yfuACm_hBCT2;&;$SHf!PU zsJWz)d>q<1nVkbkHbUd7kD~!vEAgOD;|{derX7T)hd&CI^ezsP@KY77gT`vBY1QtK z8siuYNb_oF94=@|5$W7=$XfOd9<ad37FD+#o&Jq~O$bem?nTg&pke;PeK#~NxX`er zyRF)96I@O2!`q4<6>ARvKy|NLtQJFylJ5$3e85*fuHRt5lLx%5nE9b0Un+Evi$Xm# zCfZq!kuHaQCFC8?L})CUdLgnF+8}5+mNZ7Wp{Qymvgw*NPWtGN)Loovf?J?*Dyvyo z2aQQW+Zz=K1t-+RSXbi5EM4iESaUf-S0RF$Fae+FMVd>NbJ8c)uHznO+Naj(;~sP8 zr>bq`VcKkh#tDFCM4!Zd<~wMhc&-J|Mp#Xs;GrWz%wEQFeM5~0aI^POH5;%e;k|q6 zQS0;%9#g=mB4dYleF-f^KA*bsbKg-3g>u(Gn}8&nS4Y=(uv{fq<CrhhNe+EdAJrPl zb-sujPdZHZmn|zWAKKNjXh_xd12pt2-fx6`)v^?s&@fj{#<>yT*i~ngUl>V7ANaMe z9hgimv<b3ZYY`eP<0sCGG|xbr>dVZ$<{O{pSRUnu!uqIY{S_JujRqSP>Aw0~RpREl znwwxz#o!9?IW*M?oHV_T`PvD-&ZWn!WxsmNH(|U|mE-HE!0+TJ#lAHbq2}tCw?X4l zg(Du`d%Xee8mn$@tSkI`4j2yNTM$yi1UJ{_$IwO~KGu_*NHgR=zN$JNiZo|Ki<23m zLChLx*GP@S<VR?n@|d2`VvegZtya2a&{$CH**J8*1dTbMRWKIXpFm7Dt1AT|9Ny4R zHzTA{X2TzWHr1+&iF5zpt1lbqCTOE%GN_pOHna)8?A;ffR0H5_<IdL>RiGE3v9L-D zJf&70HQr}KySACz1&vcqHOGITML@&)lpg7t@S_|+c+7e`LPKH4X0$2Nx%WqF*%=S^ zu-Y>T=BS@kOQ7yJ4qp$A^FXcgyP>g<)$IOLYuI<ZXu+QqhpeyztcJ#7pomx%o`I%1 z9!rb+4`^)9vz3kiMdhLjT>(vx04zk$YEF&GlhB647p23hnDndO$i$xW@ZJp?8`uzz zu1aIc)gF2NZ@vZ0adVU#N~EM58zNngK*OumxLD_Bzlmi54v*RAci*tV&~VQDU7V(M z7pyFnTI)|jV^gT5Euv8sL~(PVF=l|+)5Q_h8X9AseO>sG=F$2X2^~+Xq9G+roITKZ zYQk!S0sJR4HWjLiX7v2g^6+>IG}RPbc;ADjhB{+*`m=dbK${GWCBRD=tcV++VK*p@ zHQz!g3U;jVXy{%|suR@R)O2XqfJ0ZKjK`qOQsuyen14o%R#__N$7e*0iT1hpFV)G) zV?H!hI;0)&$X|x|!*s-(r(wQaX1NlTjW8VYjEaNEv)E{%aggKaaWu*eg>8tJAo%Ae ztsM?Nz{UfwF$ggMH4~OYW0xaO47wMgsbR*Jbm1RUG6fYg78+y9TkwFJoDM5CF5Y}u z$B~bU%-^9UNDs%lNHa3P;XA%z@yOR2+Atx?4TY6MQz?b5h{21t?umbLsg@3wC?DED z8F7z@G`B+Ikd#B&c{EVObU?dZfq$II#IWF@7ZyWfsgX2Ndkh-W1~)y@{1O`bQN9K@ zFTy{~l%vc_d?3<!Z7Z>>BT}<q<*@;^#*39dq2ZW`b{pPWrNmQpq-!a(k+eIXZ!J!D zg5NK&sI<usbwjh7@OY}iEp~MV{~RqySB`i0uh6DLJ3FSY!awzlgGG&=&Cpc2_socL zL*ZJ$PQt$sROw)R$3(hELu1{~rn3eXwvn8+t~aPzrIm55@h?JC7}58d*UW{58LD+* z8#L7;7;dgcXxJ%d#+r%kRC350&AA*J2Q|71U3vf-ebnUY5af`%of=9DprwODbrG{3 z8goaX(M8?xk4mqFhC2=H95v8JsF>*R&!EjxG12@<_~)asd`;vUi+^yMDnnZknj%BL zA~aEkMt5=;<7H?)LX%|ZC_>3H6wz77bCz}%%Pw@pl=m^@|Ac6`fR{krkU<a!WH5vm zF%U8g;)GzqlUGX&fCY^${jlg5)X~ZEYKin84q^I<@*h{LfMJNVNC*B$GpM5=y#6QH z8u7<VFFUdvXm6R{M9u#LmdhwDBQSxhA;c*V7JRD4X+U1Y3n2@s;3BfY7D4E@6vC?| zGMy4>RY-jq|BXGbWe^&cQ^C~|*;5sewvbyOjJFQLt0i`ZUL&pl1JwEd&mI3EBeuX6 z&Ho*C1NWTf%YA|WkFdPCB>$TNuq$eHO<E%DyR@Ci7O8{Kz8k`e7{LDDg8+$_A-srm zcn!i){x*bHOJw|g5aNCaFCu5tJ5+G}6VmS>BeDNwKqC`41YrT*hj3JX1mX2}Xu|%5 zWbMcdzSMRi^{=$v5_{9u(%{osfNvoVaXb{u1kE_l%c~`}f#qii%l)gy-+{b{%oj%{ ziKl^#hog(cGa4m{Fp=3}hn5%7g%CC@HBAtZ4T8mAUjKxQf~8-kjfGua|Aeg&<2)U| ztB!vbRsIGIjM!aA_&a2Ydx2+7FVgXd4EE7@vBthM;vzEGPh)>=Co-L|%QP`S6GRd| zd$_hs6v^?r$0D?u$c^R-AWe}Pqp08_GPxLFC*XK(|G$8$#abr7G$-hcQgjAH&ao*# znx<-dOJsvzr|tiJME>+i!yop@Y#?ixr4wq2w9nCYA~VbZaxCTpNfq#qM%s(C{&&dq z7L_9cYqkQ&1Xls+vl@RGVGWi40-3>0n*S$khj_Q^crB5pVH-8^PsoA@9gpY`@qHZK z#DqQ$xBOGilH8>u{2j7}_km{<Z)F0&hjskFL$<^Y%@Y}XT<b&zpTHj$>|efVkAS?0 zB%anfk-=xQPGo_f(>jsycWIqSz79y!Zu}wt5*3XM?!h18%Z^J`;1wN#$l$A5Z;1h- z?qbY3GWDANCuG;Xr{fXXke_J1CDPQO?Jbe({@2=0WbhkbgCQWVmPpgL+TIdrI)*>Q z?=(+j!~93vk8Ax0&9}t%h}Q%=8`f~@b&}pR1ZZr<)NuV1GKyQrZwq8z?X=(DA=B>w zo>4mKc%4RRLl+<;oUaKY6YQpSBJ~S^G+n6m?!W-iFhZ}N7eVD|DVlNq-$m7u|951} zc8Eg-c$63pWW5tLj?firi8PJ!^&}gV4x@EMA`={|alGayXuc)(K)iW6-U7|HL@ovk zHD9c8iH^5K-k2Z)4J^P?jU_rlOC--9USti+bUdH`-ytX44LbhKKu*RxfV_N|><j!8 z(r1%){3mpZkkJ@Y%=dmoXF0b5*^rNDeTPnlNd8|y*6S%CSJ&q>Po%vT$ar-?QZH)U z17!Tyf#lx=GM{};9HKZ`KZb!Ve-y|9eG8<+aUlLPe&8RCOyDQ26B+M!ApQOVvLH;I zQJfkBfwa4rt40Rh0eW$8Lu112bOa)U9kfnl0v$DW0y2XxT0alSi^u{618M4kKlBTs zqLF?*p)<ce+|3x_VvT)uL?Z3|H1^kaB3o=2kO@U<JCPa3X}u*fop^2c$8vuIbvk&o z!~X_Zu;DtLM2#bWtnrmPU5(|^z}whKnrMkE$kp235<9{^8+P)UK=%E7tuN5=iR5!M z<^oxOg<3BJ%6lCZz_0g7!#^XVEYb-q22%I^{^~y=<E_wsrBrYc9UOoBomE~fkxf{k z?Jbe^Rj{+gDwzPVO5?3MeoJKh4X|@>z7t6OZjCiSd79dSKnD;{06B=B0pdU7IsVbe zjB2(01t9f0jk|%&U@wpv)B|}D8ShOX(><X1gIa%|_qy!625tBp$b`NJay>W&WP(2d zc@Y`^wAP6XHfg;jGUGF_)1Mt51PI~)up!!?5juci8l8b$c|(D;_X3^=yj<&70C^Ev z&;)Hy1Tw=BS|6qL(Li1;k?D@n_AyMDj$?tW*+d|l>KY&mG!4kBCF1sX98SdT#yi~d zY?p>OOd}o0d*6B5rzO&qgFj4rA&~ka{_#Vmvsl}SEbLMsO)IpW$g-6O;z=bPDl|c) zzEa~VZ70&cTI)n6yoS1{8?R3`H$Y{tuhY@~4w+1)=7~(^R;?2mwD5=Z+@$R-k?GfH zdka+CKnsJc;1)z=+z0W889$^QiOl$6t+zzR+ot(PHEsv?hJ8Pfo%|k<@!r??L7?7- zK7fHGYyfhGe+y(r-vN33Pmn!y9Dc-;+MmdbPXTHAMeDz!EBRv2xESrmrVGO#MjSvz zBlSx)KS<kKBKg7EPGs;3{9%RSfaK#f;@=s`f+cFbd;|i#h%DKaK$^zm4;?3HOxBnJ zWXoKo^+`ZpL}oZm+ppDnIuQREnfSvNnWNDQMEX;W`P!g=TH7EpVgZl^D%ScEATut} z_EI1(BIB*pxQ2F7IYi%o-3*oWxP@ko)Yn00a#cWPw*kmxHfp=j_B*w`M(bOE^uJH* z4{Cf^<D(jPxUj_XG0U?sFr(*yyok)`1t1fu)As)kGMyK7d?E|}vQFm}jjw9{RhM33 zU)P3~$O60xI}>~xNc|lhuO*UySKEm!@FA@e$-k%Z1I_bC$r<l(mJWOb<kb>6$-dI| zmdFIZ(SH2Z3|=jfHU3`PiGiZ-D)cnnet}B-P17xr_C{_0J7ltdYW|;)>73E=i1c%` z(oZB2kk{WKBL-@o$Odu&X?JVg)I5=V8?CoQ7NDKBpGCcj(Lk;<{;)^S2Qq_Tt%s1r z)e>2mi?qEZ(yuS<9Kzv17AQi;BeEd;*?HOrmm|RSHA)+zHO2sW5g9R7>qKTe97w-0 z8dJ1=veu^q={Ez&!?zd6t0l64<qI|OzeOh6M+*yf34{s%H($o3*xt&q>0%(V#z5*G z2(OmNCL9i7yhI2uiRWI%oqHK)oO>B(?7@WK<an7g0~e8#=`{$Kjkh7ZS|a10dl`pD zIQKG+L!;$OIWFwIFh02MUc_;tk->8><8;HEdl`4`W!$-!ae8$)_cE>(7E7*|=U&Ef zw~#OY)XmnpmvQG_#;Kdwb1&o0y^Qnlwggv8<gz&&cJ3wTUdHhy9UJM~%eZqd<M>jJ zv*X;$IJUyMmvL&1Johs0+{-vTqTwcS?qyudmvCqh`Erhn#krSpYz_6Yj_q;oW!(So zUdBcLZ(qVK6v2}n*Et+w@npv|z<ve&u8~@qg7+0fOp(SL6dX}-#Z+mmQt-6`&opVg zL%|6JS6(ZPH41)Jkdi8m4=FgKVCr;f+@YY=45_6ncveCC>m1YC;gs(%&U82f>@KP^ z91~E1-Phq?3pHgphPPxxMAB@@=B0t%KHJXr6pe}vO$VEnX=i(jZJE+{KiQxxJKIO3 zW=XbeCfGVZwy!X=B^xmdY;LyQx4)=W>=CjdbL?!G@XnFGRT*IS`LUOZ;JK3Z%m!OJ z*X|oG>J@u}Z1_AoJ5ZF&lfE^XU>p3{!6M8n*_14>m0r8=P;pqXXUN9Sx3j~<+WFFV zM>g2wer%+OULe`@Ibb(0u=_@fV~TA*7i@BlosAXMIgSawKIMz{IB}|lg<~LIB<1?z z7;gTvNsrj#XGsu^Ei4s?Gh9r{JL|=i6UDZ(7AMmgAsqR>I2HW5iZN28He2L}Ym8Ci z$!3e&s6d?2!YuH4Ii=T?BE!!zM%1>j@V<4d=(N!16)3%ugxAk9PV8x6VP4}!aN$`m zrZYh-Y++%&l0|*9Ma`NN(Ywg!r7ROgiJ#>vanR2)NrV;Ky{;B3n=OW$<(VuF!-DyE zCZFSEk*_xcWy?$vYZv)aFx<ltf2ugz!qN+tX(D>@**Gv5*NP1-EbN6;aqO%`_SAHd zxTM)jw%!a;-E2{Pcbz!ZY*BreCX$xgz0$>&W{X><GgCA+TU5Wy5|c`NUaEgH#I|OO z;pRVPm@OR3d~pKhKX1qssm&I{&3?%ePc~Zu<v$|H7UpuF7o5<Wb3{h71wOFM6}8P4 z?8>mr6P;H0yej0)o>zFAEvkR#i#>jp1tPfA=cVH0h=qQZTv6|5$rHWH>|Xhz#LrS7 z4*FRZim-CKSD{$xXDJeg{Vc^|aE0A#kyz_zSuBqFS(b?Cm3FVCVuPQhL>z+!qqKb~ z*PK<pQL5Tuxu{+x+1+HD{Mb^Fv|6%xWnj0jw)>WgM#YAfgH5~M&aM>Ou9v?1$p)>l zv#Ukw8p)PbfUWam*9h|l$wsUMn|p)Z_eN2x*dt^^ZnU#&h4)73TeS-8K0o#r5qy(m zJ*&Z%-emW!6!nTdK{kA?oxN3*td+hs*Mn{FV>gJfn<bmF25jZcc3(>zR_qzF@weF7 zjbiOB(s#!VV2}H;LPW2VZ2FC0H?On%R*PebZGRKk<Vrhxm#D6kzPrgb`LUZt{dJPf zTMITk&F*`TC`prS=*?go{MaobEM2nu$yTP@eeV~C6<c--*!Y=t_Cc|Bru2<i2lluh zyH!NblI#((n`ha5w~3@G$yQZ@-Ckv99~F&?^;CgPyVcHa7u#-?z9+~At+%s}i`4a! zt+^F!oge$8FgHjxWj)y34R+tBM6F`akPW%b&ORf&w@Kd}8^G@KV|R*ROS0*=fi1P{ zzO|xWvH0y(^wI5h_IXiqyY$^nw!x3B6JZ-An|C|d%8hp47sX-4hHeBKe}|pjBi7y_ zefN_+?#I3&qJ?D3?f|=4*nM9U#}peOz$S09vwKDLCh2>GY?B{bFOsSyTeS)7_G-KD zTcT01o@%gZciP!~V%we4_XOFXyX@=%k$RV8YwiSF=f@rt=G~G_xeILW-FDwYqE@kI z$cAjTv+oJ-X6d`*Zm|3O*bhW-jbzg|gDtJG`yLkcifvy5HvAqt`>`mwNBZt2+u+AG zh_HJln|BY`%6sj;pNhkZ4ZRm^{1!WVRIJ@1efN_+?#F&1qVJPz*%q*y@3Z@UC5|aJ z;y$p+_uJWTMD_jB_Xyc0KlYeNdO)&O_k-R3fZg|d(WqF@17Oo0w6n*>wg;u}39>;C z+1VdN>O+#Pc@S)!AA3reTP2(F5ZK(UcHf^wtzyrR4SCqk{vx~&OWz$^!S3^8e-pvm zB%A&)*wSrw-$qfd*!J7NhCgCw{}3gQNZ;LL8^EgH6HvQzlOYB?>KKpBJMR(Dm5<tK z{AkigiVl4gbo^uXv>jsYV>0diWRLr?0U~<4WXm1{yLr3a*CmcAHex&2<Q;alwW!`9 zeUFfB@?%Yr^tfcJc7WafxZSs{XjH7{aj<Dm*x4Yl?Fs37f^5)}cD92^eNwVDPk^oS zV>=1+Uy@CE5^V0j?7m$@tzyrR4SCAWb`{>Ir0<S@f!*iFb`!x*OE&!}u%%DieS<~4 zV%t9rHvAbo+g+4ABYk(1ZSZ45_=80g98Qt<jN^Q<?pX(akO&7|)&D)kVX_Vp`YhPE zop!djSi4iQ`=3S1$9LNE?IWU}lWf^eu$!N=vwg)e#YQ{_Ho4Z$_7~N)()S42CO<Yz zB<+%HRV~=<yX?M~iblnHc7aWM-p+=LZO=>J6Ju(Jb2>I;&sc^+(?A3Io>b&^ea z0c>ua-FK*{RqPqEA-nDDFyY-TeRtG>-RH+fir^O|o4y-t>5F#XXi=}&_Ai1Bf630q zijtS4?{2aUer&u5+auY$m%vu;vHK>7!-@^v12+C;JDVuhzASzBlRfUojug?aNVe={ zu$y18`;HdJ6dUmh*yLC3>=;q~s`NcVw#ko85=pN~w(3=|+h4Q$ju(xJ^}Gf)?R7hw zEVjKaeNT`L+G}SgiqyT5t$7`6ogX_%m~TinWiQy=H|)NXMXh4bkPWG~vr~k(Ui$8M z1MEIOcA5x&Q?lvxU`yY$`=*L|#kPMFZ1`Jtc7`Z<OZx66+u+BhiLkdNoA(yj%D3&l zGsR)WhQ19pexIGq5Nr2I-~D8d`>~lKdcS1L_JQ5J-|m|&jwv=`KiK30c6P3)J|KOM zkZtl~y&~xy$yOb3Tp)J5<49<^<}476iuJq$-?W4Flyk+lgVOf|*`RmrY`#c+SF$w+ z!Pfb)3x#<|vMKL^%{^rIEfTegJwrC+-*$G9@cvu+?l=T?pC7wK1ivTQ^nZgbeb4S& zBI*^}{ynha@7vksqU3$)yPIr-A6qKIK9FqQ`(P_Su=|#a!-@_40Brn+c6Oy$`=Rgd zTs<*bC5|>*)bq2|BKoi|j(To%z1YxfQO}Lmh+{1*z3?>U29fxY&r3dVF>VyqEi8O) zbdxxB)*_!9trbZhH+#wFJvWOj%@+0C=oZn~Y*EjR)`>}<*u5&nwq}cZZd4^44Zb+) zxzVj6wb`Pc8?6^lHe1wlqYc75a@LDal5P_j%@+0C$P%^97WLfdcG2lmpO<=Wv{87Q zE$X?^9b!+jMLjnXBKR|(mwIlrNi1x(sNJ?&)caZP6upo7yi}aKL<ua|k#~Q_(Q?$@ z<C{g;=W4VZ<!Jfb&fX&qD>n3Vj+QU%>=v>13+cO`>~TN#ei8kpWXrw)yZKAI?}Or) zVk5o;oBWlX-72cTlD<dCHu<sJMAFxit@;Y=_OI=}kBUacdcFpm_Klt0F1CFmeNT`L z`qs`qE>gdhY|S@d>-^X!g?UV}Dc^$4J!bcPO4KU$4B3$H?Cdkb`<?XNaSZG}KX#`G z{$8@_-+?Xt-tJo~>J{7md$8gEv9r&MlK)8G-DDg5*g6q*94t<2{{dTh-0u6LI7}9& zwc}vpPuST#V(kgZ?k9WPk9|c%{~+126JR(0VE27Z98+w>4`7o|+S$FL`lR$dLbl0| ztrtnBBwKY7?DkW3-?v1gVm+t8ru}GV_la#kO5YP?gMPBJ2Sn;mlCAj>Y@Hu_P?$eU zHsvR<xj)-|4~bgEo*^6Zi=BN>cz=<;JAMYc&yW2;1pg}8^k2Z1{%ZF<Eb0~8{#UT! zzuDQ3Magf{cQ@GvKej=H{Vv(O-@sP>Zuk9E99C@T?_lE_?d(ypwo&@-CwttF{X#^a zmTXxg*v+TyzF&!Bij6o8Hu(=b`;DmnL;4;e+vLX{6G?wcw(1YC+yAutelHpo>-iIG zT9chUF19sE-xFkm&e+)>MCuvI)--{w^J7m5^DoJ!oB^Brm)-X#QLET9U^j+1ZLcbS z+30n0p6vJw+&(+^n+SH0+?eh}-#YAMqo|jpXzu_U?zFRih!UqvcQ@Gvu(o??hZqpx zl=sq3(3Jsp`Y(t0NYSAIpyLDWX*<N)K$-S_vd8_{01@qyY*`@K%`UsIOB_>dgbQqP zD?8g-RJW48N60q$v8G6BE!nD8V7Irn`?eL0iuJSxo94E&L1LR*`ko*gWZKydBGr^^ zjT>y8AKOWoZ6upwg3WDX_w6ET6?=wkNLxGGRe0M<-yLnh?(<{2iQsmUO>Yafw4L2I zSkx=FeLJw>L3XygC<&6jyU8~Au^}R?y=3!(z*e@m`}P!v6&u<fY<veh+gq&dAbt0f zJ?_W$5z!qbTh;;W=8ksXzT%i-BRYaj?qp~Ci|S6&_Xyc0KQ>Gxb(U;ZC$QT)+kGz; zjf(Yj2AkH!&W4L^U8L^`vO(wB*?}VUJjvE{0bA$C4i;ut$)=nKHn*$Ycc`dU>>08l z=iAv~!h62--O&~7K0h{61b35c`uSi>yV-rCMZIF%cLN)Kft`&NB^OBF-DDg5*mw~Z zEZMvZz*Yv^eG|lC#fAohjla;&CW^HeO5gotkNdGBMRa$`mR$&Tb9cM%XmL!j5#7Ni z_pq~LM0F48dxUJ0ADbkSLL^(&1MGIcg>bxRRIDciY+9&2<z%rfRQjGE8`RUzP86v< zC0i2;w$6{8B+OotP3Z|Xx0l^_vZz(;8L}b0?d%lc?Ja$G^a8ujkDVrhFOqC}Z?L5o z*?m(*y<*#61U9^not+^{`bgj1WE=e0G!b^OWb^uft-RRoJ5wB1Z0N;c<NMm#46(Ma z^xaSPxF4G-qWej<tS{Kj{p`Nk;+SG1`hiXEZ)fL<>i*LA2-zk-)+>@Ok!)3eu-h-O z`z{cTiuGIqHZ9D~=8A1$()R?}paFI^U!)F@Y)u&0IzM)yFfWyC$^fvrm)d=cM6F`a zkPW%a&Mp$(%cSp)OTq5*W0#2FaLJ}$2DUWZ?pq@2727@>Y<Ps7T`o!@r0;IB4SsB? z2pcHbya=$B1MR-$;;>>v2ZD_sWM@~3wS%PZezM2?*wrF>uw=^yf!#dV?z=`DQ*6Xw zu*pO0?2V#&i1a-|w#koOE0TsvwrU92?L+Opw}?i?dWM2cyWGxJifxxm-xFkmhS}L$ zMd~og)?5y@&X3(7%qt|DG7N0)6?R`s)GGE2*^o#(yHVhybMkz31=xLltPsIbl1+~U zTN-8etrqo)Z65_TJlf9QB}$^D?{2aUe(Yuu79-ibXt0$rcHeu%Va0~VfQ^r}vs=X4 zSn0c;>~TN#ei0of*|J!$o8#=h4~k=ojfexA9B*g0it2djdxUJ0AG=K?c_dpE4|co9 z?)#`{RIJAXHZ8%<ZWr4Ur0)r`LBs9r<05sqWNQ+@*7>nd3Nul%DZ|0$Cfa?U619pw zLpEfDoqa}lM@ZitiD38nu{%ZZNXe#;09!iJ?prJB72AF!*zi$y_IXh<O8V|5+u+C6 ziLlX<%^L-_a<tv|MR8cMp`*dZUukFeh_zQr-~D8d`?0Tx=rNKlyAtf?F?QeA#4*K2 zi~*ZG*3Rw~)nlda5wcBwY`sWIl5Evju-lXDzHf;}#d?y!rj4_+`^2_!()R?}pz(J0 zfJhxL*_v@+>-^Y*!ki%4l<{D5C)j-tiCV>;AsdoxXWtXvWa+zO0@!_i><1z^MY8G1 zU`tc%zK2D<V%w*H4WDRdKNckurSERC4SsBc2)jzMc@x1_US;?FR2)`p=v83jC)wGf zV(ld9yPxcFKlTd|eYIrECV}02wcYnCaZIrhSA$KSY-hg_)sv;~5wcBw>@ksajby7P zgWZ0O-S>OZs94W6VAH19+2dl{6zO|{Y|vCY`-4cGD%qMTVC($YQ^K4k*_5eZbEnyT ze-gEdJwrC+T08rT@Lnr@cT5Aj&yW301gA<i{aUc4sdnE+QLotcsbIsW+u1)v$#m(v zn`{GE+a0h|449$rfTx45oMET`a*B@>9XbPa{B`!U9b)ZuGVT3jkNdF!B05d7W!Hh- zoM!iRiDQb5NCTUkZf9GI>U8OQglv-^Yl@_qlC9zsf$cNxzHLRLVm&j#rp>amL1No1 z>3f1~P==lDAW}0VTQdu6ogdptn6o9Dk^we%w%xajs8#G4vLTsvwyW@FO5Yu`!S3^8 zyNTc|$);z5EzPp~28(*dw$B0^o^5Bli;`^VyPIr-9~&aV=14X#8*JqqyKhf%Sh1mV zz{bzDv%SUIxzcw(+2ej}9}zuIvSo9@Zk}iN?JJHcHew#wWUrm=FRH!L_Xyc0KQ>Gx z&6jMI7wq==cHc`yqhdYt!KN*+v*BXf0_l5#Y*3D!9Vk+BBwMopY@HuFSeUtzP00b9 zn``$SDryybhHOZlogF5;dD3@BF4%p3Y@`Uzmuz|-*wTEvZ?vdaZ2Nq$;RSX!R+JP- z-`!*z{MdLAwotNp1z;-|+I<tmVa0|n1RGyyXA{NRLg~Ao>~TMKq=+t(Y*``L%|&+K z(c+k5BZ|N#7u(q}qPkf69wFQ0$0muSMUt&52D^Qc-FLibRIFza*tErVHd$<2EPYRq z4O(JnCyLZ1lC4<`w$6{8B+R9fO<4jqcd6ZXvZz(;8L}ZIc6N&JmPp?nOTq5*W2cGW zWs*%V0b9Dv?wcy=72AFp*zo0cc7`ZfE`4{CZSZ5$MA!<+<}C+Xxx(%{Qyf-o=nAm$ zrFJ$$tSyzk`^g^nV>3l`nPkgK!EP?I`(}${ij61(n_O;Z=Zflb>3f81lOO99NfnZ< zDhIp0!tT33G%D6p0XA)=oy`^7R!ZL!WP?`O*?f_@O0qR8!Pfb)3x&B_vMH;;=B~E; z7KvKLo*^4@y`5boyw^+L9jn3a^JABY;5Cv>zaDJq8oO_as8?+JHDJSUu(QiW$qi2Z z|8S@`p)16}W{dhiHcCa<jrKTYVr8>M#VHqun=R_SXN4Gilg~@N8(k^ZHe1xYW4vE( zwx~DGt3~u$=LG&Eqlx0=ea`2sLD7Lb*Wc{C#>r5d#oprVqGEhFGf0G1IZyZQ)L#A! zaz$+?gTJp_;WY5;!H5IE&p+ZfY(?)XX98Wtid&s-SL-hLspXvq?{=<sh;|#C?%)I6 z<u58q$Lylni@Z5mMyDQd+?i41{LQfwWr%a!7JUJeaPAEfWw$$jb^UfJa%C#59kNtU z4U|7KR#7)_=l;8$)1^`Td56<&_PSjDjxN7&mpG6Wx?VcuW)v>S&cZK!M~eNz8RP02 zh0isp92x29ozLCroaJyi#^@R>mo>QiZfB3K-IL^NZdu^DIr+0$(e69<-R->9;RxQD zR^u!RbOi1^c%QS#;fl^gImOD`o!>CklcLu{&Oq0-^9`dbn`Mkl^yHgPw{jSx$}O9v zq~L6O{!O#o7JVL_&+ohxzd(;>&&=^g%r8>^GyB%1qWvSz#X(Ojkv&jRybMh)4hrW$ z*H%QA<q<OLS&yPeJ}viaY!>xx@<9*YhM(?4>dyoFoNb+@BpuG3r=E1)Xu1~fLEE#A zJ!y7Le3`k`zvvvg6Y0b`n3^0!;+;C=R`4den@N2kE9;05uf6DuZL{@V)qxQM?|9ld zp9%H;>)&c*&GzOsSM9_1mF+07NAt)Eiu^#CKLd7aIc`)D&i;*3E&R@2lw|48x^LfN zcCvKNf;V?Q`-XFb({=JMl;>=X?`4#rg2L?LVsCcgLbn5B7<G7FCf8=RH$RsHet3tS zc?X=6BX?fYIzTLH6SXXWW5f9D2Jy>^08hx7ztlxrBj$+%7)S+IqnK10&?Ww~Hq+6R zgkk&v8~&3~J8D~#j^~1oNhYr|VhfW9fG<;S4e6#BBT(Di&@a?Bm$oq*OgDM85~q+v zxm#0hVLYKJ6E>Ej9psd@wbk)3?~NC9P1?bR|KyLPzNl>-bi59*zou;+wT(4;OWQiZ zhCIsU$Da0SV;3Ef)f}sB=V=>8zA;YQx@y~bu#MNY^R=xjY!kGto3>$G8_BS-tuBC# zG~4T8-v=Rj=!h4<n1W(Kl^=0v1q_B<&E~+>N5^BsPS&=IwGC^VF+<z>Y8xASrndEi z4gVP-kXhOmR<0w4!kD3r17KsYCuEMcU8ZflVDtS5RD|~J4I95E!)u_nU4-yYtS+uW z+SUi*KeTNyY;-BV7=QRxA2!KQZS0HiXFB3A?c5KxceL#aZR-!)J=zwjZI{4yFKleN zD4kvy!drB_7#(i_Y)kmHAdcNwZNy4%l<0_Y+IAUiSHZ^d9ItKR2=hZ>ygb?#fpACI zIK~rTW9_h0@I#~WS1A)=V<iVcG9kQ1v;UdSV8|R=a9ybr9D;CrRs+`<*zg~}dTexr zjk91J49o<Zj?qcSo1lG%!B&Rcuwfd>+I9uPpKuc6O3}7R<Zm3&#);a9?aBC5+pf~K zXxKi}wn?xt;}{5kznjx)vbMz{%-@~I4sA@)wm5_jvg){|>Ga|e-T)i(H?Gx255k!` zVyd<!z{al>@S3h|!x5eY8>in4*hnWruGaBp>Ubky<FBspnx$<c5&i*TUK#u#1e<>p z<aQW2{buWkqY>VyZJFA3C2UtC%qf`#WZKxZ4Q9w|o{l#b;a1w_)wU$q4zSs9&DXYZ ztp7XOxBx~5$3qTkTds~c0k%WhmZ#$-!}f1&D}W9E$<K~{plwAu-bC0x)V4+1b`@+- z(Z=>)0wY^t5_K4R0+(vr)d;WDwi0cd4BIN5Ah#U`uYs)AwiP<w6xgoUwo+}I3L8J5 z)C*V!oBR#)X;3^mVug-)Eo^_GRDFOewJjB4ewgcG;3{q7^m-mPt_7>LZ3e<Gz{cx( zZMzQP`(fi+utwX`SpN(i@dj;7M}+gW?M7{z30nn(bN43LxOUHitc38oN5{)R_yuXf zBBX7zp|fRqZPB(>-98_P<XXv!HUZ;dQ^ZWh2amh1UbHalp-ibjN(>`tY!hHy2_4 zU_7VkHf@`S@G;nUJ)&)1g!v2jydI^E{f{GJ^Y80FrXwzZ?IlFy9N(^OIS8})ImdTs zTQ0(%pj4dWkHf|S=0Wad0M}DGUOvJCHqQH}b-V(E%X4+a=XAt{Fy_I=wV+np3K8ZP zNfLm&VB=81`P1NsqByNy(D8~9eiSy&pgL_^gfI_4oI$&_Z85?;{opD$Uev}V(0Ke| z#Fw;fDZ+oMh{hgmD}gOv+g{eTWw3n?TMF<MZCj4;m)iEKwyl8eYwi1*w4wb=VdNL7 zI8R^K5z7#6(6+tW#;&>>Hcr1cw5<Z+E!tMEZ5))FVB?g0Q`=S{d;@Hpl5c6-YJ_i+ z^ACZywefm{8HrPEpSG<*xDNf!X|-S5Zb0}^*f^~YXxohl`#vi94s7_(xCz2FWH#iG zj<*(Jet3`rx%}VSc(XQgB)_L^w;;^#EAV<>+twk>0&*~Zply{1^BX1{j2~)S6~dot z+hJ|H6}D?(<9PZ=*~*ReP@GUWC_dH^Hz3U7v;RNQw%ZW?4o%2DY|u6fVb+8#bVS>3 zN0^_`WNUn?Z5t7ur){5U+a0jY=lo;DquMACUVw<aKG(KQ2(!j)$}hC78ex8Mf-Ur= zw%v*Fe^5KN##h>Q7s4zcTjOhOyBlHOH+Q}%*T&5-&VVzU=v!^8L708VLLJk#dl2Sl zUYOZ;+IBC(EFj~5uWehjjq(4ZZ5_Fs;(GNCg>B*%4HcK%9MD4yzd7KhtG@&FJ>)-- z<B$`OA0Q_oryxH<_z8shkOhz&NG>D~k`F0>Y)8>{KpuxY5h&W<60o?O2l*rj5AQsz z^Kd>Kas?z35(SBd#6V&pagcb32ht1D8`1}IF=PPbGDtWi0x}3P7%~L16}94e%;l0x zA-@Bd?8Fg_hj$*<uYpVvoz?}6@5du_45T}x2ZYDx^CA4K<VnaW$d3-OYF$9TVf^&u z3CI!1r;yJeM<Jg>zJPoQ`2fOiZN3S43-Y#TSQpS|3cpu+H)J!U2ExNK55k)ucS06H z7DIUET?V-h!k@yP2$=-A8ZsHevu-RT4iYb>R0j0#i|@M|ogrNy0gyn53(^Y0y_<_g znmAk;(6gKy5jP(0Gov7*Ay-1iK*mD2gpY&tfm{sf3+V^x4{;(new#B5ojV(n1(^d$ zhVc6u!yuPHE`#u}%!4pL7*z^si!i=6Qf{<Dpf!Y_C~-mpAp9)L#}J-~8z4Lc^U%vf z?or6+kS`!FBXfR3W-sIoNIm2L5`PE6L+v5Rt&sH)9%$1cGa<7eJj-SUVqMQhU=Cz1 zgojxkR3}4tI6Z<|eg;WI_<0N)F72HV?gnWG;bHYk$Qa02NRsGuD;kvt?rR`ZAv{#` z49zn$&%@V2(je)OnUGnK3`ioRKjacf801pOWsq>lK*$itPzdiH&x3S@oDb;+xd6g@ z=FX5-0T|W$F<g0`<?;2P*mG+@w{o5+pN8;o$ipBHe^)~I>CJcu&v*%to{(M;ezUYQ z<T+H|1h#_IA<PZl0dYd!fy$4o@(ZtDA^bJu8wkJEyAi^V{=N!%jrVe|Bd`m?!{2?7 z2OtkZ9)jEexe>AgQVJ=9ltU^YD<Nr+bO_Ib5s-n9L6E_aA&|=<!ywZj*FsVu(;+h; zJTC@2E<mdx!2ewd4{Zz+(gxDjA(m|l2#r68QojpX30Vc%4><sN0a6R$fq|!=LdYZt zPcb}<Tml&&k~g4%`K6hG5Pq7bE2IMBBLy_Sox|_x@OQ!fg7EH_AN1izfBt}+gq(u> z2;q^C-yZrJ!jBm7ILNOm@e570kX?}HAs-;^4<Uyk{DRm$foR}+5#aaEZij4yR6%Zn ztcBbR$${`hmk;4L<)%WuKzT+0M?y|v^!y0<8S*Qn5mEt>w*tTt2yZEtLl#4pLb4%q zAoF;$>_xx>Nq|H`q9HMmSV%v}MUXC#wh$iiczWXltQ<%#BoD&V+ffKlVmCpOAR{0n zAs0dVKrV*#h4h2;hg<>)6Yt#?kWk(Q!48lBNFc-oc^Lh?4YD0_4E6mM!f!Kgg=9gp zAs0a+A^jlTAw3{`0e%>94?%dc;XchRn1_-LklP?UWbjbILj(>D<#Ipfp@4?~?!(;V zxv6sx-ve0$;b}Gzk^qT?#6$RfBL2eOLC8vU20u8v2(lRR6Kp?2_;o3MiHgTAepBlO z$SK7A5%Lq{XMQ{Ga|FJCd<Ef0<+ecXgH%KAgxm$$4B?$>K7@Ct>!7cOEQAz7iXg?1 zQIIgS0&fs`<H%p(j|29Bw1+H5;Z{IOA^bk;iH`WgFV@}ySqG^UTW$~NUcM2*QIIF$ zKNsSK@Fc}gT=a)5MFR|n@TUa%8{WSI`R%O1kRgzvkjo*%AoC#$AUTj<QNG_Gze7$# z{($@m`3quzcR-vjLk!&*&^4$nly;CHNP979V?fWKZU|lg35Hzwe@Z(GxT>-?+;hT0 z2^Eky3Mz^LNFKpJEG$HEZ2c4!un-+P5U?FPS)(#`jWxDnAl4Yzj;NrRV`3{~d!J{A zAcHe=@BMz?f7V`Wz3W}?>e%~;7(HL-634&iw+5^NKca{e;0^^tfHV99V6HQ$3hE-+ z3a|t$1;2n<ARfekuAn|>2wWi_1h)}r44OlqH{gY0D7cRJG)|LO@NgBRgAA|~3<E8J z1+WAiQM}LK3-}9|q4QV(-aheW=`J$h<xes=1OEol9fX1)kbyMUz;$pN6h+t^6mBj@ z@jN{6ZY2Ty3|awuSXcn=X}A|a8aM_Hfg^w?72ZVf_P`F9g3mCNmjpbOJ_h%}U1YWw z?oO}^@X$XEOaN^`Gfw)}z#inaG9HPOfjvseGqwS!vQ~JGLn%I?#P7i~z%%zFkOB_! z89HeQkHi8*gLWWyK5@5^K^p|}9|C@b5-$OXU?P|Vrh;i;Ffau?=JIbPuLV5b@;J+r z>MQUDWP{t_F5p3u2S@(%><hsvkO+84<e_k)77IpWJTwJ$!EdmZoA<+T_k;DIJ8%Qb z5WXC&04u>Nuo|oZYr(Hz9sWreUG+Hb{dt0F1?qtS;0e5dH}C<;P)VMmqRxP$fPcS_ z+4J~z1Kb1m!3vPO(r!a$Ji^8T9^pCwmQNv0I>NEACa5s}MQye4JhG|Jxm`Zb18o(< zSPzka$Fx3xMy0?dJZVub3z@P2JSZ`}N{XfdGDSpx5CvEZOmGzmpFo&OM#Ak3sF*OG zJm(<5|F&-yWv1xL#jV3LXL2rq`;ZAIzd>Li;L62g1(%xzfcuz{U^wUj!T|T|jvyE` z1zcjvg3>?>UPAW^z)cjFo}FL^U}GX*tw~j}f1z$>Tt)aR0B2AhlmVrI0h9w}fg^AN zjN`Kl;C4mzSH^P{z}1N>QeVI$>jdy4;EA9m7!SsRF(4lJbD0~BhoN8)7yzPyA8-SF zx#g<3%9}39sg5vTz%J(w*aba6HNdXOZfFF&DWEZ`0mx8lG;XG9gIXpS>^1Np4kqeK zwf#~Pk4#q!GzZ+5aevknGy#o4BM<}{f(D>Is0ZqTKu`y8ScC!=x&{7O9$oq3-S8L& zx`Hm?f8ti6u4-Hq9{U5enpm2FU@)N7tc4+f)yikqP7D|YMgo?UwJ-v3?IR3}1F>Kn zm;@$*DateT{siF0NfDFbNdWV~JTMo`0kgmiFdcB)!Y#{eum~&w0{jfPJK;pJ4Cuic zunMdM%fS+`802n3$}XjuOt2zPBn6iuY&B4o7Q*v(unlYm>%ltk8`uOkf(>8`*b4pt z7r|bz2PA=AU^ln`&Vd80rev@m>;q@P3Gh2$SPD1<4uZqr2sjFkf#cv5I0;e#)1C%r zz<F>5FfDbZ0j8l5mjF8$b;e!Be;7#5U2q572DiXXz;;RmH$W!14z7U=kPg%;t$}CO z#-HFGU>|x8SPPHABk&MB04)`svHcIg!y0%Bo`5Xy3TQO)hJaQ52D}E@%JVz8Z^0)} z27CaH;5~2wCP>RThJOTKz-PtJe#ZX9ZLtII#mw=*$&2SG9bk!gt||ly0%l$Su3mYj z|0O5}e^FoxxW-elEnFVbxR&#b##@V72<I&ZGv$tlJ0IR?lmaEWNw5P>fU{{C&;&FF zjX*uX&Ac}#2Y5<!0Tn?7P#$m(=K-n#o+zsVZgnexD!>)6LvpEQIKz0-G=exDHF@MD z45$n006*XlYJwV|7N`vZKp+SL4MBa-Kp}4}G(-45)xu)7e<*~wA#{a>E#QWL=8D?| zZYR(Yv<K|~_g1X|?~5FerVZQ<pfmU%sD!Yta2ehmbOS@cV9*zF1K{=p13?tqpEF-1 zJnWU@!B`Lue^s~<a9Q1~(!QW4Xo2uPaC?JZfD1AeQgJk3=3Jl$0X0K)L=08Jhr#6t z8N~J+0Y-rsz+pt<@Ei;7<C%=XbG+mi>C1Jk;>P2792g5$fQ5i^OW-aBiC~f9{sMOy zSPGVdmEa&`S$k{nyc(=h+(&Q?TJ%4_ct`jf;kg{3ecTb-YSC=GNz{Tb2+Rhrz+<ou zTm}!pHINRjf-7J>NCOwaUhpf}02t16thGHL3G4(L0mFBI?O+qw0yeYRe#667unk1P zQchI6@w^LAnEsP+&w$h56gUC)0V-u2{reUFQMkv!G4MM$0uF;i;2=l=2LM|qISvm@ zz(^{h!c@hj{{lD<nE6>i11Q5dhUJ!3pU>rr&n?Sm>Z5xJ`~l)}R~s#2mFEsqtCV3( z$f`Z5$fy}IO$Jb9=~tgAn_nURMEG5v?WmZFGQoAg_GCs(n77IqelwrA8wg_@n?Q|c zlQ8TyxCQQjWI!2qNLfGHpH-@sL@nI|gfaX+xCf|+Fi~#z5&T^8pTNxmFM&IF2A(R< zFW^20B_UTC?rT8VH{d<n{~dS>K7hZ#d!UBVRiAT*e?<5v@EKqWY@z|YkGBR^fOkH; zspO3%FCff80bmA-fuev1(l}lUF+vXtgD@y81h*id<-F$P<q=Cp>vtf(nt)^587^N4 z*aK!z7Esm+@XC~N%#iVAKxx4I7+()m<M`*9j@8b)*4n@iR0m9K1m1uaI|EPP0n`hx z%6Ntn6L(MvR0J-dg7Qp1W$3yAS5O611q^rBqW!%Tk1t$i>I0adCQx5{)WUNh;AJp( zNi>ipWr<lrmMRD|1S};>$PzaI^%Xzm*<ZN1;U2REo<rFF%@D!UZ4<B@5qbBJg%MUr zNuWM=f^0|79`LH96=)6mfnJ~uXaRlzJwX@nKhPYgvW$<TK!_695-tN(g?zSV#!9%F zVY^&1xieDrv_(8KQT3=Y9h7kDV*wB!CkZluhNubXk5s~Fb!Wg#sZ^C^X1PmG<JF9) zi<z<1xzn&P-4NClaF~X%{UhKBR|0!{jli0(goVN7Gc#6|sWm}At6a^vFP_yZr-3xS z59kdj8>P6^MI$=K;XlzJcga;H6lMujMQYnIgWT=Un#rw$HNn1+yB668SR>S_>SL|O z{fPez0P6NTZ<SJ!S~_OT#3R69Fa!(-L%}dG3XB9?NA|+~6-)x70n<!HIH%q*IsQ14 zSa?c;c);4=L^KwR2jc*@@e|-q1Viw=2JTw03{WXEoC>CZp8!|C$#8j2pdpOokXs5j z5iA7Ll(5-s|C#X20Mo%NFb8l8*BgrF;d!p&7jPROY(Crs@H1Ed7J<d!7qA4-KpM6R ztOP5-a<CdOyfWAWwt{smF#|V(4Pd?EXH_wrtJW5{o562j6JU4}*amij?Le)$9eCai zb^$gIWjVXjWleR)Gv870UBxgE$2&V-ck@H5K_CkB1p`4(z!w=2pa<Y9I=-sw2v{?G zb;nnDKY*5?1@HiTHCG!MIl*PgX#iiz*?|4<cY)s$&ldcg?H~diQQBm<>>LN+rhqfx zG&lv+_(OO;3621NDB%KB9-M&xIN%ZP7~J2%VQ>^smf_Tqif3-?Rev(uKOKS3!8vdi zY=vT8<ePyT@H4&`p81A`x0~1DzYLy%BJdXi1;Hiw3&7QbKk$4Fq=AcoI{D3p23&>T z1nw8OZ`f|1!CmkOd;%ZA3-AHF1=-*=cm-a9r{D?50*}E%a0{FVs=-(AOd~D;8bIS{ zG&i}qjf$f+YKa(0!3>ZI)C3GuOGH`v)ieyh30O-H05iJ{?t^>aPr$<60gR(Tgz|9X zq(t<n7SlS`1eNAjA~in0Gz_EBOwVUFE1QX7ED)Q7HJcNcr~N6cDtV(ktJbpAEWuw& zIF(cJJD}Fqdpt7}H3Q1488S>YjJlY1E7yM=I)j=iBiQ~_&Z^BFt}10meGk}lg^`w3 zOCy<<E<2l=jveiL&+O!Jxs}o)Dq$~Wr(_(T`C8oy@I9saO5G06e8pZGH~@RV8#Du4 zM^FY-0eo#=0|u3a%Xgi8Hi8Ox#=E09>Ajf?JQV@o^QS<G9|Wr6nZoM(es}moKr_$; z@Y8|@fG<+{V$~aX0Z+iOZ-naud;#YQzIgQm^#Rjx4XB|*``3eK69nqQ<%_&PP#f@# zE#KVonQkKx1R4TPDox>Xf@uyn7_d})FBGagw};ynv<7WJJHVNf6A`E3?syK1!+*Mh zy$I|AH&@k2HIrK@6Lo_OOT#qub81$n-tb&u(o~Ijbvo~ZILgk0!IbX>_-Z<iffWEF zsBi$D8Ab*D0GoqzcQoLuQNI7nD@TP4<D$a#L|r>nJ=Dqdh3kqM#x&3!_ccJZjEjYu z0TZbU5Dj7+6)>I|jRY)VZkZAAQ~7Tw5EmlWin<7m!}C}$2E>Cnovr*Te>6NX;K646 z2mkBdewWR5-Ey6{uuEs-%Tr%5q!<ylr)lGW@U~h_7k_sTcTf2e!W=P|ZK_OP_O|ji z#CXavcSY&lI&bY0jcB!77p(CSOLpt*d;?%qQON(Xw9cctw?1};yq7yt$eVxWv8_u< ztDuP$CulXE?$sHAFR-2<sY3*kV*eWNdO76}lfG^vm84#%1yMFhXQ#O<YQk}dMG4Fx zw{d^hC!-rKSw%(OlA^mp^QX?bfH!nb6<dnytsVI&AkU0rA6#u5dTgi-<-OdY*5s}j zQ$lZ}$Ky4jN!HoueNb8Ag`C&lqh$5|)LEne7I)};?Ow_3<BIT)u+>MdmV8U$LGx_I z^gTLn%@uKQ4+`TUGT>;l3ySPLIxpKMD13gkBW#m(My<YxXql|DHIyuZ`3c$Hy&ih3 z_mk3Hlqy0yITsP*lXYH34@gi??VjhtV<z=+ri3RNz|-UjV%RcS;T_vtua(jOF@7)^ zhP^E!vY=gSVJe>c=&cJtT^m#3bO1q68||b2CaQ8V5zVNmVqzbn49-f9pQ1FI2b61& zE>(rp;<7$l!wwk42J8N#bM3&Q7Jib|Qt#56iRaWc*-V(G=pqesAO>~uX2mt*2bCJL z9g-gIzO-?XnV6QM^U|&{6Df4Jm<jU-NSO@xpe~p{4eWdnHIxnw?63EpH@h8DxlM02 zwo&RF56r|YN@PRA5)!SJpWHRKZ<GEx5(UkLAr(4{n~O|HwzP*L+8tPUdDV??16t%r zx*&!+ew=-HU`5xSBdj!4&?)%8rifuJ&#u;Sdc_^J{jD_B5rUhM_%`Mu=nz_{3;gUl z#ho2Xwod%`!0M}o{Sae{n1aoYE!mL%Y*bFnV{@_T5G;FVE{;QowxEUh2*05%6w$(8 zhL4JDKRPCaHS3S^dYhniJPzx;45eTudyL~R+M7Nlw%?a()T_F?pUEOi5qlUqU5ksK z59=aPvk6CZ3$5}ifY@|I=cKJwLYzCIi#LodA$PGN{cHXHD0JaottQsj-OK3iV**uC zM`2#Gl49vmovkqv<u)Mm9bd9un%bYNpx5}gd!o}}jzSEUiTKckPoD-ZJ^wi;W?4z` zlxYtr65A^1|L5^wLdhJ7OeMze`KT7=mXprs#C$3#YW<FCakP?l&GB!$EQs|<JozO@ zqMnr)010ClB%F|cb(f8PULVc{<w(RM2D|R~Ib#eRVu!w|loPYkN+dJwAxPLkqE4aE z$bpkjgy%?PAf_~8N{?)z`7`EHd``?;D^ctiD%;9hR6O>z8{29dIEYMk;~xxS2I7qo zs4ggpKVGP%2zt=(kY3~A?uGy3e1jMp#Iy=HSJhCu_?n!UnFetUX$>nN!TEEsgU6nW z4|{aXk=ShzmdBwzRncKqs=>p>n}#0Ck+`Mgd&uNzqlyo;fjKd645ACu7DB;jS;n}? zAkT#KgE<loh(VLYFaI^R&(p#cF66|xmlhk4*3bYFr66&BnPurCl^(Xpk?2%f+@$vY zkYMSe!j^wYo1IiQM`D7KZ+DxIMJybxvU6e<loswMkaoS2|787!UR{gV7@i}MtfZY= zGpl@`=?f?4#9SyXVvyEwSCKfL9q$;kvd!EaiMOT2W=Lp@mJugUV1iL6AZ6%j11gHh zle%ET_a})mF5=8d48iY9C=-t1qKiBw=(^gy`om&FZ46S**%&9cT|~=N^cM`)@u|q| z2_!kaG|t+-qVuCQfso|7<A?K-i^$^S1<8V^kn7OO@>E(d;HQW=1u9u+(UYW(WU``) zXblN%+p1#nDcwT4&Zn7&t8l-AI$7;1PeYYnWIh{I>iI6@!G!{=!e&=7?KC9zLxR(E zT1e2E$1`vFKmrRe?fu<Vq(DM@!BwPFXQrz#KLh_mS5fH<CYhDh#H=%@&0!uQ6X6bh zp_T1E)AU+(vwp*?af<bnG{uVbd!;oWOL|FRxnEaMBdzHr3!%W6XoYyUSJzxS##1!j zhl<$?MVvc(4cheOy~X<8R$mw7qn={(K4kUxZ38M<(k1UJu)R>Ta{705B7DEDgx1Mh z4BxMFLQ?D&tO`mim9mvUlSo?$tAa`%l7#duN!W?(Gddq_4<FI;iq2ZpJ*%r05alC% z%MkD5E04A4lse(RRZ6Xp(;pfmhRgf*R&zEz=syt48*1K*71G*QY&xs6^$mvvmzRd? z+!C)etv^L+JxHV)<(Li!o)$>Vd{PN9NXd3}5+BZDE7#3Wc$`Dy^zjq1=P<B_qYSLm z(+^YX9au7{s$_<jJJcj2h8>{dwybr!z{gFc7+<Q|=r2y4L&NX(PdKlOG|tBbl_dnH zhR@rwFa5*~B~Q#}tCW}nu8Y!Zwy~8}cwyx-*-=9zo`;H*8sZ#WLqXieGqW~fSzq4I z>Xt3(@MdPCYl<=#(6omkfwePU-`=bB>4NKyLIO=e32PC0LFa8aRZA|3=`Xj^#}~Te zEvew9$RxD3Sb70vo?k;eg(}|?0dfUTDpYxK^A%gyK$1hzABPvjuwrXEHtsTVPSa*m zjI@ueB5GdLHFwy75^-!Up18OE+E3=IrF9WoO{@uG#YNOF>h;P+^woR|gk3Uj)&fP~ z9~dr53pnH}>4BBjq^y|!htAFzP*1MkhPP`U-IsW0k7SgGdv%;7m6+I>+fF%}+n39U z=~7QzV<yq{MD`!3XKcQzT!I^0PjrE6n1+;W_TJ6<T34I%Q@m0IFfXB=*g(m3^~B9f zm<P5&k}Wf@YpFWjubDNp(gf7z-rCorskyL9!)B*vLwT(n@nXl7j5_;bISYBSHcieT zhHFAtlO9FO{nUorM$RE<f6S~gX|OLUNF=0T&KMFTKErQ_4U+3O{_?T$RfBh>DR!Y} z%bP-J<0?Pe8U{9!F5BXVmOVXs+MkY3Agr82cKeI?%Q`Pj6|wCy8fAJTai)UaHsOlS zUOTIaFkC@SOPk2$O0lm{aBtVJo04r(OUlF5%kV2C*wzy)J4Z#0*Cfieut&XWA{JlK zRdN0Z342H!ZYpol7O$K0*v9$-jy=+Bie7Q9smMZZ#(Xx=7)tCngPO^$`}X~)UWeMx z!%3$zLRf3qS_h=V(x2gH&kyf#_|RgDr3JK_aR}iqfZOz|(7p$LZV^3AUp%f7WTn?? zRwINfc@!p+qHsg19a?U8@~{;wGs>$DcK!R1mIngnqQz<8Idvrk%ei&<-Pr0;(|1`& zfhC2rPd<kWfBBH5=<r>HHG{dejE&lNZOgU|NQ=`S(`G6$$*p=H)_%S?3o)1`IUKZN zYC6^cGqEaN*IZ*SUZv~KYFmYfBN@6#gjT(#vooA;A(wCYmM^9sMyAQbQr6o-gk3`& z<<k|YA34h_o|kVvD;|%(kk|~{SbM7y7H1W33aguAbp`PO*=zT^ip^Lwx!`$RM`oU( za@R3;Ik)z9Tz@vVqAJ%?7z;^ljZpFPbquDOKZsNGtD3I-kdO&)qc*}mQ`bP-rHu&7 z)HxZtDN}BmxqoyC>t;=$*pnx550fcvMIurd7POVe?TPgR+qC$#u(?!^(!qE|TX8NE zlN=`JGB=RrpKV1ex-Z*`iEvS~NjI>TqH`C%32y~a^Cm_{s!<HMsk7BctAm}kdk3-d zrY_iFUPn2b8jCa?1_xc?TuM98TqQ-fW_l~(cuVJ~DI@CKLenWuNl`phZwJNGZ|Qm( z7Iv1qLfg>PkZzXSk3j>cYgG5D&cgCGju?Bp$lZKGi-E6(7d%-85?rbvaiNRYa2r$p zbx5#brnb1b!2VMdJFi?DCa&VfZR9LF|K9ldZFjylzKB8F!tDS5ruMq4>ry_xo4mN> zJ!4_l<LB;)LGK+aMi)m#Nm~)S@9mCI)sny%hmt+ynlyE{ifi2DhZw0ApbEE>;+H=$ zI;ui|^FzbKJ$jsWc{LCMh^Byl4{_m7tk6v&WC@$k<r*IN?cxkbRCmXffrrU_#Bg6< zY~8tYHS~$S5QAps4hDzI=zFM`s$%0qot;>E4|C_TNU`r8`czm?@f>m5Aw7lZefTH# z6an|)U({2CJ=9q{BI`{(aTx-|JqE<K>^3>^1QfIVv8w&vQ%sYDrPIExNWKrvd5`>Q zJw>Gl=%(dFrw8b!=(V#RU~<~fOYRXC^@B1jYCqvE0}A2;wMmF6hWu<w-V3fYx$!|Y z#=}H8emQ)B1YXU=S2()*2N#Dvm?Y)2M*KjaIEtvP)myke#29<gM^-g_>frq)v))gK zpwcnr^4YSyBOk&#scyWrJsXPHM>-qv_My&Tn23UNZeC<MEa^n#(X&Xc?3>Rt6dsRI zh=7W+A@7Pu^!@B}dI2Q3N%izG8QD)B5{s;NJ+hy$uP<V_lw!9hXJKo|fCRPQ`h0p* zB_Fe&rL@wvLS0c6NrxY!<(6IdFn*BVjcSLrnkrb4`9F>L@(A0C2L0t(Y(?tNBbM~J zfNf^1AMRm1J^psTff$@mJ-yuhu;kw?kNcoBq-D49DKxZlX<s)?$e5>42)xGWFUCH` zfdhx#GFd2WzK2~>+0l6obQV6w>B@*p(!3*j-BP`5ty9iF^;cQVb5ePnkB~!>%Ne z?_pPp!C|-76Ihn-VONsCVRrx|@;~fK68Ro>r5GG`lbJT(!>%Ne?_pPp!C|-9Q&^Vo zVONsCVK<NxMa$r$8nm4;_|(p2bGDC^j>D3~=3!#+Q_TLahRM6&nT5+dST<<YWppxJ z{>Y1U##79@CB&PjI&Y);FH<#~9lm$Opz0h^%KR+-BUH#^_=6Sm96!I}`k@Sh;Uh$s zXPDc^jgYPI-%;~_<;<qsmGY2ge@8L<8Lm(ZilcB0+Trr{XygH_n^wiG-$70pjQBUO zte#`?f!p}G?o2-Y8PlNDpP!DBd%EMf&`9rL_!9)2AUVgOr;Fehu;wpFaN{zy!#rJs zQ}tRx0&^85v?A^WuDs1+WC5@6p8cx-(ar+`m?gO_vPBFhp054xd2C&m8HO0#ym3i( z7N?Qa=m`PVx8dU`zg7nZe_>J-6xCT@iRrYtaQlef<D(cOUzfLu5r&s&t6q@cHg0~$ zO9{dCyFZj9q~$&)Mzn;4aV{iqzY(w9U+qoz1`{qx5}sJxOg1B?JYssKkF=@N!{HTT zP$u4!UW^fok=7wwkr*&D#P~euuX#CX?Zo+)m=WuY7FjeSVzl(eIlf0mK=bg3Td#9e zO&=|sUSXAR6BZw_6y>jxZvg7Yi0D_?o&>~+eMn#k#ycyPtoHO*{SNKkzl4_p)!D`H zHc32(gcd0RKj>^lxz|`9j>U<9*O+n3iXUI216C7L;b{Hi#cG6V2aOTwuXVx3#IbT` zvA8q8VmXg?*QEkU$F~iL;hs8s!p<<y+WlTgF{~vMS+lJe{07;e-e<i*-T~vqxwmlV z#)!|K;I<tvG8sN(ya>yN^$GYg7PmC<dw)G`-JsD~>Bu8hEy_9H33utLA~ivU3G#-j z)TQ<>0)IKS5BX!^;z>wJ(078^1kJ{H2(q_SsNDGW@aRj}?4wUe2ZcF^;hgJme99<~ z_vQ8@h9d!U?y3pmBdyvGiQ<sB``Ul<#9>c{D``>4GZTczU$Fnigaj1J;UxquA-Lv5 zNcCS#61L@Jq7|e6LOYh2C<_$r8@=+-#K{>snlNIv{)Gc%U#Q?hWc%A5%jUIu)lekR zfN~yRYd|Sqc8mx?)`q-&-cmF8CwX(CR#}ZHB9V0;Iz?<|-79Tj=ru(?Y-vXLw>Nj% zk8L_CMruN(mGaR&7HPOOQgy5C`robjcgdKk;^{lsnJ16`ZjJHpbz(V9wz~%GXSaPj zB<oU=&(A+u;_!_ffxo*aMo02{+-2N{ByTKc^}X_C;#IdkTFohhaG#T{xM}CyODq~% zomW9fiqoITKMhuC3RZ@mR$1;H+F+t!*Rz=KHl(Zl@DfsEOLzSLSrzK>8b-6j-^<#1 zhFk(!)z@KP?_<t*#PrhaGse5p7^)1b++FD+H$S2YluYuedNmU@#eb5Nrh@<H?&wft zmOM3=>h)yfr_jTgywwg{QFx*_c}vw`mWcn1S5keEj+2XV@u-G#*Zy>y_bKw^^7naI zjrn`Eey{6)XG%kza^f;{pDpjOy*h=ht~qwt7OAPFi8)XI&O0|6`XeQFw((g@ruLlo z>FMkovt`xB@6Un%o~bgADpqRz=I_<pIW(OkuOX3lMz^mxWwt+T#ZiElDi!8G(|hAg zS6-v{&O0!_8lI~+rD*hCs+`6}m}&KPs+ghvJoz=!;?47lx7fb1drmX<m?t`G^|twp zUv*CVd$Xu9N^R!TRr5$#<)=fK>hv`XtrFyYjm`E|a~~!J<LU_Im)43-2_j5~W$1o_ z7^y?iUMGl6@N0D9m<}~EUx<(J8deB-npy6h7P4g3yXsP7OUHb?vi8vHy$subma}N| z=H^hxdmV8|m!=<F4=Y(1-a>*~C$k}qv+riukAMy?OIQd-EfD7lz=%l;L<n5NyajUC zs+!>a!_2T!o3$GBE9q6?vIPkg*Z~2a84t&suQ<6jV_c5Fe^;es_8&6MqtoI0=9Lho z3!>JhEE25>>bDz{66HE6@@4jtu)()9N{OqRm>g1Kjz51E8+h!*FvKX^-qb`<s}PEK z2@<9#qFcLmW}W8OIFKWOCK><<-y4u94v9m$td-XGA9hOGc~m!fuEcEZxpP<depS~= zG14YgBlZ`<c(D3Ko~B!DJU{HoWjkL<Ip!QpC*lPJ*bSJ6a4xL3*O-esh4np+^OZiZ z_rksIYX@zggha}x78e%FmRMe_<k-)-9cO*z3TMGmk!c}!uk6D5VC~ovqCpXKGvyNo z+%?TEf*X#?Vm%y(e9J6-6`~h6AfQ#$X)MGCOC)m;Zl-W#B@W-OkIG^c<tmAdNTsd4 zQfxLw7nh1^CF)q}3n&W3M^k+-!}C>g&G$R9BDPNEl~Aenq+9g&t3-TJ)VzMR+>@ii z#}5mewKo$I%EuEHh~YNk=ZmRh7xa$qh8S=8c%T?r8Uox<4f2bdK6T3aWJNh@-c4wV z!Mf*(!cYwDUmJp4NgMV45}aJrKLCQh?$S!ya<ym)31b8#xa529YC3cJrAreb!3`kV zKL#-s5Yyq$$#Fr}Ph1h>BYzZAd$m|xOdo0JutqMy#R^S&-V}F!garE^%m`m2oXnto z5F|LnEU!Cis|N<DH>r@AiWqJi`lL5JyQg`A0cnwv`6_9(iYu0y>FrgIL&0C=Ir!@2 zik|~IO)estD{Ug|#WOSg7;T3&VxYM`SZPkf(e-kt+PJK5yVN!TFCg!Qs?0G_V=c@q z(5w}Niv<SV-HoC%x|-qaCV9|}dY$GUw|+o-PDDI@;gicvVwMG_s(c$sIxDIDOYUy} z(4%to9f!&*<bruWZ5>&#L0{g|D0kWRqHFFBr}SF68|K&9F+^ED2XTwNTNYRQyl^kB zFM+=uTerBr?Dwt$QOIwu4CQyEb{Zj4i|aQQal#>j6R`At(oUninv@dZD<`XhQZ42E z3d#|SWaX{$!q$3A&Dbg1=J5FED<40bY!zinVtn`9DlBc_j@~K)%fX$$RotZi*R5g( z{rk3xrI7PI4^8YlolSnVc=vARm>f-6h+%&l)V_I@=!yqM=fvp6L2Fcpo#<K`j+ZEF zg<;ZYn~1iD;%?i-rqXa@wuu2&aPwrW`6jXUI;6_xNNN1U5+~@Ch4LD&1dG+ym;)6( zie%nmKi?q?cF>!r_zwTEP<ia~`dW(rYkkE;&9bN+r4|&c4c~9SJQ=9Pl<PWgan#r% z;t6X_5mH(JF9tMroWGQ+_|^nfSZ#ps^cST;{%gHyl;WzLA>TZu_7hL-^4Ng}{O zAE`}G6004s3dw$3?VTj?8h+opN%EX~c0u3Ty{5dES2$^kx`P-y^v*!%G0~bvJLGeX zG+31$@om=Hyd6Y|R>#4=7EpU(Z-OJ%sBb&HT6=Ppdl~NUm8Ux0)B4darX?C^HOeGz zqU2{-wofk6#*i0om&>)~B&v+uZw(gR%V4TjtkxJsC>r=X&Ht@w|B!>)D&JcDx1p+( z@gF*A-pW+E*!Rqo2emr&<lAYLSw!hS|4@cJwkw@n>?^DH`RA`figDKa=U%Q__^+KI z@8CI=EG%)iZoHn1Z_d#v`z1BI^<Z$?95gN$9!%Kd4#-!Hf2PLFYu#<jHN<eMjj8_Z z0nw#AHe&lz#D?-10?NVNxc8uZo7CX7#g6qS4#Xk_u1vTno<@u%a>>3BR({4$_`RVN z!-e?zLE-L<759lEapTQe$0Fvo(q{+$(ym9bRD7<gw-@uA(Zy;U5}T1mn>$9^;*j|4 ztY2u%=T#u@zF_vM&hpaLD5m7H?p<!Jff33MQ+{I~td+m7vNfzfVq#)|xu-ro^<C!w zXs~Q9&LSqqj);~OVeSn`a1An<o_%;ty$@Gp32tCiqnzCJ_73kM#?|sb+|M6x)$Q07 zV#=Gq0^)o{%zx#?V>nvnRtLS&(M9iV$on?W^6T4__eVsu3$`Eqf0sw?!j|V>c07|{ z3dOj2<ibDvcd-u=+VQ`O=X6j0E}Sdry^I-1!K>SvQ<h)zD*NuBltS9DyhTiL#Ei^v zv^>?rjb|$E0deYja!gFCgwl>YE;rwSA6+uC;+k4PLV6KqRKAn2#eRz~wZzLxXdZkG zW?mW1qkK5wkk3~E{K5#fN^ewc^myY`RSc<&g6H#HFTRvv<KesBBb8AM*Hrmfx4vxq z<?knaah8mgdZj;NilG=;Z@XXbTC%VYVz?JV+GDB0wF-*y{bp51gE%D@wC&CP7apBo zze&*nQ`aDdTj}+${#x#F>Dlod?R!p%P0+6OPZds`aNN0B1$ChI0xNV{?VB^gqbkN) z(X(<zkI8%-(c+>%H@&=4M7J_1F^gxs8*$Pjg&!m#hT}uEED91Okblzl`%xB0-b)*G zIc+RrXxZi3wL00H4mhN0^)Q)zR-8h<Uyb1iQau`8TG(l$&xsIMm==3ZF8GQ8R>y`; zn(8GLPdd!aP-2X2)}Q_DR;fl(jC2lMd`=`H?N^PK;;gIQ&ggzY9vaUquZlm0$MbZe z3^Vm_atuhYcu*{AJdcz-{Gs``To7g4Fr$3BAfnu$a>hk5(M?~)SzMHlQQx17)QZk> z%PE`S*wZ$N5M^4U)$3o9e!LdHQsa`kXQ>n0lrtRmvE43-0q&3(3kfdF-Ik84Uhjl0 z2eY!>Uvx=yX$N~YUJ^Iy9=IfeJ0Qgkq~HW`{$LZ`#NA$Hk%D~<v*w3OqF6O7x~5`D zYm9G$s8bD2RWZ9AYP)8dXxR~JI;M$us_C01cZhu@?z=p6ZMj3rSo#hvCQWQ^56RhS z;u_Rx7pIBrYS?xBnkKq<=ocDxBPBa~aQ2JnYcq%9eXDx*m%E{t_DGrtY>Pb3Lb3=X zf1BsrxV6)|a7be8aadeQ6EU7R$Eknp<YT=FGoosY`b(0K3L}4RZ!JoC>HBItMVuF! zx8W68--w;X(l0*{>c<*r#1O=A9x2yuT&W?ycr<|?<il46vL3GlZ@rIp&J|(w#=In- z-lezq-~SCl;uW#j8->^c)huqYE{RU}T-!P-CZZ7P&k6Ql5m{90QA9Z5Hv~r0tFoDs z3e2gLQ8R<@6qH^#2fBDEa>Dp!nR|Ey?=5hP#R^e%$>!P`DkDo)U7L$p&LjI<c7UW& zmi({3RPfTKW{8w}Xuv-*gi~God<5D2nISI<Q;)|My?i?JgKPjN#OE1epf6_kS=Z!q zOoO8z{p+OuI7O0>c8Y7Si4<Q{$YDs>z_k7g#y?nDCgqkQfm<OtL+b)~yn0QT8*yNI z2w`gopEG7@LQ<`p=BWFu#H5cqXlrxk1rJPYG8kD>9IS<oTS1%;gySw|8qxN(ugjB= zd0@gLhfzP^SS)P`FqB###sXP93BUU=d-AAYNs%<iceySyVT5+bbzxo~mXC!bEw|7w zzTMT!Ab$%e^|qg{3)kvs!sXXRSanG5fh4QHwBb|S>~;4~D8?bT!;olzsW!T%z7)@v zXCTQ>cdE8ZTGF!ONVVso3No&Xz$VE3(RJ|=I<;@Ei=~Y)JT;=4pWfS{c&2QO?S$hC zlH31!CnpOR{9R%c+(Z0=@*4sm$3AnllyEN*AIbN}tS4mMI8&VRgRyNP!Ii$eRq`)O zE}zemB%}$nTV{ekI%KqxRr$D}%CEAVxQ2S-g)vl&M-0c!aJQ<DW2)FcP?92Mex?Xv z+Le%C1Fn5Jd{X-bWp_yuUi|1W2{E>a84wt=J|(UuztEy#e)t_|rbt9u!(&L4fW*Z| z!>-)1Z}FQV0qvhM#W`xXx*^{IjahlPM7n-@tsIG}h+*0SB?j+ax+rL&5@W;<{BDRc zHBg_yH$;3Ly-gWklYi}zqFJE6x_0diu{i+02txi!E3#)ig)XJ983v7!8*|ZullDLM z+g()3RJv#0b6wP`iA-}fzrDjFv^^`n=+)Qr+wUyOTPW^c&`ZAQ!vCOF>6zN|w?wg8 zdRqst+wxt^B}2-!AGRM^sc6JJCXa@HS0$#^!UCl9V~uQwIsg=}Qd&`|w%*<_<Bt5Y zaqsX)p;v-F)luph!%&$%3{CIKr8Mz>J#=}asiPE$T(#KduGml;?Y$3@95s)+Z7NWE z@M`%Ly)<_my(?})!k7jLOGxP244ZN<!60om<ayc!eT8YQ{+L!jd37p3ab<79+<xz_ za1Z!e^-}Z6EorN?sO{I8P6_{>$=FLNQ<T&p9KJuwm9h8z%8@(Yf0zvaTTV&|tpD$% z^_XRpSyDDwRl^xrp7m{&`BR-uz3|tzu^W*4hqNSofA+{Voqww=pKP>$W{3bRHcED? zgdXEnwot6BhkmK_sXPrQtr+T1P)Ar`{jc)Y1)xSXL00E$cr4Fcn~SFR8$My@Mf4XQ z5z)l|Hiopr9*e{vbSPzzz^DXzl?>D&{twftS_-9t*bLv)zqI0f#44eVH1~!WY1*gq zM#9YIZO7-+ZmJ6&#&#|}a_Q6ot5v3W)i!Y#iWGYl-CspjqvT@z%WAJwf#Ewd7;GB( zOyGxPwuXDkm|nWT)aaNr?OD#~R|lcmaLV*5nm5vy{(JkY%iq_SuYLD#F<<+P8uJgE zl5gA2;d}cVZ@Cv*m6i4dLzFc;>$lp=tah~F2Ls%OVcu5OY)x@dv<ZfZqFo8~wSOtM z;Ej8(y=~Io%|$xC9YMN^h~ezz_F?VSzg&ZPj>QRzKV7UQrc+a`mtt)bY%uVV_BCt@ z4EcN}&bu#6s`%vIvMIVFeq2<gsXo{+3{x>T7^V-~m9DdN+Iyt|5IXFQm;(uH6mB#{ z7V_uDwxUEc^pP>y!o3-^D1n&y@ilXE?Zs@dxfzn!iBHXtBt`mBinVYHMw2b<EP{i- zCc&{GSYOsq2Jh#q1pkaBNAcXnC~GVam>--|O4H@0{$zcPx_A5OcmX<sxXxKl+* z{)ZTD%yyi=|LOOz2S&+qDQ(nyVQ7w87zqh32enq4oZoyuXf`C2v&@wDq9r7>OW%t= z%~5ab-;2deu^TB^(FaS^eA6{}PO5AV&n@!q+eYtgGVp`QqHNp;xw#@U5C61v>pC7R zS;w$F^@DH<!I^LOdl4N1N!=&;g5qV&#=rxiTApzEt_G5-9k|li2T7(#3(;2z*n||c zd|<?&{!v3COe%S<I_vOY2oEsW0x*+gNU-!BT@D(@%xZl>(kXp?c>0qFXn|ate3tDS z8CdnUw_9uOHWd5Xd=@E?(C+&zrcp8#lFY4Qs&mqTn-60CE}8mSq_@!XYj?Ajc$tKg zPQ8}!nu;OtI>c!;QmuvF35{z|WH<W|>lu@!)GuuC$L;l{9m;f)?fH1QskUM3Gm{~u zw6*lbySFw%FM>jG5wch>tGn96e8adi-M8bjS+3P+@+t*1(qZYHS-Bn7flHrjHD#0# zoFX@cqDacQj$cma`?0n!mwX&jKT`NwL1EKMAMEh7phkKvIWA~M*QC7`xxUhp>~|OI zTj?E@&TT9Ab?M7}Tk))=zL4?z1^d1UxL6GN0bN8n%B$yQapnhH#ODdrsz+uu{M(bb zVOkN5w9B5o$=P(2=RP(c&Zg{M%4u9=wbu9gnniRQoK;m->hWKZ{F>DPQ&9|OY;_28 zQ>z@ijoP9b=~m{&;1^YAcf9ojzvGa)y-5$m@GP;x_h_BN^LKuMAxhN4qGATs{Y$nY ztUV?dRY<wS&?;9Id2Sr?TCA2txyVqiDb!M{1(S17CMK5ZTQ!kiGtZ+g?*+$KeOo)g zVpWN1xni-lKYk?7TM?zfzNbVx+gvQ}h-qlXIdP#QdWCY+VHj_rkxrBw(rtVXW{2R{ z+v*SW7g~sDT*(=?LZTF^+~So;a11!RG)LkDVtDnle?#LshIW2Sa$;^<h<!-w@D>t0 zVbyW_wQ!&GGS6}(EXA`<dOPQ;mKy0|wav`Hv74ISE}tWS8ytQCZ!(~xaP6!g9G8S8 zowpd{{d`YphMRvLJjgA&e|Ut+`1Z!g;>R<))Tk@Z^YeF>-fS~zbA^VAe?-#GN};Eo zUug+HXS0xc?amB5<Ug~k67N^UfBEwD4c+@F@tdy?D_OUJ!-)~_^FxBDa<gn=5B7~) zJ_!LO5FjR{tUA8M^UMPHZQx&b;pyUyU8|)020zc4rykxoG^*#^lSkm^MBh5Hb!XG@ z+Yg<Fzcl=Di)vhcaH#p}p1s@#bn6*0XydrZYTGaFJ?+$1Hn8mzi}QDD?p#$3ej2da zzV(=q9&rt7)kXj_Ff=~=VCEe+*OD5!Mp{hXIk4x2IZO6-myfe+cU*kY)URoLkN(m4 zxe03Jic6YX9q+?=<0A$Q=r(XrgvqIT0ee0)>Xb72FL{nWK4t62!!1KsPluml?att_ zy)8?JH^~qPD2aeoeLGE!Y*g2<w4>Zaz54B{(M8{0<5E4+&&Sgv+!*QS;a$DE(ciDT ze|WfuUxYEdo4<#LUyttL-X1=lej=%>-r2NY#K68$5rYRtM2OH$`ZBv5!t{*_?RwWo zA5uv)>Zx}SEi4O|?@H>a->==(Xs$lXsm6a)->rL(=zb&Iq9cY68RRCX+0}2m-ah&N E0K-$H`2YX_ diff --git a/package.json b/package.json index 7a488570e..6c3181ce1 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "execa": "^9.3.1", "get-port": "^7.1.0", "gh-pages": "^6.1.1", - "nexus": "github:bcnmy/nexus#7f8410d6f8037b698b9dd08e6da9008cbd30418a", + "nexus": "github:bcnmy/nexus#16273fdb3baa26e03c8b536ca3a9156197c8410a", "prool": "^0.0.16", "rimraf": "^5.0.5", "simple-git-hooks": "^2.9.0", @@ -125,6 +125,7 @@ "commit-msg": "npx --no -- commitlint --edit ${1}" }, "dependencies": { + "@rhinestone/module-sdk": "^0.1.17", "merkletreejs": "^0.3.11" } } \ No newline at end of file diff --git a/scripts/fetch:deployment.ts b/scripts/fetch:deployment.ts index 81a0fb0ee..3a20b37b9 100644 --- a/scripts/fetch:deployment.ts +++ b/scripts/fetch:deployment.ts @@ -10,7 +10,7 @@ type FetchDetails = { } const { nexusDeploymentPath = "../node_modules/nexus/deployments", - chainName = "anvil-51139", + chainName = "anvil-55261", forSrc = ["K1ValidatorFactory", "Nexus", "K1Validator"] } = yargs(hideBin(process.argv)).argv as unknown as FetchDetails @@ -51,8 +51,8 @@ export const getDeployments = async () => { )} as const;\n` const tsAbiPath = isForCore - ? `${__dirname}/../src/__contracts/abi/${name}Abi.ts` - : `${__dirname}/../test/__contracts/abi/${name}Abi.ts` + ? `${__dirname}/../src/sdk/__contracts/abi/${name}Abi.ts` + : `${__dirname}/../src/test/__contracts/abi/${name}Abi.ts` fs.writeFileSync(tsAbiPath, tsAbiContent) @@ -73,15 +73,15 @@ export const getDeployments = async () => { .join("\n")}` // Write the ABIs - const abiIndexPath = `${__dirname}/../src/__contracts/abi/index.ts` + const abiIndexPath = `${__dirname}/../src/sdk/__contracts/abi/index.ts` fs.writeFileSync(abiIndexPath, abiIndexContent) - const testAbiIndexPath = `${__dirname}/../test/__contracts/abi/index.ts` + const testAbiIndexPath = `${__dirname}/../src/test/__contracts/abi/index.ts` fs.writeFileSync(testAbiIndexPath, testAbiIndexContent) // Write addresses to src folder - const writeAddressesPath = `${__dirname}/../src/__contracts/addresses.ts` - const writeAddressesPathTest = `${__dirname}/../test/__contracts/mockAddresses.ts` + const writeAddressesPath = `${__dirname}/../src/sdk/__contracts/addresses.ts` + const writeAddressesPathTest = `${__dirname}/../src/test/__contracts/mockAddresses.ts` const addressesContent = `// The contents of this folder is auto-generated. Please do not edit as your changes are likely to be overwritten\n export const addresses = ${JSON.stringify( diff --git a/scripts/send:userOp.ts b/scripts/send:userOp.ts index 0b18d941b..a3ecf3cbf 100644 --- a/scripts/send:userOp.ts +++ b/scripts/send:userOp.ts @@ -49,7 +49,7 @@ const accountTwo = privateKeyToAccount(`0x${privateKeyTwo}`) const recipient = accountTwo.address const nexusClient = await createNexusClient({ - holder: account, + signer: account, chain, transport: http(), bundlerTransport: http(bundlerUrl), diff --git a/scripts/viem:bundler.ts b/scripts/viem:bundler.ts index 1daf93806..7e3dd30d4 100644 --- a/scripts/viem:bundler.ts +++ b/scripts/viem:bundler.ts @@ -64,7 +64,7 @@ const publicClient = createPublicClient({ const main = async () => { const nexusAccount = await toNexusAccount({ - holder: account, + signer: account, chain, transport: http(), k1ValidatorAddress, diff --git a/src/sdk/__contracts/abi/index.ts b/src/sdk/__contracts/abi/index.ts index 27aecc585..ae9088d4d 100644 --- a/src/sdk/__contracts/abi/index.ts +++ b/src/sdk/__contracts/abi/index.ts @@ -1,6 +1,6 @@ +export * from "./EIP1271Abi" export * from "./UniActionPolicyAbi" export * from "./EntryPointABI" -export * from "./EIP1271Abi" export * from "./NexusAbi" export * from "./K1ValidatorAbi" export * from "./K1ValidatorFactoryAbi" diff --git a/src/sdk/__contracts/addresses.ts b/src/sdk/__contracts/addresses.ts index ed316626d..27866d129 100644 --- a/src/sdk/__contracts/addresses.ts +++ b/src/sdk/__contracts/addresses.ts @@ -1,9 +1,8 @@ // The contents of this folder is auto-generated. Please do not edit as your changes are likely to be overwritten export const addresses = { - Nexus: "0x21f4C007C9f091B93B7C1C6911E13ACcd3DAd403", - K1Validator: "0x6854688d3D9A87a33Addd5f4deB5cea1B97fa5b7", - K1ValidatorFactory: "0x976869CF9c5Dd5046b41963EF1bBcE62b5366869", - UniActionPolicy: "0x28120dC008C36d95DE5fa0603526f219c1Ba80f6" + Nexus: "0xcb56273F55Fde691f92976B976cf79f79a5B4c22", + K1Validator: "0x08FCa672878aD598FBDaDdEBFbB71Dd9BA90b75a", + K1ValidatorFactory: "0xEC6596Ca8ea4DBFb8Ca1B365490Dce8dAe2CCDcA" } as const export default addresses diff --git a/src/sdk/account/toNexusAccount.test.ts b/src/sdk/account/toNexusAccount.test.ts index 42d58a347..c106aed17 100644 --- a/src/sdk/account/toNexusAccount.test.ts +++ b/src/sdk/account/toNexusAccount.test.ts @@ -78,7 +78,7 @@ describe("nexus.account", async () => { }) nexusClient = await createNexusClient({ - holder: account, + signer: account, chain, transport: http(), bundlerTransport: http(bundlerUrl) diff --git a/src/sdk/account/toNexusAccount.ts b/src/sdk/account/toNexusAccount.ts index fab2f3f7b..059148b34 100644 --- a/src/sdk/account/toNexusAccount.ts +++ b/src/sdk/account/toNexusAccount.ts @@ -60,7 +60,7 @@ import { packUserOp, typeToString } from "./utils/Utils" -import { type UnknownHolder, toHolder } from "./utils/toHolder" +import { type UnknownSigner, toSigner } from "./utils/toSigner" /** * Parameters for creating a Nexus Smart Account @@ -70,12 +70,12 @@ export type ToNexusSmartAccountParameters = { chain: Chain /** The transport configuration */ transport: ClientConfig["transport"] - /** The holder account or address */ - holder: UnknownHolder + /** The signer account or address */ + signer: UnknownSigner /** Optional index for the account */ index?: bigint | undefined /** Optional active validation module */ - activeModule?: BaseValidationModule + activeValidationModule?: BaseValidationModule /** Optional factory address */ factoryAddress?: Address /** Optional K1 validator address */ @@ -113,6 +113,8 @@ export type NexusSmartAccountImplementation = SmartAccountImplementation< encodeExecute: (call: Call) => Promise<Hex> encodeExecuteBatch: (calls: readonly Call[]) => Promise<Hex> getUserOpHash: (userOp: Partial<UserOperationStruct>) => Promise<Hex> + setActiveValidationModule: (validationModule: BaseValidationModule) => void + getActiveValidationModule: () => BaseValidationModule, factoryData: Hex factoryAddress: Address } @@ -132,7 +134,7 @@ export type NexusSmartAccountImplementation = SmartAccountImplementation< * const account = await toNexusAccount({ * chain: mainnet, * transport: http(), - * holder: '0x...', + * signer: '0x...', * }) */ export const toNexusAccount = async ( @@ -141,19 +143,19 @@ export const toNexusAccount = async ( const { chain, transport, - holder: holder_, + signer: _signer, index = 0n, - activeModule, + activeValidationModule, factoryAddress = contracts.k1ValidatorFactory.address, k1ValidatorAddress = contracts.k1Validator.address, key = "nexus account", name = "Nexus Account" } = parameters - const holder = await toHolder({ holder: holder_ }) + const signer = await toSigner({ signer: _signer }) const masterClient = createWalletClient({ - account: holder, + account: signer, chain, transport, key, @@ -178,16 +180,16 @@ export const toNexusAccount = async ( args: [signerAddress, index, [], 0] }) - const defaultedActiveModule = - activeModule ?? + let defaultedActiveModule = + activeValidationModule ?? new K1ValidatorModule( { address: k1ValidatorAddress, type: "validator", - context: signerAddress, + data: signerAddress, additionalContext: "0x" }, - holder + signer ) let _accountAddress: Address @@ -215,7 +217,6 @@ export const toNexusAccount = async ( _accountAddress = e?.cause.data.args[0] as Address return _accountAddress } - console.log("Im in here", e) } throw new Error("Failed to get counterfactual account address") } @@ -345,6 +346,15 @@ export const toNexusAccount = async ( } } + /** + * @description Changes the active module for the account + * @param newModule - The new module to set as active + * @returns void + */ + const setActiveValidationModule = (validationModule: BaseValidationModule): void => { + defaultedActiveModule = validationModule; + } + /** * @description Signs a message * @param params - The parameters for signing @@ -354,9 +364,7 @@ export const toNexusAccount = async ( const signMessage = async ({ message }: { message: SignableMessage }): Promise<Hex> => { - const tempSignature = await defaultedActiveModule - .getHolder() - .signMessage({ message }) + const tempSignature = await defaultedActiveModule.getSigner().signMessage({ message }) const signature = encodePacked( ["address", "bytes"], @@ -510,6 +518,8 @@ export const toNexusAccount = async ( encodeExecute, encodeExecuteBatch, getUserOpHash, + setActiveValidationModule, + getActiveValidationModule: () => defaultedActiveModule, factoryData, factoryAddress } diff --git a/src/sdk/account/utils/index.ts b/src/sdk/account/utils/index.ts index 36c7543f6..64cac06c2 100644 --- a/src/sdk/account/utils/index.ts +++ b/src/sdk/account/utils/index.ts @@ -3,4 +3,4 @@ export * from "./Utils.js" export * from "./Constants.js" export * from "./getChain.js" export * from "./Logger.js" -export * from "./toHolder.js" +export * from "./toSigner.js" diff --git a/src/sdk/account/utils/toHolder.ts b/src/sdk/account/utils/toSigner.ts similarity index 74% rename from src/sdk/account/utils/toHolder.ts rename to src/sdk/account/utils/toSigner.ts index 94d2948fa..27c3a77e3 100644 --- a/src/sdk/account/utils/toHolder.ts +++ b/src/sdk/account/utils/toSigner.ts @@ -17,37 +17,38 @@ import { toAccount } from "viem/accounts" import { signTypedData } from "viem/actions" import { getAction } from "viem/utils" -export type Holder = LocalAccount -export type UnknownHolder = OneOf< +export type Signer = LocalAccount +export type UnknownSigner = OneOf< | EIP1193Provider | WalletClient<Transport, Chain | undefined, Account> | LocalAccount + | Account > -export async function toHolder({ - holder, +export async function toSigner({ + signer, address }: { - holder: UnknownHolder + signer: UnknownSigner address?: Address }): Promise<LocalAccount> { - if ("type" in holder && holder.type === "local") { - return holder as LocalAccount + if ("type" in signer && signer.type === "local") { + return signer as LocalAccount } let walletClient: | WalletClient<Transport, Chain | undefined, Account> | undefined = undefined - if ("request" in holder) { + if ("request" in signer) { if (!address) { try { - ;[address] = await (holder.request as EIP1193RequestFn<EIP1474Methods>)( + ;[address] = await (signer.request as EIP1193RequestFn<EIP1474Methods>)( { method: "eth_requestAccounts" } ) } catch { - ;[address] = await (holder.request as EIP1193RequestFn<EIP1474Methods>)( + ;[address] = await (signer.request as EIP1193RequestFn<EIP1474Methods>)( { method: "eth_accounts" } @@ -58,12 +59,12 @@ export async function toHolder({ walletClient = createWalletClient({ account: address, - transport: custom(holder as EIP1193Provider) + transport: custom(signer as EIP1193Provider) }) } if (!walletClient) { - walletClient = holder as WalletClient<Transport, Chain | undefined, Account> + walletClient = signer as WalletClient<Transport, Chain | undefined, Account> } return toAccount({ diff --git a/src/sdk/clients/createBicoBundlerClient.test.ts b/src/sdk/clients/createBicoBundlerClient.test.ts index 2592ff0d0..8fad5c95d 100644 --- a/src/sdk/clients/createBicoBundlerClient.test.ts +++ b/src/sdk/clients/createBicoBundlerClient.test.ts @@ -34,7 +34,7 @@ describe("bico.bundler", async () => { testClient = toTestClient(chain, getTestAccount(5)) nexusAccount = await toNexusAccount({ - holder: account, + signer: account, chain, transport: http() }) diff --git a/src/sdk/clients/createNexusClient.test.ts b/src/sdk/clients/createNexusClient.test.ts index 156819159..2afec3dd7 100644 --- a/src/sdk/clients/createNexusClient.test.ts +++ b/src/sdk/clients/createNexusClient.test.ts @@ -1,16 +1,12 @@ -import { AbiCoder, ParamType } from "ethers/abi" -import { JsonRpcProvider } from "ethers/providers" -import { Wallet } from "ethers/wallet" import { http, - type AbiParameter, type Account, type Address, type Chain, - type Hex, - encodeAbiParameters, encodeFunctionData, - parseEther + parseEther, + encodeAbiParameters, + encodePacked } from "viem" import { afterAll, beforeAll, describe, expect, test } from "vitest" import { CounterAbi } from "../../test/__contracts/abi" @@ -56,7 +52,7 @@ describe("nexus.client", async () => { testClient = toTestClient(chain, getTestAccount(5)) nexusClient = await createNexusClient({ - holder: account, + signer: account, chain, transport: http(), bundlerTransport: http(bundlerUrl) @@ -120,7 +116,7 @@ describe("nexus.client", async () => { expect(addresses.every(Boolean)).to.be.true expect(addresses).toStrictEqual([ "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account + "0xCAbC052f31414FfEbeA1094924dFeb0D17d85034" // Sender smart account ]) }) @@ -157,19 +153,19 @@ describe("nexus.client", async () => { expect(result).toBeTruthy() }, 30000) - test.skip("should create a nexusAccount from an ethers signer", async () => { - const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) - const ethersSigner = new Wallet(pKey, ethersProvider) + // test("should create a nexusAccount from an ethers signer", async () => { + // const ethersProvider = new JsonRpcProvider(chain.rpcUrls.default.http[0]) + // const ethersSigner = new Wallet(pKey, ethersProvider) - const ethOwnerNexusClient = await createNexusClient({ - chain, - owner: (await ethersSigner.getAddress()) as Hex, - bundlerTransport: http(bundlerUrl), - transport: http(chain.rpcUrls.default.http[0]) - }) + // const ethOwnerNexusClient = await createNexusClient({ + // chain, + // bundlerTransport: http(bundlerUrl), + // signer: ethersSigner, + // transport: http(chain.rpcUrls.default.http[0]) + // }) - expect(await ethOwnerNexusClient.account.getAddress()).toBeTruthy() - }) + // expect(await ethOwnerNexusClient.account.getAddress()).toBeTruthy() + // }) test("should read estimated user op gas values", async () => { const userOp = await nexusClient.prepareUserOperation({ @@ -202,19 +198,19 @@ describe("nexus.client", async () => { test("should have correct fields", async () => { const chainId = 1 const chain = getChain(chainId) - ;[ - "blockExplorers", - "contracts", - "fees", - "formatters", - "id", - "name", - "nativeCurrency", - "rpcUrls", - "serializers" - ].every((field) => { - expect(chain).toHaveProperty(field) - }) + ;[ + "blockExplorers", + "contracts", + "fees", + "formatters", + "id", + "name", + "nativeCurrency", + "rpcUrls", + "serializers" + ].every((field) => { + expect(chain).toHaveProperty(field) + }) }) test("should throw an error, chain id not found", async () => { @@ -234,7 +230,7 @@ describe("nexus.client", async () => { module: { type: "validator", address: addresses.K1Validator, - context: "0x" + data: "0x" } }), nexusClient.supportsExecutionMode({ @@ -259,17 +255,4 @@ describe("nexus.client", async () => { expect(status).toBe("success") expect(balanceAfter - balanceBefore).toBe(2n) }) - - // Not working - test.skip("should uninstall modules", async () => { - const result = await nexusClient.uninstallModules({ - modules: [ - { - type: "validator", - address: addresses.K1Validator, - context: "0x" - } - ] - }) - }) }) diff --git a/src/sdk/clients/createNexusClient.ts b/src/sdk/clients/createNexusClient.ts index c6637f1f2..fc5ad1447 100644 --- a/src/sdk/clients/createNexusClient.ts +++ b/src/sdk/clients/createNexusClient.ts @@ -20,7 +20,7 @@ import contracts from "../__contracts" import type { Call } from "../account/utils/Types" import { type NexusAccount, toNexusAccount } from "../account/toNexusAccount" -import type { UnknownHolder } from "../account/utils/toHolder" +import type { UnknownSigner } from "../account/utils/toSigner" import type { BaseExecutionModule } from "../modules/base/BaseExecutionModule" import type { BaseValidationModule } from "../modules/base/BaseValidationModule" import { createBicoBundlerClient } from "./createBicoBundlerClient" @@ -51,34 +51,34 @@ export type NexusClient< ClientConfig<transport, chain, account, rpcSchema>, "cacheTime" | "chain" | "key" | "name" | "pollingInterval" | "rpcSchema" > & - BundlerActions<NexusAccount> & - Erc7579Actions<NexusAccount> & - SmartAccountActions<chain, NexusAccount> & { - /** - * The Nexus account associated with this client - */ - account: NexusAccount - /** - * Optional client for additional functionality - */ - client?: client | Client | undefined - /** - * Transport configuration for the bundler - */ - bundlerTransport?: BundlerClientConfig["transport"] - /** - * Optional paymaster configuration - */ - paymaster?: BundlerClientConfig["paymaster"] | undefined - /** - * Optional paymaster context - */ - paymasterContext?: BundlerClientConfig["paymasterContext"] | undefined - /** - * Optional user operation configuration - */ - userOperation?: BundlerClientConfig["userOperation"] | undefined - } + BundlerActions<NexusAccount> & + Erc7579Actions<NexusAccount> & + SmartAccountActions<chain, NexusAccount> & { + /** + * The Nexus account associated with this client + */ + account: NexusAccount + /** + * Optional client for additional functionality + */ + client?: client | Client | undefined + /** + * Transport configuration for the bundler + */ + bundlerTransport?: BundlerClientConfig["transport"] + /** + * Optional paymaster configuration + */ + paymaster?: BundlerClientConfig["paymaster"] | undefined + /** + * Optional paymaster context + */ + paymasterContext?: BundlerClientConfig["paymasterContext"] | undefined + /** + * Optional user operation configuration + */ + userOperation?: BundlerClientConfig["userOperation"] | undefined + } > /** @@ -109,37 +109,37 @@ export type NexusClientConfig< client?: client | Client | undefined /** Paymaster configuration. */ paymaster?: - | true - | { - /** Retrieves paymaster-related User Operation properties to be used for sending the User Operation. */ - getPaymasterData?: PaymasterActions["getPaymasterData"] | undefined - /** Retrieves paymaster-related User Operation properties to be used for gas estimation. */ - getPaymasterStubData?: - | PaymasterActions["getPaymasterStubData"] - | undefined - } + | true + | { + /** Retrieves paymaster-related User Operation properties to be used for sending the User Operation. */ + getPaymasterData?: PaymasterActions["getPaymasterData"] | undefined + /** Retrieves paymaster-related User Operation properties to be used for gas estimation. */ + getPaymasterStubData?: + | PaymasterActions["getPaymasterStubData"] | undefined + } + | undefined /** Paymaster context to pass to `getPaymasterData` and `getPaymasterStubData` calls. */ paymasterContext?: unknown /** User Operation configuration. */ userOperation?: - | { - /** Prepares fee properties for the User Operation request. */ - estimateFeesPerGas?: - | ((parameters: { - account: account | SmartAccount - bundlerClient: Client - userOperation: UserOperationRequest - }) => Promise<EstimateFeesPerGasReturnType<"eip1559">>) - | undefined - } + | { + /** Prepares fee properties for the User Operation request. */ + estimateFeesPerGas?: + | ((parameters: { + account: account | SmartAccount + bundlerClient: Client + userOperation: UserOperationRequest + }) => Promise<EstimateFeesPerGasReturnType<"eip1559">>) | undefined + } + | undefined /** Owner of the account. */ - holder: UnknownHolder + signer: UnknownSigner /** Index of the account. */ index?: bigint /** Active module of the account. */ - activeModule?: BaseValidationModule + activeValidationModule?: BaseValidationModule /** Executor module of the account. */ executorModule?: BaseExecutionModule /** Factory address of the account. */ @@ -164,7 +164,7 @@ export type NexusClientConfig< * chain: mainnet, * transport: http('https://mainnet.infura.io/v3/YOUR-PROJECT-ID'), * bundlerTransport: http('https://api.biconomy.io'), - * holder: '0x...', + * signer: '0x...', * }) */ export async function createNexusClient( @@ -173,11 +173,11 @@ export async function createNexusClient( const { client: client_, chain = parameters.chain ?? client_?.chain, - holder, + signer, index = 0n, key = "nexus client", name = "Nexus Client", - activeModule, + activeValidationModule, factoryAddress = contracts.k1ValidatorFactory.address, k1ValidatorAddress = contracts.k1Validator.address, bundlerTransport, @@ -202,9 +202,9 @@ export async function createNexusClient( const nexusAccount = await toNexusAccount({ transport, chain, - holder, + signer, index, - activeModule, + activeValidationModule, factoryAddress, k1ValidatorAddress }) diff --git a/src/sdk/clients/decorators/erc7579/erc7579.decorators.test.ts b/src/sdk/clients/decorators/erc7579/erc7579.decorators.test.ts index e8d5c7cc5..a63df7e0f 100644 --- a/src/sdk/clients/decorators/erc7579/erc7579.decorators.test.ts +++ b/src/sdk/clients/decorators/erc7579/erc7579.decorators.test.ts @@ -1,6 +1,14 @@ -import { textSpanOverlapsWith } from "typescript" -import { http, type Account, type Address, type Chain, isHex } from "viem" +import { + http, + type Account, + type Address, + type Chain, + encodePacked, + isHex, + encodeAbiParameters, +} from "viem" import { afterAll, beforeAll, describe, expect, test } from "vitest" +import mockAddresses from "../../../../test/__contracts/mockAddresses" import { toNetwork } from "../../../../test/testSetup" import { type MasterClient, @@ -20,7 +28,7 @@ describe("erc7579.decorators", async () => { // Test utils let testClient: MasterClient - let account: Account + let eoaAccount: Account let nexusClient: NexusClient let nexusAccountAddress: Address let recipient: Account @@ -31,13 +39,13 @@ describe("erc7579.decorators", async () => { chain = network.chain bundlerUrl = network.bundlerUrl - account = getTestAccount(0) + eoaAccount = getTestAccount(0) recipient = getTestAccount(1) recipientAddress = recipient.address testClient = toTestClient(chain, getTestAccount(5)) nexusClient = await createNexusClient({ - holder: account, + signer: eoaAccount, chain, transport: http(), bundlerTransport: http(bundlerUrl) @@ -71,7 +79,7 @@ describe("erc7579.decorators", async () => { module: { type: "validator", address: contracts.k1Validator.address, - context: "0x" + data: "0x" } }) ]) @@ -85,15 +93,12 @@ describe("erc7579.decorators", async () => { expect(isK1ValidatorInstalled).toBe(true) }) - test.skip("should uninstall a module", async () => { - const gas = await testClient.estimateFeesPerGas() - - const hash = await nexusClient.uninstallModule({ - ...gas, + test("should install a module", async () => { + const hash = await nexusClient.installModule({ module: { type: "validator", - address: contracts.k1Validator.address, - context: "0x" + address: mockAddresses.MockValidator, + data: encodePacked(["address"], [eoaAccount.address]) } }) @@ -101,12 +106,28 @@ describe("erc7579.decorators", async () => { expect(success).toBe(true) }) - test.skip("should install a module", async () => { - const hash = await nexusClient.installModule({ + test("should uninstall a module", async () => { + const [installedValidators, nextCursor] = await nexusClient.getInstalledValidators({}) + + const prevModule = await nexusClient.getPreviousModule({ + module: { + address: mockAddresses.MockValidator, + type: "validator" + }, + installedValidators + }) + + const hash = await nexusClient.uninstallModule({ module: { type: "validator", - address: contracts.k1Validator.address, - context: "0x" + address: mockAddresses.MockValidator, + data: encodeAbiParameters( + [ + { name: "prev", type: "address" }, + { name: "disableModuleData", type: "bytes" } + ], + [prevModule, encodePacked(["address"], [eoaAccount.address])] + ) } }) diff --git a/src/sdk/clients/decorators/erc7579/getPreviousModule.ts b/src/sdk/clients/decorators/erc7579/getPreviousModule.ts new file mode 100644 index 000000000..50a8a7127 --- /dev/null +++ b/src/sdk/clients/decorators/erc7579/getPreviousModule.ts @@ -0,0 +1,84 @@ +import { type Address, type Client, type Hex } from "viem" +import { type GetSmartAccountParameter, type SmartAccount } from "viem/account-abstraction" +import { getAddress } from "viem/utils" +import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" +import { type ModuleType } from "@rhinestone/module-sdk" + +const SENTINEL_ADDRESS = '0x0000000000000000000000000000000000000001' as const + +export type GetPreviousModuleParameters< + TSmartAccount extends SmartAccount | undefined +> = GetSmartAccountParameter<TSmartAccount> & { + module: { + address: Address, + type: ModuleType + }, + installedValidators?: readonly Hex[], + installedExecutors?: readonly Hex[] +} + +/** + * Gets the address of the previous module of the same type as the given module. + * + * @param client - The client instance. + * @param parameters - Parameters including the smart account and the module to check. + * @returns The address of the previous module, or the sentinel address if it's the first module. + * @throws {AccountNotFoundError} If the account is not found. + * @throws {Error} If the module type is unknown or the module is not found. + * + * @example + * import { getPreviousModule } from '@biconomy/sdk' + * + * const previousModuleAddress = await getPreviousModule(nexusClient, { + * module: { + * type: 'validator', + * moduleAddress: '0x...', + * } + * }) + * console.log(previousModuleAddress) // '0x...' + */ +export async function getPreviousModule< + TSmartAccount extends SmartAccount | undefined +>( + client: Client, + parameters: GetPreviousModuleParameters<TSmartAccount> +): Promise<Hex> { + const { account: account_ = client.account, module } = parameters + + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } + + console.log(parameters, "parameters"); + + let installedModules: Hex[] + if (module.type === "validator") { + if (!parameters.installedValidators) throw Error("installedValidators parameter is missing") + installedModules = [...parameters.installedValidators] + } else if (module.type === "executor") { + if (!parameters.installedExecutors) throw Error("installedExecutors parameter is missing") + installedModules = [...parameters.installedExecutors] + } else { + throw new Error(`Unknown module type ${module.type}`) + } + + return _getModuleByIndex(installedModules, module.address) +} + +function _getModuleByIndex( + installedModules: Hex[], + moduleAddress: Address +): Hex { + const index = installedModules.indexOf(getAddress(moduleAddress)) + if (index === 0) { + return SENTINEL_ADDRESS + } + if (index > 0) { + return installedModules[index - 1] + } + throw new Error( + `Module ${moduleAddress} not found in installed modules` + ) +} \ No newline at end of file diff --git a/src/sdk/clients/decorators/erc7579/index.ts b/src/sdk/clients/decorators/erc7579/index.ts index a0e79cd96..79947c008 100644 --- a/src/sdk/clients/decorators/erc7579/index.ts +++ b/src/sdk/clients/decorators/erc7579/index.ts @@ -44,12 +44,22 @@ import { type UninstallModulesParameters, uninstallModules } from "./uninstallModules.js" +import { + type GetPreviousModuleParameters, + getPreviousModule +} from "./getPreviousModule.js" export type Erc7579Actions<TSmartAccount extends SmartAccount | undefined> = { accountId: (args?: GetSmartAccountParameter<TSmartAccount>) => Promise<string> - installModule: (args: InstallModuleParameters<TSmartAccount>) => Promise<Hash> + installModule: ( + args: InstallModuleParameters<TSmartAccount> & { + signatureOverride?: Hex + } + ) => Promise<Hash> installModules: ( - args: InstallModulesParameters<TSmartAccount> + args: InstallModulesParameters<TSmartAccount> & { + signatureOverride?: Hex + } ) => Promise<Hash> isModuleInstalled: ( args: IsModuleInstalledParameters<TSmartAccount> @@ -61,10 +71,14 @@ export type Erc7579Actions<TSmartAccount extends SmartAccount | undefined> = { args: SupportsModuleParameters<TSmartAccount> ) => Promise<boolean> uninstallModule: ( - args: UninstallModuleParameters<TSmartAccount> + args: UninstallModuleParameters<TSmartAccount> & { + signatureOverride?: Hex + } ) => Promise<Hash> uninstallModules: ( - args: UninstallModulesParameters<TSmartAccount> + args: UninstallModulesParameters<TSmartAccount> & { + signatureOverride?: Hex + } ) => Promise<Hash> getInstalledValidators: ( args: GetInstalledValidatorsParameters<TSmartAccount> @@ -76,6 +90,7 @@ export type Erc7579Actions<TSmartAccount extends SmartAccount | undefined> = { getFallbackBySelector: ( args: GetFallbackBySelectorParameters<TSmartAccount> ) => Promise<[Hex, Hex]> + getPreviousModule: (args: GetPreviousModuleParameters<TSmartAccount>) => Promise<Hex> } export type { @@ -89,7 +104,8 @@ export type { UninstallModuleParameters, GetInstalledValidatorsParameters, GetInstalledExecutorsParameters, - GetActiveHookParameters + GetActiveHookParameters, + GetPreviousModuleParameters } export { @@ -104,7 +120,8 @@ export { getInstalledValidators, getInstalledExecutors, getActiveHook, - getFallbackBySelector + getFallbackBySelector, + getPreviousModule } export function erc7579Actions() { @@ -122,13 +139,14 @@ export function erc7579Actions() { getInstalledValidators: (args) => getInstalledValidators(client, args), getInstalledExecutors: (args) => getInstalledExecutors(client, args), getActiveHook: (args) => getActiveHook(client, args), - getFallbackBySelector: (args) => getFallbackBySelector(client, args) + getFallbackBySelector: (args) => getFallbackBySelector(client, args), + getPreviousModule: (args) => getPreviousModule(client, args) }) } export type Module = { address: Address - context: Hex + data?: Hex additionalContext?: Hex type: ModuleType diff --git a/src/sdk/clients/decorators/erc7579/installModule.ts b/src/sdk/clients/decorators/erc7579/installModule.ts index f5eb21548..95749a0e9 100644 --- a/src/sdk/clients/decorators/erc7579/installModule.ts +++ b/src/sdk/clients/decorators/erc7579/installModule.ts @@ -1,4 +1,4 @@ -import { type Client, type Hex, encodeFunctionData, getAddress } from "viem" +import { type Chain, type Client, type Hex, type Transport, encodeFunctionData, getAddress } from "viem" import { type GetSmartAccountParameter, type SmartAccount, @@ -41,7 +41,7 @@ export type InstallModuleParameters< export async function installModule< TSmartAccount extends SmartAccount | undefined >( - client: Client, + client: Client<Transport, Chain | undefined, TSmartAccount>, parameters: InstallModuleParameters<TSmartAccount> ): Promise<Hex> { const { @@ -49,7 +49,7 @@ export async function installModule< maxFeePerGas, maxPriorityFeePerGas, nonce, - module: { type, address, context } + module: { address, data, type } } = parameters if (!account_) { @@ -93,7 +93,7 @@ export async function installModule< } ], functionName: "installModule", - args: [parseModuleTypeId(type), getAddress(address), context] + args: [parseModuleTypeId(type), getAddress(address), data ?? "0x"] }) } ], diff --git a/src/sdk/clients/decorators/erc7579/installModules.ts b/src/sdk/clients/decorators/erc7579/installModules.ts index ac7366b8d..ff62d8c22 100644 --- a/src/sdk/clients/decorators/erc7579/installModules.ts +++ b/src/sdk/clients/decorators/erc7579/installModules.ts @@ -23,7 +23,7 @@ export type InstallModulesParameters< modules: { type: ModuleType address: Address - context: Hex + data: Hex }[] maxFeePerGas?: bigint maxPriorityFeePerGas?: bigint @@ -75,7 +75,7 @@ export async function installModules< sendUserOperation, "sendUserOperation" )({ - calls: modules.map(({ type, address, context }) => ({ + calls: modules.map(({ type, address, data }) => ({ to: account.address, value: BigInt(0), data: encodeFunctionData({ @@ -102,7 +102,7 @@ export async function installModules< } ], functionName: "installModule", - args: [parseModuleTypeId(type), getAddress(address), context] + args: [parseModuleTypeId(type), getAddress(address), data] }) })), maxFeePerGas, diff --git a/src/sdk/clients/decorators/erc7579/isModuleInstalled.ts b/src/sdk/clients/decorators/erc7579/isModuleInstalled.ts index a135bb9bb..f2c62b186 100644 --- a/src/sdk/clients/decorators/erc7579/isModuleInstalled.ts +++ b/src/sdk/clients/decorators/erc7579/isModuleInstalled.ts @@ -52,7 +52,7 @@ export async function isModuleInstalled< ): Promise<boolean> { const { account: account_ = client.account, - module: { address, context, type } + module: { address, data, type } } = parameters if (!account_) { @@ -100,7 +100,7 @@ export async function isModuleInstalled< )({ abi, functionName: "isModuleInstalled", - args: [parseModuleTypeId(type), getAddress(address), context], + args: [parseModuleTypeId(type), getAddress(address), data ?? "0x"], address: account.address })) as unknown as Promise<boolean> } catch (error) { @@ -118,7 +118,7 @@ export async function isModuleInstalled< data: encodeFunctionData({ abi, functionName: "isModuleInstalled", - args: [parseModuleTypeId(type), getAddress(address), context] + args: [parseModuleTypeId(type), getAddress(address), data ?? "0x"] }) }) diff --git a/src/sdk/clients/decorators/erc7579/supportsExecutionMode.ts b/src/sdk/clients/decorators/erc7579/supportsExecutionMode.ts index 23c788b85..e4249d428 100644 --- a/src/sdk/clients/decorators/erc7579/supportsExecutionMode.ts +++ b/src/sdk/clients/decorators/erc7579/supportsExecutionMode.ts @@ -25,7 +25,7 @@ export type ExecutionMode<callType extends CallType> = { type: callType revertOnError?: boolean selector?: Hex - context?: Hex + data?: Hex } export type SupportsExecutionModeParameters< @@ -54,7 +54,7 @@ export function encodeExecutionMode<callType extends CallType>({ type, revertOnError, selector, - context + data }: ExecutionMode<callType>): Hex { return encodePacked( ["bytes1", "bytes1", "bytes4", "bytes4", "bytes22"], @@ -63,7 +63,7 @@ export function encodeExecutionMode<callType extends CallType>({ toHex(toBytes(revertOnError ? "0x01" : "0x00", { size: 1 })), toHex(toBytes("0x0", { size: 4 })), toHex(toBytes(selector ?? "0x", { size: 4 })), - toHex(toBytes(context ?? "0x", { size: 22 })) + toHex(toBytes(data ?? "0x", { size: 22 })) ] ) } @@ -98,7 +98,7 @@ export async function supportsExecutionMode< type, revertOnError, selector, - context + data } = args if (!account_) { @@ -115,7 +115,7 @@ export async function supportsExecutionMode< type, revertOnError, selector, - context + data }) const abi = [ diff --git a/src/sdk/clients/decorators/erc7579/uninstallFallback.ts b/src/sdk/clients/decorators/erc7579/uninstallFallback.ts deleted file mode 100644 index 7a4b6dc37..000000000 --- a/src/sdk/clients/decorators/erc7579/uninstallFallback.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { - type Chain, - type Client, - type Hex, - type Transport, - encodeFunctionData, - getAddress -} from "viem" -import { - type GetSmartAccountParameter, - type SmartAccount, - sendUserOperation -} from "viem/account-abstraction" -import { getAction } from "viem/utils" -import { parseAccount } from "viem/utils" -import type { Module } from "." -import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" -import { parseModuleTypeId } from "./supportsModule" - -export type UninstallFallbackParameters< - TSmartAccount extends SmartAccount | undefined -> = GetSmartAccountParameter<TSmartAccount> & { - module: Module - maxFeePerGas?: bigint - maxPriorityFeePerGas?: bigint - nonce?: bigint -} - -/** - * Uninstalls a fallback module from a smart account. - * - * @param client - The client instance. - * @param parameters - Parameters including the smart account, module to uninstall, and optional gas settings. - * @returns The hash of the user operation as a hexadecimal string. - * @throws {AccountNotFoundError} If the account is not found. - * - * @example - * import { uninstallFallback } from '@biconomy/sdk' - * - * const userOpHash = await uninstallFallback(nexusClient, { - * module: { - * type: 'fallback', - * address: '0x...', - * context: '0x' - * } - * }) - * console.log(userOpHash) // '0x...' - */ -export async function uninstallFallback< - TSmartAccount extends SmartAccount | undefined ->( - client: Client<Transport, Chain | undefined, TSmartAccount>, - parameters: UninstallFallbackParameters<TSmartAccount> -): Promise<Hex> { - const { - account: account_ = client.account, - maxFeePerGas, - maxPriorityFeePerGas, - nonce, - module: { address, context, type } - } = parameters - - if (!account_) { - throw new AccountNotFoundError({ - docsPath: "/docs/actions/wallet/sendTransaction" - }) - } - - const account = parseAccount(account_) as SmartAccount - - return getAction( - client, - sendUserOperation, - "sendUserOperation" - )({ - calls: [ - { - to: account.address, - value: BigInt(0), - data: encodeFunctionData({ - abi: [ - { - name: "uninstallFallback", - type: "function", - stateMutability: "nonpayable", - inputs: [ - { - type: "uint256", - name: "moduleTypeId" - }, - { - type: "address", - name: "module" - }, - { - type: "bytes", - name: "deInitData" - } - ], - outputs: [] - } - ], - functionName: "uninstallFallback", - args: [parseModuleTypeId(type), getAddress(address), context] - }) - } - ], - maxFeePerGas, - maxPriorityFeePerGas, - nonce, - account: account - }) -} diff --git a/src/sdk/clients/decorators/erc7579/uninstallModule.ts b/src/sdk/clients/decorators/erc7579/uninstallModule.ts index 03f29878f..412f565a7 100644 --- a/src/sdk/clients/decorators/erc7579/uninstallModule.ts +++ b/src/sdk/clients/decorators/erc7579/uninstallModule.ts @@ -50,14 +50,17 @@ export async function uninstallModule< TSmartAccount extends SmartAccount | undefined >( client: Client<Transport, Chain | undefined, TSmartAccount>, - parameters: UninstallModuleParameters<TSmartAccount> + parameters: UninstallModuleParameters<TSmartAccount> & { + signatureOverride?: Hex + } ): Promise<Hex> { const { account: account_ = client.account, maxFeePerGas, maxPriorityFeePerGas, nonce, - module: { address, context, type } + module: { address, data, type }, + signatureOverride } = parameters if (!account_) { @@ -101,13 +104,14 @@ export async function uninstallModule< } ], functionName: "uninstallModule", - args: [parseModuleTypeId(type), getAddress(address), context] + args: [parseModuleTypeId(type), getAddress(address), data ?? "0x"] }) } ], maxFeePerGas, maxPriorityFeePerGas, nonce, - account: account + account, + signature: signatureOverride }) } diff --git a/src/sdk/clients/decorators/erc7579/uninstallModules.ts b/src/sdk/clients/decorators/erc7579/uninstallModules.ts index 0c28dd4de..006dfc358 100644 --- a/src/sdk/clients/decorators/erc7579/uninstallModules.ts +++ b/src/sdk/clients/decorators/erc7579/uninstallModules.ts @@ -72,7 +72,7 @@ export async function uninstallModules< sendUserOperation, "sendUserOperation" )({ - calls: modules.map(({ type, address, context }) => ({ + calls: modules.map(({ type, address, data }) => ({ to: account.address, value: BigInt(0), data: encodeFunctionData({ @@ -99,7 +99,7 @@ export async function uninstallModules< } ], functionName: "uninstallModule", - args: [parseModuleTypeId(type), getAddress(address), context] + args: [parseModuleTypeId(type), getAddress(address), data ?? "0x"] }) })), maxFeePerGas, diff --git a/src/sdk/clients/decorators/smartAccount/account.decorators.test.ts b/src/sdk/clients/decorators/smartAccount/account.decorators.test.ts index 7dfa9c8d8..3dbf65e38 100644 --- a/src/sdk/clients/decorators/smartAccount/account.decorators.test.ts +++ b/src/sdk/clients/decorators/smartAccount/account.decorators.test.ts @@ -38,12 +38,11 @@ describe("account.decorators", async () => { testClient = toTestClient(chain, getTestAccount(5)) nexusClient = await createNexusClient({ - holder: account, + signer: account, chain, transport: http(), bundlerTransport: http(bundlerUrl) }) - nexusAccountAddress = await nexusClient.account.getCounterFactualAddress() await fundAndDeployClients(testClient, [nexusClient]) }) @@ -56,7 +55,7 @@ describe("account.decorators", async () => { const signedMessage = await nexusClient.signMessage({ message: "hello" }) expect(signedMessage).toEqual( - "0x6854688d3d9a87a33addd5f4deb5cea1b97fa5b7f16ea9a3478698f695fd1401bfe27e9e4a7e8e3da94aa72b021125e31fa899cc573c48ea3fe1d4ab61a9db10c19032026e3ed2dbccba5a178235ac27f94504311c" + "0x08fca672878ad598fbdaddebfbb71dd9ba90b75af16ea9a3478698f695fd1401bfe27e9e4a7e8e3da94aa72b021125e31fa899cc573c48ea3fe1d4ab61a9db10c19032026e3ed2dbccba5a178235ac27f94504311c" ) }) diff --git a/src/sdk/clients/decorators/smartAccount/sendTransaction.ts b/src/sdk/clients/decorators/smartAccount/sendTransaction.ts index c282896dc..74da8efb1 100644 --- a/src/sdk/clients/decorators/smartAccount/sendTransaction.ts +++ b/src/sdk/clients/decorators/smartAccount/sendTransaction.ts @@ -43,7 +43,8 @@ export async function sendTransaction< client: Client<Transport, chain, account>, args: | SendTransactionParameters<chain, account, chainOverride> - | SendUserOperationParameters<account, accountOverride, calls> + | SendUserOperationParameters<account, accountOverride, calls>, + signature?: `0x${string}` ): Promise<Hash> { let userOpHash: Hash @@ -83,6 +84,7 @@ export async function sendTransaction< account, maxFeePerGas, maxPriorityFeePerGas, + signature, nonce: nonce ? BigInt(nonce) : undefined }) } else { @@ -90,7 +92,7 @@ export async function sendTransaction< client, sendUserOperation, "sendUserOperation" - )({ ...args } as SendUserOperationParameters<account, accountOverride>) + )({ ...args, signature } as SendUserOperationParameters<account, accountOverride>) } const userOperationReceipt = await getAction( diff --git a/src/sdk/modules/base/BaseModule.ts b/src/sdk/modules/base/BaseModule.ts index 7b6e9d216..beb4f6632 100644 --- a/src/sdk/modules/base/BaseModule.ts +++ b/src/sdk/modules/base/BaseModule.ts @@ -1,6 +1,6 @@ import { type Address, type Hex, encodeFunctionData, parseAbi } from "viem" import contracts from "../../__contracts/index.js" -import type { Holder } from "../../account/utils/toHolder.js" +import type { Signer } from "../../account/utils/toSigner.js" import type { Module } from "../../clients/decorators/erc7579/index.js" import { type ModuleType, @@ -10,21 +10,21 @@ import { export abstract class BaseModule { address: Address - context: Hex + data: Hex additionalContext: Hex type: ModuleType hook?: Address version: ModuleVersion = "1.0.0-beta" entryPoint: Address = contracts.entryPoint.address - holder: Holder + signer: Signer - constructor(module: Module, holder: Holder) { + constructor(module: Module, signer: Signer) { this.address = module.address - this.context = module.context ?? "0x" + this.data = module.data ?? "0x" this.additionalContext = module.additionalContext ?? "0x" this.hook = module.hook this.type = module.type - this.holder = holder + this.signer = signer } public installModule(): Hex { @@ -33,11 +33,7 @@ export abstract class BaseModule { "function installModule(uint256 moduleTypeId, address module, bytes calldata initData) external" ]), functionName: "installModule", - args: [ - BigInt(moduleTypeIds[this.type]), - this.address, - this.context ?? "0x" - ] + args: [BigInt(moduleTypeIds[this.type]), this.address, this.data ?? "0x"] }) return installModuleData @@ -82,14 +78,14 @@ export abstract class BaseModule { * @returns True if the module is initialized for the given smart account, false otherwise. */ public isInitialized(smartAccount: Address): Hex { - const isInitializedeData = encodeFunctionData({ + const isInitializedData = encodeFunctionData({ abi: parseAbi([ "function isInitialized(address smartAccount) external view returns (bool)" ]), functionName: "isInitialized", args: [smartAccount] }) - return isInitializedeData + return isInitializedData } public getAddress(): Hex { diff --git a/src/sdk/modules/base/BaseValidationModule.ts b/src/sdk/modules/base/BaseValidationModule.ts index 6bc74508d..7db817029 100644 --- a/src/sdk/modules/base/BaseValidationModule.ts +++ b/src/sdk/modules/base/BaseValidationModule.ts @@ -1,10 +1,10 @@ import { type Hex, getAddress } from "viem" -import type { Holder } from "../../account/utils/toHolder.js" +import type { Signer } from "../../account/utils/toSigner.js" import { BaseModule } from "./BaseModule.js" export abstract class BaseValidationModule extends BaseModule { - public getHolder(): Holder { - return this.holder + public getSigner(): Signer { + return this.signer } getDummySignature(): Hex { @@ -19,7 +19,7 @@ export abstract class BaseValidationModule extends BaseModule { } async signUserOpHash(userOpHash: string): Promise<Hex> { - const signature = await this.holder.signMessage({ + const signature = await this.signer.signMessage({ message: { raw: userOpHash as Hex } }) return signature as Hex @@ -27,10 +27,10 @@ export abstract class BaseValidationModule extends BaseModule { async signMessageHolder( _message: string | Uint8Array, - holder: Holder + signer: Signer ): Promise<string> { const message = typeof _message === "string" ? _message : { raw: _message } - let signature: `0x${string}` = await holder.signMessage({ message }) + let signature: `0x${string}` = await signer.signMessage({ message }) const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) if (![27, 28].includes(potentiallyIncorrectV)) { @@ -42,15 +42,15 @@ export abstract class BaseValidationModule extends BaseModule { } /** - * Signs a message using the appropriate method based on the type of holder. + * Signs a message using the appropriate method based on the type of signer. * * @param {Uint8Array | string} message - The message to be signed. * @returns {Promise<string>} A promise resolving to the signature or error message. - * @throws {Error} If the holder type is invalid or unsupported. + * @throws {Error} If the signer type is invalid or unsupported. */ async signMessage(_message: Uint8Array | string): Promise<Hex> { const message = typeof _message === "string" ? _message : { raw: _message } - let signature = await this.holder.signMessage({ message }) + let signature = await this.signer.signMessage({ message }) const potentiallyIncorrectV = Number.parseInt(signature.slice(-2), 16) if (![27, 28].includes(potentiallyIncorrectV)) { diff --git a/src/sdk/modules/executors/OwnableExecutor.ts b/src/sdk/modules/executors/OwnableExecutor.ts deleted file mode 100644 index fd9b94d9e..000000000 --- a/src/sdk/modules/executors/OwnableExecutor.ts +++ /dev/null @@ -1,198 +0,0 @@ -import { - type Account, - type Address, - type Chain, - type Hash, - type Hex, - type PublicClient, - type Transport, - type WalletClient, - encodeAbiParameters, - encodeFunctionData, - encodePacked, - getAddress, - parseAbi -} from "viem" -import { SENTINEL_ADDRESS } from "../../account/utils/Constants" -import { type Holder, toHolder } from "../../account/utils/toHolder" -import type { NexusClient } from "../../clients/createNexusClient" -import type { Module } from "../../clients/decorators/erc7579" -import { BaseExecutionModule } from "../base/BaseExecutionModule" -import type { Execution } from "../utils/Types" -export class OwnableExecutorModule extends BaseExecutionModule { - public nexusClient: NexusClient - public owners: Address[] - public override address: Address - - public constructor( - module: Module, - nexusClient: NexusClient, - owners: Address[], - address: Address, - holder: Holder - ) { - super(module, holder) - this.nexusClient = nexusClient - this.owners = owners - this.context = module.context ?? "0x" - this.address = address - } - - public static async create( - nexusClient: NexusClient, - address: Address, - context?: Hex - ): Promise<OwnableExecutorModule> { - const module: Module = { - address: address, - type: "executor", - context: context ?? "0x", - additionalContext: "0x" - } - const owners = await ( - nexusClient.account.client as PublicClient - ).readContract({ - address, - abi: parseAbi([ - "function getOwners(address account) external view returns (address[])" - ]), - functionName: "getOwners", - args: [await nexusClient.account.getAddress()] - }) - const holder = await toHolder({ holder: nexusClient.account.client } as { - holder: WalletClient<Transport, Chain | undefined, Account> - }) - return new OwnableExecutorModule( - module, - nexusClient, - owners as Address[], - address, - holder - ) - } - - public async execute( - execution: Execution | Execution[], - accountAddress?: Address - ): Promise<Hash> { - let calldata: Hex - if (Array.isArray(execution)) { - calldata = encodeFunctionData({ - functionName: "executeBatchOnOwnedAccount", - abi: parseAbi([ - "function executeBatchOnOwnedAccount(address ownedAccount, bytes callData)" - ]), - args: [ - accountAddress ?? (await this.nexusClient.account.getAddress()), - encodeAbiParameters( - [ - { - components: [ - { - name: "target", - type: "address" - }, - { - name: "value", - type: "uint256" - }, - { - name: "callData", - type: "bytes" - } - ], - name: "Execution", - type: "tuple[]" - } - ], - [execution] - ) - ] - }) - } else { - calldata = encodeFunctionData({ - functionName: "executeOnOwnedAccount", - abi: parseAbi([ - "function executeOnOwnedAccount(address ownedAccount, bytes callData)" - ]), - args: [ - accountAddress ?? (await this.nexusClient.account.getAddress()), - encodePacked( - ["address", "uint256", "bytes"], - [ - execution.target, - BigInt(Number(execution.value)), - execution.callData - ] - ) - ] - }) - } - return this.nexusClient.sendTransaction({ - calls: [{ to: this.address, data: calldata, value: 0n }] - }) - } - - public async addOwner(newOwner: Address) { - const callData = encodeFunctionData({ - functionName: "addOwner", - abi: parseAbi(["function addOwner(address owner)"]), - args: [newOwner] - }) - return this.nexusClient.sendTransaction({ - calls: [{ to: this.address, data: callData, value: 0n }] - }) - } - - public async removeOwner(ownerToRemove: Address) { - const owners = await this.getOwners(this.address) - let prevOwner: Address - - const currentOwnerIndex = owners.findIndex( - (o: Address) => o === ownerToRemove - ) - - if (currentOwnerIndex === -1) { - throw new Error("Owner not found") - } - if (currentOwnerIndex === 0) { - prevOwner = SENTINEL_ADDRESS - } else { - prevOwner = getAddress(owners[currentOwnerIndex - 1]) - } - - const calldata = encodeFunctionData({ - functionName: "removeOwner", - abi: parseAbi(["function removeOwner(address prevOwner, address owner)"]), - args: [prevOwner, ownerToRemove] - }) - - return this.nexusClient.sendTransaction({ - calls: [ - { - to: this.address, - data: calldata, - value: 0n - } - ] - }) - } - - public async getOwners( - moduleAddress: Address, - accountAddress?: Address - ): Promise<Address[]> { - const owners = await ( - this.nexusClient.account.client as PublicClient - ).readContract({ - address: moduleAddress, - abi: parseAbi([ - "function getOwners(address account) external view returns (address[])" - ]), - functionName: "getOwners", - args: [accountAddress ?? (await this.nexusClient.account.getAddress())] - }) - - return owners as Address[] - } -} diff --git a/src/sdk/modules/executors/ownableExecutor.test.ts b/src/sdk/modules/executors/ownableExecutor.test.ts new file mode 100644 index 000000000..ebe31a5c8 --- /dev/null +++ b/src/sdk/modules/executors/ownableExecutor.test.ts @@ -0,0 +1,154 @@ +import { TEST_CONTRACTS } from './../../../test/callDatas'; +import { + type Account, + type Address, + type Chain, + encodePacked, + http, + parseAbi, + PublicClient, + toHex, + WalletClient, + zeroAddress, +} from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { toNetwork } from "../../../test/testSetup" +import { + fundAndDeployClients, + getTestAccount, + killNetwork, + toTestClient +} from "../../../test/testUtils" +import type { MasterClient, NetworkConfig } from "../../../test/testUtils" +import { + createNexusClient, + type NexusClient, +} from "../../clients/createNexusClient" +import { createK1ValidatorModule } from "../.." +import { K1ValidatorModule } from '../validators/K1ValidatorModule'; +import { getAddOwnableExecutorOwnerAction, getExecuteOnOwnedAccountAction } from '@rhinestone/module-sdk'; +import { waitForTransactionReceipt } from 'viem/actions'; + +describe("modules.ownableExecutor", async () => { + let network: NetworkConfig + let chain: Chain + let bundlerUrl: string + + // Test utils + let testClient: MasterClient + let account: Account + let nexusClient: NexusClient + let nexusAccountAddress: Address + let recipient: Account + let recipientAddress: Address + let k1ValidatorModule: K1ValidatorModule + beforeAll(async () => { + network = await toNetwork("FILE_LOCALHOST") + + chain = network.chain + bundlerUrl = network.bundlerUrl + account = getTestAccount(0) + recipient = getTestAccount(1) + recipientAddress = recipient.address + + testClient = toTestClient(chain, getTestAccount(5)) + + nexusClient = await createNexusClient({ + signer: account, + chain, + transport: http(), + bundlerTransport: http(bundlerUrl) + }) + + nexusAccountAddress = await nexusClient.account.getCounterFactualAddress() + await fundAndDeployClients(testClient, [nexusClient]) + + k1ValidatorModule = await createK1ValidatorModule(account) + nexusClient.account.setActiveValidationModule(k1ValidatorModule) + }) + + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test("should install OwnableExecutor module", async () => { + const isInstalled = await nexusClient.isModuleInstalled({ + module: { + type: "executor", + address: TEST_CONTRACTS.OwnableExecutorSepolia.address + } + }) + expect(isInstalled).toBe(false) + + const userOpHash = await nexusClient.installModule({ + module: { + type: "executor", + address: TEST_CONTRACTS.OwnableExecutorSepolia.address, + data: encodePacked( + ["address"], + [account.address] + ) + } + }) + expect(userOpHash).toBeDefined() + const receipt = await nexusClient.waitForUserOperationReceipt({ hash: userOpHash }) + expect(receipt.success).toBe(true) + + const isInstalledAfter = await nexusClient.isModuleInstalled({ + module: { + type: "executor", + address: TEST_CONTRACTS.OwnableExecutorSepolia.address + } + }) + expect(isInstalledAfter).toBe(true) + }) + + test("should add another EOA as executor", async () => { + const execution = await getAddOwnableExecutorOwnerAction({ owner: recipientAddress, client: nexusClient.account.client as PublicClient, account: { address: nexusClient.account.address, type: "nexus", deployedOnChains: [] } }) + const userOpHash = await nexusClient.sendTransaction({ + calls: [ + { + to: TEST_CONTRACTS.OwnableExecutorSepolia.address, + data: execution.callData, + value: 0n + } + ] + }) + expect(userOpHash).toBeDefined() + const masterClient = nexusClient.account.client as MasterClient; + const owners = await masterClient.readContract({ + address: TEST_CONTRACTS.OwnableExecutorSepolia.address, + abi: parseAbi([ + "function getOwners(address account) external view returns (address[])" + ]), + functionName: 'getOwners', + args: [nexusClient.account.address] + }) + expect(owners).toContain(recipientAddress) + }) + + test("added executor EOA should execute user operation on smart account", async () => { + const execution = { + target: zeroAddress, + callData: toHex("0x"), + value: 0n + } + + const executeOnOwnedAccountExecution = getExecuteOnOwnedAccountAction({ + execution, + ownedAccount: nexusClient.account.address + }) + + const client = nexusClient.account.client as WalletClient; + const hash = await client.sendTransaction({ + account: recipient, + to: TEST_CONTRACTS.OwnableExecutorSepolia.address, + data: executeOnOwnedAccountExecution.callData, + chain, + value: 0n + }) + + const receipt = await waitForTransactionReceipt(nexusClient.account.client as PublicClient, { hash }) + expect(receipt.status).toBe("success") + }) +}) \ No newline at end of file diff --git a/src/sdk/modules/index.ts b/src/sdk/modules/index.ts index 0883b747e..0e4ec7da8 100644 --- a/src/sdk/modules/index.ts +++ b/src/sdk/modules/index.ts @@ -1,6 +1,5 @@ -import { OwnableExecutorModule } from "./executors/OwnableExecutor.js" import { K1ValidatorModule } from "./validators/K1ValidatorModule.js" -// import { OwnableValidator } from "./validators/OwnableValidator.js" +import { OwnableValidator } from "./validators/OwnableValidator.js" import { ValidationModule } from "./validators/ValidationModule.js" export * from "./utils/Types.js" @@ -8,7 +7,7 @@ export * from "./utils/Constants.js" export * from "./utils/Helper.js" export * from "./interfaces/IValidationModule.js" -export const createOwnableExecutorModule = OwnableExecutorModule.create +// export const createOwnableExecutorModule = OwnableExecutorModule.create export const createK1ValidatorModule = K1ValidatorModule.create -// export const createOwnableValidatorModule = OwnableValidator.create +export const createOwnableValidatorModule = OwnableValidator.create export const createValidationModule = ValidationModule.create diff --git a/src/sdk/modules/interfaces/IValidationModule.ts b/src/sdk/modules/interfaces/IValidationModule.ts index 1ab6b5c67..a64e48902 100644 --- a/src/sdk/modules/interfaces/IValidationModule.ts +++ b/src/sdk/modules/interfaces/IValidationModule.ts @@ -1,10 +1,10 @@ import type { Hex } from "viem" -import type { Holder } from "../../account/utils/toHolder" +import type { Signer } from "../../account/utils/toSigner" export interface IValidationModule { getAddress(): Hex getInitData(): Promise<Hex> - getHolder(): Promise<Holder> + getHolder(): Promise<Signer> signUserOpHash(_userOpHash: string): Promise<Hex> signMessage(_message: string | Uint8Array): Promise<string> getDummySignature(): Promise<Hex> diff --git a/src/sdk/modules/smart.sessions.test.ts b/src/sdk/modules/smart.sessions.test.ts index de07b3101..87595f143 100644 --- a/src/sdk/modules/smart.sessions.test.ts +++ b/src/sdk/modules/smart.sessions.test.ts @@ -40,7 +40,7 @@ describe("smart.sessions", async () => { testClient = toTestClient(chain, getTestAccount(5)) nexusClient = await createNexusClient({ - holder: account, + signer: account, chain, transport: http(), bundlerTransport: http(bundlerUrl) diff --git a/src/sdk/modules/utils/Helper.ts b/src/sdk/modules/utils/Helper.ts index 8975e154f..35f3eab36 100644 --- a/src/sdk/modules/utils/Helper.ts +++ b/src/sdk/modules/utils/Helper.ts @@ -2,6 +2,7 @@ import { type ByteArray, type Chain, type Hex, + type PrivateKeyAccount, encodeAbiParameters, isHex, keccak256, @@ -16,8 +17,7 @@ import { getChain } from "../../account/index.js" import type { - ChainInfo, - SignerData + ChainInfo // createOwnableValidatorModule } from "../../index.js" @@ -152,13 +152,10 @@ export const getUserOpHash = ( return keccak256(enc) } -export const getRandomSigner = (): SignerData => { +export const getRandomSigner = (): PrivateKeyAccount => { const pkey = generatePrivateKey() const account = privateKeyToAccount(pkey) - return { - pvKey: pkey, - pbKey: account.address - } + return account } export const parseChain = (chainInfo: ChainInfo): Chain => { diff --git a/src/sdk/modules/utils/Types.ts b/src/sdk/modules/utils/Types.ts index ba723048c..e4558ddab 100644 --- a/src/sdk/modules/utils/Types.ts +++ b/src/sdk/modules/utils/Types.ts @@ -1,5 +1,5 @@ import type { Address, Chain, Hex } from "viem" -import type { Holder, UnknownHolder } from "../../account/utils/toHolder" +import type { Signer, UnknownSigner } from "../../account/utils/toSigner" export type ModuleVersion = "1.0.0-beta" // | 'V1_0_1' @@ -14,7 +14,7 @@ export interface K1ValidationModuleConfig extends BaseValidationModuleConfig { /** Version of the module */ version?: ModuleVersion /** Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - signer: UnknownHolder + signer: UnknownSigner } export interface K1ValidatorModuleConfigConstructorProps @@ -23,8 +23,8 @@ export interface K1ValidatorModuleConfigConstructorProps moduleAddress?: Hex /** Version of the module */ version?: ModuleVersion - /** Signer: Converted from viemWallet or ethers signer to Holder */ - holder: Holder + /** Signer: Converted from viemWallet or ethers signer to Signer */ + signer: Signer } export type SessionDataTuple = [ @@ -40,7 +40,7 @@ export type SessionParams = { /** ID of the session */ sessionID?: string /** Session Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - sessionSigner: UnknownHolder + sessionSigner: UnknownSigner /** The session validation module is a sub-module smart-contract which works with session key manager validation module. It validates the userop calldata against the defined session permissions (session key data) within the contract. */ sessionValidationModule?: Hex /** Additional info if needed to be appended in signature */ @@ -49,7 +49,7 @@ export type SessionParams = { export type StrictSessionParams = { sessionID: string - sessionSigner: UnknownHolder + sessionSigner: UnknownSigner } export type ModuleInfo = { @@ -57,7 +57,7 @@ export type ModuleInfo = { // sessionParams?: SessionParams[] // where SessionParams is below four sessionID?: string /** Session Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - sessionHolder?: UnknownHolder + sessionHolder?: UnknownSigner /** The session validation module is a sub-module smart-contract which works with session key manager validation module. It validates the userop calldata against the defined session permissions (session key data) within the contract. */ sessionValidationModule?: Hex /** Additional info if needed to be appended in signature */ @@ -104,7 +104,7 @@ export interface MultiChainValidationModuleConfig /** Version of the module */ version?: ModuleVersion /** Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - signer: UnknownHolder + signer: UnknownSigner } export interface MultiChainValidationModuleConfigConstructorProps extends BaseValidationModuleConfig { @@ -113,7 +113,7 @@ export interface MultiChainValidationModuleConfigConstructorProps /** Version of the module */ version?: ModuleVersion /** Signer: viemWallet or ethers signer. Ingested when passed into smartAccount */ - holder: Holder + signer: Signer } export interface BaseSessionKeyData { diff --git a/src/sdk/modules/validators/K1ValidatorModule.ts b/src/sdk/modules/validators/K1ValidatorModule.ts index eb9f7415f..7fd81ba34 100644 --- a/src/sdk/modules/validators/K1ValidatorModule.ts +++ b/src/sdk/modules/validators/K1ValidatorModule.ts @@ -1,25 +1,25 @@ import addresses from "../../__contracts/addresses.js" -import type { Holder } from "../../account/utils/toHolder.js" +import type { Signer } from "../../account/utils/toSigner.js" import type { Module } from "../../clients/decorators/erc7579/index.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" export class K1ValidatorModule extends BaseValidationModule { // biome-ignore lint/complexity/noUselessConstructor: <explanation> - public constructor(moduleConfig: Module, holder: Holder) { - super(moduleConfig, holder) + public constructor(moduleConfig: Module, signer: Signer) { + super(moduleConfig, signer) } public static async create( - holder: Holder, + signer: Signer, k1ValidatorAddress = addresses.K1Validator ): Promise<K1ValidatorModule> { const module: Module = { address: k1ValidatorAddress, type: "validator", - context: holder.address, + data: signer.address, additionalContext: "0x" } - const instance = new K1ValidatorModule(module, holder) + const instance = new K1ValidatorModule(module, signer) return instance } } diff --git a/src/sdk/modules/validators/OwnableValidator.ts b/src/sdk/modules/validators/OwnableValidator.ts index 3de563c37..81af3aa3d 100644 --- a/src/sdk/modules/validators/OwnableValidator.ts +++ b/src/sdk/modules/validators/OwnableValidator.ts @@ -1,179 +1,242 @@ -// import { -// type Address, -// concat, -// decodeAbiParameters, -// encodeAbiParameters, -// encodeFunctionData, -// getAddress, -// parseAbi, -// parseAbiParameters -// } from "viem" -// import type { Hex } from "viem" -// import type { NexusSmartAccount } from "../../account/NexusSmartAccount.js" -// import { ModuleType, SENTINEL_ADDRESS } from "../../account/index.js" -// import type { UserOpReceipt } from "../../bundler/index.js" -// import { BaseValidationModule } from "../base/BaseValidationModule.js" -// import { OWNABLE_VALIDATOR } from "../utils/Constants.js" -// import type { V3ModuleInfo } from "../utils/Types.js" - -// export class OwnableValidator extends BaseValidationModule { -// public smartAccount: NexusSmartAccount -// public owners: Address[] -// public threshold: number - -// private constructor( -// moduleConfig: V3ModuleInfo, -// smartAccount: NexusSmartAccount -// ) { -// const moduleData = decodeAbiParameters( -// parseAbiParameters("uint256 threshold, address[] owners"), -// moduleConfig.data -// ) -// super(moduleConfig, smartAccount.getSmartAccountOwner()) -// this.threshold = Number(moduleData[0]) -// this.owners = [...moduleData[1]] as Address[] -// this.smartAccount = smartAccount -// } - -// public static async create( -// smartAccount: NexusSmartAccount, -// threshold: number, -// owners: Address[], -// hook?: Address -// ): Promise<OwnableValidator> { -// if ( -// !owners.includes(await smartAccount.getSmartAccountOwner().getAddress()) -// ) { -// throw Error("Signer needs to be one of the owners") -// } -// const installData = encodeAbiParameters( -// [ -// { name: "threshold", type: "uint256" }, -// { name: "owners", type: "address[]" } -// ], -// [BigInt(threshold), owners] -// ) -// const moduleInfo: V3ModuleInfo = { -// module: OWNABLE_VALIDATOR, -// type: ModuleType.Validation, -// data: installData, -// additionalContext: "0x", -// hook -// } -// const instance = new OwnableValidator(moduleInfo, smartAccount) -// return instance -// } - -// public async setThreshold(threshold: number): Promise<UserOpReceipt> { -// const calldata = encodeFunctionData({ -// functionName: "setThreshold", -// abi: parseAbi(["function setThreshold(uint256 _threshold)"]), -// args: [BigInt(threshold)] -// }) -// const response = await this.smartAccount.sendTransaction({ -// to: this.moduleAddress, -// data: calldata, -// value: 0n -// }) -// const receipt = await response.wait(5) -// if(receipt.success) { -// this.threshold = threshold -// } -// return receipt -// } - -// public async removeOwner(owner: Address, signatures?: Hex[]): Promise<UserOpReceipt> { -// const owners = await this.getOwners() -// let prevOwner: Address - -// const currentOwnerIndex = owners.findIndex((o: Address) => o === owner) - -// if (currentOwnerIndex === -1) { -// throw new Error("Owner not found") -// } -// if (currentOwnerIndex === 0) { -// prevOwner = SENTINEL_ADDRESS -// } else { -// prevOwner = getAddress(owners[currentOwnerIndex - 1]) -// } - -// const calldata = encodeFunctionData({ -// functionName: "removeOwner", -// abi: parseAbi(["function removeOwner(address prevOwner, address owner)"]), -// args: [prevOwner, owner] -// }) - -// const transaction = { -// to: this.moduleAddress, -// data: calldata, -// value: 0n -// } - -// let receipt: UserOpReceipt; -// if(owners.length > 1) { -// if(signatures?.length === owners.length) { -// let userOp = await this.smartAccount.buildUserOp([transaction]); -// const finalSignature = concat(signatures); -// userOp.signature = finalSignature; -// const response = await this.smartAccount.sendUserOp(userOp); -// receipt = await response.wait(5); -// } else { -// throw new Error("Signatures must be provided for all owners") -// } -// } else { -// const response = await this.smartAccount.sendTransaction([transaction]) -// receipt = await response.wait(5) -// } - -// if(receipt.success) { -// this.owners = this.owners.filter((o: Address) => o !== owner) -// } -// return receipt - -// } - -// public async addOwner(owner: Address): Promise<UserOpReceipt> { -// const calldata = encodeFunctionData({ -// functionName: "addOwner", -// abi: parseAbi(["function addOwner(address owner)"]), -// args: [owner] -// }) -// const response = await this.smartAccount.sendTransaction({ -// to: this.moduleAddress, -// data: calldata, -// value: 0n -// }) -// const receipt = await response.wait(5) -// if(receipt.success) { -// this.owners.push(owner) -// } -// return receipt -// } - -// public async getOwners(): Promise<Address[]> { -// try { -// const owners = (await this.smartAccount.publicClient.readContract({ -// address: OWNABLE_VALIDATOR, -// abi: parseAbi([ -// "function getOwners(address account) external view returns (address[])" -// ]), -// functionName: "getOwners", -// args: [await this.smartAccount.getAccountAddress()] -// })) as Address[] - -// return owners -// } catch (err) { -// console.error(err) -// return [] -// } -// } - -// public getDummySignature(): Hex { -// return "0xfe68e79dbbc872d7a22c6f3eb24f8145edf8d8333092c666221db79bf236e25626e9b05d8230aee0baee7e8b15d60b51e408f1e640b1e0c89deb874b17e269d91b199dfd0340577f695639a048a231a64d181f4e2d66acd5c29ecd0a9b25593c291eb4aba21a15fa4fded885e2c44a49887de1cc9adced5088bcac65cf8c1f29c71c" as Hex -// } - -// async signUserOpHash(userOpHash: string): Promise<Hex> { -// const signature = await this.signer.signMessage({ raw: userOpHash as Hex }) -// return signature as Hex -// } -// } +import { + type Address, + decodeAbiParameters, + encodeAbiParameters, + encodePacked, + parseAbi, + parseAbiParameters +} from "viem" +import type { Hex, PublicClient } from "viem" +import { type NexusAccount, type Signer, toSigner } from "../../account/index.js" +import { BaseValidationModule } from "../base/BaseValidationModule.js" +import { type Module } from "../../clients/index.js" + +export class OwnableValidator extends BaseValidationModule { + public owners: Address[] + public threshold: number + + private constructor( + moduleConfig: Module, + signer: Signer + ) { + if (!moduleConfig.data) { + throw new Error("Module data is required") + } + const moduleData = decodeAbiParameters( + parseAbiParameters("uint256 threshold, address[] owners"), + moduleConfig.data + ) + super(moduleConfig, signer) + this.threshold = Number(moduleData[0]) + this.owners = [...moduleData[1]] as Address[] + this.signer = signer + this.address = moduleConfig.address + } + + public static async create({ + smartAccount, + address, + owners, + threshold, + hook + }: { + smartAccount: NexusAccount, + address: Address, + owners?: Address[], + threshold?: number, + hook?: Address + }): Promise<OwnableValidator> { + let moduleInfo: Module + let installData: Hex + const client = smartAccount.client as PublicClient; + const isInitialized = await client.readContract({ + address, // @todo: change to real module address + abi: parseAbi([ + "function isInitialized(address smartAccount) public view returns (bool)" + ]), + functionName: "isInitialized", + args: [await smartAccount.getAddress()] + }) + if (isInitialized) { + const _owners = await client.readContract({ + address, // @todo: change to real module address + abi: parseAbi([ + "function getOwners(address account) external view returns (address[])" + ]), + functionName: "getOwners", + args: [await smartAccount.getAddress()] + }) + const _threshold = await client.readContract({ + address, // @todo: change to real module address + abi: parseAbi([ + "function threshold(address account) external view returns (uint256)" + ]), + functionName: "threshold", + args: [await smartAccount.getAddress()] + }) + installData = encodeAbiParameters( + [ + { name: "threshold", type: "uint256" }, + { name: "owners", type: "address[]" } + ], + [BigInt(_threshold), _owners] + ) + } else { + if (!owners) { + throw new Error("Owners are required if the module is not yet initialized") + } + installData = encodeAbiParameters( + [ + { name: "threshold", type: "uint256" }, + { name: "owners", type: "address[]" } + ], + [BigInt(threshold ?? owners.length), owners.sort()] + ) + } + moduleInfo = { + address, // @todo: change to real module address + type: "validator", + data: installData, + additionalContext: "0x", + hook + } + const account = smartAccount.client.account + const instance = new OwnableValidator(moduleInfo, await toSigner({ signer: account! })) + return instance + } + + // /** + // * Sets the threshold locally on the instance without executing a transaction. + // * This method should be used when the threshold has been updated on-chain but the local instance hasn't been updated. + // * + // * @param threshold The new threshold value + // */ + // public setLocalThreshold(threshold: number): void { + // if (threshold <= 0) { + // throw new Error("Threshold must be a positive number") + // } + // this.threshold = threshold + // } + + // public async setThresholdUserOp(threshold: number): Promise<Partial<UserOperationStruct>> { + // const calldata = encodeFunctionData({ + // functionName: "setThreshold", + // abi: parseAbi(["function setThreshold(uint256 _threshold) external"]), + // args: [BigInt(threshold)] + // }) + + // const transaction = { + // to: this.address, + // data: calldata, + // value: 0n + // } + // const userOp = + // return userOp + // } + + // public async removeOwnerUserOp(owner: Address): Promise<Partial<UserOperationStruct>> { + // const owners = await this.getOwners() + // let prevOwner: Address + + // const currentOwnerIndex = owners.findIndex((o: Address) => o === owner) + + // if (currentOwnerIndex === -1) { + // throw new Error("Owner not found") + // } + // if (currentOwnerIndex === 0) { + // prevOwner = SENTINEL_ADDRESS + // } else { + // prevOwner = getAddress(owners[currentOwnerIndex - 1]) + // } + + // const calldata = encodeFunctionData({ + // functionName: "removeOwner", + // abi: parseAbi(["function removeOwner(address prevOwner, address owner)"]), + // args: [prevOwner, owner] + // }) + + // const transaction = { + // to: this.address, + // data: calldata, + // value: 0n + // } + + // const userOp = await this.smartAccount. + // return userOp + // } + + // public async addOwnerUserOp(owner: Address): Promise<Partial<UserOperationStruct>> { + // const calldata = encodeFunctionData({ + // functionName: "addOwner", + // abi: parseAbi(["function addOwner(address owner)"]), + // args: [owner] + // }) + + // const transaction = { + // to: this.address, + // data: calldata, + // value: 0n + // } + // const userOp = await this.smartAccount.buildUserOp([transaction]); + // return userOp + // } + + // public async getOwners(): Promise<Address[]> { + // try { + // const client = this.smartAccount.client as MasterClient; + // const owners = (await client.readContract({ + // address: this.address, + // abi: parseAbi([ + // "function getOwners(address account) external view returns (address[])" + // ]), + // functionName: "getOwners", + // args: [await this.smartAccount.getAccountAddress()] + // })) as Address[] + + // return owners + // } catch (err) { + // console.error(err) + // return [] + // } + // } + + // public async isOwner(address: Address): Promise<boolean> { + // const owners = await this.getOwners(); + // return owners.includes(address); + // } + + public override getDummySignature(): Hex { + const dummySignature = "0xe8b94748580ca0b4993c9a1b86b5be851bfc076ff5ce3a1ff65bf16392acfcb800f9b4f1aef1555c7fce5599fffb17e7c635502154a0333ba21f3ae491839af51c"; + const signatures = Array(this.threshold).fill(dummySignature); + const types = Array(this.threshold).fill('bytes'); + return encodePacked(types, signatures) as Hex; + } + + override async signUserOpHash(userOpHash: string): Promise<Hex> { + // this won't be valid for multisig + const signer = this.signer; + return await signer.signMessage({ message: { raw: userOpHash as Hex } }) as Hex; + } + + // private isMultiSig(): boolean { + // return this.threshold > 1; + // } + + public getMultiSignature(signatures: Hex[]): Hex { + const types = Array(signatures.length).fill('bytes'); + return encodePacked(types, signatures) as Hex; + } + + // public async isModuleInitialized(): Promise<boolean> { + // const client = this.smartAccount.client as MasterClient; + // const isInitialized = await client.readContract({ + // address: this.address, + // abi: parseAbi([ + // "function isInitialized(address account) external view returns (bool)" + // ]), + // functionName: "isInitialized", + // args: [await this.smartAccount.getAccountAddress()] + // }) + // return isInitialized + // } +} diff --git a/src/sdk/modules/validators/ValidationModule.ts b/src/sdk/modules/validators/ValidationModule.ts index 4a57b9ce1..7874c5ad8 100644 --- a/src/sdk/modules/validators/ValidationModule.ts +++ b/src/sdk/modules/validators/ValidationModule.ts @@ -1,25 +1,25 @@ import type { Address, Hex } from "viem" -import type { Holder } from "../../account/utils/toHolder.js" +import type { Signer } from "../../account/utils/toSigner.js" import type { Module } from "../../clients/decorators/erc7579/index.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" export class ValidationModule extends BaseValidationModule { - private constructor(moduleConfig: Module, holder: Holder) { - super(moduleConfig, holder) + private constructor(moduleConfig: Module, signer: Signer) { + super(moduleConfig, signer) } public static async create( - holder: Holder, + signer: Signer, address: Address, - context: Hex + data: Hex ): Promise<ValidationModule> { const module: Module = { address, type: "validator", - context, + data, additionalContext: "0x" } - const instance = new ValidationModule(module, holder) + const instance = new ValidationModule(module, signer) return instance } } diff --git a/src/sdk/modules/validators/k1Validator.test.ts b/src/sdk/modules/validators/k1Validator.test.ts index e50d06928..cb63b291c 100644 --- a/src/sdk/modules/validators/k1Validator.test.ts +++ b/src/sdk/modules/validators/k1Validator.test.ts @@ -1,4 +1,4 @@ -import { http, type Account, type Address, type Chain } from "viem" +import { encodeAbiParameters, encodePacked, http, type Account, type Address, type Chain } from "viem" import { afterAll, beforeAll, describe, expect, test } from "vitest" import { toNetwork } from "../../../test/testSetup" import { @@ -40,7 +40,7 @@ describe("modules.k1Validator.write", async () => { testClient = toTestClient(chain, getTestAccount(5)) nexusClient = await createNexusClient({ - holder: account, + signer: account, chain, transport: http(), bundlerTransport: http(bundlerUrl) @@ -70,12 +70,12 @@ describe("modules.k1Validator.write", async () => { expect(balanceAfter - balanceBefore).toBe(1n) }) - test.skip("should install k1 validator with 1 owner", async () => { + test("should install k1 validator with 1 owner", async () => { const isInstalledBefore = await nexusClient.isModuleInstalled({ module: { type: "validator", address: addresses.K1Validator, - context: "0x" + data: encodePacked(["address"], [account.address]) } }) @@ -84,7 +84,7 @@ describe("modules.k1Validator.write", async () => { module: { address: addresses.K1Validator, type: "validator", - context: "0x" + data: encodePacked(["address"], [account.address]) } }) @@ -92,35 +92,61 @@ describe("modules.k1Validator.write", async () => { await nexusClient.waitForUserOperationReceipt({ hash }) expect(installSuccess).toBe(true) - const hashUninstall = await nexusClient.uninstallModule({ + const [installedValidators] = await nexusClient.getInstalledValidators({}) + + const prevModule = await nexusClient.getPreviousModule({ + module: { + address: addresses.K1Validator, + type: "validator" + }, + installedValidators + }) + + const deInitData = encodeAbiParameters( + [ + { name: "prev", type: "address" }, + { name: "disableModuleData", type: "bytes" } + ], + [prevModule, encodePacked(["address"], [account.address])] + ) + + const hashUninstall = nexusClient.uninstallModule({ module: { address: addresses.K1Validator, type: "validator", - context: "0x" + data: deInitData } }) - const { success: uninstallSuccess } = - await nexusClient.waitForUserOperationReceipt({ hash: hashUninstall }) - expect(uninstallSuccess).toBe(true) + expect(hashUninstall).rejects.toThrow() } else { - // Uninstall + const [installedValidators] = await nexusClient.getInstalledValidators({}) - const byteCode = await testClient.getCode({ - address: addresses.K1Validator + const prevModule = await nexusClient.getPreviousModule({ + module: { + address: addresses.K1Validator, + type: "validator" + }, + installedValidators }) - const hash = await nexusClient.uninstallModule({ + const deInitData = encodeAbiParameters( + [ + { name: "prev", type: "address" }, + { name: "disableModuleData", type: "bytes" } + ], + [prevModule, encodePacked(["address"], [account.address])] + ) + + const hashUninstall = nexusClient.uninstallModule({ module: { address: addresses.K1Validator, type: "validator", - context: "0x" + data: deInitData } }) - const { success } = await nexusClient.waitForUserOperationReceipt({ - hash - }) - expect(success).toBe(true) + + expect(hashUninstall).rejects.toThrow() } // Get installed modules }) diff --git a/src/sdk/modules/validators/ownableValidator.test.ts b/src/sdk/modules/validators/ownableValidator.test.ts new file mode 100644 index 000000000..a5bde58ff --- /dev/null +++ b/src/sdk/modules/validators/ownableValidator.test.ts @@ -0,0 +1,279 @@ +import { TEST_CONTRACTS } from './../../../test/callDatas'; +import { + getAddOwnableValidatorOwnerAction, +} from "@rhinestone/module-sdk" +import { + http, + type Account, + type Address, + type Chain, + type PublicClient, + encodePacked, + encodeAbiParameters, + encodeFunctionData, + parseAbi, + zeroAddress, + getAddress, +} from "viem" +import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { toNetwork } from "../../../test/testSetup" +import { + fundAndDeployClients, + getTestAccount, + killNetwork, + toTestClient +} from "../../../test/testUtils" +import type { MasterClient, NetworkConfig } from "../../../test/testUtils" +import addresses from "../../__contracts/addresses" +import { + createNexusClient, + type NexusClient, +} from "../../clients/createNexusClient" +import { createK1ValidatorModule, createOwnableValidatorModule, toSigner } from "../.." +import { type OwnableValidator } from './OwnableValidator'; +import { parseModuleTypeId } from '../../clients/decorators/erc7579/supportsModule'; +import { K1ValidatorModule } from './K1ValidatorModule'; + +describe("modules.ownableValidator", async () => { + let network: NetworkConfig + let chain: Chain + let bundlerUrl: string + + // Test utils + let testClient: MasterClient + let account: Account + let nexusClient: NexusClient + let nexusAccountAddress: Address + let recipient: Account + let recipientAddress: Address + let ownableValidatorModule: OwnableValidator + let k1ValidatorModule: K1ValidatorModule + beforeAll(async () => { + network = await toNetwork("FILE_LOCALHOST") + + chain = network.chain + bundlerUrl = network.bundlerUrl + account = getTestAccount(0) + recipient = getTestAccount(1) + recipientAddress = recipient.address + + testClient = toTestClient(chain, getTestAccount(5)) + + nexusClient = await createNexusClient({ + signer: account, + chain, + transport: http(), + bundlerTransport: http(bundlerUrl) + }) + + nexusAccountAddress = await nexusClient.account.getCounterFactualAddress() + await fundAndDeployClients(testClient, [nexusClient]) + + ownableValidatorModule = await createOwnableValidatorModule({ + smartAccount: nexusClient.account, + address: TEST_CONTRACTS.OwnableValidator.address, + owners: [account.address, recipient.address], + threshold: 2 + }) + + k1ValidatorModule = await createK1ValidatorModule(account) + }) + + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) + + test("should install ownable validator and perform operations", async () => { + // Install ownable validator + const installHash = await nexusClient.installModule({ + module: { + address: TEST_CONTRACTS.OwnableValidator.address, + type: "validator", + data: encodeAbiParameters( + [ + { name: "threshold", type: "uint256" }, + { name: "owners", type: "address[]" } + ], + [BigInt(1), [account.address]] + ) + } + }) + const { success: installSuccess } = + await nexusClient.waitForUserOperationReceipt({ hash: installHash }) + expect(installSuccess).toBe(true) + }) + + test("should add accountTwo as owner", async () => { + const addOwnerExecution = await getAddOwnableValidatorOwnerAction({ + owner: recipient.address, + client: nexusClient.client as PublicClient, + account: { + address: nexusClient.account.address, + type: "nexus", + deployedOnChains: [] + } + }) + + if ("callData" in addOwnerExecution) { + const transactionHash = await nexusClient.sendTransaction({ + calls: [ + { + to: TEST_CONTRACTS.OwnableValidator.address, + data: addOwnerExecution.callData + } + ] + }) + expect(transactionHash).toBeDefined() + const receipt = await testClient.waitForTransactionReceipt({ hash: transactionHash }) + expect(receipt.status).toBe("success") + } else { + throw new Error("Failed to get add owner execution") + } + + const owners = await testClient.readContract({ + address: TEST_CONTRACTS.OwnableValidator.address, + abi: parseAbi(["function getOwners(address account) external view returns (address[] ownersArray)"]), + functionName: "getOwners", + args: [nexusClient.account.address] + }) + expect(owners).toContain(recipient.address) + }) + + test("should set threshold to 2", async () => { + const isInstalled = await nexusClient.isModuleInstalled({ + module: { + address: TEST_CONTRACTS.OwnableValidator.address, + type: "validator", + }, + }) + expect(isInstalled).toBe(true) + // Set threshold + const calldata = encodeFunctionData({ + functionName: "setThreshold", + abi: parseAbi(["function setThreshold(uint256 _threshold) external"]), + args: [BigInt(2)] + }) + const userOpHash = await nexusClient.sendTransaction({ + calls: [ + { + to: TEST_CONTRACTS.OwnableValidator.address, + data: calldata + } + ] + }) + expect(userOpHash).toBeDefined() + }, 90000) + + test("should need 2 signatures to send a user operation", async () => { + const activeValidationModule = nexusClient.account.getActiveValidationModule() + expect(activeValidationModule.address).toBe(addresses.K1Validator) + + nexusClient.account.setActiveValidationModule(ownableValidatorModule) + const activeValidationModuleAfter = nexusClient.account.getActiveValidationModule() + expect(activeValidationModuleAfter.address).toBe(TEST_CONTRACTS.OwnableValidator.address) + + let dummyUserOp = await nexusClient.prepareUserOperation({ + calls: [ + { + to: zeroAddress, + data: "0x" + }, + { + to: zeroAddress, + data: "0x" + } + ], + }) + const dummyUserOpHash = await nexusClient.account.getUserOpHash(dummyUserOp) + const signature1 = await account?.signMessage?.({ message: { raw: dummyUserOpHash } }) + const signature2 = await recipient?.signMessage?.({ message: { raw: dummyUserOpHash } }) + const multiSignature = encodePacked(["bytes", "bytes"], [signature1!, signature2!]) + const userOpHash = await nexusClient.sendUserOperation({ + calls: [ + { + to: zeroAddress, + data: "0x" + }, + { + to: zeroAddress, + data: "0x" + } + ], + signature: multiSignature + }) + expect(userOpHash).toBeDefined() + const { success: userOpSuccess } = await nexusClient.waitForUserOperationReceipt({ hash: userOpHash }) + expect(userOpSuccess).toBe(true) + }) + + test("should uninstall ownable validator", async () => { + const [installedValidators] = await nexusClient.getInstalledValidators({}); + const prevModule = await nexusClient.getPreviousModule({ + module: { + address: TEST_CONTRACTS.OwnableValidator.address, + type: "validator", + }, + installedValidators + }) + const deInitData = encodeAbiParameters( + [ + { name: "prev", type: "address" }, + { name: "disableModuleData", type: "bytes" } + ], + [prevModule, "0x"] + ) + + const uninstallCallData = encodeFunctionData({ + abi: [ + { + name: "uninstallModule", + type: "function", + stateMutability: "nonpayable", + inputs: [ + { + type: "uint256", + name: "moduleTypeId" + }, + { + type: "address", + name: "module" + }, + { + type: "bytes", + name: "deInitData" + } + ], + outputs: [] + } + ], + functionName: "uninstallModule", + args: [parseModuleTypeId("validator"), getAddress(TEST_CONTRACTS.OwnableValidator.address), deInitData] + }) + + const userOp = await nexusClient.prepareUserOperation({ + calls: [ + { + to: nexusClient.account.address, + data: uninstallCallData + } + ] + }) + const userOpHash = await nexusClient.account.getUserOpHash(userOp) + expect(userOpHash).toBeDefined() + + const signature1 = await account?.signMessage?.({ message: { raw: userOpHash } }) + const signature2 = await recipient?.signMessage?.({ message: { raw: userOpHash } }) + const multiSignature = encodePacked(["bytes", "bytes"], [signature1!, signature2!]) + const uninstallHash = await nexusClient.uninstallModule({ + module: { + address: TEST_CONTRACTS.OwnableValidator.address, + type: "validator", + data: deInitData + }, + signatureOverride: multiSignature + }) + expect(uninstallHash).toBeDefined() + const { success: userOpSuccess } = await nexusClient.waitForUserOperationReceipt({ hash: uninstallHash }) + expect(userOpSuccess).toBe(true) + }) +}) diff --git a/src/test/__contracts/abi/index.ts b/src/test/__contracts/abi/index.ts index d4c21de13..50290d37d 100644 --- a/src/test/__contracts/abi/index.ts +++ b/src/test/__contracts/abi/index.ts @@ -8,6 +8,6 @@ export * from "./MockTokenAbi" export * from "./BootstrapLibAbi" export * from "./MockRegistryAbi" export * from "./MockHandlerAbi" +export * from "./TokenWithPermitAbi" export * from "./BootstrapAbi" export * from "./MockExecutorAbi" -export * from "./TokenWithPermitAbi" diff --git a/src/test/__contracts/mockAddresses.ts b/src/test/__contracts/mockAddresses.ts index b6dfb220a..0221caa2d 100644 --- a/src/test/__contracts/mockAddresses.ts +++ b/src/test/__contracts/mockAddresses.ts @@ -1,19 +1,18 @@ // The contents of this folder is auto-generated. Please do not edit as your changes are likely to be overwritten -import type { Hex } from "viem" -export const mockAddresses: Record<string, Hex> = { - MockHook: "0x4445134442b717275c06034D0e6A589C258a7CfC", - Stakeable: "0x251a414Fa6a2a719Cf79D370F9aEb2e0817FA086", - NexusAccountFactory: "0xA2cE66fB6bBA1828DbcE2114682286c82434e59E", - BiconomyMetaFactory: "0xDdb351881419426F0942921db482690Da5a47d22", - Counter: "0x61f70428b61864B38D9B45b7B032c700B960acCD", - MockValidator: "0x4713E68A85A2ED5FF28e61DD76f17E8Cd94f4992", - MockToken: "0xe22ed8281e84aeAA770eE04f0E07dAf6A028117F", - BootstrapLib: "0x15a93E4a5221e9aDe5B3E6A7A70060080cc464f0", - MockRegistry: "0xD270D6A18B9C6063dE7B92EBd25B11f74e8B75eB", - MockHandler: "0x67D49D2345A96890c2A986bE294e8808868C5057", - TokenWithPermit: "0xfD6345760Ff39EC6B19506a7b8486EcA74B3F82A", - Bootstrap: "0xF53a824Bb0508FBa3a599FaF5BD37CE70b0867Fc", - MockExecutor: "0x9A75Bc1C839164196Eb5668b38337712994A2c8A" +export const mockAddresses = { + MockHook: "0xfaab42F17d37f6df164048d7Ae626bf338571AF7", + Stakeable: "0x79200F89e945860e6174E923a900C5b043e4CB51", + NexusAccountFactory: "0xE516a3885aDdC709Da563f720BBb2ae8EbD7F607", + BiconomyMetaFactory: "0x0941Aa800F11a348fD6a1cc5Da9B432b062a162e", + Counter: "0x0053145dFca162132E62D97eb79df5710dD7E191", + MockValidator: "0xE4a688F73AFBf239B8dADFc699Aed2eAa2079ff1", + MockToken: "0xD14821e11670dbE15F9FbD1C221E24751324dD55", + BootstrapLib: "0x91020E329Af6E365c7dF3ad871BC37b4cCC2888E", + MockRegistry: "0x76aEb77f851ccF67820910AA6815Ed5a3CCaf38C", + MockHandler: "0xcF6eF701eeDB01E5ea45e99b721eF0d408A9b6fd", + TokenWithPermit: "0x8bA99DF3c0Dcb8994DcA607fD1903022070F4723", + Bootstrap: "0x4D400095e5Db540F66b92F3ba7Fe3B9B48634855", + MockExecutor: "0xFFD001973A315bf269725021311d466Bb7F7dcC4" } as const export default mockAddresses diff --git a/src/test/callDatas.ts b/src/test/callDatas.ts index 3d1a11aa6..109cee414 100644 --- a/src/test/callDatas.ts +++ b/src/test/callDatas.ts @@ -1,7 +1,6 @@ import type { Hex } from "viem" -import type { DeployerParams } from "./testUtils" -export const TEST_CONTRACTS: Record<string, DeployerParams> = { +export const TEST_CONTRACTS: Record<string, { chainId: number; name: string; address: Hex }> = { // Rhinestone Ownables OwnableValidator: { chainId: 84532, @@ -13,6 +12,11 @@ export const TEST_CONTRACTS: Record<string, DeployerParams> = { name: "OwnableExecutor", address: "0x989110e958902f619148b8171fbDF1Dca0c5AE0B" }, + OwnableExecutorSepolia: { + chainId: 11155111, + name: "OwnableExecutorSepolia", + address: "0xc98B026383885F41d9a995f85FC480E9bb8bB891" + }, // Smart sessions SmartSession: { chainId: 84532, diff --git a/src/test/playground.test.ts b/src/test/playground.test.ts index 176280202..4f4c900ca 100644 --- a/src/test/playground.test.ts +++ b/src/test/playground.test.ts @@ -74,7 +74,7 @@ describe.skipIf(!playgroundTrue)("playground", () => { test("should init the smart account", async () => { nexusClient = await createNexusClient({ - holder: account, + signer: account, chain, transport: http(), bundlerTransport: http(bundlerUrl), @@ -141,7 +141,7 @@ describe.skipIf(!playgroundTrue)("playground", () => { } nexusClient = await createNexusClient({ - holder: account, + signer: account, chain, transport: http(), bundlerTransport: http(bundlerUrl), diff --git a/src/test/testUtils.ts b/src/test/testUtils.ts index ac6be0d16..be32b9c0f 100644 --- a/src/test/testUtils.ts +++ b/src/test/testUtils.ts @@ -12,17 +12,11 @@ import { createPublicClient, createTestClient, createWalletClient, - encodeAbiParameters, - encodePacked, - keccak256, parseAbi, - parseAbiParameters, publicActions, - toBytes, walletActions, zeroAddress } from "viem" -import { createBundlerClient } from "viem/account-abstraction" import { mnemonicToAccount, privateKeyToAccount } from "viem/accounts" import contracts from "../sdk/__contracts" import { getChain, getCustomChain } from "../sdk/account/utils" @@ -31,13 +25,13 @@ import { type NexusClient, createNexusClient } from "../sdk/clients/createNexusClient" - +import { createBicoBundlerClient } from "../sdk/clients/createBicoBundlerClient" import { ENTRY_POINT_SIMULATIONS_CREATECALL, ENTRY_POINT_V07_CREATECALL, TEST_CONTRACTS } from "./callDatas" -import * as hardhatExec from "./executables" +import { init, clean, deploy } from "./executables" config() @@ -181,7 +175,7 @@ export const ensureBundlerIsReady = async ( bundlerUrl: string, chain: Chain ) => { - const bundler = await createBundlerClient({ + const bundler = createBicoBundlerClient({ chain, transport: http(bundlerUrl) }) @@ -200,7 +194,7 @@ export const toConfiguredAnvil = async ({ rpcPort }: { rpcPort: number }): Promise<AnvilInstance> => { const instance = anvil({ - hardfork: "Paris", + hardfork: "Cancun", chainId: rpcPort, port: rpcPort, codeSizeLimit: 1000000000000 @@ -216,9 +210,9 @@ export const initDeployments = async (rpcPort: number) => { console.log( `using hardhat to deploy nexus contracts to http://localhost:${rpcPort}` ) - await hardhatExec.init() - await hardhatExec.clean() - await hardhatExec.deploy(rpcPort) + await init() + await clean() + await deploy(rpcPort) console.log("hardhat deployment complete.") // Hardcoded bytecode deployment of contracts using setCode: @@ -281,8 +275,7 @@ export const nonZeroBalance = async ( const balance = await getBalance(testClient, address, tokenAddress) if (balance > BigInt(0)) return throw new Error( - `Insufficient balance ${ - tokenAddress ? `of token ${tokenAddress}` : "of native token" + `Insufficient balance ${tokenAddress ? `of token ${tokenAddress}` : "of native token" } during test setup of owner: ${address}` ) } @@ -310,7 +303,7 @@ export const toFundedTestClients = async ({ const testClient = toTestClient(chain, getTestAccount()) const nexus = await createNexusClient({ - holder: account, + signer: account, transport: http(), bundlerTransport: http(bundlerUrl), chain @@ -395,8 +388,7 @@ export const topUp = async ( if (balanceOfRecipient > amount) { Logger.log( - `balanceOfRecipient (${recipient}) already has enough ${ - token ?? "native token" + `balanceOfRecipient (${recipient}) already has enough ${token ?? "native token" } (${balanceOfRecipient}) during safeTopUp` ) return await Promise.resolve() From 3b3cc57574c91dbfb56860f4fdf9c808c917ea36 Mon Sep 17 00:00:00 2001 From: VGabriel45 <vgabrielmarian21@gmai.com> Date: Tue, 24 Sep 2024 13:13:20 +0300 Subject: [PATCH 1247/1247] refactor: add missing pieces, fix build, fix lint issues, fix tests --- bun.lockb | Bin 355840 -> 356999 bytes scripts/send:userOp.ts | 2 +- scripts/viem:bundler.ts | 15 +- src/sdk/account/toNexusAccount.ts | 12 +- src/sdk/clients/createBicoBundlerClient.ts | 23 +- src/sdk/clients/createBicoPaymasterClient.ts | 18 +- src/sdk/clients/createNexusClient.test.ts | 33 +- src/sdk/clients/createNexusClient.ts | 94 ++-- .../erc7579/erc7579.decorators.test.ts | 15 +- .../decorators/erc7579/getPreviousModule.ts | 93 ++-- src/sdk/clients/decorators/erc7579/index.ts | 12 +- .../decorators/erc7579/installModule.ts | 9 +- .../decorators/erc7579/uninstallFallback.ts | 4 +- .../smartAccount/account.decorators.test.ts | 2 +- .../smartAccount/sendTransaction.ts | 5 +- src/sdk/modules/executors/OwnableExecutor.ts | 4 +- .../modules/executors/ownableExecutor.test.ts | 281 ++++++----- src/sdk/modules/utils/Types.ts | 2 +- .../modules/validators/OwnableValidator.ts | 472 +++++++++--------- .../modules/validators/k1Validator.test.ts | 9 +- .../validators/ownableValidator.test.ts | 103 ++-- src/test/callDatas.ts | 16 +- src/test/testUtils.ts | 10 +- 23 files changed, 662 insertions(+), 572 deletions(-) diff --git a/bun.lockb b/bun.lockb index db0ee96a0b9a070f57b7076eddfe24358dd1c3cf..217ad514b22f2cf38d8f2e1b7e2b1b6f3a9d264d 100755 GIT binary patch delta 77620 zcmeEvd0bW1{`Nixj<Qi4GBq+ZGY2Yg77#f&<Nyjvj;N@Js7ILu97q`)%CNv}r%Nm~ zGb<|X+GJLkW)l>ax522iY_`%yZ&4R}pJ%Ogh<!fY``+LC-uL~>{priIzTank*F5dL z?d*~d+pqt;{q5nQ-M*c&cWTgyC*P0AeymGXTDz&spI>{~x1-Em;?dvt7vB*1%MzEt zYyGCFU5dY1<tG*Or-NaXSPsKz3G{OsMj-HZAnm^agMcf6?SXsY$ap^jTQuQ!Y5Sc( z#$Sy1ZGhp(mFaZ>wg%3Iz2$WXoP&W8Mm1B!+^q0Lc__~$L}0=#n=6dBx;nZH`whi2 zVf_}^3iz=uZXuAxT;@s7WM!5!2_ho17~bOFX_dOV6#Ew5Tj*58W-9r48J@ZD&dbh7 zomXHO1*y3UnBYm&n3XQ*8=1w_k8AxoWWmZgQ6%CX=pBLEfULt|#A^%O4@BjQOVabw zQjv6eT83w-2MN6kE2|ZZmY~C2Ad9^p$OM;p^3(J34dWN2LjDyX`NuC&n46xOmLKNH z^ZNU>Q}!2u%s3-^X-+!w8FMM^#YV~f+ObX=jFPR;*`9|Gn+0Kptf4o<-e?xqe12Z~ zvh=L{yxi=JjHNk-apW??2!VYM@Cx89TF(XsLr(&B28IEz1_lAIEJolvv=52bf!%-) z0j~ny3hV;R(3l8hyxv-G2V_RSqClO1IoWynX?c0Z4~WDTnS=_k#j;YfvOV(*BRy~K zQcuP_<LR!3fjXA#0T!cGN;V;Y%9j*tVzJhz0m+Zj_I}!a1(0JSK<htTsrvW>AnmUL z>GuSX>D~)uhUHpc0c5=ND~+Bq;sh8tlZNOBJ#>Uiv~FB!)%f)&ejF8Im*;!33i5Ia zjNQ;NDoVxx*(2YCs)pDMojsTnmf^|t<QuPDqx{xud)mTOkAZ93waT88n!j*aYKAc{ zJv}EZeM!bfZ7%_Gg66{y^%+spEldrGJkJ78*8FUP1<A?I&RC2H94fPbZ21Y{I$r*~ zu=K2DMy%%jdRveAhZk?@quS?IAnTKzm7ed(OgA!7+O)9wS;erkJ}g(*;`D+%tuF#H zn-n0knFwSDj{!2B<qJJ&3sEmmUiu0S*`)re{8tZ9@pXDP6bwXp=$K!SlRhsyjh!L& zyoH{{Y?*5ZDaTI0Hi*|6$O8R7P<7}vKo;bV2o>*3t8KHMm&8V?RBi&2?HgsqHw!N= z9<0>$(Tc7GlAfEJnwFkt7}pO`_6<Px+J`{$s}PU1^5lgr$jF{+STQPI2J9@<{M5Ys zB`9oe`qDhl`~u@Lw`$coAPd_)Ru*nV$xQ7q&yy=t`T+zp$Vb7LK`&k2w1wG=J@Zm? zv4YG)+?>ybssd#Vvj#WsT%0mORemCnjW^FTe?GD|MnY$~u`p6K20~}~x@&B&(WUXL z;cA@-AEnlX%|OiLl0^=c?#R)qSVMp;<|0qN2gw#2Y=yZ6*bc_1?##<b&0}|a>k|cg zCph%ij?<AK3zF-}%uPj6Wh)|nPQ1z>)05@NNzKc920AlZpizufej9)sW@<$qXO#G^ z?cO!tySA4ksFv_9y;G4O3y_nGIf9JyQ*-ebwH|NX8_*;8bfT*8o(U@2Rv`0x+d3W4 z(c`#5mC`#|eoa!P%t_77OApJ;^G=3uVP|*yP73EF!@vq#GT*acX)eauPUu{Wysh*$ za%XPUR;t-$SgR?j6BaBC%Sm03p66}rgHu(Nay(g!J(yED9BH^7ft}voHvQH*Vs<R{ zofo0gRSi8^3)6Ew`FU70GCT_w=AWLX>gFARGiIoG^Yg;eSLElWeh!^=T9lWaHQ$qw z{yub$)J5LXEM5?X5o*l$WX%i1-jk6cdB2j>6l;25c=5M0Ra?zL{6P5KH(QnVCm`FP z0?72%06PMc5RVI;cP6Cf6=bEMmRLs8Qi0yKP0vR?FlD`mgT|wTpGrS9JueI=7OQ!S zwp|VEI2=_!A|XzXg{gUA^D|Nxd=8y0_r4X?qGxd%j7zdJfmmWoury~ZMvh*uxl8BI zPsgb7q^GAx3>;uA#2jO)2F5nyZ^r~+OPv97i^)t~;7P;6P=YB#yWb*ZKMkFG>dQdR zkvt$uQCw06M~>0CKqi=(x;UL}o0p!sj2S1u&aLTbl!^&1h0bB+oxMY#V>K=5spAdH zQcZd<kbXa-GW3hgR_T8Yon7)Obd$%A7CEX$$3R>G;&0GdpzS~w=-=($<o~ZW?_wnI z!<DMU{|CFbEZ_wAv!?%g^HyDO02Sn5%g#wh+i;f(TV9-(VHkBQbWJg{Ohl-L&K7tE z$Wa-8qe>ta$Wi+RkoM)^+2>6YWO`XX={$tYIN~N18AdN)V4?D>Dn$EtgW+cooq;_| zR86p4WM?eHY+tPoVE=%fefAZw6%a!?dpYVbc#TT99QMm#pO-#&DaNPK4mzh<-da`T zG$1SF(*D?HGcz%`t}8<OvqUL388`{yC=X;t8QED($EdqmIaX^tsPTRv`+hT!gKwS2 zen56b29O0x1~T4gAX{n(((ekq0xdv$RWSl=fe;W~fYYIe0A0|TK<`@(<8t7L+tet& z3_APJp|KfSt_Sq0GBvGwm8%x|80paN&1jp>XSqgiKE>XQMu1?#{WhtVXrXb?9V($v zAp5YbrJD8+=&aGV(Al(SZ&zLTCNKp0HJjCZ4+LHb{oI{ucJ)R+?3x?1u{?28{dJW} z=qjN~9t`9ltO2$JJ`3bvTeMX#R2uie&H{Y{f8xpt<@Y?0gY+ZV>Az~5YRMTu#!J*V z9N3cce<1=aQQck2F@xI-uB5wFf^Q=sCYV3ZgMBIAnCr>P&rMIytJd~&+f~cu<z#sB z`x%C}z}R$gyvj4wO^RW>vqQC1#ZEP5K7e1l7$p2E1Hc174yOAx-VNknoU=>S<PNQu z0@*?(+pSC5_9#B2%i+B}dJ;P6?{}+uod&W2v4du_UjBR3;s3k))L8ul$cA|r$Od~2 z$olel$IW)c1BTHZx<8P`yx~DL)UE|0-QtqL2ym=k38Z7{qGim-SeonMW@O|n%_>OC zo|k^QQYBCeWP>w<Fht6oKQE2(uR{hMVebg!B=V;B^ZlyfZhJ(vPg*vPiRh!xq#Zr@ zE&^N@UIVfK-|khIo1V{fjSr!7j6S?i9r%tQ9vk+6#+{F<7TcmRb=fixo66f_-WKw9 zh_^*$3tLZK(y8$#ewUwWLkxOZg%MAvrnwK;fhBxg+5gb?>!GvhW&$q-ehdr-<^bCP z9|w|Oloyt_FtxvN;3?%F4m;C(>wug*#U*WE;0pTvV`{p6`Lvo<y^s;N+g8BKfmk^g z@|i}!Gb)4hj0{gsz9;P==*)N*kb`G#Zgy^J);z=e1msPm$G)jYKJ1&VK&HFzImYjX zPFE)nqXGs-SXiYpSgRcxtRLF-F23)1!?*@){9)Bj^Rn~9Fi&!@6=ly|WEfjuXZ9B2 zaVmIEBkPW+)g%V(iZNI6#0#oNI~-MdW_tE=PzG)u<iimM>@0=P`K%b{Gc`1DXPTXs znvdH}b%%PNPO#x6#h(GPLtY1l0FP+<*jLohc^=3D-U}q3o{I*<+3|^2mH#Hq535!M zRX3y<tKJ%U&sW}4nfJ)<`?Li;Uyz!aVW492;2n#EIZKV#75?;^n!V-F*>Z!x6YocX z*+JfTt7}n^Vi>XzXa}4{0}%HhY&jzr4p%@g2Xe^WsaxdJH&jihy{TGcB#{37f!qMn zk1KvMkm-%oI8fu?wg36Q8%82awBjvQ@)v>Z%Pb&gWB$V2?4=798k65vH8=qW4(aER z0LS_o6o?syqp<YbdBR%Mp>y$t6DqpzbFt()mF#gK8^rsZY#nqq;0ldtKn@k($6xJX zZwq@%ApL)RPu2gxhpPUM0I}E<m$ds>Ma%}WTpLcQA+R7jXC8`b41pd5`)VK)`u3#4 z`5Z8*X$$x3_;(;d@>@Sq8F*l4N4$^ttam-^9FiNLvppt%#wm><<*zfo;&WA#y+9^( zPG`6sI(z0eAZxT%^KF4#E`R(;W$+8)a~b^rI_LU}8XwdARv_1q^C$o-dKU`ZwitmB z5KO29$PzCGvPowG84<HPH+@0+im}jH08bw7@ly+ofzVl#Prp%i_qVEsy<lgHwFa_4 zE+9w9dnh2|zY1i9o&y%MFYiTw8EppAvHG0q<Jr*Z7zd<dcOYxl0m%5nzE>IeLuV7e zgqpG7f75smkQrqIIdrE2Wd$?Rm*%2t)AE)Tvx^PCpH#$5&k8(7GK_!xs0wlx$gVgI zWI?y+!Fnr@E#`dy<@*51_ra0(2|+<B)@z(W-2YJN7N0<In6P~E6qb`Y<`-3?ZNFIC zf_oHy{Htn!Ul2bS(Y)*7zgh;p59+d)=Fh{URl~ck7XPmD%LTH5bJHbljQXd_{th4; zItoaB0pg*4#U+i7c%&1Svv`45PeKIt$ekC|s&mC3s^#whvc=Z|*+XrBtlv$DN8Ni@ zSks`^-C;<F@fY((JbS+3eHeiOhO<ktVf04?j-ji8OdvBgM{YG8w0)GHL-vr@-dx99 zxHL00E6g+RUp*1XK@T#${LCCV0@7V7o$G*Xi64M1kv|vw+<7>Nq-QNz>d8&dP1jwY z<_VLJFsDIhlZ^m!>^<4sAq(uycsKM*VD}#Hx*{GYQ9q42IOXJf(sR9bC+uCo|M)K2 zpG}h!h9?;L>A5*!s3XccG0-6sIF1NR_yr(qa&rq+gKA(q=-0GVHObfU{sx`teX8T% z54-~UT+QDMyb^jZU{_$=yT)ue=mKHr48ye64q4Mdz^kAmvaIQkZ5(nBJpt?l`}07~ zvPxhF;O#&T-U47pV5;WFwz0NdaVj9@#*n9SUuyo9bxYSdZAR@p`Ov)`pZ&GPbA7DK zC;qYX@f9I${2%|S>y;fHJ1sLR)*0lq;-lQ={Z2f_Ls|~&_<NBKKdUCn?HF#EgJT^B zt+>Ilt_B?BBCLephFI0mvi%Js%Bme4?Re0Ni;guvg+2t{0oJCd2uGw<9Ube)x6C22 zj(t|#kl26=F1+3VFC0%e`rHu}5HPu!VT@{GaNK2?F|p<`nB6ctWjY<LQrIRpS7{s8 zroj=eP0;#TWiip_QH1&+uAjAONQCPrXoIY>sAxy1Rqc*7(*p1u7py}ZZ|R5(fHoAG zDcS}(BHKWVgNEid9FVrwk;tAXm9vj&1<r9h*O^xQ9Jg7Gg=#pXS;vP(m@P1fqnV)9 zc6x+!R3KZ(xjN8_Pjx#V541L<y3LOfWsr;l2Ul0jceGJdv~zk3D}JuqwW-li)55Bm z>oz-JBKJdlr<F7$qU{)H^k%7eed8@vQA=w>tlN2}rBwsCCddjL>UK^Kvf_uj&6hD# z*znD)wnHM!mYCSoTv8hYZ3;BmK;{l;Y+7^?VtxoM9-7lS9vk88(b}pR<~B1h>LaB? zQf!2IA2gOOKqmGPw87AtOZTfW?wOdsl@uLeW<z5`IT_RWY#S?ngxl$8Yi$5reTh{w z!tI)ci8a_N8xd_DMrZ^ghp^IS8%(SyXqQ-RJ&^%Wn5xS<?v8M-Z)XLLbUWW^XT<|L zTxx9qOup2r0f<Yjz)^1V3vB<YPh^8*wHRpyjf{5XAtZBiKHc659PM_VZ*Ro|qB~d{ zM!U^bm_)26DnB^Fd9;HSIL7Tdg&8)(3K|pbio)DVmZ3WkQns@QO|)vq4DrW?pCZZa z2zg|v8766}3@t!Nu`eRDK-#XwnvgC-w<9!LhQ4bIC5CuC9!5y9ft|etNJD6<RU0?N z(b<Y0=Qb}uXG>$2x+Bb?Sk~Cx7?Nnp4bTQaLwApia8`G*;uGAi8Z125TL}r#u2xrJ z#>vnmgvQ9w-3Tf6<3?MrZr*rV2r2e4gp|i`2#u4zqptSa$`MMGwhs|fY_IN(sUW0$ zpF&8b_gkZFcn_~fIYO#@ZzB{h)9c*R>pLGImGWbaw%-tv>6z|cYN$Fa3|wbUFKfd@ zw|Os&*U4U{@mMb_aFW~A03((OjKlt+YPw;miHUG|pbe$nSs7{tPIfz+U1P;hcDs_V zK@-dPn-Svlba4U%ybFy(RW4{&$v)HnT5rS&2ytD)-1syy01D&zTWyC%n4dyp8t6Vu zuwayq!w}ry2r~&9W1=%hMVK3*jiM%wUxMWeS|T(o6o`3Un3{@MmqtdI^Pw?K)B}_6 z?l7xnn%ntym=&1pHd}>zC+4P|kpWORgH1VuEogMZXqg`A2)6>KyUmupRSa1?*C=Rx ztb`%a&Skx=n(1!m-riQ=47c;+-d6k!EMBPNpUXofG?q}UHNQYpwZ?W}4(zM4Y9=#Y z3{BM<<u!Lh8wx*{Tu45(ah;GnIaxDv1~e95<**sraOuZXPC(;CP)k+2{wnw8Y)RLR z(E3@mBcshn7-~%K6g0N5O1&>;4%1Vq=Rso`{p9NS@Bpi3w%hTeWv0bCZyRXEr@0-k zTBT{R=3ulS(~xVbs{|TG`jBYzRfJe_q!trl21FRf1Zb+)r$JNQkhD3Hlqy79RO39f z>s3T_>?o9g^I5L3&Ko1Gnsm4M5R9r0ZAV5p&RTKvW1VqP)`t0RXL*!WGv95#ish7v z$eK7?4z}VKxXoDPI1t7bR@<480Z^ERs_Qe*n2p2QG$q13r!_3WSlF+^;tB)XVRnRb zQ?ymH&~3h}jaWUSBV29J?gOl#QPE~1LhOX*a&T`&ki}42(dW>ZklH=E#HbDe_grKE z6b?kp0*w3Z(3ptammGDLxj5Fm7DEZ0g%T#siEzz=HpogyjdtGYwrUo;&Cg+AW2-fB zK&+lPR?<*(KD1b?c38A|5Fyp2Z0X;iu{{2ANDhEIhbx8xhHEY~awa!=^ATvuZ_|hf z^GBO@%`jC*<yQ<%ZK>Q7tD))qu*d8lZUtt$&9x)ck|f8K`6x7w3qLO3jz6sG>{v4z zZPrH?jB|T2G&Z6dIgcWUS*z9y*GXt@wu9Meq$<8#Ih@HOt@tHw=T-@h6IS(-SaUSS z7-uI|jC5298Vl;j)zbV2G&DMfM$(7~*M!kbwd}zm0SM@>kBxA=WyR&in*L+dC~775 zn^b6=GB}r^)pkSUpmM1N3mU!UVrjO<VT%>T@`aX}4Naw-gq0`G3S8<oe}s*L5W{X^ zgxLe7!%9#RD2L=qXy`69LffSg=1FL5*XFYD?Z>JEK%iV0CqUCFW5s`9tW~qjZJyD_ z0J&P0k5f_PLDhT}ni{gKf`5Y2)LCjMH1sx##8xVY#vx+Lj9!O^=4X3i8*YQ9C5QD5 zvpo?SYR@@?LTpL2;tSm7H!z07h`Hg8a9uYZW7G=5LXnG*8YRbniVT3lnV=f&CunRE zIXcXqXg{T4y>rf(U<IypJD;3j#jkV+TmZ+8@E)#RLz7^zY8OVEYY<Yc#R@(HjeUel zpdVV^po%T0ni&rbh14@*D>Sww_6qp@9U4<nvn6n%;-IaL41mH`f`W+aps^%sn!gN< zt&53-DR=oK!$6fdT(Hh~ps}uKGx$9YO$`v#&h(qCG?m>%XiQTsB+ku~t(xLQ^DP*A z!T7t?wWMdruqo=EnExV7K1VUsl>mE)SaOfE6At(0B4}I#+gM3y5#~;4>?VvjOtj#s zs)o(v+O+~28yi|~WB?TQwLILKEv6|7Lpe3VjD^-ma%|9SXe=pKGBk{)Fix@Y{}UQ> z!y>yn(m$CSD{c(Te1w=0<~IuQAhgEe>-fZ~UK?xnpRU@_kZqU^EmG#!_Hd+Qy0u}Q zJK!VOIQqQ3Z-&fJ29;<!G<JeIR_ua?{Q;Am1NR4L>^xPqzB9dTfG%-*W?Jz#yUhn- zWbNe+;5rX&kX7rBHm^-l{iphUIW(3*_1KeI)8iN#%dBEvJ4^Ygr63hrKUsiH<01o~ zFe0`k42k!k=|13CovoS%#~}xfL(o_!xibdrhsI`C4NzwW%u&M!^~Y`7RA_Fns6U3* zW@zYmuJq8pfyUie6|`@vT1#3me`iLj6?m)L+yNs?Xv+QYO=!$Y?)T11=2|tkx}6i} zT7kE@&7E@_??q-uxZbBGf-ZFoaim!_peLkxt9l%@+Xii@Oz8NXk^b{gIV)jsv^fGH zwl>x(tU2qU>6SxbpNGc0)v3>s?yc7GB^Za$I1aJAEQxStr(1y=-OgR<R{Tacc7W22 zvChu(ts2;}=UaidyUj!MRbkM8$me@#%vCN<=70s>hUb2~1lk~Q7`QQ5QWse9o7}F` zFpiRk;>v}p9_ncKyVfvRaZHW&sN!S7PmFNg25qoayD{2qzX(TpBq{sAl?rV>?XFi4 znkGX77NdV<+#G~BZ?IL(h%jG-#x+VUiI-$FZJu~&94|QZZHzFBpkdLXAD$V!32mr6 z0=CIS9<XCkPmORc%(OOacAE!aWc>{}Rey)ZK_N$|b6S=azXegUlu<T=qrs})5^Ijl zR%L514=xrot}Ym7gCiWrtx^%|yfnwE5pHu#j$vTEQah}97+OrD)&LF10L>*VQI(L} zpmX&SE3m@tdK$*-t)Pl%*FO=$zJbv2T;wf78xT_Lu|`{mJa4?22r2d+gp|iu2#u4z z1M<DLRR|?YTMa^r?Xa{l6@--UeF&-azG}4fS?2Xvg^()W3kb!_^ja?W`c6VfrF>7L z?JI;-de^NmjImZ(?vMZk`l3Ywt>Z<JRM@L>O$fNMK=r@6={h{Z41htcn4Hf0p{c<F z%~cN#gA@;nX5NU5k%*e+4?^RD;BOs&F){!OJ6mm7@heqCjMx#_x>s5?yYPesMiv3v zB$mwIpfN`bUhMS)R;e7-a<U3q6gZ3{><z1m3<IUdfWQXeyrkHQ-|cpeFSa%S9xb+N zcDv0XC2Evn;$g+vUt-1I=MLzy8WRG3s**!LHUnVbYKQe~VTAL@YAbM$+tq9hN+pN% zXoR>fARo--QfSkp#@TxsT0dy0Yj%XQ-C8UDez$AGTC9Oq!tQAEV}#gXNEvHvuXSo* zVvH9=20&??_pZC3EwXBNN4wVDWEcw>GXH@Pi-p3^jxf*MtX3dQtf7(q>p6e%EY3CA z8!|UBB=bTsUA54LGltpvmd1r_WP~e$nzY}F5POEziu8vvPMSkXRc+P&I~y98QCWA_ zPG~c&vcC<n;vSB5#ceQ*Iab2M(XL8_u&|)?Q*XsXPHB4>Av|LMdmbS?y?8j<9Dkci z4g2@T2-ikvW2D#T-jFk_%-XQm?Rd|s-W%&2RBi?Cb32!oTk-qct`Ew&#+2=jc3!j5 zs)1p{M&{34zeZ>hDVO_p=E~452&vSQH|Z929cc{ByhAREXyq3W;%cD|zuhgv7!3{m zxhulC$Fk!0yUl;XI7S+A2ytD1r|ex+Y#TzVvg0-z#w=OchY*@BL;hPZ_GGoEAT&W` zfd`xSZ?WPZcbo6Pcs-1Pa@*`9l!pCcQ-qlhjdMUfw|Ezt>I06r4qH{XVTr~vyaF0i zkw+2NbJVPa=xC==VZ}e`HiuWJ2_p}P&UF=54U9D~a(>Dlb_Q&-;-7N6?%akawpPMZ z(XNvS4UwVXyL8Ao`7Rl0BMj(MMEVRN-1g0lHoM)e4&LgHYdSQR9LveN2=h*8ys>B{ zXZBmrIN~vTF^|mcYIBh#H-|xEOsq+mD6Spq5CIN{`5DkK6LBWmh!BS?dS`xw<8v$S znOHMqr*{G42{8#8yGq@8KLjlvnz}{)8JgPMjwAo!_b5#r&Togtm}nEMbMODDA?DS) z)Wkv!mqY|)Kx1#H)uUvx8K7x&7LJ%-K~oKY1E=$<d#(5?w=3md)YS@F9Bpn!h;4vb zToV}pMXkLo&>ztHfKo;8y<2sXJj^>YcUv`w+~xx?GI5-a=HqVaJ~gbG$vdV=(AYN0 zeH%2c@c~v+9_|eGs8<gdUD%Yf_E_<U-R5B!ha-xrvh#jbEp@{+92$oR1{p?d$^BOR z5x2SU0X&X{Q637h0aqW1H8USnJ1^W&g%_ZyGVpj3Q0ZMMH{BRXMW=|{s~weA;8C~h zXBY=qWmBTfUJt3!fZo6qn*%M8Yj40lggAB7(G&L=7ygWhQ{JG5RhwZ&of6@i4{eHE z#GXSaPL`j~6kLyZ2RsWo0vb7NR@g+gLyL!|TH#A*>=C&?nVt5k!K6;_Y0#oonz+5% z0gd%RS9}v0pcS+|3N>(_nh_Z1ha=21XdIDh_jnQ7bg3Q3)A&cd1B-)hy4JAOeIMy~ z)Y|Z>+x!GJcDU>n*A;)mW@FXP#*-j~I970Io{h5@H1?#*{xGy5&~Q62BQgLAdqmwg z4BxL>Q*Or2JN8=}YTT~3VeD%K?THR>J*Ea{V`E3d!2MPp%FO&m4Vk+3LK|TPy)h)< z32%F{7SBK%2^S1-XdRzahcBf~ho)Md+-{rpEwo{ceqm4HtkS5hfEL@Ry$<cqRN5c# zE-G!4Bh0bTMl{AOhxTV#K8MDIUX|slr`5n!+Hz>gja)r69rJ#Sv4iTiTE)BxT0&#Y zzeD46M(5)6-02y$q@cMTk90g^1s->sM`2SP-WErukY~}KR_!Z8{1K2Z)0}0`T7iGZ zY=nUu4|2Ib!qMC^-yRz9T+@sXK;uwQNAn+`sik8RnzDOU(`v7T_GfcFW8>N$YTC>< zK+{tJPg3qWWYxUwcD(}Q04o6x@P9{0w*xYXd>*fAP=I#w@xn1^tDxa<f>m$IVYPaw zW7<w=k*Y3Ol21TmQ6(49;)tq-K71`O17Kij+sQ-z{m}X~y1oZ3U23f5=oi!kR0Vhu z8VlEsM?16o(Wc{kF*L4zE#<0oH#DZHo=6>o#)d{JNVENmssq*WbSyMCICYLK)tb6% zdj%RRrEbLj(0*!O4ScC-Spr^GsbE9E<IPdfCcqCdu_JDQHn%Z{Uv*6N!eH_%YU1MF z#2w*y(=tDdH7|cv#h2@%xe6M~fPE3u{&{FDEfy=hUul4Ly}Y?gs^-y;H-Z*I95bqv zwb0lONNZPQ0F>*YU~5DnN7Sf<)#kAh8WV<wThfCyR?R85`8$k5V3fCC=E&DnyCG$? z{z_;pms%(vhsGTew}$Bcmai*Km0=vT;VKohzJMmjv^Z|!p@Y^iP;l~ZQEM0z5flA{ z95z8?nyP1xLmLB4o+HiRV`|#TvbYvN!>tq^{XL3MxQxYR|0J}@GCiK6`n{p1u^I)% z(9~Gsle3?psS!yn<4v`QsF?eqjgYBu^!yBMSYw*Yj;pN%rxVosFf>(0j?aL<H)<%$ z1e>-Mn#%9^`N)8`aFRrls-o+lvD#{0y#;NQ)R<)O+ujaI+JZanx2+9d;AsksY*CC5 zl;J&S^Ps8GJ>(rV+uO<W!cEXr+0jdmH>~O}V_h$vfVY(}G}>(bo_Aqui)AYYTBLj< zu=G8?j&~h`0qYoE`ShqW<g0_$a#gq;8WY9KW*h+Cho*)MZ|pj}uZo7@jiOC})(0`s zh3JkFXsVvb&OF?xv5}1r)IFSPgBzf65UXjp4%%R;@t}AJ8jh!_(XN0GS-!G$(dKZ3 zCLjjZ<b{zmCrX8fv&&9eHQ(a>`Nvk^S+`mAv1(j(9(@rSrvOGfiswA-J!T{gkMxH! z+zR>-4;K+)?lO{VA2lAn&94yRbil5SHxpNWVg-JO_w%2S4*GG3KLWTN!o#SbPrU~u z6el1Z+BkT5cVE|j7$(St*zuV<zoBdkBLcFa&Gbgx(%fMNz`${#ir)8g)m~C_Jp~P= z!b^<r8B($E2H=`6)PR&pnz_(;3R1Uu&p}f@|3FAJ14`%`@TI&-M5~q{G*ZQ15MjOq zZAxSQoxbvF?8_z4SSwYwDrhV^T5M=UK=2t=Zf}jv*)XVLa0RG@rZdN!`4ZYRud6fm zYiq-Kx4G$SZ_Uw7t`pEOOtEvd{>Gb767GeQq2ZzGuxQstgeF<F^P|n5bqp+qC6NK& zdIt#~CEp8eIC8=~UL0Y522EA9?VboT^lamh#<rIZZIUcg($|pzP&nbS2x7=M&Z!ZN znxYkkK^p}QOCrvk>!C3N+4in?7?Wew)&4sqF8eA8A(b%OeGfF8YcXPeM~LaD1KIfR z8*l#b9M*!ymPY<3BAY|G0ZL=j_Wi*-Dp;Pi&{$Sgy4Rp_&5`5S4E?dOp%HU6G|o5G z7>`2>hlV*kJ;K%QC!}Hpp<FW%>JK|cyohj?|72}waAOCnZiqEo{Hz)RRmW*~EHn;6 zwZ`8BjXkWU_ED|jJ_`fXab9s)2(j43Lt`<}WLP{_K~v3uX&>+cG&W~rUH$)|GErq7 z4UK0sobWM>3N@$3;{j+~cW|h}de!C^?>5GDX9~3I!O63?xf>b_E_X=RNoalKCKL24 z{?(RB;dYF6Xw1uB{+lSruVRDK;Wod9bqK7oeVsk(MW7$7tLs%<wbCDe#->o~+IeV^ z&=eQ;n~JH<_i4}=6We}NgliW$D`<MOc><w6G6imTxBRXSOL$U@VS5xBn@AlVUH@!) zc)S6cY6I5#ZfLr!(B6YaKec&Z-k@^E6JTr#)1YAwSQ2gCfsiUK*ZD7LSLMUKSJw+_ zBx6+Kobfkkb7VO<5BmP0#w0rY%}B=|B0d1k@(qmaTjkIf|9ngp4oUkhF&v_W>4-6p zz&rqv&_1Z^d1y1FOVX3rSsV_%@p9m7g~lGiD@V-AW6+o!dLlnEz^M{ZlVCVBb~nZ% z+-`=ZM;J1A9U2o+F`fALn~W*%yZy%dIjj~#V$4!lW!KA7&-2i@r^Dmc2=f9oHjo;0 zgZz~yo6*dI#v-YwBKtI_8vF}rEQRX$LHPHby=BbfTO!OXXl!Pgrt?9Uh;N0~Yk-xh zslgu8OqB^~qciiMu@tBw&NUB1<1oSojG=!<$HXk%9pUWKT-3BiYSZx#LE~f|jB^wk z>x~@W!@u`aiOEB?D;C-a-g!IM1c<=4aD5IIl{`o3Z`7<>JeV47iW>68rsCCjuYxum zNy{;9cEmpy<rq|V;q#!$VvDx^I3z;jLZG_o7&PXBIf_neiGN0_nvz{O4jLOs&RBD! z)*K=U@3)#mO9a=rWDLN+G*!bM3$B?1O(n!*#bIdpS0^)~&43`4q*||rLz{#|u*|?` z3pDzuDfTY3nb1@*`?Ye&1s1P65%YFv%v>!jr=U%PCjTvsnT~&`Ivg6B1yy(e+8h-V zjo1eN2sN57g<P%MI`Hr37+Q$XWErYLXuJ%yyu`r={a~jelq5qBB9tIQ=Mj?eoY%J# z8-g8!i?251k5d>fU??O2(ih@@psD3W^oL-C8%_v1L|#qN50+>M{m_;Mb<6>IHAVUl zgD@WIDrQ{nFpC)riZqU(f{Vz=*nZ{pKS5@W9ghDnnj4`^2c0Ex3Xm6(g_w$ewk!ka z2N?lFQ6hR!;w&I9A`?!fg6praIqVB1Ye)JmhA_hn&HstA{(nWNn2g8-vNh%cnNXg_ zd>}94<&bhJxQOhwJ0SGm4B^!jna&oSzp(`h4FbZ8NPR06TuqVVWjmw=<Ut7IRYG_* z#Y><+E3N+;i~n~K{u?}7;E*ne4;D+JBgl7jg#W*Y_Wy5Y$gX%-SEMP@enQ)cY?1dN z4$k8bAiRhqPC@AK5rh|!_D>)j<!2y<DD3R$Sj=cRP|J(RS&QSay#5{1@0^a;6zPu> ztjrEaOF4#r(eeHQi~0XksKWXnGr*oNFCv53%;oi;AnS`QRr+CzloydfY=`n{?$ER6 zPXnAlVc(D!k+Tr%x4ixxG7465nE_U6dHp+Vh8UNz{TVk{JNy+gVi(Q-6|%rrgJ;wC z(D8^2_SD!*V<?Tdhzz#BMhC9d1kovCuEfw_dVMtASJO?ArheM~SIFIHu=bDEI7G)M zGJQ9&EpWWHH$l}kO$><kml6M^ooP<c8Qq{WAaV*M18L&VuJCG#Z16eWp)p5C_)m~g zQ}KsAG9SnqF4X=_k@iK}PGp8TK#tiwAgO#gH5t&va$0fy6*9pB@T^%0kO|%lq|18z zAzw=6Um!ESP4ixC?+rA?mZIz`y=qkG`2P->?_D|`k-@vQ{_l|G*{S3G1s2PS-j4`u z>4$-g`-pb<D`bN_rg<WRk87RC;1l@60zakgO_BDewf$)h4TcYD1Cb?uPU}QE9MU?G z{1G5cFW?XP7pZ7u@Fn~qzO3;TD!7OYzN+<Cy+eZrCj6R?@VbsbWUyB2{|;LsUY(9d z<PiE;>rIiS)7oC_4G_72f2|23gWqWVuaMNYns16Uoy8yGIn5K<Qr~O)4@xgKe$o+| zVk<;+AU0dXpI#cNH`n$+ZU1-3C@ppT)<9;}M*At8YBw;0c8I_@?R7*VgB|gQ{N>tC zWP+WvPNaSX&?)wI*ORLoRJ!%h(TE+P$7uckA*yxv|3wC@&`?x>JL>g7)_bJJQMzKI zoO(;9fwnQ4AkraD>qI6vPUCpZPtbf*yaMqubi8cMH$|=vOEtfO`yLbK4@UB8iY&k? z*olRjZ;G@R!Oj}4(ec*mcz=bQY#Vg^av&#T*f#C(AE5~9g&_ks<8JNN6lvOlKg4@9 zPh`Fi09nq5fvoR7tv?3jMI`?eko7tM<Z}C*=83ddIdKohh(}-`cU0p`KswX_$sYqU zqvJr%)sKK|`OkqY(6>Ow{{e{qjGy>NBmIBTI+5}I38bH&pI(pskviiv(-;6`2~Fmz zk-?T)Co<tSS|>8tPU}SaU#hV^km+~S`ei^~mlY$x5`_S1yAprs*p-S#I(CE340~$6 zm&Q;Xk4V33G+wLiM7CHIkm*EgJCXSo57maI$b^Pz`+tIrKU~NEA7Zg|WXY~a0!(P6 z#!*1lI9?~*6nXbKS=*Z;{ikSqQ)~nKeAvk^0J871q>ld2)(%8Q$kDh2$O0_Y`Z6G| z{|VBiK>Obaq+ZBBUgZ3<8MMwgCHTVvt=0}i>T9xo97w7n_PelzTBu}#|l4viL2 z&VL4Y5$UiQ$h~=o*6-1HFA)D3d+?_<@ChIX(Lrs0jwCK33tFY^hqZo0;|oBh|C%52 zXNI*f@FLRj7?26S1tkBD*53!R?@nv|3m_Bv4#@T3Jdp8!0rDa;{spZQ8Fa8;CCd6M z12cAlU;_TYAYfY^u_=;o2Rjq$0OZPh6_EC;ftLa!wLTcgi^zhG(Dso)<~QnkZ5X2s zaX?;8kqM90b|M|e0a>$&K$oZu(<}K5P0s|fe6xYPh;*ByF;(MSAfJ|H0C_b<nsV@m z9kCQhy?}pwkm=s&&&RGRARA(pb|}#fL>6c*kPhp#o#+sI!}Z~1y*3kB?NY51>9#@Z zO_3dcySD!o(r=UIiA>khI*~!)kCDiV-mQtI$PDh)_J4=0-yWS{C6F0Er2UA@_z|r) zMaJ9fkCDg-kLrl~fnA~h9mtNZ12W?K8b1K?BC>#|ft=*u0-4S^&Hu+(3<uWW2aP}L z1c=P|Jdmb(t^WoLhu#a##+D1iAI9UaUh^VS?+v7BfVMY9@&mQKm;r_d;}2^z6vzm} zG!6%{fFrd&3doDdg2e-A8jnBpo1igC;|)Nz%p|Q(2J#{zzhYyCCT1#wF&Bvcj0O0^ zj2CIl1Tupxt?OSGH;9av4`hK>XniG+85e5%Y9KEn<J}|?{a>mHB8f7s6PaPT#*Nxe zr2TdvGq?lD0&E7-ze3yZ()JzNey`T|0O@}}b*_Y!ns`LxqZ%Ir@|nytKxXtDkQb2| z9R@O?BijC-Ak#Uj;}dxjGG5jRy`u3|9f3%P8m%`)7T}oX-vm;BTgPjP^nX{|i7fC5 ztpn9gR0jhiexM_KsPUx6Q$Su#k<;#swl_tl^NsfVR`X4f75+}!zjKLg{T+dFJNgMW zR^k^R)2P?@yN=rw$v0^GUm^35v*~|>Ovl*_jlc^5IgVVMhPeJ6GJ^mekH}UvwSP;k z2Wg&2zLnOSA`8%_naUplXwvW}($oQe*fN&`nQ@5LyOPA!6xk>}w7n_PFBEo;=e|G| zsGpA4uNVQAWPm0H0=fDQ(Rz$VH;@;R3B+oh$c(QC(r>KB8?=3@)@K3fHyg;~c_xro zu{S_u372Z({}h?%)mm7vP>8HKP}UsCs~-d{JL<plvQH#jt`8)`kuLKY0pUet1COMF z>wkjmxiOH7ulG0yF23I5>p_kQpVxX`{o?Dri?8?o>UAH7%*EGx7hmsTTjEZ1@%7%t z*Lysn;JWyFuj%W)i?8=MCYrwP<8pEF^&VRR*MIXhAGhS8NSEi@i?8?ix{o)H7hmt` zhPe28@8avd$yg(}O*eh52UY49U+-Ofy~nX|@%0`yP)?GIulG0{)N4MTDK5U=J9qK* z-V8kd=H$5edhg=vy^F8+FcJRUYdz4C=bhQb*L(l1*L!jQwby&1KFKlDVTdU=IHm&j zDQGrPYO@qPrJ&U$X`HX%kb(}Ar7=sv%L+PAk;Y{Tjw$FdRT_&FysIF5nl#?5;FN+v z$<kP^;0p!r>C(7G!8t%OhLpp&(E0)v<4zoB`tmo@=6?B6@73EbNx3lX=r03*ZGBJW zn^of;-`VA>@EeD{@JQv4H^2PqjJxk$)BUOW{sk{3Z(Z@#_*<`=zUtP#lWw2<*`_5a zhS)K~(NP55;uy+jSKd5AMDi_;acHE(nP97Y*e=2>mFxwwnWc8$uHv9#_oaXh*<fe8 z3C{-UJ8Kr$S|7H%2)<Rat!9HQyw&d8Q&cPV5ZL09CtnDCYv~1dw6p6cgNG-4^IlxV z%P)`19dOm$FEZD>QZr`Gij&<YE$Y7b!_Bu%>u<(&-+yPz89Nr%zw>O@mA_oy{pjmW zs>?UL-pjxHu#VUDeRfgME8F(;e5CKQ8>UTPRkZ2+{_zjEZv61<eO+$qv_0(5>bC1H zAN<f`pCk;7es*+u+3VAX9z9+&s(w_={X?EFG(^@Mls;vKz4X_L${Dh5om0UE&9t*& zB6+4{kCCnNVS5WRMY2V6!Dgn|efx@oiVaT#8#2qz_7|R6()SeES|4_x2%at3@_Aqj zXWM-vM73hw>0ra=*x4viFh}~HBYV<^jTWJ)j&V&#)ey1T#}Xszd@OF!cdp$lR+Rc! zhKkcZmSG|)&F(c^Z1S;;5NCWW*Nb8E>|P^9g^y*F_`%0ATEwN>y~c=LK9)F9?_-G< zN%Q~o;sJZCsBB{4%pNBk3%qfR0N$Y|h-4p2qS)WWQi3?+g}LxgFQz;}r2c7fGMyxG zu+dV&PX!q_h_;?aFKL-5Jg{KSpUUDm@p${%DcQ*)c#${0vP=<6npk*DoGPjtE&kGL zn&`UN>!mEoqM(VT1SOd+jyJI|of#rD<4-TvXr@@*Xi=+Rim3Ck%o2Swy<RHLY*FfC znIlg7SW-n)me<P&V0q?>O^ucSgO)ULrqSXrE%U^%>_5GRB2K!fXkxh%migj`CKecs z1tKozPcQbuLb2;li|i?nsQ=R<+i;OcTH^ImeYaRtHd^p6fRIjxaO8U9C`+bDZnOl* zI9XzUqeb;awlMR&UaC)XL~5hO;HQd=CE{SC#b5q2m|W2|-|J-ruy^u=r_tgsA4unm zBaId~p--2J;H6$K_`tGEENQghp(QNKMRlX4M80TTA-XQ}dZ|7w5CyPcl%8A3HD{T3 zlqz<m2wg7O9jm~WEw{6UqE4}ig<xY=*x6!Hx<dM1AbZw_T`i&tB)hK&?Dhh??^<z2 zv9pT7CfsOeZxR(ZO5au`U>khc^&)PiWDk+uyVCAkD(V%RwHj>7Dm#0ts9Ys|JFfv7 zRA^_*L~@~IkCCnNVK)l1NU}w1!DbfOeK(1NiVa@}Hl*0jTEbH-eNU0C^<g)Q;1bD} z-vqX>#O^CZwPM{jgAH44XDdX(YUz89>`5Q?E)lv$vOCs;En8#v-7e}Bn|KS@n6-9x zrzl-3eJ_wb>%;C6QR^hTuN3U|b#~v~;*4TvZ2+5albzioDsGa#t!@R|;KM#3;%=7g zA+mdKw)<9!dc|hl1~z5AoqbqTu9v=@%fN=+W@q<`g4-l}jO<At_E8a9CfTBLuw`X- z-~FOavEduR#+2LH$3<zm^gTuPtPlI7h}tOG^4q~~-)Q$eAkHY(y$Ni>?RNH{sJLDF zo+I1f!#*qGHc58J9borvvinwvdc`JMU{mg}v(JmlJEZRgvO$)eJtC4V$?m%oY?Tjt zRG4>4cGhOFnRnWKUlIou+iDBgkj-}X72(+|eGieX^<k?;@D|Bt39yA*?7pvwYQ=Wm z3N}pG*;-K`r0+4ZCw<sAMCew@7FB>P+iLecF6tB;z71?lg`Is%lvYUJQ)JKju<wYd zZIUg&3+(o7cHa}?jAGq)gH5>0&en;FyQJ?qvJF1$2O{on$?n(=cJJMG-;<(Vv57mt zrfj#fABoEC()R+{pdEJhv`F3|*?l{~R{5}>3UjAqXWaufbEn<+b8%3yt#*M8xyR0a zDLnT`-$P_;eb_T1c$Z|e?gd-8%kKM)s8(#}-C)D+wX<hM!M)P=7}=9P>~|t`w`7a% z16#J+?)!tNQ*8Jiurc@9*`Gw|ebV<7*|R?Ec@ecovgP-K-M+`}`-?cESoZ^96YjUO z^`hc_>3fcBgAe<=h<iY?J01kP_W`?agQ!<*VkOv=2kq=1qVhrMdx30FrDG`nZzAs< zsly?rS31V>zWpK4RiK;RTKEa`A?ZBpVX&DG*;$u3sMuDIfDL)r&NdgGho$c!vb8>} zDS{u7Y}Q_|g^$>MTZn4KcHRdzY_FXS5(Rsu?=i9`ec09_bf0949tB&r&+gk+)G0Rn zZ(w5{wX^L+>7&y36xp*rY<m&)H_4Xo2fO`mcHfTTjAGr7flb(NXM;t>e(8ITY=aNm zNyI%S*&UCA-TRo`H$>DcHt`8Z2Ql+;$FQb-)J0T2E`2YMZTW<q?aJSn;=yj;lSsMh z346-jg!!aoXFUZr^GQ3~T^v+ws{>#|p0cw&h36^hdx&hU4;w0i4@fraX|RO{?7r8E zYQ=Uw2sZ3#I~yhno|eAH$e#3JdyCM6k}Y}$Y}rA(Z(mWT*zjk;#yn$Z`-{?Nr0*%R zXMNa#BI;SmmOlq}`?Gf62ysTS?kcbe&)L~1QSqGgJx8{|hm96-Rg&Ft2<+Y}yKjuB zS8U?*U{em+*;r9|NcvtN8}z)L9VU{Wm+Zd7V5@xC5yCty*;z-xW*)ZtjuZzK+v)|d zAxG@&XyG{`eGieX^<m>g@C%a7ItsS%1-tK9QLWg{FM<s_YG)Hf!BOdZjO<AtcDx9E zQL;rZfh~K{?wcg)6dV3B*qE2>>_k!elJq@A_N)&(Swy`o+45JwZhzVCJ5`)ftov24 z39s1MWKr>o^gTzm!H1n8;$D^Pj%u)bU$y(Dh<e2))__f^wzIQEWwrFZKsKnx&Zdgw z8p-Z^4Q!PUn<mWHBs=SMu$iyfebdE3#kQ&i8}hoHT_8NKOW#9eYkgRc2(FcE)-lIr zqNvsp+jPxYEUFdT`3?An9kZvLDGH8B-(zG?`mos|^bN@ty$QDL4ZH6WQK#7O<6vXn zw6l4l^iAn|itJe*cBzOuF4^+GgWZ1I?z>!^QLOtdunB*+vjw8!@6z`i*#;kWrHFe= zvOC@eyZ0@-Z=tAHY~nj$Q{J|-#iH_U>3e}}&^vZ^wMc%)ek;C4?Dw&(73RD4IO{}e zqeVSlxk(&sw5Z1`H;c9>yk6?@%6j2xv={+HaSXUc9BE>?5|&aC{GQiKK9?{yh$T%d zd@ORSsQ%L;AFtddy4E#%$;TpPqM*^D9<P*(<Bb;eFlD0%ec$eNyI9?5QIA(PiMmFM zdc1On==*`!OFdq(L}{Z%Jzlv}oNlzJ$19sf)Q4U#^>}5A*wkoIk5_~^(`ZqTSGI~_ zC%s<k@k)iLXtb!uE8D~mjTZHI<t`C-N{yC}I9g8Gdwjd7S8U?P94#N&*`1>DBQ;vc z27PR2cZuYWCA;r5*eV}(w=hpjcGf3gGf&%n_lSdvZS^VGkWcLF1H$u(^gTqj)`zVW z!JkSt>oc&0pW1yN7S)RF{5jaL&+P18QSh1cJx2DV5BsPH{ams|Uw|$9-0r(y)G0Rn zORzCt*xAQL=@-)X6xp*r?2{tuOUagh1$O(FcHaZyjAGqqz$ScUXAg>sucYrevJF1$ zvm)+{WOsZGcJCRxZ<VN5Y~nXyQ@*yd&x^{hrSAo@LEqTfBO>`5$?p3WY?TjtRG8mN zcGg+2ncv!dUlIou+v*(Hkh6C772!E6eGieX^<k?;@Hxq5eFwJioZa^|QLWg{--8YN z&d%0~g72j7F|sFp*f&Jz_mVC80c_d#cHiToPO;%Xf{ppX&b}o|e~`YX$e#6K-w{zi zO1Atbu-kvM`<@VI6zl#OY{E}=woX+1Bz@13ZSY|~5OF_CcE@?Jdw;h3o)q<pP5cMg zl=F7>BT;!?`d%O#^bb3GS|tBNvip7kTjj%kD$HLbJL^}lnZMY5KNklT+o~RH$gg(x zOX2xd`W_-%>%*QA!S#~O`VDMhz1{a4QLWg{zk?0?&CZ?`1;0t(V`NYIu-}Q$-z8i0 zPq1ab+kJl!b&3sd02}j9JNuI;{ipOjMfR)@dtO8}NVfa}*zFB=-(SQT#k&6hn{dI- z){BY@()S$M1|Rl!5%&k#%{!dv-aqWF4WeF>BGKXOxH-jXyC42zbET6vQy0LAAcxa_ zFYOf59Zq>K?F3x~y6Kt8Pnb^WJj)Mkrqj;4#6iWj@&_B@XJ?xWkDv5CM7Gw4HAS$$ zWV2jg3;pfBEkw0qJ2wLx=CZRvqQE76kC8p;!?qTo%_LjY9Bf%LyKh@jr`YfSurbZ; zY&%ifT>73Od)9|-FQNh@TW*5g9$@$FD9$L>9SAnTw6npY!j!(}$Ts+}okU!qWOuXx zyEoA88zSlzo7fU;N((#NMO3zsz8A;_wY0NcMRH5Y?h682<->LpW{_lOwE~+NWcTeZ z4l1@)Yp@}$>}*frX(fFRk*)P%Lq%|F$!4_yTiDv}d#$KeZ0ELM!`j%{Fj3G(`W_>D z(ueIWLfcBV=n}AHZSB5&MV(^9+kuU_#Lo5?rI$$GQ)JKjumeR@JIR(`3U+%tyKjUz zqgZ!)unCvi*(gzQsq{TZw!w#u7IEz*yQ2fxz3uJ3F`{0vi5<bFbg;9rqOybZy+Ago zqn#Zlk~>Ov-(_H{eAp4fyiBsQg2859X7?Q_4l1_Q<zPdC?d)jb36{Qx$kzI>aU%F~ z$!2u|TX?zMcdV#ZZ09S$hIO*D38J8r^gTxQqz^k@gkB-pq7blUSJ-`%M4e*8JA;i0 zv9l9JX^8YaMfR)@J6S|^mTY+!u-iM^eW!{uigjNJHld51O%@ehr0+Sh4L<A)5qG6z zcXS22_e#5Oil|p?;#FW%y4u;<qOz;>y+AhTDm$AhlCP5NzHVTveAqN$c9ZO^tHEY= zv-_rtgNkj{9c;+ec6NdATrGVMk*)P%JtDZfWV3pJE$nXhT`Z~<+qoy$upV|cQxx=& zzQ@R(^kK6_Xiv!&^#WVg)9$-O)G0PR6l_c{JDVp;dr99@WY7ArOGQ+uWXrDsyFJwI zyIh=6tovH93D?-!0#R{|^gTzm!G~Qb;;xnKj_bhgz1HqqDC!lP7zQ@wIy+k|DzB5i z7sv*M+1b@1IZU$q!ogPguxo`GF4<YV!DfcreQy#672B#0*pS|KcD?ZQmcEC`*7~re zBDjxav-*N9>|^)6Ra7gsb3d?QeeG<SDCjGFkC8p;!)_Fz{Ulq|A8c7ayYD7Zr`YfT zU}O5*Sxc1mm%gXSp7miji>LvTEguMW`vAMI5N8zY9t1XFpq;G{6$7R3IkF8t>|G*m zkYsm6fZaRD?z>&oD>g9_Y)XWk-6<*~r0)f?L6LTLmq?D3?7k?lRX*%)VMa-I)?l!i zQFh-w;-F$%MS~3)Y-b-3p25=h5ZPKEwo(K~OEzl=*urSL@57>6v7KYUh7GZ^dqu$z z>3fXqNgwu65gH@eA~)Ew7`yL&QK#7OSg<i}JNvjObxYq<WY7ArPl~8m$(9cVyFJ$K zdqA8~ta}*PgrRo!pr{xseb13?@L``7al<6LV>sBo!|c9QqF%9yBfzE%x3kZS%Hh)Y z0@<JucJ_!!9wFI%*MqI{VUG&)ddbcj2{!Y3yYEZlpkiB%0vj^Y&b}f%Bc<;lvb8>J zwFn+1*{soE3rE>~UlY}e?K}o-*l0UjD+)$S-(zG?`mk?^&@qxNiUV6V#_oGu)G0PR z9&AjUoqbD`#!25(WY7Ar?}(^)$(D}=yFK3SdqSL1ta}{Tgt2zEPE?GQzURm`_^=;{ zxN(x*kpOn@IJ@sjQLos<M6f9dcJ?DtnIL^HkPS+-v!_LJqGb1t2V3RCek#oIlASdH zZ02~o@8{y6Vp}DF4VhqPzZ9Mc()SSAS|9d|2u_l0)(v0_lkC3Vh-$@lo(MMV20MFJ z6x<+vkC8p;!+s}1CrY+x64<hdcHbXFonpf$gN>PFXMYl<lcet{vS)qR^CD`pWXq?3 z-9Fjw`-?cESoc)02~+HBy{MQXeb13?@L_)!aZ@F`V;b1KQ|-PDqF%9y$zW5a+1Wot z<uvJgfoxE+&keAjn4YX|fTx450^Jgii@oof{e(GPI?tK`Hgme2b%}$DZ8Z~Y$P7E% zTzF<k-$P_;eOOZj&y;Ld3fRJ#cHb7FTCtsHferJyr4JGXDbn{C*^@qOYY{q2vPHAO zmd&!K+*Z^nHhd1)nAvu=ohY3xeNT}+>%+DeQFA0)o(gvR9J_BvaYnK3xnL7g?QF29 zNR__l$Ts+}okZMR$?ix4yLYbLH$>DcHgO)<lr%frMO3Cq-wR}e=Gob<B6*%<_oaia z@?pCPGhMQ?=7Y^lxBGS%2Nm0D0oaiFcDASR%$L50$kzI>p(1#JWV056EnHyty;f8! zwzCIp*g`uSCJGix-(zG?`mnu4s7JCzi@=t7?7n?PonpfmgN<2aXZwrNMbh^a*|R?E zKoPZAvgH|Iw=cH)Mu;<tb!UQ2$gs0fq9Q~3o+I1f!$ym^Ov&!Z0=qZU?i(ZO6`Pn1 zHYLl>#)`@;>3e}}P_~^NCX%xyyDtZ9l@B{Ym^qT2wFGQtj@@^pIH=fGxnM(<*xAv- zvqbtHB3tXj#);ru$!6t&EzGt1juq94?VJxbEYHp+h=M%ndyMQ!A9lP5&6jM^Qm|$D zcHbmXr`YgiU}Kir*@>cbsq{TX_N)&(Swt<9Z25Aq+n3pWr;0O*b*})Mu-wiji;Csa z_Z-;<A9jX_TOrvU1z`8Cu=}Qndc`K*2sWj_&dwH<1=9Bd*`OQkY^q4UQL_71g01pl z(}cNFva?o!&0J~sO&13h+o}+3$SOO#KzLS3-$P_;eOQkOE|hFm5!k{)yYFIAt=P`R zV8e>+Y^EqElD@~tp7dd}MQE{Pi%P(j72AE6h&siFuLc`aVrTP2X^HebMfR)@yHrH2 zmTdVNu-jMLeV2<figm9Ao3O^t7Kn;9()S$M1|N2%h+FHl{U02w#4aC8p{Vz<6p5sD zUN7|`v{+O&TGap7fDg*uWRJ62BsW@A9K2p`w5ZpfYX!bHsLP{XjpFrkqeZ<szDXQx zw5S)(c)h&dIqtx)+nmiEcSQLgSa^$blJmfX+nm=?6^A!C16;qf!LQbcCHFXgf~o7F zw(^&!OXjzizi3_J#Mxk(CqErv?1ilbW5yz8i`?vtjHNmFRqqbQf!NoatC?cgtkkS* z&pdp(po{#WO6i`SH+QKgW1evcwiXA5z2<z@@zlM}+Zo@LkL=os)CZkH9IkRs3QA4O z&dowr_w`0G4j?O8?w~pS<<B^lECRM+2^PTF%rD4EpO>9xd?|L_>3qc*6)CdrafX8t zcW*|;K8(Z<a;y9Vs{H+dNn4$B9IjVK>sqX2%*budD}q0Xlkd7^X%}Q<&t+w$jo!tw zslLApDSkX2rTsI-AqRfm?p)z?ymlb-9%mjt2r^I1deFIz?K{*VKCX58ySgmKhdNl` z(afyPea-+Cd$g^!hA#QDvHzmAWYcu0TY=0Cqa-cE6TT=<{TNwR0dven+Cj@fUjjOM zC4Ow3IbI8^Q$@Jnb$?0IwtvpS2Dyc985Vvf6>e*Q-TtiF6W|=x2g)9Gt~XsVFK~pQ zle#d;4o45T4>|`qT@kOLkClt{W@ImVoENE8&S+=WTVh9*b6MAy-%*2Ut|zOp$U9Fc z+k?O>SWXV6pbOgiz<c=Ufl3o&<T(x$`R8x46Ea>xC&ZrD{r4IiMaHwvfFM~CRKg$q zb{RhN*ju`>jzbxT&F(sYBW~cI75orHU`}p&e!eF?H_|-de$83qa5Zn^FiaNetpn)3 z!a+>JI*{V;Czb~GDfHvGFfQF7E)@8=M;RCXP#2B-QiKD@67cfsFw5WOq3u^4hsl^U z;Hnp^Z}e*y^Sh>8FrgFW#g9%<ZwA4{la~X&%%(Y{qcY)JF2|8Xv7e@x@)er$hm9o& zgj}g@&2+pL(67?A=GxX0`Z#S1(7r*?G3@0PsN=PQc34-n1#I}QSpLHQQEhCcBVuVW zs<o}PwqeE_Z)jT^*jPZ;`M9=SqT^w#%b%?W$nRvZ-j_lWb-YV;Jhshv{v0~5_S%Rc zZA{P+J7^mlED1Iy)Dbq)mq8vum{%tqFBst)P%4_Qz#n$N<&Y^XDXyz@yiN#D)wXUT zbrm|{YE6ZJO4C$#*zljx88T1Xdg*vr5sh?h3x$orD<K|jyH>~R3fm%WyH3Zu3O4VL zYK5zK#YQ(6JL!nMwe!`m{lZG)>Z5Jl5&lEl`ocz+9uR(JiS5!~+j=7WnT|J5`}TtE zZEYK*ZK1I3_I}7LLL0Av@jgUk14iluuSIx|b{?$bT?gAr*f^@AwJi+cLLG02wuQqs z3AO-WjJ9E)ke_w~817<i>;vUeMC4qEg^jiA3t0}~To?u$YuOJ{0^v1M`}Rk8t+e3h zjkRq6^h;O^T%%#bf5t$_rLb`>#KXWmiU;9OdmV9{c8-8;4RUJ@OwhJSgg@rw#+9gT zQ3!vcZR53VFl?V{+XQWkhV3(LOM;CV4}suE)Qja8?j~wu42=9704LXEZF3|14y%r9 zs!lK#;mz7MP1}aTwm{pGwQU$|{C)(l>Do3N;mNRZ63*an!jm5XnW7`k))B9VEl%6! zXxm8GenOa6s<w?ncq_u3gmbkG8@5rQZE4yz2DT{(b7IZ|GU+%j0*t_Gp^g}jFxM?! z9&H<o@LOy*T#K}g>)zYiwiq@B6Cm$sTc(be2-^v5%hK_<KE4MV^OxU)f!&w@`9Md^ z(-D(k`%v4KYTFI49f0jh;Bwe7ZjFf${;XS9;0kS<gz!z;R-kQ@VY^wUccb^~C{tiu zuZ^p8#Hp~|qHWyAn8`E<zio9Dun0EN$&leXUWtx39X3DMx&v2h+YE&H$+RB8HQF|l z^?x2lE(UA0F$Lkn%njE%ZJUMg1F&%|xJlb)Bb=_|-K=eMV7pw~)@xfTY}+B6y0^f_ zMSU)02Sm32P8~4~dL50p?$Ne+2xm!)VeHbjbm%MyuY0v^KEhmpc<t7<1qgGo;dLKu z9B>OET`=9bK0FAU{92v|3V*hr^R!YsFGBb%Y`h-Qw#5kZI|RHQ*0v0Uy&pN?w#3S3 zLS95X&hfq4#!9gHImP#BTQ=+eF^a`G{wRzrA<pN<eGK4wTt~!V)3^(^Sl|;nUM|8* zbiAi^ygb-)VH*lOsBQTO^P@4tfX~3jp|TXhPk4=G`#+~6E`#w=7&(Qiw2jMe18kf^ zhqP@4!WWnduIII_0O3D$yu;ddBO@Tp>xj0kL^x0TzCauDH&#KufRWShsE$~O@K@UQ zqP7*m_O*6?N!#epZ-sH1zN~E}2%pxrSF~+4Z1=#%>G!I(twFeWk2Y3o<60Q+hK*CQ zM%&gQ%%5uHlzdIwZbJAr*m%9JZ8sy#ZsAm`)wcBrA3?u!Rvpu}TM&K}Hq5GG;|*;r zh0*&R&^KYjAT>5XFi4Dfkau;wTM_0*A~}*zXxnYt#)15vwv{2wAHm^Or)}j3vw$3o z?@JrnZzB|bTZS2Zpd;Rn@Tc1Lp|)*;jb9z&fI6vdcOcB;DaXVqZL<*eN0|Npk+$85 z@Hw;=yYORe+l=rFoPTVh)7rQNVSe?Lt?`Mr34|AG+o#&L6}Aj*`%K#^V9V0B&$VqE zY}wlO1#I}wxC_EoVCxp2(Gl;4!cT#)*}m2`u3F!t#%!T)v~35%Y<{-Tx7xN7VSFD+ zUT3xK9%%d~6I<<^w(UZgt;|Awr);B*d!g`)JTfyKaW`x%Asv3uw)?b=@qg5|p&Jmu z)pDCSw#Dx%(Pq8hEu*@@z`ZsO!mV^Hgj*%&HRtho2&Wo<sU{1O4atElf#gE+Ao<P2 z*X#Y36(2*vc=CS}!qfgZNCJc>`tcAR*sq5ShD1Y#Kw=<nNGxP1WEf;P<Z4KFNKZ&F zNI0Yqq%Wi&WB_C!WDta_D^}B1#(o623i6AMN#g7+eq(zqM3AR#o~{=|c%pVgx<Iak z@GyP3Q_L#$>oM@3=&1$>f3JdvXMQ8}N606TPa!-ge-8Nq@+IUe$OrgE7{6|l-$C$Q z$O*`Mke!fwAiE&<LUu!VEWR7E15yCF5yB&I5o8X8zdSw>G8r-jGF9~5;MX%{G=gIw zagcaOdq@XJM@Vx>0K|j@Lbz0Oc5yaw_He-~fvkqCfvknBgK#~%8M0m!Zt&|;JQBgH zA>AQ8AUz?yAafx6kZLMAc|K$zWDz6@!cUz<L9T=Jf$;pyqj3p3WHqEU!u;?{AfyF^ zzb@4b(j3CC<$MI;5&5*s5aVz4GmClV{T%WI<Vy&@UCZzKyast4QVV$t3BL{D5%&ay z-|M;)!sG2+NE&1wgh$(j5D#P#WHE$CTb^2{LU>aB9hGZ<@Y`$HnJ$qFb9*SAAZ;K& zi8HsNad-y50WuLX3BqIbGzgE#Gaxe|DUjKaIgnJyTu2&Z9wZ$y5^^o%I!G9#H-xup zeIflJyv>S$ghDQZ1Vb)|;Fh&m-lOuqw*w>)@^=hbo^E-X<>{5DRh~}kAUu%r0Qxk9 z2S=V0c`l5H422AX@ccId(hYJogddpg0C@+E5d;i`ypOOy(8Z6aHbdYn3=SZ_%j<;r zLHr^77IOt;E96y3HKYb|2yz(0Pb)tNsf0WP*#Nl}QUX~GSp!)MSqHfZk_wp%Nr&`< z^yivC05T9V2oed2g3N&67q5&I$SlZg2oIAXkjo%=(qpuQ1VLIsT0=fTB|e3G2KgNF z1>{S}SCDg%?;u>VxkP^h`4-ZZhs<{&+(ft~a((BP$SsvyXs8G&_v={P2SI)os6T|? z5ekN^!zki0FbH9O{78OC3Fr^umd!6T{Q>zIavt&z2#=BcYSh;detn8ZNFEvaZLKQE zA;|NP50LhUkdqL646fMNjlg{n{J5pD6;c7Y19BUr3{nosf$$iZ2bl($4l&R$qky9! z=P|tgS7~Pfn8ndG>b!zmf`mX`NN^7k5(pYBSkOYD6bbG@i$j8z0>xo~;$B>WyA_w< z8k`~lf)tngoE4I$q5bZ?-~T_I-JLUM&e$2*4ex7s3-93*42PjG3<iO0CBmUU$o8WH zbhNc%hUKCQRDg;gTm3Rn7Ro_E$P1Yv9car!LJM@GYjuYnAWOb`@CanlR1<=sikd&( zRy#b9%aTwEN<(JI0LdUZq=1!_X%(!4q>u!*zzS#&9Uw21f`Z@yp5OwnsghXu9ag|f zSOu$L4b|Iesx3$O7H+n}Hi!mU+Q_n{0tA69=F5WoK$QIG*m)R11^30ce$XG}_q^VM z{N|VZE|{#p<cH1nz+cF|hBxpQ?!%w(5UxmT%MS}Kf!Qzz=E8jFL1p%YUNC|CpW!Fy z4Sk?5RD~jxbO<sLAir}EM3@icbS@m@B47x}Pw2h?`Ay;RFaai7)wqeal;Kmjo(j`I z!3?Mh8_|~!3W2QK%7gsE+5qA{63P#l`9lB{hY}D7VbB%2!Fz1{03YEqd;uq(+rSP< zl5nh@l#Aq$0#ZV1NTUKL**wy?a+w+2Ad6}<$(AoXH<x)JFXRLH4aODlJIH4J7sCF~ z5At*03-j|sQK*dkQdkI!U_MNN;Sd3>pbAt2Z{({J)_@SGi@xI0X7wn41Gt626}Sf1 zAsTMLB9L=3IRnc8a>ONjs$ggWvMXo+E_A94Ajea3^7MdA_QF1p1EICh78*cxcuSgh z<nQ#Ji!YFlhtnvbg6S{=X2LA^9<pO(3PSmP<qL2Hj=>*r800u(7|3yjoG@gAv|t4r z$kz24JO&HwhHc^eXFDu~3GfRvhT4z?vV(4EoT0MJy$abWscghO!IX95dKd+<5PqiQ z@-um|FMkRL;GkTiQw+I@T=;MNNA|lvLc)xG;F<iE>KjVE5axj_m&d?(m;iktEv%=6 z@>AC<LAJoM<(2L18+Zrr;XXV7*=@@1a)<o1^&BpKhj}17N!dA$h7hO)m0<(c%3}Ty z;a*q+ZNUe2@q9PzfxWN~_QL@<2!FsKI1ESNC>(?1a6;PuBp0XPG(^D}I1A@sJIH3N zD^!GX;0u0G4E$jqMhGvc+B0wj4uKeai`tV-;3IepOW|*|O#V)zcsLSdXV?^^MoeU9 zD79lJ{K<GO_p%c-Yc75$*VCb=VVKlhN9Y8y+3Nzb!RrcQVE6$p1lhPrqF4-&(#Xck zG(tj=`3X8A)040pNUd~(?(z(-qvJX0M0PM?C`cxP#0w>4Nb$eaatOm<J3GymEnH?2 z2goeCo6N-5_68}jOn$XNW+~YyM1X7%#3x7}Xax-*C&;L&39`(|4KjPlEcX|>U%?}| z1~N%)0hz_fH>vi!yaiQvWgB0u0MBHZFZRfi-xDZ@wgt#dm<w`1cE|?C`!Fr=<lX~B zKBt;LotGnWn+H5W9w!6oHPU<hz!!=@VJHMXAgd-XC<+oM*8xyG-hBzK13@O^kszC! znJ@(+pdU1sWRtm&9rOek4^?3-jDVpaJ#Y|IfzluaDW%z7Gnm^-Pyxz75R?O%!^=ZO zs0;%^@;CC-vS`75QwV_?P)%88*xXadZd#JmP>W~S3N@|AWnHKPwV@W&giyeGIo{E> zZsPEJ!%xr)q$f$QlAb3$P<mn*bb-#$2|B9oGi<rS2XHwUB0vn3f((IS#=VqzI7lVR zwbaEJ7!ALG6jCZ+6#Q%;&&I*8FbSr?RG490OFq+qFkFj}^Owc22o}Num=AMdHq3(G zU=GZK<**Evz*3N9*JjuR8(=l8g7vTt*1{TygpF_!F2F9S)ty}IfNdZS?L3@?eXtky zz-~AL$3eX09@q~D;Q;&rhv2aK^*7e_B6=F4;2c~95tXEu;V4L!mq1!yR9pdhCf9$$ zeYgjA;SNZJt$^Eb3vR*<h=%K64zy}gsZ#g{@DQXmUxF0+DLjD~cns2sgco3z_c_<G z@C;sq-J;K}Qn7F04ZJh1KN5ZbCuE8cd<HKWGoQE!0NL_Mq(poHE7vl+%l%@Q1+tKq ziCh-a;+kX!mK3B!sR&a-3Xsf`6DBjR<^C^7$Gz;<(tzyb7L&h|I~OwR%eGEVJ>>Lb zF3)9sB$>)uDLrHY*#b(u19E}*${Y{^HK00FhLRxL$vjXDWEW5XWWkpg@_`?O%O+GN zUoR*Og+Lb1MM3(XH=#V2XZ|32Q`w^yH<0^EPytFoX($V2pd182d8i20peh7I6`gRs z8sgPLEh7G{7P28LE6DGl6xa0#>p~qPY(dxzn!=ADYp@@nA$$)7Nz;h12{gA*|DjwI z=V41iiD(0@p)d3S@rUL-Df6aGxDh<-K-ipcGE9Va+?OP5Pbk$bH5vvTp&8G+5O#)6 z&<najPgyl~2g$q#^ae9Sb42trpA!y2k;n{$!64}wMjAu89s-ZJ7lv~^%((xJa3;)v z>7Zbmgv00BDuplMYBor!1%&fqF3d5)d4!8#AuNWaAcJ4(ayi$(!!jd$Lg-<oH-g0H z<X(<v@_<<DAk<GKnbEmsQ628|j)>Rr6js3%h=Ch$9j?JuSPhrq0_=j7um<G0q?0P# z2|HjbtOa?#1vbMvh=dKW9yY=z=>!9?RNU5f9&7^<mirTgQE(bg!Ex9PqEzDKevff~ znD7`Jg(GkX{(ysU0QSQ^koMY3DDo1=zrm?1JZXfY_&l5g$@~n60cNK1EWWIHeU|5v zR^sE!%C+c|@Df~v__Y=;7D<)Ie`r>zJd=b{wI>W2Geb!e4W_Kzo7W<nSRo$p{7(?Q zqUV-{_P@!6w5Mbw2@_ViJin7j+-;sooHT(MFHIuP?!jHS4^rJCBONlne!U>HzgfD+ z2uW2xf`=fA1W6P>e8PQBl*JN0gTKHBUchtX`W4|z$bej7!Z#qYZ{ZVsgb(mp+W$So ze<+crK>X)lc<#iok;6*ai^?fx7H|VODw31VOpp=e*vJLs*vJ{uf$U@D6f`Nwb2(ND zPsM*)p;(SaQ-D~WnlL>`$;A3C<XatNZ2J*rCzOq`WFW_^A}dF(IYHtiLy6A;o*)@Y zyzByfp%O@~mzVJ$#El$y$-$Q-4uk*@i}OJ-@PoX@ePKdT;sb@C02GA$#<kpwjD+4$ z6pDZs$a6{OZ(Ns<GhoTII7ouBASZ8Spd3_$3UGo_i-A&7DY2ALN>vT2f|OE9C?&1} z!N$GFOMj7-PClr|bzP7>u^j$|NIT>pBB!dmm?fFSC+9X9G$X1h{0Q}-0W^ee&<Pqr zJ@_6vLJJ6mI$+A0@pX-7-x10)Q=eRC61(*0;a@Xs98V~IMy8@4h?h)EMW##><GCo5 z0+{h~FNVgy?_fL=qnkrxX$?_o3QK13OE1=&8HqB<OiCR;jg+P}&su_v%2tH!p`G!p zZM^4gjAtSv*Y(2rkEzV8dbyV>H!}|7+N^RhP^|9)ok3)~8le<Ij1WEDA%4kC9U?0Q zF!h9+Z6_JTZ+~fy_)4TEq%TM&W;IG5kQx!Crb4OKUeFWFrFX&_6+K4b!nKk~;(^cy z`oaL{2mN6%3<8-pb`h?G(GUTWW+u<Y(+-b!KZI*n7zRT@{LTpY8AgIE;YShvBJDq% zo8{cBfJGomCBt#>D~tu1?8Xqv9zhI|I2mCJ3FpFW7;ikALO2N~!UUKMQ=vKXozbJX zo@U(7l=iQ}!|8-G;5V2Bb6`Hqg9RW4iebxODJ+4-@H@zJ@iRMNBdh{>wiedFYU5sN zN}kIc6-l@O!q@Ykbs!NtU=wVG&0tpD7OuC$Hjw5KS@EV4N=-HAdVq~419_9t2jtvb z4*7aRR|o?+814x2mZLqil{a#sT*&J_dF>}v(~MAF1IpQ{ye5>_h4Na@7lOzr7on6~ z49Lp0yx!ZxeGBe0a4m=K2e|j5w0jAqZ|o!74^eO$PJtdz`yb@y1RR3WD3STb7mjm( z42p1ll<)}r0f#|k<+&(1$+ax$&3no8I=qCla0WJ_*9F6z;WqaYFRyLV%FCZLaFYjD z;02`SUfxa0sqrQ5lM^O`i(KD;%WwfiX%e2xA>TFbZG={M%eA}*`jhYpIC1@j@D+T9 z5AY7&K=^C^^A|jaSa=3cAqMWkIWR50%C#7A9>f4KPK@4!A@Pk8W6T0coXADPEimQf z8M?x?5{a-pFcV28cR;G?F-T_j;1N882Oy=p4-zK^2_i3{q>*dWU@=Z=LUjJUK(xPP zW(p*hNS=w+qCl>tU8R}inUqMHM5;D^oOvznFS4eNx5l+;>?IlhQiAtJgeVuqAHl4y zPh3kTrc#kNGn8khVN!#VR{Dh;0GpZ0b7_CkErpH$Jls?&mVN?hyHq5Wsue3Gv4o=3 zOeh`gTi4Rd<LeZIM2B=z>68*D*KWYe%W&;Yd`52Mt-J$xP4DCh*&!P&r2~5q=7by| zul(iJe;EwQO_;~H4&+|mG|7v%ydZB#3xIqoupb?zi1*@J(iJ7tKN+C?<(q_B5CS!z z3dn2Lk`Ms?Pz+@32ND*C5+J^!G@-nj4F*XgbAY_2m2VW*5nqY098`oLr~u`SYYD5% z_^$?4L7YlWLUAy42y26sssUkr<N8O!AD|&Lg2o`8Qyh`F;Wk{if|jt0XDtX5)=Yez z;gYB|LQ)z@B=_Q*P1oBl-ZRZr6L0!+c|k3*3WG(y6Ud8ed6pmKx#;U@Jd^a@U_XY5 z>+UY?--C-@kWf$*$}^c%WI{0~4^b|PM5#<LGO?J?B+Y)5oA;(+GFO=TC5<@&h1xjv zl}Je-0+P`nkP^lTG1GA`%GXmOnTVuT%t>e@*CSv!41=LC1R_A1Hz<<-@V}f*Ht$+% zTVTuVN?e)#**5h!nCyYo(#+e-$IGX<(`3~&(w4>jCRU_IpkL^=>Q&3O{vLrqFGTRj zY9a!b_i9C?&ChDHs+*Cv5KDDcWFyJyV^}JZotszgQTbaRn~=;Gz1|c{wLrkqNez%- zfU<11WlZYh#SAw=t&vCX)t4h^n1YpQ(6DM}^CyEU&s}V__;~q=0;l(?{4HCiBr-3~ zSI^Vf^~+VtXOotCZ(6&n9d$3%siQVmdof-nsPJz^>AE~bmq!xjKr(#gl|RkLg{?ng zaxuN6nvq#7Udny5&Cl{w)!uB&;s{Qvi$_*mH075bjk=0`-kN=>ld0jGZN3)0q`p17 zc5cy{BlJ`|yeDV<?#o=QioLyj{rr3N?A)OxIS0?ZzI;LE?QgY8D(>YyZJjN1GEG;D z6l(Qhn_HrlfpJ=8+&WCLwTj4~(jKuTwP-bwLFGSUD{1YMLbX0(3$d<Cp=uqqxmmZT zP{)rXs<4@lm!?s#ep*5FD&M2FtO*mVh@-aj$z5q)X<;=stvxH^RC~sx{$i6>@rgCy z;ICO|!diBED_H{6$<4L^$2z*2w85GVE6yL!u*+4e5pOSlmQ<;g=N1YOm0HDav1L-V zx7e~-ucuaFJPepgM-f|MS~qTRz4V?+BrBme#$sYJ6SK0bPh{t(t>zFzClV`nq*2~J z_Dml1WNTU$I0!Yi%(@!<W^OlxD2ViNJvTRNJmCx2mjdAiXJc~r@9O*m!Zev^%;K!d zZne2Nq9}w6nNOW9YrEyFbOniGdf(U8xLI2|tFa=v&RNems?qY()n3iLXSGm8R1!|! zMeW&YYwIZIqUV;z#WK8S<{^>jqB<nEsxIo}ew(kgzKe3+YjacMw$W0}TvV;Q)KVuG zbzqw<q>lC{nwa9qn{~~gPX4hZ_x0lc*m|ItVn^JMt#P|nfd(C<`v!<!r>REFrj?gU z3?JxuATDO1iwfONb#FjIs@tQ)uv+KChI__In16w~ukX$6$3i~+6c=;IMXi>!=SWMb zBf3xA-y?6~cKtG1WI-(ddt+#wShVr4c{i2`%xJmGlMKjO)2ol$DQc?p%6kVovZmLo zEoqHIb5~w@HX!3y+ouyFr8-yUuT{R*m)E7dft1V7X-RrDc!$l`u>lEjE6#I9Og=i~ zOd4H+7Id;@P{+}3r5W!d8E}BCF(ATYw)JMQ^pSsRRqtEetAtb4jJl5M>o1o|@@mse ztyZ=Eayg@_wbR!2YonapX&ag`v4W}AyKJ7;hndvKUA72EQCzU}m=s-0|M95q%<c38 ze=pwvIsyuF?#Ar5NVp@hJ)>*-rsHP}wOi;?^l>UEv+A~+N-0V=_dufV%%@L-=0$yu zlc+^Zc4CtDI@7xI$(Po+n9iBiE=fDaNLwOyK<%{7KS#w$EGH%>X~&HJG;4D%mq&3i z$1|(cd+5W@4DI*J=Sluo#YzX_B+|I4AS42cxUn)q$D|>S9|rgSD}S6sU1G$t`q8`R z|NLr5*0`9ibZALC3JG3%L}cq<+j4K<`G`1)#l$#>Nq0NSr|`#PALC;7x~Xe>;zow` zd3Kfk9+o<JvKu2sboB1oD|~nIC$D&6{-39wsu^P_ATJU!8`dj(x{xEA%hEWB(!|i} z5pM6_`_wxc&?YXXj;C5lT1Oisq_cWgnAv=D(sb0aslBhKx+&Vn89MekJ*|@Wp*1K@ zVgWH?S%<BqmlaFe<$hdDq^I)QN7}=N_65HW?)Wr$o-=V0SBVjuR|I!x+M`^)S#dGX zJ=H+cI+EwmZ7-NUzn^8yo%wMRjvQ*OX!kWFTDpErk<KII>o|#EV#KmPr}cU<zufEX zaWRc@sLztNlaY3EshC_Hf1NohP9oe$yZ7G2Wf?M8c@q~iF^3A-k7bLIkUC55Qnt_* z%ar4B5?gYpi2cl4hL`)7Vf(m%avVU?a4^<m1yz%rb~iQa0RGT;==iqBiYTOF4lwG+ z7g9+N(rKz@R67phPU{`C6$_YINOyEqV<Hzed9*Z$fi6pe5}fiR9wUBPQ{ZdORYb+2 z$XdrsrThcMwxX)+AGVniUXlB%-YV@O>hC+!$mEm%dGxcMnPWGThs<3*tfPq$SG9QB zoR}n@q2-B@X^E#Dy;T#^I(l*~e&bm3hk2{lI(po2L_7`mRuc}9%NTD}_9j+L^H$M^ za7=amRPbS2h+A&v7}1^bVZ&_Y=8b(%N^M?L#g5qmtOfnmgmX-?Lyp;smi1%yt%>Ld zLKy;Kd&;$5lmA#AlE`F5X6XWSGa~CvTK%AF59Sh-`AUp?fO>k&=H_1r37OX`FE29d zQuT_XkuWCcNyYV;A9g=YGAo*YBvEE4t@wYcQpZ_X<_}cej?=zAfoj)r>Z@F!USB63 z?y0bQ?$3oZGkm?sU<5HTGw0n9v)mT+xVjeOFE!b#q)L5)+6XVHf=<}l1~lQ_sWXye zT2EQG<I0g6My7az&PL4c!oOW9)xb^H;miEtG_aJqCOUpDrJPUVkxwA0tph@1zPz8% z;<cv3PjahNS~WY#8f$cEeKN8)@~wX&>GFd}7|V)lYT`+opJQ?vy(lSX-?}n9*&RPk z1$D}9w5+;$l0r8rrMym2f0xVZHT-k30&{9ET)z}ase1~Xr<`7Yr97%O>p!V_4J}5S z;h(Dkr))Ld2V$p8)^kQ~uej_}+9lfDqOG^@synBsU@F$_v@Im@0<makOH*D&oTd{Q zP2iqr(Y<Ba@<5$9ZOamnq@rHGm2a0hxMS9xZJJTuUNm(kBWCdU4aYswX3ZHFlc%C` zM3ISqMHLW5J+lJpC}HJ_Y7U{}J5tIx=}@CnrlOPhheh-%z`UjvRg6e>uc$oFFe>^Z zDJ?UldFFC0ucfJ+(NeYy1@`jye&eF*pJ8hE3TCy2M8D@7FI_FSW3Uxp?I*SAG?f@8 zw207Zty1OurGc#7WL(hx_?aDOxB6947tSz}N>@>3&yri^Dti4!Ts$<qP{`&BhFx@i zePxy@2__ngG)G`neH!nb<HVq`_dK2;Y;23@ntRT&X?U()o~2RhS5;}niv^v-i#4pS znw%r6cGdNQ?a7)a>GtNKH#Ot5rql<lucI3h(%2)Mn{@6x+%iiyM!M9t>MHu2tzho` zNMuD~bPe4B%vnC^v1_I?BaoC4$q-OARN?asv_zJ%3?`8%8KO7u+xG+7?`t$=vDK1` zCsJ)Ja0g$&(&pUDI;`~%`}fUBH!q3RQk^HfnTWWMPOTR0L%0_Q<dgFG<AT8%?N&<{ zo``?R!pM{|)GE4fL6)QYGh$hQ?q^tye<ZD}#w8c4HLda{42ZxzNp3&<5m4_@^>;C( zpd{jd64@98>g!)ahksS1B)2+)JMXx*Zo^8_8q4`HM$E2y9rjy4pPfLAIDcC6h&pzG zJ=ZyP?}DwS<(BfhXgg)iQd`+C+1m27(<Qct)9dKvTd?j+$`Ac7=;Kmz-izy~d6%f8 zMEZj0Cs(G1up2gC|3sz+*?S|A$kbq19ivKJwq>z0L&V;oikJtwT_&@)b@i^3Hs9%G zx5K+ia~rDS%@Dhgv|8$^OP3i<*7_>-74A(<bL*=hxljAOYJA03$(rYTHSdbe(~;ls zx);(0hNaI`qZ*oh^qp|shUywA9H9;Mk$YrCj|R1WPo7q*NNp?Mv7vIlikrhfH@ixn zD;ugw5^im%{vf1k-(9uUl<BDIHEv_nfNPA6NyXLLYc@BFHbG>u7HF*QUbBU`|M;Vx zP08OZKlBQ|B;Hi)puMiB`Bm&0RrBjM56e9jex0^6f-9<SO?ws;pSW&o=V;MX?+f48 zJyxrQbL1g37!z*irm9Xf3-zJR^?p90c8`~RlOD~Egv?g7$c*MHCK{)|2np%eV`|@= zk@Zt&>Al9ez)R(EgPir?zgyq&Z>_I((72fW|KHX<ZrYmVs=_HmYK%^}Q(^m7!pnzI z?>9y5OhZL!$0b?ZTi{-0%{e~hwc=^I^ermeJRhy9HGv`SS6b;cnbIp`c-3m(4b*A@ zRUDhE>$eylFA$I+TX}!0Rwwek?12E$BEUbylm0eyv~ycs!u4~`%DdN`9fw45FJD=2 zG$BS-jj5NPK3&p2t35H~EvE@=-B#bGVqT~x_c*+`c^l{1zMcAbn?9AVz4E?8|1I5K zRlmc1&Gu@r+_!A6=H0Vt=Kw#oXXZt5t8Rnqv=}w(2#Tfsnb&@8ua1kbz8rN^pYNbK z(Vh3~_Nx6|`szdV+g<u9UH3E_@_?Ql^lp)^V(`^;WuBDKOH&Np5yVK{yJol_l7Cdy zy=IKJld*4c{{snkB=Q_w@?Adnj<`yxiDE2yZmGJI(`xIeI?D!UODA1b-!Z**W{7$J zD}qMv)C=h*h2C}#>$D2;vw8)qUH5ISs>FSp!%>sci--O#WuL7_+8#VbYU8M6YOv~d zpF%t?pd0eerA?>L#ZJsXLQZsiiaC`J)5pbcnKnPlI$}pBVq`{T#i(cD=2(D)XutLO z#OnOT(oEOVYO4!#Vl^b)OLWznclpDJo+WM+-EaMRLU34>`;*m0s&2Y3TX<}GzquXH zu-qJ6f-?~x?|&R25W@z~$JeU_Gry;&-OVwZw9<EqCF@-vn|~49GR{gnaar3<?faAU zxf6TA2NX6v`zo1^4kxRlf**9*r|nHN$wYUFT1;v7f~0lSA*~d4j=T4^vkzM}j!WBy zy`X6Ci-e4zG?^<soU^+3p*V>|cZr(z1?&YMk~Y$??CP+#!9LTj?2Su%m>4PD-*$;w z+N<mZN$YrygiO>?^PRID$p5f*T-xO91x34qJ(*b6Ids973lq1NkCRArm#AqEW-lmd z8yWk#QTCPXo4b_k8<#fGU80sYoW0;9ESpGLt-fDJcnn<BU~*jA#q0$|Vha+o7YztG zzG?oX$o_E>efp}%M@#|R`s$0}@yWA4nBQ~pMLHShDEgG`{ut+bS@}P<`30E&99QLu zt+)5<SzJbx;iSX*>3ys3gN0K(KEISn#25tS`l~sQaq!jq>sADAEY&n;n$dT)JhUm` zzKTM*<%CKS!{Yu3wm4&L|J@mHW^~E)4mo2m^6z@pkHG^Gj*79JOr$^K3$^~daiDIE z$LYFl{rWVM<IocNDJ}hZ>=Ufng@i0$#{4kFR_S<!I!NHKWI{Tkc0aLY@jqt>__l7> zrTDpq-U#3-WpQ+a7;!w!yWaO+znp(URoqGmnU^1{G*204ZxN9Cc6=OAqTcRaUnD67 zr8-j%(qn#Ho4iq*4#PW3jF+6DIXMQYCQoUrqDV+<PHlXCT1dr~4>bvG&aXH~O+X@` zF%sF3u<k7SSIbHx&TA4rEJ~dE5R;3T_E-A5mTTqyk{HS)hm$i0sc6!=?=&R3jjt6D z8~kQUT-uw;<ry9^>0nj(8D<n7%$pxnwYpliX6rV$Ud5@ZKUjq#VR@x$zhyp3T%!~z z<sh~C8Ecdz5$dC;%n+fMtjw=3yX@PtljD3Tx=dX8B9wP5lLRRu-f)D_GL}hVT!b1N zi^qMS*2U5RU#nvTR;MBAK2NPBhpMd4Z6N`zhUuLp-JPj<b9y(Fb4%H=u-5KLj11V< zBQ}Nll<D$Zi;-G#(lxuO$me83y`O$g-bqF%=f4OW4^m~{6J{HsvcDiKJwnYRbTl2I zeTEgW{r3}@Dpfh9?R>PVm2!rDMAFn`ridYh?7K3bZ}dE9_MsgZ!0aPCA~S{WNc9xm z0aZroy&_M6s<-=wooCTcA+!y{55$OHaz8wJfcN{HJBg98z{J{lq$>RqyM`m-g2dfd zfulzDdD7QNOEIU8RNauUE*YtUUeWejk#t6K>5*E+XFE;X5SPmlweuxSdD#$1)hTSz zzLBG@#;Ib^ym-l0(iaJF&u(kBIoB-RzN8^R8ycB>tpu}(I|r$8WbR1V@trNDM(fKI zv)U|U)HNinZevvJJ3^yD97V_I`z}krz(#33cXF6R-DvG-G*u$HtC2<)Nv3YIasPK~ z{#&x*SmpIPUbCC_{<EatuqNQ2k{8G7c3ZGt`tIAGV$N?ZHvJc8HsUM`0=;~w*U#kY zzxr3*VNd9E>C4E=MLJq7lX)VGot;K_;j~x!-+C99b0Lzl5p?>u5v%!Ol*{<D8gst8 z18*U{FWuB4KQ+(VH@()}+S&R4tcrScyruK~v#jpp^%Cf+zK;E&Z{r3fK4#2&2EEZ3 zri^s5Fr$ljN@!$~NJlU;F;o0clA1sGf9{U%rzhzCIdl6bt3K7;j|Vq9>=V_U;v_6p zs)=e39;c4)MBT##%o$L5^0HrU%h`(VVgBii&6s~y>o+>vxBQyasdz6(fl2y0+xN%N zC8dV;S*NwN=AIJ{q68k&5kShk^pcplW7<vm^mJmJ-G=UfZ+pW3&eiayrk$2A>cdA~ za=T2{CzG~!1~tk%dSW2vvL_I~AESzXVlfe;S`mEpN2UibjgRY6(>^nu7-i%Yb<NLo zxUZgNDxa`Wv^i_1xYUm1-z)#xlm(}%S)Xy;|7-x$uYEhl$SjfWYNj<LGA5=&RsUiu z>Byq=1&(Xv;>i!UhH#Rky(*>rIhC6Cg+Z}escl~<+IFR$a&I|0HJRPd+GP6F(yZn? zPS+jH0>2Bj<}Q9$Tx)G@ADTMZ)NXcP$AB5S{wjan?Co*CG5dAR|8Q7r=y&W!LKaYI zeyaNV?$xaQP$5$jb3uif%Gqjnv(}oa##zYhN4{5-oqeHce&3A`&AirXp<ik5;M&hr zK_W2_3E4mHk4U@l=(4NB;w1ieT}E#IL#_#Qx_{fg%c`lBN~=3dO|se}10rVYm6GDi z#JQopZdr^X7w7v^Bj#}Iv%x`!j`ShMSp80#tp?gC;w&U&HBh8s!!$omEx9{Rf(BZP zg#QvGWG3Hdi&>N@>xWI6cG<Q&Z8l=ox7)P2WtT$BwHR%!dRTq3*|WG`ML-;N?Nw2I zo?Oi0uPMjt@CBgqvD>pqCy+c;YdfDDoLAv?d%J)pMjzOI=6=g%JtKc6k@2C(jJdic z&S&#`bjjUN{JwFV6FOgIPfgR(xdM{dL##zz)$k;CU-xf+esD`gCE@%dRy`(gPqY@a z_3ts|krYFX3@jH^DLFQ|t-A1(<1A6){_PryRog}GnR=2MCHBQCHmTi>(M;hps_@kI zB!)s&I+?w_WAhTdExH_7IJjK&rMg;uYNzabm#96-Xp3V=Naya{dU&7E3EQKQFkZV{ zAV!uJ)6X6oI-^5a3u65AeS=}-T?AyA)w4wSuVY59*kvfEEncbe$+2$pY}F(=J;Kfh zanfj2I(!M)l`60-g8p9G?3#J0nt((=VI*W3;J3N@_+QVTABlvl3+WLRiOECE5BEle z2WNUxn3!VvM?UtYDmuBnt;2JfUV^iEs<peR?sP{&dL(8PTBbr%puHp#GU%MIdsvGH z1)B%0NYo=nmJ%JWR6ez><}?RsNh$dnX{|=6Zl<tjHE-Nc{I2`t%cJssF8kxC6q>o( z!s3=Hn$kYR>bXp<PiYS^n$t0MrQXd}&F|FkSc9_9k@ux4<4m+%Q#Di3tTC!xDu&^T z)oNBMDsI{ueHadSbs;c(MYl%cn`B?c7u;*q=~Q^HL>o!lM4A0d?{5FnqvG`)_t=Gc z!Tg@qZ=1AICpo?`4vlZAx$!%k(QEZ?m{@0*b85<WTjh}6t&5v|UWKKxr?(tYL(<rD zSdH(OEPp#b)IV0rqJO89NqMHVPfuZfO{9HCl!fyt`F1NimGRHdzy{0Ch!{;Y-j`k; z%o?%l^_i~zx>AEjZ<r(-Lw|i^>byZUOUID++Mw#BC#<wVMPw&zvO#%fAndk5os|1w z8`MqY{HJfwJ5Lj*-_yN&H-1Q*rVYeMhwIs>X2Gz$y9dR^98;F`)W=OVHw(c#)xw!^ zk~UJUc13aiNcA)eVZ}(b)|oIt#+JV&wk|>{TbvZ@g&PiZ>Ou*PHy*3|F1STQk0F_` z*qb-0CYjKip!n|pW1$k*<@>c1|JVA?ssY)k9itWus~z8NzXTbW#nkIMVR6jZ)2axW z7!6{!0PhXTXA%cyRK?#-Fon$q_(p#*8svYiH;YkRvoj=`r`CSTE3>_pHTgC*IJ3R2 zb^bPWKeOG}xOcNI-=>PW*?s+!Z_}ObsTrNhv>*LmpY${zwVaqN^v<B%L&7XoHtL%l zZL}Ia;_q2o6Lt_I+8hV}SwQQI9V*D3S?ce--mE^o*ZVqF@6er{?P<lZd@0jcvRVu` z?qp=>Xunf0(yCg|i(Jh4y|__h=>FYewID0b+A!PlNlj#2e53sn*!C}3nC<d+v;Q$z zjY9rQH%(ZbMko80o%*mgolm0O*6<@n5BirfB(UA+=IUcMd$IUmaE6GN`}baL+Vh`{ zpK!2D-mU6*FefkCt^J)#M3=2KZawIAVG?aAGYt;9`X2qz@!qk4Q|h-^ca0cXZsX3U z?NM_)Sc?tct71Ip^2Y8xVCX*mRH@RdbQ@P3**%yPoSVojIE5Hzy87!gp}EHW!k<cN zF*5Tm+NZ+gv_I02xbfFAj}&R$wC@lCwPlWBsVbY_o>iUmq(@oyt60)l<HzuO394)k z`^<nu-VDki7-n~FsxMHg49qaUWwTpLF~V46>aXxa%ny<rJr3$0tR4UK)PH{9qh7kX z>_?o&9aIx|+3#3_ge+K`eto@vX@w7$bO~9pm_~&bv}bkSi<qqHc85>@c&mKl=7<^Z za*r#QT==_(st|$IING7_HP2=Db0mDZ=lu1(%HD%&buQK$0f+QKI<rpHi^eCXr9`oO zEy_$^?vVP3gtf*Y<(->w;vv<VFkk^GvSCW8(F?Bm=6JVPOQEe$b`#@5O#iDM&c|C7 zk$sgc`q+6z9#+S5Q`+)J^yb^$J>S)s@ah?nFkWjJFV<LK$?GlUn}_D%Gpbs7XdWZZ zJ&~^j<eMXG)n2f=+WqB2<c)bKcuP8oY}{IQ&s`=cRk{+IDcaH7I%j3iOEF#^(<N5q zXtdz{h%dP{39VPkza)~Hv@vg6UT>Zuc`;&S@k7IpJFYtCr5N9CR&z8oJE0f!`<pw@ zJc?Se+R%ZiVZ_MVdBw{&3%t)iI~=Ed$O-in?N+DbDzqUx9?yK#f!Pb{%gv5cs#`wB z+L=>&MGuL7+@|)~Kw0I=xgy=_juA6w+`E29z4yo$O2o+cFfH>tt&gp(k$-khci_FY zGS|~qCPpl~Sf=!kt|!XwGqrj<H9D<Q=TA6J423LlIkm`Q^^a2HkO`<9rI&nRw~U8+ z|2)Q5E1$NZYhc6#G+1$J&8^H;v>0tK*d|I{i>KdmQKc(j&l2$08GUR#bH1$3^^K7I zh%wH>&g$EsZqw2|NZon3Y%660Nc;CatC|(Sr5re`Ru;hI2Itft1?&ZLH#?`N__i}L zYq~Jw?Q6Bm;IlfnRn6+q>?tqkpRO*l<U6))o~JabxHv!FH(XF_3nEbs37Lso%o|p` z!Vxza&Bg-1<pnk8JM8IoL3!3E9C<;FZ9s}8q;QZTYHu~$$SuA(NFkjKx4G|v3Ms@S z8>Md4VSwLJ;e`lZsHpE4=hlmA!uP1jaZ&9NHNF@19<d|+pZOjZuCr0gSo<=q;zboJ z88*789EAznTvP#tS!Q&*sOA*5&vb;7QhIyH>*rzD#`osctGWNz`yt;GUQ`kF$YUCk zDUe(<C3n^Op37S!$>5W5G54a{QG}hF`KvG=D~uS|x#WO1nuJyu{VVuP>N_ucC(B#4 z+l%H+eOcGnZ&T_k7au6|;|&@y6EQC2l(XTm%s<Wcu7)1+k#`5W9$ytylo{@a%c^%# zeAqX(@C-KdF9=#)R?$T%LSGb1VN*Ao<$1sG_a26U6v6!JfB0op*c)%hpBaRD)19LX zBY#dZDgV_{SLMxu(FcDZMvg^}1bmtA)w+$GTo}6)Q<rY6n<J4w9|+KAlK=J32YjuQ zu1zaP>-~03g_hwj7_fNdHGN7Lb9iv7izlK#==qB~+<Z-~_n}@IUe|Xml@5LkEO)H? zXiY*}7k0fq&6nyJjesjf=sIKggGJf*+%g1;^T)%IU8W>l&AYB@A?v>u*-Xfu4v4YT zI+m$=oU(&P%#~q#-CR#Tm(7v17A9U%mO%P!jA~KIo=u(cwYvt`qjmR_HfY)-_W|Fr z1J)J;j3HNI(viWF)^{Ji9yK6DQ=@tJJkct<AB8U+t!hyTj%rAX+3D<aZa4RJ=${2@ z-K=@E>g-4Bb%<8;NZ}ZQq;%PAj!)qem;ZUhFpb<sBN2p?U0vLsS$2_Ak<?E5>TR7{ zCvShV%TWOfqE$p?a$gs%N*5#C5v^`kWLzFrU5nZM+%Fl%xQ#eGV^^c!@5E*CRP8KA z>EG}J#r7<YBscW#ayhf|N*~cy-XTjZk#)KoDz!hxW<x^e_*@xx&7ONPDn^sgJZJtJ zDhP=He<Y;fxx#}Byo~Xb>C=a|#^|U)jEtDRMG8G0STO4YBP}saZm4mRwi6Q4e#>6; z{khSM9Gf)>U-<wsf*9G{b_*J~Vo!J}`BqCTE8*lc{f4?GmaRu3JrZXh^|^E>Ywb0L z1lkYWP|g8pzlua=B!(>7pZ<#d*V1tkFO0NF()Zdj@3-KYMoa*If_YOlBds;VO|_?# z-8H+v(|`3xHKw$^xV7s|6<d<dN%lr7O3&~rPMgFimon6K$)S2<{x;)i*6v-lq|)-# z-bxOMRs#{V#%unp?(1kmsrXcvUrlYaDU}>J$-0GJ^0fp1hgzd&TBqMuAtmf??(c5v z$1dj`d#-&Kd0>&D5eN3478<J5@e<5DMnAUbc9;XexHU?v+6UURIvU*7-!*RU`>5`v z;7{d@YGx4Xp2OjCPcNiX;H%yXs*D+62*j&I$2}DjNNW#6QU=YV7ORt#>9s_EORu?& zvG<f`Nm_e063$528uS@`f0{#EW$6C-sWIR(o*P?n*OFuMv8(hYeEO<;DvY#7&1<cv zH>8`<pl+s*Gai4-V%)m!owVNI{_P=d47_jGjNbA7+YSD28R_O{`o9vk<6rb1VYmrH zi8x-})w}T<ZKr%SCn|lAo#841qho0Ez_;B-oD=`Mu774?U3pCnF3SMYGcyG23{u@X zb+;_NQSV8AZ!T?)FuT7wsv^pn(wUN=!^~aR<$vd~?yJ_Oy3(cZh)rkdBeEZ)UH@y? zSj)z!YZd53#<;*D6(sjY4(71_7guVOL9ZIAe!Z8NWuqje%YStwDy%$1>&R1m(U8XV zZR6OnH_iEt!5pVWFPb?(t%gfC?NYfbXceLvYYf}3vW7)^5&mOlH_Gq$hR4FB^0CU9 z*~ziW7{v2tqzv%bI`&!Ia5qPt*=UA4RlioWXZuIPo3ou6@wLAujQHAB%!q$keI#f# z_iwFa{Pf<JF^9GaC~eHpF>A`q&$zLHd>tU`ExfcbLt8GX8kHFvrh4PC|E(8#``x%- zxP$A3caupd?>$KPgc$L3MLsOM{HAb-Y*^VU$)66s=J)JTWqYX}RAxQF*V&F>YBiDX z!{tm1C(5_>b&!xhw&@sb4{;>&$2P{IsO)QX1_=hdM-{TrKQrc!kE+l`s=iTSRnTHQ z#L@E=b4}~aH!8LYNp7k#RY{`%IZ7tgr7A7fqNy5N^=pzsDyphIhvQg5-PspiT6WL< z5iO<5GQea>mh6K{TMZZP`aypg)Y-oO!j08C!jO<PDJ98GjI6^pM*aEekI)AJ#K>$& zTE7pf327bWkr4M^dWloi+CPIQYSpIILfsE)0ut7CAJp<{)LV}aDq2#6lR_$bZ~9Vy zH4m9|Ot(k&C;B?u)$ZpM_)!(Ej%@Hpy}8;(@Bd}}`sK2LlsYE=Ngq{cb@q1QAJl4* zJo-sLiFh$^RnYFbR@utRTNorwJ2<=eh@_-&tzj=%_NULf<vrT)7uvnsIOX?Qe9Ha7 zPqI;=jFQO+B&76>^X&~7GNJw%O{ezJ;*`&7a1C;G{-WF0Kd8`czasTzabei!_%bbo z%!YkY$3<`wf>KR+kLBLF`{sjz{}7z?MP&`K%Qx;dLwHHVc4nyDMyZY5x(D0%ZA+5Z zy;C>5Qi?6_NiI7>+@#hkTve8u_H6F=e$=h`c(J;*a{ZH|kTP0Y`_A3ZS~!UsS(EdQ zHc51Kms_P>IqYQ1NWPPm4oQPQCq_0!@6zPlm?>yptkrVQc*0)sX-!IG?B3+>rW5@{ z+g~PlwxXqLA-ph|`o5Mu#C>Bji}t#4Sn#;!Teqi+_f3{&zn6Mk%kE)xZ8yEAYv1d; zsiHOQ$pXGzuy32d`Qf<QbP!|1Ztjj%+B%%CCwOQzH^%1kzwfsl-=(x@E9!}>bEh2O zvqM^s9jJ6JW6!M$*R{9*n#Jn6Y)DO2<|f~e{F>FsR4Rm>v^juf1#4`s1CFG!XooM) zdp$2SvGJ|%<a-UR(>oPR%@3i{JS+VVmfJsd(-#aeqSmHXCq><VWUJ=Y$F-P3#!-dU zIFLwiu8`1Tvn0lGg>e{Rmf9?so`d0*q*Q-b)AnoT3DhM##`vo5MFT80m6(>BM<@a5 zR1-P-FdFPzO0132sp#)<LJgu+`iArhC+%F#*HOdSqV1wqUUBu``??l?`E33fd<*`T zfRnd?en@1d%G146(>%(aninTAftW1B>|9y3oTFihxp6VSJFAbRb>EGI?54^U`8|2Z zE7_mLNnBJ#8`-nuet|$X1R9JF8oIjr?ObsJ-Q=H9=YQVKROd$aUf~gpDjAr=OZXqR z^iBJ@SI;70U0b(t8r~?Nt;^x)W|j)Nm!G;R+gjJ3*XBuW-1pnMDSzGLv6nJ)FTSi+ zg@z}4><b*9*N88XB5=Wi6_vewjQF+J`(!9z$^A$W_ws>2=bRH<2k-3^zMvKl((^$5 zyl3&@bv`FUxp(D$`I)D4Ry8lUr#JVqr#$}f#=ZgVCLbNcy|}FUZR<BlIXrUT6z-*{ z;lGu<_+VenCGFZ5>DHoMo1UwNwJjQXcKeAxzt;`?{z<y1yQMZQe$BlYuq12!A^p9> zE0wl4)H85Y-Tz?xog#%ZSo9jHJ!(^rc4sEd9okCYx-Q#z_IdRZ)gxMU4dV&5aw*@1 zBIW${CyZ~?vs;TEJ=-`PuTXZ|hblkrsq|KN(T7K`|G2+S-6i$8m$7!I*U%2m*;-e- z+KdMoc(AzBk7L?aDenkvrZ>^E?wk8JwlB1}2K8v)A*@Z$UR}f56z$Tr^-rDK6zSQz z)8=eV>|K);Ogyq^k$93t#9R9mS2<ePJ=Eb;Nz!h%jkWKzs*iu!-PN2)c4u|&i#=y% g{T~z|rG7ywT(_UUmTdFbR`y!?H}4r|54!Px0F)0F7ytkO delta 76642 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 diff --git a/scripts/send:userOp.ts b/scripts/send:userOp.ts index b4901315b..18f6599e3 100644 --- a/scripts/send:userOp.ts +++ b/scripts/send:userOp.ts @@ -44,7 +44,7 @@ if ([chain, privateKey, bundlerUrl].every(Boolean) !== true) const account = privateKeyToAccount(`0x${privateKey}`) const recipient = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" // vitalik.eth const nexusClient = await createNexusClient({ - holder: account, + signer: account, chain, transport: http(), bundlerTransport: http(bundlerUrl), diff --git a/scripts/viem:bundler.ts b/scripts/viem:bundler.ts index b82e9f5e9..e1b0d3a5f 100644 --- a/scripts/viem:bundler.ts +++ b/scripts/viem:bundler.ts @@ -66,7 +66,7 @@ const publicClient = createPublicClient({ const main = async () => { const nexusAccount = await toNexusAccount({ - holder: account, + signer: account, chain, transport: http(), k1ValidatorAddress, @@ -79,11 +79,11 @@ const main = async () => { account: nexusAccount, ...(paymasterUrl ? { - paymaster: createBicoPaymasterClient({ - transport: http(paymasterUrl) - }), - paymasterContext: biconomyPaymasterContext - } + paymaster: createBicoPaymasterClient({ + transport: http(paymasterUrl) + }), + paymasterContext: biconomyPaymasterContext + } : undefined), userOperation: { estimateFeesPerGas: async (parameters) => { @@ -125,7 +125,8 @@ const main = async () => { const successCount = results.filter((result) => result.status === "fulfilled") console.log( - `running the ${usesAltoBundler ? "Alto" : "Bico"} bundler with ${successCount.length + `running the ${usesAltoBundler ? "Alto" : "Bico"} bundler with ${ + successCount.length } successful calls` ) diff --git a/src/sdk/account/toNexusAccount.ts b/src/sdk/account/toNexusAccount.ts index 059148b34..f667b099a 100644 --- a/src/sdk/account/toNexusAccount.ts +++ b/src/sdk/account/toNexusAccount.ts @@ -114,7 +114,7 @@ export type NexusSmartAccountImplementation = SmartAccountImplementation< encodeExecuteBatch: (calls: readonly Call[]) => Promise<Hex> getUserOpHash: (userOp: Partial<UserOperationStruct>) => Promise<Hex> setActiveValidationModule: (validationModule: BaseValidationModule) => void - getActiveValidationModule: () => BaseValidationModule, + getActiveValidationModule: () => BaseValidationModule factoryData: Hex factoryAddress: Address } @@ -351,8 +351,10 @@ export const toNexusAccount = async ( * @param newModule - The new module to set as active * @returns void */ - const setActiveValidationModule = (validationModule: BaseValidationModule): void => { - defaultedActiveModule = validationModule; + const setActiveValidationModule = ( + validationModule: BaseValidationModule + ): void => { + defaultedActiveModule = validationModule } /** @@ -364,7 +366,9 @@ export const toNexusAccount = async ( const signMessage = async ({ message }: { message: SignableMessage }): Promise<Hex> => { - const tempSignature = await defaultedActiveModule.getSigner().signMessage({ message }) + const tempSignature = await defaultedActiveModule + .getSigner() + .signMessage({ message }) const signature = encodePacked( ["address", "bytes"], diff --git a/src/sdk/clients/createBicoBundlerClient.ts b/src/sdk/clients/createBicoBundlerClient.ts index 8d8774251..e1c7fd09b 100644 --- a/src/sdk/clients/createBicoBundlerClient.ts +++ b/src/sdk/clients/createBicoBundlerClient.ts @@ -8,14 +8,14 @@ import { type BicoBundlerClientConfig = Omit<BundlerClientConfig, "transport"> & OneOf< | { - transport: Transport - } + transport: Transport + } | { - bundlerUrl: string - } + bundlerUrl: string + } | { - apiKey?: string - } + apiKey?: string + } > /** @@ -51,10 +51,11 @@ export const createBicoBundlerClient = ( : parameters.bundlerUrl ? http(parameters.bundlerUrl) : http( - // @ts-ignore: Type saftey provided by the if statement above - `https://bundler.biconomy.io/api/v3/${parameters.chain.id}/${parameters.apiKey ?? - "nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f14" - }` - ) + // @ts-ignore: Type saftey provided by the if statement above + `https://bundler.biconomy.io/api/v3/${parameters.chain.id}/${ + parameters.apiKey ?? + "nJPK7B3ru.dd7f7861-190d-41bd-af80-6877f74b8f14" + }` + ) }) } diff --git a/src/sdk/clients/createBicoPaymasterClient.ts b/src/sdk/clients/createBicoPaymasterClient.ts index 171468d41..2d23615af 100644 --- a/src/sdk/clients/createBicoPaymasterClient.ts +++ b/src/sdk/clients/createBicoPaymasterClient.ts @@ -16,15 +16,15 @@ import { type BicoPaymasterClientConfig = Omit<PaymasterClientConfig, "transport"> & OneOf< | { - transport?: Transport - } + transport?: Transport + } | { - paymasterUrl: string - } + paymasterUrl: string + } | { - chainId: number - apiKey: string - } + chainId: number + apiKey: string + } > /** @@ -74,6 +74,6 @@ export const createBicoPaymasterClient = ( : parameters.paymasterUrl ? http(parameters.paymasterUrl) : http( - `https://paymaster.biconomy.io/api/v3/${parameters.chainId}/${parameters.apiKey}` - ) + `https://paymaster.biconomy.io/api/v3/${parameters.chainId}/${parameters.apiKey}` + ) }) diff --git a/src/sdk/clients/createNexusClient.test.ts b/src/sdk/clients/createNexusClient.test.ts index 163574f9f..dd8762b7b 100644 --- a/src/sdk/clients/createNexusClient.test.ts +++ b/src/sdk/clients/createNexusClient.test.ts @@ -4,9 +4,7 @@ import { type Address, type Chain, encodeFunctionData, - parseEther, - encodeAbiParameters, - encodePacked + parseEther } from "viem" import { afterAll, beforeAll, describe, expect, test } from "vitest" import { CounterAbi } from "../../test/__contracts/abi" @@ -20,7 +18,6 @@ import { topUp } from "../../test/testUtils" import type { MasterClient, NetworkConfig } from "../../test/testUtils" -import { pKey } from "../../test/testUtils" import { addresses } from "../__contracts/addresses" import { ERROR_MESSAGES } from "../account/utils/Constants" import { makeInstallDataAndHash } from "../account/utils/Utils" @@ -116,7 +113,7 @@ describe("nexus.client", async () => { expect(addresses.every(Boolean)).to.be.true expect(addresses).toStrictEqual([ "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0xCAbC052f31414FfEbeA1094924dFeb0D17d85034" // Sender smart account + "0x9faF274EB7cc2D342d786Ad0995dB3c0d641446d" // Sender smart account ]) }) @@ -198,19 +195,19 @@ describe("nexus.client", async () => { test("should have correct fields", async () => { const chainId = 1 const chain = getChain(chainId) - ;[ - "blockExplorers", - "contracts", - "fees", - "formatters", - "id", - "name", - "nativeCurrency", - "rpcUrls", - "serializers" - ].every((field) => { - expect(chain).toHaveProperty(field) - }) + ;[ + "blockExplorers", + "contracts", + "fees", + "formatters", + "id", + "name", + "nativeCurrency", + "rpcUrls", + "serializers" + ].every((field) => { + expect(chain).toHaveProperty(field) + }) }) test("should throw an error, chain id not found", async () => { diff --git a/src/sdk/clients/createNexusClient.ts b/src/sdk/clients/createNexusClient.ts index fc5ad1447..a1a9930ea 100644 --- a/src/sdk/clients/createNexusClient.ts +++ b/src/sdk/clients/createNexusClient.ts @@ -51,34 +51,34 @@ export type NexusClient< ClientConfig<transport, chain, account, rpcSchema>, "cacheTime" | "chain" | "key" | "name" | "pollingInterval" | "rpcSchema" > & - BundlerActions<NexusAccount> & - Erc7579Actions<NexusAccount> & - SmartAccountActions<chain, NexusAccount> & { - /** - * The Nexus account associated with this client - */ - account: NexusAccount - /** - * Optional client for additional functionality - */ - client?: client | Client | undefined - /** - * Transport configuration for the bundler - */ - bundlerTransport?: BundlerClientConfig["transport"] - /** - * Optional paymaster configuration - */ - paymaster?: BundlerClientConfig["paymaster"] | undefined - /** - * Optional paymaster context - */ - paymasterContext?: BundlerClientConfig["paymasterContext"] | undefined - /** - * Optional user operation configuration - */ - userOperation?: BundlerClientConfig["userOperation"] | undefined - } + BundlerActions<NexusAccount> & + Erc7579Actions<NexusAccount> & + SmartAccountActions<chain, NexusAccount> & { + /** + * The Nexus account associated with this client + */ + account: NexusAccount + /** + * Optional client for additional functionality + */ + client?: client | Client | undefined + /** + * Transport configuration for the bundler + */ + bundlerTransport?: BundlerClientConfig["transport"] + /** + * Optional paymaster configuration + */ + paymaster?: BundlerClientConfig["paymaster"] | undefined + /** + * Optional paymaster context + */ + paymasterContext?: BundlerClientConfig["paymasterContext"] | undefined + /** + * Optional user operation configuration + */ + userOperation?: BundlerClientConfig["userOperation"] | undefined + } > /** @@ -109,31 +109,31 @@ export type NexusClientConfig< client?: client | Client | undefined /** Paymaster configuration. */ paymaster?: - | true - | { - /** Retrieves paymaster-related User Operation properties to be used for sending the User Operation. */ - getPaymasterData?: PaymasterActions["getPaymasterData"] | undefined - /** Retrieves paymaster-related User Operation properties to be used for gas estimation. */ - getPaymasterStubData?: - | PaymasterActions["getPaymasterStubData"] + | true + | { + /** Retrieves paymaster-related User Operation properties to be used for sending the User Operation. */ + getPaymasterData?: PaymasterActions["getPaymasterData"] | undefined + /** Retrieves paymaster-related User Operation properties to be used for gas estimation. */ + getPaymasterStubData?: + | PaymasterActions["getPaymasterStubData"] + | undefined + } | undefined - } - | undefined /** Paymaster context to pass to `getPaymasterData` and `getPaymasterStubData` calls. */ paymasterContext?: unknown /** User Operation configuration. */ userOperation?: - | { - /** Prepares fee properties for the User Operation request. */ - estimateFeesPerGas?: - | ((parameters: { - account: account | SmartAccount - bundlerClient: Client - userOperation: UserOperationRequest - }) => Promise<EstimateFeesPerGasReturnType<"eip1559">>) + | { + /** Prepares fee properties for the User Operation request. */ + estimateFeesPerGas?: + | ((parameters: { + account: account | SmartAccount + bundlerClient: Client + userOperation: UserOperationRequest + }) => Promise<EstimateFeesPerGasReturnType<"eip1559">>) + | undefined + } | undefined - } - | undefined /** Owner of the account. */ signer: UnknownSigner /** Index of the account. */ diff --git a/src/sdk/clients/decorators/erc7579/erc7579.decorators.test.ts b/src/sdk/clients/decorators/erc7579/erc7579.decorators.test.ts index 32b0b78d0..0b10195fd 100644 --- a/src/sdk/clients/decorators/erc7579/erc7579.decorators.test.ts +++ b/src/sdk/clients/decorators/erc7579/erc7579.decorators.test.ts @@ -1,6 +1,15 @@ import { textSpanOverlapsWith } from "typescript" -import { http, type Account, type Address, type Chain, isHex, encodeAbiParameters, encodePacked } from "viem" +import { + http, + type Account, + type Address, + type Chain, + encodeAbiParameters, + encodePacked, + isHex +} from "viem" import { afterAll, beforeAll, describe, expect, test } from "vitest" +import mockAddresses from "../../../../test/__contracts/mockAddresses" import { toNetwork } from "../../../../test/testSetup" import { type MasterClient, @@ -12,7 +21,6 @@ import { } from "../../../../test/testUtils" import contracts from "../../../__contracts" import { type NexusClient, createNexusClient } from "../../createNexusClient" -import mockAddresses from "../../../../test/__contracts/mockAddresses" describe("erc7579.decorators", async () => { let network: NetworkConfig @@ -100,7 +108,8 @@ describe("erc7579.decorators", async () => { }) test("should uninstall a module", async () => { - const [installedValidators, nextCursor] = await nexusClient.getInstalledValidators({}) + const [installedValidators, nextCursor] = + await nexusClient.getInstalledValidators({}) const prevModule = await nexusClient.getPreviousModule({ module: { diff --git a/src/sdk/clients/decorators/erc7579/getPreviousModule.ts b/src/sdk/clients/decorators/erc7579/getPreviousModule.ts index 50a8a7127..56496fc7c 100644 --- a/src/sdk/clients/decorators/erc7579/getPreviousModule.ts +++ b/src/sdk/clients/decorators/erc7579/getPreviousModule.ts @@ -1,20 +1,23 @@ -import { type Address, type Client, type Hex } from "viem" -import { type GetSmartAccountParameter, type SmartAccount } from "viem/account-abstraction" +import type { ModuleType } from "@rhinestone/module-sdk" +import type { Address, Client, Hex } from "viem" +import type { + GetSmartAccountParameter, + SmartAccount +} from "viem/account-abstraction" import { getAddress } from "viem/utils" import { AccountNotFoundError } from "../../../account/utils/AccountNotFound" -import { type ModuleType } from "@rhinestone/module-sdk" -const SENTINEL_ADDRESS = '0x0000000000000000000000000000000000000001' as const +const SENTINEL_ADDRESS = "0x0000000000000000000000000000000000000001" as const export type GetPreviousModuleParameters< - TSmartAccount extends SmartAccount | undefined + TSmartAccount extends SmartAccount | undefined > = GetSmartAccountParameter<TSmartAccount> & { - module: { - address: Address, - type: ModuleType - }, - installedValidators?: readonly Hex[], - installedExecutors?: readonly Hex[] + module: { + address: Address + type: ModuleType + } + installedValidators?: readonly Hex[] + installedExecutors?: readonly Hex[] } /** @@ -38,47 +41,47 @@ export type GetPreviousModuleParameters< * console.log(previousModuleAddress) // '0x...' */ export async function getPreviousModule< - TSmartAccount extends SmartAccount | undefined + TSmartAccount extends SmartAccount | undefined >( - client: Client, - parameters: GetPreviousModuleParameters<TSmartAccount> + client: Client, + parameters: GetPreviousModuleParameters<TSmartAccount> ): Promise<Hex> { - const { account: account_ = client.account, module } = parameters + const { account: account_ = client.account, module } = parameters - if (!account_) { - throw new AccountNotFoundError({ - docsPath: "/docs/actions/wallet/sendTransaction" - }) - } + if (!account_) { + throw new AccountNotFoundError({ + docsPath: "/docs/actions/wallet/sendTransaction" + }) + } - console.log(parameters, "parameters"); + console.log(parameters, "parameters") - let installedModules: Hex[] - if (module.type === "validator") { - if (!parameters.installedValidators) throw Error("installedValidators parameter is missing") - installedModules = [...parameters.installedValidators] - } else if (module.type === "executor") { - if (!parameters.installedExecutors) throw Error("installedExecutors parameter is missing") - installedModules = [...parameters.installedExecutors] - } else { - throw new Error(`Unknown module type ${module.type}`) - } + let installedModules: Hex[] + if (module.type === "validator") { + if (!parameters.installedValidators) + throw Error("installedValidators parameter is missing") + installedModules = [...parameters.installedValidators] + } else if (module.type === "executor") { + if (!parameters.installedExecutors) + throw Error("installedExecutors parameter is missing") + installedModules = [...parameters.installedExecutors] + } else { + throw new Error(`Unknown module type ${module.type}`) + } - return _getModuleByIndex(installedModules, module.address) + return _getModuleByIndex(installedModules, module.address) } function _getModuleByIndex( - installedModules: Hex[], - moduleAddress: Address + installedModules: Hex[], + moduleAddress: Address ): Hex { - const index = installedModules.indexOf(getAddress(moduleAddress)) - if (index === 0) { - return SENTINEL_ADDRESS - } - if (index > 0) { - return installedModules[index - 1] - } - throw new Error( - `Module ${moduleAddress} not found in installed modules` - ) -} \ No newline at end of file + const index = installedModules.indexOf(getAddress(moduleAddress)) + if (index === 0) { + return SENTINEL_ADDRESS + } + if (index > 0) { + return installedModules[index - 1] + } + throw new Error(`Module ${moduleAddress} not found in installed modules`) +} diff --git a/src/sdk/clients/decorators/erc7579/index.ts b/src/sdk/clients/decorators/erc7579/index.ts index 79947c008..c2fa12664 100644 --- a/src/sdk/clients/decorators/erc7579/index.ts +++ b/src/sdk/clients/decorators/erc7579/index.ts @@ -18,6 +18,10 @@ import { type GetInstalledValidatorsParameters, getInstalledValidators } from "./getInstalledValidators.js" +import { + type GetPreviousModuleParameters, + getPreviousModule +} from "./getPreviousModule.js" import { type InstallModuleParameters, installModule } from "./installModule.js" import { type InstallModulesParameters, @@ -44,10 +48,6 @@ import { type UninstallModulesParameters, uninstallModules } from "./uninstallModules.js" -import { - type GetPreviousModuleParameters, - getPreviousModule -} from "./getPreviousModule.js" export type Erc7579Actions<TSmartAccount extends SmartAccount | undefined> = { accountId: (args?: GetSmartAccountParameter<TSmartAccount>) => Promise<string> @@ -90,7 +90,9 @@ export type Erc7579Actions<TSmartAccount extends SmartAccount | undefined> = { getFallbackBySelector: ( args: GetFallbackBySelectorParameters<TSmartAccount> ) => Promise<[Hex, Hex]> - getPreviousModule: (args: GetPreviousModuleParameters<TSmartAccount>) => Promise<Hex> + getPreviousModule: ( + args: GetPreviousModuleParameters<TSmartAccount> + ) => Promise<Hex> } export type { diff --git a/src/sdk/clients/decorators/erc7579/installModule.ts b/src/sdk/clients/decorators/erc7579/installModule.ts index 95749a0e9..1c18024d2 100644 --- a/src/sdk/clients/decorators/erc7579/installModule.ts +++ b/src/sdk/clients/decorators/erc7579/installModule.ts @@ -1,4 +1,11 @@ -import { type Chain, type Client, type Hex, type Transport, encodeFunctionData, getAddress } from "viem" +import { + type Chain, + type Client, + type Hex, + type Transport, + encodeFunctionData, + getAddress +} from "viem" import { type GetSmartAccountParameter, type SmartAccount, diff --git a/src/sdk/clients/decorators/erc7579/uninstallFallback.ts b/src/sdk/clients/decorators/erc7579/uninstallFallback.ts index 7a4b6dc37..ba3c9787b 100644 --- a/src/sdk/clients/decorators/erc7579/uninstallFallback.ts +++ b/src/sdk/clients/decorators/erc7579/uninstallFallback.ts @@ -57,7 +57,7 @@ export async function uninstallFallback< maxFeePerGas, maxPriorityFeePerGas, nonce, - module: { address, context, type } + module: { address, data, type } } = parameters if (!account_) { @@ -101,7 +101,7 @@ export async function uninstallFallback< } ], functionName: "uninstallFallback", - args: [parseModuleTypeId(type), getAddress(address), context] + args: [parseModuleTypeId(type), getAddress(address), data ?? "0x"] }) } ], diff --git a/src/sdk/clients/decorators/smartAccount/account.decorators.test.ts b/src/sdk/clients/decorators/smartAccount/account.decorators.test.ts index 3dbf65e38..394f1738c 100644 --- a/src/sdk/clients/decorators/smartAccount/account.decorators.test.ts +++ b/src/sdk/clients/decorators/smartAccount/account.decorators.test.ts @@ -55,7 +55,7 @@ describe("account.decorators", async () => { const signedMessage = await nexusClient.signMessage({ message: "hello" }) expect(signedMessage).toEqual( - "0x08fca672878ad598fbdaddebfbb71dd9ba90b75af16ea9a3478698f695fd1401bfe27e9e4a7e8e3da94aa72b021125e31fa899cc573c48ea3fe1d4ab61a9db10c19032026e3ed2dbccba5a178235ac27f94504311c" + "0x6854688d3d9a87a33addd5f4deb5cea1b97fa5b7f16ea9a3478698f695fd1401bfe27e9e4a7e8e3da94aa72b021125e31fa899cc573c48ea3fe1d4ab61a9db10c19032026e3ed2dbccba5a178235ac27f94504311c" ) }) diff --git a/src/sdk/clients/decorators/smartAccount/sendTransaction.ts b/src/sdk/clients/decorators/smartAccount/sendTransaction.ts index 74da8efb1..b61e16a65 100644 --- a/src/sdk/clients/decorators/smartAccount/sendTransaction.ts +++ b/src/sdk/clients/decorators/smartAccount/sendTransaction.ts @@ -92,7 +92,10 @@ export async function sendTransaction< client, sendUserOperation, "sendUserOperation" - )({ ...args, signature } as SendUserOperationParameters<account, accountOverride>) + )({ ...args, signature } as SendUserOperationParameters< + account, + accountOverride + >) } const userOperationReceipt = await getAction( diff --git a/src/sdk/modules/executors/OwnableExecutor.ts b/src/sdk/modules/executors/OwnableExecutor.ts index fd9b94d9e..dee9b9d6e 100644 --- a/src/sdk/modules/executors/OwnableExecutor.ts +++ b/src/sdk/modules/executors/OwnableExecutor.ts @@ -34,7 +34,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { super(module, holder) this.nexusClient = nexusClient this.owners = owners - this.context = module.context ?? "0x" + this.data = module.data ?? "0x" this.address = address } @@ -46,7 +46,7 @@ export class OwnableExecutorModule extends BaseExecutionModule { const module: Module = { address: address, type: "executor", - context: context ?? "0x", + data: context ?? "0x", additionalContext: "0x" } const owners = await ( diff --git a/src/sdk/modules/executors/ownableExecutor.test.ts b/src/sdk/modules/executors/ownableExecutor.test.ts index ebe31a5c8..22118fe90 100644 --- a/src/sdk/modules/executors/ownableExecutor.test.ts +++ b/src/sdk/modules/executors/ownableExecutor.test.ts @@ -1,154 +1,167 @@ -import { TEST_CONTRACTS } from './../../../test/callDatas'; import { - type Account, - type Address, - type Chain, - encodePacked, - http, - parseAbi, - PublicClient, - toHex, - WalletClient, - zeroAddress, + getAddOwnableExecutorOwnerAction, + getExecuteOnOwnedAccountAction +} from "@rhinestone/module-sdk" +import { + http, + type Account, + type Address, + type Chain, + type PublicClient, + type WalletClient, + encodePacked, + parseAbi, + toHex, + zeroAddress } from "viem" +import { waitForTransactionReceipt } from "viem/actions" import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { createK1ValidatorModule } from "../.." import { toNetwork } from "../../../test/testSetup" import { - fundAndDeployClients, - getTestAccount, - killNetwork, - toTestClient + fundAndDeployClients, + getTestAccount, + killNetwork, + toTestClient } from "../../../test/testUtils" import type { MasterClient, NetworkConfig } from "../../../test/testUtils" import { - createNexusClient, - type NexusClient, + type NexusClient, + createNexusClient } from "../../clients/createNexusClient" -import { createK1ValidatorModule } from "../.." -import { K1ValidatorModule } from '../validators/K1ValidatorModule'; -import { getAddOwnableExecutorOwnerAction, getExecuteOnOwnedAccountAction } from '@rhinestone/module-sdk'; -import { waitForTransactionReceipt } from 'viem/actions'; +import type { K1ValidatorModule } from "../validators/K1ValidatorModule" +import { TEST_CONTRACTS } from "./../../../test/callDatas" describe("modules.ownableExecutor", async () => { - let network: NetworkConfig - let chain: Chain - let bundlerUrl: string - - // Test utils - let testClient: MasterClient - let account: Account - let nexusClient: NexusClient - let nexusAccountAddress: Address - let recipient: Account - let recipientAddress: Address - let k1ValidatorModule: K1ValidatorModule - beforeAll(async () => { - network = await toNetwork("FILE_LOCALHOST") - - chain = network.chain - bundlerUrl = network.bundlerUrl - account = getTestAccount(0) - recipient = getTestAccount(1) - recipientAddress = recipient.address - - testClient = toTestClient(chain, getTestAccount(5)) - - nexusClient = await createNexusClient({ - signer: account, - chain, - transport: http(), - bundlerTransport: http(bundlerUrl) - }) - - nexusAccountAddress = await nexusClient.account.getCounterFactualAddress() - await fundAndDeployClients(testClient, [nexusClient]) - - k1ValidatorModule = await createK1ValidatorModule(account) - nexusClient.account.setActiveValidationModule(k1ValidatorModule) + let network: NetworkConfig + let chain: Chain + let bundlerUrl: string + + // Test utils + let testClient: MasterClient + let account: Account + let nexusClient: NexusClient + let nexusAccountAddress: Address + let recipient: Account + let recipientAddress: Address + let k1ValidatorModule: K1ValidatorModule + beforeAll(async () => { + network = await toNetwork("FILE_LOCALHOST") + + chain = network.chain + bundlerUrl = network.bundlerUrl + account = getTestAccount(0) + recipient = getTestAccount(1) + recipientAddress = recipient.address + + testClient = toTestClient(chain, getTestAccount(5)) + + nexusClient = await createNexusClient({ + signer: account, + chain, + transport: http(), + bundlerTransport: http(bundlerUrl) }) - afterAll(async () => { - await killNetwork([network?.rpcPort, network?.bundlerPort]) - }) + nexusAccountAddress = await nexusClient.account.getCounterFactualAddress() + await fundAndDeployClients(testClient, [nexusClient]) - test("should install OwnableExecutor module", async () => { - const isInstalled = await nexusClient.isModuleInstalled({ - module: { - type: "executor", - address: TEST_CONTRACTS.OwnableExecutorSepolia.address - } - }) - expect(isInstalled).toBe(false) - - const userOpHash = await nexusClient.installModule({ - module: { - type: "executor", - address: TEST_CONTRACTS.OwnableExecutorSepolia.address, - data: encodePacked( - ["address"], - [account.address] - ) - } - }) - expect(userOpHash).toBeDefined() - const receipt = await nexusClient.waitForUserOperationReceipt({ hash: userOpHash }) - expect(receipt.success).toBe(true) - - const isInstalledAfter = await nexusClient.isModuleInstalled({ - module: { - type: "executor", - address: TEST_CONTRACTS.OwnableExecutorSepolia.address - } - }) - expect(isInstalledAfter).toBe(true) - }) + k1ValidatorModule = await createK1ValidatorModule(account) + nexusClient.account.setActiveValidationModule(k1ValidatorModule) + }) + + afterAll(async () => { + await killNetwork([network?.rpcPort, network?.bundlerPort]) + }) - test("should add another EOA as executor", async () => { - const execution = await getAddOwnableExecutorOwnerAction({ owner: recipientAddress, client: nexusClient.account.client as PublicClient, account: { address: nexusClient.account.address, type: "nexus", deployedOnChains: [] } }) - const userOpHash = await nexusClient.sendTransaction({ - calls: [ - { - to: TEST_CONTRACTS.OwnableExecutorSepolia.address, - data: execution.callData, - value: 0n - } - ] - }) - expect(userOpHash).toBeDefined() - const masterClient = nexusClient.account.client as MasterClient; - const owners = await masterClient.readContract({ - address: TEST_CONTRACTS.OwnableExecutorSepolia.address, - abi: parseAbi([ - "function getOwners(address account) external view returns (address[])" - ]), - functionName: 'getOwners', - args: [nexusClient.account.address] - }) - expect(owners).toContain(recipientAddress) + test("should install OwnableExecutor module", async () => { + const isInstalled = await nexusClient.isModuleInstalled({ + module: { + type: "executor", + address: TEST_CONTRACTS.OwnableExecutor.address + } + }) + expect(isInstalled).toBe(false) + + const userOpHash = await nexusClient.installModule({ + module: { + type: "executor", + address: TEST_CONTRACTS.OwnableExecutor.address, + data: encodePacked(["address"], [account.address]) + } }) + expect(userOpHash).toBeDefined() + const receipt = await nexusClient.waitForUserOperationReceipt({ + hash: userOpHash + }) + expect(receipt.success).toBe(true) - test("added executor EOA should execute user operation on smart account", async () => { - const execution = { - target: zeroAddress, - callData: toHex("0x"), - value: 0n + const isInstalledAfter = await nexusClient.isModuleInstalled({ + module: { + type: "executor", + address: TEST_CONTRACTS.OwnableExecutor.address + } + }) + expect(isInstalledAfter).toBe(true) + }) + + test("should add another EOA as executor", async () => { + const execution = await getAddOwnableExecutorOwnerAction({ + owner: recipientAddress, + client: nexusClient.account.client as PublicClient, + account: { + address: nexusClient.account.address, + type: "nexus", + deployedOnChains: [] + } + }) + const userOpHash = await nexusClient.sendTransaction({ + calls: [ + { + to: TEST_CONTRACTS.OwnableExecutor.address, + data: execution.callData, + value: 0n } + ] + }) + expect(userOpHash).toBeDefined() + const masterClient = nexusClient.account.client as MasterClient + const owners = await masterClient.readContract({ + address: TEST_CONTRACTS.OwnableExecutor.address, + abi: parseAbi([ + "function getOwners(address account) external view returns (address[])" + ]), + functionName: "getOwners", + args: [nexusClient.account.address] + }) + expect(owners).toContain(recipientAddress) + }) + + test("added executor EOA should execute user operation on smart account", async () => { + const execution = { + target: zeroAddress, + callData: toHex("0x"), + value: 0n + } + + const executeOnOwnedAccountExecution = getExecuteOnOwnedAccountAction({ + execution, + ownedAccount: nexusClient.account.address + }) - const executeOnOwnedAccountExecution = getExecuteOnOwnedAccountAction({ - execution, - ownedAccount: nexusClient.account.address - }) - - const client = nexusClient.account.client as WalletClient; - const hash = await client.sendTransaction({ - account: recipient, - to: TEST_CONTRACTS.OwnableExecutorSepolia.address, - data: executeOnOwnedAccountExecution.callData, - chain, - value: 0n - }) - - const receipt = await waitForTransactionReceipt(nexusClient.account.client as PublicClient, { hash }) - expect(receipt.status).toBe("success") + const client = nexusClient.account.client as WalletClient + const hash = await client.sendTransaction({ + account: recipient, + to: TEST_CONTRACTS.OwnableExecutor.address, + data: executeOnOwnedAccountExecution.callData, + chain, + value: 0n }) -}) \ No newline at end of file + + const receipt = await waitForTransactionReceipt( + nexusClient.account.client as PublicClient, + { hash } + ) + expect(receipt.status).toBe("success") + }) +}) diff --git a/src/sdk/modules/utils/Types.ts b/src/sdk/modules/utils/Types.ts index f6daab9d3..e4558ddab 100644 --- a/src/sdk/modules/utils/Types.ts +++ b/src/sdk/modules/utils/Types.ts @@ -66,7 +66,7 @@ export type ModuleInfo = { batchSessionParams?: SessionParams[] } -export interface SendUserOpParams extends ModuleInfo { } +export interface SendUserOpParams extends ModuleInfo {} export type SignerData = { /** This is not the public as provided by viem, key but address for the given pvKey */ diff --git a/src/sdk/modules/validators/OwnableValidator.ts b/src/sdk/modules/validators/OwnableValidator.ts index 81af3aa3d..1f4b39b19 100644 --- a/src/sdk/modules/validators/OwnableValidator.ts +++ b/src/sdk/modules/validators/OwnableValidator.ts @@ -1,242 +1,250 @@ import { - type Address, - decodeAbiParameters, - encodeAbiParameters, - encodePacked, - parseAbi, - parseAbiParameters + type Address, + decodeAbiParameters, + encodeAbiParameters, + encodePacked, + parseAbi, + parseAbiParameters } from "viem" -import type { Hex, PublicClient } from "viem" -import { type NexusAccount, type Signer, toSigner } from "../../account/index.js" +import type { Account, Hex, PublicClient } from "viem" +import { + type NexusAccount, + type Signer, + toSigner +} from "../../account/index.js" +import type { Module } from "../../clients/index.js" import { BaseValidationModule } from "../base/BaseValidationModule.js" -import { type Module } from "../../clients/index.js" export class OwnableValidator extends BaseValidationModule { - public owners: Address[] - public threshold: number - - private constructor( - moduleConfig: Module, - signer: Signer - ) { - if (!moduleConfig.data) { - throw new Error("Module data is required") - } - const moduleData = decodeAbiParameters( - parseAbiParameters("uint256 threshold, address[] owners"), - moduleConfig.data - ) - super(moduleConfig, signer) - this.threshold = Number(moduleData[0]) - this.owners = [...moduleData[1]] as Address[] - this.signer = signer - this.address = moduleConfig.address - } - - public static async create({ - smartAccount, - address, - owners, - threshold, - hook - }: { - smartAccount: NexusAccount, - address: Address, - owners?: Address[], - threshold?: number, - hook?: Address - }): Promise<OwnableValidator> { - let moduleInfo: Module - let installData: Hex - const client = smartAccount.client as PublicClient; - const isInitialized = await client.readContract({ - address, // @todo: change to real module address - abi: parseAbi([ - "function isInitialized(address smartAccount) public view returns (bool)" - ]), - functionName: "isInitialized", - args: [await smartAccount.getAddress()] - }) - if (isInitialized) { - const _owners = await client.readContract({ - address, // @todo: change to real module address - abi: parseAbi([ - "function getOwners(address account) external view returns (address[])" - ]), - functionName: "getOwners", - args: [await smartAccount.getAddress()] - }) - const _threshold = await client.readContract({ - address, // @todo: change to real module address - abi: parseAbi([ - "function threshold(address account) external view returns (uint256)" - ]), - functionName: "threshold", - args: [await smartAccount.getAddress()] - }) - installData = encodeAbiParameters( - [ - { name: "threshold", type: "uint256" }, - { name: "owners", type: "address[]" } - ], - [BigInt(_threshold), _owners] - ) - } else { - if (!owners) { - throw new Error("Owners are required if the module is not yet initialized") - } - installData = encodeAbiParameters( - [ - { name: "threshold", type: "uint256" }, - { name: "owners", type: "address[]" } - ], - [BigInt(threshold ?? owners.length), owners.sort()] - ) - } - moduleInfo = { - address, // @todo: change to real module address - type: "validator", - data: installData, - additionalContext: "0x", - hook - } - const account = smartAccount.client.account - const instance = new OwnableValidator(moduleInfo, await toSigner({ signer: account! })) - return instance - } + public owners: Address[] + public threshold: number - // /** - // * Sets the threshold locally on the instance without executing a transaction. - // * This method should be used when the threshold has been updated on-chain but the local instance hasn't been updated. - // * - // * @param threshold The new threshold value - // */ - // public setLocalThreshold(threshold: number): void { - // if (threshold <= 0) { - // throw new Error("Threshold must be a positive number") - // } - // this.threshold = threshold - // } - - // public async setThresholdUserOp(threshold: number): Promise<Partial<UserOperationStruct>> { - // const calldata = encodeFunctionData({ - // functionName: "setThreshold", - // abi: parseAbi(["function setThreshold(uint256 _threshold) external"]), - // args: [BigInt(threshold)] - // }) - - // const transaction = { - // to: this.address, - // data: calldata, - // value: 0n - // } - // const userOp = - // return userOp - // } - - // public async removeOwnerUserOp(owner: Address): Promise<Partial<UserOperationStruct>> { - // const owners = await this.getOwners() - // let prevOwner: Address - - // const currentOwnerIndex = owners.findIndex((o: Address) => o === owner) - - // if (currentOwnerIndex === -1) { - // throw new Error("Owner not found") - // } - // if (currentOwnerIndex === 0) { - // prevOwner = SENTINEL_ADDRESS - // } else { - // prevOwner = getAddress(owners[currentOwnerIndex - 1]) - // } - - // const calldata = encodeFunctionData({ - // functionName: "removeOwner", - // abi: parseAbi(["function removeOwner(address prevOwner, address owner)"]), - // args: [prevOwner, owner] - // }) - - // const transaction = { - // to: this.address, - // data: calldata, - // value: 0n - // } - - // const userOp = await this.smartAccount. - // return userOp - // } - - // public async addOwnerUserOp(owner: Address): Promise<Partial<UserOperationStruct>> { - // const calldata = encodeFunctionData({ - // functionName: "addOwner", - // abi: parseAbi(["function addOwner(address owner)"]), - // args: [owner] - // }) - - // const transaction = { - // to: this.address, - // data: calldata, - // value: 0n - // } - // const userOp = await this.smartAccount.buildUserOp([transaction]); - // return userOp - // } - - // public async getOwners(): Promise<Address[]> { - // try { - // const client = this.smartAccount.client as MasterClient; - // const owners = (await client.readContract({ - // address: this.address, - // abi: parseAbi([ - // "function getOwners(address account) external view returns (address[])" - // ]), - // functionName: "getOwners", - // args: [await this.smartAccount.getAccountAddress()] - // })) as Address[] - - // return owners - // } catch (err) { - // console.error(err) - // return [] - // } - // } - - // public async isOwner(address: Address): Promise<boolean> { - // const owners = await this.getOwners(); - // return owners.includes(address); - // } - - public override getDummySignature(): Hex { - const dummySignature = "0xe8b94748580ca0b4993c9a1b86b5be851bfc076ff5ce3a1ff65bf16392acfcb800f9b4f1aef1555c7fce5599fffb17e7c635502154a0333ba21f3ae491839af51c"; - const signatures = Array(this.threshold).fill(dummySignature); - const types = Array(this.threshold).fill('bytes'); - return encodePacked(types, signatures) as Hex; + private constructor(moduleConfig: Module, signer: Signer) { + if (!moduleConfig.data) { + throw new Error("Module data is required") } - - override async signUserOpHash(userOpHash: string): Promise<Hex> { - // this won't be valid for multisig - const signer = this.signer; - return await signer.signMessage({ message: { raw: userOpHash as Hex } }) as Hex; + const moduleData = decodeAbiParameters( + parseAbiParameters("uint256 threshold, address[] owners"), + moduleConfig.data + ) + super(moduleConfig, signer) + this.threshold = Number(moduleData[0]) + this.owners = [...moduleData[1]] as Address[] + this.signer = signer + this.address = moduleConfig.address + } + + public static async create({ + smartAccount, + address, + owners, + threshold, + hook + }: { + smartAccount: NexusAccount + address: Address + owners?: Address[] + threshold?: number + hook?: Address + }): Promise<OwnableValidator> { + let installData: Hex + const client = smartAccount.client as PublicClient + const isInitialized = await client.readContract({ + address, // @todo: change to real module address + abi: parseAbi([ + "function isInitialized(address smartAccount) public view returns (bool)" + ]), + functionName: "isInitialized", + args: [await smartAccount.getAddress()] + }) + if (isInitialized) { + const _owners = await client.readContract({ + address, // @todo: change to real module address + abi: parseAbi([ + "function getOwners(address account) external view returns (address[])" + ]), + functionName: "getOwners", + args: [await smartAccount.getAddress()] + }) + const _threshold = await client.readContract({ + address, // @todo: change to real module address + abi: parseAbi([ + "function threshold(address account) external view returns (uint256)" + ]), + functionName: "threshold", + args: [await smartAccount.getAddress()] + }) + installData = encodeAbiParameters( + [ + { name: "threshold", type: "uint256" }, + { name: "owners", type: "address[]" } + ], + [BigInt(_threshold), _owners] + ) + } else { + if (!owners) { + throw new Error( + "Owners are required if the module is not yet initialized" + ) + } + installData = encodeAbiParameters( + [ + { name: "threshold", type: "uint256" }, + { name: "owners", type: "address[]" } + ], + [BigInt(threshold ?? owners.length), owners.sort()] + ) } - - // private isMultiSig(): boolean { - // return this.threshold > 1; - // } - - public getMultiSignature(signatures: Hex[]): Hex { - const types = Array(signatures.length).fill('bytes'); - return encodePacked(types, signatures) as Hex; + const moduleInfo: Module = { + address, // @todo: change to real module address + type: "validator", + data: installData, + additionalContext: "0x", + hook } - - // public async isModuleInitialized(): Promise<boolean> { - // const client = this.smartAccount.client as MasterClient; - // const isInitialized = await client.readContract({ - // address: this.address, - // abi: parseAbi([ - // "function isInitialized(address account) external view returns (bool)" - // ]), - // functionName: "isInitialized", - // args: [await this.smartAccount.getAccountAddress()] - // }) - // return isInitialized - // } + const account = smartAccount.client.account as Account + const instance = new OwnableValidator( + moduleInfo, + await toSigner({ signer: account }) + ) + return instance + } + + // /** + // * Sets the threshold locally on the instance without executing a transaction. + // * This method should be used when the threshold has been updated on-chain but the local instance hasn't been updated. + // * + // * @param threshold The new threshold value + // */ + // public setLocalThreshold(threshold: number): void { + // if (threshold <= 0) { + // throw new Error("Threshold must be a positive number") + // } + // this.threshold = threshold + // } + + // public async setThresholdUserOp(threshold: number): Promise<Partial<UserOperationStruct>> { + // const calldata = encodeFunctionData({ + // functionName: "setThreshold", + // abi: parseAbi(["function setThreshold(uint256 _threshold) external"]), + // args: [BigInt(threshold)] + // }) + + // const transaction = { + // to: this.address, + // data: calldata, + // value: 0n + // } + // const userOp = + // return userOp + // } + + // public async removeOwnerUserOp(owner: Address): Promise<Partial<UserOperationStruct>> { + // const owners = await this.getOwners() + // let prevOwner: Address + + // const currentOwnerIndex = owners.findIndex((o: Address) => o === owner) + + // if (currentOwnerIndex === -1) { + // throw new Error("Owner not found") + // } + // if (currentOwnerIndex === 0) { + // prevOwner = SENTINEL_ADDRESS + // } else { + // prevOwner = getAddress(owners[currentOwnerIndex - 1]) + // } + + // const calldata = encodeFunctionData({ + // functionName: "removeOwner", + // abi: parseAbi(["function removeOwner(address prevOwner, address owner)"]), + // args: [prevOwner, owner] + // }) + + // const transaction = { + // to: this.address, + // data: calldata, + // value: 0n + // } + + // const userOp = await this.smartAccount. + // return userOp + // } + + // public async addOwnerUserOp(owner: Address): Promise<Partial<UserOperationStruct>> { + // const calldata = encodeFunctionData({ + // functionName: "addOwner", + // abi: parseAbi(["function addOwner(address owner)"]), + // args: [owner] + // }) + + // const transaction = { + // to: this.address, + // data: calldata, + // value: 0n + // } + // const userOp = await this.smartAccount.buildUserOp([transaction]); + // return userOp + // } + + // public async getOwners(): Promise<Address[]> { + // try { + // const client = this.smartAccount.client as MasterClient; + // const owners = (await client.readContract({ + // address: this.address, + // abi: parseAbi([ + // "function getOwners(address account) external view returns (address[])" + // ]), + // functionName: "getOwners", + // args: [await this.smartAccount.getAccountAddress()] + // })) as Address[] + + // return owners + // } catch (err) { + // console.error(err) + // return [] + // } + // } + + // public async isOwner(address: Address): Promise<boolean> { + // const owners = await this.getOwners(); + // return owners.includes(address); + // } + + public override getDummySignature(): Hex { + const dummySignature = + "0xe8b94748580ca0b4993c9a1b86b5be851bfc076ff5ce3a1ff65bf16392acfcb800f9b4f1aef1555c7fce5599fffb17e7c635502154a0333ba21f3ae491839af51c" + const signatures = Array(this.threshold).fill(dummySignature) + const types = Array(this.threshold).fill("bytes") + return encodePacked(types, signatures) as Hex + } + + override async signUserOpHash(userOpHash: string): Promise<Hex> { + // this won't be valid for multisig + const signer = this.signer + return (await signer.signMessage({ + message: { raw: userOpHash as Hex } + })) as Hex + } + + // private isMultiSig(): boolean { + // return this.threshold > 1; + // } + + public getMultiSignature(signatures: Hex[]): Hex { + const types = Array(signatures.length).fill("bytes") + return encodePacked(types, signatures) as Hex + } + + // public async isModuleInitialized(): Promise<boolean> { + // const client = this.smartAccount.client as MasterClient; + // const isInitialized = await client.readContract({ + // address: this.address, + // abi: parseAbi([ + // "function isInitialized(address account) external view returns (bool)" + // ]), + // functionName: "isInitialized", + // args: [await this.smartAccount.getAccountAddress()] + // }) + // return isInitialized + // } } diff --git a/src/sdk/modules/validators/k1Validator.test.ts b/src/sdk/modules/validators/k1Validator.test.ts index cb63b291c..24d9b487d 100644 --- a/src/sdk/modules/validators/k1Validator.test.ts +++ b/src/sdk/modules/validators/k1Validator.test.ts @@ -1,4 +1,11 @@ -import { encodeAbiParameters, encodePacked, http, type Account, type Address, type Chain } from "viem" +import { + http, + type Account, + type Address, + type Chain, + encodeAbiParameters, + encodePacked +} from "viem" import { afterAll, beforeAll, describe, expect, test } from "vitest" import { toNetwork } from "../../../test/testSetup" import { diff --git a/src/sdk/modules/validators/ownableValidator.test.ts b/src/sdk/modules/validators/ownableValidator.test.ts index a5bde58ff..6a6b6acc9 100644 --- a/src/sdk/modules/validators/ownableValidator.test.ts +++ b/src/sdk/modules/validators/ownableValidator.test.ts @@ -1,21 +1,24 @@ -import { TEST_CONTRACTS } from './../../../test/callDatas'; -import { - getAddOwnableValidatorOwnerAction, -} from "@rhinestone/module-sdk" +import { getAddOwnableValidatorOwnerAction } from "@rhinestone/module-sdk" import { http, type Account, type Address, type Chain, + type Hex, type PublicClient, - encodePacked, encodeAbiParameters, encodeFunctionData, - parseAbi, - zeroAddress, + encodePacked, getAddress, + parseAbi, + zeroAddress } from "viem" import { afterAll, beforeAll, describe, expect, test } from "vitest" +import { + createK1ValidatorModule, + createOwnableValidatorModule, + toSigner +} from "../.." import { toNetwork } from "../../../test/testSetup" import { fundAndDeployClients, @@ -26,13 +29,13 @@ import { import type { MasterClient, NetworkConfig } from "../../../test/testUtils" import addresses from "../../__contracts/addresses" import { - createNexusClient, type NexusClient, + createNexusClient } from "../../clients/createNexusClient" -import { createK1ValidatorModule, createOwnableValidatorModule, toSigner } from "../.." -import { type OwnableValidator } from './OwnableValidator'; -import { parseModuleTypeId } from '../../clients/decorators/erc7579/supportsModule'; -import { K1ValidatorModule } from './K1ValidatorModule'; +import { parseModuleTypeId } from "../../clients/decorators/erc7579/supportsModule" +import { TEST_CONTRACTS } from "./../../../test/callDatas" +import type { K1ValidatorModule } from "./K1ValidatorModule" +import type { OwnableValidator } from "./OwnableValidator" describe("modules.ownableValidator", async () => { let network: NetworkConfig @@ -76,7 +79,9 @@ describe("modules.ownableValidator", async () => { threshold: 2 }) - k1ValidatorModule = await createK1ValidatorModule(account) + k1ValidatorModule = await createK1ValidatorModule( + await toSigner({ signer: account }) + ) }) afterAll(async () => { @@ -106,7 +111,7 @@ describe("modules.ownableValidator", async () => { test("should add accountTwo as owner", async () => { const addOwnerExecution = await getAddOwnableValidatorOwnerAction({ owner: recipient.address, - client: nexusClient.client as PublicClient, + client: nexusClient.account.client as PublicClient, account: { address: nexusClient.account.address, type: "nexus", @@ -124,15 +129,21 @@ describe("modules.ownableValidator", async () => { ] }) expect(transactionHash).toBeDefined() - const receipt = await testClient.waitForTransactionReceipt({ hash: transactionHash }) + const receipt = await testClient.waitForTransactionReceipt({ + hash: transactionHash + }) expect(receipt.status).toBe("success") } else { throw new Error("Failed to get add owner execution") } + console.log(testClient, "testClient") + const owners = await testClient.readContract({ address: TEST_CONTRACTS.OwnableValidator.address, - abi: parseAbi(["function getOwners(address account) external view returns (address[] ownersArray)"]), + abi: parseAbi([ + "function getOwners(address account) external view returns (address[] ownersArray)" + ]), functionName: "getOwners", args: [nexusClient.account.address] }) @@ -143,8 +154,8 @@ describe("modules.ownableValidator", async () => { const isInstalled = await nexusClient.isModuleInstalled({ module: { address: TEST_CONTRACTS.OwnableValidator.address, - type: "validator", - }, + type: "validator" + } }) expect(isInstalled).toBe(true) // Set threshold @@ -165,14 +176,18 @@ describe("modules.ownableValidator", async () => { }, 90000) test("should need 2 signatures to send a user operation", async () => { - const activeValidationModule = nexusClient.account.getActiveValidationModule() + const activeValidationModule = + nexusClient.account.getActiveValidationModule() expect(activeValidationModule.address).toBe(addresses.K1Validator) nexusClient.account.setActiveValidationModule(ownableValidatorModule) - const activeValidationModuleAfter = nexusClient.account.getActiveValidationModule() - expect(activeValidationModuleAfter.address).toBe(TEST_CONTRACTS.OwnableValidator.address) + const activeValidationModuleAfter = + nexusClient.account.getActiveValidationModule() + expect(activeValidationModuleAfter.address).toBe( + TEST_CONTRACTS.OwnableValidator.address + ) - let dummyUserOp = await nexusClient.prepareUserOperation({ + const dummyUserOp = await nexusClient.prepareUserOperation({ calls: [ { to: zeroAddress, @@ -182,12 +197,19 @@ describe("modules.ownableValidator", async () => { to: zeroAddress, data: "0x" } - ], + ] }) const dummyUserOpHash = await nexusClient.account.getUserOpHash(dummyUserOp) - const signature1 = await account?.signMessage?.({ message: { raw: dummyUserOpHash } }) - const signature2 = await recipient?.signMessage?.({ message: { raw: dummyUserOpHash } }) - const multiSignature = encodePacked(["bytes", "bytes"], [signature1!, signature2!]) + const signature1 = await account?.signMessage?.({ + message: { raw: dummyUserOpHash } + }) + const signature2 = await recipient?.signMessage?.({ + message: { raw: dummyUserOpHash } + }) + const multiSignature = encodePacked( + ["bytes", "bytes"], + [signature1 ?? "0x", signature2 ?? "0x"] + ) const userOpHash = await nexusClient.sendUserOperation({ calls: [ { @@ -202,16 +224,17 @@ describe("modules.ownableValidator", async () => { signature: multiSignature }) expect(userOpHash).toBeDefined() - const { success: userOpSuccess } = await nexusClient.waitForUserOperationReceipt({ hash: userOpHash }) + const { success: userOpSuccess } = + await nexusClient.waitForUserOperationReceipt({ hash: userOpHash }) expect(userOpSuccess).toBe(true) }) test("should uninstall ownable validator", async () => { - const [installedValidators] = await nexusClient.getInstalledValidators({}); + const [installedValidators] = await nexusClient.getInstalledValidators({}) const prevModule = await nexusClient.getPreviousModule({ module: { address: TEST_CONTRACTS.OwnableValidator.address, - type: "validator", + type: "validator" }, installedValidators }) @@ -247,7 +270,11 @@ describe("modules.ownableValidator", async () => { } ], functionName: "uninstallModule", - args: [parseModuleTypeId("validator"), getAddress(TEST_CONTRACTS.OwnableValidator.address), deInitData] + args: [ + parseModuleTypeId("validator"), + getAddress(TEST_CONTRACTS.OwnableValidator.address), + deInitData + ] }) const userOp = await nexusClient.prepareUserOperation({ @@ -261,9 +288,16 @@ describe("modules.ownableValidator", async () => { const userOpHash = await nexusClient.account.getUserOpHash(userOp) expect(userOpHash).toBeDefined() - const signature1 = await account?.signMessage?.({ message: { raw: userOpHash } }) - const signature2 = await recipient?.signMessage?.({ message: { raw: userOpHash } }) - const multiSignature = encodePacked(["bytes", "bytes"], [signature1!, signature2!]) + const signature1 = await account?.signMessage?.({ + message: { raw: userOpHash } + }) + const signature2 = (await recipient?.signMessage?.({ + message: { raw: userOpHash } + })) as Hex + const multiSignature = encodePacked( + ["bytes", "bytes"], + [signature1 ?? "0x", signature2 ?? "0x"] + ) const uninstallHash = await nexusClient.uninstallModule({ module: { address: TEST_CONTRACTS.OwnableValidator.address, @@ -273,7 +307,8 @@ describe("modules.ownableValidator", async () => { signatureOverride: multiSignature }) expect(uninstallHash).toBeDefined() - const { success: userOpSuccess } = await nexusClient.waitForUserOperationReceipt({ hash: uninstallHash }) + const { success: userOpSuccess } = + await nexusClient.waitForUserOperationReceipt({ hash: uninstallHash }) expect(userOpSuccess).toBe(true) }) }) diff --git a/src/test/callDatas.ts b/src/test/callDatas.ts index 109cee414..037901072 100644 --- a/src/test/callDatas.ts +++ b/src/test/callDatas.ts @@ -1,20 +1,18 @@ import type { Hex } from "viem" -export const TEST_CONTRACTS: Record<string, { chainId: number; name: string; address: Hex }> = { +export const TEST_CONTRACTS: Record< + string, + { chainId: number; name: string; address: Hex } +> = { // Rhinestone Ownables OwnableValidator: { - chainId: 84532, + chainId: 11155111, name: "OwnableValidator", - address: "0xfb11d7ca9161F1DF508787BA45951225B6C0a681" + address: "0x6605F8785E09a245DD558e55F9A0f4A508434503" }, OwnableExecutor: { - chainId: 84532, - name: "OwnableExecutor", - address: "0x989110e958902f619148b8171fbDF1Dca0c5AE0B" - }, - OwnableExecutorSepolia: { chainId: 11155111, - name: "OwnableExecutorSepolia", + name: "OwnableExecutor", address: "0xc98B026383885F41d9a995f85FC480E9bb8bB891" }, // Smart sessions diff --git a/src/test/testUtils.ts b/src/test/testUtils.ts index 12f300ca1..934a0c9a8 100644 --- a/src/test/testUtils.ts +++ b/src/test/testUtils.ts @@ -17,22 +17,22 @@ import { walletActions, zeroAddress } from "viem" +import { createBundlerClient } from "viem/account-abstraction" import { mnemonicToAccount, privateKeyToAccount } from "viem/accounts" import contracts from "../sdk/__contracts" import { getChain, getCustomChain } from "../sdk/account/utils" import { Logger } from "../sdk/account/utils/Logger" +import { createBicoBundlerClient } from "../sdk/clients/createBicoBundlerClient" import { type NexusClient, createNexusClient } from "../sdk/clients/createNexusClient" -import { createBicoBundlerClient } from "../sdk/clients/createBicoBundlerClient" import { ENTRY_POINT_SIMULATIONS_CREATECALL, ENTRY_POINT_V07_CREATECALL, TEST_CONTRACTS } from "./callDatas" import * as hardhatExec from "./executables" -import { createBundlerClient } from "viem/account-abstraction" config() @@ -276,7 +276,8 @@ export const nonZeroBalance = async ( const balance = await getBalance(testClient, address, tokenAddress) if (balance > BigInt(0)) return throw new Error( - `Insufficient balance ${tokenAddress ? `of token ${tokenAddress}` : "of native token" + `Insufficient balance ${ + tokenAddress ? `of token ${tokenAddress}` : "of native token" } during test setup of owner: ${address}` ) } @@ -389,7 +390,8 @@ export const topUp = async ( if (balanceOfRecipient > amount) { Logger.log( - `balanceOfRecipient (${recipient}) already has enough ${token ?? "native token" + `balanceOfRecipient (${recipient}) already has enough ${ + token ?? "native token" } (${balanceOfRecipient}) during safeTopUp` ) return await Promise.resolve()